SysUserServiceImpl.java 66 KB

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