Browse Source

fix(信息解析):处理真假枪记错泵吗导致后续无订单上传到第三方平台bug

zheng 1 year ago
parent
commit
c76be73b4c

+ 20 - 0
sgs-middleware-v3/src/main/java/com/tokheim/sgs/v3/common/utils/DateTimeUtils.java

@@ -8,7 +8,10 @@ package com.tokheim.sgs.v3.common.utils;
  * To change this template use File | Settings | File Templates.
  */
 
+import lombok.extern.slf4j.Slf4j;
+
 import java.text.DateFormat;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.Date;
@@ -18,6 +21,7 @@ import java.util.Date;
  *
  * @author wuxw
  */
+@Slf4j
 public class DateTimeUtils {
     /**
      * 日期格式 **
@@ -108,6 +112,22 @@ public class DateTimeUtils {
         return sDate;
     }
 
+    /**
+     * 将字符串日期转为 Date ,yyyyMMdd HH:mm:ss
+     * @param date
+     * @return
+     */
+    public static Date parse(String date) {
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
+        Date result = null;
+        try {
+            result = simpleDateFormat.parse(date);
+        } catch (Exception e) {
+            log.error(date + " 转换失败",e);
+        }
+        return result;
+    }
+
     /**
      * 获取当前月份
      *

+ 59 - 47
sgs-middleware-v3/src/main/java/com/tokheim/sgs/v3/socket/handler/CloudInfoHandler.java

@@ -21,11 +21,11 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.lang.reflect.Field;
 import java.math.BigDecimal;
+import java.text.DateFormat;
 import java.util.*;
 import java.util.concurrent.Executors;
 
-import static com.tokheim.sgs.v3.socket.ServerHandler.ENV;
-import static com.tokheim.sgs.v3.socket.ServerHandler.prevPump;
+import static com.tokheim.sgs.v3.socket.ServerHandler.*;
 
 /**
  * @author xgm
@@ -182,6 +182,7 @@ 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:实时记录没有卡号;实时记录的卡号 == 当前订单数据的卡号
@@ -189,9 +190,18 @@ public class CloudInfoHandler {
                         return;
                     }
 
+                    //记录订单时间是否大于上一笔订单的时间,不是则为旧单或同一单,不上传
                     String orderTime = fuelMsg.get(DataConfig.OrderConfig.date) + " " + fuelMsg.get(DataConfig.OrderConfig.time);
                     String perOrderTime = FuelMsgCardNoHandler.getPerOrderTime(stationIp, gunNo_);
-                    if (orderTime.equals(perOrderTime)) return; //表示同一单
+                    Date orderTimeDate = DateTimeUtils.parse(orderTime);
+                    Date perOrderTimeDate = DateTimeUtils.parse(perOrderTime);
+                    if (orderTimeDate != null && perOrderTimeDate != null) {
+                        int intervalSeconds = DateTimeUtils.getIntervalSeconds(perOrderTimeDate,orderTimeDate);
+                        if (intervalSeconds <= 0) return; //表示同一单或者是旧单
+                    } else {
+                        if (orderTime.equals(perOrderTime)) return; //表示同一单
+                    }
+
                     //记录订单时间
                     FuelMsgCardNoHandler.setPerOrderTime(stationIp,gunNo_,orderTime);
 
@@ -239,58 +249,60 @@ public class CloudInfoHandler {
                        if (!(addValBigDecimalValue == Double.valueOf(fuelMsg.get(DataConfig.OrderConfig.pump)))){
                            log.info("油机ip地址--【" + stationIp + "】--漏单时间--addValBigDecimalValue--"+addValBigDecimalValue+"--" + DateTimeUtils.getFormatCurrentTime() + "--当前泵码【" + fuelMsg.get(DataConfig.OrderConfig.pump) + "】--上一个泵码【" + prevPump + "】--差值【" + v + "】--" + msg);
                        }
-                        log.info("加油记录包头(含卡号)--当前泵码【" + fuelMsg.get(DataConfig.OrderConfig.pump) + "】--上一个泵码【" + prevPump + "】--差值【" + v + "】--" + msg);
-                        //System.err.println("油机ip地址--【" + stationIp + "】--云平台数据(交易数据-含卡号):" + jsonString);
-                        log.info("油机ip地址--【" + stationIp + "】--云平台数据(交易数据-含卡号):" + jsonString);
-                        JSONObject jsonObject = JSONObject.parseObject(jsonString);
-                        //记录上传泵码
-                        ServerHandler.prevPump = fuelMsg.get(DataConfig.OrderConfig.pump);
+
+                    }
+
+                    log.info("加油记录包头(含卡号)--当前泵码【" + fuelMsg.get(DataConfig.OrderConfig.pump) + "】--上一个泵码【" + prevPump + "】" + msg);
+                    //System.err.println("油机ip地址--【" + stationIp + "】--云平台数据(交易数据-含卡号):" + jsonString);
+                    log.info("油机ip地址--【" + stationIp + "】--云平台数据(交易数据-含卡号):" + jsonString);
+                    JSONObject jsonObject = JSONObject.parseObject(jsonString);
+                    //记录上传泵码
+                    ServerHandler.prevPump = fuelMsg.get(DataConfig.OrderConfig.pump);
 //                        ServerHandler.pumpMap.set(stationIp, gunNo_, ServerHandler.prevPump);
-                        ServerHandler.pumpMap.set(stationIp, gunNo_, activeNozzle.get(gunNo_),ServerHandler.prevPump);
-                        //log.info("上一个泵码--" + prevPump + ",当前泵码---" + fuelMsg.get(DataConfig.OrderConfig.pump));
+                    ServerHandler.pumpMap.set(stationIp, gunNo_, activeNozzle.get(gunNo_),ServerHandler.prevPump);
+                    //log.info("上一个泵码--" + prevPump + ",当前泵码---" + fuelMsg.get(DataConfig.OrderConfig.pump));
 
 
-                        String orderNo2 = SeqKit.genPayOrderId();
-                        ServerHandler.orderNoMap.set(stationIp, gunNo_, orderNo2);
-                        //nextOrderNoMap.set(stationIp, gunNo_, orderNo2);
-                        OrderMapper orderMapper = SpringUtils.getBean("orderMapper");
+                    String orderNo2 = SeqKit.genPayOrderId();
+                    ServerHandler.orderNoMap.set(stationIp, gunNo_, orderNo2);
+                    //nextOrderNoMap.set(stationIp, gunNo_, orderNo2);
+                    OrderMapper orderMapper = SpringUtils.getBean("orderMapper");
                         /*if (ServerHandler.ENV.equals("test")){
                             target.put("id", SeqKit.genPayOrderId()); //开发环境生成订单号,生成环境在实时数据中生成
                         }*/
-                        String json = JSONObject.toJSONString(target, SerializerFeature.WriteNullStringAsEmpty);
-                        Order order = JSONObject.parseObject(json, Order.class);
-                        log.info("保存订单"+json);
-                        orderMapper.insertSelective(order);
-
-                        if (ServerHandler.ENV.equals("prod")) { //dev  prod test  http://47.107.51.26:8086/oilmachine/postOilData
-                            try {
-                                //OrderMapper orderMapper = SpringUtils.getBean("orderMapper");
-                                ////target.put("id",SeqKit.genPayOrderId());
-                                ////String json = JSONObject.toJSONString(target, SerializerFeature.WriteNullStringAsEmpty);
-                                //Order order = JSONObject.parseObject(jsonString, Order.class);
-                                //orderMapper.insertSelective(order);
-
-                                ThreadUtil.execAsync(new Runnable() { //异步执行
-                                    @Override
-                                    public void run() {
-                                        //System.out.println("异步请求---" + Thread.currentThread().getName());
-                                        String resp = HttpUtils.sendPost3(data.getUrl(), jsonObject); //url
-                                        if (resp != null) {
-                                            //System.err.println("响应数据:" + resp);
-                                            log.info("响应数据:" + resp);
-                                            orderMapper.deleteByPrimaryKey(order);
-                                        }
+                    String json = JSONObject.toJSONString(target, SerializerFeature.WriteNullStringAsEmpty);
+                    Order order = JSONObject.parseObject(json, Order.class);
+                    log.info("保存订单"+json);
+                    orderMapper.insertSelective(order);
+
+                    if (ServerHandler.ENV.equals("prod")) { //dev  prod test  http://47.107.51.26:8086/oilmachine/postOilData
+                        try {
+                            //OrderMapper orderMapper = SpringUtils.getBean("orderMapper");
+                            ////target.put("id",SeqKit.genPayOrderId());
+                            ////String json = JSONObject.toJSONString(target, SerializerFeature.WriteNullStringAsEmpty);
+                            //Order order = JSONObject.parseObject(jsonString, Order.class);
+                            //orderMapper.insertSelective(order);
+
+                            ThreadUtil.execAsync(new Runnable() { //异步执行
+                                @Override
+                                public void run() {
+                                    //System.out.println("异步请求---" + Thread.currentThread().getName());
+                                    String resp = HttpUtils.sendPost3(data.getUrl(), jsonObject); //url
+                                    if (resp != null) {
+                                        //System.err.println("响应数据:" + resp);
+                                        log.info("响应数据:" + resp);
+                                        orderMapper.deleteByPrimaryKey(order);
                                     }
-                                });
-                            } catch (Exception e) {
+                                }
+                            });
+                        } catch (Exception e) {
 //                                ServerHandler.pumpMap.set(stationIp, gunNo_, ServerHandler.prevPump);
-                                ServerHandler.pumpMap.set(stationIp, gunNo_,activeNozzle.get(gunNo_), ServerHandler.prevPump);
-                                //String orderNo = ID.get().next().toString();
-                                String orderNo = SeqKit.genPayOrderId();
-                                ServerHandler.orderNoMap.set(stationIp, gunNo_, orderNo);
-                                e.printStackTrace();
-                                log.error("threadPoolExecutor(order)--发送订单json数据【" + jsonString + "】--" + e);
-                            }
+                            ServerHandler.pumpMap.set(stationIp, gunNo_,activeNozzle.get(gunNo_), ServerHandler.prevPump);
+                            //String orderNo = ID.get().next().toString();
+                            String orderNo = SeqKit.genPayOrderId();
+                            ServerHandler.orderNoMap.set(stationIp, gunNo_, orderNo);
+                            e.printStackTrace();
+                            log.error("threadPoolExecutor(order)--发送订单json数据【" + jsonString + "】--" + e);
                         }
                     }
                 }

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

@@ -18,7 +18,7 @@ spring:
       max-request-size: 100Mb
   ## 环境配置文件 dev test prod
   profiles:
-      active: dev
+      active: prod
 
 
 logging:
@@ -30,6 +30,8 @@ logging:
 
 login.check: 0
 
+version: 1.1.1
+