pqc驳回修改

This commit is contained in:
yf001217 2026-06-15 22:48:43 +08:00
parent 21b4e5b094
commit 248b6fe5a4
2 changed files with 97 additions and 45 deletions

View File

@ -276,9 +276,9 @@ public class QmsIssueTicketControllerService {
throw new NflgException(STATE.BusinessError, "只能发起PQC工单"); throw new NflgException(STATE.BusinessError, "只能发起PQC工单");
} }
// 3. 校验工单状态为待流转 // 3. 校验工单状态为待流转或处理中
if (!Objects.equals(ticket.getStatus(), (short) 0)) { if (!Objects.equals(ticket.getStatus(), (short) 0) && !Objects.equals(ticket.getStatus(), (short) 1)) {
throw new NflgException(STATE.BusinessError, "工单状态不是待流转"); throw new NflgException(STATE.BusinessError, "工单状态不是待流转或处理中");
} }
// 4. 更新工单的事故类型和备注 // 4. 更新工单的事故类型和备注
@ -298,12 +298,24 @@ public class QmsIssueTicketControllerService {
.set(QmsIssueTicketToDo::getHasProcessed, true) .set(QmsIssueTicketToDo::getHasProcessed, true)
.update(); .update();
Set<Long> redispatchableTaskResultIds = getPqcRedispatchableTaskResultIds(ticket);
// 5. 按处理人分组合并不合格项ID // 5. 按处理人分组合并不合格项ID
Map<Long, List<String>> userTaskMap = new LinkedHashMap<>(); Map<Long, List<String>> userTaskMap = new LinkedHashMap<>();
for (QmsPqcTicketDispatchQO.AssigneeItem item : request.getAssignees()) { for (QmsPqcTicketDispatchQO.AssigneeItem item : request.getAssignees()) {
userTaskMap.computeIfAbsent(item.getUserId(), k -> new ArrayList<>()) List<String> taskResultIds = Arrays.stream(item.getTaskResultIds().split(","))
.add(item.getTaskResultIds()); .filter(StrUtil::isNotBlank)
.map(String::trim)
.filter(taskResultId -> redispatchableTaskResultIds.contains(Long.valueOf(taskResultId)))
.distinct()
.collect(Collectors.toList());
if (taskResultIds.isEmpty()) {
continue;
} }
userTaskMap.computeIfAbsent(item.getUserId(), k -> new ArrayList<>())
.addAll(taskResultIds);
}
VUtil.trueThrowBusinessError(userTaskMap.isEmpty()).throwMessage("请选择未分派或已驳回的不合格项");
// 6. 批量查询处理人信息 // 6. 批量查询处理人信息
List<Long> userIds = new ArrayList<>(userTaskMap.keySet()); List<Long> userIds = new ArrayList<>(userTaskMap.keySet());
@ -349,6 +361,40 @@ public class QmsIssueTicketControllerService {
.update(); .update();
} }
private Set<Long> getPqcRedispatchableTaskResultIds(QmsIssueTicket ticket) {
List<QmsPqcTaskRecordDetails> allUnqualified = pqcTaskRecordDetailsService.lambdaQuery()
.eq(QmsPqcTaskRecordDetails::getTaskId, ticket.getSourceId())
.eq(QmsPqcTaskRecordDetails::getReviewEnable, false)
.list();
Set<Long> allUnqualifiedIds = allUnqualified.stream()
.map(QmsPqcTaskRecordDetails::getId)
.collect(Collectors.toSet());
if (allUnqualifiedIds.isEmpty()) {
return Collections.emptySet();
}
List<QmsIssueTicketProcess> processes = issueTicketProcessService.lambdaQuery()
.eq(QmsIssueTicketProcess::getIssueTicketId, ticket.getId())
.list();
Set<Long> effectivelyDispatched = new HashSet<>();
for (QmsIssueTicketProcess p : processes) {
if (StrUtil.isBlank(p.getTaskResultIds())) {
continue;
}
if (Objects.equals(p.getApprovalStatus(), (short) 1)) {
continue;
}
Arrays.stream(p.getTaskResultIds().split(","))
.filter(StrUtil::isNotBlank)
.map(String::trim)
.map(Long::valueOf)
.forEach(effectivelyDispatched::add);
}
allUnqualifiedIds.removeAll(effectivelyDispatched);
return allUnqualifiedIds;
}
/** /**
* 巡检工单分派支持多人 * 巡检工单分派支持多人
* 1. 校验工单存在且来源类型为巡检sourceType=2 * 1. 校验工单存在且来源类型为巡检sourceType=2
@ -2736,10 +2782,10 @@ public class QmsIssueTicketControllerService {
// 8. 设置权限字段 // 8. 设置权限字段
if (isCreator) { if (isCreator) {
// 创建人 // 创建人
// - isDispatch=true状态=0或1 // - isDispatch=true存在未有效分派的不合格项
// - isReview=true状态=2时 // - isReview=true状态=2时
// - isEdit=false创建人无编辑权限 // - isEdit=false创建人无编辑权限
vo.setIsDispatch(ticket.getStatus() != null && (ticket.getStatus() == 0 || ticket.getStatus() == 1)); vo.setIsDispatch(hasPqcUndispatchedOrRejectedItems(ticket, processes));
vo.setIsReview(ticket.getStatus() != null && ticket.getStatus() == 2); vo.setIsReview(ticket.getStatus() != null && ticket.getStatus() == 2);
vo.setIsEdit(false); vo.setIsEdit(false);
vo.setIsShut(ticket.getStatus() != null && ticket.getStatus() == 2); vo.setIsShut(ticket.getStatus() != null && ticket.getStatus() == 2);
@ -2763,6 +2809,38 @@ public class QmsIssueTicketControllerService {
return vo; return vo;
} }
private boolean hasPqcUndispatchedOrRejectedItems(QmsIssueTicket ticket, List<QmsIssueTicketProcess> processes) {
if (ticket.getStatus() == null || (ticket.getStatus() != 0 && ticket.getStatus() != 1)) {
return false;
}
List<QmsPqcTaskRecordDetails> allUnqualified = pqcTaskRecordDetailsService.lambdaQuery()
.eq(QmsPqcTaskRecordDetails::getTaskId, ticket.getSourceId())
.eq(QmsPqcTaskRecordDetails::getReviewEnable, false)
.list();
Set<Long> allUnqualifiedIds = allUnqualified.stream()
.map(QmsPqcTaskRecordDetails::getId)
.collect(Collectors.toSet());
if (allUnqualifiedIds.isEmpty()) {
return false;
}
Set<Long> effectivelyDispatched = new HashSet<>();
for (QmsIssueTicketProcess p : processes) {
if (StrUtil.isBlank(p.getTaskResultIds())) {
continue;
}
if (Objects.equals(p.getApprovalStatus(), (short) 1)) {
continue;
}
Arrays.stream(p.getTaskResultIds().split(","))
.filter(StrUtil::isNotBlank)
.map(String::trim)
.map(Long::valueOf)
.forEach(effectivelyDispatched::add);
}
return !effectivelyDispatched.containsAll(allUnqualifiedIds);
}
/** /**
* 解析文件列表 * 解析文件列表
*/ */

View File

@ -581,11 +581,9 @@ public class QmsIssueTicketProcessControllerService {
// 3. 根据审批状态处理 // 3. 根据审批状态处理
if (approvalStatus == 1) { if (approvalStatus == 1) {
boolean allHandlersRejected = isAllPqcHandlersRejected(ticket.getId());
if (allHandlersRejected) {
issueTicketService.lambdaUpdate() issueTicketService.lambdaUpdate()
.eq(QmsIssueTicket::getId, ticket.getId()) .eq(QmsIssueTicket::getId, ticket.getId())
.set(QmsIssueTicket::getStatus, (short) 0) .set(QmsIssueTicket::getStatus, (short) 1)
.set(QmsIssueTicket::getUpdateUserId, currentUserId) .set(QmsIssueTicket::getUpdateUserId, currentUserId)
.set(QmsIssueTicket::getUpdateUserName, currentUserName) .set(QmsIssueTicket::getUpdateUserName, currentUserName)
.set(QmsIssueTicket::getUpdateTime, now) .set(QmsIssueTicket::getUpdateTime, now)
@ -593,9 +591,10 @@ public class QmsIssueTicketProcessControllerService {
QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo() QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo()
.setTicketId(ticket.getId()) .setTicketId(ticket.getId())
.setHandlerUserId(ticket.getCreateUserId()); .setHandlerUserId(ticket.getCreateUserId())
.setHasProcessed(false)
.setIsRead(false);
issueTicketToDoService.save(todoItem); issueTicketToDoService.save(todoItem);
}
} else if (approvalStatus == 0) { } else if (approvalStatus == 0) {
// 通过校验措施临时措施或永久措施至少填一个 // 通过校验措施临时措施或永久措施至少填一个
boolean hasMeasures = checkPqcMeasures(process.getId()); boolean hasMeasures = checkPqcMeasures(process.getId());
@ -686,29 +685,4 @@ public class QmsIssueTicketProcessControllerService {
.anyMatch(p -> p.getApprovalTime() != null || currentUserId.equals(p.getHandlerUserId()))); .anyMatch(p -> p.getApprovalTime() != null || currentUserId.equals(p.getHandlerUserId())));
} }
private boolean isAllPqcHandlersRejected(Long ticketId) {
List<QmsIssueTicketProcess> processes = issueTicketProcessService.lambdaQuery()
.eq(QmsIssueTicketProcess::getIssueTicketId, ticketId)
.list();
List<QmsIssueTicketProcess> dispatchedProcesses = processes.stream()
.filter(p -> StrUtil.isNotBlank(p.getTaskResultIds()))
.toList();
List<QmsIssueTicketProcess> effectiveProcesses = dispatchedProcesses.isEmpty()
? processes
: dispatchedProcesses;
Map<Long, List<QmsIssueTicketProcess>> processMap = effectiveProcesses.stream()
.filter(p -> p.getHandlerUserId() != null)
.collect(Collectors.groupingBy(QmsIssueTicketProcess::getHandlerUserId));
if (processMap.isEmpty()) {
return false;
}
return processMap
.values()
.stream()
.allMatch(list -> list.stream()
.anyMatch(p -> Objects.equals(p.getApprovalStatus(), (short) 1)));
}
} }