pqc检测任务修改

部件绑定修改
This commit is contained in:
yf001217 2026-06-09 20:02:21 +08:00
parent 33c50fdf9c
commit e398aa9d8a
8 changed files with 299 additions and 60 deletions

View File

@ -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;
}

View File

@ -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<QmsPqcTaskRecordReviewVO.MaterialCollectionVO> materialCollections = new ArrayList<>();
List<QmsPqcTaskRecordReviewVO.MaterialCollectionVO> qcMaterialCollections = new ArrayList<>();
List<QmsPqcTaskRecordReviewVO.ProcessInspectionVO> processInspections = new ArrayList<>();
List<QmsPqcTaskRecordReviewVO.ProcessInspectionLevel3VO> 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<QmsPqcTaskRecordDetails> details = pqcTaskRecordDetailsService.lambdaQuery()
.eq(QmsPqcTaskRecordDetails::getTaskId, taskId)
.list();
List<QmsPqcTaskRecordDetails> type0Details = details.stream()
.filter(d -> d.getType() != null && d.getType() == 0)
.collect(Collectors.toList());
Set<Long> itemIds = type0Details.stream()
Set<Long> 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<QmsPqcTaskRecordDetails> selfProcessDetails = details.stream()
.filter(d -> isDetailType(d, 0))
.filter(d -> isSelfInspectionLevel(itemMap.get(d.getInspectionPointItemId())))
.collect(Collectors.toList());
List<String> 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<Long, QmsPqcInspectionPointItems> itemMap,
List<String> 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<QmsPqcTaskRecordDetails> type0Details,
Map<Long, QmsPqcInspectionPointItems> itemMap,
List<String> 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<QmsPqcTaskRecordDraftQO.MaterialCollectionItem> items,
String fieldPrefix,
List<String> 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<Long> type1ItemIds = oldDetails.stream()
.filter(d -> d.getType() != null && d.getType() == 1)
Set<Long> oldItemIds = oldDetails.stream()
.map(QmsPqcTaskRecordDetails::getInspectionPointItemId)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
Map<Long, QmsPqcInspectionPointItems> oldItemMap = oldItemIds.isEmpty()
? new HashMap<>()
: pqcInspectionPointItemsService.listByIds(oldItemIds).stream()
.collect(Collectors.toMap(QmsPqcInspectionPointItems::getId, item -> item, (a, b) -> a));
// type=1 且星级1/2 的明细自检关键物料
List<QmsPqcTaskRecordDetails> selfMaterialDetails = oldDetails.stream()
.filter(d -> isDetailType(d, 1))
.filter(d -> isSelfInspectionLevel(oldItemMap.get(d.getInspectionPointItemId())))
.collect(Collectors.toList());
List<Long> selfMaterialItemIds = selfMaterialDetails.stream()
.map(QmsPqcTaskRecordDetails::getInspectionPointItemId)
.collect(Collectors.toList());
// type=0 inspectionPointItemId 列表工序检查一二级+三级按顺序
List<Long> type0ItemIds = oldDetails.stream()
.filter(d -> d.getType() != null && d.getType() == 0)
// type=1 且星级3 的明细QC关键物料
List<QmsPqcTaskRecordDetails> qcMaterialDetails = oldDetails.stream()
.filter(d -> isDetailType(d, 1))
.filter(d -> isQcInspectionLevel(oldItemMap.get(d.getInspectionPointItemId())))
.collect(Collectors.toList());
List<Long> qcMaterialItemIds = qcMaterialDetails.stream()
.map(QmsPqcTaskRecordDetails::getInspectionPointItemId)
.collect(Collectors.toList());
// type=0 且星级1/2 的明细自检/复核工序检查
List<QmsPqcTaskRecordDetails> selfProcessDetails = oldDetails.stream()
.filter(d -> isDetailType(d, 0))
.filter(d -> isSelfInspectionLevel(oldItemMap.get(d.getInspectionPointItemId())))
.collect(Collectors.toList());
List<Long> selfProcessItemIds = selfProcessDetails.stream()
.map(QmsPqcTaskRecordDetails::getInspectionPointItemId)
.collect(Collectors.toList());
// type=0 且星级3 的明细QC工序检查
List<QmsPqcTaskRecordDetails> qcProcessDetails = oldDetails.stream()
.filter(d -> isDetailType(d, 0))
.filter(d -> isQcInspectionLevel(oldItemMap.get(d.getInspectionPointItemId())))
.collect(Collectors.toList());
List<Long> 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<QmsPqcTaskRecordDetails> 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())));
}
/**
* 序列化文件列表
*/

View File

@ -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<QmsPqcInspectionPointItemListVO> materialItems = new ArrayList<>(); // 第1类关键物料拍照
List<QmsPqcInspectionPointItemListVO> selfReviewItems = new ArrayList<>(); // 第2类工序检查-自检复核
List<QmsPqcInspectionPointItemListVO> qcItems = new ArrayList<>(); // 第3类工序检查-QC检测
List<QmsPqcInspectionPointItemListVO> qcMaterialItems = new ArrayList<>(); // 第3类QC关键物料拍照
List<QmsPqcInspectionPointItemListVO> 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<QmsPqcInspectionRule> 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<DictionaryItem> stepDicItems,
String operator,
Long operatorId,
LocalDateTime now) {
List<QmsPqcInspectionPoint> existPoints = pointService.lambdaQuery()
.eq(QmsPqcInspectionPoint::getPqcRuleId, ruleId)
.list();
Map<Long, QmsPqcInspectionPoint> 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);
}
}
}

View File

@ -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;
}

View File

@ -45,6 +45,11 @@ public class QmsPqcTaskRecordDraftQO {
*/
private List<MaterialCollectionItem> materialCollections;
/**
* QC关键物料采集对象列表三级
*/
private List<MaterialCollectionItem> qcMaterialCollections;
/**
* 工序检查对象列表一二级
*/

View File

@ -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;
/**

View File

@ -12,7 +12,7 @@ public class QmsPqcInspectionPointItemsGroupedVO {
/**
* 第1类关键物料拍照类
* 包含inspectionType = 1关键物料拍照+ inspectionType = 2全部
* 包含inspectionType = 1或2且星级=1或2
*/
private List<QmsPqcInspectionPointItemListVO> materialItems;
@ -23,8 +23,14 @@ public class QmsPqcInspectionPointItemsGroupedVO {
private List<QmsPqcInspectionPointItemListVO> selfReviewItems;
/**
* 第3类工序检查-QC检测类
* 包含星级=3不区分检查类型
* 第3类QC关键物料拍照类
* 包含inspectionType = 1或2且星级=3
*/
private List<QmsPqcInspectionPointItemListVO> qcMaterialItems;
/**
* 第4类工序检查-QC检测类
* 包含inspectionType = 0或2且星级=3
*/
private List<QmsPqcInspectionPointItemListVO> qcItems;
}

View File

@ -51,6 +51,11 @@ public class QmsPqcTaskRecordReviewVO {
*/
private List<MaterialCollectionVO> materialCollections;
/**
* QC关键物料采集对象列表三级
*/
private List<MaterialCollectionVO> qcMaterialCollections;
/**
* 工序检查对象列表一二级- 复核用
*/