diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/pojo/qo/PqcInspectionRuleSearchQO.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/pojo/qo/PqcInspectionRuleSearchQO.java index cee9e4d0..56096554 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/pojo/qo/PqcInspectionRuleSearchQO.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/pojo/qo/PqcInspectionRuleSearchQO.java @@ -4,7 +4,7 @@ import com.nflg.wms.common.pojo.qo.PageQO; import lombok.Data; import lombok.EqualsAndHashCode; -import java.time.LocalDateTime; +import java.time.LocalDate; /** * PQC检验规则搜索参数 @@ -36,10 +36,10 @@ public class PqcInspectionRuleSearchQO extends PageQO { /** * 创建时间开始 */ - private LocalDateTime createTimeStart; + private LocalDate createTimeStart; /** * 创建时间结束 */ - private LocalDateTime createTimeEnd; + private LocalDate createTimeEnd; } diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPqcTaskRecordControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPqcTaskRecordControllerService.java index 29011c35..56b9e12a 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPqcTaskRecordControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsPqcTaskRecordControllerService.java @@ -444,7 +444,7 @@ public class QmsPqcTaskRecordControllerService { QmsPqcInspectionPointItems item = itemMap.get(detail.getInspectionPointItemId()); if (item == null) continue; - if (item.getInspectionType() != null && item.getInspectionType() == 1) { + if (isDetailType(detail, 1)) { // 关键物料拍照 QmsPqcTaskRecordDetailVO.MaterialCollectionVO materialVO = new QmsPqcTaskRecordDetailVO.MaterialCollectionVO(); materialVO.setSerialNo(detail.getSelfTestData()); @@ -454,7 +454,7 @@ public class QmsPqcTaskRecordControllerService { materialVO.setCollector(taskRecord.getSelfTesterName()); materialVO.setCollectionTime(detail.getSelfTestUploadTime()); materialCollections.add(materialVO); - } else { + } else if (isDetailType(detail, 0)) { // 工序检查 QmsPqcTaskRecordDetailVO.ProcessInspectionVO processVO = new QmsPqcTaskRecordDetailVO.ProcessInspectionVO(); processVO.setInspectionContent(item.getInspectionContent()); @@ -537,9 +537,9 @@ public class QmsPqcTaskRecordControllerService { QmsPqcInspectionPointItems item = itemMap.get(detail.getInspectionPointItemId()); if (item == null) continue; - // 只返回星级1和2 - if (item.getInspectionLevel() != null && (item.getInspectionLevel() == 1 || item.getInspectionLevel() == 2)) { - if (item.getInspectionType() != null && item.getInspectionType() == 1) { + // 自检只返回星级1和2 + if (isSelfInspectionLevel(item)) { + if (isDetailType(detail, 1)) { // 关键物料拍照 QmsPqcTaskRecordRepairSelfVO.MaterialCollectionVO materialVO = new QmsPqcTaskRecordRepairSelfVO.MaterialCollectionVO(); materialVO.setSerialNo(detail.getSelfTestData()); @@ -549,7 +549,7 @@ public class QmsPqcTaskRecordControllerService { materialVO.setCollector(taskRecord.getSelfTesterName()); materialVO.setCollectionTime(detail.getSelfTestUploadTime()); materialCollections.add(materialVO); - } else { + } else if (isDetailType(detail, 0)) { // 工序检查 QmsPqcTaskRecordRepairSelfVO.ProcessInspectionVO processVO = new QmsPqcTaskRecordRepairSelfVO.ProcessInspectionVO(); processVO.setInspectionContent(item.getInspectionContent()); @@ -623,6 +623,7 @@ public class QmsPqcTaskRecordControllerService { // 6. 分类组装数据 List materialCollections = new ArrayList<>(); + List qcMaterialCollections = new ArrayList<>(); List processInspections = new ArrayList<>(); List processInspectionsLevel3 = new ArrayList<>(); @@ -630,7 +631,7 @@ public class QmsPqcTaskRecordControllerService { QmsPqcInspectionPointItems item = itemMap.get(detail.getInspectionPointItemId()); if (item == null) continue; - if (item.getInspectionType() != null && item.getInspectionType() == 1) { + if (isDetailType(detail, 1)) { // 关键物料拍照 QmsPqcTaskRecordReviewVO.MaterialCollectionVO materialVO = new QmsPqcTaskRecordReviewVO.MaterialCollectionVO(); materialVO.setSerialNo(detail.getSelfTestData()); @@ -639,10 +640,14 @@ public class QmsPqcTaskRecordControllerService { QmsPqcTaskRecordReviewVO.FileDetailVO.class)); materialVO.setCollector(taskRecord.getSelfTesterName()); materialVO.setCollectionTime(detail.getSelfTestUploadTime()); - materialCollections.add(materialVO); - } else { + if (isQcInspectionLevel(item)) { + qcMaterialCollections.add(materialVO); + } else if (isSelfInspectionLevel(item)) { + materialCollections.add(materialVO); + } + } else if (isDetailType(detail, 0)) { // 工序检查 - if (item.getInspectionLevel() != null && (item.getInspectionLevel() == 1 || item.getInspectionLevel() == 2)) { + if (isSelfInspectionLevel(item)) { // 星级1和2:复核用 QmsPqcTaskRecordReviewVO.ProcessInspectionVO processVO = new QmsPqcTaskRecordReviewVO.ProcessInspectionVO(); processVO.setInspectionContent(item.getInspectionContent()); @@ -659,7 +664,7 @@ public class QmsPqcTaskRecordControllerService { QmsPqcTaskRecordReviewVO.FileDetailVO.class)); processVO.setReviewOpinion(detail.getReviewOpinion()); processInspections.add(processVO); - } else if (item.getInspectionLevel() != null && item.getInspectionLevel() == 3) { + } else if (isQcInspectionLevel(item)) { // 星级3:检测用 QmsPqcTaskRecordReviewVO.ProcessInspectionLevel3VO processVO = new QmsPqcTaskRecordReviewVO.ProcessInspectionLevel3VO(); processVO.setInspectionContent(item.getInspectionContent()); @@ -688,6 +693,7 @@ public class QmsPqcTaskRecordControllerService { vo.setNo(taskRecord.getNo()); vo.setModelNo(taskRecord.getModelNo()); vo.setMaterialCollections(materialCollections); + vo.setQcMaterialCollections(qcMaterialCollections); vo.setProcessInspections(processInspections); vo.setProcessInspectionsLevel3(processInspectionsLevel3); vo.setTesterId(taskRecord.getSelfTesterId()); @@ -989,6 +995,9 @@ public class QmsPqcTaskRecordControllerService { * 判断是否有复核相关内容 */ private boolean hasReviewContent(QmsPqcTaskRecordDraftQO request) { + if (request.getQcMaterialCollections() != null && !request.getQcMaterialCollections().isEmpty()) { + return true; + } if (request.getProcessInspections() != null) { for (QmsPqcTaskRecordDraftQO.ProcessInspectionItem item : request.getProcessInspections()) { if (StrUtil.isNotBlank(item.getReviewData()) @@ -1011,6 +1020,18 @@ public class QmsPqcTaskRecordControllerService { return false; } + private boolean isDetailType(QmsPqcTaskRecordDetails detail, int type) { + return detail != null && Objects.equals(detail.getType(), (short) type); + } + + private boolean isSelfInspectionLevel(QmsPqcInspectionPointItems item) { + return item != null && (Objects.equals(item.getInspectionLevel(), 1) || Objects.equals(item.getInspectionLevel(), 2)); + } + + private boolean isQcInspectionLevel(QmsPqcInspectionPointItems item) { + return item != null && Objects.equals(item.getInspectionLevel(), 3); + } + /** * 校验数据完整性 */ @@ -1019,12 +1040,10 @@ public class QmsPqcTaskRecordControllerService { // 校验关键物料采集 if (request.getMaterialCollections() != null) { - for (int i = 0; i < request.getMaterialCollections().size(); i++) { - QmsPqcTaskRecordDraftQO.MaterialCollectionItem item = request.getMaterialCollections().get(i); - if (StrUtil.isBlank(item.getSerialNo())) { - emptyFields.add("materialCollections[" + i + "].serialNo"); - } - } + validateMaterialCollections(request.getMaterialCollections(), "materialCollections", emptyFields); + } + if (request.getQcMaterialCollections() != null) { + validateMaterialCollections(request.getQcMaterialCollections(), "qcMaterialCollections", emptyFields); } // 校验工序检查(一二级):自检数据和自检附件有一个不为空即有效 @@ -1058,10 +1077,7 @@ public class QmsPqcTaskRecordControllerService { List details = pqcTaskRecordDetailsService.lambdaQuery() .eq(QmsPqcTaskRecordDetails::getTaskId, taskId) .list(); - List type0Details = details.stream() - .filter(d -> d.getType() != null && d.getType() == 0) - .collect(Collectors.toList()); - Set itemIds = type0Details.stream() + Set itemIds = details.stream() .map(QmsPqcTaskRecordDetails::getInspectionPointItemId) .filter(Objects::nonNull) .collect(Collectors.toSet()); @@ -1069,11 +1085,15 @@ public class QmsPqcTaskRecordControllerService { ? new HashMap<>() : pqcInspectionPointItemsService.listByIds(itemIds).stream() .collect(Collectors.toMap(QmsPqcInspectionPointItems::getId, item -> item, (a, b) -> a)); + List selfProcessDetails = details.stream() + .filter(d -> isDetailType(d, 0)) + .filter(d -> isSelfInspectionLevel(itemMap.get(d.getInspectionPointItemId()))) + .collect(Collectors.toList()); List emptyFields = new ArrayList<>(); if (hasReviewContent) { - validateReviewData(request, type0Details, itemMap, emptyFields); + validateReviewData(request, selfProcessDetails, itemMap, emptyFields); } else { - validateSelfTestData(request, type0Details, itemMap, emptyFields); + validateSelfTestData(request, selfProcessDetails, itemMap, emptyFields); } return emptyFields; } @@ -1083,12 +1103,10 @@ public class QmsPqcTaskRecordControllerService { Map itemMap, List emptyFields) { if (request.getMaterialCollections() != null) { - for (int i = 0; i < request.getMaterialCollections().size(); i++) { - QmsPqcTaskRecordDraftQO.MaterialCollectionItem item = request.getMaterialCollections().get(i); - if (item.getFiles() == null || item.getFiles().isEmpty()) { - emptyFields.add("materialCollections[" + i + "].files"); - } - } + validateMaterialCollections(request.getMaterialCollections(), "materialCollections", emptyFields); + } + if (request.getQcMaterialCollections() != null) { + validateMaterialCollections(request.getQcMaterialCollections(), "qcMaterialCollections", emptyFields); } if (request.getProcessInspections() == null) { return; @@ -1110,6 +1128,12 @@ public class QmsPqcTaskRecordControllerService { List type0Details, Map itemMap, List emptyFields) { + if (request.getMaterialCollections() != null) { + validateMaterialCollections(request.getMaterialCollections(), "materialCollections", emptyFields); + } + if (request.getQcMaterialCollections() != null) { + validateMaterialCollections(request.getQcMaterialCollections(), "qcMaterialCollections", emptyFields); + } if (request.getProcessInspections() != null) { for (int i = 0; i < request.getProcessInspections().size() && i < type0Details.size(); i++) { QmsPqcTaskRecordDraftQO.ProcessInspectionItem item = request.getProcessInspections().get(i); @@ -1139,6 +1163,23 @@ public class QmsPqcTaskRecordControllerService { } } + private void validateMaterialCollections(List items, + String fieldPrefix, + List emptyFields) { + for (int i = 0; i < items.size(); i++) { + QmsPqcTaskRecordDraftQO.MaterialCollectionItem item = items.get(i); + if (StrUtil.isBlank(item.getSerialNo())) { + emptyFields.add(fieldPrefix + "[" + i + "].serialNo"); + } + if (StrUtil.isBlank(item.getBatchNo())) { + emptyFields.add(fieldPrefix + "[" + i + "].batchNo"); + } + if (item.getFiles() == null || item.getFiles().isEmpty()) { + emptyFields.add(fieldPrefix + "[" + i + "].files"); + } + } + } + /** * 保存任务详情 */ @@ -1150,15 +1191,48 @@ public class QmsPqcTaskRecordControllerService { .eq(QmsPqcTaskRecordDetails::getTaskId, taskId) .list(); - // type=1 的 inspectionPointItemId 列表(关键物料) - List type1ItemIds = oldDetails.stream() - .filter(d -> d.getType() != null && d.getType() == 1) + Set oldItemIds = oldDetails.stream() + .map(QmsPqcTaskRecordDetails::getInspectionPointItemId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + Map oldItemMap = oldItemIds.isEmpty() + ? new HashMap<>() + : pqcInspectionPointItemsService.listByIds(oldItemIds).stream() + .collect(Collectors.toMap(QmsPqcInspectionPointItems::getId, item -> item, (a, b) -> a)); + + // type=1 且星级1/2 的明细(自检关键物料) + List selfMaterialDetails = oldDetails.stream() + .filter(d -> isDetailType(d, 1)) + .filter(d -> isSelfInspectionLevel(oldItemMap.get(d.getInspectionPointItemId()))) + .collect(Collectors.toList()); + List selfMaterialItemIds = selfMaterialDetails.stream() .map(QmsPqcTaskRecordDetails::getInspectionPointItemId) .collect(Collectors.toList()); - // type=0 的 inspectionPointItemId 列表(工序检查,一二级+三级按顺序) - List type0ItemIds = oldDetails.stream() - .filter(d -> d.getType() != null && d.getType() == 0) + // type=1 且星级3 的明细(QC关键物料) + List qcMaterialDetails = oldDetails.stream() + .filter(d -> isDetailType(d, 1)) + .filter(d -> isQcInspectionLevel(oldItemMap.get(d.getInspectionPointItemId()))) + .collect(Collectors.toList()); + List qcMaterialItemIds = qcMaterialDetails.stream() + .map(QmsPqcTaskRecordDetails::getInspectionPointItemId) + .collect(Collectors.toList()); + + // type=0 且星级1/2 的明细(自检/复核工序检查) + List selfProcessDetails = oldDetails.stream() + .filter(d -> isDetailType(d, 0)) + .filter(d -> isSelfInspectionLevel(oldItemMap.get(d.getInspectionPointItemId()))) + .collect(Collectors.toList()); + List selfProcessItemIds = selfProcessDetails.stream() + .map(QmsPqcTaskRecordDetails::getInspectionPointItemId) + .collect(Collectors.toList()); + + // type=0 且星级3 的明细(QC工序检查) + List qcProcessDetails = oldDetails.stream() + .filter(d -> isDetailType(d, 0)) + .filter(d -> isQcInspectionLevel(oldItemMap.get(d.getInspectionPointItemId()))) + .collect(Collectors.toList()); + List qcProcessItemIds = qcProcessDetails.stream() .map(QmsPqcTaskRecordDetails::getInspectionPointItemId) .collect(Collectors.toList()); @@ -1174,7 +1248,7 @@ public class QmsPqcTaskRecordControllerService { QmsPqcTaskRecordDetails detail = new QmsPqcTaskRecordDetails() .setTaskId(taskId) .setType((short) 1) - .setInspectionPointItemId(i < type1ItemIds.size() ? type1ItemIds.get(i) : null) + .setInspectionPointItemId(i < selfMaterialItemIds.size() ? selfMaterialItemIds.get(i) : null) .setSelfTestData(item.getSerialNo()) .setSelfCheck(item.getFiles() != null && !item.getFiles().isEmpty() ? true : null) .setReviewData(item.getBatchNo()) @@ -1182,6 +1256,27 @@ public class QmsPqcTaskRecordControllerService { .setSelfTestUploadTime(now); pqcTaskRecordDetailsService.save(detail); } + } else { + saveExistingTaskDetails(taskId, selfMaterialDetails); + } + + // 保存QC关键物料采集(三级) + if (request.getQcMaterialCollections() != null) { + for (int i = 0; i < request.getQcMaterialCollections().size(); i++) { + QmsPqcTaskRecordDraftQO.MaterialCollectionItem item = request.getQcMaterialCollections().get(i); + QmsPqcTaskRecordDetails detail = new QmsPqcTaskRecordDetails() + .setTaskId(taskId) + .setType((short) 1) + .setInspectionPointItemId(i < qcMaterialItemIds.size() ? qcMaterialItemIds.get(i) : null) + .setSelfTestData(item.getSerialNo()) + .setSelfCheck(item.getFiles() != null && !item.getFiles().isEmpty() ? true : null) + .setReviewData(item.getBatchNo()) + .setSelfTestAttachments(serializeFileList(item.getFiles())) + .setSelfTestUploadTime(now); + pqcTaskRecordDetailsService.save(detail); + } + } else { + saveExistingTaskDetails(taskId, qcMaterialDetails); } // 保存工序检查(一二级) @@ -1191,7 +1286,7 @@ public class QmsPqcTaskRecordControllerService { QmsPqcTaskRecordDetails detail = new QmsPqcTaskRecordDetails() .setTaskId(taskId) .setType((short) 0) - .setInspectionPointItemId(i < type0ItemIds.size() ? type0ItemIds.get(i) : null) + .setInspectionPointItemId(i < selfProcessItemIds.size() ? selfProcessItemIds.get(i) : null) .setSelfTestData(item.getSelfTestData()) .setSelfCheck(item.getSelfCheck()) .setReviewData(item.getReviewData()) @@ -1203,18 +1298,18 @@ public class QmsPqcTaskRecordControllerService { .setReviewUploadTime(StrUtil.isNotBlank(item.getReviewData()) ? now : null); pqcTaskRecordDetailsService.save(detail); } + } else { + saveExistingTaskDetails(taskId, selfProcessDetails); } // 保存工序检查(三级),index 接在一二级后面 if (request.getProcessInspectionsLevel3() != null) { - int offset = request.getProcessInspections() != null ? request.getProcessInspections().size() : 0; for (int i = 0; i < request.getProcessInspectionsLevel3().size(); i++) { QmsPqcTaskRecordDraftQO.ProcessInspectionLevel3Item item = request.getProcessInspectionsLevel3().get(i); - int idx = offset + i; QmsPqcTaskRecordDetails detail = new QmsPqcTaskRecordDetails() .setTaskId(taskId) .setType((short) 0) - .setInspectionPointItemId(idx < type0ItemIds.size() ? type0ItemIds.get(idx) : null) + .setInspectionPointItemId(i < qcProcessItemIds.size() ? qcProcessItemIds.get(i) : null) .setSelfCheck(null) .setReviewEnable(item.getEnable()); if (hasReviewContent) { @@ -1231,9 +1326,32 @@ public class QmsPqcTaskRecordControllerService { } pqcTaskRecordDetailsService.save(detail); } + } else { + saveExistingTaskDetails(taskId, qcProcessDetails); } } + private void saveExistingTaskDetails(Long taskId, List details) { + if (details == null || details.isEmpty()) { + return; + } + details.forEach(old -> pqcTaskRecordDetailsService.save(new QmsPqcTaskRecordDetails() + .setTaskId(taskId) + .setInspectionPointItemId(old.getInspectionPointItemId()) + .setSelfTestAttachments(old.getSelfTestAttachments()) + .setSelfTestData(old.getSelfTestData()) + .setSelfCheck(old.getSelfCheck()) + .setSelfTestUploadTime(old.getSelfTestUploadTime()) + .setReviewAttachments(old.getReviewAttachments()) + .setReviewData(old.getReviewData()) + .setReviewEnable(old.getReviewEnable()) + .setReviewUploadTime(old.getReviewUploadTime()) + .setQcTestAttachments(old.getQcTestAttachments()) + .setQcTestData(old.getQcTestData()) + .setType(old.getType()) + .setReviewOpinion(old.getReviewOpinion()))); + } + /** * 序列化文件列表 */ diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/impl/QmsPqcInspectionRuleControllerServiceImpl.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/impl/QmsPqcInspectionRuleControllerServiceImpl.java index 821a856f..cbef6467 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/impl/QmsPqcInspectionRuleControllerServiceImpl.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/impl/QmsPqcInspectionRuleControllerServiceImpl.java @@ -22,6 +22,7 @@ import com.nflg.wms.common.exception.NflgException; import com.nflg.wms.common.pojo.PageData; import com.nflg.wms.common.pojo.dto.PqcInspectionRuleExportDTO; import com.nflg.wms.common.pojo.dto.PqcInspectionRuleImportDTO; +import com.nflg.wms.common.pojo.dto.PqcInspectionRuleImportTemplateDTO; import com.nflg.wms.common.pojo.qo.PqcInspectionRuleExportQO; import com.nflg.wms.common.pojo.vo.QmsPqcInspectionPointItemListVO; import com.nflg.wms.common.pojo.vo.QmsPqcInspectionPointItemsGroupedVO; @@ -101,10 +102,11 @@ public class QmsPqcInspectionRuleControllerServiceImpl implements QmsPqcInspecti .orderByAsc(QmsPqcInspectionPointItems::getSort) .list(); - // 初始化三个分类列表 + // 初始化分类列表 List materialItems = new ArrayList<>(); // 第1类:关键物料拍照 List selfReviewItems = new ArrayList<>(); // 第2类:工序检查-自检复核 - List qcItems = new ArrayList<>(); // 第3类:工序检查-QC检测 + List qcMaterialItems = new ArrayList<>(); // 第3类:QC关键物料拍照 + List qcItems = new ArrayList<>(); // 第4类:工序检查-QC检测 // 分类逻辑 for (QmsPqcInspectionPointItems item : allItems) { @@ -121,20 +123,28 @@ public class QmsPqcInspectionRuleControllerServiceImpl implements QmsPqcInspecti Integer type = item.getInspectionType(); Integer level = item.getInspectionLevel(); - // 第1类:关键物料拍照类 - // 包含:inspectionType = 1(关键物料拍照)+ inspectionType = 2(全部) - if (Objects.equals(type, 1) || Objects.equals(type, 2)) { + boolean materialType = Objects.equals(type, 1) || Objects.equals(type, 2); + boolean processType = Objects.equals(type, 0) || Objects.equals(type, 2); + boolean selfLevel = Objects.equals(level, 1) || Objects.equals(level, 2); + boolean qcLevel = Objects.equals(level, 3); + + // 第1类:自检侧关键物料拍照类 + if (materialType && selfLevel) { materialItems.add(vo); } // 第2类:自检只看1/2星的工序检查或全部 - if ((Objects.equals(type, 0) || Objects.equals(type, 2)) - && (Objects.equals(level, 1) || Objects.equals(level, 2))) { + if (processType && selfLevel) { selfReviewItems.add(vo); } - // 第3类:3星不区分检测/采集,全部由复核人员处理 - if (Objects.equals(level, 3)) { + // 第3类:QC侧3星关键物料拍照类 + if (materialType && qcLevel) { + qcMaterialItems.add(vo); + } + + // 第4类:QC侧3星工序检查类 + if (processType && qcLevel) { qcItems.add(vo); } } @@ -143,6 +153,7 @@ public class QmsPqcInspectionRuleControllerServiceImpl implements QmsPqcInspecti QmsPqcInspectionPointItemsGroupedVO groupedVO = new QmsPqcInspectionPointItemsGroupedVO(); groupedVO.setMaterialItems(materialItems); groupedVO.setSelfReviewItems(selfReviewItems); + groupedVO.setQcMaterialItems(qcMaterialItems); groupedVO.setQcItems(qcItems); return groupedVO; @@ -182,8 +193,8 @@ public class QmsPqcInspectionRuleControllerServiceImpl implements QmsPqcInspecti .like(StrUtil.isNotBlank(qo.getPqcRuleCode()), QmsPqcInspectionRule::getPqcRuleCode, qo.getPqcRuleCode()) .eq(Objects.nonNull(qo.getIsDisabled()), QmsPqcInspectionRule::getIsDisabled, qo.getIsDisabled()) .eq(Objects.nonNull(qo.getAuditStatus()), QmsPqcInspectionRule::getAuditStatus, qo.getAuditStatus()) - .ge(Objects.nonNull(qo.getCreateTimeStart()), QmsPqcInspectionRule::getCreateTime, qo.getCreateTimeStart()) - .le(Objects.nonNull(qo.getCreateTimeEnd()), QmsPqcInspectionRule::getCreateTime, qo.getCreateTimeEnd()) + .ge(Objects.nonNull(qo.getCreateTimeStart()), QmsPqcInspectionRule::getCreateTime, qo.getCreateTimeStart() == null ? null : qo.getCreateTimeStart().atStartOfDay()) + .lt(Objects.nonNull(qo.getCreateTimeEnd()), QmsPqcInspectionRule::getCreateTime, qo.getCreateTimeEnd() == null ? null : qo.getCreateTimeEnd().plusDays(1).atStartOfDay()) .orderByDesc(QmsPqcInspectionRule::getCreateTime); Page page = ruleService.page(new Page<>(qo.getPage(), qo.getPageSize()), queryWrapper); @@ -343,8 +354,9 @@ public class QmsPqcInspectionRuleControllerServiceImpl implements QmsPqcInspecti // 创建新规则 QmsPqcInspectionRule newRule = new QmsPqcInspectionRule(); - newRule.setModelNo(null); // 清空机型编号 - newRule.setRuleVersion(1); + newRule.setModelNo(existRule.getModelNo()); + newRule.setPqcRuleCode(serialNumberControllerService.generateSerialNumber(40)); + newRule.setRuleVersion(getNextRuleVersion(existRule.getModelNo())); newRule.setIsDisabled(true); newRule.setAuditStatus(0); newRule.setCreateBy(operatorId); @@ -829,6 +841,7 @@ public class QmsPqcInspectionRuleControllerServiceImpl implements QmsPqcInspecti throw new NflgException(STATE.BusinessError, "机型" + modelNo + "已存在未审核的版本,请先完成审核后再导入"); } targetRuleId = forkNewVersion(highestRule); + isNewRule = true; } else { // 最高版本未审核,直接在其上修改 targetRuleId = highestRule.getId(); @@ -861,6 +874,10 @@ public class QmsPqcInspectionRuleControllerServiceImpl implements QmsPqcInspecti // 追加导入:保留已有数据,追加导入数据(去重) appendImportPointsAndItems(targetRuleId, pointGroups, stepDicItems, operator, operatorId, now); } + + if (isNewRule) { + ensurePlaceholderPointsForMissingSteps(targetRuleId, stepDicItems, operator, operatorId, now); + } } } @@ -1191,7 +1208,7 @@ public class QmsPqcInspectionRuleControllerServiceImpl implements QmsPqcInspecti @Override public void downloadTemplate(HttpServletResponse response) throws IOException { - PqcInspectionRuleImportDTO example = new PqcInspectionRuleImportDTO() + PqcInspectionRuleImportTemplateDTO example = new PqcInspectionRuleImportTemplateDTO() .setModelNo("示例机型编号") .setStepName("示例步装名称") .setInspectionPointCode("示例检查点编号") @@ -1204,4 +1221,46 @@ public class QmsPqcInspectionRuleControllerServiceImpl implements QmsPqcInspecti .setSort(1); EecExcelUtil.export("PQC检测规则导入模板", "PQC检测规则导入模板", List.of(example), response); } + + private Integer getNextRuleVersion(String modelNo) { + Integer maxVersion = ruleService.lambdaQuery() + .eq(StrUtil.isNotBlank(modelNo), QmsPqcInspectionRule::getModelNo, modelNo) + .select(QmsPqcInspectionRule::getRuleVersion) + .list() + .stream() + .map(QmsPqcInspectionRule::getRuleVersion) + .filter(Objects::nonNull) + .max(Integer::compareTo) + .orElse(0); + return maxVersion + 1; + } + + private void ensurePlaceholderPointsForMissingSteps(Long ruleId, + List stepDicItems, + String operator, + Long operatorId, + LocalDateTime now) { + List existPoints = pointService.lambdaQuery() + .eq(QmsPqcInspectionPoint::getPqcRuleId, ruleId) + .list(); + Map existStepMap = existPoints.stream() + .filter(point -> point.getStepDicItemId() != null) + .collect(Collectors.toMap(QmsPqcInspectionPoint::getStepDicItemId, point -> point, (a, b) -> a)); + + for (DictionaryItem stepDicItem : stepDicItems) { + if (stepDicItem.getId() == null || existStepMap.containsKey(stepDicItem.getId())) { + continue; + } + QmsPqcInspectionPoint placeholderPoint = new QmsPqcInspectionPoint(); + placeholderPoint.setPqcRuleId(ruleId); + placeholderPoint.setStepName(stepDicItem.getName()); + placeholderPoint.setStepDicItemId(stepDicItem.getId()); + placeholderPoint.setInspectionPointCode(""); + placeholderPoint.setInspectionPointName(""); + placeholderPoint.setCreateBy(operatorId); + placeholderPoint.setCreateName(operator); + placeholderPoint.setCreateTime(now); + pointService.save(placeholderPoint); + } + } } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/PqcInspectionRuleImportTemplateDTO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/PqcInspectionRuleImportTemplateDTO.java new file mode 100644 index 00000000..9bcd0bd4 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/dto/PqcInspectionRuleImportTemplateDTO.java @@ -0,0 +1,43 @@ +package com.nflg.wms.common.pojo.dto; + +import lombok.Data; +import lombok.experimental.Accessors; +import org.ttzero.excel.annotation.ExcelColumn; + +/** + * PQC检测规则 导入模板DTO + */ +@Data +@Accessors(chain = true) +public class PqcInspectionRuleImportTemplateDTO { + + @ExcelColumn("机型编号*") + private String modelNo; + + @ExcelColumn("步装名称*") + private String stepName; + + @ExcelColumn("检查点编号*") + private String inspectionPointCode; + + @ExcelColumn("检查点名称") + private String inspectionPointName; + + @ExcelColumn("检查项内容*") + private String inspectionContent; + + @ExcelColumn("检查项类别*") + private String inspectionTypeText; + + @ExcelColumn("检测方法*") + private String inspectionMethodsText; + + @ExcelColumn("等级*") + private String inspectionLevelText; + + @ExcelColumn("实例图") + private String inspectionImage; + + @ExcelColumn("排序") + private Integer sort; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsPqcTaskRecordDraftQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsPqcTaskRecordDraftQO.java index 30bed88b..85383dc6 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsPqcTaskRecordDraftQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsPqcTaskRecordDraftQO.java @@ -45,6 +45,11 @@ public class QmsPqcTaskRecordDraftQO { */ private List materialCollections; + /** + * QC关键物料采集对象列表(三级) + */ + private List qcMaterialCollections; + /** * 工序检查对象列表(一二级) */ diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsPdiComponentBindingSearchVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsPdiComponentBindingSearchVO.java index ecb28c0a..ce9963c1 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsPdiComponentBindingSearchVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsPdiComponentBindingSearchVO.java @@ -1,5 +1,6 @@ package com.nflg.wms.common.pojo.vo; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import java.util.ArrayList; @@ -75,11 +76,13 @@ public class QmsPdiComponentBindingSearchVO { /** * x轴坐标 */ + @JsonProperty("xCoordinatePoint") private String xCoordinatePoint; /** * y轴坐标 */ + @JsonProperty("yCoordinatePoint") private String yCoordinatePoint; /** diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsPqcInspectionPointItemsGroupedVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsPqcInspectionPointItemsGroupedVO.java index 8fbf7445..bc31ab3b 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsPqcInspectionPointItemsGroupedVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsPqcInspectionPointItemsGroupedVO.java @@ -12,7 +12,7 @@ public class QmsPqcInspectionPointItemsGroupedVO { /** * 第1类:关键物料拍照类 - * 包含:inspectionType = 1(关键物料拍照)+ inspectionType = 2(全部) + * 包含:inspectionType = 1或2,且星级=1或2 */ private List materialItems; @@ -23,8 +23,14 @@ public class QmsPqcInspectionPointItemsGroupedVO { private List selfReviewItems; /** - * 第3类:工序检查-QC检测类 - * 包含:星级=3,不区分检查类型 + * 第3类:QC关键物料拍照类 + * 包含:inspectionType = 1或2,且星级=3 + */ + private List qcMaterialItems; + + /** + * 第4类:工序检查-QC检测类 + * 包含:inspectionType = 0或2,且星级=3 */ private List qcItems; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsPqcTaskRecordReviewVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsPqcTaskRecordReviewVO.java index ce806ad8..1eff1d3b 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsPqcTaskRecordReviewVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsPqcTaskRecordReviewVO.java @@ -51,6 +51,11 @@ public class QmsPqcTaskRecordReviewVO { */ private List materialCollections; + /** + * QC关键物料采集对象列表(三级) + */ + private List qcMaterialCollections; + /** * 工序检查对象列表(一二级)- 复核用 */