SysUserServiceImpl.java 52 KB

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