admin
2024-10-16 62a447d89331aee1feae7724c7616aa1bb2cfe79
fanli/src/main/java/com/yeshi/fanli/service/manger/order/TeamRewardManager.java
@@ -1,138 +1,147 @@
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);
   }
   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.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;
   }
}
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;
   }
}