2022-09-20 03:10:29 +00:00
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 )
{
2022-09-26 09:04:23 +00:00
//是否黑名单
if ( ApiClient . IsBlackFlMemberInfo ( e . Member ) )
{
return ;
}
2022-09-20 03:10:29 +00:00
#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
}
}