SysUserServiceImpl.java 37 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019
  1. package com.ydtech.modules.admin.service.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
  6. import com.baomidou.mybatisplus.core.metadata.IPage;
  7. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  8. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  9. import com.ydtech.constants.SysConstants;
  10. import com.ydtech.core.page.HttpResult;
  11. import com.ydtech.core.page.PageResult;
  12. import com.ydtech.exception.SystemException;
  13. import com.ydtech.modules.admin.constants.RoleConstants;
  14. import com.ydtech.modules.admin.dao.SysUserMapper;
  15. import com.ydtech.modules.admin.model.*;
  16. import com.ydtech.modules.admin.model.dto.QuTeamNumDto;
  17. import com.ydtech.modules.admin.model.dto.QuUserNumDto;
  18. import com.ydtech.modules.admin.model.dto.SysUserDto;
  19. import com.ydtech.modules.admin.model.vo.*;
  20. import com.ydtech.modules.admin.service.*;
  21. import com.ydtech.modules.base.model.dto.PageDto;
  22. import com.ydtech.modules.base.model.vo.PageVo;
  23. import com.ydtech.modules.esm.model.EsmUserImage;
  24. import com.ydtech.modules.esm.model.EsmUserReferrer;
  25. import com.ydtech.modules.esm.model.vo.EsmUserImageVo;
  26. import com.ydtech.modules.esm.service.EsmUserImageService;
  27. import com.ydtech.modules.esm.service.EsmUserReferrerService;
  28. import com.ydtech.security.utils.PasswordUtils;
  29. import com.ydtech.utils.StringUtils;
  30. import com.ydtech.utils.idgen.IdGenerate;
  31. import org.springframework.beans.factory.annotation.Autowired;
  32. import org.springframework.stereotype.Service;
  33. import org.springframework.transaction.annotation.Transactional;
  34. import java.math.BigDecimal;
  35. import java.util.*;
  36. import java.util.stream.Collectors;
  37. @Service
  38. public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements SysUserService {
  39. @Autowired
  40. private SysMenuService sysMenuService;
  41. @Autowired
  42. private SysRoleMenuService sysRoleMenuService;
  43. @Autowired
  44. private SysDeptService sysDeptService;
  45. @Autowired
  46. private SysUserMapper sysUserMapper;
  47. @Autowired
  48. private SysUserRoleService sysUserRoleService;
  49. @Autowired
  50. private EsmUserReferrerService esmUserReferrerService;
  51. @Autowired
  52. private SysUserInfoService sysUserInfoService;
  53. @Autowired
  54. private EsmUserImageService esmUserImageService;
  55. @Autowired
  56. private SysAreaService sysAreaService;
  57. @Override
  58. public IPage<SysUserBaseVO> findUserList(PageDto<SysUserDto> pageDto) {
  59. PageVo<SysUserBaseVO> pageVo = new PageVo();
  60. Page page = new Page(pageDto.getPageNum(), pageDto.getPageSize());
  61. pageVo.setPageNum(pageDto.getPageNum());
  62. pageVo.setPageSize(pageDto.getPageSize());
  63. SysUserDto sysUserVO = JSONObject.parseObject(JSONObject.toJSONString(pageDto.getDto()), SysUserDto.class);
  64. if (sysUserVO.getAgentFlag() == null) {
  65. throw new SystemException("必传标识未传递");
  66. }
  67. IPage<SysUserBaseVO> userList = sysUserMapper.findUserList(page, sysUserVO);
  68. return userList;
  69. }
  70. @Override
  71. public IPage<SysUserBaseVO> findBackUserList(PageDto<SysUserDto> pageDto) {
  72. PageVo<SysUserBaseVO> pageVo = new PageVo();
  73. Page page = new Page(pageDto.getPageNum(), pageDto.getPageSize());
  74. pageVo.setPageNum(pageDto.getPageNum());
  75. pageVo.setPageSize(pageDto.getPageSize());
  76. SysUserDto sysUserVO = JSONObject.parseObject(JSONObject.toJSONString(pageDto.getDto()), SysUserDto.class);
  77. if (sysUserVO.getAgentFlag() == null) {
  78. throw new SystemException("必传标识未传递");
  79. }
  80. return sysUserMapper.findBackUserList(page, sysUserVO);
  81. }
  82. @Override
  83. public IPage<QuTeamNum> quTeamNum(QuTeamNumDto quTeamNumDto) {
  84. //判断必传标识是否为空
  85. if (quTeamNumDto.getTeamOrUserFlag() == null) {
  86. throw new SystemException("必传参数未传");
  87. }
  88. //判断是要查询用户还是团队
  89. if ("1".equals(quTeamNumDto.getTeamOrUserFlag())) {
  90. List<QuTeamNum> dept = sysUserMapper.getDept(quTeamNumDto);
  91. return getQuTeamNumIPage(quTeamNumDto, dept);
  92. } else if ("2".equals(quTeamNumDto.getTeamOrUserFlag())) {
  93. List<QuTeamNum> dept = sysUserMapper.getUser(quTeamNumDto);
  94. return getQuTeamNumIPage(quTeamNumDto, dept);
  95. }
  96. throw new SystemException("参数错误");
  97. }
  98. @Override
  99. public IPage<QuTeamNum> getQuTeamByCompany(QuTeamNumDto quTeamNumDto) {
  100. List<QuTeamNum> deptByCompany = sysUserMapper.getDeptByCompany(quTeamNumDto);
  101. IPage<QuTeamNum> page = new Page<>(quTeamNumDto.getPageNo(), quTeamNumDto.getPageSize());
  102. page.setRecords(deptByCompany);
  103. page.setTotal(deptByCompany.size());
  104. return page;
  105. }
  106. private IPage<QuTeamNum> getQuTeamNumIPage(QuTeamNumDto quTeamNumDto, List<QuTeamNum> dept) {
  107. Map<String, List<QuTeamNum>> collect = new HashMap<>();
  108. int flag;
  109. if (quTeamNumDto.getTeamOrUserFlag().equals("1")) {
  110. collect = dept.stream()
  111. .collect(Collectors.groupingBy(QuTeamNum::getDeptId));
  112. flag = 1;
  113. } else if ("2".equals(quTeamNumDto.getTeamOrUserFlag())) {
  114. collect = dept.stream()
  115. .collect(Collectors.groupingBy(QuTeamNum::getUserId));
  116. flag = 2;
  117. } else {
  118. flag = 0;
  119. }
  120. List<QuTeamNum> quTeamNums = new ArrayList<>();
  121. collect.forEach((k, v) -> {
  122. QuTeamNum teamNum = new QuTeamNum();
  123. teamNum.setHasInsuredNum("0");
  124. teamNum.setSubmitNum("0");
  125. teamNum.setSyPremiumSum("0");
  126. teamNum.setJqPremiumSum("0");
  127. teamNum.setTaxaMountSum("0");
  128. teamNum.setTotalSumpremium("0");
  129. teamNum.setQuoteNum("0");
  130. if (!v.isEmpty()) {
  131. v.forEach(quTeamNum -> {
  132. if (quTeamNum.getOrderStatus() != null) {
  133. if (quTeamNum.getOrderStatus().equals("3")) {
  134. if (quTeamNum.getJqPremiumSum() == null) {
  135. quTeamNum.setJqPremiumSum("0");
  136. }
  137. if (quTeamNum.getSyPremiumSum() == null) {
  138. quTeamNum.setSyPremiumSum("0");
  139. }
  140. //添加总额
  141. teamNum.setTotalSumpremium(String.valueOf(new BigDecimal(teamNum.getTotalSumpremium())
  142. .add(new BigDecimal(quTeamNum.getSyPremiumSum())).add(new BigDecimal(quTeamNum.getJqPremiumSum()))));
  143. teamNum.setSyPremiumSum(String.valueOf(new BigDecimal(teamNum.getSyPremiumSum()).add(new BigDecimal(quTeamNum.getSyPremiumSum()))));
  144. teamNum.setJqPremiumSum(String.valueOf(new BigDecimal(teamNum.getJqPremiumSum()).add(new BigDecimal(quTeamNum.getJqPremiumSum()))));
  145. teamNum.setQuoteNum(String.valueOf(new BigDecimal(teamNum.getQuoteNum()).add(new BigDecimal(quTeamNum.getCount()))));
  146. teamNum.setHasInsuredNum(String.valueOf(new BigDecimal(teamNum.getHasInsuredNum()).add(new BigDecimal(quTeamNum.getCount()))));
  147. teamNum.setTaxaMountSum(String.valueOf(new BigDecimal(quTeamNum.getTaxaMountSum())));
  148. }
  149. if (quTeamNum.getOrderStatus().equals("2")) {
  150. teamNum.setSubmitNum(String.valueOf(new BigDecimal(teamNum.getSubmitNum()).add(new BigDecimal(quTeamNum.getCount()))));
  151. teamNum.setQuoteNum(String.valueOf(new BigDecimal(teamNum.getQuoteNum()).add(new BigDecimal(quTeamNum.getCount()))));
  152. }
  153. if (quTeamNum.getOrderStatus().equals("1")) {
  154. teamNum.setQuoteNum(String.valueOf(new BigDecimal(teamNum.getQuoteNum()).add(new BigDecimal(quTeamNum.getCount()))));
  155. teamNum.setSubmitNum(String.valueOf(new BigDecimal(teamNum.getSubmitNum()).add(new BigDecimal(quTeamNum.getCount()))));
  156. }
  157. }
  158. });
  159. }
  160. if (flag == 1) {
  161. teamNum.setDeptId(v.get(0).getDeptId());
  162. teamNum.setDeptName(v.get(0).getDeptName());
  163. } else if (flag == 2) {
  164. teamNum.setUserId(v.get(0).getUserId());
  165. teamNum.setUserName(v.get(0).getUserName());
  166. }
  167. quTeamNums.add(teamNum);
  168. });
  169. List<QuTeamNum> collect1 =
  170. quTeamNums.stream().skip((quTeamNumDto.getPageNo() - 1) * quTeamNumDto.getPageSize()).limit(quTeamNumDto.getPageSize()).
  171. collect(Collectors.toList());
  172. IPage<QuTeamNum> page = new Page<>(quTeamNumDto.getPageNo(), quTeamNumDto.getPageSize());
  173. page.setRecords(collect1);
  174. page.setTotal(quTeamNums.size());
  175. return page;
  176. }
  177. @Override
  178. public SysUser findByUsername(String username) {
  179. SysUser sysUser = null;
  180. if (StringUtils.isNotEmpty(username)) {
  181. sysUser = getById(username);
  182. }
  183. return sysUser;
  184. }
  185. @Override
  186. public SysUser findByPhone(String phone) {
  187. SysUser sysUser = null;
  188. LambdaQueryWrapper<SysUser> lqw = new LambdaQueryWrapper<>();
  189. lqw.eq(StringUtils.isNotEmpty(phone), SysUser::getMobile, phone);
  190. List<SysUser> lst = list(lqw);
  191. if (lst.size() > 0) {
  192. sysUser = lst.get(0);
  193. }
  194. return sysUser;
  195. }
  196. @Override
  197. public Set<String> findPermissions(SysUser sysUser) {
  198. Set<String> perms = new HashSet<>();
  199. String sql = "";
  200. List<String> lsPerms = null;
  201. if (sysUser.getId().equalsIgnoreCase("admin")) {
  202. LambdaQueryWrapper<SysMenu> lqw = new LambdaQueryWrapper<>();
  203. lqw.isNotNull(SysMenu::getPerms);
  204. lqw.select(SysMenu::getPerms);
  205. lsPerms = sysMenuService.listObjs(lqw, id -> id.toString());
  206. } else {
  207. List<SysMenu> sysMenuList = sysRoleMenuService.gainMenuIds(sysUser.getId());
  208. lsPerms =
  209. sysMenuList.stream().filter(a -> StringUtils.isNotEmpty(a.getPerms())).map(SysMenu::getPerms).collect(Collectors.toList());
  210. }
  211. if (lsPerms != null && lsPerms.size() > 0) {
  212. for (String perm : lsPerms) {
  213. if (!StringUtils.isNullOrEmpty(perm)) {
  214. perms.add(perm);
  215. }
  216. }
  217. }
  218. return perms;
  219. }
  220. // @Override
  221. // public Set<String> findPermissions(SysUser sysUser) {
  222. // Set<String> perms = new HashSet<>();
  223. // String sql = "";
  224. // JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
  225. // List<String> lsPerms = null;
  226. //
  227. // if (sysUser.getId().equalsIgnoreCase("admin")) {
  228. // sql = "SELECT perms FROM sys_menu WHERE perms IS NOT NULL AND perms <> ''";
  229. //
  230. // lsPerms = jdbcTemplate.queryForList(sql, String.class);
  231. // } else {
  232. // sql = "SELECT perms FROM sys_menu sm WHERE sm.id IN ( " +
  233. // "SELECT menu_id FROM sys_role_menu srm, sys_user_role sur ,sys_user su " +
  234. // "WHERE srm.role_id=sur.role_id " +
  235. // "AND sur.user_id=su.id AND su.id=?) " +
  236. // "AND perms IS NOT NULL AND perms <> ''"
  237. // ;
  238. //
  239. // lsPerms = jdbcTemplate.queryForList(sql, String.class, sysUser.getId());
  240. // }
  241. //
  242. // if (lsPerms != null && lsPerms.size() > 0) {
  243. // for (String perm : lsPerms) {
  244. // if (!StringUtils.isNullOrEmpty(perm)) {
  245. // perms.add(perm);
  246. // }
  247. // }
  248. // }
  249. //
  250. // return perms;
  251. // }
  252. @Override
  253. public List<SysUserRole> findUserRoles(Long userId) {
  254. return null;
  255. }
  256. @Override
  257. public PageResult selectPagingCustom(int pageNumber, int pageSize, String name, String deptCode) {
  258. return null;
  259. }
  260. /**
  261. * 获取用户列表
  262. *
  263. * @param page 分页信息
  264. * @param sysUser 查询条件
  265. * @param containsSubDept 是否汉堡下级机构
  266. * @return
  267. */
  268. @Override
  269. public IPage<SysUser> selectUserPage(Page page, SysUser sysUser, String containsSubDept) {
  270. return baseMapper.selectUserPage(page, sysUser, containsSubDept);
  271. }
  272. @Override
  273. public void findSysUseresmUserInternalVORoles(PageResult pageResult) {
  274. }
  275. @Override
  276. public Integer deleteFlag(List<SysUser> lsSysUser) {
  277. List<String> ids = lsSysUser.stream().map(SysUser::getId).collect(Collectors.toList());
  278. LambdaUpdateWrapper<SysUser> lqw = new LambdaUpdateWrapper<>();
  279. lqw.set(SysUser::getStatus, "0");
  280. lqw.in(SysUser::getId, ids);
  281. return update(lqw) == true ? ids.size() : 0;
  282. }
  283. @Override
  284. public SysUser findById(String id) {
  285. if (!StringUtils.isNullOrEmpty(id)) {
  286. return getById(id);
  287. }
  288. return null;
  289. }
  290. @Override
  291. public SysUser findByUserId(String userId) {
  292. SysUser sysUser = null;
  293. if (!StringUtils.isNullOrEmpty(userId)) {
  294. sysUser = getById(userId);
  295. }
  296. return sysUser;
  297. }
  298. @Override
  299. public SysUserVO gainUserInternal(String userId) {
  300. return super.baseMapper.gainInternalUser(userId);
  301. }
  302. @Override
  303. public SysUserVO gainUserInternalByDeptId(String deptId) {
  304. return super.baseMapper.gainInternalUserByDeptId(deptId);
  305. }
  306. @Override
  307. public List<SysUserVO> findByReferrerId(String deptId) {
  308. return super.baseMapper.findByReferrerId(deptId);
  309. }
  310. @Override
  311. public List<SysUserVO> findListByDeptId(SysUser sysUser) {
  312. return super.baseMapper.findListByDeptId(sysUser);
  313. }
  314. @Override
  315. public PageVo gainUserPage(PageDto pageDto) {
  316. PageVo<SysUserBaseVO> pageVo = new PageVo();
  317. Page page = new Page(pageDto.getPageNum(), pageDto.getPageSize());
  318. pageVo.setPageNum(pageDto.getPageNum());
  319. pageVo.setPageSize(pageDto.getPageSize());
  320. SysUserDto sysUserVO = JSONObject.parseObject(JSONObject.toJSONString(pageDto.getDto()), SysUserDto.class);
  321. Page<SysUserBaseVO> sysUserBaseVOIPage = super.baseMapper.gainUserBaseInfo(page, sysUserVO);
  322. pageVo.setContent(sysUserBaseVOIPage.getRecords());
  323. pageVo.setTotalPages((int) sysUserBaseVOIPage.getPages());
  324. pageVo.setTotalSize((int) sysUserBaseVOIPage.getTotal());
  325. return pageVo;
  326. }
  327. @Override
  328. public String gainNextUserId(String deptId) {
  329. int noCount = 3;//顺序号是几位的
  330. String nextPK;
  331. QueryWrapper<SysUser> lq = new QueryWrapper<>();
  332. lq.select(" MAX(id) as id ");
  333. lq.eq("dept_id", deptId);
  334. // lq.likeRight("id", deptId);
  335. SysUser userMaxId = getOne(lq);
  336. String maxId = "";
  337. if (null != userMaxId) maxId = userMaxId.getId();
  338. if (StringUtils.isNullOrEmpty(maxId)) {
  339. nextPK = deptId + "001";
  340. } else {
  341. nextPK = IdGenerate.nextCode(maxId, noCount);
  342. }
  343. return nextPK;
  344. }
  345. @Override
  346. public SysUserInternalVO gainUserSynthesisInfo(String userId) {
  347. SysUserInternalVO vo = new SysUserInternalVO();
  348. SysUser sysUser = getById(userId);
  349. // EsmUserInternal sysUserInternal = esmUserInternalService.selectByPk(userId);
  350. String pDeptId = sysUser.getDeptId();
  351. if (pDeptId.indexOf("D") > 1) {
  352. pDeptId = sysUser.getDeptId().substring(0, pDeptId.indexOf("D"));
  353. }
  354. SysDept sysDept = sysDeptService.getById(pDeptId);
  355. vo.setSysUser(sysUser);
  356. vo.setSysDept(sysDept);
  357. // vo.setSysUserInternal(sysUserInternal);
  358. return vo;
  359. }
  360. @Override
  361. public String findMaxId(String deptId) {
  362. QueryWrapper<SysUser> qw = new QueryWrapper<>();
  363. qw.select("IFNULL(MAX(id),0) maxId");
  364. qw.eq("dept_id", deptId);
  365. Map<String, Object> m = getMap(qw);
  366. String maxId = m.get("maxId").toString();
  367. return maxId;
  368. }
  369. @Override
  370. public boolean check(String userId, Integer approvalStatus, String approvalOpinion) {
  371. SysUser user = getById(userId);
  372. // user.setApprovalStatus(approvalStatus);
  373. user.setApprovalOpinion(approvalOpinion);
  374. return updateById(user);
  375. }
  376. @Override
  377. public SysUserBaseVO selectUserById(String userId) {
  378. return sysUserMapper.selectUserById(userId);
  379. }
  380. @Override
  381. @Transactional
  382. public boolean saveUser(SysUser sysUser) {
  383. // 判断用户id是否存在
  384. if (StringUtils.isNullOrEmpty(sysUser.getId())) {
  385. sysUser.setId(gainNextUserId(sysUser.getDeptId()));
  386. sysUser.setMobile(sysUser.getMobile());
  387. }
  388. // 角色信息
  389. SysUserRole sur = new SysUserRole();
  390. sur.setUserId(sysUser.getId());
  391. sur.setRoleId(StringUtils.toLong(sysUser.getRoleId()));
  392. // 删除角色
  393. sysUserRoleService.deleteByUserId(sysUser.getId());
  394. // 删除推荐人
  395. esmUserReferrerService.deldeleteByReferrerId(sysUser.getId());
  396. // 构建推荐人信息
  397. EsmUserReferrer eur = new EsmUserReferrer();
  398. eur.setId(sysUser.getId());
  399. eur.setReferrerId(sysUser.getReferrerId());//推荐人
  400. eur.setReferrerName(sysUser.getReferrerName());
  401. // 新增或跟新用户表
  402. save(sysUser);
  403. // 保存推荐人
  404. esmUserReferrerService.save(eur);
  405. // 保存角色
  406. sysUserRoleService.save(sur);
  407. return true;
  408. }
  409. @Override
  410. @Transactional
  411. public HttpResult saveUserInfo(SysUser2Vo sysUserVo) {
  412. SysUser sysUser = sysUserVo.getSysUser();
  413. // 手机号
  414. List<SysUser> mobileList = lambdaQuery().eq(SysUser::getMobile, sysUser.getMobile()).list();
  415. if (!mobileList.isEmpty()) {
  416. throw new SystemException("手机号已经注册请跟换手机号。");
  417. }
  418. // 身份证号
  419. List<SysUser> identityList = lambdaQuery().eq(SysUser::getIdentity, sysUser.getIdentity()).list();
  420. if (!identityList.isEmpty()) {
  421. throw new SystemException("身份证号已经注册请跟换身份证号。");
  422. }
  423. //处理密码
  424. if (StringUtils.isNotEmpty(sysUser.getPassword())) {
  425. String salt = PasswordUtils.getSalt();
  426. String pwd = PasswordUtils.encode(sysUser.getPassword(), salt);
  427. sysUser.setPassword(pwd);
  428. sysUser.setSalt(salt);
  429. } else {
  430. return HttpResult.error("密码不能为空");
  431. }
  432. if ("19".equals(sysUser.getRoleId())) {//19 出单员 校验机构和业务员机构是否一致
  433. return checkChuDanUser(sysUser);
  434. }
  435. String userId = gainNextUserId(sysUser.getDeptId());
  436. if (RoleConstants.R22.getCode().equals(sysUser.getRoleId())) {//22 后线人员
  437. if (!SysConstants.isAdministration(userId)) {
  438. throw new SystemException("后线人员只能公司部门中");
  439. }
  440. }
  441. sysUser.setId(userId);
  442. save(sysUser);
  443. //角色配置
  444. SysUserRole userRole = new SysUserRole();
  445. userRole.setUserId(sysUser.getId());
  446. userRole.setRoleId(StringUtils.toLong(sysUser.getRoleId()));
  447. sysUserRoleService.save(userRole);
  448. if (StringUtils.isNotEmpty(sysUser.getReferrerId())) {
  449. //推荐人
  450. esmUserReferrerService.addReferrer(sysUser.getReferrerId(), userId);
  451. } else if ("20".equals(sysUser.getRoleId()) || "21".equals(sysUser.getRoleId())) {
  452. //如果是 团队长或代码人 并且没有推荐人 则默认推荐人为自己
  453. esmUserReferrerService.addReferrer(sysUser.getId(), userId);
  454. }
  455. // EsmUserReferrer eur = new EsmUserReferrer();
  456. // eur.setId(sysUser.getId());
  457. // eur.setReferrerName(sysUser.getReferrerName());
  458. // eur.setReferrerId(sysUser.getReferrerId());
  459. // eur.setLevel(1);
  460. //
  461. // esmUserReferrerService.save(eur);
  462. SysUserInfo userInfo = sysUserVo.getSysUserInfo();
  463. if (userInfo != null) {
  464. userInfo.setId(sysUser.getId());
  465. }
  466. // userInfo.setId(sysUser.getId());
  467. sysUserInfoService.save(userInfo);
  468. List<EsmUserImageVo> esmUserImageVo = sysUserVo.getEsmUserImageVo();
  469. List<EsmUserImage> esmUserImages = esmUserImageVo.stream().map(x -> new EsmUserImage(x, userId)).collect(Collectors.toList());
  470. esmUserImageService.saveBatch(esmUserImages);
  471. return HttpResult.ok("新增成功");
  472. }
  473. /**
  474. * 新增修改出单员
  475. *
  476. * @param sysUser
  477. * @return
  478. */
  479. HttpResult checkChuDanUser(SysUser sysUser) {
  480. if (StringUtils.isEmpty(sysUser.getReferrerId())) {
  481. return HttpResult.error("业务员工号不能为空");
  482. }
  483. //归属业务员和出单员部门必须一致
  484. SysUser user = getById(sysUser.getReferrerId());
  485. if (user == null || !user.getDeptId().equals(sysUser.getDeptId())) {
  486. return HttpResult.error("出单员机构必须和归属业务员机构一致");
  487. }
  488. sysUser.setOperatorCode(sysUser.getReferrerId());
  489. if (StringUtils.isEmpty(sysUser.getId())) {
  490. String userId = gainNextUserId(sysUser.getDeptId());
  491. sysUser.setId(userId);
  492. save(sysUser);
  493. //角色配置
  494. SysUserRole userRole = new SysUserRole();
  495. userRole.setUserId(sysUser.getId());
  496. userRole.setRoleId(StringUtils.toLong(sysUser.getRoleId()));
  497. sysUserRoleService.save(userRole);
  498. } else {
  499. updateById(sysUser);
  500. }
  501. return HttpResult.ok("操作成功");
  502. }
  503. @Override
  504. @Transactional
  505. public HttpResult updateUserInfo(String userId, SysUser2Vo sysUserVo) {
  506. SysUser sysUser = sysUserVo.getSysUser();
  507. //修改用户不能修改密码
  508. if (StringUtils.isNotEmpty(sysUser.getPassword())) {
  509. String salt = PasswordUtils.getSalt();
  510. String pwd = PasswordUtils.encode(sysUser.getPassword(), salt);
  511. sysUser.setPassword(pwd);
  512. sysUser.setSalt(salt);
  513. } else {
  514. return HttpResult.error("密码不能为空");
  515. }
  516. //删除状态必须有离司时间
  517. if (StringUtils.isNotEmpty(sysUser.getStatus().toString())) {
  518. if (sysUser.getStatus() == 0 && sysUser.getLogoutTime() == null && !sysUser.getRoleId().equals("19")) {
  519. return HttpResult.error("删除状态,离职时间必填");
  520. }
  521. } else {
  522. return HttpResult.error("状态不能为空");
  523. }
  524. SysUser sysUser_org = findByUserId(sysUser.getId());
  525. sysUser.setPassword(sysUser_org.getPassword());
  526. sysUser.setSalt(sysUser_org.getSalt());
  527. if ("19".equals(sysUser.getRoleId())) {//19 出单员 校验机构和业务员机构是否一致
  528. return checkChuDanUser(sysUser);
  529. }
  530. updateById(sysUser);
  531. //角色配置
  532. SysUserRole sysUserRole = sysUserRoleService.selectByUserId(userId);
  533. sysUserRole.setRoleId(StringUtils.toLong(sysUser.getRoleId()));
  534. sysUserRole.setLastUpdateBy(sysUser.getCreateBy());
  535. sysUserRole.setLastUpdateTime(new Date());
  536. sysUserRoleService.updateById(sysUserRole);
  537. if (StringUtils.isNotEmpty(sysUser.getReferrerId())) {
  538. //推荐人
  539. esmUserReferrerService.addReferrer(sysUser.getReferrerId(), userId);
  540. }
  541. //用户详情信息
  542. SysUserInfo sysUserInfo = sysUserVo.getSysUserInfo();
  543. sysUserInfo.setId(userId);
  544. if (null == sysUserInfo.getRemark()) {
  545. sysUserInfo.setRemark("");
  546. }
  547. sysUserInfoService.saveOrUpdate(sysUserInfo);
  548. // 影像资料
  549. LambdaQueryWrapper<EsmUserImage> wrapper = new LambdaQueryWrapper<>();
  550. wrapper.eq(EsmUserImage::getUserId, userId);
  551. esmUserImageService.remove(wrapper);
  552. List<EsmUserImageVo> esmUserImageVo = sysUserVo.getEsmUserImageVo();
  553. List<EsmUserImage> esmUserImages = esmUserImageVo.stream().map(x -> new EsmUserImage(x, userId)).collect(Collectors.toList());
  554. esmUserImageService.saveBatch(esmUserImages);
  555. return HttpResult.ok("修改成功");
  556. }
  557. @Override
  558. public List<SysUser> findAllAgentRoleUser(String userId, String roleId) {
  559. return super.baseMapper.findAllAgentRoleUser(userId, roleId);
  560. }
  561. @Override
  562. public int getDeptLevel(SysUser2Vo sysUser2Vo) {
  563. //获取机构层级
  564. SysUser sysUser = sysUser2Vo.getSysUser();
  565. String deptId = sysUser.getDeptId();
  566. int level = 0;
  567. //1 2 3 4 5级 M 6级 D
  568. if (deptId.length() > 8) {
  569. String substring = deptId.substring(8);
  570. return substring.length() / 3 + 4;
  571. } else {
  572. level = deptId.length() / 2;
  573. }
  574. return level;
  575. }
  576. /**
  577. * 根据机构代码,查询所有人员
  578. *
  579. * @param deptId
  580. * @return
  581. */
  582. @Override
  583. public List<SysUser> findUserList(String deptId) {
  584. LambdaQueryWrapper<SysUser> lqw = new LambdaQueryWrapper<>();
  585. lqw.eq(SysUser::getStatus, "1");
  586. lqw.eq(SysUser::getDeptId, deptId);
  587. return list(lqw);
  588. }
  589. /**
  590. * 查找组织结构树,返回所有层级的用户列表,其中每个用户包含其直接下级用户。
  591. *
  592. * @return 返回组织结构树形式的用户列表,每个用户对象可能包含一个子用户列表。
  593. */
  594. @Override
  595. public List<SysUser> findTree() {
  596. //获取领导字段不为空的人的ID
  597. List<SysUser> users = lambdaQuery().isNotNull(SysUser::getLeaderId).list();
  598. if (users == null || users.size() == 0) {
  599. return new ArrayList<>();
  600. }
  601. List<SysUser> topUsers = new ArrayList<>(); //存放1级用户
  602. List<String> topUserId = users.stream().map(SysUser::getLeaderId).collect(Collectors.toList());
  603. List<SysUser> list2 = lambdaQuery().in(SysUser::getId, topUserId).list();
  604. // 从查询结果中筛选出没有上级的人员,作为组织结构树的顶层节点
  605. for (SysUser sysUser : list2) {
  606. if (Objects.isNull(sysUser.getLeaderId())) {
  607. topUsers.add(sysUser);
  608. }
  609. }
  610. // 递归构建用户树结构
  611. buildUserTree(topUsers, users);
  612. return topUsers;
  613. }
  614. /**
  615. * 根据部门ID查询后台用户列表。
  616. *
  617. * @param deptId 部门ID,用于筛选指定部门的用户。
  618. * @return 返回一个SysUser类型的列表,包含指定部门的所有后台用户。
  619. */
  620. @Override
  621. public List<SysUser> findBackListByDeptId(String deptId) {
  622. return baseMapper.findBackListByDeptId(deptId);
  623. }
  624. /**
  625. * 查询用户订单数量进行区域统计信息
  626. *
  627. * @param quUserNumDto 包含查询条件和分页信息的数据传输对象
  628. * @return IPage<QuUserNum> 返回用户数量统计信息的分页对象
  629. */
  630. @Override
  631. public IPage<QuUserNum> quUserNum(QuUserNumDto quUserNumDto) {
  632. //获取所有用户
  633. List<SysUser> users = list();
  634. // 根据用户ID查询一级下屬
  635. LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
  636. queryWrapper.eq(SysUser::getId, quUserNumDto.getUserId());
  637. List<SysUser> usersLevel1 = list(queryWrapper);
  638. //递归获取1级下属下所有的下属ID
  639. List<String> strIds = new ArrayList<>();
  640. findChildren(usersLevel1, users, strIds);
  641. // 根据区域编码和级别查询符合条件的区域
  642. LambdaQueryWrapper<SysArea> wrapper = new LambdaQueryWrapper<>();
  643. if (quUserNumDto.getAreaCode() != null && !"".equals(quUserNumDto.getAreaCode())) {
  644. String area = quUserNumDto.getAreaCode();
  645. switch (quUserNumDto.getLevel()) {
  646. case "1": { // 省级查询逻辑
  647. quUserNumDto.setGrouping(4);
  648. String prefix = area.substring(0, 2);
  649. strIds.removeIf(id -> !id.contains("99" + prefix));
  650. quUserNumDto.setLevel("2");
  651. wrapper.eq(SysArea::getLevel, "2");
  652. wrapper.likeRight(SysArea::getAreaCode, prefix);
  653. break;
  654. }
  655. case "2": { // 市级查询逻辑
  656. quUserNumDto.setGrouping(6);
  657. String prefix = area.substring(0, 4);
  658. strIds.removeIf(id -> !id.contains("99" + prefix));
  659. quUserNumDto.setLevel("3");
  660. wrapper.eq(SysArea::getLevel, "3");
  661. wrapper.likeRight(SysArea::getAreaCode, prefix);
  662. break;
  663. }
  664. case "3": { // 区县级查询逻辑
  665. quUserNumDto.setGrouping(6);
  666. String prefix = area.substring(0, 6);
  667. strIds.removeIf(id -> !id.contains("99" + prefix));
  668. quUserNumDto.setLevel("3");
  669. wrapper.eq(SysArea::getLevel, "3");
  670. wrapper.likeRight(SysArea::getAreaCode, prefix);
  671. break;
  672. }
  673. }
  674. } else { // 默认查询省级区域
  675. quUserNumDto.setGrouping(2);
  676. quUserNumDto.setLevel("1");
  677. wrapper.eq(SysArea::getLevel, "1");
  678. }
  679. //遍历匹配区域名称
  680. List<SysArea> areaList = sysAreaService.list(wrapper);
  681. List<QuUserNum> quUserNums = new ArrayList<>();
  682. // 如果没有查询到用户ID,则直接返回空的分页对象
  683. if (strIds.size() != 0) {
  684. // 根据查询条件获取用户数量统计信息
  685. quUserNumDto.setUserIds(strIds);
  686. List<QuUserNum> userNums = sysUserMapper.getUserNum(quUserNumDto);
  687. // 根据区域名称匹配用户数量统计信息,并构造最终返回的结果列表
  688. for (QuUserNum quUserNum : userNums) {
  689. for (SysArea sysArea : areaList) {
  690. if (!Objects.isNull(sysArea.getAreaCode())) {
  691. // 匹配区域名称
  692. String substring = sysArea.getAreaCode().substring(0, quUserNumDto.getGrouping());
  693. if (quUserNum.getAreaCode().equals(substring)) {
  694. quUserNum.setAreaName(sysArea.getAreaCname());
  695. quUserNums.add(quUserNum);
  696. }
  697. }
  698. }
  699. }
  700. }
  701. // 为每个区域生成未匹配到的统计信息
  702. for (SysArea sysArea : areaList) {
  703. if (exists(quUserNums, sysArea)) {
  704. QuUserNum userNum = new QuUserNum();
  705. // 设置未匹配到的区域的默认统计信
  706. userNum.setAreaName(sysArea.getAreaCname());
  707. userNum.setQuoteNum("0");
  708. userNum.setSubmitNum("0");
  709. userNum.setHasInsuredNum("0");
  710. userNum.setTotalSumpremium("0");
  711. userNum.setJqPremiumSum("0");
  712. userNum.setSyPremiumSum("0");
  713. userNum.setTaxaMountSum("0");
  714. quUserNums.add(userNum);
  715. }
  716. }
  717. List<QuUserNum> paginate = paginate(quUserNums, quUserNumDto.getPageNum(), quUserNumDto.getPageSize());
  718. // 构造返回的分页对象
  719. IPage<QuUserNum> recordsPage = new Page<>(quUserNumDto.getPageNum(), quUserNumDto.getPageSize());
  720. recordsPage.setRecords(paginate);
  721. recordsPage.setTotal(quUserNums.size());
  722. return recordsPage;
  723. }
  724. /**
  725. * 查询用户订单数量进行区域统计详细信息
  726. *
  727. * @param quUserNumDto 包含查询条件和分页信息的数据传输对象
  728. * @return IPage<QuUserNum> 返回用户数量统计信息的分页对象
  729. */
  730. @Override
  731. public IPage<QuUserNum> getQuUserByCompany(QuUserNumDto quUserNumDto) {
  732. // 获取系统中的所有用户
  733. List<SysUser> users = list();
  734. // 创建查询包装器,用于查询指定用户ID的用
  735. LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();
  736. queryWrapper.eq(SysUser::getId, quUserNumDto.getUserId());
  737. // 查询指定用户ID的用户,即第一级下属
  738. List<SysUser> usersLevel1 = list(queryWrapper);
  739. // 用于存储所有下属的ID
  740. List<String> strIds = new ArrayList<>();
  741. // 递归获取第一级下属及其所有下属的ID
  742. findChildren(usersLevel1, users, strIds);
  743. // 如果未指定区域码,返回空分页对
  744. if (Objects.isNull(quUserNumDto.getAreaCode())) {
  745. return new Page<>();
  746. }
  747. // 根据区域码筛选有效的下属ID
  748. strIds.removeIf(id -> !id.contains("99" + quUserNumDto.getAreaCode()));
  749. // 如果筛选后没有有效的下属ID,返回空分页对象
  750. if (strIds.size() == 0) {
  751. return new Page<>();
  752. }
  753. // 设置查询条件中的用户ID列表
  754. quUserNumDto.setUserIds(strIds);
  755. // 根据公司和用户ID列表查询用户数量统计信息
  756. List<QuUserNum> deptByCompany = sysUserMapper.getUserByCompany(quUserNumDto);
  757. List<QuUserNum> paginate = paginate(deptByCompany, quUserNumDto.getPageNum(), quUserNumDto.getPageSize());
  758. // 创建并设置分页信息
  759. IPage<QuUserNum> page = new Page<>(quUserNumDto.getPageNum(), quUserNumDto.getPageSize());
  760. page.setRecords(paginate);
  761. page.setTotal(deptByCompany.size());
  762. return page;
  763. }
  764. /**
  765. * 手动对 QuUserNum 列表进行分页
  766. *
  767. * @param quUserNums 原始 QuUserNum 数据列表
  768. * @param pageNum 期望获取的页码(从 1 开始)
  769. * @param pageSize 每页包含的 QuUserNum 数量
  770. * @return 对应页码的 QuUserNum 子列表,若输入参数无效则返回空列表
  771. */
  772. public List<QuUserNum> paginate(List<QuUserNum> quUserNums, int pageNum, int pageSize) {
  773. if (quUserNums == null || quUserNums.isEmpty() || pageNum < 1 || pageSize < 1) {
  774. return Collections.emptyList();
  775. }
  776. int startIndex = (pageNum - 1) * pageSize;
  777. int endIndex = Math.min(startIndex + pageSize, quUserNums.size());
  778. return quUserNums.subList(startIndex, endIndex);
  779. }
  780. private void findChildren(List<SysUser> SysUsers, List<SysUser> users, List<String> strIds) {
  781. for (SysUser sysUser : SysUsers) {
  782. List<SysUser> children = new ArrayList<>();
  783. for (SysUser user : users) {
  784. if (sysUser.getId() != null && sysUser.getId().equals(user.getLeaderId())) {
  785. if (!exists(children, user)) {
  786. children.add(user);
  787. strIds.add(user.getId());
  788. }
  789. }
  790. }
  791. sysUser.setChildren(children);
  792. // children.sort((o1, o2) -> o1.getOrderNum().compareTo(o2.getOrderNum()));
  793. findChildren(children, users, strIds);
  794. }
  795. }
  796. private boolean exists(List<QuUserNum> quUserNums, SysArea sysArea) {
  797. boolean exist = true;
  798. for (QuUserNum quUserNum1 : quUserNums) {
  799. if (quUserNum1.getAreaName().equals(sysArea.getAreaCname())) {
  800. exist = false;
  801. break;
  802. }
  803. }
  804. return exist;
  805. }
  806. private boolean exists(List<SysUser> sysUsers, SysUser sysUser) {
  807. boolean exist = false;
  808. for (SysUser user : sysUsers) {
  809. if (user.getId().equals(sysUser.getId())) {
  810. exist = true;
  811. }
  812. }
  813. return exist;
  814. }
  815. private void buildUserTree(List<SysUser> topUsers, List<SysUser> users) {
  816. for (SysUser user : topUsers) {
  817. List<SysUser> children = new ArrayList<>();
  818. for (SysUser childUser : users) {
  819. if (user.getId().equals(childUser.getLeaderId()) && !childUser.getId().contains("M")) {
  820. children.add(childUser);
  821. // 递归查找下一级
  822. buildUserTree(children, users);
  823. }
  824. }
  825. user.setChildren(children);
  826. }
  827. }
  828. /**
  829. * @version
  830. * @author: hxl
  831. * @Date: 2024/4/16 15:51
  832. * @Description: 获取待客录入的可选业务员
  833. * 查询
  834. */
  835. @Override
  836. public List<SysUserBaseVO> getAllUsersByHospitality(SysUserVOExt sysUserVOExt) {
  837. if(StringUtils.isNotEmpty(sysUserVOExt.getUserId()) || StringUtils.isNotEmpty(sysUserVOExt.getIdentity()) ||
  838. StringUtils.isNotEmpty(sysUserVOExt.getMobile()) || StringUtils.isNotEmpty(sysUserVOExt.getName())){
  839. return super.baseMapper.getAllUsersByHospitality(sysUserVOExt);
  840. }
  841. return new ArrayList<SysUserBaseVO>();
  842. }
  843. /**
  844. * @version
  845. * @author: hxl
  846. * @Date: 2024/4/18 16:14
  847. * @Description: 获取客服人员列表数据
  848. */
  849. @Override
  850. public List<SysUserBaseVO> getCustomerUsers() {
  851. return super.baseMapper.getCustomerUsers(new SysUserVOExt());
  852. }
  853. }