From 1fa8e1acaa34b0dbab68072f65e36ed4440dc7c4 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Tue, 31 Mar 2026 09:01:57 +0800 Subject: [PATCH] ✨ feat(mes): 新增入库单行级联删除功能 --- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/miscreceipt/MesWmMiscReceiptLineService.java | 7 +++++++ yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/miscreceipt/MesWmMiscReceiptLineServiceImpl.java | 35 ++++++++++++++++++++++------------- yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/miscreceipt/MesWmMiscReceiptServiceImpl.java | 17 +++++++---------- 3 files changed, 36 insertions(+), 23 deletions(-) diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/miscreceipt/MesWmMiscReceiptLineService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/miscreceipt/MesWmMiscReceiptLineService.java index 2ce79b6..9d3b817 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/miscreceipt/MesWmMiscReceiptLineService.java +++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/miscreceipt/MesWmMiscReceiptLineService.java @@ -60,6 +60,13 @@ public interface MesWmMiscReceiptLineService { PageResult getMiscReceiptLinePage(MesWmMiscReceiptLinePageReqVO pageReqVO); /** + * 删除指定入库单的所有行(级联删除) + * + * @param receiptId 入库单编号 + */ + void deleteByReceiptId(Long receiptId); + + /** * 校验杂项入库单行存在 * * @param id 编号 diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/miscreceipt/MesWmMiscReceiptLineServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/miscreceipt/MesWmMiscReceiptLineServiceImpl.java index 68b8b24..826cd73 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/miscreceipt/MesWmMiscReceiptLineServiceImpl.java +++ b/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); @@ -110,6 +101,15 @@ public class MesWmMiscReceiptLineServiceImpl implements MesWmMiscReceiptLineServ } @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); if (line == null) { @@ -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()); + } + } diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/miscreceipt/MesWmMiscReceiptServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/miscreceipt/MesWmMiscReceiptServiceImpl.java index 71b89d4..72a9f3d 100644 --- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/miscreceipt/MesWmMiscReceiptServiceImpl.java +++ b/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 lines = miscReceiptLineMapper.selectListByReceiptId(id); + List 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 lines = miscReceiptLineMapper.selectListByReceiptId(receipt.getId()); + List lines = miscReceiptLineService.getMiscReceiptLineListByReceiptId(receipt.getId()); wmTransactionService.createTransactionList(convertList(lines, line -> new MesWmTransactionSaveReqDTO() .setType(MesWmTransactionTypeEnum.IN.getType()).setItemId(line.getItemId()) .setQuantity(line.getQuantity()) // 入库数量为正数 -- libgit2 0.21.4