Selaa lähdekoodia

[功能修复]调整停充

liuf 1 vuosi sitten
vanhempi
commit
6ef97baae2

+ 25 - 17
src/main/java/com/tmzn/devicelinkykc/message/DeviceMsgHandle.java

@@ -433,7 +433,7 @@ public class DeviceMsgHandle {
         }
         new Thread(() -> {
             try {
-                Thread.sleep(5000); // 延迟 5 秒
+                Thread.sleep(4000); // 延迟 5 秒
                 DeviceParam dataParam = new DeviceParam();
                 dataParam.setDeviceId(imei);
                 dataParam.setCcid(imei);
@@ -517,11 +517,13 @@ public class DeviceMsgHandle {
             OrderStatus statusServiceOne = orderStatusService.getOne(orderStatusQueryWrapper);
             if (statusServiceOne == null) {
                 logger.info("没有待处理订单{}", imei);
+                deviceControlerService.sendImeiDetail(imei);
                 return;
             }
 
             if (statusServiceOne.getTransactionOrderReplyStatus() == StatusConstant.TRANSACTION_ORDER_REPLY_STATUS_SUCC) {
                 logger.info("订单状态已上报成功{},id:{}", imei, statusServiceOne.getId());
+                deviceControlerService.sendImeiDetail(imei);
                 return;
             }
 
@@ -649,7 +651,8 @@ public class DeviceMsgHandle {
 
     /**
      * 1.这里接收到消息就是设备在线;2.对状态进行处理,不同类型消息的枪状态不同进行落库;3.并且状态变化的一个变位上送
-     *
+     * 枪充满会变成状7  然后必须要拔了再插 才能启动充电
+     * 但是拔了再插 会短暂的从1 变成5 所以在判断空闲的时候 要加上订单60秒的变位限制 6如果有订单60秒后才关闭
      * @param imei       设备imei码
      * @param port       设备port(枪号)
      * @param gunsStatus 枪状态
@@ -662,8 +665,9 @@ public class DeviceMsgHandle {
         DeviceStatus statusServiceOneTemp = new DeviceStatus();
 
 
-        if(statusServiceOne!=null && gunsStatus == StatusConstant.INSERT_GUNS_YES){
-            String waitingKey = RedisConstant.WAITING_INSERT_GUN+"_"+statusServiceOneTemp.getPileCode()+statusServiceOneTemp.getGunPort();
+        if(statusServiceOne!=null && insertGunStatus == StatusConstant.INSERT_GUNS_YES){
+            String waitingKey = RedisConstant.WAITING_INSERT_GUN+":"+statusServiceOne.getPileCode()+"_"+statusServiceOne.getGunPort();
+
             if (redisCache.hasKey(waitingKey)) {
                 //未插枪启充的操作会保存订单,但是订单号不是因为断网中停充造成的订单结束原因是0,所以redis有当前设备的订单值,就不是结束充电
                int  waitingId = redisCache.getCacheObject(waitingKey);
@@ -757,27 +761,32 @@ public class DeviceMsgHandle {
             //7状态小于30秒内且订单原因不是远程停充
             if (one.getNowOrderStatus() == StatusConstant.NOW_ORDER_STATUS_CHARGING) {
                 if ((System.currentTimeMillis() - one.getCreateTime()) < 60 * 1000 && one.getReasonStopCharging() != TransConstant.APP_REMOTE_STOP) {
-                    logger.info("订单60秒内{}不处理7这个状态", one.getPileCode());
-                    return;
-                } else {
-                    //充电已完成
-                    //发送结束充电命令 顺利的话113会收到 状态还是7
-                    logger.info("订单60秒后{}7状态发送止充电指令", one.getPileCode());
-                    //标记订单为已停充 标记为未上送
-                    one.setNowOrderStatus(StatusConstant.NOW_ORDER_STATUS_CHARGING_ENDING);
-                    one.setEndTime(System.currentTimeMillis());
-                    one.setReasonStopCharging(TransConstant.SOC_FULL_OF_STOP);
-                    orderStatusService.updateById(one);
-                    RpcResult rpcResult = deviceControlerService.stopCharge(imei, imei, port);
+                    logger.info("下订单60秒内{}不处理7状态", one.getPileCode());
                     return;
                 }
+                //充电已完成
+                //发送结束充电命令 顺利的话113会收到 状态还是7
+                logger.info("下订单60秒后{}仍然处于7状态发送止充电指令", one.getPileCode());
+                //标记订单为已停充 标记为未上送
+                one.setNowOrderStatus(StatusConstant.NOW_ORDER_STATUS_CHARGING_ENDING);
+                one.setEndTime(System.currentTimeMillis());
+                one.setReasonStopCharging(TransConstant.SOC_FULL_OF_STOP);
+                orderStatusService.updateById(one);
+                RpcResult rpcResult = deviceControlerService.stopCharge(imei, imei, port);
+                return;
             }
             return;
         }
 
+        //先拔 再插
         //订单还在充电中 但是枪不在充电中状态 就结束订单
+        // 但是拔了再插 会短暂的从1 变成5 所以在判断空闲的时候 要加上订单60秒的变位限制 6如果有订单60秒后才关闭
         if (one.getNowOrderStatus() == StatusConstant.NOW_ORDER_STATUS_CHARGING) {
             logger.info("{}枪非充电中状态,结束订单状态 等待任务重试上报订单", one.getPileCode());
+            if ((System.currentTimeMillis() - one.getCreateTime()) < 60 * 1000 && one.getReasonStopCharging() != TransConstant.APP_REMOTE_STOP) {
+                logger.info("下订单60秒内{}不处理空闲这个状态", one.getPileCode());
+                return;
+            }
             one.setNowOrderStatus(StatusConstant.NOW_ORDER_STATUS_CHARGING_ENDING);
             one.setEndTime(System.currentTimeMillis());
             one.setReasonStopCharging(TransConstant.OTHER_STOP);
@@ -785,6 +794,5 @@ public class DeviceMsgHandle {
         }
         logger.info("上传空闲状态{}",imei);
         realTimeStatusPushFrame.deviceStatusPush(deviceConnectionMsg, FrameDataSplicing.transactionNum(null, 0), statusServiceOne.getPileCode(), (byte) port, gunsStatus, insertGunStatus, 0, 0, zero, zero, 0);
-
     }
 }

+ 1 - 1
src/main/java/com/tmzn/devicelinkykc/message/YkcMsgHandle.java

@@ -372,7 +372,7 @@ public class YkcMsgHandle {
                 //未插枪不启充设备,但是返回未插枪
                 logger.info("未插枪等待插枪充电订单{}-{}",orderStatus.getPileCode(),orderStatus.getGunsCode());
                 charngingPushFrame.startStatus(deviceConnectionMsg,transOrder,guns[0],result,reason );
-                redisCache.setCacheObject(RedisConstant.WAITING_INSERT_GUN+"_"+orderStatus.getPileCode()+orderStatus.getGunsCode(),orderStatus.getId(),55*1000, TimeUnit.MILLISECONDS);
+                redisCache.setCacheObject(RedisConstant.WAITING_INSERT_GUN+":"+orderStatus.getPileCode()+'_'+orderStatus.getGunsCode(),orderStatus.getId(),60*1000, TimeUnit.MILLISECONDS);
             }else {
                 logger.info("已就绪启动充电{}-{}",orderStatus.getPileCode(),orderStatus.getGunsCode());
                 deviceControlerService.startCharge(deviceStatus.getDeviceImei(), orderStatus.getDeviceImei(), (int) guns[0],0);

+ 1 - 0
src/main/java/com/tmzn/devicelinkykc/taskQueue/runner/DeviceOnlineRunner.java

@@ -122,6 +122,7 @@ public class DeviceOnlineRunner {
                     logger.info("桩检测需要自动上线{}",device.getPileCode());
                     socketHandle.addDeviceConnection(device.getIp(),device.getPort(),device.getPileCode(), device.getDeviceImei(), device.getDeviceSn(),device.getCommProtocolVer());
                     loginFrame.loginMsgSend(socketHandle.getDeviceConnection(device.getPileCode()), device);
+
 //                    deviceControlerService.sendImeiDetail(device.getDeviceImei());
                     try103(deviceStatus);
                 }catch (Exception e){