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); }