Commit bf026611e3334fcbdc0c0eeacefc26dac80a19c7

Authored by YunaiV
1 parent 807db914

✨ feat(mes): 增强删除入库明细和行逻辑校验

yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptDetailServiceImpl.java
@@ -85,8 +85,11 @@ public class MesWmItemReceiptDetailServiceImpl implements MesWmItemReceiptDetail @@ -85,8 +85,11 @@ public class MesWmItemReceiptDetailServiceImpl implements MesWmItemReceiptDetail
85 85
86 @Override 86 @Override
87 public void deleteItemReceiptDetail(Long id) { 87 public void deleteItemReceiptDetail(Long id) {
88 - // 校验存在  
89 - validateItemReceiptDetailExists(id); 88 + // 1.1 校验存在
  89 + MesWmItemReceiptDetailDO detail = validateItemReceiptDetailExists(id);
  90 + // 1.2 校验父单据存在且为可编辑状态
  91 + itemReceiptService.validateItemReceiptEditable(detail.getReceiptId());
  92 +
90 // 删除 93 // 删除
91 itemReceiptDetailMapper.deleteById(id); 94 itemReceiptDetailMapper.deleteById(id);
92 } 95 }
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptLineServiceImpl.java
@@ -98,12 +98,14 @@ public class MesWmItemReceiptLineServiceImpl implements MesWmItemReceiptLineServ @@ -98,12 +98,14 @@ public class MesWmItemReceiptLineServiceImpl implements MesWmItemReceiptLineServ
98 @Override 98 @Override
99 @Transactional(rollbackFor = Exception.class) 99 @Transactional(rollbackFor = Exception.class)
100 public void deleteItemReceiptLine(Long id) { 100 public void deleteItemReceiptLine(Long id) {
101 - // 校验存在  
102 - validateItemReceiptLineExists(id); 101 + // 1.1 校验存在
  102 + MesWmItemReceiptLineDO line = validateItemReceiptLineExists(id);
  103 + // 1.2 校验父单据存在且为可编辑状态
  104 + itemReceiptService.validateItemReceiptEditable(line.getReceiptId());
103 105
104 - // 级联删除明细 106 + // 2.1 级联删除明细
105 itemReceiptDetailService.deleteItemReceiptDetailByLineId(id); 107 itemReceiptDetailService.deleteItemReceiptDetailByLineId(id);
106 - // 删除 108 + // 2.2 删除
107 itemReceiptLineMapper.deleteById(id); 109 itemReceiptLineMapper.deleteById(id);
108 } 110 }
109 111
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/itemreceipt/MesWmItemReceiptServiceImpl.java
@@ -147,11 +147,14 @@ public class MesWmItemReceiptServiceImpl implements MesWmItemReceiptService { @@ -147,11 +147,14 @@ public class MesWmItemReceiptServiceImpl implements MesWmItemReceiptService {
147 } 147 }
148 // 校验每行明细数量之和是否等于行入库数量 148 // 校验每行明细数量之和是否等于行入库数量
149 List<MesWmItemReceiptLineDO> lines = itemReceiptLineService.getItemReceiptLineListByReceiptId(id); 149 List<MesWmItemReceiptLineDO> lines = itemReceiptLineService.getItemReceiptLineListByReceiptId(id);
  150 + if (CollUtil.isEmpty(lines)) {
  151 + throw exception(WM_ITEM_RECEIPT_NO_LINE);
  152 + }
150 for (MesWmItemReceiptLineDO line : lines) { 153 for (MesWmItemReceiptLineDO line : lines) {
151 List<MesWmItemReceiptDetailDO> details = itemReceiptDetailService.getItemReceiptDetailListByLineId(line.getId()); 154 List<MesWmItemReceiptDetailDO> details = itemReceiptDetailService.getItemReceiptDetailListByLineId(line.getId());
152 BigDecimal totalDetailQty = CollectionUtils.getSumValue(details, 155 BigDecimal totalDetailQty = CollectionUtils.getSumValue(details,
153 MesWmItemReceiptDetailDO::getQuantity, BigDecimal::add, BigDecimal.ZERO); 156 MesWmItemReceiptDetailDO::getQuantity, BigDecimal::add, BigDecimal.ZERO);
154 - if (line.getReceivedQuantity() != null && totalDetailQty.compareTo(line.getReceivedQuantity()) != 0) { 157 + if (line.getReceivedQuantity() == null || totalDetailQty.compareTo(line.getReceivedQuantity()) != 0) {
155 throw exception(WM_ITEM_RECEIPT_DETAIL_QUANTITY_MISMATCH); 158 throw exception(WM_ITEM_RECEIPT_DETAIL_QUANTITY_MISMATCH);
156 } 159 }
157 } 160 }