浏览代码

feat(HengshanPaymentTerminal):发送油枪状态到云端

Zhenghanjv 5 月之前
父节点
当前提交
59df35ed0c

+ 39 - 0
HengshanPaymentTerminal/HengshanPayTermHandler.cs

@@ -85,6 +85,9 @@ namespace HengshanPaymentTerminal
         private object lockFrame = new object();
 
         private readonly IHttpClientUtil httpClientUtil;
+
+        //记录油枪状态,key-枪号,value:是否忙碌
+        private ConcurrentDictionary<int, bool> nozzleStatusDic = new ConcurrentDictionary<int, bool>(); 
         #endregion
 
         #region Logger
@@ -436,6 +439,25 @@ namespace HengshanPaymentTerminal
             
             switch(context.Incoming.Message.Handle)
             {
+                //心跳,带油枪状态信息
+                case 10:
+                    {
+                        //将油枪状态区分为空闲或非空闲,记录在内存。当状态有发生变化,发送到云端
+                        HeartBeatMessage heartBeatMessage = (HeartBeatMessage)context.Incoming.Message;
+                        foreach(var nozzleState in heartBeatMessage.NozzleStatus)
+                        {
+                            bool isBusy = nozzleState.STATU != 0x03;
+                            if(nozzleStatusDic.TryGetValue(nozzleState.NozzleNum, out var value))
+                            {
+                                if(isBusy == value) return;
+                                SendNozzleStatus(nozzleState,isBusy);
+                            } else
+                            {
+                                SendNozzleStatus(nozzleState,isBusy);
+                            }
+                        }
+                        break;
+                    }
                 //订单
                 case 0x18:
                     {
@@ -891,6 +913,23 @@ namespace HengshanPaymentTerminal
             }
         }
 
+        /// <summary>
+        /// 发送油枪状态给云端
+        /// </summary>
+        /// <param name="nozzleState"></param>
+        private async void SendNozzleStatus(HeartBeatNozzleState nozzleState,bool isBusy)
+        {
+            //保存变量
+            nozzleStatusDic[nozzleState.NozzleNum] = isBusy;
+
+            //发送云端
+            SendNozzleStatu sendNozzleStatu = new SendNozzleStatu(nozzleState);
+            logger.Info($"send nozzle state to cloud,{sendNozzleStatu.NozzleId}-{sendNozzleStatu.Status}");
+            HttpResponseMessage httpResponseMessage = await httpClientUtil.SendNozzleStatu(JsonConvert.SerializeObject(sendNozzleStatu));
+            Response<object>? response = JsonConvert.DeserializeObject<Response<object>>(await httpResponseMessage.Content.ReadAsStringAsync());
+            logger.Info($"reveice send nozzle state response:{JsonConvert.SerializeObject(response)}");
+        }
+
         /// <summary>
         /// 传入有效数据,拼接为要发送给油机包
         /// </summary>

+ 6 - 0
HengshanPaymentTerminal/Http/HttpClientUtils.cs

@@ -41,5 +41,11 @@ namespace HengshanPaymentTerminal.Http
             var requesStr = new StringContent(requestJson, Encoding.UTF8, "application/json");
             return await _httpClientService.PostAsync("api/nozzle/uploadNozzle", requesStr);
         }
+
+        public async Task<HttpResponseMessage> SendNozzleStatu(string requestJson)
+        {
+            var requesStr = new StringContent(requestJson, Encoding.UTF8, "application/json");
+            return await _httpClientService.PostAsync("api/nozzle/updateNozzleStatus", requesStr);
+        }
     }
 }

+ 7 - 0
HengshanPaymentTerminal/Http/IHttpClientUtil.cs

@@ -21,5 +21,12 @@ namespace HengshanPaymentTerminal.Http
         /// <param name="requestJson"></param>
         /// <returns></returns>
         Task<HttpResponseMessage> CreateTransaction(string requestJson); //{ return null; }
+
+        /// <summary>
+        /// 发送油枪状态到云端
+        /// </summary>
+        /// <param name="requestJson"></param>
+        /// <returns></returns>
+        Task<HttpResponseMessage> SendNozzleStatu(string requestJson);
     }
 }

+ 22 - 0
HengshanPaymentTerminal/Http/Request/HttpRequest.cs

@@ -1,4 +1,5 @@
 using Edge.Core.Domain.FccOrderInfo;
+using HengshanPaymentTerminal.MessageEntity.Incoming;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -132,4 +133,25 @@ namespace HengshanPaymentTerminal.Http.Request
         /// </summary>
         public string? userid { get; set; }
     }
+
+    /// <summary>
+    /// 发送云端油枪状态数据对象
+    /// </summary>
+    public class SendNozzleStatu : HttpRequest
+    {
+        public SendNozzleStatu(HeartBeatNozzleState heartBeatNozzleState) 
+        {
+            this.NozzleId = heartBeatNozzleState.NozzleNum;
+            this.Status = heartBeatNozzleState.STATU == 0x03 ? 1 : 2;
+        }
+        /// <summary>
+        /// 油枪号
+        /// </summary>
+        public int NozzleId { get; set; }
+
+        /// <summary>
+        /// 状态:1:空闲;2:非空闲
+        /// </summary>
+        public int Status { get; set; }
+    }
 }