pqc工单方法修改

This commit is contained in:
yf001217 2026-06-11 19:39:20 +08:00
parent e604735ecb
commit 5a5e96f8ec
3 changed files with 205 additions and 8 deletions

View File

@ -162,7 +162,7 @@ public class QmsIssueTicketController extends BaseController {
/**
* 查询PQC工单详情本人相关
* 校验当前登录人在处理记录中为处理人仅返回相关的处理记录及措施
* 创建人可查看全部问题明细和措施处理人仅查看分配给自己的问题明细和措施
*/
@GetMapping("detail/my-pqc-ticket")
public ApiResult<QmsPqcTicketMyDetailVO> myPqcTicketDetail(@NotNull(message = "ID不能为空") Long id) {

View File

@ -566,7 +566,7 @@ public class QmsIssueTicketControllerService {
.setIncidentDescription(incidentDescription)
.setRemark(request.getRemark())
.setUnqualifiedQty(unqualifiedDetails.size())
.setStatus((short) 0)
.setStatus((short) 1)
.setCreateUserId(userId)
.setCreateUserName(userName)
.setCreateTime(now)
@ -1862,7 +1862,32 @@ public class QmsIssueTicketControllerService {
// 判断是否为工单创建者
boolean isCreator = ticket.getCreateUserId() != null && ticket.getCreateUserId().equals(currentUserId);
List<QmsIssueTicketProcess> processes;
List<QmsIssueTicketProcess> processes = new ArrayList<>();
if (CollectionUtil.isNotEmpty(processes)) {
Long temporaryTypeId = dictionaryItemService.getId("工单解决措施", "临时纠正措施");
Long permanentTypeId = dictionaryItemService.getId("工单解决措施", "永久纠正措施");
List<Long> processIds = processes.stream()
.map(QmsIssueTicketProcess::getId)
.filter(Objects::nonNull)
.collect(Collectors.toList());
if (temporaryTypeId != null && CollectionUtil.isNotEmpty(processIds)) {
List<QmsIssueTicketProcessMeasure> temporaryMeasures = issueTicketProcessMeasureService.lambdaQuery()
.in(QmsIssueTicketProcessMeasure::getIssueTicketProcessId, processIds)
.eq(QmsIssueTicketProcessMeasure::getMeasureTypeId, temporaryTypeId)
.list();
convertToMeasureVO(temporaryMeasures);
}
if (permanentTypeId != null && CollectionUtil.isNotEmpty(processIds)) {
List<QmsIssueTicketProcessMeasure> permanentMeasures = issueTicketProcessMeasureService.lambdaQuery()
.in(QmsIssueTicketProcessMeasure::getIssueTicketProcessId, processIds)
.eq(QmsIssueTicketProcessMeasure::getMeasureTypeId, permanentTypeId)
.list();
convertToMeasureVO(permanentMeasures);
}
}
if (isCreator) {
// 工单创建者返回全部处理记录
processes = issueTicketProcessService.lambdaQuery()
@ -2331,12 +2356,17 @@ public class QmsIssueTicketControllerService {
// 6. 查询问题详情不合格项
List<QmsPqcTicketMyDetailVO.PqcIssueDetailVO> issueDetails = new ArrayList<>();
// 查询当前登录人的处理记录
QmsIssueTicketProcess process = issueTicketProcessService.lambdaQuery()
List<QmsIssueTicketProcess> processes = isCreator
? issueTicketProcessService.lambdaQuery()
.eq(QmsIssueTicketProcess::getIssueTicketId, id)
.list()
: issueTicketProcessService.lambdaQuery()
.eq(QmsIssueTicketProcess::getIssueTicketId, id)
.eq(QmsIssueTicketProcess::getHandlerUserId, currentUserId)
.one();
.list();
// 查询当前登录人的处理记录
QmsIssueTicketProcess process = CollectionUtil.isEmpty(processes) ? null : processes.get(0);
if (process != null && StrUtil.isNotBlank(process.getTaskResultIds())) {
// 解析不合格项ID
@ -2460,7 +2490,31 @@ public class QmsIssueTicketControllerService {
}
}
}
vo.setIssueDetails(issueDetails);
vo.setIssueDetails(buildPqcIssueDetails(processes));
if (CollectionUtil.isNotEmpty(processes)) {
Long temporaryTypeIdAll = dictionaryItemService.getId("工单解决措施", "临时纠正措施");
Long permanentTypeIdAll = dictionaryItemService.getId("工单解决措施", "永久纠正措施");
List<Long> processIdsAll = processes.stream()
.map(QmsIssueTicketProcess::getId)
.filter(Objects::nonNull)
.collect(Collectors.toList());
if (temporaryTypeIdAll != null && CollectionUtil.isNotEmpty(processIdsAll)) {
List<QmsIssueTicketProcessMeasure> temporaryMeasuresAll = issueTicketProcessMeasureService.lambdaQuery()
.in(QmsIssueTicketProcessMeasure::getIssueTicketProcessId, processIdsAll)
.eq(QmsIssueTicketProcessMeasure::getMeasureTypeId, temporaryTypeIdAll)
.list();
vo.setTemporaryMeasures(convertToMeasureVO(temporaryMeasuresAll));
}
if (permanentTypeIdAll != null && CollectionUtil.isNotEmpty(processIdsAll)) {
List<QmsIssueTicketProcessMeasure> permanentMeasuresAll = issueTicketProcessMeasureService.lambdaQuery()
.in(QmsIssueTicketProcessMeasure::getIssueTicketProcessId, processIdsAll)
.eq(QmsIssueTicketProcessMeasure::getMeasureTypeId, permanentTypeIdAll)
.list();
vo.setPermanentMeasures(convertToMeasureVO(permanentMeasuresAll));
}
}
// 7. 查询措施列表
if (process != null) {
@ -2514,6 +2568,137 @@ public class QmsIssueTicketControllerService {
/**
* 解析文件列表
*/
private List<QmsPqcTicketMyDetailVO.PqcIssueDetailVO> buildPqcIssueDetails(List<QmsIssueTicketProcess> processes) {
if (CollectionUtil.isEmpty(processes)) {
return new ArrayList<>();
}
List<Long> orderedTaskResultIds = new ArrayList<>();
Map<Long, QmsIssueTicketProcess> taskResultProcessMap = new LinkedHashMap<>();
for (QmsIssueTicketProcess process : processes) {
for (Long taskResultId : parseTaskResultIds(process.getTaskResultIds())) {
orderedTaskResultIds.add(taskResultId);
taskResultProcessMap.putIfAbsent(taskResultId, process);
}
}
if (CollectionUtil.isEmpty(orderedTaskResultIds)) {
return new ArrayList<>();
}
List<QmsPqcTaskRecordDetails> details = pqcTaskRecordDetailsService.lambdaQuery()
.in(QmsPqcTaskRecordDetails::getId, orderedTaskResultIds)
.list();
if (CollectionUtil.isEmpty(details)) {
return new ArrayList<>();
}
Map<Long, Integer> sortIndexMap = new HashMap<>();
for (int i = 0; i < orderedTaskResultIds.size(); i++) {
sortIndexMap.putIfAbsent(orderedTaskResultIds.get(i), i);
}
details.sort(Comparator.comparingInt(detail -> sortIndexMap.getOrDefault(detail.getId(), Integer.MAX_VALUE)));
Set<Long> itemIds = details.stream()
.map(QmsPqcTaskRecordDetails::getInspectionPointItemId)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
Map<Long, QmsPqcInspectionPointItems> itemMap = new HashMap<>();
if (CollectionUtil.isNotEmpty(itemIds)) {
itemMap = pqcInspectionPointItemsService.listByIds(itemIds).stream()
.collect(Collectors.toMap(QmsPqcInspectionPointItems::getId, item -> item, (a, b) -> a));
}
Set<Long> taskIds = details.stream()
.map(QmsPqcTaskRecordDetails::getTaskId)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
Map<Long, QmsPqcTaskRecord> taskMap = new HashMap<>();
Map<Long, QmsPqcInspectionPoint> pointMap = new HashMap<>();
if (CollectionUtil.isNotEmpty(taskIds)) {
List<QmsPqcTaskRecord> tasks = pqcTaskRecordService.listByIds(taskIds);
taskMap = tasks.stream()
.collect(Collectors.toMap(QmsPqcTaskRecord::getId, task -> task, (a, b) -> a));
Set<Long> inspectionPointIds = tasks.stream()
.map(QmsPqcTaskRecord::getInspectionPointId)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
if (CollectionUtil.isNotEmpty(inspectionPointIds)) {
pointMap = pqcInspectionPointService.listByIds(inspectionPointIds).stream()
.collect(Collectors.toMap(QmsPqcInspectionPoint::getId, point -> point, (a, b) -> a));
}
}
Set<Long> allFileIds = new HashSet<>();
details.forEach(detail -> {
collectFileIds(detail.getSelfTestAttachments(), allFileIds);
collectFileIds(detail.getQcTestAttachments(), allFileIds);
});
Map<Long, FileUploadRecord> fileMap = new HashMap<>();
if (CollectionUtil.isNotEmpty(allFileIds)) {
fileMap = fileUploadRecordService.lambdaQuery()
.in(FileUploadRecord::getId, allFileIds)
.list()
.stream()
.collect(Collectors.toMap(FileUploadRecord::getId, file -> file, (a, b) -> a));
}
List<QmsPqcTicketMyDetailVO.PqcIssueDetailVO> issueDetails = new ArrayList<>();
for (QmsPqcTaskRecordDetails detail : details) {
QmsPqcTicketMyDetailVO.PqcIssueDetailVO issueVO = new QmsPqcTicketMyDetailVO.PqcIssueDetailVO();
issueVO.setTaskResultId(detail.getId());
QmsPqcInspectionPointItems item = itemMap.get(detail.getInspectionPointItemId());
if (item != null) {
issueVO.setInspectionContent(item.getInspectionContent());
issueVO.setInspectionLevel(item.getInspectionLevel() != null ? item.getInspectionLevel().shortValue() : null);
issueVO.setInspectionExampleImage(item.getInspectionImgUrl());
}
QmsPqcTaskRecord task = taskMap.get(detail.getTaskId());
if (task != null) {
QmsPqcInspectionPoint point = pointMap.get(task.getInspectionPointId());
if (point != null) {
issueVO.setInspectionPointName(point.getInspectionPointName());
}
issueVO.setInspectorId(task.getSelfTesterId());
issueVO.setInspectorName(task.getSelfTesterName());
issueVO.setInspectionTime(task.getCompleteTime());
issueVO.setInspectionResult(task.getEnable());
}
issueVO.setSelfTestData(detail.getSelfTestData());
issueVO.setQcTestData(detail.getQcTestData());
issueVO.setReviewOpinion(detail.getReviewOpinion());
issueVO.setSelfTestFiles(parseFileList(detail.getSelfTestAttachments(), fileMap));
issueVO.setQcTestFiles(parseFileList(detail.getQcTestAttachments(), fileMap));
QmsIssueTicketProcess process = taskResultProcessMap.get(detail.getId());
if (process != null) {
issueVO.setHandlerUserId(process.getHandlerUserId());
issueVO.setHandlerUserName(process.getHandlerUserName());
issueVO.setProcessTime(process.getApprovalTime());
issueVO.setProcessStatus(process.getApprovalStatus());
issueVO.setProcessRemark(process.getApprovalOpinion());
}
issueDetails.add(issueVO);
}
return issueDetails;
}
private List<Long> parseTaskResultIds(String taskResultIds) {
if (StrUtil.isBlank(taskResultIds)) {
return Collections.emptyList();
}
return Arrays.stream(taskResultIds.split(","))
.filter(StrUtil::isNotBlank)
.map(String::trim)
.map(Long::valueOf)
.distinct()
.collect(Collectors.toList());
}
private List<QmsPqcTicketMyDetailVO.FileDetailVO> parseFileList(String fileIdsStr, Map<Long, FileUploadRecord> fileMap) {
if (StrUtil.isBlank(fileIdsStr)) {
return new ArrayList<>();

View File

@ -58,6 +58,8 @@ public class QmsIssueTicketProcessControllerService {
*/
public void add(QmsIssueTicketProcessAddQO request) {
Long currentUserId = UserUtil.getUserId();
String currentUserName = UserUtil.getUserName();
LocalDateTime now = LocalDateTime.now();
// 校验不能分配给自己
boolean containsSelf = request.getHandlers().stream()
@ -88,6 +90,16 @@ public class QmsIssueTicketProcessControllerService {
for (Map.Entry<Long, List<Long>> entry : handlerToResultsMap.entrySet()) {
doAdd(request.getIssueTicketId(), entry.getKey(), entry.getValue());
}
if (Objects.equals(ticket.getSourceType(), (short) 3) && !Objects.equals(ticket.getStatus(), (short) 1)) {
issueTicketService.lambdaUpdate()
.eq(QmsIssueTicket::getId, ticket.getId())
.set(QmsIssueTicket::getStatus, (short) 1)
.set(QmsIssueTicket::getUpdateUserId, currentUserId)
.set(QmsIssueTicket::getUpdateUserName, currentUserName)
.set(QmsIssueTicket::getUpdateTime, now)
.update();
}
}
/**