484 lines
27 KiB
C#
484 lines
27 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using Api.Framework;
|
|
using Api.Framework.Cps;
|
|
using Api.Framework.Enums;
|
|
using Api.Framework.Events;
|
|
using Api.Framework.Model;
|
|
using Api.Framework.SDK;
|
|
using Api.Framework.Tools;
|
|
using Chat.Framework;
|
|
using Chat.Framework.WXSdk;
|
|
using Chat.Framework.WXSdk.Implement;
|
|
using CsharpHttpHelper;
|
|
using KSRebate.Properties;
|
|
|
|
namespace KSRebate
|
|
{
|
|
public class Class1 : Plugin
|
|
{
|
|
public Class1()
|
|
{
|
|
this.Logo = Resources.快手;
|
|
this.Name = Resources.PluginName;
|
|
this.Note = Resources.PluginNote;
|
|
}
|
|
|
|
#region 自定义变量
|
|
public static Config Config;
|
|
private MainForm mainForm = null;
|
|
#endregion
|
|
|
|
public override void Start()
|
|
{
|
|
try
|
|
{
|
|
//创建配置文件
|
|
Config = this.ReadConfig<Config>();
|
|
|
|
SDK.ReciveIMEvent += SDK_ReciveIMEvent;
|
|
SDK.OrderNoticeEvent += SDK_OrderNoticeEvent;
|
|
}
|
|
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);
|
|
}
|
|
}
|
|
|
|
public void SDK_OrderNoticeEvent(object sender, OrderNoticeEvent e)
|
|
{
|
|
try
|
|
{
|
|
if (e.ChatType == CpsType.快手联盟)
|
|
{
|
|
var session = ApiClient.GetSession();
|
|
//订单信息
|
|
var order_ks = e.Order as fl_order_kuaishou;
|
|
|
|
if (order_ks == null) return;
|
|
|
|
if (e.Member != null)
|
|
{
|
|
#region 订单变化通知消息
|
|
var robot_info = session.FindRobotInfo(e.Member.robot_name.Trim(), e.Member.robot_type);
|
|
if (robot_info != null)
|
|
{
|
|
var mess = string.Empty;
|
|
var point = HttpHelper.JsonToObject<ItemPoint>(order_ks.db_point) as ItemPoint;
|
|
#region 下单用户订单检测(防撸)
|
|
if (e.Customer == null)
|
|
{
|
|
var prevent_theft_cache = session.FindSingle<fl_prevent_theft_cache>("select * from fl_prevent_theft_cache where order_id = @order_id", new { order_id = order_ks.oid });//防止上级多次触发
|
|
if (prevent_theft_cache == null)
|
|
{
|
|
var isHint = false;
|
|
if (order_ks.sellerId != 0 && e.Member.status != MemberType.白名单)
|
|
{
|
|
#region 同一店铺多次购买(同一商品)
|
|
if (Class1.Config.AShop_SameCommodity_Switch)
|
|
{
|
|
var frequency = session.Find<fl_order_kuaishou>("select * from fl_order_kuaishou where db_userid = @db_userid and itemId = @itemId", new { db_userid = order_ks.db_userid, itemId = order_ks.itemId }).Count;//获取同价店铺同一件商品购买的次数
|
|
if (Class1.Config.AShop_SameCommodity_Number <= frequency)
|
|
{
|
|
if (Class1.Config.AShop_SameCommodity_OperateType == OperateType.拉入黑名单)
|
|
{
|
|
if (!session.TemporaryBypassedBlack(e.Member))
|
|
{
|
|
e.Member.status = MemberType.黑名单; //拉入黑名单
|
|
session.SaveOrUpdate(e.Member);
|
|
session.FindBlacklistMemberInfos(true);//刷新黑名单缓存
|
|
|
|
ApiClient.SendMessage(robot_info, e.Member.username, new VariateReplace().CommonReplace(Config.Blocked_RestrictTip, order_ks, e.Member, point), order_ks.msg_groupid);
|
|
|
|
ApiClient.SendNoticeMessage($@"嫌疑用户拉黑
|
|
————
|
|
事件类型:订单检测
|
|
微信账号:{robot_info.name}
|
|
微信昵称:{robot_info.nick}
|
|
客户账号:{e.Member.username}
|
|
客户昵称:{e.Member.usernick}
|
|
拉黑原因:用户购买同一商品{frequency}次", Config.notice_robotname);
|
|
e.Cancel = true;
|
|
|
|
{
|
|
prevent_theft_cache = new fl_prevent_theft_cache();
|
|
prevent_theft_cache.operate_type = Class1.Config.AShop_SameCommodity_OperateType;
|
|
prevent_theft_cache.member_id = e.Member.id;
|
|
prevent_theft_cache.item_id = order_ks.itemId.ToString();
|
|
prevent_theft_cache.mall_id = order_ks.sellerId.ToString();
|
|
prevent_theft_cache.order_id = order_ks.oid.ToString();
|
|
prevent_theft_cache.cps_type = CpsType.快手联盟;
|
|
session.Insertable(prevent_theft_cache).ExecuteCommand();
|
|
}
|
|
|
|
if (Config.AShop_SameCommodity_UserTop)
|
|
{
|
|
if (robot_info.type == ChatType.微信)
|
|
{
|
|
var wx = ChatClient.WXClient.Values.FirstOrDefault(f => f.WeixinHao == robot_info.name);
|
|
if (wx != null)
|
|
wx.EditContacts(e.Member.username, EditContactsType.置顶, e.Member.usernick);
|
|
}
|
|
}
|
|
|
|
return;
|
|
}
|
|
}
|
|
else if (Class1.Config.AShop_SameCommodity_OperateType == OperateType.通知钉钉群)
|
|
{
|
|
ApiClient.SendNoticeMessage($@"嫌疑用户警告
|
|
————
|
|
事件类型:订单检测
|
|
微信账号:{robot_info.name}
|
|
微信昵称:{robot_info.nick}
|
|
客户账号:{e.Member.username}
|
|
客户昵称:{e.Member.usernick}
|
|
警告原因:用户购买同一商品{frequency}次", Config.notice_robotname);
|
|
isHint = true;
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region 同一店铺多次购买(不同商品)
|
|
if (!isHint && Class1.Config.AShop_DifferentCommodity_Switch)
|
|
{
|
|
var frequency = session.Find<fl_order_kuaishou>("select * from fl_order_kuaishou where db_userid = @db_userid and sellerId = @sellerId", new { db_userid = order_ks.db_userid, sellerId = order_ks.sellerId }).Count;
|
|
if (Class1.Config.AShop_DifferentCommodity_Number <= frequency)
|
|
{
|
|
if (Class1.Config.AShop_DifferentCommodity_OperateType == OperateType.拉入黑名单)
|
|
{
|
|
if (!session.TemporaryBypassedBlack(e.Member))
|
|
{
|
|
e.Member.status = MemberType.黑名单; //拉入黑名单
|
|
session.SaveOrUpdate(e.Member);
|
|
session.FindBlacklistMemberInfos(true);//刷新黑名单缓存
|
|
|
|
ApiClient.SendMessage(robot_info, e.Member.username, new VariateReplace().CommonReplace(Config.Blocked_RestrictTip, order_ks, e.Member, point), order_ks.msg_groupid);
|
|
|
|
ApiClient.SendNoticeMessage($@"嫌疑用户拉黑
|
|
————
|
|
事件类型:订单检测
|
|
微信账号:{robot_info.name}
|
|
微信昵称:{robot_info.nick}
|
|
客户账号:{e.Member.username}
|
|
客户昵称:{e.Member.usernick}
|
|
拉黑原因:用户在同家店铺购买{frequency}次", Config.notice_robotname);
|
|
e.Cancel = true;
|
|
|
|
{
|
|
prevent_theft_cache = new fl_prevent_theft_cache();
|
|
prevent_theft_cache.operate_type = Class1.Config.AShop_DifferentCommodity_OperateType;
|
|
prevent_theft_cache.member_id = e.Member.id;
|
|
prevent_theft_cache.item_id = order_ks.itemId.ToString();
|
|
prevent_theft_cache.mall_id = order_ks.sellerId.ToString();
|
|
prevent_theft_cache.order_id = order_ks.oid.ToString();
|
|
prevent_theft_cache.cps_type = CpsType.快手联盟;
|
|
session.Insertable(prevent_theft_cache).ExecuteCommand();
|
|
}
|
|
|
|
if (Config.AShop_DifferentCommodity_UserTop)
|
|
{
|
|
if (robot_info.type == ChatType.微信)
|
|
{
|
|
var wx = ChatClient.WXClient.Values.FirstOrDefault(f => f.WeixinHao == robot_info.name);
|
|
if (wx != null)
|
|
wx.EditContacts(e.Member.username, EditContactsType.置顶, e.Member.usernick);
|
|
}
|
|
}
|
|
|
|
return;
|
|
}
|
|
}
|
|
else if (Class1.Config.AShop_DifferentCommodity_OperateType == OperateType.通知钉钉群)
|
|
{
|
|
ApiClient.SendNoticeMessage($@"嫌疑用户警告
|
|
————
|
|
事件类型:订单检测
|
|
微信账号:{robot_info.name}
|
|
微信昵称:{robot_info.nick}
|
|
客户账号:{e.Member.username}
|
|
客户昵称:{e.Member.usernick}
|
|
警告原因:用户在同家店铺购买{frequency}次", Config.notice_robotname);
|
|
isHint = true;
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
}
|
|
|
|
#region 收货时间验证时长
|
|
if (!isHint && Class1.Config.ReceivingTimeCheck_Switch && (order_ks.cpsOrderStatus == CpsOrderStatus.已收货 || order_ks.cpsOrderStatus == CpsOrderStatus.已结算) && e.Member.status != MemberType.白名单)
|
|
{
|
|
if (order_ks.settlementSuccessTime != DateTime.MinValue)
|
|
{
|
|
var timeLag = (int)Math.Floor((order_ks.settlementSuccessTime - order_ks.payTime).TotalHours);
|
|
if (timeLag <= Class1.Config.ReceivingTimeCheck_Hour)
|
|
{
|
|
if (Class1.Config.ReceivingTimeCheck_OperateType == OperateType.拉入黑名单)
|
|
{
|
|
if (!session.TemporaryBypassedBlack(e.Member))
|
|
{
|
|
e.Member.status = MemberType.黑名单; //拉入黑名单
|
|
session.SaveOrUpdate(e.Member);
|
|
session.FindBlacklistMemberInfos(true);//刷新黑名单缓存
|
|
|
|
ApiClient.SendMessage(robot_info, e.Member.username, new VariateReplace().CommonReplace(Config.Blocked_RestrictTip, order_ks, e.Member, point), order_ks.msg_groupid);
|
|
|
|
ApiClient.SendNoticeMessage($@"嫌疑用户拉黑
|
|
————
|
|
事件类型:订单检测
|
|
微信账号:{robot_info.name}
|
|
微信昵称:{robot_info.nick}
|
|
客户账号:{e.Member.username}
|
|
客户昵称:{e.Member.usernick}
|
|
拉黑原因:订单收货时间间隔{timeLag}小时", Config.notice_robotname);
|
|
e.Cancel = true;
|
|
{
|
|
prevent_theft_cache = new fl_prevent_theft_cache();
|
|
prevent_theft_cache.operate_type = Class1.Config.ReceivingTimeCheck_OperateType;
|
|
prevent_theft_cache.member_id = e.Member.id;
|
|
prevent_theft_cache.item_id = order_ks.itemId.ToString();
|
|
prevent_theft_cache.mall_id = order_ks.sellerId.ToString();
|
|
prevent_theft_cache.order_id = order_ks.oid.ToString();
|
|
prevent_theft_cache.cps_type = CpsType.快手联盟;
|
|
session.Insertable(prevent_theft_cache).ExecuteCommand();
|
|
}
|
|
|
|
if (Config.ReceivingTimeCheck_UserTop)
|
|
{
|
|
if (robot_info.type == ChatType.微信)
|
|
{
|
|
var wx = ChatClient.WXClient.Values.FirstOrDefault(f => f.WeixinHao == robot_info.name);
|
|
if (wx != null)
|
|
wx.EditContacts(e.Member.username, EditContactsType.置顶, e.Member.usernick);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
else if (Class1.Config.ReceivingTimeCheck_OperateType == OperateType.通知钉钉群)
|
|
{
|
|
ApiClient.SendNoticeMessage($@"嫌疑用户警告
|
|
————
|
|
事件类型:订单检测
|
|
微信账号:{robot_info.name}
|
|
微信昵称:{robot_info.nick}
|
|
客户账号:{e.Member.username}
|
|
客户昵称:{e.Member.usernick}
|
|
警告原因:订单收货时间间隔{timeLag}小时", Config.notice_robotname);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
switch (e.OrderNoticeType)
|
|
{
|
|
case OrderNoticeType.客户订单:
|
|
{
|
|
if (Config.UserOrderChangeSwitch == SwitchType.开启 && !ApiClient.Setting.SystemConfig.message_warning_switch)
|
|
{
|
|
mess = _GetOrderStateMess(order_ks.db_status, order_ks, e.Member, point);
|
|
|
|
if (!string.IsNullOrEmpty(e.Member.username) && !string.IsNullOrEmpty(mess))
|
|
ApiClient.SendMessage(robot_info, e.Member.username, mess, order_ks.msg_groupid);
|
|
}
|
|
}
|
|
return;
|
|
case OrderNoticeType.一级提成:
|
|
if (Config.AgentReceivedCommissionSwitch == SwitchType.开启)
|
|
{
|
|
if (e.Customer != null && point.AwardOne != 0)
|
|
{
|
|
if (order_ks.db_status == SystemOrderStatus.全额退款)
|
|
mess = Config.ClientOrderRefund_OneLevelTip;
|
|
if (order_ks.db_status == SystemOrderStatus.订单付款)
|
|
mess = Config.OrderPaymentInform_OneLevelTip;
|
|
else if (order_ks.db_status == SystemOrderStatus.订单失效)
|
|
mess = Config.OrderCountermandInform_OneLevelTip;
|
|
else if (order_ks.db_status == SystemOrderStatus.订单结算)
|
|
mess = Config.OrderSettlement_OneLevelTip;
|
|
}
|
|
}
|
|
break;
|
|
case OrderNoticeType.二级提成:
|
|
if (Config.AgentReceivedCommissionSwitch == SwitchType.开启)
|
|
{
|
|
if (e.Customer != null)
|
|
{
|
|
if (order_ks.db_status == SystemOrderStatus.全额退款)
|
|
mess = Config.ClientOrderRefund_TwoLevelTip;
|
|
if (order_ks.db_status == SystemOrderStatus.订单付款)
|
|
mess = Config.OrderPaymentInform_TwoLevelTip;
|
|
else if (order_ks.db_status == SystemOrderStatus.订单失效)
|
|
mess = Config.OrderCountermandInform_TwoLevelTip;
|
|
else if (order_ks.db_status == SystemOrderStatus.订单结算)
|
|
mess = Config.OrderSettlement_TwoLevelTip;
|
|
}
|
|
}
|
|
break;
|
|
case OrderNoticeType.三级提成:
|
|
if (Config.AgentReceivedCommissionSwitch == SwitchType.开启)
|
|
{
|
|
if (e.Customer != null)
|
|
{
|
|
if (order_ks.db_status == SystemOrderStatus.全额退款)
|
|
mess = Config.ClientOrderRefund_ThreeLevelTip;
|
|
if (order_ks.db_status == SystemOrderStatus.订单付款)
|
|
mess = Config.OrderPaymentInform_ThreeLevelTip;
|
|
else if (order_ks.db_status == SystemOrderStatus.订单失效)
|
|
mess = Config.OrderCountermandInform_ThreeLevelTip;
|
|
else if (order_ks.db_status == SystemOrderStatus.订单结算)
|
|
mess = Config.OrderSettlement_ThreeLevelTip;
|
|
}
|
|
}
|
|
break;
|
|
case OrderNoticeType.群主分成:
|
|
if (Config.PrincipalReceivedCommissionSwitch == SwitchType.开启)
|
|
{
|
|
if (e.Customer != null)
|
|
{
|
|
if (order_ks.db_status == SystemOrderStatus.全额退款)
|
|
mess = Config.ClientOrderRefund_LeaderTip;
|
|
if (order_ks.db_status == SystemOrderStatus.订单付款)
|
|
mess = Config.OrderPaymentInform_LeaderTip;
|
|
else if (order_ks.db_status == SystemOrderStatus.订单失效)
|
|
mess = Config.OrderCountermandInform_LeaderTip;
|
|
else if (order_ks.db_status == SystemOrderStatus.订单结算)
|
|
mess = Config.OrderSettlement_LeaderTip;
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if (!ApiClient.Setting.SystemConfig.message_warning_switch && !string.IsNullOrEmpty(e.Member.username) && !string.IsNullOrWhiteSpace(mess))
|
|
ApiClient.SendMessage(robot_info, e.Member.username, new VariateReplace().CommonReplace(mess, order_ks, e.Member, point).Replace("[下级昵称]", e.Customer.realnick ?? ""));
|
|
}
|
|
#endregion
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
this.OnLog(ex.Message);
|
|
}
|
|
}
|
|
|
|
private void SDK_ReciveIMEvent(object sender, ReciveIMEvent e)
|
|
{
|
|
try
|
|
{
|
|
//过滤表情xml和卡片xml
|
|
if ((e.Message.Contains(@"<appmsg appid=") || e.Message.Contains(@"<msg><emoji") || e.Message.StartsWith("[声音=")) && !e.Message.Contains(@"快手")) return;
|
|
if (!OrderHelper.IsCurrentCpsMess(e.Message, CpsType.快手联盟)) return;
|
|
var session = ApiClient.GetSession();
|
|
var _member = e.GetMemberinfo();
|
|
|
|
var mOper = new MessageOperation(sender, e, this);
|
|
|
|
//手动发送订单号绑定
|
|
if (mOper.BindOrderId()) return;
|
|
|
|
//var stopWatch = new Stopwatch();
|
|
//stopWatch.Start();
|
|
var flag = mOper.AnalyseFanLi();
|
|
//stopWatch.Stop();
|
|
//this.OnLog($"用时间 {e.NickName}({e.Username}) => {e.Message} => " + stopWatch.Elapsed.TotalSeconds.ToString("0.0000"));
|
|
//返利消息判断
|
|
if (flag) return;
|
|
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
this.OnLog($"快手返利插件异常.:{ex.Message} - {ex.StackTrace}");
|
|
}
|
|
}
|
|
|
|
#region 变量替换
|
|
/// <summary>
|
|
/// 订单状态 提示语替换
|
|
/// </summary>
|
|
/// <param name="order"></param>
|
|
/// <param name="objs"></param>
|
|
/// <returns></returns>
|
|
public static string _GetOrderStateMess(SystemOrderStatus order, params object[] objs)
|
|
{
|
|
|
|
var mess = string.Empty;
|
|
switch (order)
|
|
{
|
|
case SystemOrderStatus.订单付款:
|
|
mess = new VariateReplace().CommonReplace(Class1.Config.OrderPaymentTip, objs);
|
|
break;
|
|
case SystemOrderStatus.订单失效:
|
|
mess = new VariateReplace().CommonReplace(Class1.Config.OrderFailureTip, objs);
|
|
break;
|
|
case SystemOrderStatus.全额退款:
|
|
mess = new VariateReplace().CommonReplace(Class1.Config.OrderRefundTip, objs);
|
|
break;
|
|
case SystemOrderStatus.部分退款:
|
|
case SystemOrderStatus.订单维权中:
|
|
//mess = new VariateReplace().CommonReplace(Class1.Config.OrderRefundTip, objs);
|
|
break;
|
|
case SystemOrderStatus.订单结算:
|
|
mess = new VariateReplace().CommonReplace(Class1.Config.OrderSettlementTip, objs);
|
|
break;
|
|
case SystemOrderStatus.订单冻结:
|
|
mess = new VariateReplace().CommonReplace(Class1.Config.OrderFreezeTip, objs);
|
|
break;
|
|
}
|
|
return mess;
|
|
}
|
|
#endregion
|
|
|
|
|
|
}
|
|
|
|
}
|