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; /** * 处理维权-子订单(分享赚)