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,4 +25,12 @@ public interface MesWmTransferDetailMapper extends BaseMapperX<MesWmTransferDeta
25 .orderByAsc(MesWmTransferDetailDO::getId)); 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,4 +19,8 @@ public interface MesWmTransferLineMapper extends BaseMapperX<MesWmTransferLineDO
19 .orderByAsc(MesWmTransferLineDO::getId)); 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,6 +451,7 @@ public interface ErrorCodeConstants {
451 ErrorCode WM_TRANSFER_NO_LINE = new ErrorCode(1_040_710_008, "转移单至少需要一条行数据"); 451 ErrorCode WM_TRANSFER_NO_LINE = new ErrorCode(1_040_710_008, "转移单至少需要一条行数据");
452 ErrorCode WM_TRANSFER_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_710_009, "转移单行数量与明细数量不一致"); 452 ErrorCode WM_TRANSFER_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_710_009, "转移单行数量与明细数量不一致");
453 ErrorCode WM_TRANSFER_LINE_NOT_EXISTS = new ErrorCode(1_040_710_100, "转移单行不存在"); 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 ErrorCode WM_TRANSFER_DETAIL_NOT_EXISTS = new ErrorCode(1_040_710_200, "调拨明细不存在"); 455 ErrorCode WM_TRANSFER_DETAIL_NOT_EXISTS = new ErrorCode(1_040_710_200, "调拨明细不存在");
455 ErrorCode WM_TRANSFER_DETAIL_QUANTITY_EXCEED = new ErrorCode(1_040_710_201, "调拨明细总数量不能超过调拨单行数量"); 456 ErrorCode WM_TRANSFER_DETAIL_QUANTITY_EXCEED = new ErrorCode(1_040_710_201, "调拨明细总数量不能超过调拨单行数量");
456 ErrorCode WM_TRANSFER_DETAIL_MIXED_GOODS = new ErrorCode(1_040_710_202, "同一目标仓位下已存在其他物料的明细,不允许混货"); 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,15 +95,12 @@ public class MesWmTransferDetailServiceImpl implements MesWmTransferDetailServic
95 95
96 @Override 96 @Override
97 public void deleteTransferDetailByTransferId(Long transferId) { 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 @Override 101 @Override
103 public void deleteTransferDetailByLineId(Long lineId) { 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 private void validateTransferDetailExists(Long id) { 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,6 +4,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
4 import cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo.line.MesWmTransferLineSaveReqVO; 4 import cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo.line.MesWmTransferLineSaveReqVO;
5 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.transfer.MesWmTransferLineDO; 5 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.transfer.MesWmTransferLineDO;
6 import cn.iocoder.yudao.module.mes.dal.mysql.wm.transfer.MesWmTransferLineMapper; 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 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; 8 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
8 import cn.iocoder.yudao.module.mes.service.wm.materialstock.MesWmMaterialStockService; 9 import cn.iocoder.yudao.module.mes.service.wm.materialstock.MesWmMaterialStockService;
9 import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService; 10 import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService;
@@ -18,6 +19,7 @@ import java.util.List; @@ -18,6 +19,7 @@ import java.util.List;
18 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 19 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
19 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_MATERIAL_STOCK_NOT_EXISTS; 20 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_MATERIAL_STOCK_NOT_EXISTS;
20 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_TRANSFER_LINE_NOT_EXISTS; 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 * MES 转移单行 Service 实现类 25 * MES 转移单行 Service 实现类
@@ -91,8 +93,7 @@ public class MesWmTransferLineServiceImpl implements MesWmTransferLineService { @@ -91,8 +93,7 @@ public class MesWmTransferLineServiceImpl implements MesWmTransferLineService {
91 93
92 @Override 94 @Override
93 public void deleteTransferLineByTransferId(Long transferId) { 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 @Override 99 @Override
@@ -112,10 +113,15 @@ public class MesWmTransferLineServiceImpl implements MesWmTransferLineService { @@ -112,10 +113,15 @@ public class MesWmTransferLineServiceImpl implements MesWmTransferLineService {
112 // 校验来源仓库、库区、库位的关联关系 113 // 校验来源仓库、库区、库位的关联关系
113 warehouseAreaService.validateWarehouseAreaExists(reqVO.getFromWarehouseId(), 114 warehouseAreaService.validateWarehouseAreaExists(reqVO.getFromWarehouseId(),
114 reqVO.getFromLocationId(), reqVO.getFromAreaId()); 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