old_flsystem/类库/Api.Framework/Timers/DownWeipinhuiTimer.cs

1002 lines
64 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
{
/// <summary>
/// 唯品会订单下载定时器
/// </summary>
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<string>(key);
if (string.IsNullOrWhiteSpace(value))
{
var session = ApiClient.GetSession();
var robot = session.FindRobots().FirstOrDefault();
StringBuilder strb = new StringBuilder();
strb.AppendLine("唯品会状态异常");
strb.AppendLine("---------------------");
if (robot != null)
strb.AppendLine("所在机器人:" + robot.nick + $"({robot.name})");
strb.AppendLine("昵称:" + cps.usernick);
strb.AppendLine("账号:" + cps.username);
strb.AppendLine();
strb.AppendLine("解决方法:重新授权登录");
ApiClient.SendNoticeMessage(strb.ToString());
ApiClient.Cache.Set(key, ".", 24 * 60 * 60 * 1000);
Thread.Sleep(50);
}
}
}
#endregion
}
/// <summary>
/// 订单id
/// </summary>
private string order_id = string.Empty;
/// <summary>
/// 手动同步订单
/// </summary>
/// <param name="member">唯品会cps对象集合</param>
/// <param name="start_time">开始时间</param>
/// <param name="end_time">结束时间</param>
public void UpdateOrder(List<fl_cps_member> members, DateTime start_time, DateTime end_time)
{
if (IsRunning) throw new Exception("任务繁忙,请稍后重试!");
try
{
IsRunning = true;
UpdateOrder(members.ToArray(), start_time, end_time);
}
catch (Exception ex)
{
EventClient.OnEvent(this, "更新唯品会订单异常:" + ex.Message);
}
finally
{
IsRunning = false;
}
}
/// <summary>
/// 更新订单
/// </summary>
/// <param name="start_time">开始时间</param>
/// <param name="end_time">结束时间</param>
/// <param name="order_id">订单id</param>
/// <returns></returns>
internal bool UpdateOrder(DateTime start_time, DateTime end_time, string order_id = "")
{
if (IsRunning) throw new Exception("任务繁忙,请稍后重试!");
try
{
IsRunning = true;
this.order_id = order_id;
var members = CpsClient.Members.Where(f => f.cpstype == CpsType. && f.is_download == SwitchType.).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=(?<推广位>.+)$";
/// <summary>
/// 订单 修改状态/用户绑定等操作通知用户
/// </summary>
/// <param name="db_order">唯品会订单对象</param>
/// <param name="session">数据库操作对象</param>
/// <param name="notice">事件集合</param>
/// <param name="isFrontData"></param>
public void UpdateOrder(fl_order_weipinhui db_order, SqlSugarClient session, List<OrderNoticeEvent> 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<fl_query_hist>("userid=@userid and itemid=@itemid and adzoneid = @adzoneid and crt_time > @time order by id desc", new { userid = db_order.db_userid, itemid = db_order.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<fl_member_info>("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<fl_member_info>("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<fl_query_hist>("userid=@userid and itemid=@itemid and adzoneid = @adzoneid and crt_time > @time order by id desc", new { userid = db_order.db_userid, itemid = db_order.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<fl_member_info>("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<fl_member_info>("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<WeipinhuiOrderSubStatusName>(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<Dictionary<string, object>>("插件-唯品会返利-配置");
if (config != null)
{
if (config.ContainsKey("ReceivingTimeCheck_Switch"))
{
var ReceivingTimeCheck_Switch = bool.Parse(config["ReceivingTimeCheck_Switch"].ToString());
if (ReceivingTimeCheck_Switch)
{
if (config.ContainsKey("ReceivingTimeCheck_Hour"))
{
var ReceivingTimeCheck_Hour = int.Parse(config["ReceivingTimeCheck_Hour"].ToString());
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<ItemPoint>(db_order.db_point) as ItemPoint;
if (point != null)
{
List<long> ids = new List<long>();
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<ItemPoint>(db_order.db_point) as ItemPoint;
// if (point != null)
// {
// List<long> ids = new List<long>();
// 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<ItemPoint>(db_order.db_point) as ItemPoint;
if (point != null)
{
List<long> ids = new List<long>();
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);
}
}
/// <summary>
/// 同步订单
/// </summary>
/// <param name="members">唯品会cps对象集合</param>
/// <param name="start_time">开始时间</param>
/// <param name="end_time">结束时间</param>
private void UpdateOrder(fl_cps_member[] members, DateTime start_time, DateTime end_time)
{
if (members == null || members.Length == 0) return;
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<OrderNoticeEvent> notices = new List<OrderNoticeEvent>();
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<fl_adzone_info>();
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<WeipinhuiOrderSubStatusName>(order.orderSubStatusName);
#region
//var db_order = session.FindSingle<fl_order_weipinhui>("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<fl_order_weipinhui>("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<fl_order_weipinhui>("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<Update_NoticeQueue>() 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);
}
}
}
}
}