From e52dfc522497311025b277b5e0ef3590fb3de990 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期三, 11 三月 2026 16:41:49 +0800
Subject: [PATCH] 主生产计划:优化合并下发,根据剩余下发数量对比需要下发的数量
---
src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java | 15 +++++++++++++++
src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java | 31 ++++++++++++++++++-------------
2 files changed, 33 insertions(+), 13 deletions(-)
diff --git a/src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java b/src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java
index bca6e46..2273b1f 100644
--- a/src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java
+++ b/src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java
@@ -230,4 +230,19 @@
@ApiModelProperty(value = "涓嬪彂鏁伴噺")
@Excel(name = "涓嬪彂鏁伴噺")
private BigDecimal assignedQuantity;
+
+ /**
+ * 璁$畻鍓╀綑鏂规暟
+ * @return 鍓╀綑鏂规暟
+ */
+ @ApiModelProperty(value = "鍓╀綑鏂规暟")
+ public BigDecimal getRemainingVolume() {
+ if (volume == null) {
+ return BigDecimal.ZERO;
+ }
+ if (assignedQuantity == null) {
+ return volume;
+ }
+ return volume.subtract(assignedQuantity);
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java b/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
index 4b7b827..8cb137b 100644
--- a/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
+++ b/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
@@ -122,14 +122,14 @@
}
- // 鍙犲姞鏂规暟
- BigDecimal totalVolume = plans.stream()
- .map(ProductionPlan::getVolume)
+ // 鍙犲姞鍓╀綑鏂规暟
+ BigDecimal totalRemainingVolume = plans.stream()
+ .map(ProductionPlan::getRemainingVolume)
.filter(v -> v != null)
.reduce(BigDecimal.ZERO, BigDecimal::add);
- // 鍒ゆ柇涓嬪彂鏁伴噺鏄惁澶т簬绛変簬鏂规暟
- if (productionPlanDto.getTotalAssignedQuantity().compareTo(totalVolume) > 0) {
- throw new BaseException("鎿嶄綔澶辫触锛屼笅鍙戞暟閲忎笉鑳藉ぇ浜庢柟鏁�");
+ // 鍒ゆ柇涓嬪彂鏁伴噺鏄惁澶т簬绛変簬鍓╀綑鏂规暟
+ if (productionPlanDto.getTotalAssignedQuantity().compareTo(totalRemainingVolume) > 0) {
+ throw new BaseException("鎿嶄綔澶辫触锛屼笅鍙戞暟閲忎笉鑳藉ぇ浜庡墿浣欐柟鏁�");
}
// 鍒涘缓鐢熶骇璁㈠崟
@@ -145,29 +145,34 @@
if (volume == null) {
continue;
}
+ // 璁$畻鍓╀綑鏂规暟
+ BigDecimal remainingVolume = plan.getRemainingVolume();
+ if (remainingVolume.compareTo(BigDecimal.ZERO) <= 0) {
+ continue;
+ }
ProductOrderPlan productOrderPlan = new ProductOrderPlan();
productOrderPlan.setProductOrderId(productOrder.getId());
productOrderPlan.setProductionPlanId(plan.getId());
- if (assignedVolume.add(volume).compareTo(productionPlanDto.getTotalAssignedQuantity()) >= 0) {
+ if (assignedVolume.add(remainingVolume).compareTo(productionPlanDto.getTotalAssignedQuantity()) >= 0) {
// 鏈�鍚庝竴涓鍒掞紝鍒嗛厤鍓╀綑鏂规暟
- BigDecimal remainingVolume = productionPlanDto.getTotalAssignedQuantity().subtract(assignedVolume);
- plan.setAssignedQuantity(plan.getAssignedQuantity().add(remainingVolume));
- productOrderPlan.setAssignedQuantity(remainingVolume);
+ BigDecimal lastRemainingVolume = productionPlanDto.getTotalAssignedQuantity().subtract(assignedVolume);
+ plan.setAssignedQuantity(plan.getAssignedQuantity().add(lastRemainingVolume));
+ productOrderPlan.setAssignedQuantity(lastRemainingVolume);
productionPlanMapper.updateById(plan);
productOrderPlanMapper.insert(productOrderPlan);
break;
}
// 鍒嗛厤褰撳墠璁″垝鏂规暟
- plan.setAssignedQuantity(plan.getAssignedQuantity().add(volume));
- productOrderPlan.setAssignedQuantity(volume);
+ plan.setAssignedQuantity(plan.getAssignedQuantity().add(remainingVolume));
+ productOrderPlan.setAssignedQuantity(remainingVolume);
// 鏇存柊鐢熶骇璁″垝
productionPlanMapper.updateById(plan);
// 鍒涘缓鍏宠仈鍏崇郴
productOrderPlanMapper.insert(productOrderPlan);
- assignedVolume = assignedVolume.add(volume);
+ assignedVolume = assignedVolume.add(remainingVolume);
}
return true;
}
--
Gitblit v1.9.3