using Api.Framework.Cps; using Api.Framework.Enums; using Api.Framework.Events; using Api.Framework.Model; using Api.Framework.SDK; using Api.Framework.Tools; using Api.Framework.Utils; using CsharpHttpHelper; using SqlSugar; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; namespace Api.Framework.Timers { /// /// 唯品会订单下载定时器 /// public class DownWeipinhuiTimer : TimerTask { private DateTime update_time = DateTime.Now.AddMinutes(-60); public override void Run(object state, bool timedOut) { var end_time = DateTime.Now; UpdateOrder(CpsClient.Members.Where(f => f.cpstype == CpsType.唯品联盟 && f.is_download == SwitchType.开启).ToArray(), update_time, end_time); update_time = DateTime.Now.AddMinutes(-20); #region 需要重新登录的联盟账号通知钉钉 var cps_expires = CpsClient.Members.Where(f => f.cpstype == CpsType.唯品联盟 && f.abnormal_tip == SwitchType.开启 && !f.is_valid).ToList(); if (cps_expires != null && cps_expires.Count != 0) { foreach (var cps in cps_expires) { var key = $"weipinhui_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, ".", 24 * 60 * 60 * 1000); Thread.Sleep(50); } } } #endregion } /// /// 订单id /// private string order_id = string.Empty; /// /// 手动同步订单 /// /// 唯品会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; } } /// /// 更新订单 /// /// 开始时间 /// 结束时间 /// 订单id /// 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.开启).ToArray(); UpdateOrder(members, start_time, end_time); return true; } catch (Exception ex) { EventClient.OnEvent(this, "更新唯品会异常:" + ex.Message); return false; } finally { this.order_id = string.Empty; IsRunning = false; } } private static string custom_parameters_regex = @"^r=(?<机器人id>.*?)\st=(?<类型>\d+)\su=(?<会员id>.+?)\sp=(?<推广位>.+)$"; private static string custom_parameters_regex2 = @"^r=(?<机器人id>.*?)\st=(?<类型>\d+)\sun=(?<会员id>.+?)\sp=(?<推广位>.+)$"; /// /// 订单 修改状态/用户绑定等操作通知用户 /// /// 唯品会订单对象 /// 数据库操作对象 /// 事件集合 /// public void UpdateOrder(fl_order_weipinhui db_order, SqlSugarClient session, List notice, bool isFrontData = false) { if (db_order.orderSubStatusName == WeipinhuiOrderSubStatusName.已下单) return; var IsContainYourself = false;//是否已经包含自己通知事件 try { var old_status = db_order.db_status; fl_member_info member = null; var isRewards = false;//是否获得推荐新人奖励 var isFirstOrder = false;//是否获得用户首单奖励 //订单自动绑定 if (db_order.db_userid == 0 && ApiClient.Setting.SystemConfig.order_weipinhui_bind == SwitchType.开启) { var isbind = false; #region 唯品会返利进行自动绑定 //私人推广位强制绑定绑定 var privateAdzonePids = session.FindWeipinhuiPrivatePid(db_order.pid.ToString()); if (privateAdzonePids.Count == 1 && privateAdzonePids[0].is_auto_bind)//无条件设置开启中,直接自动绑定 { var memberInfo = session.FindMemberInfoById(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; isbind = true; #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.goodsId, adzoneid = db_order.pid, 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 } } if (!isbind) { var bind_pids = session.FindWeipinhuiAutoBindPid(); bool flag = bind_pids.FirstOrDefault(f => f == db_order.pid) != null ? true : false; #endregion if (flag) { var mid = string.Empty; var statParam = Util.DecryptDES(db_order.statParam); var reg = Regex.Match(statParam, custom_parameters_regex); if (reg.Success) member = session.FindSingle("id=@id", new { id = reg.Groups["会员id"].Value }); else { reg = Regex.Match(statParam, custom_parameters_regex2); if (reg.Success) { var wxid = reg.Groups["会员id"].Value; if (!string.IsNullOrWhiteSpace(wxid)) member = session.FindSingle("username = @username", new { username = reg.Groups["会员id"].Value }); } } if (member != null) { db_order.db_userid = member.id; if (string.IsNullOrEmpty(db_order.db_robotname)) { var rInfo = session.FindRobots().FirstOrDefault(f => f.id.ToString() == reg.Groups["机器人id"].Value); if (rInfo != null) { db_order.db_robotname = rInfo.name; db_order.db_robottype = rInfo.type; } } #region 绑定群号 if (string.IsNullOrWhiteSpace(db_order.msg_groupid)) { 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.goodsId, adzoneid = db_order.pid, 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 } } } } else { member = session.Find("id=@id", new { id = db_order.db_userid }).FirstOrDefault(); } #region 更新最后下单的时间 //if ((db_order.orderSubStatusName == WeipinhuiOrderSubStatusName.已下单 || db_order.orderSubStatusName == WeipinhuiOrderSubStatusName.已付款) && db_order.db_userid != 0) if (db_order.orderSubStatusName == WeipinhuiOrderSubStatusName.已付款 && 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 = long.Parse(db_order.orderTime.ToString().Substring(0, 10)); session.Saveable(record).ExecuteCommand(); } catch (Exception) { } } #endregion //计算积分 if (string.IsNullOrEmpty(db_order.db_point)) { if (member == null) session.Find("id=@id", new { id = db_order.db_userid }).FirstOrDefault(); //查询历史查询比例 var compute = session.FindQueryRatioHist(CpsType.唯品联盟, db_order.id); ItemPoint itempoint = null; if (compute != null) itempoint = session.FindItemPoint(CpsType.唯品联盟, compute, db_order.commission, db_order.goodsCount); else itempoint = session.FindItemPoint(member, db_order.commission, db_order.goodsCount, CpsType.唯品联盟); if (itempoint != null) { if (itempoint.UserPoint == 0 && ApiClient.Setting.SystemConfig.SubsidyPdd == SwitchType.开启) itempoint.UserPoint = 0.01; db_order.db_point = HttpHelper.ObjectToJson(itempoint); db_order.db_userpoint = itempoint.UserPoint; } if (member != null) { member.bind_order++; member = session.UpdateMemberGroup(member); } } //var status = Util.ConvertEnum(db_order.orderSubStatusName); switch (db_order.orderSubStatusName) { case WeipinhuiOrderSubStatusName.维权完成: case WeipinhuiOrderSubStatusName.已签收: case WeipinhuiOrderSubStatusName.待结算: case WeipinhuiOrderSubStatusName.已结算: { if (db_order.commission == 0) db_order.db_status = SystemOrderStatus.订单失效; else { //未发放佣金 if (db_order.db_endtime == DateTime.MinValue) { var sleep = session.FindSleep(CpsType.唯品联盟, ApiClient.Setting.SystemConfig.FreezingCondition == FreezingConditionType.商品总佣金 ? 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小时 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()); if ((DateTime.Now - Util.GetDateTime(db_order.orderTime)).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.订单结算; //session.ExcuteSQL("update fl_order_weipinhui set db_status=" + (int)db_order.db_status + " where id=" + db_order.id); if (member != null) { var point = HttpHelper.JsonToObject(db_order.db_point) as ItemPoint; if (point != null) { List ids = new List(); ids.Add(member.id); //用户自身加积分 member = session.ChangePoint(PointType.消费补贴, point.UserPoint, member.id, $"唯品会购买:{db_order.goodsName}({db_order.orderSn})"); #region 判断用户是否符合获得新人奖励 isFirstOrder = OrderHelper.CheckMemberFirstOrderRewards(member, db_order.db_status); #endregion //notice.Add(new OrderNoticeEvent(CpsType.唯品联盟, member, db_order)); //多级提成计算 //一级的提成小于等于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.commissionTotalCost); #endregion notice.Add(new OrderNoticeEvent(CpsType.唯品联盟, inviter, db_order, OrderNoticeType.一级提成) { Customer = member, IsRewards = isRewards });//下级首单完成 } } } else if (point.AwardOne > 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.goodsName}({db_order.orderSn})"); if (flag != null) { ids.Add(flag.id); #region 判断上级是否符合获得推荐新人奖励 isRewards = OrderHelper.CheckSuperiorInviteRewards(member, db_order.db_endtime, db_order.commissionTotalCost); #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.goodsName}({db_order.orderSn})"); if (flag2 != null) { ids.Add(flag2.id); if (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.goodsName}({db_order.orderSn})"); if (flag3 != null) { ids.Add(flag3.id); if (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 robot = session.FindRobotInfo(db_order.db_robotname, db_order.db_robottype); if (robot != null) { 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.goodsName}({db_order.orderSn})"); if (flag != null) notice.Add(new OrderNoticeEvent(CpsType.唯品联盟, flag, db_order, OrderNoticeType.群主分成) { Customer = member }); } } } } } } else db_order.db_status = SystemOrderStatus.订单冻结; } break; } case WeipinhuiOrderSubStatusName.已付款: db_order.db_status = SystemOrderStatus.订单付款; break; case WeipinhuiOrderSubStatusName.已下单://TODO 这里的状态不知道什么意思,以后在判断 db_order.db_status = SystemOrderStatus.订单创建; break; case WeipinhuiOrderSubStatusName.已失效: //if (db_order.afterSaleChangedGoodsCount == 0 && db_order.afterSaleStatus == WeipinhuiAfterSaleStatus.售后完成 && db_order.afterSaleType == WeipinhuiSfterSaleType.退货) //{ db_order.db_status = (old_status == SystemOrderStatus.订单结算) ? SystemOrderStatus.全额退款 : SystemOrderStatus.订单失效; #region 全额维权,扣除账户金额 if (member != null && old_status == SystemOrderStatus.订单结算 && db_order.db_status == SystemOrderStatus.全额退款)//扣除积分 { if (db_order.db_endtime != DateTime.MinValue && db_order.db_endtime <= DateTime.Now) { db_order.db_status = SystemOrderStatus.全额退款; #region xxx //if (member != null) //{ // var point = HttpHelper.JsonToObject(db_order.db_point) as ItemPoint; // if (point != null) // { // List ids = new List(); // ids.Add(member.id); // //用户自身加积分 // member = session.ChangePoint(PointType.维权扣除, point.UserPoint, member.id, $"唯品会购买:{db_order.goodsName}({db_order.orderSn} - {db_order.goodsId}) - 售后中(扣除)"); // //#region 判断用户是否符合获得新人奖励 // //isFirstOrder = OrderHelper.CheckMemberFirstOrderRewards(member, db_order.db_status); // //#endregion // //notice.Add(new OrderNoticeEvent(CpsType.唯品联盟, member, db_order)); // //多级提成计算 // //一级的提成小于等于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.commissionTotalCost); // #endregion // notice.Add(new OrderNoticeEvent(CpsType.唯品联盟, inviter, db_order, OrderNoticeType.一级提成) { Customer = member, IsRewards = isRewards });//下级首单完成 // } // } // } // else if (point.AwardOne > 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.goodsName}({db_order.orderSn} - {db_order.goodsId}) - 售后中(扣除)"); // if (flag != null) // { // ids.Add(flag.id); // //#region 判断上级是否符合获得推荐新人奖励 // //isRewards = OrderHelper.CheckSuperiorInviteRewards(member, db_order.db_endtime, db_order.commissionTotalCost); // //#endregion // //notice.Add(new OrderNoticeEvent(CpsType.唯品联盟, flag, db_order, OrderNoticeType.一级提成) { Customer = member, IsRewards = isRewards }); // notice.Add(new OrderNoticeEvent(CpsType.唯品联盟, flag, db_order, OrderNoticeType.一级提成) { Customer = member }); // 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.goodsName}({db_order.orderSn} - {db_order.goodsId}) - 售后中(扣除)"); // if (flag2 != null) // { // ids.Add(flag2.id); // if (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.goodsName}({db_order.orderSn} - {db_order.goodsId}) - 售后中(扣除)"); // if (flag3 != null) // { // ids.Add(flag3.id); // if (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 robot = session.FindRobotInfo(db_order.db_robotname, db_order.db_robottype); // if (robot != null) // { // 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.goodsName}({db_order.orderSn} - {db_order.goodsId}) - 售后中(扣除)"); // if (flag != null) notice.Add(new OrderNoticeEvent(CpsType.唯品联盟, flag, db_order, OrderNoticeType.群主分成) { Customer = member }); // } // } // } // } //} #endregion IsContainYourself = new OrderHelper().DeductWeipinhuiOrderPoint(notice, db_order); } else { db_order.db_status = SystemOrderStatus.订单失效; } } #endregion //} //else //{ // db_order.db_status = SystemOrderStatus.订单失效; //} break; case WeipinhuiOrderSubStatusName.维权中: { //if (db_order.afterSaleChangedGoodsCount != 0 && db_order.afterSaleStatus == WeipinhuiAfterSaleStatus.售后中 && db_order.afterSaleType == WeipinhuiSfterSaleType.退货) if (db_order.afterSaleStatus == WeipinhuiAfterSaleStatus.售后中 && db_order.afterSaleType == WeipinhuiSfterSaleType.退货) { if (db_order.afterSaleChangedGoodsCount != 0) db_order.db_status = SystemOrderStatus.订单维权中; else db_order.db_status = SystemOrderStatus.订单失效; //db_order.db_status = (old_status == SystemOrderStatus.订单结算) ? SystemOrderStatus.全额退款 : SystemOrderStatus.订单失效; #region 全额维权,扣除账户金额 //if (member != null && old_status == SystemOrderStatus.订单结算 && db_order.db_status == SystemOrderStatus.全额退款)//扣除积分 if (member != null && old_status == SystemOrderStatus.订单结算)//扣除积分 { if (db_order.db_endtime != DateTime.MinValue && db_order.db_endtime <= DateTime.Now) { IsContainYourself = new OrderHelper().DeductWeipinhuiOrderPoint(notice, db_order); } //else //{ // db_order.db_status = SystemOrderStatus.订单失效; //} } #endregion } else if (db_order.afterSaleChangedGoodsCount == 0 && db_order.afterSaleStatus == WeipinhuiAfterSaleStatus.售后完成 && db_order.afterSaleType == WeipinhuiSfterSaleType.退货) { if (db_order.db_status == SystemOrderStatus.订单结算) { IsContainYourself = new OrderHelper().DeductWeipinhuiOrderPoint(notice, db_order); db_order.db_status = SystemOrderStatus.全额退款; } else { db_order.db_status = SystemOrderStatus.订单失效; } } } break; //db_order.db_status = SystemOrderStatus.订单创建; //break; default: db_order.db_status = SystemOrderStatus.订单未知; 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.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 (notice != null && 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 (notice != null && 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 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 (notice != null && (isFrontData || old_status != db_order.db_status) && !IsContainYourself) notice.Add(new Events.OrderNoticeEvent(CpsType.唯品联盟, member, db_order, OrderNoticeType.客户订单) { IsRewards = isFirstOrder }); } catch (Exception ex) { EventClient.OnEvent(this, "更新唯品会订单错误:" + db_order.orderSn + "," + ex.Message); } } /// /// 同步订单 /// /// 唯品会cps对象集合 /// 开始时间 /// 结束时间 private void UpdateOrder(fl_cps_member[] members, DateTime start_time, DateTime end_time) { if (members == null || members.Length == 0) return; int row_count = 50;//间隔 //var timespan = end_time - start_time; //var forcount = 1; //if (timespan.TotalHours > 1.00) //{ // forcount = (int)(timespan.TotalHours / 1); // if (timespan.TotalHours % 1 > 0) forcount++; //}; var timespan = end_time - start_time; TaskTool task = new TaskTool(); List notices = new List(); var not_download_pids = ApiClient.Setting.SystemConfig.order_weipinhui_not_download_pid.Replace(",", ",").Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(f => f.Trim()).ToList(); foreach (var item in members) { var _item = item; if (!_item.is_valid) continue; var client = new WeipinhuiApi(_item); task.AddTask(delegate { try { var _star = timespan.TotalHours > 1 ? end_time : start_time;//倒叙1小时一个间断 var _end = end_time; do { if (timespan.TotalHours > 1) { _end = _star; _star = _star.AddHours(-0.99); } var orr = client.DownOrder(_star, _end, 1, row_count); if (orr == null || orr.result.total == 0) { if (client.Member != null && !client.Member.is_valid) return; Thread.Sleep(500); continue; } Exception _exception = null; int count = orr.result.total / row_count; if (orr.result.total % row_count != 0) count++; for (int i = 1; i <= count; i++) { var page = i; if (_exception != null) return; try { //下载 if (page != 1) { orr = client.DownOrder(_star, _end, page, row_count); if (orr == null) { if (client.Member != null && !client.Member.is_valid) return; } } if (orr != null && orr.result.orderInfoList != null && orr.result.orderInfoList.Count > 0) { int _count = 1; foreach (var order in orr.result.orderInfoList) { _count++; var session = ApiClient.GetSession(); try { ////订单号搜索 //if (order.orderSn == "22051870142932") //{ //} //if (order.orderSn == "22031844797946") //{ //} //if (order.orderSn == "22012680610572") //{ //} #region 不处理的PID if (ApiClient.Setting.SystemConfig.order_weipinhui_download_set_pids == SwitchType.关闭) { if (not_download_pids.Count != 0) { var isExist = not_download_pids.Contains(order.pid);//是否包含 //continue; if (ApiClient.Setting.SystemConfig.order_weipinhui_down_type == DownAdzoneType.不下载推广位 && isExist) continue; else if (ApiClient.Setting.SystemConfig.order_weipinhui_down_type == DownAdzoneType.只下载推广位 && !isExist) continue; } } else { //var adzone = session.FindAdzoneInfos().Where(f => f.custom_type == "唯品会返利" && !string.IsNullOrEmpty(f.adzone_pid) && f.adzone_pid.Contains(order.pid)); var adzoneList = new List(); var adzones = session.FindAdzoneInfos(); adzoneList.AddRange(adzones.Where(f => f.custom_type == "唯品会返利" && !string.IsNullOrEmpty(f.adzone_pid) && f.adzone_pid.Contains(order.pid))); adzoneList.AddRange(adzones.Where(f => f.custom_type == "用户私人pid" && f.extend == "唯品会私人pid" && !string.IsNullOrEmpty(f.adzone_pid) && f.adzone_pid.Contains(order.pid))); if (adzoneList == null || adzoneList.Count() == 0) { continue; } } #endregion if (ApiClient.Setting.DbConfig.DatabaseType == DatabaseType.SQLITE && _count % 10 == 0) Thread.Sleep(150); //计算订单信息 //var status = Util.ConvertEnum(order.orderSubStatusName); #region 老的 一个订单号 多个订单无法保存 //var db_order = session.FindSingle("orderSn=@orderSn", new { orderSn = order.orderSn, }); //if (db_order != null) //跳过相同状态 //{ // //var statusTemp = (WeipinhuiOrderSubStatusName)Enum.Parse(typeof(WeipinhuiOrderSubStatusName), db_order.orderSubStatusName); // if (status == db_order.orderSubStatusName || // (status == WeipinhuiOrderSubStatusName.已签收 || status == WeipinhuiOrderSubStatusName.已结算 || status == WeipinhuiOrderSubStatusName.已下单) && (db_order.orderSubStatusName == WeipinhuiOrderSubStatusName.已签收 || status == WeipinhuiOrderSubStatusName.已结算 || status == WeipinhuiOrderSubStatusName.已下单)) // { // if (db_order.IsFinish()) continue;//是否已经完成 // if (db_order.db_status == SystemOrderStatus.订单冻结 && db_order.db_endtime > DateTime.Now) continue;//跳过系统冻结 // if (db_order.orderSubStatusName != WeipinhuiOrderSubStatusName.已签收 && db_order.orderSubStatusName == status) continue;//跳过相同状态 // } // db_order.orderSubStatusName = status; // if (db_order.goodsFinalPrice == 0 || db_order.commissionTotalCost == 0 || db_order.commission == 0) // { // var orderTmps = new WPHHelper().OrderInfoListConvertDbWeipinhuiOrder(order, null); // if (orderTmps == null || orderTmps.Count == 0) // { // EventClient.OnEvent("", ""); // return; // } // else if (orderTmps.Count > 1) // EventClient.OnEvent("下载订单多个订单明细.", $"订单号码:{order.orderSn},订单下单时间:{Util.GetDateTime(order.orderTime).ToString("yyyy-MM-dd HH:mm:ss")},唯品会联盟账号:{client.Member.usernick}({client.Member.username})"); // var temp = orderTmps[0]; // db_order.commission = temp.commission; // db_order.commissionTotalCost = temp.commissionTotalCost; // db_order.goodsFinalPrice = temp.goodsFinalPrice; // } //} //else //{ // var orderTmps = new WPHHelper().OrderInfoListConvertDbWeipinhuiOrder(order, null); // if (orderTmps == null || orderTmps.Count == 0) // { // EventClient.OnEvent("", ""); // return; // } // else if (orderTmps.Count > 1) // EventClient.OnEvent("下载订单多个订单明细.", $"订单号码:{order.orderSn},订单下单时间:{Util.GetDateTime(order.orderTime).ToString("yyyy-MM-dd HH:mm:ss")},唯品会联盟账号:{client.Member.usernick}({client.Member.username})"); // db_order = orderTmps[0]; // db_order.db_cpsname = _item.username; // db_order.db_cpsnick = _item.usernick; //} //UpdateOrder(db_order, session, notices); #endregion #region 新的 var orderTmps = new WPHHelper().OrderInfoListConvertDbWeipinhuiOrder(order, null); if (orderTmps == null || orderTmps.Count == 0) return; foreach (var orderTmp in orderTmps) { var status = orderTmp.orderSubStatusName; var db_order = session.FindSingle("orderSn=@orderSn and goodsId=@goodsId and sizeId=@sizeId", new { orderSn = order.orderSn, goodsId = orderTmp.goodsId, sizeId = orderTmp.sizeId }); if (db_order != null) //跳过相同状态 { if (db_order.orderSubStatusName == WeipinhuiOrderSubStatusName.手动失效) { continue; } if (status == db_order.orderSubStatusName || (status == WeipinhuiOrderSubStatusName.已签收 || status == WeipinhuiOrderSubStatusName.待结算 || status == WeipinhuiOrderSubStatusName.已结算 || status == WeipinhuiOrderSubStatusName.维权完成) && (db_order.orderSubStatusName == WeipinhuiOrderSubStatusName.已签收 || status == WeipinhuiOrderSubStatusName.已结算 || status == WeipinhuiOrderSubStatusName.待结算 || status == WeipinhuiOrderSubStatusName.维权完成)) { if (db_order.IsFinish()) continue;//是否已经完成 if (db_order.db_status == SystemOrderStatus.订单冻结 && db_order.db_endtime > DateTime.Now) continue;//跳过系统冻结 if (db_order.orderSubStatusName != WeipinhuiOrderSubStatusName.已签收 && db_order.orderSubStatusName == status) continue;//跳过相同状态 } db_order.orderSubStatusName = status; db_order.afterSaleChangedCommission = orderTmp.afterSaleChangedCommission;//商品佣金售后变动:仅在订单完结之后发生售后时返回,无售后时为空 db_order.afterSaleChangedGoodsCount = orderTmp.afterSaleChangedGoodsCount;//商品数量售后变动:仅在订单完结之后发生售后时返回,无售后时为空 db_order.afterSaleSn = orderTmp.afterSaleSn;//商品售后单号,无售后时为空 db_order.afterSaleStatus = orderTmp.afterSaleStatus;//商品售后状态:1-售后中,2-售后完成,3-售后取消,无售后时为空 WeipinhuiAfterSaleStatus db_order.afterSaleType = orderTmp.afterSaleType;//售后类型:1-退货,2-换货,无售后时为空 WeipinhuiSfterSaleType db_order.afterSaleFinishTime = orderTmp.afterSaleFinishTime;//售后完成时间,时间戳,单位:毫秒,无售后时为空 if (db_order.goodsFinalPrice == 0 || db_order.commissionTotalCost == 0 || db_order.commission == 0) { db_order.commission = orderTmp.commission; db_order.commissionTotalCost = orderTmp.commissionTotalCost; db_order.goodsFinalPrice = orderTmp.goodsFinalPrice; } } else { db_order = orderTmp; db_order.db_cpsname = _item.username; db_order.db_cpsnick = _item.usernick; } try { LogHelper.GetSingleObj().Debug("唯品会订单: ", $"{HttpHelper.ObjectToJson(orr)}"); } catch (Exception) { } UpdateOrder(db_order, session, notices); } #endregion } catch (Exception ex) { throw ex; } finally { //session.Close(); } } } } catch (Exception ex) { _exception = ex; return; } } if (_exception != null) throw _exception; //_star = _star.AddHours(-23.99); } while (_star > start_time); } catch (Exception ex) { return; } }); } task.Start(1, null); if (string.IsNullOrEmpty(order_id)) { var session = ApiClient.GetSession(); var end_orders = session.Find("select * from fl_order_weipinhui 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, session, notices); } } 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; if (order.orderSn == order_id) continue; tasks.Add(item); } } } } }