2022-09-20 03:10:29 +00:00
using Api.Framework ;
using Api.Framework.EntityTmp.Douyin ;
using Api.Framework.Enums ;
using Api.Framework.Events ;
using Api.Framework.Model ;
using Api.Framework.SDK ;
using Api.Framework.Timers ;
using Api.Framework.Tools ;
2023-04-06 01:07:55 +00:00
using Api.Framework.Utils ;
2022-09-20 03:10:29 +00:00
using CsharpHttpHelper ;
using DYRebate.Entitys ;
using Newtonsoft.Json ;
using System ;
using System.Collections.Generic ;
using System.Linq ;
using System.Text.RegularExpressions ;
using System.Threading ;
2023-04-06 01:07:55 +00:00
using Api.Framework.Cps ;
2022-09-20 03:10:29 +00:00
using static DYRebate . Class1 ;
namespace DYRebate
{
public class MessageOperation
{
ReciveIMEvent e = null ;
Class1 plugin = null ;
object sender = null ;
public MessageOperation ( object sender , ReciveIMEvent e , Class1 plugin )
{
this . e = e ;
this . plugin = plugin ;
this . sender = sender ;
}
#region 订 单 绑 定
public bool BindOrderId ( )
{
try
{
#region 抖 音 订 单 绑 定
var orderid = e . Message . Trim ( ) ;
#region 消 息 为 订 单 类 型
if ( Regex . IsMatch ( orderid , @"^\d{19}$" ) )
{
var oid = long . Parse ( orderid ) ;
if ( oid < 4000000000000000000 )
{
return false ;
}
var db = ApiClient . GetSession ( ) ;
var dy_orders_temp = db . Find < fl_order_douyin > ( "select * from fl_order_douyin where order_id = @order_id" , new { order_id = orderid } ) ;
var memberTmp = e . GetMemberinfo ( ) ;
if ( dy_orders_temp ! = null & & dy_orders_temp . Count ! = 0 )
{
var member = dy_orders_temp . FirstOrDefault ( f = > f . db_userid ! = 0 & & f . db_userid ! = memberTmp . id ) ;
if ( member ! = null )
{
//订单已经被他人绑定
e . SendMessage ( Class1 . Config . OccupyOrderErrorTip . Replace ( "[订单号]" , orderid ) ) ;
return true ;
}
var notices = new List < OrderNoticeEvent > ( ) ;
var downDyTimer = new DownDouyinTimer ( ) ;
#region 订 单 用 户 已 经 绑 定 纯 提 示 , 非 结 算 的 订 单 也 提 示 上 级
var bindOrders = dy_orders_temp . Where ( f = > f . db_userid ! = 0 ) . ToList ( ) ;
if ( bindOrders ! = null & & bindOrders . Count ! = 0 )
{
foreach ( var order in bindOrders )
{
var point = HttpHelper . JsonToObject < ItemPoint > ( order . db_point ) as ItemPoint ;
memberTmp = e . GetMemberinfo ( true ) ;
if ( order . db_status = = SystemOrderStatus . 订 单 付 款 )
e . SendMessage ( new VariateReplace ( ) . CommonReplace ( Class1 . Config . OrderRepetBindTip , order , memberTmp , point ) ) ;
else
e . SendMessage ( Class1 . _GetOrderStateMess ( order . db_status , ( order . db_status = = SystemOrderStatus . 订 单 结 算 ? SettleType . 已 结 算 提 示 : SettleType . 未 结 算 提 示 ) , order , memberTmp , point ) ) ;
Thread . Sleep ( 500 ) ;
}
//return;
}
#endregion
#region 订 单 没 有 被 绑 定 ( 两 种 情 况 = > 一 个 订 单 已 经 被 结 算 一 个 是 订 单 未 结 算 )
var notBindOrders = dy_orders_temp . Where ( f = > f . db_userid = = 0 ) . ToList ( ) ;
if ( notBindOrders ! = null & & notBindOrders . Count ! = 0 )
{
if ( HttpExtend . GetDateTime ( notBindOrders [ 0 ] . pay_time . ToString ( ) ) < ApiClient . Setting . SystemConfig . allow_bind_create_order_time )
{
e . SendMessage ( $"订单:{orderid},已经过了有效绑定时间!" ) ;
return true ;
}
foreach ( var order in notBindOrders )
{
if ( order . db_status = = SystemOrderStatus . 订 单 结 算 )
order . db_endtime = DateTime . Now . AddMinutes ( - 5 ) ; //重新结算的话,需要将订单的冻结时间重新赋值,让后台处理
//没有绑定用户的订单进行绑定
order . db_userid = memberTmp . id ;
order . db_robotname = e . RobotName ;
order . db_robottype = e . RobotInfo . type ;
order . msg_groupid = e . Groupid ;
#region 手 动 绑 定 , 重 新 计 算 用 户 的 返 利 积 分
//查询历史查询比例
var compute = db . FindQueryRatioHist ( CpsType . 抖 音 联 盟 , order . id ) ;
if ( compute = = null )
{
var query_item = db . FindSingle < fl_query_hist > ( "select * from fl_query_hist where userid = @userid and itemid = @itemid and adzoneid = @adzoneid order by id desc" , new { userid = e . GetMemberinfo ( ) . id , itemid = order . product_id , adzoneid = order . db_cpsname } ) ;
//计算公式不为空
if ( query_item ! = null & & ! string . IsNullOrWhiteSpace ( query_item . compute_configdic ) )
{
try
{
compute = JsonConvert . DeserializeObject < Compute > ( query_item . compute_configdic ) ;
var queryRatioHist = new fl_query_ratio_hist ( )
{
compute_config = query_item . compute_configdic ,
db_orderid = order . id ,
createtime = DateTime . Now ,
cpstype = CpsType . 抖 音 联 盟
} ;
db . SaveOrUpdate ( queryRatioHist ) ;
}
catch ( Exception ex )
{
EventClient . OnEvent ( "抖音计算" , $"获取历史查询比异常:{ex.Message}" ) ;
}
}
}
ItemPoint itempoint = null ;
//计算的佣金
if ( compute ! = null )
itempoint = db . FindItemPoint ( CpsType . 抖 音 联 盟 , compute , Util . ConvertDouble_FenToYuan ( order . estimated_comission ) , 1 ) ;
else
itempoint = db . FindItemPoint ( memberTmp , Util . ConvertDouble_FenToYuan ( order . estimated_comission ) , 1 , CpsType . 抖 音 联 盟 ) ;
if ( itempoint ! = null )
{
order . db_point = HttpHelper . ObjectToJson ( itempoint ) ;
order . db_userpoint = itempoint . UserPoint ;
}
#endregion
#region 用 户 的 完 成 订 单 数 量 加 1
if ( memberTmp ! = null )
{
memberTmp . bind_order + + ;
memberTmp = db . UpdateMemberGroup ( memberTmp ) ;
}
#endregion
#region 首 次 付 款 时 间
var record = db . FindStatisticsRecord ( memberTmp . id ) ;
if ( record = = null )
{
record = new fl_statistics_record ( ) { uid = memberTmp . id , ex2 = 0 , ex4 = HttpExtend . GetTimeStamp ( DateTime . Now ) } ;
db . Saveable ( record ) . ExecuteCommand ( ) ;
}
else
{
if ( record . ex2 = = 0 & & record . ex4 = = 0 )
{
record . ex4 = HttpExtend . GetTimeStamp ( DateTime . Now ) ;
db . Saveable ( record ) . ExecuteCommand ( ) ;
}
}
#endregion
db . SaveOrUpdate ( order ) ;
downDyTimer . UpdateOrder ( order , notices , db , isFrontData : true ) ;
}
}
#endregion
#region 触 发 通 知 上 级 获 得 下 级 的 提 成 奖 励
if ( ! ApiClient . Setting . SystemConfig . message_warning_switch & & notices . Count ! = 0 )
{
var tasks = TimerTask . GetTimer < Update_NoticeQueue > ( ) as Update_NoticeQueue ;
foreach ( var item in notices )
{
//if (item.IsRewards)
tasks . Add ( item ) ;
//else
//plugin.SDK_OrderNoticeEvent(this, item);
}
}
#endregion
}
else
{
#region 未 找 到 订 单 , 提 示 用 户 并 且 加 入 绑 定 缓 存 中
e . SendMessage ( Class1 . Config . NotFoundOrderErrorTip . Replace ( "[订单号]" , orderid ) ) ;
var bind = db . FindBindCache ( orderid ) ;
if ( bind = = null )
{
db . Insertable ( new fl_bind_cache ( ) { crt_time = DateTime . Now , db_robotid = e . RobotInfo . id , orderid = orderid , groupid = e . Groupid , db_userid = memberTmp . id } ) . ExecuteCommand ( ) ;
db . FindBindCache ( orderid , true ) ;
}
#endregion
}
//消息已经处理完成,将不往后面的插件传递
e . Cancel = true ;
return true ;
}
#endregion
//判断消息是否是其他cps平台的订单号
if ( OrderHelper . IsOrderId ( e . Message . Trim ( ) ) )
return true ;
#endregion
}
catch ( Exception ex )
{
plugin . OnLog ( $"手动绑定订单号异常:{ex.Message}_{ex.StackTrace}" ) ;
}
return false ;
}
#endregion
2023-04-06 01:07:55 +00:00
/// <summary>
/// 抖客判断
/// </summary>
/// <returns></returns>
public CpsInfo DouKe ( )
2022-09-20 03:10:29 +00:00
{
try
{
var db = ApiClient . GetSession ( ) ;
2023-04-06 01:07:55 +00:00
var dkefoTemps = db . FindDkInfoTempGroups ( ) ;
var dyInfoTemp = dkefoTemps . FirstOrDefault ( f = > f . name = = e . RobotInfo . name & & f . onoff = = false ) ;
if ( dyInfoTemp = = null )
{
return null ;
}
2022-09-20 03:10:29 +00:00
2023-04-06 01:07:55 +00:00
var memberTmp = e . GetMemberinfo ( ) ;
2022-09-20 03:10:29 +00:00
//推广位
var pid = string . Empty ;
fl_cps_member dy_cps = null ;
var isDefault = true ;
if ( ! string . IsNullOrWhiteSpace ( e . Groupid ) ) //群pid
{
2023-04-06 01:07:55 +00:00
var groupAdzone = db . FindAdzoneInfos ( ) . FirstOrDefault ( f = > f . alliance_id = = ( int ) CpsType . 抖 客 联 盟 & & f . custom_type = = PrivateAdzoneCustomType . 群 pid . ToString ( ) & & f . group_id = = e . Groupid ) ;
2022-09-20 03:10:29 +00:00
if ( groupAdzone ! = null & & ! string . IsNullOrWhiteSpace ( groupAdzone . adzone_pid ) )
{
pid = groupAdzone . adzone_pid ;
2023-04-06 01:07:55 +00:00
dy_cps = CpsClient . Members . FirstOrDefault ( f = > f . cpstype = = CpsType . 抖 客 联 盟 & & f . username = = groupAdzone . adzone_pid_cps_name ) ;
2022-09-20 03:10:29 +00:00
isDefault = false ;
}
}
if ( isDefault ) //私人pid
{
2023-04-06 01:07:55 +00:00
var memberAdzone = db . FindAdzoneInfos ( ) . FirstOrDefault ( f = > f . alliance_id = = ( int ) CpsType . 抖 客 联 盟 & & f . custom_type = = PrivateAdzoneCustomType . 用 户 私 人 pid . ToString ( ) & & f . member_id = = memberTmp . id ) ;
2022-09-20 03:10:29 +00:00
if ( memberAdzone ! = null & & ! string . IsNullOrWhiteSpace ( memberAdzone . adzone_pid ) ) //私人推广位
{
pid = memberAdzone . adzone_pid ;
2023-04-06 01:07:55 +00:00
dy_cps = CpsClient . Members . FirstOrDefault ( f = > f . cpstype = = CpsType . 抖 客 联 盟 & & f . username = = memberAdzone . adzone_pid_cps_name ) ;
2022-09-20 03:10:29 +00:00
isDefault = false ;
}
}
if ( isDefault ) //默认推广位
{
2023-04-06 01:07:55 +00:00
dy_cps = CpsClient . Members . FirstOrDefault ( f = > f . cpstype = = CpsType . 抖 客 联 盟 & & f . username = = ( ( memberTmp . buy_point > = Class1 . Config . Point & & memberTmp . finish_order > = Class1 . Config . OrderNum ) ? dyInfoTemp . pid_chief_cps_name : dyInfoTemp . pid_deputy_cps_name ) ) ; //通过判断用户的购物积分,来判断用户使用哪个推广位
2022-09-20 03:10:29 +00:00
pid = ( ( memberTmp . buy_point > = Class1 . Config . Point & & memberTmp . finish_order > = Class1 . Config . OrderNum ) ? dyInfoTemp . pid_chief : dyInfoTemp . pid_deputy ) ;
}
2023-04-06 01:07:55 +00:00
if ( dy_cps = = null )
2022-09-20 03:10:29 +00:00
{
2023-04-06 01:07:55 +00:00
throw new Exception ( "抖音推广位设置异常,请检测后重试!" ) ;
}
2022-09-20 03:10:29 +00:00
2023-04-06 01:07:55 +00:00
var api = CpsClient . CreateDouyinRequestV3 ( dy_cps ) ;
2022-09-20 03:10:29 +00:00
2023-04-06 01:07:55 +00:00
if ( api = = null )
{
throw new Exception ( "@创建抖音API请求失败" ) ;
}
2022-09-20 03:10:29 +00:00
2023-04-06 01:07:55 +00:00
return new CpsInfo ( )
{
api = api ,
DyCps = dy_cps ,
Pid = pid
} ;
}
catch ( Exception ex )
{
this . plugin . OnLog ( "抖客判断" + ex . Message ) ;
}
return null ;
}
2022-09-20 03:10:29 +00:00
2023-04-06 01:07:55 +00:00
/// <summary>
/// 达人判断
/// </summary>
/// <returns></returns>
public CpsInfo DaRen ( )
{
try
{
var db = ApiClient . GetSession ( ) ;
2022-09-20 03:10:29 +00:00
2023-04-06 01:07:55 +00:00
var dyinfoTemps = db . FindDyInfoTempGroups ( ) ;
var dyInfoTemp = dyinfoTemps . FirstOrDefault ( f = > f . name = = e . RobotInfo . name & & f . onoff = = false ) ;
if ( dyInfoTemp = = null )
{
return null ;
}
2022-09-20 03:10:29 +00:00
2023-04-06 01:07:55 +00:00
var memberTmp = e . GetMemberinfo ( ) ;
2022-09-20 03:10:29 +00:00
2023-04-06 01:07:55 +00:00
//推广位
var pid = string . Empty ;
2022-09-20 03:10:29 +00:00
2023-04-06 01:07:55 +00:00
fl_cps_member dy_cps = null ;
var isDefault = true ;
2022-09-20 03:10:29 +00:00
2023-04-06 01:07:55 +00:00
if ( ! string . IsNullOrWhiteSpace ( e . Groupid ) ) //群pid
{
var groupAdzone = db . FindAdzoneInfos ( ) . FirstOrDefault ( f = > f . alliance_id = = ( int ) CpsType . 抖 音 联 盟 & & f . custom_type = = PrivateAdzoneCustomType . 群 pid . ToString ( ) & & f . group_id = = e . Groupid ) ;
if ( groupAdzone ! = null & & ! string . IsNullOrWhiteSpace ( groupAdzone . adzone_pid ) )
2022-09-20 03:10:29 +00:00
{
2023-04-06 01:07:55 +00:00
pid = groupAdzone . adzone_pid ;
dy_cps = CpsClient . Members . FirstOrDefault ( f = > f . cpstype = = CpsType . 抖 音 联 盟 & & f . username = = groupAdzone . adzone_pid_cps_name ) ;
isDefault = false ;
2022-09-20 03:10:29 +00:00
}
2023-04-06 01:07:55 +00:00
}
2022-09-20 03:10:29 +00:00
2023-04-06 01:07:55 +00:00
if ( isDefault ) //私人pid
{
var memberAdzone = db . FindAdzoneInfos ( ) . FirstOrDefault ( f = > f . alliance_id = = ( int ) CpsType . 抖 音 联 盟 & & f . custom_type = = PrivateAdzoneCustomType . 用 户 私 人 pid . ToString ( ) & & f . member_id = = memberTmp . id ) ;
if ( memberAdzone ! = null & & ! string . IsNullOrWhiteSpace ( memberAdzone . adzone_pid ) ) //私人推广位
2022-09-20 03:10:29 +00:00
{
2023-04-06 01:07:55 +00:00
pid = memberAdzone . adzone_pid ;
dy_cps = CpsClient . Members . FirstOrDefault ( f = > f . cpstype = = CpsType . 抖 音 联 盟 & & f . username = = memberAdzone . adzone_pid_cps_name ) ;
isDefault = false ;
2022-09-20 03:10:29 +00:00
}
2023-04-06 01:07:55 +00:00
}
2022-09-20 03:10:29 +00:00
2023-04-06 01:07:55 +00:00
if ( isDefault ) //默认推广位
{
dy_cps = CpsClient . Members . FirstOrDefault ( f = > f . cpstype = = CpsType . 抖 音 联 盟 & & f . username = = ( ( memberTmp . buy_point > = Class1 . Config . Point & & memberTmp . finish_order > = Class1 . Config . OrderNum ) ? dyInfoTemp . pid_chief_cps_name : dyInfoTemp . pid_deputy_cps_name ) ) ; //通过判断用户的购物积分,来判断用户使用哪个推广位
pid = ( ( memberTmp . buy_point > = Class1 . Config . Point & & memberTmp . finish_order > = Class1 . Config . OrderNum ) ? dyInfoTemp . pid_chief : dyInfoTemp . pid_deputy ) ;
}
2022-09-20 03:10:29 +00:00
2023-04-06 01:07:55 +00:00
if ( dy_cps = = null )
{
throw new Exception ( "抖音推广位设置异常,请检测后重试!" ) ;
}
2022-09-20 03:10:29 +00:00
2023-04-06 01:07:55 +00:00
var api = CpsClient . CreateDouyinRequest ( dy_cps ) ;
2022-09-20 03:10:29 +00:00
2023-04-06 01:07:55 +00:00
if ( api = = null )
2022-09-20 03:10:29 +00:00
{
2023-04-06 01:07:55 +00:00
throw new Exception ( "@创建抖音API请求失败" ) ;
2022-09-20 03:10:29 +00:00
}
2023-04-06 01:07:55 +00:00
return new CpsInfo ( )
{
DyCps = dy_cps ,
Pid = pid ,
api = api
} ;
2022-09-20 03:10:29 +00:00
}
catch ( Exception ex )
{
2023-04-06 01:07:55 +00:00
this . plugin . OnLog ( "达人判断" + ex . Message ) ;
}
return null ;
}
public bool AnalyseFanLi ( )
{
var cpsInfo = DouKe ( ) ;
if ( cpsInfo ! = null )
{
var douke = new DouKeHandle ( sender , e , this . plugin ) ;
var flag = douke . Invok ( cpsInfo ) ;
return flag ;
}
2022-09-20 03:10:29 +00:00
2023-04-06 01:07:55 +00:00
cpsInfo = DaRen ( ) ;
if ( cpsInfo ! = null )
{
var douke = new DaRenHandle ( sender , e , this . plugin ) ;
var flag = douke . Invok ( cpsInfo ) ;
return flag ;
2022-09-20 03:10:29 +00:00
}
2023-04-06 01:07:55 +00:00
2022-09-20 03:10:29 +00:00
return false ;
}
}
2023-04-06 01:07:55 +00:00
public class CpsInfo
{
public BaseCpsApi api { get ; set ; }
public fl_cps_member DyCps { get ; set ; }
public string Pid { get ; set ; }
}
2022-09-20 03:10:29 +00:00
}