2022-09-20 03:10:29 +00:00
//=============================================================
// 创建人:千年老妖
// 本页代码,均为原创。对未经许可擅自使用者,本人保留追究其法律责任的权利。
//==============================================================
using Api.Framework.Cps ;
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 CsharpHttpHelper.Enum ;
using Newtonsoft.Json ;
using Newtonsoft.Json.Linq ;
using SqlSugar ;
using System ;
using System.Collections ;
using System.Collections.Generic ;
using System.Data ;
using System.Linq ;
using System.Text ;
using System.Text.RegularExpressions ;
using System.Threading ;
using System.Threading.Tasks ;
using System.Timers ;
using System.Web ;
using System.Web.Caching ;
using static Api . Framework . Cps . AlimamaApi ;
namespace Api.Framework.Timers
{
/// <summary>
/// 阿里订单下载定时器
/// </summary>
public class DownAlimamaTimer : TimerTask
{
/// <summary>
/// 是否在运行
/// </summary>
private static bool isRun = false ;
/// <summary>
/// 记录三个月中最早付款的时间
/// </summary>
private static DateTime recordTime = DateTime . MinValue ;
private static object rights = null ; //维权让只执行一次
private static readonly object objLock = new object ( ) ; //锁
public DownAlimamaTimer ( )
{
if ( rights = = null )
{
lock ( objLock )
{
if ( rights = = null )
{
rights = new object ( ) ;
//维权订单下载
ThreadPool . QueueUserWorkItem ( delegate
{
while ( this . IsStart )
{
try
{
Thread . Sleep ( 1000 * 60 * 30 ) ;
if ( ! this . IsStart ) return ;
var list = CpsClient . Members . Where ( f = > f . cpstype = = CpsType . 阿 里 妈 妈 & & f . online = = true & & f . is_download = = SwitchType . 开 启 ) . ToList ( ) ;
TaskTool task = new TaskTool ( ) ;
foreach ( var item in list )
{
var api = new AlimamaApi ( item ) ;
task . AddTask ( delegate
{
UpdateOrder ( api , DateTime . Now . AddDays ( - 50 ) ) ;
} ) ;
}
task . Start ( 10 , null ) ;
}
catch ( Exception )
{ }
}
} ) ;
//同步长时间没有同步的付款订单
ThreadPool . QueueUserWorkItem ( delegate
{
do
{
if ( isRun ) return ;
isRun = true ;
try
{
Thread . Sleep ( 30000 ) ;
var session = ApiClient . GetSession ( ) ;
var date = DateTime . Now ;
var start_time = recordTime = = DateTime . MinValue ? date . AddDays ( - 90 ) . AddHours ( 2 ) : recordTime ;
var members = CpsClient . Members . Where ( f = > f . cpstype = = CpsType . 阿 里 妈 妈 & & f . is_download = = SwitchType . 开 启 & & f . logintime . AddDays ( 30 ) . AddHours ( - 5 ) > = DateTime . Now ) . ToArray ( ) ;
if ( members ! = null & & members . Length ! = 0 )
{
var _recordTime = recordTime ;
fl_order_alimama order = null ;
for ( int i = 0 ; i < 2 ; i + + )
{
var cpsnames = "'" + string . Join ( "','" , members . Select ( f = > f . username ) ) + "'" ;
//order = session.FindSingle<fl_order_alimama>("db_status = @db_status and db_endtime = @min and @start_time < create_time and create_time <= @end_time and db_cpsname in (" + cpsnames + ") order by create_time asc", new { db_status = (int)SystemOrderStatus.订单付款, min = DateTime.MinValue.ToString("yyyy-MM-dd HH:mm:ss"), start_time = start_time.ToString("yyyy-MM-dd HH:mm:ss"), end_time = date.ToString("yyyy-MM-dd HH:mm:ss") });
order = session . FindSingle < fl_order_alimama > ( "db_status = @db_status and @start_time < create_time and create_time <= @end_time and db_cpsname in (" + cpsnames + ") order by create_time asc" , new { db_status = ( int ) SystemOrderStatus . 订 单 付 款 , start_time = start_time . ToString ( "yyyy-MM-dd HH:mm:ss" ) , end_time = date . ToString ( "yyyy-MM-dd HH:mm:ss" ) } ) ;
if ( order ! = null )
{
if ( order . create_time ! = DateTime . MinValue & & order . create_time ! = recordTime )
{
recordTime = order . create_time ;
break ;
}
else
start_time = recordTime ;
}
}
if ( order ! = null )
{
if ( recordTime = = DateTime . MinValue ) recordTime = order . create_time ;
if ( _recordTime = = recordTime ) return ;
var staetTime = order . create_time ; //最后
if ( date > staetTime . AddDays ( 20 ) )
{
//var notices = DownOrderByOrderStatus(members, staetTime, staetTime.AddDays(1), new AlimamaOrderStatus[] { /*AlimamaOrderStatus.订单付款,*/AlimamaOrderStatus.全部订单, /* AlimamaOrderStatus.订单结算,*/ AlimamaOrderStatus.订单失效 });
var notices = DownOrderByOrderStatus ( members , staetTime , staetTime . AddDays ( 1 ) ) ;
if ( notices ! = null & & notices . Count ! = 0 )
OrderNotices ( notices ) ;
}
}
}
}
catch ( Exception )
{ }
finally
{
isRun = false ;
}
Thread . Sleep ( 1700000 ) ; //半个小时执行一次
} while ( true ) ;
} ) ;
//离线通知
ThreadPool . QueueUserWorkItem ( delegate
{
do
{
try
{
Thread . Sleep ( 60000 ) ;
var cpss = CpsClient . Members . Where ( f = > f . cpstype = = CpsType . 阿 里 妈 妈 & & f . abnormal_tip = = SwitchType . 开 启 & & f . online ) . ToList ( ) ;
if ( cpss ! = null & & cpss . Count ! = 0 )
{
foreach ( var cps in cpss )
{
try
{
HttpHelper http = new HttpHelper ( ) ;
HttpItem item = new HttpItem ( )
{
URL = "https://media.alimama.com/violationu2/violation2_page.json?r=mx_162&toPage=1&pageSize=40&punishStatus=1&csrfID=8383fb1b95de" ,
Method = "GET" ,
Timeout = 100000 ,
ReadWriteTimeout = 30000 ,
IsToLower = false ,
Cookie = cps . cookies ,
UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0" ,
Accept = "text/html, application/xhtml+xml, */*" ,
ContentType = "text/html" ,
Referer = "" ,
Allowautoredirect = false ,
AutoRedirectCookie = false ,
Postdata = "" ,
ResultType = ResultType . String ,
} ;
HttpResult result = http . GetHtml ( item ) ;
string html = result . Html ;
if ( string . IsNullOrWhiteSpace ( html ) ) continue ;
var temp = JObject . Parse ( html ) ;
if ( temp = = null ) continue ;
//{"data":{"result":[],"totalCount":0},"resultCode":1,"success":true}
var successTemp = temp [ "success" ] ;
if ( successTemp = = null | | ! ( bool ) successTemp ) continue ;
var data = temp [ "data" ] ;
if ( data = = null ) continue ;
var totalCountTemp = data [ "totalCount" ] ;
if ( totalCountTemp = = null ) continue ;
int totalCount = ( int ) totalCountTemp ;
if ( totalCount = = 0 ) continue ;
StringBuilder strb = new StringBuilder ( ) ;
strb . AppendLine ( "淘宝违规处罚通知" ) ;
strb . AppendLine ( "---------------------" ) ;
strb . AppendLine ( "淘宝昵称:" + cps . usernick ) ;
strb . AppendLine ( "淘宝账号:" + cps . username ) ;
strb . AppendLine ( "存在违规:" + totalCount + "条" ) ;
strb . AppendLine ( ) ;
strb . AppendLine ( "尽快去后台进行违规申诉" ) ;
ApiClient . SendNoticeMessage ( strb . ToString ( ) ) ;
}
catch ( Exception ex )
{ }
finally
{
Thread . Sleep ( 1000 ) ;
}
}
}
}
catch ( Exception ex )
{ }
Thread . Sleep ( 12 * 60 * 60 * 1000 ) ; //8小时执行一次
} while ( true ) ;
} ) ;
}
}
}
}
/// <summary>
/// ....
/// </summary>
private Dictionary < long , long > OrderDataIdDic = new Dictionary < long , long > ( ) ;
private DateTime update_time = DateTime . Now . AddMinutes ( - 60 ) ;
private int number ;
public override void Run ( object state , bool timedOut )
{
try
{
OrderDataIdDic = new Dictionary < long , long > ( ) ;
//return;
number + + ;
DateTime start = DateTime . Now ;
if ( number = = 1 )
{
start = DateTime . Now . AddHours ( - 5 ) ;
}
else
{
start = update_time ;
if ( number % 10 = = 0 ) start = DateTime . Now . AddHours ( - 1 ) ;
if ( number % 60 = = 0 ) start = DateTime . Now . AddHours ( - 5 ) ;
else if ( number % 120 = = 0 ) start = DateTime . Now . AddHours ( - 24 ) ;
}
var end = DateTime . Now ;
update_time = DateTime . Now . AddMinutes ( - 30 ) ;
#region 需 要 重 新 登 录 的 联 盟 账 号 通 知 钉 钉
var cps_expires = CpsClient . Members . Where ( f = > f . cpstype = = CpsType . 阿 里 妈 妈 & & f . abnormal_tip = = SwitchType . 开 启 & & f . logintime . AddDays ( 29 ) < = DateTime . Now ) . ToList ( ) ;
if ( cps_expires ! = null & & cps_expires . Count ! = 0 )
{
foreach ( var cps in cps_expires )
{
var key = $"alimama_cps_expire_{cps.username}" ;
var value = ApiClient . Cache . Get < string > ( key ) ;
if ( string . IsNullOrWhiteSpace ( value ) )
{
var session = ApiClient . GetSession ( ) ;
var robot = session . FindRobots ( ) . FirstOrDefault ( ) ;
StringBuilder strb = new StringBuilder ( ) ;
strb . AppendLine ( "淘宝状态异常" ) ;
strb . AppendLine ( "---------------------" ) ;
if ( robot ! = null )
strb . AppendLine ( "所在机器人:" + $"({robot.nick}){robot.name}" ) ;
strb . AppendLine ( "昵称:" + cps . usernick ) ;
strb . AppendLine ( "账号:" + cps . username ) ;
strb . AppendLine ( ) ;
strb . AppendLine ( "解决方法:重新登录" ) ;
ApiClient . SendNoticeMessage ( strb . ToString ( ) ) ;
ApiClient . Cache . Set ( key , "." , 300 ) ;
Thread . Sleep ( 50 ) ;
}
}
}
#endregion
var _members = CpsClient . Members . Where ( f = > f . cpstype = = CpsType . 阿 里 妈 妈 & & f . is_download = = SwitchType . 开 启 & & f . logintime . AddDays ( 30 ) . AddHours ( - 5 ) > = DateTime . Now ) . ToArray ( ) ;
UnValidCpsMember ( _members ) ;
UpdateOrder ( _members , start , end ) ;
#region 同 步 失 效 订 单
if ( number % 2000 = = 0 )
{
//var notices = DownOrderByOrderStatus(_members, DateTime.Now.AddDays(-5), end, new AlimamaOrderStatus[] { AlimamaOrderStatus.订单失效 });
var notices = DownOrderByOrderStatus ( _members , DateTime . Now . AddDays ( - 5 ) , end ) ;
OrderNotices ( notices ) ;
}
#endregion
}
catch ( Exception ex )
{
EventClient . OnEvent ( this , $"Alimama - > Run:{ex.Message},{ex.StackTrace}" ) ;
}
finally
{
OrderDataIdDic = new Dictionary < long , long > ( ) ;
}
}
/// <summary>
/// 通过cps获取AlimamaApi
/// </summary>
/// <param name="cps">cps对象</param>
/// <returns></returns>
public AlimamaApi GetAlimamaApi ( fl_cps_member cps )
{
try
{
return new AlimamaApi ( cps ) ;
}
catch ( Exception )
{ }
return null ;
}
#region 下 载 维 权 退 款 订 单
private bool IsRun = false ;
/// <summary>
/// 爬虫更新阿里妈妈订单 - 下载维权退款订单
/// </summary>
/// <param name="api">AlimamaApi对象</param>
/// <param name="startTime">开始时间</param>
/// <param name="maxPage">最大的页数</param>
public void UpdateOrder ( AlimamaApi api , DateTime startTime , int maxPage = 999999 )
{
#region
if ( IsRun ) return ;
try
{
IsRun = true ;
int toPage = 1 ;
List < Dictionary < string , object > > result = null ;
var pageSize = 1000 ;
List < OrderNoticeEvent > notices = new List < OrderNoticeEvent > ( ) ;
do
{
result = api . SerchOrder ( OrderType . 维 权 退 款 明 细 , 0 , "" , pageSize , startTime , toPage ) ; //获取淘宝联盟的订单
var session = ApiClient . GetSession ( ) ;
foreach ( Dictionary < string , object > item in result )
{
var order = session . FindSingle < fl_order_alimama > ( "select * from fl_order_alimama where trade_id = @trade_id and trade_parent_id = @trade_parent_id" , new { trade_id = item [ "tbTradeId" ] . ToString ( ) , trade_parent_id = item [ "tbTradeParentId" ] . ToString ( ) } ) ;
string _showRefundStatus = string . Empty ;
if ( order ! = null )
{
if ( order . auction_category = = "手动处理" )
continue ;
bool IsRefundOrderExist = false ; //是否是新创建
var refund_order = session . FindSingle < fl_order_refund_alimama > ( "select * from fl_order_refund_alimama where tbtradeparentid = @tbtradeparentid and tbtradeid = @tbtradeid" , new { tbtradeparentid = item [ "tbTradeParentId" ] . ToString ( ) , tbtradeid = item [ "tbTradeId" ] . ToString ( ) } ) ;
if ( refund_order = = null )
{
_showRefundStatus = ( item [ "showRefundStatus" ] = = null ? string . Empty : item [ "showRefundStatus" ] . ToString ( ) ) . Replace ( ", " , "," ) . Replace ( "," , "_" ) ; //维权状态
if ( _showRefundStatus . Contains ( "维权成功" ) )
_showRefundStatus = "维权成功" ;
else if ( _showRefundStatus . Contains ( "维权失败" ) )
_showRefundStatus = "维权失败" ;
IsRefundOrderExist = true ;
refund_order = new fl_order_refund_alimama ( )
{
earningtime = ! item . ContainsKey ( "earningTime" ) | | item [ "earningTime" ] = = null ? string . Empty : item [ "earningTime" ] . ToString ( ) ,
inviteraccountname = string . Empty , //item["inviterAccountName"] == null ? string.Empty : item["inviterAccountName"].ToString(),
inviterid = string . Empty , //item["inviterId"] == null ? string.Empty : item["inviterId"].ToString(),
refundcreatetime = ! item . ContainsKey ( "refundCreateTime" ) | | item [ "refundCreateTime" ] = = null ? string . Empty : item [ "refundCreateTime" ] . ToString ( ) ,
refundfee = ! item . ContainsKey ( "refundFee" ) | | item [ "refundFee" ] = = null ? 0d : double . Parse ( item [ "refundFee" ] . ToString ( ) ) ,
refundservicefee = ! item . ContainsKey ( "refundServiceFee" ) | | item [ "refundServiceFee" ] = = null ? 0d : double . Parse ( item [ "refundServiceFee" ] . ToString ( ) ) ,
relationapp = string . Empty , //item["relationApp"] == null ? string.Empty : item["relationApp"].ToString(),
relationappname = string . Empty , //item["relationAppName"] == null ? string.Empty : item["relationAppName"].ToString(),
relationid = string . Empty , // item["relationId"] == null ? string.Empty : item["relationId"].ToString(),
showrefundreason = string . Empty , // item["showRefundReason"] == null ? string.Empty : item["showRefundReason"].ToString(),
showrefundstatus = _showRefundStatus ,
showreturnfee = ! item . ContainsKey ( "showReturnFee" ) | | item [ "showReturnFee" ] = = null ? 0d : double . Parse ( item [ "showReturnFee" ] . ToString ( ) ) ,
tbauctionnum = string . Empty , //item["tbAuctionNum"] == null ? string.Empty : item["tbAuctionNum"].ToString(),
tbauctiontitle = item . ContainsKey ( "itemTitle" ) ? item [ "itemTitle" ] . ToString ( ) : string . Empty , //item["tbAuctionTitle"] == null ? string.Empty : item["tbAuctionTitle"].ToString(),
tbsellershoptitle = ! item . ContainsKey ( "sellerShopTitle" ) | | item [ "sellerShopTitle" ] = = null ? string . Empty : item [ "sellerShopTitle" ] . ToString ( ) ,
tbtradefinishprice = string . Empty , //item["tbTradeFinishPrice"] == null ? string.Empty : item["tbTradeFinishPrice"].ToString(),
tbtradeid = ! item . ContainsKey ( "tbTradeId" ) | | item [ "tbTradeId" ] = = null ? string . Empty : item [ "tbTradeId" ] . ToString ( ) ,
tbtradeparentid = ! item . ContainsKey ( "tbTradeParentId" ) | | item [ "tbTradeParentId" ] = = null ? string . Empty : item [ "tbTradeParentId" ] . ToString ( ) ,
tkcommissionfee = ! item . ContainsKey ( "finalPubShareFee" ) | | item [ "finalPubShareFee" ] = = null ? 0d : double . Parse ( item [ "finalPubShareFee" ] . ToString ( ) ) ,
tksubsidyfee = string . Empty , //item["tkSubsidyFee"] == null ? string.Empty : item["tkSubsidyFee"].ToString()
} ;
if ( item . ContainsKey ( "refundFinishTime" ) ) refund_order . refundfinishtime = item [ "refundFinishTime" ] = = null ? string . Empty : item [ "refundFinishTime" ] . ToString ( ) ;
}
else
{
IsRefundOrderExist = false ;
_showRefundStatus = ( item [ "showRefundStatus" ] = = null ? string . Empty : item [ "showRefundStatus" ] . ToString ( ) ) . Replace ( ", " , "," ) . Replace ( "," , "_" ) ; //维权状态
if ( _showRefundStatus . Contains ( "维权成功" ) )
_showRefundStatus = "维权成功" ;
else if ( _showRefundStatus . Contains ( "维权失败" ) )
_showRefundStatus = "维权失败" ;
if ( refund_order . showrefundstatus ! = _showRefundStatus )
{
if ( refund_order . showrefundstatus = = "维权失败" & & _showRefundStatus = = "维权成功" )
{
IsRefundOrderExist = true ;
}
refund_order . showrefundstatus = _showRefundStatus ;
refund_order . refundfee = item [ "refundFee" ] = = null ? 0d : double . Parse ( item [ "refundFee" ] . ToString ( ) ) ; //维权金额
refund_order . refundcreatetime = item [ "refundCreateTime" ] = = null ? string . Empty : item [ "refundCreateTime" ] . ToString ( ) ;
if ( item . ContainsKey ( "refundFinishTime" ) )
refund_order . refundfinishtime = item [ "refundFinishTime" ] = = null ? string . Empty : item [ "refundFinishTime" ] . ToString ( ) ; //退款完成时间
if ( item . ContainsKey ( "refundServiceFee" ) )
refund_order . refundservicefee = item [ "refundServiceFee" ] = = null ? 0d : double . Parse ( item [ "refundServiceFee" ] . ToString ( ) ) ; //退还服务费用
if ( item . ContainsKey ( "showReturnFee" ) )
refund_order . showreturnfee = item [ "showReturnFee" ] = = null ? 0d : double . Parse ( item [ "showReturnFee" ] . ToString ( ) ) ; //退款金额
if ( string . IsNullOrWhiteSpace ( refund_order . tbauctiontitle ) & & item . ContainsKey ( "itemTitle" ) )
refund_order . tbauctiontitle = item [ "itemTitle" ] . ToString ( ) ;
}
else
{
var flag = false ;
if ( _showRefundStatus = = "维权失败" & & ( order . db_status = = SystemOrderStatus . 订 单 维 权 中 | | ! order . IsFinish ( ) ) )
{
flag = true ;
}
if ( string . IsNullOrWhiteSpace ( refund_order . tbauctiontitle ) & & item . ContainsKey ( "itemTitle" ) )
{
refund_order . tbauctiontitle = item [ "itemTitle" ] . ToString ( ) ;
if ( ! flag )
session . SaveOrUpdate ( refund_order ) ;
}
if ( ! flag )
continue ;
}
}
session . SaveOrUpdate ( refund_order ) ;
//非维权失败
if ( ! _showRefundStatus . Contains ( "维权失败" ) )
{
//如果订单结算、直接扣除
if ( order . db_status = = SystemOrderStatus . 订 单 结 算 | | order . db_status = = SystemOrderStatus . 部 分 退 款 )
{
order . tk_status = ( int ) AlimamaOrderStatus . 订 单 维 权 中 ; //后加
order . db_endtime = DateTime . MinValue ; //后加
order . db_status = SystemOrderStatus . 订 单 维 权 中 ;
if ( order . db_userid > 0 )
{
var pointHists = session . Find < fl_point_hist > ( "select * from fl_point_hist where uid = @uid and type = @pointType_name and message = @message" , new { uid = order . db_userid , pointType_name = PointType . 维 权 扣 除 . ToString ( ) , message = $"退款:{order.item_title}({order.trade_parent_id})({order.trade_id})" } ) ;
if ( pointHists ! = null & & pointHists . Count ! = 0 )
{
continue ;
}
}
//扣除用户订单,结算的积分
new OrderHelper ( ) . DeductAliOrderPoint ( notices , order ) ;
if ( IsRefundOrderExist & & _showRefundStatus . Contains ( "维权成功" ) ) //如果上面的阿里妈妈维权订单有一段时间没有下载到(维权订单),新new的对象,以前没有记录
{
var order2 = session . FindSingle < fl_order_alimama > ( "trade_id=@trade_id and trade_parent_id=@trade_parent_id" , new
{
trade_id = item [ "tbTradeId" ] . ToString ( ) ,
trade_parent_id = item [ "tbTradeParentId" ] . ToString ( )
} ) ;
session . SaveOrUpdate ( order ) ;
order2 . db_status = SystemOrderStatus . 订 单 结 算 ;
order2 . tk_status = ( int ) AlimamaOrderStatus . 订 单 结 算 ;
order2 . db_endtime = DateTime . Now ;
//var strb = new StringBuilder();
//try
//{
// strb.Append($@"维权A 数据1:{HttpHelper.ObjectToJson(order2)}");
//}
//catch (Exception)
//{ }
UpdateOrder ( order2 , notices , session , refund_order ) ;
//try
//{
// strb.AppendLine($@"返回: {HttpHelper.ObjectToJson(order2)}");
// LogHelper.GetSingleObj().Debug("淘宝订单_: ", strb.ToString());
//}
//catch (Exception)
//{ }
session . SaveOrUpdate ( order2 ) ;
continue ;
}
if ( IsRefundOrderExist & & _showRefundStatus . Contains ( "维权成功" ) ) //如果上面的阿里妈妈维权订单有一段时间没有下载到(维权订单),新new的对象,以前没有记录
{
continue ;
}
}
if ( _showRefundStatus . Contains ( "维权成功" ) )
{
if ( order . tk_status = = ( int ) AlimamaOrderStatus . 订 单 维 权 中 ) //这个是出里别的软件导过来,还会结算一次
{
order . db_status = SystemOrderStatus . 订 单 结 算 ;
order . tk_status = ( int ) AlimamaOrderStatus . 订 单 结 算 ;
order . db_endtime = DateTime . Now ;
//var strb = new StringBuilder();
//try
//{
// strb.Append($@"维权B 数据1:{HttpHelper.ObjectToJson(order)}");
//}
//catch (Exception)
//{ }
UpdateOrder ( order , notices , session , refund_order ) ;
//try
//{
// strb.AppendLine($@"返回: {HttpHelper.ObjectToJson(order)}");
// LogHelper.GetSingleObj().Debug("淘宝订单_: ", strb.ToString());
//}
//catch (Exception)
//{ }
}
}
else
{
order . tk_status = ( int ) AlimamaOrderStatus . 订 单 维 权 中 ; //后加
order . db_endtime = DateTime . MinValue ; //后加
order . db_status = SystemOrderStatus . 订 单 维 权 中 ;
session . SaveOrUpdate ( order ) ;
}
}
else
{
if ( order . db_status = = SystemOrderStatus . 订 单 维 权 中 | | ! order . IsFinish ( ) )
{
if ( IsRefundOrderExist & & ( order . db_status = = SystemOrderStatus . 订 单 冻 结 | | order . db_status = = SystemOrderStatus . 订 单 付 款 ) )
{
continue ;
}
//维权失败 、 正常结算给客户
order . tk_status = ( int ) AlimamaOrderStatus . 订 单 结 算 ;
order . db_status = SystemOrderStatus . 订 单 冻 结 ;
order . db_endtime = DateTime . Now ;
//var strb = new StringBuilder();
//try
//{
// strb.Append($@"维权B 数据2: {HttpHelper.ObjectToJson(order)}");
//}
//catch (Exception)
//{ }
UpdateOrder ( order , notices , session , refund_order ) ;
//try
//{
// strb.AppendLine($@"返回: {HttpHelper.ObjectToJson(order)}");
// LogHelper.GetSingleObj().Debug("淘宝订单_: ", strb.ToString());
//}
//catch (Exception)
//{ }
}
}
}
}
toPage + + ;
} while ( result ! = null & & result . Count = = pageSize & & toPage < maxPage ) ;
OrderNotices ( notices ) ;
}
catch ( Exception ex )
{
EventClient . OnEvent ( this , "下载维权退款订单异常:" + ex . Message ) ;
}
finally
{
IsRun = false ;
}
#endregion
}
#endregion
/// <summary>
/// 同步订单
/// </summary>
/// <param name="_members">同步账号时间</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 ( end_time . Hour = = 3 & & 0 < = end_time . Minute & & end_time . Minute < = 7 ) return ;
_members = _members . Where ( f = > f . is_download = = SwitchType . 开 启 ) . ToArray ( ) ;
if ( _members = = null | | _members . Length = = 0 )
return ;
List < OrderNoticeEvent > notices = null ;
try
{
UnValidCpsMember ( _members ) ;
if ( ! string . IsNullOrWhiteSpace ( order_id ) )
//notices = DownOrderByOrderStatus(_members, start_time, end_time, new AlimamaOrderStatus[] { AlimamaOrderStatus.订单付款 });
notices = DownOrderByOrderStatus ( _members , start_time , end_time ) ;
else
{
//notices = DownOrderByOrderStatus(_members, start_time, end_time, new AlimamaOrderStatus[] { AlimamaOrderStatus.订单付款, AlimamaOrderStatus.全部订单, AlimamaOrderStatus.订单结算, AlimamaOrderStatus.订单失效 });
notices = DownOrderByOrderStatus ( _members , start_time , end_time ) ;
#region 检 查 冻 结 状 态 的 订 单 是 否 可 以 结 算
var session = ApiClient . GetSession ( ) ;
var end_orders = session . Find < fl_order_alimama > ( "db_status = @db_status and db_endtime != @min and db_endtime < @now" , new { db_status = ( int ) SystemOrderStatus . 订 单 冻 结 , min = DateTime . MinValue . ToString ( "yyyy-MM-dd HH:mm:ss" ) , now = DateTime . Now . ToString ( "yyyy-MM-dd HH:mm:ss" ) } ) ;
//var strb = new StringBuilder();
//strb.AppendLine("检查冻结订单是否可以结算...");
//int index = 1;
foreach ( var db_order in end_orders )
{
//strb.Append($@"订单{index}:{HttpHelper.ObjectToJson(db_order)}");
UpdateOrder ( db_order , notices , session ) ;
//strb.AppendLine($@"返回: {HttpHelper.ObjectToJson(db_order)}");
//index++;
//strb.AppendLine();
}
//try
//{
// LogHelper.GetSingleObj().Debug("淘宝订单_: ", strb.ToString());
//}
//catch (Exception)
//{ }
#endregion
}
}
catch ( Exception ex )
{
var err = "" ;
if ( ex . Message . Contains ( "未将对象引用设置到对象的实例" ) )
err = ",请重新登录淘宝" ;
EventClient . OnEvent ( this , $"更新阿里妈妈订单异常:{ex.Message} - {ex.StackTrace} {err}" ) ;
}
OrderNotices ( notices ) ;
}
/// <summary>
/// 手动同步指定阿里妈妈订单状态
/// </summary>
/// <param name="members">要同步的阿里妈妈</param>
/// <param name="start_time">同步的时间</param>
/// <param name="end_time">同步结束的时间</param>
/// <param name="status">订单的状态</param>
public void UpdateOrder ( fl_cps_member [ ] _members , DateTime start_time , DateTime end_time , AlimamaOrderStatus status )
{
if ( _members = = null | | _members . Length = = 0 )
return ;
//if (status == AlimamaOrderStatus.全部订单 || status == AlimamaOrderStatus.订单成功 || status == AlimamaOrderStatus.订单维权中)
//return;
List < OrderNoticeEvent > notices = null ;
try
{
UnValidCpsMember ( _members ) ;
notices = DownOrderByOrderStatus ( _members , start_time , end_time , new AlimamaOrderStatus [ ] { status } ) ;
//notices = DownOrderByOrderStatus(_members, start_time, end_time);
}
catch ( Exception ex )
{
EventClient . OnEvent ( this , $"更新阿里妈妈订单({status.ToString()}): " + ex . Message ) ;
}
OrderNotices ( notices ) ;
}
/// <summary>
/// 创建阿里妈妈订单同步任务
/// </summary>阿里妈妈联盟</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 , "更新阿里妈妈订单异常4:" + ex . Message ) ;
}
finally
{
IsRunning = false ;
}
}
//private static readonly int row_count = 19;//阿里妈妈更新间隔间隔
#region 同 步 间 隔 时 间 缓 存
/// <summary>
/// 设置同步的时间间隔
/// </summary>
/// <param name="interval"></param>
internal static void SetIntervalCache ( int interval )
{
try
{
var cacheName = DateTime . Now . ToString ( "yyyyMMdd" ) ;
Cache cache = HttpRuntime . Cache ;
//时间间隔缓存,不存在则返回null
object item = cache [ cacheName ] ;
if ( item = = null )
{
var date = DateTime . Now . Date . AddDays ( 1 ) . AddMilliseconds ( - 1 ) ;
cache . Insert ( cacheName , interval , null , date , System . Web . Caching . Cache . NoSlidingExpiration ) ;
}
}
catch ( Exception ex )
{ }
}
/// <summary>
/// 获取同步的时间间隔
/// </summary>
/// <returns></returns>
internal static int GetIntervalCache ( )
{
try
{
var cacheName = DateTime . Now . ToString ( "yyyyMMdd" ) ;
Cache cache = HttpRuntime . Cache ;
object item = cache [ cacheName ] ;
if ( item ! = null )
return Convert . ToInt32 ( item ) ;
}
catch ( Exception )
{ }
return interval ;
}
/// <summary>
/// 判断缓存是否存在
/// </summary>
/// <returns></returns>
internal static bool IsExitCache ( )
{
try
{
var cacheName = DateTime . Now . ToString ( "yyyyMMdd" ) ;
Cache cache = HttpRuntime . Cache ;
return cache [ cacheName ] ! = null ;
}
catch ( Exception ex )
{ }
return false ;
}
#endregion
#region 老 道 通 过 阿 里 妈 妈 订 单 状 态 下 载 订 单
private const int interval = 60 ;
private List < OrderNoticeEvent > DownOrderByOrderStatus ( fl_cps_member [ ] _members , DateTime _start_time , DateTime _end_time , AlimamaOrderStatus [ ] _orderStatus = null )
{
var orderStatus = _orderStatus ;
var members = _members ;
DateTime start_time = _start_time ;
DateTime end_time = _end_time ;
//start_time = DateTime.Parse("2020-05-26 07:00:00");
//end_time = DateTime.Parse("2020-05-31 01:00:00");
List < OrderNoticeEvent > notices = new List < OrderNoticeEvent > ( ) ;
//if (orderStatus == null || orderStatus.Length == 0) return notices;
members = members . Where ( f = > f . is_valid ) . ToArray ( ) ;
if ( members . Length ! = 0 )
{
try
{
var isState = ( orderStatus = = null | | orderStatus . Length = = 0 ) ;
var row_count = 19 ;
if ( ! IsExitCache ( ) ) //如果缓存时间不存在那么先请求一次下载订单
{
var _member = members . FirstOrDefault ( f = > f . logintime > DateTime . Now . AddDays ( - 29 ) ) ;
if ( _member ! = null )
{
var api = CpsClient . CreateAlimamaRequest ( _member ) ;
var time = end_time . AddMinutes ( - interval ) ;
//UpdateOrder(AlimamaOrderType.淘客明细订单, time, api, notices, _member, orderStatus[0]);
if ( isState )
api . DownOrder ( time , 1 , 100 , AlimamaOrderType . 淘 客 明 细 订 单 , 1 ) ;
else
api . DownOrder ( time , 1 , 100 , orderStatus [ 0 ] , AlimamaOrderType . 淘 客 明 细 订 单 , 1 ) ;
}
}
if ( IsExitCache ( ) )
{
row_count = GetIntervalCache ( ) ;
}
var spa_time = end_time - start_time ; //计算时间差
//int count = (int)spa_time.TotalMinutes / row_count;
//if (spa_time.TotalMinutes % row_count != 0) count++;
var count = Math . Ceiling ( spa_time . TotalMinutes / row_count ) ;
if ( ! isState ) //带订单状态
{
for ( int s = 0 ; s < orderStatus . Length ; s + + ) //更新的订单状态
{
var status = orderStatus [ s ] ;
Task [ ] _task = new Task [ members . Length ] ;
for ( int i = 0 ; i < members . Length ; i + + )
{
var _status = status ;
var _member = members [ i ] ;
var _api = CpsClient . CreateAlimamaRequest ( _member ) ;
_task [ i ] = new Task ( delegate
{
var api = _api ;
var member = _member ;
try
{
for ( int j = 1 ; j < = count ; j + + )
{
//临时时间
var _time = end_time . AddMinutes ( - ( j * row_count ) ) ;
UpdateOrder ( AlimamaOrderType . 淘 客 明 细 订 单 , _time , api , notices , member , _status ) ;
UpdateOrder ( AlimamaOrderType . 第 三 方 订 单 明 细 , _time , api , notices , member , _status ) ;
}
}
catch ( Exception ex )
{
EventClient . OnEvent ( this , $"阿里妈妈Api更新订单状态异常: {member.usernick} ~ {status} # {ex.Message} - {ex.StackTrace}" ) ;
}
} ) ;
_task [ i ] . Start ( ) ;
Thread . Sleep ( 100 ) ;
}
Task . WaitAll ( _task ) ;
Thread . Sleep ( 10 ) ;
}
}
else //没有订单状态
{
Task [ ] _task = new Task [ members . Length ] ;
for ( int i = 0 ; i < members . Length ; i + + )
{
var _member = members [ i ] ;
var _api = CpsClient . CreateAlimamaRequest ( _member ) ;
_task [ i ] = new Task ( delegate
{
var api = _api ;
var member = _member ;
try
{
for ( int j = 1 ; j < = count ; j + + )
{
//临时时间
var _time = end_time . AddMinutes ( - ( j * row_count ) ) ;
UpdateOrder ( AlimamaOrderType . 淘 客 明 细 订 单 , _time , api , notices , member ) ;
UpdateOrder ( AlimamaOrderType . 第 三 方 订 单 明 细 , _time , api , notices , member ) ;
}
}
catch ( Exception ex )
{
EventClient . OnEvent ( this , $"阿里妈妈Api更新订单状态异常: {member.usernick} ~ ## {ex.Message} - {ex.StackTrace}" ) ;
}
} ) ;
_task [ i ] . Start ( ) ;
Thread . Sleep ( 100 ) ;
}
Task . WaitAll ( _task ) ;
}
}
catch ( Exception ex )
{
throw ex ;
}
}
return notices ;
}
#endregion
/// <summary>
/// 事件通知
/// </summary>
/// <param name="_notices"></param>
private void OrderNotices ( List < OrderNoticeEvent > _notices )
{
var notices = _notices ;
if ( notices ! = null & & notices . Count ! = 0 )
{
var tasks = TimerTask . GetTimer < Update_NoticeQueue > ( ) as Update_NoticeQueue ;
foreach ( var item in notices )
{
var order = item . Order as fl_order_alimama ;
if ( order . trade_parent_id = = order_id ) continue ;
Thread . Sleep ( 5 ) ;
tasks . Add ( item ) ;
}
notices . Clear ( ) ;
notices = null ;
}
}
#region 下 载 订 单
#region 下 载 阿 里 妈 妈 订 单
/// <summary>
/// 下载阿里订单
/// </summary>
/// <param name="_order_type"></param>
/// <param name="_start_time"></param>
/// <param name="_api"></param>
/// <param name="notices"></param>
/// <param name="_ItemMember"></param>
/// <param name="_tk_status"></param>
internal void UpdateOrder ( AlimamaOrderType _order_type , DateTime _start_time , AlimamaApi _api , List < OrderNoticeEvent > notices , fl_cps_member _ItemMember , AlimamaOrderStatus _tk_status = AlimamaOrderStatus . 全 部 订 单 )
{
var order_type = _order_type ;
var start_time = _start_time ;
var ItemMember = _ItemMember ;
var tk_status = _tk_status ;
var api = _api ;
var downTypeList = new List < int > ( ) { 3 , 1 } ;
//foreach (int order_scene in Enum.GetValues(typeof(TBDownType)))
foreach ( var order_scene in downTypeList )
{
try
{
ArrayList list = null ;
if ( tk_status ! = AlimamaOrderStatus . 全 部 订 单 )
list = api . DownOrder ( start_time , 1 , 100 , tk_status , order_type , order_scene ) ;
else
list = api . DownOrder ( start_time , 1 , 100 , order_type , order_scene ) ;
if ( list = = null | | list . Count = = 0 )
{
Thread . Sleep ( 300 ) ;
continue ;
}
//var _pids = ApiClient.Setting.SystemConfig.order_alimama_not_download_pid.Replace(", ", ",").Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(f => f.Trim()).ToList();
int count = 0 ;
foreach ( Dictionary < string , object > order in list )
{
count + + ;
var session = ApiClient . GetSession ( ) ;
try
{
if ( ! string . IsNullOrEmpty ( order_id ) & & order [ "trade_parent_id" ] . ToString ( ) ! = order_id ) continue ;
//订单号搜索
//if (order["trade_parent_id"].ToString() == "2104466653925439514" && order["trade_id"].ToString() == "2104466653926439514")
//{
//}
2022-11-07 14:07:42 +00:00
if ( order [ "trade_parent_id" ] . ToString ( ) = = "3005578008913950205" )
{
2022-09-20 03:10:29 +00:00
2022-11-07 14:07:42 +00:00
}
else if ( order [ "trade_parent_id" ] . ToString ( ) = = "3006644114425243017" )
{
}
else if ( order [ "trade_parent_id" ] . ToString ( ) = = "3010261971527788109" )
{
}
2022-09-20 03:10:29 +00:00
if ( order . ContainsKey ( "alipay_total_price" ) & & double . Parse ( order [ "alipay_total_price" ] . ToString ( ) ) = = 0d ) //不处理赠品商品,直接跳过
continue ;
#region 处 理 的 PID
if ( ApiClient . Setting . SystemConfig . order_alimama_download_set_pids = = SwitchType . 关 闭 )
{
var _pids = ApiClient . Setting . SystemConfig . order_alimama_not_download_pid . Replace ( ", " , "," ) . Split ( new string [ ] { "," } , StringSplitOptions . RemoveEmptyEntries ) . Select ( f = > f . Trim ( ) ) . ToList ( ) ;
if ( _pids . Count ! = 0 & & order . ContainsKey ( "adzone_id" ) )
{
var isExist = _pids . FirstOrDefault ( f = > f . EndsWith ( "_" + order [ "adzone_id" ] . ToString ( ) ) ) ! = null ; //是否包含
if ( ApiClient . Setting . SystemConfig . order_alimama_down_type = = DownAdzoneType . 不 下 载 推 广 位 & & isExist )
continue ;
else if ( ApiClient . Setting . SystemConfig . order_alimama_down_type = = DownAdzoneType . 只 下 载 推 广 位 & & ! isExist )
continue ;
}
}
else
{
if ( order . ContainsKey ( "adzone_id" ) )
{
var adzoneList = new List < fl_adzone_info > ( ) ;
var adzones = session . FindAdzoneInfos ( ) ;
adzoneList . AddRange ( adzones . Where ( f = > f . custom_type = = "淘宝返利" & & ! string . IsNullOrEmpty ( f . adzone_pid ) & & f . adzone_pid . EndsWith ( "_" + order [ "adzone_id" ] . ToString ( ) ) ) ) ;
adzoneList . AddRange ( adzones . Where ( f = > f . custom_type = = "用户私人pid" & & f . extend = = "淘宝私人pid" & & ! string . IsNullOrEmpty ( f . adzone_pid ) & & f . adzone_pid . EndsWith ( "_" + order [ "adzone_id" ] . ToString ( ) ) ) ) ;
if ( adzoneList = = null | | adzoneList . Count ( ) = = 0 )
{
if ( null = = session . FindAdzoneGroups ( CpsType . 阿 里 妈 妈 ) . FirstOrDefault ( f = > Regex . IsMatch ( f . adzones , "_" + order [ "adzone_id" ] . ToString ( ) ) ) )
continue ;
continue ;
}
}
}
if ( ApiClient . Setting . DbConfig . DatabaseType = = DatabaseType . SQLITE & & count % 10 = = 0 )
Thread . Sleep ( 150 ) ;
#endregion
var status = int . Parse ( order [ "tk_status" ] . ToString ( ) ) ;
//var db_order = session.Queryable<fl_order_alimama>().Where(f => f.trade_id == order["trade_id"].ToString() && f.trade_parent_id == order["trade_parent_id"].ToString()).First();
var db_order = session . FindSingle < fl_order_alimama > ( "select * from fl_order_alimama where trade_id = @trade_id and trade_parent_id = @trade_parent_id" , new { trade_id = order [ "trade_id" ] . ToString ( ) , trade_parent_id = order [ "trade_parent_id" ] . ToString ( ) } ) ;
if ( db_order ! = null ) //跳过相同状态
{
2022-11-07 14:27:45 +00:00
if ( db_order . total_commission_rate = = 0 & & ( db_order . order_type ! = "饿了么" & & db_order . order_type ! = "聚划算" ) ) continue ;
2022-09-20 03:10:29 +00:00
if ( db_order . IsFinish ( ) ) continue ; //是否完成
#region 预 付 定 金 处 理
if ( order . ContainsKey ( "tb_deposit_time" ) & & order [ "tb_deposit_time" ] . ToString ( ) ! = "--" )
{
if ( order . ContainsKey ( "alipay_total_price" ) & & double . Parse ( order [ "alipay_total_price" ] . ToString ( ) ) ! = db_order . alipay_total_price )
{
var alipay_total_price = double . Parse ( order [ "alipay_total_price" ] . ToString ( ) ) ;
db_order . alipay_total_price = alipay_total_price ;
if ( order . ContainsKey ( "pub_share_pre_fee" ) )
db_order . pub_share_pre_fee = double . Parse ( order [ "pub_share_pre_fee" ] . ToString ( ) ) ;
fl_member_info member = null ;
if ( db_order . db_userid ! = 0 )
{
//member = session.FindSingle<fl_member_info>("select * from fl_member_info where id = @id", new { id = db_order.db_userid });
member = session . FindMemberInfoById ( db_order . db_userid ) ;
}
//计算的佣金 - 判断使用设置模式,符合将扣除用户自定义预扣佣金
var commission = session . GetTbComparisonFeeRate ( db_order ) ;
//查询历史查询比例
var compute = session . FindQueryRatioHist ( CpsType . 阿 里 妈 妈 , db_order . id ) ;
ItemPoint itempoint = null ;
if ( compute ! = null )
itempoint = session . FindItemPoint ( CpsType . 阿 里 妈 妈 , compute , commission , db_order . item_num ) ;
else
itempoint = session . FindItemPoint ( member , commission , db_order . item_num , CpsType . 阿 里 妈 妈 ) ;
db_order . db_userpoint = itempoint . UserPoint ;
db_order . db_point = HttpHelper . ObjectToJson ( itempoint ) ;
session . SaveOrUpdate ( db_order ) ;
}
#region 以 后 直 接 删 除
if ( order . ContainsKey ( "deposit_price" ) & & string . IsNullOrWhiteSpace ( db_order . deposit_price ) )
{
db_order . deposit_price = order [ "deposit_price" ] . ToString ( ) ;
db_order . tb_deposit_time = order [ "tb_deposit_time" ] . ToString ( ) ;
session . SaveOrUpdate ( db_order ) ;
}
#endregion
}
#endregion
if ( db_order . db_status = = SystemOrderStatus . 订 单 冻 结 & & db_order . db_endtime > DateTime . Now ) continue ; //跳过系统冻结
2022-11-07 14:28:05 +00:00
if ( ( int ) db_order . tk_status = = status ) continue ; //跳过相同状态?
2022-09-20 03:10:29 +00:00
#region 更 新 以 下 的 值
#region 老 接 口 09 - 20
//if (order.ContainsKey("commission"))
// db_order.commission = double.Parse(order["commission"].ToString());
//if (order.ContainsKey("pay_price"))
// db_order.pay_price = double.Parse(order["pay_price"].ToString());
//if (order.ContainsKey("earning_time"))
// db_order.earning_time = DateTime.Parse(order["earning_time"].ToString());
#endregion
#region 新 接 口 09 - 20
//if (order.ContainsKey("commission"))
// db_order.commission = double.Parse(order["commission"].ToString());
if ( order . ContainsKey ( "tk_paid_time" ) )
db_order . paid_time = DateTime . Parse ( order [ "tk_paid_time" ] . ToString ( ) ) ;
if ( order . ContainsKey ( "pub_share_fee" ) )
db_order . commission = double . Parse ( order [ "pub_share_fee" ] . ToString ( ) ) ;
if ( order . ContainsKey ( "pay_price" ) )
db_order . pay_price = double . Parse ( order [ "pay_price" ] . ToString ( ) ) ;
//if (order.ContainsKey("earning_time"))
// db_order.earning_time = DateTime.Parse(order["earning_time"].ToString());
if ( order . ContainsKey ( "tk_earning_time" ) )
db_order . earning_time = DateTime . Parse ( order [ "tk_earning_time" ] . ToString ( ) ) ;
if ( order . ContainsKey ( "total_commission_fee" ) )
db_order . total_commission_fee = double . Parse ( order [ "total_commission_fee" ] . ToString ( ) ) ;
#endregion
#endregion
}
//自动填充实例
if ( db_order = = null )
{
db_order = order . ConvertToObj < fl_order_alimama > ( ) ;
2022-11-07 14:07:42 +00:00
if ( db_order . total_commission_rate = = 0 & & ( db_order . order_type ! = "饿了么" & & db_order . order_type ! = "聚划算" ) ) continue ;
2022-09-20 03:10:29 +00:00
if ( order . ContainsKey ( "subsidy_type" ) )
{
AlimamaOrderSubsidyType subsidyType ;
if ( ! Enum . TryParse ( order [ "subsidy_type" ] . ToString ( ) , out subsidyType ) )
subsidyType = AlimamaOrderSubsidyType . 其 他 ;
db_order . subsidy_type = ( int ) subsidyType ;
}
if ( order . ContainsKey ( "terminal_type" ) )
{
AlimamaOrderTerminalType terminalType ;
if ( ! Enum . TryParse ( order [ "terminal_type" ] . ToString ( ) , out terminalType ) )
terminalType = AlimamaOrderTerminalType . 其 他 ;
db_order . terminal_type = ( int ) terminalType ;
}
db_order . income_rate = ( double ) ( ( decimal ) db_order . income_rate / 100 m ) ;
db_order . total_commission_rate = ( double ) ( ( decimal ) db_order . total_commission_rate / 100 m ) ;
db_order . subsidy_rate = ( double ) ( ( decimal ) db_order . subsidy_rate / 100 m ) ;
#region 新 接 口
if ( order . ContainsKey ( "tk_paid_time" ) )
db_order . paid_time = DateTime . Parse ( order [ "tk_paid_time" ] . ToString ( ) ) ;
if ( order . ContainsKey ( "tk_earning_time" ) )
db_order . earning_time = DateTime . Parse ( order [ "tk_earning_time" ] . ToString ( ) ) ;
if ( order . ContainsKey ( "pub_share_fee" ) )
db_order . commission = double . Parse ( order [ "pub_share_fee" ] . ToString ( ) ) ;
if ( order . ContainsKey ( "item_category_name" ) )
db_order . auction_category = order [ "item_category_name" ] . ToString ( ) ;
if ( order . ContainsKey ( "tk_create_time" ) )
db_order . create_time = DateTime . Parse ( order [ "tk_create_time" ] . ToString ( ) ) ;
if ( order . ContainsKey ( "item_id" ) )
db_order . num_iid = order [ "item_id" ] . ToString ( ) ;
if ( order . ContainsKey ( "item_price" ) )
db_order . price = double . Parse ( order [ "item_price" ] . ToString ( ) ) ;
#endregion
db_order . db_cpsname = ItemMember . username ;
db_order . db_cpsnick = ItemMember . usernick ;
#region 预 付 定 金 处 理
if ( order . ContainsKey ( "tb_deposit_time" ) & & order [ "tb_deposit_time" ] . ToString ( ) ! = "--" )
{
if ( order . ContainsKey ( "deposit_price" ) & & double . Parse ( order [ "deposit_price" ] . ToString ( ) ) ! = 0d )
{
var alipay_total_price = double . Parse ( order [ "alipay_total_price" ] . ToString ( ) ) ;
db_order . alipay_total_price = alipay_total_price ;
if ( order . ContainsKey ( "pub_share_pre_fee" ) )
db_order . pub_share_pre_fee = double . Parse ( order [ "pub_share_pre_fee" ] . ToString ( ) ) ;
fl_member_info member = null ;
if ( db_order . db_userid ! = 0 )
member = session . FindMemberInfoById ( db_order . db_userid ) ;
//计算的佣金 - 判断使用设置模式,符合将扣除用户自定义预扣佣金
var commission = session . GetTbComparisonFeeRate ( db_order ) ;
//var itempoint = session.FindItemPoint(member, (db_order.commission == 0 ? db_order.pub_share_pre_fee : db_order.commission), db_order.item_num, CpsType.阿里妈妈);
if ( db_order . id = = 0 )
session . Saveable ( db_order ) ;
//查询历史查询比例
var compute = session . FindQueryRatioHist ( CpsType . 阿 里 妈 妈 , db_order . id ) ;
ItemPoint itempoint = null ;
if ( compute ! = null )
itempoint = session . FindItemPoint ( CpsType . 阿 里 妈 妈 , compute , commission , db_order . item_num ) ;
else
itempoint = session . FindItemPoint ( member , commission , db_order . item_num , CpsType . 阿 里 妈 妈 ) ;
db_order . db_userpoint = itempoint . UserPoint ;
db_order . db_point = HttpHelper . ObjectToJson ( itempoint ) ;
session . SaveOrUpdate ( db_order ) ;
}
}
#endregion
}
db_order . tk_status = status ;
if ( string . IsNullOrWhiteSpace ( db_order . seller_id ) )
{
if ( order . ContainsKey ( "item_img" ) )
{
var reg = Regex . Match ( order [ "item_img" ] . ToString ( ) , @"i\d+?/(?<店铺Id>\d+?)/" ) ;
if ( reg . Success )
db_order . seller_id = reg . Groups [ "店铺Id" ] . Value ;
}
}
if ( ItemMember ! = null )
{
//var strb = new StringBuilder();
//try
//{
// strb.Append($@"数据:{HttpHelper.ObjectToJson(db_order)}
//原始:{HttpHelper.ObjectToJson(order)}");
//}
//catch (Exception)
//{ }
//System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
//watch.Start();//开始监视代码运行时间
if ( db_order . tk_status = = ( int ) AlimamaOrderStatus . 订 单 成 功 )
{
if ( order . ContainsKey ( "modified_time" ) )
{
if ( ! string . IsNullOrWhiteSpace ( order [ "modified_time" ] ? . ToString ( ) ) )
{
DateTime time ;
if ( DateTime . TryParse ( order [ "modified_time" ] ? . ToString ( ) , out time ) )
{
db_order . earning_time = time ;
//session.SaveOrUpdate(db_order);
}
}
}
//db_order.tk_status = (int)AlimamaOrderStatus.订单结算;
}
UpdateOrder ( db_order , notices , session ) ; //..
//watch.Stop();//停止监视
//try
//{
//strb.AppendLine($@"
//耗时:{watch.Elapsed.TotalSeconds} 秒");
//LogHelper.GetSingleObj().Debug("淘宝订单: ", strb.ToString());
//}
//catch (Exception)
//{ }
}
}
catch ( Exception ex )
{
EventClient . OnEvent ( this , $"同步阿里妈妈订单出错:{ItemMember.username} - {ex.Message} - {ex.StackTrace}" ) ;
}
finally
{
//session.Close();
}
}
list . Clear ( ) ;
list = null ;
}
catch ( Exception ex )
{
EventClient . OnEvent ( this , $"更新阿里妈妈订单异常3: {ItemMember.username} - {ex.Message} - {ex.StackTrace}" ) ;
if ( ex . Message . Contains ( "已过期" ) )
{
ItemMember . logintime = DateTime . Now . AddDays ( - 30 ) ; //设置登录时间为过期,后面通知客户
throw ex ;
}
}
}
}
#endregion
#endregion
private readonly object LockObj = new object ( ) ;
/// <summary>
/// 订单绑定逻辑
/// </summary>
/// <param name="db_order">阿里订单对象</param>
/// <param name="notice">事件集合</param>
/// <param name="session">数据库操作对象</param>
/// <param name="order_refund">阿里订单维权对象</param>
/// <param name="isFrontData"></param>
public void UpdateOrder ( fl_order_alimama db_order , List < OrderNoticeEvent > notice , SqlSugarClient session , fl_order_refund_alimama order_refund = null , bool isFrontData = false )
{
//维权中的订单,直接跳出
if ( db_order . db_status = = SystemOrderStatus . 订 单 维 权 中 )
return ;
else
{
}
try
{
if ( db_order . id ! = 0 )
{
lock ( LockObj )
{
if ( ! OrderDataIdDic . ContainsKey ( db_order . id ) )
{
OrderDataIdDic [ db_order . id ] = db_order . id ;
}
else
{
LogHelper . GetSingleObj ( ) . Error ( "订单重复进入" , $"订单ID:{db_order.id}" ) ;
return ;
}
}
}
fl_plugin_allrebatesactivity_orderlist allrebatesactivity_orderlist = null ;
var old_status = db_order . db_status ;
var status = Util . ConvertEnum < AlimamaOrderStatus > ( db_order . tk_status ) ;
bool islotUserQuery = false ; //订单是否为多人查询
// string old_md5 = Util.GetMd5_32byte(HttpHelper.ObjectToJson(db_order));
var isRewards = false ; //是否获得推荐新人奖励
var isFirstOrder = false ; //是否获得用户首单奖励
#region 私 域 绑 定
if ( db_order . db_userid = = 0 & & status = = AlimamaOrderStatus . 订 单 付 款 & & db_order . special_id ! = 0 )
{
var tbAnalysis = new TBHelper . TbAnalysis ( ) ;
var cps_member = CpsClient . Members . FirstOrDefault ( f = > f . username = = db_order . db_cpsname & & f . cpstype = = CpsType . 阿 里 妈 妈 ) ;
if ( cps_member ! = null )
{
//var api = CpsClient.CreateAlimamaRequest(cps_member);
//var external_id = tbAnalysis.FindTbPublisherInfoFirst(api, new { info_type = 2, relation_app = "common", special_id = db_order.special_id, external_type = 0 }, TBHelper.TbAnalysis.PublisherType.ExternalId);
//if (!string.IsNullOrWhiteSpace(external_id))
//{
// var memberInfo = session.FindMemberInfoByUsername(external_id);
// if (memberInfo != null)
// {
// db_order.db_robotname = memberInfo.robot_name;
// db_order.db_robottype = memberInfo.robot_type;
// db_order.db_userid = memberInfo.id;
// var relation = session.Queryable<fl_tb_relation>().First(f => f.cps_memberid == db_order.db_cpsname && f.special_id == db_order.special_id);
// if (relation == null)
// relation = new fl_tb_relation() { cps_memberid = db_order.db_cpsname, special_id = db_order.special_id };
// if (relation.username != external_id)
// {
// relation.username = external_id;
// session.Saveable(relation).ExecuteCommand();
// }
// }
//}
var relation = ApiClient . GetSession ( ) . FindTbRelations ( ) . FirstOrDefault ( f = > f . cps_memberid = = db_order . db_cpsname & & f . special_id = = db_order . special_id ) ;
if ( relation ! = null & & ! string . IsNullOrWhiteSpace ( relation . username ) )
{
var memberInfo = session . FindMemberInfoByUsername ( relation . username ) ;
if ( memberInfo ! = null )
{
db_order . db_robotname = memberInfo . robot_name ;
db_order . db_robottype = memberInfo . robot_type ;
db_order . db_userid = memberInfo . id ;
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" , new { userid = db_order . db_userid , itemid = db_order . num_iid , adzoneid = db_order . adzone_id , time = DateTime . Now . AddHours ( - 24 ) . ToString ( "yyyy-MM-dd HH:mm:ss" ) } ) ;
if ( query_item ! = null )
{
#region 绑 定 群 号
if ( string . IsNullOrWhiteSpace ( db_order . msg_groupid ) )
db_order . msg_groupid = query_item . groupid ;
#endregion
#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
#region 自 动 识 别 绑 定
#region 缓 存 绑 定
if ( db_order . db_userid = = 0 & & status = = AlimamaOrderStatus . 订 单 付 款 )
{
var bind = session . FindBindCache ( db_order . trade_parent_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);
}
}
}
#endregion
if ( db_order . db_userid = = 0 & & status = = AlimamaOrderStatus . 订 单 付 款 )
{
#region 淘 宝 返 利 推 广 位 自 动 绑 定
#region 私 人 推 广 位
var privateAdzonePids = session . FindAlimamaPrivatePid ( db_order . adzone_id ) ; //私人推广位对象
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);
}
}
#endregion
else
{
var flag = false ;
var ali_pid_list = session . FindAlimamaAutoBindPid ( ) ; //淘宝返利设置的推广位集合
if ( ali_pid_list ! = null )
{
flag = ali_pid_list . FirstOrDefault ( f = > f . adzone_pid . EndsWith ( "_" + db_order . adzone_id ) ) ! = null ? true : false ;
if ( ! flag )
{
var groupList = session . FindAdzoneGroups ( CpsType . 阿 里 妈 妈 ) ;
#region 淘 宝 推 广 位 组
var groups = groupList . Where ( f = > string . IsNullOrWhiteSpace ( f . remark ) ) ;
ali_pid_list = ali_pid_list . Where ( f = > f . adzone_group ! = 0 ) . ToList ( ) ;
foreach ( var item in ali_pid_list )
{
var group = groups . FirstOrDefault ( f = > f . id = = item . adzone_group ) ;
if ( group ! = null )
{
List < Tuiguangwei > tuiguangweis = null ;
try
{
tuiguangweis = HttpHelper . JsonToObject < List < Tuiguangwei > > ( group . adzones ) as List < Tuiguangwei > ;
}
catch ( Exception )
{
tuiguangweis = new List < Tuiguangwei > ( ) ;
}
if ( tuiguangweis ! = null )
flag = ( null ! = tuiguangweis . FirstOrDefault ( f = > f . Pid . EndsWith ( "_" + db_order . adzone_id ) ) ) ? true : false ;
if ( flag ) break ;
}
}
#endregion
#region 强 制 推 广 位 组
if ( ! flag )
{
groups = groupList . Where ( f = > f . remark = = fl_alimama_activity_type . 天 猫 精 选 . ToString ( ) ) ;
ali_pid_list = ali_pid_list . Where ( f = > f . adzone_group ! = 0 ) . ToList ( ) ;
foreach ( var item in ali_pid_list )
{
var group = groups . FirstOrDefault ( f = > f . id = = item . adzone_group ) ;
if ( group ! = null )
{
List < TuiguangweiActivity > tuiguangweis = null ;
try
{
tuiguangweis = HttpHelper . JsonToObject < List < TuiguangweiActivity > > ( group . adzones ) as List < TuiguangweiActivity > ;
}
catch ( Exception )
{
tuiguangweis = new List < TuiguangweiActivity > ( ) ;
}
if ( tuiguangweis ! = null )
flag = ( null ! = tuiguangweis . FirstOrDefault ( f = > f . Pid . EndsWith ( "_" + db_order . adzone_id ) ) ) ? true : false ;
if ( flag ) break ;
}
}
}
#endregion
#region 全 额 返 利 推 广 位
var all_rebates_adzone = session . FindAdzoneInfos ( ) . FirstOrDefault ( f = > f . alliance_id = = ( int ) CpsType . 阿 里 妈 妈 & & f . custom_type = = Resources . TbAllRebatesSoftwareType & & f . adzone_pid . EndsWith ( "_" + db_order . adzone_id ) ) ;
if ( all_rebates_adzone ! = null )
{
flag = ( null ! = all_rebates_adzone . adzone_pid . EndsWith ( "_" + db_order . adzone_id ) ) ? true : false ;
}
#endregion
}
}
if ( ! flag )
flag = privateAdzonePids . Select ( f = > f . adzone_pid ) . ToList ( ) . FirstOrDefault ( f = > f . EndsWith ( "_" + db_order . adzone_id ) ) ! = null ? true : false ; //私人推广位
if ( ! flag )
flag = session . CheckIsTljOrder ( db_order . adzone_id ) ; //淘礼金推广位
#endregion
if ( flag )
{
#region 新 字 符 串 绑 定
if ( ApiClient . Setting . SystemConfig . order_alimama_bind = = SwitchType . 开 启 )
{
if ( db_order . num_iid . Contains ( "-" ) )
{
var split = db_order . num_iid . Split ( new string [ ] { "-" } , StringSplitOptions . RemoveEmptyEntries ) ;
var itemIdB = split [ 1 ] ;
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 = itemIdB , adzoneid = db_order . adzone_id , time = DateTime . Now . AddHours ( - 24 ) . ToString ( "yyyy-MM-dd HH:mm:ss" ) } ) ;
if ( query ! = null & & query . Rows . Count > 0 )
{
if ( query . Rows . Count = = 1 )
{
var query_item = session . FindSingle < fl_query_hist > ( "select * from fl_query_hist where itemid = @itemid and crt_time > @time order by id desc" , new { itemid = itemIdB , time = DateTime . Now . AddHours ( - 24 ) . ToString ( "yyyy-MM-dd HH:mm:ss" ) } ) ;
if ( query_item ! = null )
{
db_order . db_robotname = query_item . robot_name ;
db_order . db_robottype = query_item . robot_type ;
db_order . msg_groupid = query_item . groupid ;
db_order . db_userid = query_item . userid ;
//session.SaveOrUpdate(db_order);
#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
//订单尾号自动绑定用户
if ( db_order . db_userid = = 0 )
{
if ( ApiClient . Setting . SystemConfig . order_alimama_last_auto_bind = = SwitchType . 开 启 )
{
var lasts = session . FindAlimamaOrderLastnums ( ) . Where ( f = > db_order . trade_parent_id . EndsWith ( f . lastnumber ) ) . ToList ( ) ; //通过订单尾号查询对应的用户
if ( lasts ! = null & & lasts . Count = = 1 ) //订单尾号只对应一个用户,多个不处理
{
var memberInfo = session . FindMemberInfoById ( lasts [ 0 ] . userid ) ;
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);
}
}
}
}
//订单没有绑定用户 查询订单记录
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 . num_iid , adzoneid = db_order . adzone_id , 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_alimama_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 . num_iid , adzoneid = db_order . adzone_id , 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
#region 淘 宝 订 单 尾 号 自 动 采 集
if ( ApiClient . Setting . SystemConfig . order_alimama_last_auto_capture = = SwitchType . 开 启 )
{
//订单尾号和用户进行绑定
if ( session . FindAlimamaOrderLastnums ( ) . FirstOrDefault ( f = > f . userid = = db_order . db_userid ) = = null )
{
session . Insertable ( new fl_alimama_order_lastnum ( ) { userid = db_order . db_userid , lastnumber = db_order . trade_parent_id . Substring ( db_order . trade_parent_id . Length - 6 , 6 ) } ) . ExecuteCommand ( ) ;
session . FindAlimamaOrderLastnums ( true ) ;
}
}
#endregion
}
}
}
}
else
{
if ( ApiClient . Setting . SystemConfig . order_alimama_last_auto_bind = = SwitchType . 开 启 )
{
var end_number = db_order . trade_parent_id . Substring ( db_order . trade_parent_id . Length - 6 ) ;
var lasts = session . FindAlimamaOrderLastnums ( ) . Where ( f = > end_number = = f . lastnumber ) . ToList ( ) ;
if ( lasts . Count > 0 )
{
//是否存在、尾号相同,并且查询过宝贝(优先识别)
Dictionary < long , fl_alimama_order_lastnum > last_num = new Dictionary < long , fl_alimama_order_lastnum > ( ) ;
for ( int i = 0 ; i < query . Rows . Count ; i + + )
{
var info = lasts . FirstOrDefault ( f = > f . userid = = long . Parse ( query . Rows [ i ] [ "userid" ] . ToString ( ) ) ) ;
if ( info ! = null ) last_num [ info . userid ] = info ;
}
if ( last_num . Count = = 1 )
{
var last_item = last_num . FirstOrDefault ( ) . Value ;
db_order . db_userid = last_item . userid ;
var query_item = session . FindSingle < fl_query_hist > ( "select * from fl_query_hist where userid = @userid and itemid = @itemid and crt_time > @time order by id desc" , new { userid = db_order . db_userid , itemid = db_order . num_iid , time = DateTime . Now . AddHours ( - 24 ) . ToString ( "yyyy-MM-dd HH:mm:ss" ) } ) ;
if ( query_item ! = null )
{
db_order . db_robotname = query_item . robot_name ;
db_order . db_robottype = query_item . robot_type ;
db_order . msg_groupid = query_item . groupid ;
//session.SaveOrUpdate(db_order);
#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
}
}
else
{
//尾号相同、并且均查询过该宝贝
}
}
else
{
//未找到尾号相同订单
}
}
//订单多人查询,并且订单还未绑定
if ( db_order . db_userid = = 0 )
islotUserQuery = true ;
}
}
}
}
}
#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 . num_iid , adzoneid = db_order . adzone_id , 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
}
#region 店 铺 绑 定 , 最 后 的 绑 定 判 断 ( 如 果 上 面 的 绑 定 都 没 有 成 功 , 使 用 店 铺 绑 定 的 方 式 进 行 绑 定 , 如 果 多 人 在 该 店 查 询 过 其 他 商 品 将 不 进 行 绑 定 . 只 针 对 一 个 用 户 在 该 店 铺 查 询 过 , 将 该 商 品 的 订 单 给 绑 定 给 用 户 )
if ( db_order . db_userid = = 0 & & status = = AlimamaOrderStatus . 订 单 付 款 & & ApiClient . Setting . SystemConfig . order_alimama_same_shop_bind = = SwitchType . 开 启 & & ! string . IsNullOrWhiteSpace ( db_order . seller_id ) )
{
var query = session . FindTable ( "select userid,count(*) as count from fl_query_hist where userid != 0 and mallid = @mallid and adzoneid = @adzoneid and crt_time > @time group by userid " , new { mallid = db_order . seller_id , adzoneid = db_order . adzone_id , 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_alimama_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 mallid = @mallid and adzoneid = @adzoneid and crt_time > @time order by id desc" , new { userid = db_order . db_userid , mallid = db_order . seller_id , adzoneid = db_order . adzone_id , 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
//#region 淘宝订单尾号自动采集
//if (ApiClient.Setting.SystemConfig.order_alimama_last_auto_capture == SwitchType.开启)
//{
// //订单尾号和用户进行绑定
// if (session.FindAlimamaOrderLastnums().FirstOrDefault(f => f.userid == db_order.db_userid) == null)
// {
// session.Insertable(new fl_alimama_order_lastnum() { userid = db_order.db_userid, lastnumber = db_order.trade_parent_id.Substring(db_order.trade_parent_id.Length - 6, 6) }).ExecuteCommand();
// session.FindAlimamaOrderLastnums(true);
// }
//}
//#endregion
}
}
}
}
}
else
{
query = session . FindTable ( "select userid,count(*) as count from fl_query_hist where userid != 0 and mallid = @mallid and crt_time > @time group by userid " , new { mallid = db_order . seller_id , 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_alimama_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 mallid = @mallid and crt_time > @time order by id desc" , new { userid = db_order . db_userid , mallid = db_order . seller_id , 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
//#region 淘宝订单尾号自动采集
//if (ApiClient.Setting.SystemConfig.order_alimama_last_auto_capture == SwitchType.开启)
//{
// //订单尾号和用户进行绑定
// if (session.FindAlimamaOrderLastnums().FirstOrDefault(f => f.userid == db_order.db_userid) == null)
// {
// session.Insertable(new fl_alimama_order_lastnum() { userid = db_order.db_userid, lastnumber = db_order.trade_parent_id.Substring(db_order.trade_parent_id.Length - 6, 6) }).ExecuteCommand();
// session.FindAlimamaOrderLastnums(true);
// }
//}
//#endregion
}
}
}
}
}
}
}
#endregion
#endregion
if ( db_order . tk_status = = 12 & & 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 = HttpExtend . GetTimeStamp ( db_order . paid_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 ;
}
#region 全 额 返 利 绑 定 并 且 将 返 利 积 分 进 行 固 定
var adzone = session . FindAdzoneInfos ( ) . FirstOrDefault ( f = > f . alliance_id = = ( int ) CpsType . 阿 里 妈 妈 & & f . custom_type = = Resources . TbAllRebatesSoftwareType & & f . adzone_pid . EndsWith ( "_" + db_order . adzone_id ) ) ;
if ( adzone ! = null )
{
var allrebatesactivity_infos = session . Find < fl_plugin_allrebatesactivity_info > ( "select * from fl_plugin_allrebatesactivity_info where goods_id = @goods_id" , new { goods_id = db_order . num_iid } ) ;
if ( allrebatesactivity_infos ! = null & & allrebatesactivity_infos . Count ! = 0 )
{
if ( member ! = null )
{
var allrebatesactivity_info = allrebatesactivity_infos . FirstOrDefault ( f = > f . time_begin < = db_order . create_time & & db_order . create_time < = f . time_end & & f . groups . Split ( new string [ ] { "," } , StringSplitOptions . RemoveEmptyEntries ) . Select ( z = > Convert . ToInt64 ( z . Trim ( ) ) ) . ToList ( ) . Contains ( member . group_id ) & & f . robots . Split ( new string [ ] { "," } , StringSplitOptions . RemoveEmptyEntries ) . Select ( z = > z . Trim ( ) ) . ToList ( ) . Contains ( db_order . db_robotname ) ) ;
if ( allrebatesactivity_info ! = null )
{
//TODO这里还要判断已经成交的列表中是否存在订单数量
var allrebatesactivity_orderlists = session . Find < fl_plugin_allrebatesactivity_orderlist > ( "select * from fl_plugin_allrebatesactivity_orderlist where activity_id = @activity_id and mid = @mid" , new { activity_id = allrebatesactivity_info . id , mid = member . id } ) ;
int purchased_quantity = 0 ; //已经购买的数量
if ( allrebatesactivity_orderlists ! = null & & allrebatesactivity_orderlists . Count ! = 0 )
{
foreach ( var item in allrebatesactivity_orderlists )
{
var order_alimama = session . FindSingle < fl_order_alimama > ( "select * from fl_order_alimama where id = @id" , new { id = item . oid } ) ;
if ( order_alimama ! = null )
{
if ( order_alimama . db_status = = SystemOrderStatus . 订 单 结 算 | | order_alimama . db_status = = SystemOrderStatus . 全 额 退 款 | | order_alimama . db_status = = SystemOrderStatus . 部 分 退 款 | | order_alimama . db_status = = SystemOrderStatus . 订 单 付 款 | | order_alimama . db_status = = SystemOrderStatus . 订 单 冻 结 | | order_alimama . db_status = = SystemOrderStatus . 订 单 退 款 | | order_alimama . db_status = = SystemOrderStatus . 订 单 维 权 中 )
{
purchased_quantity + = order_alimama . item_num ;
}
}
}
}
if ( allrebatesactivity_info . limit_quantity_number > = ( db_order . item_num + purchased_quantity ) )
{
if ( string . IsNullOrEmpty ( db_order . db_point ) )
{
var return_money = ( double ) ( ( decimal ) allrebatesactivity_info . return_money * ( decimal ) db_order . item_num ) ;
var point = @"{""Type"":0,""Commission"":0,""SumPoint"":" + db_order . pub_share_pre_fee + @",""UserPoint"":" + return_money + @",""AwardOne"":0,""AwardTwo"":0,""AwardThree"":0,""AwardCreate"":0}" ;
db_order . db_point = point ;
db_order . db_userpoint = return_money ;
}
var robot = session . FindRobots ( ) . FirstOrDefault ( f = > db_order . db_robottype = = f . type & & f . name = = db_order . db_robotname ) ;
if ( robot ! = null )
{
allrebatesactivity_orderlist = new fl_plugin_allrebatesactivity_orderlist ( )
{
activity_id = allrebatesactivity_info . id ,
mid = member . id ,
rid = robot . id ,
oid = db_order . id
} ;
}
}
}
}
}
}
#endregion
if ( string . IsNullOrEmpty ( db_order . db_point ) )
{
#region 判 断 是 否 为 淘 礼 金 订 单 , 如 果 是 淘 礼 金 订 单 将 不 给 这 个 订 单 返 利
var isTljOrder = session . CheckIsTljOrder ( db_order . adzone_id ) ;
#endregion
//计算的佣金 - 判断使用设置模式,符合将扣除用户自定义预扣佣金
var commission = session . GetTbComparisonFeeRate ( db_order ) ;
if ( db_order . id = = 0 )
session . Saveable ( db_order ) ;
//查询历史查询比例
var compute = session . FindQueryRatioHist ( CpsType . 阿 里 妈 妈 , db_order . id ) ;
ItemPoint itempoint = null ;
if ( compute ! = null )
itempoint = session . FindItemPoint ( CpsType . 阿 里 妈 妈 , compute , isTljOrder ? 0 : commission , db_order . item_num ) ;
else
itempoint = session . FindItemPoint ( member , isTljOrder ? 0 : commission , db_order . item_num , 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 AlimamaOrderStatus . 订 单 成 功 :
case AlimamaOrderStatus . 订 单 结 算 :
{
if ( status = = AlimamaOrderStatus . 订 单 成 功 )
db_order . tk_status = ( int ) AlimamaOrderStatus . 订 单 结 算 ;
//进入冻结逻辑
if ( db_order . db_endtime = = DateTime . MinValue )
{
db_order . db_status = SystemOrderStatus . 订 单 冻 结 ;
if ( db_order . alipay_total_price ! = db_order . pay_price )
{
//计算的佣金 - 判断使用设置模式,符合将扣除用户自定义预扣佣金
var commission = session . GetTbComparisonFeeRate ( db_order ) ;
if ( db_order . id = = 0 )
session . Saveable ( db_order ) ;
//查询历史查询比例
var compute = session . FindQueryRatioHist ( CpsType . 阿 里 妈 妈 , db_order . id ) ;
ItemPoint itempointTemp = null ;
if ( compute ! = null )
itempointTemp = session . FindItemPoint ( CpsType . 阿 里 妈 妈 , compute , commission , db_order . item_num ) ;
else
itempointTemp = session . FindItemPoint ( member , commission , db_order . item_num , CpsType . 阿 里 妈 妈 ) ;
db_order . db_point = HttpHelper . ObjectToJson ( itempointTemp ) ;
db_order . db_userpoint = itempointTemp . UserPoint ;
}
var sleep = session . FindSleep ( CpsType . 阿 里 妈 妈 , ApiClient . Setting . SystemConfig . FreezingCondition = = FreezingConditionType . 商 品 总 佣 金 ? ( db_order . commission = = 0 ? db_order . pub_share_pre_fee : db_order . commission ) : 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 小 时
if ( db_order . earning_time ! = DateTime . MinValue )
{
var config = Util . Read < Dictionary < string , object > > ( "插件-淘宝返利-配置" ) ;
if ( config ! = null )
{
if ( config . ContainsKey ( "ReceivingTimeCheck_Switch" ) )
{
var ReceivingTimeCheck_Switch = ( bool ) config [ "ReceivingTimeCheck_Switch" ] ;
if ( ReceivingTimeCheck_Switch )
{
if ( config . ContainsKey ( "ReceivingTimeCheck_Hour" ) )
{
//var ss = config["ReceivingTimeCheck_Hour"];
var ReceivingTimeCheck_Hour = int . Parse ( config [ "ReceivingTimeCheck_Hour" ] . ToString ( ) ) ;
if ( ( db_order . earning_time - db_order . create_time ) . 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 ( db_order . auction_category ! = "手动处理" )
{
if ( order_refund = = null )
order_refund = session . FindSingle < fl_order_refund_alimama > ( "select * from fl_order_refund_alimama where tbtradeparentid = @tbtradeparentid and tbtradeid = @tbtradeid" , new { tbtradeparentid = db_order . trade_parent_id , tbtradeid = db_order . trade_id } ) ;
if ( order_refund ! = null )
{
var showRefundStatus = ( OrderRefundStatus ) Enum . Parse ( typeof ( OrderRefundStatus ) , order_refund . showrefundstatus ) ; //将阿里返回的订单状态转成枚举
switch ( showRefundStatus )
{
case OrderRefundStatus . 维 权 成 功 _佣金补扣成功 :
case OrderRefundStatus . 维 权 成 功 _等待补扣佣金 :
case OrderRefundStatus . 维 权 成 功 :
{
//维权成功,更新退款金额
if ( order_refund . refundfee = = db_order . alipay_total_price )
{
db_order . db_status = SystemOrderStatus . 全 额 退 款 ;
db_order . db_endtime = DateTime . Now ;
}
else
{
//var commission = db_order.commission;//临时的佣金额度
//if (db_order.commission == 0)
// commission = db_order.pub_share_pre_fee;
//计算的佣金 - 判断使用设置模式,符合将扣除用户自定义预扣佣金
var commission = session . GetTbComparisonFeeRate ( db_order ) ;
db_order . commission = ( double ) ( ( decimal ) commission - ( decimal ) order_refund . showreturnfee ) ; //付款金额与退款金额一致 说明退了全额;不一致那么只退了一部分,佣金需要重新计算
//上面重新计算了一下佣金
commission = session . GetTbComparisonFeeRate ( db_order ) ;
if ( db_order . id = = 0 )
session . Saveable ( db_order ) ;
//查询历史查询比例
var compute = session . FindQueryRatioHist ( CpsType . 阿 里 妈 妈 , db_order . id ) ;
ItemPoint itempoint = null ;
if ( compute ! = null )
itempoint = session . FindItemPoint ( CpsType . 阿 里 妈 妈 , compute , commission , db_order . item_num ) ;
else
itempoint = session . FindItemPoint ( member , db_order . commission , db_order . item_num , CpsType . 阿 里 妈 妈 ) ;
if ( itempoint ! = null )
{
db_order . db_point = HttpHelper . ObjectToJson ( itempoint ) ;
db_order . db_userpoint = itempoint . UserPoint ;
}
db_order . db_status = SystemOrderStatus . 部 分 退 款 ;
db_order . db_endtime = DateTime . Now ;
}
}
break ;
case OrderRefundStatus . 维 权 失 败 _卖家佣金返还成功 :
case OrderRefundStatus . 维 权 失 败 _等待卖家返还佣金 :
case OrderRefundStatus . 维 权 失 败 :
//维权失败,继续结算
break ;
case OrderRefundStatus . 等 待 处 理 :
break ;
default :
return ; //维权未结束不予结算
}
}
}
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.item_title} - ({db_order.trade_parent_id}) - ({db_order.trade_id})" } ) ;
if ( pointHists ! = null & & pointHists . Count ! = 0 )
{
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.item_title}({db_order.trade_parent_id})({db_order.trade_id})" } ) ;
if ( pointHists ! = null & & pointHists . Count ! = 0 )
{
LogHelper . GetSingleObj ( ) . Debug ( "维权扣除过的订单" , $ @ "{JsonConvert.SerializeObject(db_order)}
维 权 ? : { ( order_refund ! = null ? JsonConvert . SerializeObject ( order_refund ) : string . Empty ) }
维 权 扣 除 积 分 的 次 数 : { pointHists . Count } ");
}
else
{
session . SaveOrUpdate ( db_order ) ;
return ;
}
}
#endregion
///fl_order_alimama db_order, List<OrderNoticeEvent> notice, SqlSugarClient session, fl_order_refund_alimama order_refund = null, bool isFrontData = false
//LogHelper.GetSingleObj().Debug("订单AAAAAAA结算", $"阿里订单 ___ {JsonConvert.SerializeObject(db_order)} , notice = {notice.Count} , order_refund = null ? {order_refund = null} , isFrontData = {isFrontData}");
//用户自身加积分
member = session . ChangePoint ( PointType . 消 费 补 贴 , point . UserPoint , member . id , $"淘宝购买:{db_order.item_title} - ({db_order.trade_parent_id}) - ({db_order.trade_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 , db_order . alipay_total_price ) ;
#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.item_title} - ({db_order.trade_parent_id}) - ({db_order.trade_id})" ) ;
if ( flag ! = null )
{
ids . Add ( flag . id ) ;
if ( notice ! = null )
{
#region 判 断 上 级 是 否 符 合 获 得 推 荐 新 人 奖 励
isRewards = OrderHelper . CheckSuperiorInviteRewards ( member , db_order . db_endtime , db_order . alipay_total_price ) ;
#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.item_title} - ({db_order.trade_parent_id}) - ({db_order.trade_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.item_title} - ({db_order.trade_parent_id}) - ({db_order.trade_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.item_title} - ({db_order.trade_parent_id}) - ({db_order.trade_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 AlimamaOrderStatus . 订 单 维 权 中 :
db_order . db_status = SystemOrderStatus . 订 单 维 权 中 ;
break ;
case AlimamaOrderStatus . 订 单 付 款 :
{
db_order . db_status = SystemOrderStatus . 订 单 付 款 ;
}
break ;
case AlimamaOrderStatus . 订 单 失 效 :
db_order . db_status = SystemOrderStatus . 订 单 失 效 ;
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 ) & & order_id ! = db_order . trade_parent_id & & ( ( 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 . trade_parent_id + "," + ex . Message + "," + ex . StackTrace ) ;
}
}
#region 手 动 发 送 订 单 号 , 只 更 新 短 时 间 的 付 款 订 单
/// <summary>
/// 如果该订单后为空时,只同步付款订单
/// </summary>
private string order_id = string . Empty ;
/// <summary>
/// 通过订单号更新订单状态
/// </summary>
/// <param name="start_time">开始时间</param>
/// <param name="end_time">结束时间</param>
/// <param name="order_id">订单号</param>
/// <returns></returns>
internal bool UpdateOrder ( DateTime start_time , DateTime end_time , string order_id = "" )
{
if ( IsRunning ) throw new Exception ( "任务繁忙,请稍后重试!" ) ;
try
{
IsRunning = true ;
this . order_id = order_id ;
var members = CpsClient . Members . Where ( f = > f . cpstype = = CpsType . 阿 里 妈 妈 & & f . is_download = = SwitchType . 开 启 & & f . logintime . AddDays ( 30 ) . AddHours ( - 5 ) > = DateTime . Now ) . ToArray ( ) ;
UpdateOrder ( members , start_time , end_time ) ;
return true ;
}
catch ( Exception ex )
{
EventClient . OnEvent ( this , "更新阿里妈妈订单异常5:" + ex . Message ) ;
return false ;
}
finally
{
this . order_id = string . Empty ;
IsRunning = false ;
}
}
#endregion
/// <summary>
/// 通过订单ID查询该订单是否维权
/// </summary>
/// <param name="session">数据库操作对象</param>
/// <param name="tbtradeparentid">父订单号</param>
/// <param name="tbtradeid">子订单号</param>
/// <returns></returns>
private int FindRefundAlimamaCount ( SqlSugarClient session , string tbtradeparentid , string tbtradeid )
{
try
{
var value = session . FindRow ( @"select count(*) as num from fl_order_alimama ali inner join fl_order_refund_alimama rali on ali.trade_id = rali.tbtradeid and ali.trade_parent_id = rali.tbtradeparentid where rali.tbtradeid = @tbtradeid and rali.tbtradeparentid = @tbtradeparentid" , new { tbtradeid = tbtradeid , tbtradeparentid = tbtradeparentid } ) ;
return int . Parse ( value [ "num" ] . ToString ( ) ) ;
}
catch ( Exception ex )
{
EventClient . OnEvent ( this , "更新阿里妈妈订单异常6:" + ex . Message ) ;
}
return 0 ;
}
private static DateTime invalidnotice_time = DateTime . MinValue ; //阿里妈妈账号无效通知时间
private static DateTime invalidnotice_time2 = DateTime . MinValue ; //阿里妈妈账号日志无效时间
/// <summary>
/// 无效的阿里妈妈账号通知
/// </summary>
/// <param name="_members">阿里妈妈集合(为筛选的集合)</param>
private void UnValidCpsMember ( fl_cps_member [ ] _members )
{
try
{
var invalid_members = _members . Where ( f = > ! f . is_valid ) . ToArray ( ) ;
if ( invalid_members . Length ! = 0 )
{
var strb = new StringBuilder ( ) ;
strb . AppendLine ( $"淘宝更新订单异常" ) ;
strb . AppendLine ( ) ;
for ( int i = 0 ; i < invalid_members . Length ; i + + )
{
strb . AppendLine ( $"{invalid_members[i].usernick} ({invalid_members[i].username})" ) ;
}
strb . AppendLine ( ) ;
strb . AppendLine ( $"以上账号授权状态已过期" ) ;
strb . AppendLine ( $"跳过以上账号下载操作" ) ;
strb . AppendLine ( $"请重新登录淘宝账号" ) ;
var timelag2 = ( DateTime . Now - invalidnotice_time2 ) . TotalMinutes ;
if ( timelag2 > 5 )
{
invalidnotice_time2 = DateTime . Now ;
EventClient . OnEvent ( this , strb . ToString ( ) ) ;
}
var timelag = ( DateTime . Now - invalidnotice_time ) . TotalMinutes ;
if ( timelag > 30 )
{
strb . AppendLine ( $"系统时间:{DateTime.Now.ToString(" yyyy - MM - dd HH : mm : ss ")}" ) ;
invalidnotice_time = DateTime . Now ;
ApiClient . SendNoticeMessage ( strb . ToString ( ) ) ;
ApiClient . SendAdminEmail ( ApiClient . Setting . SystemConfig . account_admin_email , "淘宝账号授权失效通知" , strb . ToString ( ) , true ) ;
}
}
}
catch ( Exception ex )
{
EventClient . OnEvent ( this , $"更新阿里妈妈订单异常7:{ex.Message},{ex.StackTrace}" ) ;
}
}
}
}