From ee1d39f11b9483b64a88029f1755a6e7166fea15 Mon Sep 17 00:00:00 2001 From: yujian <yujian@163.com> Date: 星期日, 26 四月 2020 16:49:21 +0800 Subject: [PATCH] 等级显示问题 --- fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPPreInfoServiceImpl.java | 317 ++++++++++++++++++++++++++++++++-------------------- 1 files changed, 193 insertions(+), 124 deletions(-) diff --git a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPPreInfoServiceImpl.java b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPPreInfoServiceImpl.java index c77bb39..3856bfa 100644 --- a/fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPPreInfoServiceImpl.java +++ b/fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPPreInfoServiceImpl.java @@ -7,23 +7,42 @@ import javax.annotation.Resource; +import org.springframework.core.task.TaskExecutor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import com.aliyun.openservices.ons.api.Message; +import com.aliyun.openservices.ons.api.Producer; import com.yeshi.fanli.dao.mybatis.user.vip.UserVIPPreInfoMapper; -import com.yeshi.fanli.dto.msg.MsgAccountVipDTO; -import com.yeshi.fanli.entity.bus.user.HongBaoV2; +import com.yeshi.fanli.dto.mq.user.UserTopicTagEnum; +import com.yeshi.fanli.dto.mq.user.body.UserLevelChangedMQMsg; +import com.yeshi.fanli.entity.bus.user.ThreeSale; import com.yeshi.fanli.entity.bus.user.UserInfo; +import com.yeshi.fanli.entity.bus.user.UserInfoRegister; +import com.yeshi.fanli.entity.bus.user.UserInviteValidNum; +import com.yeshi.fanli.entity.bus.user.vip.UserLevelEnum; +import com.yeshi.fanli.entity.bus.user.vip.UserLevelUpgradedNotify; import com.yeshi.fanli.entity.bus.user.vip.UserVIPPreInfo; import com.yeshi.fanli.exception.user.vip.UserVIPPreInfoException; import com.yeshi.fanli.log.LogHelper; import com.yeshi.fanli.service.inter.count.HongBaoV2CountService; +import com.yeshi.fanli.service.inter.msg.UserOtherMsgNotificationService; +import com.yeshi.fanli.service.inter.user.UserInfoExtraService; +import com.yeshi.fanli.service.inter.user.UserInfoRegisterService; +import com.yeshi.fanli.service.inter.user.UserInfoService; import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce; -import com.yeshi.fanli.service.inter.user.msg.MsgAccountDetailService; +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.msg.UserAccountMsgNotificationService; +import com.yeshi.fanli.service.inter.user.vip.UserLevelUpgradedNotifyService; import com.yeshi.fanli.service.inter.user.vip.UserVIPPreInfoService; +import com.yeshi.fanli.service.inter.user.vip.UserVipConfigService; import com.yeshi.fanli.util.Constant; +import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.TimeUtil; import com.yeshi.fanli.util.annotation.RequestSerializableByKeyService; +import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory; +import com.yeshi.fanli.util.rocketmq.MQTopicName; @Service public class UserVIPPreInfoServiceImpl implements UserVIPPreInfoService { @@ -38,7 +57,37 @@ private ThreeSaleSerivce threeSaleSerivce; @Resource - private MsgAccountDetailService msgAccountDetailService; + private UserVipConfigService userVipConfigService; + + @Resource + private UserInviteValidNumService userInviteValidNumService; + + @Resource + private UserInfoExtraService userInfoExtraService; + + @Resource + private UserInfoService userInfoService; + + @Resource + private UserOtherMsgNotificationService userOtherMsgNotificationService; + + @Resource + private UserAccountMsgNotificationService userAccountMsgNotificationService; + + @Resource + private UserInfoRegisterService userInfoRegisterService; + + @Resource + private UserInviteMsgNotificationService userInviteMsgNotificationService; + + @Resource + private UserLevelUpgradedNotifyService userLevelUpgradedNotifyService; + + @Resource(name = "taskExecutor") + private TaskExecutor executor; + + @Resource(name = "producer") + private Producer producer; @Override public void addUserVIPPreInfo(UserVIPPreInfo info) throws UserVIPPreInfoException { @@ -60,7 +109,6 @@ return null; Comparator<UserVIPPreInfo> cm = new Comparator<UserVIPPreInfo>() { - @Override public int compare(UserVIPPreInfo o1, UserVIPPreInfo o2) { return o2.getProcess() - o1.getProcess(); @@ -72,12 +120,16 @@ } @Override + public UserVIPPreInfo getVipByProcess(Long uid, int process) { + return userVIPPreInfoMapper.selectByUidAndProcess(uid, process); + } + + @Override public UserVIPPreInfo getProcessInfo(Long uid, Date time) { List<UserVIPPreInfo> infoList = userVIPPreInfoMapper.listByUid(uid); if (infoList == null || infoList.size() == 0) return null; Comparator<UserVIPPreInfo> cm = new Comparator<UserVIPPreInfo>() { - @Override public int compare(UserVIPPreInfo o1, UserVIPPreInfo o2) { return o2.getProcess() - o1.getProcess(); @@ -92,105 +144,91 @@ return null; } + @Override @RequestSerializableByKeyService(key = "#uid") @Transactional(rollbackFor = Exception.class) - @Override - public void verifyVipPreInfo(Long uid, boolean inviteSuccess) { - if (uid == null || uid <= 0) + public void upgradeVipByMyOrder(Long uid) { + UserVIPPreInfo latest = getLatestProcessInfo(uid); + if (latest != null && latest.getProcess() == UserVIPPreInfo.PROCESS_2) { return; - - verifyCondition(uid); - - // 楠岃瘉涓婄骇 - if (inviteSuccess) { - UserInfo boss = threeSaleSerivce.getBoss(uid); - if (boss != null) { - verifyVipPreInfoBoss(boss.getId()); - } - } - } - - // 涓婄骇楠岃瘉 - private void verifyVipPreInfoBoss(Long uid) { - if (uid == null || uid <= 0) - return; - - verifyCondition(uid); - } - - private void verifyCondition(Long uid) { - try { - // 楠岃瘉浜岄樁娈� - UserVIPPreInfo oldInfo = userVIPPreInfoMapper.selectByUidAndProcess(uid, UserVIPPreInfo.PROCESS_2); - if (oldInfo != null) { - return; - } - - // 閭�璇疯鍗� - long countZiGou = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY, - HongBaoV2.TYPE_ZIGOU); - // 閭�璇疯鍗� - long countShare = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY, - HongBaoV2.TYPE_SHARE_GOODS); - // 闃熷憳 - long firstTeam = threeSaleSerivce.countFirstTeam(uid, 1); - long secondTeam = threeSaleSerivce.countSecondTeam(uid, 1); - - // 涓�闃舵 - boolean process1 = oneProcess(uid, countZiGou, countShare, firstTeam, secondTeam); - if (!process1) { - return; - } - - // 浜岄樁娈� - twoProcess(uid, countZiGou, countShare, firstTeam, secondTeam); - } catch (Exception e) { - LogHelper.errorDetailInfo(e); - } - } - - /** - * 涓�闃舵 - * - * @param uid - * @param countZiGou - * @param countShare - * @param firstTeam - * @param secondTeam - */ - private boolean oneProcess(Long uid, long countZiGou, long countShare, long firstTeam, long secondTeam) { - boolean process = false; - String msg = ""; - if (countZiGou >= Constant.VIP_PROCESS_1_ZIGOU) { - process = true; - msg = "鎭枩浣狅紒杩斿埄璁㈠崟杈惧埌 " + Constant.VIP_PROCESS_1_ZIGOU + "绗�"; - } else if (countShare >= Constant.VIP_PROCESS_1_SHARE) { - process = true; - msg = "鎭枩浣狅紒鍒嗕韩璁㈠崟杈惧埌 " + Constant.VIP_PROCESS_1_SHARE + "绗�"; - } else if (firstTeam >= Constant.VIP_PROCESS_1_TEAM && secondTeam >= Constant.VIP_PROCESS_1_TEAM_SECOND) { - process = true; - msg = "鐩存帴绮変笣杈惧埌" + Constant.VIP_PROCESS_1_TEAM + "浜猴紝闂存帴绮変笣杈惧埌 " + Constant.VIP_PROCESS_1_TEAM_SECOND + "浜�"; } - if (process) { + if (latest == null) { + String inviteCode = userInfoExtraService.getInviteCodeByUid(uid); + if (StringUtil.isNullOrEmpty(inviteCode)) { + return; // 鏈縺娲婚個璇风爜 + } + } + + // 鑷喘+ 鍒嗕韩璁㈠崟鍒拌处 + long doneZiGou = hongBaoV2CountService.countMyDirectOrderByCashArrival(uid, Constant.VIP_ORDER_PAY); + // 楂樼骇浼氬憳闄愬埗鏉′欢 + long limitZiGou7 = 0; + String zigou7 = userVipConfigService.getValueByKey("vip_pre_7_order_count"); + if (!StringUtil.isNullOrEmpty(zigou7)) { + limitZiGou7 = Long.parseLong(zigou7); + } + // 楠岃瘉鏄惁婊¤冻鍗囩骇楂樼骇浼氬憳 + if (doneZiGou >= limitZiGou7) { try { - UserVIPPreInfo info = new UserVIPPreInfo(); - info.setUid(uid); - info.setProcess(UserVIPPreInfo.PROCESS_1); - info.setCreateTime(new Date()); - info.setUpdateTime(new Date()); - addUserVIPPreInfo(info); - - // 娑堟伅 - MsgAccountVipDTO msgDto = new MsgAccountVipDTO(); - msgDto.setStatus("绯荤粺宸插皢浣犵殑璐︽埛鐢卞揩鐪佽揪浜哄崌绾т负鏅�氫細鍛�"); - msgDto.setEquity("浠庢敹鍒版湰娑堟伅璧凤紝浣犲皢鑾峰緱鍏ㄩ儴鏅�氫細鍛樻潈鐩�"); - msgAccountDetailService.addMsgVIP(uid, msg, "濡傛湁鐤戦棶璇疯仈绯绘垜鐨�-浜哄伐瀹㈡湇", msgDto); + twoProcess(uid, limitZiGou7, null); } catch (UserVIPPreInfoException e) { - e.printStackTrace(); + } } - return process; + } + + @Override + @RequestSerializableByKeyService(key = "#tid") + @Transactional(rollbackFor = Exception.class) + public void upgradeVipByTeamNum(Long tid) { + UserInfo boss = threeSaleSerivce.getBoss(tid); + if (boss == null) { + return; + } + Long bossId = boss.getId(); + + // 楠岃瘉涓婁笂绾� -闂存帴绮変笣鏄惁婊¤冻 + executor.execute(new Runnable() { + @Override + public void run() { + upgradeVipByTeamNum(bossId); + } + }); + + UserVIPPreInfo latest = getLatestProcessInfo(bossId); + if (latest != null && latest.getProcess() == UserVIPPreInfo.PROCESS_2) { + return; + } + + // 鏈夋晥绮変笣 + int doneFirst = 0; + int doneSecond = 0; + UserInviteValidNum userInviteValidNum = userInviteValidNumService.selectByPrimaryKey(bossId); + if (userInviteValidNum != null) { + doneFirst = userInviteValidNum.getNumFirst() == null ? 0 : userInviteValidNum.getNumFirst(); + doneSecond = userInviteValidNum.getNumSecond() == null ? 0 : userInviteValidNum.getNumSecond(); + } + + long limitFirst7 = 0; + String first7 = userVipConfigService.getValueByKey("vip_pre_7_first_level_team_count"); + if (!StringUtil.isNullOrEmpty(first7)) { + limitFirst7 = Long.parseLong(first7); + } + long limitSecond7 = 0; + String second7 = userVipConfigService.getValueByKey("vip_pre_7_second_level_team_count"); + if (!StringUtil.isNullOrEmpty(second7)) { + limitSecond7 = Long.parseLong(second7); + } + + // 楠岃瘉鏄惁婊¤冻鍗囩骇楂樼骇浼氬憳 + if (doneFirst >= limitFirst7 && doneSecond >= limitSecond7) { + try { + twoProcess(bossId, limitFirst7, limitSecond7); + } catch (UserVIPPreInfoException e) { + + } + } } /** @@ -202,39 +240,70 @@ * @param firstTeam * @param secondTeam */ - private boolean twoProcess(Long uid, long countZiGou, long countShare, long firstTeam, long secondTeam) { - boolean process = false; - String msg = ""; - if (countZiGou >= Constant.VIP_PROCESS_2_ZIGOU) { - process = true; - msg = "鎭枩浣狅紒杩斿埄璁㈠崟杈惧埌 " + Constant.VIP_PROCESS_2_ZIGOU + "绗�"; - } else if (countShare >= Constant.VIP_PROCESS_2_SHARE) { - process = true; - msg = "鎭枩浣狅紒鍒嗕韩璁㈠崟杈惧埌 " + Constant.VIP_PROCESS_2_SHARE + "绗�"; - } else if (firstTeam >= Constant.VIP_PROCESS_2_TEAM && secondTeam >= Constant.VIP_PROCESS_2_TEAM_SECOND) { - process = true; - msg = "鐩存帴绮変笣杈惧埌" + Constant.VIP_PROCESS_2_TEAM + "浜猴紝闂存帴绮変笣杈惧埌 " + Constant.VIP_PROCESS_2_TEAM_SECOND + "浜�"; + @Transactional(rollbackFor = Exception.class) + private void twoProcess(Long uid, long limit1, Long limit2) throws UserVIPPreInfoException { + String item = null; + if (limit2 == null) { + item = "杩斿埄+鍒嗕韩璁㈠崟"; + } else { + item = "鐩存帴+闂存帴绮変笣"; } - if (process) { - try { - UserVIPPreInfo info = new UserVIPPreInfo(); - info.setUid(uid); - info.setProcess(UserVIPPreInfo.PROCESS_2); - info.setCreateTime(new Date()); - info.setUpdateTime(new Date()); - addUserVIPPreInfo(info); + Date upgradeTime = new Date(); + UserVIPPreInfo info = new UserVIPPreInfo(); + info.setUid(uid); + info.setProcess(UserVIPPreInfo.PROCESS_2); + info.setCreateTime(upgradeTime); + info.setUpdateTime(upgradeTime); + addUserVIPPreInfo(info); - // 娑堟伅 - MsgAccountVipDTO msgDto = new MsgAccountVipDTO(); - msgDto.setStatus("绯荤粺宸插皢浣犵殑璐︽埛鐢辨櫘閫氫細鍛樺崌绾т负楂樼骇浼氬憳"); - msgDto.setEquity("浠庢敹鍒版湰娑堟伅璧凤紝浣犲皢鑾峰緱鍏ㄩ儴楂樼骇浼氬憳鏉冪泭"); - msgAccountDetailService.addMsgVIP(uid, msg, "濡傛湁鐤戦棶璇疯仈绯绘垜鐨�-浜哄伐瀹㈡湇", msgDto); - } catch (UserVIPPreInfoException e) { - e.printStackTrace(); + // 鍗囩骇寮规鎻愮ず + UserLevelUpgradedNotify notify = new UserLevelUpgradedNotify(); + notify.setUid(uid); + notify.setFromLevel(UserLevelEnum.daRen); + notify.setToLevel(UserLevelEnum.highVIP); + notify.setValid(true); + notify.setCreateTime(new Date()); + userLevelUpgradedNotifyService.addUserLevelUpgradedNotify(notify); + + try { + // 鍗囩骇娑堟伅 + Date registerTime = new Date(1577836800000L); + UserInfoRegister userInfoRegister = userInfoRegisterService.selectByPrimaryKey(uid); + if (userInfoRegister != null && userInfoRegister.getCreateTime() != null) { + registerTime = userInfoRegister.getCreateTime(); } + int daysBetween = TimeUtil.getDayDifferenceCount(registerTime, upgradeTime); + userAccountMsgNotificationService.vipPreUpgrade(uid, "蹇渷杈句汉", "楂樼骇浼氬憳", daysBetween, limit1, limit2); + + // 鐩存帴绮変笣鍗囩骇鎻愰啋 + ThreeSale threeSale = threeSaleSerivce.getMyBoss(uid); + if (threeSale != null) { + Long bossId = threeSale.getBoss().getId(); + UserInfo userInfo = userInfoService.selectByPKey(uid); + userInviteMsgNotificationService.fansUpgrade(bossId, "楂樼骇浼氬憳", userInfo.getNickName(), item, upgradeTime); + } + } catch (Exception e) { + e.printStackTrace(); + LogHelper.error(e); } - return process; + + if (!Constant.IS_TEST) { + UserLevelChangedMQMsg msg = new UserLevelChangedMQMsg(uid, UserLevelEnum.daRen, UserLevelEnum.highVIP, + new Date()); + Message message = MQMsgBodyFactory.create(MQTopicName.TOPIC_USER, UserTopicTagEnum.userLevelChanged, msg); + producer.send(message); + } + } + + @Override + public UserVIPPreInfo selectByUidAndProcess(Long uid, int process) { + return userVIPPreInfoMapper.selectByUidAndProcess(uid, process); + } + + @Override + public void deleteByPrimaryKey(Long id) { + userVIPPreInfoMapper.deleteByPrimaryKey(id); } } -- Gitblit v1.8.0