299 lines
17 KiB
C#
299 lines
17 KiB
C#
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<fl_plugin_freeactivity_info>())
|
||
{
|
||
session.CreateTable<fl_plugin_freeactivity_info>();
|
||
session.AddUnique<fl_plugin_freeactivity_info>("name");
|
||
session.AddIndex<fl_plugin_freeactivity_info>("name");
|
||
}
|
||
if (!session.TableExist<fl_plugin_freeactivity_user_info>())
|
||
session.CreateTable<fl_plugin_freeactivity_user_info>();
|
||
|
||
#endregion
|
||
|
||
//创建配置文件
|
||
Config = this.ReadConfig<Config>();
|
||
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<fl_plugin_freeactivity_info>("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<fl_plugin_freeactivity_info>("name = @name and activity_time_end >= @now", new { name = taskName, now = now }).FirstOrDefault();
|
||
var freeactivity = session.FindSingle<fl_plugin_freeactivity_info>("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<fl_plugin_freeactivity_user_info>("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<fl_plugin_freeactivity_info>("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);
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|