展杰
2024-08-16 38f56633a2aed9a665de4226c0299bfbce65469a
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
using System.Text;
using System.Web;
using MES.Service.Dto.service;
using MES.Service.Modes;
using MES.Service.service.Warehouse;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
 
namespace MES.Service.service;
 
public class GetErpParametersServer
{
    private readonly MesInvItemInCDetailsManager _invItemInCDetailsServer =
        new();
 
    private readonly MesInvItemOutsManager _invItemOutsServer =
        new();
 
    private readonly MessageCenterManager _messageCenterServer = new();
 
    public List<MessageCenter> GetErpParameters(List<MessageCenter> data)
    {
        var centers = new List<MessageCenter>();
 
        //获取主请求
        var center = data.Find(p => p.Seq == 1);
 
        //解析URL
        var queryString =
            center.PageName.Substring(center.PageName.IndexOf('?') + 1);
        //提取参数
        var queryParameters = HttpUtility.ParseQueryString(queryString);
 
        var strings = center.TableName.Split("_");
 
        MessageCenter mesToErp = null;
        var query = new WarehouseQuery();
        switch (center.TableName)
        {
            //采购入库单审核
            case "MES_INV_ITEM_INS_A":
            //采购入库单反审核
            case "MES_INV_ITEM_INS_B":
 
                //获取到类型(审核还是反审核)
                query.Type = strings[^1];
                //获取url中附带的参数
                query.id = Convert.ToDecimal(queryParameters["id"]);
                query.billNo = queryParameters["billNo"];
                //重新获取请求的数据
                mesToErp = _invItemInCDetailsServer.MesToErpParam(query);
                //赋值主id
                mesToErp.Id = center.Id;
                centers.Add(mesToErp);
 
                //更新剩下的请求的参数
                var messageCenter = data[0];
                var json = new JObject
                {
                    new JProperty("id", query.id),
                    new JProperty("billNo", query.billNo)
                };
                messageCenter.Data = json.ToString();
                centers.Add(messageCenter);
 
                break;
 
            //采购退料单审核
            case "MES_INV_ITEM_OUTS_A":
            //采购退料单反审核
            case "MES_INV_ITEM_OUTS_B":
 
                //获取到类型(审核还是反审核)
                query.Type = strings[^1];
                query.id = Convert.ToDecimal(queryParameters["id"]);
                query.billNo = queryParameters["itemOutNo"];
 
                //重新获取请求的数据
                mesToErp = _invItemOutsServer.MesToErpParam(query);
                //更正为主id
                mesToErp.Id = center.Id;
                //添加到请求集合中
                centers.Add(mesToErp);
 
                //获取剩余的请求
                var find = data.FindAll(s => s.Seq != 1);
                var result = new JObject
                {
                    new JProperty("id", query.id),
                    new JProperty("billNo", query.billNo)
                };
                find.ForEach(s =>
                {
                    s.Data = result.ToString();
                    centers.Add(s);
                });
                break;
            default:
                throw new Exception("无法识别TableName类型");
        }
 
        //根据顺序返回
        return centers.OrderBy(p => p.Seq).ToList();
    }
 
 
    public string Resend(MessageCenter data)
    {
        //获取所有的回调
        var messageCenters =
            _messageCenterServer.GetList(it => it.Pid == data.Id);
        messageCenters.Add(data);
        var erpParameters = GetErpParameters(messageCenters);
 
        return sendHttp(erpParameters).Result;
    }
 
 
    private async Task<string> sendHttp(List<MessageCenter> requestList)
    {
        var sortedRequests = requestList.OrderBy(r => r.Seq).ToList();
 
        using var httpClient = new HttpClient();
 
        var responses = "";
 
        foreach (var request in sortedRequests)
        {
            var httpRequestMessage = new HttpRequestMessage
            {
                Method = new HttpMethod(request.Method),
                RequestUri = new Uri(request.Url),
                Content = new StringContent(request.Data, Encoding.UTF8,
                    request.ContentType)
            };
 
            var response =
                await httpClient.SendAsync(httpRequestMessage);
            var responseData = await response.Content.ReadAsStringAsync();
 
            var result = JsonConvert.DeserializeObject<Result>(responseData);
 
            responses += result.msg + "!!!";
            responses += result.message + "!!!";
 
            if ("500".Equals(result.state))
            {
                responses = "返回报错:" + responses;
                return responses;
            }
 
            if ("1".Equals(result.status))
            {
                responses = "返回报错:" + responses;
                return responses;
            }
 
            request.Result = 1;
            request.ResultData = result.msg;
            request.Status = 1;
            request.DealWith = 1;
 
            _messageCenterServer.ResetUpdate(request);
        }
 
        responses = "重推成功:" + responses;
        return responses;
    }
}
 
public class Result
{
    public string? state { get; set; }
    public string? msg { get; set; }
 
    public string? status { get; set; }
 
    public string? message { get; set; }
}