feat(qms): 新增PQC工单分派及详情查看功能
- 增加接口支持发起PQC工单,更新工单状态为处理中并分配处理人推送待办 - 实现按处理人分组合并不合格项并创建处理记录及待办消息 - 新增查询本人相关PQC工单详情接口,仅返回本人相关处理记录和措施 - 完善PQC工单处理流程,支持处理人提交审批及措施填写校验 - 添加PQC工单结束处理判断,最后一人提交时更新工单状态为已完成 - 新增文件及措施信息的解析和转换辅助方法,丰富详情数据展示 - 新增PQC任务及任务详情相关实体、接口及实现,支持任务管理功能 - 新增PQC任务相关Controller接口,包括查询、暂存和提交功能 - 优化PQC工单流程中的权限校验和异常处理,保障业务流程合理性
This commit is contained in:
parent
3b782f471f
commit
e69f212359
|
|
@ -244,11 +244,10 @@ public class QmsIssueTicketControllerService {
|
|||
|
||||
// 创建处理记录
|
||||
QmsIssueTicketProcess process = new QmsIssueTicketProcess()
|
||||
.setTicketId(ticket.getId())
|
||||
.setIssueTicketId(ticket.getId())
|
||||
.setHandlerUserId(userId)
|
||||
.setHandlerUserName(user.getUserName())
|
||||
.setTaskResultIds(taskResultIdsStr)
|
||||
.setCreateTime(now);
|
||||
.setTaskResultIds(taskResultIdsStr);
|
||||
issueTicketProcessService.save(process);
|
||||
|
||||
// 推送待办消息
|
||||
|
|
@ -375,10 +374,6 @@ public class QmsIssueTicketControllerService {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Resource
|
||||
private IQmsIssueTicketProcessService issueTicketProcessService;
|
||||
|
||||
@Resource
|
||||
private IQmsIssueTicketProcessMeasureService issueTicketProcessMeasureService;
|
||||
|
||||
|
|
@ -2036,11 +2031,11 @@ public class QmsIssueTicketControllerService {
|
|||
vo.setCreateUserName(ticket.getCreateUserName());
|
||||
|
||||
// 5. 解析工单图片
|
||||
if (StrUtil.isNotBlank(ticket.getImages())) {
|
||||
List<Long> imageIds = Arrays.stream(ticket.getImages().split(","))
|
||||
if (StrUtil.isNotBlank(ticket.getImageIds())) {
|
||||
List<Long> imageIds = Arrays.stream(ticket.getImageIds().split(","))
|
||||
.filter(StrUtil::isNotBlank)
|
||||
.map(String::trim)
|
||||
.map(Long::valueOf)
|
||||
.map(s -> Long.valueOf(s))
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
List<FileUploadRecord> fileRecords = fileUploadRecordService.lambdaQuery()
|
||||
|
|
@ -2150,7 +2145,7 @@ public class QmsIssueTicketControllerService {
|
|||
QmsPqcInspectionPointItems item = itemMap.get(detail.getInspectionPointItemId());
|
||||
if (item != null) {
|
||||
issueVO.setInspectionContent(item.getInspectionContent());
|
||||
issueVO.setInspectionLevel(item.getInspectionLevel());
|
||||
issueVO.setInspectionLevel(item.getInspectionLevel() != null ? item.getInspectionLevel().shortValue() : null);
|
||||
issueVO.setInspectionExampleImage(item.getInspectionImgUrl());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -472,7 +472,7 @@ public class QmsIssueTicketProcessControllerService {
|
|||
long temporaryCount = 0;
|
||||
if (temporaryTypeId != null) {
|
||||
temporaryCount = issueTicketProcessMeasureService.lambdaQuery()
|
||||
.eq(QmsIssueTicketProcessMeasure::getProcessId, processId)
|
||||
.eq(QmsIssueTicketProcessMeasure::getIssueTicketProcessId, processId)
|
||||
.eq(QmsIssueTicketProcessMeasure::getMeasureTypeId, temporaryTypeId)
|
||||
.count();
|
||||
}
|
||||
|
|
@ -482,7 +482,7 @@ public class QmsIssueTicketProcessControllerService {
|
|||
long permanentCount = 0;
|
||||
if (permanentTypeId != null) {
|
||||
permanentCount = issueTicketProcessMeasureService.lambdaQuery()
|
||||
.eq(QmsIssueTicketProcessMeasure::getProcessId, processId)
|
||||
.eq(QmsIssueTicketProcessMeasure::getIssueTicketProcessId, processId)
|
||||
.eq(QmsIssueTicketProcessMeasure::getMeasureTypeId, permanentTypeId)
|
||||
.count();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ public class QmsPqcTaskRecordControllerService {
|
|||
.throwMessage("未找到机型[" + modelNo + "]的检验规则");
|
||||
|
||||
// 2. 生成任务编号(单号生成ID=42)
|
||||
String taskNo = basdeSerialNumberControllerService.getSerialNumber(42L);
|
||||
String taskNo = basdeSerialNumberControllerService.generateSerialNumber(42);
|
||||
|
||||
// 3. 创建任务记录
|
||||
QmsPqcTaskRecord taskRecord = new QmsPqcTaskRecord()
|
||||
|
|
@ -235,7 +235,12 @@ public class QmsPqcTaskRecordControllerService {
|
|||
}
|
||||
}
|
||||
|
||||
return PageData.restPage(page.getCurrent(), page.getSize(), page.getTotal(), voList);
|
||||
PageData<QmsPqcTaskRecordPageVO> pageData = new PageData<>();
|
||||
pageData.setPage((int) page.getCurrent());
|
||||
pageData.setPageSize((int) page.getSize());
|
||||
pageData.setTotal((int) page.getTotal());
|
||||
pageData.setItems(voList);
|
||||
return pageData;
|
||||
}
|
||||
|
||||
// 其他5个功能将在后续实现...
|
||||
|
|
@ -283,7 +288,8 @@ public class QmsPqcTaskRecordControllerService {
|
|||
QmsPqcTaskRecordDetailVO.MaterialCollectionVO materialVO = new QmsPqcTaskRecordDetailVO.MaterialCollectionVO();
|
||||
materialVO.setSerialNo(detail.getSelfTestData());
|
||||
materialVO.setBatchNo(detail.getReviewData());
|
||||
materialVO.setFiles(parseFileList(detail.getSelfTestAttachments()));
|
||||
materialVO.setFiles(convertToFileVO(parseFileList(detail.getSelfTestAttachments()),
|
||||
QmsPqcTaskRecordDetailVO.FileDetailVO.class));
|
||||
materialVO.setCollector(taskRecord.getSelfTesterName());
|
||||
materialVO.setCollectionTime(detail.getSelfTestUploadTime());
|
||||
materialCollections.add(materialVO);
|
||||
|
|
@ -297,8 +303,10 @@ public class QmsPqcTaskRecordControllerService {
|
|||
processVO.setSelfTestData(detail.getSelfTestData());
|
||||
processVO.setReviewData(detail.getReviewData());
|
||||
processVO.setEnable(detail.getReviewEnable());
|
||||
processVO.setSelfTestFiles(parseFileList(detail.getSelfTestAttachments()));
|
||||
processVO.setReviewFiles(parseFileList(detail.getReviewAttachments()));
|
||||
processVO.setSelfTestFiles(convertToFileVO(parseFileList(detail.getSelfTestAttachments()),
|
||||
QmsPqcTaskRecordDetailVO.FileDetailVO.class));
|
||||
processVO.setReviewFiles(convertToFileVO(parseFileList(detail.getReviewAttachments()),
|
||||
QmsPqcTaskRecordDetailVO.FileDetailVO.class));
|
||||
processVO.setReviewOpinion(detail.getReviewOpinion());
|
||||
processInspections.add(processVO);
|
||||
}
|
||||
|
|
@ -374,7 +382,8 @@ public class QmsPqcTaskRecordControllerService {
|
|||
QmsPqcTaskRecordRepairSelfVO.MaterialCollectionVO materialVO = new QmsPqcTaskRecordRepairSelfVO.MaterialCollectionVO();
|
||||
materialVO.setSerialNo(detail.getSelfTestData());
|
||||
materialVO.setBatchNo(detail.getReviewData());
|
||||
materialVO.setFiles(parseFileList(detail.getSelfTestAttachments()));
|
||||
materialVO.setFiles(convertToFileVO(parseFileList(detail.getSelfTestAttachments()),
|
||||
QmsPqcTaskRecordRepairSelfVO.FileDetailVO.class));
|
||||
materialVO.setCollector(taskRecord.getSelfTesterName());
|
||||
materialVO.setCollectionTime(detail.getSelfTestUploadTime());
|
||||
materialCollections.add(materialVO);
|
||||
|
|
@ -386,7 +395,8 @@ public class QmsPqcTaskRecordControllerService {
|
|||
processVO.setInspectionLevel(item.getInspectionLevel());
|
||||
processVO.setInspectionExampleImage(item.getInspectionImgUrl());
|
||||
processVO.setSelfTestData(detail.getSelfTestData());
|
||||
processVO.setSelfTestFiles(parseFileList(detail.getSelfTestAttachments()));
|
||||
processVO.setSelfTestFiles(convertToFileVO(parseFileList(detail.getSelfTestAttachments()),
|
||||
QmsPqcTaskRecordRepairSelfVO.FileDetailVO.class));
|
||||
processInspections.add(processVO);
|
||||
}
|
||||
}
|
||||
|
|
@ -462,7 +472,8 @@ public class QmsPqcTaskRecordControllerService {
|
|||
QmsPqcTaskRecordReviewVO.MaterialCollectionVO materialVO = new QmsPqcTaskRecordReviewVO.MaterialCollectionVO();
|
||||
materialVO.setSerialNo(detail.getSelfTestData());
|
||||
materialVO.setBatchNo(detail.getReviewData());
|
||||
materialVO.setFiles(parseFileList(detail.getSelfTestAttachments()));
|
||||
materialVO.setFiles(convertToFileVO(parseFileList(detail.getSelfTestAttachments()),
|
||||
QmsPqcTaskRecordReviewVO.FileDetailVO.class));
|
||||
materialVO.setCollector(taskRecord.getSelfTesterName());
|
||||
materialVO.setCollectionTime(detail.getSelfTestUploadTime());
|
||||
materialCollections.add(materialVO);
|
||||
|
|
@ -478,8 +489,10 @@ public class QmsPqcTaskRecordControllerService {
|
|||
processVO.setSelfTestData(detail.getSelfTestData());
|
||||
processVO.setReviewData(detail.getReviewData());
|
||||
processVO.setEnable(detail.getReviewEnable());
|
||||
processVO.setSelfTestFiles(parseFileList(detail.getSelfTestAttachments()));
|
||||
processVO.setReviewFiles(parseFileList(detail.getReviewAttachments()));
|
||||
processVO.setSelfTestFiles(convertToFileVO(parseFileList(detail.getSelfTestAttachments()),
|
||||
QmsPqcTaskRecordReviewVO.FileDetailVO.class));
|
||||
processVO.setReviewFiles(convertToFileVO(parseFileList(detail.getReviewAttachments()),
|
||||
QmsPqcTaskRecordReviewVO.FileDetailVO.class));
|
||||
processVO.setReviewOpinion(detail.getReviewOpinion());
|
||||
processInspections.add(processVO);
|
||||
} else if (item.getInspectionLevel() != null && item.getInspectionLevel() == 3) {
|
||||
|
|
@ -491,7 +504,8 @@ public class QmsPqcTaskRecordControllerService {
|
|||
processVO.setInspectionExampleImage(item.getInspectionImgUrl());
|
||||
processVO.setQcTestData(detail.getQcTestData());
|
||||
processVO.setEnable(detail.getReviewEnable());
|
||||
processVO.setQcTestFiles(parseFileList(detail.getQcTestAttachments()));
|
||||
processVO.setQcTestFiles(convertToFileVO(parseFileList(detail.getQcTestAttachments()),
|
||||
QmsPqcTaskRecordReviewVO.FileDetailVO.class));
|
||||
processInspectionsLevel3.add(processVO);
|
||||
}
|
||||
}
|
||||
|
|
@ -518,7 +532,7 @@ public class QmsPqcTaskRecordControllerService {
|
|||
/**
|
||||
* 解析文件列表
|
||||
*/
|
||||
private List<QmsPqcTaskRecordDetailVO.FileDetailVO> parseFileList(String fileIdsStr) {
|
||||
private List<CommonFileDetailVO> parseFileList(String fileIdsStr) {
|
||||
if (StrUtil.isBlank(fileIdsStr)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
|
@ -526,7 +540,7 @@ public class QmsPqcTaskRecordControllerService {
|
|||
Set<Long> fileIds = Arrays.stream(fileIdsStr.split(","))
|
||||
.filter(StrUtil::isNotBlank)
|
||||
.map(String::trim)
|
||||
.map(Long::valueOf)
|
||||
.map(s -> Long.valueOf(s))
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
if (fileIds.isEmpty()) {
|
||||
|
|
@ -543,11 +557,11 @@ public class QmsPqcTaskRecordControllerService {
|
|||
return Arrays.stream(fileIdsStr.split(","))
|
||||
.filter(StrUtil::isNotBlank)
|
||||
.map(String::trim)
|
||||
.map(Long::valueOf)
|
||||
.map(s -> Long.valueOf(s))
|
||||
.map(fileMap::get)
|
||||
.filter(Objects::nonNull)
|
||||
.map(record -> {
|
||||
QmsPqcTaskRecordDetailVO.FileDetailVO fileVO = new QmsPqcTaskRecordDetailVO.FileDetailVO();
|
||||
CommonFileDetailVO fileVO = new CommonFileDetailVO();
|
||||
fileVO.setId(record.getId());
|
||||
fileVO.setFileName(record.getFileName());
|
||||
fileVO.setFileType(record.getFileType());
|
||||
|
|
@ -557,6 +571,28 @@ public class QmsPqcTaskRecordControllerService {
|
|||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 转换文件列表到指定VO类型
|
||||
*/
|
||||
private <T> List<T> convertToFileVO(List<CommonFileDetailVO> sourceList, Class<T> targetClass) {
|
||||
if (sourceList == null || sourceList.isEmpty()) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
return sourceList.stream()
|
||||
.map(source -> {
|
||||
try {
|
||||
T target = targetClass.getDeclaredConstructor().newInstance();
|
||||
org.springframework.beans.BeanUtils.copyProperties(source, target);
|
||||
return target;
|
||||
} catch (Exception e) {
|
||||
return null;
|
||||
}
|
||||
})
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 6. 暂存
|
||||
*/
|
||||
|
|
@ -830,7 +866,7 @@ public class QmsPqcTaskRecordControllerService {
|
|||
private String handleUnqualifiedTask(QmsPqcTaskRecord taskRecord, QmsPqcTaskRecordDraftQO request,
|
||||
Long currentUserId, String currentUserName, LocalDateTime now) {
|
||||
// 1. 生成工单(状态为0待流转)
|
||||
String ticketNo = basdeSerialNumberControllerService.getSerialNumber(41L);
|
||||
String ticketNo = basdeSerialNumberControllerService.generateSerialNumber(41);
|
||||
QmsPqcInspectionPoint point = pqcInspectionPointService.getById(taskRecord.getInspectionPointId());
|
||||
String stepName = point != null ? point.getStepName() : "";
|
||||
String inspectionPointName = point != null ? point.getInspectionPointName() : "";
|
||||
|
|
|
|||
|
|
@ -0,0 +1,29 @@
|
|||
package com.nflg.wms.common.pojo.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 通用文件详情VO
|
||||
*/
|
||||
@Data
|
||||
public class CommonFileDetailVO {
|
||||
/**
|
||||
* 上传的id
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 文件名
|
||||
*/
|
||||
private String fileName;
|
||||
|
||||
/**
|
||||
* 文件类型
|
||||
*/
|
||||
private String fileType;
|
||||
|
||||
/**
|
||||
* URL
|
||||
*/
|
||||
private String url;
|
||||
}
|
||||
Loading…
Reference in New Issue