Commit b8d340c753e50340e6dcd8e68129d421304aea8b
1 parent
3320fa80
✨ feat(select): 增加批次和仓库过滤功能,优化库存选择器
Showing
7 changed files
with
42 additions
and
14 deletions
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/packages/vo/line/MesWmPackageLineSaveReqVO.java
| ... | ... | @@ -36,10 +36,10 @@ public class MesWmPackageLineSaveReqVO { |
| 36 | 36 | @DecimalMin(value = "0.01", message = "装箱数量必须大于 0") |
| 37 | 37 | private BigDecimal quantity; |
| 38 | 38 | |
| 39 | - @Schema(description = "生产工单 ID", example = "1") | |
| 39 | + @Schema(description = "生产工单 ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | |
| 40 | + @NotNull(message = "生产工单不能为空") | |
| 40 | 41 | private Long workOrderId; |
| 41 | 42 | |
| 42 | - // DONE @AI:时间都是 LocalDateTIme; | |
| 43 | 43 | @Schema(description = "有效期") |
| 44 | 44 | private LocalDateTime expireDate; |
| 45 | 45 | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/ErrorCodeConstants.java
| ... | ... | @@ -53,6 +53,8 @@ public interface ErrorCodeConstants { |
| 53 | 53 | ErrorCode WM_BATCH_QUALITY_STATUS_REQUIRED = new ErrorCode(1_040_717_013, "批次配置要求质量状态不能为空"); |
| 54 | 54 | ErrorCode WM_BATCH_NOT_EXISTS = new ErrorCode(1_040_717_014, "批次不存在"); |
| 55 | 55 | ErrorCode WM_BATCH_ITEM_MISMATCH = new ErrorCode(1_040_717_015, "批次不属于当前物料"); |
| 56 | + ErrorCode WM_BATCH_CLIENT_MISMATCH = new ErrorCode(1_040_717_016, "批次不属于当前客户"); | |
| 57 | + ErrorCode WM_BATCH_VENDOR_MISMATCH = new ErrorCode(1_040_717_017, "批次不属于当前供应商"); | |
| 56 | 58 | |
| 57 | 59 | // ========== MES 基础数据-客户(1-040-103-000) ========== |
| 58 | 60 | ErrorCode MD_CLIENT_NOT_EXISTS = new ErrorCode(1_040_103_000, "客户不存在"); | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/batch/MesWmBatchService.java
| ... | ... | @@ -77,4 +77,15 @@ public interface MesWmBatchService { |
| 77 | 77 | */ |
| 78 | 78 | MesWmBatchDO validateBatchExists(Long batchId, Long itemId); |
| 79 | 79 | |
| 80 | + /** | |
| 81 | + * 校验批次存在,并校验批次与物料、客户/供应商的归属关系 | |
| 82 | + * | |
| 83 | + * @param batchId 批次ID | |
| 84 | + * @param itemId 物料ID | |
| 85 | + * @param clientId 客户ID(可选,不为空时校验) | |
| 86 | + * @param vendorId 供应商ID(可选,不为空时校验) | |
| 87 | + * @return 批次记录 | |
| 88 | + */ | |
| 89 | + MesWmBatchDO validateBatchExists(Long batchId, Long itemId, Long clientId, Long vendorId); | |
| 90 | + | |
| 80 | 91 | } | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/batch/MesWmBatchServiceImpl.java
| ... | ... | @@ -248,4 +248,16 @@ public class MesWmBatchServiceImpl implements MesWmBatchService { |
| 248 | 248 | return batch; |
| 249 | 249 | } |
| 250 | 250 | |
| 251 | + @Override | |
| 252 | + public MesWmBatchDO validateBatchExists(Long batchId, Long itemId, Long clientId, Long vendorId) { | |
| 253 | + MesWmBatchDO batch = validateBatchExists(batchId, itemId); | |
| 254 | + if (clientId != null && ObjUtil.notEqual(batch.getClientId(), clientId)) { | |
| 255 | + throw exception(WM_BATCH_CLIENT_MISMATCH); | |
| 256 | + } | |
| 257 | + if (vendorId != null && ObjUtil.notEqual(batch.getVendorId(), vendorId)) { | |
| 258 | + throw exception(WM_BATCH_VENDOR_MISMATCH); | |
| 259 | + } | |
| 260 | + return batch; | |
| 261 | + } | |
| 262 | + | |
| 251 | 263 | } | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/packages/MesWmPackageLineServiceImpl.java
| ... | ... | @@ -102,9 +102,7 @@ public class MesWmPackageLineServiceImpl implements MesWmPackageLineService { |
| 102 | 102 | // 校验产品物料存在 |
| 103 | 103 | itemService.validateItemExists(reqVO.getItemId()); |
| 104 | 104 | // 校验工单已确认 |
| 105 | - if (reqVO.getWorkOrderId() != null) { | |
| 106 | - workOrderService.validateWorkOrderConfirmed(reqVO.getWorkOrderId()); | |
| 107 | - } | |
| 105 | + workOrderService.validateWorkOrderConfirmed(reqVO.getWorkOrderId()); | |
| 108 | 106 | } |
| 109 | 107 | |
| 110 | 108 | private MesWmPackageLineDO validatePackageLineExists(Long id) { | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnsales/MesWmReturnSalesLineServiceImpl.java
| ... | ... | @@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.mes.controller.admin.wm.returnsales.vo.line.MesWm |
| 8 | 8 | import cn.iocoder.yudao.module.mes.controller.admin.wm.returnsales.vo.line.MesWmReturnSalesLineSaveReqVO; |
| 9 | 9 | import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemDO; |
| 10 | 10 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesLineDO; |
| 11 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnsales.MesWmReturnSalesDO; | |
| 11 | 12 | import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnsales.MesWmReturnSalesLineMapper; |
| 12 | 13 | import cn.iocoder.yudao.module.mes.enums.wm.MesWmQualityStatusEnum; |
| 13 | 14 | import cn.iocoder.yudao.module.mes.enums.wm.MesWmReturnSalesStatusEnum; |
| ... | ... | @@ -81,7 +82,7 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ |
| 81 | 82 | // 校验退货单存在 + 草稿状态 |
| 82 | 83 | returnSalesService.validateReturnSalesExistsAndPrepare(reqVO.getReturnId()); |
| 83 | 84 | // 校验物料存在 + 批次管理 |
| 84 | - validateItemBatchManagement(reqVO.getItemId(), reqVO.getBatchId()); | |
| 85 | + validateItemBatchManagement(reqVO.getReturnId(), reqVO.getItemId(), reqVO.getBatchId()); | |
| 85 | 86 | } |
| 86 | 87 | |
| 87 | 88 | @Override |
| ... | ... | @@ -147,18 +148,21 @@ public class MesWmReturnSalesLineServiceImpl implements MesWmReturnSalesLineServ |
| 147 | 148 | /** |
| 148 | 149 | * 校验物料批次管理 |
| 149 | 150 | * |
| 150 | - * @param itemId 物料ID | |
| 151 | - * @param batchId 批次ID | |
| 151 | + * @param returnId 退货单ID | |
| 152 | + * @param itemId 物料ID | |
| 153 | + * @param batchId 批次ID | |
| 152 | 154 | */ |
| 153 | - private void validateItemBatchManagement(Long itemId, Long batchId) { | |
| 155 | + private void validateItemBatchManagement(Long returnId, Long itemId, Long batchId) { | |
| 154 | 156 | MesMdItemDO item = itemService.validateItemExists(itemId); |
| 155 | 157 | // 如果物料启用了批次管理,则必须选择批次 |
| 156 | 158 | if (Boolean.TRUE.equals(item.getBatchFlag()) && batchId == null) { |
| 157 | 159 | throw exception(MD_ITEM_BATCH_REQUIRED); |
| 158 | 160 | } |
| 159 | - // 校验批次存在且属于当前物料 | |
| 161 | + // 校验批次存在且属于当前物料和客户 | |
| 160 | 162 | if (batchId != null) { |
| 161 | - batchService.validateBatchExists(batchId, itemId); | |
| 163 | + // 从父单获取客户ID,校验批次归属 | |
| 164 | + MesWmReturnSalesDO returnSales = returnSalesService.validateReturnSalesExistsAndPrepare(returnId); | |
| 165 | + batchService.validateBatchExists(batchId, itemId, returnSales.getClientId(), null); | |
| 162 | 166 | } |
| 163 | 167 | } |
| 164 | 168 | ... | ... |
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/returnvendor/MesWmReturnVendorLineServiceImpl.java
| ... | ... | @@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 5 | 5 | import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.line.MesWmReturnVendorLinePageReqVO; |
| 6 | 6 | import cn.iocoder.yudao.module.mes.controller.admin.wm.returnvendor.vo.line.MesWmReturnVendorLineSaveReqVO; |
| 7 | 7 | import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor.MesWmReturnVendorLineDO; |
| 8 | +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.returnvendor.MesWmReturnVendorDO; | |
| 8 | 9 | import cn.iocoder.yudao.module.mes.dal.mysql.wm.returnvendor.MesWmReturnVendorLineMapper; |
| 9 | 10 | import cn.iocoder.yudao.module.mes.service.md.item.MesMdItemService; |
| 10 | 11 | import cn.iocoder.yudao.module.mes.service.wm.batch.MesWmBatchService; |
| ... | ... | @@ -108,12 +109,12 @@ public class MesWmReturnVendorLineServiceImpl implements MesWmReturnVendorLineSe |
| 108 | 109 | |
| 109 | 110 | private void validateReturnVendorLineSaveData(MesWmReturnVendorLineSaveReqVO reqVO) { |
| 110 | 111 | // 校验父数据存在且为草稿状态 |
| 111 | - returnVendorService.validateReturnVendorExistsAndPrepare(reqVO.getReturnId()); | |
| 112 | + MesWmReturnVendorDO returnVendor = returnVendorService.validateReturnVendorExistsAndPrepare(reqVO.getReturnId()); | |
| 112 | 113 | // 校验物料存在 |
| 113 | 114 | itemService.validateItemExists(reqVO.getItemId()); |
| 114 | - // 校验批次存在且属于当前物料 | |
| 115 | + // 校验批次存在且属于当前物料和供应商 | |
| 115 | 116 | if (reqVO.getBatchId() != null) { |
| 116 | - batchService.validateBatchExists(reqVO.getBatchId(), reqVO.getItemId()); | |
| 117 | + batchService.validateBatchExists(reqVO.getBatchId(), reqVO.getItemId(), null, returnVendor.getVendorId()); | |
| 117 | 118 | } |
| 118 | 119 | } |
| 119 | 120 | ... | ... |