From d0a6fc23f31f924cb1744397478dc4c7c57c04e1 Mon Sep 17 00:00:00 2001
From: XiaoRuby <3114200645@qq.com>
Date: 星期六, 19 八月 2023 09:58:40 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 cnas-server/src/main/java/com/yuanchu/limslaboratory/service/impl/CnasAnnualPlanServiceImpl.java              |   92 +
 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/NonConformingFeedbackServiceImpl.java |   34 
 cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/CnasAnnualPlanVo.java                            |   20 
 cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/CnasAnnualPlan.java                                 |   86 +
 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/PlanService.java                           |   23 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/NonConformanceReviewServiceImpl.java  |   42 
 sys/src/test/java/com/yuanchu/limslaboratory/SysApplicationTests.java                                         |  168 +++
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/ClassifyMapper.java                         |    4 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/ReportMapper.java                           |    4 
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MeteringPlanServiceImpl.java          |   55 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ReportAuditingServiceImpl.java        |   37 
 cnas-server/src/main/java/com/yuanchu/limslaboratory/controller/CnasSatisfactionSurveyController.java         |   63 +
 sys/src/main/java/com/yuanchu/limslaboratory/CodeGenerator.java                                               |   16 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/NonConformanceReviewService.java           |   20 
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MeteringPlanController.java             |   33 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/NonConformingFeedbackService.java          |   19 
 cnas-server/src/main/java/com/yuanchu/limslaboratory/controller/CnasAnnualPlanController.java                 |   99 +
 cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/CnasSatisfactionSurvey.java                         |  143 ++
 inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/NonConformanceReviewDto.java              |   37 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/NonConformingFeedbackDto.java             |   35 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/NonConformanceReviewMapper.java             |   20 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/NonConformanceReviewVo.java                |   30 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/ReportAuditingService.java                 |    6 
 cnas-server/src/main/resources/mapper/CnasAnnualPlanMapper.xml                                                |   29 
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/LimitPage.java                                |   20 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionServiceImpl.java            |   20 
 user-server/src/main/resources/mapper/UserMapper.xml                                                          |    2 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/NonConformanceReviewController.java     |   35 
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/MeteringPlanMapper.java                     |   26 
 cnas-server/src/main/java/com/yuanchu/limslaboratory/service/impl/CnasSatisfactionSurveyServiceImpl.java      |  206 +++
 inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/ReportController.java                   |    3 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/PlanController.java                     |   47 
 inspection-server/src/main/resources/mapper/NonConformingFeedbackMapper.xml                                   |   35 
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MeteringPlanAndInfo.java                      |   52 
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ClassifyServiceImpl.java              |   14 
 framework/src/main/java/com/yuanchu/limslaboratory/utils/MultipartFileToFileUtil.java                         |   70 +
 cnas-server/src/main/resources/mapper/CnasSatisfactionSurveyMapper.xml                                        |   38 
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInfoAndIns.java                       |   48 
 inspection-server/src/main/resources/mapper/ReportMapper.xml                                                  |   57 +
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInformation.java                      |    3 
 user-server/src/main/java/com/yuanchu/limslaboratory/vo/PagePersonnelVo.java                                  |    2 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/NonConformingFeedbackMapper.java            |   24 
 inspection-server/src/main/resources/mapper/PlanMapper.xml                                                    |   40 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/ReportAuditingVo.java                      |    6 
 standard-server/src/main/resources/mapper/MaterialMapper.xml                                                  |   26 
 pom.xml                                                                                                       |    3 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/ReportAuditingController.java           |   18 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/PlanVo.java                                |   54 +
 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/LinkBasicInformationServiceImpl.java  |    2 
 cnas-server/src/main/java/com/yuanchu/limslaboratory/service/CnasAnnualPlanService.java                       |   38 
 cnas-server/src/main/java/com/yuanchu/limslaboratory/mapper/CnasSatisfactionSurveyMapper.java                 |   17 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/NonConformingFeedbackController.java    |   35 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/NonConformanceReview.java                     |  102 +
 inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/NonConformingFeedbackVo.java               |   32 
 framework/src/main/java/com/yuanchu/limslaboratory/utils/ThreadPoolConfig.java                                |   62 +
 framework/pom.xml                                                                                             |   13 
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/GetPlanMeasureInstrumentDto.java          |   25 
 laboratory-server/src/main/resources/mapper/MeteringPlanMapper.xml                                            |  183 +++
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MeteringPlanAndInfoAndIns.java                |   22 
 cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/CnasSatisfactionSurveyPageDto.java              |   35 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/ReportVo.java                              |    4 
 cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/CnasSatisfactionSurveyVo.java                    |   29 
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MetricalInformationServiceImpl.java   |    1 
 user-server/src/main/java/com/yuanchu/limslaboratory/pojo/User.java                                           |    2 
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MeteringPlanService.java                   |   14 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionController.java               |   13 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/PlanMapper.java                             |   14 
 sys/src/main/resources/application-dev.yml                                                                    |   14 
 framework/src/main/java/com/yuanchu/limslaboratory/utils/Threads.java                                         |   96 +
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/SelectMeteringPlanDto.java                |   25 
 framework/src/main/java/com/yuanchu/limslaboratory/utils/MyUtil.java                                          |    6 
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/SelectMeasurementLedgerDto.java           |   28 
 /dev/null                                                                                                     |   37 
 laboratory-server/src/main/resources/mapper/MetricalInformationMapper.xml                                     |    1 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/PlanServiceImpl.java                  |   61 +
 inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Report.java                                   |    8 
 user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/UserServiceImpl.java                        |    5 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ReportServiceImpl.java                |    4 
 cnas-server/src/main/java/com/yuanchu/limslaboratory/mapper/CnasAnnualPlanMapper.java                         |   26 
 laboratory-server/src/main/resources/mapper/ClassifyMapper.xml                                                |    8 
 sys/pom.xml                                                                                                   |   14 
 cnas-server/src/main/java/com/yuanchu/limslaboratory/service/CnasSatisfactionSurveyService.java               |   42 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/NonConformingFeedback.java                    |   53 +
 cnas-server/pom.xml                                                                                           |   81 +
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/ClassifyController.java                 |    6 
 85 files changed, 2,971 insertions(+), 151 deletions(-)

diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 35410ca..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-# 榛樿蹇界暐鐨勬枃浠�
-/shelf/
-/workspace.xml
-# 鍩轰簬缂栬緫鍣ㄧ殑 HTTP 瀹㈡埛绔姹�
-/httpRequests/
-# Datasource local storage ignored files
-/dataSources/
-/dataSources.local.xml
diff --git a/.idea/aws.xml b/.idea/aws.xml
deleted file mode 100644
index b63b642..0000000
--- a/.idea/aws.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="accountSettings">
-    <option name="activeRegion" value="us-east-1" />
-    <option name="recentlyUsedRegions">
-      <list>
-        <option value="us-east-1" />
-      </list>
-    </option>
-  </component>
-</project>
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index 87180da..0000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="CompilerConfiguration">
-    <annotationProcessing>
-      <profile default="true" name="Default" enabled="true" />
-      <profile name="Maven default annotation processors profile" enabled="true">
-        <sourceOutputDir name="target/generated-sources/annotations" />
-        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
-        <outputRelativeToContentRoot value="true" />
-        <module name="inspection-server" />
-        <module name="framework" />
-        <module name="sys" />
-        <module name="standard-server" />
-        <module name="laboratory-server" />
-        <module name="user-server" />
-      </profile>
-    </annotationProcessing>
-  </component>
-  <component name="JavacSettings">
-    <option name="ADDITIONAL_OPTIONS_OVERRIDE">
-      <module name="framework" options="-parameters" />
-      <module name="inspection-server" options="-parameters" />
-      <module name="laboratory-server" options="-parameters" />
-      <module name="standard-server" options="-parameters" />
-      <module name="sys" options="-parameters" />
-      <module name="user-server" options="-parameters" />
-    </option>
-  </component>
-</project>
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
deleted file mode 100644
index 343cd9b..0000000
--- a/.idea/encodings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="Encoding" defaultCharsetForPropertiesFiles="UTF-8">
-    <file url="file://$PROJECT_DIR$/framework/src/main/java" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/inspection-server/src/main/java" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/laboratory-server/src/main/java" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/standard-server/src/main/java" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/sys/src/main/java" charset="UTF-8" />
-    <file url="file://$PROJECT_DIR$/user-server/src/main/java" charset="UTF-8" />
-    <file url="PROJECT" charset="UTF-8" />
-  </component>
-</project>
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
deleted file mode 100644
index 980588c..0000000
--- a/.idea/jarRepositories.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="RemoteRepositoriesConfiguration">
-    <remote-repository>
-      <option name="id" value="central" />
-      <option name="name" value="Maven Central repository" />
-      <option name="url" value="https://repo1.maven.org/maven2" />
-    </remote-repository>
-    <remote-repository>
-      <option name="id" value="jboss.community" />
-      <option name="name" value="JBoss Community repository" />
-      <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
-    </remote-repository>
-    <remote-repository>
-      <option name="id" value="central" />
-      <option name="name" value="Central Repository" />
-      <option name="url" value="http://maven.aliyun.com/nexus/content/groups/public" />
-    </remote-repository>
-  </component>
-</project>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
deleted file mode 100644
index 132404b..0000000
--- a/.idea/misc.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ExternalStorageConfigurationManager" enabled="true" />
-  <component name="MavenProjectsManager">
-    <option name="originalFiles">
-      <list>
-        <option value="$PROJECT_DIR$/pom.xml" />
-      </list>
-    </option>
-  </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
-    <output url="file://$PROJECT_DIR$/out" />
-  </component>
-</project>
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
deleted file mode 100644
index 35eb1dd..0000000
--- a/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="VcsDirectoryMappings">
-    <mapping directory="" vcs="Git" />
-  </component>
-</project>
\ No newline at end of file
diff --git a/cnas-server/pom.xml b/cnas-server/pom.xml
new file mode 100644
index 0000000..7931358
--- /dev/null
+++ b/cnas-server/pom.xml
@@ -0,0 +1,81 @@
+<?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>lims-laboratory</artifactId>
+        <groupId>com.yuanchu</groupId>
+        <version>0.0.1-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>com.yuanchu.limslaboratory</groupId>
+    <artifactId>cnas-server</artifactId>
+    <packaging>jar</packaging>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.yunchu.limslaboratory</groupId>
+            <artifactId>framework</artifactId>
+            <version>${project.parent.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.8.12</version>
+        </dependency>
+        <!--搴曚笅鍥涗釜閮芥槸poi渚濊禆-->
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>4.1.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>4.1.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml-schemas</artifactId>
+            <version>4.1.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-scratchpad</artifactId>
+            <version>4.1.2</version>
+        </dependency>
+        <dependency>
+            <groupId>com.yunchu.limslaboratory</groupId>
+            <artifactId>user-server</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>4.1.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>4.1.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml-schemas</artifactId>
+            <version>4.1.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-scratchpad</artifactId>
+            <version>4.1.2</version>
+        </dependency>
+    </dependencies>
+
+
+</project>
\ No newline at end of file
diff --git a/cnas-server/src/main/java/com/yuanchu/limslaboratory/controller/CnasAnnualPlanController.java b/cnas-server/src/main/java/com/yuanchu/limslaboratory/controller/CnasAnnualPlanController.java
new file mode 100644
index 0000000..4b410c5
--- /dev/null
+++ b/cnas-server/src/main/java/com/yuanchu/limslaboratory/controller/CnasAnnualPlanController.java
@@ -0,0 +1,99 @@
+package com.yuanchu.limslaboratory.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.limslaboratory.pojo.CnasAnnualPlan;
+import com.yuanchu.limslaboratory.pojo.vo.CnasAnnualPlanVo;
+import com.yuanchu.limslaboratory.service.CnasAnnualPlanService;
+import com.yuanchu.limslaboratory.utils.JackSonUtil;
+import com.yuanchu.limslaboratory.utils.RedisUtil;
+import com.yuanchu.limslaboratory.vo.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * <p>
+ * 瀹℃牳骞村害璁″垝琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-08-10 11:50:11
+ */
+@Api(tags = "CNAS绠$悊-->瀹℃牳骞村害璁″垝")
+@RestController
+@RequestMapping("/cnasAnnualPlan")
+public class CnasAnnualPlanController {
+
+    @Resource
+    private CnasAnnualPlanService cnasAnnualPlanService;
+
+    @ApiOperation(value = "鏌ヨ瀹℃煡璁″垝")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "page", value = "鍒濆椤�", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "pageSize", value = "姣忎竴椤垫暟閲�", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "planTime", value = "妫�楠屽紑濮嬫椂闂�", dataTypeClass = Date.class),
+    })
+    @GetMapping("/selectAllList")
+    public Result selectAllList(Integer page, Integer pageSize, @DateTimeFormat(pattern = "yyyy-MM") Date planTime) {
+        IPage<CnasAnnualPlanVo> reportPage = cnasAnnualPlanService.selectAllList(new Page(page, pageSize), planTime);
+        Map<String, Object> map = new HashMap<>();
+        map.put("total", reportPage.getTotal());
+        map.put("row", reportPage.getRecords());
+        return Result.success(map);
+    }
+
+    @ApiOperation(value = "鏂板瀹℃煡璁″垝")
+    @PostMapping("/addCnasAnnualPlan")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "CnasAnnualPlan", value = "瀹℃煡瀵硅薄", dataTypeClass = Integer.class, required = true)
+    })
+    public Result addCnasAnnualPlan(@RequestHeader("X-Token") String token, @RequestBody CnasAnnualPlan cnasAnnualPlan) throws Exception {
+        Object object = RedisUtil.get(token);
+        Map<String, Object> unmarshal = JackSonUtil.unmarshal(JackSonUtil.marshal(object), Map.class);
+        String name = (String) unmarshal.get("name");
+        cnasAnnualPlan.setKeyboarder(name);
+        //todo:鑾峰彇name鏈夐棶棰�
+        cnasAnnualPlanService.save(cnasAnnualPlan);
+        return Result.success();
+    }
+
+
+    @ApiOperation(value = "涓婁紶闄勪欢")
+    @PostMapping("/addAccessory")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "auditTime", value = "瀹℃牳鏃ユ湡", dataTypeClass = Date.class, required = true),
+            @ApiImplicitParam(name = "file", value = "闄勪欢鏂囦欢", dataTypeClass = MultipartFile.class, required = true)
+    })
+    public Result addAccessory(@RequestHeader("X-Token") String token, Date auditTime, MultipartFile file) throws Exception {
+        //瑙f瀽褰撳墠鐧诲綍鐢ㄦ埛
+        Object object = RedisUtil.get(token);
+        Map<String, Object> unmarshal = JackSonUtil.unmarshal(JackSonUtil.marshal(object), Map.class);
+        String name = (String) unmarshal.get("name");
+        cnasAnnualPlanService.addAccessory(name, auditTime, file);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鍒犻櫎骞村害璁″垝")
+    @GetMapping("/deleteCnasAnnualPlan")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "planId", value = "瀹℃牳鏃ユ湡", dataTypeClass = Integer.class, required = true)
+    })
+    public Result deleteCnasAnnualPlan(Integer planId) {
+        Integer isDeleteSuccess = cnasAnnualPlanService.deleteCnasAnnualPlan(planId);
+        if (isDeleteSuccess == 1){
+            return Result.success("鍒犻櫎鎴愬姛");
+        } else {
+            return Result.fail("鍒犻櫎澶辫触");
+        }
+    }
+}
diff --git a/cnas-server/src/main/java/com/yuanchu/limslaboratory/controller/CnasSatisfactionSurveyController.java b/cnas-server/src/main/java/com/yuanchu/limslaboratory/controller/CnasSatisfactionSurveyController.java
new file mode 100644
index 0000000..47b9854
--- /dev/null
+++ b/cnas-server/src/main/java/com/yuanchu/limslaboratory/controller/CnasSatisfactionSurveyController.java
@@ -0,0 +1,63 @@
+package com.yuanchu.limslaboratory.controller;
+
+import com.yuanchu.limslaboratory.pojo.CnasSatisfactionSurvey;
+import com.yuanchu.limslaboratory.pojo.Dto.CnasSatisfactionSurveyPageDto;
+import com.yuanchu.limslaboratory.pojo.vo.CnasSatisfactionSurveyVo;
+import com.yuanchu.limslaboratory.service.CnasSatisfactionSurveyService;
+import com.yuanchu.limslaboratory.vo.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.util.Map;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/10
+ */
+@RestController
+@RequestMapping("/cnasSatisfactionSurvey")
+@Api(tags = "CNAS-->婊℃剰搴﹁皟鏌�")
+public class CnasSatisfactionSurveyController {
+
+    @Resource
+    private CnasSatisfactionSurveyService service;
+
+    /**
+     * 鑾峰彇婊℃剰搴﹁皟鏌ヤ俊鎭�
+     * @return
+     */
+    @ApiOperation(value = "鑾峰彇婊℃剰搴﹁皟鏌�")
+    @GetMapping("/getCnasSatisfactionSurvey")
+    public Result<CnasSatisfactionSurveyVo>getCnasSatisfactionSurvey(CnasSatisfactionSurveyPageDto cnasSatisfactionSurveyPageDto){
+        return Result.success(service.getCnasSatisfactionSurvey(cnasSatisfactionSurveyPageDto));
+    }
+
+    @GetMapping("/getFillNameAndId")
+    @ApiOperation(value = "鑾峰彇褰撳墠褰曞彇浜�")
+    public Result<Map>getFillNameAndId(@RequestHeader("X-Token")String token){
+        return Result.success(service.getFillNameAndTd(token));
+    }
+
+    /**
+     * 闄勪欢涓婁紶
+     * @param file
+     * @return
+     */
+    @ApiOperation(value = "闄勪欢涓婁紶")
+    @PostMapping(value = "/uploadFile",consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = {MediaType.APPLICATION_JSON_VALUE})
+    public Result<Map>wordParse(MultipartFile file){
+        return Result.success(service.wordParse(file));
+    }
+
+    @ApiOperation(value = "婊℃剰搴﹁皟鏌ユ柊澧�")
+    @PostMapping("/addSurvey")
+    public Result<Boolean>addSurvey(@RequestBody CnasSatisfactionSurvey cnasSatisfactionSurvey){
+        System.out.println(cnasSatisfactionSurvey+"=============");
+        return Result.success(service.addSurvey(cnasSatisfactionSurvey));
+    }
+
+}
diff --git a/cnas-server/src/main/java/com/yuanchu/limslaboratory/mapper/CnasAnnualPlanMapper.java b/cnas-server/src/main/java/com/yuanchu/limslaboratory/mapper/CnasAnnualPlanMapper.java
new file mode 100644
index 0000000..c34d271
--- /dev/null
+++ b/cnas-server/src/main/java/com/yuanchu/limslaboratory/mapper/CnasAnnualPlanMapper.java
@@ -0,0 +1,26 @@
+package com.yuanchu.limslaboratory.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.limslaboratory.pojo.CnasAnnualPlan;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yuanchu.limslaboratory.pojo.vo.CnasAnnualPlanVo;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 瀹℃牳骞村害璁″垝琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-08-10 11:50:11
+ */
+public interface CnasAnnualPlanMapper extends BaseMapper<CnasAnnualPlan> {
+
+    /**
+     * 鏌ヨ瀹℃牳璁″垝
+     * @return
+     */
+    IPage<CnasAnnualPlanVo> selectAllList(Page<Object> objectPage, Integer year, Integer month);
+}
diff --git a/cnas-server/src/main/java/com/yuanchu/limslaboratory/mapper/CnasSatisfactionSurveyMapper.java b/cnas-server/src/main/java/com/yuanchu/limslaboratory/mapper/CnasSatisfactionSurveyMapper.java
new file mode 100644
index 0000000..585272b
--- /dev/null
+++ b/cnas-server/src/main/java/com/yuanchu/limslaboratory/mapper/CnasSatisfactionSurveyMapper.java
@@ -0,0 +1,17 @@
+package com.yuanchu.limslaboratory.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.yuanchu.limslaboratory.pojo.CnasSatisfactionSurvey;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/10
+ */
+@Repository
+public interface CnasSatisfactionSurveyMapper extends BaseMapper<CnasSatisfactionSurvey> {
+
+    IPage<CnasSatisfactionSurvey>selectCnasSatisfactionSurvey(Page<CnasSatisfactionSurvey>page, String surveyDate,String entryDate);
+}
diff --git a/cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/CnasAnnualPlan.java b/cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/CnasAnnualPlan.java
new file mode 100644
index 0000000..b89903d
--- /dev/null
+++ b/cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/CnasAnnualPlan.java
@@ -0,0 +1,86 @@
+package com.yuanchu.limslaboratory.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 瀹℃牳骞村害璁″垝琛�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-08-10 11:50:11
+ */
+@Data
+@TableName("cnas_annual_plan")
+@ApiModel(value="CnasAnnualPlan瀵硅薄", description="")
+public class CnasAnnualPlan implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty(value = "涓婚敭id")
+    private Integer id;
+
+    @ApiModelProperty(value = "鎬ц川,0:鍐呭,1:绠$悊璇勫")
+    private Integer auditType;
+
+    @ApiModelProperty(value = "閮ㄩ棬")
+    private String department;
+
+    @ApiModelProperty(value = "瀹℃牳鐩殑")
+    private String auditPurpose;
+
+    @ApiModelProperty(value = "瀹℃牳缁勯暱")
+    private String auditLeader;
+
+    @ApiModelProperty(value = "瀹℃牳缁勫憳")
+    private String auditEmp;
+
+    @ApiModelProperty(value = "瀹℃牳渚濇嵁")
+    private String auditPursuant;
+
+    @ApiModelProperty(value = "瀹℃牳鑼冨洿")
+    private String auditScope;
+
+    @ApiModelProperty(value = "缂栧埗浜哄憳")
+    private String writeUser;
+
+    @ApiModelProperty(value = "褰曞叆浜哄憳")
+    private String keyboarder;
+
+    @ApiModelProperty(value = "璁″垝鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date planTime;
+
+    @ApiModelProperty(value = "涓嶅悎鏍奸」鐩暟")
+    private Integer count;
+
+    @TableLogic(value = "1", delval = "0")
+    @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0", hidden = true)
+    private Integer state;
+
+    @ApiModelProperty(value = "瀹℃牳鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date auditTime;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "缂栧埗鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date createTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Date updateTime;
+}
diff --git a/cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/CnasSatisfactionSurvey.java b/cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/CnasSatisfactionSurvey.java
new file mode 100644
index 0000000..e9e930a
--- /dev/null
+++ b/cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/CnasSatisfactionSurvey.java
@@ -0,0 +1,143 @@
+package com.yuanchu.limslaboratory.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.time.LocalDateTime;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/10
+ */
+@Data
+@TableName("cnas_satisfaction_survey")
+public class CnasSatisfactionSurvey implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 涓婚敭id
+     */
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Long id;
+
+    /**
+     * 椤圭洰鍚嶇О
+     */
+    private String projectName;
+
+    /**
+     * 璋冩煡鏃ユ湡
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date surveyDate;
+
+    /**
+     * 瀹㈡埛鍗曚綅鍚嶇О
+     */
+    private String userUnit;
+
+    ///**
+    // * 鏃ユ湡
+    // */
+    //@DateTimeFormat(pattern = "yyyy-MM-dd")
+    //@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    //private Date dateInfo;
+
+    /**
+     * 濉啓浜哄鍚�
+     */
+    private String fillName;
+
+    /**
+     * 鑱屼綅
+     */
+    private String post;
+
+    /**
+     * 鑱旂郴鐢佃瘽
+     */
+    private String telephone;
+
+    /**
+     * 褰曞叆鏃ユ湡
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date entryDate;
+
+    /**
+     * 褰曞叆浜篿d
+     */
+    private Long userId;
+
+    /**
+     * 褰曞叆浜哄悕绉�
+     */
+    private String userName;
+
+    /**
+     * 闄勪欢鍦板潃
+     */
+    private String fileUrl;
+
+    /**
+     * 鏈嶅姟鎬佸害
+     */
+    private String serviceAttitude;
+
+    /**
+     * 鎶�鏈兘鍔�
+     */
+    private String technicalPower;
+
+    /**
+     * 妫�娴嬪伐浣�
+     */
+    private String testJob;
+
+    /**
+     * 鏀硅繘瑕佹眰
+     */
+    private String improvementRequirements;
+
+    /**
+     * 鍏朵粬琛ュ厖
+     */
+    private String otherSupplements;
+
+    @TableLogic(value = "1")
+    private Integer state;
+
+
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd HH:mm:ss"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd HH:mm:ss"
+    )
+    private LocalDateTime createdTime;
+
+
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd HH:mm:ss"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd HH:mm:ss"
+    )
+    private LocalDateTime updatedTime;
+
+    /**
+     * 鏀惰垂鍚堢悊鎬�
+     */
+    private String reasonableCharge;
+}
+
diff --git a/cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/CnasSatisfactionSurveyPageDto.java b/cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/CnasSatisfactionSurveyPageDto.java
new file mode 100644
index 0000000..3667b4f
--- /dev/null
+++ b/cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/CnasSatisfactionSurveyPageDto.java
@@ -0,0 +1,35 @@
+package com.yuanchu.limslaboratory.pojo.Dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.sql.Date;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/10
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="CnasSatisfactionSurveyDto", description="")
+public class CnasSatisfactionSurveyPageDto implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "褰撳墠椤�", example = "1", required = true)
+    private Long currentPage;
+
+    @ApiModelProperty(value = "鍒嗛〉澶氬皯鏉�", example = "10", required = true)
+    private Long pageNum;
+
+    @ApiModelProperty(value = "璋冩煡鏃ユ湡", example = "2020-01-02")
+    private Date surveyDate;
+
+    @ApiModelProperty(value = "褰曞叆鏃ユ湡", example = "2025-06-08")
+    private Date entryDate;
+
+}
diff --git a/cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/CnasAnnualPlanVo.java b/cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/CnasAnnualPlanVo.java
new file mode 100644
index 0000000..7eb4638
--- /dev/null
+++ b/cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/CnasAnnualPlanVo.java
@@ -0,0 +1,20 @@
+package com.yuanchu.limslaboratory.pojo.vo;
+
+import com.yuanchu.limslaboratory.pojo.CnasAnnualPlan;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class CnasAnnualPlanVo extends CnasAnnualPlan implements Serializable {
+    private static final long serialVersionUID = 1L;
+    @ApiModelProperty(value = "骞翠唤")
+    private Integer year;
+
+    @ApiModelProperty(value = "鏈堜唤")
+    private Integer month;
+
+    @ApiModelProperty(value = "瀹℃牳鐘舵��,0:鍗冲皢寮�濮�,1:瀹屾垚,2:閫炬湡")
+    private Integer auditState;
+}
diff --git a/cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/CnasSatisfactionSurveyVo.java b/cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/CnasSatisfactionSurveyVo.java
new file mode 100644
index 0000000..3c6a92a
--- /dev/null
+++ b/cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/CnasSatisfactionSurveyVo.java
@@ -0,0 +1,29 @@
+package com.yuanchu.limslaboratory.pojo.vo;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.yuanchu.limslaboratory.pojo.CnasSatisfactionSurvey;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/10
+ */
+@Data
+public class CnasSatisfactionSurveyVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @JsonSerialize
+    private List<CnasSatisfactionSurvey> cnasSatisfactionSurveyList;
+
+    @JsonSerialize
+    private Long total;
+
+    public CnasSatisfactionSurveyVo(List<CnasSatisfactionSurvey> cnasSatisfactionSurveyList, Long total) {
+        this.cnasSatisfactionSurveyList = cnasSatisfactionSurveyList;
+        this.total = total;
+    }
+}
diff --git a/cnas-server/src/main/java/com/yuanchu/limslaboratory/service/CnasAnnualPlanService.java b/cnas-server/src/main/java/com/yuanchu/limslaboratory/service/CnasAnnualPlanService.java
new file mode 100644
index 0000000..cdb11f9
--- /dev/null
+++ b/cnas-server/src/main/java/com/yuanchu/limslaboratory/service/CnasAnnualPlanService.java
@@ -0,0 +1,38 @@
+package com.yuanchu.limslaboratory.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.limslaboratory.pojo.CnasAnnualPlan;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yuanchu.limslaboratory.pojo.vo.CnasAnnualPlanVo;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 瀹℃牳骞村害璁″垝琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-08-10 11:50:11
+ */
+public interface CnasAnnualPlanService extends IService<CnasAnnualPlan> {
+
+    /**
+     * 鏌ヨ瀹℃牳璁″垝
+     * @return
+     */
+    IPage<CnasAnnualPlanVo> selectAllList(Page<Object> objectPage, Date planTime);
+
+    /**
+     * 涓婁紶闄勪欢
+     */
+    void addAccessory(String name, Date auditTime, MultipartFile file);
+
+    /**
+     * 鍒犻櫎骞村害璁″垝
+     * @return
+     */
+    Integer deleteCnasAnnualPlan(Integer planId);
+}
diff --git a/cnas-server/src/main/java/com/yuanchu/limslaboratory/service/CnasSatisfactionSurveyService.java b/cnas-server/src/main/java/com/yuanchu/limslaboratory/service/CnasSatisfactionSurveyService.java
new file mode 100644
index 0000000..673c12d
--- /dev/null
+++ b/cnas-server/src/main/java/com/yuanchu/limslaboratory/service/CnasSatisfactionSurveyService.java
@@ -0,0 +1,42 @@
+package com.yuanchu.limslaboratory.service;
+
+import com.yuanchu.limslaboratory.pojo.CnasSatisfactionSurvey;
+import com.yuanchu.limslaboratory.pojo.Dto.CnasSatisfactionSurveyPageDto;
+import com.yuanchu.limslaboratory.pojo.vo.CnasSatisfactionSurveyVo;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.Map;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/10
+ */
+public interface CnasSatisfactionSurveyService{
+
+    /**
+     * 鑾峰彇婊℃剰搴﹁皟鏌ヤ俊鎭�
+     * @param cnasSatisfactionSurveyPageDto
+     * @return
+     */
+    CnasSatisfactionSurveyVo getCnasSatisfactionSurvey(CnasSatisfactionSurveyPageDto cnasSatisfactionSurveyPageDto);
+
+    /**
+     * 鑾峰彇褰撳墠褰曞叆浜�
+     * @return
+     */
+    Map<String, Object> getFillNameAndTd(String token);
+
+    /**
+     * 瑙f瀽word
+     * @param file
+     * @return
+     */
+    Map<String, String> wordParse(MultipartFile file);
+
+    /**
+     * 鏂板婊℃剰搴﹁皟鏌�
+     * @param cnasSatisfactionSurvey
+     * @return
+     */
+    Boolean addSurvey(CnasSatisfactionSurvey cnasSatisfactionSurvey);
+}
diff --git a/cnas-server/src/main/java/com/yuanchu/limslaboratory/service/impl/CnasAnnualPlanServiceImpl.java b/cnas-server/src/main/java/com/yuanchu/limslaboratory/service/impl/CnasAnnualPlanServiceImpl.java
new file mode 100644
index 0000000..397621f
--- /dev/null
+++ b/cnas-server/src/main/java/com/yuanchu/limslaboratory/service/impl/CnasAnnualPlanServiceImpl.java
@@ -0,0 +1,92 @@
+package com.yuanchu.limslaboratory.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.limslaboratory.pojo.CnasAnnualPlan;
+import com.yuanchu.limslaboratory.mapper.CnasAnnualPlanMapper;
+import com.yuanchu.limslaboratory.pojo.vo.CnasAnnualPlanVo;
+import com.yuanchu.limslaboratory.service.CnasAnnualPlanService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.util.Date;
+
+/**
+ * <p>
+ * 瀹℃牳骞村害璁″垝琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-08-10 11:50:11
+ */
+@Service
+public class CnasAnnualPlanServiceImpl extends ServiceImpl<CnasAnnualPlanMapper, CnasAnnualPlan> implements CnasAnnualPlanService {
+
+    @Resource
+    private CnasAnnualPlanMapper cnasAnnualPlanMapper;
+
+    /**
+     * 鏌ヨ瀹℃牳璁″垝
+     *
+     * @return
+     */
+    @Override
+    public IPage<CnasAnnualPlanVo> selectAllList(Page<Object> objectPage, Date planTime) {
+        //鍒ゆ柇鏄惁鏈夋棩鏈�
+        Integer yearTime = null;
+        Integer monthTime = null;
+        if (planTime != null) {
+            yearTime = DateUtil.year(planTime);
+            monthTime = DateUtil.month(planTime) + 2;
+        }
+        IPage<CnasAnnualPlanVo> page = cnasAnnualPlanMapper.selectAllList(objectPage, yearTime, monthTime);
+        page.getRecords().forEach(cnasAnnualPlanVo -> {
+            //鑾峰彇璁″垝鏃堕棿
+            Date time = cnasAnnualPlanVo.getPlanTime();
+            //娣诲姞骞存湀
+            cnasAnnualPlanVo.setYear(DateUtil.year(time));
+            cnasAnnualPlanVo.setMonth(DateUtil.month(time) + 1);
+            //鍒ゆ柇瀹℃牳鐘舵��
+            //鑾峰彇褰撳墠鏃堕棿
+            Date nowDate = new Date();
+            //鑾峰彇褰撳墠鐨勫勾鏈�
+            int year = DateUtil.year(nowDate);
+            int month = DateUtil.month(nowDate) + 1;
+            if (cnasAnnualPlanVo.getAuditTime() == null && month > cnasAnnualPlanVo.getMonth() || year > cnasAnnualPlanVo.getYear()) {
+                cnasAnnualPlanVo.setAuditState(2);
+            } else if (cnasAnnualPlanVo.getAuditTime() != null) {
+                cnasAnnualPlanVo.setAuditState(1);
+            } else {
+                cnasAnnualPlanVo.setAuditState(0);
+            }
+        });
+        return page;
+    }
+
+    /**
+     * 涓婁紶闄勪欢
+     */
+    @Override
+    public void addAccessory(String name, Date auditTime, MultipartFile file) {
+        //todo: 涓婁紶闄勪欢鏈畬鎴�
+    }
+
+    /**
+     * 鍒犻櫎骞村害璁″垝
+     *
+     * @return
+     */
+    @Override
+    public Integer deleteCnasAnnualPlan(Integer planId) {
+        LambdaUpdateWrapper<CnasAnnualPlan> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.eq(CnasAnnualPlan::getId, planId);
+        updateWrapper.set(CnasAnnualPlan::getState, 0);
+        return cnasAnnualPlanMapper.update(new CnasAnnualPlan(), updateWrapper);
+    }
+}
diff --git a/cnas-server/src/main/java/com/yuanchu/limslaboratory/service/impl/CnasSatisfactionSurveyServiceImpl.java b/cnas-server/src/main/java/com/yuanchu/limslaboratory/service/impl/CnasSatisfactionSurveyServiceImpl.java
new file mode 100644
index 0000000..55da2b0
--- /dev/null
+++ b/cnas-server/src/main/java/com/yuanchu/limslaboratory/service/impl/CnasSatisfactionSurveyServiceImpl.java
@@ -0,0 +1,206 @@
+package com.yuanchu.limslaboratory.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.limslaboratory.mapper.CnasSatisfactionSurveyMapper;
+import com.yuanchu.limslaboratory.pojo.CnasSatisfactionSurvey;
+import com.yuanchu.limslaboratory.pojo.Dto.CnasSatisfactionSurveyPageDto;
+import com.yuanchu.limslaboratory.pojo.vo.CnasSatisfactionSurveyVo;
+import com.yuanchu.limslaboratory.service.CnasSatisfactionSurveyService;
+import com.yuanchu.limslaboratory.service.UserService;
+import com.yuanchu.limslaboratory.utils.MultipartFileToFileUtil;
+import org.apache.poi.hwpf.HWPFDocument;
+import org.apache.poi.hwpf.extractor.WordExtractor;
+import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
+import org.apache.poi.xwpf.usermodel.XWPFDocument;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/10
+ */
+@Service
+public class CnasSatisfactionSurveyServiceImpl implements CnasSatisfactionSurveyService {
+
+    private static final List<String> SELECT_LIST = Arrays.asList( "鈽戞弧鎰�=0", "鈽戜竴鑸�=1",  "鈽戜笉婊℃剰=2");
+
+
+    @Resource
+    private CnasSatisfactionSurveyMapper mapper;
+
+    @Resource
+    private UserService userService;
+
+    @Override
+    public CnasSatisfactionSurveyVo getCnasSatisfactionSurvey(CnasSatisfactionSurveyPageDto cnasSatisfactionSurveyPageDto) {
+        Page<CnasSatisfactionSurvey>page=new Page<>(cnasSatisfactionSurveyPageDto.getCurrentPage(), cnasSatisfactionSurveyPageDto.getPageNum(),true);
+        String surveyDate=DateUtil.format(cnasSatisfactionSurveyPageDto.getSurveyDate(), "yyyyMMdd");
+        String entryDate=DateUtil.format(cnasSatisfactionSurveyPageDto.getEntryDate(), "yyyyMMdd");;
+        IPage<CnasSatisfactionSurvey> cnasSatisfactionSurveyIPage = mapper.selectCnasSatisfactionSurvey(page,surveyDate,entryDate);
+        return new CnasSatisfactionSurveyVo(cnasSatisfactionSurveyIPage.getRecords(),cnasSatisfactionSurveyIPage.getTotal());
+    }
+
+    /**
+     *  鑾峰彇鐢ㄦ埛淇℃伅
+     * @param token
+     * @return
+     */
+    @Override
+    public Map<String, Object> getFillNameAndTd(String token) {
+        Map<String, Object> userInfo = userService.getUserInfo(token);
+        return userInfo;
+    }
+
+    @Override
+    public Map<String, String> wordParse(MultipartFile file) {
+        Map<String, String>result=null;
+        File multipartFileToFile = null;
+        try {
+            multipartFileToFile=MultipartFileToFileUtil.multipartFileToFile(file);
+            result=parseWord(multipartFileToFile);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }finally {
+            MultipartFileToFileUtil.delteTempFile(multipartFileToFile);
+        }
+        return result;
+    }
+
+    @Override
+    public Boolean addSurvey(CnasSatisfactionSurvey cnasSatisfactionSurvey) {
+        cnasSatisfactionSurvey.setCreatedTime(DateUtil.toLocalDateTime(DateUtil.date()));
+        return mapper.insert(cnasSatisfactionSurvey)>1;
+    }
+
+    /**
+     * 瑙f瀽word
+     * @param file
+     * @return
+     */
+    public static Map<String,String> parseWord(File file){
+        String info = "";
+        try {
+            FileInputStream fis = new FileInputStream(file);
+            String[] split = file.getName().split("\\.");
+            if ("doc".equals(split[split.length-1])) {
+                // 璇诲彇doc鏂囦欢
+                HWPFDocument doc = new HWPFDocument(fis);
+                WordExtractor docExtractor = new WordExtractor(doc);
+                String text = docExtractor.getText();
+                info = text.trim();
+                docExtractor.close();
+            } else if ("docx".equals(split[split.length-1])) {
+                // 璇诲彇docx鏂囦欢
+                XWPFDocument docx = new XWPFDocument(fis);
+                XWPFWordExtractor docxExtractor = new XWPFWordExtractor(docx);
+                String text = docxExtractor.getText();
+                System.out.println("docx:");
+                info = text.trim();
+                docxExtractor.close();
+            } else {
+                System.out.println("涓嶆槸word鏂囦欢");
+            }
+            fis.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        List<String> infoList = new ArrayList<String>();
+        String[] split = info.split("\n");
+        for (int i = 0; i < split.length; i++) {
+            if (i > 2) {
+                infoList.add(split[i]
+                        .replaceAll("\r","")
+                        .replaceAll(" ","")
+                        .replaceAll("\t","")
+                        .replaceAll("\\s","").replaceAll(" +",""));
+            }
+        }
+        Map<String, String> result = new HashMap<>();
+        //绗竴琛�
+        String unitName="鍗曚綅鍚嶇ОUnitname";
+        String projectName="椤圭洰鍚嶇ОProjectname";
+        String[] one = infoList.get(0).replace(unitName, "").split(projectName);
+        result.put("unitName",one[0]);
+        result.put("projectName",one[1]);
+        String fillName="濉〃浜哄鍚嶏紡鏃ユ湡Name/dateofthepersonfillingintheform";
+        String post="鑱屼綅Posts";
+        String telephone="鑱旂郴鐢佃瘽Contactnumber";
+        String email="閭紪Zip";
+        String[] split1 = infoList.get(1).replace(fillName, "").split(post);
+        result.put("fillName",split1[0]);
+        String[] split2 = split1[1].split(telephone);
+        result.put("post",split2[0]);
+        String[] split3 = split2[1].split(email);
+        result.put("telephone",split3[0]);
+        result.put("email",split3[1]);
+        //绗簩琛�
+        String serviceAttitude="鏈嶅姟鎬佸害Serviceattitude";
+        //鏈嶅姟鎬佸害鍜屽缓璁�
+        String two = getSelectAndAdvise(infoList.get(2), serviceAttitude);
+        result.put("serviceAttitude",two);
+        //绗笁琛�
+        String technicalPower="鎶�鏈兘鍔汿echnicalcompetence";
+        String three = getSelectAndAdvise(infoList.get(3), technicalPower);
+        result.put("technicalPower",three);
+        //绗洓琛�
+        String testJob="妫�娴嬪伐浣淚nspectionwork";
+        String four = getSelectAndAdvise(infoList.get(4), testJob);
+        result.put("testJob",four);
+        //绗簲琛�
+        String reasonableCharge="鏀惰垂鍚堢悊鎬easonablefees";
+        String five = getSelectAndAdvise(infoList.get(5), reasonableCharge);
+        result.put("reasonableCharge",five);
+        //绗叚琛�
+        String improvementRequirements="鏀硅繘鐨勮姹傦細";
+        String requirementsForImprovement="Requirementsforimprovement:";
+        String six = infoList.get(6).replace(improvementRequirements, "").replace(requirementsForImprovement, "");
+        result.put("improvementRequirements",six);
+        //绗竷琛�
+        String otherSupplements="鎮ㄥ鎴戜滑鐨勫笇鏈涳細";
+        String otherEnglish="Whatyouwantfromus:";
+        String seven = infoList.get(7).replace(otherSupplements, "").replace(otherEnglish, "");
+        result.put("otherSupplements",seven);
+        return result;
+    }
+
+
+    /**
+     * 鑾峰彇閫夋嫨浠ュ強寤鸿
+     * @param str
+     * @param type
+     * @return
+     */
+    public static String getSelectAndAdvise(String str,String type){
+        String adviseInfo="寤鸿锛�";
+        String suggestion="Suggestion:";
+        String satisfied="Satisfied";
+        String general="General";
+        String dissatisfied="Dissatisfied";
+        String[] split4 = str.replace(type, "").replace(suggestion, "").split(adviseInfo);
+        List<String>select=new ArrayList<>();
+        String advise=split4[1];
+        String[] split5 = split4[0].split(satisfied);
+        select.add(split5[0]);
+        String[] split6 = split5[1].split(general);
+        select.add(split6[0]);
+        select.add(split6[1].replace(dissatisfied,""));
+        String selected = getSelected(select);
+        return selected+"/$"+advise;
+    }
+
+    public static String getSelected(List<String> select){
+        String collect = SELECT_LIST.stream().filter(item -> select.stream()
+                .map(e -> e).collect(Collectors.toList())
+                .contains(item.split("=")[0])).collect(Collectors.joining());
+        return collect.split("=")[1];
+    }
+}
diff --git a/cnas-server/src/main/resources/mapper/CnasAnnualPlanMapper.xml b/cnas-server/src/main/resources/mapper/CnasAnnualPlanMapper.xml
new file mode 100644
index 0000000..8f53657
--- /dev/null
+++ b/cnas-server/src/main/resources/mapper/CnasAnnualPlanMapper.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yuanchu.limslaboratory.mapper.CnasAnnualPlanMapper">
+    <!--鏌ヨ瀹℃牳璁″垝-->
+    <select id="selectAllList" resultType="com.yuanchu.limslaboratory.pojo.vo.CnasAnnualPlanVo">
+        select id,
+        audit_type,
+        department,
+        audit_purpose,
+        audit_leader,
+        audit_emp,
+        audit_pursuant,
+        audit_scope,
+        write_user,
+        keyboarder,
+        plan_time,
+        count,
+        state,
+        audit_time,
+        update_time
+        from cnas_annual_plan
+        where state = 1
+        <if test="year != null and month != null">
+            and year(plan_time) = #{year}
+            and month(plan_time) = #{month}
+        </if>
+        order by id desc
+    </select>
+</mapper>
diff --git a/cnas-server/src/main/resources/mapper/CnasSatisfactionSurveyMapper.xml b/cnas-server/src/main/resources/mapper/CnasSatisfactionSurveyMapper.xml
new file mode 100644
index 0000000..3302613
--- /dev/null
+++ b/cnas-server/src/main/resources/mapper/CnasSatisfactionSurveyMapper.xml
@@ -0,0 +1,38 @@
+<?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.yuanchu.limslaboratory.mapper.CnasSatisfactionSurveyMapper">
+
+    <select id="selectCnasSatisfactionSurvey"
+            resultType="CnasSatisfactionSurvey">
+        SELECT
+            css.id id,
+            css.project_name projectName,
+            css.survey_date surveyDate,
+            css.user_unit userUnit,
+            css.`fill_name` fillName,
+            css.post post,
+            css.telephone telephone,
+            css.entry_date entryDate,
+            u.`name` userName,
+            css.service_attitude serviceAttitude,
+            css.technical_power technicalPower,
+            css.test_job testJob,
+            css.reasonable_charge reasonableCharge,
+            css.improvement_requirements improvementRequirements,
+            css.other_supplements otherSupplements
+        FROM
+            cnas_satisfaction_survey css,
+            `user` u
+        WHERE
+            1 = 1
+          AND css.user_id = u.id
+          and css.state=1
+        <if test="surveyDate!=null">
+            and date_format(css.survey_date,'%Y%m%d') = ${surveyDate}
+        </if>
+        <if test="entryDate!=null">
+            and date_format(css.entry_date,'%Y%m%d') = ${entryDate}
+        </if>
+        order by css.id Desc
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/framework/pom.xml b/framework/pom.xml
index 9a79668..cfae3f2 100644
--- a/framework/pom.xml
+++ b/framework/pom.xml
@@ -12,7 +12,6 @@
     <version>0.0.1-SNAPSHOT</version>
     <name>framework</name>
     <description>framework</description>
-
     <packaging>jar</packaging>
     <dependencies>
         <!--鏁版嵁搴撹繛鎺ユ睜-->
@@ -20,7 +19,12 @@
             <groupId>com.alibaba</groupId>
             <artifactId>druid</artifactId>
         </dependency>
-
+        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-lang3</artifactId>
+            <version>${commons.lang3}</version>
+        </dependency>
         <!-- mysql椹卞姩 -->
         <dependency>
             <groupId>mysql</groupId>
@@ -38,6 +42,11 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-redis</artifactId>
         </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.8.18</version>
+        </dependency>
     </dependencies>
 
 </project>
diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/utils/MultipartFileToFileUtil.java b/framework/src/main/java/com/yuanchu/limslaboratory/utils/MultipartFileToFileUtil.java
new file mode 100644
index 0000000..a867564
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/limslaboratory/utils/MultipartFileToFileUtil.java
@@ -0,0 +1,70 @@
+package com.yuanchu.limslaboratory.utils;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+/**
+ * @Author 寮犲
+ * @Date 2022/8/5
+ */
+@Slf4j
+public class MultipartFileToFileUtil {
+    /**
+     * MultipartFile 杞� File
+     *
+     * @param file
+     * @throws Exception
+     */
+    public static File multipartFileToFile(MultipartFile file) throws Exception {
+
+        File toFile = null;
+        if (file.equals("") || file.getSize() <= 0) {
+            file = null;
+        } else {
+            InputStream ins = null;
+            ins = file.getInputStream();
+            toFile = new File(file.getOriginalFilename());
+            inputStreamToFile(ins, toFile);
+            ins.close();
+        }
+        return toFile;
+    }
+
+    //鑾峰彇娴佹枃浠�
+    private static void inputStreamToFile(InputStream ins, File file) {
+        try {
+            OutputStream os = new FileOutputStream(file);
+            int bytesRead = 0;
+            byte[] buffer = new byte[8192];
+            while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
+                os.write(buffer, 0, bytesRead);
+            }
+            os.close();
+            ins.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 鍒犻櫎鏈湴涓存椂鏂囦欢
+     * @param file
+     */
+    public static void delteTempFile(File file) {
+        if (file != null) {
+            String name = file.getName();
+            File del = new File(file.toURI());
+            if (del.delete()){
+                log.info("鍒犻櫎涓存椂鏂囦欢"+name+"鎴愬姛!");
+            }else {
+                log.error("鍒犻櫎涓存椂鏂囦欢"+name+"澶辫触!");
+            }
+        }
+    }
+
+}
diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/utils/MyUtil.java b/framework/src/main/java/com/yuanchu/limslaboratory/utils/MyUtil.java
index a9e8ade..2dc3810 100644
--- a/framework/src/main/java/com/yuanchu/limslaboratory/utils/MyUtil.java
+++ b/framework/src/main/java/com/yuanchu/limslaboratory/utils/MyUtil.java
@@ -63,13 +63,13 @@
         return sb.toString();
     }
 
-    public static String getTimeSixNumberCode(String prefix){
+    public static String getTimeSixNumberCode(String prefix,String name){
         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
         String format = simpleDateFormat.format(new Date());
         String timeStr = format.replace("-", "");
-        long incrNum = RedisUtil.incr("num", 1);
+        long incrNum = RedisUtil.incr(name, 1);
         if(incrNum == 1){
-            RedisUtil.expire("num", 60 * 60 * 24);
+            RedisUtil.expire(name, 60 * 60 * 24);
         }
         String sixIncr = String.format("%06d", incrNum);
         return prefix + timeStr + sixIncr;
diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/utils/ThreadPoolConfig.java b/framework/src/main/java/com/yuanchu/limslaboratory/utils/ThreadPoolConfig.java
new file mode 100644
index 0000000..2927710
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/limslaboratory/utils/ThreadPoolConfig.java
@@ -0,0 +1,62 @@
+package com.yuanchu.limslaboratory.utils;
+
+import org.apache.commons.lang3.concurrent.BasicThreadFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+/**
+ * 绾跨▼姹犻厤缃�
+ *
+ * @author 寮犲
+ **/
+@Configuration
+public class ThreadPoolConfig
+{
+    // 鏍稿績绾跨▼姹犲ぇ灏�
+    private int corePoolSize = 50;
+
+    // 鏈�澶у彲鍒涘缓鐨勭嚎绋嬫暟
+    private int maxPoolSize = 200;
+
+    // 闃熷垪鏈�澶ч暱搴�
+    private int queueCapacity = 1000;
+
+    // 绾跨▼姹犵淮鎶ょ嚎绋嬫墍鍏佽鐨勭┖闂叉椂闂�
+    private int keepAliveSeconds = 300;
+
+    @Bean(name = "threadPoolTaskExecutor")
+    public ThreadPoolTaskExecutor threadPoolTaskExecutor()
+    {
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        executor.setMaxPoolSize(maxPoolSize);
+        executor.setCorePoolSize(corePoolSize);
+        executor.setQueueCapacity(queueCapacity);
+        executor.setKeepAliveSeconds(keepAliveSeconds);
+        // 绾跨▼姹犲鎷掔粷浠诲姟(鏃犵嚎绋嬪彲鐢�)鐨勫鐞嗙瓥鐣�
+        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+        return executor;
+    }
+
+    /**
+     * 鎵ц鍛ㄦ湡鎬ф垨瀹氭椂浠诲姟
+     */
+    @Bean(name = "scheduledExecutorService")
+    protected ScheduledExecutorService scheduledExecutorService()
+    {
+        return new ScheduledThreadPoolExecutor(corePoolSize,
+                new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build())
+        {
+            @Override
+            protected void afterExecute(Runnable r, Throwable t)
+            {
+                super.afterExecute(r, t);
+                Threads.printException(r, t);
+            }
+        };
+    }
+}
diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/utils/Threads.java b/framework/src/main/java/com/yuanchu/limslaboratory/utils/Threads.java
new file mode 100644
index 0000000..6ec69b3
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/limslaboratory/utils/Threads.java
@@ -0,0 +1,96 @@
+package com.yuanchu.limslaboratory.utils;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.concurrent.*;
+
+/**
+ * 绾跨▼鐩稿叧宸ュ叿绫�.
+ * 
+ * @author 寮犲
+ */
+public class Threads
+{
+    private static final Logger logger = LoggerFactory.getLogger(Threads.class);
+
+    /**
+     * sleep绛夊緟,鍗曚綅涓烘绉�
+     */
+    public static void sleep(long milliseconds)
+    {
+        try
+        {
+            Thread.sleep(milliseconds);
+        }
+        catch (InterruptedException e)
+        {
+            return;
+        }
+    }
+
+    /**
+     * 鍋滄绾跨▼姹�
+     * 鍏堜娇鐢╯hutdown, 鍋滄鎺ユ敹鏂颁换鍔″苟灏濊瘯瀹屾垚鎵�鏈夊凡瀛樺湪浠诲姟.
+     * 濡傛灉瓒呮椂, 鍒欒皟鐢╯hutdownNow, 鍙栨秷鍦╳orkQueue涓璓ending鐨勪换鍔�,骞朵腑鏂墍鏈夐樆濉炲嚱鏁�.
+     * 濡傛灉浠嶄汉瓒呮檪锛屽墖寮峰埗閫�鍑�.
+     * 鍙﹀鍦╯hutdown鏃剁嚎绋嬫湰韬璋冪敤涓柇鍋氫簡澶勭悊.
+     */
+    public static void shutdownAndAwaitTermination(ExecutorService pool)
+    {
+        if (pool != null && !pool.isShutdown())
+        {
+            pool.shutdown();
+            try
+            {
+                if (!pool.awaitTermination(120, TimeUnit.SECONDS))
+                {
+                    pool.shutdownNow();
+                    if (!pool.awaitTermination(120, TimeUnit.SECONDS))
+                    {
+                        logger.info("Pool did not terminate");
+                    }
+                }
+            }
+            catch (InterruptedException ie)
+            {
+                pool.shutdownNow();
+                Thread.currentThread().interrupt();
+            }
+        }
+    }
+
+    /**
+     * 鎵撳嵃绾跨▼寮傚父淇℃伅
+     */
+    public static void printException(Runnable r, Throwable t)
+    {
+        if (t == null && r instanceof Future<?>)
+        {
+            try
+            {
+                Future<?> future = (Future<?>) r;
+                if (future.isDone())
+                {
+                    future.get();
+                }
+            }
+            catch (CancellationException ce)
+            {
+                t = ce;
+            }
+            catch (ExecutionException ee)
+            {
+                t = ee.getCause();
+            }
+            catch (InterruptedException ie)
+            {
+                Thread.currentThread().interrupt();
+            }
+        }
+        if (t != null)
+        {
+            logger.error(t.getMessage(), t);
+        }
+    }
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionController.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionController.java
index dd191cd..027e223 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionController.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionController.java
@@ -7,6 +7,7 @@
 
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.yuanchu.limslaboratory.pojo.Inspection;
+import com.yuanchu.limslaboratory.pojo.Report;
 import com.yuanchu.limslaboratory.pojo.vo.InspectionVo;
 import com.yuanchu.limslaboratory.service.LinkBasicInformationService;
 import com.yuanchu.limslaboratory.service.RawMaterialService;
@@ -21,6 +22,7 @@
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yuanchu.limslaboratory.service.InspectionService;
+
 import javax.annotation.Resource;
 
 /**
@@ -66,13 +68,13 @@
     @GetMapping("/selectAll")
     public Result selectAll(Integer type) {
         switch (type) {
-            case 0 :
+            case 0:
                 //鍘熸潗鏂�
                 return Result.success(rawMaterialService.selectRawmaAll());
-            case 1 :
+            case 1:
                 //濮旀墭鍗�
                 return Result.success(linkBasicInformationService.selectLinkAll());
-            case 2 :
+            case 2:
                 //鎴愬搧妫�楠�
                 return Result.success("璇疯緭鍏ユ楠屼俊鎭�!");
         }
@@ -88,7 +90,7 @@
     })
     @GetMapping("/selectRawmaById")
     public Result selectRawmaById(Integer id, String startTime, String endTime) throws ParseException {
-        return Result.success(rawMaterialService.selectRawmaById(id,startTime,endTime));
+        return Result.success(rawMaterialService.selectRawmaById(id, startTime, endTime));
     }
 
 
@@ -97,6 +99,8 @@
             @ApiImplicitParam(name = "bid", value = "濮旀墭鎶ユ鍗昳d", dataTypeClass = Integer.class, required = true),
             @ApiImplicitParam(name = "did", value = "濮旀墭鎶ユ鏍峰搧id", dataTypeClass = Integer.class, required = true)
     })
+
+
     @GetMapping("/selectLinkByid")
     public Result selectLinkByid(Integer bid, Integer did) {
         return Result.success(linkBasicInformationService.selectLinkByid(bid, did));
@@ -133,7 +137,6 @@
         }
         return Result.success(inspectionService.updateInspectsById(id));
     }
-
 
 }
 
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/NonConformanceReviewController.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/NonConformanceReviewController.java
new file mode 100644
index 0000000..4f05322
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/NonConformanceReviewController.java
@@ -0,0 +1,35 @@
+package com.yuanchu.limslaboratory.controller;
+
+import com.yuanchu.limslaboratory.pojo.Dto.NonConformingFeedbackDto;
+import com.yuanchu.limslaboratory.pojo.NonConformanceReview;
+import com.yuanchu.limslaboratory.pojo.vo.NonConformanceReviewVo;
+import com.yuanchu.limslaboratory.service.NonConformanceReviewService;
+import com.yuanchu.limslaboratory.vo.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/9
+ */
+@Api(tags = "璇曢獙绠$悊-->涓嶅悎鏍煎搧璇勫")
+@RestController
+@RequestMapping("/nonConformanceReview")
+public class NonConformanceReviewController {
+
+    @Resource
+    private NonConformanceReviewService service;
+
+
+    @GetMapping("/getNonConformanceReview")
+    @ApiOperation("涓嶅悎鏍煎搧鍙嶉-->鑾峰彇涓嶅悎鏍煎搧璇勫淇℃伅")
+    public Result<NonConformanceReviewVo> getNonConformanceReview(NonConformingFeedbackDto nonConformingFeedbackDto){
+
+        return Result.success(service.getNonConformanceReviewVo(nonConformingFeedbackDto));
+    }
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/NonConformingFeedbackController.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/NonConformingFeedbackController.java
new file mode 100644
index 0000000..2b4c81a
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/NonConformingFeedbackController.java
@@ -0,0 +1,35 @@
+package com.yuanchu.limslaboratory.controller;
+
+import com.yuanchu.limslaboratory.pojo.Dto.NonConformingFeedbackDto;
+import com.yuanchu.limslaboratory.pojo.NonConformingFeedback;
+import com.yuanchu.limslaboratory.pojo.vo.NonConformingFeedbackVo;
+import com.yuanchu.limslaboratory.service.NonConformingFeedbackService;
+import com.yuanchu.limslaboratory.vo.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/9
+ */
+@Api(tags = "璇曢獙绠$悊-->涓嶅悎鏍煎搧鍙嶉")
+@RestController
+@RequestMapping("/non-conforming-feedback")
+public class NonConformingFeedbackController {
+
+    @Resource
+    private NonConformingFeedbackService service;
+
+    @GetMapping("/getNonConformingFeedback")
+    @ApiOperation("涓嶅悎鏍煎搧鍙嶉-->鑾峰彇涓嶅悎鏍煎搧淇℃伅")
+    public Result<NonConformingFeedbackVo> getNonConformingFeedback(NonConformingFeedbackDto nonConformingFeedbackDto){
+        return Result.success(service.getNonConformingFeedback(nonConformingFeedbackDto));
+    }
+
+
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/PlanController.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/PlanController.java
new file mode 100644
index 0000000..79bace6
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/PlanController.java
@@ -0,0 +1,47 @@
+package com.yuanchu.limslaboratory.controller;
+
+import com.yuanchu.limslaboratory.pojo.vo.PlanVo;
+import com.yuanchu.limslaboratory.service.PlanService;
+import com.yuanchu.limslaboratory.vo.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.*;
+
+/**
+ * <p>
+ * 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-08-09
+ */
+@Api(tags = "妫�楠屾ā鍧�-->妫�楠岃鍒�")
+@RestController
+@RequestMapping("/plan")
+public class PlanController {
+
+    @Resource
+    private PlanService planService;
+
+
+    @ApiOperation("鏌ヨ妫�楠岃鍒�")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "device", value = "璁惧鍚嶇ОId", dataTypeClass = String.class),
+            @ApiImplicitParam(name = "beginTime", value = "妫�楠屽紑濮嬫椂闂�", dataTypeClass = Date.class),
+            @ApiImplicitParam(name = "endTime", value = "妫�楠岀粨鏉熸椂闂�", dataTypeClass = Date.class),
+            @ApiImplicitParam(name = "user", value = "妫�楠屼汉", dataTypeClass = String.class)
+    })
+    @GetMapping("/selectAllPlan")
+    public Result selectAllPlan(String device, @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, String user) {
+        List<PlanVo> planVoList = planService.selectAllPlan(device, beginTime, endTime, user);
+        return Result.success(planVoList);
+    }
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/ReportCheckController.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/ReportAuditingController.java
similarity index 77%
rename from inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/ReportCheckController.java
rename to inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/ReportAuditingController.java
index 920a1a2..f8b6e42 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/ReportCheckController.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/ReportAuditingController.java
@@ -3,18 +3,18 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.yuanchu.limslaboratory.pojo.vo.ReportCheckVo;
-import com.yuanchu.limslaboratory.service.ReportCheckService;
+import com.yuanchu.limslaboratory.pojo.vo.ReportAuditingVo;
+import com.yuanchu.limslaboratory.service.ReportAuditingService;
 import com.yuanchu.limslaboratory.vo.Result;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -29,13 +29,13 @@
  */
 @Api(tags = "妫�楠屾ā鍧�-->鎶ュ憡瀹℃牳")
 @RestController
-@RequestMapping("/reportCheck")
-public class ReportCheckController {
+@RequestMapping("/reportAuditing")
+public class ReportAuditingController {
     /**
      * 鏈嶅姟瀵硅薄
      */
-    @Autowired
-    private ReportCheckService reportCheckService;
+    @Resource
+    private ReportAuditingService reportAuditingService;
 
     @ApiOperation("鏌ヨ鎶ュ憡瀹℃牳鍐呭")
     @ApiImplicitParams(value = {
@@ -44,9 +44,9 @@
             @ApiImplicitParam(name = "status", value = "鐘舵��(涓虹┖=鍏ㄩ儴)", dataTypeClass = Integer.class),
             @ApiImplicitParam(name = "name", value = "鎼滅储淇℃伅", dataTypeClass = String.class)
     })
-    @GetMapping("/selectAllReportCheck")
+    @GetMapping("/selectAllReportAuditing")
     public Result selectAllReportCheck(Integer page, Integer pageSize, Integer status, String name) {
-        IPage<ReportCheckVo> reportPage = reportCheckService.selectAllReportCheck(new Page<Object>(page, pageSize), status, name);
+        IPage<ReportAuditingVo> reportPage = reportAuditingService.selectAllReportAuditing(new Page<Object>(page, pageSize), status, name);
         Map<String, Object> map = new HashMap<>();
         map.put("total", reportPage.getTotal());
         map.put("row", reportPage.getRecords());
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/ReportController.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/ReportController.java
index 50b9302..5a3ece9 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/ReportController.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/ReportController.java
@@ -15,6 +15,7 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -34,7 +35,7 @@
     /**
      * 鏈嶅姟瀵硅薄
      */
-    @Autowired
+    @Resource
     private ReportService reportService;
 
     @ApiOperation("鏌ヨ妫�楠屾姤鍛�")
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/NonConformanceReviewMapper.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/NonConformanceReviewMapper.java
new file mode 100644
index 0000000..a64d101
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/NonConformanceReviewMapper.java
@@ -0,0 +1,20 @@
+package com.yuanchu.limslaboratory.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.yuanchu.limslaboratory.pojo.Dto.NonConformanceReviewDto;
+import com.yuanchu.limslaboratory.pojo.Dto.NonConformingFeedbackDto;
+import com.yuanchu.limslaboratory.pojo.NonConformanceReview;
+import com.yuanchu.limslaboratory.pojo.NonConformingFeedback;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/9
+ */
+@Repository
+public interface NonConformanceReviewMapper extends BaseMapper<NonConformanceReview> {
+
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/NonConformingFeedbackMapper.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/NonConformingFeedbackMapper.java
new file mode 100644
index 0000000..3080ae6
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/NonConformingFeedbackMapper.java
@@ -0,0 +1,24 @@
+package com.yuanchu.limslaboratory.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.yuanchu.limslaboratory.mybatis_config.MyBaseMapper;
+import com.yuanchu.limslaboratory.pojo.Dto.NonConformingFeedbackDto;
+import com.yuanchu.limslaboratory.pojo.LinkDetection;
+import com.yuanchu.limslaboratory.pojo.NonConformingFeedback;
+import com.yuanchu.limslaboratory.pojo.RawMaterial;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.Objects;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/9
+ */
+@Repository
+public interface NonConformingFeedbackMapper extends BaseMapper<NonConformingFeedback> {
+
+    IPage<NonConformingFeedback> selectNonConformingFeedback(@Param("nonConformingFeedbackDto") NonConformingFeedbackDto nonConformingFeedbackDto, Page page);
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/PlanMapper.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/PlanMapper.java
new file mode 100644
index 0000000..b725119
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/PlanMapper.java
@@ -0,0 +1,14 @@
+package com.yuanchu.limslaboratory.mapper;
+
+import com.yuanchu.limslaboratory.pojo.vo.PlanVo;
+
+import java.util.Date;
+import java.util.List;
+
+public interface PlanMapper {
+    /**
+     * 鏌ヨ妫�楠岃鍒�
+     * @return
+     */
+    List<PlanVo> selectAllPlan(String device, Date beginTime, Date endTime, String user);
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/ReportMapper.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/ReportMapper.java
index 3f9d8d4..c5f3504 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/ReportMapper.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/ReportMapper.java
@@ -4,7 +4,7 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yuanchu.limslaboratory.pojo.Report;
-import com.yuanchu.limslaboratory.pojo.vo.ReportCheckVo;
+import com.yuanchu.limslaboratory.pojo.vo.ReportAuditingVo;
 import com.yuanchu.limslaboratory.pojo.vo.ReportVo;
 
 /**
@@ -28,6 +28,6 @@
      * 鏌ヨ鎶ュ憡瀹℃牳
      * @return
      */
-    IPage<ReportCheckVo> selectAllReportCheck(Page<Object> page, Integer status, String name);
+    IPage<ReportAuditingVo> selectAllReportAuditing(Page<Object> page, Integer status, String name);
 }
 
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/NonConformanceReviewDto.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/NonConformanceReviewDto.java
new file mode 100644
index 0000000..9abeff1
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/NonConformanceReviewDto.java
@@ -0,0 +1,37 @@
+package com.yuanchu.limslaboratory.pojo.Dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/9
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="NonConformanceReviewDto瀵硅薄", description="")
+public class NonConformanceReviewDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "褰撳墠椤�", example = "1", required = true)
+    private Long currentPage;
+
+    @ApiModelProperty(value = "鍒嗛〉澶氬皯鏉�", example = "10", required = true)
+    private Long pageNum;
+
+    @ApiModelProperty(value = "鏍峰搧缂栧彿", example = "1680929494813868034", required = true)
+    private String materialCode;
+
+    @ApiModelProperty(value = "鏍峰搧鍚嶇О", example = "鐢电嚎鐢电紗", required = true)
+    private String materialName;
+
+    @ApiModelProperty(value = "鐢宠鍗曞彿", example = "XG-UGYUGH", required = true)
+    private String inspectionCode;
+
+
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/NonConformingFeedbackDto.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/NonConformingFeedbackDto.java
new file mode 100644
index 0000000..5ed3e80
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/NonConformingFeedbackDto.java
@@ -0,0 +1,35 @@
+package com.yuanchu.limslaboratory.pojo.Dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/9
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="NonConformingFeedbackDto瀵硅薄", description="")
+public class NonConformingFeedbackDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "褰撳墠椤�", example = "1", required = true)
+    private Long currentPage;
+
+    @ApiModelProperty(value = "鍒嗛〉澶氬皯鏉�", example = "10", required = true)
+    private Long pageNum;
+
+    @ApiModelProperty(value = "鏍峰搧缂栧彿", example = "1680929494813868034", required = true)
+    private String materialCode;
+
+    @ApiModelProperty(value = "鏍峰搧鍚嶇О", example = "鐢电嚎鐢电紗", required = true)
+    private String materialName;
+
+    @ApiModelProperty(value = "鐢宠鍗曞彿", example = "XG-UGYUGH", required = true)
+    private String inspectionCode;
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/NonConformanceReview.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/NonConformanceReview.java
new file mode 100644
index 0000000..71b1e6c
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/NonConformanceReview.java
@@ -0,0 +1,102 @@
+package com.yuanchu.limslaboratory.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.sql.Date;
+import java.time.LocalDateTime;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/9
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="涓嶇鍚堝搧璇勫瀵硅薄", description="")
+@TableName("tb_non_conformance_review")
+public class NonConformanceReview implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Long id;
+
+    /**
+     * 鏍峰搧缂栧彿
+     */
+    private String materialCode;
+
+    /**
+     * 鏍峰搧鍚嶇О
+     */
+    private String materialName;
+
+    /**
+     * 鐢宠鍗曞彿
+     */
+    private String inspectionCode;
+
+    /**
+     * 鐧昏鏃ユ湡
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date createTime;
+
+    /**
+     * 瀹為獙璐熻矗浜�
+     */
+    private String testManager;
+
+    /**
+     * 瑙勬牸鍨嬪彿
+     */
+    private String specifications;
+
+    /**
+     * 鍒涘缓浜�
+     */
+    private String createdUser;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd HH:mm:ss"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd HH:mm:ss"
+    )
+    private LocalDateTime createdTime;
+
+    /**
+     * 淇敼浜�
+     */
+    private String updatedUser;
+
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @DateTimeFormat(
+            pattern = "yyyy-MM-dd HH:mm:ss"
+    )
+    @JsonFormat(
+            pattern = "yyyy-MM-dd HH:mm:ss"
+    )
+    private LocalDateTime updatedTime;
+
+    /**
+     * 閫昏緫鍒犻櫎
+     */
+    @TableLogic(value = "1")
+    private Integer state;
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/NonConformingFeedback.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/NonConformingFeedback.java
new file mode 100644
index 0000000..845460b
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/NonConformingFeedback.java
@@ -0,0 +1,53 @@
+package com.yuanchu.limslaboratory.pojo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.sql.Date;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/9
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class NonConformingFeedback  implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 鏍峰搧缂栧彿
+     */
+    private String materialCode;
+
+    /**
+     * 鏍峰搧鍚嶇О
+     */
+    private String materialName;
+
+    /**
+     * 鐢宠鍗曞彿
+     */
+    private String inspectionCode;
+
+    /**
+     * 鐧昏鏃ユ湡
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date createTime;
+
+    /**
+     * 瀹為獙璐熻矗浜�
+     */
+    private String testManager;
+
+    /**
+     * 瑙勬牸鍨嬪彿
+     */
+    private String specifications;
+
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Report.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Report.java
index d1ab3bb..0ecf6b6 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Report.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Report.java
@@ -20,8 +20,8 @@
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
-@ApiModel(value="InspectionReport瀵硅薄", description="")
-@TableName("inspection_report")
+@ApiModel(value="Report瀵硅薄", description="")
+@TableName("report")
 public class Report implements Serializable {
     private static final long serialVersionUID = 1L;
 
@@ -38,8 +38,8 @@
     @ApiModelProperty(value = "瀹℃牳缁撹")
     private String conclusion;
 
-    @ApiModelProperty(value = "瀹℃牳浜篿d")
-    private Integer userId;
+    @ApiModelProperty(value = "瀹℃牳浜�")
+    private String approver;
 
     @ApiModelProperty(value = "鍏宠仈 鐢宠琛╥d")
     private Integer inspectionId;
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/NonConformanceReviewVo.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/NonConformanceReviewVo.java
new file mode 100644
index 0000000..a7c8646
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/NonConformanceReviewVo.java
@@ -0,0 +1,30 @@
+package com.yuanchu.limslaboratory.pojo.vo;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.yuanchu.limslaboratory.pojo.NonConformanceReview;
+import com.yuanchu.limslaboratory.pojo.NonConformingFeedback;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/9
+ */
+@Data
+public class NonConformanceReviewVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @JsonSerialize
+    private List<NonConformanceReview> nonConformanceReviewList;
+
+    @JsonSerialize
+    private Long total;
+
+    public NonConformanceReviewVo(List<NonConformanceReview> nonConformanceReviewList, Long total) {
+        this.nonConformanceReviewList = nonConformanceReviewList;
+        this.total = total;
+    }
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/NonConformingFeedbackVo.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/NonConformingFeedbackVo.java
new file mode 100644
index 0000000..f4d337d
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/NonConformingFeedbackVo.java
@@ -0,0 +1,32 @@
+package com.yuanchu.limslaboratory.pojo.vo;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.yuanchu.limslaboratory.pojo.Inspection;
+import com.yuanchu.limslaboratory.pojo.InspectionMaterial;
+import com.yuanchu.limslaboratory.pojo.NonConformingFeedback;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/9
+ */
+@Data
+public class NonConformingFeedbackVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @JsonSerialize
+    private List<NonConformingFeedback> nonConformingFeedbackList;
+
+    @JsonSerialize
+    private Long total;
+
+    public NonConformingFeedbackVo(List<NonConformingFeedback> nonConformingFeedbackList, Long total) {
+        this.nonConformingFeedbackList = nonConformingFeedbackList;
+        this.total = total;
+    }
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/PlanVo.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/PlanVo.java
new file mode 100644
index 0000000..a2a6253
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/PlanVo.java
@@ -0,0 +1,54 @@
+package com.yuanchu.limslaboratory.pojo.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 妫�楠岃鍒扸O
+ */
+@Data
+public class PlanVo {
+    @ApiModelProperty(value = "璁惧鍚嶇О")
+    @JsonSerialize
+    private String device;
+    @ApiModelProperty(value = "鏍峰搧鍚嶇О")
+    @JsonSerialize
+    private String samplename;
+    @ApiModelProperty(value = "鏍峰搧缂栧彿")
+    @JsonSerialize
+    private String sampleid;
+    @ApiModelProperty(value = "瑙勬牸鍨嬪彿")
+    @JsonSerialize
+    private String modelandspecification;
+    @ApiModelProperty(value = "鍗曚綅")
+    @JsonSerialize
+    private String unit;
+    @ApiModelProperty(value = "鏁伴噺")
+    @JsonSerialize
+    private Integer amount;
+    @ApiModelProperty(value = "妫�楠岄」鐩�")
+    @JsonSerialize
+    private String checkproject;
+    @ApiModelProperty(value = "妫�楠屼汉")
+    @JsonSerialize
+    private String checker;
+    @ApiModelProperty(value = "璁″垝宸ユ湡")
+    @JsonSerialize
+    private Integer duration;
+    @ApiModelProperty(value = "妫�楠岃繘搴�0:鏈垎閰�, 50:妫�楠屼腑, 100:宸插畬鎴�")
+    @JsonSerialize
+    private Integer progress;
+    @ApiModelProperty(value = "璁″垝寮�濮嬫椂闂�")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
+    private Date starttime;
+    @ApiModelProperty(value = "璁″垝缁撴潫鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
+    private Date finishtime;
+
+    //鍒ゆ柇椤圭洰鐘舵��
+    private Integer state;
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/ReportCheckVo.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/ReportAuditingVo.java
similarity index 84%
rename from inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/ReportCheckVo.java
rename to inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/ReportAuditingVo.java
index 60bb95e..7e7ffd1 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/ReportCheckVo.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/ReportAuditingVo.java
@@ -11,7 +11,7 @@
  * 鎶ュ憡瀹℃牳
  */
 @Data
-public class ReportCheckVo {
+public class ReportAuditingVo {
     @ApiModelProperty(value = "鏍峰搧缂栧彿")
     @JsonSerialize
     private String materialCode;
@@ -28,9 +28,9 @@
     @JsonSerialize
     private Integer approver;
     @ApiModelProperty(value = "鎻愪氦鏃ユ湡")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date submitTime;
     @ApiModelProperty(value = "瀹℃牳鏃ユ湡")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date checkTime;
 }
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/ReportVo.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/ReportVo.java
index 0bb084b..9c7849e 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/ReportVo.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/ReportVo.java
@@ -21,7 +21,7 @@
     @ApiModelProperty(value = "瀹℃壒浜�")
     @JsonSerialize
     private Integer approver;
-    @ApiModelProperty(value = "瀹℃壒鐘舵�� 0锛氬緟鎻愪氦 1锛氬緟瀹℃牳锛�2锛氬緟绛惧瓧锛�3锛氬凡瀹屾垚")
+    @ApiModelProperty(value = "瀹℃壒鐘舵�� 0锛氬緟鎻愪氦 1锛氬緟瀹℃牳锛�2锛氬凡瀹℃牳")
     @JsonSerialize
     private Integer status;
     @ApiModelProperty(value = "妫�楠岀粨璁�")
@@ -29,5 +29,5 @@
     private String conclusion;
     @ApiModelProperty(value = "缂栧埗浜�")
     @JsonSerialize
-    private Integer userId;
+    private String name;
 }
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/NonConformanceReviewService.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/NonConformanceReviewService.java
new file mode 100644
index 0000000..20fd16b
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/NonConformanceReviewService.java
@@ -0,0 +1,20 @@
+package com.yuanchu.limslaboratory.service;
+
+import com.yuanchu.limslaboratory.pojo.Dto.NonConformingFeedbackDto;
+import com.yuanchu.limslaboratory.pojo.vo.NonConformanceReviewVo;
+import com.yuanchu.limslaboratory.pojo.vo.NonConformingFeedbackVo;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/9
+ */
+public interface NonConformanceReviewService {
+
+    /**
+     * 寰楀埌涓嶅悎鏍煎搧鎻愪氦淇℃伅
+     * @param nonConformingFeedbackDto
+     * @return
+     */
+    NonConformanceReviewVo getNonConformanceReviewVo(NonConformingFeedbackDto nonConformingFeedbackDto);
+
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/NonConformingFeedbackService.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/NonConformingFeedbackService.java
new file mode 100644
index 0000000..761b0f5
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/NonConformingFeedbackService.java
@@ -0,0 +1,19 @@
+package com.yuanchu.limslaboratory.service;
+
+import com.yuanchu.limslaboratory.pojo.Dto.NonConformingFeedbackDto;
+import com.yuanchu.limslaboratory.pojo.vo.NonConformingFeedbackVo;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/9
+ */
+public interface NonConformingFeedbackService {
+
+    /**
+     * 寰楀埌涓嶅悎鏍煎搧鍙嶉淇℃伅
+     * @param nonConformingFeedbackDto
+     * @return
+     */
+    NonConformingFeedbackVo getNonConformingFeedback(NonConformingFeedbackDto nonConformingFeedbackDto);
+
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/PlanService.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/PlanService.java
new file mode 100644
index 0000000..474e8ff
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/PlanService.java
@@ -0,0 +1,23 @@
+package com.yuanchu.limslaboratory.service;
+
+import com.yuanchu.limslaboratory.pojo.vo.PlanVo;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-08-09
+ */
+public interface PlanService {
+    /**
+     * 鏌ヨ妫�楠岃鍒�
+     * @return
+     */
+    List<PlanVo> selectAllPlan(String device, Date beginTime, Date endTime, String user);
+
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/ReportCheckService.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/ReportAuditingService.java
similarity index 66%
rename from inspection-server/src/main/java/com/yuanchu/limslaboratory/service/ReportCheckService.java
rename to inspection-server/src/main/java/com/yuanchu/limslaboratory/service/ReportAuditingService.java
index fb1af30..362ee97 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/ReportCheckService.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/ReportAuditingService.java
@@ -4,7 +4,7 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yuanchu.limslaboratory.pojo.Report;
-import com.yuanchu.limslaboratory.pojo.vo.ReportCheckVo;
+import com.yuanchu.limslaboratory.pojo.vo.ReportAuditingVo;
 
 /**
  * <p>
@@ -14,12 +14,12 @@
  * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
  * @since 2023-08-07
  */
-public interface ReportCheckService extends IService<Report> {
+public interface ReportAuditingService extends IService<Report> {
 
     /**
      * 椤圭洰瀹℃牳琛ㄦ煡璇�
      * @return
      */
-    IPage<ReportCheckVo> selectAllReportCheck(Page<Object> page, Integer status, String name);
+    IPage<ReportAuditingVo> selectAllReportAuditing(Page<Object> page, Integer status, String name);
 }
 
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionServiceImpl.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionServiceImpl.java
index 444d70c..c285546 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionServiceImpl.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionServiceImpl.java
@@ -13,6 +13,7 @@
 import com.yuanchu.limslaboratory.pojo.vo.InspectDetailVo;
 import com.yuanchu.limslaboratory.pojo.vo.InspectionVo;
 import com.yuanchu.limslaboratory.service.*;
+import com.yuanchu.limslaboratory.utils.MyUtil;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
@@ -58,6 +59,9 @@
 
     @Resource
     UserMapper userMapper;
+
+    @Resource
+    ReportMapper reportMapper;
 
     /**
      * 鏌ヨ妫�楠岀敵璇峰崟鍒楄〃
@@ -192,6 +196,22 @@
                 .build();
         inspectionMapper.updateById(inspection);
         //鐢熸垚鎶ュ憡鍗�
+        Report report = new Report();
+        //鐢熸垚鎶ュ憡鍗曞彿
+        String code = MyUtil.getTimeSixNumberCode("BG","BG");
+        //鑾峰彇妫�楠岀粨璁�
+        String conclusion = "";
+        Inspection inspection1 = inspectionMapper.selectById(id);
+        if (inspection1.getInspectionStatus().equals(1)) {
+            conclusion = "鍚堟牸";
+        }else {
+            conclusion = "涓嶅悎鏍�";
+        }
+        report.setCode(code);
+        report.setStatus(0);
+        report.setConclusion(conclusion);
+        report.setInspectionId(id);
+        reportMapper.insert(report);
 
         return true;
     }
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/LinkBasicInformationServiceImpl.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/LinkBasicInformationServiceImpl.java
index 59be02e..5090428 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/LinkBasicInformationServiceImpl.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/LinkBasicInformationServiceImpl.java
@@ -35,7 +35,7 @@
 
     @Override
     public String addLinkBasicInformation(LinkBasicInformation linkBasicInformation) {
-        String code = MyUtil.getTimeSixNumberCode("SL");
+        String code = MyUtil.getTimeSixNumberCode("SL","SL");
         linkBasicInformation.setEntrustCoding(code);
         int insert = linkBasicInformationMapper.insert(linkBasicInformation);
         if (insert == 1) {
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/NonConformanceReviewServiceImpl.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/NonConformanceReviewServiceImpl.java
new file mode 100644
index 0000000..8fc347c
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/NonConformanceReviewServiceImpl.java
@@ -0,0 +1,42 @@
+package com.yuanchu.limslaboratory.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.limslaboratory.mapper.NonConformanceReviewMapper;
+import com.yuanchu.limslaboratory.pojo.Dto.NonConformingFeedbackDto;
+import com.yuanchu.limslaboratory.pojo.NonConformanceReview;
+import com.yuanchu.limslaboratory.pojo.vo.NonConformanceReviewVo;
+import com.yuanchu.limslaboratory.service.NonConformanceReviewService;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import javax.annotation.Resource;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/9
+ */
+@Service
+public class NonConformanceReviewServiceImpl implements NonConformanceReviewService {
+
+    @Resource
+    private NonConformanceReviewMapper mapper;
+
+    @Override
+    public NonConformanceReviewVo getNonConformanceReviewVo(NonConformingFeedbackDto nonConformingFeedbackDto) {
+        QueryWrapper<NonConformanceReview>queryWrapper= new QueryWrapper<>();
+        if (StringUtils.hasText(nonConformingFeedbackDto.getMaterialCode())){
+            queryWrapper.lambda().and(a->a.eq(NonConformanceReview::getMaterialCode,nonConformingFeedbackDto.getMaterialCode()));
+        }
+        if (StringUtils.hasText(nonConformingFeedbackDto.getMaterialName())){
+            queryWrapper.lambda().and(a->a.eq(NonConformanceReview::getMaterialName,nonConformingFeedbackDto.getMaterialName()));
+        }
+        if (StringUtils.hasText(nonConformingFeedbackDto.getInspectionCode())){
+            queryWrapper.lambda().and(a->a.eq(NonConformanceReview::getInspectionCode,nonConformingFeedbackDto.getInspectionCode()));
+        }
+        Page<NonConformanceReview> page = new Page<>(nonConformingFeedbackDto.getCurrentPage(), nonConformingFeedbackDto.getPageNum(), true);
+        IPage<NonConformanceReview> iPage = mapper.selectPage(page, queryWrapper);
+        return new NonConformanceReviewVo(iPage.getRecords(),iPage.getTotal());
+    }
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/NonConformingFeedbackServiceImpl.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/NonConformingFeedbackServiceImpl.java
new file mode 100644
index 0000000..7d6fc23
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/NonConformingFeedbackServiceImpl.java
@@ -0,0 +1,34 @@
+package com.yuanchu.limslaboratory.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.limslaboratory.mapper.NonConformingFeedbackMapper;
+import com.yuanchu.limslaboratory.pojo.Dto.NonConformingFeedbackDto;
+import com.yuanchu.limslaboratory.pojo.NonConformingFeedback;
+import com.yuanchu.limslaboratory.pojo.vo.NonConformingFeedbackVo;
+import com.yuanchu.limslaboratory.service.NonConformingFeedbackService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/9
+ */
+@Service
+public class NonConformingFeedbackServiceImpl implements NonConformingFeedbackService {
+
+    @Resource
+    private NonConformingFeedbackMapper mapper;
+
+    @Override
+    public NonConformingFeedbackVo getNonConformingFeedback(NonConformingFeedbackDto nonConformingFeedbackDto) {
+        Page<Object> page = new Page<>(nonConformingFeedbackDto.getCurrentPage(), nonConformingFeedbackDto.getPageNum(), true);
+        IPage<NonConformingFeedback> iPage = mapper.selectNonConformingFeedback(nonConformingFeedbackDto, page);
+        return new NonConformingFeedbackVo(iPage.getRecords(),iPage.getTotal());
+    }
+
+
+
+
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/PlanServiceImpl.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/PlanServiceImpl.java
new file mode 100644
index 0000000..5819ccd
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/PlanServiceImpl.java
@@ -0,0 +1,61 @@
+package com.yuanchu.limslaboratory.service.impl;
+
+import com.yuanchu.limslaboratory.mapper.PlanMapper;
+import com.yuanchu.limslaboratory.pojo.vo.PlanVo;
+import com.yuanchu.limslaboratory.service.PlanService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-08-09
+ */
+@Service
+public class PlanServiceImpl implements PlanService {
+
+    @Resource
+    private PlanMapper planMapper;
+
+    /**
+     * 鏌ヨ妫�楠岃鍒�
+     *
+     * @return
+     */
+    @Override
+    public List<PlanVo> selectAllPlan(String device, Date beginTime, Date endTime, String user) {
+        //鑾峰彇鏁版嵁搴撴暟鎹�
+        List<PlanVo> planVos = planMapper.selectAllPlan(device, beginTime, endTime, user);
+        //娣诲姞璁″垝宸ユ湡鍜屾楠岃繘搴�
+        planVos.forEach(planVo -> {
+            //娣诲姞妫�楠岃繘搴�
+            //鍒ゆ柇鏄惁鏄凡瀹屾垚
+            if (planVo.getState() != null) {
+                planVo.setProgress(100);
+            }
+            //鍒ゆ柇鏄惁鏄湭鍒嗛厤
+            if (planVo.getCheckproject() == null) {
+                planVo.setProgress(0);
+            }
+            //鍒ゆ柇鏄惁鏄繘琛屼腑
+            if (planVo.getState() == null && planVo.getCheckproject() != null) {
+                planVo.setProgress(50);
+            }
+            //娣诲姞璁″垝宸ユ湡
+            if (planVo.getFinishtime() != null && planVo.getStarttime() != null) {
+                long startTimeInMillis = planVo.getStarttime().getTime();
+                long endTimeInMillis = planVo.getFinishtime().getTime();
+                long durationInMillis = endTimeInMillis - startTimeInMillis;
+                long duration = durationInMillis / (1000 * 60 * 60);
+                planVo.setDuration(Integer.valueOf((int) duration));
+            }
+        });
+        return planVos;
+    }
+}
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ReportAuditingServiceImpl.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ReportAuditingServiceImpl.java
new file mode 100644
index 0000000..df8e8e4
--- /dev/null
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ReportAuditingServiceImpl.java
@@ -0,0 +1,37 @@
+package com.yuanchu.limslaboratory.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.yuanchu.limslaboratory.mapper.ReportMapper;
+import com.yuanchu.limslaboratory.pojo.Report;
+import com.yuanchu.limslaboratory.pojo.vo.ReportAuditingVo;
+import com.yuanchu.limslaboratory.service.ReportAuditingService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-08-07
+ */
+@Service
+public class ReportAuditingServiceImpl extends ServiceImpl<ReportMapper, Report> implements ReportAuditingService {
+
+    @Resource
+    private ReportMapper reportMapper;
+
+    /**
+     * 椤圭洰瀹℃牳琛ㄦ煡璇�
+     * @return
+     */
+    @Override
+    public IPage<ReportAuditingVo> selectAllReportAuditing(Page<Object> page, Integer status, String name) {
+        return reportMapper.selectAllReportAuditing(page, status, name);
+    }
+}
+
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ReportCheckServiceImpl.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ReportCheckServiceImpl.java
deleted file mode 100644
index 4162cd6..0000000
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ReportCheckServiceImpl.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.yuanchu.limslaboratory.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.yuanchu.limslaboratory.mapper.ReportMapper;
-import com.yuanchu.limslaboratory.pojo.Report;
-import com.yuanchu.limslaboratory.pojo.vo.ReportCheckVo;
-import com.yuanchu.limslaboratory.service.ReportCheckService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-/**
- * <p>
- * 鏈嶅姟瀹炵幇绫�
- * </p>
- *
- * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
- * @since 2023-08-07
- */
-@Service
-public class ReportCheckServiceImpl extends ServiceImpl<ReportMapper, Report> implements ReportCheckService {
-
-    @Autowired
-    private ReportMapper inspectionReportMapper;
-
-
-    /**
-     * 椤圭洰瀹℃牳琛ㄦ煡璇�
-     * @return
-     */
-    @Override
-    public IPage<ReportCheckVo> selectAllReportCheck(Page<Object> page, Integer status, String name) {
-        return inspectionReportMapper.selectAllReportCheck(page, status, name);
-    }
-}
-
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ReportServiceImpl.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ReportServiceImpl.java
index 2673b2c..702f2ae 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ReportServiceImpl.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ReportServiceImpl.java
@@ -10,6 +10,8 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
+
 /**
  * <p>
  * 鏈嶅姟瀹炵幇绫�
@@ -21,7 +23,7 @@
 @Service
 public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> implements ReportService {
 
-    @Autowired
+    @Resource
     private ReportMapper reportMapper;
 
     /**
diff --git a/inspection-server/src/main/resources/mapper/NonConformingFeedbackMapper.xml b/inspection-server/src/main/resources/mapper/NonConformingFeedbackMapper.xml
new file mode 100644
index 0000000..2fb25ac
--- /dev/null
+++ b/inspection-server/src/main/resources/mapper/NonConformingFeedbackMapper.xml
@@ -0,0 +1,35 @@
+<?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.yuanchu.limslaboratory.mapper.NonConformingFeedbackMapper">
+
+    <select id="selectNonConformingFeedback" resultType="nonConformingFeedback" parameterType="com.yuanchu.limslaboratory.pojo.Dto.NonConformingFeedbackDto">
+        SELECT
+            im.`code` materialCode,
+            im.`name` materialName,
+            i.`code` inspectionCode,
+            i.create_time createTime,
+            u.`name` testManager,
+            im.specifications specifications
+        FROM
+            inspection i,
+            inspection_material im,
+            `user` u
+        WHERE
+            1 = 1
+          AND i.id = im.inspection_id
+          AND i.user_id = u.id
+        <if test="nonConformingFeedbackDto.materialCode!=null and nonConformingFeedbackDto.materialCode!=''">
+            and  im.`code` like concat("%",#{nonConformingFeedbackDto.materialCode},"%")
+        </if>
+        <if test="nonConformingFeedbackDto.materialName!=null and nonConformingFeedbackDto.materialName!=''">
+            and im.`name` like concat("%",#{nonConformingFeedbackDto.materialName},"%")
+        </if>
+        <if test="nonConformingFeedbackDto.inspectionCode!=null and nonConformingFeedbackDto.inspectionCode!=''">
+            and im.specifications like concat("%",#{nonConformingFeedbackDto.inspectionCode},"%")
+        </if>
+          and i.state=1
+          and im.state=1
+        and i.inspection_status =0
+    </select>
+
+</mapper>
\ No newline at end of file
diff --git a/inspection-server/src/main/resources/mapper/PlanMapper.xml b/inspection-server/src/main/resources/mapper/PlanMapper.xml
new file mode 100644
index 0000000..ed990c0
--- /dev/null
+++ b/inspection-server/src/main/resources/mapper/PlanMapper.xml
@@ -0,0 +1,40 @@
+<?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.yuanchu.limslaboratory.mapper.PlanMapper">
+
+    <!--鏌ヨ妫�楠岃鍒�-->
+    <select id="selectAllPlan" resultType="com.yuanchu.limslaboratory.pojo.vo.PlanVo">
+        select i.equipment_name device,
+        im.name samplename,
+        im.code sampleid,
+        im.specifications modelandspecification,
+        im.unit unit,
+        im.num amount,
+        ip.name checkproject,
+        u.name checker,
+        ip.start_time starttime,
+        ip.end_time finishtime,
+        ip.test_state state
+        from instrument i
+        left join (select ip.*
+        from inspection_product ip
+        right join (select instrument_id, max(ip.end_time) t
+        from inspection_product ip
+        group by instrument_id) it
+        on ip.instrument_id = it.instrument_id and ip.end_time = it.t) ip
+        on i.id = ip.instrument_id
+        left join inspection_material im on im.id = ip.inspection_material_id
+        left join user u on u.id = ip.user_id
+        <where>
+            <if test="device != null and device != null">
+                and i.equipment_name = #{device}
+            </if>
+            <if test="user != null and user != null">
+                and u.name = #{user}
+            </if>
+            <if test="beginTime != null and endTime != null">
+                and ip.start_time between #{beginTime} and #{endTime}
+            </if>
+        </where>
+    </select>
+</mapper>
diff --git a/inspection-server/src/main/resources/mapper/ReportMapper.xml b/inspection-server/src/main/resources/mapper/ReportMapper.xml
new file mode 100644
index 0000000..7983e64
--- /dev/null
+++ b/inspection-server/src/main/resources/mapper/ReportMapper.xml
@@ -0,0 +1,57 @@
+<?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.yuanchu.limslaboratory.mapper.ReportMapper">
+
+    <!--鏌ヨ妫�楠屾姤鍛�-->
+    <select id="selectAllReport" resultType="com.yuanchu.limslaboratory.pojo.vo.ReportVo">select im.code materialCode,
+        r.code reportCode,
+        i.code inspectionCode,
+        r.approver approver,
+        r.status status,
+        r.conclusion conclusion,
+        u.name name
+        from report r
+        join inspection i on r.inspection_id = i.id
+        join user u on i.user_id = u.id
+        join inspection_material im on i.id = im.inspection_id
+        <where>
+            r.state = 1
+            <if test="status != null">
+                and r.status = #{status}
+            </if>
+            <if test="name != null and name != ''">
+                and im.code like concat('%', #{name}, '%')
+                or i.code like concat('%', #{name}, '%')
+                or r.code like concat('%', #{name}, '%')
+            </if>
+        </where>
+    </select>
+
+    <!--鏌ヨ鎶ュ憡瀹℃牳-->
+    <select id="selectAllReportAuditing" resultType="com.yuanchu.limslaboratory.pojo.vo.ReportAuditingVo">
+        select im.code materialCode,
+        r.code reportCode,
+        im.name materialName,
+        r.status status,
+        r.approver approver,
+        DATE_FORMAT(r.`create_time`, '%Y-%m-%d') submitTime,
+        DATE_FORMAT(r.`check_time`, '%Y-%m-%d') checkTime
+        from report r
+        join inspection i on r.inspection_id = i.id
+        join inspection_material im on i.id = im.inspection_id
+        <where>
+            r.state = 1
+            <if test="status == null">
+                and r.status in (0, 1)
+            </if>
+            <if test="status != null">
+                and r.status = #{status}
+            </if>
+            <if test="name != null and name != ''">
+                and im.code like concat('%', #{name}, '%')
+                or i.code like concat('%', #{name}, '%')
+                or im.name like concat('%', #{name}, '%')
+            </if>
+        </where>
+    </select>
+</mapper>
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/ClassifyController.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/ClassifyController.java
index 614814b..b5ae047 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/ClassifyController.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/ClassifyController.java
@@ -36,11 +36,11 @@
     public Result<?> addClassifyInformation(@RequestBody Classify classify) {
         Integer isAddClassifySuccess = classifyService.addClassifyInformation(classify);
         if (isAddClassifySuccess == 1) {
-            return Result.success("娣诲姞鍒嗙被銆�"+ classify.getSonName() +"銆戞垚鍔燂紒");
+            return Result.success("1-$娣诲姞鍒嗙被銆�"+ classify.getSonName() +"銆戞垚鍔燂紒");
         } else if (isAddClassifySuccess == 2) {
-            return Result.fail("鎶辨瓑閲嶅娣诲姞鍒嗙被鍚嶇О銆�"+ classify.getSonName() +"銆戯紝娣诲姞澶辫触锛�");
+            return Result.success("2-$鎶辨瓑閲嶅娣诲姞鍒嗙被鍚嶇О銆�"+ classify.getSonName() +"銆戯紝娣诲姞澶辫触锛�");
         }
-        return Result.fail("娣诲姞鍒嗙被銆�"+ classify.getSonName() +"銆戝け璐ワ紒");
+        return Result.success("0-$娣诲姞鍒嗙被銆�"+ classify.getSonName() +"銆戝け璐ワ紒");
     }
 
     @ApiOperation("鍒嗙被渚ц竟鏍忓垪琛細濡傛灉sonName涓虹┖锛屽垯甯︾潃father_name鐨処d杩涜鐐瑰嚮鎿嶄綔")
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MeteringPlanController.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MeteringPlanController.java
index bc6ea21..44b2456 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MeteringPlanController.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MeteringPlanController.java
@@ -5,6 +5,9 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yuanchu.limslaboratory.pojo.Instrument;
 import com.yuanchu.limslaboratory.pojo.MeteringPlan;
+import com.yuanchu.limslaboratory.pojo.dto.GetPlanMeasureInstrumentDto;
+import com.yuanchu.limslaboratory.pojo.dto.SelectMeasurementLedgerDto;
+import com.yuanchu.limslaboratory.pojo.dto.SelectMeteringPlanDto;
 import com.yuanchu.limslaboratory.service.MeteringPlanService;
 import com.yuanchu.limslaboratory.utils.JackSonUtil;
 import com.yuanchu.limslaboratory.utils.RedisUtil;
@@ -46,25 +49,27 @@
     }
 
     @ApiOperation("璁¢噺璁″垝鍒嗛〉鏌ヨ")
-    @ApiImplicitParams(value = {
-            @ApiImplicitParam(name = "pageNo", value = "璧峰椤�", dataTypeClass = Integer.class, required = true),
-            @ApiImplicitParam(name = "pageSize", value = "姣忎竴椤垫暟閲�", dataTypeClass = Integer.class, required = true),
-            @ApiImplicitParam(name = "measureCodeOrNameOrUnit", value = "姣忎竴椤垫暟閲�", dataTypeClass = Integer.class, required = true)
-    })
     @GetMapping("/plan_page_list")
-    public Result<?> pagingQueryOfMeteringPlan(Integer pageNo, Integer pageSize, String measureCodeOrNameOrUnit) {
-        IPage<Map<String, Object>> page = meteringPlanService.pagingQueryOfMeteringPlan(measureCodeOrNameOrUnit, new Page<Objects>(pageNo, pageSize));
-        return Result.success(page);
+    public Result<?> pagingQueryOfMeteringPlan(SelectMeteringPlanDto dto) {
+        return Result.success(meteringPlanService.pagingQueryOfMeteringPlan(dto));
     }
 
     @ApiOperation("璁¢噺鍙拌处鍒嗛〉鏌ヨ")
-    @ApiImplicitParams(value = {
-            @ApiImplicitParam(name = "pageNo", value = "璧峰椤�", dataTypeClass = Integer.class, required = true),
-            @ApiImplicitParam(name = "pageSize", value = "姣忎竴椤垫暟閲�", dataTypeClass = Integer.class, required = true)
-    })
     @GetMapping("/standing_page_list")
-    public Result<?> pagingQueryOfMeasurementLedger(Integer pageNo, Integer pageSize) {
-        IPage<Map<String, Object>> page = meteringPlanService.pagingQueryOfMeasurementLedger(new Page<Objects>(pageNo, pageSize));
+    public Result<?> pagingQueryOfMeasurementLedger(SelectMeasurementLedgerDto selectMeasurementLedgerDto) {
+        IPage<Map<String, Object>> page = meteringPlanService.pagingQueryOfMeasurementLedger(selectMeasurementLedgerDto);
         return Result.success(page);
     }
+
+    @ApiOperation("鍗曡璁″垝淇℃伅")
+    @GetMapping("/getPlanMeasureInstrument")
+    public Result<?> getPlanMeasureInstrument(GetPlanMeasureInstrumentDto dto){
+        return Result.success(meteringPlanService.getPlanMeasureInstrument(dto));
+    }
+
+    @ApiOperation("璁″垝淇℃伅涔嬩笅鍒嗛〉")
+    @GetMapping("/limitGetPlanMeasureInstrument")
+    public Result<?> limitGetPlanMeasureInstrument(GetPlanMeasureInstrumentDto dto){
+        return Result.success(meteringPlanService.limitGetPlanMeasureInstrument(dto));
+    }
 }
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/ClassifyMapper.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/ClassifyMapper.java
index 4d2856c..c67677e 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/ClassifyMapper.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/ClassifyMapper.java
@@ -3,6 +3,8 @@
 import com.yuanchu.limslaboratory.pojo.Classify;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
+import java.util.List;
+
 /**
  * <p>
  *  Mapper 鎺ュ彛
@@ -13,4 +15,6 @@
  */
 public interface ClassifyMapper extends BaseMapper<Classify> {
 
+    List<Classify> selectOneByName(Classify classify);
+
 }
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/MeteringPlanMapper.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/MeteringPlanMapper.java
index 3153a71..edce831 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/MeteringPlanMapper.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/MeteringPlanMapper.java
@@ -2,9 +2,14 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.yuanchu.limslaboratory.pojo.MeteringPlan;
+import com.yuanchu.limslaboratory.pojo.*;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yuanchu.limslaboratory.pojo.dto.GetPlanMeasureInstrumentDto;
+import com.yuanchu.limslaboratory.pojo.dto.SelectMeasurementLedgerDto;
+import com.yuanchu.limslaboratory.pojo.dto.SelectMeteringPlanDto;
+import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
@@ -18,5 +23,22 @@
  */
 public interface MeteringPlanMapper extends BaseMapper<MeteringPlan> {
 
-    IPage<Map<String, Object>> pagingQueryOfMeasurementLedger(Page<Objects> page);
+    IPage<Map<String, Object>> pagingQueryOfMeasurementLedger(Page<Objects> page,@Param("dto") SelectMeasurementLedgerDto dto);
+
+    /**
+     * 鍒嗛〉鏌ヨ璁″垝
+     * @param dto
+     * @param limitPage
+     * @return
+     */
+    List<MeteringPlanAndInfo>limitConditionMeteringPlan(@Param("dto")SelectMeteringPlanDto dto, @Param("limitPage") LimitPage limitPage);
+
+
+    Map<String, Object>getTotal(@Param("dto")SelectMeteringPlanDto dto);
+
+    MeteringPlanAndInfoAndIns getPlanMeasureInstrument(@Param("limitPage") LimitPage limitPage,Long id);
+
+    List<MetricalInfoAndIns> limitGetPlanMeasureInstrument(@Param("limitPage")LimitPage limitPage, Long id);
+
+    Map<String, Object> countPlanMeasurIns(Long id);
 }
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/LimitPage.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/LimitPage.java
new file mode 100644
index 0000000..cd97be2
--- /dev/null
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/LimitPage.java
@@ -0,0 +1,20 @@
+package com.yuanchu.limslaboratory.pojo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/17
+ */
+@Data
+public class LimitPage implements Serializable {
+
+    private Long start, end;
+
+    public LimitPage(Long start, Long end) {
+        this.start = start;
+        this.end = end;
+    }
+}
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MeteringPlanAndInfo.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MeteringPlanAndInfo.java
new file mode 100644
index 0000000..efc5615
--- /dev/null
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MeteringPlanAndInfo.java
@@ -0,0 +1,52 @@
+package com.yuanchu.limslaboratory.pojo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/17
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="MeteringPlanAndInfo", description="")
+public class MeteringPlanAndInfo implements Serializable {
+
+    private Long id;
+
+    private String createPerson;
+
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd", iso = DateTimeFormat.ISO.DATE_TIME)
+    @ApiModelProperty(value = "寮�濮嬫棩鏈�", example = "2023-07-06", required = true, dataType = "date")
+    private Date beginTime;
+
+    private String plannedOrderNumber;
+
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd", iso = DateTimeFormat.ISO.DATE_TIME)
+    @ApiModelProperty(value = "缁撴潫鏃ユ湡", example = "2023-07-06", required = true, dataType = "date")
+    private Date endTime;
+
+    private String unit;
+
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd", iso = DateTimeFormat.ISO.DATE_TIME)
+    private Date createTime;
+
+    private String measurePerson;
+
+    private Integer status;
+
+    private List<MetricalInformation>resultList;
+
+
+}
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MeteringPlanAndInfoAndIns.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MeteringPlanAndInfoAndIns.java
new file mode 100644
index 0000000..bbea7b5
--- /dev/null
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MeteringPlanAndInfoAndIns.java
@@ -0,0 +1,22 @@
+package com.yuanchu.limslaboratory.pojo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/18
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="MeteringPlanAndInfoAndIns瀵硅薄", description="")
+public class MeteringPlanAndInfoAndIns extends MeteringPlanAndInfo implements Serializable {
+
+    List<MetricalInfoAndIns>metricalInfoAndInsList;
+
+
+}
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInfoAndIns.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInfoAndIns.java
new file mode 100644
index 0000000..2e08a84
--- /dev/null
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInfoAndIns.java
@@ -0,0 +1,48 @@
+package com.yuanchu.limslaboratory.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/18
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="MeteringPlanAndInfoAndIns瀵硅薄", description="")
+public class MetricalInfoAndIns extends Instrument implements Serializable {
+
+    @ApiModelProperty(value = "璁¢噺缂栧彿", example = "1", required = true)
+    private String code;
+
+    @ApiModelProperty(value = "璁¢噺鍗曚綅", example = "GB", required = true)
+    private String measurementUnit;
+
+    @ApiModelProperty(value = "缁撴潫鏃ユ湡", example = "2026-07-06", required = true, dataType = "date")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd", iso = DateTimeFormat.ISO.DATE_TIME)
+    private Date endDate;
+
+    @ApiModelProperty(value = "缁撴灉: 1锛氬悎鏍硷紱2锛氱煫姝e悗鍙敤锛�3锛氫笉鍚堟牸", example = "1", required = true)
+    private Integer result;
+
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd", iso = DateTimeFormat.ISO.DATE_TIME)
+    private Date imCreateTime;
+
+    private String measurementName;
+
+    private String imCreateName;
+
+}
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInformation.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInformation.java
index 5ee2a7c..07225d3 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInformation.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInformation.java
@@ -32,6 +32,9 @@
     @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
 
+    @ApiModelProperty(value = "璁¢噺缂栧彿", example = "1", required = true)
+    private String code;
+
     @ApiModelProperty(value = "鐢ㄦ埛鍏宠仈Id", example = "7", required = true)
     private Integer userId;
 
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/GetPlanMeasureInstrumentDto.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/GetPlanMeasureInstrumentDto.java
new file mode 100644
index 0000000..8be35d1
--- /dev/null
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/GetPlanMeasureInstrumentDto.java
@@ -0,0 +1,25 @@
+package com.yuanchu.limslaboratory.pojo.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/18
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "GetPlanMeasureInstrumentDto瀵硅薄", description = "")
+public class GetPlanMeasureInstrumentDto implements Serializable {
+
+    @ApiModelProperty(value = "褰撳墠椤�", example = "1", required = true)
+    private Long currentPage;
+    @ApiModelProperty(value = "姣忛〉澶氬皯鏉�", example = "10", required = true)
+    private Long pageSize;
+    @ApiModelProperty(value = "璁″垝id", example = "10", required = true)
+    private Long id;
+}
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/SelectMeasurementLedgerDto.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/SelectMeasurementLedgerDto.java
new file mode 100644
index 0000000..df08dc8
--- /dev/null
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/SelectMeasurementLedgerDto.java
@@ -0,0 +1,28 @@
+package com.yuanchu.limslaboratory.pojo.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/16
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "selectMeasurementLedgerDto瀵硅薄", description = "")
+public class SelectMeasurementLedgerDto implements Serializable {
+    @ApiModelProperty(value = "褰撳墠椤�", example = "1", required = true)
+    private Long currentPage;
+    @ApiModelProperty(value = "姣忛〉澶氬皯鏉�", example = "10", required = true)
+    private Long pageSize;
+    @ApiModelProperty(value = "浠櫒缂栫爜",  required = false)
+    private String code;
+    @ApiModelProperty(value = "浠櫒鍚嶇О",  required = false)
+    private String name;
+    @ApiModelProperty(value = "璁¢噺鍗曚綅",  required = false)
+    private String unit;
+}
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/SelectMeteringPlanDto.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/SelectMeteringPlanDto.java
new file mode 100644
index 0000000..b66eb6c
--- /dev/null
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/SelectMeteringPlanDto.java
@@ -0,0 +1,25 @@
+package com.yuanchu.limslaboratory.pojo.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/16
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "SelectMeteringPlanDto", description = "")
+public class SelectMeteringPlanDto implements Serializable {
+
+    @ApiModelProperty(value = "褰撳墠椤�", example = "1", required = true)
+    private Long currentPage;
+    @ApiModelProperty(value = "姣忛〉澶氬皯鏉�", example = "10", required = true)
+    private Long pageSize;
+    @ApiModelProperty(value = "璁″垝鍗曞彿",  required = false)
+    private String plannedOrderNumber;
+}
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MeteringPlanService.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MeteringPlanService.java
index 5302b0c..b69a3d3 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MeteringPlanService.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MeteringPlanService.java
@@ -4,7 +4,13 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yuanchu.limslaboratory.pojo.MeteringPlan;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yuanchu.limslaboratory.pojo.MeteringPlanAndInfoAndIns;
+import com.yuanchu.limslaboratory.pojo.MetricalInfoAndIns;
+import com.yuanchu.limslaboratory.pojo.dto.GetPlanMeasureInstrumentDto;
+import com.yuanchu.limslaboratory.pojo.dto.SelectMeasurementLedgerDto;
+import com.yuanchu.limslaboratory.pojo.dto.SelectMeteringPlanDto;
 
+import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
@@ -20,7 +26,11 @@
 
     Integer addMeteringPlanInformation(MeteringPlan meteringPlan);
 
-    IPage<Map<String, Object>> pagingQueryOfMeteringPlan(String measureCodeOrNameOrUnit, Page<Objects> page);
+    Map<String, Object> pagingQueryOfMeteringPlan(SelectMeteringPlanDto dto);
 
-    IPage<Map<String, Object>> pagingQueryOfMeasurementLedger(Page<Objects> page);
+    IPage<Map<String, Object>> pagingQueryOfMeasurementLedger(SelectMeasurementLedgerDto selectMeasurementLedgerDto);
+
+    Map<String, Object> getPlanMeasureInstrument(GetPlanMeasureInstrumentDto dto);
+
+    Map<String, Object> limitGetPlanMeasureInstrument(GetPlanMeasureInstrumentDto dto);
 }
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ClassifyServiceImpl.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ClassifyServiceImpl.java
index 66d8c86..cd79696 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ClassifyServiceImpl.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ClassifyServiceImpl.java
@@ -1,5 +1,6 @@
 package com.yuanchu.limslaboratory.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.yuanchu.limslaboratory.pojo.Classify;
@@ -29,15 +30,12 @@
 
     @Override
     public Integer addClassifyInformation(Classify classify) {
-        LambdaQueryWrapper<Classify> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(Classify::getFatherName, classify.getFatherName());
-        wrapper.eq(Classify::getSonName, classify.getSonName());
-        wrapper.eq(Classify::getState, 1);
-        Classify classify1 = classifyMapper.selectOne(wrapper);
-        if (ObjectUtils.isEmpty(classify1)){
-            return classifyMapper.insert(classify);
-        } else {
+        List<Classify> classify1 = classifyMapper.selectOneByName(classify);
+        if (classify1.size()>0){
             return 2;
+        } else {
+            classify.setCreateTime(DateUtil.date());
+            return classifyMapper.insert(classify);
         }
     }
 
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MeteringPlanServiceImpl.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MeteringPlanServiceImpl.java
index 1a5f4a8..eb42a3b 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MeteringPlanServiceImpl.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MeteringPlanServiceImpl.java
@@ -3,9 +3,11 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.yuanchu.limslaboratory.pojo.Instrument;
-import com.yuanchu.limslaboratory.pojo.MeteringPlan;
+import com.yuanchu.limslaboratory.pojo.*;
 import com.yuanchu.limslaboratory.mapper.MeteringPlanMapper;
+import com.yuanchu.limslaboratory.pojo.dto.GetPlanMeasureInstrumentDto;
+import com.yuanchu.limslaboratory.pojo.dto.SelectMeasurementLedgerDto;
+import com.yuanchu.limslaboratory.pojo.dto.SelectMeteringPlanDto;
 import com.yuanchu.limslaboratory.service.MeteringPlanService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yuanchu.limslaboratory.utils.MyUtil;
@@ -14,9 +16,7 @@
 
 import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 
 /**
  * <p>
@@ -34,18 +34,53 @@
 
     @Override
     public Integer addMeteringPlanInformation(MeteringPlan meteringPlan) {
-        String timeSixNumber = MyUtil.getTimeSixNumberCode("P");
+        String timeSixNumber = MyUtil.getTimeSixNumberCode("P","P");
         meteringPlan.setPlannedOrderNumber(timeSixNumber);
         return meteringPlanMapper.insert(meteringPlan);
     }
 
     @Override
-    public IPage<Map<String, Object>> pagingQueryOfMeteringPlan(String measureCodeOrNameOrUnit, Page<Objects> page) {
-        return null;
+    public Map<String, Object> pagingQueryOfMeteringPlan(SelectMeteringPlanDto dto) {
+        List<MeteringPlanAndInfo> page= meteringPlanMapper
+                .limitConditionMeteringPlan(dto,new LimitPage((dto.getCurrentPage()-1)*dto.getPageSize(), dto.getPageSize()));
+        page.forEach(l->{
+            l.getResultList().forEach(r->{
+                if (r.getResult() < 1) {
+                    l.setStatus(0);
+                }else {
+                    l.setStatus(1);
+                }
+            });
+            l.setResultList(null);
+        });
+        Map<String, Object>all=new HashMap<>(2);
+        all.put("total",meteringPlanMapper.getTotal(dto).get("num"));
+        all.put("list",page);
+        return all;
     }
 
     @Override
-    public IPage<Map<String, Object>> pagingQueryOfMeasurementLedger(Page<Objects> page) {
-        return meteringPlanMapper.pagingQueryOfMeasurementLedger(page);
+    public IPage<Map<String, Object>> pagingQueryOfMeasurementLedger(SelectMeasurementLedgerDto dto) {
+        return meteringPlanMapper.pagingQueryOfMeasurementLedger(new Page<>(dto.getCurrentPage(),dto.getPageSize(),true),dto);
+    }
+
+    @Override
+    public Map<String, Object> getPlanMeasureInstrument(GetPlanMeasureInstrumentDto dto) {
+        MeteringPlanAndInfoAndIns planMeasureInstrument =
+                meteringPlanMapper.getPlanMeasureInstrument
+                        (new LimitPage((dto.getCurrentPage()-1)*dto.getPageSize(),
+                                dto.getPageSize()), dto.getId());
+        Map<String, Object> map = meteringPlanMapper.countPlanMeasurIns(dto.getId());
+        map.put("list",planMeasureInstrument);
+        return map;
+    }
+
+    @Override
+    public Map<String, Object> limitGetPlanMeasureInstrument(GetPlanMeasureInstrumentDto dto) {
+        Map<String, Object> map = meteringPlanMapper.countPlanMeasurIns(dto.getId());
+        map.put("list",meteringPlanMapper
+                .limitGetPlanMeasureInstrument(new LimitPage((dto.getCurrentPage()-1)*dto.getPageSize()
+                        ,dto.getPageSize()),dto.getId()));
+        return map;
     }
 }
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MetricalInformationServiceImpl.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MetricalInformationServiceImpl.java
index 74ed4a4..c52e053 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MetricalInformationServiceImpl.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MetricalInformationServiceImpl.java
@@ -36,6 +36,7 @@
             String fileName = FileSaveUtil.StoreFile(file);
             metricalInformation.setFilePath(fileName);
         }
+        metricalInformation.setCode(MyUtil.getTimeSixNumberCode("METRICALCODE","METRICALCODE"));
         return metricalInformationMapper.insert(metricalInformation);
     }
 
diff --git a/laboratory-server/src/main/resources/mapper/ClassifyMapper.xml b/laboratory-server/src/main/resources/mapper/ClassifyMapper.xml
index f6e5f1c..c319b0f 100644
--- a/laboratory-server/src/main/resources/mapper/ClassifyMapper.xml
+++ b/laboratory-server/src/main/resources/mapper/ClassifyMapper.xml
@@ -2,4 +2,12 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.yuanchu.limslaboratory.mapper.ClassifyMapper">
 
+    <select id="selectOneByName" resultType="com.yuanchu.limslaboratory.pojo.Classify">
+        SELECT id
+        FROM classify
+        WHERE state = 1
+          <if test="fatherName!=null and fatherName!=''">
+              AND father_name = #{fatherName}
+          </if>
+    </select>
 </mapper>
diff --git a/laboratory-server/src/main/resources/mapper/MeteringPlanMapper.xml b/laboratory-server/src/main/resources/mapper/MeteringPlanMapper.xml
index ca6ab6b..f1af9c6 100644
--- a/laboratory-server/src/main/resources/mapper/MeteringPlanMapper.xml
+++ b/laboratory-server/src/main/resources/mapper/MeteringPlanMapper.xml
@@ -3,9 +3,184 @@
 <mapper namespace="com.yuanchu.limslaboratory.mapper.MeteringPlanMapper">
 
     <select id="pagingQueryOfMeasurementLedger" resultType="map">
-        SELECT i.`equipment_code`, i.`equipment_name`, i.`specifications_models`, m.`create_time`, m.`uncertainty`,
-               m.`end_date`, i.`term_validity`, i.`storage_place`, i.`conditions`
-        FROM instrument i, metrical_information m
-        WHERE i.`id` = m.`instrument_id`
+        SELECT
+        i.`equipment_code` equipmentCode,
+        i.`equipment_name` equipmentName,
+        m.measurement_unit measurementUnit,
+        i.measuring_range measuringRange,
+        i.term_validity termValidity,
+        m.result result,
+        m.end_date endDate,
+        u.NAME name ,
+        m.`create_time` createTime,
+        m.code code
+        FROM
+        metrical_information m
+        LEFT JOIN `user` u ON u.id = m.user_id
+        LEFT JOIN instrument i ON i.`id` = m.`instrument_id`
+        WHERE 1=1
+        and (m.state=1 and i.state=1 and m.result is not null)
+        <if test="dto.code!=null and dto.code!=''">
+            and i.`equipment_code` like concat('%',#{dto.code},'%')
+        </if>
+        <if test="dto.name!=null and dto.name!=''">
+            and i.`equipment_name` like concat('%',#{dto.name},'%')
+        </if>
+        <if test="dto.name!=null and dto.name!=''">
+            and i.measurement_unit like concat('%',#{dto.unit},'%')
+        </if>
     </select>
+
+    <select id="limitConditionMeteringPlan" resultMap="MeteringPlanAndInfoMap">
+        SELECT p.id id,
+        u.`name` createName,
+        p.planned_order_number plannedOrderNumber,
+        p.begin_time beginTime,
+        p.end_time endTime,
+        IF(IFNULL(i.result, 0) > 0, 1, 0) status,
+        (SELECT name FROM `user` u WHERE p.measure_person = u.id) measureName,
+        i.`code` iCode,
+        p.unit unit,
+        p.create_time createTime
+        FROM (SELECT id, unit ,measure_person, create_Person, begin_Time, end_Time, planned_order_number, create_time
+        from metering_plan
+        where 1=1
+        <if test="dto.plannedOrderNumber!=null and dto.plannedOrderNumber!=''">
+            and planned_order_number=#{plannedOrderNumber}
+        </if>
+        LIMIT #{limitPage.start},#{limitPage.end}) p
+        LEFT JOIN metrical_information i ON p.id = i.plan
+        LEFT JOIN `user` u ON p.create_Person = u.id
+        where 1 = 1
+    </select>
+    <select id="getTotal" resultType="java.util.Map">
+        select count(id) num from metering_plan where 1=1
+        <if test="dto.plannedOrderNumber!=null and dto.plannedOrderNumber!=''">
+            and planned_order_number=#{plannedOrderNumber}
+        </if>
+    </select>
+    <select id="getPlanMeasureInstrument"
+            resultMap="measureInsAndPlanMap">
+        SELECT m.planned_order_number                              plannedOrderNumber,
+               (SELECT NAME FROM USER WHERE id = m.measure_person) measureName,
+               m.begin_time                                        beginTime,
+               m.end_time                                          endTime,
+               m.unit                                              unit,
+               u.`name`                                            createName,
+               m.create_time                                       createTime,
+               im.equipment_code                                   equipmentCode,
+               im.equipment_name                                   equipmentName,
+               im.measuring_range                                  measuringRange,
+               im.term_validity                                    termValidity,
+               im.result                                           result,
+               im.end_date                                         endDate,
+               im.imName                                           imName,
+               im.create_time                                      imCreateTime,
+               im.measurement_unit                                 imUnit,
+               im.`code`                                           imCode
+        FROM metering_plan m
+                 LEFT JOIN `user` u ON m.create_Person = u.id
+                 LEFT JOIN (
+            SELECT i.equipment_code,
+                   i.equipment_name,
+                   i.measuring_range,
+                   i.term_validity,
+                   im.result,
+                   im.end_date,
+                   (SELECT NAME FROM USER WHERE id = im.user_id) imName,
+                   im.create_time,
+                   im.measurement_unit,
+                   im.`code`,
+                   im.plan
+            FROM metrical_information im,
+                 metering_plan m,
+                 instrument i
+            WHERE im.instrument_id = i.id
+              and m.id = im.plan
+              and im.plan = #{id}
+              LIMIT #{limitPage.start}
+                , #{limitPage.end}
+        ) im ON m.id = im.plan
+        WHERE 1 = 1
+          AND m.id = #{id}
+    </select>
+    <select id="limitGetPlanMeasureInstrument" resultMap="MetricalInfoAndInsMap">
+        SELECT i.equipment_code                              equipmentCode,
+               i.equipment_name                              equipmentName,
+               i.measuring_range                             measuringRange,
+               i.term_validity                               termValidity,
+               im.result                                     result,
+               im.end_date                                   endDate,
+               (SELECT NAME FROM USER WHERE id = im.user_id) imName,
+               im.create_time                                imCreateTime,
+               im.measurement_unit                           imUnit,
+               im.`code`                                     imCode
+        FROM metrical_information im,
+             metering_plan m,
+             instrument i
+        WHERE im.instrument_id = i.id
+          and m.id = im.plan
+          and im.plan = #{id} LIMIT #{limitPage.start}
+            , #{limitPage.end}
+    </select>
+    <select id="countPlanMeasurIns" resultType="java.util.Map">
+        SELECT count(im.id) total
+        FROM metrical_information im,
+             metering_plan m,
+             instrument i
+        WHERE im.instrument_id = i.id
+          and m.id = im.plan
+          and im.plan = #{id}
+    </select>
+
+    <resultMap id="MetricalInfoAndInsMap" type="MetricalInfoAndIns">
+        <result property="code" column="imCode"/>
+        <result property="measurementUnit" column="imUnit"/>
+        <result property="imCreateTime" column="imCreateTime"/>
+        <result property="measurementName" column="imName"/>
+        <result property="endDate" column="endDate"/>
+        <result property="result" column="result"/>
+        <result property="termValidity" column="termValidity"/>
+        <result property="measuringRange" column="measuringRange"/>
+        <result property="equipmentName" column="equipmentName"/>
+        <result property="equipmentCode" column="equipmentCode"/>
+    </resultMap>
+
+    <resultMap id="measureInsAndPlanMap" type="meteringPlanAndInfoAndIns">
+        <result property="id" column="id"/>
+        <result property="createPerson" column="createName"/>
+        <result property="beginTime" column="beginTime"/>
+        <result property="endTime" column="endTime"/>
+        <result property="plannedOrderNumber" column="plannedOrderNumber"/>
+        <result property="measurePerson" column="measureName"/>
+        <result property="createTime" column="createTime"/>
+        <result property="unit" column="unit"/>
+        <collection property="metricalInfoAndInsList" ofType="metricalInfoAndIns">
+            <result property="code" column="imCode"/>
+            <result property="measurementUnit" column="imUnit"/>
+            <result property="imCreateTime" column="imCreateTime"/>
+            <result property="measurementName" column="imName"/>
+            <result property="endDate" column="endDate"/>
+            <result property="result" column="result"/>
+            <result property="termValidity" column="termValidity"/>
+            <result property="measuringRange" column="measuringRange"/>
+            <result property="equipmentName" column="equipmentName"/>
+            <result property="equipmentCode" column="equipmentCode"/>
+        </collection>
+    </resultMap>
+
+    <resultMap id="MeteringPlanAndInfoMap" type="meteringPlanAndInfo">
+        <result property="id" column="id"/>
+        <result property="createPerson" column="createName"/>
+        <result property="beginTime" column="beginTime"/>
+        <result property="endTime" column="endTime"/>
+        <result property="plannedOrderNumber" column="plannedOrderNumber"/>
+        <result property="measurePerson" column="measureName"/>
+        <result property="createTime" column="createTime"/>
+        <result property="unit" column="unit"/>
+        <collection property="resultList" ofType="MetricalInformation">
+            <result property="code" column="iCode"/>
+            <result property="result" column="status"/>
+        </collection>
+    </resultMap>
 </mapper>
diff --git a/laboratory-server/src/main/resources/mapper/MetricalInformationMapper.xml b/laboratory-server/src/main/resources/mapper/MetricalInformationMapper.xml
index 21de131..858dbf3 100644
--- a/laboratory-server/src/main/resources/mapper/MetricalInformationMapper.xml
+++ b/laboratory-server/src/main/resources/mapper/MetricalInformationMapper.xml
@@ -8,6 +8,7 @@
         FROM metrical_information m, `user` u
         WHERE m.`user_id` = u.`id`
         AND m.`state` = 1
+          and result is not Null
         AND m.`instrument_id` = #{InstrumentId}
     </select>
 </mapper>
diff --git a/pom.xml b/pom.xml
index b6025a8..bc21e3d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,6 +22,7 @@
         <module>standard-server</module>
         <module>inspection-server</module>
         <module>laboratory-server</module>
+        <module>cnas-server</module>
     </modules>
 
     <properties>
@@ -36,7 +37,7 @@
         <openfeign.version>3.1.3</openfeign.version>
         <feign-okhttp.version>11.0</feign-okhttp.version>
         <shiro.version>1.5.3</shiro.version>
-
+        <commons.lang3>3.12.0</commons.lang3>
         <!-- 鎵撳寘鍚庡鍑虹殑璺緞 -->
         <package.path>${project.build.directory}/LIMS</package.path>
     </properties>
diff --git a/standard-server/src/main/resources/mapper/MaterialMapper.xml b/standard-server/src/main/resources/mapper/MaterialMapper.xml
index 661b8fd..8ff48cb 100644
--- a/standard-server/src/main/resources/mapper/MaterialMapper.xml
+++ b/standard-server/src/main/resources/mapper/MaterialMapper.xml
@@ -3,12 +3,12 @@
 <mapper namespace="com.yuanchu.limslaboratory.mapper.MaterialMapper">
 
     <select id="selectMaterialLimit" resultType="Map">
-        select id,code, name
+        select id, code, name
         from lims_laboratory.material
         where state = 1
-        and type = #{type}
+          and type = #{type}
         order by create_time desc
-            limit #{num1},#{num2}
+            limit #{num1}, #{num2}
     </select>
     <select id="selectMaterialById" resultType="Map">
         select m.id,
@@ -28,7 +28,7 @@
              lims_laboratory.serial_number sn
         where m.specifications_id = s.id
           and s.serial_id = sn.id
-          and m.id=#{materialId}
+          and m.id = #{materialId}
     </select>
 
     <resultMap id="OneLevelTreeMap" type="Map">
@@ -56,15 +56,17 @@
 
     <select id="FourTree" resultMap="OneLevelTreeMap">
         SELECT m.`id` materialId, m.`name` materialName, s.`id` standardId, s.`name` standardName,
-               f.`id` specificationsId, f.`name` specificationsName, p.`id` productId, p.`name` productName
+        f.`id` specificationsId, f.`name` specificationsName, p.`id` productId, p.`name` productName
         FROM material m
-                 LEFT JOIN (SELECT s.`id`, s.`name`, s.`material_id` FROM standard s WHERE s.`state` = 1) s ON m.id = s.`material_id`
-                 LEFT JOIN (SELECT f.`id`, f.`name`, f.`standard_id` FROM specifications f WHERE f.`state` = 1
-                                                                                             <if test="specificationsName != null and specificationsName != ''">
-                                                                                                 AND f.`name` = #{specificationsName}
-                                                                                             </if>
-                                                                                           ) f ON s.`id` = f.`standard_id`
-                 LEFT JOIN (SELECT p.`id`, p.`name`, p.`specifications_id` FROM product p WHERE p.`state` = 1) p ON f.`id` = p.`specifications_id`
+        LEFT JOIN (SELECT s.`id`, s.`name`, s.`material_id` FROM standard s WHERE s.`state` = 1) s ON m.id =
+        s.`material_id`
+        LEFT JOIN (SELECT f.`id`, f.`name`, f.`standard_id` FROM specifications f WHERE f.`state` = 1
+        <if test="specificationsName != null and specificationsName != ''">
+            AND f.`name` = #{specificationsName}
+        </if>
+        ) f ON s.`id` = f.`standard_id`
+        LEFT JOIN (SELECT p.`id`, p.`name`, p.`specifications_id` FROM product p WHERE p.`state` = 1) p ON f.`id` =
+        p.`specifications_id`
         WHERE m.`state` = 1
     </select>
 </mapper>
diff --git a/sys/pom.xml b/sys/pom.xml
index effbb79..668acec 100644
--- a/sys/pom.xml
+++ b/sys/pom.xml
@@ -22,6 +22,12 @@
             <artifactId>framework</artifactId>
             <version>${project.parent.version}</version>
         </dependency>
+        <!--cnas妯″潡-->
+        <dependency>
+            <groupId>com.yuanchu.limslaboratory</groupId>
+            <artifactId>cnas-server</artifactId>
+            <version>${project.parent.version}</version>
+        </dependency>
 
         <!--鐢ㄦ埛鏈嶅姟妯″潡-->
         <dependency>
@@ -63,12 +69,14 @@
             <artifactId>mybatis-plus-generator</artifactId>
         </dependency>
 
-        <!-- framework: mybatis-plus浠g爜鐢熸垚闇�瑕佷竴涓ā鏉垮紩鎿� -->
+        <!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity-engine-core -->
         <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-freemarker</artifactId>
+            <groupId>org.apache.velocity</groupId>
+            <artifactId>velocity-engine-core</artifactId>
+            <version>2.3</version>
         </dependency>
 
+
         <!--mysql-->
         <dependency>
             <groupId>mysql</groupId>
diff --git a/sys/src/main/java/com/yuanchu/limslaboratory/CodeGenerator.java b/sys/src/main/java/com/yuanchu/limslaboratory/CodeGenerator.java
index 0807851..b7544d0 100644
--- a/sys/src/main/java/com/yuanchu/limslaboratory/CodeGenerator.java
+++ b/sys/src/main/java/com/yuanchu/limslaboratory/CodeGenerator.java
@@ -12,21 +12,23 @@
 // 婕旂ず渚嬪瓙锛屾墽琛� main 鏂规硶鎺у埗鍙拌緭鍏ユā鍧楄〃鍚嶅洖杞﹁嚜鍔ㄧ敓鎴愬搴旈」鐩洰褰曚腑
 public class CodeGenerator {
 
-    public static String database_url = "jdbc:mysql://localhost:3306/mom_ocean?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai";
-    public static String database_username = "root";
+    public static String database_url = "jdbc:mysql://192.168.110.209:3306/lims_laboratory?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai";
+    public static String database_username = "user";
     public static String database_password= "123456";
     public static String author = "姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃";
-    public static String model_name = "/inspect-server"; // 濡傛灉涓哄垎甯冨紡濉瓙妯″潡鍚嶇О锛屽鏋滀笉鏄垎甯冨紡涓虹┖鍗冲彲
-    public static String setParent = "com.yuanchu.mom"; // 鍖呰矾寰�
+    public static String model_name = "/cnas-server"; // 濡傛灉涓哄垎甯冨紡濉瓙妯″潡鍚嶇О锛屽鏋滀笉鏄垎甯冨紡涓虹┖鍗冲彲
+    public static String setParent = "com.yuanchu.limslaboratory"; // 鍖呰矾寰�
     public static void main(String[] args) {
         String projectPath = System.getProperty("user.dir");
-        System.out.println(projectPath+"===================");
+        String s = projectPath + "/lims-after" + model_name + "/src/main/java";
+        String s1 = projectPath + "/lims-after" + model_name + "/src/main/resources/mapper";
+        System.out.println();
         FastAutoGenerator.create(database_url, database_username, database_password)
                 // 鍏ㄥ眬閰嶇疆
                 .globalConfig(builder -> {
                     builder.author(author) // 璁剧疆浣滆��
                             .commentDate("yyyy-MM-dd hh:mm:ss")   //娉ㄩ噴鏃ユ湡
-                            .outputDir(projectPath + model_name + "/src/main/java") // 鎸囧畾杈撳嚭鐩綍
+                            .outputDir(s) // 鎸囧畾杈撳嚭鐩綍
                             .disableOpenDir() //绂佹鎵撳紑杈撳嚭鐩綍锛岄粯璁ゆ墦寮�
                     ;
                 })
@@ -34,7 +36,7 @@
                 .packageConfig(builder -> {
                     builder.entity("pojo");
                     builder.parent(setParent) // 璁剧疆鐖跺寘鍚�
-                            .pathInfo(Collections.singletonMap(OutputFile.xml, projectPath + model_name +  "/src/main/resources/mapper")); // 璁剧疆mapperXml鐢熸垚璺緞
+                            .pathInfo(Collections.singletonMap(OutputFile.xml, s1)); // 璁剧疆mapperXml鐢熸垚璺緞
                 })
                 // 绛栫暐閰嶇疆
                 .strategyConfig(builder -> {
diff --git a/sys/src/main/resources/application-dev.yml b/sys/src/main/resources/application-dev.yml
index 7dc4eaa..6cef4e4 100644
--- a/sys/src/main/resources/application-dev.yml
+++ b/sys/src/main/resources/application-dev.yml
@@ -40,8 +40,8 @@
   datasource:
     type: com.alibaba.druid.pool.DruidDataSource
     driverClassName: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://localhost:3306/lims_laboratory?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
-    username: root
+    url: jdbc:mysql://192.168.110.209:3306/lims_laboratory?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
+    username: user
     password: 123456
     druid:
       #   Druid鏁版嵁婧愰厤缃�
@@ -65,21 +65,21 @@
     # redis鏁版嵁搴撶储寮�(榛樿涓�0)锛屾垜浠娇鐢ㄧ储寮曚负3鐨勬暟鎹簱锛岄伩鍏嶅拰鍏朵粬鏁版嵁搴撳啿绐�
     database: 0
     # redis鏈嶅姟鍣ㄥ湴鍧�锛堥粯璁や负localhost锛�
-    host: localhost
+    host: 192.168.110.209
     # redis绔彛锛堥粯璁や负6379锛�
-    port: 6380
+    port: 6379
     # redis璁块棶瀵嗙爜锛堥粯璁や负绌猴級
     password: null
     # redis杩炴帴瓒呮椂鏃堕棿锛堝崟浣嶆绉掞級
-    timeout: 5
+    timeout: 50
     # redis杩炴帴姹犻厤缃�
     pool:
       # 鏈�澶у彲鐢ㄨ繛鎺ユ暟锛堥粯璁や负8锛岃礋鏁拌〃绀烘棤闄愶級
-      max-active: 8
+      max-active: 20
       # 鏈�澶х┖闂茶繛鎺ユ暟锛堥粯璁や负8锛岃礋鏁拌〃绀烘棤闄愶級
       max-idle: 8
       # 鏈�灏忕┖闂茶繛鎺ユ暟锛堥粯璁や负0锛岃鍊煎彧鏈変负姝f暟鎵嶆湁鐢級
-      min-idle: 0
+      min-idle: 5
       # 浠庤繛鎺ユ睜涓幏鍙栬繛鎺ユ渶澶х瓑寰呮椂闂达紙榛樿涓�-1锛屽崟浣嶄负姣锛岃礋鏁拌〃绀烘棤闄愶級
       max-wait: -1
 
diff --git a/sys/src/test/java/com/yuanchu/limslaboratory/SysApplicationTests.java b/sys/src/test/java/com/yuanchu/limslaboratory/SysApplicationTests.java
index 9d91f2b..c594764 100644
--- a/sys/src/test/java/com/yuanchu/limslaboratory/SysApplicationTests.java
+++ b/sys/src/test/java/com/yuanchu/limslaboratory/SysApplicationTests.java
@@ -1,9 +1,36 @@
 package com.yuanchu.limslaboratory;
+
+import com.yuanchu.limslaboratory.pojo.vo.PlanVo;
+import com.yuanchu.limslaboratory.service.PlanService;
+import com.yuanchu.limslaboratory.service.UserService;
+import com.yuanchu.limslaboratory.utils.MyUtil;
+import org.apache.poi.hwpf.HWPFDocument;
+import org.apache.poi.hwpf.extractor.WordExtractor;
+import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
+import org.apache.poi.xwpf.usermodel.XWPFDocument;
+import org.apache.poi.xwpf.usermodel.XWPFParagraph;
 import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
+
+import javax.annotation.Resource;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 @SpringBootTest
 class SysApplicationTests {
+
+    @Resource
+    private PlanService planService;
+
+    @Resource
+    private UserService userService;
 
     @Test
     void contextLoads() {
@@ -11,6 +38,147 @@
         System.out.println("newString === " + newString);
 
     }
+
+    @Test
+    void TT() {
+        Map<String, Object> userInfo = userService.getUserInfo("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2NvdW50IjoiYzhiMWFhYWNlYzM2NmMyNGU1ZDE4YzdlZWE5ZTU1MWIiLCJleHAiOjE2OTE3Mzk4MjV9.IZyU5jhTzpxedmmL25dhpkzQS7hth7gt-bzCx9fZyOk");
+        System.out.println(userInfo.get("name"));
+    }
+
+    @Test
+    void uploading() {
+        // 鏇挎崲涓篸oc鎴杁ocx鏂囦欢鐨勮矾寰�
+        String filePath = "D:\\20892\\desktop\\QR-14-01-02+++鍐呴儴瀹℃牳骞村害璁″垝.doc";
+        String info = "";
+        try {
+            FileInputStream fis = new FileInputStream(filePath);
+            if (filePath.endsWith(".doc")) {
+                // 璇诲彇doc鏂囦欢
+                HWPFDocument doc = new HWPFDocument(fis);
+                WordExtractor docExtractor = new WordExtractor(doc);
+                String text = docExtractor.getText();
+                System.out.println("doc:");
+                info = text.trim();
+                docExtractor.close();
+            } else if (filePath.endsWith(".docx")) {
+                // 璇诲彇docx鏂囦欢
+                XWPFDocument docx = new XWPFDocument(fis);
+                XWPFWordExtractor docxExtractor = new XWPFWordExtractor(docx);
+                String text = docxExtractor.getText();
+                System.out.println("docx:");
+                info = text.trim();
+                docxExtractor.close();
+            } else {
+                System.out.println("涓嶆槸word鏂囦欢");
+            }
+            fis.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        List<String> infoList = new ArrayList<String>();
+        String[] split = info.split("\n");
+        for (int i = 0; i < split.length; i++) {
+            System.out.println("======>" + split[i]);
+            if (i > 2) {
+                infoList.add(split[i]);
+            }
+        }
+        Map<String, String> result = new HashMap<>();
+        //瀹㈡埛鍗曚綅/椤圭洰鍚嶇О
+        String[] proAndUnit = infoList.get(0).split("\t");
+        for (int i = 0; i < proAndUnit.length; i++) {
+            if (i == 1) {
+                result.put("unitName", proAndUnit[i]);
+            }
+            if (i == 3) {
+                result.put("projectName", proAndUnit[i]);
+            }
+        }
+        //濉〃浜哄鍚�/鑱屼綅/鑱旂郴鐢佃瘽/閭紪
+        String npty = infoList.get(1);
+        String nameAndDate = npty.split("form")[1].split("鑱屼綅")[0];
+        //濮撳悕/鏃ユ湡
+        result.put("nameAndDate", nameAndDate.trim());
+        //鑱屼綅
+        String post = npty.split("Posts")[1].split("鑱旂郴鐢佃瘽")[0];
+        result.put("post", post.trim());
+        //鑱旂郴鐢佃瘽
+        String phone = npty.split("number")[1].split("閭紪")[0];
+        result.put("telephone", phone);
+        //閭紪
+        String email = npty.split("閭紪")[1].split("\t")[1];
+        result.put("email", email);
+        //鏈嶅姟鎬佸害
+        String replace = infoList.get(2).replace(" ", "").replace("\t", "");
+        System.out.println(replace);
+        String[] split1 = replace.split("鈽�");
+        for (int i = 0; i < split1.length; i++) {
+            System.out.println(split1[i]);
+        }
+        result.forEach((k, v) -> {
+            System.out.println("k======>" + k);
+            System.out.println("v======>" + v);
+        });
+    }
+
+    @Test
+    void upload() throws Exception {
+        String filePath = "D:\\20892\\desktop\\QR-14-01-02+++鍐呴儴瀹℃牳骞村害璁″垝.doc";
+
+        String info = "";
+
+        FileInputStream fis = new FileInputStream(filePath);
+        if (filePath.endsWith(".doc")) {
+            // 璇诲彇doc鏂囦欢
+            HWPFDocument doc = new HWPFDocument(fis);
+            WordExtractor docExtractor = new WordExtractor(doc);
+            String text = docExtractor.getText();
+            System.out.println("doc:");
+            info = text.trim();
+            docExtractor.close();
+        } else if (filePath.endsWith(".docx")) {
+            // 璇诲彇docx鏂囦欢
+            XWPFDocument docx = new XWPFDocument(fis);
+            XWPFWordExtractor docxExtractor = new XWPFWordExtractor(docx);
+            String text = docxExtractor.getText();
+            System.out.println("docx:");
+            info = text.trim();
+            docxExtractor.close();
+        } else {
+            System.out.println("涓嶆槸word鏂囦欢");
+        }
+//        System.out.println(info);
+        List<String> infoList = new ArrayList<>();
+        String[] split = info.split("\n");
+        for (int i = 0; i < split.length; i++) {
+            System.out.println("======>" + split[i]);
+            if (i > 2) {
+                infoList.add(split[i]);
+            }
+        }
+    }
+    @Test
+    void testRedis(){
+        boolean b=true;
+        if (b) {
+            this.contextLoads();
+        } else {
+            this.TT();
+        }
+        System.out.println(2024%100);
+        new Thread(()->{
+            String timeSixNumberCode = MyUtil.getTimeSixNumberCode("CS", "number");
+            System.out.println(timeSixNumberCode);
+        }).start();
+        //new Thread(()->{
+        //    String timeSixNumberCode = MyUtil.getTimeSixNumberCode("CS", "number");
+        //    System.out.println(timeSixNumberCode);
+        //}).start();
+        //new Thread(()->{
+        //    String timeSixNumberCode = MyUtil.getTimeSixNumberCode("CS", "number");
+        //    System.out.println(timeSixNumberCode);
+        //}).start();
+    }
 }
 
 
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/User.java b/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/User.java
index 14cea5b..7c1b746 100644
--- a/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/User.java
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/User.java
@@ -54,7 +54,7 @@
     private String email;
 
     @ApiModelProperty(value = "骞撮緞")
-    private Integer age;
+    private String age;
 
     @ApiModelProperty(value = "涓�х鍚�")
     private String info;
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/UserServiceImpl.java b/user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/UserServiceImpl.java
index 744ad7e..72be050 100644
--- a/user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/UserServiceImpl.java
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/UserServiceImpl.java
@@ -49,6 +49,7 @@
             }
             Map<String, Object> data = new HashMap<>();
             data.put("name",loginUser.get("name"));
+            data.put("id",loginUser.get("id"));
             data.put("remind", remind);
             return data;
         }
@@ -103,7 +104,7 @@
         User user = new User()
                 .setName(newPersonnelVo.getName())
                 .setAccount(newPersonnelVo.getAccount())
-                .setAge(newPersonnelVo.getAge())
+                .setAge(String.valueOf(newPersonnelVo.getAge()))
                 .setPhone(newPersonnelVo.getPhone())
                 .setEmail(newPersonnelVo.getEmail())
                 .setRoleId(newPersonnelVo.getRole_id())
@@ -117,7 +118,7 @@
         User user = new User()
                 .setName(updatePersonnelVo.getName())
                 .setAccount(updatePersonnelVo.getAccount())
-                .setAge(updatePersonnelVo.getAge())
+                .setAge(String.valueOf(updatePersonnelVo.getAge()))
                 .setPhone(updatePersonnelVo.getPhone())
                 .setEmail(updatePersonnelVo.getEmail())
                 .setRoleId(updatePersonnelVo.getRole_id())
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/vo/PagePersonnelVo.java b/user-server/src/main/java/com/yuanchu/limslaboratory/vo/PagePersonnelVo.java
index b5564c0..ec6866e 100644
--- a/user-server/src/main/java/com/yuanchu/limslaboratory/vo/PagePersonnelVo.java
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/vo/PagePersonnelVo.java
@@ -26,7 +26,7 @@
     private Date createTime;
 
     @ApiModelProperty(value = "骞撮緞", example = "23")
-    private Integer age;
+    private String age;
 
     @ApiModelProperty(value = "鎵嬫満鍙�", example = "12345678981")
     private String phone;
diff --git a/user-server/src/main/resources/mapper/UserMapper.xml b/user-server/src/main/resources/mapper/UserMapper.xml
index 54ecc0e..4a8eb08 100644
--- a/user-server/src/main/resources/mapper/UserMapper.xml
+++ b/user-server/src/main/resources/mapper/UserMapper.xml
@@ -32,7 +32,7 @@
         IFNULL(u.`phone`, '---') phone, IFNULL(u.`email`, '---') email, u.`job_state`
         FROM `user` u, role r
         WHERE u.`role_id` = r.`id`
-        <if test="name != null">
+        <if test="name != null and name!=''">
             AND u.name = #{name}
         </if>
     </select>

--
Gitblit v1.9.3