From 99ac94a7cf412d9f0081c1d84b520eab051bb0fd Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期五, 24 四月 2026 11:08:21 +0800
Subject: [PATCH] feat(production): 重构生产计划模块,新增和优化生产计划功能
---
src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java | 27 ++++++++++++++++++++++++++-
1 files changed, 26 insertions(+), 1 deletions(-)
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
index 92fd9f2..ff43daf 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -19,6 +19,7 @@
import com.ruoyi.procurementrecord.utils.StockUtils;
import com.ruoyi.production.bean.dto.ProductStructureDto;
import com.ruoyi.production.bean.dto.ProductionProductMainDto;
+import com.ruoyi.production.enums.ProductOrderStatusEnum;
import com.ruoyi.production.mapper.*;
import com.ruoyi.production.pojo.*;
import com.ruoyi.production.service.ProductionProductMainService;
@@ -107,6 +108,7 @@
}
private Boolean addProductMainByProductionTask(ProductionProductMainDto dto) {
+ // 鎶ュ伐浠ヨ鍗曞伐搴忓揩鐓т负鍑嗭紝閬垮厤宸ヨ壓涓绘暟鎹彉鏇村悗褰卞搷鍘嗗彶宸ュ崟鎵ц銆�
SysUser user = userMapper.selectUserById(dto.getUserId());
ProductionOperationTask productionOperationTask = productionOperationTaskMapper.selectById(dto.getProductionOperationTaskId());
if (productionOperationTask == null) {
@@ -144,6 +146,7 @@
productStructureDto.setUnitQuantity(BigDecimal.ONE);
productStructureDtos.add(productStructureDto);
for (ProductStructureDto item : productStructureDtos) {
+ // 褰撳墠瀹炵幇鎸夊伐搴忔垚鍝佺洿鎺ヤ綔涓烘姇鍏ワ紝鍚庣画鑻ユ帴鍏ラ鏂欒褰曞彲鍦ㄨ繖閲屾浛鎹㈡潵婧愩��
ProductionProductInput productionProductInput = new ProductionProductInput();
productionProductInput.setProductionProductMainId(productionProductMain.getId());
productionProductInput.setProductMainId(productionProductMain.getId());
@@ -171,6 +174,7 @@
boolean isLastOperation = routingOperation.getDragSort() != null && routingOperation.getDragSort().equals(routingOperationList.size());
if (productQty.compareTo(BigDecimal.ZERO) > 0) {
if (Boolean.TRUE.equals(routingOperation.getIsQuality())) {
+ // 璐ㄦ宸ュ簭鍏堢敓鎴愭楠屽崟锛岄潪璐ㄦ宸ュ簭鐩存帴鍏ュ悎鏍煎搧搴撳瓨銆�
int inspectType = isLastOperation ? 2 : 1;
String process = isLastOperation ? null : technologyOperation == null ? null : technologyOperation.getName();
Product product = productMapper.selectById(productModel.getProductId());
@@ -209,20 +213,26 @@
if (ObjectUtils.isNull(productionOperationTask.getActualStartTime())) {
productionOperationTask.setActualStartTime(LocalDate.now());
}
+ // 鎶ュ伐椹卞姩宸ュ崟鐘舵�佹祦杞細鏈変骇鍑哄嵆杩涜涓紝杈惧埌璁″垝閲忓嵆瀹屽伐銆�
+ productionOperationTask.setStatus(3);
if (productionOperationTask.getPlanQuantity() != null
&& productionOperationTask.getCompleteQuantity().compareTo(productionOperationTask.getPlanQuantity()) >= 0) {
productionOperationTask.setActualEndTime(LocalDate.now());
+ productionOperationTask.setStatus(4);
}
productionOperationTaskMapper.updateById(productionOperationTask);
if (ObjectUtils.isNull(productionOrder.getStartTime())) {
productionOrder.setStartTime(LocalDateTime.now());
}
+ // 璁㈠崟鐘舵�佺敱鏈�鍚庝竴閬撳伐搴忕殑鍚堟牸浜у嚭鎺ㄥ姩锛岄伩鍏嶄腑闂村伐搴忔彁鍓嶅畬宸ャ��
+ productionOrder.setStatus(ProductOrderStatusEnum.RUNNING.getCode());
if (isLastOperation) {
productionOrder.setCompleteQuantity(defaultDecimal(productionOrder.getCompleteQuantity()).add(productQty));
if (productionOrder.getQuantity() != null
&& productionOrder.getCompleteQuantity().compareTo(productionOrder.getQuantity()) >= 0) {
productionOrder.setEndTime(LocalDateTime.now());
+ productionOrder.setStatus(ProductOrderStatusEnum.FINISHED.getCode());
}
}
productionOrderMapper.updateById(productionOrder);
@@ -253,6 +263,7 @@
}
private Boolean removeProductMainByProductionTask(ProductionProductMain productionProductMain) {
+ // 鍒犻櫎鎶ュ伐闇�瑕佸悓姝ュ洖婊氳川妫�銆佸簱瀛樸�佸伐鏃舵牳绠楀拰璁㈠崟/宸ュ崟杩涘害銆�
List<QualityInspect> qualityInspects = qualityInspectMapper.selectList(
Wrappers.<QualityInspect>lambdaQuery().eq(QualityInspect::getProductMainId, productionProductMain.getId()));
if (qualityInspects.size() > 0) {
@@ -275,11 +286,19 @@
BigDecimal validQuantity = defaultDecimal(productionProductOutput.getQuantity()).subtract(defaultDecimal(productionProductOutput.getScrapQty()));
productionOperationTask.setCompleteQuantity(defaultDecimal(productionOperationTask.getCompleteQuantity()).subtract(validQuantity));
productionOperationTask.setActualEndTime(null);
+ if (defaultDecimal(productionOperationTask.getCompleteQuantity()).compareTo(BigDecimal.ZERO) <= 0) {
+ productionOperationTask.setCompleteQuantity(BigDecimal.ZERO);
+ productionOperationTask.setActualStartTime(null);
+ productionOperationTask.setStatus(2);
+ } else {
+ productionOperationTask.setStatus(3);
+ }
productionOperationTaskMapper.updateById(productionOperationTask);
ProductionOrder productionOrder = productionOrderMapper.selectById(productionOperationTask.getProductionOrderId());
ProductionOrderRoutingOperation routingOperation = productionOrderRoutingOperationMapper.selectById(productionOperationTask.getTechnologyRoutingOperationId());
if (productionOrder != null && routingOperation != null) {
+ // 鍙湁鏈�鍚庝竴閬撳伐搴忕殑鎶ュ伐鎵嶄細褰卞搷鐢熶骇璁㈠崟瀹屽伐鏁伴噺銆�
List<ProductionOrderRoutingOperation> routingOperationList = productionOrderRoutingOperationMapper.selectList(
Wrappers.<ProductionOrderRoutingOperation>lambdaQuery()
.eq(ProductionOrderRoutingOperation::getTechnologyRoutingId, routingOperation.getTechnologyRoutingId())
@@ -289,8 +308,14 @@
BigDecimal newCompleteQty = defaultDecimal(productionOrder.getCompleteQuantity()).subtract(validQuantity);
productionOrder.setCompleteQuantity(newCompleteQty.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : newCompleteQty);
productionOrder.setEndTime(null);
- productionOrderMapper.updateById(productionOrder);
}
+ if (defaultDecimal(productionOrder.getCompleteQuantity()).compareTo(BigDecimal.ZERO) <= 0) {
+ productionOrder.setStartTime(null);
+ productionOrder.setStatus(ProductOrderStatusEnum.WAIT.getCode());
+ } else {
+ productionOrder.setStatus(ProductOrderStatusEnum.RUNNING.getCode());
+ }
+ productionOrderMapper.updateById(productionOrder);
}
}
--
Gitblit v1.9.3