From 27e9d7d2c7db63c5f12c83e069980213398e8337 Mon Sep 17 00:00:00 2001
From: XiaoRuby <3114200645@qq.com>
Date: 星期四, 13 七月 2023 10:22:51 +0800
Subject: [PATCH] LIMS管理系统框架-开发7-12-v1.0.0

---
 standard-library/src/main/java/com/yuanchu/limslaboratory/pojo/SerialNumber.java                      |   62 ++
 standard-library/src/main/java/com/yuanchu/limslaboratory/controller/StandardsController.java         |   59 ++
 standard-library/src/main/java/com/yuanchu/limslaboratory/mapper/StandardsMapper.java                 |   20 
 user-server/src/main/java/com/yuanchu/limslaboratory/vo/NewPersonnelVo.java                           |   33 +
 user-server/src/main/java/com/yuanchu/limslaboratory/pojo/Enterprise.java                             |    7 
 sys/src/main/resources/application.yml                                                                |    8 
 standard-library/src/main/java/com/yuanchu/limslaboratory/mapper/SerialNumberMapper.java              |   19 
 framework/src/main/java/com/yuanchu/limslaboratory/utils/SpringUtil.java                              |    2 
 standard-library/src/main/java/com/yuanchu/limslaboratory/service/SerialNumberService.java            |   27 +
 standard-library/src/main/java/com/yuanchu/limslaboratory/service/StandardsService.java               |   27 +
 sys/src/test/java/com/yuanchu/limslaboratory/CodeGenerator.java                                       |    4 
 user-server/src/main/java/com/yuanchu/limslaboratory/shiro/realm/ShiroRealm.java                      |   18 
 standard-library/src/main/java/com/yuanchu/limslaboratory/controller/SpecificationsController.java    |   72 ++
 user-server/src/main/java/com/yuanchu/limslaboratory/shiro/config/ShiroConfig.java                    |   18 
 standard-library/src/main/resources/mapper/StandardsMapper.xml                                        |   13 
 standard-library/src/main/java/com/yuanchu/limslaboratory/service/impl/SerialNumberServiceImpl.java   |   64 ++
 user-server/src/main/resources/mapper/UserMapper.xml                                                  |   20 
 standard-library/src/main/java/com/yuanchu/limslaboratory/mapper/SpecificationsMapper.java            |   24 
 standard-library/src/main/resources/mapper/SerialNumberMapper.xml                                     |    5 
 user-server/src/main/java/com/yuanchu/limslaboratory/controller/UserController.java                   |   67 ++
 user-server/src/main/java/com/yuanchu/limslaboratory/shiro/realm/JwtRealm.java                        |    9 
 user-server/pom.xml                                                                                   |    5 
 standard-library/src/main/java/com/yuanchu/limslaboratory/service/SpecificationsService.java          |   25 +
 user-server/src/main/java/com/yuanchu/limslaboratory/pojo/Role.java                                   |    8 
 framework/src/main/java/com/yuanchu/limslaboratory/config/MyBatisPlusConfig.java                      |   15 
 user-server/src/main/java/com/yuanchu/limslaboratory/mapper/UserMapper.java                           |    6 
 user-server/src/main/java/com/yuanchu/limslaboratory/vo/PagePersonnelVo.java                          |   39 +
 standard-library/src/main/java/com/yuanchu/limslaboratory/pojo/Standards.java                         |   65 ++
 standard-library/src/main/java/com/yuanchu/limslaboratory/vo/ListSpecificationsInformation.java       |   27 +
 user-server/src/main/java/com/yuanchu/limslaboratory/clients/UserLoginUtils.java                      |   85 +-
 pom.xml                                                                                               |    1 
 standard-library/src/main/resources/mapper/SpecificationsMapper.xml                                   |   23 
 framework/src/main/java/com/yuanchu/limslaboratory/utils/FileSaveUtil.java                            |    6 
 framework/src/main/java/com/yuanchu/limslaboratory/utils/JackSonUtil.java                             |    8 
 user-server/src/main/java/com/yuanchu/limslaboratory/vo/UpdatePersonnelVo.java                        |   41 +
 standard-library/src/main/java/com/yuanchu/limslaboratory/controller/SerialNumberController.java      |   58 ++
 standard-library/src/main/java/com/yuanchu/limslaboratory/service/impl/StandardsServiceImpl.java      |   57 ++
 user-server/src/main/java/com/yuanchu/limslaboratory/shiro/utils/JwtUtils.java                        |    1 
 user-server/src/main/java/com/yuanchu/limslaboratory/service/UserService.java                         |   19 
 framework/src/main/java/com/yuanchu/limslaboratory/handler/GlobalExceptionHandler.java                |   34 
 user-server/src/main/java/com/yuanchu/limslaboratory/pojo/User.java                                   |   18 
 user-server/src/main/java/com/yuanchu/limslaboratory/pojo/EnterpriseUserList.java                     |   10 
 sys/src/main/resources/application-dev.yml                                                            |   44 
 framework/src/main/java/com/yuanchu/limslaboratory/utils/MyUtil.java                                  |    2 
 framework/src/main/java/com/yuanchu/limslaboratory/handler/MyMetaObjectHandler.java                   |    8 
 standard-library/pom.xml                                                                              |   38 +
 user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/UserServiceImpl.java                |   86 +++
 sys/pom.xml                                                                                           |   10 
 standard-library/src/main/java/com/yuanchu/limslaboratory/service/impl/SpecificationsServiceImpl.java |   62 ++
 framework/src/main/java/com/yuanchu/limslaboratory/config/Swagger3.java                               |    4 
 standard-library/src/main/java/com/yuanchu/limslaboratory/pojo/Specifications.java                    |   82 +++
 51 files changed, 1,295 insertions(+), 170 deletions(-)

diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/config/MyBatisPlusConfig.java b/framework/src/main/java/com/yuanchu/limslaboratory/config/MyBatisPlusConfig.java
index 56853a6..33b08c6 100644
--- a/framework/src/main/java/com/yuanchu/limslaboratory/config/MyBatisPlusConfig.java
+++ b/framework/src/main/java/com/yuanchu/limslaboratory/config/MyBatisPlusConfig.java
@@ -1,7 +1,9 @@
 package com.yuanchu.limslaboratory.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.PaginationInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -15,4 +17,15 @@
     public OptimisticLockerInterceptor optimisticLockerInterceptor() {
         return new OptimisticLockerInterceptor();
     }
+
+    /**
+     * 闇�瑕侀厤缃嫤鎴櫒锛屼笉鐒跺湪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/limslaboratory/config/Swagger3.java b/framework/src/main/java/com/yuanchu/limslaboratory/config/Swagger3.java
index 29954ad..7e2671f 100644
--- a/framework/src/main/java/com/yuanchu/limslaboratory/config/Swagger3.java
+++ b/framework/src/main/java/com/yuanchu/limslaboratory/config/Swagger3.java
@@ -35,9 +35,9 @@
         // 鐢ˋpiInfoBuilder杩涜瀹氬埗
         return new ApiInfoBuilder()
                 // 璁剧疆鏍囬
-                .title("姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃绠$悊绯荤粺")
+                .title("LIMS绠$悊绯荤粺")
                 // 鎻忚堪
-                .description("姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃绠$悊绯荤粺")
+                .description("LIMS绠$悊绯荤粺")
                 // 浣滆�呬俊鎭�
                 .contact(new Contact("Crunchy", null, null))
                 // 鐗堟湰
diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/handler/GlobalExceptionHandler.java b/framework/src/main/java/com/yuanchu/limslaboratory/handler/GlobalExceptionHandler.java
index 7e4449a..0dd0dfd 100644
--- a/framework/src/main/java/com/yuanchu/limslaboratory/handler/GlobalExceptionHandler.java
+++ b/framework/src/main/java/com/yuanchu/limslaboratory/handler/GlobalExceptionHandler.java
@@ -50,115 +50,115 @@
     /** 杩愯鏃跺紓甯� */
     @ExceptionHandler(RuntimeException.class)
     public Result<?> runtimeExceptionHandler(RuntimeException e) {
-        log.error(e.getMessage(), e.getCause());
+        e.printStackTrace();
         return Result.fail("杩愯鏃跺紓甯�");
     }
 
     /** 绫诲瀷杞崲寮傚父 */
     @ExceptionHandler(ClassCastException.class)
     public Result<?> classCastExceptionHandler(ClassCastException e) {
-        log.error(e.getMessage(), e.getCause());
+        e.printStackTrace();
         return Result.fail("绫诲瀷杞崲寮傚父");
     }
     /** 鏂囦欢鏈壘鍒板紓甯� */
     @ExceptionHandler(FileNotFoundException.class)
     public Result<?> FileNotFoundException(FileNotFoundException e) {
-        log.error(e.getMessage(), e.getCause());
+        e.printStackTrace();
         return Result.fail("鏂囦欢鏈壘鍒板紓甯�");
     }
     /** 鏁板瓧鏍煎紡寮傚父 */
     @ExceptionHandler(NumberFormatException.class)
     public Result<?> NumberFormatException(NumberFormatException e) {
-        log.error(e.getMessage(), e.getCause());
+        e.printStackTrace();
         return Result.fail("鏁板瓧鏍煎紡寮傚父");
     }
     /** 瀹夊叏寮傚父 */
     @ExceptionHandler(SecurityException.class)
     public Result<?> SecurityException(SecurityException e) {
-        log.error(e.getMessage(), e.getCause());
+        e.printStackTrace();
         return Result.fail("瀹夊叏寮傚父");
     }
 
     /** 绫诲瀷涓嶅瓨鍦ㄥ紓甯� */
     @ExceptionHandler(TypeNotPresentException.class)
     public Result<?> TypeNotPresentException(TypeNotPresentException e) {
-        log.error(e.getMessage(), e.getCause());
+        e.printStackTrace();
         return Result.fail("绫诲瀷涓嶅瓨鍦ㄥ紓甯�");
     }
 
     /** IO寮傚父 */
     @ExceptionHandler(IOException.class)
     public Result<?> iOExceptionHandler(IOException e) {
-        log.error(e.getMessage(), e.getCause());
+        e.printStackTrace();
         return Result.fail("IO寮傚父");
     }
 
     /** 鏈煡鏂规硶寮傚父 */
     @ExceptionHandler(NoSuchMethodException.class)
     public Result<?> noSuchMethodExceptionHandler(NoSuchMethodException e) {
-        log.error(e.getMessage(), e.getCause());
+        e.printStackTrace();
         return Result.fail("鏈煡鏂规硶寮傚父");
     }
 
     /** 鏁扮粍瓒婄晫寮傚父 */
     @ExceptionHandler(IndexOutOfBoundsException.class)
     public Result<?> indexOutOfBoundsExceptionHandler(IndexOutOfBoundsException e) {
-        log.error(e.getMessage(), e.getCause());
+        e.printStackTrace();
         return Result.fail("鏁扮粍瓒婄晫寮傚父");
     }
     /** sql璇硶閿欒寮傚父 */
     @ExceptionHandler(BadSqlGrammarException.class)
     public Result<?> BadSqlGrammarException(BadSqlGrammarException e) {
-        log.error(e.getMessage(), e.getCause());
+        e.printStackTrace();
         return Result.fail("sql璇硶閿欒寮傚父");
     }
 
     /** 鏃犳硶娉ㄥ叆bean寮傚父 */
     @ExceptionHandler(NoSuchBeanDefinitionException.class)
     public Result<?> NoSuchBeanDefinitionException(NoSuchBeanDefinitionException e) {
-        log.error(e.getMessage(), e.getCause());
+        e.printStackTrace();
         return Result.fail("鏃犳硶娉ㄥ叆bean");
     }
 
     /** Http娑堟伅涓嶅彲璇诲紓甯� */
     @ExceptionHandler({HttpMessageNotReadableException.class})
     public Result<?> requestNotReadable(HttpMessageNotReadableException e) {
-        log.error(e.getMessage(), e.getCause());
+        e.printStackTrace();
         return Result.fail("Http娑堟伅涓嶅彲璇�");
     }
 
     /** 400閿欒 */
     @ExceptionHandler({TypeMismatchException.class})
     public Result<?> requestTypeMismatch(TypeMismatchException e) {
-        log.error(e.getMessage(), e.getCause());
+        e.printStackTrace();
         return Result.fail("鏈嶅姟鍣ㄥ紓甯�");
     }
 
     /** 500閿欒 */
     @ExceptionHandler({ConversionNotSupportedException.class, HttpMessageNotWritableException.class})
     public Result<?> server500(RuntimeException e) {
-        log.error(e.getMessage(), e.getCause());
+        e.printStackTrace();
         return Result.fail("鏈嶅姟鍣ㄥ紓甯�");
     }
 
     /** 鏍堟孩鍑� */
     @ExceptionHandler({StackOverflowError.class})
     public Result<?> requestStackOverflow(StackOverflowError e) {
-        log.error(e.getMessage(), e.getCause());
+        e.printStackTrace();
         return Result.fail("鏍堟孩鍑哄紓甯�");
     }
 
     /** 闄ゆ暟涓嶈兘涓�0 */
     @ExceptionHandler({ArithmeticException.class})
     public Result<?> arithmeticException(ArithmeticException e) {
-        log.error(e.getMessage(), e.getCause());
+        e.printStackTrace();
         return Result.fail("闄ゆ暟涓嶈兘涓�0寮傚父");
     }
 
     /** 鍏朵粬閿欒 */
     @ExceptionHandler({Exception.class})
     public Result<?> exception(Exception e) {
-        log.error(e.getMessage(), e.getCause());
+        e.printStackTrace();
         return Result.fail("缃戠粶杩炴帴澶辫触锛岃閫�鍑哄悗鍐嶈瘯");
     }
 }
diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/handler/MyMetaObjectHandler.java b/framework/src/main/java/com/yuanchu/limslaboratory/handler/MyMetaObjectHandler.java
index 03566f9..b72572a 100644
--- a/framework/src/main/java/com/yuanchu/limslaboratory/handler/MyMetaObjectHandler.java
+++ b/framework/src/main/java/com/yuanchu/limslaboratory/handler/MyMetaObjectHandler.java
@@ -4,19 +4,19 @@
 import org.apache.ibatis.reflection.MetaObject;
 import org.springframework.stereotype.Component;
 
-import java.time.LocalDateTime;
+import java.util.Date;
 
 @Component
 public class MyMetaObjectHandler implements MetaObjectHandler {
     @Override
     public void insertFill(MetaObject metaObject) {
-        this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 璧峰鐗堟湰 3.3.0(鎺ㄨ崘浣跨敤)
-        this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 璧峰鐗堟湰 3.3.0(鎺ㄨ崘浣跨敤)
+        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", LocalDateTime.class, LocalDateTime.now()); // 璧峰鐗堟湰 3.3.0(鎺ㄨ崘)
+        this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date()); // 璧峰鐗堟湰 3.3.0(鎺ㄨ崘)
     }
 }
diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/utils/FileSaveUtils.java b/framework/src/main/java/com/yuanchu/limslaboratory/utils/FileSaveUtil.java
similarity index 93%
rename from framework/src/main/java/com/yuanchu/limslaboratory/utils/FileSaveUtils.java
rename to framework/src/main/java/com/yuanchu/limslaboratory/utils/FileSaveUtil.java
index d06b77a..75e28eb 100644
--- a/framework/src/main/java/com/yuanchu/limslaboratory/utils/FileSaveUtils.java
+++ b/framework/src/main/java/com/yuanchu/limslaboratory/utils/FileSaveUtil.java
@@ -13,7 +13,7 @@
  */
 @Slf4j
 @Component
-public class FileSaveUtils {
+public class FileSaveUtil {
 
     // 鍙杫ml涓殑璺緞 + /
 //    @Value("${file.path}")
@@ -27,7 +27,7 @@
      */
     public String StoreFile(byte[] content, String originalFilename) {
         // 鐢熸垚闅忔満鍚嶇О锛氭椂闂確闅忔満6浣嶆暟瀛�
-        String FileName = System.currentTimeMillis() + "_" + MyUtils.getNumber(6);
+        String FileName = System.currentTimeMillis() + "_" + MyUtil.getNumber(6);
         String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
         // 鍚嶇О鎷兼帴
         String fileName = FileName + suffix;
@@ -54,7 +54,7 @@
              ByteArrayInputStream is = new ByteArrayInputStream(content)) {
              IOUtils.copy(is, os);
         } catch (IOException e) {
-            MyUtils.PrintLog("瀛樺偍鏂囦欢寮傚父锛�" + e);
+            MyUtil.PrintLog("瀛樺偍鏂囦欢寮傚父锛�" + e);
         }
     }
 }
diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/utils/JackSonUtil.java b/framework/src/main/java/com/yuanchu/limslaboratory/utils/JackSonUtil.java
index 837d6b9..f272754 100644
--- a/framework/src/main/java/com/yuanchu/limslaboratory/utils/JackSonUtil.java
+++ b/framework/src/main/java/com/yuanchu/limslaboratory/utils/JackSonUtil.java
@@ -94,6 +94,14 @@
         }
     }
 
+    /**
+     * 瀛楃涓茶浆瀵硅薄
+     * @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);
diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/utils/MyUtils.java b/framework/src/main/java/com/yuanchu/limslaboratory/utils/MyUtil.java
similarity index 98%
rename from framework/src/main/java/com/yuanchu/limslaboratory/utils/MyUtils.java
rename to framework/src/main/java/com/yuanchu/limslaboratory/utils/MyUtil.java
index 3efefe9..2ba0601 100644
--- a/framework/src/main/java/com/yuanchu/limslaboratory/utils/MyUtils.java
+++ b/framework/src/main/java/com/yuanchu/limslaboratory/utils/MyUtil.java
@@ -7,7 +7,7 @@
 import java.util.Random;
 
 @Component
-public class MyUtils<T> {
+public class MyUtil<T> {
 
     /**
      * 鑷畾涔夎皟璇曞伐鍏风被
diff --git a/framework/src/main/java/com/yuanchu/limslaboratory/utils/SpringUtils.java b/framework/src/main/java/com/yuanchu/limslaboratory/utils/SpringUtil.java
similarity index 94%
rename from framework/src/main/java/com/yuanchu/limslaboratory/utils/SpringUtils.java
rename to framework/src/main/java/com/yuanchu/limslaboratory/utils/SpringUtil.java
index f611767..96ba602 100644
--- a/framework/src/main/java/com/yuanchu/limslaboratory/utils/SpringUtils.java
+++ b/framework/src/main/java/com/yuanchu/limslaboratory/utils/SpringUtil.java
@@ -6,7 +6,7 @@
 import org.springframework.stereotype.Component;
 
 @Component
-public class SpringUtils implements ApplicationContextAware {
+public class SpringUtil implements ApplicationContextAware {
     private static ApplicationContext context;
 
     @Override
diff --git a/pom.xml b/pom.xml
index 580ba65..390cd93 100644
--- a/pom.xml
+++ b/pom.xml
@@ -19,6 +19,7 @@
         <module>user-server</module>
         <module>sys</module>
         <module>framework</module>
+        <module>standard-library</module>
     </modules>
 
     <properties>
diff --git a/standard-library/pom.xml b/standard-library/pom.xml
new file mode 100644
index 0000000..aaf8e17
--- /dev/null
+++ b/standard-library/pom.xml
@@ -0,0 +1,38 @@
+<?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>lims-laboratory</artifactId>
+        <groupId>com.yuanchu</groupId>
+        <version>0.0.1-SNAPSHOT</version>
+    </parent>
+    <groupId>com.yunchu.limslaboratory</groupId>
+    <artifactId>standard-library</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>standard-library</name>
+    <description>standard-library</description>
+
+    <packaging>jar</packaging>
+
+    <dependencies>
+        <dependency>
+            <groupId>com.yunchu.limslaboratory</groupId>
+            <artifactId>framework</artifactId>
+            <version>${project.parent.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.yunchu.limslaboratory</groupId>
+            <artifactId>user-server</artifactId>
+            <version>${project.parent.version}</version>
+        </dependency>
+
+        <!--mybatis-plus-->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/standard-library/src/main/java/com/yuanchu/limslaboratory/controller/SerialNumberController.java b/standard-library/src/main/java/com/yuanchu/limslaboratory/controller/SerialNumberController.java
new file mode 100644
index 0000000..fc8f537
--- /dev/null
+++ b/standard-library/src/main/java/com/yuanchu/limslaboratory/controller/SerialNumberController.java
@@ -0,0 +1,58 @@
+package com.yuanchu.limslaboratory.controller;
+
+
+import com.yuanchu.limslaboratory.pojo.SerialNumber;
+import com.yuanchu.limslaboratory.service.SerialNumberService;
+import com.yuanchu.limslaboratory.utils.JackSonUtil;
+import com.yuanchu.limslaboratory.utils.RedisUtil;
+import com.yuanchu.limslaboratory.vo.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-07-11
+ */
+@Api(tags = "鏍囧噯搴�-->鍨嬪彿鎿嶄綔")
+@RestController
+@RequestMapping("/serial-number")
+public class SerialNumberController {
+
+    @Autowired
+    private SerialNumberService serialNumberService;
+
+    @ApiOperation("鏍囧噯搴�-->娣诲姞鍨嬪彿")
+    @PostMapping("/add")
+    public Result<?> addSerialNumberInformation(@RequestHeader("X-Token") String token,@RequestBody SerialNumber serialNumber) throws Exception {
+        Object object = RedisUtil.get(token);
+        Map<String, Object> unmarshal = JackSonUtil.unmarshal(JackSonUtil.marshal(object), Map.class);
+        serialNumber.setUserId((Integer) unmarshal.get("id"));
+        Integer isStandardsSuccess = serialNumberService.addSerialNumberInformation(serialNumber);
+        if (isStandardsSuccess == 1) {
+            return Result.success("娣诲姞銆�"+ serialNumber.getName() +"銆戞垚鍔燂紒");
+        }
+        return Result.fail("娣诲姞銆�"+ serialNumber.getName() +"銆戝け璐ワ紒");
+    }
+
+    @ApiOperation("鏍囧噯搴�-->鐐瑰嚮渚ц竟鏍忔爣鍑嗭紝鏌ヨ鎵�鏈夊瀷鍙�")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(value = "鏍囧噯鍙�/鏍囧噯鍚嶇О", name = "IdOrNameOfSerialNumber", dataTypeClass = String.class),
+            @ApiImplicitParam(value = "鏍囧噯鍙稩d", name = "standardsId", dataTypeClass = String.class, required = true)
+    })
+    @GetMapping("/list")
+    public Result<?> listSerialNumberInformation(String IdOrNameOfSerialNumber, String standardsId){
+        List<Map<String, Object>> selectStandards= serialNumberService.listSerialNumberInformation(IdOrNameOfSerialNumber,standardsId);
+        return Result.success(selectStandards);
+    }
+}
diff --git a/standard-library/src/main/java/com/yuanchu/limslaboratory/controller/SpecificationsController.java b/standard-library/src/main/java/com/yuanchu/limslaboratory/controller/SpecificationsController.java
new file mode 100644
index 0000000..f19b84f
--- /dev/null
+++ b/standard-library/src/main/java/com/yuanchu/limslaboratory/controller/SpecificationsController.java
@@ -0,0 +1,72 @@
+package com.yuanchu.limslaboratory.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.limslaboratory.pojo.Specifications;
+import com.yuanchu.limslaboratory.pojo.Standards;
+import com.yuanchu.limslaboratory.service.SpecificationsService;
+import com.yuanchu.limslaboratory.utils.JackSonUtil;
+import com.yuanchu.limslaboratory.utils.RedisUtil;
+import com.yuanchu.limslaboratory.vo.ListSpecificationsInformation;
+import com.yuanchu.limslaboratory.vo.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * <p>
+ *  鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-07-11
+ */
+@Api(tags = "鏍囧噯搴�-->鍨嬪彿-->浜у搧瑙勬牸鎿嶄綔")
+@RestController
+@RequestMapping("/specifications")
+public class SpecificationsController {
+
+    @Autowired
+    private SpecificationsService specificationsService;
+
+    @ApiOperation("鏍囧噯搴�-->浜у搧瑙勬牸")
+    @PostMapping("/add")
+    public Result<?> addSpecificationsInformation(@RequestHeader("X-Token") String token,@RequestBody Specifications specifications) throws Exception {
+        Object object = RedisUtil.get(token);
+        Map<String, Object> unmarshal = JackSonUtil.unmarshal(JackSonUtil.marshal(object), Map.class);
+        specifications.setUserId((Integer) unmarshal.get("id"));
+        Integer isStandardsSuccess = specificationsService.addSpecificationsInformation(specifications);
+        if (isStandardsSuccess == 1) {
+            return Result.success("娣诲姞銆�"+ specifications.getName() +"銆戞垚鍔燂紒");
+        }
+        return Result.fail("娣诲姞銆�"+ specifications.getName() +"銆戝け璐ワ紒");
+    }
+
+    @ApiOperation("鏍囧噯搴�-->鏍规嵁鍨嬪彿鏌ヨ浜у搧瑙勬牸")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "pageNo", value = "璧峰椤�", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "pageSize", value = "姣忎竴椤垫暟閲�", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "specificationsName", value = "鍨嬪彿鍚嶇О", dataTypeClass = String.class),
+            @ApiImplicitParam(name = "serialNumberId", value = "鍨嬪彿ID", dataTypeClass = String.class),
+    })
+    @GetMapping("/list")
+    public Result<?> listSpecificationsInformation(Integer pageNo,
+                                                   Integer pageSize,
+                                                   String specificationsName,
+                                                   String serialNumberId){
+        IPage<ListSpecificationsInformation> pageList= specificationsService.listSpecificationsInformation(specificationsName,serialNumberId,new Page<Objects>(pageNo, pageSize));
+        Map<String, Object> map = new HashMap<>();
+        map.put("row", pageList.getRecords());
+        map.put("total", pageList.getTotal());
+        return Result.success(map);
+    }
+}
diff --git a/standard-library/src/main/java/com/yuanchu/limslaboratory/controller/StandardsController.java b/standard-library/src/main/java/com/yuanchu/limslaboratory/controller/StandardsController.java
new file mode 100644
index 0000000..c7fdf0d
--- /dev/null
+++ b/standard-library/src/main/java/com/yuanchu/limslaboratory/controller/StandardsController.java
@@ -0,0 +1,59 @@
+package com.yuanchu.limslaboratory.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.yuanchu.limslaboratory.pojo.Standards;
+import com.yuanchu.limslaboratory.service.StandardsService;
+import com.yuanchu.limslaboratory.utils.JackSonUtil;
+import com.yuanchu.limslaboratory.utils.MyUtil;
+import com.yuanchu.limslaboratory.utils.RedisUtil;
+import com.yuanchu.limslaboratory.vo.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-07-11
+ */
+@Api(tags = "鏍囧噯搴撴搷浣�")
+@RestController
+@RequestMapping("/standards")
+public class StandardsController {
+
+    @Autowired
+    private StandardsService standardsService;
+
+    @ApiOperation("鏍囧噯搴�-->娣诲姞鏍囧噯")
+    @PostMapping("/add")
+    public Result<?> addStandardsInformation(@RequestHeader("X-Token") String token, @RequestBody Standards standards) throws Exception {
+        Object object = RedisUtil.get(token);
+        Map<String, Object> unmarshal = JackSonUtil.unmarshal(JackSonUtil.marshal(object), Map.class);
+        standards.setUserId((Integer) unmarshal.get("id"));
+        Integer isStandardsSuccess = standardsService.addStandardsInformation(standards);
+        if (isStandardsSuccess == 1) {
+            return Result.success("娣诲姞銆�"+ standards.getName() +"銆戞垚鍔燂紒");
+        }
+        return Result.fail("娣诲姞銆�"+ standards.getName() +"銆戝け璐ワ紒");
+    }
+
+    @ApiOperation("鏍囧噯搴�-->鐐瑰嚮鍏ㄩ儴锛氭煡璇㈡墍鏈夋爣鍑嗘暟鎹�")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(value = "鏍囧噯鍙�/鏍囧噯鍚嶇О", name = "IdOrNameOfStandards", dataTypeClass = String.class)
+    })
+    @GetMapping("/list")
+    public Result<?> listStandardsInformation(String IdOrNameOfStandards){
+        List<Map<String, Object>> list = standardsService.listStandardsInformation(IdOrNameOfStandards);
+        return Result.success(list);
+    }
+}
diff --git a/standard-library/src/main/java/com/yuanchu/limslaboratory/mapper/SerialNumberMapper.java b/standard-library/src/main/java/com/yuanchu/limslaboratory/mapper/SerialNumberMapper.java
new file mode 100644
index 0000000..466b13d
--- /dev/null
+++ b/standard-library/src/main/java/com/yuanchu/limslaboratory/mapper/SerialNumberMapper.java
@@ -0,0 +1,19 @@
+package com.yuanchu.limslaboratory.mapper;
+
+import com.yuanchu.limslaboratory.pojo.SerialNumber;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-07-11
+ */
+public interface SerialNumberMapper extends BaseMapper<SerialNumber> {
+
+}
diff --git a/standard-library/src/main/java/com/yuanchu/limslaboratory/mapper/SpecificationsMapper.java b/standard-library/src/main/java/com/yuanchu/limslaboratory/mapper/SpecificationsMapper.java
new file mode 100644
index 0000000..38b90bd
--- /dev/null
+++ b/standard-library/src/main/java/com/yuanchu/limslaboratory/mapper/SpecificationsMapper.java
@@ -0,0 +1,24 @@
+package com.yuanchu.limslaboratory.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.limslaboratory.pojo.Specifications;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yuanchu.limslaboratory.vo.ListSpecificationsInformation;
+
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-07-11
+ */
+public interface SpecificationsMapper extends BaseMapper<Specifications> {
+
+    IPage<ListSpecificationsInformation> listSpecificationsInformation(String specificationsName, String serialNumberId, Page<Objects> page);
+}
diff --git a/standard-library/src/main/java/com/yuanchu/limslaboratory/mapper/StandardsMapper.java b/standard-library/src/main/java/com/yuanchu/limslaboratory/mapper/StandardsMapper.java
new file mode 100644
index 0000000..5155826
--- /dev/null
+++ b/standard-library/src/main/java/com/yuanchu/limslaboratory/mapper/StandardsMapper.java
@@ -0,0 +1,20 @@
+package com.yuanchu.limslaboratory.mapper;
+
+import com.yuanchu.limslaboratory.pojo.Standards;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-07-11
+ */
+public interface StandardsMapper extends BaseMapper<Standards> {
+
+    List<Map<String, Object>> listStandardsInformation(String idOrNameOfStandards);
+}
diff --git a/standard-library/src/main/java/com/yuanchu/limslaboratory/pojo/SerialNumber.java b/standard-library/src/main/java/com/yuanchu/limslaboratory/pojo/SerialNumber.java
new file mode 100644
index 0000000..d650d56
--- /dev/null
+++ b/standard-library/src/main/java/com/yuanchu/limslaboratory/pojo/SerialNumber.java
@@ -0,0 +1,62 @@
+package com.yuanchu.limslaboratory.pojo;
+
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.Version;
+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-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="SerialNumber瀵硅薄", description="鍨嬪彿")
+public class SerialNumber implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "鍨嬪彿缂栧彿", example = "ModelNumber001", required = true)
+    private String id;
+
+    @ApiModelProperty(value = "鍨嬪彿鍚嶇О",example = "鍏夌氦2.0.1", required = true)
+    private String name;
+
+    @TableLogic(value = "1", delval = "0")
+    @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0", hidden = true)
+    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;
+
+    @ApiModelProperty(value = "鍏宠仈瀛楁 鏍囧噯缂栧彿id", example = "230711000002", required = true)
+    private String standardsId;
+
+    @ApiModelProperty(value = "鍏宠仈瀛楁 娣诲姞鐢ㄦ埛id", hidden = true)
+    private Integer userId;
+
+}
diff --git a/standard-library/src/main/java/com/yuanchu/limslaboratory/pojo/Specifications.java b/standard-library/src/main/java/com/yuanchu/limslaboratory/pojo/Specifications.java
new file mode 100644
index 0000000..56d0026
--- /dev/null
+++ b/standard-library/src/main/java/com/yuanchu/limslaboratory/pojo/Specifications.java
@@ -0,0 +1,82 @@
+package com.yuanchu.limslaboratory.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 io.swagger.models.auth.In;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-07-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="Specifications瀵硅薄", description="瑙勬牸")
+public class Specifications implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "瑙勬牸id", hidden = true)
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "瑙勬牸id", example = "modelId", required = true)
+    private String number;
+
+    @ApiModelProperty(value = "浜у搧瑙勬牸鍚嶇О", example = "AB", required = true)
+    private String name;
+
+    @ApiModelProperty(value = "鐢熶骇鎸囦护鍙�", example = "test", required = true)
+    private String instruct;
+
+    @ApiModelProperty(value = "鐢靛帇绛夌骇", example = "test", required = true)
+    private String voltageLevel;
+
+    @ApiModelProperty(value = "涓荤嚎蹇冩埅闈�", example = "test", required = true)
+    private String crossSection;
+
+    @ApiModelProperty(value = "涓荤嚎鑺姱鏁�", example = "test", required = true)
+    private String numberOfCores;
+
+    @ApiModelProperty(value = "瑙勬牸鐘舵�� 0锛氬仠鐢紱1锛氭甯革紱-1锛氳崏绋�", hidden = true)
+    private Integer spe_state;
+
+    @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0", hidden = true)
+    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;
+
+    @ApiModelProperty(value = "鍏宠仈瀛楁 鍨嬪彿id", hidden = true)
+    private String vel;
+
+    @ApiModelProperty(value = "鍏宠仈瀛楁 鍨嬪彿id", example = "230711000002", required = true)
+    private String serialId;
+
+    @ApiModelProperty(value = "鍏宠仈瀛楁 鐢ㄦ埛id", hidden = true)
+    private Integer userId;
+
+}
diff --git a/standard-library/src/main/java/com/yuanchu/limslaboratory/pojo/Standards.java b/standard-library/src/main/java/com/yuanchu/limslaboratory/pojo/Standards.java
new file mode 100644
index 0000000..c9088fe
--- /dev/null
+++ b/standard-library/src/main/java/com/yuanchu/limslaboratory/pojo/Standards.java
@@ -0,0 +1,65 @@
+package com.yuanchu.limslaboratory.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;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-07-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="Standards瀵硅薄", description="鏍囧噯")
+public class Standards implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "鏍囧噯缂栧彿 yyMMdd000001(000001++)", example = "230711000001", required = true)
+    @TableId(value = "id", type = IdType.INPUT)
+    private String id;
+
+    @ApiModelProperty(value = "鏍囧噯鍚嶇О", example = "鍏夌氦", required = true)
+    private String name;
+
+    @ApiModelProperty(value = "鑻辨枃鍚嶇О", example = "OpticalFibre", required = true)
+    private String engName;
+
+    @ApiModelProperty(value = "0锛氬師鏉愭枡锛�1锛氱數绾跨數缂�", example = "1", required = true)
+    private Integer type;
+
+    @TableLogic(value = "1", delval = "0")
+    @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0", hidden = true)
+    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;
+
+    @ApiModelProperty(value = "鍏宠仈瀛楁 鏇存柊浜篿d", hidden = true)
+    private Integer userId;
+
+
+}
diff --git a/standard-library/src/main/java/com/yuanchu/limslaboratory/service/SerialNumberService.java b/standard-library/src/main/java/com/yuanchu/limslaboratory/service/SerialNumberService.java
new file mode 100644
index 0000000..94f4955
--- /dev/null
+++ b/standard-library/src/main/java/com/yuanchu/limslaboratory/service/SerialNumberService.java
@@ -0,0 +1,27 @@
+package com.yuanchu.limslaboratory.service;
+
+import com.yuanchu.limslaboratory.pojo.SerialNumber;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-07-11
+ */
+public interface SerialNumberService extends IService<SerialNumber> {
+
+    /**
+     * 娣诲姞鍨嬪彿锛岄鍏堥渶瑕佸垽鏂敤鎴凤紝鏍囧噯缂栫爜鏄惁瀛樺湪
+     * @param serialNumber
+     * @return
+     */
+    Integer addSerialNumberInformation(SerialNumber serialNumber);
+
+    List<Map<String, Object>> listSerialNumberInformation(String idOrNameOfSerialNumber, String standardsId);
+}
diff --git a/standard-library/src/main/java/com/yuanchu/limslaboratory/service/SpecificationsService.java b/standard-library/src/main/java/com/yuanchu/limslaboratory/service/SpecificationsService.java
new file mode 100644
index 0000000..8991ba5
--- /dev/null
+++ b/standard-library/src/main/java/com/yuanchu/limslaboratory/service/SpecificationsService.java
@@ -0,0 +1,25 @@
+package com.yuanchu.limslaboratory.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.limslaboratory.pojo.Specifications;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yuanchu.limslaboratory.vo.ListSpecificationsInformation;
+
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-07-11
+ */
+public interface SpecificationsService extends IService<Specifications> {
+
+    Integer addSpecificationsInformation(Specifications specifications);
+
+    IPage<ListSpecificationsInformation> listSpecificationsInformation(String specificationsName, String serialNumberId, Page<Objects> page);
+}
diff --git a/standard-library/src/main/java/com/yuanchu/limslaboratory/service/StandardsService.java b/standard-library/src/main/java/com/yuanchu/limslaboratory/service/StandardsService.java
new file mode 100644
index 0000000..0225c87
--- /dev/null
+++ b/standard-library/src/main/java/com/yuanchu/limslaboratory/service/StandardsService.java
@@ -0,0 +1,27 @@
+package com.yuanchu.limslaboratory.service;
+
+import com.yuanchu.limslaboratory.pojo.Standards;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-07-11
+ */
+public interface StandardsService extends IService<Standards> {
+
+    Integer addStandardsInformation(Standards standards);
+
+    List<Map<String, Object>> listStandardsInformation(String IdOrNameOfStandards);
+
+    /**
+     * 鏍规嵁Id鏌ヨ鏄惁瀛樺湪璇ユ爣鍑�
+     */
+    Boolean standardsIsNull(String Id);
+}
diff --git a/standard-library/src/main/java/com/yuanchu/limslaboratory/service/impl/SerialNumberServiceImpl.java b/standard-library/src/main/java/com/yuanchu/limslaboratory/service/impl/SerialNumberServiceImpl.java
new file mode 100644
index 0000000..65272ac
--- /dev/null
+++ b/standard-library/src/main/java/com/yuanchu/limslaboratory/service/impl/SerialNumberServiceImpl.java
@@ -0,0 +1,64 @@
+package com.yuanchu.limslaboratory.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.yuanchu.limslaboratory.pojo.SerialNumber;
+import com.yuanchu.limslaboratory.mapper.SerialNumberMapper;
+import com.yuanchu.limslaboratory.pojo.Standards;
+import com.yuanchu.limslaboratory.pojo.User;
+import com.yuanchu.limslaboratory.service.SerialNumberService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yuanchu.limslaboratory.service.StandardsService;
+import com.yuanchu.limslaboratory.service.UserService;
+import com.yuanchu.limslaboratory.utils.MyUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-07-11
+ */
+@Service
+public class SerialNumberServiceImpl extends ServiceImpl<SerialNumberMapper, SerialNumber> implements SerialNumberService {
+
+    @Resource
+    private SerialNumberMapper serialNumberMapper;
+
+    @Autowired
+    private UserService userService;
+
+    @Autowired
+    private StandardsService standardsService;
+
+    @Override
+    public Integer addSerialNumberInformation(SerialNumber serialNumber) {
+        Boolean userIsNull = userService.userIsNull(serialNumber.getUserId());
+        if (userIsNull){
+            Boolean standardsIsNull = standardsService.standardsIsNull(serialNumber.getStandardsId());
+            if (!ObjectUtils.isEmpty(standardsIsNull)){
+                return serialNumberMapper.insert(serialNumber);
+            }
+        }
+        return 0;
+    }
+
+
+    @Override
+    public List<Map<String, Object>> listSerialNumberInformation(String idOrNameOfSerialNumber, String standardsId) {
+        LambdaQueryWrapper<SerialNumber> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SerialNumber::getStandardsId, standardsId);
+        wrapper.like(SerialNumber::getId, idOrNameOfSerialNumber);
+        wrapper.or().like(SerialNumber::getName, idOrNameOfSerialNumber);
+        wrapper.select(SerialNumber::getId, SerialNumber::getName);
+        return serialNumberMapper.selectMaps(wrapper);
+    }
+}
diff --git a/standard-library/src/main/java/com/yuanchu/limslaboratory/service/impl/SpecificationsServiceImpl.java b/standard-library/src/main/java/com/yuanchu/limslaboratory/service/impl/SpecificationsServiceImpl.java
new file mode 100644
index 0000000..099e61e
--- /dev/null
+++ b/standard-library/src/main/java/com/yuanchu/limslaboratory/service/impl/SpecificationsServiceImpl.java
@@ -0,0 +1,62 @@
+package com.yuanchu.limslaboratory.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.limslaboratory.pojo.Specifications;
+import com.yuanchu.limslaboratory.mapper.SpecificationsMapper;
+import com.yuanchu.limslaboratory.service.SpecificationsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yuanchu.limslaboratory.service.StandardsService;
+import com.yuanchu.limslaboratory.service.UserService;
+import com.yuanchu.limslaboratory.vo.ListSpecificationsInformation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
+
+import javax.annotation.Resource;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * <p>
+ *  鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-07-11
+ */
+@Service
+public class SpecificationsServiceImpl extends ServiceImpl<SpecificationsMapper, Specifications> implements SpecificationsService {
+
+    @Resource
+    private SpecificationsMapper specificationsMapper;
+
+    @Autowired
+    private StandardsService standardsService;
+
+    @Autowired
+    private UserService userService;
+
+    @Override
+    public Integer addSpecificationsInformation(Specifications specifications) {
+        Boolean userIsNull = userService.userIsNull(specifications.getUserId());
+        if (userIsNull){
+            Boolean standardsIsNull = standardsService.standardsIsNull(specifications.getSerialId());
+            if (!ObjectUtils.isEmpty(standardsIsNull)){
+                LambdaQueryWrapper<Specifications> wrapper = new LambdaQueryWrapper<>();
+                wrapper.eq(Specifications::getNumber, specifications.getNumber());
+                Specifications specificationsNumberIsNull = specificationsMapper.selectOne(wrapper);
+                if (ObjectUtils.isEmpty(specificationsNumberIsNull)){
+                    return specificationsMapper.insert(specifications);
+                }
+            }
+        }
+        return 0;
+    }
+
+    @Override
+    public IPage<ListSpecificationsInformation> listSpecificationsInformation(String specificationsName, String serialNumberId, Page<Objects> page) {
+        return specificationsMapper.listSpecificationsInformation(specificationsName,serialNumberId,page);
+    }
+}
diff --git a/standard-library/src/main/java/com/yuanchu/limslaboratory/service/impl/StandardsServiceImpl.java b/standard-library/src/main/java/com/yuanchu/limslaboratory/service/impl/StandardsServiceImpl.java
new file mode 100644
index 0000000..d82050d
--- /dev/null
+++ b/standard-library/src/main/java/com/yuanchu/limslaboratory/service/impl/StandardsServiceImpl.java
@@ -0,0 +1,57 @@
+package com.yuanchu.limslaboratory.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.yuanchu.limslaboratory.pojo.Standards;
+import com.yuanchu.limslaboratory.mapper.StandardsMapper;
+import com.yuanchu.limslaboratory.pojo.User;
+import com.yuanchu.limslaboratory.service.StandardsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yuanchu.limslaboratory.service.UserService;
+import com.yuanchu.limslaboratory.utils.MyUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2023-07-11
+ */
+@Service
+public class StandardsServiceImpl extends ServiceImpl<StandardsMapper, Standards> implements StandardsService {
+
+    @Resource
+    private StandardsMapper standardsMapper;
+
+    @Autowired
+    private UserService userService;
+
+    @Override
+    public Integer addStandardsInformation(Standards standards) {
+        Boolean userIsNull = userService.userIsNull(standards.getUserId());
+        if (userIsNull){
+            return standardsMapper.insert(standards);
+        }
+        return 0;
+    }
+
+    @Override
+    public List<Map<String, Object>>  listStandardsInformation(String IdOrNameOfStandards) {
+        return standardsMapper.listStandardsInformation(IdOrNameOfStandards);
+    }
+
+    @Override
+    public Boolean standardsIsNull(String Id) {
+        LambdaQueryWrapper<Standards> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(Standards::getId, Id);
+        Standards standardsIsNull = standardsMapper.selectOne(wrapper);
+        return !ObjectUtils.isEmpty(standardsIsNull);
+    }
+}
diff --git a/standard-library/src/main/java/com/yuanchu/limslaboratory/vo/ListSpecificationsInformation.java b/standard-library/src/main/java/com/yuanchu/limslaboratory/vo/ListSpecificationsInformation.java
new file mode 100644
index 0000000..c3e13de
--- /dev/null
+++ b/standard-library/src/main/java/com/yuanchu/limslaboratory/vo/ListSpecificationsInformation.java
@@ -0,0 +1,27 @@
+package com.yuanchu.limslaboratory.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="ListSpecificationsInformation瀵硅薄", description="鐢ㄤ簬鍒嗛〉鏄剧ず瑙勬牸鏁版嵁")
+public class ListSpecificationsInformation {
+
+    private Integer id;
+
+    private String name;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+
+    private String username;
+
+    private String vel;
+
+    private Integer spe_state;
+}
diff --git a/standard-library/src/main/resources/mapper/SerialNumberMapper.xml b/standard-library/src/main/resources/mapper/SerialNumberMapper.xml
new file mode 100644
index 0000000..f9f96e2
--- /dev/null
+++ b/standard-library/src/main/resources/mapper/SerialNumberMapper.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.limslaboratory.mapper.SerialNumberMapper">
+
+</mapper>
diff --git a/standard-library/src/main/resources/mapper/SpecificationsMapper.xml b/standard-library/src/main/resources/mapper/SpecificationsMapper.xml
new file mode 100644
index 0000000..aaf57c3
--- /dev/null
+++ b/standard-library/src/main/resources/mapper/SpecificationsMapper.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yuanchu.limslaboratory.mapper.SpecificationsMapper">
+
+    <resultMap id="listSpecificationsInformationMap" type="com.yuanchu.limslaboratory.vo.ListSpecificationsInformation">
+        <result property="id" column="id"/>
+        <result property="name" column="name"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="username" column="username"/>
+        <result property="vel" column="vel"/>
+        <result property="spe_state" column="spe_state"/>
+    </resultMap>
+
+    <select id="listSpecificationsInformation" resultMap="listSpecificationsInformationMap">
+        SELECT s.`id`,s.`name`,s.`update_time`,u.`name` username,s.`vel`,s.`spe_state`
+        FROM specifications s,`user` u
+        WHERE s.`user_id` = u.`id`
+            AND s.`serial_id` = #{serialNumberId}
+        <if test="specificationsName != null">
+            AND s.`name` = #{specificationsName}
+        </if>
+    </select>
+</mapper>
diff --git a/standard-library/src/main/resources/mapper/StandardsMapper.xml b/standard-library/src/main/resources/mapper/StandardsMapper.xml
new file mode 100644
index 0000000..35264ea
--- /dev/null
+++ b/standard-library/src/main/resources/mapper/StandardsMapper.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yuanchu.limslaboratory.mapper.StandardsMapper">
+
+    <select id="listStandardsInformation" resultType="Map">
+        SELECT s.`id`, s.`name`, s.`eng_name`, DATE_FORMAT(s.`create_time`, '%Y-%m-%d %H:%i') createTime
+        FROM standards s
+        <if test="idOrNameOfStandards != null">
+            WHERE s.`id` LIKE concat('%',#{idOrNameOfStandards},'%')
+               OR s.name LIKE concat('%',#{idOrNameOfStandards},'%')
+        </if>
+    </select>
+</mapper>
diff --git a/sys/pom.xml b/sys/pom.xml
index 23b57dc..eb71288 100644
--- a/sys/pom.xml
+++ b/sys/pom.xml
@@ -16,12 +16,20 @@
     <packaging>jar</packaging>
 
     <dependencies>
-        <!--鐢ㄦ埛鏈嶅姟-->
+        <!--鐢ㄦ埛鏈嶅姟妯″潡-->
         <dependency>
             <groupId>com.yunchu.limslaboratory</groupId>
             <artifactId>user-server</artifactId>
             <version>${project.parent.version}</version>
         </dependency>
+
+        <!--鏍囧噯搴撴ā鍧�-->
+        <dependency>
+            <groupId>com.yunchu.limslaboratory</groupId>
+            <artifactId>standard-library</artifactId>
+            <version>${project.parent.version}</version>
+        </dependency>
+
         <!--鍩虹妗嗘灦绫�-->
         <dependency>
             <groupId>com.yunchu.limslaboratory</groupId>
diff --git a/sys/src/main/resources/application-dev.yml b/sys/src/main/resources/application-dev.yml
index 889f183..f06d3ad 100644
--- a/sys/src/main/resources/application-dev.yml
+++ b/sys/src/main/resources/application-dev.yml
@@ -34,27 +34,25 @@
       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
+  redis:
+    # redis鏁版嵁搴撶储寮�(榛樿涓�0)锛屾垜浠娇鐢ㄧ储寮曚负3鐨勬暟鎹簱锛岄伩鍏嶅拰鍏朵粬鏁版嵁搴撳啿绐�
+    database: 0
+    # redis鏈嶅姟鍣ㄥ湴鍧�锛堥粯璁や负localhost锛�
+    host: localhost
+    # redis绔彛锛堥粯璁や负6379锛�
+    port: 6380
+    # redis璁块棶瀵嗙爜锛堥粯璁や负绌猴級
+    password: null
+    # 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/sys/src/main/resources/application.yml b/sys/src/main/resources/application.yml
index 4457033..6b18398 100644
--- a/sys/src/main/resources/application.yml
+++ b/sys/src/main/resources/application.yml
@@ -5,12 +5,12 @@
     active: dev
 
 login:
-  userID: 9c08241a7c38cb25efafde9dd1347bab
-  secret: D1E3ED958C5DB5BDF1FC9F77CE54B29B016213acd698f4686cac2f399f1c8d18
+  userID: c8b1aaacec366c24e5d18c7eea9e551b
+  secret: 701C85FCE0F7CFD714C2052D77098DC7f407b0ee79210bcef51787a0eb8ec7a5
 
 mybatis-plus:
   type-aliases-package: com.yuanchu.limslaboratory.pojo
-  mapper-locations: classpath:mapper/*.xml
+  mapper-locations: classpath*:/mapper/*.xml
   global-config:
     banner: off # 鍏抽棴mybatis-plus鍚姩鍥炬爣
 
@@ -24,4 +24,4 @@
   httpclient:
     enabled: false # 鍏抽棴 httpclient
   okhttp:
-    enabled: true # 寮�鍚� okhttp
\ No newline at end of file
+    enabled: true # 寮�鍚� okhttp
diff --git a/sys/src/test/java/com/yuanchu/limslaboratory/CodeGenerator.java b/sys/src/test/java/com/yuanchu/limslaboratory/CodeGenerator.java
index a70131e..8cb102c 100644
--- a/sys/src/test/java/com/yuanchu/limslaboratory/CodeGenerator.java
+++ b/sys/src/test/java/com/yuanchu/limslaboratory/CodeGenerator.java
@@ -22,7 +22,7 @@
     public static String database_username = "root";
     public static String database_password= "123456";
     public static String author = "姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃";
-    public static String model_name = "/user-server"; // 濡傛灉涓哄垎甯冨紡濉瓙妯″潡鍚嶇О锛屽鏋滀笉鏄垎甯冨紡涓虹┖鍗冲彲
+    public static String model_name = "/standard-library"; // 濡傛灉涓哄垎甯冨紡濉瓙妯″潡鍚嶇О锛屽鏋滀笉鏄垎甯冨紡涓虹┖鍗冲彲
     public static String setParent = "com.yuanchu.limslaboratory"; // 鍖呰矾寰�
     public static Boolean Override = false; // 鏄惁瑕嗙洊鍘熸潵鐨勬枃浠讹紵
 
@@ -98,7 +98,7 @@
                 .setColumnNaming(NamingStrategy.underline_to_camel)
                 .setEntityLombokModel(true)
                 .setRestControllerStyle(true)
-                .setInclude(scanner("琛ㄥ悕锛屽涓┖鏍煎垎鍓�").split(","))
+                .setInclude(scanner("琛ㄥ悕锛屽涓亾鍙峰垎鍓�").split(","))
                 .setControllerMappingHyphenStyle(true)
                 .setTablePrefix("m_");
         mpg.setStrategy(strategy);
diff --git a/user-server/pom.xml b/user-server/pom.xml
index 96c60be..1fb88b1 100644
--- a/user-server/pom.xml
+++ b/user-server/pom.xml
@@ -16,11 +16,6 @@
     <packaging>jar</packaging>
     <dependencies>
         <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-test</artifactId>
-        </dependency>
-
-        <dependency>
             <groupId>com.yunchu.limslaboratory</groupId>
             <artifactId>framework</artifactId>
             <version>${project.parent.version}</version>
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/clients/UserLoginUtils.java b/user-server/src/main/java/com/yuanchu/limslaboratory/clients/UserLoginUtils.java
index b54743d..8bc7c5a 100644
--- a/user-server/src/main/java/com/yuanchu/limslaboratory/clients/UserLoginUtils.java
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/clients/UserLoginUtils.java
@@ -2,6 +2,7 @@
 
 import com.yuanchu.limslaboratory.pojo.User;
 import com.yuanchu.limslaboratory.shiro.utils.JwtUtils;
+import com.yuanchu.limslaboratory.utils.MyUtil;
 import com.yuanchu.limslaboratory.utils.RedisUtil;
 import com.yuanchu.limslaboratory.vo.Result;
 import org.springframework.beans.factory.annotation.Value;
@@ -23,46 +24,50 @@
     @Value("${login.secret}")
     private String LoginSecret;
 
-//    public Result<Map<String, Object>> LoginExamine(User user){
-//        Map<String, Object> mapData = new HashMap<>();
-//        mapData.put("LoginUserID", LoginUserID);
-//        mapData.put("LoginSecret", LoginSecret);
-//        Result<?> code = userClient.BusynessUserLogin(mapData);
-//        if (code.getCode() == 200){
-//            Result<?> result = userClient.BusynessUserLoginToken(code.getData().toString());
-//            if (result.getCode() == 200){
-//                Map data = (Map) result.getData();
-//                String token = data.get("token").toString();
-//                data.remove("token");
-////                user.setMap(data);
-//                //瀛樺叆redis,浜屼釜灏忔椂鍚庡垹闄�
-//                RedisUtil.set(token, user, 2);
-//                // 灏嗙鍙戠殑 JWT token 杩斿洖缁欏墠绔�
-//                HashMap<String, Object> map = new HashMap<>();
-//                String refresh = JwtUtils.sign(user.getAccount());
-//                map.put("token", token);
-//                map.put("refresh", refresh);
-//                RedisUtil.set(user.getAccount(), map, 168);
-//                return Result.success(map);
-//            } else {
-//                return Result.fail(result.getMessage());
-//            }
-//        } else {
-//            return Result.fail(code.getMessage());
-//        }
-//    }
-
-
     public Result<Map<String, Object>> LoginExamine(User user){
-        String token = JwtUtils.sign(user.getAccount());
-        //瀛樺叆redis,浜屼釜灏忔椂鍚庡垹闄�
-        RedisUtil.set(token, user, 2);
-        // 灏嗙鍙戠殑 JWT token 杩斿洖缁欏墠绔�
-        HashMap<String, Object> map = new HashMap<>();
-        String refresh = JwtUtils.sign(user.getAccount());
-        map.put("token", token);
-        map.put("refresh", refresh);
-        RedisUtil.set(user.getAccount(), map, 120);
-        return Result.success(map);
+        Map<String, Object> mapData = new HashMap<>();
+        mapData.put("LoginUserID", LoginUserID);
+        mapData.put("LoginSecret", LoginSecret);
+        Result<?> code = userClient.BusynessUserLogin(mapData);
+        if (code.getCode() == 200){
+            Result<?> result = userClient.BusynessUserLoginToken(code.getData().toString());
+            if (result.getCode() == 200){
+                Map data = (Map) result.getData();
+                String token = data.get("token").toString();
+                data.remove("token");
+                HashMap<String, Object> mapRedis = new HashMap<>();
+                mapRedis.put("id", user.getId());
+                mapRedis.put("account", user.getAccount());
+                mapRedis.put("name", user.getName());
+                mapRedis.put("data", data);
+                //瀛樺叆redis,浜屼釜灏忔椂鍚庡垹闄�
+                RedisUtil.set(token, mapRedis, 120);
+                // 灏嗙鍙戠殑 JWT token 杩斿洖缁欏墠绔�
+                HashMap<String, Object> map = new HashMap<>();
+                String refresh = JwtUtils.sign(user.getAccount());
+                map.put("token", token);
+                map.put("refresh", refresh);
+                RedisUtil.set(user.getAccount(), map, 168);
+                return Result.success(map);
+            } else {
+                return Result.fail(result.getMessage());
+            }
+        } else {
+            return Result.fail(code.getMessage());
+        }
     }
+
+
+//    public Result<Map<String, Object>> LoginExamine(User user){
+//        String token = JwtUtils.sign(user.getAccount());
+//        //瀛樺叆redis,浜屼釜灏忔椂鍚庡垹闄�
+//        RedisUtil.set(token, user, 2);
+//        // 灏嗙鍙戠殑 JWT token 杩斿洖缁欏墠绔�
+//        HashMap<String, Object> map = new HashMap<>();
+//        String refresh = JwtUtils.sign(user.getAccount());
+//        map.put("token", token);
+//        map.put("refresh", refresh);
+//        RedisUtil.set(user.getAccount(), map, 120);
+//        return Result.success(map);
+//    }
 }
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/controller/UserController.java b/user-server/src/main/java/com/yuanchu/limslaboratory/controller/UserController.java
index a91ab59..e28ea7d 100644
--- a/user-server/src/main/java/com/yuanchu/limslaboratory/controller/UserController.java
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/controller/UserController.java
@@ -1,13 +1,18 @@
 package com.yuanchu.limslaboratory.controller;
 
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yuanchu.limslaboratory.clients.UserLoginUtils;
 import com.yuanchu.limslaboratory.pojo.Enterprise;
 import com.yuanchu.limslaboratory.pojo.User;
 import com.yuanchu.limslaboratory.service.UserService;
 import com.yuanchu.limslaboratory.shiro.realm.ShiroRealm;
-import com.yuanchu.limslaboratory.utils.SpringUtils;
+import com.yuanchu.limslaboratory.utils.SpringUtil;
+import com.yuanchu.limslaboratory.vo.NewPersonnelVo;
+import com.yuanchu.limslaboratory.vo.PagePersonnelVo;
 import com.yuanchu.limslaboratory.vo.Result;
+import com.yuanchu.limslaboratory.vo.UpdatePersonnelVo;
 import io.swagger.annotations.*;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.authc.IncorrectCredentialsException;
@@ -15,13 +20,11 @@
 import org.apache.shiro.authc.UsernamePasswordToken;
 import org.apache.shiro.subject.Subject;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
 
 /**
  * <p>
@@ -45,7 +48,7 @@
             @ApiImplicitParam(name = "password", value = "瀵嗙爜", dataTypeClass = String.class, required = true)
     })
     @PostMapping("/login")
-    public Result<?> UserLogin(String account, String password){
+    public Result<?> userLogin(String account, String password){
         boolean loginSuccess = false;
         Subject subject = SecurityUtils.getSubject();
         if (!subject.isAuthenticated()) {
@@ -61,14 +64,25 @@
         }
         if (loginSuccess) {
             // 鑾峰彇shiroRealm涓殑鏁版嵁
-            ShiroRealm bean = SpringUtils.getBean(ShiroRealm.class);
+            ShiroRealm bean = SpringUtil.getBean(ShiroRealm.class);
             User user = bean.user;
             user.setPassword(null);
-            UserLoginUtils bean1 = SpringUtils.getBean(UserLoginUtils.class);
+            UserLoginUtils bean1 = SpringUtil.getBean(UserLoginUtils.class);
             return bean1.LoginExamine(user);
         }else {
             return Result.fail("鐧诲綍澶辫触");
         }
+    }
+
+    @ApiOperation("鐧诲綍-->鑾峰彇鐢ㄦ埛淇℃伅")
+    @GetMapping("/info")
+    public Result<?> getUserInfo(@RequestHeader("X-Token") String token){
+        //鏍规嵁token鑾峰彇鐢ㄦ埛淇℃伅
+        Map<String,Object> data = userService.getUserInfo(token);
+        if (data != null){
+            return Result.success(data);
+        }
+        return Result.fail(202,"鐢ㄦ埛鐧诲綍淇℃伅鏃犳晥锛岃閲嶆柊鐧诲綍");
     }
 
     @PostMapping("/getUserById")
@@ -88,8 +102,41 @@
         } catch (Exception e) {
             return Result.fail("鐢ㄦ埛id涓虹┖!");
         }
-
-
     }
 
+    @PostMapping("/add_new_personnel")
+    @ApiOperation("瀹為獙瀹ょ鐞�-->浜哄憳绠$悊-->鏂板浜哄憳")
+    public Result<?> addNewPersonnel(@RequestBody NewPersonnelVo newPersonnelVo) {
+        newPersonnelVo.setPassword("123456");
+        Integer isAddSuccess = userService.addNewPersonnel(newPersonnelVo);
+        if (isAddSuccess == 1){
+            return Result.success("娣诲姞銆�" + newPersonnelVo.getName() + "銆戞垚鍔燂紝榛樿瀵嗙爜涓猴細" + newPersonnelVo.getPassword());
+        }
+        return Result.fail("娣诲姞澶辫触锛�");
+    }
+
+    @PutMapping("/update_new_personnel")
+    @ApiOperation("瀹為獙瀹ょ鐞�-->浜哄憳绠$悊-->缂栬緫鎿嶄綔")
+    public Result<?> updateNewPersonnel(@RequestBody UpdatePersonnelVo updatePersonnelVo) {
+        Integer isUpdateSuccess = userService.updateNewPersonnel(updatePersonnelVo);
+        if (isUpdateSuccess == 1){
+            return Result.success("鏇存柊銆�" + updatePersonnelVo.getName() + "銆戞垚鍔�");
+        }
+        return Result.fail("鏇存柊銆�" + updatePersonnelVo.getName() + "銆戝け璐�");
+    }
+
+    @GetMapping("/list_new_personnel")
+    @ApiOperation("瀹為獙瀹ょ鐞�-->浜哄憳绠$悊-->鍒嗛〉鏌ヨ")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "pageNo", value = "璧峰椤�", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "pageSize", value = "姣忎竴椤垫暟閲�", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "name", value = "浜哄憳鍚嶇О", dataTypeClass = String.class)
+    })
+    public Result<Map<String, Object>> getNewPersonnelPage(Integer pageNo, Integer pageSize, String name) {
+        IPage<PagePersonnelVo> PageList = userService.getNewPersonnelPage(name, new Page<Objects>(pageNo, pageSize));
+        Map<String, Object> map = new HashMap<>();
+        map.put("row", PageList.getRecords());
+        map.put("total", PageList.getTotal());
+        return Result.success(map);
+    }
 }
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/mapper/UserMapper.java b/user-server/src/main/java/com/yuanchu/limslaboratory/mapper/UserMapper.java
index a0b0e21..4e78a8f 100644
--- a/user-server/src/main/java/com/yuanchu/limslaboratory/mapper/UserMapper.java
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/mapper/UserMapper.java
@@ -1,10 +1,14 @@
 package com.yuanchu.limslaboratory.mapper;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yuanchu.limslaboratory.pojo.User;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yuanchu.limslaboratory.vo.PagePersonnelVo;
 import org.springframework.stereotype.Repository;
 
 import java.util.Map;
+import java.util.Objects;
 
 /**
  * <p>
@@ -16,4 +20,6 @@
  */
 public interface UserMapper extends BaseMapper<User> {
     Map<String, String> selectUserByUserId(int userId);
+
+    IPage<PagePersonnelVo> getNewPersonnelPage(String name, Page page);
 }
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/Enterprise.java b/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/Enterprise.java
index a94a473..6b5fb32 100644
--- a/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/Enterprise.java
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/Enterprise.java
@@ -1,9 +1,7 @@
 package com.yuanchu.limslaboratory.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 com.baomidou.mybatisplus.annotation.*;
+
 import java.time.LocalDateTime;
 import java.io.Serializable;
 import java.util.Date;
@@ -61,6 +59,7 @@
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone="GMT+8")
     private Date updateTime;
 
+    @Version
     @ApiModelProperty(value = "閿�")
     private Integer version;
 
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/EnterpriseUserList.java b/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/EnterpriseUserList.java
index 2950361..35ae87b 100644
--- a/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/EnterpriseUserList.java
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/EnterpriseUserList.java
@@ -1,9 +1,7 @@
 package com.yuanchu.limslaboratory.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 com.baomidou.mybatisplus.annotation.*;
+
 import java.time.LocalDateTime;
 import java.io.Serializable;
 import java.util.Date;
@@ -39,7 +37,8 @@
     @ApiModelProperty(value = "鐢ㄦ埛id")
     private Integer userId;
 
-    @ApiModelProperty(value = "0:鍒犻櫎;1:姝e父")
+    @TableLogic(value = "1", delval = "0")
+    @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0")
     private Integer state;
 
     @TableField(fill = FieldFill.INSERT)
@@ -50,6 +49,7 @@
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone="GMT+8")
     private Date updateTime;
 
+    @Version
     private Integer version;
 
 
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/Role.java b/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/Role.java
index cf2e20c..c568112 100644
--- a/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/Role.java
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/Role.java
@@ -1,9 +1,7 @@
 package com.yuanchu.limslaboratory.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 com.baomidou.mybatisplus.annotation.*;
+
 import java.time.LocalDateTime;
 import java.io.Serializable;
 import java.util.Date;
@@ -39,6 +37,7 @@
     @ApiModelProperty(value = "0锛氭棤鏉冮檺锛�1锛氭湁鏉冮檺")
     private Integer power;
 
+    @TableLogic(value = "1", delval = "0")
     @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0")
     private Integer state;
 
@@ -50,6 +49,7 @@
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone="GMT+8")
     private Date updateTime;
 
+    @Version
     @ApiModelProperty(value = "涔愯閿�")
     private Integer version;
 
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/User.java b/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/User.java
index 50c73a1..ee1ba41 100644
--- a/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/User.java
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/User.java
@@ -3,14 +3,19 @@
 import com.baomidou.mybatisplus.annotation.*;
 
 import java.io.Serializable;
+import java.time.LocalDateTime;
 import java.util.Date;
+import java.util.Map;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.sun.jmx.snmp.Timestamp;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
 
 /**
  * <p>
@@ -20,6 +25,7 @@
  * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
  * @since 2023-07-07
  */
+@Accessors(chain = true)
 @Data
 @NoArgsConstructor
 @EqualsAndHashCode(callSuper = false)
@@ -50,21 +56,21 @@
     @ApiModelProperty(value = "骞撮緞")
     private Integer age;
 
-    @TableLogic(value = "1", delval = "0")
-    @ApiModelProperty(value = "鍦ㄨ亴鐘舵�� 姝e父>=1,绂昏亴<=0")
-    private Integer jobState;
-
     @ApiModelProperty(value = "涓�х鍚�")
     private String info;
 
+    @ApiModelProperty(value = "鍦ㄨ亴鐘舵�� 姝e父>=1,绂昏亴<=0")
+    private Integer jobState;
+
     @TableField(fill = FieldFill.INSERT)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone="GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
 
     @TableField(fill = FieldFill.INSERT_UPDATE)
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone="GMT+8")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
+    @Version
     private Integer version;
 
     @ApiModelProperty(value = "鍏宠仈 瑙掕壊id")
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/service/UserService.java b/user-server/src/main/java/com/yuanchu/limslaboratory/service/UserService.java
index d01b0bf..cab8442 100644
--- a/user-server/src/main/java/com/yuanchu/limslaboratory/service/UserService.java
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/service/UserService.java
@@ -1,11 +1,17 @@
 package com.yuanchu.limslaboratory.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yuanchu.limslaboratory.pojo.User;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yuanchu.limslaboratory.vo.NewPersonnelVo;
+import com.yuanchu.limslaboratory.vo.PagePersonnelVo;
+import com.yuanchu.limslaboratory.vo.UpdatePersonnelVo;
 
 import java.io.Serializable;
 
 import java.util.Map;
+import java.util.Objects;
 
 /**
  * <p>
@@ -20,4 +26,17 @@
     Map<String, String> selectUserByUserId(int userId);
 
     User AccordingUsernameSelectAll(String account);
+
+    Integer addNewPersonnel(NewPersonnelVo newPersonnelVo);
+
+    Integer updateNewPersonnel(UpdatePersonnelVo updatePersonnelVo);
+
+    IPage<PagePersonnelVo> getNewPersonnelPage(String name, Page page);
+
+    Map<String, Object> getUserInfo(String token);
+
+    /**
+     * 鏍规嵁Id鏌ヨ鏄惁瀛樺湪璇ョ敤鎴�
+     */
+    Boolean userIsNull(Integer Id);
 }
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/UserServiceImpl.java b/user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/UserServiceImpl.java
index 7f6d726..fc5490c 100644
--- a/user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/UserServiceImpl.java
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/UserServiceImpl.java
@@ -1,18 +1,25 @@
 package com.yuanchu.limslaboratory.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yuanchu.limslaboratory.pojo.User;
 import com.yuanchu.limslaboratory.mapper.UserMapper;
 import com.yuanchu.limslaboratory.service.UserService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
+import com.yuanchu.limslaboratory.utils.RedisUtil;
+import com.yuanchu.limslaboratory.vo.NewPersonnelVo;
+import com.yuanchu.limslaboratory.vo.PagePersonnelVo;
+import com.yuanchu.limslaboratory.vo.UpdatePersonnelVo;
 import org.springframework.stereotype.Service;
+import org.springframework.util.ObjectUtils;
 
 import javax.annotation.Resource;
+import java.util.HashMap;
 import java.util.Map;
-
-import javax.annotation.Resource;
+import java.util.Objects;
 
 /**
  * <p>
@@ -26,19 +33,82 @@
 public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
 
     @Resource
-    UserMapper userMapper;
+    private UserMapper userMapper;
+
+    @Override
+    public Map<String, Object> getUserInfo(String token) {
+        //鏍规嵁token鑾峰彇鐢ㄦ埛淇℃伅
+        Object obj = RedisUtil.get(token);
+        if (!ObjectUtils.isEmpty(obj)){
+            Map loginUser = (Map) obj;
+            Map map = (Map)loginUser.get("data");
+            Object residualTime = map.get("residualTime");
+            int i = Integer.parseInt(residualTime.toString());
+            String remind = null;
+            if (i <= 30) {
+                remind = "鎮ㄦ墍浣跨敤鐨勭郴缁熷嵆灏嗚繃鏈燂紒璇疯仈绯荤鐞嗗憳锛�";
+            }
+            Map<String, Object> data = new HashMap<>();
+            data.put("name",loginUser.get("name"));
+            data.put("remind", remind);
+            return data;
+        }
+        return null;
+    }
+
+    @Override
+    public Boolean userIsNull(Integer Id) {
+        LambdaQueryWrapper<User> userLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        userLambdaQueryWrapper.eq(User::getId, Id);
+        userLambdaQueryWrapper.select(User::getName);
+        User user = userMapper.selectOne(userLambdaQueryWrapper);
+        return !ObjectUtils.isEmpty(user);
+    }
 
     @Override
     public Map<String, String> selectUserByUserId(int userId) {
         return userMapper.selectUserByUserId(userId);
     }
-    @Resource
-    private UserMapper mapper;
 
     @Override
     public User AccordingUsernameSelectAll(String account) {
         LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(User::getAccount, account);
-        return mapper.selectOne(wrapper);
+        wrapper.select(User::getPassword, User::getId, User::getName, User::getAccount);
+        return userMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public Integer addNewPersonnel(NewPersonnelVo newPersonnelVo) {
+        User user = new User()
+                .setName(newPersonnelVo.getName())
+                .setAccount(newPersonnelVo.getAccount())
+                .setAge(newPersonnelVo.getAge())
+                .setPhone(newPersonnelVo.getPhone())
+                .setEmail(newPersonnelVo.getEmail())
+                .setRoleId(newPersonnelVo.getRole_id())
+                .setPassword(newPersonnelVo.getPassword());
+        return userMapper.insert(user);
+    }
+
+    @Override
+    public Integer updateNewPersonnel(UpdatePersonnelVo updatePersonnelVo) {
+        User user = new User()
+                .setName(updatePersonnelVo.getName())
+                .setAccount(updatePersonnelVo.getAccount())
+                .setAge(updatePersonnelVo.getAge())
+                .setPhone(updatePersonnelVo.getPhone())
+                .setEmail(updatePersonnelVo.getEmail())
+                .setRoleId(updatePersonnelVo.getRole_id())
+                .setPassword(updatePersonnelVo.getPassword())
+                .setJobState(updatePersonnelVo.getJobState());
+        LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.eq(User::getId, updatePersonnelVo.getId());
+        return userMapper.update(user, updateWrapper);
+    }
+
+    @Override
+    public IPage<PagePersonnelVo> getNewPersonnelPage(String name, Page page) {
+        return userMapper.getNewPersonnelPage(name, page);
     }
 }
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/config/ShiroConfig.java b/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/config/ShiroConfig.java
index be5d706..382e740 100644
--- a/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/config/ShiroConfig.java
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/config/ShiroConfig.java
@@ -123,15 +123,27 @@
         return securityManager;
     }
 
-//    鍒涘缓鑷畾涔塕ealm
+    //    鍒涘缓鑷畾涔塕ealm
     @Bean
     public Realm shiroRealm() {
-        return new ShiroRealm();
+        ShiroRealm realm = new ShiroRealm();
+//        HashedCredentialsMatcher credentialsMatcher = new HashedCredentialsMatcher();
+////        //璁剧疆浣跨敤MD5鍔犲瘑绠楁硶
+////        credentialsMatcher.setHashAlgorithmName(Md5Hash.ALGORITHM_NAME);
+////        //鏁e垪娆℃暟
+////        credentialsMatcher.setHashIterations(1024);
+//        realm.setCredentialsMatcher(credentialsMatcher);
+        return realm;
     }
 
     @Bean
     public Realm JwtRealm(){
-        return new JwtRealm();
+        JwtRealm jwtRealm = new JwtRealm();
+        // 璁剧疆鍔犲瘑绠楁硶
+        CredentialsMatcher credentialsMatcher = new JwtCredentialsMatcher();
+        // 璁剧疆鍔犲瘑娆℃暟
+        jwtRealm.setCredentialsMatcher(credentialsMatcher);
+        return jwtRealm;
     }
 
 
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/realm/JwtRealm.java b/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/realm/JwtRealm.java
index 4293742..d75fd50 100644
--- a/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/realm/JwtRealm.java
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/realm/JwtRealm.java
@@ -2,10 +2,8 @@
 
 import com.yuanchu.limslaboratory.pojo.User;
 import com.yuanchu.limslaboratory.shiro.JwtToken;
-import com.yuanchu.limslaboratory.shiro.utils.JwtCredentialsMatcher;
 import com.yuanchu.limslaboratory.utils.RedisUtil;
 import org.apache.shiro.authc.*;
-import org.apache.shiro.authc.credential.CredentialsMatcher;
 import org.apache.shiro.authz.AuthorizationInfo;
 import org.apache.shiro.authz.SimpleAuthorizationInfo;
 import org.apache.shiro.realm.AuthorizingRealm;
@@ -46,12 +44,5 @@
     protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
         SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
         return info;
-    }
-
-    @Override
-    public void setCredentialsMatcher(CredentialsMatcher credentialsMatcher) {
-        // 璁剧疆鍔犲瘑绠楁硶
-        CredentialsMatcher jwtCredentialsMatcher = new JwtCredentialsMatcher();
-        super.setCredentialsMatcher(jwtCredentialsMatcher);
     }
 }
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/realm/ShiroRealm.java b/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/realm/ShiroRealm.java
index ec429f4..24b24b1 100644
--- a/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/realm/ShiroRealm.java
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/realm/ShiroRealm.java
@@ -2,10 +2,8 @@
 
 import com.yuanchu.limslaboratory.pojo.User;
 import com.yuanchu.limslaboratory.service.UserService;
-import com.yuanchu.limslaboratory.utils.MyUtils;
-import com.yuanchu.limslaboratory.utils.SpringUtils;
+import com.yuanchu.limslaboratory.utils.SpringUtil;
 import org.apache.shiro.authc.*;
-import org.apache.shiro.authc.credential.CredentialsMatcher;
 import org.apache.shiro.authz.AuthorizationInfo;
 import org.apache.shiro.realm.AuthorizingRealm;
 import org.apache.shiro.subject.PrincipalCollection;
@@ -32,24 +30,12 @@
     protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) {
         String principal = (String) authenticationToken.getPrincipal();
         //鑾峰彇UserService瀵硅薄
-        UserService userService = SpringUtils.getBean(UserService.class);
+        UserService userService = SpringUtil.getBean(UserService.class);
         user = userService.AccordingUsernameSelectAll(principal);
-        MyUtils.PrintLog(user.toString());
         if (!ObjectUtils.isEmpty(user)) {
             return new SimpleAuthenticationInfo(user.getAccount(), user.getPassword(), this.getName());
         } else {
             throw new UnknownAccountException();
         }
-    }
-
-    @Override
-    public void setCredentialsMatcher(CredentialsMatcher credentialsMatcher) {
-//        HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();
-//        //璁剧疆浣跨敤MD5鍔犲瘑绠楁硶
-//        hashedCredentialsMatcher.setHashAlgorithmName(Md5Hash.ALGORITHM_NAME);
-//        //鏁e垪娆℃暟
-//        hashedCredentialsMatcher.setHashIterations(1024);
-//        super.setCredentialsMatcher(hashedCredentialsMatcher);
-        super.setCredentialsMatcher(credentialsMatcher);
     }
 }
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/utils/JwtUtils.java b/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/utils/JwtUtils.java
index f2cd618..68ae14f 100644
--- a/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/utils/JwtUtils.java
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/shiro/utils/JwtUtils.java
@@ -15,7 +15,6 @@
 import org.springframework.util.ObjectUtils;
 
 import javax.annotation.PostConstruct;
-import java.io.UnsupportedEncodingException;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.Map;
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/vo/NewPersonnelVo.java b/user-server/src/main/java/com/yuanchu/limslaboratory/vo/NewPersonnelVo.java
new file mode 100644
index 0000000..ab2cc9a
--- /dev/null
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/vo/NewPersonnelVo.java
@@ -0,0 +1,33 @@
+package com.yuanchu.limslaboratory.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="NewPersonnelVo瀵硅薄", description="鐢ㄤ簬瀵硅鑹茬鐞嗙殑娣诲姞")
+public class NewPersonnelVo {
+
+    @ApiModelProperty(value = "濮撳悕", example = "灏忛粦", required = true)
+    private String name;
+
+    @ApiModelProperty(value = "璐﹀彿", example = "45612345", required = true)
+    private String account;
+
+    @ApiModelProperty(value = "0锛氭棤鏉冮檺锛�1锛氭湁鏉冮檺", example = "1", required = true)
+    private Integer role_id;
+
+    @ApiModelProperty(value = "骞撮緞", example = "23")
+    private Integer age;
+
+    @ApiModelProperty(value = "骞撮緞", example = "23", hidden = true)
+    private String password;
+
+    @ApiModelProperty(value = "鎵嬫満鍙�", example = "12345678981")
+    private String phone;
+
+    @ApiModelProperty(value = "閭", example = "12345678@qq.com")
+    private String email;
+}
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/vo/PagePersonnelVo.java b/user-server/src/main/java/com/yuanchu/limslaboratory/vo/PagePersonnelVo.java
new file mode 100644
index 0000000..b5564c0
--- /dev/null
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/vo/PagePersonnelVo.java
@@ -0,0 +1,39 @@
+package com.yuanchu.limslaboratory.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="UpdatePersonnelVo瀵硅薄", description="鐢ㄤ簬瀵硅鑹茬鐞嗙殑鏇存柊")
+public class PagePersonnelVo {
+
+    @ApiModelProperty(value = "涓婚敭ID", example = "1", required = true)
+    private String id;
+
+    @ApiModelProperty(value = "濮撳悕", example = "灏忛粦", required = true)
+    private String username;
+
+    @ApiModelProperty(value = "瑙掕壊鏉冮檺", example = "灏忛粦", required = true)
+    private String roleName;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
+    private Date createTime;
+
+    @ApiModelProperty(value = "骞撮緞", example = "23")
+    private Integer age;
+
+    @ApiModelProperty(value = "鎵嬫満鍙�", example = "12345678981")
+    private String phone;
+
+    @ApiModelProperty(value = "閭", example = "12345678@qq.com")
+    private String email;
+
+    @ApiModelProperty(value = "鍦ㄨ亴鐘舵�� 姝e父>=1,绂昏亴<=0", example = "0")
+    private Integer jobState;
+}
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/vo/UpdatePersonnelVo.java b/user-server/src/main/java/com/yuanchu/limslaboratory/vo/UpdatePersonnelVo.java
new file mode 100644
index 0000000..2c6c05a
--- /dev/null
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/vo/UpdatePersonnelVo.java
@@ -0,0 +1,41 @@
+package com.yuanchu.limslaboratory.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="UpdatePersonnelVo瀵硅薄", description="鐢ㄤ簬瀵硅鑹茬鐞嗙殑鏇存柊")
+public class UpdatePersonnelVo {
+
+    @ApiModelProperty(value = "涓婚敭ID", example = "1", required = true)
+    private String id;
+
+    @ApiModelProperty(value = "濮撳悕", example = "灏忛粦", required = true)
+    private String name;
+
+    @ApiModelProperty(value = "璐﹀彿", example = "45612345", required = true)
+    private String account;
+
+    @ApiModelProperty(value = "0锛氭棤鏉冮檺锛�1锛氭湁鏉冮檺", example = "1", required = true)
+    private Integer role_id;
+
+    @ApiModelProperty(value = "骞撮緞", example = "23")
+    private Integer age;
+
+    @ApiModelProperty(value = "鎵嬫満鍙�", example = "12345678981")
+    private String phone;
+
+    @ApiModelProperty(value = "閭", example = "12345678@qq.com")
+    private String email;
+
+    @ApiModelProperty(value = "鍦ㄨ亴鐘舵�� 姝e父>=1,绂昏亴<=0", example = "0")
+    private Integer jobState;
+
+    @ApiModelProperty(value = "璐﹀彿瀵嗙爜", example = "654321")
+    private String password;
+
+
+}
diff --git a/user-server/src/main/resources/mapper/UserMapper.xml b/user-server/src/main/resources/mapper/UserMapper.xml
index 9f0e8b6..30e710c 100644
--- a/user-server/src/main/resources/mapper/UserMapper.xml
+++ b/user-server/src/main/resources/mapper/UserMapper.xml
@@ -9,4 +9,24 @@
         and el.user_id = u.id
         and u.id = #{userId}
     </select>
+
+    <resultMap id="PagePersonnelVoMap" type="com.yuanchu.limslaboratory.vo.PagePersonnelVo">
+        <result property="id" column="id"/>
+        <result property="username" column="username"/>
+        <result property="roleName" column="roleName"/>
+        <result property="createTime" column="create_time"/>
+        <result property="age" column="age"/>
+        <result property="phone" column="phone"/>
+        <result property="email" column="email"/>
+        <result property="jobState" column="job_state"/>
+    </resultMap>
+    <select id="getNewPersonnelPage" resultMap="PagePersonnelVoMap">
+        SELECT u.`id`, u.`name` username, r.`name` roleName, u.`create_time`, IFNULL(u.`age`, '---') age,
+               IFNULL(u.`phone`, '---') phone, IFNULL(u.`email`, '---') email, u.`job_state`
+        FROM `user` u, role r
+        WHERE u.`role_id` = r.`id`
+        <if test="name != null">
+            AND u.name = #{name}
+        </if>
+    </select>
 </mapper>

--
Gitblit v1.9.3