yujian
2020-04-17 aba192810c97b03ca3ca4aef1d44f0b60aa243e8
队员脱离  + 自动发圈不替换价格系信息
13个文件已修改
407 ■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/DynamicControllerV2.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/user/UserInviteValidRecordMapper.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/bus/user/UserInviteValidRecord.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/entity/bus/user/vip/TeamUserLevelStatistic.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/user/UserInviteValidNumMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/user/UserInviteValidRecordMapper.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/GoodsEvaluateServiceImpl.java 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/invite/UserInviteSeparateServiceImpl.java 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/invite/UserInviteValidNumServiceImpl.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/invite/UserInviteValidRecordServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/TeamUserLevelStatisticServiceImpl.java 91 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/user/invite/UserInviteValidNumService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/user/invite/UserInviteValidRecordService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/DynamicControllerV2.java
@@ -48,6 +48,7 @@
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.common.JumpDetailV2Service;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.count.DailyCountMomentsService;
import com.yeshi.fanli.service.inter.dynamic.ArticleOfficialService;
import com.yeshi.fanli.service.inter.dynamic.DynamicInfoService;
import com.yeshi.fanli.service.inter.dynamic.GoodsEvaluateService;
@@ -135,8 +136,8 @@
    @Resource
    private ShareGoodsService shareGoodsService;
    // @Resource
    // private DailyCountMomentsService dailyCountMomentsService;
     @Resource
     private DailyCountMomentsService dailyCountMomentsService;
    @Resource(name = "taskExecutor")
    private TaskExecutor executor;
@@ -888,8 +889,7 @@
                executor.execute(new Runnable() {
                    @Override
                    public void run() { // 添加每日统计
                        // TODO
                        // dailyCountMomentsService.addShareClick();
                         dailyCountMomentsService.addShareClick();
                    }
                });
            }
@@ -1040,10 +1040,9 @@
        out.print(JsonUtil.loadTrueResult(data));
        executor.execute(new Runnable() {
            @Override
            @Override
            public void run() { // 添加每日统计
                // TODO
                // dailyCountMomentsService.addCopyComment();
                 dailyCountMomentsService.addCopyComment();
            }
        });
    }
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/user/UserInviteValidRecordMapper.java
@@ -25,4 +25,27 @@
     */
    List<Long> getValidWorkerIdsByUid(@Param("uid")Long uid,@Param("list") List<Long> list,@Param("type")Integer type);
     
    /**
     * 分页查询有效粉丝记录
     * @param start
     * @param count
     * @param uid
     * @return
     */
    List<UserInviteValidRecord> listByTypeAndUid(@Param("start")long start, @Param("count")int count,
            @Param("uid")Long uid, @Param("type")int type);
    /**
     * 查询有效关系
     * @param uid
     * @param workerId
     * @param type
     * @return
     */
    UserInviteValidRecord getByUidAndWorkerId(@Param("uid")Long uid, @Param("workerId")Long workerId, @Param("type")int type);
}
fanli/src/main/java/com/yeshi/fanli/entity/bus/user/UserInviteValidRecord.java
@@ -25,7 +25,7 @@
    @Column(name = "tvr_type")
    private Integer type;
    // 唯一值:( uid#workerId#type)
    // 唯一值:(workerId#type)
    @Column(name = "tvr_unique_key")
    private String uniqueKey;
    
fanli/src/main/java/com/yeshi/fanli/entity/bus/user/vip/TeamUserLevelStatistic.java
@@ -6,7 +6,7 @@
import org.yeshi.utils.mybatis.Table;
/**
 * 团队成员等级统计
 * 团队成员等级统计 -有效粉丝
 * @author Administrator
 *
 */
fanli/src/main/java/com/yeshi/fanli/mapping/user/UserInviteValidNumMapper.xml
@@ -47,6 +47,7 @@
      WHERE utv_uid = #{id,jdbcType=BIGINT}
  </update>
  
  <select id="selectForUpdate" resultMap="BaseResultMap" parameterType="java.lang.Long">
     select * from yeshi_ec_user_invite_valid_num where utv_uid = #{id,jdbcType=BIGINT} FOR UPDATE
  </select>
fanli/src/main/java/com/yeshi/fanli/mapping/user/UserInviteValidRecordMapper.xml
@@ -57,4 +57,18 @@
          and tvr_worker_id in <foreach collection="list" item="item" open="(" separator="," close=")">#{item}</foreach>
  </select>
  
  <select id="listByTypeAndUid" resultMap="BaseResultMap">
    SELECT * FROM `yeshi_ec_user_invite_valid_record` d
    WHERE d.`tvr_uid` = #{uid} AND d.`tvr_type` = #{type}
    Limit #{start},#{count}
  </select>
  <select id="getByUidAndWorkerId" resultMap="BaseResultMap">
    SELECT * FROM `yeshi_ec_user_invite_valid_record` d
    WHERE d.`tvr_uid` = #{uid} AND d.tvr_worker_id = #{workerId}  AND d.`tvr_type` = #{type}
    Limit 1
  </select>
</mapper>
fanli/src/main/java/com/yeshi/fanli/service/impl/dynamic/GoodsEvaluateServiceImpl.java
@@ -1884,16 +1884,11 @@
            String token = shareGoodsService.createTaoBaoToken(Constant.LINK_TOKEN_VERIFY_UID, goodsBrief);
            String template = configService.get(ConfigKeyEnum.quickShareTBCommentText.getKey());
            String commentText = template.replace("[淘口令]", TaoBaoUtil.filterTaoToken(token));
            commentText = commentText.replace("[原价]", MoneyBigDecimalUtil.getWithNoZera(goodsVO.getZkPrice()) + "");
            if (!goodsVO.isHasCoupon()) {
                commentText = commentText.replace("领券抢购", "抢购");
                commentText = commentText.replace("【券后价】[券后价]元", "");
            } else {
                commentText = commentText.replace("[券后价]",
                        MoneyBigDecimalUtil.getWithNoZera(goodsVO.getCouponPrice()) + "");
            }
            commentText = commentText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n").replace("\r\n\r\n",
                    "\r\n");
                commentText = commentText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n").replace("\r\n\r\n","\r\n");
            }
            commentInfo.setContent(commentText);
            commentInfo.setType(CommentInfoEnum.goodsCoupon.getDesc());
        }
@@ -2082,18 +2077,11 @@
                    String template = configService.get(ConfigKeyEnum.quickShareTBCommentText.getKey());
                    String commentText = template.replace("[淘口令]", TaoBaoUtil.filterTaoToken(token));
                    commentText = commentText.replace("[原价]",
                            MoneyBigDecimalUtil.getWithNoZera(goodsVO.getZkPrice()) + "");
                    if (!goodsVO.isHasCoupon()) {
                        commentText = commentText.replace("领券抢购", "抢购");
                        commentText = commentText.replace("【券后价】[券后价]元", "");
                    } else {
                        commentText = commentText.replace("[券后价]",
                                MoneyBigDecimalUtil.getWithNoZera(goodsVO.getCouponPrice()) + "");
                    }
                    commentText = commentText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n")
                            .replace("\r\n\r\n", "\r\n");
                        commentText = commentText.replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n").replace("\r\n\r\n", "\r\n");
                    }
                    CommentInfo commentInfo = new CommentInfo();
                    commentInfo.setNeedSpin(true);
@@ -2353,11 +2341,6 @@
            goodsEvaluateDao.save(goodsEvaluate);
        }
    }
    
    private void removeOverdue() {
fanli/src/main/java/com/yeshi/fanli/service/impl/user/invite/UserInviteSeparateServiceImpl.java
@@ -15,10 +15,13 @@
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.UserInviteSeparate;
import com.yeshi.fanli.entity.bus.user.vip.UserVIPPreInfo;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.UserInviteSeparateService;
import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
import com.yeshi.fanli.service.inter.user.invite.UserInviteMsgNotificationService;
import com.yeshi.fanli.service.inter.user.invite.UserInviteValidNumService;
import com.yeshi.fanli.service.inter.user.invite.UserInviteValidRecordService;
import com.yeshi.fanli.service.inter.user.vip.UserVIPPreInfoService;
import com.yeshi.fanli.service.inter.user.vip.UserVipConfigService;
@@ -27,41 +30,48 @@
    @Resource
    private UserInviteSeparateMapper userInviteSeparateMapper;
    @Resource
    private UserVipConfigService userVipConfigService;
    @Lazy
    @Resource
    private ThreeSaleSerivce threeSaleSerivce;
    @Lazy
    @Resource
    private UserVIPPreInfoService userVIPPreInfoService;
    @Lazy
    @Resource
    private UserInfoService userInfoService;
    @Lazy
    @Resource
    private UserInviteMsgNotificationService userInviteMsgNotificationService;
    @Lazy
    @Resource
    private UserInviteValidRecordService userInviteValidRecordService;
    @Lazy
    @Resource
    private UserInviteValidNumService userInviteValidNumService;
    @Override
    public void insertSelective(UserInviteSeparate record) {
        userInviteSeparateMapper.insertSelective(record);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void addPreSeparateRecord(Long workerId, Long bossId) {
        // 更新之前状态失效
        userInviteSeparateMapper.updateStateByWorkerIdAndBossId(workerId, bossId, UserInviteSeparate.STATE_INVALID);
        // 限制天数
        int limitDays = Integer.parseInt(userVipConfigService.getValueByKey("invite_separate_limit_days"));
        // 保存记录
        UserInviteSeparate inviteSeparate = new UserInviteSeparate();
        inviteSeparate.setBossId(bossId);
@@ -72,12 +82,12 @@
        inviteSeparate.setUpdateTime(new Date());
        userInviteSeparateMapper.insertSelective(inviteSeparate);
    }
    @Override
    public void updateInvalidByBossId(Long uid) {
        userInviteSeparateMapper.updateInvalidByBossId(uid);
    }
    @Override
    public void updateStateByWorkerIdAndBossId(Long workerId, Long bossId, int state) {
        userInviteSeparateMapper.updateStateByWorkerIdAndBossId(workerId, bossId, state);
@@ -87,13 +97,12 @@
    public UserInviteSeparate selectByWorkerIdAndBossId(Long workerId, Long bossId) {
        return userInviteSeparateMapper.selectByWorkerIdAndBossId(workerId, bossId);
    }
    @Override
    public List<UserInviteSeparate> getHandleOverdue(int start, int count) {
        return userInviteSeparateMapper.getHandleOverdue(start, count);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void inviteSeparate(UserInviteSeparate record) {
@@ -104,45 +113,67 @@
        Long bossId = record.getBossId();
        ThreeSale threeSale = threeSaleSerivce.getMyBoss(workerId);
        if (threeSale == null) {
            // 成功脱离 不发消息
            // 已经成功脱离 不发消息
            userInviteSeparateMapper.updateStateByWorkerIdAndBossId(workerId, bossId, UserInviteSeparate.STATE_SUCCESS);
            return;
        }
        }
        boolean separate = false;
        UserVIPPreInfo info = userVIPPreInfoService.getVipByProcess(bossId, UserVIPPreInfo.PROCESS_1);
        UserVIPPreInfo info = userVIPPreInfoService.getLatestProcessInfo(bossId);
        if (info == null) {
            separate = true;
        } else if (info.getCreateTime().getTime() >= record.getEndTime().getTime()) {
            separate = true;
        }
        } else if (info.getProcess() == UserVIPPreInfo.PROCESS_1) {
            if (info.getCreateTime().getTime() < record.getEndTime().getTime()) {
                separate = true; // 成为会员 晚于 脱离时间
            }
        } else if (info.getProcess() == UserVIPPreInfo.PROCESS_2) {
            Date upTime = info.getCreateTime();
            UserVIPPreInfo info1 = userVIPPreInfoService.getVipByProcess(bossId, UserVIPPreInfo.PROCESS_1);
            if (info1 != null) {
                upTime = info1.getCreateTime();
            }
        if (!separate) {
            // 未脱离
            userInviteSeparateMapper.updateStateByWorkerIdAndBossId(workerId, bossId, UserInviteSeparate.STATE_INVALID);
        } else {
            // 脱离关系
            userInviteSeparateMapper.updateStateByWorkerIdAndBossId(workerId, bossId, UserInviteSeparate.STATE_SUCCESS);
            // 脱离邀请关系
            threeSaleSerivce.inviteSeparate(workerId, bossId);
            UserInfo worker = userInfoService.selectByPKey(workerId);
            // 提醒上级脱离
            userInviteMsgNotificationService.fansDivorced(bossId, worker.getNickName(), new Date());
            // 提醒上上级脱离
            ThreeSale threeSaleSuper = threeSaleSerivce.getMyBoss(bossId);
            if (threeSaleSuper != null) { // 粉丝升级提醒
                Long bossIdSuper = threeSaleSuper.getBoss().getId();
                UserInfo boss = userInfoService.selectByPKey(workerId);
                userInviteMsgNotificationService.fansDivorcedIndirect(bossIdSuper, worker.getNickName(),
                        boss.getNickName(), new Date());
            if (upTime.getTime() < record.getEndTime().getTime()) {
                separate = true; // 成为会员 晚于 脱离时间
            }
        }
        // 未脱离
        if (!separate) {
            userInviteSeparateMapper.updateStateByWorkerIdAndBossId(workerId, bossId, UserInviteSeparate.STATE_INVALID);
            return;
        }
        // 脱离关系
        userInviteSeparateMapper.updateStateByWorkerIdAndBossId(workerId, bossId, UserInviteSeparate.STATE_SUCCESS);
        // 脱离邀请关系
        threeSaleSerivce.inviteSeparate(workerId, bossId);
        // 直接有效粉丝脱离-1
        userInviteValidNumService.reduceValidNumFirst(bossId, workerId);
        // 间接有效粉丝脱离-1
        ThreeSale threeSaleSuper = threeSaleSerivce.getMyBoss(bossId);
        if (threeSaleSuper != null) {
            Long bossIdSuper = threeSaleSuper.getBoss().getId();
            userInviteValidNumService.reduceValidNumSecond(bossIdSuper, workerId);
        }
        // 通知上级消息
        try {
            // 提醒上级脱离
            Date date = new Date();
            UserInfo worker = userInfoService.selectByPKey(workerId);
            String nickName = worker.getNickName();
            userInviteMsgNotificationService.fansDivorced(bossId, nickName, date);
            // 提醒上上级脱离
            if (threeSaleSuper != null) {
                Long bossIdSuper = threeSaleSuper.getBoss().getId();
                UserInfo boss = userInfoService.selectByPKey(workerId);
                userInviteMsgNotificationService.fansDivorcedIndirect(bossIdSuper, nickName, boss.getNickName(), date);
            }
        } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
        }
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/user/invite/UserInviteValidNumServiceImpl.java
@@ -55,6 +55,67 @@
            userInviteValidNumMapper.insertSelective(inviteValid);
        }
    }
    /**
     *  直接粉丝 -1
     * @param uid
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void reduceValidNumFirst(Long uid, Long  workerId) {
        UserInviteValidRecord record = userInviteValidRecordMapper.getByUidAndWorkerId(uid, workerId,
                UserInviteValidRecord.TYPE_ONE);
        if (record == null) {
            return;
        }
        UserInviteValidNum inviteValid = userInviteValidNumMapper.selectForUpdate(uid);
        if (inviteValid != null) {
            int num = 0;
            if (inviteValid.getNumFirst() > 0) {
                num = inviteValid.getNumFirst() - 1;
            }
            inviteValid.setId(uid);
            inviteValid.setNumFirst(num);
            inviteValid.setUpdateTime(new Date());
            userInviteValidNumMapper.updateByPrimaryKeySelective(inviteValid);
        }
        // 删除有效记录
        userInviteValidRecordMapper.deleteByPrimaryKey(record.getId());
    }
    /**
     *  直接粉丝 -1
     * @param uid
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void reduceValidNumSecond(Long uid, Long workerId) {
        UserInviteValidRecord record = userInviteValidRecordMapper.getByUidAndWorkerId(uid, workerId,
                UserInviteValidRecord.TYPE_TWO);
        if (record == null) {
            return;
        }
        UserInviteValidNum inviteValid = userInviteValidNumMapper.selectForUpdate(uid);
        if (inviteValid != null) {
            int num = 0;
            if (inviteValid.getNumFirst() > 0) {
                num = inviteValid.getNumSecond() - 1;
            }
            inviteValid.setId(uid);
            inviteValid.setNumSecond(num);
            inviteValid.setUpdateTime(new Date());
            userInviteValidNumMapper.updateByPrimaryKeySelective(inviteValid);
        }
        // 删除有效记录
        userInviteValidRecordMapper.deleteByPrimaryKey(record.getId());
    }
    /**
     *  间接粉丝 +1
@@ -106,7 +167,7 @@
            }
            
            Long bossId = threeSale.getBoss().getId();
            String uniqueKey = StringUtil.Md5(bossId + "#" + uid + "#" + UserInviteValidRecord.TYPE_ONE);
            String uniqueKey = StringUtil.Md5(uid + "#" + UserInviteValidRecord.TYPE_ONE);
            UserInviteValidRecord record = userInviteValidRecordMapper.selectByUniqueKey(uniqueKey);
            if (record == null) {
                record = new UserInviteValidRecord();
@@ -128,7 +189,7 @@
            }
            // 间接关系
            Long bossIdSuper = threeSaleSuper.getBoss().getId();
            String uniqueKeySuper = StringUtil.Md5(bossIdSuper + "#" + uid + "#" + UserInviteValidRecord.TYPE_TWO);
            String uniqueKeySuper = StringUtil.Md5(uid + "#" + UserInviteValidRecord.TYPE_TWO);
            UserInviteValidRecord recordSuper = userInviteValidRecordMapper.selectByUniqueKey(uniqueKeySuper);
            if (recordSuper == null) {
                recordSuper = new UserInviteValidRecord();
fanli/src/main/java/com/yeshi/fanli/service/impl/user/invite/UserInviteValidRecordServiceImpl.java
@@ -7,6 +7,7 @@
import org.springframework.stereotype.Service;
import com.yeshi.fanli.dao.mybatis.user.UserInviteValidRecordMapper;
import com.yeshi.fanli.entity.bus.user.UserInviteValidRecord;
import com.yeshi.fanli.service.inter.user.invite.UserInviteValidRecordService;
@Service
@@ -19,5 +20,16 @@
    public List<Long> getValidWorkerIdsByUid(Long uid, List<Long> list,Integer type){
        return userInviteValidRecordMapper.getValidWorkerIdsByUid(uid, list, type);
    }
    @Override
    public List<UserInviteValidRecord> listFirstTeam(long start, int count, Long uid){
        return userInviteValidRecordMapper.listByTypeAndUid(start, count, uid, UserInviteValidRecord.TYPE_ONE);
    }
     
    @Override
    public List<UserInviteValidRecord> listSecondTeam(long start, int count, Long uid){
        return userInviteValidRecordMapper.listByTypeAndUid(start, count, uid, UserInviteValidRecord.TYPE_TWO);
    }
}
fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/TeamUserLevelStatisticServiceImpl.java
@@ -8,10 +8,10 @@
import org.springframework.stereotype.Service;
import com.yeshi.fanli.dao.mybatis.user.vip.TeamUserLevelStatisticMapper;
import com.yeshi.fanli.entity.bus.user.ThreeSale;
import com.yeshi.fanli.entity.bus.user.UserInviteValidRecord;
import com.yeshi.fanli.entity.bus.user.vip.TeamUserLevelStatistic;
import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum;
import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
import com.yeshi.fanli.service.inter.user.invite.UserInviteValidRecordService;
import com.yeshi.fanli.service.inter.user.vip.TeamUserLevelStatisticService;
import com.yeshi.fanli.service.manger.user.UserLevelManager;
@@ -19,13 +19,14 @@
public class TeamUserLevelStatisticServiceImpl implements TeamUserLevelStatisticService {
    @Resource
    private ThreeSaleSerivce threeSaleSerivce;
    @Resource
    private UserLevelManager userLevelManager;
    @Resource
    private TeamUserLevelStatisticMapper teamUserLevelStatisticMapper;
    @Resource
    private UserInviteValidRecordService userInviteValidRecordService;
    @Override
    public TeamUserLevelStatistic selectByUid(Long uid) {
@@ -34,55 +35,63 @@
    @Override
    public void initData(Long uid) {
        int state = ThreeSale.STATE_SUCCESS;
        long count = threeSaleSerivce.countFirstTeam(uid, state);
        List<ThreeSale> list = threeSaleSerivce.listFirstTeam(0L, (int) count, uid, state);
        int pageSize = 1000;
        // 直接粉丝统计
        int daRenFirstCount = 0;
        int normalFirstCount = 0;
        int highFirstCount = 0;
        int superFirstCount = 0;
        int tearcherFirstCount = 0;
        for (ThreeSale ts : list) {
            UserLevelEnum level = userLevelManager.getUserLevel(ts.getWorker().getId());
            if (level == UserLevelEnum.daRen) {
                daRenFirstCount++;
            } else if (level == UserLevelEnum.normalVIP) {
                normalFirstCount++;
            } else if (level == UserLevelEnum.highVIP) {
                highFirstCount++;
            } else if (level == UserLevelEnum.superVIP) {
                superFirstCount++;
            } else if (level == UserLevelEnum.tearcher) {
                tearcherFirstCount++;
        for (int i = 0; i < 100; i ++) {
            List<UserInviteValidRecord> list = userInviteValidRecordService.listFirstTeam(i * pageSize, pageSize, uid);
            if (list == null || list.size() == 0) {
                break;
            }
            for (UserInviteValidRecord ts : list) {
                UserLevelEnum level = userLevelManager.getUserLevel(ts.getWorkerId());
                if (level == UserLevelEnum.daRen) {
                    daRenFirstCount++;
                } else if (level == UserLevelEnum.normalVIP) {
                    normalFirstCount++;
                } else if (level == UserLevelEnum.highVIP) {
                    highFirstCount++;
                } else if (level == UserLevelEnum.superVIP) {
                    superFirstCount++;
                } else if (level == UserLevelEnum.tearcher) {
                    tearcherFirstCount++;
                }
            }
        }
        // 间接粉丝统计
        int daRenSecondCount = 0;
        int normalSecondCount = 0;
        int highSecondCount = 0;
        int superSecondCount = 0;
        int tearcherSecondCount = 0;
        long secondCount = threeSaleSerivce.countSecondTeam(uid, state);
        int pageSize = 1000;
        int toalPage = (int) (secondCount % pageSize == 0 ? secondCount / pageSize : secondCount / pageSize + 1);
        for (int i = 0; i < toalPage; i++) {
            list = threeSaleSerivce.listSecondTeam(i * pageSize, pageSize, uid, state);
            if (list != null)
                for (ThreeSale ts : list) {
                    UserLevelEnum level = userLevelManager.getUserLevel(ts.getWorker().getId());
                    if (level == UserLevelEnum.daRen) {
                        daRenSecondCount++;
                    } else if (level == UserLevelEnum.normalVIP) {
                        normalSecondCount++;
                    } else if (level == UserLevelEnum.highVIP) {
                        highSecondCount++;
                    } else if (level == UserLevelEnum.superVIP) {
                        superSecondCount++;
                    } else if (level == UserLevelEnum.tearcher) {
                        tearcherSecondCount++;
                    }
        for (int i = 0; i < 100; i ++) {
            List<UserInviteValidRecord> list = userInviteValidRecordService.listSecondTeam(i * pageSize, pageSize, uid);
            if (list == null || list.size() == 0) {
                break;
            }
            for (UserInviteValidRecord ts : list) {
                UserLevelEnum level = userLevelManager.getUserLevel(ts.getWorkerId());
                if (level == UserLevelEnum.daRen) {
                    daRenSecondCount++;
                } else if (level == UserLevelEnum.normalVIP) {
                    normalSecondCount++;
                } else if (level == UserLevelEnum.highVIP) {
                    highSecondCount++;
                } else if (level == UserLevelEnum.superVIP) {
                    superSecondCount++;
                } else if (level == UserLevelEnum.tearcher) {
                    tearcherSecondCount++;
                }
            }
        }
        UserLevelEnum level = userLevelManager.getUserLevel(uid);
fanli/src/main/java/com/yeshi/fanli/service/inter/user/invite/UserInviteValidNumService.java
@@ -22,5 +22,17 @@
     */
    public UserInviteValidNum selectByPrimaryKey(Long id);
    /**
     * 直接粉丝 -1
     * @param uid
     */
    public void reduceValidNumFirst(Long uid, Long workerId);
    /**
     * 间接粉丝 -1
     * @param uid
     */
    public void reduceValidNumSecond(Long uid, Long workerId);
     
}
fanli/src/main/java/com/yeshi/fanli/service/inter/user/invite/UserInviteValidRecordService.java
@@ -2,6 +2,8 @@
import java.util.List;
import com.yeshi.fanli.entity.bus.user.UserInviteValidRecord;
public interface UserInviteValidRecordService {
    /**
@@ -13,6 +15,26 @@
     */
    public List<Long> getValidWorkerIdsByUid(Long uid, List<Long> list, Integer type);
    /**
     * 查询有效粉丝 一级队员
     * @param start
     * @param count
     * @param uid
     * @return
     */
    public List<UserInviteValidRecord> listFirstTeam(long start, int count, Long uid);
    /**
     * 查询间接有效粉丝
     * @param start
     * @param count
     * @param uid
     * @return
     */
    public List<UserInviteValidRecord> listSecondTeam(long start, int count, Long uid);
}