package com.yeshi.fanli.service.manger.order;
|
|
import java.math.BigDecimal;
|
import java.util.Date;
|
import java.util.List;
|
|
import javax.annotation.Resource;
|
|
import org.springframework.stereotype.Component;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import com.yeshi.fanli.entity.bus.user.HongBaoV2;
|
import com.yeshi.fanli.entity.money.TeamRewardDebt;
|
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.TaoBaoWeiQuanOrder;
|
import com.yeshi.fanli.exception.ParamsException;
|
import com.yeshi.fanli.exception.money.TeamEincomeRecordException;
|
import com.yeshi.fanli.exception.money.TeamRewardDebtException;
|
import com.yeshi.fanli.exception.order.TaoBaoOrderException;
|
import com.yeshi.fanli.service.inter.money.TeamRewardDebtService;
|
import com.yeshi.fanli.service.inter.order.CommonOrderService;
|
import com.yeshi.fanli.service.inter.order.HongBaoOrderService;
|
import com.yeshi.fanli.service.inter.order.HongBaoV2Service;
|
import com.yeshi.fanli.service.inter.order.tb.TaoBaoOrderService;
|
import com.yeshi.fanli.service.inter.order.tb.TaoBaoWeiQuanOrderService;
|
import com.yeshi.fanli.service.manger.money.TeamEincomeManager;
|
import com.yeshi.fanli.util.Constant;
|
|
/**
|
* 团队分红管理
|
* @author Administrator
|
*
|
*/
|
@Component
|
public class TeamRewardManager {
|
|
@Resource
|
private TaoBaoWeiQuanOrderService taoBaoWeiQuanOrderService;
|
@Resource
|
private TaoBaoOrderService taoBaoOrderService;
|
@Resource
|
private HongBaoOrderService hongBaoOrderService;
|
@Resource
|
private HongBaoV2Service hongBaoV2Service;
|
|
@Resource
|
private CommonOrderService commonOrderService;
|
|
@Resource
|
private TeamRewardDebtService teamRewardDebtService;
|
|
@Resource
|
private TeamEincomeManager teamEincomeManager;
|
|
@Transactional(rollbackFor = Exception.class)
|
public void addToEincome(Long uid, Date date, BigDecimal money, int sourceType)
|
throws TeamEincomeRecordException, ParamsException, TeamRewardDebtException {
|
// 查询是否有欠账
|
BigDecimal debtMoney = teamRewardDebtService.getTotalDebtMoney(uid, date);
|
// 有欠账
|
if (debtMoney.compareTo(new BigDecimal(0)) > 0)
|
money = teamRewardDebtService.repayDebtByUid(uid, date, money);
|
|
teamEincomeManager.addTeamReward(uid, date, money, sourceType);
|
}
|
|
/**
|
* 处理邀请维权
|
* @param orderNo
|
* @param sourceType
|
* @param tradeId
|
* @throws TaoBaoOrderException
|
* @throws TeamRewardDebtException
|
*/
|
public void weiQuan(String orderNo, int sourceType, String tradeId)
|
throws TaoBaoOrderException, TeamRewardDebtException {
|
if (sourceType == Constant.SOURCE_TYPE_TAOBAO) {// 只处理淘宝的维权
|
TaoBaoWeiQuanOrder taoBaoWeiQuanOrder = taoBaoWeiQuanOrderService.selectByTradeId(tradeId);
|
|
// 只处理维权成功
|
if (!taoBaoWeiQuanOrder.getState().startsWith("维权成功"))
|
return;
|
TaoBaoOrder taoBaoOrder = taoBaoOrderService.selectByTradeId(tradeId);
|
if (taoBaoOrder == null)
|
return;
|
|
if (taoBaoOrder.getSettlement() == null)
|
throw new TaoBaoOrderException(1, "订单未更新");
|
|
CommonOrder commonOrder = commonOrderService.selectBySourceTypeAndTradeId(sourceType, tradeId);
|
if (commonOrder == null)
|
return;
|
|
// 查询订单
|
HongBaoOrder hongBaoOrder = hongBaoOrderService.selectDetailByCommonOrderId(commonOrder.getId());
|
|
if (hongBaoOrder == null)
|
return;
|
|
List<HongBaoV2> children = hongBaoV2Service.listChildrenById(hongBaoOrder.getHongBaoV2().getId());
|
|
if (children == null)
|
return;
|
|
for (HongBaoV2 child : children) {
|
if (child != null)//
|
{
|
if (child.getState() == HongBaoV2.STATE_SHIXIAO)
|
continue;
|
|
BigDecimal drawBackMoney = computeDrawBackMoney(taoBaoOrder.getSettlement(),
|
taoBaoWeiQuanOrder.getMoney(), child.getMoney());
|
if (drawBackMoney.compareTo(new BigDecimal(0)) <= 0)
|
continue;
|
|
TeamRewardDebt oldDebt = teamRewardDebtService.selectBySourceId(child.getId());
|
if (oldDebt != null)
|
continue;
|
|
if (child.getPreGetTime() == null) {
|
throw new TeamRewardDebtException(2, "订单还未更新");
|
}
|
|
TeamRewardDebt debt = new TeamRewardDebt();
|
debt.setCreateTime(new Date());
|
debt.setOriginMoney(drawBackMoney);
|
debt.setSourceId(child.getId());
|
debt.setTradeId(tradeId);
|
debt.setSourceType(sourceType);
|
debt.setUid(child.getUserInfo().getId());
|
debt.setEstimatePayTime(child.getPreGetTime());
|
teamRewardDebtService.addDebt(debt);
|
}
|
}
|
}
|
}
|
|
private BigDecimal computeDrawBackMoney(BigDecimal settlement, BigDecimal wqMoney, BigDecimal hongBaoMoney) {
|
BigDecimal money = (hongBaoMoney.multiply(wqMoney)).divide(settlement, 2, BigDecimal.ROUND_UP);
|
if (money.compareTo(hongBaoMoney) > 0)
|
money = hongBaoMoney;
|
return money;
|
}
|
|
}
|