浏览代码

fix(解析订单数据):过滤发送0元订单和0时间的订单

Zhenghanjv 1 年之前
父节点
当前提交
eaf111c236

+ 8 - 2
sgs-middleware-v3/src/main/java/com/tokheim/sgs/v3/socket/handler/CloudInfoHandler.java

@@ -190,10 +190,16 @@ public class CloudInfoHandler {
                         return;
                     }
 
-                    //记录订单时间是否大于上一笔订单的时间,不是则为旧单或同一单,不上传
+                    //油机数据会发送0元订单,00000000 00:00:00挂枪时间的单,这种过滤掉
                     String orderTime = fuelMsg.get(DataConfig.OrderConfig.date) + " " + fuelMsg.get(DataConfig.OrderConfig.time);
-                    String perOrderTime = FuelMsgCardNoHandler.getPerOrderTime(stationIp, gunNo_);
                     Date orderTimeDate = DateTimeUtils.parse(orderTime);
+                    if ("0.00".equals(fuelMsg.get(DataConfig.OrderConfig.amount)) || (orderTimeDate != null && orderTimeDate.getTime() < 0)) {
+                        log.info("订单数据错误,金额:" + fuelMsg.get(DataConfig.OrderConfig.amount) + " 时间:" + orderTime);
+                        return;
+                    }
+
+                    //记录订单时间是否大于上一笔订单的时间,不是则为旧单或同一单,不上传
+                    String perOrderTime = FuelMsgCardNoHandler.getPerOrderTime(stationIp, gunNo_);
                     Date perOrderTimeDate = DateTimeUtils.parse(perOrderTime);
                     if (orderTimeDate != null && perOrderTimeDate != null) {
                         int intervalSeconds = DateTimeUtils.getIntervalSeconds(perOrderTimeDate,orderTimeDate);

+ 9 - 0
sgs-middleware-v3/src/test/java/com/tokheim/sgs/v3/HexUtilTest.java

@@ -1,11 +1,20 @@
 package com.tokheim.sgs.v3;
 
 import cn.hutool.core.util.HexUtil;
+import com.tokheim.sgs.v3.common.utils.DateTimeUtils;
+
+import java.util.Date;
 
 public class HexUtilTest {
     public static void main(String[] args) {
         String ipMsg = "31 30 2E 31 39 36 2E 31 39 32 2E 35 35 3A 34 39 35 31";
         String ip = HexUtil.decodeHexStr(ipMsg);
         System.out.println(ip);
+
+        Date date1 = DateTimeUtils.parse("19710000 00:00:00");
+        Date date2 = DateTimeUtils.parse("20240602 22:22:22");
+        System.out.println("错误时间:"+date1.getTime());
+        System.out.println("正常时间:"+date2.getTime());
+        System.out.println(DateTimeUtils.getIntervalSeconds(date1,date2));
     }
 }