admin
2021-09-30 42411e4a26461229c6bca6e89ca55e98a80f5a4e
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneySettleServiceImpl.java
@@ -13,6 +13,8 @@
import javax.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -64,6 +66,8 @@
@Service
public class OrderMoneySettleServiceImpl implements OrderMoneySettleService {
    Logger logger = LoggerFactory.getLogger(OrderMoneySettleService.class);
    @Resource
    private HongBaoV2Mapper hongBaoV2Mapper;
@@ -112,8 +116,16 @@
    private RocketMQManager rocketMQManager;
    // 下级被封禁,红包失效
    private void invalidHongBaoForbidden(Long id) {
        HongBaoV2 updateHongBaoV2 = new HongBaoV2(id);
    private void invalidHongBaoForbidden(HongBaoV2 hongBaoV2) throws TeamRewardDebtException {
        if (hongBaoV2.getState() == HongBaoV2.STATE_SHIXIAO || hongBaoV2.getState() == HongBaoV2.STATE_YILINGQU || hongBaoV2.getState() == HongBaoV2.STATE_LINGQUING)
            return;
        //如果在偿还里面就先偿还,然后再失效
        TeamRewardDebt debt = teamRewardDebtService.selectBySourceId(hongBaoV2.getId());
        if (debt != null && debt.getLeftMoney().compareTo(hongBaoV2.getMoney()) <= 0) {
            teamRewardDebtService.repayDebt(debt.getId(), hongBaoV2.getMoney(), "封禁失效,先偿还再失效");
        }
        HongBaoV2 updateHongBaoV2 = new HongBaoV2(hongBaoV2.getId());
        updateHongBaoV2.setState(HongBaoV2.STATE_SHIXIAO);
        updateHongBaoV2.setBeizhu("封禁失效");
        updateHongBaoV2.setUpdateTime(new Date());
@@ -125,7 +137,7 @@
    public void inviteSettleTB(Long uid, Date maxPregetTime) throws OrderMoneySettleException {
        // 查询UID的一二级邀请赚
        int sourceType = Constant.SOURCE_TYPE_TAOBAO;
        inviteSettle(uid,sourceType,maxPregetTime);
        inviteSettle(uid, sourceType, maxPregetTime);
    }
    @Transactional(rollbackFor = Exception.class)
@@ -133,7 +145,7 @@
    public void inviteSettleJD(Long uid, Date maxPregetTime) throws OrderMoneySettleException {
        // 查询UID的一二级邀请赚
        int sourceType = Constant.SOURCE_TYPE_JD;
        inviteSettle(uid,sourceType,maxPregetTime);
        inviteSettle(uid, sourceType, maxPregetTime);
    }
    @Transactional(rollbackFor = Exception.class)
@@ -141,7 +153,7 @@
    public void inviteSettlePDD(Long uid, Date maxPregetTime) throws OrderMoneySettleException {
        // 查询UID的一二级邀请赚
        int sourceType = Constant.SOURCE_TYPE_PDD;
        inviteSettle(uid,sourceType,maxPregetTime);
        inviteSettle(uid, sourceType, maxPregetTime);
    }
    @Transactional(rollbackFor = Exception.class)
@@ -149,7 +161,7 @@
    public void inviteSettleVipShop(Long uid, Date maxPregetTime) throws OrderMoneySettleException {
        // 查询UID的一二级邀请赚
        int sourceType = Constant.SOURCE_TYPE_VIP;
        inviteSettle(uid,sourceType,maxPregetTime);
        inviteSettle(uid, sourceType, maxPregetTime);
    }
@@ -158,7 +170,7 @@
    public void inviteSettleSuning(Long uid, Date maxPregetTime) throws OrderMoneySettleException {
        // 查询UID的一二级邀请赚
        int sourceType = Constant.SOURCE_TYPE_SUNING;
        inviteSettle(uid,sourceType,maxPregetTime);
        inviteSettle(uid, sourceType, maxPregetTime);
    }
@@ -190,7 +202,11 @@
                        // 上级用户不是正常用户,订单均不能到账
                        UserInfo userInfo = userInfoMapper.selectAvailableByPrimaryKey(co.getUserInfo().getId());
                        if (userInfo == null || userInfo.getState() != UserInfo.STATE_NORMAL) {
                            invalidHongBaoForbidden(item.getId());
                            try {
                                invalidHongBaoForbidden(item);
                            } catch (TeamRewardDebtException e) {
                                throw new OrderMoneySettleException(10, "偿还出错");
                            }
                            hongBaoList.remove(i);
                            i--;
                        }
@@ -518,6 +534,7 @@
    private void fanliInvite(List<HongBaoV2> hongBaoList, Long uid, int sourceType, String key, Date maxPreGetTime)
            throws TeamEincomeRecordException, ParamsException, TeamRewardDebtException {
        logger.info("邀请奖金预到账:uid-{} sourceType-{} key-{}", new Object[]{uid, sourceType, key});
        List<Long> hbIdList = new ArrayList<>();
        BigDecimal invitemoney = new BigDecimal(0);
        Set<String> inviteOrders = new HashSet<>();
@@ -529,15 +546,17 @@
                continue;
            hongBao = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(hongBao.getId());
            if (hongBao.getState() == HongBaoV2.STATE_BUKELINGQU || hongBao.getState() == HongBaoV2.STATE_KELINGQU) {
                logger.info("邀请奖金预到账-每个红包-到账开始:hongbaoid-{}", hongBao.getId());
                TeamRewardDebt debt = teamRewardDebtService.selectBySourceId(hongBao.getId());
                BigDecimal money = hongBao.getMoney();
                if (debt != null && debt.getLeftMoney().compareTo(new BigDecimal(0)) > 0
                        && money.compareTo(debt.getLeftMoney()) >= 0) {
                    money = money.subtract(debt.getLeftMoney());
                    // 还钱
                    teamRewardDebtService.repayDebt(debt.getId(), debt.getLeftMoney());
                    teamRewardDebtService.repayDebt(debt.getId(), debt.getLeftMoney(), null);
                    logger.info("邀请奖金预到账-每个红包-还款:hongbaoid-{} debtId-{} debtMoney-{}", new Object[]{hongBao.getId(), debt.getId(), debt.getLeftMoney()});
                }
                logger.info("邀请奖金预到账-每个红包:hongbaoid-{} money-{}", new Object[]{hongBao.getId(), money});
                invitemoney = invitemoney.add(money);
                HongBaoV2 updateHongBao = new HongBaoV2();
                updateHongBao.setId(hongBao.getId());
@@ -549,6 +568,7 @@
                hbIdList.add(hongBao.getId());
                HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByHongBaoId(hongBao.getParent().getId());
                inviteOrders.add(hongBaoOrder.getCommonOrder().getOrderNo());
                logger.info("邀请奖金预到账-每个红包-到账成功:hongbaoid-{}", hongBao.getId());
            }
        }
@@ -556,6 +576,7 @@
        if (invitemoney.compareTo(new BigDecimal(0)) > 0) {
            // 获取当前的月份
            teamRewardManager.addToEincome(uid, maxPreGetTime, invitemoney, sourceType);
            logger.info("邀请奖金预到账-添加到团队收益成功:uid-{} day-{} money-{} sourceType-{}", new Object[]{uid, maxPreGetTime, invitemoney, sourceType});
        }
        hongBaoV2SettleTempService.addTemp(hbIdList, key);