using Quartz;
|
using System;
|
using System.Collections.Generic;
|
using System.Text;
|
using System.Threading.Tasks;
|
using YouZanSDKStandard.Api;
|
using CommonUtil;
|
using YouZanSDKStandard.Api.Request;
|
using Operater.DAL;
|
using Operater.DbModel;
|
using ScheduledTasks.Model;
|
using YouZanSDKStandard.Api.Domain;
|
using System.Linq;
|
using Operater.DTO.TopMessage;
|
using CommonUtil.RabbitMQ;
|
|
namespace ScheduledTasks.Handle
|
{
|
/// <summary>
|
/// 有赞订单核对
|
/// </summary>
|
public class YzTradeVerifyHandle : IJob
|
{
|
public async Task Execute(IJobExecutionContext context)
|
{
|
await Synchronize(context);
|
}
|
|
public async Task Synchronize(IJobExecutionContext context)
|
{
|
try
|
{
|
Console.WriteLine($"开始yz订单核对-{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
|
var topToken = ScheduledCommon.GetSetInfo();
|
DateTime startTime = DateTime.Now.AddDays(-1).Date;
|
DateTime endTime = startTime.AddDays(1);
|
//先获取数据库数据
|
var tradeDb = GetYzTradeFromDb(startTime, endTime);
|
int totalPage = 1;
|
int pageSize = 100;
|
int currentPage = 1;
|
while (currentPage <= totalPage)
|
{
|
try
|
{
|
//接口获取时间段内的有赞订单
|
YouZanTradesSoldGetRequest yzReq = new YouZanTradesSoldGetRequest()
|
{
|
start_update = startTime,
|
end_update = endTime,
|
page_no = currentPage,
|
page_size = pageSize
|
};
|
var yzRsp = YouZanClient.Execute(yzReq, topToken.yzToken);
|
currentPage++;
|
totalPage = yzRsp.data.total_results % pageSize == 0 ? yzRsp.data.total_results / pageSize : (yzRsp.data.total_results / pageSize) + 1;
|
if (!yzRsp.data.IsNull() && !yzRsp.data.full_order_info_list.IsNull() && yzRsp.data.full_order_info_list.Count > 0)
|
{//与库里有赞订单校验
|
CheckTrade(tradeDb, yzRsp.data.full_order_info_list);
|
}
|
}
|
catch (Exception e)
|
{
|
LogUtil.Info($"循环错误:{e.ToString()}", "有赞订单核对error");
|
}
|
}
|
}
|
catch (Exception e)
|
{
|
Console.WriteLine($"yz订单核对主线程错误:{e.ToString()}");
|
}
|
Console.WriteLine($"yz订单核对完成-{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}");
|
}
|
|
#region 校验订单
|
private void CheckTrade(List<TradeFromDbModel> tradeDb, List<Full_order_info_listItem> tradeTop)
|
{
|
if (tradeTop.IsNull() || tradeTop.Count == 0)
|
{
|
return;
|
}
|
foreach (var item in tradeTop)
|
{
|
if (!tradeDb.Any(t => t.Tid == item.full_order_info.order_info.tid && t.Status == item.full_order_info.order_info.status))
|
{//订单对不上
|
BuYzTradeMoedel buYzTradeMoedel = new BuYzTradeMoedel()
|
{
|
Tid = item.full_order_info.order_info.tid,
|
Status = item.full_order_info.order_info.status,
|
StatusStr = item.full_order_info.order_info.status_str,
|
UpdateTime = (DateTime)item.full_order_info.order_info.update_time
|
};
|
TradeMqMessage tradeMqMessage = new TradeMqMessage()
|
{
|
MsgType = "yz_butrade",
|
MsgBody = JSONUtil.ObjectToJson(buYzTradeMoedel)
|
};
|
string ret = MQClientFullChannel.SendMessageStatic(0, "trade_interflow", JSONUtil.ObjectToJson(tradeMqMessage));
|
if (ret != "ok")
|
{
|
LogUtil.Info($"发MQ失败:{JSONUtil.ObjectToJson(buYzTradeMoedel)}", "有赞订单核对error");
|
}
|
}
|
}
|
}
|
|
#endregion
|
|
|
#region 获取数据库数据
|
public static List<TradeFromDbModel> GetYzTradeFromDb(DateTime startTime, DateTime endTime)
|
{
|
var yzTrade = new YzTradeinfoDAL().ListGet(i => new TradeFromDbModel { Tid = i.Tid, Status = i.Status }, t => t.UpdateTime >= startTime && t.UpdateTime <= endTime);
|
|
return yzTrade;
|
}
|
#endregion
|
}
|
}
|