Browse Source

fix(数据处理):规避油机错误订单信息

zheng 1 year ago
parent
commit
fe9fe6c007

+ 14 - 0
sgs-middleware-v3/src/main/java/com/tokheim/sgs/v3/socket/convert/FuelMsgCardNoHandler.java

@@ -23,6 +23,12 @@ public class FuelMsgCardNoHandler {
     public static Map<String, String> respMap = new HashMap<>();
 
     private static TwoKeyMap<String,String,String> perOrderTime = new TwoKeyMap<>(); //记录上一笔订单的时间,用于过滤重复发送的订单信息
+    /**油机会偶发以下现象
+     * 实时加油信息携带了正确的卡号,而订单信息会先发一条错误卡号的信息,后续的重发信息中又带上了正确的卡号
+     * 所以记录一下实时加油信息的卡号,在收到订单信息时做对比,如与实时加油信息的卡号一致,则发到第三方;
+     * 若不一致,便不发,等重发的订单信息
+     */
+    private static TwoKeyMap<String,String,String> cacheCardNums = new TwoKeyMap<>();//记录卡号信息
 
     public static void setPerOrderTime(String ip,String fuelPoint,String time) {
         perOrderTime.set(ip, fuelPoint, time);
@@ -32,6 +38,14 @@ public class FuelMsgCardNoHandler {
         return perOrderTime.get(ip, fuelPoint);
     }
 
+    public static void setCacheCardNums(String ip,String fuelPoint,String cardNum) {
+        cacheCardNums.set(ip, fuelPoint, cardNum);
+    }
+
+    public static String getCacheCardNums(String ip,String fuelPoint){
+        return cacheCardNums.get(ip, fuelPoint);
+    }
+
     public static Map<String, String> getFuelMsg(String msg, String oilHeaderPackageCard) {
         try {
             //msg = msg.substring(msg.indexOf(oilHeaderPackage));

+ 9 - 0
sgs-middleware-v3/src/main/java/com/tokheim/sgs/v3/socket/handler/CloudInfoHandler.java

@@ -98,6 +98,8 @@ public class CloudInfoHandler {
 //                String pump = ServerHandler.pumpMap.get(stationIp, gunNo_);
                 String pump = ServerHandler.pumpMap.get(stationIp, gunNo_,activeNozzle.get(gunNo_));
 
+                //记录卡号,用于收到订单信息时判断
+                FuelMsgCardNoHandler.setCacheCardNums(stationIp,gunNo_,realTimeMsg.get(DataConfig.RealTimeConfig.cardNo));
                 if (pump == null) {
                     orderNo = SeqKit.genPayOrderId();
                     ServerHandler.orderNoMap.set(stationIp, gunNo_, orderNo);
@@ -180,6 +182,13 @@ public class CloudInfoHandler {
                     String stationIp = getStationIp(msg, oilHeaderPackageCard);
                     String gunNo_ = String.valueOf(ByteUtils.hexToDecimal(fuelMsg.get(DataConfig.OrderConfig.gunNo)) - ByteUtils.hexToDecimal("20"));
 
+                    String cardNum = FuelMsgCardNoHandler.getCacheCardNums(stationIp, gunNo_);
+                    if (cardNum != null && !cardNum.isEmpty() && !fuelMsg.get(DataConfig.OrderConfig.cardNo).equals(cardNum)) {
+                        //null: 初始化;empty:实时记录没有卡号;实时记录的卡号 == 当前订单数据的卡号
+                        log.info("订单数据错误,实时数据卡号" + cardNum + "订单数据:" + fuelMsg);
+                        return;
+                    }
+
                     String orderTime = fuelMsg.get(DataConfig.OrderConfig.date) + " " + fuelMsg.get(DataConfig.OrderConfig.time);
                     String perOrderTime = FuelMsgCardNoHandler.getPerOrderTime(stationIp, gunNo_);
                     if (orderTime.equals(perOrderTime)) return; //表示同一单

+ 1 - 1
sgs-middleware-v3/src/main/resources/application-dev.yml

@@ -1,6 +1,6 @@
 # server
 server:
-  port: 9000
+  port: 9001
   tomcat:
     uri-encoding: utf-8
     #配置内置tomcat的访问日志

+ 2 - 2
sgs-middleware-v3/src/main/resources/application-prod.yml

@@ -37,7 +37,7 @@ spring:
       max-request-size: 100Mb
   datasource:
     username: root
-    password: 123456 # 192.168.12.130  192.168.4.18   东莞:10.199.82.212
+    password: TKhs@123 # 192.168.12.130  192.168.4.18   东莞:10.199.82.212
     url: jdbc:mariadb://localhost:3306/sgs-master?characterEncoding=utf-8
     driverClassName: org.mariadb.jdbc.Driver # com.mysql.jdbc.Driver
     type: com.alibaba.druid.pool.DruidDataSource # 连接池指定
@@ -159,7 +159,7 @@ socketInfo:
   realUrl: http://47.107.51.26:8086/oilmachine/realOilData  # 实时加油数据
   filePath: /app/configure_dev.json # C:/token/info__manager_system/configure_dev.json
   urlBackup: http://47.107.51.26:8086/oilmachine/postOilData
-  lanSegments: 192 # 10 172 192
+  lanSegments: 10 # 10 172 192
   inPort: 20002
   socketPath: /etc/network/interfaces  #C:\token\info__manager_system\file\interfaces  /etc/network/interfaces /home/linaro/Desktop
   restartScript: /home/linaro/Desktop/restart.sh

+ 1 - 1
sgs-middleware-v3/src/main/resources/application.yml

@@ -18,7 +18,7 @@ spring:
       max-request-size: 100Mb
   ## 环境配置文件 dev test prod
   profiles:
-      active: prod
+      active: dev
 
 
 logging: