SysUserServiceImpl.java 69 KB

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