From b47fb09eaffa4a13c0d63e823cb9319bcb775249 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期四, 02 四月 2020 15:22:11 +0800 Subject: [PATCH] 发圈修改 --- fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPPreInfoServiceImpl.java | 292 ++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 253 insertions(+), 39 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 3a3e757..37b5f01 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,22 +8,39 @@ import javax.annotation.Resource; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.yeshi.fanli.dao.mybatis.user.vip.UserVIPPreInfoMapper; import com.yeshi.fanli.dto.msg.MsgAccountVipDTO; +import com.yeshi.fanli.dto.msg.MsgOtherSystemGiveDTO; 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.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.entity.system.SystemCoupon.CouponTypeEnum; 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.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.UserInviteValidNumService; import com.yeshi.fanli.service.inter.user.msg.MsgAccountDetailService; 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.TimeUtil; +import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.annotation.RequestSerializableByKeyService; @Service @@ -36,10 +54,37 @@ @Resource private ThreeSaleSerivce threeSaleSerivce; - + @Resource private MsgAccountDetailService msgAccountDetailService; + @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; @Override @@ -72,6 +117,33 @@ 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) @@ -79,9 +151,9 @@ public void verifyVipPreInfo(Long uid, boolean inviteSuccess) { if (uid == null || uid <= 0) return; - + verifyCondition(uid); - + // 楠岃瘉涓婄骇 if (inviteSuccess) { UserInfo boss = threeSaleSerivce.getBoss(uid); @@ -106,25 +178,31 @@ if (oldInfo != null) { return; } - - // 閭�璇疯鍗� - long countZiGou = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY, + + // 鑷喘璁㈠崟 + long doneZiGou = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY, HongBaoV2.TYPE_ZIGOU); - // 閭�璇疯鍗� - long countShare = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY, + // 鍒嗕韩璁㈠崟 + long doneShare = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY, HongBaoV2.TYPE_SHARE_GOODS); - // 闃熷憳 - long firstTeam = threeSaleSerivce.countFirstTeam(uid, 1); - long secondTeam = threeSaleSerivce.countSecondTeam(uid, 1); + + // 鏈夋晥绮変笣 + 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, countZiGou, countShare, firstTeam, secondTeam); + boolean process1 = oneProcess(uid, doneZiGou, doneShare, doneFirst, doneSecond); if (!process1) { return; } // 浜岄樁娈� - twoProcess(uid, countZiGou, countShare, firstTeam, secondTeam); + twoProcess(uid, doneZiGou, doneShare, doneFirst, doneSecond); } catch (Exception e) { LogHelper.errorDetailInfo(e); } @@ -139,20 +217,46 @@ * @param firstTeam * @param secondTeam */ + @Transactional(rollbackFor = Exception.class) 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 +"浜�"; + + 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); + } + + if (countZiGou >= limitZiGou) { + process = true; + msg = "鎭枩浣狅紒杩斿埄璁㈠崟杈惧埌 " + limitZiGou + "绗�"; + } else if (countShare >= limitShare) { + process = true; + msg = "鎭枩浣狅紒鍒嗕韩璁㈠崟杈惧埌 " + limitShare + "绗�"; + } else if (firstTeam >= limitFirst && secondTeam >= limitSecond) { + process = true; + msg = "鐩存帴绮変笣杈惧埌" + limitFirst + "浜猴紝闂存帴绮変笣杈惧埌 " + limitSecond + "浜�"; + } + if (process) { try { UserVIPPreInfo info = new UserVIPPreInfo(); @@ -161,19 +265,78 @@ info.setCreateTime(new Date()); info.setUpdateTime(new Date()); addUserVIPPreInfo(info); - + // 娑堟伅 MsgAccountVipDTO msgDto = new MsgAccountVipDTO(); msgDto.setStatus("绯荤粺宸插皢浣犵殑璐︽埛鐢卞揩鐪佽揪浜哄崌绾т负鏅�氫細鍛�"); msgDto.setEquity("浠庢敹鍒版湰娑堟伅璧凤紝浣犲皢鑾峰緱鍏ㄩ儴鏅�氫細鍛樻潈鐩�"); msgAccountDetailService.addMsgVIP(uid, msg, "濡傛湁鐤戦棶璇疯仈绯绘垜鐨�-浜哄伐瀹㈡湇", msgDto); + + + // 璧犻�侀噾甯� + 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(new Date()); + detail.setUniqueKey("VIP-3-" + uid); + integralDetailService.insertSelective(detail); + + // 娣诲姞閲戝竵 + userInfoExtraService.addGoldCoinByUid(uid, Integer.parseInt(goldcoin)); + + // 娑堟伅 + MsgOtherSystemGiveDTO dto = new MsgOtherSystemGiveDTO(); + dto.setName("绯荤粺璧犻�� "); + dto.setReason("鎭枩浣狅紒鎴愬姛鍗囩骇涓烘櫘閫氫細鍛�"); + dto.setDesc("鑾峰緱閲戝竵" + goldcoinNum+"鏋�"); + userOtherMsgNotificationService.vipUpgradeReward(uid, "璇︽儏鏌ョ湅锛屽搴斾細鍛樻潈鐩�", dto); + } + + // 鏄惁瀛樺湪涓嬬骇鑴辩鏈熼檺 -鏇存柊涓嶈劚绂� + userInviteSeparateService.updateInvalidByBossId(uid); + + // 涓婄骇鑴辩鍏崇郴 + remindBoss(uid); + } catch (UserVIPPreInfoException e) { e.printStackTrace(); } - } + } return process; } + + private void remindBoss(Long uid) { + // 鏄惁瀛樺湪涓婄骇 + ThreeSale threeSale = threeSaleSerivce.getMyBoss(uid); + if (threeSale == null) + return; + + // 楠岃瘉涓婄骇鏄惁姝e父 + Long bossId = threeSale.getBoss().getId(); + UserInfo userInfo = userInfoService.getUserById(bossId); + if (userInfo == null || userInfo.getState() != UserInfo.STATE_NORMAL) { + return; + } + + // 楠岃瘉涓婄骇鏄惁宸叉槸浼氬憳 + UserVIPPreInfo oldInfo = userVIPPreInfoMapper.selectByUidAndProcess(bossId, UserVIPPreInfo.PROCESS_1); + if (oldInfo != null) { + return; + } + + // 娣诲姞鑴辩鍏崇郴鍊掕鏃� + userInviteSeparateService.addPreSeparateRecord(uid, bossId); + } + + + /** * 浜岄樁娈� * @@ -183,20 +346,46 @@ * @param firstTeam * @param secondTeam */ + @Transactional(rollbackFor = Exception.class) 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 +"浜�"; + + 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); + } + + if (countZiGou >= limitZiGou) { + process = true; + msg = "鎭枩浣狅紒杩斿埄璁㈠崟杈惧埌 " + limitZiGou + "绗�"; + } else if (countShare >= limitShare) { + process = true; + msg = "鎭枩浣狅紒鍒嗕韩璁㈠崟杈惧埌 " + limitShare + "绗�"; + } else if (firstTeam >= limitFirst && secondTeam >= limitSecond) { + process = true; + msg = "鐩存帴绮変笣杈惧埌" + limitFirst + "浜猴紝闂存帴绮変笣杈惧埌 " + limitSecond + "浜�"; + } + if (process) { try { UserVIPPreInfo info = new UserVIPPreInfo(); @@ -205,17 +394,42 @@ info.setCreateTime(new Date()); info.setUpdateTime(new Date()); addUserVIPPreInfo(info); - + // 娑堟伅 MsgAccountVipDTO msgDto = new MsgAccountVipDTO(); msgDto.setStatus("绯荤粺宸插皢浣犵殑璐︽埛鐢辨櫘閫氫細鍛樺崌绾т负楂樼骇浼氬憳"); msgDto.setEquity("浠庢敹鍒版湰娑堟伅璧凤紝浣犲皢鑾峰緱鍏ㄩ儴楂樼骇浼氬憳鏉冪泭"); msgAccountDetailService.addMsgVIP(uid, msg, "濡傛湁鐤戦棶璇疯仈绯绘垜鐨�-浜哄伐瀹㈡湇", msgDto); - } catch (UserVIPPreInfoException e) { + + // 璧犻�佸鍔卞埜 + 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())); + for (int i = 0; i < num; i++) { + userSystemCouponService.insertUserCoupon(uid, CouponTypeEnum.rebatePercentCoupon.name(), + UserSystemCoupon.SOURCE_SYSTEM_PUSH, percent, false); + } + + // 娑堟伅 + MsgOtherSystemGiveDTO dto = new MsgOtherSystemGiveDTO(); + dto.setName("绯荤粺璧犻�� "); + dto.setReason("鎭枩浣狅紒鎴愬姛鍗囩骇涓洪珮绾т細鍛�"); + dto.setDesc("鑾峰緱杩斿埄濂栧姳鍒�" + num +"寮�"); + userOtherMsgNotificationService.vipUpgradeReward(uid, "璇︽儏鏌ョ湅锛屽搴斾細鍛樻潈鐩�", dto); + } + } catch (Exception e) { e.printStackTrace(); + LogHelper.error(e); } - } + } return process; } + @Override + public UserVIPPreInfo selectByUidAndProcess(Long uid, int process) { + UserVIPPreInfo info = userVIPPreInfoMapper.selectByUidAndProcess(uid, process); + return info; + } + } -- Gitblit v1.8.0