package org.jeecg.modules.system.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import org.apache.shiro.SecurityUtils;
|
import org.jeecg.common.constant.CommonConstant;
|
import org.jeecg.common.system.vo.LoginUser;
|
import org.jeecg.common.util.oConvertUtils;
|
import org.jeecg.modules.system.entity.SysDepart;
|
import org.jeecg.modules.system.entity.SysUser;
|
import org.jeecg.modules.system.entity.SysUserDepart;
|
import org.jeecg.modules.system.mapper.SysUserDepartMapper;
|
import org.jeecg.modules.system.mapper.SysUserMapper;
|
import org.jeecg.modules.system.model.DepartIdModel;
|
import org.jeecg.modules.system.service.ISysDepartService;
|
import org.jeecg.modules.system.service.ISysUserDepartService;
|
import org.jeecg.modules.system.vo.SysUserDepVo;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
|
/**
|
* <P>
|
* 用户部门表实现类
|
* <p/>
|
* @Author ZhiLin
|
*@since 2019-02-22
|
*/
|
@Service
|
public class SysUserDepartServiceImpl extends ServiceImpl<SysUserDepartMapper, SysUserDepart> implements ISysUserDepartService {
|
@Autowired
|
private ISysDepartService sysDepartService;
|
@Autowired
|
private SysUserMapper sysUserMapper;
|
|
|
/**
|
* 根据用户id查询部门信息
|
*/
|
@Override
|
public List<DepartIdModel> queryDepartIdsOfUser(String userId) {
|
LambdaQueryWrapper<SysUserDepart> queryUserDep = new LambdaQueryWrapper<SysUserDepart>();
|
LambdaQueryWrapper<SysDepart> queryDep = new LambdaQueryWrapper<SysDepart>();
|
try {
|
queryUserDep.eq(SysUserDepart::getUserId, userId);
|
List<String> depIdList = new ArrayList<>();
|
List<DepartIdModel> depIdModelList = new ArrayList<>();
|
List<SysUserDepart> userDepList = this.list(queryUserDep);
|
if(userDepList != null && userDepList.size() > 0) {
|
for(SysUserDepart userDepart : userDepList) {
|
depIdList.add(userDepart.getDepId());
|
}
|
queryDep.in(SysDepart::getId, depIdList);
|
List<SysDepart> depList = sysDepartService.list(queryDep);
|
//jeecg-boot/issues/3906
|
if(depList != null && depList.size() > 0) {
|
for(SysDepart depart : depList) {
|
depIdModelList.add(new DepartIdModel().convertByUserDepart(depart));
|
}
|
}
|
return depIdModelList;
|
}
|
}catch(Exception e) {
|
e.fillInStackTrace();
|
}
|
return null;
|
|
|
}
|
|
|
/**
|
* 根据部门id查询用户信息
|
*/
|
@Override
|
public List<SysUser> queryUserByDepId(String depId) {
|
LambdaQueryWrapper<SysUserDepart> queryUserDep = new LambdaQueryWrapper<SysUserDepart>();
|
queryUserDep.eq(SysUserDepart::getDepId, depId);
|
List<String> userIdList = new ArrayList<>();
|
List<SysUserDepart> uDepList = this.list(queryUserDep);
|
if(uDepList != null && uDepList.size() > 0) {
|
for(SysUserDepart uDep : uDepList) {
|
userIdList.add(uDep.getUserId());
|
}
|
List<SysUser> userList = (List<SysUser>) sysUserMapper.selectBatchIds(userIdList);
|
//update-begin-author:taoyan date:201905047 for:接口调用查询返回结果不能返回密码相关信息
|
for (SysUser sysUser : userList) {
|
sysUser.setSalt("");
|
sysUser.setPassword("");
|
}
|
//update-end-author:taoyan date:201905047 for:接口调用查询返回结果不能返回密码相关信息
|
return userList;
|
}
|
return new ArrayList<SysUser>();
|
}
|
|
/**
|
* 根据部门code,查询当前部门和下级部门的 用户信息
|
*/
|
@Override
|
public List<SysUser> queryUserByDepCode(String depCode,String realname) {
|
//update-begin-author:taoyan date:20210422 for: 根据部门选择用户接口代码优化
|
if(oConvertUtils.isNotEmpty(realname)){
|
realname = realname.trim();
|
}
|
List<SysUser> userList = this.baseMapper.queryDepartUserList(depCode, realname);
|
Map<String, SysUser> map = new HashMap(5);
|
for (SysUser sysUser : userList) {
|
// 返回的用户数据去掉密码信息
|
sysUser.setSalt("");
|
sysUser.setPassword("");
|
map.put(sysUser.getId(), sysUser);
|
}
|
return new ArrayList<SysUser>(map.values());
|
//update-end-author:taoyan date:20210422 for: 根据部门选择用户接口代码优化
|
|
}
|
|
@Override
|
public IPage<SysUser> queryDepartUserPageList(String departId, String username, String realname, int pageSize, int pageNo,String id) {
|
IPage<SysUser> pageList = null;
|
// 部门ID不存在 直接查询用户表即可
|
Page<SysUser> page = new Page<SysUser>(pageNo, pageSize);
|
if(oConvertUtils.isEmpty(departId)){
|
LambdaQueryWrapper<SysUser> query = new LambdaQueryWrapper<>();
|
//update-begin---author:wangshuai ---date:20220104 for:[JTC-297]已冻结用户仍可设置为代理人------------
|
query.eq(SysUser::getStatus,Integer.parseInt(CommonConstant.STATUS_1));
|
//update-end---author:wangshuai ---date:20220104 for:[JTC-297]已冻结用户仍可设置为代理人------------
|
if(oConvertUtils.isNotEmpty(username)){
|
query.like(SysUser::getUsername, username);
|
}
|
//update-begin---author:wangshuai ---date:20220608 for:[VUEN-1238]邮箱回复时,发送到显示的为用户id------------
|
if(oConvertUtils.isNotEmpty(id)){
|
query.eq(SysUser::getId, id);
|
}
|
//update-end---author:wangshuai ---date:20220608 for:[VUEN-1238]邮箱回复时,发送到显示的为用户id------------
|
//update-begin---author:wangshuai ---date:20220902 for:[VUEN-2121]临时用户不能直接显示------------
|
query.ne(SysUser::getUsername,"_reserve_user_external");
|
//update-end---author:wangshuai ---date:20220902 for:[VUEN-2121]临时用户不能直接显示------------
|
pageList = sysUserMapper.selectPage(page, query);
|
}else{
|
// 有部门ID 需要走自定义sql
|
SysDepart sysDepart = sysDepartService.getById(departId);
|
pageList = this.baseMapper.queryDepartUserPageList(page, sysDepart.getOrgCode(), username, realname);
|
}
|
List<SysUser> userList = pageList.getRecords();
|
if(userList!=null && userList.size()>0){
|
List<String> userIds = userList.stream().map(SysUser::getId).collect(Collectors.toList());
|
Map<String, SysUser> map = new HashMap(5);
|
if(userIds!=null && userIds.size()>0){
|
// 查部门名称
|
Map<String,String> useDepNames = this.getDepNamesByUserIds(userIds);
|
userList.forEach(item->{
|
//TODO 临时借用这个字段用于页面展示
|
item.setOrgCodeTxt(useDepNames.get(item.getId()));
|
item.setSalt("");
|
item.setPassword("");
|
// 去重
|
map.put(item.getId(), item);
|
});
|
}
|
pageList.setRecords(new ArrayList<SysUser>(map.values()));
|
}
|
return pageList;
|
}
|
|
@Override
|
public IPage<SysUser> getUserInformation(String departId, String keyword, Integer pageSize, Integer pageNo) {
|
IPage<SysUser> pageList = null;
|
// 部门ID不存在 直接查询用户表即可
|
Page<SysUser> page = new Page<>(pageNo, pageSize);
|
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
if(oConvertUtils.isEmpty(departId)){
|
LambdaQueryWrapper<SysUser> query = new LambdaQueryWrapper<>();
|
query.eq(SysUser::getStatus,Integer.parseInt(CommonConstant.STATUS_1));
|
query.ne(SysUser::getUsername,"_reserve_user_external");
|
//排除自己
|
query.ne(SysUser::getId,sysUser.getId());
|
//这个语法可以将or用括号包起来,避免数据查不到
|
query.and((wrapper) -> wrapper.like(SysUser::getUsername, keyword).or().like(SysUser::getRealname,keyword));
|
pageList = sysUserMapper.selectPage(page, query);
|
}else{
|
// 有部门ID 需要走自定义sql
|
SysDepart sysDepart = sysDepartService.getById(departId);
|
//update-begin---author:wangshuai ---date:20220908 for:部门排除自己------------
|
pageList = this.baseMapper.getUserInformation(page, sysDepart.getOrgCode(), keyword,sysUser.getId());
|
//update-end---author:wangshuai ---date:20220908 for:部门排除自己--------------
|
}
|
return pageList;
|
}
|
|
/**
|
* 根据用户id查询部门id集合
|
*/
|
@Override
|
public List<String> queryDepartIdsByUserId(String userId) {
|
return this.baseMapper.queryDepartIdsByUserId(userId);
|
}
|
|
/**
|
* 升级SpringBoot2.6.6,不允许循环依赖
|
* @param userIds
|
* @return
|
*/
|
private Map<String, String> getDepNamesByUserIds(List<String> userIds) {
|
List<SysUserDepVo> list = sysUserMapper.getDepNamesByUserIds(userIds);
|
|
Map<String, String> res = new HashMap(5);
|
list.forEach(item -> {
|
if (res.get(item.getUserId()) == null) {
|
res.put(item.getUserId(), item.getDepartName());
|
} else {
|
res.put(item.getUserId(), res.get(item.getUserId()) + "," + item.getDepartName());
|
}
|
}
|
);
|
return res;
|
}
|
|
}
|