From 7bd10d34e8a8dc2437ec8551eb511e37634d7306 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 02 十一月 2026 16:51:52 +0800
Subject: [PATCH] feat(mes): 生产计划审批改走协同办公,修复工单领料与产成品入库校验
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java | 51 +++++++++++++++++++++++++++------------------------
1 files changed, 27 insertions(+), 24 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java
index bc9586d..c31ce78 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/task/MesProTaskServiceImpl.java
@@ -138,19 +138,18 @@
scheduleGuard.lock();
// 1. 鏍¢獙鍏宠仈鏁版嵁瀛樺湪
MesProWorkOrderDO workOrder = workOrderService.validateWorkOrderConfirmed(createReqVO.getWorkOrderId());
- var station = workstationService.validateWorkstationExistsAndEnable(createReqVO.getWorkstationId());
- if (!java.util.Objects.equals(station.getProcessId(), createReqVO.getProcessId())) {
- throw exception(cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRO_TASK_SCHEDULE_INVALID, "宸ヤ綔绔欎笌宸ュ簭涓嶅尮閰�");
- }
- routeService.validateRouteExists(createReqVO.getRouteId());
- processService.validateProcessExistsAndEnable(createReqVO.getProcessId());
+ workstationService.validateWorkstationExistsAndEnable(createReqVO.getWorkstationId());
// 2. 鑷姩纭畾 itemId锛氫紭鍏堝墠绔紶鍏� 鈫� 宸ヨ壓璺嚎宸ュ簭鐨勪骇鍑轰骇鍝� 鈫� 宸ュ崟鎴愬搧
+ // 鏈厤缃伐搴�/宸ヨ壓璺嚎鏃讹紝浠诲姟鐩存帴鎸夊伐鍗曟垚鍝佷骇鍑�
Long itemId = createReqVO.getItemId();
- if (itemId == null) {
+ if (itemId == null && createReqVO.getRouteId() != null && createReqVO.getProcessId() != null) {
MesProRouteProcessDO routeProcess = routeProcessService
.getRouteProcessByRouteIdAndProcessId(createReqVO.getRouteId(), createReqVO.getProcessId());
itemId = resolveTaskItemId(routeProcess, workOrder.getProductId());
+ }
+ if (itemId == null) {
+ itemId = workOrder.getProductId();
}
MesMdItemDO item = itemService.validateItemExists(itemId);
@@ -204,12 +203,6 @@
if (updateReqVO.getWorkstationId() != null) {
workstationService.validateWorkstationExists(updateReqVO.getWorkstationId());
}
- if (updateReqVO.getRouteId() != null) {
- routeService.validateRouteExists(updateReqVO.getRouteId());
- }
- if (updateReqVO.getProcessId() != null) {
- processService.validateProcessExistsAndEnable(updateReqVO.getProcessId());
- }
MesMdItemDO item;
if (updateReqVO.getItemId() != null) {
item = itemService.validateItemExists(updateReqVO.getItemId());
@@ -225,10 +218,6 @@
.setQuantity(quantity)
.setStartTime(updateReqVO.getStartTime() != null ? updateReqVO.getStartTime() : task.getStartTime())
.setEndTime(updateReqVO.getEndTime() != null ? updateReqVO.getEndTime() : task.getEndTime());
- var station = workstationService.validateWorkstationExistsAndEnable(candidate.getWorkstationId());
- if (!java.util.Objects.equals(station.getProcessId(), candidate.getProcessId())) {
- throw exception(cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRO_TASK_SCHEDULE_INVALID, "宸ヤ綔绔欎笌宸ュ簭涓嶅尮閰�");
- }
scheduleGuard.validate(workOrderService.validateWorkOrderConfirmed(candidate.getWorkOrderId()), candidate, task.getId());
// 2. 鏇存柊
@@ -249,13 +238,24 @@
private void synchronizeScheduledQuantity(MesProWorkOrderDO order, Long routeId) {
List<MesProRouteProcessDO> required = buildRouteProcessList(routeId, order.getId());
List<MesProTaskDO> tasks = taskMapper.selectListByWorkOrderId(order.getId());
- BigDecimal scheduled = order.getQuantity();
- for (var process : required) {
- BigDecimal amount = tasks.stream().filter(task -> java.util.Objects.equals(task.getProcessId(), process.getProcessId())
- && !java.util.Objects.equals(task.getStatus(), MesProTaskStatusEnum.CANCELED.getStatus()))
+ BigDecimal orderQuantity = order.getQuantity() == null ? BigDecimal.ZERO : order.getQuantity();
+ BigDecimal scheduled;
+ if (CollUtil.isEmpty(required)) {
+ // 鏈厤缃伐搴�/宸ヨ壓璺嚎锛氭暣寮犲伐鍗曞彧鏈変竴涓敓浜ф楠わ紝宸叉帓浜ч噺鎸変换鍔℃暟閲忓悎璁�
+ scheduled = tasks.stream()
+ .filter(task -> !java.util.Objects.equals(task.getStatus(), MesProTaskStatusEnum.CANCELED.getStatus()))
.map(task -> task.getQuantity() == null ? BigDecimal.ZERO : task.getQuantity())
- .reduce(BigDecimal.ZERO, BigDecimal::add);
- scheduled = scheduled.min(amount);
+ .reduce(BigDecimal.ZERO, BigDecimal::add)
+ .min(orderQuantity);
+ } else {
+ scheduled = orderQuantity;
+ for (var process : required) {
+ BigDecimal amount = tasks.stream().filter(task -> java.util.Objects.equals(task.getProcessId(), process.getProcessId())
+ && !java.util.Objects.equals(task.getStatus(), MesProTaskStatusEnum.CANCELED.getStatus()))
+ .map(task -> task.getQuantity() == null ? BigDecimal.ZERO : task.getQuantity())
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
+ scheduled = scheduled.min(amount);
+ }
}
scheduleWorkOrderMapper.updateById(new MesProWorkOrderDO().setId(order.getId()).setQuantityScheduled(scheduled));
}
@@ -340,7 +340,10 @@
}
return result;
}
- // 2. 鍥為��鍒板伐鑹鸿矾绾挎ā鏉垮伐搴�
+ // 2. 鍥為��鍒板伐鑹鸿矾绾挎ā鏉垮伐搴忥紱鏈厤缃伐鑹鸿矾绾挎椂瑙嗕负鍗曞伐搴忕敓浜�
+ if (routeId == null) {
+ return new java.util.ArrayList<>();
+ }
List<MesProRouteProcessDO> routeProcesses = routeProcessService.getRouteProcessListByRouteId(routeId);
if (CollUtil.isEmpty(routeProcesses)) {
throw exception(cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.PRO_ROUTE_ENABLE_NO_PROCESS);
--
Gitblit v1.9.3