From 3a0f24e5517b574a203cec8088fdd3d9165862aa Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期二, 06 六月 2023 17:05:24 +0800
Subject: [PATCH] 增加管线泄露报警入库

---
 ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumer.java                                 |  174 ++++++++
 ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/IGlobalAlarmService.java           |    2 
 ard-work/src/main/java/com/ruoyi/utils/mqtt/PropertiesUtil.java                               |   54 ++
 ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskStepServiceImpl.java |    4 
 ard-work/src/main/java/com/ruoyi/config/AsyncConfiguration.java                               |   23 +
 ard-work/src/main/resources/mapper/alarm/ArdAlarmTubeMapper.xml                               |  117 +++++
 ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/service/impl/ArdAlarmTubeServiceImpl.java    |   90 ++++
 ruoyi-admin/src/main/resources/application.yml                                                |    2 
 ard-work/src/main/resources/mapper/inspect/ArdVideoInspectRecordMapper.xml                    |    4 
 ard-work/pom.xml                                                                              |    6 
 ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/mapper/ArdAlarmTubeMapper.java               |   62 ++
 ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/service/IArdAlarmTubeService.java            |   62 ++
 ard-work/src/main/resources/mapper/alarmpoints/ArdTubesDetailsMapper.xml                      |    2 
 ruoyi-admin/src/main/resources/application-druid.yml                                          |   10 
 ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/GlobalAlarmServiceImpl.java        |   42 +
 ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/domain/ArdAlarmTube.java                     |  210 ++++++++++
 ruoyi-admin/src/main/resources/logback.xml                                                    |   19 
 ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java                      |  116 ++---
 ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java     |    2 
 ruoyi-admin/src/main/resources/application-ard.yml                                            |   12 
 ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/controller/ArdAlarmTubeController.java       |  105 +++++
 ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java                         |  100 ++++
 22 files changed, 1,131 insertions(+), 87 deletions(-)

diff --git a/ard-work/pom.xml b/ard-work/pom.xml
index 2b2665c..004fd48 100644
--- a/ard-work/pom.xml
+++ b/ard-work/pom.xml
@@ -77,6 +77,12 @@
             <artifactId>forest-spring-boot-starter</artifactId>
             <version>1.5.22</version>
         </dependency>
+        <!--mqtt-->
+        <dependency>
+            <groupId>org.springframework.integration</groupId>
+            <artifactId>spring-integration-mqtt</artifactId>
+            <version>6.0.3</version>
+        </dependency>
         <dependency>
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-system</artifactId>
diff --git a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/GlobalAlarmServiceImpl.java b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/GlobalAlarmServiceImpl.java
index 823bd40..bf0c6cd 100644
--- a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/GlobalAlarmServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/GlobalAlarmServiceImpl.java
@@ -1,8 +1,18 @@
 package com.ruoyi.alarm.globalAlarm.service;
 
+import com.alibaba.fastjson2.JSONObject;
 import com.ruoyi.alarm.globalAlarm.domain.GlobalAlarmCondition;
 import com.ruoyi.alarm.stealAlarm.domain.ArdAlarmStealelec;
 import com.ruoyi.alarm.stealAlarm.mapper.ArdAlarmStealelecMapper;
+import com.ruoyi.alarm.tubeAlarm.domain.ArdAlarmTube;
+import com.ruoyi.alarm.tubeAlarm.mapper.ArdAlarmTubeMapper;
+import com.ruoyi.alarm.tubeAlarm.service.IArdAlarmTubeService;
+import com.ruoyi.alarmpoints.tube.domain.ArdTubes;
+import com.ruoyi.alarmpoints.tube.domain.ArdTubesDetails;
+import com.ruoyi.alarmpoints.tube.mapper.ArdTubesDetailsMapper;
+import com.ruoyi.alarmpoints.tube.mapper.ArdTubesMapper;
+import com.ruoyi.common.utils.uuid.UUID;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -20,7 +30,12 @@
 public class GlobalAlarmServiceImpl implements IGlobalAlarmService {
     @Resource
     ArdAlarmStealelecMapper ardAlarmStealelecMapper;
-
+    @Resource
+    IArdAlarmTubeService ardAlarmTubeService;
+    @Resource
+    ArdTubesMapper ardTubesMapper;
+    @Resource
+    ArdTubesDetailsMapper ardTubesDetailsMapper;
     @Override
     public List<Object> selectAlarmLogs(GlobalAlarmCondition condition) {
         switch (condition.getCommand()) {
@@ -32,4 +47,29 @@
         }
     }
 
+    @Override
+    @Async("alarmExecutor")
+    public void receiveAlarm(String topic,String message)
+    {
+        switch (topic)
+        {
+            case "tube":
+                ArdAlarmTube ardAlarmTube = JSONObject.parseObject(message,ArdAlarmTube.class);
+                ardAlarmTube.setId(UUID.randomUUID().toString().replace("-",""));
+                ArdTubesDetails atd=new ArdTubesDetails();
+                atd.setReelNumber(ardAlarmTube.getTubeId());
+                List<ArdTubesDetails> ardTubesDetails = ardTubesDetailsMapper.selectArdTubesDetailsList(atd);
+                if(ardTubesDetails.size()>0)
+                {
+                    String tubeId = ardTubesDetails.get(0).getTubeId();
+                    ArdTubes ardTubes = ardTubesMapper.selectArdTubesById(tubeId);
+                    ardAlarmTube.setTubeName(ardTubes.getName());
+                    ardAlarmTube.setColor(ardTubes.getColor());
+                    ardAlarmTube.setPipeDiameter(ardTubes.getPipeDiameter());
+                    ardAlarmTube.setTubeType(ardTubes.getType());
+                }
+                int i = ardAlarmTubeService.insertArdAlarmTube(ardAlarmTube);
+                break;
+        }
+    }
 }
diff --git a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/IGlobalAlarmService.java b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/IGlobalAlarmService.java
index 633c937..d376822 100644
--- a/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/IGlobalAlarmService.java
+++ b/ard-work/src/main/java/com/ruoyi/alarm/globalAlarm/service/IGlobalAlarmService.java
@@ -13,4 +13,6 @@
  **/
 public interface IGlobalAlarmService {
     public List<Object> selectAlarmLogs(GlobalAlarmCondition condition);
+
+    public void receiveAlarm(String topic,String message);
 }
diff --git a/ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/controller/ArdAlarmTubeController.java b/ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/controller/ArdAlarmTubeController.java
new file mode 100644
index 0000000..5b74143
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/controller/ArdAlarmTubeController.java
@@ -0,0 +1,105 @@
+package com.ruoyi.alarm.tubeAlarm.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.alarm.tubeAlarm.domain.ArdAlarmTube;
+import com.ruoyi.alarm.tubeAlarm.service.IArdAlarmTubeService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+
+/**
+ * 绠$嚎娉勯湶鎶ヨController
+ * 
+ * @author 鍒樿嫃涔�
+ * @date 2023-06-06
+ */
+@RestController
+@RequestMapping("/alarm/tubeAlarm")
+public class ArdAlarmTubeController extends BaseController
+{
+    @Autowired
+    private IArdAlarmTubeService ardAlarmTubeService;
+
+    /**
+     * 鏌ヨ绠$嚎娉勯湶鎶ヨ鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('alarm:tubeAlarm:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(ArdAlarmTube ardAlarmTube)
+    {
+        startPage();
+        List<ArdAlarmTube> list = ardAlarmTubeService.selectArdAlarmTubeList(ardAlarmTube);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭绠$嚎娉勯湶鎶ヨ鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('alarm:tubeAlarm:export')")
+    @Log(title = "绠$嚎娉勯湶鎶ヨ", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, ArdAlarmTube ardAlarmTube)
+    {
+        List<ArdAlarmTube> list = ardAlarmTubeService.selectArdAlarmTubeList(ardAlarmTube);
+        ExcelUtil<ArdAlarmTube> util = new ExcelUtil<ArdAlarmTube>(ArdAlarmTube.class);
+        util.exportExcel(response, list, "绠$嚎娉勯湶鎶ヨ鏁版嵁");
+    }
+
+    /**
+     * 鑾峰彇绠$嚎娉勯湶鎶ヨ璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('alarm:tubeAlarm:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") String id)
+    {
+        return success(ardAlarmTubeService.selectArdAlarmTubeById(id));
+    }
+
+    /**
+     * 鏂板绠$嚎娉勯湶鎶ヨ
+     */
+    @PreAuthorize("@ss.hasPermi('alarm:tubeAlarm:add')")
+    @Log(title = "绠$嚎娉勯湶鎶ヨ", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody ArdAlarmTube ardAlarmTube)
+    {
+        return toAjax(ardAlarmTubeService.insertArdAlarmTube(ardAlarmTube));
+    }
+
+    /**
+     * 淇敼绠$嚎娉勯湶鎶ヨ
+     */
+    @PreAuthorize("@ss.hasPermi('alarm:tubeAlarm:edit')")
+    @Log(title = "绠$嚎娉勯湶鎶ヨ", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody ArdAlarmTube ardAlarmTube)
+    {
+        return toAjax(ardAlarmTubeService.updateArdAlarmTube(ardAlarmTube));
+    }
+
+    /**
+     * 鍒犻櫎绠$嚎娉勯湶鎶ヨ
+     */
+    @PreAuthorize("@ss.hasPermi('alarm:tubeAlarm:remove')")
+    @Log(title = "绠$嚎娉勯湶鎶ヨ", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable String[] ids)
+    {
+        return toAjax(ardAlarmTubeService.deleteArdAlarmTubeByIds(ids));
+    }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/domain/ArdAlarmTube.java b/ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/domain/ArdAlarmTube.java
new file mode 100644
index 0000000..0912d84
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/domain/ArdAlarmTube.java
@@ -0,0 +1,210 @@
+package com.ruoyi.alarm.tubeAlarm.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 绠$嚎娉勯湶鎶ヨ瀵硅薄 ard_alarm_tube
+ * 
+ * @author 鍒樿嫃涔�
+ * @date 2023-06-06
+ */
+public class ArdAlarmTube extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 涓婚敭 */
+    private String id;
+
+    /** 鎶ヨ涓绘満 */
+    @Excel(name = "鎶ヨ涓绘満")
+    private String host;
+
+    /** 绠$嚎id */
+    @Excel(name = "绠$嚎id")
+    private String tubeId;
+
+    /** 绠$嚎鍚嶇О */
+    @Excel(name = "绠$嚎鍚嶇О")
+    private String tubeName;
+
+    /** 绠$嚎绫诲瀷-娌圭-姘寸 */
+    @Excel(name = "绠$嚎绫诲瀷-娌圭-姘寸")
+    private String tubeType;
+
+    /** 绠″緞 */
+    @Excel(name = "绠″緞")
+    private String pipeDiameter;
+
+    /** 棰滆壊 */
+    @Excel(name = "棰滆壊")
+    private String color;
+
+    /** 浣嶇疆 */
+    @Excel(name = "浣嶇疆")
+    private String position;
+
+    /** 绫诲瀷GXALARM */
+    @Excel(name = "绫诲瀷GXALARM")
+    private String type;
+
+    /** 绫诲瀷涓枃 */
+    @Excel(name = "绫诲瀷涓枃")
+    private String alarmType;
+
+    /** 鎶ヨ鏃堕棿 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "鎶ヨ鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date alarmTime;
+
+    /** 鐢ㄦ埛鍚� */
+    @Excel(name = "鐢ㄦ埛鍚�")
+    private String watcher;
+
+    /** 鏌ョ湅鏃堕棿 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "鏌ョ湅鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date viewTime;
+
+    public void setId(String id) 
+    {
+        this.id = id;
+    }
+
+    public String getId() 
+    {
+        return id;
+    }
+    public void setHost(String host) 
+    {
+        this.host = host;
+    }
+
+    public String getHost() 
+    {
+        return host;
+    }
+    public void setTubeId(String tubeId)
+    {
+        this.tubeId = tubeId;
+    }
+
+    public String getTubeId()
+    {
+        return tubeId;
+    }
+    public void setTubeName(String tubeName) 
+    {
+        this.tubeName = tubeName;
+    }
+
+    public String getTubeName() 
+    {
+        return tubeName;
+    }
+    public void setTubeType(String tubeType) 
+    {
+        this.tubeType = tubeType;
+    }
+
+    public String getTubeType() 
+    {
+        return tubeType;
+    }
+    public void setPipeDiameter(String pipeDiameter) 
+    {
+        this.pipeDiameter = pipeDiameter;
+    }
+
+    public String getPipeDiameter() 
+    {
+        return pipeDiameter;
+    }
+    public void setColor(String color) 
+    {
+        this.color = color;
+    }
+
+    public String getColor() 
+    {
+        return color;
+    }
+    public void setPosition(String position) 
+    {
+        this.position = position;
+    }
+
+    public String getPosition() 
+    {
+        return position;
+    }
+    public void setType(String type) 
+    {
+        this.type = type;
+    }
+
+    public String getType() 
+    {
+        return type;
+    }
+    public void setAlarmType(String alarmType) 
+    {
+        this.alarmType = alarmType;
+    }
+
+    public String getAlarmType() 
+    {
+        return alarmType;
+    }
+    public void setAlarmTime(Date alarmTime) 
+    {
+        this.alarmTime = alarmTime;
+    }
+
+    public Date getAlarmTime() 
+    {
+        return alarmTime;
+    }
+    public void setWatcher(String watcher) 
+    {
+        this.watcher = watcher;
+    }
+
+    public String getWatcher() 
+    {
+        return watcher;
+    }
+    public void setViewTime(Date viewTime) 
+    {
+        this.viewTime = viewTime;
+    }
+
+    public Date getViewTime() 
+    {
+        return viewTime;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("host", getHost())
+            .append("tubeId", getTubeId())
+            .append("tubeName", getTubeName())
+            .append("tubeType", getTubeType())
+            .append("pipeDiameter", getPipeDiameter())
+            .append("color", getColor())
+            .append("position", getPosition())
+            .append("type", getType())
+            .append("alarmType", getAlarmType())
+            .append("alarmTime", getAlarmTime())
+            .append("watcher", getWatcher())
+            .append("createTime", getCreateTime())
+            .append("viewTime", getViewTime())
+            .toString();
+    }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/mapper/ArdAlarmTubeMapper.java b/ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/mapper/ArdAlarmTubeMapper.java
new file mode 100644
index 0000000..3347f00
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/mapper/ArdAlarmTubeMapper.java
@@ -0,0 +1,62 @@
+package com.ruoyi.alarm.tubeAlarm.mapper;
+
+import java.util.List;
+import com.ruoyi.alarm.tubeAlarm.domain.ArdAlarmTube;
+
+
+/**
+ * 绠$嚎娉勯湶鎶ヨMapper鎺ュ彛
+ * 
+ * @author 鍒樿嫃涔�
+ * @date 2023-06-06
+ */
+public interface ArdAlarmTubeMapper 
+{
+    /**
+     * 鏌ヨ绠$嚎娉勯湶鎶ヨ
+     * 
+     * @param id 绠$嚎娉勯湶鎶ヨ涓婚敭
+     * @return 绠$嚎娉勯湶鎶ヨ
+     */
+    public ArdAlarmTube selectArdAlarmTubeById(String id);
+
+    /**
+     * 鏌ヨ绠$嚎娉勯湶鎶ヨ鍒楄〃
+     * 
+     * @param ardAlarmTube 绠$嚎娉勯湶鎶ヨ
+     * @return 绠$嚎娉勯湶鎶ヨ闆嗗悎
+     */
+    public List<ArdAlarmTube> selectArdAlarmTubeList(ArdAlarmTube ardAlarmTube);
+
+    /**
+     * 鏂板绠$嚎娉勯湶鎶ヨ
+     * 
+     * @param ardAlarmTube 绠$嚎娉勯湶鎶ヨ
+     * @return 缁撴灉
+     */
+    public int insertArdAlarmTube(ArdAlarmTube ardAlarmTube);
+
+    /**
+     * 淇敼绠$嚎娉勯湶鎶ヨ
+     * 
+     * @param ardAlarmTube 绠$嚎娉勯湶鎶ヨ
+     * @return 缁撴灉
+     */
+    public int updateArdAlarmTube(ArdAlarmTube ardAlarmTube);
+
+    /**
+     * 鍒犻櫎绠$嚎娉勯湶鎶ヨ
+     * 
+     * @param id 绠$嚎娉勯湶鎶ヨ涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteArdAlarmTubeById(String id);
+
+    /**
+     * 鎵归噺鍒犻櫎绠$嚎娉勯湶鎶ヨ
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteArdAlarmTubeByIds(String[] ids);
+}
diff --git a/ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/service/IArdAlarmTubeService.java b/ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/service/IArdAlarmTubeService.java
new file mode 100644
index 0000000..007cb65
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/service/IArdAlarmTubeService.java
@@ -0,0 +1,62 @@
+package com.ruoyi.alarm.tubeAlarm.service;
+
+import java.util.List;
+
+import com.ruoyi.alarm.tubeAlarm.domain.ArdAlarmTube;
+
+/**
+ * 绠$嚎娉勯湶鎶ヨService鎺ュ彛
+ * 
+ * @author 鍒樿嫃涔�
+ * @date 2023-06-06
+ */
+public interface IArdAlarmTubeService 
+{
+    /**
+     * 鏌ヨ绠$嚎娉勯湶鎶ヨ
+     * 
+     * @param id 绠$嚎娉勯湶鎶ヨ涓婚敭
+     * @return 绠$嚎娉勯湶鎶ヨ
+     */
+    public ArdAlarmTube selectArdAlarmTubeById(String id);
+
+    /**
+     * 鏌ヨ绠$嚎娉勯湶鎶ヨ鍒楄〃
+     * 
+     * @param ardAlarmTube 绠$嚎娉勯湶鎶ヨ
+     * @return 绠$嚎娉勯湶鎶ヨ闆嗗悎
+     */
+    public List<ArdAlarmTube> selectArdAlarmTubeList(ArdAlarmTube ardAlarmTube);
+
+    /**
+     * 鏂板绠$嚎娉勯湶鎶ヨ
+     * 
+     * @param ardAlarmTube 绠$嚎娉勯湶鎶ヨ
+     * @return 缁撴灉
+     */
+    public int insertArdAlarmTube(ArdAlarmTube ardAlarmTube);
+
+    /**
+     * 淇敼绠$嚎娉勯湶鎶ヨ
+     * 
+     * @param ardAlarmTube 绠$嚎娉勯湶鎶ヨ
+     * @return 缁撴灉
+     */
+    public int updateArdAlarmTube(ArdAlarmTube ardAlarmTube);
+
+    /**
+     * 鎵归噺鍒犻櫎绠$嚎娉勯湶鎶ヨ
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑绠$嚎娉勯湶鎶ヨ涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteArdAlarmTubeByIds(String[] ids);
+
+    /**
+     * 鍒犻櫎绠$嚎娉勯湶鎶ヨ淇℃伅
+     * 
+     * @param id 绠$嚎娉勯湶鎶ヨ涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteArdAlarmTubeById(String id);
+}
diff --git a/ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/service/impl/ArdAlarmTubeServiceImpl.java b/ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/service/impl/ArdAlarmTubeServiceImpl.java
new file mode 100644
index 0000000..3b07736
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/alarm/tubeAlarm/service/impl/ArdAlarmTubeServiceImpl.java
@@ -0,0 +1,90 @@
+package com.ruoyi.alarm.tubeAlarm.service.impl;
+
+import com.ruoyi.alarm.tubeAlarm.domain.ArdAlarmTube;
+import com.ruoyi.alarm.tubeAlarm.mapper.ArdAlarmTubeMapper;
+import com.ruoyi.alarm.tubeAlarm.service.IArdAlarmTubeService;
+import com.ruoyi.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+
+/**
+ * 绠$嚎娉勯湶鎶ヨService涓氬姟灞傚鐞�
+ *
+ * @author 鍒樿嫃涔�
+ * @date 2023-06-06
+ */
+@Service
+public class ArdAlarmTubeServiceImpl implements IArdAlarmTubeService {
+    @Autowired
+    private ArdAlarmTubeMapper ardAlarmTubeMapper;
+
+    /**
+     * 鏌ヨ绠$嚎娉勯湶鎶ヨ
+     *
+     * @param id 绠$嚎娉勯湶鎶ヨ涓婚敭
+     * @return 绠$嚎娉勯湶鎶ヨ
+     */
+    @Override
+    public ArdAlarmTube selectArdAlarmTubeById(String id) {
+        return ardAlarmTubeMapper.selectArdAlarmTubeById(id);
+    }
+
+    /**
+     * 鏌ヨ绠$嚎娉勯湶鎶ヨ鍒楄〃
+     *
+     * @param ardAlarmTube 绠$嚎娉勯湶鎶ヨ
+     * @return 绠$嚎娉勯湶鎶ヨ
+     */
+    @Override
+    public List<ArdAlarmTube> selectArdAlarmTubeList(ArdAlarmTube ardAlarmTube) {
+        return ardAlarmTubeMapper.selectArdAlarmTubeList(ardAlarmTube);
+    }
+
+    /**
+     * 鏂板绠$嚎娉勯湶鎶ヨ
+     *
+     * @param ardAlarmTube 绠$嚎娉勯湶鎶ヨ
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertArdAlarmTube(ArdAlarmTube ardAlarmTube) {
+                ardAlarmTube.setCreateTime(DateUtils.getNowDate());
+            return ardAlarmTubeMapper.insertArdAlarmTube(ardAlarmTube);
+    }
+
+    /**
+     * 淇敼绠$嚎娉勯湶鎶ヨ
+     *
+     * @param ardAlarmTube 绠$嚎娉勯湶鎶ヨ
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateArdAlarmTube(ArdAlarmTube ardAlarmTube) {
+        return ardAlarmTubeMapper.updateArdAlarmTube(ardAlarmTube);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎绠$嚎娉勯湶鎶ヨ
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑绠$嚎娉勯湶鎶ヨ涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteArdAlarmTubeByIds(String[] ids) {
+        return ardAlarmTubeMapper.deleteArdAlarmTubeByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎绠$嚎娉勯湶鎶ヨ淇℃伅
+     *
+     * @param id 绠$嚎娉勯湶鎶ヨ涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteArdAlarmTubeById(String id) {
+        return ardAlarmTubeMapper.deleteArdAlarmTubeById(id);
+    }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/config/AsyncConfiguration.java b/ard-work/src/main/java/com/ruoyi/config/AsyncConfiguration.java
similarity index 61%
rename from ard-work/src/main/java/com/ruoyi/device/hiksdk/config/AsyncConfiguration.java
rename to ard-work/src/main/java/com/ruoyi/config/AsyncConfiguration.java
index e6274ab..2f1cf49 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/config/AsyncConfiguration.java
+++ b/ard-work/src/main/java/com/ruoyi/config/AsyncConfiguration.java
@@ -1,4 +1,4 @@
-package com.ruoyi.device.hiksdk.config;
+package com.ruoyi.config;
 
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -38,4 +38,25 @@
         executor.initialize();
         return executor;
     }
+    @Bean("alarmExecutor")
+    public Executor alarmExecutor(){
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        //閰嶇疆鏍稿績绾跨▼鏁�
+        executor.setCorePoolSize(15);
+        //閰嶇疆鏈�澶х嚎绋嬫暟
+        executor.setMaxPoolSize(30);
+        //閰嶇疆闃熷垪澶у皬
+        executor.setQueueCapacity(1000);
+        //绾跨▼鐨勫悕绉板墠缂�
+        executor.setThreadNamePrefix("alarmExecutor-");
+        //绾跨▼娲昏穬鏃堕棿锛堢锛�
+        //executor.setKeepAliveSeconds(60);
+        //绛夊緟鎵�鏈変换鍔$粨鏉熷悗鍐嶅叧闂嚎绋嬫睜
+        executor.setWaitForTasksToCompleteOnShutdown(true);
+        //璁剧疆鎷掔粷绛栫暐
+        //executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+        //鎵ц鍒濆鍖�
+        executor.initialize();
+        return executor;
+    }
 }
diff --git a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java
index 19077f2..ba0dfcf 100644
--- a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskServiceImpl.java
@@ -642,4 +642,4 @@
 
         return timeList;
     }
-}
\ No newline at end of file
+}
diff --git a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskStepServiceImpl.java b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskStepServiceImpl.java
index a610283..4b02b0a 100644
--- a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskStepServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskStepServiceImpl.java
@@ -9,6 +9,8 @@
 import com.ruoyi.inspect.domain.ArdVideoInspectTaskStep;
 import com.ruoyi.inspect.service.IArdVideoInspectTaskStepService;
 
+import javax.annotation.Resource;
+
 /**
  * 瑙嗛宸℃姝ラService涓氬姟灞傚鐞�
  *
@@ -17,7 +19,7 @@
  */
 @Service
 public class ArdVideoInspectTaskStepServiceImpl implements IArdVideoInspectTaskStepService {
-    @Autowired
+    @Resource
     private ArdVideoInspectTaskStepMapper ardVideoInspectTaskStepMapper;
 
     /**
diff --git a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumer.java b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumer.java
new file mode 100644
index 0000000..3c36909
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumer.java
@@ -0,0 +1,174 @@
+package com.ruoyi.utils.mqtt;
+
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.*;
+import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.stereotype.Component;
+import java.io.UnsupportedEncodingException;
+/**
+ * @Description: mqtt娑堣垂瀹㈡埛绔�
+ * @ClassName: MqttConsumer
+ * @Author: 鍒樿嫃涔�
+ * @Date: 2023骞�05鏈�29鏃�9:55
+ * @Version: 1.0
+ **/
+@Component
+@Slf4j(topic = "mqtt")
+public class MqttConsumer implements ApplicationRunner {
+
+    private static MqttClient client;
+
+    @Override
+    public void run(ApplicationArguments args) {
+        log.info("鍒濆鍖栧苟鍚姩mqtt......");
+        if(PropertiesUtil.MQTT_ENABLED)
+        {
+            this.connect();
+        }
+    }
+
+    /**
+     * 杩炴帴mqtt鏈嶅姟鍣�
+     */
+    private void connect() {
+        try {
+            // 1 鍒涘缓瀹㈡埛绔�
+            getClient();
+            // 2 璁剧疆閰嶇疆
+            MqttConnectOptions options = getOptions();
+            String[] topic = PropertiesUtil.MQTT_TOPIC.split(",");
+            // 3 娑堟伅鍙戝竷璐ㄩ噺
+            int[] qos = getQos(topic.length);
+            // 4 鏈�鍚庤缃�
+            create(options, topic, qos);
+        } catch (Exception e) {
+            log.error("mqtt杩炴帴寮傚父锛�" + e);
+        }
+    }
+
+    /**
+     *  鍒涘缓瀹㈡埛绔�  --- 1 ---
+     */
+    public void getClient() {
+        try {
+            if (null == client) {
+                client = new MqttClient(PropertiesUtil.MQTT_HOST, PropertiesUtil.MQTT_CLIENT_ID, new MemoryPersistence());
+            }
+            log.info("--鍒涘缓mqtt瀹㈡埛绔�");
+        } catch (Exception e) {
+            log.error("鍒涘缓mqtt瀹㈡埛绔紓甯革細" + e);
+        }
+    }
+
+    /**
+     *  鐢熸垚閰嶇疆瀵硅薄锛岀敤鎴峰悕锛屽瘑鐮佺瓑  --- 2 ---
+     */
+    public MqttConnectOptions getOptions() {
+        MqttConnectOptions options = new MqttConnectOptions();
+        //璁剧疆鐢ㄦ埛鍚嶅瘑鐮�
+        options.setUserName(PropertiesUtil.MQTT_USER_NAME);
+        options.setPassword(PropertiesUtil.MQTT_PASSWORD.toCharArray());
+        // 璁剧疆瓒呮椂鏃堕棿
+        options.setConnectionTimeout(PropertiesUtil.MQTT_TIMEOUT);
+        // 璁剧疆浼氳瘽蹇冭烦鏃堕棿
+        options.setKeepAliveInterval(PropertiesUtil.MQTT_KEEP_ALIVE);
+        // 鏄惁娓呴櫎session
+        options.setCleanSession(false);
+        log.info("--鐢熸垚mqtt閰嶇疆瀵硅薄");
+        return options;
+    }
+
+    /**
+     *  qos   --- 3 ---
+     */
+    public int[] getQos(int length) {
+
+        int[] qos = new int[length];
+        for (int i = 0; i < length; i++) {
+            /**
+             *  MQTT鍗忚涓湁涓夌娑堟伅鍙戝竷鏈嶅姟璐ㄩ噺:
+             *
+             * QOS0锛� 鈥滆嚦澶氫竴娆♀�濓紝娑堟伅鍙戝竷瀹屽叏渚濊禆搴曞眰 TCP/IP 缃戠粶銆備細鍙戠敓娑堟伅涓㈠け鎴栭噸澶嶃�傝繖涓�绾у埆鍙敤浜庡涓嬫儏鍐碉紝鐜浼犳劅鍣ㄦ暟鎹紝涓㈠け涓�娆¤璁板綍鏃犳墍璋擄紝鍥犱负涓嶄箙鍚庤繕浼氭湁绗簩娆″彂閫併��
+             * QOS1锛� 鈥滆嚦灏戜竴娆♀�濓紝纭繚娑堟伅鍒拌揪锛屼絾娑堟伅閲嶅鍙兘浼氬彂鐢熴��
+             * QOS2锛� 鈥滃彧鏈変竴娆♀�濓紝纭繚娑堟伅鍒拌揪涓�娆°�傝繖涓�绾у埆鍙敤浜庡涓嬫儏鍐碉紝鍦ㄨ璐圭郴缁熶腑锛屾秷鎭噸澶嶆垨涓㈠け浼氬鑷翠笉姝g‘鐨勭粨鏋滐紝璧勬簮寮�閿�澶�
+             */
+            qos[i] = 1;
+        }
+        log.info("--璁剧疆娑堟伅鍙戝竷璐ㄩ噺");
+        return qos;
+    }
+
+    /**
+     *  瑁呰浇鍚勭瀹炰緥鍜岃闃呬富棰�  --- 4 ---
+     */
+    public void create(MqttConnectOptions options, String[] topic, int[] qos) {
+        try {
+            client.setCallback(new MqttConsumerCallback(client, options, topic, qos));
+            log.info("--娣诲姞鍥炶皟澶勭悊绫�");
+            client.connect(options);
+        } catch (Exception e) {
+            log.info("瑁呰浇瀹炰緥鎴栬闃呬富棰樺紓甯革細" + e);
+        }
+    }
+
+    /**
+     * 璁㈤槄鏌愪釜涓婚
+     *
+     * @param topic
+     * @param qos
+     */
+    public void subscribe(String topic, int qos) {
+        try {
+            log.info("topic:" + topic);
+            client.subscribe(topic, qos);
+        } catch (MqttException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 鍙戝竷锛岄潪鎸佷箙鍖�
+     *
+     *  qos鏍规嵁鏂囨。璁剧疆涓�1
+     *
+     * @param topic
+     * @param msg
+     */
+    public static void publish(String topic, String msg) {
+        publish(1, false, topic, msg);
+    }
+
+    /**
+     * 鍙戝竷
+     */
+    public static void publish(int qos, boolean retained, String topic, String pushMessage) {
+        log.info("銆愪富棰樸��:" + topic + "銆恞os銆�:" + qos + "銆恜ushMessage銆�:" + pushMessage);
+        MqttMessage message = new MqttMessage();
+        message.setQos(qos);
+        message.setRetained(retained);
+        try {
+            message.setPayload(pushMessage.getBytes("UTF-8"));
+        } catch (UnsupportedEncodingException e) {
+            log.error("mqtt缂栫爜寮傚父锛�" + e.getMessage());
+        }
+        MqttTopic mTopic = client.getTopic(topic);
+        if (null == mTopic) {
+            log.error("topic锛�" + topic + " 涓嶅瓨鍦�");
+        }
+        MqttDeliveryToken token;
+        try {
+            token = mTopic.publish(message);
+            token.waitForCompletion();
+            if (token.isComplete()) {
+                log.info("娑堟伅鍙戦�佹垚鍔�");
+            }
+        } catch (MqttPersistenceException e) {
+            e.printStackTrace();
+        } catch (MqttException e) {
+            e.printStackTrace();
+        }
+    }
+}
+
diff --git a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java
new file mode 100644
index 0000000..0920641
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java
@@ -0,0 +1,100 @@
+package com.ruoyi.utils.mqtt;
+
+import com.ruoyi.alarm.globalAlarm.service.GlobalAlarmServiceImpl;
+import com.ruoyi.common.utils.spring.SpringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.*;
+
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
+
+/**
+ * @Description: mqtt鍥炶皟澶勭悊绫�
+ * @ClassName: MqttConsumerCallback
+ * @Author: 鍒樿嫃涔�
+ * @Date: 2023骞�05鏈�29鏃�9:55
+ * @Version: 1.0
+ **/
+@Slf4j(topic = "mqtt")
+public class MqttConsumerCallback implements MqttCallbackExtended {
+
+    private MqttClient client;
+    private MqttConnectOptions options;
+    private String[] topic;
+    private int[] qos;
+
+    public MqttConsumerCallback(MqttClient client, MqttConnectOptions options, String[] topic, int[] qos) {
+        this.client = client;
+        this.options = options;
+        this.topic = topic;
+        this.qos = qos;
+    }
+
+    /**
+     * 鏂紑閲嶈繛
+     */
+    @Override
+    public void connectionLost(Throwable cause) {
+        log.info("MQTT杩炴帴鏂紑锛屽彂璧烽噸杩�......");
+        try {
+            while (!client.isConnected()) {
+                Thread.sleep(5000);
+                if (null != client && !client.isConnected()) {
+                    client.reconnect();
+                    log.error("灏濊瘯閲嶆柊杩炴帴");
+                } else {
+                    client.connect(options);
+                    log.error("灏濊瘯寤虹珛鏂拌繛鎺�");
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 鎺ユ敹鍒版秷鎭皟鐢ㄤ护鐗屼腑璋冪敤
+     */
+    @Override
+    public void deliveryComplete(IMqttDeliveryToken token) {
+
+        //log.info("deliveryComplete---------" + Arrays.toString(topic));
+    }
+
+    /**
+     * 娑堟伅澶勭悊
+     */
+    @Override
+    public void messageArrived(String topic, MqttMessage message) {
+        try {
+            // subscribe鍚庡緱鍒扮殑娑堟伅浼氭墽琛屽埌杩欓噷闈�
+            log.info("鎺ユ敹娑堟伅 銆愪富棰樸��:" + topic + " 銆愬唴瀹广��:" + new String(message.getPayload()));
+            //杩涜涓氬姟澶勭悊(鎺ユ敹鎶ヨ鏁版嵁)
+            GlobalAlarmServiceImpl globalAlarmService = SpringUtils.getBean(GlobalAlarmServiceImpl.class);
+            globalAlarmService.receiveAlarm(topic, new String(message.getPayload(), StandardCharsets.UTF_8));
+        } catch (Exception e) {
+            log.info("澶勭悊mqtt娑堟伅寮傚父:" + e);
+        }
+    }
+
+    /**
+     * mqtt杩炴帴鍚庤闃呬富棰�
+     */
+    @Override
+    public void connectComplete(boolean b, String s) {
+        try {
+            if (null != topic && null != qos) {
+                if (client.isConnected()) {
+                    client.subscribe(topic, qos);
+                    log.info("mqtt杩炴帴鎴愬姛锛屽鎴风ID锛�" + PropertiesUtil.MQTT_CLIENT_ID);
+                    log.info("--璁㈤槄涓婚:锛�" + Arrays.toString(topic));
+                } else {
+                    log.info("mqtt杩炴帴澶辫触锛屽鎴风ID锛�" + PropertiesUtil.MQTT_CLIENT_ID);
+                }
+            }
+        } catch (Exception e) {
+            log.info("mqtt璁㈤槄涓婚寮傚父:" + e);
+        }
+    }
+}
+
diff --git a/ard-work/src/main/java/com/ruoyi/utils/mqtt/PropertiesUtil.java b/ard-work/src/main/java/com/ruoyi/utils/mqtt/PropertiesUtil.java
new file mode 100644
index 0000000..0d9b555
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/utils/mqtt/PropertiesUtil.java
@@ -0,0 +1,54 @@
+package com.ruoyi.utils.mqtt;
+
+import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.stereotype.Component;
+
+import java.util.Objects;
+import java.util.Properties;
+
+/**
+ * @Description: 鑾峰彇閰嶇疆淇℃伅
+ * @ClassName: PropertiesUtil
+ * @Author: 鍒樿嫃涔�
+ * @Date: 2023骞�06鏈�06鏃�9:40
+ * @Version: 1.0
+ **/
+@Component
+public class PropertiesUtil {
+
+    public static String MQTT_HOST;
+    public static String MQTT_CLIENT_ID;
+    public static String MQTT_USER_NAME;
+    public static String MQTT_PASSWORD;
+    public static String MQTT_TOPIC;
+    public static Integer MQTT_TIMEOUT;
+    public static Integer MQTT_KEEP_ALIVE;
+    public static Boolean MQTT_ENABLED;
+    static {
+        MQTT_HOST = getYmlNew("mqtt.host");
+        MQTT_CLIENT_ID = getYmlNew("mqtt.clientId");
+        MQTT_USER_NAME = getYmlNew("mqtt.username");
+        MQTT_PASSWORD = getYmlNew("mqtt.password");
+        MQTT_TOPIC = getYmlNew("mqtt.topic");
+        MQTT_TIMEOUT = Integer.valueOf(Objects.requireNonNull(getYmlNew("mqtt.timeout")));
+        MQTT_KEEP_ALIVE = Integer.valueOf(Objects.requireNonNull(getYmlNew("mqtt.keepalive")));
+        MQTT_ENABLED = Boolean.valueOf(getYmlNew("mqtt.enabled"));
+    }
+
+    public static String getYmlNew(String key) {
+        Resource resource = new ClassPathResource("application-ard.yml");
+        Properties properties;
+        try {
+            YamlPropertiesFactoryBean yamlFactory = new YamlPropertiesFactoryBean();
+            yamlFactory.setResources(resource);
+            properties = yamlFactory.getObject();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+        assert properties != null;
+        return properties.get(key).toString();
+    }
+}
diff --git a/ard-work/src/main/resources/mapper/alarm/ArdAlarmTubeMapper.xml b/ard-work/src/main/resources/mapper/alarm/ArdAlarmTubeMapper.xml
new file mode 100644
index 0000000..14e49fe
--- /dev/null
+++ b/ard-work/src/main/resources/mapper/alarm/ArdAlarmTubeMapper.xml
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.alarm.tubeAlarm.mapper.ArdAlarmTubeMapper">
+    
+    <resultMap type="ArdAlarmTube" id="ArdAlarmTubeResult">
+        <result property="id"    column="id"    />
+        <result property="host"    column="host"    />
+        <result property="tubeId"    column="tube_id"    />
+        <result property="tubeName"    column="tube_name"    />
+        <result property="tubeType"    column="tube_type"    />
+        <result property="pipeDiameter"    column="pipe_diameter"    />
+        <result property="color"    column="color"    />
+        <result property="position"    column="position"    />
+        <result property="type"    column="type"    />
+        <result property="alarmType"    column="alarm_type"    />
+        <result property="alarmTime"    column="alarm_time"    />
+        <result property="watcher"    column="watcher"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="viewTime"    column="view_time"    />
+    </resultMap>
+
+    <sql id="selectArdAlarmTubeVo">
+        select id, host, tube_id, tube_name, tube_type, pipe_diameter, color, position, type, alarm_type, alarm_time, watcher, create_time, view_time from ard_alarm_tube
+    </sql>
+
+    <select id="selectArdAlarmTubeList" parameterType="ArdAlarmTube" resultMap="ArdAlarmTubeResult">
+        <include refid="selectArdAlarmTubeVo"/>
+        <where>  
+            <if test="host != null  and host != ''"> and host = #{host}</if>
+            <if test="tubeId != null "> and tube_id = #{tubeId}</if>
+            <if test="tubeName != null  and tubeName != ''"> and tube_name like '%'||#{tubeName}||'%'</if>
+            <if test="tubeType != null  and tubeType != ''"> and tube_type = #{tubeType}</if>
+            <if test="pipeDiameter != null  and pipeDiameter != ''"> and pipe_diameter = #{pipeDiameter}</if>
+            <if test="color != null  and color != ''"> and color = #{color}</if>
+            <if test="position != null  and position != ''"> and position = #{position}</if>
+            <if test="type != null  and type != ''"> and type = #{type}</if>
+            <if test="alarmType != null  and alarmType != ''"> and alarm_type = #{alarmType}</if>
+            <if test="alarmTime != null "> and alarm_time = #{alarmTime}</if>
+            <if test="watcher != null  and watcher != ''"> and watcher = #{watcher}</if>
+            <if test="viewTime != null "> and view_time = #{viewTime}</if>
+        </where>
+    </select>
+    
+    <select id="selectArdAlarmTubeById" parameterType="String" resultMap="ArdAlarmTubeResult">
+        <include refid="selectArdAlarmTubeVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertArdAlarmTube" parameterType="ArdAlarmTube">
+        insert into ard_alarm_tube
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="host != null">host,</if>
+            <if test="tubeId != null">tube_id,</if>
+            <if test="tubeName != null">tube_name,</if>
+            <if test="tubeType != null">tube_type,</if>
+            <if test="pipeDiameter != null">pipe_diameter,</if>
+            <if test="color != null">color,</if>
+            <if test="position != null">position,</if>
+            <if test="type != null">type,</if>
+            <if test="alarmType != null">alarm_type,</if>
+            <if test="alarmTime != null">alarm_time,</if>
+            <if test="watcher != null">watcher,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="viewTime != null">view_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="host != null">#{host},</if>
+            <if test="tubeId != null">#{tubeId},</if>
+            <if test="tubeName != null">#{tubeName},</if>
+            <if test="tubeType != null">#{tubeType},</if>
+            <if test="pipeDiameter != null">#{pipeDiameter},</if>
+            <if test="color != null">#{color},</if>
+            <if test="position != null">#{position},</if>
+            <if test="type != null">#{type},</if>
+            <if test="alarmType != null">#{alarmType},</if>
+            <if test="alarmTime != null">#{alarmTime},</if>
+            <if test="watcher != null">#{watcher},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="viewTime != null">#{viewTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateArdAlarmTube" parameterType="ArdAlarmTube">
+        update ard_alarm_tube
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="host != null">host = #{host},</if>
+            <if test="tubeId != null">tube_id = #{tubeId},</if>
+            <if test="tubeName != null">tube_name = #{tubeName},</if>
+            <if test="tubeType != null">tube_type = #{tubeType},</if>
+            <if test="pipeDiameter != null">pipe_diameter = #{pipeDiameter},</if>
+            <if test="color != null">color = #{color},</if>
+            <if test="position != null">position = #{position},</if>
+            <if test="type != null">type = #{type},</if>
+            <if test="alarmType != null">alarm_type = #{alarmType},</if>
+            <if test="alarmTime != null">alarm_time = #{alarmTime},</if>
+            <if test="watcher != null">watcher = #{watcher},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="viewTime != null">view_time = #{viewTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteArdAlarmTubeById" parameterType="String">
+        delete from ard_alarm_tube where id = #{id}
+    </delete>
+
+    <delete id="deleteArdAlarmTubeByIds" parameterType="String">
+        delete from ard_alarm_tube where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>
\ No newline at end of file
diff --git a/ard-work/src/main/resources/mapper/alarmpoints/ArdTubesDetailsMapper.xml b/ard-work/src/main/resources/mapper/alarmpoints/ArdTubesDetailsMapper.xml
index c2b3bd1..50a0aad 100644
--- a/ard-work/src/main/resources/mapper/alarmpoints/ArdTubesDetailsMapper.xml
+++ b/ard-work/src/main/resources/mapper/alarmpoints/ArdTubesDetailsMapper.xml
@@ -68,7 +68,7 @@
     </select>
     <select id="selectArdTubesDetailsByReelNumber" parameterType="String" resultMap="ArdTubesDetailsResult">
         <include refid="selectArdTubesDetailsVo"/>
-        where reel_number = #{reelNumber} and tube_id=#{tubeId}
+        where reel_number = #{reelNumber}
     </select>
     <insert id="insertArdTubesDetails" parameterType="ArdTubesDetails">
         insert into ard_tubes_details
diff --git a/ard-work/src/main/resources/mapper/inspect/ArdVideoInspectRecordMapper.xml b/ard-work/src/main/resources/mapper/inspect/ArdVideoInspectRecordMapper.xml
index 0215eb9..b98e0c6 100644
--- a/ard-work/src/main/resources/mapper/inspect/ArdVideoInspectRecordMapper.xml
+++ b/ard-work/src/main/resources/mapper/inspect/ArdVideoInspectRecordMapper.xml
@@ -15,7 +15,7 @@
     </resultMap>
 
     <sql id="selectArdVideoInspectRecordVo">
-        select id, start_time, end_time, record_file_path, step_id, dept_id, user_id from ard_video_inspect_record
+        select id, start_time, end_time, record_file_path, step_id, dept_id, user_id,well_name from ard_video_inspect_record
     </sql>
 
     <select id="selectArdVideoInspectRecordList" parameterType="ArdVideoInspectRecord" resultMap="ArdVideoInspectRecordResult">
@@ -36,7 +36,7 @@
             <if test="startTime != null  and startTime != ''">and start_time like ('${startTime}%')</if>
             <if test="stepId != null  and stepId != ''">and step_id = #{stepId}</if>
         </where>
-
+        order by start_time desc
     </select>
     <!--鎸夋湀浠界粺璁℃枃浠舵暟閲�-->
     <select id="selectArdVideoInspectRecordCountByStartMonth" parameterType="String" resultType="java.util.HashMap">
diff --git a/ruoyi-admin/src/main/resources/application-ard.yml b/ruoyi-admin/src/main/resources/application-ard.yml
index 3c47288..0e8fe6a 100644
--- a/ruoyi-admin/src/main/resources/application-ard.yml
+++ b/ruoyi-admin/src/main/resources/application-ard.yml
@@ -13,4 +13,14 @@
   connect-timeout: 3000 # 杩炴帴瓒呮椂鏃堕棿锛屽崟浣嶄负姣, 榛樿鍊间负2000
   retry-count: 0 # 璇锋眰澶辫触鍚庨噸璇曟鏁帮紝榛樿涓�0娆′笉閲嶈瘯
   ssl-protocol: SSLv3 # 鍗曞悜楠岃瘉鐨凥TTPS鐨勯粯璁SL鍗忚锛岄粯璁や负SSLv3
-  logEnabled: true # 鎵撳紑鎴栧叧闂棩蹇楋紝榛樿涓簍rue
\ No newline at end of file
+  logEnabled: true # 鎵撳紑鎴栧叧闂棩蹇楋紝榛樿涓簍rue
+#mqtt
+mqtt:
+  host: tcp://192.168.1.15:1883
+  clientId: m3
+  username: admin
+  password: xzx12345
+  topic: tube
+  timeout: 100
+  keepalive: 60
+  enabled: true
diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml
index 7e14d70..63e097b 100644
--- a/ruoyi-admin/src/main/resources/application-druid.yml
+++ b/ruoyi-admin/src/main/resources/application-druid.yml
@@ -6,12 +6,12 @@
         druid:
             # 涓诲簱鏁版嵁婧�
             master:
-                url: jdbc:postgresql://111.40.46.199:15432/ry-vue?stringtype=unspecified
-                username: postgres
-                password: Yykj.2021
-#                url: jdbc:postgresql://127.0.0.1:5432/ry-vue?stringtype=unspecified
+#                url: jdbc:postgresql://111.40.46.199:15432/ry-vue?stringtype=unspecified
 #                username: postgres
-#                password: postgres
+#                password: Yykj.2021
+                url: jdbc:postgresql://192.168.1.15:5432/ry-vue?stringtype=unspecified
+                username: postgres
+                password: postgres
             # 浠庡簱鏁版嵁婧�
             slave:
                 # 浠庢暟鎹簮寮�鍏�/榛樿鍏抽棴
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 3ae70a3..b069583 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -36,7 +36,7 @@
 # 鏃ュ織閰嶇疆
 logging:
   level:
-    com.ruoyi.inspect: debug
+    com.ruoyi.inspect: info
     org.springframework: warn
 
 # 鐢ㄦ埛閰嶇疆
diff --git a/ruoyi-admin/src/main/resources/logback.xml b/ruoyi-admin/src/main/resources/logback.xml
index 5193496..86ca1cd 100644
--- a/ruoyi-admin/src/main/resources/logback.xml
+++ b/ruoyi-admin/src/main/resources/logback.xml
@@ -134,6 +134,19 @@
             <pattern>${log.pattern}</pattern>
         </encoder>
     </appender>
+    <!--mqtt鏃ュ織杈撳嚭-->
+    <appender name="mqtt" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/mqtt.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!--鎸夊ぉ鍥炴粴daily-->
+            <fileNamePattern>${log.path}/mqtt.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!--鏃ュ織鏈�澶х殑鍘嗗彶60澶�-->
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+    </appender>
     <!--PatrolInspectionTask鏃ュ織杈撳嚭-->
     <appender name="PatrolInspectionTask" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <file>${log.path}/PatrolInspectionTask.log</file>
@@ -186,8 +199,12 @@
     <logger name="websocket" level="INFO">
         <appender-ref ref="websocket"/>
     </logger>
-    <!--websocket鏃ュ織鎵撳嵃绛夌骇-->
+    <!--鍏夌數宸℃鏃ュ織鎵撳嵃绛夌骇-->
     <logger name="PatrolInspectionTask" level="INFO">
         <appender-ref ref="PatrolInspectionTask"/>
     </logger>
+    <!--mqtt鏃ュ織鎵撳嵃绛夌骇-->
+    <logger name="mqtt" level="INFO">
+        <appender-ref ref="mqtt"/>
+    </logger>
 </configuration> 
\ No newline at end of file
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
index e86d052..5c4d408 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
@@ -4,6 +4,7 @@
 import java.util.Map;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.annotation.AfterReturning;
 import org.aspectj.lang.annotation.AfterThrowing;
@@ -29,17 +30,18 @@
 
 /**
  * 鎿嶄綔鏃ュ織璁板綍澶勭悊
- * 
+ *
  * @author ruoyi
  */
 @Aspect
 @Component
-public class LogAspect
-{
+public class LogAspect {
     private static final Logger log = LoggerFactory.getLogger(LogAspect.class);
 
-    /** 鎺掗櫎鏁忔劅灞炴�у瓧娈� */
-    public static final String[] EXCLUDE_PROPERTIES = { "password", "oldPassword", "newPassword", "confirmPassword" };
+    /**
+     * 鎺掗櫎鏁忔劅灞炴�у瓧娈�
+     */
+    public static final String[] EXCLUDE_PROPERTIES = {"password", "oldPassword", "newPassword", "confirmPassword"};
 
     /**
      * 澶勭悊瀹岃姹傚悗鎵ц
@@ -47,27 +49,23 @@
      * @param joinPoint 鍒囩偣
      */
     @AfterReturning(pointcut = "@annotation(controllerLog)", returning = "jsonResult")
-    public void doAfterReturning(JoinPoint joinPoint, Log controllerLog, Object jsonResult)
-    {
+    public void doAfterReturning(JoinPoint joinPoint, Log controllerLog, Object jsonResult) {
         handleLog(joinPoint, controllerLog, null, jsonResult);
     }
 
     /**
      * 鎷︽埅寮傚父鎿嶄綔
-     * 
+     *
      * @param joinPoint 鍒囩偣
-     * @param e 寮傚父
+     * @param e         寮傚父
      */
     @AfterThrowing(value = "@annotation(controllerLog)", throwing = "e")
-    public void doAfterThrowing(JoinPoint joinPoint, Log controllerLog, Exception e)
-    {
+    public void doAfterThrowing(JoinPoint joinPoint, Log controllerLog, Exception e) {
         handleLog(joinPoint, controllerLog, e, null);
     }
 
-    protected void handleLog(final JoinPoint joinPoint, Log controllerLog, final Exception e, Object jsonResult)
-    {
-        try
-        {
+    protected void handleLog(final JoinPoint joinPoint, Log controllerLog, final Exception e, Object jsonResult) {
+        try {
             // 鑾峰彇褰撳墠鐨勭敤鎴�
             LoginUser loginUser = SecurityUtils.getLoginUser();
 
@@ -78,13 +76,11 @@
             String ip = IpUtils.getIpAddr(ServletUtils.getRequest());
             operLog.setOperIp(ip);
             operLog.setOperUrl(StringUtils.substring(ServletUtils.getRequest().getRequestURI(), 0, 255));
-            if (loginUser != null)
-            {
+            if (loginUser != null) {
                 operLog.setOperName(loginUser.getUsername());
             }
 
-            if (e != null)
-            {
+            if (e != null) {
                 operLog.setStatus(BusinessStatus.FAIL.ordinal());
                 operLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, 2000));
             }
@@ -97,16 +93,15 @@
             // 澶勭悊璁剧疆娉ㄨВ涓婄殑鍙傛暟
             getControllerMethodDescription(joinPoint, controllerLog, operLog, jsonResult);
             //鍒ゆ柇鐘舵�佺爜
-            Map resultMap=(Map)jsonResult;
-            if(resultMap.get("code").equals(500))
-            {
-                operLog.setStatus(BusinessStatus.FAIL.ordinal());
+            Map resultMap = (Map) jsonResult;
+            if (StringUtils.isNotNull(resultMap)) {
+                if (resultMap.get("code").equals(500)) {
+                    operLog.setStatus(BusinessStatus.FAIL.ordinal());
+                }
             }
             // 淇濆瓨鏁版嵁搴�
             AsyncManager.me().execute(AsyncFactory.recordOper(operLog));
-        }
-        catch (Exception exp)
-        {
+        } catch (Exception exp) {
             // 璁板綍鏈湴寮傚父鏃ュ織
             log.error("寮傚父淇℃伅:{}", exp.getMessage());
             exp.printStackTrace();
@@ -115,13 +110,12 @@
 
     /**
      * 鑾峰彇娉ㄨВ涓鏂规硶鐨勬弿杩颁俊鎭� 鐢ㄤ簬Controller灞傛敞瑙�
-     * 
-     * @param log 鏃ュ織
+     *
+     * @param log     鏃ュ織
      * @param operLog 鎿嶄綔鏃ュ織
      * @throws Exception
      */
-    public void getControllerMethodDescription(JoinPoint joinPoint, Log log, SysOperLog operLog, Object jsonResult) throws Exception
-    {
+    public void getControllerMethodDescription(JoinPoint joinPoint, Log log, SysOperLog operLog, Object jsonResult) throws Exception {
         // 璁剧疆action鍔ㄤ綔
         operLog.setBusinessType(log.businessType().ordinal());
         // 璁剧疆鏍囬
@@ -129,34 +123,28 @@
         // 璁剧疆鎿嶄綔浜虹被鍒�
         operLog.setOperatorType(log.operatorType().ordinal());
         // 鏄惁闇�瑕佷繚瀛榬equest锛屽弬鏁板拰鍊�
-        if (log.isSaveRequestData())
-        {
+        if (log.isSaveRequestData()) {
             // 鑾峰彇鍙傛暟鐨勪俊鎭紝浼犲叆鍒版暟鎹簱涓��
             setRequestValue(joinPoint, operLog);
         }
         // 鏄惁闇�瑕佷繚瀛榬esponse锛屽弬鏁板拰鍊�
-        if (log.isSaveResponseData() && StringUtils.isNotNull(jsonResult))
-        {
+        if (log.isSaveResponseData() && StringUtils.isNotNull(jsonResult)) {
             operLog.setJsonResult(StringUtils.substring(JSON.toJSONString(jsonResult), 0, 2000));
         }
     }
 
     /**
      * 鑾峰彇璇锋眰鐨勫弬鏁帮紝鏀惧埌log涓�
-     * 
+     *
      * @param operLog 鎿嶄綔鏃ュ織
      * @throws Exception 寮傚父
      */
-    private void setRequestValue(JoinPoint joinPoint, SysOperLog operLog) throws Exception
-    {
+    private void setRequestValue(JoinPoint joinPoint, SysOperLog operLog) throws Exception {
         String requestMethod = operLog.getRequestMethod();
-        if (HttpMethod.PUT.name().equals(requestMethod) || HttpMethod.POST.name().equals(requestMethod))
-        {
+        if (HttpMethod.PUT.name().equals(requestMethod) || HttpMethod.POST.name().equals(requestMethod)) {
             String params = argsArrayToString(joinPoint.getArgs());
             operLog.setOperParam(StringUtils.substring(params, 0, 2000));
-        }
-        else
-        {
+        } else {
             Map<?, ?> paramsMap = ServletUtils.getParamMap(ServletUtils.getRequest());
             operLog.setOperParam(StringUtils.substring(JSON.toJSONString(paramsMap, excludePropertyPreFilter()), 0, 2000));
         }
@@ -165,22 +153,15 @@
     /**
      * 鍙傛暟鎷艰
      */
-    private String argsArrayToString(Object[] paramsArray)
-    {
+    private String argsArrayToString(Object[] paramsArray) {
         String params = "";
-        if (paramsArray != null && paramsArray.length > 0)
-        {
-            for (Object o : paramsArray)
-            {
-                if (StringUtils.isNotNull(o) && !isFilterObject(o))
-                {
-                    try
-                    {
+        if (paramsArray != null && paramsArray.length > 0) {
+            for (Object o : paramsArray) {
+                if (StringUtils.isNotNull(o) && !isFilterObject(o)) {
+                    try {
                         String jsonObj = JSON.toJSONString(o, excludePropertyPreFilter());
                         params += jsonObj.toString() + " ";
-                    }
-                    catch (Exception e)
-                    {
+                    } catch (Exception e) {
                     }
                 }
             }
@@ -191,38 +172,29 @@
     /**
      * 蹇界暐鏁忔劅灞炴��
      */
-    public PropertyPreExcludeFilter excludePropertyPreFilter()
-    {
+    public PropertyPreExcludeFilter excludePropertyPreFilter() {
         return new PropertyPreExcludeFilter().addExcludes(EXCLUDE_PROPERTIES);
     }
 
     /**
      * 鍒ゆ柇鏄惁闇�瑕佽繃婊ょ殑瀵硅薄銆�
-     * 
+     *
      * @param o 瀵硅薄淇℃伅銆�
      * @return 濡傛灉鏄渶瑕佽繃婊ょ殑瀵硅薄锛屽垯杩斿洖true锛涘惁鍒欒繑鍥瀎alse銆�
      */
     @SuppressWarnings("rawtypes")
-    public boolean isFilterObject(final Object o)
-    {
+    public boolean isFilterObject(final Object o) {
         Class<?> clazz = o.getClass();
-        if (clazz.isArray())
-        {
+        if (clazz.isArray()) {
             return clazz.getComponentType().isAssignableFrom(MultipartFile.class);
-        }
-        else if (Collection.class.isAssignableFrom(clazz))
-        {
+        } else if (Collection.class.isAssignableFrom(clazz)) {
             Collection collection = (Collection) o;
-            for (Object value : collection)
-            {
+            for (Object value : collection) {
                 return value instanceof MultipartFile;
             }
-        }
-        else if (Map.class.isAssignableFrom(clazz))
-        {
+        } else if (Map.class.isAssignableFrom(clazz)) {
             Map map = (Map) o;
-            for (Object value : map.entrySet())
-            {
+            for (Object value : map.entrySet()) {
                 Map.Entry entry = (Map.Entry) value;
                 return entry.getValue() instanceof MultipartFile;
             }

--
Gitblit v1.9.3