From 476d70b2f294f36a9dbd8d0c3cf5d1b75ba34c66 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 24 八月 2026 09:12:29 +0800
Subject: [PATCH] feat(mes): 新增包装袋型管理和托盘自动生成功能

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/bagcode/MesProBagCodeServiceImpl.java |   33 +++++++++++++++++++++------------
 1 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/bagcode/MesProBagCodeServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/bagcode/MesProBagCodeServiceImpl.java
index d346513..8966276 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/bagcode/MesProBagCodeServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/bagcode/MesProBagCodeServiceImpl.java
@@ -6,6 +6,7 @@
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeBindReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeGenerateReqVO;
+import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeGenerateRespVO;
 import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodePageReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeReplaceItemRespVO;
 import cn.iocoder.yudao.module.mes.controller.admin.pro.bagcode.vo.MesProBagCodeReplaceReqVO;
@@ -62,7 +63,7 @@
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public String generateBagCodes(MesProBagCodeGenerateReqVO generateReqVO) {
+    public MesProBagCodeGenerateRespVO generateBagCodes(MesProBagCodeGenerateReqVO generateReqVO) {
         // 1. 鏍¢獙鎵规瀛樺湪涓斿浜庣敓浜т腑鐘舵��
         MesProBatchDO batch = batchMapper.selectByIdForUpdate(generateReqVO.getBatchId());
         if (batch == null) {
@@ -98,7 +99,9 @@
         batchMapper.updateById(new MesProBatchDO().setId(batch.getId())
                 .setBagQuantity((batch.getBagQuantity() == null ? 0 : batch.getBagQuantity())
                         + generateReqVO.getCount()));
-        return uuid;
+        return new MesProBagCodeGenerateRespVO()
+                .setUuid(uuid)
+                .setAutoPallets(palletService.autoCreatePallets(batch.getId()));
     }
 
     @Override
@@ -242,10 +245,13 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void bindPallet(MesProBagCodeBindReqVO bindReqVO) {
-        // 1. 鏍¢獙鎵樼洏瀛樺湪
-        MesProPalletDO pallet = palletService.validatePalletExists(bindReqVO.getPalletId());
-        // 2. 鏍¢獙琚嬬爜
-        List<MesProBagCodeDO> bagCodes = validateBagCodesForBind(bindReqVO.getIds(), pallet);
+        // 1. 閿佸畾鎵樼洏锛岄伩鍏嶄笌鑷姩褰掗泦骞跺彂淇敼琚嬫暟
+        MesProPalletDO pallet = palletMapper.selectByIdForUpdate(bindReqVO.getPalletId());
+        if (pallet == null) {
+            throw exception(PRO_PALLET_NOT_EXISTS);
+        }
+        // 2. 閿佸畾骞舵牎楠岃鐮�
+        List<MesProBagCodeDO> bagCodes = validateBagCodesForBind(bindReqVO.getIds(), pallet, true);
         // 3. 鏍¢獙涓嶈秴杩囨墭鐩樺彲瑁呰鏁�
         int currentCount = pallet.getBagCount() == null ? 0 : pallet.getBagCount();
         if (pallet.getCapacity() != null && pallet.getCapacity() > 0
@@ -260,10 +266,13 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void unbindPallet(MesProBagCodeBindReqVO bindReqVO) {
-        // 1. 鏍¢獙鎵樼洏瀛樺湪
-        MesProPalletDO pallet = palletService.validatePalletExists(bindReqVO.getPalletId());
-        // 2. 鏍¢獙琚嬬爜鍧囩粦瀹氬湪褰撳墠鎵樼洏涓�
-        List<MesProBagCodeDO> bagCodes = bagCodeMapper.selectListByIds(bindReqVO.getIds());
+        // 1. 閿佸畾鎵樼洏锛岄伩鍏嶄笌鑷姩褰掗泦骞跺彂淇敼琚嬫暟
+        MesProPalletDO pallet = palletMapper.selectByIdForUpdate(bindReqVO.getPalletId());
+        if (pallet == null) {
+            throw exception(PRO_PALLET_NOT_EXISTS);
+        }
+        // 2. 閿佸畾骞舵牎楠岃鐮佸潎缁戝畾鍦ㄥ綋鍓嶆墭鐩樹笂
+        List<MesProBagCodeDO> bagCodes = bagCodeMapper.selectListByIdsForUpdate(bindReqVO.getIds());
         if (bagCodes.size() != bindReqVO.getIds().size()) {
             throw exception(PRO_BAG_CODE_NOT_EXISTS);
         }
@@ -339,8 +348,8 @@
     /**
      * 鏍¢獙寰呯粦瀹氱殑琚嬬爜锛氬瓨鍦ㄣ�佷笌鎵樼洏鍚屾壒娆°�佹湭缁戝畾杩囨墭鐩樸�佺姸鎬佹湁鏁堬紙宸茬敓鎴�/宸插鍑哄嵃鍒凤級
      */
-    private List<MesProBagCodeDO> validateBagCodesForBind(List<Long> ids, MesProPalletDO pallet) {
-        List<MesProBagCodeDO> bagCodes = bagCodeMapper.selectListByIds(ids);
+    private List<MesProBagCodeDO> validateBagCodesForBind(List<Long> ids, MesProPalletDO pallet, boolean lock) {
+        List<MesProBagCodeDO> bagCodes = lock ? bagCodeMapper.selectListByIdsForUpdate(ids) : bagCodeMapper.selectListByIds(ids);
         if (bagCodes.size() != ids.size()) {
             throw exception(PRO_BAG_CODE_NOT_EXISTS);
         }

--
Gitblit v1.9.3