yujian
2020-04-15 7b3994d42861437494156d7d7b4e987068f3682c
vip 自动升级
12个文件已修改
552 ■■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/controller/client/v2/UserOrderControllerV2.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/dao/mybatis/money/InviteOrderSubsidyDebtMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/mapping/money/InviteOrderSubsidyDebtMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/money/InviteOrderSubsidyDebtServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/money/msg/UserMoneyMsgNotificationServiceImpl.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/CommonOrderServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPPreInfoServiceImpl.java 408 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/money/InviteOrderSubsidyDebtService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/money/msg/UserMoneyMsgNotificationService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/user/vip/UserVIPPreInfoService.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/Constant.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/util/rocketmq/consumer/user/UserVIPMessageListener.java 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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) {
@@ -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.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,7 +691,7 @@
            orderRebateVO.setUserLevel(userLevel.name());
        }
        
        // 上级返利
        // 超级会员返利
        if (upperLevel != null) {
            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,11 +278,20 @@
    @Override
    public void teamReceive(Long uid, BigDecimal money, BigDecimal balance, Date receivedDate) {
        if (money == null || money.compareTo(new BigDecimal(0)) <= 0) {
    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, money, balance, receivedDate, "团队收益");
        MsgMoneyDetail detail = MsgMoneyDetailFactory.createTeamReceivedMsg(uid, totalMoney, balance, receivedDate, "团队收益");
        try {
            msgMoneyDetailService.addMsgMoneyDetail(detail);
        } catch (MsgMoneyDetailException e) {
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,7 +2124,6 @@
            stateMap.put("content", stateContent);
            stateMap.put("fontColor", stateFontColor);
            order.setAccountState(stateMap);
            hongbaoInfo = hongBaoState_Str + hongbaoInfo;
            Map<String, String> hongBaoMap = new HashMap<String, String>();
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;
@@ -100,6 +101,10 @@
    @Resource
    private UserLevelUpgradedNotifyService userLevelUpgradedNotifyService;
    @Resource(name = "taskExecutor")
    private TaskExecutor executor;
    @Override
    public void addUserVIPPreInfo(UserVIPPreInfo info) throws UserVIPPreInfoException {
        if (info == null || info.getUid() == null || info.getProcess() == null)
@@ -158,68 +163,178 @@
        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)
            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) {
    @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;
            }
            
            // 自购订单
            long doneZiGou = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY,
                    HongBaoV2.TYPE_ZIGOU);
            // 分享订单
        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(uid);
        UserInviteValidNum userInviteValidNum = userInviteValidNumService.selectByPrimaryKey(bossId);
            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) {
        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;
            }
            // 二阶段
            twoProcess(uid, doneZiGou, doneShare, doneFirst, doneSecond);
        } catch (Exception e) {
            LogHelper.errorDetailInfo(e);
        // 已经成为普通会员
        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);
        }
    }
    /**
     * 一阶段
@@ -231,60 +346,17 @@
     * @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) {
    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);
@@ -300,8 +372,7 @@
                    registerTime = userInfoRegister.getCreateTime();
                }
                int daysBetween = DateUtil.daysBetween(registerTime, new Date());
                userAccountMsgNotificationService.vipPreUpgrade(uid, "快省达人", "普通会员", daysBetween, targetNum1, targetNum2, type);
            userAccountMsgNotificationService.vipPreUpgrade(uid, "快省达人", "普通会员", daysBetween, limit1, limit2, type);
                
                // 升级弹框提示
                UserLevelUpgradedNotify notify = new UserLevelUpgradedNotify();
@@ -312,39 +383,18 @@
                notify.setCreateTime(new Date());
                userLevelUpgradedNotifyService.addUserLevelUpgradedNotify(notify);
                
                // 赠送金币
                String goldcoin = userVipConfigService.getValueByKey("vip_pre_3_gift_goldcoin");
                if (!StringUtil.isNullOrEmpty(goldcoin)) {
            // 金币奖励
            goldcoinReward(uid);
                    
                    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) {
        } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return process;
    }
    
    
    /**
@@ -357,55 +407,17 @@
     * @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) {
    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);
@@ -423,12 +435,7 @@
                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);
@@ -436,15 +443,59 @@
                    userSystemCouponService.rewardCouponWin(uid, UserSystemCoupon.SOURCE_SYSTEM_PUSH, num, true, percent);
                }
                
                // 提醒上级
                remindBoss(uid, "高级会员", item, upgradeTime, false);
            // 升级消息
            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());
        }
    }
    
@@ -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);
    /**
     * 使用奖励券
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/Constant.java
@@ -257,7 +257,7 @@
            "4c7b166fecb6d9f53837e993f2214673", "", "");
    // 新的规则生效时间
    public static final long NEW_ORDER_FANLI_RULE_TIME = TimeUtil.convertToTimeTemp("2020-04-18", "yyyy-MM-dd");
    public static final long NEW_ORDER_FANLI_RULE_TIME = TimeUtil.convertToTimeTemp("2020-04-14", "yyyy-MM-dd");
    // 新人抽奖-最大次数
    public static final int MAX_COUNT_LOTTERY_NEWBIES = 5;
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,13 +84,19 @@
                        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());
                }
            }
        }