| | |
| | | AND ACT_HI_PROCINST.END_TIME_ <= #{flowMyBusinessDto.endTime} |
| | | </if> |
| | | ORDER BY |
| | | flow_my_business.create_time desc |
| | | flow_my_business.create_time desc |
| | | </select> |
| | | |
| | | <select id="ListMyBusiness" resultType="org.jeecg.modules.flowable.domain.dto.FlowTaskDto"> |
| | | SELECT |
| | | fmb.task_id AS 'taskId', |
| | | fmb.process_instance_id AS 'procInsId', |
| | | latest_task.ID_ AS 'taskId', |
| | | latest_task.PROC_INST_ID_ AS 'procInstId', |
| | | latest_task.PROC_DEF_ID_ AS 'processInstanceId', |
| | | ACT_RE_PROCDEF.CATEGORY_ AS 'category', |
| | | ACT_RE_PROCDEF.NAME_ AS 'procDefName', |
| | | fmb.title AS 'Description', |
| | |
| | | fmb.process_definition_key AS 'processDefinitionKey', |
| | | fmb.process_definition_id AS 'processDefinitionId', |
| | | fmb.proposer, |
| | | fmb.todo_users, |
| | | fmb.task_name, |
| | | -- fmb.todo_users, |
| | | -- fmb.task_name, |
| | | latest_task.NAME_ AS taskName, |
| | | fmb.create_time AS createTime, |
| | | latest_task.END_TIME_ AS finishTime |
| | | -- fmb.create_time AS createTime, |
| | | latest_task.END_TIME_ AS finishTime, |
| | | latest_task.TASK_DEF_KEY_ AS taskDefKey |
| | | FROM |
| | | flow_my_business fmb |
| | | LEFT JOIN ACT_RE_PROCDEF ON fmb.process_definition_id = ACT_RE_PROCDEF.ID_ |
| | | LEFT JOIN ACT_HI_PROCINST ON fmb.process_instance_id = ACT_HI_PROCINST.ID_ |
| | | LEFT JOIN ( |
| | | ( |
| | | SELECT |
| | | *, |
| | | ROW_NUMBER() OVER ( |
| | |
| | | AND END_TIME_ <= #{dto.endTime} |
| | | </if> |
| | | ) latest_task |
| | | ON fmb.process_instance_id = latest_task.PROC_INST_ID_ |
| | | AND latest_task.rn = 1 |
| | | WHERE |
| | | LEFT JOIN (select DISTINCT process_definition_key, process_definition_id, process_instance_id, title, data_id, proposer from flow_my_business) fmb ON fmb.process_instance_id = latest_task.PROC_INST_ID_ |
| | | LEFT JOIN ACT_RE_PROCDEF ON fmb.process_definition_id = ACT_RE_PROCDEF.ID_ |
| | | LEFT JOIN ACT_HI_PROCINST ON fmb.process_instance_id = ACT_HI_PROCINST.ID_ |
| | | WHERE latest_task.rn = 1 |
| | | <!-- 动态条件统一使用 dto --> |
| | | <if test="dto.currentUser != null and dto.currentUser != ''"> |
| | | fmb.done_users like concat('%',#{dto.currentUser},'%') |
| | | </if> |
| | | <if test="dto.category != null and dto.category != ''"> |
| | | AND ACT_RE_PROCDEF.CATEGORY_ = #{dto.category} |
| | | </if> |
| | |
| | | @ApiModelProperty(value = "当前的节点可以处理的用户名") |
| | | @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname") |
| | | private String todoUsers; |
| | | @ApiModelProperty("流程发起人名称") |
| | | @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname") |
| | | private String proposer; |
| | | } |
| | |
| | | SELECT |
| | | p.PROC_INST_ID_ AS procInstId, |
| | | p.BUSINESS_KEY_ AS businessKey, |
| | | p.START_TIME_ AS procStartTime, |
| | | p.END_TIME_ AS procEndTime, |
| | | a.EXECUTION_ID_ AS executionId, |
| | | a.ACT_ID_, |
| | | COALESCE ( a.ACT_NAME_, a.ACT_ID_ ) AS actName, |
| | | a.ACT_TYPE_ AS actType, |
| | |
| | | c.NAME_ AS taskName, |
| | | c.ASSIGNEE_ AS assignee, |
| | | c.DESCRIPTION_ AS description, |
| | | -- 使用 LEAD 获取下一个活动信息 |
| | | LEAD ( COALESCE ( a.ACT_NAME_, a.ACT_ID_ ) ) OVER ( PARTITION BY p.PROC_INST_ID_ ORDER BY a.START_TIME_ ) AS nextActName, |
| | | LEAD ( a.ACT_TYPE_ ) OVER ( PARTITION BY p.PROC_INST_ID_ ORDER BY a.START_TIME_ ) AS nextActType, |
| | | LEAD ( a.START_TIME_ ) OVER ( PARTITION BY p.PROC_INST_ID_ ORDER BY a.START_TIME_ ) AS nextActStartTime |
| | | LEAD ( COALESCE ( a.ACT_NAME_, a.ACT_ID_ ) ) OVER ( PARTITION BY p.PROC_INST_ID_, a.EXECUTION_ID_ |
| | | ORDER BY a.END_TIME_ ) AS nextActName, |
| | | LEAD ( a.ACT_TYPE_ ) OVER ( PARTITION BY p.PROC_INST_ID_, a.EXECUTION_ID_ |
| | | ORDER BY a.START_TIME_ ) AS nextActType, |
| | | LEAD ( a.START_TIME_ ) OVER ( PARTITION BY p.PROC_INST_ID_, a.EXECUTION_ID_ |
| | | ORDER BY a.START_TIME_ ) AS nextActStartTime |
| | | FROM |
| | | act_hi_procinst p |
| | | LEFT JOIN act_hi_actinst a ON p.PROC_INST_ID_ = a.PROC_INST_ID_ |
| | |
| | | ) SELECT |
| | | procInstId, |
| | | businessKey, |
| | | -- 当前活动(userTask)信息 |
| | | actName AS userTaskName, |
| | | taskName, |
| | | assignee, |
| | | actStartTime, |
| | | actEndTime, |
| | | description, |
| | | -- 下一个活动(sequenceFlow)信息 |
| | | nextActName AS sequenceFlowName, |
| | | nextActStartTime AS sequenceFlowStartTime |
| | | FROM |
| | | ActivitySequence |
| | | WHERE |
| | | actType = 'userTask' -- 筛选当前活动为 userTask |
| | | |
| | | AND nextActType = 'sequenceFlow' -- 且下一个活动为 sequenceFlow |
| | | |
| | | actType = 'userTask' |
| | | AND nextActType = 'sequenceFlow' |
| | | ORDER BY |
| | | actStartTime; |
| | | </select> |
| | |
| | | String username = iFlowThirdService.getLoginUser().getUsername(); |
| | | flowMyBusinessDto.setCurrentUser(username); |
| | | List<FlowTaskDto> list = flowMyBusinessService.ListMyBusiness(flowMyBusinessDto); |
| | | list.forEach(flowTaskDto -> { |
| | | // 流程发起人信息 |
| | | HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() |
| | | .processInstanceId(flowTaskDto.getProcInsId()) |
| | | .singleResult(); |
| | | if (historicProcessInstance != null) { |
| | | SysUser startUser = iFlowThirdService.getUserByUsername(historicProcessInstance.getStartUserId()); |
| | | if (startUser != null) { |
| | | flowTaskDto.setStartUserId(startUser.getUsername()); |
| | | flowTaskDto.setStartUserName(startUser.getRealname()); |
| | | } |
| | | List<String> departNamesByUsername = iFlowThirdService.getDepartNamesByUsername(historicProcessInstance.getStartUserId()); |
| | | flowTaskDto.setStartDeptName(CollUtil.join(departNamesByUsername, ",")); |
| | | if (flowTaskDto.getTodoUsers() == null) { |
| | | flowTaskDto.setTodoUsers(""); |
| | | } else { |
| | | //去除[] |
| | | flowTaskDto.setTodoUsers(flowTaskDto.getTodoUsers().replaceAll("\\[", "").replaceAll("\\]", "")); |
| | | flowTaskDto.setTodoUsers(flowTaskDto.getTodoUsers().replaceAll("\"", "")); |
| | | } |
| | | } |
| | | }); |
| | | IPage<FlowTaskDto> flowTaskDtoIPage = new Page<>(); |
| | | flowTaskDtoIPage.setRecords(list); |
| | | flowTaskDtoIPage.setTotal(page.getTotal()); |