From 3469e7172b4c2fc8517bdbdd5d1af85040901732 Mon Sep 17 00:00:00 2001
From: xqs <ddxk91@qq.com>
Date: Wed, 25 Sep 2019 19:12:31 +0800
Subject: [PATCH] 调整单,调整单逻辑详细重新整理

---
 src/main/java/com/huaheng/pc/inventory/adjustDetail/controller/adjustDetailController.java |   4 +++-
 src/main/java/com/huaheng/pc/inventory/adjustDetail/service/AdjustDetailServiceImpl.java   | 173 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------
 2 files changed, 161 insertions(+), 16 deletions(-)

diff --git a/src/main/java/com/huaheng/pc/inventory/adjustDetail/controller/adjustDetailController.java b/src/main/java/com/huaheng/pc/inventory/adjustDetail/controller/adjustDetailController.java
index dfbc46f..6874187 100644
--- a/src/main/java/com/huaheng/pc/inventory/adjustDetail/controller/adjustDetailController.java
+++ b/src/main/java/com/huaheng/pc/inventory/adjustDetail/controller/adjustDetailController.java
@@ -100,7 +100,9 @@ public class adjustDetailController extends BaseController {
     }
 
     /**
-     * 调整数量
+     * 调整,
+     * 调整数量,调整库存状态
+     * 调整插入库存
      */
     //@RequiresPermissions("inventory:cyclecountAdjustDetail:addAdjust")
     @Log(title = "库存-调整单", operating = "调整单调整库存差异,调整数量", action = BusinessType.UPDATE)
diff --git a/src/main/java/com/huaheng/pc/inventory/adjustDetail/service/AdjustDetailServiceImpl.java b/src/main/java/com/huaheng/pc/inventory/adjustDetail/service/AdjustDetailServiceImpl.java
index 998d43f..75086d4 100644
--- a/src/main/java/com/huaheng/pc/inventory/adjustDetail/service/AdjustDetailServiceImpl.java
+++ b/src/main/java/com/huaheng/pc/inventory/adjustDetail/service/AdjustDetailServiceImpl.java
@@ -2,9 +2,11 @@ package com.huaheng.pc.inventory.adjustDetail.service;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.huaheng.common.utils.StringUtils;
 import com.huaheng.common.utils.security.ShiroUtils;
 import com.huaheng.framework.web.domain.AjaxResult;
 import com.huaheng.pc.config.container.service.ContainerService;
+import com.huaheng.pc.config.location.domain.Location;
 import com.huaheng.pc.config.location.service.LocationService;
 import com.huaheng.pc.inventory.adjustHeader.domain.AdjustHeader;
 import com.huaheng.pc.inventory.adjustHeader.service.AdjustHeaderService;
@@ -58,25 +60,80 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj
 
 
     /**
-     * 调整库存数量
+     * 调整库存
+     * 调整数量,调整库存状态
+     * 调整插入库存
      * @param adjustDetail
      * @return
      */
     @Transactional
     @Override
     public AjaxResult updateAdjustDetail(AdjustDetail adjustDetail) {
-        /*修改库存数量,调整单据状态,写入库存交易*/
 
-        //已调整过不允许修改。
         if(adjustDetail.getStatus() == 1){
             AjaxResult.error("该单据已调整,不允许再次调整!" );
         }
         //查询调整的库存明细
-        InventoryDetail inventoryDetail = inventoryDetailService.getById(adjustDetail.getInventoryDetailId());
+        InventoryDetail inventoryDetail = new InventoryDetail();
+        //调整单中不带库存明细时不查询
+        if(adjustDetail.getInventoryDetailId() != null) {
+            inventoryDetail = inventoryDetailService.getById(adjustDetail.getInventoryDetailId());
+            //验证该条库存是不是正在使用,通过库位是否锁定来判断
+            if (!adjustDetail.getLocationCode().equals(inventoryDetail.getLocationCode()) ||
+                    !adjustDetail.getContainerCode().equals(inventoryDetail.getContainerCode())) {
+                throw new SecurityException("调整单和所调整库存的库位容器不符,前检查数据");
+            }
+            Location location = new Location();
+            location.setCode(inventoryDetail.getLocationCode());
+            location.setWarehouseCode(inventoryDetail.getWarehouseCode());
+            LambdaQueryWrapper<Location> lambdaQueryWrapper = Wrappers.lambdaQuery(location);
+            location = locationService.getOne(lambdaQueryWrapper);
+            if (!location.getStatus().equals("empty")) {
+                throw new SecurityException(inventoryDetail.getId() + "库存非空闲,请等待任务完成再进行调整!");
+            }
+
+            //判断调整哪一个属性值
+            /*以下方法有待验证讨论,BigDecimal传入null,如何避免传入0?*/
+
+            //把BigDecimal类型转换成String再判断null
+
+            String toQtyString = adjustDetail.getToQty().toString(); //调整后库存
+            String gapQtyString = adjustDetail.getGapQty().toString(); //调整变动数量
+            if (StringUtils.isNotEmpty(toQtyString) || StringUtils.isNotEmpty(gapQtyString)) {
+                //调整数量
+                updateAdjustDetailNumber(adjustDetail, inventoryDetail);
+            }
+            if (StringUtils.isNotEmpty(adjustDetail.getFromInventorySts()) && StringUtils.isNotEmpty(adjustDetail.getToInventorySts())) {
+                //调整库存状态
+                updateAdjustDetailState(adjustDetail, inventoryDetail);
+            }
+        }
+        String fromQtyString = adjustDetail.getFromQty().toString(); //调整前库存数量
+        if(StringUtils.isNotEmpty(fromQtyString)){
+            //调整插入库存
+            updateAdjustDetailInsert(adjustDetail);
+        }
+
+        //修改调整单明细状态
+        adjustDetail.setStatus(1);
+        adjustDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
+        adjustDetail.setLastUpdated(new Date());
+        this.saveOrUpdate(adjustDetail);
+
+        return AjaxResult.success("调整库存成功!");
+    }
+
+    /**
+     * 调整修改库存数量
+     * @param adjustDetail
+     */
+    @Transactional
+    public void updateAdjustDetailNumber (AdjustDetail adjustDetail,InventoryDetail inventoryDetail){
+        /*修改库存数量,调整单据状态,写入库存交易*/
+
         /*调整后的数量写入库存*/
         //比较大小可以用 .compareTo()返回值 -1 小于 0 等于 1 大于
         //Bigdecimal 自带运算方法.add加法 .subtract减法
-
         if(adjustDetail.getToQty().compareTo(BigDecimal.ZERO) == 0){
             //当调整后数量为0时,直接删除该条库存,并写入库存交易
             //删除库存,并查询当前库位还有没有其他物料,没有则删除库存头,恢复容器和库位状态
@@ -87,13 +144,13 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj
             LambdaQueryWrapper<InventoryDetail> lamdDetail = Wrappers.lambdaQuery(inv);
             List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(lamdDetail);
             inventoryDetailService.removeById(adjustDetail.getInventoryDetailId());//删除实际库存数量为0的库存明细
-                if(inventoryDetailList.size() == 0){
+            if(inventoryDetailList.size() == 0){
                 //恢复库位和容器状态,删除库存头
                 inventoryHeaderService.removeById(inventoryDetail.getInventoryHeaderId());
                 locationService.updateContainerCodeAndStatus(inventoryDetail.getLocationCode(),"","empty");
                 containerService.updateLocationCodeAndStatus(inventoryDetail.getContainerCode(),"","empty");
-                }
-            }else{
+            }
+        }else{
             //修改库存
             //BigDecimal temp =(adjustDetail.getFromQty()).add(adjustDetail.getGapQty());
             inventoryDetail.setQty(adjustDetail.getToQty());//调整后的数量
@@ -113,7 +170,7 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj
         inventoryTransaction.setMaterialName(inventoryDetail.getMaterialName());
         inventoryTransaction.setMaterialSpec(inventoryDetail.getMaterialSpec());
         inventoryTransaction.setMaterialUnit(inventoryDetail.getMaterialUnit());
-        inventoryTransaction.setTaskQty(inventoryDetail.getTaskQty());
+        inventoryTransaction.setTaskQty(adjustDetail.getGapQty());
         inventoryTransaction.setInventorySts(inventoryDetail.getInventorySts());
         inventoryTransaction.setReferCode(inventoryDetail.getReferCode());
         inventoryTransaction.setReferDetailId(inventoryDetail.getReferDetailId());
@@ -142,15 +199,100 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj
         inventoryTransaction.setSupplierCode(inventoryDetail.getSupplierCode());
         inventoryTransactionService.saveOrUpdate(inventoryTransaction);
 
-        //修改调整单明细状态
-        adjustDetail.setStatus(1);
-        adjustDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
-        adjustDetail.setLastUpdated(new Date());
-        this.saveOrUpdate(adjustDetail);
+    }
+
+    /**
+     * 调整库存属性
+     * @param adjustDetail
+     */
+    @Transactional
+    public void updateAdjustDetailState (AdjustDetail adjustDetail,InventoryDetail inventoryDetail) {
+      /*不考虑其他只改变库存状态即可,也需要写入库存交易。*/
+
+        //修改库存的状态
+        inventoryDetail.setInventorySts(adjustDetail.getToInventorySts());//修改为调整库存
+        inventoryDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
+        inventoryDetail.setLastUpdated(new Date());
+        inventoryDetailService.saveOrUpdate(inventoryDetail);
+
+        //写入库存交易,库存交易2条一条出,一条入
+        //调整出
+        InventoryTransaction inventoryTransaction = new InventoryTransaction();
+        inventoryTransaction.setWarehouseCode(inventoryDetail.getWarehouseCode());
+        inventoryTransaction.setCompanyCode(inventoryDetail.getCompanyCode());
+        inventoryTransaction.setLocationCode(inventoryDetail.getLocationCode());
+        inventoryTransaction.setContainerCode(inventoryDetail.getContainerCode());
+        inventoryTransaction.setTransactionType(40);
+        inventoryTransaction.setMaterialCode(inventoryDetail.getMaterialCode());
+        inventoryTransaction.setMaterialName(inventoryDetail.getMaterialName());
+        inventoryTransaction.setMaterialSpec(inventoryDetail.getMaterialSpec());
+        inventoryTransaction.setMaterialUnit(inventoryDetail.getMaterialUnit());
+        inventoryTransaction.setTaskQty(null);//数量不变
+        inventoryTransaction.setInventorySts(adjustDetail.getFromInventorySts());//状态
+        inventoryTransaction.setReferCode(inventoryDetail.getReferCode());
+        inventoryTransaction.setReferDetailId(inventoryDetail.getReferDetailId());
+        inventoryTransaction.setBatch(inventoryDetail.getBatch());
+        inventoryTransaction.setLot(inventoryDetail.getLot());
+        inventoryTransaction.setProjectNo(inventoryDetail.getProjectNo());
+        inventoryTransaction.setQcCheck(inventoryDetail.getQcCheck());
+        inventoryTransaction.setWeight(inventoryDetail.getWeight());
+        inventoryTransaction.setManufactureDate(inventoryDetail.getManufactureDate());
+        inventoryTransaction.setExpirationDate(inventoryDetail.getExpirationDate());
+        inventoryTransaction.setAgingDate(inventoryDetail.getCreated());
+        inventoryTransaction.setAttributeId(inventoryDetail.getAttributeId());
+        inventoryTransaction.setAttribute1(inventoryDetail.getAttribute1());
+        inventoryTransaction.setAttribute2(inventoryDetail.getAttribute2());
+        inventoryTransaction.setAttribute3(inventoryDetail.getAttribute3());
+        inventoryTransaction.setCreated(new Date());
+        inventoryTransaction.setCreatedBy(ShiroUtils.getLoginName());
+        inventoryTransaction.setBillDetailId(inventoryDetail.getReceiptDetailId());
+        inventoryTransaction.setSupplierCode(inventoryDetail.getSupplierCode());
+        inventoryTransactionService.saveOrUpdate(inventoryTransaction);
+
+        //调整入
+        InventoryTransaction inventoryTransaction2 = new InventoryTransaction();
+        inventoryTransaction2.setWarehouseCode(inventoryDetail.getWarehouseCode());
+        inventoryTransaction2.setCompanyCode(inventoryDetail.getCompanyCode());
+        inventoryTransaction2.setLocationCode(inventoryDetail.getLocationCode());
+        inventoryTransaction2.setContainerCode(inventoryDetail.getContainerCode());
+        inventoryTransaction2.setTransactionType(30);
+        inventoryTransaction2.setMaterialCode(inventoryDetail.getMaterialCode());
+        inventoryTransaction2.setMaterialName(inventoryDetail.getMaterialName());
+        inventoryTransaction2.setMaterialSpec(inventoryDetail.getMaterialSpec());
+        inventoryTransaction2.setMaterialUnit(inventoryDetail.getMaterialUnit());
+        inventoryTransaction2.setTaskQty(null);//数量不变
+        inventoryTransaction2.setInventorySts(inventoryDetail.getInventorySts());//状态
+        inventoryTransaction2.setReferCode(inventoryDetail.getReferCode());
+        inventoryTransaction2.setReferDetailId(inventoryDetail.getReferDetailId());
+        inventoryTransaction2.setBatch(inventoryDetail.getBatch());
+        inventoryTransaction2.setLot(inventoryDetail.getLot());
+        inventoryTransaction2.setProjectNo(inventoryDetail.getProjectNo());
+        inventoryTransaction2.setQcCheck(inventoryDetail.getQcCheck());
+        inventoryTransaction2.setWeight(inventoryDetail.getWeight());
+        inventoryTransaction2.setManufactureDate(inventoryDetail.getManufactureDate());
+        inventoryTransaction2.setExpirationDate(inventoryDetail.getExpirationDate());
+        inventoryTransaction2.setAgingDate(inventoryDetail.getCreated());
+        inventoryTransaction2.setAttributeId(inventoryDetail.getAttributeId());
+        inventoryTransaction2.setAttribute1(inventoryDetail.getAttribute1());
+        inventoryTransaction2.setAttribute2(inventoryDetail.getAttribute2());
+        inventoryTransaction2.setAttribute3(inventoryDetail.getAttribute3());
+        inventoryTransaction2.setCreated(new Date());
+        inventoryTransaction2.setCreatedBy(ShiroUtils.getLoginName());
+        inventoryTransaction2.setBillDetailId(inventoryDetail.getReceiptDetailId());
+        inventoryTransaction2.setSupplierCode(inventoryDetail.getSupplierCode());
+        inventoryTransactionService.saveOrUpdate(inventoryTransaction2);
 
-        return AjaxResult.success("调整库存数量成功!");
     }
 
+    /**
+     * 调整插入库存
+     * @param adjustDetail
+     */
+    @Transactional
+    public void updateAdjustDetailInsert (AdjustDetail adjustDetail) {
+        /*当实际库存为0时,调整单触发插入新库存状态*/
+        //判断是否存在库存头,没有需要生成,有库存头直接插入库存明细即可
+        //新生成库存头时,库位,容器都需要更新数据
 
 
 
@@ -159,6 +301,7 @@ public class AdjustDetailServiceImpl extends ServiceImpl<AdjustDetailMapper, Adj
 
 
 
+    }
 
 
 
--
libgit2 0.22.2