admin
2019-12-24 4d0c5d771b04d7ba32471df58c91c37dabe96bbf
返利订单到账时同时扣除维权金额
4个文件已修改
176 ■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/service/impl/money/tb/TaoBaoWeiQuanDrawBackServiceImpl.java 105 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneySettleServiceImpl.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/inter/money/tb/TaoBaoWeiQuanDrawBackService.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/money/tb/TaoBaoWeiQuanDrawBackServiceImpl.java
@@ -47,7 +47,6 @@
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.factory.UserMoneyDetailFactory;
import com.yeshi.fanli.vo.order.CommonOrderVO;
@Service
public class TaoBaoWeiQuanDrawBackServiceImpl implements TaoBaoWeiQuanDrawBackService {
@@ -96,7 +95,7 @@
                taoBaoWeiQuanDrawBack.getUser().getId());
    }
    @Transactional(rollbackFor=Exception.class)
    @Transactional(rollbackFor = Exception.class)
    private void addDebt(Long uid, Long hbId, BigDecimal money) throws UserMoneyDebtException {
        UserMoneyDebt debt = new UserMoneyDebt();
        debt.setBeiZhu(null);
@@ -124,19 +123,19 @@
        return money;
    }
    @Transactional(rollbackFor=Exception.class)
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void doWeiQuanFanli(String orderId) throws TaoBaoWeiQuanException {
    public Map<Long, BigDecimal> doWeiQuanFanli(String orderId, boolean subMoneySync) throws TaoBaoWeiQuanException {
        if (StringUtil.isNullOrEmpty(orderId))
            throw new TaoBaoWeiQuanException(1, "订单号为空值");
        // 查询是否为维权订单
        List<TaoBaoWeiQuanOrder> list = taoBaoWeiQuanOrderService.getWeiQuanSuccessOrders(orderId);
        if (list == null || list.size() == 0)
            return;
            return null;
        List<HongBaoV2> mainHongBaoList = getWeiQuanMainHongBao(list, orderId);
        if (mainHongBaoList == null || mainHongBaoList.size() == 0)
            return;
            return null;
        for (int i = 0; i < mainHongBaoList.size(); i++) {
            // 锁行,防止重复 操作
            HongBaoV2 hb = hongBaoV2Mapper.selectByPrimaryKeyForUpdate(mainHongBaoList.get(i).getId());
@@ -149,7 +148,7 @@
        }
        if (mainHongBaoList == null || mainHongBaoList.size() == 0)
            return;
            return null;
        // 主用户ID
        Map<Long, BigDecimal> fanMoneyMap = new HashMap<>();
@@ -168,6 +167,7 @@
        // 计算每个用户的返利比例
        Iterator<Long> its = fanMoneyMap.keySet().iterator();
        Map<Long, BigDecimal> userSubMoneyMap = new HashMap<>();
        while (its.hasNext()) {
            Long uid = its.next();
            BigDecimal userGetMoney = fanMoneyMap.get(uid);
@@ -222,53 +222,57 @@
            // 退款金额
            BigDecimal drawBackMoney = computeDrawBackMoney(settleMent, wqMoney, userGetMoney);
            // 计算资金是否充足
            UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
            if (user != null && user.getMyHongBao().compareTo(drawBackMoney) < 0)// 资金不足
            {
                // 添加债务
                for (TaoBaoWeiQuanDrawBack drawBack : newWeiQuanDrawBackList) {
                    TaoBaoOrder taoBaoOrder = taoBaoOrderMapper.selectTaoBaoOrderByTradeId(drawBack.getOrderItemId());
                    if (taoBaoOrder != null) {
                        TaoBaoWeiQuanOrder weiQuanOrder = taoBaoWeiQuanOrderService
                                .selectByTradeId(drawBack.getOrderItemId());
                        CommonOrder co = commonOrderMapper.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO,
                                drawBack.getOrderItemId());
                        if (co != null) {
                            HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(co.getId());
                            if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null) {
                                BigDecimal drawback = computeDrawBackMoney(taoBaoOrder.getSettlement(),
                                        weiQuanOrder.getMoney(), hongBaoOrder.getHongBaoV2().getMoney());
                                try {
                                    addDebt(uid, hongBaoOrder.getHongBaoV2().getId(), drawback);
                                } catch (UserMoneyDebtException e) {
                                    throw new TaoBaoWeiQuanException(101, "资金借贷异常");
            userSubMoneyMap.put(uid, drawBackMoney);
            if (subMoneySync) {
                // 计算资金是否充足
                UserInfo user = userInfoMapper.selectByPrimaryKey(uid);
                if (user != null && user.getMyHongBao().compareTo(drawBackMoney) < 0)// 资金不足
                {
                    // 添加债务
                    for (TaoBaoWeiQuanDrawBack drawBack : newWeiQuanDrawBackList) {
                        TaoBaoOrder taoBaoOrder = taoBaoOrderMapper
                                .selectTaoBaoOrderByTradeId(drawBack.getOrderItemId());
                        if (taoBaoOrder != null) {
                            TaoBaoWeiQuanOrder weiQuanOrder = taoBaoWeiQuanOrderService
                                    .selectByTradeId(drawBack.getOrderItemId());
                            CommonOrder co = commonOrderMapper.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO,
                                    drawBack.getOrderItemId());
                            if (co != null) {
                                HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(co.getId());
                                if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null) {
                                    BigDecimal drawback = computeDrawBackMoney(taoBaoOrder.getSettlement(),
                                            weiQuanOrder.getMoney(), hongBaoOrder.getHongBaoV2().getMoney());
                                    try {
                                        addDebt(uid, hongBaoOrder.getHongBaoV2().getId(), drawback);
                                    } catch (UserMoneyDebtException e) {
                                        throw new TaoBaoWeiQuanException(101, "资金借贷异常");
                                    }
                                }
                            }
                        }
                    }
                    continue;
                }
                continue;
            }
            UserMoneyDetail userMoneyDetail = null;
            // 新版资金记录
            try {
                userMoneyDetail = UserMoneyDetailFactory.createFanLiWeiQuan(uid, weiQuanDrawBack, drawBackMoney);
            } catch (UserMoneyDetailException e) {
                UserMoneyDetail userMoneyDetail = null;
                // 新版资金记录
                try {
                    LogHelper.errorDetailInfo(e);
                } catch (Exception e1) {
                    e1.printStackTrace();
                    userMoneyDetail = UserMoneyDetailFactory.createFanLiWeiQuan(uid, weiQuanDrawBack, drawBackMoney);
                } catch (UserMoneyDetailException e) {
                    try {
                        LogHelper.errorDetailInfo(e);
                    } catch (Exception e1) {
                        e1.printStackTrace();
                    }
                }
            }
            userMoneyService.subUserMoney(uid, drawBackMoney, userMoneyDetail);
                userMoneyService.subUserMoney(uid, drawBackMoney, userMoneyDetail);
            // 新版通知
            userMoneyMsgNotificationService.fanliOrderWeiQuan(uid, orderId, Constant.SOURCE_TYPE_TAOBAO, drawBackMoney,
                    userInfoMapper.selectByPrimaryKey(uid).getMyHongBao());
                // 新版通知
                userMoneyMsgNotificationService.fanliOrderWeiQuan(uid, orderId, Constant.SOURCE_TYPE_TAOBAO,
                        drawBackMoney, userInfoMapper.selectByPrimaryKey(uid).getMyHongBao());
            }
        }
        return userSubMoneyMap;
    }
    private List<HongBaoV2> getWeiQuanMainHongBao(List<TaoBaoWeiQuanOrder> list, String orderId) {
@@ -305,14 +309,14 @@
        return mainHongBaoList;
    }
    @Transactional(rollbackFor=Exception.class)
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void doWeiQuanShare(String orderId) throws TaoBaoWeiQuanException {
        if (StringUtil.isNullOrEmpty(orderId))
            throw new TaoBaoWeiQuanException(1, "订单号为空值");
        List<TaoBaoWeiQuanOrder> list = taoBaoWeiQuanOrderService.getWeiQuanSuccessOrders(orderId);
        if(list==null||list.size()==0)
        if (list == null || list.size() == 0)
            return;
        List<HongBaoV2> mainHongBaoList = getWeiQuanMainHongBao(list, orderId);
@@ -444,7 +448,7 @@
        }
    }
    @Transactional(rollbackFor=Exception.class)
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void doWeiQuanInvite(String orderId) throws TaoBaoWeiQuanException {
        if (StringUtil.isNullOrEmpty(orderId))
@@ -572,18 +576,17 @@
        else
            return null;
    }
    @Override
    public List<TaoBaoWeiQuanDrawBack> getByOrderItemId(String orderItemId) {
        return taoBaoWeiQuanDrawBackMapper.selectByOrderItemId(orderItemId);
    }
    @Override
    public TaoBaoWeiQuanDrawBack selectByOrderItemIdAndUid(String orderItemId, Long uid) {
        return taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(orderItemId,uid);
        return taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(orderItemId, uid);
    }
    @Override
    public TaoBaoWeiQuanDrawBack selectByHongBaoId(Long hbId) {
        Long uid = null;
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneySettleServiceImpl.java
@@ -114,7 +114,7 @@
    @Resource
    private HongBaoV2SettleTempService hongBaoV2SettleTempService;
    @Transactional(rollbackFor=Exception.class)
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void inviteSettleTB(Long uid) throws OrderMoneySettleException {
        // 查询UID的一二级邀请赚
@@ -179,7 +179,7 @@
        System.out.println(new Gson().toJson(mqMsg));
    }
    @Transactional(rollbackFor=Exception.class)
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void inviteSettleJD(Long uid) throws OrderMoneySettleException {
        // 查询UID的一二级邀请赚
@@ -238,7 +238,7 @@
        }
    }
    @Transactional(rollbackFor=Exception.class)
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void inviteSettlePDD(Long uid) throws OrderMoneySettleException {
        // 查询UID的一二级邀请赚
@@ -297,7 +297,7 @@
        }
    }
    @Transactional(rollbackFor=Exception.class)
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void shareSettleTB(Long uid) throws OrderMoneySettleException {
        /**
@@ -342,7 +342,7 @@
        }
    }
    @Transactional(rollbackFor=Exception.class)
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void shareSettleJD(Long uid) throws OrderMoneySettleException {
        /**
@@ -383,7 +383,7 @@
        }
    }
    @Transactional(rollbackFor=Exception.class)
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void shareSettlePDD(Long uid) throws OrderMoneySettleException {
        /**
@@ -424,7 +424,7 @@
        }
    }
    @Transactional(rollbackFor=Exception.class)
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void ziGouSettle(String orderId, int sourceType, String taskKey) throws OrderMoneySettleException {
        // 查询同一订单号的红包
@@ -467,6 +467,24 @@
                        userHongBao.put(uid, new ArrayList<>());
                    userHongBao.get(uid).add(hb);
                }
            }
        }
        // 获取维权资金
        if (sourceType == Constant.SOURCE_TYPE_TAOBAO) {
            try {
                Map<Long, BigDecimal> userSubMoneyMap = taoBaoWeiQuanDrawBackService.doWeiQuanFanli(orderId, false);
                if (userSubMoneyMap != null) {
                    for (Iterator<Long> its = userMoney.keySet().iterator(); its.hasNext();) {
                        Long uid = its.next();
                        if (userSubMoneyMap.get(uid) != null) {
                            // 减去维权资金
                            userMoney.put(uid, userMoney.get(uid).subtract(userSubMoneyMap.get(uid)));
                        }
                    }
                }
            } catch (Exception e) {
                throw new OrderMoneySettleException(2, "维权订单出错");
            }
        }
@@ -521,31 +539,6 @@
            userSystemCouponService.updateStateByArrivalAccount(orderId);
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 维权扣款(2018-08-05后开始实行)
        try {
            if (sourceType == Constant.SOURCE_TYPE_TAOBAO)
                taoBaoWeiQuanDrawBackService.doWeiQuanFanli(orderId);
        } catch (TaoBaoWeiQuanException e) {
            if (e.getCode() == TaoBaoWeiQuanException.CODE_NEDD_UPDATE_ORDER) {
                List<TaoBaoOrder> olist = taoBaoOrderService.getTaoBaoOrderByOrderId(orderId);
                if (olist != null && olist.size() > 0) {
                    long time = TimeUtil.convertToTimeTemp(olist.get(0).getCreateTime(), "yyyy-MM-dd HH:mm:ss");
                    olist = TaoKeOrderApiUtil.getTaoBaoCommonOrderList(time, time + 1000 * 2L, 1);
                    if (olist != null && olist.size() > 0) {
                        for (int i = 0; i < olist.size(); i++) {
                            if (!olist.get(i).getOrderId().equalsIgnoreCase(orderId)) {// 删除无关订单
                                olist.remove(i);
                                i--;
                            }
                        }
                        taoBaoOrderService.addTaoBaoOrderList(olist);
                    }
                }
            } else
                throw new OrderMoneySettleException(e.getCode(), "维权处理出错:" + e.getMsg());
        }
        // 添加结算映射
@@ -956,7 +949,7 @@
     * @param orderId
     * @param sourceType
     */
    @Transactional(rollbackFor=Exception.class)
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void inviteSubsidySettle(Long uid, String taskKey) throws OrderMoneySettleException {
        // 查询key
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderProcessServiceImpl.java
@@ -547,7 +547,7 @@
                    if (drawBack == null) {// 还未扣款
                        OrderLogHelper.taoBaoWeiQuan("已到账未扣款处理:子订单号:" + order.getOrderItemId());
                        try {
                            taoBaoWeiQuanDrawBackService.doWeiQuanFanli(order.getOrderId());
                            taoBaoWeiQuanDrawBackService.doWeiQuanFanli(order.getOrderId(),true);
                            taoBaoWeiQuanDrawBackService.doWeiQuanShare(order.getOrderId());
                            taoBaoWeiQuanDrawBackService.doWeiQuanInvite(order.getOrderId());
                        } catch (TaoBaoWeiQuanException e) {
fanli/src/main/java/com/yeshi/fanli/service/inter/money/tb/TaoBaoWeiQuanDrawBackService.java
@@ -1,6 +1,8 @@
package com.yeshi.fanli.service.inter.money.tb;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanDrawBack;
import com.yeshi.fanli.exception.order.TaoBaoWeiQuanException;
@@ -16,10 +18,12 @@
    /**
     * 处理维权-主订单(返利订单)
     *
     * @param hongBao
     * @param orderId
     * @param subMoneySync - 是否同步扣除资金
     * @return 用户扣款金额映射
     * @throws TaoBaoWeiQuanException
     */
    public void doWeiQuanFanli(String orderId) throws TaoBaoWeiQuanException;
    public Map<Long,BigDecimal> doWeiQuanFanli(String orderId,boolean subMoneySync) throws TaoBaoWeiQuanException;
    /**
     * 处理维权-子订单(分享赚)