From 99968f83982943669af3829ea6bc3bbe745cada4 Mon Sep 17 00:00:00 2001
From: zhangfeng <1603559716@qq.com>
Date: 星期一, 21 十一月 2022 08:41:48 +0800
Subject: [PATCH] 安全物资和设备管理相关rpc接口

---
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialInfo.java                                      |   24 
 equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/model/dto/resp/SafeMaterialClassifyStockRPCRespDto.java   |   40 +
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/repository/SafeMaterialClassifyInfoRepository.java                |    8 
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/SafeMaterialClassifyStockDto.java                  |   40 +
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/SafeMaterialClassifyInfoService.java          |   13 
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/controller/SafeMaterialDetailController.java                      |   21 
 equipment/equipment-service/src/main/resources/config/mapper/equipment/SafeMaterialInfoMapper.xml                                           |   33 
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/MaterialClassifyService.java                              |   12 
 equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/model/dto/req/MaterialSpwRPCReq.java                      |   27 
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/SafeMaterialAddReq.java                             |   40 
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialClassifyInfo.java                              |   12 
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/SafeMaterialModReq.java                             |   34 
 equipment/equipment-service/src/main/resources/config/mapper/equipment/SafeMaterialClassifyInfoMapper.xml                                   |   40 +
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/MaterialClassificationDto.java                     |   10 
 equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/model/dto/resp/SafeMaterialClassifyRPCRespDto.java        |   44 +
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialDetailInfo.java                                |   24 
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/SafeMaterialClassifyAddReq.java                     |   15 
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/SafeMaterialDetailDto.java                         |   14 
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialClassifyStockDO.java                           |   44 +
 equipment/equipment-service/src/main/resources/config/mapper/equipment/SafeMaterialDetailInfoMapper.xml                                     |   94 ++
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialDetailDO.java                                  |   49 +
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/impl/MaterialClassifyServiceImpl.java                     |  152 +++
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/MaterialDepartmentDto.java                         |   10 
 equipment/equipment-rpc-provider/src/main/java/com/gkhy/safePlatform/equipment/rpc/provider/EquipmentRpcProvider.java                       |  200 +++++
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialDetailInfoDO.java                              |   29 
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/SafeRfidMaterialDetailDto.java                     |   52 +
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/impl/SafeMaterialClassifyInfoServiceImpl.java |   51 +
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/repository/SafeMaterialInfoRepository.java                        |    3 
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/enums/EquipmentResultCodes.java                                   |    4 
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/SafeMaterialDto.java                               |   42 
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/SafeMaterialDetailInfoService.java            |   19 
 equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/EquipmentRpcAPi.java                                      |   51 +
 equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/model/dto/req/MaterialSpwDeliveryRPCReq.java              |   35 +
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/impl/SafeMaterialDetailServiceImpl.java                   |  189 ++++
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/controller/MaterialClassifyController.java                        |    7 
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialClassifyDO.java                                |   38 
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/impl/SafeMaterialInfoServiceImpl.java         |   32 
 equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/model/dto/resp/SafeRfidMaterialDetailRPCRespDto.java      |   52 +
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialDO.java                                        |   36 
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/MterialRandomDeliveryReq.java                       |   12 
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/SafeMaterialInfoService.java                  |    5 
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/impl/SafeMaterialDetailInfoServiceImpl.java   |   53 +
 equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/model/dto/resp/SafeMaterialBsClassifyRPCRespDto.java      |   40 +
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/SafeMaterialQuery.java                              |   12 
 equipment/equipment-rpc-api/pom.xml                                                                                                         |    9 
 /dev/null                                                                                                                                   |    8 
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialDetailCountDO.java                             |   10 
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/impl/SafeMaterialServiceImpl.java                         |  134 +--
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/SafeMaterialClassifyDto.java                       |   22 
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/SafeMaterialDetailService.java                            |    6 
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/repository/SafeMaterialDetailInfoRepository.java                  |   17 
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/MaterialSpwDeliveryReq.java                         |   39 +
 equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/MaterialSpwReq.java                                 |   29 
 53 files changed, 1,716 insertions(+), 320 deletions(-)

diff --git a/equipment/equipment-rpc-api/pom.xml b/equipment/equipment-rpc-api/pom.xml
index 5fec604..8e76508 100644
--- a/equipment/equipment-rpc-api/pom.xml
+++ b/equipment/equipment-rpc-api/pom.xml
@@ -9,7 +9,14 @@
     </parent>-->
     <modelVersion>4.0.0</modelVersion>
     <packaging>jar</packaging>
-
+    <dependencies>
+        <dependency>
+            <groupId>com.gkhy.safePlatfrom</groupId>
+            <artifactId>commons</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
     <groupId>com.gkhy.safePlatfrom</groupId>
     <artifactId>equipment-rpc-api</artifactId>
     <version>1.0-SNAPSHOT</version>
diff --git a/equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/EquipmentDemoRpcAPi.java b/equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/EquipmentDemoRpcAPi.java
deleted file mode 100644
index 7d472af..0000000
--- a/equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/EquipmentDemoRpcAPi.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.gkhy.safePlatform.equipment.rpc.api;
-
-import com.gkhy.safePlatform.equipment.rpc.api.model.User;
-
-public interface EquipmentDemoRpcAPi {
-
-    String sayHello(User user);
-}
diff --git a/equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/EquipmentRpcAPi.java b/equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/EquipmentRpcAPi.java
new file mode 100644
index 0000000..26d5506
--- /dev/null
+++ b/equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/EquipmentRpcAPi.java
@@ -0,0 +1,51 @@
+package com.gkhy.safePlatform.equipment.rpc.api;
+
+import com.gkhy.safePlatform.commons.vo.ResultVO;
+import com.gkhy.safePlatform.equipment.rpc.api.model.dto.req.MaterialSpwRPCReq;
+import com.gkhy.safePlatform.equipment.rpc.api.model.dto.resp.SafeMaterialBsClassifyRPCRespDto;
+import com.gkhy.safePlatform.equipment.rpc.api.model.dto.resp.SafeMaterialClassifyRPCRespDto;
+import com.gkhy.safePlatform.equipment.rpc.api.model.dto.resp.SafeMaterialClassifyStockRPCRespDto;
+import com.gkhy.safePlatform.equipment.rpc.api.model.dto.resp.SafeRfidMaterialDetailRPCRespDto;
+
+import java.util.List;
+
+public interface EquipmentRpcAPi {
+    /**
+     * 物资类型分类
+     */
+    ResultVO<List<SafeMaterialClassifyRPCRespDto>> getMaterialClassifyList();
+
+    /**
+     * 根据小类溯源到父类信息
+     * @param smallClassifyIds
+     * @return
+     */
+
+    ResultVO<List<SafeMaterialBsClassifyRPCRespDto>> getTraceabilityClassifyList(List<Long> smallClassifyIds);
+    /**
+     * 根据小类溯源到父类信息 列表
+     * @param smallClassifyId
+     * @return
+     */
+
+    ResultVO<SafeMaterialBsClassifyRPCRespDto> getBigAndSmallClassifyInfo(Long smallClassifyId);
+
+    /**
+     * 根据小类ids查询物资种类
+     */
+    ResultVO<List<SafeMaterialClassifyRPCRespDto>> getClassifyListByIds(List<Long> ids);
+    /**
+     * 根据物资种类(小类)获取其库存
+     */
+    ResultVO<List<SafeMaterialClassifyStockRPCRespDto>> getSmallClassifyStockByIds(List<Long> smallClassifyIds);
+
+    /**
+     * 特殊作业批量出库
+     */
+    ResultVO deliveryBatchSpw(MaterialSpwRPCReq req);
+
+    /**
+     * 根据rfids获取物资
+     */
+    ResultVO<List<SafeRfidMaterialDetailRPCRespDto>> getListByRfid(List<String> rfids);
+}
diff --git a/equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/model/dto/req/MaterialSpwDeliveryRPCReq.java b/equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/model/dto/req/MaterialSpwDeliveryRPCReq.java
new file mode 100644
index 0000000..c8afb06
--- /dev/null
+++ b/equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/model/dto/req/MaterialSpwDeliveryRPCReq.java
@@ -0,0 +1,35 @@
+package com.gkhy.safePlatform.equipment.rpc.api.model.dto.req;
+
+
+public class MaterialSpwDeliveryRPCReq {
+    private Integer count;
+
+    private Long smallClassifyId;
+
+    private Long depId;
+
+
+    public Integer getCount() {
+        return count;
+    }
+
+    public void setCount(Integer count) {
+        this.count = count;
+    }
+
+    public Long getSmallClassifyId() {
+        return smallClassifyId;
+    }
+
+    public void setSmallClassifyId(Long smallClassifyId) {
+        this.smallClassifyId = smallClassifyId;
+    }
+
+    public Long getDepId() {
+        return depId;
+    }
+
+    public void setDepId(Long depId) {
+        this.depId = depId;
+    }
+}
diff --git a/equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/model/dto/req/MaterialSpwRPCReq.java b/equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/model/dto/req/MaterialSpwRPCReq.java
new file mode 100644
index 0000000..a628460
--- /dev/null
+++ b/equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/model/dto/req/MaterialSpwRPCReq.java
@@ -0,0 +1,27 @@
+package com.gkhy.safePlatform.equipment.rpc.api.model.dto.req;
+
+
+import java.util.List;
+
+public class MaterialSpwRPCReq {
+
+    private Long claimantId;
+
+    private List<MaterialSpwDeliveryRPCReq> deliveryReqList;
+
+    public Long getClaimantId() {
+        return claimantId;
+    }
+
+    public void setClaimantId(Long claimantId) {
+        this.claimantId = claimantId;
+    }
+
+    public List<MaterialSpwDeliveryRPCReq> getDeliveryReqList() {
+        return deliveryReqList;
+    }
+
+    public void setDeliveryReqList(List<MaterialSpwDeliveryRPCReq> deliveryReqList) {
+        this.deliveryReqList = deliveryReqList;
+    }
+}
diff --git a/equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/model/dto/resp/SafeMaterialBsClassifyRPCRespDto.java b/equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/model/dto/resp/SafeMaterialBsClassifyRPCRespDto.java
new file mode 100644
index 0000000..4afd5de
--- /dev/null
+++ b/equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/model/dto/resp/SafeMaterialBsClassifyRPCRespDto.java
@@ -0,0 +1,40 @@
+package com.gkhy.safePlatform.equipment.rpc.api.model.dto.resp;
+
+public class SafeMaterialBsClassifyRPCRespDto {
+    private Long smallClassifyId;
+    private String smallClassifyName;
+    private Long bigClassifyId;
+    private String bigClassifyName;
+
+    public Long getSmallClassifyId() {
+        return smallClassifyId;
+    }
+
+    public void setSmallClassifyId(Long smallClassifyId) {
+        this.smallClassifyId = smallClassifyId;
+    }
+
+    public String getSmallClassifyName() {
+        return smallClassifyName;
+    }
+
+    public void setSmallClassifyName(String smallClassifyName) {
+        this.smallClassifyName = smallClassifyName;
+    }
+
+    public Long getBigClassifyId() {
+        return bigClassifyId;
+    }
+
+    public void setBigClassifyId(Long bigClassifyId) {
+        this.bigClassifyId = bigClassifyId;
+    }
+
+    public String getBigClassifyName() {
+        return bigClassifyName;
+    }
+
+    public void setBigClassifyName(String bigClassifyName) {
+        this.bigClassifyName = bigClassifyName;
+    }
+}
diff --git a/equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/model/dto/resp/SafeMaterialClassifyRPCRespDto.java b/equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/model/dto/resp/SafeMaterialClassifyRPCRespDto.java
new file mode 100644
index 0000000..76ac151
--- /dev/null
+++ b/equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/model/dto/resp/SafeMaterialClassifyRPCRespDto.java
@@ -0,0 +1,44 @@
+package com.gkhy.safePlatform.equipment.rpc.api.model.dto.resp;
+
+import java.util.List;
+
+public class SafeMaterialClassifyRPCRespDto {
+    private Long id;
+    private String materialClassifyName;
+
+    private Long parentId;
+
+    private List<SafeMaterialClassifyRPCRespDto> childList;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getMaterialClassifyName() {
+        return materialClassifyName;
+    }
+
+    public void setMaterialClassifyName(String materialClassifyName) {
+        this.materialClassifyName = materialClassifyName;
+    }
+
+    public Long getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(Long parentId) {
+        this.parentId = parentId;
+    }
+
+    public List<SafeMaterialClassifyRPCRespDto> getChildList() {
+        return childList;
+    }
+
+    public void setChildList(List<SafeMaterialClassifyRPCRespDto> childList) {
+        this.childList = childList;
+    }
+}
diff --git a/equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/model/dto/resp/SafeMaterialClassifyStockRPCRespDto.java b/equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/model/dto/resp/SafeMaterialClassifyStockRPCRespDto.java
new file mode 100644
index 0000000..a32ac64
--- /dev/null
+++ b/equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/model/dto/resp/SafeMaterialClassifyStockRPCRespDto.java
@@ -0,0 +1,40 @@
+package com.gkhy.safePlatform.equipment.rpc.api.model.dto.resp;
+
+public class SafeMaterialClassifyStockRPCRespDto {
+    private Long smallClassifyId;
+    private Long depId;
+    private String depName;
+    private Integer stockCount;
+
+    public Long getSmallClassifyId() {
+        return smallClassifyId;
+    }
+
+    public void setSmallClassifyId(Long smallClassifyId) {
+        this.smallClassifyId = smallClassifyId;
+    }
+
+    public Long getDepId() {
+        return depId;
+    }
+
+    public void setDepId(Long depId) {
+        this.depId = depId;
+    }
+
+    public String getDepName() {
+        return depName;
+    }
+
+    public void setDepName(String depName) {
+        this.depName = depName;
+    }
+
+    public Integer getStockCount() {
+        return stockCount;
+    }
+
+    public void setStockCount(Integer stockCount) {
+        this.stockCount = stockCount;
+    }
+}
diff --git a/equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/model/dto/resp/SafeRfidMaterialDetailRPCRespDto.java b/equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/model/dto/resp/SafeRfidMaterialDetailRPCRespDto.java
new file mode 100644
index 0000000..7135d33
--- /dev/null
+++ b/equipment/equipment-rpc-api/src/main/java/com/gkhy/safePlatform/equipment/rpc/api/model/dto/resp/SafeRfidMaterialDetailRPCRespDto.java
@@ -0,0 +1,52 @@
+package com.gkhy.safePlatform.equipment.rpc.api.model.dto.resp;
+
+public class SafeRfidMaterialDetailRPCRespDto {
+    private Long id;
+    private String name;
+
+    private Long bigClassifyId;
+
+    private Long smallClassifyId;
+
+    private Long depId;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Long getBigClassifyId() {
+        return bigClassifyId;
+    }
+
+    public void setBigClassifyId(Long bigClassifyId) {
+        this.bigClassifyId = bigClassifyId;
+    }
+
+    public Long getSmallClassifyId() {
+        return smallClassifyId;
+    }
+
+    public void setSmallClassifyId(Long smallClassifyId) {
+        this.smallClassifyId = smallClassifyId;
+    }
+
+    public Long getDepId() {
+        return depId;
+    }
+
+    public void setDepId(Long depId) {
+        this.depId = depId;
+    }
+}
diff --git a/equipment/equipment-rpc-provider/src/main/java/com/gkhy/safePlatform/equipment/rpc/provider/EquipmentRpcProvider.java b/equipment/equipment-rpc-provider/src/main/java/com/gkhy/safePlatform/equipment/rpc/provider/EquipmentRpcProvider.java
new file mode 100644
index 0000000..b5cbfb2
--- /dev/null
+++ b/equipment/equipment-rpc-provider/src/main/java/com/gkhy/safePlatform/equipment/rpc/provider/EquipmentRpcProvider.java
@@ -0,0 +1,200 @@
+package com.gkhy.safePlatform.equipment.rpc.provider;
+
+import com.gkhy.safePlatform.commons.enums.ResultCodes;
+import com.gkhy.safePlatform.commons.utils.BeanCopyUtils;
+import com.gkhy.safePlatform.commons.vo.ResultVO;
+import com.gkhy.safePlatform.equipment.entity.SafeMaterialClassifyDO;
+import com.gkhy.safePlatform.equipment.excepiton.EquipmentException;
+import com.gkhy.safePlatform.equipment.model.dto.req.MaterialSpwDeliveryReq;
+import com.gkhy.safePlatform.equipment.model.dto.req.MaterialSpwReq;
+import com.gkhy.safePlatform.equipment.model.dto.resp.SafeMaterialClassifyDto;
+import com.gkhy.safePlatform.equipment.model.dto.resp.SafeMaterialClassifyStockDto;
+import com.gkhy.safePlatform.equipment.model.dto.resp.SafeRfidMaterialDetailDto;
+import com.gkhy.safePlatform.equipment.rpc.api.EquipmentRpcAPi;
+import com.gkhy.safePlatform.equipment.rpc.api.model.dto.req.MaterialSpwDeliveryRPCReq;
+import com.gkhy.safePlatform.equipment.rpc.api.model.dto.req.MaterialSpwRPCReq;
+import com.gkhy.safePlatform.equipment.rpc.api.model.dto.resp.SafeMaterialBsClassifyRPCRespDto;
+import com.gkhy.safePlatform.equipment.rpc.api.model.dto.resp.SafeMaterialClassifyRPCRespDto;
+import com.gkhy.safePlatform.equipment.rpc.api.model.dto.resp.SafeMaterialClassifyStockRPCRespDto;
+import com.gkhy.safePlatform.equipment.rpc.api.model.dto.resp.SafeRfidMaterialDetailRPCRespDto;
+import com.gkhy.safePlatform.equipment.service.MaterialClassifyService;
+import com.gkhy.safePlatform.equipment.service.SafeMaterialDetailService;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@DubboService
+public class EquipmentRpcProvider implements EquipmentRpcAPi {
+    @Autowired
+    private MaterialClassifyService materialClassifyService;
+    @Autowired
+    private SafeMaterialDetailService safeMaterialDetailService;
+
+
+    public ResultVO<List<SafeMaterialClassifyRPCRespDto>> getMaterialClassifyList(){
+      ResultVO<List<SafeMaterialClassifyRPCRespDto>> resultVO = new ResultVO(ResultCodes.OK);
+        List<SafeMaterialClassifyDto> list = materialClassifyService.list();
+        List<SafeMaterialClassifyRPCRespDto> rpcRespList = new ArrayList<>();
+        for (SafeMaterialClassifyDto classifyDto:list) {
+            SafeMaterialClassifyRPCRespDto classifyRPCRespDto = new SafeMaterialClassifyRPCRespDto();
+            classifyRPCRespDto.setId(classifyDto.getId());
+            classifyRPCRespDto.setParentId(classifyDto.getParentId());
+            classifyRPCRespDto.setMaterialClassifyName(classifyDto.getMaterialClassifyName());
+            List<SafeMaterialClassifyDto> childList = classifyDto.getChildList();
+            List<SafeMaterialClassifyRPCRespDto> childRPCList = new ArrayList<>();
+            for(SafeMaterialClassifyDto child:childList){
+                SafeMaterialClassifyRPCRespDto childRPCRespDto = new SafeMaterialClassifyRPCRespDto();
+                childRPCRespDto.setId(child.getId());
+                childRPCRespDto.setParentId(child.getParentId());
+                childRPCRespDto.setMaterialClassifyName(child.getMaterialClassifyName());
+                childRPCList.add(childRPCRespDto);
+            }
+            classifyRPCRespDto.setChildList(childRPCList);
+            rpcRespList.add(classifyRPCRespDto);
+
+        }
+       resultVO.setData(rpcRespList);
+       return resultVO;
+    }
+
+    @Override
+    public ResultVO<List<SafeMaterialBsClassifyRPCRespDto>> getTraceabilityClassifyList(List<Long> smallClassifyIds) {
+        ResultVO<List<SafeMaterialBsClassifyRPCRespDto>> resultVO = new ResultVO<>(ResultCodes.OK);
+        try {
+            List<SafeMaterialClassifyDO> list = materialClassifyService.getTraceabilityClassifyList(smallClassifyIds);
+            List<SafeMaterialBsClassifyRPCRespDto> classifyRPCRespDtoList= new ArrayList<>();
+            for(SafeMaterialClassifyDO classifyDO:list){
+                SafeMaterialBsClassifyRPCRespDto bsClassifyRPCRespDto = new SafeMaterialBsClassifyRPCRespDto();
+                BeanUtils.copyProperties(classifyDO,bsClassifyRPCRespDto);
+                classifyRPCRespDtoList.add(bsClassifyRPCRespDto);
+            }
+            resultVO.setData(classifyRPCRespDtoList);
+        }catch (EquipmentException e){
+            resultVO.setCode(e.getCode());
+            resultVO.setMsg(e.getMessage());
+        }catch (Exception e){
+            resultVO.setCode(ResultCodes.SERVER_ERROR.getCode());
+            resultVO.setCode(ResultCodes.SERVER_ERROR.getDesc());
+
+        }
+        return resultVO;
+    }
+
+    public ResultVO<SafeMaterialBsClassifyRPCRespDto> getBigAndSmallClassifyInfo(Long smallClassifyId){
+        ResultVO<SafeMaterialBsClassifyRPCRespDto> resultVO = new ResultVO<>(ResultCodes.OK);
+        try {
+            SafeMaterialClassifyDO safeMaterialClassifyDO = materialClassifyService.getBigAndSmallClassifyInfo(smallClassifyId);
+            SafeMaterialBsClassifyRPCRespDto bsClassifyRPCRespDto = new SafeMaterialBsClassifyRPCRespDto();
+            if(null != safeMaterialClassifyDO){
+                BeanUtils.copyProperties(safeMaterialClassifyDO,bsClassifyRPCRespDto);
+            }
+            resultVO.setData(bsClassifyRPCRespDto);
+        }catch (EquipmentException e){
+            resultVO.setCode(e.getCode());
+            resultVO.setMsg(e.getMessage());
+        }catch (Exception e){
+            resultVO.setCode(ResultCodes.SERVER_ERROR.getCode());
+            resultVO.setCode(ResultCodes.SERVER_ERROR.getDesc());
+
+        }
+        return resultVO;
+    }
+
+    @Override
+    public ResultVO<List<SafeMaterialClassifyRPCRespDto>> getClassifyListByIds(List<Long> ids) {
+        ResultVO<List<SafeMaterialClassifyRPCRespDto>> resultVO = new ResultVO<>(ResultCodes.OK);
+        try {
+            List<SafeMaterialClassifyDto> listBySmallClassify = materialClassifyService.getClassifyListByIds(ids);
+            List<SafeMaterialClassifyRPCRespDto> classifyRPCRespDtoList = new ArrayList<>();
+            for(SafeMaterialClassifyDto classifyDto:listBySmallClassify){
+                SafeMaterialClassifyRPCRespDto classifyRPCRespDto = new SafeMaterialClassifyRPCRespDto();
+                BeanUtils.copyProperties(classifyDto,classifyRPCRespDto);
+                classifyRPCRespDtoList.add(classifyRPCRespDto);
+            }
+            resultVO.setData(classifyRPCRespDtoList);
+        }catch (EquipmentException e){
+            resultVO.setCode(e.getCode());
+            resultVO.setMsg(e.getMessage());
+        }catch (Exception e){
+            resultVO.setCode(ResultCodes.SERVER_ERROR.getCode());
+            resultVO.setCode(ResultCodes.SERVER_ERROR.getDesc());
+
+        }
+        return resultVO;
+    }
+
+    @Override
+    public ResultVO<List<SafeMaterialClassifyStockRPCRespDto>> getSmallClassifyStockByIds(List<Long> smallClassifyIds) {
+        ResultVO<List<SafeMaterialClassifyStockRPCRespDto>> resultVO = new ResultVO<>(ResultCodes.OK);
+        try {
+            List<SafeMaterialClassifyStockDto> smallClassifyStockList  = safeMaterialDetailService.getSmallClassifyStockByIds(smallClassifyIds);
+            List<SafeMaterialClassifyStockRPCRespDto> classifyRPCRespDtoList = new ArrayList<>();
+            for(SafeMaterialClassifyStockDto classifyStockDto:smallClassifyStockList){
+                SafeMaterialClassifyStockRPCRespDto classifyRPCRespDto = new SafeMaterialClassifyStockRPCRespDto();
+                BeanUtils.copyProperties(classifyStockDto,classifyRPCRespDto);
+                classifyRPCRespDtoList.add(classifyRPCRespDto);
+            }
+            resultVO.setData(classifyRPCRespDtoList);
+        }catch (EquipmentException e){
+            resultVO.setCode(e.getCode());
+            resultVO.setMsg(e.getMessage());
+        }catch (Exception e){
+            resultVO.setCode(ResultCodes.SERVER_ERROR.getCode());
+            resultVO.setCode(ResultCodes.SERVER_ERROR.getDesc());
+
+        }
+        return resultVO;
+    }
+
+    @Override
+    public ResultVO deliveryBatchSpw(MaterialSpwRPCReq req) {
+        ResultVO resultVO = new ResultVO<>(ResultCodes.OK);
+        MaterialSpwReq materialSpwReq = new MaterialSpwReq();
+        List<MaterialSpwDeliveryReq> list = new ArrayList<>();
+        List<MaterialSpwDeliveryRPCReq> deliveryRPCReqList = req.getDeliveryReqList();
+        if(!CollectionUtils.isEmpty(deliveryRPCReqList)){
+            for (MaterialSpwDeliveryRPCReq deliveryRPCReq:deliveryRPCReqList) {
+                MaterialSpwDeliveryReq deliveryReq = new MaterialSpwDeliveryReq();
+                BeanUtils.copyProperties(deliveryRPCReq,deliveryReq);
+                list.add(deliveryReq);
+            }
+        }
+        materialSpwReq.setClaimantId(req.getClaimantId());
+        materialSpwReq.setDeliveryReqList(list);
+
+        try {
+            safeMaterialDetailService.deliveryBatchSpw(materialSpwReq);
+        }catch (EquipmentException e){
+            resultVO.setCode(e.getCode());
+            resultVO.setMsg(e.getMessage());
+        }catch (Exception e){
+            resultVO.setCode(ResultCodes.SERVER_ERROR.getCode());
+            resultVO.setCode(ResultCodes.SERVER_ERROR.getDesc());
+        }
+        return resultVO;
+    }
+
+    @Override
+    public ResultVO<List<SafeRfidMaterialDetailRPCRespDto>> getListByRfid(List<String> rfids) {
+        ResultVO resultVO = new ResultVO<>(ResultCodes.OK);
+        try {
+            List<SafeRfidMaterialDetailDto> listByRfids = safeMaterialDetailService.getListByRfids(rfids);
+            if(listByRfids.size()>0){
+                List<SafeRfidMaterialDetailRPCRespDto> safeRfidMaterialDetailRPCRespDtos = BeanCopyUtils.copyBeanList(listByRfids, SafeRfidMaterialDetailRPCRespDto.class);
+                resultVO.setData(safeRfidMaterialDetailRPCRespDtos);
+            }
+        }catch (EquipmentException e){
+            resultVO.setCode(e.getCode());
+            resultVO.setMsg(e.getMessage());
+        }catch (Exception e){
+            resultVO.setCode(ResultCodes.SERVER_ERROR.getCode());
+            resultVO.setCode(ResultCodes.SERVER_ERROR.getDesc());
+
+        }
+        return resultVO;
+    }
+}
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/controller/MaterialClassifyController.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/controller/MaterialClassifyController.java
index ebad542..8b13294 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/controller/MaterialClassifyController.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/controller/MaterialClassifyController.java
@@ -2,6 +2,7 @@
 
 import com.alibaba.fastjson.JSONObject;
 import com.gkhy.safePlatform.commons.co.ContextCacheUser;
+import com.gkhy.safePlatform.commons.enums.ResultCodes;
 import com.gkhy.safePlatform.commons.vo.ResultVO;
 import com.gkhy.safePlatform.equipment.model.dto.req.SafeMaterialClassifyAddReq;
 import com.gkhy.safePlatform.equipment.model.dto.req.SafeMaterialClassifyModReq;
@@ -28,9 +29,9 @@
      * @return
      */
     @PostMapping(value = "/list")
-    public ResultVO<List<SafeMaterialClassifyDto>> list(Authentication authentication, @RequestBody SafeMaterialClassifyQuery query){
+    public ResultVO<List<SafeMaterialClassifyDto>> list(Authentication authentication){
         ContextCacheUser currentUser = (ContextCacheUser) authentication.getPrincipal();
-        return materialClassifyService.list(query);
+        return new ResultVO<>(ResultCodes.OK,materialClassifyService.list());
 
     }
 
@@ -71,6 +72,6 @@
     @PostMapping(value = "queryById")
     public ResultVO<SafeMaterialClassifyDto> queryById(Authentication authentication, @RequestBody JSONObject jsonObject){
         Long id = jsonObject.getLong("id");
-        return materialClassifyService.queryById(id);
+        return new ResultVO<>(ResultCodes.OK,materialClassifyService.queryById(id));
     }
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/controller/SafeMaterialDetailController.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/controller/SafeMaterialDetailController.java
index 0250924..2f399c1 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/controller/SafeMaterialDetailController.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/controller/SafeMaterialDetailController.java
@@ -1,6 +1,7 @@
 package com.gkhy.safePlatform.equipment.controller;
 
 import com.alibaba.fastjson.JSONObject;
+import com.gkhy.safePlatform.commons.enums.ResultCodes;
 import com.gkhy.safePlatform.commons.query.PageQuery;
 import com.gkhy.safePlatform.commons.vo.ResultVO;
 import com.gkhy.safePlatform.commons.vo.SearchResultVO;
@@ -144,5 +145,23 @@
         Long id = jsonObject.getLong("id");
         return safeMaterialDetailService.queryById(id);
     }
-
+    /**
+     * 特殊作业批量出库接口
+     * @param authentication
+     * @return
+     */
+    @PostMapping(value = "/deliveryBatchSpw")
+    public ResultVO deliveryBatchSpw(Authentication authentication, @Validated @RequestBody MaterialSpwReq req){
+        safeMaterialDetailService.deliveryBatchSpw(req);
+        return new ResultVO<>(ResultCodes.OK);
+    }
+ /*   *//**
+     * 根据rfid获去数据
+     * @param authentication
+     * @return
+     *//*
+    @PostMapping(value = "/rfid/list")
+    public ResultVO getListByRfid(Authentication authentication, @RequestBody String[] rfids){
+        return new ResultVO(ResultCodes.OK,safeMaterialDetailService.getListByRfids(rfids));
+    }*/
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialClassifyDO.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialClassifyDO.java
index f96a877..dd9618c 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialClassifyDO.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialClassifyDO.java
@@ -1,22 +1,40 @@
 package com.gkhy.safePlatform.equipment.entity;
 
 public class SafeMaterialClassifyDO {
-    private Long id;
-    private String materialClassifyName;
+    private Long smallClassifyId;
+    private String smallClassifyName;
+    private Long bigClassifyId;
+    private String bigClassifyName;
 
-    public Long getId() {
-        return id;
+    public Long getSmallClassifyId() {
+        return smallClassifyId;
     }
 
-    public void setId(Long id) {
-        this.id = id;
+    public void setSmallClassifyId(Long smallClassifyId) {
+        this.smallClassifyId = smallClassifyId;
     }
 
-    public String getMaterialClassifyName() {
-        return materialClassifyName;
+    public String getSmallClassifyName() {
+        return smallClassifyName;
     }
 
-    public void setMaterialClassifyName(String materialClassifyName) {
-        this.materialClassifyName = materialClassifyName;
+    public void setSmallClassifyName(String smallClassifyName) {
+        this.smallClassifyName = smallClassifyName;
+    }
+
+    public Long getBigClassifyId() {
+        return bigClassifyId;
+    }
+
+    public void setBigClassifyId(Long bigClassifyId) {
+        this.bigClassifyId = bigClassifyId;
+    }
+
+    public String getBigClassifyName() {
+        return bigClassifyName;
+    }
+
+    public void setBigClassifyName(String bigClassifyName) {
+        this.bigClassifyName = bigClassifyName;
     }
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialClassifyInfo.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialClassifyInfo.java
index 0880f55..a44963f 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialClassifyInfo.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialClassifyInfo.java
@@ -18,6 +18,10 @@
      */
     private String materialClassifyName;
     /**
+     * 父级id
+     */
+    private Long parentId;
+    /**
      * 删除标识
      */
     @TableField(fill = FieldFill.INSERT) //自动填充的注解
@@ -128,4 +132,12 @@
     public void setUpdateUname(String updateUname) {
         this.updateUname = updateUname;
     }
+
+    public Long getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(Long parentId) {
+        this.parentId = parentId;
+    }
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialClassifyStockDO.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialClassifyStockDO.java
new file mode 100644
index 0000000..9e43f9a
--- /dev/null
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialClassifyStockDO.java
@@ -0,0 +1,44 @@
+package com.gkhy.safePlatform.equipment.entity;
+
+public class SafeMaterialClassifyStockDO {
+
+    private Long smallClassifyId;
+
+    private Long depId;
+
+    private String depName;
+
+    private Integer stockCount;
+
+    public Long getSmallClassifyId() {
+        return smallClassifyId;
+    }
+
+    public void setSmallClassifyId(Long smallClassifyId) {
+        this.smallClassifyId = smallClassifyId;
+    }
+
+    public Long getDepId() {
+        return depId;
+    }
+
+    public void setDepId(Long depId) {
+        this.depId = depId;
+    }
+
+    public String getDepName() {
+        return depName;
+    }
+
+    public void setDepName(String depName) {
+        this.depName = depName;
+    }
+
+    public Integer getStockCount() {
+        return stockCount;
+    }
+
+    public void setStockCount(Integer stockCount) {
+        this.stockCount = stockCount;
+    }
+}
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialDO.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialDO.java
index 1930b44..fcc9cdd 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialDO.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialDO.java
@@ -20,9 +20,11 @@
     /**
      * 物资类型id
      */
-    private Long materialClassifyId;
+    private Long bigClassifyId;
 
-    private String materialClassifyName;
+    private String bigClassifyName;
+
+    private Long smallClassifyId;
     /**
      * 部门id
      */
@@ -94,13 +96,7 @@
         this.serialNum = serialNum;
     }
 
-    public Long getMaterialClassifyId() {
-        return materialClassifyId;
-    }
 
-    public void setMaterialClassifyId(Long materialClassifyId) {
-        this.materialClassifyId = materialClassifyId;
-    }
 
     public Long getDepId() {
         return depId;
@@ -190,11 +186,27 @@
         this.updateTime = updateTime;
     }
 
-    public String getMaterialClassifyName() {
-        return materialClassifyName;
+    public Long getBigClassifyId() {
+        return bigClassifyId;
     }
 
-    public void setMaterialClassifyName(String materialClassifyName) {
-        this.materialClassifyName = materialClassifyName;
+    public void setBigClassifyId(Long bigClassifyId) {
+        this.bigClassifyId = bigClassifyId;
+    }
+
+    public String getBigClassifyName() {
+        return bigClassifyName;
+    }
+
+    public void setBigClassifyName(String bigClassifyName) {
+        this.bigClassifyName = bigClassifyName;
+    }
+
+    public Long getSmallClassifyId() {
+        return smallClassifyId;
+    }
+
+    public void setSmallClassifyId(Long smallClassifyId) {
+        this.smallClassifyId = smallClassifyId;
     }
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialDetailCountDO.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialDetailCountDO.java
index bb80a9a..27f55b3 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialDetailCountDO.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialDetailCountDO.java
@@ -4,6 +4,8 @@
     private Long smId;
     private Integer count;
 
+    private Long smallClassifyId;
+
     public Long getSmId() {
         return smId;
     }
@@ -19,4 +21,12 @@
     public void setCount(Integer count) {
         this.count = count;
     }
+
+    public Long getSmallClassifyId() {
+        return smallClassifyId;
+    }
+
+    public void setSmallClassifyId(Long smallClassifyId) {
+        this.smallClassifyId = smallClassifyId;
+    }
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialDetailDO.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialDetailDO.java
new file mode 100644
index 0000000..f5610ed
--- /dev/null
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialDetailDO.java
@@ -0,0 +1,49 @@
+package com.gkhy.safePlatform.equipment.entity;
+
+public class SafeMaterialDetailDO {
+    private Long id;
+    private String rfid;
+    private Long depId;
+    private Long smallClassifyId;
+    private Long bigClassifyId;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getRfid() {
+        return rfid;
+    }
+
+    public void setRfid(String rfid) {
+        this.rfid = rfid;
+    }
+
+    public Long getDepId() {
+        return depId;
+    }
+
+    public void setDepId(Long depId) {
+        this.depId = depId;
+    }
+
+    public Long getSmallClassifyId() {
+        return smallClassifyId;
+    }
+
+    public void setSmallClassifyId(Long smallClassifyId) {
+        this.smallClassifyId = smallClassifyId;
+    }
+
+    public Long getBigClassifyId() {
+        return bigClassifyId;
+    }
+
+    public void setBigClassifyId(Long bigClassifyId) {
+        this.bigClassifyId = bigClassifyId;
+    }
+}
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialDetailInfo.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialDetailInfo.java
index 310e2a5..47c026d 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialDetailInfo.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialDetailInfo.java
@@ -24,9 +24,13 @@
      */
     private String materialNo;
     /**
-     * 物资类型id
+     * 物资类型id 大类
      */
-    private Long materialClassifyId;
+    private Long bigClassifyId;
+    /**
+     * 物资类型id 小类
+     */
+    private Long smallClassifyId;
     /**
      * RFID
      */
@@ -135,12 +139,20 @@
         this.materialNo = materialNo;
     }
 
-    public Long getMaterialClassifyId() {
-        return materialClassifyId;
+    public Long getBigClassifyId() {
+        return bigClassifyId;
     }
 
-    public void setMaterialClassifyId(Long materialClassifyId) {
-        this.materialClassifyId = materialClassifyId;
+    public void setBigClassifyId(Long bigClassifyId) {
+        this.bigClassifyId = bigClassifyId;
+    }
+
+    public Long getSmallClassifyId() {
+        return smallClassifyId;
+    }
+
+    public void setSmallClassifyId(Long smallClassifyId) {
+        this.smallClassifyId = smallClassifyId;
     }
 
     public String getRfid() {
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialDetailInfoDO.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialDetailInfoDO.java
index f86b007..413842f 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialDetailInfoDO.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialDetailInfoDO.java
@@ -18,14 +18,15 @@
      * 物资编号
      */
     private String materialNo;
+    private Long smallClassifyId;
     /**
      * 物资类型id
      */
-    private Long materialClassifyId;
+    private Long bigClassifyId;
     /**
      * 物资类型名称
      */
-    private String materialClassifyName;
+    private String bigClassifyName;
     /**
      * RFID
      */
@@ -108,20 +109,20 @@
         this.materialNo = materialNo;
     }
 
-    public Long getMaterialClassifyId() {
-        return materialClassifyId;
+    public Long getBigClassifyId() {
+        return bigClassifyId;
     }
 
-    public void setMaterialClassifyId(Long materialClassifyId) {
-        this.materialClassifyId = materialClassifyId;
+    public void setBigClassifyId(Long bigClassifyId) {
+        this.bigClassifyId = bigClassifyId;
     }
 
-    public String getMaterialClassifyName() {
-        return materialClassifyName;
+    public String getBigClassifyName() {
+        return bigClassifyName;
     }
 
-    public void setMaterialClassifyName(String materialClassifyName) {
-        this.materialClassifyName = materialClassifyName;
+    public void setBigClassifyName(String bigClassifyName) {
+        this.bigClassifyName = bigClassifyName;
     }
 
     public String getRfid() {
@@ -227,4 +228,12 @@
     public void setClaimantName(String claimantName) {
         this.claimantName = claimantName;
     }
+
+    public Long getSmallClassifyId() {
+        return smallClassifyId;
+    }
+
+    public void setSmallClassifyId(Long smallClassifyId) {
+        this.smallClassifyId = smallClassifyId;
+    }
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialInfo.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialInfo.java
index b432ae3..a2a467b 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialInfo.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/entity/SafeMaterialInfo.java
@@ -20,9 +20,13 @@
      */
     private String serialNum;
     /**
-     * 物资类型id
+     * 物资类型id 大类
      */
-    private Long materialClassifyId;
+    private Long bigClassifyId;
+    /**
+     * 物资类型 小类
+     */
+    private Long smallClassifyId;
     /**
      * 部门id
      */
@@ -94,12 +98,20 @@
         this.serialNum = serialNum;
     }
 
-    public Long getMaterialClassifyId() {
-        return materialClassifyId;
+    public Long getBigClassifyId() {
+        return bigClassifyId;
     }
 
-    public void setMaterialClassifyId(Long materialClassifyId) {
-        this.materialClassifyId = materialClassifyId;
+    public void setBigClassifyId(Long bigClassifyId) {
+        this.bigClassifyId = bigClassifyId;
+    }
+
+    public Long getSmallClassifyId() {
+        return smallClassifyId;
+    }
+
+    public void setSmallClassifyId(Long smallClassifyId) {
+        this.smallClassifyId = smallClassifyId;
     }
 
     public Long getDepId() {
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/enums/EquipmentResultCodes.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/enums/EquipmentResultCodes.java
index 5eb0eb2..387ad2f 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/enums/EquipmentResultCodes.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/enums/EquipmentResultCodes.java
@@ -14,7 +14,9 @@
     DATA_NOT_EXIST("E1005","数据不存在"),
     MATERIAL_INVALID("E1006","物资无效"),
     MATERIAL_OUT_OF_LIBRARY("E1007","物资已出库,不可再次出库"),
-    MATERIAL_IN_THE_LIBRARY("E1007","物资已入库,不可再次入库"),
+    MATERIAL_IN_THE_LIBRARY("E1008","物资已入库,不可再次入库"),
+    MATERIAL_CONSUMABLE("E1009","耗材物资不可重新入库"),
+    DATA_EXIST("E1010","数据已存在"),
 
     ERROR("A3000", "未知错误");
 
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/MaterialSpwDeliveryReq.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/MaterialSpwDeliveryReq.java
new file mode 100644
index 0000000..f8ab4f5
--- /dev/null
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/MaterialSpwDeliveryReq.java
@@ -0,0 +1,39 @@
+package com.gkhy.safePlatform.equipment.model.dto.req;
+
+import javax.validation.constraints.NotNull;
+
+public class MaterialSpwDeliveryReq {
+    @NotNull(message = "主键不可为空!")
+    private Integer count;
+
+    @NotNull(message = "物资主键不可为空!")
+    private Long smallClassifyId;
+
+    @NotNull(message = "部门或者仓库不可为空!")
+    private Long depId;
+
+
+    public Integer getCount() {
+        return count;
+    }
+
+    public void setCount(Integer count) {
+        this.count = count;
+    }
+
+    public Long getSmallClassifyId() {
+        return smallClassifyId;
+    }
+
+    public void setSmallClassifyId(Long smallClassifyId) {
+        this.smallClassifyId = smallClassifyId;
+    }
+
+    public Long getDepId() {
+        return depId;
+    }
+
+    public void setDepId(Long depId) {
+        this.depId = depId;
+    }
+}
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/MaterialSpwReq.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/MaterialSpwReq.java
new file mode 100644
index 0000000..1642ceb
--- /dev/null
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/MaterialSpwReq.java
@@ -0,0 +1,29 @@
+package com.gkhy.safePlatform.equipment.model.dto.req;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+public class MaterialSpwReq {
+
+    @NotNull(message = "认领人不可为空!")
+    private Long claimantId;
+
+    @NotNull(message = "出库物资不可为空!")
+    private List<MaterialSpwDeliveryReq> deliveryReqList;
+
+    public Long getClaimantId() {
+        return claimantId;
+    }
+
+    public void setClaimantId(Long claimantId) {
+        this.claimantId = claimantId;
+    }
+
+    public List<MaterialSpwDeliveryReq> getDeliveryReqList() {
+        return deliveryReqList;
+    }
+
+    public void setDeliveryReqList(List<MaterialSpwDeliveryReq> deliveryReqList) {
+        this.deliveryReqList = deliveryReqList;
+    }
+}
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/MterialRandomDeliveryReq.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/MterialRandomDeliveryReq.java
index 722fb52..46f1b45 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/MterialRandomDeliveryReq.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/MterialRandomDeliveryReq.java
@@ -9,8 +9,10 @@
     @NotNull(message = "认领人不可为空!")
     private Long claimantId;
 
-    @NotNull(message = "物资主键不可为空!")
+    @NotNull(message = "物资管理id不可为空!")
     private Long smId;
+
+    private String rfid;
 
     public Long getSmId() {
         return smId;
@@ -35,4 +37,12 @@
     public void setCount(Integer count) {
         this.count = count;
     }
+
+    public String getRfid() {
+        return rfid;
+    }
+
+    public void setRfid(String rfid) {
+        this.rfid = rfid;
+    }
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/SafeMaterialAddReq.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/SafeMaterialAddReq.java
index 1c8641e..9f4b63a 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/SafeMaterialAddReq.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/SafeMaterialAddReq.java
@@ -9,30 +9,31 @@
     /**
      * 物资类型id
      */
-    @NotNull(message = "物资类型不可为空!")
-    private Long materialClassifyId;
+    @NotNull(message = "物资类型(小类)不可为空!")
+    private Long smallClassifyId;
+    /**
+     * 大类id
+     */
+    @NotNull(message = "物资类型(大类)不可为空!")
+    private Long bigClassifyId;
     /**
      * 部门id
      */
     @NotNull(message = "所属部门不可为空!")
     private Long depId;
-    /**
-     * 物资名称
-     */
-    @NotBlank(message = "安全物资名称不可为空!")
-    private String materialName;
+
     /**
      * 是否是耗材(0是, 1否)
      */
     @NotNull(message = "是否是耗材不可为空!")
     private Byte consumable;
 
-    public Long getMaterialClassifyId() {
-        return materialClassifyId;
+    public Long getSmallClassifyId() {
+        return smallClassifyId;
     }
 
-    public void setMaterialClassifyId(Long materialClassifyId) {
-        this.materialClassifyId = materialClassifyId;
+    public void setSmallClassifyId(Long smallClassifyId) {
+        this.smallClassifyId = smallClassifyId;
     }
 
     public Long getDepId() {
@@ -43,15 +44,6 @@
         this.depId = depId;
     }
 
-
-    public String getMaterialName() {
-        return materialName;
-    }
-
-    public void setMaterialName(String materialName) {
-        this.materialName = materialName;
-    }
-
     public Byte getConsumable() {
         return consumable;
     }
@@ -59,4 +51,12 @@
     public void setConsumable(Byte consumable) {
         this.consumable = consumable;
     }
+
+    public Long getBigClassifyId() {
+        return bigClassifyId;
+    }
+
+    public void setBigClassifyId(Long bigClassifyId) {
+        this.bigClassifyId = bigClassifyId;
+    }
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/SafeMaterialClassifyAddReq.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/SafeMaterialClassifyAddReq.java
index f7e6284..d5b83af 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/SafeMaterialClassifyAddReq.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/SafeMaterialClassifyAddReq.java
@@ -1,9 +1,6 @@
 package com.gkhy.safePlatform.equipment.model.dto.req;
 
 
-import org.hibernate.validator.constraints.Length;
-import org.jetbrains.annotations.NotNull;
-
 import javax.validation.constraints.NotBlank;
 
 public class SafeMaterialClassifyAddReq {
@@ -12,6 +9,10 @@
      */
     @NotBlank(message = "物资名称不可为空")
     private String materialClassifyName;
+    /**
+     * 父级id
+     */
+    private Long ParentId;
 
     public String getMaterialClassifyName() {
         return materialClassifyName;
@@ -20,4 +21,12 @@
     public void setMaterialClassifyName(String materialClassifyName) {
         this.materialClassifyName = materialClassifyName;
     }
+
+    public Long getParentId() {
+        return ParentId;
+    }
+
+    public void setParentId(Long parentId) {
+        ParentId = parentId;
+    }
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/SafeMaterialModReq.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/SafeMaterialModReq.java
index 976cbe3..56ab3c4 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/SafeMaterialModReq.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/SafeMaterialModReq.java
@@ -1,6 +1,5 @@
 package com.gkhy.safePlatform.equipment.model.dto.req;
 
-import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 
 public class SafeMaterialModReq {
@@ -10,7 +9,12 @@
      * 物资类型id
      */
     @NotNull(message = "物资类型不可为空!")
-    private Long materialClassifyId;
+    private Long smallClassifyId;
+    /**
+     * 大类id
+     */
+    @NotNull(message = "物资类型(大类)不可为空!")
+    private Long bigClassifyId;
     /**
      * 部门id
      */
@@ -19,8 +23,6 @@
     /**
      * 物资名称
      */
-    @NotBlank(message = "安全物资名称不可为空!")
-    private String materialName;
     /**
      * 是否是耗材(0是, 1否)
      */
@@ -35,12 +37,12 @@
         this.id = id;
     }
 
-    public Long getMaterialClassifyId() {
-        return materialClassifyId;
+    public Long getSmallClassifyId() {
+        return smallClassifyId;
     }
 
-    public void setMaterialClassifyId(Long materialClassifyId) {
-        this.materialClassifyId = materialClassifyId;
+    public void setSmallClassifyId(Long smallClassifyId) {
+        this.smallClassifyId = smallClassifyId;
     }
 
     public Long getDepId() {
@@ -51,14 +53,6 @@
         this.depId = depId;
     }
 
-    public String getMaterialName() {
-        return materialName;
-    }
-
-    public void setMaterialName(String materialName) {
-        this.materialName = materialName;
-    }
-
     public Byte getConsumable() {
         return consumable;
     }
@@ -66,4 +60,12 @@
     public void setConsumable(Byte consumable) {
         this.consumable = consumable;
     }
+
+    public Long getBigClassifyId() {
+        return bigClassifyId;
+    }
+
+    public void setBigClassifyId(Long bigClassifyId) {
+        this.bigClassifyId = bigClassifyId;
+    }
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/SafeMaterialQuery.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/SafeMaterialQuery.java
index 9d6130f..6e958de 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/SafeMaterialQuery.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/req/SafeMaterialQuery.java
@@ -4,18 +4,18 @@
     /**
      * 物资类型id
      */
-    private Long materialClassifyId;
+    private Long bigClassifyId;
     /**
      * 物资名称
      */
-        private String materialName;
+    private String materialName;
 
-    public Long getMaterialClassifyId() {
-        return materialClassifyId;
+    public Long getBigClassifyId() {
+        return bigClassifyId;
     }
 
-    public void setMaterialClassifyId(Long materialClassifyId) {
-        this.materialClassifyId = materialClassifyId;
+    public void setBigClassifyId(Long bigClassifyId) {
+        this.bigClassifyId = bigClassifyId;
     }
 
     public String getMaterialName() {
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/MaterialClassificationDto.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/MaterialClassificationDto.java
index f8d57a1..0253a0b 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/MaterialClassificationDto.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/MaterialClassificationDto.java
@@ -7,8 +7,8 @@
     private Long materialClassifyId;
     //物资类型名称
     private String materialClassifyName;
-    private List<MaterialDepartmentDto> departmentList;
 
+    private List<BaseMaterialDto> baseMaterialList;
     public Long getMaterialClassifyId() {
         return materialClassifyId;
     }
@@ -25,11 +25,11 @@
         this.materialClassifyName = materialClassifyName;
     }
 
-    public List<MaterialDepartmentDto> getDepartmentList() {
-        return departmentList;
+    public List<BaseMaterialDto> getBaseMaterialList() {
+        return baseMaterialList;
     }
 
-    public void setDepartmentList(List<MaterialDepartmentDto> departmentList) {
-        this.departmentList = departmentList;
+    public void setBaseMaterialList(List<BaseMaterialDto> baseMaterialList) {
+        this.baseMaterialList = baseMaterialList;
     }
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/MaterialDepartmentDto.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/MaterialDepartmentDto.java
index 989d7be..c72fe26 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/MaterialDepartmentDto.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/MaterialDepartmentDto.java
@@ -8,7 +8,7 @@
     //部门名称
     private String depName;
     //基础物资设备
-    private List<BaseMaterialDto> baseMaterialList;
+    private List<MaterialClassificationDto> classificationList;
 
     public Long getDepId() {
         return depId;
@@ -26,11 +26,11 @@
         this.depName = depName;
     }
 
-    public List<BaseMaterialDto> getBaseMaterialList() {
-        return baseMaterialList;
+    public List<MaterialClassificationDto> getClassificationList() {
+        return classificationList;
     }
 
-    public void setBaseMaterialList(List<BaseMaterialDto> baseMaterialList) {
-        this.baseMaterialList = baseMaterialList;
+    public void setClassificationList(List<MaterialClassificationDto> classificationList) {
+        this.classificationList = classificationList;
     }
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/SafeMaterialClassifyDto.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/SafeMaterialClassifyDto.java
index 058fb30..7195a44 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/SafeMaterialClassifyDto.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/SafeMaterialClassifyDto.java
@@ -1,8 +1,22 @@
 package com.gkhy.safePlatform.equipment.model.dto.resp;
 
+import java.util.List;
+
 public class SafeMaterialClassifyDto {
     private Long id;
     private String materialClassifyName;
+
+    private Long parentId;
+
+    private List<SafeMaterialClassifyDto> childList;
+
+    public Long getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(Long parentId) {
+        this.parentId = parentId;
+    }
 
     public Long getId() {
         return id;
@@ -19,4 +33,12 @@
     public void setMaterialClassifyName(String materialClassifyName) {
         this.materialClassifyName = materialClassifyName;
     }
+
+    public List<SafeMaterialClassifyDto> getChildList() {
+        return childList;
+    }
+
+    public void setChildList(List<SafeMaterialClassifyDto> childList) {
+        this.childList = childList;
+    }
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/SafeMaterialClassifyStockDto.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/SafeMaterialClassifyStockDto.java
new file mode 100644
index 0000000..7c1476b
--- /dev/null
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/SafeMaterialClassifyStockDto.java
@@ -0,0 +1,40 @@
+package com.gkhy.safePlatform.equipment.model.dto.resp;
+
+public class SafeMaterialClassifyStockDto {
+    private Long smallClassifyId;
+    private Long depId;
+    private String depName;
+    private Integer stockCount;
+
+    public Long getSmallClassifyId() {
+        return smallClassifyId;
+    }
+
+    public void setSmallClassifyId(Long smallClassifyId) {
+        this.smallClassifyId = smallClassifyId;
+    }
+
+    public Long getDepId() {
+        return depId;
+    }
+
+    public void setDepId(Long depId) {
+        this.depId = depId;
+    }
+
+    public String getDepName() {
+        return depName;
+    }
+
+    public void setDepName(String depName) {
+        this.depName = depName;
+    }
+
+    public Integer getStockCount() {
+        return stockCount;
+    }
+
+    public void setStockCount(Integer stockCount) {
+        this.stockCount = stockCount;
+    }
+}
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/SafeMaterialDetailDto.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/SafeMaterialDetailDto.java
index b6478e8..6d83dec 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/SafeMaterialDetailDto.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/SafeMaterialDetailDto.java
@@ -77,6 +77,12 @@
      */
     private String claimantName;
 
+    /**
+     * 安全物资管理id
+     * @return
+     */
+    private Long smId;
+
     public Long getId() {
         return id;
     }
@@ -212,4 +218,12 @@
     public void setValidTypeName(String validTypeName) {
         this.validTypeName = validTypeName;
     }
+
+    public Long getSmId() {
+        return smId;
+    }
+
+    public void setSmId(Long smId) {
+        this.smId = smId;
+    }
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/SafeMaterialDto.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/SafeMaterialDto.java
index 4bd30ce..6e0e6d2 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/SafeMaterialDto.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/SafeMaterialDto.java
@@ -16,9 +16,11 @@
     /**
      * 物资类型id
      */
-    private Long materialClassifyId;
+    private Long bigClassifyId;
 
-    private String materialClassifyName;
+    private String bigClassifyName;
+
+    private Long smallClassifyId;
     /**
      * 部门id
      */
@@ -58,21 +60,7 @@
         this.serialNum = serialNum;
     }
 
-    public Long getMaterialClassifyId() {
-        return materialClassifyId;
-    }
 
-    public void setMaterialClassifyId(Long materialClassifyId) {
-        this.materialClassifyId = materialClassifyId;
-    }
-
-    public String getMaterialClassifyName() {
-        return materialClassifyName;
-    }
-
-    public void setMaterialClassifyName(String materialClassifyName) {
-        this.materialClassifyName = materialClassifyName;
-    }
 
     public Long getDepId() {
         return depId;
@@ -122,5 +110,27 @@
         this.validStockCount = validStockCount;
     }
 
+    public Long getBigClassifyId() {
+        return bigClassifyId;
+    }
 
+    public void setBigClassifyId(Long bigClassifyId) {
+        this.bigClassifyId = bigClassifyId;
+    }
+
+    public String getBigClassifyName() {
+        return bigClassifyName;
+    }
+
+    public void setBigClassifyName(String bigClassifyName) {
+        this.bigClassifyName = bigClassifyName;
+    }
+
+    public Long getSmallClassifyId() {
+        return smallClassifyId;
+    }
+
+    public void setSmallClassifyId(Long smallClassifyId) {
+        this.smallClassifyId = smallClassifyId;
+    }
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/SafeRfidMaterialDetailDto.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/SafeRfidMaterialDetailDto.java
new file mode 100644
index 0000000..3c0cc11
--- /dev/null
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/model/dto/resp/SafeRfidMaterialDetailDto.java
@@ -0,0 +1,52 @@
+package com.gkhy.safePlatform.equipment.model.dto.resp;
+
+public class SafeRfidMaterialDetailDto {
+    private Long id;
+    private String name;
+
+    private Long bigClassifyId;
+
+    private Long smallClassifyId;
+
+    private Long depId;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Long getBigClassifyId() {
+        return bigClassifyId;
+    }
+
+    public void setBigClassifyId(Long bigClassifyId) {
+        this.bigClassifyId = bigClassifyId;
+    }
+
+    public Long getSmallClassifyId() {
+        return smallClassifyId;
+    }
+
+    public void setSmallClassifyId(Long smallClassifyId) {
+        this.smallClassifyId = smallClassifyId;
+    }
+
+    public Long getDepId() {
+        return depId;
+    }
+
+    public void setDepId(Long depId) {
+        this.depId = depId;
+    }
+}
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/repository/SafeMaterialClassifyInfoRepository.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/repository/SafeMaterialClassifyInfoRepository.java
index 4e6244f..b04f699 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/repository/SafeMaterialClassifyInfoRepository.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/repository/SafeMaterialClassifyInfoRepository.java
@@ -1,9 +1,12 @@
 package com.gkhy.safePlatform.equipment.repository;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.safePlatform.equipment.entity.SafeMaterialClassifyDO;
 import com.gkhy.safePlatform.equipment.entity.SafeMaterialClassifyInfo;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
+
+import java.util.List;
 
 @Repository
 public interface SafeMaterialClassifyInfoRepository extends BaseMapper<SafeMaterialClassifyInfo> {
@@ -14,4 +17,9 @@
 
     SafeMaterialClassifyInfo queryById(@Param("id") Long id);
 
+    List<SafeMaterialClassifyInfo> getListByParentId(Long parentId);
+
+    SafeMaterialClassifyDO getBigAndSmallClassify(Long smallClassifyId);
+
+    List<SafeMaterialClassifyDO> getTraceabilityClassifyList(List<Long> smallClassifyIds);
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/repository/SafeMaterialDetailInfoRepository.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/repository/SafeMaterialDetailInfoRepository.java
index 4dddeca..709805c 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/repository/SafeMaterialDetailInfoRepository.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/repository/SafeMaterialDetailInfoRepository.java
@@ -2,10 +2,7 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.gkhy.safePlatform.equipment.entity.SafeMaterialDetailBO;
-import com.gkhy.safePlatform.equipment.entity.SafeMaterialDetailInfo;
-import com.gkhy.safePlatform.equipment.entity.SafeMaterialDetailCountDO;
-import com.gkhy.safePlatform.equipment.entity.SafeMaterialDetailInfoDO;
+import com.gkhy.safePlatform.equipment.entity.*;
 import com.gkhy.safePlatform.equipment.model.dto.req.SafeMatetrialDetailQuery;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
@@ -43,4 +40,16 @@
     int getCountBySmId(Long smId);
 
     void updateValidStatus(@Param("id") Long id, @Param("validStatus")Byte validStatus);
+
+    List<Long> getRfidNotNullList(@Param("count") Integer count,@Param("smId")Long smId);
+
+    List<Long> getRfidNullList(@Param("count") Integer count,@Param("smId") Long smId);
+
+    List<Long> getIdListByRfid(Integer count, Long smId, String rfid);
+
+    List<SafeMaterialClassifyStockDO> getSmallClassifyStockByIds(@Param("smallClassifyIds") List<Long> smallClassifyIds);
+
+    List<SafeMaterialDetailDO> getListBySmallClassifyIds(List<Long> smallClassifyIds,@Param("depIds") List<Long> depIds);
+
+    List<SafeMaterialDetailInfoDO> getListByRfids(List<String> rfids);
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/repository/SafeMaterialInfoRepository.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/repository/SafeMaterialInfoRepository.java
index 08938b6..dc85ce8 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/repository/SafeMaterialInfoRepository.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/repository/SafeMaterialInfoRepository.java
@@ -22,6 +22,7 @@
     int deleteBatch(List<Long> ids);
 
     List<SafeMaterialDO> listByConditions(Page<SafeMaterialDO> page, @Param("query") SafeMaterialQuery query);
+    int getCountBySmallClassifyId(Long smallClassifyId);
 
-
+    Integer checkMatrial(@Param("smallClassifyId") Long smallClassifyId, @Param("depId") Long depId,@Param("id")  Long id);
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/MaterialClassifyService.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/MaterialClassifyService.java
index bc84115..538ff9b 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/MaterialClassifyService.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/MaterialClassifyService.java
@@ -2,15 +2,17 @@
 
 import com.gkhy.safePlatform.commons.co.ContextCacheUser;
 import com.gkhy.safePlatform.commons.vo.ResultVO;
+import com.gkhy.safePlatform.equipment.entity.SafeMaterialClassifyDO;
 import com.gkhy.safePlatform.equipment.model.dto.req.SafeMaterialClassifyAddReq;
 import com.gkhy.safePlatform.equipment.model.dto.req.SafeMaterialClassifyModReq;
 import com.gkhy.safePlatform.equipment.model.dto.req.SafeMaterialClassifyQuery;
 import com.gkhy.safePlatform.equipment.model.dto.resp.SafeMaterialClassifyDto;
+import com.gkhy.safePlatform.equipment.model.dto.resp.SafeMaterialClassifyStockDto;
 
 import java.util.List;
 
 public interface MaterialClassifyService {
-    ResultVO<List<SafeMaterialClassifyDto>> list(SafeMaterialClassifyQuery query);
+    List<SafeMaterialClassifyDto> list();
 
     ResultVO save(ContextCacheUser currentUser, SafeMaterialClassifyAddReq req);
 
@@ -18,5 +20,11 @@
 
     ResultVO delete(Long id);
 
-    ResultVO<SafeMaterialClassifyDto> queryById(Long id);
+    SafeMaterialClassifyDto queryById(Long id);
+
+    SafeMaterialClassifyDO getBigAndSmallClassifyInfo(Long smallClassifyId);
+    List<SafeMaterialClassifyDto> getClassifyListByIds(List<Long> ids);
+
+    List<SafeMaterialClassifyDO> getTraceabilityClassifyList(List<Long> smallClassifyIds);
+
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/SafeMaterialDetailService.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/SafeMaterialDetailService.java
index 89985a2..1d7ce83 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/SafeMaterialDetailService.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/SafeMaterialDetailService.java
@@ -4,7 +4,9 @@
 import com.gkhy.safePlatform.commons.vo.ResultVO;
 import com.gkhy.safePlatform.commons.vo.SearchResultVO;
 import com.gkhy.safePlatform.equipment.model.dto.req.*;
+import com.gkhy.safePlatform.equipment.model.dto.resp.SafeMaterialClassifyStockDto;
 import com.gkhy.safePlatform.equipment.model.dto.resp.SafeMaterialDetailDto;
+import com.gkhy.safePlatform.equipment.model.dto.resp.SafeRfidMaterialDetailDto;
 
 import java.util.List;
 
@@ -34,5 +36,9 @@
     SearchResultVO<List<SafeMaterialDetailDto>> listByPage(PageQuery<SafeMatetrialDetailQuery> pageQuery);
 
     ResultVO queryById(Long id);
+    List<SafeMaterialClassifyStockDto> getSmallClassifyStockByIds(List<Long> smallClassifyIds);
+    void deliveryBatchSpw(MaterialSpwReq req);
+
+    List<SafeRfidMaterialDetailDto> getListByRfids(List<String> rfids);
 
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/SafeMaterialClassifyInfoService.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/SafeMaterialClassifyInfoService.java
index ba1af0a..9c0c3d4 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/SafeMaterialClassifyInfoService.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/SafeMaterialClassifyInfoService.java
@@ -1,7 +1,9 @@
 package com.gkhy.safePlatform.equipment.service.baseService;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.safePlatform.equipment.entity.SafeMaterialClassifyDO;
 import com.gkhy.safePlatform.equipment.entity.SafeMaterialClassifyInfo;
+import com.gkhy.safePlatform.equipment.entity.SafeMaterialClassifyStockDO;
 import com.gkhy.safePlatform.equipment.model.dto.req.SafeMaterialClassifyQuery;
 import com.gkhy.safePlatform.equipment.model.dto.resp.SafeMaterialClassifyDto;
 
@@ -15,7 +17,16 @@
 
     int update(SafeMaterialClassifyInfo classifyInfo);
 
-    List<SafeMaterialClassifyInfo> listByCondition(SafeMaterialClassifyQuery query);
+    List<SafeMaterialClassifyInfo> list();
 
     List<SafeMaterialClassifyInfo> getList();
+
+    List<SafeMaterialClassifyInfo> getListByParentId(Long parentId);
+
+    SafeMaterialClassifyDO getBigAndSmallClassify(Long smallClassifyId);
+
+    List<SafeMaterialClassifyInfo> getClassifyListByIds(List<Long> smallClassifyIds);
+
+    List<SafeMaterialClassifyDO> getTraceabilityClassifyList(List<Long> smallClassifyIds);
+
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/SafeMaterialDetailInfoService.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/SafeMaterialDetailInfoService.java
index b32d6ce..9981f0e 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/SafeMaterialDetailInfoService.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/SafeMaterialDetailInfoService.java
@@ -2,10 +2,7 @@
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.gkhy.safePlatform.equipment.entity.SafeMaterialDetailBO;
-import com.gkhy.safePlatform.equipment.entity.SafeMaterialDetailInfo;
-import com.gkhy.safePlatform.equipment.entity.SafeMaterialDetailCountDO;
-import com.gkhy.safePlatform.equipment.entity.SafeMaterialDetailInfoDO;
+import com.gkhy.safePlatform.equipment.entity.*;
 import com.gkhy.safePlatform.equipment.model.dto.req.SafeMatetrialDetailQuery;
 
 import java.util.List;
@@ -42,4 +39,18 @@
     int getCountBySmId(Long smId);
 
     void updateValidStatus(Long id);
+
+    List<Long> getRfidNotNullList(Integer count, Long smId);
+
+
+    List<Long> getRfidNullList(Integer count, Long smId);
+
+    List<Long> getIdListByRfid(Integer count, Long smId, String rfid);
+
+    List<SafeMaterialClassifyStockDO> getSmallClassifyStockByIds(List<Long> smallClassifyIds);
+
+    List<SafeMaterialDetailDO> getListBySmallClassifyIds(List<Long> smallClassifyIds,List<Long> depIds);
+
+    List<SafeMaterialDetailInfoDO> getListByRfids(List<String> rfid);
+
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/SafeMaterialInfoService.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/SafeMaterialInfoService.java
index c12986a..c7ffb01 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/SafeMaterialInfoService.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/SafeMaterialInfoService.java
@@ -13,7 +13,7 @@
 
     SafeMaterialInfo queryById(Long id);
 
-    int getCountByClassify(Long classifyId);
+
 
     int deleteBatch(List<Long> ids);
 
@@ -22,4 +22,7 @@
     List<SafeMaterialDO> listByPage(Page<SafeMaterialDO> page, SafeMaterialQuery query);
 
 
+    int getCountBySmallClassifyId(Long smallClassifyId);
+
+    boolean checkMaterial(Long smallClassifyId, Long depId, Long id);
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/impl/SafeMaterialClassifyInfoServiceImpl.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/impl/SafeMaterialClassifyInfoServiceImpl.java
index a5a0d15..64d1a22 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/impl/SafeMaterialClassifyInfoServiceImpl.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/impl/SafeMaterialClassifyInfoServiceImpl.java
@@ -4,15 +4,18 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gkhy.safePlatform.commons.enums.ResultCodes;
 import com.gkhy.safePlatform.commons.utils.StringUtils;
-import com.gkhy.safePlatform.equipment.entity.SafeMaterialClassifyInfo;
-import com.gkhy.safePlatform.equipment.entity.SafeMaterialInfo;
+import com.gkhy.safePlatform.equipment.entity.*;
+import com.gkhy.safePlatform.equipment.enums.IssueReceiptEnum;
+import com.gkhy.safePlatform.equipment.enums.ValidStatusEnum;
 import com.gkhy.safePlatform.equipment.excepiton.EquipmentException;
 import com.gkhy.safePlatform.equipment.model.dto.req.SafeMaterialClassifyQuery;
 import com.gkhy.safePlatform.equipment.repository.SafeMaterialClassifyInfoRepository;
 import com.gkhy.safePlatform.equipment.service.baseService.SafeMaterialClassifyInfoService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
+import java.io.InputStream;
 import java.util.List;
 
 @Service("SafeMaterialClassifyInfoService")
@@ -47,17 +50,55 @@
         return repository.queryById(id);
     }
     @Override
-    public List<SafeMaterialClassifyInfo> listByCondition(SafeMaterialClassifyQuery query){
+    public List<SafeMaterialClassifyInfo> list(){
         List<SafeMaterialClassifyInfo> list = repository.selectList(new LambdaQueryWrapper<SafeMaterialClassifyInfo>()
                 .eq(SafeMaterialClassifyInfo::getDelFlag, 0)
-                .like(StringUtils.isNotBlank(query.getMaterialClassifyName()), SafeMaterialClassifyInfo::getMaterialClassifyName, query.getMaterialClassifyName())
         );
         return list;
     }
 
     @Override
     public List<SafeMaterialClassifyInfo> getList(){
-        List<SafeMaterialClassifyInfo> list = repository.selectList(new LambdaQueryWrapper<SafeMaterialClassifyInfo>());
+        List<SafeMaterialClassifyInfo> list = repository.selectList(new LambdaQueryWrapper<SafeMaterialClassifyInfo>()
+                .eq(SafeMaterialClassifyInfo::getDelFlag,0)
+                .eq(SafeMaterialClassifyInfo::getParentId,0l));
         return list;
     }
+
+    @Override
+    public List<SafeMaterialClassifyInfo> getListByParentId(Long parentId) {
+       if(null == parentId){
+           throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL);
+       }
+        return repository.getListByParentId(parentId);
+    }
+
+    @Override
+    public SafeMaterialClassifyDO getBigAndSmallClassify(Long smallClassifyId) {
+        if(null == smallClassifyId){
+            throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL);
+        }
+        return repository.getBigAndSmallClassify(smallClassifyId);
+    }
+
+    @Override
+    public List<SafeMaterialClassifyInfo> getClassifyListByIds(List<Long> ids) {
+       if(CollectionUtils.isEmpty(ids)){
+           throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL);
+       }
+        return repository.selectList(new LambdaQueryWrapper<SafeMaterialClassifyInfo>()
+                .eq(SafeMaterialClassifyInfo::getDelFlag,0)
+                .in(SafeMaterialClassifyInfo::getId,ids)
+        );
+    }
+
+    @Override
+    public List<SafeMaterialClassifyDO> getTraceabilityClassifyList(List<Long> smallClassifyIds) {
+       if(CollectionUtils.isEmpty(smallClassifyIds)){
+           throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL);
+        }
+        return repository.getTraceabilityClassifyList(smallClassifyIds);
+    }
+
+
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/impl/SafeMaterialDetailInfoServiceImpl.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/impl/SafeMaterialDetailInfoServiceImpl.java
index 1107562..65de141 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/impl/SafeMaterialDetailInfoServiceImpl.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/impl/SafeMaterialDetailInfoServiceImpl.java
@@ -1,12 +1,11 @@
 package com.gkhy.safePlatform.equipment.service.baseService.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gkhy.safePlatform.commons.enums.ResultCodes;
-import com.gkhy.safePlatform.equipment.entity.SafeMaterialDetailBO;
-import com.gkhy.safePlatform.equipment.entity.SafeMaterialDetailInfo;
-import com.gkhy.safePlatform.equipment.entity.SafeMaterialDetailCountDO;
-import com.gkhy.safePlatform.equipment.entity.SafeMaterialDetailInfoDO;
+import com.gkhy.safePlatform.commons.utils.StringUtils;
+import com.gkhy.safePlatform.equipment.entity.*;
 import com.gkhy.safePlatform.equipment.enums.IssueReceiptEnum;
 import com.gkhy.safePlatform.equipment.enums.ValidStatusEnum;
 import com.gkhy.safePlatform.equipment.excepiton.EquipmentException;
@@ -14,6 +13,7 @@
 import com.gkhy.safePlatform.equipment.repository.SafeMaterialDetailInfoRepository;
 import com.gkhy.safePlatform.equipment.service.baseService.SafeMaterialDetailInfoService;
 import jodd.util.StringUtil;
+import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -143,5 +143,50 @@
         repository.updateValidStatus(id,ValidStatusEnum.NO.getCode());
     }
 
+    @Override
+    public List<Long> getRfidNotNullList(Integer count,Long smId) {
+        if(null == count || null == smId){
+            throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL);
+        }
+        return repository.getRfidNotNullList(count,smId);
+    }
+
+    @Override
+    public List<Long> getRfidNullList(Integer count,Long smId) {
+        if(null == count || null == smId){
+            throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL);
+        }
+        return repository.getRfidNullList(count,smId);
+    }
+
+    @Override
+    public List<Long> getIdListByRfid(Integer count, Long smId, String rfid) {
+        return repository.getIdListByRfid(count,smId,rfid);
+    }
+
+    @Override
+    public List<SafeMaterialClassifyStockDO> getSmallClassifyStockByIds(List<Long> smallClassifyIds) {
+        if(CollectionUtils.isEmpty(smallClassifyIds) ){
+            throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL);
+        }
+        return repository.getSmallClassifyStockByIds(smallClassifyIds);
+    }
+
+    @Override
+    public List<SafeMaterialDetailDO> getListBySmallClassifyIds(List<Long> smallClassifyIds,List<Long> depIds) {
+        if(CollectionUtils.isEmpty(smallClassifyIds) || CollectionUtils.isEmpty(depIds)){
+            throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL);
+        }
+        return repository.getListBySmallClassifyIds(smallClassifyIds,depIds);
+    }
+
+    @Override
+    public List<SafeMaterialDetailInfoDO> getListByRfids(List<String> rfids) {
+        if(CollectionUtils.isEmpty(rfids)){
+            throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL);
+        }
+        return repository.getListByRfids(rfids);
+    }
+
 
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/impl/SafeMaterialInfoServiceImpl.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/impl/SafeMaterialInfoServiceImpl.java
index 6c6d4cd..d919c33 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/impl/SafeMaterialInfoServiceImpl.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/baseService/impl/SafeMaterialInfoServiceImpl.java
@@ -42,17 +42,6 @@
         return safeMaterialInfo;
     }
 
-    /**
-     * 根据类型统计数据
-     */
-    @Override
-    public int getCountByClassify(Long classifyId){
-        if(null == classifyId){
-            throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL);
-        }
-        return repository.getCountByClassify(classifyId);
-    }
-
     @Override
     public int deleteBatch(List<Long> ids) {
         if(null == ids || ids.size() == 0){
@@ -76,5 +65,26 @@
         return materialInfoList;
     }
 
+    @Override
+    public int getCountBySmallClassifyId(Long smallClassifyId) {
+        if(null == smallClassifyId){
+            throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL);
+        }
+        return repository.getCountBySmallClassifyId(smallClassifyId);
+    }
+
+    @Override
+    public boolean checkMaterial(Long smallClassifyId, Long depId, Long id) {
+        if(null == depId || null == smallClassifyId){
+            throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL);
+        }
+        boolean flag = false;
+        int i = repository.checkMatrial(smallClassifyId,depId,id);
+        if (i>0){
+            flag = true;
+        }
+        return flag;
+    }
+
 
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/impl/MaterialClassifyServiceImpl.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/impl/MaterialClassifyServiceImpl.java
index b71a9eb..c4a001d 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/impl/MaterialClassifyServiceImpl.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/impl/MaterialClassifyServiceImpl.java
@@ -1,25 +1,27 @@
 package com.gkhy.safePlatform.equipment.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.gkhy.safePlatform.commons.co.ContextCacheUser;
 import com.gkhy.safePlatform.commons.enums.ResultCodes;
-import com.gkhy.safePlatform.commons.utils.StringUtils;
 import com.gkhy.safePlatform.commons.vo.ResultVO;
+import com.gkhy.safePlatform.equipment.entity.SafeMaterialClassifyDO;
 import com.gkhy.safePlatform.equipment.entity.SafeMaterialClassifyInfo;
+import com.gkhy.safePlatform.equipment.enums.EquipmentResultCodes;
 import com.gkhy.safePlatform.equipment.excepiton.EquipmentException;
 import com.gkhy.safePlatform.equipment.model.dto.req.SafeMaterialClassifyAddReq;
 import com.gkhy.safePlatform.equipment.model.dto.req.SafeMaterialClassifyModReq;
-import com.gkhy.safePlatform.equipment.model.dto.req.SafeMaterialClassifyQuery;
 import com.gkhy.safePlatform.equipment.model.dto.resp.SafeMaterialClassifyDto;
+import com.gkhy.safePlatform.equipment.model.dto.resp.SafeMaterialClassifyStockDto;
 import com.gkhy.safePlatform.equipment.service.MaterialClassifyService;
 import com.gkhy.safePlatform.equipment.service.baseService.SafeMaterialClassifyInfoService;
 import com.gkhy.safePlatform.equipment.service.baseService.SafeMaterialInfoService;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Service("MaterialClassifyService")
 public class MaterialClassifyServiceImpl implements MaterialClassifyService {
@@ -29,25 +31,50 @@
     private SafeMaterialInfoService safeMaterialInfoService;
 
     @Override
-    public ResultVO<List<SafeMaterialClassifyDto>> list(SafeMaterialClassifyQuery query) {
-        List<SafeMaterialClassifyInfo> list = safeMaterialClassifyInfoService.listByCondition(query);
-        List<SafeMaterialClassifyDto> respList = new ArrayList<>();
-        if(!CollectionUtils.isEmpty(list)){
-            for(SafeMaterialClassifyInfo classifyInfo : list){
-                SafeMaterialClassifyDto respDTO = new SafeMaterialClassifyDto();
-                respDTO.setId(classifyInfo.getId());
-                respDTO.setMaterialClassifyName(classifyInfo.getMaterialClassifyName());
-                respList.add(respDTO);
+    public List<SafeMaterialClassifyDto> list() {
+        List<SafeMaterialClassifyInfo> list = safeMaterialClassifyInfoService.list();
+        //过滤出父级
+        List<SafeMaterialClassifyInfo> parentList = list
+                .stream()
+                .filter(item -> item.getParentId().equals(0l))
+                .collect(Collectors.toList());
+        List<SafeMaterialClassifyDto> respDTOList = new ArrayList<>();
+        //只有二级不采用递归
+        for (SafeMaterialClassifyInfo classifyInfo:parentList) {
+            SafeMaterialClassifyDto respDTO = new SafeMaterialClassifyDto();
+            respDTO.setId(classifyInfo.getId());
+            respDTO.setMaterialClassifyName(classifyInfo.getMaterialClassifyName());
+            respDTO.setParentId(classifyInfo.getParentId());
+            List<SafeMaterialClassifyInfo> childList = list
+                    .stream()
+                    .filter(item -> item.getParentId().equals(classifyInfo.getId()))
+                    .collect(Collectors.toList());
+            List<SafeMaterialClassifyDto> childDTOList = new ArrayList<>();
+            for (SafeMaterialClassifyInfo child:childList){
+                SafeMaterialClassifyDto childDTO = new SafeMaterialClassifyDto();
+                childDTO.setId(child.getId());
+                childDTO.setMaterialClassifyName(child.getMaterialClassifyName());
+                childDTO.setParentId(child.getParentId());
+                childDTOList.add(childDTO);
             }
+            respDTO.setChildList(childDTOList);
+            respDTOList.add(respDTO);
         }
-        return new ResultVO<>(ResultCodes.OK,respList);
+
+        return respDTOList;
     }
 
     @Override
     public ResultVO save(ContextCacheUser currentUser, SafeMaterialClassifyAddReq req) {
         ResultVO resultVO = null;
+
         SafeMaterialClassifyInfo classifyInfo = new SafeMaterialClassifyInfo();
         classifyInfo.setMaterialClassifyName(req.getMaterialClassifyName());
+        if(null != req.getParentId()){
+            classifyInfo.setParentId(req.getParentId());
+        }else{
+            classifyInfo.setParentId(0l);
+        }
         boolean flag = safeMaterialClassifyInfoService.save(classifyInfo);
         if (flag){
             resultVO = new ResultVO(ResultCodes.OK);
@@ -80,35 +107,98 @@
         if(id == null){
             throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL);
         }
-        ResultVO resultVO = null;
-        //判断是否被绑定
-        int count = safeMaterialInfoService.getCountByClassify(id);
-        if(count > 0){
-            throw new EquipmentException(ResultCodes.SERVER_DEL_ERROR,"该类型已被绑定,不可删除!");
-        }else{
-            //如果没有被绑定,逻辑删除
-            SafeMaterialClassifyInfo classifyInfo = new SafeMaterialClassifyInfo();
-            classifyInfo.setId(id);
-            classifyInfo.setDelFlag(1);
-            boolean flag = safeMaterialClassifyInfoService.updateById(classifyInfo);
-            if (flag){
-                resultVO = new ResultVO(ResultCodes.OK);
-            }else {
-                resultVO = new ResultVO(ResultCodes.SERVER_DEL_ERROR);
+        SafeMaterialClassifyInfo classify = safeMaterialClassifyInfoService.queryById(id);
+        if(null == classify){
+            throw new EquipmentException(EquipmentResultCodes.DATA_NOT_EXIST);
+        }
+        if(0 == classify.getParentId()){//一级
+            List<SafeMaterialClassifyInfo> childrenList = safeMaterialClassifyInfoService.getListByParentId(id);
+            if (childrenList.size()>0){
+                throw new EquipmentException(ResultCodes.SERVER_DEL_ERROR,"改类型存在小类,不可删除!");
+            }
+        }else {//二级
+            //判断是否被绑定
+            int count = safeMaterialInfoService.getCountBySmallClassifyId(id);
+            if(count > 0){
+                throw new EquipmentException(ResultCodes.SERVER_DEL_ERROR,"该类型已被绑定,不可删除!");
             }
         }
-        return  resultVO;
+        //如果没有被绑定,逻辑删除
+        SafeMaterialClassifyInfo classifyInfo = new SafeMaterialClassifyInfo();
+        classifyInfo.setId(id);
+        classifyInfo.setDelFlag(1);
+        safeMaterialClassifyInfoService.updateById(classifyInfo);
+
+        return new ResultVO(ResultCodes.OK);
     }
 
     @Override
-    public ResultVO<SafeMaterialClassifyDto> queryById(Long id) {
+    public SafeMaterialClassifyDto queryById(Long id) {
         if(id == null){
             throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL);
         }
         SafeMaterialClassifyInfo classifyInfo = safeMaterialClassifyInfoService.queryById(id);
+        if(null == classifyInfo){
+            throw new EquipmentException(EquipmentResultCodes.DATA_NOT_EXIST);
+        }
+        List<SafeMaterialClassifyInfo> childList = new ArrayList<>();
+        if(0l ==  classifyInfo.getParentId()){
+            childList = safeMaterialClassifyInfoService.getListByParentId(id);
+        }
         SafeMaterialClassifyDto respDTO = new SafeMaterialClassifyDto();
         respDTO.setId(classifyInfo.getId());
         respDTO.setMaterialClassifyName(classifyInfo.getMaterialClassifyName());
-        return new ResultVO<>(ResultCodes.OK,respDTO);
+        respDTO.setParentId(classifyInfo.getParentId());
+        List<SafeMaterialClassifyDto> childDtoList = new ArrayList<>();
+        for (SafeMaterialClassifyInfo child:childList){
+            SafeMaterialClassifyDto childDto = new SafeMaterialClassifyDto();
+            childDto.setId(child.getId());
+            childDto.setMaterialClassifyName(child.getMaterialClassifyName());
+            childDto.setParentId(child.getParentId());
+            childDtoList.add(childDto);
+        }
+        respDTO.setChildList(childDtoList);
+        return respDTO;
     }
+
+    /**
+     * 根据小类id获取大小类相关信息
+     * @param smallClassifyId
+     * @return
+     */
+    public SafeMaterialClassifyDO getBigAndSmallClassifyInfo(Long smallClassifyId){
+        if(null == smallClassifyId){
+            throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL);
+        }
+        SafeMaterialClassifyDO classifyDO = safeMaterialClassifyInfoService.getBigAndSmallClassify(smallClassifyId);
+        return classifyDO;
+    }
+    /**
+     * 根据小类ids获取小类相关信息
+     * @param ids
+     * @return
+     */
+    public List<SafeMaterialClassifyDto> getClassifyListByIds(List<Long> ids){
+        if(CollectionUtils.isEmpty(ids)){
+            throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL);
+        }
+        List<SafeMaterialClassifyInfo> list = safeMaterialClassifyInfoService.getClassifyListByIds(ids);
+        List<SafeMaterialClassifyDto> classifyDtoList = new ArrayList<>();
+        for (SafeMaterialClassifyInfo classifyInfo:list){
+            SafeMaterialClassifyDto classifyDto = new SafeMaterialClassifyDto();
+            BeanUtils.copyProperties(classifyInfo,classifyDto);
+            classifyDtoList.add(classifyDto);
+        }
+        return classifyDtoList;
+    }
+
+    @Override
+    public List<SafeMaterialClassifyDO> getTraceabilityClassifyList(List<Long> smallClassifyIds) {
+        if(CollectionUtils.isEmpty(smallClassifyIds)){
+            throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL);
+        }
+        return safeMaterialClassifyInfoService.getTraceabilityClassifyList(smallClassifyIds);
+    }
+
+
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/impl/SafeMaterialDetailServiceImpl.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/impl/SafeMaterialDetailServiceImpl.java
index 72cc374..ff396c5 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/impl/SafeMaterialDetailServiceImpl.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/impl/SafeMaterialDetailServiceImpl.java
@@ -14,7 +14,9 @@
 import com.gkhy.safePlatform.equipment.enums.*;
 import com.gkhy.safePlatform.equipment.excepiton.EquipmentException;
 import com.gkhy.safePlatform.equipment.model.dto.req.*;
+import com.gkhy.safePlatform.equipment.model.dto.resp.SafeMaterialClassifyStockDto;
 import com.gkhy.safePlatform.equipment.model.dto.resp.SafeMaterialDetailDto;
+import com.gkhy.safePlatform.equipment.model.dto.resp.SafeRfidMaterialDetailDto;
 import com.gkhy.safePlatform.equipment.mq.msg.SafeMaterialMsg;
 import com.gkhy.safePlatform.equipment.service.SafeMaterialDetailService;
 import com.gkhy.safePlatform.equipment.service.baseService.SafeMaterialClassifyInfoService;
@@ -27,14 +29,12 @@
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.time.ZonedDateTime;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service("SafeMaterialDetailService")
@@ -93,8 +93,9 @@
                 String rfid = "0000000".substring(0,(8 - countStr.length()))+countStr;
                 SafeMaterialDetailInfo materialDetailInfo = new SafeMaterialDetailInfo();
                 materialDetailInfo.setId(IdUtil.getSnowflake(0,0).nextId());
-                materialDetailInfo.setMaterialClassifyId(materialInfo.getMaterialClassifyId());
-                materialDetailInfo.setName(materialInfo.getMaterialName()+"(ID"+materialInfo.getId()+")");
+                materialDetailInfo.setBigClassifyId(materialInfo.getBigClassifyId());
+                materialDetailInfo.setSmallClassifyId(materialInfo.getSmallClassifyId());
+                materialDetailInfo.setName(materialInfo.getMaterialName());
                 materialDetailInfo.setSmId(req.getSmId());
                 materialDetailInfo.setConsumable(materialInfo.getConsumable());
                 materialDetailInfo.setValidType(req.getValidType());
@@ -113,8 +114,9 @@
             for(int i = 0;i < req.getWareHousingCount();i++){
                 SafeMaterialDetailInfo materialDetailInfo = new SafeMaterialDetailInfo();
                 materialDetailInfo.setId(IdUtil.getSnowflake(0,0).nextId());
-                materialDetailInfo.setMaterialClassifyId(materialInfo.getMaterialClassifyId());
-                materialDetailInfo.setName(materialInfo.getMaterialName()+"(ID"+materialInfo.getId()+")");
+                materialDetailInfo.setBigClassifyId(materialInfo.getBigClassifyId());
+                materialDetailInfo.setSmallClassifyId(materialInfo.getSmallClassifyId());
+                materialDetailInfo.setName(materialInfo.getMaterialName());
                 materialDetailInfo.setSmId(req.getSmId());
                 materialDetailInfo.setConsumable(materialInfo.getConsumable());
                 materialDetailInfo.setValidType(req.getValidType());
@@ -169,8 +171,9 @@
         for(int i = 0;i < req.getWareHousingCount();i++){
             SafeMaterialDetailInfo materialDetailInfo = new SafeMaterialDetailInfo();
             materialDetailInfo.setId(IdUtil.getSnowflake(0,0).nextId());
-            materialDetailInfo.setMaterialClassifyId(materialInfo.getMaterialClassifyId());
-            materialDetailInfo.setName(materialInfo.getMaterialName()+"(ID"+materialInfo.getId()+")");
+            materialDetailInfo.setBigClassifyId(materialInfo.getBigClassifyId());
+            materialDetailInfo.setSmallClassifyId(materialInfo.getSmallClassifyId());
+            materialDetailInfo.setName(materialInfo.getMaterialName());
             materialDetailInfo.setSmId(req.getSmId());
             materialDetailInfo.setConsumable(materialInfo.getConsumable());
             materialDetailInfo.setValidType(req.getValidType());
@@ -258,10 +261,10 @@
         List<SafeMaterialDetailInfo> list = safeMaterialDetailInfoService.getListByIds(idList);
         List<SafeMaterialDetailInfo> selectList = list
                 .stream()
-                .filter(item -> item.getIrStatus().equals(IssueReceiptEnum.OUT_OF_LIBRARY.getCode()))
+                .filter(item -> item.getIrStatus().equals(IssueReceiptEnum.OUT_OF_LIBRARY.getCode()) && item.getConsumable().equals(ConsumableEnum.YES.getCode()))
                 .collect(Collectors.toList());
         if(selectList.size() != ids.length){
-            throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"已入库物资不可重复入库!");
+            throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"已入库或耗材物资不可重复入库!");
         }
         //修改为入库状态
         safeMaterialDetailInfoService.updateReceiptStatusByIds(idList,IssueReceiptEnum.IN_THE_LIBRARY.getCode());
@@ -311,18 +314,141 @@
     @Override
     public ResultVO deliveryBatchRandom(MterialRandomDeliveryReq req) {
         UserInfoRPCRespDTO userInfo = getUserInfo(req.getClaimantId());
+        List<Long> idList = new ArrayList<>();
+        if(StringUtils.isNotBlank(req.getRfid())){
+            idList = safeMaterialDetailInfoService.getIdListByRfid(req.getCount(),req.getSmId(),req.getRfid());
+
+        }else{
+            idList = safeMaterialDetailInfoService.getRfidNullList(req.getCount(), req.getSmId());
+
+        }
+        if(idList.size()< req.getCount()){
+            throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"有效库存数量不足!");
+        }
         //获取有效数量
         Integer validStockCount = safeMaterialDetailInfoService.getValidStockCount(req.getSmId());
         if(req.getCount() > validStockCount){
             throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"出库数量不可大于有效库存数量!");
         }
-
         SafeMaterialDetailBO detailBO = new SafeMaterialDetailBO();
-        detailBO.setCount(req.getCount());
         detailBO.setClaimantName(userInfo.getUsername());
         detailBO.setClaimantId(req.getClaimantId());
-        safeMaterialDetailInfoService.deliveryBatchRandom(detailBO);
+        detailBO.setIds(idList);
+        safeMaterialDetailInfoService.updateDeliveryStatusByIds(detailBO);
         return new ResultVO(ResultCodes.OK);
+    }
+
+    /**
+     * 特殊作业物资出库
+     * @param req
+     * @return
+     */
+    @Override
+    public void deliveryBatchSpw(MaterialSpwReq req) {
+        //验证
+        if(null == req.getClaimantId()){
+            throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL,"认领人不可为空!");
+        }
+        List<MaterialSpwDeliveryReq> deliveryReqList = req.getDeliveryReqList();
+        if(CollectionUtils.isEmpty(deliveryReqList)){
+            throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL,"出库物资不可为空!");
+        }
+        //获取小类物资
+        List<Long> smallClassifyIds = deliveryReqList
+                .stream()
+                .map(MaterialSpwDeliveryReq::getSmallClassifyId)
+                .collect(Collectors.toList());
+        List<Long> depIds = deliveryReqList
+                .stream()
+                .map(MaterialSpwDeliveryReq::getDepId)
+                .collect(Collectors.toList());
+        if(smallClassifyIds.size() == 0 || depIds.size() == 0){
+            throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL,"部门/仓库或者物资类型(小类)不可为空!");
+        }
+
+        List<SafeMaterialClassifyStockDO> classifyStockList= safeMaterialDetailInfoService.getSmallClassifyStockByIds(smallClassifyIds);
+        //根据物资种类获取有效在库物资
+        List<SafeMaterialDetailDO> listBySmallClassifyIds = safeMaterialDetailInfoService.getListBySmallClassifyIds(smallClassifyIds,depIds);
+
+        for(MaterialSpwDeliveryReq deliveryReq:deliveryReqList){
+            if(null == deliveryReq.getDepId()){
+                throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL,"部门或仓库不可为空!");
+            }
+            if(null == deliveryReq.getCount()){
+                throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"出库数量不可为空!");
+            }
+            if(null == deliveryReq.getSmallClassifyId()){
+                throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL,"物资类型(小类)不可为空!");
+            }
+            List<SafeMaterialClassifyStockDO> collect = classifyStockList
+                    .stream()
+                    .filter(cs -> cs.getSmallClassifyId().equals(deliveryReq.getSmallClassifyId()) && cs.getDepId().equals(deliveryReq.getDepId())  && cs.getStockCount() >= deliveryReq.getCount())
+                    .collect(Collectors.toList());
+            if(collect.size() == 0){
+                throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"库存不足!");
+            }
+        }
+        UserInfoRPCRespDTO userInfo = getUserInfo(req.getClaimantId());
+        List<Long> ids = new ArrayList<>();
+        //循环数据
+        for(MaterialSpwDeliveryReq deliveryReq:deliveryReqList){
+            //过滤出rfid存在的数据
+            List<SafeMaterialDetailDO> selectRfidNotNull = listBySmallClassifyIds
+                    .stream()
+                    .filter(item -> null != item.getRfid() && item.getSmallClassifyId().equals(deliveryReq.getSmallClassifyId()) && item.getDepId().equals(deliveryReq.getDepId()))
+                    .collect(Collectors.toList());
+            List<Long> selectIds = new ArrayList<>();
+            if(selectRfidNotNull.size()>0){
+                selectIds = selectRfidNotNull
+                        .stream()
+                        .map(SafeMaterialDetailDO::getId)
+                        .collect(Collectors.toList());
+            }
+            if(selectRfidNotNull.size() >= deliveryReq.getCount()){
+                ids.addAll(selectIds.subList(0,deliveryReq.getCount()));
+            }else{
+                ids.addAll(selectIds);
+                List<SafeMaterialDetailDO> selectRfidIsNull = listBySmallClassifyIds
+                        .stream()
+                        .filter(item -> null == item.getRfid() && item.getSmallClassifyId().equals(deliveryReq.getSmallClassifyId()) && item.getDepId().equals(deliveryReq.getDepId()))
+                        .collect(Collectors.toList());
+
+                List<Long> collect = selectRfidIsNull.subList(0,deliveryReq.getCount()-selectRfidNotNull.size()).stream().map(SafeMaterialDetailDO::getId)
+                        .collect(Collectors.toList());
+                ids.addAll(collect);
+            }
+        }
+        SafeMaterialDetailBO detailBO = new SafeMaterialDetailBO();
+        detailBO.setClaimantName(userInfo.getUsername());
+        detailBO.setClaimantId(req.getClaimantId());
+        detailBO.setIds(ids);
+        safeMaterialDetailInfoService.updateDeliveryStatusByIds(detailBO);
+
+    }
+
+
+    /**
+     * 根据rfid获取数据信息
+     * @param rfids
+     * @return
+     */
+    @Override
+    public List<SafeRfidMaterialDetailDto> getListByRfids(List<String> rfids) {
+        if(CollectionUtils.isEmpty(rfids)){
+            throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL);
+        }
+        List<SafeMaterialDetailInfoDO> listByRfid = safeMaterialDetailInfoService.getListByRfids(rfids);
+        List<SafeRfidMaterialDetailDto> rfidMaterialDetailDtoList = new ArrayList<>();
+        for (SafeMaterialDetailInfoDO detailInfoDO:listByRfid){
+            SafeRfidMaterialDetailDto detailDto = new SafeRfidMaterialDetailDto();
+            detailDto.setId(detailInfoDO.getId());
+            detailDto.setName(detailInfoDO.getName());
+            detailDto.setBigClassifyId(detailInfoDO.getBigClassifyId());
+            detailDto.setSmallClassifyId(detailInfoDO.getSmallClassifyId());
+            detailDto.setDepId(detailInfoDO.getDepId());
+            rfidMaterialDetailDtoList.add(detailDto);
+        }
+        return rfidMaterialDetailDtoList;
     }
 
     @Override
@@ -337,7 +463,6 @@
             materialDetailDto.setValidStatusName(ValidStatusEnum.getByCode(materialDetailInfoDO.getValidStatus()).getValue());
             materialDetailDto.setValidTypeName(ValidTypeEnum.getByCode(materialDetailInfoDO.getValidType()).getValue());
             materialDetailDto.setIrStatusName(IssueReceiptEnum.getByCode(materialDetailInfoDO.getIrStatus()).getValue());
-
             detailDtoList.add(materialDetailDto);
         }
         return new SearchResultVO<>(true, page.getCurrent(),page.getSize(), page.getPages(),page.getTotal(),detailDtoList,ResultCodes.OK);
@@ -352,7 +477,7 @@
         SafeMaterialDetailDto detailDto = new SafeMaterialDetailDto();
         if(materialDetailInfo != null){
             SafeMaterialInfo materialInfo = safeMaterialInfoService.queryById(materialDetailInfo.getSmId());
-            SafeMaterialClassifyInfo classifyInfo = safeMaterialClassifyInfoService.queryById(materialDetailInfo.getMaterialClassifyId());
+            SafeMaterialClassifyInfo classifyInfo = safeMaterialClassifyInfoService.queryById(materialDetailInfo.getBigClassifyId());
             BeanUtils.copyProperties(materialDetailInfo,detailDto);
             detailDto.setConsumableName(ConsumableEnum.getByCode(materialDetailInfo.getConsumable()).getValue());
             detailDto.setValidStatusName(ValidStatusEnum.getByCode(materialDetailInfo.getValidStatus()).getValue());
@@ -416,6 +541,10 @@
         if(null == vo){
             throw new EquipmentException(EquipmentResultCodes.DATA_NOT_EXIST);
         }
+        //如果是耗材不可重新入库
+        if(vo.getConsumable().equals(ConsumableEnum.YES.getCode())){
+            throw new EquipmentException(EquipmentResultCodes.MATERIAL_CONSUMABLE);
+        }
         if(vo.getIrStatus().equals(IssueReceiptEnum.IN_THE_LIBRARY.getCode())){
             throw new EquipmentException(EquipmentResultCodes.MATERIAL_IN_THE_LIBRARY);
         }
@@ -440,6 +569,10 @@
         }
 
         if(IssueReceiptEnum.IN_THE_LIBRARY.getCode().equals(req.getIrStatus())){
+            //如果是耗材不可重新入库
+            if(vo.getConsumable().equals(ConsumableEnum.YES.getCode())){
+                throw new EquipmentException(EquipmentResultCodes.MATERIAL_CONSUMABLE);
+            }
             //重新入库
             if(vo.getIrStatus().equals(req.getIrStatus())){
                 throw new EquipmentException(EquipmentResultCodes.MATERIAL_IN_THE_LIBRARY);
@@ -498,9 +631,24 @@
         return new ResultVO<>(ResultCodes.OK);
     }
 
-
-
-
+    /**
+     * 根据小类id(物资种类)获取库存数量
+     * @param smallClassifyIds
+     * @return
+     */
+    public List<SafeMaterialClassifyStockDto> getSmallClassifyStockByIds(List<Long> smallClassifyIds) {
+        if(CollectionUtils.isEmpty(smallClassifyIds)){
+            throw new EquipmentException(ResultCodes.CLIENT_PARAM_NULL);
+        }
+        List<SafeMaterialClassifyStockDO> classifyStockList= safeMaterialDetailInfoService.getSmallClassifyStockByIds(smallClassifyIds);
+        List<SafeMaterialClassifyStockDto> classifyStockDtoList = new ArrayList<>();
+        for (SafeMaterialClassifyStockDO classifyStockDO:classifyStockList){
+            SafeMaterialClassifyStockDto classifyStockDto = new SafeMaterialClassifyStockDto();
+            BeanUtils.copyProperties(classifyStockDO,classifyStockDto);
+            classifyStockDtoList.add(classifyStockDto);
+        }
+        return classifyStockDtoList;
+    }
 
 
     private UserInfoRPCRespDTO getUserInfo(Long uid) {
@@ -537,5 +685,4 @@
         Date date = Date.from(zdt.toInstant());
         return date;
     }
-
 }
diff --git a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/impl/SafeMaterialServiceImpl.java b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/impl/SafeMaterialServiceImpl.java
index b2405da..c3eeab9 100644
--- a/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/impl/SafeMaterialServiceImpl.java
+++ b/equipment/equipment-service/src/main/java/com/gkhy/safePlatform/equipment/service/impl/SafeMaterialServiceImpl.java
@@ -52,30 +52,34 @@
         ResultVO resultVO = null;
         //获取部门信息
         DepInfoRPCRespDTO depInfo = getDepInfoByDepId(req.getDepId());
-
         if(null == ConsumableEnum.getByCode(req.getConsumable())){
             throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"耗材类型不合法!");
         }
         //获取物资类型
-        SafeMaterialClassifyInfo classifyInfo = safeMaterialClassifyInfoService.queryById(req.getMaterialClassifyId());
+        SafeMaterialClassifyInfo classifyInfo = safeMaterialClassifyInfoService.queryById(req.getSmallClassifyId());
         if(null == classifyInfo){
             throw new EquipmentException(EquipmentResultCodes.DATA_NOT_EXIST,"物资类型不存在!");
         }
+        //判断该部门是否已经创建物资
+        boolean flag = safeMaterialInfoService.checkMaterial(req.getSmallClassifyId(), req.getDepId(), null);
+        if(flag){
+            throw new EquipmentException(EquipmentResultCodes.DATA_EXIST,"该种物资已存在不可重复创建");
+        }
+
         //获取数量
         int safeMaterialTotalCount = safeMaterialInfoService.getTotalCount();
         SafeMaterialInfo safeMaterialInfo = new SafeMaterialInfo();
-        BeanUtils.copyProperties(req,safeMaterialInfo);
+        safeMaterialInfo.setConsumable(req.getConsumable());
+        safeMaterialInfo.setDepId(req.getDepId());
+        safeMaterialInfo.setSmallClassifyId(req.getSmallClassifyId());
+        safeMaterialInfo.setMaterialName(classifyInfo.getMaterialClassifyName());
         safeMaterialInfo.setDepName(depInfo.getDepName());
         safeMaterialInfo.setSerialNum(this.generateSerialNum(safeMaterialTotalCount));
+        safeMaterialInfo.setBigClassifyId(req.getBigClassifyId());
         //插入
-        boolean flag = safeMaterialInfoService.save(safeMaterialInfo);
-        if(flag){
-            resultVO = new ResultVO(ResultCodes.OK);
-        }else {
-            resultVO = new ResultVO(ResultCodes.SERVER_ADD_ERROR);
-        }
+        safeMaterialInfoService.save(safeMaterialInfo);
 
-        return resultVO;
+        return new ResultVO(ResultCodes.OK);
     }
 
     @Override
@@ -88,22 +92,25 @@
             throw new EquipmentException(ResultCodes.CLIENT_PARAM_ILLEGAL,"耗材类型不合法!");
         }
         //获取物资类型
-        SafeMaterialClassifyInfo classifyInfo = safeMaterialClassifyInfoService.queryById(req.getMaterialClassifyId());
+        SafeMaterialClassifyInfo classifyInfo = safeMaterialClassifyInfoService.queryById(req.getSmallClassifyId());
         if(null == classifyInfo){
             throw new EquipmentException(EquipmentResultCodes.DATA_NOT_EXIST,"物资类型不存在!");
         }
-        SafeMaterialInfo safeMaterialInfo = new SafeMaterialInfo();
-        BeanUtils.copyProperties(req,safeMaterialInfo);
-        safeMaterialInfo.setDepName(depInfo.getDepName());
-        //跟新
-        boolean flag = safeMaterialInfoService.updateById(safeMaterialInfo);
+        boolean flag = safeMaterialInfoService.checkMaterial(req.getSmallClassifyId(), req.getDepId(), req.getDepId());
         if(flag){
-            resultVO = new ResultVO(ResultCodes.OK);
-        }else {
-            resultVO = new ResultVO(ResultCodes.SERVER_UPDATE_ERROR);
+            throw new EquipmentException(EquipmentResultCodes.DATA_EXIST,"该种物资已存在不可重复创建");
         }
+        SafeMaterialInfo safeMaterialInfo = new SafeMaterialInfo();
+        safeMaterialInfo.setConsumable(req.getConsumable());
+        safeMaterialInfo.setDepId(req.getDepId());
+        safeMaterialInfo.setSmallClassifyId(req.getSmallClassifyId());
+        safeMaterialInfo.setMaterialName(classifyInfo.getMaterialClassifyName());
+        safeMaterialInfo.setDepName(depInfo.getDepName());
+        safeMaterialInfo.setBigClassifyId(req.getBigClassifyId());
+        //跟新
+        safeMaterialInfoService.updateById(safeMaterialInfo);
 
-        return resultVO;
+        return new ResultVO(ResultCodes.OK);
     }
 
     @Override
@@ -114,12 +121,12 @@
         SafeMaterialInfo safeMaterialInfo = safeMaterialInfoService.queryById(id);
         SafeMaterialDto safeMaterialDto = new SafeMaterialDto();
         if(null != safeMaterialInfo){
-            SafeMaterialClassifyInfo classifyInfo = safeMaterialClassifyInfoService.queryById(safeMaterialInfo.getMaterialClassifyId());
+            SafeMaterialClassifyDO classifyDO = safeMaterialClassifyInfoService.getBigAndSmallClassify(safeMaterialInfo.getSmallClassifyId());
             Integer validStockCount = safeMaterialDetailInfoService.getValidStockCount(safeMaterialInfo.getId());
             BeanUtils.copyProperties(safeMaterialInfo,safeMaterialDto);
-            safeMaterialDto.setConsumable(ConsumableEnum.getByCode(safeMaterialInfo.getConsumable()).getCode());
-            if(null != classifyInfo){
-                safeMaterialDto.setMaterialClassifyName(classifyInfo.getMaterialClassifyName());
+            safeMaterialDto.setConsumableName(ConsumableEnum.getByCode(safeMaterialInfo.getConsumable()).getValue());
+            if(null != classifyDO){
+                safeMaterialDto.setBigClassifyName(classifyDO.getBigClassifyName());
             }
             safeMaterialDto.setValidStockCount(validStockCount);
 
@@ -173,27 +180,29 @@
         List<DepRPCRespDTO> depInfoList = getDepInfoList();
         //获取所有物资类型
         List<SafeMaterialClassifyInfo> classifyInfoList = safeMaterialClassifyInfoService.getList();
-        //循环物资分类
-        List<MaterialClassificationDto> classificationDtoList = new ArrayList<>();
-        for (SafeMaterialClassifyInfo classifyInfo:classifyInfoList){
-            MaterialClassificationDto classificationDto = new MaterialClassificationDto();
-            classificationDto.setMaterialClassifyId(classifyInfo.getId());
-            classificationDto.setMaterialClassifyName(classifyInfo.getMaterialClassifyName());
-            //循环部门
-            List<MaterialDepartmentDto> departmentDtoList = new ArrayList<>();
-            for (DepRPCRespDTO dep:depInfoList){
+        //循环部门
+        List<MaterialDepartmentDto> departmentDtoList = new ArrayList<>();
+        recursiveDep(depInfoList,departmentDtoList,materialInfoList,classifyInfoList);
+
+        return new ResultVO(ResultCodes.OK,departmentDtoList);
+    }
+    private void recursiveDep(List<DepRPCRespDTO> depInfoList,List<MaterialDepartmentDto> departmentDtoList,List<SafeMaterialInfo> materialInfoList,List<SafeMaterialClassifyInfo> classifyInfoList){
+        for (DepRPCRespDTO dep:depInfoList){
+            MaterialDepartmentDto materialDepartmentDto = new MaterialDepartmentDto();
+            materialDepartmentDto.setDepId(dep.getDepId());
+            materialDepartmentDto.setDepName(dep.getDepName());
+            List<MaterialClassificationDto> classificationDtoList = new ArrayList<>();
+            for (SafeMaterialClassifyInfo classifyInfo:classifyInfoList) {
+                MaterialClassificationDto classificationDto = new MaterialClassificationDto();
+                classificationDto.setMaterialClassifyName(classifyInfo.getMaterialClassifyName());
+                classificationDto.setMaterialClassifyId(classifyInfo.getId());
                 //过滤出物资数据
                 List<SafeMaterialInfo> selectMaterialList = materialInfoList
                         .stream()
-                        .filter(item -> classifyInfo.getId().equals(item.getMaterialClassifyId()) && dep.getDepId().equals(item.getDepId()))
+                        .filter(item -> classifyInfo.getId().equals(item.getBigClassifyId()) && dep.getDepId().equals(item.getDepId()))
                         .collect(Collectors.toList());
+                List<BaseMaterialDto> baseMaterialDtoList = new ArrayList<>();
                 if(selectMaterialList.size()>0){
-                    //填充部门数据
-                    MaterialDepartmentDto departmentDto = new MaterialDepartmentDto();
-                    departmentDto.setDepId(dep.getDepId());
-                    departmentDto.setDepName(dep.getDepName());
-
-                    List<BaseMaterialDto> baseMaterialDtoList = new ArrayList<>();
                     //循环物资
                     for (SafeMaterialInfo materialInfo:selectMaterialList){
                         //填充基础物资数据
@@ -202,48 +211,17 @@
                         baseMaterialDto.setSmId(materialInfo.getId());
                         baseMaterialDtoList.add(baseMaterialDto);
                     }
-                    departmentDto.setBaseMaterialList(baseMaterialDtoList);
-                    departmentDtoList.add(departmentDto);
-                }
-                //子集部门
-                if(!CollectionUtils.isEmpty(dep.getChildren())){
-                    this.recursiveDep(dep.getChildren(),departmentDtoList,materialInfoList,classifyInfo.getId());
+                    classificationDto.setBaseMaterialList(baseMaterialDtoList);
+                    classificationDtoList.add(classificationDto);
                 }
             }
-            classificationDto.setDepartmentList(departmentDtoList);
-            classificationDtoList.add(classificationDto);
-        }
-
-        return new ResultVO(ResultCodes.OK,classificationDtoList);
-    }
-    private void recursiveDep(List<DepRPCRespDTO> depList,List<MaterialDepartmentDto> departmentDtoList,List<SafeMaterialInfo> materialInfoList,Long classifyId){
-        for(DepRPCRespDTO dep:depList){
-            //过滤出物资数据
-            List<SafeMaterialInfo> selectMaterialList = materialInfoList
-                    .stream()
-                    .filter(item -> classifyId.equals(item.getMaterialClassifyId()) && dep.getDepId().equals(item.getDepId()))
-                    .collect(Collectors.toList());
-            if(selectMaterialList.size()>0){
-                //填充部门数据
-                MaterialDepartmentDto departmentDto = new MaterialDepartmentDto();
-                departmentDto.setDepId(dep.getDepId());
-                departmentDto.setDepName(dep.getDepName());
-
-                List<BaseMaterialDto> baseMaterialDtoList = new ArrayList<>();
-                //循环物资
-                for (SafeMaterialInfo materialInfo:selectMaterialList){
-                    //填充基础物资数据
-                    BaseMaterialDto baseMaterialDto = new BaseMaterialDto();
-                    baseMaterialDto.setMaterialName(materialInfo.getMaterialName());
-                    baseMaterialDto.setSmId(materialInfo.getId());
-                    baseMaterialDtoList.add(baseMaterialDto);
-                }
-                departmentDto.setBaseMaterialList(baseMaterialDtoList);
-                departmentDtoList.add(departmentDto);
+            if(classificationDtoList.size()>0){
+                materialDepartmentDto.setClassificationList(classificationDtoList);
+                departmentDtoList.add(materialDepartmentDto);
             }
-            //子集
+            //子集部门
             if(!CollectionUtils.isEmpty(dep.getChildren())){
-                this.recursiveDep(dep.getChildren(),departmentDtoList,materialInfoList,classifyId);
+                this.recursiveDep(dep.getChildren(),departmentDtoList,materialInfoList,classifyInfoList);
             }
         }
     }
diff --git a/equipment/equipment-service/src/main/resources/config/mapper/equipment/SafeMaterialClassifyInfoMapper.xml b/equipment/equipment-service/src/main/resources/config/mapper/equipment/SafeMaterialClassifyInfoMapper.xml
index e76027d..8b3c12e 100644
--- a/equipment/equipment-service/src/main/resources/config/mapper/equipment/SafeMaterialClassifyInfoMapper.xml
+++ b/equipment/equipment-service/src/main/resources/config/mapper/equipment/SafeMaterialClassifyInfoMapper.xml
@@ -4,13 +4,9 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.gkhy.safePlatform.equipment.repository.SafeMaterialClassifyInfoRepository">
 
-    <resultMap type="com.gkhy.safePlatform.equipment.entity.SafeMaterialClassifyDO" id="materialClassifyResult">
-        <id column="id" property="id" jdbcType="BIGINT"/>
-        <result column="material_classify_name" property="materialClassifyName"/>
-    </resultMap>
     <!--新增-->
     <insert id="save" parameterType="com.gkhy.safePlatform.equipment.entity.SafeMaterialClassifyInfo">
-        insert into safe_material_classify (id,material_classify_name,del_flag,create_time,create_uid,create_uname,update_time,update_uid,update_uname) values (#{id},#{materialClassifyName},#{delFlag},#{createTime},#{createUid},#{createUname},#{updateTime},#{updateUid},#{updateUname})
+        insert into safe_material_classify (id,material_classify_name,parent_id,del_flag,create_time,create_uid,create_uname,update_time,update_uid,update_uname) values (#{id},#{materialClassifyName},#{parentId},#{delFlag},#{createTime},#{createUid},#{createUname},#{updateTime},#{updateUid},#{updateUname})
     </insert>
     <!--更新-->
     <update id="update" parameterType="com.gkhy.safePlatform.equipment.entity.SafeMaterialClassifyInfo">
@@ -28,7 +24,7 @@
     </update>
     <!--查询单条数据-->
     <select id="queryById" resultType="com.gkhy.safePlatform.equipment.entity.SafeMaterialClassifyInfo">
-        select id,material_classify_name,create_time,create_uid,create_uname,update_time,update_uid,update_uname from safe_material_classify where id = #{id} and del_flag = 0;
+        select id,material_classify_name,parent_id,create_time,create_uid,create_uname,update_time,update_uid,update_uname from safe_material_classify where id = #{id} and del_flag = 0;
     </select>
     <select id="listByContion" resultType="com.gkhy.safePlatform.equipment.entity.SafeMaterialClassifyInfo">
         select id,
@@ -39,5 +35,37 @@
            and instr(material_classify_name,#{materialClassifyName}) > 0
         </if>
     </select>
+    <select id="getListByParentId" resultType="com.gkhy.safePlatform.equipment.entity.SafeMaterialClassifyInfo">
+        select id,material_classify_name,parent_id from safe_material_classify where parent_id = #{parentId} and del_flag = 0;
+    </select>
+    <select id="getBigAndSmallClassify" resultType="com.gkhy.safePlatform.equipment.entity.SafeMaterialClassifyDO">
+        SELECT
+            c1.id as smallClassifyId,
+            c1.material_classify_name as smallClassifyName,
+            c2.id as bigClassifyId,
+            c2.material_classify_name as bigClassifyName
+        FROM
+            safe_material_classify c1
+                INNER JOIN safe_material_classify c2 ON c1.parent_id = c2.id
+        WHERE
+            c1.del_flag = 0
+          AND c1.id = #{smallClassifyId}
+    </select>
+    <select id="getTraceabilityClassifyList" resultType="com.gkhy.safePlatform.equipment.entity.SafeMaterialClassifyDO">
+        SELECT
+            c1.id as smallClassifyId,
+            c1.material_classify_name as smallClassifyName,
+            c2.id as bigClassifyId,
+            c2.material_classify_name as bigClassifyName
+        FROM
+            safe_material_classify c1
+                INNER JOIN safe_material_classify c2 ON c1.parent_id = c2.id
+        WHERE
+            c1.del_flag = 0
+          AND c1.id in
+              <foreach collection="smallClassifyIds" item="id" close=")" open="(" separator=",">
+                  #{id}
+              </foreach>
+    </select>
 
 </mapper>
diff --git a/equipment/equipment-service/src/main/resources/config/mapper/equipment/SafeMaterialDetailInfoMapper.xml b/equipment/equipment-service/src/main/resources/config/mapper/equipment/SafeMaterialDetailInfoMapper.xml
index b79af4a..7574bbc 100644
--- a/equipment/equipment-service/src/main/resources/config/mapper/equipment/SafeMaterialDetailInfoMapper.xml
+++ b/equipment/equipment-service/src/main/resources/config/mapper/equipment/SafeMaterialDetailInfoMapper.xml
@@ -8,7 +8,8 @@
         <id column="id" property="id" jdbcType="BIGINT"/>
         <result column="name" property="name" jdbcType="VARCHAR"/>
         <result column="material_no" property="materialNo" jdbcType="VARCHAR"/>
-        <result column="material_classify_id" property="materialClassifyId" jdbcType="BIGINT"/>
+        <result column="big_classify_id" property="bigClassifyId" jdbcType="BIGINT"/>
+        <result column="small_classify_id" property="smallClassifyId" jdbcType="BIGINT"/>
         <result column="rfid" property="rfid" jdbcType="VARCHAR"/>
         <result column="consumable" property="consumable" jdbcType="TINYINT"/>
         <result column="valid_type" property="validType" jdbcType="TINYINT"/>
@@ -34,9 +35,9 @@
     </select>
     <select id="queryById" resultMap="materialDetailResult">
         select id,
-               name,
+               CONCAT(name,'(ID',sm_id,')') as name,
                material_no,
-               material_classify_id,
+               big_classify_id,
                rfid,
                consumable,
                valid_type,
@@ -60,7 +61,7 @@
         where id = #{id}
     </update>
     <select id="getListByIds" resultMap="materialDetailResult">
-        select id,name,material_no,material_classify_id,rfid,consumable,valid_type,valid_time,valid_status,ir_status,ware_housing_time,ware_housing_time,delivery_time,sm_id,claimant_id,claimant_name
+        select id,name,material_no,big_classify_id,rfid,consumable,valid_type,valid_time,valid_status,ir_status,ware_housing_time,ware_housing_time,delivery_time,sm_id,claimant_id,claimant_name
                from safe_material_detail
                where del_flag = 0
                  and id in
@@ -130,8 +131,10 @@
             claimant_name = #{detailBO.claimantName},
             delivery_time = #{detailBO.deliveryTime}
         where id in
-              (select t.id from (select id from safe_material_detail where ir_status = 0 and valid_status = 0 and del_flag = 0 ORDER BY ware_housing_time asc LIMIT #{detailBO.count}) t
-              )
+        <foreach collection="detailBO.ids" item="id" separator="," open="(" close=")" >
+            #{id}
+        </foreach>
+
     </update>
 
     <select id="getValidStockCount" resultType="java.lang.Integer">
@@ -144,9 +147,9 @@
     </select>
     <select id="listByCondition" resultType="com.gkhy.safePlatform.equipment.entity.SafeMaterialDetailInfoDO">
         select sd.id,
-               sd.name,
+               CONCAT(sd.name,'(ID',sd.sm_id,')') as name,
                sd.material_no,
-               sd.material_classify_id,
+               sd.big_classify_id,
                sd.rfid,
                sd.consumable,
                sd.valid_type,
@@ -158,9 +161,10 @@
                sd.delivery_time,
                sm.dep_id,
                sm.dep_name,
-               sc.material_classify_name
+               sd.sm_id,
+               sc.material_classify_name as bigClassifyName
         from safe_material_detail sd
-                 INNER JOIN safe_material_classify sc on sd.material_classify_id = sc.id
+                 INNER JOIN safe_material_classify sc on sd.big_classify_id = sc.id
                  INNER JOIN safe_material sm on sd.sm_id = sm.id
         where sd.del_flag = 0
         <if test="query.rfid != null and query.rfid != '' ">
@@ -187,4 +191,74 @@
     <update id="updateValidStatus" >
         update safe_material_detail set valid_status = #{validStatus} where id = #{id}
     </update>
+    <select id="getRfidNotNullList" resultType="java.lang.Long">
+        select id from safe_material_detail where sm_id = #{smId} and ir_status = 0 and valid_status = 0 and del_flag = 0 and rfid is not null ORDER BY ware_housing_time asc LIMIT #{count}
+    </select>
+
+    <select id="getRfidNullList" resultType="java.lang.Long">
+        select id from safe_material_detail where sm_id = #{smId} and ir_status = 0 and valid_status = 0 and del_flag = 0 and rfid is null ORDER BY ware_housing_time asc LIMIT #{count}
+    </select>
+    <select id="getIdListByRfid" resultType="java.lang.Long">
+        select id from safe_material_detail where sm_id = #{smId} and ir_status = 0 and valid_status = 0 and del_flag = 0 and rfid = #{rfid} ORDER BY ware_housing_time asc LIMIT #{count}
+    </select>
+    <select id="getSmallClassifyStockByIds" resultType="com.gkhy.safePlatform.equipment.entity.SafeMaterialClassifyStockDO">
+        select d.small_classify_id,
+        m.dep_id,
+        m.dep_name,
+        count(1) as stockCount
+        from safe_material_detail d
+        INNER JOIN safe_material m
+        ON d.sm_id = m.id
+        where d.del_flag = 0
+        and d.ir_status = 0
+        and d.valid_status = 0
+        and d.small_classify_id in
+        <foreach collection="smallClassifyIds" item="smallClassifyId" separator="," open="(" close=")">
+            #{smallClassifyId}
+        </foreach>
+        group By d.small_classify_id,m.dep_id,m.dep_name
+    </select>
+    <select id="getListBySmallClassifyIds" resultType="com.gkhy.safePlatform.equipment.entity.SafeMaterialDetailDO">
+        SELECT
+        sd.id,
+        sd.rfid,
+        sm.dep_id,
+        sd.small_classify_id,
+        sd.big_classify_id
+        FROM
+        safe_material_detail sd
+        INNER JOIN safe_material sm ON sd.sm_id = sm.id
+        WHERE
+        sd.del_flag = 0
+        AND sd.ir_status = 0
+        AND sd.valid_status = 0
+        AND sd.small_classify_id IN
+        <foreach collection="smallClassifyIds" item="smallClassifyId" open="(" close=")" separator=",">
+            #{smallClassifyId}
+        </foreach>
+        AND sm.dep_id IN
+        <foreach collection="depIds" item="depId" open="(" close=")" separator=",">
+            #{depId}
+        </foreach>
+        ORDER BY
+        sd.create_time ASC
+    </select>
+    <select id="getListByRfids" resultType="com.gkhy.safePlatform.equipment.entity.SafeMaterialDetailInfoDO">
+        SELECT
+            sd.id,
+            CONCAT( sd.NAME, '(NO', sd.material_no, ')' ) as name,
+            sd.big_classify_id,
+            sd.small_classify_id,
+            sm.dep_id
+        FROM
+            safe_material_detail sd
+        inner join safe_material sm on sd.sm_id = sm.id
+        WHERE
+            sd.del_flag = 0
+          AND sd.ir_status = 1
+          AND sd.rfid in
+        <foreach collection="rfids" item="rfid" open="(" close=")" separator=",">
+            #{rfid}
+        </foreach>
+    </select>
 </mapper>
diff --git a/equipment/equipment-service/src/main/resources/config/mapper/equipment/SafeMaterialInfoMapper.xml b/equipment/equipment-service/src/main/resources/config/mapper/equipment/SafeMaterialInfoMapper.xml
index cd3cfd2..e7f4763 100644
--- a/equipment/equipment-service/src/main/resources/config/mapper/equipment/SafeMaterialInfoMapper.xml
+++ b/equipment/equipment-service/src/main/resources/config/mapper/equipment/SafeMaterialInfoMapper.xml
@@ -7,7 +7,8 @@
     <resultMap type="com.gkhy.safePlatform.equipment.entity.SafeMaterialInfo" id="materialResult">
         <id column="id" property="id" jdbcType="BIGINT"/>
         <result column="serial_num" property="serialNum" jdbcType="VARCHAR"/>
-        <result column="material_classify_id" property="materialClassifyId" jdbcType="BIGINT"/>
+        <result column="big_classify_id" property="bigClassifyId" jdbcType="BIGINT"/>
+        <result column="small_classify_id" property="smallClassifyId" jdbcType="BIGINT"/>
         <result column="dep_id" property="depId" jdbcType="BIGINT"/>
         <result column="dep_name" property="depName" jdbcType="VARCHAR"/>
         <result column="material_name" property="materilaName" jdbcType="VARCHAR"/>
@@ -22,15 +23,15 @@
     </resultMap>
     <!--查询单条数据-->
     <select id="queryById" resultMap="materialResult">
-        select id,serial_num,material_classify_id,dep_id,dep_name,material_name,consumable,del_flag,create_time,create_uid,create_uname,update_time,update_uid,update_uname from safe_material where id = #{id} and del_flag = 0;
+        select id,serial_num,small_classify_id,big_classify_id,dep_id,dep_name,material_name,consumable,del_flag,create_time,create_uid,create_uname,update_time,update_uid,update_uname from safe_material where id = #{id} and del_flag = 0;
     </select>
     <!--查询所有数量-->
     <select id="getTotalCount" resultType="java.lang.Integer">
         select count(1) from safe_material;
     </select>
-    <!--根据类型统计数量-->
-    <select id="getCountByClassify" resultType="java.lang.Integer">
-        select count(1) from safe_material where del_flag = 0 and material_classify_id = #{classifyId}
+    <!--根据小类型统计数量-->
+    <select id="getCountBySmallClassifyId" resultType="java.lang.Integer">
+        select count(1) from safe_material where del_flag = 0 and small_classify_id = #{smallClassifyId}
     </select>
     <update id="deleteBatch">
         update safe_material set del_flag = 1 where id in
@@ -42,24 +43,34 @@
     <select id="listByConditions" resultType="com.gkhy.safePlatform.equipment.entity.SafeMaterialDO">
         select m.id,
                m.serial_num,
-               m.material_classify_id,
+               m.big_classify_id as bigClassifyId,
+               m.small_classify_id as smallClassifyId,
                m.dep_id,
                m.dep_name,
                m.material_name,
                m.consumable,
-               c.material_classify_name
+               c.material_classify_name as bigClassifyName
         from safe_material m
         inner join safe_material_classify c
-        on m.material_classify_id = c.id
+        on m.big_classify_id = c.id
         where m.del_flag = 0
         <if test="query.materialName != null and query.materialName != '' ">
             and instr(m.material_name,#{query.materialName})>0
         </if>
-        <if test="query.materialClassifyId != null">
-            and m.material_classify_id = #{query.materialClassifyId}
+        <if test="query.bigClassifyId != null">
+            and m.big_classify_id = #{query.bigClassifyId}
         </if>
         order by m.create_time desc
     </select>
-
+    <select id="checkMatrial" resultType="java.lang.Integer">
+        select count(1)
+        from safe_material
+        where del_flag = 0
+        and small_classify_id = #{smallClassifyId}
+        and dep_id = #{depId}
+        <if test="id != null">
+            and id != #{id}
+        </if>
+    </select>
 
 </mapper>

--
Gitblit v1.9.2