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,6 +60,13 @@ public interface MesWmMiscReceiptLineService {
60 PageResult<MesWmMiscReceiptLineDO> getMiscReceiptLinePage(MesWmMiscReceiptLinePageReqVO pageReqVO); 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 * @param id 编号 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,13 +43,9 @@ public class MesWmMiscReceiptLineServiceImpl implements MesWmMiscReceiptLineServ
43 @Override 43 @Override
44 @Transactional(rollbackFor = Exception.class) 44 @Transactional(rollbackFor = Exception.class)
45 public Long createMiscReceiptLine(MesWmMiscReceiptLineSaveReqVO createReqVO) { 45 public Long createMiscReceiptLine(MesWmMiscReceiptLineSaveReqVO createReqVO) {
46 - // 1.1 校验父单据存在且为可编辑状态 46 + // 1. 校验
47 miscReceiptService.validateMiscReceiptEditable(createReqVO.getReceiptId()); 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 // 2. 新增行 50 // 2. 新增行
55 MesWmMiscReceiptLineDO line = BeanUtils.toBean(createReqVO, MesWmMiscReceiptLineDO.class); 51 MesWmMiscReceiptLineDO line = BeanUtils.toBean(createReqVO, MesWmMiscReceiptLineDO.class);
@@ -64,15 +60,10 @@ public class MesWmMiscReceiptLineServiceImpl implements MesWmMiscReceiptLineServ @@ -64,15 +60,10 @@ public class MesWmMiscReceiptLineServiceImpl implements MesWmMiscReceiptLineServ
64 @Override 60 @Override
65 @Transactional(rollbackFor = Exception.class) 61 @Transactional(rollbackFor = Exception.class)
66 public void updateMiscReceiptLine(MesWmMiscReceiptLineSaveReqVO updateReqVO) { 62 public void updateMiscReceiptLine(MesWmMiscReceiptLineSaveReqVO updateReqVO) {
67 - // 1.1 校验存在 63 + // 1. 校验
68 MesWmMiscReceiptLineDO line = validateMiscReceiptLineExists(updateReqVO.getId()); 64 MesWmMiscReceiptLineDO line = validateMiscReceiptLineExists(updateReqVO.getId());
69 - // 1.2 校验父单据存在且为可编辑状态  
70 miscReceiptService.validateMiscReceiptEditable(line.getReceiptId()); 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 // 2. 更新行 68 // 2. 更新行
78 MesWmMiscReceiptLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmMiscReceiptLineDO.class); 69 MesWmMiscReceiptLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmMiscReceiptLineDO.class);
@@ -110,6 +101,15 @@ public class MesWmMiscReceiptLineServiceImpl implements MesWmMiscReceiptLineServ @@ -110,6 +101,15 @@ public class MesWmMiscReceiptLineServiceImpl implements MesWmMiscReceiptLineServ
110 } 101 }
111 102
112 @Override 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 public MesWmMiscReceiptLineDO validateMiscReceiptLineExists(Long id) { 113 public MesWmMiscReceiptLineDO validateMiscReceiptLineExists(Long id) {
114 MesWmMiscReceiptLineDO line = miscReceiptLineMapper.selectById(id); 114 MesWmMiscReceiptLineDO line = miscReceiptLineMapper.selectById(id);
115 if (line == null) { 115 if (line == null) {
@@ -118,4 +118,13 @@ public class MesWmMiscReceiptLineServiceImpl implements MesWmMiscReceiptLineServ @@ -118,4 +118,13 @@ public class MesWmMiscReceiptLineServiceImpl implements MesWmMiscReceiptLineServ
118 return line; 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,7 +8,6 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.miscreceipt.vo.MesWmMiscR
8 import cn.iocoder.yudao.module.mes.controller.admin.wm.miscreceipt.vo.MesWmMiscReceiptSaveReqVO; 8 import cn.iocoder.yudao.module.mes.controller.admin.wm.miscreceipt.vo.MesWmMiscReceiptSaveReqVO;
9 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.miscreceipt.MesWmMiscReceiptDO; 9 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.miscreceipt.MesWmMiscReceiptDO;
10 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.miscreceipt.MesWmMiscReceiptLineDO; 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 import cn.iocoder.yudao.module.mes.dal.mysql.wm.miscreceipt.MesWmMiscReceiptMapper; 11 import cn.iocoder.yudao.module.mes.dal.mysql.wm.miscreceipt.MesWmMiscReceiptMapper;
13 import cn.iocoder.yudao.module.mes.enums.wm.MesWmMiscReceiptStatusEnum; 12 import cn.iocoder.yudao.module.mes.enums.wm.MesWmMiscReceiptStatusEnum;
14 import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants; 13 import cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants;
@@ -17,6 +16,7 @@ import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionServic @@ -17,6 +16,7 @@ import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionServic
17 import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO; 16 import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO;
18 import jakarta.annotation.Resource; 17 import jakarta.annotation.Resource;
19 import lombok.extern.slf4j.Slf4j; 18 import lombok.extern.slf4j.Slf4j;
  19 +import org.springframework.context.annotation.Lazy;
20 import org.springframework.stereotype.Service; 20 import org.springframework.stereotype.Service;
21 import org.springframework.transaction.annotation.Transactional; 21 import org.springframework.transaction.annotation.Transactional;
22 import org.springframework.validation.annotation.Validated; 22 import org.springframework.validation.annotation.Validated;
@@ -37,11 +37,10 @@ public class MesWmMiscReceiptServiceImpl implements MesWmMiscReceiptService { @@ -37,11 +37,10 @@ public class MesWmMiscReceiptServiceImpl implements MesWmMiscReceiptService {
37 37
38 @Resource 38 @Resource
39 private MesWmMiscReceiptMapper miscReceiptMapper; 39 private MesWmMiscReceiptMapper miscReceiptMapper;
40 - @Resource  
41 - private MesWmMiscReceiptLineMapper miscReceiptLineMapper;  
42 40
43 @Resource 41 @Resource
44 - private MesWmMiscReceiptDetailService miscReceiptDetailService; 42 + @Lazy
  43 + private MesWmMiscReceiptLineService miscReceiptLineService;
45 @Resource 44 @Resource
46 private MesWmTransactionService wmTransactionService; 45 private MesWmTransactionService wmTransactionService;
47 46
@@ -75,10 +74,8 @@ public class MesWmMiscReceiptServiceImpl implements MesWmMiscReceiptService { @@ -75,10 +74,8 @@ public class MesWmMiscReceiptServiceImpl implements MesWmMiscReceiptService {
75 // 校验存在 + 草稿状态 74 // 校验存在 + 草稿状态
76 validateMiscReceiptExistsAndPrepare(id); 75 validateMiscReceiptExistsAndPrepare(id);
77 76
78 - // 级联删除明细  
79 - miscReceiptDetailService.deleteMiscReceiptDetailByReceiptId(id);  
80 - // 级联删除行  
81 - miscReceiptLineMapper.deleteByReceiptId(id); 77 + // 级联删除行和明细
  78 + miscReceiptLineService.deleteByReceiptId(id);
82 // 删除主表 79 // 删除主表
83 miscReceiptMapper.deleteById(id); 80 miscReceiptMapper.deleteById(id);
84 } 81 }
@@ -99,7 +96,7 @@ public class MesWmMiscReceiptServiceImpl implements MesWmMiscReceiptService { @@ -99,7 +96,7 @@ public class MesWmMiscReceiptServiceImpl implements MesWmMiscReceiptService {
99 // 校验存在 + 草稿状态 96 // 校验存在 + 草稿状态
100 validateMiscReceiptExistsAndPrepare(id); 97 validateMiscReceiptExistsAndPrepare(id);
101 // 校验至少有一条行 98 // 校验至少有一条行
102 - List<MesWmMiscReceiptLineDO> lines = miscReceiptLineMapper.selectListByReceiptId(id); 99 + List<MesWmMiscReceiptLineDO> lines = miscReceiptLineService.getMiscReceiptLineListByReceiptId(id);
103 if (CollUtil.isEmpty(lines)) { 100 if (CollUtil.isEmpty(lines)) {
104 throw exception(WM_MISC_RECEIPT_NO_LINE); 101 throw exception(WM_MISC_RECEIPT_NO_LINE);
105 } 102 }
@@ -127,7 +124,7 @@ public class MesWmMiscReceiptServiceImpl implements MesWmMiscReceiptService { @@ -127,7 +124,7 @@ public class MesWmMiscReceiptServiceImpl implements MesWmMiscReceiptService {
127 } 124 }
128 125
129 private void createTransactionList(MesWmMiscReceiptDO receipt) { 126 private void createTransactionList(MesWmMiscReceiptDO receipt) {
130 - List<MesWmMiscReceiptLineDO> lines = miscReceiptLineMapper.selectListByReceiptId(receipt.getId()); 127 + List<MesWmMiscReceiptLineDO> lines = miscReceiptLineService.getMiscReceiptLineListByReceiptId(receipt.getId());
131 wmTransactionService.createTransactionList(convertList(lines, line -> new MesWmTransactionSaveReqDTO() 128 wmTransactionService.createTransactionList(convertList(lines, line -> new MesWmTransactionSaveReqDTO()
132 .setType(MesWmTransactionTypeEnum.IN.getType()).setItemId(line.getItemId()) 129 .setType(MesWmTransactionTypeEnum.IN.getType()).setItemId(line.getItemId())
133 .setQuantity(line.getQuantity()) // 入库数量为正数 130 .setQuantity(line.getQuantity()) // 入库数量为正数