SysUserServiceImpl.java 57 KB

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