package com.ydtech.modules.admin.service.impl; 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.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ydtech.core.page.HttpResult; import com.ydtech.core.page.PageResult; import com.ydtech.modules.admin.dao.SysUserMapper; import com.ydtech.modules.admin.model.*; import com.ydtech.modules.admin.model.vo.SysUser2Vo; import com.ydtech.modules.admin.model.vo.SysUserBaseVO; import com.ydtech.modules.admin.model.vo.SysUserInternalVO; import com.ydtech.modules.admin.model.vo.SysUserVO; import com.ydtech.modules.admin.service.*; import com.ydtech.modules.base.model.dto.PageDto; import com.ydtech.modules.base.model.vo.PageVo; import com.ydtech.modules.esm.model.EsmUserImage; import com.ydtech.modules.esm.model.EsmUserReferrer; import com.ydtech.modules.esm.model.vo.EsmUserImageVo; import com.ydtech.modules.esm.service.EsmUserImageService; import com.ydtech.modules.esm.service.EsmUserReferrerService; import com.ydtech.security.utils.PasswordUtils; import com.ydtech.utils.StringUtils; import com.ydtech.utils.idgen.IdGenerate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @Service public class SysUserServiceImpl extends ServiceImpl implements SysUserService { @Autowired private SysMenuService sysMenuService; @Autowired private SysRoleMenuService sysRoleMenuService; @Autowired private SysDeptService sysDeptService; @Autowired private SysUserMapper sysUserMapper; @Autowired private SysUserRoleService sysUserRoleService; @Autowired private EsmUserReferrerService esmUserReferrerService; @Autowired private SysUserInfoService sysUserInfoService; @Autowired private EsmUserImageService esmUserImageService; @Override public SysUser findByUsername(String username) { SysUser sysUser = null; if (StringUtils.isNotEmpty(username)) { sysUser = getById(username); } return sysUser; } @Override public SysUser findByPhone(String phone) { SysUser sysUser = null; LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.eq(StringUtils.isNotEmpty(phone), SysUser::getMobile, phone); List lst = list(lqw); if (lst.size() > 0) { sysUser = lst.get(0); } return sysUser; } @Override public Set findPermissions(SysUser sysUser) { Set perms = new HashSet<>(); String sql = ""; List lsPerms = null; if (sysUser.getId().equalsIgnoreCase("admin")) { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.isNotNull(SysMenu::getPerms); lqw.select(SysMenu::getPerms); lsPerms = sysMenuService.listObjs(lqw, new Function() { @Override public String apply(Object id) { return id.toString(); } }); } else { List sysMenuList = sysRoleMenuService.gainMenuIds(sysUser.getId()); lsPerms = sysMenuList.stream().filter(a -> StringUtils.isNotEmpty(a.getPerms())).map(SysMenu::getPerms).collect(Collectors.toList()); } if (lsPerms != null && lsPerms.size() > 0) { for (String perm : lsPerms) { if (!StringUtils.isNullOrEmpty(perm)) { perms.add(perm); } } } return perms; } // @Override // public Set findPermissions(SysUser sysUser) { // Set perms = new HashSet<>(); // String sql = ""; // JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); // List lsPerms = null; // // if (sysUser.getId().equalsIgnoreCase("admin")) { // sql = "SELECT perms FROM sys_menu WHERE perms IS NOT NULL AND perms <> ''"; // // lsPerms = jdbcTemplate.queryForList(sql, String.class); // } else { // sql = "SELECT perms FROM sys_menu sm WHERE sm.id IN ( " + // "SELECT menu_id FROM sys_role_menu srm, sys_user_role sur ,sys_user su " + // "WHERE srm.role_id=sur.role_id " + // "AND sur.user_id=su.id AND su.id=?) " + // "AND perms IS NOT NULL AND perms <> ''" // ; // // lsPerms = jdbcTemplate.queryForList(sql, String.class, sysUser.getId()); // } // // if (lsPerms != null && lsPerms.size() > 0) { // for (String perm : lsPerms) { // if (!StringUtils.isNullOrEmpty(perm)) { // perms.add(perm); // } // } // } // // return perms; // } @Override public List findUserRoles(Long userId) { return null; } @Override public PageResult selectPagingCustom(int pageNumber, int pageSize, String name, String deptCode) { return null; } /** * 获取用户列表 * * @param page 分页信息 * @param sysUser 查询条件 * @param containsSubDept 是否汉堡下级机构 * @return */ @Override public IPage selectUserPage(Page page, SysUser sysUser, String containsSubDept) { return baseMapper.selectUserPage(page, sysUser, containsSubDept); } @Override public void findSysUseresmUserInternalVORoles(PageResult pageResult) { } @Override public Integer deleteFlag(List lsSysUser) { List ids = lsSysUser.stream().map(SysUser::getId).collect(Collectors.toList()); LambdaUpdateWrapper lqw = new LambdaUpdateWrapper<>(); lqw.set(SysUser::getStatus, "0"); lqw.in(SysUser::getId, ids); return update(lqw) == true ? ids.size() : 0; } @Override public SysUser findById(String id) { if (!StringUtils.isNullOrEmpty(id)) { return getById(id); } return null; } @Override public SysUser findByUserId(String userId) { SysUser sysUser = null; if (!StringUtils.isNullOrEmpty(userId)) { sysUser = getById(userId); } return sysUser; } @Override public SysUserVO gainUserInternal(String userId) { return super.baseMapper.gainInternalUser(userId); } @Override public SysUserVO gainUserInternalByDeptId(String deptId) { return super.baseMapper.gainInternalUserByDeptId(deptId); } @Override public List findByReferrerId(String deptId) { return super.baseMapper.findByReferrerId(deptId); } @Override public PageVo gainUserPage(PageDto pageDto) { PageVo pageVo = new PageVo(); //获取分页数量 int total = super.baseMapper.gainUserBaseInfoCount(pageDto); //计算mysql分页起索引 int firstIndex = pageDto.getPageNum() == 1 ? 0 : (pageDto.getPageNum() - 1) * pageDto.getPageSize(); // int firstIndex = pageDto.getPageNum() == 1 ? 0 : (pageDto.getPageNum() - 1) * pageDto.getPageSize() + 1; //计算mysql分页总页数 int totalPages = total % pageDto.getPageSize() == 0 ? total / pageDto.getPageSize() : total / pageDto.getPageSize() + 1; // if(pageRequest.getPageNum() > 0){ // int newPageNum = pageRequest.getPageNum() -1; // pageRequest.setPageNum(newPageNum * pageRequest.getPageSize()); // } //响应 pageVo.setTotalSize(total); pageVo.setPageNum(pageDto.getPageNum()); pageVo.setPageSize(pageDto.getPageSize()); pageVo.setTotalPages(totalPages); //请求替换分页开始索引 pageDto.setPageNum(firstIndex); pageVo.setContent(super.baseMapper.gainUserBaseInfo(pageDto)); return pageVo; } @Override public String gainNextUserId(String deptId) { int noCount = 3;//顺序号是几位的 String nextPK; QueryWrapper lq = new QueryWrapper<>(); lq.select(" MAX(id) as id "); // lq.eq("dept_id", deptId); lq.likeRight("id", deptId); SysUser userMaxId = getOne(lq); String maxId = ""; if (null != userMaxId) maxId = userMaxId.getId(); if (StringUtils.isNullOrEmpty(maxId)) { nextPK = deptId + "001"; } else { nextPK = IdGenerate.nextCode(maxId, noCount); } return nextPK; } @Override public SysUserInternalVO gainUserSynthesisInfo(String userId) { SysUserInternalVO vo = new SysUserInternalVO(); SysUser sysUser = getById(userId); // EsmUserInternal sysUserInternal = esmUserInternalService.selectByPk(userId); String pDeptId = sysUser.getDeptId(); if (pDeptId.indexOf("D") > 1) { pDeptId = sysUser.getDeptId().substring(0, pDeptId.indexOf("D")); } SysDept sysDept = sysDeptService.getById(pDeptId); vo.setSysUser(sysUser); vo.setSysDept(sysDept); // vo.setSysUserInternal(sysUserInternal); return vo; } @Override public String findMaxId(String deptId) { QueryWrapper qw = new QueryWrapper<>(); qw.select("IFNULL(MAX(id),0) maxId"); qw.eq("dept_id", deptId); Map m = getMap(qw); String maxId = m.get("maxId").toString(); return maxId; } @Override public boolean check(String userId, Integer approvalStatus, String approvalOpinion) { SysUser user = getById(userId); // user.setApprovalStatus(approvalStatus); user.setApprovalOpinion(approvalOpinion); return updateById(user); } @Override public SysUserBaseVO selectUserById(String userId) { return sysUserMapper.selectUserById(userId); } @Override @Transactional public boolean saveUser(SysUser sysUser) { // 判断用户id是否存在 if (StringUtils.isNullOrEmpty(sysUser.getId())) { sysUser.setId(gainNextUserId(sysUser.getDeptId())); sysUser.setMobile(sysUser.getMobile()); } // 角色信息 SysUserRole sur = new SysUserRole(); sur.setUserId(sysUser.getId()); sur.setRoleId(StringUtils.toLong(sysUser.getRoleId())); // 删除角色 sysUserRoleService.deleteByUserId(sysUser.getId()); // 删除推荐人 esmUserReferrerService.deldeleteByReferrerId(sysUser.getId()); // 构建推荐人信息 EsmUserReferrer eur = new EsmUserReferrer(); eur.setId(sysUser.getId()); eur.setReferrerId(sysUser.getReferrerId());//推荐人 eur.setReferrerName(sysUser.getReferrerName()); // 新增或跟新用户表 save(sysUser); // 保存推荐人 esmUserReferrerService.save(eur); // 保存角色 sysUserRoleService.save(sur); return true; } @Override @Transactional public HttpResult saveUserInfo(SysUser2Vo sysUserVo) { SysUser sysUser = sysUserVo.getSysUser(); String userId = gainNextUserId(sysUser.getDeptId()); sysUser.setId(userId); save(sysUser); //角色配置 SysUserRole userRole = new SysUserRole(); userRole.setUserId(sysUser.getId()); userRole.setRoleId(StringUtils.toLong(sysUser.getRoleId())); sysUserRoleService.save(userRole); if (StringUtils.isNotEmpty(sysUser.getReferrerId())) { //推荐人 esmUserReferrerService.addReferrer(sysUser.getReferrerId(), userId); } // EsmUserReferrer eur = new EsmUserReferrer(); // eur.setId(sysUser.getId()); // eur.setReferrerName(sysUser.getReferrerName()); // eur.setReferrerId(sysUser.getReferrerId()); // eur.setLevel(1); // // esmUserReferrerService.save(eur); SysUserInfo userInfo = sysUserVo.getSysUserInfo(); if (userInfo != null) { userInfo.setId(sysUser.getId()); } // userInfo.setId(sysUser.getId()); sysUserInfoService.save(userInfo); List esmUserImageVo = sysUserVo.getEsmUserImageVo(); List esmUserImages = esmUserImageVo.stream().map(x -> new EsmUserImage(x, userId)).collect(Collectors.toList()); esmUserImageService.saveBatch(esmUserImages); return HttpResult.ok("新增成功"); } @Override @Transactional public HttpResult updateUserInfo(String userId, SysUser2Vo sysUserVo) { SysUser sysUser = sysUserVo.getSysUser(); //处理密码 if (StringUtils.isNotEmpty(sysUser.getPassword())) { String salt = PasswordUtils.getSalt(); String pwd = PasswordUtils.encode(sysUser.getPassword(), salt); sysUser.setPassword(pwd); sysUser.setSalt(salt); } else { sysUser.setPassword(null); } updateById(sysUser); //角色配置 SysUserRole userRole = new SysUserRole(); userRole.setUserId(userId); userRole.setRoleId(StringUtils.toLong(sysUser.getRoleId())); userRole.setLastUpdateBy(sysUser.getCreateBy()); userRole.setLastUpdateTime(new Date()); sysUserRoleService.updateById(userRole); if (StringUtils.isNotEmpty(sysUser.getReferrerId())) { //推荐人 esmUserReferrerService.addReferrer(sysUser.getReferrerId(), userId); } // EsmUserReferrer referrer = esmUserReferrerService.getById(userId); // EsmUserReferrer eur = new EsmUserReferrer(); // eur.setId(userId); // eur.setReferrerName(sysUser.getReferrerName()); // eur.setReferrerId(sysUser.getReferrerId()); // if (null != referrer) { // eur.setLevel(referrer.getLevel() + 1); // } else { // eur.setLevel(1); // } // esmUserReferrerService.updateById(eur); //用户详情信息 SysUserInfo sysUserInfo = sysUserVo.getSysUserInfo(); sysUserInfo.setId(userId); if (null == sysUserInfo.getRemark()) sysUserInfo.setRemark(""); sysUserInfoService.saveOrUpdate(sysUserInfo); return HttpResult.ok("修改成功"); } }