Browse Source

[功能修复]调整停充

liuf 1 năm trước cách đây
mục cha
commit
87b6311900

+ 0 - 134
src/main/java/com/tmzn/devicelinkykc/taskQueue/TransCheckTask.java

@@ -1,134 +0,0 @@
-//package com.tmzn.devicelinkykc.taskQueue;
-//
-//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-//import com.tmzn.devicelinkykc.constant.RedisConstant;
-//import com.tmzn.devicelinkykc.entity.Device;
-//import com.tmzn.devicelinkykc.entity.param.TransCheck;
-//import com.tmzn.devicelinkykc.frameMsg.DataConversion;
-//import com.tmzn.devicelinkykc.frameMsg.FrameDataSplicing;
-//import com.tmzn.devicelinkykc.msgEnum.DeviceSendYkc;
-//import com.tmzn.devicelinkykc.redis.RedisCache;
-//import com.tmzn.devicelinkykc.service.DeviceService;
-//import com.tmzn.devicelinkykc.service.DeviceStatusService;
-//import com.tmzn.devicelinkykc.socket.DeviceConnectionMsg;
-//import com.tmzn.devicelinkykc.socket.SocketHandle;
-//import com.tmzn.devicelinkykc.taskQueue.queue.MsgHeartQueue;
-//import com.tmzn.devicelinkykc.util.Encrytion;
-//import lombok.extern.slf4j.Slf4j;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.stereotype.Component;
-//
-//import java.io.IOException;
-//import java.util.List;
-//import java.util.Map;
-//import java.util.Optional;
-//import java.util.Set;
-//import java.util.concurrent.ScheduledExecutorService;
-//import java.util.concurrent.ScheduledThreadPoolExecutor;
-//import java.util.concurrent.TimeUnit;
-//
-///**
-// * @author xp
-// * @date 2024/7/23
-// * @explain "  "
-// */
-//@Component
-//@Slf4j
-//public class TransCheckTask {
-//    @Autowired
-//    private SocketHandle socketHandle;
-//    @Autowired
-//    private RedisCache redisCache;
-//    @Autowired
-//    private DeviceService deviceService;
-//    @Autowired
-//    private MsgHeartQueue msgHeartQueue;
-//
-//    //30s没收到订单回复再次上送,上送三次就结束将订单改为
-//    public void start(){
-//        ScheduledExecutorService scheduler = new ScheduledThreadPoolExecutor(1);
-//        Runnable task = new Runnable() {
-//            @Override
-//            public void run() {
-//                try {
-//                    log.info("check Trans>>>>>>>>>>>>>>>>>>>");
-//                    Map<String, DeviceConnectionMsg> deviceConnectionMsgMap = socketHandle.getDeviceConnectionMsgMap();
-//                    Set<String> imeis = redisCache.getCacheObject(RedisConstant.DEVICE_INFO);
-//                    imeis.stream().forEach(s -> {
-//                        QueryWrapper<Device> deviceQueryWrapper = new QueryWrapper<>();
-//                        QueryWrapper<Device> device_imei = deviceQueryWrapper.eq("device_imei", s);
-//                        Device one = deviceService.getOne(device_imei);
-//                        if (one != null) {
-//                            if (deviceConnectionMsgMap.containsKey(one.getPileCode())) {
-//                                //在线且链接,
-//                                TransCheck transCheck = redisCache.getCacheObject(RedisConstant.NO_RESPONSE_WAS_RECEIVED + one.getPileCode());
-//
-//                                if (transCheck.getCheck_time() == 0) {
-//                                    if ((System.currentTimeMillis() - transCheck.getTime()) > 30 * 1000) {
-//                                        log.info(one.getPileCode() + "Transchek>>>>>>>checkTime:" + transCheck.getCheck_time());
-//                                        upTrans(deviceConnectionMsgMap.get(one.getPileCode()), transCheck.getTrans());
-//                                        transCheck.setCheck_time(1);
-//                                        redisCache.setCacheObject(RedisConstant.NO_RESPONSE_WAS_RECEIVED+one.getPileCode(),transCheck);
-//                                    }
-//                                } else if (transCheck.getCheck_time() == 1) {
-//                                    if ((System.currentTimeMillis() - transCheck.getTime()) > 60 * 1000) {
-//                                        log.info(one.getPileCode() + "Transchek>>>>>>>checkTime:" + transCheck.getCheck_time());
-//                                        upTrans(deviceConnectionMsgMap.get(one.getPileCode()), transCheck.getTrans());
-//                                        transCheck.setCheck_time(2);
-//                                        redisCache.setCacheObject(RedisConstant.NO_RESPONSE_WAS_RECEIVED+one.getPileCode(),transCheck);
-//                                    }
-//                                } else if (transCheck.getCheck_time() == 2) {
-//                                    if ((System.currentTimeMillis() - transCheck.getTime()) > 90 * 1000) {
-//                                        log.info(one.getPileCode() + "Transchek>>>>>>>checkTime:" + transCheck.getCheck_time());
-//                                        upTrans(deviceConnectionMsgMap.get(one.getPileCode()), transCheck.getTrans());
-//                                        transCheck.setCheck_time(3);
-//                                        redisCache.setCacheObject(RedisConstant.NO_RESPONSE_WAS_RECEIVED+one.getPileCode(),transCheck);
-//                                    }
-//                                } else {
-//                                    redisCache.deleteObject(RedisConstant.NO_RESPONSE_WAS_RECEIVED + one.getPileCode());
-//                                }
-//                            }
-//                        }
-//                    });
-//                }catch (Exception e){
-//
-//                }
-//            }
-//        };
-//        scheduler.scheduleAtFixedRate(task,1,5*1000, TimeUnit.MILLISECONDS);
-//
-//    }
-//    private void upTrans(DeviceConnectionMsg deviceConnectionMsg,byte[] bytes){
-//        if(deviceConnectionMsg.getIs18()){
-//            try {
-//
-//                String key = redisCache.getCacheObject(RedisConstant.KEYS+deviceConnectionMsg.getDeviceId());
-//                byte[] rsaEncrypt = Encrytion.aesEncrypt(bytes, key.getBytes());
-//                byte[] msg = FrameDataSplicing.spliceing(deviceConnectionMsg.getMessageCount(), DeviceSendYkc.TRANSACTION_RECORDS_REQUEST.getFrameType(), DeviceSendYkc.TRANSACTION_RECORDS_REQUEST.getEncryptFlag(), rsaEncrypt, rsaEncrypt.length, deviceConnectionMsg.getIs18());
-//                deviceConnectionMsg.getOutputStream().write(msg);
-//                deviceConnectionMsg.getOutputStream().flush();
-//                log.info(deviceConnectionMsg.getDeviceId() + "Trans_chek,rsaEncrypt:"+DataConversion.bytesToHexString(rsaEncrypt));
-//            } catch (IOException e) {
-//                log.info("TransCheck:>>pileCode:" + deviceConnectionMsg.getDeviceId() + " ,TransactionFlow push frame Exception");
-//                e.printStackTrace();
-//            } catch (Exception e) {
-//                e.printStackTrace();
-//            }
-//            deviceConnectionMsg.incrementMessageCount();
-//            return;
-//        }
-//        try {
-//            byte[] msg = FrameDataSplicing.spliceing(deviceConnectionMsg.getMessageCount(), DeviceSendYkc.TRANSACTION_RECORDS_REQUEST.getFrameType(), DeviceSendYkc.TRANSACTION_RECORDS_REQUEST.getEncryptFlag(), bytes, bytes.length, deviceConnectionMsg.getIs18());
-//            deviceConnectionMsg.getOutputStream().write(msg);
-//            deviceConnectionMsg.getOutputStream().flush();
-//            log.info(deviceConnectionMsg.getDeviceId() + "Trans_chek:"+DataConversion.bytesToHexString(bytes));
-//        } catch (IOException e) {
-//            log.info("TransCheck:>>pileCode:" + deviceConnectionMsg.getDeviceId() + " ,TransactionFlow push frame Exception");
-//            e.printStackTrace();
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
-//        deviceConnectionMsg.incrementMessageCount();
-//
-//    }
-//}

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

@@ -8,6 +8,7 @@ import com.tmzn.devicelinkykc.constant.RedisConstant;
 import com.tmzn.devicelinkykc.constant.ykc.StatusConstant;
 import com.tmzn.devicelinkykc.entity.Device;
 import com.tmzn.devicelinkykc.entity.DeviceStatus;
+import com.tmzn.devicelinkykc.entity.OrderStatus;
 import com.tmzn.devicelinkykc.frameMsg.FrameDataSplicing;
 import com.tmzn.devicelinkykc.frameMsg.frameType.LoginFrame;
 import com.tmzn.devicelinkykc.frameMsg.frameType.RealTimeStatusPushFrame;
@@ -30,6 +31,7 @@ import org.springframework.stereotype.Component;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 
@@ -121,6 +123,7 @@ public class DeviceOnlineRunner {
                     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){
 
                 }
@@ -133,20 +136,17 @@ public class DeviceOnlineRunner {
         }
     }
 
-    /**
-     * 获取设备状态
-     */
-    private void getDevicePortDetail() {
-        logger.info("getDevicePortDetail>>>>>>>>>>>>>>>>>>>>>>>>");
-        List<DeviceStatus> list = deviceStatusService.list();
-        //双枪情况下,通过set集合减少循环次数,
-        Set<String> collect = list.stream().map(DeviceStatus::getDeviceImei).collect(Collectors.toSet());
-        collect.stream().forEach(imei -> {
-            DeviceParam dataParam = new DeviceParam();
-            dataParam.setDeviceId(imei);
-            dataParam.setCcid(imei);
-            deviceControlerService.sendPortDetailCmd(dataParam);
-        });
+    public void try103(DeviceStatus deviceStatus){
+
+        String key = "try103:_"+deviceStatus.getDeviceImei();
+        if(redisCache.hasKey(key)){
+            log.info("{}-{}忽略下发103", deviceStatus.getPileCode(), deviceStatus.getGunPort());
+            return;
+        }
+
+        log.info("{}-{}2分钟内无状态下发一次103", deviceStatus.getPileCode(), deviceStatus.getGunPort());
+        deviceControlerService.sendImeiDetail(deviceStatus.getDeviceImei());
+        redisCache.setCacheObject(key, System.currentTimeMillis(),120, TimeUnit.SECONDS);
     }
 
 }

+ 10 - 23
src/main/java/com/tmzn/devicelinkykc/taskQueue/runner/MsgCharngingRunner.java

@@ -148,32 +148,26 @@ public class MsgCharngingRunner {
         log.info("======Charging status push task ending=====");
     }
 
+    //尝试下发103 避免下发太频繁
     public void try103(OrderStatus orderStatus){
-
         String key = "try103:_"+orderStatus.getDeviceImei();
         if(redisCache.hasKey(key)){
             log.info("{}-{}忽略下发103", orderStatus.getPileCode(), orderStatus.getGunsCode());
             return;
         }
-
         log.info("{}-{}2分钟内无状态下发一次103", orderStatus.getPileCode(), orderStatus.getGunsCode());
         deviceControlerService.sendImeiDetail(orderStatus.getDeviceImei());
         redisCache.setCacheObject(key, System.currentTimeMillis(),120, TimeUnit.SECONDS);
-        return;
     }
 
-    public void stopOne(OrderStatus orderStatus){
+    //停止一个订单
+    public void stopOneOrder(OrderStatus orderStatus){
+        log.info("{}--id:{}设置订单关闭",orderStatus.getPileCode(),orderStatus.getId());
         int port = (int) orderStatus.getGunsCode();
-        orderStatus.setNowOrderStatus(StatusConstant.NOW_ORDER_STATUS_CHARGING_ENDING);
-        orderStatus.setEndTime(System.currentTimeMillis());
-        orderStatusService.save(orderStatus);
-        //发送停止充电指令
-        orderStatus.setEndTime(System.currentTimeMillis() - 1000 * 60 * 5);
-        orderStatus.setReasonStopCharging(TransConstant.INSUFFICIENT_BALANCE_EXCEPTION_STOP);
+        orderStatus.setEndTime(System.currentTimeMillis() - 1000 * 60 * 2);
         orderStatus.setNowOrderStatus(StatusConstant.NOW_ORDER_STATUS_CHARGING_ENDING);
         orderStatusService.updateById(orderStatus);
         deviceControlerService.stopCharge(orderStatus.getDeviceImei(), orderStatus.getDeviceImei(), port);
-        log.info("{}--id:{}已停止充电",orderStatus.getPileCode(),orderStatus.getId());
     }
 
     public void reportOne(OrderStatus orderStatus, BillingModel billingModel, DeviceConnectionMsg deviceConnectionMsg) {
@@ -182,9 +176,7 @@ public class MsgCharngingRunner {
         DeviceStatus deviceStatus = redisCache.getCacheMapValue(cacheKey, orderStatus.getPileCode());
 
         long t = System.currentTimeMillis()-orderStatus.getCreateTime();
-
         int port = (int) orderStatus.getGunsCode();
-
         if(deviceStatus==null){
             if(t<15*60*1000){
                 try103(orderStatus);
@@ -192,7 +184,8 @@ public class MsgCharngingRunner {
             }else{
                 log.info("{}-{}无15分钟还没有记录要停止充电", orderStatus.getPileCode(), orderStatus.getGunsCode());
                 //状态那我为
-                stopOne(orderStatus);
+                orderStatus.setReasonStopCharging(TransConstant.OTHER_STOP);
+                stopOneOrder(orderStatus);
             }
             return;
         }
@@ -205,7 +198,8 @@ public class MsgCharngingRunner {
             }else{
                 log.info("{}-{}5分钟后还不是充电状态录要停止充电", orderStatus.getPileCode(), orderStatus.getGunsCode());
                 //状态那我为
-                stopOne(orderStatus);
+                orderStatus.setReasonStopCharging(TransConstant.OTHER_STOP);
+                stopOneOrder(orderStatus);
                 return;
             }
         }
@@ -260,15 +254,8 @@ public class MsgCharngingRunner {
         if (money.compareTo(orderStatus.getStartMoney()) > 0) {
             //余额没有了,停充
             log.info("{},{},{}实时状态校验时余额不足>>>>>>停充>>>>",orderStatus.getPileCode(),orderStatus.getGunsCode(),orderStatus.getId());
-            DeviceParam deviceParam = new DeviceParam();
-            deviceParam.setDeviceId(orderStatus.getDeviceImei());
-            deviceParam.setCcid(orderStatus.getDeviceImei());
-
-            orderStatus.setEndTime(System.currentTimeMillis() - 1000 * 60 * 5);
             orderStatus.setReasonStopCharging(TransConstant.INSUFFICIENT_BALANCE_EXCEPTION_STOP);
-            orderStatus.setNowOrderStatus(StatusConstant.NOW_ORDER_STATUS_CHARGING_ENDING);
-            orderStatusService.updateById(orderStatus);
-            deviceControlerService.stopCharge(orderStatus.getDeviceImei(), orderStatus.getDeviceImei(), 1);
+            stopOneOrder(orderStatus);
             return;
         }
         int mi = (int) (System.currentTimeMillis() - orderStatus.getCreateTime()) / 1000 / 60;