From 8e4c122f9a633b97bc50681ca1c2b014f151928a Mon Sep 17 00:00:00 2001
From: lixiaolong <702156524@qq.com>
Date: Tue, 2 Jun 2026 15:01:23 +0800
Subject: [PATCH] =?UTF-8?q?feat(inspection):=20=E6=B7=BB=E5=8A=A0=E5=B7=A1?=
=?UTF-8?q?=E6=A3=80=E6=A8=A1=E5=9D=97=E5=8A=9F=E8=83=BD=E5=B9=B6=E6=9B=B4?=
=?UTF-8?q?=E6=96=B0=E9=A1=B9=E7=9B=AE=E9=85=8D=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 添加巡检告警、地图、机器人、任务、点位等实体类和服务接口
- 创建巡检模块数据库表结构,包含机器人、地图、任务等核心表
- 实现巡检告警控制器,提供增删改查和导出功能
- 配置巡检告警数据映射和查询视图
- 更新全局应用配置中的MinIO服务地址
- 在启动类中添加MyBatis扫描配置
- 重构设备配置实体类,移除冗余字段并优化注解配置
---
cmvr-iot-admin/pom.xml | 6 +
.../java/com/cmvr/CmvrIotApplication.java | 2 +
.../inspection/InspectionAlarmController.java | 114 ++++++++
.../inspection/InspectionMapController.java | 114 ++++++++
.../inspection/InspectionRobotController.java | 115 ++++++++
.../inspection/InspectionTaskController.java | 151 ++++++++++
.../InspectionTaskInstanceController.java | 162 ++++++++++
.../InspectionWaypointController.java | 114 ++++++++
.../web/controller/test/TeFlowController.java | 4 +-
.../src/main/resources/application-test.yml | 2 +-
.../cmvr/device/domain/DeDeviceProfile.java | 11 +-
.../com/cmvr/device/domain/vo/ProfileVo.java | 7 +-
cmvr-iot-inspection/pom.xml | 33 +++
.../inspection/domain/InspectionAlarm.java | 102 +++++++
.../cmvr/inspection/domain/InspectionMap.java | 64 ++++
.../inspection/domain/InspectionRobot.java | 84 ++++++
.../inspection/domain/InspectionTask.java | 50 ++++
.../domain/InspectionTaskInstance.java | 55 ++++
.../domain/InspectionTaskWaypoint.java | 26 ++
.../inspection/domain/InspectionWaypoint.java | 54 ++++
.../domain/vo/InspectionAlarmVo.java | 127 ++++++++
.../inspection/domain/vo/InspectionMapVo.java | 76 +++++
.../domain/vo/InspectionRobotVo.java | 96 ++++++
.../domain/vo/InspectionTaskInstanceVo.java | 93 ++++++
.../domain/vo/InspectionTaskVo.java | 56 ++++
.../domain/vo/InspectionWaypointVo.java | 75 +++++
.../cmvr/inspection/enums/TaskStatusEnum.java | 28 ++
.../mapper/InspectionAlarmMapper.java | 55 ++++
.../mapper/InspectionMapMapper.java | 54 ++++
.../mapper/InspectionRobotMapper.java | 55 ++++
.../mapper/InspectionTaskInstanceMapper.java | 63 ++++
.../mapper/InspectionTaskMapper.java | 55 ++++
.../mapper/InspectionTaskWaypointMapper.java | 53 ++++
.../mapper/InspectionWaypointMapper.java | 55 ++++
.../service/IInspectionAlarmService.java | 57 ++++
.../service/IInspectionMapService.java | 57 ++++
.../service/IInspectionRobotService.java | 57 ++++
.../IInspectionTaskInstanceService.java | 88 ++++++
.../service/IInspectionTaskService.java | 81 +++++
.../service/IInspectionWaypointService.java | 57 ++++
.../impl/InspectionAlarmServiceImpl.java | 96 ++++++
.../impl/InspectionMapServiceImpl.java | 95 ++++++
.../impl/InspectionRobotServiceImpl.java | 96 ++++++
.../InspectionTaskInstanceServiceImpl.java | 194 ++++++++++++
.../impl/InspectionTaskServiceImpl.java | 185 ++++++++++++
.../impl/InspectionWaypointServiceImpl.java | 119 ++++++++
.../inspection/InspectionAlarmMapper.xml | 197 +++++++++++++
.../mapper/inspection/InspectionMapMapper.xml | 133 +++++++++
.../inspection/InspectionRobotMapper.xml | 163 +++++++++++
.../InspectionTaskInstanceMapper.xml | 151 ++++++++++
.../inspection/InspectionTaskMapper.xml | 116 ++++++++
.../InspectionTaskWaypointMapper.xml | 54 ++++
.../inspection/InspectionWaypointMapper.xml | 131 +++++++++
.../test/model/domain/TeDetectionItem.java | 6 +-
.../test/model/domain/TeTaskConfigInfo.java | 6 +-
.../cmvr/test/model/vo/TeTaskOrchestraVO.java | 6 +-
.../service/ITeTaskOrchestrationService.java | 17 +-
.../impl/TeTaskConfigInfoServiceImpl.java | 8 +
.../impl/TeTaskOrchestrationServiceImpl.java | 25 +-
.../ti/model/domain/TiVehicleFunction.java | 5 +-
pom.xml | 8 +
sql/inspection_module.sql | 143 +++++++++
智能巡检模块-创建说明.md | 276 ++++++++++++++++++
63 files changed, 4804 insertions(+), 34 deletions(-)
create mode 100644 cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionAlarmController.java
create mode 100644 cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionMapController.java
create mode 100644 cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionRobotController.java
create mode 100644 cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionTaskController.java
create mode 100644 cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionTaskInstanceController.java
create mode 100644 cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionWaypointController.java
create mode 100644 cmvr-iot-inspection/pom.xml
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionAlarm.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionMap.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionRobot.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionTask.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionTaskInstance.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionTaskWaypoint.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionWaypoint.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/vo/InspectionAlarmVo.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/vo/InspectionMapVo.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/vo/InspectionRobotVo.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/vo/InspectionTaskInstanceVo.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/vo/InspectionTaskVo.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/vo/InspectionWaypointVo.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/enums/TaskStatusEnum.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionAlarmMapper.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionMapMapper.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionRobotMapper.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionTaskInstanceMapper.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionTaskMapper.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionTaskWaypointMapper.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionWaypointMapper.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionAlarmService.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionMapService.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionRobotService.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionTaskInstanceService.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionTaskService.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionWaypointService.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionAlarmServiceImpl.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionMapServiceImpl.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionRobotServiceImpl.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionTaskInstanceServiceImpl.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionTaskServiceImpl.java
create mode 100644 cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionWaypointServiceImpl.java
create mode 100644 cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionAlarmMapper.xml
create mode 100644 cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionMapMapper.xml
create mode 100644 cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionRobotMapper.xml
create mode 100644 cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionTaskInstanceMapper.xml
create mode 100644 cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionTaskMapper.xml
create mode 100644 cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionTaskWaypointMapper.xml
create mode 100644 cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionWaypointMapper.xml
create mode 100644 sql/inspection_module.sql
create mode 100644 智能巡检模块-创建说明.md
diff --git a/cmvr-iot-admin/pom.xml b/cmvr-iot-admin/pom.xml
index 9b66bc1..17b0b2d 100644
--- a/cmvr-iot-admin/pom.xml
+++ b/cmvr-iot-admin/pom.xml
@@ -77,6 +77,12 @@
com.cmvr
cmvr-iot-evaluation
+
+
+
+ com.cmvr
+ cmvr-iot-inspection
+
dev
diff --git a/cmvr-iot-admin/src/main/java/com/cmvr/CmvrIotApplication.java b/cmvr-iot-admin/src/main/java/com/cmvr/CmvrIotApplication.java
index 454973e..8cd2a20 100644
--- a/cmvr-iot-admin/src/main/java/com/cmvr/CmvrIotApplication.java
+++ b/cmvr-iot-admin/src/main/java/com/cmvr/CmvrIotApplication.java
@@ -1,5 +1,6 @@
package com.cmvr;
+import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
@@ -11,6 +12,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
* @author cmvr-iot
*/
@EnableScheduling
+@MapperScan("com.cmvr.**.mapper")
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class CmvrIotApplication
{
diff --git a/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionAlarmController.java b/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionAlarmController.java
new file mode 100644
index 0000000..37ec331
--- /dev/null
+++ b/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionAlarmController.java
@@ -0,0 +1,114 @@
+package com.cmvr.web.controller.inspection;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+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.cmvr.common.annotation.Log;
+import com.cmvr.common.core.controller.BaseController;
+import com.cmvr.common.core.domain.AjaxResult;
+import com.cmvr.common.enums.BusinessType;
+import com.cmvr.inspection.domain.InspectionAlarm;
+import com.cmvr.inspection.domain.vo.InspectionAlarmVo;
+import com.cmvr.inspection.service.IInspectionAlarmService;
+import com.cmvr.common.utils.poi.ExcelUtil;
+import com.cmvr.common.core.page.TableDataInfo;
+
+/**
+ * 巡检告警Controller
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+@RestController
+@RequestMapping("/inspection/alarm")
+@Api(tags = "智能巡检--告警管理")
+public class InspectionAlarmController extends BaseController
+{
+ @Autowired
+ private IInspectionAlarmService inspectionAlarmService;
+
+ /**
+ * 查询巡检告警列表
+ */
+ @ApiOperation("查询巡检告警列表")
+ @PreAuthorize("@ss.hasPermi('inspection:alarm:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(InspectionAlarm inspectionAlarm)
+ {
+ startPage();
+ List list = inspectionAlarmService.selectInspectionAlarmList(inspectionAlarm);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出巡检告警列表
+ */
+ @ApiOperation("导出巡检告警列表")
+ @PreAuthorize("@ss.hasPermi('inspection:alarm:export')")
+ @Log(title = "巡检告警", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, InspectionAlarm inspectionAlarm)
+ {
+ List list = inspectionAlarmService.selectInspectionAlarmList(inspectionAlarm);
+ ExcelUtil util = new ExcelUtil<>(InspectionAlarmVo.class);
+ util.exportExcel(response, list, "巡检告警数据");
+ }
+
+ /**
+ * 获取巡检告警详细信息
+ */
+ @ApiOperation("获取巡检告警详细信息")
+ @PreAuthorize("@ss.hasPermi('inspection:alarm:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") String id)
+ {
+ return success(inspectionAlarmService.selectInspectionAlarmById(id));
+ }
+
+ /**
+ * 新增巡检告警
+ */
+ @ApiOperation("新增巡检告警")
+ @PreAuthorize("@ss.hasPermi('inspection:alarm:add')")
+ @Log(title = "巡检告警", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody InspectionAlarm inspectionAlarm)
+ {
+ return toAjax(inspectionAlarmService.insertInspectionAlarm(inspectionAlarm));
+ }
+
+ /**
+ * 修改巡检告警
+ */
+ @ApiOperation("修改巡检告警")
+ @PreAuthorize("@ss.hasPermi('inspection:alarm:edit')")
+ @Log(title = "巡检告警", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody InspectionAlarm inspectionAlarm)
+ {
+ return toAjax(inspectionAlarmService.updateInspectionAlarm(inspectionAlarm));
+ }
+
+ /**
+ * 删除巡检告警
+ */
+ @ApiOperation("删除巡检告警")
+ @PreAuthorize("@ss.hasPermi('inspection:alarm:remove')")
+ @Log(title = "巡检告警", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable String[] ids)
+ {
+ return toAjax(inspectionAlarmService.deleteInspectionAlarmByIds(ids));
+ }
+}
diff --git a/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionMapController.java b/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionMapController.java
new file mode 100644
index 0000000..8652a24
--- /dev/null
+++ b/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionMapController.java
@@ -0,0 +1,114 @@
+package com.cmvr.web.controller.inspection;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+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.cmvr.common.annotation.Log;
+import com.cmvr.common.core.controller.BaseController;
+import com.cmvr.common.core.domain.AjaxResult;
+import com.cmvr.common.enums.BusinessType;
+import com.cmvr.inspection.domain.InspectionMap;
+import com.cmvr.inspection.domain.vo.InspectionMapVo;
+import com.cmvr.inspection.service.IInspectionMapService;
+import com.cmvr.common.utils.poi.ExcelUtil;
+import com.cmvr.common.core.page.TableDataInfo;
+
+/**
+ * 巡检地图Controller
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+@RestController
+@RequestMapping("/inspection/map")
+@Api(tags = "智能巡检--地图管理")
+public class InspectionMapController extends BaseController
+{
+ @Autowired
+ private IInspectionMapService inspectionMapService;
+
+ /**
+ * 查询巡检地图列表
+ */
+ @ApiOperation("查询巡检地图列表")
+ @PreAuthorize("@ss.hasPermi('inspection:map:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(InspectionMap inspectionMap)
+ {
+ startPage();
+ List list = inspectionMapService.selectInspectionMapList(inspectionMap);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出巡检地图列表
+ */
+ @ApiOperation("导出巡检地图列表")
+ @PreAuthorize("@ss.hasPermi('inspection:map:export')")
+ @Log(title = "巡检地图", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, InspectionMap inspectionMap)
+ {
+ List list = inspectionMapService.selectInspectionMapList(inspectionMap);
+ ExcelUtil util = new ExcelUtil<>(InspectionMapVo.class);
+ util.exportExcel(response, list, "巡检地图数据");
+ }
+
+ /**
+ * 获取巡检地图详细信息
+ */
+ @ApiOperation("获取巡检地图详细信息")
+ @PreAuthorize("@ss.hasPermi('inspection:map:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") String id)
+ {
+ return success(inspectionMapService.selectInspectionMapById(id));
+ }
+
+ /**
+ * 新增巡检地图
+ */
+ @ApiOperation("新增巡检地图")
+ @PreAuthorize("@ss.hasPermi('inspection:map:add')")
+ @Log(title = "巡检地图", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody InspectionMap inspectionMap)
+ {
+ return toAjax(inspectionMapService.insertInspectionMap(inspectionMap));
+ }
+
+ /**
+ * 修改巡检地图
+ */
+ @ApiOperation("修改巡检地图")
+ @PreAuthorize("@ss.hasPermi('inspection:map:edit')")
+ @Log(title = "巡检地图", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody InspectionMap inspectionMap)
+ {
+ return toAjax(inspectionMapService.updateInspectionMap(inspectionMap));
+ }
+
+ /**
+ * 删除巡检地图
+ */
+ @ApiOperation("删除巡检地图")
+ @PreAuthorize("@ss.hasPermi('inspection:map:remove')")
+ @Log(title = "巡检地图", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable String[] ids)
+ {
+ return toAjax(inspectionMapService.deleteInspectionMapByIds(ids));
+ }
+}
diff --git a/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionRobotController.java b/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionRobotController.java
new file mode 100644
index 0000000..9f9717b
--- /dev/null
+++ b/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionRobotController.java
@@ -0,0 +1,115 @@
+package com.cmvr.web.controller.inspection;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.cmvr.inspection.domain.vo.InspectionRobotVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+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.cmvr.common.annotation.Log;
+import com.cmvr.common.core.controller.BaseController;
+import com.cmvr.common.core.domain.AjaxResult;
+import com.cmvr.common.enums.BusinessType;
+import com.cmvr.inspection.domain.InspectionRobot;
+import com.cmvr.inspection.service.IInspectionRobotService;
+import com.cmvr.common.utils.poi.ExcelUtil;
+import com.cmvr.common.core.page.TableDataInfo;
+
+/**
+ * 巡检机器人Controller
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+@RestController
+@RequestMapping("/inspection/robot")
+@Api(tags = "智能巡检--机器人管理")
+public class InspectionRobotController extends BaseController
+{
+ @Autowired
+ private IInspectionRobotService inspectionRobotService;
+
+ /**
+ * 查询巡检机器人列表
+ */
+ @ApiOperation("查询巡检机器人列表")
+ @PreAuthorize("@ss.hasPermi('inspection:robot:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(InspectionRobot inspectionRobot)
+ {
+ startPage();
+ List list = inspectionRobotService.selectInspectionRobotList(inspectionRobot);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出巡检机器人列表
+ */
+ @ApiOperation("导出巡检机器人列表")
+ @PreAuthorize("@ss.hasPermi('inspection:robot:export')")
+ @Log(title = "巡检机器人", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, InspectionRobot inspectionRobot)
+ {
+ List list = inspectionRobotService.selectInspectionRobotList(inspectionRobot);
+ ExcelUtil util = new ExcelUtil<>(InspectionRobotVo.class);
+ util.exportExcel(response, list, "巡检机器人数据");
+ }
+
+ /**
+ * 获取巡检机器人详细信息
+ */
+ @ApiOperation("获取巡检机器人详细信息")
+ @PreAuthorize("@ss.hasPermi('inspection:robot:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") String id)
+ {
+ return success(inspectionRobotService.selectInspectionRobotById(id));
+ }
+
+ /**
+ * 新增巡检机器人
+ */
+ @ApiOperation("新增巡检机器人")
+ @PreAuthorize("@ss.hasPermi('inspection:robot:add')")
+ @Log(title = "巡检机器人", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody InspectionRobot inspectionRobot)
+ {
+ return toAjax(inspectionRobotService.insertInspectionRobot(inspectionRobot));
+ }
+
+ /**
+ * 修改巡检机器人
+ */
+ @ApiOperation("修改巡检机器人")
+ @PreAuthorize("@ss.hasPermi('inspection:robot:edit')")
+ @Log(title = "巡检机器人", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody InspectionRobot inspectionRobot)
+ {
+ return toAjax(inspectionRobotService.updateInspectionRobot(inspectionRobot));
+ }
+
+ /**
+ * 删除巡检机器人
+ */
+ @ApiOperation("删除巡检机器人")
+ @PreAuthorize("@ss.hasPermi('inspection:robot:remove')")
+ @Log(title = "巡检机器人", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable String[] ids)
+ {
+ return toAjax(inspectionRobotService.deleteInspectionRobotByIds(ids));
+ }
+}
diff --git a/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionTaskController.java b/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionTaskController.java
new file mode 100644
index 0000000..d5ffb7a
--- /dev/null
+++ b/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionTaskController.java
@@ -0,0 +1,151 @@
+package com.cmvr.web.controller.inspection;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+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.cmvr.common.annotation.Log;
+import com.cmvr.common.core.controller.BaseController;
+import com.cmvr.common.core.domain.AjaxResult;
+import com.cmvr.common.enums.BusinessType;
+import com.cmvr.inspection.domain.InspectionTask;
+import com.cmvr.inspection.domain.InspectionWaypoint;
+import com.cmvr.inspection.domain.vo.InspectionTaskVo;
+import com.cmvr.inspection.service.IInspectionTaskService;
+import com.cmvr.common.utils.poi.ExcelUtil;
+import com.cmvr.common.core.page.TableDataInfo;
+
+/**
+ * 巡检任务Controller
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+@RestController
+@RequestMapping("/inspection/task")
+@Api(tags = "智能巡检--任务管理")
+public class InspectionTaskController extends BaseController
+{
+ @Autowired
+ private IInspectionTaskService inspectionTaskService;
+
+ /**
+ * 查询巡检任务列表
+ */
+ @ApiOperation("查询巡检任务列表")
+ @PreAuthorize("@ss.hasPermi('inspection:task:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(InspectionTask inspectionTask)
+ {
+ startPage();
+ List list = inspectionTaskService.selectInspectionTaskList(inspectionTask);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出巡检任务列表
+ */
+ @ApiOperation("导出巡检任务列表")
+ @PreAuthorize("@ss.hasPermi('inspection:task:export')")
+ @Log(title = "巡检任务", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, InspectionTask inspectionTask)
+ {
+ List list = inspectionTaskService.selectInspectionTaskList(inspectionTask);
+ ExcelUtil util = new ExcelUtil<>(InspectionTaskVo.class);
+ util.exportExcel(response, list, "巡检任务数据");
+ }
+
+ /**
+ * 获取巡检任务详细信息
+ */
+ @ApiOperation("获取巡检任务详细信息")
+ @PreAuthorize("@ss.hasPermi('inspection:task:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") String id)
+ {
+ return success(inspectionTaskService.selectInspectionTaskById(id));
+ }
+
+ /**
+ * 新增巡检任务
+ */
+ @ApiOperation("新增巡检任务")
+ @PreAuthorize("@ss.hasPermi('inspection:task:add')")
+ @Log(title = "巡检任务", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody InspectionTask inspectionTask)
+ {
+ return toAjax(inspectionTaskService.insertInspectionTask(inspectionTask));
+ }
+
+ /**
+ * 修改巡检任务
+ */
+ @ApiOperation("修改巡检任务")
+ @PreAuthorize("@ss.hasPermi('inspection:task:edit')")
+ @Log(title = "巡检任务", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody InspectionTask inspectionTask)
+ {
+ return toAjax(inspectionTaskService.updateInspectionTask(inspectionTask));
+ }
+
+ /**
+ * 删除巡检任务
+ */
+ @ApiOperation("删除巡检任务")
+ @PreAuthorize("@ss.hasPermi('inspection:task:remove')")
+ @Log(title = "巡检任务", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable String[] ids)
+ {
+ return toAjax(inspectionTaskService.deleteInspectionTaskByIds(ids));
+ }
+
+ /**
+ * 查询任务关联的点位列表
+ */
+ @ApiOperation("查询任务关联的点位列表")
+ @PreAuthorize("@ss.hasPermi('inspection:task:query')")
+ @GetMapping("/{taskId}/waypoints")
+ public AjaxResult getWaypoints(@PathVariable("taskId") String taskId)
+ {
+ List list = inspectionTaskService.selectWaypointsByTaskId(taskId);
+ return success(list);
+ }
+
+ /**
+ * 绑定点位到任务
+ */
+ @ApiOperation("绑定点位到任务")
+ @PreAuthorize("@ss.hasPermi('inspection:task:edit')")
+ @Log(title = "巡检任务", businessType = BusinessType.UPDATE)
+ @PostMapping("/{taskId}/waypoints")
+ public AjaxResult bindWaypoints(@PathVariable("taskId") String taskId, @RequestBody String[] waypointIds)
+ {
+ return toAjax(inspectionTaskService.bindWaypoints(taskId, waypointIds));
+ }
+
+ /**
+ * 解绑任务的点位
+ */
+ @ApiOperation("解绑任务的点位")
+ @PreAuthorize("@ss.hasPermi('inspection:task:edit')")
+ @Log(title = "巡检任务", businessType = BusinessType.UPDATE)
+ @DeleteMapping("/{taskId}/waypoints")
+ public AjaxResult unbindWaypoints(@PathVariable("taskId") String taskId)
+ {
+ return toAjax(inspectionTaskService.unbindWaypoints(taskId));
+ }
+}
diff --git a/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionTaskInstanceController.java b/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionTaskInstanceController.java
new file mode 100644
index 0000000..5b005e2
--- /dev/null
+++ b/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionTaskInstanceController.java
@@ -0,0 +1,162 @@
+package com.cmvr.web.controller.inspection;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+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.cmvr.common.annotation.Log;
+import com.cmvr.common.core.controller.BaseController;
+import com.cmvr.common.core.domain.AjaxResult;
+import com.cmvr.common.enums.BusinessType;
+import com.cmvr.inspection.domain.InspectionTaskInstance;
+import com.cmvr.inspection.domain.vo.InspectionTaskInstanceVo;
+import com.cmvr.inspection.service.IInspectionTaskInstanceService;
+import com.cmvr.common.utils.poi.ExcelUtil;
+import com.cmvr.common.core.page.TableDataInfo;
+
+/**
+ * 巡检任务执行实例Controller
+ *
+ * @author cmvr-iot
+ * @since 2026-06-01
+ */
+@RestController
+@RequestMapping("/inspection/taskInstance")
+@Api(tags = "智能巡检--任务执行实例管理")
+public class InspectionTaskInstanceController extends BaseController
+{
+ @Autowired
+ private IInspectionTaskInstanceService inspectionTaskInstanceService;
+
+ /**
+ * 查询巡检任务执行实例列表
+ */
+ @ApiOperation("查询巡检任务执行实例列表")
+ @PreAuthorize("@ss.hasPermi('inspection:taskInstance:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(InspectionTaskInstance inspectionTaskInstance)
+ {
+ startPage();
+ List list = inspectionTaskInstanceService.selectInspectionTaskInstanceList(inspectionTaskInstance);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出巡检任务执行实例列表
+ */
+ @ApiOperation("导出巡检任务执行实例列表")
+ @PreAuthorize("@ss.hasPermi('inspection:taskInstance:export')")
+ @Log(title = "巡检任务执行实例", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, InspectionTaskInstance inspectionTaskInstance)
+ {
+ List list = inspectionTaskInstanceService.selectInspectionTaskInstanceList(inspectionTaskInstance);
+ ExcelUtil util = new ExcelUtil<>(InspectionTaskInstanceVo.class);
+ util.exportExcel(response, list, "巡检任务执行实例数据");
+ }
+
+ /**
+ * 获取巡检任务执行实例详细信息
+ */
+ @ApiOperation("获取巡检任务执行实例详细信息")
+ @PreAuthorize("@ss.hasPermi('inspection:taskInstance:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") String id)
+ {
+ return success(inspectionTaskInstanceService.selectInspectionTaskInstanceVoById(id));
+ }
+
+ /**
+ * 新增巡检任务执行实例
+ */
+ @ApiOperation("新增巡检任务执行实例")
+ @PreAuthorize("@ss.hasPermi('inspection:taskInstance:add')")
+ @Log(title = "巡检任务执行实例", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody InspectionTaskInstance inspectionTaskInstance)
+ {
+ return toAjax(inspectionTaskInstanceService.insertInspectionTaskInstance(inspectionTaskInstance));
+ }
+
+ /**
+ * 修改巡检任务执行实例
+ */
+ @ApiOperation("修改巡检任务执行实例")
+ @PreAuthorize("@ss.hasPermi('inspection:taskInstance:edit')")
+ @Log(title = "巡检任务执行实例", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody InspectionTaskInstance inspectionTaskInstance)
+ {
+ return toAjax(inspectionTaskInstanceService.updateInspectionTaskInstance(inspectionTaskInstance));
+ }
+
+ /**
+ * 删除巡检任务执行实例
+ */
+ @ApiOperation("删除巡检任务执行实例")
+ @PreAuthorize("@ss.hasPermi('inspection:taskInstance:remove')")
+ @Log(title = "巡检任务执行实例", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable String[] ids)
+ {
+ return toAjax(inspectionTaskInstanceService.deleteInspectionTaskInstanceByIds(ids));
+ }
+
+ /**
+ * 开始执行任务实例
+ */
+ @ApiOperation("开始执行任务实例")
+ @PreAuthorize("@ss.hasPermi('inspection:taskInstance:edit')")
+ @Log(title = "巡检任务执行实例", businessType = BusinessType.UPDATE)
+ @PutMapping("/start/{id}")
+ public AjaxResult start(@PathVariable("id") String id)
+ {
+ return toAjax(inspectionTaskInstanceService.startInstance(id));
+ }
+
+ /**
+ * 暂停任务实例
+ */
+ @ApiOperation("暂停任务实例")
+ @PreAuthorize("@ss.hasPermi('inspection:taskInstance:edit')")
+ @Log(title = "巡检任务执行实例", businessType = BusinessType.UPDATE)
+ @PutMapping("/pause/{id}")
+ public AjaxResult pause(@PathVariable("id") String id)
+ {
+ return toAjax(inspectionTaskInstanceService.pauseInstance(id));
+ }
+
+ /**
+ * 终止任务实例
+ */
+ @ApiOperation("终止任务实例")
+ @PreAuthorize("@ss.hasPermi('inspection:taskInstance:edit')")
+ @Log(title = "巡检任务执行实例", businessType = BusinessType.UPDATE)
+ @PutMapping("/stop/{id}")
+ public AjaxResult stop(@PathVariable("id") String id)
+ {
+ return toAjax(inspectionTaskInstanceService.stopInstance(id));
+ }
+
+ /**
+ * 恢复任务实例
+ */
+ @ApiOperation("恢复任务实例")
+ @PreAuthorize("@ss.hasPermi('inspection:taskInstance:edit')")
+ @Log(title = "巡检任务执行实例", businessType = BusinessType.UPDATE)
+ @PutMapping("/resume/{id}")
+ public AjaxResult resume(@PathVariable("id") String id)
+ {
+ return toAjax(inspectionTaskInstanceService.resumeInstance(id));
+ }
+}
diff --git a/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionWaypointController.java b/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionWaypointController.java
new file mode 100644
index 0000000..d2e23f8
--- /dev/null
+++ b/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/InspectionWaypointController.java
@@ -0,0 +1,114 @@
+package com.cmvr.web.controller.inspection;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+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.cmvr.common.annotation.Log;
+import com.cmvr.common.core.controller.BaseController;
+import com.cmvr.common.core.domain.AjaxResult;
+import com.cmvr.common.enums.BusinessType;
+import com.cmvr.inspection.domain.InspectionWaypoint;
+import com.cmvr.inspection.domain.vo.InspectionWaypointVo;
+import com.cmvr.inspection.service.IInspectionWaypointService;
+import com.cmvr.common.utils.poi.ExcelUtil;
+import com.cmvr.common.core.page.TableDataInfo;
+
+/**
+ * 巡检点位Controller
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+@RestController
+@RequestMapping("/inspection/waypoint")
+@Api(tags = "智能巡检--点位管理")
+public class InspectionWaypointController extends BaseController
+{
+ @Autowired
+ private IInspectionWaypointService inspectionWaypointService;
+
+ /**
+ * 查询巡检点位列表
+ */
+ @ApiOperation("查询巡检点位列表")
+ @PreAuthorize("@ss.hasPermi('inspection:waypoint:list')")
+ @GetMapping("/list")
+ public TableDataInfo list(InspectionWaypoint inspectionWaypoint)
+ {
+ startPage();
+ List list = inspectionWaypointService.selectInspectionWaypointList(inspectionWaypoint);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导出巡检点位列表
+ */
+ @ApiOperation("导出巡检点位列表")
+ @PreAuthorize("@ss.hasPermi('inspection:waypoint:export')")
+ @Log(title = "巡检点位", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(HttpServletResponse response, InspectionWaypoint inspectionWaypoint)
+ {
+ List list = inspectionWaypointService.selectInspectionWaypointList(inspectionWaypoint);
+ ExcelUtil util = new ExcelUtil<>(InspectionWaypointVo.class);
+ util.exportExcel(response, list, "巡检点位数据");
+ }
+
+ /**
+ * 获取巡检点位详细信息
+ */
+ @ApiOperation("获取巡检点位详细信息")
+ @PreAuthorize("@ss.hasPermi('inspection:waypoint:query')")
+ @GetMapping(value = "/{id}")
+ public AjaxResult getInfo(@PathVariable("id") String id)
+ {
+ return success(inspectionWaypointService.selectInspectionWaypointById(id));
+ }
+
+ /**
+ * 新增巡检点位
+ */
+ @ApiOperation("新增巡检点位")
+ @PreAuthorize("@ss.hasPermi('inspection:waypoint:add')")
+ @Log(title = "巡检点位", businessType = BusinessType.INSERT)
+ @PostMapping
+ public AjaxResult add(@RequestBody InspectionWaypoint inspectionWaypoint)
+ {
+ return toAjax(inspectionWaypointService.insertInspectionWaypoint(inspectionWaypoint));
+ }
+
+ /**
+ * 修改巡检点位
+ */
+ @ApiOperation("修改巡检点位")
+ @PreAuthorize("@ss.hasPermi('inspection:waypoint:edit')")
+ @Log(title = "巡检点位", businessType = BusinessType.UPDATE)
+ @PutMapping
+ public AjaxResult edit(@RequestBody InspectionWaypoint inspectionWaypoint)
+ {
+ return toAjax(inspectionWaypointService.updateInspectionWaypoint(inspectionWaypoint));
+ }
+
+ /**
+ * 删除巡检点位
+ */
+ @ApiOperation("删除巡检点位")
+ @PreAuthorize("@ss.hasPermi('inspection:waypoint:remove')")
+ @Log(title = "巡检点位", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public AjaxResult remove(@PathVariable String[] ids)
+ {
+ return toAjax(inspectionWaypointService.deleteInspectionWaypointByIds(ids));
+ }
+}
diff --git a/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/test/TeFlowController.java b/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/test/TeFlowController.java
index 07fb58a..10ad716 100644
--- a/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/test/TeFlowController.java
+++ b/cmvr-iot-admin/src/main/java/com/cmvr/web/controller/test/TeFlowController.java
@@ -51,11 +51,11 @@ public class TeFlowController extends BaseController {
}
- @ApiOperation("任务执行入口")
+ @ApiOperation("演示任务执行入口")
@PostMapping("/demo")
@Anonymous
public AjaxResult demo(@Valid @RequestBody TeTaskExecuteNormalVO taskExecuteNormalVO) {
- if (taskInstIdList.size() > 0) {
+ if (!taskInstIdList.isEmpty()) {
try {
taskInstIdList.forEach(flowControlService::stop);
} catch (Exception e) {
diff --git a/cmvr-iot-admin/src/main/resources/application-test.yml b/cmvr-iot-admin/src/main/resources/application-test.yml
index 4bd92cd..0ddd66d 100644
--- a/cmvr-iot-admin/src/main/resources/application-test.yml
+++ b/cmvr-iot-admin/src/main/resources/application-test.yml
@@ -92,7 +92,7 @@ spring:
# Minio配置
minio:
- url: http://192.168.10:9000
+ url: http://192.168.28.10:9000
accessKey: AKICMVR
secretKey: wJalrXUtnFEMI
bucketName: cmvr-iot
diff --git a/cmvr-iot-device/src/main/java/com/cmvr/device/domain/DeDeviceProfile.java b/cmvr-iot-device/src/main/java/com/cmvr/device/domain/DeDeviceProfile.java
index 704e06e..ee61329 100644
--- a/cmvr-iot-device/src/main/java/com/cmvr/device/domain/DeDeviceProfile.java
+++ b/cmvr-iot-device/src/main/java/com/cmvr/device/domain/DeDeviceProfile.java
@@ -6,9 +6,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
+import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
import com.cmvr.common.annotation.Excel;
import com.cmvr.common.core.domain.BaseEntity;
@@ -16,12 +15,13 @@ import com.cmvr.common.core.domain.BaseEntity;
* 设备配置信息对象 de_device_profile
*
* @author cmvr-iot
- * @date 2025-05-09
+ * @since 2025-05-09
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("设备配置类")
+@EqualsAndHashCode(callSuper = false)
public class DeDeviceProfile extends BaseEntity
{
private static final long serialVersionUID = 1L;
@@ -31,11 +31,6 @@ public class DeDeviceProfile extends BaseEntity
@TableId(value = "id",type = IdType.ASSIGN_UUID)
private String id;
- /** 备注 */
- @Excel(name = "备注")
- @ApiModelProperty("备注")
- private String remark;
-
/** 设备id */
@Excel(name = "设备id")
@ApiModelProperty("设备id")
diff --git a/cmvr-iot-device/src/main/java/com/cmvr/device/domain/vo/ProfileVo.java b/cmvr-iot-device/src/main/java/com/cmvr/device/domain/vo/ProfileVo.java
index 47b0315..c8961c9 100644
--- a/cmvr-iot-device/src/main/java/com/cmvr/device/domain/vo/ProfileVo.java
+++ b/cmvr-iot-device/src/main/java/com/cmvr/device/domain/vo/ProfileVo.java
@@ -7,6 +7,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
+import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.util.List;
@@ -15,6 +16,7 @@ import java.util.List;
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("参数视图类")
+@EqualsAndHashCode(callSuper = false)
public class ProfileVo extends BaseEntity {
@@ -23,11 +25,6 @@ public class ProfileVo extends BaseEntity {
@ApiModelProperty("设备类型")
private String deviceModel;
- /** 备注 */
- @Excel(name = "备注")
- @ApiModelProperty("备注")
- private String remark;
-
/** 设备id */
@Excel(name = "设备id")
@ApiModelProperty("设备id")
diff --git a/cmvr-iot-inspection/pom.xml b/cmvr-iot-inspection/pom.xml
new file mode 100644
index 0000000..3f8d31a
--- /dev/null
+++ b/cmvr-iot-inspection/pom.xml
@@ -0,0 +1,33 @@
+
+
+ 4.0.0
+
+ com.cmvr
+ cmvr-iot
+ 3.8.9
+
+
+ cmvr-iot-inspection
+
+
+ 智能巡检模块
+
+
+
+
+
+
+ com.cmvr
+ cmvr-iot-common
+
+
+
+
+ com.cmvr
+ cmvr-iot-test
+
+
+
+
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionAlarm.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionAlarm.java
new file mode 100644
index 0000000..6674bcc
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionAlarm.java
@@ -0,0 +1,102 @@
+package com.cmvr.inspection.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import com.cmvr.common.annotation.Excel;
+import com.cmvr.common.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 巡检告警对象 inspection_alarm
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("巡检告警")
+public class InspectionAlarm extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("id")
+ @TableId(value = "id", type = IdType.ASSIGN_UUID)
+ private String id;
+
+ @Excel(name = "告警编码")
+ @ApiModelProperty("告警编码")
+ private String alarmCode;
+
+ @Excel(name = "任务执行实例ID")
+ @ApiModelProperty("任务执行实例ID")
+ private String taskInstanceId;
+
+ @Excel(name = "任务ID")
+ @ApiModelProperty("任务ID")
+ private String taskId;
+
+ @Excel(name = "任务名称")
+ @ApiModelProperty("任务名称")
+ private String taskName;
+
+ @Excel(name = "机器人ID")
+ @ApiModelProperty("机器人ID")
+ private String robotId;
+
+ @Excel(name = "机器人名称")
+ @ApiModelProperty("机器人名称")
+ private String robotName;
+
+ @Excel(name = "告警级别")
+ @ApiModelProperty("告警级别(1提示 2警告 3严重)")
+ private String alarmLevel;
+
+ @Excel(name = "告警类型")
+ @ApiModelProperty("告警类型(1设备异常 2环境异常 3任务异常 4通信异常)")
+ private String alarmType;
+
+ @Excel(name = "告警标题")
+ @ApiModelProperty("告警标题")
+ private String alarmTitle;
+
+ @Excel(name = "告警内容")
+ @ApiModelProperty("告警内容")
+ private String alarmContent;
+
+ @Excel(name = "告警位置")
+ @ApiModelProperty("告警位置")
+ private String alarmLocation;
+
+ @Excel(name = "告警时间")
+ @ApiModelProperty("告警时间")
+ private Date alarmTime;
+
+ @Excel(name = "处理状态")
+ @ApiModelProperty("处理状态(0未处理 1处理中 2已处理 3已忽略)")
+ private String handleStatus;
+
+ @Excel(name = "处理人")
+ @ApiModelProperty("处理人")
+ private String handler;
+
+ @Excel(name = "处理时间")
+ @ApiModelProperty("处理时间")
+ private Date handleTime;
+
+ @Excel(name = "处理说明")
+ @ApiModelProperty("处理说明")
+ private String handleRemark;
+
+ @ApiModelProperty("图片证据")
+ private String evidenceImage;
+
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionMap.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionMap.java
new file mode 100644
index 0000000..0f869e5
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionMap.java
@@ -0,0 +1,64 @@
+package com.cmvr.inspection.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import com.cmvr.common.annotation.Excel;
+import com.cmvr.common.core.domain.BaseEntity;
+
+/**
+ * 巡检地图对象 inspection_map
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("巡检地图")
+public class InspectionMap extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** id */
+ @ApiModelProperty("id")
+ @TableId(value = "id", type = IdType.ASSIGN_UUID)
+ private String id;
+
+ /** 地图名称 */
+ @Excel(name = "地图名称")
+ @ApiModelProperty("地图名称")
+ private String mapName;
+
+ /** 地图来源的机器人id */
+ @Excel(name = "地图来源的机器人id")
+ @ApiModelProperty("地图来源的机器人id")
+ private String mapSourceRobotId;
+
+ /** 地图来源的地图名称 */
+ @Excel(name = "地图来源的地图名称")
+ @ApiModelProperty("地图来源的地图名称")
+ private String mapSourceName;
+
+ /** 地图文件路径 */
+ @Excel(name = "地图文件路径")
+ @ApiModelProperty("地图文件路径")
+ private String mapFilePath;
+
+ /** 状态 */
+ @Excel(name = "状态")
+ @ApiModelProperty("状态(0正常 1停用)")
+ private String status;
+
+ /** 地图描述 */
+ @Excel(name = "地图描述")
+ @ApiModelProperty("地图描述")
+ private String mapDesc;
+
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionRobot.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionRobot.java
new file mode 100644
index 0000000..db3ad1f
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionRobot.java
@@ -0,0 +1,84 @@
+package com.cmvr.inspection.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import com.cmvr.common.annotation.Excel;
+import com.cmvr.common.core.domain.BaseEntity;
+
+/**
+ * 巡检机器人对象 inspection_robot
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("巡检机器人")
+public class InspectionRobot extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** id */
+ @ApiModelProperty("id")
+ @TableId(value = "id", type = IdType.ASSIGN_UUID)
+ private String id;
+
+ /** 机器人编码 */
+ @Excel(name = "机器人编码")
+ @ApiModelProperty("机器人编码")
+ private String robotCode;
+
+ /** 机器人名称 */
+ @Excel(name = "机器人名称")
+ @ApiModelProperty("机器人名称")
+ private String robotName;
+
+ /** 机器人型号 */
+ @Excel(name = "机器人型号")
+ @ApiModelProperty("机器人型号")
+ private String robotModel;
+
+ /** 机器人类型 */
+ @Excel(name = "机器人类型")
+ @ApiModelProperty("机器人类型")
+ private String robotType;
+
+ /** IP地址 */
+ @Excel(name = "IP地址")
+ @ApiModelProperty("IP地址")
+ private String ipAddress;
+
+ /** 端口号 */
+ @Excel(name = "端口号")
+ @ApiModelProperty("端口号")
+ private Integer port;
+
+ /** 当前地图 */
+ @Excel(name = "当前地图")
+ @ApiModelProperty("当前地图")
+ private String currentMapId;
+
+ /** 当前状态 */
+ @Excel(name = "当前状态")
+ @ApiModelProperty("当前状态(0在线 1离线 2充电中 3巡检中)")
+ private String status;
+
+ /** 电量百分比 */
+ @Excel(name = "电量百分比")
+ @ApiModelProperty("电量百分比")
+ private Integer batteryLevel;
+
+ /** 当前位置 */
+ @Excel(name = "当前位置")
+ @ApiModelProperty("当前位置")
+ private String currentPosition;
+
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionTask.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionTask.java
new file mode 100644
index 0000000..0ffe1ee
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionTask.java
@@ -0,0 +1,50 @@
+package com.cmvr.inspection.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import com.cmvr.common.annotation.Excel;
+import com.cmvr.common.core.domain.BaseEntity;
+
+/**
+ * 巡检任务对象 inspection_task
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("巡检任务")
+public class InspectionTask extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("id")
+ @TableId(value = "id", type = IdType.ASSIGN_UUID)
+ private String id;
+
+ @Excel(name = "任务编码")
+ @ApiModelProperty("任务编码")
+ private String taskCode;
+
+ @Excel(name = "任务名称")
+ @ApiModelProperty("任务名称")
+ private String taskName;
+
+ @Excel(name = "任务类型")
+ @ApiModelProperty("任务类型(1巡检任务 2讲解任务)")
+ private String taskType;
+
+ /** 任务id */
+ @Excel(name = "任务id")
+ @ApiModelProperty("任务id")
+ private String teTaskConfigId;
+
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionTaskInstance.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionTaskInstance.java
new file mode 100644
index 0000000..1d57d01
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionTaskInstance.java
@@ -0,0 +1,55 @@
+package com.cmvr.inspection.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import com.cmvr.common.annotation.Excel;
+import com.cmvr.common.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 巡检任务执行实例对象 inspection_task_instance
+ *
+ * @author cmvr-iot
+ * @since 2026-06-01
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("巡检任务执行实例")
+public class InspectionTaskInstance extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("id")
+ @TableId(value = "id", type = IdType.ASSIGN_UUID)
+ private String id;
+
+ @Excel(name = "任务ID")
+ @ApiModelProperty("任务ID")
+ private String taskId;
+
+ @Excel(name = "机器人ID")
+ @ApiModelProperty("机器人ID")
+ private String robotId;
+
+ @Excel(name = "执行状态")
+ @ApiModelProperty("执行状态(0待执行 1执行中 2已完成 3已取消 4执行失败 5已暂停)")
+ private Integer status;
+
+ @Excel(name = "开始时间")
+ @ApiModelProperty("开始时间")
+ private Date startTime;
+
+ @Excel(name = "结束时间")
+ @ApiModelProperty("结束时间")
+ private Date endTime;
+
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionTaskWaypoint.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionTaskWaypoint.java
new file mode 100644
index 0000000..ae0c96f
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionTaskWaypoint.java
@@ -0,0 +1,26 @@
+package com.cmvr.inspection.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 巡检任务与点位关联对象 inspection_task_waypoint
+ *
+ * @author cmvr-iot
+ * @since 2026-06-01
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class InspectionTaskWaypoint
+{
+ /** 任务ID */
+ private String taskId;
+
+ /** 点位ID */
+ private String waypointId;
+
+ /** 排序号 */
+ private Integer sortOrder;
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionWaypoint.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionWaypoint.java
new file mode 100644
index 0000000..de29332
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/InspectionWaypoint.java
@@ -0,0 +1,54 @@
+package com.cmvr.inspection.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import com.cmvr.common.annotation.Excel;
+import com.cmvr.common.core.domain.BaseEntity;
+
+/**
+ * 巡检点位对象 inspection_waypoint
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("巡检点位")
+public class InspectionWaypoint extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("id")
+ @TableId(value = "id", type = IdType.ASSIGN_UUID)
+ private String id;
+
+ @Excel(name = "点位名称")
+ @ApiModelProperty("点位名称")
+ private String waypointName;
+
+ @Excel(name = "是否启用")
+ @ApiModelProperty("是否启用(0启用 1禁用)")
+ private String enabled;
+
+ @Excel(name = "排序号")
+ @ApiModelProperty("排序号")
+ private Integer sortOrder;
+
+ /** 检测项配置id */
+ @Excel(name = "检测项配置id")
+ @ApiModelProperty("检测项配置id")
+ private String detectItemId;
+
+ @Excel(name = "地图id")
+ @ApiModelProperty("地图id")
+ private String mapId;
+
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/vo/InspectionAlarmVo.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/vo/InspectionAlarmVo.java
new file mode 100644
index 0000000..d7debd3
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/vo/InspectionAlarmVo.java
@@ -0,0 +1,127 @@
+package com.cmvr.inspection.domain.vo;
+
+import com.cmvr.common.annotation.Excel;
+import com.cmvr.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+/**
+ * 巡检告警视图对象(包含关联信息)
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("巡检告警视图对象")
+public class InspectionAlarmVo extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** id */
+ @ApiModelProperty("id")
+ private String id;
+
+ /** 告警编码 */
+ @Excel(name = "告警编码")
+ @ApiModelProperty("告警编码")
+ private String alarmCode;
+
+ /** 任务执行实例ID */
+ @Excel(name = "任务执行实例ID")
+ @ApiModelProperty("任务执行实例ID")
+ private String taskInstanceId;
+
+ /** 任务ID */
+ @Excel(name = "任务ID")
+ @ApiModelProperty("任务ID")
+ private String taskId;
+
+ /** 任务名称(关联字段) */
+ @Excel(name = "任务名称")
+ @ApiModelProperty("任务名称")
+ private String taskName;
+
+ /** 机器人ID */
+ @Excel(name = "机器人ID")
+ @ApiModelProperty("机器人ID")
+ private String robotId;
+
+ /** 机器人名称(关联字段) */
+ @Excel(name = "机器人名称")
+ @ApiModelProperty("机器人名称")
+ private String robotName;
+
+ /** 告警级别 */
+ @Excel(name = "告警级别")
+ @ApiModelProperty("告警级别(1提示 2警告 3严重)")
+ private String alarmLevel;
+
+ /** 告警类型 */
+ @Excel(name = "告警类型")
+ @ApiModelProperty("告警类型(1设备异常 2环境异常 3任务异常 4通信异常)")
+ private String alarmType;
+
+ /** 告警标题 */
+ @Excel(name = "告警标题")
+ @ApiModelProperty("告警标题")
+ private String alarmTitle;
+
+ /** 告警内容 */
+ @Excel(name = "告警内容")
+ @ApiModelProperty("告警内容")
+ private String alarmContent;
+
+ /** 告警位置 */
+ @Excel(name = "告警位置")
+ @ApiModelProperty("告警位置")
+ private String alarmLocation;
+
+ /** 告警时间 */
+ @Excel(name = "告警时间", dateFormat = "yyyy-MM-dd HH:mm:ss")
+ @ApiModelProperty("告警时间")
+ private Date alarmTime;
+
+ /** 处理状态 */
+ @Excel(name = "处理状态")
+ @ApiModelProperty("处理状态(0未处理 1处理中 2已处理 3已忽略)")
+ private String handleStatus;
+
+ /** 处理人 */
+ @Excel(name = "处理人")
+ @ApiModelProperty("处理人")
+ private String handler;
+
+ /** 处理时间 */
+ @Excel(name = "处理时间", dateFormat = "yyyy-MM-dd HH:mm:ss")
+ @ApiModelProperty("处理时间")
+ private Date handleTime;
+
+ /** 处理说明 */
+ @Excel(name = "处理说明")
+ @ApiModelProperty("处理说明")
+ private String handleRemark;
+
+ /** 图片证据 */
+ @Excel(name = "图片证据")
+ @ApiModelProperty("图片证据")
+ private String evidenceImage;
+
+ /** 创建人昵称 */
+ @Excel(name = "创建人昵称")
+ @ApiModelProperty("创建人昵称")
+ private String createByName;
+
+ /** 修改人昵称 */
+ @Excel(name = "修改人昵称")
+ @ApiModelProperty("修改人昵称")
+ private String updateByName;
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/vo/InspectionMapVo.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/vo/InspectionMapVo.java
new file mode 100644
index 0000000..f502e20
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/vo/InspectionMapVo.java
@@ -0,0 +1,76 @@
+package com.cmvr.inspection.domain.vo;
+
+import com.cmvr.common.annotation.Excel;
+import com.cmvr.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * 巡检地图视图对象(包含关联信息)
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("巡检地图视图对象")
+public class InspectionMapVo extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** id */
+ @ApiModelProperty("id")
+ private String id;
+
+ /** 地图名称 */
+ @Excel(name = "地图名称")
+ @ApiModelProperty("地图名称")
+ private String mapName;
+
+ /** 地图来源的机器人id */
+ @Excel(name = "地图来源的机器人id")
+ @ApiModelProperty("地图来源的机器人id")
+ private String mapSourceRobotId;
+
+ /** 地图来源的机器人名称(关联字段) */
+ @Excel(name = "地图来源的机器人名称")
+ @ApiModelProperty("地图来源的机器人名称")
+ private String mapSourceRobotName;
+
+ /** 地图来源的地图名称 */
+ @Excel(name = "地图来源的地图名称")
+ @ApiModelProperty("地图来源的地图名称")
+ private String mapSourceName;
+
+ /** 地图文件路径 */
+ @Excel(name = "地图文件路径")
+ @ApiModelProperty("地图文件路径")
+ private String mapFilePath;
+
+ /** 状态 */
+ @Excel(name = "状态")
+ @ApiModelProperty("状态(0正常 1停用)")
+ private String status;
+
+ /** 地图描述 */
+ @Excel(name = "地图描述")
+ @ApiModelProperty("地图描述")
+ private String mapDesc;
+
+ /** 创建人昵称 */
+ @Excel(name = "创建人昵称")
+ @ApiModelProperty("创建人昵称")
+ private String createByName;
+
+ /** 修改人昵称 */
+ @Excel(name = "修改人昵称")
+ @ApiModelProperty("修改人昵称")
+ private String updateByName;
+
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/vo/InspectionRobotVo.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/vo/InspectionRobotVo.java
new file mode 100644
index 0000000..d60c2f0
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/vo/InspectionRobotVo.java
@@ -0,0 +1,96 @@
+package com.cmvr.inspection.domain.vo;
+
+import com.cmvr.common.annotation.Excel;
+import com.cmvr.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * 巡检机器人视图对象(包含关联信息)
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("巡检机器人视图对象")
+public class InspectionRobotVo extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** id */
+ @ApiModelProperty("id")
+ private String id;
+
+ /** 机器人编码 */
+ @Excel(name = "机器人编码")
+ @ApiModelProperty("机器人编码")
+ private String robotCode;
+
+ /** 机器人名称 */
+ @Excel(name = "机器人名称")
+ @ApiModelProperty("机器人名称")
+ private String robotName;
+
+ /** 机器人型号 */
+ @Excel(name = "机器人型号")
+ @ApiModelProperty("机器人型号")
+ private String robotModel;
+
+ /** 机器人类型 */
+ @Excel(name = "机器人类型")
+ @ApiModelProperty("机器人类型")
+ private String robotType;
+
+ /** IP地址 */
+ @Excel(name = "IP地址")
+ @ApiModelProperty("IP地址")
+ private String ipAddress;
+
+ /** 端口号 */
+ @Excel(name = "端口号")
+ @ApiModelProperty("端口号")
+ private Integer port;
+
+ /** 当前地图ID */
+ @Excel(name = "当前地图ID")
+ @ApiModelProperty("当前地图ID")
+ private String currentMapId;
+
+ /** 当前地图名称(关联字段) */
+ @Excel(name = "当前地图名称")
+ @ApiModelProperty("当前地图名称")
+ private String currentMapName;
+
+ /** 当前状态 */
+ @Excel(name = "当前状态")
+ @ApiModelProperty("当前状态(0在线 1离线 2充电中 3巡检中)")
+ private String status;
+
+ /** 电量百分比 */
+ @Excel(name = "电量百分比")
+ @ApiModelProperty("电量百分比")
+ private Integer batteryLevel;
+
+ /** 当前位置 */
+ @Excel(name = "当前位置")
+ @ApiModelProperty("当前位置")
+ private String currentPosition;
+
+ /** 创建人昵称 */
+ @Excel(name = "创建人昵称")
+ @ApiModelProperty("创建人昵称")
+ private String createByName;
+
+ /** 修改人昵称 */
+ @Excel(name = "修改人昵称")
+ @ApiModelProperty("修改人昵称")
+ private String updateByName;
+
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/vo/InspectionTaskInstanceVo.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/vo/InspectionTaskInstanceVo.java
new file mode 100644
index 0000000..c5ea52f
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/vo/InspectionTaskInstanceVo.java
@@ -0,0 +1,93 @@
+package com.cmvr.inspection.domain.vo;
+
+import com.cmvr.common.annotation.Excel;
+import com.cmvr.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+/**
+ * 巡检任务执行实例视图对象(包含关联信息)
+ *
+ * @author cmvr-iot
+ * @since 2026-06-01
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("巡检任务执行实例视图对象")
+public class InspectionTaskInstanceVo extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** id */
+ @ApiModelProperty("id")
+ private String id;
+
+ /** 任务ID */
+ @Excel(name = "任务ID")
+ @ApiModelProperty("任务ID")
+ private String taskId;
+
+ /** 任务名称(关联字段) */
+ @Excel(name = "任务名称")
+ @ApiModelProperty("任务名称")
+ private String taskName;
+
+ /** 任务编码(关联字段) */
+ @Excel(name = "任务编码")
+ @ApiModelProperty("任务编码")
+ private String taskCode;
+
+ /** 机器人ID */
+ @Excel(name = "机器人ID")
+ @ApiModelProperty("机器人ID")
+ private String robotId;
+
+ /** 机器人名称(关联字段) */
+ @Excel(name = "机器人名称")
+ @ApiModelProperty("机器人名称")
+ private String robotName;
+
+ /** 地图ID */
+ @Excel(name = "地图ID")
+ @ApiModelProperty("地图ID")
+ private String mapId;
+
+ /** 地图名称(关联字段) */
+ @Excel(name = "地图名称")
+ @ApiModelProperty("地图名称")
+ private String mapName;
+
+ /** 执行状态 */
+ @Excel(name = "执行状态")
+ @ApiModelProperty("执行状态(0待执行 1执行中 2已完成 3已取消 4执行失败 5已暂停)")
+ private String status;
+
+ /** 开始时间 */
+ @Excel(name = "开始时间", dateFormat = "yyyy-MM-dd HH:mm:ss")
+ @ApiModelProperty("开始时间")
+ private Date startTime;
+
+ /** 结束时间 */
+ @Excel(name = "结束时间", dateFormat = "yyyy-MM-dd HH:mm:ss")
+ @ApiModelProperty("结束时间")
+ private Date endTime;
+
+ /** 创建人昵称 */
+ @Excel(name = "创建人昵称")
+ @ApiModelProperty("创建人昵称")
+ private String createByName;
+
+ /** 修改人昵称 */
+ @Excel(name = "修改人昵称")
+ @ApiModelProperty("修改人昵称")
+ private String updateByName;
+
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/vo/InspectionTaskVo.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/vo/InspectionTaskVo.java
new file mode 100644
index 0000000..b6b064e
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/vo/InspectionTaskVo.java
@@ -0,0 +1,56 @@
+package com.cmvr.inspection.domain.vo;
+
+import com.cmvr.common.annotation.Excel;
+import com.cmvr.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * 巡检任务视图对象(包含关联信息)
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("巡检任务视图对象")
+public class InspectionTaskVo extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** id */
+ @ApiModelProperty("id")
+ private String id;
+
+ /** 任务编码 */
+ @Excel(name = "任务编码")
+ @ApiModelProperty("任务编码")
+ private String taskCode;
+
+ /** 任务名称 */
+ @Excel(name = "任务名称")
+ @ApiModelProperty("任务名称")
+ private String taskName;
+
+ /** 任务类型 */
+ @Excel(name = "任务类型")
+ @ApiModelProperty("任务类型(1巡检任务 2讲解任务)")
+ private String taskType;
+
+ /** 创建人昵称 */
+ @Excel(name = "创建人昵称")
+ @ApiModelProperty("创建人昵称")
+ private String createByName;
+
+ /** 修改人昵称 */
+ @Excel(name = "修改人昵称")
+ @ApiModelProperty("修改人昵称")
+ private String updateByName;
+
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/vo/InspectionWaypointVo.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/vo/InspectionWaypointVo.java
new file mode 100644
index 0000000..ec9dfd4
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/domain/vo/InspectionWaypointVo.java
@@ -0,0 +1,75 @@
+package com.cmvr.inspection.domain.vo;
+
+import com.cmvr.common.annotation.Excel;
+import com.cmvr.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * 巡检点位视图对象(包含关联信息)
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("巡检点位视图对象")
+public class InspectionWaypointVo extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** id */
+ @ApiModelProperty("id")
+ private String id;
+
+ /** 点位名称 */
+ @Excel(name = "点位名称")
+ @ApiModelProperty("点位名称")
+ private String waypointName;
+
+ /** 是否启用 */
+ @Excel(name = "是否启用")
+ @ApiModelProperty("是否启用(0启用 1禁用)")
+ private String enabled;
+
+ /** 排序号 */
+ @Excel(name = "排序号")
+ @ApiModelProperty("排序号")
+ private Integer sortOrder;
+
+ /** 检测项配置id */
+ @Excel(name = "检测项配置id")
+ @ApiModelProperty("检测项配置id")
+ private String detectItemId;
+
+ /** 配置状态 */
+ @Excel(name = "配置状态")
+ @ApiModelProperty("配置状态")
+ private String configStatus;
+
+ /** 地图id */
+ @Excel(name = "地图id")
+ @ApiModelProperty("地图id")
+ private String mapId;
+
+ /** 地图名称 */
+ @Excel(name = "地图名称")
+ @ApiModelProperty("地图名称")
+ private String mapName;
+
+ /** 创建人昵称 */
+ @Excel(name = "创建人昵称")
+ @ApiModelProperty("创建人昵称")
+ private String createByName;
+
+ /** 修改人昵称 */
+ @Excel(name = "修改人昵称")
+ @ApiModelProperty("修改人昵称")
+ private String updateByName;
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/enums/TaskStatusEnum.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/enums/TaskStatusEnum.java
new file mode 100644
index 0000000..0043f10
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/enums/TaskStatusEnum.java
@@ -0,0 +1,28 @@
+package com.cmvr.inspection.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+@Getter
+@AllArgsConstructor
+public enum TaskStatusEnum {
+ // 未执行
+ NOT_STARTED(5, "未执行"),
+ SUCCESS(0, "已完成"),
+ RUNNING(1, "执行中"),
+ FAILED(2, "失败"),
+ PAUSED(3, "已暂停"),
+ STOPPED(4, "已终止");
+
+ private final int code;
+ private final String desc;
+
+ public static TaskStatusEnum fromCode(int code) {
+ for (TaskStatusEnum status : values()) {
+ if (status.code == code) {
+ return status;
+ }
+ }
+ return null;
+ }
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionAlarmMapper.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionAlarmMapper.java
new file mode 100644
index 0000000..7fa6ff7
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionAlarmMapper.java
@@ -0,0 +1,55 @@
+package com.cmvr.inspection.mapper;
+
+import java.util.List;
+import com.cmvr.inspection.domain.InspectionAlarm;
+import com.cmvr.inspection.domain.vo.InspectionAlarmVo;
+import com.github.yulichang.base.MPJBaseMapper;
+
+/**
+ * 巡检告警Mapper接口
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+public interface InspectionAlarmMapper extends MPJBaseMapper
+{
+ /**
+ * 查询巡检告警
+ *
+ * @param id 巡检告警主键
+ * @return 巡检告警
+ */
+ InspectionAlarm selectInspectionAlarmById(String id);
+
+ /**
+ * 新增巡检告警
+ *
+ * @param inspectionAlarm 巡检告警
+ * @return 结果
+ */
+ int insertInspectionAlarm(InspectionAlarm inspectionAlarm);
+
+ /**
+ * 修改巡检告警
+ *
+ * @param inspectionAlarm 巡检告警
+ * @return 结果
+ */
+ int updateInspectionAlarm(InspectionAlarm inspectionAlarm);
+
+ /**
+ * 批量删除巡检告警
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ int deleteInspectionAlarmByIds(String[] ids);
+
+ /**
+ * 查询巡检告警视图列表(包含关联信息)
+ *
+ * @param inspectionAlarm 巡检告警
+ * @return 巡检告警视图集合
+ */
+ List selectInspectionAlarmVoList(InspectionAlarm inspectionAlarm);
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionMapMapper.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionMapMapper.java
new file mode 100644
index 0000000..929da85
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionMapMapper.java
@@ -0,0 +1,54 @@
+package com.cmvr.inspection.mapper;
+
+import java.util.List;
+import com.cmvr.inspection.domain.InspectionMap;
+import com.cmvr.inspection.domain.vo.InspectionMapVo;
+import com.github.yulichang.base.MPJBaseMapper;
+
+/**
+ * 巡检地图Mapper接口
+ *
+ * @author cmvr-iot
+ */
+public interface InspectionMapMapper extends MPJBaseMapper
+{
+ /**
+ * 查询巡检地图
+ *
+ * @param id 巡检地图主键
+ * @return 巡检地图
+ */
+ InspectionMap selectInspectionMapById(String id);
+
+ /**
+ * 新增巡检地图
+ *
+ * @param inspectionMap 巡检地图
+ * @return 结果
+ */
+ int insertInspectionMap(InspectionMap inspectionMap);
+
+ /**
+ * 修改巡检地图
+ *
+ * @param inspectionMap 巡检地图
+ * @return 结果
+ */
+ int updateInspectionMap(InspectionMap inspectionMap);
+
+ /**
+ * 批量删除巡检地图
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ int deleteInspectionMapByIds(String[] ids);
+
+ /**
+ * 查询巡检地图视图列表(包含关联信息)
+ *
+ * @param inspectionMap 巡检地图
+ * @return 巡检地图视图集合
+ */
+ List selectInspectionMapVoList(InspectionMap inspectionMap);
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionRobotMapper.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionRobotMapper.java
new file mode 100644
index 0000000..07e9953
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionRobotMapper.java
@@ -0,0 +1,55 @@
+package com.cmvr.inspection.mapper;
+
+import java.util.List;
+import com.cmvr.inspection.domain.InspectionRobot;
+import com.cmvr.inspection.domain.vo.InspectionRobotVo;
+import com.github.yulichang.base.MPJBaseMapper;
+
+/**
+ * 巡检机器人Mapper接口
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+public interface InspectionRobotMapper extends MPJBaseMapper
+{
+ /**
+ * 查询巡检机器人
+ *
+ * @param id 巡检机器人主键
+ * @return 巡检机器人
+ */
+ InspectionRobot selectInspectionRobotById(String id);
+
+ /**
+ * 新增巡检机器人
+ *
+ * @param inspectionRobot 巡检机器人
+ * @return 结果
+ */
+ int insertInspectionRobot(InspectionRobot inspectionRobot);
+
+ /**
+ * 修改巡检机器人
+ *
+ * @param inspectionRobot 巡检机器人
+ * @return 结果
+ */
+ int updateInspectionRobot(InspectionRobot inspectionRobot);
+
+ /**
+ * 批量删除巡检机器人
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ int deleteInspectionRobotByIds(String[] ids);
+
+ /**
+ * 查询巡检机器人视图列表(包含关联信息)
+ *
+ * @param inspectionRobot 巡检机器人
+ * @return 巡检机器人视图集合
+ */
+ List selectInspectionRobotVoList(InspectionRobot inspectionRobot);
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionTaskInstanceMapper.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionTaskInstanceMapper.java
new file mode 100644
index 0000000..851bb0f
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionTaskInstanceMapper.java
@@ -0,0 +1,63 @@
+package com.cmvr.inspection.mapper;
+
+import java.util.List;
+import com.cmvr.inspection.domain.InspectionTaskInstance;
+import com.cmvr.inspection.domain.vo.InspectionTaskInstanceVo;
+import com.github.yulichang.base.MPJBaseMapper;
+
+/**
+ * 巡检任务执行实例Mapper接口
+ *
+ * @author cmvr-iot
+ * @since 2026-06-01
+ */
+public interface InspectionTaskInstanceMapper extends MPJBaseMapper
+{
+ /**
+ * 查询巡检任务执行实例
+ *
+ * @param id 巡检任务执行实例主键
+ * @return 巡检任务执行实例
+ */
+ InspectionTaskInstance selectInspectionTaskInstanceById(String id);
+
+ /**
+ * 查询巡检任务执行实例视图详情(包含关联信息)
+ *
+ * @param id 巡检任务执行实例主键
+ * @return 巡检任务执行实例视图
+ */
+ InspectionTaskInstanceVo selectInspectionTaskInstanceVoById(String id);
+
+ /**
+ * 新增巡检任务执行实例
+ *
+ * @param inspectionTaskInstance 巡检任务执行实例
+ * @return 结果
+ */
+ int insertInspectionTaskInstance(InspectionTaskInstance inspectionTaskInstance);
+
+ /**
+ * 修改巡检任务执行实例
+ *
+ * @param inspectionTaskInstance 巡检任务执行实例
+ * @return 结果
+ */
+ int updateInspectionTaskInstance(InspectionTaskInstance inspectionTaskInstance);
+
+ /**
+ * 批量删除巡检任务执行实例
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ int deleteInspectionTaskInstanceByIds(String[] ids);
+
+ /**
+ * 查询巡检任务执行实例视图列表(包含关联信息)
+ *
+ * @param inspectionTaskInstance 巡检任务执行实例
+ * @return 巡检任务执行实例视图集合
+ */
+ List selectInspectionTaskInstanceVoList(InspectionTaskInstance inspectionTaskInstance);
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionTaskMapper.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionTaskMapper.java
new file mode 100644
index 0000000..d41df20
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionTaskMapper.java
@@ -0,0 +1,55 @@
+package com.cmvr.inspection.mapper;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cmvr.inspection.domain.InspectionTask;
+import com.cmvr.inspection.domain.vo.InspectionTaskVo;
+
+/**
+ * 巡检任务Mapper接口
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+public interface InspectionTaskMapper extends BaseMapper {
+ /**
+ * 查询巡检任务
+ *
+ * @param id 巡检任务主键
+ * @return 巡检任务
+ */
+ InspectionTask selectInspectionTaskById(String id);
+
+ /**
+ * 新增巡检任务
+ *
+ * @param inspectionTask 巡检任务
+ * @return 结果
+ */
+ int insertInspectionTask(InspectionTask inspectionTask);
+
+ /**
+ * 修改巡检任务
+ *
+ * @param inspectionTask 巡检任务
+ * @return 结果
+ */
+ int updateInspectionTask(InspectionTask inspectionTask);
+
+ /**
+ * 批量删除巡检任务
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ int deleteInspectionTaskByIds(String[] ids);
+
+ /**
+ * 查询巡检任务视图列表(包含关联信息)
+ *
+ * @param inspectionTask 巡检任务
+ * @return 巡检任务视图集合
+ */
+ List selectInspectionTaskVoList(InspectionTask inspectionTask);
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionTaskWaypointMapper.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionTaskWaypointMapper.java
new file mode 100644
index 0000000..bdb97ac
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionTaskWaypointMapper.java
@@ -0,0 +1,53 @@
+package com.cmvr.inspection.mapper;
+
+import java.util.List;
+import com.cmvr.inspection.domain.InspectionTaskWaypoint;
+import com.cmvr.inspection.domain.InspectionWaypoint;
+import com.github.yulichang.base.MPJBaseMapper;
+
+/**
+ * 巡检任务与点位关联Mapper接口
+ *
+ * @author cmvr-iot
+ * @since 2026-06-01
+ */
+public interface InspectionTaskWaypointMapper extends MPJBaseMapper
+{
+ /**
+ * 查询任务关联的点位列表
+ *
+ * @param taskId 任务ID
+ * @return 点位集合
+ */
+ List selectWaypointsByTaskId(String taskId);
+
+ /**
+ * 批量新增任务与点位的关联关系
+ *
+ * @param list 关联关系列表
+ * @return 结果
+ */
+ int batchInsertTaskWaypoint(List list);
+
+ /**
+ * 根据任务ID删除关联关系
+ *
+ * @param taskId 任务ID
+ * @return 结果
+ */
+ int deleteTaskWaypointByTaskId(String taskId);
+
+ /**
+ * 根据任务ID批量删除关联关系
+ *
+ * @param taskIds 任务ID数组
+ */
+ void deleteTaskWaypointByTaskIds(String[] taskIds);
+
+ /**
+ * 根据点位ID批量删除关联关系
+ *
+ * @param waypointIds 点位ID数组
+ */
+ void deleteTaskWaypointByWaypointIds(String[] waypointIds);
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionWaypointMapper.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionWaypointMapper.java
new file mode 100644
index 0000000..52b0c66
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/InspectionWaypointMapper.java
@@ -0,0 +1,55 @@
+package com.cmvr.inspection.mapper;
+
+import java.util.List;
+import com.cmvr.inspection.domain.InspectionWaypoint;
+import com.cmvr.inspection.domain.vo.InspectionWaypointVo;
+import com.github.yulichang.base.MPJBaseMapper;
+
+/**
+ * 巡检点位Mapper接口
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+public interface InspectionWaypointMapper extends MPJBaseMapper
+{
+ /**
+ * 查询巡检点位
+ *
+ * @param id 巡检点位主键
+ * @return 巡检点位
+ */
+ InspectionWaypoint selectInspectionWaypointById(String id);
+
+ /**
+ * 新增巡检点位
+ *
+ * @param inspectionWaypoint 巡检点位
+ * @return 结果
+ */
+ int insertInspectionWaypoint(InspectionWaypoint inspectionWaypoint);
+
+ /**
+ * 修改巡检点位
+ *
+ * @param inspectionWaypoint 巡检点位
+ * @return 结果
+ */
+ int updateInspectionWaypoint(InspectionWaypoint inspectionWaypoint);
+
+ /**
+ * 批量删除巡检点位
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ int deleteInspectionWaypointByIds(String[] ids);
+
+ /**
+ * 查询巡检点位视图列表(包含关联信息)
+ *
+ * @param inspectionWaypoint 巡检点位
+ * @return 巡检点位视图集合
+ */
+ List selectInspectionWaypointVoList(InspectionWaypoint inspectionWaypoint);
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionAlarmService.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionAlarmService.java
new file mode 100644
index 0000000..decd5fd
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionAlarmService.java
@@ -0,0 +1,57 @@
+package com.cmvr.inspection.service;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cmvr.inspection.domain.InspectionAlarm;
+import com.cmvr.inspection.domain.vo.InspectionAlarmVo;
+
+/**
+ * 巡检告警Service接口
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+public interface IInspectionAlarmService extends IService
+{
+ /**
+ * 查询巡检告警
+ *
+ * @param id 巡检告警主键
+ * @return 巡检告警
+ */
+ InspectionAlarm selectInspectionAlarmById(String id);
+
+ /**
+ * 查询巡检告警列表
+ *
+ * @param inspectionAlarm 巡检告警
+ * @return 巡检告警集合
+ */
+ List selectInspectionAlarmList(InspectionAlarm inspectionAlarm);
+
+ /**
+ * 新增巡检告警
+ *
+ * @param inspectionAlarm 巡检告警
+ * @return 结果
+ */
+ int insertInspectionAlarm(InspectionAlarm inspectionAlarm);
+
+ /**
+ * 修改巡检告警
+ *
+ * @param inspectionAlarm 巡检告警
+ * @return 结果
+ */
+ int updateInspectionAlarm(InspectionAlarm inspectionAlarm);
+
+ /**
+ * 批量删除巡检告警
+ *
+ * @param ids 需要删除的巡检告警主键集合
+ * @return 结果
+ */
+ int deleteInspectionAlarmByIds(String[] ids);
+
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionMapService.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionMapService.java
new file mode 100644
index 0000000..9105ab1
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionMapService.java
@@ -0,0 +1,57 @@
+package com.cmvr.inspection.service;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cmvr.inspection.domain.InspectionMap;
+import com.cmvr.inspection.domain.vo.InspectionMapVo;
+
+/**
+ * 巡检地图Service接口
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+public interface IInspectionMapService extends IService
+{
+ /**
+ * 查询巡检地图
+ *
+ * @param id 巡检地图主键
+ * @return 巡检地图
+ */
+ InspectionMap selectInspectionMapById(String id);
+
+ /**
+ * 查询巡检地图列表
+ *
+ * @param inspectionMap 巡检地图
+ * @return 巡检地图集合
+ */
+ List selectInspectionMapList(InspectionMap inspectionMap);
+
+ /**
+ * 新增巡检地图
+ *
+ * @param inspectionMap 巡检地图
+ * @return 结果
+ */
+ int insertInspectionMap(InspectionMap inspectionMap);
+
+ /**
+ * 修改巡检地图
+ *
+ * @param inspectionMap 巡检地图
+ * @return 结果
+ */
+ int updateInspectionMap(InspectionMap inspectionMap);
+
+ /**
+ * 批量删除巡检地图
+ *
+ * @param ids 需要删除的巡检地图主键集合
+ * @return 结果
+ */
+ int deleteInspectionMapByIds(String[] ids);
+
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionRobotService.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionRobotService.java
new file mode 100644
index 0000000..2efa704
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionRobotService.java
@@ -0,0 +1,57 @@
+package com.cmvr.inspection.service;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cmvr.inspection.domain.InspectionRobot;
+import com.cmvr.inspection.domain.vo.InspectionRobotVo;
+
+/**
+ * 巡检机器人Service接口
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+public interface IInspectionRobotService extends IService
+{
+ /**
+ * 查询巡检机器人
+ *
+ * @param id 巡检机器人主键
+ * @return 巡检机器人
+ */
+ InspectionRobot selectInspectionRobotById(String id);
+
+ /**
+ * 查询巡检机器人列表
+ *
+ * @param inspectionRobot 巡检机器人
+ * @return 巡检机器人集合
+ */
+ List selectInspectionRobotList(InspectionRobot inspectionRobot);
+
+ /**
+ * 新增巡检机器人
+ *
+ * @param inspectionRobot 巡检机器人
+ * @return 结果
+ */
+ int insertInspectionRobot(InspectionRobot inspectionRobot);
+
+ /**
+ * 修改巡检机器人
+ *
+ * @param inspectionRobot 巡检机器人
+ * @return 结果
+ */
+ int updateInspectionRobot(InspectionRobot inspectionRobot);
+
+ /**
+ * 批量删除巡检机器人
+ *
+ * @param ids 需要删除的巡检机器人主键集合
+ * @return 结果
+ */
+ int deleteInspectionRobotByIds(String[] ids);
+
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionTaskInstanceService.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionTaskInstanceService.java
new file mode 100644
index 0000000..431b36d
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionTaskInstanceService.java
@@ -0,0 +1,88 @@
+package com.cmvr.inspection.service;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cmvr.inspection.domain.InspectionTaskInstance;
+import com.cmvr.inspection.domain.vo.InspectionTaskInstanceVo;
+/**
+ * 巡检任务执行实例Service接口
+ *
+ * @author cmvr-iot
+ * @since 2026-06-01
+ */
+public interface IInspectionTaskInstanceService extends IService
+{
+
+ /**
+ * 查询巡检任务执行实例视图详情(包含关联信息)
+ *
+ * @param id 巡检任务执行实例主键
+ * @return 巡检任务执行实例视图
+ */
+ InspectionTaskInstanceVo selectInspectionTaskInstanceVoById(String id);
+
+ /**
+ * 查询巡检任务执行实例列表
+ *
+ * @param inspectionTaskInstance 巡检任务执行实例
+ * @return 巡检任务执行实例集合
+ */
+ List selectInspectionTaskInstanceList(InspectionTaskInstance inspectionTaskInstance);
+
+ /**
+ * 新增巡检任务执行实例
+ *
+ * @param inspectionTaskInstance 巡检任务执行实例
+ * @return 结果
+ */
+ int insertInspectionTaskInstance(InspectionTaskInstance inspectionTaskInstance);
+
+ /**
+ * 修改巡检任务执行实例
+ *
+ * @param inspectionTaskInstance 巡检任务执行实例
+ * @return 结果
+ */
+ int updateInspectionTaskInstance(InspectionTaskInstance inspectionTaskInstance);
+
+ /**
+ * 批量删除巡检任务执行实例
+ *
+ * @param ids 需要删除的巡检任务执行实例主键集合
+ * @return 结果
+ */
+ int deleteInspectionTaskInstanceByIds(String[] ids);
+
+ /**
+ * 开始执行任务实例
+ *
+ * @param id 任务实例主键
+ * @return 结果
+ */
+ int startInstance(String id);
+
+ /**
+ * 暂停任务实例
+ *
+ * @param id 任务实例主键
+ * @return 结果
+ */
+ int pauseInstance(String id);
+
+ /**
+ * 终止任务实例
+ *
+ * @param id 任务实例主键
+ * @return 结果
+ */
+ int stopInstance(String id);
+
+ /**
+ * 恢复任务实例(从暂停恢复为执行中)
+ *
+ * @param id 任务实例主键
+ * @return 结果
+ */
+ int resumeInstance(String id);
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionTaskService.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionTaskService.java
new file mode 100644
index 0000000..5f817d3
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionTaskService.java
@@ -0,0 +1,81 @@
+package com.cmvr.inspection.service;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cmvr.inspection.domain.InspectionTask;
+import com.cmvr.inspection.domain.InspectionWaypoint;
+import com.cmvr.inspection.domain.vo.InspectionTaskVo;
+/**
+ * 巡检任务Service接口
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+public interface IInspectionTaskService extends IService
+{
+ /**
+ * 查询巡检任务
+ *
+ * @param id 巡检任务主键
+ * @return 巡检任务
+ */
+ InspectionTask selectInspectionTaskById(String id);
+
+ /**
+ * 查询巡检任务列表
+ *
+ * @param inspectionTask 巡检任务
+ * @return 巡检任务集合
+ */
+ List selectInspectionTaskList(InspectionTask inspectionTask);
+
+ /**
+ * 新增巡检任务
+ *
+ * @param inspectionTask 巡检任务
+ * @return 结果
+ */
+ int insertInspectionTask(InspectionTask inspectionTask);
+
+ /**
+ * 修改巡检任务
+ *
+ * @param inspectionTask 巡检任务
+ * @return 结果
+ */
+ int updateInspectionTask(InspectionTask inspectionTask);
+
+ /**
+ * 批量删除巡检任务
+ *
+ * @param ids 需要删除的巡检任务主键集合
+ * @return 结果
+ */
+ int deleteInspectionTaskByIds(String[] ids);
+
+ /**
+ * 查询任务关联的点位列表
+ *
+ * @param taskId 任务ID
+ * @return 点位集合
+ */
+ List selectWaypointsByTaskId(String taskId);
+
+ /**
+ * 绑定点位到任务
+ *
+ * @param taskId 任务ID
+ * @param waypointIds 点位ID数组
+ * @return 结果
+ */
+ int bindWaypoints(String taskId, String[] waypointIds);
+
+ /**
+ * 解绑任务的点位
+ *
+ * @param taskId 任务ID
+ * @return 结果
+ */
+ int unbindWaypoints(String taskId);
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionWaypointService.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionWaypointService.java
new file mode 100644
index 0000000..b193792
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/IInspectionWaypointService.java
@@ -0,0 +1,57 @@
+package com.cmvr.inspection.service;
+
+import java.util.List;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cmvr.inspection.domain.InspectionWaypoint;
+import com.cmvr.inspection.domain.vo.InspectionWaypointVo;
+
+/**
+ * 巡检点位Service接口
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+public interface IInspectionWaypointService extends IService
+{
+ /**
+ * 查询巡检点位
+ *
+ * @param id 巡检点位主键
+ * @return 巡检点位
+ */
+ InspectionWaypoint selectInspectionWaypointById(String id);
+
+ /**
+ * 查询巡检点位列表
+ *
+ * @param inspectionWaypoint 巡检点位
+ * @return 巡检点位集合
+ */
+ List selectInspectionWaypointList(InspectionWaypoint inspectionWaypoint);
+
+ /**
+ * 新增巡检点位
+ *
+ * @param inspectionWaypoint 巡检点位
+ * @return 结果
+ */
+ int insertInspectionWaypoint(InspectionWaypoint inspectionWaypoint);
+
+ /**
+ * 修改巡检点位
+ *
+ * @param inspectionWaypoint 巡检点位
+ * @return 结果
+ */
+ int updateInspectionWaypoint(InspectionWaypoint inspectionWaypoint);
+
+ /**
+ * 批量删除巡检点位
+ *
+ * @param ids 需要删除的巡检点位主键集合
+ * @return 结果
+ */
+ int deleteInspectionWaypointByIds(String[] ids);
+
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionAlarmServiceImpl.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionAlarmServiceImpl.java
new file mode 100644
index 0000000..4b7ddc9
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionAlarmServiceImpl.java
@@ -0,0 +1,96 @@
+package com.cmvr.inspection.service.impl;
+
+import java.util.List;
+import java.util.UUID;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cmvr.common.utils.SecurityUtils;
+import com.cmvr.inspection.domain.vo.InspectionAlarmVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.cmvr.common.utils.DateUtils;
+import com.cmvr.inspection.mapper.InspectionAlarmMapper;
+import com.cmvr.inspection.domain.InspectionAlarm;
+import com.cmvr.inspection.service.IInspectionAlarmService;
+
+/**
+ * 巡检告警Service业务层处理
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+@Service
+public class InspectionAlarmServiceImpl extends ServiceImpl implements IInspectionAlarmService
+{
+ @Autowired
+ private InspectionAlarmMapper inspectionAlarmMapper;
+
+ /**
+ * 查询巡检告警
+ *
+ * @param id 巡检告警主键
+ * @return 巡检告警
+ */
+ @Override
+ public InspectionAlarm selectInspectionAlarmById(String id)
+ {
+ return inspectionAlarmMapper.selectInspectionAlarmById(id);
+ }
+
+ /**
+ * 查询巡检告警列表
+ *
+ * @param inspectionAlarm 巡检告警
+ * @return 巡检告警
+ */
+ @Override
+ public List selectInspectionAlarmList(InspectionAlarm inspectionAlarm)
+ {
+ return inspectionAlarmMapper.selectInspectionAlarmVoList(inspectionAlarm);
+ }
+
+ /**
+ * 新增巡检告警
+ *
+ * @param inspectionAlarm 巡检告警
+ * @return 结果
+ */
+ @Override
+ public int insertInspectionAlarm(InspectionAlarm inspectionAlarm)
+ {
+ // 生成UUID作为主键
+ if (inspectionAlarm.getId() == null || inspectionAlarm.getId().isEmpty()) {
+ inspectionAlarm.setId(UUID.randomUUID().toString().replace("-", ""));
+ }
+ inspectionAlarm.setCreateTime(DateUtils.getNowDate());
+ inspectionAlarm.setCreateBy(SecurityUtils.getUsername());
+ return inspectionAlarmMapper.insertInspectionAlarm(inspectionAlarm);
+ }
+
+ /**
+ * 修改巡检告警
+ *
+ * @param inspectionAlarm 巡检告警
+ * @return 结果
+ */
+ @Override
+ public int updateInspectionAlarm(InspectionAlarm inspectionAlarm)
+ {
+ inspectionAlarm.setUpdateTime(DateUtils.getNowDate());
+ inspectionAlarm.setUpdateBy(SecurityUtils.getUsername());
+ return inspectionAlarmMapper.updateInspectionAlarm(inspectionAlarm);
+ }
+
+ /**
+ * 批量删除巡检告警
+ *
+ * @param ids 需要删除的巡检告警主键
+ * @return 结果
+ */
+ @Override
+ public int deleteInspectionAlarmByIds(String[] ids)
+ {
+ return inspectionAlarmMapper.deleteInspectionAlarmByIds(ids);
+ }
+
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionMapServiceImpl.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionMapServiceImpl.java
new file mode 100644
index 0000000..d70047d
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionMapServiceImpl.java
@@ -0,0 +1,95 @@
+package com.cmvr.inspection.service.impl;
+
+import java.util.List;
+import java.util.UUID;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cmvr.common.utils.SecurityUtils;
+import com.cmvr.inspection.domain.vo.InspectionMapVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.cmvr.common.utils.DateUtils;
+import com.cmvr.inspection.mapper.InspectionMapMapper;
+import com.cmvr.inspection.domain.InspectionMap;
+import com.cmvr.inspection.service.IInspectionMapService;
+
+/**
+ * 巡检地图Service业务层处理
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+@Service
+public class InspectionMapServiceImpl extends ServiceImpl implements IInspectionMapService
+{
+ @Autowired
+ private InspectionMapMapper inspectionMapMapper;
+
+ /**
+ * 查询巡检地图
+ *
+ * @param id 巡检地图主键
+ * @return 巡检地图
+ */
+ @Override
+ public InspectionMap selectInspectionMapById(String id)
+ {
+ return inspectionMapMapper.selectInspectionMapById(id);
+ }
+
+ /**
+ * 查询巡检地图列表
+ *
+ * @param inspectionMap 巡检地图
+ * @return 巡检地图
+ */
+ @Override
+ public List selectInspectionMapList(InspectionMap inspectionMap)
+ {
+ return inspectionMapMapper.selectInspectionMapVoList(inspectionMap);
+ }
+
+ /**
+ * 新增巡检地图
+ *
+ * @param inspectionMap 巡检地图
+ * @return 结果
+ */
+ @Override
+ public int insertInspectionMap(InspectionMap inspectionMap)
+ {
+ // 生成UUID作为主键
+ if (inspectionMap.getId() == null || inspectionMap.getId().isEmpty()) {
+ inspectionMap.setId(UUID.randomUUID().toString().replace("-", ""));
+ }
+ inspectionMap.setCreateTime(DateUtils.getNowDate());
+ inspectionMap.setCreateBy(SecurityUtils.getUsername());
+ return inspectionMapMapper.insertInspectionMap(inspectionMap);
+ }
+
+ /**
+ * 修改巡检地图
+ *
+ * @param inspectionMap 巡检地图
+ * @return 结果
+ */
+ @Override
+ public int updateInspectionMap(InspectionMap inspectionMap)
+ {
+ inspectionMap.setUpdateTime(DateUtils.getNowDate());
+ inspectionMap.setUpdateBy(SecurityUtils.getUsername());
+ return inspectionMapMapper.updateInspectionMap(inspectionMap);
+ }
+
+ /**
+ * 批量删除巡检地图
+ *
+ * @param ids 需要删除的巡检地图主键
+ * @return 结果
+ */
+ @Override
+ public int deleteInspectionMapByIds(String[] ids)
+ {
+ return inspectionMapMapper.deleteInspectionMapByIds(ids);
+ }
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionRobotServiceImpl.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionRobotServiceImpl.java
new file mode 100644
index 0000000..3df9343
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionRobotServiceImpl.java
@@ -0,0 +1,96 @@
+package com.cmvr.inspection.service.impl;
+
+import java.util.List;
+import java.util.UUID;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cmvr.common.utils.SecurityUtils;
+import com.cmvr.inspection.domain.vo.InspectionRobotVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.cmvr.common.utils.DateUtils;
+import com.cmvr.inspection.mapper.InspectionRobotMapper;
+import com.cmvr.inspection.domain.InspectionRobot;
+import com.cmvr.inspection.service.IInspectionRobotService;
+
+/**
+ * 巡检机器人Service业务层处理
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+@Service
+public class InspectionRobotServiceImpl extends ServiceImpl implements IInspectionRobotService
+{
+ @Autowired
+ private InspectionRobotMapper inspectionRobotMapper;
+
+ /**
+ * 查询巡检机器人
+ *
+ * @param id 巡检机器人主键
+ * @return 巡检机器人
+ */
+ @Override
+ public InspectionRobot selectInspectionRobotById(String id)
+ {
+ return inspectionRobotMapper.selectInspectionRobotById(id);
+ }
+
+ /**
+ * 查询巡检机器人列表
+ *
+ * @param inspectionRobot 巡检机器人
+ * @return 巡检机器人
+ */
+ @Override
+ public List selectInspectionRobotList(InspectionRobot inspectionRobot)
+ {
+ return inspectionRobotMapper.selectInspectionRobotVoList(inspectionRobot);
+ }
+
+ /**
+ * 新增巡检机器人
+ *
+ * @param inspectionRobot 巡检机器人
+ * @return 结果
+ */
+ @Override
+ public int insertInspectionRobot(InspectionRobot inspectionRobot)
+ {
+ // 生成UUID作为主键
+ if (inspectionRobot.getId() == null || inspectionRobot.getId().isEmpty()) {
+ inspectionRobot.setId(UUID.randomUUID().toString().replace("-", ""));
+ }
+ inspectionRobot.setCreateTime(DateUtils.getNowDate());
+ inspectionRobot.setCreateBy(SecurityUtils.getUsername());
+ return inspectionRobotMapper.insertInspectionRobot(inspectionRobot);
+ }
+
+ /**
+ * 修改巡检机器人
+ *
+ * @param inspectionRobot 巡检机器人
+ * @return 结果
+ */
+ @Override
+ public int updateInspectionRobot(InspectionRobot inspectionRobot)
+ {
+ inspectionRobot.setUpdateTime(DateUtils.getNowDate());
+ inspectionRobot.setUpdateBy(SecurityUtils.getUsername());
+ return inspectionRobotMapper.updateInspectionRobot(inspectionRobot);
+ }
+
+ /**
+ * 批量删除巡检机器人
+ *
+ * @param ids 需要删除的巡检机器人主键
+ * @return 结果
+ */
+ @Override
+ public int deleteInspectionRobotByIds(String[] ids)
+ {
+ return inspectionRobotMapper.deleteInspectionRobotByIds(ids);
+ }
+
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionTaskInstanceServiceImpl.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionTaskInstanceServiceImpl.java
new file mode 100644
index 0000000..7b0ca7c
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionTaskInstanceServiceImpl.java
@@ -0,0 +1,194 @@
+package com.cmvr.inspection.service.impl;
+
+import java.util.List;
+import java.util.UUID;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cmvr.common.exception.ServiceException;
+import com.cmvr.common.utils.SecurityUtils;
+import com.cmvr.inspection.domain.vo.InspectionTaskInstanceVo;
+import com.cmvr.inspection.enums.TaskStatusEnum;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.cmvr.common.utils.DateUtils;
+import com.cmvr.inspection.mapper.InspectionTaskInstanceMapper;
+import com.cmvr.inspection.domain.InspectionTaskInstance;
+import com.cmvr.inspection.service.IInspectionTaskInstanceService;
+
+/**
+ * 巡检任务执行实例Service业务层处理
+ *
+ * @author cmvr-iot
+ * @since 2026-06-01
+ */
+@Service
+public class InspectionTaskInstanceServiceImpl extends ServiceImpl implements IInspectionTaskInstanceService
+{
+ @Autowired
+ private InspectionTaskInstanceMapper inspectionTaskInstanceMapper;
+
+ /**
+ * 查询巡检任务执行实例视图详情(包含关联信息)
+ *
+ * @param id 巡检任务执行实例主键
+ * @return 巡检任务执行实例视图
+ */
+ @Override
+ public InspectionTaskInstanceVo selectInspectionTaskInstanceVoById(String id)
+ {
+ return inspectionTaskInstanceMapper.selectInspectionTaskInstanceVoById(id);
+ }
+
+ /**
+ * 查询巡检任务执行实例列表
+ *
+ * @param inspectionTaskInstance 巡检任务执行实例
+ * @return 巡检任务执行实例
+ */
+ @Override
+ public List selectInspectionTaskInstanceList(InspectionTaskInstance inspectionTaskInstance)
+ {
+ return inspectionTaskInstanceMapper.selectInspectionTaskInstanceVoList(inspectionTaskInstance);
+ }
+
+ /**
+ * 新增巡检任务执行实例
+ *
+ * @param inspectionTaskInstance 巡检任务执行实例
+ * @return 结果
+ */
+ @Override
+ public int insertInspectionTaskInstance(InspectionTaskInstance inspectionTaskInstance)
+ {
+ // 生成UUID作为主键
+ if (inspectionTaskInstance.getId() == null || inspectionTaskInstance.getId().isEmpty()) {
+ inspectionTaskInstance.setId(UUID.randomUUID().toString().replace("-", ""));
+ }
+ inspectionTaskInstance.setCreateTime(DateUtils.getNowDate());
+ inspectionTaskInstance.setCreateBy(SecurityUtils.getUsername());
+ return inspectionTaskInstanceMapper.insertInspectionTaskInstance(inspectionTaskInstance);
+ }
+
+ /**
+ * 修改巡检任务执行实例
+ *
+ * @param inspectionTaskInstance 巡检任务执行实例
+ * @return 结果
+ */
+ @Override
+ public int updateInspectionTaskInstance(InspectionTaskInstance inspectionTaskInstance)
+ {
+ // 校验状态,只有未执行可以修改
+ if (TaskStatusEnum.NOT_STARTED.getCode() != inspectionTaskInstance.getStatus()) {
+ throw new ServiceException("只有未执行状态的任务实例才能修改");
+ }
+ inspectionTaskInstance.setUpdateTime(DateUtils.getNowDate());
+ inspectionTaskInstance.setUpdateBy(SecurityUtils.getUsername());
+ return inspectionTaskInstanceMapper.updateInspectionTaskInstance(inspectionTaskInstance);
+ }
+
+ /**
+ * 批量删除巡检任务执行实例
+ *
+ * @param ids 需要删除的巡检任务执行实例主键
+ * @return 结果
+ */
+ @Override
+ public int deleteInspectionTaskInstanceByIds(String[] ids)
+ {
+ // 校验状态,只有未执行可以删除
+ for (String id : ids) {
+ InspectionTaskInstance instance = inspectionTaskInstanceMapper.selectInspectionTaskInstanceById(id);
+ if (TaskStatusEnum.NOT_STARTED.getCode() != instance.getStatus()) {
+ throw new ServiceException("只有未执行状态的任务实例才能删除");
+ }
+ }
+ return inspectionTaskInstanceMapper.deleteInspectionTaskInstanceByIds(ids);
+ }
+
+ /**
+ * 开始执行任务实例
+ */
+ @Override
+ public int startInstance(String id)
+ {
+ InspectionTaskInstance instance = inspectionTaskInstanceMapper.selectInspectionTaskInstanceById(id);
+ if (instance == null) {
+ throw new ServiceException("任务实例不存在");
+ }
+ if (TaskStatusEnum.NOT_STARTED.getCode() != instance.getStatus()) {
+ throw new ServiceException("只有待执行状态的任务实例才能开始执行");
+ }
+ InspectionTaskInstance update = new InspectionTaskInstance();
+ update.setId(id);
+ update.setStatus(TaskStatusEnum.RUNNING.getCode());
+ update.setStartTime(DateUtils.getNowDate());
+ update.setUpdateTime(DateUtils.getNowDate());
+ update.setUpdateBy(SecurityUtils.getUsername());
+ return inspectionTaskInstanceMapper.updateInspectionTaskInstance(update);
+ }
+
+ /**
+ * 暂停任务实例
+ */
+ @Override
+ public int pauseInstance(String id)
+ {
+ InspectionTaskInstance instance = inspectionTaskInstanceMapper.selectInspectionTaskInstanceById(id);
+ if (instance == null) {
+ throw new ServiceException("任务实例不存在");
+ }
+ if (TaskStatusEnum.RUNNING.getCode() != instance.getStatus()) {
+ throw new ServiceException("只有执行中状态的任务实例才能暂停");
+ }
+ InspectionTaskInstance update = new InspectionTaskInstance();
+ update.setId(id);
+ update.setStatus(TaskStatusEnum.PAUSED.getCode());
+ update.setUpdateTime(DateUtils.getNowDate());
+ update.setUpdateBy(SecurityUtils.getUsername());
+ return inspectionTaskInstanceMapper.updateInspectionTaskInstance(update);
+ }
+
+ /**
+ * 终止任务实例
+ */
+ @Override
+ public int stopInstance(String id)
+ {
+ InspectionTaskInstance instance = inspectionTaskInstanceMapper.selectInspectionTaskInstanceById(id);
+ if (instance == null) {
+ throw new ServiceException("任务实例不存在");
+ }
+ if (TaskStatusEnum.NOT_STARTED.getCode() != instance.getStatus() && TaskStatusEnum.RUNNING.getCode() != instance.getStatus()) {
+ throw new ServiceException("已完成或已取消的任务实例不能终止");
+ }
+ InspectionTaskInstance update = new InspectionTaskInstance();
+ update.setId(id);
+ update.setStatus(TaskStatusEnum.STOPPED.getCode());
+ update.setEndTime(DateUtils.getNowDate());
+ update.setUpdateTime(DateUtils.getNowDate());
+ update.setUpdateBy(SecurityUtils.getUsername());
+ return inspectionTaskInstanceMapper.updateInspectionTaskInstance(update);
+ }
+
+ /**
+ * 恢复任务实例(从暂停恢复为执行中)
+ */
+ @Override
+ public int resumeInstance(String id)
+ {
+ InspectionTaskInstance instance = inspectionTaskInstanceMapper.selectInspectionTaskInstanceById(id);
+ if (instance == null) {
+ throw new ServiceException("任务实例不存在");
+ }
+ if (TaskStatusEnum.PAUSED.getCode() != instance.getStatus()) {
+ throw new ServiceException("只有已暂停状态的任务实例才能恢复");
+ }
+ InspectionTaskInstance update = new InspectionTaskInstance();
+ update.setId(id);
+ update.setStatus(TaskStatusEnum.RUNNING.getCode());
+ update.setUpdateTime(DateUtils.getNowDate());
+ update.setUpdateBy(SecurityUtils.getUsername());
+ return inspectionTaskInstanceMapper.updateInspectionTaskInstance(update);
+ }
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionTaskServiceImpl.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionTaskServiceImpl.java
new file mode 100644
index 0000000..69a44b2
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionTaskServiceImpl.java
@@ -0,0 +1,185 @@
+package com.cmvr.inspection.service.impl;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.UUID;
+import java.util.ArrayList;
+import java.util.stream.Collectors;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cmvr.inspection.domain.InspectionTaskWaypoint;
+import com.cmvr.inspection.domain.InspectionWaypoint;
+import com.cmvr.inspection.domain.vo.InspectionTaskVo;
+import com.cmvr.inspection.mapper.InspectionTaskWaypointMapper;
+import com.cmvr.test.model.domain.TeTaskConfigInfo;
+import com.cmvr.test.model.vo.TeTaskOrchestraVO;
+import com.cmvr.test.service.ITeTaskConfigInfoService;
+import com.cmvr.test.service.ITeTaskOrchestrationService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.cmvr.common.utils.DateUtils;
+import com.cmvr.common.utils.SecurityUtils;
+import com.cmvr.inspection.mapper.InspectionTaskMapper;
+import com.cmvr.inspection.domain.InspectionTask;
+import com.cmvr.inspection.service.IInspectionTaskService;
+
+/**
+ * 巡检任务Service业务层处理
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+@Service
+public class InspectionTaskServiceImpl extends ServiceImpl implements IInspectionTaskService
+{
+ @Autowired
+ private InspectionTaskMapper inspectionTaskMapper;
+
+ @Autowired
+ private InspectionTaskWaypointMapper inspectionTaskWaypointMapper;
+
+ @Autowired
+ private ITeTaskOrchestrationService teTaskOrchestrationService;
+
+ @Autowired
+ private ITeTaskConfigInfoService teTaskConfigInfoService;
+
+ /**
+ * 查询巡检任务
+ *
+ * @param id 巡检任务主键
+ * @return 巡检任务
+ */
+ @Override
+ public InspectionTask selectInspectionTaskById(String id)
+ {
+ return inspectionTaskMapper.selectInspectionTaskById(id);
+ }
+
+ /**
+ * 查询巡检任务列表
+ *
+ * @param inspectionTask 巡检任务
+ * @return 巡检任务
+ */
+ @Override
+ public List selectInspectionTaskList(InspectionTask inspectionTask)
+ {
+ return inspectionTaskMapper.selectInspectionTaskVoList(inspectionTask);
+ }
+
+ /**
+ * 新增巡检任务
+ *
+ * @param inspectionTask 巡检任务
+ * @return 结果
+ */
+ @Override
+ public int insertInspectionTask(InspectionTask inspectionTask)
+ {
+ // 生成UUID作为主键
+ if (inspectionTask.getId() == null || inspectionTask.getId().isEmpty()) {
+ inspectionTask.setId(UUID.randomUUID().toString().replace("-", ""));
+ }
+ inspectionTask.setCreateTime(DateUtils.getNowDate());
+ inspectionTask.setCreateBy(SecurityUtils.getUsername());
+ // 同步新增任务
+ TeTaskConfigInfo teTaskConfigInfo = TeTaskConfigInfo.builder().taskName(inspectionTask.getTaskName()).build();
+ teTaskConfigInfoService.insertTeTaskConfigInfo(teTaskConfigInfo);
+ inspectionTask.setTeTaskConfigId(teTaskConfigInfo.getId());
+ return inspectionTaskMapper.insertInspectionTask(inspectionTask);
+ }
+
+ /**
+ * 修改巡检任务
+ *
+ * @param inspectionTask 巡检任务
+ * @return 结果
+ */
+ @Override
+ public int updateInspectionTask(InspectionTask inspectionTask)
+ {
+ inspectionTask.setUpdateTime(DateUtils.getNowDate());
+ inspectionTask.setUpdateBy(SecurityUtils.getUsername());
+ TeTaskConfigInfo teTaskConfigInfo = teTaskConfigInfoService.selectTeTaskConfigInfoById(inspectionTask.getTeTaskConfigId());
+ teTaskConfigInfo.setTaskName(inspectionTask.getTaskName());
+ teTaskConfigInfoService.updateTeTaskConfigInfo(teTaskConfigInfo);
+ return inspectionTaskMapper.updateInspectionTask(inspectionTask);
+ }
+
+ /**
+ * 批量删除巡检任务
+ *
+ * @param ids 需要删除的巡检任务主键
+ * @return 结果
+ */
+ @Override
+ public int deleteInspectionTaskByIds(String[] ids)
+ {
+ // 先删除关联表数据
+ inspectionTaskWaypointMapper.deleteTaskWaypointByTaskIds(ids);
+ // 批量查询巡检任务
+ List inspectionTasks = this.baseMapper.selectBatchIds(Arrays.asList(ids));
+ // 批量删除任务
+ teTaskConfigInfoService.deleteTeTaskConfigInfoByIds(inspectionTasks.stream().map(InspectionTask::getTeTaskConfigId).toArray(String[]::new));
+ return inspectionTaskMapper.deleteInspectionTaskByIds(ids);
+ }
+
+ /**
+ * 查询任务关联的点位列表
+ *
+ * @param taskId 任务ID
+ * @return 点位集合
+ */
+ @Override
+ public List selectWaypointsByTaskId(String taskId)
+ {
+ return inspectionTaskWaypointMapper.selectWaypointsByTaskId(taskId);
+ }
+
+ /**
+ * 绑定点位到任务
+ *
+ * @param taskId 任务ID
+ * @param waypointIds 点位ID数组
+ * @return 结果
+ */
+ @Override
+ public int bindWaypoints(String taskId, String[] waypointIds)
+ {
+ // 先删除旧的关联关系
+ inspectionTaskWaypointMapper.deleteTaskWaypointByTaskId(taskId);
+ if (waypointIds == null || waypointIds.length == 0) {
+ return 0;
+ }
+ // 批量插入新的关联关系
+ List list = new ArrayList<>();
+ for (int i = 0; i < waypointIds.length; i++) {
+ InspectionTaskWaypoint tw = new InspectionTaskWaypoint();
+ tw.setTaskId(taskId);
+ tw.setWaypointId(waypointIds[i]);
+ tw.setSortOrder(i + 1);
+ list.add(tw);
+ }
+ // 查询巡检任务
+ InspectionTask inspectionTask = inspectionTaskMapper.selectInspectionTaskById(taskId);
+ // 查询点位
+ List waypoints = inspectionTaskWaypointMapper.selectWaypointsByTaskId(taskId);
+ // 同步任务编排
+ TeTaskOrchestraVO teTaskOrchestraVO = TeTaskOrchestraVO.builder().taskId(inspectionTask.getTeTaskConfigId()).itemIds(waypoints.stream().map(InspectionWaypoint::getDetectItemId).collect(Collectors.toList())).build();
+ teTaskOrchestrationService.insertTeTaskOrchestration(teTaskOrchestraVO);
+ return inspectionTaskWaypointMapper.batchInsertTaskWaypoint(list);
+ }
+
+ /**
+ * 解绑任务的点位
+ *
+ * @param taskId 任务ID
+ * @return 结果
+ */
+ @Override
+ public int unbindWaypoints(String taskId)
+ {
+ return inspectionTaskWaypointMapper.deleteTaskWaypointByTaskId(taskId);
+ }
+}
diff --git a/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionWaypointServiceImpl.java b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionWaypointServiceImpl.java
new file mode 100644
index 0000000..7782cff
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/InspectionWaypointServiceImpl.java
@@ -0,0 +1,119 @@
+package com.cmvr.inspection.service.impl;
+
+import java.util.List;
+import java.util.UUID;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cmvr.inspection.domain.vo.InspectionWaypointVo;
+import com.cmvr.inspection.mapper.InspectionTaskWaypointMapper;
+import com.cmvr.test.model.domain.TeDetectionItem;
+import com.cmvr.test.service.ITeDetectionItemService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.cmvr.common.utils.DateUtils;
+import com.cmvr.common.utils.SecurityUtils;
+import com.cmvr.inspection.mapper.InspectionWaypointMapper;
+import com.cmvr.inspection.domain.InspectionWaypoint;
+import com.cmvr.inspection.service.IInspectionWaypointService;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 巡检点位Service业务层处理
+ *
+ * @author cmvr-iot
+ * @since 2026-05-29
+ */
+@Service
+@Transactional
+public class InspectionWaypointServiceImpl extends ServiceImpl implements IInspectionWaypointService
+{
+ @Autowired
+ private InspectionWaypointMapper inspectionWaypointMapper;
+
+ /** 任务点位关联 mapper */
+ @Autowired
+ private InspectionTaskWaypointMapper inspectionTaskWaypointMapper;
+
+ /** 检测项配置service */
+ @Autowired
+ private ITeDetectionItemService teDetectionItemService;
+
+ /**
+ * 查询巡检点位
+ *
+ * @param id 巡检点位主键
+ * @return 巡检点位
+ */
+ @Override
+ public InspectionWaypoint selectInspectionWaypointById(String id)
+ {
+ return inspectionWaypointMapper.selectInspectionWaypointById(id);
+ }
+
+ /**
+ * 查询巡检点位列表
+ *
+ * @param inspectionWaypoint 巡检点位
+ * @return 巡检点位
+ */
+ @Override
+ public List selectInspectionWaypointList(InspectionWaypoint inspectionWaypoint)
+ {
+ return inspectionWaypointMapper.selectInspectionWaypointVoList(inspectionWaypoint);
+ }
+
+ /**
+ * 新增巡检点位
+ *
+ * @param inspectionWaypoint 巡检点位
+ * @return 结果
+ */
+ @Override
+ public int insertInspectionWaypoint(InspectionWaypoint inspectionWaypoint)
+ {
+ // 生成UUID作为主键
+ if (inspectionWaypoint.getId() == null || inspectionWaypoint.getId().isEmpty()) {
+ inspectionWaypoint.setId(UUID.randomUUID().toString().replace("-", ""));
+ }
+ inspectionWaypoint.setCreateTime(DateUtils.getNowDate());
+ inspectionWaypoint.setCreateBy(SecurityUtils.getUsername());
+ TeDetectionItem teDetectionItem = TeDetectionItem.builder().detectName(inspectionWaypoint.getWaypointName()).groupId(7L).build();
+ teDetectionItemService.insertTeDetectionItem(teDetectionItem);
+ inspectionWaypoint.setDetectItemId(teDetectionItem.getId());
+ return inspectionWaypointMapper.insertInspectionWaypoint(inspectionWaypoint);
+ }
+
+ /**
+ * 修改巡检点位
+ *
+ * @param inspectionWaypoint 巡检点位
+ * @return 结果
+ */
+ @Override
+ public int updateInspectionWaypoint(InspectionWaypoint inspectionWaypoint)
+ {
+ inspectionWaypoint.setUpdateTime(DateUtils.getNowDate());
+ inspectionWaypoint.setUpdateBy(SecurityUtils.getUsername());
+ return inspectionWaypointMapper.updateInspectionWaypoint(inspectionWaypoint);
+ }
+
+ /**
+ * 批量删除巡检点位
+ *
+ * @param ids 需要删除的巡检点位主键
+ * @return 结果
+ */
+ @Override
+ public int deleteInspectionWaypointByIds(String[] ids)
+ {
+ // 先删除关联表数据
+ inspectionTaskWaypointMapper.deleteTaskWaypointByWaypointIds(ids);
+ for(String id : ids) {
+ // 查询数据后删除绑定的检测项
+ InspectionWaypoint inspectionWaypoint = inspectionWaypointMapper.selectInspectionWaypointById(id);
+ teDetectionItemService.deleteTeDetectionItemById(inspectionWaypoint.getDetectItemId());
+ }
+ return inspectionWaypointMapper.deleteInspectionWaypointByIds(ids);
+ }
+
+}
diff --git a/cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionAlarmMapper.xml b/cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionAlarmMapper.xml
new file mode 100644
index 0000000..02922f9
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionAlarmMapper.xml
@@ -0,0 +1,197 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, create_by, create_time, update_by, update_time, remark, alarm_code, task_instance_id, task_id, task_name, robot_id, robot_name, alarm_level, alarm_type, alarm_title, alarm_content, alarm_location, alarm_time, handle_status, handler, handle_time, handle_remark, evidence_image from inspection_alarm
+
+
+
+
+
+
+
+ insert into inspection_alarm
+
+ id,
+ create_by,
+ create_time,
+ update_by,
+ update_time,
+ remark,
+ alarm_code,
+ task_instance_id,
+ task_id,
+ task_name,
+ robot_id,
+ robot_name,
+ alarm_level,
+ alarm_type,
+ alarm_title,
+ alarm_content,
+ alarm_location,
+ alarm_time,
+ handle_status,
+ handler,
+ handle_time,
+ handle_remark,
+ evidence_image,
+
+
+ #{id},
+ #{createBy},
+ #{createTime},
+ #{updateBy},
+ #{updateTime},
+ #{remark},
+ #{alarmCode},
+ #{taskInstanceId},
+ #{taskId},
+ #{taskName},
+ #{robotId},
+ #{robotName},
+ #{alarmLevel},
+ #{alarmType},
+ #{alarmTitle},
+ #{alarmContent},
+ #{alarmLocation},
+ #{alarmTime},
+ #{handleStatus},
+ #{handler},
+ #{handleTime},
+ #{handleRemark},
+ #{evidenceImage},
+
+
+
+
+ update inspection_alarm
+
+ create_by = #{createBy},
+ create_time = #{createTime},
+ update_by = #{updateBy},
+ update_time = #{updateTime},
+ remark = #{remark},
+ alarm_code = #{alarmCode},
+ task_instance_id = #{taskInstanceId},
+ task_id = #{taskId},
+ task_name = #{taskName},
+ robot_id = #{robotId},
+ robot_name = #{robotName},
+ alarm_level = #{alarmLevel},
+ alarm_type = #{alarmType},
+ alarm_title = #{alarmTitle},
+ alarm_content = #{alarmContent},
+ alarm_location = #{alarmLocation},
+ alarm_time = #{alarmTime},
+ handle_status = #{handleStatus},
+ handler = #{handler},
+ handle_time = #{handleTime},
+ handle_remark = #{handleRemark},
+ evidence_image = #{evidenceImage},
+
+ where id = #{id}
+
+
+
+ delete from inspection_alarm where id = #{id}
+
+
+
+ delete from inspection_alarm where id in
+
+ #{id}
+
+
+
+
+
diff --git a/cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionMapMapper.xml b/cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionMapMapper.xml
new file mode 100644
index 0000000..464afa5
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionMapMapper.xml
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, create_by, create_time, update_by, update_time, remark, map_name, map_source_robot_id, map_source_name, map_file_path, status, map_desc from inspection_map
+
+
+
+
+
+
+
+ insert into inspection_map
+
+ id,
+ create_by,
+ create_time,
+ update_by,
+ update_time,
+ remark,
+ map_name,
+ map_source_robot_id,
+ map_source_name,
+ map_file_path,
+ status,
+ map_desc,
+
+
+ #{id},
+ #{createBy},
+ #{createTime},
+ #{updateBy},
+ #{updateTime},
+ #{remark},
+ #{mapName},
+ #{mapSourceRobotId},
+ #{mapSourceName},
+ #{mapFilePath},
+ #{status},
+ #{mapDesc},
+
+
+
+
+ update inspection_map
+
+ create_by = #{createBy},
+ create_time = #{createTime},
+ update_by = #{updateBy},
+ update_time = #{updateTime},
+ remark = #{remark},
+ map_name = #{mapName},
+ map_source_robot_id = #{mapSourceRobotId},
+ map_source_name = #{mapSourceName},
+ map_file_path = #{mapFilePath},
+ status = #{status},
+ map_desc = #{mapDesc},
+
+ where id = #{id}
+
+
+
+ delete from inspection_map where id = #{id}
+
+
+
+ delete from inspection_map where id in
+
+ #{id}
+
+
+
+
+
diff --git a/cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionRobotMapper.xml b/cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionRobotMapper.xml
new file mode 100644
index 0000000..fc64fd0
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionRobotMapper.xml
@@ -0,0 +1,163 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, create_by, create_time, update_by, update_time, remark, robot_code, robot_name, robot_model, robot_type, ip_address, port, current_map_id, status, battery_level, current_position from inspection_robot
+
+
+
+
+
+
+
+ insert into inspection_robot
+
+ id,
+ create_by,
+ create_time,
+ update_by,
+ update_time,
+ remark,
+ robot_code,
+ robot_name,
+ robot_model,
+ robot_type,
+ ip_address,
+ port,
+ current_map_id,
+ status,
+ battery_level,
+ current_position,
+
+
+ #{id},
+ #{createBy},
+ #{createTime},
+ #{updateBy},
+ #{updateTime},
+ #{remark},
+ #{robotCode},
+ #{robotName},
+ #{robotModel},
+ #{robotType},
+ #{ipAddress},
+ #{port},
+ #{currentMapId},
+ #{status},
+ #{batteryLevel},
+ #{currentPosition},
+
+
+
+
+ update inspection_robot
+
+ create_by = #{createBy},
+ create_time = #{createTime},
+ update_by = #{updateBy},
+ update_time = #{updateTime},
+ remark = #{remark},
+ robot_code = #{robotCode},
+ robot_name = #{robotName},
+ robot_model = #{robotModel},
+ robot_type = #{robotType},
+ ip_address = #{ipAddress},
+ port = #{port},
+ current_map_id = #{currentMapId},
+ status = #{status},
+ battery_level = #{batteryLevel},
+ current_position = #{currentPosition},
+
+ where id = #{id}
+
+
+
+ delete from inspection_robot where id = #{id}
+
+
+
+ delete from inspection_robot where id in
+
+ #{id}
+
+
+
+
+
diff --git a/cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionTaskInstanceMapper.xml b/cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionTaskInstanceMapper.xml
new file mode 100644
index 0000000..2c4fb17
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionTaskInstanceMapper.xml
@@ -0,0 +1,151 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, create_by, create_time, update_by, update_time, remark, task_id, robot_id, status, start_time, end_time from inspection_task_instance
+
+
+
+
+
+
+
+ insert into inspection_task_instance
+
+ id,
+ create_by,
+ create_time,
+ update_by,
+ update_time,
+ remark,
+ task_id,
+ robot_id,
+ status,
+ start_time,
+ end_time,
+
+
+ #{id},
+ #{createBy},
+ #{createTime},
+ #{updateBy},
+ #{updateTime},
+ #{remark},
+ #{taskId},
+ #{robotId},
+ #{status},
+ #{startTime},
+ #{endTime},
+
+
+
+
+ update inspection_task_instance
+
+ create_by = #{createBy},
+ create_time = #{createTime},
+ update_by = #{updateBy},
+ update_time = #{updateTime},
+ remark = #{remark},
+ task_id = #{taskId},
+ robot_id = #{robotId},
+ status = #{status},
+ start_time = #{startTime},
+ end_time = #{endTime},
+
+ where id = #{id}
+
+
+
+ delete from inspection_task_instance where id = #{id}
+
+
+
+ delete from inspection_task_instance where id in
+
+ #{id}
+
+
+
+
+
+
+
diff --git a/cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionTaskMapper.xml b/cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionTaskMapper.xml
new file mode 100644
index 0000000..c07dbdc
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionTaskMapper.xml
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, create_by, create_time, update_by, update_time, remark, task_code, task_name, task_type from inspection_task
+
+
+
+
+
+
+
+ insert into inspection_task
+
+ id,
+ create_by,
+ create_time,
+ update_by,
+ update_time,
+ remark,
+ task_code,
+ task_name,
+ task_type,
+
+
+ #{id},
+ #{createBy},
+ #{createTime},
+ #{updateBy},
+ #{updateTime},
+ #{remark},
+ #{taskCode},
+ #{taskName},
+ #{taskType},
+
+
+
+
+ update inspection_task
+
+ create_by = #{createBy},
+ create_time = #{createTime},
+ update_by = #{updateBy},
+ update_time = #{updateTime},
+ remark = #{remark},
+ task_code = #{taskCode},
+ task_name = #{taskName},
+ task_type = #{taskType},
+
+ where id = #{id}
+
+
+
+ delete from inspection_task where id = #{id}
+
+
+
+ delete from inspection_task where id in
+
+ #{id}
+
+
+
+
+
diff --git a/cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionTaskWaypointMapper.xml b/cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionTaskWaypointMapper.xml
new file mode 100644
index 0000000..5c2c809
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionTaskWaypointMapper.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ insert into inspection_task_waypoint (task_id, waypoint_id, sort_order) values
+
+ (#{item.taskId}, #{item.waypointId}, #{item.sortOrder})
+
+
+
+
+ delete from inspection_task_waypoint where task_id = #{taskId}
+
+
+
+ delete from inspection_task_waypoint where waypoint_id = #{waypointId}
+
+
+
+ delete from inspection_task_waypoint where task_id in
+
+ #{taskId}
+
+
+
+
+ delete from inspection_task_waypoint where waypoint_id in
+
+ #{waypointId}
+
+
+
diff --git a/cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionWaypointMapper.xml b/cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionWaypointMapper.xml
new file mode 100644
index 0000000..f518bcf
--- /dev/null
+++ b/cmvr-iot-inspection/src/main/resources/mapper/inspection/InspectionWaypointMapper.xml
@@ -0,0 +1,131 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, create_by, create_time, update_by, update_time, remark, waypoint_name, enabled, sort_order, detect_item_id, map_id from inspection_waypoint
+
+
+
+
+
+
+
+ insert into inspection_waypoint
+
+ id,
+ create_by,
+ create_time,
+ update_by,
+ update_time,
+ remark,
+ waypoint_name,
+ enabled,
+ sort_order,
+ detect_item_id,
+ map_id,
+
+
+ #{id},
+ #{createBy},
+ #{createTime},
+ #{updateBy},
+ #{updateTime},
+ #{remark},
+ #{waypointName},
+ #{enabled},
+ #{sortOrder},
+ #{detectItemId},
+ #{mapId},
+
+
+
+
+ update inspection_waypoint
+
+ create_by = #{createBy},
+ create_time = #{createTime},
+ update_by = #{updateBy},
+ update_time = #{updateTime},
+ remark = #{remark},
+ waypoint_name = #{waypointName},
+ enabled = #{enabled},
+ sort_order = #{sortOrder},
+ detect_item_id = #{detectItemId},
+ map_id = #{mapId},
+
+ where id = #{id}
+
+
+
+ delete from inspection_waypoint where id = #{id}
+
+
+
+ delete from inspection_waypoint where id in
+
+ #{id}
+
+
+
+
+
diff --git a/cmvr-iot-test/src/main/java/com/cmvr/test/model/domain/TeDetectionItem.java b/cmvr-iot-test/src/main/java/com/cmvr/test/model/domain/TeDetectionItem.java
index df50c0c..35fa744 100644
--- a/cmvr-iot-test/src/main/java/com/cmvr/test/model/domain/TeDetectionItem.java
+++ b/cmvr-iot-test/src/main/java/com/cmvr/test/model/domain/TeDetectionItem.java
@@ -9,10 +9,14 @@ import com.cmvr.common.core.domain.BaseEntity;
import com.cmvr.test.enums.LoopNodeTypeEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
+import lombok.*;
@Data
@ApiModel("检测项配置")
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
public class TeDetectionItem extends BaseEntity {
private static final long serialVersionUID = 1L;
diff --git a/cmvr-iot-test/src/main/java/com/cmvr/test/model/domain/TeTaskConfigInfo.java b/cmvr-iot-test/src/main/java/com/cmvr/test/model/domain/TeTaskConfigInfo.java
index ab655de..3612317 100644
--- a/cmvr-iot-test/src/main/java/com/cmvr/test/model/domain/TeTaskConfigInfo.java
+++ b/cmvr-iot-test/src/main/java/com/cmvr/test/model/domain/TeTaskConfigInfo.java
@@ -7,12 +7,14 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.cmvr.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
+import lombok.*;
@EqualsAndHashCode(callSuper = true)
@Data
@ApiModel("任务配置信息")
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
public class TeTaskConfigInfo extends BaseEntity {
private static final long serialVersionUID = 1L;
diff --git a/cmvr-iot-test/src/main/java/com/cmvr/test/model/vo/TeTaskOrchestraVO.java b/cmvr-iot-test/src/main/java/com/cmvr/test/model/vo/TeTaskOrchestraVO.java
index f6807ad..a36223b 100644
--- a/cmvr-iot-test/src/main/java/com/cmvr/test/model/vo/TeTaskOrchestraVO.java
+++ b/cmvr-iot-test/src/main/java/com/cmvr/test/model/vo/TeTaskOrchestraVO.java
@@ -2,13 +2,17 @@ package com.cmvr.test.model.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
+import lombok.*;
import javax.validation.constraints.NotEmpty;
import java.util.List;
@Data
@ApiModel("任务编排VO")
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode
public class TeTaskOrchestraVO {
@ApiModelProperty("id")
@NotEmpty(message = "任务ID不能为空")
diff --git a/cmvr-iot-test/src/main/java/com/cmvr/test/service/ITeTaskOrchestrationService.java b/cmvr-iot-test/src/main/java/com/cmvr/test/service/ITeTaskOrchestrationService.java
index 3e837e0..203b4f0 100644
--- a/cmvr-iot-test/src/main/java/com/cmvr/test/service/ITeTaskOrchestrationService.java
+++ b/cmvr-iot-test/src/main/java/com/cmvr/test/service/ITeTaskOrchestrationService.java
@@ -21,7 +21,7 @@ public interface ITeTaskOrchestrationService extends IService queryByTaskId(String taskId);
+ List queryByTaskId(String taskId);
/**
* 新增任务编排
@@ -29,22 +29,29 @@ public interface ITeTaskOrchestrationService extends IService queryTaskDetail(String taskId);
+ List queryTaskDetail(String taskId);
/**
* 构建试运行任务
*/
- public String buildTrialTask(String itemId);
+ String buildTrialTask(String itemId);
}
diff --git a/cmvr-iot-test/src/main/java/com/cmvr/test/service/impl/TeTaskConfigInfoServiceImpl.java b/cmvr-iot-test/src/main/java/com/cmvr/test/service/impl/TeTaskConfigInfoServiceImpl.java
index 9bae37f..36ba4b0 100644
--- a/cmvr-iot-test/src/main/java/com/cmvr/test/service/impl/TeTaskConfigInfoServiceImpl.java
+++ b/cmvr-iot-test/src/main/java/com/cmvr/test/service/impl/TeTaskConfigInfoServiceImpl.java
@@ -10,7 +10,9 @@ import com.cmvr.test.mapper.TeTaskConfigInfoMapper;
import com.cmvr.test.model.domain.TeTaskConfigInfo;
import com.cmvr.test.model.vo.TeTaskConfigInfoVO;
import com.cmvr.test.service.ITeTaskConfigInfoService;
+import com.cmvr.test.service.ITeTaskOrchestrationService;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.Arrays;
@@ -22,8 +24,10 @@ import java.util.List;
* @author cmvr-iot
*/
@Service
+@RequiredArgsConstructor
public class TeTaskConfigInfoServiceImpl extends ServiceImpl implements ITeTaskConfigInfoService {
+ private final ITeTaskOrchestrationService taskOrchestrationService;
/**
* 查询任务流程编排
*
@@ -91,6 +95,8 @@ public class TeTaskConfigInfoServiceImpl extends ServiceImpl implements ITeTaskOrchestrationService {
-
- private final ITeTaskConfigInfoService taskConfigInfoService;
+ @Autowired
+ @Lazy
+ private ITeTaskConfigInfoService taskConfigInfoService;
@Override
public List queryByTaskId(String taskId) {
@@ -80,10 +82,21 @@ public class TeTaskOrchestrationServiceImpl extends ServiceImpl wrapper = Wrappers.lambdaQuery();
wrapper.eq(TeTaskOrchestration::getTaskId, id);
- return this.baseMapper.delete(wrapper);
+ this.baseMapper.delete(wrapper);
+ }
+
+ /**
+ * 根据任务IDs删除编排信息
+ */
+ @Override
+ public void deleteByTaskIds(String[] idArr) {
+ LambdaQueryWrapper wrapper = Wrappers.lambdaQuery();
+ //数组转List,精准匹配Collection入参的in方法
+ wrapper.in(TeTaskOrchestration::getTaskId, Arrays.asList(idArr));
+ this.baseMapper.delete(wrapper);
}
/**
diff --git a/cmvr-iot-ti/src/main/java/com/cmvr/ti/model/domain/TiVehicleFunction.java b/cmvr-iot-ti/src/main/java/com/cmvr/ti/model/domain/TiVehicleFunction.java
index 46bb501..ba9a136 100644
--- a/cmvr-iot-ti/src/main/java/com/cmvr/ti/model/domain/TiVehicleFunction.java
+++ b/cmvr-iot-ti/src/main/java/com/cmvr/ti/model/domain/TiVehicleFunction.java
@@ -6,7 +6,9 @@ import com.cmvr.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
+import lombok.EqualsAndHashCode;
+@EqualsAndHashCode(callSuper = true)
@Data
@ApiModel("触控交互--车机功能")
public class TiVehicleFunction extends BaseEntity {
@@ -25,7 +27,4 @@ public class TiVehicleFunction extends BaseEntity {
@ApiModelProperty("图标URL")
private String iconUrl;
-
- @ApiModelProperty("备注")
- private String remark;
}
diff --git a/pom.xml b/pom.xml
index dc11d30..2887975 100644
--- a/pom.xml
+++ b/pom.xml
@@ -302,6 +302,13 @@
${cmvr-iot.version}
+
+
+ com.cmvr
+ cmvr-iot-inspection
+ ${cmvr-iot.version}
+
+
cn.hutool
@@ -338,6 +345,7 @@
cmvr-iot-vi
cmvr-iot-ti
cmvr-iot-evaluation
+ cmvr-iot-inspection
pom
diff --git a/sql/inspection_module.sql b/sql/inspection_module.sql
new file mode 100644
index 0000000..a1aa9b0
--- /dev/null
+++ b/sql/inspection_module.sql
@@ -0,0 +1,143 @@
+-- ----------------------------
+-- 智能巡检模块数据库表结构
+-- ----------------------------
+
+-- 1. 巡检机器人表
+DROP TABLE IF EXISTS `inspection_robot`;
+CREATE TABLE `inspection_robot` (
+ `id` varchar(64) NOT NULL COMMENT '主键ID',
+ `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
+ `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+ `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
+ `update_time` datetime DEFAULT NULL COMMENT '更新时间',
+ `remark` varchar(500) DEFAULT NULL COMMENT '备注',
+ `robot_code` varchar(64) DEFAULT NULL COMMENT '机器人编码',
+ `robot_name` varchar(100) NOT NULL COMMENT '机器人名称',
+ `robot_model` varchar(100) DEFAULT NULL COMMENT '机器人型号',
+ `robot_type` varchar(50) DEFAULT NULL COMMENT '机器人类型',
+ `ip_address` varchar(50) DEFAULT NULL COMMENT 'IP地址',
+ `port` int(11) DEFAULT NULL COMMENT '端口号',
+ `current_map_id` varchar(64) DEFAULT NULL COMMENT '当前地图ID',
+ `status` char(1) DEFAULT '0' COMMENT '状态(0在线 1离线 2充电中 3巡检中)',
+ `battery_level` int(3) DEFAULT NULL COMMENT '电量百分比',
+ `current_position` varchar(200) DEFAULT NULL COMMENT '当前位置',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uk_robot_code` (`robot_code`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='巡检机器人表';
+
+-- 2. 巡检地图表
+DROP TABLE IF EXISTS `inspection_map`;
+CREATE TABLE `inspection_map` (
+ `id` varchar(64) NOT NULL COMMENT '主键ID',
+ `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
+ `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+ `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
+ `update_time` datetime DEFAULT NULL COMMENT '更新时间',
+ `remark` varchar(500) DEFAULT NULL COMMENT '备注',
+ `map_name` varchar(100) NOT NULL COMMENT '地图名称',
+ `map_source_robot_id` varchar(64) DEFAULT NULL COMMENT '地图来源的机器人id',
+ `map_source_name` varchar(100) DEFAULT NULL COMMENT '地图来源的地图名称',
+ `map_file_path` varchar(500) DEFAULT NULL COMMENT '地图文件路径',
+ `status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)',
+ `map_desc` varchar(500) DEFAULT NULL COMMENT '地图描述',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='巡检地图表';
+
+-- 3. 巡检任务表(不再包含机器人信息)
+DROP TABLE IF EXISTS `inspection_task`;
+CREATE TABLE `inspection_task` (
+ `id` varchar(64) NOT NULL COMMENT '主键ID',
+ `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
+ `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+ `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
+ `update_time` datetime DEFAULT NULL COMMENT '更新时间',
+ `remark` varchar(500) DEFAULT NULL COMMENT '备注',
+ `task_code` varchar(64) DEFAULT NULL COMMENT '任务编码',
+ `task_name` varchar(100) NOT NULL COMMENT '任务名称',
+ `task_type` char(1) DEFAULT '1' COMMENT '任务类型(1巡检任务 2讲解任务)',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uk_task_code` (`task_code`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='巡检任务表';
+
+-- 4. 巡检点位表(不再包含任务ID,通过关联表关联)
+DROP TABLE IF EXISTS `inspection_waypoint`;
+CREATE TABLE `inspection_waypoint` (
+ `id` varchar(64) NOT NULL COMMENT '主键ID',
+ `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
+ `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+ `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
+ `update_time` datetime DEFAULT NULL COMMENT '更新时间',
+ `remark` varchar(500) DEFAULT NULL COMMENT '备注',
+ `waypoint_name` varchar(100) NOT NULL COMMENT '点位名称',
+ `enabled` char(1) DEFAULT '0' COMMENT '是否启用(0启用 1禁用)',
+ `sort_order` int(11) DEFAULT '0' COMMENT '排序号',
+ `detect_item_id` varchar(64) DEFAULT NULL COMMENT '检测项ID',
+ `map_id` varchar(64) DEFAULT NULL COMMENT '地图ID',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='巡检点位表';
+
+-- 4.1 任务与点位关联表(多对多)
+DROP TABLE IF EXISTS `inspection_task_waypoint`;
+CREATE TABLE `inspection_task_waypoint` (
+ `task_id` varchar(64) NOT NULL COMMENT '任务ID',
+ `waypoint_id` varchar(64) NOT NULL COMMENT '点位ID',
+ `sort_order` int(11) DEFAULT '0' COMMENT '排序号',
+ PRIMARY KEY (`task_id`, `waypoint_id`),
+ KEY `idx_task_id` (`task_id`),
+ KEY `idx_waypoint_id` (`waypoint_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='任务与点位关联表';
+
+-- 4.2 巡检任务执行实例表
+DROP TABLE IF EXISTS `inspection_task_instance`;
+CREATE TABLE `inspection_task_instance` (
+ `id` varchar(64) NOT NULL COMMENT '主键ID',
+ `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
+ `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+ `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
+ `update_time` datetime DEFAULT NULL COMMENT '更新时间',
+ `remark` varchar(500) DEFAULT NULL COMMENT '备注',
+ `task_id` varchar(64) NOT NULL COMMENT '任务ID',
+ `robot_id` varchar(64) DEFAULT NULL COMMENT '机器人ID',
+ `status` char(1) DEFAULT '0' COMMENT '执行状态(0待执行 1执行中 2已完成 3已取消 4执行失败 5已暂停)',
+ `start_time` datetime DEFAULT NULL COMMENT '开始时间',
+ `end_time` datetime DEFAULT NULL COMMENT '结束时间',
+ PRIMARY KEY (`id`),
+ KEY `idx_task_id` (`task_id`),
+ KEY `idx_robot_id` (`robot_id`),
+ KEY `idx_status` (`status`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='巡检任务执行实例表';
+
+-- 5. 巡检告警表(增加任务执行实例ID)
+DROP TABLE IF EXISTS `inspection_alarm`;
+CREATE TABLE `inspection_alarm` (
+ `id` varchar(64) NOT NULL COMMENT '主键ID',
+ `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
+ `create_time` datetime DEFAULT NULL COMMENT '创建时间',
+ `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
+ `update_time` datetime DEFAULT NULL COMMENT '更新时间',
+ `remark` varchar(500) DEFAULT NULL COMMENT '备注',
+ `alarm_code` varchar(64) DEFAULT NULL COMMENT '告警编码',
+ `task_instance_id` varchar(64) DEFAULT NULL COMMENT '任务执行实例ID',
+ `task_id` varchar(64) DEFAULT NULL COMMENT '任务ID',
+ `task_name` varchar(100) DEFAULT NULL COMMENT '任务名称',
+ `robot_id` varchar(64) DEFAULT NULL COMMENT '机器人ID',
+ `robot_name` varchar(100) DEFAULT NULL COMMENT '机器人名称',
+ `alarm_level` char(1) DEFAULT '2' COMMENT '告警级别(1提示 2警告 3严重)',
+ `alarm_type` char(1) DEFAULT NULL COMMENT '告警类型(1设备异常 2环境异常 3任务异常 4通信异常)',
+ `alarm_title` varchar(200) DEFAULT NULL COMMENT '告警标题',
+ `alarm_content` text COMMENT '告警内容',
+ `alarm_location` varchar(200) DEFAULT NULL COMMENT '告警位置',
+ `alarm_time` datetime DEFAULT NULL COMMENT '告警时间',
+ `handle_status` char(1) DEFAULT '0' COMMENT '处理状态(0未处理 1处理中 2已处理 3已忽略)',
+ `handler` varchar(64) DEFAULT NULL COMMENT '处理人',
+ `handle_time` datetime DEFAULT NULL COMMENT '处理时间',
+ `handle_remark` varchar(500) DEFAULT NULL COMMENT '处理说明',
+ `evidence_image` varchar(500) DEFAULT NULL COMMENT '图片证据',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uk_alarm_code` (`alarm_code`),
+ KEY `idx_task_instance_id` (`task_instance_id`),
+ KEY `idx_task_id` (`task_id`),
+ KEY `idx_robot_id` (`robot_id`),
+ KEY `idx_alarm_time` (`alarm_time`),
+ KEY `idx_handle_status` (`handle_status`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='巡检告警表';
diff --git a/智能巡检模块-创建说明.md b/智能巡检模块-创建说明.md
new file mode 100644
index 0000000..b9a7e49
--- /dev/null
+++ b/智能巡检模块-创建说明.md
@@ -0,0 +1,276 @@
+# 智能巡检模块 - 已创建文件清单
+
+## ✅ 已完成创建的文件
+
+### 1. 模块配置
+- ✅ `cmvr-iot-inspection/pom.xml` - 模块Maven配置
+- ✅ `pom.xml` - 父POM已添加模块依赖
+- ✅ `cmvr-iot-admin/pom.xml` - Admin模块已添加inspection依赖
+
+### 2. 实体类(Domain)- 5个
+- ✅ `InspectionRobot.java` - 巡检机器人实体
+- ✅ `InspectionMap.java` - 巡检地图实体
+- ✅ `InspectionTask.java` - 巡检任务实体
+- ✅ `InspectionWaypoint.java` - 巡检点位实体
+- ✅ `InspectionAlarm.java` - 巡检告警实体
+
+---
+
+## 📋 还需要创建的文件(参照 cmvr-iot-device 模块模式)
+
+### 3. Mapper 接口(5个)
+位置:`cmvr-iot-inspection/src/main/java/com/cmvr/inspection/mapper/`
+
+需要创建:
+- `InspectionRobotMapper.java`
+- `InspectionMapMapper.java`
+- `InspectionTaskMapper.java`
+- `InspectionWaypointMapper.java`
+- `InspectionAlarmMapper.java`
+
+参考模板:`DeDeviceRegistrationMapper.java`
+
+### 4. Mapper XML(5个)
+位置:`cmvr-iot-inspection/src/main/resources/mapper/inspection/`
+
+需要创建:
+- `InspectionRobotMapper.xml`
+- `InspectionMapMapper.xml`
+- `InspectionTaskMapper.xml`
+- `InspectionWaypointMapper.xml`
+- `InspectionAlarmMapper.xml`
+
+参考模板:`DeDeviceRegistrationMapper.xml`
+
+### 5. Service 接口(5个)
+位置:`cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/`
+
+需要创建:
+- `IInspectionRobotService.java`
+- `IInspectionMapService.java`
+- `IInspectionTaskService.java`
+- `IInspectionWaypointService.java`
+- `IInspectionAlarmService.java`
+
+参考模板:`IDeDeviceRegistrationService.java`
+
+### 6. Service 实现类(5个)
+位置:`cmvr-iot-inspection/src/main/java/com/cmvr/inspection/service/impl/`
+
+需要创建:
+- `InspectionRobotServiceImpl.java`
+- `InspectionMapServiceImpl.java`
+- `InspectionTaskServiceImpl.java`
+- `InspectionWaypointServiceImpl.java`
+- `InspectionAlarmServiceImpl.java`
+
+参考模板:`DeDeviceRegistrationServiceImpl.java`
+
+### 7. Controller(5个)
+位置:`cmvr-iot-admin/src/main/java/com/cmvr/web/controller/inspection/`
+
+需要创建:
+- `InspectionRobotController.java`
+- `InspectionMapController.java`
+- `InspectionTaskController.java`
+- `InspectionWaypointController.java`
+- `InspectionAlarmController.java`
+
+参考模板:`DeDeviceRegistrationController.java`
+
+### 8. 数据库脚本
+位置:项目根目录或 `sql/` 目录
+
+需要创建:
+- `inspection_module.sql` - 包含5张表的建表语句
+
+---
+
+## 🗄️ 数据库表结构
+
+### 1. inspection_robot (巡检机器人表)
+```sql
+CREATE TABLE `inspection_robot` (
+ `id` varchar(64) NOT NULL,
+ `robot_code` varchar(64) NOT NULL COMMENT '机器人编码',
+ `robot_name` varchar(100) NOT NULL COMMENT '机器人名称',
+ `robot_model` varchar(100) DEFAULT NULL COMMENT '机器人型号',
+ `robot_type` varchar(50) DEFAULT NULL COMMENT '机器人类型',
+ `ip_address` varchar(50) DEFAULT NULL COMMENT 'IP地址',
+ `port` int(11) DEFAULT NULL COMMENT '端口号',
+ `map_id` varchar(64) DEFAULT NULL COMMENT '关联地图ID',
+ `status` char(1) DEFAULT '0' COMMENT '状态(0在线 1离线 2充电中 3巡检中)',
+ `battery_level` int(3) DEFAULT NULL COMMENT '电量百分比',
+ `current_position` varchar(200) DEFAULT NULL COMMENT '当前位置',
+ `remark` varchar(500) DEFAULT NULL COMMENT '备注',
+ `create_by` varchar(64) DEFAULT '',
+ `create_time` datetime DEFAULT NULL,
+ `update_by` varchar(64) DEFAULT '',
+ `update_time` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uk_robot_code` (`robot_code`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+```
+
+### 2. inspection_map (巡检地图表)
+```sql
+CREATE TABLE `inspection_map` (
+ `id` varchar(64) NOT NULL,
+ `map_code` varchar(64) NOT NULL COMMENT '地图编码',
+ `map_name` varchar(100) NOT NULL COMMENT '地图名称',
+ `map_type` char(1) DEFAULT '1' COMMENT '地图类型(1室内 2室外)',
+ `map_file_path` varchar(500) DEFAULT NULL COMMENT '地图文件路径',
+ `map_image_path` varchar(500) DEFAULT NULL COMMENT '地图图片路径',
+ `resolution` decimal(10,4) DEFAULT NULL COMMENT '分辨率(米/像素)',
+ `width` int(11) DEFAULT NULL COMMENT '地图宽度(像素)',
+ `height` int(11) DEFAULT NULL COMMENT '地图高度(像素)',
+ `origin_x` decimal(10,2) DEFAULT NULL COMMENT '原点X坐标',
+ `origin_y` decimal(10,2) DEFAULT NULL COMMENT '原点Y坐标',
+ `status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)',
+ `remark` varchar(500) DEFAULT NULL COMMENT '备注',
+ `create_by` varchar(64) DEFAULT '',
+ `create_time` datetime DEFAULT NULL,
+ `update_by` varchar(64) DEFAULT '',
+ `update_time` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uk_map_code` (`map_code`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+```
+
+### 3. inspection_task (巡检任务表)
+```sql
+CREATE TABLE `inspection_task` (
+ `id` varchar(64) NOT NULL,
+ `task_code` varchar(64) NOT NULL COMMENT '任务编码',
+ `task_name` varchar(100) NOT NULL COMMENT '任务名称',
+ `robot_id` varchar(64) DEFAULT NULL COMMENT '机器人ID',
+ `robot_name` varchar(100) DEFAULT NULL COMMENT '机器人名称',
+ `map_id` varchar(64) DEFAULT NULL COMMENT '地图ID',
+ `map_name` varchar(100) DEFAULT NULL COMMENT '地图名称',
+ `task_type` char(1) DEFAULT '1' COMMENT '任务类型(1立即执行 2定时执行 3周期执行)',
+ `priority` char(1) DEFAULT '2' COMMENT '优先级(1低 2中 3高)',
+ `waypoints` text COMMENT '巡检点位列表(JSON格式)',
+ `scheduled_start_time` datetime DEFAULT NULL COMMENT '计划开始时间',
+ `scheduled_end_time` datetime DEFAULT NULL COMMENT '计划结束时间',
+ `actual_start_time` datetime DEFAULT NULL COMMENT '实际开始时间',
+ `actual_end_time` datetime DEFAULT NULL COMMENT '实际结束时间',
+ `status` char(1) DEFAULT '0' COMMENT '任务状态(0待执行 1执行中 2已完成 3已取消 4失败)',
+ `progress` int(3) DEFAULT '0' COMMENT '进度百分比',
+ `cron_expression` varchar(100) DEFAULT NULL COMMENT 'Cron表达式',
+ `remark` varchar(500) DEFAULT NULL COMMENT '备注',
+ `create_by` varchar(64) DEFAULT '',
+ `create_time` datetime DEFAULT NULL,
+ `update_by` varchar(64) DEFAULT '',
+ `update_time` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uk_task_code` (`task_code`),
+ KEY `idx_robot_id` (`robot_id`),
+ KEY `idx_status` (`status`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+```
+
+### 4. inspection_waypoint (巡检点位表)
+```sql
+CREATE TABLE `inspection_waypoint` (
+ `id` varchar(64) NOT NULL,
+ `waypoint_code` varchar(64) NOT NULL COMMENT '点位编码',
+ `waypoint_name` varchar(100) NOT NULL COMMENT '点位名称',
+ `map_id` varchar(64) NOT NULL COMMENT '所属地图ID',
+ `map_name` varchar(100) DEFAULT NULL COMMENT '所属地图名称',
+ `x_coordinate` decimal(10,2) DEFAULT NULL COMMENT 'X坐标',
+ `y_coordinate` decimal(10,2) DEFAULT NULL COMMENT 'Y坐标',
+ `z_coordinate` decimal(10,2) DEFAULT NULL COMMENT 'Z坐标',
+ `orientation` decimal(5,2) DEFAULT NULL COMMENT '朝向角度',
+ `waypoint_type` char(1) DEFAULT '1' COMMENT '点位类型(1普通点位 2充电点 3必经点)',
+ `dwell_time` int(11) DEFAULT '0' COMMENT '停留时长(秒)',
+ `enabled` char(1) DEFAULT '0' COMMENT '是否启用(0启用 1禁用)',
+ `sort_order` int(11) DEFAULT '0' COMMENT '排序号',
+ `remark` varchar(500) DEFAULT NULL COMMENT '备注',
+ `create_by` varchar(64) DEFAULT '',
+ `create_time` datetime DEFAULT NULL,
+ `update_by` varchar(64) DEFAULT '',
+ `update_time` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uk_waypoint_code` (`waypoint_code`),
+ KEY `idx_map_id` (`map_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+```
+
+### 5. inspection_alarm (巡检告警表)
+```sql
+CREATE TABLE `inspection_alarm` (
+ `id` varchar(64) NOT NULL,
+ `alarm_code` varchar(64) NOT NULL COMMENT '告警编码',
+ `task_id` varchar(64) DEFAULT NULL COMMENT '任务ID',
+ `task_name` varchar(100) DEFAULT NULL COMMENT '任务名称',
+ `robot_id` varchar(64) DEFAULT NULL COMMENT '机器人ID',
+ `robot_name` varchar(100) DEFAULT NULL COMMENT '机器人名称',
+ `alarm_level` char(1) DEFAULT '2' COMMENT '告警级别(1提示 2警告 3严重)',
+ `alarm_type` char(1) DEFAULT NULL COMMENT '告警类型(1设备异常 2环境异常 3任务异常 4通信异常)',
+ `alarm_title` varchar(200) DEFAULT NULL COMMENT '告警标题',
+ `alarm_content` text COMMENT '告警内容',
+ `alarm_location` varchar(200) DEFAULT NULL COMMENT '告警位置',
+ `alarm_time` datetime DEFAULT NULL COMMENT '告警时间',
+ `handle_status` char(1) DEFAULT '0' COMMENT '处理状态(0未处理 1处理中 2已处理 3已忽略)',
+ `handler` varchar(64) DEFAULT NULL COMMENT '处理人',
+ `handle_time` datetime DEFAULT NULL COMMENT '处理时间',
+ `handle_remark` varchar(500) DEFAULT NULL COMMENT '处理说明',
+ `evidence_image` varchar(500) DEFAULT NULL COMMENT '图片证据',
+ `create_by` varchar(64) DEFAULT '',
+ `create_time` datetime DEFAULT NULL,
+ `update_by` varchar(64) DEFAULT '',
+ `update_time` datetime DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uk_alarm_code` (`alarm_code`),
+ KEY `idx_task_id` (`task_id`),
+ KEY `idx_robot_id` (`robot_id`),
+ KEY `idx_alarm_time` (`alarm_time`),
+ KEY `idx_handle_status` (`handle_status`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+```
+
+---
+
+## 🚀 后续步骤
+
+1. **创建 Mapper 层**:参照 `DeDeviceRegistrationMapper` 创建5个Mapper接口和XML
+2. **创建 Service 层**:参照 `IDeDeviceRegistrationService` 和实现类创建5个Service
+3. **创建 Controller 层**:参照 `DeDeviceRegistrationController` 创建5个Controller
+4. **执行数据库脚本**:在MySQL中执行上述5张表的建表SQL
+5. **配置菜单权限**:在系统管理中添加智能巡检相关菜单
+6. **开发前端页面**:创建对应的Vue页面
+
+---
+
+## 📁 完整目录结构
+
+```
+cmvr-iot-inspection/
+├── pom.xml
+└── src/main/
+ ├── java/com/cmvr/inspection/
+ │ ├── domain/
+ │ │ ├── InspectionRobot.java ✅
+ │ │ ├── InspectionMap.java ✅
+ │ │ ├── InspectionTask.java ✅
+ │ │ ├── InspectionWaypoint.java ✅
+ │ │ └── InspectionAlarm.java ✅
+ │ ├── mapper/ (待创建)
+ │ ├── service/ (待创建)
+ │ │ └── impl/ (待创建)
+ └── resources/
+ └── mapper/inspection/ (待创建)
+
+cmvr-iot-admin/src/main/java/com/cmvr/web/controller/
+└── inspection/ (待创建)
+```
+
+---
+
+## 💡 关键注意事项
+
+1. **不使用 @TableName 注解**:项目通过 MyBatis XML 映射表名
+2. **继承 BaseEntity**:包含 create_by, create_time, update_by, update_time 等公共字段
+3. **使用 UUID 主键**:`@TableId(value = "id", type = IdType.ASSIGN_UUID)`
+4. **遵循命名规范**:表名使用下划线,类名使用驼峰
+5. **权限标识**:如 `inspection:robot:list`、`inspection:robot:add` 等