SysUserServiceImpl.java 63 KB

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