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
{
///
/// 有赞订单核对
///
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 tradeDb, List 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 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
}
}