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 85  
86 86 @Override
87 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 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 98 @Override
99 99 @Transactional(rollbackFor = Exception.class)
100 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 107 itemReceiptDetailService.deleteItemReceiptDetailByLineId(id);
106   - // 删除
  108 + // 2.2 删除
107 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 147 }
148 148 // 校验每行明细数量之和是否等于行入库数量
149 149 List<MesWmItemReceiptLineDO> lines = itemReceiptLineService.getItemReceiptLineListByReceiptId(id);
  150 + if (CollUtil.isEmpty(lines)) {
  151 + throw exception(WM_ITEM_RECEIPT_NO_LINE);
  152 + }
150 153 for (MesWmItemReceiptLineDO line : lines) {
151 154 List<MesWmItemReceiptDetailDO> details = itemReceiptDetailService.getItemReceiptDetailListByLineId(line.getId());
152 155 BigDecimal totalDetailQty = CollectionUtils.getSumValue(details,
153 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 158 throw exception(WM_ITEM_RECEIPT_DETAIL_QUANTITY_MISMATCH);
156 159 }
157 160 }
... ...