From ad7151b14f2721b0fa40a903c6e65a2c511dd4c5 Mon Sep 17 00:00:00 2001
From: XiaoRuby <3114200645@qq.com>
Date: 星期四, 27 七月 2023 15:08:13 +0800
Subject: [PATCH] LIMS管理系统框架-开发7-27第二次标准库完成修改

---
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInformation.java                    |    3 
 standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddSpecifications.java                    |   23 +
 standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddStandardDto.java                       |   28 ++
 standard-server/src/main/resources/mapper/MaterialMapper.xml                                                |    1 
 pom.xml                                                                                                     |    6 
 standard-server/src/main/java/com/yuanchu/limslaboratory/controller/ProductController.java                  |   38 +
 standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/StandardServiceImpl.java              |   61 +++-
 standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/SpecificationsServiceImpl.java        |   25 +
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/EquipmentPointController.java         |   10 
 standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Material.java                                 |    6 
 standard-server/src/main/java/com/yuanchu/limslaboratory/service/SpecificationsService.java                 |    8 
 standard-server/src/main/java/com/yuanchu/limslaboratory/service/MaterialService.java                       |   19 
 standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MaterialServiceImpl.java              |  117 ++++++-
 standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddMaterialDto.java                       |   31 ++
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/InstrumentController.java             |  103 +++++++
 user-server/src/main/java/com/yuanchu/limslaboratory/service/UserService.java                               |    9 
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/EquipmentPointService.java               |    2 
 standard-server/src/main/java/com/yuanchu/limslaboratory/controller/StandardController.java                 |   19 +
 framework/src/main/java/com/yuanchu/limslaboratory/handler/GlobalExceptionHandler.java                      |   15 +
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/EquipmentPointMapper.java                 |    2 
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/EquipmentPointServiceImpl.java      |    4 
 standard-server/src/main/resources/mapper/ProductMapper.xml                                                 |   14 +
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MetricalInformationServiceImpl.java |    4 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionController.java             |    8 
 standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ProductServiceImpl.java               |   46 ++
 standard-server/src/main/java/com/yuanchu/limslaboratory/service/StandardService.java                       |   12 
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/Instrument.java                             |    8 
 standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/MaterialMapper.java                         |    2 
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MetricalInformationService.java          |    2 
 laboratory-server/src/main/resources/mapper/MetricalInformationMapper.xml                                   |    3 
 standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/ProductMapper.java                          |    7 
 standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Specifications.java                           |    2 
 inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionMaterialListController.java |    9 
 user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/UserServiceImpl.java                      |    8 
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MetricalInformationController.java    |   76 +++++
 laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/MetricalInformationMapper.java            |    2 
 standard-server/src/main/java/com/yuanchu/limslaboratory/controller/MaterialController.java                 |   29 +
 standard-server/src/main/java/com/yuanchu/limslaboratory/service/ProductService.java                        |    9 
 standard-server/src/main/java/com/yuanchu/limslaboratory/controller/SpecificationsController.java           |   13 
 laboratory-server/src/main/resources/mapper/EquipmentPointMapper.xml                                        |    1 
 standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Standard.java                                 |    2 
 41 files changed, 658 insertions(+), 129 deletions(-)

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 976777b..e94b324 100644
--- a/framework/src/main/java/com/yuanchu/limslaboratory/handler/GlobalExceptionHandler.java
+++ b/framework/src/main/java/com/yuanchu/limslaboratory/handler/GlobalExceptionHandler.java
@@ -14,13 +14,18 @@
 import org.springframework.http.converter.HttpMessageNotReadableException;
 import org.springframework.http.converter.HttpMessageNotWritableException;
 import org.springframework.jdbc.BadSqlGrammarException;
+import org.springframework.validation.ObjectError;
+import org.springframework.web.bind.MethodArgumentNotValidException;
 import org.springframework.web.bind.annotation.ExceptionHandler;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
 import org.springframework.web.multipart.MultipartException;
 
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.net.BindException;
 import java.sql.SQLException;
+import java.util.List;
+import java.util.stream.Collectors;
 
 
 @Slf4j
@@ -191,6 +196,16 @@
         return Result.fail("鎶辨瓑涓嶆敮鎸併��" + e.getMessage() +"銆戝悗缂�鐨勬枃浠讹紒");
     }
 
+    /**
+     * 鍙傛暟妫�楠�
+     */
+    @ExceptionHandler({MethodArgumentNotValidException.class})
+    public Result<?> methodArgumentNotValidException(MethodArgumentNotValidException e) {
+        List<ObjectError> allErrors = e.getBindingResult().getAllErrors();
+        String message = allErrors.stream().map(s -> s.getDefaultMessage()).collect(Collectors.joining(";"));
+        return Result.fail(message);
+    }
+
     /** 鍏朵粬閿欒 */
     @ExceptionHandler({Exception.class})
     public Result<?> exception(Exception e) {
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 c0295d4..6906e8d 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
@@ -8,6 +8,7 @@
 import com.yuanchu.limslaboratory.pojo.Product;
 import com.yuanchu.limslaboratory.service.*;
 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.*;
@@ -80,11 +81,12 @@
     @ApiOperation("鏌ヨ鐗╂枡淇℃伅")
     @ApiImplicitParams(value = {
             @ApiImplicitParam(name = "pageSize", value = "椤垫暟", dataTypeClass = Integer.class, required = true),
-            @ApiImplicitParam(name = "countSize", value = "鏉℃暟/椤�", dataTypeClass = Integer.class, required = true)
+            @ApiImplicitParam(name = "countSize", value = "鏉℃暟/椤�", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "type", value = "绫诲瀷", dataTypeClass = Integer.class, required = true)
     })
     @GetMapping("/selectMaterialLimit")
-    public Result selectMaterialLimit(int pageSize, int countSize) {
-        return Result.success(materialService.selectMaterialLimit(pageSize, countSize));
+    public Result selectMaterialLimit(int pageSize, int countSize, int type) {
+        return Result.success(materialService.selectMaterialLimit(pageSize, countSize, type));
     }
 
     @ApiOperation("閫夋嫨鐗╂枡淇℃伅")
diff --git a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionMaterialListController.java b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionMaterialListController.java
index 09bb02e..0405b39 100644
--- a/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionMaterialListController.java
+++ b/inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionMaterialListController.java
@@ -1,6 +1,7 @@
 package com.yuanchu.limslaboratory.controller;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.yuanchu.limslaboratory.pojo.InspectionMaterialList;
 import com.yuanchu.limslaboratory.service.InspectionMaterialListService;
 import com.yuanchu.limslaboratory.utils.JackSonUtil;
@@ -50,11 +51,11 @@
 
     @ApiOperation("鏍规嵁Id鏌ヨ鏍峰搧淇℃伅")
     @ApiImplicitParams(value = {
-            @ApiImplicitParam(name = "inspectionMaterialListId", value = "鏍峰搧ID", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "inspectionId", value = "鏍峰搧ID", dataTypeClass = String.class, required = true),
     })
-    @PutMapping("/selectInspectionMaterialListById/{inspectionMaterialListId}")
-    public Result selectInspectionMaterialListById(@PathVariable Integer inspectionMaterialListId) {
-        return Result.success(inspectionMaterialListService.getById(inspectionMaterialListId));
+    @GetMapping("/selectInspectionMaterialListById/{inspectionId}")
+    public Result selectInspectionMaterialListById(@PathVariable String inspectionId) {
+        return Result.success(inspectionMaterialListService.list(new QueryWrapper<InspectionMaterialList>().eq("inspection_id", inspectionId).eq("state", 1)));
     }
 
     @ApiOperation("鏍规嵁鏍峰搧id淇敼鏍峰搧淇℃伅")
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/EquipmentPointController.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/EquipmentPointController.java
index 4753c3e..2e403fe 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/EquipmentPointController.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/EquipmentPointController.java
@@ -17,6 +17,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import javax.validation.constraints.NotNull;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -51,10 +52,13 @@
         return Result.fail("娣诲姞銆�"+ equipmentPoint.getEquipmentPointName() +"銆戝け璐ワ紒璁惧鐮佺偣缂栫爜閲嶅锛�");
     }
 
-    @ApiOperation("鏌ヨ鎵�鏈夎澶囩爜鐐规暟鎹�")
+    @ApiOperation("鏍规嵁浠櫒Id鏌ヨ瀵瑰簲璁惧鐮佺偣鏁版嵁")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "InstrumentId", value = "浠櫒妯″潡Id", dataTypeClass = String.class, required = true)
+    })
     @GetMapping("/list")
-    public Result<?> getListEquipmentPointInformation() {
-        List<Map<String, Object>> list = equipmentPointService.getListEquipmentPointInformation();
+    public Result<?> getListEquipmentPointInformation(String InstrumentId) {
+        List<Map<String, Object>> list = equipmentPointService.getListEquipmentPointInformation(InstrumentId);
         return Result.success(list);
     }
 
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/InstrumentController.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/InstrumentController.java
index 3b1ee87..6a886ea 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/InstrumentController.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/InstrumentController.java
@@ -1,9 +1,25 @@
 package com.yuanchu.limslaboratory.controller;
 
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.limslaboratory.pojo.Instrument;
+import com.yuanchu.limslaboratory.pojo.dto.UpdateInstrumentDto;
+import com.yuanchu.limslaboratory.service.InstrumentService;
+import com.yuanchu.limslaboratory.service.UserService;
+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 org.springframework.web.bind.annotation.RestController;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
 
 /**
  * <p>
@@ -13,8 +29,91 @@
  * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
  * @since 2023-07-20
  */
+@Api(tags = "瀹為獙瀹�-->璁惧鍙拌处-->2銆佷华鍣ㄦā鍧�")
 @RestController
 @RequestMapping("/instrument")
 public class InstrumentController {
 
+    @Autowired
+    private InstrumentService instrumentService;
+
+    @Autowired
+    private UserService userService;
+
+    @ApiOperation("娣诲姞浠櫒璁惧")
+    @PostMapping("/add")
+    public Result<?> addInstrumentInformation(@RequestHeader("X-Token") String token, @RequestBody Instrument instrument) throws Exception {
+        Object object = RedisUtil.get(token);
+        Map<String, Object> unmarshal = JackSonUtil.unmarshal(JackSonUtil.marshal(object), Map.class);
+        instrument.setCreateUserId((Integer) unmarshal.get("id"));
+        Integer isInsertSuccess = instrumentService.addInstrumentInformation(instrument);
+        if (isInsertSuccess == 1){
+            return Result.success("娣诲姞銆�" + instrument.getEquipmentName() + "銆戞垚鍔�!");
+        }
+        return Result.fail("浠櫒璁惧缂栧彿閲嶅锛屾坊鍔犮��" + instrument.getEquipmentName() + "銆戝け璐�! ");
+    }
+
+    @ApiOperation("鏍规嵁鍒嗙被Id锛氬垎椤靛垪琛ㄥ睍绀�")
+    @GetMapping("/list")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "classifyId", value = "鍒嗙被Id", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "pageNo", value = "璧峰椤�", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "pageSize", value = "姣忎竴椤垫暟閲�", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "conditions", value = "鏌ヨ鐘舵��:榛樿鍏ㄩ儴", dataTypeClass = Integer.class),
+            @ApiImplicitParam(name = "whetherWhether", value = "鏄惁宸茶繃鏈�", dataTypeClass = Boolean.class),
+            @ApiImplicitParam(name = "numberOrNameOrSpecifications", value = "缂栧彿/璁惧鍚嶇О/瑙勬牸鍨嬪彿", dataTypeClass = String.class)
+    })
+    public Result<?> getListInstrumentInformation(Integer pageNo,
+                                                  Integer pageSize,
+                                                  Integer conditions,
+                                                  Integer classifyId,
+                                                  Boolean whetherWhether,
+                                                  String numberOrNameOrSpecifications) {
+        IPage<Map<String, Object>> pageList = instrumentService.getListInstrumentInformation(conditions, whetherWhether, numberOrNameOrSpecifications,
+                classifyId, 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);
+    }
+
+    @ApiOperation("鍒犻櫎浠櫒鏁版嵁")
+    @DeleteMapping("/delete")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "instrumentId", value = "浠櫒Id", dataTypeClass = String.class, required = true)
+    })
+    public Result<?> deleteInstrumentInformation(String instrumentId) {
+        Boolean isDeleteSuccess = instrumentService.deleteInstrumentInformation(instrumentId);
+        if (isDeleteSuccess){
+            return Result.success("鍒犻櫎浠櫒鎴愬姛锛�");
+        }
+        return Result.fail("鍒犻櫎浠櫒澶辫触锛�");
+    }
+
+    @ApiOperation("娣诲姞浠櫒鏃朵繚绠′汉涓嬫媺妗嗘暟鎹�")
+    @GetMapping("/get_user")
+    public Result<?> getMapUserInformation() {
+        return Result.success(userService.getUserNameAndId());
+    }
+
+    @ApiOperation("鏍规嵁浠櫒Id鑾峰彇淇℃伅鐢ㄤ簬缂栬緫")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "InstrumentId", value = "鍒嗙被Id", dataTypeClass = Integer.class, required = true)
+    })
+    @GetMapping("/get_instrument")
+    public Result<?> getIdInstrumentInformation(Integer InstrumentId) {
+        Instrument idInstrumentInformation = instrumentService.getIdInstrumentInformation(InstrumentId);
+        return Result.success(idInstrumentInformation);
+    }
+
+    @ApiOperation("鏍规嵁浠櫒Id鏇存柊鏁版嵁")
+    @PutMapping("/update")
+    public Result<?> updateEquipmentPointInformation(@RequestBody UpdateInstrumentDto updateInstrumentDto) throws Exception {
+        Instrument instrument = JackSonUtil.unmarshal(JackSonUtil.marshal(updateInstrumentDto), Instrument.class);
+        Integer isUpdateSuccess = instrumentService.updateEquipmentPointInformation(instrument);
+        if (isUpdateSuccess == 1){
+            return Result.success("鏇存柊銆�" + instrument.getEquipmentName() + "銆戞垚鍔�!");
+        }
+        return Result.fail("浠櫒璁惧缂栧彿閲嶅锛屾洿鏂般��" + instrument.getEquipmentName() + "銆戝け璐�! ");
+    }
 }
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MetricalInformationController.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MetricalInformationController.java
index 6b7ceb6..a2f4c7c 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MetricalInformationController.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MetricalInformationController.java
@@ -1,9 +1,21 @@
 package com.yuanchu.limslaboratory.controller;
 
+import com.yuanchu.limslaboratory.pojo.MetricalInformation;
+import com.yuanchu.limslaboratory.pojo.dto.UpdateMetricalInformationDto;
+import com.yuanchu.limslaboratory.service.MetricalInformationService;
+import com.yuanchu.limslaboratory.service.UserService;
+import com.yuanchu.limslaboratory.utils.JackSonUtil;
+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 org.springframework.web.multipart.MultipartFile;
 
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -13,8 +25,66 @@
  * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
  * @since 2023-07-20
  */
+@Api(tags = "瀹為獙瀹�-->璁惧鍙拌处-->4銆佽閲忎俊鎭�")
 @RestController
 @RequestMapping("/metrical-information")
 public class MetricalInformationController {
 
+    @Autowired
+    private MetricalInformationService metricalInformationService;
+
+    @Autowired
+    private UserService userService;
+
+    @ApiOperation("娣诲姞璁¢噺淇℃伅")
+    @PostMapping("/add")
+    public Result<?> addMetricalInformation(MetricalInformation metricalInformation,
+                                            @RequestPart(value = "file", required = false) MultipartFile file) {
+        Integer isInsertSuccess = metricalInformationService.addEquipmentPointInformation(metricalInformation, file);
+        if (isInsertSuccess == 1){
+            return Result.success("娣诲姞銆�"+ metricalInformation.getMeasurementUnit() +"銆戞垚鍔燂紒");
+        }
+        return Result.fail("娣诲姞銆�"+ metricalInformation.getMeasurementUnit() +"銆戝け璐ワ紒璁惧鐮佺偣缂栫爜閲嶅锛�");
+    }
+
+    @ApiOperation("鏌ヨ鎵�鏈夎閲忎俊鎭暟鎹�")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "InstrumentId", value = "浠櫒妯″潡Id", dataTypeClass = String.class, required = true)
+    })
+    @GetMapping("/list")
+    public Result<?> getListMetricalInformation(String InstrumentId) {
+        List<Map<String, Object>> list = metricalInformationService.getListEquipmentPointInformation(InstrumentId);
+        return Result.success(list);
+    }
+
+    @ApiOperation("鏍规嵁璁¢噺淇℃伅Id鍒犻櫎鏁版嵁")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "metricalInformationId", value = "璁¢噺淇℃伅Id", dataTypeClass = Integer.class, required = true)
+    })
+    @DeleteMapping("/delete")
+    public Result<?> deleteMetricalInformation(Integer metricalInformationId) {
+        Integer isDeleteSuccess = metricalInformationService.deleteMetricalInformation(metricalInformationId);
+        if (isDeleteSuccess == 1){
+            return Result.success("鍒犻櫎鎴愬姛锛�");
+        }
+        return Result.fail("鍒犻櫎澶辫触锛�");
+    }
+
+    @ApiOperation("鏍规嵁璁¢噺淇℃伅Id鏇存柊鏁版嵁")
+    @PutMapping("/update")
+    public Result<?> updateMetricalInformation(UpdateMetricalInformationDto updateMetricalInformationDto,
+                                                     @RequestPart(value = "file", required = false) MultipartFile file) throws Exception {
+        MetricalInformation metricalInformation = JackSonUtil.unmarshal(JackSonUtil.marshal(updateMetricalInformationDto), MetricalInformation.class);
+        Integer isUpdateSuccess = metricalInformationService.updateMetricalInformation(metricalInformation, file);
+        if (isUpdateSuccess == 1){
+            return Result.success("鏇存柊鎴愬姛锛�");
+        }
+        return Result.fail("鏇存柊澶辫触锛�");
+    }
+
+    @ApiOperation("娣诲姞璁¢噺淇℃伅鏃惰礋璐d汉涓嬫媺妗嗘暟鎹�")
+    @GetMapping("/get_user")
+    public Result<?> getMapUserInformation() {
+        return Result.success(userService.getUserNameAndId());
+    }
 }
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/EquipmentPointMapper.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/EquipmentPointMapper.java
index 3dd46b8..5918e89 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/EquipmentPointMapper.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/EquipmentPointMapper.java
@@ -19,5 +19,5 @@
  */
 public interface EquipmentPointMapper extends BaseMapper<EquipmentPoint> {
 
-    List<Map<String, Object>> getListEquipmentPointInformation();
+    List<Map<String, Object>> getListEquipmentPointInformation(String InstrumentId);
 }
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/MetricalInformationMapper.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/MetricalInformationMapper.java
index 987c803..ef27ce7 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/MetricalInformationMapper.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/MetricalInformationMapper.java
@@ -16,5 +16,5 @@
  */
 public interface MetricalInformationMapper extends BaseMapper<MetricalInformation> {
 
-    List<Map<String, Object>> getListEquipmentPointInformation();
+    List<Map<String, Object>> getListEquipmentPointInformation(String InstrumentId);
 }
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/Instrument.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/Instrument.java
index 0b581ec..0d7fcdb 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/Instrument.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/Instrument.java
@@ -11,6 +11,7 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
 
 /**
  * <p>
@@ -37,6 +38,9 @@
     @ApiModelProperty(value = "淇濈浜猴細鐢ㄦ埛琛ㄥ叧鑱擨d", example = "9", required = true)
     private Integer userId;
 
+    @ApiModelProperty(value = "淇濈浜猴細鐢ㄦ埛琛ㄥ叧鑱擨d", hidden = true)
+    private Integer createUserId;
+
     @ApiModelProperty(value = "浠櫒璁惧缂栧彿", example = "JSTC-W1-00001", required = true)
     private String equipmentCode;
 
@@ -60,10 +64,12 @@
 
     @ApiModelProperty(value = "鍒拌揣鏃ユ湡", example = "2001-07-06", dataType = "date")
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
     private Date arrivalDate;
 
     @ApiModelProperty(value = "楠屾敹鏃ユ湡", example = "2060-07-06", dataType = "date")
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
     private Date acceptanceDate;
 
     @ApiModelProperty(value = "瀛樻斁鍦�", example = "鍦扮悆浜氭床涓浗姹熻嫃鍗楅��")
@@ -86,9 +92,9 @@
     @ApiModelProperty(value = "閫昏緫鍒犻櫎 姝e父>=1,鍒犻櫎<=0", hidden = true)
     private Integer state;
 
-    @JsonIgnore
     @TableField(fill = FieldFill.INSERT)
     @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true)
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date createTime;
 
     @JsonIgnore
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInformation.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInformation.java
index 660d10d..5ee2a7c 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInformation.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInformation.java
@@ -35,6 +35,9 @@
     @ApiModelProperty(value = "鐢ㄦ埛鍏宠仈Id", example = "7", required = true)
     private Integer userId;
 
+    @ApiModelProperty(value = "浠櫒鍏宠仈Id", example = "1", required = true)
+    private Integer instrumentId;
+
     @ApiModelProperty(value = "璁¢噺鍗曚綅", example = "GB", required = true)
     private String measurementUnit;
 
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/EquipmentPointService.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/EquipmentPointService.java
index ba3c510..4861c63 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/EquipmentPointService.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/EquipmentPointService.java
@@ -21,7 +21,7 @@
 
     Integer addEquipmentPointInformation(EquipmentPoint equipmentPoint);
 
-    List<Map<String, Object>> getListEquipmentPointInformation();
+    List<Map<String, Object>> getListEquipmentPointInformation(String InstrumentId);
 
     Integer deleteEquipmentPointInformation(Integer equipmentPointId);
 
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MetricalInformationService.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MetricalInformationService.java
index 8d7d919..eb8ad69 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MetricalInformationService.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MetricalInformationService.java
@@ -19,7 +19,7 @@
 
     Integer addEquipmentPointInformation(MetricalInformation metricalInformation, MultipartFile file);
 
-    List<Map<String, Object>> getListEquipmentPointInformation();
+    List<Map<String, Object>> getListEquipmentPointInformation(String InstrumentId);
 
     Integer deleteMetricalInformation(Integer metricalInformationId);
 
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/EquipmentPointServiceImpl.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/EquipmentPointServiceImpl.java
index c0ba3ff..93202cc 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/EquipmentPointServiceImpl.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/EquipmentPointServiceImpl.java
@@ -45,8 +45,8 @@
     }
 
     @Override
-    public List<Map<String, Object>> getListEquipmentPointInformation() {
-        return equipmentPointMapper.getListEquipmentPointInformation();
+    public List<Map<String, Object>> getListEquipmentPointInformation(String InstrumentId) {
+        return equipmentPointMapper.getListEquipmentPointInformation(InstrumentId);
     }
 
     @Override
diff --git a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MetricalInformationServiceImpl.java b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MetricalInformationServiceImpl.java
index a2ad0d9..74ed4a4 100644
--- a/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MetricalInformationServiceImpl.java
+++ b/laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MetricalInformationServiceImpl.java
@@ -40,8 +40,8 @@
     }
 
     @Override
-    public List<Map<String, Object>> getListEquipmentPointInformation() {
-        return metricalInformationMapper.getListEquipmentPointInformation();
+    public List<Map<String, Object>> getListEquipmentPointInformation(String InstrumentId) {
+        return metricalInformationMapper.getListEquipmentPointInformation(InstrumentId);
     }
 
     @Override
diff --git a/laboratory-server/src/main/resources/mapper/EquipmentPointMapper.xml b/laboratory-server/src/main/resources/mapper/EquipmentPointMapper.xml
index 427d44c..c64e216 100644
--- a/laboratory-server/src/main/resources/mapper/EquipmentPointMapper.xml
+++ b/laboratory-server/src/main/resources/mapper/EquipmentPointMapper.xml
@@ -6,5 +6,6 @@
         SELECT e.`id`, e.`equipment_point` equipmentPoint, e.`equipment_point_name` equipmentPointName, e.`unit`,u.`name`, DATE_FORMAT(e.`update_time`, '%Y-%m-%d') updateTime, e.`descriptiveness`
         FROM equipment_point e, `user` u
         WHERE e.`user_id` = u.`id`
+        AND e.`instrument_id` = #{InstrumentId}
     </select>
 </mapper>
diff --git a/laboratory-server/src/main/resources/mapper/MetricalInformationMapper.xml b/laboratory-server/src/main/resources/mapper/MetricalInformationMapper.xml
index 3f74553..21de131 100644
--- a/laboratory-server/src/main/resources/mapper/MetricalInformationMapper.xml
+++ b/laboratory-server/src/main/resources/mapper/MetricalInformationMapper.xml
@@ -7,6 +7,7 @@
                m.`uncertainty`, m.`result`, m.`performance_index`, m.`remarks`, m.`file_path`, DATE_FORMAT(m.`create_time`, '%Y-%m-%d') createDate
         FROM metrical_information m, `user` u
         WHERE m.`user_id` = u.`id`
-          AND m.`state` = 1
+        AND m.`state` = 1
+        AND m.`instrument_id` = #{InstrumentId}
     </select>
 </mapper>
diff --git a/pom.xml b/pom.xml
index 3b1776c..0bfe39d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -79,6 +79,12 @@
             <artifactId>mybatis-plus-boot-starter</artifactId>
             <version>${mybatis-plus.version}</version>
         </dependency>
+
+        <!--鍚庣娉ㄩ噴妫�楠屽伐鍏�-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
     </dependencies>
     <dependencyManagement>
         <dependencies>
diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/MaterialController.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/MaterialController.java
index d3ca6fd..853f518 100644
--- a/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/MaterialController.java
+++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/MaterialController.java
@@ -1,7 +1,6 @@
 package com.yuanchu.limslaboratory.controller;
 
-
-import com.yuanchu.limslaboratory.pojo.Material;
+import com.yuanchu.limslaboratory.pojo.dto.AddMaterialDto;
 import com.yuanchu.limslaboratory.service.MaterialService;
 import com.yuanchu.limslaboratory.vo.Result;
 import io.swagger.annotations.Api;
@@ -9,7 +8,11 @@
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -29,24 +32,34 @@
 
     @ApiOperation("娣诲姞鐗╂枡")
     @PostMapping("/add")
-    public Result<?> addMaterialInformation(@RequestBody Material material) {
-        Integer isMaterialSuccess = null;
+    public Result<?> addMaterialInformation(@Validated @RequestBody AddMaterialDto addMaterialDto) {
+        Integer isMaterialSuccess = materialService.addMaterialInformation(addMaterialDto);
         if (isMaterialSuccess == 1) {
-            return Result.success("娣诲姞鐗╂枡銆�"+ material.getName() +"銆戞垚鍔燂紒");
+            return Result.success("娣诲姞鐗╂枡銆�"+ addMaterialDto.getMaterialName() +"銆戞垚鍔燂紒");
         }
-        return Result.fail("娣诲姞鐗╂枡銆�"+ material.getName() +"銆戝け璐ワ紒");
+        return Result.fail("娣诲姞鐗╂枡銆�"+ addMaterialDto.getMaterialName() +"銆戝け璐ワ紒");
     }
 
     @ApiOperation("鏍规嵁鐗╂枡ID鍒犻櫎鐗╂枡")
     @DeleteMapping("/delete")
     @ApiImplicitParams(value = {
-            @ApiImplicitParam(value = "鐗╂枡ID", name = "materialId", dataTypeClass = String.class)
+            @ApiImplicitParam(value = "鐗╂枡ID", name = "materialId", dataTypeClass = Integer.class)
     })
-    public Result<?> deleteMaterialInformation(String materialId) {
+    public Result<?> deleteMaterialInformation(Integer materialId) {
         Integer isDeleteMaterialSuccess = materialService.deleteMaterialInformation(materialId);
         if (isDeleteMaterialSuccess == 1) {
             return Result.success("鍒犻櫎鎴愬姛锛�");
         }
         return Result.fail("鍒犻櫎澶辫触锛�");
     }
+
+    @ApiOperation("渚ц竟鏍忓洓绾у睍寮�")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(value = "鍨嬪彿/鍨嬪彿鍚嶇О", name = "specificationName", dataTypeClass = String.class)
+    })
+    @GetMapping("/list")
+    public Result<?> getFourLevelInformation(String specificationName) {
+        List<Map<String, Object>> fourLevelInformation = materialService.getFourLevelInformation(specificationName);
+        return Result.success(fourLevelInformation);
+    }
 }
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 ac7a176..48d6c63 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,17 +1,17 @@
 package com.yuanchu.limslaboratory.controller;
 
-import com.yuanchu.limslaboratory.pojo.Product;
+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.JackSonUtil;
-import com.yuanchu.limslaboratory.utils.RedisUtil;
 import com.yuanchu.limslaboratory.vo.Result;
 import io.swagger.annotations.*;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 /**
  * <p>
@@ -29,16 +29,28 @@
     @Autowired
     private ProductService productService;
 
-    @ApiOperation("鍒犻櫎娴嬭瘯鏍囧噯妯″潡鏁版嵁")
-    @DeleteMapping("/delete")
+    @ApiOperation("1銆佸垎椤垫煡璇㈤」鐩�")
     @ApiImplicitParams(value = {
-            @ApiImplicitParam(value = "娴嬭瘯鏍囧噯ID", name = "productId", dataTypeClass = String.class)
+            @ApiImplicitParam(name = "pageNo", value = "璧峰椤�", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(name = "pageSize", value = "姣忎竴椤垫暟閲�", dataTypeClass = Integer.class, required = true),
+            @ApiImplicitParam(value = "鍘熸潗鏂欑紪鐮�/鍘熸潗鏂欏悕绉�", name = "productCodeOrName", dataTypeClass = String.class)
     })
-    public Result<?> deleteProductInformation(Integer productId) {
-        Integer isDeleteProduct = productService.deleteProductInformation(productId);
-        if (isDeleteProduct == 1) {
-            return Result.success("鍒犻櫎鎴愬姛锛�");
-        }
-        return Result.fail("鍒犻櫎澶辫触锛�");
+    @GetMapping("/page")
+    public Result<?> pageProductInformation(Integer pageNo, Integer pageSize,String productCodeOrName) {
+        IPage<Map<String, Object>> maps = productService.pageProductInformation(productCodeOrName, new Page<Objects>(pageNo, pageSize));
+        Map<String, Object> map = new HashMap<>();
+        map.put("row", maps.getRecords());
+        map.put("total", maps.getTotal());
+        return Result.success(map);
+    }
+
+    @ApiOperation("2銆佹牴鎹埗绫绘煡瀛愮被")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(value = "鐖剁被鍚嶇О", name = "fatherName", dataTypeClass = String.class)
+    })
+    @GetMapping("/father")
+    public Result<?> pageFatherNameProductInformation(String fatherName) {
+        List<Map<String, Object>> maps = productService.pageFatherNameProductInformation(fatherName);
+        return Result.success(maps);
     }
 }
diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/SpecificationsController.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/SpecificationsController.java
index bfc1627..4be696a 100644
--- a/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/SpecificationsController.java
+++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/SpecificationsController.java
@@ -1,6 +1,8 @@
 package com.yuanchu.limslaboratory.controller;
 
 
+import com.yuanchu.limslaboratory.pojo.dto.AddSpecifications;
+import com.yuanchu.limslaboratory.pojo.dto.AddStandardDto;
 import com.yuanchu.limslaboratory.service.SpecificationsService;
 import com.yuanchu.limslaboratory.vo.Result;
 import io.swagger.annotations.Api;
@@ -8,6 +10,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.*;
 
 /**
@@ -26,6 +29,16 @@
     @Autowired
     private SpecificationsService specificationsService;
 
+    @ApiOperation("娣诲姞鐗╂枡")
+    @PostMapping("/add")
+    public Result<?> addSpecificationsInformation(@Validated @RequestBody AddSpecifications addSpecifications) {
+        Integer isMaterialSuccess = specificationsService.addSpecificationsInformation(addSpecifications);
+        if (isMaterialSuccess == 1) {
+            return Result.success("娣诲姞鐗╂枡銆�"+ addSpecifications.getSpecificationsName() +"銆戞垚鍔燂紒");
+        }
+        return Result.fail("娣诲姞鐗╂枡銆�"+ addSpecifications.getSpecificationsName() +"銆戝け璐ワ紒");
+    }
+
     @ApiOperation("鍒犻櫎浜у搧瑙勬牸")
     @ApiImplicitParams(value = {
             @ApiImplicitParam(name = "specificationsId", value = "瑙勬牸Id", dataTypeClass = Integer.class, required = true)
diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/StandardController.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/StandardController.java
index 37ab29e..665f006 100644
--- a/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/StandardController.java
+++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/controller/StandardController.java
@@ -1,11 +1,12 @@
 package com.yuanchu.limslaboratory.controller;
 
-
+import com.yuanchu.limslaboratory.pojo.dto.AddStandardDto;
 import com.yuanchu.limslaboratory.service.StandardService;
 import com.yuanchu.limslaboratory.vo.Result;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 /**
@@ -24,11 +25,21 @@
     @Autowired
     private StandardService standardService;
 
+    @ApiOperation("娣诲姞鐗╂枡")
+    @PostMapping("/add")
+    public Result<?> addStandardInformation(@Validated @RequestBody AddStandardDto addStandardDto) {
+        Integer isMaterialSuccess = standardService.addStandardInformation(addStandardDto);
+        if (isMaterialSuccess == 1) {
+            return Result.success("娣诲姞鐗╂枡銆�"+ addStandardDto.getStandardName() +"銆戞垚鍔燂紒");
+        }
+        return Result.fail("娣诲姞鐗╂枡銆�"+ addStandardDto.getStandardName() +"銆戝け璐ワ紒");
+    }
+
     @ApiOperation("鏍规嵁ID鍒犻櫎鏁版嵁")
     @DeleteMapping("/delete")
-    public Result<?> deleteStandardsInformation(String standardsId) {
-        Integer isDeleteSuccess = standardService.deleteStandardsInformation(standardsId);
-        if (isDeleteSuccess == 1){
+    public Result<?> deleteStandardsInformation(Integer standardsId) {
+        Integer isDeleteMaterialSuccess = standardService.deleteStandardInformation(standardsId);
+        if (isDeleteMaterialSuccess == 1) {
             return Result.success("鍒犻櫎鎴愬姛锛�");
         }
         return Result.fail("鍒犻櫎澶辫触锛�");
diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/MaterialMapper.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/MaterialMapper.java
index 63a2e7e..69ac1ec 100644
--- a/standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/MaterialMapper.java
+++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/mapper/MaterialMapper.java
@@ -17,7 +17,7 @@
 public interface MaterialMapper extends BaseMapper<Material> {
 
     //鏌ヨ鐗╂枡淇℃伅
-    List<Material> selectMaterialLimit(int num1,int num2);
+    List<Material> selectMaterialLimit(int num1,int num2, int type);
 
     //鏍规嵁鐗╂枡id鏌ヨ鐗╂枡淇℃伅
     Map selectMaterialById(String materialId);
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 3a02fc6..4536735 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
@@ -1,11 +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.Product;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 import java.util.List;
 
 import java.util.Map;
+import java.util.Objects;
 
 /**
  * <p>
@@ -19,5 +22,7 @@
 
     List<Product> selectProductByMaterialId(String materialId);
 
-    Map<String, Object> getProductInformation(Integer productId);
+    IPage<Map<String, Object>> pageProductInformation(String productCodeOrName, Page<Objects> page);
+
+    Map<String, Object> selectOneChildren(Object father);
 }
diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Material.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Material.java
index 9eee171..f76bc42 100644
--- a/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Material.java
+++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Material.java
@@ -11,6 +11,7 @@
 import lombok.Builder;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
 
 /**
  * <p>
@@ -20,6 +21,7 @@
  * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
  * @since 2023-07-17
  */
+@Accessors(chain = true)
 @Data
 @EqualsAndHashCode(callSuper = false)
 @ApiModel(value="Material瀵硅薄", description="")
@@ -29,9 +31,9 @@
 
     @ApiModelProperty(value = "鐗╂枡id", hidden = true)
     @TableId(value = "id", type = IdType.AUTO)
-    private String id;
+    private Integer id;
 
-    @ApiModelProperty(value = "鐗╂枡缂栫爜", example = "152453211563212", required = true)
+    @ApiModelProperty(value = "鐗╂枡缂栫爜", hidden = true)
     private String code;
 
     @ApiModelProperty(value = "鐗╂枡鍚嶇О", example = "鐭冲ご", required = true)
diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Specifications.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Specifications.java
index 023a593..6e70cdf 100644
--- a/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Specifications.java
+++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Specifications.java
@@ -12,6 +12,7 @@
 import io.swagger.models.auth.In;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
 
 /**
  * <p>
@@ -22,6 +23,7 @@
  * @since 2023-07-11
  */
 @Data
+@Accessors(chain = true)
 @EqualsAndHashCode(callSuper = false)
 @ApiModel(value="Specifications瀵硅薄", description="瑙勬牸")
 public class Specifications implements Serializable {
diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Standard.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Standard.java
index 4f25ea6..5671a73 100644
--- a/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Standard.java
+++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/Standard.java
@@ -10,6 +10,7 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
 
 /**
  * <p>
@@ -20,6 +21,7 @@
  * @since 2023-07-11
  */
 @Data
+@Accessors(chain = true)
 @EqualsAndHashCode(callSuper = false)
 @ApiModel(value="Standards瀵硅薄", description="鏍囧噯")
 public class Standard implements Serializable {
diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddMaterialDto.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddMaterialDto.java
new file mode 100644
index 0000000..d3ce5ae
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddMaterialDto.java
@@ -0,0 +1,31 @@
+package com.yuanchu.limslaboratory.pojo.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="AddMaterialDto瀵硅薄", description="")
+public class AddMaterialDto {
+
+    @NotNull(message = "鐗╂枡绫诲瀷涓嶈兘涓虹┖锛�")
+    @ApiModelProperty(value = "0锛氬師鏉愭枡锛�1锛氭垚鍝侊紱2锛氬崐鎴愬搧", example = "1", required = true)
+    private Integer type;
+
+    @NotBlank(message = "鐗╂枡鍚嶇О涓嶈兘涓虹┖锛�")
+    @ApiModelProperty(value = "鐗╂枡鍚嶇О", example = "鐭冲ご", required = true)
+    private String materialName;
+
+    @NotBlank(message = "鏍囧噯鍚嶇О涓嶈兘涓虹┖锛�")
+    @ApiModelProperty(value = "鏍囧噯鍚嶇О", example = "鍏夌氦", required = true)
+    private String standardName;
+
+    @NotBlank(message = "浜у搧瑙勬牸鍚嶇О涓嶈兘涓虹┖锛�")
+    @ApiModelProperty(value = "浜у搧瑙勬牸鍚嶇О", example = "AB", required = true)
+    private String specificationsName;
+}
diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddSpecifications.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddSpecifications.java
new file mode 100644
index 0000000..413c9bd
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddSpecifications.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 lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="AddSpecifications瀵硅薄", description="")
+public class AddSpecifications {
+
+    @NotNull(message = "鏍囧噯ID涓嶈兘涓虹┖锛�")
+    @ApiModelProperty(value = "鏍囧噯id", example = "1", required = true)
+    private Integer standardId;
+
+    @NotBlank(message = "浜у搧瑙勬牸鍚嶇О涓嶈兘涓虹┖锛�")
+    @ApiModelProperty(value = "浜у搧瑙勬牸鍚嶇О", example = "AB", required = true)
+    private String specificationsName;
+}
diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddStandardDto.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddStandardDto.java
new file mode 100644
index 0000000..2fe0eb6
--- /dev/null
+++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/AddStandardDto.java
@@ -0,0 +1,28 @@
+package com.yuanchu.limslaboratory.pojo.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="AddStandardDto瀵硅薄", description="")
+public class AddStandardDto {
+
+    @NotNull(message = "鐗╂枡ID涓嶈兘涓虹┖锛�")
+    @ApiModelProperty(value = "鐗╂枡id", example = "1", required = true)
+    private Integer materialId;
+
+    @NotBlank(message = "鏍囧噯鍚嶇О涓嶈兘涓虹┖锛�")
+    @ApiModelProperty(value = "鏍囧噯鍚嶇О", example = "鍏夌氦", required = true)
+    private String standardName;
+
+    @NotBlank(message = "浜у搧瑙勬牸鍚嶇О涓嶈兘涓虹┖锛�")
+    @ApiModelProperty(value = "浜у搧瑙勬牸鍚嶇О", example = "AB", required = true)
+    private String specificationsName;
+
+}
diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/service/MaterialService.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/MaterialService.java
index 28e5a43..7e79daf 100644
--- a/standard-server/src/main/java/com/yuanchu/limslaboratory/service/MaterialService.java
+++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/MaterialService.java
@@ -2,6 +2,8 @@
 
 import com.yuanchu.limslaboratory.pojo.Material;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yuanchu.limslaboratory.pojo.dto.AddMaterialDto;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 import java.util.Map;
@@ -16,7 +18,7 @@
  */
 public interface MaterialService extends IService<Material> {
 
-    List<Material> selectMaterialLimit(int pageSize,int countSize);
+    List<Material> selectMaterialLimit(int pageSize,int countSize, int type);
 
     Map selectMaterialById(String materialId);
 
@@ -25,12 +27,17 @@
      * @param materialId
      * @return
      */
-    Integer deleteMaterialInformation(String materialId);
+    @Transactional(rollbackFor = Exception.class)
+    Integer deleteMaterialInformation(Integer materialId);
 
     /**
-     * 鍒犻櫎绛変簬SpecificationsId鐨勭墿鏂欐暟鎹�
-     * @param deleteSpecificationsId
-     * @return
+     * 涓夌骇娣诲姞鍙傛暟
      */
-    List<String> specificationsIdDeleteMaterial(List<Integer> deleteSpecificationsId);
+    @Transactional(rollbackFor = Exception.class)
+    Integer addMaterialInformation(AddMaterialDto addMaterialDto);
+
+    /**
+     * 鍥涚骇鍒嗗眰鏄剧ず
+     */
+    List<Map<String, Object>> getFourLevelInformation(String specificationName);
 }
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 9940876..d6b2662 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,10 +1,13 @@
 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;
 
 
 /**
@@ -16,7 +19,9 @@
  * @since 2023-07-17
  */
 public interface ProductService extends IService<Product> {
-    Integer deleteProductInformation(Integer productId);
+    void deleteProductInformation(List<Integer> SpecificationsId);
 
-    void MaterialIdDeleteProduct(List<String> deleteMaterialId);
+    IPage<Map<String, Object>> pageProductInformation(String productCodeOrName, Page<Objects> page);
+
+    List<Map<String, Object>> pageFatherNameProductInformation(String fatherName);
 }
diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/service/SpecificationsService.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/SpecificationsService.java
index 9111ec9..5da007f 100644
--- a/standard-server/src/main/java/com/yuanchu/limslaboratory/service/SpecificationsService.java
+++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/SpecificationsService.java
@@ -1,7 +1,11 @@
 package com.yuanchu.limslaboratory.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.yuanchu.limslaboratory.pojo.Specifications;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yuanchu.limslaboratory.pojo.Standard;
+import com.yuanchu.limslaboratory.pojo.dto.AddSpecifications;
+import com.yuanchu.limslaboratory.pojo.dto.AddStandardDto;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
@@ -23,5 +27,7 @@
     @Transactional(rollbackFor = Exception.class)
     Integer deleteSpecifications(Integer specificationsId);
 
-    List<Integer> SerialNumberIdDeleteSpecifications(List<String> deleteSerialNumberId);
+    List<Integer> StandardIdDeleteSpecifications(List<Integer> deleteStandard);
+
+    Integer addSpecificationsInformation(AddSpecifications addStandardDto);
 }
diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/service/StandardService.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/StandardService.java
index 643d7cc..ef36a18 100644
--- a/standard-server/src/main/java/com/yuanchu/limslaboratory/service/StandardService.java
+++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/StandardService.java
@@ -2,7 +2,11 @@
 
 import com.yuanchu.limslaboratory.pojo.Standard;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yuanchu.limslaboratory.pojo.dto.AddStandardDto;
+import io.swagger.models.auth.In;
 import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
 
 /**
  * <p>
@@ -16,9 +20,13 @@
 
     /**
      * 鏍规嵁鏍囧噯Id鍒犻櫎鏁版嵁
-     * @param standardsId
+     * @param materialId
      * @return
      */
+    List<Integer> deleteStandardsInformation(Integer materialId);
+
     @Transactional(rollbackFor = Exception.class)
-    Integer deleteStandardsInformation(String standardsId);
+    Integer deleteStandardInformation(Integer standardsId);
+
+    Integer addStandardInformation(AddStandardDto addStandardDto);
 }
diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MaterialServiceImpl.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MaterialServiceImpl.java
index a373c2a..feb1a9e 100644
--- a/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MaterialServiceImpl.java
+++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MaterialServiceImpl.java
@@ -2,16 +2,23 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.yuanchu.limslaboratory.pojo.Material;
 import com.yuanchu.limslaboratory.mapper.MaterialMapper;
+import com.yuanchu.limslaboratory.pojo.Specifications;
+import com.yuanchu.limslaboratory.pojo.Standard;
+import com.yuanchu.limslaboratory.pojo.dto.AddMaterialDto;
 import com.yuanchu.limslaboratory.service.MaterialService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yuanchu.limslaboratory.service.ProductService;
+import com.yuanchu.limslaboratory.service.SpecificationsService;
+import com.yuanchu.limslaboratory.service.StandardService;
+import com.yuanchu.limslaboratory.utils.MyUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -27,12 +34,21 @@
 public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, Material> implements MaterialService {
 
     @Resource
-    MaterialMapper materialMapper;
+    private MaterialMapper materialMapper;
+
+    @Autowired
+    private StandardService standardService;
+
+    @Autowired
+    private SpecificationsService specificationsService;
+
+    @Autowired
+    private ProductService productService;
 
     //鏌ヨ鐗╂枡淇℃伅
     @Override
-    public List<Material> selectMaterialLimit(int pageSize, int countSize) {
-        return materialMapper.selectMaterialLimit((pageSize - 1) * countSize,pageSize * countSize);
+    public List<Material> selectMaterialLimit(int pageSize, int countSize, int type) {
+        return materialMapper.selectMaterialLimit((pageSize - 1) * countSize,pageSize * countSize, type);
     }
 
     //鏍规嵁鐗╂枡id鏌ヨ鐗╂枡淇℃伅
@@ -41,39 +57,92 @@
         return materialMapper.selectMaterialById(materialId);
     }
 
-    @Autowired
-    private ProductService productService;
-
     @Override
-    public Integer deleteMaterialInformation(String materialId) {
+    public Integer deleteMaterialInformation(Integer materialId) {
         LambdaUpdateWrapper<Material> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.eq(Material::getId, materialId);
         updateWrapper.set(Material::getState, 0);
-        List<String> list = new ArrayList<>();
-        list.add(materialId);
         int isDeleteSuccess = materialMapper.update(new Material(), updateWrapper);
         if (isDeleteSuccess == 1){
-            productService.MaterialIdDeleteProduct(list);
+            List<Integer> isDeleteStandard = standardService.deleteStandardsInformation(materialId);
+            if (!ObjectUtils.isEmpty(isDeleteStandard)){
+                List<Integer> idDeleteSpecifications = specificationsService.StandardIdDeleteSpecifications(isDeleteStandard);
+                if (!ObjectUtils.isEmpty(idDeleteSpecifications)){
+                    productService.deleteProductInformation(idDeleteSpecifications);
+                }
+            }
             return 1;
         }
         return 0;
     }
 
     @Override
-    public List<String> specificationsIdDeleteMaterial(List<Integer> deleteSpecificationsId) {
-        List<String> list = new ArrayList<>();
-        for (Integer serialNumberId:deleteSpecificationsId){
-            LambdaQueryWrapper<Material> wrapper = new LambdaQueryWrapper<>();
-            wrapper.select(Material::getId);
-            List<Material> maps1 = materialMapper.selectList(wrapper);
-            for (Material material:maps1){
-                LambdaUpdateWrapper<Material> updateWrapper = new LambdaUpdateWrapper<>();
-                updateWrapper.eq(Material::getId, material.getId());
-                updateWrapper.set(Material::getState, 0);
-                materialMapper.update(new Material(), updateWrapper);
-                list.add(material.getId());
+    public Integer addMaterialInformation(AddMaterialDto addMaterialDto) {
+        Material material = new Material()
+                .setCode("BZ" + IdWorker.getIdStr())
+                .setName(addMaterialDto.getMaterialName())
+                .setType(addMaterialDto.getType());
+        int isInsertSuccess = materialMapper.insert(material);
+        if (isInsertSuccess > 0){
+            Standard standard = new Standard()
+                    .setMaterialId(material.getId())
+                    .setName(addMaterialDto.getStandardName());
+            boolean save = standardService.save(standard);
+            if (save){
+                Specifications specifications = new Specifications()
+                        .setName(addMaterialDto.getSpecificationsName())
+                        .setStandardId(standard.getId());
+                boolean save1 = specificationsService.save(specifications);
+                if (save1)
+                    return 1;
             }
         }
-        return list;
+        return 0;
+    }
+
+    @Override
+    public List<Map<String, Object>> getFourLevelInformation(String specificationName) {
+        LambdaQueryWrapper<Material> typeWrapper = new LambdaQueryWrapper<>();
+        typeWrapper.groupBy(Material::getType);
+        typeWrapper.select(Material::getType);
+        List<Map<String, Object>> typeMaps = materialMapper.selectMaps(typeWrapper);
+        for (Map<String, Object> typeMap : typeMaps){
+            LambdaQueryWrapper<Material> materialWrapper = new LambdaQueryWrapper<>();
+            materialWrapper.eq(Material::getType, typeMap.get("type"));
+            materialWrapper.select(Material::getId, Material::getName);
+            List<Map<String, Object>> materialMaps = materialMapper.selectMaps(materialWrapper);
+            if (!ObjectUtils.isEmpty(materialMaps)){
+                for (Map<String, Object> materialMap : materialMaps){
+                    LambdaQueryWrapper<Standard> wrapper = new LambdaQueryWrapper<>();
+                    wrapper.eq(Standard::getMaterialId, materialMap.get("id"));
+                    wrapper.select(Standard::getId, Standard::getName);
+                    List<Map<String, Object>> standardMaps = standardService.listMaps(wrapper);
+                    if (!ObjectUtils.isEmpty(standardMaps)){
+                        for (Map<String, Object> standardMap : standardMaps){
+                            LambdaQueryWrapper<Specifications> specificationWrapper = new LambdaQueryWrapper<>();
+                            MyUtil.PrintLog(standardMap.get("id").toString());
+                            specificationWrapper.eq(Specifications::getStandardId, standardMap.get("id"));
+                            if (!ObjectUtils.isEmpty(specificationName)){
+                                specificationWrapper.eq(Specifications::getName, specificationName);
+                            }
+                            specificationWrapper.select(Specifications::getId, Specifications::getName);
+                            List<Map<String, Object>> specificationsMaps = specificationsService.listMaps(specificationWrapper);
+                            if (!ObjectUtils.isEmpty(specificationsMaps)){
+                                standardMap.put("children", specificationsMaps);
+                            } else {
+                                standardMap.put("children", null);
+                            }
+                        }
+                        materialMap.put("children", standardMaps);
+                    } else {
+                        materialMap.put("children", null);
+                    }
+                }
+                typeMap.put("children", materialMaps);
+            } else {
+                typeMap.put("children", null);
+            }
+        }
+        return typeMaps;
     }
 }
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 45dee2f..6cbc593 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
@@ -2,10 +2,13 @@
 
 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.pojo.Product;
 import com.yuanchu.limslaboratory.mapper.ProductMapper;
 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;
@@ -15,6 +18,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 /**
  * <p>
@@ -31,20 +35,40 @@
     private ProductMapper productMapper;
 
     @Override
-    public Integer deleteProductInformation(Integer productId) {
-        LambdaUpdateWrapper<Product> wrapper = new LambdaUpdateWrapper<>();
-        wrapper.eq(Product::getId, productId);
-        wrapper.set(Product::getState, 0);
-        return productMapper.update(new Product(), wrapper);
-    }
-
-    @Override
-    public void MaterialIdDeleteProduct(List<String> deleteMaterialId) {
-        for (String materialId : deleteMaterialId){
+    public void deleteProductInformation(List<Integer> SpecificationsId) {
+        for (Integer materialId : SpecificationsId){
             LambdaUpdateWrapper<Product> wrapper = new LambdaUpdateWrapper<>();
-            wrapper.eq(Product::getId, materialId);
+            wrapper.eq(Product::getSpecifications_id, materialId);
             wrapper.set(Product::getState, 0);
             productMapper.update(new Product(), wrapper);
         }
     }
+
+    @Override
+    public IPage<Map<String, Object>> pageProductInformation(String productCodeOrName, Page<Objects> page) {
+        IPage<Map<String, Object>> iPage = productMapper.pageProductInformation(productCodeOrName, page);
+        List<Map<String, Object>> maps = iPage.getRecords();
+        MyUtil.PrintLog(maps.toString());
+        maps.forEach(map -> {
+            int num = Integer.parseInt(map.get("num").toString());
+            boolean children = false;
+            if (num > 1){
+                children = true;
+            } else {
+                Map<String, Object> product = productMapper.selectOneChildren(map.get("father"));
+                map.putAll(product);
+            }
+            map.put("children", children);
+            map.remove("num");
+        });
+        return iPage;
+    }
+
+    @Override
+    public List<Map<String, Object>> pageFatherNameProductInformation(String fatherName) {
+        LambdaQueryWrapper<Product> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(Product::getFather, fatherName);
+        wrapper.select(Product::getId, Product::getName, Product::getUnit, Product::getRequired, Product::getInternal);
+        return productMapper.selectMaps(wrapper);
+    }
 }
diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/SpecificationsServiceImpl.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/SpecificationsServiceImpl.java
index 0730bc4..93be8b1 100644
--- a/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/SpecificationsServiceImpl.java
+++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/SpecificationsServiceImpl.java
@@ -4,9 +4,12 @@
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.yuanchu.limslaboratory.pojo.Specifications;
 import com.yuanchu.limslaboratory.mapper.SpecificationsMapper;
+import com.yuanchu.limslaboratory.pojo.dto.AddSpecifications;
+import com.yuanchu.limslaboratory.pojo.dto.AddStandardDto;
 import com.yuanchu.limslaboratory.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
@@ -29,9 +32,6 @@
     private SpecificationsMapper specificationsMapper;
 
     @Autowired
-    private MaterialService materialService;
-
-    @Autowired
     private ProductService productService;
 
     @Override
@@ -43,21 +43,18 @@
         list.add(specificationsId);
         int isDeleteSuccess = specificationsMapper.update(new Specifications(), updateWrapper);
         if (isDeleteSuccess == 1){
-            List<String> deleteMaterialId = materialService.specificationsIdDeleteMaterial(list);
-            if (!ObjectUtils.isEmpty(deleteMaterialId)){
-                productService.MaterialIdDeleteProduct(deleteMaterialId);
-            }
+            productService.deleteProductInformation(list);
             return 1;
         }
         return 0;
     }
 
     @Override
-    public List<Integer> SerialNumberIdDeleteSpecifications(List<String> deleteSerialNumberId) {
+    public List<Integer> StandardIdDeleteSpecifications(List<Integer> deleteStandard) {
         List<Integer> list = new ArrayList<>();
-        for (String serialNumberId:deleteSerialNumberId){
+        for (Integer standard : deleteStandard){
             LambdaQueryWrapper<Specifications> wrapper = new LambdaQueryWrapper<>();
-            wrapper.eq(Specifications::getId, serialNumberId);
+            wrapper.eq(Specifications::getStandardId, standard);
             wrapper.select(Specifications::getId);
             List<Specifications> maps1 = specificationsMapper.selectList(wrapper);
             for (Specifications specifications:maps1){
@@ -70,4 +67,12 @@
         }
         return list;
     }
+
+    @Override
+    public Integer addSpecificationsInformation(AddSpecifications addStandardDto) {
+        Specifications specifications = new Specifications()
+                .setName(addStandardDto.getSpecificationsName())
+                .setStandardId(addStandardDto.getStandardId());
+        return specificationsMapper.insert(specifications);
+    }
 }
diff --git a/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/StandardServiceImpl.java b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/StandardServiceImpl.java
index 5aed855..bfc9618 100644
--- a/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/StandardServiceImpl.java
+++ b/standard-server/src/main/java/com/yuanchu/limslaboratory/service/impl/StandardServiceImpl.java
@@ -1,17 +1,23 @@
 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.toolkit.ObjectUtils;
 import com.yuanchu.limslaboratory.mapper.StandardMapper;
+import com.yuanchu.limslaboratory.pojo.Material;
+import com.yuanchu.limslaboratory.pojo.Specifications;
 import com.yuanchu.limslaboratory.pojo.Standard;
+import com.yuanchu.limslaboratory.pojo.dto.AddStandardDto;
 import com.yuanchu.limslaboratory.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 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>
@@ -27,36 +33,63 @@
     @Resource
     private StandardMapper standardMapper;
 
-    @Autowired
-    private UserService userService;
-
     @Lazy
     @Autowired
     private SpecificationsService specificationsService;
-
-    @Autowired
-    private MaterialService materialService;
 
     @Autowired
     private ProductService productService;
 
 
     @Override
-    public Integer deleteStandardsInformation(String standardsId) {
+    public List<Integer> deleteStandardsInformation(Integer materialId) {
+        LambdaQueryWrapper<Standard> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(Standard::getMaterialId, materialId);
+        wrapper.select(Standard::getId);
+        List<Integer> list = new ArrayList<>();
+        List<Standard> standards = standardMapper.selectList(wrapper);
+        for (Standard standard : standards){
+            LambdaUpdateWrapper<Standard> updateWrapper = new LambdaUpdateWrapper<>();
+            updateWrapper.eq(Standard::getMaterialId, materialId);
+            updateWrapper.set(Standard::getState, 0);
+            standardMapper.update(new Standard(), updateWrapper);
+            list.add(standard.getId());
+        }
+        return list;
+    }
+
+    @Override
+    public Integer deleteStandardInformation(Integer standardsId) {
         LambdaUpdateWrapper<Standard> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.eq(Standard::getId, standardsId);
         updateWrapper.set(Standard::getState, 0);
+        List<Integer> list = new ArrayList<>();
         int isDeleteSuccess = standardMapper.update(new Standard(), updateWrapper);
         if (isDeleteSuccess == 1){
-            List<Integer> deleteSpecificationsId = specificationsService.SerialNumberIdDeleteSpecifications(null);
-            if (!ObjectUtils.isEmpty(deleteSpecificationsId)){
-                List<String> deleteMaterialId = materialService.specificationsIdDeleteMaterial(deleteSpecificationsId);
-                if (!ObjectUtils.isEmpty(deleteMaterialId)){
-                    productService.MaterialIdDeleteProduct(deleteMaterialId);
-                }
+            list.add(standardsId);
+            List<Integer> idDeleteSpecifications = specificationsService.StandardIdDeleteSpecifications(list);
+            if (!ObjectUtils.isEmpty(idDeleteSpecifications)){
+                productService.deleteProductInformation(idDeleteSpecifications);
             }
             return 1;
         }
         return 0;
     }
+
+    @Override
+    public Integer addStandardInformation(AddStandardDto addStandardDto) {
+        Standard standard = new Standard()
+                .setMaterialId(addStandardDto.getMaterialId())
+                .setName(addStandardDto.getStandardName());
+        int save = standardMapper.insert(standard);
+        if (save == 1){
+            Specifications specifications = new Specifications()
+                    .setName(addStandardDto.getSpecificationsName())
+                    .setStandardId(standard.getId());
+            boolean save1 = specificationsService.save(specifications);
+            if (save1)
+                return 1;
+        }
+        return 0;
+    }
 }
diff --git a/standard-server/src/main/resources/mapper/MaterialMapper.xml b/standard-server/src/main/resources/mapper/MaterialMapper.xml
index e2cb725..d3281fd 100644
--- a/standard-server/src/main/resources/mapper/MaterialMapper.xml
+++ b/standard-server/src/main/resources/mapper/MaterialMapper.xml
@@ -6,6 +6,7 @@
         select id, name
         from material
         where state = 1
+        and type = #{type}
         order by create_time desc
             limit #{num1},#{num2}
     </select>
diff --git a/standard-server/src/main/resources/mapper/ProductMapper.xml b/standard-server/src/main/resources/mapper/ProductMapper.xml
index 4868b93..7596baa 100644
--- a/standard-server/src/main/resources/mapper/ProductMapper.xml
+++ b/standard-server/src/main/resources/mapper/ProductMapper.xml
@@ -2,4 +2,18 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.yuanchu.limslaboratory.mapper.ProductMapper">
 
+    <select id="pageProductInformation" resultType="map">
+        SELECT COUNT(1) num, p.`father`
+        FROM product p
+        <if test="productCodeOrName != null and productCodeOrName != ''">
+            WHERE p.`father` = #{productCodeOrName}
+        </if>
+        GROUP BY p.`father`
+    </select>
+
+    <select id="selectOneChildren" resultType="map">
+        SELECT p.`id`, p.`unit`, p.`required`, p.`internal`
+        FROM product p
+        WHERE p.`father` = #{father}
+    </select>
 </mapper>
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 3b9df69..8291c99 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
@@ -7,13 +7,9 @@
 import com.yuanchu.limslaboratory.vo.NewPersonnelVo;
 import com.yuanchu.limslaboratory.vo.PagePersonnelVo;
 import com.yuanchu.limslaboratory.vo.UpdatePersonnelVo;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.io.Serializable;
 
 import java.util.List;
 import java.util.Map;
-import java.util.Objects;
 
 /**
  * <p>
@@ -80,4 +76,9 @@
      * @return
      */
     List<User> selectUser();
+
+    /**
+     * 鑾峰彇鎵�鏈夌敤鎴风殑鍚嶇О涓嶪d
+     */
+    List<Map<String, Object>> getUserNameAndId();
 }
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 eb7b820..7b87483 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
@@ -12,7 +12,6 @@
 import com.yuanchu.limslaboratory.vo.NewPersonnelVo;
 import com.yuanchu.limslaboratory.vo.PagePersonnelVo;
 import com.yuanchu.limslaboratory.vo.UpdatePersonnelVo;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
@@ -80,6 +79,13 @@
     }
 
     @Override
+    public List<Map<String, Object>> getUserNameAndId() {
+        LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
+        wrapper.select(User::getId, User::getName);
+        return userMapper.selectMaps(wrapper);
+    }
+
+    @Override
     public Map<String, String> selectUserByUserId(int userId) {
         return userMapper.selectUserByUserId(userId);
     }

--
Gitblit v1.9.3