mirror of
https://gitee.com/dromara/RuoYi-Vue-Plus.git
synced 2026-03-29 16:53:23 +08:00
[重大更新] 集成 mybatis-plus-join 重构项目代码(实验性功能不稳定)
This commit is contained in:
@@ -15,29 +15,6 @@ import java.util.List;
|
||||
@InterceptorIgnore(dataPermission = "true", tenantLine = "true")
|
||||
public interface GenTableMapper extends BaseMapperPlus<GenTable, GenTable> {
|
||||
|
||||
/**
|
||||
* 查询所有表信息
|
||||
*
|
||||
* @return 表信息集合
|
||||
*/
|
||||
List<GenTable> selectGenTableAll();
|
||||
|
||||
/**
|
||||
* 查询表ID业务信息
|
||||
*
|
||||
* @param id 业务ID
|
||||
* @return 业务信息
|
||||
*/
|
||||
GenTable selectGenTableById(Long id);
|
||||
|
||||
/**
|
||||
* 查询表名称业务信息
|
||||
*
|
||||
* @param tableName 表名称
|
||||
* @return 业务信息
|
||||
*/
|
||||
GenTable selectGenTableByName(String tableName);
|
||||
|
||||
/**
|
||||
* 查询指定数据源下的所有表名列表
|
||||
*
|
||||
|
||||
@@ -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<GenTable> selectGenTableAll() {
|
||||
return baseMapper.selectGenTableAll();
|
||||
return fillTableColumns(baseMapper.selectList(new LambdaQueryWrapper<GenTable>()
|
||||
.orderByAsc(GenTable::getTableId)));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -318,7 +319,7 @@ public class GenTableServiceImpl implements IGenTableService {
|
||||
public Map<String, String> previewCode(Long tableId) {
|
||||
Map<String, String> dataMap = new LinkedHashMap<>();
|
||||
// 查询表信息
|
||||
GenTable table = baseMapper.selectGenTableById(tableId);
|
||||
GenTable table = getGenTable(tableId);
|
||||
List<Long> 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<GenTableColumn> tableColumns = table.getColumns();
|
||||
Map<String, GenTableColumn> 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<Long> 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<GenTable> fillTableColumns(List<GenTable> tables) {
|
||||
if (CollUtil.isEmpty(tables)) {
|
||||
return tables;
|
||||
}
|
||||
List<Long> tableIds = StreamUtils.toList(tables, GenTable::getTableId);
|
||||
List<GenTableColumn> columns = genTableColumnMapper.selectList(new LambdaQueryWrapper<GenTableColumn>()
|
||||
.in(GenTableColumn::getTableId, tableIds)
|
||||
.orderByAsc(GenTableColumn::getTableId)
|
||||
.orderByAsc(GenTableColumn::getSort));
|
||||
Map<Long, List<GenTableColumn>> columnMap = StreamUtils.groupByKey(columns, GenTableColumn::getTableId);
|
||||
tables.forEach(table -> table.setColumns(columnMap.getOrDefault(table.getTableId(), new ArrayList<>())));
|
||||
return tables;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置主键列信息
|
||||
*
|
||||
|
||||
@@ -3,39 +3,6 @@
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.dromara.generator.mapper.GenTableMapper">
|
||||
|
||||
<!-- 多结构嵌套自动映射需带上每个实体的主键id 否则映射会失败 -->
|
||||
<resultMap type="org.dromara.generator.domain.GenTable" id="GenTableResult">
|
||||
<id property="tableId" column="table_id" />
|
||||
<collection property="columns" javaType="java.util.List" resultMap="GenTableColumnResult" />
|
||||
</resultMap>
|
||||
|
||||
<resultMap type="org.dromara.generator.domain.GenTableColumn" id="GenTableColumnResult">
|
||||
<id property="columnId" column="column_id"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="genSelect">
|
||||
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
|
||||
</sql>
|
||||
|
||||
<select id="selectGenTableById" parameterType="Long" resultMap="GenTableResult">
|
||||
<include refid="genSelect"/>
|
||||
where t.table_id = #{tableId} order by c.sort
|
||||
</select>
|
||||
|
||||
<select id="selectGenTableByName" parameterType="String" resultMap="GenTableResult">
|
||||
<include refid="genSelect"/>
|
||||
where t.table_name = #{tableName} order by c.sort
|
||||
</select>
|
||||
|
||||
<select id="selectGenTableAll" parameterType="String" resultMap="GenTableResult">
|
||||
<include refid="genSelect"/>
|
||||
order by c.sort
|
||||
</select>
|
||||
|
||||
<select id="selectTableNameList" resultType="java.lang.String">
|
||||
select table_name from gen_table where data_name = #{dataName,jdbcType=VARCHAR}
|
||||
</select>
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
package org.dromara.system.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 角色菜单权限视图
|
||||
*/
|
||||
@Data
|
||||
public class SysRoleMenuPermVo implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Long roleId;
|
||||
|
||||
private String perms;
|
||||
}
|
||||
@@ -3,15 +3,21 @@ package org.dromara.system.mapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.github.yulichang.toolkit.JoinWrappers;
|
||||
import org.dromara.common.core.utils.StreamUtils;
|
||||
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.common.mybatis.helper.DataBaseHelper;
|
||||
import org.dromara.system.domain.SysDept;
|
||||
import org.dromara.system.domain.SysRole;
|
||||
import org.dromara.system.domain.SysRoleDept;
|
||||
import org.dromara.system.domain.vo.SysDeptVo;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* 部门管理 数据层
|
||||
@@ -20,42 +26,6 @@ import java.util.List;
|
||||
*/
|
||||
public interface SysDeptMapper extends BaseMapperPlus<SysDept, SysDeptVo> {
|
||||
|
||||
/**
|
||||
* 构建角色对应的部门 SQL 查询语句
|
||||
*
|
||||
* <p>该 SQL 用于查询某个角色关联的所有部门 ID,常用于数据权限控制</p>
|
||||
*
|
||||
* @param roleId 角色ID
|
||||
* @return 查询部门ID的 SQL 语句字符串
|
||||
*/
|
||||
default String buildDeptByRoleSql(Long roleId) {
|
||||
return """
|
||||
select srd.dept_id from sys_role_dept srd
|
||||
left join sys_role sr on sr.role_id = srd.role_id
|
||||
where srd.role_id = %d and sr.status = '0'
|
||||
""".formatted(roleId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建 SQL 查询,用于获取当前角色拥有的部门中所有的父部门ID
|
||||
*
|
||||
* <p>
|
||||
* 该 SQL 用于 deptCheckStrictly 场景下,排除非叶子节点(父节点)用。
|
||||
* </p>
|
||||
*
|
||||
* @param roleId 角色ID
|
||||
* @return SQL 语句字符串,查询角色下部门的所有父部门ID
|
||||
*/
|
||||
default String buildParentDeptByRoleSql(Long roleId) {
|
||||
return """
|
||||
select parent_id from sys_dept where dept_id in (
|
||||
select srd.dept_id from sys_role_dept srd
|
||||
left join sys_role sr on sr.role_id = srd.role_id
|
||||
where srd.role_id = %d and sr.status = '0'
|
||||
)
|
||||
""".formatted(roleId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询部门管理数据
|
||||
*
|
||||
@@ -129,15 +99,20 @@ public interface SysDeptMapper extends BaseMapperPlus<SysDept, SysDeptVo> {
|
||||
* @return 选中部门列表
|
||||
*/
|
||||
default List<Long> selectDeptListByRoleId(Long roleId, boolean deptCheckStrictly) {
|
||||
LambdaQueryWrapper<SysDept> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.select(SysDept::getDeptId)
|
||||
.inSql(SysDept::getDeptId, this.buildDeptByRoleSql(roleId))
|
||||
.orderByAsc(SysDept::getParentId)
|
||||
.orderByAsc(SysDept::getOrderNum);
|
||||
if (deptCheckStrictly) {
|
||||
wrapper.notInSql(SysDept::getDeptId, this.buildParentDeptByRoleSql(roleId));
|
||||
}
|
||||
return this.selectObjs(wrapper);
|
||||
List<SysDept> depts = this.selectJoinList(SysDept.class, JoinWrappers.lambda("d", SysDept.class)
|
||||
.distinct()
|
||||
.select(SysDept::getDeptId, SysDept::getParentId)
|
||||
.leftJoin(SysRoleDept.class, "srd", SysRoleDept::getDeptId, SysDept::getDeptId)
|
||||
.leftJoin(SysRole.class, "sr", SysRole::getRoleId, SysRoleDept::getRoleId)
|
||||
.eq("srd", SysRoleDept::getRoleId, roleId)
|
||||
.eq("sr", SysRole::getStatus, "0")
|
||||
.orderByAsc("d", SysDept::getParentId)
|
||||
.orderByAsc("d", SysDept::getOrderNum));
|
||||
Set<Long> parentIds = deptCheckStrictly ? new HashSet<>(StreamUtils.toList(depts, SysDept::getParentId)) : Collections.emptySet();
|
||||
return depts.stream()
|
||||
.map(SysDept::getDeptId)
|
||||
.filter(deptId -> !parentIds.contains(deptId))
|
||||
.toList();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,11 +2,17 @@ package org.dromara.system.mapper;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.github.yulichang.toolkit.JoinWrappers;
|
||||
import org.dromara.common.core.constant.SystemConstants;
|
||||
import org.dromara.common.core.utils.StreamUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
|
||||
import org.dromara.system.domain.SysMenu;
|
||||
import org.dromara.system.domain.SysRole;
|
||||
import org.dromara.system.domain.SysRoleMenu;
|
||||
import org.dromara.system.domain.SysUserRole;
|
||||
import org.dromara.system.domain.bo.SysMenuBo;
|
||||
import org.dromara.system.domain.vo.SysRoleMenuPermVo;
|
||||
import org.dromara.system.domain.vo.SysMenuVo;
|
||||
|
||||
import java.util.*;
|
||||
@@ -18,66 +24,6 @@ import java.util.*;
|
||||
*/
|
||||
public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo> {
|
||||
|
||||
/**
|
||||
* 构建用户权限菜单 SQL
|
||||
*
|
||||
* <p>
|
||||
* 查询用户所属角色所拥有的菜单权限,用于权限判断、菜单加载等场景
|
||||
* </p>
|
||||
*
|
||||
* @param userId 用户ID
|
||||
* @return SQL 字符串,用于 inSql 条件
|
||||
*/
|
||||
default String buildMenuByUserSql(Long userId) {
|
||||
return """
|
||||
select menu_id from sys_role_menu where role_id in (
|
||||
select sur.role_id from sys_user_role sur
|
||||
left join sys_role sr on sr.role_id = sur.role_id
|
||||
where sur.user_id = %d and sr.status = '0'
|
||||
)
|
||||
""".formatted(userId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建角色对应的菜单ID SQL 子查询
|
||||
*
|
||||
* <p>
|
||||
* 用于根据角色ID查询其所拥有的菜单权限(用于权限标识、菜单显示等场景)
|
||||
* 通常配合 inSql 使用
|
||||
* </p>
|
||||
*
|
||||
* @param roleId 角色ID
|
||||
* @return 查询菜单ID的 SQL 子查询字符串
|
||||
*/
|
||||
default String buildMenuByRoleSql(Long roleId) {
|
||||
return """
|
||||
select srm.menu_id from sys_role_menu srm
|
||||
left join sys_role sr on sr.role_id = srm.role_id
|
||||
where srm.role_id = %d and sr.status = '0'
|
||||
""".formatted(roleId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建角色所关联菜单的父菜单ID查询 SQL
|
||||
*
|
||||
* <p>
|
||||
* 用于配合菜单勾选树结构的 {@code menuCheckStrictly} 模式,过滤掉非叶子节点(父菜单),
|
||||
* 只返回角色实际勾选的末级菜单
|
||||
* </p>
|
||||
*
|
||||
* @param roleId 角色ID
|
||||
* @return SQL 语句字符串(查询菜单的父菜单ID)
|
||||
*/
|
||||
default String buildParentMenuByRoleSql(Long roleId) {
|
||||
return """
|
||||
select parent_id from sys_menu where menu_id in (
|
||||
select srm.menu_id from sys_role_menu srm
|
||||
left join sys_role sr on sr.role_id = srm.role_id
|
||||
where srm.role_id = %d and sr.status = '0'
|
||||
)
|
||||
""".formatted(roleId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据用户ID查询权限
|
||||
*
|
||||
@@ -85,13 +31,16 @@ public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo> {
|
||||
* @return 权限列表
|
||||
*/
|
||||
default Set<String> selectMenuPermsByUserId(Long userId) {
|
||||
List<String> list = this.selectObjs(
|
||||
new LambdaQueryWrapper<SysMenu>()
|
||||
.select(SysMenu::getPerms)
|
||||
.inSql(SysMenu::getMenuId, this.buildMenuByUserSql(userId))
|
||||
.isNotNull(SysMenu::getPerms)
|
||||
);
|
||||
return new HashSet<>(StreamUtils.filter(list, StringUtils::isNotBlank));
|
||||
List<SysMenu> list = this.selectJoinList(SysMenu.class, JoinWrappers.lambda("m", SysMenu.class)
|
||||
.distinct()
|
||||
.select(SysMenu::getPerms)
|
||||
.leftJoin(SysRoleMenu.class, "srm", SysRoleMenu::getMenuId, SysMenu::getMenuId)
|
||||
.leftJoin(SysUserRole.class, "sur", SysUserRole::getRoleId, SysRoleMenu::getRoleId)
|
||||
.leftJoin(SysRole.class, "sr", SysRole::getRoleId, SysRoleMenu::getRoleId)
|
||||
.eq("sur", SysUserRole::getUserId, userId)
|
||||
.eq("sr", SysRole::getStatus, SystemConstants.NORMAL)
|
||||
.isNotNull("m", SysMenu::getPerms));
|
||||
return new HashSet<>(StreamUtils.filter(StreamUtils.toList(list, SysMenu::getPerms), StringUtils::isNotBlank));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -101,13 +50,15 @@ public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo> {
|
||||
* @return 权限列表
|
||||
*/
|
||||
default Set<String> selectMenuPermsByRoleId(Long roleId) {
|
||||
List<String> list = this.selectObjs(
|
||||
new LambdaQueryWrapper<SysMenu>()
|
||||
.select(SysMenu::getPerms)
|
||||
.inSql(SysMenu::getMenuId, this.buildMenuByRoleSql(roleId))
|
||||
.isNotNull(SysMenu::getPerms)
|
||||
);
|
||||
return new HashSet<>(StreamUtils.filter(list, StringUtils::isNotBlank));
|
||||
List<SysMenu> list = this.selectJoinList(SysMenu.class, JoinWrappers.lambda("m", SysMenu.class)
|
||||
.distinct()
|
||||
.select(SysMenu::getPerms)
|
||||
.leftJoin(SysRoleMenu.class, "srm", SysRoleMenu::getMenuId, SysMenu::getMenuId)
|
||||
.leftJoin(SysRole.class, "sr", SysRole::getRoleId, SysRoleMenu::getRoleId)
|
||||
.eq("srm", SysRoleMenu::getRoleId, roleId)
|
||||
.eq("sr", SysRole::getStatus, SystemConstants.NORMAL)
|
||||
.isNotNull("m", SysMenu::getPerms));
|
||||
return new HashSet<>(StreamUtils.filter(StreamUtils.toList(list, SysMenu::getPerms), StringUtils::isNotBlank));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -120,8 +71,22 @@ public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo> {
|
||||
if (CollUtil.isEmpty(roleIds)) {
|
||||
return Map.of();
|
||||
}
|
||||
List<SysRoleMenuPermVo> list = this.selectJoinList(SysRoleMenuPermVo.class, JoinWrappers.lambda("m", SysMenu.class)
|
||||
.distinct()
|
||||
.selectAs("srm", SysRoleMenu::getRoleId, SysRoleMenuPermVo::getRoleId)
|
||||
.selectAs(SysMenu::getPerms, SysRoleMenuPermVo::getPerms)
|
||||
.leftJoin(SysRoleMenu.class, "srm", SysRoleMenu::getMenuId, SysMenu::getMenuId)
|
||||
.leftJoin(SysRole.class, "sr", SysRole::getRoleId, SysRoleMenu::getRoleId)
|
||||
.in("srm", SysRoleMenu::getRoleId, roleIds)
|
||||
.eq("sr", SysRole::getStatus, SystemConstants.NORMAL)
|
||||
.isNotNull("m", SysMenu::getPerms));
|
||||
Map<Long, Set<String>> result = new LinkedHashMap<>();
|
||||
roleIds.forEach(roleId -> result.put(roleId, this.selectMenuPermsByRoleId(roleId)));
|
||||
for (SysRoleMenuPermVo item : list) {
|
||||
if (StringUtils.isBlank(item.getPerms())) {
|
||||
continue;
|
||||
}
|
||||
result.computeIfAbsent(item.getRoleId(), key -> new LinkedHashSet<>()).add(item.getPerms());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -147,15 +112,53 @@ public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo> {
|
||||
* @return 选中菜单列表
|
||||
*/
|
||||
default List<Long> selectMenuListByRoleId(Long roleId, boolean menuCheckStrictly) {
|
||||
LambdaQueryWrapper<SysMenu> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.select(SysMenu::getMenuId)
|
||||
.inSql(SysMenu::getMenuId, buildMenuByRoleSql(roleId))
|
||||
.orderByAsc(SysMenu::getParentId)
|
||||
.orderByAsc(SysMenu::getOrderNum);
|
||||
if (menuCheckStrictly) {
|
||||
wrapper.notInSql(SysMenu::getMenuId, this.buildParentMenuByRoleSql(roleId));
|
||||
}
|
||||
return this.selectObjs(wrapper);
|
||||
List<SysMenu> menus = this.selectJoinList(SysMenu.class, JoinWrappers.lambda("m", SysMenu.class)
|
||||
.distinct()
|
||||
.select(SysMenu::getMenuId, SysMenu::getParentId)
|
||||
.leftJoin(SysRoleMenu.class, "srm", SysRoleMenu::getMenuId, SysMenu::getMenuId)
|
||||
.leftJoin(SysRole.class, "sr", SysRole::getRoleId, SysRoleMenu::getRoleId)
|
||||
.eq("srm", SysRoleMenu::getRoleId, roleId)
|
||||
.eq("sr", SysRole::getStatus, SystemConstants.NORMAL)
|
||||
.orderByAsc("m", SysMenu::getParentId)
|
||||
.orderByAsc("m", SysMenu::getOrderNum));
|
||||
Set<Long> parentIds = menuCheckStrictly ? new HashSet<>(StreamUtils.toList(menus, SysMenu::getParentId)) : Collections.emptySet();
|
||||
return menus.stream()
|
||||
.map(SysMenu::getMenuId)
|
||||
.filter(menuId -> !parentIds.contains(menuId))
|
||||
.toList();
|
||||
}
|
||||
|
||||
default List<SysMenuVo> selectMenuListByUserId(SysMenuBo menu, Long userId) {
|
||||
return this.selectJoinList(SysMenuVo.class, JoinWrappers.lambda("m", SysMenu.class)
|
||||
.distinct()
|
||||
.selectAll(SysMenu.class)
|
||||
.leftJoin(SysRoleMenu.class, "srm", SysRoleMenu::getMenuId, SysMenu::getMenuId)
|
||||
.leftJoin(SysUserRole.class, "sur", SysUserRole::getRoleId, SysRoleMenu::getRoleId)
|
||||
.leftJoin(SysRole.class, "sr", SysRole::getRoleId, SysRoleMenu::getRoleId)
|
||||
.eq("sur", SysUserRole::getUserId, userId)
|
||||
.eq("sr", SysRole::getStatus, SystemConstants.NORMAL)
|
||||
.like(StringUtils.isNotBlank(menu.getMenuName()), "m", SysMenu::getMenuName, menu.getMenuName())
|
||||
.eq(StringUtils.isNotBlank(menu.getVisible()), "m", SysMenu::getVisible, menu.getVisible())
|
||||
.eq(StringUtils.isNotBlank(menu.getStatus()), "m", SysMenu::getStatus, menu.getStatus())
|
||||
.eq(StringUtils.isNotBlank(menu.getMenuType()), "m", SysMenu::getMenuType, menu.getMenuType())
|
||||
.eq(Objects.nonNull(menu.getParentId()), "m", SysMenu::getParentId, menu.getParentId())
|
||||
.orderByAsc("m", SysMenu::getParentId)
|
||||
.orderByAsc("m", SysMenu::getOrderNum));
|
||||
}
|
||||
|
||||
default List<SysMenu> selectMenuTreeByUserId(Long userId) {
|
||||
return this.selectJoinList(SysMenu.class, JoinWrappers.lambda("m", SysMenu.class)
|
||||
.distinct()
|
||||
.selectAll(SysMenu.class)
|
||||
.leftJoin(SysRoleMenu.class, "srm", SysRoleMenu::getMenuId, SysMenu::getMenuId)
|
||||
.leftJoin(SysUserRole.class, "sur", SysUserRole::getRoleId, SysRoleMenu::getRoleId)
|
||||
.leftJoin(SysRole.class, "sr", SysRole::getRoleId, SysRoleMenu::getRoleId)
|
||||
.eq("sur", SysUserRole::getUserId, userId)
|
||||
.eq("sr", SysRole::getStatus, SystemConstants.NORMAL)
|
||||
.in("m", SysMenu::getMenuType, SystemConstants.TYPE_DIR, SystemConstants.TYPE_MENU)
|
||||
.eq("m", SysMenu::getStatus, SystemConstants.NORMAL)
|
||||
.orderByAsc("m", SysMenu::getParentId)
|
||||
.orderByAsc("m", SysMenu::getOrderNum));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -3,10 +3,12 @@ package org.dromara.system.mapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.github.yulichang.toolkit.JoinWrappers;
|
||||
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.SysPost;
|
||||
import org.dromara.system.domain.SysUserPost;
|
||||
import org.dromara.system.domain.vo.SysPostVo;
|
||||
|
||||
import java.util.List;
|
||||
@@ -68,8 +70,10 @@ public interface SysPostMapper extends BaseMapperPlus<SysPost, SysPostVo> {
|
||||
* @return 岗位信息列表
|
||||
*/
|
||||
default List<SysPostVo> selectPostsByUserId(Long userId) {
|
||||
return this.selectVoList(new LambdaQueryWrapper<SysPost>()
|
||||
.inSql(SysPost::getPostId, "select post_id from sys_user_post where user_id = " + userId));
|
||||
return this.selectJoinList(SysPostVo.class, JoinWrappers.lambda("p", SysPost.class)
|
||||
.selectAll(SysPost.class)
|
||||
.leftJoin(SysUserPost.class, "sup", SysUserPost::getPostId, SysPost::getPostId)
|
||||
.eq("sup", SysUserPost::getUserId, userId));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -4,11 +4,13 @@ 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 org.apache.ibatis.annotations.Param;
|
||||
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.SysRole;
|
||||
import org.dromara.system.domain.SysUserRole;
|
||||
import org.dromara.system.domain.vo.SysRoleVo;
|
||||
|
||||
import java.util.List;
|
||||
@@ -20,18 +22,6 @@ import java.util.List;
|
||||
*/
|
||||
public interface SysRoleMapper extends BaseMapperPlus<SysRole, SysRoleVo> {
|
||||
|
||||
/**
|
||||
* 构建根据用户ID查询角色ID的SQL子查询
|
||||
*
|
||||
* @param userId 用户ID
|
||||
* @return 查询用户对应角色ID的SQL语句字符串
|
||||
*/
|
||||
default String buildRoleByUserSql(Long userId) {
|
||||
return """
|
||||
select role_id from sys_user_role where user_id = %d
|
||||
""".formatted(userId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询角色列表
|
||||
*
|
||||
@@ -96,10 +86,11 @@ public interface SysRoleMapper extends BaseMapperPlus<SysRole, SysRoleVo> {
|
||||
* @return 角色列表
|
||||
*/
|
||||
default List<SysRoleVo> selectRolesByUserId(Long userId) {
|
||||
return this.selectVoList(new LambdaQueryWrapper<SysRole>()
|
||||
return this.selectJoinList(SysRoleVo.class, JoinWrappers.lambda("r", SysRole.class)
|
||||
.select(SysRole::getRoleId, SysRole::getRoleName, SysRole::getRoleKey,
|
||||
SysRole::getRoleSort, SysRole::getDataScope, SysRole::getStatus)
|
||||
.inSql(SysRole::getRoleId, this.buildRoleByUserSql(userId)));
|
||||
.leftJoin(SysUserRole.class, "sur", SysUserRole::getRoleId, SysRole::getRoleId)
|
||||
.eq("sur", SysUserRole::getUserId, userId));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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<SysUser, SysUserVo> {
|
||||
@DataColumn(key = "deptName", value = "d.dept_id"),
|
||||
@DataColumn(key = "userName", value = "u.create_by")
|
||||
})
|
||||
List<SysUserExportVo> selectUserExportList(@Param(Constants.WRAPPER) Wrapper<SysUser> queryWrapper);
|
||||
default List<SysUserExportVo> selectUserExportList(SysUserBo user, List<Long> deptIds) {
|
||||
MPJLambdaWrapper<SysUser> 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<SysUser, SysUserVo> {
|
||||
@DataColumn(key = "deptName", value = "d.dept_id"),
|
||||
@DataColumn(key = "userName", value = "u.create_by")
|
||||
})
|
||||
Page<SysUserVo> selectAllocatedList(@Param("page") Page<SysUser> page, @Param(Constants.WRAPPER) Wrapper<SysUser> queryWrapper);
|
||||
default Page<SysUserVo> selectAllocatedList(Page<SysUserVo> page, SysUserBo user) {
|
||||
MPJLambdaWrapper<SysUser> 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<SysUser, SysUserVo> {
|
||||
@DataColumn(key = "deptName", value = "d.dept_id"),
|
||||
@DataColumn(key = "userName", value = "u.create_by")
|
||||
})
|
||||
Page<SysUserVo> selectUnallocatedList(@Param("page") Page<SysUser> page, @Param(Constants.WRAPPER) Wrapper<SysUser> queryWrapper);
|
||||
default Page<SysUserVo> selectUnallocatedList(Page<SysUserVo> page, SysUserBo user, List<Long> userIds) {
|
||||
MPJLambdaWrapper<SysUser> 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<SysUser, SysUserVo> {
|
||||
})
|
||||
int updateById(@Param(Constants.ENTITY) SysUser user);
|
||||
|
||||
private MPJLambdaWrapper<SysUser> 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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -33,8 +33,8 @@ public interface ISysPermissionService {
|
||||
* 根据角色列表构建数据权限角色映射
|
||||
*
|
||||
* @param roles 角色列表
|
||||
* @return key 为权限码 value 为命中的角色列表
|
||||
* @return key 为权限码 value 为命中的角色ID列表
|
||||
*/
|
||||
Map<String, List<RoleDTO>> getDataScopeRoleMap(List<RoleDTO> roles);
|
||||
Map<String, List<Long>> getDataScopeRoleMap(List<RoleDTO> roles);
|
||||
|
||||
}
|
||||
|
||||
@@ -61,22 +61,19 @@ public class SysMenuServiceImpl implements ISysMenuService {
|
||||
*/
|
||||
@Override
|
||||
public List<SysMenuVo> selectMenuList(SysMenuBo menu, Long userId) {
|
||||
List<SysMenuVo> menuList;
|
||||
LambdaQueryWrapper<SysMenu> wrapper = new LambdaQueryWrapper<>();
|
||||
// 管理员显示所有菜单信息 不是管理员 按用户id过滤菜单
|
||||
if (!LoginHelper.isSuperAdmin(userId)) {
|
||||
// 通过用户id获取角色id 通过角色id获取菜单id 然后in菜单
|
||||
wrapper.inSql(SysMenu::getMenuId, baseMapper.buildMenuByUserSql(userId));
|
||||
if (LoginHelper.isSuperAdmin(userId)) {
|
||||
return baseMapper.selectVoList(
|
||||
new LambdaQueryWrapper<SysMenu>()
|
||||
.like(StringUtils.isNotBlank(menu.getMenuName()), SysMenu::getMenuName, menu.getMenuName())
|
||||
.eq(StringUtils.isNotBlank(menu.getVisible()), SysMenu::getVisible, menu.getVisible())
|
||||
.eq(StringUtils.isNotBlank(menu.getStatus()), SysMenu::getStatus, menu.getStatus())
|
||||
.eq(StringUtils.isNotBlank(menu.getMenuType()), SysMenu::getMenuType, menu.getMenuType())
|
||||
.eq(ObjectUtil.isNotNull(menu.getParentId()), SysMenu::getParentId, menu.getParentId())
|
||||
.orderByAsc(SysMenu::getParentId)
|
||||
.orderByAsc(SysMenu::getOrderNum));
|
||||
}
|
||||
menuList = baseMapper.selectVoList(
|
||||
wrapper.like(StringUtils.isNotBlank(menu.getMenuName()), SysMenu::getMenuName, menu.getMenuName())
|
||||
.eq(StringUtils.isNotBlank(menu.getVisible()), SysMenu::getVisible, menu.getVisible())
|
||||
.eq(StringUtils.isNotBlank(menu.getStatus()), SysMenu::getStatus, menu.getStatus())
|
||||
.eq(StringUtils.isNotBlank(menu.getMenuType()), SysMenu::getMenuType, menu.getMenuType())
|
||||
.eq(ObjectUtil.isNotNull(menu.getParentId()), SysMenu::getParentId, menu.getParentId())
|
||||
.orderByAsc(SysMenu::getParentId)
|
||||
.orderByAsc(SysMenu::getOrderNum));
|
||||
return menuList;
|
||||
return baseMapper.selectMenuListByUserId(menu, userId);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -124,13 +121,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
|
||||
if (LoginHelper.isSuperAdmin(userId)) {
|
||||
menus = baseMapper.selectMenuTreeAll();
|
||||
} else {
|
||||
LambdaQueryWrapper<SysMenu> wrapper = new LambdaQueryWrapper<>();
|
||||
menus = baseMapper.selectList(
|
||||
wrapper.in(SysMenu::getMenuType, SystemConstants.TYPE_DIR, SystemConstants.TYPE_MENU)
|
||||
.eq(SysMenu::getStatus, SystemConstants.NORMAL)
|
||||
.inSql(SysMenu::getMenuId, baseMapper.buildMenuByUserSql(userId))
|
||||
.orderByAsc(SysMenu::getParentId)
|
||||
.orderByAsc(SysMenu::getOrderNum));
|
||||
menus = baseMapper.selectMenuTreeByUserId(userId);
|
||||
}
|
||||
|
||||
return TreeBuildUtils.build(menus, Constants.TOP_PARENT_ID, SysMenu::getParentId, (menu, nodeTreeMaps) -> {
|
||||
|
||||
@@ -63,17 +63,16 @@ public class SysPermissionServiceImpl implements ISysPermissionService, Permissi
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, List<RoleDTO>> getDataScopeRoleMap(List<RoleDTO> roles) {
|
||||
public Map<String, List<Long>> getDataScopeRoleMap(List<RoleDTO> roles) {
|
||||
if (CollUtil.isEmpty(roles)) {
|
||||
return Map.of();
|
||||
}
|
||||
Map<Long, RoleDTO> roleMap = StreamUtils.toIdentityMap(roles, RoleDTO::getRoleId);
|
||||
List<Long> roleIds = StreamUtils.toList(roles, RoleDTO::getRoleId);
|
||||
Map<Long, Set<String>> permsRoleIds = menuService.selectMenuPermsByRoleIds(roleIds);
|
||||
Map<String, List<RoleDTO>> rolePermsMap = new LinkedHashMap<>();
|
||||
Map<String, List<Long>> rolePermsMap = new LinkedHashMap<>();
|
||||
permsRoleIds.forEach((roleId, perms) -> {
|
||||
perms.forEach(perm -> {
|
||||
rolePermsMap.computeIfAbsent(perm, k -> new ArrayList<>()).add(roleMap.get(roleId));
|
||||
rolePermsMap.computeIfAbsent(perm, key -> new ArrayList<>()).add(roleId);
|
||||
});
|
||||
});
|
||||
return rolePermsMap;
|
||||
|
||||
@@ -70,20 +70,8 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
|
||||
*/
|
||||
@Override
|
||||
public List<SysUserExportVo> selectUserExportList(SysUserBo user) {
|
||||
Map<String, Object> params = user.getParams();
|
||||
QueryWrapper<SysUser> 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<Long> deptIds = deptMapper.selectDeptAndChildById(user.getDeptId());
|
||||
w.in("u.dept_id", deptIds);
|
||||
}).orderByAsc("u.user_id");
|
||||
return baseMapper.selectUserExportList(wrapper);
|
||||
List<Long> deptIds = ObjectUtil.isNotNull(user.getDeptId()) ? deptMapper.selectDeptAndChildById(user.getDeptId()) : null;
|
||||
return baseMapper.selectUserExportList(user, deptIds);
|
||||
}
|
||||
|
||||
private Wrapper<SysUser> buildQueryWrapper(SysUserBo user) {
|
||||
@@ -116,14 +104,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<SysUserVo> selectAllocatedList(SysUserBo user, PageQuery pageQuery) {
|
||||
QueryWrapper<SysUser> 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<SysUserVo> page = baseMapper.selectAllocatedList(pageQuery.build(), wrapper);
|
||||
Page<SysUserVo> page = baseMapper.selectAllocatedList(pageQuery.build(), user);
|
||||
return TableDataInfo.build(page);
|
||||
}
|
||||
|
||||
@@ -136,14 +117,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
|
||||
@Override
|
||||
public TableDataInfo<SysUserVo> selectUnallocatedList(SysUserBo user, PageQuery pageQuery) {
|
||||
List<Long> userIds = userRoleMapper.selectUserIdsByRoleId(user.getRoleId());
|
||||
QueryWrapper<SysUser> 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<SysUserVo> page = baseMapper.selectUnallocatedList(pageQuery.build(), wrapper);
|
||||
Page<SysUserVo> page = baseMapper.selectUnallocatedList(pageQuery.build(), user, userIds);
|
||||
return TableDataInfo.build(page);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,39 +4,4 @@
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="org.dromara.system.mapper.SysUserMapper">
|
||||
|
||||
<resultMap type="org.dromara.system.domain.vo.SysUserVo" id="SysUserResult">
|
||||
<id property="userId" column="user_id"/>
|
||||
</resultMap>
|
||||
<resultMap type="org.dromara.system.domain.vo.SysUserExportVo" id="SysUserExportResult">
|
||||
<id property="userId" column="user_id"/>
|
||||
</resultMap>
|
||||
|
||||
<select id="selectUserExportList" resultMap="SysUserExportResult">
|
||||
select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex,
|
||||
u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
|
||||
d.dept_name, d.leader, u1.user_name as leaderName
|
||||
from sys_user u
|
||||
left join sys_dept d on u.dept_id = d.dept_id
|
||||
left join sys_user u1 on u1.user_id = d.leader
|
||||
${ew.getCustomSqlSegment}
|
||||
</select>
|
||||
|
||||
<select id="selectAllocatedList" resultMap="SysUserResult">
|
||||
select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
|
||||
from sys_user u
|
||||
left join sys_dept d on u.dept_id = d.dept_id
|
||||
left join sys_user_role sur on u.user_id = sur.user_id
|
||||
left join sys_role r on r.role_id = sur.role_id
|
||||
${ew.getCustomSqlSegment}
|
||||
</select>
|
||||
|
||||
<select id="selectUnallocatedList" resultMap="SysUserResult">
|
||||
select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
|
||||
from sys_user u
|
||||
left join sys_dept d on u.dept_id = d.dept_id
|
||||
left join sys_user_role sur on u.user_id = sur.user_id
|
||||
left join sys_role r on r.role_id = sur.role_id
|
||||
${ew.getCustomSqlSegment}
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user