提交 b7693fe1 authored 作者: hzh's avatar hzh

代码优化

上级 d26d26ab
......@@ -7,6 +7,6 @@ package org.dromara.common.ys.exception;
public class YunShangException extends RuntimeException {
public YunShangException(String message) {
super("云上资源方调用失败:" + message);
super("差旅资源调用失败!" + message);
}
}
......@@ -72,6 +72,17 @@ public class ActTaskController extends BaseController {
return toAjax(actTaskService.completeTask(completeTaskBo));
}
/**
* 查询当前用户任务
*
* @param taskBo 参数
*/
@GetMapping("/getTaskByPage")
public TableDataInfo<TaskVo> getTaskByPage(TaskBo taskBo, PageQuery pageQuery) {
return actTaskService.getTaskByPage(taskBo, pageQuery);
}
/**
* 查询当前用户的待办任务
*
......
......@@ -175,4 +175,9 @@ public class TaskVo implements Serializable {
* 对象信息
*/
private Object entity;
/**
* 任务类型
*/
private String taskType;
}
......@@ -36,6 +36,15 @@ public interface ActTaskMapper extends BaseMapperPlus<TaskVo, TaskVo> {
*/
Page<TaskVo> getTaskFinishByPage(@Param("page") Page<TaskVo> page, @Param(Constants.WRAPPER) Wrapper<TaskVo> queryWrapper);
/**
* 获取当前用户的任务
*
* @param page 分页
* @param queryWrapper 条件
* @return 结果
*/
Page<TaskVo> getTaskByPage(@Param("page") Page<TaskVo> page, @Param(Constants.WRAPPER) Wrapper<TaskVo> queryWrapper);
/**
* 查询当前用户的抄送
*
......
......@@ -41,6 +41,15 @@ public interface IActTaskService {
*/
TableDataInfo<TaskVo> getPageByTaskWait(TaskBo taskBo, PageQuery pageQuery);
/**
* 查询当前用户的任务
*
* @param taskBo 参数
* @param pageQuery 分页
* @return 结果
*/
TableDataInfo<TaskVo> getTaskByPage(TaskBo taskBo, PageQuery pageQuery);
/**
* 查询当前租户所有待办任务
*
......
......@@ -312,6 +312,73 @@ public class ActTaskServiceImpl implements IActTaskService {
return TableDataInfo.build(page);
}
private static final String TASK_RUNNING = "running";
private static final String TASK_FINISHED = "finished";
@Override
public TableDataInfo<TaskVo> getTaskByPage(TaskBo taskBo, PageQuery pageQuery) {
String userId = String.valueOf(LoginHelper.getUserId());
QueryWrapper<TaskVo> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StringUtils.isNotBlank(taskBo.getName()), "t.name_", taskBo.getName());
queryWrapper.like(StringUtils.isNotBlank(taskBo.getProcessDefinitionName()), "t.processDefinitionName", taskBo.getProcessDefinitionName());
queryWrapper.eq(StringUtils.isNotBlank(taskBo.getProcessDefinitionKey()), "t.processDefinitionKey", taskBo.getProcessDefinitionKey());
queryWrapper.eq(TenantHelper.isEnable(), "t.tenant_id_", TenantHelper.getTenantId());
if (StringUtils.isNotBlank(taskBo.getTableName())) {
WfDefinitionConfig wdc = wfDefinitionConfigMapper.selectOne(WfDefinitionConfig::getTableName, taskBo.getTableName());
if (wdc == null) {
queryWrapper.eq("t.id_", -1);
} else {
queryWrapper.likeLeft("t.proc_def_id_", wdc.getProcessKey() + ":");
}
}
// 获取当前用户角色
List<RoleDTO> roles = LoginHelper.getLoginUser().getRoles();
List<String> roleIds = StreamUtils.toList(roles, e -> String.valueOf(e.getRoleId()));
String ids = StreamUtils.join(roleIds, x -> "'" + x + "'");
// 构建复合条件 (running条件 OR finished条件)
queryWrapper.and(wrapper -> {
// running条件:任务类型为running且满足候选人条件
wrapper.or(running -> running
.eq("t.taskType", TASK_RUNNING)
.and(condition -> condition
.eq("t.assignee_", userId)
.or()
.isNull("t.assignee_")
.apply("exists (select LINK.ID_ from ACT_RU_IDENTITYLINK LINK where LINK.TASK_ID_ = t.ID_ and LINK.TYPE_ = 'candidate' and (LINK.USER_ID_ = {0} or LINK.GROUP_ID_ IN (" + ids + ")))", userId)
)
);
// finished条件:任务类型为finished且处理人为当前用户
wrapper.or(finished -> finished
.eq("t.taskType", TASK_FINISHED)
.eq("t.assignee_", userId)
);
});
queryWrapper.orderByAsc("CASE WHEN t.taskType = 'running' THEN 1 ELSE 2 END");
Page<TaskVo> page = actTaskMapper.getTaskWaitByPage(pageQuery.build(), queryWrapper);
List<TaskVo> taskList = page.getRecords();
if (CollUtil.isNotEmpty(taskList)) {
List<String> processDefinitionIds = StreamUtils.toList(taskList, TaskVo::getProcessDefinitionId);
List<WfNodeConfigVo> wfNodeConfigVoList = wfNodeConfigService.selectByDefIds(processDefinitionIds);
for (TaskVo task : taskList) {
task.setEntity(WorkflowUtils.getHistoricVariableByBusinessKey(task.getBusinessKey(), "entity"));
task.setBusinessStatusName(BusinessStatusEnum.findByStatus(task.getBusinessStatus()));
if (StringUtils.equals(task.getTaskType(), TASK_RUNNING)) {
task.setParticipantVo(WorkflowUtils.getCurrentTaskParticipant(task.getId(), remoteUserService));
task.setMultiInstance(WorkflowUtils.isMultiInstance(task.getProcessDefinitionId(), task.getTaskDefinitionKey()) != null);
}
if (CollUtil.isNotEmpty(wfNodeConfigVoList)) {
wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(task.getProcessDefinitionId()) && FlowConstant.TRUE.equals(e.getApplyUserTask())).findFirst().ifPresent(task::setWfNodeConfigVo);
wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(task.getProcessDefinitionId()) && e.getNodeId().equals(task.getTaskDefinitionKey()) && FlowConstant.FALSE.equals(e.getApplyUserTask())).findFirst().ifPresent(task::setWfNodeConfigVo);
}
}
}
return TableDataInfo.build(page);
}
/**
* 查询当前租户所有待办任务
*
......
......@@ -28,7 +28,7 @@
<result property="processDefinitionKey" column="processDefinitionKey"/>
<result property="processDefinitionVersion" column="processDefinitionVersion"/>
<result property="businessKey" column="BUSINESS_KEY_"/>
<result property="businessKey" column="taskType"/>
</resultMap>
<select id="getTaskWaitByPage" resultMap="TaskVoResult">
select *
......@@ -59,6 +59,43 @@
) t ${ew.getCustomSqlSegment}
</select>
<select id="getTaskByPage" resultMap="TaskVoResult">
select *
from (
SELECT
'running' as taskType,
RES.*,
AHP.BUSINESS_STATUS_,
AHP.BUSINESS_KEY_,
ARP.NAME_ AS processDefinitionName,
ARP.KEY_ AS processDefinitionKey,
ARP.VERSION_ AS processDefinitionVersion,
null as END_TIME_
FROM ACT_RU_TASK RES
INNER JOIN ACT_HI_PROCINST AHP ON RES.PROC_INST_ID_ = AHP.PROC_INST_ID_
INNER JOIN ACT_RE_PROCDEF ARP ON ARP.ID_ = RES.PROC_DEF_ID_
WHERE RES.PARENT_TASK_ID_ IS NULL
UNION ALL
SELECT
'finished' as taskType,
HTI.*,
AHP.BUSINESS_STATUS_,
AHP.BUSINESS_KEY_,
ARP.NAME_ AS processDefinitionName,
ARP.KEY_ AS processDefinitionKey,
ARP.VERSION_ AS processDefinitionVersion,
HTI.END_TIME_
FROM ACT_HI_TASKINST HTI
INNER JOIN ACT_HI_PROCINST AHP ON HTI.PROC_INST_ID_ = AHP.PROC_INST_ID_
INNER JOIN ACT_RE_PROCDEF ARP ON ARP.ID_ = HTI.PROC_DEF_ID_
WHERE HTI.PARENT_TASK_ID_ IS NULL AND HTI.END_TIME_ IS NOT NULL
) t
${ew.getCustomSqlSegment}
</select>
<select id="getTaskCopyByPage" resultMap="TaskVoResult">
select *
from (SELECT AHT.*,
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论