瀏覽代碼

feat:1、处理MQTT连接异常;2、处理定量值小数点后数值被舍去的问题;3、前端静态图片引用错误,导致打包后静态图片不能正常访问;4、取消授权发送云端订单id;5、油机订单目前没有油品码过来,先写死为92#;6、核销增加发送泵码

Zhenghanjv 2 月之前
父節點
當前提交
f9fbf10edf

+ 3 - 1
Edge.Core/MqttClient/MqttClientService.cs

@@ -42,6 +42,8 @@ namespace Edge.Core.MqttClient
                 Domain.FccStationInfo.FccStationInfo? fccStationInfo = dbContext.FccStationInfos.FirstOrDefault();
                 string? mqttService = fccStationInfo?.MqttService;
                 buildId = fccStationInfo?.BuildId;
+                string clientId = buildId + "_" + Guid.NewGuid().ToString();
+                Logger.Info($"mqtt client id : {clientId}");
                 if (mqttService == null || buildId == null)
                 {
                     Logger.Info($"can not get mqttService:{mqttService} and buildId:{buildId}");
@@ -51,7 +53,7 @@ namespace Edge.Core.MqttClient
                 MqttClientOptions mqttClientOptions = new MqttClientOptionsBuilder()
                     .WithTcpServer(hostAndPort[0], hostAndPort[1].ToString().ToInt())
                     .WithCredentials(mqttConfiguration.user, mqttConfiguration.password)
-                    .WithClientId(buildId)
+                    .WithClientId(clientId)
                     .WithCleanSession()
                     .WithTlsOptions(new MqttClientTlsOptions()
                     {

+ 3 - 0
Edge.Core/Processor/Communicator/TcpServerCommunicator.cs

@@ -347,6 +347,9 @@ namespace Edge.Core.Processor.Communicator
                     //    this.logger.LogDebug("TCP to " + (this.exclusiveTcpClient_ClientRemoteEndPoint_Str) + " Outgoing--->: " + message.ToLogString() + "\r\n     0x" + rawData.ToHexLogString());
                     if(rawData.Length>8 && rawData[6] != 0x55 && rawData[7] != 0x10)
                         logger.Info("TCP to " + (this.exclusiveTcpClient_ClientRemoteEndPoint_Str) + " Outgoing--->: " + message.ToLogString() + "\r\n     0x" + rawData.ToHexLogString());
+                    //else
+                        //logger.Info($"发送心跳回复");
+
                     var sendCount = this.exclusiveTcpClient.Client.Send(rawData);
                     if (sendCount == 0)
                         throw new InvalidOperationException("the send count in this.exclusiveTcpClient.Client.Send is 0");

+ 15 - 8
Edge.Core/Processor/GenericDeviceProcessor.cs

@@ -44,6 +44,8 @@ namespace Edge.Core.Processor
         public IList<IInterceptor<TRaw, TMessage>> Interceptors { get; }
         public ICommunicator<TRaw, TMessage> Communicator { get; }
 
+        private static bool isStartMqtt = false;
+
         public GenericDeviceProcessor(IDeviceHandler<TRaw, TMessage> handler, ICommunicator<TRaw, TMessage> communicator, IServiceProvider services)
         {
             if (services != null)
@@ -152,16 +154,21 @@ namespace Edge.Core.Processor
             };
 
             //------------------------- MQTT ---------------------------------
-            MqttClientService mqttClientService = new MqttClientService(services.GetService<IConfiguration>());
-            mqttClientService.OnConnect += (s, a) => { };
-            mqttClientService.OnDisconnect += (s, a) => { };
-            mqttClientService.OnApplicationMessageReceived += (s, a) =>
+            if (!isStartMqtt)
             {
-                var message = Encoding.UTF8.GetString(a.ApplicationMessage.Payload);
-                handler.OnReceiveMqttMessage(a.ApplicationMessage.Topic, message);
-            };
+                MqttClientService mqttClientService = new MqttClientService(services.GetService<IConfiguration>());
+                mqttClientService.OnConnect += (s, a) => { };
+                mqttClientService.OnDisconnect += (s, a) => { };
+                mqttClientService.OnApplicationMessageReceived += (s, a) =>
+                {
+                    var message = Encoding.UTF8.GetString(a.ApplicationMessage.Payload);
+                    handler.OnReceiveMqttMessage(a.ApplicationMessage.Topic, message);
+                };
+
+                mqttClientService.Start();
+                isStartMqtt = true;
+            }
             
-            mqttClientService.Start();
         }
 
         //public void Dispose()

+ 125 - 98
HengshanPaymentTerminal/HengshanPayTermHandler.cs

@@ -464,6 +464,7 @@ namespace HengshanPaymentTerminal
                 {
                     Task.Run(() => SendUnAuthorizationTimerAsync());
                 };
+                timer.Start();
             }
             
         }
@@ -472,7 +473,6 @@ namespace HengshanPaymentTerminal
 
         public async Task Process(IContext<byte[], CommonMessage> context)
         {
-            logger.Info($"获取到信息:{JsonConvert.SerializeObject(context.Incoming.Message)}");
             switch (context.Incoming.Message.Handle)
             {
                 //心跳,带油枪状态信息
@@ -487,7 +487,6 @@ namespace HengshanPaymentTerminal
                 case 0x18:
                     {
                         //添加或修改数据库订单
-                        logger.Info($"订单信息");
                         OrderFromMachine orderFromMachine = (OrderFromMachine)context.Incoming.Message;
                         if(nozzlePumpCode.TryGetValue(orderFromMachine.nozzleNum, out string pumpCodeAndTTC))
                         {
@@ -778,33 +777,41 @@ namespace HengshanPaymentTerminal
         /// <param name="message"></param>
         public async void OnReceiveMqttMessage(string topic,string message)
         {
-            logger.Info($"getMqtt topic:{topic},and message is {message}");
-            MqttRequest? mqttRequest = JsonConvert.DeserializeObject<MqttRequest>(message);
-            if (mqttRequest == null)
+            try
             {
-                logger.Error($"mqtt message turn on object fail,message:{message}");
-                return;
-            }
-            if ($"authorization/{buildID}".Equals(topic))
-            {
-                MqttAuthorizationRequest? mqttAuthorizationRequest = JsonConvert.DeserializeObject<MqttAuthorizationRequest>(mqttRequest.data);
-                await SendAuthorizationAsync(mqttAuthorizationRequest, mqttRequest.UserName, mqttRequest.UserPhoneNumber);
-            }
-            if($"unAuthorization/{buildID}".Equals(topic))
-            {
-                MqttUnAhorizationRequest? mqttUnAhorizationRequest = JsonConvert.DeserializeObject<MqttUnAhorizationRequest>(mqttRequest.data);
-                await SendUnAuthorizartion(mqttUnAhorizationRequest);
-            }
-            if ($"paid/{buildID}".Equals (topic))
-            {
-                MqttPaidRequest? mqttPaidRequest = JsonConvert.DeserializeObject<MqttPaidRequest>(mqttRequest.data);
-                await SendActuallyPaid(mqttPaidRequest, mqttRequest.UserName, mqttRequest.UserPhoneNumber);
+                logger.Info($"getMqtt topic:{topic},and message is {message}");
+                MqttRequest? mqttRequest = JsonConvert.DeserializeObject<MqttRequest>(message);
+                if (mqttRequest == null)
+                {
+                    logger.Error($"mqtt message turn on object fail,message:{message}");
+                    return;
+                }
+                if ($"authorization/{buildID}".Equals(topic))
+                {
+                    MqttAuthorizationRequest? mqttAuthorizationRequest = JsonConvert.DeserializeObject<MqttAuthorizationRequest>(mqttRequest.data);
+                    await SendAuthorizationAsync(mqttAuthorizationRequest, mqttRequest.UserName, mqttRequest.UserPhoneNumber);
+                }
+                if ($"unAuthorization/{buildID}".Equals(topic))
+                {
+                    MqttUnAhorizationRequest? mqttUnAhorizationRequest = JsonConvert.DeserializeObject<MqttUnAhorizationRequest>(mqttRequest.data);
+                    await SendUnAuthorizartion(mqttUnAhorizationRequest);
+                }
+                if ($"paid/{buildID}".Equals(topic))
+                {
+                    MqttPaidRequest? mqttPaidRequest = JsonConvert.DeserializeObject<MqttPaidRequest>(mqttRequest.data);
+                    await SendActuallyPaid(mqttPaidRequest, mqttRequest.UserName, mqttRequest.UserPhoneNumber);
+                }
+                if ($"refund/{buildID}".Equals(topic))
+                {
+                    MqttRefundRequest? mqttRefundRequest = JsonConvert.DeserializeObject<MqttRefundRequest>(mqttRequest.data);
+                    await OnRecieveOrderRefund(mqttRefundRequest);
+                }
             }
-            if ($"refund/{buildID}".Equals(topic))
+            catch (Exception ex)
             {
-                MqttRefundRequest? mqttRefundRequest = JsonConvert.DeserializeObject<MqttRefundRequest>(mqttRequest.data);
-                await OnRecieveOrderRefund(mqttRefundRequest);
+                logger.Error($"mqtt have error:{JsonConvert.SerializeObject(ex)}");
             }
+            
             //switch (mqttRequest.type)
             //{
             //    case MQTT_TYPE.AUTHORIZATION:
@@ -919,18 +926,7 @@ namespace HengshanPaymentTerminal
             logger.Info($"send actuallyPaid result response:{JsonConvert.SerializeObject(httpResponseMessage.Content.ReadAsStringAsync())}");
 
             FccOrderInfo? fccOrderInfo = mysqlDbContext.FccOrderInfos.FirstOrDefault(order => order.CloundOrderId == request.Id);
-            if (fccOrderInfo == null)
-            {
-                //未找到证明为预支付,这里插入订单
-                logger.Info($"[mqtt paid order notice]:can not find order by clounid:{request.Id},is perpay");
-                string paymentName = "未知类型";
-                if (request.PaymentMethod != null)
-                {
-                    paymentName = stationPayment[request.PaymentMethod ?? 0] ?? "未知类型";
-                }
-                fccOrderInfo = request.ToComponent(userName,phoneNumber, paymentName);
-                mysqlDbContext.Add(fccOrderInfo);
-            } else
+            if (fccOrderInfo != null)
             {
                 logger.Info($"[mqtt paid order notice]:find order,update order right now");
                 //后支付,这里更新支付信息
@@ -945,22 +941,23 @@ namespace HengshanPaymentTerminal
                 fccOrderInfo.UserName = userName ?? "";
                 fccOrderInfo.PhoneNumber = phoneNumber ?? string.Empty;
                 fccOrderInfo.PaymentStatus = 1;
-            }
-            
 
-            mysqlDbContext.SaveChanges();
+                mysqlDbContext.SaveChanges();
 
-            SendActuallyPaid sendActuallyPaid = new SendActuallyPaid(fccOrderInfo.NozzleNum, fccOrderInfo.Ttc, fccOrderInfo.AmountPayable ?? fccOrderInfo.Amount, getFrame(null));
-            byte[] commandAndNozzle = { sendActuallyPaid.Handle, (byte)sendActuallyPaid.NozzleNum };
-            await SendMessageToMaichine("发送实付金额", (request, response) =>
-            {
-                if (response.Handle == (byte)CommonMessage.Command.SEND_NEED_AMOUNT)
+
+                SendActuallyPaid sendActuallyPaid = new SendActuallyPaid(fccOrderInfo.NozzleNum, fccOrderInfo.Ttc, fccOrderInfo.AmountPayable ?? fccOrderInfo.Amount, getFrame(null));
+                byte[] commandAndNozzle = { sendActuallyPaid.Handle, (byte)sendActuallyPaid.NozzleNum };
+                await SendMessageToMaichine("发送实付金额", (request, response) =>
                 {
-                    CommonAnswerBack commonAnswerBack = (CommonAnswerBack)response;
-                    return commonAnswerBack.Command == (byte)CommonMessage.Command.SEND_NEED_AMOUNT && commonAnswerBack.NozzleNum == sendActuallyPaid.NozzleNum;
-                }
-                return false;
-            }, sendActuallyPaid);
+                    if (response.Handle == (byte)CommonMessage.Command.SEND_NEED_AMOUNT)
+                    {
+                        CommonAnswerBack commonAnswerBack = (CommonAnswerBack)response;
+                        return commonAnswerBack.Command == (byte)CommonMessage.Command.SEND_NEED_AMOUNT && commonAnswerBack.NozzleNum == sendActuallyPaid.NozzleNum;
+                    }
+                    return false;
+                }, sendActuallyPaid);
+            }
+            
         }
 
         /// <summary>
@@ -978,14 +975,20 @@ namespace HengshanPaymentTerminal
             }
 
             //添加订单到数据库
+            logger.Info($"[mqtt authorization order notice]:insert order");
             DateTime authorizationTime = request.AuthorizationTime ?? DateTime.Now;
-            FccOrderInfo? fccOrderInfo = await mysqlDbContext.FccOrderInfos.FirstOrDefaultAsync(order => order.CloundOrderId == request.Id);
-            if(fccOrderInfo == null)
+            string paymentName = "未知类型";
+            if (request.PaymentMethod != null)
             {
-                logger.Error($"authorization find order by clound id:{request.Id} is null");
-                return;
+                paymentName = stationPayment[request.PaymentMethod ?? 0] ?? "未知类型";
             }
-            fccOrderInfo.AuthorizationTime = authorizationTime;
+            FccOrderInfo fccOrderInfo = request.ToComponent(authorizationTime, paymentName,userName, phoneNumber);
+            //if(fccOrderInfo == null)
+            //{
+            //    logger.Error($"authorization find order by clound id:{request.Id} is null");
+            //    return;
+            //}
+            //fccOrderInfo.AuthorizationTime = authorizationTime;
 
             //发送授权申请到油机
             SendAuthorization sendAuthorization = new SendAuthorization((int)request.NozzleId, authorizationTime, 1, request.OriginalAmount, getFrame(null));
@@ -1047,6 +1050,7 @@ namespace HengshanPaymentTerminal
             logger.Info($"send authorization result response:{JsonConvert.SerializeObject(httpResponseMessage.Content.ReadAsStringAsync())}");
 
             //更新订单
+            mysqlDbContext.FccOrderInfos.Add(fccOrderInfo);
             mysqlDbContext.SaveChanges();
         }
 
@@ -1078,6 +1082,7 @@ namespace HengshanPaymentTerminal
             SendUnAuthorizationResult sendUnAuthorizationResult = new SendUnAuthorizationResult();
             sendUnAuthorizationResult.NozzleId = request.NozzleId;
             sendUnAuthorizationResult.OilMachineStatus = OilMachineStatus.Success;
+            sendUnAuthorizationResult.TransactionID = request.Id;
 
             if (ttc != 0 && !isUnauthorization)
             {
@@ -1283,8 +1288,7 @@ namespace HengshanPaymentTerminal
         private async Task SendUnAuthorizationTimerAsync()
         {
             MysqlDbContext mysqlDbContext = new MysqlDbContext();
-            DateTime timeOut = DateTime.Now.AddMonths(stationInfo.CheckOrderInterval);
-            FccOrderInfo? fccOrderInfo = await mysqlDbContext.FccOrderInfos.FirstOrDefaultAsync(order => order.AuthorizationStatus == 1 && order.AuthorizationTime < timeOut);
+            FccOrderInfo? fccOrderInfo = await mysqlDbContext.FccOrderInfos.FirstOrDefaultAsync(order => order.AuthorizationStatus == 1 && order.AuthorizationTime.AddMinutes(stationInfo.CheckOrderInterval) < DateTime.Now);
 
             if (fccOrderInfo == null)
             {
@@ -1293,6 +1297,7 @@ namespace HengshanPaymentTerminal
             }
             SendUnAuthorizationResult sendUnAuthorizationResult = new SendUnAuthorizationResult();
             sendUnAuthorizationResult.NozzleId = fccOrderInfo.NozzleNum;
+            sendUnAuthorizationResult.TransactionID = fccOrderInfo.CloundOrderId;
             sendUnAuthorizationResult.OilMachineStatus = OilMachineStatus.Success;
 
             SendUnAuthorization sendUnAuthorization = new SendUnAuthorization(fccOrderInfo.NozzleNum, fccOrderInfo.AuthorizationTime, fccOrderInfo.Ttc, getFrame(null));
@@ -1386,61 +1391,83 @@ namespace HengshanPaymentTerminal
 
         private async void CreateOrRedeemTransaction(FccOrderInfo fccOrderInfo)
         {
-            MysqlDbContext mysqlDbContext = new MysqlDbContext();
-            if (fccOrderInfo.CloundOrderId == null)
+            try
             {
-                CreateTransaction createTransaction = new CreateTransaction(fccOrderInfo);
-                logger.Info($"create transaction, {JsonConvert.SerializeObject(createTransaction)}");
-                HttpResponseMessage httpResponseMessage = await httpClientUtil.CreateTransaction(JsonConvert.SerializeObject(createTransaction));
+                MysqlDbContext mysqlDbContext = new MysqlDbContext();
+                if (fccOrderInfo.CloundOrderId == null)
+                {
+                    CreateTransaction createTransaction = new CreateTransaction(fccOrderInfo);
+                    logger.Info($"create transaction, {JsonConvert.SerializeObject(createTransaction)}");
+                    HttpResponseMessage httpResponseMessage = await httpClientUtil.CreateTransaction(JsonConvert.SerializeObject(createTransaction));
 
-                string responseStr = await httpResponseMessage.Content.ReadAsStringAsync();
-                Response<CreateTransactionResponse>? response = JsonConvert.DeserializeObject<Response<CreateTransactionResponse>>(responseStr);
-                logger.Info($"reveice create transaction response:{JsonConvert.SerializeObject(response)}");
+                    string responseStr = await httpResponseMessage.Content.ReadAsStringAsync();
+                    Response<CreateTransactionResponse>? response = JsonConvert.DeserializeObject<Response<CreateTransactionResponse>>(responseStr);
+                    logger.Info($"reveice create transaction response:{JsonConvert.SerializeObject(response)}");
 
-                fccOrderInfo.CloundOrderId = response?.data?.Id;
-                fccOrderInfo.UploadState = response?.data == null ? 0 : 1;
-                mysqlDbContext.SaveChanges();
-            } else
-            {
-                //MysqlDbContext mysqlDbContext = new MysqlDbContext();
-                if(fccOrderInfo.Amount == 0 && fccOrderInfo.Volume == 0)
-                {
-                    //0交易订单,证明为取消授权后产生的订单,不走核销,而是在小程序上显示为授权失败,让其重新发起授权或退款
-                    logger.Info("0交易,取消授权");
-                    fccOrderInfo.AuthorizationStatus = 0; //存在油机手动取消授权的情况,因此这里也要更新授权状态
-                    mysqlDbContext.SaveChanges();
-
-                    SendUnAuthorizationResult sendUnAuthorizationResult = new SendUnAuthorizationResult();
-                    sendUnAuthorizationResult.NozzleId = fccOrderInfo.NozzleNum;
-                    sendUnAuthorizationResult.TransactionNumber = fccOrderInfo.Ttc.ToString();
-                    sendUnAuthorizationResult.OilMachineStatus = OilMachineStatus.Success;
-                    HttpResponseMessage httpResponseMessage = await httpClientUtil.SendUnAuthorizationResult(JsonConvert.SerializeObject(sendUnAuthorizationResult));
-                    logger.Info($"手动取消授权:send Unauthorization result response:{JsonConvert.SerializeObject(httpResponseMessage.Content.ReadAsStringAsync())}");
+                    FccOrderInfo? order = await mysqlDbContext.FccOrderInfos.FirstOrDefaultAsync(order => order.Id == fccOrderInfo.Id);
+                    if (order != null)
+                    {
+                        order.CloundOrderId = response?.data?.Id;
+                        order.UploadState = response?.data == null ? 0 : 1;
+                        int v = await mysqlDbContext.SaveChangesAsync();
+                        logger.Info($"修改行数{v}");
+                    }
                 }
                 else
                 {
-                    //核销
-                    Redeem redeem = new Redeem();
-                    redeem.trxId = (int)fccOrderInfo.CloundOrderId;
-                    redeem.OriginalQty = fccOrderInfo.Volume;
+                    //MysqlDbContext mysqlDbContext = new MysqlDbContext();
+                    if (fccOrderInfo.Amount == 0 && fccOrderInfo.Volume == 0)
+                    {
+                        //0交易订单,证明为取消授权后产生的订单,不走核销,而是在小程序上显示为授权失败,让其重新发起授权或退款
+                        logger.Info("0交易,取消授权");
+                        FccOrderInfo? order = await mysqlDbContext.FccOrderInfos.FirstOrDefaultAsync(order => order.Id == fccOrderInfo.Id);
+                        if (order != null)
+                        {
+                            order.AuthorizationStatus = 0; //存在油机手动取消授权的情况,因此这里也要更新授权状态
+                            int v = await mysqlDbContext.SaveChangesAsync();
+                            logger.Info($"修改行数{v}");
+                        }
+                        
 
-                    string param = JsonConvert.SerializeObject(redeem);
+                        SendUnAuthorizationResult sendUnAuthorizationResult = new SendUnAuthorizationResult();
+                        sendUnAuthorizationResult.NozzleId = fccOrderInfo.NozzleNum;
+                        sendUnAuthorizationResult.TransactionID = fccOrderInfo.CloundOrderId;
+                        sendUnAuthorizationResult.TransactionNumber = fccOrderInfo.Ttc.ToString();
+                        sendUnAuthorizationResult.OilMachineStatus = OilMachineStatus.Success;
+                        logger.Info($"0交易,取消授权:{JsonConvert.SerializeObject(sendUnAuthorizationResult)}");
+                        HttpResponseMessage httpResponseMessage = await httpClientUtil.SendUnAuthorizationResult(JsonConvert.SerializeObject(sendUnAuthorizationResult));
+                        logger.Info($"手动取消授权:send Unauthorization result response:{JsonConvert.SerializeObject(httpResponseMessage.Content.ReadAsStringAsync())}");
+                    }
+                    else
+                    {
+                        //核销
+                        Redeem redeem = new Redeem();
+                        redeem.trxId = (int)fccOrderInfo.CloundOrderId;
+                        redeem.OriginalQty = fccOrderInfo.Volume;
+                        redeem.FuelItemPumpTotalizerVolume = fccOrderInfo.PumpCode ?? 0m;
 
-                    logger.Info($"Redeem order:{param}");
-                    HttpResponseMessage httpResponseMessage = await httpClientUtil.Redeem(param);
+                        string param = JsonConvert.SerializeObject(redeem);
 
-                    string responseStr = await httpResponseMessage.Content.ReadAsStringAsync();
-                    Response<CreateTransactionResponse>? response = JsonConvert.DeserializeObject<Response<CreateTransactionResponse>>(responseStr);
-                    logger.Info($"Redeem order response:{JsonConvert.SerializeObject(response)}");
+                        logger.Info($"Redeem order:{param}");
+                        HttpResponseMessage httpResponseMessage = await httpClientUtil.Redeem(param);
+
+                        string responseStr = await httpResponseMessage.Content.ReadAsStringAsync();
+                        Response<CreateTransactionResponse>? response = JsonConvert.DeserializeObject<Response<CreateTransactionResponse>>(responseStr);
+                        logger.Info($"Redeem order response:{JsonConvert.SerializeObject(response)}");
+
+                        //fccOrderInfo.CloundOrderId = response?.data?.Id;
+                        //fccOrderInfo.UploadState = response?.data == null ? 0 : 1;
+                        //mysqlDbContext.SaveChanges();
+                    }
 
-                    //fccOrderInfo.CloundOrderId = response?.data?.Id;
-                    //fccOrderInfo.UploadState = response?.data == null ? 0 : 1;
                     //mysqlDbContext.SaveChanges();
                 }
-                
-                //mysqlDbContext.SaveChanges();
+            } catch(Exception ex)
+            {
+                logger.Error($"出错:{JsonConvert.SerializeObject(ex)}");
             }
             
+            
         }
 
         /// <summary>

+ 13 - 1
HengshanPaymentTerminal/Http/Request/HttpRequest.cs

@@ -408,7 +408,8 @@ namespace HengshanPaymentTerminal.Http.Request
             this.Qty = fccOrderInfo.Volume;
             this.FuelItemTransactionEndTime = fccOrderInfo.EndTime ?? DateTime.Now;
             this.TransactionTime = fccOrderInfo.PaymentTime;
-            this.Product = fccOrderInfo.OilName;
+            //this.Product = fccOrderInfo.OilName;
+            this.Product = "92#";
             this.Price = fccOrderInfo.Price;
             this.TransactionNumber = fccOrderInfo.Ttc.ToString();
             this.MiniProgramID = null;
@@ -482,6 +483,12 @@ namespace HengshanPaymentTerminal.Http.Request
         public int trxId { get; set; }
 
         public decimal OriginalQty {  get; set; }
+
+        /// <summary>
+        /// 泵码
+        /// </summary>
+        public decimal FuelItemPumpTotalizerVolume { get; set; }
+
     }
     /// <summary>
     /// 发送云端油枪状态数据对象
@@ -544,6 +551,11 @@ namespace HengshanPaymentTerminal.Http.Request
         /// 结果 1:FCC 与油机断开连接;2:FCC 发送信息到油机,但超时未回复;3:取消授权失败;4:取消授权成功;5:未找到流水号
         /// </summary>
         public OilMachineStatus OilMachineStatus { get; set; }
+
+        /// <summary>
+        /// 云端订单id
+        /// </summary>
+        public long? TransactionID { get; set; }
     }
 
     public enum OilMachineStatus

+ 20 - 17
HengshanPaymentTerminal/Http/Response/Response.cs

@@ -2,6 +2,8 @@
 using System;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations.Schema;
+using System.Data.SqlTypes;
+using System.Data;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -70,8 +72,8 @@ namespace HengshanPaymentTerminal.Http.Response
     public class CreateTransactionResponse
     {
         /// <summary>
-        /// 订单唯一标识符
-        /// </summary>
+		/// 订单唯一标识符
+		/// </summary>
         public long Id { get; set; }
 
         /// <summary>
@@ -82,7 +84,7 @@ namespace HengshanPaymentTerminal.Http.Response
         /// <summary>
         /// 用户ID
         /// </summary>
-        public long MiniProgramID { get; set; }
+        public long? MiniProgramID { get; set; }
 
         /// <summary>
         /// 枪号
@@ -101,17 +103,12 @@ namespace HengshanPaymentTerminal.Http.Response
 
         /// <summary>
         /// 授权时间
-        /// </summary>
+        /// </summary
         public DateTime? AuthorizationTime { get; set; }
 
-        /// <summary>
-        /// 创建人
-        /// </summary>
         public string CreateBy { get; set; }
 
-        /// <summary>
-        /// 订单创建时间
-        /// </summary>
+        
         public DateTime? CreateTime { get; set; }
 
         /// <summary>
@@ -152,8 +149,7 @@ namespace HengshanPaymentTerminal.Http.Response
         /// <summary>
         /// 原升数
         /// </summary>
-        public decimal Qty { get; set; }
-
+        public decimal? Qty { get; set; }
         /// <summary>
         /// 实际加油升数
         /// </summary>
@@ -178,31 +174,38 @@ namespace HengshanPaymentTerminal.Http.Response
         /// 加密字符串,用于验证金额是否篡改
         /// </summary>
         public string secret { get; set; }
-
         /// <summary>
         /// 支付返回结果
         /// </summary>
         public string RawResult { get; set; }
-
         /// <summary>
         /// 错误信息
         /// </summary>
         public string ErrorDetail { get; set; }
-
         /// <summary>
         /// 支付结果代码
         /// </summary>
         public string ResultCode { get; set; }
-
         /// <summary>
         /// 是否授权
         /// </summary>
         public AuthorizationStatus authorizationStatus { get; set; }
-
         /// <summary>
         /// 单价
         /// </summary>
         public decimal? Price { get; set; }
+        /// <summary>
+        /// 订单编号
+        /// </summary>
+        public string BillNumber { get; set; }
+        /// <summary>
+        /// 退款状态
+        /// </summary>
+        public RefundStatus RefundStatus { get; set; }
+        /// <summary>
+        /// 泵码
+        /// </summary>
+        public decimal? FuelItemPumpTotalizerVolume { get; set; }
 
     }
 

+ 2 - 2
HengshanPaymentTerminal/MessageEntity/Outgoing/SendAuthorization.cs

@@ -49,8 +49,8 @@ namespace HengshanPaymentTerminal.MessageEntity.Outgoing
             byte[] commandAndNozzle = { this.Handle, (byte)this.NozzleNum };
             byte[] authorizationTimeBytes = ConvertDateTimeToByteArray(this.AuthorizationTime);
             //将小数点后移两位,因为油机只支持两位小数点,这边传过去的3位字节转为int后取后两位为十分位和百分位
-            int value = (int)this.Value * 100;
-            byte[] valueBytes = NumberToByteArrayWithPadding(value, 3);
+            //int value = (int)this.Value * 100;
+            byte[] valueBytes = FormatDecimal(this.Value);
             list.AddRange(commandAndNozzle);
             list.AddRange(authorizationTimeBytes);
             list.Add((byte)this.AuthorizationType);

+ 6 - 6
HengshanPaymentTerminal/MessageEntity/Outgoing/SendRefund.cs

@@ -59,16 +59,16 @@ namespace HengshanPaymentTerminal.MessageEntity.Outgoing
             byte[] ttcBytes = NumberToByteArrayWithPadding(this.TTC, 4);
 
             //加油金额
-            int amount = (int)(this.Amount * 100);
-            byte[] amountBytes = NumberToByteArrayWithPadding(amount, 3);
+            //int amount = (int)(this.Amount * 100);
+            byte[] amountBytes = FormatDecimal(this.Amount);
 
             //实付金额
-            int amountPayable = (int)(this.AmountPayable * 100);
-            byte[] amountPayableBytes = NumberToByteArrayWithPadding(amountPayable, 3);
+            //int amountPayable = (int)(this.AmountPayable * 100);
+            byte[] amountPayableBytes = FormatDecimal(this.AmountPayable);
 
             //退款金额
-            int refund = (int)(this.Refund * 100);
-            byte[] refundBytes = NumberToByteArrayWithPadding(refund, 3);
+            //int refund = (int)(this.Refund * 100);
+            byte[] refundBytes = FormatDecimal(this.Refund);
 
 
             list.AddRange(commandAndNozzle);

+ 14 - 10
HengshanPaymentTerminal/Mqtt/Request/MqttRequest.cs

@@ -203,24 +203,28 @@ namespace HengshanPaymentTerminal.Mqtt.Request
         {
             string userNameStr = userName ?? "";
             string phoneStr = phoneNumber ?? string.Empty;
+            int? paymentType = null;
+            if(this.PaymentMethod != null) paymentType = (int?)this.PaymentMethod;
             return new FccOrderInfo()
             {
                 AuthorizationTime = authorizationTime,
-                PaymentTime = TransactionTime,
-                NozzleNum = (int)NozzleId,
-                OilName = ProductName,
-                PaymentStatus = 1,
-                PayType = (int?)PaymentMethod,
-                CloundOrderId = Id,
-                Amount = OriginalAmount,
-                Volume = Qty,
-                AmountPayable = ActualPaymentAmount,
+                PaymentTime = this.TransactionTime,
+                NozzleNum = (int)this.NozzleId,
+                OilName = this.ProductName,
+                PaymentStatus = (int) this.OrderStatus,
+                PayType = paymentType,
+                CloundOrderId = this.Id,
+                Amount = this.OriginalAmount,
+                Volume = this.Qty,
+                AmountPayable = this.ActualPaymentAmount,
                 UploadState = 1,
                 IsDelete = 0,
                 Price = this.Price,
                 PaymentName = paymentName,
                 UserName = userNameStr,
-                PhoneNumber = phoneStr
+                PhoneNumber = phoneStr,
+                RefundStatus = 0,
+                VolumePayable = this.Qty,
 
             };
         }

+ 6 - 3
src/FccWeb/admin.ui.plus-master/src/views/admin/components/oilcanDetail.vue

@@ -144,14 +144,17 @@ const DeviceDialog = defineAsyncComponent(() => import('/@/views/admin/component
 const MachineDialog = defineAsyncComponent(() => import('/@/views/admin/components/editMachine.vue'))
 import { Loading, Switch } from '@element-plus/icons-vue'; // 引入加载图标
 import { watch } from 'fs';
+import machineImg from '/@/assets/machine.png'
+import tankImg from '/@/assets/tank.png'
+import nozzleImg from '/@/assets/nozzle.png'
 const editDialogRef = ref()
 const editNozzleFromMachineDialogRef = ref()
 const DeviceDialogRef = ref()
 const MachineDialogRef = ref()
 
-const machineImgUrl = ref('/src/assets/machine.png')
-const tankImgUrl = ref('/src/assets/tank.png')
-const nozzleImgUrl = ref('/src/assets/nozzle.png')
+const machineImgUrl = ref(machineImg)
+const tankImgUrl = ref(tankImg)
+const nozzleImgUrl = ref(nozzleImg)
 const displayData = reactive({
     isShowDialog: false,
     isShowTank:true,