SysUserServiceImpl.java 37 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003
  1. package com.ydtech.modules.admin.service.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  6. import com.baomidou.mybatisplus.core.metadata.IPage;
  7. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  8. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  9. import com.ydtech.constants.SysConstants;
  10. import com.ydtech.core.page.HttpResult;
  11. import com.ydtech.core.page.PageResult;
  12. import com.ydtech.exception.SystemException;
  13. import com.ydtech.modules.admin.constants.RoleConstants;
  14. import com.ydtech.modules.admin.dao.SysUserMapper;
  15. import com.ydtech.modules.admin.model.*;
  16. import com.ydtech.modules.admin.model.dto.QuTeamNumDto;
  17. import com.ydtech.modules.admin.model.dto.QuUserNumDto;
  18. import com.ydtech.modules.admin.model.dto.SysUserDto;
  19. import com.ydtech.modules.admin.model.vo.*;
  20. import com.ydtech.modules.admin.service.*;
  21. import com.ydtech.modules.base.model.dto.PageDto;
  22. import com.ydtech.modules.base.model.vo.PageVo;
  23. import com.ydtech.modules.esm.model.EsmUserImage;
  24. import com.ydtech.modules.esm.model.EsmUserReferrer;
  25. import com.ydtech.modules.esm.model.vo.EsmUserImageVo;
  26. import com.ydtech.modules.esm.service.EsmUserImageService;
  27. import com.ydtech.modules.esm.service.EsmUserReferrerService;
  28. import com.ydtech.security.utils.PasswordUtils;
  29. import com.ydtech.utils.StringUtils;
  30. import com.ydtech.utils.idgen.IdGenerate;
  31. import org.springframework.beans.factory.annotation.Autowired;
  32. import org.springframework.stereotype.Service;
  33. import org.springframework.transaction.annotation.Transactional;
  34. import java.math.BigDecimal;
  35. import java.util.*;
  36. import java.util.stream.Collectors;
  37. @Service
  38. public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements SysUserService {
  39. @Autowired
  40. private SysMenuService sysMenuService;
  41. @Autowired
  42. private SysRoleMenuService sysRoleMenuService;
  43. @Autowired
  44. private SysDeptService sysDeptService;
  45. @Autowired
  46. private SysUserMapper sysUserMapper;
  47. @Autowired
  48. private SysUserRoleService sysUserRoleService;
  49. @Autowired
  50. private EsmUserReferrerService esmUserReferrerService;
  51. @Autowired
  52. private SysUserInfoService sysUserInfoService;
  53. @Autowired
  54. private EsmUserImageService esmUserImageService;
  55. @Autowired
  56. private SysAreaService sysAreaService;
  57. @Override
  58. public IPage<SysUserBaseVO> findUserList(PageDto<SysUserDto> pageDto) {
  59. PageVo<SysUserBaseVO> pageVo = new PageVo();
  60. Page page = new Page(pageDto.getPageNum(), pageDto.getPageSize());
  61. pageVo.setPageNum(pageDto.getPageNum());
  62. pageVo.setPageSize(pageDto.getPageSize());
  63. SysUserDto sysUserVO = JSONObject.parseObject(JSONObject.toJSONString(pageDto.getDto()), SysUserDto.class);
  64. if (sysUserVO.getAgentFlag() == null) {
  65. throw new SystemException("必传标识未传递");
  66. }
  67. IPage<SysUserBaseVO> userList = sysUserMapper.findUserList(page, sysUserVO);
  68. return userList;
  69. }
  70. @Override
  71. public IPage<SysUserBaseVO> findBackUserList(PageDto<SysUserDto> pageDto) {
  72. PageVo<SysUserBaseVO> pageVo = new PageVo();
  73. Page page = new Page(pageDto.getPageNum(), pageDto.getPageSize());
  74. pageVo.setPageNum(pageDto.getPageNum());
  75. pageVo.setPageSize(pageDto.getPageSize());
  76. SysUserDto sysUserVO = JSONObject.parseObject(JSONObject.toJSONString(pageDto.getDto()), SysUserDto.class);
  77. if (sysUserVO.getAgentFlag() == null) {
  78. throw new SystemException("必传标识未传递");
  79. }
  80. return sysUserMapper.findBackUserList(page, sysUserVO);
  81. }
  82. @Override
  83. public IPage<QuTeamNum> quTeamNum(QuTeamNumDto quTeamNumDto) {
  84. //判断必传标识是否为空
  85. if (quTeamNumDto.getTeamOrUserFlag() == null) {
  86. throw new SystemException("必传参数未传");
  87. }
  88. //判断是要查询用户还是团队
  89. if ("1".equals(quTeamNumDto.getTeamOrUserFlag())) {
  90. List<QuTeamNum> dept = sysUserMapper.getDept(quTeamNumDto);
  91. return getQuTeamNumIPage(quTeamNumDto, dept);
  92. } else if ("2".equals(quTeamNumDto.getTeamOrUserFlag())) {
  93. List<QuTeamNum> dept = sysUserMapper.getUser(quTeamNumDto);
  94. return getQuTeamNumIPage(quTeamNumDto, dept);
  95. }
  96. throw new SystemException("参数错误");
  97. }
  98. @Override
  99. public IPage<QuTeamNum> getQuTeamByCompany(QuTeamNumDto quTeamNumDto) {
  100. List<QuTeamNum> deptByCompany = sysUserMapper.getDeptByCompany(quTeamNumDto);
  101. IPage<QuTeamNum> page = new Page<>(quTeamNumDto.getPageNo(), quTeamNumDto.getPageSize());
  102. page.setRecords(deptByCompany);
  103. page.setTotal(deptByCompany.size());
  104. return page;
  105. }
  106. private IPage<QuTeamNum> getQuTeamNumIPage(QuTeamNumDto quTeamNumDto, List<QuTeamNum> dept) {
  107. Map<String, List<QuTeamNum>> collect = new HashMap<>();
  108. int flag;
  109. if (quTeamNumDto.getTeamOrUserFlag().equals("1")) {
  110. collect = dept.stream()
  111. .collect(Collectors.groupingBy(QuTeamNum::getDeptId));
  112. flag = 1;
  113. } else if ("2".equals(quTeamNumDto.getTeamOrUserFlag())) {
  114. collect = dept.stream()
  115. .collect(Collectors.groupingBy(QuTeamNum::getUserId));
  116. flag = 2;
  117. } else {
  118. flag = 0;
  119. }
  120. List<QuTeamNum> quTeamNums = new ArrayList<>();
  121. collect.forEach((k, v) -> {
  122. QuTeamNum teamNum = new QuTeamNum();
  123. teamNum.setHasInsuredNum("0");
  124. teamNum.setSubmitNum("0");
  125. teamNum.setSyPremiumSum("0");
  126. teamNum.setJqPremiumSum("0");
  127. teamNum.setTaxaMountSum("0");
  128. teamNum.setTotalSumpremium("0");
  129. teamNum.setQuoteNum("0");
  130. if (!v.isEmpty()) {
  131. v.forEach(quTeamNum -> {
  132. if (quTeamNum.getOrderStatus() != null) {
  133. if (quTeamNum.getOrderStatus().equals("3")) {
  134. if (quTeamNum.getJqPremiumSum() == null) {
  135. quTeamNum.setJqPremiumSum("0");
  136. }
  137. if (quTeamNum.getSyPremiumSum() == null) {
  138. quTeamNum.setSyPremiumSum("0");
  139. }
  140. //添加总额
  141. teamNum.setTotalSumpremium(String.valueOf(new BigDecimal(teamNum.getTotalSumpremium())
  142. .add(new BigDecimal(quTeamNum.getSyPremiumSum())).add(new BigDecimal(quTeamNum.getJqPremiumSum()))));
  143. teamNum.setSyPremiumSum(String.valueOf(new BigDecimal(teamNum.getSyPremiumSum()).add(new BigDecimal(quTeamNum.getSyPremiumSum()))));
  144. teamNum.setJqPremiumSum(String.valueOf(new BigDecimal(teamNum.getJqPremiumSum()).add(new BigDecimal(quTeamNum.getJqPremiumSum()))));
  145. teamNum.setQuoteNum(String.valueOf(new BigDecimal(teamNum.getQuoteNum()).add(new BigDecimal(quTeamNum.getCount()))));
  146. teamNum.setHasInsuredNum(String.valueOf(new BigDecimal(teamNum.getHasInsuredNum()).add(new BigDecimal(quTeamNum.getCount()))));
  147. teamNum.setTaxaMountSum(String.valueOf(new BigDecimal(quTeamNum.getTaxaMountSum())));
  148. }
  149. if (quTeamNum.getOrderStatus().equals("2")) {
  150. teamNum.setSubmitNum(String.valueOf(new BigDecimal(teamNum.getSubmitNum()).add(new BigDecimal(quTeamNum.getCount()))));
  151. teamNum.setQuoteNum(String.valueOf(new BigDecimal(teamNum.getQuoteNum()).add(new BigDecimal(quTeamNum.getCount()))));
  152. }
  153. if (quTeamNum.getOrderStatus().equals("1")) {
  154. teamNum.setQuoteNum(String.valueOf(new BigDecimal(teamNum.getQuoteNum()).add(new BigDecimal(quTeamNum.getCount()))));
  155. teamNum.setSubmitNum(String.valueOf(new BigDecimal(teamNum.getSubmitNum()).add(new BigDecimal(quTeamNum.getCount()))));
  156. }
  157. }
  158. });
  159. }
  160. if (flag == 1) {
  161. teamNum.setDeptId(v.get(0).getDeptId());
  162. teamNum.setDeptName(v.get(0).getDeptName());
  163. } else if (flag == 2) {
  164. teamNum.setUserId(v.get(0).getUserId());
  165. teamNum.setUserName(v.get(0).getUserName());
  166. }
  167. quTeamNums.add(teamNum);
  168. });
  169. List<QuTeamNum> collect1 =
  170. quTeamNums.stream().skip((quTeamNumDto.getPageNo() - 1) * quTeamNumDto.getPageSize()).limit(quTeamNumDto.getPageSize()).
  171. collect(Collectors.toList());
  172. IPage<QuTeamNum> page = new Page<>(quTeamNumDto.getPageNo(), quTeamNumDto.getPageSize());
  173. page.setRecords(collect1);
  174. page.setTotal(quTeamNums.size());
  175. return page;
  176. }
  177. @Override
  178. public SysUser findByUsername(String username) {
  179. SysUser sysUser = null;
  180. if (StringUtils.isNotEmpty(username)) {
  181. sysUser = getById(username);
  182. }
  183. return sysUser;
  184. }
  185. @Override
  186. public SysUser findByPhone(String phone) {
  187. SysUser sysUser = null;
  188. LambdaQueryWrapper<SysUser> lqw = new LambdaQueryWrapper<>();
  189. lqw.eq(StringUtils.isNotEmpty(phone), SysUser::getMobile, phone);
  190. List<SysUser> lst = list(lqw);
  191. if (lst.size() > 0) {
  192. sysUser = lst.get(0);
  193. }
  194. return sysUser;
  195. }
  196. @Override
  197. public Set<String> findPermissions(SysUser sysUser) {
  198. Set<String> perms = new HashSet<>();
  199. String sql = "";
  200. List<String> lsPerms = null;
  201. if (sysUser.getId().equalsIgnoreCase("admin")) {
  202. LambdaQueryWrapper<SysMenu> lqw = new LambdaQueryWrapper<>();
  203. lqw.isNotNull(SysMenu::getPerms);
  204. lqw.select(SysMenu::getPerms);
  205. lsPerms = sysMenuService.listObjs(lqw, id -> id.toString());
  206. } else {
  207. List<SysMenu> sysMenuList = sysRoleMenuService.gainMenuIds(sysUser.getId());
  208. lsPerms =
  209. sysMenuList.stream().filter(a -> StringUtils.isNotEmpty(a.getPerms())).map(SysMenu::getPerms).collect(Collectors.toList());
  210. }
  211. if (lsPerms != null && lsPerms.size() > 0) {
  212. for (String perm : lsPerms) {
  213. if (!StringUtils.isNullOrEmpty(perm)) {
  214. perms.add(perm);
  215. }
  216. }
  217. }
  218. return perms;
  219. }
  220. // @Override
  221. // public Set<String> findPermissions(SysUser sysUser) {
  222. // Set<String> perms = new HashSet<>();
  223. // String sql = "";
  224. // JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
  225. // List<String> lsPerms = null;
  226. //
  227. // if (sysUser.getId().equalsIgnoreCase("admin")) {
  228. // sql = "SELECT perms FROM sys_menu WHERE perms IS NOT NULL AND perms <> ''";
  229. //
  230. // lsPerms = jdbcTemplate.queryForList(sql, String.class);
  231. // } else {
  232. // sql = "SELECT perms FROM sys_menu sm WHERE sm.id IN ( " +
  233. // "SELECT menu_id FROM sys_role_menu srm, sys_user_role sur ,sys_user su " +
  234. // "WHERE srm.role_id=sur.role_id " +
  235. // "AND sur.user_id=su.id AND su.id=?) " +
  236. // "AND perms IS NOT NULL AND perms <> ''"
  237. // ;
  238. //
  239. // lsPerms = jdbcTemplate.queryForList(sql, String.class, sysUser.getId());
  240. // }
  241. //
  242. // if (lsPerms != null && lsPerms.size() > 0) {
  243. // for (String perm : lsPerms) {
  244. // if (!StringUtils.isNullOrEmpty(perm)) {
  245. // perms.add(perm);
  246. // }
  247. // }
  248. // }
  249. //
  250. // return perms;
  251. // }
  252. @Override
  253. public List<SysUserRole> findUserRoles(Long userId) {
  254. return null;
  255. }
  256. @Override
  257. public PageResult selectPagingCustom(int pageNumber, int pageSize, String name, String deptCode) {
  258. return null;
  259. }
  260. /**
  261. * 获取用户列表
  262. *
  263. * @param page 分页信息
  264. * @param sysUser 查询条件
  265. * @param containsSubDept 是否汉堡下级机构
  266. * @return
  267. */
  268. @Override
  269. public IPage<SysUser> selectUserPage(Page page, SysUser sysUser, String containsSubDept) {
  270. return baseMapper.selectUserPage(page, sysUser, containsSubDept);
  271. }
  272. @Override
  273. public void findSysUseresmUserInternalVORoles(PageResult pageResult) {
  274. }
  275. @Override
  276. public Integer deleteFlag(List<SysUser> lsSysUser) {
  277. List<String> ids = lsSysUser.stream().map(SysUser::getId).collect(Collectors.toList());
  278. LambdaUpdateWrapper<SysUser> lqw = new LambdaUpdateWrapper<>();
  279. lqw.set(SysUser::getStatus, "0");
  280. lqw.in(SysUser::getId, ids);
  281. return update(lqw) == true ? ids.size() : 0;
  282. }
  283. @Override
  284. public SysUser findById(String id) {
  285. if (!StringUtils.isNullOrEmpty(id)) {
  286. return getById(id);
  287. }
  288. return null;
  289. }
  290. @Override
  291. public SysUser findByUserId(String userId) {
  292. SysUser sysUser = null;
  293. if (!StringUtils.isNullOrEmpty(userId)) {
  294. sysUser = getById(userId);
  295. }
  296. return sysUser;
  297. }
  298. @Override
  299. public SysUserVO gainUserInternal(String userId) {
  300. return super.baseMapper.gainInternalUser(userId);
  301. }
  302. @Override
  303. public SysUserVO gainUserInternalByDeptId(String deptId) {
  304. return super.baseMapper.gainInternalUserByDeptId(deptId);
  305. }
  306. @Override
  307. public List<SysUserVO> findByReferrerId(String deptId) {
  308. return super.baseMapper.findByReferrerId(deptId);
  309. }
  310. @Override
  311. public List<SysUserVO> findListByDeptId(SysUser sysUser) {
  312. return super.baseMapper.findListByDeptId(sysUser);
  313. }
  314. @Override
  315. public PageVo gainUserPage(PageDto pageDto) {
  316. PageVo<SysUserBaseVO> pageVo = new PageVo();
  317. Page page = new Page(pageDto.getPageNum(), pageDto.getPageSize());
  318. pageVo.setPageNum(pageDto.getPageNum());
  319. pageVo.setPageSize(pageDto.getPageSize());
  320. SysUserDto sysUserVO = JSONObject.parseObject(JSONObject.toJSONString(pageDto.getDto()), SysUserDto.class);
  321. Page<SysUserBaseVO> sysUserBaseVOIPage = super.baseMapper.gainUserBaseInfo(page, sysUserVO);
  322. pageVo.setContent(sysUserBaseVOIPage.getRecords());
  323. pageVo.setTotalPages((int) sysUserBaseVOIPage.getPages());
  324. pageVo.setTotalSize((int) sysUserBaseVOIPage.getTotal());
  325. return pageVo;
  326. }
  327. @Override
  328. public String gainNextUserId(String deptId) {
  329. int noCount = 3;//顺序号是几位的
  330. String nextPK;
  331. QueryWrapper<SysUser> lq = new QueryWrapper<>();
  332. lq.select(" MAX(id) as id ");
  333. lq.eq("dept_id", deptId);
  334. // lq.likeRight("id", deptId);
  335. SysUser userMaxId = getOne(lq);
  336. String maxId = "";
  337. if (null != userMaxId) maxId = userMaxId.getId();
  338. if (StringUtils.isNullOrEmpty(maxId)) {
  339. nextPK = deptId + "001";
  340. } else {
  341. nextPK = IdGenerate.nextCode(maxId, noCount);
  342. }
  343. return nextPK;
  344. }
  345. @Override
  346. public SysUserInternalVO gainUserSynthesisInfo(String userId) {
  347. SysUserInternalVO vo = new SysUserInternalVO();
  348. SysUser sysUser = getById(userId);
  349. // EsmUserInternal sysUserInternal = esmUserInternalService.selectByPk(userId);
  350. String pDeptId = sysUser.getDeptId();
  351. if (pDeptId.indexOf("D") > 1) {
  352. pDeptId = sysUser.getDeptId().substring(0, pDeptId.indexOf("D"));
  353. }
  354. SysDept sysDept = sysDeptService.getById(pDeptId);
  355. vo.setSysUser(sysUser);
  356. vo.setSysDept(sysDept);
  357. // vo.setSysUserInternal(sysUserInternal);
  358. return vo;
  359. }
  360. @Override
  361. public String findMaxId(String deptId) {
  362. QueryWrapper<SysUser> qw = new QueryWrapper<>();
  363. qw.select("IFNULL(MAX(id),0) maxId");
  364. qw.eq("dept_id", deptId);
  365. Map<String, Object> m = getMap(qw);
  366. String maxId = m.get("maxId").toString();
  367. return maxId;
  368. }
  369. @Override
  370. public boolean check(String userId, Integer approvalStatus, String approvalOpinion) {
  371. SysUser user = getById(userId);
  372. // user.setApprovalStatus(approvalStatus);
  373. user.setApprovalOpinion(approvalOpinion);
  374. return updateById(user);
  375. }
  376. @Override
  377. public SysUserBaseVO selectUserById(String userId) {
  378. return sysUserMapper.selectUserById(userId);
  379. }
  380. @Override
  381. @Transactional
  382. public boolean saveUser(SysUser sysUser) {
  383. // 判断用户id是否存在
  384. if (StringUtils.isNullOrEmpty(sysUser.getId())) {
  385. sysUser.setId(gainNextUserId(sysUser.getDeptId()));
  386. sysUser.setMobile(sysUser.getMobile());
  387. }
  388. // 角色信息
  389. SysUserRole sur = new SysUserRole();
  390. sur.setUserId(sysUser.getId());
  391. sur.setRoleId(StringUtils.toLong(sysUser.getRoleId()));
  392. // 删除角色
  393. sysUserRoleService.deleteByUserId(sysUser.getId());
  394. // 删除推荐人
  395. esmUserReferrerService.deldeleteByReferrerId(sysUser.getId());
  396. // 构建推荐人信息
  397. EsmUserReferrer eur = new EsmUserReferrer();
  398. eur.setId(sysUser.getId());
  399. eur.setReferrerId(sysUser.getReferrerId());//推荐人
  400. eur.setReferrerName(sysUser.getReferrerName());
  401. // 新增或跟新用户表
  402. save(sysUser);
  403. // 保存推荐人
  404. esmUserReferrerService.save(eur);
  405. // 保存角色
  406. sysUserRoleService.save(sur);
  407. return true;
  408. }
  409. @Override
  410. @Transactional
  411. public HttpResult saveUserInfo(SysUser2Vo sysUserVo) {
  412. SysUser sysUser = sysUserVo.getSysUser();
  413. // 手机号
  414. List<SysUser> mobileList = lambdaQuery().eq(SysUser::getMobile, sysUser.getMobile()).list();
  415. if (!mobileList.isEmpty()) {
  416. throw new SystemException("手机号已经注册请跟换手机号。");
  417. }
  418. // 身份证号
  419. List<SysUser> identityList = lambdaQuery().eq(SysUser::getIdentity, sysUser.getIdentity()).list();
  420. if (!identityList.isEmpty()) {
  421. throw new SystemException("身份证号已经注册请跟换身份证号。");
  422. }
  423. //处理密码
  424. if (StringUtils.isNotEmpty(sysUser.getPassword())) {
  425. String salt = PasswordUtils.getSalt();
  426. String pwd = PasswordUtils.encode(sysUser.getPassword(), salt);
  427. sysUser.setPassword(pwd);
  428. sysUser.setSalt(salt);
  429. } else {
  430. return HttpResult.error("密码不能为空");
  431. }
  432. if ("19".equals(sysUser.getRoleId())) {//19 出单员 校验机构和业务员机构是否一致
  433. return checkChuDanUser(sysUser);
  434. }
  435. String userId = gainNextUserId(sysUser.getDeptId());
  436. if (RoleConstants.R22.getCode().equals(sysUser.getRoleId())) {//22 后线人员
  437. if (!SysConstants.isAdministration(userId)) {
  438. throw new SystemException("后线人员只能公司部门中");
  439. }
  440. }
  441. sysUser.setId(userId);
  442. save(sysUser);
  443. //角色配置
  444. SysUserRole userRole = new SysUserRole();
  445. userRole.setUserId(sysUser.getId());
  446. userRole.setRoleId(StringUtils.toLong(sysUser.getRoleId()));
  447. sysUserRoleService.save(userRole);
  448. if (StringUtils.isNotEmpty(sysUser.getReferrerId())) {
  449. //推荐人
  450. esmUserReferrerService.addReferrer(sysUser.getReferrerId(), userId);
  451. } else if ("20".equals(sysUser.getRoleId()) || "21".equals(sysUser.getRoleId())) {
  452. //如果是 团队长或代码人 并且没有推荐人 则默认推荐人为自己
  453. esmUserReferrerService.addReferrer(sysUser.getId(), userId);
  454. }
  455. // EsmUserReferrer eur = new EsmUserReferrer();
  456. // eur.setId(sysUser.getId());
  457. // eur.setReferrerName(sysUser.getReferrerName());
  458. // eur.setReferrerId(sysUser.getReferrerId());
  459. // eur.setLevel(1);
  460. //
  461. // esmUserReferrerService.save(eur);
  462. SysUserInfo userInfo = sysUserVo.getSysUserInfo();
  463. if (userInfo != null) {
  464. userInfo.setId(sysUser.getId());
  465. }
  466. // userInfo.setId(sysUser.getId());
  467. sysUserInfoService.save(userInfo);
  468. List<EsmUserImageVo> esmUserImageVo = sysUserVo.getEsmUserImageVo();
  469. List<EsmUserImage> esmUserImages = esmUserImageVo.stream().map(x -> new EsmUserImage(x, userId)).collect(Collectors.toList());
  470. esmUserImageService.saveBatch(esmUserImages);
  471. return HttpResult.ok("新增成功");
  472. }
  473. /**
  474. * 新增修改出单员
  475. *
  476. * @param sysUser
  477. * @return
  478. */
  479. HttpResult checkChuDanUser(SysUser sysUser) {
  480. if (StringUtils.isEmpty(sysUser.getReferrerId())) {
  481. return HttpResult.error("业务员工号不能为空");
  482. }
  483. //归属业务员和出单员部门必须一致
  484. SysUser user = getById(sysUser.getReferrerId());
  485. if (user == null || !user.getDeptId().equals(sysUser.getDeptId())) {
  486. return HttpResult.error("出单员机构必须和归属业务员机构一致");
  487. }
  488. sysUser.setOperatorCode(sysUser.getReferrerId());
  489. if (StringUtils.isEmpty(sysUser.getId())) {
  490. String userId = gainNextUserId(sysUser.getDeptId());
  491. sysUser.setId(userId);
  492. save(sysUser);
  493. //角色配置
  494. SysUserRole userRole = new SysUserRole();
  495. userRole.setUserId(sysUser.getId());
  496. userRole.setRoleId(StringUtils.toLong(sysUser.getRoleId()));
  497. sysUserRoleService.save(userRole);
  498. } else {
  499. updateById(sysUser);
  500. }
  501. return HttpResult.ok("操作成功");
  502. }
  503. @Override
  504. @Transactional
  505. public HttpResult updateUserInfo(String userId, SysUser2Vo sysUserVo) {
  506. SysUser sysUser = sysUserVo.getSysUser();
  507. //修改用户不能修改密码
  508. if (StringUtils.isNotEmpty(sysUser.getPassword())) {
  509. String salt = PasswordUtils.getSalt();
  510. String pwd = PasswordUtils.encode(sysUser.getPassword(), salt);
  511. sysUser.setPassword(pwd);
  512. sysUser.setSalt(salt);
  513. } else {
  514. return HttpResult.error("密码不能为空");
  515. }
  516. //删除状态必须有离司时间
  517. if (StringUtils.isNotEmpty(sysUser.getStatus().toString())) {
  518. if (sysUser.getStatus() == 0 && sysUser.getLogoutTime() == null && !sysUser.getRoleId().equals("19")) {
  519. return HttpResult.error("删除状态,离职时间必填");
  520. }
  521. } else {
  522. return HttpResult.error("状态不能为空");
  523. }
  524. SysUser sysUser_org = findByUserId(sysUser.getId());
  525. sysUser.setPassword(sysUser_org.getPassword());
  526. sysUser.setSalt(sysUser_org.getSalt());
  527. if ("19".equals(sysUser.getRoleId())) {//19 出单员 校验机构和业务员机构是否一致
  528. return checkChuDanUser(sysUser);
  529. }
  530. updateById(sysUser);
  531. //角色配置
  532. SysUserRole sysUserRole = sysUserRoleService.selectByUserId(userId);
  533. sysUserRole.setRoleId(StringUtils.toLong(sysUser.getRoleId()));
  534. sysUserRole.setLastUpdateBy(sysUser.getCreateBy());
  535. sysUserRole.setLastUpdateTime(new Date());
  536. sysUserRoleService.updateById(sysUserRole);
  537. if (StringUtils.isNotEmpty(sysUser.getReferrerId())) {
  538. //推荐人
  539. esmUserReferrerService.addReferrer(sysUser.getReferrerId(), userId);
  540. }
  541. //用户详情信息
  542. SysUserInfo sysUserInfo = sysUserVo.getSysUserInfo();
  543. sysUserInfo.setId(userId);
  544. if (null == sysUserInfo.getRemark()) {
  545. sysUserInfo.setRemark("");
  546. }
  547. sysUserInfoService.saveOrUpdate(sysUserInfo);
  548. // 影像资料
  549. LambdaQueryWrapper<EsmUserImage> wrapper = new LambdaQueryWrapper<>();
  550. wrapper.eq(EsmUserImage::getUserId, userId);
  551. esmUserImageService.remove(wrapper);
  552. List<EsmUserImageVo> esmUserImageVo = sysUserVo.getEsmUserImageVo();
  553. List<EsmUserImage> esmUserImages = esmUserImageVo.stream().map(x -> new EsmUserImage(x, userId)).collect(Collectors.toList());
  554. esmUserImageService.saveBatch(esmUserImages);
  555. return HttpResult.ok("修改成功");
  556. }
  557. @Override
  558. public List<SysUser> findAllAgentRoleUser(String userId, String roleId) {
  559. return super.baseMapper.findAllAgentRoleUser(userId, roleId);
  560. }
  561. @Override
  562. public int getDeptLevel(SysUser2Vo sysUser2Vo) {
  563. //获取机构层级
  564. SysUser sysUser = sysUser2Vo.getSysUser();
  565. String deptId = sysUser.getDeptId();
  566. int level = 0;
  567. //1 2 3 4 5级 M 6级 D
  568. if (deptId.length() > 8) {
  569. String substring = deptId.substring(8);
  570. return substring.length() / 3 + 4;
  571. } else {
  572. level = deptId.length() / 2;
  573. }
  574. return level;
  575. }
  576. /**
  577. * 根据机构代码,查询所有人员
  578. *
  579. * @param deptId
  580. * @return
  581. */
  582. @Override
  583. public List<SysUser> findUserList(String deptId) {
  584. LambdaQueryWrapper<SysUser> lqw = new LambdaQueryWrapper<>();
  585. lqw.eq(SysUser::getStatus, "1");
  586. lqw.eq(SysUser::getDeptId, deptId);
  587. return list(lqw);
  588. }
  589. /**
  590. * 查找组织结构树,返回所有层级的用户列表,其中每个用户包含其直接下级用户。
  591. *
  592. * @return 返回组织结构树形式的用户列表,每个用户对象可能包含一个子用户列表。
  593. */
  594. @Override
  595. public List<SysUser> findTree() {
  596. //获取领导字段不为空的人的ID
  597. List<SysUser> list1 = lambdaQuery().isNotNull(SysUser::getLeaderId).list();
  598. if (list1 == null || list1.size() == 0){
  599. return new ArrayList<>();
  600. }
  601. List<String> collect1 = list1.stream().map(SysUser::getLeaderId).collect(Collectors.toList());
  602. //存放1级用户
  603. List<SysUser> sysUsers = new ArrayList<>();
  604. // 根据上面获取的ID列表,查询所有这些人的直接上级
  605. List<SysUser> list2 = lambdaQuery().in(SysUser::getId, collect1).list();
  606. // 从查询结果中筛选出没有上级的人员,作为组织结构树的顶层节点
  607. for (SysUser sysUser : list2) {
  608. if (Objects.isNull(sysUser.getLeaderId())) {
  609. sysUsers.add(sysUser);
  610. }
  611. }
  612. // 为每个顶层节点分配其直接下级
  613. for (SysUser sysUser : sysUsers) {
  614. List<SysUser> chils = new ArrayList<>();
  615. // 遍历所有人员,为当前顶层节点找出其所有直接下级
  616. for (SysUser user : list2) {
  617. if (sysUser.getId().equals(user.getLeaderId())) {
  618. chils.add(user);
  619. }
  620. }
  621. // 将找到的直接下级列表设置到当前顶层节点用户对象中
  622. sysUser.setChildren(chils);
  623. }
  624. return sysUsers;
  625. }
  626. /**
  627. * 根据部门ID查询后台用户列表。
  628. *
  629. * @param deptId 部门ID,用于筛选指定部门的用户。
  630. * @return 返回一个SysUser类型的列表,包含指定部门的所有后台用户。
  631. */
  632. @Override
  633. public List<SysUser> findBackListByDeptId(String deptId) {
  634. return baseMapper.findBackListByDeptId(deptId);
  635. }
  636. /**
  637. * 查询用户订单数量进行区域统计信息
  638. *
  639. * @param quUserNumDto 包含查询条件和分页信息的数据传输对象
  640. * @return IPage<QuUserNum> 返回用户数量统计信息的分页对象
  641. */
  642. @Override
  643. public IPage<QuUserNum> quUserNum(QuUserNumDto quUserNumDto) {
  644. //获取所有用户
  645. List<SysUser> users = list();
  646. // 根据用户ID查询一级下屬
  647. LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
  648. queryWrapper.eq(SysUser::getId, quUserNumDto.getUserId());
  649. List<SysUser> usersLevel1 = list(queryWrapper);
  650. //递归获取1级下属下所有的下属ID
  651. List<String> strIds = new ArrayList<>();
  652. findChildren(usersLevel1, users, strIds);
  653. // 根据区域编码和级别查询符合条件的区域
  654. LambdaQueryWrapper<SysArea> wrapper = new LambdaQueryWrapper<>();
  655. if (quUserNumDto.getAreaCode() != null && !"".equals(quUserNumDto.getAreaCode())) {
  656. String area = quUserNumDto.getAreaCode();
  657. switch (quUserNumDto.getLevel()) {
  658. case "1": { // 省级查询逻辑
  659. quUserNumDto.setGrouping(4);
  660. String prefix = area.substring(0, 2);
  661. strIds.removeIf(id -> !id.contains("99" + prefix));
  662. quUserNumDto.setLevel("2");
  663. wrapper.eq(SysArea::getLevel, "2");
  664. wrapper.likeRight(SysArea::getAreaCode, prefix);
  665. break;
  666. }
  667. case "2": { // 市级查询逻辑
  668. quUserNumDto.setGrouping(6);
  669. String prefix = area.substring(0, 4);
  670. strIds.removeIf(id -> !id.contains("99" + prefix));
  671. quUserNumDto.setLevel("3");
  672. wrapper.eq(SysArea::getLevel, "3");
  673. wrapper.likeRight(SysArea::getAreaCode, prefix);
  674. break;
  675. }
  676. case "3": { // 区县级查询逻辑
  677. quUserNumDto.setGrouping(6);
  678. String prefix = area.substring(0, 6);
  679. strIds.removeIf(id -> !id.contains("99" + prefix));
  680. quUserNumDto.setLevel("3");
  681. wrapper.eq(SysArea::getLevel, "3");
  682. wrapper.likeRight(SysArea::getAreaCode, prefix);
  683. break;
  684. }
  685. }
  686. } else { // 默认查询省级区域
  687. quUserNumDto.setGrouping(2);
  688. quUserNumDto.setLevel("1");
  689. wrapper.eq(SysArea::getLevel, "1");
  690. }
  691. // 如果没有查询到用户ID,则直接返回空的分页对象
  692. if (strIds.size() == 0) {
  693. return new Page<>();
  694. }
  695. // 根据查询条件获取用户数量统计信息
  696. quUserNumDto.setUserIds(strIds);
  697. List<QuUserNum> userNums = sysUserMapper.getUserNum(quUserNumDto);
  698. //遍历匹配区域名称
  699. List<SysArea> areaList = sysAreaService.list(wrapper);
  700. // 根据区域名称匹配用户数量统计信息,并构造最终返回的结果列表
  701. List<QuUserNum> quUserNums = new ArrayList<>();
  702. for (QuUserNum quUserNum : userNums) {
  703. for (SysArea sysArea : areaList) {
  704. if (!Objects.isNull(sysArea.getAreaCode())) {
  705. // 匹配区域名称
  706. String substring = sysArea.getAreaCode().substring(0, quUserNumDto.getGrouping());
  707. if (quUserNum.getAreaCode().equals(substring)) {
  708. quUserNum.setAreaName(sysArea.getAreaCname());
  709. quUserNums.add(quUserNum);
  710. }
  711. }
  712. }
  713. }
  714. // 为每个区域生成未匹配到的统计信息
  715. for (SysArea sysArea : areaList) {
  716. if (exists(quUserNums, sysArea)) {
  717. QuUserNum userNum = new QuUserNum();
  718. // 设置未匹配到的区域的默认统计信
  719. userNum.setAreaName(sysArea.getAreaCname());
  720. userNum.setQuoteNum("0");
  721. userNum.setSubmitNum("0");
  722. userNum.setHasInsuredNum("0");
  723. userNum.setTotalSumpremium("0");
  724. userNum.setJqPremiumSum("0");
  725. userNum.setSyPremiumSum("0");
  726. userNum.setTaxaMountSum("0");
  727. quUserNums.add(userNum);
  728. }
  729. }
  730. List<QuUserNum> paginate = paginate(quUserNums, quUserNumDto.getPageNum(), quUserNumDto.getPageSize());
  731. // 构造返回的分页对象
  732. IPage<QuUserNum> recordsPage = new Page<>(quUserNumDto.getPageNum(), quUserNumDto.getPageSize());
  733. recordsPage.setRecords(paginate);
  734. recordsPage.setTotal(quUserNums.size());
  735. return recordsPage;
  736. }
  737. /**
  738. * 查询用户订单数量进行区域统计详细信息
  739. *
  740. * @param quUserNumDto 包含查询条件和分页信息的数据传输对象
  741. * @return IPage<QuUserNum> 返回用户数量统计信息的分页对象
  742. */
  743. @Override
  744. public IPage<QuUserNum> getQuUserByCompany(QuUserNumDto quUserNumDto) {
  745. // 获取系统中的所有用户
  746. List<SysUser> users = list();
  747. // 创建查询包装器,用于查询指定用户ID的用
  748. LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
  749. queryWrapper.eq(SysUser::getId, quUserNumDto.getUserId());
  750. // 查询指定用户ID的用户,即第一级下属
  751. List<SysUser> usersLevel1 = list(queryWrapper);
  752. // 用于存储所有下属的ID
  753. List<String> strIds = new ArrayList<>();
  754. // 递归获取第一级下属及其所有下属的ID
  755. findChildren(usersLevel1, users, strIds);
  756. // 如果未指定区域码,返回空分页对
  757. if (Objects.isNull(quUserNumDto.getAreaCode())) {
  758. return new Page<>();
  759. }
  760. // 根据区域码筛选有效的下属ID
  761. strIds.removeIf(id -> !id.contains("99" + quUserNumDto.getAreaCode()));
  762. // 如果筛选后没有有效的下属ID,返回空分页对象
  763. if (strIds.size() == 0) {
  764. return new Page<>();
  765. }
  766. // 设置查询条件中的用户ID列表
  767. quUserNumDto.setUserIds(strIds);
  768. // 根据公司和用户ID列表查询用户数量统计信息
  769. List<QuUserNum> deptByCompany = sysUserMapper.getUserByCompany(quUserNumDto);
  770. List<QuUserNum> paginate = paginate(deptByCompany, quUserNumDto.getPageNum(), quUserNumDto.getPageSize());
  771. // 创建并设置分页信息
  772. IPage<QuUserNum> page = new Page<>(quUserNumDto.getPageNum(), quUserNumDto.getPageSize());
  773. page.setRecords(paginate);
  774. page.setTotal(deptByCompany.size());
  775. return page;
  776. }
  777. /**
  778. * 手动对 QuUserNum 列表进行分页
  779. *
  780. * @param quUserNums 原始 QuUserNum 数据列表
  781. * @param pageNum 期望获取的页码(从 1 开始)
  782. * @param pageSize 每页包含的 QuUserNum 数量
  783. * @return 对应页码的 QuUserNum 子列表,若输入参数无效则返回空列表
  784. */
  785. public List<QuUserNum> paginate(List<QuUserNum> quUserNums, int pageNum, int pageSize) {
  786. if (quUserNums == null || quUserNums.isEmpty() || pageNum < 1 || pageSize < 1) {
  787. return Collections.emptyList();
  788. }
  789. int startIndex = (pageNum - 1) * pageSize;
  790. int endIndex = Math.min(startIndex + pageSize, quUserNums.size());
  791. return quUserNums.subList(startIndex, endIndex);
  792. }
  793. private void findChildren(List<SysUser> SysUsers, List<SysUser> users, List<String> strIds) {
  794. for (SysUser sysUser : SysUsers) {
  795. List<SysUser> children = new ArrayList<>();
  796. for (SysUser user : users) {
  797. if (sysUser.getId() != null && sysUser.getId().equals(user.getLeaderId())) {
  798. if (!exists(children, user)) {
  799. children.add(user);
  800. strIds.add(user.getId());
  801. }
  802. }
  803. }
  804. sysUser.setChildren(children);
  805. // children.sort((o1, o2) -> o1.getOrderNum().compareTo(o2.getOrderNum()));
  806. findChildren(children, users, strIds);
  807. }
  808. }
  809. private boolean exists(List<QuUserNum> quUserNums, SysArea sysArea) {
  810. boolean exist = true;
  811. for (QuUserNum quUserNum1 : quUserNums) {
  812. if (quUserNum1.getAreaName().equals(sysArea.getAreaCname())) {
  813. exist = false;
  814. break;
  815. }
  816. }
  817. return exist;
  818. }
  819. private boolean exists(List<SysUser> sysUsers, SysUser sysUser) {
  820. boolean exist = false;
  821. for (SysUser user : sysUsers) {
  822. if (user.getId().equals(sysUser.getId())) {
  823. exist = true;
  824. }
  825. }
  826. return exist;
  827. }
  828. /**
  829. * @version
  830. * @author: hxl
  831. * @Date: 2024/4/16 15:51
  832. * @Description: 获取待客录入的可选业务员
  833. * 查询
  834. */
  835. @Override
  836. public List<SysUserBaseVO> getAllUsersByHospitality(SysUserVOExt sysUserVOExt) {
  837. return super.baseMapper.getAllUsersByHospitality(sysUserVOExt);
  838. }
  839. }