From 8b1d6e1b442c1909bd747805bd1845b40caabe0c Mon Sep 17 00:00:00 2001
From: heheng <475597332@qq.com>
Date: 星期四, 06 三月 2025 09:03:59 +0800
Subject: [PATCH] data

---
 hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatServiceImpl.java |   98 ++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 85 insertions(+), 13 deletions(-)

diff --git a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatServiceImpl.java b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatServiceImpl.java
index e2751cd..570676a 100644
--- a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatServiceImpl.java
+++ b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatServiceImpl.java
@@ -1,5 +1,6 @@
 package com.gkhy.hazmat.system.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gkhy.hazmat.common.api.CommonPage;
 import com.gkhy.hazmat.common.config.IdTableNameHandler;
@@ -45,6 +46,7 @@
     @Autowired
     private HzWarehouseMapper warehouseMapper;
 
+
     @Override
     public CommonPage selectHazmatList(HzHazmat hzHazmat) {
         if(hzHazmat.getWarehouseId()==null||hzHazmat.getBasicId()==null){
@@ -73,19 +75,28 @@
         if(!hazmatList.isEmpty()) {
             List<Long> warehouseIds = hazmatList.stream().map(HzHazmatWarehouseVO::getWarehouseId).collect(Collectors.toList());
             List<Long> basicIds = hazmatList.stream().map(HzHazmatWarehouseVO::getBasicId).collect(Collectors.toList());
+            List<Integer> cupboardIds = hazmatList.stream().map(HzHazmatWarehouseVO::getCupboardId).collect(Collectors.toList());
             List<HzHazmatBasic> hazmatBasicList = hazmatBasicMapper.selectHazmatBasicListByIds(basicIds);
             List<HzWarehouse> warehouseList = warehouseMapper.selectWarehouseListByIds(warehouseIds);
+            List<HzWarehouseCupboard> hzWarehouseCupboards = warehouseMapper.selectByCupboardIds(cupboardIds);
+
             Map<Long,HzHazmatBasic> hazmatBasicMap=hazmatBasicList.stream().collect(Collectors.toMap(HzHazmatBasic::getId, item->item));
             Map<Long,HzWarehouse> warehouseMap=warehouseList.stream().collect(Collectors.toMap(HzWarehouse::getId, item->item));
+            Map<Integer, HzWarehouseCupboard> cupboardMap = hzWarehouseCupboards.stream().collect(Collectors.toMap(HzWarehouseCupboard::getId, item -> item));
             for(HzHazmatWarehouseVO hazmatWarehouseVO:hazmatList){
                 HzHazmatBasic hazmatBasic=hazmatBasicMap.get(hazmatWarehouseVO.getBasicId());
                 HzWarehouse warehouse=warehouseMap.get(hazmatWarehouseVO.getWarehouseId());
+                HzWarehouseCupboard hzWarehouseCupboard = cupboardMap.get(hazmatWarehouseVO.getCupboardId());
                 if(hazmatBasic!=null){
                     hazmatWarehouseVO.setHazmatBasic(hazmatBasic);
                 }
                 if(warehouse!=null){
                     hazmatWarehouseVO.setWarehouseName(warehouse.getName());
                 }
+                if (hzWarehouseCupboard != null){
+                    hazmatWarehouseVO.setCupboardName(hzWarehouseCupboard.getCupboardName());
+                }
+
             }
         }
         IdTableNameHandler.removeCurrentId();
@@ -141,7 +152,7 @@
 
     @Override
     @Transactional(rollbackFor = RuntimeException.class)
-    public void hazmatUse(Long hazmatId) {
+    public void hazmatUse(Long hazmatId, Integer used) {
         SysUser currentUser=SecurityUtils.getLoginUser().getUser();
         checkUserAllowed(null,currentUser);
         //设置分表id
@@ -152,24 +163,39 @@
         }
         checkUserAllowed(hazmat,currentUser);
         //获取变动前仓库库存
-        int count = baseMapper.selectHazmatCountOfWarehouse(hazmat.getWarehouseId(), hazmat.getBasicId(), currentUser.getCompanyId());
-        hazmat.setState(HazmatStatusEnum.USING.getCode());
-        hazmat.setUpdateBy(currentUser.getUsername());
-        updateById(hazmat);
+        int count = baseMapper.selectHazmatCountOfWarehouse(hazmat.getWarehouseId(), hazmat.getBasicId(), currentUser.getCompanyId(),hazmat.getCupboardId());
+
         //生成流向
+        BigDecimal remaining=hazmat.getRemaining();
         HzHazmatFlow hazmatFlow=new HzHazmatFlow();
         hazmatFlow.setHazmatId(hazmatId);
         hazmatFlow.setBasicId(hazmat.getBasicId());
         hazmatFlow.setState(OperateStatusEnum.USING.getCode());
         hazmatFlow.setCompanyId(currentUser.getCompanyId());
-        hazmatFlow.setNum(hazmat.getRemaining().multiply(BigDecimal.valueOf(-1)));
+        hazmatFlow.setNum(remaining.multiply(BigDecimal.valueOf(-1)));
         hazmatFlow.setCreateId(currentUser.getId());
         hazmatFlowMapper.insert(hazmatFlow);
+        hazmat.setState(HazmatStatusEnum.USING.getCode());
+        if(used==1){//用尽流向
+            hazmatFlow=new HzHazmatFlow();
+            hazmatFlow.setHazmatId(hazmatId);
+            hazmatFlow.setBasicId(hazmat.getBasicId());
+            hazmatFlow.setState(OperateStatusEnum.USE_UP.getCode());
+            hazmatFlow.setCompanyId(currentUser.getCompanyId());
+            hazmatFlow.setNum(remaining.multiply(BigDecimal.valueOf(-1)));
+            hazmatFlow.setCreateId(currentUser.getId());
+            hazmatFlowMapper.insert(hazmatFlow);
+            hazmat.setState(HazmatStatusEnum.USED.getCode());
+            hazmat.setRemaining(BigDecimal.valueOf(0));
+        }
+        hazmat.setUpdateBy(currentUser.getUsername());
+        updateById(hazmat);//更新试剂状态
         //生成库存变动记录
         //新增危化品变动记录
         HzWarehouseRecord warehouseRecord = new HzWarehouseRecord()
                 .setWarehouseId(hazmat.getWarehouseId())
                 .setBasicId(hazmat.getBasicId())
+                .setCupboardId(hazmat.getCupboardId())
                 .setCreateId(currentUser.getId())
                 .setNum(-1)
                 .setState(OperateStatusEnum.USING.getCode())
@@ -190,15 +216,22 @@
         //设置分表id
         IdTableNameHandler.setCurrentId(currentUser.getCompanyId());
         HzHazmat dbhazmat=getById(hazmat.getId());
-        if(!dbhazmat.getState().equals(HazmatStatusEnum.USING.getCode())){
-            throw new ApiException("危化品非使用中状态,不能进行归还操作");
+        BigDecimal remaining=dbhazmat.getRemaining();
+        if(!dbhazmat.getState().equals(HazmatStatusEnum.USING.getCode())&&!dbhazmat.getState().equals(HazmatStatusEnum.USED.getCode())){
+            throw new ApiException("危化品非使用中或者用尽状态,不能进行归还操作");
         }
-        if(dbhazmat.getRemaining().compareTo(hazmat.getRemaining())<0){
+        if(dbhazmat.getState().equals(HazmatStatusEnum.USING.getCode())&&remaining.compareTo(hazmat.getRemaining())<0){
             throw new ApiException("退还的容量不能高于库存容量");
+        }
+        if(dbhazmat.getState().equals(HazmatStatusEnum.USED.getCode())){
+            HzHazmatBasic hazmatBasic=hazmatBasicMapper.selectById(dbhazmat.getBasicId());
+            if(hazmatBasic.getMetering().compareTo(hazmat.getRemaining())<0) {
+                throw new ApiException("退还的容量不能高于最小包装数量");
+            }
         }
         checkUserAllowed(dbhazmat,currentUser);
         //获取变动前仓库库存
-        int count = baseMapper.selectHazmatCountOfWarehouse(dbhazmat.getWarehouseId(), dbhazmat.getBasicId(), currentUser.getCompanyId());
+        int count = baseMapper.selectHazmatCountOfWarehouse(dbhazmat.getWarehouseId(), dbhazmat.getBasicId(), currentUser.getCompanyId(),dbhazmat.getCupboardId());
         hazmat.setState(HazmatStatusEnum.USEWAREHOUSEIN.getCode());
         hazmat.setUpdateBy(currentUser.getUsername());
         updateById(hazmat);
@@ -217,6 +250,7 @@
         HzWarehouseRecord warehouseRecord = new HzWarehouseRecord()
                 .setWarehouseId(dbhazmat.getWarehouseId())
                 .setBasicId(dbhazmat.getBasicId())
+                .setCupboardId(hazmat.getCupboardId())
                 .setCreateId(currentUser.getId())
                 .setNum(1)
                 .setState(OperateStatusEnum.RETURN.getCode())
@@ -237,8 +271,9 @@
         if(!hazmat.getState().equals(HazmatStatusEnum.USING.getCode())){
             throw new ApiException("危化品非使用中状态,不能进行用完登记操作");
         }
-
+        BigDecimal remaining=hazmat.getRemaining();
         hazmat.setState(HazmatStatusEnum.USED.getCode());
+        hazmat.setRemaining(BigDecimal.valueOf(0));
         hazmat.setUpdateBy(currentUser.getUsername());
         updateById(hazmat);
         //生成流向
@@ -247,7 +282,7 @@
         hazmatFlow.setBasicId(hazmat.getBasicId());
         hazmatFlow.setState(OperateStatusEnum.USE_UP.getCode());
         hazmatFlow.setCompanyId(currentUser.getCompanyId());
-        hazmatFlow.setNum(hazmat.getRemaining().multiply(BigDecimal.valueOf(-1)));
+        hazmatFlow.setNum(remaining.multiply(BigDecimal.valueOf(-1)));
         hazmatFlow.setCreateId(currentUser.getId());
         hazmatFlowMapper.insert(hazmatFlow);
         IdTableNameHandler.removeCurrentId();
@@ -266,7 +301,7 @@
         }
         checkUserAllowed(hazmat,currentUser);
         //获取变动前仓库库存
-        int count = baseMapper.selectHazmatCountOfWarehouse(hazmat.getWarehouseId(), hazmat.getBasicId(), currentUser.getCompanyId());
+        int count = baseMapper.selectHazmatCountOfWarehouse(hazmat.getWarehouseId(), hazmat.getBasicId(), currentUser.getCompanyId(),hazmat.getCupboardId());
         hazmat.setState(HazmatStatusEnum.DISCARD.getCode());
         hazmat.setUpdateBy(currentUser.getUsername());
         updateById(hazmat);
@@ -285,6 +320,7 @@
         HzWarehouseRecord warehouseRecord = new HzWarehouseRecord()
                 .setWarehouseId(hazmat.getWarehouseId())
                 .setBasicId(hazmat.getBasicId())
+                .setCupboardId(hazmat.getCupboardId())
                 .setCreateId(currentUser.getId())
                 .setNum(-1)
                 .setState(OperateStatusEnum.DISCARD.getCode())
@@ -309,6 +345,42 @@
         IdTableNameHandler.removeCurrentId();
     }
 
+    @Override
+    @Transactional(rollbackFor = RuntimeException.class)
+    public void changeRemaining(HzHazmat hazmat) {
+        if(hazmat.getId()==null||hazmat.getRemaining()==null){
+            throw new ApiException("参数不正确");
+        }
+        SysUser currentUser=SecurityUtils.getLoginUser().getUser();
+        checkUserAllowed(null,currentUser);
+        //设置分表id
+        IdTableNameHandler.setCurrentId(currentUser.getCompanyId());
+        HzHazmat dbHazmat=getById(hazmat.getId());
+        checkUserAllowed(dbHazmat,currentUser);
+        if(hazmat.getRemaining().compareTo(dbHazmat.getRemaining())>=0){
+            throw new ApiException("修改值不能大于等于在库容量");
+        }
+        //校验是否产生流向
+        Long flowCount=hazmatFlowMapper.selectCount(Wrappers.<HzHazmatFlow>lambdaQuery().eq(HzHazmatFlow::getHazmatId,hazmat.getId())
+                .ne(HzHazmatFlow::getState,OperateStatusEnum.ENTRY.getCode()));
+        if(flowCount>0){
+            throw new ApiException("该危化品已流转,不能修改!");
+        }
+        HzHazmat newHazmat=new HzHazmat().setId(hazmat.getId()).setRemaining(hazmat.getRemaining());
+        newHazmat.setUpdateBy(currentUser.getUsername());
+        updateById(newHazmat);
+        //生成流向
+        HzHazmatFlow hazmatFlow=new HzHazmatFlow();
+        hazmatFlow.setHazmatId(hazmat.getId());
+        hazmatFlow.setBasicId(dbHazmat.getBasicId());
+        hazmatFlow.setState(OperateStatusEnum.REMNANT.getCode());
+        hazmatFlow.setCompanyId(currentUser.getCompanyId());
+        hazmatFlow.setNum(hazmat.getRemaining());
+        hazmatFlow.setCreateId(currentUser.getId());
+        hazmatFlowMapper.insert(hazmatFlow);
+        IdTableNameHandler.removeCurrentId();
+    }
+
     public void checkUserAllowed(HzHazmat hazmat,SysUser user) {
         if (user.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())) {
             throw new ApiException("管理员不能操作");

--
Gitblit v1.9.2