From 962f78c8383e7c884ddb08c951c15e5ba6eb4cb8 Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期五, 23 十月 2026 15:43:33 +0800
Subject: [PATCH] fix: 完善审批流程与业务状态校验
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskResultServiceImpl.java | 31 +++++++++++++++++++++++--------
1 files changed, 23 insertions(+), 8 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskResultServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskResultServiceImpl.java
index a7fbc02..93299b4 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskResultServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskResultServiceImpl.java
@@ -19,6 +19,7 @@
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_STOCK_TAKING_TASK_LINE_ALREADY_TAKEN;
+import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_STOCK_TAKING_TASK_LINE_NOT_MATCH;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_STOCK_TAKING_TASK_RESULT_NOT_EXISTS;
/**
@@ -52,8 +53,9 @@
@Override
@Transactional(rollbackFor = Exception.class)
public Long createStockTakingTaskResult(MesWmStockTakingTaskResultSaveReqVO createReqVO) {
- // 1. 鏍¢獙浠诲姟澶勪簬鐩樼偣涓姸鎬�
+ // 1. 鏍¢獙浠诲姟澶勪簬鐩樼偣涓姸鎬侊紝涓旂粨鏋滃鎵瑰凡鎻愪氦銆佹湭瀹℃牳鏃剁姝㈠啓鍏�
stockTakingTaskService.validateStockTakingTaskExistsAndApproving(createReqVO.getTaskId());
+ stockTakingTaskService.validateResultApprovalNotPending(createReqVO.getTaskId());
// 2. 纭畾 lineId 鍜岃处闈㈡暟閲�
Long lineId = createReqVO.getLineId();
@@ -71,10 +73,16 @@
} else {
// 2.3 濡傛灉浼犻�掍簡 lineId锛屼粠 line 涓幏鍙� quantity
existingLine = stockTakingTaskLineService.validateStockTakingTaskLineExists(lineId);
+ // 2.4 闃叉涓插崟锛氱洏鐐硅蹇呴』灞炰簬璇锋眰鎸囧畾鐨勭洏鐐逛换鍔�
+ if (ObjUtil.notEqual(existingLine.getTaskId(), createReqVO.getTaskId())) {
+ throw exception(WM_STOCK_TAKING_TASK_LINE_NOT_MATCH);
+ }
}
- if (existingLine != null
- && existingLine.getTakingQuantity() != null
- && existingLine.getTakingQuantity().compareTo(BigDecimal.ZERO) > 0) {
+ // 2.5 闃叉閲嶅锛氬悓涓�鐩樼偣浠诲姟琛屽彧鍏佽瀛樺湪涓�鏉$洏鐐圭粨鏋滐紙鏃犺瀹炵洏鏁伴噺鏄惁涓� 0锛�
+ Long finalLineId = lineId;
+ boolean resultExists = stockTakingTaskResultMapper.selectListByTaskId(createReqVO.getTaskId()).stream()
+ .anyMatch(result -> Objects.equals(result.getLineId(), finalLineId));
+ if (resultExists) {
throw exception(WM_STOCK_TAKING_TASK_LINE_ALREADY_TAKEN);
}
BigDecimal quantity = existingLine != null ? existingLine.getQuantity() : BigDecimal.ZERO; // 璐﹂潰鏁伴噺
@@ -95,8 +103,9 @@
updateReqVO.setLineId(null); // lineId 涓嶈兘淇敼锛岄伩鍏嶈鎿嶄綔
// 1.1 鏍¢獙璁板綍瀛樺湪
MesWmStockTakingTaskResultDO oldResult = validateStockTakingTaskResultExists(updateReqVO.getId());
- // 1.2 鏍¢獙浠诲姟澶勪簬鐩樼偣涓姸鎬�
+ // 1.2 鏍¢獙浠诲姟澶勪簬鐩樼偣涓姸鎬侊紝涓旂粨鏋滃鎵瑰凡鎻愪氦銆佹湭瀹℃牳鏃剁姝慨鏀�
stockTakingTaskService.validateStockTakingTaskExistsAndApproving(oldResult.getTaskId());
+ stockTakingTaskService.validateResultApprovalNotPending(oldResult.getTaskId());
// 2. 鏇存柊 result 璁板綍
MesWmStockTakingTaskResultDO result = BeanUtils.toBean(updateReqVO, MesWmStockTakingTaskResultDO.class);
@@ -112,15 +121,21 @@
public void deleteStockTakingTaskResult(Long id) {
// 1.1 鏍¢獙 result 鏄惁瀛樺湪
MesWmStockTakingTaskResultDO result = validateStockTakingTaskResultExists(id);
- // 1.2 鏍¢獙 task 鏄惁澶勪簬 APPROVING 鐘舵��
+ // 1.2 鏍¢獙 task 鏄惁澶勪簬 APPROVING 鐘舵�侊紝涓旂粨鏋滃鎵瑰凡鎻愪氦銆佹湭瀹℃牳鏃剁姝㈠垹闄�
stockTakingTaskService.validateStockTakingTaskExistsAndApproving(result.getTaskId());
+ stockTakingTaskService.validateResultApprovalNotPending(result.getTaskId());
// 2. 鍒犻櫎 result 璁板綍
stockTakingTaskResultMapper.deleteById(id);
- // 3. 鏇存柊瀵瑰簲 line 鐨勭洏鐐规暟閲忓拰鐘舵��
+ // 3. 鎸夊墿浣欑洏鐐圭粨鏋滈噸绠楀搴� line 鐨勫疄鐩樻暟閲忥紙鏃犲墿浣欑粨鏋滄椂缃� 0锛夛紝閬垮厤瑕嗙洊鎴愯礋鏁�
+ BigDecimal remainingTakingQuantity = stockTakingTaskResultMapper.selectListByTaskId(result.getTaskId()).stream()
+ .filter(item -> Objects.equals(item.getLineId(), result.getLineId()))
+ .map(MesWmStockTakingTaskResultDO::getTakingQuantity)
+ .filter(Objects::nonNull)
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
stockTakingTaskLineService.updateStockTakingTaskLineTakingQuantity(
- result.getLineId(), result.getTakingQuantity().negate());
+ result.getLineId(), remainingTakingQuantity);
}
@Override
--
Gitblit v1.9.3