From 6f2e09fa870858d5371ece3a80674bae95288b9b Mon Sep 17 00:00:00 2001
From: kongzy <kongzy>
Date: 星期三, 30 十月 2024 11:12:50 +0800
Subject: [PATCH] 新增领用逻辑

---
 hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatServiceImpl.java |   42 ++++++++++++++++++++++++++++++++----------
 1 files changed, 32 insertions(+), 10 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 acad8a2..ef38d6e 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
@@ -142,7 +142,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
@@ -154,18 +154,32 @@
         checkUserAllowed(hazmat,currentUser);
         //获取变动前仓库库存
         int count = baseMapper.selectHazmatCountOfWarehouse(hazmat.getWarehouseId(), hazmat.getBasicId(), currentUser.getCompanyId());
-        hazmat.setState(HazmatStatusEnum.USING.getCode());
-        hazmat.setUpdateBy(currentUser.getUsername());
-        updateById(hazmat);
+
         //生成流向
+        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()
@@ -191,11 +205,18 @@
         //设置分表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);
         //获取变动前仓库库存
@@ -238,8 +259,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);
         //生成流向
@@ -248,7 +270,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();

--
Gitblit v1.9.2