//============================================================= // 创建人:千年老妖 // 本页代码,均为原创。对未经许可擅自使用者,本人保留追究其法律责任的权利。 //============================================================== 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 { /// /// 阿里订单下载定时器 /// public class DownAlimamaTimer : TimerTask { /// /// 是否在运行 /// private static bool isRun = false; /// /// 记录三个月中最早付款的时间 /// 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("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("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); }); } } } } /// /// .... /// private Dictionary OrderDataIdDic = new Dictionary(); private DateTime update_time = DateTime.Now.AddMinutes(-60); private int number; public override void Run(object state, bool timedOut) { try { OrderDataIdDic = new Dictionary(); //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(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(); } } /// /// 通过cps获取AlimamaApi /// /// cps对象 /// public AlimamaApi GetAlimamaApi(fl_cps_member cps) { try { return new AlimamaApi(cps); } catch (Exception) { } return null; } #region 下载维权退款订单 private bool IsRun = false; /// /// 爬虫更新阿里妈妈订单 - 下载维权退款订单 /// /// AlimamaApi对象 /// 开始时间 /// 最大的页数 public void UpdateOrder(AlimamaApi api, DateTime startTime, int maxPage = 999999) { #region if (IsRun) return; try { IsRun = true; int toPage = 1; List> result = null; var pageSize = 1000; List notices = new List(); do { result = api.SerchOrder(OrderType.维权退款明细, 0, "", pageSize, startTime, toPage);//获取淘宝联盟的订单 var session = ApiClient.GetSession(); foreach (Dictionary item in result) { var order = session.FindSingle("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("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("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("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 /// /// 同步订单 /// /// 同步账号时间 /// 同步开始 /// 同步结束时间 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 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("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); } /// /// 手动同步指定阿里妈妈订单状态 /// /// 要同步的阿里妈妈 /// 同步的时间 /// 同步结束的时间 /// 订单的状态 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 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); } /// /// 创建阿里妈妈订单同步任务 /// 阿里妈妈联盟 /// 订单同步起始时间 /// 订单同步结束时间 public void UpdateOrder(List 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 同步间隔时间缓存 /// /// 设置同步的时间间隔 /// /// 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) { } } /// /// 获取同步的时间间隔 /// /// 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; } /// /// 判断缓存是否存在 /// /// 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 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 notices = new List(); //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 /// /// 事件通知 /// /// private void OrderNotices(List _notices) { var notices = _notices; if (notices != null && notices.Count != 0) { var tasks = TimerTask.GetTimer() 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 下载阿里妈妈订单 /// /// 下载阿里订单 /// /// /// /// /// /// /// internal void UpdateOrder(AlimamaOrderType _order_type, DateTime _start_time, AlimamaApi _api, List 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() { 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 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") //{ //} //if (order["trade_parent_id"].ToString() == "8536347047390809379") //{ //} 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(); 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().Where(f => f.trade_id == order["trade_id"].ToString() && f.trade_parent_id == order["trade_parent_id"].ToString()).First(); var db_order = session.FindSingle("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) //跳过相同状态 { if (db_order.total_commission_rate == 0) continue; 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("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;//跳过系统冻结 if ((int)db_order.tk_status == status) continue;//跳过相同状态? #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(); if (db_order.total_commission_rate == 0 && db_order.order_type != "饿了么") continue; 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 / 100m); db_order.total_commission_rate = (double)((decimal)db_order.total_commission_rate / 100m); db_order.subsidy_rate = (double)((decimal)db_order.subsidy_rate / 100m); #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(); /// /// 订单绑定逻辑 /// /// 阿里订单对象 /// 事件集合 /// 数据库操作对象 /// 阿里订单维权对象 /// public void UpdateOrder(fl_order_alimama db_order, List 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(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().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("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("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 tuiguangweis = null; try { tuiguangweis = HttpHelper.JsonToObject>(group.adzones) as List; } catch (Exception) { tuiguangweis = new List(); } 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 tuiguangweis = null; try { tuiguangweis = HttpHelper.JsonToObject>(group.adzones) as List; } catch (Exception) { tuiguangweis = new List(); } 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("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("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 last_num = new Dictionary(); 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("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("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("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("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("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("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("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>("插件-淘宝返利-配置"); 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("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(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("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("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 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 ids = new List(); 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(db_order.db_point) as ItemPoint; if (point != null) { List ids = new List(); 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 手动发送订单号,只更新短时间的付款订单 /// /// 如果该订单后为空时,只同步付款订单 /// private string order_id = string.Empty; /// /// 通过订单号更新订单状态 /// /// 开始时间 /// 结束时间 /// 订单号 /// 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 /// /// 通过订单ID查询该订单是否维权 /// /// 数据库操作对象 /// 父订单号 /// 子订单号 /// 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;//阿里妈妈账号日志无效时间 /// /// 无效的阿里妈妈账号通知 /// /// 阿里妈妈集合(为筛选的集合) 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}"); } } } }