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