From 1c1ebb911e40aba9f051b6db1360956372d6a15f Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期三, 12 三月 2025 13:13:42 +0800
Subject: [PATCH] 设备完善

---
 cnas-require/src/main/java/com/ruoyi/requier/service/IncidentReportService.java                   |   33 +
 cnas-require/src/main/java/com/ruoyi/requier/service/impl/DeviceFaultServiceImpl.java             |   11 
 cnas-require/src/main/resources/mapper/IncidentSparePartsMapper.xml                               |   14 
 cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentFileMapper.java                       |   17 
 cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentInstallMapper.java                    |   17 
 cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentFile.java                               |   40 ++
 cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentSpareParts.java                         |   44 ++
 cnas-require/src/main/java/com/ruoyi/requier/service/IncidentFileService.java                     |    7 
 cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentSparePartsMapper.java                 |   17 
 cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentInstall.java                            |   44 ++
 cnas-require/src/main/java/com/ruoyi/requier/service/IncidentAcceptanceCheckService.java          |    7 
 cnas-require/src/main/java/com/ruoyi/requier/service/IncidentSparePartsService.java               |    7 
 cnas-require/src/main/java/com/ruoyi/requier/pojo/Document.java                                   |   89 ++++
 cnas-require/src/main/resources/mapper/IncidentReportMapper.xml                                   |  114 +++++
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/DepartmentLimsMapper.java                      |    2 
 cnas-require/src/main/java/com/ruoyi/requier/service/impl/DocumentServiceImpl.java                |   11 
 cnas-require/src/main/resources/mapper/IncidentInstallMapper.xml                                  |   14 
 cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentReportMapper.java                     |   28 +
 cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentAcceptanceCheckMapper.java            |   17 
 cnas-require/src/main/java/com/ruoyi/requier/controller/IncidentReportController.java             |   73 +++
 cnas-require/src/main/java/com/ruoyi/requier/dto/IncidentReportAddDto.java                        |   26 +
 cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentAcceptanceCheck.java                    |   50 ++
 cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentFileServiceImpl.java            |   11 
 /dev/null                                                                                         |   27 -
 cnas-require/src/main/java/com/ruoyi/requier/service/IncidentInstallService.java                  |    7 
 cnas-require/src/main/java/com/ruoyi/requier/excel/IncidentReportExport.java                      |   31 +
 cnas-require/src/main/resources/mapper/IncidentFileMapper.xml                                     |   13 
 cnas-require/src/main/java/com/ruoyi/requier/controller/DeviceFaultController.java                |    6 
 cnas-require/src/main/resources/mapper/DeviceMaintenanceMapper.xml                                |    4 
 cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentReport.java                             |  142 +++++++
 cnas-require/src/main/java/com/ruoyi/requier/controller/DocumentController.java                   |   46 ++
 cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentInstallServiceImpl.java         |   11 
 cnas-require/src/main/resources/mapper/IncidentAcceptanceCheckMapper.xml                          |   16 
 cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentReportServiceImpl.java          |  116 +++++
 cnas-require/src/main/java/com/ruoyi/requier/mapper/DocumentDao.java                              |    9 
 cnas-require/src/main/java/com/ruoyi/requier/service/DocumentService.java                         |    7 
 cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentAcceptanceCheckServiceImpl.java |   11 
 cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentSparePartsServiceImpl.java      |   11 
 38 files changed, 1,115 insertions(+), 35 deletions(-)

diff --git a/cnas-device/pom.xml b/cnas-device/pom.xml
deleted file mode 100644
index ec0af39..0000000
--- a/cnas-device/pom.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>ruoyi</artifactId>
-        <groupId>com.ruoyi</groupId>
-        <version>3.8.9</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>cnas-device</artifactId>
-
-    <properties>
-        <maven.compiler.source>8</maven.compiler.source>
-        <maven.compiler.target>8</maven.compiler.target>
-    </properties>
-
-    <dependencies>
-        <!--涓氬姟妯″潡-->
-        <dependency>
-            <groupId>com.ruoyi</groupId>
-            <artifactId>inspect-server</artifactId>
-        </dependency>
-    </dependencies>
-
-</project>
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/controller/DeviceFaultController.java b/cnas-require/src/main/java/com/ruoyi/requier/controller/DeviceFaultController.java
index ff7edea..e9360ac 100644
--- a/cnas-require/src/main/java/com/ruoyi/requier/controller/DeviceFaultController.java
+++ b/cnas-require/src/main/java/com/ruoyi/requier/controller/DeviceFaultController.java
@@ -43,8 +43,8 @@
         deviceFaultService.removeById(id);
     }
 
-    @GetMapping("/device/{deviceId}")
-    public Result<Map<String,Object>> getDeviceFaultsByDeviceId(@PathVariable Integer deviceId) {
+    @GetMapping("/device")
+    public Result<Map<String,Object>> getDeviceFaultsByDeviceId(Integer deviceId) {
        return  Result.success(deviceFaultService.findByDeviceId(deviceId));
     }
-}
\ No newline at end of file
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/controller/DocumentController.java b/cnas-require/src/main/java/com/ruoyi/requier/controller/DocumentController.java
new file mode 100644
index 0000000..739496c
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/controller/DocumentController.java
@@ -0,0 +1,46 @@
+package com.ruoyi.requier.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.requier.pojo.Document;
+import com.ruoyi.requier.service.DocumentService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+@RestController
+@RequestMapping("/documents")
+public class DocumentController {
+
+    @Resource
+    private DocumentService documentService;
+
+    @PostMapping("add")
+    public Result createDocument(@RequestBody Document document) {
+        documentService.save(document);
+        return Result.success("ok");
+    }
+
+    @GetMapping("/id")
+    public Document getDocumentById(Integer id) {
+        return documentService.getById(id);
+    }
+
+    @PostMapping("updateDocument")
+    public Result updateDocument(@RequestBody Document document) {
+        return Result.success(documentService.updateById(document));
+    }
+
+    @DeleteMapping("/deleteDocumentById")
+    public Result deleteDocumentById( Integer id) {
+        return Result.success(documentService.removeById(id));
+    }
+
+    @GetMapping("/getListByDId")
+    public Result getAllDocuments(Integer id) {
+        LambdaQueryWrapper<Document> lambdaQueryWrapper=new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(Document::getDeviceId,id);
+        return Result.success(documentService.list(lambdaQueryWrapper));
+    }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/controller/IncidentReportController.java b/cnas-require/src/main/java/com/ruoyi/requier/controller/IncidentReportController.java
new file mode 100644
index 0000000..b9de791
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/controller/IncidentReportController.java
@@ -0,0 +1,73 @@
+package com.ruoyi.requier.controller;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.requier.dto.IncidentReportAddDto;
+import com.ruoyi.requier.excel.IncidentReportExport;
+import com.ruoyi.requier.service.IncidentReportService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * <p>
+ * 璁惧楠屾敹娣诲姞楠屾敹瀛楁琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-09-19 03:54:49
+ */
+@RestController
+@RequestMapping("/incidentReport")
+public class IncidentReportController {
+    @Autowired
+    private IncidentReportService incidentReportService;
+
+    @PostMapping("saveIncidentReportData")
+    public Result saveIncidentReportData(@RequestBody IncidentReportAddDto incidentReportAddDto) {
+        incidentReportService.saveIncidentReportData(incidentReportAddDto);
+        return Result.success();
+    }
+
+    @GetMapping("/getShowIncidentReport")
+    public Result getShowIncidentReport(@RequestParam("id") Integer id) {
+        return Result.success(incidentReportService.getShowIncidentReport(id));
+    }
+
+    @DeleteMapping("/deleteIncidentReport")
+    public Result deleteIncidentReport(@RequestParam("id") Integer id) {
+        incidentReportService.deleteIncidentReport(id);
+        return Result.success();
+    }
+
+    @GetMapping("/incidentReportPage")
+    public Result incidentReportPage(@RequestParam("deviceId") Integer deviceId, Page page, String processNumber){
+        return Result.success(incidentReportService.getByDeviceId(deviceId, page, processNumber));
+    }
+
+    @DeleteMapping("deleteIncidentReportAll")
+    public Result deleteIncidentReport(Integer sparePartsId, Integer fileId, Integer installId, Integer acceptanceCheckId) {
+        incidentReportService.deleteIncidentReportAll(sparePartsId, fileId, installId, acceptanceCheckId);
+        return Result.success();
+    }
+
+    @GetMapping("/incidentReportExport")
+    public Result incidentReportPage(@RequestParam("deviceId") Integer deviceId, HttpServletResponse response) throws IOException {
+        List<IncidentReportExport> list = incidentReportService.incidentReportExport(deviceId);
+        response.setHeader("requestType", "excel");
+        response.setHeader("Access-Control-Expose-Headers", "requestType");
+        // 璁剧疆鍗曞厓鏍兼牱寮�
+        // 淇濆瓨鍒扮涓�涓猻heet涓�
+        EasyExcel.write(response.getOutputStream())
+                .head(IncidentReportExport.class)
+                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 鑷�傚簲鍒楀
+                .sheet()
+                .doWrite(list);
+        return Result.success();
+    }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/dto/IncidentReportAddDto.java b/cnas-require/src/main/java/com/ruoyi/requier/dto/IncidentReportAddDto.java
new file mode 100644
index 0000000..b0616cb
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/dto/IncidentReportAddDto.java
@@ -0,0 +1,26 @@
+package com.ruoyi.requier.dto;
+
+import com.ruoyi.requier.pojo.*;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class IncidentReportAddDto extends IncidentReport {
+    private List<IncidentSpareParts> sparePartsConfirmationList; // 澶囦欢纭List
+    private List<IncidentFile> fileClassConfirmationList; // 鏂囦欢纭List
+    private List<IncidentInstall> installationAcceptanceRecordList; // 瀹夎楠屾敹璁板綍
+    private List<IncidentAcceptanceCheck> acceptanceCheckRecordList; // 楠屾敹鏍告煡璁板綍
+
+    private String deviceName;
+
+    private String managementNumber;
+
+    private String submitUser;
+
+    private String saveState;
+
+    private String manufacturer;
+
+    private String specificationModel;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/excel/IncidentReportExport.java b/cnas-require/src/main/java/com/ruoyi/requier/excel/IncidentReportExport.java
new file mode 100644
index 0000000..4935314
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/excel/IncidentReportExport.java
@@ -0,0 +1,31 @@
+package com.ruoyi.requier.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+@Data
+public class IncidentReportExport {
+    @ExcelProperty(value = "娴佺▼缂栧彿")
+    private String processNumber;
+
+    @ExcelProperty(value = "璁惧鍚嶇О")
+    private String deviceName;
+
+    @ExcelProperty(value = "绠$悊缂栧彿")
+    private String managementNumber;
+
+    @ExcelProperty(value = "搴忓垪鍙�")
+    private String serialNumber;
+
+    @ExcelProperty(value = "鎻愪氦鑰�")
+    private String submitUser;
+
+    @ExcelProperty(value = "鎻愪氦鏃ユ湡")
+    private String createTime;
+
+    @ExcelProperty(value = "褰撳墠鐘舵��")
+    private String saveState;
+
+    @ExcelProperty("褰撳墠璐熻矗浜�")
+    private String currentResponsible;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/mapper/DocumentDao.java b/cnas-require/src/main/java/com/ruoyi/requier/mapper/DocumentDao.java
new file mode 100644
index 0000000..7b320ea
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/mapper/DocumentDao.java
@@ -0,0 +1,9 @@
+package com.ruoyi.requier.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.requier.pojo.Document;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface DocumentDao extends BaseMapper<Document> {
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentAcceptanceCheckMapper.java b/cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentAcceptanceCheckMapper.java
new file mode 100644
index 0000000..c545b94
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentAcceptanceCheckMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.requier.mapper;
+
+
+import com.ruoyi.framework.mybatis_config.MyBaseMapper;
+import com.ruoyi.requier.pojo.IncidentAcceptanceCheck;
+
+/**
+ * <p>
+ * 璁惧楠屾敹-楠屾敹鏍告煡 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-09-19 04:41:19
+ */
+public interface IncidentAcceptanceCheckMapper extends MyBaseMapper<IncidentAcceptanceCheck> {
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentFileMapper.java b/cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentFileMapper.java
new file mode 100644
index 0000000..d607a53
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentFileMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.requier.mapper;
+
+
+import com.ruoyi.framework.mybatis_config.MyBaseMapper;
+import com.ruoyi.requier.pojo.IncidentFile;
+
+/**
+ * <p>
+ * 璁惧楠屾敹-鏂囦欢绫荤‘璁� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-09-19 04:41:36
+ */
+public interface IncidentFileMapper extends MyBaseMapper<IncidentFile> {
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentInstallMapper.java b/cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentInstallMapper.java
new file mode 100644
index 0000000..81b724b
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentInstallMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.requier.mapper;
+
+
+import com.ruoyi.framework.mybatis_config.MyBaseMapper;
+import com.ruoyi.requier.pojo.IncidentInstall;
+
+/**
+ * <p>
+ * 璁惧楠屾敹-瀹夎楠屾敹妫�鏌� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-09-19 04:41:50
+ */
+public interface IncidentInstallMapper extends MyBaseMapper<IncidentInstall> {
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentReportMapper.java b/cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentReportMapper.java
new file mode 100644
index 0000000..0c859e0
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentReportMapper.java
@@ -0,0 +1,28 @@
+package com.ruoyi.requier.mapper;
+
+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.requier.dto.IncidentReportAddDto;
+import com.ruoyi.requier.excel.IncidentReportExport;
+import com.ruoyi.requier.pojo.IncidentReport;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 璁惧楠屾敹娣诲姞楠屾敹瀛楁琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-09-19 03:54:49
+ */
+public interface IncidentReportMapper extends BaseMapper<IncidentReport> {
+
+    IPage<IncidentReportAddDto> getByDeviceId(Page page, @Param("deviceId") Integer deviceId, @Param("processNumber") String processNumber);
+
+    IncidentReportAddDto getShowIncidentReport(Integer id);
+
+    List<IncidentReportExport> incidentReportExport(Integer deviceId);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentSparePartsMapper.java b/cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentSparePartsMapper.java
new file mode 100644
index 0000000..0bb84fe
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/mapper/IncidentSparePartsMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.requier.mapper;
+
+
+import com.ruoyi.framework.mybatis_config.MyBaseMapper;
+import com.ruoyi.requier.pojo.IncidentSpareParts;
+
+/**
+ * <p>
+ * 璁惧楠屾敹-澶囦欢纭 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-09-19 04:42:06
+ */
+public interface IncidentSparePartsMapper extends MyBaseMapper<IncidentSpareParts> {
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/pojo/Document.java b/cnas-require/src/main/java/com/ruoyi/requier/pojo/Document.java
new file mode 100644
index 0000000..afb283d
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/pojo/Document.java
@@ -0,0 +1,89 @@
+package com.ruoyi.requier.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+
+@Data
+@TableName(value = "device_documents")
+public class Document implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 涓婚敭ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 鏂囨。绫诲瀷锛堟灇涓撅級
+     */
+    private String documentType;
+
+    /**
+     * 鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 鐗堟湰鍙�
+     */
+    private String version;
+
+    /**
+     * 鏁伴噺
+     */
+    private Integer quantity;
+
+    /**
+     * 椤垫暟
+     */
+    private Integer pageCount;
+
+    /**
+     * 鎻愪緵鍟�
+     */
+    private String provider;
+
+    /**
+     * 鎻愪緵鏃ユ湡
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime provideDate;
+
+    /**
+     * 澶囨敞
+     */
+    private String comments;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime createdAt;
+
+    /**
+     * 鏇存柊鏃堕棿
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updatedAt;
+
+    private int deviceId;
+
+    @ApiModelProperty("璧勪骇缂栧彿")
+    private String number;
+
+    @ApiModelProperty("鍘熷鏂囦欢鍚嶇О")
+    private String systemFileName;
+
+    @ApiModelProperty("绯荤粺鐢熸垚鏂囦欢鍚嶇О")
+    private String fileName;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentAcceptanceCheck.java b/cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentAcceptanceCheck.java
new file mode 100644
index 0000000..f71687b
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentAcceptanceCheck.java
@@ -0,0 +1,50 @@
+package com.ruoyi.requier.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 璁惧楠屾敹-楠屾敹鏍告煡
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-09-19 04:41:19
+ */
+@Getter
+@Setter
+@TableName("device_incident_acceptance_check")
+@ApiModel(value = "IncidentAcceptanceCheck瀵硅薄", description = "璁惧楠屾敹-楠屾敹鏍告煡")
+public class IncidentAcceptanceCheck implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("涓婚敭id")
+    @TableId(type = IdType.AUTO)
+    private Integer acceptanceCheckId;
+
+    @ApiModelProperty("浠櫒妯″潡")
+    private String instrumentModule;
+
+    @ApiModelProperty("鏍告煡鍙傛暟")
+    private String verificationParameter;
+
+    @ApiModelProperty("鍙帴鏀堕檺")
+    private String acceptableLimit;
+
+    @ApiModelProperty("鏍告煡缁撴灉")
+    private String verificationResult;
+
+    @ApiModelProperty("鏍告煡缁撹")
+    private String verificationConclusion;
+
+    @ApiModelProperty("璁惧楠屾敹ID")
+    private Integer incidentId;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentFile.java b/cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentFile.java
new file mode 100644
index 0000000..ca8788a
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentFile.java
@@ -0,0 +1,40 @@
+package com.ruoyi.requier.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 璁惧楠屾敹-鏂囦欢绫荤‘璁�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-09-19 04:41:36
+ */
+@Getter
+@Setter
+@TableName("device_incident_file")
+@ApiModel(value = "IncidentFile瀵硅薄", description = "璁惧楠屾敹-鏂囦欢绫荤‘璁�")
+public class IncidentFile implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(type = IdType.AUTO)
+    private Integer fileId;
+
+    @ApiModelProperty("搴旀湁鍐屾暟")
+    private Integer expectedCopies;
+
+    @ApiModelProperty("瀹為檯鏀跺埌鍐屾暟")
+    private Integer actualCopies;
+
+    @ApiModelProperty("璁惧楠屾敹id")
+    private Integer incidentId;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentInstall.java b/cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentInstall.java
new file mode 100644
index 0000000..4e9caab
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentInstall.java
@@ -0,0 +1,44 @@
+package com.ruoyi.requier.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 璁惧楠屾敹-瀹夎楠屾敹妫�鏌�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-09-19 04:41:50
+ */
+@Getter
+@Setter
+@TableName("device_incident_install")
+@ApiModel(value = "IncidentInstall瀵硅薄", description = "璁惧楠屾敹-瀹夎楠屾敹妫�鏌�")
+public class IncidentInstall implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("涓婚敭id")
+    @TableId(type = IdType.AUTO)
+    private Integer installId;
+
+    @ApiModelProperty("椤圭洰")
+    private String installationProject;
+
+    @ApiModelProperty("瀹夎鎯呭喌")
+    private String installationSituation;
+
+    @ApiModelProperty("瀹夎瀹屾垚")
+    private String installationCompleted;
+
+    @ApiModelProperty("璁惧楠屾敹")
+    private Integer incidentId;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentReport.java b/cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentReport.java
new file mode 100644
index 0000000..adb6a96
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentReport.java
@@ -0,0 +1,142 @@
+package com.ruoyi.requier.pojo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+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-09-19 03:54:49
+ */
+@Getter
+@Setter
+@TableName("device_incident_report")
+@ApiModel(value = "IncidentReport瀵硅薄", description = "璁惧楠屾敹娣诲姞楠屾敹瀛楁琛�")
+public class IncidentReport implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ExcelProperty(value = "娴佺▼缂栧彿")
+    @ApiModelProperty("娴佺▼缂栧彿")
+    private String processNumber;
+
+    @ApiModelProperty("璁惧id")
+    private Integer deviceId;
+
+    @ApiModelProperty("搴忓垪鍙�")
+    private String serialNumber;
+
+    @ApiModelProperty("璁惧绫诲埆")
+    private String deviceClass;
+
+    @ApiModelProperty("寮�绠卞墠妫�鏌ュ鍖呰鏈夋棤鐮存崯")
+    private String checkOuterPackaging;
+
+    @ApiModelProperty("鍘熸枃浠跺悕绉�")
+    private String fileName;
+
+    @ApiModelProperty("绯荤粺鐢熸垚鏂囦欢鍚嶇О")
+    private String systemFileName;
+
+    @ApiModelProperty("璁惧寮�绠遍獙鏀剁粨璁�")
+    private String unpackingAcceptanceConclusion;
+
+    @ApiModelProperty("1鎻愪氦 涓嬬幆鑺傝礋璐d汉鍚嶇О")
+    private String submitNextPesponsible;
+
+    @ApiModelProperty("1鎻愪氦 鎻愪氦澶囨敞")
+    private String submitRemarks;
+
+    @ApiModelProperty("1鎻愪氦 鎻愪氦鎿嶄綔浜�")
+    private String submitOperatingPersonnel;
+
+    @ApiModelProperty("1鎻愪氦 鎻愪氦鏃ユ湡")
+    private LocalDateTime submitDate;
+
+    @ApiModelProperty("2寮�绠遍獙鏀跺鏍� 澶嶆牳鎰忚")
+    private String unpackingReviewOpinion;
+
+    @ApiModelProperty("2寮�绠遍獙鏀跺鏍� 涓嬬幆鑺傝礋璐d汉")
+    private String unpackingNextPesponsible;
+
+    @ApiModelProperty("2寮�绠遍獙鏀跺鏍� 鎿嶄綔浜�")
+    private String unpackingOperatingPersonnel;
+
+    @ApiModelProperty("2寮�绠遍獙鏀跺鏍� 鏃ユ湡")
+    private LocalDateTime unpackingDate;
+
+    @ApiModelProperty("3瀹夎浣嶇疆")
+    private String installLocation;
+
+    @ApiModelProperty("3瀹夎澶囨敞")
+    private String installRemarks;
+
+    @ApiModelProperty("3瀹夎涓嬬幆鑺傝礋璐d汉")
+    private String installNextPesponsible;
+
+    @ApiModelProperty("3瀹夎鎿嶄綔浜�")
+    private String installOperatingPersonnel;
+
+    @ApiModelProperty("3瀹夎鏃ユ湡")
+    private LocalDateTime installDate;
+
+    @ApiModelProperty("4瀹夎楠屾敹澶嶆牳鎰忚")
+    private String installationAcceptanceCompoundOpinion;
+
+    @ApiModelProperty("4瀹夎楠屾敹涓嬬幆鑺傝礋璐d汉")
+    private String installationAcceptanceNextPesponsible;
+
+    @ApiModelProperty("4瀹夎楠屾敹鎿嶄綔浜�")
+    private String installationAcceptanceOperatingPersonnel;
+
+    @ApiModelProperty("4瀹夎楠屾敹鏃ユ湡")
+    private LocalDateTime installationAcceptanceDate;
+
+    @ApiModelProperty("5楠屾敹鏍告煡 璁惧寮�绠遍獙鏀剁粨璁�")
+    private String acceptanceCheckUnpackingConclusion;
+
+    @ApiModelProperty("5楠屾敹鏍告煡 涓嬬幆鑺傝礋璐d汉")
+    private String acceptanceCheckNextPesponsible;
+
+    @ApiModelProperty("5楠屾敹鏍告煡 鎿嶄綔浜�")
+    private String acceptanceCheckOperatingPersonnel;
+
+    @ApiModelProperty("5楠屾敹鏍告煡 鏃ユ湡")
+    private LocalDateTime acceptanceCheckDate;
+
+    @ApiModelProperty("6楠屾敹鏍告煡瀹℃牳 瀹℃牳鎰忚")
+    private String acceptanceAuditAuditOpinion;
+
+    @ApiModelProperty("6楠屾敹鏍告煡瀹℃牳 鎿嶄綔浜�")
+    private String acceptanceAuditOperatingPersonnel;
+
+    @ApiModelProperty("6楠屾敹鏍告煡瀹℃牳 鏃ユ湡")
+    private LocalDateTime acceptanceAuditDate;
+
+    @ApiModelProperty(value = "鍒涘缓浜篿d")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("褰撳墠鐘舵��")
+    private String currentState;
+
+    @ApiModelProperty(value = "鍒涘缓鏃ユ湡 / 鎻愪氦鏃ユ湡")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("褰撳墠璐熻矗浜�")
+    private String currentResponsible;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentSpareParts.java b/cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentSpareParts.java
new file mode 100644
index 0000000..7d998e2
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/pojo/IncidentSpareParts.java
@@ -0,0 +1,44 @@
+package com.ruoyi.requier.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 璁惧楠屾敹-澶囦欢纭
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-09-19 04:42:06
+ */
+@Getter
+@Setter
+@TableName("device_incident_spare_parts")
+@ApiModel(value = "IncidentSpareParts瀵硅薄", description = "璁惧楠屾敹-澶囦欢纭")
+public class IncidentSpareParts implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("涓婚敭id")
+    @TableId(type = IdType.AUTO)
+    private Integer sparePartsId;
+
+    @ApiModelProperty("鍚嶇О")
+    private String name;
+
+    @ApiModelProperty("鏁伴噺")
+    private Integer number;
+
+    @ApiModelProperty("澶囨敞")
+    private String note;
+
+    @ApiModelProperty("璁惧楠屾敹ID")
+    private Integer incidentId;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/DocumentService.java b/cnas-require/src/main/java/com/ruoyi/requier/service/DocumentService.java
new file mode 100644
index 0000000..87b7595
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/service/DocumentService.java
@@ -0,0 +1,7 @@
+package com.ruoyi.requier.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.requier.pojo.Document;
+
+public interface DocumentService extends IService<Document> {
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/IncidentAcceptanceCheckService.java b/cnas-require/src/main/java/com/ruoyi/requier/service/IncidentAcceptanceCheckService.java
new file mode 100644
index 0000000..d9c354f
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/service/IncidentAcceptanceCheckService.java
@@ -0,0 +1,7 @@
+package com.ruoyi.requier.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.requier.pojo.IncidentAcceptanceCheck;
+
+public interface IncidentAcceptanceCheckService extends IService<IncidentAcceptanceCheck> {
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/IncidentFileService.java b/cnas-require/src/main/java/com/ruoyi/requier/service/IncidentFileService.java
new file mode 100644
index 0000000..df458e4
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/service/IncidentFileService.java
@@ -0,0 +1,7 @@
+package com.ruoyi.requier.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.requier.pojo.IncidentFile;
+
+public interface IncidentFileService extends IService<IncidentFile> {
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/IncidentInstallService.java b/cnas-require/src/main/java/com/ruoyi/requier/service/IncidentInstallService.java
new file mode 100644
index 0000000..3fadab4
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/service/IncidentInstallService.java
@@ -0,0 +1,7 @@
+package com.ruoyi.requier.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.requier.pojo.IncidentInstall;
+
+public interface IncidentInstallService extends IService<IncidentInstall> {
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/IncidentReportService.java b/cnas-require/src/main/java/com/ruoyi/requier/service/IncidentReportService.java
new file mode 100644
index 0000000..32371ba
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/service/IncidentReportService.java
@@ -0,0 +1,33 @@
+package com.ruoyi.requier.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.requier.dto.IncidentReportAddDto;
+import com.ruoyi.requier.excel.IncidentReportExport;
+import com.ruoyi.requier.pojo.IncidentReport;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 璁惧楠屾敹娣诲姞楠屾敹瀛楁琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-09-19 03:54:49
+ */
+public interface IncidentReportService extends IService<IncidentReport> {
+
+    void saveIncidentReportData(IncidentReportAddDto incidentReportAddDto);
+
+    IPage<IncidentReportAddDto> getByDeviceId(Integer deviceId, Page page, String processNumber);
+
+    void deleteIncidentReport(Integer id);
+
+    IncidentReportAddDto getShowIncidentReport(Integer id);
+
+    void deleteIncidentReportAll(Integer sparePartsId, Integer fileId, Integer installId, Integer acceptanceCheckId);
+
+    List<IncidentReportExport> incidentReportExport(Integer deviceId);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/IncidentSparePartsService.java b/cnas-require/src/main/java/com/ruoyi/requier/service/IncidentSparePartsService.java
new file mode 100644
index 0000000..9b45b63
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/service/IncidentSparePartsService.java
@@ -0,0 +1,7 @@
+package com.ruoyi.requier.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.requier.pojo.IncidentSpareParts;
+
+public interface IncidentSparePartsService extends IService<IncidentSpareParts> {
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/impl/DeviceFaultServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/DeviceFaultServiceImpl.java
index 503b005..3d780b1 100644
--- a/cnas-require/src/main/java/com/ruoyi/requier/service/impl/DeviceFaultServiceImpl.java
+++ b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/DeviceFaultServiceImpl.java
@@ -12,10 +12,13 @@
 import com.ruoyi.requier.mapper.DeviceMapper;
 import com.ruoyi.requier.pojo.*;
 import com.ruoyi.requier.service.DeviceFaultService;
+import com.ruoyi.system.mapper.SysDictDataMapper;
+import com.ruoyi.system.mapper.SysDictTypeMapper;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -27,6 +30,9 @@
 
     @Autowired
     private QrShowServiceImpl qrShowService;
+
+    @Resource
+    private SysDictDataMapper sysDictDataMapper;
 
     @Autowired
     private DeviceMaintenanceMapper deviceMaintenanceMapper;
@@ -60,7 +66,8 @@
                     .eq(DeviceFaultOne::getDeviceId, device.getId())
                     .orderByDesc(DeviceFaultOne::getId))).orElse(new ArrayList<>());
             //鏌ヨ璁惧鐘舵�佸瓧鍏�
-            List<SysDictData> sysDictDataList = DictUtils.getDictCache("璁惧鐘舵��");
+            List<SysDictData> sysDictDataList = sysDictDataMapper.selectDictDataByType("device_status");
+//            List<SysDictData> sysDictDataList = DictUtils.getDictCache("璁惧鐘舵��");
             SysDictData findEnum = sysDictDataList.stream().filter(e-> Integer.parseInt(e.getDictValue()) ==device.getDeviceStatus()).findFirst().orElse(new SysDictData());
             map.put("progress",qrShowService.calcDeviceNextCheckRatio(calibrate.getCalibrationDate(),calibrate.getNextCalibrationDate()));//璺濈涓嬫鏍″噯鏃ユ湡鐨勫ぉ鏁扮櫨鍒嗘瘮
             map.put("deviceName",device.getDeviceName());//璁惧鍚嶇О
@@ -97,4 +104,4 @@
         }
         return map;
     }
-}
\ No newline at end of file
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/impl/DocumentServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/DocumentServiceImpl.java
new file mode 100644
index 0000000..7136df7
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/DocumentServiceImpl.java
@@ -0,0 +1,11 @@
+package com.ruoyi.requier.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.requier.mapper.DocumentDao;
+import com.ruoyi.requier.pojo.Document;
+import com.ruoyi.requier.service.DocumentService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class DocumentServiceImpl extends ServiceImpl<DocumentDao, Document> implements DocumentService {
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentAcceptanceCheckServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentAcceptanceCheckServiceImpl.java
new file mode 100644
index 0000000..d01ccd9
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentAcceptanceCheckServiceImpl.java
@@ -0,0 +1,11 @@
+package com.ruoyi.requier.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.requier.mapper.IncidentAcceptanceCheckMapper;
+import com.ruoyi.requier.pojo.IncidentAcceptanceCheck;
+import com.ruoyi.requier.service.IncidentAcceptanceCheckService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class IncidentAcceptanceCheckServiceImpl extends ServiceImpl<IncidentAcceptanceCheckMapper, IncidentAcceptanceCheck> implements IncidentAcceptanceCheckService {
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentFileServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentFileServiceImpl.java
new file mode 100644
index 0000000..fbbe829
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentFileServiceImpl.java
@@ -0,0 +1,11 @@
+package com.ruoyi.requier.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.requier.mapper.IncidentFileMapper;
+import com.ruoyi.requier.pojo.IncidentFile;
+import com.ruoyi.requier.service.IncidentFileService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class IncidentFileServiceImpl extends ServiceImpl<IncidentFileMapper, IncidentFile> implements IncidentFileService {
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentInstallServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentInstallServiceImpl.java
new file mode 100644
index 0000000..0e6ac67
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentInstallServiceImpl.java
@@ -0,0 +1,11 @@
+package com.ruoyi.requier.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.requier.mapper.IncidentInstallMapper;
+import com.ruoyi.requier.pojo.IncidentInstall;
+import com.ruoyi.requier.service.IncidentInstallService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class IncidentInstallServiceImpl extends ServiceImpl<IncidentInstallMapper, IncidentInstall> implements IncidentInstallService {
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentReportServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentReportServiceImpl.java
new file mode 100644
index 0000000..48eda69
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentReportServiceImpl.java
@@ -0,0 +1,116 @@
+package com.ruoyi.requier.service.impl;
+
+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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.numgen.NumberGenerator;
+import com.ruoyi.requier.dto.IncidentReportAddDto;
+import com.ruoyi.requier.excel.IncidentReportExport;
+import com.ruoyi.requier.mapper.IncidentReportMapper;
+import com.ruoyi.requier.pojo.*;
+import com.ruoyi.requier.service.*;
+import com.ruoyi.system.mapper.UserMapper;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+
+/**
+ * <p>
+ * 璁惧楠屾敹娣诲姞楠屾敹瀛楁琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-09-19 03:54:49
+ */
+@Service
+@AllArgsConstructor
+@Transactional(rollbackFor = Exception.class)
+public class IncidentReportServiceImpl extends ServiceImpl<IncidentReportMapper, IncidentReport> implements IncidentReportService {
+    @Autowired
+    private UserMapper userMapper;
+    private IncidentSparePartsService incidentSparePartsService;
+    private IncidentFileService incidentFileService;
+    private IncidentInstallService incidentInstallService;
+    private IncidentAcceptanceCheckService incidentAcceptanceCheckService;
+
+    private final NumberGenerator<IncidentReport> numberGenerator;
+
+    @Override
+    public void saveIncidentReportData(IncidentReportAddDto incidentReportAddDto) {
+        if (ObjectUtils.isEmpty(incidentReportAddDto.getProcessNumber())) {
+            String year = new SimpleDateFormat("yy", Locale.CHINESE).format(new Date());
+            String month = new SimpleDateFormat("MM", Locale.CHINESE).format(new Date());
+            String processNumber = numberGenerator.generateNumberWithPrefix(3, "DG-TC-07FM " + month + "-" + year + month, IncidentReport::getProcessNumber);
+            incidentReportAddDto.setProcessNumber(processNumber);
+        }
+        this.saveOrUpdate(incidentReportAddDto);
+        // 澶囦欢纭List
+        if (ObjectUtils.isNotEmpty(incidentReportAddDto.getSparePartsConfirmationList())) {
+            incidentReportAddDto.getSparePartsConfirmationList().forEach(i -> i.setIncidentId(incidentReportAddDto.getId()));
+            incidentSparePartsService.saveOrUpdateBatch(incidentReportAddDto.getSparePartsConfirmationList());
+        }
+        // 鏂囦欢纭List
+        if (ObjectUtils.isNotEmpty(incidentReportAddDto.getFileClassConfirmationList())) {
+            incidentReportAddDto.getFileClassConfirmationList().forEach(i -> i.setIncidentId(incidentReportAddDto.getId()));
+            incidentFileService.saveOrUpdateBatch(incidentReportAddDto.getFileClassConfirmationList());
+        }
+        // 瀹夎楠屾敹璁板綍
+        if (ObjectUtils.isNotEmpty(incidentReportAddDto.getInstallationAcceptanceRecordList())) {
+            incidentReportAddDto.getInstallationAcceptanceRecordList().forEach(i -> i.setIncidentId(incidentReportAddDto.getId()));
+            incidentInstallService.saveOrUpdateBatch(incidentReportAddDto.getInstallationAcceptanceRecordList());
+        }
+        // 楠屾敹鏍告煡璁板綍
+        if (ObjectUtils.isNotEmpty(incidentReportAddDto.getAcceptanceCheckRecordList())) {
+            incidentReportAddDto.getAcceptanceCheckRecordList().forEach(i -> i.setIncidentId(incidentReportAddDto.getId()));
+            incidentAcceptanceCheckService.saveOrUpdateBatch(incidentReportAddDto.getAcceptanceCheckRecordList());
+        }
+    }
+
+    @Override
+    public IPage<IncidentReportAddDto> getByDeviceId(Integer deviceId, Page page, String processNumber) {
+        return baseMapper.getByDeviceId(page, deviceId, processNumber);
+    }
+
+    @Override
+    public void deleteIncidentReport(Integer id) {
+        baseMapper.deleteById(id);
+        incidentSparePartsService.remove(Wrappers.<IncidentSpareParts>lambdaQuery().eq(IncidentSpareParts::getIncidentId, id));
+        incidentFileService.remove(Wrappers.<IncidentFile>lambdaQuery().eq(IncidentFile::getIncidentId, id));
+        incidentInstallService.remove(Wrappers.<IncidentInstall>lambdaQuery().eq(IncidentInstall::getIncidentId, id));
+        incidentAcceptanceCheckService.remove(Wrappers.<IncidentAcceptanceCheck>lambdaQuery().eq(IncidentAcceptanceCheck::getIncidentId, id));
+    }
+
+    @Override
+    public IncidentReportAddDto getShowIncidentReport(Integer id) {
+        return baseMapper.getShowIncidentReport(id);
+    }
+
+    @Override
+    public void deleteIncidentReportAll(Integer sparePartsId, Integer fileId, Integer installId, Integer acceptanceCheckId) {
+        if (ObjectUtils.isNotEmpty(sparePartsId)) {
+            incidentSparePartsService.removeById(sparePartsId);
+        }
+        if (ObjectUtils.isNotEmpty(fileId)) {
+            incidentFileService.removeById(fileId);
+        }
+        if (ObjectUtils.isNotEmpty(installId)) {
+            incidentInstallService.removeById(installId);
+        }
+        if (ObjectUtils.isNotEmpty(acceptanceCheckId)) {
+            incidentAcceptanceCheckService.removeById(acceptanceCheckId);
+        }
+    }
+
+    @Override
+    public List<IncidentReportExport> incidentReportExport(Integer deviceId) {
+        return baseMapper.incidentReportExport(deviceId);
+    }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentSparePartsServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentSparePartsServiceImpl.java
new file mode 100644
index 0000000..81ef727
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/requier/service/impl/IncidentSparePartsServiceImpl.java
@@ -0,0 +1,11 @@
+package com.ruoyi.requier.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.requier.mapper.IncidentSparePartsMapper;
+import com.ruoyi.requier.pojo.IncidentSpareParts;
+import com.ruoyi.requier.service.IncidentSparePartsService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class IncidentSparePartsServiceImpl extends ServiceImpl<IncidentSparePartsMapper, IncidentSpareParts> implements IncidentSparePartsService {
+}
diff --git a/cnas-require/src/main/resources/mapper/DeviceMaintenanceMapper.xml b/cnas-require/src/main/resources/mapper/DeviceMaintenanceMapper.xml
index 84c3513..c596bbd 100644
--- a/cnas-require/src/main/resources/mapper/DeviceMaintenanceMapper.xml
+++ b/cnas-require/src/main/resources/mapper/DeviceMaintenanceMapper.xml
@@ -8,7 +8,7 @@
         ,date from device_maintenance
     </select>
 
-<!--    <select id="getDeviceMaintenancePage" resultType="com.yuanchu.mom.pojo.DeviceMaintenance">-->
+<!--    <select id="getDeviceMaintenancePage" resultType="com.ruoyi.requier.pojo.DeviceMaintenance">-->
 <!--        select *-->
 <!--        from device_maintenance dm-->
 <!--        where dm.device_id = #{deviceId}-->
@@ -19,4 +19,4 @@
         from device_maintenance dm
         where dm.device_id = #{deviceId}
     </select>
-</mapper>
\ No newline at end of file
+</mapper>
diff --git a/cnas-require/src/main/resources/mapper/IncidentAcceptanceCheckMapper.xml b/cnas-require/src/main/resources/mapper/IncidentAcceptanceCheckMapper.xml
new file mode 100644
index 0000000..85bfa21
--- /dev/null
+++ b/cnas-require/src/main/resources/mapper/IncidentAcceptanceCheckMapper.xml
@@ -0,0 +1,16 @@
+<?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.requier.mapper.IncidentAcceptanceCheckMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.requier.pojo.IncidentAcceptanceCheck">
+        <id column="acceptance_checkId" property="acceptanceCheckId" />
+        <result column="instrument_module" property="instrumentModule" />
+        <result column="verification_parameter" property="verificationParameter" />
+        <result column="acceptable_limit" property="acceptableLimit" />
+        <result column="verification_result" property="verificationResult" />
+        <result column="verification_conclusion" property="verificationConclusion" />
+        <result column="incident_id" property="incidentId" />
+    </resultMap>
+
+</mapper>
diff --git a/cnas-require/src/main/resources/mapper/IncidentFileMapper.xml b/cnas-require/src/main/resources/mapper/IncidentFileMapper.xml
new file mode 100644
index 0000000..26276cc
--- /dev/null
+++ b/cnas-require/src/main/resources/mapper/IncidentFileMapper.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.requier.mapper.IncidentFileMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.requier.pojo.IncidentFile">
+        <id column="file_id" property="fileId" />
+        <result column="expected_copies" property="expectedCopies" />
+        <result column="actual_copies" property="actualCopies" />
+        <result column="incident_id" property="incidentId" />
+    </resultMap>
+
+</mapper>
diff --git a/cnas-require/src/main/resources/mapper/IncidentInstallMapper.xml b/cnas-require/src/main/resources/mapper/IncidentInstallMapper.xml
new file mode 100644
index 0000000..6e6ff1f
--- /dev/null
+++ b/cnas-require/src/main/resources/mapper/IncidentInstallMapper.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.requier.mapper.IncidentInstallMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.requier.pojo.IncidentInstall">
+        <id column="install_id" property="installId" />
+        <result column="installation_project" property="installationProject" />
+        <result column="installation_situation" property="installationSituation" />
+        <result column="installation_completed" property="installationCompleted" />
+        <result column="incident_id" property="incidentId" />
+    </resultMap>
+
+</mapper>
diff --git a/cnas-require/src/main/resources/mapper/IncidentReportMapper.xml b/cnas-require/src/main/resources/mapper/IncidentReportMapper.xml
new file mode 100644
index 0000000..bb3022b
--- /dev/null
+++ b/cnas-require/src/main/resources/mapper/IncidentReportMapper.xml
@@ -0,0 +1,114 @@
+<?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.requier.mapper.IncidentReportMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.requier.pojo.IncidentReport">
+        <id column="id" property="id" />
+        <result column="process_number" property="processNumber" />
+        <result column="device_id" property="deviceId" />
+        <result column="serial_number" property="serialNumber" />
+        <result column="device_class" property="deviceClass" />
+        <result column="check_outer_packaging" property="checkOuterPackaging" />
+        <result column="file_name" property="fileName" />
+        <result column="system_file_name" property="systemFileName" />
+        <result column="unpacking_acceptance_conclusion" property="unpackingAcceptanceConclusion" />
+        <result column="submit_next_pesponsible" property="submitNextPesponsible" />
+        <result column="submit_remarks" property="submitRemarks" />
+        <result column="submit_operating_personnel" property="submitOperatingPersonnel" />
+        <result column="submit_date" property="submitDate" />
+        <result column="unpacking_review_opinion" property="unpackingReviewOpinion" />
+        <result column="unpacking_next_pesponsible" property="unpackingNextPesponsible" />
+        <result column="unpacking_operating_personnel" property="unpackingOperatingPersonnel" />
+        <result column="unpacking_date" property="unpackingDate" />
+        <result column="install_location" property="installLocation" />
+        <result column="install_remarks" property="installRemarks" />
+        <result column="install_next_pesponsible" property="installNextPesponsible" />
+        <result column="install_operating_personnel" property="installOperatingPersonnel" />
+        <result column="install_date" property="installDate" />
+        <result column="installation_acceptance_compound_opinion" property="installationAcceptanceCompoundOpinion" />
+        <result column="installation_acceptance_next_pesponsible" property="installationAcceptanceNextPesponsible" />
+        <result column="installation_acceptance_operating_personnel" property="installationAcceptanceOperatingPersonnel" />
+        <result column="installation_acceptance_date" property="installationAcceptanceDate" />
+        <result column="acceptance_check_unpacking_conclusion" property="acceptanceCheckUnpackingConclusion" />
+        <result column="acceptance_check_next_pesponsible" property="acceptanceCheckNextPesponsible" />
+        <result column="acceptance_check_operating_personnel" property="acceptanceCheckOperatingPersonnel" />
+        <result column="acceptance_check_date" property="acceptanceCheckDate" />
+        <result column="acceptance_audit_operating_personnel" property="acceptanceAuditOperatingPersonnel" />
+        <result column="acceptance_audit_date" property="acceptanceAuditDate" />
+        <result column="create_user" property="createUser" />
+        <result column="current_state" property="currentState" />
+        <result column="create_time" property="createTime" />
+        <result column="current_responsible" property="currentResponsible" />
+        <result column="acceptance_audit_audit_opinion" property="acceptanceAuditAuditOpinion" />
+    </resultMap>
+
+    <resultMap id="IncidentReportAddDtoMap" type="com.ruoyi.requier.dto.IncidentReportAddDto" extends="BaseResultMap">
+        <result column="device_name" property="deviceName" />
+        <result column="management_number" property="managementNumber" />
+        <result column="manufacturer" property="manufacturer" />
+        <result column="specification_model" property="specificationModel" />
+        <collection property="sparePartsConfirmationList" ofType="com.ruoyi.requier.pojo.IncidentSpareParts">
+            <id column="spare_parts_id" property="sparePartsId" />
+            <result column="name" property="name" />
+            <result column="number" property="number" />
+            <result column="note" property="note" />
+            <result column="incident_id" property="incidentId" />
+        </collection>
+        <collection property="fileClassConfirmationList" ofType="com.ruoyi.requier.pojo.IncidentFile">
+            <id column="file_id" property="fileId" />
+            <result column="expected_copies" property="expectedCopies" />
+            <result column="actual_copies" property="actualCopies" />
+            <result column="incident_id" property="incidentId" />
+        </collection>
+        <collection property="installationAcceptanceRecordList" ofType="com.ruoyi.requier.pojo.IncidentInstall">
+            <id column="install_id" property="installId" />
+            <result column="installation_project" property="installationProject" />
+            <result column="installation_situation" property="installationSituation" />
+            <result column="installation_completed" property="installationCompleted" />
+            <result column="incident_id" property="incidentId" />
+        </collection>
+        <collection property="acceptanceCheckRecordList" ofType="com.ruoyi.requier.pojo.IncidentAcceptanceCheck">
+            <id column="acceptance_check_id" property="acceptanceCheckId" />
+            <result column="instrument_module" property="instrumentModule" />
+            <result column="verification_parameter" property="verificationParameter" />
+            <result column="acceptable_limit" property="acceptableLimit" />
+            <result column="verification_result" property="verificationResult" />
+            <result column="verification_conclusion" property="verificationConclusion" />
+            <result column="incident_id" property="incidentId" />
+        </collection>
+    </resultMap>
+
+    <select id="getByDeviceId" resultType="com.ruoyi.requier.dto.IncidentReportAddDto">
+        select dir.*, d.device_name, d.management_number, u.name submitUser
+        from device_incident_report dir
+                 left join device d on d.id = dir.device_id
+            left join user u on u.id = dir.create_user
+        where dir.device_id = #{deviceId}
+        <if test="processNumber != '' and processNumber != null">
+            and dir.process_number like concat('%', #{processNumber}, '%')
+        </if>
+    </select>
+
+    <select id="getShowIncidentReport" resultMap="IncidentReportAddDtoMap">
+        select dir.*, d.device_name, d.management_number, d.manufacturer, d.specification_model,
+               diac.acceptance_check_id, diac.instrument_module,diac.verification_parameter, diac.acceptable_limit, diac.verification_result, diac.verification_conclusion,
+               disp.spare_parts_id, disp.name, disp.number, disp.note,
+               dif.file_id, dif.expected_copies, dif.actual_copies,
+               dii.install_id, dii.installation_completed, dii.installation_project, dii.installation_situation
+        from device_incident_report dir
+                 left join device d on d.id = dir.device_id
+                 left join device_incident_acceptance_check diac on diac.incident_id = dir.id
+                 left join device_incident_file dif on dif.incident_id = dir.id
+                 left join device_incident_install dii on dii.incident_id = dir.id
+                 left join device_incident_spare_parts disp on disp.incident_id = dir.id
+        where dir.id = #{id}
+    </select>
+
+    <select id="incidentReportExport" resultType="com.ruoyi.requier.excel.IncidentReportExport">
+        select dir.*, d.device_name, d.management_number, d.manufacturer, d.specification_model
+        from device_incident_report dir
+                 left join device d on d.id = dir.device_id
+        where dir.device_id = #{deviceId}
+    </select>
+</mapper>
diff --git a/cnas-require/src/main/resources/mapper/IncidentSparePartsMapper.xml b/cnas-require/src/main/resources/mapper/IncidentSparePartsMapper.xml
new file mode 100644
index 0000000..f790022
--- /dev/null
+++ b/cnas-require/src/main/resources/mapper/IncidentSparePartsMapper.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.requier.mapper.IncidentSparePartsMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.requier.pojo.IncidentSpareParts">
+        <id column="spare_parts_id" property="sparePartsId" />
+        <result column="name" property="name" />
+        <result column="number" property="number" />
+        <result column="note" property="note" />
+        <result column="incident_id" property="incidentId" />
+    </resultMap>
+
+</mapper>
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DepartmentLimsMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DepartmentLimsMapper.java
index 894912e..ba5f12c 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DepartmentLimsMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DepartmentLimsMapper.java
@@ -10,7 +10,7 @@
 * @author z1292
 * @description 閽堝琛ㄣ�恉epartment_lims(閮ㄩ棬鏄庣粏)銆戠殑鏁版嵁搴撴搷浣淢apper
 * @createDate 2024-05-22 14:08:17
-* @Entity com.yuanchu.mom.pojo.DepartmentLims
+* @Entity com.ruoyi.requier.pojo.DepartmentLims
 */
 public interface DepartmentLimsMapper extends BaseMapper<DepartmentLims> {
 

--
Gitblit v1.9.3