SysUserServiceImpl.java 59 KB

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