工单措施提交接口、查询明细接口修改
This commit is contained in:
parent
f6605651c5
commit
23d6d553c5
|
|
@ -154,6 +154,12 @@ public class QmsIssueTicketControllerService {
|
|||
.set(QmsIssueTicket::getUpdateUserName, UserUtil.getUserName())
|
||||
.set(QmsIssueTicket::getUpdateTime, LocalDateTime.now())
|
||||
.update();
|
||||
|
||||
// 7. 推送待办消息给负责人
|
||||
QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo()
|
||||
.setTicketId(request.getId())
|
||||
.setHandlerUserId(request.getHandlerUserId());
|
||||
issueTicketToDoService.save(todoItem);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -169,11 +175,6 @@ public class QmsIssueTicketControllerService {
|
|||
String currentUserName = UserUtil.getUserName();
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
|
||||
// 校验不能分配给自己
|
||||
if (request.getHandlerUserIds().contains(currentUserId)) {
|
||||
throw new NflgException(STATE.BusinessError, "不能将工单分配给自己");
|
||||
}
|
||||
|
||||
// 1. 校验工单存在
|
||||
QmsIssueTicket ticket = issueTicketService.getById(request.getId());
|
||||
VUtil.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("工单不存在");
|
||||
|
|
@ -183,61 +184,78 @@ public class QmsIssueTicketControllerService {
|
|||
throw new NflgException(STATE.BusinessError, "只能分派巡检工单");
|
||||
}
|
||||
|
||||
// 3. 查询消息类型ID
|
||||
Long sourceTypeId = dictionaryItemService.getIdByCode("MessageType", "InspectionTaskWorkOrder");
|
||||
VUtil.trueThrowBusinessError(Objects.isNull(sourceTypeId)).throwMessage("消息类型配置不存在");
|
||||
|
||||
// 4. 批量查询并校验所有处理人
|
||||
List<User> handlerUsers = userService.listByIds(request.getHandlerUserIds());
|
||||
if (handlerUsers.size() != request.getHandlerUserIds().size()) {
|
||||
throw new NflgException(STATE.BusinessError, "部分处理人不存在");
|
||||
}
|
||||
|
||||
// 构建处理人ID到用户的映射
|
||||
Map<Long, User> handlerUserMap = handlerUsers.stream()
|
||||
.collect(Collectors.toMap(User::getId, user -> user));
|
||||
|
||||
// 5. 为每个处理人创建处理记录并推送待办
|
||||
List<QmsIssueTicketProcess> processes = new ArrayList<>();
|
||||
List<QmsIssueTicketToDo> todoItems = new ArrayList<>();
|
||||
|
||||
for (Long handlerUserId : request.getHandlerUserIds()) {
|
||||
User handlerUser = handlerUserMap.get(handlerUserId);
|
||||
|
||||
// 创建处理记录
|
||||
QmsIssueTicketProcess process = new QmsIssueTicketProcess()
|
||||
.setIssueTicketId(ticket.getId())
|
||||
.setHandlerUserId(handlerUserId)
|
||||
.setHandlerUserName(handlerUser.getUserName());
|
||||
processes.add(process);
|
||||
|
||||
// 创建待办消息
|
||||
QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo()
|
||||
.setTicketId(ticket.getId())
|
||||
.setHandlerUserId(handlerUserId);
|
||||
todoItems.add(todoItem);
|
||||
}
|
||||
|
||||
// 6. 批量保存处理记录
|
||||
issueTicketProcessService.saveBatch(processes);
|
||||
|
||||
// 7. 更新处理记录中的sourceId(因为saveBatch后才有ID)
|
||||
// for (int i = 0; i < processes.size(); i++) {
|
||||
// todoItems.get(i).setSourceId(processes.get(i).getId());
|
||||
// }
|
||||
|
||||
// 8. 批量推送待办消息
|
||||
issueTicketToDoService.saveBatch(todoItems);
|
||||
|
||||
// 9. 如果工单状态是待流转(0),更新为处理中(1)
|
||||
if (ticket.getStatus() != null && ticket.getStatus() == 0) {
|
||||
// 3. 根据审批状态分支处理
|
||||
if (request.getApprovalStatus() == 1) {
|
||||
// 驳回:不创建处理记录,工单改为已完成,推送消息给创建人
|
||||
issueTicketService.lambdaUpdate()
|
||||
.eq(QmsIssueTicket::getId, ticket.getId())
|
||||
.set(QmsIssueTicket::getStatus, (short) 1)
|
||||
.set(QmsIssueTicket::getStatus, (short) 2)
|
||||
.set(request.getApprovalOpinion() != null,
|
||||
QmsIssueTicket::getApprovalOpinion, request.getApprovalOpinion())
|
||||
.set(QmsIssueTicket::getUpdateUserId, currentUserId)
|
||||
.set(QmsIssueTicket::getUpdateUserName, currentUserName)
|
||||
.set(QmsIssueTicket::getUpdateTime, now)
|
||||
.update();
|
||||
|
||||
// 推送待办消息给创建人
|
||||
QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo()
|
||||
.setTicketId(ticket.getId())
|
||||
.setHandlerUserId(ticket.getCreateUserId());
|
||||
issueTicketToDoService.save(todoItem);
|
||||
} else {
|
||||
// 通过:按现有流程处理
|
||||
// 校验不能分配给自己
|
||||
if (request.getHandlerUserIds().contains(currentUserId)) {
|
||||
throw new NflgException(STATE.BusinessError, "不能将工单分配给自己");
|
||||
}
|
||||
|
||||
// 批量查询并校验所有处理人
|
||||
List<User> handlerUsers = userService.listByIds(request.getHandlerUserIds());
|
||||
if (handlerUsers.size() != request.getHandlerUserIds().size()) {
|
||||
throw new NflgException(STATE.BusinessError, "部分处理人不存在");
|
||||
}
|
||||
|
||||
// 构建处理人ID到用户的映射
|
||||
Map<Long, User> handlerUserMap = handlerUsers.stream()
|
||||
.collect(Collectors.toMap(User::getId, user -> user));
|
||||
|
||||
// 为每个处理人创建处理记录并推送待办
|
||||
List<QmsIssueTicketProcess> processes = new ArrayList<>();
|
||||
List<QmsIssueTicketToDo> todoItems = new ArrayList<>();
|
||||
|
||||
for (Long handlerUserId : request.getHandlerUserIds()) {
|
||||
User handlerUser = handlerUserMap.get(handlerUserId);
|
||||
|
||||
// 创建处理记录
|
||||
QmsIssueTicketProcess process = new QmsIssueTicketProcess()
|
||||
.setIssueTicketId(ticket.getId())
|
||||
.setHandlerUserId(handlerUserId)
|
||||
.setHandlerUserName(handlerUser.getUserName());
|
||||
processes.add(process);
|
||||
|
||||
// 创建待办消息
|
||||
QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo()
|
||||
.setTicketId(ticket.getId())
|
||||
.setHandlerUserId(handlerUserId);
|
||||
todoItems.add(todoItem);
|
||||
}
|
||||
|
||||
// 批量保存处理记录
|
||||
issueTicketProcessService.saveBatch(processes);
|
||||
|
||||
// 批量推送待办消息
|
||||
issueTicketToDoService.saveBatch(todoItems);
|
||||
|
||||
// 如果工单状态是待流转(0),更新为处理中(1)
|
||||
if (ticket.getStatus() != null && ticket.getStatus() == 0) {
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -715,6 +733,12 @@ public class QmsIssueTicketControllerService {
|
|||
.setUpdateTime(now);
|
||||
|
||||
issueTicketService.save(entity);
|
||||
|
||||
// 6. 推送待办消息给负责人
|
||||
QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo()
|
||||
.setTicketId(entity.getId())
|
||||
.setHandlerUserId(request.getHandlerUserId());
|
||||
issueTicketToDoService.save(todoItem);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1906,6 +1930,10 @@ public class QmsIssueTicketControllerService {
|
|||
vo.setIncidentReason(ticket.getIncidentReason());
|
||||
vo.setIncidentConsequence(ticket.getIncidentConsequence());
|
||||
|
||||
// 填充负责人审批状态和意见(来自工单表)
|
||||
vo.setResponsiblePersonApprovalStatus(ticket.getApprovalStatus());
|
||||
vo.setResponsiblePersonApprovalComments(ticket.getApprovalOpinion());
|
||||
|
||||
// 解析图片列表
|
||||
if (StrUtil.isNotBlank(ticket.getImageIds())) {
|
||||
List<Long> imageIds = Arrays.stream(ticket.getImageIds().split(","))
|
||||
|
|
@ -1948,10 +1976,15 @@ public class QmsIssueTicketControllerService {
|
|||
.eq(QmsIssueTicketProcess::getIssueTicketId, id)
|
||||
.list();
|
||||
|
||||
if (CollectionUtil.isNotEmpty(processes)) {
|
||||
// 过滤掉审批状态为驳回(1)的处理记录,不返回
|
||||
List<QmsIssueTicketProcess> validProcesses = processes.stream()
|
||||
.filter(p -> p.getApprovalStatus() == null || p.getApprovalStatus() != 1)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (CollectionUtil.isNotEmpty(validProcesses)) {
|
||||
// 组装处理人列表(按部门合并)
|
||||
Map<String, List<String>> handlersByDept = new LinkedHashMap<>();
|
||||
for (QmsIssueTicketProcess process : processes) {
|
||||
for (QmsIssueTicketProcess process : validProcesses) {
|
||||
if (StrUtil.isBlank(process.getHandlerUserName())) {
|
||||
continue;
|
||||
}
|
||||
|
|
@ -1980,7 +2013,7 @@ public class QmsIssueTicketControllerService {
|
|||
|
||||
// 组装领导列表(仅处理人已提交、领导已审批时才展示)
|
||||
Map<String, List<String>> leadersByDept = new LinkedHashMap<>();
|
||||
for (QmsIssueTicketProcess process : processes) {
|
||||
for (QmsIssueTicketProcess process : validProcesses) {
|
||||
// 领导审批状态为 null 表示处理人尚未提交,不展示
|
||||
if (process.getLeaderApprovalResult() == null || StrUtil.isBlank(process.getLeaderUserName())) {
|
||||
continue;
|
||||
|
|
@ -2017,7 +2050,7 @@ public class QmsIssueTicketControllerService {
|
|||
vo.setLeaders(leaders);
|
||||
|
||||
// 填充根本原因(取第一条处理记录)
|
||||
QmsIssueTicketProcess firstProcess = processes.get(0);
|
||||
QmsIssueTicketProcess firstProcess = validProcesses.get(0);
|
||||
if (StrUtil.isNotBlank(firstProcess.getRootCause())) {
|
||||
vo.setRootCause(firstProcess.getRootCause());
|
||||
}
|
||||
|
|
@ -2029,7 +2062,7 @@ public class QmsIssueTicketControllerService {
|
|||
List<QmsInspectionTicketDetailVO.MeasureVO> temporaryMeasures = new ArrayList<>();
|
||||
List<QmsInspectionTicketDetailVO.MeasureVO> permanentMeasures = new ArrayList<>();
|
||||
|
||||
for (QmsIssueTicketProcess p : processes) {
|
||||
for (QmsIssueTicketProcess p : validProcesses) {
|
||||
List<QmsIssueTicketProcessMeasure> measures = issueTicketProcessMeasureService.lambdaQuery()
|
||||
.eq(QmsIssueTicketProcessMeasure::getIssueTicketProcessId, p.getId())
|
||||
.list();
|
||||
|
|
@ -2066,16 +2099,27 @@ public class QmsIssueTicketControllerService {
|
|||
|
||||
// === 权限判断:isReview / isDispatch / isEdit ===
|
||||
Long currentUserId = UserUtil.getUserId();
|
||||
// 获取该工单全部处理记录
|
||||
// 获取该工单全部处理记录(权限判断用全部记录,不过滤)
|
||||
List<QmsIssueTicketProcess> allProcesses = issueTicketProcessService.lambdaQuery()
|
||||
.eq(QmsIssueTicketProcess::getIssueTicketId, id)
|
||||
.list();
|
||||
|
||||
Short status = ticket.getStatus();
|
||||
|
||||
// 判断当前用户是否为负责人(工单表的 approvalUserId)
|
||||
boolean isResponsiblePerson = currentUserId.equals(ticket.getApprovalUserId());
|
||||
|
||||
// 判断当前用户是否为处理人
|
||||
QmsIssueTicketProcess myProcess = allProcesses.stream()
|
||||
.filter(p -> currentUserId.equals(p.getHandlerUserId()))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
boolean isHandler = myProcess != null;
|
||||
|
||||
// 判断是否为领导:1.已在process表记录了leaderUserId 2.或当前用户是处理人的部门负责人
|
||||
boolean isLeader = allProcesses.stream()
|
||||
.anyMatch(p -> currentUserId.equals(p.getLeaderUserId()));
|
||||
if (!isLeader) {
|
||||
// 检查当前用户是否为任一处理人的部门负责人
|
||||
for (QmsIssueTicketProcess p : allProcesses) {
|
||||
if (p.getHandlerUserId() == null) continue;
|
||||
UserInterior handlerInterior = userInteriorService.lambdaQuery()
|
||||
|
|
@ -2091,25 +2135,47 @@ public class QmsIssueTicketControllerService {
|
|||
}
|
||||
}
|
||||
|
||||
// isEdit:仅处理人为true,领导只有审核权限
|
||||
boolean isHandler = allProcesses.stream()
|
||||
.anyMatch(p -> currentUserId.equals(p.getHandlerUserId()));
|
||||
vo.setIsEdit(isHandler);
|
||||
|
||||
// isReview:领导始终有审核权限
|
||||
vo.setIsReview(isLeader);
|
||||
|
||||
// isDispatch
|
||||
Short status = ticket.getStatus();
|
||||
if (currentUserId.equals(ticket.getCreateUserId())) {
|
||||
// 创建人:isDispatch仅在待流转状态
|
||||
vo.setIsDispatch(status != null && status == 0);
|
||||
} else if (currentUserId.equals(ticket.getApprovalUserId())) {
|
||||
// 工单表审批人:isDispatch在处理中状态
|
||||
// 负责人权限:工单状态为处理中时有审批和分配权限,有了审批状态后失去审批权限
|
||||
if (isResponsiblePerson) {
|
||||
vo.setIsReview(status != null && status == 1 && ticket.getApprovalStatus() == null);
|
||||
vo.setIsDispatch(status != null && status == 1);
|
||||
} else {
|
||||
vo.setIsEdit(false);
|
||||
}
|
||||
// 处理人权限:拿到工单时有编辑和审批权限,有了审批状态后失去审批权限,驳回时失去编辑权限
|
||||
else if (isHandler) {
|
||||
Short handlerApprovalStatus = myProcess.getApprovalStatus();
|
||||
vo.setIsReview(handlerApprovalStatus == null);
|
||||
if (handlerApprovalStatus != null && handlerApprovalStatus == 1) {
|
||||
// 驳回:失去编辑权限
|
||||
vo.setIsEdit(false);
|
||||
} else if (handlerApprovalStatus != null && handlerApprovalStatus == 0) {
|
||||
// 通过:按之前逻辑(领导未审批时可编辑)
|
||||
boolean leaderNotApproved = myProcess.getLeaderApprovalResult() == null;
|
||||
vo.setIsEdit(leaderNotApproved);
|
||||
} else {
|
||||
// 未提交:有编辑权限
|
||||
vo.setIsEdit(true);
|
||||
}
|
||||
vo.setIsDispatch(false);
|
||||
}
|
||||
// 领导权限:只有审核权限
|
||||
else if (isLeader) {
|
||||
vo.setIsReview(true);
|
||||
vo.setIsEdit(false);
|
||||
vo.setIsDispatch(false);
|
||||
}
|
||||
// 创建人权限
|
||||
else if (currentUserId.equals(ticket.getCreateUserId())) {
|
||||
vo.setIsReview(false);
|
||||
vo.setIsDispatch(status != null && status == 0);
|
||||
vo.setIsEdit(false);
|
||||
}
|
||||
// 其他
|
||||
else {
|
||||
vo.setIsReview(false);
|
||||
vo.setIsDispatch(false);
|
||||
vo.setIsEdit(false);
|
||||
}
|
||||
|
||||
return vo;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -165,7 +165,7 @@ public class QmsIssueTicketProcessControllerService {
|
|||
} else if (sourceType == 2) {
|
||||
// 巡检任务
|
||||
if (isHandler) {
|
||||
// 处理人处理:保存根本原因和措施,写入审批时间
|
||||
// 处理人提交:保存根本原因、审批状态和措施
|
||||
issueTicketProcessMeasureControllerService.draftUnified(request);
|
||||
|
||||
// 写入审批时间
|
||||
|
|
@ -174,18 +174,27 @@ public class QmsIssueTicketProcessControllerService {
|
|||
.set(QmsIssueTicketProcess::getApprovalTime, now)
|
||||
.update();
|
||||
|
||||
// 推送给领导(处理人所在部门负责人)
|
||||
UserInterior userInterior = userInteriorService.lambdaQuery()
|
||||
.eq(UserInterior::getUserId, currentUserId)
|
||||
.one();
|
||||
// 根据审批状态推送待办
|
||||
if (request.getApprovalStatus() != null && request.getApprovalStatus() == 1) {
|
||||
// 驳回:推送待办给负责人(工单表的 approvalUserId)
|
||||
QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo()
|
||||
.setTicketId(ticket.getId())
|
||||
.setHandlerUserId(ticket.getApprovalUserId());
|
||||
issueTicketToDoService.save(todoItem);
|
||||
} else if (request.getApprovalStatus() != null && request.getApprovalStatus() == 0) {
|
||||
// 通过:推送给处理人所在部门负责人
|
||||
UserInterior userInterior = userInteriorService.lambdaQuery()
|
||||
.eq(UserInterior::getUserId, currentUserId)
|
||||
.one();
|
||||
|
||||
if (userInterior != null && userInterior.getDeptId() != null) {
|
||||
Department department = departmentService.getById(userInterior.getDeptId());
|
||||
if (department != null && department.getHeadUserId() != null) {
|
||||
QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo()
|
||||
.setTicketId(ticket.getId())
|
||||
.setHandlerUserId(department.getHeadUserId());
|
||||
issueTicketToDoService.save(todoItem);
|
||||
if (userInterior != null && userInterior.getDeptId() != null) {
|
||||
Department department = departmentService.getById(userInterior.getDeptId());
|
||||
if (department != null && department.getHeadUserId() != null) {
|
||||
QmsIssueTicketToDo todoItem = new QmsIssueTicketToDo()
|
||||
.setTicketId(ticket.getId())
|
||||
.setHandlerUserId(department.getHeadUserId());
|
||||
issueTicketToDoService.save(todoItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -23,4 +23,15 @@ public class QmsIssueTicketDispatchMultipleQO {
|
|||
*/
|
||||
@NotEmpty(message = "处理人列表不能为空")
|
||||
private List<Long> handlerUserIds;
|
||||
|
||||
/**
|
||||
* 审批状态(0=通过,1=驳回)
|
||||
*/
|
||||
@NotNull(message = "审批状态不能为空")
|
||||
private Short approvalStatus;
|
||||
|
||||
/**
|
||||
* 审批意见
|
||||
*/
|
||||
private String approvalOpinion;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -132,6 +132,16 @@ public class QmsInspectionTicketDetailVO {
|
|||
*/
|
||||
private String rootCause;
|
||||
|
||||
/**
|
||||
* 负责人审批状态(qms_issue_ticket表)
|
||||
*/
|
||||
private Short responsiblePersonApprovalStatus;
|
||||
|
||||
/**
|
||||
* 负责人审批意见(qms_issue_ticket表)
|
||||
*/
|
||||
private String responsiblePersonApprovalComments;
|
||||
|
||||
/**
|
||||
* 文件详情
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in New Issue