pqc驳回修改
This commit is contained in:
parent
21b4e5b094
commit
248b6fe5a4
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 解析文件列表
|
* 解析文件列表
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -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)));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue