EsmUserReferrerServiceImpl.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482
  1. package com.ydtech.modules.esm.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  4. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  5. import com.github.pagehelper.PageHelper;
  6. import com.ydtech.core.page.HttpResult;
  7. import com.ydtech.core.page.PageResult;
  8. import com.ydtech.exception.SystemException;
  9. import com.ydtech.modules.admin.model.SysUser;
  10. import com.ydtech.modules.admin.model.dto.SysUserDto;
  11. import com.ydtech.modules.admin.model.dto.SysUserTeamDto;
  12. import com.ydtech.modules.admin.model.vo.AppCustomerManagementQueryVo;
  13. import com.ydtech.modules.admin.model.vo.SysReferrerVo;
  14. import com.ydtech.modules.admin.service.SysUserService;
  15. import com.ydtech.modules.base.model.dto.PageDto;
  16. import com.ydtech.modules.base.model.vo.PageVo;
  17. import com.ydtech.modules.esm.dao.EsmUserReferrerMapper;
  18. import com.ydtech.modules.esm.model.EsmUserReferrer;
  19. import com.ydtech.modules.esm.model.QueryChannel;
  20. import com.ydtech.modules.esm.model.vo.*;
  21. import com.ydtech.modules.esm.service.EsmUserReferrerService;
  22. import com.ydtech.modules.order.entity.BasePageResult;
  23. import com.ydtech.utils.StringUtils;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.jdbc.core.JdbcTemplate;
  26. import org.springframework.jdbc.core.RowCallbackHandler;
  27. import org.springframework.stereotype.Service;
  28. import javax.sql.DataSource;
  29. import java.sql.ResultSet;
  30. import java.sql.SQLException;
  31. import java.util.ArrayList;
  32. import java.util.HashMap;
  33. import java.util.List;
  34. import java.util.Map;
  35. @Service
  36. public class EsmUserReferrerServiceImpl extends ServiceImpl<EsmUserReferrerMapper, EsmUserReferrer>
  37. implements EsmUserReferrerService {
  38. @Autowired
  39. public DataSource dataSource;
  40. @Autowired
  41. private SysUserService sysUserService;
  42. @Autowired
  43. private EsmUserReferrerService esmUserReferrerService;
  44. // 递归查找节点的所有父级节点
  45. public List<EsmUserReferrer> findParents(String userId) {
  46. List<EsmUserReferrer> referrers = new ArrayList<>();
  47. EsmUserReferrer esmUserReferrer = esmUserReferrerService.getById(userId);
  48. //找不到用户的推荐关系
  49. if (esmUserReferrer == null) {
  50. return null;
  51. }
  52. List<EsmUserReferrer> esmUserReferrers =
  53. esmUserReferrerService.list(new LambdaQueryWrapper<EsmUserReferrer>()
  54. .eq(EsmUserReferrer::getAffiliation, esmUserReferrer.getAffiliation())
  55. .ne(EsmUserReferrer::getId, esmUserReferrer.getId()));
  56. findParentsRecursive(esmUserReferrer.getReferrerId(), esmUserReferrers, referrers);
  57. return referrers;
  58. }
  59. private static void findParentsRecursive(String userId, List<EsmUserReferrer> esmUserReferrers, List<EsmUserReferrer> referrers) {
  60. if(esmUserReferrers.isEmpty())
  61. return;
  62. EsmUserReferrer collect = esmUserReferrers.stream().filter(item -> item.getId().equals(userId)).findFirst()
  63. .orElse(null);
  64. if (collect != null) {
  65. if (collect.getId().equals(collect.getReferrerId())) {
  66. referrers.add(collect);
  67. } else {
  68. referrers.add(collect);
  69. findParentsRecursive(collect.getReferrerId(), esmUserReferrers, referrers);
  70. }
  71. }
  72. }
  73. @Override
  74. public Map buildLevelInfo(SysUser agent) {
  75. Map m = new HashMap();
  76. LambdaQueryWrapper<EsmUserReferrer> lqw = new LambdaQueryWrapper<>();
  77. lqw.eq(EsmUserReferrer::getReferrerId, agent.getId());
  78. lqw.ne(EsmUserReferrer::getId, agent.getId());
  79. List<EsmUserReferrer> listAll = esmUserReferrerService.list(lqw);
  80. List<SysUser> oneList = new ArrayList<>();
  81. List<SysUser> oneTempList = new ArrayList<>();
  82. listAll.forEach(a -> {
  83. SysUser sysUser = sysUserService.getById(a.getId());
  84. if (sysUser.getStatus() == 1) {
  85. oneList.add(sysUser);
  86. } else {
  87. oneTempList.add(sysUser);
  88. }
  89. });
  90. m.put("list1", oneList);
  91. m.put("list2", oneTempList);
  92. return m;
  93. }
  94. @Override
  95. public void buildLevelList(SysUser user, List<SysUser> oneList, List<SysUser> oneTempList) {
  96. Map<String, List<SysUser>> oneMap = buildLevelInfo(user);
  97. oneList.addAll(oneMap.get("list1"));
  98. oneTempList.addAll(oneMap.get("list2"));
  99. }
  100. @Override
  101. public void addReferrer(String referrerId, String nextPK) {
  102. //if(referrerId.equals(nextPK)) throw new SystemException("推荐人不能是自己");
  103. //推荐人信息
  104. EsmUserReferrer referrer = getById(referrerId);
  105. EsmUserReferrer eur = new EsmUserReferrer();
  106. if (null == referrer) {
  107. //推荐人是团队长的时候,先固定队长是首级
  108. eur.setId(referrerId);
  109. eur.setLevel(0);
  110. eur.setAffiliation(referrerId);
  111. SysUser user = sysUserService.getById(referrerId);
  112. eur.setReferrerId(referrerId);
  113. eur.setReferrerName(user.getName());
  114. esmUserReferrerService.save(eur);
  115. //查询团队长的id,并将团队长作为推荐人
  116. referrer = getById(referrerId);
  117. eur.setId(nextPK);
  118. eur.setReferrerName(referrer.getReferrerName());
  119. eur.setReferrerId(referrer.getReferrerId());
  120. eur.setLevel(referrer.getLevel() + 1);
  121. eur.setAffiliation(referrer.getAffiliation());
  122. esmUserReferrerService.saveOrUpdate(eur);
  123. } else {
  124. //已经级联过的代理再作为推荐人的时候,推荐人是传入的推荐人信息
  125. SysUser user = sysUserService.getById(referrerId);
  126. eur.setId(nextPK);
  127. eur.setReferrerId(referrerId);
  128. eur.setReferrerName(user.getName());
  129. eur.setLevel(referrer.getLevel() + 1);
  130. eur.setAffiliation(referrer.getAffiliation());
  131. esmUserReferrerService.saveOrUpdate(eur);
  132. }
  133. }
  134. @Override
  135. public boolean deldeleteByReferrerId(String userId) {
  136. LambdaQueryWrapper<EsmUserReferrer> queryWrapper = new LambdaQueryWrapper<>();
  137. queryWrapper.eq(EsmUserReferrer::getId, userId);
  138. return remove(queryWrapper);
  139. }
  140. @Override
  141. public List<String> getUpUser(String userId, List<String> list) {
  142. EsmUserReferrer esmUserReferrer = this.getById(userId);
  143. if (esmUserReferrer == null) {
  144. return list;
  145. }
  146. list.add(esmUserReferrer.getId());
  147. if (!esmUserReferrer.getReferrerId().equals(userId)) {
  148. getUpUser(esmUserReferrer.getReferrerId(), list);
  149. }
  150. return list;
  151. }
  152. @Override
  153. public Page<SysUser> getUserPage(Page page, SysUserDto dto) {
  154. return baseMapper.getUserPage(page, dto);
  155. }
  156. @Override
  157. public Page<QueryChannel> getQueryChannelPage(Page page, QueryChannel queryChannel) {
  158. return baseMapper.getQueryChannelPage(page, queryChannel);
  159. }
  160. @Override
  161. public HttpResult<PageVo<SysReferrerVo>> gainReferrerPage(PageDto<SysReferrerVo> pageDto) {
  162. if (StringUtils.isNotEmpty(pageDto.getDto().getAffiliation())) {
  163. EsmUserReferrer esmUserReferrer = this.getById(pageDto.getDto().getAffiliation());
  164. if (esmUserReferrer == null) {
  165. return HttpResult.error("工号有误,请重新输入");
  166. }
  167. List<String> up3list = new ArrayList<>();
  168. getUpUser(pageDto.getDto().getAffiliation(), up3list);
  169. List<String> down3list = this.baseMapper.getIdDown3(pageDto.getDto().getAffiliation());
  170. List<String> ids = new ArrayList<>();
  171. ids.addAll(up3list);
  172. ids.addAll(down3list);
  173. ids.add(pageDto.getDto().getAffiliation());
  174. pageDto.getDto().setIds(ids);
  175. pageDto.getDto().setAffiliation(null);
  176. }
  177. PageVo<SysReferrerVo> pageVo = new PageVo();
  178. //获取分页数量
  179. int total = super.baseMapper.countReferrerByAffiliation(pageDto);
  180. // pageVo.setTotalSize(total);
  181. // PageVo.buildPageInfo(pageDto,pageVo);
  182. //计算mysql分页起索引
  183. int firstIndex = pageDto.getPageNum() == 1 ? 0 : (pageDto.getPageNum() - 1) * pageDto.getPageSize();
  184. //计算mysql分页总页数
  185. int totalPages = total % pageDto.getPageSize() == 0 ? total / pageDto.getPageSize() : total / pageDto.getPageSize() + 1;
  186. //响应
  187. pageVo.setTotalSize(total);
  188. pageVo.setPageNum(pageDto.getPageNum());
  189. pageVo.setPageSize(pageDto.getPageSize());
  190. pageVo.setTotalPages(totalPages);
  191. //请求替换分页开始索引
  192. pageDto.setPageNum(firstIndex);
  193. pageVo.setContent(super.baseMapper.selectReferrerByAffiliation(pageDto));
  194. return HttpResult.ok(pageVo);
  195. }
  196. /**
  197. * 人员业绩统计
  198. *
  199. * @param whereCase
  200. * @param paramValues
  201. * @return
  202. */
  203. public List<EsmUserPolicyVO> countUserPolicy(String whereCase, Object[] paramValues) {
  204. List<EsmUserPolicyVO> recordList = new ArrayList<EsmUserPolicyVO>();
  205. String sql = "select b.teamlevel,b.name username,\n" +
  206. "sum(case when orderstatus in (1,2,3,4) then 1 else 0 end) ordernum,\n" +
  207. "sum(case when orderstatus=3 then 1 else 0 end) policynum,\n" +
  208. "sum(case when orderstatus=3 then sumpremium else 0 end) sumpremium\n" +
  209. "from v_user_referrer b \n" +
  210. "left join v_user_order a on b.id=a.id \n" +
  211. "and a.createtime between ? and ? \n" +
  212. "where b.affiliation=? \n" +
  213. "group by b.teamlevel,b.name order by b.teamlevel;";
  214. JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
  215. jdbcTemplate.query(sql, paramValues,
  216. new RowCallbackHandler() {
  217. @Override
  218. public void processRow(ResultSet resultSet) throws SQLException {
  219. EsmUserPolicyVO model = new EsmUserPolicyVO();
  220. model.setTeamlevel(resultSet.getString("teamlevel"));
  221. model.setUsername(resultSet.getString("username"));
  222. model.setOrdernum(resultSet.getInt("ordernum"));
  223. model.setPolicynum(resultSet.getInt("policynum"));
  224. model.setSumpremium(resultSet.getDouble("sumpremium"));
  225. recordList.add(model);
  226. }
  227. });
  228. return recordList;
  229. }
  230. /**
  231. * 团队业绩统计
  232. *
  233. * @param whereCase
  234. * @param paramValues
  235. * @return
  236. */
  237. public List<EsmTeamPolicyVO> countTeamPolicy(String whereCase, Object[] paramValues) {
  238. List<EsmTeamPolicyVO> recordList = new ArrayList<>();
  239. String sql = "select teamlevel,sum(teamnum) teamnum, sum(sumpremium) sumpremium,sum(usernum) usernum from \n" +
  240. "(select a.`level` teamlevel,count(distinct id) teamnum, 0 sumpremium,0 usernum\n" +
  241. "from v_user_order a\n" +
  242. "where a.affiliation=?\n" +
  243. "group by a.`level`\n" +
  244. "union all \n" +
  245. "select 9 teamlevel,count(distinct a.id) teamnum, 0 sumpremium,0 usernum\n" +
  246. "from esm_user_referrer a\n" +
  247. "left join sys_user b on a.id=b.id\n" +
  248. "where a.affiliation=? and b.status=2 " +
  249. "union all \n" +
  250. "select a.`level` teamlevel,0 teamnum, sum(sumpremium) sumpremium,count(distinct id) usernum\n" +
  251. "from v_user_order a\n" +
  252. "where a.affiliation=? and a.orderstatus=3\n" +
  253. "and a.createtime between ? and ? \n" +
  254. "group by a.`level`) t group by teamlevel";
  255. JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
  256. jdbcTemplate.query(sql, paramValues,
  257. new RowCallbackHandler() {
  258. @Override
  259. public void processRow(ResultSet resultSet) throws SQLException {
  260. EsmTeamPolicyVO model = new EsmTeamPolicyVO();
  261. model.setTeamlevel(resultSet.getString("teamlevel"));
  262. model.setTeamnum(resultSet.getInt("teamnum"));
  263. model.setUsernum(resultSet.getInt("usernum"));
  264. model.setSumpremium(resultSet.getDouble("sumpremium"));
  265. recordList.add(model);
  266. }
  267. });
  268. return recordList;
  269. }
  270. /**
  271. * 人员团队业绩统计--所有业务员都可查询
  272. *
  273. * @return
  274. */
  275. @Override
  276. public EsmUserCountVO queryUserCount(TeamUserQryVO record) {
  277. EsmUserCountVO esmUserCountVO = new EsmUserCountVO();
  278. List<EsmTeamPolicyVO> hzList = new ArrayList<>();
  279. List<EsmUserPolicyVO> userPolicyList = new ArrayList<>();
  280. List<EsmUserPolicyVO> userPolicyList0 = new ArrayList<>();
  281. List<EsmUserPolicyVO> userPolicyList1 = new ArrayList<>();
  282. List<EsmUserPolicyVO> userPolicyList2 = new ArrayList<>();
  283. List<EsmUserPolicyVO> userPolicyList3 = new ArrayList<>();
  284. EsmUserReferrer esmUserReferrer = getById(record.getId());
  285. if (esmUserReferrer != null) {
  286. List<String> userList1 = new ArrayList<>();
  287. List<String> userList2 = new ArrayList<>();
  288. List<String> userList3 = new ArrayList<>();
  289. //本级信息
  290. //明细数据加工
  291. List<String> userList0 = new ArrayList<>();
  292. userList0.add(esmUserReferrer.getId());
  293. userPolicyList0 = this.baseMapper.queryOrderCount(userList0, record.getStartdate(), record.getEnddate());
  294. //汇总数据加工
  295. EsmTeamPolicyVO esmTeamPolicyVO0 = this.baseMapper.queryOrderCountHz(userList0, record.getStartdate(), record.getEnddate());
  296. EsmTeamPolicyVO esmTeamPolicyVO1 = new EsmTeamPolicyVO();
  297. EsmTeamPolicyVO esmTeamPolicyVO2 = new EsmTeamPolicyVO();
  298. EsmTeamPolicyVO esmTeamPolicyVO3 = new EsmTeamPolicyVO();
  299. esmTeamPolicyVO2.setTeamlevel("二级团队");
  300. esmTeamPolicyVO3.setTeamlevel("三级团队");
  301. if (esmTeamPolicyVO0 == null) {
  302. esmTeamPolicyVO0 = new EsmTeamPolicyVO();
  303. esmTeamPolicyVO0.setSumpremium(0);
  304. esmTeamPolicyVO0.setUsernum(0);
  305. } else {
  306. esmTeamPolicyVO0.setUsernum(1);
  307. }
  308. esmTeamPolicyVO0.setTeamlevel("本人");
  309. esmTeamPolicyVO0.setTeamnum(1);
  310. // 一级团队信息
  311. userList1 = this.baseMapper.getIdDown_1(esmUserReferrer.getId());
  312. esmTeamPolicyVO1.setTeamlevel("一级团队");
  313. if (userList1 != null && userList1.size() > 0) {
  314. userPolicyList1 = this.baseMapper.queryOrderCount(userList1, record.getStartdate(), record.getEnddate());
  315. EsmTeamPolicyVO esmTeamPolicyVO1_t = this.baseMapper.queryOrderCountHz(userList1, record.getStartdate(),
  316. record.getEnddate());
  317. if (esmTeamPolicyVO1_t != null) {
  318. esmTeamPolicyVO1.setSumpremium(esmTeamPolicyVO1_t.getSumpremium());
  319. esmTeamPolicyVO1.setUsernum(userPolicyList1.size());//出单人力
  320. }
  321. esmTeamPolicyVO1.setTeamnum(userList1.size());//团队人数
  322. // 二级团队信息
  323. userList2 = this.baseMapper.getIdDown_2(esmUserReferrer.getId());
  324. esmTeamPolicyVO2.setTeamlevel("二级团队");
  325. if (userList2 != null && userList2.size() > 0) {
  326. userPolicyList2 = this.baseMapper.queryOrderCount(userList2, record.getStartdate(), record.getEnddate());
  327. EsmTeamPolicyVO esmTeamPolicyVO2_t = this.baseMapper.queryOrderCountHz(userList2, record.getStartdate(),
  328. record.getEnddate());
  329. if (esmTeamPolicyVO2_t != null) {
  330. esmTeamPolicyVO2.setSumpremium(esmTeamPolicyVO2_t.getSumpremium());
  331. esmTeamPolicyVO2.setUsernum(userPolicyList2.size());
  332. }
  333. esmTeamPolicyVO2.setTeamnum(userList2.size());
  334. // 三级团队信息
  335. userList3 = this.baseMapper.getIdDown_3(esmUserReferrer.getId());
  336. if(userList3!=null && userList3.size()>0){
  337. userPolicyList3=this.baseMapper.queryOrderCount(userList3,record.getStartdate(), record.getEnddate());
  338. EsmTeamPolicyVO esmTeamPolicyVO3_t=this.baseMapper.queryOrderCountHz(userList3,record.getStartdate(), record.getEnddate());
  339. esmTeamPolicyVO3.setTeamlevel("三级团队");
  340. esmTeamPolicyVO3.setTeamnum(userList3.size());
  341. if (esmTeamPolicyVO2_t != null) {
  342. esmTeamPolicyVO3.setSumpremium(esmTeamPolicyVO3_t.getSumpremium());
  343. esmTeamPolicyVO3.setUsernum(userPolicyList3.size());
  344. }
  345. }
  346. }
  347. }
  348. //临时团队
  349. List<String> registList = this.baseMapper.getIdDown3_regist(record.getId());
  350. EsmTeamPolicyVO esmTeamPolicyVO9 = new EsmTeamPolicyVO();
  351. esmTeamPolicyVO9.setTeamlevel("临时团队");
  352. esmTeamPolicyVO9.setTeamnum(registList == null ? 0 : registList.size());
  353. //汇总
  354. List<String> userList = new ArrayList<>();
  355. userList.addAll(userList0);
  356. userList.addAll(userList1);
  357. userList.addAll(userList2);
  358. userList.addAll(userList3);
  359. userList.addAll(registList);
  360. userPolicyList = this.baseMapper.queryOrderCount(userList, record.getStartdate(), record.getEnddate());
  361. EsmTeamPolicyVO esmTeamPolicyVO = new EsmTeamPolicyVO();
  362. EsmTeamPolicyVO esmTeamPolicyVO_t = this.baseMapper.queryOrderCountHz(userList, record.getStartdate(), record.getEnddate());
  363. if (esmTeamPolicyVO_t != null) {
  364. esmTeamPolicyVO.setSumpremium(esmTeamPolicyVO_t.getSumpremium());
  365. esmTeamPolicyVO.setUsernum(userPolicyList.size());
  366. }
  367. esmTeamPolicyVO.setTeamlevel("汇总");
  368. esmTeamPolicyVO.setTeamnum(userList.size());
  369. hzList.add(esmTeamPolicyVO);
  370. hzList.add(esmTeamPolicyVO0);
  371. hzList.add(esmTeamPolicyVO1);
  372. hzList.add(esmTeamPolicyVO2);
  373. hzList.add(esmTeamPolicyVO3);
  374. hzList.add(esmTeamPolicyVO9);
  375. esmUserCountVO.setHzList(hzList);
  376. esmUserCountVO.setUserPolicyList(userPolicyList);
  377. esmUserCountVO.setUserPolicyList0(userPolicyList0);
  378. esmUserCountVO.setUserPolicyList1(userPolicyList1);
  379. esmUserCountVO.setUserPolicyList2(userPolicyList2);
  380. esmUserCountVO.setUserPolicyList3(userPolicyList3);
  381. } else {
  382. throw new SystemException("内部错误");
  383. }
  384. return esmUserCountVO;
  385. }
  386. public List<EsmUserReferrer> queryList(String affiliation) {
  387. return super.baseMapper.queryList(affiliation);
  388. }
  389. @Override
  390. public BasePageResult<SysUserTeamDto> getTeamUser(AppCustomerManagementQueryVo managementQueryVo, String userId) {
  391. List<EsmUserReferrer> esmUserReferrers = lambdaQuery().eq(EsmUserReferrer::getReferrerId, userId).list();
  392. if (esmUserReferrers.isEmpty()) {
  393. return new BasePageResult<>();
  394. }
  395. int i = esmUserReferrers.get(0).getLevel() + 3;
  396. PageHelper.startPage(managementQueryVo.getPageNum(), managementQueryVo.getPageSize());
  397. List<SysUserTeamDto> byTeam = baseMapper.getByTeam(managementQueryVo, userId, i);
  398. PageResult<SysUserTeamDto> sysUserPageResult = new PageResult<>(byTeam);
  399. return new BasePageResult<>(managementQueryVo.getPageNum(), managementQueryVo.getPageSize(), sysUserPageResult.getTotalPages(),
  400. sysUserPageResult.getPageSize(), sysUserPageResult.getContent());
  401. }
  402. /**
  403. * 人员团队业绩统计--指定业务员查询
  404. *
  405. * @return
  406. */
  407. @Override
  408. public List<EsmUserPolicyForUserVO> queryUserCountForUser(TeamUserQryVO record) {
  409. return this.baseMapper.queryOrderCountForUser(record.getId(), record.getStartdate(), record.getEnddate());
  410. }
  411. }