package com.ydtech.modules.esm.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ydtech.exception.SystemException; import com.ydtech.modules.admin.model.SysUser; import com.ydtech.modules.admin.model.vo.SysReferrerVo; import com.ydtech.modules.admin.model.vo.SysUserBaseVO; import com.ydtech.modules.admin.service.SysUserService; import com.ydtech.modules.base.model.dto.PageDto; import com.ydtech.modules.base.model.vo.PageVo; import com.ydtech.modules.esm.dao.EsmUserReferrerMapper; import com.ydtech.modules.esm.model.EsmUserReferrer; import com.ydtech.modules.esm.model.vo.EsmTeamPolicyVO; import com.ydtech.modules.esm.model.vo.EsmUserPolicyVO; import com.ydtech.modules.esm.service.EsmUserReferrerService; import com.ydtech.utils.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowCallbackHandler; import org.springframework.stereotype.Service; import javax.sql.DataSource; import java.sql.ResultSet; import java.sql.SQLException; import java.util.*; @Service public class EsmUserReferrerServiceImpl extends ServiceImpl implements EsmUserReferrerService { @Autowired public DataSource dataSource; @Autowired private SysUserService sysUserService; @Autowired private EsmUserReferrerService esmUserReferrerService; @Override public Map buildLevelInfo(SysUser agent) { Map m = new HashMap(); LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); lqw.eq(EsmUserReferrer::getReferrerId, agent.getId()); List listAll = esmUserReferrerService.list(lqw); List oneList = new ArrayList<>(); List oneTempList = new ArrayList<>(); listAll.stream().forEach(a -> { SysUser sysUser = sysUserService.getById(a.getId()); if (sysUser.getStatus() == 1) { oneList.add(sysUser); } else { oneTempList.add(sysUser); } }); m.put("list1", oneList); m.put("list2", oneTempList); return m; } @Override public void buildLevelList(SysUser user, List oneList, List oneTempList) { Map> oneMap = buildLevelInfo(user); oneList.addAll(oneMap.get("list1")); oneTempList.addAll(oneMap.get("list2")); } @Override public void addReferrer(String referrerId, String nextPK) { if(referrerId.equals(nextPK)) throw new SystemException("推荐人不能是自己"); //推荐人信息 EsmUserReferrer referrer = getById(referrerId); EsmUserReferrer eur = new EsmUserReferrer(); if (null == referrer) { //推荐人是团队长的时候,先固定队长是首级 eur.setId(referrerId); eur.setLevel(0); eur.setAffiliation(referrerId); SysUser user = sysUserService.getById(referrerId); eur.setReferrerId(referrerId); eur.setReferrerName(user.getName()); esmUserReferrerService.save(eur); //查询团队长的id,并将团队长作为推荐人 referrer = getById(referrerId); eur.setId(nextPK); eur.setReferrerName(referrer.getReferrerName()); eur.setReferrerId(referrer.getReferrerId()); eur.setLevel(referrer.getLevel() + 1); eur.setAffiliation(referrer.getAffiliation()); esmUserReferrerService.saveOrUpdate(eur); }else{ //已经级联过的代理再作为推荐人的时候,推荐人是传入的推荐人信息 SysUser user = sysUserService.getById(referrerId); eur.setId(nextPK); eur.setReferrerId(referrerId); eur.setReferrerName(user.getName()); eur.setLevel(referrer.getLevel() + 1); eur.setAffiliation(referrer.getAffiliation()); esmUserReferrerService.saveOrUpdate(eur); } } @Override public boolean deldeleteByReferrerId(String userId) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); queryWrapper.eq(EsmUserReferrer::getId, userId); return remove(queryWrapper); } @Override public PageVo gainReferrerPage(PageDto pageDto) { PageVo pageVo = new PageVo(); //获取分页数量 int total = super.baseMapper.countReferrerByAffiliation(pageDto); pageVo.setTotalSize(total); PageVo.buildPageInfo(pageDto,pageVo); // //计算mysql分页起索引 // int firstIndex = pageDto.getPageNum() == 1 ? 0 : (pageDto.getPageNum() - 1) * pageDto.getPageSize(); // // // //计算mysql分页总页数 // int totalPages = total % pageDto.getPageSize() == 0 ? total / pageDto.getPageSize() : total / pageDto.getPageSize() + 1; // // // //响应 // // pageVo.setPageNum(pageDto.getPageNum()); // pageVo.setPageSize(pageDto.getPageSize()); // pageVo.setTotalPages(totalPages); // // // //请求替换分页开始索引 // pageDto.setPageNum(firstIndex); pageVo.setContent(super.baseMapper.selectReferrerByAffiliation(pageDto)); return pageVo; } /** * 人员业绩统计 * @param whereCase * @param paramValues * @return */ public List countUserPolicy(String whereCase, Object[] paramValues){ List recordList = new ArrayList(); String sql = "select a.`level` teamlevel,b.name username,\n" + "sum(case when orderstatus in (1,2,3,4) then 1 else 0 end) ordernum,\n" + "sum(case when orderstatus=3 then 1 else 0 end) policynum,\n" + "sum(case when orderstatus=3 then sumpremium else 0 end) sumpremium\n" + "from v_user_order a left join sys_user b on a.id=b.id " + whereCase; sql += " group by a.`level`,b.name order by a.`level`"; JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); jdbcTemplate.query(sql, paramValues, new RowCallbackHandler() { @Override public void processRow(ResultSet resultSet) throws SQLException { EsmUserPolicyVO model = new EsmUserPolicyVO(); model.setTeamlevel(resultSet.getString("teamlevel")); model.setUsername(resultSet.getString("username")); model.setOrdernum(resultSet.getInt("ordernum")); model.setPolicynum(resultSet.getInt("policynum")); model.setSumpremium(resultSet.getDouble("sumpremium")); recordList.add(model); } }); return recordList; } /** * 团队业绩统计 * @param whereCase * @param paramValues * @return */ public List countTeamPolicy(String whereCase, Object[] paramValues){ List recordList = new ArrayList(); String sql = "select teamlevel,sum(teamnum) teamnum, sum(sumpremium) sumpremium,sum(usernum) usernum from \n" + "(select a.`level` teamlevel,count(distinct id) teamnum, 0 sumpremium,0 usernum\n" + "from v_user_order a\n" + "where a.affiliation=?\n" + "group by a.`level`\n" + "union all \n" + "select a.`level` teamlevel,0 teamnum, sum(sumpremium) sumpremium,count(distinct id) usernum\n" + "from v_user_order a\n" + "where a.affiliation=? and a.orderstatus=3\n" + "and a.createtime between ? and ? \n" + "group by a.`level`) t group by teamlevel"; JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); jdbcTemplate.query(sql, paramValues, new RowCallbackHandler() { @Override public void processRow(ResultSet resultSet) throws SQLException { EsmTeamPolicyVO model = new EsmTeamPolicyVO(); model.setTeamlevel(resultSet.getString("teamlevel")); model.setTeamnum(resultSet.getInt("teamnum")); model.setUsernum(resultSet.getInt("usernum")); model.setSumpremium(resultSet.getDouble("sumpremium")); recordList.add(model); } }); return recordList; } }