2022-09-20 03:10:29 +00:00
using Api.Framework.Cps ;
using Api.Framework.EntityTmp.Douyin ;
using Api.Framework.Enums ;
using Api.Framework.Events ;
using Api.Framework.Model ;
using Api.Framework.Properties ;
using Api.Framework.SDK ;
using Api.Framework.Tools ;
using Api.Framework.Utils ;
using CsharpHttpHelper ;
using Newtonsoft.Json ;
using Newtonsoft.Json.Linq ;
using SqlSugar ;
using System ;
using System.Collections.Generic ;
using System.Diagnostics ;
using System.Linq ;
using System.Text ;
using System.Threading ;
using System.Threading.Tasks ;
using static Api . Framework . Cps . AlimamaApi ;
namespace Api.Framework.Timers
{
/// <summary>
/// 抖音订单下载定时器
/// </summary>
public class DownDouyinTimer : TimerTask
{
private static object rights = null ;
private static readonly object objLock = new object ( ) ;
public override void Run ( object state , bool timedOut )
{
//TODO 这里的时间还没有用,因为抖音巨量那边还搞不定(通过时间查询)
var update_time = DateTime . Now . AddDays ( - 1 ) ;
var end_time = DateTime . Now ;
2023-04-06 01:07:55 +00:00
UpdateOrder ( CpsClient . Members . Where ( f = > ( f . cpstype = = CpsType . 抖 音 联 盟 | | f . cpstype = = CpsType . 抖 客 联 盟 ) & & f . is_download = = SwitchType . 开 启 ) . ToArray ( ) , update_time , end_time ) ;
2022-09-20 03:10:29 +00:00
#region 更 新 冻 结 的 订 单
List < OrderNoticeEvent > notices = new List < OrderNoticeEvent > ( ) ;
var session = ApiClient . GetSession ( ) ;
var result = session . Find < fl_order_douyin > ( "db_status=@db_status and db_endtime<@db_endtime" , new { db_status = ( int ) SystemOrderStatus . 订 单 冻 结 , db_endtime = DateTime . Now . ToString ( "yyyy-MM-dd HH:mm:ss" ) } ) . ToList ( ) ; //所有完成冻结,但是还没改状态的订单
foreach ( var db_order in result )
{
UpdateOrder ( db_order , notices , session ) ;
}
if ( notices . Count ! = 0 )
{
var tasks = TimerTask . GetTimer < Update_NoticeQueue > ( ) as Update_NoticeQueue ;
foreach ( var item in notices )
{
if ( item . Member = = null ) continue ;
var order = item . Order as fl_order_douyin ;
tasks . Add ( item ) ;
}
}
#endregion
}
/// <summary>
/// 手动下载订单
/// </summary>
/// <param name="member">抖音cps对象集合</param>
/// <param name="start_time">订单同步开始时间</param>
/// <param name="end_time">订单同步结束时间</param>
public void UpdateOrder ( List < fl_cps_member > members , DateTime start_time , DateTime end_time )
{
if ( IsRunning ) throw new Exception ( "任务繁忙,请稍后重试!" ) ;
try
{
IsRunning = true ;
UpdateOrder ( members . ToArray ( ) , start_time , end_time ) ;
}
catch ( Exception ex )
{
EventClient . OnEvent ( this , "更新抖音订单异常:" + ex . Message ) ;
}
finally
{
IsRunning = false ;
}
}
/// <summary>
/// 订单下载时间间隔
/// </summary>
private const int IntervalHour = 12 ;
/// <summary>
/// 下载订单
/// </summary>
/// <param name="members">抖音cps对象集合</param>
/// <param name="start_time">订单同步开始时间</param>
/// <param name="end_time">订单同步结束时间</param>
private void UpdateOrder ( fl_cps_member [ ] members , DateTime start_time , DateTime end_time )
{
if ( members = = null | | members . Length = = 0 ) return ;
//var memberList = members.Where(f => f.online).ToList();
var memberList = members . ToList ( ) ;
var timespan = end_time - start_time ;
TaskTool task = new TaskTool ( ) ;
List < OrderNoticeEvent > notices = new List < OrderNoticeEvent > ( ) ;
foreach ( var item in memberList )
{
var _item = item ;
2023-04-06 01:07:55 +00:00
if ( _item . cpstype = = CpsType . 抖 音 联 盟 )
2022-09-20 03:10:29 +00:00
{
2023-04-06 01:07:55 +00:00
DaRenSync ( _item , start_time , end_time , task , timespan , notices ) ;
}
//抖客联盟
else
{
DouKeSync ( _item , start_time , end_time , task , timespan , notices ) ;
}
}
task . Start ( 1 , null ) ;
var db = ApiClient . GetSession ( ) ;
var end_orders = db . Find < fl_order_douyin > ( "select * from fl_order_douyin where db_status=@db_status and db_endtime<@db_endtime" , new { db_status = ( int ) SystemOrderStatus . 订 单 冻 结 , db_endtime = DateTime . Now . ToString ( "yyyy-MM-dd HH:mm:ss" ) } ) . ToList ( ) ;
foreach ( var db_order in end_orders )
{
UpdateOrder ( db_order , notices , db ) ;
}
if ( notices . Count ! = 0 )
{
var tasks = TimerTask . GetTimer < Update_NoticeQueue > ( ) as Update_NoticeQueue ;
foreach ( var item in notices )
{
if ( item . Member = = null ) continue ;
var order = item . Order as fl_order_weipinhui ;
tasks . Add ( item ) ;
}
}
}
#region 抖 客
public void DouKeSync ( fl_cps_member _item , DateTime start_time , DateTime end_time , TaskTool task , TimeSpan timespan , List < OrderNoticeEvent > notices )
{
var api = CpsClient . CreateDouyinRequestV3 ( _item ) ;
task . AddTask ( delegate
{
try
{
var _star = timespan . TotalHours > 12 ? end_time : start_time ; //倒叙12小时一个间断
var _end = end_time ;
do
2022-09-20 03:10:29 +00:00
{
2023-04-06 01:07:55 +00:00
try
2022-09-20 03:10:29 +00:00
{
2023-04-06 01:07:55 +00:00
if ( timespan . TotalHours > 12 )
2022-09-20 03:10:29 +00:00
{
2023-04-06 01:07:55 +00:00
_end = _star ;
_star = _star . AddHours ( - 11.99 ) ;
}
var session = ApiClient . GetSession ( ) ;
List < DyOrderInfo > orderList = new List < DyOrderInfo > ( ) ;
//官方接口已经同步了订单,防止非官方接口再次同步
List < string > orderidCache = new List < string > ( ) ;
//if (1 != 2)
{
//var pids = session.Find<fl_adzone_info>("select * from fl_adzone_info").Where(f => f.adzone_pid_cps_name == _item.username).Where(f => !string.IsNullOrWhiteSpace(f.adzone_pid)).Select(f => f.adzone_pid).Distinct().ToList();
//if (pids != null & pids.Count != 0)
//{ }
//不填或者填0: 查询分销订单, 1: 查询比价订单
for ( int i = 0 ; i < 2 ; i + + )
2022-09-20 03:10:29 +00:00
{
2023-04-06 01:07:55 +00:00
api . DownOrderApi ( _star , _end , "" , i , data = >
{
DouKeOrderHandle ( data , _item , notices ) ;
} ) ;
2022-09-20 03:10:29 +00:00
}
2023-04-06 01:07:55 +00:00
}
}
catch ( Exception ex )
{
//The underlying frame is no longer valid - please check the IsValid property before calling!
if ( ex . Message . Contains ( "is no longer valid - please check the IsValid" ) )
{
api . Member . is_valid = false ;
}
}
} while ( _star > start_time ) ;
}
catch ( Exception ex )
{
//throw ex;
}
} ) ;
}
private void DouKeOrderHandle ( DyOrderInfo data , fl_cps_member _item , List < OrderNoticeEvent > notices )
{
try
{
Exception _exception = null ;
var session = ApiClient . GetSession ( ) ;
for ( int i = 0 ; i < data . orders . Count ; i + + )
{
var order = data . orders [ i ] ;
if ( _exception ! = null )
{
continue ;
}
try
{
//if (order.order_id == "4886104544279610848")
//{
//}
OrderHandleSleep ( ) ;
2022-09-20 03:10:29 +00:00
2023-04-06 01:07:55 +00:00
var status = order . flow_point ;
2022-09-20 03:10:29 +00:00
2023-04-06 01:07:55 +00:00
var db_order = session . FindSingle < fl_order_douyin > ( "order_id=@order_id and product_id=@product_id" , new { order_id = order . order_id , product_id = order . product_id } ) ;
if ( db_order ! = null ) //跳过相同状态
{
if ( db_order . order_status = = DouyinOrderStatus . REFUND . ToString ( ) | | db_order . product_detail = = "手动处理" )
{
continue ;
}
if ( status = = db_order . order_status | | status ! = DouyinOrderStatus . PAY_SUCC . ToString ( ) )
{
if ( db_order . IsFinish ( ) ) continue ; //是否已经完成
if ( db_order . db_status = = SystemOrderStatus . 订 单 冻 结 & & db_order . db_endtime > DateTime . Now ) continue ; //跳过系统冻结
//if (db_order.order_status != WeipinhuiOrderSubStatusName.已签收 && db_order.order_status == status) continue;//跳过相同状态
if ( db_order . order_status = = status ) continue ; //跳过相同状态
}
db_order . order_status = status ;
}
else
{
var orderTmp = new fl_order_douyin ( )
{
order_id = order . order_id ,
product_id = order . product_id ,
product_name = order . product_name ,
total_pay_amount = order . pay_goods_amount ,
estimated_comission = ( int ) order . ads_estimated_commission ,
order_status = order . flow_point ,
pay_time = HttpExtend . GetTimeStamp ( DateTime . Parse ( order . pay_success_time ) )
//...
} ;
db_order = orderTmp ;
db_order . db_cpsname = _item . username ;
db_order . db_cpsnick = _item . usernick ;
}
try
{
LogHelper . GetSingleObj ( ) . Debug ( "抖音订单: " , $ @ "抖音Api原始: {JsonConvert.SerializeObject(order)}
order = { JsonConvert . SerializeObject ( db_order ) } ");
}
catch ( Exception )
{ }
UpdateOrder ( db_order , notices , session ) ;
try
{
LogHelper . GetSingleObj ( ) . Debug ( "抖音订单: " , $ @ "处理完成的 ,需要通知的用户 -> {notices.Count}
order = { JsonConvert . SerializeObject ( db_order ) } ");
}
catch ( Exception )
{ }
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
//session.Close();
}
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
}
catch ( Exception ex )
{
LogHelper . GetSingleObj ( ) . Debug ( "抖音订单: " , $"" ) ;
}
}
private void OrderHandleSleep ( )
{
if ( ApiClient . Setting . DbConfig . DatabaseType = = DatabaseType . SQLITE )
{
Thread . Sleep ( 100 ) ;
}
}
#endregion
#region 达 人
public void DaRenSync ( fl_cps_member _item , DateTime start_time , DateTime end_time , TaskTool task , TimeSpan timespan , List < OrderNoticeEvent > notices )
{
var api = CpsClient . CreateDouyinRequest ( _item ) ;
task . AddTask ( delegate
{
try
{
var _star = timespan . TotalHours > 12 ? end_time : start_time ; //倒叙12小时一个间断
var _end = end_time ;
do
{
try
{
if ( timespan . TotalHours > 12 )
{
_end = _star ;
_star = _star . AddHours ( - 11.99 ) ;
}
var session = ApiClient . GetSession ( ) ;
List < DyOrderInfo > orderList = new List < DyOrderInfo > ( ) ;
//官方接口已经同步了订单,防止非官方接口再次同步
List < string > orderidCache = new List < string > ( ) ;
//if (1 != 2)
{
var pids = session . Find < fl_adzone_info > ( "select * from fl_adzone_info" ) . Where ( f = > f . adzone_pid_cps_name = = _item . username ) . Where ( f = > ! string . IsNullOrWhiteSpace ( f . adzone_pid ) ) . Select ( f = > f . adzone_pid ) . Distinct ( ) . ToList ( ) ;
if ( pids ! = null & pids . Count ! = 0 )
2022-09-20 03:10:29 +00:00
{
2023-04-06 01:07:55 +00:00
foreach ( var pid in pids )
2022-09-20 03:10:29 +00:00
{
2023-04-06 01:07:55 +00:00
var tmp = api . DownOrderApi ( _star , _end , pid ) ;
if ( tmp ! = null )
orderList . AddRange ( tmp ) ;
}
Exception _exception = null ;
for ( int i = 0 ; i < orderList . Count ; i + + )
{
var orderInfo = orderList [ i ] ;
if ( _exception ! = null ) continue ;
foreach ( var order in orderInfo . orders )
2022-09-20 03:10:29 +00:00
{
2023-04-06 01:07:55 +00:00
try
{
try
{
//if (order.order_id == "4886104544279610848")
//{
//}
if ( ApiClient . Setting . DbConfig . DatabaseType = = DatabaseType . SQLITE )
Thread . Sleep ( 100 ) ;
var status = order . flow_point ;
var db_order = session . FindSingle < fl_order_douyin > ( "order_id=@order_id and product_id=@product_id" , new { order_id = order . order_id , product_id = order . product_id } ) ;
if ( db_order ! = null ) //跳过相同状态
{
if ( db_order . order_status = = DouyinOrderStatus . REFUND . ToString ( ) | | db_order . product_detail = = "手动处理" )
{
continue ;
}
if ( status = = db_order . order_status | | status ! = DouyinOrderStatus . PAY_SUCC . ToString ( ) )
{
if ( db_order . IsFinish ( ) ) continue ; //是否已经完成
if ( db_order . db_status = = SystemOrderStatus . 订 单 冻 结 & & db_order . db_endtime > DateTime . Now ) continue ; //跳过系统冻结
//if (db_order.order_status != WeipinhuiOrderSubStatusName.已签收 && db_order.order_status == status) continue;//跳过相同状态
if ( db_order . order_status = = status ) continue ; //跳过相同状态
}
db_order . order_status = status ;
}
else
{
var orderTmp = new fl_order_douyin ( )
{
order_id = order . order_id ,
product_id = order . product_id ,
product_name = order . product_name ,
total_pay_amount = order . pay_goods_amount ,
estimated_comission = order . estimated_commission ,
order_status = order . flow_point ,
pay_time = HttpExtend . GetTimeStamp ( DateTime . Parse ( order . pay_success_time ) )
//...
} ;
db_order = orderTmp ;
db_order . db_cpsname = _item . username ;
db_order . db_cpsnick = _item . usernick ;
}
try
{
LogHelper . GetSingleObj ( ) . Debug ( "抖音订单: " , $ @ "抖音Api原始: {JsonConvert.SerializeObject(order)}
order = { JsonConvert . SerializeObject ( db_order ) } ");
}
catch ( Exception )
{ }
orderidCache . Add ( db_order . order_id ) ;
UpdateOrder ( db_order , notices , session ) ;
try
{
LogHelper . GetSingleObj ( ) . Debug ( "抖音订单: " , $ @ "处理完成的 ,需要通知的用户 -> {notices.Count}
order = { JsonConvert . SerializeObject ( db_order ) } ");
}
catch ( Exception )
{ }
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
//session.Close();
}
}
catch ( Exception ex )
{
_exception = ex ;
break ;
}
2022-09-20 03:10:29 +00:00
}
2023-04-06 01:07:55 +00:00
}
}
//Console.WriteLine();
}
//return;
//int queryCount = 1;
2022-09-20 03:10:29 +00:00
2023-04-06 01:07:55 +00:00
if ( api . Member . online ) //在为检测是未失效的时候进行同步
{
#region 非 官 方 接 口 获 取 订 单
foreach ( DouyinQueryOrderType type in Enum . GetValues ( typeof ( DouyinQueryOrderType ) ) )
{
try
{
Stopwatch stop = new Stopwatch ( ) ;
stop . Start ( ) ;
var json = api . DownOrder ( _star , _end , 1 , type ) ;
stop . Stop ( ) ;
//Console.WriteLine($"_star={_star},_end={_end},type={type},用时:{stop.Elapsed.TotalSeconds}");
2022-09-20 03:10:29 +00:00
2023-04-06 01:07:55 +00:00
if ( api . Member . online )
2022-09-20 03:10:29 +00:00
{
2023-04-06 01:07:55 +00:00
if ( json = = null | | json . Count = = 0 | | json [ 0 ] = = "error" )
continue ;
var orderObj = JsonConvert . DeserializeObject < DouYinOrder > ( json [ 0 ] ) ;
if ( orderObj . code ! = 0 ) continue ;
Exception _exception = null ;
var data = orderObj . data ;
if ( data = = null ) continue ;
for ( int i = 0 ; i < data . Count ; i + + )
2022-09-20 03:10:29 +00:00
{
2023-04-06 01:07:55 +00:00
var order = data [ i ] ;
if ( _exception ! = null ) continue ;
2022-09-20 03:10:29 +00:00
try
{
try
{
2023-04-06 01:07:55 +00:00
//if (order.order_id == "4933900340490065113")
2022-09-20 03:10:29 +00:00
//{
//}
2023-04-06 01:07:55 +00:00
//else
//if (order.order_id == "4934209762824039641")
//{
//}
//else
//if (order.order_id == "4934212125058641113")
//{
//}
//else
//if (order.order_id == "4934295228379604185")
//{
//}
//else
//if (order.order_id == "4936102872734510874")
//{
//}
//else
//{
// continue;
//}
if ( orderidCache . Contains ( order . order_id ) )
continue ;
2022-09-20 03:10:29 +00:00
if ( ApiClient . Setting . DbConfig . DatabaseType = = DatabaseType . SQLITE )
Thread . Sleep ( 100 ) ;
2023-04-06 01:07:55 +00:00
var status = order . order_status ;
2022-09-20 03:10:29 +00:00
var db_order = session . FindSingle < fl_order_douyin > ( "order_id=@order_id and product_id=@product_id" , new { order_id = order . order_id , product_id = order . product_id } ) ;
if ( db_order ! = null ) //跳过相同状态
{
if ( db_order . order_status = = DouyinOrderStatus . REFUND . ToString ( ) | | db_order . product_detail = = "手动处理" )
{
continue ;
}
if ( status = = db_order . order_status | | status ! = DouyinOrderStatus . PAY_SUCC . ToString ( ) )
{
2023-04-06 01:07:55 +00:00
var isFinish = db_order . IsFinish ( ) ;
if ( isFinish & & status = = db_order . order_status ) continue ; //是否已经完成
2022-09-20 03:10:29 +00:00
if ( db_order . db_status = = SystemOrderStatus . 订 单 冻 结 & & db_order . db_endtime > DateTime . Now ) continue ; //跳过系统冻结
//if (db_order.order_status != WeipinhuiOrderSubStatusName.已签收 && db_order.order_status == status) continue;//跳过相同状态
if ( db_order . order_status = = status ) continue ; //跳过相同状态
}
db_order . order_status = status ;
}
else
{
2023-04-06 01:07:55 +00:00
db_order = order ;
2022-09-20 03:10:29 +00:00
db_order . db_cpsname = _item . username ;
db_order . db_cpsnick = _item . usernick ;
}
try
{
2023-04-06 01:07:55 +00:00
LogHelper . GetSingleObj ( ) . Debug ( "抖音订单: " , $ @ "抖音原始:{JsonConvert.SerializeObject(order)}
2022-09-20 03:10:29 +00:00
order = { JsonConvert . SerializeObject ( db_order ) } ");
}
catch ( Exception )
{ }
UpdateOrder ( db_order , notices , session ) ;
try
{
2023-04-06 01:07:55 +00:00
LogHelper . GetSingleObj ( ) . Debug ( "抖音订单: " , $ @ "处理完成的 ,需要通知的用不 -> {notices.Count}
2022-09-20 03:10:29 +00:00
order = { JsonConvert . SerializeObject ( db_order ) } ");
}
catch ( Exception )
{ }
}
catch ( Exception ex )
{
throw ex ;
}
finally
{
//session.Close();
}
}
catch ( Exception ex )
{
_exception = ex ;
break ;
}
}
}
2023-04-06 01:07:55 +00:00
else
2022-09-20 03:10:29 +00:00
{
2023-04-06 01:07:55 +00:00
EventClient . OnEvent ( "" , $"抖音账号:{api.Member.usernick}({api.Member.username}),请重新登录" ) ;
break ;
2022-09-20 03:10:29 +00:00
}
}
2023-04-06 01:07:55 +00:00
catch ( Exception ex )
{
/ *
{ "st" : 0 , "code" : 9001 , "msg" : "操作异常" , "log_id" : "2022010221313001020404907424DA1368" , "data" : [ ] }
* /
//if (ex.Message.Contains("操作异常") || ex.Message.Contains("请重新登录"))
// queryCount++;
//if (queryCount >= 2)
//{
// EventClient.OnEvent("", $"链接订单无法同步,请重新登录抖音:{api.Member.usernick}({api.Member.username})");
// api.Member.online = false;
// ApiClient.GetSession().SaveOrUpdate(api.Member);
// var shared = new Dictionary<string, object>();
// shared["msg_type"] = "抖音验证码";
// shared["cps_type"] = CpsType.抖音联盟;
// shared["msg_username"] = api.Member.username;
// shared["msg_usernick"] = api.Member.usernick;
// var sharedEvent = new SharedEvents(shared);
// EventClient.OnSharedEvent(null, sharedEvent);
// return;
//}
}
2022-09-20 03:10:29 +00:00
}
#endregion
}
2023-04-06 01:07:55 +00:00
}
catch ( Exception ex )
{
//The underlying frame is no longer valid - please check the IsValid property before calling!
if ( ex . Message . Contains ( "is no longer valid - please check the IsValid" ) )
2022-09-20 03:10:29 +00:00
{
2023-04-06 01:07:55 +00:00
api . Member . is_valid = false ;
2022-09-20 03:10:29 +00:00
}
2023-04-06 01:07:55 +00:00
}
} while ( _star > start_time ) ;
}
catch ( Exception ex )
2022-09-20 03:10:29 +00:00
{
2023-04-06 01:07:55 +00:00
//throw ex;
2022-09-20 03:10:29 +00:00
}
2023-04-06 01:07:55 +00:00
} ) ;
2022-09-20 03:10:29 +00:00
}
/// <summary>
/// 订单 修改状态/用户绑定等操作通知用户
/// </summary>
/// <param name="db_order">抖音订单对象</param>
/// <param name="notice">事件集合</param>
/// <param name="session">数据库操作对象</param>
/// <param name="isFrontData"></param>
public void UpdateOrder ( fl_order_douyin db_order , List < OrderNoticeEvent > notice , SqlSugarClient session , bool isFrontData = false )
{
//维权中的订单,直接跳出
if ( db_order . db_status = = SystemOrderStatus . 订 单 维 权 中 )
return ;
try
{
fl_plugin_allrebatesactivity_orderlist allrebatesactivity_orderlist = null ;
var old_status = db_order . db_status ;
var status = Util . ConvertEnum < DouyinOrderStatus > ( db_order . order_status . ToUpper ( ) ) ;
bool islotUserQuery = false ; //订单是否为多人查询
// string old_md5 = Util.GetMd5_32byte(HttpHelper.ObjectToJson(db_order));
var isRewards = false ; //是否获得推荐新人奖励
var isFirstOrder = false ; //是否获得用户首单奖励
#region 自 动 识 别 绑 定
#region 缓 存 绑 定
if ( db_order . db_userid = = 0 & & status = = DouyinOrderStatus . PAY_SUCC )
{
var bind = session . FindBindCache ( db_order . order_id ) ;
if ( bind ! = null )
{
var memberInfo = session . FindMemberInfoById ( bind . db_userid ) ;
if ( memberInfo ! = null )
{
db_order . db_userid = memberInfo . id ;
db_order . db_robotname = memberInfo . robot_name ;
db_order . db_robottype = memberInfo . robot_type ;
db_order . msg_groupid = bind . groupid ;
session . SaveOrUpdate ( memberInfo ) ;
//session.SaveOrUpdate(db_order);
#region 获 取 查 询 时 的 比 例
var query_item = session . FindSingle < fl_query_hist > ( "userid=@userid and itemid=@itemid and adzoneid = @adzoneid and crt_time > @time order by id desc" , new { userid = db_order . db_userid , itemid = db_order . product_id , adzoneid = db_order . db_cpsname , time = DateTime . Now . AddHours ( - 24 ) . ToString ( "yyyy-MM-dd HH:mm:ss" ) } ) ;
if ( query_item ! = null & & ! string . IsNullOrWhiteSpace ( query_item . compute_configdic ) )
{
if ( db_order . id = = 0 )
session . SaveOrUpdate ( db_order ) ;
var queryRatioHist = new fl_query_ratio_hist ( )
{
compute_config = query_item . compute_configdic ,
db_orderid = db_order . id ,
createtime = DateTime . Now ,
cpstype = CpsType . 抖 音 联 盟
} ;
session . SaveOrUpdate ( queryRatioHist ) ;
}
#endregion
}
}
}
#endregion
if ( db_order . db_userid = = 0 & & status = = DouyinOrderStatus . PAY_SUCC )
{
#region 抖 音 返 利 推 广 位 自 动 绑 定
#region 私 人 推 广 位
var privateAdzonePids = session . FindAlimamaPrivatePid ( db_order . db_cpsname ) ; //私人推广位对象
if ( privateAdzonePids . Count = = 1 & & privateAdzonePids [ 0 ] . is_auto_bind ) //无条件设置开启中,直接自动绑定
{
var memberInfo = session . FindSingle < fl_member_info > ( "select * from fl_member_info where id = @id" , new { id = privateAdzonePids [ 0 ] . member_id } ) ;
if ( memberInfo ! = null )
{
db_order . db_userid = memberInfo . id ;
db_order . db_robotname = memberInfo . robot_name ;
db_order . db_robottype = memberInfo . robot_type ;
//session.SaveOrUpdate(db_order);
#region 获 取 查 询 时 的 比 例
var query_item = session . FindSingle < fl_query_hist > ( "userid=@userid and itemid=@itemid and adzoneid = @adzoneid and crt_time > @time order by id desc" , new { userid = db_order . db_userid , itemid = db_order . product_id , adzoneid = db_order . db_cpsname , time = DateTime . Now . AddHours ( - 24 ) . ToString ( "yyyy-MM-dd HH:mm:ss" ) } ) ;
if ( query_item ! = null & & ! string . IsNullOrWhiteSpace ( query_item . compute_configdic ) )
{
if ( db_order . id = = 0 )
session . SaveOrUpdate ( db_order ) ;
var queryRatioHist = new fl_query_ratio_hist ( )
{
compute_config = query_item . compute_configdic ,
db_orderid = db_order . id ,
createtime = DateTime . Now ,
cpstype = CpsType . 抖 音 联 盟
} ;
session . SaveOrUpdate ( queryRatioHist ) ;
}
#endregion
}
}
#endregion
else
{
//var flag = false;
//if (!flag)
//{
//查询订单记录
if ( db_order . db_userid = = 0 )
{
var query = session . FindTable ( "select userid,count(*) as count from fl_query_hist where userid != 0 and itemid = @itemid and adzoneid = @adzoneid and crt_time > @time group by userid " , new { itemid = db_order . product_id , adzoneid = db_order . db_cpsname , time = DateTime . Now . AddHours ( - 24 ) . ToString ( "yyyy-MM-dd HH:mm:ss" ) } ) ;
if ( query ! = null & & query . Rows . Count > 0 )
{
if ( query . Rows . Count = = 1 )
{
if ( ApiClient . Setting . SystemConfig . order_douyin_bind = = SwitchType . 开 启 )
{
var userid = int . Parse ( query . Rows [ 0 ] [ "userid" ] . ToString ( ) ) ; //要是查询记录已经标记为通知过的记录(userid 为 负数),将不通过查询记录进行绑定
if ( userid > 0 )
{
db_order . db_userid = userid ; //根据查询记录认领
var query_item = session . FindSingle < fl_query_hist > ( "select * from fl_query_hist where userid = @userid and itemid = @itemid and adzoneid = @adzoneid and crt_time > @time order by id desc" , new { userid = db_order . db_userid , itemid = db_order . product_id , adzoneid = db_order . db_cpsname , time = DateTime . Now . AddHours ( - 24 ) . ToString ( "yyyy-MM-dd HH:mm:ss" ) } ) ;
if ( query_item ! = null )
{
#region 获 取 查 询 时 的 比 例
if ( ! string . IsNullOrWhiteSpace ( query_item . compute_configdic ) )
{
if ( db_order . id = = 0 )
session . SaveOrUpdate ( db_order ) ;
var queryRatioHist = new fl_query_ratio_hist ( )
{
compute_config = query_item . compute_configdic ,
db_orderid = db_order . id ,
createtime = DateTime . Now ,
cpstype = CpsType . 抖 音 联 盟
} ;
session . SaveOrUpdate ( queryRatioHist ) ;
}
#endregion
db_order . msg_groupid = query_item . groupid ;
}
}
}
}
else
{
//订单多人查询,并且订单还未绑定
if ( db_order . db_userid = = 0 )
islotUserQuery = true ;
}
}
}
//}
}
#endregion
#region 绑 定 群 号
if ( string . IsNullOrWhiteSpace ( db_order . msg_groupid ) )
{
var query_item = session . FindSingle < fl_query_hist > ( "select * from fl_query_hist where userid = @userid and itemid = @itemid and adzoneid = @adzoneid and crt_time > @time order by id desc" , new { userid = db_order . db_userid , itemid = db_order . product_id , adzoneid = db_order . db_cpsname , time = DateTime . Now . AddHours ( - 24 ) . ToString ( "yyyy-MM-dd HH:mm:ss" ) } ) ;
if ( query_item ! = null )
{
db_order . msg_groupid = query_item . groupid ;
#region 获 取 查 询 时 的 比 例
if ( ! string . IsNullOrWhiteSpace ( query_item . compute_configdic ) )
{
if ( db_order . id = = 0 )
session . SaveOrUpdate ( db_order ) ;
var queryRatioHist = new fl_query_ratio_hist ( )
{
compute_config = query_item . compute_configdic ,
db_orderid = db_order . id ,
createtime = DateTime . Now ,
cpstype = CpsType . 抖 音 联 盟
} ;
session . SaveOrUpdate ( queryRatioHist ) ;
}
#endregion
}
}
#endregion
}
#endregion
if ( db_order . order_status = = DouyinOrderStatus . PAY_SUCC . ToString ( ) & & db_order . db_userid ! = 0 )
{
try
{
var record = session . FindStatisticsRecord ( db_order . db_userid ) ;
if ( record = = null )
record = new fl_statistics_record ( ) { uid = db_order . db_userid } ;
record . ex5 = db_order . pay_time ;
session . Saveable ( record ) . ExecuteCommand ( ) ;
}
catch ( Exception )
{ }
}
//查询积分比例
var member = db_order . db_userid ! = 0 ? session . FindMemberInfoById ( db_order . db_userid ) : null ;
if ( string . IsNullOrEmpty ( db_order . db_robotname ) & & member ! = null )
{
db_order . db_robotname = member . robot_name ;
db_order . db_robottype = member . robot_type ;
}
if ( string . IsNullOrEmpty ( db_order . db_point ) )
{
//查询历史查询比例
var compute = session . FindQueryRatioHist ( CpsType . 抖 音 联 盟 , db_order . id ) ;
ItemPoint itempoint = null ;
//计算的佣金
if ( compute ! = null )
itempoint = session . FindItemPoint ( CpsType . 抖 音 联 盟 , compute , Util . ConvertDouble_FenToYuan ( db_order . estimated_comission ) , 1 ) ;
else
itempoint = session . FindItemPoint ( member , Util . ConvertDouble_FenToYuan ( db_order . estimated_comission ) , 1 , CpsType . 抖 音 联 盟 ) ;
if ( itempoint ! = null )
{
db_order . db_point = HttpHelper . ObjectToJson ( itempoint ) ;
db_order . db_userpoint = itempoint . UserPoint ;
}
if ( member ! = null )
{
member . bind_order + + ;
member = session . UpdateMemberGroup ( member ) ;
}
}
switch ( status )
{
case DouyinOrderStatus . CONFIRM :
case DouyinOrderStatus . SETTLE :
{
//进入冻结逻辑
if ( db_order . db_endtime = = DateTime . MinValue )
{
var sleep = session . FindSleep ( CpsType . 抖 音 联 盟 , ApiClient . Setting . SystemConfig . FreezingCondition = = FreezingConditionType . 商 品 总 佣 金 ? Util . ConvertDouble_FenToYuan ( db_order . estimated_comission ) : db_order . db_userpoint ) ; //通过返佣获取订单冻结规则
if ( sleep ! = null )
{
if ( ! string . IsNullOrEmpty ( sleep . white_groups ) )
{
if ( member ! = null & & sleep . white_groups . Split ( ',' ) . Contains ( member . group_id . ToString ( ) ) )
db_order . db_endtime = DateTime . Now ; //该会员组不受限制
else
db_order . db_endtime = DateTime . Now . AddHours ( sleep . sleep ) ; //延迟多少小时
}
else db_order . db_endtime = DateTime . Now . AddHours ( sleep . sleep ) ; //延迟多少小时
}
else db_order . db_endtime = DateTime . Now ;
#region 验 证 订 单 是 否 为 24 小 时
var config = Util . Read < Dictionary < string , object > > ( "插件-抖音返利-配置" ) ;
if ( config ! = null )
{
if ( config . ContainsKey ( "ReceivingTimeCheck_Switch" ) )
{
var ReceivingTimeCheck_Switch = bool . Parse ( config [ "ReceivingTimeCheck_Switch" ] . ToString ( ) ) ;
if ( ReceivingTimeCheck_Switch )
{
if ( config . ContainsKey ( "ReceivingTimeCheck_Hour" ) )
{
var ReceivingTimeCheck_Hour = int . Parse ( config [ "ReceivingTimeCheck_Hour" ] . ToString ( ) ) ;
var payTime = HttpExtend . GetDateTime ( db_order . pay_time . ToString ( ) ) ;
if ( ( DateTime . Now - payTime ) . TotalHours < = ReceivingTimeCheck_Hour ) //判断订单收货时间差
{
if ( config . ContainsKey ( "ReceivingTimeCheck_OperateType" ) )
{
var ReceivingTimeCheck_OperateType = ( OperateType ) int . Parse ( config [ "ReceivingTimeCheck_OperateType" ] . ToString ( ) ) ;
if ( ReceivingTimeCheck_OperateType = = OperateType . 订 单 冻 结 )
{
if ( config . ContainsKey ( "ReceivingTimeCheck_FreezeTime" ) )
{
var ReceivingTimeCheck_FreezeTime = int . Parse ( config [ "ReceivingTimeCheck_FreezeTime" ] . ToString ( ) ) ;
db_order . db_endtime = db_order . db_endtime . AddHours ( ReceivingTimeCheck_FreezeTime ) ; //延迟多少小时
}
}
}
}
}
}
}
}
#endregion
}
//已经传递了参数~ 这里就不要强制读数据库
if ( db_order . db_endtime < = DateTime . Now )
{
db_order . db_status = SystemOrderStatus . 订 单 结 算 ;
if ( member ! = null & & db_order . db_status ! = SystemOrderStatus . 全 额 退 款 )
{
var point = HttpHelper . JsonToObject < ItemPoint > ( db_order . db_point ) as ItemPoint ;
if ( point ! = null )
{
if ( point . UserPoint = = 0 )
{
point . UserPoint = 0.01 ;
db_order . db_point = HttpHelper . ObjectToJson ( point ) ;
db_order . db_userpoint = point . UserPoint ;
}
#region 获 取 是 否 已 经 结 算 给 客 户
var pointHists = session . Find < fl_point_hist > ( "select * from fl_point_hist where uid = @uid and type = @pointType_name and message = @message" , new { uid = member . id , pointType_name = PointType . 消 费 补 贴 . ToString ( ) , message = $"抖音购买:{db_order.product_name} - ({db_order.order_id})" } ) ;
if ( pointHists ! = null & & pointHists . Count ! = 0 )
{
session . SaveOrUpdate ( db_order ) ;
return ;
}
#endregion
//用户自身加积分
member = session . ChangePoint ( PointType . 消 费 补 贴 , point . UserPoint , member . id , $"抖音购买:{db_order.product_name} - ({db_order.order_id})" ) ;
#region 判 断 用 户 是 否 符 合 获 得 新 人 奖 励
isFirstOrder = OrderHelper . CheckMemberFirstOrderRewards ( member , db_order . db_status ) ;
#endregion
List < long > ids = new List < long > ( ) ;
ids . Add ( member . id ) ;
//多级提成计算..用户自己的上级不能为自己
//一级的提成小于等于0时,并且判断一级是否符合获得推荐新人奖励(无奖励一级提成)
if ( point . AwardOne < = 0 & & member . inviter_id > 0 & & ! ids . Contains ( member . inviter_id ) & & member . id ! = member . inviter_id )
{
if ( notice ! = null )
{
var inviter = session . FindMemberInfoById ( member . inviter_id ) ;
if ( inviter ! = null )
{
#region 判 断 上 级 是 否 符 合 获 得 推 荐 新 人 奖 励
isRewards = OrderHelper . CheckSuperiorInviteRewards ( member , db_order . db_endtime , Util . ConvertDouble_FenToYuan ( db_order . total_pay_amount ) ) ;
#endregion
notice . Add ( new OrderNoticeEvent ( CpsType . 抖 音 联 盟 , inviter , db_order , OrderNoticeType . 一 级 提 成 ) { Customer = member , IsRewards = isRewards } ) ; //下级首单完成
}
}
}
else if ( point . AwardOne > 0 & & member . inviter_id > 0 & & ! ids . Contains ( member . inviter_id ) & & member . id ! = member . inviter_id )
{
var flag = session . ChangePoint ( PointType . 提 成 奖 励 , point . AwardOne , member . inviter_id , $"{member.usernick},抖音购物1级提成! {db_order.product_name} - ({db_order.order_id})" ) ;
if ( flag ! = null )
{
ids . Add ( flag . id ) ;
if ( notice ! = null )
{
#region 判 断 上 级 是 否 符 合 获 得 推 荐 新 人 奖 励
isRewards = OrderHelper . CheckSuperiorInviteRewards ( member , db_order . db_endtime , Util . ConvertDouble_FenToYuan ( db_order . total_pay_amount ) ) ;
#endregion
notice . Add ( new OrderNoticeEvent ( CpsType . 抖 音 联 盟 , flag , db_order , OrderNoticeType . 一 级 提 成 ) { Customer = member , IsRewards = isRewards } ) ; //下级首单完成
}
if ( point . AwardTwo > 0 & & flag . inviter_id ! = 0 & & ! ids . Contains ( flag . inviter_id ) )
{
var flag2 = session . ChangePoint ( PointType . 提 成 奖 励 , point . AwardTwo , flag . inviter_id , $"{member.usernick},抖音购物2级提成! {db_order.product_name} - ({db_order.order_id})" ) ;
if ( flag2 ! = null )
{
ids . Add ( flag2 . id ) ;
if ( notice ! = null & & flag2 ! = null )
{
notice . Add ( new OrderNoticeEvent ( CpsType . 抖 音 联 盟 , flag2 , db_order , OrderNoticeType . 二 级 提 成 ) { Customer = member } ) ;
if ( point . AwardThree > 0 & & flag2 . inviter_id ! = 0 & & ! ids . Contains ( flag2 . inviter_id ) )
{
var flag3 = session . ChangePoint ( PointType . 提 成 奖 励 , point . AwardThree , flag2 . inviter_id , $"{member.usernick},抖音购物3级提成! {db_order.product_name} - ({db_order.order_id})" ) ;
if ( flag3 ! = null )
{
ids . Add ( flag3 . id ) ;
if ( notice ! = null & & flag3 ! = null ) notice . Add ( new OrderNoticeEvent ( CpsType . 抖 音 联 盟 , flag3 , db_order , OrderNoticeType . 三 级 提 成 ) { Customer = member } ) ;
}
}
}
}
}
}
}
//创建人计算
if ( point . AwardCreate > 0 & & ! string . IsNullOrEmpty ( db_order . msg_groupid ) & & ! string . IsNullOrEmpty ( db_order . db_robotname ) )
{
var create = session . FindCreateInfo ( db_order . msg_groupid , db_order . db_robottype ) ;
if ( create ! = null & & member . id ! = create . id )
{
var flag = session . ChangePoint ( PointType . 提 成 奖 励 , point . AwardCreate , create . mid , $"{member.usernick},抖音维护提成!{db_order.product_name} - ({db_order.order_id})" ) ;
if ( notice ! = null & & flag ! = null ) notice . Add ( new OrderNoticeEvent ( CpsType . 抖 音 联 盟 , flag , db_order , OrderNoticeType . 群 主 分 成 ) { Customer = member } ) ;
}
}
}
Thread . Sleep ( 40 ) ;
}
else
{
//提示查询该宝贝的人所有人
if ( islotUserQuery )
{
notice . Add ( new Events . OrderNoticeEvent ( CpsType . 抖 音 联 盟 , null , db_order ) ) ;
}
}
}
else
{
db_order . db_status = SystemOrderStatus . 订 单 冻 结 ;
}
}
break ;
case DouyinOrderStatus . 订 单 维 权 中 :
db_order . db_status = SystemOrderStatus . 订 单 维 权 中 ;
break ;
case DouyinOrderStatus . PAY_SUCC :
{
db_order . db_status = SystemOrderStatus . 订 单 付 款 ;
}
break ;
case DouyinOrderStatus . REFUND :
db_order . db_status = SystemOrderStatus . 订 单 失 效 ;
if ( member ! = null ) //订单还没有绑定用户
{
if ( db_order . db_endtime ! = DateTime . MinValue ) //客户已经在冻结中
{
if ( db_order . db_endtime < = DateTime . Now ) //佣金已经解冻 - 已经把佣金给客户(需要扣除佣金)
{
ItemPoint itempointTmp = null ;
var compute = session . FindQueryRatioHist ( CpsType . 抖 音 联 盟 , db_order . id ) ;
if ( compute ! = null )
itempointTmp = session . FindItemPoint ( CpsType . 抖 音 联 盟 , compute , Util . ConvertDouble_FenToYuan ( db_order . estimated_comission ) , 1 ) ;
else
//判断用户的订单是否已经结算,如果已经结算通过实际佣金进行退款,如果没有结算通过预计佣进行计算
itempointTmp = session . FindItemPoint ( member , Util . ConvertDouble_FenToYuan ( db_order . estimated_comission ) , 1 , CpsType . 抖 音 联 盟 ) ;
new OrderHelper ( ) . DeductDouYinOrderPoint ( notice , db_order , itempointTmp ) ;
db_order . db_status = SystemOrderStatus . 全 额 退 款 ;
}
else
{
//if (itempoint != null)
//{
// //用户自身加积分
// //member = session.ChangePoint(PointType.维权扣除, itempoint.UserPoint, member.id, $"抖音购买:{db_order.skuName}({db_order.orderId}) - 售后中(扣除) - 订单还未结算(冻结中)");
//}
}
}
db_order . db_endtime = DateTime . MinValue ;
}
break ;
default :
break ;
}
#region 通 知 客 户 订 单 付 款 / 失 效 提 示 上 级
if ( member ! = null & & ( db_order . db_status = = SystemOrderStatus . 订 单 付 款 | | db_order . db_status = = SystemOrderStatus . 订 单 失 效 ) )
{
var point = HttpHelper . JsonToObject < ItemPoint > ( db_order . db_point ) as ItemPoint ;
if ( point ! = null )
{
List < long > ids = new List < long > ( ) ;
ids . Add ( member . id ) ;
if ( point . UserPoint = = 0 & & ApiClient . Setting . SystemConfig . SubsidyTb = = SwitchType . 开 启 )
{
point . UserPoint = 0.01 ;
db_order . db_point = HttpHelper . ObjectToJson ( point ) ;
db_order . db_userpoint = point . UserPoint ;
}
if ( point . AwardOne > 0 & & member . inviter_id > 0 & & ! ids . Contains ( member . inviter_id ) & & member . id ! = member . inviter_id )
{
//一级用户对象
var member_one = session . FindMemberInfoById ( member . inviter_id ) ;
if ( member_one ! = null )
{
ids . Add ( member_one . id ) ;
if ( notice ! = null )
notice . Add ( new OrderNoticeEvent ( CpsType . 抖 音 联 盟 , member_one , db_order , OrderNoticeType . 一 级 提 成 ) { Customer = member } ) ;
if ( point . AwardTwo > 0 & & member_one . inviter_id ! = 0 & & ! ids . Contains ( member_one . inviter_id ) )
{
//二级用户对象
var member_two = session . FindMemberInfoById ( member_one . inviter_id ) ;
if ( member_two ! = null )
{
ids . Add ( member_two . id ) ;
if ( member_two ! = null )
{
notice . Add ( new OrderNoticeEvent ( CpsType . 抖 音 联 盟 , member_two , db_order , OrderNoticeType . 二 级 提 成 ) { Customer = member } ) ;
if ( point . AwardThree > 0 & & member_two . inviter_id ! = 0 & & ! ids . Contains ( member_two . inviter_id ) )
{
//三级用户对象
var member_three = session . FindMemberInfoById ( member_two . inviter_id ) ;
if ( member_three ! = null )
{
ids . Add ( member_three . id ) ;
if ( member_three ! = null )
notice . Add ( new OrderNoticeEvent ( CpsType . 抖 音 联 盟 , member_three , db_order , OrderNoticeType . 三 级 提 成 ) { Customer = member } ) ;
}
}
}
}
}
}
}
//创建人计算
if ( point . AwardCreate > 0 & & ! string . IsNullOrEmpty ( db_order . msg_groupid ) & & ! string . IsNullOrEmpty ( db_order . db_robotname ) )
{
var create = session . FindCreateInfo ( db_order . msg_groupid , db_order . db_robottype ) ;
if ( create ! = null & & member . id ! = create . id )
{
var member_create = session . FindMemberInfoById ( create . mid ) ;
if ( notice ! = null & & member_create ! = null ) notice . Add ( new OrderNoticeEvent ( CpsType . 抖 音 联 盟 , member_create , db_order , OrderNoticeType . 群 主 分 成 ) { Customer = member } ) ;
}
}
}
}
#endregion
//string new_md5 = Util.GetMd5_32byte(HttpHelper.ObjectToJson(db_order));
if ( old_status ! = db_order . db_status )
db_order . db_status_time = HttpExtend . GetTimeStamp ( ) ;
session . SaveOrUpdate ( db_order ) ;
if ( db_order . db_status = = SystemOrderStatus . 订 单 付 款 )
{
#region 判 断 用 户 是 否 符 合 获 得 新 人 奖 励
isFirstOrder = OrderHelper . CheckMemberFirstOrderRewards ( member , db_order . db_status ) ;
#endregion
}
if ( allrebatesactivity_orderlist ! = null )
{
allrebatesactivity_orderlist . oid = db_order . id ;
session . Saveable ( allrebatesactivity_orderlist ) . ExecuteCommand ( ) ;
}
//if ((notice != null && old_status != db_order.db_status && order_id != db_order.trade_parent_id && member != null) || (notice != null && old_status != db_order.db_status && order_id != db_order.trade_parent_id && islotUserQuery && member == null))
if ( notice ! = null & & ( isFrontData | | old_status ! = db_order . db_status ) & & ( ( islotUserQuery & & member = = null ) | | member ! = null ) )
{
notice . Add ( new Events . OrderNoticeEvent ( CpsType . 抖 音 联 盟 , member , db_order ) { IsRewards = isFirstOrder } ) ;
}
}
catch ( Exception ex )
{
EventClient . OnEvent ( this , "更新抖音联盟订单异常1:" + db_order . db_cpsname + " - " + db_order . order_id + "," + ex . Message + "," + ex . StackTrace ) ;
}
}
2023-04-06 01:07:55 +00:00
#endregion
2022-09-20 03:10:29 +00:00
}
}