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);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|