lipenghui 3 недель назад
Родитель
Сommit
2f6b286e62

+ 50 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/yanfan/core/StartBoot.java

@@ -0,0 +1,50 @@
+package cn.iocoder.yudao.module.pms.controller.admin.yanfan.core;
+
+import cn.iocoder.yudao.module.pms.controller.admin.yanfan.mqtt.PubMqttClient;
+import lombok.Setter;
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.IMqttMessageListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+/**
+ * 启动类
+ *
+ * @author bill
+ */
+@Component
+@Slf4j
+public class StartBoot implements ApplicationRunner {
+
+
+    @Autowired
+    private PubMqttClient mqttClient;
+    @Setter
+    private IMqttMessageListener subscribeCallback;
+
+    @Override
+    public void run(ApplicationArguments args) throws Exception {
+        try {
+//            replyListen.listen();
+//            reportListen.listen();
+//            statusListen.listen();
+//            propFetchListen.listen();
+//            upgradeListen.listen();
+//            invokeListen.listen();
+//            otherListen.listen();
+//            testListen.listen();
+            /*启动内部客户端,用来下发客户端服务*/
+            mqttClient.setListener(subscribeCallback);
+            mqttClient.initialize();
+//            protocolManagerService.getAllProtocols();
+            log.info("=>设备监听队列启动成功");
+        } catch (Exception e) {
+            log.error("=>客户端启动失败:{}", e.getMessage(), e);
+        }
+    }
+}

+ 1 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/yanfan/sip/device/channel/vo/YfSipDeviceChannelPageReqVO.java

@@ -35,6 +35,7 @@ public class YfSipDeviceChannelPageReqVO extends PageParam {
 
 
     @Schema(description = "通道名称", example = "王五")
     @Schema(description = "通道名称", example = "王五")
     private String channelName;
     private String channelName;
+    private String deviceSipId;
 
 
     @Schema(description = "注册时间")
     @Schema(description = "注册时间")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)

+ 1 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/yanfan/sip/handler/req/message/UnknowReqHandler.java → yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/yanfan/sip/handler/req/UnknowReqHandler.java

@@ -1,7 +1,6 @@
-package cn.iocoder.yudao.module.pms.controller.admin.yanfan.sip.handler.req.message;
+package cn.iocoder.yudao.module.pms.controller.admin.yanfan.sip.handler.req;
 
 
 import cn.iocoder.yudao.module.pms.controller.admin.yanfan.sip.handler.IReqHandler;
 import cn.iocoder.yudao.module.pms.controller.admin.yanfan.sip.handler.IReqHandler;
-import cn.iocoder.yudao.module.pms.controller.admin.yanfan.sip.handler.req.ReqAbstractHandler;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 

+ 93 - 86
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/yanfan/sip/handler/req/message/response/cmdType/RecordInfoHandler.java

@@ -1,86 +1,93 @@
-//package cn.iocoder.yudao.module.pms.controller.admin.yanfan.sip.handler.req.message.response.cmdType;
-//
-//import cn.iocoder.yudao.module.pms.controller.admin.yanfan.sip.handler.req.ReqAbstractHandler;
-//import cn.iocoder.yudao.module.pms.controller.admin.yanfan.sip.handler.req.message.IMessageHandler;
-//import cn.iocoder.yudao.module.pms.controller.admin.yanfan.sip.handler.req.message.response.ResponseMessageHandler;
-//import lombok.extern.slf4j.Slf4j;
-//import org.dom4j.DocumentException;
-//import org.dom4j.Element;
-//import org.springframework.beans.factory.InitializingBean;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.stereotype.Component;
-//
-//import javax.sip.InvalidArgumentException;
-//import javax.sip.RequestEvent;
-//import javax.sip.SipException;
-//import java.text.ParseException;
-//import java.util.Iterator;
-//
-//@Slf4j
-//@Component
-//public class RecordInfoHandler extends ReqAbstractHandler implements InitializingBean, IMessageHandler {
-//
-//    @Autowired
-//    private ResponseMessageHandler responseMessageHandler;
-//
-//    @Autowired
-//    private ISipCacheService sipCacheService;
-//
-//    @Autowired
-//    private RecordCacheManager recordCacheManager;
-//    @Override
-//    public void handlerCmdType(RequestEvent evt, SipDevice device, Element element) {
-//        try {
-//            // 回复200 OK
-//            responseAck(evt);
-//            Element rootElement = getRootElement(evt);
-//            String deviceId = rootElement.element("DeviceID").getText();
-//            String sn = XmlUtil.getText(rootElement, "SN");
-//            String sumNum = XmlUtil.getText(rootElement, "SumNum");
-//            String recordkey = deviceId + ":" + sn;
-//            int recordnum = 0;
-//            RecordList recordList = recordCacheManager.get(recordkey);
-//            recordList.setDeviceID(deviceId);
-//            Element recordListElement = rootElement.element("RecordList");
-//            if (recordListElement == null || sumNum == null || sumNum.equals("")) {
-//                log.info("无录像数据");
-//            } else {
-//                Iterator<Element> recordListIterator = recordListElement.elementIterator();
-//                if (recordListIterator != null) {
-//                    while (recordListIterator.hasNext()) {
-//                        Element itemRecord = recordListIterator.next();
-//                        Element recordElement = itemRecord.element("DeviceID");
-//                        if (recordElement == null) {
-//                            continue;
-//                        }
-//                        RecordItem item = new RecordItem();
-//                        item.setStart(SipUtil.ISO8601Totimestamp(XmlUtil.getText(itemRecord, "StartTime")));
-//                        item.setEnd(SipUtil.ISO8601Totimestamp(XmlUtil.getText(itemRecord, "EndTime")));
-//                        recordList.addItem(item);
-//                        recordnum++;
-//                    }
-//                }
-//            }
-//            log.info("getSumNum:{}", recordList.getSumNum());
-//            recordList.setSumNum(recordList.getSumNum() + recordnum);
-//            if (recordList.getSumNum() == Integer.parseInt(sumNum)) {
-//                //时间合并 保存到redia
-//                recordList.mergeItems();
-//                log.info("mergeItems recordList:{}", recordList);
-//                recordCacheManager.remove(recordkey);
-//                sipCacheService.setRecordList(recordkey, recordList);
-//                //发布设备property到emqx
-//            } else {
-//                recordCacheManager.put(recordkey, recordList);
-//            }
-//        } catch (DocumentException | SipException | InvalidArgumentException | ParseException e) {
-//            e.printStackTrace();
-//        }
-//    }
-//
-//    @Override
-//    public void afterPropertiesSet() throws Exception {
-//        String cmdType = "RecordInfo";
-//        responseMessageHandler.addHandler(cmdType, this);
-//    }
-//}
+package cn.iocoder.yudao.module.pms.controller.admin.yanfan.sip.handler.req.message.response.cmdType;
+
+import cn.iocoder.yudao.module.pms.controller.admin.yanfan.sip.handler.req.ReqAbstractHandler;
+import cn.iocoder.yudao.module.pms.controller.admin.yanfan.sip.handler.req.message.IMessageHandler;
+import cn.iocoder.yudao.module.pms.controller.admin.yanfan.sip.handler.req.message.response.ResponseMessageHandler;
+import cn.iocoder.yudao.module.pms.controller.admin.yanfan.utils.SipUtil;
+import cn.iocoder.yudao.module.pms.controller.admin.yanfan.utils.XmlUtil;
+import cn.iocoder.yudao.module.pms.dal.dataobject.yanfan.sip.device.YfSipDeviceDO;
+import cn.iocoder.yudao.module.pms.service.yanfan.sip.ISipCacheService;
+import cn.iocoder.yudao.module.pms.service.yanfan.sip.RecordCacheManager;
+import cn.iocoder.yudao.module.pms.service.yanfan.sip.model.RecordItem;
+import cn.iocoder.yudao.module.pms.service.yanfan.sip.model.RecordList;
+import lombok.extern.slf4j.Slf4j;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.sip.InvalidArgumentException;
+import javax.sip.RequestEvent;
+import javax.sip.SipException;
+import java.text.ParseException;
+import java.util.Iterator;
+
+@Slf4j
+@Component
+public class RecordInfoHandler extends ReqAbstractHandler implements InitializingBean, IMessageHandler {
+
+    @Autowired
+    private ResponseMessageHandler responseMessageHandler;
+
+    @Autowired
+    private ISipCacheService sipCacheService;
+
+    @Autowired
+    private RecordCacheManager recordCacheManager;
+    @Override
+    public void handlerCmdType(RequestEvent evt, YfSipDeviceDO device, Element element) {
+        try {
+            // 回复200 OK
+            responseAck(evt);
+            Element rootElement = getRootElement(evt);
+            String deviceId = rootElement.element("DeviceID").getText();
+            String sn = XmlUtil.getText(rootElement, "SN");
+            String sumNum = XmlUtil.getText(rootElement, "SumNum");
+            String recordkey = deviceId + ":" + sn;
+            int recordnum = 0;
+            RecordList recordList = recordCacheManager.get(recordkey);
+            recordList.setDeviceID(deviceId);
+            Element recordListElement = rootElement.element("RecordList");
+            if (recordListElement == null || sumNum == null || sumNum.equals("")) {
+                log.info("无录像数据");
+            } else {
+                Iterator<Element> recordListIterator = recordListElement.elementIterator();
+                if (recordListIterator != null) {
+                    while (recordListIterator.hasNext()) {
+                        Element itemRecord = recordListIterator.next();
+                        Element recordElement = itemRecord.element("DeviceID");
+                        if (recordElement == null) {
+                            continue;
+                        }
+                        RecordItem item = new RecordItem();
+                        item.setStart(SipUtil.ISO8601Totimestamp(XmlUtil.getText(itemRecord, "StartTime")));
+                        item.setEnd(SipUtil.ISO8601Totimestamp(XmlUtil.getText(itemRecord, "EndTime")));
+                        recordList.addItem(item);
+                        recordnum++;
+                    }
+                }
+            }
+            log.info("getSumNum:{}", recordList.getSumNum());
+            if (recordList.getSumNum() + recordnum == Integer.parseInt(sumNum)) {
+                //时间合并 保存到redia
+                recordList.mergeItems();
+                log.info("mergeItems recordList:{}", recordList);
+                recordCacheManager.remove(recordkey);
+                sipCacheService.setRecordList(recordkey, recordList);
+                //发布设备property到emqx
+            } else {
+                recordList.setSumNum(recordList.getSumNum() + recordnum);
+                recordCacheManager.put(recordkey, recordList);
+            }
+        } catch (DocumentException | SipException | InvalidArgumentException | ParseException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public void afterPropertiesSet() throws Exception {
+        String cmdType = "RecordInfo";
+        responseMessageHandler.addHandler(cmdType, this);
+    }
+}

+ 1 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/yanfan/sip/ZmlHookServiceImpl.java

@@ -221,7 +221,7 @@ public class ZmlHookServiceImpl implements IZmlHookService {
                 sinfo.setPlayer(0);
                 sinfo.setPlayer(0);
                 sinfo.setOnPlaytime(0);
                 sinfo.setOnPlaytime(0);
                 //todo yf
                 //todo yf
-//                playService.closeStream(sinfo.getDeviceId(), sinfo.getChannelId(), streamId);
+                playService.closeStream(sinfo.getDeviceId(), sinfo.getChannelId(), streamId);
 
 
             }
             }
             videoSessionManager.put(sinfo, null);
             videoSessionManager.put(sinfo, null);

+ 1 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/yanfan/sip/device/channel/YfSipDeviceChannelServiceImpl.java

@@ -118,6 +118,7 @@ public class YfSipDeviceChannelServiceImpl implements YfSipDeviceChannelService
     public Long createYfSipDeviceChannel(YfSipDeviceChannelSaveReqVO createReqVO) {
     public Long createYfSipDeviceChannel(YfSipDeviceChannelSaveReqVO createReqVO) {
         // 插入
         // 插入
         YfSipDeviceChannelDO yfSipDeviceChannel = BeanUtils.toBean(createReqVO, YfSipDeviceChannelDO.class);
         YfSipDeviceChannelDO yfSipDeviceChannel = BeanUtils.toBean(createReqVO, YfSipDeviceChannelDO.class);
+        yfSipDeviceChannel.setTenantId("1");
         yfSipDeviceChannelMapper.insert(yfSipDeviceChannel);
         yfSipDeviceChannelMapper.insert(yfSipDeviceChannel);
         // 返回
         // 返回
         return yfSipDeviceChannel.getId();
         return yfSipDeviceChannel.getId();