Merge remote-tracking branch '惠信/qms/develop' into qms/develop
This commit is contained in:
commit
243690b61a
|
|
@ -70,9 +70,6 @@ public class QmsIssueTicketControllerService {
|
|||
@Resource
|
||||
private IQmsPdiInspectionResultsService pdiInspectionResultsService;
|
||||
|
||||
@Resource
|
||||
private IQmsPdiInspectionResultsLoadingImageService pdiInspectionResultsLoadingImageService;
|
||||
|
||||
@Resource
|
||||
private IQmsPdiDetectionRulesStatusItemService pdiStatusItemService;
|
||||
|
||||
|
|
@ -2056,11 +2053,15 @@ public class QmsIssueTicketControllerService {
|
|||
.eq(QmsIssueTicketProcess::getIssueTicketId, id)
|
||||
.list();
|
||||
} else {
|
||||
// 非创建者:仅返回自己作为处理人的记录
|
||||
processes = issueTicketProcessService.lambdaQuery()
|
||||
// 非创建者:返回自己作为处理人/审批人/直属领导相关的处理记录
|
||||
List<QmsIssueTicketProcess> allProcesses = issueTicketProcessService.lambdaQuery()
|
||||
.eq(QmsIssueTicketProcess::getIssueTicketId, id)
|
||||
.eq(QmsIssueTicketProcess::getHandlerUserId, currentUserId)
|
||||
.list();
|
||||
processes = allProcesses.stream()
|
||||
.filter(p -> currentUserId.equals(p.getHandlerUserId())
|
||||
|| currentUserId.equals(p.getApprovalUserId())
|
||||
|| isCurrentUserLeaderOfProcess(p, currentUserId))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
// 构建返回VO - 工单基本信息
|
||||
|
|
@ -3148,10 +3149,37 @@ public class QmsIssueTicketControllerService {
|
|||
.filter(p -> p.getApprovalStatus() == null || p.getApprovalStatus() != 1)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (CollectionUtil.isNotEmpty(validProcesses)) {
|
||||
Long currentUserId = UserUtil.getUserId();
|
||||
Short status = ticket.getStatus();
|
||||
boolean isCreator = currentUserId.equals(ticket.getCreateUserId());
|
||||
boolean isCompletedStatus = status != null && status == 2;
|
||||
boolean isClosedStatus = status != null && status == 3;
|
||||
boolean isVisibleLeader = validProcesses.stream()
|
||||
.anyMatch(p -> isCurrentUserLeaderOfProcess(p, currentUserId));
|
||||
boolean isVisibleHandler = validProcesses.stream()
|
||||
.anyMatch(p -> currentUserId.equals(p.getHandlerUserId()) || currentUserId.equals(p.getApprovalUserId()));
|
||||
|
||||
List<QmsIssueTicketProcess> visibleProcesses;
|
||||
if (isClosedStatus || (isCompletedStatus && isCreator)) {
|
||||
visibleProcesses = validProcesses;
|
||||
} else if (isVisibleLeader) {
|
||||
visibleProcesses = validProcesses.stream()
|
||||
.filter(p -> isCurrentUserLeaderOfProcess(p, currentUserId))
|
||||
.collect(Collectors.toList());
|
||||
} else if (isVisibleHandler) {
|
||||
visibleProcesses = validProcesses.stream()
|
||||
.filter(p -> currentUserId.equals(p.getHandlerUserId()) || currentUserId.equals(p.getApprovalUserId()))
|
||||
.collect(Collectors.toList());
|
||||
} else if (isCreator) {
|
||||
visibleProcesses = validProcesses;
|
||||
} else {
|
||||
visibleProcesses = List.of();
|
||||
}
|
||||
|
||||
if (CollectionUtil.isNotEmpty(visibleProcesses)) {
|
||||
// 组装处理人列表(按部门合并)
|
||||
Map<String, List<String>> handlersByDept = new LinkedHashMap<>();
|
||||
for (QmsIssueTicketProcess process : validProcesses) {
|
||||
for (QmsIssueTicketProcess process : visibleProcesses) {
|
||||
if (StrUtil.isBlank(process.getHandlerUserName())) {
|
||||
continue;
|
||||
}
|
||||
|
|
@ -3180,7 +3208,7 @@ public class QmsIssueTicketControllerService {
|
|||
|
||||
// 组装领导列表(仅处理人已提交、领导已审批时才展示)
|
||||
Map<String, List<String>> leadersByDept = new LinkedHashMap<>();
|
||||
for (QmsIssueTicketProcess process : validProcesses) {
|
||||
for (QmsIssueTicketProcess process : visibleProcesses) {
|
||||
// 领导审批状态为 null 表示处理人尚未提交,不展示
|
||||
if (process.getLeaderApprovalResult() == null || StrUtil.isBlank(process.getLeaderUserName())) {
|
||||
continue;
|
||||
|
|
@ -3216,10 +3244,17 @@ public class QmsIssueTicketControllerService {
|
|||
}
|
||||
vo.setLeaders(leaders);
|
||||
|
||||
// 填充根本原因(取第一条处理记录)
|
||||
QmsIssueTicketProcess firstProcess = validProcesses.get(0);
|
||||
if (StrUtil.isNotBlank(firstProcess.getRootCause())) {
|
||||
vo.setRootCause(firstProcess.getRootCause());
|
||||
// 填充当前用户可见的根本原因
|
||||
List<QmsIssueTicketProcess> rootCauseProcesses = visibleProcesses.stream()
|
||||
.filter(p -> StrUtil.isNotBlank(p.getRootCause()))
|
||||
.collect(Collectors.toList());
|
||||
if (rootCauseProcesses.size() == 1) {
|
||||
vo.setRootCause(rootCauseProcesses.get(0).getRootCause());
|
||||
} else if (rootCauseProcesses.size() > 1) {
|
||||
String rootCause = rootCauseProcesses.stream()
|
||||
.map(QmsIssueTicketProcess::getRootCause)
|
||||
.collect(Collectors.joining("\n"));
|
||||
vo.setRootCause(rootCause);
|
||||
}
|
||||
|
||||
// 查询纠正措施
|
||||
|
|
@ -3229,7 +3264,7 @@ public class QmsIssueTicketControllerService {
|
|||
List<QmsInspectionTicketDetailVO.MeasureVO> temporaryMeasures = new ArrayList<>();
|
||||
List<QmsInspectionTicketDetailVO.MeasureVO> permanentMeasures = new ArrayList<>();
|
||||
|
||||
for (QmsIssueTicketProcess p : validProcesses) {
|
||||
for (QmsIssueTicketProcess p : visibleProcesses) {
|
||||
List<QmsIssueTicketProcessMeasure> measures = issueTicketProcessMeasureService.lambdaQuery()
|
||||
.eq(QmsIssueTicketProcessMeasure::getIssueTicketProcessId, p.getId())
|
||||
.list();
|
||||
|
|
@ -3267,13 +3302,8 @@ public class QmsIssueTicketControllerService {
|
|||
}
|
||||
|
||||
// === 权限判断:isReview / isDispatch / isEdit ===
|
||||
Long currentUserId = UserUtil.getUserId();
|
||||
// 获取该工单全部处理记录(权限判断用全部记录,不过滤)
|
||||
List<QmsIssueTicketProcess> allProcesses = issueTicketProcessService.lambdaQuery()
|
||||
.eq(QmsIssueTicketProcess::getIssueTicketId, id)
|
||||
.list();
|
||||
|
||||
Short status = ticket.getStatus();
|
||||
List<QmsIssueTicketProcess> allProcesses = processes;
|
||||
|
||||
// 判断当前用户是否为负责人(工单表的 approvalUserId)
|
||||
boolean isResponsiblePerson = currentUserId.equals(ticket.getApprovalUserId());
|
||||
|
|
@ -3305,9 +3335,7 @@ public class QmsIssueTicketControllerService {
|
|||
}
|
||||
|
||||
// 负责人权限:工单状态为处理中时有审批和分配权限,有了审批状态后失去审批权限
|
||||
boolean isCreator = currentUserId.equals(ticket.getCreateUserId());
|
||||
boolean isProcessingStatus = status != null && (status == 0 || status == 1);
|
||||
boolean isCompletedStatus = status != null && status == 2;
|
||||
|
||||
boolean responsibleCanReview = isResponsiblePerson
|
||||
&& status != null
|
||||
|
|
@ -3368,17 +3396,22 @@ public class QmsIssueTicketControllerService {
|
|||
.set(QmsIssueTicket::getUpdateTime, now)
|
||||
.update();
|
||||
|
||||
issueTicketToDoService.lambdaUpdate()
|
||||
.eq(QmsIssueTicketToDo::getTicketId, ticket.getId())
|
||||
.eq(QmsIssueTicketToDo::getHasProcessed, false)
|
||||
.set(QmsIssueTicketToDo::getHasProcessed, true)
|
||||
.update();
|
||||
if (Objects.equals(ticket.getSourceType(), (short) 1)) {
|
||||
issueTicketToDoService.processed(ticket.getId());
|
||||
} else {
|
||||
issueTicketToDoService.lambdaUpdate()
|
||||
.eq(QmsIssueTicketToDo::getTicketId, ticket.getId())
|
||||
.eq(QmsIssueTicketToDo::getHasProcessed, false)
|
||||
.set(QmsIssueTicketToDo::getHasProcessed, true)
|
||||
.update();
|
||||
}
|
||||
|
||||
// PDI工单关闭时:创建新任务单,复制内容,不合格项改为合格
|
||||
if (ticket.getSourceType() != null && ticket.getSourceType() == 1 && ticket.getSourceId() != null) {
|
||||
QmsPdiTaskRecord originalTask = createPdiRepairTask(ticket.getSourceId(), now);
|
||||
if (originalTask != null) {
|
||||
callbackPdiInspectionTask(originalTask, true);
|
||||
// 业务确认暂时关闭PDI回调WMS
|
||||
// callbackPdiInspectionTask(originalTask, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3419,6 +3452,10 @@ public class QmsIssueTicketControllerService {
|
|||
.set(QmsIssueTicket::getUpdateTime, now)
|
||||
.update();
|
||||
|
||||
if (Objects.equals(ticket.getSourceType(), (short) 1)) {
|
||||
issueTicketToDoService.processed(ticket.getId());
|
||||
}
|
||||
|
||||
// 推送待办给被驳回的处理人
|
||||
for (Long userId : rejectUserIds) {
|
||||
QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo()
|
||||
|
|
@ -3532,21 +3569,6 @@ public class QmsIssueTicketControllerService {
|
|||
pdiInspectionResultsService.saveBatch(newResults);
|
||||
}
|
||||
|
||||
// 4. 复制装车前图片
|
||||
List<QmsPdiInspectionResultsLoadingImage> oldImages = pdiInspectionResultsLoadingImageService.lambdaQuery()
|
||||
.eq(QmsPdiInspectionResultsLoadingImage::getTaskId, originalTaskId)
|
||||
.list();
|
||||
|
||||
if (!oldImages.isEmpty()) {
|
||||
List<QmsPdiInspectionResultsLoadingImage> newImages = new ArrayList<>();
|
||||
for (QmsPdiInspectionResultsLoadingImage old : oldImages) {
|
||||
QmsPdiInspectionResultsLoadingImage newImage = new QmsPdiInspectionResultsLoadingImage()
|
||||
.setTaskId(newTask.getId())
|
||||
.setLoadingImage(old.getLoadingImage());
|
||||
newImages.add(newImage);
|
||||
}
|
||||
pdiInspectionResultsLoadingImageService.saveBatch(newImages);
|
||||
}
|
||||
return originalTask;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@ public class QmsIssueTicketProcessMeasureControllerService {
|
|||
// 处理人处理:保存根本原因、审批状态和措施
|
||||
issueTicketProcessService.lambdaUpdate()
|
||||
.eq(QmsIssueTicketProcess::getId, processId)
|
||||
.set(request.getRootCause() != null, QmsIssueTicketProcess::getRootCause, mergedRootCause)
|
||||
.set(request.getRootCause() != null, QmsIssueTicketProcess::getRootCause, request.getRootCause())
|
||||
.set(request.getApprovalStatus() != null, QmsIssueTicketProcess::getApprovalStatus, request.getApprovalStatus())
|
||||
.set(request.getApprovalOpinion() != null, QmsIssueTicketProcess::getApprovalOpinion, request.getApprovalOpinion())
|
||||
.set(QmsIssueTicketProcess::getApprovalUserId, currentUserId)
|
||||
|
|
|
|||
|
|
@ -202,10 +202,22 @@ public class QmsPdiInspectionResultsControllerService {
|
|||
.update();
|
||||
});
|
||||
|
||||
// 2. 检查 type=0/1/3 是否都有结果
|
||||
Set<Long> deliveryItemIds = deliveryItemService.lambdaQuery()
|
||||
.eq(QmsPdiDetectionRulesDeliveryItem::getDetectionRulesId, taskRecord.getDetectionRulesId())
|
||||
.list()
|
||||
.stream()
|
||||
.map(QmsPdiDetectionRulesDeliveryItem::getId)
|
||||
.collect(Collectors.toSet());
|
||||
request.getLoadingItems().stream()
|
||||
.map(item -> item.getId())
|
||||
.filter(Objects::nonNull)
|
||||
.forEach(deliveryItemIds::add);
|
||||
|
||||
// 2. 检查 type=0/1/3 是否都有结果,装车前检查项不参与检测项结果校验
|
||||
long unfilledResults = inspectionResultsService.lambdaQuery()
|
||||
.eq(QmsPdiInspectionResults::getTaskId, request.getTaskId())
|
||||
.ne(QmsPdiInspectionResults::getInspectionItemType, 2)
|
||||
.in(QmsPdiInspectionResults::getInspectionItemType, Arrays.asList(0, 1, 3))
|
||||
.notIn(!deliveryItemIds.isEmpty(), QmsPdiInspectionResults::getInspectionItemId, deliveryItemIds)
|
||||
.isNull(QmsPdiInspectionResults::getInspectionItemResults)
|
||||
.count();
|
||||
if (unfilledResults > 0) {
|
||||
|
|
@ -225,15 +237,13 @@ public class QmsPdiInspectionResultsControllerService {
|
|||
// 4. 查询不合格检测项(type=0/1/3,装车前不计入)
|
||||
List<QmsPdiInspectionResults> failedItems = inspectionResultsService.lambdaQuery()
|
||||
.eq(QmsPdiInspectionResults::getTaskId, request.getTaskId())
|
||||
.ne(QmsPdiInspectionResults::getInspectionItemType, 2)
|
||||
.in(QmsPdiInspectionResults::getInspectionItemType, Arrays.asList(0, 1, 3))
|
||||
.notIn(!deliveryItemIds.isEmpty(), QmsPdiInspectionResults::getInspectionItemId, deliveryItemIds)
|
||||
.eq(QmsPdiInspectionResults::getInspectionItemResults, false)
|
||||
.list();
|
||||
|
||||
// 5. 校验:如果所有检测项都合格,总体判定不能为不合格
|
||||
// 5. 装车前整体检测结果不参与普通检测项判定
|
||||
boolean hasDefect = !failedItems.isEmpty();
|
||||
if (!hasDefect && !request.getOverallResult()) {
|
||||
throw new NflgException(STATE.BusinessError, "所有检测项均为合格,总体判定不能为不合格");
|
||||
}
|
||||
|
||||
// 6. 将整体判定结果存入 task_record
|
||||
boolean overallResult = request.getOverallResult() != null && request.getOverallResult();
|
||||
|
|
@ -262,7 +272,8 @@ public class QmsPdiInspectionResultsControllerService {
|
|||
.setDetectionCompletionTime(now)
|
||||
.setOverdue(overdueValue)
|
||||
.setInspectionEnable(hasDefect ? 3 : 2);
|
||||
wmsPdiInspectionTaskCallbackService.callBack(taskRecord, overallResult);
|
||||
// 业务确认暂时关闭PDI回调WMS
|
||||
// wmsPdiInspectionTaskCallbackService.callBack(taskRecord, overallResult);
|
||||
|
||||
// 8. 返回不合格项(转换为VO,图片改为List格式)
|
||||
return buildInspectionResultVOList(failedItems);
|
||||
|
|
|
|||
|
|
@ -517,6 +517,7 @@ public class QmsPdiTaskRecordControllerService {
|
|||
vo.setOrderNo(record.getOrderNo());
|
||||
vo.setDeviceNo(record.getDeviceNo());
|
||||
vo.setFactoryNo(record.getFactoryNo());
|
||||
vo.setInspectionEnable(record.getInspectionEnable());
|
||||
vo.setInspectionInspection(record.getInspectionInspection());
|
||||
vo.setDetectionCompletionTime(record.getDetectionCompletionTime());
|
||||
vo.setInspectionRuleId(record.getDetectionRulesId());
|
||||
|
|
|
|||
|
|
@ -158,6 +158,11 @@ public class QmsPdiTaskRecordDetailVO {
|
|||
*/
|
||||
private Integer inspectionType;
|
||||
|
||||
/**
|
||||
* 质检状态:0为待检查,1为检验中,2为已完成,3为待流转
|
||||
*/
|
||||
private Integer inspectionEnable;
|
||||
|
||||
/**
|
||||
* 检测结果:true=合格,false=不合格
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in New Issue