Bladeren bron

✨ feat(mes): 新增入库单行级联删除功能

实现了根据入库单编号删除所有相关行的功能,增强了数据管理的灵活性和一致性。
YunaiV 5 maanden geleden
bovenliggende
commit
1fa8e1acaa

+ 7 - 0
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/miscreceipt/MesWmMiscReceiptLineService.java

@@ -59,6 +59,13 @@ public interface MesWmMiscReceiptLineService {
      */
     PageResult<MesWmMiscReceiptLineDO> getMiscReceiptLinePage(MesWmMiscReceiptLinePageReqVO pageReqVO);
 
+    /**
+     * 删除指定入库单的所有行(级联删除)
+     *
+     * @param receiptId 入库单编号
+     */
+    void deleteByReceiptId(Long receiptId);
+
     /**
      * 校验杂项入库单行存在
      *

+ 22 - 13
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/miscreceipt/MesWmMiscReceiptLineServiceImpl.java

@@ -43,13 +43,9 @@ public class MesWmMiscReceiptLineServiceImpl implements MesWmMiscReceiptLineServ
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Long createMiscReceiptLine(MesWmMiscReceiptLineSaveReqVO createReqVO) {
-        // 1.1 校验父单据存在且为可编辑状态
+        // 1. 校验
         miscReceiptService.validateMiscReceiptEditable(createReqVO.getReceiptId());
-        // 1.2 校验物料存在
-        itemService.validateItemExists(createReqVO.getItemId());
-        // 1.3 校验仓库、库区、库位的父子关系
-        warehouseAreaService.validateWarehouseAreaExists(createReqVO.getWarehouseId(),
-                createReqVO.getLocationId(), createReqVO.getAreaId());
+        validateLineSaveData(createReqVO);
 
         // 2. 新增行
         MesWmMiscReceiptLineDO line = BeanUtils.toBean(createReqVO, MesWmMiscReceiptLineDO.class);
@@ -64,15 +60,10 @@ public class MesWmMiscReceiptLineServiceImpl implements MesWmMiscReceiptLineServ
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void updateMiscReceiptLine(MesWmMiscReceiptLineSaveReqVO updateReqVO) {
-        // 1.1 校验存在
+        // 1. 校验
         MesWmMiscReceiptLineDO line = validateMiscReceiptLineExists(updateReqVO.getId());
-        // 1.2 校验父单据存在且为可编辑状态
         miscReceiptService.validateMiscReceiptEditable(line.getReceiptId());
-        // 1.3 校验物料存在
-        itemService.validateItemExists(updateReqVO.getItemId());
-        // 1.4 校验仓库、库区、库位的父子关系
-        warehouseAreaService.validateWarehouseAreaExists(updateReqVO.getWarehouseId(),
-                updateReqVO.getLocationId(), updateReqVO.getAreaId());
+        validateLineSaveData(updateReqVO);
 
         // 2. 更新行
         MesWmMiscReceiptLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmMiscReceiptLineDO.class);
@@ -109,6 +100,15 @@ public class MesWmMiscReceiptLineServiceImpl implements MesWmMiscReceiptLineServ
         return miscReceiptLineMapper.selectPage(pageReqVO);
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteByReceiptId(Long receiptId) {
+        // 先删除明细
+        miscReceiptDetailService.deleteMiscReceiptDetailByReceiptId(receiptId);
+        // 再删除行
+        miscReceiptLineMapper.deleteByReceiptId(receiptId);
+    }
+
     @Override
     public MesWmMiscReceiptLineDO validateMiscReceiptLineExists(Long id) {
         MesWmMiscReceiptLineDO line = miscReceiptLineMapper.selectById(id);
@@ -118,4 +118,13 @@ public class MesWmMiscReceiptLineServiceImpl implements MesWmMiscReceiptLineServ
         return line;
     }
 
+    /**
+     * 校验行保存数据(物料存在、仓库层级关系)
+     */
+    private void validateLineSaveData(MesWmMiscReceiptLineSaveReqVO reqVO) {
+        itemService.validateItemExists(reqVO.getItemId());
+        warehouseAreaService.validateWarehouseAreaExists(reqVO.getWarehouseId(),
+                reqVO.getLocationId(), reqVO.getAreaId());
+    }
+
 }

+ 7 - 10
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/miscreceipt/MesWmMiscReceiptServiceImpl.java

@@ -8,7 +8,6 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.miscreceipt.vo.MesWmMiscR
 import cn.iocoder.yudao.module.mes.controller.admin.wm.miscreceipt.vo.MesWmMiscReceiptSaveReqVO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.miscreceipt.MesWmMiscReceiptDO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.miscreceipt.MesWmMiscReceiptLineDO;
-import cn.iocoder.yudao.module.mes.dal.mysql.wm.miscreceipt.MesWmMiscReceiptLineMapper;
 import cn.iocoder.yudao.module.mes.dal.mysql.wm.miscreceipt.MesWmMiscReceiptMapper;
 import cn.iocoder.yudao.module.mes.enums.wm.MesWmMiscReceiptStatusEnum;
 import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants;
@@ -17,6 +16,7 @@ import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionServic
 import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
@@ -37,11 +37,10 @@ public class MesWmMiscReceiptServiceImpl implements MesWmMiscReceiptService {
 
     @Resource
     private MesWmMiscReceiptMapper miscReceiptMapper;
-    @Resource
-    private MesWmMiscReceiptLineMapper miscReceiptLineMapper;
 
     @Resource
-    private MesWmMiscReceiptDetailService miscReceiptDetailService;
+    @Lazy
+    private MesWmMiscReceiptLineService miscReceiptLineService;
     @Resource
     private MesWmTransactionService wmTransactionService;
 
@@ -75,10 +74,8 @@ public class MesWmMiscReceiptServiceImpl implements MesWmMiscReceiptService {
         // 校验存在 + 草稿状态
         validateMiscReceiptExistsAndPrepare(id);
 
-        // 级联删除明细
-        miscReceiptDetailService.deleteMiscReceiptDetailByReceiptId(id);
-        // 级联删除行
-        miscReceiptLineMapper.deleteByReceiptId(id);
+        // 级联删除行和明细
+        miscReceiptLineService.deleteByReceiptId(id);
         // 删除主表
         miscReceiptMapper.deleteById(id);
     }
@@ -99,7 +96,7 @@ public class MesWmMiscReceiptServiceImpl implements MesWmMiscReceiptService {
         // 校验存在 + 草稿状态
         validateMiscReceiptExistsAndPrepare(id);
         // 校验至少有一条行
-        List<MesWmMiscReceiptLineDO> lines = miscReceiptLineMapper.selectListByReceiptId(id);
+        List<MesWmMiscReceiptLineDO> lines = miscReceiptLineService.getMiscReceiptLineListByReceiptId(id);
         if (CollUtil.isEmpty(lines)) {
             throw exception(WM_MISC_RECEIPT_NO_LINE);
         }
@@ -127,7 +124,7 @@ public class MesWmMiscReceiptServiceImpl implements MesWmMiscReceiptService {
     }
 
     private void createTransactionList(MesWmMiscReceiptDO receipt) {
-        List<MesWmMiscReceiptLineDO> lines = miscReceiptLineMapper.selectListByReceiptId(receipt.getId());
+        List<MesWmMiscReceiptLineDO> lines = miscReceiptLineService.getMiscReceiptLineListByReceiptId(receipt.getId());
         wmTransactionService.createTransactionList(convertList(lines, line -> new MesWmTransactionSaveReqDTO()
                 .setType(MesWmTransactionTypeEnum.IN.getType()).setItemId(line.getItemId())
                 .setQuantity(line.getQuantity()) // 入库数量为正数