From 6d910029b6c81db0a2b66caa66952781397b153a Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期六, 29 八月 2026 13:45:52 +0800
Subject: [PATCH] feat(mes): 实现H5溯源页面与二维码内容集成
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transaction/MesWmTransactionServiceImpl.java | 63 +++++++++++++++++++++++++++++--
1 files changed, 59 insertions(+), 4 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transaction/MesWmTransactionServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transaction/MesWmTransactionServiceImpl.java
index dd61bb8..fd75003 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transaction/MesWmTransactionServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transaction/MesWmTransactionServiceImpl.java
@@ -4,6 +4,8 @@
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.mes.controller.admin.wm.transaction.vo.MesWmTransactionPageReqVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.mdm.MesMdmItemDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.batch.MesWmBatchDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.materialstock.MesWmMaterialStockDO;
@@ -12,6 +14,7 @@
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseLocationDO;
import cn.iocoder.yudao.module.mes.dal.mysql.wm.transaction.MesWmTransactionMapper;
+import cn.iocoder.yudao.module.mes.enums.wm.MesWmStockStateEnum;
import cn.iocoder.yudao.module.mes.enums.wm.MesWmTransactionTypeEnum;
import cn.iocoder.yudao.module.mes.service.mdm.MesMdmItemService;
import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService;
@@ -75,15 +78,62 @@
// 1.5 鍏宠仈浜嬪姟鏍¢獙
checkRelatedTransaction(reqDTO);
- // 2.1 鑾峰彇鎴栧垱寤哄簱瀛樿褰�
- MesWmMaterialStockDO materialStock = materialStockService.getOrCreateMaterialStock(
- reqDTO.getItemId(), reqDTO.getWarehouseId(), reqDTO.getLocationId(), reqDTO.getAreaId(),
- reqDTO.getBatchId(), reqDTO.getBatchCode(), reqDTO.getVendorId(), reqDTO.getReceiptTime());
+ // 2.1 鑾峰彇搴撳瓨璁板綍
+ MesWmMaterialStockDO materialStock;
+ MesWmTransactionTypeEnum transactionType = MesWmTransactionTypeEnum.valueOf(reqDTO.getType());
+ boolean isInbound = transactionType != null && transactionType.isInbound();
+ if (reqDTO.getMaterialStockId() != null) {
+ // 浼犲叆浜� materialStockId锛岀洿鎺ヤ娇鐢�
+ materialStock = materialStockService.getMaterialStock(reqDTO.getMaterialStockId());
+ if (materialStock == null) {
+ throw exception(WM_MATERIAL_STOCK_NOT_EXISTS);
+ }
+ // 鏍¢獙鐗╂枡銆佹壒娆°�佷粨搴撶瓑缁村害涓�鑷达紙闃叉浼犲叆閿欒鐨� materialStockId锛�
+ if (ObjUtil.notEqual(materialStock.getItemId(), reqDTO.getItemId())
+ || ObjUtil.notEqual(materialStock.getWarehouseId(), reqDTO.getWarehouseId())
+ || ObjUtil.notEqual(materialStock.getLocationId(), reqDTO.getLocationId())
+ || ObjUtil.notEqual(materialStock.getAreaId(), reqDTO.getAreaId())) {
+ throw exception(WM_MATERIAL_STOCK_SELECTION_MISMATCH);
+ }
+ } else if (isInbound) {
+ // 鍏ュ簱浜嬪姟锛氭壘涓嶅埌鍒欒嚜鍔ㄥ垱寤哄簱瀛樿褰�
+ materialStock = materialStockService.getOrCreateMaterialStock(
+ reqDTO.getItemId(), reqDTO.getWarehouseId(), reqDTO.getLocationId(), reqDTO.getAreaId(),
+ reqDTO.getBatchId(), reqDTO.getBatchCode(), reqDTO.getVendorId(), reqDTO.getReceiptTime());
+ } else {
+ // 鍑哄簱浜嬪姟锛氬簱瀛樿褰曞繀椤诲凡瀛樺湪锛屼笉鍏佽鑷姩鍒涘缓锛堥櫎闈� checkFlag=false 鍏佽璐熷簱瀛橈級
+ materialStock = materialStockService.getMaterialStockByCompositeKey(
+ reqDTO.getItemId(), reqDTO.getWarehouseId(), reqDTO.getLocationId(), reqDTO.getAreaId(),
+ reqDTO.getBatchId(), reqDTO.getVendorId());
+ if (materialStock == null) {
+ // checkFlag=false 鏃跺厑璁歌礋搴撳瓨锛岃嚜鍔ㄥ垱寤哄簱瀛樿褰曪紙鏁伴噺灏嗕粠 0 鎵e噺涓鸿礋鏁帮級
+ boolean allowNegative = !ObjUtil.defaultIfNull(reqDTO.getCheckFlag(), true);
+ if (allowNegative) {
+ materialStock = materialStockService.getOrCreateMaterialStock(
+ reqDTO.getItemId(), reqDTO.getWarehouseId(), reqDTO.getLocationId(), reqDTO.getAreaId(),
+ reqDTO.getBatchId(), reqDTO.getBatchCode(), reqDTO.getVendorId(), reqDTO.getReceiptTime());
+ } else {
+ throw exception(WM_MATERIAL_STOCK_NOT_EXISTS);
+ }
+ }
+ }
+ if (materialStock == null || materialStock.getId() == null) {
+ throw exception(WM_MATERIAL_STOCK_NOT_EXISTS);
+ }
// 2.2 鍐荤粨鏍¢獙锛堜粨搴撱�佸簱鍖恒�佸簱浣嶃�佸簱瀛樿褰曪級
checkFrozen(reqDTO, materialStock);
// 2.3 鏇存柊搴撳瓨鏁伴噺
boolean checkFlag = ObjUtil.defaultIfNull(reqDTO.getCheckFlag(), true);
materialStockService.updateMaterialStockQuantity(materialStock.getId(), reqDTO.getQuantity(), checkFlag);
+ MesWmMaterialStockDO updatedStock = materialStockService.getMaterialStock(materialStock.getId());
+ BigDecimal newQuantity = updatedStock.getQuantity();
+ // 搴撳瓨鐘舵�侊細鏄惧紡鎸囧畾浼樺厛锛堝鎵爜鍏ユ殏瀛樺簱锛夛紝鍚﹀垯鎸夋暟閲忚嚜鍔ㄥ垽瀹氾紙鈮�0 宸插嚭搴擄紝>0 鍚堟牸搴擄級
+ Integer stockState = reqDTO.getStockState();
+ if (stockState == null) {
+ stockState = newQuantity.signum() <= 0
+ ? MesWmStockStateEnum.OUT.getState() : MesWmStockStateEnum.QUALIFIED.getState();
+ }
+ materialStockService.updateMaterialStockState(updatedStock.getId(), stockState);
// 3. 鎻掑叆浜嬪姟娴佹按
MesWmTransactionDO transaction = MesWmTransactionDO.builder()
@@ -106,6 +156,11 @@
reqDTOs.forEach(this::createTransaction);
}
+ @Override
+ public PageResult<MesWmTransactionDO> getTransactionPage(MesWmTransactionPageReqVO pageReqVO) {
+ return transactionMapper.selectPage(pageReqVO);
+ }
+
// ==================== 绉佹湁鏍¢獙鏂规硶 ====================
/**
--
Gitblit v1.9.3