From dd5b15229cb15459fa7c31ccea77dac28cbfafbd Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期一, 13 四月 2020 10:04:20 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/div' into div --- fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPPreInfoServiceImpl.java | 438 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 431 insertions(+), 7 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 9c51828..c5d8eb8 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 @@ -1,5 +1,6 @@ package com.yeshi.fanli.service.impl.user.vip; +import java.math.BigDecimal; import java.util.Collections; import java.util.Comparator; import java.util.Date; @@ -7,24 +8,100 @@ import javax.annotation.Resource; -import com.yeshi.fanli.dao.mybatis.user.vip.UserVIPPreInfoMapper; -import com.yeshi.fanli.entity.bus.user.vip.UserVIPPreInfo; -import com.yeshi.fanli.exception.user.vip.UserVIPInfoException; -import com.yeshi.fanli.service.inter.user.vip.UserVIPPreInfoService; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.yeshi.utils.DateUtil; +import com.yeshi.fanli.dao.mybatis.user.vip.UserVIPPreInfoMapper; +import com.yeshi.fanli.entity.bus.user.HongBaoV2; +import com.yeshi.fanli.entity.bus.user.ThreeSale; +import com.yeshi.fanli.entity.bus.user.UserInfo; +import com.yeshi.fanli.entity.bus.user.UserInfoExtra; +import com.yeshi.fanli.entity.bus.user.UserInfoRegister; +import com.yeshi.fanli.entity.bus.user.UserInviteValidNum; +import com.yeshi.fanli.entity.bus.user.UserSystemCoupon; +import com.yeshi.fanli.entity.bus.user.vip.UserVIPPreInfo; +import com.yeshi.fanli.entity.integral.IntegralDetail; +import com.yeshi.fanli.entity.system.ConfigKeyEnum; +import com.yeshi.fanli.exception.user.vip.UserVIPPreInfoException; +import com.yeshi.fanli.log.LogHelper; +import com.yeshi.fanli.service.inter.config.ConfigService; +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.UserInviteSeparateService; +import com.yeshi.fanli.service.inter.user.UserSystemCouponService; +import com.yeshi.fanli.service.inter.user.integral.IntegralDetailService; +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.msg.UserAccountMsgNotificationService; +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.annotation.RequestSerializableByKeyService; + +@Service public class UserVIPPreInfoServiceImpl implements UserVIPPreInfoService { @Resource private UserVIPPreInfoMapper userVIPPreInfoMapper; + @Resource + private HongBaoV2CountService hongBaoV2CountService; + + @Resource + private ThreeSaleSerivce threeSaleSerivce; + + @Resource + private UserVipConfigService userVipConfigService; + + @Resource + private UserInviteValidNumService userInviteValidNumService; + + @Resource + private UserInfoExtraService userInfoExtraService; + + @Resource + private IntegralDetailService integralDetailService; + + @Resource + private ConfigService configService; + + @Lazy + @Resource + private UserSystemCouponService userSystemCouponService; + + @Resource + private UserInviteSeparateService userInviteSeparateService; + + @Resource + private UserInfoService userInfoService; + + @Resource + private UserOtherMsgNotificationService userOtherMsgNotificationService; + + @Resource + private UserAccountMsgNotificationService userAccountMsgNotificationService; + + @Resource + private UserInfoRegisterService userInfoRegisterService; + + @Resource + private UserInviteMsgNotificationService userInviteMsgNotificationService; + @Override - public void addUserVIPPreInfo(UserVIPPreInfo info) throws UserVIPInfoException { + public void addUserVIPPreInfo(UserVIPPreInfo info) throws UserVIPPreInfoException { if (info == null || info.getUid() == null || info.getProcess() == null) - throw new UserVIPInfoException(1, "淇℃伅涓嶅畬鏁�"); + throw new UserVIPPreInfoException(1, "淇℃伅涓嶅畬鏁�"); UserVIPPreInfo oldInfo = userVIPPreInfoMapper.selectByUidAndProcess(info.getUid(), info.getProcess()); if (oldInfo != null) - throw new UserVIPInfoException(2, "杩涘害宸插瓨鍦�"); + throw new UserVIPPreInfoException(2, "杩涘害宸插瓨鍦�"); if (info.getCreateTime() == null) info.setCreateTime(new Date()); userVIPPreInfoMapper.insertSelective(info); @@ -47,5 +124,352 @@ Collections.sort(infoList, cm); return infoList.get(0); } + + @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(); + } + }; + Collections.sort(infoList, cm); + + for (UserVIPPreInfo info : infoList) { + if (time.getTime() >= info.getCreateTime().getTime()) + return info; + } + return null; + } + + @RequestSerializableByKeyService(key = "#uid") + @Transactional(rollbackFor = Exception.class) + @Override + public void verifyVipPreInfo(Long uid, boolean inviteSuccess) { + if (uid == null || uid <= 0) + 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 doneZiGou = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY, + HongBaoV2.TYPE_ZIGOU); + // 鍒嗕韩璁㈠崟 + long doneShare = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY, + HongBaoV2.TYPE_SHARE_GOODS); + + // 鏈夋晥绮変笣 + int doneFirst = 0; + int doneSecond = 0; + UserInviteValidNum userInviteValidNum = userInviteValidNumService.selectByPrimaryKey(uid); + if (userInviteValidNum != null) { + doneFirst = userInviteValidNum.getNumFirst() == null ? 0 : userInviteValidNum.getNumFirst(); + doneSecond = userInviteValidNum.getNumSecond() == null ? 0 : userInviteValidNum.getNumSecond(); + } + + // 涓�闃舵 + boolean process1 = oneProcess(uid, doneZiGou, doneShare, doneFirst, doneSecond); + if (!process1) { + return; + } + + // 浜岄樁娈� + twoProcess(uid, doneZiGou, doneShare, doneFirst, doneSecond); + } catch (Exception e) { + LogHelper.errorDetailInfo(e); + } + } + + /** + * 涓�闃舵 + * + * @param uid + * @param countZiGou + * @param countShare + * @param firstTeam + * @param secondTeam + */ + @Transactional(rollbackFor = Exception.class) + private boolean oneProcess(Long uid, long countZiGou, long countShare, long firstTeam, long secondTeam) throws Exception{ + UserVIPPreInfo oldInfo = userVIPPreInfoMapper.selectByUidAndProcess(uid, UserVIPPreInfo.PROCESS_1); + if (oldInfo != null) { + return true; + } + + long limitZiGou = 0; + String zigou = userVipConfigService.getValueByKey("vip_pre_3_zigou_order_count"); + if (!StringUtil.isNullOrEmpty(zigou)) { + limitZiGou = Long.parseLong(zigou); + } + + long limitShare = 0; + String share = userVipConfigService.getValueByKey("vip_pre_3_share_order_count"); + if (!StringUtil.isNullOrEmpty(share)) { + limitShare = Long.parseLong(share); + } + + long limitFirst = 0; + String first = userVipConfigService.getValueByKey("vip_pre_3_first_level_team_count"); + if (!StringUtil.isNullOrEmpty(first)) { + limitFirst = Long.parseLong(first); + } + + long limitSecond = 0; + String second = userVipConfigService.getValueByKey("vip_pre_3_second_level_team_count"); + if (!StringUtil.isNullOrEmpty(second)) { + limitSecond = Long.parseLong(second); + } + + String item = ""; + Integer type = null; + long targetNum1 = 0L; + Long targetNum2 = 0L; + boolean process = false; + if (countZiGou >= limitZiGou) { + process = true; + type = Constant.TYPE_REBATE; + targetNum1 = limitZiGou; + item = "杩斿埄璁㈠崟"; + } else if (countShare >= limitShare) { + process = true; + type = Constant.TYPE_SHAER; + targetNum1 = limitShare; + item = "鍒嗕韩璁㈠崟"; + } else if (firstTeam >= limitFirst && secondTeam >= limitSecond) { + process = true; + targetNum1 = limitFirst; + targetNum2 = limitSecond; + item = "閭�璇风矇涓�"; + } + + if (process) { + try { + Date upgradeTime = new Date(); + UserVIPPreInfo info = new UserVIPPreInfo(); + info.setUid(uid); + info.setProcess(UserVIPPreInfo.PROCESS_1); + info.setCreateTime(upgradeTime); + info.setUpdateTime(upgradeTime); + addUserVIPPreInfo(info); + + // 鍗囩骇娑堟伅 + Date registerTime = new Date(1577836800000L); + UserInfoRegister userInfoRegister = userInfoRegisterService.selectByPrimaryKey(uid); + if (userInfoRegister != null && userInfoRegister.getCreateTime() != null) { + registerTime = userInfoRegister.getCreateTime(); + } + int daysBetween = DateUtil.daysBetween(registerTime, new Date()); + userAccountMsgNotificationService.vipPreUpgrade(uid, "蹇渷杈句汉", "鏅�氫細鍛�", daysBetween, targetNum1, targetNum2, type); + + // 璧犻�侀噾甯� + String goldcoin = userVipConfigService.getValueByKey("vip_pre_3_gift_goldcoin"); + if (!StringUtil.isNullOrEmpty(goldcoin)) { + + int goldcoinNum = Integer.parseInt(goldcoin); + // 娣诲姞閲戝竵鏄庣粏 + IntegralDetail detail = new IntegralDetail(); + detail.setTitle("鍗囩骇VIP绂忓埄"); + detail.setUid(uid); + detail.setMoney(Integer.parseInt(goldcoin)); + detail.setCreateTime(upgradeTime); + detail.setUniqueKey("VIP-3-" + uid); + integralDetailService.insertSelective(detail); + + // 娣诲姞閲戝竵 + userInfoExtraService.addGoldCoinByUid(uid, Integer.parseInt(goldcoin)); + + // 娑堟伅 + UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid); + userOtherMsgNotificationService.goldCoinSystemGiveMsg(uid, goldcoinNum, userInfoExtra.getGoldCoin()); + } + // 鏄惁瀛樺湪涓嬬骇鑴辩鏈熼檺 -鏇存柊涓嶈劚绂� + userInviteSeparateService.updateInvalidByBossId(uid); + + // 鎻愰啋涓婄骇 + remindBoss(uid, "鏅�氫細鍛�", item, upgradeTime, true); + + } catch (UserVIPPreInfoException e) { + e.printStackTrace(); + } + } + return process; + } + + + /** + * 浜岄樁娈� + * + * @param uid + * @param countZiGou + * @param countShare + * @param firstTeam + * @param secondTeam + */ + @Transactional(rollbackFor = Exception.class) + private boolean twoProcess(Long uid, long countZiGou, long countShare, long firstTeam, long secondTeam) { + long limitZiGou = 0; + String zigou = userVipConfigService.getValueByKey("vip_pre_7_zigou_order_count"); + if (!StringUtil.isNullOrEmpty(zigou)) { + limitZiGou = Long.parseLong(zigou); + } + + long limitShare = 0; + String share = userVipConfigService.getValueByKey("vip_pre_7_share_order_count"); + if (!StringUtil.isNullOrEmpty(share)) { + limitShare = Long.parseLong(share); + } + + long limitFirst = 0; + String first = userVipConfigService.getValueByKey("vip_pre_7_first_level_team_count"); + if (!StringUtil.isNullOrEmpty(first)) { + limitFirst = Long.parseLong(first); + } + + long limitSecond = 0; + String second = userVipConfigService.getValueByKey("vip_pre_7_second_level_team_count"); + if (!StringUtil.isNullOrEmpty(second)) { + limitSecond = Long.parseLong(second); + } + + Integer type = null; + long targetNum1 = 0L; + Long targetNum2 = 0L; + String item = ""; + boolean process = false; + if (countZiGou >= limitZiGou) { + process = true; + targetNum1 = limitZiGou; + type = Constant.TYPE_REBATE; + item = "杩斿埄璁㈠崟"; + } else if (countShare >= limitShare) { + process = true; + targetNum1 = limitShare; + type = Constant.TYPE_SHAER; + item = "鍒嗕韩璁㈠崟"; + } else if (firstTeam >= limitFirst && secondTeam >= limitSecond) { + process = true; + targetNum1 = limitFirst; + targetNum2 = limitSecond; + item = "閭�璇风矇涓�"; + } + + if (process) { + try { + Date upgradeTime = new Date(); + UserVIPPreInfo info = new UserVIPPreInfo(); + info.setUid(uid); + info.setProcess(UserVIPPreInfo.PROCESS_2); + info.setCreateTime(upgradeTime); + info.setUpdateTime(upgradeTime); + addUserVIPPreInfo(info); + + // 鍗囩骇娑堟伅 + UserVIPPreInfo pre1 = userVIPPreInfoMapper.selectByUidAndProcess(uid, UserVIPPreInfo.PROCESS_1); + int daysBetween = DateUtil.daysBetween(pre1.getCreateTime(), upgradeTime); + userAccountMsgNotificationService.vipPreUpgrade(uid, "鏅�氫細鍛�", "楂樼骇浼氬憳", daysBetween, targetNum1, targetNum2, type); + + // 璧犻�佸鍔卞埜 + String rewardCoupon = userVipConfigService.getValueByKey("vip_pre_7_gift_reward_coupon"); + if (!StringUtil.isNullOrEmpty(rewardCoupon)) { + int num = Integer.parseInt(rewardCoupon); + BigDecimal percent = new BigDecimal(configService.get(ConfigKeyEnum.exchangeRebatePercent.getKey())); + userSystemCouponService.rewardCouponWin(uid, UserSystemCoupon.SOURCE_SYSTEM_PUSH, num, true, percent); + } + + // 鎻愰啋涓婄骇 + remindBoss(uid, "楂樼骇浼氬憳", item, upgradeTime, false); + + } catch (Exception e) { + e.printStackTrace(); + LogHelper.error(e); + } + } + return process; + } + + + @Override + public void remindBoss(Long uid, String rankName, String item, Date time, boolean divorced) { + // 鏄惁瀛樺湪涓婄骇 + ThreeSale threeSale = threeSaleSerivce.getMyBoss(uid); + if (threeSale == null) + return; + Long bossId = threeSale.getBoss().getId(); + UserInfo userInfo = userInfoService.selectByPKey(uid); + + // 绮変笣鍗囩骇鎻愰啋 + userInviteMsgNotificationService.fansUpgrade(bossId, "鐩存帴绮変笣", rankName, userInfo.getNickName(), item, time); + + // 鏄惁瀛樺湪涓婁笂绾� + ThreeSale threeSaleSuper = threeSaleSerivce.getMyBoss(bossId); + if (threeSaleSuper != null) { // 绮変笣鍗囩骇鎻愰啋 + Long bossIdSuper = threeSaleSuper.getBoss().getId(); + userInviteMsgNotificationService.fansUpgrade(bossIdSuper, "闂存帴绮変笣", rankName, userInfo.getNickName(), item, time); + } + + // 鏄惁鍗囩骇鑴辩 + if (!divorced) { + return; + } + + // 楠岃瘉涓婄骇鏄惁宸叉槸浼氬憳 + UserVIPPreInfo oldInfo = userVIPPreInfoMapper.selectByUidAndProcess(bossId, UserVIPPreInfo.PROCESS_1); + if (oldInfo == null) { + // 娣诲姞鑴辩鍏崇郴鍊掕鏃� + userInviteSeparateService.addPreSeparateRecord(uid, bossId); + + // 鐩存帴绮変笣鑴辩-寮�濮嬭劚绂绘彁閱� + userInviteMsgNotificationService.fansPreDivorced(bossId, rankName, userInfo.getNickName(), item, time); + + //闂存帴绮変笣鑴辩-寮�濮嬭劚绂绘彁閱� + if (threeSaleSuper != null) { + UserInfo boss = userInfoService.selectByPKey(bossId); + Long bossIdSuper = threeSaleSuper.getBoss().getId(); + userInviteMsgNotificationService.fansPredivorcedIndirect(bossIdSuper, rankName, userInfo.getNickName(), + boss.getNickName(), item, time); + } + } + } + + @Override + public UserVIPPreInfo selectByUidAndProcess(Long uid, int process) { + UserVIPPreInfo info = userVIPPreInfoMapper.selectByUidAndProcess(uid, process); + return info; + } } -- Gitblit v1.8.0