diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java index 12403de6..c9400375 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsMaterialCoilServiceImpl.java @@ -74,7 +74,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { if (vo == null) { return null; } - + // 如果查询到的是历史数据,尝试查找对应的当前数据 if (vo.getDataType() != null && vo.getDataType() == 0) { // 根据入场钢卷号查找当前数据 @@ -82,7 +82,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { lqw.eq(WmsMaterialCoil::getEnterCoilNo, vo.getEnterCoilNo()) .eq(WmsMaterialCoil::getDataType, 1) // 查找当前数据 .orderByDesc(WmsMaterialCoil::getCreateTime); // 按创建时间倒序,获取最新的 - + List currentDataList = baseMapper.selectVoList(lqw); if (!currentDataList.isEmpty()) { // 如果找到当前数据,返回最新的当前数据 @@ -168,6 +168,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { lqw.eq(bo.getWarehouseId() != null, WmsMaterialCoil::getWarehouseId, bo.getWarehouseId()); lqw.eq(bo.getHasMergeSplit() != null, WmsMaterialCoil::getHasMergeSplit, bo.getHasMergeSplit()); lqw.eq(bo.getStatus() != null, WmsMaterialCoil::getStatus, bo.getStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getItemType()), WmsMaterialCoil::getItemType, bo.getItemType()); return lqw; } @@ -353,7 +354,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { newCoil.setCoilId(null); // 清空ID,让数据库自动生成新的ID newCoil.setDataType(1); // 设置为当前数据 newCoil.setQrcodeRecordId(oldCoil.getQrcodeRecordId()); // 继承二维码ID - + // 确保关键字段不丢失 if (newCoil.getEnterCoilNo() == null) { newCoil.setEnterCoilNo(oldCoil.getEnterCoilNo()); @@ -367,7 +368,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { if (newCoil.getItemId() == null) { newCoil.setItemId(oldCoil.getItemId()); } - + validEntityBeforeSave(newCoil); boolean flag = baseMapper.insert(newCoil) > 0; if (flag) { @@ -447,15 +448,15 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { if (newCoil.getWarehouseId() == null) { newCoil.setWarehouseId(oldCoil.getWarehouseId()); } - + // 为每个子钢卷生成独立二维码 Long newQrcodeId = generateQrcodeForSplit(oldCoil, newCoilBo, allNewCoilNos); newCoil.setQrcodeRecordId(newQrcodeId); - + validEntityBeforeSave(newCoil); baseMapper.insert(newCoil); newCoils.add(newCoil); - + // 更新二维码内容中的coilId updateQrcodeCoilId(newQrcodeId, newCoil.getCoilId()); } @@ -478,7 +479,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { WmsMaterialCoil newCoil = BeanUtil.toBean(bo, WmsMaterialCoil.class); newCoil.setCoilId(null); newCoil.setDataType(1); - + // 从第一个参与合卷的原始钢卷获取基本信息 if (!bo.getNewCoils().isEmpty()) { WmsMaterialCoil firstOriginalCoil = baseMapper.selectById(bo.getNewCoils().get(0).getCoilId()); @@ -786,18 +787,18 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { try { // 1. 查询所有相关的二维码记录(包括分卷后的独立二维码) List allQrRecords = new ArrayList<>(); - + // 首先查询主二维码(以入场钢卷号为序列号的) WmsGenerateRecordBo qrBo = new WmsGenerateRecordBo(); qrBo.setSerialNumber(enterCoilNo); List mainQrRecords = generateRecordService.queryList(qrBo); allQrRecords.addAll(mainQrRecords); - + // 然后查询所有以该入场钢卷号开头的二维码(分卷后的二维码) WmsGenerateRecordBo splitQrBo = new WmsGenerateRecordBo(); List allRecords = generateRecordService.queryList(splitQrBo); for (WmsGenerateRecordVo record : allRecords) { - if (record.getSerialNumber() != null && + if (record.getSerialNumber() != null && record.getSerialNumber().startsWith(enterCoilNo + "-") && !allQrRecords.contains(record)) { allQrRecords.add(record); @@ -811,20 +812,20 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { // 2. 合并所有二维码的steps信息,去重并重新编号 Map> uniqueSteps = new HashMap<>(); // 用于去重 Set allCoilNos = new HashSet<>(); - + for (WmsGenerateRecordVo qrRecord : allQrRecords) { ObjectMapper objectMapper = new ObjectMapper(); @SuppressWarnings("unchecked") Map contentMap = objectMapper.readValue(qrRecord.getContent(), Map.class); - + @SuppressWarnings("unchecked") List> steps = (List>) contentMap.get("steps"); - + if (steps != null) { for (Map step : steps) { // 创建唯一标识:操作类型 + 相关钢卷号 String stepKey = createStepKey(step); - + // 如果是新的步骤,添加到唯一步骤集合中 if (!uniqueSteps.containsKey(stepKey)) { Map uniqueStep = new HashMap<>(step); @@ -832,7 +833,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { uniqueStep.put("qrcode_id", qrRecord.getRecordId()); uniqueSteps.put(stepKey, uniqueStep); } - + // 提取钢卷号 extractCoilNo(step, "current_coil_no", allCoilNos); extractCoilNo(step, "new_current_coil_no", allCoilNos); @@ -846,10 +847,10 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { } } } - + // 转换为列表并按原始步骤号排序(保持时间顺序) List> allSteps = new ArrayList<>(uniqueSteps.values()); - + // 按原始步骤号排序,保持实际操作的时间顺序 allSteps.sort((a, b) -> { Integer stepA = (Integer) a.get("step"); @@ -858,7 +859,7 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { if (stepB == null) stepB = 0; return stepA.compareTo(stepB); }); - + // 重新编号(保持连续性) for (int i = 0; i < allSteps.size(); i++) { allSteps.get(i).put("display_step", i + 1); @@ -903,14 +904,14 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { fillRelatedObjects(vo); } } - + // 如果没有找到记录,尝试查询所有相关的钢卷(包括历史数据) if (result.isEmpty()) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(WmsMaterialCoil::getEnterCoilNo, enterCoilNo); lqw.orderByAsc(WmsMaterialCoil::getCreateTime); result = baseMapper.selectVoList(lqw); - + // 填充每个记录的关联对象信息 for (WmsMaterialCoilVo vo : result) { fillRelatedObjects(vo); @@ -935,11 +936,11 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { */ private String createStepKey(Map step) { StringBuilder keyBuilder = new StringBuilder(); - + // 使用操作类型和主要标识符创建唯一key String operation = (String) step.get("operation"); keyBuilder.append(operation).append("-"); - + // 根据操作类型使用不同的标识符 if ("分卷".equals(operation)) { // 分卷:使用原钢卷号 + 分卷列表 @@ -957,10 +958,10 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService { keyBuilder.append(step.get("old_current_coil_no")).append("->"); keyBuilder.append(step.get("new_current_coil_no")); } - + return keyBuilder.toString(); } - + /** * 从step中提取钢卷号