添加已办,未办

This commit is contained in:
gssong 2024-09-16 21:16:31 +08:00
parent f18bbd898b
commit 281c9c0e8e
7 changed files with 162 additions and 83 deletions

View File

@ -95,6 +95,29 @@ public class FlwTaskController extends BaseController {
return flwTaskService.getPageByTaskFinish(flowTaskBo, pageQuery); return flwTaskService.getPageByTaskFinish(flowTaskBo, pageQuery);
} }
/**
* 查询待办任务
*
* @param flowTaskBo 参数
* @param pageQuery 分页
*/
@GetMapping("/getPageByAllTaskWait")
public TableDataInfo<FlowTaskVo> getPageByAllTaskWait(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
return flwTaskService.getPageByAllTaskWait(flowTaskBo, pageQuery);
}
/**
* 查询已办任务
*
* @param flowTaskBo 参数
* @param pageQuery 分页
*/
@GetMapping("/getPageByAllTaskFinish")
public TableDataInfo<FlowHisTaskVo> getPageByAllTaskFinish(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
return flwTaskService.getPageByAllTaskFinish(flowTaskBo, pageQuery);
}
/** /**
* 查询当前用户的抄送 * 查询当前用户的抄送
* *

View File

@ -102,6 +102,12 @@ public class FlowHisTaskVo implements Serializable {
*/ */
private String approver; private String approver;
/**
* 审批者
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "approver")
private String approveName;
/** /**
* 协作人(只有转办会签票签委派) * 协作人(只有转办会签票签委派)
*/ */
@ -122,6 +128,11 @@ public class FlowHisTaskVo implements Serializable {
*/ */
private Integer flowStatus; private Integer flowStatus;
/**
* 流程状态
*/
private String flowStatusName;
/** /**
* 审批意见 * 审批意见
*/ */
@ -152,10 +163,4 @@ public class FlowHisTaskVo implements Serializable {
* 流程定义编码 * 流程定义编码
*/ */
private String flowCode; private String flowCode;
/**
* 审批者
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "approver")
private String approverName;
} }

View File

@ -32,12 +32,10 @@ public interface FlwTaskMapper {
* *
* @param page 分页 * @param page 分页
* @param queryWrapper 条件 * @param queryWrapper 条件
* @param flowTaskBo 条件
* @return 结果 * @return 结果
*/ */
Page<FlowHisTaskVo> getTaskFinishByPage(@Param("page") Page<FlowTaskVo> page, Page<FlowHisTaskVo> getTaskFinishByPage(@Param("page") Page<FlowTaskVo> page,
@Param(Constants.WRAPPER) Wrapper<FlowTaskBo> queryWrapper, @Param(Constants.WRAPPER) Wrapper<FlowTaskBo> queryWrapper);
@Param("flowTaskBo") FlowTaskBo flowTaskBo);
/** /**
* 查询当前用户的抄送 * 查询当前用户的抄送

View File

@ -49,6 +49,26 @@ public interface IFlwTaskService {
*/ */
TableDataInfo<FlowHisTaskVo> getPageByTaskFinish(FlowTaskBo flowTaskBo, PageQuery pageQuery); TableDataInfo<FlowHisTaskVo> getPageByTaskFinish(FlowTaskBo flowTaskBo, PageQuery pageQuery);
/**
* 查询待办任务
*
* @param flowTaskBo 参数
* @param pageQuery 分页
* @return 结果
*/
TableDataInfo<FlowTaskVo> getPageByAllTaskWait(FlowTaskBo flowTaskBo, PageQuery pageQuery);
/**
* 查询已办任务
*
* @param flowTaskBo 参数
* @param pageQuery 分页
* @return 结果
*/
TableDataInfo<FlowHisTaskVo> getPageByAllTaskFinish(FlowTaskBo flowTaskBo, PageQuery pageQuery);
/** /**
* 查询当前用户的抄送 * 查询当前用户的抄送
* *

View File

@ -172,7 +172,6 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
@Override @Override
public TableDataInfo<FlowInstanceVo> getPageByCurrent(InstanceBo instanceBo, PageQuery pageQuery) { public TableDataInfo<FlowInstanceVo> getPageByCurrent(InstanceBo instanceBo, PageQuery pageQuery) {
LambdaQueryWrapper<FlowInstance> wrapper = Wrappers.lambdaQuery(); LambdaQueryWrapper<FlowInstance> wrapper = Wrappers.lambdaQuery();
if (StringUtils.isNotBlank(instanceBo.getFlowCode())) { if (StringUtils.isNotBlank(instanceBo.getFlowCode())) {
List<FlowDefinition> flowDefinitions = flowDefinitionMapper.selectList( List<FlowDefinition> flowDefinitions = flowDefinitionMapper.selectList(
new LambdaQueryWrapper<FlowDefinition>().eq(FlowDefinition::getFlowCode, instanceBo.getFlowCode())); new LambdaQueryWrapper<FlowDefinition>().eq(FlowDefinition::getFlowCode, instanceBo.getFlowCode()));

View File

@ -7,6 +7,8 @@ import com.warm.flow.core.dto.FlowParams;
import com.warm.flow.core.entity.Instance; import com.warm.flow.core.entity.Instance;
import com.warm.flow.core.entity.Task; import com.warm.flow.core.entity.Task;
import com.warm.flow.core.entity.User; import com.warm.flow.core.entity.User;
import com.warm.flow.core.enums.FlowStatus;
import com.warm.flow.core.enums.NodeType;
import com.warm.flow.core.enums.SkipType; import com.warm.flow.core.enums.SkipType;
import com.warm.flow.core.service.InsService; import com.warm.flow.core.service.InsService;
import com.warm.flow.core.service.TaskService; import com.warm.flow.core.service.TaskService;
@ -135,21 +137,10 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
*/ */
@Override @Override
public TableDataInfo<FlowTaskVo> getPageByTaskWait(FlowTaskBo flowTaskBo, PageQuery pageQuery) { public TableDataInfo<FlowTaskVo> getPageByTaskWait(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
QueryWrapper<FlowTaskBo> queryWrapper = getFlowTaskBoQueryWrapper(flowTaskBo); QueryWrapper<FlowTaskBo> queryWrapper = new QueryWrapper<>();
queryWrapper.in("t.processed_by", WorkflowUtils.permissionList()); queryWrapper.in("t.processed_by", WorkflowUtils.permissionList());
Page<FlowTaskVo> page = flwTaskMapper.getTaskWaitByPage(pageQuery.build(), queryWrapper); queryWrapper.in("t.flow_status", FlowStatus.APPROVAL.getKey());
List<FlowTaskVo> records = page.getRecords(); Page<FlowTaskVo> page = buildTaskWaitingPage(pageQuery, queryWrapper, flowTaskBo);
if (CollUtil.isNotEmpty(records)) {
List<Long> taskIds = StreamUtils.toList(records, FlowTaskVo::getId);
List<User> userList = userService.getByAssociateds(taskIds);
for (FlowTaskVo record : records) {
if (CollUtil.isNotEmpty(userList)) {
List<User> users = StreamUtils.filter(userList, e -> e.getAssociated().toString().equals(record.getId().toString()));
record.setUserList(CollUtil.isEmpty(users) ? Collections.emptyList() : users);
record.setUserDTOList(WorkflowUtils.getHandlerUser(users));
}
}
}
return TableDataInfo.build(page); return TableDataInfo.build(page);
} }
@ -161,12 +152,83 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
*/ */
@Override @Override
public TableDataInfo<FlowHisTaskVo> getPageByTaskFinish(FlowTaskBo flowTaskBo, PageQuery pageQuery) { public TableDataInfo<FlowHisTaskVo> getPageByTaskFinish(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
QueryWrapper<FlowTaskBo> queryWrapper = getFlowTaskBoQueryWrapper(flowTaskBo); QueryWrapper<FlowTaskBo> queryWrapper = new QueryWrapper<>();
flowTaskBo.setPermissionList(WorkflowUtils.permissionList()); queryWrapper.in("t.approver", LoginHelper.getUserId());
Page<FlowHisTaskVo> page = flwTaskMapper.getTaskFinishByPage(pageQuery.build(), queryWrapper, flowTaskBo); Page<FlowHisTaskVo> page = buildTaskFinishPage(pageQuery, queryWrapper, flowTaskBo);
return TableDataInfo.build(page); return TableDataInfo.build(page);
} }
/**
* 查询待办任务
*
* @param flowTaskBo 参数
* @param pageQuery 分页
*/
@Override
public TableDataInfo<FlowTaskVo> getPageByAllTaskWait(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
QueryWrapper<FlowTaskBo> queryWrapper = new QueryWrapper<>();
queryWrapper.in("t.processed_by", WorkflowUtils.permissionList());
Page<FlowTaskVo> page = buildTaskWaitingPage(pageQuery, queryWrapper, flowTaskBo);
return TableDataInfo.build(page);
}
private Page<FlowTaskVo> buildTaskWaitingPage(PageQuery pageQuery, QueryWrapper<FlowTaskBo> queryWrapper, FlowTaskBo flowTaskBo) {
commonCondition(queryWrapper, flowTaskBo);
Page<FlowTaskVo> page = flwTaskMapper.getTaskWaitByPage(pageQuery.build(), queryWrapper);
List<FlowTaskVo> records = page.getRecords();
if (CollUtil.isNotEmpty(records)) {
List<Long> taskIds = StreamUtils.toList(records, FlowTaskVo::getId);
List<User> userList = userService.getByAssociateds(taskIds);
for (FlowTaskVo data : records) {
if (CollUtil.isNotEmpty(userList)) {
List<User> users = StreamUtils.filter(userList, e -> e.getAssociated().toString().equals(data.getId().toString()));
data.setUserList(CollUtil.isEmpty(users) ? Collections.emptyList() : users);
data.setUserDTOList(WorkflowUtils.getHandlerUser(users));
}
data.setFlowStatusName(FlowStatus.getValueByKey(data.getFlowStatus()));
}
}
return page;
}
/**
* 通用条件
*
* @param queryWrapper 查询条件
* @param flowTaskBo 参数
*/
private void commonCondition(QueryWrapper<FlowTaskBo> queryWrapper, FlowTaskBo flowTaskBo) {
queryWrapper.like(StringUtils.isNotBlank(flowTaskBo.getNodeName()), "t.node_name", flowTaskBo.getNodeName());
queryWrapper.like(StringUtils.isNotBlank(flowTaskBo.getFlowName()), "t.flow_name", flowTaskBo.getFlowName());
queryWrapper.eq(StringUtils.isNotBlank(flowTaskBo.getFlowCode()), "t.flow_code", flowTaskBo.getFlowCode());
queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey());
}
/**
* 查询已办任务
*
* @param flowTaskBo 参数
* @param pageQuery 分页
*/
@Override
public TableDataInfo<FlowHisTaskVo> getPageByAllTaskFinish(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
QueryWrapper<FlowTaskBo> queryWrapper = new QueryWrapper<>();
Page<FlowHisTaskVo> page = buildTaskFinishPage(pageQuery, queryWrapper, flowTaskBo);
return TableDataInfo.build(page);
}
private Page<FlowHisTaskVo> buildTaskFinishPage(PageQuery pageQuery, QueryWrapper<FlowTaskBo> queryWrapper, FlowTaskBo flowTaskBo) {
commonCondition(queryWrapper, flowTaskBo);
Page<FlowHisTaskVo> page = flwTaskMapper.getTaskFinishByPage(pageQuery.build(), queryWrapper);
List<FlowHisTaskVo> records = page.getRecords();
if (CollUtil.isNotEmpty(records)) {
for (FlowHisTaskVo data : records) {
data.setFlowStatusName(FlowStatus.getValueByKey(data.getFlowStatus()));
}
}
return page;
}
/** /**
* 查询当前用户的抄送 * 查询当前用户的抄送
* *
@ -175,24 +237,12 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
*/ */
@Override @Override
public TableDataInfo<FlowTaskVo> getPageByTaskCopy(FlowTaskBo flowTaskBo, PageQuery pageQuery) { public TableDataInfo<FlowTaskVo> getPageByTaskCopy(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
QueryWrapper<FlowTaskBo> queryWrapper = getFlowTaskBoQueryWrapper(flowTaskBo);
flowTaskBo.setPermissionList(WorkflowUtils.permissionList());
Page<FlowTaskVo> page = flwTaskMapper.getTaskCopyByPage(pageQuery.build(), queryWrapper);
return TableDataInfo.build(page);
}
/**
* 查询参数
*
* @param flowTaskBo 参数
*/
private QueryWrapper<FlowTaskBo> getFlowTaskBoQueryWrapper(FlowTaskBo flowTaskBo) {
QueryWrapper<FlowTaskBo> queryWrapper = new QueryWrapper<>(); QueryWrapper<FlowTaskBo> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StringUtils.isNotBlank(flowTaskBo.getNodeName()), "t.node_name", flowTaskBo.getNodeName()); queryWrapper.like(StringUtils.isNotBlank(flowTaskBo.getNodeName()), "t.node_name", flowTaskBo.getNodeName());
queryWrapper.like(StringUtils.isNotBlank(flowTaskBo.getFlowName()), "t.flow_name", flowTaskBo.getFlowName()); queryWrapper.like(StringUtils.isNotBlank(flowTaskBo.getFlowName()), "t.flow_name", flowTaskBo.getFlowName());
queryWrapper.eq(StringUtils.isNotBlank(flowTaskBo.getFlowCode()), "t.flow_code", flowTaskBo.getFlowCode()); queryWrapper.eq(StringUtils.isNotBlank(flowTaskBo.getFlowCode()), "t.flow_code", flowTaskBo.getFlowCode());
return queryWrapper; Page<FlowTaskVo> page = flwTaskMapper.getTaskCopyByPage(pageQuery.build(), queryWrapper);
return TableDataInfo.build(page);
} }
/** /**

View File

@ -67,54 +67,38 @@
FROM flow_task AS t FROM flow_task AS t
LEFT JOIN flow_user uu ON uu.associated = t.id LEFT JOIN flow_user uu ON uu.associated = t.id
LEFT JOIN flow_definition d on t.definition_id = d.id LEFT JOIN flow_definition d on t.definition_id = d.id
LEFT JOIN flow_instance i on t.instance_id = i.id where t.node_type = 1 and i.flow_status = '1' and t.del_flag = '0') t LEFT JOIN flow_instance i on t.instance_id = i.id where t.node_type = 1 and t.del_flag = '0') t
${ew.getCustomSqlSegment} ${ew.getCustomSqlSegment}
</select> </select>
<select id="getTaskFinishByPage" resultMap="FlowHisTaskResult"> <select id="getTaskFinishByPage" resultMap="FlowHisTaskResult">
select * from ( select * from (
select select
t.id, a.id,
t.node_code, a.node_code,
t.node_name, a.node_name,
t.cooperate_type, a.cooperate_type,
t.approver, a.approver,
t.collaborator, a.collaborator,
t.node_type, a.node_type,
t.target_node_code, a.target_node_code,
t.target_node_name, a.target_node_name,
t.definition_id, a.definition_id,
t.instance_id, a.instance_id,
i.flow_status, a.flow_status,
t.message, a.message,
t.ext, a.ext,
t.create_time, a.create_time,
t.update_time, a.update_time,
t.tenant_id, a.tenant_id,
i.business_id, b.business_id,
d.form_path fromPath, c.form_path fromPath,
d.flow_name, c.flow_name,
d.flow_code c.flow_code
from ( SELECT MAX(id) as id from flow_his_task a
FROM flow_his_task LEFT JOIN flow_instance b on a.instance_id = b.id
<where> LEFT JOIN flow_definition c on a.definition_id = c.id
flow_status <![CDATA[<> '10']]> and node_type = 1 ) t ${ew.getCustomSqlSegment}
<if test="flowTaskBo.permissionList != null and flowTaskBo.permissionList.size > 0">
AND approver in
<foreach item="permission" collection="flowTaskBo.permissionList" open="(" separator="," close=")">
#{permission}
</foreach>
</if>
<if test="flowTaskBo.nodeName != null and flowTaskBo.nodeName != ''">and node_name like concat('%',
#{flowTaskBo.nodeName}, '%')
</if>
<if test="flowTaskBo.instanceId != null ">and instance_id = #{flowTaskBo.instanceId}</if>
</where>
GROUP BY instance_id ) tmp
LEFT JOIN flow_his_task t ON t.id = tmp.id
LEFT JOIN flow_definition d on t.definition_id = d.id
LEFT JOIN flow_instance i on t.instance_id = i.id
order by t.create_time desc ) t ${ew.getCustomSqlSegment}
</select> </select>
<select id="getTaskCopyByPage" resultMap="FlowTaskResult"> <select id="getTaskCopyByPage" resultMap="FlowTaskResult">