啊鑫
2024-08-01 b64efba9b005c074b3963c9d650091c70e46108b
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
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 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);
 
        switch (center.TableName)
        {
            //采购入库单审核
            case "MES_INV_ITEM_INS_A":
            //采购入库单反审核
            case "MES_INV_ITEM_INS_B":
                var strings = center.TableName.Split("_");
 
                var query = new WarehouseQuery();
                //获取到类型(审核还是反审核)
                query.Type = strings[^1];
                query.id = Convert.ToDecimal(queryParameters["id"]);
                query.billNo = queryParameters["billNo"];
 
                var mesToErp = _invItemInCDetailsServer.MesToErpParam(query);
                mesToErp.Id = center.Id;
                centers.Add(mesToErp);
 
                var messageCenter = data[0];
                var json = new JObject();
                json.Add(new JProperty("id", query.id));
                json.Add(new JProperty("billNo", query.billNo));
                messageCenter.Data = json.ToString();
                centers.Add(messageCenter);
 
                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; }
}