Browse Source

Merge branch 'master' of http://124.70.58.209:3000/ytrd-project-management/GeoHazardMonitor

wyyay 1 year ago
parent
commit
fdb90036db
19 changed files with 512 additions and 135 deletions
  1. 2 0
      .idea/encodings.xml
  2. 75 0
      business-service/src/main/java/com/ozs/service/entity/BaseCameraVersion.java
  3. 16 0
      business-service/src/main/java/com/ozs/service/entity/vo/UpdateDeviceSn.java
  4. 14 0
      business-service/src/main/java/com/ozs/service/mapper/BaseCameraVersionMapper.java
  5. 13 0
      business-service/src/main/java/com/ozs/service/service/BaseCameraVersionService.java
  6. 51 0
      business-service/src/main/java/com/ozs/service/service/impl/BaseCameraVersionServiceImpl.java
  7. 17 22
      business-service/src/main/java/com/ozs/service/utils/PublishCallback.java
  8. 135 47
      business-service/src/main/java/com/ozs/service/utils/PublishClient.java
  9. 61 31
      business-service/src/main/java/com/ozs/service/utils/SubscribeClient.java
  10. 1 0
      hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseCameraManagementController.java
  11. 68 0
      hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseCameraVersionController.java
  12. 2 0
      hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseRailwayManagementController.java
  13. 12 1
      hazard-admin/src/main/java/com/ozs/web/controller/mqtt/MqttController.java
  14. 5 0
      hazard-admin/src/main/java/com/ozs/web/controller/system/SysDeptController.java
  15. 1 1
      hazard-admin/src/main/java/com/ozs/web/controller/system/SysUserController.java
  16. 5 0
      hazard-admin/src/main/resources/application.yml
  17. 32 32
      hazard-admin/src/main/resources/logback.xml
  18. BIN
      hazard-admin/src/main/resources/template/SysUser.xlsx
  19. 2 1
      hazard-sdk/src/main/resources/logback.xml

+ 2 - 0
.idea/encodings.xml

@@ -7,5 +7,7 @@
     <file url="file://$PROJECT_DIR$/hazard-admin/src/main/resources" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/hazard-sdk/src/main/java" charset="UTF-8" />
     <file url="file://$PROJECT_DIR$/hazard-sdk/src/main/resources" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
   </component>
 </project>

+ 75 - 0
business-service/src/main/java/com/ozs/service/entity/BaseCameraVersion.java

@@ -0,0 +1,75 @@
+package com.ozs.service.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.ozs.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+/**
+ * @Author : sunhh
+ * @create 2023/4/24 11:02
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ApiModel("相机版本管理表")
+public class BaseCameraVersion {
+
+    /**
+     * 主键ID
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 版本号
+     */
+    private String versionNum;
+
+    /**
+     * 版本名称
+     */
+    private String versionName;
+
+    /**
+     * 升级类型 1:算法升级,2:硬件升级,3:算法及硬件升级
+     */
+    private String upgradeType;
+
+    /**
+     * 版本地址
+     */
+    private String versionAddress;
+
+    /**
+     * 创建人
+     */
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+
+    /**
+     * 修改人
+     */
+    private String updateBy;
+
+    /**
+     * 修改时间
+     */
+    private Date updateTime;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 16 - 0
business-service/src/main/java/com/ozs/service/entity/vo/UpdateDeviceSn.java

@@ -0,0 +1,16 @@
+package com.ozs.service.entity.vo;
+
+
+import lombok.Data;
+
+/**
+ * @author Administrator
+ */
+@Data
+public class UpdateDeviceSn {
+    private String Name;
+    private Integer type;
+    private String md5;
+    private String url;
+    private String sign;
+}

+ 14 - 0
business-service/src/main/java/com/ozs/service/mapper/BaseCameraVersionMapper.java

@@ -0,0 +1,14 @@
+package com.ozs.service.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ozs.service.entity.BaseCameraManagement;
+import com.ozs.service.entity.BaseCameraVersion;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @Author : sunhh
+ * @create 2023/4/24 11:24
+ */
+@Mapper
+public interface BaseCameraVersionMapper extends BaseMapper<BaseCameraVersion> {
+}

+ 13 - 0
business-service/src/main/java/com/ozs/service/service/BaseCameraVersionService.java

@@ -0,0 +1,13 @@
+package com.ozs.service.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ozs.common.core.domain.AjaxResult;
+import com.ozs.service.entity.BaseCameraVersion;
+
+/**
+ * @Author : sunhh
+ * @create 2023/4/24 11:21
+ */
+public interface BaseCameraVersionService extends IService<BaseCameraVersion> {
+    AjaxResult cameraVersionAdd(BaseCameraVersion baseCameraVersion, String userId);
+}

+ 51 - 0
business-service/src/main/java/com/ozs/service/service/impl/BaseCameraVersionServiceImpl.java

@@ -0,0 +1,51 @@
+package com.ozs.service.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ozs.common.core.domain.AjaxResult;
+import com.ozs.common.utils.StringUtils;
+import com.ozs.service.entity.BaseCameraManagement;
+import com.ozs.service.entity.BaseCameraVersion;
+import com.ozs.service.entity.vo.Data;
+import com.ozs.service.mapper.BaseCameraManagementMapper;
+import com.ozs.service.mapper.BaseCameraVersionMapper;
+import com.ozs.service.service.BaseCameraVersionService;
+import net.bytebuddy.asm.Advice;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+/**
+ * @Author : sunhh
+ * @create 2023/4/24 11:22
+ */
+@Service
+public class BaseCameraVersionServiceImpl extends ServiceImpl<BaseCameraVersionMapper, BaseCameraVersion> implements BaseCameraVersionService {
+
+    @Autowired
+    private BaseCameraVersionMapper baseCameraVersionMapper;
+
+    @Override
+    public AjaxResult cameraVersionAdd(BaseCameraVersion baseCameraVersion, String userId) {
+        LambdaQueryWrapper<BaseCameraVersion> wrapper = new LambdaQueryWrapper<>();
+        if (!StringUtils.isEmptySunhh(baseCameraVersion) && !StringUtils.isEmptySunhh(baseCameraVersion.getVersionNum())) {
+            wrapper.eq(BaseCameraVersion::getVersionNum, baseCameraVersion.getVersionNum());
+        }
+        if (!StringUtils.isEmptySunhh(baseCameraVersion) && !StringUtils.isEmptySunhh(baseCameraVersion.getVersionName())) {
+            wrapper.eq(BaseCameraVersion::getVersionName, baseCameraVersion.getVersionName());
+        }
+        BaseCameraVersion baseCameraVersion1 = baseCameraVersionMapper.selectOne(wrapper);
+        if (StringUtils.isEmptySunhh(baseCameraVersion1)) {
+            baseCameraVersion.setCreateBy(userId);
+            baseCameraVersion.setUpdateBy(userId);
+            Date date = new Date();
+            baseCameraVersion.setCreateTime(date);
+            baseCameraVersion.setUpdateTime(date);
+            baseCameraVersionMapper.insert(baseCameraVersion);
+        } else {
+            return AjaxResult.error("当前版本号或版本名称已存在,请核对后在添加!");
+        }
+        return AjaxResult.success();
+    }
+}

+ 17 - 22
business-service/src/main/java/com/ozs/service/utils/PublishCallback.java

@@ -1,13 +1,15 @@
 package com.ozs.service.utils;
 
 import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
 import org.eclipse.paho.client.mqttv3.MqttCallback;
 import org.eclipse.paho.client.mqttv3.MqttMessage;
 
 /**
- *  callback回调:
+ * callback回调:
+ *
  * @author Administrator
  */
 public class PublishCallback implements MqttCallback {
@@ -28,30 +30,23 @@ public class PublishCallback implements MqttCallback {
     //接收已经预订的发布
     @Override
     public void messageArrived(String topic, MqttMessage message) throws Exception {
+        String sign = null;
+        String deviceSn=null;
         // subscribe后得到的消息会执行到这里面
         System.out.println("接收消息主题 : " + topic);
         System.out.println("接收消息Qos : " + message.getQos());
+        if ("heart".equals(topic)) {
+            String s = new String(message.getPayload());
+            s = "[" + s + "]";
+            JSONArray jsonArray = JSONArray.parseArray(s);
+            for (int i = 0; i < jsonArray.size(); i++) {
+                JSONObject object = jsonArray.getJSONObject(i);
+                sign = (String) object.get("sign");
+                deviceSn = (String) object.get("device_sn");
+            }
+            PublishClient.pull(sign,deviceSn);
+        }
         System.out.println("接收消息内容 : " + new String(message.getPayload()));
-    }
-
-    public static void main(String[] args) {
-        String s=new String("{\n" +
-                "    \"Name\": \"HeartRequest\",\n" +
-                "    \"device_sn\": \"202211010001\" \n" +
-                "    \"rssi\": 1,          \n" +
-                "    \"battery_level\":99,       \n" +
-                "    \"timestamp\": 1610959147, \n" +
-                "    \"language\": 0, \n" +
-                "    \"sw_ver\": \"LuatOS-Air_V3205_RDA8910_RBLFTVT_0xb0000__TW06-530_1.3.1\", \n" +
-                "    \"hw_ver\": \"vLuatOS-Air_V3205_RDA8910_RBLFTVT_0xb0000__TW06-530_1.3.1\", \n" +
-                "    \"stream\": 0, \n" +
-                "    \"model\":[\"Model_Helmet2_V213_P_c69cbfa9d7de4234f76d6f3811986e3a.bovai\",\"model_2\"], \n" +
-                "    \"type\": 0,\n" +
-                "    \"sign\": \"b867d0e545d9abbf74c2d11b62798250\"\n" +
-                "}");
-
-        JSONObject jsonObject =  JSON.parseObject(s);
-        Object sign = jsonObject.get("sign");
-        System.out.println(sign.toString());
+        
     }
 }

+ 135 - 47
business-service/src/main/java/com/ozs/service/utils/PublishClient.java

@@ -3,6 +3,7 @@ package com.ozs.service.utils;
 import com.alibaba.fastjson2.JSON;
 import com.ozs.service.entity.vo.Data;
 import com.ozs.service.entity.vo.Heartbeat;
+import com.ozs.service.entity.vo.UpdateDeviceSn;
 import org.eclipse.paho.client.mqttv3.MqttClient;
 import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
 import org.eclipse.paho.client.mqttv3.MqttDeliveryToken;
@@ -11,80 +12,167 @@ import org.eclipse.paho.client.mqttv3.MqttMessage;
 import org.eclipse.paho.client.mqttv3.MqttPersistenceException;
 import org.eclipse.paho.client.mqttv3.MqttTopic;
 import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
+import org.springframework.beans.factory.annotation.Value;
 
 
 /**
  * 发布客户端
+ *
  * @author Administrator
  */
 public class PublishClient {
-    //mqtt服务器地址
-    public static final String HOST = "tcp://124.70.58.209:1883";
-    //主题
-    public static final String TOPIC = "heart_DEVICESN";
-    //mqtt 客户机ID
-    private static final String clientid = "server";
-    private MqttClient client;//客户端实例
-    private MqttTopic topic11;//主题实例
-    private String userName = "guest";  //非必须
-    private String passWord = "guest";  //非必须
+    /**
+     * mqtt服务器地址
+     */
+    public static  final String HOST="tcp://124.70.58.209:1883";
+    /**
+     * 主题
+     */
+    private final String topic;
+    /**
+     * 客户端实例
+     */
+    private final MqttClient client;
+    /**
+     * 主题实例
+     */
+    private MqttTopic topic11;
+    private static final String USER_NAME = "guest";
+    private static final String PASS_WORD = "guest";
     private MqttMessage message;
-    //初始化客户端实例
-    public PublishClient() throws MqttException {
-        //MemoryPersistence设置clientid的保存形式,默认为以内存保存
-        client = new MqttClient(HOST, clientid, new MemoryPersistence());
+
+    /**
+     * 初始化客户端实例
+     * @param topic
+     * @param clientId
+     * @throws MqttException
+     */
+    public PublishClient(String topic,String clientId) throws MqttException {
+        /**
+         * mqtt 客户机ID
+         * heart_DEVICESN
+         */
+        this.topic=topic;
+        /**
+         * MemoryPersistence设置clientId的保存形式,默认为以内存保存
+         */
+        client = new MqttClient(HOST, clientId, new MemoryPersistence());
         connect();
     }
-    //连接服务器
+
+    /**
+     * 连接服务器
+     */
     private void connect() {
-        //连接配置
+        /**
+         * 连接配置
+         */
         MqttConnectOptions options = new MqttConnectOptions();
-        options.setCleanSession(true);//不保存,每次重启新client
-        options.setUserName(userName);
-        options.setPassword(passWord.toCharArray());
-        // 设置超时时间
+        /**
+         * 不保存,每次重启新client
+         */
+        options.setCleanSession(true);
+        options.setUserName(USER_NAME);
+        options.setPassword(PASS_WORD.toCharArray());
+        /**
+         * 设置超时时间
+         */
         options.setConnectionTimeout(10);
-        // 设置会话心跳时间
+        /**
+         * 设置会话心跳时间
+         */
         options.setKeepAliveInterval(20);
         try {
-            //设置发布回调
+            /**
+             * 设置发布回调
+             */
             client.setCallback(new PublishCallback());
             client.connect(options);
-            topic11 = client.getTopic(TOPIC);
+            topic11 = client.getTopic(topic);
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
-    //发布
-    public void publish(MqttTopic topic , MqttMessage message) throws MqttPersistenceException,
+
+    /**
+     * 发布
+     * @param topic
+     * @param message
+     * @throws MqttPersistenceException
+     * @throws MqttException
+     */
+    public void publish(MqttTopic topic, MqttMessage message) throws MqttPersistenceException,
             MqttException {
         MqttDeliveryToken token = topic.publish(message);
         token.waitForCompletion();
-        System.out.println("message is published completely! "+ token.isComplete());
+        System.out.println("message is published completely! " + token.isComplete());
+    }
+    
+    public static void pull(String sign,String deviceSn) throws MqttException, InterruptedException {
+        /**
+         * 发布客户端
+         */
+        PublishClient server = new PublishClient("heart_"+deviceSn,"heart_"+deviceSn);
+        Heartbeat test = new Heartbeat();
+        test.setName("HeartResponse");
+        Data data = new Data();
+        data.setAlarm(0);
+        data.setStream(0);
+        test.setData(data);
+        test.setCode(200);
+        test.setSign(sign);
+        String s = JSON.toJSONString(test);
+        server.message = new MqttMessage();
+        /**
+         * 保证消息能到达一次
+         */
+        server.message.setQos(1);
+        /**
+         * 消息保留
+         */
+        server.message.setRetained(true);
+        /**
+         * 消息内容
+         */
+        server.message.setPayload(s.getBytes());
+        /**
+         * 发布
+         */
+        server.publish(server.topic11, server.message);
     }
-    //测试类
-    public static void main(String[] args) throws MqttException, InterruptedException {
-        //发布客户端
-        PublishClient server = new PublishClient();
-        //每隔10s发一条
-        for (;;){
-            Heartbeat test = new Heartbeat();
-            test.setName("HeartResponse");
-            Data data = new Data();
-            data.setAlarm(0);
-            data.setStream(0);
-            test.setData(data);
-            test.setCode(200);
-            test.setSign("b867d0e545d9abbf74c2d11b62798250");
-            String s = JSON.toJSONString(test);
-
 
+    public static void updateDeviceSn(String sign){
+        /**
+         * 发布客户端
+         */
+        try {
+            PublishClient server = new PublishClient(sign,sign);
+            UpdateDeviceSn updateDeviceSn = new UpdateDeviceSn();
+            updateDeviceSn.setName("UpdateRequest");
+            updateDeviceSn.setType(0);
+            updateDeviceSn.setMd5("b867d0e545d9abbf74c2d11b62798250");
+            updateDeviceSn.setSign("b867d0e545d9abbf74c2d11b62798250");
+            updateDeviceSn.setUrl("https://example.com/download/Model_Helmet2_V213_P_c69cbfa9d7de4234f76d6f3811986e3a.bovai");
+            String s = JSON.toJSONString(updateDeviceSn);
             server.message = new MqttMessage();
-            server.message.setQos(1);//保证消息能到达一次
-            server.message.setRetained(true);//消息保留
-            server.message.setPayload(s.getBytes());//消息内容
-            server.publish(server.topic11 , server.message);//发布
-            Thread.sleep(10000);
+            /**
+             * 保证消息能到达一次
+             */
+            server.message.setQos(1);
+            /**
+             * 消息保留
+             */
+            server.message.setRetained(true);
+            /**
+             * 消息内容
+             */
+            server.message.setPayload(s.getBytes());
+            /**
+             * 发布
+             */
+            server.publish(server.topic11, server.message);
+        } catch (MqttException e) {
+            System.out.println(e.getMessage());
         }
     }
 }

+ 61 - 31
business-service/src/main/java/com/ozs/service/utils/SubscribeClient.java

@@ -5,56 +5,86 @@ import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
 import org.eclipse.paho.client.mqttv3.MqttException;
 import org.eclipse.paho.client.mqttv3.MqttTopic;
 import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
 
 import java.util.concurrent.ScheduledExecutorService;
 
 /**
  * 订阅客户端
+ *
  * @author Administrator
  */
 public class SubscribeClient {
-    //mqtt服务器ip
-    public static final String HOST = "tcp://124.70.58.209:1883";
-    //主题
-    public static final String TOPIC1 = "heart";
-//    public static final String TOPIC1 = "heart_DEVICESN";
-    //mqtt 客户机ID
-    private String clientid = "client";
-    private MqttClient client;
-    private MqttConnectOptions options;
-    private String userName = "guest";
-    private String passWord = "guest";
+    /**
+     * mqtt服务器ip
+     */
+    public static  final String HOST="tcp://124.70.58.209:1883";
+    /**
+     * 主题
+     */
+    public String topic;
+    /**
+     * mqtt 客户机ID
+     */
+    private final String clientId;
+    private static final String USER_NAME = "guest";
+    private static final String PASS_WORD = "guest";
     @SuppressWarnings("unused")
     private ScheduledExecutorService scheduler;
-    public SubscribeClient(String clientid){
-        this.clientid = clientid;
+
+    public SubscribeClient(String clientId, String topic) {
+        this.clientId = clientId;
+        this.topic = topic;
     }
+
     public void start() {
         try {
-            // host为主机名,clientid即连接MQTT的客户端ID,一般以唯一标识符表示,MemoryPersistence设置clientid的保存形式,默认为以内存保存
-            client = new MqttClient(HOST, clientid, new MemoryPersistence());
-            // MQTT的连接设置
-            options = new MqttConnectOptions();
-            // 设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,设置为true表示每次连接到服务器都以新的身份连接
+            /**
+             *  host为主机名,clientId即连接MQTT的客户端ID,一般以唯一标识符表示,MemoryPersistence设置clientId的保存形式,默认为以内存保存
+             */
+            MqttClient client = new MqttClient(HOST, this.clientId, new MemoryPersistence());
+            /**
+             * MQTT的连接设置
+             */
+            MqttConnectOptions options = new MqttConnectOptions();
+            /**
+             *  设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,设置为true表示每次连接到服务器都以新的身份连接
+             */
             options.setCleanSession(true);
-            // 设置连接的用户名
-            options.setUserName(userName);
-            // 设置连接的密码
-            options.setPassword(passWord.toCharArray());
-            // 设置超时时间 单位为秒
+            /**
+             * 设置连接的用户名
+             */
+            options.setUserName(USER_NAME);
+            /**
+             * 设置连接的密码
+             */
+            options.setPassword(PASS_WORD.toCharArray());
+            /**
+             * 设置超时时间 单位为秒
+             */
             options.setConnectionTimeout(10);
-            // 设置会话心跳时间 单位为秒 服务器会每隔1.5*20秒的时间向客户端发送个消息判断客户端是否在线,但这个方法并没有重连的机制
+            /**
+             *  设置会话心跳时间 单位为秒 服务器会每隔1.5*20秒的时间向客户端发送个消息判断客户端是否在线,但这个方法并没有重连的机制
+             */
             options.setKeepAliveInterval(20);
-            // 设置回调
+            /**
+             * 设置回调
+             */
             client.setCallback(new PublishCallback());
-            MqttTopic topic = client.getTopic(TOPIC1);
-            //setWill方法,如果项目中需要知道客户端是否掉线可以调用该方法。设置最终端口的通知消息
-            // 遗嘱
+            MqttTopic topic = client.getTopic(this.topic);
+            /**
+             * setWill方法,如果项目中需要知道客户端是否掉线可以调用该方法。设置最终端口的通知消息
+             *  遗嘱
+             */
             options.setWill(topic, "close".getBytes(), 2, true);
             client.connect(options);
-            //订阅消息
-            int[] Qos  = {1};
-            String[] topic1 = {TOPIC1};
+            /**
+             * 订阅消息
+             */
+            int[] Qos = {1};
+            String[] topic1 = {this.topic};
             client.subscribe(topic1, Qos);
 
         } catch (Exception e) {

+ 1 - 0
hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseCameraManagementController.java

@@ -370,6 +370,7 @@ public class BaseCameraManagementController extends BaseController {
         BaseCameraManagement management = baseCameraManagementService.getById(baseCameraManagement.getId());
         baseCameraManagement.setUpdateBy(getUserId());
         baseCameraManagement.setCreateBy(management.getCreateBy());
+        baseCameraManagement.setUpdateTime(new Date());
         LambdaQueryWrapper<BaseDeviceDynamicManagement> queryWrapper = new LambdaQueryWrapper<BaseDeviceDynamicManagement>();
         if (!ObjectUtils.isEmpty(management.getCameraCode())) {
             queryWrapper.eq(BaseDeviceDynamicManagement::getCameraCode, management.getCameraCode());

+ 68 - 0
hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseCameraVersionController.java

@@ -0,0 +1,68 @@
+package com.ozs.web.controller.accountmanagment;
+
+import com.ozs.common.annotation.Log;
+import com.ozs.common.core.controller.BaseController;
+import com.ozs.common.core.domain.AjaxResult;
+import com.ozs.common.enums.BusinessType;
+import com.ozs.common.utils.StringUtils;
+import com.ozs.service.entity.BaseCameraVersion;
+import com.ozs.service.service.BaseCameraVersionService;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 相机版本管理
+ * @Author : sunhh
+ * @create 2023/4/24 11:00
+ */
+@Slf4j
+@RestController
+@RequestMapping("/baseCameraVersion")
+public class BaseCameraVersionController extends BaseController {
+
+    @Autowired
+    private BaseCameraVersionService baseCameraVersionService;
+
+    /**
+     * 相机版本管理 新增
+     *
+     * @param baseCameraVersion
+     * @return
+     */
+    @ApiOperation(value = "相机版本管理 新增")
+    @PostMapping("/cameraVersionAdd")
+    @Log(title = "机车信息管理", businessType = BusinessType.INSERT)
+    public AjaxResult cameraVersionAdd(@RequestBody BaseCameraVersion baseCameraVersion) {
+        if (StringUtils.isEmptySunhh(baseCameraVersion) || StringUtils.isEmptySunhh(baseCameraVersion.getVersionNum())
+                || StringUtils.isEmptySunhh(baseCameraVersion.getVersionName())
+                || StringUtils.isEmptySunhh(baseCameraVersion.getVersionAddress())) {
+            return AjaxResult.error("相机版本号、版本名称、版本地址不能为空!");
+        }
+        return baseCameraVersionService.cameraVersionAdd(baseCameraVersion, getUserId());
+    }
+
+    /**
+     * 相机版本管理 删除
+     *
+     * @param ids
+     * @return
+     */
+    @ApiOperation(value = "相机版本管理 删除")
+    @DeleteMapping("/cameraVersionDelete/{ids}")
+    @Log(title = "相机版本管理", businessType = BusinessType.DELETE)
+    public AjaxResult cameraVersionDelete(@PathVariable List<Long> ids) {
+        if (StringUtils.isEmptySunhh(ids)) {
+            return AjaxResult.error("删除ID不能为空!");
+        }
+        boolean delete = baseCameraVersionService.removeByIds(ids);
+        if (delete) {
+            return AjaxResult.success();
+        } else {
+            return AjaxResult.error();
+        }
+    }
+}

+ 2 - 0
hazard-admin/src/main/java/com/ozs/web/controller/accountmanagment/BaseRailwayManagementController.java

@@ -40,6 +40,7 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import java.io.InputStream;
+import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -211,6 +212,7 @@ public class BaseRailwayManagementController extends BaseController {
             }
         }
         baseRailwayManagement.setUpdateBy(getUserId());
+        baseRailwayManagement.setUpdateTime(new Date());
         if (baseRailwayManagementService.updateById(baseRailwayManagement)) {
             return AjaxResult.success();
         }

+ 12 - 1
hazard-admin/src/main/java/com/ozs/web/controller/mqtt/MqttController.java

@@ -4,9 +4,11 @@ package com.ozs.web.controller.mqtt;
 import com.ozs.common.annotation.Log;
 import com.ozs.common.core.domain.AjaxResult;
 import com.ozs.common.enums.BusinessType;
+import com.ozs.service.utils.PublishClient;
 import com.ozs.service.utils.SubscribeClient;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.MqttException;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -25,7 +27,16 @@ public class MqttController {
     @GetMapping("/deviceHeartbeat")
     @Log(title = "MQTT", businessType = BusinessType.SELECT)
     public AjaxResult selectCameraAll() {
-        new SubscribeClient("client_1").start();
+        new SubscribeClient("heart","heart").start();
+        return AjaxResult.success();
+    }
+
+    @ApiOperation(value = "更新固件和算法")
+    @GetMapping("/updateDeviceSn")
+    @Log(title = "MQTT", businessType = BusinessType.UPDATE)
+    public AjaxResult updateDeviceSn(){
+        PublishClient.updateDeviceSn("update_DEVICESN");
+        new SubscribeClient("update","update").start();
         return AjaxResult.success();
     }
 }

+ 5 - 0
hazard-admin/src/main/java/com/ozs/web/controller/system/SysDeptController.java

@@ -193,6 +193,11 @@ public class SysDeptController extends BaseController {
                 }
             }
         }
+        for (SysDept sysDept : list) {
+            if (ObjectUtils.isEmpty(sysDept.getParentName())) {
+                sysDept.setParentName(sysDept.getDeptName());
+            }
+        }
         return list;
     }
 }

+ 1 - 1
hazard-admin/src/main/java/com/ozs/web/controller/system/SysUserController.java

@@ -326,7 +326,7 @@ public class SysUserController extends BaseController {
         for (Long id : Ids) {
             BaseUser baseUser = baseUserService.getUserById(id);
             if (baseUser.getUserName().equals("admin")) {
-                return success("admin账号不能修改");
+                return error("admin账号不能删除");
             }
         }
         return toAjax(userService.deleteUserByIds(Ids));

+ 5 - 0
hazard-admin/src/main/resources/application.yml

@@ -162,3 +162,8 @@ file:
   avatarUrl: /data/service/avatar/
   #文件访问前缀
   filreUrl: http://124.71.171.71:18878
+  
+mqtt:
+  host: tcp://124.70.58.209:1883
+  userName: guest
+  passWord: guest

+ 32 - 32
hazard-admin/src/main/resources/logback.xml

@@ -2,7 +2,7 @@
 <configuration>
     <!-- 日志存放路径 -->
     <property name="log.path" value="/data/service/hazard-admin/logs"/>
-<!--    <property name="log.path" value="/Users/sunhuanhuan/Documents/project/106/project/logs"/>-->
+    <!--  <property name="log.path" value="/Users/sunhuanhuan/Documents/project/106/project/logs"/>-->
     <!-- 日志输出格式 -->
     <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n"/>
 
@@ -14,19 +14,19 @@
     </appender>
 
     <!-- 系统日志输出 -->
-	<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
-	    <file>${log.path}/sys-info.log</file>
+    <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/sys-info.log</file>
         <!-- 循环政策:基于时间创建日志文件 -->
-		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
             <!-- 日志文件名格式 -->
-			<fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
-			<!-- 日志最大的历史 60天 -->
-			<maxHistory>60</maxHistory>
-		</rollingPolicy>
-		<encoder>
-			<pattern>${log.pattern}</pattern>
-		</encoder>
-		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <fileNamePattern>${log.path}/sys-info.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <!-- 过滤的级别 -->
             <level>INFO</level>
             <!-- 匹配时的操作:接收(记录) -->
@@ -34,16 +34,16 @@
             <!-- 不匹配时的操作:拒绝(不记录) -->
             <onMismatch>DENY</onMismatch>
         </filter>
-	</appender>
+    </appender>
 
-	<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
-	    <file>${log.path}/sys-error.log</file>
+    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/sys-error.log</file>
         <!-- 循环政策:基于时间创建日志文件 -->
         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
             <!-- 日志文件名格式 -->
             <fileNamePattern>${log.path}/sys-error.%d{yyyy-MM-dd}.log</fileNamePattern>
-			<!-- 日志最大的历史 60天 -->
-			<maxHistory>60</maxHistory>
+            <!-- 日志最大的历史 60天 -->
+            <maxHistory>60</maxHistory>
         </rollingPolicy>
         <encoder>
             <pattern>${log.pattern}</pattern>
@@ -51,16 +51,16 @@
         <filter class="ch.qos.logback.classic.filter.LevelFilter">
             <!-- 过滤的级别 -->
             <level>ERROR</level>
-			<!-- 匹配时的操作:接收(记录) -->
+            <!-- 匹配时的操作:接收(记录) -->
             <onMatch>ACCEPT</onMatch>
-			<!-- 不匹配时的操作:拒绝(不记录) -->
+            <!-- 不匹配时的操作:拒绝(不记录) -->
             <onMismatch>DENY</onMismatch>
         </filter>
     </appender>
 
-	<!-- 用户访问日志输出  -->
+    <!-- 用户访问日志输出  -->
     <appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
-		<file>${log.path}/sys-user.log</file>
+        <file>${log.path}/sys-user.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
             <!-- 按天回滚 daily -->
             <fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern>
@@ -72,22 +72,22 @@
         </encoder>
     </appender>
 
-	<!-- 系统模块日志级别控制  -->
-	<logger name="com.ozs" level="info" />
-	<!-- Spring日志级别控制  -->
-	<logger name="org.springframework" level="warn" />
+    <!-- 系统模块日志级别控制  -->
+    <logger name="com.ozs" level="info"/>
+    <!-- Spring日志级别控制  -->
+    <logger name="org.springframework" level="warn"/>
 
-	<root level="info">
-		<appender-ref ref="console" />
-	</root>
+    <root level="info">
+        <appender-ref ref="console"/>
+    </root>
 
-	<!--系统操作日志-->
+    <!--系统操作日志-->
     <root level="info">
-        <appender-ref ref="file_info" />
-        <appender-ref ref="file_error" />
+        <appender-ref ref="file_info"/>
+        <appender-ref ref="file_error"/>
     </root>
 
-	<!--系统用户操作日志-->
+    <!--系统用户操作日志-->
     <logger name="sys-user" level="info">
         <appender-ref ref="sys-user"/>
     </logger>

BIN
hazard-admin/src/main/resources/template/SysUser.xlsx


+ 2 - 1
hazard-sdk/src/main/resources/logback.xml

@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration>
     <!-- 日志存放路径 -->
-	<property name="log.path" value="/home/base/logs" />
+<!--	<property name="log.path" value="/home/base/logs" />-->
+    <property name="log.path" value="/Users/sunhuanhuan/Documents/project/106/project/logs"/>
     <!-- 日志输出格式 -->
 	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />