Commit 3320fa804782ee518a072b66260cb089520dc590
1 parent
2a901c12
✨ feat(workorder): 添加工单状态字段并更新相关逻辑
在 MesProWorkOrderPageReqVO 中新增工单状态字段,并在相关的 Mapper 和 Service 中更新查询逻辑以支持该字段。同时,新增批次编号字段到 MesWmMaterialStockPageReqVO,并更新相关逻辑以确保数据一致性。
Showing
12 changed files
with
75 additions
and
46 deletions
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 | 35 | @Schema(description = "客户编号", example = "300") |
| 36 | 36 | private Long clientId; |
| 37 | 37 | |
| 38 | + @Schema(description = "工单状态", example = "1") | |
| 39 | + private Integer status; | |
| 40 | + | |
| 38 | 41 | @Schema(description = "需求日期") |
| 39 | 42 | @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) |
| 40 | 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 | 21 | @Schema(description = "批次号", example = "B20260101") |
| 22 | 22 | private String batchCode; |
| 23 | 23 | |
| 24 | + @Schema(description = "批次编号", example = "1") | |
| 25 | + private Long batchId; | |
| 26 | + | |
| 24 | 27 | @Schema(description = "仓库编号", example = "1") |
| 25 | 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 | 26 | .likeIfPresent(MesProWorkOrderDO::getOrderSourceCode, reqVO.getOrderSourceCode()) |
| 27 | 27 | .eqIfPresent(MesProWorkOrderDO::getProductId, reqVO.getProductId()) |
| 28 | 28 | .eqIfPresent(MesProWorkOrderDO::getClientId, reqVO.getClientId()) |
| 29 | + .eqIfPresent(MesProWorkOrderDO::getStatus, reqVO.getStatus()) | |
| 29 | 30 | .betweenIfPresent(MesProWorkOrderDO::getRequestDate, reqVO.getRequestDate()) |
| 30 | 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 | 26 | .inIfPresent(MesWmMaterialStockDO::getItemTypeId, itemTypeIds) |
| 27 | 27 | .inIfPresent(MesWmMaterialStockDO::getItemId, itemIds) |
| 28 | 28 | .likeIfPresent(MesWmMaterialStockDO::getBatchCode, reqVO.getBatchCode()) |
| 29 | + .eqIfPresent(MesWmMaterialStockDO::getBatchId, reqVO.getBatchId()) | |
| 29 | 30 | .eqIfPresent(MesWmMaterialStockDO::getWarehouseId, reqVO.getWarehouseId()) |
| 30 | 31 | .eqIfPresent(MesWmMaterialStockDO::getLocationId, reqVO.getLocationId()) |
| 31 | 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 | 51 | ErrorCode WM_BATCH_MOLD_REQUIRED = new ErrorCode(1_040_717_011, "批次配置要求模具不能为空"); |
| 52 | 52 | ErrorCode WM_BATCH_LOT_NUMBER_REQUIRED = new ErrorCode(1_040_717_012, "批次配置要求生产批号不能为空"); |
| 53 | 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 | 57 | // ========== MES 基础数据-客户(1-040-103-000) ========== |
| 56 | 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 | 50 | MesProAndonConfigDO config = andonConfigService.validateAndonConfigExists(createReqVO.getConfigId()); |
| 51 | 51 | workstationService.validateWorkstationExists(createReqVO.getWorkstationId()); |
| 52 | 52 | if (createReqVO.getWorkOrderId() != null) { |
| 53 | - workOrderService.validateWorkOrderExists(createReqVO.getWorkOrderId()); | |
| 53 | + workOrderService.validateWorkOrderConfirmed(createReqVO.getWorkOrderId()); | |
| 54 | 54 | } |
| 55 | 55 | if (createReqVO.getProcessId() != null) { |
| 56 | 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 | 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 | 237 | } |
| 238 | 238 | |
| 239 | 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 | 6 | import cn.iocoder.yudao.module.mes.dal.mysql.wm.outsourcereceipt.MesWmOutsourceReceiptDetailMapper; |
| 7 | 7 | import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; |
| 8 | 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 | 9 | import jakarta.annotation.Resource; |
| 12 | 10 | import org.springframework.stereotype.Service; |
| 13 | 11 | import org.springframework.validation.annotation.Validated; |
| ... | ... | @@ -31,28 +29,12 @@ public class MesWmOutsourceReceiptDetailServiceImpl implements MesWmOutsourceRec |
| 31 | 29 | private MesMdItemService itemService; |
| 32 | 30 | |
| 33 | 31 | @Resource |
| 34 | - private MesWmWarehouseService warehouseService; | |
| 35 | - | |
| 36 | - @Resource | |
| 37 | - private MesWmWarehouseLocationService locationService; | |
| 38 | - | |
| 39 | - @Resource | |
| 40 | 32 | private MesWmWarehouseAreaService areaService; |
| 41 | 33 | |
| 42 | 34 | @Override |
| 43 | 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 | 40 | MesWmOutsourceReceiptDetailDO detail = BeanUtils.toBean(createReqVO, MesWmOutsourceReceiptDetailDO.class); |
| ... | ... | @@ -64,18 +46,8 @@ public class MesWmOutsourceReceiptDetailServiceImpl implements MesWmOutsourceRec |
| 64 | 46 | public void updateOutsourceReceiptDetail(MesWmOutsourceReceiptDetailSaveReqVO updateReqVO) { |
| 65 | 47 | // 校验存在 |
| 66 | 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 | 53 | MesWmOutsourceReceiptDetailDO updateObj = BeanUtils.toBean(updateReqVO, MesWmOutsourceReceiptDetailDO.class); |
| ... | ... | @@ -115,6 +87,16 @@ public class MesWmOutsourceReceiptDetailServiceImpl implements MesWmOutsourceRec |
| 115 | 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 | 100 | private void validateOutsourceReceiptDetailExists(Long id) { |
| 119 | 101 | if (detailMapper.selectById(id) == null) { |
| 120 | 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 | 7 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.packages.MesWmPackageLineDO; |
| 8 | 8 | import cn.iocoder.yudao.module.mes.dal.mysql.wm.packages.MesWmPackageLineMapper; |
| 9 | 9 | import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; |
| 10 | +import cn.iocoder.yudao.module.mes.service.pro.workorder.MesProWorkOrderService; | |
| 10 | 11 | import jakarta.annotation.Resource; |
| 11 | 12 | import org.springframework.context.annotation.Lazy; |
| 12 | 13 | import org.springframework.stereotype.Service; |
| ... | ... | @@ -33,13 +34,13 @@ public class MesWmPackageLineServiceImpl implements MesWmPackageLineService { |
| 33 | 34 | private MesWmPackageService packageService; |
| 34 | 35 | @Resource |
| 35 | 36 | private MesMdItemService itemService; |
| 37 | + @Resource | |
| 38 | + private MesProWorkOrderService workOrderService; | |
| 36 | 39 | |
| 37 | 40 | @Override |
| 38 | 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 | 46 | MesWmPackageLineDO line = BeanUtils.toBean(createReqVO, MesWmPackageLineDO.class); |
| ... | ... | @@ -51,10 +52,9 @@ public class MesWmPackageLineServiceImpl implements MesWmPackageLineService { |
| 51 | 52 | public void updatePackageLine(MesWmPackageLineSaveReqVO updateReqVO) { |
| 52 | 53 | // 校验存在 |
| 53 | 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 | 60 | MesWmPackageLineDO updateObj = BeanUtils.toBean(updateReqVO, MesWmPackageLineDO.class); |
| ... | ... | @@ -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 | 110 | private MesWmPackageLineDO validatePackageLineExists(Long id) { |
| 97 | 111 | MesWmPackageLineDO line = packageLineMapper.selectById(id); |
| 98 | 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 | 12 | import cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum; |
| 13 | 13 | import cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnSalesStatusEnum; |
| 14 | 14 | import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; |
| 15 | +import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService; | |
| 15 | 16 | import jakarta.annotation.Resource; |
| 16 | 17 | import org.springframework.context.annotation.Lazy; |
| 17 | 18 | import org.springframework.stereotype.Service; |
| ... | ... | @@ -43,6 +44,8 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ |
| 43 | 44 | @Resource |
| 44 | 45 | private MesMdItemService itemService; |
| 45 | 46 | @Resource |
| 47 | + private MesWmBatchService batchService; | |
| 48 | + @Resource | |
| 46 | 49 | @Lazy |
| 47 | 50 | private MesWmReturnSalesDetailService returnSalesDetailService; |
| 48 | 51 | |
| ... | ... | @@ -153,6 +156,10 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ |
| 153 | 156 | if (Boolean.TRUE.equals(item.getBatchFlag()) && batchId == null) { |
| 154 | 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 | 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 | 7 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor.MesWmReturnVendorLineDO; |
| 8 | 8 | import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnvendor.MesWmReturnVendorLineMapper; |
| 9 | 9 | import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; |
| 10 | +import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService; | |
| 10 | 11 | import jakarta.annotation.Resource; |
| 11 | 12 | import org.springframework.context.annotation.Lazy; |
| 12 | 13 | import org.springframework.stereotype.Service; |
| ... | ... | @@ -36,6 +37,8 @@ public class MesWmReturnVendorLineServiceImpl implements MesWmReturnVendorLineSe |
| 36 | 37 | private MesWmReturnVendorDetailService returnVendorDetailService; |
| 37 | 38 | @Resource |
| 38 | 39 | private MesMdItemService itemService; |
| 40 | + @Resource | |
| 41 | + private MesWmBatchService batchService; | |
| 39 | 42 | |
| 40 | 43 | @Override |
| 41 | 44 | public Long createReturnVendorLine(MesWmReturnVendorLineSaveReqVO createReqVO) { |
| ... | ... | @@ -108,6 +111,10 @@ public class MesWmReturnVendorLineServiceImpl implements MesWmReturnVendorLineSe |
| 108 | 111 | returnVendorService.validateReturnVendorExistsAndPrepare(reqVO.getReturnId()); |
| 109 | 112 | // 校验物料存在 |
| 110 | 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 | } | ... | ... |