From ed8d0914b272da2006b2ec53cc7374d2e0734de8 Mon Sep 17 00:00:00 2001
From: zhuo <2089219845@qq.com>
Date: 星期六, 22 二月 2025 16:04:59 +0800
Subject: [PATCH] 移植设备事故和作业指导书
---
cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java | 107 ++
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceAccidentReportDto.java | 31
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceInspectionRecordDto.java | 25
cnas-device/src/main/java/com/ruoyi/device/pojo/OperationInstruction.java | 88 +
cnas-device/src/main/java/com/ruoyi/device/mqtt/MQConfig.java | 64 +
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInspectionRecordServiceImpl.java | 221 ++++
cnas-device/src/main/java/com/ruoyi/device/mqtt/MQBean.java | 14
cnas-device/src/main/java/com/ruoyi/device/task/DeviceRecordSchedule.java | 65 +
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceTraceabilityManagementController.java | 2
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceOperationInstructionDto.java | 35
cnas-device/src/main/resources/mapper/DeviceInspectionRecordMapper.xml | 14
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInstructionServiceImpl.java | 67 +
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceInspectionRecordDetailsMapper.java | 16
cnas-device/src/main/java/com/ruoyi/device/mqtt/MQClient.java | 97 ++
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceAccidentReportMapper.java | 35
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceInstructionDto.java | 13
cnas-device/src/main/java/com/ruoyi/device/service/DeviceInstructionService.java | 23
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceAccidentReport.java | 120 ++
cnas-device/src/main/java/com/ruoyi/device/service/DeviceInspectionRecordDetailsService.java | 16
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMaintenancePlanController.java | 2
cnas-device/src/main/resources/mapper/InstructionMapper.xml | 19
cnas-device/pom.xml | 17
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceInspectionRecordMapper.java | 28
cnas-device/src/main/java/com/ruoyi/device/mqtt/MQCallback.java | 93 +
ruoyi-admin/src/main/java/com/ruoyi/web/MqttApplicationRunner.java | 29
cnas-device/src/main/java/com/ruoyi/device/mqtt/MQPublic.java | 69 +
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceAcceptanceController.java | 2
cnas-device/src/main/java/com/ruoyi/device/mqtt/MQSubscribe.java | 60 +
cnas-device/src/main/java/com/ruoyi/device/service/DeviceAccidentReportService.java | 41
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceBreakdownMaintenance.java | 90 +
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceInspectionRecordDetails.java | 63 +
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceAccidentReportController.java | 84 +
cnas-device/src/main/java/com/ruoyi/device/mapper/InstructionMapper.java | 23
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceInspectionRecord.java | 93 +
cnas-device/src/main/java/com/ruoyi/device/service/DeviceInspectionRecordService.java | 69 +
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceInstruction.java | 64 +
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceBreakdownMaintenanceServiceImpl.java | 152 +++
cnas-device/src/main/resources/mapper/DeviceBreakdownMaintenanceMapper.xml | 17
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceBreakdownMaintenanceController.java | 85 +
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceOperationInstructionServiceImpl.java | 27
cnas-device/src/main/resources/mapper/DeviceAccidentReportMapper.xml | 29
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceBreakdownMaintenanceMapper.java | 27
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInspectionRecordDetailsServiceImpl.java | 20
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceScrappedController.java | 4
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceBorrowController.java | 6
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceInspectionRecordController.java | 99 ++
cnas-device/src/main/resources/mapper/OperationInstructionMapper.xml | 13
cnas-device/src/main/java/com/ruoyi/device/mapper/OperationInstructionMapper.java | 20
ruoyi-admin/src/main/resources/application-druid.yml | 13
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceInstructionController.java | 103 ++
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAccidentReportServiceImpl.java | 189 ++++
cnas-device/src/main/java/com/ruoyi/device/service/CollectBridgeService.java | 21
cnas-device/src/main/java/com/ruoyi/device/service/DeviceBreakdownMaintenanceService.java | 41
cnas-device/src/main/java/com/ruoyi/device/service/DeviceOperationInstructionService.java | 20
54 files changed, 2,777 insertions(+), 8 deletions(-)
diff --git a/cnas-device/pom.xml b/cnas-device/pom.xml
index 4aee7af..74dbc21 100644
--- a/cnas-device/pom.xml
+++ b/cnas-device/pom.xml
@@ -18,6 +18,23 @@
<groupId>com.ruoyi</groupId>
<artifactId>inspect-server</artifactId>
</dependency>
+
+ <!--mqtt jar鍖�-->
+ <!-- https://mvnrepository.com/artifact/org.springframework.integration/spring-integration-mqtt -->
+ <dependency>
+ <groupId>org.springframework.integration</groupId>
+ <artifactId>spring-integration-mqtt</artifactId>
+ </dependency>
+ <!--mqtt闇�瑕佺殑jar鍖�-->
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-integration</artifactId>
+ </dependency>
+ <!--mqtt闇�瑕佺殑jar鍖�-->
+ <dependency>
+ <groupId>org.springframework.integration</groupId>
+ <artifactId>spring-integration-stream</artifactId>
+ </dependency>
</dependencies>
<properties>
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceAcceptanceController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceAcceptanceController.java
index 27c15bf..d77575d 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceAcceptanceController.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceAcceptanceController.java
@@ -60,7 +60,7 @@
* @return
*/
@ApiOperation(value = "鍒犻櫎璁惧楠屾敹")
- @GetMapping("/delDeviceAcceptance")
+ @DeleteMapping("/delDeviceAcceptance")
public Result delDeviceAcceptance(Integer acceptanceId){
return Result.success(deviceAcceptanceService.removeById(acceptanceId));
}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceAccidentReportController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceAccidentReportController.java
new file mode 100644
index 0000000..22a216b
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceAccidentReportController.java
@@ -0,0 +1,84 @@
+package com.ruoyi.device.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.device.pojo.DeviceAccidentReport;
+import com.ruoyi.device.service.DeviceAccidentReportService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 璁惧浜嬫晠鎶ュ憡鍗� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 06:31:12
+ */
+@Api(tags = "璁惧浜嬫晠鎶ュ憡鍗�")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/deviceAccidentReport")
+public class DeviceAccidentReportController {
+
+ private DeviceAccidentReportService deviceAccidentReportService;
+
+
+ /**
+ * 璁惧浜嬫晠鎶ュ憡鍒楄〃
+ * @return
+ */
+ @ApiOperation(value = "璁惧浜嬫晠鎶ュ憡鍒楄〃")
+ @GetMapping("/pageDeviceAccidentReport")
+ public Result<IPage<DeviceAccidentReport>> pageDeviceAccidentReport(Page page, DeviceAccidentReport deviceAccidentReport){
+ return Result.success(deviceAccidentReportService.pageDeviceAccidentReport(page, deviceAccidentReport));
+ }
+
+ /**
+ * 鏌ヨ璁惧浜嬫晠鎶ュ憡
+ * @return
+ */
+ @ApiOperation(value = "鏌ヨ璁惧浜嬫晠鎶ュ憡")
+ @GetMapping("/getDeviceAccidentReport")
+ public Result getDeviceAccidentReport(Integer accidentReportId){
+ return Result.success(deviceAccidentReportService.getById(accidentReportId));
+ }
+
+ /**
+ * 鍒犻櫎璁惧浜嬫晠鎶ュ憡
+ * @return
+ */
+ @ApiOperation(value = "鍒犻櫎璁惧浜嬫晠鎶ュ憡")
+ @DeleteMapping("/delDeviceAccidentReport")
+ public Result delDeviceAccidentReport(Integer accidentReportId){
+ return Result.success(deviceAccidentReportService.removeById(accidentReportId));
+ }
+
+ /**
+ * 鏂板璁惧浜嬫晠鎶ュ憡
+ * @return
+ */
+ @ApiOperation(value = "鏂板璁惧浜嬫晠鎶ュ憡")
+ @PostMapping("/addDeviceAccidentReport")
+ public Result addDeviceAccidentReport(@RequestBody DeviceAccidentReport deviceAccidentReport){
+ return Result.success(deviceAccidentReportService.addDeviceAccidentReport(deviceAccidentReport));
+ }
+
+ /**
+ * 瀵煎嚭璁惧浜嬫晠鎶ュ憡
+ * @param accidentReportId 璁惧浜嬫晠鎶ュ憡id
+ * @param response 鍝嶅簲
+ */
+ @ApiOperation(value = "瀵煎嚭璁惧浜嬫晠鎶ュ憡")
+ @GetMapping("/exportDeviceAccidentReport")
+ public Result exportDeviceAccidentReport(Integer accidentReportId, HttpServletResponse response) {
+ deviceAccidentReportService.exportDeviceAccidentReport(accidentReportId, response);
+ return Result.success();
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceBorrowController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceBorrowController.java
index 6ddde96..6be1b18 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceBorrowController.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceBorrowController.java
@@ -30,7 +30,7 @@
//鍒嗛〉
- @PostMapping("/deviceBorrowPage")
+ @GetMapping("/deviceBorrowPage")
public Result deviceBorrowPage(Page page, DeviceBorrow deviceBorrow) throws Exception {
return Result.success(deviceBorrowService.deviceBorrowPage(page, deviceBorrow));
}
@@ -48,13 +48,13 @@
}
//鍒犻櫎
- @PostMapping("/deleteDeviceBorrow")
+ @DeleteMapping("/deleteDeviceBorrow")
public Result deleteDeviceBorrow(Integer id) {
return Result.success(deviceBorrowService.removeById(id));
}
//瀵煎嚭
- @PostMapping("/deviceBorrowExport")
+ @GetMapping("/deviceBorrowExport")
public Result deviceBorrowExport(@RequestParam("deviceId") Integer deviceId, HttpServletResponse response) throws Exception {
List<DeviceBorrow> deviceBorrows = deviceBorrowService.getDeviceBorrowBydeviceId(deviceId);
response.setHeader("requestType", "excel");
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceBreakdownMaintenanceController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceBreakdownMaintenanceController.java
new file mode 100644
index 0000000..f86dd9c
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceBreakdownMaintenanceController.java
@@ -0,0 +1,85 @@
+package com.ruoyi.device.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.device.dto.DeviceBreakdownMaintenance;
+import com.ruoyi.device.service.DeviceBreakdownMaintenanceService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 璁惧鏁呴殰缁翠慨琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 04:50:57
+ */
+@Api(tags = "璁惧鏁呴殰缁翠慨琛�")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/deviceBreakdownMaintenance")
+public class DeviceBreakdownMaintenanceController {
+
+ private DeviceBreakdownMaintenanceService deviceBreakdownMaintenanceService;
+
+
+ /**
+ * 璁惧鏁呴殰缁翠慨鍒楄〃
+ * @return
+ */
+ @ApiOperation(value = "璁惧鏁呴殰缁翠慨鍒楄〃")
+ @GetMapping("/pageDeviceBreakdownMaintenance")
+ public Result<IPage<DeviceBreakdownMaintenance>> pageDeviceBreakdownMaintenance(Page page, DeviceBreakdownMaintenance deviceBreakdownMaintenance) {
+ return Result.success(deviceBreakdownMaintenanceService.pageDeviceBreakdownMaintenance(page, deviceBreakdownMaintenance));
+ }
+
+ /**
+ * 鏌ヨ璁惧鏁呴殰缁翠慨
+ * @return
+ */
+ @ApiOperation(value = "鏌ヨ璁惧鏁呴殰缁翠慨")
+ @GetMapping("/getDeviceBreakdownMaintenance")
+ public Result getDeviceBreakdownMaintenance(Integer maintenanceId){
+ return Result.success(deviceBreakdownMaintenanceService.getById(maintenanceId));
+ }
+
+ /**
+ * 鍒犻櫎璁惧鏁呴殰缁翠慨
+ * @return
+ */
+ @ApiOperation(value = "鍒犻櫎璁惧鏁呴殰缁翠慨")
+ @DeleteMapping("/delDeviceBreakdownMaintenance")
+ public Result delDeviceBreakdownMaintenance(Integer maintenanceId){
+ return Result.success(deviceBreakdownMaintenanceService.removeById(maintenanceId));
+ }
+
+ /**
+ * 鏂板璁惧鏁呴殰缁翠慨
+ * @return
+ */
+ @ApiOperation(value = "鏂板璁惧鏁呴殰缁翠慨")
+ @PostMapping("/addDeviceBreakdownMaintenance")
+ public Result addDeviceBreakdownMaintenance(@RequestBody DeviceBreakdownMaintenance deviceBreakdownMaintenance){
+ return Result.success(deviceBreakdownMaintenanceService.addDeviceBreakdownMaintenance(deviceBreakdownMaintenance));
+ }
+
+ /**
+ * 瀵煎嚭璁惧鏁呴殰缁翠慨
+ * @param maintenanceId 璁惧鏁呴殰缁翠慨id
+ * @param response 鍝嶅簲
+ * @return
+ */
+ @ApiOperation(value = "瀵煎嚭璁惧鏁呴殰缁翠慨")
+ @GetMapping("/exportDeviceBreakdownMaintenance")
+ public Result exportDeviceBreakdownMaintenance(Integer maintenanceId, HttpServletResponse response){
+ deviceBreakdownMaintenanceService.exportDeviceBreakdownMaintenance(maintenanceId, response);
+ return Result.success();
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceInspectionRecordController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceInspectionRecordController.java
new file mode 100644
index 0000000..9db6182
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceInspectionRecordController.java
@@ -0,0 +1,99 @@
+package com.ruoyi.device.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.device.dto.DeviceInspectionRecordDto;
+import com.ruoyi.device.pojo.DeviceInspectionRecord;
+import com.ruoyi.device.service.DeviceInspectionRecordService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.SneakyThrows;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <p>
+ * 璁惧鐐规璁板綍琛�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 04:25:14
+ */
+@Api(tags = "璁惧鐐规璁板綍")
+@RestController
+@RequestMapping("/deviceInspectionRecord")
+public class DeviceInspectionRecordController {
+ @Resource
+ private DeviceInspectionRecordService deviceInspectionRecordService;
+
+ /**
+ * 鍒嗛〉鏌ヨ璁惧鐐规璁板綍
+ */
+ @ApiOperation("鍒嗛〉鏌ヨ璁惧鐐规璁板綍")
+ @GetMapping("/getDeviceInspectionRecordByPage")
+ public Result<IPage<DeviceInspectionRecord>> getDeviceInspectionRecordByPage(IPage page, DeviceInspectionRecordDto itemParameter) {
+ return deviceInspectionRecordService.getDeviceInspectionRecordByPage(page, itemParameter);
+ }
+
+ /**
+ * 鏌ヨ鐐规璇︽儏
+ */
+ @ApiOperation("鏌ヨ鐐规璇︽儏")
+ @GetMapping("/getDeviceInspectionRecord")
+ public Result getDeviceInspectionRecord(Integer inspectionRecordId) {
+ return deviceInspectionRecordService.getDeviceInspectionRecord(inspectionRecordId);
+ }
+
+ /**
+ * 鏂板璁惧鐐规璁板綍
+ * @param deviceInspectionRecord 璁惧鐐规璁板綍
+ */
+ @ApiOperation("鏂板璁惧鐐规璁板綍")
+ @PostMapping("/addDeviceInspectionRecord")
+ public Result addDeviceInspectionRecord(@RequestBody DeviceInspectionRecordDto deviceInspectionRecord) {
+ return deviceInspectionRecordService.addDeviceInspectionRecord(deviceInspectionRecord);
+ }
+
+ /**
+ * 淇敼璁惧鐐规璁板綍
+ */
+ @ApiOperation("淇敼璁惧鐐规璁板綍")
+ @PostMapping("/updateDeviceInspectionRecord")
+ public Result updateDeviceInspectionRecord(@RequestBody DeviceInspectionRecordDto deviceInspectionRecord) {
+ return deviceInspectionRecordService.updateInspectionRecordAndDetails(deviceInspectionRecord);
+ }
+
+ /**
+ * 鍒犻櫎璁惧鐐规璁板綍
+ */
+ @ApiOperation("鍒犻櫎璁惧鐐规璁板綍")
+ @DeleteMapping("/deleteDeviceInspectionRecord")
+ public Result deleteDeviceInspectionRecord(DeviceInspectionRecordDto deviceInspectionRecord) {
+ return deviceInspectionRecordService.deleteDeviceInspectionRecordOrDetails(deviceInspectionRecord);
+ }
+
+
+ /**
+ * 澶嶆牳鐐规璁板綍
+ * @return
+ */
+ @ApiOperation(value = "澶嶆牳鏍告煡璁板綍")
+ @PostMapping("/reviewDeviceInspectionRecord")
+ public Result reviewDeviceInspectionRecord(@RequestBody DeviceInspectionRecordDto deviceExamineRecordDto){
+ return deviceInspectionRecordService.reviewDeviceInspectionRecord(deviceExamineRecordDto);
+ }
+
+
+ /**
+ * 瀵煎嚭璁惧鐐规璁板綍
+ */
+ @ApiOperation("瀵煎嚭璁惧鐐规璁板綍")
+ @GetMapping("/exportDeviceInspectionRecord")
+ public Result exportDeviceInspectionRecord(@RequestParam("inspectionRecordId") Integer inspectionRecordId, HttpServletResponse response) {
+ return deviceInspectionRecordService.exportDeviceInspectionRecord(inspectionRecordId, response);
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceInstructionController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceInstructionController.java
new file mode 100644
index 0000000..a4af938
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceInstructionController.java
@@ -0,0 +1,103 @@
+package com.ruoyi.device.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.device.dto.DeviceInstructionDto;
+import com.ruoyi.device.dto.DeviceOperationInstructionDto;
+import com.ruoyi.device.pojo.DeviceInstruction;
+import com.ruoyi.device.pojo.OperationInstruction;
+import com.ruoyi.device.service.DeviceInstructionService;
+import com.ruoyi.device.service.DeviceOperationInstructionService;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.time.LocalDateTime;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 浣滀笟鎸囧涔︽坊鍔犲彈鎺ф枃浠惰〃 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-12-04 10:29:18
+ */
+@RestController
+@RequestMapping("/deviceInstruction")
+public class DeviceInstructionController {
+
+ @Autowired
+ private DeviceInstructionService deviceInstructionService;
+
+ @Autowired
+ private DeviceOperationInstructionService deviceOperationInstructionService;
+
+
+ @ApiOperation(value = "浣滀笟鎸囧涔� 鍒嗛〉")
+ @GetMapping("/pageByPageQueryOfHomeworkInstructions")
+ public Result<IPage<DeviceInstruction>> pageByPageQueryOfHomeworkInstructions(Page page, DeviceOperationInstructionDto operationInstructionDto){
+ return Result.success(deviceInstructionService.pageByPageQueryOfHomeworkInstructions(page, operationInstructionDto));
+ }
+
+ @ApiOperation(value = "浣滀笟鎸囧涔︽柊澧�")
+ @PostMapping("/newHomeworkGuidebookAdded")
+ public Result newHomeworkGuidebookAdded(@RequestBody DeviceInstructionDto instructionDto){
+ deviceInstructionService.newHomeworkGuidebookAdded(instructionDto);
+ return Result.success();
+ }
+
+ @ApiOperation(value = "浣滀笟鎸囧涔︾紪杈�")
+ @GetMapping("/homeworkGuidebookEditor")
+ public Result<Map<String, Object>> homeworkGuidebookEditor(Integer instructionId){
+ DeviceInstruction instruction = deviceInstructionService.getById(instructionId);
+ List<DeviceOperationInstructionDto> list = deviceOperationInstructionService.homeworkGuidebookEditor(instructionId);
+ HashMap<String, Object> map = new HashMap<>();
+ map.put("list", list);
+ map.put("instruction", instruction);
+ return Result.success(map);
+ }
+
+ @ApiOperation(value = "浣滀笟鎸囧涔﹀彈鎺ф枃浠跺垹闄�")
+ @GetMapping("/deleteHomeworkGuidebook")
+ public Result deleteHomeworkGuidebook(String ids){
+ if (ObjectUtils.isNotEmpty(ids)) {
+ String[] idArray = ids.split(",");
+ deviceOperationInstructionService.removeBatchByIds(Arrays.asList(idArray));
+ }
+ return Result.success();
+ }
+
+ @ApiOperation(value = "浣滀笟鎸囧涔﹀垹闄�")
+ @GetMapping("/homeworkGuidebook")
+ public Result homeworkGuidebook(String id, String instructionId){
+ // 鍒犻櫎瀛愯〃鏁版嵁
+ deviceOperationInstructionService.removeById(id);
+ // 濡傛灉瀛愯〃鏁版嵁涓虹┖
+ long count = deviceOperationInstructionService.count(Wrappers.<OperationInstruction>lambdaQuery()
+ .eq(OperationInstruction::getInstructionId, instructionId));
+ // 閭d箞灏卞垹闄ょ埗琛ㄦ暟鎹�
+ if (count < 1) {
+ deviceInstructionService.removeById(id);
+ }
+ return Result.success();
+ }
+
+ @ApiOperation(value = "浣滀笟鎸囧涔﹀鎵�")
+ @GetMapping("/approvalOfHomeworkInstructionManual")
+ public Result approvalOfHomeworkInstructionManual(String id, Boolean status){
+ deviceOperationInstructionService.update(Wrappers.<OperationInstruction>lambdaUpdate()
+ .eq(OperationInstruction::getId, id)
+ .set(OperationInstruction::getStatus, status)
+ .set(OperationInstruction::getApproverId, SecurityUtils.getUserId().intValue())
+ .set(OperationInstruction::getEntryIntoForceTime, LocalDateTime.now()));
+ return Result.success();
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMaintenancePlanController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMaintenancePlanController.java
index 9ee8ffe..4052858 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMaintenancePlanController.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMaintenancePlanController.java
@@ -65,7 +65,7 @@
* @param deviceMaintenancePlanDto 璁惧淇濆吇璁″垝
*/
@ApiOperation("鍒犻櫎璁惧淇濆吇璁″垝")
- @GetMapping("/deleteMaintenancePlan")
+ @DeleteMapping("/deleteMaintenancePlan")
public Result deleteMaintenancePlan(DeviceMaintenancePlanDto deviceMaintenancePlanDto) {
return deviceMaintenancePlanService.deleteMaintenancePlan(deviceMaintenancePlanDto);
}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceScrappedController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceScrappedController.java
index 9bada11..95794eb 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceScrappedController.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceScrappedController.java
@@ -35,7 +35,7 @@
* @return
*/
@ApiOperation(value = "璁惧鎶ュ簾鐢宠鍒楄〃")
- @PostMapping("/pageDeviceScrapped")
+ @GetMapping("/pageDeviceScrapped")
public Result<IPage<DeviceScrapped>> pageDeviceScrapped(Page page, DeviceScrapped deviceScrapped) {
return Result.success(deviceScrappedService.pageDeviceScrapped(page, deviceScrapped));
}
@@ -55,7 +55,7 @@
* @return
*/
@ApiOperation(value = "鍒犻櫎璁惧鎶ュ簾鐢宠")
- @GetMapping("/delDeviceScrapped")
+ @DeleteMapping("/delDeviceScrapped")
public Result delDeviceScrapped(Integer scrappedId){
return Result.success(deviceScrappedService.removeById(scrappedId));
}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceTraceabilityManagementController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceTraceabilityManagementController.java
index d1036ac..b506a92 100644
--- a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceTraceabilityManagementController.java
+++ b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceTraceabilityManagementController.java
@@ -62,7 +62,7 @@
* @param deviceTraceabilityManagementDto 閲忓�兼函婧愯鍒�
*/
@ApiOperation("鍒犻櫎閲忓�兼函婧愯鍒�")
- @GetMapping("/deleteTraceabilityManagement")
+ @DeleteMapping("/deleteTraceabilityManagement")
public Result deleteTraceabilityManagement(DeviceTraceabilityManagementDto deviceTraceabilityManagementDto) {
return deviceTraceabilityManagementService.deleteTraceabilityManagement(deviceTraceabilityManagementDto);
}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceAccidentReportDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceAccidentReportDto.java
new file mode 100644
index 0000000..41fa6e3
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceAccidentReportDto.java
@@ -0,0 +1,31 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.DeviceAccidentReport;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-18 鏄熸湡涓� 10:00:48
+ * Description:
+ */
+@Data
+public class DeviceAccidentReportDto extends DeviceAccidentReport {
+ @ApiModelProperty("鏃堕棿")
+ private String accidentDateStr;
+
+ @ApiModelProperty("鎶ュ憡浜哄~鍐欐椂闂�")
+ private String reportDateStr;
+
+ @ApiModelProperty("璇勪及浜哄~鍐欐椂闂�")
+ private String assessorDateStr;
+
+ @ApiModelProperty("閮ㄩ棬璐熻矗浜哄~鍐欐椂闂�")
+ private String departmentHeadDateStr;
+
+ @ApiModelProperty("鎶�鏈礋璐d汉濉啓鏃堕棿")
+ private String technicalDirectorDateStr;
+
+ @ApiModelProperty("涓讳换濉啓鏃堕棿")
+ private String directorHeadDateStr;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceBreakdownMaintenance.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceBreakdownMaintenance.java
new file mode 100644
index 0000000..3d5ba22
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceBreakdownMaintenance.java
@@ -0,0 +1,90 @@
+package com.ruoyi.device.dto;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧鏁呴殰缁翠慨琛�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 04:50:57
+ */
+@Getter
+@Setter
+@TableName("device_breakdown_maintenance")
+@ApiModel(value = "DeviceBreakdownMaintenance瀵硅薄", description = "璁惧鏁呴殰缁翠慨琛�")
+public class DeviceBreakdownMaintenance {
+
+ @TableId(value = "maintenance_id", type = IdType.AUTO)
+ private Integer maintenanceId;
+
+ @ApiModelProperty("璁惧id")
+ private Integer deviceId;
+
+ @ApiModelProperty("瀹夎鍦板潃")
+ private String location;
+
+ @ApiModelProperty("鎹熷潖鎴栨晠闅滄儏鍐�")
+ private String damageOrMalfunction;
+
+ @ApiModelProperty("鐢宠浜篿d")
+ private Integer applicantUserId;
+
+ @ApiModelProperty("鐢宠浜�")
+ private String applicantUser;
+
+ @ApiModelProperty("瑕佹眰淇鏃堕棿")
+ private LocalDate repairDate;
+
+ @ApiModelProperty("閮ㄩ棬璐熻矗浜烘剰瑙�")
+ private String departmentHeadOpinion;
+
+ @ApiModelProperty("閮ㄩ棬璐熻矗浜篿d")
+ private Integer departmentHeadUserId;
+
+ @ApiModelProperty("閮ㄩ棬璐熻矗浜�")
+ private String departmentHeadUser;
+
+ @ApiModelProperty("閮ㄩ棬璐熻矗浜哄~鍐欐椂闂�")
+ private LocalDate departmentHeadDate;
+
+ @ApiModelProperty("缁翠慨璁颁簨")
+ private String maintenanceRecord;
+
+ @ApiModelProperty("缁翠慨浜�")
+ private String maintenanceUser;
+
+ @ApiModelProperty("缁翠慨鏃堕棿")
+ private LocalDate maintenanceDate;
+
+ @ApiModelProperty("鏄惁缁撴潫,0 鏈粨鏉�, 1缁撴潫")
+ private Integer isFinish;
+
+ @ApiModelProperty("鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @ApiModelProperty("鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @ApiModelProperty("淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @TableField(exist = false,select = false)
+ @ApiModelProperty("娴佺▼, 0:鐢宠, 1鐢宠閮ㄩ棬璐熻矗浜烘剰瑙�, 2:缁翠慨璁颁簨")
+ private Integer flowType;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceInspectionRecordDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceInspectionRecordDto.java
new file mode 100644
index 0000000..f71386a
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceInspectionRecordDto.java
@@ -0,0 +1,25 @@
+package com.ruoyi.device.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.ruoyi.device.pojo.DeviceInspectionRecord;
+import com.ruoyi.device.pojo.DeviceInspectionRecordDetails;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-16 鏄熸湡涓� 17:23:22
+ * Description:
+ */
+@Data
+public class DeviceInspectionRecordDto extends DeviceInspectionRecord {
+
+ @TableField(exist = false)
+ @ApiModelProperty("娴嬭瘯璇︽儏鍐呭")
+ private List<DeviceInspectionRecordDetails> details;
+
+ @ApiModelProperty("娴嬭瘯鏃堕棿")
+ private String testDateString;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceInstructionDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceInstructionDto.java
new file mode 100644
index 0000000..11244b4
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceInstructionDto.java
@@ -0,0 +1,13 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.DeviceInstruction;
+import com.ruoyi.device.pojo.OperationInstruction;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class DeviceInstructionDto extends DeviceInstruction {
+
+ private List<OperationInstruction> feTempHumRecordList;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceOperationInstructionDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceOperationInstructionDto.java
new file mode 100644
index 0000000..89ebd4c
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceOperationInstructionDto.java
@@ -0,0 +1,35 @@
+package com.ruoyi.device.dto;
+
+import com.ruoyi.device.pojo.OperationInstruction;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class DeviceOperationInstructionDto extends OperationInstruction {
+ @ApiModelProperty("鐢宠缂栧彿")
+ private String applicationNumber;
+
+ @ApiModelProperty("鐢宠閮ㄩ棬")
+ private String applicationDepartment;
+
+ @ApiModelProperty("璐d换浜�")
+ private String personLiable;
+
+ @ApiModelProperty("鍙楁帶鐢宠璇存槑")
+ private String controlledApplicationDescription;
+
+ @ApiModelProperty("绠$悊缂栧彿")
+ private String deviceNumber;
+
+ @ApiModelProperty("鍨嬪彿")
+ private String deviceModel;
+
+ @ApiModelProperty("璁惧鍚嶇О")
+ private String deviceName;
+
+ @ApiModelProperty("涓婁紶浜�")
+ private String uploaderName;
+
+ @ApiModelProperty("瀹℃壒浜�")
+ private String approverName;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceAccidentReportMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceAccidentReportMapper.java
new file mode 100644
index 0000000..25de891
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceAccidentReportMapper.java
@@ -0,0 +1,35 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.device.dto.DeviceAccidentReportDto;
+import com.ruoyi.device.pojo.DeviceAccidentReport;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 璁惧浜嬫晠鎶ュ憡鍗� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 06:31:12
+ */
+public interface DeviceAccidentReportMapper extends BaseMapper<DeviceAccidentReport> {
+
+ /**
+ * 璁惧浜嬫晠鎶ュ憡鍒楄〃
+ * @param page
+ * @param ew
+ * @return
+ */
+ IPage<DeviceAccidentReport> pageDeviceAccidentReport(Page page, @Param("ew") QueryWrapper<DeviceAccidentReport> ew);
+
+ /**
+ * 鏌ヨ璁惧浜嬫晠鎶ュ憡璇︽儏
+ * @param accidentReportId 璁惧浜嬫晠鎶ュ憡id
+ * @return
+ */
+ DeviceAccidentReportDto selectDeviceAccidentReportById(Integer accidentReportId);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceBreakdownMaintenanceMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceBreakdownMaintenanceMapper.java
new file mode 100644
index 0000000..78e9da2
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceBreakdownMaintenanceMapper.java
@@ -0,0 +1,27 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.device.dto.DeviceBreakdownMaintenance;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 璁惧鏁呴殰缁翠慨琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 04:50:57
+ */
+public interface DeviceBreakdownMaintenanceMapper extends BaseMapper<DeviceBreakdownMaintenance> {
+
+ /**
+ * 璁惧鏁呴殰缁翠慨鍒楄〃
+ * @param page
+ * @param ew
+ * @return
+ */
+ IPage<DeviceBreakdownMaintenance> pageDeviceBreakdownMaintenance(Page page, @Param("ew") QueryWrapper<DeviceBreakdownMaintenance> ew);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceInspectionRecordDetailsMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceInspectionRecordDetailsMapper.java
new file mode 100644
index 0000000..66d10cd
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceInspectionRecordDetailsMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.device.pojo.DeviceInspectionRecordDetails;
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 04:27:32
+ */
+public interface DeviceInspectionRecordDetailsMapper extends BaseMapper<DeviceInspectionRecordDetails> {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceInspectionRecordMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceInspectionRecordMapper.java
new file mode 100644
index 0000000..5cb34ee
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceInspectionRecordMapper.java
@@ -0,0 +1,28 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ruoyi.device.dto.DeviceInspectionRecordDto;
+import com.ruoyi.device.pojo.DeviceInspectionRecord;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 04:25:14
+ */
+public interface DeviceInspectionRecordMapper extends BaseMapper<DeviceInspectionRecord> {
+
+ /**
+ * 鍒嗛〉鏌ヨ璁惧鐐规璁板綍
+ * @param page
+ * @param queryWrappers
+ * @return
+ */
+ IPage<DeviceInspectionRecord> selectDeviceParameterPage(IPage page, @Param("ew") QueryWrapper<DeviceInspectionRecordDto> queryWrappers);
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/InstructionMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/InstructionMapper.java
new file mode 100644
index 0000000..12fd129
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/InstructionMapper.java
@@ -0,0 +1,23 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.device.dto.DeviceOperationInstructionDto;
+import com.ruoyi.device.pojo.DeviceInstruction;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 浣滀笟鎸囧涔︽坊鍔犲彈鎺ф枃浠惰〃 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-12-04 10:29:18
+ */
+public interface InstructionMapper extends BaseMapper<DeviceInstruction> {
+
+
+ IPage<DeviceInstruction> pageByPageQueryOfHomeworkInstructions(Page page, @Param("ew") QueryWrapper<DeviceOperationInstructionDto> ew);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/OperationInstructionMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/OperationInstructionMapper.java
new file mode 100644
index 0000000..f034e12
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mapper/OperationInstructionMapper.java
@@ -0,0 +1,20 @@
+package com.ruoyi.device.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.device.dto.DeviceOperationInstructionDto;
+import com.ruoyi.device.pojo.OperationInstruction;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 璁惧 - 浣滀笟鎸囧涔� 娣诲姞鍙楁帶鏂囦欢 瀛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-12-04 10:43:32
+ */
+public interface OperationInstructionMapper extends BaseMapper<OperationInstruction> {
+
+ List<DeviceOperationInstructionDto> homeworkGuidebookEditor(Integer instructionId);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mqtt/MQBean.java b/cnas-device/src/main/java/com/ruoyi/device/mqtt/MQBean.java
new file mode 100644
index 0000000..d429673
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mqtt/MQBean.java
@@ -0,0 +1,14 @@
+package com.ruoyi.device.mqtt;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+
+@Component
+public class MQBean {
+
+ @Bean("mqClient") // 鍚姩WEB鏈嶅姟鍣ㄧ殑鏃跺�欒皟鐢ㄦ鏂规硶鍒濆鍖�
+ public MQClient myMQTTClient(){
+ MQClient mqClient = new MQClient();
+ return mqClient;
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mqtt/MQCallback.java b/cnas-device/src/main/java/com/ruoyi/device/mqtt/MQCallback.java
new file mode 100644
index 0000000..51fb42a
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mqtt/MQCallback.java
@@ -0,0 +1,93 @@
+package com.ruoyi.device.mqtt;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.device.service.CollectBridgeService;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
+import org.eclipse.paho.client.mqttv3.MqttCallback;
+import org.eclipse.paho.client.mqttv3.MqttMessage;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+
+@Component
+@Slf4j
+public class MQCallback<component> implements MqttCallback {
+
+ private MQClient mqClient; // MQTT杩炴帴鏁版嵁
+
+ private MQConfig mqConfig; // yml閰嶇疆鏁版嵁
+
+ private static MQCallback mqCallback;
+
+ @Resource
+ private CollectBridgeService collectBridgeService;
+
+ @PostConstruct
+ public void init() {
+ mqCallback = this;
+ // 鍒濅娇鍖栨椂灏嗗凡闈欐�佸寲鐨刢onfigParam瀹炰緥鍖�
+ mqCallback.collectBridgeService = this.collectBridgeService;
+ }
+
+ public MQCallback(MQClient mqClient, MQConfig mqConfig) {
+ this.mqClient = mqClient;
+ this.mqConfig = mqConfig;
+ }
+
+ /** 杩炴帴涓㈠け鍚庯紝涓�鑸湪杩欓噷闈㈣繘琛岄噸杩� **/
+ @SneakyThrows
+ @Override
+ public void connectionLost(Throwable cause) {
+ /** 杩炴帴涓㈠け鍚庯紝涓�鑸湪杩欓噷闈㈣繘琛岄噸杩� **/
+ if (mqClient != null) {
+ while (true) {
+ try {
+ log.info("==============銆嬨�嬨�媅MQTT] 杩炴帴涓㈠け锛屽皾璇曢噸杩�...");
+ MQClient mqttPushClient = new MQClient();
+ mqttPushClient.connect(mqConfig);
+ if (mqClient.getClient().isConnected()) {
+ log.info("=============>>閲嶈繛鎴愬姛");
+ }
+ break;
+ } catch (Exception e) {
+ log.error("=============>>>[MQTT] 杩炴帴鏂紑锛岄噸杩炲け璐ワ紒<<=============");
+ continue;
+ }
+ }
+ }
+ log.info(cause.getMessage());
+ }
+
+ /**
+ * MQTT鏈嶅姟鍣ㄥ悜WEB鏈嶅姟鍣ㄥ彂閫佺殑鏁版嵁浼氭墽琛屽埌杩欓噷闈紝瀹樻柟璇濈О涓猴細璁㈤槄鍚庣殑娑堟伅
+ * @param topic 涓婚锛氫篃绉颁负搴曞眰缃戝叧鍞竴鏍囪瘑
+ * @param message 淇℃伅
+ * @throws Exception 鎶ラ敊
+ */
+ @Override
+ public void messageArrived(String topic, MqttMessage message) throws Exception {
+ try {
+ String parse = new String(message.getPayload());
+ JSONObject jsonObject = JSONObject.parseObject(parse);
+ // 濉厖閲囬泦鏁版嵁
+ mqCallback.collectBridgeService.addBridgeValue(jsonObject);
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ log.info("============銆嬨�嬫帴鏀舵秷鎭富棰樺紓甯� : " + e.getMessage());
+ }
+ }
+
+ /**
+ * WEB鏈嶅姟鍣ㄥ悜MQTT鏈嶅姟鍣ㄥ彂閫佺殑鏁版嵁浼氭墽琛屽埌杩欓噷闈�
+ * 瀹樻柟璇濈О涓猴細鍙戝竷鍚庝細鎵ц鍒拌繖閲�
+ * @param token 杩炴帴token
+ */
+ @Override
+ public void deliveryComplete(IMqttDeliveryToken token) {
+// log.info("==========鍙戝竷淇℃伅={}==========", token.isComplete());
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mqtt/MQClient.java b/cnas-device/src/main/java/com/ruoyi/device/mqtt/MQClient.java
new file mode 100644
index 0000000..1c3c548
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mqtt/MQClient.java
@@ -0,0 +1,97 @@
+package com.ruoyi.device.mqtt;
+
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.MqttClient;
+import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
+import org.eclipse.paho.client.mqttv3.MqttException;
+import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
+import org.springframework.stereotype.Component;
+
+@Component
+@Slf4j
+public class MQClient {
+
+ private static MqttClient client;
+ public static MqttClient getClient() {
+ return client;
+ }
+ public static void setClient(MqttClient client) {
+ MQClient.client = client;
+ }
+
+ /**
+ * WEB鏈嶅姟鍣ㄨ繛鎺QTT鏈嶅姟鍣ㄧ殑閰嶇疆
+ * @param userName 璐﹀彿
+ * @param password 瀵嗙爜
+ * @param outTime 瓒呮椂鏃堕棿
+ * @param KeepAlive 蹇冭烦妫�娴嬫椂闂�
+ * @return
+ */
+ private MqttConnectOptions getOption(String userName, String password, int outTime, int KeepAlive) {
+ MqttConnectOptions option = new MqttConnectOptions();
+ // 璁剧疆鏄惁娓呯┖session,false琛ㄧず鏈嶅姟鍣ㄤ細淇濈暀瀹㈡埛绔殑杩炴帴璁板綍锛宼rue琛ㄧず姣忔杩炴帴鍒版湇鍔″櫒閮戒互鏂扮殑韬唤杩炴帴
+ option.setCleanSession(true);
+ // 璁剧疆杩炴帴鐨勭敤鎴峰悕
+ option.setUserName(userName);
+ // 璁剧疆杩炴帴鐨勫瘑鐮�
+ option.setPassword(password.toCharArray());
+ // 璁剧疆瓒呮椂鏃堕棿 鍗曚綅涓虹
+ option.setConnectionTimeout(outTime);
+ // 璁剧疆浼氳瘽蹇冭烦鏃堕棿 鍗曚綅涓虹 鏈嶅姟鍣ㄤ細姣忛殧(1.5*keepTime)绉掔殑鏃堕棿鍚戝鎴风鍙戦�佷釜娑堟伅鍒ゆ柇瀹㈡埛绔槸鍚﹀湪绾匡紝浣嗚繖涓柟娉曞苟娌℃湁閲嶈繛鐨勬満鍒�
+ option.setKeepAliveInterval(KeepAlive);
+ // setWill鏂规硶锛屽鏋滈」鐩腑闇�瑕佺煡閬撳鎴风鏄惁鎺夌嚎鍙互璋冪敤璇ユ柟娉曘�傝缃渶缁堢鍙g殑閫氱煡娑堟伅
+ // option.setWill(topic, "close".getBytes(), 2, true);
+ //璁剧疆鏈�澶ч�熷害
+ option.setMaxInflight(1000);
+ log.info("================>>>MQTT杩炴帴璁よ瘉鎴愬姛<<======================");
+ return option;
+ }
+
+ /**
+ * WEB鏈嶅姟鍣ㄨ繛鎺QTT鏈嶅姟鍣ㄥ嚱鏁�
+ * @param mqttConfig yml涓璏QTT鐨勯厤缃�
+ */
+ public void connect(MQConfig mqttConfig) throws MqttException {
+ client = new MqttClient(mqttConfig.getUrl(), mqttConfig.getClientId(), new MemoryPersistence());
+ MqttConnectOptions options = getOption(mqttConfig.getUsername(), mqttConfig.getPassword(),
+ mqttConfig.getTimeout(), mqttConfig.getKeepAlive());
+ MQClient.setClient(client);
+ //杩炴帴澶辫触璋冪敤鍥炶皟鍑芥暟锛岄噸鏂拌繛鎺�
+ client.setCallback(new MQCallback<Object>(this, mqttConfig));
+ if (!client.isConnected()) {
+ client.connect(options);
+ // 璁㈤槄涓婚
+ MQSubscribe.subscribe_0(mqttConfig.getSubscribe());
+ log.info("================>>>MQTT杩炴帴鎴愬姛<<======================");
+ } else {// 杩欓噷鐨勯�昏緫鏄鏋滆繛鎺ヤ笉鎴愬姛灏遍噸鏂拌繛鎺�
+ client.disconnect();
+ client.connect(options);
+ }
+ }
+
+ /**
+ * WEB鏈嶅姟鍣ㄤ笌MQTT鏈嶅姟鍣ㄧ殑鏂嚎閲嶈繛
+ * @throws Exception
+ */
+ public Boolean reConnect() throws Exception {
+ Boolean isConnected = false;
+ if (null != client) {
+ client.connect();
+ if (client.isConnected()) {
+ isConnected = true;
+ }
+ }
+ return isConnected;
+ }
+
+ /**
+ * 寮傚父鍏抽棴鏈嶅姟锛學EB鏈嶅姟鍣ㄤ笌MQTT鏈嶅姟鍣ㄧ殑鏂紑杩炴帴鍑芥暟
+ */
+ @SneakyThrows
+ public void close(){
+ client.close();
+ client.disconnect();
+ log.info("================>>寮傚父鍏抽棴涓巑qtt鏈嶅姟鍣ㄧ殑杩炴帴<<======================");
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mqtt/MQConfig.java b/cnas-device/src/main/java/com/ruoyi/device/mqtt/MQConfig.java
new file mode 100644
index 0000000..a88b29c
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mqtt/MQConfig.java
@@ -0,0 +1,64 @@
+package com.ruoyi.device.mqtt;
+
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+@Component
+@Data
+public class MQConfig {
+
+ /**
+ * MQTT-鏈嶅姟绔�-IP
+ */
+ @Value("${mqtt.url}")
+ private String url;
+
+ /**
+ * MQTT-鏈嶅姟绔�-鐢ㄦ埛鍚�
+ */
+ @Value("${mqtt.username}")
+ private String username;
+
+ /**
+ * MQTT-鏈嶅姟绔�-瀵嗙爜
+ */
+ @Value("${mqtt.password}")
+ private String password;
+
+ /**
+ * 瓒呮椂鏃堕棿
+ */
+ @Value("${mqtt.timeout}")
+ private int timeout;
+
+ /**
+ * 蹇冭烦妫�娴嬫椂闂�
+ */
+ @Value("${mqtt.keepalive}")
+ private int keepAlive;
+
+ /**
+ * 蹇冭烦鍖呯骇鍒�
+ */
+ @Value("${mqtt.qos}")
+ private int qos;
+
+ /**
+ * 鏈嶅姟绔繛鎺ヨ秴鏃舵椂闂�
+ */
+ @Value("${mqtt.completion-timeout}")
+ private int completionTimeout;
+
+ /**
+ * clientId
+ */
+ @Value("${mqtt.clientId}")
+ private String clientId;
+
+ /**
+ * 璁㈤槄涓婚
+ */
+ @Value("${mqtt.subscribe}")
+ private String subscribe;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mqtt/MQPublic.java b/cnas-device/src/main/java/com/ruoyi/device/mqtt/MQPublic.java
new file mode 100644
index 0000000..78c26d7
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mqtt/MQPublic.java
@@ -0,0 +1,69 @@
+package com.ruoyi.device.mqtt;
+
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.*;
+import org.springframework.stereotype.Component;
+
+@Component
+@Slf4j
+public class MQPublic {
+
+ /**
+ * 閫氫俊璐ㄩ噺qos涓�0锛氳〃绀篧EB鏈嶅姟鍣ㄥ悜MQTT鏈嶅姟鍣ㄥ彧鍙戦�佷竴娆★紝涓嶇MQTT鏈嶅姟鍣ㄦ湁娌℃湁鏀跺埌
+ * WEB鏈嶅姟鍣ㄥ悜MQTT鏈嶅姟鍣ㄥ彂甯冩暟鎹紝姝ゆ柟娉曞皝瑁呬簡publish鍑芥暟
+ * @param topic 鍚戝簳灞傜綉鍏冲彂閫佹暟鎹紝瀹樻柟璇濓細绉版涓轰富棰橈紝鍚戦偅涓富棰樺彂閫佹暟鎹� 缃戝叧锛氬嵆涓婚锛岃澶囧敮涓�鏍囪瘑
+ * @param pushMessage WEB鏈嶅姟鍣ㄥ悜MQTT鏈嶅姟鍣ㄥ彂閫佺殑鏁版嵁
+ */
+ public void publish_0(int qos, String topic, byte[] pushMessage) {
+ publish(0, false, topic, pushMessage);
+ }
+
+ /**
+ * 閫氫俊璐ㄩ噺qos涓�1锛氳〃绀篧EB鏈嶅姟鍣ㄥ悜MQTT鏈嶅姟鍣ㄥ彂閫佹暟鎹紝MQTT鏈嶅姟鍣ㄤ竴瀹氫細鏀跺埌涓�娆℃暟鎹紝濡傛灉MQTT鏈嶅姟鍣ㄦ病鏈夊搷搴斺�滄敹鍒版暟鎹�濓紝閭d箞WEB鏈嶅姟鍣ㄥ氨浼氫竴鐩村彂閫佹暟鎹�
+ * WEB鏈嶅姟鍣ㄥ悜MQTT鏈嶅姟鍣ㄥ彂甯冩暟鎹紝璋冪敤姝ゅ嚱鏁帮紝姝ゆ柟娉曞皝瑁呬簡publish鍑芥暟锛岄�氫俊璐ㄩ噺qos涓�1
+ * @param topic 鍚戝簳灞傜綉鍏冲彂閫佹暟鎹紝瀹樻柟璇濓細绉版涓轰富棰橈紝鍚戦偅涓富棰樺彂閫佹暟鎹� 缃戝叧锛氬嵆涓婚锛岃澶囧敮涓�鏍囪瘑
+ * @param pushMessage WEB鏈嶅姟鍣ㄥ悜MQTT鏈嶅姟鍣ㄥ彂閫佺殑鏁版嵁
+ */
+ public void publish_1(String topic, byte[] pushMessage) {
+ publish(1, false, topic, pushMessage);
+ }
+
+ /**
+ *閫氫俊璐ㄩ噺qos涓�2锛氳〃绀篧EB鏈嶅姟鍣ㄥ悜MQTT鏈嶅姟鍣ㄥ彂閫佹暟鎹紝涓よ�呬細杩涜鑷冲皯涓ゆ璇锋眰/鍝嶅簲娴佺▼锛岄伩鍏嶆暟鎹湪浼犺緭涓殑涓㈠け锛屼絾鏄浉搴旂殑涔熶細娑堣�楄绠楁満涓殑璧勬簮
+ * WEB鏈嶅姟鍣ㄥ悜MQTT鏈嶅姟鍣ㄥ彂甯冩暟鎹紝姝ゆ柟娉曞皝瑁呬簡publish鍑芥暟锛岄�氫俊璐ㄩ噺锛�2
+ * @param topic 鍚戝簳灞傜綉鍏冲彂閫佹暟鎹紝瀹樻柟璇濓細绉版涓轰富棰橈紝鍚戦偅涓富棰樺彂閫佹暟鎹� 缃戝叧锛氬嵆涓婚锛岃澶囧敮涓�鏍囪瘑
+ * @param pushMessage WEB鏈嶅姟鍣ㄥ悜MQTT鏈嶅姟鍣ㄥ彂閫佺殑鏁版嵁
+ */
+ public void publish_2(String topic, byte[] pushMessage) {
+ publish(2,false, topic, pushMessage);
+ }
+
+ /**
+ * 鍙戝竷鍑芥暟锛歐EB鏈嶅姟鍣ㄥ悜MQTT鏈嶅姟鍣ㄥ彂閫佹暟鎹�
+ *
+ * @param qos 閫氫俊璐ㄩ噺
+ * @param retained 榛樿锛歠alse-闈炴寔涔呭寲锛堟槸鎸囦竴鏉℃秷鎭秷璐瑰畬锛屽氨浼氳鍒犻櫎锛涙寔涔呭寲锛屾秷璐瑰畬锛岃繕浼氫繚瀛樺湪鏈嶅姟鍣ㄤ腑锛屽綋鏂扮殑璁㈤槄鑰呭嚭鐜帮紝缁х画缁欐柊璁㈤槄鑰呮秷璐癸級
+ * @param topic 鍚戝簳灞傜綉鍏冲彂閫佹暟鎹紝瀹樻柟璇濓細绉版涓轰富棰橈紝鍚戦偅涓富棰樺彂閫佹暟鎹� 缃戝叧锛氬嵆涓婚锛岃澶囧敮涓�鏍囪瘑
+ * @param pushMessage WEB鏈嶅姟鍣ㄥ悜MQTT鏈嶅姟鍣ㄥ彂閫佺殑鏁版嵁
+ */
+ public void publish(int qos, boolean retained, String topic, byte[] pushMessage) {
+ MqttMessage message = new MqttMessage();
+ message.setQos(qos);
+ message.setRetained(retained);
+ // 灏哠tring[]鏁扮粍杞崲涓篵yte鏁扮粍鍙戦��
+ message.setPayload(pushMessage);
+ MqttTopic mTopic = MQClient.getClient().getTopic(topic);
+ if (null == mTopic) {
+ log.error("===============>>>MQTT {} 涓嶅瓨鍦�<<=======================",topic);
+ }
+ MqttDeliveryToken token;
+ try {
+ token = mTopic.publish(message);
+ token.waitForCompletion();
+ } catch (MqttPersistenceException e) {
+ e.printStackTrace();
+ } catch (MqttException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/mqtt/MQSubscribe.java b/cnas-device/src/main/java/com/ruoyi/device/mqtt/MQSubscribe.java
new file mode 100644
index 0000000..0541e3f
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/mqtt/MQSubscribe.java
@@ -0,0 +1,60 @@
+package com.ruoyi.device.mqtt;
+
+import org.eclipse.paho.client.mqttv3.MqttException;
+import org.springframework.stereotype.Component;
+
+@Component
+public class MQSubscribe {
+
+ /**
+ * 璁㈤槄鏌愪釜涓婚锛歁QTT鏈嶅姟鍣ㄥ悜WEB鏈嶅姟鍣ㄥ彂閫佹暟鎹�
+ *涓婚锛氫篃绉颁负搴曞眰缃戝叧鍞竴鏍囪瘑
+ * @param topic 璁惧缂栧彿锛屼笌搴曞眰浜や簰鐨勫敮涓�鏍囪瘑
+ * @param qos MQTT鏈嶅姟鍣ㄥ悜WEB鏈嶅姟鍣ㄥ彂閫佹暟鎹�
+ * qos涓�0锛氬彧鍚慦EB鏈嶅姟鍣ㄥ彂閫佷竴娆★紱
+ * qos涓�1锛氳嚦灏戝悜WEB鏈嶅姟鍣ㄥ彂閫佷竴娆★紝鎺ユ敹鏂逛細鍝嶅簲涓�涓姤鏂囷紱
+ * qos涓�2锛氫袱鑰呬細杩涜鑷冲皯涓ゆ璇锋眰/鍝嶅簲娴佺▼锛岄伩鍏嶆暟鎹湪浼犺緭涓殑涓㈠け
+ */
+ private static void subscribe(String topic, int qos) {
+ try {
+ MQClient.getClient().subscribe(topic,qos);
+ } catch (MqttException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 璁㈤槄鏌愪釜涓婚锛岄�氫俊璐ㄩ噺锛歲os榛樿涓�0
+ * 涓婚锛氫篃绉颁负搴曞眰缃戝叧鍞竴鏍囪瘑
+ * @param topic 璁惧缂栧彿锛屼笌搴曞眰浜や簰鐨勫敮涓�鏍囪瘑
+ */
+ public static void subscribe_0(String topic) {
+ subscribe(topic, 0);
+ }
+
+ /**
+ * 璁㈤槄鏌愪釜涓婚锛岄�氫俊璐ㄩ噺锛歲os榛樿涓�1
+ * 涓婚锛氫篃绉颁负搴曞眰缃戝叧鍞竴鏍囪瘑
+ * @param topic 璁惧缂栧彿锛屼笌搴曞眰浜や簰鐨勫敮涓�鏍囪瘑
+ */
+ public void subscribe_1(String topic) {
+ subscribe(topic, 1);
+ }
+
+ /**
+ * 璁㈤槄鏌愪釜涓婚锛岄�氫俊璐ㄩ噺锛歲os榛樿涓�2
+ * 涓婚锛氫篃绉颁负搴曞眰缃戝叧鍞竴鏍囪瘑
+ * @param topic 璁惧缂栧彿锛屼笌搴曞眰浜や簰鐨勫敮涓�鏍囪瘑
+ */
+ public void subscribe_2(String topic) {
+ subscribe(topic, 2);
+ }
+
+ public void OffSubscribe(String topic) {
+ try {
+ MQClient.getClient().unsubscribe(topic);
+ } catch (MqttException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceAccidentReport.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceAccidentReport.java
new file mode 100644
index 0000000..44558f3
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceAccidentReport.java
@@ -0,0 +1,120 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧浜嬫晠鎶ュ憡鍗�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 06:31:12
+ */
+@Getter
+@Setter
+@TableName("device_accident_report")
+@ApiModel(value = "DeviceAccidentReport瀵硅薄", description = "璁惧浜嬫晠鎶ュ憡鍗�")
+public class DeviceAccidentReport {
+
+ @TableId(value = "accident_report_id", type = IdType.AUTO)
+ private Integer accidentReportId;
+
+ @ApiModelProperty("璁惧id")
+ private Integer deviceId;
+
+ @ApiModelProperty("鍦板潃")
+ private String address;
+
+ @ApiModelProperty("鏃堕棿")
+ private LocalDateTime accidentDate;
+
+ @ApiModelProperty("浜嬫晠鎯呭喌鎻忚堪")
+ private String descriptionOfAccident;
+
+ @ApiModelProperty("鎶ュ憡浜篿d")
+ private Integer reportUserId;
+
+ @ApiModelProperty("鎶ュ憡浜�")
+ private String reportUser;
+
+ @ApiModelProperty("鎶ュ憡浜哄~鍐欐椂闂�")
+ private LocalDate reportDate;
+
+ @ApiModelProperty("璇勪及浜烘剰瑙�")
+ private String assessorOpinion;
+
+ @ApiModelProperty("璇勪及浜篿d")
+ private Integer assessorUserId;
+
+ @ApiModelProperty("璇勪及浜�")
+ private String assessorUser;
+
+ @ApiModelProperty("璇勪及浜哄~鍐欐椂闂�")
+ private LocalDate assessorDate;
+
+ @ApiModelProperty("閮ㄩ棬璐熻矗浜烘剰瑙�")
+ private String departmentHeadOpinion;
+
+ @ApiModelProperty("閮ㄩ棬璐熻矗浜篿d")
+ private Integer departmentHeadUserId;
+
+ @ApiModelProperty("閮ㄩ棬璐熻矗浜�")
+ private String departmentHeadUser;
+
+ @ApiModelProperty("閮ㄩ棬璐熻矗浜哄~鍐欐椂闂�")
+ private LocalDate departmentHeadDate;
+
+ @ApiModelProperty("鎶�鏈礋璐d汉鎰忚")
+ private String technicalDirectorOpinion;
+
+ @ApiModelProperty("鎶�鏈礋璐d汉id")
+ private Integer technicalDirectorUserId;
+
+ @ApiModelProperty("鎶�鏈礋璐d汉")
+ private String technicalDirectorUser;
+
+ @ApiModelProperty("鎶�鏈礋璐d汉濉啓鏃堕棿")
+ private LocalDate technicalDirectorDate;
+
+ @ApiModelProperty("涓讳换鎰忚")
+ private String directorHeadOpinion;
+
+ @ApiModelProperty("涓讳换id")
+ private Integer directorHeadUserId;
+
+ @ApiModelProperty("涓讳换")
+ private String directorHeadUser;
+
+ @ApiModelProperty("涓讳换濉啓鏃堕棿")
+ private LocalDate directorHeadDate;
+
+ @ApiModelProperty("鏄惁缁撴潫,0 鏈粨鏉�, 1缁撴潫")
+ private Integer isFinish;
+
+ @ApiModelProperty("鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @ApiModelProperty("鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("淇敼浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @ApiModelProperty("淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @TableField(exist = false,select = false)
+ @ApiModelProperty("娴佺▼, 0:鎶ュ憡, 1璇勪及, 2:閮ㄩ棬璐熻矗浜烘剰瑙�, 3:鎶�鏈礋璐d汉鎰忚, 4:涓讳换鎰忚")
+ private Integer flowType;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceInspectionRecord.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceInspectionRecord.java
new file mode 100644
index 0000000..e605cb3
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceInspectionRecord.java
@@ -0,0 +1,93 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧鐐规璁板綍
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 04:25:14
+ */
+@Getter
+@Setter
+@TableName("device_inspection_record")
+@ApiModel(value = "DeviceInspectionRecord瀵硅薄", description = "")
+public class DeviceInspectionRecord implements Serializable {
+
+ @ApiModelProperty("璁惧鐐规璁板綍id")
+ @TableId(value = "inspection_record_id", type = IdType.AUTO)
+ private Integer inspectionRecordId;
+
+ @ApiModelProperty("璁惧id")
+ private Integer deviceId;
+
+ @ApiModelProperty("娴嬮噺鑼冨洿")
+ private String measurementScope;
+
+ @ApiModelProperty("鐐规浣跨敤鐗╄川鍚嶇О")
+ private String materialName;
+
+ @ApiModelProperty("鐐规浣跨敤鐗╄川瑙勬牸鍨嬪彿")
+ private String materialModel;
+
+ @ApiModelProperty("鐐规浣跨敤鐗╄川绠$悊缂栧彿")
+ private String materialManagementNumber;
+
+ @ApiModelProperty("鐐规浣跨敤鐗╄川绮惧害绛夌骇")
+ private String materialAccuracyGrade;
+
+ @ApiModelProperty("娓╁害")
+ private String temperature;
+
+ @ApiModelProperty("婀垮害")
+ private String humidity;
+
+ @ApiModelProperty("娴嬭瘯缁撹")
+ private String testConclusion;
+
+ @ApiModelProperty("澶囨敞")
+ private String remark;
+
+ @ApiModelProperty("鐘舵�侊紙鏄惁澶嶆牳锛�0鏈鏍革紝1澶嶆牳")
+ private Integer status;
+
+ @ApiModelProperty("娴嬭瘯浜�")
+ private String recorder;
+
+ @ApiModelProperty("娴嬭瘯浜篿d")
+ private Integer recorderId;
+
+ @ApiModelProperty("澶嶆牳浜�")
+ private String reviewer;
+
+ @ApiModelProperty("澶嶆牳浜篿d")
+ private Integer reviewerId;
+
+ @ApiModelProperty("澶嶆牳淇℃伅")
+ private String reviewerRemark;
+
+ @ApiModelProperty("娴嬭瘯鏃ユ湡")
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ private LocalDateTime testDate;
+
+ @ApiModelProperty("鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty("淇敼浜篿d")
+ private Integer updateUserId;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceInspectionRecordDetails.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceInspectionRecordDetails.java
new file mode 100644
index 0000000..feaed31
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceInspectionRecordDetails.java
@@ -0,0 +1,63 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 04:27:32
+ */
+@Getter
+@Setter
+@TableName("device_inspection_record_details")
+@ApiModel(value = "DeviceInspectionRecordDetails瀵硅薄", description = "")
+public class DeviceInspectionRecordDetails implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("鐐规璇︽儏id")
+ @TableId(value = "inspection_record_detail_id", type = IdType.AUTO)
+ private Integer inspectionRecordDetailId;
+
+ @ApiModelProperty("鐐规id")
+ private Integer inspectionRecordId;
+
+ @ApiModelProperty("娴嬭瘯椤圭洰")
+ private String testItems;
+
+ @ApiModelProperty("鏍囧噯鍊�")
+ private String standardValue;
+
+ @ApiModelProperty("瀹炴祴鍊�")
+ private String measuredValue;
+
+ @ApiModelProperty("绀哄�艰宸�")
+ private String indicationError;
+
+ @ApiModelProperty("鍏佽璇樊")
+ private String allowableError;
+
+ @ApiModelProperty("鍗曢」缁撹")
+ private String singleItemConclusion;
+
+ @ApiModelProperty("鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("淇敼鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty("淇敼浜篿d")
+ private Integer updateUserId;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceInstruction.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceInstruction.java
new file mode 100644
index 0000000..5a4f845
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceInstruction.java
@@ -0,0 +1,64 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 浣滀笟鎸囧涔︽坊鍔犲彈鎺ф枃浠惰〃
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-12-04 10:29:18
+ */
+@Getter
+@Setter
+@TableName("device_instruction")
+@ApiModel(value = "Instruction瀵硅薄", description = "浣滀笟鎸囧涔︽坊鍔犲彈鎺ф枃浠惰〃")
+public class DeviceInstruction implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty("鐢宠缂栧彿")
+ private String applicationNumber;
+
+ @ApiModelProperty("鐢宠閮ㄩ棬")
+ private String applicationDepartment;
+
+ @ApiModelProperty("璐d换浜�")
+ private String personLiable;
+
+ @ApiModelProperty("鍙楁帶鐢宠璇存槑")
+ private String controlledApplicationDescription;
+
+ @ApiModelProperty("绯荤粺鐢熸垚鍚嶇О")
+ private String fileName;
+
+ @ApiModelProperty("绯荤粺鐢熸垚鍚嶇О")
+ private String fileSystemName;
+
+ @ApiModelProperty("鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty("鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @ApiModelProperty("鏇存柊浜�")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/OperationInstruction.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/OperationInstruction.java
new file mode 100644
index 0000000..7666be1
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/pojo/OperationInstruction.java
@@ -0,0 +1,88 @@
+package com.ruoyi.device.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 璁惧 - 浣滀笟鎸囧涔� 娣诲姞鍙楁帶鏂囦欢 瀛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-12-04 10:43:32
+ */
+@Getter
+@Setter
+@TableName("device_operation_instruction")
+public class OperationInstruction {
+
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty("璁惧涓婚敭id")
+ private String deviceId;
+
+ @ApiModelProperty("鏂囦欢绫诲瀷")
+ private String documentType;
+
+ @ApiModelProperty("鏂囨。缂栧彿")
+ private String documentNumber;
+
+ @ApiModelProperty("鏂囦欢鐗堟湰")
+ private String documentVersion;
+
+ @ApiModelProperty("浣滆��")
+ private String author;
+
+ @ApiModelProperty("鎻愪氦鏃ユ湡")
+ private LocalDate submitDate;
+
+ @ApiModelProperty("鏂囨。璇存槑")
+ private String documentNote;
+
+ @ApiModelProperty("绯荤粺鐢熸垚鍚嶇О")
+ private String fileName;
+
+ @ApiModelProperty("绯荤粺鐢熸垚鍚嶇О")
+ private String fileSystemName;
+
+ @ApiModelProperty("浣滀笟鎸囧涔d")
+ private Integer instructionId;
+
+ @ApiModelProperty("涓婁紶浜篿d")
+ private Integer uploader;
+
+ @ApiModelProperty("瀹℃壒浜篿d")
+ private Integer approverId;
+
+ @ApiModelProperty("瀹℃壒鐘舵��")
+ private Boolean status;
+
+ @ApiModelProperty("鐢熸晥鏃堕棿")
+ private LocalDateTime entryIntoForceTime;
+
+ @ApiModelProperty("涓婁紶鏃堕棿")
+ private LocalDateTime uploadTime;
+
+ @ApiModelProperty("鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty("鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("鏇存柊浜篿d")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @ApiModelProperty("鍒涘缓浜篿d")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/CollectBridgeService.java b/cnas-device/src/main/java/com/ruoyi/device/service/CollectBridgeService.java
new file mode 100644
index 0000000..3a6ce16
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/CollectBridgeService.java
@@ -0,0 +1,21 @@
+package com.ruoyi.device.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.pojo.CollectBridge;
+
+/**
+ * 鏁板瓧鐢垫ˉ閲囬泦
+ *
+ * @author zhuo
+ * @since 2025-02-19
+ */
+public interface CollectBridgeService extends IService<CollectBridge> {
+
+ /**
+ * 濉厖閲囬泦鏁版嵁
+ * @param jsonObject
+ */
+ void addBridgeValue(JSONObject jsonObject);
+}
+
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceAccidentReportService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceAccidentReportService.java
new file mode 100644
index 0000000..0b2ff31
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceAccidentReportService.java
@@ -0,0 +1,41 @@
+package com.ruoyi.device.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.pojo.DeviceAccidentReport;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璁惧浜嬫晠鎶ュ憡鍗� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 06:31:12
+ */
+public interface DeviceAccidentReportService extends IService<DeviceAccidentReport> {
+
+ /**
+ * 璁惧浜嬫晠鎶ュ憡鍒楄〃
+ * @param page
+ * @param deviceAccidentReport
+ * @return
+ */
+ IPage<DeviceAccidentReport> pageDeviceAccidentReport(Page page, DeviceAccidentReport deviceAccidentReport);
+
+ /**
+ * 鏂板璁惧浜嬫晠鎶ュ憡
+ * @param deviceAccidentReport
+ * @return
+ */
+ boolean addDeviceAccidentReport(DeviceAccidentReport deviceAccidentReport);
+
+ /**
+ * 瀵煎嚭璁惧浜嬫晠鎶ュ憡
+ * @param accidentReportId 璁惧浜嬫晠鎶ュ憡id
+ * @param response 鍝嶅簲
+ */
+ void exportDeviceAccidentReport(Integer accidentReportId, HttpServletResponse response);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceBreakdownMaintenanceService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceBreakdownMaintenanceService.java
new file mode 100644
index 0000000..e244044
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceBreakdownMaintenanceService.java
@@ -0,0 +1,41 @@
+package com.ruoyi.device.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.dto.DeviceBreakdownMaintenance;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璁惧鏁呴殰缁翠慨琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 04:50:57
+ */
+public interface DeviceBreakdownMaintenanceService extends IService<DeviceBreakdownMaintenance> {
+
+ /**
+ * 璁惧鏁呴殰缁翠慨鍒楄〃
+ * @param page
+ * @param deviceBreakdownMaintenance
+ * @return
+ */
+ IPage<DeviceBreakdownMaintenance> pageDeviceBreakdownMaintenance(Page page, DeviceBreakdownMaintenance deviceBreakdownMaintenance);
+
+ /**
+ * 鏂板璁惧鏁呴殰缁翠慨
+ * @param deviceBreakdownMaintenance
+ * @return
+ */
+ boolean addDeviceBreakdownMaintenance(DeviceBreakdownMaintenance deviceBreakdownMaintenance);
+
+ /**
+ * 瀵煎嚭璁惧鏁呴殰缁翠慨
+ * @param maintenanceId 璁惧鏁呴殰缁翠慨id
+ * @param response 鍝嶅簲
+ */
+ void exportDeviceBreakdownMaintenance(Integer maintenanceId, HttpServletResponse response);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceInspectionRecordDetailsService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceInspectionRecordDetailsService.java
new file mode 100644
index 0000000..4fd6270
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceInspectionRecordDetailsService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.device.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.pojo.DeviceInspectionRecordDetails;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 04:27:32
+ */
+public interface DeviceInspectionRecordDetailsService extends IService<DeviceInspectionRecordDetails> {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceInspectionRecordService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceInspectionRecordService.java
new file mode 100644
index 0000000..7278b3c
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceInspectionRecordService.java
@@ -0,0 +1,69 @@
+package com.ruoyi.device.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.device.dto.DeviceInspectionRecordDto;
+import com.ruoyi.device.pojo.DeviceInspectionRecord;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 璁惧鐐规璁板綍琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 04:25:14
+ */
+public interface DeviceInspectionRecordService extends IService<DeviceInspectionRecord> {
+
+ /**
+ * 鍒嗛〉鏌ヨ璁惧鐐规璁板綍
+ * @param page
+ */
+ Result<IPage<DeviceInspectionRecord>> getDeviceInspectionRecordByPage(IPage page, DeviceInspectionRecordDto deviceInspectionRecord);
+
+
+ /**
+ * 鏌ヨ鐐规璇︽儏
+ * @param inspectionRecordId
+ * @return
+ */
+ Result getDeviceInspectionRecord(Integer inspectionRecordId);
+
+ /**
+ * 鏂板璁惧鐐规璁板綍
+ *
+ * @param deviceInspectionRecord 璁惧鐐规璁板綍
+ */
+ Result addDeviceInspectionRecord(DeviceInspectionRecordDto deviceInspectionRecord);
+
+ /**
+ * 淇敼璁惧鐐规璁板綍
+ * @param deviceInspectionRecord 璁惧鐐规璁板綍
+ */
+ Result updateInspectionRecordAndDetails(DeviceInspectionRecordDto deviceInspectionRecord);
+
+ /**
+ * 鍒犻櫎璁惧鐐规璁板綍
+ * @param deviceInspectionRecord 璁惧鐐规璁板綍
+ */
+ Result deleteDeviceInspectionRecordOrDetails(DeviceInspectionRecordDto deviceInspectionRecord);
+
+ /**
+ * 澶嶆牳鐐规璁板綍
+ * @param deviceExamineRecordDto
+ * @return
+ */
+ Result reviewDeviceInspectionRecord(DeviceInspectionRecordDto deviceExamineRecordDto);
+
+ /**
+ * 瀵煎嚭璁惧鐐规璁板綍
+ *
+ * @param deviceInspectionRecordId 璁惧鐐规璁板綍id
+ * @param response
+ */
+ Result exportDeviceInspectionRecord(Integer deviceInspectionRecordId, HttpServletResponse response);
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceInstructionService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceInstructionService.java
new file mode 100644
index 0000000..70e5f1c
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceInstructionService.java
@@ -0,0 +1,23 @@
+package com.ruoyi.device.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.dto.DeviceInstructionDto;
+import com.ruoyi.device.dto.DeviceOperationInstructionDto;
+import com.ruoyi.device.pojo.DeviceInstruction;
+
+/**
+ * <p>
+ * 浣滀笟鎸囧涔︽坊鍔犲彈鎺ф枃浠惰〃 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-12-04 10:29:18
+ */
+public interface DeviceInstructionService extends IService<DeviceInstruction> {
+
+ IPage<DeviceInstruction> pageByPageQueryOfHomeworkInstructions(Page page, DeviceOperationInstructionDto operationInstructionDto);
+
+ void newHomeworkGuidebookAdded(DeviceInstructionDto instructionDto);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceOperationInstructionService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceOperationInstructionService.java
new file mode 100644
index 0000000..afc8bdd
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceOperationInstructionService.java
@@ -0,0 +1,20 @@
+package com.ruoyi.device.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.device.dto.DeviceOperationInstructionDto;
+import com.ruoyi.device.pojo.OperationInstruction;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 璁惧 - 浣滀笟鎸囧涔� 娣诲姞鍙楁帶鏂囦欢 瀛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-12-04 10:43:32
+ */
+public interface DeviceOperationInstructionService extends IService<OperationInstruction> {
+
+ List<DeviceOperationInstructionDto> homeworkGuidebookEditor(Integer instructionId);
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java
new file mode 100644
index 0000000..a1acb6e
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/CollectBridgeServiceImpl.java
@@ -0,0 +1,107 @@
+package com.ruoyi.device.service.impl;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.device.mapper.CollectBridgeMapper;
+import com.ruoyi.device.pojo.CollectBridge;
+import com.ruoyi.device.service.CollectBridgeService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.time.Duration;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+
+/**
+ * 鏁板瓧鐢垫ˉ閲囬泦
+ *
+ * @author zhuo
+ * @since 2025-02-19
+ */
+@Service
+@Slf4j
+public class CollectBridgeServiceImpl extends ServiceImpl<CollectBridgeMapper, CollectBridge> implements CollectBridgeService {
+
+ /**
+ * 濉厖閲囬泦鏁版嵁
+ * @param jsonObject
+ */
+ @Override
+ public void addBridgeValue(JSONObject jsonObject) {
+ JSONArray dataArray = jsonObject.getJSONArray("data");
+ for (int i = 0; i < dataArray.size(); i++) {
+ JSONObject listInfo = dataArray.getJSONObject(i);
+ // 瀛樺偍鏁版嵁
+ String dataStream = listInfo.getString("dataStream");
+ if (dataStream.equals("DQCS.DQCS.SN")) {
+ JSONArray dataPoints = listInfo.getJSONArray("dataPoints");
+ JSONObject pointsJSONObject = dataPoints.getJSONObject(0);
+ String entrustCode = pointsJSONObject.getString("value");
+ // 瑙f瀽鏃堕棿鎴�
+ Instant instant = Instant.ofEpochMilli(pointsJSONObject.getLong("time"));
+ LocalDateTime collectDate = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
+
+ // 鍏堝瓨鍌ㄧ紪鍙�, 鍚庣画瀛樺偍鍊�
+ CollectBridge collectBridge = new CollectBridge();
+ collectBridge.setEntrustCode(entrustCode);
+ collectBridge.setCollectDate(collectDate);
+ baseMapper.insert(collectBridge);
+
+ }
+ // 瀵勫瓨鍣ㄥ湴鍧�绛変簬64鑾峰彇缁撴灉鍊�
+ if (dataStream.equals("DQCS.DQCS.64")) {
+ JSONArray dataPoints = listInfo.getJSONArray("dataPoints");
+ JSONObject pointsJSONObject = dataPoints.getJSONObject(0);
+ String value = pointsJSONObject.getString("value");
+
+ if (value.equals("64")) {
+ for (int j = 0; j < dataArray.size(); j++) {
+ JSONObject listInfo2 = dataArray.getJSONObject(j);
+ String dataStream2 = listInfo2.getString("dataStream");
+ // 瀵勫瓨鍣ㄥ湴鍧�绛変簬64鑾峰彇缁撴灉鍊�
+ if (dataStream2.equals("DQCS.DQCS.DZZ")) {
+ JSONArray dataPoints2 = listInfo2.getJSONArray("dataPoints");
+ JSONObject pointsJSONObject2 = dataPoints2.getJSONObject(0);
+ String collectValue = pointsJSONObject2.getString("value");
+
+ // 瑙f瀽鏃堕棿鎴�
+ Instant instant = Instant.ofEpochMilli(pointsJSONObject2.getLong("time"));
+ LocalDateTime collectDate = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
+
+ // 鏌ヨ鏈�鏂颁竴鏉℃暟鎹�
+ CollectBridge collectBridge = baseMapper.selectOne(Wrappers.<CollectBridge>lambdaQuery()
+ .orderByDesc(CollectBridge::getCollectDate)
+ .last("limit 1"));
+
+ // 鍒ゆ柇涓ゆ潯鏁版嵁鏄惁鐩稿樊鍦�10鍒嗛挓涔嬪唴鍜屾湁娌℃湁缂栧彿
+ if (isWithinTenMinutes(collectDate, collectBridge.getCollectDate()) &&
+ StringUtils.isNotBlank(collectBridge.getEntrustCode())) {
+ // 淇敼妫�楠屽��
+ collectBridge.setCollectValue(collectValue);
+ baseMapper.updateById(collectBridge);
+ } else {
+ // 鍙瓨鍌ㄥ��
+ CollectBridge bridge = new CollectBridge();
+ bridge.setCollectValue(collectValue);
+ bridge.setCollectDate(collectDate);
+ baseMapper.insert(bridge);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ public static boolean isWithinTenMinutes(LocalDateTime dateTime1, LocalDateTime dateTime2) {
+ Duration duration = Duration.between(dateTime1, dateTime2);
+ long minutesDifference = Math.abs(duration.toMinutes());
+ return minutesDifference <= 10;
+ }
+
+}
+
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAccidentReportServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAccidentReportServiceImpl.java
new file mode 100644
index 0000000..60d610e
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAccidentReportServiceImpl.java
@@ -0,0 +1,189 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.device.dto.DeviceAccidentReportDto;
+import com.ruoyi.device.mapper.DeviceAccidentReportMapper;
+import com.ruoyi.device.mapper.DeviceMapper;
+import com.ruoyi.device.pojo.Device;
+import com.ruoyi.device.pojo.DeviceAccidentReport;
+import com.ruoyi.device.service.DeviceAccidentReportService;
+import com.ruoyi.inspect.util.UserUtils;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDate;
+import java.util.HashMap;
+
+/**
+ * <p>
+ * 璁惧浜嬫晠鎶ュ憡鍗� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 06:31:12
+ */
+@Service
+public class DeviceAccidentReportServiceImpl extends ServiceImpl<DeviceAccidentReportMapper, DeviceAccidentReport> implements DeviceAccidentReportService {
+
+ @Resource
+ private UserMapper userMapper;
+
+
+ @Resource
+ private DeviceMapper deivceMapper;
+
+ /**
+ * 璁惧浜嬫晠鎶ュ憡鍒楄〃
+ * @param page
+ * @param deviceAccidentReport
+ * @return
+ */
+ @Override
+ public IPage<DeviceAccidentReport> pageDeviceAccidentReport(Page page, DeviceAccidentReport deviceAccidentReport) {
+ return baseMapper.pageDeviceAccidentReport(page, QueryWrappers.queryWrappers(deviceAccidentReport));
+ }
+
+ /**
+ * 鏂板璁惧浜嬫晠鎶ュ憡
+ * @param deviceAccidentReport
+ * @return
+ */
+ @Override
+ public boolean addDeviceAccidentReport(DeviceAccidentReport deviceAccidentReport) {
+ DeviceAccidentReport accidentReport = new DeviceAccidentReport();
+ User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
+ switch (deviceAccidentReport.getFlowType()) {
+ case 0:
+ // 鎶ュ憡
+ BeanUtils.copyProperties(deviceAccidentReport, accidentReport);
+ accidentReport.setDescriptionOfAccident(deviceAccidentReport.getDescriptionOfAccident());
+ accidentReport.setReportUserId(user.getId());
+ accidentReport.setReportUser(user.getName());
+ accidentReport.setReportDate(LocalDate.now());
+
+ // 璇勪及浜轰俊鎭�
+ User assessorUser = userMapper.selectById(deviceAccidentReport.getAssessorUserId());
+ accidentReport.setAssessorUserId(assessorUser.getId());
+ accidentReport.setAssessorUser(assessorUser.getName());
+
+ baseMapper.insert(accidentReport);
+ break;
+ case 1:
+ accidentReport.setAccidentReportId(deviceAccidentReport.getAccidentReportId());
+ // 璇勪及
+ accidentReport.setAssessorOpinion(deviceAccidentReport.getAssessorOpinion());
+ accidentReport.setAssessorDate(LocalDate.now());
+
+ // 閮ㄩ棬璐熻矗浜�
+ User departmentHeadUser = userMapper.selectById(deviceAccidentReport.getDepartmentHeadUserId());
+ accidentReport.setDepartmentHeadUserId(departmentHeadUser.getId());
+ accidentReport.setDepartmentHeadUser(departmentHeadUser.getName());
+
+ baseMapper.updateById(accidentReport);
+
+ break;
+ case 2:
+ accidentReport.setAccidentReportId(deviceAccidentReport.getAccidentReportId());
+ // 閮ㄩ棬璐熻矗浜烘剰瑙�
+ accidentReport.setDepartmentHeadOpinion(deviceAccidentReport.getDepartmentHeadOpinion());
+ accidentReport.setDepartmentHeadDate(LocalDate.now());
+
+ // 鎶�鏈礋璐d汉淇℃伅
+ User technicalDirectorUser = userMapper.selectById(deviceAccidentReport.getTechnicalDirectorUserId());
+ accidentReport.setTechnicalDirectorUserId(technicalDirectorUser.getId());
+ accidentReport.setTechnicalDirectorUser(technicalDirectorUser.getName());
+
+ baseMapper.updateById(accidentReport);
+
+ break;
+ case 3:
+ accidentReport.setAccidentReportId(deviceAccidentReport.getAccidentReportId());
+ // 鎶�鏈礋璐d汉鎰忚
+ accidentReport.setTechnicalDirectorOpinion(deviceAccidentReport.getTechnicalDirectorOpinion());
+ accidentReport.setTechnicalDirectorDate(LocalDate.now());
+
+ // 涓讳换淇℃伅
+ User directorHeadUser = userMapper.selectById(deviceAccidentReport.getDirectorHeadUserId());
+ accidentReport.setDirectorHeadUserId(directorHeadUser.getId());
+ accidentReport.setDirectorHeadUser(directorHeadUser.getName());
+
+ baseMapper.updateById(accidentReport);
+
+ break;
+ case 4:
+ accidentReport.setAccidentReportId(deviceAccidentReport.getAccidentReportId());
+ // 涓讳换鎰忚
+ accidentReport.setDirectorHeadOpinion(deviceAccidentReport.getDirectorHeadOpinion());
+ accidentReport.setDirectorHeadDate(LocalDate.now());
+
+ accidentReport.setIsFinish(1);
+ baseMapper.updateById(accidentReport);
+ break;
+ }
+ return true;
+ }
+
+ /**
+ * 瀵煎嚭璁惧浜嬫晠鎶ュ憡
+ * @param accidentReportId 璁惧浜嬫晠鎶ュ憡id
+ * @param response 鍝嶅簲
+ */
+ @Override
+ public void exportDeviceAccidentReport(Integer accidentReportId, HttpServletResponse response) {
+ // 鏌ヨ浜嬫晠鎶ュ憡
+ DeviceAccidentReportDto deviceAccidentReport = baseMapper.selectDeviceAccidentReportById(accidentReportId);
+
+ Device device = deivceMapper.selectById(deviceAccidentReport.getDeviceId());
+ device = device == null ? new Device() : device;
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/word/device-accident-report.docx");
+ Configure configure = Configure.builder()
+ .build();
+ Device finalDevice = device;
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("deviceAccidentReport", deviceAccidentReport);
+ put("device", finalDevice);
+ // 鎶ュ憡浜虹鍚�
+ put("reportUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getReportUserId()));
+ // 璇勪及浜虹鍚�
+ put("assessorUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getAssessorUserId()));
+ // 閮ㄩ棬璐熻矗浜虹鍚�
+ put("departmentHeadUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getDepartmentHeadUserId()));
+ // 鎶�鏈礋璐d汉绛惧悕
+ put("technicalDirectorUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getTechnicalDirectorUserId()));
+ // 涓讳换绛惧悕
+ put("directorHeadUserUrl", UserUtils.getFinalUserSignatureUrl(deviceAccidentReport.getDepartmentHeadUserId()));
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String deviceName = device.getDeviceName() == null ? "" : device.getDeviceName();
+ String fileName = URLEncoder.encode(
+ deviceName + "璁惧浜嬫晠鎶ュ憡鍗�", "UTF-8");
+ response.setHeader("Content-disposition",
+ "attachment;filename=" + fileName + ".docx");
+ OutputStream os = response.getOutputStream();
+ template.write(os);
+ os.flush();
+ os.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceBreakdownMaintenanceServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceBreakdownMaintenanceServiceImpl.java
new file mode 100644
index 0000000..8fb4089
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceBreakdownMaintenanceServiceImpl.java
@@ -0,0 +1,152 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.device.dto.DeviceBreakdownMaintenance;
+import com.ruoyi.device.mapper.DeviceBreakdownMaintenanceMapper;
+import com.ruoyi.device.mapper.DeviceMapper;
+import com.ruoyi.device.pojo.Device;
+import com.ruoyi.device.service.DeviceBreakdownMaintenanceService;
+import com.ruoyi.inspect.util.UserUtils;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDate;
+import java.util.HashMap;
+
+/**
+ * <p>
+ * 璁惧鏁呴殰缁翠慨琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-17 04:50:57
+ */
+@Service
+public class DeviceBreakdownMaintenanceServiceImpl extends ServiceImpl<DeviceBreakdownMaintenanceMapper, DeviceBreakdownMaintenance> implements DeviceBreakdownMaintenanceService {
+
+ @Resource
+ private UserMapper userMapper;
+ @Resource
+ private DeviceMapper deivceMapper;
+
+ /**
+ * 璁惧鏁呴殰缁翠慨鍒楄〃
+ * @param page
+ * @param deviceBreakdownMaintenance
+ * @return
+ */
+ @Override
+ public IPage<DeviceBreakdownMaintenance> pageDeviceBreakdownMaintenance(Page page, DeviceBreakdownMaintenance deviceBreakdownMaintenance) {
+ return baseMapper.pageDeviceBreakdownMaintenance(page, QueryWrappers.queryWrappers(deviceBreakdownMaintenance));
+ }
+
+ /**
+ * 鏂板璁惧鏁呴殰缁翠慨
+ * @param deviceBreakdownMaintenance
+ * @return
+ */
+ @Override
+ public boolean addDeviceBreakdownMaintenance(DeviceBreakdownMaintenance deviceBreakdownMaintenance) {
+ DeviceBreakdownMaintenance breakdownMaintenance = new DeviceBreakdownMaintenance();
+ //褰撳墠鐧诲綍鐢ㄦ埛
+ User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
+
+ switch (deviceBreakdownMaintenance.getFlowType()) {
+ case 0:
+ BeanUtils.copyProperties(deviceBreakdownMaintenance, breakdownMaintenance);
+ // 鐢宠
+ breakdownMaintenance.setDamageOrMalfunction(deviceBreakdownMaintenance.getDamageOrMalfunction());
+ breakdownMaintenance.setApplicantUserId(user.getId());
+ breakdownMaintenance.setApplicantUser(user.getName());
+ breakdownMaintenance.setRepairDate(deviceBreakdownMaintenance.getRepairDate());
+
+ // 澶勭悊浜轰俊鎭�
+ User departmentHeadUser = userMapper.selectById(deviceBreakdownMaintenance.getDepartmentHeadUserId());
+ breakdownMaintenance.setApplicantUserId(departmentHeadUser.getId());
+ breakdownMaintenance.setApplicantUser(departmentHeadUser.getName());
+
+ baseMapper.insert(breakdownMaintenance);
+ break;
+ case 1:
+ breakdownMaintenance.setMaintenanceId(deviceBreakdownMaintenance.getMaintenanceId());
+ // 鐢宠閮ㄩ棬璐熻矗浜烘剰瑙�
+ breakdownMaintenance.setDepartmentHeadOpinion(deviceBreakdownMaintenance.getDepartmentHeadOpinion());
+ breakdownMaintenance.setDepartmentHeadDate(LocalDate.now());
+
+ baseMapper.updateById(breakdownMaintenance);
+ break;
+ case 2:
+ breakdownMaintenance.setMaintenanceId(deviceBreakdownMaintenance.getMaintenanceId());
+ // 璁¢噺瀹ゆ剰瑙�
+ breakdownMaintenance.setMaintenanceRecord(deviceBreakdownMaintenance.getMaintenanceRecord());
+ breakdownMaintenance.setMaintenanceUser(deviceBreakdownMaintenance.getMaintenanceUser());
+ breakdownMaintenance.setMaintenanceDate(deviceBreakdownMaintenance.getMaintenanceDate());
+
+ breakdownMaintenance.setIsFinish(1);
+
+ baseMapper.updateById(breakdownMaintenance);
+ break;
+ }
+ return true;
+ }
+
+ /**
+ * 瀵煎嚭璁惧鏁呴殰缁翠慨
+ * @param maintenanceId 璁惧鏁呴殰缁翠慨id
+ * @param response 鍝嶅簲
+ */
+ @Override
+ public void exportDeviceBreakdownMaintenance(Integer maintenanceId, HttpServletResponse response) {
+ // 鏌ヨ澶栭儴璁惧鐢宠
+ DeviceBreakdownMaintenance deviceBreakdownMaintenance = baseMapper.selectById(maintenanceId);
+
+ Device device = null;
+ if (deviceBreakdownMaintenance.getDeviceId() != null) {
+ device = deivceMapper.selectById(deviceBreakdownMaintenance.getDeviceId());
+ device = device == null ? new Device() : device;
+ }
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/word/device-breakdown-maintenance.docx");
+ Configure configure = Configure.builder()
+ .build();
+ Device finalDevice = device;
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("deviceBreakdownMaintenance", deviceBreakdownMaintenance);
+ put("device", finalDevice);
+ // 鐢宠浜虹鍚�
+ put("applicantUrl", UserUtils.getFinalUserSignatureUrl(deviceBreakdownMaintenance.getApplicantUserId()));
+ // 閮ㄩ棬璐熻矗浜虹鍚�
+ put("headUrl", UserUtils.getFinalUserSignatureUrl(deviceBreakdownMaintenance.getDepartmentHeadUserId()));
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String deviceName = device.getDeviceName() == null ? "" : device.getDeviceName();
+ String fileName = URLEncoder.encode(
+ deviceName + "璁惧鏁呴殰缁翠慨鐢宠琛�", "UTF-8");
+ response.setHeader("Content-disposition",
+ "attachment;filename=" + fileName + ".docx");
+ OutputStream os = response.getOutputStream();
+ template.write(os);
+ os.flush();
+ os.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInspectionRecordDetailsServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInspectionRecordDetailsServiceImpl.java
new file mode 100644
index 0000000..9058081
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInspectionRecordDetailsServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.device.mapper.DeviceInspectionRecordDetailsMapper;
+import com.ruoyi.device.pojo.DeviceInspectionRecordDetails;
+import com.ruoyi.device.service.DeviceInspectionRecordDetailsService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 04:27:32
+ */
+@Service
+public class DeviceInspectionRecordDetailsServiceImpl extends ServiceImpl<DeviceInspectionRecordDetailsMapper, DeviceInspectionRecordDetails> implements DeviceInspectionRecordDetailsService {
+
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInspectionRecordServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInspectionRecordServiceImpl.java
new file mode 100644
index 0000000..2c8041d
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInspectionRecordServiceImpl.java
@@ -0,0 +1,221 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.device.dto.DeviceInspectionRecordDto;
+import com.ruoyi.device.mapper.DeviceInspectionRecordMapper;
+import com.ruoyi.device.mapper.DeviceMapper;
+import com.ruoyi.device.pojo.Device;
+import com.ruoyi.device.pojo.DeviceInspectionRecord;
+import com.ruoyi.device.pojo.DeviceInspectionRecordDetails;
+import com.ruoyi.device.service.DeviceInspectionRecordDetailsService;
+import com.ruoyi.device.service.DeviceInspectionRecordService;
+import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
+import com.ruoyi.inspect.util.UserUtils;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * <p>
+ * 璁惧鐐规璁板綍琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-12-16 04:25:14
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class DeviceInspectionRecordServiceImpl extends ServiceImpl<DeviceInspectionRecordMapper, DeviceInspectionRecord> implements DeviceInspectionRecordService {
+ @Resource
+ private UserMapper userMapper;
+ @Resource
+ private DeviceMapper deviceMapper;
+ @Resource
+ private DeviceInspectionRecordDetailsService deviceInspectionRecordDetailsService;
+
+ /**
+ * 鍒嗛〉鏌ヨ璁惧鐐规璁板綍
+ *
+ * @param page 褰撳墠椤电爜
+ */
+ @Override
+ public Result<IPage<DeviceInspectionRecord>> getDeviceInspectionRecordByPage(IPage page, DeviceInspectionRecordDto deviceInspectionRecordDto) {
+ IPage<DeviceInspectionRecord> iPage = baseMapper.selectDeviceParameterPage(page, QueryWrappers.queryWrappers(deviceInspectionRecordDto));
+ return Result.success(iPage);
+ }
+
+
+ /**
+ * 鏌ヨ鐐规璇︽儏
+ * @param inspectionRecordId
+ * @return
+ */
+ @Override
+ public Result getDeviceInspectionRecord(Integer inspectionRecordId) {
+ DeviceInspectionRecord deviceInspectionRecord = baseMapper.selectById(inspectionRecordId);
+ DeviceInspectionRecordDto dto = new DeviceInspectionRecordDto();
+ BeanUtils.copyProperties(deviceInspectionRecord, dto);
+ List<DeviceInspectionRecordDetails> list = deviceInspectionRecordDetailsService.list(Wrappers.<DeviceInspectionRecordDetails>lambdaQuery().eq(DeviceInspectionRecordDetails::getInspectionRecordId, inspectionRecordId));
+ dto.setDetails(list);
+ return Result.success(dto);
+ }
+
+ /**
+ * 鏂板璁惧鐐规璁板綍
+ *
+ * @param deviceInspectionRecord 璁惧鐐规璁板綍
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Result addDeviceInspectionRecord(DeviceInspectionRecordDto deviceInspectionRecord) {
+
+ Integer userId = SecurityUtils.getUserId().intValue();
+ User user = userMapper.selectById(userId);
+ deviceInspectionRecord.setRecorderId(userId);
+ deviceInspectionRecord.setRecorder(user.getName());
+
+ // 鏌ヨ澶嶆牳浜篿d
+ if (deviceInspectionRecord.getReviewerId() != null) {
+ User reviewUser = userMapper.selectById(deviceInspectionRecord.getReviewerId());
+ deviceInspectionRecord.setReviewer(reviewUser.getName());
+ }
+ this.saveOrUpdate(deviceInspectionRecord);
+ if (CollectionUtils.isNotEmpty(deviceInspectionRecord.getDetails())) {
+ for (DeviceInspectionRecordDetails detail : deviceInspectionRecord.getDetails()) {
+ detail.setInspectionRecordId(deviceInspectionRecord.getInspectionRecordId());
+ }
+ deviceInspectionRecordDetailsService.saveBatch( deviceInspectionRecord.getDetails());
+ }
+
+ return Result.success();
+ }
+
+
+ /**
+ * 淇敼璁惧鐐规璁板綍
+ *
+ * @param deviceInspectionRecord 璁惧鐐规璁板綍
+ */
+ @Override
+ public Result updateInspectionRecordAndDetails(DeviceInspectionRecordDto deviceInspectionRecord) {
+ // 鏌ヨ澶嶆牳浜篿d
+ if (deviceInspectionRecord.getReviewerId() != null) {
+ User reviewUser = userMapper.selectById(deviceInspectionRecord.getReviewerId());
+ deviceInspectionRecord.setReviewer(reviewUser.getName());
+ }
+ this.saveOrUpdate(deviceInspectionRecord);
+ deviceInspectionRecordDetailsService.remove(Wrappers.<DeviceInspectionRecordDetails>lambdaQuery().eq(DeviceInspectionRecordDetails::getInspectionRecordId, deviceInspectionRecord.getInspectionRecordId()));
+ if (CollectionUtils.isNotEmpty(deviceInspectionRecord.getDetails())) {
+ for (DeviceInspectionRecordDetails detail : deviceInspectionRecord.getDetails()) {
+ detail.setInspectionRecordId(deviceInspectionRecord.getInspectionRecordId());
+ }
+ deviceInspectionRecordDetailsService.saveBatch( deviceInspectionRecord.getDetails());
+ }
+ return Result.success();
+ }
+
+ /**
+ * 鍒犻櫎璁惧鐐规璁板綍
+ *
+ * @param deviceInspectionRecord 璁惧鐐规璁板綍
+ */
+ @Override
+ public Result deleteDeviceInspectionRecordOrDetails(DeviceInspectionRecordDto deviceInspectionRecord) {
+ this.removeById(deviceInspectionRecord);
+ deviceInspectionRecordDetailsService.remove(Wrappers.<DeviceInspectionRecordDetails>lambdaQuery().eq(DeviceInspectionRecordDetails::getInspectionRecordId, deviceInspectionRecord.getInspectionRecordId()));
+ return Result.success();
+ }
+
+ /**
+ * 澶嶆牳鐐规璁板綍
+ * @param dto
+ * @return
+ */
+ @Override
+ public Result reviewDeviceInspectionRecord(DeviceInspectionRecordDto dto) {
+ LambdaUpdateWrapper<DeviceInspectionRecord> wrapper = Wrappers.<DeviceInspectionRecord>lambdaUpdate()
+ .eq(DeviceInspectionRecord::getInspectionRecordId, dto.getInspectionRecordId())
+ .set(DeviceInspectionRecord::getStatus, dto.getStatus())
+ .set(DeviceInspectionRecord::getReviewerRemark, dto.getReviewerRemark());
+
+ // 涓�0娓呴櫎瀹℃牳浜�
+ if (dto.getStatus().equals(0)) {
+ wrapper.set(DeviceInspectionRecord::getReviewerId, null)
+ .set(DeviceInspectionRecord::getReviewer, null);
+ }
+ this.update(wrapper);
+
+ return Result.success();
+ }
+
+ /**
+ * 瀵煎嚭璁惧鐐规璁板綍
+ *
+ * @param deviceInspectionRecordId 璁惧鐐规璁板綍id
+ * @param response 鍝嶅簲
+ */
+ @Override
+ public Result exportDeviceInspectionRecord(Integer deviceInspectionRecordId, HttpServletResponse response) {
+ DeviceInspectionRecord deviceInspectionRecord = baseMapper.selectById(deviceInspectionRecordId);
+ DeviceInspectionRecordDto deviceInspectionRecordDto = new DeviceInspectionRecordDto();
+ BeanUtils.copyProperties(deviceInspectionRecord, deviceInspectionRecordDto);
+ DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ deviceInspectionRecordDto.setTestDateString(deviceInspectionRecord.getTestDate() == null ? null : deviceInspectionRecord.getTestDate().format(dateFormatter));
+
+ List<DeviceInspectionRecordDetails> deviceInspectionRecordDetailsList = deviceInspectionRecordDetailsService.list(Wrappers.<DeviceInspectionRecordDetails>lambdaQuery().eq(DeviceInspectionRecordDetails::getInspectionRecordId, deviceInspectionRecordId));
+
+ Integer deviceId = deviceInspectionRecord.getDeviceId();
+
+ Device device = deviceMapper.selectById(deviceId);
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/word/device-inspection-record.docx");
+ Configure configure = Configure.builder()
+ .bind("deviceInspectionRecordDetailsList", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("deviceInspectionRecord", deviceInspectionRecordDto);
+ put("deviceInspectionRecordDetailsList", deviceInspectionRecordDetailsList);
+ put("device", device);
+ put("recorderUrl", UserUtils.getFinalUserSignatureUrl(deviceInspectionRecordDto.getRecorderId()));
+ put("reviewerUrl", UserUtils.getFinalUserSignatureUrl(deviceInspectionRecordDto.getReviewerId()));
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ device.getDeviceName() + "鐐规璁板綍", "UTF-8");
+ response.setHeader("Content-disposition",
+ "attachment;filename=" + fileName + ".docx");
+ OutputStream os = response.getOutputStream();
+ template.write(os);
+ os.flush();
+ os.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ return Result.success();
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInstructionServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInstructionServiceImpl.java
new file mode 100644
index 0000000..6f5bb5b
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceInstructionServiceImpl.java
@@ -0,0 +1,67 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.numgen.NumberGenerator;
+import com.ruoyi.common.utils.QueryWrappers;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.device.dto.DeviceInstructionDto;
+import com.ruoyi.device.dto.DeviceOperationInstructionDto;
+import com.ruoyi.device.mapper.InstructionMapper;
+import com.ruoyi.device.pojo.DeviceInstruction;
+import com.ruoyi.device.service.DeviceInstructionService;
+import com.ruoyi.device.service.DeviceOperationInstructionService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.Locale;
+
+/**
+ * <p>
+ * 浣滀笟鎸囧涔︽坊鍔犲彈鎺ф枃浠惰〃 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-12-04 10:29:18
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class DeviceInstructionServiceImpl extends ServiceImpl<InstructionMapper, DeviceInstruction> implements DeviceInstructionService {
+
+ @Autowired
+ private DeviceOperationInstructionService operationInstructionService;
+
+ @Autowired
+ private NumberGenerator<DeviceInstruction> numberGenerator;
+
+ @Override
+ public IPage<DeviceInstruction> pageByPageQueryOfHomeworkInstructions(Page page, DeviceOperationInstructionDto operationInstructionDto) {
+ return baseMapper.pageByPageQueryOfHomeworkInstructions(page, QueryWrappers.queryWrappers(operationInstructionDto));
+ }
+
+ @Override
+ public void newHomeworkGuidebookAdded(DeviceInstructionDto instructionDto) {
+ if (ObjectUtils.isEmpty(instructionDto.getApplicationNumber())) {
+ String year = new SimpleDateFormat("yy", Locale.CHINESE).format(new Date());
+ String month = new SimpleDateFormat("MM", Locale.CHINESE).format(new Date());
+ String day = new SimpleDateFormat("dd", Locale.CHINESE).format(new Date());
+ String processNumber = numberGenerator.generateNumberWithPrefix(3, "WJSK" + year + month + day, DeviceInstruction::getApplicationNumber);
+ instructionDto.setApplicationNumber(processNumber);
+ }
+ saveOrUpdate(instructionDto);
+ if (ObjectUtils.isNotEmpty(instructionDto.getFeTempHumRecordList())) {
+ instructionDto.getFeTempHumRecordList().forEach(i -> {
+ i.setInstructionId(instructionDto.getId());
+ i.setUploader(SecurityUtils.getUserId().intValue());
+ i.setUpdateTime(LocalDateTime.now());
+ });
+ operationInstructionService.saveOrUpdateBatch(instructionDto.getFeTempHumRecordList());
+ }
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceOperationInstructionServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceOperationInstructionServiceImpl.java
new file mode 100644
index 0000000..273dd2c
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceOperationInstructionServiceImpl.java
@@ -0,0 +1,27 @@
+package com.ruoyi.device.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.device.dto.DeviceOperationInstructionDto;
+import com.ruoyi.device.mapper.OperationInstructionMapper;
+import com.ruoyi.device.pojo.OperationInstruction;
+import com.ruoyi.device.service.DeviceOperationInstructionService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 璁惧 - 浣滀笟鎸囧涔� 娣诲姞鍙楁帶鏂囦欢 瀛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-12-04 10:43:32
+ */
+@Service
+public class DeviceOperationInstructionServiceImpl extends ServiceImpl<OperationInstructionMapper, OperationInstruction> implements DeviceOperationInstructionService {
+
+ @Override
+ public List<DeviceOperationInstructionDto> homeworkGuidebookEditor(Integer instructionId) {
+ return baseMapper.homeworkGuidebookEditor(instructionId);
+ }
+}
diff --git a/cnas-device/src/main/java/com/ruoyi/device/task/DeviceRecordSchedule.java b/cnas-device/src/main/java/com/ruoyi/device/task/DeviceRecordSchedule.java
new file mode 100644
index 0000000..7ead8cb
--- /dev/null
+++ b/cnas-device/src/main/java/com/ruoyi/device/task/DeviceRecordSchedule.java
@@ -0,0 +1,65 @@
+package com.ruoyi.device.task;
+
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.common.utils.WxCpUtils;
+import com.ruoyi.device.dto.DeviceRecordDto;
+import com.ruoyi.device.mapper.DeviceRecordMapper;
+import com.ruoyi.device.pojo.DeviceRecord;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 璁惧浣跨敤璁板綍鎻愰啋
+ */
+@Component
+public class DeviceRecordSchedule {
+ @Resource
+ private DeviceRecordMapper deviceRecordMapper;
+ @Resource
+ private UserMapper userMapper;
+ @Resource
+ private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+
+ /**
+ * 鎻愰啋濉啓璁惧浣跨敤璁板綍
+ */
+// @Scheduled(cron = "0/5 * * * * *")
+ @Scheduled(cron = "0 0 9 * * 6") // 姣忓懆鍏墽琛屼竴娆�
+ public void task1() {
+ // 鏌ヨ鏈~鍐欑殑璁惧浣跨敤璁板綍
+ List<DeviceRecordDto> deviceRecords = deviceRecordMapper.selectNotFilled();
+ Map<Integer, List<DeviceRecordDto>> userPersonIdMap = deviceRecords.stream().collect(Collectors.groupingBy(DeviceRecord::getUsePersonId));
+ userPersonIdMap.forEach((userId, recordList) -> {
+ threadPoolTaskExecutor.execute(() -> {
+ // 浼佷笟寰俊閫氱煡濉啓璁惧浣跨敤璁板綍
+ User user = userMapper.selectById(userId);
+ String message = "";
+ message += "璁惧浣跨敤璁板綍鏈~鍐欐彁閱掗�氱煡";
+ for (DeviceRecordDto deviceRecord : recordList) {
+ message += "\n璁惧鍚嶇О缂栧彿: " + deviceRecord.getDeviceName() + "-" + deviceRecord.getManagementNumber();
+ message += "\n濮旀墭缂栧彿: " + deviceRecord.getSampleCode();
+ message += "\n";
+ }
+ message += "\n璇峰幓濉啓璁惧浣跨敤璁板綍";
+
+ //鍙戦�佷紒涓氬井淇℃秷鎭�氱煡
+ try {
+ WxCpUtils.inform(user.getAccount(), message, null);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+
+ });
+ });
+
+
+ }
+
+}
diff --git a/cnas-device/src/main/resources/mapper/DeviceAccidentReportMapper.xml b/cnas-device/src/main/resources/mapper/DeviceAccidentReportMapper.xml
new file mode 100644
index 0000000..2bbfce0
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceAccidentReportMapper.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.device.mapper.DeviceAccidentReportMapper">
+
+ <!-- 璁惧浜嬫晠鎶ュ憡鍒楄〃 -->
+ <select id="pageDeviceAccidentReport" resultType="com.ruoyi.device.pojo.DeviceAccidentReport">
+ select * from (
+ select *
+ from device_accident_report
+ order by create_time desc
+ ) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+ <select id="selectDeviceAccidentReportById" resultType="com.ruoyi.device.dto.DeviceAccidentReportDto">
+ select
+ d.*,
+ date_format(d.accident_date,'%Y-%m-%d') accidentDateStr, -- 鏃堕棿
+ date_format(d.report_date,'%Y-%m-%d') reportDateStr, -- 鎶ュ憡浜哄~鍐欐椂闂�
+ date_format(d.assessor_date,'%Y-%m-%d') assessorDateStr, -- 璇勪及浜哄~鍐欐椂闂�
+ date_format(d.department_head_date,'%Y-%m-%d') departmentHeadDateStr, -- 閮ㄩ棬璐熻矗浜哄~鍐欐椂闂�
+ date_format(d.technical_director_date,'%Y-%m-%d') technicalDirectorDateStr, -- 鎶�鏈礋璐d汉濉啓鏃堕棿
+ date_format(d.director_head_date,'%Y-%m-%d') directorHeadDateStr -- 涓讳换濉啓鏃堕棿
+ from device_accident_report d
+ where d.accident_report_id = #{accidentReportId}
+ </select>
+
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/DeviceBreakdownMaintenanceMapper.xml b/cnas-device/src/main/resources/mapper/DeviceBreakdownMaintenanceMapper.xml
new file mode 100644
index 0000000..4877ecf
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceBreakdownMaintenanceMapper.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.device.mapper.DeviceBreakdownMaintenanceMapper">
+
+ <!--璁惧鏁呴殰缁翠慨鍒楄〃-->
+ <select id="pageDeviceBreakdownMaintenance" resultType="com.ruoyi.device.dto.DeviceBreakdownMaintenance">
+ select * from (
+ select *
+ from device_breakdown_maintenance
+ order by create_time desc
+ ) a
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/DeviceInspectionRecordMapper.xml b/cnas-device/src/main/resources/mapper/DeviceInspectionRecordMapper.xml
new file mode 100644
index 0000000..af4ac42
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/DeviceInspectionRecordMapper.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.device.mapper.DeviceInspectionRecordMapper">
+
+
+ <select id="selectDeviceParameterPage" resultType="com.ruoyi.device.pojo.DeviceInspectionRecord">
+ SELECT
+ *
+ from device_inspection_record
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/InstructionMapper.xml b/cnas-device/src/main/resources/mapper/InstructionMapper.xml
new file mode 100644
index 0000000..2d1a823
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/InstructionMapper.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.device.mapper.InstructionMapper">
+
+
+ <select id="pageByPageQueryOfHomeworkInstructions" resultType="com.ruoyi.device.pojo.DeviceInstruction">
+ SELECT
+ doi.*,di.*,d.device_name, d.management_number device_number, d.specification_model device_model, u.name uploader_name, u1.name approver_name
+ FROM
+ device_operation_instruction doi
+ LEFT JOIN device_instruction di ON di.id = doi.instruction_id
+ left join device d on d.id = doi.device_id
+ left join user u on u.id = doi.uploader
+ left join user u1 on u1.id = doi.approver_id
+ <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
+ ${ew.customSqlSegment}
+ </if>
+ </select>
+</mapper>
diff --git a/cnas-device/src/main/resources/mapper/OperationInstructionMapper.xml b/cnas-device/src/main/resources/mapper/OperationInstructionMapper.xml
new file mode 100644
index 0000000..5679e35
--- /dev/null
+++ b/cnas-device/src/main/resources/mapper/OperationInstructionMapper.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.device.mapper.OperationInstructionMapper">
+
+ <select id="homeworkGuidebookEditor" resultType="com.ruoyi.device.dto.DeviceOperationInstructionDto">
+ SELECT
+ doi.*,d.device_name, d.management_number device_number, d.specification_model device_model
+ FROM
+ device_operation_instruction doi
+ left join device d on d.id = doi.device_id
+ where doi.instruction_id = #{instructionId}
+ </select>
+</mapper>
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/MqttApplicationRunner.java b/ruoyi-admin/src/main/java/com/ruoyi/web/MqttApplicationRunner.java
new file mode 100644
index 0000000..854d84a
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/MqttApplicationRunner.java
@@ -0,0 +1,29 @@
+package com.ruoyi.web;
+
+import com.ruoyi.device.mqtt.MQClient;
+import com.ruoyi.device.mqtt.MQConfig;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.stereotype.Component;
+
+@Component
+@Slf4j
+public class MqttApplicationRunner implements ApplicationRunner {
+
+ @Autowired
+ private MQConfig mqConfig;
+
+ @Value("${mqtt.client}")
+ private Boolean client;
+
+ @Override
+ public void run(ApplicationArguments args) throws Exception {
+ if (client) {
+ MQClient mqttPushClient = new MQClient();
+ mqttPushClient.connect(mqConfig);
+ }
+ }
+}
diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml
index f32dbe2..33a491d 100644
--- a/ruoyi-admin/src/main/resources/application-druid.yml
+++ b/ruoyi-admin/src/main/resources/application-druid.yml
@@ -98,3 +98,16 @@
custorder: http://192.168.20.47/PurchService.ashx?
custorder-port: http://192.168.20.47:8008/PurchService.ashx?
erp-services: http://192.168.20.47:8081
+
+# 澶囨敞 18083瀵嗙爜锛歾ttZTT123!@
+mqtt:
+ url: tcp://mqtt-ztt.zttiot.com:1883 # 鏈嶅姟鍣╥p
+ username: forwarder # MQTT-鏈嶅姟绔�-鐢ㄦ埛鍚�,鍚庢湡浼氫慨鏀逛负鐢ㄦ埛鐧诲綍鍚�
+ password: ZTlink12345 # MQTT-鏈嶅姟绔�-瀵嗙爜锛�,鍚庢湡浼氫慨鏀逛负鐢ㄦ埛鐧诲綍瀵嗙爜
+ timeout: 100 # 瓒呮椂鏃堕棿 锛堝崟浣嶏細绉掞級
+ keepalive: 60 # 蹇冭烦 锛堝崟浣嶏細绉掞級
+ qos: 1 # 蹇冭烦鍖呯骇鍒�
+ completion-timeout: 3000 # 杩炴帴瓒呮椂鏃堕棿锛堝崟浣嶏細绉掞級
+ clientId: javaPublish # clientId
+ subscribe: /ztt/v3/2443521/publish # 璁㈤槄涓婚
+ client: false # 濡傛灉寮�鍙戦渶瑕佸惎鍔ㄦ祴璇曪紝闇�瑕佹敼涓篺alse涓嶇劧浼氫竴鐩存姤閿�
--
Gitblit v1.9.3