流程节点全部展示

This commit is contained in:
ys.git 2025-12-24 18:32:06 +08:00
parent 29ac6ab56a
commit ba487af6e2
6 changed files with 248 additions and 46 deletions

View File

@ -42,7 +42,7 @@ public class PermissionController {
try {
modelRoleService.addRoles(request);
} catch (Exception e) {
throw new RuntimeException("添加失败:检查是否存在重复角色(名称+代码)" + e.getMessage());
throw new RuntimeException("添加失败:检查是否存在重复角色(代码)" + e.getMessage());
}
return Response.ok();
}

View File

@ -6,7 +6,8 @@ import java.util.ArrayList;
@Data
public class ActivitiDataAndRecordDTO {
private String approvalStatus;
private String processTitle;
private ArrayList<ActivitiDataDTO> activitiDataDTOS;
private ArrayList<ActivitiRecordDTO> activitiRecordDTOS;

View File

@ -14,8 +14,11 @@ public class ActivitiRecordDTO {
private String node;
/**
* 审批人
* 所有
*/
private String unapprovedPerson;
//已审批人
private String approverPersons;
/**

View File

@ -581,49 +581,247 @@ public class ActivitiProcessServiceImpl implements ActivitiProcessService {
List<ParamApprovalRecordPojo> paramApprovalRecordPojos = sw.buildFromDatasource("xdap_app_223770822127386625")
.eq("approval_id", approvalId)
.doQuery(ParamApprovalRecordPojo.class);
for (ParamApprovalRecordPojo paramApprovalRecordPojo : paramApprovalRecordPojos) {
String approverPerson = paramApprovalRecordPojo.getAssignee();
//获取配置
List<ApprovalConfigPojo> approvalConfigPojos = sw.buildFromDatasource("xdap_app_223770822127386625")
.eq("approval_id", approvalId)
.doQuery(ApprovalConfigPojo.class);
// for (ApprovalConfigPojo approvalConfigPojo : approvalConfigPojos) {
// String nodeName = approvalConfigPojo.getNodeName();
// paramApprovalRecordPojos.stream().forEach(x -> {
// if (x.getNodeName().equals(nodeName)) {
//
// }
// });
// if ("会签".equals(nodeName)) {
//
// }
// approvalConfigPojo.getAssignees()
// }
// 存储已审批的人员信息
Map<String, List<ActivitiRecordDTO>> approvedPersonsByNode = new HashMap<>();
List<ActivitiRecordDTO> dtos = new ArrayList<>();
for (ParamApprovalRecordPojo record : paramApprovalRecordPojos) {
ActivitiRecordDTO activitiRecordDTO = new ActivitiRecordDTO();
activitiRecordDTO.setNode(paramApprovalRecordPojo.getNodeName());
activitiRecordDTO.setApproverPersons(approverPerson);
activitiRecordDTO.setCommon(paramApprovalRecordPojo.getApprovalComment());
activitiRecordDTO.setNodeOrder(paramApprovalRecordPojo.getNodeOrder());
activitiRecordDTO.setOperateTime(paramApprovalRecordPojo.getOperateTime());
activitiRecordDTO.setOperate(paramApprovalRecordPojo.getOperator());
activitiRecordDTOS.add(activitiRecordDTO);
activitiRecordDTO.setNode(record.getNodeName());
activitiRecordDTO.setApproverPersons(record.getAssignee());
activitiRecordDTO.setCommon(record.getApprovalComment());
activitiRecordDTO.setNodeOrder(record.getNodeOrder());
activitiRecordDTO.setOperateTime(record.getOperateTime());
activitiRecordDTO.setOperate(record.getOperator());
dtos.add(activitiRecordDTO);
if (!approvedPersonsByNode.containsKey(record.getNodeName())) {
approvedPersonsByNode.put(record.getNodeName(), new ArrayList<>());
}
//找到下一级审批人
List<EngineReviewListPojo> engineReviewListPojos = sw.buildFromDatasource("xdap_app_223770822127386625")
.eq("id", approvalId).doQuery(EngineReviewListPojo.class);
if (ObjectUtils.isNotEmpty(engineReviewListPojos)) {
EngineReviewListPojo engineReviewListPojo = engineReviewListPojos.get(0);
if (StringUtils.isNotEmpty(engineReviewListPojo.getApproverPersons())) {
ActivitiRecordDTO recordNextApprover = new ActivitiRecordDTO();
recordNextApprover.setApproverPersons(engineReviewListPojo.getApproverPersons());
recordNextApprover.setCommon("");
recordNextApprover.setNode("待审批");
recordNextApprover.setNodeOrder(999);
activitiRecordDTOS.add(recordNextApprover);
}
}
ArrayList<ActivitiRecordDTO> activitiRecordDTOS1 = new ArrayList<>();
//将activitiRecordDTOS数据的ID改为姓名
for (ActivitiRecordDTO activitiRecordDTO : activitiRecordDTOS) {
ArrayList<String> strings = new ArrayList<>();
for (String id : Arrays.stream(activitiRecordDTO.getApproverPersons().split(",")).collect(Collectors.toList())) {
XdapUsers XdapUsers = xdapDeptUsersService.selectUserByID(id);
if (ObjectUtils.isNotEmpty(XdapUsers)) {
String username = XdapUsers.getUsername();
strings.add(username);
}
}
ActivitiRecordDTO activitiRecordDTO1 = new ActivitiRecordDTO();
BeanUtils.copyProperties(activitiRecordDTO, activitiRecordDTO1);
activitiRecordDTO1.setApproverPersons(String.join(",", strings));
activitiRecordDTOS1.add(activitiRecordDTO1);
approvedPersonsByNode.get(record.getNodeName()).add(activitiRecordDTO);
}
activitiDataAndRecordDTO.setActivitiRecordDTOS(activitiRecordDTOS1);
// 存储未审批的人员信息
Map<String, List<ActivitiRecordDTO>> pendingPersonsByNode = new HashMap<>();
for (ApprovalConfigPojo config : approvalConfigPojos) {
String nodeName = config.getNodeName();
String assignees = config.getAssignees();
ActivitiRecordDTO activitiRecordDTO = new ActivitiRecordDTO();
activitiRecordDTO.setNode(nodeName);
activitiRecordDTO.setApproverPersons(assignees);
activitiRecordDTO.setNodeOrder(config.getNodeOrder());
activitiRecordDTO.setOperate("待审批");
// 将逗号分隔的审批人列表转换为数组
List<String> allAssignees = Arrays.asList(assignees.split(","));
// 获取该节点已审批的人员
List<ActivitiRecordDTO> approvedPersons = approvedPersonsByNode.getOrDefault(nodeName, new ArrayList<>());
List<String> strings = approvedPersons.stream().map(x -> x.getApproverPersons()).collect(Collectors.toList());
// 找出未审批的人员
List<ActivitiRecordDTO> pending = new ArrayList<>();
for (String assignee : allAssignees) {
if (!strings.contains(assignee.trim())) {
pending.add(activitiRecordDTO);
}
}
if (!pending.isEmpty()) {
dtos.add(activitiRecordDTO);
}
}
for (ActivitiRecordDTO dto : dtos) {
System.out.println(dto);
}
System.out.println("-------------");
// 将所有ActivitiRecordDTO对象按照node节点分组
Map<String, List<ActivitiRecordDTO>> dtosByNode = dtos.stream()
.collect(Collectors.groupingBy(ActivitiRecordDTO::getNode));
// 遍历dtosByNode生成新的ActivitiRecordDTO同一节点的审批人放在approverPersons字符串中所有审批人放在unapprovedPersons中
List<ActivitiRecordDTO> mergedDtos = new ArrayList<>();
for (Map.Entry<String, List<ActivitiRecordDTO>> entry : dtosByNode.entrySet()) {
String nodeName = entry.getKey();
List<ActivitiRecordDTO> nodeDtos = entry.getValue();
ActivitiRecordDTO mergedDto = new ActivitiRecordDTO();
mergedDto.setNode(nodeName);
//找到所有审批人
List<ApprovalConfigPojo> collect = approvalConfigPojos.stream().filter(x -> nodeName.equals(x.getNodeName())).collect(Collectors.toList());
String assignees = "";
if (ObjectUtils.isNotEmpty(collect)) {
assignees = collect.get(0).getAssignees();
}
// 分离已审批和未审批的人员
List<String> approvedPersons = new ArrayList<>();
List<String> unapprovedPersons = new ArrayList<>();
StringBuilder stringBuilder = new StringBuilder();
Date operateTime = null;
for (ActivitiRecordDTO dto : nodeDtos) {
String approver = dto.getApproverPersons();
String operate = dto.getOperate();
if (!"待审批".equals(operate)) {
// 已审批人员
if (StringUtils.isNotEmpty(approver)) {
List<String> strings = Arrays.asList(approver.split(",")).stream().map(x -> {
XdapUsers xdapUsers = xdapDeptUsersService.selectUserByID(x);
if (ObjectUtils.isNotEmpty(xdapUsers)) {
return xdapUsers.getUsername();
} else {
return "未知用户名:" + x;
}
}).collect(Collectors.toList());
approvedPersons.addAll(strings);
stringBuilder.append(strings.get(0) + ":" + dto.getCommon() + "");
}
}
mergedDto.setCommon(stringBuilder.toString());
mergedDto.setNodeOrder(dto.getNodeOrder());
mergedDto.setOperate(dto.getOperate());
if (ObjectUtils.isNotEmpty(dto.getOperateTime())) {
operateTime = dto.getOperateTime();
}
}
mergedDto.setOperateTime(operateTime);
// 设置审批人和未审批人
if (!approvedPersons.isEmpty()) {
mergedDto.setApproverPersons(String.join(",", approvedPersons));
}else{
mergedDto.setApproverPersons("");
}
List<String> strings = Arrays.stream(assignees.split(",")).map(x -> {
XdapUsers xdapUsers = xdapDeptUsersService.selectUserByID(x);
if (ObjectUtils.isNotEmpty(xdapUsers)) {
return xdapUsers.getUsername();
} else {
return "未知用户名:" + x;
}
}).collect(Collectors.toList());
if (ObjectUtils.isEmpty(assignees)) {
mergedDto.setUnapprovedPerson(String.join(",", approvedPersons));
} else {
mergedDto.setUnapprovedPerson(String.join(",", strings));
}
// 如果没有任何审批人信息则跳过
if (StringUtils.isNotEmpty(mergedDto.getApproverPersons()) ||
StringUtils.isNotEmpty(mergedDto.getUnapprovedPerson())) {
mergedDtos.add(mergedDto);
}
}
// 使用合并后的数据替换原来的dtos
dtos = mergedDtos;
dtos = dtos.stream().sorted(Comparator.comparing(ActivitiRecordDTO::getNodeOrder)).collect(Collectors.toList());
dtos = dtos.stream().map(x -> {
if ((!x.getUnapprovedPerson().equals(x.getApproverPersons())) && "会签".equals(x.getNode())) {
x.setOperate("待审批");
}
if (ObjectUtils.isNotEmpty(x.getApproverPersons()) && !"会签".equals(x.getNode())
&& !"REJECT".equals(x.getOperate())) {
x.setOperate("PASS");
}
return x;
}).collect(Collectors.toList());
// 已完成审批的节点及人员
// for (Map.Entry<String, List<String>> entry : approvedPersonsByNode.entrySet()) {
// ActivitiRecordDTO activitiRecordDTO = new ActivitiRecordDTO();
// activitiRecordDTO.setNode(entry.getKey());
// ArrayList<String> strings = new ArrayList<>();
// for (String id : entry.getValue()) {
// XdapUsers XdapUsers = xdapDeptUsersService.selectUserByID(id);
// if (ObjectUtils.isNotEmpty(XdapUsers)) {
// String username = XdapUsers.getUsername();
// strings.add(username);
// }
// }
// activitiRecordDTO.setApproverPersons(String.join(",", strings));
//
// activitiRecordDTO.setCommon(paramApprovalRecordPojo.getApprovalComment());
// activitiRecordDTO.setNodeOrder(paramApprovalRecordPojo.getNodeOrder());
// activitiRecordDTO.setOperateTime(paramApprovalRecordPojo.getOperateTime());
// activitiRecordDTO.setOperate(paramApprovalRecordPojo.getOperator());
// activitiRecordDTOS.add(activitiRecordDTO);
//
// System.out.println("节点: " + entry.getKey() + ", 已审批人员: " + String.join(", ", entry.getValue()));
// }
// // 未完成审批的节点及人员
// for (Map.Entry<String, List<String>> entry : pendingPersonsByNode.entrySet()) {
// System.out.println("节点: " + entry.getKey() + ", 未审批人员: " + String.join(", ", entry.getValue()));
// }
//
// for (ParamApprovalRecordPojo paramApprovalRecordPojo : paramApprovalRecordPojos) {
// String approverPerson = paramApprovalRecordPojo.getAssignee();
// ActivitiRecordDTO activitiRecordDTO = new ActivitiRecordDTO();
// activitiRecordDTO.setNode(paramApprovalRecordPojo.getNodeName());
// activitiRecordDTO.setApproverPersons(approverPerson);
// activitiRecordDTO.setCommon(paramApprovalRecordPojo.getApprovalComment());
// activitiRecordDTO.setNodeOrder(paramApprovalRecordPojo.getNodeOrder());
// activitiRecordDTO.setOperateTime(paramApprovalRecordPojo.getOperateTime());
// activitiRecordDTO.setOperate(paramApprovalRecordPojo.getOperator());
// activitiRecordDTOS.add(activitiRecordDTO);
// }
// //找到下一级审批人
// List<EngineReviewListPojo> engineReviewListPojos = sw.buildFromDatasource("xdap_app_223770822127386625")
// .eq("id", approvalId).doQuery(EngineReviewListPojo.class);
//
// if (ObjectUtils.isNotEmpty(engineReviewListPojos)) {
// EngineReviewListPojo engineReviewListPojo = engineReviewListPojos.get(0);
// activitiDataAndRecordDTO.setApprovalStatus(engineReviewListPojo.getStatusDescription());
// if (StringUtils.isNotEmpty(engineReviewListPojo.getApproverPersons())) {
// ActivitiRecordDTO recordNextApprover = new ActivitiRecordDTO();
// recordNextApprover.setApproverPersons(engineReviewListPojo.getApproverPersons());
// recordNextApprover.setCommon("");
// recordNextApprover.setNode("待审批");
// recordNextApprover.setNodeOrder(999);
// activitiRecordDTOS.add(recordNextApprover);
// }
// }
// ArrayList<ActivitiRecordDTO> activitiRecordDTOS1 = new ArrayList<>();
// //将activitiRecordDTOS数据的ID改为姓名
// for (ActivitiRecordDTO activitiRecordDTO : activitiRecordDTOS) {
// ArrayList<String> strings = new ArrayList<>();
// for (String id : Arrays.stream(activitiRecordDTO.getApproverPersons().split(",")).collect(Collectors.toList())) {
// XdapUsers XdapUsers = xdapDeptUsersService.selectUserByID(id);
// if (ObjectUtils.isNotEmpty(XdapUsers)) {
// String username = XdapUsers.getUsername();
// strings.add(username);
// }
// }
// ActivitiRecordDTO activitiRecordDTO1 = new ActivitiRecordDTO();
// BeanUtils.copyProperties(activitiRecordDTO, activitiRecordDTO1);
// activitiRecordDTO1.setApproverPersons(String.join(",", strings));
// activitiRecordDTOS1.add(activitiRecordDTO1);
// }
ArrayList<ActivitiRecordDTO> arrayList1 = new ArrayList<>(dtos);
EngineReviewListPojo engineReviewListPojos = sw.buildFromDatasource("xdap_app_223770822127386625")
.eq("id", approvalId).doQueryFirst(EngineReviewListPojo.class);
activitiDataAndRecordDTO.setApprovalStatus(engineReviewListPojos.getStatusDescription());
activitiDataAndRecordDTO.setProcessTitle(engineReviewListPojos.getProcessTopic());
activitiDataAndRecordDTO.setActivitiRecordDTOS(arrayList1);
return activitiDataAndRecordDTO;
}

View File

@ -537,7 +537,7 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
todoTaskPojo.setDataType(CurrentNodeEnum.REPAIR.getDesc());
todoTaskPojo.setVersionNumber(modelPojo.getVersionNumber());
todoTaskPojo.setOwnerId(filledBy);
todoTaskPojo.setCurrentProcessor(JSON.toJSONString(filledBy));
todoTaskPojo.setCurrentProcessor(JSON.toJSONString(Arrays.asList(filledBy)));
todoTaskPojo.setIsDelete(0);
todoTaskPojo.setCreatedBy(ObjectUtils.isNotEmpty(XdapUsers) ? XdapUsers.getUsername() : "");
todoTaskPojos.add(todoTaskPojo);

View File

@ -205,7 +205,7 @@ public class TodoTaskServiceImpl implements TodoTaskService {
todoTaskPojo.setDocumentNo(UUID.randomUUID().toString());
todoTaskPojo.setProcessTitle("分发责任人");
todoTaskPojo.setCurrentNode("待分解");
todoTaskPojo.setCurrentProcessor(JSON.toJSONString(engineParamDetailDTO.getResPersonId()));
todoTaskPojo.setCurrentProcessor(JSON.toJSONString(Arrays.asList(engineParamDetailDTO.getResPersonId())));
todoTaskPojo.setStatusCode(null/*String.valueOf(ParamValueVersionEnum.DRAFT.getCode())*/);
todoTaskPojo.setModelName(ObjectUtils.isNotEmpty(modelPojo) ? modelPojo.getModelName() : "");
todoTaskPojo.setModelId(modelId);