Browse Source

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

新增通过行ID和转移ID删除转移单行和明细的功能,简化了删除操作,提升代码可读性和维护性。同时,增加了转移数量超过库存数量的错误码,增强了系统的健壮性。
YunaiV 3 months ago
parent
commit
98f21288f0

+ 8 - 0
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
                 .orderByAsc(MesWmTransferDetailDO::getId));
     }
 
+    default void deleteByLineId(Long lineId) {
+        delete(MesWmTransferDetailDO::getLineId, lineId);
+    }
+
+    default void deleteByTransferId(Long transferId) {
+        delete(MesWmTransferDetailDO::getTransferId, transferId);
+    }
+
 }

+ 4 - 0
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
                 .orderByAsc(MesWmTransferLineDO::getId));
     }
 
+    default void deleteByTransferId(Long transferId) {
+        delete(MesWmTransferLineDO::getTransferId, transferId);
+    }
+
 }

+ 1 - 0
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java

@@ -451,6 +451,7 @@ public interface ErrorCodeConstants {
     ErrorCode WM_TRANSFER_NO_LINE = new ErrorCode(1_040_710_008, "转移单至少需要一条行数据");
     ErrorCode WM_TRANSFER_DETAIL_QUANTITY_MISMATCH = new ErrorCode(1_040_710_009, "转移单行数量与明细数量不一致");
     ErrorCode WM_TRANSFER_LINE_NOT_EXISTS = new ErrorCode(1_040_710_100, "转移单行不存在");
+    ErrorCode WM_TRANSFER_LINE_QUANTITY_EXCEED_STOCK = new ErrorCode(1_040_710_101, "转移数量不能超过库存数量");
     ErrorCode WM_TRANSFER_DETAIL_NOT_EXISTS = new ErrorCode(1_040_710_200, "调拨明细不存在");
     ErrorCode WM_TRANSFER_DETAIL_QUANTITY_EXCEED = new ErrorCode(1_040_710_201, "调拨明细总数量不能超过调拨单行数量");
     ErrorCode WM_TRANSFER_DETAIL_MIXED_GOODS = new ErrorCode(1_040_710_202, "同一目标仓位下已存在其他物料的明细,不允许混货");

+ 2 - 5
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
 
     @Override
     public void deleteTransferDetailByTransferId(Long transferId) {
-        getTransferDetailListByTransferId(transferId)
-                .forEach(detail -> transferDetailMapper.deleteById(detail.getId()));
+        transferDetailMapper.deleteByTransferId(transferId);
     }
 
     @Override
     public void deleteTransferDetailByLineId(Long lineId) {
-        // TODO @AI:不要 get;直接去 deletebylineId;
-        getTransferDetailListByLineId(lineId)
-                .forEach(detail -> transferDetailMapper.deleteById(detail.getId()));
+        transferDetailMapper.deleteByLineId(lineId);
     }
 
     private void validateTransferDetailExists(Long id) {

+ 12 - 6
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;
 import cn.iocoder.yudao.module.mes.controller.admin.wm.transfer.vo.line.MesWmTransferLineSaveReqVO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.transfer.MesWmTransferLineDO;
 import cn.iocoder.yudao.module.mes.dal.mysql.wm.transfer.MesWmTransferLineMapper;
+import cn.iocoder.yudao.module.mes.dal.dataobject.wm.materialstock.MesWmMaterialStockDO;
 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
 import cn.iocoder.yudao.module.mes.service.wm.materialstock.MesWmMaterialStockService;
 import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService;
@@ -18,6 +19,7 @@ import java.util.List;
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_MATERIAL_STOCK_NOT_EXISTS;
 import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_TRANSFER_LINE_NOT_EXISTS;
+import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.WM_TRANSFER_LINE_QUANTITY_EXCEED_STOCK;
 
 /**
  * MES 转移单行 Service 实现类
@@ -91,8 +93,7 @@ public class MesWmTransferLineServiceImpl implements MesWmTransferLineService {
 
     @Override
     public void deleteTransferLineByTransferId(Long transferId) {
-        getTransferLineListByTransferId(transferId)
-                .forEach(line -> transferLineMapper.deleteById(line.getId()));
+        transferLineMapper.deleteByTransferId(transferId);
     }
 
     @Override
@@ -112,10 +113,15 @@ public class MesWmTransferLineServiceImpl implements MesWmTransferLineService {
         // 校验来源仓库、库区、库位的关联关系
         warehouseAreaService.validateWarehouseAreaExists(reqVO.getFromWarehouseId(),
                 reqVO.getFromLocationId(), reqVO.getFromAreaId());
-        // 校验库存记录存在
-        if (reqVO.getMaterialStockId() != null
-                && materialStockService.getMaterialStock(reqVO.getMaterialStockId()) == null) {
-            throw exception(WM_MATERIAL_STOCK_NOT_EXISTS);
+        // 校验库存记录存在,且转移数量不超过库存数量
+        if (reqVO.getMaterialStockId() != null) {
+            MesWmMaterialStockDO stock = materialStockService.getMaterialStock(reqVO.getMaterialStockId());
+            if (stock == null) {
+                throw exception(WM_MATERIAL_STOCK_NOT_EXISTS);
+            }
+            if (stock.getQuantity() != null && reqVO.getQuantity().compareTo(stock.getQuantity()) > 0) {
+                throw exception(WM_TRANSFER_LINE_QUANTITY_EXCEED_STOCK);
+            }
         }
     }