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

1121 lines
70 KiB
C#
Raw Normal View History

2022-09-20 03:10:29 +00:00
using Api.Framework.Config;
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 Newtonsoft.Json;
using SqlSugar;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Api.Framework.Timers
{
/// <summary>
/// 京东订单下载定时器
/// </summary>
public class DownJingdongTimer : TimerTask
{
private static long number = 0;
private DateTime update_time = DateTime.Now.AddHours(-2);
public override void Run(object state, bool timedOut)
{
try
{
number++;
if (number % 30 == 0) update_time = DateTime.Now.AddHours(-12);
else if (number % 100 == 0) update_time = DateTime.Now.AddHours(-24);
else update_time = DateTime.Now.AddHours(-2);
var not_onlines = CpsClient.Members.Where(f => f.cpstype == CpsType. && f.abnormal_tip == SwitchType. && !f.online).ToList();
if (not_onlines != null && not_onlines.Count != 0)
{
foreach (var cps in not_onlines)
{
var key = $"jingdong_not_online_{cps.usernick}";
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.name);
strb.AppendLine("京东ID" + cps.usernick);
strb.AppendLine();
strb.AppendLine("解决方法重新授权Key后,重新登录");
//ApiClient.SendNewDingdingMessage(strb.ToString());
ApiClient.SendNoticeMessage(strb.ToString());
ApiClient.Cache.Set(key, ".", 300);
Thread.Sleep(50);
}
}
}
UpdateOrder(CpsClient.Members.Where(f => f.cpstype == CpsType. && f.online && f.is_download == SwitchType.).ToArray(), update_time);
#region
var session = ApiClient.GetSession();
var result = session.Find<fl_order_jingdong>("db_status = @db_status and finishTime != @min and finishTime <= @now and db_endtime <= @endtime", new { db_status = 1001, min = DateTime.MinValue.ToString("yyyy-MM-dd HH:mm:ss"), now = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), endtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") });//所有完成冻结,但是还没改状态的订单,
//var cpsnicks = result.Select(f => f.db_cpsnick).GroupBy(f => f).Select(f => f.Key).ToList();
//TaskTool task = new TaskTool();
List<OrderNoticeEvent> notices = new List<OrderNoticeEvent>();
foreach (var order in result)
{
UpdateOrder(order, session, notices);
}
//foreach (var _cpsnick in cpsnicks)
//{
//var cpsnick = _cpsnick;
//var cps = CpsClient.Members.Where(f => f.cpstype == CpsType.京东联盟 && f.is_download == SwitchType.开启).ToList().FirstOrDefault(f => f.usernick == cpsnick);
//if (cps == null) continue;
//var client = new JingdongApi(cps);
//task.AddTask(delegate
//{
// try
// {
// var orderTimes = result.Where(f => f.db_cpsnick == cpsnick).Select(f => f.finishTime).OrderBy(f => f).ToList();
// if (orderTimes.Count == 0) return;
// if (orderTimes != null && orderTimes.Count != 0)
// {
// var time = orderTimes[0];
// List<DateTime> times = new List<DateTime>() { time };
// do
// {
// time = time.AddHours(1);
// var _time = orderTimes.FirstOrDefault(f => f > time);
// if (_time != DateTime.MinValue)
// {
// time = _time;
// times.Add(_time);
// }
// else
// break;
// } while (true);
// if (times.Count > 0)
// {
// foreach (var _time in times)
// {
// ProcessOrder(_time, client, 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_jingdong;
// if (order.orderId.ToString() == order_id) continue;
// tasks.Add(item);
// }
// }
// }
// catch (Exception ex)
// {
// EventClient.OnEvent(this, "更新阿里妈妈异常:" + ex.Message);
// }
//});
//}
//task.Start(1, null);
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_jingdong;
if (order.orderId.ToString() == order_id) continue;
tasks.Add(item);
}
}
#endregion
}
catch (Exception ex)
{
EventClient.OnEvent(this, $"更新京东异常:{ex.Message},{ex.StackTrace}");
}
}
/// <summary>
/// 手动同步订单
/// </summary>
/// <param name="member">京东cps对象集合</param>
/// <param name="start_time">开始同步的时间</param>
public void UpdateOrder(List<fl_cps_member> members, DateTime start_time)
{
foreach (var member in members)
{
if (!member.online)
EventClient.OnEvent(this, $"【{member.usernick}】该账号失效,请重新生成京东联盟Key");
}
members = members.Where(f => f.online).ToList();
if (IsRunning) throw new Exception("任务繁忙,请稍后重试!");
try
{
IsRunning = true;
//start_time = DateTime.Now.AddDays(-1);//TODO 由于调用量有限京东只能同步1天以后要删除的
UpdateOrder(members.ToArray(), start_time);
}
catch (Exception ex)
{
EventClient.OnEvent(this, "更新京东订单异常:" + ex.Message);
}
finally
{
IsRunning = false;
}
}
/// <summary>
/// 京东下载订单执行
/// </summary>
/// <param name="members">京东cps对象集合</param>
/// <param name="start_time">开始同步的时间</param>
private void UpdateOrder(fl_cps_member[] members, DateTime start_time)
{
if (members == null || members.Length == 0) return;
int pageCount = 100;//下载每页的数量
//var session = ApiClient.GetSession();
TaskTool task = new TaskTool();
List<OrderNoticeEvent> notices = new List<OrderNoticeEvent>();
foreach (var item in members)
{
var _item = item;
var client = new JingdongApi(_item);
task.AddTask(delegate
{
var end_time = DateTime.Now;
try
{
do
{
if (!ProcessOrder(end_time, client, notices).Result)
{
break;
}
//就近原则,先更新最近的
end_time = end_time.AddHours(-1);
//多账号,多线程处理的时候,肯定有问题
// start_time = start_time.AddHours(1); //增加一小时
}
while (end_time > start_time);//当前结束时间,必须大于启动时间,否则退出
}
catch (Exception ex)
{
if (ex.Message == "京东繁忙,请稍后再试")
EventClient.OnEvent(this, "更新京东联盟订单异常:" + ex.Message + ",已终止操作");
else
EventClient.OnEvent(this, "更新京东联盟订单异常:" + ex.Message);
}
});
}
task.Start(1, null);
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_jingdong;
if (order.orderId.ToString() == order_id) continue;
tasks.Add(item);
}
}
}
/// <summary>
/// 无效的订单类型
/// </summary>
private static List<int> InvalidValidCodes = new List<int>() { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 20, 21, 22, 23, 24, 25, 26, 27, 28 };
/// <summary>
/// 处理下载到的订单
/// </summary>
/// <param name="session"></param>
/// <param name="time"></param>
/// <param name="cps"></param>
/// <param name="client"></param>
/// <param name="notices"></param>
private Task<bool> ProcessOrder(DateTime time, JingdongApi client, List<OrderNoticeEvent> notices)
{
Thread.Sleep(10);
return Task.Run<bool>(() =>
{
try
{
var cps = client.Member;
#region
bool hasMore = false; //是否还有更多数据【true还有数据;false:已查询完毕,没有数据】
int page_index = 1; //当前查询的页数
Dictionary<string, object> result = null;
do
{
try
{
//订单时间查询类型(1:下单时间, 2:完成时间, 3:更新时间)
#region
//2019-08-19 12:15:01
result = client.DownOrder(time, cps.username, page_index, 500, 3);
if (result == null) break;
if (result["code"].ToString() != "200") throw new Exception($"京东订单下载失败 - 下单时间:{time.ToString("yyyy-MM-dd HH:mm:ss")} - {result["message"]}");
if (result.ContainsKey("data"))
{
var orders = result["data"] as ArrayList;
if (orders != null && orders.Count > 0)
{
int count = 1;
foreach (Dictionary<string, object> order in orders)
{
count++;
if (ApiClient.Setting.DbConfig.DatabaseType == DatabaseType.SQLITE && count % 10 == 0)
Thread.Sleep(200);
var session = ApiClient.GetSession();
try
{
if (order["orderId"].ToString() == "250364082656")
{
}
var db_orders = session.Find<fl_order_jingdong>("orderId = @orderId", new { orderId = order["orderId"].ToString() }).ToList();
//var orderTime = long.Parse(order["orderTime"].ToString());//下单时间
//var finishTime = long.Parse(order["finishTime"].ToString());//完成时间
var orderTime = string.IsNullOrWhiteSpace(order["orderTime"].ToString()) ? DateTime.MinValue : DateTime.Parse(order["orderTime"].ToString());//下单时间
var finishTime = string.IsNullOrWhiteSpace(order["finishTime"].ToString()) ? DateTime.MinValue : DateTime.Parse(order["finishTime"].ToString());//完成时间
var modifyTime = string.IsNullOrWhiteSpace(order["modifyTime"].ToString()) ? DateTime.MinValue : DateTime.Parse(order["modifyTime"].ToString());//更新时间,格式yyyy-MM-dd HH:mm:ss
//if (order["parentId"].ToString() != "0")//存在拆单数据
//{ //父类ID非等于0的不处理
//if (order.ContainsKey("skuList"))
//if (order.ContainsKey("orderRowResp"))
//{
#region plus会员下单 plus
int plus = 0;
if (order.ContainsKey("plus")) plus = int.Parse(order["plus"].ToString());
#endregion
//var skuList = order["orderRowResp"] as ArrayList;
//foreach (Dictionary<string, object> sku in skuList)
//{
if (order.ContainsKey("estimateCosPrice") && double.Parse(order["estimateCosPrice"].ToString()) == 0) continue;
if (order.ContainsKey("positionId"))
{
var positionId = order["positionId"].ToString();
if (ApiClient.Setting.SystemConfig.order_jingdong_download_set_pids == SwitchType.)
{
if (!string.IsNullOrWhiteSpace(ApiClient.Setting.SystemConfig.order_jingdong_not_download_pid))
{
var pids = ApiClient.Setting.SystemConfig.order_jingdong_not_download_pid.Replace("", ",").Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(f => f.Trim()).ToList();
var isExist = (pids.FirstOrDefault(f => f.EndsWith(positionId)) != null);
if (ApiClient.Setting.SystemConfig.order_jingdong_down_type == DownAdzoneType.广 && isExist)
continue;
else if (ApiClient.Setting.SystemConfig.order_jingdong_down_type == DownAdzoneType.广 && !isExist)
continue;
}
}
else
{
//var adzone = session.FindAdzoneInfos().Where(f => f.custom_type == "京东返利" && !string.IsNullOrEmpty(f.adzone_pid) && f.adzone_pid.EndsWith(positionId));
var adzoneList = new List<fl_adzone_info>();
var adzones = session.FindAdzoneInfos();
adzoneList.AddRange(adzones.Where(f => f.custom_type == "京东返利" && !string.IsNullOrEmpty(f.adzone_pid) && f.adzone_pid.EndsWith(positionId)));
adzoneList.AddRange(adzones.Where(f => f.custom_type == "用户私人pid" && f.extend == "京东私人pid" && !string.IsNullOrEmpty(f.adzone_pid) && f.adzone_pid.EndsWith(positionId)));
if (adzoneList == null || adzoneList.Count() == 0)
{
continue;
}
}
}
//2021年1月26日 之前老版
//sku维度的有效码-1未知,2.无效-拆单,3.无效-取消,4.无效-京东帮帮主订单,5.无效-账号异常,6.无效-赠品类目不返佣,7.无效-校园订单,8.无效-企业订单,9.无效-团购订单,10.无效-开增值税专用发票订单,11.无效-乡村推广员下单,13.无效-违规订单,14.无效-来源与备案网址不符,15.待付款,16.已付款,17.已完成,18.已结算5.9号不再支持结算状态回写展示))
//-1未知,2.无效-拆单,3.无效-取消,4.无效-京东帮帮主订单,5.无效-账号异常,6.无效-赠品类目不返佣,7.无效-校园订单,8.无效-企业订单,9.无效-团购订单,10.无效-开增值税专用发票订单,11.无效-乡村推广员下单,12.无效-自己推广自己下单,13.无效-违规订单,14.无效-来源与备案网址不符,15.待付款,16.已付款,17.已完成,18.已结算 //自定义 19.售后中 //自定义 20.结算后失效
//2021年1月26日 之后新版
//sku维度的有效码-1未知,2.无效-拆单,3.无效-取消,4.无效-京东帮帮主订单,5.无效-账号异常,6.无效-赠品类目不返佣,7.无效-校园订单,8.无效-企业订单,9.无效-团购订单,11.无效-乡村推广员下单,13.无效-违规订单,14.无效-来源与备案网址不符,15.待付款,16.已付款,17.已完成(购买用户确认收货),20.无效-此复购订单对应的首购订单无效,21.无效-云店订单22. 无效-PLUS会员佣金比例为0 19.售后中 //自定义
//2021年10月21日 之后新版
//sku维度的有效码-1未知,2.无效 - 拆单,3.无效 - 取消,4.无效 - 京东帮帮主订单,5.无效 - 账号异常,6.无效 - 赠品类目不返佣,7.无效 - 校园订单,8.无效 - 企业订单,9.无效 - 团购订单,11.无效 - 乡村推广员下单,13.无效 - 违规订单,14.无效 - 来源与备案网址不符,15.待付款,16.已付款,17.已完成(购买用户确认收货),20.无效 - 此复购订单对应的首购订单无效,21.无效 - 云店订单22.无效 - PLUS会员佣金比例为023.无效 - 支付有礼24.已付定金25. 违规订单-流量劫持26. 违规订单-流量异常27. 违规订单-违反京东平台规则28. 违规订单-多笔交易异常 19.售后中 //自定义
var validCode = int.Parse(order["validCode"].ToString());
var proPriceAmount = double.Parse(order["proPriceAmount"].ToString());
if (decimal.Parse(order["commissionRate"].ToString()) == 0m) continue; //无佣金的订单不下载(订单状态:已完成/已结算)
if (validCode != 2)//不处理拆单 - 无效
{
var jingdong_order = db_orders.FirstOrDefault(f => f.orderId == long.Parse(order["orderId"].ToString()) && f.skuId == long.Parse(order["skuId"].ToString()));
if (jingdong_order != null) //订单存在 - 判断订单状态是否一样,一样不处理
{
var validCode_temp = jingdong_order.validCode;
#region
//var _validCode = validCode;
var frozenSkuNum = long.Parse(order["skuFrozenNum"].ToString());//商品售后中数量
var skuReturnNum = long.Parse(order["skuReturnNum"].ToString());//商品退货数量
if (frozenSkuNum != 0)//订单信息中存在维权的情况
{
if (jingdong_order.db_status != SystemOrderStatus.)
{
//if (frozenSkuNum != 0)//这里判断是否为售后状态,数量为0时没有售后订单
//{
jingdong_order.frozenSkuNum = frozenSkuNum;//售后中的数量,这个变量不为空,实际佣金和实际计算佣金的金额会变成0
jingdong_order.refundcreatetime = DateTime.Now;
validCode = 19;
//}
}
else
{
if (jingdong_order.frozenSkuNum == frozenSkuNum)//维权数量一致时,跳过
continue;
}
}
else if (jingdong_order.skuReturnNum != skuReturnNum && validCode == 17 && jingdong_order.db_status != SystemOrderStatus.退 && jingdong_order.db_status != SystemOrderStatus.退)
{
jingdong_order.skuReturnNum = skuReturnNum;
if (jingdong_order.db_status == SystemOrderStatus.)
validCode = 20;
}
else//订单信息中不存在维权的情况,判断订单是已经结算
{
//if (jingdong_order.db_status != SystemOrderStatus.订单维权中)
// if (jingdong_order.IsFinish()) continue;//是否已经完成
if (jingdong_order.db_status != SystemOrderStatus.)
{
if (jingdong_order.db_status == SystemOrderStatus. && InvalidValidCodes.Contains(validCode) && validCode_temp != validCode)
{
validCode = 20;
}
else if (jingdong_order.IsFinish())//是否已经完成
{
continue;
}
}
}
#endregion
if (validCode_temp == validCode && jingdong_order.db_status != SystemOrderStatus.)
continue;
jingdong_order.validCode = validCode;//更新状态
jingdong_order.finishTime = finishTime;
jingdong_order.skuReturnNum = long.Parse(order["skuReturnNum"].ToString());//商品已退货数量
jingdong_order.frozenSkuNum = long.Parse(order["skuFrozenNum"].ToString());//商品售后中数量
#region (
//1、售后中两个金额将为0
//2、订单收货后两个金额将有实际的佣金值)
jingdong_order.actualFee = double.Parse(order["actualFee"].ToString());//实际佣金
jingdong_order.actualCosPrice = double.Parse(order["actualCosPrice"].ToString());//实际计算佣金的金额
#endregion
if (jingdong_order.db_status == SystemOrderStatus. && (jingdong_order.validCode == 17 || jingdong_order.validCode == 18))
{
jingdong_order.db_status = SystemOrderStatus.退;
}
}
else
{
if (order.ContainsKey("id"))
order.Remove("id");
//订单不存在 - 增加
jingdong_order = order.ConvertToObj<fl_order_jingdong>();
jingdong_order.frozenSkuNum = long.Parse(order["skuFrozenNum"].ToString());
//不保存,赠送商品
if (jingdong_order.price == 0d) continue;
jingdong_order.orderId = long.Parse(order["orderId"].ToString());
jingdong_order.db_cpsname = cps.username;
jingdong_order.db_cpsnick = cps.usernick;
jingdong_order.orderTime = orderTime;
jingdong_order.finishTime = finishTime;
//if (validCode == 16 || validCode == 24)
// jingdong_order.db_status = SystemOrderStatus.订单付款;
#region
//var estimateFee = decimal.Round((decimal)jingdong_order.estimateCosPrice * (decimal)jingdong_order.commissionRate * (decimal)jingdong_order.finalRate, 2, MidpointRounding.AwayFromZero); ;//预计佣金
//var actualFee = decimal.Round((decimal)jingdong_order.actualCosPrice * (decimal)jingdong_order.commissionRate * (decimal)jingdong_order.finalRate, 2, MidpointRounding.AwayFromZero);//实际佣金
#endregion
if (jingdong_order.frozenSkuNum != 0)
{
jingdong_order.refundcreatetime = DateTime.Now;
jingdong_order.validCode = 19;
}
}
jingdong_order.proPriceAmount = proPriceAmount;
jingdong_order.plus = plus;
UpdateOrder(jingdong_order, session, notices);
}
else //拆单订单变成无效
{
var jingdong_order = db_orders.FirstOrDefault(f => f.orderId == long.Parse(order["orderId"].ToString()) && f.skuId == long.Parse(order["skuId"].ToString()));
if (jingdong_order != null)
{
if (jingdong_order.IsFinish()) continue;//是否已经完成
jingdong_order.validCode = 2;
jingdong_order.db_status = SystemOrderStatus.;
session.SaveOrUpdate(jingdong_order);
}
}
// }
//}
}
catch (Exception ex)
{
throw ex;
}
}
}
}
#endregion
}
catch (Exception ex)
{
if (ex.Message == "京东key失效" || ex.Message == "授权key无权限或错误")
{
EventClient.OnEvent(this, $"更新京东联盟订单异常:{ex.Message} - {ex.StackTrace}");
var _cps = CpsClient.Members.FirstOrDefault(f => f.cpstype == CpsType. && f.username == cps.username && f.usernick == cps.usernick);
_cps.online = false;
var session = ApiClient.GetSession();
session.Updateable(_cps).ExecuteCommand();
return false;
}
if (ex.Message == "京东繁忙,请稍后再试")
throw ex;
EventClient.OnEvent(this, $"同步京东订单列表出错:{ex.Message} - {ex.StackTrace}");
}
page_index++;
Thread.Sleep(50); //请求接口太快,用于减速
} while (result != null && result.Count != 0 && result.ContainsKey("hasMore") && result["hasMore"].ToString().ToLower() == "true");//是否存在更多的数据,存在去加载下一页数据
#endregion
}
catch (Exception ex)
{
EventClient.OnEvent(this, $"同步京东出错:{ex.Message} - {ex.StackTrace}");
return false;
}
return true;
});
}
/// <summary>
/// 订单 修改状态/用户绑定等操作通知用户
/// </summary>
/// <param name="db_order">京东订单对象</param>
/// <param name="session">数据库操作对象</param>
/// <param name="notices">事件集合</param>
/// <param name="isFrontData"></param>
public void UpdateOrder(fl_order_jingdong db_order, SqlSugarClient session, List<OrderNoticeEvent> notices, bool isFrontData = false)
{
try
{
//维权中的订单,直接跳出
if (db_order.db_status == SystemOrderStatus.)
return;
var old_status = db_order.db_status;
fl_member_info member = null;
var isRewards = false;//是否获得推荐新人奖励
var isFirstOrder = false;//是否获得用户首单奖励
#region
if (db_order.db_userid == 0 && (db_order.validCode == 16 || db_order.validCode == 24))
{
var bind = session.FindBindCache(db_order.orderId.ToString());
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);
#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.skuId, adzoneid = db_order.positionId, 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.
};
LogHelper.GetSingleObj().Error("历史查询记录1", JsonConvert.SerializeObject(queryRatioHist));
session.SaveOrUpdate(queryRatioHist);
}
#endregion
}
}
}
#endregion
//订单自动绑定
if (db_order.db_userid == 0 && (db_order.validCode == 16 || db_order.validCode == 24) && ApiClient.Setting.SystemConfig.order_jingdong_bind == SwitchType.)
{
#region
#region 广
var privateAdzonePids = session.FindJingdongPrivatePid(db_order.positionId.ToString());//私人推广位对象
//var privatePids = privateAdzonePids.Select(f => f.adzone_pid).ToList();
if (privateAdzonePids.Count == 1 && privateAdzonePids[0].is_auto_bind)//无条件设置开启中,直接自动绑定
{
var memberInfo = session.Find<fl_member_info>("id=@id", new { id = privateAdzonePids[0].member_id }).FirstOrDefault();
if (memberInfo != null)
{
db_order.db_userid = memberInfo.id;
db_order.db_robotname = memberInfo.robot_name;
db_order.db_robottype = memberInfo.robot_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.skuId, adzoneid = db_order.positionId, time = DateTime.Now.AddHours(-24).ToString("yyyy-MM-dd HH:mm:ss") });
if (query_item != null)
{
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.
};
LogHelper.GetSingleObj().Error("历史查询记录2", JsonConvert.SerializeObject(queryRatioHist));
session.SaveOrUpdate(queryRatioHist);
}
db_order.msg_groupid = query_item.groupid;
}
}
#endregion
}
}
#endregion
else
{
var bind_pids = session.FindJingdongAutoBindPid();
bind_pids.AddRange(privateAdzonePids.Select(f => f.adzone_pid));
bool support = bind_pids.FirstOrDefault(f => f.EndsWith("_" + db_order.positionId)) != null ? true : false;//TODO 这里的站长ID还是完整的 xxx_x_xxx
//bool support = bind_pids.FirstOrDefault(f => db_order.pid.StartsWith(f + "_")) != null ? true : false;//这里的站长ID还是完整的 xxx_x_xxx
if (support)
{
#region
var query = session.FindTable("select userid,count(*) as count from fl_query_hist where itemid=@itemid and adzoneid = @adzoneid and crt_time>@time group by userid ", new { itemid = db_order.skuId, adzoneid = db_order.positionId, time = DateTime.Now.AddHours(-24).ToString("yyyy-MM-dd HH:mm:ss") });
if (query.Rows.Count == 1)
{
db_order.db_userid = int.Parse(query.Rows[0]["userid"].ToString()); //根据查询记录认领
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.skuId, adzoneid = db_order.positionId, time = DateTime.Now.AddHours(-24).ToString("yyyy-MM-dd HH:mm:ss") });
if (query_item != null)
{
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.
};
LogHelper.GetSingleObj().Error("历史查询记录3", JsonConvert.SerializeObject(queryRatioHist));
session.SaveOrUpdate(queryRatioHist);
}
db_order.msg_groupid = query_item.groupid; //订单查询群号
}
}
#endregion
}
}
#endregion
}
if ((db_order.validCode == 16 || db_order.validCode == 24) && db_order.db_userid != 0)
{
try
{
var record = session.FindStatisticsRecord(db_order.db_userid);
if (record == null)
record = new fl_statistics_record() { uid = db_order.db_userid };
record.ex5 = HttpExtend.GetTimeStamp(db_order.orderTime);
session.Saveable(record).ExecuteCommand();
}
catch (Exception)
{ }
}
member = db_order.db_userid != 0 ? session.FindSingle<fl_member_info>("select * from fl_member_info where id=@id", new { id = db_order.db_userid }) : null;
if (string.IsNullOrEmpty(db_order.db_robotname) && member != null) //订单没有绑定机器人账号 & 用户存在 (进行机器人账号和机器人类型绑定)
{
member.username = member.username;
db_order.db_robotname = member.robot_name;
db_order.db_robottype = member.robot_type;
}
var status = Util.ConvertEnum<JingdongOrderStatus>(db_order.validCode);
//if (string.IsNullOrEmpty(db_order.db_point)) //进行用户所得佣金计算
//{
#region
double fee = 0d; //实际佣金和预计佣金
switch (status)
{
case JingdongOrderStatus.:
case JingdongOrderStatus._拆单:
case JingdongOrderStatus._取消:
case JingdongOrderStatus._京东帮帮主订单:
case JingdongOrderStatus._账号异常:
case JingdongOrderStatus._赠品类目不返佣:
case JingdongOrderStatus._校园订单:
case JingdongOrderStatus._企业订单:
case JingdongOrderStatus._团购订单:
case JingdongOrderStatus._开增值税专用发票订单:
case JingdongOrderStatus._乡村推广员下单:
case JingdongOrderStatus._自己推广自己下单:
case JingdongOrderStatus._违规订单:
case JingdongOrderStatus._来源与备案网址不符:
fee = db_order.estimateFee;//订单取消这里使用 预估佣金
break;
case JingdongOrderStatus.:
case JingdongOrderStatus.:
case JingdongOrderStatus.:
//if (db_order.proPriceAmount == 0)
fee = (db_order.actualFee != 0 ? db_order.actualFee : db_order.estimateFee); //实际佣金
//else
// fee = 0;//价保赔付金额不为空,将佣金设置为0;...搞不清楚这个是什么完样
break;
case JingdongOrderStatus.:
case JingdongOrderStatus.:
case JingdongOrderStatus.:
case JingdongOrderStatus.:
fee = db_order.estimateFee; //预计佣金
break;
default:
break;
}
ItemPoint itempoint = null;
if (db_order.db_status != SystemOrderStatus.)
{
//查询历史查询比例
var compute = session.FindQueryRatioHist(CpsType., db_order.id);
if (compute != null)
itempoint = session.FindItemPoint(CpsType., compute, fee, (int)db_order.skuNum);
else
itempoint = session.FindItemPoint(member, fee, (int)db_order.skuNum, CpsType.);
if (itempoint != null)
{
if (itempoint.UserPoint == 0 && ApiClient.Setting.SystemConfig.SubsidyJd == SwitchType.)
itempoint.UserPoint = 0.01;
db_order.db_point = HttpHelper.ObjectToJson(itempoint);
db_order.db_userpoint = itempoint.UserPoint;
}
if (db_order.db_status == SystemOrderStatus. && member != null)
{
member.bind_order++;
member = session.UpdateMemberGroup(member);
}
}
else
itempoint = HttpHelper.JsonToObject<ItemPoint>(db_order.db_point) as ItemPoint;
#endregion
//}
switch (status)
{
case JingdongOrderStatus.:
case JingdongOrderStatus.:
{
if (db_order.actualCosPrice == 0d && db_order.skuNum == db_order.skuReturnNum)
{
db_order.db_status = SystemOrderStatus.退;
db_order.db_endtime = DateTime.Now.AddMinutes(-1);
//old_status = SystemOrderStatus.全额退款; //不处理,不通知用户
}
if (db_order.db_status != SystemOrderStatus.退)
{
if (db_order.db_endtime == DateTime.MinValue) //客户还没有结算
{
var sleep = session.FindSleep(CpsType., ApiClient.Setting.SystemConfig.FreezingCondition == FreezingConditionType. ? db_order.actualFee : 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;
}
if (db_order.db_endtime > DateTime.Now) //佣金解冻
{
db_order.db_status = SystemOrderStatus.;
//if (db_order.actualCosPrice == 0d)
//{
// db_order.db_status = SystemOrderStatus.全额退款;
// db_order.db_endtime = DateTime.Now.AddMinutes(-1);
// //old_status = SystemOrderStatus.全额退款; //不处理,不通知用户
//}
}
else
{
db_order.db_status = SystemOrderStatus.;
//if (db_order.skuReturnNum == db_order.skuNum && db_order.actualCosPrice == 0d)
// db_order.db_status = SystemOrderStatus.全额退款;
////else if (db_order.skuReturnNum != db_order.skuNum)
//// db_order.db_status = SystemOrderStatus.部分退款;
session.SaveOrUpdate(db_order);
if (member != null)
{
if (itempoint != null)
{
List<long> ids = new List<long>();
ids.Add(member.id);
//用户自身加积分
member = session.ChangePoint(PointType., itempoint.UserPoint, member.id, $"京东购买:{db_order.skuName}({db_order.orderId})");
#region
isFirstOrder = OrderHelper.CheckMemberFirstOrderRewards(member, db_order.db_status);
#endregion
//多级提成计算
//一级的提成小于等于0时,并且判断一级是否符合获得推荐新人奖励(无奖励一级提成)
if (itempoint.AwardOne <= 0 && member.inviter_id > 0 && !ids.Contains(member.inviter_id) && member.id != member.inviter_id)
{
if (notices != null)
{
var inviter = session.FindMemberInfoById(member.inviter_id);
if (inviter != null)
{
#region
isRewards = OrderHelper.CheckSuperiorInviteRewards(member, db_order.db_endtime, db_order.estimateCosPrice);
#endregion
notices.Add(new OrderNoticeEvent(CpsType., inviter, db_order, OrderNoticeType.) { Customer = member, IsRewards = isRewards });//下级首单完成
}
}
}
else if (itempoint.AwardOne > 0 && !ids.Contains(member.inviter_id) && member.id != member.inviter_id)
{
var flag = session.ChangePoint(PointType., itempoint.AwardOne, member.inviter_id, $"{member.usernick},京东购物1级提成 - {db_order.skuName}({db_order.orderId})");
if (flag != null)
{
ids.Add(flag.id);
#region
isRewards = OrderHelper.CheckSuperiorInviteRewards(member, db_order.db_endtime, db_order.estimateCosPrice);
#endregion
notices.Add(new OrderNoticeEvent(CpsType., flag, db_order, OrderNoticeType.) { Customer = member, IsRewards = isRewards });
if (itempoint.AwardTwo > 0 && flag.inviter_id != 0 && !ids.Contains(flag.inviter_id))
{
var flag2 = session.ChangePoint(PointType., itempoint.AwardTwo, flag.inviter_id, $"{member.usernick},京东购物2级提成 - {db_order.skuName}({db_order.orderId})");
if (flag2 != null)
{
ids.Add(flag2.id);
if (flag2 != null)
{
notices.Add(new OrderNoticeEvent(CpsType., flag2, db_order, OrderNoticeType.) { Customer = member });
if (itempoint.AwardThree > 0 && flag2.inviter_id != 0 && !ids.Contains(flag2.inviter_id))
{
var flag3 = session.ChangePoint(PointType., itempoint.AwardThree, flag2.inviter_id, $"{member.usernick},京东购物3级提成 - {db_order.skuName}({db_order.orderId})");
if (flag3 != null)
{
ids.Add(flag3.id);
if (flag3 != null) notices.Add(new OrderNoticeEvent(CpsType., flag3, db_order, OrderNoticeType.) { Customer = member });
}
}
}
}
}
}
}
//创建人计算
if (itempoint.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., itempoint.AwardCreate, create.mid, $"{member.usernick},京东维护提成! - {db_order.skuName}({db_order.orderId})");
if (flag != null) notices.Add(new OrderNoticeEvent(CpsType., flag, db_order, OrderNoticeType.) { Customer = member });
}
}
}
}
}
}
}
break;
}
case JingdongOrderStatus.:
case JingdongOrderStatus.:
{
if (status == JingdongOrderStatus.)
{
if (db_order.actualCosPrice == 0d && db_order.skuNum == db_order.skuReturnNum)
{
db_order.db_status = SystemOrderStatus.退;
db_order.db_endtime = DateTime.Now.AddMinutes(-1);
//old_status = SystemOrderStatus.全额退款; //不处理,不通知用户
}
else
{
db_order.db_status = SystemOrderStatus.;
db_order.validCode = 2;
}
}
else
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, (db_order.actualFee != 0 ? db_order.actualFee : db_order.estimateFee), (int)db_order.skuNum);
else
//判断用户的订单是否已经结算,如果已经结算通过实际佣金进行退款,如果没有结算通过预计佣进行计算
itempointTmp = session.FindItemPoint(member, (db_order.actualFee != 0 ? db_order.actualFee : db_order.estimateFee), (int)db_order.skuNum, CpsType.);
new OrderHelper().DeductJingDongOrderPoint(notices, db_order, itempointTmp);
}
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;
case JingdongOrderStatus.:
case JingdongOrderStatus.:
{
db_order.db_status = SystemOrderStatus.;
}
break;
case JingdongOrderStatus._乡村推广员下单:
case JingdongOrderStatus._京东帮帮主订单:
case JingdongOrderStatus._企业订单:
case JingdongOrderStatus._取消:
case JingdongOrderStatus._团购订单:
case JingdongOrderStatus._开增值税专用发票订单:
case JingdongOrderStatus._拆单:
case JingdongOrderStatus._来源与备案网址不符:
case JingdongOrderStatus._校园订单:
case JingdongOrderStatus._自己推广自己下单:
case JingdongOrderStatus._账号异常:
case JingdongOrderStatus._赠品类目不返佣:
case JingdongOrderStatus._违规订单:
case JingdongOrderStatus.:
case JingdongOrderStatus.:
case JingdongOrderStatus.:
case JingdongOrderStatus.:
db_order.db_status = SystemOrderStatus.;
break;
case JingdongOrderStatus.:
db_order.db_status = SystemOrderStatus.;
break;
//case JingdongOrderStatus.已完成:
// 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 (notices != null)
notices.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 (notices != null && member_two != null)
{
notices.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 (notices != null && member_three != null)
notices.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 (notices != null && member_create != null) notices.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 (notices != null && old_status != db_order.db_status)
// notices.Add(new Events.OrderNoticeEvent(CpsType.京东联盟, member, db_order, OrderNoticeType.客户订单));
if (notices != null && member != null && (isFrontData || old_status != db_order.db_status))
notices.Add(new Events.OrderNoticeEvent(CpsType., member, db_order) { IsRewards = isFirstOrder });
}
catch (Exception ex)
{
EventClient.OnEvent(this, "更新京东订单错误 - 更新状态/订单绑定:" + db_order.orderId + "," + ex.Message + "," + ex.StackTrace);
}
}
/// <summary>
/// 订单id
/// </summary>
private string order_id = string.Empty;
/// <summary>
/// 更新订单
/// </summary>
/// <param name="start_time">开始时间</param>
/// <param name="order_id">订单id</param>
/// <returns></returns>
internal bool UpdateOrder(DateTime start_time, string order_id = "")
{
if (IsRunning) throw new Exception("任务繁忙,请稍后重试!");
try
{
IsRunning = true;
this.order_id = order_id;
var members = CpsClient.Members.Where(f => f.cpstype == CpsType. && f.is_download == SwitchType. && f.online).ToArray();
UpdateOrder(members, start_time);
return true;
}
catch (Exception ex)
{
EventClient.OnEvent(this, "更新京东联盟异常:" + ex.Message + "," + ex.StackTrace);
return false;
}
finally
{
this.order_id = string.Empty;
IsRunning = false;
}
}
}
}