Blame view

HHECS.DAQClient/Services/HttpService.cs 6.33 KB
唐召明 authored
1
using HHECS.BllModel;
唐召明 authored
2
using HHECS.DAQClient.Dto;
唐召明 authored
3
using HHECS.DAQClient.Model;
唐召明 authored
4
5
6
7
8
using System.Configuration;
using System.Net.Http;
using System.Text;
using System.Text.Json;
唐召明 authored
9
namespace HHECS.DAQClient.Services
唐召明 authored
10
11
12
13
14
{
    internal class HttpService
    {
        private readonly HttpClient _httpClient;
15
        private readonly JsonSerializerOptions jsonSerializeOptions = new JsonSerializerOptions
唐召明 authored
16
17
        {
            PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
18
19
20
21
22
23
            PropertyNameCaseInsensitive = true
        };

        private readonly JsonSerializerOptions jsonDeserializeOptions = new JsonSerializerOptions
        {
            PropertyNameCaseInsensitive = true
唐召明 authored
24
25
26
27
        };

        public HttpService(HttpClient httpClient)
        {
28
29
30
31
32
            //HttpClientHandler clientHandler = new HttpClientHandler();
            //clientHandler.ServerCertificateCustomValidationCallback += (sender, cert, chain, sslPolicyErrors) => { return true; };
            //clientHandler.SslProtocols = SslProtocols.None;
            //httpClient = new HttpClient(clientHandler);
唐召明 authored
33
34
35
36
37
38
39
40
41
42
            _ = bool.TryParse(ConfigurationManager.AppSettings["IsProductionEnvironment"], out var isProductionEnvironment);
            if (isProductionEnvironment)
            {
                httpClient.BaseAddress = new Uri(ConfigurationManager.AppSettings["ProductionAPI"]!);
            }
            else
            {
                httpClient.BaseAddress = new Uri(ConfigurationManager.AppSettings["TestAPI"]!);
            }
唐召明 authored
43
            httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
唐召明 authored
44
            httpClient.DefaultRequestHeaders.Add("User-Agent", "HHECS.DAQClient");
唐召明 authored
45
46
47
48
49
50
            _httpClient = httpClient;
        }

        /// <summary>
        /// 推送设备实时数据
        /// </summary>
51
        /// <param name="equipmentDataQueues"></param>
唐召明 authored
52
        public BllResult SendEquipmentData(IEnumerable<EquipmentDataQueue> equipmentDataQueues)
唐召明 authored
53
        {
唐召明 authored
54
            try
唐召明 authored
55
            {
唐召明 authored
56
57
                var data = equipmentDataQueues.Select(x => new EquipmentDataDto
                {
唐召明 authored
58
                    Plmeid = x.Id == Guid.Empty ? Guid.NewGuid() : x.Id,
唐召明 authored
59
60
61
62
63
64
65
                    EquipmentSN = x.EquipmentCode,
                    Reported = JsonSerializer.Deserialize<List<TagItem>>(x.Reported),
                    Version = x.Version,
                    Timestamp = x.SourceTimestamp,
                }).ToList();

                var json = JsonSerializer.Serialize(data, jsonSerializeOptions);
唐召明 authored
66
                var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
67
                var result = _httpClient.PostAsync("Equipment/SendEquipmentData", stringContent).Result;
唐召明 authored
68
69
70
                var resultContent = result.Content.ReadAsStringAsync().Result;
                if (result.IsSuccessStatusCode)
                {
71
                    return JsonSerializer.Deserialize<BllResult>(resultContent, jsonDeserializeOptions);
唐召明 authored
72
73
                }
                else
唐召明 authored
74
                {
唐召明 authored
75
76
77
78
79
                    if (string.IsNullOrEmpty(resultContent))
                    {
                        resultContent = result.ReasonPhrase;
                    }
                    return BllResultFactory.Error($"推送失败:{resultContent}");
唐召明 authored
80
                }
唐召明 authored
81
82
83
84
            }
            catch (Exception ex)
            {
                return BllResultFactory.Error(ex.Message);
唐召明 authored
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
        /// <summary>
        /// 推送某一时间段的数据
        /// </summary>
        /// <param name="equipmentDataQueues"></param>
        /// <returns></returns>
        public BllResult SendEquipmentDataV2(IEnumerable<EquipmentDataQueue> equipmentDataQueues)
        {
            try
            {
                var data = equipmentDataQueues.Select(x => new EquipmentDataV2Dto
                {
                    Plmeid = x.Id,
                    EquipmentSN = x.EquipmentCode,
                    Reported = JsonSerializer.Deserialize<List<TagItem>>(x.Reported),
                    Version = x.Version,
                    TimestampStart = x.SourceTimestamp,
                    TimestampEnd = (long)(x.SourceTimestamp + (x.Updated.Value - x.Created.Value).TotalMilliseconds),
                });
                var json = JsonSerializer.Serialize(data, jsonSerializeOptions);
                var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
                var result = _httpClient.PostAsync("Equipment/SendEquipmentDataV2", stringContent).Result;
                var resultContent = result.Content.ReadAsStringAsync().Result;
                if (result.IsSuccessStatusCode)
                {
                    return JsonSerializer.Deserialize<BllResult>(resultContent, jsonDeserializeOptions);
                }
                else
                {
                    if (string.IsNullOrEmpty(resultContent))
                    {
                        resultContent = result.ReasonPhrase;
                    }
                    return BllResultFactory.Error($"推送失败:{resultContent}");
                }
            }
            catch (Exception ex)
            {
                return BllResultFactory.Error(ex.Message);
            }
        }
129
130
131
132
133
134
135
136
137
138
        public BllResult UpdateClientStatus(Guid clientId)
        {
            try
            {
                var data = new
                {
                    ClientId = clientId,
                };
                var json = JsonSerializer.Serialize(data, jsonSerializeOptions);
                var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
139
                var result = _httpClient.PostAsync("Equipment/UpdateClientStatus", stringContent).Result;
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
                var resultContent = result.Content.ReadAsStringAsync().Result;
                if (result.IsSuccessStatusCode)
                {
                    return JsonSerializer.Deserialize<BllResult>(resultContent, jsonDeserializeOptions);
                }
                else
                {
                    if (string.IsNullOrEmpty(resultContent))
                    {
                        resultContent = result.ReasonPhrase;
                    }
                    return BllResultFactory.Error($"推送失败:{resultContent}");
                }
            }
            catch (Exception ex)
            {
                return BllResultFactory.Error(ex.Message);
            }
        }
唐召明 authored
159
160
    }
}