using Api.Framework; using Api.Framework.SDK; using Api.Framework.Tools; using FreeActivity.Entitys; using FreeActivity.Properties; using System; using System.Data; using System.Linq; using System.Text; using System.Text.RegularExpressions; namespace FreeActivity { public class Class1 : Plugin { public Class1() { this.Name = Resources.PluginName; this.Note = Resources.PluginNote; this.Logo = Resources.免单活动; } #region 初始化 #region 自定义变量 public static Config Config; private MainForm mainForm = null; #endregion public override void Start() { try { var session = ApiClient.GetSession(); #region 判断表是否存在,不存在创建表 if (!session.TableExist()) { session.CreateTable(); session.AddUnique("name"); session.AddIndex("name"); } if (!session.TableExist()) session.CreateTable(); #endregion //创建配置文件 Config = this.ReadConfig(); SDK.ReciveIMEvent += SDK_ReciveIMEvent; } catch (Exception ex) { this.OnLog(ex.Message); } } public override void ShowForm() { try { if (mainForm == null || mainForm.IsDisposed) { mainForm = new MainForm(); mainForm.Show(); } mainForm.TopMost = true; mainForm.TopMost = false; } catch (Exception ex) { this.OnLog(ex.Message); } } public override void Stop() { try { if (mainForm != null) { mainForm.CloseForm(); mainForm = null; } } catch (Exception ex) { this.OnLog(ex.Message); } } #endregion private void SDK_ReciveIMEvent(object sender, ReciveIMEvent e) { try { #region 查看任务列表 if (!string.IsNullOrEmpty(Config.ViewTask_CMD) && Regex.IsMatch(e.Message.Trim(), Config.ViewTask_CMD)) { var session = ApiClient.GetSession(); var freeactivity_infos = session.Find("activity_time_end >= @now", new { now = DateTime.Now }); if (freeactivity_infos.Count != 0) { var now = DateTime.Now; var freeactivity_unstart = freeactivity_infos.Where(f => f.activity_time_begin >= now).ToList();//活动未开始 var freeactivity_start = freeactivity_infos.Where(f => f.activity_time_begin < now).ToList();//活动进行中 var unstartStr = new StringBuilder(); var startStr = new StringBuilder(); for (int i = 0; i < freeactivity_unstart.Count; i++) { unstartStr.AppendLine($"{i + 1}、{freeactivity_unstart[i].name}"); } for (int i = 0; i < freeactivity_start.Count; i++) { startStr.AppendLine($"{i + 1}、{freeactivity_start[i].name}"); } e.SendMessage(Config.ViewTaskTips.Replace("[未开始任务列表]", string.IsNullOrEmpty(unstartStr.ToString().Trim()) ? "无" : unstartStr.ToString().Trim()).Replace("[进行中任务列表]", string.IsNullOrEmpty(startStr.ToString().Trim()) ? "无" : startStr.ToString().Trim())); } } #endregion #region 领取任务 var reg = Regex.Match(e.Message.Trim(), Config.GetTask_CMD); if (reg.Success) { var taskName = reg.Groups["任务名"].Value.Trim(); var session = ApiClient.GetSession(); var now = DateTime.Now; //var freeactivity = session.Find("name = @name and activity_time_end >= @now", new { name = taskName, now = now }).FirstOrDefault(); var freeactivity = session.FindSingle("name = @name", new { name = taskName }); if (freeactivity != null) { if (freeactivity.activity_time_end >= now) { if (freeactivity.activity_time_begin <= now) { var freeactivity_user = session.Find("uid = @uid and activityid = @activityid", new { uid = e.GetMemberinfo().id, activityid = freeactivity.id }).FirstOrDefault(); if (freeactivity_user == null) { #region 任务条件 字符串 condition var condition = new StringBuilder(); var mess = freeactivity.condition_relation ? Config.GetTaskSuccessAndTips : Config.GetTaskSuccessOrTips; if (mess.Contains("[任务条件]")) { if (freeactivity.check_ordernum) condition.AppendLine(Config.ViewTaskDetails_OrderNum_ConditionTips.Replace("[订单笔数]", freeactivity.ordernum.ToString())); if (freeactivity.check_pointsum) condition.AppendLine(Config.ViewTaskDetails_PointNum_ConditionTips.Replace("[返利金额]", freeactivity.pointsum.ToString())); if (freeactivity.check_invitenum) condition.AppendLine(Config.ViewTaskDetails_InviteNum_ConditionTips.Replace("[邀请人数]", freeactivity.invitenum.ToString())); } #endregion #region 任务进度 字符串 process var process = new StringBuilder(); var flag = false; bool orderflag = false; if (freeactivity.check_ordernum) { int orderNum = 0; if (Config.ViewTaskDetails_OrderNum_ConditionTips.Contains("[订单笔数]")) { var tbResult = session.FindRow($"select count(*) as count from fl_order_alimama where db_userid = @id and db_status = 1002 and create_time >= @time", new { id = e.GetMemberinfo().id, time = freeactivity.activity_time_begin }); var tbReturnNum = int.Parse(tbResult["count"].ToString()); var jdResult = session.FindRow($"select count(*) as count from fl_order_jingdong where db_userid = @id and db_status = 1002 and orderTime >= @time", new { id = e.GetMemberinfo().id, time = freeactivity.activity_time_begin }); var jdReturnNum = int.Parse(jdResult["count"].ToString()); var pddResult = session.FindRow($"select count(*) as count from fl_order_pinduoduo where db_userid = @id and db_status = 1002 and order_pay_time >= @time", new { id = e.GetMemberinfo().id, time = freeactivity.activity_time_begin }); var pddReturnNum = int.Parse(pddResult["count"].ToString()); orderNum = tbReturnNum + jdReturnNum + pddReturnNum; } if (freeactivity.ordernum <= orderNum) orderflag = true; process.AppendLine(Config.TaskProcess_OrderNumTips.Replace("[订单笔数]", orderNum.ToString())); } bool pointflag = false; if (freeactivity.check_pointsum) { decimal pointSum = 0m; if (Config.ViewTaskDetails_PointNum_ConditionTips.Contains("[返利金额]")) { var pddResult = session.FindRow($"select round(sum(db_userpoint),2) as sum from fl_order_pinduoduo where db_userid = @id and db_status = 1002 and order_pay_time >= @time", new { id = e.GetMemberinfo().id, time = freeactivity.activity_time_begin }); var pddPendingPoint = string.IsNullOrEmpty(pddResult["sum"].ToString()) ? 0m : decimal.Parse(pddResult["sum"].ToString()); var tbResult = session.FindRow($"select round(sum(db_userpoint),2) as sum from fl_order_alimama where db_userid = @id and db_status = 1002 and create_time >= @time", new { id = e.GetMemberinfo().id, time = freeactivity.activity_time_begin }); var tbPendingPoint = string.IsNullOrEmpty(tbResult["sum"].ToString()) ? 0m : decimal.Parse(tbResult["sum"].ToString()); var jdResult = session.FindRow($"select round(sum(db_userpoint),2) as sum from fl_order_jingdong where db_userid = @id and db_status = 1002 and orderTime >= @time", new { id = e.GetMemberinfo().id, time = freeactivity.activity_time_begin }); var jdPendingPoint = string.IsNullOrEmpty(jdResult["sum"].ToString()) ? 0m : decimal.Parse(jdResult["sum"].ToString()); pointSum = pddPendingPoint + tbPendingPoint + jdPendingPoint; } if (freeactivity.pointsum <= (double)pointSum) pointflag = true; process.AppendLine(Config.TaskProcess_PointNumTips.Replace("[返利金额]", pointSum.ToString())); } bool inviteflag = false; if (freeactivity.check_invitenum) { int invitenum = 0; if (Config.ViewTaskDetails_InviteNum_ConditionTips.Contains("[邀请人数]")) { var where = string.Empty; var result = session.FindRow($"select count(*) as count from fl_member_info where inviter_id = @id and crt_time >= @time", new { id = e.GetMemberinfo().id, time = freeactivity.activity_time_begin }); invitenum = int.Parse(result["count"].ToString()); } if (freeactivity.invitenum <= invitenum) inviteflag = true; process.AppendLine(Config.TaskProcess_InviteNumTips.Replace("[邀请人数]", invitenum.ToString())); } if (freeactivity.condition_relation) flag = (freeactivity.check_ordernum ? orderflag : true) && (freeactivity.check_pointsum ? pointflag : true) && (freeactivity.check_invitenum ? inviteflag : true); else flag = orderflag || pointflag || inviteflag; #endregion if (flag)//已经完成,可以兑换 { freeactivity_user = new fl_plugin_freeactivity_user_info() { activityid = freeactivity.id, get_time = DateTime.Now, uid = e.GetMemberinfo().id, exchange_time = DateTime.MinValue, is_exchange = ChooseType.否 }; var value = session.Insertable(freeactivity_user).ExecuteCommand(); e.SendMessage(mess.Replace("[任务名]", freeactivity.name).Replace("[任务条件]", condition.ToString().Trim()).Replace("[任务进度]", process.ToString())); } else { mess = freeactivity.condition_relation ? Config.GetTaskUnSuccessAndTips : Config.GetTaskUnSuccessOrTips; e.SendMessage(mess.Replace("[任务名]", freeactivity.name).Replace("[任务条件]", condition.ToString().Trim()).Replace("[任务进度]", process.ToString())); } } else { //已经参与过改活动 e.SendMessage(Config.GetTaskRepeatTips.Replace("[任务名]", freeactivity.name)); } } else { e.SendMessage(Config.TaskNotStartTips.Replace("[任务名]", freeactivity.name).Replace("[起始检验时间]", freeactivity.activity_time_begin.ToString("yyyy-MM-dd HH:mm:ss")).Replace("[结束检验时间]", freeactivity.activity_time_end.ToString("yyyy-MM-dd HH:mm:ss"))); } } else { e.SendMessage(Config.TaskOutmodedTips.Replace("[任务名]", freeactivity.name)); } } else e.SendMessage(Config.TaskNotExistTips.Replace("[任务名]", taskName)); return; } #endregion #region 查看任务详情 if (!string.IsNullOrEmpty(Config.ViewTaskDetails_CMD)) { reg = Regex.Match(e.Message.Trim(), Config.ViewTaskDetails_CMD); if (reg.Success) { var taskName = reg.Groups["任务名"].Value.Trim(); var session = ApiClient.GetSession(); var freeactivity = session.Find("name = @name", new { name = taskName }).FirstOrDefault(); if (freeactivity != null) { var condition = new StringBuilder(); if (Config.ViewTaskDetailsTips.Contains("[任务条件]")) { if (freeactivity.check_ordernum) condition.AppendLine(Config.ViewTaskDetails_OrderNum_ConditionTips.Replace("[订单笔数]", freeactivity.ordernum.ToString())); if (freeactivity.check_pointsum) condition.AppendLine(Config.ViewTaskDetails_PointNum_ConditionTips.Replace("[返利金额]", freeactivity.pointsum.ToString())); if (freeactivity.check_invitenum) condition.AppendLine(Config.ViewTaskDetails_InviteNum_ConditionTips.Replace("[邀请人数]", freeactivity.invitenum.ToString())); } e.SendMessage(Config.ViewTaskDetailsTips.Replace("[起始检验时间]", freeactivity.activity_time_begin.ToString("yyyy-MM-dd HH:mm:ss")).Replace("[结束检验时间]", freeactivity.activity_time_end.ToString("yyyy-MM-dd HH:mm:ss")).Replace("[免单商品详情]", freeactivity.goods_detail).Replace("[任务条件]", condition.ToString().Trim())); } else e.SendMessage(Config.TaskNotExistTips.Replace("[任务名]", taskName)); return; } } #endregion } catch (Exception ex) { this.OnLog(ex.Message); } } } }