Commit 1fa8e1acaa34b0dbab68072f65e36ed4440dc7c4

Authored by YunaiV
1 parent 40940896

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

实现了根据入库单编号删除所有相关行的功能,增强了数据管理的灵活性和一致性。
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/miscreceipt/MesWmMiscReceiptLineService.java
... ... @@ -60,6 +60,13 @@ public interface MesWmMiscReceiptLineService {
60 60 PageResult<MesWmMiscReceiptLineDO> getMiscReceiptLinePage(MesWmMiscReceiptLinePageReqVO pageReqVO);
61 61  
62 62 /**
  63 + * 删除指定入库单的所有行(级联删除)
  64 + *
  65 + * @param receiptId 入库单编号
  66 + */
  67 + void deleteByReceiptId(Long receiptId);
  68 +
  69 + /**
63 70 * 校验杂项入库单行存在
64 71 *
65 72 * @param id 编号
... ...
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
43 43 @Override
44 44 @Transactional(rollbackFor = Exception.class)
45 45 public Long createMiscReceiptLine(MesWmMiscReceiptLineSaveReqVO createReqVO) {
46   - // 1.1 校验父单据存在且为可编辑状态
  46 + // 1. 校验
47 47 miscReceiptService.validateMiscReceiptEditable(createReqVO.getReceiptId());
48   - // 1.2 校验物料存在
49   - itemService.validateItemExists(createReqVO.getItemId());
50   - // 1.3 校验仓库、库区、库位的父子关系
51   - warehouseAreaService.validateWarehouseAreaExists(createReqVO.getWarehouseId(),
52   - createReqVO.getLocationId(), createReqVO.getAreaId());
  48 + validateLineSaveData(createReqVO);
53 49  
54 50 // 2. 新增行
55 51 MesWmMiscReceiptLineDO line = BeanUtils.toBean(createReqVO, MesWmMiscReceiptLineDO.class);
... ... @@ -64,15 +60,10 @@ public class MesWmMiscReceiptLineServiceImpl implements MesWmMiscReceiptLineServ
64 60 @Override
65 61 @Transactional(rollbackFor = Exception.class)
66 62 public void updateMiscReceiptLine(MesWmMiscReceiptLineSaveReqVO updateReqVO) {
67   - // 1.1 校验存在
  63 + // 1. 校验
68 64 MesWmMiscReceiptLineDO line = validateMiscReceiptLineExists(updateReqVO.getId());
69   - // 1.2 校验父单据存在且为可编辑状态
70 65 miscReceiptService.validateMiscReceiptEditable(line.getReceiptId());
71   - // 1.3 校验物料存在
72   - itemService.validateItemExists(updateReqVO.getItemId());
73   - // 1.4 校验仓库、库区、库位的父子关系
74   - warehouseAreaService.validateWarehouseAreaExists(updateReqVO.getWarehouseId(),
75   - updateReqVO.getLocationId(), updateReqVO.getAreaId());
  66 + validateLineSaveData(updateReqVO);
76 67  
77 68 // 2. 更新行
78 69 MesWmMiscReceiptLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmMiscReceiptLineDO.class);
... ... @@ -110,6 +101,15 @@ public class MesWmMiscReceiptLineServiceImpl implements MesWmMiscReceiptLineServ
110 101 }
111 102  
112 103 @Override
  104 + @Transactional(rollbackFor = Exception.class)
  105 + public void deleteByReceiptId(Long receiptId) {
  106 + // 先删除明细
  107 + miscReceiptDetailService.deleteMiscReceiptDetailByReceiptId(receiptId);
  108 + // 再删除行
  109 + miscReceiptLineMapper.deleteByReceiptId(receiptId);
  110 + }
  111 +
  112 + @Override
113 113 public MesWmMiscReceiptLineDO validateMiscReceiptLineExists(Long id) {
114 114 MesWmMiscReceiptLineDO line = miscReceiptLineMapper.selectById(id);
115 115 if (line == null) {
... ... @@ -118,4 +118,13 @@ public class MesWmMiscReceiptLineServiceImpl implements MesWmMiscReceiptLineServ
118 118 return line;
119 119 }
120 120  
  121 + /**
  122 + * 校验行保存数据(物料存在、仓库层级关系)
  123 + */
  124 + private void validateLineSaveData(MesWmMiscReceiptLineSaveReqVO reqVO) {
  125 + itemService.validateItemExists(reqVO.getItemId());
  126 + warehouseAreaService.validateWarehouseAreaExists(reqVO.getWarehouseId(),
  127 + reqVO.getLocationId(), reqVO.getAreaId());
  128 + }
  129 +
121 130 }
... ...
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
8 8 import cn.iocoder.yudao.module.mes.controller.admin.wm.miscreceipt.vo.MesWmMiscReceiptSaveReqVO;
9 9 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.miscreceipt.MesWmMiscReceiptDO;
10 10 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.miscreceipt.MesWmMiscReceiptLineDO;
11   -import cn.iocoder.yudao.module.mes.dal.mysql.wm.miscreceipt.MesWmMiscReceiptLineMapper;
12 11 import cn.iocoder.yudao.module.mes.dal.mysql.wm.miscreceipt.MesWmMiscReceiptMapper;
13 12 import cn.iocoder.yudao.module.mes.enums.wm.MesWmMiscReceiptStatusEnum;
14 13 import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants;
... ... @@ -17,6 +16,7 @@ import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionServic
17 16 import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO;
18 17 import jakarta.annotation.Resource;
19 18 import lombok.extern.slf4j.Slf4j;
  19 +import org.springframework.context.annotation.Lazy;
20 20 import org.springframework.stereotype.Service;
21 21 import org.springframework.transaction.annotation.Transactional;
22 22 import org.springframework.validation.annotation.Validated;
... ... @@ -37,11 +37,10 @@ public class MesWmMiscReceiptServiceImpl implements MesWmMiscReceiptService {
37 37  
38 38 @Resource
39 39 private MesWmMiscReceiptMapper miscReceiptMapper;
40   - @Resource
41   - private MesWmMiscReceiptLineMapper miscReceiptLineMapper;
42 40  
43 41 @Resource
44   - private MesWmMiscReceiptDetailService miscReceiptDetailService;
  42 + @Lazy
  43 + private MesWmMiscReceiptLineService miscReceiptLineService;
45 44 @Resource
46 45 private MesWmTransactionService wmTransactionService;
47 46  
... ... @@ -75,10 +74,8 @@ public class MesWmMiscReceiptServiceImpl implements MesWmMiscReceiptService {
75 74 // 校验存在 + 草稿状态
76 75 validateMiscReceiptExistsAndPrepare(id);
77 76  
78   - // 级联删除明细
79   - miscReceiptDetailService.deleteMiscReceiptDetailByReceiptId(id);
80   - // 级联删除行
81   - miscReceiptLineMapper.deleteByReceiptId(id);
  77 + // 级联删除行和明细
  78 + miscReceiptLineService.deleteByReceiptId(id);
82 79 // 删除主表
83 80 miscReceiptMapper.deleteById(id);
84 81 }
... ... @@ -99,7 +96,7 @@ public class MesWmMiscReceiptServiceImpl implements MesWmMiscReceiptService {
99 96 // 校验存在 + 草稿状态
100 97 validateMiscReceiptExistsAndPrepare(id);
101 98 // 校验至少有一条行
102   - List<MesWmMiscReceiptLineDO> lines = miscReceiptLineMapper.selectListByReceiptId(id);
  99 + List<MesWmMiscReceiptLineDO> lines = miscReceiptLineService.getMiscReceiptLineListByReceiptId(id);
103 100 if (CollUtil.isEmpty(lines)) {
104 101 throw exception(WM_MISC_RECEIPT_NO_LINE);
105 102 }
... ... @@ -127,7 +124,7 @@ public class MesWmMiscReceiptServiceImpl implements MesWmMiscReceiptService {
127 124 }
128 125  
129 126 private void createTransactionList(MesWmMiscReceiptDO receipt) {
130   - List<MesWmMiscReceiptLineDO> lines = miscReceiptLineMapper.selectListByReceiptId(receipt.getId());
  127 + List<MesWmMiscReceiptLineDO> lines = miscReceiptLineService.getMiscReceiptLineListByReceiptId(receipt.getId());
131 128 wmTransactionService.createTransactionList(convertList(lines, line -> new MesWmTransactionSaveReqDTO()
132 129 .setType(MesWmTransactionTypeEnum.IN.getType()).setItemId(line.getItemId())
133 130 .setQuantity(line.getQuantity()) // 入库数量为正数
... ...