From 9b2c4a6e9683a704a872e282eb1deab39f665195 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期六, 15 二月 2025 15:41:19 +0800
Subject: [PATCH] 资源要求-计量溯源性功能迁移

---
 cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceRecordMapper.java                          |   22 
 cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceRecord.java                                  |   78 ++
 cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceRecordService.java                        |   30 +
 cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceService.java                              |   19 
 ruoyi-framework/src/main/java/com/ruoyi/framework/exception/ErrorException.java                                   |    9 
 cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceAcceptanceInspectionService.java          |   16 
 cnas-require/pom.xml                                                                                              |   36 +
 cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceAcceptanceMapper.java                      |   22 
 cnas-require/src/main/java/com/ruoyi/require/service/impl/FeCalibrationScheduleServiceImpl.java                   |   75 ++
 pom.xml                                                                                                           |    1 
 cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceAcceptance.java                              |   86 ++
 cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceRecordServiceImpl.java               |   79 ++
 cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceAcceptanceServiceImpl.java           |  116 ++++
 cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceAcceptanceInspection.java                    |   47 +
 cnas-require/src/main/java/com/ruoyi/require/controller/FeCalibrationScheduleController.java                      |   97 +++
 cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceMapper.java                                |   20 
 cnas-require/src/main/java/com/ruoyi/require/excel/FeStandardSubstanceExcel.java                                  |   54 +
 inspect-server/pom.xml                                                                                            |    5 
 cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceController.java                        |   80 ++
 cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceAcceptanceController.java              |   89 +++
 ruoyi-framework/src/main/java/com/ruoyi/framework/exception/MyFileException.java                                  |   18 
 cnas-require/src/main/java/com/ruoyi/require/dto/AcceptanceDto.java                                               |   15 
 cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceAcceptanceService.java                    |   33 +
 cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceServiceImpl.java                     |   26 
 cnas-require/src/main/java/com/ruoyi/require/vo/SubstanceRecordVo.java                                            |   46 +
 cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceAcceptanceInspectionServiceImpl.java |   20 
 ruoyi-admin/pom.xml                                                                                               |    6 
 cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceAcceptanceInspectionMapper.java            |   16 
 cnas-require/src/main/java/com/ruoyi/require/vo/AcceptanceVo.java                                                 |   46 +
 cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceRecordController.java                  |   63 ++
 cnas-require/src/main/java/com/ruoyi/require/vo/AcceptanceDetailsVo.java                                          |   22 
 cnas-require/src/main/java/com/ruoyi/require/excel/FeCalibrationScheduleExport.java                               |   36 +
 cnas-require/src/main/java/com/ruoyi/require/pojo/FeCalibrationSchedule.java                                      |   85 ++
 cnas-require/src/main/java/com/ruoyi/require/excel/FeLightningProtectionExcel.java                                |   22 
 cnas-require/src/main/java/com/ruoyi/require/service/FeCalibrationScheduleService.java                            |   29 +
 inspect-server/src/main/java/com/ruoyi/basic/util/HackLoopTableRenderPolicy.java                                  |  154 +++++
 cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstance.java                                        |   81 ++
 cnas-require/src/main/java/com/ruoyi/require/mapper/FeCalibrationScheduleMapper.java                              |   20 
 38 files changed, 1,719 insertions(+), 0 deletions(-)

diff --git a/cnas-require/pom.xml b/cnas-require/pom.xml
new file mode 100644
index 0000000..5fda62b
--- /dev/null
+++ b/cnas-require/pom.xml
@@ -0,0 +1,36 @@
+<?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">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.ruoyi</groupId>
+        <artifactId>ruoyi</artifactId>
+        <version>3.8.9</version>
+    </parent>
+
+    <artifactId>cnas-require</artifactId>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-common</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-framework</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>inspect-server</artifactId>
+            <version>3.8.9</version>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/cnas-require/src/main/java/com/ruoyi/require/controller/FeCalibrationScheduleController.java b/cnas-require/src/main/java/com/ruoyi/require/controller/FeCalibrationScheduleController.java
new file mode 100644
index 0000000..efa7963
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/controller/FeCalibrationScheduleController.java
@@ -0,0 +1,97 @@
+package com.ruoyi.require.controller;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.read.listener.PageReadListener;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson2.JSON;
+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.require.excel.FeCalibrationScheduleExport;
+import com.ruoyi.require.pojo.FeCalibrationSchedule;
+import com.ruoyi.require.service.FeCalibrationScheduleService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 02:53:05
+ */
+@Api(tags = "閲忓�兼函婧愯鍒�")
+@RestController
+@RequestMapping("/feCalibrationSchedule")
+public class FeCalibrationScheduleController {
+
+    @Resource
+    private FeCalibrationScheduleService feCalibrationScheduleService;
+
+    @ApiOperation(value = "閲忓�兼函婧愯鍒掓煡璇�")
+    @GetMapping("/getPageCalibrationSchedule")
+    public Result<IPage<FeCalibrationSchedule>> getPageCalibrationSchedule(Page page, String instrumentName, String managementNumber) {
+        IPage<FeCalibrationSchedule> ipage = feCalibrationScheduleService.page(page,instrumentName, managementNumber);
+        return Result.success(ipage);
+    }
+
+    @ApiOperation(value = "閲忓�兼函婧愯鍒掓柊澧炵紪杈�")
+    @PostMapping("/addCalibrationSchedule")
+    public Result addCalibrationSchedule(@RequestBody FeCalibrationSchedule feCalibrationSchedule) {
+        return Result.success(feCalibrationScheduleService.saveOrUpdate(feCalibrationSchedule));
+    }
+
+    @ApiOperation(value = "閲忓�兼函婧愯鍒掑垹闄�")
+    @GetMapping("/removeCalibrationSchedule")
+    public Result removeCalibrationSchedule(Integer id) {
+        return Result.success(feCalibrationScheduleService.removeById(id));
+    }
+
+
+    @ApiOperation(value = "閲忓�兼函婧愯鍒掑鍑�")
+    @PostMapping("exportOfValueTraceabilityPlan")
+    public void exportOfValueTraceabilityPlan(String instrumentName, String managementNumber,
+                                       HttpServletResponse response) throws Exception {
+        IPage<FeCalibrationSchedule> data = feCalibrationScheduleService.page(new Page<>(1, -1),instrumentName, managementNumber);
+        List<FeCalibrationScheduleExport> studentList  = JSONObject.parseArray(JSON.toJSONString(data.getRecords()), FeCalibrationScheduleExport.class);
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setHeader("requestType", "excel");
+        response.setHeader("Access-Control-Expose-Headers", "requestType");
+        // 璁剧疆鍗曞厓鏍兼牱寮�
+        // 淇濆瓨鍒扮涓�涓猻heet涓�
+        EasyExcel.write(response.getOutputStream())
+                .head(FeCalibrationScheduleExport.class)
+                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 鑷�傚簲鍒楀
+                .sheet("sheet")
+                .doWrite(studentList);
+    }
+
+    @ApiOperation(value = "importOfValueTraceabilityPlan")
+    @PostMapping("/importOfValueTraceabilityPlan")
+    public void importOfValueTraceabilityPlan(MultipartFile file) throws IOException {
+        if (file.isEmpty()) {
+            return;
+        }
+        EasyExcel.read(file.getInputStream(), FeCalibrationScheduleExport.class, new PageReadListener<FeCalibrationScheduleExport>(dataList -> {
+            List<FeCalibrationSchedule> studentList  = JSONObject.parseArray(JSON.toJSONString(dataList), FeCalibrationSchedule.class);
+            feCalibrationScheduleService.saveOrUpdateBatch(studentList);
+        })).sheet().doRead();
+    }
+
+
+//    Equipment quantity traceability management
+    @ApiOperation(value = "閲忓�兼函婧愯鍒掑鍑簑ord")
+    @GetMapping("/exportWordOfValueTraceabilityPlan")
+    public void exportWordOfValueTraceabilityPlan(HttpServletResponse response) throws IOException {
+        feCalibrationScheduleService.exportWordOfValueTraceabilityPlan(response);
+    }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceAcceptanceController.java b/cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceAcceptanceController.java
new file mode 100644
index 0000000..0e5d823
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceAcceptanceController.java
@@ -0,0 +1,89 @@
+package com.ruoyi.require.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.require.dto.AcceptanceDto;
+import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
+import com.ruoyi.require.service.FeStandardSubstanceAcceptanceInspectionService;
+import com.ruoyi.require.service.FeStandardSubstanceAcceptanceService;
+import com.ruoyi.require.vo.AcceptanceVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川楠屾敹 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-14 03:29:41
+ */
+@Api(tags = "鏍囧噯鐗╄川楠屾敹")
+@RestController
+@RequestMapping("/feStandardSubstanceAcceptance")
+public class FeStandardSubstanceAcceptanceController {
+
+    @Autowired
+    private FeStandardSubstanceAcceptanceInspectionService inspectionService;
+    @Resource
+    private FeStandardSubstanceAcceptanceService feStandardSubstanceAcceptanceService;
+
+    @ApiOperation(value = "鏂板")
+    @PostMapping("/addAcceptance")
+    @Transactional
+    public Result addAcceptance(@RequestBody AcceptanceDto dto) {
+        feStandardSubstanceAcceptanceService.addAcceptance(dto);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鏍囧噯鐗╄川楠屾敹鏌ヨ")
+    @GetMapping("/getPageAcceptance")
+    public Result<IPage<AcceptanceVo>> getPageAcceptance(Page page, String name) {
+        IPage<AcceptanceVo> ipage = feStandardSubstanceAcceptanceService.getPageAcceptance(page, name);
+        return Result.success(ipage);
+    }
+
+    @ApiOperation(value = "鏍囧噯鐗╄川楠屾敹鍒犻櫎")
+    @GetMapping("/deleteAcceptance/{id}")
+    public Result deleteAcceptance(@PathVariable("id") Integer id) {
+        return Result.success(feStandardSubstanceAcceptanceService.deleteAcceptance(id));
+    }
+
+    @ApiOperation(value = "缂栬緫")
+    @PostMapping("/updateAcceptance")
+    public Result updateAcceptance(@RequestBody AcceptanceDto acceptanceDto) {
+        feStandardSubstanceAcceptanceService.updateById(acceptanceDto.getAcceptance());
+        for (FeStandardSubstanceAcceptanceInspection v : acceptanceDto.getList()) {
+            if (v.getId()== null) {
+                inspectionService.save(v);
+            }else {
+                inspectionService.updateById(v);
+            }
+        }
+        return Result.success();
+    }
+
+
+    @ApiOperation(value = "鏍囧噯鐗╄川楠屾敹鏌ヨ")
+    @GetMapping("/getAcceptanceDetails")
+    public Result getAcceptanceDetails(Integer id) {
+        return Result.success(feStandardSubstanceAcceptanceService.getAcceptanceDetails(id));
+    }
+
+    @ApiOperation("瀵煎嚭鏍囧噯鐗╄川楠屾敹")
+    @GetMapping("/exportFeStandardSubstanceAcceptance")
+    public Result exportFeStandardSubstanceAcceptance(HttpServletResponse response) {
+        feStandardSubstanceAcceptanceService.exportFeStandardSubstanceAcceptance(response);
+
+        return Result.success();
+    }
+
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceController.java b/cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceController.java
new file mode 100644
index 0000000..8ccee1b
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceController.java
@@ -0,0 +1,80 @@
+package com.ruoyi.require.controller;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson2.JSON;
+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.require.excel.FeStandardSubstanceExcel;
+import com.ruoyi.require.pojo.FeStandardSubstance;
+import com.ruoyi.require.service.FeStandardSubstanceService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川娓呭崟 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 03:58:59
+ */
+@Api(tags = "鏍囧噯鐗╄川娓呭崟")
+@RestController
+@RequestMapping("/feStandardSubstance")
+public class FeStandardSubstanceController {
+
+
+    @Resource
+    private FeStandardSubstanceService feStandardSubstanceService;
+
+    @ApiOperation(value = "鏍囧噯鐗╄川娓呭崟鏌ヨ")
+    @GetMapping("/getPageStandardSubstance")
+    public Result<IPage<FeStandardSubstance>> getPageStandardSubstance(Page page, FeStandardSubstance feStandardSubstance) {
+        IPage<FeStandardSubstance> ipage = feStandardSubstanceService.page(page, feStandardSubstance);
+        return Result.success(ipage);
+    }
+
+    @ApiOperation(value = "鏍囧噯鐗╄川娓呭崟鏂板缂栬緫")
+    @PostMapping("/addStandardSubstance")
+    public Result addStandardSubstance(@RequestBody FeStandardSubstance feStandardSubstance) {
+        return Result.success(feStandardSubstanceService.saveOrUpdate(feStandardSubstance));
+    }
+
+    @ApiOperation(value = "鏍囧噯鐗╄川娓呭崟鍒犻櫎")
+    @GetMapping("/removeStandardSubstance")
+    public Result removeStandardSubstance(Integer id) {
+        return Result.success(feStandardSubstanceService.removeById(id));
+    }
+
+    @ApiOperation(value = "鏍囧噯鐗╄川娓呭崟鏌ヨ鎵�鏈�")
+    @GetMapping("/getStandardSubstanceAll")
+    public Result<List<FeStandardSubstance>> getStandardSubstanceAll( ) {
+        return Result.success(feStandardSubstanceService.list());
+    }
+
+    @ApiOperation(value = "鏍囧噯鐗╄川娓呭崟瀵煎嚭")
+    @GetMapping("exportOfStandardSubstanceList")
+    public void exportOfStandardSubstanceList(FeStandardSubstance feStandardSubstance,
+                                              HttpServletResponse response) throws Exception {
+        IPage<FeStandardSubstance> ipage = feStandardSubstanceService.page(new Page<>(1, -1), feStandardSubstance);
+        List<FeStandardSubstanceExcel> studentList  = JSONObject.parseArray(JSON.toJSONString(ipage.getRecords()), FeStandardSubstanceExcel.class);
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setHeader("requestType", "excel");
+        response.setHeader("Access-Control-Expose-Headers", "requestType");
+        // 璁剧疆鍗曞厓鏍兼牱寮�
+        // 淇濆瓨鍒扮涓�涓猻heet涓�
+        EasyExcel.write(response.getOutputStream())
+                .head(FeStandardSubstanceExcel.class)
+                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 鑷�傚簲鍒楀
+                .sheet("sheet")
+                .doWrite(studentList);
+    }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceRecordController.java b/cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceRecordController.java
new file mode 100644
index 0000000..b2bcf7a
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceRecordController.java
@@ -0,0 +1,63 @@
+package com.ruoyi.require.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.require.pojo.FeStandardSubstanceRecord;
+import com.ruoyi.require.service.FeStandardSubstanceRecordService;
+import com.ruoyi.require.vo.SubstanceRecordVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川娓呭崟鍊熺敤褰掕繕璁板綍琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-14 01:49:11
+ */
+@Api(tags = "鏍囧噯鐗╄川娓呭崟鍊熺敤褰掕繕璁板綍")
+@RestController
+@RequestMapping("/feStandardSubstanceRecord")
+public class FeStandardSubstanceRecordController {
+
+    @Resource
+    private FeStandardSubstanceRecordService feStandardSubstanceRecordService;
+
+    @ApiOperation(value = "鏍囧噯鐗╄川娓呭崟鍊熺敤")
+    @PostMapping("/borrowSubstance")
+    @Transactional
+    public Result borrowSubstance(@RequestBody FeStandardSubstanceRecord record) {
+        feStandardSubstanceRecordService.borrowSubstance(record);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鏍囧噯鐗╄川娓呭崟褰掕繕")
+    @PostMapping("/returnSubstance")
+    @Transactional
+    public Result returnSubstance(@RequestBody FeStandardSubstanceRecord record) {
+        feStandardSubstanceRecordService.returnSubstance(record);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鏍囧噯鐗╄川娓呭崟棰嗙敤鏌ヨ")
+    @PostMapping("/getSubstanceRecord")
+    public Result getSubstanceRecord(Integer id) {
+        return Result.success(feStandardSubstanceRecordService.getSubstanceRecord(id));
+    }
+
+    @ApiOperation(value = "鍒嗛〉鏌ヨ")
+    @PostMapping("/getPageSubstanceRecord")
+    public Result<IPage<SubstanceRecordVo>> getPageSubstanceRecord(Page page, @RequestBody SubstanceRecordVo vo) {
+        IPage<SubstanceRecordVo> ipage = feStandardSubstanceRecordService.getPage(page,vo);
+        return Result.success(ipage);
+    }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/dto/AcceptanceDto.java b/cnas-require/src/main/java/com/ruoyi/require/dto/AcceptanceDto.java
new file mode 100644
index 0000000..a369361
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/dto/AcceptanceDto.java
@@ -0,0 +1,15 @@
+package com.ruoyi.require.dto;
+
+import com.ruoyi.require.pojo.FeStandardSubstanceAcceptance;
+import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AcceptanceDto {
+
+    private FeStandardSubstanceAcceptance acceptance;
+
+    private List<FeStandardSubstanceAcceptanceInspection> list;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/excel/FeCalibrationScheduleExport.java b/cnas-require/src/main/java/com/ruoyi/require/excel/FeCalibrationScheduleExport.java
new file mode 100644
index 0000000..5048365
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/excel/FeCalibrationScheduleExport.java
@@ -0,0 +1,36 @@
+package com.ruoyi.require.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class FeCalibrationScheduleExport {
+    @ExcelProperty("浠櫒鍚嶇О")
+    private String instrumentName;
+
+    @ExcelProperty("瑙勬牸鍨嬪彿")
+    private String model;
+
+    @ExcelProperty("绠$悊缂栧彿")
+    private Integer managementNumber;
+
+    @ExcelProperty("鎶�鏈寚鏍�")
+    private String technicalIndicators;
+
+    @ExcelProperty("妫�瀹氬懆鏈�")
+    private String verificationCyde;
+
+    @ExcelProperty("妫�瀹氬崟浣�")
+    private String verificationUnit;
+
+    @ExcelProperty("鏈�杩戞瀹氭椂闂�")
+    private LocalDateTime recentlyTime;
+
+    @ExcelProperty("璁″垝涓嬫妫�瀹氭椂闂�")
+    private LocalDateTime nextTime;
+
+    @ExcelProperty("澶囨敞")
+    private String remark;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/excel/FeLightningProtectionExcel.java b/cnas-require/src/main/java/com/ruoyi/require/excel/FeLightningProtectionExcel.java
new file mode 100644
index 0000000..b47e79a
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/excel/FeLightningProtectionExcel.java
@@ -0,0 +1,22 @@
+package com.ruoyi.require.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+@Data
+public class FeLightningProtectionExcel {
+    @ExcelProperty("鍘熸枃浠跺悕")
+    private String fileName;
+
+    @ExcelProperty("妫�娴嬫棩鏈�")
+    private String detectionDate;
+
+    @ExcelProperty("鏈夋晥鏈�")
+    private String termValidity;
+
+    @ExcelProperty("妫�娴嬪崟浣�")
+    private String detectionUnit;
+
+    @ExcelProperty("鍒涘缓鏃堕棿")
+    private String createTime;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/excel/FeStandardSubstanceExcel.java b/cnas-require/src/main/java/com/ruoyi/require/excel/FeStandardSubstanceExcel.java
new file mode 100644
index 0000000..2f0691c
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/excel/FeStandardSubstanceExcel.java
@@ -0,0 +1,54 @@
+package com.ruoyi.require.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class FeStandardSubstanceExcel {
+    @ExcelProperty("鏍囧噯鐗╄川鍚嶇О")
+    private String name;
+
+    @ExcelProperty("瑙勬牸鍨嬪彿")
+    private String model;
+
+    @ExcelProperty("鐢熶骇鍘傚")
+    private String factoryManufacturer;
+
+    @ExcelProperty("鍑哄満缂栧彿")
+    private String factoryNum;
+
+    @ExcelProperty("绠$悊缂栧彿")
+    private String manageNum;
+
+    @ExcelProperty("涓嶇‘瀹氬害")
+    private String uncertainty;
+
+    @ExcelProperty("鏁伴噺")
+    private Long quantity;
+
+    @ExcelProperty("璐疆鏃ユ湡")
+    private LocalDateTime acquisitionDate;
+
+    @ExcelProperty("鏈夋晥鏈�")
+    private LocalDateTime effectiveDate;
+
+    @ExcelProperty("鏂囨。缂栧彿")
+    private String fileNum;
+
+    @ExcelProperty("瀛樻斁浣嶇疆")
+    private String position;
+
+    @ExcelProperty("鍊熻皟鐘舵��")
+    private Integer state;
+
+    @ExcelProperty("澶囨敞")
+    private String remark;
+
+    @ExcelProperty("鍒涘缓浜�")
+    private String createUser;
+
+    @ExcelProperty("鍒涘缓鏃ユ湡")
+    private LocalDateTime createTime;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/FeCalibrationScheduleMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeCalibrationScheduleMapper.java
new file mode 100644
index 0000000..9527638
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeCalibrationScheduleMapper.java
@@ -0,0 +1,20 @@
+package com.ruoyi.require.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.require.pojo.FeCalibrationSchedule;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 02:53:05
+ */
+public interface FeCalibrationScheduleMapper extends BaseMapper<FeCalibrationSchedule> {
+
+    IPage<FeCalibrationSchedule> ipage(Page page, @Param("instrumentName") String instrumentName, @Param("managementNumber") String managementNumber);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceAcceptanceInspectionMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceAcceptanceInspectionMapper.java
new file mode 100644
index 0000000..d65993b
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceAcceptanceInspectionMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.require.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
+
+/**
+ * <p>
+ * 楠屾敹寮�绠辫褰� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-14 03:30:09
+ */
+public interface FeStandardSubstanceAcceptanceInspectionMapper extends BaseMapper<FeStandardSubstanceAcceptanceInspection> {
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceAcceptanceMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceAcceptanceMapper.java
new file mode 100644
index 0000000..cc14a6c
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceAcceptanceMapper.java
@@ -0,0 +1,22 @@
+package com.ruoyi.require.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.require.pojo.FeStandardSubstanceAcceptance;
+import com.ruoyi.require.vo.AcceptanceVo;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川楠屾敹 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-14 03:29:41
+ */
+public interface FeStandardSubstanceAcceptanceMapper extends BaseMapper<FeStandardSubstanceAcceptance> {
+
+
+    IPage<AcceptanceVo> getPageAcceptance(Page page, @Param("name")String name);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceMapper.java
new file mode 100644
index 0000000..2340206
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceMapper.java
@@ -0,0 +1,20 @@
+package com.ruoyi.require.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.require.pojo.FeStandardSubstance;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川娓呭崟 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 03:58:59
+ */
+public interface FeStandardSubstanceMapper extends BaseMapper<FeStandardSubstance> {
+
+    IPage<FeStandardSubstance> getPage(Page page,@Param("ew")FeStandardSubstance feStandardSubstance);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceRecordMapper.java b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceRecordMapper.java
new file mode 100644
index 0000000..c847574
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceRecordMapper.java
@@ -0,0 +1,22 @@
+package com.ruoyi.require.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.require.pojo.FeStandardSubstanceRecord;
+import com.ruoyi.require.vo.SubstanceRecordVo;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川娓呭崟鍊熺敤褰掕繕璁板綍琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-14 01:49:11
+ */
+public interface FeStandardSubstanceRecordMapper extends BaseMapper<FeStandardSubstanceRecord> {
+
+
+    IPage<SubstanceRecordVo> getPage(Page page,@Param("ew") SubstanceRecordVo vo);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/FeCalibrationSchedule.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeCalibrationSchedule.java
new file mode 100644
index 0000000..8cbbfea
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeCalibrationSchedule.java
@@ -0,0 +1,85 @@
+package com.ruoyi.require.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-11-13 02:53:05
+ */
+@Getter
+@Setter
+@TableName("cnas_fe_calibration_schedule")
+@ApiModel(value = "FeCalibrationSchedule瀵硅薄", description = "浠櫒璁惧妫�瀹�/鏍″噯璁″垝琛�")
+public class FeCalibrationSchedule implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("浠櫒鍚嶇О")
+    private String instrumentName;
+
+    @ApiModelProperty("瑙勬牸鍨嬪彿")
+    private String model;
+
+    @ApiModelProperty("绠$悊缂栧彿")
+    private String managementNumber;
+
+    @ApiModelProperty("鎶�鏈寚鏍�")
+    private String technicalIndicators;
+
+    @ApiModelProperty("妫�瀹氬懆鏈�")
+    private String verificationCyde;
+
+    @ApiModelProperty("妫�瀹氬崟浣�")
+    private String verificationUnit;
+
+    @ApiModelProperty("鏈�杩戞瀹氭椂闂�")
+    private LocalDateTime recentlyTime;
+
+    @ApiModelProperty("璁″垝涓嬫妫�瀹氭椂闂�")
+    private LocalDateTime nextTime;
+
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    @ApiModelProperty("缂栧埗")
+    private String organization;
+
+    @ApiModelProperty("缂栧埗鏃ユ湡")
+    private LocalDateTime organizationDate;
+
+    @ApiModelProperty("鎵瑰噯")
+    private String approve;
+
+    @ApiModelProperty("鎵瑰噯鏃ユ湡")
+    private LocalDateTime approveDate;
+
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("搴忓彿id, 瀵煎嚭浣跨敤")
+    @TableField(exist = false, select = false)
+    private Integer index;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstance.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstance.java
new file mode 100644
index 0000000..0cd1cb7
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstance.java
@@ -0,0 +1,81 @@
+package com.ruoyi.require.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-11-13 03:58:59
+ */
+@Getter
+@Setter
+@TableName("cnas_fe_standard_substance")
+@ApiModel(value = "FeStandardSubstance瀵硅薄", description = "鏍囧噯鐗╄川娓呭崟")
+public class FeStandardSubstance implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鏍囧噯鐗╄川鍚嶇О")
+    private String name;
+
+    @ApiModelProperty("瑙勬牸鍨嬪彿")
+    private String model;
+
+    @ApiModelProperty("鐢熶骇鍘傚")
+    private String factoryManufacturer;
+
+    @ApiModelProperty("鍑哄満缂栧彿")
+    private String factoryNum;
+
+    @ApiModelProperty("绠$悊缂栧彿")
+    private String manageNum;
+
+    @ApiModelProperty("涓嶇‘瀹氬害")
+    private String uncertainty;
+
+    @ApiModelProperty("鏁伴噺")
+    private Long quantity;
+
+    @ApiModelProperty("璐疆鏃ユ湡")
+    private LocalDateTime acquisitionDate;
+
+    @ApiModelProperty("鏈夋晥鏈�")
+    private LocalDateTime effectiveDate;
+
+    @ApiModelProperty("鏂囨。缂栧彿")
+    private String fileNum;
+
+    @ApiModelProperty("瀛樻斁浣嶇疆")
+    private String position;
+
+    @ApiModelProperty("鍊熻皟鐘舵�侊紙0:鏈�熻皟 1:宸插�熻皟锛�")
+    private Integer state;
+
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceAcceptance.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceAcceptance.java
new file mode 100644
index 0000000..d6d10b0
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceAcceptance.java
@@ -0,0 +1,86 @@
+package com.ruoyi.require.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 org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川楠屾敹
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-14 03:29:41
+ */
+@Getter
+@Setter
+@TableName("cnas_fe_standard_substance_acceptance")
+@ApiModel(value = "FeStandardSubstanceAcceptance瀵硅薄", description = "鏍囧噯鐗╄川楠屾敹")
+public class FeStandardSubstanceAcceptance implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("娓呭崟id")
+    @ExcelProperty("娓呭崟id")
+    private Integer substanceId;
+
+    @ApiModelProperty("鍒拌揣鏃ユ湡")
+    @ExcelProperty("鍒拌揣鏃ユ湡")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private LocalDate arriveDate;
+
+    @ApiModelProperty("缁翠慨鍗曚綅")
+    @ExcelProperty("缁翠慨鍗曚綅")
+    private String maintenanceUnit;
+
+    @ApiModelProperty("鍙傛暟")
+    @ExcelProperty("鍙傛暟")
+    private String perameters;
+
+    @ApiModelProperty("瀹夎璋冭瘯鎯呭喌")
+    @ExcelProperty("瀹夎璋冭瘯鎯呭喌")
+    private String installation;
+
+    @ApiModelProperty("楠屾敹鎯呭喌")
+    @ExcelProperty("楠屾敹鎯呭喌")
+    private String situation;
+
+    @ApiModelProperty("鎺ュ彈绛惧瓧")
+    @ExcelProperty("鎺ュ彈绛惧瓧")
+    private String signature;
+
+    @ApiModelProperty("鍘傚浠h〃")
+    @ExcelProperty("鍘傚浠h〃")
+    private String producer;
+
+    @ApiModelProperty("鎺ユ敹浜�")
+    @ExcelProperty("鎺ユ敹浜�")
+    private String recipient;
+
+    @ApiModelProperty("闄勪欢")
+    @ExcelProperty("闄勪欢")
+    private String file;
+
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceAcceptanceInspection.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceAcceptanceInspection.java
new file mode 100644
index 0000000..50adcc3
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceAcceptanceInspection.java
@@ -0,0 +1,47 @@
+package com.ruoyi.require.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 楠屾敹寮�绠辫褰�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-14 03:30:09
+ */
+@Getter
+@Setter
+@TableName("cnas_fe_standard_substance_acceptance_inspection")
+@ApiModel(value = "FeStandardSubstanceAcceptanceInspection瀵硅薄", description = "楠屾敹寮�绠辫褰�")
+public class FeStandardSubstanceAcceptanceInspection implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    private Integer acceptanceId;
+
+    private String name;
+
+    private Integer number;
+
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceRecord.java b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceRecord.java
new file mode 100644
index 0000000..da5fa7c
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceRecord.java
@@ -0,0 +1,78 @@
+package com.ruoyi.require.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-11-14 01:49:11
+ */
+@Getter
+@Setter
+@TableName("cnas_fe_standard_substance_record")
+@ApiModel(value = "FeStandardSubstanceRecord瀵硅薄", description = "鏍囧噯鐗╄川娓呭崟鍊熺敤褰掕繕璁板綍琛�")
+public class FeStandardSubstanceRecord implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鐗╄川id")
+    private Integer substanceId;
+
+    @ApiModelProperty("鍊熺敤-瀹屽ソ鎬�")
+    private String integrity;
+
+    @ApiModelProperty("鍊熺敤-鍊熺敤浜�")
+    private String borrowUser;
+
+    @ApiModelProperty("鍊熺敤-鑱旂郴鏂瑰紡")
+    private String phone;
+
+    @ApiModelProperty("鍊熺敤-鍊熷嚭鏃ユ湡")
+    private LocalDateTime borrowDate;
+
+    @ApiModelProperty("褰掕繕鏃ユ湡")
+    private LocalDateTime borrowReturnDate;
+
+    @ApiModelProperty("鍊熷嚭浜�")
+    private String lender;
+
+    @ApiModelProperty("褰掕繕-妫�鏌ヤ汉")
+    private String rummager;
+
+    @ApiModelProperty("0锛氬�熺敤 1:褰掕繕")
+    private String status;
+
+    @ApiModelProperty("褰掕繕浜�")
+    private String returnedPerson;
+
+    @ApiModelProperty("褰掕繕-鏃ユ湡")
+    private LocalDateTime returnDate;
+
+    @ApiModelProperty("褰掕繕-瀹屽ソ鎬�")
+    private String returnIntegrity;
+
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/FeCalibrationScheduleService.java b/cnas-require/src/main/java/com/ruoyi/require/service/FeCalibrationScheduleService.java
new file mode 100644
index 0000000..aaebd46
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/FeCalibrationScheduleService.java
@@ -0,0 +1,29 @@
+package com.ruoyi.require.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.require.pojo.FeCalibrationSchedule;
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 02:53:05
+ */
+public interface FeCalibrationScheduleService extends IService<FeCalibrationSchedule> {
+
+
+    IPage<FeCalibrationSchedule> page(Page page,String instrumentName, String managementNumber);
+
+    /**
+     * 閲忓�兼函婧愯鍒掑鍑簑ord
+     *
+     * @param response 鍝嶅簲娣诲姞word
+     */
+    void exportWordOfValueTraceabilityPlan(HttpServletResponse response);
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceAcceptanceInspectionService.java b/cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceAcceptanceInspectionService.java
new file mode 100644
index 0000000..ea02235
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceAcceptanceInspectionService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.require.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
+
+/**
+ * <p>
+ * 楠屾敹寮�绠辫褰� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-14 03:30:09
+ */
+public interface FeStandardSubstanceAcceptanceInspectionService extends IService<FeStandardSubstanceAcceptanceInspection> {
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceAcceptanceService.java b/cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceAcceptanceService.java
new file mode 100644
index 0000000..ba3a70e
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceAcceptanceService.java
@@ -0,0 +1,33 @@
+package com.ruoyi.require.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.require.dto.AcceptanceDto;
+import com.ruoyi.require.pojo.FeStandardSubstanceAcceptance;
+import com.ruoyi.require.vo.AcceptanceDetailsVo;
+import com.ruoyi.require.vo.AcceptanceVo;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川楠屾敹 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-14 03:29:41
+ */
+public interface FeStandardSubstanceAcceptanceService extends IService<FeStandardSubstanceAcceptance> {
+
+
+    void addAcceptance(AcceptanceDto dto);
+
+    IPage<AcceptanceVo> getPageAcceptance(Page page, String name);
+
+    AcceptanceDetailsVo getAcceptanceDetails(Integer id);
+
+    Integer deleteAcceptance(Integer id);
+
+    void exportFeStandardSubstanceAcceptance(HttpServletResponse response);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceRecordService.java b/cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceRecordService.java
new file mode 100644
index 0000000..a77f503
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceRecordService.java
@@ -0,0 +1,30 @@
+package com.ruoyi.require.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.require.pojo.FeStandardSubstanceRecord;
+import com.ruoyi.require.vo.SubstanceRecordVo;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川娓呭崟鍊熺敤褰掕繕璁板綍琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-14 01:49:11
+ */
+public interface FeStandardSubstanceRecordService extends IService<FeStandardSubstanceRecord> {
+
+
+    void borrowSubstance(FeStandardSubstanceRecord feStandardSubstanceRecord);
+
+    void returnSubstance(FeStandardSubstanceRecord feStandardSubstanceRecord);
+
+    List<FeStandardSubstanceRecord> getSubstanceRecord(Integer id);
+
+    IPage<SubstanceRecordVo> getPage(Page page, SubstanceRecordVo vo);
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceService.java b/cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceService.java
new file mode 100644
index 0000000..374db35
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceService.java
@@ -0,0 +1,19 @@
+package com.ruoyi.require.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.require.pojo.FeStandardSubstance;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川娓呭崟 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 03:58:59
+ */
+public interface FeStandardSubstanceService extends IService<FeStandardSubstance> {
+
+    IPage<FeStandardSubstance> page(Page page, FeStandardSubstance feStandardSubstance);
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeCalibrationScheduleServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeCalibrationScheduleServiceImpl.java
new file mode 100644
index 0000000..80f9f06
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeCalibrationScheduleServiceImpl.java
@@ -0,0 +1,75 @@
+package com.ruoyi.require.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.basic.util.HackLoopTableRenderPolicy;
+import com.ruoyi.require.mapper.FeCalibrationScheduleMapper;
+import com.ruoyi.require.pojo.FeCalibrationSchedule;
+import com.ruoyi.require.service.FeCalibrationScheduleService;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 02:53:05
+ */
+@Service
+public class FeCalibrationScheduleServiceImpl extends ServiceImpl<FeCalibrationScheduleMapper, FeCalibrationSchedule> implements FeCalibrationScheduleService {
+
+    @Override
+    public IPage<FeCalibrationSchedule> page(Page page, String instrumentName, String managementNumber) {
+        IPage<FeCalibrationSchedule> ipage = this.baseMapper.ipage(page,instrumentName, managementNumber);
+        return ipage;
+    }
+
+    @Override
+    public void exportWordOfValueTraceabilityPlan(HttpServletResponse response) {
+        List<FeCalibrationSchedule> feCalibrationSchedules = this.baseMapper.selectList(null);
+
+        int size = feCalibrationSchedules.size();
+        for (int i = 0; i < size; i++) {
+            FeCalibrationSchedule feCalibrationSchedule = feCalibrationSchedules.get(i);
+            feCalibrationSchedule.setIndex(i + 1);
+        }
+
+        // 鑾峰彇璺緞
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/value-traceability-plan.docx");
+        Configure configure = Configure.builder()
+                .bind("feCalibrationSchedule", new HackLoopTableRenderPolicy())
+                .build();
+        FeCalibrationSchedule feCalibrationSchedule = size > 0 ? feCalibrationSchedules.get(0) : null;
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+                new HashMap<String, Object>() {{
+                    put("feCalibrationSchedule", feCalibrationSchedules);
+                }}
+        );
+
+        try {
+            response.setContentType("application/msword");
+            String fileName = URLEncoder.encode(
+                    "浠櫒璁惧閲忓�兼函婧愮鐞嗘�讳綋璁″垝", "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-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceAcceptanceInspectionServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceAcceptanceInspectionServiceImpl.java
new file mode 100644
index 0000000..1e2cd6e
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceAcceptanceInspectionServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.require.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.require.mapper.FeStandardSubstanceAcceptanceInspectionMapper;
+import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
+import com.ruoyi.require.service.FeStandardSubstanceAcceptanceInspectionService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 楠屾敹寮�绠辫褰� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-14 03:30:09
+ */
+@Service
+public class FeStandardSubstanceAcceptanceInspectionServiceImpl extends ServiceImpl<FeStandardSubstanceAcceptanceInspectionMapper, FeStandardSubstanceAcceptanceInspection> implements FeStandardSubstanceAcceptanceInspectionService {
+
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceAcceptanceServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceAcceptanceServiceImpl.java
new file mode 100644
index 0000000..291b440
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceAcceptanceServiceImpl.java
@@ -0,0 +1,116 @@
+package com.ruoyi.require.service.impl;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.require.dto.AcceptanceDto;
+import com.ruoyi.require.mapper.FeStandardSubstanceAcceptanceInspectionMapper;
+import com.ruoyi.require.mapper.FeStandardSubstanceAcceptanceMapper;
+import com.ruoyi.require.mapper.FeStandardSubstanceMapper;
+import com.ruoyi.require.pojo.FeStandardSubstance;
+import com.ruoyi.require.pojo.FeStandardSubstanceAcceptance;
+import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
+import com.ruoyi.require.service.FeStandardSubstanceAcceptanceInspectionService;
+import com.ruoyi.require.service.FeStandardSubstanceAcceptanceService;
+import com.ruoyi.require.vo.AcceptanceDetailsVo;
+import com.ruoyi.require.vo.AcceptanceVo;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.List;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川楠屾敹 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-14 03:29:41
+ */
+@Service
+public class FeStandardSubstanceAcceptanceServiceImpl extends ServiceImpl<FeStandardSubstanceAcceptanceMapper, FeStandardSubstanceAcceptance> implements FeStandardSubstanceAcceptanceService {
+
+    @Resource
+    private FeStandardSubstanceAcceptanceInspectionMapper feStandardSubstanceAcceptanceInspectionMapper;
+    @Resource
+    private FeStandardSubstanceAcceptanceInspectionService feStandardSubstanceAcceptanceInspectionService;
+    @Resource
+    private FeStandardSubstanceMapper feStandardSubstanceMapper;
+
+
+
+    @Override
+    public void addAcceptance(AcceptanceDto dto) {
+        FeStandardSubstanceAcceptance acceptance = dto.getAcceptance();
+        this.baseMapper.insert(acceptance);
+        List<FeStandardSubstanceAcceptanceInspection> list = dto.getList();
+        if (CollectionUtils.isNotEmpty(list)) {
+            list.forEach(v -> {
+                v.setAcceptanceId(acceptance.getId());
+            });
+            feStandardSubstanceAcceptanceInspectionService.saveBatch(list);
+        }
+    }
+
+    @Override
+    public IPage<AcceptanceVo> getPageAcceptance(Page page, String name) {
+        return this.baseMapper.getPageAcceptance(page,name);
+    }
+
+    @Override
+    public AcceptanceDetailsVo getAcceptanceDetails(Integer id) {
+        FeStandardSubstanceAcceptance acceptance = this.baseMapper.selectById(id);
+        FeStandardSubstance substance = feStandardSubstanceMapper.selectById(acceptance.getSubstanceId());
+        QueryWrapper<FeStandardSubstanceAcceptanceInspection> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("acceptance_id",id);
+        List<FeStandardSubstanceAcceptanceInspection> list = feStandardSubstanceAcceptanceInspectionMapper.selectList(queryWrapper);
+        AcceptanceDetailsVo vo = new AcceptanceDetailsVo();
+        vo.setSubstance(substance);
+        vo.setAcceptance(acceptance);
+        vo.setList(list);
+        return vo;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Integer deleteAcceptance(Integer id) {
+        feStandardSubstanceAcceptanceInspectionMapper.delete(new QueryWrapper<FeStandardSubstanceAcceptanceInspection>()
+                .lambda().eq(FeStandardSubstanceAcceptanceInspection::getAcceptanceId,id));
+        return this.baseMapper.deleteById(id);
+    }
+
+    @Override
+    public void exportFeStandardSubstanceAcceptance(HttpServletResponse response) {
+        List<FeStandardSubstanceAcceptance> list = this.list();
+        response.setContentType("application/vnd.ms-excel");
+        response.setCharacterEncoding("UTF-8");
+        // 杩欓噷URLEncoder.encode鍙互闃叉涓枃涔辩爜 褰撶劧鍜宔asyexcel娌℃湁鍏崇郴
+        try {
+            String fileName = URLEncoder.encode("鏍囧噯鐗╄川楠屾敹", "UTF-8");
+            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+            // 鏂板缓ExcelWriter
+            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
+            WriteSheet writeSheet = EasyExcel.writerSheet(0, "鏍囧噯鐗╄川楠屾敹").head(FeStandardSubstanceAcceptance.class).build();
+            excelWriter.write(list, writeSheet);
+            // 鍏抽棴娴�
+            excelWriter.finish();
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        } catch (IOException e) {
+            e.printStackTrace();
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+    }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceRecordServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceRecordServiceImpl.java
new file mode 100644
index 0000000..134e4ba
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceRecordServiceImpl.java
@@ -0,0 +1,79 @@
+package com.ruoyi.require.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+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.framework.exception.ErrorException;
+import com.ruoyi.require.mapper.FeStandardSubstanceMapper;
+import com.ruoyi.require.mapper.FeStandardSubstanceRecordMapper;
+import com.ruoyi.require.pojo.FeStandardSubstance;
+import com.ruoyi.require.pojo.FeStandardSubstanceRecord;
+import com.ruoyi.require.service.FeStandardSubstanceRecordService;
+import com.ruoyi.require.vo.SubstanceRecordVo;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川娓呭崟鍊熺敤褰掕繕璁板綍琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-14 01:49:11
+ */
+@Transactional(rollbackFor = Exception.class)
+@Service
+public class FeStandardSubstanceRecordServiceImpl extends ServiceImpl<FeStandardSubstanceRecordMapper, FeStandardSubstanceRecord> implements FeStandardSubstanceRecordService {
+
+    @Resource
+    private FeStandardSubstanceMapper feStandardSubstanceMapper;
+
+    @Override
+    public void borrowSubstance(FeStandardSubstanceRecord feStandardSubstanceRecord) {
+        FeStandardSubstance standardSubstance = feStandardSubstanceMapper.selectOne(Wrappers.<FeStandardSubstance>lambdaQuery()
+                .eq(FeStandardSubstance::getId, feStandardSubstanceRecord.getSubstanceId())
+                .eq(FeStandardSubstance::getState, 0)
+                .last("limit 1"));
+        if (ObjectUtils.isEmpty(standardSubstance)){
+            throw new ErrorException("璇ョ墿璐ㄥ凡琚�熷嚭锛�");
+        }
+        this.baseMapper.insert(feStandardSubstanceRecord);
+        standardSubstance.setState(1);
+        feStandardSubstanceMapper.updateById(standardSubstance);
+    }
+
+    @Override
+    public void returnSubstance(FeStandardSubstanceRecord feStandardSubstanceRecord) {
+        FeStandardSubstance standardSubstance = feStandardSubstanceMapper.selectOne(Wrappers.<FeStandardSubstance>lambdaQuery()
+                .eq(FeStandardSubstance::getId, feStandardSubstanceRecord.getSubstanceId())
+                .eq(FeStandardSubstance::getState, 1));
+        if (ObjectUtils.isEmpty(standardSubstance)){
+            throw new ErrorException("璇ョ墿璐ㄦ湭琚鐢紝鏃犻渶褰掕繕锛�");
+        }
+        standardSubstance.setState(0);
+        feStandardSubstanceMapper.updateById(standardSubstance);
+        System.out.println(feStandardSubstanceRecord);
+        baseMapper.update(feStandardSubstanceRecord, Wrappers.<FeStandardSubstanceRecord>lambdaUpdate()
+                .eq(FeStandardSubstanceRecord::getSubstanceId, feStandardSubstanceRecord.getSubstanceId())
+                .eq(FeStandardSubstanceRecord::getStatus, 0));
+    }
+
+    @Override
+    public List<FeStandardSubstanceRecord> getSubstanceRecord(Integer id) {
+        QueryWrapper<FeStandardSubstanceRecord> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("substance_id",id);
+        List<FeStandardSubstanceRecord> list = this.baseMapper.selectList(queryWrapper);
+        return list;
+    }
+
+    @Override
+    public IPage<SubstanceRecordVo> getPage(Page page, SubstanceRecordVo vo) {
+        return this.baseMapper.getPage(page,vo);
+    }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceServiceImpl.java b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceServiceImpl.java
new file mode 100644
index 0000000..141246c
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceServiceImpl.java
@@ -0,0 +1,26 @@
+package com.ruoyi.require.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.ruoyi.require.mapper.FeStandardSubstanceMapper;
+import com.ruoyi.require.pojo.FeStandardSubstance;
+import com.ruoyi.require.service.FeStandardSubstanceService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 鏍囧噯鐗╄川娓呭崟 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-11-13 03:58:59
+ */
+@Service
+public class FeStandardSubstanceServiceImpl extends ServiceImpl<FeStandardSubstanceMapper, FeStandardSubstance> implements FeStandardSubstanceService {
+
+    @Override
+    public IPage<FeStandardSubstance> page(Page page, FeStandardSubstance feStandardSubstance) {
+        return this.baseMapper.getPage(page,feStandardSubstance);
+    }
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/vo/AcceptanceDetailsVo.java b/cnas-require/src/main/java/com/ruoyi/require/vo/AcceptanceDetailsVo.java
new file mode 100644
index 0000000..44777a4
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/vo/AcceptanceDetailsVo.java
@@ -0,0 +1,22 @@
+package com.ruoyi.require.vo;
+
+import com.ruoyi.require.pojo.FeStandardSubstance;
+import com.ruoyi.require.pojo.FeStandardSubstanceAcceptance;
+import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AcceptanceDetailsVo extends FeStandardSubstanceAcceptance {
+
+    @ApiModelProperty("鐗╄川娓呭崟")
+    private FeStandardSubstance substance;
+
+    @ApiModelProperty("楠屾敹鍗�")
+    private FeStandardSubstanceAcceptance acceptance;
+
+    @ApiModelProperty("寮�绠辫褰�")
+    private List<FeStandardSubstanceAcceptanceInspection> list;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/vo/AcceptanceVo.java b/cnas-require/src/main/java/com/ruoyi/require/vo/AcceptanceVo.java
new file mode 100644
index 0000000..09d0374
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/vo/AcceptanceVo.java
@@ -0,0 +1,46 @@
+package com.ruoyi.require.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class AcceptanceVo {
+
+    @ApiModelProperty("妫�楠岃〃id")
+    private Integer id;
+
+    @ApiModelProperty("鏍囧噯鐗╄川鍚嶇О")
+    private String name;
+
+    @ApiModelProperty("瑙勬牸鍨嬪彿")
+    private String model;
+
+    @ApiModelProperty("鐢熶骇鍘傚")
+    private String factoryManufacturer;
+
+    @ApiModelProperty("鍑哄満缂栧彿")
+    private String factoryNum;
+
+    @ApiModelProperty("绠$悊缂栧彿")
+    private String manageNum;
+
+    @ApiModelProperty("涓嶇‘瀹氬害")
+    private String uncertainty;
+
+    @ApiModelProperty("鏁伴噺")
+    private Long quantity;
+
+    @ApiModelProperty("璐疆鏃ユ湡")
+    private LocalDateTime acquisitionDate;
+
+    @ApiModelProperty("鏈夋晥鏈�")
+    private LocalDateTime effectiveDate;
+
+    @ApiModelProperty("鏂囨。缂栧彿")
+    private String fileNum;
+
+    @ApiModelProperty("瀛樻斁浣嶇疆")
+    private String position;
+}
diff --git a/cnas-require/src/main/java/com/ruoyi/require/vo/SubstanceRecordVo.java b/cnas-require/src/main/java/com/ruoyi/require/vo/SubstanceRecordVo.java
new file mode 100644
index 0000000..00de20d
--- /dev/null
+++ b/cnas-require/src/main/java/com/ruoyi/require/vo/SubstanceRecordVo.java
@@ -0,0 +1,46 @@
+package com.ruoyi.require.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class SubstanceRecordVo {
+
+    @ApiModelProperty("id")
+    private Integer id;
+
+    @ApiModelProperty("鏍囧噯鐗╄川鍚嶇О")
+    private String name;
+
+    @ApiModelProperty("瑙勬牸鍨嬪彿")
+    private String model;
+
+    @ApiModelProperty("鍑哄満缂栧彿")
+    private String factoryNum;
+
+    @ApiModelProperty("鏁伴噺")
+    private Long quantity;
+
+    @ApiModelProperty("棰嗙敤浜�")
+    private String borrowUser;
+
+    @ApiModelProperty("鍊熷嚭鏃ユ湡")
+    private LocalDateTime borrowDate;
+
+    @ApiModelProperty("褰掕繕鏃ユ湡")
+    private LocalDateTime returnDate;
+
+    @ApiModelProperty("褰掕繕浜�")
+    private String returnedPerson;
+
+    @ApiModelProperty("瀹屽ソ鎬�")
+    private String returnIntegrity;
+
+    @ApiModelProperty("0锛氬�熺敤 1:褰掕繕")
+    private String status;
+
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+}
diff --git a/inspect-server/pom.xml b/inspect-server/pom.xml
index fc8d299..38a4862 100644
--- a/inspect-server/pom.xml
+++ b/inspect-server/pom.xml
@@ -24,6 +24,11 @@
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-system</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.deepoove</groupId>
+            <artifactId>poi-tl</artifactId>
+            <version>1.12.2</version>
+        </dependency>
     </dependencies>
 
     <properties>
diff --git a/inspect-server/src/main/java/com/ruoyi/basic/util/HackLoopTableRenderPolicy.java b/inspect-server/src/main/java/com/ruoyi/basic/util/HackLoopTableRenderPolicy.java
new file mode 100644
index 0000000..482f920
--- /dev/null
+++ b/inspect-server/src/main/java/com/ruoyi/basic/util/HackLoopTableRenderPolicy.java
@@ -0,0 +1,154 @@
+/*
+ * Copyright 2014-2020 Sayi
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.ruoyi.basic.util;
+
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.exception.RenderException;
+import com.deepoove.poi.policy.RenderPolicy;
+import com.deepoove.poi.render.compute.RenderDataCompute;
+import com.deepoove.poi.render.processor.DocumentProcessor;
+import com.deepoove.poi.resolver.TemplateResolver;
+import com.deepoove.poi.template.ElementTemplate;
+import com.deepoove.poi.template.MetaTemplate;
+import com.deepoove.poi.template.run.RunTemplate;
+import com.deepoove.poi.util.ReflectionUtils;
+import com.deepoove.poi.util.TableTools;
+import org.apache.poi.xwpf.usermodel.*;
+import org.apache.xmlbeans.XmlCursor;
+import org.apache.xmlbeans.XmlObject;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVMerge;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
+
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Hack for loop table row
+ *
+ * @author Sayi
+ *
+ */
+public class HackLoopTableRenderPolicy implements RenderPolicy {
+
+    private String prefix;
+    private String suffix;
+    private boolean onSameLine;
+
+    public HackLoopTableRenderPolicy() {
+        this(false);
+    }
+
+    public HackLoopTableRenderPolicy(boolean onSameLine) {
+        this("[", "]", onSameLine);
+    }
+
+    public HackLoopTableRenderPolicy(String prefix, String suffix) {
+        this(prefix, suffix, false);
+    }
+
+    public HackLoopTableRenderPolicy(String prefix, String suffix, boolean onSameLine) {
+        this.prefix = prefix;
+        this.suffix = suffix;
+        this.onSameLine = onSameLine;
+    }
+
+    @Override
+    public void render(ElementTemplate eleTemplate, Object data, XWPFTemplate template) {
+        RunTemplate runTemplate = (RunTemplate) eleTemplate;
+        XWPFRun run = runTemplate.getRun();
+        try {
+            if (!TableTools.isInsideTable(run)) {
+                throw new IllegalStateException(
+                        "The template tag " + runTemplate.getSource() + " must be inside a table");
+            }
+            XWPFTableCell tagCell = (XWPFTableCell) ((XWPFParagraph) run.getParent()).getBody();
+            XWPFTable table = tagCell.getTableRow().getTable();
+            run.setText("", 0);
+
+            int templateRowIndex = getTemplateRowIndex(tagCell);
+            if (null != data && data instanceof Iterable) {
+                Iterator<?> iterator = ((Iterable<?>) data).iterator();
+                XWPFTableRow templateRow = table.getRow(templateRowIndex);
+                int insertPosition = templateRowIndex;
+
+                TemplateResolver resolver = new TemplateResolver(template.getConfig().copy(prefix, suffix));
+                boolean firstFlag = true;
+                while (iterator.hasNext()) {
+                    insertPosition = templateRowIndex++;
+                    XWPFTableRow nextRow = table.insertNewTableRow(insertPosition);
+                    setTableRow(table, templateRow, insertPosition);
+
+                    // double set row
+                    XmlCursor newCursor = templateRow.getCtRow().newCursor();
+                    newCursor.toPrevSibling();
+                    XmlObject object = newCursor.getObject();
+                    nextRow = new XWPFTableRow((CTRow) object, table);
+                    if (!firstFlag) {
+                        // update VMerge cells for non-first row
+                        List<XWPFTableCell> tableCells = nextRow.getTableCells();
+                        for (XWPFTableCell cell : tableCells) {
+                            CTTcPr tcPr = TableTools.getTcPr(cell);
+                            CTVMerge vMerge = tcPr.getVMerge();
+                            if (null == vMerge) continue;
+                            if (STMerge.RESTART == vMerge.getVal()) {
+                                vMerge.setVal(STMerge.CONTINUE);
+                            }
+                        }
+                    } else {
+                        firstFlag = false;
+                    }
+                    setTableRow(table, nextRow, insertPosition);
+
+                    RenderDataCompute dataCompute = template.getConfig().getRenderDataComputeFactory()
+                            .newCompute(iterator.next());
+                    List<XWPFTableCell> cells = nextRow.getTableCells();
+                    cells.forEach(cell -> {
+                        List<MetaTemplate> templates = resolver.resolveBodyElements(cell.getBodyElements());
+                        new DocumentProcessor(template, resolver, dataCompute).process(templates);
+                    });
+                }
+            }
+
+            table.removeRow(templateRowIndex);
+            afterloop(table, data);
+        } catch (Exception e) {
+            throw new RenderException("HackLoopTable for " + eleTemplate + "error: " + e.getMessage(), e);
+        }
+    }
+
+    private int getTemplateRowIndex(XWPFTableCell tagCell) {
+        XWPFTableRow tagRow = tagCell.getTableRow();
+        return onSameLine ? getRowIndex(tagRow) : (getRowIndex(tagRow) + 1);
+    }
+
+    protected void afterloop(XWPFTable table, Object data) {
+    }
+
+    @SuppressWarnings("unchecked")
+    private void setTableRow(XWPFTable table, XWPFTableRow templateRow, int pos) {
+        List<XWPFTableRow> rows = (List<XWPFTableRow>) ReflectionUtils.getValue("tableRows", table);
+        rows.set(pos, templateRow);
+        table.getCTTbl().setTrArray(pos, templateRow.getCtRow());
+    }
+
+    private int getRowIndex(XWPFTableRow row) {
+        List<XWPFTableRow> rows = row.getTable().getRows();
+        return rows.indexOf(row);
+    }
+
+}
diff --git a/pom.xml b/pom.xml
index ab947ba..2bd747c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -339,6 +339,7 @@
         <module>basic-server</module>
         <module>inspect-server</module>
         <module>performance-server</module>
+        <module>cnas-require</module>
     </modules>
     <packaging>pom</packaging>
 
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index 0009314..a63e7aa 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -87,6 +87,12 @@
             <version>${ruoyi.version}</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>cnas-require</artifactId>
+            <version>${ruoyi.version}</version>
+        </dependency>
+
     </dependencies>
 
     <build>
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/exception/ErrorException.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/exception/ErrorException.java
new file mode 100644
index 0000000..4a39760
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/exception/ErrorException.java
@@ -0,0 +1,9 @@
+package com.ruoyi.framework.exception;
+
+public class ErrorException extends RuntimeException{
+
+    public ErrorException(String msg){
+        super(msg);
+    }
+
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/exception/MyFileException.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/exception/MyFileException.java
new file mode 100644
index 0000000..95bfc18
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/exception/MyFileException.java
@@ -0,0 +1,18 @@
+package com.ruoyi.framework.exception;
+
+public class MyFileException extends RuntimeException{
+    public MyFileException() {
+    }
+
+    public MyFileException(String message) {
+        super(message);
+    }
+
+    public MyFileException(Throwable cause) {
+        super(cause);
+    }
+
+    public MyFileException(String message, Throwable cause) {
+        super(message, cause);
+    }
+}

--
Gitblit v1.9.3