Kaynağa Gözat

柜锁 增加 mqtt传输方式,代码注释保留

liubo 2 yıl önce
ebeveyn
işleme
24088bb8dc

+ 10 - 10
zd-model/src/main/resources/logback.xml

@@ -57,30 +57,30 @@
         </filter>
     </appender>
 
-    <appender name="file_debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
+    <!--<appender name="file_debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <file>${log.path}/${spring.application.name}-debug.log</file>
-        <!-- 循环政策:基于时间创建日志文件 -->
+        &lt;!&ndash; 循环政策:基于时间创建日志文件 &ndash;&gt;
         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <!-- 日志文件名格式 -->
+            &lt;!&ndash; 日志文件名格式 &ndash;&gt;
             <fileNamePattern>${log.path}/${spring.application.name}-debug.%d{yyyy-MM-dd}.log</fileNamePattern>
-            <!-- 日志最大的历史 60天 -->
+            &lt;!&ndash; 日志最大的历史 60天 &ndash;&gt;
             <maxHistory>7</maxHistory>
         </rollingPolicy>
         <encoder>
             <pattern>${log.pattern}</pattern>
         </encoder>
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <!-- 过滤的级别 -->
+            &lt;!&ndash; 过滤的级别 &ndash;&gt;
             <level>debug</level>
-            <!-- 匹配时的操作:接收(记录) -->
+            &lt;!&ndash; 匹配时的操作:接收(记录) &ndash;&gt;
             <onMatch>ACCEPT</onMatch>
-            <!-- 不匹配时的操作:拒绝(不记录) -->
+            &lt;!&ndash; 不匹配时的操作:拒绝(不记录) &ndash;&gt;
             <onMismatch>DENY</onMismatch>
         </filter>
-    </appender>
+    </appender>-->
 
     <!-- 系统模块日志级别控制  -->
-    <logger name="com.zd" level="debug"/>
+    <logger name="com.zd" level="info"/>
     <!-- Spring日志级别控制  -->
     <logger name="org.springframework" level="warn"/>
 
@@ -92,6 +92,6 @@
     <root level="info">
         <appender-ref ref="file_info"/>
         <appender-ref ref="file_error"/>
-        <appender-ref ref="file_debug"/>
+<!--        <appender-ref ref="file_debug"/>-->
     </root>
 </configuration>

+ 73 - 4
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/device/DeviceRemoteController.java

@@ -4,6 +4,7 @@ import com.zd.common.core.redis.RedisService;
 import com.zd.common.core.utils.ReUtil;
 import com.zd.laboratory.api.entity.CabinetLock;
 import com.zd.laboratory.api.entity.CabinetV2Lock;
+import com.zd.laboratory.mqtt.service.impl.CommonSend;
 import com.zd.laboratory.socket.runner.TCPServer;
 import com.zd.laboratory.socket.service.SocketService;
 import com.zd.laboratory.utils.CRCCHECK;
@@ -32,6 +33,8 @@ public class DeviceRemoteController {
     private SocketService socketService;
     @Autowired
     private RedisService redisService;
+    @Autowired
+    private CommonSend commonSend;
 
     @Value("${sys.lockTimer:30}")
     private Integer lockTimer;
@@ -49,6 +52,8 @@ public class DeviceRemoteController {
 
     @PostMapping("/V2/openLock")
     public ResultData cabinetV2OpenLock(@RequestBody CabinetV2Lock cabinetV2Lock){
+
+        // socket 方式发送
         String instruct = CRCCHECK.getOpenLockOrder(Integer.parseInt(cabinetV2Lock.getLockId()));
         String relayCode = cabinetV2Lock.getRelayCode();
         OutputStream ops = TCPServer.cacheMap.get(relayCode);
@@ -76,12 +81,49 @@ public class DeviceRemoteController {
                     return ResultData.success("开锁成功");
                 }
             }
+
         } catch (Exception e) {
             e.printStackTrace();
             logger.error("柜锁连接失败:" + e.getMessage());
             return ResultData.fail("柜锁连接失败!");
         }
         return ResultData.fail("开锁失败");
+
+        //  mqtt 方式
+        /*String instruct = CRCCHECK.getOpenLockOrder(Integer.parseInt(cabinetV2Lock.getLockId()));
+        logger.info("柜锁MQTT开锁发送:" + instruct);
+        commonSend.send(socketService.getSteerSubscriptPrefix() + "/" + cabinetV2Lock.getRelayCode(),
+                ReUtil.hexStringToByteArray(instruct));
+
+        instruct = CRCCHECK.getReadLockOrder(Integer.parseInt(cabinetV2Lock.getLockId()));
+        int timer = lockTimer;
+        Integer status;
+        byte[] bytes = ReUtil.hexStringToByteArray(instruct);
+
+        try {
+            Thread.sleep(3000);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        while (timer > 1){
+
+            commonSend.send(socketService.getSteerSubscriptPrefix() + "/" + cabinetV2Lock.getRelayCode(),
+                    bytes);
+            timer-=2;
+
+            try {
+                Thread.sleep(1900);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+
+            status = redisService.getCacheObject(cabinetV2Lock.getRelayCode() + ":" + cabinetV2Lock.getLockId());
+            logger.info("柜锁MQTT开锁状态查询:" + instruct + ",开锁结果:" + status);
+            if(status != null && status == 1){
+                return ResultData.success("开锁成功");
+            }
+        }
+        return ResultData.fail("开锁失败");*/
     }
 
     /**
@@ -89,23 +131,25 @@ public class DeviceRemoteController {
      */
     @PostMapping("/V2/closeLock")
     public ResultData cabinetV2CloseLock(@RequestBody CabinetV2Lock cabinetV2Lock){
+
+        // socket 方式发送
         String instruct = CRCCHECK.getCloseLockOrder(Integer.parseInt(cabinetV2Lock.getLockId()));
         String relayCode = cabinetV2Lock.getRelayCode();
         OutputStream ops = TCPServer.cacheMap.get(relayCode);
 
         try {
-            /*ops.write(ReUtil.hexStringToByteArray(instruct));
+            ops.write(ReUtil.hexStringToByteArray(instruct));
             ops.flush();
             logger.info("柜锁关锁指令:" + instruct);
-            Thread.sleep(1000);*/
+            Thread.sleep(1000);
 
             instruct = CRCCHECK.getReadLockOrder(Integer.parseInt(cabinetV2Lock.getLockId()));
             ops.write(ReUtil.hexStringToByteArray(instruct));
             ops.flush();
 
-            /*Thread.sleep(600);
+            Thread.sleep(600);
             ops.write(ReUtil.hexStringToByteArray(instruct));
-            ops.flush();*/
+            ops.flush();
 
             Thread.sleep(1600);
             Integer status = redisService.getCacheObject(relayCode + ":" + cabinetV2Lock.getLockId());
@@ -120,5 +164,30 @@ public class DeviceRemoteController {
             return ResultData.fail("柜锁连接失败!");
         }
         return ResultData.fail("关锁失败:请手动按压柜锁,确认已关闭!");
+
+        // mqtt 方式
+        /*String instruct = CRCCHECK.getReadLockOrder(Integer.parseInt(cabinetV2Lock.getLockId()));
+        int timer = lockTimer;
+        Integer status;
+        byte[] bytes = ReUtil.hexStringToByteArray(instruct);
+        while (timer > 1){
+
+            commonSend.send(socketService.getSteerSubscriptPrefix() + "/" + cabinetV2Lock.getRelayCode(),
+                    bytes);
+            timer--;
+
+            try {
+                Thread.sleep(900);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+            status = redisService.getCacheObject(cabinetV2Lock.getRelayCode() + ":" + cabinetV2Lock.getLockId());
+            logger.info("柜锁MQTT关锁状态查询:" + instruct + ",开锁结果:" + status);
+            if(status != null && status == 1){
+                return ResultData.success("关锁成功");
+            }
+        }
+
+        return ResultData.fail("关锁失败");*/
     }
 }

+ 13 - 5
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/mqtt/config/MqttConfig.java

@@ -12,8 +12,8 @@ import com.zd.laboratory.event.LabMessageEvent;
 import com.zd.laboratory.event.SensorNewStatusEvent;
 import com.zd.laboratory.mqtt.service.TerminalRouter;
 import com.zd.laboratory.mqtt.service.impl.CommonSend;
+import com.zd.laboratory.utils.CRCCHECK;
 import com.zd.laboratory.utils.FireLaborUtil;
-import com.zd.laboratory.utils.HexUtils;
 import com.zd.model.constant.CacheConstants;
 import com.zd.model.constant.MqttConstants;
 import com.zd.model.domain.R;
@@ -320,10 +320,18 @@ public class MqttConfig {
                     TerminalRouter.routerMap.get("HxpTerminalService").offLine(codeNum);
                 } else if (receivedTopic.startsWith(steerPublishPrefix)) {
 //                    messageStr = byte2Hex(message.getPayload().toString().getBytes(StandardCharsets.UTF_8));
-                    char[] str = message.getPayload().toString().toCharArray();
-                    logger.info("柜锁mqtt消费:" + messageStr);
-                    String replaceMess = messageStr.replace(" ", "");
+//                    char[] str = message.getPayload().toString().toCharArray();
+
+
+                    // 柜锁bit 位
+                    long bit = CRCCHECK.getBitByCommand(messageStr);
+                    // 1开锁状态 0关锁状态
+                    int status = CRCCHECK.getLockStatus(messageStr);
+                    logger.info("柜锁MQTT状态回调:" + receivedTopic.replaceAll(steerPublishPrefix +"/", "") + ":" + bit + ",回调结果" + (status == 1 ? "开启": "关闭") + ",指令:" + messageStr);
+                    redisService.setCacheObject(receivedTopic.replaceAll(steerPublishPrefix +"/", "") + ":" + bit, status, 3 * 60L, TimeUnit.SECONDS);
+
                     //坨机写指令返回数据
+                    /*String replaceMess = messageStr.replace(" ", "");
                     if (replaceMess.length() == 12) {
                         String command = replaceMess.substring(8, 10);
                         //表示坨机成功
@@ -348,7 +356,7 @@ public class MqttConfig {
                             String relayCode = prefix[prefix.length - 1];
                             TerminalRouter.routerMap.get("HxpLockService").offLine(relayCode);
                         }
-                    }
+                    }*/
                 } else if (receivedTopic.startsWith(MqttConstants.TOPIC_FIRE_DEVICE_RECEIVE)) {
                     logger.info("消息处理器1开始处理=====");
                     logger.info("topic:" + receivedTopic);

+ 4 - 0
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/socket/service/SocketService.java

@@ -73,6 +73,10 @@ public class SocketService {
     @Autowired
     private CommonSend commonSend;
 
+    public String getSteerSubscriptPrefix() {
+        return steerSubscriptPrefix;
+    }
+
     @PostConstruct
     private void queryRelays(){
         relays = labRelayMapper.selectLabRelayList(new LabRelay());