admin
2019-12-24 4d0c5d771b04d7ba32471df58c91c37dabe96bbf
返利订单到账时同时扣除维权金额
4个文件已修改
78 ■■■■ 已修改文件
fanli/src/main/java/com/yeshi/fanli/service/impl/money/tb/TaoBaoWeiQuanDrawBackServiceImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneySettleServiceImpl.java 43 ●●●●● 补丁 | 查看 | 原始文档 | 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 {
@@ -126,17 +125,17 @@
    @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,14 +222,16 @@
            // 退款金额
            BigDecimal drawBackMoney = computeDrawBackMoney(settleMent, wqMoney, userGetMoney);
            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());
                        TaoBaoOrder taoBaoOrder = taoBaoOrderMapper
                                .selectTaoBaoOrderByTradeId(drawBack.getOrderItemId());
                    if (taoBaoOrder != null) {
                        TaoBaoWeiQuanOrder weiQuanOrder = taoBaoWeiQuanOrderService
                                .selectByTradeId(drawBack.getOrderItemId());
@@ -266,9 +268,11 @@
            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) {
@@ -577,7 +581,6 @@
    public List<TaoBaoWeiQuanDrawBack> getByOrderItemId(String orderItemId) {
        return taoBaoWeiQuanDrawBackMapper.selectByOrderItemId(orderItemId);
    }
    @Override
    public TaoBaoWeiQuanDrawBack selectByOrderItemIdAndUid(String orderItemId, Long uid) {
fanli/src/main/java/com/yeshi/fanli/service/impl/order/OrderMoneySettleServiceImpl.java
@@ -470,6 +470,24 @@
            }
        }
        // 获取维权资金
        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, "维权订单出错");
            }
        }
        // if (userMoney.isEmpty()) {
        // throw new OrderMoneySettleException(1, "没有需要结算的订单");
        // }
@@ -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());
        }
        // 添加结算映射
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;
    /**
     * 处理维权-子订单(分享赚)