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(); 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) { //是否黑名单 if (ApiClient.IsBlackFlMemberInfo(e.Member)) { return; } #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(order_ks.db_point) as ItemPoint; #region 下单用户订单检测(防撸) if (e.Customer == null) { var prevent_theft_cache = session.FindSingle("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("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("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(@" {e.Message} => " + stopWatch.Elapsed.TotalSeconds.ToString("0.0000")); //返利消息判断 if (flag) return; } catch (Exception ex) { this.OnLog($"快手返利插件异常.:{ex.Message} - {ex.StackTrace}"); } } #region 变量替换 /// /// 订单状态 提示语替换 /// /// /// /// 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 } }