| | |
| | | } |
| | | |
| | | @Override |
| | | public List<MesWmBatchDO> getBatchList(java.util.Collection<Long> ids) { |
| | | return CollUtil.isEmpty(ids) ? java.util.Collections.emptyList() : batchMapper.selectByIds(ids); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public MesWmBatchDO getOrGenerateBatchCode(MesWmBatchGenerateReqVO reqVO) { |
| | | // 1.1 查询物料信息,检查是否启用批次管理 |
| | | MesMdmItemDO item = mdmItemService.validateItemExists(reqVO.getItemId()); |
| | | if (Boolean.FALSE.equals(item.getIsBatchManaged())) { |
| | | if (Boolean.FALSE.equals(item.getIsBatchManaged()) && StrUtil.isBlank(reqVO.getReelNo())) { |
| | | // 未启用批次管理,返回 null |
| | | return null; |
| | | } |
| | |
| | | MdmItemBatchConfigRespDTO config = itemBatchConfigApi.getItemBatchConfig(reqVO.getItemId()); |
| | | |
| | | // 2. 根据配置校验必填参数并清空不需要的参数 |
| | | MesWmBatchDO batch = MesWmBatchDO.builder().itemId(reqVO.getItemId()).build(); |
| | | String reelNo = StrUtil.isBlank(reqVO.getReelNo()) ? null : reqVO.getReelNo(); |
| | | MesWmBatchDO batch = MesWmBatchDO.builder().itemId(reqVO.getItemId()).reelNo(reelNo).build(); |
| | | if (config != null) { |
| | | // ========== 必填校验(flag=true 表示该字段为必填) ========== |
| | | // 生产日期 |
| | |
| | | if (!existingBatch.getItemId().equals(reqVO.getItemId())) { |
| | | throw exception(WM_BATCH_ITEM_MISMATCH); |
| | | } |
| | | // 已有批次不能改变盘号,避免历史库存被误标或不同盘号混合。 |
| | | String existingReelNo = StrUtil.isBlank(existingBatch.getReelNo()) ? null : existingBatch.getReelNo(); |
| | | if (!ObjUtil.equal(existingReelNo, reelNo)) { |
| | | throw exception(WM_BATCH_REEL_MISMATCH); |
| | | } |
| | | if (existingReelNo != null && !ObjUtil.equal(existingBatch.getWorkOrderId(), reqVO.getWorkOrderId())) { |
| | | // 已有追溯批次不能被另一工单复用并覆盖来源。 |
| | | throw exception(WM_BATCH_REEL_MISMATCH); |
| | | } |
| | | // 更新批次属性(仅更新传入的非空值) |
| | | updateBatchProperties(existingBatch, batch); |
| | | return existingBatch; |