fix 优化流程中心查询速度

This commit is contained in:
lijiarao
2024-02-05 10:16:23 +08:00
parent 8e470eeb46
commit 32beb17997
2 changed files with 67 additions and 36 deletions
@@ -2,20 +2,45 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jero.modules.activiti.mapper.ProcessAllMapper">
<sql id="order">
<!--@sql select create_time as receivedTaskTime from process_all -->
<!--@sql select create_time as received_task_time from process_all pa -->
<if test="column == 'receivedTaskTime'">
order by receivedTaskTime
order by received_task_time
<if test="order == 'desc'">
desc
</if>
</if>
</sql>
<sql id="order1">
<!--@sql select create_time as received_task_time from process_all par -->
<if test="column == 'receivedTaskTime'">
order by par.create_time
<if test="order == 'desc'">
desc
</if>
</if>
</sql>
<select id="getTodoList" resultType="com.jero.modules.activiti.entity.ProcessAll">
select pa.*,par.create_time as receivedTaskTime,par.task_id,par.task_name, par.node_id, par.over_due
from process_all pa
left join process_approval_record par on pa.process_instance_id = par.process_instance_id
${ew.customSqlSegment}
<include refid="order"/>
select par.create_time as received_task_time,
par.task_id,
par.task_name,
par.node_id,
par.over_due,
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
from process_approval_record par
left join process_all pa on pa.process_instance_id = par.process_instance_id
${ew.customSqlSegment}
<include refid="order1"/>
</select>
<select id="getCompletedList" resultType="com.jero.modules.activiti.entity.ProcessAll">
@@ -31,7 +56,7 @@
pa.end_time,
pa.over_time,
pa.project_id,
pa.received_task_time as receivedTaskTime,
pa.received_task_time,
pa.completed_task_time
from process_all pa
left join process_approval_record par on pa.process_instance_id = par.process_instance_id
@@ -40,29 +65,22 @@
</select>
<select id="getSentList" resultType="com.jero.modules.activiti.entity.ProcessAll">
select p.*, group_concat(par.user_id) as handleUserId
from (
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 as receivedTaskTime,
pa.completed_task_time
from process_all pa
${ew.customSqlSegment}
) p
LEFT JOIN (
SELECT user_id,process_instance_id from process_approval_record WHERE finish_flag = 1
) par ON p.process_instance_id = par.process_instance_id
group by p.process_instance_id
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
from process_all pa
${ew.customSqlSegment}
<include refid="order"/>
</select>
@@ -79,7 +97,7 @@
pa.end_time,
pa.over_time,
pa.project_id,
pa.received_task_time as receivedTaskTime,
pa.received_task_time,
pa.completed_task_time
from process_all pa
${ew.customSqlSegment}
@@ -105,7 +105,7 @@ public class ProcessAllService extends ServiceImpl<ProcessAllMapper, ProcessAll>
List<ProcessAll> records = completedList.getRecords();
List<String> collect = records.stream().map(ProcessAll::getProcessInstanceId).collect(Collectors.toList());
QueryWrapper<ProcessApprovalRecord> wrapper = new QueryWrapper<>();
wrapper.select("process_instance_id","group_concat(user_id) as user_id");
wrapper.select("process_instance_id","group_concat(distinct user_id) as user_id");
wrapper.lambda().in(ProcessApprovalRecord::getProcessInstanceId,collect)
.eq(ProcessApprovalRecord::getFinishFlag,FinishFlagEnum.INCOMPLETE.getValue())
.eq(ProcessApprovalRecord::getOverDue, YesOrNoEnum.NO.getValue())
@@ -121,7 +121,20 @@ public class ProcessAllService extends ServiceImpl<ProcessAllMapper, ProcessAll>
public IPage<ProcessAll> getSentList(Page<ProcessAll> page, QueryWrapper<ProcessAll> queryWrapper, HttpServletRequest req) {
String column = req.getParameter("column");
String order = req.getParameter("order");
return processAllMapper.getSentList(page,queryWrapper,column,order);
IPage<ProcessAll> sentList = processAllMapper.getSentList(page, queryWrapper, column, order);
List<ProcessAll> records = sentList.getRecords();
List<String> collect = records.stream().map(ProcessAll::getProcessInstanceId).collect(Collectors.toList());
QueryWrapper<ProcessApprovalRecord> wrapper = new QueryWrapper<>();
wrapper.select("process_instance_id","group_concat(distinct user_id) as user_id");
wrapper.lambda().in(ProcessApprovalRecord::getProcessInstanceId,collect)
.eq(ProcessApprovalRecord::getFinishFlag,FinishFlagEnum.INCOMPLETE.getValue())
.groupBy(ProcessApprovalRecord::getProcessInstanceId);
List<ProcessApprovalRecord> approvalRecordList = approvalRecordService.list(wrapper);
Map<String, String> userMap = CollStreamUtil.toMap(approvalRecordList, ProcessApprovalRecord::getProcessInstanceId, ProcessApprovalRecord::getUserId);
for (ProcessAll record : records) {
record.setHandleUserId(userMap.get(record.getProcessInstanceId()));
}
return sentList;
}
public IPage<ProcessAll> getAllList(Page<ProcessAll> page, QueryWrapper<ProcessAll> queryWrapper, HttpServletRequest req) {
@@ -134,7 +147,7 @@ public class ProcessAllService extends ServiceImpl<ProcessAllMapper, ProcessAll>
List<ProcessApprovalRecord> incompleteRecordList = new ArrayList<>();
if (!incompleteCollect.isEmpty()) {
QueryWrapper<ProcessApprovalRecord> wrapper = new QueryWrapper<>();
wrapper.select("process_instance_id","group_concat(user_id) as user_id");
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);
@@ -146,7 +159,7 @@ public class ProcessAllService extends ServiceImpl<ProcessAllMapper, ProcessAll>
List<ProcessApprovalRecord> withdrawnRecordList = new ArrayList<>();
if (!withdrawnCollect.isEmpty()){
QueryWrapper<ProcessApprovalRecord> wrapper1 = new QueryWrapper<>();
wrapper1.select("process_instance_id","group_concat(user_id) as user_id");
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);