Commit 3320fa804782ee518a072b66260cb089520dc590

Authored by YunaiV
1 parent 2a901c12

✨ feat(workorder): 添加工单状态字段并更新相关逻辑

在 MesProWorkOrderPageReqVO 中新增工单状态字段,并在相关的 Mapper 和 Service 中更新查询逻辑以支持该字段。同时,新增批次编号字段到 MesWmMaterialStockPageReqVO,并更新相关逻辑以确保数据一致性。
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/vo/MesProWorkOrderPageReqVO.java
@@ -35,6 +35,9 @@ public class MesProWorkOrderPageReqVO extends PageParam { @@ -35,6 +35,9 @@ public class MesProWorkOrderPageReqVO extends PageParam {
35 @Schema(description = "客户编号", example = "300") 35 @Schema(description = "客户编号", example = "300")
36 private Long clientId; 36 private Long clientId;
37 37
  38 + @Schema(description = "工单状态", example = "1")
  39 + private Integer status;
  40 +
38 @Schema(description = "需求日期") 41 @Schema(description = "需求日期")
39 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) 42 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
40 private LocalDateTime[] requestDate; 43 private LocalDateTime[] requestDate;
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/materialstock/vo/MesWmMaterialStockPageReqVO.java
@@ -21,6 +21,9 @@ public class MesWmMaterialStockPageReqVO extends PageParam { @@ -21,6 +21,9 @@ public class MesWmMaterialStockPageReqVO extends PageParam {
21 @Schema(description = "批次号", example = "B20260101") 21 @Schema(description = "批次号", example = "B20260101")
22 private String batchCode; 22 private String batchCode;
23 23
  24 + @Schema(description = "批次编号", example = "1")
  25 + private Long batchId;
  26 +
24 @Schema(description = "仓库编号", example = "1") 27 @Schema(description = "仓库编号", example = "1")
25 private Long warehouseId; 28 private Long warehouseId;
26 29
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pro/workorder/MesProWorkOrderMapper.java
@@ -26,6 +26,7 @@ public interface MesProWorkOrderMapper extends BaseMapperX<MesProWorkOrderDO> { @@ -26,6 +26,7 @@ public interface MesProWorkOrderMapper extends BaseMapperX<MesProWorkOrderDO> {
26 .likeIfPresent(MesProWorkOrderDO::getOrderSourceCode, reqVO.getOrderSourceCode()) 26 .likeIfPresent(MesProWorkOrderDO::getOrderSourceCode, reqVO.getOrderSourceCode())
27 .eqIfPresent(MesProWorkOrderDO::getProductId, reqVO.getProductId()) 27 .eqIfPresent(MesProWorkOrderDO::getProductId, reqVO.getProductId())
28 .eqIfPresent(MesProWorkOrderDO::getClientId, reqVO.getClientId()) 28 .eqIfPresent(MesProWorkOrderDO::getClientId, reqVO.getClientId())
  29 + .eqIfPresent(MesProWorkOrderDO::getStatus, reqVO.getStatus())
29 .betweenIfPresent(MesProWorkOrderDO::getRequestDate, reqVO.getRequestDate()) 30 .betweenIfPresent(MesProWorkOrderDO::getRequestDate, reqVO.getRequestDate())
30 .orderByDesc(MesProWorkOrderDO::getId)); 31 .orderByDesc(MesProWorkOrderDO::getId));
31 } 32 }
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/materialstock/MesWmMaterialStockMapper.java
@@ -26,6 +26,7 @@ public interface MesWmMaterialStockMapper extends BaseMapperX<MesWmMaterialStock @@ -26,6 +26,7 @@ public interface MesWmMaterialStockMapper extends BaseMapperX<MesWmMaterialStock
26 .inIfPresent(MesWmMaterialStockDO::getItemTypeId, itemTypeIds) 26 .inIfPresent(MesWmMaterialStockDO::getItemTypeId, itemTypeIds)
27 .inIfPresent(MesWmMaterialStockDO::getItemId, itemIds) 27 .inIfPresent(MesWmMaterialStockDO::getItemId, itemIds)
28 .likeIfPresent(MesWmMaterialStockDO::getBatchCode, reqVO.getBatchCode()) 28 .likeIfPresent(MesWmMaterialStockDO::getBatchCode, reqVO.getBatchCode())
  29 + .eqIfPresent(MesWmMaterialStockDO::getBatchId, reqVO.getBatchId())
29 .eqIfPresent(MesWmMaterialStockDO::getWarehouseId, reqVO.getWarehouseId()) 30 .eqIfPresent(MesWmMaterialStockDO::getWarehouseId, reqVO.getWarehouseId())
30 .eqIfPresent(MesWmMaterialStockDO::getLocationId, reqVO.getLocationId()) 31 .eqIfPresent(MesWmMaterialStockDO::getLocationId, reqVO.getLocationId())
31 .eqIfPresent(MesWmMaterialStockDO::getAreaId, reqVO.getAreaId()) 32 .eqIfPresent(MesWmMaterialStockDO::getAreaId, reqVO.getAreaId())
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java
@@ -51,6 +51,8 @@ public interface ErrorCodeConstants { @@ -51,6 +51,8 @@ public interface ErrorCodeConstants {
51 ErrorCode WM_BATCH_MOLD_REQUIRED = new ErrorCode(1_040_717_011, "批次配置要求模具不能为空"); 51 ErrorCode WM_BATCH_MOLD_REQUIRED = new ErrorCode(1_040_717_011, "批次配置要求模具不能为空");
52 ErrorCode WM_BATCH_LOT_NUMBER_REQUIRED = new ErrorCode(1_040_717_012, "批次配置要求生产批号不能为空"); 52 ErrorCode WM_BATCH_LOT_NUMBER_REQUIRED = new ErrorCode(1_040_717_012, "批次配置要求生产批号不能为空");
53 ErrorCode WM_BATCH_QUALITY_STATUS_REQUIRED = new ErrorCode(1_040_717_013, "批次配置要求质量状态不能为空"); 53 ErrorCode WM_BATCH_QUALITY_STATUS_REQUIRED = new ErrorCode(1_040_717_013, "批次配置要求质量状态不能为空");
  54 + ErrorCode WM_BATCH_NOT_EXISTS = new ErrorCode(1_040_717_014, "批次不存在");
  55 + ErrorCode WM_BATCH_ITEM_MISMATCH = new ErrorCode(1_040_717_015, "批次不属于当前物料");
54 56
55 // ========== MES 基础数据-客户(1-040-103-000) ========== 57 // ========== MES 基础数据-客户(1-040-103-000) ==========
56 ErrorCode MD_CLIENT_NOT_EXISTS = new ErrorCode(1_040_103_000, "客户不存在"); 58 ErrorCode MD_CLIENT_NOT_EXISTS = new ErrorCode(1_040_103_000, "客户不存在");
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/andon/MesProAndonRecordServiceImpl.java
@@ -50,7 +50,7 @@ public class MesProAndonRecordServiceImpl implements MesProAndonRecordService { @@ -50,7 +50,7 @@ public class MesProAndonRecordServiceImpl implements MesProAndonRecordService {
50 MesProAndonConfigDO config = andonConfigService.validateAndonConfigExists(createReqVO.getConfigId()); 50 MesProAndonConfigDO config = andonConfigService.validateAndonConfigExists(createReqVO.getConfigId());
51 workstationService.validateWorkstationExists(createReqVO.getWorkstationId()); 51 workstationService.validateWorkstationExists(createReqVO.getWorkstationId());
52 if (createReqVO.getWorkOrderId() != null) { 52 if (createReqVO.getWorkOrderId() != null) {
53 - workOrderService.validateWorkOrderExists(createReqVO.getWorkOrderId()); 53 + workOrderService.validateWorkOrderConfirmed(createReqVO.getWorkOrderId());
54 } 54 }
55 if (createReqVO.getProcessId() != null) { 55 if (createReqVO.getProcessId() != null) {
56 processService.validateProcessExists(createReqVO.getProcessId()); 56 processService.validateProcessExists(createReqVO.getProcessId());
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/batch/MesWmBatchService.java
@@ -69,10 +69,12 @@ public interface MesWmBatchService { @@ -69,10 +69,12 @@ public interface MesWmBatchService {
69 List<MesWmBatchDO> getBackwardBatchList(String code); 69 List<MesWmBatchDO> getBackwardBatchList(String code);
70 70
71 /** 71 /**
72 - * 获取批次列表 72 + * 校验批次存在,并校验批次与物料的归属关系
73 * 73 *
74 - * @return 批次列表 74 + * @param batchId 批次ID
  75 + * @param itemId 物料ID
  76 + * @return 批次记录
75 */ 77 */
76 - List<MesWmBatchDO> getBatchList(); 78 + MesWmBatchDO validateBatchExists(Long batchId, Long itemId);
77 79
78 } 80 }
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/batch/MesWmBatchServiceImpl.java
@@ -237,8 +237,15 @@ public class MesWmBatchServiceImpl implements MesWmBatchService { @@ -237,8 +237,15 @@ public class MesWmBatchServiceImpl implements MesWmBatchService {
237 } 237 }
238 238
239 @Override 239 @Override
240 - public List<MesWmBatchDO> getBatchList() {  
241 - return batchMapper.selectList(); 240 + public MesWmBatchDO validateBatchExists(Long batchId, Long itemId) {
  241 + MesWmBatchDO batch = batchMapper.selectById(batchId);
  242 + if (batch == null) {
  243 + throw exception(WM_BATCH_NOT_EXISTS);
  244 + }
  245 + if (ObjUtil.notEqual(batch.getItemId(), itemId)) {
  246 + throw exception(WM_BATCH_ITEM_MISMATCH);
  247 + }
  248 + return batch;
242 } 249 }
243 250
244 } 251 }
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/outsourcereceipt/MesWmOutsourceReceiptDetailServiceImpl.java
@@ -6,8 +6,6 @@ import cn.iocoder.yudao.module.mes.dal.dataobject.wm.outsourcereceipt.MesWmOutso @@ -6,8 +6,6 @@ import cn.iocoder.yudao.module.mes.dal.dataobject.wm.outsourcereceipt.MesWmOutso
6 import cn.iocoder.yudao.module.mes.dal.mysql.wm.outsourcereceipt.MesWmOutsourceReceiptDetailMapper; 6 import cn.iocoder.yudao.module.mes.dal.mysql.wm.outsourcereceipt.MesWmOutsourceReceiptDetailMapper;
7 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; 7 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
8 import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService; 8 import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService;
9 -import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseLocationService;  
10 -import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService;  
11 import jakarta.annotation.Resource; 9 import jakarta.annotation.Resource;
12 import org.springframework.stereotype.Service; 10 import org.springframework.stereotype.Service;
13 import org.springframework.validation.annotation.Validated; 11 import org.springframework.validation.annotation.Validated;
@@ -31,28 +29,12 @@ public class MesWmOutsourceReceiptDetailServiceImpl implements MesWmOutsourceRec @@ -31,28 +29,12 @@ public class MesWmOutsourceReceiptDetailServiceImpl implements MesWmOutsourceRec
31 private MesMdItemService itemService; 29 private MesMdItemService itemService;
32 30
33 @Resource 31 @Resource
34 - private MesWmWarehouseService warehouseService;  
35 -  
36 - @Resource  
37 - private MesWmWarehouseLocationService locationService;  
38 -  
39 - @Resource  
40 private MesWmWarehouseAreaService areaService; 32 private MesWmWarehouseAreaService areaService;
41 33
42 @Override 34 @Override
43 public Long createOutsourceReceiptDetail(MesWmOutsourceReceiptDetailSaveReqVO createReqVO) { 35 public Long createOutsourceReceiptDetail(MesWmOutsourceReceiptDetailSaveReqVO createReqVO) {
44 - // 校验物料存在  
45 - itemService.validateItemExists(createReqVO.getItemId());  
46 - // 校验仓库、库区、库位存在  
47 - if (createReqVO.getWarehouseId() != null) {  
48 - warehouseService.validateWarehouseExists(createReqVO.getWarehouseId());  
49 - }  
50 - if (createReqVO.getLocationId() != null) {  
51 - locationService.validateWarehouseLocationExists(createReqVO.getLocationId());  
52 - }  
53 - if (createReqVO.getAreaId() != null) {  
54 - areaService.validateWarehouseAreaExists(createReqVO.getAreaId());  
55 - } 36 + // 校验数据
  37 + validateDetailSaveData(createReqVO);
56 38
57 // 插入 39 // 插入
58 MesWmOutsourceReceiptDetailDO detail = BeanUtils.toBean(createReqVO, MesWmOutsourceReceiptDetailDO.class); 40 MesWmOutsourceReceiptDetailDO detail = BeanUtils.toBean(createReqVO, MesWmOutsourceReceiptDetailDO.class);
@@ -64,18 +46,8 @@ public class MesWmOutsourceReceiptDetailServiceImpl implements MesWmOutsourceRec @@ -64,18 +46,8 @@ public class MesWmOutsourceReceiptDetailServiceImpl implements MesWmOutsourceRec
64 public void updateOutsourceReceiptDetail(MesWmOutsourceReceiptDetailSaveReqVO updateReqVO) { 46 public void updateOutsourceReceiptDetail(MesWmOutsourceReceiptDetailSaveReqVO updateReqVO) {
65 // 校验存在 47 // 校验存在
66 validateOutsourceReceiptDetailExists(updateReqVO.getId()); 48 validateOutsourceReceiptDetailExists(updateReqVO.getId());
67 - // 校验物料存在  
68 - itemService.validateItemExists(updateReqVO.getItemId());  
69 - // 校验仓库、库区、库位存在  
70 - if (updateReqVO.getWarehouseId() != null) {  
71 - warehouseService.validateWarehouseExists(updateReqVO.getWarehouseId());  
72 - }  
73 - if (updateReqVO.getLocationId() != null) {  
74 - locationService.validateWarehouseLocationExists(updateReqVO.getLocationId());  
75 - }  
76 - if (updateReqVO.getAreaId() != null) {  
77 - areaService.validateWarehouseAreaExists(updateReqVO.getAreaId());  
78 - } 49 + // 校验数据
  50 + validateDetailSaveData(updateReqVO);
79 51
80 // 更新 52 // 更新
81 MesWmOutsourceReceiptDetailDO updateObj = BeanUtils.toBean(updateReqVO, MesWmOutsourceReceiptDetailDO.class); 53 MesWmOutsourceReceiptDetailDO updateObj = BeanUtils.toBean(updateReqVO, MesWmOutsourceReceiptDetailDO.class);
@@ -115,6 +87,16 @@ public class MesWmOutsourceReceiptDetailServiceImpl implements MesWmOutsourceRec @@ -115,6 +87,16 @@ public class MesWmOutsourceReceiptDetailServiceImpl implements MesWmOutsourceRec
115 detailMapper.deleteByLineId(lineId); 87 detailMapper.deleteByLineId(lineId);
116 } 88 }
117 89
  90 + /**
  91 + * 校验保存时的关联数据
  92 + */
  93 + private void validateDetailSaveData(MesWmOutsourceReceiptDetailSaveReqVO reqVO) {
  94 + // 校验物料存在
  95 + itemService.validateItemExists(reqVO.getItemId());
  96 + // 校验仓库、库区、库位的层级关系
  97 + areaService.validateWarehouseAreaExists(reqVO.getWarehouseId(), reqVO.getLocationId(), reqVO.getAreaId());
  98 + }
  99 +
118 private void validateOutsourceReceiptDetailExists(Long id) { 100 private void validateOutsourceReceiptDetailExists(Long id) {
119 if (detailMapper.selectById(id) == null) { 101 if (detailMapper.selectById(id) == null) {
120 throw exception(WM_OUTSOURCE_RECEIPT_DETAIL_NOT_EXISTS); 102 throw exception(WM_OUTSOURCE_RECEIPT_DETAIL_NOT_EXISTS);
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineServiceImpl.java
@@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line.MesWmPac @@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.packages.vo.line.MesWmPac
7 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageLineDO; 7 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageLineDO;
8 import cn.iocoder.yudao.module.mes.dal.mysql.wm.packages.MesWmPackageLineMapper; 8 import cn.iocoder.yudao.module.mes.dal.mysql.wm.packages.MesWmPackageLineMapper;
9 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; 9 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
  10 +import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService;
10 import jakarta.annotation.Resource; 11 import jakarta.annotation.Resource;
11 import org.springframework.context.annotation.Lazy; 12 import org.springframework.context.annotation.Lazy;
12 import org.springframework.stereotype.Service; 13 import org.springframework.stereotype.Service;
@@ -33,13 +34,13 @@ public class MesWmPackageLineServiceImpl implements MesWmPackageLineService { @@ -33,13 +34,13 @@ public class MesWmPackageLineServiceImpl implements MesWmPackageLineService {
33 private MesWmPackageService packageService; 34 private MesWmPackageService packageService;
34 @Resource 35 @Resource
35 private MesMdItemService itemService; 36 private MesMdItemService itemService;
  37 + @Resource
  38 + private MesProWorkOrderService workOrderService;
36 39
37 @Override 40 @Override
38 public Long createPackageLine(MesWmPackageLineSaveReqVO createReqVO) { 41 public Long createPackageLine(MesWmPackageLineSaveReqVO createReqVO) {
39 - // 校验装箱单状态为草稿  
40 - packageService.validatePackageStatusDraft(createReqVO.getPackageId());  
41 - // 校验产品物料存在  
42 - itemService.validateItemExists(createReqVO.getItemId()); 42 + // 校验数据
  43 + validateLineSaveData(createReqVO);
43 44
44 // 插入 45 // 插入
45 MesWmPackageLineDO line = BeanUtils.toBean(createReqVO, MesWmPackageLineDO.class); 46 MesWmPackageLineDO line = BeanUtils.toBean(createReqVO, MesWmPackageLineDO.class);
@@ -51,10 +52,9 @@ public class MesWmPackageLineServiceImpl implements MesWmPackageLineService { @@ -51,10 +52,9 @@ public class MesWmPackageLineServiceImpl implements MesWmPackageLineService {
51 public void updatePackageLine(MesWmPackageLineSaveReqVO updateReqVO) { 52 public void updatePackageLine(MesWmPackageLineSaveReqVO updateReqVO) {
52 // 校验存在 53 // 校验存在
53 MesWmPackageLineDO line = validatePackageLineExists(updateReqVO.getId()); 54 MesWmPackageLineDO line = validatePackageLineExists(updateReqVO.getId());
54 - // 校验装箱单状态为草稿  
55 - packageService.validatePackageStatusDraft(line.getPackageId());  
56 - // 校验产品物料存在  
57 - itemService.validateItemExists(updateReqVO.getItemId()); 55 + // 校验数据
  56 + updateReqVO.setPackageId(line.getPackageId());
  57 + validateLineSaveData(updateReqVO);
58 58
59 // 更新 59 // 更新
60 MesWmPackageLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmPackageLineDO.class); 60 MesWmPackageLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmPackageLineDO.class);
@@ -93,6 +93,20 @@ public class MesWmPackageLineServiceImpl implements MesWmPackageLineService { @@ -93,6 +93,20 @@ public class MesWmPackageLineServiceImpl implements MesWmPackageLineService {
93 93
94 // ========== 校验方法 ========== 94 // ========== 校验方法 ==========
95 95
  96 + /**
  97 + * 校验保存时的关联数据
  98 + */
  99 + private void validateLineSaveData(MesWmPackageLineSaveReqVO reqVO) {
  100 + // 校验装箱单状态为草稿
  101 + packageService.validatePackageStatusDraft(reqVO.getPackageId());
  102 + // 校验产品物料存在
  103 + itemService.validateItemExists(reqVO.getItemId());
  104 + // 校验工单已确认
  105 + if (reqVO.getWorkOrderId() != null) {
  106 + workOrderService.validateWorkOrderConfirmed(reqVO.getWorkOrderId());
  107 + }
  108 + }
  109 +
96 private MesWmPackageLineDO validatePackageLineExists(Long id) { 110 private MesWmPackageLineDO validatePackageLineExists(Long id) {
97 MesWmPackageLineDO line = packageLineMapper.selectById(id); 111 MesWmPackageLineDO line = packageLineMapper.selectById(id);
98 if (line == null) { 112 if (line == null) {
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineServiceImpl.java
@@ -12,6 +12,7 @@ import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnsales.MesWmReturnSalesLine @@ -12,6 +12,7 @@ import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnsales.MesWmReturnSalesLine
12 import cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum; 12 import cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum;
13 import cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnSalesStatusEnum; 13 import cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnSalesStatusEnum;
14 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; 14 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
  15 +import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService;
15 import jakarta.annotation.Resource; 16 import jakarta.annotation.Resource;
16 import org.springframework.context.annotation.Lazy; 17 import org.springframework.context.annotation.Lazy;
17 import org.springframework.stereotype.Service; 18 import org.springframework.stereotype.Service;
@@ -43,6 +44,8 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ @@ -43,6 +44,8 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ
43 @Resource 44 @Resource
44 private MesMdItemService itemService; 45 private MesMdItemService itemService;
45 @Resource 46 @Resource
  47 + private MesWmBatchService batchService;
  48 + @Resource
46 @Lazy 49 @Lazy
47 private MesWmReturnSalesDetailService returnSalesDetailService; 50 private MesWmReturnSalesDetailService returnSalesDetailService;
48 51
@@ -153,6 +156,10 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ @@ -153,6 +156,10 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ
153 if (Boolean.TRUE.equals(item.getBatchFlag()) && batchId == null) { 156 if (Boolean.TRUE.equals(item.getBatchFlag()) && batchId == null) {
154 throw exception(MD_ITEM_BATCH_REQUIRED); 157 throw exception(MD_ITEM_BATCH_REQUIRED);
155 } 158 }
  159 + // 校验批次存在且属于当前物料
  160 + if (batchId != null) {
  161 + batchService.validateBatchExists(batchId, itemId);
  162 + }
156 } 163 }
157 164
158 @Override 165 @Override
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorLineServiceImpl.java
@@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.line.MesW @@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.line.MesW
7 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor.MesWmReturnVendorLineDO; 7 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor.MesWmReturnVendorLineDO;
8 import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnvendor.MesWmReturnVendorLineMapper; 8 import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnvendor.MesWmReturnVendorLineMapper;
9 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; 9 import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService;
  10 +import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService;
10 import jakarta.annotation.Resource; 11 import jakarta.annotation.Resource;
11 import org.springframework.context.annotation.Lazy; 12 import org.springframework.context.annotation.Lazy;
12 import org.springframework.stereotype.Service; 13 import org.springframework.stereotype.Service;
@@ -36,6 +37,8 @@ public class MesWmReturnVendorLineServiceImpl implements MesWmReturnVendorLineSe @@ -36,6 +37,8 @@ public class MesWmReturnVendorLineServiceImpl implements MesWmReturnVendorLineSe
36 private MesWmReturnVendorDetailService returnVendorDetailService; 37 private MesWmReturnVendorDetailService returnVendorDetailService;
37 @Resource 38 @Resource
38 private MesMdItemService itemService; 39 private MesMdItemService itemService;
  40 + @Resource
  41 + private MesWmBatchService batchService;
39 42
40 @Override 43 @Override
41 public Long createReturnVendorLine(MesWmReturnVendorLineSaveReqVO createReqVO) { 44 public Long createReturnVendorLine(MesWmReturnVendorLineSaveReqVO createReqVO) {
@@ -108,6 +111,10 @@ public class MesWmReturnVendorLineServiceImpl implements MesWmReturnVendorLineSe @@ -108,6 +111,10 @@ public class MesWmReturnVendorLineServiceImpl implements MesWmReturnVendorLineSe
108 returnVendorService.validateReturnVendorExistsAndPrepare(reqVO.getReturnId()); 111 returnVendorService.validateReturnVendorExistsAndPrepare(reqVO.getReturnId());
109 // 校验物料存在 112 // 校验物料存在
110 itemService.validateItemExists(reqVO.getItemId()); 113 itemService.validateItemExists(reqVO.getItemId());
  114 + // 校验批次存在且属于当前物料
  115 + if (reqVO.getBatchId() != null) {
  116 + batchService.validateBatchExists(reqVO.getBatchId(), reqVO.getItemId());
  117 + }
111 } 118 }
112 119
113 } 120 }