update 优化任务办理人查询

This commit is contained in:
AprilWind 2024-11-07 14:29:35 +08:00
parent 178027931d
commit 4f3d79faa0
9 changed files with 108 additions and 58 deletions

View File

@ -3,6 +3,7 @@ package org.dromara.common.core.domain.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.dromara.common.core.utils.StringUtils;
import java.io.Serial;
import java.io.Serializable;
@ -60,10 +61,10 @@ public class TaskAssigneeDTO implements Serializable {
return sourceList.stream()
.map(item -> new TaskHandler(
String.valueOf(storageId.apply(item)),
handlerCode != null ? handlerCode.apply(item) : "",
handlerName != null ? handlerName.apply(item) : "",
groupName != null ? groupName.apply(item) : "默认分组",
createTimeMapper != null ? createTimeMapper.apply(item) : new Date()
StringUtils.blankToDefault(handlerCode.apply(item), ""),
StringUtils.blankToDefault(handlerName.apply(item), ""),
StringUtils.blankToDefault(groupName != null ? groupName.apply(item) : null, "默认分组"),
createTimeMapper.apply(item)
))
.collect(Collectors.toList());
}

View File

@ -2,12 +2,13 @@ package org.dromara.system.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.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.vo.SysDeptVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -29,6 +30,17 @@ public interface SysDeptMapper extends BaseMapperPlus<SysDept, SysDeptVo> {
})
List<SysDeptVo> selectDeptList(@Param(Constants.WRAPPER) Wrapper<SysDept> queryWrapper);
/**
* 分页查询部门管理数据
*
* @param queryWrapper 查询条件
* @return 部门信息集合
*/
@DataPermission({
@DataColumn(key = "deptName", value = "dept_id"),
})
Page<SysDeptVo> selectPageDeptList(@Param("page") Page<SysDeptVo> page, @Param(Constants.WRAPPER) Wrapper<SysDept> queryWrapper);
@DataPermission({
@DataColumn(key = "deptName", value = "dept_id")
})

View File

@ -41,6 +41,7 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* 部门管理 服务实现
@ -179,7 +180,9 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
*/
@Override
public List<DeptDTO> selectDeptsByList() {
List<SysDeptVo> list = baseMapper.selectVoList();
List<SysDeptVo> list = baseMapper.selectDeptList(new LambdaQueryWrapper<SysDept>()
.select(SysDept::getDeptId, SysDept::getDeptName, SysDept::getParentId)
.eq(SysDept::getStatus, UserConstants.DEPT_NORMAL));
return BeanUtil.copyToList(list, DeptDTO.class);
}
@ -193,18 +196,36 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
public TaskAssigneeDTO selectDeptsByTaskAssigneeList(TaskAssigneeBody taskQuery) {
PageQuery pageQuery = new PageQuery(taskQuery.getPageSize(), taskQuery.getPageNum());
// 使用 LambdaQueryWrapper 构建查询条件
LambdaQueryWrapper<SysDept> wrapper = new LambdaQueryWrapper<SysDept>()
.like(StringUtils.isNotBlank(taskQuery.getHandlerCode()), SysDept::getDeptCategory, taskQuery.getHandlerCode())
.like(StringUtils.isNotBlank(taskQuery.getHandlerName()), SysDept::getDeptName, taskQuery.getHandlerName())
.between(StringUtils.isNotBlank(taskQuery.getBeginTime()) && StringUtils.isNotBlank(taskQuery.getEndTime()),
SysDept::getCreateTime, taskQuery.getBeginTime(), taskQuery.getEndTime());
LambdaQueryWrapper<SysDept> wrapper = Wrappers.lambdaQuery();
wrapper.eq(SysDept::getDelFlag, UserConstants.DEL_FLAG_NORMAL);
wrapper.like(StringUtils.isNotBlank(taskQuery.getHandlerCode()), SysDept::getDeptCategory, taskQuery.getHandlerCode());
wrapper.like(StringUtils.isNotBlank(taskQuery.getHandlerName()), SysDept::getDeptName, taskQuery.getHandlerName());
if (StringUtils.isNotBlank(taskQuery.getGroupId())) {
//部门树搜索
wrapper.and(x -> {
List<Long> deptIds = baseMapper.selectList(new LambdaQueryWrapper<SysDept>()
.select(SysDept::getDeptId)
.apply(DataBaseHelper.findInSet(taskQuery.getGroupId(), "ancestors")))
.stream()
.map(SysDept::getDeptId)
.collect(Collectors.toList());
deptIds.add(Long.valueOf(taskQuery.getGroupId()));
x.in(SysDept::getDeptId, deptIds);
});
}
wrapper.between(StringUtils.isNotBlank(taskQuery.getBeginTime()) && StringUtils.isNotBlank(taskQuery.getEndTime()),
SysDept::getCreateTime, taskQuery.getBeginTime(), taskQuery.getEndTime());
wrapper.orderByAsc(SysDept::getAncestors);
wrapper.orderByAsc(SysDept::getParentId);
wrapper.orderByAsc(SysDept::getOrderNum);
wrapper.orderByAsc(SysDept::getDeptId);
// 执行分页查询并将查询结果封装为 SysDeptVo 对象的 Page
Page<SysDeptVo> page = baseMapper.selectVoPage(pageQuery.build(), wrapper);
Page<SysDeptVo> page = baseMapper.selectPageDeptList(pageQuery.build(), wrapper);
// TODO 需要回显父部门名称
// 使用封装的字段映射方法进行转换
List<TaskAssigneeDTO.TaskHandler> handlers = TaskAssigneeDTO.convertToHandlerList(page.getRecords(),
SysDeptVo::getDeptId, SysDeptVo::getDeptCategory, SysDeptVo::getDeptName, null, SysDeptVo::getCreateTime);
SysDeptVo::getDeptId, SysDeptVo::getDeptCategory, SysDeptVo::getDeptName, SysDeptVo::getParentName, SysDeptVo::getCreateTime);
return new TaskAssigneeDTO(page.getTotal(), handlers);
}

View File

@ -30,6 +30,7 @@ import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
/**
@ -252,16 +253,24 @@ public class SysPostServiceImpl implements ISysPostService, PostService {
@Override
public TaskAssigneeDTO selectPostsByTaskAssigneeList(TaskAssigneeBody taskQuery) {
PageQuery pageQuery = new PageQuery(taskQuery.getPageSize(), taskQuery.getPageNum());
// 使用 LambdaQueryWrapper 构建查询条件
LambdaQueryWrapper<SysPost> wrapper = new LambdaQueryWrapper<SysPost>()
.like(StringUtils.isNotBlank(taskQuery.getHandlerCode()), SysPost::getPostCategory, taskQuery.getHandlerCode())
.like(StringUtils.isNotBlank(taskQuery.getHandlerName()), SysPost::getPostName, taskQuery.getHandlerName())
.like(StringUtils.isNotBlank(taskQuery.getGroupId()), SysPost::getDeptId, taskQuery.getGroupId())
.between(StringUtils.isNotBlank(taskQuery.getBeginTime()) && StringUtils.isNotBlank(taskQuery.getEndTime()),
SysPost::getCreateTime, taskQuery.getBeginTime(), taskQuery.getEndTime());
// 执行分页查询并将查询结果封装为 SysPostVo 对象的 Page
Page<SysPostVo> page = baseMapper.selectVoPage(pageQuery.build(), wrapper);
SysPostBo post = new SysPostBo();
post.setPostCategory(taskQuery.getHandlerCode());
post.setPostName(taskQuery.getHandlerName());
Optional.ofNullable(taskQuery.getGroupId())
.filter(StringUtils::isNotBlank)
.map(Long::valueOf)
.ifPresent(post::setBelongDeptId);
LambdaQueryWrapper<SysPost> wrapper = buildQueryWrapper(post);
// 如果 beginTime endTime 都有值才添加到 params
if (StringUtils.isNotBlank(taskQuery.getBeginTime()) && StringUtils.isNotBlank(taskQuery.getEndTime())) {
wrapper.between(StringUtils.isNotBlank(taskQuery.getBeginTime()) && StringUtils.isNotBlank(taskQuery.getEndTime()),
SysPost::getCreateTime, taskQuery.getBeginTime(), taskQuery.getEndTime());
}
Page<SysPostVo> page = baseMapper.selectPagePostList(pageQuery.build(), wrapper);
// TODO 需要回显部门名称
// 使用封装的字段映射方法进行转换
List<TaskAssigneeDTO.TaskHandler> handlers = TaskAssigneeDTO.convertToHandlerList(page.getRecords(),

View File

@ -524,15 +524,19 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService {
@Override
public TaskAssigneeDTO selectRolesByTaskAssigneeList(TaskAssigneeBody taskQuery) {
PageQuery pageQuery = new PageQuery(taskQuery.getPageSize(), taskQuery.getPageNum());
// 使用 LambdaQueryWrapper 构建查询条件
LambdaQueryWrapper<SysRole> wrapper = new LambdaQueryWrapper<SysRole>()
.like(StringUtils.isNotBlank(taskQuery.getHandlerCode()), SysRole::getRoleKey, taskQuery.getHandlerCode())
.like(StringUtils.isNotBlank(taskQuery.getHandlerName()), SysRole::getRoleName, taskQuery.getHandlerName())
.between(StringUtils.isNotBlank(taskQuery.getBeginTime()) && StringUtils.isNotBlank(taskQuery.getEndTime()),
SysRole::getCreateTime, taskQuery.getBeginTime(), taskQuery.getEndTime());
// 执行分页查询并将查询结果封装为 SysRoleVo 对象的 Page
Page<SysRoleVo> page = baseMapper.selectVoPage(pageQuery.build(), wrapper);
SysRoleBo role = new SysRoleBo();
role.setRoleKey(taskQuery.getHandlerCode());
role.setRoleName(taskQuery.getHandlerName());
// 如果 beginTime endTime 都有值才添加到 params
if (StringUtils.isNotBlank(taskQuery.getBeginTime()) && StringUtils.isNotBlank(taskQuery.getEndTime())) {
Map<String, Object> params = role.getParams();
params.put("beginTime", taskQuery.getBeginTime());
params.put("endTime", taskQuery.getEndTime());
}
Page<SysRoleVo> page = baseMapper.selectPageRoleList(pageQuery.build(), this.buildQueryWrapper(role));
// TODO 回显数据范围
// 使用封装的字段映射方法进行转换
List<TaskAssigneeDTO.TaskHandler> handlers = TaskAssigneeDTO.convertToHandlerList(page.getRecords(),

View File

@ -41,10 +41,7 @@ import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
/**
* 用户 业务层处理
@ -714,16 +711,22 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override
public TaskAssigneeDTO selectUsersByTaskAssigneeList(TaskAssigneeBody taskQuery) {
PageQuery pageQuery = new PageQuery(taskQuery.getPageSize(), taskQuery.getPageNum());
// 使用 LambdaQueryWrapper 构建查询条件
LambdaQueryWrapper<SysUser> wrapper = new LambdaQueryWrapper<SysUser>()
.like(StringUtils.isNotBlank(taskQuery.getHandlerCode()), SysUser::getUserName, taskQuery.getHandlerCode())
.like(StringUtils.isNotBlank(taskQuery.getHandlerName()), SysUser::getNickName, taskQuery.getHandlerName())
.eq(StringUtils.isNotBlank(taskQuery.getGroupId()), SysUser::getDeptId, taskQuery.getGroupId())
.between(StringUtils.isNotBlank(taskQuery.getBeginTime()) && StringUtils.isNotBlank(taskQuery.getEndTime()),
SysUser::getCreateTime, taskQuery.getBeginTime(), taskQuery.getEndTime());
SysUserBo user = new SysUserBo();
user.setUserName(taskQuery.getHandlerCode());
user.setNickName(taskQuery.getHandlerName());
Optional.ofNullable(taskQuery.getGroupId())
.filter(StringUtils::isNotBlank)
.map(Long::valueOf)
.ifPresent(user::setDeptId);
// 执行分页查询并将查询结果封装为 SysUserVo 对象的 Page
Page<SysUserVo> page = baseMapper.selectVoPage(pageQuery.build(), wrapper);
// 如果 beginTime endTime 都有值才添加到 params
if (StringUtils.isNotBlank(taskQuery.getBeginTime()) && StringUtils.isNotBlank(taskQuery.getEndTime())) {
Map<String, Object> params = user.getParams();
params.put("beginTime", taskQuery.getBeginTime());
params.put("endTime", taskQuery.getEndTime());
}
Page<SysUserVo> page = baseMapper.selectPageUserList(pageQuery.build(), this.buildQueryWrapper(user));
// TODO 需要回显部门名称
// 使用封装的字段映射方法进行转换
List<TaskAssigneeDTO.TaskHandler> handlers = TaskAssigneeDTO.convertToHandlerList(page.getRecords(),

View File

@ -18,6 +18,17 @@
from sys_dept ${ew.getCustomSqlSegment}
</select>
<select id="selectPageDeptList" resultMap="SysDeptResult">
select
<if test="ew.getSqlSelect != null">
${ew.getSqlSelect}
</if>
<if test="ew.getSqlSelect == null">
*
</if>
from sys_dept ${ew.getCustomSqlSegment}
</select>
<select id="countDeptById" resultType="Long">
select count(*) from sys_dept where del_flag = '0' and dept_id = #{deptId}
</select>

View File

@ -98,7 +98,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
FlowInstance flowInstance = iFlwInstanceService.instanceByBusinessId(businessKey);
if (flowInstance != null) {
List<Task> taskList = taskService.list(new FlowTask().setInstanceId(flowInstance.getId()));
return buildMap(taskList.get(0).getInstanceId(), taskList.get(0).getId());
return Map.of("processInstanceId", taskList.get(0).getInstanceId(), "taskId", taskList.get(0).getId());
}
FlowParams flowParams = new FlowParams();
flowParams.flowCode(wfDefinitionConfigVo.getProcessKey());
@ -116,18 +116,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
if (taskList.size() > 1) {
throw new ServiceException("请检查流程第一个环节是否为申请人!");
}
return buildMap(instance.getId(), taskList.get(0).getId());
}
/**
* 构建一个包含给定 `processInstanceId` `taskId` Map
*
* @param instanceId 流程实例的 ID
* @param taskId 任务的 ID
* @return 返回一个包含 `processInstanceId` `taskId` 的不可变 Map
*/
private Map<String, Object> buildMap(Object instanceId, Object taskId) {
return Map.of("processInstanceId", instanceId, "taskId", taskId);
return Map.of("processInstanceId", instance.getId(), "taskId", taskList.get(0).getId());
}
/**

View File

@ -84,7 +84,7 @@ public class WfTaskAssigneeServiceImpl implements HandlerSelectService {
* 根据任务办理类型获取部门数据
*/
private List<DeptDTO> fetchDeptData(TaskAssigneeEnum type) {
if (type == TaskAssigneeEnum.USER || type == TaskAssigneeEnum.POST) {
if (type == TaskAssigneeEnum.USER || type == TaskAssigneeEnum.DEPT || type == TaskAssigneeEnum.POST) {
return deptService.selectDeptsByList();
}
return new ArrayList<>();