From 97bf792b17c74a3b55770d4b330e5a02a24fb290 Mon Sep 17 00:00:00 2001 From: liuxiaoxu <1793812695@qq.com> Date: Thu, 28 Nov 2024 15:28:42 +0800 Subject: [PATCH] =?UTF-8?q?[feat]=E9=87=87=E8=B4=AD=E7=AE=A1=E7=90=86=20?= =?UTF-8?q?=E4=BE=9B=E5=BA=94=E5=95=86=E5=88=86=E9=A1=B5=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=96=B0=E5=A2=9E=E6=A0=B9=E6=8D=AE=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E6=97=B6=E9=97=B4=E6=8E=92=E5=BA=8F=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E9=87=87=E8=B4=AD=E8=AE=A1=E5=88=92=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E9=87=87=E8=B4=AD=E8=AE=A2=E5=8D=95=E7=9B=B8=E5=90=8C=E6=96=99?= =?UTF-8?q?=E5=8F=B7=E7=9A=84=E6=95=B0=E6=8D=AE=EF=BC=8C=E5=AE=9E=E9=99=85?= =?UTF-8?q?=E9=87=87=E8=B4=AD=E6=95=B0=E3=80=81=E5=BE=85=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E6=95=B0=E5=92=8C=E7=8A=B6=E6=80=81=E7=9A=84=E5=8F=98=E5=8C=96?= =?UTF-8?q?=E7=9A=84bug=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/PurchaseOrderServiceImpl.java | 75 +++++++++++-------- .../mapper/system/SysSupplierMapper.xml | 2 +- 2 files changed, 44 insertions(+), 33 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseOrderServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseOrderServiceImpl.java index cce085b0..f8a2c758 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseOrderServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/purchase/service/impl/PurchaseOrderServiceImpl.java @@ -449,51 +449,62 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService // 获取旧数据中相同物料编号的数据 List oldChildren = oldDataGroupedByMaterialNo.get(materialNo); - if (oldChildren != null && !oldChildren.isEmpty()) { - // 按照 订单创建时间 远离当前时间排序 - oldChildren.sort(Comparator.comparing(oldChild -> -Math.abs(now.getTime() - oldChild.getCreateTime().getTime()))); + Integer thisPurchaseNum = purchasePlanSelectMaterialVo.getThisPurchaseNum(); - for (PurchasePlanChild oldChild : oldChildren) { + int oldPurchaseNumSum = oldChildren.stream().mapToInt(PurchasePlanChild::getPurchaseNum).sum(); - Integer thisPurchaseNum = purchasePlanSelectMaterialVo.getThisPurchaseNum(); - //本次采购数也是实际采购数 - oldChild.setActualPurchaseNum(thisPurchaseNum); - //待采购数 - Integer purchaseNum = oldChild.getPurchaseNum(); - if (purchaseNum >= thisPurchaseNum){ - purchaseNum = purchaseNum - thisPurchaseNum; - oldChild.setPurchaseNum(purchaseNum); - }else { + if (oldPurchaseNumSum < thisPurchaseNum){ throw new BusinessException("本次采购数量不能大于待采购数量"); } + if (!CollectionUtils.isEmpty(oldChildren)) { + // 按照订单创建时间远离当前时间排序(即由远及近) + oldChildren.sort(Comparator.comparing(oldChild -> oldChild.getCreateTime().getTime())); + + for (PurchasePlanChild oldChild : oldChildren) { + + Integer purchaseNum = oldChild.getPurchaseNum(); + + 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); // 该记录的待采购数清零 + } + /* * 部分申请:0<(实际采购数+共享库存占用数+作废数)<计划采购数;可添加采购订单 * 全部申请:0<(实际采购数+共享库存占用数+作废数)=计划采购数,作废数<计划采购数;不可添加采购订单 * */ - //计划采购数 - Integer planPurchaseNum = oldChild.getPlanPurchaseNum(); - if (thisPurchaseNum < planPurchaseNum){ - oldChild.setPurchasePlanStatus("1");//部分申请 - } - if (thisPurchaseNum.equals(planPurchaseNum)){ - oldChild.setPurchasePlanStatus("2");//全部申请 - } - oldChild.setUpdateTime(new Date()); - oldChild.setUpdateBy(ShiroUtils.getLoginName()); - oldChild.setThisPurchaseNum(thisPurchaseNum); + // 更新状态 + Integer planPurchaseNum = oldChild.getPlanPurchaseNum(); + if (oldChild.getActualPurchaseNum().equals(planPurchaseNum)) { + oldChild.setPurchasePlanStatus("2"); // 全部申请 + } else { + oldChild.setPurchasePlanStatus("1"); // 部分申请 + } + // 更新其他字段 + oldChild.setUpdateTime(new Date()); + oldChild.setUpdateBy(ShiroUtils.getLoginName()); + oldChild.setThisPurchaseNum(purchasePlanSelectMaterialVo.getThisPurchaseNum()); oldChild.setMaterialNoRmbSum(purchasePlanSelectMaterialVo.getMaterialNoRmbSum()); oldChild.setMaterialRmbSum(purchasePlanSelectMaterialVo.getMaterialRmbSum()); oldChild.setLatestQuoteRmb(purchasePlanSelectMaterialVo.getLatestQuoteRmb()); - //收集更新后的子表数据 - purchasePlanChildren.add(oldChild); + oldChild.setThisPurchaseNum(thisPurchaseNum); + // 收集更新后的子表数据 + purchasePlanChildren.add(oldChild); int result = purchasePlanChildMapper.updatePurchasePlanChild(oldChild); if (result <= 0){ throw new BusinessException("更新采购计划子表数据失败"); } - // 更新完成后,跳出循环 - break; } } } @@ -544,14 +555,14 @@ public class PurchaseOrderServiceImpl implements IPurchaseOrderService } // 累加 actualPurchaseSum - int thisPurchaseSum = children.stream() - .mapToInt(PurchasePlanChild::getThisPurchaseNum) + int actualPurchaseSum = children.stream() + .mapToInt(PurchasePlanChild::getActualPurchaseNum) .sum(); - purchasePlan.setActualPurchaseSum(purchasePlan.getActualPurchaseSum() + thisPurchaseSum); + purchasePlan.setActualPurchaseSum(purchasePlan.getActualPurchaseSum() + actualPurchaseSum); // 更新 purchaseSum int currentPurchaseSum = purchasePlan.getPurchaseSum(); - purchasePlan.setPurchaseSum(currentPurchaseSum - thisPurchaseSum); + purchasePlan.setPurchaseSum(currentPurchaseSum - actualPurchaseSum); // 计算合计值 double totalNoRmbSum = children.stream().mapToDouble(vo -> vo.getMaterialNoRmbSum().doubleValue()).sum(); diff --git a/ruoyi-admin/src/main/resources/mapper/system/SysSupplierMapper.xml b/ruoyi-admin/src/main/resources/mapper/system/SysSupplierMapper.xml index 2045cac0..6c8f5299 100644 --- a/ruoyi-admin/src/main/resources/mapper/system/SysSupplierMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/system/SysSupplierMapper.xml @@ -131,7 +131,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and sup.invoice_company_name like concat('%', #{invoiceCompanyName}, '%') and sup.company_tax_number like concat('%', #{companyTaxNumber}, '%') - order by sup.apply_time asc, sup.create_time desc + order by sup.create_time desc