fanli/src/main/java/com/yeshi/fanli/controller/client/v1/ConfigController.java
@@ -377,14 +377,14 @@ // TODO 验证是否是导师 JSONObject inner = new JSONObject(); inner.put("link", userVipConfigService.getByKey("vip_link")); inner.put("link", userVipConfigService.getValueByKey("vip_link")); inner.put("ion", "http://img.flqapp.com/resource/vip/icon_vip.png"); inner.put("title", "免费升级 享会员权益"); inner.put("btnName", "升级会员"); if (uid != null) { // 是否导师 TODO if (userVIPInfoService.isVIP(uid)) { inner.put("link", userVipConfigService.getByKey("vip_link")); inner.put("link", userVipConfigService.getValueByKey("vip_link")); inner.put("ion", "http://img.flqapp.com/resource/vip/icon_tearcher.png"); inner.put("title", "拿五险与津贴 享导师权益"); inner.put("btnName", "升级会员"); fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserOrderControllerV2.java
@@ -581,6 +581,15 @@ userLevel = UserLevelEnum.daRen; UserLevelEnum upperLevel = UserLevelEnum.superVIP; CommonOrder commonOrder1 = hoList.get(0).getCommonOrder(); Date downTime = commonOrder1.getThirdCreateTime(); Integer urank = commonOrder1.getUrank(); UserLevelEnum buyerUserLevel = UserLevelUtil.getByOrderRank(urank); boolean direct = false; if (hongBaoV2.getType() == HongBaoV2.TYPE_YIJI || hongBaoV2.getType() == HongBaoV2.TYPE_SHARE_YIJI) { direct = true; } BigDecimal upperTotalMoney = new BigDecimal(0); List<GoodsRebateVO> voList = new ArrayList<>(); for (HongBaoOrder hongBaoOrder : hoList) { @@ -604,20 +613,20 @@ payment = new BigDecimal(0); goodsVO.setActualPay("¥" + payment.setScale(2, BigDecimal.ROUND_DOWN)); BigDecimal fanli = hongBaoOrder.getHongBaoV2().getMoney(); // 基础佣金 BigDecimal commission = orderHongBaoMoneyComputeService.computeBaseFanliMoney(commonOrder); if (type == 3) { // 奖金 goodsVO.setBonus("¥" + hongBaoOrder.getHongBaoV2().getMoney() +""); } else { // 佣金 goodsVO.setCommision("¥" +commission); } // 平台补贴 BigDecimal vipFanli = hongBaoOrder.getHongBaoV2().getMoney(); goodsVO.setSubsidy("¥" + vipFanli.subtract(commission).setScale(2, BigDecimal.ROUND_DOWN)); goodsVO.setCommision("¥" +commission.setScale(2, BigDecimal.ROUND_DOWN)); // 平台补贴 = 返利 - 基础佣金 goodsVO.setSubsidy("¥" + fanli.subtract(commission).setScale(2, BigDecimal.ROUND_DOWN)); // 达人补贴 if (userLevel != UserLevelEnum.daRen) { BigDecimal darenFanli = orderHongBaoMoneyComputeService.computeFanliMoney(commonOrder, UserLevelEnum.daRen); goodsVO.setOriginSubsidy("¥" + darenFanli.subtract(commission).setScale(2, BigDecimal.ROUND_DOWN) + ""); } if (type == 3) { // 奖金 goodsVO.setBonus("¥" + fanli.setScale(2, BigDecimal.ROUND_DOWN) +""); } voList.add(goodsVO); @@ -626,11 +635,11 @@ upperTotalMoney = upperTotalMoney.add(orderHongBaoMoneyComputeService.computeFanliMoney(commonOrder, upperLevel)); } else if (type == 2) { upperTotalMoney = upperTotalMoney.add(orderHongBaoMoneyComputeService.computeShareMoney(commonOrder, upperLevel)); } else if (type == 3) { upperTotalMoney = upperTotalMoney.add(hongBao); } } CommonOrder commonOrder = hoList.get(0).getCommonOrder(); Date downTime = commonOrder.getThirdCreateTime(); // 团队补贴 if (type == 3) { @@ -639,13 +648,7 @@ InviteOrderSubsidy inviteOrderSubsidy = inviteOrderSubsidyServiceV2.getByOrderNoAndType(uid, orderNo, sourceType); if (inviteOrderSubsidy != null) { teamSubsidy = inviteOrderSubsidy.getMoney(); Integer urank = commonOrder.getUrank(); UserLevelEnum buyerUserLevel = UserLevelUtil.getByOrderRank(urank); boolean direct = false; if (hongBaoV2.getType() == HongBaoV2.TYPE_YIJI || hongBaoV2.getType() == HongBaoV2.TYPE_SHARE_YIJI) { direct = true; } // 计算原比例 BigDecimal originRate = orderHongBaoMoneyComputeService.getTeamSubsidyRate(downTime,buyerUserLevel, userLevel, direct); // 计算达人补贴 @@ -655,12 +658,13 @@ lowerSubsidy = MoneyBigDecimalUtil.div(teamSubsidy.multiply(daRenRate), originRate); } if (userLevel != UserLevelEnum.superVIP && userLevel != UserLevelEnum.superVIP) { // 计算超级会员补贴 if (userLevel != UserLevelEnum.superVIP && userLevel != UserLevelEnum.tearcher) { BigDecimal vipRate = orderHongBaoMoneyComputeService.getTeamSubsidyRate(downTime, buyerUserLevel, UserLevelEnum.superVIP, direct); upperTotalMoney = upperTotalMoney.add(MoneyBigDecimalUtil.div(teamSubsidy.multiply(vipRate), originRate)); System.out.println(upperTotalMoney); } } else { teamSubsidy = BigDecimal.valueOf(0.00); lowerSubsidy = BigDecimal.valueOf(0.00); @@ -687,9 +691,8 @@ orderRebateVO.setUserLevel(userLevel.name()); } // 上级返利 // 超级会员返利 if (upperLevel != null) { upperTotalMoney = upperTotalMoney.add(hongBao); orderRebateVO.setUpperFanLi("¥" + upperTotalMoney); orderRebateVO.setJumpLink(upperLevel.getDetailLink()); } fanli/src/main/java/com/yeshi/fanli/dao/mybatis/money/InviteOrderSubsidyDebtMapper.java
@@ -47,5 +47,15 @@ * @return */ BigDecimal sumLeftMoneyByUid(@Param("uid")Long uid,@Param("maxEstimatePayTime")Date maxEstimatePayTime); /** * 计算欠款金额(补贴ID) * * @param uid * @return */ InviteOrderSubsidyDebt getBySourceId(@Param("sourceId")Long sourceId); } fanli/src/main/java/com/yeshi/fanli/mapping/money/InviteOrderSubsidyDebtMapper.xml
@@ -54,6 +54,13 @@ yeshi_ec_invite_order_subsidy_debt where sd_uid = #{uid} and #{maxEstimatePayTime}>=sd_estimate_pay_time </select> <select id="getBySourceId" resultMap="BaseResultMap"> select * from yeshi_ec_invite_order_subsidy_debt where sd_source_id = #{sourceId} Limit 1 </select> <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">delete from yeshi_ec_invite_order_subsidy_debt where sd_id = #{id,jdbcType=BIGINT} </delete> fanli/src/main/java/com/yeshi/fanli/service/impl/money/InviteOrderSubsidyDebtServiceImpl.java
@@ -118,5 +118,11 @@ money = new BigDecimal(0); return money; } @Override public InviteOrderSubsidyDebt getBySourceId(Long sourceId) { return inviteOrderSubsidyDebtMapper.getBySourceId(sourceId); } } fanli/src/main/java/com/yeshi/fanli/service/impl/money/msg/UserMoneyMsgNotificationServiceImpl.java
@@ -278,8 +278,20 @@ @Override public void teamReceive(Long uid, BigDecimal money, BigDecimal balance, Date receivedDate) { MsgMoneyDetail detail = MsgMoneyDetailFactory.createTeamReceivedMsg(uid, money, balance, receivedDate); public void teamReceive(Long uid, BigDecimal money, BigDecimal subsidy, BigDecimal balance, Date receivedDate) { BigDecimal totalMoney = new BigDecimal(0); if (money != null) { totalMoney = totalMoney.add(money); } if (subsidy != null) { totalMoney = totalMoney.add(subsidy); } if (totalMoney.compareTo(new BigDecimal(0)) <= 0) { return; } MsgMoneyDetail detail = MsgMoneyDetailFactory.createTeamReceivedMsg(uid, totalMoney, balance, receivedDate, "团队收益"); try { msgMoneyDetailService.addMsgMoneyDetail(detail); } catch (MsgMoneyDetailException e) { @@ -287,5 +299,15 @@ } } @Override public void teamDividend(Long uid, BigDecimal money, BigDecimal balance, Date receivedDate) { MsgMoneyDetail detail = MsgMoneyDetailFactory.createTeamReceivedMsg(uid, money, balance, receivedDate, "团队分红"); try { msgMoneyDetailService.addMsgMoneyDetail(detail); } catch (MsgMoneyDetailException e) { e.printStackTrace(); } } } fanli/src/main/java/com/yeshi/fanli/service/impl/order/CommonOrderServiceImpl.java
@@ -36,6 +36,7 @@ import com.yeshi.fanli.entity.jd.JDGoods; import com.yeshi.fanli.entity.jd.JDOrder; import com.yeshi.fanli.entity.jd.JDOrderItem; import com.yeshi.fanli.entity.money.InviteOrderSubsidyDebt; import com.yeshi.fanli.entity.order.CommonOrder; import com.yeshi.fanli.entity.order.CommonOrderGoods; import com.yeshi.fanli.entity.order.CommonOrderTradeIdMap; @@ -57,6 +58,7 @@ import com.yeshi.fanli.service.inter.config.ConfigService; import com.yeshi.fanli.service.inter.config.SystemCouponService; import com.yeshi.fanli.service.inter.goods.CommonGoodsService; import com.yeshi.fanli.service.inter.money.InviteOrderSubsidyDebtService; import com.yeshi.fanli.service.inter.order.CommonOrderService; import com.yeshi.fanli.service.inter.order.HongBaoOrderService; import com.yeshi.fanli.service.inter.order.HongBaoV2Service; @@ -133,6 +135,9 @@ @Resource private InviteOrderSubsidyService inviteOrderSubsidyService; @Resource private InviteOrderSubsidyDebtService inviteOrderSubsidyDebtService; @Resource private UserVIPInfoService userVIPInfoService; @@ -2062,6 +2067,21 @@ order.setOrderOrigin("3"); order.setHongBaoTypePic(CommonOrder.TYPE_INVITE); signList.add(CommonOrder.TYPE_INVITE); // 红包加上补贴金额 InviteOrderSubsidy orderSubsidy = inviteOrderSubsidyService.getByOrderNoAndType(uid, orderNo, sourceType); if (orderSubsidy != null && orderSubsidy.getMoney() != null) { BigDecimal subsidyMoney = orderSubsidy.getMoney(); // 维权金额 InviteOrderSubsidyDebt subsidyDebt = inviteOrderSubsidyDebtService.getBySourceId(orderSubsidy.getId()); if (subsidyDebt != null && subsidyDebt.getOriginMoney() != null) { subsidyMoney = subsidyMoney.subtract(subsidyDebt.getOriginMoney()); } // 最终补贴 if (subsidyMoney.compareTo(new BigDecimal(0)) > 0) { hongBao = hongBao.add(subsidyMoney); } } } order.setSignList(signList); @@ -2104,9 +2124,8 @@ stateMap.put("content", stateContent); stateMap.put("fontColor", stateFontColor); order.setAccountState(stateMap); hongbaoInfo = hongBaoState_Str + hongbaoInfo; Map<String, String> hongBaoMap = new HashMap<String, String>(); hongBaoMap.put("content", hongbaoInfo + " ¥" + hongBao.setScale(2, BigDecimal.ROUND_DOWN).toString()); hongBaoMap.put("fontColor", hongbaoInfoFontColor); fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserSystemCouponServiceImpl.java
@@ -1060,7 +1060,22 @@ couponRecord.setUpdateTime(date); userSystemCouponRecordService.insertSelective(couponRecord); // 消息推送 int goodsCount = 0; String orderId = order.getOrderId(); Integer orderType = order.getOrderType(); List<CommonOrder> orderList = commonOrderService.listBySourceTypeAndOrderId(orderType, orderId); if (orderList != null && orderList.size() > 0) { for (CommonOrder co : orderList) { goodsCount += co.getCount(); } } // 资金消息 UserInfo userInfo = userInfoService.selectByPKey(uid); userMoneyMsgNotificationService.rewardCounponReceived(uid, orderId, orderType, goodsCount, money, userInfo.getMyHongBao(), order.getThirdCreateTime()); // 券使用成功消息 try { userOtherMsgNotificationService.rewardCouponEndMsg(uid, userSystemCoupon.getSource(), 1, "使用成功"); } catch (Exception e) { fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPPreInfoServiceImpl.java
@@ -9,6 +9,7 @@ import javax.annotation.Resource; import org.springframework.context.annotation.Lazy; import org.springframework.core.task.TaskExecutor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.yeshi.utils.DateUtil; @@ -99,6 +100,10 @@ @Resource private UserLevelUpgradedNotifyService userLevelUpgradedNotifyService; @Resource(name = "taskExecutor") private TaskExecutor executor; @Override public void addUserVIPPreInfo(UserVIPPreInfo info) throws UserVIPPreInfoException { @@ -158,69 +163,179 @@ return null; } @Override @RequestSerializableByKeyService(key = "#uid") @Transactional(rollbackFor = Exception.class) public void upgradeVipByFanLiOrder(Long uid) { UserVIPPreInfo latest = getLatestProcessInfo(uid); if (latest != null && latest.getProcess() == UserVIPPreInfo.PROCESS_2) { return; } if (latest == null) { String inviteCode = userInfoExtraService.getInviteCodeByUid(uid); if (StringUtil.isNullOrEmpty(inviteCode)) { return; //未激活邀请码 } } // 自购订单到账 long doneZiGou = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY, HongBaoV2.TYPE_ZIGOU); // 高级会员限制条件 long limitZiGou7 = 0; String zigou7 = userVipConfigService.getValueByKey("vip_pre_7_zigou_order_count"); if (!StringUtil.isNullOrEmpty(zigou7)) { limitZiGou7 = Long.parseLong(zigou7); } // 验证是否满足升级高级会员 if (doneZiGou >= limitZiGou7) { twoProcess(uid, limitZiGou7, null, Constant.TYPE_REBATE); return; } // 已经成为普通会员 if (latest != null && latest.getProcess() == UserVIPPreInfo.PROCESS_1) { return; } // 普通会员条件 long limitZiGou3 = 0; String zigou3 = userVipConfigService.getValueByKey("vip_pre_3_zigou_order_count"); if (!StringUtil.isNullOrEmpty(zigou3)) { limitZiGou3 = Long.parseLong(zigou3); } if (doneZiGou >= limitZiGou3) { oneProcess(uid, limitZiGou3, null, Constant.TYPE_REBATE); } } @Override public void verifyVipPreInfo(Long uid, boolean inviteSuccess) { if (uid == null || uid <= 0) @RequestSerializableByKeyService(key = "#uid") @Transactional(rollbackFor = Exception.class) public void upgradeVipByShareOrder(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()); } if (latest == null) { String inviteCode = userInfoExtraService.getInviteCodeByUid(uid); if (StringUtil.isNullOrEmpty(inviteCode)) { return; //未激活邀请码 } } // 分享订单已到账 long doneShare = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY, HongBaoV2.TYPE_SHARE_GOODS); // 高级会员限制条件 long limitShare7 = 0; String share7 = userVipConfigService.getValueByKey("vip_pre_7_share_order_count"); if (!StringUtil.isNullOrEmpty(share7)) { limitShare7 = Long.parseLong(share7); } // 验证是否满足升级高级会员 if (doneShare >= limitShare7) { twoProcess(uid, limitShare7, null, Constant.TYPE_SHAER); return; } // 已经成为普通会员 if (latest != null && latest.getProcess() == UserVIPPreInfo.PROCESS_1) { return; } // 普通会员条件 long limitShare3 = 0; String share3 = userVipConfigService.getValueByKey("vip_pre_3_share_order_count"); if (!StringUtil.isNullOrEmpty(share3)) { limitShare3 = Long.parseLong(share3); } if (doneShare >= limitShare3) { oneProcess(uid, limitShare3, null, Constant.TYPE_SHAER); } } @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) { twoProcess(bossId, limitFirst7, limitSecond7, null); return; } // 已经成为普通会员 if (latest != null && latest.getProcess() == UserVIPPreInfo.PROCESS_1) { return; } // 普通会员 条件 long limitFirst3 = 0; String first = userVipConfigService.getValueByKey("vip_pre_3_first_level_team_count"); if (!StringUtil.isNullOrEmpty(first)) { limitFirst3 = Long.parseLong(first); } long limitSecond3 = 0; String second = userVipConfigService.getValueByKey("vip_pre_3_second_level_team_count"); if (!StringUtil.isNullOrEmpty(second)) { limitSecond3 = Long.parseLong(second); } if (doneFirst >= limitFirst3 && doneSecond >= limitSecond3) { oneProcess(bossId, limitFirst3, limitSecond3, null); } } // 上级验证 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); } } /** * 一阶段 * @@ -231,120 +346,55 @@ * @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); // 升级弹框提示 UserLevelUpgradedNotify notify = new UserLevelUpgradedNotify(); notify.setUid(uid); notify.setFromLevel(UserLevelEnum.daRen); notify.setToLevel(UserLevelEnum.normalVIP); notify.setValid(true); notify.setCreateTime(new Date()); userLevelUpgradedNotifyService.addUserLevelUpgradedNotify(notify); // 赠送金币 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(); private void oneProcess(Long uid, long limit1, Long limit2, Integer type) { try { String item = null; if (type == null) { item = "邀请粉丝"; } else if (type == Constant.TYPE_REBATE) { item = "返利订单"; } else { item = "分享订单"; } 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, limit1, limit2, type); // 升级弹框提示 UserLevelUpgradedNotify notify = new UserLevelUpgradedNotify(); notify.setUid(uid); notify.setFromLevel(UserLevelEnum.daRen); notify.setToLevel(UserLevelEnum.normalVIP); notify.setValid(true); notify.setCreateTime(new Date()); userLevelUpgradedNotifyService.addUserLevelUpgradedNotify(notify); // 金币奖励 goldcoinReward(uid); // 是否存在下级脱离期限 -更新不脱离 userInviteSeparateService.updateInvalidByBossId(uid); // 提醒上级 remindBoss(uid, "普通会员", item, upgradeTime, true); } catch (Exception e) { e.printStackTrace(); } return process; } /** @@ -357,97 +407,98 @@ * @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); // 升级弹框提示 UserLevelUpgradedNotify notify = new UserLevelUpgradedNotify(); notify.setUid(uid); notify.setFromLevel(UserLevelEnum.normalVIP); notify.setToLevel(UserLevelEnum.highVIP); notify.setValid(true); notify.setCreateTime(new Date()); userLevelUpgradedNotifyService.addUserLevelUpgradedNotify(notify); // 升级消息 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); private void twoProcess(Long uid, long limit1, Long limit2, Integer type) { try { String item = null; if (type == null) { item = "邀请粉丝"; } else if (type == Constant.TYPE_REBATE) { item = "返利订单"; } else { item = "分享订单"; } Date upgradeTime = new Date(); UserVIPPreInfo info = new UserVIPPreInfo(); info.setUid(uid); info.setProcess(UserVIPPreInfo.PROCESS_2); info.setCreateTime(upgradeTime); info.setUpdateTime(upgradeTime); addUserVIPPreInfo(info); // 升级弹框提示 UserLevelUpgradedNotify notify = new UserLevelUpgradedNotify(); notify.setUid(uid); notify.setFromLevel(UserLevelEnum.normalVIP); notify.setToLevel(UserLevelEnum.highVIP); notify.setValid(true); notify.setCreateTime(new Date()); userLevelUpgradedNotifyService.addUserLevelUpgradedNotify(notify); // 升级福利-赠送奖励券 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); } // 升级消息 int daysBetween = 0; boolean divorced = false; String beforeName = "快省达人"; UserVIPPreInfo pre1 = userVIPPreInfoMapper.selectByUidAndProcess(uid, UserVIPPreInfo.PROCESS_1); if (pre1 != null) { beforeName = "普通会员"; daysBetween = DateUtil.daysBetween(pre1.getCreateTime(), upgradeTime); } else { Date registerTime = new Date(1577836800000L); UserInfoRegister userInfoRegister = userInfoRegisterService.selectByPrimaryKey(uid); if (userInfoRegister != null && userInfoRegister.getCreateTime() != null) { registerTime = userInfoRegister.getCreateTime(); } daysBetween = DateUtil.daysBetween(registerTime, upgradeTime); // 金币奖励 (直接升级高级会员补齐一级奖励) goldcoinReward(uid); // 需要发送脱离信息 divorced = true; } userAccountMsgNotificationService.vipPreUpgrade(uid, beforeName, "高级会员", daysBetween, limit1, limit2, type); // 提醒上级 remindBoss(uid, "高级会员", item, upgradeTime, divorced); } catch (Exception e) { e.printStackTrace(); LogHelper.error(e); } return process; } /** * 升级奖励金币 * @param uid */ private void goldcoinReward(Long uid) { 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)); // 消息 UserInfoExtra userInfoExtra = userInfoExtraService.getUserInfoExtra(uid); userOtherMsgNotificationService.goldCoinSystemGiveMsg(uid, goldcoinNum, userInfoExtra.getGoldCoin()); } } @Override public void remindBoss(Long uid, String rankName, String item, Date time, boolean divorced) { // 是否存在上级 @@ -493,8 +544,7 @@ @Override public UserVIPPreInfo selectByUidAndProcess(Long uid, int process) { UserVIPPreInfo info = userVIPPreInfoMapper.selectByUidAndProcess(uid, process); return info; return userVIPPreInfoMapper.selectByUidAndProcess(uid, process); } } fanli/src/main/java/com/yeshi/fanli/service/inter/money/InviteOrderSubsidyDebtService.java
@@ -61,4 +61,11 @@ */ public BigDecimal getTotalDebtMoney(Long uid,Date maxEstimatePayTime); /** * 根据补贴id查询 * @param sourceId * @return */ public InviteOrderSubsidyDebt getBySourceId(Long sourceId); } fanli/src/main/java/com/yeshi/fanli/service/inter/money/msg/UserMoneyMsgNotificationService.java
@@ -148,10 +148,11 @@ * 团队收益消息 * @param uid * @param money 本次到账金额 * @param subsidy 补贴金额 * @param balance 余额 * @param receivedDate 结算月度 */ public void teamReceive(Long uid, BigDecimal money, BigDecimal balance, Date receivedDate); public void teamReceive(Long uid, BigDecimal money,BigDecimal subsidy, BigDecimal balance, Date receivedDate); /** * 使用奖励券 @@ -166,6 +167,15 @@ public void rewardCounponReceived(Long uid, String orderId, int orderType, int goodsCount, BigDecimal money, BigDecimal balance, Date downTime); /** * 团队分红 * @param uid * @param money * @param balance * @param receivedDate */ public void teamDividend(Long uid, BigDecimal money, BigDecimal balance, Date receivedDate); } fanli/src/main/java/com/yeshi/fanli/service/inter/user/vip/UserVIPPreInfoService.java
@@ -38,12 +38,6 @@ */ public UserVIPPreInfo getProcessInfo(Long uid,Date time); /** * 会员等级添加并验证 * @param uid * @param inviteSuccess */ public void verifyVipPreInfo(Long uid, boolean inviteSuccess); /** * 根据用户ID与步骤查询 @@ -79,4 +73,22 @@ */ public void remindBoss(Long uid, String rankName, String item, Date time, boolean divorced); /** * 自购订单到账 满足升级验证 * @param uid */ public void upgradeVipByFanLiOrder(Long uid); /** * 分享订单到账 -满足升级验证 * @param uid */ public void upgradeVipByShareOrder(Long uid); /** * 粉丝完成收货-验证直接-间接粉丝 * @param uid 粉丝id */ public void upgradeVipByTeamNum(Long uid); } fanli/src/main/java/com/yeshi/fanli/util/factory/msg/MsgMoneyDetailFactory.java
@@ -364,7 +364,8 @@ * @param beiZhu * @return */ public static MsgMoneyDetail createTeamReceivedMsg(Long uid, BigDecimal money, BigDecimal balance, Date receivedDate) { public static MsgMoneyDetail createTeamReceivedMsg(Long uid, BigDecimal money, BigDecimal balance, Date receivedDate, String teamName) { if (money == null || balance == null || uid == null) return null; @@ -376,7 +377,7 @@ listMsg.add(CommonMsgItemVOFactory.createMsgItemVO(new ClientTextStyleVO("结算月度", ClientTextStyleVO.COLOR_TITLE), contentList)); listMsg.add(CommonMsgItemVOFactory.createMsgItemVO(new ClientTextStyleVO("到账类目", ClientTextStyleVO.COLOR_TITLE), new ClientTextStyleVO("团队收益", ClientTextStyleVO.COLOR_CONTENT), true)); new ClientTextStyleVO(teamName, ClientTextStyleVO.COLOR_CONTENT), true)); List<ClientTextStyleVO> contentList2 = new ArrayList<>(); contentList2.add(new ClientTextStyleVO("¥" + money.setScale(2, BigDecimal.ROUND_DOWN), ClientTextStyleVO.COLOR_HIGHLIGHT_CONTENT)); fanli/src/main/java/com/yeshi/fanli/util/rocketmq/consumer/user/UserVIPMessageListener.java
@@ -10,10 +10,10 @@ import com.aliyun.openservices.ons.api.MessageListener; import com.google.gson.Gson; import com.yeshi.fanli.dto.mq.order.OrderTopicTagEnum; import com.yeshi.fanli.dto.mq.order.body.OrderConfirmMQMsg; import com.yeshi.fanli.dto.mq.order.body.OrderMoneyRecievedMQMsg; import com.yeshi.fanli.dto.mq.user.UserTopicTagEnum; import com.yeshi.fanli.dto.mq.user.body.ThreeSaleSeparateMQMsg; import com.yeshi.fanli.dto.mq.user.body.UserInviteMQMsg; import com.yeshi.fanli.dto.mq.user.body.UserLevelChangedMQMsg; import com.yeshi.fanli.entity.bus.user.UserInfo; import com.yeshi.fanli.log.LogHelper; @@ -51,12 +51,7 @@ // 邀请相关 if (MQTopicName.TOPIC_USER.name().equalsIgnoreCase(message.getTopic())) { // 邀请成功 if (tag.equalsIgnoreCase(UserTopicTagEnum.inviteSuccess.name())) { UserInviteMQMsg msg = new Gson().fromJson(new String(message.getBody()), UserInviteMQMsg.class); // 会员等级升级 userVIPPreInfoService.verifyVipPreInfo(msg.getBossId(), true); } else if (tag.equalsIgnoreCase(UserTopicTagEnum.userLevelChanged.name())) {// 用户等级发生变化 if (tag.equalsIgnoreCase(UserTopicTagEnum.userLevelChanged.name())) {// 用户等级发生变化 UserLevelChangedMQMsg msg = new Gson().fromJson(new String(message.getBody()), UserLevelChangedMQMsg.class); // 更新上2级的邀请统计 @@ -89,12 +84,18 @@ OrderMoneyRecievedMQMsg.class); if (dto != null) { if (dto.getType() == OrderMoneyRecievedMQMsg.TYPE_ZIGOU) {// 自购到账 // 会员等级升级 userVIPPreInfoService.verifyVipPreInfo(dto.getUid(), false); // 会员升级-自购订单数量验证 userVIPPreInfoService.upgradeVipByFanLiOrder(dto.getUid()); } else if (dto.getType() == OrderMoneyRecievedMQMsg.TYPE_SHARE) {// 分享到账 // 会员等级升级 userVIPPreInfoService.verifyVipPreInfo(dto.getUid(), false); } // 会员升级-分享订单数量验证 userVIPPreInfoService.upgradeVipByShareOrder(dto.getUid()); } } } else if (tag.equalsIgnoreCase(OrderTopicTagEnum.orderConfirm.name())) { OrderConfirmMQMsg dto = new Gson().fromJson(new String(message.getBody()),OrderConfirmMQMsg.class); if (dto != null) { // 会员等级升级-粉丝数量验证 userVIPPreInfoService.upgradeVipByTeamNum(dto.getSourceUid()); } } } fanli/src/main/resource/rocket/consumer.xml
@@ -200,7 +200,7 @@ </bean> <!-- 邀请图修改消息订阅 --> <!-- vip自动升级 --> <bean id="userVIPMessageListener" class="com.yeshi.fanli.util.rocketmq.consumer.user.UserVIPMessageListener"></bean> <!-- Group ID 订阅同一个 Topic,可以创建多个 ConsumerBean --> @@ -223,18 +223,17 @@ <bean class="com.aliyun.openservices.ons.api.bean.Subscription"> <property name="topic" value="TOPIC_USER" /> <property name="expression" value="inviteSuccess||userLevelChanged||threeSaleSeparate" /> value="userLevelChanged||threeSaleSeparate" /> </bean> </key> </entry> <!-- 订单到账 --> <!-- 订单到账 订单收货--> <entry value-ref="userVIPMessageListener"> <key> <bean class="com.aliyun.openservices.ons.api.bean.Subscription"> <property name="topic" value="TOPIC_ORDER" /> <property name="expression" value="orderFanLiActual" /> <property name="expression" value="orderFanLiActual||orderConfirm" /> </bean> </key> </entry>