fix 81700 优化流程监控查询速度
This commit is contained in:
@@ -162,7 +162,6 @@ public class ProcessAll {
|
|||||||
/**
|
/**
|
||||||
* 接收任务时间
|
* 接收任务时间
|
||||||
*/
|
*/
|
||||||
@TableField(exist = false)
|
|
||||||
@ApiModelProperty(value="接收任务时间")
|
@ApiModelProperty(value="接收任务时间")
|
||||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
@DateTimeFormat(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="完成任务时间")
|
@ApiModelProperty(value="完成任务时间")
|
||||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
@DateTimeFormat(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
|
//任务创建时,清除pass
|
||||||
delegateTask.removeVariable("pass");
|
delegateTask.removeVariable("pass");
|
||||||
//流程审批信息
|
//流程审批信息
|
||||||
|
ProcessAllService processAllService = SpringContextUtil.getBean(ProcessAllService.class);
|
||||||
ProcessApprovalRecordService recordService = SpringContextUtil.getBean(ProcessApprovalRecordService.class);
|
ProcessApprovalRecordService recordService = SpringContextUtil.getBean(ProcessApprovalRecordService.class);
|
||||||
ProcessNodeService processNodeService = SpringContextUtil.getBean(ProcessNodeService.class);
|
ProcessNodeService processNodeService = SpringContextUtil.getBean(ProcessNodeService.class);
|
||||||
log.info("id = " + delegateTask.getId());
|
log.info("id = " + delegateTask.getId());
|
||||||
@@ -151,6 +152,12 @@ public class MyGlobalEventListener implements ActivitiEventListener {
|
|||||||
approvalRecord.setCreateTime(createTime);
|
approvalRecord.setCreateTime(createTime);
|
||||||
approvalRecord.setNodeId(taskDefinitionKey);
|
approvalRecord.setNodeId(taskDefinitionKey);
|
||||||
recordService.save(approvalRecord);
|
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);
|
PushWorkflowIntegrationAPI pushWorkflowIntegrationAPI = SpringContextUtil.getBean(PushWorkflowIntegrationAPI.class);
|
||||||
@@ -188,6 +195,7 @@ public class MyGlobalEventListener implements ActivitiEventListener {
|
|||||||
log.info("execution.getActivityId() = " + execution.getActivityId());
|
log.info("execution.getActivityId() = " + execution.getActivityId());
|
||||||
log.info("taskEntity.getVariables() = " + delegateTask.getVariables());
|
log.info("taskEntity.getVariables() = " + delegateTask.getVariables());
|
||||||
//流程审批信息转办
|
//流程审批信息转办
|
||||||
|
ProcessAllService processAllService = SpringContextUtil.getBean(ProcessAllService.class);
|
||||||
ProcessApprovalRecordService recordService = SpringContextUtil.getBean(ProcessApprovalRecordService.class);
|
ProcessApprovalRecordService recordService = SpringContextUtil.getBean(ProcessApprovalRecordService.class);
|
||||||
String taskId = delegateTask.getId();
|
String taskId = delegateTask.getId();
|
||||||
String assignee = delegateTask.getAssignee();
|
String assignee = delegateTask.getAssignee();
|
||||||
@@ -237,6 +245,13 @@ public class MyGlobalEventListener implements ActivitiEventListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
recordService.updateById(approvalRecord);
|
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);
|
PushWorkflowIntegrationAPI pushWorkflowIntegrationAPI = SpringContextUtil.getBean(PushWorkflowIntegrationAPI.class);
|
||||||
List<HiworkTodoAdd> list = new ArrayList<>();
|
List<HiworkTodoAdd> list = new ArrayList<>();
|
||||||
|
|||||||
+46
-42
@@ -19,39 +19,44 @@
|
|||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="getCompletedList" resultType="com.jero.modules.activiti.entity.ProcessAll">
|
<select id="getCompletedList" resultType="com.jero.modules.activiti.entity.ProcessAll">
|
||||||
select pa.*,
|
select pa.id,
|
||||||
max(par.create_time) as receivedTaskTime,
|
pa.prc_name,
|
||||||
max(par.end_time) as completedTaskTime
|
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
|
from process_all pa
|
||||||
left join process_approval_record par on pa.process_instance_id = par.process_instance_id
|
left join process_approval_record par on pa.process_instance_id = par.process_instance_id
|
||||||
${ew.customSqlSegment}
|
${ew.customSqlSegment}
|
||||||
<include refid="order"/>
|
<include refid="order"/>
|
||||||
</select>
|
</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 id="getSentList" resultType="com.jero.modules.activiti.entity.ProcessAll">
|
||||||
select p.*, group_concat(par.user_id) as handleUserId
|
select p.*, group_concat(par.user_id) as handleUserId
|
||||||
from (
|
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
|
from process_all pa
|
||||||
left join process_approval_record par on pa.process_instance_id = par.process_instance_id
|
|
||||||
${ew.customSqlSegment}
|
${ew.customSqlSegment}
|
||||||
) p
|
) p
|
||||||
LEFT JOIN (
|
LEFT JOIN (
|
||||||
@@ -62,23 +67,22 @@
|
|||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="getAllList" resultType="com.jero.modules.activiti.entity.ProcessAll">
|
<select id="getAllList" resultType="com.jero.modules.activiti.entity.ProcessAll">
|
||||||
select p.*, case
|
select pa.id,
|
||||||
when p.prc_status = 1 then group_concat(par.user_id)
|
pa.prc_name,
|
||||||
when p.prc_status = 3 then group_concat(par2.user_id)
|
pa.process_definition_id,
|
||||||
end as handleUserId
|
pa.process_instance_id,
|
||||||
from (
|
pa.prc_mes,
|
||||||
select pa.*, max(par.create_time) as receivedTaskTime, max(par.end_time) as completedTaskTime, par.node_id
|
pa.prc_num,
|
||||||
from process_all pa
|
pa.create_user_id,
|
||||||
left join process_approval_record par on pa.process_instance_id = par.process_instance_id
|
pa.prc_type,
|
||||||
${ew.customSqlSegment}
|
pa.prc_status,
|
||||||
) p
|
pa.end_time,
|
||||||
LEFT JOIN (
|
pa.over_time,
|
||||||
SELECT user_id,process_instance_id from process_approval_record WHERE finish_flag = 1
|
pa.project_id,
|
||||||
) par ON p.process_instance_id = par.process_instance_id
|
pa.received_task_time as receivedTaskTime,
|
||||||
LEFT JOIN (
|
pa.completed_task_time
|
||||||
SELECT user_id,process_instance_id from process_approval_record WHERE finish_flag = 4
|
from process_all pa
|
||||||
) par2 ON p.process_instance_id = par2.process_instance_id
|
${ew.customSqlSegment}
|
||||||
group by p.process_instance_id
|
|
||||||
<include refid="order"/>
|
<include refid="order"/>
|
||||||
</select>
|
</select>
|
||||||
</mapper>
|
</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) {
|
public IPage<ProcessAll> getAllList(Page<ProcessAll> page, QueryWrapper<ProcessAll> queryWrapper, HttpServletRequest req) {
|
||||||
String column = req.getParameter("column");
|
String column = req.getParameter("column");
|
||||||
String order = req.getParameter("order");
|
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)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void forcedWithdrawal(String processInstanceId) {
|
public void forcedWithdrawal(String processInstanceId) {
|
||||||
|
|||||||
Reference in New Issue
Block a user