Commit 98f21288f0168d277e713fda595903acdc355dfb

Authored by YunaiV
1 parent a46f2b1f

✨ feat(mes): 新增转移单行和明细的删除功能,优化删除逻辑

新增通过行ID和转移ID删除转移单行和明细的功能,简化了删除操作,提升代码可读性和维护性。同时,增加了转移数量超过库存数量的错误码,增强了系统的健壮性。
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/transfer/MesWmTransferDetailMapper.java
... ... @@ -25,4 +25,12 @@ public interface MesWmTransferDetailMapper extends BaseMapperX<MesWmTransferDeta
25 25 .orderByAsc(MesWmTransferDetailDO::getId));
26 26 }
27 27  
  28 + default void deleteByLineId(Long lineId) {
  29 + delete(MesWmTransferDetailDO::getLineId, lineId);
  30 + }
  31 +
  32 + default void deleteByTransferId(Long transferId) {
  33 + delete(MesWmTransferDetailDO::getTransferId, transferId);
  34 + }
  35 +
28 36 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/transfer/MesWmTransferLineMapper.java
... ... @@ -19,4 +19,8 @@ public interface MesWmTransferLineMapper extends BaseMapperX<MesWmTransferLineDO
19 19 .orderByAsc(MesWmTransferLineDO::getId));
20 20 }
21 21  
  22 + default void deleteByTransferId(Long transferId) {
  23 + delete(MesWmTransferLineDO::getTransferId, transferId);
  24 + }
  25 +
22 26 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java
... ... @@ -451,6 +451,7 @@ public interface ErrorCodeConstants {
451 451 ErrorCode WM_TRANSFER_NO_LINE = new ErrorCode(1_040_710_008, "转移单至少需要一条行数据");
452 452 ErrorCode WM_TRANSFER_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_710_009, "转移单行数量与明细数量不一致");
453 453 ErrorCode WM_TRANSFER_LINE_NOT_EXISTS = new ErrorCode(1_040_710_100, "转移单行不存在");
  454 + ErrorCode WM_TRANSFER_LINE_QUANTITY_EXCEED_STOCK = new ErrorCode(1_040_710_101, "转移数量不能超过库存数量");
454 455 ErrorCode WM_TRANSFER_DETAIL_NOT_EXISTS = new ErrorCode(1_040_710_200, "调拨明细不存在");
455 456 ErrorCode WM_TRANSFER_DETAIL_QUANTITY_EXCEED = new ErrorCode(1_040_710_201, "调拨明细总数量不能超过调拨单行数量");
456 457 ErrorCode WM_TRANSFER_DETAIL_MIXED_GOODS = new ErrorCode(1_040_710_202, "同一目标仓位下已存在其他物料的明细,不允许混货");
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transfer/MesWmTransferDetailServiceImpl.java
... ... @@ -95,15 +95,12 @@ public class MesWmTransferDetailServiceImpl implements MesWmTransferDetailServic
95 95  
96 96 @Override
97 97 public void deleteTransferDetailByTransferId(Long transferId) {
98   - getTransferDetailListByTransferId(transferId)
99   - .forEach(detail -> transferDetailMapper.deleteById(detail.getId()));
  98 + transferDetailMapper.deleteByTransferId(transferId);
100 99 }
101 100  
102 101 @Override
103 102 public void deleteTransferDetailByLineId(Long lineId) {
104   - // TODO @AI:不要 get;直接去 deletebylineId;
105   - getTransferDetailListByLineId(lineId)
106   - .forEach(detail -> transferDetailMapper.deleteById(detail.getId()));
  103 + transferDetailMapper.deleteByLineId(lineId);
107 104 }
108 105  
109 106 private void validateTransferDetailExists(Long id) {
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transfer/MesWmTransferLineServiceImpl.java
... ... @@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
4 4 import cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo.line.MesWmTransferLineSaveReqVO;
5 5 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.transfer.MesWmTransferLineDO;
6 6 import cn.iocoder.yudao.module.mes.dal.mysql.wm.transfer.MesWmTransferLineMapper;
  7 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.materialstock.MesWmMaterialStockDO;
7 8 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
8 9 import cn.iocoder.yudao.module.mes.service.wm.materialstock.MesWmMaterialStockService;
9 10 import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService;
... ... @@ -18,6 +19,7 @@ import java.util.List;
18 19 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
19 20 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_MATERIAL_STOCK_NOT_EXISTS;
20 21 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_TRANSFER_LINE_NOT_EXISTS;
  22 +import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_TRANSFER_LINE_QUANTITY_EXCEED_STOCK;
21 23  
22 24 /**
23 25 * MES 转移单行 Service 实现类
... ... @@ -91,8 +93,7 @@ public class MesWmTransferLineServiceImpl implements MesWmTransferLineService {
91 93  
92 94 @Override
93 95 public void deleteTransferLineByTransferId(Long transferId) {
94   - getTransferLineListByTransferId(transferId)
95   - .forEach(line -> transferLineMapper.deleteById(line.getId()));
  96 + transferLineMapper.deleteByTransferId(transferId);
96 97 }
97 98  
98 99 @Override
... ... @@ -112,10 +113,15 @@ public class MesWmTransferLineServiceImpl implements MesWmTransferLineService {
112 113 // 校验来源仓库、库区、库位的关联关系
113 114 warehouseAreaService.validateWarehouseAreaExists(reqVO.getFromWarehouseId(),
114 115 reqVO.getFromLocationId(), reqVO.getFromAreaId());
115   - // 校验库存记录存在
116   - if (reqVO.getMaterialStockId() != null
117   - && materialStockService.getMaterialStock(reqVO.getMaterialStockId()) == null) {
118   - throw exception(WM_MATERIAL_STOCK_NOT_EXISTS);
  116 + // 校验库存记录存在,且转移数量不超过库存数量
  117 + if (reqVO.getMaterialStockId() != null) {
  118 + MesWmMaterialStockDO stock = materialStockService.getMaterialStock(reqVO.getMaterialStockId());
  119 + if (stock == null) {
  120 + throw exception(WM_MATERIAL_STOCK_NOT_EXISTS);
  121 + }
  122 + if (stock.getQuantity() != null && reqVO.getQuantity().compareTo(stock.getQuantity()) > 0) {
  123 + throw exception(WM_TRANSFER_LINE_QUANTITY_EXCEED_STOCK);
  124 + }
119 125 }
120 126 }
121 127  
... ...