fix 81700 优化流程监控查询速度
This commit is contained in:
@@ -162,7 +162,6 @@ public class ProcessAll {
|
||||
/**
|
||||
* 接收任务时间
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
@ApiModelProperty(value="接收任务时间")
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
@@ -171,7 +170,6 @@ public class ProcessAll {
|
||||
/**
|
||||
* 接收任务时间
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
@ApiModelProperty(value="完成任务时间")
|
||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
||||
|
||||
+15
@@ -115,6 +115,7 @@ public class MyGlobalEventListener implements ActivitiEventListener {
|
||||
//任务创建时,清除pass
|
||||
delegateTask.removeVariable("pass");
|
||||
//流程审批信息
|
||||
ProcessAllService processAllService = SpringContextUtil.getBean(ProcessAllService.class);
|
||||
ProcessApprovalRecordService recordService = SpringContextUtil.getBean(ProcessApprovalRecordService.class);
|
||||
ProcessNodeService processNodeService = SpringContextUtil.getBean(ProcessNodeService.class);
|
||||
log.info("id = " + delegateTask.getId());
|
||||
@@ -151,6 +152,12 @@ public class MyGlobalEventListener implements ActivitiEventListener {
|
||||
approvalRecord.setCreateTime(createTime);
|
||||
approvalRecord.setNodeId(taskDefinitionKey);
|
||||
recordService.save(approvalRecord);
|
||||
//更新最新接受任务时间
|
||||
ProcessAll processAll = processAllService.getByProcessInstanceId(processInstanceId);
|
||||
LambdaUpdateWrapper<ProcessAll> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
updateWrapper.eq(ProcessAll::getId,processAll.getId());
|
||||
updateWrapper.set(ProcessAll::getReceivedTaskTime,createTime);
|
||||
processAllService.update(updateWrapper);
|
||||
|
||||
// 对接统一平台生成待办任务
|
||||
PushWorkflowIntegrationAPI pushWorkflowIntegrationAPI = SpringContextUtil.getBean(PushWorkflowIntegrationAPI.class);
|
||||
@@ -188,6 +195,7 @@ public class MyGlobalEventListener implements ActivitiEventListener {
|
||||
log.info("execution.getActivityId() = " + execution.getActivityId());
|
||||
log.info("taskEntity.getVariables() = " + delegateTask.getVariables());
|
||||
//流程审批信息转办
|
||||
ProcessAllService processAllService = SpringContextUtil.getBean(ProcessAllService.class);
|
||||
ProcessApprovalRecordService recordService = SpringContextUtil.getBean(ProcessApprovalRecordService.class);
|
||||
String taskId = delegateTask.getId();
|
||||
String assignee = delegateTask.getAssignee();
|
||||
@@ -237,6 +245,13 @@ public class MyGlobalEventListener implements ActivitiEventListener {
|
||||
}
|
||||
|
||||
recordService.updateById(approvalRecord);
|
||||
//更新最新完成任务时间
|
||||
ProcessAll processAll = processAllService.getByProcessInstanceId(delegateTask.getProcessInstanceId());
|
||||
LambdaUpdateWrapper<ProcessAll> updateWrapper = new LambdaUpdateWrapper<>();
|
||||
updateWrapper.eq(ProcessAll::getId,processAll.getId());
|
||||
updateWrapper.set(ProcessAll::getCompletedTaskTime,date);
|
||||
processAllService.update(updateWrapper);
|
||||
|
||||
// 对接统一平台生成完成任务
|
||||
PushWorkflowIntegrationAPI pushWorkflowIntegrationAPI = SpringContextUtil.getBean(PushWorkflowIntegrationAPI.class);
|
||||
List<HiworkTodoAdd> list = new ArrayList<>();
|
||||
|
||||
+46
-42
@@ -19,39 +19,44 @@
|
||||
</select>
|
||||
|
||||
<select id="getCompletedList" resultType="com.jero.modules.activiti.entity.ProcessAll">
|
||||
select pa.*,
|
||||
max(par.create_time) as receivedTaskTime,
|
||||
max(par.end_time) as completedTaskTime
|
||||
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
|
||||
left join process_approval_record par on pa.process_instance_id = par.process_instance_id
|
||||
${ew.customSqlSegment}
|
||||
left join process_approval_record par on pa.process_instance_id = par.process_instance_id
|
||||
${ew.customSqlSegment}
|
||||
<include refid="order"/>
|
||||
</select>
|
||||
|
||||
<!-- <select id="getCompletedList" resultType="com.jero.modules.activiti.entity.ProcessAll">-->
|
||||
<!-- select p.*,-->
|
||||
<!-- group_concat(par.user_id) as handleUserId-->
|
||||
<!-- from (-->
|
||||
<!-- select pa.*,-->
|
||||
<!-- max(par.create_time) as receivedTaskTime,-->
|
||||
<!-- max(par.end_time) as completedTaskTime-->
|
||||
<!-- from process_all pa-->
|
||||
<!-- left join process_approval_record par on pa.process_instance_id = par.process_instance_id-->
|
||||
<!-- ${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-->
|
||||
<!-- <include refid="order"/>-->
|
||||
<!-- </select>-->
|
||||
|
||||
<select id="getSentList" resultType="com.jero.modules.activiti.entity.ProcessAll">
|
||||
select p.*, group_concat(par.user_id) as handleUserId
|
||||
from (
|
||||
select pa.*, max(par.create_time) as receivedTaskTime, max(par.end_time) as completedTaskTime, par.node_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 as receivedTaskTime,
|
||||
pa.completed_task_time
|
||||
from process_all pa
|
||||
left join process_approval_record par on pa.process_instance_id = par.process_instance_id
|
||||
${ew.customSqlSegment}
|
||||
) p
|
||||
LEFT JOIN (
|
||||
@@ -62,23 +67,22 @@
|
||||
</select>
|
||||
|
||||
<select id="getAllList" resultType="com.jero.modules.activiti.entity.ProcessAll">
|
||||
select p.*, case
|
||||
when p.prc_status = 1 then group_concat(par.user_id)
|
||||
when p.prc_status = 3 then group_concat(par2.user_id)
|
||||
end as handleUserId
|
||||
from (
|
||||
select pa.*, max(par.create_time) as receivedTaskTime, max(par.end_time) as completedTaskTime, par.node_id
|
||||
from process_all pa
|
||||
left join process_approval_record par on pa.process_instance_id = par.process_instance_id
|
||||
${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
|
||||
LEFT JOIN (
|
||||
SELECT user_id,process_instance_id from process_approval_record WHERE finish_flag = 4
|
||||
) par2 ON p.process_instance_id = par2.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 as receivedTaskTime,
|
||||
pa.completed_task_time
|
||||
from process_all pa
|
||||
${ew.customSqlSegment}
|
||||
<include refid="order"/>
|
||||
</select>
|
||||
</mapper>
|
||||
+36
-1
@@ -127,7 +127,42 @@ public class ProcessAllService extends ServiceImpl<ProcessAllMapper, ProcessAll>
|
||||
public IPage<ProcessAll> getAllList(Page<ProcessAll> page, QueryWrapper<ProcessAll> queryWrapper, HttpServletRequest req) {
|
||||
String column = req.getParameter("column");
|
||||
String order = req.getParameter("order");
|
||||
return processAllMapper.getAllList(page,queryWrapper,column,order);
|
||||
IPage<ProcessAll> allList = processAllMapper.getAllList(page, queryWrapper, column, order);
|
||||
List<ProcessAll> records = allList.getRecords();
|
||||
|
||||
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(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(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);
|
||||
|
||||
for (ProcessAll record : records) {
|
||||
if (ProcessStatusEnum.INCOMPLETE.getValue().equals(record.getPrcStatus())) {
|
||||
record.setHandleUserId(incompleteUserMap.get(record.getProcessInstanceId()));
|
||||
}
|
||||
if (ProcessStatusEnum.WITHDRAWN.getValue().equals(record.getPrcStatus())) {
|
||||
record.setHandleUserId(withdrawnUserMap.get(record.getProcessInstanceId()));
|
||||
}
|
||||
}
|
||||
return allList;
|
||||
}
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void forcedWithdrawal(String processInstanceId) {
|
||||
|
||||
Reference in New Issue
Block a user