| /** | 
|  * Copyright (c) 2018 人人开源 All rights reserved. | 
|  * <p> | 
|  * https://www.renren.io | 
|  * <p> | 
|  * 版权所有,侵权必究! | 
|  */ | 
|   | 
| 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<SysUserDao, SysUser> 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<SysUser> 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<SysUser> 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<UserTreeDto> getUserDeptTree() { | 
|         List<SysDept> deptList = TreeUtils.toList(sysDeptService.getDeptTree()); | 
|         List<UserTreeDto> 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<SysUser> 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<SysUser> 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<SysUser> getByDeptId(Long deptId) { | 
|         return baseDao.selectList(new QueryWrapper<SysUser>().lambda().eq(SysUser::getDeptId, deptId)); | 
|     } | 
|   | 
|     /** | 
|      * 根据部门ID查询 | 
|      */ | 
|     @Override | 
|     public List<SysUser> getByDeptIds(List<Long> deptIds) { | 
|         if (CollectionUtil.isNotEmpty(deptIds)) { | 
|             return baseDao.getByDeptIds(deptIds); | 
|             //return baseDao.selectList(new QueryWrapper<SysUser>().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<SysUser> isGetByUsernameList(String username, Long unitid, String code, String password) { | 
|         List<SysUser> getByUsernameList = baseDao.isGetByUsernameList(username, unitid, code, password); | 
|         return getByUsernameList; | 
|     } | 
|   | 
|     public List<SysUser> isDomainName(String code) { | 
|         return baseDao.isDomainName(code); | 
|     } | 
|   | 
|     public Map adminRole() { | 
|         //User sysUser = new User(); | 
|         Map<String, Object> sysUser = new Hashtable(); | 
|   | 
|         sysUser.put("isAdmin", false); | 
|         sysUser.put("isAssistant", false); | 
|         List<RoleDto> 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<SysUser> 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<SysUser> getUsersList(String type, String deptId) { | 
|         List<SysUser> 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<String> 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; | 
|     } | 
|   | 
|   | 
| } |