diff --git a/pom.xml b/pom.xml
index bf0fbe5b4..8d101e7cc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -22,6 +22,7 @@
4.0.2
3.5.19
3.5.16
+ 1.5.6
3.9.1
4.5.0
2.3
@@ -190,6 +191,12 @@
mybatis-plus-annotation
${mybatis-plus.version}
+
+
+ com.github.yulichang
+ mybatis-plus-join-boot-starter
+ ${mybatis-plus-join.version}
+
p6spy
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/model/LoginUser.java b/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/model/LoginUser.java
index c625f2d34..56928d0e4 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/model/LoginUser.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/model/LoginUser.java
@@ -112,9 +112,9 @@ public class LoginUser implements Serializable {
private List roles;
/**
- * 数据权限角色映射 key 为权限码 value 为可参与数据权限计算的角色
+ * 数据权限角色映射 key 为权限码 value 为可参与数据权限计算的角色ID列表
*/
- private Map> dataScopeRoleMap;
+ private Map> dataScopeRoleMap;
/**
* 岗位对象
diff --git a/ruoyi-common/ruoyi-common-mybatis/pom.xml b/ruoyi-common/ruoyi-common-mybatis/pom.xml
index 984cb6483..4a4f2ecb5 100644
--- a/ruoyi-common/ruoyi-common-mybatis/pom.xml
+++ b/ruoyi-common/ruoyi-common-mybatis/pom.xml
@@ -37,6 +37,11 @@
mybatis-plus-jsqlparser
+
+ com.github.yulichang
+ mybatis-plus-join-boot-starter
+
+
p6spy
diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/mapper/BaseMapperPlus.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/mapper/BaseMapperPlus.java
index 7964a37a5..c8bd8548f 100644
--- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/mapper/BaseMapperPlus.java
+++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/core/mapper/BaseMapperPlus.java
@@ -4,22 +4,21 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.ReflectionKit;
+import com.baomidou.mybatisplus.core.toolkit.reflect.GenericTypeUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.toolkit.Db;
+import com.github.yulichang.base.MPJBaseMapper;
import org.apache.ibatis.logging.Log;
import org.apache.ibatis.logging.LogFactory;
import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StreamUtils;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;
-import java.util.Objects;
import java.util.function.Function;
-import java.util.stream.Collectors;
/**
* 自定义 Mapper 接口, 实现 自定义扩展
@@ -30,7 +29,7 @@ import java.util.stream.Collectors;
* @since 2021-05-13
*/
@SuppressWarnings("unchecked")
-public interface BaseMapperPlus extends BaseMapper {
+public interface BaseMapperPlus extends MPJBaseMapper {
Log log = LogFactory.getLog(BaseMapperPlus.class);
@@ -42,7 +41,7 @@ public interface BaseMapperPlus extends BaseMapper {
* @return 当前类的泛型类型 V 的 Class 对象
*/
default Class currentVoClass() {
- return (Class) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseMapperPlus.class, 1);
+ return (Class) GenericTypeUtils.resolveTypeArguments(this.getClass(), BaseMapperPlus.class)[1];
}
/**
@@ -53,7 +52,7 @@ public interface BaseMapperPlus extends BaseMapper {
* @return 当前类的泛型类型 T 的 Class 对象
*/
default Class currentModelClass() {
- return (Class) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseMapperPlus.class, 0);
+ return (Class) GenericTypeUtils.resolveTypeArguments(this.getClass(), BaseMapperPlus.class)[0];
}
/**
@@ -236,11 +235,7 @@ public interface BaseMapperPlus extends BaseMapper {
* @return 查询到的单个VO对象,经过类型转换为指定的VO类后返回
*/
default C selectVoOne(Wrapper wrapper, Class voClass) {
- T obj = this.selectOne(wrapper);
- if (ObjectUtil.isNull(obj)) {
- return null;
- }
- return MapstructUtils.convert(obj, voClass);
+ return selectVoOne(wrapper, voClass, true);
}
/**
@@ -337,7 +332,7 @@ public interface BaseMapperPlus extends BaseMapper {
* @return 查询到的符合条件的对象列表,经过转换为指定类型的对象后返回
*/
default List selectObjs(Wrapper wrapper, Function super Object, C> mapper) {
- return this.selectObjs(wrapper).stream().filter(Objects::nonNull).map(mapper).collect(Collectors.toList());
+ return StreamUtils.toList(this.selectObjs(wrapper), mapper);
}
}
diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java
index 0556bb698..cc4bc9d36 100644
--- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java
+++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java
@@ -225,13 +225,22 @@ public class PlusDataPermissionHandler {
if (!access.constrained()) {
return roles;
}
+ Map allRoleMap = new LinkedHashMap<>();
+ if (CollUtil.isNotEmpty(roles)) {
+ roles.forEach(role -> allRoleMap.put(role.getRoleId(), role));
+ }
Map roleMap = new LinkedHashMap<>();
- Map> dataScopeRoleMap = user.getDataScopeRoleMap();
+ Map> dataScopeRoleMap = user.getDataScopeRoleMap();
if (CollUtil.isNotEmpty(dataScopeRoleMap)) {
access.perms().forEach(perm -> {
- List roleList = dataScopeRoleMap.get(perm);
- if (CollUtil.isNotEmpty(roleList)) {
- roleList.forEach(role -> roleMap.putIfAbsent(role.getRoleId(), role));
+ List roleIds = dataScopeRoleMap.get(perm);
+ if (CollUtil.isNotEmpty(roleIds)) {
+ roleIds.forEach(roleId -> {
+ RoleDTO role = allRoleMap.get(roleId);
+ if (role != null) {
+ roleMap.putIfAbsent(role.getRoleId(), role);
+ }
+ });
}
});
}
diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/mapper/GenTableMapper.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/mapper/GenTableMapper.java
index d859bf75d..d74050ed3 100644
--- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/mapper/GenTableMapper.java
+++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/mapper/GenTableMapper.java
@@ -15,29 +15,6 @@ import java.util.List;
@InterceptorIgnore(dataPermission = "true", tenantLine = "true")
public interface GenTableMapper extends BaseMapperPlus {
- /**
- * 查询所有表信息
- *
- * @return 表信息集合
- */
- List selectGenTableAll();
-
- /**
- * 查询表ID业务信息
- *
- * @param id 业务ID
- * @return 业务信息
- */
- GenTable selectGenTableById(Long id);
-
- /**
- * 查询表名称业务信息
- *
- * @param tableName 表名称
- * @return 业务信息
- */
- GenTable selectGenTableByName(String tableName);
-
/**
* 查询指定数据源下的所有表名列表
*
diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java
index 3fc1682fe..e5ce0967f 100644
--- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java
+++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java
@@ -84,7 +84,7 @@ public class GenTableServiceImpl implements IGenTableService {
*/
@Override
public GenTable selectGenTableById(Long id) {
- GenTable genTable = baseMapper.selectGenTableById(id);
+ GenTable genTable = getGenTable(id);
setTableFromOptions(genTable);
return genTable;
}
@@ -211,7 +211,8 @@ public class GenTableServiceImpl implements IGenTableService {
*/
@Override
public List selectGenTableAll() {
- return baseMapper.selectGenTableAll();
+ return fillTableColumns(baseMapper.selectList(new LambdaQueryWrapper()
+ .orderByAsc(GenTable::getTableId)));
}
/**
@@ -318,7 +319,7 @@ public class GenTableServiceImpl implements IGenTableService {
public Map previewCode(Long tableId) {
Map dataMap = new LinkedHashMap<>();
// 查询表信息
- GenTable table = baseMapper.selectGenTableById(tableId);
+ GenTable table = getGenTable(tableId);
List menuIds = new ArrayList<>();
for (int i = 0; i < 6; i++) {
menuIds.add(IdGeneratorUtil.nextLongId());
@@ -365,7 +366,7 @@ public class GenTableServiceImpl implements IGenTableService {
@Override
public void generatorCode(Long tableId) {
// 查询表信息
- GenTable table = baseMapper.selectGenTableById(tableId);
+ GenTable table = getGenTable(tableId);
// 设置主键列信息
setPkColumn(table);
@@ -399,7 +400,7 @@ public class GenTableServiceImpl implements IGenTableService {
@DSTransactional
@Override
public void synchDb(Long tableId) {
- GenTable table = baseMapper.selectGenTableById(tableId);
+ GenTable table = getGenTable(tableId);
List tableColumns = table.getColumns();
Map tableColumnMap = StreamUtils.toIdentityMap(tableColumns, GenTableColumn::getColumnName);
@@ -464,7 +465,7 @@ public class GenTableServiceImpl implements IGenTableService {
*/
private void generatorCode(Long tableId, ZipOutputStream zip) {
// 查询表信息
- GenTable table = baseMapper.selectGenTableById(tableId);
+ GenTable table = getGenTable(tableId);
List menuIds = new ArrayList<>();
for (int i = 0; i < 6; i++) {
menuIds.add(IdGeneratorUtil.nextLongId());
@@ -517,6 +518,29 @@ public class GenTableServiceImpl implements IGenTableService {
}
}
+ private GenTable getGenTable(Long tableId) {
+ GenTable table = baseMapper.selectById(tableId);
+ if (ObjectUtil.isNull(table)) {
+ throw new ServiceException("业务表不存在");
+ }
+ fillTableColumns(Collections.singletonList(table));
+ return table;
+ }
+
+ private List fillTableColumns(List tables) {
+ if (CollUtil.isEmpty(tables)) {
+ return tables;
+ }
+ List tableIds = StreamUtils.toList(tables, GenTable::getTableId);
+ List columns = genTableColumnMapper.selectList(new LambdaQueryWrapper()
+ .in(GenTableColumn::getTableId, tableIds)
+ .orderByAsc(GenTableColumn::getTableId)
+ .orderByAsc(GenTableColumn::getSort));
+ Map> columnMap = StreamUtils.groupByKey(columns, GenTableColumn::getTableId);
+ tables.forEach(table -> table.setColumns(columnMap.getOrDefault(table.getTableId(), new ArrayList<>())));
+ return tables;
+ }
+
/**
* 设置主键列信息
*
diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableMapper.xml b/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableMapper.xml
index 148182091..d0d3e20cf 100644
--- a/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableMapper.xml
+++ b/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableMapper.xml
@@ -4,38 +4,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
-
-
-
-
-
-
-
-
-
-
- SELECT t.table_id, t.data_name, t.table_name, t.table_comment, t.sub_table_name, t.sub_table_fk_name, t.class_name, t.tpl_category, t.package_name, t.module_name, t.business_name, t.function_name, t.function_author, t.gen_type, t.gen_path, t.options, t.remark,
- c.column_id, c.column_name, c.column_comment, c.column_type, c.java_type, c.java_field, c.is_pk, c.is_increment, c.is_required, c.is_insert, c.is_edit, c.is_list, c.is_query, c.query_type, c.html_type, c.dict_type, c.sort
- FROM gen_table t
- LEFT JOIN gen_table_column c ON t.table_id = c.table_id
-
-
-
-
-
-
-
-
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java
index 2cfd3db98..75b02fed2 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java
@@ -4,11 +4,19 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.toolkit.JoinWrappers;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.ibatis.annotations.Param;
+import org.dromara.common.core.constant.SystemConstants;
+import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.annotation.DataColumn;
import org.dromara.common.mybatis.annotation.DataPermission;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+import org.dromara.system.domain.SysDept;
+import org.dromara.system.domain.SysRole;
import org.dromara.system.domain.SysUser;
+import org.dromara.system.domain.SysUserRole;
+import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.vo.SysUserExportVo;
import org.dromara.system.domain.vo.SysUserVo;
@@ -60,7 +68,24 @@ public interface SysUserMapper extends BaseMapperPlus {
@DataColumn(key = "deptName", value = "d.dept_id"),
@DataColumn(key = "userName", value = "u.create_by")
})
- List selectUserExportList(@Param(Constants.WRAPPER) Wrapper queryWrapper);
+ default List selectUserExportList(SysUserBo user, List deptIds) {
+ MPJLambdaWrapper wrapper = JoinWrappers.lambda("u", SysUser.class)
+ .selectAll(SysUser.class)
+ .selectAs(SysDept::getDeptName, SysUserExportVo::getDeptName)
+ .selectAs("u1", SysUser::getUserName, SysUserExportVo::getLeaderName)
+ .leftJoin(SysDept.class, "d", SysDept::getDeptId, SysUser::getDeptId)
+ .leftJoin(SysUser.class, "u1", SysUser::getUserId, SysDept::getLeader)
+ .eq("u", SysUser::getDelFlag, SystemConstants.NORMAL)
+ .like(StringUtils.isNotBlank(user.getUserName()), "u", SysUser::getUserName, user.getUserName())
+ .like(StringUtils.isNotBlank(user.getNickName()), "u", SysUser::getNickName, user.getNickName())
+ .eq(StringUtils.isNotBlank(user.getStatus()), "u", SysUser::getStatus, user.getStatus())
+ .like(StringUtils.isNotBlank(user.getPhonenumber()), "u", SysUser::getPhonenumber, user.getPhonenumber())
+ .between(user.getParams().get("beginTime") != null && user.getParams().get("endTime") != null,
+ "u", SysUser::getCreateTime, user.getParams().get("beginTime"), user.getParams().get("endTime"))
+ .in(deptIds != null && !deptIds.isEmpty(), "u", SysUser::getDeptId, deptIds)
+ .orderByAsc("u", SysUser::getUserId);
+ return this.selectJoinList(SysUserExportVo.class, wrapper);
+ }
/**
* 根据条件分页查询已配用户角色列表
@@ -73,7 +98,12 @@ public interface SysUserMapper extends BaseMapperPlus {
@DataColumn(key = "deptName", value = "d.dept_id"),
@DataColumn(key = "userName", value = "u.create_by")
})
- Page selectAllocatedList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper);
+ default Page selectAllocatedList(Page page, SysUserBo user) {
+ MPJLambdaWrapper wrapper = this.buildUserRoleJoinWrapper(user)
+ .eq(user.getRoleId() != null, "r", SysRole::getRoleId, user.getRoleId())
+ .orderByAsc("u", SysUser::getUserId);
+ return this.selectJoinPage(page, SysUserVo.class, wrapper);
+ }
/**
* 根据条件分页查询未分配用户角色列表
@@ -85,7 +115,12 @@ public interface SysUserMapper extends BaseMapperPlus {
@DataColumn(key = "deptName", value = "d.dept_id"),
@DataColumn(key = "userName", value = "u.create_by")
})
- Page selectUnallocatedList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper);
+ default Page selectUnallocatedList(Page page, SysUserBo user, List userIds) {
+ MPJLambdaWrapper wrapper = this.buildUserRoleJoinWrapper(user)
+ .notIn(userIds != null && !userIds.isEmpty(), "u", SysUser::getUserId, userIds)
+ .orderByAsc("u", SysUser::getUserId);
+ return this.selectJoinPage(page, SysUserVo.class, wrapper);
+ }
/**
* 根据用户ID统计用户数量
@@ -128,4 +163,17 @@ public interface SysUserMapper extends BaseMapperPlus {
})
int updateById(@Param(Constants.ENTITY) SysUser user);
+ private MPJLambdaWrapper buildUserRoleJoinWrapper(SysUserBo user) {
+ return JoinWrappers.lambda("u", SysUser.class)
+ .distinct()
+ .selectAll(SysUser.class)
+ .leftJoin(SysDept.class, "d", SysDept::getDeptId, SysUser::getDeptId)
+ .leftJoin(SysUserRole.class, "sur", SysUserRole::getUserId, SysUser::getUserId)
+ .leftJoin(SysRole.class, "r", SysRole::getRoleId, SysUserRole::getRoleId)
+ .eq("u", SysUser::getDelFlag, SystemConstants.NORMAL)
+ .like(StringUtils.isNotBlank(user.getUserName()), "u", SysUser::getUserName, user.getUserName())
+ .eq(StringUtils.isNotBlank(user.getStatus()), "u", SysUser::getStatus, user.getStatus())
+ .like(StringUtils.isNotBlank(user.getPhonenumber()), "u", SysUser::getPhonenumber, user.getPhonenumber());
+ }
+
}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysPermissionService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysPermissionService.java
index a07971021..a578f3e3d 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysPermissionService.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysPermissionService.java
@@ -33,8 +33,8 @@ public interface ISysPermissionService {
* 根据角色列表构建数据权限角色映射
*
* @param roles 角色列表
- * @return key 为权限码 value 为命中的角色列表
+ * @return key 为权限码 value 为命中的角色ID列表
*/
- Map> getDataScopeRoleMap(List roles);
+ Map> getDataScopeRoleMap(List roles);
}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPermissionServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPermissionServiceImpl.java
index aa394add6..08d9af9d1 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPermissionServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysPermissionServiceImpl.java
@@ -62,16 +62,15 @@ public class SysPermissionServiceImpl implements ISysPermissionService {
}
@Override
- public Map> getDataScopeRoleMap(List roles) {
+ public Map> getDataScopeRoleMap(List roles) {
if (CollUtil.isEmpty(roles)) {
return Map.of();
}
- Map roleMap = StreamUtils.toIdentityMap(roles, RoleDTO::getRoleId);
List roleIds = StreamUtils.toList(roles, RoleDTO::getRoleId);
Map> permsRoleIds = menuService.selectMenuPermsByRoleIds(roleIds);
- Map> rolePermsMap = new LinkedHashMap<>();
+ Map> rolePermsMap = new LinkedHashMap<>();
permsRoleIds.forEach((roleId, perms) -> {
- perms.forEach(perm -> rolePermsMap.computeIfAbsent(perm, k -> new ArrayList<>()).add(roleMap.get(roleId)));
+ perms.forEach(perm -> rolePermsMap.computeIfAbsent(perm, key -> new ArrayList<>()).add(roleId));
});
return rolePermsMap;
}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java
index 26d33e0bc..74c3222df 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java
@@ -6,7 +6,6 @@ import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
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;
@@ -70,20 +69,8 @@ public class SysUserServiceImpl implements ISysUserService {
*/
@Override
public List selectUserExportList(SysUserBo user) {
- Map params = user.getParams();
- QueryWrapper wrapper = Wrappers.query();
- wrapper.eq("u.del_flag", SystemConstants.NORMAL)
- .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
- .like(StringUtils.isNotBlank(user.getNickName()), "u.nick_name", user.getNickName())
- .eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus())
- .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
- .between(params.get("beginTime") != null && params.get("endTime") != null,
- "u.create_time", params.get("beginTime"), params.get("endTime"))
- .and(ObjectUtil.isNotNull(user.getDeptId()), w -> {
- List deptIds = deptMapper.selectDeptAndChildById(user.getDeptId());
- w.in("u.dept_id", deptIds);
- }).orderByAsc("u.user_id");
- return baseMapper.selectUserExportList(wrapper);
+ List deptIds = ObjectUtil.isNotNull(user.getDeptId()) ? deptMapper.selectDeptAndChildById(user.getDeptId()) : null;
+ return baseMapper.selectUserExportList(user, deptIds);
}
private Wrapper buildQueryWrapper(SysUserBo user) {
@@ -116,14 +103,7 @@ public class SysUserServiceImpl implements ISysUserService {
*/
@Override
public TableDataInfo selectAllocatedList(SysUserBo user, PageQuery pageQuery) {
- QueryWrapper wrapper = Wrappers.query();
- wrapper.eq("u.del_flag", SystemConstants.NORMAL)
- .eq(ObjectUtil.isNotNull(user.getRoleId()), "r.role_id", user.getRoleId())
- .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
- .eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus())
- .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
- .orderByAsc("u.user_id");
- Page page = baseMapper.selectAllocatedList(pageQuery.build(), wrapper);
+ Page page = baseMapper.selectAllocatedList(pageQuery.build(), user);
return TableDataInfo.build(page);
}
@@ -136,14 +116,7 @@ public class SysUserServiceImpl implements ISysUserService {
@Override
public TableDataInfo selectUnallocatedList(SysUserBo user, PageQuery pageQuery) {
List userIds = userRoleMapper.selectUserIdsByRoleId(user.getRoleId());
- QueryWrapper wrapper = Wrappers.query();
- wrapper.eq("u.del_flag", SystemConstants.NORMAL)
- .and(w -> w.ne("r.role_id", user.getRoleId()).or().isNull("r.role_id"))
- .notIn(CollUtil.isNotEmpty(userIds), "u.user_id", userIds)
- .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
- .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
- .orderByAsc("u.user_id");
- Page page = baseMapper.selectUnallocatedList(pageQuery.build(), wrapper);
+ Page page = baseMapper.selectUnallocatedList(pageQuery.build(), user, userIds);
return TableDataInfo.build(page);
}
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
index 24be330bf..7f0df4a2c 100644
--- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -4,39 +4,4 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/FlwHisTaskMapper.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/FlwHisTaskMapper.java
new file mode 100644
index 000000000..a66ff5240
--- /dev/null
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/FlwHisTaskMapper.java
@@ -0,0 +1,88 @@
+package org.dromara.workflow.mapper;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.toolkit.JoinWrappers;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+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.FlowDefinition;
+import org.dromara.warm.flow.orm.entity.FlowHisTask;
+import org.dromara.warm.flow.orm.entity.FlowInstance;
+import org.dromara.workflow.domain.FlowInstanceBizExt;
+import org.dromara.workflow.domain.bo.FlowTaskBo;
+import org.dromara.workflow.domain.vo.FlowHisTaskVo;
+
+import java.util.List;
+
+/**
+ * 历史任务查询 Mapper
+ */
+public interface FlwHisTaskMapper extends BaseMapperPlus {
+
+ default Page getListFinishTask(Page page,
+ FlowTaskBo bo,
+ List categoryIds,
+ String userId) {
+ MPJLambdaWrapper 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 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;
+ }
+
+}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/FlwInstanceMapper.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/FlwInstanceMapper.java
index 92809c80f..d87a18767 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/FlwInstanceMapper.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/FlwInstanceMapper.java
@@ -1,10 +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 org.dromara.workflow.domain.bo.FlowInstanceBo;
+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.vo.FlowInstanceVo;
/**
@@ -13,7 +12,7 @@ import org.dromara.workflow.domain.vo.FlowInstanceVo;
* @author may
* @date 2024-03-02
*/
-public interface FlwInstanceMapper {
+public interface FlwInstanceMapper extends MPJBaseMapper {
/**
* 流程实例信息
@@ -22,6 +21,8 @@ public interface FlwInstanceMapper {
* @param queryWrapper 条件
* @return 结果
*/
- Page selectInstanceList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper);
+ default Page selectInstanceList(Page page, MPJLambdaWrapper queryWrapper) {
+ return this.selectJoinPage(page, FlowInstanceVo.class, queryWrapper);
+ }
}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/FlwTaskMapper.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/FlwTaskMapper.java
index 0d0422d5a..162071ca8 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/FlwTaskMapper.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/FlwTaskMapper.java
@@ -1,14 +1,21 @@
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.FlowDefinition;
+import org.dromara.warm.flow.orm.entity.FlowInstance;
+import org.dromara.warm.flow.orm.entity.FlowTask;
+import org.dromara.warm.flow.orm.entity.FlowUser;
+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 +23,67 @@ import org.dromara.workflow.domain.vo.FlowTaskVo;
* @author may
* @date 2024-03-02
*/
-public interface FlwTaskMapper {
+public interface FlwTaskMapper extends BaseMapperPlus {
- /**
- * 获取待办信息
- *
- * @param page 分页
- * @param queryWrapper 条件
- * @return 结果
- */
- Page getListRunTask(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper);
+ default Page getListRunTask(Page page,
+ FlowTaskBo bo,
+ List categoryIds,
+ String userId) {
+ MPJLambdaWrapper 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 getListFinishTask(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper);
+ 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 getTaskCopyByPage(@Param("page") Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper);
}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/FlwUserMapper.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/FlwUserMapper.java
new file mode 100644
index 000000000..44053eeb6
--- /dev/null
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/mapper/FlwUserMapper.java
@@ -0,0 +1,78 @@
+package org.dromara.workflow.mapper;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.toolkit.JoinWrappers;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+import org.dromara.warm.flow.orm.entity.FlowDefinition;
+import org.dromara.warm.flow.orm.entity.FlowHisTask;
+import org.dromara.warm.flow.orm.entity.FlowInstance;
+import org.dromara.warm.flow.orm.entity.FlowUser;
+import org.dromara.workflow.domain.FlowInstanceBizExt;
+import org.dromara.workflow.domain.bo.FlowTaskBo;
+import org.dromara.workflow.domain.vo.FlowTaskVo;
+
+import java.util.List;
+
+/**
+ * 流程用户查询 Mapper
+ */
+public interface FlwUserMapper extends BaseMapperPlus {
+
+ default Page getTaskCopyByPage(Page page,
+ FlowTaskBo bo,
+ List categoryIds,
+ String userId) {
+ MPJLambdaWrapper 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;
+ }
+
+}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java
index b64f6ab92..05a214bb2 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java
@@ -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 selectRunningInstanceList(FlowInstanceBo flowInstanceBo, PageQuery pageQuery) {
- QueryWrapper queryWrapper = buildQueryWrapper(flowInstanceBo);
- queryWrapper.in("fi.flow_status", BusinessStatusEnum.runningStatus());
+ MPJLambdaWrapper queryWrapper = buildQueryWrapper(flowInstanceBo);
+ queryWrapper.in("fi", FlowInstance::getFlowStatus, BusinessStatusEnum.runningStatus());
Page page = flwInstanceMapper.selectInstanceList(pageQuery.build(), queryWrapper);
return TableDataInfo.build(page);
}
@@ -96,8 +97,8 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
*/
@Override
public TableDataInfo selectFinishInstanceList(FlowInstanceBo flowInstanceBo, PageQuery pageQuery) {
- QueryWrapper queryWrapper = buildQueryWrapper(flowInstanceBo);
- queryWrapper.in("fi.flow_status", BusinessStatusEnum.finishStatus());
+ MPJLambdaWrapper queryWrapper = buildQueryWrapper(flowInstanceBo);
+ queryWrapper.in("fi", FlowInstance::getFlowStatus, BusinessStatusEnum.finishStatus());
Page page = flwInstanceMapper.selectInstanceList(pageQuery.build(), queryWrapper);
return TableDataInfo.build(page);
}
@@ -134,19 +135,43 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
* @param flowInstanceBo 查询条件
* @return 查询条件构造方法
*/
- private QueryWrapper buildQueryWrapper(FlowInstanceBo flowInstanceBo) {
- QueryWrapper 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 buildQueryWrapper(FlowInstanceBo flowInstanceBo) {
+ MPJLambdaWrapper 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 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;
}
@@ -310,8 +335,8 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
*/
@Override
public TableDataInfo selectCurrentInstanceList(FlowInstanceBo instanceBo, PageQuery pageQuery) {
- QueryWrapper queryWrapper = buildQueryWrapper(instanceBo);
- queryWrapper.eq("fi.create_by", LoginHelper.getUserIdStr());
+ MPJLambdaWrapper queryWrapper = buildQueryWrapper(instanceBo);
+ queryWrapper.eq("fi", FlowInstance::getCreateBy, LoginHelper.getUserIdStr());
Page page = flwInstanceMapper.selectInstanceList(pageQuery.build(), queryWrapper);
return TableDataInfo.build(page);
}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java
index 1249acf29..3fdfc7cb9 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java
@@ -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;
@@ -56,8 +54,10 @@ import org.dromara.workflow.domain.vo.FlowHisTaskVo;
import org.dromara.workflow.domain.vo.FlowTaskVo;
import org.dromara.workflow.domain.vo.NodeExtVo;
import org.dromara.workflow.mapper.FlwCategoryMapper;
+import org.dromara.workflow.mapper.FlwHisTaskMapper;
import org.dromara.workflow.mapper.FlwInstanceBizExtMapper;
import org.dromara.workflow.mapper.FlwTaskMapper;
+import org.dromara.workflow.mapper.FlwUserMapper;
import org.dromara.workflow.service.IFlwCommonService;
import org.dromara.workflow.service.IFlwNodeExtService;
import org.dromara.workflow.service.IFlwTaskAssigneeService;
@@ -89,6 +89,8 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
private final FlowTaskMapper flowTaskMapper;
private final FlowHisTaskMapper flowHisTaskMapper;
private final FlwTaskMapper flwTaskMapper;
+ private final FlwHisTaskMapper flwHisTaskMapper;
+ private final FlwUserMapper flwUserMapper;
private final FlwCategoryMapper flwCategoryMapper;
private final FlowNodeMapper flowNodeMapper;
private final IFlwTaskAssigneeService flwTaskAssigneeService;
@@ -375,11 +377,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
*/
@Override
public TableDataInfo pageByTaskWait(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
- QueryWrapper 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 page = flwTaskMapper.getListRunTask(pageQuery.build(), queryWrapper);
+ Page page = flwTaskMapper.getListRunTask(pageQuery.build(), flowTaskBo, categoryIds(flowTaskBo), LoginHelper.getUserIdStr());
this.wrapAssigneeInfo(page.getRecords());
return TableDataInfo.build(page);
}
@@ -392,10 +390,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
*/
@Override
public TableDataInfo pageByTaskFinish(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
- QueryWrapper queryWrapper = buildQueryWrapper(flowTaskBo);
- queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey());
- queryWrapper.in("t.approver", LoginHelper.getUserIdStr());
- Page page = flwTaskMapper.getListFinishTask(pageQuery.build(), queryWrapper);
+ Page page = flwHisTaskMapper.getListFinishTask(pageQuery.build(), flowTaskBo, categoryIds(flowTaskBo), LoginHelper.getUserIdStr());
return TableDataInfo.build(page);
}
@@ -407,9 +402,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
*/
@Override
public TableDataInfo pageByAllTaskWait(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
- QueryWrapper queryWrapper = buildQueryWrapper(flowTaskBo);
- queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey());
- Page page = flwTaskMapper.getListRunTask(pageQuery.build(), queryWrapper);
+ Page page = flwTaskMapper.getListRunTask(pageQuery.build(), flowTaskBo, categoryIds(flowTaskBo), null);
this.wrapAssigneeInfo(page.getRecords());
return TableDataInfo.build(page);
}
@@ -440,8 +433,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
*/
@Override
public TableDataInfo pageByAllTaskFinish(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
- QueryWrapper queryWrapper = buildQueryWrapper(flowTaskBo);
- Page page = flwTaskMapper.getListFinishTask(pageQuery.build(), queryWrapper);
+ Page page = flwHisTaskMapper.getListFinishTask(pageQuery.build(), flowTaskBo, categoryIds(flowTaskBo), null);
return TableDataInfo.build(page);
}
@@ -453,28 +445,16 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
*/
@Override
public TableDataInfo pageByTaskCopy(FlowTaskBo flowTaskBo, PageQuery pageQuery) {
- QueryWrapper queryWrapper = buildQueryWrapper(flowTaskBo);
- queryWrapper.in("t.processed_by", LoginHelper.getUserIdStr());
- Page page = flwTaskMapper.getTaskCopyByPage(pageQuery.build(), queryWrapper);
+ Page page = flwUserMapper.getTaskCopyByPage(pageQuery.build(), flowTaskBo, categoryIds(flowTaskBo), LoginHelper.getUserIdStr());
return TableDataInfo.build(page);
}
- private QueryWrapper buildQueryWrapper(FlowTaskBo flowTaskBo) {
- Map params = flowTaskBo.getParams();
- QueryWrapper 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 categoryIds(FlowTaskBo flowTaskBo) {
if (StringUtils.isNotBlank(flowTaskBo.getCategory())) {
List 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;
}
/**
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwHisTaskMapper.xml b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwHisTaskMapper.xml
new file mode 100644
index 000000000..420e4f9a1
--- /dev/null
+++ b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwHisTaskMapper.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwInstanceMapper.xml b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwInstanceMapper.xml
index 3a83afd7e..f85fb804e 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwInstanceMapper.xml
+++ b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwInstanceMapper.xml
@@ -3,36 +3,4 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
-
-
-
-
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml
index 3858d4d75..8a6a3dd7a 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml
+++ b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwTaskMapper.xml
@@ -3,123 +3,4 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-
-
-
-
-
-
-
-
-
-
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwUserMapper.xml b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwUserMapper.xml
new file mode 100644
index 000000000..6c6389da9
--- /dev/null
+++ b/ruoyi-modules/ruoyi-workflow/src/main/resources/mapper/workflow/FlwUserMapper.xml
@@ -0,0 +1,7 @@
+
+
+
+
+