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 + }