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 } }