zhaojs
2023-09-15 fc13938ff90213060532d99a600dea4a84456885
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
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
    }
}