巡检工单权限修改

This commit is contained in:
yf001217 2026-06-26 16:58:19 +08:00
parent a50e2f10d6
commit f96613cdab
10 changed files with 59 additions and 52 deletions

View File

@ -237,7 +237,7 @@ public class QmsIssueTicketControllerService {
// 6. 设置负责人信息未分派处理人前保持待流转
issueTicketService.lambdaUpdate()
.eq(QmsIssueTicket::getId, request.getId())
.set(QmsIssueTicket::getStatus, (short) 0)
.set(QmsIssueTicket::getStatus, (short) 5)
.set(QmsIssueTicket::getApprovalUserId, request.getHandlerUserId())
.set(QmsIssueTicket::getApprovalUserName, handlerUser.getUserName())
.set(QmsIssueTicket::getApprovalTime, LocalDateTime.now())
@ -443,18 +443,20 @@ public class QmsIssueTicketControllerService {
throw new NflgException(STATE.BusinessError, "只能分派巡检工单");
}
boolean firstChargeReview = Objects.equals(ticket.getStatus(), (short) 5);
boolean redispatchAfterHandlerReject = Objects.equals(ticket.getStatus(), (short) 1);
Short approvalStatus = request.getApprovalStatus();
if (approvalStatus == null) {
VUtil.trueThrowBusinessError(!Objects.equals(ticket.getStatus(), (short) 0))
.throwMessage("审批状态不能为空");
VUtil.trueThrowBusinessError(!firstChargeReview && !redispatchAfterHandlerReject)
.throwMessage("当前工单状态不允许分派");
approvalStatus = 0;
}
issueTicketToDoService.processed(ticket.getId());
// 3. 根据审批状态分支处理
if (approvalStatus == 1) {
// 驳回不创建处理记录巡检工单直接报废
VUtil.trueThrowBusinessError(!firstChargeReview).throwMessage("当前工单状态不允许负责人驳回");
issueTicketService.lambdaUpdate()
.eq(QmsIssueTicket::getId, ticket.getId())
.set(QmsIssueTicket::getStatus, (short) 4)
@ -467,11 +469,12 @@ public class QmsIssueTicketControllerService {
.set(QmsIssueTicket::getUpdateTime, now)
.update();
} else {
// 通过按现有流程处理
if (firstChargeReview) {
VUtil.trueThrowBusinessError(request.getIncidentType() == null)
.throwMessage("事件类型不能为空");
VUtil.trueThrowBusinessError(StrUtil.isBlank(request.getExceptionCode()))
.throwMessage("异常代码不能为空");
}
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(request.getHandlerUserIds()))
.throwMessage("处理人列表不能为空");
@ -480,13 +483,12 @@ public class QmsIssueTicketControllerService {
throw new NflgException(STATE.BusinessError, "不能将工单分配给自己");
}
// 更新工单审批状态和意见
issueTicketService.lambdaUpdate()
.eq(QmsIssueTicket::getId, ticket.getId())
.set(QmsIssueTicket::getApprovalStatus, approvalStatus)
.set(QmsIssueTicket::getIncidentType, request.getIncidentType())
.set(QmsIssueTicket::getExceptionCode, request.getExceptionCode())
.set(QmsIssueTicket::getIncidentConsequence, request.getIncidentConsequence())
.set(request.getIncidentType() != null, QmsIssueTicket::getIncidentType, request.getIncidentType())
.set(StrUtil.isNotBlank(request.getExceptionCode()), QmsIssueTicket::getExceptionCode, request.getExceptionCode())
.set(request.getIncidentConsequence() != null, QmsIssueTicket::getIncidentConsequence, request.getIncidentConsequence())
.set(request.getApprovalOpinion() != null,
QmsIssueTicket::getApprovalOpinion, request.getApprovalOpinion())
.set(QmsIssueTicket::getUpdateUserId, currentUserId)
@ -531,8 +533,7 @@ public class QmsIssueTicketControllerService {
// 批量推送待办消息
issueTicketToDoService.saveBatch(todoItems);
// 如果工单状态是待流转(0)更新为处理中(1)
if (ticket.getStatus() != null && ticket.getStatus() == 0) {
if (firstChargeReview) {
issueTicketService.lambdaUpdate()
.eq(QmsIssueTicket::getId, ticket.getId())
.set(QmsIssueTicket::getStatus, (short) 1)
@ -1119,7 +1120,7 @@ public class QmsIssueTicketControllerService {
: StrUtil.join(",", request.getImages().stream().map(FileUploadVO::getId).toList())
)
.setRemark(request.getRemark())
.setStatus((short) 0)
.setStatus((short) 5)
.setApprovalUserId(request.getHandlerUserId())
.setApprovalUserName(handlerUser.getUserName())
.setApprovalTime(now)
@ -1264,7 +1265,7 @@ public class QmsIssueTicketControllerService {
Long pendingCount = issueTicketService.lambdaQuery()
.eq(QmsIssueTicket::getSourceType, (short) 2)
.eq(QmsIssueTicket::getCreateUserId, currentUserId)
.eq(QmsIssueTicket::getStatus, (short) 0)
.in(QmsIssueTicket::getStatus, Arrays.asList((short) 0, (short) 5))
.count();
Long processingCount = issueTicketService.lambdaQuery()
@ -3439,29 +3440,34 @@ public class QmsIssueTicketControllerService {
}
// 负责人权限工单状态为处理中时有审批和分配权限有了审批状态后失去审批权限
boolean isProcessingStatus = status != null && (status == 0 || status == 1);
boolean responsibleCanReview = isResponsiblePerson
&& status != null
&& status == 1
&& ticket.getApprovalStatus() == null;
boolean responsibleCanDispatch = isResponsiblePerson && isProcessingStatus;
boolean chargeCanReview = isResponsiblePerson && Objects.equals(status, (short) 5);
boolean responsibleCanDispatch = isResponsiblePerson
&& Objects.equals(status, (short) 1)
&& issueTicketToDoService.lambdaQuery()
.eq(QmsIssueTicketToDo::getTicketId, ticket.getId())
.eq(QmsIssueTicketToDo::getHandlerUserId, currentUserId)
.eq(QmsIssueTicketToDo::getHasProcessed, false)
.exists();
boolean handlerCanReview = allProcesses.stream()
.filter(p -> currentUserId.equals(p.getHandlerUserId()))
.anyMatch(p -> p.getApprovalStatus() == null
&& p.getLeaderApprovalResult() == null
&& p.getApprovalUserId() == null);
boolean handlerCanEdit = allProcesses.stream()
.filter(p -> currentUserId.equals(p.getHandlerUserId()))
.anyMatch(p -> p.getApprovalStatus() == null && p.getLeaderApprovalResult() == null);
boolean handlerCanEdit = handlerCanReview;
boolean leaderCanReview = isLeader && hasPendingLeaderReview(allProcesses, currentUserId);
boolean creatorCanDispatch = isCreator && status != null && status == 0;
boolean creatorCanShut = isCreator && !Objects.equals(ticket.getSourceType(), (short) 2) && isCompletedStatus;
boolean responsibleCanShut = isResponsiblePerson && isCompletedStatus;
vo.setIsReview(responsibleCanReview || handlerCanReview || leaderCanReview);
vo.setIsChargeReview(chargeCanReview);
vo.setIsReview(handlerCanReview || leaderCanReview);
vo.setIsDispatch((responsibleCanDispatch && !leaderCanReview) || creatorCanDispatch);
vo.setIsEdit(handlerCanEdit);
vo.setIsShut(creatorCanShut || responsibleCanShut);
vo.setIsShut(responsibleCanShut);
return vo;
}
@ -3484,8 +3490,6 @@ public class QmsIssueTicketControllerService {
if (inspectionTicket) {
VUtil.trueThrowBusinessError(!currentUserId.equals(ticket.getApprovalUserId()))
.throwMessage("只有工单负责人才能审核");
VUtil.trueThrowBusinessError(request.getCreateApproval() != 0)
.throwMessage("巡检工单只允许关闭");
} else {
VUtil.trueThrowBusinessError(!currentUserId.equals(ticket.getCreateUserId()))
.throwMessage("只有工单创建人才能审核");
@ -3510,15 +3514,7 @@ public class QmsIssueTicketControllerService {
.set(QmsIssueTicket::getUpdateTime, now)
.update();
if (Objects.equals(ticket.getSourceType(), (short) 1) || Objects.equals(ticket.getSourceType(), (short) 3)) {
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) {
@ -3566,7 +3562,7 @@ public class QmsIssueTicketControllerService {
.set(QmsIssueTicket::getUpdateTime, now)
.update();
if (Objects.equals(ticket.getSourceType(), (short) 1) || Objects.equals(ticket.getSourceType(), (short) 3)) {
if (inspectionTicket || Objects.equals(ticket.getSourceType(), (short) 1) || Objects.equals(ticket.getSourceType(), (short) 3)) {
issueTicketToDoService.processed(ticket.getId());
}

View File

@ -194,6 +194,7 @@ public class QmsIssueTicketProcessControllerService {
if (Objects.equals(ticket.getSourceType(), (short) 2)
&& Objects.equals(ticket.getApprovalUserId(), currentUserId)
&& Objects.equals(ticket.getStatus(), (short) 5)
&& Objects.equals(request.getApprovalStatus(), (short) 1)) {
rejectInspectionByResponsible(request, ticket, now, currentUserId, currentUserName);
return;
@ -327,6 +328,9 @@ public class QmsIssueTicketProcessControllerService {
private void rejectInspectionByResponsible(QmsIssueTicketProcessDraftQO request, QmsIssueTicket ticket,
LocalDateTime now, Long currentUserId, String currentUserName) {
VUtil.trueThrowBusinessError(!Objects.equals(ticket.getStatus(), (short) 5))
.throwMessage("当前工单状态不允许负责人驳回");
issueTicketToDoService.processed(ticket.getId());
issueTicketService.lambdaUpdate()
@ -452,11 +456,13 @@ public class QmsIssueTicketProcessControllerService {
.set(QmsIssueTicket::getUpdateTime, now)
.update();
// 推送消息给工单创建人
if (ticket.getCreateUserId() != null) {
Long nextTodoUserId = Objects.equals(ticket.getSourceType(), (short) 2)
? ticket.getApprovalUserId()
: ticket.getCreateUserId();
if (nextTodoUserId != null) {
QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo()
.setTicketId(issueTicketId)
.setHandlerUserId(ticket.getCreateUserId());
.setHandlerUserId(nextTodoUserId);
issueTicketToDoService.save(todoItem);
}
}

View File

@ -38,7 +38,7 @@ public class QmsIssueTicketSearchQO extends PageQO {
private Short ticketType;
/**
* 工单状态0=待流转1=处理中2=已完成3=已关闭4=报废
* 工单状态0=待流转1=处理中2=已完成3=已关闭4=报废5=待审核
*/
private Short status;

View File

@ -13,7 +13,7 @@ import lombok.experimental.Accessors;
public class QmsIssueTicketTabletSearchQO extends PageQO {
/**
* 工单状态0=待流转1=处理中2=已完成3=已关闭4=报废可选
* 工单状态0=待流转1=处理中2=已完成3=已关闭4=报废5=待审核可选
*/
private Short status;

View File

@ -22,6 +22,11 @@ public class QmsInspectionTicketDetailVO {
*/
private Boolean isReview;
/**
* 是否有负责人审核权限
*/
private Boolean isChargeReview;
/**
* 是否有分派权限
*/
@ -78,7 +83,7 @@ public class QmsInspectionTicketDetailVO {
private Long directorId;
/**
* 工单状态0=待流转1=处理中2=已完成3=已关闭4=报废
* 工单状态0=待流转1=处理中2=已完成3=已关闭4=报废5=待审核
*/
private Short status;

View File

@ -84,7 +84,7 @@ public class QmsIssueTicketDetailVO {
private String remark;
/**
* 状态0=待流转1=处理中2=已完成3=已关闭4=报废
* 状态0=待流转1=处理中2=已完成3=已关闭4=报废5=待审核
*/
private Short status;

View File

@ -17,7 +17,7 @@ public class QmsIssueTicketTabletPageData extends PageData<QmsIssueTicketVO> {
private Long totalCount;
/**
* 待处理数status=0
* 待处理数status=0或5
*/
private Long pendingCount;

View File

@ -53,7 +53,7 @@ public class QmsIssueTicketToDoVO {
private LocalDateTime completeTime;
/**
* 状态0=待流转1=处理中2=已完成3=已关闭4=报废
* 状态0=待流转1=处理中2=已完成3=已关闭4=报废5=待审核
*/
private Short status;

View File

@ -79,7 +79,7 @@ public class QmsIssueTicketVO {
private String incidentLocation;
/**
* 状态0=待流转1=处理中2=已完成3=已关闭4=报废
* 状态0=待流转1=处理中2=已完成3=已关闭4=报废5=待审核
*/
private Short status;

View File

@ -105,7 +105,7 @@ public class QmsIssueTicket implements Serializable {
private String remark;
/**
* 状态0=待流转1=处理中2=已完成3=已关闭4=报废
* 状态0=待流转1=处理中2=已完成3=已关闭4=报废5=待审核
*/
private Short status;