package com.yeshi.fanli.service.impl.taobao;
|
|
import java.math.BigDecimal;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.Iterator;
|
import java.util.List;
|
import java.util.Map;
|
|
import javax.annotation.Resource;
|
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import com.yeshi.fanli.dao.mybatis.HongBaoV2Mapper;
|
import com.yeshi.fanli.dao.mybatis.UserInfoMapper;
|
import com.yeshi.fanli.dao.mybatis.money.UserMoneyDetailMapper;
|
import com.yeshi.fanli.dao.mybatis.order.CommonOrderMapper;
|
import com.yeshi.fanli.dao.mybatis.order.HongBaoOrderMapper;
|
import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoOrderMapper;
|
import com.yeshi.fanli.dao.mybatis.taobao.TaoBaoWeiQuanDrawBackMapper;
|
import com.yeshi.fanli.entity.bus.user.HongBaoV2;
|
import com.yeshi.fanli.entity.bus.user.UserInfo;
|
import com.yeshi.fanli.entity.money.UserMoneyDebt;
|
import com.yeshi.fanli.entity.money.UserMoneyDebt.UserMoneyDebtTypeEnum;
|
import com.yeshi.fanli.entity.money.UserMoneyDetail;
|
import com.yeshi.fanli.entity.order.CommonOrder;
|
import com.yeshi.fanli.entity.order.HongBaoOrder;
|
import com.yeshi.fanli.entity.taobao.TaoBaoOrder;
|
import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanDrawBack;
|
import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanOrder;
|
import com.yeshi.fanli.exception.TaoBaoWeiQuanException;
|
import com.yeshi.fanli.exception.money.UserMoneyDebtException;
|
import com.yeshi.fanli.exception.money.UserMoneyDetailException;
|
import com.yeshi.fanli.log.LogHelper;
|
import com.yeshi.fanli.service.inter.money.UserMoneyDebtService;
|
import com.yeshi.fanli.service.inter.msg.UserMoneyMsgNotificationService;
|
import com.yeshi.fanli.service.inter.taobao.TaoBaoWeiQuanDrawBackService;
|
import com.yeshi.fanli.service.inter.taobao.TaoBaoWeiQuanOrderService;
|
import com.yeshi.fanli.service.inter.user.UserMoneyService;
|
import com.yeshi.fanli.service.inter.user.UserNotificationService;
|
import com.yeshi.fanli.util.Constant;
|
import com.yeshi.fanli.util.MoneyBigDecimalUtil;
|
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 {
|
@Resource
|
private TaoBaoWeiQuanDrawBackMapper taoBaoWeiQuanDrawBackMapper;
|
|
@Resource
|
private TaoBaoWeiQuanOrderService taoBaoWeiQuanOrderService;
|
|
@Resource
|
private TaoBaoOrderMapper taoBaoOrderMapper;
|
|
@Resource
|
private UserInfoMapper userInfoMapper;
|
|
@Resource
|
private UserMoneyDetailMapper userMoneyDetailMapper;
|
|
@Resource
|
private UserNotificationService userNotificationService;
|
|
@Resource
|
private CommonOrderMapper commonOrderMapper;
|
|
@Resource
|
private HongBaoV2Mapper hongBaoV2Mapper;
|
|
@Resource
|
private HongBaoOrderMapper hongBaoOrderMapper;
|
|
@Resource
|
private UserMoneyMsgNotificationService userMoneyMsgNotificationService;
|
|
@Resource
|
private UserMoneyDebtService userMoneyDebtService;
|
|
@Resource
|
private UserMoneyService userMoneyService;
|
|
@Override
|
public void addWeiQuanDrawBack(TaoBaoWeiQuanDrawBack taoBaoWeiQuanDrawBack) {
|
taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(taoBaoWeiQuanDrawBack.getOrderItemId(),
|
taoBaoWeiQuanDrawBack.getUser().getId());
|
}
|
|
@Transactional
|
private void addDebt(Long uid, Long hbId, BigDecimal money) throws UserMoneyDebtException {
|
UserMoneyDebt debt = new UserMoneyDebt();
|
debt.setBeiZhu(null);
|
debt.setCreateTime(new Date());
|
debt.setLeftMoney(money);
|
debt.setOriginMoney(money);
|
debt.setSourceId(hbId);
|
debt.setType(UserMoneyDebtTypeEnum.order);
|
debt.setUid(uid);
|
userMoneyDebtService.addUserMoneyDebt(debt);
|
}
|
|
@Transactional
|
@Override
|
public void doWeiQuanFanli(String orderId) throws TaoBaoWeiQuanException {
|
if (StringUtil.isNullOrEmpty(orderId))
|
throw new TaoBaoWeiQuanException(1, "订单号为空值");
|
// 查询是否为维权订单
|
List<TaoBaoWeiQuanOrder> list = taoBaoWeiQuanOrderService.getWeiQuanSuccessOrders(orderId);
|
if (list == null || list.size() == 0)
|
return;
|
// 查询订单库
|
List<TaoBaoOrder> orderList = taoBaoOrderMapper.selectTaoBaoOrderByOrderId(orderId);
|
// 计算淘宝联盟返给平台的资金
|
BigDecimal sumFee = new BigDecimal("0");
|
for (TaoBaoOrder order : orderList)
|
if (order.getOrderState().equalsIgnoreCase("订单结算")) {
|
sumFee = sumFee.add(order.geteIncome());
|
if (order.getSubsidy() != null)
|
sumFee = sumFee.add(order.getSubsidy());
|
}
|
if (new BigDecimal(0).compareTo(sumFee) == 0)
|
throw new TaoBaoWeiQuanException(TaoBaoWeiQuanException.CODE_NEDD_UPDATE_ORDER, "需要更新订单");
|
|
// 获取和该订单号有关联的用户
|
// 获取主红包(同一个订单号的单只会对应同一个用户)
|
List<CommonOrderVO> typeList = new ArrayList<>();
|
CommonOrderVO cv = new CommonOrderVO();
|
cv.setSourceType(Constant.SOURCE_TYPE_TAOBAO);
|
cv.setOrderNo(orderId);
|
typeList.add(cv);
|
|
List<CommonOrderVO> commonOrderList = commonOrderMapper.listOrderGoodsInfo(typeList);
|
List<HongBaoV2> mainHongBaoList = new ArrayList<>();
|
if (commonOrderList != null)
|
for (CommonOrderVO vo : commonOrderList) {
|
// 修改订单状态为维权
|
CommonOrder co = new CommonOrder(vo.getId());
|
co.setState(CommonOrder.STATE_WQ);
|
co.setUpdateTime(new Date());
|
commonOrderMapper.updateByPrimaryKeySelective(co);
|
|
HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(vo.getId());
|
mainHongBaoList.add(hongBaoOrder.getHongBaoV2());
|
}
|
if (mainHongBaoList == null || mainHongBaoList.size() == 0)
|
return;
|
for (int i = 0; i < mainHongBaoList.size(); i++) {
|
HongBaoV2 hb = hongBaoV2Mapper.selectByPrimaryKey(mainHongBaoList.get(i).getId());
|
mainHongBaoList.set(i, hb);
|
// 只处理返利订单
|
if (hb.getType() != HongBaoV2.TYPE_ZIGOU) {
|
mainHongBaoList.remove(i);
|
i--;
|
}
|
}
|
|
if (mainHongBaoList == null || mainHongBaoList.size() == 0)
|
return;
|
|
// 主用户ID
|
Map<Long, BigDecimal> fanMoneyMap = new HashMap<>();
|
|
if (mainHongBaoList != null)
|
for (HongBaoV2 hongBao : mainHongBaoList) {
|
if (hongBao.getState() == HongBaoV2.STATE_SHIXIAO)
|
continue;
|
// 累计主红包的金额
|
if (fanMoneyMap.get(hongBao.getUserInfo().getId()) == null) {
|
fanMoneyMap.put(hongBao.getUserInfo().getId(), hongBao.getMoney());
|
} else
|
fanMoneyMap.put(hongBao.getUserInfo().getId(),
|
fanMoneyMap.get(hongBao.getUserInfo().getId()).add(hongBao.getMoney()));
|
}
|
|
// 计算每个用户的返利比例
|
Iterator<Long> its = fanMoneyMap.keySet().iterator();
|
while (its.hasNext()) {
|
Long uid = its.next();
|
BigDecimal userGetMoney = fanMoneyMap.get(uid);
|
BigDecimal fanMoney = new BigDecimal("0");
|
// 统计用户在这个单中需要扣除的资金
|
TaoBaoWeiQuanDrawBack weiQuanDrawBack = null;
|
List<TaoBaoWeiQuanDrawBack> newWeiQuanDrawBackList = new ArrayList<>();
|
for (TaoBaoWeiQuanOrder weiQuanOrder : list) {
|
weiQuanDrawBack = taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(weiQuanOrder.getOrderItemId(),
|
uid);
|
if (weiQuanDrawBack != null)
|
continue;
|
// 退款的资金
|
fanMoney = fanMoney.add(weiQuanOrder.getFanMoney());
|
weiQuanDrawBack = new TaoBaoWeiQuanDrawBack();
|
weiQuanDrawBack.setCreateTime(new Date());
|
// 暂时设为0
|
weiQuanDrawBack.setDrawBackMoney(new BigDecimal(0));
|
weiQuanDrawBack.setOrderId(weiQuanOrder.getOrderId());
|
weiQuanDrawBack.setOrderItemId(weiQuanOrder.getOrderItemId());
|
weiQuanDrawBack.setUser(new UserInfo(uid));
|
newWeiQuanDrawBackList.add(weiQuanDrawBack);
|
}
|
|
if (fanMoney.compareTo(new BigDecimal("0")) <= 0)
|
continue;
|
|
// 插入记录
|
for (TaoBaoWeiQuanDrawBack drawBack : newWeiQuanDrawBackList) {
|
taoBaoWeiQuanDrawBackMapper.insertSelective(drawBack);
|
}
|
|
// 退款金额
|
BigDecimal drawBackMoney = MoneyBigDecimalUtil.div(userGetMoney.multiply(fanMoney), sumFee);
|
if (drawBackMoney.compareTo(userGetMoney) > 0)
|
drawBackMoney = userGetMoney;// 退款金额不能比获得的金额大
|
// 计算资金是否充足
|
UserInfo user = userInfoMapper.selectByPKey(uid);
|
if (user != null && user.getMyHongBao().compareTo(drawBackMoney) < 0)// 资金不足
|
{
|
// 添加债务
|
for (TaoBaoWeiQuanOrder weiQuanOrder : list) {
|
TaoBaoOrder taoBaoOrder = taoBaoOrderMapper
|
.selectTaoBaoOrderByTradeId(weiQuanOrder.getOrderItemId());
|
if (taoBaoOrder != null) {
|
BigDecimal totalFee = taoBaoOrder.geteIncome();
|
if (taoBaoOrder.getSubsidy() != null)
|
totalFee = totalFee.add(taoBaoOrder.getSubsidy());
|
//
|
CommonOrder co = commonOrderMapper.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO,
|
weiQuanOrder.getOrderItemId());
|
if (co != null) {
|
HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(co.getId());
|
if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null) {
|
BigDecimal drawback = MoneyBigDecimalUtil.div(
|
hongBaoOrder.getHongBaoV2().getMoney().multiply(weiQuanOrder.getFanMoney()),
|
totalFee);
|
try {
|
addDebt(uid, hongBaoOrder.getHongBaoV2().getId(), drawback);
|
} catch (UserMoneyDebtException e) {
|
throw new TaoBaoWeiQuanException(101, "资金借贷异常");
|
}
|
}
|
}
|
}
|
}
|
continue;
|
}
|
|
UserMoneyDetail userMoneyDetail = null;
|
// 新版资金记录
|
try {
|
userMoneyDetail = UserMoneyDetailFactory.createFanLiWeiQuan(uid, weiQuanDrawBack, drawBackMoney);
|
} catch (UserMoneyDetailException e) {
|
try {
|
LogHelper.errorDetailInfo(e);
|
} catch (Exception e1) {
|
e1.printStackTrace();
|
}
|
}
|
userMoneyService.subUserMoney(uid, drawBackMoney, userMoneyDetail);
|
|
// 新版通知
|
userMoneyMsgNotificationService.fanliOrderWeiQuan(uid, orderId, drawBackMoney,
|
userInfoMapper.selectByPKey(uid).getMyHongBao());
|
|
userNotificationService.weiQuanFanli(uid, orderId, drawBackMoney);
|
}
|
}
|
|
@Transactional
|
@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)
|
return;
|
// 查询订单库
|
List<TaoBaoOrder> orderList = taoBaoOrderMapper.selectTaoBaoOrderByOrderId(orderId);
|
// 计算淘宝联盟返给平台的资金
|
BigDecimal sumFee = new BigDecimal("0");
|
for (TaoBaoOrder order : orderList)
|
if (order.getOrderState().equalsIgnoreCase("订单结算")) {
|
sumFee = sumFee.add(order.geteIncome());
|
if (order.getSubsidy() != null)
|
sumFee = sumFee.add(order.getSubsidy());
|
}
|
// 获取和该订单号有关联的用户
|
// 获取主红包(同一个订单号的单只会对应同一个用户)
|
|
List<CommonOrderVO> typeList = new ArrayList<>();
|
CommonOrderVO cv = new CommonOrderVO();
|
cv.setSourceType(Constant.SOURCE_TYPE_TAOBAO);
|
cv.setOrderNo(orderId);
|
typeList.add(cv);
|
|
List<CommonOrderVO> commonOrderList = commonOrderMapper.listOrderGoodsInfo(typeList);
|
List<HongBaoV2> mainHongBaoList = new ArrayList<>();
|
if (commonOrderList != null)
|
for (CommonOrderVO vo : commonOrderList) {
|
// 更改订单状态
|
CommonOrder co = new CommonOrder(vo.getId());
|
co.setState(CommonOrder.STATE_WQ);
|
co.setUpdateTime(new Date());
|
commonOrderMapper.updateByPrimaryKeySelective(co);
|
|
HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(vo.getId());
|
mainHongBaoList.add(hongBaoOrder.getHongBaoV2());
|
}
|
|
if (mainHongBaoList == null || mainHongBaoList.size() == 0)
|
return;
|
|
// 主用户ID
|
Map<Long, BigDecimal> fanMoneyMap = new HashMap<>();
|
|
if (mainHongBaoList != null)
|
for (HongBaoV2 hongBao : mainHongBaoList) {
|
hongBao = hongBaoV2Mapper.selectByPrimaryKey(hongBao.getId());
|
if (hongBao.getState() == HongBaoV2.STATE_SHIXIAO)
|
continue;
|
|
// 只计入分享赚的红包
|
if (hongBao.getType() == HongBaoV2.TYPE_SHARE_GOODS) {
|
// 累计主红包的金额
|
if (fanMoneyMap.get(hongBao.getUserInfo().getId()) == null) {
|
fanMoneyMap.put(hongBao.getUserInfo().getId(), hongBao.getMoney());
|
} else
|
fanMoneyMap.put(hongBao.getUserInfo().getId(),
|
fanMoneyMap.get(hongBao.getUserInfo().getId()).add(hongBao.getMoney()));
|
}
|
}
|
|
// 计算每个用户的返利比例
|
Iterator<Long> its = fanMoneyMap.keySet().iterator();
|
while (its.hasNext()) {
|
Long uid = its.next();
|
BigDecimal userGetMoney = fanMoneyMap.get(uid);
|
BigDecimal fanMoney = new BigDecimal("0");
|
// 统计用户在这个单中需要扣除的资金
|
TaoBaoWeiQuanDrawBack weiQuanDrawBack = null;
|
|
List<TaoBaoWeiQuanDrawBack> newWeiQuanDrawBackList = new ArrayList<>();
|
for (TaoBaoWeiQuanOrder weiQuanOrder : list) {
|
weiQuanDrawBack = taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(weiQuanOrder.getOrderItemId(),
|
uid);
|
if (weiQuanDrawBack != null)
|
continue;
|
// 退款的资金
|
fanMoney = fanMoney.add(weiQuanOrder.getFanMoney());
|
// 插入记录
|
weiQuanDrawBack = new TaoBaoWeiQuanDrawBack();
|
weiQuanDrawBack.setCreateTime(new Date());
|
// TODO 暂时设为0
|
weiQuanDrawBack.setDrawBackMoney(new BigDecimal(0));
|
weiQuanDrawBack.setOrderId(weiQuanOrder.getOrderId());
|
weiQuanDrawBack.setOrderItemId(weiQuanOrder.getOrderItemId());
|
weiQuanDrawBack.setUser(new UserInfo(uid));
|
newWeiQuanDrawBackList.add(weiQuanDrawBack);
|
}
|
|
if (fanMoney.compareTo(new BigDecimal("0")) <= 0)
|
continue;
|
|
// 退款金额
|
BigDecimal drawBackMoney = MoneyBigDecimalUtil.div(userGetMoney.multiply(fanMoney), sumFee);
|
if (drawBackMoney.compareTo(userGetMoney) > 0)
|
drawBackMoney = userGetMoney;
|
|
for (TaoBaoWeiQuanDrawBack drawBack : newWeiQuanDrawBackList)
|
taoBaoWeiQuanDrawBackMapper.insertSelective(drawBack);
|
// 计算资金是否充足
|
UserInfo user = userInfoMapper.selectByPKey(uid);
|
if (user != null && user.getMyHongBao().compareTo(drawBackMoney) < 0)// 资金不足
|
{
|
// 添加债务
|
for (TaoBaoWeiQuanOrder weiQuanOrder : list) {
|
TaoBaoOrder taoBaoOrder = taoBaoOrderMapper
|
.selectTaoBaoOrderByTradeId(weiQuanOrder.getOrderItemId());
|
if (taoBaoOrder != null) {
|
BigDecimal totalFee = taoBaoOrder.geteIncome();
|
if (taoBaoOrder.getSubsidy() != null)
|
totalFee = totalFee.add(taoBaoOrder.getSubsidy());
|
//
|
CommonOrder co = commonOrderMapper.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO,
|
weiQuanOrder.getOrderItemId());
|
if (co != null) {
|
HongBaoOrder hongBaoOrder = hongBaoOrderMapper.selectByCommonOrderId(co.getId());
|
BigDecimal drawback = MoneyBigDecimalUtil.div(
|
hongBaoOrder.getHongBaoV2().getMoney().multiply(weiQuanOrder.getFanMoney()),
|
totalFee);
|
try {
|
addDebt(uid, hongBaoOrder.getHongBaoV2().getId(), drawback);
|
} catch (UserMoneyDebtException e) {
|
throw new TaoBaoWeiQuanException(101, "资金借贷异常");
|
}
|
|
if (hongBaoOrder != null && hongBaoOrder.getHongBaoV2() != null) {
|
List<HongBaoV2> hongBaoList = hongBaoV2Mapper
|
.listChildrenById(hongBaoOrder.getHongBaoV2().getId());
|
for (int i = 0; i < hongBaoList.size(); i++) {
|
if (hongBaoList.get(i).getUserInfo().getId().longValue() != uid) {
|
hongBaoList.remove(i);
|
i--;
|
}
|
}
|
|
for (HongBaoV2 hb : hongBaoList) {
|
drawback = MoneyBigDecimalUtil
|
.div(hb.getMoney().multiply(weiQuanOrder.getFanMoney()), totalFee);
|
try {
|
addDebt(hb.getUserInfo().getId(), hb.getId(), drawback);
|
} catch (UserMoneyDebtException e) {
|
throw new TaoBaoWeiQuanException(101, "资金借贷异常");
|
}
|
}
|
}
|
}
|
}
|
}
|
continue;
|
}
|
|
UserMoneyDetail userMoneyDetail = null;
|
// 新版资金记录
|
try {
|
userMoneyDetail = UserMoneyDetailFactory.createShareWeiQuan(uid, weiQuanDrawBack, drawBackMoney);
|
} catch (UserMoneyDetailException e) {
|
try {
|
LogHelper.errorDetailInfo(e);
|
} catch (Exception e1) {
|
e1.printStackTrace();
|
}
|
}
|
userMoneyService.subUserMoney(uid, drawBackMoney, userMoneyDetail);
|
|
userMoneyMsgNotificationService.shareOrderWeiQuan(uid, orderId, drawBackMoney,
|
userInfoMapper.selectByPrimaryKey(uid).getMyHongBao());
|
|
userNotificationService.weiQuanTiCheng(uid, orderId, drawBackMoney);
|
}
|
}
|
|
@Transactional
|
@Override
|
public void doWeiQuanInvite(String orderId) throws TaoBaoWeiQuanException {
|
if (StringUtil.isNullOrEmpty(orderId))
|
throw new TaoBaoWeiQuanException(1, "订单号为空值");
|
// 查询是否为维权订单
|
List<TaoBaoWeiQuanOrder> list = taoBaoWeiQuanOrderService.getWeiQuanSuccessOrders(orderId);
|
if (list == null || list.size() == 0)
|
return;
|
// 查询订单库
|
for (TaoBaoWeiQuanOrder weiQuanOrder : list) {
|
TaoBaoOrder taoBaoOrder = taoBaoOrderMapper.selectTaoBaoOrderByTradeId(weiQuanOrder.getOrderItemId());
|
BigDecimal fanMoney = weiQuanOrder.getFanMoney();
|
if (taoBaoOrder == null)
|
throw new TaoBaoWeiQuanException(1, "来源交易ID有误");
|
BigDecimal sumFee = new BigDecimal("0");
|
if (taoBaoOrder.getOrderState().equalsIgnoreCase("订单结算")) {
|
sumFee = sumFee.add(taoBaoOrder.geteIncome());
|
if (taoBaoOrder.getSubsidy() != null)
|
sumFee = sumFee.add(taoBaoOrder.getSubsidy());
|
}
|
|
// 查询下级子用户
|
CommonOrder commonOrder = commonOrderMapper.selectBySourceTypeAndTradeId(Constant.SOURCE_TYPE_TAOBAO,
|
weiQuanOrder.getOrderItemId());
|
if (commonOrder == null)
|
throw new TaoBaoWeiQuanException(2, "订单有误");
|
|
HongBaoOrder hongbaoOrder = hongBaoOrderMapper.selectByCommonOrderId(commonOrder.getId());
|
|
if (hongbaoOrder == null || hongbaoOrder.getHongBaoV2() == null)
|
throw new TaoBaoWeiQuanException(3, "红包有误");
|
|
List<HongBaoV2> childList = hongBaoV2Mapper.listChildrenById(hongbaoOrder.getHongBaoV2().getId());
|
|
if (childList != null)
|
for (HongBaoV2 child : childList) {
|
Long uid = child.getUserInfo().getId();
|
if (child.getState() != HongBaoV2.STATE_YILINGQU)
|
continue;
|
TaoBaoWeiQuanDrawBack weiQuanDrawBack = taoBaoWeiQuanDrawBackMapper
|
.selectByOrderItemIdAndUid(weiQuanOrder.getOrderItemId(), child.getUserInfo().getId());
|
if (weiQuanDrawBack != null)
|
continue;
|
BigDecimal drawBackMoney = MoneyBigDecimalUtil.div(child.getMoney().multiply(fanMoney), sumFee);
|
if (drawBackMoney.compareTo(child.getMoney()) > 0)
|
drawBackMoney = child.getMoney();
|
weiQuanDrawBack = new TaoBaoWeiQuanDrawBack();
|
weiQuanDrawBack.setCreateTime(new Date());
|
weiQuanDrawBack.setDrawBackMoney(drawBackMoney);
|
weiQuanDrawBack.setOrderId(weiQuanOrder.getOrderId());
|
weiQuanDrawBack.setOrderItemId(weiQuanOrder.getOrderItemId());
|
weiQuanDrawBack.setUser(child.getUserInfo());
|
taoBaoWeiQuanDrawBackMapper.insertSelective(weiQuanDrawBack);// 加入返还记录
|
|
// 如果资金大于0才扣除
|
|
if (drawBackMoney != null && drawBackMoney.compareTo(new BigDecimal(0)) > 0) {
|
|
// 判断资金是否足够扣款
|
UserInfo user = userInfoMapper.selectByPKey(uid);
|
if (user != null && user.getMyHongBao().compareTo(drawBackMoney) < 0)// 资金不足
|
{
|
try {
|
addDebt(uid, child.getId(), drawBackMoney);
|
} catch (UserMoneyDebtException e) {
|
throw new TaoBaoWeiQuanException(101, "资金借贷异常");
|
}
|
continue;
|
}
|
|
UserMoneyDetail userMoneyDetail = null;
|
// 新版资金记录
|
try {
|
userMoneyDetail = UserMoneyDetailFactory.createInviteWeiQuan(uid, weiQuanDrawBack,
|
drawBackMoney);
|
} catch (UserMoneyDetailException e) {
|
try {
|
LogHelper.errorDetailInfo(e);
|
} catch (Exception e1) {
|
e1.printStackTrace();
|
}
|
}
|
|
userMoneyService.subUserMoney(uid, drawBackMoney, userMoneyDetail);
|
|
// 新版通知
|
userMoneyMsgNotificationService.inviteOrderWeiQuan(uid, orderId, drawBackMoney,
|
userInfoMapper.selectByPrimaryKey(uid).getMyHongBao());
|
}
|
}
|
}
|
}
|
|
@Override
|
public TaoBaoWeiQuanDrawBack selectByOrderItemId(String orderItemId) {
|
List<TaoBaoWeiQuanDrawBack> list = taoBaoWeiQuanDrawBackMapper.selectByOrderItemId(orderItemId);
|
if (list != null && list.size() > 0)
|
return list.get(0);
|
else
|
return null;
|
}
|
|
@Override
|
public TaoBaoWeiQuanDrawBack selectByHongBaoId(Long hbId) {
|
Long uid = null;
|
HongBaoV2 hb = hongBaoV2Mapper.selectByPrimaryKey(hbId);
|
uid = hb.getUserInfo().getId();
|
if (hb.getParent() != null)
|
hb = hb.getParent();
|
HongBaoOrder hbo = hongBaoOrderMapper.selectByHongBaoId(hb.getId());
|
if (hbo != null && hbo.getCommonOrder() != null) {
|
return taoBaoWeiQuanDrawBackMapper.selectByOrderItemIdAndUid(hbo.getCommonOrder().getTradeId(), uid);
|
}
|
return null;
|
}
|
|
}
|