perf: 监控流程性能提升
This commit is contained in:
+1
-2
@@ -125,9 +125,8 @@ public class WorkCenterController {
|
||||
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
|
||||
HttpServletRequest req) {
|
||||
QueryWrapper<ProcessAll> queryWrapper = getProcessAllQueryWrapper(processAll, true);
|
||||
queryWrapper.like(StrUtil.isNotBlank(processAll.getCreateUserName()),"CONCAT(u.realname, '(', u.username, ')')", processAll.getCreateUserName());
|
||||
Page<ProcessAll> page = new Page<>(pageNo, pageSize);
|
||||
IPage<ProcessAll> sentList = processAllService.getAllList(page, queryWrapper, req);
|
||||
IPage<ProcessAll> sentList = processAllService.getAllList(page, queryWrapper, req, processAll);
|
||||
return Result.OK(sentList);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ public interface ProcessAllMapper extends BaseMapper<ProcessAll> {
|
||||
|
||||
IPage<ProcessAll> getSentList(Page<ProcessAll> page, @Param(Constants.WRAPPER) QueryWrapper<ProcessAll> queryWrapper, @Param("column") String column, @Param("order") String order);
|
||||
|
||||
IPage<ProcessAll> getAllList(Page<ProcessAll> page, @Param(Constants.WRAPPER) QueryWrapper<ProcessAll> queryWrapper, @Param("column") String column, @Param("order") String order);
|
||||
IPage<ProcessAll> getAllList(Page<ProcessAll> page, @Param(Constants.WRAPPER) QueryWrapper<ProcessAll> queryWrapper, @Param("column") String column, @Param("order") String order, @Param("pa") ProcessAll processAll);
|
||||
|
||||
int physicalDeleteByProjectId(@Param("tableName") String tableName, @Param("projectId") String projectId);
|
||||
|
||||
|
||||
+16
-14
@@ -98,22 +98,24 @@
|
||||
|
||||
<select id="getAllList" resultType="com.jero.modules.activiti.entity.ProcessAll">
|
||||
select pa.id,
|
||||
pa.prc_name,
|
||||
pa.process_definition_id,
|
||||
pa.process_instance_id,
|
||||
pa.prc_mes,
|
||||
pa.prc_num,
|
||||
pa.create_user_id,
|
||||
pa.prc_type,
|
||||
pa.prc_status,
|
||||
pa.end_time,
|
||||
pa.over_time,
|
||||
pa.project_id,
|
||||
pa.received_task_time,
|
||||
pa.completed_task_time
|
||||
pa.prc_name,
|
||||
pa.process_definition_id,
|
||||
pa.process_instance_id,
|
||||
pa.prc_mes,
|
||||
pa.prc_num,
|
||||
pa.create_user_id,
|
||||
pa.prc_type,
|
||||
pa.prc_status,
|
||||
pa.end_time,
|
||||
pa.over_time,
|
||||
pa.project_id,
|
||||
pa.received_task_time,
|
||||
pa.completed_task_time
|
||||
from process_all pa
|
||||
<if test="pa.createUserName != null and pa.createUserName != ''">
|
||||
left join sys_user u on u.id = pa.create_user_id
|
||||
${ew.customSqlSegment}
|
||||
</if>
|
||||
${ew.customSqlSegment}
|
||||
<include refid="order"/>
|
||||
</select>
|
||||
</mapper>
|
||||
+49
-29
@@ -161,48 +161,68 @@ public class ProcessAllService extends ServiceImpl<ProcessAllMapper, ProcessAll>
|
||||
return sentList;
|
||||
}
|
||||
|
||||
public IPage<ProcessAll> getAllList(Page<ProcessAll> page, QueryWrapper<ProcessAll> queryWrapper, HttpServletRequest req) {
|
||||
public IPage<ProcessAll> getAllList(Page<ProcessAll> page, QueryWrapper<ProcessAll> queryWrapper, HttpServletRequest req, ProcessAll processAll) {
|
||||
queryWrapper.like(StrUtil.isNotBlank(processAll.getCreateUserName()),"CONCAT(u.realname, '(', u.username, ')')", processAll.getCreateUserName());
|
||||
String column = req.getParameter("column");
|
||||
String order = req.getParameter("order");
|
||||
IPage<ProcessAll> allList = processAllMapper.getAllList(page, queryWrapper, column, order);
|
||||
IPage<ProcessAll> allList = processAllMapper.getAllList(page, queryWrapper, column, order, processAll);
|
||||
List<ProcessAll> records = allList.getRecords();
|
||||
if (records.isEmpty()){
|
||||
|
||||
if (records.isEmpty()) {
|
||||
return allList;
|
||||
}
|
||||
List<String> incompleteCollect = records.stream().filter(item -> ProcessStatusEnum.INCOMPLETE.getValue().equals(item.getPrcStatus())).map(ProcessAll::getProcessInstanceId).collect(Collectors.toList());
|
||||
List<ProcessApprovalRecord> incompleteRecordList = new ArrayList<>();
|
||||
if (!incompleteCollect.isEmpty()) {
|
||||
QueryWrapper<ProcessApprovalRecord> wrapper = new QueryWrapper<>();
|
||||
wrapper.select("process_instance_id","group_concat(distinct user_id) as user_id");
|
||||
wrapper.lambda().in(ProcessApprovalRecord::getProcessInstanceId,incompleteCollect)
|
||||
.eq(ProcessApprovalRecord::getFinishFlag,FinishFlagEnum.INCOMPLETE.getValue())
|
||||
.groupBy(ProcessApprovalRecord::getProcessInstanceId);
|
||||
incompleteRecordList = approvalRecordService.list(wrapper);
|
||||
}
|
||||
Map<String, String> incompleteUserMap = CollStreamUtil.toMap(incompleteRecordList, ProcessApprovalRecord::getProcessInstanceId, ProcessApprovalRecord::getUserId);
|
||||
|
||||
List<String> withdrawnCollect = records.stream().filter(item -> ProcessStatusEnum.WITHDRAWN.getValue().equals(item.getPrcStatus())).map(ProcessAll::getProcessInstanceId).collect(Collectors.toList());
|
||||
List<ProcessApprovalRecord> withdrawnRecordList = new ArrayList<>();
|
||||
if (!withdrawnCollect.isEmpty()){
|
||||
QueryWrapper<ProcessApprovalRecord> wrapper1 = new QueryWrapper<>();
|
||||
wrapper1.select("process_instance_id","group_concat(distinct user_id) as user_id");
|
||||
wrapper1.lambda().in(ProcessApprovalRecord::getProcessInstanceId,withdrawnCollect)
|
||||
.eq(ProcessApprovalRecord::getFinishFlag,FinishFlagEnum.WITHDRAWN.getValue())
|
||||
.groupBy(ProcessApprovalRecord::getProcessInstanceId);
|
||||
withdrawnRecordList = approvalRecordService.list(wrapper1);
|
||||
}
|
||||
Map<String, String> withdrawnUserMap = CollStreamUtil.toMap(withdrawnRecordList, ProcessApprovalRecord::getProcessInstanceId, ProcessApprovalRecord::getUserId);
|
||||
// 分别收集 INCOMPLETE 和 WITHDRAWN 状态的实例ID
|
||||
Map<Integer, List<String>> statusCollect = records.parallelStream()
|
||||
.filter(item -> item.getPrcStatus() != null)
|
||||
.collect(Collectors.groupingBy(ProcessAll::getPrcStatus,
|
||||
Collectors.mapping(ProcessAll::getProcessInstanceId, Collectors.toList())));
|
||||
|
||||
for (ProcessAll record : records) {
|
||||
// 获取不完整的审批记录
|
||||
List<ProcessApprovalRecord> incompleteRecordList = fetchApprovalRecords(
|
||||
statusCollect.getOrDefault(ProcessStatusEnum.INCOMPLETE.getValue(), Collections.emptyList()),
|
||||
FinishFlagEnum.INCOMPLETE.getValue());
|
||||
|
||||
// 获取撤回的审批记录
|
||||
List<ProcessApprovalRecord> withdrawnRecordList = fetchApprovalRecords(
|
||||
statusCollect.getOrDefault(ProcessStatusEnum.WITHDRAWN.getValue(), Collections.emptyList()),
|
||||
FinishFlagEnum.WITHDRAWN.getValue());
|
||||
|
||||
// 将不完整和撤回的审批记录映射到ProcessInstanceId -> UserId
|
||||
Map<String, String> incompleteUserMap = toUserMap(incompleteRecordList);
|
||||
Map<String, String> withdrawnUserMap = toUserMap(withdrawnRecordList);
|
||||
|
||||
// 更新记录的 HandleUserId
|
||||
records.parallelStream().forEach(record -> {
|
||||
if (ProcessStatusEnum.INCOMPLETE.getValue().equals(record.getPrcStatus())) {
|
||||
record.setHandleUserId(incompleteUserMap.get(record.getProcessInstanceId()));
|
||||
}
|
||||
if (ProcessStatusEnum.WITHDRAWN.getValue().equals(record.getPrcStatus())) {
|
||||
} else if (ProcessStatusEnum.WITHDRAWN.getValue().equals(record.getPrcStatus())) {
|
||||
record.setHandleUserId(withdrawnUserMap.get(record.getProcessInstanceId()));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return allList;
|
||||
}
|
||||
|
||||
private List<ProcessApprovalRecord> fetchApprovalRecords(List<String> processInstanceIds, Integer finishFlag) {
|
||||
if (processInstanceIds.isEmpty()) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
QueryWrapper<ProcessApprovalRecord> wrapper = new QueryWrapper<>();
|
||||
wrapper.select("process_instance_id", "group_concat(distinct user_id) as user_id");
|
||||
wrapper.lambda().in(ProcessApprovalRecord::getProcessInstanceId, processInstanceIds)
|
||||
.eq(ProcessApprovalRecord::getFinishFlag, finishFlag)
|
||||
.groupBy(ProcessApprovalRecord::getProcessInstanceId);
|
||||
|
||||
return approvalRecordService.list(wrapper);
|
||||
}
|
||||
|
||||
private Map<String, String> toUserMap(List<ProcessApprovalRecord> recordList) {
|
||||
return recordList.parallelStream()
|
||||
.collect(Collectors.toMap(ProcessApprovalRecord::getProcessInstanceId, ProcessApprovalRecord::getUserId));
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void forcedWithdrawal(String processInstanceId) {
|
||||
//获得流程总表
|
||||
|
||||
Reference in New Issue
Block a user