|
|
@ -43,8 +43,10 @@ import com.ruoyi.system.service.ISysAttachFileService; |
|
|
|
import com.ruoyi.system.service.ISysAttachService; |
|
|
|
import com.ruoyi.system.service.ISysRoleService; |
|
|
|
import com.ruoyi.system.service.ISysSupplierService; |
|
|
|
import com.ruoyi.warehouse.domain.WarehouseInventoryInquiry; |
|
|
|
import com.ruoyi.warehouse.domain.WarehouseStorageOrder; |
|
|
|
import com.ruoyi.warehouse.domain.WarehouseStorageOrderDetail; |
|
|
|
import com.ruoyi.warehouse.mapper.WarehouseInventoryInquiryMapper; |
|
|
|
import com.ruoyi.warehouse.mapper.WarehouseStorageOrderDetailMapper; |
|
|
|
import com.ruoyi.warehouse.mapper.WarehouseStorageOrderMapper; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
@ -155,6 +157,8 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService |
|
|
|
@Autowired |
|
|
|
private ServerConfig serverConfig; |
|
|
|
|
|
|
|
@Autowired |
|
|
|
private WarehouseInventoryInquiryMapper inventoryInquiryMapper; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
@ -455,16 +459,46 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService |
|
|
|
String materialNo = purchasePlanSelectMaterialVo.getMaterialNo(); |
|
|
|
// Integer thisPurchaseNum = purchasePlanSelectMaterialVo.getThisPurchaseNum();
|
|
|
|
|
|
|
|
// 获取旧数据中相同物料编号的数据
|
|
|
|
List<PurchasePlanChild> oldChildren = oldDataGroupedByMaterialNo.get(materialNo); |
|
|
|
|
|
|
|
//共享库存占用数
|
|
|
|
Integer sharedInventoryOccupancyNum = purchasePlanSelectMaterialVo.getSharedInventoryOccupancyNum(); |
|
|
|
//库存查询
|
|
|
|
WarehouseInventoryInquiry warehouseInventoryInquiry = inventoryInquiryMapper.selectWarehouseInventoryInquiryByMaterialNo(materialNo); |
|
|
|
if ( sharedInventoryOccupancyNum != null && sharedInventoryOccupancyNum > 0){ |
|
|
|
Integer sharedAvailableStockNum = Optional.ofNullable(warehouseInventoryInquiry.getSharedAvailableStockNum()).orElse(0); |
|
|
|
|
|
|
|
Integer availableStockNum = Optional.ofNullable(warehouseInventoryInquiry.getAvailableStockNum()).orElse(0); |
|
|
|
Integer lockStockNum = Optional.ofNullable(warehouseInventoryInquiry.getLockStockNum()).orElse(0); |
|
|
|
warehouseInventoryInquiry.setAvailableStockNum(availableStockNum - sharedInventoryOccupancyNum); |
|
|
|
warehouseInventoryInquiry.setSharedAvailableStockNum(sharedAvailableStockNum - sharedInventoryOccupancyNum); |
|
|
|
warehouseInventoryInquiry.setLockStockNum(lockStockNum + sharedInventoryOccupancyNum); |
|
|
|
warehouseInventoryInquiry.setUpdateTime(new Date()); |
|
|
|
warehouseInventoryInquiry.setUpdateBy(ShiroUtils.getLoginName()); |
|
|
|
int updateInventoryInquiry = inventoryInquiryMapper.updateWarehouseInventoryInquiry(warehouseInventoryInquiry); |
|
|
|
if (updateInventoryInquiry <= 0){ |
|
|
|
throw new BusinessException("更新库存查询记录失败"); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//本次采购数
|
|
|
|
Integer thisPurchaseNum = purchasePlanSelectMaterialVo.getThisPurchaseNum(); |
|
|
|
|
|
|
|
int oldPurchaseNumSum = oldChildren.stream().mapToInt(PurchasePlanChild::getPurchaseNum).sum(); |
|
|
|
//共享可用库存
|
|
|
|
Integer sharedAvailableInventoryNum = purchasePlanSelectMaterialVo.getSharedAvailableInventoryNum(); |
|
|
|
|
|
|
|
if (oldPurchaseNumSum < thisPurchaseNum){ |
|
|
|
//待采购数
|
|
|
|
Integer purchaseNum = purchasePlanSelectMaterialVo.getPurchaseNum(); |
|
|
|
|
|
|
|
if (purchaseNum < thisPurchaseNum){ |
|
|
|
throw new BusinessException("本次采购数量不能大于待采购数量"); |
|
|
|
} |
|
|
|
// 获取旧数据中相同物料编号的数据
|
|
|
|
List<PurchasePlanChild> oldChildren = oldDataGroupedByMaterialNo.get(materialNo); |
|
|
|
|
|
|
|
|
|
|
|
// 优先使用本次占用共享库存
|
|
|
|
Integer remainingSharedInventoryOccupancyNum = Math.min(sharedInventoryOccupancyNum, thisPurchaseNum); |
|
|
|
|
|
|
|
if (!CollectionUtils.isEmpty(oldChildren)) { |
|
|
|
// 按照订单创建时间远离当前时间排序(即由远及近)
|
|
|
@ -472,38 +506,51 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService |
|
|
|
|
|
|
|
for (PurchasePlanChild oldChild : oldChildren) { |
|
|
|
|
|
|
|
Integer purchaseNum = oldChild.getPurchaseNum(); |
|
|
|
// Integer oldPurchaseNum = Optional.ofNullable(oldChild.getPurchaseNum()).orElse(0);//待采购数
|
|
|
|
Integer planPurchaseNum = Optional.ofNullable(oldChild.getPlanPurchaseNum()).orElse(0);//计划采购数
|
|
|
|
Integer oldActualPurchaseNum = Optional.ofNullable(oldChild.getActualPurchaseNum()).orElse(0);//实际采购数
|
|
|
|
Integer cancelNum = Optional.ofNullable(oldChild.getCancelNum()).orElse(0);//作废数
|
|
|
|
Integer oldSharedInventoryOccupancyNum = Optional.ofNullable(oldChild.getSharedInventoryOccupancyNum()).orElse(0);//共享库存占用数
|
|
|
|
|
|
|
|
if (thisPurchaseNum <= 0) break; // 如果本次采购数已分配完毕则退出循环
|
|
|
|
|
|
|
|
if (purchaseNum >= thisPurchaseNum) { |
|
|
|
// 当前记录的待采购数足够覆盖剩余的本次采购数
|
|
|
|
oldChild.setActualPurchaseNum(thisPurchaseNum); |
|
|
|
oldChild.setPurchaseNum(purchaseNum - thisPurchaseNum); |
|
|
|
thisPurchaseNum = 0; // 本次采购数分配完毕
|
|
|
|
} else { |
|
|
|
// 当前记录的待采购数不足以覆盖剩余的本次采购数
|
|
|
|
oldChild.setActualPurchaseNum(purchaseNum); |
|
|
|
thisPurchaseNum -= purchaseNum; |
|
|
|
oldChild.setPurchaseNum(0); // 该记录的待采购数清零
|
|
|
|
if (remainingSharedInventoryOccupancyNum <= 0){ |
|
|
|
if (purchaseNum <= 0){ |
|
|
|
// 更新状态
|
|
|
|
updateChildPurchasePlanStatus(oldChild,sharedInventoryOccupancyNum,thisPurchaseNum,purchaseNum); |
|
|
|
// 更新其他字段
|
|
|
|
oldChild.setUpdateTime(new Date()); |
|
|
|
oldChild.setUpdateBy(ShiroUtils.getLoginName()); |
|
|
|
//oldChild.setThisPurchaseNum(purchasePlanSelectMaterialVo.getThisPurchaseNum());
|
|
|
|
oldChild.setMaterialNoRmbSum(purchasePlanSelectMaterialVo.getMaterialNoRmbSum()); |
|
|
|
oldChild.setMaterialRmbSum(purchasePlanSelectMaterialVo.getMaterialRmbSum()); |
|
|
|
oldChild.setLatestQuoteRmb(purchasePlanSelectMaterialVo.getLatestQuoteRmb()); |
|
|
|
oldChild.setThisPurchaseNum(thisPurchaseNum); |
|
|
|
int result = purchasePlanChildMapper.updatePurchasePlanChild(oldChild); |
|
|
|
if (result <= 0){ |
|
|
|
throw new BusinessException("更新采购计划子表数据失败"); |
|
|
|
} |
|
|
|
} |
|
|
|
break; // 如果本次采购数和共享库存都已分配完毕则退出循环
|
|
|
|
} |
|
|
|
|
|
|
|
/* |
|
|
|
* 部分申请:0<(实际采购数+共享库存占用数+作废数)<计划采购数;可添加采购订单 |
|
|
|
* 全部申请:0<(实际采购数+共享库存占用数+作废数)=计划采购数,作废数<计划采购数;不可添加采购订单 |
|
|
|
* */ |
|
|
|
|
|
|
|
// 更新状态
|
|
|
|
Integer planPurchaseNum = oldChild.getPlanPurchaseNum(); |
|
|
|
if (oldChild.getActualPurchaseNum().equals(planPurchaseNum)) { |
|
|
|
oldChild.setPurchasePlanStatus("2"); // 全部申请
|
|
|
|
} else { |
|
|
|
oldChild.setPurchasePlanStatus("1"); // 部分申请
|
|
|
|
updateChildPurchasePlanStatus(oldChild,sharedInventoryOccupancyNum,thisPurchaseNum,purchaseNum); |
|
|
|
|
|
|
|
if (oldSharedInventoryOccupancyNum == 0){ |
|
|
|
oldChild.setSharedInventoryOccupancyNum(sharedInventoryOccupancyNum); |
|
|
|
}else { |
|
|
|
oldChild.setSharedInventoryOccupancyNum(oldSharedInventoryOccupancyNum + sharedInventoryOccupancyNum); |
|
|
|
} |
|
|
|
if (oldActualPurchaseNum == 0){ |
|
|
|
oldChild.setActualPurchaseNum(thisPurchaseNum); |
|
|
|
}else { |
|
|
|
oldChild.setActualPurchaseNum(oldActualPurchaseNum + thisPurchaseNum); |
|
|
|
} |
|
|
|
|
|
|
|
// 更新其他字段
|
|
|
|
oldChild.setUpdateTime(new Date()); |
|
|
|
oldChild.setUpdateBy(ShiroUtils.getLoginName()); |
|
|
|
oldChild.setThisPurchaseNum(purchasePlanSelectMaterialVo.getThisPurchaseNum()); |
|
|
|
//oldChild.setThisPurchaseNum(purchasePlanSelectMaterialVo.getThisPurchaseNum());
|
|
|
|
oldChild.setMaterialNoRmbSum(purchasePlanSelectMaterialVo.getMaterialNoRmbSum()); |
|
|
|
oldChild.setMaterialRmbSum(purchasePlanSelectMaterialVo.getMaterialRmbSum()); |
|
|
|
oldChild.setLatestQuoteRmb(purchasePlanSelectMaterialVo.getLatestQuoteRmb()); |
|
|
@ -514,12 +561,58 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService |
|
|
|
if (result <= 0){ |
|
|
|
throw new BusinessException("更新采购计划子表数据失败"); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return purchasePlanChildren; |
|
|
|
} |
|
|
|
|
|
|
|
// 定义一个方法来更新采购计划状态
|
|
|
|
private void updateChildPurchasePlanStatus(PurchasePlanChild oldChild,Integer sharedInventoryOccupancyNum,Integer thisPurchaseNum,Integer purchaseNum) { |
|
|
|
|
|
|
|
/* |
|
|
|
* 部分申请:0<(实际采购数+共享库存占用数+作废数)<计划采购数;可添加采购订单 |
|
|
|
* 全部申请:0<(实际采购数+共享库存占用数+作废数)=计划采购数,作废数<计划采购数;不可添加采购订单 |
|
|
|
* */ |
|
|
|
|
|
|
|
Integer oldSharedInventoryOccupancyNum = Optional.ofNullable(oldChild.getSharedInventoryOccupancyNum()).orElse(0);//共享库存占用数
|
|
|
|
Integer planPurchaseNum = Optional.ofNullable(oldChild.getPlanPurchaseNum()).orElse(0);//计划采购数
|
|
|
|
Integer actualPurchaseNum = Optional.ofNullable(oldChild.getActualPurchaseNum()).orElse(0);//实际采购数
|
|
|
|
Integer cancelNum = Optional.ofNullable(oldChild.getCancelNum()).orElse(0);//作废数
|
|
|
|
|
|
|
|
if (oldSharedInventoryOccupancyNum == 0){ |
|
|
|
oldSharedInventoryOccupancyNum = sharedInventoryOccupancyNum; |
|
|
|
}else { |
|
|
|
oldSharedInventoryOccupancyNum += sharedInventoryOccupancyNum; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (purchaseNum <= 0){ |
|
|
|
actualPurchaseNum = thisPurchaseNum; |
|
|
|
}else { |
|
|
|
actualPurchaseNum += thisPurchaseNum; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Integer totalApplied = actualPurchaseNum + oldSharedInventoryOccupancyNum + cancelNum; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (totalApplied == 0 && cancelNum < planPurchaseNum) { |
|
|
|
oldChild.setPurchasePlanStatus("0"); // 待申请
|
|
|
|
} else if (0 < totalApplied && totalApplied < planPurchaseNum) { |
|
|
|
oldChild.setPurchasePlanStatus("1"); // 部分申请
|
|
|
|
} else if (totalApplied.equals(planPurchaseNum) && cancelNum < planPurchaseNum) { |
|
|
|
oldChild.setPurchasePlanStatus("2"); // 全部申请
|
|
|
|
} else { |
|
|
|
throw new BusinessException("采购计划状态不符合预期"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//处理采购计划主表
|
|
|
|
private void updatePurchasePlanByAddPurchaseOrder(AddPurchaseOrder addPurchaseOrder,List<PurchasePlanChild> purchasePlanChildList) { |
|
|
|
|
|
|
@ -530,7 +623,7 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService |
|
|
|
|
|
|
|
List<PurchasePlanSelectMaterialVo> purchasePlanSelectMaterialVoList = addPurchaseOrder.getPurchasePlanSelectMaterialVoList(); |
|
|
|
|
|
|
|
|
|
|
|
PurchasePlanTwo purchasePlanTwo = addPurchaseOrder.getPurchasePlanTwo(); |
|
|
|
|
|
|
|
PurchasePlanOne purchasePlanOne = addPurchaseOrder.getPurchasePlanOne(); |
|
|
|
String purchasePlanCodes = purchasePlanOne.getPurchasePlanCodes(); |
|
|
@ -563,15 +656,28 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService |
|
|
|
purchasePlan.setActualPurchaseSum(0); |
|
|
|
} |
|
|
|
|
|
|
|
// 累加 actualPurchaseSum
|
|
|
|
Integer planPurchaseSum = purchasePlan.getPlanPurchaseSum();//计划采购数
|
|
|
|
|
|
|
|
// 累加 实际采购数 actualPurchaseSum
|
|
|
|
int actualPurchaseSum = children.stream() |
|
|
|
.mapToInt(PurchasePlanChild::getActualPurchaseNum) |
|
|
|
.sum(); |
|
|
|
purchasePlan.setActualPurchaseSum(purchasePlan.getActualPurchaseSum() + actualPurchaseSum); |
|
|
|
|
|
|
|
// 更新 purchaseSum
|
|
|
|
int currentPurchaseSum = purchasePlan.getPurchaseSum(); |
|
|
|
purchasePlan.setPurchaseSum(currentPurchaseSum - actualPurchaseSum); |
|
|
|
|
|
|
|
//更新共享库存占用总数 sharedInventoryOccupancySum
|
|
|
|
Integer sharedInventoryOccupancySum = purchasePlanTwo.getSharedInventoryOccupancySum(); |
|
|
|
purchasePlan.setSharedInventoryOccupancySum(sharedInventoryOccupancySum); |
|
|
|
|
|
|
|
//待采购数=(计划采购数-实际采购数-共享库存占用数-作废数)
|
|
|
|
// 更新 待采购数 purchaseSum
|
|
|
|
Integer currentPurchaseSum = purchasePlan.getPurchaseSum(); |
|
|
|
currentPurchaseSum = planPurchaseSum - purchasePlan.getActualPurchaseSum() - purchasePlan.getSharedInventoryOccupancySum() - purchasePlan.getCancelSum(); |
|
|
|
purchasePlan.setPurchaseSum(currentPurchaseSum); |
|
|
|
|
|
|
|
|
|
|
|
//计算用于改变申请状态的数据
|
|
|
|
Integer totalNum = purchasePlan.getActualPurchaseSum() + purchasePlan.getSharedInventoryOccupancySum() + purchasePlan.getCancelSum(); |
|
|
|
|
|
|
|
// 计算合计值
|
|
|
|
double totalNoRmbSum = children.stream().mapToDouble(vo -> vo.getMaterialNoRmbSum().doubleValue()).sum(); |
|
|
@ -590,9 +696,9 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService |
|
|
|
purchasePlan.setNoRmbSum(totalBigDecimalNoRmbSum.add(currentNoRmbSum)); |
|
|
|
|
|
|
|
// 更新采购计划状态
|
|
|
|
if (purchasePlan.getActualPurchaseSum() < purchasePlan.getPlanPurchaseSum()) { |
|
|
|
if (totalNum < purchasePlan.getPlanPurchaseSum()) { |
|
|
|
purchasePlan.setPurchasePlanStatus("1"); |
|
|
|
} else if (purchasePlan.getActualPurchaseSum().equals(purchasePlan.getPlanPurchaseSum())) { |
|
|
|
} else if (totalNum.equals(purchasePlan.getPlanPurchaseSum())) { |
|
|
|
purchasePlan.setPurchasePlanStatus("2"); |
|
|
|
} |
|
|
|
|
|
|
@ -713,7 +819,6 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService |
|
|
|
// 用于存储每个采购计划的总变动量
|
|
|
|
Map<String, Integer> planSumChanges = new HashMap<>(); |
|
|
|
|
|
|
|
// 将采购订单子表中的实际采购数量分配给采购计划子表
|
|
|
|
// 将采购订单子表中的实际采购数量分配给采购计划子表
|
|
|
|
for (PurchaseOrderChild orderChild : purchaseOrderChildList) { |
|
|
|
String materialNo = orderChild.getMaterialNo(); |
|
|
|