[重大更新] 集成 mybatis-plus-join 重构项目代码(实验性功能不稳定)

This commit is contained in:
疯狂的狮子Li
2026-03-13 17:46:23 +08:00
parent 068e2de831
commit 916282ba68
28 changed files with 585 additions and 553 deletions

View File

@@ -1,9 +1,9 @@
package org.dromara.workflow.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import com.github.yulichang.base.MPJBaseMapper;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.dromara.warm.flow.orm.entity.FlowInstance;
import org.dromara.workflow.domain.bo.FlowInstanceBo;
import org.dromara.workflow.domain.vo.FlowInstanceVo;
@@ -13,7 +13,7 @@ import org.dromara.workflow.domain.vo.FlowInstanceVo;
* @author may
* @date 2024-03-02
*/
public interface FlwInstanceMapper {
public interface FlwInstanceMapper extends MPJBaseMapper<FlowInstance> {
/**
* 流程实例信息
@@ -22,6 +22,8 @@ public interface FlwInstanceMapper {
* @param queryWrapper 条件
* @return 结果
*/
Page<FlowInstanceVo> selectInstanceList(@Param("page") Page<FlowInstanceVo> page, @Param(Constants.WRAPPER) Wrapper<FlowInstanceBo> queryWrapper);
default Page<FlowInstanceVo> selectInstanceList(Page<FlowInstanceVo> page, MPJLambdaWrapper<FlowInstance> queryWrapper) {
return this.selectJoinPage(page, FlowInstanceVo.class, queryWrapper);
}
}

View File

@@ -1,14 +1,19 @@
package org.dromara.workflow.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.warm.flow.core.enums.NodeType;
import org.dromara.warm.flow.orm.entity.*;
import org.dromara.workflow.domain.FlowInstanceBizExt;
import org.dromara.workflow.domain.bo.FlowTaskBo;
import org.dromara.workflow.domain.vo.FlowHisTaskVo;
import org.dromara.workflow.domain.vo.FlowTaskVo;
import java.util.List;
/**
* 任务信息Mapper接口
@@ -16,32 +21,163 @@ import org.dromara.workflow.domain.vo.FlowTaskVo;
* @author may
* @date 2024-03-02
*/
public interface FlwTaskMapper {
public interface FlwTaskMapper extends BaseMapperPlus<FlowTask, FlowTaskVo> {
/**
* 获取待办信息
*
* @param page 分页
* @param queryWrapper 条件
* @return 结果
*/
Page<FlowTaskVo> getListRunTask(@Param("page") Page<FlowTaskVo> page, @Param(Constants.WRAPPER) Wrapper<FlowTaskBo> queryWrapper);
default Page<FlowTaskVo> getListRunTask(Page<FlowTaskVo> page,
FlowTaskBo bo,
List<String> categoryIds,
String userId) {
MPJLambdaWrapper<FlowTask> wrapper = JoinWrappers.lambda("t", FlowTask.class)
.distinct()
.selectAs(FlowTask::getId, FlowTaskVo::getId)
.selectAs(FlowTask::getNodeCode, FlowTaskVo::getNodeCode)
.selectAs(FlowTask::getNodeName, FlowTaskVo::getNodeName)
.selectAs(FlowTask::getNodeType, FlowTaskVo::getNodeType)
.selectAs(FlowTask::getDefinitionId, FlowTaskVo::getDefinitionId)
.selectAs(FlowTask::getInstanceId, FlowTaskVo::getInstanceId)
.selectAs(FlowTask::getCreateTime, FlowTaskVo::getCreateTime)
.selectAs(FlowTask::getUpdateTime, FlowTaskVo::getUpdateTime)
.selectAs("i", FlowInstance::getBusinessId, FlowTaskVo::getBusinessId)
.selectAs("i", FlowInstance::getFlowStatus, FlowTaskVo::getFlowStatus)
.selectAs("i", FlowInstance::getCreateBy, FlowTaskVo::getCreateBy)
.selectAs("d", FlowDefinition::getFlowName, FlowTaskVo::getFlowName)
.selectAs("d", FlowDefinition::getFlowCode, FlowTaskVo::getFlowCode)
.selectAs("d", FlowDefinition::getFormCustom, FlowTaskVo::getFormCustom)
.selectAs("d", FlowDefinition::getCategory, FlowTaskVo::getCategory)
.selectAs("d", FlowDefinition::getVersion, FlowTaskVo::getVersion)
.selectAs("uu", FlowUser::getProcessedBy, FlowTaskVo::getProcessedBy)
.selectAs("uu", FlowUser::getType, FlowTaskVo::getType)
.selectAs("biz", FlowInstanceBizExt::getBusinessCode, FlowTaskVo::getBusinessCode)
.selectAs("biz", FlowInstanceBizExt::getBusinessTitle, FlowTaskVo::getBusinessTitle)
.selectAs("COALESCE(NULLIF(TRIM(t.form_path), ''), NULLIF(TRIM(d.form_path), ''))", FlowTaskVo::getFormPath)
.leftJoin(FlowUser.class, "uu", FlowUser::getAssociated, FlowTask::getId)
.leftJoin(FlowDefinition.class, "d", FlowDefinition::getId, FlowTask::getDefinitionId)
.leftJoin(FlowInstance.class, "i", FlowInstance::getId, FlowTask::getInstanceId)
.leftJoin(FlowInstanceBizExt.class, "biz", FlowInstanceBizExt::getInstanceId, FlowInstance::getId)
.eq("t", FlowTask::getNodeType, NodeType.BETWEEN.getKey())
.eq("t", FlowTask::getDelFlag, "0")
.eq("uu", FlowUser::getDelFlag, "0")
.in("uu", FlowUser::getType, List.of("1", "2", "3"))
.like(hasText(bo.getNodeName()), "t", FlowTask::getNodeName, bo.getNodeName())
.like(hasText(bo.getFlowName()), "d", FlowDefinition::getFlowName, bo.getFlowName())
.like(hasText(bo.getFlowCode()), "d", FlowDefinition::getFlowCode, bo.getFlowCode())
.like(hasText(bo.getFlowStatus()), "i", FlowInstance::getFlowStatus, bo.getFlowStatus())
.in(hasItems(bo.getCreateByIds()), "i", FlowInstance::getCreateBy, bo.getCreateByIds())
.in(hasItems(categoryIds), "d", FlowDefinition::getCategory, categoryIds)
.between(hasBetween(bo), "t", FlowTask::getCreateTime, bo.getParams().get("beginTime"), bo.getParams().get("endTime"))
.eq(StringUtils.isNotBlank(userId), "uu", FlowUser::getProcessedBy, userId)
.eq(StringUtils.isNotBlank(userId), "i", FlowInstance::getFlowStatus, BusinessStatusEnum.WAITING.getStatus())
.orderByDesc("t", FlowTask::getCreateTime)
.orderByDesc("t", FlowTask::getUpdateTime);
return wrapper.page(page, FlowTaskVo.class);
}
/**
* 获取已办
*
* @param page 分页
* @param queryWrapper 条件
* @return 结果
*/
Page<FlowHisTaskVo> getListFinishTask(@Param("page") Page<FlowTaskVo> page, @Param(Constants.WRAPPER) Wrapper<FlowTaskBo> queryWrapper);
default Page<FlowHisTaskVo> getListFinishTask(Page<FlowHisTaskVo> page,
FlowTaskBo bo,
List<String> categoryIds,
String userId) {
MPJLambdaWrapper<FlowHisTask> wrapper = JoinWrappers.lambda("a", FlowHisTask.class)
.selectAs(FlowHisTask::getId, FlowHisTaskVo::getId)
.selectAs(FlowHisTask::getNodeCode, FlowHisTaskVo::getNodeCode)
.selectAs(FlowHisTask::getNodeName, FlowHisTaskVo::getNodeName)
.selectAs(FlowHisTask::getCooperateType, FlowHisTaskVo::getCooperateType)
.selectAs(FlowHisTask::getApprover, FlowHisTaskVo::getApprover)
.selectAs(FlowHisTask::getCollaborator, FlowHisTaskVo::getCollaborator)
.selectAs(FlowHisTask::getNodeType, FlowHisTaskVo::getNodeType)
.selectAs(FlowHisTask::getTargetNodeCode, FlowHisTaskVo::getTargetNodeCode)
.selectAs(FlowHisTask::getTargetNodeName, FlowHisTaskVo::getTargetNodeName)
.selectAs(FlowHisTask::getDefinitionId, FlowHisTaskVo::getDefinitionId)
.selectAs(FlowHisTask::getInstanceId, FlowHisTaskVo::getInstanceId)
.selectAs(FlowHisTask::getFlowStatus, FlowHisTaskVo::getFlowTaskStatus)
.selectAs(FlowHisTask::getMessage, FlowHisTaskVo::getMessage)
.selectAs(FlowHisTask::getExt, FlowHisTaskVo::getExt)
.selectAs(FlowHisTask::getCreateTime, FlowHisTaskVo::getCreateTime)
.selectAs(FlowHisTask::getUpdateTime, FlowHisTaskVo::getUpdateTime)
.selectAs(FlowHisTask::getFormCustom, FlowHisTaskVo::getFormCustom)
.selectAs(FlowHisTask::getFormPath, FlowHisTaskVo::getFormPath)
.selectAs("b", FlowInstance::getFlowStatus, FlowHisTaskVo::getFlowStatus)
.selectAs("b", FlowInstance::getBusinessId, FlowHisTaskVo::getBusinessId)
.selectAs("b", FlowInstance::getCreateBy, FlowHisTaskVo::getCreateBy)
.selectAs("c", FlowDefinition::getFlowName, FlowHisTaskVo::getFlowName)
.selectAs("c", FlowDefinition::getFlowCode, FlowHisTaskVo::getFlowCode)
.selectAs("c", FlowDefinition::getCategory, FlowHisTaskVo::getCategory)
.selectAs("c", FlowDefinition::getVersion, FlowHisTaskVo::getVersion)
.selectAs("biz", FlowInstanceBizExt::getBusinessCode, FlowHisTaskVo::getBusinessCode)
.selectAs("biz", FlowInstanceBizExt::getBusinessTitle, FlowHisTaskVo::getBusinessTitle)
.leftJoin(FlowInstance.class, "b", FlowInstance::getId, FlowHisTask::getInstanceId)
.leftJoin(FlowDefinition.class, "c", FlowDefinition::getId, FlowHisTask::getDefinitionId)
.leftJoin(FlowInstanceBizExt.class, "biz", FlowInstanceBizExt::getInstanceId, FlowInstance::getId)
.eq("a", FlowHisTask::getDelFlag, "0")
.eq("b", FlowInstance::getDelFlag, "0")
.eq("c", FlowDefinition::getDelFlag, "0")
.in("a", FlowHisTask::getNodeType, List.of("1", "3", "4"))
.like(hasText(bo.getNodeName()), "a", FlowHisTask::getNodeName, bo.getNodeName())
.like(hasText(bo.getFlowName()), "c", FlowDefinition::getFlowName, bo.getFlowName())
.like(hasText(bo.getFlowCode()), "c", FlowDefinition::getFlowCode, bo.getFlowCode())
.like(hasText(bo.getFlowStatus()), "b", FlowInstance::getFlowStatus, bo.getFlowStatus())
.in(hasItems(bo.getCreateByIds()), "b", FlowInstance::getCreateBy, bo.getCreateByIds())
.in(hasItems(categoryIds), "c", FlowDefinition::getCategory, categoryIds)
.between(hasBetween(bo), "a", FlowHisTask::getCreateTime, bo.getParams().get("beginTime"), bo.getParams().get("endTime"))
.eq(StringUtils.isNotBlank(userId), "a", FlowHisTask::getNodeType, NodeType.BETWEEN.getKey())
.eq(StringUtils.isNotBlank(userId), "a", FlowHisTask::getApprover, userId)
.orderByDesc("a", FlowHisTask::getCreateTime)
.orderByDesc("a", FlowHisTask::getUpdateTime);
return wrapper.page(page, FlowHisTaskVo.class);
}
default Page<FlowTaskVo> getTaskCopyByPage(Page<FlowTaskVo> page,
FlowTaskBo bo,
List<String> categoryIds,
String userId) {
MPJLambdaWrapper<FlowUser> wrapper = JoinWrappers.lambda("a", FlowUser.class)
.selectAs("b", FlowHisTask::getId, FlowTaskVo::getId)
.selectAs("b", FlowHisTask::getUpdateTime, FlowTaskVo::getUpdateTime)
.selectAs("c", FlowInstance::getBusinessId, FlowTaskVo::getBusinessId)
.selectAs("c", FlowInstance::getFlowStatus, FlowTaskVo::getFlowStatus)
.selectAs("c", FlowInstance::getCreateBy, FlowTaskVo::getCreateBy)
.selectAs(FlowUser::getProcessedBy, FlowTaskVo::getProcessedBy)
.selectAs(FlowUser::getCreateTime, FlowTaskVo::getCreateTime)
.selectAs("b", FlowHisTask::getFormCustom, FlowTaskVo::getFormCustom)
.selectAs("b", FlowHisTask::getFormPath, FlowTaskVo::getFormPath)
.selectAs("b", FlowHisTask::getNodeName, FlowTaskVo::getNodeName)
.selectAs("b", FlowHisTask::getNodeCode, FlowTaskVo::getNodeCode)
.selectAs("d", FlowDefinition::getFlowName, FlowTaskVo::getFlowName)
.selectAs("d", FlowDefinition::getFlowCode, FlowTaskVo::getFlowCode)
.selectAs("d", FlowDefinition::getCategory, FlowTaskVo::getCategory)
.selectAs("d", FlowDefinition::getVersion, FlowTaskVo::getVersion)
.selectAs("biz", FlowInstanceBizExt::getBusinessCode, FlowTaskVo::getBusinessCode)
.selectAs("biz", FlowInstanceBizExt::getBusinessTitle, FlowTaskVo::getBusinessTitle)
.leftJoin(FlowHisTask.class, "b", FlowHisTask::getTaskId, FlowUser::getAssociated)
.leftJoin(FlowInstance.class, "c", FlowInstance::getId, FlowHisTask::getInstanceId)
.leftJoin(FlowDefinition.class, "d", FlowDefinition::getId, FlowInstance::getDefinitionId)
.leftJoin(FlowInstanceBizExt.class, "biz", FlowInstanceBizExt::getInstanceId, FlowInstance::getId)
.eq("a", FlowUser::getType, "4")
.eq("a", FlowUser::getDelFlag, "0")
.eq("b", FlowHisTask::getDelFlag, "0")
.eq("d", FlowDefinition::getDelFlag, "0")
.like(hasText(bo.getNodeName()), "b", FlowHisTask::getNodeName, bo.getNodeName())
.like(hasText(bo.getFlowName()), "d", FlowDefinition::getFlowName, bo.getFlowName())
.like(hasText(bo.getFlowCode()), "d", FlowDefinition::getFlowCode, bo.getFlowCode())
.like(hasText(bo.getFlowStatus()), "c", FlowInstance::getFlowStatus, bo.getFlowStatus())
.in(hasItems(bo.getCreateByIds()), "c", FlowInstance::getCreateBy, bo.getCreateByIds())
.in(hasItems(categoryIds), "d", FlowDefinition::getCategory, categoryIds)
.between(hasBetween(bo), "a", FlowUser::getCreateTime, bo.getParams().get("beginTime"), bo.getParams().get("endTime"))
.eq(StringUtils.isNotBlank(userId), "a", FlowUser::getProcessedBy, userId)
.orderByDesc("a", FlowUser::getCreateTime)
.orderByDesc("b", FlowHisTask::getUpdateTime);
return wrapper.page(page, FlowTaskVo.class);
}
default boolean hasText(String value) {
return StringUtils.isNotBlank(value);
}
default boolean hasItems(List<?> values) {
return values != null && !values.isEmpty();
}
default boolean hasBetween(FlowTaskBo bo) {
return bo != null && bo.getParams() != null && bo.getParams().get("beginTime") != null && bo.getParams().get("endTime") != null;
}
/**
* 查询当前用户的抄送
*
* @param page 分页
* @param queryWrapper 条件
* @return 结果
*/
Page<FlowTaskVo> getTaskCopyByPage(@Param("page") Page<FlowTaskVo> page, @Param(Constants.WRAPPER) QueryWrapper<FlowTaskBo> queryWrapper);
}

View File

@@ -5,10 +5,10 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.enums.BusinessStatusEnum;
@@ -36,6 +36,7 @@ import org.dromara.warm.flow.orm.mapper.FlowHisTaskMapper;
import org.dromara.warm.flow.orm.mapper.FlowInstanceMapper;
import org.dromara.workflow.common.ConditionalOnEnable;
import org.dromara.workflow.common.enums.TaskStatusEnum;
import org.dromara.workflow.domain.FlowInstanceBizExt;
import org.dromara.workflow.domain.bo.FlowCancelBo;
import org.dromara.workflow.domain.bo.FlowInstanceBo;
import org.dromara.workflow.domain.bo.FlowInvalidBo;
@@ -82,8 +83,8 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
*/
@Override
public TableDataInfo<FlowInstanceVo> selectRunningInstanceList(FlowInstanceBo flowInstanceBo, PageQuery pageQuery) {
QueryWrapper<FlowInstanceBo> queryWrapper = buildQueryWrapper(flowInstanceBo);
queryWrapper.in("fi.flow_status", BusinessStatusEnum.runningStatus());
MPJLambdaWrapper<FlowInstance> queryWrapper = buildQueryWrapper(flowInstanceBo);
queryWrapper.in("fi", FlowInstance::getFlowStatus, BusinessStatusEnum.runningStatus());
Page<FlowInstanceVo> page = flwInstanceMapper.selectInstanceList(pageQuery.build(), queryWrapper);
return TableDataInfo.build(page);
}
@@ -96,8 +97,8 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
*/
@Override
public TableDataInfo<FlowInstanceVo> selectFinishInstanceList(FlowInstanceBo flowInstanceBo, PageQuery pageQuery) {
QueryWrapper<FlowInstanceBo> queryWrapper = buildQueryWrapper(flowInstanceBo);
queryWrapper.in("fi.flow_status", BusinessStatusEnum.finishStatus());
MPJLambdaWrapper<FlowInstance> queryWrapper = buildQueryWrapper(flowInstanceBo);
queryWrapper.in("fi", FlowInstance::getFlowStatus, BusinessStatusEnum.finishStatus());
Page<FlowInstanceVo> page = flwInstanceMapper.selectInstanceList(pageQuery.build(), queryWrapper);
return TableDataInfo.build(page);
}
@@ -134,19 +135,43 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
* @param flowInstanceBo 查询条件
* @return 查询条件构造方法
*/
private QueryWrapper<FlowInstanceBo> buildQueryWrapper(FlowInstanceBo flowInstanceBo) {
QueryWrapper<FlowInstanceBo> queryWrapper = Wrappers.query();
queryWrapper.like(StringUtils.isNotBlank(flowInstanceBo.getNodeName()), "fi.node_name", flowInstanceBo.getNodeName());
queryWrapper.like(StringUtils.isNotBlank(flowInstanceBo.getFlowName()), "fd.flow_name", flowInstanceBo.getFlowName());
queryWrapper.like(StringUtils.isNotBlank(flowInstanceBo.getFlowCode()), "fd.flow_code", flowInstanceBo.getFlowCode());
private MPJLambdaWrapper<FlowInstance> buildQueryWrapper(FlowInstanceBo flowInstanceBo) {
MPJLambdaWrapper<FlowInstance> queryWrapper = JoinWrappers.lambda("fi", FlowInstance.class)
.selectAs(FlowInstance::getId, FlowInstanceVo::getId)
.selectAs(FlowInstance::getCreateTime, FlowInstanceVo::getCreateTime)
.selectAs(FlowInstance::getUpdateTime, FlowInstanceVo::getUpdateTime)
.selectAs(FlowInstance::getDelFlag, FlowInstanceVo::getDelFlag)
.selectAs(FlowInstance::getDefinitionId, FlowInstanceVo::getDefinitionId)
.selectAs(FlowInstance::getBusinessId, FlowInstanceVo::getBusinessId)
.selectAs(FlowInstance::getNodeType, FlowInstanceVo::getNodeType)
.selectAs(FlowInstance::getNodeCode, FlowInstanceVo::getNodeCode)
.selectAs(FlowInstance::getNodeName, FlowInstanceVo::getNodeName)
.selectAs(FlowInstance::getVariable, FlowInstanceVo::getVariable)
.selectAs(FlowInstance::getFlowStatus, FlowInstanceVo::getFlowStatus)
.selectAs(FlowInstance::getActivityStatus, FlowInstanceVo::getActivityStatus)
.selectAs(FlowInstance::getCreateBy, FlowInstanceVo::getCreateBy)
.selectAs(FlowInstance::getExt, FlowInstanceVo::getExt)
.selectAs(org.dromara.warm.flow.orm.entity.FlowDefinition::getFlowName, FlowInstanceVo::getFlowName)
.selectAs(org.dromara.warm.flow.orm.entity.FlowDefinition::getFlowCode, FlowInstanceVo::getFlowCode)
.selectAs(org.dromara.warm.flow.orm.entity.FlowDefinition::getVersion, FlowInstanceVo::getVersion)
.selectAs(org.dromara.warm.flow.orm.entity.FlowDefinition::getFormCustom, FlowInstanceVo::getFormCustom)
.selectAs(org.dromara.warm.flow.orm.entity.FlowDefinition::getFormPath, FlowInstanceVo::getFormPath)
.selectAs(org.dromara.warm.flow.orm.entity.FlowDefinition::getCategory, FlowInstanceVo::getCategory)
.selectAs(FlowInstanceBizExt::getBusinessCode, FlowInstanceVo::getBusinessCode)
.selectAs(FlowInstanceBizExt::getBusinessTitle, FlowInstanceVo::getBusinessTitle)
.leftJoin(org.dromara.warm.flow.orm.entity.FlowDefinition.class, "fd", org.dromara.warm.flow.orm.entity.FlowDefinition::getId, FlowInstance::getDefinitionId)
.leftJoin(FlowInstanceBizExt.class, "biz", FlowInstanceBizExt::getInstanceId, FlowInstance::getId);
queryWrapper.like(StringUtils.isNotBlank(flowInstanceBo.getNodeName()), "fi", FlowInstance::getNodeName, flowInstanceBo.getNodeName());
queryWrapper.like(StringUtils.isNotBlank(flowInstanceBo.getFlowName()), "fd", org.dromara.warm.flow.orm.entity.FlowDefinition::getFlowName, flowInstanceBo.getFlowName());
queryWrapper.like(StringUtils.isNotBlank(flowInstanceBo.getFlowCode()), "fd", org.dromara.warm.flow.orm.entity.FlowDefinition::getFlowCode, flowInstanceBo.getFlowCode());
if (StringUtils.isNotBlank(flowInstanceBo.getCategory())) {
List<Long> categoryIds = flwCategoryMapper.selectCategoryIdsByParentId(Convert.toLong(flowInstanceBo.getCategory()));
queryWrapper.in("fd.category", StreamUtils.toList(categoryIds, Convert::toStr));
queryWrapper.in(CollUtil.isNotEmpty(categoryIds), "fd", org.dromara.warm.flow.orm.entity.FlowDefinition::getCategory, StreamUtils.toList(categoryIds, Convert::toStr));
}
queryWrapper.eq(StringUtils.isNotBlank(flowInstanceBo.getBusinessId()), "fi.business_id", flowInstanceBo.getBusinessId());
queryWrapper.in(CollUtil.isNotEmpty(flowInstanceBo.getCreateByIds()), "fi.create_by", flowInstanceBo.getCreateByIds());
queryWrapper.eq("fi.del_flag", "0");
queryWrapper.orderByDesc("fi.create_time");
queryWrapper.eq(StringUtils.isNotBlank(flowInstanceBo.getBusinessId()), "fi", FlowInstance::getBusinessId, flowInstanceBo.getBusinessId());
queryWrapper.in(CollUtil.isNotEmpty(flowInstanceBo.getCreateByIds()), "fi", FlowInstance::getCreateBy, flowInstanceBo.getCreateByIds());
queryWrapper.eq("fi", FlowInstance::getDelFlag, "0");
queryWrapper.orderByDesc("fi", FlowInstance::getCreateTime);
return queryWrapper;
}
@@ -306,8 +331,8 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
*/
@Override
public TableDataInfo<FlowInstanceVo> selectCurrentInstanceList(FlowInstanceBo instanceBo, PageQuery pageQuery) {
QueryWrapper<FlowInstanceBo> queryWrapper = buildQueryWrapper(instanceBo);
queryWrapper.eq("fi.create_by", LoginHelper.getUserIdStr());
MPJLambdaWrapper<FlowInstance> queryWrapper = buildQueryWrapper(instanceBo);
queryWrapper.eq("fi", FlowInstance::getCreateBy, LoginHelper.getUserIdStr());
Page<FlowInstanceVo> page = flwInstanceMapper.selectInstanceList(pageQuery.build(), queryWrapper);
return TableDataInfo.build(page);
}

View File

@@ -8,8 +8,6 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.lock.annotation.Lock4j;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -372,11 +370,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
*/
@Override
public TableDataInfo<FlowTaskVo> pageByTaskWait(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
QueryWrapper<FlowTaskBo> queryWrapper = buildQueryWrapper(flowTaskBo);
queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey());
queryWrapper.in("t.processed_by", LoginHelper.getUserIdStr());
queryWrapper.in("t.flow_status", BusinessStatusEnum.WAITING.getStatus());
Page<FlowTaskVo> page = flwTaskMapper.getListRunTask(pageQuery.build(), queryWrapper);
Page<FlowTaskVo> page = flwTaskMapper.getListRunTask(pageQuery.build(), flowTaskBo, categoryIds(flowTaskBo), LoginHelper.getUserIdStr());
this.wrapAssigneeInfo(page.getRecords());
return TableDataInfo.build(page);
}
@@ -389,10 +383,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
*/
@Override
public TableDataInfo<FlowHisTaskVo> pageByTaskFinish(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
QueryWrapper<FlowTaskBo> queryWrapper = buildQueryWrapper(flowTaskBo);
queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey());
queryWrapper.in("t.approver", LoginHelper.getUserIdStr());
Page<FlowHisTaskVo> page = flwTaskMapper.getListFinishTask(pageQuery.build(), queryWrapper);
Page<FlowHisTaskVo> page = flwTaskMapper.getListFinishTask(pageQuery.build(), flowTaskBo, categoryIds(flowTaskBo), LoginHelper.getUserIdStr());
return TableDataInfo.build(page);
}
@@ -404,9 +395,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
*/
@Override
public TableDataInfo<FlowTaskVo> pageByAllTaskWait(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
QueryWrapper<FlowTaskBo> queryWrapper = buildQueryWrapper(flowTaskBo);
queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey());
Page<FlowTaskVo> page = flwTaskMapper.getListRunTask(pageQuery.build(), queryWrapper);
Page<FlowTaskVo> page = flwTaskMapper.getListRunTask(pageQuery.build(), flowTaskBo, categoryIds(flowTaskBo), null);
this.wrapAssigneeInfo(page.getRecords());
return TableDataInfo.build(page);
}
@@ -437,8 +426,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
*/
@Override
public TableDataInfo<FlowHisTaskVo> pageByAllTaskFinish(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
QueryWrapper<FlowTaskBo> queryWrapper = buildQueryWrapper(flowTaskBo);
Page<FlowHisTaskVo> page = flwTaskMapper.getListFinishTask(pageQuery.build(), queryWrapper);
Page<FlowHisTaskVo> page = flwTaskMapper.getListFinishTask(pageQuery.build(), flowTaskBo, categoryIds(flowTaskBo), null);
return TableDataInfo.build(page);
}
@@ -450,28 +438,16 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
*/
@Override
public TableDataInfo<FlowTaskVo> pageByTaskCopy(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
QueryWrapper<FlowTaskBo> queryWrapper = buildQueryWrapper(flowTaskBo);
queryWrapper.in("t.processed_by", LoginHelper.getUserIdStr());
Page<FlowTaskVo> page = flwTaskMapper.getTaskCopyByPage(pageQuery.build(), queryWrapper);
Page<FlowTaskVo> page = flwTaskMapper.getTaskCopyByPage(pageQuery.build(), flowTaskBo, categoryIds(flowTaskBo), LoginHelper.getUserIdStr());
return TableDataInfo.build(page);
}
private QueryWrapper<FlowTaskBo> buildQueryWrapper(FlowTaskBo flowTaskBo) {
Map<String, Object> params = flowTaskBo.getParams();
QueryWrapper<FlowTaskBo> wrapper = Wrappers.query();
wrapper.like(StringUtils.isNotBlank(flowTaskBo.getNodeName()), "t.node_name", flowTaskBo.getNodeName());
wrapper.like(StringUtils.isNotBlank(flowTaskBo.getFlowName()), "t.flow_name", flowTaskBo.getFlowName());
wrapper.like(StringUtils.isNotBlank(flowTaskBo.getFlowCode()), "t.flow_code", flowTaskBo.getFlowCode());
wrapper.like(StringUtils.isNotBlank(flowTaskBo.getFlowStatus()), "t.flow_status", flowTaskBo.getFlowStatus());
wrapper.in(CollUtil.isNotEmpty(flowTaskBo.getCreateByIds()), "t.create_by", flowTaskBo.getCreateByIds());
private List<String> categoryIds(FlowTaskBo flowTaskBo) {
if (StringUtils.isNotBlank(flowTaskBo.getCategory())) {
List<Long> categoryIds = flwCategoryMapper.selectCategoryIdsByParentId(Convert.toLong(flowTaskBo.getCategory()));
wrapper.in("t.category", StreamUtils.toList(categoryIds, Convert::toStr));
return StreamUtils.toList(categoryIds, Convert::toStr);
}
wrapper.between(params.get("beginTime") != null && params.get("endTime") != null,
"t.create_time", params.get("beginTime"), params.get("endTime"));
wrapper.orderByDesc("t.create_time").orderByDesc("t.update_time");
return wrapper;
return null;
}
/**

View File

@@ -1,39 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.workflow.mapper.FlwInstanceMapper">
<resultMap type="org.dromara.workflow.domain.vo.FlowInstanceVo" id="FlowInstanceResult">
</resultMap>
<select id="selectInstanceList" resultMap="FlowInstanceResult">
select fi.id,
fi.create_time,
fi.update_time,
fi.tenant_id,
fi.del_flag,
fi.definition_id,
fi.business_id,
fi.node_type,
fi.node_code,
fi.node_name,
fi.variable,
fi.flow_status,
fi.activity_status,
fi.create_by,
fi.ext,
fd.flow_name,
fd.flow_code,
fd.version,
fd.form_custom,
fd.form_path,
fd.category,
biz.business_code,
biz.business_title
from flow_instance fi
left join flow_definition fd on fi.definition_id = fd.id
left join flow_instance_biz_ext biz on biz.instance_id = fi.id
${ew.getCustomSqlSegment}
</select>
</mapper>

View File

@@ -3,125 +3,5 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.workflow.mapper.FlwTaskMapper">
<resultMap type="org.dromara.workflow.domain.vo.FlowTaskVo" id="FlowTaskResult">
</resultMap>
<resultMap type="org.dromara.workflow.domain.vo.FlowHisTaskVo" id="FlowHisTaskResult">
</resultMap>
<select id="getListRunTask" resultMap="FlowTaskResult">
select * from (
select distinct
t.id,
t.node_code,
t.node_name,
t.node_type,
t.definition_id,
t.instance_id,
t.create_time,
t.update_time,
t.tenant_id,
i.business_id,
i.flow_status,
i.create_by,
d.flow_name,
d.flow_code,
d.form_custom,
d.category,
COALESCE(
NULLIF(TRIM(t.form_path), ''),
NULLIF(TRIM(d.form_path), '')
) AS form_path,
d.version,
uu.processed_by,
uu.type,
biz.business_code,
biz.business_title
from flow_task t
left join flow_user uu on uu.associated = t.id
left join flow_definition d on t.definition_id = d.id
left join flow_instance i on t.instance_id = i.id
left join flow_instance_biz_ext biz on biz.instance_id = i.id
where t.node_type = 1
and t.del_flag = '0'
and uu.del_flag = '0'
and uu.type in ('1','2','3')
) t
${ew.getCustomSqlSegment}
</select>
<select id="getListFinishTask" resultMap="FlowHisTaskResult">
select * from (
select
a.id,
a.node_code,
a.node_name,
a.cooperate_type,
a.approver,
a.collaborator,
a.node_type,
a.target_node_code,
a.target_node_name,
a.definition_id,
a.instance_id,
a.flow_status flow_task_status,
a.message,
a.ext,
a.create_time,
a.update_time,
a.tenant_id,
a.form_custom,
a.form_path,
b.flow_status,
b.business_id,
b.create_by,
c.flow_name,
c.flow_code,
c.category,
c.version,
biz.business_code,
biz.business_title
from flow_his_task a
left join flow_instance b on a.instance_id = b.id
left join flow_definition c on a.definition_id = c.id
left join flow_instance_biz_ext biz on biz.instance_id = b.id
where a.del_flag ='0'
and b.del_flag = '0'
and c.del_flag = '0'
and a.node_type in ('1','3','4')
) t
${ew.getCustomSqlSegment}
</select>
<select id="getTaskCopyByPage" resultMap="FlowTaskResult">
select * from (
select
b.id,
b.update_time,
c.business_id,
c.flow_status,
c.create_by,
a.processed_by,
a.create_time,
b.form_custom,
b.form_path,
b.node_name,
b.node_code,
d.flow_name,
d.flow_code,
d.category,
d.version,
biz.business_code,
biz.business_title
from flow_user a
left join flow_his_task b on a.associated = b.task_id
left join flow_instance c on b.instance_id = c.id
left join flow_definition d on c.definition_id=d.id
left join flow_instance_biz_ext biz on biz.instance_id = c.id
where a.type = '4'
and a.del_flag = '0'
and b.del_flag = '0'
and d.del_flag = '0'
) t
${ew.getCustomSqlSegment}
</select>
</mapper>