From eb34edfc7cf46e5cb5e3969d04315e6129dcbbd2 Mon Sep 17 00:00:00 2001
From: XiaoRuby <3114200645@qq.com>
Date: 星期六, 26 八月 2023 11:43:33 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 user-server/src/main/java/com/yuanchu/limslaboratory/mapper/WaitInformationMapper.java                       |   27 +
 inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/InspectionVo.java                         |   17 
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/GetAllRoleAndMenuByConditionPageDto.java |   23 +
 user-server/src/main/java/com/yuanchu/limslaboratory/service/WaitInformationService.java                     |   51 ++
 inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/LinkDetection.java                           |    2 
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/RoleMangerController.java              |   21 
 standard-server/src/main/java/com/yuanchu/limslaboratory/controller/ProductController.java                   |   35 +
 laboratory-server/src/main/resources/mapper/MenuMapper.xml                                                   |    2 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/LinkBasicInformationServiceImpl.java |   37 +
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/RoleManagerService.java                   |   13 
 inspection-server/src/main/resources/mapper/InspectionProductMapper.xml                                      |    2 
 framework/src/main/java/com/yuanchu/limslaboratory/utils/JackSonUtil.java                                    |    2 
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/RoleInfoDto.java                         |   22 +
 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/LinkBasicInformationService.java          |    4 
 user-server/src/main/resources/mapper/WaitInformationMapper.xml                                              |   42 ++
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/RoleAndMenuDto.java                      |   33 +
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/Menu.java                                    |    6 
 standard-server/src/main/resources/mapper/ProductMapper.xml                                                  |   30 +
 inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/LinkDetectionController.java           |   56 ++
 user-server/src/main/java/com/yuanchu/limslaboratory/pojo/WaitInformation.java                               |   73 +++
 inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionController.java              |   28 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/InspectionService.java                    |   10 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionServiceImpl.java           |  101 +++-
 standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ProductServiceImpl.java                |   44 +
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/RoleManagerServiceImpl.java          |   98 ++++
 user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/WaitInformationServiceImpl.java            |   57 ++
 /dev/null                                                                                                    |   20 
 standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/ProductMapper.java                           |    8 
 inspection-server/src/main/resources/mapper/LinkBasicInformationMapper.xml                                   |   18 
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/RoleManageMapper.java                      |   33 +
 standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Product.java                                   |    2 
 chart-server/src/main/resources/mapper/WorkMapper.xml                                                        |   24 
 laboratory-server/src/main/resources/mapper/RoleManangeMapper.xml                                            |   76 +++
 inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/PlanController.java                    |    1 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/LinkBasicInformationController.java    |    1 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/LinkDetectionServiceImpl.java        |    2 
 standard-server/src/main/java/com/yuanchu/limslaboratory/service/ProductService.java                         |   27 +
 user-server/src/main/java/com/yuanchu/limslaboratory/controller/WaitInformationController.java               |   79 +++
 inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/LinkBasicInformation.java                    |    7 
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/RoleInfo.java                                |   49 ++
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/RoleMenu.java                                |   67 +++
 41 files changed, 1,103 insertions(+), 147 deletions(-)

diff --git a/chart-server/src/main/resources/mapper/WorkMapper.xml b/chart-server/src/main/resources/mapper/WorkMapper.xml
index 7da6829..385f61c 100644
--- a/chart-server/src/main/resources/mapper/WorkMapper.xml
+++ b/chart-server/src/main/resources/mapper/WorkMapper.xml
@@ -3,8 +3,8 @@
 <mapper namespace="com.yuanchu.limslaboratory.mapper.WorkMapper">
     <!--璐d换浜洪」鐩暟缁熻-->
     <select id="dutyMater" resultType="java.util.Map">
-        select n.name, 鏈畬鎴�, 宸插畬鎴�
-        from (select distinct user.name, count(inspection_product.id) '鏈畬鎴�'
+        select n.name, unfinish, finsh
+        from (select distinct user.name, count(inspection_product.id) unfinish
               from lims_laboratory.inspection_product
                        left join lims_laboratory.user on inspection_product.user_pro_id = user.id
               where state = 1
@@ -20,7 +20,7 @@
                               and type = #{type}
                               and start_time between #{startTime} and #{endTime}))
               group by user.name) n,
-             (select distinct user.name, count(inspection_product.id) '宸插畬鎴�'
+             (select distinct user.name, count(inspection_product.id) finsh
               from lims_laboratory.inspection_product
                        left join lims_laboratory.user on inspection_product.user_pro_id = user.id
               where state = 1
@@ -41,8 +41,8 @@
 
     <!--鎵ц浜洪」鐩暟缁熻-->
     <select id="executeMater" resultType="java.util.Map">
-        select n.name, 鏈畬鎴�, 宸插畬鎴�
-        from (select distinct user.name, count(inspection_product.id) '鏈畬鎴�'
+        select n.name, unfinsh, finsh
+        from (select distinct user.name, count(inspection_product.id) unfinsh
               from lims_laboratory.inspection_product
                        left join lims_laboratory.user on inspection_product.user_id = user.id
               where state = 1
@@ -58,7 +58,7 @@
                               and type = #{type}
                               and start_time between #{startTime} and #{endTime}))
               group by user.name) n,
-             (select distinct user.name, count(inspection_product.id) '宸插畬鎴�'
+             (select distinct user.name, count(inspection_product.id) finsh
               from lims_laboratory.inspection_product
                        left join lims_laboratory.user on inspection_product.user_id = user.id
               where state = 1
@@ -79,8 +79,8 @@
 
     <!--璐d换浜烘墽琛岀巼-->
     <select id="dutytimely" resultType="java.util.Map">
-        select n.name, 椤圭洰鎬绘暟, 鍙婃椂瀹屾垚鏁� / 椤圭洰鎬绘暟 * 100 '鍙婃椂鐜�'
-        from (select distinct user.name, count(inspection_product.id) '椤圭洰鎬绘暟'
+        select n.name, total, finshByTime / total * 100 timely
+        from (select distinct user.name, count(inspection_product.id) total
               from lims_laboratory.inspection_product
                        left join lims_laboratory.user on inspection_product.user_pro_id = user.id
               where state = 1
@@ -95,7 +95,7 @@
                               and type = #{type}
                               and start_time between #{startTime} and #{endTime}))
               group by user.name) n,
-             (select distinct user.name, count(inspection_product.id) '鍙婃椂瀹屾垚鏁�'
+             (select distinct user.name, count(inspection_product.id) finshByTime
               from lims_laboratory.inspection_product
                        left join lims_laboratory.user
                                  on inspection_product.user_pro_id = user.id
@@ -122,8 +122,8 @@
 
     <!--鎵ц浜哄強鏃剁巼-->
     <select id="executetimely" resultType="java.util.Map">
-        select n.name, 椤圭洰鎬绘暟, 鍙婃椂瀹屾垚鏁� / 椤圭洰鎬绘暟 * 100 '鍙婃椂鐜�'
-        from (select distinct user.name, count(inspection_product.id) '椤圭洰鎬绘暟'
+        select n.name, total, finshByTime / total * 100 timely
+        from (select distinct user.name, count(inspection_product.id) total
               from lims_laboratory.inspection_product
                        left join lims_laboratory.user on inspection_product.user_id = user.id
               where state = 1
@@ -138,7 +138,7 @@
                               and type = #{type}
                               and start_time between #{startTime} and #{endTime}))
               group by user.name) n,
-             (select distinct user.name, count(inspection_product.id) '鍙婃椂瀹屾垚鏁�'
+             (select distinct user.name, count(inspection_product.id) finshByTime
               from lims_laboratory.inspection_product
                        left join lims_laboratory.user
                                  on inspection_product.user_id = user.id
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 f272754..b9a569f 100644
--- a/framework/src/main/java/com/yuanchu/limslaboratory/utils/JackSonUtil.java
+++ b/framework/src/main/java/com/yuanchu/limslaboratory/utils/JackSonUtil.java
@@ -14,8 +14,6 @@
 
 /**
  * JSON瑙f瀽澶勭悊
- *
- * @author 寮犲
  */
 @Component
 public class JackSonUtil {
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionController.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionController.java
index 29ed397..f9b7ed3 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionController.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionController.java
@@ -20,6 +20,7 @@
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yuanchu.limslaboratory.service.InspectionService;
@@ -85,10 +86,21 @@
         return Result.fail("绫诲瀷閿欒!");
     }
 
+    @ApiOperation(value = "鏂板妫�楠屽崟-->閫夋嫨妫�楠岄」鐩増鏈�")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "name", value = "浜у搧鍚嶇О", dataTypeClass = String.class, required = true),
+            @ApiImplicitParam(name = "mcode", value = "浜у搧缂栧彿", dataTypeClass = String.class, required = true),
+            @ApiImplicitParam(name = "specifications", value = "瑙勬牸鍨嬪彿", dataTypeClass = String.class, required = true)
+    })
+    @GetMapping("/chooseVer")
+    public Result chooseVer(String name, String mcode, String specifications) {
+        return Result.success(inspectionService.chooseVer(name, mcode, specifications));
+    }
+
 
     @ApiOperation(value = "鏂板妫�楠屽崟")
     @PostMapping("/addInspect")
-    public Result addInspect(@RequestHeader("token") String token, @RequestBody InspectionVo inspectionVo) throws Exception {
+    public Result addInspect(@RequestHeader("token") String token, @Validated @RequestBody InspectionVo inspectionVo) throws Exception {
         Object object = RedisUtil.get(token);
         Map<String, Object> unmarshal = JackSonUtil.unmarshal(JackSonUtil.marshal(object), Map.class);
         return Result.success(inspectionService.addInspect((Integer) unmarshal.get("id"), inspectionVo));
@@ -110,13 +122,13 @@
     }
 
     @ApiOperation(value = "淇濆瓨妫�楠岄」鐩矗浠讳汉")
-        @ApiImplicitParams(value = {
-                @ApiImplicitParam(name = "id", value = "妫�楠屽崟椤圭洰id", dataTypeClass = Integer.class, required = true),
-                @ApiImplicitParam(name = "userProId", value = "璐d换浜篿d", dataTypeClass = Integer.class, required = true)
-        })
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "id", value = "妫�楠屽崟椤圭洰id", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "userProId", value = "璐d换浜篿d", dataTypeClass = Integer.class, required = true)
+    })
     @GetMapping("/chooseUseProId")
-    public Result chooseUseProId(Integer id,Integer userProId) {
-        return Result.success(inspectionService.chooseUseProId(id,userProId));
+    public Result chooseUseProId(Integer id, Integer userProId) {
+        return Result.success(inspectionService.chooseUseProId(id, userProId));
     }
 
     @ApiOperation(value = "浣滃簾妫�楠屽崟")
@@ -124,7 +136,7 @@
             @ApiImplicitParam(name = "id", value = "妫�楠屽崟id", dataTypeClass = Integer.class, required = true)
     })
     @PostMapping("/delInspect")
-    public Result delInspect(Integer id)  {
+    public Result delInspect(Integer id) {
         return Result.success(inspectionService.delInspect(id));
     }
 
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/LinkBasicInformationController.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/LinkBasicInformationController.java
index 22de441..01f505a 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/LinkBasicInformationController.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/LinkBasicInformationController.java
@@ -65,4 +65,5 @@
         map.put("row", linkBasicPage.getRecords());
         return Result.success(map);
     }
+
 }
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/LinkDetectionController.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/LinkDetectionController.java
index 82c0065..9ac5e99 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/LinkDetectionController.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/LinkDetectionController.java
@@ -4,17 +4,22 @@
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.yuanchu.limslaboratory.pojo.LinkBasicInformation;
+import com.yuanchu.limslaboratory.pojo.LinkDetection;
 import com.yuanchu.limslaboratory.pojo.Material;
 import com.yuanchu.limslaboratory.service.LinkBasicInformationService;
 import com.yuanchu.limslaboratory.service.MaterialService;
+import com.yuanchu.limslaboratory.service.ProductService;
 import com.yuanchu.limslaboratory.service.StandardService;
 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 javax.annotation.Resource;
 import java.util.List;
 import java.util.Map;
 
@@ -40,11 +45,14 @@
     @Autowired
     private StandardService standardService;
 
+    @Resource
+    ProductService productService;
+
     @ApiOperation("閾炬帴-->鑾峰彇鏍峰搧鍚嶇О")
     @GetMapping("/material")
     public Result<?> getMaterialIdAndName(@RequestHeader("link") String link) {
-        String redisLink = RedisUtil.get("link").toString();
-        if (redisLink.equals(link)){
+        String redisLink = RedisUtil.get("viewId").toString();
+        if (linkBasicInformationService.isIfViewUUID(redisLink)){
             LambdaQueryWrapper<Material> wrapper = new LambdaQueryWrapper<>();
             wrapper.select(Material::getId, Material::getName, Material::getCode);
             List<Map<String, Object>> maps = materialService.listMaps(wrapper);
@@ -56,19 +64,35 @@
     @ApiOperation("閾炬帴-->鑾峰彇瑙勬牸鍨嬪彿")
     @GetMapping("/specification")
     public Result<?> getSpecificationIdAndName(@RequestHeader("link") String link, String materialId) {
-        String redisLink = RedisUtil.get("link").toString();
-        if (redisLink.equals(link)){
+        String redisLink = RedisUtil.get("viewId").toString();
+        if (linkBasicInformationService.isIfViewUUID(redisLink)){
             List<Map<String, Object>> specificationIdAndName = standardService.getSpecificationIdAndName(materialId);
             return Result.success(specificationIdAndName);
         }
         return Result.fail("鎶辨瓑閾炬帴閿欒鎴栧凡杩囨湡锛�");
     }
 
-    @ApiOperation("閾炬帴-->娣诲姞妫�楠岀敵璇峰崟")
+    @ApiOperation("閾炬帴-->閫夋嫨璇曢獙椤圭洰")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "modelId", value = "鍨嬪彿id", dataTypeClass = Integer.class, required = true)
+    })
+    @GetMapping("/chooseProject")
+    public Result<?> chooseProject(@RequestHeader("link") String link,  Integer modelId) {
+        String redisLink = RedisUtil.get("viewId").toString();
+        if (linkBasicInformationService.isIfViewUUID(redisLink)){
+            //鏌ヨ鏍囧噯搴撲腑璇ュ瀷鍙蜂笅鐨勬墍鏈夎瘯楠岄」鐩�(鐖剁被)
+            return Result.success(productService.chooseProject(modelId));
+        }
+        return Result.fail("鎶辨瓑閾炬帴閿欒鎴栧凡杩囨湡锛�");
+
+    }
+
+    @ApiOperation("閾炬帴-->娣诲姞濮旀墭鎶ユ鐢宠鍗�")
     @PostMapping("/addInspection")
     public Result<?> addLinkBasicInformation(@RequestHeader("link") String link, @RequestBody LinkBasicInformation linkBasicInformation) {
-        String redisLink = RedisUtil.get("link").toString();
-        if (redisLink.equals(link)){
+        String redisLink = RedisUtil.get("viewId").toString();
+        if (linkBasicInformationService.isIfViewUUID(redisLink)){
+            linkBasicInformation.setUid(redisLink);
             String code = linkBasicInformationService.addLinkBasicInformation(linkBasicInformation);
             if (!ObjectUtils.isEmpty(code)){
                 return Result.success("娣诲姞鎴愬姛锛�", code);
@@ -79,4 +103,22 @@
         return Result.fail("鎶辨瓑閾炬帴閿欒鎴栧凡杩囨湡锛�");
 
     }
+
+    @ApiOperation(value = "鐢熸垚浜岀淮鐮佹墍闇�鐨勫敮涓�鐮�")
+    @GetMapping("/getViewUUID")
+    public Result<?> getViewUUID(int day){
+        return Result.success("鐢熸垚鎴愬姛",linkBasicInformationService.getViewUUID(day));
+    }
+
+    @ApiOperation(value = "鏌ヨ浜岀淮鐮佹墍闇�鐨勫敮涓�鐮�")
+    @GetMapping("/selectViewUUID")
+    public Result<?> selectViewUUID(){
+        return Result.success("鏌ヨ鎴愬姛",linkBasicInformationService.selectViewUUID());
+    }
+
+    @ApiOperation(value = "妫�楠屽敮涓�鐮佹槸鍚︽湁鏁�")
+    @GetMapping("/isIfViewUUID")
+    public Result<?> isIfViewUUID(String viewId){
+        return Result.success("鏌ヨ鎴愬姛",linkBasicInformationService.isIfViewUUID(viewId));
+    }
 }
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/PlanController.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/PlanController.java
index 4f53cb3..3edc996 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/PlanController.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/PlanController.java
@@ -40,6 +40,7 @@
     })
     @GetMapping("/selectAllPlan")
     public Result selectAllPlan(String code, String beginTime, String endTime, Integer status) {
+        System.out.println(planService.selectAllPlan(code, beginTime, endTime, status).toString());
         return Result.success(planService.selectAllPlan(code, beginTime, endTime, status));
     }
 
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/LinkBasicInformation.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/LinkBasicInformation.java
index 60e4a5a..5c9f196 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/LinkBasicInformation.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/LinkBasicInformation.java
@@ -1,13 +1,9 @@
 package com.yuanchu.limslaboratory.pojo;
 
 import com.baomidou.mybatisplus.annotation.*;
-
-import java.time.LocalDate;
-import java.time.LocalDateTime;
 import java.io.Serializable;
 import java.util.Date;
 import java.util.List;
-
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -86,4 +82,7 @@
     @TableField(exist = false)
     @ApiModelProperty(value = "妫�楠屼俊鎭�")
     private List<LinkDetection> linkDetectionList;
+
+    @ApiModelProperty(value = "鐢熸垚id锛氫綔鐢ㄤ簬鏈夋晥鏈熷唴鏌ヨ鍐呭鎵�鐢�")
+    private String uid;
 }
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/LinkDetection.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/LinkDetection.java
index e62f2a8..5345c81 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/LinkDetection.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/LinkDetection.java
@@ -74,7 +74,7 @@
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
-    @ApiModelProperty(value = "妫�楠屾棩鏈�", hidden = true)
+    @ApiModelProperty(value = "妫�楠屾棩鏈�", required = true,example = "2023-08-22")
     private Date dateSurvey;
 
     @ApiModelProperty(value = "妫�楠岀姸鎬�", hidden = true)
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/InspectionVo.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/InspectionVo.java
index f804333..de59347 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/InspectionVo.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/InspectionVo.java
@@ -5,6 +5,9 @@
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.util.Date;
 //鏂板妫�楠屽崟
@@ -15,6 +18,7 @@
      *妫�楠岀被鍨� 0锛氬師鏉愭枡锛�1锛氫骇鍝侊紱2锛氬崐鎴愬搧锛�
      **/
     @JsonSerialize
+    @NotNull(message = "妫�楠岀被鍨嬩笉鑳戒负绌�")
     private Integer type;
 
     /**
@@ -22,30 +26,35 @@
      **/
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @NotBlank(message = "鏉ユ枡鏃ユ湡涓嶈兘涓虹┖")
     private Date formTime;
 
     /**
      * 渚涘簲鍟�
      **/
     @JsonSerialize
+    @NotBlank(message = "渚涘簲鍟嗕笉鑳戒负绌�")
     private String supplier;
 
     /**
      * 鐗╂枡缂栫爜
      **/
     @JsonSerialize
+    @NotBlank(message = "鏍峰搧缂栫爜涓嶈兘涓虹┖")
     private String mcode;
 
     /**
      * 鐗╂枡鍚嶇О
      **/
     @JsonSerialize
+    @NotBlank(message = "鏍峰搧鍚嶇О涓嶈兘涓虹┖")
     private String name;
 
     /**
      * 瑙勬牸鍚嶇О-鍨嬪彿鍚嶇О
      **/
     @JsonSerialize
+    @NotBlank(message = "瑙勬牸鍨嬪彿涓嶈兘涓虹┖")
     private String specifications;
 
     /**
@@ -58,6 +67,7 @@
      * 鎶ユ鏁伴噺-鐗╂枡鏁伴噺
      **/
     @JsonSerialize
+    @NotNull(message = "鎶ユ鏁伴噺涓嶈兘涓虹┖")
     private Integer num;
 
     /**
@@ -65,6 +75,7 @@
      **/
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @NotBlank(message = "妫�楠屽紑濮嬫椂闂翠笉鑳戒负绌�")
     private Date startTime;
 
     /**
@@ -72,5 +83,11 @@
      **/
     @DateTimeFormat(pattern = "yyyy-MM-dd")
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @NotBlank(message = "妫�楠岀粨鏉熸椂闂翠笉鑳戒负绌�")
     private Date endTime;
+
+    //璇曢獙椤圭洰
+    @NotBlank(message = "璇曢獙椤圭洰涓嶈兘涓虹┖")
+    @JsonSerialize
+    private String experiment;
 }
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/InspectionService.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/InspectionService.java
index 4c2fec0..e473e4a 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/InspectionService.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/InspectionService.java
@@ -58,5 +58,15 @@
      * @return
      */
     String chooseUseProId(Integer id, Integer userProId);
+
+    /**
+     * 鏂板妫�楠屽崟-->閫夋嫨妫�楠岄」鐩増鏈�
+     * @param name
+     * @param mcode
+     * @param specifications
+     * @return
+     */
+    List<Map<String,Object>> chooseVer(String name, String mcode, String specifications);
+
 }
 
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/LinkBasicInformationService.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/LinkBasicInformationService.java
index c347bca..3a4c2a5 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/LinkBasicInformationService.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/LinkBasicInformationService.java
@@ -31,5 +31,9 @@
      */
     List<Map<String, Object>> selectLinkAll();
 
+    String getViewUUID(int day);
 
+    Map<String, String> selectViewUUID();
+
+    boolean isIfViewUUID(String uuid);
 }
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionServiceImpl.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionServiceImpl.java
index 9187912..571f2dc 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionServiceImpl.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionServiceImpl.java
@@ -3,6 +3,7 @@
 import cn.hutool.core.lang.Snowflake;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -103,39 +104,46 @@
                 .build();
         inspectionMaterialMapper.insert(inspectionMaterial);
         /*鏂板妫�楠岄」鐩〃*/
-        //鑾峰彇鐗╂枡id
-        Material material = materialMapper.selectOne(Wrappers.<Material>query()
-                .eq("name", inspectionVo.getName())
-                .eq("code", inspectionVo.getMcode()));
-        //鑾峰彇瑙勬牸鍚嶇О鍜屽瀷鍙峰悕绉�
-        String specification = inspectionVo.getSpecifications();
-        String[] split = specification.split("-");
-        String stName = split[0];
-        String spName = split[1];
-        //鑾峰彇瑙勬牸id
-        Standard standard = standardService.getOne(Wrappers.<Standard>query()
-                .eq("name", stName)
-                .eq("material_id", material.getId()));
-        //鑾峰彇鍨嬪彿id
-        Specifications specifications = specificationsService.getOne(Wrappers.<Specifications>query()
-                .eq("name", spName)
-                .eq("standard_id", standard.getId()));
-        //鏍规嵁鍨嬪彿id鏌ヨ椤圭洰淇℃伅
-        List<Product> productList = productMapper.selectList(Wrappers.<Product>query().eq("specifications_id", specifications.getId()));
-        ArrayList<InspectionProduct> list = new ArrayList<>();
-        for (Product product : productList) {
-            InspectionProduct rawInsProduct = InspectionProduct.builder()
-                    .name(product.getName())
-                    .unit(product.getUnit())
-                    .required(product.getRequired())
-                    .internal(product.getInternal())
-                    .inspectionMaterialId(material.getId())
-                    .build();
-            list.add(rawInsProduct);
+        //鏍规嵁鏍峰搧鍚嶇О缂栧彿浠ュ強鍨嬪彿瑙勬牸鑾峰彇鍨嬪彿id
+        Integer specificationId = getSpecificationId(inspectionVo.getName(), inspectionVo.getMcode(), inspectionVo.getSpecifications());
+        //濡傛灉璇曢獙椤圭洰瀛楁涓嶄负绌�
+        if (ObjectUtils.isNotEmpty(inspectionVo.getExperiment())) {
+            //鑾峰彇璇曢獙椤圭洰淇℃伅(缁撴瀯,瀵肩嚎澶栧緞)
+            List<String> experiments = Arrays.stream(inspectionVo.getExperiment().split(",")).collect(Collectors.toList());
+            //鏍规嵁鍨嬪彿id鍜岄」鐩俊鎭煡璇㈤」鐩俊鎭�
+            List<Product> products = new ArrayList<>();
+            for (String experiment : experiments) {
+                List<Product> productList1 = productMapper.selectList(Wrappers.<Product>query()
+                        .eq("specifications_id", specificationId)
+                        .eq("father", experiment));
+                if (ObjectUtils.isEmpty(productList1)) {
+                    Product product = productMapper.selectOne(Wrappers.<Product>query()
+                            .eq("specifications_id", specificationId)
+                            .isNull("father")
+                            .eq("name", experiment));
+                    products.add(product);
+                } else products.addAll(productList1);
+            }
+
+            //灏嗘煡璇㈢殑椤圭洰淇℃伅鏋勫缓鎴愭楠岄」鐩�
+            ArrayList<InspectionProduct> list = new ArrayList<>();
+            for (Product product : products) {
+                InspectionProduct rawInsProduct = InspectionProduct.builder()
+                        .name(product.getName())
+                        .unit(product.getUnit())
+                        .required(product.getRequired())
+                        .internal(product.getInternal())
+                        .inspectionMaterialId(inspectionMaterial.getId())
+                        .build();
+                list.add(rawInsProduct);
+            }
+
+            //妫�楠岄」鐩壒閲忔坊鍔�
+            inspectionProductService.saveBatch(list);
+            return inspection.getId();
         }
-        //妫�楠岄」鐩壒閲忔坊鍔�
-        inspectionProductService.saveBatch(list);
-        return inspection.getId();
+        //todo:鏈畬
+        return null;
     }
 
     //鏍规嵁妫�楠屽崟id鏌ヨ鍘熸潗鏂欐楠屽崟璇︽儏
@@ -213,5 +221,34 @@
     }
 
 
+    //鏂板妫�楠屽崟-->閫夋嫨妫�楠岄」鐩増鏈�
+    @Override
+    public List<Map<String, Object>> chooseVer(String name, String mcode, String specifications) {
+        Integer specificationId = getSpecificationId(name, mcode, specifications);
+        return null;
+    }
+
+
+    /*鏍规嵁鏍峰搧鍚嶇О,鏍峰搧缂栧彿,鍨嬪彿瑙勬牸鑾峰彇鍨嬪彿id*/
+    private Integer getSpecificationId(String name, String mcode, String specification) {
+        //鑾峰彇鐗╂枡id
+        Material material = materialMapper.selectOne(Wrappers.<Material>query()
+                .eq("name", name)
+                .eq("code", mcode));
+        //鑾峰彇瑙勬牸鍚嶇О鍜屽瀷鍙峰悕绉�
+        String[] split = specification.split("-");
+        String stName = split[0];
+        String spName = split[1];
+        //鑾峰彇瑙勬牸id
+        Standard standard = standardService.getOne(Wrappers.<Standard>query()
+                .eq("name", stName)
+                .eq("material_id", material.getId()));
+        //鑾峰彇鍨嬪彿id
+        Specifications specifications = specificationsService.getOne(Wrappers.<Specifications>query()
+                .eq("name", spName)
+                .eq("standard_id", standard.getId()));
+        return specifications.getId();
+    }
+
 }
 
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/LinkBasicInformationServiceImpl.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/LinkBasicInformationServiceImpl.java
index b14dab9..d7dd0eb 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/LinkBasicInformationServiceImpl.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/LinkBasicInformationServiceImpl.java
@@ -4,21 +4,20 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yuanchu.limslaboratory.pojo.LinkBasicInformation;
 import com.yuanchu.limslaboratory.mapper.LinkBasicInformationMapper;
-import com.yuanchu.limslaboratory.pojo.vo.InspectionVo;
 import com.yuanchu.limslaboratory.service.LinkBasicInformationService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yuanchu.limslaboratory.service.LinkDetectionService;
 import com.yuanchu.limslaboratory.utils.MyUtil;
+import com.yuanchu.limslaboratory.utils.RedisUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * <p>
- *  鏈嶅姟瀹炵幇绫�
+ * 鏈嶅姟瀹炵幇绫�
  * </p>
  *
  * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
@@ -35,10 +34,13 @@
 
     @Override
     public String addLinkBasicInformation(LinkBasicInformation linkBasicInformation) {
-        String code = MyUtil.getTimeSixNumberCode("SL","SL");
+        //濮旀墭缂栧彿
+        String code = MyUtil.getTimeSixNumberCode("SL", "SL");
         linkBasicInformation.setEntrustCoding(code);
+        //鏂板鍩烘湰淇℃伅琛�
         int insert = linkBasicInformationMapper.insert(linkBasicInformation);
         if (insert == 1) {
+            //鏂板濮旀墭鏍峰搧琛�
             linkDetectionService.insertListData(linkBasicInformation.getId(), linkBasicInformation.getLinkDetectionList());
             return code;
         }
@@ -56,5 +58,30 @@
         return linkBasicInformationMapper.selectLinkAll();
     }
 
+    @Override
+    public String getViewUUID(int day) {
+        String id = String.valueOf(UUID.randomUUID());
+        RedisUtil.set("viewId", id, day * 24 * 60);
+        return id;
+    }
+
+    @Override
+    public Map<String, String> selectViewUUID() {
+        Map<String, String> map = new HashMap<>();
+        try {
+            map.put("id", RedisUtil.get("viewId").toString());
+            map.put("time", String.valueOf(RedisUtil.getExpire("viewId")));
+        } catch (Exception e) {
+            map.put("id", null);
+            map.put("time", null);
+        }
+        return map;
+    }
+
+    @Override
+    public boolean isIfViewUUID(String uuid) {
+        return uuid.equals(RedisUtil.get("viewId"));
+    }
+
 
 }
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/LinkDetectionServiceImpl.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/LinkDetectionServiceImpl.java
index 1bcd989..e347c34 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/LinkDetectionServiceImpl.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/LinkDetectionServiceImpl.java
@@ -27,7 +27,7 @@
     @Override
     public void insertListData(Integer id, List<LinkDetection> linkDetectionList) {
         for (LinkDetection linkDetection:linkDetectionList){
-            linkDetection.setInspectionStatus(2);
+            linkDetection.setInspectionStatus(1);
             linkDetection.setLinkBasicId(id);
         }
         linkDetectionMapper.insertBatchSomeColumn(linkDetectionList);
diff --git a/inspection-server/src/main/resources/mapper/InspectionProductMapper.xml b/inspection-server/src/main/resources/mapper/InspectionProductMapper.xml
index f1b39da..1af01e7 100644
--- a/inspection-server/src/main/resources/mapper/InspectionProductMapper.xml
+++ b/inspection-server/src/main/resources/mapper/InspectionProductMapper.xml
@@ -1,8 +1,6 @@
 <?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.InspectionProductMapper">
-
-
     <!--鏍规嵁妫�楠屽崟id鏌ヨ妫�楠岄」鐩殑妫�楠岀粨鏋�-->
     <select id="getresult" resultType="java.lang.Integer">
         select test_state
diff --git a/inspection-server/src/main/resources/mapper/LinkBasicInformationMapper.xml b/inspection-server/src/main/resources/mapper/LinkBasicInformationMapper.xml
index 2acf86f..3ce5aec 100644
--- a/inspection-server/src/main/resources/mapper/LinkBasicInformationMapper.xml
+++ b/inspection-server/src/main/resources/mapper/LinkBasicInformationMapper.xml
@@ -25,19 +25,19 @@
     </select>
 
     <select id="selectLinkAll" resultType="java.util.Map">
-        SELECT DATE_FORMAT(l.`inspection_time`,'%Y-%m-%d')  formTime,
-               l.`entrusted` supplier,
-               d.`sample_number` mcode,
-               d.`sample_name` name,
-               d.`specifications_models` specifications,
+        SELECT DATE_FORMAT(l.`inspection_time`, '%Y-%m-%d') formTime,
+               l.`entrusted`                                supplier,
+               d.`sample_number`                            mcode,
+               d.`sample_name`                              name,
+               d.`specifications_models`                    specifications,
                d.`unit`,
-               d.`samples_number` num,
-               DATE_FORMAT(date_survey,'%Y-%m-%d')  startTime,
-               DATE_FORMAT(completion_deadline,'%Y-%m-%d') endTime
+               d.`samples_number`                           num,
+               experiment,
+               DATE_FORMAT(date_survey, '%Y-%m-%d')         startTime,
+               DATE_FORMAT(completion_deadline, '%Y-%m-%d') endTime
         FROM lims_laboratory.link_basic_information l,
              lims_laboratory.link_detection d
         WHERE l.`id` = d.`link_basic_id`
           AND l.`state` = 1
     </select>
-
 </mapper>
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/RoleMangerController.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/RoleMangerController.java
index d60ec4e..69ea1fd 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/RoleMangerController.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/RoleMangerController.java
@@ -1,12 +1,12 @@
 package com.yuanchu.limslaboratory.controller;
 
+import com.yuanchu.limslaboratory.pojo.dto.GetAllRoleAndMenuByConditionPageDto;
+import com.yuanchu.limslaboratory.pojo.dto.RoleInfoDto;
 import com.yuanchu.limslaboratory.service.RoleManagerService;
 import com.yuanchu.limslaboratory.vo.Result;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 
@@ -28,6 +28,21 @@
       return Result.success(roleManagerService.getMenusTree());
     };
 
+    @ApiOperation("鏂板瑙掕壊")
+    @PostMapping("/addRoleInfo")
+    public Result<?>addRoleInfo(@RequestBody RoleInfoDto dto){
+        return Result.success(roleManagerService.addRoleInfo(dto));
+    }
 
+    @ApiOperation("鏌ヨ瑙掕壊鍚嶉噸澶�")
+    @GetMapping("/assertRepeat")
+    public Result<?> assertRepeat(String roleName){
+        return Result.success(roleManagerService.assertRepeat(roleName));
+    }
 
+    @ApiOperation("鑾峰彇瑙掕壊淇℃伅")
+    @GetMapping("/getAllRoleAndMenuInfo")
+    public Result<?> getAllRoleAndMenuInfo(GetAllRoleAndMenuByConditionPageDto dto){
+        return Result.success(roleManagerService.getAllRoleAndMenuInfo(dto));
+    }
 }
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/RoleManageMapper.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/RoleManageMapper.java
new file mode 100644
index 0000000..e85957b
--- /dev/null
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/RoleManageMapper.java
@@ -0,0 +1,33 @@
+package com.yuanchu.limslaboratory.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yuanchu.limslaboratory.pojo.LimitPage;
+import com.yuanchu.limslaboratory.pojo.Role;
+import com.yuanchu.limslaboratory.pojo.RoleInfo;
+import com.yuanchu.limslaboratory.pojo.RoleMenu;
+import com.yuanchu.limslaboratory.pojo.dto.GetAllRoleAndMenuByConditionPageDto;
+import com.yuanchu.limslaboratory.pojo.dto.GetPlanMeasureInstrumentDto;
+import com.yuanchu.limslaboratory.pojo.dto.RoleAndMenuDto;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/24
+ */
+@Repository
+public interface RoleManageMapper extends BaseMapper<RoleInfo> {
+
+    int insertBatchRoleMenu(@Param("roleMenuAddList") List<RoleMenu> roleMenuList);
+
+    int insertRole(RoleInfo roleInfo);
+
+    List<RoleInfo>getAssertName(@Param("roleName") String roleName);
+
+    List<RoleAndMenuDto>selectAllRoleAndMenu(@Param("dto") GetAllRoleAndMenuByConditionPageDto dto);
+
+    List<Role>getRoleByName(@Param("roleName") String roleName);
+}
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/Menu.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/Menu.java
index b9cd220..12c7ddb 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/Menu.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/Menu.java
@@ -16,18 +16,18 @@
     /**
      * id
      */
-    private Integer value;
+    private Long id;
 
     /**
      * 鑿滃崟鍚�
      */
-    private String label;
+    private String name;
 
 
     /**
      * 鐖剁骇id
      */
-    private Integer parentId;
+    private Long parentId;
 
     /**
      * 瀛愮骇鑿滃崟淇℃伅
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/Role.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/Role.java
deleted file mode 100644
index 036a706..0000000
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/Role.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.yuanchu.limslaboratory.pojo;
-
-import lombok.Data;
-
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
-/**
- * @Author 寮犲
- * @Date 2023/8/23
- */
-@Data
-public class Role implements Serializable {
-
-
-    private Integer id;
-
-    private Integer name;
-
-    private LocalDateTime createTime;
-
-    private LocalDateTime updateTime;
-
-    private Integer state;
-
-}
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/RoleInfo.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/RoleInfo.java
new file mode 100644
index 0000000..854b391
--- /dev/null
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/RoleInfo.java
@@ -0,0 +1,49 @@
+package com.yuanchu.limslaboratory.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/23
+ */
+@Data
+@TableName("role")
+@Getter
+@Setter
+public class RoleInfo implements Serializable {
+
+
+    @TableId(type = IdType.ASSIGN_ID)
+    private Long id;
+
+    private String name;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss", iso = DateTimeFormat.ISO.DATE_TIME)
+    private LocalDateTime createTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss", iso = DateTimeFormat.ISO.DATE_TIME)
+    private LocalDateTime updateTime;
+
+    private Integer state;
+
+    public RoleInfo(String name, LocalDateTime createTime, LocalDateTime updateTime) {
+        this.name = name;
+        this.createTime = createTime;
+        this.updateTime = updateTime;
+    }
+
+    public RoleInfo() {
+    }
+}
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/RoleMenu.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/RoleMenu.java
new file mode 100644
index 0000000..2bb7b23
--- /dev/null
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/RoleMenu.java
@@ -0,0 +1,67 @@
+package com.yuanchu.limslaboratory.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/24
+ */
+@Data
+@TableName("role_menu")
+public class RoleMenu implements Serializable {
+
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    private Long roleId;
+
+    private String menuName;
+
+    private Long menuId;
+
+    private Boolean selected;
+
+    private Boolean added;
+
+    private Long parentId;
+
+    private Boolean updated;
+
+    private Boolean deleted;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss", iso = DateTimeFormat.ISO.DATE_TIME)
+    private LocalDateTime createTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss", iso = DateTimeFormat.ISO.DATE_TIME)
+    private LocalDateTime updateTime;
+
+    private List<RoleMenu> children;
+
+    public RoleMenu() {
+    }
+
+    public RoleMenu(Long id, Long roleId, Long menuId, Boolean selected, Boolean added, Boolean updated, Boolean deleted, LocalDateTime createTime) {
+        this.id = id;
+        this.roleId = roleId;
+        this.menuId = menuId;
+        this.selected = selected;
+        this.added = added;
+        this.updated = updated;
+        this.deleted = deleted;
+        this.createTime = createTime;
+    }
+
+
+
+}
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/GetAllRoleAndMenuByConditionPageDto.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/GetAllRoleAndMenuByConditionPageDto.java
new file mode 100644
index 0000000..51285e3
--- /dev/null
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/GetAllRoleAndMenuByConditionPageDto.java
@@ -0,0 +1,23 @@
+package com.yuanchu.limslaboratory.pojo.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/24
+ */
+@Data
+@ApiModel(value = "GetAllRoleAndMenuByConditionPageDto瀵硅薄", description = "")
+public class GetAllRoleAndMenuByConditionPageDto implements Serializable {
+    @ApiModelProperty(value = "褰撳墠椤�", example = "1", required = true)
+    private Long currentPage;
+    @ApiModelProperty(value = "姣忛〉澶氬皯鏉�", required = true)
+    private Long pageSize;
+    @ApiModelProperty(value = "瑙掕壊鍚�")
+    private String name;
+
+}
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/RoleAndMenuDto.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/RoleAndMenuDto.java
new file mode 100644
index 0000000..aa3d4d0
--- /dev/null
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/RoleAndMenuDto.java
@@ -0,0 +1,33 @@
+package com.yuanchu.limslaboratory.pojo.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yuanchu.limslaboratory.pojo.RoleMenu;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/24
+ */
+@Data
+public class RoleAndMenuDto implements Serializable {
+
+    private Long  roleId;
+
+    private String roleName;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss", iso = DateTimeFormat.ISO.DATE_TIME)
+    private LocalDateTime createTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss", iso = DateTimeFormat.ISO.DATE_TIME)
+    private LocalDateTime updateTime;
+
+    private List<RoleMenu> roleMenuList;
+
+}
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/RoleInfoDto.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/RoleInfoDto.java
new file mode 100644
index 0000000..981712a
--- /dev/null
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/RoleInfoDto.java
@@ -0,0 +1,22 @@
+package com.yuanchu.limslaboratory.pojo.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author 寮犲
+ * @Date 2023/8/24
+ */
+@Data
+public class RoleInfoDto implements Serializable {
+
+    @ApiModelProperty(value = "瑙掕壊鍚�", required = true)
+    private String roleName;
+
+    @ApiModelProperty(value = "閫変腑鑿滃崟淇℃伅")
+    private List<Map<String, Object>>menuData;
+}
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/RoleManagerService.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/RoleManagerService.java
index 6cb04de..9fde5f7 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/RoleManagerService.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/RoleManagerService.java
@@ -1,6 +1,11 @@
 package com.yuanchu.limslaboratory.service;
 
-import com.yuanchu.limslaboratory.vo.Result;
+import com.yuanchu.limslaboratory.pojo.dto.GetAllRoleAndMenuByConditionPageDto;
+import com.yuanchu.limslaboratory.pojo.dto.RoleAndMenuDto;
+import com.yuanchu.limslaboratory.pojo.dto.RoleInfoDto;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * @Author 寮犲
@@ -8,4 +13,10 @@
  */
 public interface RoleManagerService {
     Object getMenusTree();
+
+    boolean addRoleInfo(RoleInfoDto dto);
+
+    boolean assertRepeat(String roleName);
+
+    Map<String, Object> getAllRoleAndMenuInfo(GetAllRoleAndMenuByConditionPageDto dto);
 }
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/RoleManagerServiceImpl.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/RoleManagerServiceImpl.java
index 38f0db1..eedf808 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/RoleManagerServiceImpl.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/RoleManagerServiceImpl.java
@@ -1,12 +1,25 @@
 package com.yuanchu.limslaboratory.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.IdUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yuanchu.limslaboratory.mapper.MenuMapper;
+import com.yuanchu.limslaboratory.mapper.RoleManageMapper;
+import com.yuanchu.limslaboratory.pojo.LimitPage;
 import com.yuanchu.limslaboratory.pojo.Menu;
+import com.yuanchu.limslaboratory.pojo.RoleInfo;
+import com.yuanchu.limslaboratory.pojo.RoleMenu;
+import com.yuanchu.limslaboratory.pojo.dto.GetAllRoleAndMenuByConditionPageDto;
+import com.yuanchu.limslaboratory.pojo.dto.RoleAndMenuDto;
+import com.yuanchu.limslaboratory.pojo.dto.RoleInfoDto;
 import com.yuanchu.limslaboratory.service.RoleManagerService;
+import com.yuanchu.limslaboratory.utils.JsonUtil;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -20,6 +33,9 @@
     @Resource
     private MenuMapper menuMapper;
 
+    @Resource
+    private RoleManageMapper roleManageMapper;
+
     @Override
     public Object getMenusTree() {
         List<Menu> menus = menuMapper.getMenuList();
@@ -29,10 +45,69 @@
                 .collect(Collectors.toList());
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean addRoleInfo(RoleInfoDto dto) {
+        //鏂板瑙掕壊
+        //System.out.println(dto);
+        LocalDateTime createTime = DateUtil.toLocalDateTime(DateUtil.date());
+        RoleInfo role=new RoleInfo();
+        long nextId = IdUtil.getSnowflake().nextId();
+        role.setId(nextId);
+        role.setName(dto.getRoleName());
+        role.setCreateTime(createTime);
+        int insert = roleManageMapper.insertRole(role);
+        List<Map<String, Object>>addBranch=new ArrayList<>();
+        reverseTree(dto.getMenuData(),addBranch);
+        List<RoleMenu> roleMenuList =new ArrayList<>();
+        addBranch.forEach(item->{
+            roleMenuList.add(new RoleMenu(null,nextId,
+                    Long.valueOf(String.valueOf(item.get("id")))
+                    ,Boolean.valueOf(String.valueOf(item.get("selected")))
+                    ,Boolean.valueOf(String.valueOf(item.get("added")))
+                    ,Boolean.valueOf(String.valueOf(item.get("deleted")))
+                    ,Boolean.valueOf(String.valueOf(item.get("updated")))
+                    ,createTime
+            ));
+        });
+        //roleMenuAddList.forEach(System.out::println);
+        int i = roleManageMapper.insertBatchRoleMenu(roleMenuList);
+        return insert>0&&i>0;
+    }
+
+    @Override
+    public boolean assertRepeat(String roleName) {
+        List<RoleInfo> assertName = roleManageMapper.getAssertName(roleName);
+        return assertName.size()<1;
+    }
+
+    @Override
+    public Map<String, Object> getAllRoleAndMenuInfo(GetAllRoleAndMenuByConditionPageDto dto) {
+        dto.setCurrentPage((dto.getCurrentPage()-1)*dto.getCurrentPage());
+        List<RoleAndMenuDto> roleAndMenuDtos = roleManageMapper.selectAllRoleAndMenu(dto);
+        roleAndMenuDtos.forEach(r->{
+            List<RoleMenu>roleMenuList=r.getRoleMenuList();
+            System.out.println(roleMenuList);
+            List<RoleMenu> collect = roleMenuList.stream()
+                    .filter(t -> t.getParentId() == 0)
+                    .peek((menu) -> menu.setChildren(this.getRoleMenuChildren(menu, roleMenuList)))
+                    .collect(Collectors.toList());
+            r.setRoleMenuList(collect);
+        });
+        roleAndMenuDtos.forEach(r->{
+            r.getRoleMenuList().forEach(System.out::println);
+        });
+        Map<String, Object>result=new HashMap<>(3);
+        result.put("list",roleAndMenuDtos);
+        int size = roleManageMapper.getRoleByName(dto.getName()).size();
+        result.put("total",size);
+        return result;
+    }
+
 
     private List<Menu> getEnumChildren(Menu root, List<Menu> all) {
         return all.stream()
-                .filter(t -> Objects.equals(t.getParentId(), root.getValue()))
+                .filter(t -> Objects.equals(t.getParentId(), root.getId()))
                 .peek(g -> {
                     //鎵惧瓙鑿滃崟
                     g.setChildren(getEnumChildren(g, all));
@@ -40,4 +115,23 @@
                 .collect(Collectors.toList());
     }
 
+    private List<RoleMenu> getRoleMenuChildren(RoleMenu root, List<RoleMenu> all) {
+        return all.stream()
+                .filter(t -> Objects.equals(t.getParentId(), root.getMenuId()))
+                .peek(g -> {
+                    //鎵惧瓙鑿滃崟
+                    g.setChildren(getRoleMenuChildren(g, all));
+                })
+                .collect(Collectors.toList());
+    }
+
+    private void reverseTree(List<Map<String, Object>>tree, List<Map<String, Object>>addBranch){
+        tree.forEach(t->{
+            addBranch.add(t);
+            if(t.get("children")!=null){
+                List<Map<String, Object>> children = JsonUtil.jsonToPojo( JsonUtil.jsonToString(t.get("children")), List.class);
+                addBranch.addAll(children);
+            }
+        });
+    }
 }
diff --git a/laboratory-server/src/main/resources/mapper/MenuMapper.xml b/laboratory-server/src/main/resources/mapper/MenuMapper.xml
index 586dcb7..1ea9b2d 100644
--- a/laboratory-server/src/main/resources/mapper/MenuMapper.xml
+++ b/laboratory-server/src/main/resources/mapper/MenuMapper.xml
@@ -3,7 +3,7 @@
 <mapper namespace="com.yuanchu.limslaboratory.mapper.MenuMapper">
 
     <select id="getMenuList" resultType="com.yuanchu.limslaboratory.pojo.Menu">
-        select id value,name label,parent_id parentId
+        select id,name,parent_id parentId
         from menu
         where state =1
     </select>
diff --git a/laboratory-server/src/main/resources/mapper/RoleManangeMapper.xml b/laboratory-server/src/main/resources/mapper/RoleManangeMapper.xml
new file mode 100644
index 0000000..8980e01
--- /dev/null
+++ b/laboratory-server/src/main/resources/mapper/RoleManangeMapper.xml
@@ -0,0 +1,76 @@
+<?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.RoleManageMapper">
+    <insert id="insertBatchRoleMenu" useGeneratedKeys="true" keyProperty="id">
+        insert
+        role_menu (id,`role_id`,`menu_id`,`selected`,`added`,`updated`,`deleted`,`create_time`)
+        values
+        <foreach collection="roleMenuAddList" separator="," item="r">
+            (#{r.id},#{r.roleId},#{r.menuId},#{r.selected},#{r.added},#{r.updated},#{r.deleted},#{r.createTime})
+        </foreach>
+    </insert>
+    <insert id="insertRole">
+        insert
+        role(id,name,create_time) value (
+        #{id},
+        #{name},
+        #{createTime}
+        )
+    </insert>
+    <select id="getAssertName" resultType="com.yuanchu.limslaboratory.pojo.RoleInfo">
+        select id
+        from role
+        where name = #{roleName}
+    </select>
+    <select id="selectAllRoleAndMenu" resultMap="roleAndMenu">
+        SELECT r.id roleId,
+        r.`name` roleName,
+        menu_id menuId,
+        parent_id parentId,
+        m.`name` menuName,
+        rm.selected,
+        rm.added,
+        rm.updated,
+        rm.deleted,
+        r.create_time createTime,
+        r.update_time updateTime
+        FROM role_menu rm,
+        (select id, name, createTime, updateTime
+        from role
+        where 1=1
+        <if test="dto.name!=null and dto.name!=''">
+            and name=#{dto.name}
+        </if>
+        limit #{dto.currentPage}, #{dto.pageSize}) r,
+        menu m
+        WHERE rm.role_id = r.id
+        AND rm.menu_id = m.id
+        AND r.state = 1
+        AND rm.state = 1
+        AND m.state = 1
+    </select>
+    <select id="getRoleByName" resultType="com.yuanchu.limslaboratory.pojo.Role">
+        select id
+        from role
+        where 1=1
+        <if test="dto.name!=null and dto.name!=''">
+            and name=#{dto.name}
+        </if>
+    </select>
+
+    <resultMap id="roleAndMenu" type="com.yuanchu.limslaboratory.pojo.dto.RoleAndMenuDto">
+        <result property="roleId" column="roleId"/>
+        <result property="roleName" column="roleName"/>
+        <result property="createTime" column="createTime"/>
+        <result property="updateTime" column="updateTime"/>
+        <collection property="roleMenuList" ofType="roleMenu">
+            <result property="menuId" column="menuId"/>
+            <result property="added" column="added"/>
+            <result property="deleted" column="deleted"/>
+            <result property="updated" column="updated"/>
+            <result property="selected" column="selected"/>
+            <result property="menuName" column="menuName"/>
+            <result property="parentId" column="parentId"/>
+        </collection>
+    </resultMap>
+</mapper>
\ No newline at end of file
diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/ProductController.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/ProductController.java
index 31b730b..79f34f0 100644
--- a/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/ProductController.java
+++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/ProductController.java
@@ -1,18 +1,11 @@
 package com.yuanchu.limslaboratory.controller;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yuanchu.limslaboratory.service.ProductService;
 import com.yuanchu.limslaboratory.utils.MyUtil;
 import com.yuanchu.limslaboratory.vo.Result;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
 
 /**
  * <p>
@@ -30,20 +23,32 @@
     @Autowired
     private ProductService productService;
 
-    @ApiOperation("鏌ヨ璇ュ瀷鍙蜂笅鐨勯」鐩�")
+    @ApiOperation("鏌ヨ璇ュ瀷鍙蜂笅鐨勯」鐩�-->閫夋嫨鐗堟湰")
     @ApiImplicitParams(value = {
             @ApiImplicitParam(name = "specificationsId", value = "鍨嬪彿ID", dataTypeClass = Integer.class, required = true)
     })
+    @GetMapping("/chooseVersion")
+    public Result<?> chooseVersion(Integer specificationsId) {
+        return Result.success(productService.chooseVersion(specificationsId));
+    }
+
+    @ApiOperation("鏌ヨ璇ュ瀷鍙蜂笅鐨勯」鐩�")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "specificationsId", value = "鍨嬪彿ID", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "version", value = "鐗堟湰(榛樿鏈�鏂扮増鏈�)", dataTypeClass = Integer.class,required = true )
+    })
     @GetMapping("/page")
-    public Result<?> pageProductInformation(Integer specificationsId) {
-        return Result.success(productService.pageProductInformation(specificationsId));
+    public Result<?> pageProductInformation(Integer specificationsId,Integer version) {
+        return Result.success(productService.pageProductInformation(specificationsId,version));
     }
 
     @ApiOperation("濉啓鏍囧噯鍊间笌鍐呮帶鍊�,榧犳爣绉诲紑淇濆瓨")
     @ApiImplicitParams(value = {
             @ApiImplicitParam(name = "id", value = "鏍囧噯椤圭洰ID", dataTypeClass = Integer.class, required = true),
             @ApiImplicitParam(name = "required", value = "鏍囧噯鍊�", dataTypeClass = String.class, required = true),
+            @ApiImplicitParam(name = "internal", value = "鍐呮帶鍊�", dataTypeClass = String.class, required = true),
             @ApiImplicitParam(name = "internal", value = "鍐呮帶鍊�", dataTypeClass = String.class, required = true)
+
     })
     @PostMapping("/write")
     public Result<?> write(Integer id, String required, String internal) {
@@ -64,4 +69,14 @@
         productService.deleteList(ids);
         return Result.success("鍒犻櫎鎴愬姛");
     }
+
+    @ApiOperation("娣诲姞鍚屼竴涓瀷鍙风殑鍏朵粬鐗堟湰")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "specificationsId", value = "鍨嬪彿id", dataTypeClass = Integer.class, required = true)
+    })
+    @PostMapping("/addVersion")
+    public Result<?> addVersion(Integer specificationsId ) {
+        Integer version = productService.addVersion(specificationsId);
+        return Result.success("娣诲姞鐗堟湰"+version+"鎴愬姛");
+    }
 }
diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/ProductMapper.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/ProductMapper.java
index 5abf378..13958cd 100644
--- a/standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/ProductMapper.java
+++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/ProductMapper.java
@@ -24,7 +24,13 @@
     List<Map> selectProductByMaterialId(int materialId);
 
     //灞曠ず璇ュ瀷鍙蜂笅鐨勬楠岄」鐩姹�
-    List<Map<String, Object>> pageProductInformation(Integer specificationsId);
+    List<Map<String, Object>> pageProductInformation(Integer specificationsId,Integer version);
 
     void deleteList(String ids);
+
+    //灞曠ず璇ュ瀷鍙蜂笅鐨勬楠岄」鐩姹�-->閫夋嫨鐗堟湰
+    List<Integer> chooseVersion(Integer specificationsId);
+
+    //鏌ヨ璇ュ瀷鍙蜂笅鐨勬墍鏈夎瘯楠岄」鐩�(鐖剁被)
+    List<Map<String,Object>> chooseProject(Integer modelId);
 }
diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Product.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Product.java
index 14a985e..7cc9533 100644
--- a/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Product.java
+++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Product.java
@@ -60,7 +60,7 @@
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
-    @ApiModelProperty(value = "涔愯閿�", hidden = true)
+    @ApiModelProperty(value = "鐗堟湰", hidden = true)
     private Integer version;
 
     @ApiModelProperty(value = "鍏宠仈 鍨嬪彿id", example = "1", hidden = true)
diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/service/ProductService.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/ProductService.java
index 7836058..a81e74a 100644
--- a/standard-server/src/main/java/com/yuanchu/limslaboratory/service/ProductService.java
+++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/ProductService.java
@@ -1,13 +1,10 @@
 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.Product;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 import java.util.List;
 import java.util.Map;
-import java.util.Objects;
 
 
 /**
@@ -21,13 +18,20 @@
 public interface ProductService extends IService<Product> {
     void deleteProductInformation(List<Integer> SpecificationsId);
 
+    /**
+     * 灞曠ず璇ュ瀷鍙蜂笅鐨勬楠岄」鐩姹�-->閫夋嫨鐗堟湰
+     * @param specificationsId
+     * @return
+     */
+    List<Integer> chooseVersion(Integer specificationsId);
+
 
     /**
      * 灞曠ず璇ュ瀷鍙蜂笅鐨勬楠岄」鐩姹�
      * @param specificationsId
      * @return
      */
-    List<Map<String,Object>> pageProductInformation(Integer specificationsId);
+    List<Map<String,Object>> pageProductInformation(Integer specificationsId,Integer version);
 
     /**
      * 濉啓鏍囧噯鍊间笌鍐呮帶鍊�,榧犳爣绉诲紑淇濆瓨
@@ -39,4 +43,19 @@
     Integer write(Integer id, String required, String internal);
 
     void deleteList(String ids);
+
+    /**
+     * 娣诲姞鍚屼竴涓瀷鍙风殑鍏朵粬鐗堟湰
+     * @param specificationsId
+     * @return
+     */
+    Integer addVersion(Integer specificationsId);
+
+
+    /**
+     * 鏌ヨ璇ュ瀷鍙蜂笅鐨勬墍鏈夎瘯楠岄」鐩�(鐖剁被)
+     * @param modelId
+     * @return
+     */
+    List<Map<String,Object>> chooseProject(Integer modelId);
 }
diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ProductServiceImpl.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ProductServiceImpl.java
index a08eb0e..eed66aa 100644
--- a/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ProductServiceImpl.java
+++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ProductServiceImpl.java
@@ -1,28 +1,18 @@
 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.plugins.pagination.Page;
-import com.yuanchu.limslaboratory.mapper.ProductModelMapper;
-import com.yuanchu.limslaboratory.mapper.SpecificationsMapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.yuanchu.limslaboratory.pojo.Product;
 import com.yuanchu.limslaboratory.mapper.ProductMapper;
-import com.yuanchu.limslaboratory.pojo.ProductModel;
 import com.yuanchu.limslaboratory.service.ProductService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yuanchu.limslaboratory.utils.MyUtil;
-import org.springframework.beans.factory.annotation.Autowired;
-import com.yuanchu.limslaboratory.service.UserService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.ObjectUtils;
-
 import javax.annotation.Resource;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
-import java.util.Objects;
+
 
 /**
  * <p>
@@ -38,9 +28,6 @@
     @Resource
     private ProductMapper productMapper;
 
-    @Resource
-    ProductModelMapper productModelMapper;
-
 
     @Override
     public void deleteProductInformation(List<Integer> SpecificationsId) {
@@ -52,11 +39,17 @@
         }
     }
 
+    //灞曠ず璇ュ瀷鍙蜂笅鐨勬楠岄」鐩姹�-->閫夋嫨鐗堟湰
+    @Override
+    public List<Integer> chooseVersion(Integer specificationsId) {
+        return productMapper.chooseVersion(specificationsId);
+    }
+
     //灞曠ず璇ュ瀷鍙蜂笅鐨勬楠岄」鐩姹�
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public List<Map<String, Object>> pageProductInformation(Integer specificationsId) {
-        return productMapper.pageProductInformation(specificationsId);
+    public List<Map<String, Object>> pageProductInformation(Integer specificationsId,Integer version) {
+        return productMapper.pageProductInformation(specificationsId,version);
     }
 
     //濉啓鏍囧噯鍊间笌鍐呮帶鍊�,榧犳爣绉诲紑淇濆瓨
@@ -75,5 +68,22 @@
         productMapper.deleteList(ids);
     }
 
+    //娣诲姞鍚屼竴涓瀷鍙风殑鍏朵粬鐗堟湰
+    @Override
+    public Integer addVersion(Integer specificationsId) {
+        List<Product> productList = productMapper.selectList(Wrappers.<Product>query().eq("specifications_id", specificationsId));
+        for (Product product : productList) {
+            product.setVersion(product.getVersion()+1);
+        }
+         saveBatch(productList);
+        return productList.get(0).getVersion();
+    }
+
+    //鏌ヨ璇ュ瀷鍙蜂笅鐨勬墍鏈夎瘯楠岄」鐩�(鐖剁被)
+    @Override
+    public List<Map<String,Object>> chooseProject(Integer modelId) {
+        return productMapper.chooseProject(modelId);
+    }
+
 
 }
diff --git a/standard-server/src/main/resources/mapper/ProductMapper.xml b/standard-server/src/main/resources/mapper/ProductMapper.xml
index 05c4e11..398bc0d 100644
--- a/standard-server/src/main/resources/mapper/ProductMapper.xml
+++ b/standard-server/src/main/resources/mapper/ProductMapper.xml
@@ -23,6 +23,7 @@
         <result property="unit" column="unit"/>
         <result property="required" column="required"/>
         <result property="internal" column="internal"/>
+        <result property="version" column="version"/>
     </resultMap>
 
     <select id="pageProductInformation" resultMap="pageProductInformationMap">
@@ -31,11 +32,13 @@
                father,
                unit,
                required,
-               internal
+               internal,
+               version
         from lims_laboratory.product
         where state = 1
           and specifications_id = #{specificationsId}
         ORDER BY product.`create_time` DESC
+          and version = #{version}
     </select>
 
     <select id="deleteList">
@@ -43,4 +46,29 @@
         set state=0
         where id in (${ids})
     </select>
+
+    <!--灞曠ず璇ュ瀷鍙蜂笅鐨勬楠岄」鐩姹�-閫夋嫨鐗堟湰-->
+    <select id="chooseVersion" resultType="java.lang.Integer">
+        select distinct version
+        from lims_laboratory.product
+        where state = 1
+          and specifications_id = #{specificationsId}
+        order by version desc
+    </select>
+
+    <!--鏌ヨ璇ュ瀷鍙蜂笅鐨勬墍鏈夎瘯楠岄」鐩�(鐖剁被)-->
+    <resultMap id="chooseProjects" type="map">
+        <id property="name" column="father"/>
+        <collection property="children" resultMap="chooseProjectTowMap" javaType="List"/>
+    </resultMap>
+    <resultMap id="chooseProjectTowMap" type="map">
+        <id property="id" column="id"/>
+        <result property="name" column="name"/>
+    </resultMap>
+    <select id="chooseProject" resultMap="chooseProjects">
+        select id, father, name
+        from lims_laboratory.product
+        where state = 1
+          and specifications_id = #{modelId}
+    </select>
 </mapper>
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/controller/EnterpriseController.java b/user-server/src/main/java/com/yuanchu/limslaboratory/controller/EnterpriseController.java
deleted file mode 100644
index 65ecfc8..0000000
--- a/user-server/src/main/java/com/yuanchu/limslaboratory/controller/EnterpriseController.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.yuanchu.limslaboratory.controller;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- *  鍓嶇鎺у埗鍣�
- * </p>
- *
- * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
- * @since 2023-07-07
- */
-@RestController
-@RequestMapping("/enterprise")
-public class EnterpriseController {
-
-}
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/controller/WaitInformationController.java b/user-server/src/main/java/com/yuanchu/limslaboratory/controller/WaitInformationController.java
new file mode 100644
index 0000000..df02520
--- /dev/null
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/controller/WaitInformationController.java
@@ -0,0 +1,79 @@
+package com.yuanchu.limslaboratory.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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 com.yuanchu.limslaboratory.service.WaitInformationService;
+
+import java.util.HashMap;
+import java.util.Map;
+
+
+/**
+ * 鎴戠殑寰呭姙琛�(WaitInformation)琛ㄦ帶鍒跺眰
+ *
+ * @author zss
+ * @since 2023-08-24 10:00:21
+ */
+@Api(tags = "娑堟伅寰呭姙-->鎴戠殑寰呭姙")
+@RestController
+@RequestMapping("/waitInformation")
+public class WaitInformationController {
+
+    @Autowired
+    private WaitInformationService waitInformationService;
+
+    @ApiOperation(value = "鏌ヨ寰呭姙琛ㄥ垪琛�")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "pageSize", value = "椤垫暟", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "countSize", value = "鏉℃暟/椤�", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "title", value = "鏍囬", dataTypeClass = String.class),
+            @ApiImplicitParam(name = "text", value = "鍐呭", dataTypeClass = String.class),
+            @ApiImplicitParam(name = "type", value = "鐘舵��(涓虹┖=鍏ㄩ儴)", dataTypeClass = Integer.class)
+    })
+    @GetMapping("/selectWaitInforList")
+    public Result selectWaitInforList(@RequestHeader("token") String token,int pageSize, int countSize, String title, String text, Integer type) throws Exception {
+        Object object = RedisUtil.get(token);
+        Map<String, Object> unmarshal = JackSonUtil.unmarshal(JackSonUtil.marshal(object), Map.class);
+        IPage<Map<String, Object>> waitInformationPage = waitInformationService.selectWaitInforList(new Page<Object>(pageSize, countSize),unmarshal.get("name").toString(), title, text, type);
+        Map<String, Object> map = new HashMap<>();
+        map.put("total", waitInformationPage.getTotal());
+        map.put("row", waitInformationPage.getRecords());
+        return Result.success(map);
+    }
+
+    @ApiOperation(value = "鎵归噺鍒犻櫎")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "ids", value = "寰呭姙id", dataTypeClass = String.class,required = true)
+    })
+    @GetMapping("/delAllWaitInfor")
+    public Result delAllWaitInfor(@RequestHeader("token") String token,String ids) throws Exception {
+        Object object = RedisUtil.get(token);
+        Map<String, Object> unmarshal = JackSonUtil.unmarshal(JackSonUtil.marshal(object), Map.class);
+        waitInformationService.delAllWaitInfor(unmarshal.get("name").toString(),ids);
+        return Result.success("鍒犻櫎鎴愬姛!");
+    }
+
+    @ApiOperation(value = "鎵归噺鏍囦负宸茶")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "ids", value = "寰呭姙id", dataTypeClass = String.class,required = true)
+    })
+    @GetMapping("/writeAllWaitInfor")
+    public Result writeAllWaitInfor(@RequestHeader("token") String token,String ids) throws Exception {
+        Object object = RedisUtil.get(token);
+        Map<String, Object> unmarshal = JackSonUtil.unmarshal(JackSonUtil.marshal(object), Map.class);
+        waitInformationService.writeAllWaitInfor(unmarshal.get("name").toString(),ids);
+        return Result.success("宸茶鎴愬姛");
+    }
+
+}
+
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/mapper/WaitInformationMapper.java b/user-server/src/main/java/com/yuanchu/limslaboratory/mapper/WaitInformationMapper.java
new file mode 100644
index 0000000..a51e5a6
--- /dev/null
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/mapper/WaitInformationMapper.java
@@ -0,0 +1,27 @@
+package com.yuanchu.limslaboratory.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.limslaboratory.pojo.WaitInformation;
+
+import java.util.Map;
+
+/**
+ * 鎴戠殑寰呭姙琛�(WaitInformation)琛ㄦ暟鎹簱璁块棶灞�
+ *
+ * @author zss
+ * @since 2023-08-24 10:00:21
+ */
+public interface WaitInformationMapper extends BaseMapper<WaitInformation> {
+
+    //鏌ヨ寰呭姙琛ㄥ垪琛�
+    IPage<Map<String, Object>> selectWaitInforList(Page<Object> page,String rename, String title, String text,Integer type);
+
+    //鎵归噺鍒犻櫎
+    void delAllWaitInfor(String rename,String ids);
+
+    //鎵归噺宸茶
+    void writeAllWaitInfor(String rename,String ids);
+}
+
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/WaitInformation.java b/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/WaitInformation.java
new file mode 100644
index 0000000..daed7a6
--- /dev/null
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/pojo/WaitInformation.java
@@ -0,0 +1,73 @@
+package com.yuanchu.limslaboratory.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.*;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.io.Serializable;
+
+/**
+ * 鎴戠殑寰呭姙琛�(WaitInformation)琛ㄥ疄浣撶被
+ *
+ * @author zss
+ * @since 2023-08-24 10:00:22
+ */
+@Data
+@Accessors(chain = true)
+@AllArgsConstructor
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = false)
+@Builder
+@TableName("wait_information")
+public class WaitInformation implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     **/
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 鍙戜欢浜�
+     **/
+    private String name;
+
+    /**
+     * 鍙戜欢浜�
+     **/
+    private String rename;
+
+    /**
+     * 鏍囬
+     **/
+    private String title;
+
+    /**
+     * 寰呭姙鍐呭
+     **/
+    private String text;
+
+    /**
+     * 鐘舵�� 0:鏈;1:宸茶
+     **/
+    private Integer type;
+
+    @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0", hidden = true)
+    private Integer state;
+
+    @TableField(fill = FieldFill.INSERT)
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date updateTime;
+}
+
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/service/WaitInformationService.java b/user-server/src/main/java/com/yuanchu/limslaboratory/service/WaitInformationService.java
new file mode 100644
index 0000000..83d9e6e
--- /dev/null
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/service/WaitInformationService.java
@@ -0,0 +1,51 @@
+package com.yuanchu.limslaboratory.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yuanchu.limslaboratory.pojo.WaitInformation;
+
+import java.util.Map;
+
+/**
+ * 鎴戠殑寰呭姙琛�(WaitInformation)琛ㄦ湇鍔℃帴鍙�
+ *
+ * @author zss
+ * @since 2023-08-24 10:00:22
+ */
+public interface WaitInformationService extends IService<WaitInformation> {
+
+
+    /**
+     * 娣诲姞寰呭姙
+     * @param name
+     * @param title
+     * @param text
+     */
+    //todo:娣诲姞寰呭姙娑堟伅
+    void addWaitInfor(String name,String title,String text,String rename);
+
+
+    /**
+     * 鏌ヨ寰呭姙琛ㄥ垪琛�
+     * @param page
+     * @param title
+     * @param text
+     * @return
+     */
+    IPage<Map<String, Object>> selectWaitInforList(Page<Object> page,String rename, String title, String text,Integer type);
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     */
+    void delAllWaitInfor(String rename,String ids);
+
+
+    /**
+     * 鎵归噺宸茶
+     * @param ids
+     */
+    void writeAllWaitInfor(String rename,String ids);
+}
+
diff --git a/user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/WaitInformationServiceImpl.java b/user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/WaitInformationServiceImpl.java
new file mode 100644
index 0000000..d7ffdbc
--- /dev/null
+++ b/user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/WaitInformationServiceImpl.java
@@ -0,0 +1,57 @@
+package com.yuanchu.limslaboratory.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yuanchu.limslaboratory.mapper.WaitInformationMapper;
+import com.yuanchu.limslaboratory.pojo.WaitInformation;
+import com.yuanchu.limslaboratory.service.WaitInformationService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Map;
+
+/**
+ * 鎴戠殑寰呭姙琛�(WaitInformation)琛ㄦ湇鍔″疄鐜扮被
+ *
+ * @author zss
+ * @since 2023-08-24 10:00:22
+ */
+@Service
+public class WaitInformationServiceImpl extends ServiceImpl<WaitInformationMapper, WaitInformation> implements WaitInformationService {
+
+    @Resource
+    WaitInformationMapper waitInformationMapper;
+
+
+    //娣诲姞寰呭姙
+    @Override
+    public void addWaitInfor(String name, String title, String text, String rename) {
+        WaitInformation waitInformation = WaitInformation.builder()
+                .name(name)
+                .title(title)
+                .text(text)
+                .rename(rename)
+                .build();
+        waitInformationMapper.insert(waitInformation);
+    }
+
+    //鏌ヨ寰呭姙琛ㄥ垪琛�
+    @Override
+    public IPage<Map<String, Object>> selectWaitInforList(Page<Object> page, String rename, String title, String text, Integer type) {
+        return waitInformationMapper.selectWaitInforList(page, rename, title, text, type);
+    }
+
+    //鎵归噺鍒犻櫎
+    @Override
+    public void delAllWaitInfor(String rename, String ids) {
+        waitInformationMapper.delAllWaitInfor(rename, ids);
+    }
+
+    //鎵归噺宸茶
+    @Override
+    public void writeAllWaitInfor(String rename, String ids) {
+        waitInformationMapper.writeAllWaitInfor(rename, ids);
+    }
+}
+
diff --git a/user-server/src/main/resources/mapper/WaitInformationMapper.xml b/user-server/src/main/resources/mapper/WaitInformationMapper.xml
new file mode 100644
index 0000000..ad224f8
--- /dev/null
+++ b/user-server/src/main/resources/mapper/WaitInformationMapper.xml
@@ -0,0 +1,42 @@
+<?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.WaitInformationMapper">
+    <!--鏌ヨ寰呭姙琛ㄥ垪琛�-->
+    <select id="selectWaitInforList" resultType="java.util.Map">
+        select id,
+        name,
+        title,
+        text,
+        DATE_FORMAT(create_time,'%Y-%m-%d') creatTime,
+        type
+        from lims_laboratory.wait_information
+        where state=1
+        and `rename`=#{rename}
+        <if test="title!=null and title!=''">
+            and title like concat('%',#{title},'%')
+        </if>
+        <if test="text!=null and text!=''">
+            and text like concat('%',#{text},'%')
+        </if>
+        <if test="type!=null ">
+            and type =#{type}
+        </if>
+    </select>
+
+    <!--鎵归噺鍒犻櫎-->
+    <update id="delAllWaitInfor">
+        update lims_laboratory.wait_information
+        set state=0
+        where `rename`=#{rename}
+          and  id in (${ids})
+    </update>
+
+    <!--鎵归噺宸茶-->
+    <update id="writeAllWaitInfor">
+        update lims_laboratory.wait_information
+        set type=1
+        where wait_information.state = 1
+          and `rename`=#{rename}
+          and id in (${ids})
+    </update>
+</mapper>
\ No newline at end of file

--
Gitblit v1.9.3