package com.ydtech.modules.admin.service.impl; import com.alibaba.fastjson.JSONObject; 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.constants.SysConstants; import com.ydtech.core.page.HttpResult; import com.ydtech.core.page.PageRequest; import com.ydtech.core.page.PageResult; import com.ydtech.exception.SystemException; import com.ydtech.modules.admin.constants.RoleConstants; import com.ydtech.modules.admin.dao.SysUserMapper; import com.ydtech.modules.admin.model.*; import com.ydtech.modules.admin.model.dto.QuTeamNumDto; import com.ydtech.modules.admin.model.dto.SysUserDto; 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.controller.BaseController; import com.ydtech.modules.base.model.dto.PageDto; import com.ydtech.modules.base.model.vo.PageVo; import com.ydtech.modules.esm.model.EsmInsAttributionTemplate; 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.modules.ins.model.InsOrdersExcel; 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.math.BigDecimal; import java.time.LocalDate; import java.time.temporal.TemporalAdjusters; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @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 IPage findUserList(PageDto pageDto) { PageVo pageVo = new PageVo(); Page page = new Page(pageDto.getPageNum(), pageDto.getPageSize()); pageVo.setPageNum(pageDto.getPageNum()); pageVo.setPageSize(pageDto.getPageSize()); SysUserDto sysUserVO = JSONObject.parseObject(JSONObject.toJSONString(pageDto.getDto()), SysUserDto.class); if (sysUserVO.getAgentFlag() == null) { throw new SystemException("必传标识未传递"); } return sysUserMapper.findUserList(page, sysUserVO); } @Override public IPage quTeamNum(QuTeamNumDto quTeamNumDto) { //判断必传标识是否为空 if (quTeamNumDto.getTeamOrUserFlag() == null) { throw new SystemException("必传参数未传"); } //判断是要查询用户还是团队 if ("1".equals(quTeamNumDto.getTeamOrUserFlag())) { List dept = sysUserMapper.getDept(quTeamNumDto); return getQuTeamNumIPage(quTeamNumDto, dept); } else if ("2".equals(quTeamNumDto.getTeamOrUserFlag())) { List dept = sysUserMapper.getUser(quTeamNumDto); return getQuTeamNumIPage(quTeamNumDto, dept); } throw new SystemException("参数错误"); } private IPage getQuTeamNumIPage(QuTeamNumDto quTeamNumDto, List dept) { Map> collect = new HashMap<>(); int flag; if (quTeamNumDto.getTeamOrUserFlag().equals("1")) { collect = dept.stream() .collect(Collectors.groupingBy(QuTeamNum::getDeptId)); flag = 1; } else if ("2".equals(quTeamNumDto.getTeamOrUserFlag())) { collect = dept.stream() .collect(Collectors.groupingBy(QuTeamNum::getUserId)); flag = 2; } else { flag = 0; } List quTeamNums = new ArrayList<>(); collect.forEach((k, v) -> { QuTeamNum teamNum = new QuTeamNum(); teamNum.setHasInsuredNum("0"); teamNum.setSubmitNum("0"); teamNum.setSyPremiumSum("0"); teamNum.setJqPremiumSum("0"); teamNum.setTaxaMountSum("0"); teamNum.setTotalSumpremium("0"); teamNum.setQuoteNum("0"); if (!v.isEmpty()) { v.forEach(quTeamNum -> { if (quTeamNum.getOrderStatus() != null) { if (quTeamNum.getOrderStatus().equals("3")) { if (quTeamNum.getJqPremiumSum() == null) { quTeamNum.setJqPremiumSum("0"); } if (quTeamNum.getSyPremiumSum() == null) { quTeamNum.setSyPremiumSum("0"); } //添加总额 teamNum.setTotalSumpremium(String.valueOf(new BigDecimal(teamNum.getTotalSumpremium()) .add(new BigDecimal(quTeamNum.getSyPremiumSum())).add(new BigDecimal(quTeamNum.getJqPremiumSum())))); teamNum.setSyPremiumSum(String.valueOf(new BigDecimal(teamNum.getSyPremiumSum()).add(new BigDecimal(quTeamNum.getSyPremiumSum())))); teamNum.setJqPremiumSum(String.valueOf(new BigDecimal(teamNum.getJqPremiumSum()).add(new BigDecimal(quTeamNum.getJqPremiumSum())))); teamNum.setQuoteNum(String.valueOf(new BigDecimal(teamNum.getQuoteNum()).add(new BigDecimal(quTeamNum.getCount())))); teamNum.setHasInsuredNum(String.valueOf(new BigDecimal(teamNum.getHasInsuredNum()).add(new BigDecimal(quTeamNum.getCount())))); } if (quTeamNum.getOrderStatus().equals("2")) { teamNum.setSubmitNum(String.valueOf(new BigDecimal(teamNum.getSubmitNum()).add(new BigDecimal(quTeamNum.getCount())))); teamNum.setQuoteNum(String.valueOf(new BigDecimal(teamNum.getQuoteNum()).add(new BigDecimal(quTeamNum.getCount())))); } if (quTeamNum.getOrderStatus().equals("1")) { teamNum.setQuoteNum(String.valueOf(new BigDecimal(teamNum.getQuoteNum()).add(new BigDecimal(quTeamNum.getCount())))); } } }); } if (flag == 1) { teamNum.setDeptId(v.get(0).getDeptId()); teamNum.setDeptName(v.get(0).getDeptName()); } else if (flag == 2) { teamNum.setUserId(v.get(0).getUserId()); teamNum.setUserName(v.get(0).getUserName()); } quTeamNums.add(teamNum); }); List collect1 = quTeamNums.stream().skip((quTeamNumDto.getPageNo() - 1) * quTeamNumDto.getPageSize()).limit(quTeamNumDto.getPageSize()). collect(Collectors.toList()); IPage page = new Page<>(quTeamNumDto.getPageNo(), quTeamNumDto.getPageSize()); page.setRecords(collect1); page.setTotal(quTeamNums.size()); return page; } @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, id -> 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(); Page page = new Page(pageDto.getPageNum(), pageDto.getPageSize()); pageVo.setPageNum(pageDto.getPageNum()); pageVo.setPageSize(pageDto.getPageSize()); SysUserDto sysUserVO = JSONObject.parseObject(JSONObject.toJSONString(pageDto.getDto()), SysUserDto.class); Page sysUserBaseVOIPage = super.baseMapper.gainUserBaseInfo(page, sysUserVO); pageVo.setContent(sysUserBaseVOIPage.getRecords()); pageVo.setTotalPages((int) sysUserBaseVOIPage.getPages()); pageVo.setTotalSize((int) sysUserBaseVOIPage.getTotal()); 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(); // 手机号 List mobileList = lambdaQuery().eq(SysUser::getMobile, sysUser.getMobile()).list(); if (!mobileList.isEmpty()) { throw new SystemException("手机号已经注册请跟换手机号。"); } // 身份证号 List identityList = lambdaQuery().eq(SysUser::getIdentity, sysUser.getIdentity()).list(); if (!identityList.isEmpty()) { throw new SystemException("身份证号已经注册请跟换身份证号。"); } //处理密码 if (StringUtils.isNotEmpty(sysUser.getPassword())) { String salt = PasswordUtils.getSalt(); String pwd = PasswordUtils.encode(sysUser.getPassword(), salt); sysUser.setPassword(pwd); sysUser.setSalt(salt); } else { return HttpResult.error("密码不能为空"); } if ("19".equals(sysUser.getRoleId())) {//19 出单员 校验机构和业务员机构是否一致 return checkChuDanUser(sysUser); } String userId = gainNextUserId(sysUser.getDeptId()); if (RoleConstants.R22.getCode().equals(sysUser.getRoleId())) {//22 后线人员 if (!SysConstants.isAdministration(userId)) { throw new SystemException("后线人员只能公司部门中"); } } 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); } else if ("20".equals(sysUser.getRoleId()) || "21".equals(sysUser.getRoleId())) { //如果是 团队长或代码人 并且没有推荐人 则默认推荐人为自己 esmUserReferrerService.addReferrer(sysUser.getId(), 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("新增成功"); } /** * 新增修改出单员 * * @param sysUser * @return */ HttpResult checkChuDanUser(SysUser sysUser) { if (StringUtils.isEmpty(sysUser.getReferrerId())) { return HttpResult.error("业务员工号不能为空"); } //归属业务员和出单员部门必须一致 SysUser user = getById(sysUser.getReferrerId()); if (user == null || !user.getDeptId().equals(sysUser.getDeptId())) { return HttpResult.error("出单员机构必须和归属业务员机构一致"); } sysUser.setOperatorCode(sysUser.getReferrerId()); if (StringUtils.isEmpty(sysUser.getId())) { 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); } else { updateById(sysUser); } 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 { return HttpResult.error("密码不能为空"); } //删除状态必须有离司时间 if (StringUtils.isNotEmpty(sysUser.getStatus().toString())) { if (sysUser.getStatus() == 0 && sysUser.getLogoutTime() == null && !sysUser.getRoleId().equals("19")) { return HttpResult.error("删除状态,离职时间必填"); } } else { return HttpResult.error("状态不能为空"); } SysUser sysUser_org = findByUserId(sysUser.getId()); sysUser.setPassword(sysUser_org.getPassword()); sysUser.setSalt(sysUser_org.getSalt()); if ("19".equals(sysUser.getRoleId())) {//19 出单员 校验机构和业务员机构是否一致 return checkChuDanUser(sysUser); } updateById(sysUser); //角色配置 SysUserRole sysUserRole = sysUserRoleService.selectByUserId(userId); sysUserRole.setRoleId(StringUtils.toLong(sysUser.getRoleId())); sysUserRole.setLastUpdateBy(sysUser.getCreateBy()); sysUserRole.setLastUpdateTime(new Date()); sysUserRoleService.updateById(sysUserRole); if (StringUtils.isNotEmpty(sysUser.getReferrerId())) { //推荐人 esmUserReferrerService.addReferrer(sysUser.getReferrerId(), userId); } //用户详情信息 SysUserInfo sysUserInfo = sysUserVo.getSysUserInfo(); sysUserInfo.setId(userId); if (null == sysUserInfo.getRemark()) sysUserInfo.setRemark(""); sysUserInfoService.saveOrUpdate(sysUserInfo); // 影像资料 LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(EsmUserImage::getUserId, userId); esmUserImageService.remove(wrapper); List esmUserImageVo = sysUserVo.getEsmUserImageVo(); List esmUserImages = esmUserImageVo.stream().map(x -> new EsmUserImage(x, userId)).collect(Collectors.toList()); esmUserImageService.saveBatch(esmUserImages); return HttpResult.ok("修改成功"); } @Override public List getAllUsers(String userId) { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.eq(SysUser::getStatus, "1"); lqw.eq(StringUtils.isNotEmpty(userId), SysUser::getId, userId); List lst = list(lqw); return lst; } @Override public List findAllAgentRoleUser(String userId, String roleId) { return super.baseMapper.findAllAgentRoleUser(userId, roleId); } @Override public int getDeptLevel(SysUser2Vo sysUser2Vo) { //获取机构层级 SysUser sysUser = sysUser2Vo.getSysUser(); String deptId = sysUser.getDeptId(); int level = 0; //1 2 3 4 5级 M 6级 D if (deptId.length() > 8) { String substring = deptId.substring(8); return substring.length() / 3 + 4; } else { level = deptId.length() / 2; } return level; } /** * 根据机构代码,查询所有人员 * @param deptId * @return */ @Override public List findUserList(String deptId) { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.eq(SysUser::getStatus, "1"); lqw.eq(SysUser::getDeptId,deptId); List lst = list(lqw); return lst; } }