/** * Copyright (c) 2018 人人开源 All rights reserved. *

* https://www.renren.io *

* 版权所有,侵权必究! */ package com.zt.modules.sys.service; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.fasterxml.jackson.core.PrettyPrinter; import com.zt.common.constant.CacheKey; import com.zt.common.constant.Constant; import com.zt.common.db.query.QueryFilter; import com.zt.common.exception.RenException; import com.zt.common.service.BaseService; import com.zt.common.servlet.Result; import com.zt.common.utils.CacheUtils; import com.zt.common.utils.TreeUtils; import com.zt.core.context.User; import com.zt.core.context.UserContext; import com.zt.core.oss.service.ISysOssConfigService; import com.zt.core.oss.service.ISysOssService; import com.zt.core.security.BCryptPasswordEncoder; import com.zt.core.security.Md5Utils; import com.zt.core.sys.model.SysDept; import com.zt.core.sys.model.SysUser; import com.zt.core.sys.service.ISysUserService; import com.zt.life.sys.dto.OssDto; import com.zt.modules.sys.dao.SysUserDao; import com.zt.modules.sys.dto.RoleDto; import com.zt.modules.sys.dto.UserTreeDto; import com.zt.modules.sys.enums.UserStatus; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.stream.Collectors; /** * 系统用户 * * @author hehz */ @Service public class SysUserService extends BaseService implements ISysUserService { @Autowired private SysRoleUserService sysRoleUserService; @Autowired private SysJobUserService sysJobUserService; @Autowired private SysPostUserService sysPostUserService; @Autowired private SysDeptService sysDeptService; @Autowired private SysParamsService paramsService; @Autowired SysMapService sysMapService; @Autowired private ISysOssConfigService sysOssConfigService; public List page(QueryFilter queryFilter) { // 普通管理员,只能查询所属部门及子部门的数据 User user = UserContext.getUser(); if (!user.isSuperAdmin()) { queryFilter.addParam("deptIds", sysDeptService.getWithDescendantIds(user.getDeptId())); } // 查询 return queryFilter.getPageList(baseDao.getList(queryFilter.getParams())); } public List list(QueryFilter queryFilter) { // 普通管理员,只能查询所属部门及子部门的数据 User user = UserContext.getUser(); if (!user.isSuperAdmin()) { queryFilter.addParam("deptIds", sysDeptService.getWithDescendantIds(user.getDeptId())); } return baseDao.getList(queryFilter.getParams()); } /** * 用户树 * * @return */ public List getUserDeptTree() { List deptList = TreeUtils.toList(sysDeptService.getDeptTree()); List list = deptList.stream().map(d -> { UserTreeDto dto = new UserTreeDto(); dto.setId(d.getId()); dto.setPid(d.getPid()); dto.setName(d.getName()); dto.setType(d.isCompany() ? 1 : 2); return dto; }).collect(Collectors.toList()); List users = this.getByDeptIds(deptList.stream().map(d -> d.getId()).collect(Collectors.toList())); users.stream().forEach(u -> { UserTreeDto dto = new UserTreeDto(); dto.setId(u.getId()); dto.setPid(u.getDeptId()); dto.setName(u.getRealName()); dto.setType(3); list.add(dto); }); return TreeUtils.build(list); } public SysUser getByUsername(String username) { return baseDao.getByUsername(username); } public List checkUserArea(Long userId,String localServer) { return baseDao.checkUserArea(userId,localServer); } @Override @Cacheable(value = Constant.Cache.USER, key = "'id:' + #id") public SysUser get(Long id) { /* SysUser entity = baseDao.getEntity(id); return entity;*/ return super.get(id); } /** * 根据部门ID查询 */ @Override public List getByDeptId(Long deptId) { return baseDao.selectList(new QueryWrapper().lambda().eq(SysUser::getDeptId, deptId)); } /** * 根据部门ID查询 */ @Override public List getByDeptIds(List deptIds) { if (CollectionUtil.isNotEmpty(deptIds)) { return baseDao.getByDeptIds(deptIds); //return baseDao.selectList(new QueryWrapper().lambda().in(SysUser::getDeptId, deptIds)); } else { return new ArrayList<>(); } } @Transactional(rollbackFor = Exception.class) public void insert(SysUser entity) { if (this.getByUsername(entity.getUsername()) != null) { throw new RenException("用户名已存在!"); } //entity.setStatus(UserStatus.ENABLE.getValue()); // 密码加密 String password = Md5Utils.hash(paramsService.getValue(Constant.ParamKey.INIT_PASSWORD_KEY)); entity.setPassword(password); entity.setIsLocked(0); entity.setCompanyId(sysDeptService.getCompanyIdByDeptId(entity.getDeptId())); // 保存用户 sysOssConfigService.updateOss(entity.getId(), entity.getFiles()); sysOssConfigService.updateOss(entity.getId(), entity.getFiles2()); super.insert(entity); sysPostUserService.saveOrUpdate(entity.getId(), entity.getPostIdList()); sysJobUserService.saveOrUpdate(entity.getId(), entity.getJobIdList()); sysMapService.saveOrUpdate("userTeamggroup", entity.getId(), entity.getTeamgroupIds()); sysMapService.saveOrUpdate("userShip", entity.getId(), entity.getShipIds()); } @Transactional(rollbackFor = Exception.class) public void update(SysUser entity) { // 更新用户 entity.setCompanyId(sysDeptService.getCompanyIdByDeptId(entity.getDeptId())); sysOssConfigService.updateOss(entity.getId(), entity.getFiles()); sysOssConfigService.updateOss(entity.getId(), entity.getFiles2()); super.update(entity); // 保存岗位用户关系 sysPostUserService.saveOrUpdate(entity.getId(), entity.getPostIdList()); // 保存职位用户关系 sysJobUserService.saveOrUpdate(entity.getId(), entity.getJobIdList()); sysMapService.saveOrUpdate("userTeamggroup", entity.getId(), entity.getTeamgroupIds()); sysMapService.saveOrUpdate("userShip", entity.getId(), entity.getShipIds()); // 处理缓存 CacheUtils.remove(Constant.Cache.USER, CacheKey.USER_ID.getKey() + entity.getId()); } @CacheEvict(value = Constant.Cache.USER, allEntries = true) public void delete(Long[] ids) { // 删除用户 super.deleteLogic(ids); // 删除角色用户关系 sysRoleUserService.deleteByUserIds(ids); } /** * 修改密码 * * @param id 用户ID * @param newPassword 新密码 */ @Transactional(rollbackFor = Exception.class) public void updatePassword(Long id, String newPassword) { // newPassword = Md5Utils.hash(newPassword); BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(); newPassword = encoder.encode(newPassword); SysUser entity = get(id); if (entity != null) { entity.setPassword(newPassword); baseDao.updatePassword(entity); // 处理缓存 CacheUtils.remove(Constant.Cache.USER, CacheKey.USER_ID.getKey() + id); } } /** * 重置用户密码 * * @param id */ public void resetPassword(Long id) { updatePassword(id, paramsService.getValue(Constant.ParamKey.INIT_PASSWORD_KEY)); } /** * 登录验证修改当前用户的状态 * * @param id * @param loginErrorCount * @param isLocked * @param lastLoginErrorTime */ public void updateLogin(Long id, Integer loginErrorCount, Integer isLocked, Date lastLoginErrorTime) { return; //baseDao.updateLogin(id, loginErrorCount, isLocked, lastLoginErrorTime); } public List isGetByUsernameList(String username, Long unitid, String code, String password) { List getByUsernameList = baseDao.isGetByUsernameList(username, unitid, code, password); return getByUsernameList; } public List isDomainName(String code) { return baseDao.isDomainName(code); } public Map adminRole() { //User sysUser = new User(); Map sysUser = new Hashtable(); sysUser.put("isAdmin", false); sysUser.put("isAssistant", false); List roles = sysRoleUserService.getUserRoles(UserContext.getUser().getId()); if (roles != null && roles.size() > 0) { if (roles.stream().filter(p -> p.getCode().equals("xtglybm") || p.getCode().equals("all")).count() > 0) { sysUser.put("isAdmin", true); } } return sysUser; } public User userRoleInfo(String username, String systemId) { Long userId = null; if (username == null) userId = UserContext.getUser().getId(); User user = baseDao.userRoleInfo(userId, username, systemId); return user; } public String getRoles() { Long userId = UserContext.getUser().getId(); return baseDao.getRoles(userId); } public String getRoleNames(Long userId) { return baseDao.getRoleNames(userId); } public List getNewConnectUser(String newShipTeam) { return baseDao.getNewConnectUser(newShipTeam); } public Integer checkTestHome(String systemId) { Long userId = UserContext.getUser().getId(); Integer num = baseDao.checkTestHome(systemId,userId); return num; } public List getUsersList(String type, String deptId) { List list = baseDao.getUsersList(type,deptId); return list; } public String getUsersName(String id) { return baseDao.getUsersName(id); } public String getNames(String ids) { String[] NamesData = ids.split(","); List nameList =new ArrayList<>(); for (String item : NamesData) { nameList.add(this.getUsersName(item)); } String names = String.join(", ", nameList); return names; } public SysUser getUserInfo(Long id) { SysUser data = super.get(id); if (data != null) { OssDto ossDto= sysOssConfigService.getOssByBusiType(data.getId() , "users_avatar"); if (ossDto != null) { data.setFiles(ossDto); } OssDto ossDto2= sysOssConfigService.getOssByBusiType(data.getId() , "users_sign"); if (ossDto2 != null) { data.setFiles2(ossDto2); } } return data; } }