From d41fe2e95f3f64c6e3a7229acd9e74e673513a0a Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 09 七月 2026 16:13:59 +0800
Subject: [PATCH] 1.人力资源大模块开发 2.仓库大模块开发
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskServiceImpl.java | 68 ++++++++++++++++++++++++++++++++++
1 files changed, 68 insertions(+), 0 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskServiceImpl.java
index efaf298..e3b7737 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskServiceImpl.java
@@ -8,10 +8,15 @@
import cn.iocoder.yudao.module.mes.controller.admin.wm.stocktaking.task.vo.MesWmStockTakingTaskSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskLineDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.wm.stocktaking.task.MesWmStockTakingTaskResultDO;
import cn.iocoder.yudao.module.mes.dal.mysql.wm.stocktaking.task.MesWmStockTakingTaskMapper;
+import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants;
import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockTakingTaskStatusEnum;
+import cn.iocoder.yudao.module.mes.enums.wm.MesWmTransactionTypeEnum;
import cn.iocoder.yudao.module.mes.service.wm.materialstock.MesWmMaterialStockService;
import cn.iocoder.yudao.module.mes.service.wm.stocktaking.plan.MesWmStockTakingPlanService;
+import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionService;
+import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import jakarta.annotation.Resource;
import org.springframework.context.annotation.Lazy;
@@ -19,6 +24,7 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
+import java.math.BigDecimal;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -47,6 +53,9 @@
@Lazy
@Resource
private MesWmStockTakingTaskResultService stockTakingTaskResultService;
+
+ @Resource
+ private MesWmTransactionService wmTransactionService;
@Resource
private AdminUserApi adminUserApi;
@@ -220,4 +229,63 @@
}
}
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void processStockTakingDifference(Long id) {
+ // 1. 鏍¢獙浠诲姟瀛樺湪涓斿凡瀹屾垚
+ MesWmStockTakingTaskDO task = validateStockTakingTaskExists(id);
+ if (!MesWmStockTakingTaskStatusEnum.FINISHED.getStatus().equals(task.getStatus())) {
+ throw exception(WM_STOCK_TAKING_TASK_NOT_FINISHED);
+ }
+
+ // 2. 鑾峰彇鐩樼偣缁撴灉鍒楄〃
+ List<MesWmStockTakingTaskResultDO> results = stockTakingTaskResultService.getStockTakingTaskResultListByTaskId(id);
+ if (CollUtil.isEmpty(results)) {
+ return; // 鏃犵洏鐐圭粨鏋滐紝鏃犻渶澶勭悊
+ }
+
+ // 3. 閬嶅巻缁撴灉锛屽鐞嗗樊寮�
+ for (MesWmStockTakingTaskResultDO result : results) {
+ BigDecimal bookQuantity = result.getQuantity(); // 璐﹂潰鏁伴噺
+ BigDecimal takingQuantity = result.getTakingQuantity(); // 鐩樼偣鏁伴噺
+
+ if (takingQuantity == null || bookQuantity == null) {
+ continue;
+ }
+
+ // 璁$畻宸紓锛氱洏鐐规暟閲� - 璐﹂潰鏁伴噺
+ BigDecimal difference = takingQuantity.subtract(bookQuantity);
+
+ if (difference.compareTo(BigDecimal.ZERO) == 0) {
+ continue; // 鏃犲樊寮傦紝璺宠繃
+ }
+
+ // 4. 鍒涘缓搴撳瓨璋冩暣浜嬪姟
+ MesWmTransactionSaveReqDTO transaction = new MesWmTransactionSaveReqDTO()
+ .setItemId(result.getItemId())
+ .setBatchId(result.getBatchId())
+ .setBatchCode(result.getBatchCode())
+ .setWarehouseId(result.getWarehouseId())
+ .setLocationId(result.getLocationId())
+ .setAreaId(result.getAreaId())
+ .setBizId(task.getId())
+ .setBizCode(task.getCode())
+ .setBizLineId(result.getLineId());
+
+ if (difference.compareTo(BigDecimal.ZERO) > 0) {
+ // 鐩樼泩锛氬簱瀛樺鍔�
+ transaction.setType(MesWmTransactionTypeEnum.IN.getType())
+ .setQuantity(difference)
+ .setBizType(MesBizTypeConstants.WM_STOCK_TAKING);
+ } else {
+ // 鐩樹簭锛氬簱瀛樺噺灏�
+ transaction.setType(MesWmTransactionTypeEnum.OUT.getType())
+ .setQuantity(difference.negate()) // 鍑哄簱鏁伴噺浼犳鏁帮紝浣嗗唴閮ㄤ細杞负璐熸暟
+ .setBizType(MesBizTypeConstants.WM_STOCK_TAKING);
+ }
+
+ wmTransactionService.createTransaction(transaction);
+ }
+ }
+
}
--
Gitblit v1.9.3