From b71d454f550a53dde29b1849acfebd06e34f7299 Mon Sep 17 00:00:00 2001
From: 李林 <z1292839451@163.com>
Date: 星期二, 08 八月 2023 13:54:35 +0800
Subject: [PATCH] 迁移仓库

---
 inspect-server/src/main/resources/mapper/FinishedInspectMapper.xml                          |   21 
 inventory-server/src/main/java/com/yuanchu/mom/mapper/RepertoryMapper.java                  |   21 
 system-run/src/main/java/com/yuanchu/mom/SystemRunApplication.java                          |   15 
 framework/src/main/java/com/yuanchu/mom/utils/RedisUtil.java                                |  622 +++++
 inspect-server/src/main/java/com/yuanchu/mom/controller/RawInspectController.java           |  122 
 user-server/src/main/java/com/yuanchu/mom/pojo/User.java                                    |   39 
 standard-server/src/main/java/com/yuanchu/mom/controller/MaterialController.java            |   33 
 framework/src/main/java/com/yuanchu/mom/mybatis_config/MyMetaObjectHandler.java             |   22 
 standard-server/src/main/java/com/yuanchu/mom/mapper/DeviceMapper.java                      |   16 
 framework/src/main/java/com/yuanchu/mom/vo/Result.java                                      |   56 
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/InspectionItemServiceImpl.java    |  130 +
 standard-server/src/main/java/com/yuanchu/mom/pojo/dto/ProductDto.java                      |   16 
 standard-server/src/test/java/com/yuanchu/mom/StandardServerApplicationTests.java           |   13 
 system-run/src/main/resources/mysqldump.exe                                                 |    0 
 standard-server/.gitignore                                                                  |   33 
 standard-server/src/main/java/com/yuanchu/mom/controller/DeviceController.java              |   47 
 standard-server/src/main/java/com/yuanchu/mom/controller/OrdersController.java              |   63 
 inspect-server/pom.xml                                                                      |   55 
 inspect-server/src/main/java/com/yuanchu/mom/pojo/InspectionItem.java                       |   86 
 framework/src/main/java/com/yuanchu/mom/handler/GlobalExceptionHandler.java                 |  243 +
 standard-server/src/main/java/com/yuanchu/mom/service/impl/OrdersServiceImpl.java           |   35 
 standard-server/src/main/java/com/yuanchu/mom/service/impl/TechnologyServiceImpl.java       |   38 
 framework/src/main/java/com/yuanchu/mom/config/WebMvcConfig.java                            |   25 
 system-run/src/main/resources/application.yml                                               |   23 
 framework/src/main/java/com/yuanchu/mom/mybatis_config/MySqlInjector.java                   |   24 
 standard-server/src/main/java/com/yuanchu/mom/service/SpecificationsService.java            |   33 
 inspect-server/src/main/java/com/yuanchu/mom/pojo/FinishedInspect.java                      |   99 
 standard-server/src/main/java/com/yuanchu/mom/service/impl/MaterialServiceImpl.java         |   64 
 inventory-server/src/main/java/com/yuanchu/mom/service/RepertoryService.java                |   29 
 framework/src/main/java/com/yuanchu/mom/config/FiferConfig.java                             |  110 
 standard-server/src/main/java/com/yuanchu/mom/service/impl/ProductServiceImpl.java          |   42 
 inspect-server/src/main/java/com/yuanchu/mom/controller/FinishedInspectController.java      |  118 
 standard-server/src/main/java/com/yuanchu/mom/pojo/dto/StandardDto.java                     |   17 
 framework/src/main/java/com/yuanchu/mom/utils/JackSonUtil.java                              |  131 +
 standard-server/src/main/java/com/yuanchu/mom/mapper/StandardMapper.java                    |   18 
 inspect-server/src/main/java/com/yuanchu/mom/service/RawInspectService.java                 |   36 
 user-server/pom.xml                                                                         |   24 
 standard-server/src/main/resources/mapper/SpecificationsMapper.xml                          |   30 
 standard-server/src/main/resources/mapper/TechnologyMapper.xml                              |    5 
 inspect-server/src/main/resources/mapper/InspectUnacceptedMapper.xml                        |   68 
 standard-server/src/main/java/com/yuanchu/mom/service/OrdersService.java                    |   27 
 standard-server/src/main/java/com/yuanchu/mom/pojo/dto/ProductDto2.java                     |   29 
 standard-server/src/main/java/com/yuanchu/mom/service/ProductService.java                   |   20 
 pom.xml                                                                                     |  231 +
 inspect-server/src/main/java/com/yuanchu/mom/pojo/RawInspect.java                           |  106 
 inspect-server/src/test/java/com/yuanchu/mom/InspectServerApplicationTests.java             |   13 
 inspect-server/src/main/java/com/yuanchu/mom/mapper/InspectUnacceptedMapper.java            |   23 
 standard-server/src/main/java/com/yuanchu/mom/pojo/Material.java                            |   60 
 standard-server/src/main/java/com/yuanchu/mom/pojo/Technology.java                          |   63 
 inventory-server/src/main/java/com/yuanchu/mom/service/impl/RepertoryServiceImpl.java       |   32 
 system-run/src/main/resources/logback-spring.xml                                            |  236 +
 user-server/src/main/java/com/yuanchu/mom/service/UserService.java                          |   20 
 inspect-server/src/main/java/com/yuanchu/mom/pojo/vo/RawInspectVo.java                      |   81 
 standard-server/src/main/java/com/yuanchu/mom/service/impl/DeviceServiceImpl.java           |   59 
 standard-server/src/main/resources/mapper/DeviceMapper.xml                                  |   11 
 standard-server/src/main/java/com/yuanchu/mom/pojo/Specifications.java                      |   55 
 standard-server/src/main/resources/mapper/ProductMapper.xml                                 |   44 
 inspect-server/src/main/java/com/yuanchu/mom/controller/RawInsProductController.java        |   67 
 inspect-server/src/main/java/com/yuanchu/mom/pojo/dto/UpdateInspectionItemDto.java          |   23 
 inspect-server/src/main/java/com/yuanchu/mom/service/RawInsProductService.java              |   21 
 inspect-server/src/main/java/com/yuanchu/mom/service/InspectUnacceptedService.java          |   28 
 system-run/src/main/resources/application-dev.yml                                           |   77 
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/RawInspectServiceImpl.java        |  188 +
 standard-server/src/main/java/com/yuanchu/mom/pojo/Device.java                              |   58 
 inspect-server/src/main/resources/mapper/InspectionItemMapper.xml                           |   27 
 framework/src/main/java/com/yuanchu/mom/config/MyCorsConfig.java                            |   28 
 inspect-server/src/main/java/com/yuanchu/mom/mapper/RawInspectMapper.java                   |   23 
 standard-server/src/main/java/com/yuanchu/mom/service/TechnologyService.java                |   20 
 standard-server/src/main/resources/mapper/StandardMapper.xml                                |   17 
 system-run/src/main/java/com/yuanchu/mom/CodeGenerator.java                                 |  129 +
 standard-server/src/main/java/com/yuanchu/mom/pojo/Standard.java                            |   56 
 standard-server/src/main/java/com/yuanchu/mom/pojo/Product.java                             |   75 
 system-run/src/test/java/com/yuanchu/mom/SystemRunApplicationTest.java                      |   57 
 standard-server/src/main/java/com/yuanchu/mom/mapper/TechnologyMapper.java                  |   16 
 inspect-server/src/main/resources/mapper/RawInspectMapper.xml                               |   41 
 user-server/src/main/java/com/yuanchu/mom/mapper/UserMapper.java                            |   11 
 standard-server/src/main/java/com/yuanchu/mom/mapper/SpecificationsMapper.java              |   29 
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/FinishedInspectServiceImpl.java   |   83 
 user-server/src/test/java/com/yuanchu/mom/SystemRunApplicationTests.java                    |   13 
 standard-server/src/main/java/com/yuanchu/mom/controller/ProductController.java             |   35 
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/InspectUnacceptedServiceImpl.java |   49 
 framework/src/main/java/com/yuanchu/mom/utils/FileSaveUtil.java                             |   60 
 inventory-server/src/main/java/com/yuanchu/mom/controller/RepertoryController.java          |   62 
 inventory-server/src/main/java/com/yuanchu/mom/pojo/Repertory.java                          |  115 
 standard-server/src/main/java/com/yuanchu/mom/pojo/Orders.java                              |  128 +
 standard-server/src/main/java/com/yuanchu/mom/controller/TechnologyController.java          |   45 
 inspect-server/.gitignore                                                                   |   33 
 standard-server/src/main/java/com/yuanchu/mom/service/impl/StandardServiceImpl.java         |   21 
 inspect-server/src/main/java/com/yuanchu/mom/service/FinishedInspectService.java            |   27 
 system-run/src/main/resources/application-prod.yml                                          |   76 
 standard-server/src/main/java/com/yuanchu/mom/mapper/ProductMapper.java                     |   23 
 user-server/src/main/resources/mapper/UserMapper.xml                                        |    5 
 README.md                                                                                   |   39 
 user-server/src/main/java/com/yuanchu/mom/controller/UserController.java                    |   68 
 inspect-server/src/main/java/com/yuanchu/mom/pojo/dto/InspectionItemDto.java                |   21 
 inspect-server/src/main/java/com/yuanchu/mom/pojo/InspectUnaccepted.java                    |   94 
 system-run/src/main/java/com/yuanchu/mom/backup/MysqlDataBackup.java                        |  190 +
 framework/src/main/java/com/yuanchu/mom/utils/Jwt.java                                      |   57 
 inspect-server/src/main/java/com/yuanchu/mom/mapper/InspectionItemMapper.java               |   20 
 inspect-server/src/main/java/com/yuanchu/mom/mapper/RawInsProductMapper.java                |   15 
 inspect-server/src/main/resources/mapper/RawInsProductMapper.xml                            |    4 
 standard-server/src/main/resources/mapper/OrdersMapper.xml                                  |   36 
 .gitignore                                                                                  |   35 
 inspect-server/src/main/java/com/yuanchu/mom/pojo/RawInsProduct.java                        |   92 
 standard-server/src/main/java/com/yuanchu/mom/pojo/dto/SpecificationsDto.java               |   15 
 inspect-server/src/main/java/com/yuanchu/mom/controller/InspectionItemController.java       |   66 
 inventory-server/pom.xml                                                                    |   35 
 inspect-server/src/main/java/com/yuanchu/mom/service/impl/RawInsProductServiceImpl.java     |   89 
 standard-server/src/main/resources/mapper/MaterialMapper.xml                                |   70 
 framework/src/main/java/com/yuanchu/mom/mybatis_config/MyBaseMapper.java                    |   15 
 standard-server/src/main/java/com/yuanchu/mom/pojo/dto/MaterialTreeDto.java                 |   20 
 standard-server/src/main/java/com/yuanchu/mom/mapper/OrdersMapper.java                      |   23 
 inventory-server/src/main/resources/mapper/RepertoryMapper.xml                              |   29 
 inspect-server/src/main/java/com/yuanchu/mom/mapper/FinishedInspectMapper.java              |   21 
 user-server/src/main/java/com/yuanchu/mom/service/imp/UserServiceImp.java                   |   42 
 framework/src/main/java/com/yuanchu/mom/config/DruidConfig.java                             |   57 
 standard-server/src/main/java/com/yuanchu/mom/service/impl/SpecificationsServiceImpl.java   |   53 
 inspect-server/src/main/java/com/yuanchu/mom/controller/InspectUnacceptedController.java    |   52 
 framework/src/main/java/com/yuanchu/mom/config/OpenFifer.java                               |   20 
 framework/pom.xml                                                                           |   42 
 framework/src/main/java/com/yuanchu/mom/config/Swagger3.java                                |  122 
 inspect-server/src/main/java/com/yuanchu/mom/pojo/dto/InspectionItemDto2.java               |   34 
 inspect-server/src/main/java/com/yuanchu/mom/pojo/vo/RawInsProductVo.java                   |   66 
 inspect-server/src/main/java/com/yuanchu/mom/service/InspectionItemService.java             |   28 
 standard-server/src/main/java/com/yuanchu/mom/mapper/MaterialMapper.java                    |   32 
 framework/src/main/java/com/yuanchu/mom/mybatis_config/MyBatisPlusConfig.java               |   39 
 framework/src/main/java/com/yuanchu/mom/utils/MyUtil.java                                   |   65 
 standard-server/src/main/java/com/yuanchu/mom/service/MaterialService.java                  |   43 
 standard-server/src/main/java/com/yuanchu/mom/service/DeviceService.java                    |   28 
 standard-server/src/main/java/com/yuanchu/mom/service/StandardService.java                  |   13 
 standard-server/pom.xml                                                                     |   24 
 system-run/pom.xml                                                                          |   74 
 132 files changed, 7,384 insertions(+), 2 deletions(-)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..cf2c0f4
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,35 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+*.log
+*.jar
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
diff --git a/README.md b/README.md
index 33f4734..1ac30ac 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,39 @@
-## mom-before
+# 鍚庣涓ぉ娴锋磱
 
-mom鍓嶇
+#### 浠嬬粛
+{**浠ヤ笅鏄� Gitee 骞冲彴璇存槑锛屾偍鍙互鏇挎崲姝ょ畝浠�**
+Gitee 鏄� OSCHINA 鎺ㄥ嚭鐨勫熀浜� Git 鐨勪唬鐮佹墭绠″钩鍙帮紙鍚屾椂鏀寔 SVN锛夈�備笓涓哄紑鍙戣�呮彁渚涚ǔ瀹氥�侀珮鏁堛�佸畨鍏ㄧ殑浜戠杞欢寮�鍙戝崗浣滃钩鍙�
+鏃犺鏄釜浜恒�佸洟闃熴�佹垨鏄紒涓氾紝閮借兘澶熺敤 Gitee 瀹炵幇浠g爜鎵樼銆侀」鐩鐞嗐�佸崗浣滃紑鍙戙�備紒涓氶」鐩鐪� [https://gitee.com/enterprises](https://gitee.com/enterprises)}
 
+#### 杞欢鏋舵瀯
+杞欢鏋舵瀯璇存槑
+
+
+#### 瀹夎鏁欑▼
+
+1.  xxxx
+2.  xxxx
+3.  xxxx
+
+#### 浣跨敤璇存槑
+
+1.  xxxx
+2.  xxxx
+3.  xxxx
+
+#### 鍙備笌璐$尞
+
+1.  Fork 鏈粨搴�
+2.  鏂板缓 Feat_xxx 鍒嗘敮
+3.  鎻愪氦浠g爜
+4.  鏂板缓 Pull Request
+
+
+#### 鐗规妧
+
+1.  浣跨敤 Readme\_XXX.md 鏉ユ敮鎸佷笉鍚岀殑璇█锛屼緥濡� Readme\_en.md, Readme\_zh.md
+2.  Gitee 瀹樻柟鍗氬 [blog.gitee.com](https://blog.gitee.com)
+3.  浣犲彲浠� [https://gitee.com/explore](https://gitee.com/explore) 杩欎釜鍦板潃鏉ヤ簡瑙� Gitee 涓婄殑浼樼寮�婧愰」鐩�
+4.  [GVP](https://gitee.com/gvp) 鍏ㄧО鏄� Gitee 鏈�鏈変环鍊煎紑婧愰」鐩紝鏄患鍚堣瘎瀹氬嚭鐨勪紭绉�寮�婧愰」鐩�
+5.  Gitee 瀹樻柟鎻愪緵鐨勪娇鐢ㄦ墜鍐� [https://gitee.com/help](https://gitee.com/help)
+6.  Gitee 灏侀潰浜虹墿鏄竴妗g敤鏉ュ睍绀� Gitee 浼氬憳椋庨噰鐨勬爮鐩� [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
diff --git a/framework/pom.xml b/framework/pom.xml
new file mode 100644
index 0000000..4fcce66
--- /dev/null
+++ b/framework/pom.xml
@@ -0,0 +1,42 @@
+<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>mom</artifactId>
+        <groupId>com.yuanchu.mom</groupId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>framework</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>framework</name>
+    <description>framework</description>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <!--鏁版嵁搴撹繛鎺ユ睜-->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid</artifactId>
+        </dependency>
+
+        <!-- mysql椹卞姩 -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+
+        <!--redis jar鍖�-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+        </dependency>
+
+        <!--jwt-->
+        <dependency>
+            <groupId>com.auth0</groupId>
+            <artifactId>java-jwt</artifactId>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/framework/src/main/java/com/yuanchu/mom/config/DruidConfig.java b/framework/src/main/java/com/yuanchu/mom/config/DruidConfig.java
new file mode 100644
index 0000000..7b9f43c
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/config/DruidConfig.java
@@ -0,0 +1,57 @@
+package com.yuanchu.mom.config;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import com.alibaba.druid.support.http.StatViewServlet;
+import com.alibaba.druid.support.http.WebStatFilter;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.boot.web.servlet.ServletRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.sql.DataSource;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+@Configuration
+public class DruidConfig {
+    //鍔犺浇application.yaml涓殑Druid閰嶇疆
+    @ConfigurationProperties(prefix = "spring.datasource")
+    @Bean
+    public DataSource druid(){
+        return  new DruidDataSource();
+    }
+
+    //閰嶇疆Druid鐨勭洃鎺�
+    //1銆侀厤缃竴涓鐞嗗悗鍙扮殑Servlet
+    @Bean
+    public ServletRegistrationBean statViewServlet(){
+        ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
+        Map<String,String> initParams = new HashMap<>();
+
+        initParams.put("loginUsername","root");
+        initParams.put("loginPassword","123456");
+        initParams.put("allow","");//榛樿灏辨槸鍏佽鎵�鏈夎闂�
+//        initParams.put("deny","192.168.15.21"); 绂佹璇P璁块棶
+
+        bean.setInitParameters(initParams);
+        return bean;
+    }
+
+    //2銆侀厤缃竴涓獁eb鐩戞帶鐨刦ilter
+    @Bean
+    public FilterRegistrationBean webStatFilter(){
+        FilterRegistrationBean bean = new FilterRegistrationBean();
+        bean.setFilter(new WebStatFilter());
+
+        Map<String,String> initParams = new HashMap<>();
+        initParams.put("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
+
+        bean.setInitParameters(initParams);
+
+        bean.setUrlPatterns(Arrays.asList("/*"));
+
+        return bean;
+    }
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/config/FiferConfig.java b/framework/src/main/java/com/yuanchu/mom/config/FiferConfig.java
new file mode 100644
index 0000000..792dbea
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/config/FiferConfig.java
@@ -0,0 +1,110 @@
+package com.yuanchu.mom.config;
+
+import com.alibaba.druid.pool.vendor.NullExceptionSorter;
+import com.yuanchu.mom.utils.JackSonUtil;
+import com.yuanchu.mom.utils.Jwt;
+import com.yuanchu.mom.utils.RedisUtil;
+import com.yuanchu.mom.vo.Result;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.client.RestTemplate;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.WriteListener;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+@Component
+public class FiferConfig implements HandlerInterceptor {
+
+    @Value("${server.port}")
+    private String serverPort;
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+        if (HttpMethod.OPTIONS.toString().equals(request.getMethod())) {
+            response.setStatus(HttpServletResponse.SC_OK);
+            return true;
+        }
+        String[] strs = request.getRequestURL().toString().split(serverPort);
+        AtomicBoolean judge = new AtomicBoolean(false);
+        list.forEach(a -> {
+            if (strs[1].equals(a)) {
+                judge.set(true);
+                return;
+            } else if (a.indexOf("/**") > -1) {
+                if (strs[1].indexOf(a.replace("/**", "")) == 0) {
+                    judge.set(true);
+                    return;
+                }
+            }
+        });
+        if (judge.get()) return true;
+        response.setContentType(MediaType.APPLICATION_JSON_VALUE);
+        response.setCharacterEncoding("UTF-8");
+        String token = request.getHeader("token");
+        Map<String, String> map = new Jwt().readJWT(token);
+        if (map.get("state").equals("0")) {
+            String redisToken = String.valueOf(RedisUtil.get(JackSonUtil.unmarshal(map.get("data"), Map.class).get("id").toString()));
+            if (!redisToken.equals(token)) {
+                map.put("info", "涓嶅瓨鍦ㄧ殑token");
+                map.put("state", "2");
+            } else {
+                return true;
+            }
+        }
+        PrintWriter out = response.getWriter();
+        out.print(new Result<>().fail(401,map.get("info")));
+        switch (map.get("state")){
+            case "1":
+                response.setStatus(401);
+                break;
+            case "2":
+                response.setStatus(402);
+                break;
+        }
+        return false;
+    }
+
+    @Override
+    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
+
+    }
+
+    @Override
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+//        System.out.println("-------------------------鎷︽埅鍣ㄦ牎楠岄�氳繃---------------------------");
+    }
+
+    private List<String> list;
+
+    public FiferConfig() {
+        List<String> list = new ArrayList<>();
+
+        // swagger鏀捐
+        list.add("/doc.html/**");
+        list.add("/webjars/**");
+        list.add("/swagger-resources");
+        list.add("/api-docs");
+        list.add("/v3/api-docs");
+
+        list.add("/user/enter");
+        list.add("/user/refresh");
+        this.list = list;
+    }
+
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/config/MyCorsConfig.java b/framework/src/main/java/com/yuanchu/mom/config/MyCorsConfig.java
new file mode 100644
index 0000000..0626b4c
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/config/MyCorsConfig.java
@@ -0,0 +1,28 @@
+package com.yuanchu.mom.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.cors.CorsConfiguration;
+import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
+import org.springframework.web.filter.CorsFilter;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+public class MyCorsConfig {
+
+    @Bean
+    public CorsFilter corsFilter() {
+        CorsConfiguration config = new CorsConfiguration();
+        //鍏佽鎵�鏈夊煙鍚嶈繘琛岃法鍩熻皟鐢�
+        config.addAllowedOriginPattern("*");//鏇挎崲杩欎釜
+        //鍏佽璺ㄨ秺鍙戦�乧ookie
+        config.setAllowCredentials(true);
+        //鏀捐鍏ㄩ儴鍘熷澶翠俊鎭�
+        config.addAllowedHeader("*");
+        //鍏佽鎵�鏈夎姹傛柟娉曡法鍩熻皟鐢�
+        config.addAllowedMethod("*");
+        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
+        source.registerCorsConfiguration("/**", config);
+        return new CorsFilter(source);
+    }
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/config/OpenFifer.java b/framework/src/main/java/com/yuanchu/mom/config/OpenFifer.java
new file mode 100644
index 0000000..d61bbb0
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/config/OpenFifer.java
@@ -0,0 +1,20 @@
+package com.yuanchu.mom.config;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
+
+//@Configuration
+public class OpenFifer extends WebMvcConfigurationSupport {
+
+    @Autowired
+    private FiferConfig fiferConfig;
+
+    @Override
+    protected void addInterceptors(InterceptorRegistry registry) {
+        registry.addInterceptor(fiferConfig).addPathPatterns("/**")
+                .excludePathPatterns();
+        super.addInterceptors(registry);
+    }
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/config/Swagger3.java b/framework/src/main/java/com/yuanchu/mom/config/Swagger3.java
new file mode 100644
index 0000000..5f057d5
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/config/Swagger3.java
@@ -0,0 +1,122 @@
+package com.yuanchu.mom.config;
+
+
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.oas.annotations.EnableOpenApi;
+import springfox.documentation.service.*;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spi.service.contexts.SecurityContext;
+import springfox.documentation.spring.web.plugins.Docket;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+@Configuration
+@EnableOpenApi
+public class Swagger3 {
+    // 璺緞http://localhost:8080/doc.html
+    @Value("${swagger.enabled}")
+    private boolean enable;
+
+    private final String swaggerPackage = "com.yuanchu.mom";
+
+    /**
+     * 娣诲姞鎽樿淇℃伅
+     */
+    private ApiInfo apiInfo() {
+        // 鐢ˋpiInfoBuilder杩涜瀹氬埗
+        return new ApiInfoBuilder()
+                // 璁剧疆鏍囬
+                .title("涓ぉ娴锋磱mom")
+                // 鎻忚堪
+                .description("涓ぉ娴锋磱mom")
+                // 浣滆�呬俊鎭�
+                .contact(new Contact("榈烽洀", null, null))
+                // 鐗堟湰
+                .version("鐗堟湰鍙�:V.1")
+                //鍗忚
+                .license("The Apache License")
+                //鍗忚url
+                .licenseUrl("http://www.baidu.com")
+                .build();
+    }
+
+    /**
+     * 鍒涘缓API
+     * http:IP:绔彛鍙�/swagger-ui/index.html 鍘熺敓鍦板潃
+     * http:IP:绔彛鍙�/doc.html bootStrap-UI鍦板潃
+     */
+    @Bean
+    public Docket createRestApi() {
+        return new Docket(DocumentationType.OAS_30).pathMapping("/")
+                // 鐢ㄦ潵鍒涘缓璇PI鐨勫熀鏈俊鎭紝灞曠ず鍦ㄦ枃妗g殑椤甸潰涓紙鑷畾涔夊睍绀虹殑淇℃伅锛�
+                .enable(enable)
+                .apiInfo(apiInfo())
+                // 璁剧疆鍝簺鎺ュ彛鏆撮湶缁橲wagger灞曠ず
+                .select()
+                // 鎵弿鎵�鏈夋湁娉ㄨВ鐨刟pi锛岀敤杩欑鏂瑰紡鏇寸伒娲�
+                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
+
+
+                // 鎵弿鎸囧畾鍖呬腑鐨剆wagger娉ㄨВ
+                .apis(RequestHandlerSelectors.basePackage(swaggerPackage))
+                // 鎵弿鎵�鏈� .apis(RequestHandlerSelectors.any())
+                .paths(PathSelectors.regex("(?!/ApiError.*).*"))
+                .paths(PathSelectors.any())
+                .build()
+                // 鏀寔鐨勯�氳鍗忚闆嗗悎
+                .protocols(newHashSet("https", "http"))
+                .securitySchemes(securitySchemes())
+                .securityContexts(securityContexts());
+    }
+
+    /**
+     * 鏀寔鐨勯�氳鍗忚闆嗗悎
+     * @param type1
+     * @param type2
+     * @return
+     */
+    private Set<String> newHashSet(String type1, String type2){
+        Set<String> set = new HashSet<>();
+        set.add(type1);
+        set.add(type2);
+        return set;
+    }
+
+    /**
+     * 璁よ瘉鐨勫畨鍏ㄤ笂涓嬫枃
+     */
+    private List<SecurityScheme> securitySchemes() {
+        List<SecurityScheme> securitySchemes = new ArrayList<>();
+        securitySchemes.add((SecurityScheme) new ApiKey("token", "token", "header"));
+        return securitySchemes;
+    }
+
+    /**
+     * 鎺堟潈淇℃伅鍏ㄥ眬搴旂敤
+     */
+    private List<SecurityContext> securityContexts() {
+        List<SecurityContext> securityContexts = new ArrayList<>();
+        securityContexts.add(SecurityContext.builder()
+                .securityReferences(defaultAuth())
+                .forPaths(PathSelectors.any()).build());
+        return securityContexts;
+    }
+
+    private List<SecurityReference> defaultAuth() {
+        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
+        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
+        authorizationScopes[0] = authorizationScope;
+        List<SecurityReference> securityReferences = new ArrayList<>();
+        securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
+        return securityReferences;
+    }
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/config/WebMvcConfig.java b/framework/src/main/java/com/yuanchu/mom/config/WebMvcConfig.java
new file mode 100644
index 0000000..e219b63
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/config/WebMvcConfig.java
@@ -0,0 +1,25 @@
+package com.yuanchu.mom.config;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
+
+@Configuration
+public class WebMvcConfig extends WebMvcConfigurationSupport {
+
+    @Value("${file.path}")
+    private String filePath;
+
+    @Override
+    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
+        //閰嶇疆鎷︽埅鍣ㄨ闂潤鎬佽祫婧�
+        registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
+        registry.addResourceHandler("/favicon.ico").addResourceLocations("classpath:/META-INF/resources/");
+        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
+
+        //璁剧疆鏂囦欢铏氭嫙璺緞鏄犲皠
+        registry.addResourceHandler("/img/**").addResourceLocations("file:"+filePath+"/")
+                .addResourceLocations("file:"+filePath+"/");
+    }
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/handler/GlobalExceptionHandler.java b/framework/src/main/java/com/yuanchu/mom/handler/GlobalExceptionHandler.java
new file mode 100644
index 0000000..e34b0d1
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/handler/GlobalExceptionHandler.java
@@ -0,0 +1,243 @@
+package com.yuanchu.mom.handler;
+
+import com.yuanchu.mom.vo.Result;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.ConversionNotSupportedException;
+import org.springframework.beans.TypeMismatchException;
+import org.springframework.beans.factory.NoSuchBeanDefinitionException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DuplicateKeyException;
+import org.springframework.http.converter.HttpMessageNotReadableException;
+import org.springframework.http.converter.HttpMessageNotWritableException;
+import org.springframework.jdbc.BadSqlGrammarException;
+import org.springframework.validation.ObjectError;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.sql.SQLException;
+import java.util.List;
+import java.util.stream.Collectors;
+
+
+@Slf4j
+@RestControllerAdvice
+public class GlobalExceptionHandler {
+
+    @Autowired
+    HttpServletResponse response;
+
+    @ExceptionHandler(SQLException.class)
+    public Result<?> handlerSQLException(SQLException e) {
+        log.error(e.getMessage().toLowerCase(), e);
+        response.setStatus(500);
+        return Result.fail("鏁版嵁鎿嶄綔澶辫触锛佽鑱旂郴绠$悊鍛�");
+    }
+
+    /**
+     * 鍞竴鍊煎湪鏁版嵁搴撲腑閲嶅
+     * Duplicate entry ' ' for key ' '
+     *
+     * @param e锛氶噸澶嶉敭寮傚父
+     * @return 199
+     */
+    @ExceptionHandler
+    public Result<?> DuplicateKeyException(DuplicateKeyException e) {
+        log.error(String.valueOf(e));
+        String message = e.getCause().getMessage();
+        String[] split = message.split("'");
+        response.setStatus(500);
+        return Result.fail("閲嶅娣诲姞锛氥��" + split[1] + "銆戞搷浣滃け璐ワ紒");
+    }
+
+    @ExceptionHandler
+    public Result<?> NullPointerException(NullPointerException e) {
+        e.printStackTrace();
+        response.setStatus(500);
+        return Result.fail("閮ㄥ垎鍙傛暟涓虹┖锛岃妫�鏌ワ紒");
+    }
+
+    /**
+     * 杩愯鏃跺紓甯�
+     */
+    @ExceptionHandler(RuntimeException.class)
+    public Result<?> runtimeExceptionHandler(RuntimeException e) {
+        e.printStackTrace();
+        response.setStatus(500);
+        return Result.fail("杩愯鏃跺紓甯�");
+    }
+
+    /**
+     * 绫诲瀷杞崲寮傚父
+     */
+    @ExceptionHandler(ClassCastException.class)
+    public Result<?> classCastExceptionHandler(ClassCastException e) {
+        e.printStackTrace();
+        response.setStatus(500);
+        return Result.fail("绫诲瀷杞崲寮傚父");
+    }
+
+    /**
+     * 鏂囦欢鏈壘鍒板紓甯�
+     */
+    @ExceptionHandler(FileNotFoundException.class)
+    public Result<?> FileNotFoundException(FileNotFoundException e) {
+        e.printStackTrace();
+        response.setStatus(500);
+        return Result.fail("鏂囦欢鏈壘鍒板紓甯�");
+    }
+
+    /**
+     * 鏁板瓧鏍煎紡寮傚父
+     */
+    @ExceptionHandler(NumberFormatException.class)
+    public Result<?> NumberFormatException(NumberFormatException e) {
+        e.printStackTrace();
+        response.setStatus(500);
+        return Result.fail("鏁板瓧鏍煎紡寮傚父");
+    }
+
+    /**
+     * 瀹夊叏寮傚父
+     */
+    @ExceptionHandler(SecurityException.class)
+    public Result<?> SecurityException(SecurityException e) {
+        e.printStackTrace();
+        response.setStatus(500);
+        return Result.fail("瀹夊叏寮傚父");
+    }
+
+    /**
+     * 绫诲瀷涓嶅瓨鍦ㄥ紓甯�
+     */
+    @ExceptionHandler(TypeNotPresentException.class)
+    public Result<?> TypeNotPresentException(TypeNotPresentException e) {
+        e.printStackTrace();
+        response.setStatus(500);
+        return Result.fail("绫诲瀷涓嶅瓨鍦ㄥ紓甯�");
+    }
+
+    /**
+     * IO寮傚父
+     */
+    @ExceptionHandler(IOException.class)
+    public Result<?> iOExceptionHandler(IOException e) {
+        e.printStackTrace();
+        response.setStatus(500);
+        return Result.fail("IO寮傚父");
+    }
+
+    /**
+     * 鏈煡鏂规硶寮傚父
+     */
+    @ExceptionHandler(NoSuchMethodException.class)
+    public Result<?> noSuchMethodExceptionHandler(NoSuchMethodException e) {
+        e.printStackTrace();
+        response.setStatus(500);
+        return Result.fail("鏈煡鏂规硶寮傚父");
+    }
+
+    /**
+     * 鏁扮粍瓒婄晫寮傚父
+     */
+    @ExceptionHandler(IndexOutOfBoundsException.class)
+    public Result<?> indexOutOfBoundsExceptionHandler(IndexOutOfBoundsException e) {
+        e.printStackTrace();
+        response.setStatus(500);
+        return Result.fail("鏁扮粍瓒婄晫寮傚父");
+    }
+
+    /**
+     * sql璇硶閿欒寮傚父
+     */
+    @ExceptionHandler(BadSqlGrammarException.class)
+    public Result<?> BadSqlGrammarException(BadSqlGrammarException e) {
+        e.printStackTrace();
+        response.setStatus(500);
+        return Result.fail("sql璇硶閿欒寮傚父");
+    }
+
+    /**
+     * 鏃犳硶娉ㄥ叆bean寮傚父
+     */
+    @ExceptionHandler(NoSuchBeanDefinitionException.class)
+    public Result<?> NoSuchBeanDefinitionException(NoSuchBeanDefinitionException e) {
+        e.printStackTrace();
+        response.setStatus(500);
+        return Result.fail("鏃犳硶娉ㄥ叆bean");
+    }
+
+    /**
+     * Http娑堟伅涓嶅彲璇诲紓甯�
+     */
+    @ExceptionHandler({HttpMessageNotReadableException.class})
+    public Result<?> requestNotReadable(HttpMessageNotReadableException e) {
+        e.printStackTrace();
+        response.setStatus(500);
+        return Result.fail("Http娑堟伅涓嶅彲璇�");
+    }
+
+    /**
+     * 400閿欒
+     */
+    @ExceptionHandler({TypeMismatchException.class})
+    public Result<?> requestTypeMismatch(TypeMismatchException e) {
+        e.printStackTrace();
+        response.setStatus(500);
+        return Result.fail("鏈嶅姟鍣ㄥ紓甯�");
+    }
+
+    /**
+     * 500閿欒
+     */
+    @ExceptionHandler({ConversionNotSupportedException.class, HttpMessageNotWritableException.class})
+    public Result<?> server500(RuntimeException e) {
+        e.printStackTrace();
+        response.setStatus(500);
+        return Result.fail("鏈嶅姟鍣ㄥ紓甯�");
+    }
+
+    /**
+     * 鏍堟孩鍑�
+     */
+    @ExceptionHandler({StackOverflowError.class})
+    public Result<?> requestStackOverflow(StackOverflowError e) {
+        e.printStackTrace();
+        response.setStatus(500);
+        return Result.fail("鏍堟孩鍑哄紓甯�");
+    }
+
+    /**
+     * 闄ゆ暟涓嶈兘涓�0
+     */
+    @ExceptionHandler({ArithmeticException.class})
+    public Result<?> arithmeticException(ArithmeticException e) {
+        e.printStackTrace();
+        response.setStatus(500);
+        return Result.fail("闄ゆ暟涓嶈兘涓�0寮傚父");
+    }
+
+    /**
+     * 鍙傛暟妫�楠�
+     */
+    @ExceptionHandler({MethodArgumentNotValidException.class})
+    public Result<?> methodArgumentNotValidException(MethodArgumentNotValidException e) {
+        List<ObjectError> allErrors = e.getBindingResult().getAllErrors();
+        String message = allErrors.stream().map(s -> s.getDefaultMessage()).collect(Collectors.joining(";"));
+        return Result.fail(message);
+    }
+
+    /** 鍏朵粬閿欒 */
+    /**
+     * 鍏朵粬閿欒
+     */
+    @ExceptionHandler({Exception.class})
+    public Result<?> exception(Exception e) {
+        e.printStackTrace();
+        response.setStatus(500);
+        return Result.fail("缃戠粶杩炴帴澶辫触锛岃閫�鍑哄悗鍐嶈瘯");
+    }
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/mybatis_config/MyBaseMapper.java b/framework/src/main/java/com/yuanchu/mom/mybatis_config/MyBaseMapper.java
new file mode 100644
index 0000000..ce4eb6f
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/mybatis_config/MyBaseMapper.java
@@ -0,0 +1,15 @@
+package com.yuanchu.mom.mybatis_config;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+ * 鑷畾涔夋坊鍔爉ybatis-plus鎵归噺娣诲姞
+ * @param <T>
+ */
+public interface MyBaseMapper <T> extends BaseMapper<T> {
+
+    int insertBatchSomeColumn(List<T> entityList);
+}
+
diff --git a/framework/src/main/java/com/yuanchu/mom/mybatis_config/MyBatisPlusConfig.java b/framework/src/main/java/com/yuanchu/mom/mybatis_config/MyBatisPlusConfig.java
new file mode 100644
index 0000000..95404df
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/mybatis_config/MyBatisPlusConfig.java
@@ -0,0 +1,39 @@
+package com.yuanchu.mom.mybatis_config;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+
+@Configuration
+public class MyBatisPlusConfig {
+
+//     涔愯閿佹彃浠�
+    @Bean
+    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
+        return new OptimisticLockerInterceptor();
+    }
+
+    /**
+     * 寮�鍚壒閲忔坊鍔�
+     * @return
+     */
+    @Bean
+    public MySqlInjector sqlInjector() {
+        return new MySqlInjector();
+    }
+
+    /**
+     * 闇�瑕侀厤缃嫤鎴櫒锛屼笉鐒跺湪AddDevice涓殑total鏃犳硶鑾峰彇鍒�
+     * @return
+     */
+    @Bean
+    public MybatisPlusInterceptor mybatisPlusInterceptor(){
+        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
+        return interceptor;
+    }
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/mybatis_config/MyMetaObjectHandler.java b/framework/src/main/java/com/yuanchu/mom/mybatis_config/MyMetaObjectHandler.java
new file mode 100644
index 0000000..ede59ea
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/mybatis_config/MyMetaObjectHandler.java
@@ -0,0 +1,22 @@
+package com.yuanchu.mom.mybatis_config;
+
+import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
+import org.apache.ibatis.reflection.MetaObject;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+@Component
+public class MyMetaObjectHandler implements MetaObjectHandler {
+    @Override
+    public void insertFill(MetaObject metaObject) {
+        this.strictInsertFill(metaObject, "createTime", Date.class, new Date()); // 璧峰鐗堟湰 3.3.0(鎺ㄨ崘浣跨敤)
+        this.strictInsertFill(metaObject, "updateTime", Date.class, new Date()); // 璧峰鐗堟湰 3.3.0(鎺ㄨ崘浣跨敤)
+    }
+
+    @Override
+    public void updateFill(MetaObject metaObject) {
+        // update鐨勬椂鍊欎娇鐢紝鏇存柊鐨勬椂鍊欏己鍒惰繘琛屽~鍏�
+        this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date()); // 璧峰鐗堟湰 3.3.0(鎺ㄨ崘)
+    }
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/mybatis_config/MySqlInjector.java b/framework/src/main/java/com/yuanchu/mom/mybatis_config/MySqlInjector.java
new file mode 100644
index 0000000..5e79237
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/mybatis_config/MySqlInjector.java
@@ -0,0 +1,24 @@
+package com.yuanchu.mom.mybatis_config;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.core.injector.AbstractMethod;
+import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
+import com.baomidou.mybatisplus.core.metadata.TableInfo;
+import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn;
+
+import java.util.List;
+
+/**
+ * 鎵归噺娣诲姞
+ */
+public class MySqlInjector extends DefaultSqlInjector {
+
+    @Override
+    public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
+        List<AbstractMethod> methodList = super.getMethodList(mapperClass);
+        //澧炲姞鑷畾涔夋柟娉曪紝瀛楁娉ㄨВ涓婁笉绛変簬FieldFill.DEFAULT鐨勫瓧娈垫墠浼氭彃鍏�
+        methodList.add(new InsertBatchSomeColumn(i -> i.getFieldFill() != FieldFill.DEFAULT));
+        return methodList;
+    }
+
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/utils/FileSaveUtil.java b/framework/src/main/java/com/yuanchu/mom/utils/FileSaveUtil.java
new file mode 100644
index 0000000..11332ea
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/utils/FileSaveUtil.java
@@ -0,0 +1,60 @@
+package com.yuanchu.mom.utils;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.tomcat.util.http.fileupload.IOUtils;
+import org.springframework.stereotype.Component;
+
+import java.io.ByteArrayInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+/**
+ * 淇濆瓨鏂囦欢宸ュ叿
+ */
+@Slf4j
+@Component
+public class FileSaveUtil {
+
+    // 鍙杫ml涓殑璺緞 + /
+//    @Value("${file.path}")
+    private String FILE_PATH;
+
+    /**
+     * 瀛樺偍鏂囦欢涓诲嚱鏁�
+     * @param content 鏂囦欢浜岃繘鍒舵祦
+     * @param originalFilename 鏂囦欢鍚嶇О
+     * @return 杩斿洖鏂囦欢鍚嶇О鐢ㄤ簬瀛樺偍鏁版嵁搴�
+     */
+    public String StoreFile(byte[] content, String originalFilename) {
+        // 鐢熸垚闅忔満鍚嶇О锛氭椂闂確闅忔満6浣嶆暟瀛�
+        String FileName = System.currentTimeMillis() + "_" + MyUtil.getNumber(6);
+        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
+        // 鍚嶇О鎷兼帴
+        String fileName = FileName + suffix;
+        // 杩涜瀛樺偍
+        storeFileWithFileName(content, fileName);
+        return fileName;
+    }
+
+    /**
+     * 瀛樺偍鏂囦欢鍑芥暟
+     * @param content 鏂囦欢浜岃繘鍒舵祦
+     * @param fileName 鏂囦欢鍚嶇О
+     */
+    private void storeFileWithFileName(byte[] content, String fileName) {
+        // 瀛樺偍璺緞
+        String path = FILE_PATH + java.io.File.separatorChar;
+        // 鐩綍涓嶅瓨鍦ㄥ垯鍒涘缓
+        java.io.File file = new java.io.File(path);
+        if (!file.exists()) {
+            file.mkdirs();
+        }
+        // 寮�濮嬪瓨鍌�
+        try (FileOutputStream os = new FileOutputStream(path + fileName);
+             ByteArrayInputStream is = new ByteArrayInputStream(content)) {
+             IOUtils.copy(is, os);
+        } catch (IOException e) {
+            MyUtil.PrintLog("瀛樺偍鏂囦欢寮傚父锛�" + e);
+        }
+    }
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/utils/JackSonUtil.java b/framework/src/main/java/com/yuanchu/mom/utils/JackSonUtil.java
new file mode 100644
index 0000000..27ce635
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/utils/JackSonUtil.java
@@ -0,0 +1,131 @@
+package com.yuanchu.mom.utils;
+
+import com.fasterxml.jackson.core.JsonGenerationException;
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+/**
+ * JSON瑙f瀽澶勭悊
+ *
+ * @author 寮犲
+ */
+@Component
+public class JackSonUtil {
+    private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+    private static final ObjectWriter OBJECT_WRITER = OBJECT_MAPPER.writerWithDefaultPrettyPrinter();
+
+    public static void marshal(File file, Object value) throws Exception {
+        try {
+            OBJECT_WRITER.writeValue(file, value);
+        } catch (JsonGenerationException e) {
+            throw new Exception(e);
+        } catch (JsonMappingException e) {
+            throw new Exception(e);
+        } catch (IOException e) {
+            throw new Exception(e);
+        }
+    }
+
+    public static void marshal(OutputStream os, Object value) throws Exception {
+        try {
+            OBJECT_WRITER.writeValue(os, value);
+        } catch (JsonGenerationException e) {
+            throw new Exception(e);
+        } catch (JsonMappingException e) {
+            throw new Exception(e);
+        } catch (IOException e) {
+            throw new Exception(e);
+        }
+    }
+
+    public static String marshal(Object value) throws Exception {
+        try {
+            return OBJECT_WRITER.writeValueAsString(value);
+        } catch (JsonGenerationException e) {
+            throw new Exception(e);
+        } catch (JsonMappingException e) {
+            throw new Exception(e);
+        } catch (IOException e) {
+            throw new Exception(e);
+        }
+    }
+
+    public static byte[] marshalBytes(Object value) throws Exception {
+        try {
+            return OBJECT_WRITER.writeValueAsBytes(value);
+        } catch (JsonGenerationException e) {
+            throw new Exception(e);
+        } catch (JsonMappingException e) {
+            throw new Exception(e);
+        } catch (IOException e) {
+            throw new Exception(e);
+        }
+    }
+
+    public static <T> T unmarshal(File file, Class<T> valueType) throws Exception {
+        try {
+            return OBJECT_MAPPER.readValue(file, valueType);
+        } catch (JsonParseException e) {
+            throw new Exception(e);
+        } catch (JsonMappingException e) {
+            throw new Exception(e);
+        } catch (IOException e) {
+            throw new Exception(e);
+        }
+    }
+
+    public static <T> T unmarshal(InputStream is, Class<T> valueType) throws Exception {
+        try {
+            return OBJECT_MAPPER.readValue(is, valueType);
+        } catch (JsonParseException e) {
+            throw new Exception(e);
+        } catch (JsonMappingException e) {
+            throw new Exception(e);
+        } catch (IOException e) {
+            throw new Exception(e);
+        }
+    }
+
+    /**
+     * 瀛楃涓茶浆瀵硅薄
+     * @param str
+     * @param valueType
+     * @return
+     * @param <T>
+     * @throws Exception
+     */
+    public static <T> T unmarshal(String str, Class<T> valueType) throws Exception {
+        try {
+            return OBJECT_MAPPER.readValue(str, valueType);
+        } catch (JsonParseException e) {
+            throw new Exception(e);
+        } catch (JsonMappingException e) {
+            throw new Exception(e);
+        } catch (IOException e) {
+            throw new Exception(e);
+        }
+    }
+
+    public static <T> T unmarshal(byte[] bytes, Class<T> valueType) throws Exception {
+        try {
+            if (bytes == null) {
+                bytes = new byte[0];
+            }
+            return OBJECT_MAPPER.readValue(bytes, 0, bytes.length, valueType);
+        } catch (JsonParseException e) {
+            throw new Exception(e);
+        } catch (JsonMappingException e) {
+            throw new Exception(e);
+        } catch (IOException e) {
+            throw new Exception(e);
+        }
+    }
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/utils/Jwt.java b/framework/src/main/java/com/yuanchu/mom/utils/Jwt.java
new file mode 100644
index 0000000..8dff28c
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/utils/Jwt.java
@@ -0,0 +1,57 @@
+package com.yuanchu.mom.utils;
+
+import com.auth0.jwt.JWT;
+import com.auth0.jwt.JWTVerifier;
+import com.auth0.jwt.algorithms.Algorithm;
+import com.auth0.jwt.interfaces.DecodedJWT;
+import org.springframework.stereotype.Component;
+
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+@Component
+public class Jwt {
+    private final String SECRET = "value";
+
+    public String createJwt(String name,int id, int time) {
+        HashMap<String, Object> headers = new HashMap<>();
+        Calendar expires = Calendar.getInstance();
+        expires.add(Calendar.MINUTE, time);
+        String jwtToken = JWT.create()
+                // 绗竴閮ㄥ垎Header
+                .withHeader(headers)
+                // 绗簩閮ㄥ垎Payload
+                .withClaim("name", name)
+                .withClaim("id", id)
+                .withExpiresAt(expires.getTime())
+                // 绗笁閮ㄥ垎Signature
+                .sign(Algorithm.HMAC256(SECRET));
+        return jwtToken;
+    }
+
+    public Map<String, String> readJWT(String token) {
+        Map<String, String> map = new HashMap<>();
+        map.put("state", "0");
+        map.put("info", "姝e父");
+        map.put("data", null);
+        // 鍒涘缓涓�涓獙璇佺殑瀵硅薄
+        JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(SECRET)).build();
+        DecodedJWT verify;
+        try {
+            verify = jwtVerifier.verify(token);
+            Map<String, String> maps = new HashMap<>();
+            maps.put("id",verify.getClaim("id").toString());
+            maps.put("name",verify.getClaim("name").toString());
+            map.put("data", JackSonUtil.marshal(maps));
+        } catch (Exception e) {
+            String info = ("" + e).contains("expired") ? "宸茶繃鏈�" : "鏃犳晥绛惧悕";
+            String state = ("" + e).contains("expired") ? "1" : "2";
+            map.put("state", "1");
+            map.put("info", info);
+        }
+        return map;
+    }
+
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/utils/MyUtil.java b/framework/src/main/java/com/yuanchu/mom/utils/MyUtil.java
new file mode 100644
index 0000000..23f54b5
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/utils/MyUtil.java
@@ -0,0 +1,65 @@
+package com.yuanchu.mom.utils;
+
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Random;
+
+@Component
+public class MyUtil<T> {
+
+    /**
+     * 鑷畾涔夎皟璇曞伐鍏风被
+     * @return
+     */
+    public static void PrintLog(String str){
+        // 绫诲悕
+        String className = Thread.currentThread().getStackTrace()[2].getClassName();
+        // 鍑芥暟鍚�
+        String methodName = Thread.currentThread().getStackTrace()[2].getMethodName();
+        System.out.println("\033[1;94m" + className + "-->" + methodName + "-->"  + str + "\033[0m");
+    }
+
+    /**
+     * 鏃ユ湡宸ュ叿绫�
+     * @return
+     */
+    public static String MyDateFormat(){
+        //鑾峰彇鏃ユ湡
+        //瀵� import java.util.Date; 涓嬬殑鍖�
+        Date date = new Date();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+        return sdf.format(date);
+    }
+
+    /**
+     * 鑾峰彇闅忔満鍔犲瘑鐩�
+     * @param n 浣嶆暟
+     * @return 杩斿洖闅忔満鍔犲瘑鐩�
+     */
+    public static String getSalt(int n) {
+        char[] chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567890!@#$%^&*()+-=/[];~.".toCharArray();
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < n; i++) {
+            char c = chars[new Random().nextInt(chars.length)];
+            sb.append(c);
+        }
+        return sb.toString();
+    }
+
+    /**
+     * 鑾峰彇闅忔満鏁板瓧
+     * @param n 浣嶆暟
+     * @return 杩斿洖闅忔満鍊�
+     */
+    public static String getNumber(int n) {
+        char[] chars = "1234567890".toCharArray();
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < n; i++) {
+            char c = chars[new Random().nextInt(chars.length)];
+            sb.append(c);
+        }
+        return sb.toString();
+    }
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/utils/RedisUtil.java b/framework/src/main/java/com/yuanchu/mom/utils/RedisUtil.java
new file mode 100644
index 0000000..00206d3
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/utils/RedisUtil.java
@@ -0,0 +1,622 @@
+package com.yuanchu.mom.utils;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+@Component
+public class RedisUtil {
+    private static RedisTemplate<String, Object> redisTemplate;
+    public static RedisTemplate<String, Object> getRedisTemplate() {
+        return redisTemplate;
+    }
+    @Autowired
+    private RedisUtil(RedisConnectionFactory redisConnectionFactory){
+        // redisTemplate妯℃澘鍒濆鍖�
+        redisTemplate = new RedisTemplate<>();
+        redisTemplate.setConnectionFactory(redisConnectionFactory);
+
+        // 灏嗗璞″簭鍒楀寲
+        ObjectMapper om=new ObjectMapper();
+        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+        om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,
+                ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
+
+        // String鐨勫簭鍒楀寲
+        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
+        // json搴忓垪鍖栭厤缃�
+        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer=new Jackson2JsonRedisSerializer<>(Object.class);
+        jackson2JsonRedisSerializer.setObjectMapper(om);
+        //key閲囩敤String鐨勫簭鍒楀寲鏂瑰紡
+        redisTemplate.setKeySerializer(stringRedisSerializer);
+        //hash鐨刱ey涔熼噰鐢⊿tring 鐨勫簭鍒楀寲鏂瑰紡
+        redisTemplate.setHashKeySerializer(stringRedisSerializer);
+        //value鐨勫簭鍒楀寲鏂瑰紡閲囩敤jackson鐨勬柟寮�
+        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
+//        //hash鐨剉alue搴忓垪鍖栨柟寮忛噰鐢╦ackson
+        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
+        redisTemplate.afterPropertiesSet();
+    }
+
+    // =============================common============================
+    /**
+     * 鎸囧畾缂撳瓨澶辨晥鏃堕棿
+     * @param key  閿�
+     * @param time 鏃堕棿(绉�)
+     */
+    public static boolean expire(String key, long time) {
+        try {
+            if (time > 0) {
+                redisTemplate.expire(key, time, TimeUnit.SECONDS);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 鏍规嵁key 鑾峰彇杩囨湡鏃堕棿
+     * @param key 閿� 涓嶈兘涓簄ull
+     * @return 鏃堕棿(绉�) 杩斿洖0浠h〃涓烘案涔呮湁鏁�
+     */
+    public static long getExpire(String key) {
+        return redisTemplate.getExpire(key, TimeUnit.SECONDS);
+    }
+
+
+    /**
+     * 鍒ゆ柇key鏄惁瀛樺湪
+     * @param key 閿�
+     * @return true 瀛樺湪 false涓嶅瓨鍦�
+     */
+    public static boolean hasKey(String key) {
+        try {
+            return redisTemplate.hasKey(key);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+
+    /**
+     * 鍒犻櫎缂撳瓨
+     * @param key 鍙互浼犱竴涓�� 鎴栧涓�
+     */
+//    @SuppressWarnings("unchecked")
+    public static void del(String... key) {
+        if (key != null && key.length > 0) {
+            if (key.length == 1) {
+                redisTemplate.delete(key[0]);
+            } else {
+                redisTemplate.delete(Arrays.asList(key));
+//                redisTemplate.delete(CollectionUtils.arrayToList(key));
+            }
+        }
+    }
+
+    /**
+     * 鑾峰彇骞跺垹闄ょ紦瀛�
+     * @param key 閿�
+     * @return 鍊�
+     */
+    public static Object getAndDelete(String key) {
+        try{
+            return key == null ? null : get(key);
+        }finally {
+            del(key);
+        }
+    }
+
+    // ============================String=============================
+
+    /**
+     * 鏅�氱紦瀛樿幏鍙�
+     * @param key 閿�
+     * @return 鍊�
+     */
+    public static Object get(String key) {
+        return key == null ? null : redisTemplate.opsForValue().get(key);
+    }
+
+    /**
+     * 鏅�氱紦瀛樻斁鍏�
+     * @param key   閿�
+     * @param value 鍊�
+     * @return true鎴愬姛 false澶辫触
+     */
+
+    public static boolean set(String key, Object value) {
+        try {
+            redisTemplate.opsForValue().set(key, value);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+
+    /**
+     * 鏅�氱紦瀛樻斁鍏ュ苟璁剧疆鏃堕棿
+     * @param key   閿�
+     * @param value 鍊�
+     * @param time  鏃堕棿(绉�) time瑕佸ぇ浜�0 濡傛灉time灏忎簬绛変簬0 灏嗚缃棤闄愭湡
+     * @return true鎴愬姛 false 澶辫触
+     */
+
+    public static boolean set(String key, Object value, long time) {
+        try {
+            if (time > 0) {
+                redisTemplate.opsForValue().set(key, value, time, TimeUnit.MINUTES);
+            } else {
+                // 鍙慨鏀瑰弬鏁颁笉淇敼ttl
+                redisTemplate.opsForValue().set(key, value, 0);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+
+    /**
+     * 閫掑
+     * @param key   閿�
+     * @param delta 瑕佸鍔犲嚑(澶т簬0)
+     */
+    public static long incr(String key, long delta) {
+        if (delta < 0) {
+            throw new RuntimeException("閫掑鍥犲瓙蹇呴』澶т簬0");
+        }
+        return redisTemplate.opsForValue().increment(key, delta);
+    }
+
+
+    /**
+     * 閫掑噺
+     * @param key   閿�
+     * @param delta 瑕佸噺灏戝嚑(灏忎簬0)
+     */
+    public static long decr(String key, long delta) {
+        if (delta < 0) {
+            throw new RuntimeException("閫掑噺鍥犲瓙蹇呴』澶т簬0");
+        }
+        return redisTemplate.opsForValue().increment(key, -delta);
+    }
+
+
+    // ================================Map=================================
+
+    /**
+     * HashGet
+     * @param key  閿� 涓嶈兘涓簄ull
+     * @param item 椤� 涓嶈兘涓簄ull
+     */
+    public static Object hget(String key, String item) {
+        return redisTemplate.opsForHash().get(key, item);
+    }
+
+    /**
+     * 鑾峰彇hashKey瀵瑰簲鐨勬墍鏈夐敭鍊�
+     * @param key 閿�
+     * @return 瀵瑰簲鐨勫涓敭鍊�
+     */
+    public static Map<Object, Object> hmget(String key) {
+        return redisTemplate.opsForHash().entries(key);
+    }
+
+    /**
+     * HashSet
+     * @param key 閿�
+     * @param map 瀵瑰簲澶氫釜閿��
+     */
+    public static boolean hmset(String key, Map<String, Object> map) {
+        try {
+            redisTemplate.opsForHash().putAll(key, map);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+
+    /**
+     * HashSet 骞惰缃椂闂�
+     * @param key  閿�
+     * @param map  瀵瑰簲澶氫釜閿��
+     * @param time 鏃堕棿(绉�)
+     * @return true鎴愬姛 false澶辫触
+     */
+    public static boolean hmset(String key, Map<String, Object> map, long time) {
+        try {
+            if (time > 0) {
+                redisTemplate.opsForHash().putAll(key, map);
+                expire(key, time);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+
+    /**
+     * 鍚戜竴寮爃ash琛ㄤ腑鏀惧叆鏁版嵁,濡傛灉涓嶅瓨鍦ㄥ皢鍒涘缓
+     *
+     * @param key   閿�
+     * @param item  椤�
+     * @param value 鍊�
+     * @return true 鎴愬姛 false澶辫触
+     */
+    public static boolean hset(String key, String item, Object value) {
+        try {
+            redisTemplate.opsForHash().put(key, item, value);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 鍚戜竴寮爃ash琛ㄤ腑鏀惧叆鏁版嵁,濡傛灉涓嶅瓨鍦ㄥ皢鍒涘缓
+     *
+     * @param key   閿�
+     * @param item  椤�
+     * @param value 鍊�
+     * @param time  鏃堕棿(绉�) 娉ㄦ剰:濡傛灉宸插瓨鍦ㄧ殑hash琛ㄦ湁鏃堕棿,杩欓噷灏嗕細鏇挎崲鍘熸湁鐨勬椂闂�
+     * @return true 鎴愬姛 false澶辫触
+     */
+    public static boolean hset(String key, String item, Object value, long time) {
+        try {
+            if (time > 0) {
+                redisTemplate.opsForHash().put(key, item, value);
+                expire(key, time);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 鍒犻櫎hash琛ㄤ腑鐨勫��
+     *
+     * @param key  閿� 涓嶈兘涓簄ull
+     * @param item 椤� 鍙互浣垮涓� 涓嶈兘涓簄ull
+     */
+    public static void hdel(String key, Object... item) {
+        redisTemplate.opsForHash().delete(key, item);
+    }
+
+
+    /**
+     * 鍒ゆ柇hash琛ㄤ腑鏄惁鏈夎椤圭殑鍊�
+     *
+     * @param key  閿� 涓嶈兘涓簄ull
+     * @param item 椤� 涓嶈兘涓簄ull
+     * @return true 瀛樺湪 false涓嶅瓨鍦�
+     */
+    public static boolean hHasKey(String key, String item) {
+        return redisTemplate.opsForHash().hasKey(key, item);
+    }
+
+
+    /**
+     * hash閫掑 濡傛灉涓嶅瓨鍦�,灏变細鍒涘缓涓�涓� 骞舵妸鏂板鍚庣殑鍊艰繑鍥�
+     *
+     * @param key  閿�
+     * @param item 椤�
+     * @param by   瑕佸鍔犲嚑(澶т簬0)
+     */
+    public static double hincr(String key, String item, double by) {
+        return redisTemplate.opsForHash().increment(key, item, by);
+    }
+
+
+    /**
+     * hash閫掑噺
+     *
+     * @param key  閿�
+     * @param item 椤�
+     * @param by   瑕佸噺灏戣(灏忎簬0)
+     */
+    public static double hdecr(String key, String item, double by) {
+        return redisTemplate.opsForHash().increment(key, item, -by);
+    }
+
+
+    // ============================set=============================
+
+    /**
+     * 鏍规嵁key鑾峰彇Set涓殑鎵�鏈夊��
+     * @param key 閿�
+     */
+    public static Set<Object> sGet(String key) {
+        try {
+            return redisTemplate.opsForSet().members(key);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+
+    /**
+     * 鏍规嵁value浠庝竴涓猻et涓煡璇�,鏄惁瀛樺湪
+     *
+     * @param key   閿�
+     * @param value 鍊�
+     * @return true 瀛樺湪 false涓嶅瓨鍦�
+     */
+    public static boolean sHasKey(String key, Object value) {
+        try {
+            return redisTemplate.opsForSet().isMember(key, value);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+
+    /**
+     * 灏嗘暟鎹斁鍏et缂撳瓨
+     *
+     * @param key    閿�
+     * @param values 鍊� 鍙互鏄涓�
+     * @return 鎴愬姛涓暟
+     */
+    public static long sSet(String key, Object... values) {
+        try {
+            return redisTemplate.opsForSet().add(key, values);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+
+    /**
+     * 灏唖et鏁版嵁鏀惧叆缂撳瓨
+     *
+     * @param key    閿�
+     * @param time   鏃堕棿(绉�)
+     * @param values 鍊� 鍙互鏄涓�
+     * @return 鎴愬姛涓暟
+     */
+    public static long sSetAndTime(String key, long time, Object... values) {
+        try {
+            Long count = (long)values.length;
+            if (time > 0) {
+                count = redisTemplate.opsForSet().add(key, values);
+                expire(key, time);
+            }
+            return count;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+
+    /**
+     * 鑾峰彇set缂撳瓨鐨勯暱搴�
+     *
+     * @param key 閿�
+     */
+    public static long sGetSetSize(String key) {
+        try {
+            return redisTemplate.opsForSet().size(key);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+
+    /**
+     * 绉婚櫎鍊间负value鐨�
+     *
+     * @param key    閿�
+     * @param values 鍊� 鍙互鏄涓�
+     * @return 绉婚櫎鐨勪釜鏁�
+     */
+
+    public static long setRemove(String key, Object... values) {
+        try {
+            return redisTemplate.opsForSet().remove(key, values);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+    // ===============================list=================================
+
+    /**
+     * 鑾峰彇list缂撳瓨鐨勫唴瀹�
+     *
+     * @param key   閿�
+     * @param start 寮�濮�
+     * @param end   缁撴潫 0 鍒� -1浠h〃鎵�鏈夊��
+     */
+    public static List<Object> lGet(String key, long start, long end) {
+        try {
+            return redisTemplate.opsForList().range(key, start, end);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+
+    /**
+     * 鑾峰彇list缂撳瓨鐨勯暱搴�
+     *
+     * @param key 閿�
+     */
+    public static long lGetListSize(String key) {
+        try {
+            return redisTemplate.opsForList().size(key);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+
+    /**
+     * 閫氳繃绱㈠紩 鑾峰彇list涓殑鍊�
+     *
+     * @param key   閿�
+     * @param index 绱㈠紩 index>=0鏃讹紝 0 琛ㄥご锛�1 绗簩涓厓绱狅紝渚濇绫绘帹锛沬ndex<0鏃讹紝-1锛岃〃灏撅紝-2鍊掓暟绗簩涓厓绱狅紝渚濇绫绘帹
+     */
+    public static Object lGetIndex(String key, long index) {
+        try {
+            return redisTemplate.opsForList().index(key, index);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+
+    /**
+     * 灏唋ist鏀惧叆缂撳瓨
+     *
+     * @param key   閿�
+     * @param value 鍊�
+     */
+    public static boolean lSet(String key, Object value) {
+        try {
+            redisTemplate.opsForList().rightPush(key, value);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+
+    /**
+     * 灏唋ist鏀惧叆缂撳瓨
+     * @param key   閿�
+     * @param value 鍊�
+     * @param time  鏃堕棿(绉�)
+     */
+    public static boolean lSet(String key, Object value, long time) {
+        try {
+            if (time > 0) {
+                redisTemplate.opsForList().rightPush(key, value);
+                expire(key, time);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+
+    }
+
+
+    /**
+     * 灏唋ist鏀惧叆缂撳瓨
+     *
+     * @param key   閿�
+     * @param value 鍊�
+     * @return true 瀛樻斁鎴愬姛 false瀛樻斁澶辫触
+     */
+    public static boolean lSet(String key, List<Object> value) {
+        try {
+            redisTemplate.opsForList().rightPushAll(key, value);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+
+    }
+
+
+    /**
+     * 灏唋ist鏀惧叆缂撳瓨
+     *
+     * @param key   閿�
+     * @param value 鍊�
+     * @param time  鏃堕棿(绉�)
+     * @return true 瀛樻斁鎴愬姛 false瀛樻斁澶辫触
+     */
+    public static boolean lSet(String key, List<Object> value, long time) {
+        try {
+            if (time > 0) {
+                redisTemplate.opsForList().rightPushAll(key, value);
+                expire(key, time);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+
+    /**
+     * 鏍规嵁绱㈠紩淇敼list涓殑鏌愭潯鏁版嵁
+     *
+     * @param key   閿�
+     * @param index 绱㈠紩
+     * @param value 鍊�
+     * @return true 瀛樻斁鎴愬姛 false瀛樻斁澶辫触
+     */
+
+    public static boolean lUpdateIndex(String key, long index, Object value) {
+        try {
+            redisTemplate.opsForList().set(key, index, value);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+
+    /**
+     * 绉婚櫎N涓�间负value
+     *
+     * @param key   閿�
+     * @param count 绉婚櫎澶氬皯涓�
+     * @param value 鍊�
+     * @return 绉婚櫎鐨勪釜鏁�
+     */
+
+    public static long lRemove(String key, long count, Object value) {
+        try {
+            return redisTemplate.opsForList().remove(key, count, value);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+}
+
diff --git a/framework/src/main/java/com/yuanchu/mom/vo/Result.java b/framework/src/main/java/com/yuanchu/mom/vo/Result.java
new file mode 100644
index 0000000..77333a4
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/vo/Result.java
@@ -0,0 +1,56 @@
+package com.yuanchu.mom.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import javax.servlet.http.HttpServletResponse;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class Result<T> {
+
+    @ApiModelProperty(value = "鍝嶅簲鐮侊細200鎴愬姛锛�201澶辫触")
+    private int code;
+
+    @ApiModelProperty(value = "鍝嶅簲娑堟伅")
+    private String message;
+
+    @ApiModelProperty(value = "鍝嶅簲鍙傛暟")
+    private T data;
+
+    public static <T> Result<T> success(){
+        return new Result<>(200, "success",null);
+    }
+
+    public static <T> Result<T> success(String message){
+        return new Result<>(200, message,null);
+    }
+
+    public static <T> Result<T> success(T data){
+        return new Result<>(200, "success",data);
+    }
+
+    public static <T> Result<T> success(String message, T data){
+        return new Result<>(200, message,data);
+    }
+
+    public static <T> Result<T> fail(){
+        return new Result<>(201, "fail", null);
+    }
+
+    public static <T> Result<T> fail(String message){
+        return new Result<>(201, message, null);
+    }
+
+    public static <T> Result<T> fail(Integer code){
+        return new Result<>(code, "fail", null);
+    }
+
+    public static <T> Result<T> fail(Integer code, String message){
+        return new Result<>(code, message, null);
+    }
+}
diff --git a/inspect-server/.gitignore b/inspect-server/.gitignore
new file mode 100644
index 0000000..549e00a
--- /dev/null
+++ b/inspect-server/.gitignore
@@ -0,0 +1,33 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
diff --git a/inspect-server/pom.xml b/inspect-server/pom.xml
new file mode 100644
index 0000000..800b39b
--- /dev/null
+++ b/inspect-server/pom.xml
@@ -0,0 +1,55 @@
+<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>mom</artifactId>
+        <groupId>com.yuanchu.mom</groupId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>inspect-server</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>inspect-server</name>
+    <description>inspect-server</description>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <!--宸ュ叿妯″潡-->
+        <dependency>
+            <groupId>com.yuanchu.mom</groupId>
+            <artifactId>framework</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.yuanchu.mom</groupId>
+            <artifactId>user-server</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.yuanchu.mom</groupId>
+            <artifactId>standard-server</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.vaadin.external.google</groupId>
+            <artifactId>android-json</artifactId>
+            <version>0.0.20131108.vaadin1</version>
+            <scope>compile</scope>
+        </dependency>
+
+        <!--鐢ㄦ埛妯″潡-->
+        <dependency>
+            <groupId>com.yuanchu.mom</groupId>
+            <artifactId>user-server</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+
+        <!--鏍囧噯妯″潡-->
+        <dependency>
+            <groupId>com.yuanchu.mom</groupId>
+            <artifactId>standard-server</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/controller/FinishedInspectController.java b/inspect-server/src/main/java/com/yuanchu/mom/controller/FinishedInspectController.java
new file mode 100644
index 0000000..4b06a6f
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/controller/FinishedInspectController.java
@@ -0,0 +1,118 @@
+package com.yuanchu.mom.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.pojo.FinishedInspect;
+import com.yuanchu.mom.service.*;
+import com.yuanchu.mom.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.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-08-01
+ */
+@Api(tags = "QMS绠$悊-->鎴愬搧妫�楠�")
+@RestController
+@RequestMapping("/finished-inspect")
+public class FinishedInspectController {
+
+    @Autowired
+    private FinishedInspectService finishedInspectService;
+
+    @Autowired
+    private UserService userService;
+
+    @Autowired
+    private SpecificationsService specificationsService;
+
+    @Autowired
+    private MaterialService materialService;
+
+    @ApiOperation(value = "鏂板鎸夐挳-->1銆佹柊澧炶繃绋嬫楠屽崟")
+    @PostMapping("/add_process_inspection_sheet")
+    public Result<?> addProcessInspectionSheet(@Validated @RequestBody FinishedInspect finishedInspect){
+        Integer isInsertSuccess = finishedInspectService.addProcessInspectionSheet(finishedInspect);
+        if (isInsertSuccess == 1){
+            return Result.success("鏂板鎴愬姛锛�");
+        }
+        return Result.fail("鏂板澶辫触锛�");
+    }
+
+    @ApiOperation(value = "鏂板鎸夐挳-->1銆佹柊澧炶繃绋嬫楠屽崟-->涓绘満宸ヤ笅鎷夋")
+    @GetMapping("/list_user")
+    public Result<?> selectUserIdAndName(){
+        List<Map<String, Object>> maps = userService.listUserIdAndName();
+        return Result.success(maps);
+    }
+
+    @ApiOperation(value = "鏂板鎸夐挳-->1銆佹柊澧炶繃绋嬫楠屽崟-->2銆佽鏍煎瀷鍙蜂笅鎷夋锛氭牴鎹」鐩甀D鏌ヨ")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "materialId",value = "椤圭洰鍚嶇ОID",dataTypeClass  = Integer.class,required = true)
+    })
+    @GetMapping("/list_specification")
+    public Result<?> selectSpecificationIdAndName(Integer materialId){
+        List<Map<String, Object>> maps = specificationsService.selectSpecificationIdAndName(materialId);
+        return Result.success(maps);
+    }
+
+    @ApiOperation(value = "鏂板鎸夐挳-->1銆佹柊澧炶繃绋嬫楠屽崟-->1銆侀」鐩悕绉颁笅鎷夋")
+    @GetMapping("/list_material")
+    public Result<?> selectMaterialIdAndNameAndCode(){
+        List<Map<String, Object>> maps = materialService.selectMaterialIdAndNameAndCode();
+        return Result.success(maps);
+    }
+
+    @ApiOperation(value = "鏂板鎸夐挳-->3銆佹楠岀粨璁�")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "finishedInspectId",value = "妫�楠屽崟Id",dataTypeClass  = Integer.class,required = true),
+            @ApiImplicitParam(name = "result",value = "妫�楠岀粨璁�",dataTypeClass  = Integer.class,required = true),
+    })
+    @PostMapping("/inspection_conclusion")
+    public Result<?> inspectionConclusion(Integer finishedInspectId, Integer result){
+        Integer isInsertSuccess = finishedInspectService.inspectionConclusion(finishedInspectId, result);
+        if (isInsertSuccess == 1){
+            return Result.success("涓婃姤鎴愬姛锛�");
+        }
+        return Result.fail("涓婃姤澶辫触锛�");
+    }
+
+    @ApiOperation(value = "4銆佷富椤靛垎椤�")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "pageNo", value = "鏉℃暟/椤�", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "pageSize", value = "椤垫暟", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "inspectResult", value = "妫�楠岀粨鏋�", dataTypeClass = Integer.class),
+            @ApiImplicitParam(name = "inspectDate", value = "妫�楠屾棩鏈�", dataTypeClass = Date.class, dataType = "date"),
+            @ApiImplicitParam(name = "inspectUsername", value = "涓绘満宸�", dataTypeClass = String.class)
+    })
+    @GetMapping("/list_page")
+    public Result<?> selectFinishedInspectPage(Integer pageNo, Integer pageSize, Integer inspectResult, String inspectDate, String inspectUsername){
+        IPage<Map<String, Object>> page = finishedInspectService.selectFinishedInspectPage(new Page<Object>(pageNo, pageSize), inspectResult, inspectDate, inspectUsername);
+        Map<String, Object> map = new HashMap<>();
+        map.put("total", page.getTotal());
+        map.put("row", page.getRecords());
+        return Result.success(map);
+    }
+
+    @ApiOperation(value = "4銆佷富椤靛垎椤�-->涓绘満宸ユ潯浠舵煡璇笅鎷夋")
+    @GetMapping("/page_user")
+    public Result<?> selectPageUserIdAndName(){
+        List<Map<String, Object>> maps = userService.listUserIdAndName();
+        return Result.success(maps);
+    }
+}
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/controller/InspectUnacceptedController.java b/inspect-server/src/main/java/com/yuanchu/mom/controller/InspectUnacceptedController.java
new file mode 100644
index 0000000..e5682a2
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/controller/InspectUnacceptedController.java
@@ -0,0 +1,52 @@
+package com.yuanchu.mom.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.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.*;
+import com.yuanchu.mom.service.InspectUnacceptedService;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 涓嶅悎鏍煎搧妫�楠岃〃(InspectUnaccepted)琛ㄦ帶鍒跺眰
+ *
+ * @author zss
+ * @since 2023-08-07 10:04:01
+ */
+@Api(tags = "QMS绠$悊-->涓嶅悎鏍煎搧")
+@RestController
+@RequestMapping("/inspectUnaccepted")
+public class InspectUnacceptedController {
+
+    @Autowired
+    private InspectUnacceptedService inspectUnacceptedService;
+
+
+    @ApiOperation(value = "鏌ヨ鍘熸潗鏂欎笉鍚堟牸鍝佹楠屽崟鍒楄〃")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "pageSize",value = "椤垫暟",dataTypeClass  = Integer.class,required = true),
+            @ApiImplicitParam(name = "countSize",value = "鏉℃暟/椤�",dataTypeClass  = Integer.class,required = true),
+            @ApiImplicitParam(name = "formTime",value = "鏉ユ枡鏃ユ湡",dataTypeClass  = String.class),
+            @ApiImplicitParam(name = "dealState",value = "澶勭悊鐘舵��(涓虹┖=鍏ㄩ儴)",dataTypeClass  = Integer.class),
+            @ApiImplicitParam(name = "supplier",value = "渚涘簲鍟�(涓虹┖=鍏ㄩ儴)",dataTypeClass  = String.class),
+            @ApiImplicitParam(name = "type",value = "绫诲瀷(涓虹┖=鍘熸潗鏂�2)",dataTypeClass  = Integer.class)
+    })
+    @GetMapping("/selectUnRawInspectsList")
+    public Result selectUnRawInspectsList(int pageSize, int countSize, String formTime, Integer dealState,String supplier,Integer type){
+        IPage<Map<String, Object>> inspectionPage = inspectUnacceptedService.selectUnRawInspectsList(new Page<Object>(pageSize, countSize), formTime,dealState,supplier,type);
+        Map<String, Object> map = new HashMap<>();
+        map.put("total", inspectionPage.getTotal());
+        map.put("row", inspectionPage.getRecords());
+        return Result.success(map);
+    }
+
+}
+
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/controller/InspectionItemController.java b/inspect-server/src/main/java/com/yuanchu/mom/controller/InspectionItemController.java
new file mode 100644
index 0000000..e77f84b
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/controller/InspectionItemController.java
@@ -0,0 +1,66 @@
+package com.yuanchu.mom.controller;
+
+import com.yuanchu.mom.pojo.dto.InspectionItemDto;
+import com.yuanchu.mom.pojo.dto.UpdateInspectionItemDto;
+import com.yuanchu.mom.service.InspectionItemService;
+import com.yuanchu.mom.utils.JackSonUtil;
+import com.yuanchu.mom.utils.Jwt;
+
+import com.yuanchu.mom.vo.Result;
+import io.swagger.annotations.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-08-01
+ */
+@Api(tags = "QMS绠$悊-->鎴愬搧妫�楠�")
+@RestController
+@RequestMapping("/inspection-item")
+public class InspectionItemController {
+
+    @Autowired
+    private InspectionItemService inspectionItemService;
+
+    @Autowired
+    private Jwt jwt;
+
+    @ApiOperation(value = "鏂板鎸夐挳-->2銆佹煡璇㈡墍鏈夋楠岄」鐩�")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "finishInspectId",value = "鎴愬搧妫�楠屽崟Id",dataTypeClass  = Integer.class,required = true)
+    })
+    @GetMapping("/list_user")
+    public Result<?> selectInspectionItem(Integer finishInspectId){
+        List<InspectionItemDto> inspectionItemDto = inspectionItemService.selectInspectionItem(finishInspectId);
+        return Result.success(inspectionItemDto);
+    }
+
+    @ApiOperation(value = "鏂板鎸夐挳-->2銆佹楠岄」鐩�-->澶卞幓鐒︾偣鍙戣捣璇ヨ姹�")
+    @PostMapping("/lose_focus_update")
+    public Result<?> addInspectionItem(@RequestHeader("token")String token, @RequestBody UpdateInspectionItemDto updateInspectionItemDto) throws Exception {
+        Map<String, String> usernameMessage = jwt.readJWT(token);
+        Map<String, Object> usernameAndId = JackSonUtil.unmarshal(usernameMessage.get("data"), Map.class);
+        String name = usernameAndId.get("name").toString().replaceAll("\"", "");
+        Integer isInsertSuccess = inspectionItemService.addProcessInspectionSheet(name, updateInspectionItemDto);
+        Map<String, Object> map = new HashMap<>();
+        map.put("result", isInsertSuccess);
+        map.put("username", name);
+        return Result.success(map);
+    }
+
+    @ApiOperation(value = "鏂板鎸夐挳-->2銆佹楠岄」鐩�-->璇曢獙璁惧涓嬫媺妗�")
+    @GetMapping("/list_device")
+    public Result<?> selectDeviceIdAndName(){
+        List<Map<String, Object>> maps = inspectionItemService.selectDeviceIdAndName();
+        return Result.success(maps);
+    }
+}
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/controller/RawInsProductController.java b/inspect-server/src/main/java/com/yuanchu/mom/controller/RawInsProductController.java
new file mode 100644
index 0000000..a738a85
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/controller/RawInsProductController.java
@@ -0,0 +1,67 @@
+package com.yuanchu.mom.controller;
+
+import com.yuanchu.mom.pojo.RawInsProduct;
+import com.yuanchu.mom.service.DeviceService;
+import com.yuanchu.mom.utils.Jwt;
+import com.yuanchu.mom.utils.MyUtil;
+import com.yuanchu.mom.vo.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import com.yuanchu.mom.service.RawInsProductService;
+
+import javax.annotation.Resource;
+import java.util.Map;
+
+/**
+ * 鍘熸潗鏂欑敵璇峰崟涓殑椤圭洰鍒楄〃(RawInsProduct)琛ㄦ帶鍒跺眰
+ *
+ * @author zss
+ * @since 2023-08-01 13:52:30
+ */
+@Api(tags = "QMS绠$悊-->鍘熸潗鏂欐楠�-->妫�楠岄」鐩�")
+@RestController
+@RequestMapping("/rawInsProduct")
+public class RawInsProductController {
+
+    @Autowired
+    private RawInsProductService rawInsProductService;
+
+    @Resource
+    DeviceService deviceService;
+
+    @Resource
+    Jwt jwt;
+
+    @ApiOperation(value = "鏌ヨ鎵�鏈夎澶�")
+    @GetMapping("/selectDevice")
+    public Result selectDevice() {
+        return Result.success(deviceService.selectDevice());
+    }
+
+    @ApiOperation("閫夋嫨璁惧淇℃伅")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "id", value = "璁惧ID", dataTypeClass = Integer.class, required = true),
+    })
+    @GetMapping("/selectDeviceById")
+    public Result selectDeviceById(Integer id) {
+        return Result.success( deviceService.getDeviceNameById(id));
+    }
+
+
+    @ApiOperation(value = "鏇存柊妫�楠岄」鐩�")
+    @PostMapping("/updaterawInsProduct")
+    public Result updaterawInsProduct(@RequestHeader("token") String token, @RequestBody RawInsProduct rawInsProduct) throws Exception {
+        Map<String, String> map = jwt.readJWT(token);
+        String data = map.get("data");
+        JSONObject jsonObject = new JSONObject(data);
+        int userId = Integer.parseInt(jsonObject.getString("id"));
+        rawInsProductService.updaterawInsProduct(userId,rawInsProduct);
+        return Result.success();
+    }
+}
+
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/controller/RawInspectController.java b/inspect-server/src/main/java/com/yuanchu/mom/controller/RawInspectController.java
new file mode 100644
index 0000000..c52c933
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/controller/RawInspectController.java
@@ -0,0 +1,122 @@
+package com.yuanchu.mom.controller;
+
+
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.yuanchu.mom.pojo.RawInspect;
+import com.yuanchu.mom.pojo.vo.RawInsProductVo;
+import com.yuanchu.mom.pojo.vo.RawInspectVo;
+import com.yuanchu.mom.service.*;
+import com.yuanchu.mom.utils.Jwt;
+import com.yuanchu.mom.utils.MyUtil;
+import com.yuanchu.mom.vo.Result;
+import io.swagger.annotations.*;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+
+@RestController
+@RequestMapping("/rawInspect")
+@Api(tags = "QMS绠$悊-->鍘熸潗鏂欐楠�")
+public class RawInspectController {
+
+    @Autowired
+    RawInspectService rawInspectService;
+
+    @Resource
+    Jwt jwt;
+
+    @Resource
+    MaterialService materialService;
+
+    @Resource
+    SpecificationsService specificationsService;
+
+    @ApiOperation(value = "鏌ヨ鍘熸潗鏂欐楠屽崟鍒楄〃")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "pageSize", value = "椤垫暟", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "countSize", value = "鏉℃暟/椤�", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "formTime", value = "鏉ユ枡鏃ユ湡", dataTypeClass = String.class),
+            @ApiImplicitParam(name = "createTime", value = "鎶ユ鏃ユ湡", dataTypeClass = String.class),
+            @ApiImplicitParam(name = "insState", value = "妫�娴嬬姸鎬�: 鍏ㄩ儴榛樿2", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "judgeState", value = "鍚堟牸鐘舵��: 鍏ㄩ儴榛樿2", dataTypeClass = Integer.class, required = true),
+    })
+    @PostMapping("/selectRawInspectsList")
+    public Result selectRawInspectsList(Integer pageSize, Integer countSize, String formTime, String createTime, Integer insState, Integer judgeState) {
+        return Result.success(rawInspectService.selectRawInspectsList(pageSize, countSize, formTime, createTime, insState, judgeState));
+    }
+
+    @ApiOperation(value = "鏍规嵁妫�楠屽崟id鏌ヨ鍘熸潗鏂欐楠屽崟璇︽儏")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "id", value = "妫�楠屽崟id", dataTypeClass = Integer.class, required = true)
+    })
+    @GetMapping("/selectRawInspectsListById/{id}")
+    public Result selectRawInspectsListById(@PathVariable Integer id) {
+        return Result.success(rawInspectService.selectRawInspectsListById(id));
+    }
+
+    @ApiOperation(value = "涓婃姤(鏇存柊妫�楠岀姸鎬�)")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "id", value = "妫�楠屽崟id", dataTypeClass = Integer.class, required = true)
+    })
+    @PostMapping("/updateRawInspectsById/{id}")
+    public Result updateRawInspectsById(@PathVariable Integer id) {
+        //濡傛灉宸茬粡涓婃姤浜嗕笉鑳藉啀涓�娆′笂鎶�
+        RawInspect rawInspect = rawInspectService.getById(id);
+        if (rawInspect.getInsState() == 1) {
+            return Result.fail("宸茬粡涓婃姤杩囦簡,涓嶈兘鍐嶆涓婃姤!");
+        }
+        return Result.success(rawInspectService.updateRawInspectsById(id));
+    }
+
+    @ApiOperation(value = "鏌ヨ鎵�鏈夊師鏉愭枡淇℃伅")
+    @GetMapping("/selectMaterial")
+    public Result selectMaterial() {
+        return Result.success(materialService.selectMaterial());
+    }
+
+    @ApiOperation(value = "閫夋嫨鐗╂枡鍚嶇О鏌ヨ鐗╂枡淇℃伅(鐗╂枡id鍜岀紪鐮�)")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "name", value = "鍘熸潗鏂欏悕绉�(鐗╂枡鍚嶇О)", dataTypeClass = String.class, required = true)
+    })
+    @GetMapping("/selectMcodeId")
+    public Result selectMcodeId(String name) {
+        return Result.success(materialService.selectMcodeId(name));
+    }
+
+    @ApiOperation(value = "閫夋嫨鐗╂枡缂栫爜(鑾峰彇鐗╂枡瑙勬牸id.鍚嶇О鍜屽瀷鍙峰悕绉�)")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "name", value = "鍘熸潗鏂欏悕绉�(鐗╂枡鍚嶇О)", dataTypeClass = String.class, required = true),
+            @ApiImplicitParam(name = "code", value = "鍘熸潗鏂欑紪鍙�(鐗╂枡缂栧彿)", dataTypeClass = String.class, required = true)
+    })
+    @GetMapping("/selectIdByCoNa")
+    public Result selectIdByCoNa(String name, String code) {
+        return Result.success(materialService.selectIdByCoNa(name, code));
+    }
+
+    @ApiOperation(value = "閫夋嫨鐗╂枡瑙勬牸(鏍规嵁瑙勬牸id鑾峰彇鐗╂枡鍨嬪彿)")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "id", value = "鐗╂枡瑙勬牸id", dataTypeClass = Integer.class, required = true)
+    })
+    @GetMapping("/selectSpBySt")
+    public Result selectSpBySt(Integer id) {
+        return Result.success(specificationsService.selectSpecificationIdAndName(id));
+    }
+
+
+    @ApiOperation(value = "鏂板妫�楠屽崟")
+    @PostMapping("/addRawInspects")
+    public Result addRawInspects(@RequestHeader("token") String token, @RequestBody RawInspect rawInspect) throws JSONException {
+        Map<String, String> map = jwt.readJWT(token);
+        String data = map.get("data");
+        JSONObject jsonObject = new JSONObject(data);
+        String userName = jsonObject.getString("name");
+        return Result.success(rawInspectService.addRawInspects(userName, rawInspect));
+    }
+
+}
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/mapper/FinishedInspectMapper.java b/inspect-server/src/main/java/com/yuanchu/mom/mapper/FinishedInspectMapper.java
new file mode 100644
index 0000000..e01edee
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/mapper/FinishedInspectMapper.java
@@ -0,0 +1,21 @@
+package com.yuanchu.mom.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.pojo.FinishedInspect;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-08-01
+ */
+public interface FinishedInspectMapper extends BaseMapper<FinishedInspect> {
+
+    IPage<Map<String, Object>> selectFinishedInspectPage(Page<Object> page, Integer inspectResult, String inspectDate, String inspectUsername);
+}
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/mapper/InspectUnacceptedMapper.java b/inspect-server/src/main/java/com/yuanchu/mom/mapper/InspectUnacceptedMapper.java
new file mode 100644
index 0000000..a1850d7
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/mapper/InspectUnacceptedMapper.java
@@ -0,0 +1,23 @@
+package com.yuanchu.mom.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.mom.pojo.InspectUnaccepted;
+import java.util.Map;
+
+/**
+ * 涓嶅悎鏍煎搧妫�楠岃〃(InspectUnaccepted)琛ㄦ暟鎹簱璁块棶灞�
+ *
+ * @author zss
+ * @since 2023-08-07 10:04:01
+ */
+public interface InspectUnacceptedMapper extends BaseMapper<InspectUnaccepted> {
+
+    //鏌ヨ鍘熸潗鏂欎笉鍚堟牸鍝佹楠屽崟鍒楄〃
+    IPage<Map<String, Object>> selectUnRawInspectsList(Page<Object> page, String formTime, Integer dealState, String supplier, Integer type);
+
+    //鏌ヨ杩囩▼妫�楠屽拰鎴愬搧妫�楠屼腑涓嶅悎鏍煎搧妫�楠屽崟鍒楄〃
+    IPage<Map<String, Object>> selectInsList(Page<Object> page, String formTime, Integer dealState, String supplier, Integer type);
+}
+
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/mapper/InspectionItemMapper.java b/inspect-server/src/main/java/com/yuanchu/mom/mapper/InspectionItemMapper.java
new file mode 100644
index 0000000..991b8c7
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/mapper/InspectionItemMapper.java
@@ -0,0 +1,20 @@
+package com.yuanchu.mom.mapper;
+
+import com.yuanchu.mom.mybatis_config.MyBaseMapper;
+import com.yuanchu.mom.pojo.InspectionItem;
+import com.yuanchu.mom.pojo.dto.InspectionItemDto;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-08-01
+ */
+public interface InspectionItemMapper extends MyBaseMapper<InspectionItem> {
+
+    List<InspectionItemDto> selectInspectionItem(Integer finishInspectId);
+}
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/mapper/RawInsProductMapper.java b/inspect-server/src/main/java/com/yuanchu/mom/mapper/RawInsProductMapper.java
new file mode 100644
index 0000000..738d800
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/mapper/RawInsProductMapper.java
@@ -0,0 +1,15 @@
+package com.yuanchu.mom.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yuanchu.mom.pojo.RawInsProduct;
+
+/**
+ * 鍘熸潗鏂欑敵璇峰崟涓殑椤圭洰鍒楄〃(RawInsProduct)琛ㄦ暟鎹簱璁块棶灞�
+ *
+ * @author zss
+ * @since 2023-08-01 13:52:30
+ */
+public interface RawInsProductMapper extends BaseMapper<RawInsProduct> {
+
+}
+
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/mapper/RawInspectMapper.java b/inspect-server/src/main/java/com/yuanchu/mom/mapper/RawInspectMapper.java
new file mode 100644
index 0000000..fecdc43
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/mapper/RawInspectMapper.java
@@ -0,0 +1,23 @@
+package com.yuanchu.mom.mapper;
+
+import com.yuanchu.mom.pojo.RawInspect;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恟aw_inspect(鍘熸潗鏂欑敵璇疯〃)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2023-07-31 14:43:15
+* @Entity com.yuanchu.mom.pojo.RawInspect
+*/
+public interface RawInspectMapper extends BaseMapper<RawInspect> {
+
+    List<RawInspect> selectRawInspectsByLimit(int pageSize, int countSize, String formTime, String createTime,int insState,int judgeState);
+
+
+}
+
+
+
+
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/pojo/FinishedInspect.java b/inspect-server/src/main/java/com/yuanchu/mom/pojo/FinishedInspect.java
new file mode 100644
index 0000000..120f250
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/pojo/FinishedInspect.java
@@ -0,0 +1,99 @@
+package com.yuanchu.mom.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-08-01
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="FinishedInspect瀵硅薄", description="")
+public class FinishedInspect implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "涓婚敭", hidden = true)
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @NotBlank(message = "璁㈠崟鍙蜂笉鍏佽涓虹┖锛�")
+    @ApiModelProperty(value = "璁㈠崟鍙�", required = true, example = "DDH202308010001")
+    private String orderNumber;
+
+    @NotBlank(message = "瀹㈡埛鍚嶇О涓嶅厑璁镐负绌猴紒")
+    @ApiModelProperty(value = "瀹㈡埛鍚嶇О", required = true, example = "鎳掓磱娲�")
+    private String customerName;
+
+    @NotBlank(message = "宸ョ▼鍚嶇О涓嶅厑璁镐负绌猴紒")
+    @ApiModelProperty(value = "宸ョ▼鍚嶇О", required = true, example = "娑蹭綋纭呮鑳�")
+    private String projectName;
+
+    @NotBlank(message = "璐ㄩ噺杩芥函鍙蜂笉鍏佽涓虹┖锛�")
+    @ApiModelProperty(value = "璐ㄩ噺杩芥函鍙�", required = true, example = "ZLZSH202308010001")
+    private String qualityTraceability;
+
+    @ApiModelProperty(value = "0:鎴愬搧;1锛氳繃绋�;", hidden = true)
+    private Integer type;
+
+    @NotBlank(message = "鍗曚綅涓嶅厑璁镐负绌猴紒")
+    @ApiModelProperty(value = "鍗曚綅", required = true, example = "鍚�")
+    private String unit;
+
+    @NotNull(message = "璇疯緭鍏ユ暟閲忥紒")
+    @ApiModelProperty(value = "鏁伴噺", required = true, example = "50")
+    private Integer quantity;
+
+    @NotNull(message = "璇烽�夋嫨瑙勬牸鍨嬪彿锛�")
+    @ApiModelProperty(value = "瑙勬牸鍨嬪彿鎷兼帴瀛楃", required = true, example = "8.7/15kV JLS-3.2")
+    private String specificationsModel;
+
+    @NotNull(message = "璇烽�夋嫨瑙勬牸鍨嬪彿锛�")
+    @TableField(exist = false)
+    @ApiModelProperty(value = "鍨嬪彿ID", required = true, example = "1")
+    private Integer specificationsId;
+
+    @NotNull(message = "璇烽�夋嫨椤圭洰鍚嶇О锛�")
+    @ApiModelProperty(value = "椤圭洰鍚嶇О", required = true, example = "鍏夌氦")
+    private String material;
+
+    @NotNull(message = "璇烽�夋嫨涓绘満宸ワ紒")
+    @ApiModelProperty(value = "涓绘満宸�:鐢ㄦ埛id", required = true, example = "1")
+    private Integer userId;
+
+    @ApiModelProperty(value = "妫�楠岀粨璁�", hidden = true, required = true, example = "DDH202308010001")
+    private Integer result;
+
+    @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0", hidden = true)
+    @TableLogic(value = "1", delval = "0")
+    private Integer state;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+
+
+}
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/pojo/InspectUnaccepted.java b/inspect-server/src/main/java/com/yuanchu/mom/pojo/InspectUnaccepted.java
new file mode 100644
index 0000000..be76c96
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/pojo/InspectUnaccepted.java
@@ -0,0 +1,94 @@
+package com.yuanchu.mom.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.*;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.io.Serializable;
+
+/**
+ * 涓嶅悎鏍煎搧妫�楠岃〃(InspectUnaccepted)琛ㄥ疄浣撶被
+ *
+ * @author zss
+ * @since 2023-08-07 10:04:01
+ */
+@Data
+@Accessors(chain = true)
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@Builder
+@TableName("inspect_unaccepted")
+public class InspectUnaccepted implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     **/
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 缂洪櫡鍚嶇О(鐞嗙敱)
+     **/
+    private String reason;
+
+    /**
+     * 澶勭悊鐘舵�� 0锛氬緟澶勭悊锛�1锛氬凡澶勭悊
+     **/
+    private Integer dealState;
+
+    /**
+     * 澶勭悊缁撴灉 0锛氫笉閫氳繃锛�1锛氶�氳繃
+     **/
+    private Integer dealReasult;
+
+    /**
+     * 澶勭悊鏃ユ湡
+     **/
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date dealTime;
+
+    /**
+     * ${column.comment}
+     **/
+    private Integer state;
+
+    /**
+     * ${column.comment}
+     **/
+    @TableField(fill = FieldFill.INSERT)
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date updateTime;
+
+    /**
+     * 鍏宠仈 妫�楠屽崟id
+     **/
+    private Integer rawInspectId;
+
+    /**
+     * 0锛氭垚鍝侊紱1锛氳繃绋嬶紱2锛氬師鏉愭枡
+     **/
+    private Integer type;
+
+    /**
+     * 渚涘簲鍟�
+     **/
+    private String supplier;
+
+    /**
+     * 鐜拌薄鎻忚堪
+     **/
+    private String tell;
+}
+
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/pojo/InspectionItem.java b/inspect-server/src/main/java/com/yuanchu/mom/pojo/InspectionItem.java
new file mode 100644
index 0000000..c32d30d
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/pojo/InspectionItem.java
@@ -0,0 +1,86 @@
+package com.yuanchu.mom.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-08-01
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="InspectionItem瀵硅薄", description="")
+public class InspectionItem extends Model<InspectionItem> implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "涓婚敭")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "椤圭洰鍚嶇О")
+    private String name;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "鐖跺悕绉�")
+    private String father;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "鍗曚綅")
+    private String unit;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "鏍囧噯鍊�")
+    private String required;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "鍐呮帶鍊�")
+    private String internal;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "鎴愬搧妫�楠屽崟Id")
+    private Integer finishInspectId;
+
+    @ApiModelProperty(value = "妫�楠屽��")
+    private String inspectionValue;
+
+    @ApiModelProperty(value = "璇曢獙璁惧")
+    private Integer deviceId;
+
+    @ApiModelProperty(value = "缁撹")
+    private Integer result;
+
+    @ApiModelProperty(value = "妫�楠屼汉")
+    private String username;
+
+    @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0", hidden = true)
+    @TableLogic(value = "1", delval = "0")
+    private Integer state;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+
+
+}
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/pojo/RawInsProduct.java b/inspect-server/src/main/java/com/yuanchu/mom/pojo/RawInsProduct.java
new file mode 100644
index 0000000..e974eee
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/pojo/RawInsProduct.java
@@ -0,0 +1,92 @@
+package com.yuanchu.mom.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.*;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.io.Serializable;
+
+/**
+ * 鍘熸潗鏂欑敵璇峰崟涓殑椤圭洰鍒楄〃(RawInsProduct)琛ㄥ疄浣撶被
+ *
+ * @author zss
+ * @since 2023-08-01 13:52:31
+ */
+@Data
+@Accessors(chain = true)
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@Builder
+@TableName("raw_ins_product")
+public class RawInsProduct implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 椤圭洰id
+     **/
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 椤圭洰鍚嶇О
+     **/
+    private String name;
+
+    /**
+     * 鍗曚綅
+     **/
+    private String unit;
+
+    /**
+     * 鏍囧噯鍊�
+     **/
+    private String required;
+
+    /**
+     * 鍐呮帶鍊�
+     **/
+    private String internal;
+
+    /**
+     * 妫�娴嬪��
+     **/
+    private String testValue;
+
+    /**
+     * 缁撹 0锛氫笉鍚堟牸锛�1锛氬悎鏍�
+     **/
+    private Integer testState;
+
+
+    private Integer state;
+
+    @TableField(fill = FieldFill.INSERT)
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date updateTime;
+
+    /**
+     * 鍏宠仈 璁惧id
+     **/
+    private Integer deviceId;
+
+    /**
+     * 鍏宠仈 鐢宠鍗昳d
+     **/
+    private Integer rawInspectId;
+
+    /**
+     * 鍏宠仈 妫�楠屽憳锛堢敤鎴穒d锛�
+     **/
+    private Integer userId;
+}
+
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/pojo/RawInspect.java b/inspect-server/src/main/java/com/yuanchu/mom/pojo/RawInspect.java
new file mode 100644
index 0000000..1902601
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/pojo/RawInspect.java
@@ -0,0 +1,106 @@
+package com.yuanchu.mom.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * 鍘熸潗鏂欑敵璇疯〃
+ * @TableName raw_inspect
+ */
+@TableName(value ="raw_inspect")
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class RawInspect implements Serializable {
+    /**
+     * 妫�楠屽崟id
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 鍘熸潗鏂欑紪鐮�
+     */
+    private String code;
+
+    /**
+     * 鍘熸潗鏂欏悕绉�
+     */
+    private String name;
+
+    /**
+     * 鍨嬪彿瑙勬牸
+     */
+    private String specifications;
+
+    /**
+     * 鍗曚綅
+     */
+    private String unit;
+
+    /**
+     * 鏁伴噺
+     */
+    private Integer number;
+
+    /**
+     * 妫�楠岀姸鎬� 0锛氭湭妫�楠岋紱1锛氬凡妫�楠�
+     */
+    private Integer insState;
+
+    /**
+     * 鍚堟牸鐘舵�� 0锛氫笉鍚堟牸锛�1锛氬悎鏍�
+     */
+    private Integer judgeState;
+
+    /**
+     * 妫�楠屾棩鏈�
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date insTime;
+
+    /**
+     * 鎶ユ浜猴紙褰撳墠鐢ㄦ埛鍚嶏級
+     */
+    private String userName;
+
+    /**
+     * 
+     */
+    private Integer state;
+
+    /**
+     * 鎶ユ鏃ユ湡
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date createTime;
+
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date updateTime;
+
+    /**
+     * 鏉ユ枡鏃ユ湡
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date formTime;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/pojo/dto/InspectionItemDto.java b/inspect-server/src/main/java/com/yuanchu/mom/pojo/dto/InspectionItemDto.java
new file mode 100644
index 0000000..7799a21
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/pojo/dto/InspectionItemDto.java
@@ -0,0 +1,21 @@
+package com.yuanchu.mom.pojo.dto;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class InspectionItemDto {
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "鐖跺悕绉�")
+    private String father;
+
+    @ApiModelProperty(value = "瀛愭暟鎹�")
+    private List<InspectionItemDto2> children;
+}
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/pojo/dto/InspectionItemDto2.java b/inspect-server/src/main/java/com/yuanchu/mom/pojo/dto/InspectionItemDto2.java
new file mode 100644
index 0000000..d9ad4d5
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/pojo/dto/InspectionItemDto2.java
@@ -0,0 +1,34 @@
+package com.yuanchu.mom.pojo.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class InspectionItemDto2 {
+    @ApiModelProperty(value = "涓婚敭")
+    private Integer id;
+
+    @ApiModelProperty(value = "椤圭洰鍚嶇О")
+    private String name;
+
+    @ApiModelProperty(value = "鍗曚綅")
+    private String unit;
+
+    @ApiModelProperty(value = "鏍囧噯鍊�")
+    private String required;
+
+    @ApiModelProperty(value = "鍐呮帶鍊�")
+    private String internal;
+
+    @ApiModelProperty(value = "妫�楠屽��")
+    private String inspectionValue;
+
+    @ApiModelProperty(value = "璇曢獙璁惧")
+    private Integer deviceId;
+
+    @ApiModelProperty(value = "缁撹")
+    private Integer result;
+
+    @ApiModelProperty(value = "妫�楠屼汉")
+    private String username;
+}
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/pojo/dto/UpdateInspectionItemDto.java b/inspect-server/src/main/java/com/yuanchu/mom/pojo/dto/UpdateInspectionItemDto.java
new file mode 100644
index 0000000..71fe288
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/pojo/dto/UpdateInspectionItemDto.java
@@ -0,0 +1,23 @@
+package com.yuanchu.mom.pojo.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class UpdateInspectionItemDto {
+
+    @ApiModelProperty(value = "妫�楠屽�糏d锛氭牴鎹繖涓狪D淇敼", required = true, example = "5079")
+    String inspectionItemId;
+
+    @ApiModelProperty(value = "鏍囧噯鍊�", required = true, example = ">=1")
+    private String required;
+
+    @ApiModelProperty(value = "鍐呮帶鍊�", required = true, example = ">2")
+    private String internal;
+
+    @ApiModelProperty(value = "妫�楠屽��", required = true, example = "3")
+    String inspectionValue;
+
+    @ApiModelProperty(value = "璇曢獙璁惧", required = true, example = "1")
+    String deviceId;
+}
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/pojo/vo/RawInsProductVo.java b/inspect-server/src/main/java/com/yuanchu/mom/pojo/vo/RawInsProductVo.java
new file mode 100644
index 0000000..f85aa74
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/pojo/vo/RawInsProductVo.java
@@ -0,0 +1,66 @@
+package com.yuanchu.mom.pojo.vo;
+
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import lombok.Data;
+import java.io.Serializable;
+
+
+@Data
+public class RawInsProductVo implements Serializable {
+
+    /**
+     * 椤圭洰鍚嶇О
+     **/
+    @JsonSerialize
+    private String name;
+
+    /**
+     * 鍗曚綅
+     **/
+    @JsonSerialize
+    private String unit;
+
+    /**
+     * 鏍囧噯鍊�
+     **/
+    @JsonSerialize
+    private String required;
+
+    /**
+     * 鍐呮帶鍊�
+     **/
+    @JsonSerialize
+    private String internal;
+
+    /**
+     * 妫�娴嬪��
+     **/
+    @JsonSerialize
+    private String testValue;
+
+    /**
+     * 缁撹 0锛氫笉鍚堟牸锛�1锛氬悎鏍�
+     **/
+    @JsonSerialize
+    private Integer testState;
+
+
+    /**
+     * 璁惧鍚嶇О
+     **/
+    @JsonSerialize
+    private String deviceName;
+
+    /**
+     * 鍏宠仈 鐢宠鍗昳d
+     **/
+    @JsonSerialize
+    private Integer rawInspectId;
+
+    /**
+     *  妫�楠屽憳
+     **/
+    @JsonSerialize
+    private String userName;
+}
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/pojo/vo/RawInspectVo.java b/inspect-server/src/main/java/com/yuanchu/mom/pojo/vo/RawInspectVo.java
new file mode 100644
index 0000000..ce5224f
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/pojo/vo/RawInspectVo.java
@@ -0,0 +1,81 @@
+package com.yuanchu.mom.pojo.vo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.yuanchu.mom.pojo.RawInsProduct;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+@Data
+//鏌ヨ妫�楠屽崟璇︽儏(妫�楠屽熀鏈俊鎭互鍙婃楠岄」鐩俊鎭�)
+public class RawInspectVo implements Serializable {
+    
+    /* 妫�楠岃鎯� */
+    /**
+     * 鏉ユ枡鏃ユ湡
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date formTime;
+
+    /**
+     * 鍨嬪彿瑙勬牸
+     */
+    @JsonSerialize
+    private String specifications;
+
+    /**
+     * 鍘熸潗鏂欑紪鐮�
+     */
+    @JsonSerialize
+    private String code;
+
+    /**
+     * 鍘熸潗鏂欏悕绉�
+     */
+    @JsonSerialize
+    private String name;
+
+    /**
+     * 鎶ユ鏃ユ湡
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date createTime;
+
+    /**
+     * 鍗曚綅
+     */
+    @JsonSerialize
+    private String unit;
+
+    /**
+     * 鏁伴噺
+     */
+    @JsonSerialize
+    private Integer number;
+
+    /**
+     * 鎶ユ浜猴紙褰撳墠鐢ㄦ埛鍚嶏級
+     */
+    @JsonSerialize
+    private String userName;
+
+    /* 妫�楠岄」鐩� */
+    @JsonSerialize
+    private List<RawInsProductVo> rawInsProducts;
+
+    /* 妫�楠岀粨璁� */
+    /**
+     * 鍚堟牸鐘舵�� 0锛氫笉鍚堟牸锛�1锛氬悎鏍�
+     */
+    @JsonSerialize
+    private Integer judgeState;
+}
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/FinishedInspectService.java b/inspect-server/src/main/java/com/yuanchu/mom/service/FinishedInspectService.java
new file mode 100644
index 0000000..9d3f22c
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/FinishedInspectService.java
@@ -0,0 +1,27 @@
+package com.yuanchu.mom.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.pojo.FinishedInspect;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-08-01
+ */
+public interface FinishedInspectService extends IService<FinishedInspect> {
+
+    @Transactional(rollbackFor = Exception.class)
+    Integer addProcessInspectionSheet(FinishedInspect finishedInspect);
+
+    Integer inspectionConclusion(Integer finishedInspectId, Integer result);
+
+    IPage<Map<String, Object>> selectFinishedInspectPage(Page<Object> page, Integer inspectResult, String inspectDate, String inspectUsername);
+}
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/InspectUnacceptedService.java b/inspect-server/src/main/java/com/yuanchu/mom/service/InspectUnacceptedService.java
new file mode 100644
index 0000000..f2c2639
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/InspectUnacceptedService.java
@@ -0,0 +1,28 @@
+package com.yuanchu.mom.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yuanchu.mom.pojo.InspectUnaccepted;
+
+import java.util.Map;
+
+/**
+ * 涓嶅悎鏍煎搧妫�楠岃〃(InspectUnaccepted)琛ㄦ湇鍔℃帴鍙�
+ *
+ * @author zss
+ * @since 2023-08-07 10:04:01
+ */
+public interface InspectUnacceptedService extends IService<InspectUnaccepted> {
+
+    /**
+     *鏌ヨ鍘熸潗鏂欎笉鍚堟牸鍝佹楠屽崟鍒楄〃
+     * @param
+     * @param formTime
+     * @param dealState
+     * @return
+     */
+    IPage<Map<String, Object>> selectUnRawInspectsList(Page<Object> page, String formTime, Integer dealState, String supplier,Integer type);
+
+}
+
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/InspectionItemService.java b/inspect-server/src/main/java/com/yuanchu/mom/service/InspectionItemService.java
new file mode 100644
index 0000000..ecf667f
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/InspectionItemService.java
@@ -0,0 +1,28 @@
+package com.yuanchu.mom.service;
+
+import com.yuanchu.mom.pojo.InspectionItem;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yuanchu.mom.pojo.dto.InspectionItemDto;
+import com.yuanchu.mom.pojo.dto.UpdateInspectionItemDto;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-08-01
+ */
+public interface InspectionItemService extends IService<InspectionItem> {
+
+    void insertList(Integer finishInspectId, List<Map<String, Object>> list);
+
+    List<InspectionItemDto> selectInspectionItem(Integer finishInspectId);
+
+    Integer addProcessInspectionSheet(String username, UpdateInspectionItemDto updateInspectionItemDto);
+
+    List<Map<String, Object>> selectDeviceIdAndName();
+}
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/RawInsProductService.java b/inspect-server/src/main/java/com/yuanchu/mom/service/RawInsProductService.java
new file mode 100644
index 0000000..58e11ac
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/RawInsProductService.java
@@ -0,0 +1,21 @@
+package com.yuanchu.mom.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yuanchu.mom.pojo.RawInsProduct;
+
+/**
+ * 鍘熸潗鏂欑敵璇峰崟涓殑椤圭洰鍒楄〃(RawInsProduct)琛ㄦ湇鍔℃帴鍙�
+ *
+ * @author zss
+ * @since 2023-08-01 13:52:31
+ */
+public interface RawInsProductService extends IService<RawInsProduct> {
+
+    /**
+     * 鏇存柊妫�楠岄」鐩�
+     * @param userId
+     * @param rawInsProduct
+     */
+    void updaterawInsProduct(int userId, RawInsProduct rawInsProduct);
+}
+
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/RawInspectService.java b/inspect-server/src/main/java/com/yuanchu/mom/service/RawInspectService.java
new file mode 100644
index 0000000..994e554
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/RawInspectService.java
@@ -0,0 +1,36 @@
+package com.yuanchu.mom.service;
+
+import com.yuanchu.mom.pojo.RawInspect;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yuanchu.mom.pojo.vo.RawInspectVo;
+
+import java.util.Map;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恟aw_inspect(鍘熸潗鏂欑敵璇疯〃)銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2023-07-31 14:43:15
+*/
+public interface RawInspectService extends IService<RawInspect> {
+    Map<String, Object> selectRawInspectsList(int pageSize, int countSize, String formTime, String createTime, int insState, int judgeState);
+
+    /**
+     * 鏍规嵁妫�楠屽崟id鏌ヨ鍘熸潗鏂欐楠屽崟璇︽儏
+     * @param id
+     * @return
+     */
+    RawInspectVo selectRawInspectsListById(Integer id);
+
+    /**
+     * 鏇存柊妫�楠岀姸鎬�
+     * @param id
+     */
+    boolean updateRawInspectsById(Integer id);
+
+    /**
+     * 鏂板妫�楠屽崟
+     * @param userName
+     * @param rawInspect
+     */
+    Integer addRawInspects(String userName, RawInspect rawInspect);
+}
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/FinishedInspectServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/FinishedInspectServiceImpl.java
new file mode 100644
index 0000000..9b74a67
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/FinishedInspectServiceImpl.java
@@ -0,0 +1,83 @@
+package com.yuanchu.mom.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.mapper.InspectUnacceptedMapper;
+import com.yuanchu.mom.pojo.FinishedInspect;
+import com.yuanchu.mom.mapper.FinishedInspectMapper;
+import com.yuanchu.mom.pojo.InspectUnaccepted;
+import com.yuanchu.mom.service.FinishedInspectService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yuanchu.mom.service.InspectionItemService;
+import com.yuanchu.mom.service.ProductService;
+import com.yuanchu.mom.service.SpecificationsService;
+import com.yuanchu.mom.utils.MyUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-08-01
+ */
+@Service
+public class FinishedInspectServiceImpl extends ServiceImpl<FinishedInspectMapper, FinishedInspect> implements FinishedInspectService {
+
+    @Resource
+    private FinishedInspectMapper finishedInspectMapper;
+
+    @Autowired
+    private ProductService productService;
+
+    @Autowired
+    private InspectionItemService inspectionItemService;
+
+    @Resource
+    InspectUnacceptedMapper inspectUnacceptedMapper;
+
+    @Override
+    public Integer addProcessInspectionSheet(FinishedInspect finishedInspect) {
+        finishedInspect.setType(0);
+        int insert = finishedInspectMapper.insert(finishedInspect);
+        if (insert == 1){
+            List<Map<String, Object>> maps = productService.selectProductList(finishedInspect.getSpecificationsId());
+            inspectionItemService.insertList(finishedInspect.getId(), maps);
+            return insert;
+        }
+        return 0;
+    }
+
+    @Override
+    public Integer inspectionConclusion(Integer finishedInspectId, Integer result) {
+        //鏇存柊妫�楠屽崟閲岄潰鐨勬楠岀粨璁�
+        LambdaUpdateWrapper<FinishedInspect> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.eq(FinishedInspect::getId, finishedInspectId);
+        updateWrapper.set(FinishedInspect::getResult, result);
+        finishedInspectMapper.update(new FinishedInspect(), updateWrapper);
+        //濡傛灉妫�楠岀粨璁轰负涓嶅悎鏍�,鍒欓渶瑕佹柊澧炰笉鍚堟牸妫�楠屽崟
+        FinishedInspect finishedInspect = finishedInspectMapper.selectById(finishedInspectId);
+        if (result == 0) {
+            InspectUnaccepted inspectUnaccepted = InspectUnaccepted.builder()
+                    .reason(finishedInspect.getProjectName() + "涓嶅悎鏍�")  //鏆備笖瀹氫箟涓哄伐绋嬪悕绉颁笉鍚堟牸
+                    .rawInspectId(finishedInspectId)
+                    .type(finishedInspect.getType())
+                    .supplier(finishedInspect.getCustomerName())
+                    .build();
+            inspectUnacceptedMapper.insert(inspectUnaccepted);
+        }
+        return 1;
+    }
+
+    @Override
+    public IPage<Map<String, Object>> selectFinishedInspectPage(Page<Object> page, Integer inspectResult, String inspectDate, String inspectUsername) {
+        return finishedInspectMapper.selectFinishedInspectPage(page, inspectResult, inspectDate, inspectUsername);
+    }
+}
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InspectUnacceptedServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InspectUnacceptedServiceImpl.java
new file mode 100644
index 0000000..e4b7c36
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InspectUnacceptedServiceImpl.java
@@ -0,0 +1,49 @@
+package com.yuanchu.mom.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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yuanchu.mom.mapper.InspectUnacceptedMapper;
+import com.yuanchu.mom.pojo.InspectUnaccepted;
+import com.yuanchu.mom.service.InspectUnacceptedService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 涓嶅悎鏍煎搧妫�楠岃〃(InspectUnaccepted)琛ㄦ湇鍔″疄鐜扮被
+ *
+ * @author zss
+ * @since 2023-08-07 10:04:01
+ */
+@Service
+public class InspectUnacceptedServiceImpl extends ServiceImpl<InspectUnacceptedMapper, InspectUnaccepted> implements InspectUnacceptedService {
+
+    @Resource
+    InspectUnacceptedMapper inspectUnacceptedMapper;
+
+    //鏌ヨ鍘熸潗鏂欎笉鍚堟牸鍝佹楠屽崟鍒楄〃
+    @Override
+    public IPage<Map<String, Object>> selectUnRawInspectsList(Page<Object> page, String formTime, Integer dealState, String supplier,Integer type) {
+        if (type==null){
+            type=2;//涓虹┖鏄師鏉愭枡2
+        }
+        switch (type) {
+            case 2:
+                //2鏄煡璇㈠師鏉愭枡涓嶅悎鏍煎搧
+                return inspectUnacceptedMapper.selectUnRawInspectsList(page,formTime,dealState,supplier,0);
+            case 1:
+                //1鏄煡璇㈣繃绋嬩笉鍚堟牸鍝�
+                return inspectUnacceptedMapper.selectInsList(page,formTime,dealState,supplier,1);
+            case 0:
+                //0鏄煡璇㈡垚鍝佷笉鍚堟牸鍝�
+                return inspectUnacceptedMapper.selectInsList(page,formTime,dealState,supplier,2);
+            default:
+                return null;
+        }
+    }
+}
+
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InspectionItemServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InspectionItemServiceImpl.java
new file mode 100644
index 0000000..e0a13f1
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/InspectionItemServiceImpl.java
@@ -0,0 +1,130 @@
+package com.yuanchu.mom.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.yuanchu.mom.pojo.Device;
+import com.yuanchu.mom.pojo.InspectionItem;
+import com.yuanchu.mom.mapper.InspectionItemMapper;
+import com.yuanchu.mom.pojo.dto.InspectionItemDto;
+import com.yuanchu.mom.pojo.dto.UpdateInspectionItemDto;
+import com.yuanchu.mom.service.DeviceService;
+import com.yuanchu.mom.service.InspectionItemService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yuanchu.mom.service.SpecificationsService;
+import com.yuanchu.mom.utils.JackSonUtil;
+import com.yuanchu.mom.utils.MyUtil;
+import io.swagger.annotations.ApiModelProperty;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-08-01
+ */
+@Service
+public class InspectionItemServiceImpl extends ServiceImpl<InspectionItemMapper, InspectionItem> implements InspectionItemService {
+
+    @Resource
+    private InspectionItemMapper inspectionItemMapper;
+
+    @Autowired
+    private DeviceService deviceService;
+
+    @Override
+    public void insertList(Integer finishInspectId, List<Map<String, Object>> list) {
+        List<InspectionItem> list1 = new ArrayList<>();
+        for (Map<String, Object> map : list){
+            try {
+                InspectionItem inspectionItem = JackSonUtil.unmarshal(JackSonUtil.marshal(map), InspectionItem.class);
+                inspectionItem.setFinishInspectId(finishInspectId);
+                list1.add(inspectionItem);
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+        inspectionItemMapper.insertBatchSomeColumn(list1);
+    }
+
+    @Override
+    public List<InspectionItemDto> selectInspectionItem(Integer finishInspectId) {
+        return inspectionItemMapper.selectInspectionItem(finishInspectId);
+    }
+
+    @Override
+    public Integer addProcessInspectionSheet(String username, UpdateInspectionItemDto updateInspectionItemDto) {
+        LambdaUpdateWrapper<InspectionItem> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(InspectionItem::getId, updateInspectionItemDto.getInspectionItemId());
+        wrapper.set(InspectionItem::getInspectionValue, updateInspectionItemDto.getInspectionValue());
+        wrapper.set(InspectionItem::getDeviceId, updateInspectionItemDto.getDeviceId());
+        int i = checkValues(updateInspectionItemDto.getRequired(), updateInspectionItemDto.getInternal(), updateInspectionItemDto.getInspectionValue());
+        wrapper.set(InspectionItem::getResult, i);
+        wrapper.set(InspectionItem::getUsername, username);
+        int update = inspectionItemMapper.update(new InspectionItem(), wrapper);
+        if (update > 0){
+            return i;
+        }
+        return 2;
+    }
+
+    @Override
+    public List<Map<String, Object>> selectDeviceIdAndName() {
+        LambdaQueryWrapper<Device> wrapper = new LambdaQueryWrapper<>();
+        wrapper.select(Device::getId, Device::getName);
+        return deviceService.listMaps(wrapper);
+    }
+
+    /*鍒ゆ柇妫�娴嬪�兼槸鍚︽弧瓒虫爣鍑嗗�煎拰鍐呮帶鍊肩殑瑕佹眰,濡傛灉涓嶆弧瓒冲垯妫�楠岀粨璁轰负涓嶅悎鏍�*/
+    private int checkValues(String standardValueStr, String controlValueStr, String detectionValueStr) {
+        boolean isStandardValueSatisfied = isValueSatisfied(standardValueStr, detectionValueStr);
+        boolean isControlValueSatisfied = isValueSatisfied(controlValueStr, detectionValueStr);
+
+        if (isStandardValueSatisfied && isControlValueSatisfied) {
+            return 1;
+        } else {
+            return 0;
+        }
+    }
+    private boolean isValueSatisfied(String valueStr, String detectionValueStr) {
+        String substring = valueStr.substring(1, 2);
+        if (substring.equals("=")) {
+            String operator = valueStr.substring(0, 2);
+            Double standardValue = Double.parseDouble(valueStr.substring(2));
+            Double detectionValue = Double.parseDouble(detectionValueStr);
+            switch (operator) {
+                case ">=":
+                    return detectionValue >= standardValue;
+                case "<=":
+                    return detectionValue <= standardValue;
+                default:
+                    return false;
+            }
+        } else {
+            String operator = valueStr.substring(0, 1);
+            Double standardValue = Double.parseDouble(valueStr.substring(1));
+            Double detectionValue = Double.parseDouble(detectionValueStr);
+            switch (operator) {
+                case ">":
+                    return detectionValue > standardValue;
+                case "<":
+                    return detectionValue < standardValue;
+                case "=":
+                    return detectionValue.equals(standardValue);
+                case "鈮�":
+                    return detectionValue >= standardValue;
+                case "鈮�":
+                    return detectionValue <= standardValue;
+                default:
+                    return false;
+            }
+        }
+    }
+}
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/RawInsProductServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/RawInsProductServiceImpl.java
new file mode 100644
index 0000000..1d85c3e
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/RawInsProductServiceImpl.java
@@ -0,0 +1,89 @@
+package com.yuanchu.mom.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yuanchu.mom.mapper.RawInsProductMapper;
+import com.yuanchu.mom.pojo.RawInsProduct;
+import com.yuanchu.mom.service.RawInsProductService;
+import com.yuanchu.mom.utils.MyUtil;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * 鍘熸潗鏂欑敵璇峰崟涓殑椤圭洰鍒楄〃(RawInsProduct)琛ㄦ湇鍔″疄鐜扮被
+ *
+ * @author zss
+ * @since 2023-08-01 13:52:31
+ */
+@Service
+public class RawInsProductServiceImpl extends ServiceImpl<RawInsProductMapper, RawInsProduct> implements RawInsProductService {
+
+    @Resource
+    RawInsProductMapper rawInsProductMapper;
+
+    //鏇存柊妫�楠岄」鐩�
+    @Override
+    public void updaterawInsProduct(int userId, RawInsProduct rawInsProduct) {
+        //璧嬪�兼楠屽憳id
+        rawInsProduct.setUserId(userId);
+        //鍒ゆ柇妫�娴嬪�兼槸鍚︽弧瓒虫爣鍑嗗�煎拰鍐呮帶鍊肩殑瑕佹眰,濡傛灉涓嶆弧瓒冲垯妫�楠岀粨璁轰负涓嶅悎鏍�0
+        String testValue = rawInsProduct.getTestValue();//妫�楠屽��
+        String required = rawInsProduct.getRequired();//鏍囧噯鍊�
+        String internal = rawInsProduct.getInternal();//鍐呮帶鍊�
+        rawInsProduct.setTestState(checkValues(required, internal, testValue));
+        //鏍规嵁妫�楠岄」鐩悕鍜屽叧鑱旂殑妫�楠屽崟id鏉ユ煡璇㈡楠岄」鐩殑鏁版嵁
+        LambdaUpdateWrapper<RawInsProduct> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.eq(RawInsProduct::getRawInspectId, rawInsProduct.getRawInspectId())
+                .eq(RawInsProduct::getName, rawInsProduct.getName());
+        rawInsProductMapper.update(rawInsProduct, updateWrapper);
+    }
+
+    /*鍒ゆ柇妫�娴嬪�兼槸鍚︽弧瓒虫爣鍑嗗�煎拰鍐呮帶鍊肩殑瑕佹眰,濡傛灉涓嶆弧瓒冲垯妫�楠岀粨璁轰负涓嶅悎鏍�*/
+    private int checkValues(String standardValueStr, String controlValueStr, String detectionValueStr) {
+        boolean isStandardValueSatisfied = isValueSatisfied(standardValueStr, detectionValueStr);
+        boolean isControlValueSatisfied = isValueSatisfied(controlValueStr, detectionValueStr);
+
+        if (isStandardValueSatisfied && isControlValueSatisfied) {
+            return 1;
+        } else {
+            return 0;
+        }
+    }
+
+    private boolean isValueSatisfied(String valueStr, String detectionValueStr) {
+        String substring = valueStr.substring(1, 2);
+        if (substring.equals("=")) {
+            String operator = valueStr.substring(0, 2);
+            Double standardValue = Double.parseDouble(valueStr.substring(2));
+            Double detectionValue = Double.parseDouble(detectionValueStr);
+            switch (operator) {
+                case ">=":
+                    return detectionValue >= standardValue;
+                case "<=":
+                    return detectionValue <= standardValue;
+                default:
+                    return false;
+            }
+        } else {
+            String operator = valueStr.substring(0, 1);
+            Double standardValue = Double.parseDouble(valueStr.substring(1));
+            Double detectionValue = Double.parseDouble(detectionValueStr);
+            switch (operator) {
+                case ">":
+                    return detectionValue > standardValue;
+                case "鈮�":
+                    return detectionValue >= standardValue;
+                case "鈮�":
+                    return detectionValue <= standardValue;
+                case "<":
+                    return detectionValue < standardValue;
+                case "=":
+                    return detectionValue.equals(standardValue);
+                default:
+                    return false;
+            }
+        }
+    }
+}
+
diff --git a/inspect-server/src/main/java/com/yuanchu/mom/service/impl/RawInspectServiceImpl.java b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/RawInspectServiceImpl.java
new file mode 100644
index 0000000..839e7ae
--- /dev/null
+++ b/inspect-server/src/main/java/com/yuanchu/mom/service/impl/RawInspectServiceImpl.java
@@ -0,0 +1,188 @@
+package com.yuanchu.mom.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yuanchu.mom.mapper.*;
+import com.yuanchu.mom.pojo.*;
+import com.yuanchu.mom.pojo.vo.RawInsProductVo;
+import com.yuanchu.mom.pojo.vo.RawInspectVo;
+import com.yuanchu.mom.service.*;
+import com.yuanchu.mom.utils.MyUtil;
+import org.apache.logging.log4j.util.Strings;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author Administrator
+ * @description 閽堝琛ㄣ�恟aw_inspect(鍘熸潗鏂欑敵璇疯〃)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+ * @createDate 2023-07-31 14:43:15
+ */
+@Service
+public class RawInspectServiceImpl extends ServiceImpl<RawInspectMapper, RawInspect>
+        implements RawInspectService {
+
+    @Resource
+    RawInspectMapper rawInspectMapper;
+
+    @Resource
+    RawInsProductMapper rawInsProductMapper;
+
+    @Resource
+    RawInsProductService rawInsProductService;
+
+    @Resource
+    InspectUnacceptedMapper inspectUnacceptedMapper;
+
+    @Resource
+    DeviceService deviceService;
+
+    @Resource
+    MaterialMapper materialMapper;
+
+    @Resource
+    UserService userService;
+
+    @Resource
+    SpecificationsService specificationsService;
+
+    @Resource
+    StandardService standardService;
+
+    @Resource
+    ProductMapper productMapper;
+
+    @Override
+    public Map<String, Object> selectRawInspectsList(int pageSize, int countSize, String formTime, String createTime, int insState, int judgeState) {
+        Map<String, Object> map = new HashMap<>();
+        map.put("count", rawInspectMapper.selectCount(new QueryWrapper<RawInspect>().eq("state", 1)));
+        map.put("data", rawInspectMapper.selectRawInspectsByLimit((pageSize - 1) * countSize, pageSize * countSize, formTime, createTime, insState, judgeState));
+        return map;
+    }
+
+    //鏍规嵁妫�楠屽崟id鏌ヨ鍘熸潗鏂欐楠屽崟璇︽儏
+    @Override
+    public RawInspectVo selectRawInspectsListById(Integer id) {
+        //灏嗘楠屽崟鍩烘湰淇℃伅鏌ヨ鍑烘潵骞跺皝瑁呭埌RawInspectVo瀵硅薄涓�
+        RawInspect rawInspect = rawInspectMapper.selectById(id);
+        RawInspectVo rawInspectVo = new RawInspectVo();
+        BeanUtils.copyProperties(rawInspect, rawInspectVo);
+        //鏌ヨ妫�楠屽崟閲岄潰鐨勬楠岄」鐩�,骞跺皝瑁呭埌RawInspectVo瀵硅薄涓�
+        LambdaQueryWrapper<RawInsProduct> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(RawInsProduct::getRawInspectId, id);
+        List<RawInsProduct> rawInsProducts = rawInsProductMapper.selectList(queryWrapper);
+        //杩欓噷鏌ュ埌鐨勮澶噄d鍜屾楠屽憳id瑕佹煡璇㈠悕绉�
+        List<RawInsProductVo> rawInsProductVos = rawInsProducts.stream().map(rawInsProduct -> {
+            //灏嗕竴涓璞$殑鍊艰祴鍊肩粰鍙︿竴涓璞�
+            RawInsProductVo rawInsProductVo = new RawInsProductVo();
+            BeanUtils.copyProperties(rawInsProduct, rawInsProductVo);
+            //鑾峰彇璁惧鍚�(鍓嶆彁鏄鏋滃瓨鍦�)
+            if (rawInsProduct.getDeviceId() != null) {
+                String deviceName = deviceService.getDeviceNameById(rawInsProduct.getDeviceId());
+                rawInsProductVo.setDeviceName(deviceName);
+            }
+            //鑾峰彇鐢ㄦ埛鍚�(鍓嶆彁鏄鏋滃瓨鍦�)
+            if (rawInsProduct.getUserId() != null) {
+                String userName = userService.selectNameById(rawInsProduct.getUserId());
+                rawInsProductVo.setUserName(userName);
+            }
+            return rawInsProductVo;
+        }).collect(Collectors.toList());
+        rawInspectVo.setRawInsProducts(rawInsProductVos);
+        return rawInspectVo;
+    }
+
+    //鏇存柊妫�楠岀姸鎬�(涓婃姤)
+    @Override
+    public boolean updateRawInspectsById(Integer id) {
+        //鏇存柊妫�楠屽崟閲岄潰鐨勬楠岀姸鎬佸拰妫�楠岀粨璁�
+        RawInspectVo rawInspectVo = selectRawInspectsListById(id);
+        RawInspect rawInspect = RawInspect.builder()
+                .id(id)
+                .insState(1)
+                .insTime(new Date())
+                .judgeState(rawInspectVo.getJudgeState())
+                .build();
+        rawInspectMapper.updateById(rawInspect);
+        //濡傛灉妫�楠岀粨璁轰负涓嶅悎鏍�,鍒欓渶瑕佹柊澧炰笉鍚堟牸妫�楠屽崟
+        if (rawInspectVo.getJudgeState() == 0) {
+            InspectUnaccepted rawUnaccepted = InspectUnaccepted.builder()
+                    .reason(rawInspectVo.getName() + "涓嶅悎鏍�")  //鏆備笖瀹氫箟涓哄師鏉愭枡涓嶅悎鏍�
+                    .rawInspectId(id)
+                    .type(2)        //绫诲瀷涓哄師鏉愭枡
+                    .build();
+            inspectUnacceptedMapper.insert(rawUnaccepted);
+        }
+        return true;
+    }
+
+
+    //鏂板妫�楠屽崟
+    @Override
+    public Integer addRawInspects(String userName, RawInspect rawInspect) {
+        rawInspect.setUserName(userName);
+        //鏂板妫�楠屽崟
+        rawInspectMapper.insert(rawInspect);
+        //鑾峰彇鐗╂枡id
+        Material material = materialMapper.selectOne(Wrappers.<Material>query()
+                .eq("name", rawInspect.getName())
+                .eq("code", rawInspect.getCode()));
+        //鑾峰彇瑙勬牸鍚嶇О鍜屽瀷鍙峰悕绉�
+        String specification = rawInspect.getSpecifications();
+        String[] strings = specification.split("-");
+        String stName = strings[0];//瑙勬牸鍚嶇О
+        String spName = strings[1];//鍨嬪彿鍚嶇О
+        //鑾峰彇瑙勬牸id
+        Standard standard = standardService.getOne(Wrappers.<Standard>query()
+                .eq("name", stName)
+                .eq("material_id", material.getId()));
+        //鑾峰彇鍨嬪彿id
+        Specifications specifications = specificationsService.selectSpIdByname(standard.getId(), spName);
+        //鏍规嵁鍨嬪彿id鏌ヨ椤圭洰淇℃伅
+        List<Product> productList = productMapper.selectList(Wrappers.<Product>query().eq("specifications_id", specifications.getId()));
+        ArrayList<RawInsProduct> list = new ArrayList<>();
+        for (Product product : productList) {
+            RawInsProduct rawInsProduct = RawInsProduct.builder()
+                    .name(product.getName())
+                    .unit(product.getUnit())
+                    .required(product.getRequired())
+                    .internal(product.getInternal())
+                    .rawInspectId(rawInspect.getId())
+                    .build();
+            list.add(rawInsProduct);
+        }
+        //妫�楠岄」鐩壒閲忔坊鍔�
+        rawInsProductService.saveBatch(list);
+        return rawInspect.getId();
+    }
+
+    //鍒ゆ柇鏁扮粍鏄惁鍖呭惈0
+    private static boolean containsZero(Object[] array) {
+        for (Object num : array) {
+            if (num.equals(0)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    //鍒ゆ柇鏁扮粍鏄惁鍏ㄩ儴涓�1
+    private static boolean allOnes(Object[] array) {
+        for (Object num : array) {
+            if (!num.equals(1)) {
+                return false;
+            }
+        }
+        return true;
+    }
+}
+
+
+
+
diff --git a/inspect-server/src/main/resources/mapper/FinishedInspectMapper.xml b/inspect-server/src/main/resources/mapper/FinishedInspectMapper.xml
new file mode 100644
index 0000000..643181e
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/FinishedInspectMapper.xml
@@ -0,0 +1,21 @@
+<?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.mom.mapper.FinishedInspectMapper">
+
+    <select id="selectFinishedInspectPage" resultType="map">
+        SELECT f.`id`, f.`order_number`, f.`customer_name`, f.`project_name`, f.`quality_traceability`, f.`material`, f.`specifications_model`, f.`unit`,
+               f.`quantity`, u.`name`, DATE_FORMAT(f.`create_time`, '%Y-%m-%d') detectionPeriod, f.`result`
+        FROM finished_inspect f, `user` u
+        WHERE f.`user_id` = u.`id`
+          AND f.`state` = 1
+            <if test="inspectResult != null and inspectResult != ''">
+                AND f.result = #{inspectResult}
+            </if>
+            <if test="inspectDate != null and inspectDate != ''">
+                AND DATE_FORMAT(f.`create_time`, '%Y-%m-%d') = #{inspectDate}
+            </if>
+            <if test="inspectUsername != null and inspectUsername != ''">
+                AND u.`name` LIKE CONCAT('%',#{inspectUsername},'%')
+            </if>
+    </select>
+</mapper>
diff --git a/inspect-server/src/main/resources/mapper/InspectUnacceptedMapper.xml b/inspect-server/src/main/resources/mapper/InspectUnacceptedMapper.xml
new file mode 100644
index 0000000..4cd0d51
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/InspectUnacceptedMapper.xml
@@ -0,0 +1,68 @@
+<?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.mom.mapper.InspectUnacceptedMapper">
+    <select id="selectUnRawInspectsList" resultType="java.util.Map">
+        select DATE_FORMAT(form_time, '%Y-%m-%d') '鏉ユ枡鏃ユ湡',
+        supplier,
+        reason,
+        code,
+        name,
+        specifications,
+        unit,
+        number,
+        DATE_FORMAT(ri.create_time, '%Y-%m-%d') '鎶ユ鏃ユ湡',
+        user_name,
+        DATE_FORMAT(ins_time, '%Y-%m-%d') '妫�楠屾棩鏈�',
+        deal_state,
+        deal_reasult,
+        DATE_FORMAT(deal_time, '%Y-%m-%d') '澶勭悊鏃ユ湡'
+        from mom_ocean.raw_inspect ri inner join mom_ocean.inspect_unaccepted ru on ri.id = ru.raw_inspect_id
+        <if test="dealState!=null">
+            where deal_state=#{dealState}
+        </if>
+        <if test="formTime!=null">
+            and form_time=#{formTime}
+        </if>
+        <if test="supplier!=null">
+            and supplier=#{supplier}
+        </if>
+        <if test="type!=null">
+            and ru.type=#{type}
+        </if>
+        and ru.state=1
+    </select>
+    <select id="selectInsList" resultType="java.util.Map">
+        select DATE_FORMAT(fi.create_time, '%Y-%m-%d') '鏉ユ枡鏃ユ湡',
+        supplier,
+        reason,
+        material_code,
+        name,
+        specifications_model,
+        unit,
+        quantity,
+        DATE_FORMAT(fi.create_time, '%Y-%m-%d') '鎶ユ鏃ユ湡',
+        u.name,
+        DATE_FORMAT(fi.update_time, '%Y-%m-%d') '妫�楠屾棩鏈�',
+        deal_state,
+        deal_reasult,
+        DATE_FORMAT(deal_time, '%Y-%m-%d') '澶勭悊鏃ユ湡'
+        from mom_ocean.inspect_unaccepted ru,
+        mom_ocean.finished_inspect fi ,
+        mom_ocean.user u
+        where fi.id = ru.raw_inspect_id
+        and fi.user_id=u.id
+        <if test="dealState!=null">
+            and deal_state=#{dealState}
+        </if>
+        <if test="formTime!=null">
+            and fi.create_time=#{formTime}
+        </if>
+        <if test="supplier!=null">
+            and supplier=#{supplier}
+        </if>
+        <if test="type!=null">
+            and ru.type=#{type}
+        </if>
+        and ru.state=1
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/inspect-server/src/main/resources/mapper/InspectionItemMapper.xml b/inspect-server/src/main/resources/mapper/InspectionItemMapper.xml
new file mode 100644
index 0000000..4ee7346
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/InspectionItemMapper.xml
@@ -0,0 +1,27 @@
+<?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.mom.mapper.InspectionItemMapper">
+
+    <resultMap id="selectInspectionItemMap" type="inspectionItemDto">
+        <id property="father" column="father"/>
+        <association property="children" resultMap="selectInspectionItemDto2Map"/>
+    </resultMap>
+
+    <resultMap id="selectInspectionItemDto2Map" type="inspectionItemDto2">
+        <id property="id" column="id"/>
+        <result property="name" column="name"/>
+        <result property="unit" column="unit"/>
+        <result property="internal" column="internal"/>
+        <result property="required" column="required"/>
+        <result property="inspectionValue" column="inspection_value"/>
+        <result property="deviceId" column="device_id"/>
+        <result property="result" column="result"/>
+    </resultMap>
+
+    <select id="selectInspectionItem" resultMap="selectInspectionItemMap">
+        SELECT i.`id`, IFNULL(i.`father`,i.`name`) father, i.`name`, i.`unit`, i.`internal`, i.`required`, i.`inspection_value`, i.`device_id`, i.`result`
+        FROM inspection_item i
+        WHERE i.`finish_inspect_id` = #{finishInspectId}
+          AND i.`state` = 1
+    </select>
+</mapper>
diff --git a/inspect-server/src/main/resources/mapper/RawInsProductMapper.xml b/inspect-server/src/main/resources/mapper/RawInsProductMapper.xml
new file mode 100644
index 0000000..dd43f5e
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/RawInsProductMapper.xml
@@ -0,0 +1,4 @@
+<?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.mom.mapper.RawInsProductMapper">
+</mapper>
\ No newline at end of file
diff --git a/inspect-server/src/main/resources/mapper/RawInspectMapper.xml b/inspect-server/src/main/resources/mapper/RawInspectMapper.xml
new file mode 100644
index 0000000..f8bfd64
--- /dev/null
+++ b/inspect-server/src/main/resources/mapper/RawInspectMapper.xml
@@ -0,0 +1,41 @@
+<?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.mom.mapper.RawInspectMapper">
+
+    <resultMap id="BaseResultMap" type="com.yuanchu.mom.pojo.RawInspect">
+        <id property="id" column="id" jdbcType="INTEGER"/>
+        <result property="code" column="code" jdbcType="VARCHAR"/>
+        <result property="name" column="name" jdbcType="VARCHAR"/>
+        <result property="specifications" column="specifications" jdbcType="VARCHAR"/>
+        <result property="unit" column="unit" jdbcType="VARCHAR"/>
+        <result property="number" column="number" jdbcType="INTEGER"/>
+        <result property="insState" column="ins_state" jdbcType="INTEGER"/>
+        <result property="judgeState" column="judge_state" jdbcType="INTEGER"/>
+        <result property="insTime" column="ins_time" jdbcType="DATE"/>
+        <result property="userName" column="user_name" jdbcType="VARCHAR"/>
+        <result property="state" column="state" jdbcType="INTEGER"/>
+        <result property="createTime" column="create_time" jdbcType="DATE"/>
+        <result property="updateTime" column="update_time" jdbcType="DATE"/>
+        <result property="formTime" column="form_time" jdbcType="DATE"/>
+    </resultMap>
+    <select id="selectRawInspectsByLimit" resultType="com.yuanchu.mom.pojo.RawInspect">
+        select id, code, name, specifications, unit, number, ins_state, judge_state, ins_time, user_name, create_time, form_time
+        from raw_inspect
+        where state = 1
+        <if test="formTime!=null and formTime!=''">
+            and form_time = #{formTime}
+        </if>
+        <if test="createTime!=null and createTime!=''">
+            and create_time = #{createTime}
+        </if>
+        <if test="insState!=2">
+            and ins_state = #{insState}
+        </if>
+        <if test="judgeState!=2">
+            and judge_state = #{judgeState}
+        </if>
+        limit #{pageSize},#{countSize}
+    </select>
+</mapper>
diff --git a/inspect-server/src/test/java/com/yuanchu/mom/InspectServerApplicationTests.java b/inspect-server/src/test/java/com/yuanchu/mom/InspectServerApplicationTests.java
new file mode 100644
index 0000000..03d7150
--- /dev/null
+++ b/inspect-server/src/test/java/com/yuanchu/mom/InspectServerApplicationTests.java
@@ -0,0 +1,13 @@
+package com.yuanchu.mom;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class InspectServerApplicationTests {
+
+    @Test
+    void contextLoads() {
+    }
+
+}
diff --git a/inventory-server/pom.xml b/inventory-server/pom.xml
new file mode 100644
index 0000000..cc61e2f
--- /dev/null
+++ b/inventory-server/pom.xml
@@ -0,0 +1,35 @@
+<?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>mom</artifactId>
+        <groupId>com.yuanchu.mom</groupId>
+        <version>1.0.0</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>inventory-server</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>inventory-server</name>
+    <description>inventory-server</description>
+    <packaging>jar</packaging>
+
+
+    <dependencies>
+        <!--鐢ㄦ埛妯″潡-->
+        <dependency>
+            <groupId>com.yuanchu.mom</groupId>
+            <artifactId>user-server</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+
+        <!--鏍囧噯妯″潡-->
+        <dependency>
+            <groupId>com.yuanchu.mom</groupId>
+            <artifactId>standard-server</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/inventory-server/src/main/java/com/yuanchu/mom/controller/RepertoryController.java b/inventory-server/src/main/java/com/yuanchu/mom/controller/RepertoryController.java
new file mode 100644
index 0000000..25caf5b
--- /dev/null
+++ b/inventory-server/src/main/java/com/yuanchu/mom/controller/RepertoryController.java
@@ -0,0 +1,62 @@
+package com.yuanchu.mom.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.api.ApiController;
+
+import java.util.HashMap;
+import java.util.List;
+
+import com.yuanchu.mom.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.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.service.RepertoryService;
+
+import javax.annotation.Resource;
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 搴撳瓨琛�(Repertory)琛ㄦ帶鍒跺眰
+ *
+ * @author zss
+ * @since 2023-08-07 16:33:01
+ */
+@Api(tags = "搴撳瓨琛ㄦ帴鍙�")
+@RestController
+@RequestMapping("/repertory")
+public class RepertoryController {
+
+    @Autowired
+    private RepertoryService repertoryService;
+
+    @ApiOperation("鏌ヨ鎵�鏈夊簱瀛樺垪琛�")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "pageSize", value = "椤垫暟", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "countSize", value = "鏉℃暟/椤�", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "name", value = "浜у搧鍚嶇О", dataTypeClass = String.class),
+            @ApiImplicitParam(name = "specifications", value = "浜у搧鍨嬪彿", dataTypeClass = String.class),
+            @ApiImplicitParam(name = "time", value = "鍏ュ簱鏃ユ湡", dataTypeClass = String.class),
+            @ApiImplicitParam(name = "type", value = "绫诲瀷(涓虹┖=鍏ㄩ儴)", dataTypeClass = Integer.class)
+    })
+    @GetMapping("/selectAllRepertory")
+    public Result selectAllRepertory(int pageSize, int countSize, String name, String specifications, String time, Integer type) {
+        IPage<Map<String, Object>> repertoryPage = repertoryService.selectAllRepertory(new Page<Object>(pageSize, countSize), name, specifications, time, type);
+        Map<String, Object> map = new HashMap<>();
+        map.put("total", repertoryPage.getTotal());
+        map.put("row", repertoryPage.getRecords());
+        return Result.success(map);
+    }
+
+}
+
diff --git a/inventory-server/src/main/java/com/yuanchu/mom/mapper/RepertoryMapper.java b/inventory-server/src/main/java/com/yuanchu/mom/mapper/RepertoryMapper.java
new file mode 100644
index 0000000..8d58883
--- /dev/null
+++ b/inventory-server/src/main/java/com/yuanchu/mom/mapper/RepertoryMapper.java
@@ -0,0 +1,21 @@
+package com.yuanchu.mom.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.mom.pojo.Repertory;
+
+import java.util.Map;
+
+/**
+ * 搴撳瓨琛�(Repertory)琛ㄦ暟鎹簱璁块棶灞�
+ *
+ * @author zss
+ * @since 2023-08-07 16:33:01
+ */
+public interface RepertoryMapper extends BaseMapper<Repertory> {
+
+    //鏌ヨ鎵�鏈夊簱瀛樺垪琛�
+    IPage<Map<String, Object>> selectAllRepertory(Page<Object> page, String name, String specifications, String time, Integer type);
+}
+
diff --git a/inventory-server/src/main/java/com/yuanchu/mom/pojo/Repertory.java b/inventory-server/src/main/java/com/yuanchu/mom/pojo/Repertory.java
new file mode 100644
index 0000000..d552828
--- /dev/null
+++ b/inventory-server/src/main/java/com/yuanchu/mom/pojo/Repertory.java
@@ -0,0 +1,115 @@
+package com.yuanchu.mom.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.*;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.io.Serializable;
+
+/**
+ * 搴撳瓨琛�(Repertory)琛ㄥ疄浣撶被
+ *
+ * @author zss
+ * @since 2023-08-07 16:33:01
+ */
+@Data
+@Accessors(chain = true)
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@Builder
+@TableName("repertory")
+public class Repertory implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 搴撳瓨id
+     **/
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 璁㈠崟缂栫爜
+     **/
+    private String orderCode;
+
+    /**
+     * 浜у搧缂栫爜
+     **/
+    private String code;
+
+    /**
+     * 浜у搧鍚嶇О
+     **/
+    private String name;
+
+    /**
+     * 鍨嬪彿瑙勬牸
+     **/
+    private String specifications;
+
+    /**
+     * 璇曢獙瑕佹眰
+     **/
+    private String requirements;
+
+    /**
+     * 宸ヨ壓鏂囦欢缂栧彿
+     **/
+    private String documentNumber;
+
+    /**
+     * 搴撲綅鍙�
+     **/
+    private Integer seat;
+
+    /**
+     * 鍗曚綅
+     **/
+    private String unit;
+
+    /**
+     * 鏁伴噺
+     **/
+    private Integer number;
+
+    /**
+     * 鍏ュ簱浜猴紙褰撳墠鐢ㄦ埛鍚嶏級
+     **/
+    private String userName;
+
+    /**
+     * ${column.comment}
+     **/
+    private Integer state;
+
+    /**
+     * 鍏ュ簱鏃ユ湡
+     **/
+    @TableField(fill = FieldFill.INSERT)
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date createTime;
+
+    /**
+     * ${column.comment}
+     **/
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date updateTime;
+
+    /**
+     * 澶囨敞
+     **/
+    private String note;
+
+    /**
+     * 绫诲瀷 0:鎴愬搧;1:鍗婃垚鍝�
+     **/
+    private Integer type;
+}
+
diff --git a/inventory-server/src/main/java/com/yuanchu/mom/service/RepertoryService.java b/inventory-server/src/main/java/com/yuanchu/mom/service/RepertoryService.java
new file mode 100644
index 0000000..54bec43
--- /dev/null
+++ b/inventory-server/src/main/java/com/yuanchu/mom/service/RepertoryService.java
@@ -0,0 +1,29 @@
+package com.yuanchu.mom.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yuanchu.mom.pojo.Repertory;
+
+import java.util.Map;
+
+/**
+ * 搴撳瓨琛�(Repertory)琛ㄦ湇鍔℃帴鍙�
+ *
+ * @author zss
+ * @since 2023-08-07 16:33:01
+ */
+public interface RepertoryService extends IService<Repertory> {
+
+    /**
+     *鏌ヨ鎵�鏈夊簱瀛樺垪琛�
+     * @param page
+     * @param name
+     * @param specifications
+     * @param time
+     * @param type
+     * @return
+     */
+    IPage<Map<String, Object>> selectAllRepertory(Page<Object> page, String name, String specifications, String time, Integer type);
+}
+
diff --git a/inventory-server/src/main/java/com/yuanchu/mom/service/impl/RepertoryServiceImpl.java b/inventory-server/src/main/java/com/yuanchu/mom/service/impl/RepertoryServiceImpl.java
new file mode 100644
index 0000000..e2f095d
--- /dev/null
+++ b/inventory-server/src/main/java/com/yuanchu/mom/service/impl/RepertoryServiceImpl.java
@@ -0,0 +1,32 @@
+package com.yuanchu.mom.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.mom.mapper.RepertoryMapper;
+import com.yuanchu.mom.pojo.Repertory;
+import com.yuanchu.mom.service.RepertoryService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Map;
+
+/**
+ * 搴撳瓨琛�(Repertory)琛ㄦ湇鍔″疄鐜扮被
+ *
+ * @author zss
+ * @since 2023-08-07 16:33:01
+ */
+@Service
+public class RepertoryServiceImpl extends ServiceImpl<RepertoryMapper, Repertory> implements RepertoryService {
+
+    @Resource
+    RepertoryMapper repertoryMapper;
+
+    //鏌ヨ鎵�鏈夊簱瀛樺垪琛�
+    @Override
+    public IPage<Map<String, Object>> selectAllRepertory(Page<Object> page, String name, String specifications, String time, Integer type) {
+        return repertoryMapper.selectAllRepertory(page,name,specifications,time,type);
+    }
+}
+
diff --git a/inventory-server/src/main/resources/mapper/RepertoryMapper.xml b/inventory-server/src/main/resources/mapper/RepertoryMapper.xml
new file mode 100644
index 0000000..a3c0b4f
--- /dev/null
+++ b/inventory-server/src/main/resources/mapper/RepertoryMapper.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.mom.mapper.RepertoryMapper">
+    <select id="selectAllRepertory" resultType="java.util.Map">
+        select name,
+        specifications,
+        code,
+        requirements,
+        order_code,
+        seat,
+        user_name,
+        DATE_FORMAT(create_time, '%Y-%m-%d') '鍏ュ簱鏃ユ湡',
+        note
+        from mom_ocean.repertory
+        where state=1
+        <if test="name!=null and name!=' '">
+            and name LIKE CONCAT('%',#{name},'%')
+        </if>
+        <if test="specifications!=null and specifications!=' '">
+            and specifications LIKE CONCAT('%',#{specifications},'%')
+        </if>
+        <if test="time!=null and time!=''">
+            and create_time=#{time}
+        </if>
+        <if test="type!=null and type!=''">
+            and type=#{type}
+        </if>
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..a60f122
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,231 @@
+<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.7.3</version>
+        <relativePath/> <!-- lookup parent from repository -->
+    </parent>
+    <groupId>com.yuanchu.mom</groupId>
+    <artifactId>mom</artifactId>
+    <version>1.0.0</version>
+    <name>mom_ocean</name>
+    <description>mom_ocean</description>
+    <packaging>pom</packaging>
+
+    <modules>
+        <module>framework</module>
+        <module>user-server</module>
+        <module>standard-server</module>
+        <module>inspect-server</module>
+        <module>system-run</module>
+    </modules>
+
+    <properties>
+        <java.version>1.8</java.version>
+        <log4j.version>1.2.17</log4j.version>
+        <mysql.version>8.0.28</mysql.version>
+        <jwt.version>4.4.0</jwt.version>
+        <swagger.version>3.0.0</swagger.version>
+        <knife4j-spring-ui.version>3.0.3</knife4j-spring-ui.version>
+        <druid.version>1.2.18</druid.version>
+        <mybatis-plus.version>3.4.0</mybatis-plus.version>
+        <openfeign.version>3.1.3</openfeign.version>
+        <feign-okhttp.version>11.0</feign-okhttp.version>
+        <shiro.version>1.5.3</shiro.version>
+
+        <!-- 鎵撳寘鍚庡鍑虹殑璺緞 -->
+        <package.path>${project.build.directory}/BLOG</package.path>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <!--lombok-->
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+
+        <!--mybatis-plus-->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+        </dependency>
+
+        <!--Swagger3-->
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-boot-starter</artifactId>
+            <version>${swagger.version}</version>
+        </dependency>
+
+        <!--Swagger3-Ui缇庡寲-->
+        <dependency>
+            <groupId>com.github.xiaoymin</groupId>
+            <artifactId>knife4j-spring-ui</artifactId>
+            <version>${knife4j-spring-ui.version}</version>
+        </dependency>
+
+        <!--鍚庣娉ㄩ噴妫�楠屽伐鍏�-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+    </dependencies>
+
+    <dependencyManagement>
+        <dependencies>
+            <!--log4j-->
+            <dependency>
+                <groupId>log4j</groupId>
+                <artifactId>log4j</artifactId>
+                <version>${log4j.version}</version>
+            </dependency>
+
+            <!--mysql-->
+            <dependency>
+                <groupId>mysql</groupId>
+                <artifactId>mysql-connector-java</artifactId>
+                <version>${mysql.version}</version>
+            </dependency>
+
+            <!--鏁版嵁搴撹繛鎺ユ睜-->
+            <dependency>
+                <groupId>com.alibaba</groupId>
+                <artifactId>druid</artifactId>
+                <version>${druid.version}</version>
+            </dependency>
+
+            <!--jwt-->
+            <dependency>
+                <groupId>com.auth0</groupId>
+                <artifactId>java-jwt</artifactId>
+                <version>${jwt.version}</version>
+            </dependency>
+
+            <!--mybatis-plus-->
+            <dependency>
+                <groupId>com.baomidou</groupId>
+                <artifactId>mybatis-plus-boot-starter</artifactId>
+                <version>${mybatis-plus.version}</version>
+            </dependency>
+
+            <!--mybatis-plus浠g爜鐢熸垚鍣�-->
+            <dependency>
+                <groupId>com.baomidou</groupId>
+                <artifactId>mybatis-plus-generator</artifactId>
+                <version>${mybatis-plus.version}</version>
+            </dependency>
+
+            <!--feign-->
+            <dependency>
+                <groupId>org.springframework.cloud</groupId>
+                <artifactId>spring-cloud-starter-openfeign</artifactId>
+                <version>${openfeign.version}</version>
+            </dependency>
+
+            <!--okhttp-->
+            <dependency>
+                <groupId>io.github.openfeign</groupId>
+                <artifactId>feign-okhttp</artifactId>
+                <version>${feign-okhttp.version}</version>
+            </dependency>
+
+            <!--瀹夊叏妗嗘灦shiro-->
+            <dependency>
+                <groupId>org.apache.shiro</groupId>
+                <artifactId>shiro-spring-boot-starter</artifactId>
+                <version>${shiro.version}</version>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <build>
+        <plugins>
+            <!-- 涓婄嚎閮ㄧ讲 JAR鍚姩鍒嗙渚濊禆lib鍜岄厤缃� -->
+            <!-- 鎵撳寘jar -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <!-- 涓嶆墦鍖呰祫婧愭枃浠� -->
+                    <excludes>
+                        <exclude>*.**</exclude>
+                    </excludes>
+                    <archive>
+                        <manifest>
+                            <addClasspath>true</addClasspath>
+                            <!-- MANIFEST.MF 涓� Class-Path 鍔犲叆鍓嶇紑 -->
+                            <classpathPrefix>lib/</classpathPrefix>
+                            <!-- jar鍖呬笉鍖呭惈鍞竴鐗堟湰鏍囪瘑 -->
+                            <useUniqueVersions>false</useUniqueVersions>
+                            <!-- 鎸囧畾鍏ュ彛绫� -->
+                            <mainClass>com.yuanchu.mom.SystemRunApplication</mainClass>
+                        </manifest>
+                        <!--  鎸囧畾閰嶇疆鏂囦欢鐩綍锛岃繖鏍穓ar杩愯鏃朵細鍘绘壘鍒板悓鐩綍涓嬬殑conf鏂囦欢澶逛笅鏌ユ壘  -->
+                        <manifestEntries>
+                            <Class-Path>conf/</Class-Path>
+                        </manifestEntries>
+                    </archive>
+                    <outputDirectory>${package.path}</outputDirectory>
+                </configuration>
+            </plugin>
+            <!-- 鎷疯礉渚濊禆 copy-dependencies -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-dependencies</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${package.path}/lib/ </outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <!-- 鎷疯礉璧勬簮鏂囦欢 copy-resources -->
+            <plugin>
+                <artifactId>maven-resources-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-resources</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <configuration>
+                            <resources>
+                                <resource>
+                                    <directory>src/main/resources</directory>
+                                    <!--  鎸囧畾鍙備笌鏋勫缓鐨剅esource -->
+                                    <includes>
+                                        <include>*.**</include>
+                                        <!--鎺掗櫎application-dev.yml鏂囦欢-->
+                                    </includes>
+                                </resource>
+                            </resources>
+                            <outputDirectory>${package.path}/conf</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/standard-server/.gitignore b/standard-server/.gitignore
new file mode 100644
index 0000000..549e00a
--- /dev/null
+++ b/standard-server/.gitignore
@@ -0,0 +1,33 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
diff --git a/standard-server/pom.xml b/standard-server/pom.xml
new file mode 100644
index 0000000..cced00d
--- /dev/null
+++ b/standard-server/pom.xml
@@ -0,0 +1,24 @@
+<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>mom</artifactId>
+        <groupId>com.yuanchu.mom</groupId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>standard-server</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>standard-server</name>
+    <description>standard-server</description>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.yuanchu.mom</groupId>
+            <artifactId>framework</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/standard-server/src/main/java/com/yuanchu/mom/controller/DeviceController.java b/standard-server/src/main/java/com/yuanchu/mom/controller/DeviceController.java
new file mode 100644
index 0000000..e408098
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/controller/DeviceController.java
@@ -0,0 +1,47 @@
+package com.yuanchu.mom.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.yuanchu.mom.pojo.Device;
+import com.yuanchu.mom.pojo.dto.ProductDto;
+import com.yuanchu.mom.service.DeviceService;
+import com.yuanchu.mom.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 java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-07-31
+ */
+@Api(tags = "鎶�鏈鐞�-->鏍囧噯MOM-->宸ヨ壓璺嚎")
+@RestController
+@RequestMapping("/device")
+public class DeviceController {
+
+    @Autowired
+    private DeviceService deviceService;
+
+    @ApiOperation(value = "鐐瑰嚮琛ㄦ牸涓殑閫夋嫨")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "deviceGroup", value = "璁惧缁�", dataTypeClass = String.class, required = true)
+    })
+    @GetMapping("/select")
+    public Result<?> selectTreeDevice(String deviceGroup){
+        Map<String, Object> map = deviceService.selectTechnology(deviceGroup);
+        return Result.success(map);
+    }
+}
diff --git a/standard-server/src/main/java/com/yuanchu/mom/controller/MaterialController.java b/standard-server/src/main/java/com/yuanchu/mom/controller/MaterialController.java
new file mode 100644
index 0000000..30ac074
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/controller/MaterialController.java
@@ -0,0 +1,33 @@
+package com.yuanchu.mom.controller;
+
+import com.yuanchu.mom.pojo.dto.MaterialTreeDto;
+import com.yuanchu.mom.service.MaterialService;
+import com.yuanchu.mom.vo.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Map;
+
+@Api(tags = "鎶�鏈鐞�-->鏍囧噯MOM-->鐗╂枡妯″潡")
+@RestController
+@RequestMapping("/material")
+public class MaterialController {
+
+    @Autowired
+    private MaterialService materialService;
+
+    @ApiOperation(value = "鏌ヨ鐗╂枡鐨勬爲")
+    @GetMapping("/selectTreeByMaterial")
+    public Result<List<MaterialTreeDto>> selectTreeByMaterial(){
+        return Result.success(materialService.selectTreeByMaterial());
+    }
+
+}
diff --git a/standard-server/src/main/java/com/yuanchu/mom/controller/OrdersController.java b/standard-server/src/main/java/com/yuanchu/mom/controller/OrdersController.java
new file mode 100644
index 0000000..8a8969a
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/controller/OrdersController.java
@@ -0,0 +1,63 @@
+package com.yuanchu.mom.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.vo.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+import com.yuanchu.mom.service.OrdersService;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.Map;
+
+
+/**
+ * 璁㈠崟(Order)琛ㄦ帶鍒跺眰
+ *
+ * @author zss
+ * @since 2023-07-31 11:57:44
+ */
+@Api(tags = "鎶�鏈鐞�-->璁㈠崟BOM")
+@RestController
+@RequestMapping("/orders")
+@Slf4j
+public class OrdersController {
+
+    @Resource
+    OrdersService ordersService;
+
+    @ApiOperation("鏌ヨ鎵�鏈夎鍗曞垪琛�")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "pageSize", value = "椤垫暟", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "countSize", value = "鏉℃暟/椤�", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "id", value = "璁㈠崟id", dataTypeClass = Integer.class),
+            @ApiImplicitParam(name = "name", value = "浜у搧鍚嶇О", dataTypeClass = String.class),
+            @ApiImplicitParam(name = "state", value = "鐘舵��(涓虹┖=鍏ㄩ儴)", dataTypeClass = Integer.class),
+            @ApiImplicitParam(name = "time", value = "涓嬪崟鏃堕棿", dataTypeClass = String.class)
+    })
+    @GetMapping("/selectAllOrder")
+    public Result selectAllOrder(int pageSize, int countSize, Integer id, String name, Integer state ,String time) {
+        IPage<Map<String, Object>> inspectionPage = ordersService.selectAllOrder(new Page<Object>(pageSize, countSize), id, name, state, time);
+        Map<String, Object> map = new HashMap<>();
+        map.put("total", inspectionPage.getTotal());
+        map.put("row", inspectionPage.getRecords());
+        return Result.success(map);
+    }
+
+    @ApiOperation("鏍规嵁璁㈠崟id鏌ヨ璁㈠崟璇︽儏")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "id", value = "璁㈠崟id", dataTypeClass = Integer.class, required = true)
+    })
+    @GetMapping("/selectOrderById")
+    public Result selectOrderById(Integer id) {
+        return Result.success(ordersService.getById(id));
+    }
+
+}
+
diff --git a/standard-server/src/main/java/com/yuanchu/mom/controller/ProductController.java b/standard-server/src/main/java/com/yuanchu/mom/controller/ProductController.java
new file mode 100644
index 0000000..f1870a8
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/controller/ProductController.java
@@ -0,0 +1,35 @@
+package com.yuanchu.mom.controller;
+
+import com.yuanchu.mom.pojo.dto.ProductDto;
+import com.yuanchu.mom.service.ProductService;
+import com.yuanchu.mom.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 java.util.List;
+
+@Api(tags = "鎶�鏈鐞�-->鏍囧噯MOM-->椤圭洰妯″潡")
+@RestController
+@RequestMapping("/product")
+public class ProductController {
+
+    @Autowired
+    private ProductService productService;
+
+    @ApiOperation(value = "椤圭洰琛ㄦ牸浜岀骇鏍�")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "project", value = "椤圭洰", dataTypeClass = String.class),
+            @ApiImplicitParam(name = "specifications", value = "鍨嬪彿ID", dataTypeClass = String.class, required = true)
+    })
+    @GetMapping("/selectTreeByMaterial")
+    public Result<?> selectTreeProduct(String specifications, String project){
+        List<ProductDto> map = productService.selectTreeProduct(specifications, project);
+        return Result.success(map);
+    }
+}
diff --git a/standard-server/src/main/java/com/yuanchu/mom/controller/TechnologyController.java b/standard-server/src/main/java/com/yuanchu/mom/controller/TechnologyController.java
new file mode 100644
index 0000000..d9f788f
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/controller/TechnologyController.java
@@ -0,0 +1,45 @@
+package com.yuanchu.mom.controller;
+
+
+import com.yuanchu.mom.service.TechnologyService;
+import com.yuanchu.mom.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 java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-07-31
+ */
+@Api(tags = "鎶�鏈鐞�-->鏍囧噯MOM-->宸ヨ壓璺嚎")
+@RestController
+@RequestMapping("/technology")
+public class TechnologyController {
+
+    @Autowired
+    private TechnologyService technologyService;
+
+    @ApiOperation(value = "閫夋嫨宸ヨ壓璺嚎鍑虹幇鐨勮〃鏍兼煡璇�")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "technologyName", value = "宸ヨ壓鍚嶇О", dataTypeClass = String.class),
+            @ApiImplicitParam(name = "specificationId", value = "瑙勬牸ID", dataTypeClass = String.class,required = true)
+    })
+    @GetMapping("/select")
+    public Result<?> selectTechnology(String technologyName, String specificationId){
+        List<Map<String, Object>> map = technologyService.selectTechnology(technologyName);
+        return Result.success(map);
+    }
+}
diff --git a/standard-server/src/main/java/com/yuanchu/mom/mapper/DeviceMapper.java b/standard-server/src/main/java/com/yuanchu/mom/mapper/DeviceMapper.java
new file mode 100644
index 0000000..56b0106
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/mapper/DeviceMapper.java
@@ -0,0 +1,16 @@
+package com.yuanchu.mom.mapper;
+
+import com.yuanchu.mom.pojo.Device;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-07-31
+ */
+public interface DeviceMapper extends BaseMapper<Device> {
+
+}
diff --git a/standard-server/src/main/java/com/yuanchu/mom/mapper/MaterialMapper.java b/standard-server/src/main/java/com/yuanchu/mom/mapper/MaterialMapper.java
new file mode 100644
index 0000000..7d429c1
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/mapper/MaterialMapper.java
@@ -0,0 +1,32 @@
+package com.yuanchu.mom.mapper;
+
+import com.yuanchu.mom.pojo.Material;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yuanchu.mom.pojo.dto.MaterialTreeDto;
+import org.apache.ibatis.annotations.MapKey;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恗aterial銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2023-07-26 15:52:50
+* @Entity com.yuanchu.mom.pojo.Material
+*/
+
+public interface MaterialMapper extends BaseMapper<Material> {
+
+    @MapKey("id")
+    List<MaterialTreeDto> selectTreeByMaterial();
+
+    //鏍规嵁鐗╂枡鍚嶇О鏌ヨ鐗╂枡id鍜岀墿鏂欑紪鐮�
+    List<Material> selectMcodeId(String name);
+
+    //鏍规嵁鐗╂枡鍚嶇О鍜岀墿鏂欑紪鐮佹煡璇㈢墿鏂檌d,瑙勬牸淇℃伅鍜屽瀷鍙蜂俊鎭�
+    List<Map> selectIdByCoNa(String name, String code);
+}
+
+
+
+
diff --git a/standard-server/src/main/java/com/yuanchu/mom/mapper/OrdersMapper.java b/standard-server/src/main/java/com/yuanchu/mom/mapper/OrdersMapper.java
new file mode 100644
index 0000000..20997ef
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/mapper/OrdersMapper.java
@@ -0,0 +1,23 @@
+package com.yuanchu.mom.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.mom.pojo.Orders;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 璁㈠崟(Order)琛ㄦ暟鎹簱璁块棶灞�
+ *
+ * @author zss
+ * @since 2023-07-31 11:57:44
+ */
+public interface OrdersMapper extends BaseMapper<Orders> {
+
+    //鏌ヨ鎵�鏈夎鍗曞垪琛�
+    IPage<Map<String, Object>> selectAllOrder(Page<Object> page, Integer id, String name, Integer state , String time);
+}
+
diff --git a/standard-server/src/main/java/com/yuanchu/mom/mapper/ProductMapper.java b/standard-server/src/main/java/com/yuanchu/mom/mapper/ProductMapper.java
new file mode 100644
index 0000000..55edfae
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/mapper/ProductMapper.java
@@ -0,0 +1,23 @@
+package com.yuanchu.mom.mapper;
+
+import com.yuanchu.mom.pojo.Product;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yuanchu.mom.pojo.dto.ProductDto;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恜roduct銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2023-07-26 16:00:44
+* @Entity com.yuanchu.mom.pojo.Product
+*/
+public interface ProductMapper extends BaseMapper<Product> {
+
+    List<ProductDto> selectTreeProduct(String specifications, String project);
+}
+
+
+
+
diff --git a/standard-server/src/main/java/com/yuanchu/mom/mapper/SpecificationsMapper.java b/standard-server/src/main/java/com/yuanchu/mom/mapper/SpecificationsMapper.java
new file mode 100644
index 0000000..ba17d8b
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/mapper/SpecificationsMapper.java
@@ -0,0 +1,29 @@
+package com.yuanchu.mom.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yuanchu.mom.pojo.Specifications;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Administrator
+ * @description 閽堝琛ㄣ�恠pecifications銆戠殑鏁版嵁搴撴搷浣淢apper
+ * @createDate 2023-07-26 16:02:54
+ * @Entity com.yuanchu.mom.pojo.Specifications
+ */
+public interface SpecificationsMapper extends BaseMapper<Specifications> {
+
+    /**
+     * 妫�楠屾ā鍧�-->OMS绠$悊-->鎴愬搧妫�楠�-->鏂板(闇�瑕佽鏍煎瀷鍙风殑Id涓庡悕绉�)
+     */
+    List<Map<String, Object>> selectSpecificationIdAndName(Integer materialId);
+
+}
+
+
+
+
diff --git a/standard-server/src/main/java/com/yuanchu/mom/mapper/StandardMapper.java b/standard-server/src/main/java/com/yuanchu/mom/mapper/StandardMapper.java
new file mode 100644
index 0000000..433b240
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/mapper/StandardMapper.java
@@ -0,0 +1,18 @@
+package com.yuanchu.mom.mapper;
+
+import com.yuanchu.mom.pojo.Standard;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恠tandard銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2023-07-26 15:59:05
+* @Entity com.yuanchu.mom.pojo.Standard
+*/
+public interface StandardMapper extends BaseMapper<Standard> {
+
+}
+
+
+
+
diff --git a/standard-server/src/main/java/com/yuanchu/mom/mapper/TechnologyMapper.java b/standard-server/src/main/java/com/yuanchu/mom/mapper/TechnologyMapper.java
new file mode 100644
index 0000000..719f2fb
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/mapper/TechnologyMapper.java
@@ -0,0 +1,16 @@
+package com.yuanchu.mom.mapper;
+
+import com.yuanchu.mom.pojo.Technology;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-07-31
+ */
+public interface TechnologyMapper extends BaseMapper<Technology> {
+
+}
diff --git a/standard-server/src/main/java/com/yuanchu/mom/pojo/Device.java b/standard-server/src/main/java/com/yuanchu/mom/pojo/Device.java
new file mode 100644
index 0000000..50ba911
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/pojo/Device.java
@@ -0,0 +1,58 @@
+package com.yuanchu.mom.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.time.LocalDate;
+import java.io.Serializable;
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-07-31
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="Device瀵硅薄", description="")
+public class Device implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "璁惧id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "璁惧缂栫爜")
+    private String code;
+
+    @ApiModelProperty(value = "璁惧鍚嶇О")
+    private String name;
+
+    @ApiModelProperty(value = "璁惧鍒嗙粍")
+    private String father;
+
+    @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0", hidden = true)
+    @TableLogic(value = "1", delval = "0")
+    private Integer state;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+
+
+}
diff --git a/standard-server/src/main/java/com/yuanchu/mom/pojo/Material.java b/standard-server/src/main/java/com/yuanchu/mom/pojo/Material.java
new file mode 100644
index 0000000..adff440
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/pojo/Material.java
@@ -0,0 +1,60 @@
+package com.yuanchu.mom.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ *
+ * @TableName material
+ */
+@TableName(value ="material")
+@Data
+public class Material implements Serializable {
+    /**
+     * 鐗╂枡id
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 鐗╂枡缂栫爜
+     */
+    private String code;
+
+    /**
+     * 鐗╂枡鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 0锛氬師鏉愭枡锛�1锛氭垚鍝侊紱2锛氬崐鎴愬搧
+     */
+    private Integer type;
+
+    @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0", hidden = true)
+    @TableLogic(value = "1", delval = "0")
+    private Integer state;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+
+    @ApiModelProperty(value = "涔愯閿�", hidden = true)
+    @Version
+    private Integer version;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}
diff --git a/standard-server/src/main/java/com/yuanchu/mom/pojo/Orders.java b/standard-server/src/main/java/com/yuanchu/mom/pojo/Orders.java
new file mode 100644
index 0000000..5e45802
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/pojo/Orders.java
@@ -0,0 +1,128 @@
+package com.yuanchu.mom.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+import java.io.Serializable;
+
+/**
+ * 璁㈠崟(Order)琛ㄥ疄浣撶被
+ *
+ * @author zss
+ * @since 2023-07-31 11:57:44
+ */
+@Data
+@Accessors(chain = true)
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@TableName("orders")
+public class Orders implements Serializable {
+    private static final long serialVersionUID = 1L;
+    /**
+     * 璁㈠崟id
+     */
+    @ApiModelProperty(name = "璁㈠崟id")
+    @TableId(value = "id", type = IdType.ASSIGN_UUID)
+    private Integer id;
+    /**
+     * 瀹㈡埛鍚嶇О
+     */
+    @ApiModelProperty(name = "瀹㈡埛鍚嶇О")
+    @TableField("proname")
+    private String proname;
+    /**
+     * 浜у搧缂栫爜
+     */
+    @ApiModelProperty(name = "浜у搧缂栫爜")
+    @TableField("code")
+    private String code;
+    /**
+     * 浜у搧澶х被,0锛氬師鏉愭枡锛�1锛氭垚鍝侊紱2锛氬崐鎴愬搧
+     */
+    @ApiModelProperty(name = "浜у搧澶х被,0锛氬師鏉愭枡锛�1锛氭垚鍝侊紱2锛氬崐鎴愬搧")
+    @TableField("type")
+    private Integer type;
+    /**
+     * 鍨嬪彿瑙勬牸
+     */
+    @ApiModelProperty(name = "鍨嬪彿瑙勬牸")
+    @TableField("specifications")
+    private String specifications;
+    /**
+     * 鍗曚綅
+     */
+    @ApiModelProperty(name = "鍗曚綅")
+    @TableField("unit")
+    private String unit;
+    /**
+     * 鏁伴噺
+     */
+    @ApiModelProperty(name = "鏁伴噺")
+    @TableField("number")
+    private Integer number;
+    /**
+     * 鐘舵��,0:寰呯紪鍒�;1:宸茬紪鍒�
+     */
+    @ApiModelProperty(name = "鐘舵��,0:寰呯紪鍒�;1:宸茬紪鍒�")
+    @TableField("state")
+    private Integer state;
+    /**
+     * 涓嬪崟浜�
+     */
+    @ApiModelProperty(name = "涓嬪崟浜�")
+    @TableField("username")
+    private String username;
+    /**
+     * 涓嬪崟鏃ユ湡
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "涓嬪崟鏃ユ湡", hidden = true)
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true)
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date updateTime;
+    /**
+     * 浜よ揣鏃ユ湡
+     */
+    @ApiModelProperty(name = "浜よ揣鏃ユ湡")
+    @TableField("delivery_time")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date deliveryTime;
+    /**
+     * 瀹㈡埛鍚嶇О
+     */
+    @ApiModelProperty(name = "瀹㈡埛鍚嶇О")
+    @TableField("custname")
+    private String custname;
+    /**
+     * 鐪佷唤
+     */
+    @ApiModelProperty(name = "鐪佷唤")
+    @TableField("province")
+    private String province;
+    /**
+     * 閮ㄩ棬
+     */
+    @ApiModelProperty(name = "閮ㄩ棬")
+    @TableField("department")
+    private String department;
+    /**
+     * 涓氬姟鍛�
+     */
+    @ApiModelProperty(name = "涓氬姟鍛�")
+    @TableField("salesman")
+    private String salesman;
+}
+
diff --git a/standard-server/src/main/java/com/yuanchu/mom/pojo/Product.java b/standard-server/src/main/java/com/yuanchu/mom/pojo/Product.java
new file mode 100644
index 0000000..85018af
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/pojo/Product.java
@@ -0,0 +1,75 @@
+package com.yuanchu.mom.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ *
+ * @TableName product
+ */
+@TableName(value ="product")
+@Data
+public class Product implements Serializable {
+    /**
+     * 椤圭洰id
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 椤圭洰鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 椤圭洰鐖剁被
+     */
+    private String father;
+
+    /**
+     * 鍗曚綅
+     */
+    private String unit;
+
+    /**
+     * 鏍囧噯鍊�
+     */
+    private String required;
+
+    /**
+     * 鍐呮帶鍊�
+     */
+    private String internal;
+
+    @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0", hidden = true)
+    @TableLogic(value = "1", delval = "0")
+    private Integer state;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+
+    @ApiModelProperty(value = "涔愯閿�", hidden = true)
+    @Version
+    private Integer version;
+
+    /**
+     * 鍏宠仈 鍨嬪彿id
+     */
+    private Integer specificationsId;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}
diff --git a/standard-server/src/main/java/com/yuanchu/mom/pojo/Specifications.java b/standard-server/src/main/java/com/yuanchu/mom/pojo/Specifications.java
new file mode 100644
index 0000000..4a89010
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/pojo/Specifications.java
@@ -0,0 +1,55 @@
+package com.yuanchu.mom.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ *
+ * @TableName specifications
+ */
+@TableName(value ="specifications")
+@Data
+public class Specifications implements Serializable {
+    /**
+     *
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 瑙勬牸鍚嶇О
+     */
+    private String name;
+
+    @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0", hidden = true)
+    @TableLogic(value = "1", delval = "0")
+    private Integer state;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+
+    @ApiModelProperty(value = "涔愯閿�", hidden = true)
+    @Version
+    private Integer version;
+
+    /**
+     * 鍏宠仈 鏍囧噯id
+     */
+    private Integer standardId;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}
diff --git a/standard-server/src/main/java/com/yuanchu/mom/pojo/Standard.java b/standard-server/src/main/java/com/yuanchu/mom/pojo/Standard.java
new file mode 100644
index 0000000..df175df
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/pojo/Standard.java
@@ -0,0 +1,56 @@
+package com.yuanchu.mom.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 io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ *
+ * @TableName standard
+ */
+@TableName(value ="standard")
+@Data
+public class Standard implements Serializable {
+    /**
+     *
+     */
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 鏍囧噯鍚嶇О
+     */
+    private String name;
+
+    @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0", hidden = true)
+    @TableLogic(value = "1", delval = "0")
+    private Integer state;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+
+    @ApiModelProperty(value = "涔愯閿�", hidden = true)
+    @Version
+    private Integer version;
+
+    /**
+     * 鍏宠仈 鐗╂枡id
+     */
+    private Integer material_id;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+}
diff --git a/standard-server/src/main/java/com/yuanchu/mom/pojo/Technology.java b/standard-server/src/main/java/com/yuanchu/mom/pojo/Technology.java
new file mode 100644
index 0000000..c1754bd
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/pojo/Technology.java
@@ -0,0 +1,63 @@
+package com.yuanchu.mom.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.time.LocalDate;
+import java.io.Serializable;
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-07-31
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="Technology瀵硅薄", description="")
+public class Technology implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "宸ヨ壓id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "宸ヨ壓鍚嶇О")
+    private String name;
+
+    private String quota;
+
+    @ApiModelProperty(value = "璁惧缁�")
+    private String deviceGroup;
+
+    @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0", hidden = true)
+    @TableLogic(value = "1", delval = "0")
+    private Integer state;
+
+    @TableField(fill = FieldFill.INSERT)
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+
+    @ApiModelProperty(value = "鍏宠仈 瑙勬牸id")
+    private Integer specificationsId;
+
+    @ApiModelProperty(value = "鍏宠仈 璁惧id")
+    private Integer deviceId;
+
+
+}
diff --git a/standard-server/src/main/java/com/yuanchu/mom/pojo/dto/MaterialTreeDto.java b/standard-server/src/main/java/com/yuanchu/mom/pojo/dto/MaterialTreeDto.java
new file mode 100644
index 0000000..1b26fcb
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/pojo/dto/MaterialTreeDto.java
@@ -0,0 +1,20 @@
+package com.yuanchu.mom.pojo.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class MaterialTreeDto {
+
+    private Integer id;
+
+    private String name;
+
+    private Integer type;
+
+    private String code = "[2]";
+
+    List<StandardDto> children;
+
+}
diff --git a/standard-server/src/main/java/com/yuanchu/mom/pojo/dto/ProductDto.java b/standard-server/src/main/java/com/yuanchu/mom/pojo/dto/ProductDto.java
new file mode 100644
index 0000000..08ec5bf
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/pojo/dto/ProductDto.java
@@ -0,0 +1,16 @@
+package com.yuanchu.mom.pojo.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class ProductDto {
+
+    /**
+     * 椤圭洰鍚嶇О
+     */
+    private String father;
+
+    List<ProductDto2> children;
+}
diff --git a/standard-server/src/main/java/com/yuanchu/mom/pojo/dto/ProductDto2.java b/standard-server/src/main/java/com/yuanchu/mom/pojo/dto/ProductDto2.java
new file mode 100644
index 0000000..15e8a3f
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/pojo/dto/ProductDto2.java
@@ -0,0 +1,29 @@
+package com.yuanchu.mom.pojo.dto;
+
+import lombok.Data;
+
+@Data
+public class ProductDto2 {
+    private Integer id;
+
+    /**
+     * 椤圭洰鍚嶇О
+     */
+    private String name;
+
+    /**
+     * 鍗曚綅
+     */
+    private String unit;
+
+    /**
+     * 鏍囧噯鍊�
+     */
+    private String required;
+
+    /**
+     * 鍐呮帶鍊�
+     */
+    private String internal;
+
+}
diff --git a/standard-server/src/main/java/com/yuanchu/mom/pojo/dto/SpecificationsDto.java b/standard-server/src/main/java/com/yuanchu/mom/pojo/dto/SpecificationsDto.java
new file mode 100644
index 0000000..62ffdb6
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/pojo/dto/SpecificationsDto.java
@@ -0,0 +1,15 @@
+package com.yuanchu.mom.pojo.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+class SpecificationsDto {
+    private Integer id;
+
+    private String name;
+
+    private String code = "[4]";
+
+}
diff --git a/standard-server/src/main/java/com/yuanchu/mom/pojo/dto/StandardDto.java b/standard-server/src/main/java/com/yuanchu/mom/pojo/dto/StandardDto.java
new file mode 100644
index 0000000..2796d34
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/pojo/dto/StandardDto.java
@@ -0,0 +1,17 @@
+package com.yuanchu.mom.pojo.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+class StandardDto {
+    private Integer id;
+
+    private String name;
+
+    private String code = "[3]";
+
+    List<SpecificationsDto> children;
+}
+
diff --git a/standard-server/src/main/java/com/yuanchu/mom/service/DeviceService.java b/standard-server/src/main/java/com/yuanchu/mom/service/DeviceService.java
new file mode 100644
index 0000000..5890ff7
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/service/DeviceService.java
@@ -0,0 +1,28 @@
+package com.yuanchu.mom.service;
+
+import com.yuanchu.mom.pojo.Device;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-07-31
+ */
+public interface DeviceService extends IService<Device> {
+
+    Map<String, Object> selectTechnology(String deviceGroup);
+
+    List<Device> selectDevice();
+
+    /**
+     * 鏍规嵁璁惧id鏌ヨ璁惧鍚嶇О
+     * @param id
+     */
+    String getDeviceNameById(Integer id);
+}
diff --git a/standard-server/src/main/java/com/yuanchu/mom/service/MaterialService.java b/standard-server/src/main/java/com/yuanchu/mom/service/MaterialService.java
new file mode 100644
index 0000000..4268c33
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/service/MaterialService.java
@@ -0,0 +1,43 @@
+package com.yuanchu.mom.service;
+
+import com.yuanchu.mom.pojo.Material;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yuanchu.mom.pojo.dto.MaterialTreeDto;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恗aterial銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2023-07-26 15:52:50
+*/
+public interface MaterialService extends IService<Material> {
+
+    List<MaterialTreeDto> selectTreeByMaterial();
+
+    /**
+     * 鏍规嵁鐗╂枡鍚嶇О鏌ヨ鐗╂枡id鍜岀墿鏂欑紪鐮�
+     * @param name
+     * @return
+     */
+    List<Material> selectMcodeId(String name);
+
+    /**
+     * 鏍规嵁鐗╂枡鍚嶇О鍜岀墿鏂欑紪鐮佹煡璇㈢墿鏂檌d
+     * @param name
+     * @param code
+     * @return
+     */
+    List<Map> selectIdByCoNa(String name, String code);
+    /**
+     * 妫�楠屾ā鍧�-->OMS绠$悊-->鎴愬搧妫�楠�-->鏂板(椤圭洰鍚嶇О涓嬫媺妗嗭細Id涓庡悕绉帮紝缂栫爜)
+     */
+    List<Map<String, Object>> selectMaterialIdAndNameAndCode();
+
+    /**
+     * 鏌ヨ鎵�鏈夌墿鏂欎俊鎭�
+     * @return
+     */
+    List<Material> selectMaterial();
+}
diff --git a/standard-server/src/main/java/com/yuanchu/mom/service/OrdersService.java b/standard-server/src/main/java/com/yuanchu/mom/service/OrdersService.java
new file mode 100644
index 0000000..36ee978
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/service/OrdersService.java
@@ -0,0 +1,27 @@
+package com.yuanchu.mom.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yuanchu.mom.pojo.Orders;
+
+import java.util.Map;
+
+/**
+ * 璁㈠崟(Order)琛ㄦ湇鍔℃帴鍙�
+ *
+ * @author zss
+ * @since 2023-07-31 11:57:44
+ */
+public interface OrdersService extends IService<Orders> {
+    /**
+     * 鏌ヨ鎵�鏈夎鍗曞垪琛�
+     *
+     * @param
+     * @return
+     */
+    IPage<Map<String, Object>> selectAllOrder(Page<Object> page, Integer id, String name, Integer state , String time);
+
+
+}
+
diff --git a/standard-server/src/main/java/com/yuanchu/mom/service/ProductService.java b/standard-server/src/main/java/com/yuanchu/mom/service/ProductService.java
new file mode 100644
index 0000000..99cbeff
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/service/ProductService.java
@@ -0,0 +1,20 @@
+package com.yuanchu.mom.service;
+
+import com.yuanchu.mom.pojo.Product;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yuanchu.mom.pojo.dto.ProductDto;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恜roduct銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2023-07-26 16:00:44
+*/
+public interface ProductService extends IService<Product> {
+
+    List<ProductDto> selectTreeProduct(String specifications, String project);
+
+    List<Map<String, Object>> selectProductList(Integer specificationsId);
+}
diff --git a/standard-server/src/main/java/com/yuanchu/mom/service/SpecificationsService.java b/standard-server/src/main/java/com/yuanchu/mom/service/SpecificationsService.java
new file mode 100644
index 0000000..bcba5e7
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/service/SpecificationsService.java
@@ -0,0 +1,33 @@
+package com.yuanchu.mom.service;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yuanchu.mom.pojo.Material;
+import com.yuanchu.mom.pojo.Specifications;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恠pecifications銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2023-07-26 16:01:49
+*/
+public interface SpecificationsService extends IService<Specifications> {
+
+
+    /**
+     * 鏍规嵁瑙勬牸id鍜屽瀷鍙峰悕绉版煡璇㈠瀷鍙蜂俊鎭�
+     * @param id
+     * @param name
+     * @return
+     */
+    Specifications selectSpIdByname(Integer id, String name);
+
+    /**
+     * 妫�楠屾ā鍧�-->OMS绠$悊-->鎴愬搧妫�楠�-->鏂板(闇�瑕佽鏍煎瀷鍙风殑Id涓庡悕绉�)
+     */
+    List<Map<String, Object>> selectSpecificationIdAndName(Integer materialId);
+}
diff --git a/standard-server/src/main/java/com/yuanchu/mom/service/StandardService.java b/standard-server/src/main/java/com/yuanchu/mom/service/StandardService.java
new file mode 100644
index 0000000..8461cf4
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/service/StandardService.java
@@ -0,0 +1,13 @@
+package com.yuanchu.mom.service;
+
+import com.yuanchu.mom.pojo.Standard;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恠tandard銆戠殑鏁版嵁搴撴搷浣淪ervice
+* @createDate 2023-07-26 15:59:05
+*/
+public interface StandardService extends IService<Standard> {
+
+}
diff --git a/standard-server/src/main/java/com/yuanchu/mom/service/TechnologyService.java b/standard-server/src/main/java/com/yuanchu/mom/service/TechnologyService.java
new file mode 100644
index 0000000..b6935c8
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/service/TechnologyService.java
@@ -0,0 +1,20 @@
+package com.yuanchu.mom.service;
+
+import com.yuanchu.mom.pojo.Technology;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-07-31
+ */
+public interface TechnologyService extends IService<Technology> {
+
+    List<Map<String, Object>> selectTechnology(String technologyName);
+}
diff --git a/standard-server/src/main/java/com/yuanchu/mom/service/impl/DeviceServiceImpl.java b/standard-server/src/main/java/com/yuanchu/mom/service/impl/DeviceServiceImpl.java
new file mode 100644
index 0000000..629fb2c
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/service/impl/DeviceServiceImpl.java
@@ -0,0 +1,59 @@
+package com.yuanchu.mom.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.yuanchu.mom.pojo.Device;
+import com.yuanchu.mom.mapper.DeviceMapper;
+import com.yuanchu.mom.service.DeviceService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yuanchu.mom.utils.MyUtil;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-07-31
+ */
+@Service
+public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> implements DeviceService {
+
+    @Resource
+    private DeviceMapper deviceMapper;
+
+    @Override
+    public Map<String, Object> selectTechnology(String deviceGroup) {
+        String[] split = deviceGroup.split("\\+");
+        Map<String, Object> map = new HashMap<>();
+        for (String str : split){
+            LambdaQueryWrapper<Device> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(Device::getFather, str);
+            wrapper.select(Device::getId, Device::getName);
+            List<Map<String, Object>> maps = deviceMapper.selectMaps(wrapper);
+            map.put("first", str);
+            map.put("children", maps);
+        }
+        return map;
+    }
+
+    //鏌ヨ鎵�鏈夎澶�
+    @Override
+    public List<Device> selectDevice() {
+        return deviceMapper.selectList(new QueryWrapper<>());
+    }
+
+    //鏍规嵁璁惧id鑾峰彇璁惧鍚嶇О
+    @Override
+    public String getDeviceNameById(Integer id) {
+        Device device = deviceMapper.selectById(id);
+       return device.getName();
+    }
+}
diff --git a/standard-server/src/main/java/com/yuanchu/mom/service/impl/MaterialServiceImpl.java b/standard-server/src/main/java/com/yuanchu/mom/service/impl/MaterialServiceImpl.java
new file mode 100644
index 0000000..722e4c3
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/service/impl/MaterialServiceImpl.java
@@ -0,0 +1,64 @@
+package com.yuanchu.mom.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yuanchu.mom.pojo.Material;
+import com.yuanchu.mom.pojo.dto.MaterialTreeDto;
+import com.yuanchu.mom.service.MaterialService;
+import com.yuanchu.mom.mapper.MaterialMapper;
+import com.yuanchu.mom.utils.JackSonUtil;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Administrator
+ * @description 閽堝琛ㄣ�恗aterial銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+ * @createDate 2023-07-26 15:52:50
+ */
+@Service
+public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, Material>
+        implements MaterialService {
+
+    @Resource
+    MaterialMapper materialMapper;
+
+    @Override
+    public List<MaterialTreeDto> selectTreeByMaterial() {
+        List<MaterialTreeDto> materialTreeDtos = materialMapper.selectTreeByMaterial();
+        materialTreeDtos.forEach(System.out::println);
+        return materialMapper.selectTreeByMaterial();
+    }
+
+    @Override
+    public List<Map<String, Object>> selectMaterialIdAndNameAndCode() {
+        LambdaQueryWrapper<Material> wrapper = new LambdaQueryWrapper<>();
+        wrapper.select(Material::getId, Material::getName, Material::getCode);
+        return materialMapper.selectMaps(wrapper);
+    }
+
+    //鏌ヨ鎵�鏈夌墿鏂欎俊鎭�
+    @Override
+    public List<Material> selectMaterial() {
+        return materialMapper.selectList(Wrappers.<Material>query());
+    }
+
+    //鏍规嵁鐗╂枡鍚嶇О鏌ヨ鐗╂枡id鍜岀墿鏂欑紪鐮�
+    @Override
+    public List<Material> selectMcodeId(String name) {
+        return materialMapper.selectMcodeId(name);
+    }
+
+    //鏍规嵁鐗╂枡鍚嶇О鍜岀墿鏂欑紪鐮佹煡璇㈢墿鏂檌d,瑙勬牸淇℃伅鍜屽瀷鍙蜂俊鎭�
+    @Override
+    public List<Map> selectIdByCoNa(String name, String code) {
+        return materialMapper.selectIdByCoNa(name,code);
+    }
+}
+
+
+
+
diff --git a/standard-server/src/main/java/com/yuanchu/mom/service/impl/OrdersServiceImpl.java b/standard-server/src/main/java/com/yuanchu/mom/service/impl/OrdersServiceImpl.java
new file mode 100644
index 0000000..da8680b
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/service/impl/OrdersServiceImpl.java
@@ -0,0 +1,35 @@
+package com.yuanchu.mom.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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yuanchu.mom.mapper.OrdersMapper;
+import com.yuanchu.mom.pojo.Orders;
+import com.yuanchu.mom.service.OrdersService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 璁㈠崟(Order)琛ㄦ湇鍔″疄鐜扮被
+ *
+ * @author zss
+ * @since 2023-07-31 11:57:44
+ */
+@Service("orderService")
+public class OrdersServiceImpl extends ServiceImpl<OrdersMapper, Orders> implements OrdersService {
+
+    @Resource
+    OrdersMapper orderMapper;
+
+    //鏌ヨ鎵�鏈夎鍗曞垪琛�
+    @Override
+    public IPage<Map<String, Object>> selectAllOrder(Page<Object> page, Integer id, String name, Integer state , String time) {
+        return  orderMapper.selectAllOrder(page, id,name,state, time);
+    }
+
+}
+
diff --git a/standard-server/src/main/java/com/yuanchu/mom/service/impl/ProductServiceImpl.java b/standard-server/src/main/java/com/yuanchu/mom/service/impl/ProductServiceImpl.java
new file mode 100644
index 0000000..331d83d
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/service/impl/ProductServiceImpl.java
@@ -0,0 +1,42 @@
+package com.yuanchu.mom.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yuanchu.mom.pojo.Product;
+import com.yuanchu.mom.pojo.dto.ProductDto;
+import com.yuanchu.mom.service.ProductService;
+import com.yuanchu.mom.mapper.ProductMapper;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+* @author Administrator
+* @description 閽堝琛ㄣ�恜roduct銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+* @createDate 2023-07-26 16:00:44
+*/
+@Service
+public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService{
+
+    @Resource
+    private ProductMapper productMapper;
+
+    @Override
+    public List<ProductDto> selectTreeProduct(String specifications, String project) {
+        return productMapper.selectTreeProduct(specifications, project);
+    }
+
+    @Override
+    public List<Map<String, Object>> selectProductList(Integer specificationsId) {
+        LambdaQueryWrapper<Product> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(Product::getSpecificationsId, specificationsId);
+        wrapper.select(Product::getName, Product::getFather, Product::getRequired, Product::getInternal, Product::getUnit);
+        return productMapper.selectMaps(wrapper);
+    }
+}
+
+
+
+
diff --git a/standard-server/src/main/java/com/yuanchu/mom/service/impl/SpecificationsServiceImpl.java b/standard-server/src/main/java/com/yuanchu/mom/service/impl/SpecificationsServiceImpl.java
new file mode 100644
index 0000000..75ea50f
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/service/impl/SpecificationsServiceImpl.java
@@ -0,0 +1,53 @@
+package com.yuanchu.mom.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yuanchu.mom.mapper.SpecificationsMapper;
+import com.yuanchu.mom.pojo.Specifications;
+import com.yuanchu.mom.service.SpecificationsService;
+import com.yuanchu.mom.utils.MyUtil;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Administrator
+ * @description 閽堝琛ㄣ�恠pecifications銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+ * @createDate 2023-07-26 16:01:49
+ */
+@Service
+public class SpecificationsServiceImpl extends ServiceImpl<SpecificationsMapper, Specifications>
+        implements SpecificationsService {
+
+    @Resource
+    private SpecificationsMapper specificationsMapper;
+
+    /**
+     * 妫�楠屾ā鍧�-->OMS绠$悊-->鎴愬搧妫�楠�-->鏂板(闇�瑕佽鏍煎瀷鍙风殑Id涓庡悕绉�)
+     */
+    @Override
+    public List<Map<String, Object>> selectSpecificationIdAndName(Integer materialId) {
+        List<Map<String, Object>> maps = specificationsMapper.selectSpecificationIdAndName(materialId);
+        return maps;
+    }
+
+
+    //鏍规嵁瑙勬牸id鍜屽瀷鍙峰悕绉版煡璇㈠瀷鍙蜂俊鎭�
+    @Override
+    public Specifications selectSpIdByname(Integer id, String name) {
+        Specifications specifications = specificationsMapper.selectOne(Wrappers.<Specifications>query()
+                .eq("standard_id", id)
+                .eq("name", name));
+        return specifications;
+    }
+}
+
+
+
+
diff --git a/standard-server/src/main/java/com/yuanchu/mom/service/impl/StandardServiceImpl.java b/standard-server/src/main/java/com/yuanchu/mom/service/impl/StandardServiceImpl.java
new file mode 100644
index 0000000..f52274f
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/service/impl/StandardServiceImpl.java
@@ -0,0 +1,21 @@
+package com.yuanchu.mom.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yuanchu.mom.pojo.Standard;
+import com.yuanchu.mom.service.StandardService;
+import com.yuanchu.mom.mapper.StandardMapper;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author Administrator
+ * @description 閽堝琛ㄣ�恠tandard銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+ * @createDate 2023-07-26 15:59:05
+ */
+@Service
+public class StandardServiceImpl extends ServiceImpl<StandardMapper, Standard> implements StandardService {
+
+}
+
+
+
+
diff --git a/standard-server/src/main/java/com/yuanchu/mom/service/impl/TechnologyServiceImpl.java b/standard-server/src/main/java/com/yuanchu/mom/service/impl/TechnologyServiceImpl.java
new file mode 100644
index 0000000..917cefd
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/mom/service/impl/TechnologyServiceImpl.java
@@ -0,0 +1,38 @@
+package com.yuanchu.mom.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.yuanchu.mom.pojo.Technology;
+import com.yuanchu.mom.mapper.TechnologyMapper;
+import com.yuanchu.mom.service.TechnologyService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-07-31
+ */
+@Service
+public class TechnologyServiceImpl extends ServiceImpl<TechnologyMapper, Technology> implements TechnologyService {
+
+    @Resource
+    private TechnologyMapper technologyMapper;
+
+    @Override
+    public List<Map<String, Object>> selectTechnology(String technologyName) {
+        LambdaQueryWrapper<Technology> wrapper = new LambdaQueryWrapper<>();
+        if (!ObjectUtils.isEmpty(technologyName)){
+            wrapper.like(Technology::getName, technologyName);
+        }
+        wrapper.select(Technology::getId, Technology::getName, Technology::getDeviceGroup, Technology::getQuota);
+        return technologyMapper.selectMaps(wrapper);
+    }
+}
diff --git a/standard-server/src/main/resources/mapper/DeviceMapper.xml b/standard-server/src/main/resources/mapper/DeviceMapper.xml
new file mode 100644
index 0000000..6c95802
--- /dev/null
+++ b/standard-server/src/main/resources/mapper/DeviceMapper.xml
@@ -0,0 +1,11 @@
+<?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.mom.mapper.DeviceMapper">
+
+    <select id="selectDeviceTables" resultType="map">
+        SELECT d.`id`, d.`name`, d.`father`,t.`quota`
+        FROM device d, technology t
+        WHERE d.`state` = 1
+          AND d.`id` = t.`device_id`
+    </select>
+</mapper>
diff --git a/standard-server/src/main/resources/mapper/MaterialMapper.xml b/standard-server/src/main/resources/mapper/MaterialMapper.xml
new file mode 100644
index 0000000..3609c3b
--- /dev/null
+++ b/standard-server/src/main/resources/mapper/MaterialMapper.xml
@@ -0,0 +1,70 @@
+<?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.mom.mapper.MaterialMapper">
+    <resultMap id="BaseResultMap" type="Material">
+        <id property="id" column="id" jdbcType="INTEGER"/>
+        <result property="code" column="code" jdbcType="VARCHAR"/>
+        <result property="name" column="name" jdbcType="VARCHAR"/>
+        <result property="type" column="type" jdbcType="INTEGER"/>
+        <result property="state" column="state" jdbcType="INTEGER"/>
+        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+        <result property="version" column="version" jdbcType="INTEGER"/>
+    </resultMap>
+
+    <resultMap id="materialTreeDto" type="materialTreeDto">
+        <id property="id" column="mid"/>
+        <result property="name" column="mname"/>
+        <result property="type" column="type"/>
+        <association property="children" resultMap="standardDto"/>
+    </resultMap>
+    <resultMap id="standardDto" type="standardDto">
+        <id property="id" column="sid"/>
+        <result property="name" column="sname"/>
+        <association property="children" resultMap="specificationsDto"/>
+    </resultMap>
+    <resultMap id="specificationsDto" type="specificationsDto">
+        <id property="id" column="spid"/>
+        <result property="name" column="spname"/>
+    </resultMap>
+
+    <select id="selectTreeByMaterial" resultMap="materialTreeDto">
+        select m.type,
+               m.id    mid,
+               m.name  mname,
+               s.id    sid,
+               s.name  sname,
+               s2.id   spid,
+               s2.name spname,
+               p.id    pid,
+               p.name  pname
+        from (select type, id, name from material where state = 1) m
+                 left join (select id, name, material_id from standard where state = 1) s on m.id = s.material_id
+                 left join (select id, name, standard_id from specifications where state = 1) s2
+                           on s2.standard_id = s.id
+                 left join (select id, name, specifications_id from product where state = 1) p
+                           on s2.id = p.specifications_id
+    </select>
+
+    <select id="selectMcodeId" resultType="com.yuanchu.mom.pojo.Material">
+        select id, code
+        from mom_ocean.material
+        where name = #{name}
+    </select>
+
+    <select id="selectIdByCoNa" resultType="java.util.Map">
+        select m.id     '鐗╂枡id',
+               st.id    '瑙勬牸id',
+               st.name  '瑙勬牸鍚嶇О',
+               sp.name  '鍨嬪彿鍚嶇О'
+        from mom_ocean.material m,
+             mom_ocean.standard st,
+             mom_ocean.specifications sp
+        where m.id = material_id
+          and material_id = standard_id
+          and m.name = #{name}
+          and code = #{code}
+    </select>
+</mapper>
diff --git a/standard-server/src/main/resources/mapper/OrdersMapper.xml b/standard-server/src/main/resources/mapper/OrdersMapper.xml
new file mode 100644
index 0000000..a668608
--- /dev/null
+++ b/standard-server/src/main/resources/mapper/OrdersMapper.xml
@@ -0,0 +1,36 @@
+<?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.mom.mapper.OrdersMapper">
+    <select id="selectAllOrder" resultType="java.util.Map">
+        select o.id,
+        department,
+        province,
+        salesman,
+        proname,
+        m.name,
+        specifications,
+        o.type,
+        unit,
+        number,
+        DATE_FORMAT(o.create_time, '%Y-%m-%d') ,
+        DATE_FORMAT(delivery_time, '%Y-%m-%d'),
+        o.state
+        from mom_ocean.orders o,mom_ocean.material m
+        <where>
+            <if test="id != null">
+                and o.id = #{id}
+            </if>
+            <if test="time != null">
+                and o.create_time = #{time}
+            </if>
+            <if test="name != null">
+                and m.name = #{name}
+            </if>
+            <if test="state != null">
+                and o.state = #{state}
+            </if>
+            and o.code=m.code
+        </where>
+        order by o.create_time desc
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/standard-server/src/main/resources/mapper/ProductMapper.xml b/standard-server/src/main/resources/mapper/ProductMapper.xml
new file mode 100644
index 0000000..cee2fea
--- /dev/null
+++ b/standard-server/src/main/resources/mapper/ProductMapper.xml
@@ -0,0 +1,44 @@
+<?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.mom.mapper.ProductMapper">
+
+    <resultMap id="BaseResultMap" type="com.yuanchu.mom.pojo.Product">
+            <id property="id" column="id" jdbcType="INTEGER"/>
+            <result property="name" column="name" jdbcType="VARCHAR"/>
+            <result property="father" column="father" jdbcType="VARCHAR"/>
+            <result property="unit" column="unit" jdbcType="VARCHAR"/>
+            <result property="required" column="required" jdbcType="VARCHAR"/>
+            <result property="internal" column="internal" jdbcType="VARCHAR"/>
+            <result property="state" column="state" jdbcType="INTEGER"/>
+            <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+            <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+            <result property="version" column="version" jdbcType="INTEGER"/>
+            <result property="specificationsId" column="specifications_id" jdbcType="INTEGER"/>
+    </resultMap>
+
+    <resultMap id="selectTreeProduct" type="ProductDto">
+        <id property="father" column="father" jdbcType="VARCHAR"/>
+        <collection property="children" resultMap="productDto2ListMap"/>
+    </resultMap>
+
+    <resultMap id="productDto2ListMap" type="ProductDto2">
+        <id property="id" column="id" jdbcType="INTEGER"/>
+        <result property="name" column="name" jdbcType="VARCHAR"/>
+        <result property="unit" column="unit" jdbcType="VARCHAR"/>
+        <result property="required" column="required" jdbcType="VARCHAR"/>
+        <result property="internal" column="internal" jdbcType="VARCHAR"/>
+        <result property="state" column="state" jdbcType="INTEGER"/>
+    </resultMap>
+
+    <select id="selectTreeProduct" resultMap="selectTreeProduct">
+        SELECT p.id, p.`name`, IFNULL(p.`father`,p.`name`) father, p.`unit`, p.`required`, p.`internal`
+        FROM product p
+        where p.specifications_id = #{specifications}
+          <if test="project != null and project != ''">
+              AND p.father like concat('%',#{project},'%')
+          </if>
+        and p.state = 1
+    </select>
+</mapper>
diff --git a/standard-server/src/main/resources/mapper/SpecificationsMapper.xml b/standard-server/src/main/resources/mapper/SpecificationsMapper.xml
new file mode 100644
index 0000000..56e6f92
--- /dev/null
+++ b/standard-server/src/main/resources/mapper/SpecificationsMapper.xml
@@ -0,0 +1,30 @@
+<?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.mom.mapper.SpecificationsMapper">
+    <resultMap id="BaseResultMap" type="java.util.Map">
+        <id property="id" column="specificationsId" jdbcType="INTEGER"/>
+        <result property="name" column="specificationsName" jdbcType="VARCHAR"/>
+        <collection property="children" resultMap="BaseResultMapChildren" javaType="java.util.List"/>
+    </resultMap>
+    <resultMap id="BaseResultMapChildren" type="java.util.Map">
+        <id property="id" column="modelId" jdbcType="INTEGER"/>
+        <result property="name" column="modelName" jdbcType="VARCHAR"/>
+    </resultMap>
+
+    <select id="selectSpecificationIdAndName" resultMap="BaseResultMap">
+        SELECT s.`id` specificationsId, s.`name` specificationsName, f.id modelId, f.name modelName
+        FROM standard s
+                 LEFT JOIN (SELECT f.`id`, f.`name`, f.`standard_id` FROM specifications f WHERE f.`state` = 1) f
+                           ON s.`id` = f.`standard_id`
+        WHERE s.`material_id` = #{materialId}
+          AND s.`state` = 1
+    </select>
+
+    <select id="selectSpBySt" resultType="com.yuanchu.mom.pojo.Specifications">
+        select name
+        from mom_ocean.specifications
+        where standard_id = #{id}
+    </select>
+</mapper>
diff --git a/standard-server/src/main/resources/mapper/StandardMapper.xml b/standard-server/src/main/resources/mapper/StandardMapper.xml
new file mode 100644
index 0000000..fc38593
--- /dev/null
+++ b/standard-server/src/main/resources/mapper/StandardMapper.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yuanchu.mom.mapper.StandardMapper">
+
+    <resultMap id="BaseResultMap" type="com.yuanchu.mom.pojo.Standard">
+            <id property="id" column="id" jdbcType="INTEGER"/>
+            <result property="name" column="name" jdbcType="VARCHAR"/>
+            <result property="state" column="state" jdbcType="INTEGER"/>
+            <result property="create_time" column="create_time" jdbcType="TIMESTAMP"/>
+            <result property="update_time" column="update_time" jdbcType="TIMESTAMP"/>
+            <result property="version" column="version" jdbcType="INTEGER"/>
+            <result property="material_id" column="material_id" jdbcType="INTEGER"/>
+    </resultMap>
+
+</mapper>
diff --git a/standard-server/src/main/resources/mapper/TechnologyMapper.xml b/standard-server/src/main/resources/mapper/TechnologyMapper.xml
new file mode 100644
index 0000000..1a5c4fe
--- /dev/null
+++ b/standard-server/src/main/resources/mapper/TechnologyMapper.xml
@@ -0,0 +1,5 @@
+<?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.mom.mapper.TechnologyMapper">
+
+</mapper>
diff --git a/standard-server/src/test/java/com/yuanchu/mom/StandardServerApplicationTests.java b/standard-server/src/test/java/com/yuanchu/mom/StandardServerApplicationTests.java
new file mode 100644
index 0000000..1c8de3c
--- /dev/null
+++ b/standard-server/src/test/java/com/yuanchu/mom/StandardServerApplicationTests.java
@@ -0,0 +1,13 @@
+package com.yuanchu.mom;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class StandardServerApplicationTests {
+
+    @Test
+    void contextLoads() {
+    }
+
+}
diff --git a/system-run/pom.xml b/system-run/pom.xml
new file mode 100644
index 0000000..0e976dc
--- /dev/null
+++ b/system-run/pom.xml
@@ -0,0 +1,74 @@
+<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>mom</artifactId>
+        <groupId>com.yuanchu.mom</groupId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>system-run</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>system-run</name>
+    <description>system-run</description>
+    <packaging>pom</packaging>
+
+    <dependencies>
+        <!--鍩虹妗嗘灦绫�-->
+        <dependency>
+            <groupId>com.yuanchu.mom</groupId>
+            <artifactId>framework</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.yuanchu.mom</groupId>
+            <artifactId>user-server</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.yuanchu.mom</groupId>
+            <artifactId>standard-server</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.yuanchu.mom</groupId>
+            <artifactId>inspect-server</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+
+
+        <!--druid-->
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>druid</artifactId>
+        </dependency>
+
+        <!--mybatis-plus-->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+        </dependency>
+
+        <!--mybatis-plus浠g爜鐢熸垚鍣�-->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-generator</artifactId>
+        </dependency>
+
+        <!-- framework: mybatis-plus浠g爜鐢熸垚闇�瑕佷竴涓ā鏉垮紩鎿� -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-freemarker</artifactId>
+        </dependency>
+
+        <!--mysql-->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/system-run/src/main/java/com/yuanchu/mom/CodeGenerator.java b/system-run/src/main/java/com/yuanchu/mom/CodeGenerator.java
new file mode 100644
index 0000000..fa7be4d
--- /dev/null
+++ b/system-run/src/main/java/com/yuanchu/mom/CodeGenerator.java
@@ -0,0 +1,129 @@
+package com.yuanchu.mom;
+
+import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.generator.AutoGenerator;
+import com.baomidou.mybatisplus.generator.InjectionConfig;
+import com.baomidou.mybatisplus.generator.config.*;
+import com.baomidou.mybatisplus.generator.config.po.TableInfo;
+import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
+import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+
+// 婕旂ず渚嬪瓙锛屾墽琛� 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_driver_name = "com.mysql.cj.jdbc.Driver";
+    public static String database_username = "root";
+    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 Boolean Override = false; // 鏄惁瑕嗙洊鍘熸潵鐨勬枃浠讹紵
+
+    public static void main(String[] args) {
+        // 浠g爜鐢熸垚鍣�
+        AutoGenerator mpg = new AutoGenerator();
+
+        String projectPath = System.getProperty("user.dir");
+        System.out.println(projectPath+"===================");
+
+        GlobalConfig gc = new GlobalConfig() // 鍏ㄥ眬閰嶇疆
+                .setOutputDir(projectPath + model_name + "/src/main/java") // 杈撳嚭璺緞
+                .setAuthor(author) // 浣滆�呮敞閲�
+                .setOpen(false) // 鏄惁鎵撳紑
+                .setSwagger2(true) //瀹炰綋灞炴�� Swagger2 娉ㄨВ
+                .setServiceName("%sService") // 璁剧疆serviceName鐨勫悕绉板幓澶у啓I
+                .setFileOverride(Override);// 鏄惁瑕嗙洊宸茬敓鎴愭枃浠�
+        mpg.setGlobalConfig(gc);
+
+        // 鏁版嵁婧愰厤缃� 鏁版嵁搴撳悕 璐﹀彿瀵嗙爜
+        DataSourceConfig dsc = new DataSourceConfig()
+                .setUrl(database_url)
+                .setDriverName(database_driver_name)
+                .setUsername(database_username)
+                .setPassword(database_password);
+        mpg.setDataSource(dsc);
+
+
+        // 鍖呴厤缃�
+        PackageConfig pc = new PackageConfig()
+                .setModuleName(null)
+                .setParent(setParent)
+                .setEntity("pojo");// 鍖呰矾寰�
+        mpg.setPackageInfo(pc);
+
+        // 鑷畾涔夐厤缃�
+        InjectionConfig cfg = new InjectionConfig() {
+            @Override
+            public void initMap() {
+                // to do nothing
+            }
+        };
+
+        // 濡傛灉妯℃澘寮曟搸鏄� freemarker
+        String templatePath = "/templates/mapper.xml.ftl";
+        // 濡傛灉妯℃澘寮曟搸鏄� velocity
+        // String templatePath = "/templates/mapper.xml.vm";
+
+        // 鑷畾涔夎緭鍑洪厤缃�
+        List<FileOutConfig> focList = new ArrayList<>();
+        // 鑷畾涔夐厤缃細琚紭鍏堣緭鍑�
+        focList.add(new FileOutConfig(templatePath) {
+            @Override
+            public String outputFile(TableInfo tableInfo) {
+                // 鑷畾涔夎緭鍑烘枃浠跺悕 锛� 濡傛灉浣� Entity 璁剧疆浜嗗墠鍚庣紑銆佹澶勬敞鎰� xml 鐨勫悕绉颁細璺熺潃鍙戠敓鍙樺寲锛�
+                return projectPath + model_name + "/src/main/resources/mapper/"
+                        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
+            }
+        });
+
+        cfg.setFileOutConfigList(focList);
+        mpg.setCfg(cfg);
+
+        // 閰嶇疆妯℃澘
+        TemplateConfig templateConfig = new TemplateConfig()
+                .setXml(null);
+
+        mpg.setTemplate(templateConfig);
+
+        // 绛栫暐閰嶇疆
+        StrategyConfig strategy = new StrategyConfig()
+                .setNaming(NamingStrategy.underline_to_camel)
+                .setColumnNaming(NamingStrategy.underline_to_camel)
+                .setEntityLombokModel(true)
+                .setRestControllerStyle(true)
+                .setInclude(scanner("琛ㄥ悕锛屽涓┖鏍煎垎鍓�").split(" "))
+                .setControllerMappingHyphenStyle(true)
+                .setTablePrefix("m_");
+        mpg.setStrategy(strategy);
+        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
+        //濡傛灉涓嶈皟鐢ㄨ鏂规硶銆佸氨浼氫娇鐢∕yBatis-Plus榛樿鐨勬枃浠剁敓鎴愯矾寰勫拰鍖呰矾寰勭敓鎴愭枃浠躲�佷絾鍙互浣跨敤涓婇潰鐨凱ackageConfig鍋氫竴浜涚畝鍗曠殑閰嶇疆
+        mpg.execute();
+    }
+
+    /**
+     * <p>
+     * 璇诲彇鎺у埗鍙板唴瀹�
+     * </p>
+     */
+    public static String scanner(String tip) {
+        Scanner scanner = new Scanner(System.in);
+        StringBuilder help = new StringBuilder();
+        help.append("璇疯緭鍏�" + tip + "锛�");
+        System.out.println(help.toString());
+        if (scanner.hasNext()) {
+            String ipt = scanner.next();
+
+            if (StringUtils.isNotBlank(ipt)) {
+                return ipt;
+            }
+        }
+        throw new MybatisPlusException("璇疯緭鍏ユ纭殑" + tip + "锛�");
+    }
+}
diff --git a/system-run/src/main/java/com/yuanchu/mom/SystemRunApplication.java b/system-run/src/main/java/com/yuanchu/mom/SystemRunApplication.java
new file mode 100644
index 0000000..4747d6e
--- /dev/null
+++ b/system-run/src/main/java/com/yuanchu/mom/SystemRunApplication.java
@@ -0,0 +1,15 @@
+package com.yuanchu.mom;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+@MapperScan("com.yuanchu.mom.mapper")// 鎵弿Mybatis涓殑mapper鍖�
+public class SystemRunApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(SystemRunApplication.class, args);
+    }
+
+}
diff --git a/system-run/src/main/java/com/yuanchu/mom/backup/MysqlDataBackup.java b/system-run/src/main/java/com/yuanchu/mom/backup/MysqlDataBackup.java
new file mode 100644
index 0000000..af60537
--- /dev/null
+++ b/system-run/src/main/java/com/yuanchu/mom/backup/MysqlDataBackup.java
@@ -0,0 +1,190 @@
+package com.yuanchu.mom.backup;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.io.*;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@Component
+@EnableScheduling
+@Slf4j
+public class MysqlDataBackup {
+    /**
+     * 鏁版嵁搴撶増鏈槸鍚︿负 8.0 + 锛坒alse=鍚�  true=鏄級锛� mysql8+ 闇�瑕佸弬鏁�  --column-statistics=0  锛� mysql8- 涓嶉渶瑕�
+     */
+    Boolean isDbVersion8 = false;
+
+    /**
+     * 澶囦唤鍛戒护
+     * USERNAME   璐﹀彿
+     * PASSWORD   瀵嗙爜
+     * SERVERPATH 鏈嶅姟鍣↖P/鍩熷悕
+     * DBNAME     鏁版嵁搴撳悕绉�
+     * FILEPATH   澶囦唤鏂囦欢瀛樻斁鍦板潃+鍚嶇О
+     * 璇存槑
+     * cmdCompression 锛� 闇�鍘嬬缉 锛堟湰鍦版垨鏈嶅姟鍣ㄩ渶瀹夎 mysqldump 鍛戒护(瀹夎mysql鑷甫鎮g嫭绔嬪畨瑁�) +  gzip 鍛戒护(鐙珛瀹夎)锛�
+     * cmd 锛�            涓嶅帇缂� (鏈湴鎴栨湇鍔″櫒闇�瀹夎 mysqldump 鍛戒护(瀹夎mysql鑷甫鎮g嫭绔嬪畨瑁�)
+     * --column-statistics=0     mysql8 娣诲姞璇ュ弬鏁�, 闈瀖ysql8 涓嶆坊鍔�, 鍚﹀垯灏嗗嚭閿�
+     */
+    String cmdMysql8 = "mysqldump --column-statistics=0  -u{USERNAME} -p{PASSWORD} -h{SERVERPATH} -P3306 --databases {DBNAME}"; //  > {FILEPATH}.sql
+    String cmd = "mysqldump -u{USERNAME} -p{PASSWORD} -h{SERVERPATH} -P3306 --databases {DBNAME}";      //  > {FILEPATH}.sql
+
+    /**
+     * 澶囦唤 sql 瀛樻斁鐩綍(鐩稿璺緞, 娉ㄦ剰鍙兘闇�瑕佸湪 MvcConfig 閰嶇疆璁块棶鏉冮檺)
+     */
+    @Value("${backup.path}")
+    private String filePath;
+
+    @Value("${spring.datasource.url}")
+    private String dbUrl;
+
+    @Value("${spring.datasource.username}")
+    private String dbUserName;
+
+    @Value("${spring.datasource.password}")
+    private String dbPassWord;
+
+    @Value("${backup.destiny}")
+    private Integer destiny;
+
+    @Value("${backup.mysqldump}")
+    private String mysqldump;
+
+    /**
+     * 姣忓ぉ鏅氫笂23鐐�05绉掓墽琛� 銆�  0 0 4 1/1 * ? 銆�
+     * 娴嬭瘯 20 绉掍竴娆°��  0/20 * * * * ? 銆慇Scheduled(cron = "5 * 23 * * ?")
+     */
+    @Scheduled(cron = "5 0 23 * * ?")
+    private void configureTasks() {
+        log.info("銆愬浠芥暟鎹簱銆�--START");
+        String dbUrl2 = dbUrl.replace("jdbc:mysql://", "");
+
+        // 鑾峰彇鏁版嵁搴撳悕绉�
+        String dbName = dbUrl2.substring(dbUrl2.lastIndexOf("/") + 1, dbUrl2.indexOf("?"));
+        // 鑾峰彇鏁版嵁搴撳湴鍧�
+        String serverPath = dbUrl2.substring(0, dbUrl2.lastIndexOf(":"));
+        // 鏁版嵁搴撹处鍙�
+        String username = dbUserName;
+        // 鏁版嵁搴撳瘑鐮�
+        String password = dbPassWord;
+
+        // 澶囦唤鏂囦欢鐩綍+鍚嶇О  澶囦唤鏂囦欢瀛樻斁鐩綍+鍚嶇О(鍚嶇О = 鏁版嵁搴撳悕+鏃堕棿瀛楃涓�.sql)
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+        String format = simpleDateFormat.format(new Date());
+        String timeStr = format
+                .replaceAll("-", "_")
+                .replaceAll(" ", "_")
+                .replaceAll(":", "");
+        timeStr = timeStr.substring(0, 15);
+        String pathFileName = filePath + "/" + dbName + "_" + timeStr + ".sql";
+        String newCmd = "";
+        if (isDbVersion8) {
+            newCmd = cmdMysql8;
+        } else {
+            newCmd = cmd;
+        }
+        // 鎵ц鍛戒护
+        newCmd = newCmd.replace("{USERNAME}", username)
+                .replace("{PASSWORD}", password)
+                .replace("{SERVERPATH}", serverPath)
+                .replace("{DBNAME}", dbName)
+                .replace("{FILEPATH}", pathFileName);
+        PrintWriter printWriter = null;
+        BufferedReader bufferedReader = null;
+        try {
+            // 鍒涘缓瀛樻斁sql鐨勬枃浠�
+            existsFile(new File(pathFileName));
+            printWriter = new PrintWriter(new OutputStreamWriter(new FileOutputStream(pathFileName), "utf8"));
+            Process process = null;
+            String property = System.getProperty("os.name");
+            System.out.println(property);
+            if (property.indexOf("Linux") != -1) {
+                // linux
+                process = Runtime.getRuntime().exec(new String[]{"bash", "-c", newCmd});
+            } else {
+                // 鏈湴win
+                String mysqldumpPath = "cmd /c " + mysqldump + "/" + newCmd;
+                System.out.println(mysqldumpPath);
+                process = Runtime.getRuntime().exec(mysqldumpPath);
+            }
+            InputStreamReader inputStreamReader = new InputStreamReader(process.getInputStream(), "utf8");
+            bufferedReader = new BufferedReader(inputStreamReader);
+            String line;
+            while ((line = bufferedReader.readLine()) != null) {
+                printWriter.println(line);
+            }
+            // 姝ゆ浼氭墽琛岃繃闀挎椂闂�,鐩村埌澶囦唤瀹屾垚
+            printWriter.flush();
+            printWriter.close();
+            //0 琛ㄧず绾跨▼姝e父缁堟銆�
+            if (process.waitFor() == 0) {
+                // 绾跨▼姝e父鎵ц
+                log.info("銆愬浠芥暟鎹簱銆慡UCCESS锛孲QL鏂囦欢锛歿}", pathFileName);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.info("銆愬浠芥暟鎹簱銆慒AILURE");
+        } finally {
+            try {
+                if (bufferedReader != null) {
+                    bufferedReader.close();
+                }
+                if (printWriter != null) {
+                    printWriter.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        log.info("銆愬浠芥暟鎹簱銆�--END");
+    }
+
+
+    /**
+     * 姣忓ぉ鏅氫笂23鐐�0鍒�10绉掓墽琛� 銆�  0 0 4 1/1 * ? 銆�
+     * 娴嬭瘯 20 绉掍竴娆°��  0/20 * * * * ? 銆�
+     */
+    @Scheduled(cron = "6 0 23 * * ?")
+    private void TimerDeleteFile(){
+        Date date = new Date();
+        SimpleDateFormat sdf = new SimpleDateFormat("d");
+        Integer currentDay = Integer.valueOf(sdf.format(date));
+        File file = new File(filePath);
+        File[] files = file.listFiles();
+        if (files != null) {
+            for(File f : files){
+                if(f.isFile()){//鑻ユ槸鏂囦欢锛岀洿鎺ユ墦鍗�
+                    String[] splitFile = f.getName().split("_");
+                    Integer fileDay = Integer.valueOf(splitFile[splitFile.length - 2]);
+                    Integer i = currentDay - fileDay;
+                    if (i.equals(destiny)){
+                        f.delete();
+                        log.info("澶囦唤sql鏂囦欢杩囧杩涜鍒犻櫎锛�");
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * 鍒ゆ柇鏂囦欢鏄惁瀛樺湪锛屼笉瀛樺湪鍒涘缓
+     */
+    private static void existsFile(File file) {
+        // 鍒ゆ柇鏂囦欢璺緞鏄惁瀛樺湪,涓嶅瓨鍦ㄦ柊寤�
+        if (!file.getParentFile().exists()) {
+            file.getParentFile().mkdirs();
+        }
+        if (!file.exists()) {
+            try {
+                file.createNewFile();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}
diff --git a/system-run/src/main/resources/application-dev.yml b/system-run/src/main/resources/application-dev.yml
new file mode 100644
index 0000000..b49c492
--- /dev/null
+++ b/system-run/src/main/resources/application-dev.yml
@@ -0,0 +1,77 @@
+swagger:
+  enabled: true
+
+# 鏃ュ織閰嶇疆
+logging:
+  config: classpath:logback-spring.xml
+  # 鏃ュ織瀛樺偍璺緞+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++
+  file-location:
+
+# 鏁版嵁搴撳浠借矾寰�
+backup:
+  # 鏁版嵁搴撳浠借矾寰�+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++
+  path: E:/webapp/backup
+  # 鏁版嵁搴撳浠藉ぉ鏁�
+  destiny: 7
+  # 鏁版嵁搴撳浠藉伐鍏疯矾寰�+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++
+  mysqldump: E:\JavaCode\WMS\WMS_Admin\src\main\resources
+
+# 鐓х墖瀛樺偍璺緞+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++
+file:
+  path: E:/webapp/images
+
+mybatis-plus:
+  type-aliases-package: com.yuanchu.mom.pojo
+  mapper-locations: classpath*:/mapper/*.xml
+  configuration:
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 寮�鍚痬ybatis-plus鏃ュ織
+
+
+# 鏁版嵁婧愰厤缃�
+spring:
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    driverClassName: com.mysql.cj.jdbc.Driver
+    url: jdbc:mysql://localhost:3306/mom_ocean?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
+    username: root
+    password: 123456
+    druid:
+      #   Druid鏁版嵁婧愰厤缃�
+      initialSize: 5 # 鍒濆杩炴帴鏁�
+      minIdle: 10 # 鏈�灏忚繛鎺ユ睜鏁伴噺
+      maxActive: 20 # 鏈�澶ц繛鎺ユ睜鏁伴噺
+      maxWait: 60000 # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂�
+      timeBetweenEvictionRunsMillis: 60000 # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣
+      minEvictableIdleTimeMillis: 300000 # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
+      maxEvictableIdleTimeMillis: 900000 # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
+      validationQuery: SELECT 1 FROM DUAL # 閰嶇疆妫�娴嬭繛鎺ユ槸鍚︽湁鏁�
+      testWhileIdle: true #鐢宠杩炴帴鐨勬椂鍊欐娴嬶紝濡傛灉绌洪棽鏃堕棿澶т簬timeBetweenEvictionRunsMillis锛屾墽琛寁alidationQuery妫�娴嬭繛鎺ユ槸鍚︽湁鏁堛��
+      testOnBorrow: false #閰嶇疆浠庤繛鎺ユ睜鑾峰彇杩炴帴鏃讹紝鏄惁妫�鏌ヨ繛鎺ユ湁鏁堟�э紝true姣忔閮芥鏌ワ紱false涓嶆鏌ャ�傚仛浜嗚繖涓厤缃細闄嶄綆鎬ц兘銆�
+      testOnReturn: false #閰嶇疆鍚戣繛鎺ユ睜褰掕繕杩炴帴鏃讹紝鏄惁妫�鏌ヨ繛鎺ユ湁鏁堟�э紝true姣忔閮芥鏌ワ紱false涓嶆鏌ャ�傚仛浜嗚繖涓厤缃細闄嶄綆鎬ц兘銆�
+      poolPreparedStatements: true #鎵撳紑PsCache锛屽苟涓旀寚瀹氭瘡涓繛鎺ヤ笂PSCache鐨勫ぇ灏�
+      maxPoolPreparedStatementPerConnectionSize: 20
+      filters: stat,wall,log4j # 閰嶇疆鐩戞帶缁熻鎷︽埅鐨刦ilters锛屽幓鎺夊悗鐩戞帶鐣岄潰sql鏃犳硶缁熻锛�'wall'鐢ㄤ簬闃茬伀澧�
+      useGlobalDataSourceStat: true #鍚堝苟澶氫釜DruidDatasource鐨勭洃鎺ф暟鎹�
+      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500; #閫氳繃connectProperties灞炴�ф潵鎵撳紑mergesql鍔熻兘缃楁參sQL璁板綍
+  redis:
+    # redis鏁版嵁搴撶储寮�(榛樿涓�0)锛屾垜浠娇鐢ㄧ储寮曚负3鐨勬暟鎹簱锛岄伩鍏嶅拰鍏朵粬鏁版嵁搴撳啿绐�
+    database: 0
+    # redis鏈嶅姟鍣ㄥ湴鍧�锛堥粯璁や负localhost锛�
+    host: localhost
+    # redis绔彛锛堥粯璁や负6379锛�
+    port: 6379
+    # redis璁块棶瀵嗙爜锛堥粯璁や负绌猴級
+    password: null
+    # redis杩炴帴瓒呮椂鏃堕棿锛堝崟浣嶆绉掞級
+    timeout: 10
+    # redis杩炴帴姹犻厤缃�
+    pool:
+      # 鏈�澶у彲鐢ㄨ繛鎺ユ暟锛堥粯璁や负8锛岃礋鏁拌〃绀烘棤闄愶級
+      max-active: 8
+      # 鏈�澶х┖闂茶繛鎺ユ暟锛堥粯璁や负8锛岃礋鏁拌〃绀烘棤闄愶級
+      max-idle: 8
+      # 鏈�灏忕┖闂茶繛鎺ユ暟锛堥粯璁や负0锛岃鍊煎彧鏈変负姝f暟鎵嶆湁鐢級
+      min-idle: 0
+      # 浠庤繛鎺ユ睜涓幏鍙栬繛鎺ユ渶澶х瓑寰呮椂闂达紙榛樿涓�-1锛屽崟浣嶄负姣锛岃礋鏁拌〃绀烘棤闄愶級
+      max-wait: -1
+
diff --git a/system-run/src/main/resources/application-prod.yml b/system-run/src/main/resources/application-prod.yml
new file mode 100644
index 0000000..69ecad6
--- /dev/null
+++ b/system-run/src/main/resources/application-prod.yml
@@ -0,0 +1,76 @@
+swagger:
+  enabled: false
+
+# 鏃ュ織閰嶇疆
+logging:
+  config: classpath:logback-spring.xml
+  # 鏃ュ織瀛樺偍璺緞+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++
+  file-location: /javaWork/Blog/log
+
+# 鏁版嵁搴撳浠借矾寰�
+backup:
+  # 鏁版嵁搴撳浠借矾寰�+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++
+  path: /javaWork/Blog/backup
+  # 鏁版嵁搴撳浠藉ぉ鏁�+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++
+  destiny: 7
+  # 鏁版嵁搴撳浠藉伐鍏疯矾寰�+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++
+  mysqldump: /javaWork/Blog/conf
+
+# 鐓х墖璺緞+++++++++++++++++++++++++++杩愮淮闇�瑕侀厤缃�+++++++++++++++++++++++++++
+file:
+  path: /javaWork/Blog/images
+
+mybatis-plus:
+  configuration:
+    log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl # 鍏抽棴mybatis-plus鏃ュ織
+
+# 鏁版嵁婧愰厤缃�
+spring:
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    driverClassName: com.mysql.jdbc.Driver
+    url: jdbc:mysql://localhost:3306/blog_crunchy?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
+    username: root
+    password: 123456
+    druid:
+      #   Druid鏁版嵁婧愰厤缃�
+      initialSize: 5 # 鍒濆杩炴帴鏁�
+      minIdle: 10 # 鏈�灏忚繛鎺ユ睜鏁伴噺
+      maxActive: 20 # 鏈�澶ц繛鎺ユ睜鏁伴噺
+      maxWait: 60000 # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂�
+      timeBetweenEvictionRunsMillis: 60000 # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣
+      minEvictableIdleTimeMillis: 300000 # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
+      maxEvictableIdleTimeMillis: 900000 # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
+      validationQuery: SELECT 1 FROM DUAL # 閰嶇疆妫�娴嬭繛鎺ユ槸鍚︽湁鏁�
+      testWhileIdle: true #鐢宠杩炴帴鐨勬椂鍊欐娴嬶紝濡傛灉绌洪棽鏃堕棿澶т簬timeBetweenEvictionRunsMillis锛屾墽琛寁alidationQuery妫�娴嬭繛鎺ユ槸鍚︽湁鏁堛��
+      testOnBorrow: false #閰嶇疆浠庤繛鎺ユ睜鑾峰彇杩炴帴鏃讹紝鏄惁妫�鏌ヨ繛鎺ユ湁鏁堟�э紝true姣忔閮芥鏌ワ紱false涓嶆鏌ャ�傚仛浜嗚繖涓厤缃細闄嶄綆鎬ц兘銆�
+      testOnReturn: false #閰嶇疆鍚戣繛鎺ユ睜褰掕繕杩炴帴鏃讹紝鏄惁妫�鏌ヨ繛鎺ユ湁鏁堟�э紝true姣忔閮芥鏌ワ紱false涓嶆鏌ャ�傚仛浜嗚繖涓厤缃細闄嶄綆鎬ц兘銆�
+      poolPreparedStatements: true #鎵撳紑PsCache锛屽苟涓旀寚瀹氭瘡涓繛鎺ヤ笂PSCache鐨勫ぇ灏�
+      maxPoolPreparedStatementPerConnectionSize: 20
+      filters: stat,wall,log4j # 閰嶇疆鐩戞帶缁熻鎷︽埅鐨刦ilters锛屽幓鎺夊悗鐩戞帶鐣岄潰sql鏃犳硶缁熻锛�'wall'鐢ㄤ簬闃茬伀澧�
+      useGlobalDataSourceStat: true #鍚堝苟澶氫釜DruidDatasource鐨勭洃鎺ф暟鎹�
+      connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500; #閫氳繃connectProperties灞炴�ф潵鎵撳紑mergesql鍔熻兘缃楁參sQL璁板綍
+
+
+redis:
+  # redis鏁版嵁搴撶储寮�(榛樿涓�0)锛屾垜浠娇鐢ㄧ储寮曚负3鐨勬暟鎹簱锛岄伩鍏嶅拰鍏朵粬鏁版嵁搴撳啿绐�
+  database: 0
+  # redis鏈嶅姟鍣ㄥ湴鍧�锛堥粯璁や负loaclhost锛�
+  host: 127.0.0.1
+  # redis绔彛锛堥粯璁や负6379锛�
+  port: 6379
+  # redis璁块棶瀵嗙爜锛堥粯璁や负绌猴級
+  #  password:
+  # redis杩炴帴瓒呮椂鏃堕棿锛堝崟浣嶆绉掞級
+  timeout: 0
+  # redis杩炴帴姹犻厤缃�
+  pool:
+    # 鏈�澶у彲鐢ㄨ繛鎺ユ暟锛堥粯璁や负8锛岃礋鏁拌〃绀烘棤闄愶級
+    max-active: 8
+    # 鏈�澶х┖闂茶繛鎺ユ暟锛堥粯璁や负8锛岃礋鏁拌〃绀烘棤闄愶級
+    max-idle: 8
+    # 鏈�灏忕┖闂茶繛鎺ユ暟锛堥粯璁や负0锛岃鍊煎彧鏈変负姝f暟鎵嶆湁鐢級
+    min-idle: 0
+    # 浠庤繛鎺ユ睜涓幏鍙栬繛鎺ユ渶澶х瓑寰呮椂闂达紙榛樿涓�-1锛屽崟浣嶄负姣锛岃礋鏁拌〃绀烘棤闄愶級
+    max-wait: -1
+
diff --git a/system-run/src/main/resources/application.yml b/system-run/src/main/resources/application.yml
new file mode 100644
index 0000000..696df2f
--- /dev/null
+++ b/system-run/src/main/resources/application.yml
@@ -0,0 +1,23 @@
+server:
+  port: 8001
+spring:
+  profiles:
+    active: dev
+
+mybatis-plus:
+  type-aliases-package: com.yuanchu.mom.pojo
+  mapper-locations: classpath*:/mapper/*Mapper.xml
+  global-config:
+    banner: off # 鍏抽棴mybatis-plus鍚姩鍥炬爣
+
+feign:
+  client:
+    config:
+      default:
+        connectTimeout: 2000
+        readTimeout: 3000
+        loggerLevel: FULL
+  httpclient:
+    enabled: false # 鍏抽棴 httpclient
+  okhttp:
+    enabled: true # 寮�鍚� okhttp
diff --git a/system-run/src/main/resources/logback-spring.xml b/system-run/src/main/resources/logback-spring.xml
new file mode 100644
index 0000000..9c97a9f
--- /dev/null
+++ b/system-run/src/main/resources/logback-spring.xml
@@ -0,0 +1,236 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 鏃ュ織绾у埆浠庝綆鍒伴珮鍒嗕负TRACE < DEBUG < INFO < WARN < ERROR < FATAL锛屾瘮濡�: 濡傛灉璁剧疆涓篧ARN锛屽垯浣庝簬WARN鐨勪俊鎭兘涓嶄細杈撳嚭 -->
+<!-- scan:褰撴灞炴�ц缃负true鏃讹紝閰嶇疆鏂囨。濡傛灉鍙戠敓鏀瑰彉锛屽皢浼氳閲嶆柊鍔犺浇锛岄粯璁ゅ�间负true -->
+<!-- scanPeriod:璁剧疆鐩戞祴閰嶇疆鏂囨。鏄惁鏈変慨鏀圭殑鏃堕棿闂撮殧锛屽鏋滄病鏈夌粰鍑烘椂闂村崟浣嶏紝榛樿鍗曚綅鏄绉掋�傚綋scan涓簍rue鏃讹紝姝ゅ睘鎬х敓鏁堛�傞粯璁ょ殑鏃堕棿闂撮殧涓�1鍒嗛挓銆� -->
+<!-- debug:褰撴灞炴�ц缃负true鏃讹紝灏嗘墦鍗板嚭logback鍐呴儴鏃ュ織淇℃伅锛屽疄鏃舵煡鐪媗ogback杩愯鐘舵�併�傞粯璁ゅ�间负false銆� -->
+<configuration  scan="true" scanPeriod="10 seconds">
+    <contextName>logback</contextName>
+
+    <!-- name鐨勫�兼槸鍙橀噺鐨勫悕绉帮紝value鐨勫�兼椂鍙橀噺瀹氫箟鐨勫�笺�傞�氳繃瀹氫箟鐨勫�间細琚彃鍏ュ埌logger涓婁笅鏂囦腑銆傚畾涔夊悗锛屽彲浠ヤ娇鈥�${}鈥濇潵浣跨敤鍙橀噺銆� -->
+    <springProperty scope="context" name="logs" source="logging.file-location" default="/var/log/myapp"/>
+    <property name="log.path" value="${logs}"/>
+
+    <!--0. 鏃ュ織鏍煎紡鍜岄鑹叉覆鏌� -->
+    <!-- 褰╄壊鏃ュ織渚濊禆鐨勬覆鏌撶被 -->
+    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
+    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
+    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
+    <!-- 褰╄壊鏃ュ織鏍煎紡 -->
+    <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
+
+    <!--1. 杈撳嚭鍒版帶鍒跺彴-->
+    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+        <!--姝ゆ棩蹇梐ppender鏄负寮�鍙戜娇鐢紝鍙厤缃渶搴曠骇鍒紝鎺у埗鍙拌緭鍑虹殑鏃ュ織绾у埆鏄ぇ浜庢垨绛変簬姝ょ骇鍒殑鏃ュ織淇℃伅-->
+        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+            <level>debug</level>
+        </filter>
+        <encoder>
+            <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
+            <!-- 璁剧疆瀛楃闆� -->
+            <charset>UTF-8</charset>
+        </encoder>
+    </appender>
+
+    <!--2. 杈撳嚭鍒版枃妗�-->
+    <!-- 2.1 level涓� DEBUG 鏃ュ織锛屾椂闂存粴鍔ㄨ緭鍑�  -->
+    <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 姝e湪璁板綍鐨勬棩蹇楁枃妗g殑璺緞鍙婃枃妗e悕 -->
+        <file>${log.path}/debug.log</file>
+        <!--鏃ュ織鏂囨。杈撳嚭鏍煎紡-->
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+            <charset>UTF-8</charset> <!-- 璁剧疆瀛楃闆� -->
+        </encoder>
+        <!-- 鏃ュ織璁板綍鍣ㄧ殑婊氬姩绛栫暐锛屾寜鏃ユ湡锛屾寜澶у皬璁板綍 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 鏃ュ織褰掓。 -->
+            <fileNamePattern>${log.path}/debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>100MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <!--鏃ュ織鏂囨。淇濈暀澶╂暟-->
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <!-- 姝ゆ棩蹇楁枃妗e彧璁板綍debug绾у埆鐨� -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>debug</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!-- 2.2 level涓� INFO 鏃ュ織锛屾椂闂存粴鍔ㄨ緭鍑�  -->
+    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 姝e湪璁板綍鐨勬棩蹇楁枃妗g殑璺緞鍙婃枃妗e悕 -->
+        <file>${log.path}/info.log</file>
+        <!--鏃ュ織鏂囨。杈撳嚭鏍煎紡-->
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+            <charset>UTF-8</charset>
+        </encoder>
+        <!-- 鏃ュ織璁板綍鍣ㄧ殑婊氬姩绛栫暐锛屾寜鏃ユ湡锛屾寜澶у皬璁板綍 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 姣忓ぉ鏃ュ織褰掓。璺緞浠ュ強鏍煎紡 -->
+            <fileNamePattern>${log.path}/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>100MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <!--鏃ュ織鏂囨。淇濈暀澶╂暟-->
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <!-- 姝ゆ棩蹇楁枃妗e彧璁板綍info绾у埆鐨� -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>info</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!-- 2.3 level涓� WARN 鏃ュ織锛屾椂闂存粴鍔ㄨ緭鍑�  -->
+    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 姝e湪璁板綍鐨勬棩蹇楁枃妗g殑璺緞鍙婃枃妗e悕 -->
+        <file>${log.path}/warn.log</file>
+        <!--鏃ュ織鏂囨。杈撳嚭鏍煎紡-->
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+            <charset>UTF-8</charset> <!-- 姝ゅ璁剧疆瀛楃闆� -->
+        </encoder>
+        <!-- 鏃ュ織璁板綍鍣ㄧ殑婊氬姩绛栫暐锛屾寜鏃ユ湡锛屾寜澶у皬璁板綍 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${log.path}/warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>100MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <!--鏃ュ織鏂囨。淇濈暀澶╂暟-->
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <!-- 姝ゆ棩蹇楁枃妗e彧璁板綍warn绾у埆鐨� -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>warn</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!-- 2.4 level涓� ERROR 鏃ュ織锛屾椂闂存粴鍔ㄨ緭鍑�  -->
+    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 姝e湪璁板綍鐨勬棩蹇楁枃妗g殑璺緞鍙婃枃妗e悕 -->
+        <file>${log.path}/error.log</file>
+        <!--鏃ュ織鏂囨。杈撳嚭鏍煎紡-->
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+            <charset>UTF-8</charset> <!-- 姝ゅ璁剧疆瀛楃闆� -->
+        </encoder>
+        <!-- 鏃ュ織璁板綍鍣ㄧ殑婊氬姩绛栫暐锛屾寜鏃ユ湡锛屾寜澶у皬璁板綍 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${log.path}/error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>100MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <!--鏃ュ織鏂囨。淇濈暀澶╂暟-->
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <!-- 姝ゆ棩蹇楁枃妗e彧璁板綍ERROR绾у埆鐨� -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>ERROR</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!-- 2.5 鎵�鏈� 闄や簡DEBUG绾у埆鐨勫叾瀹冮珮浜嶥EBUG鐨� 鏃ュ織锛岃褰曞埌涓�涓枃浠�  -->
+    <appender name="ALL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 姝e湪璁板綍鐨勬棩蹇楁枃妗g殑璺緞鍙婃枃妗e悕 -->
+        <file>${log.path}/all.log</file>
+        <!--鏃ュ織鏂囨。杈撳嚭鏍煎紡-->
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
+            <charset>UTF-8</charset> <!-- 姝ゅ璁剧疆瀛楃闆� -->
+        </encoder>
+        <!-- 鏃ュ織璁板綍鍣ㄧ殑婊氬姩绛栫暐锛屾寜鏃ユ湡锛屾寜澶у皬璁板綍 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${log.path}/all-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <maxFileSize>100MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+            <!--鏃ュ織鏂囨。淇濈暀澶╂暟-->
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <!-- 姝ゆ棩蹇楁枃妗h褰曢櫎浜咲EBUG绾у埆鐨勫叾瀹冮珮浜嶥EBUG鐨� -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>DEBUG</level>
+            <onMatch>DENY</onMatch>
+            <onMismatch>ACCEPT</onMismatch>
+        </filter>
+    </appender>
+
+    <!--
+        <logger>鐢ㄦ潵璁剧疆鏌愪竴涓寘鎴栬�呭叿浣撶殑鏌愪竴涓被鐨勬棩蹇楁墦鍗扮骇鍒��
+        浠ュ強鎸囧畾<appender>銆�<logger>浠呮湁涓�涓猲ame灞炴�э紝
+        涓�涓彲閫夌殑level鍜屼竴涓彲閫夌殑addtivity灞炴�с��
+        name:鐢ㄦ潵鎸囧畾鍙楁logger绾︽潫鐨勬煇涓�涓寘鎴栬�呭叿浣撶殑鏌愪竴涓被銆�
+        level:鐢ㄦ潵璁剧疆鎵撳嵃绾у埆锛屽ぇ灏忓啓鏃犲叧锛歍RACE, DEBUG, INFO, WARN, ERROR, ALL 鍜� OFF锛�
+              杩樻湁涓�涓壒娈婂�糏NHERITED鎴栬�呭悓涔夎瘝NULL锛屼唬琛ㄥ己鍒舵墽琛屼笂绾х殑绾у埆銆�
+              濡傛灉鏈缃灞炴�э紝閭d箞褰撳墠logger灏嗕細缁ф壙涓婄骇鐨勭骇鍒��
+        addtivity:鏄惁鍚戜笂绾ogger浼犻�掓墦鍗颁俊鎭�傞粯璁ゆ槸true銆�
+        <logger name="org.springframework.web" level="info"/>
+        <logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>
+    -->
+
+    <!--
+        浣跨敤mybatis鐨勬椂鍊欙紝sql璇彞鏄痙ebug涓嬫墠浼氭墦鍗帮紝鑰岃繖閲屾垜浠彧閰嶇疆浜唅nfo锛屾墍浠ユ兂瑕佹煡鐪媠ql璇彞鐨勮瘽锛屾湁浠ヤ笅涓ょ鎿嶄綔锛�
+        绗竴绉嶆妸<root level="info">鏀规垚<root level="DEBUG">杩欐牱灏变細鎵撳嵃sql锛屼笉杩囪繖鏍锋棩蹇楅偅杈逛細鍑虹幇寰堝鍏朵粬娑堟伅
+        绗簩绉嶅氨鏄崟鐙粰dao涓嬬洰褰曢厤缃甦ebug妯″紡锛屼唬鐮佸涓嬶紝杩欐牱閰嶇疆sql璇彞浼氭墦鍗帮紝鍏朵粬杩樻槸姝e父info绾у埆锛�
+        銆恖ogging.level.org.mybatis=debug logging.level.dao=debug銆�
+     -->
+
+    <!--
+        root鑺傜偣鏄繀閫夎妭鐐癸紝鐢ㄦ潵鎸囧畾鏈�鍩虹鐨勬棩蹇楄緭鍑虹骇鍒紝鍙湁涓�涓猯evel灞炴��
+        level:鐢ㄦ潵璁剧疆鎵撳嵃绾у埆锛屽ぇ灏忓啓鏃犲叧锛歍RACE, DEBUG, INFO, WARN, ERROR, ALL 鍜� OFF锛�
+        涓嶈兘璁剧疆涓篒NHERITED鎴栬�呭悓涔夎瘝NULL銆傞粯璁ゆ槸DEBUG
+        鍙互鍖呭惈闆朵釜鎴栧涓厓绱狅紝鏍囪瘑杩欎釜appender灏嗕細娣诲姞鍒拌繖涓猯ogger銆�
+    -->
+
+
+
+
+    <!-- 4  鏈�缁堢殑绛栫暐锛�
+                 鍩烘湰绛栫暐(root绾�) + 鏍规嵁profile鍦ㄥ惎鍔ㄦ椂, logger鏍囩涓畾鍒跺寲package鏃ュ織绾у埆(浼樺厛绾ч珮浜庝笂闈㈢殑root绾�)-->
+    <springProfile name="dev">
+        <root level="info">
+            <appender-ref ref="CONSOLE" />
+            <appender-ref ref="DEBUG_FILE" />
+            <appender-ref ref="INFO_FILE" />
+            <appender-ref ref="WARN_FILE" />
+            <appender-ref ref="ERROR_FILE" />
+            <appender-ref ref="ALL_FILE" />
+        </root>
+        <logger name="com.yuanchu.limslaboratory.SysApplication" level="debug"/> <!-- 寮�鍙戠幆澧�, 鎸囧畾鏌愬寘鏃ュ織涓篸ebug绾� -->
+    </springProfile>
+
+    <springProfile name="test">
+        <root level="info">
+            <appender-ref ref="CONSOLE" />
+            <appender-ref ref="DEBUG_FILE" />
+            <appender-ref ref="INFO_FILE" />
+            <appender-ref ref="WARN_FILE" />
+            <appender-ref ref="ERROR_FILE" />
+            <appender-ref ref="ALL_FILE" />
+        </root>
+        <logger name="com.yuanchu.limslaboratory.SysApplication" level="info"/> <!-- 娴嬭瘯鐜, 鎸囧畾鏌愬寘鏃ュ織涓篿nfo绾� -->
+    </springProfile>
+
+    <springProfile name="prod">
+        <root level="info">
+            <!-- 鐢熶骇鐜鏈�濂戒笉閰嶇疆console鍐欐枃浠� -->
+            <appender-ref ref="DEBUG_FILE" />
+            <appender-ref ref="INFO_FILE" />
+            <appender-ref ref="WARN_FILE" />
+            <appender-ref ref="ERROR_FILE" />
+            <appender-ref ref="ALL_FILE" />
+        </root>
+        <logger name="com.yuanchu.limslaboratory" level="warn"/> <!-- 鐢熶骇鐜, 鎸囧畾鏌愬寘鏃ュ織涓簑arn绾� -->
+        <logger name="com.yuanchu.limslaboratory.SysApplication" level="info"/> <!-- 鐗瑰畾鏌愪釜绫绘墦鍗癷nfo鏃ュ織, 姣斿application鍚姩鎴愬姛鍚庣殑鎻愮ず璇� -->
+    </springProfile>
+
+</configuration>
diff --git a/system-run/src/main/resources/mysqldump.exe b/system-run/src/main/resources/mysqldump.exe
new file mode 100644
index 0000000..9f4ce5e
--- /dev/null
+++ b/system-run/src/main/resources/mysqldump.exe
Binary files differ
diff --git a/system-run/src/test/java/com/yuanchu/mom/SystemRunApplicationTest.java b/system-run/src/test/java/com/yuanchu/mom/SystemRunApplicationTest.java
new file mode 100644
index 0000000..19b2b6e
--- /dev/null
+++ b/system-run/src/test/java/com/yuanchu/mom/SystemRunApplicationTest.java
@@ -0,0 +1,57 @@
+package com.yuanchu.mom;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class SystemRunApplicationTest {
+
+    @Test
+    void contextLoads() {
+        int i = checkValues(">=2", "=0", "0");
+        System.out.println(i);
+    }
+
+    public int checkValues(String standardValueStr, String controlValueStr, String detectionValueStr) {
+        boolean isStandardValueSatisfied = isValueSatisfied(standardValueStr, detectionValueStr);
+        boolean isControlValueSatisfied = isValueSatisfied(controlValueStr, detectionValueStr);
+
+        if (isStandardValueSatisfied && isControlValueSatisfied) {
+            return 1;
+        } else {
+            return 0;
+        }
+    }
+
+    private boolean isValueSatisfied(String valueStr, String detectionValueStr) {
+        String substring = valueStr.substring(1,2);
+        if (substring.equals("=")) {
+            String operator = valueStr.substring(0, 2);
+            Double standardValue = Double.parseDouble(valueStr.substring(2));
+            Double detectionValue = Double.parseDouble(detectionValueStr);
+            switch (operator){
+                case ">=":
+                    return detectionValue >= standardValue;
+                case "<=":
+                    return detectionValue <= standardValue;
+                default:
+                    return false;
+            }
+        }else {
+            String operator = valueStr.substring(0,1);
+            Double standardValue = Double.parseDouble(valueStr.substring(1));
+            Double detectionValue = Double.parseDouble(detectionValueStr);
+            switch (operator){
+                case ">":
+                    return detectionValue > standardValue;
+                case "<":
+                    return detectionValue < standardValue;
+                case "=":
+                    return detectionValue.equals(standardValue);
+                default:
+                    return false;
+            }
+        }
+    }
+
+}
diff --git a/user-server/pom.xml b/user-server/pom.xml
new file mode 100644
index 0000000..256d010
--- /dev/null
+++ b/user-server/pom.xml
@@ -0,0 +1,24 @@
+<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>mom</artifactId>
+        <groupId>com.yuanchu.mom</groupId>
+        <version>1.0.0</version>
+    </parent>
+
+    <artifactId>user-server</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>user-server</name>
+    <description>user-server</description>
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.yuanchu.mom</groupId>
+            <artifactId>framework</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/user-server/src/main/java/com/yuanchu/mom/controller/UserController.java b/user-server/src/main/java/com/yuanchu/mom/controller/UserController.java
new file mode 100644
index 0000000..166fbd5
--- /dev/null
+++ b/user-server/src/main/java/com/yuanchu/mom/controller/UserController.java
@@ -0,0 +1,68 @@
+package com.yuanchu.mom.controller;
+
+import com.yuanchu.mom.pojo.User;
+import com.yuanchu.mom.service.UserService;
+import com.yuanchu.mom.utils.JackSonUtil;
+import com.yuanchu.mom.utils.Jwt;
+import com.yuanchu.mom.utils.RedisUtil;
+import com.yuanchu.mom.vo.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@RequestMapping("/user")
+@RestController
+@Api(tags = "鐢ㄦ埛妯″潡")
+public class UserController {
+
+    @Autowired
+    UserService userService;
+
+    @Autowired
+    private Jwt jwt;
+
+    @ApiOperation(value = "鐧诲綍")
+    @PostMapping("/enter")
+    public Result login(String account, String password) {
+        User user = userService.selectUserByPwd(account, password);
+        if (user==null) return Result.fail("鐧诲綍澶辫触");
+        String jwtToken = jwt.createJwt(user.getName(), user.getId(), 60);
+        String jwtReToken = jwt.createJwt(user.getName(), user.getId(), 24 * 60);
+        RedisUtil.set("" + user.getId(), jwtToken, 60);
+        RedisUtil.set(user.getId() + "Re", jwtReToken, 24 * 60);
+        Map<String, String> map = new HashMap<>();
+        map.put("token", jwtToken);
+        map.put("reToken", jwtReToken);
+        map.put("name", user.getName());
+        return Result.success("鐧诲綍鎴愬姛", map);
+    }
+
+    @PostMapping("/refresh")
+    public Result refresh(String reToken) throws Exception {
+        Map<String, String> map = new Jwt().readJWT(reToken);
+        Map<String, String> maps = JackSonUtil.unmarshal(map.get("data"), Map.class);
+        if (map.get("state").equals("0")) {
+            String redisToken = String.valueOf(RedisUtil.get(maps.get("id") + "Re"));
+            if (!redisToken.equals(reToken)) {
+                return Result.success("涓嶅瓨鍦ㄧ殑token", "1");
+            } else if (redisToken.equals(reToken)) {
+                int id = Integer.parseInt(maps.get("id").replaceAll("\"", ""));
+                String name = maps.get("name").replaceAll("\"", "");
+                String jwtToken = jwt.createJwt(name, id, 60);
+                String jwtReToken = jwt.createJwt(name, id, 24 * 60);
+                RedisUtil.set("" + id, jwtToken, 60);
+                RedisUtil.set(id + "Re", jwtReToken, 24 * 60);
+                Map<String, String> map1 = new HashMap<>();
+                map1.put("token", jwtToken);
+                map1.put("reToken", jwtReToken);
+                return Result.success("鍒锋柊鎴愬姛", map1);
+            }
+        }
+        return Result.fail(map.get("info"));
+    }
+
+}
diff --git a/user-server/src/main/java/com/yuanchu/mom/mapper/UserMapper.java b/user-server/src/main/java/com/yuanchu/mom/mapper/UserMapper.java
new file mode 100644
index 0000000..99a6940
--- /dev/null
+++ b/user-server/src/main/java/com/yuanchu/mom/mapper/UserMapper.java
@@ -0,0 +1,11 @@
+package com.yuanchu.mom.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yuanchu.mom.pojo.User;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+@Mapper
+@Repository
+public interface UserMapper extends BaseMapper<User> {
+}
diff --git a/user-server/src/main/java/com/yuanchu/mom/pojo/User.java b/user-server/src/main/java/com/yuanchu/mom/pojo/User.java
new file mode 100644
index 0000000..d8ba49b
--- /dev/null
+++ b/user-server/src/main/java/com/yuanchu/mom/pojo/User.java
@@ -0,0 +1,39 @@
+package com.yuanchu.mom.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class User {
+
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    private String account;
+
+    private String password;
+
+    private String name;
+
+    private int state;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Date updateTime;
+
+    private int version;
+
+}
diff --git a/user-server/src/main/java/com/yuanchu/mom/service/UserService.java b/user-server/src/main/java/com/yuanchu/mom/service/UserService.java
new file mode 100644
index 0000000..ed64ed1
--- /dev/null
+++ b/user-server/src/main/java/com/yuanchu/mom/service/UserService.java
@@ -0,0 +1,20 @@
+package com.yuanchu.mom.service;
+
+import com.yuanchu.mom.pojo.User;
+
+import java.util.List;
+import java.util.Map;
+
+public interface UserService {
+
+    /*鍒ゆ柇鏄惁鐧诲綍鎴愬姛*/
+    User selectUserByPwd(String account, String password);
+
+    //鏍规嵁鐢ㄦ埛id鏌ヨ鐢ㄦ埛鍚�
+    String selectNameById(Integer id);
+
+    /**
+     * 妫�楠屾ā鍧�-->OMS绠$悊-->鎴愬搧妫�楠�-->鏂板(闇�瑕佺敤鎴稩d涓庡悕绉�)
+     */
+    List<Map<String, Object>> listUserIdAndName();
+}
diff --git a/user-server/src/main/java/com/yuanchu/mom/service/imp/UserServiceImp.java b/user-server/src/main/java/com/yuanchu/mom/service/imp/UserServiceImp.java
new file mode 100644
index 0000000..b9b108f
--- /dev/null
+++ b/user-server/src/main/java/com/yuanchu/mom/service/imp/UserServiceImp.java
@@ -0,0 +1,42 @@
+package com.yuanchu.mom.service.imp;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.yuanchu.mom.mapper.UserMapper;
+import com.yuanchu.mom.pojo.User;
+import com.yuanchu.mom.service.UserService;
+import org.springframework.stereotype.Service;
+import org.springframework.util.DigestUtils;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+@Service
+public class UserServiceImp implements UserService {
+
+    @Resource
+    UserMapper userMapper;
+
+    @Override
+    public User selectUserByPwd(String account, String password) {
+        QueryWrapper<User> wrapper = new QueryWrapper<>();
+        wrapper.eq("account", account).eq("password", DigestUtils.md5DigestAsHex(password.getBytes()));
+        List<User> list = userMapper.selectList(wrapper);
+        return list.size()>0?list.get(0):null;
+    }
+
+    //鏍规嵁鐢ㄦ埛id鏌ヨ鐢ㄦ埛鍚�
+    @Override
+    public String selectNameById(Integer id) {
+        User user = userMapper.selectById(id);
+        return user.getName();
+    }
+
+    @Override
+    public List<Map<String, Object>> listUserIdAndName() {
+        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
+        wrapper.select(User::getId, User::getName);
+        return userMapper.selectMaps(wrapper);
+    }
+}
diff --git a/user-server/src/main/resources/mapper/UserMapper.xml b/user-server/src/main/resources/mapper/UserMapper.xml
new file mode 100644
index 0000000..7f7653f
--- /dev/null
+++ b/user-server/src/main/resources/mapper/UserMapper.xml
@@ -0,0 +1,5 @@
+<?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.mom.mapper.UserMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/user-server/src/test/java/com/yuanchu/mom/SystemRunApplicationTests.java b/user-server/src/test/java/com/yuanchu/mom/SystemRunApplicationTests.java
new file mode 100644
index 0000000..03c0492
--- /dev/null
+++ b/user-server/src/test/java/com/yuanchu/mom/SystemRunApplicationTests.java
@@ -0,0 +1,13 @@
+package com.yuanchu.mom;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class SystemRunApplicationTests {
+
+    @Test
+    void contextLoads() {
+    }
+
+}

--
Gitblit v1.9.3