yujian
2019-11-23 a364fbab598a45842d4b38d156e8b5e55f9513ad
fanli/src/main/java/com/yeshi/fanli/service/impl/redpack/RedPackWinInviteServiceImpl.java
@@ -18,6 +18,7 @@
import com.yeshi.fanli.entity.bus.user.UserActiveLog;
import com.yeshi.fanli.entity.bus.user.UserExtraTaoBaoInfo;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.order.CommonOrder;
import com.yeshi.fanli.entity.redpack.RedPackWinInvite;
import com.yeshi.fanli.entity.redpack.RedPackWinInvite.RedPackWinInviteTypeEnum;
import com.yeshi.fanli.service.inter.count.HongBaoV2CountService;
@@ -36,6 +37,7 @@
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.VersionUtil;
import com.yeshi.fanli.util.annotation.RequestSerializableByKeyService;
import com.yeshi.fanli.util.annotation.redpack.RedPackGetVersionLimit;
import com.yeshi.fanli.util.factory.RedPackDetailFactory;
@Service
@@ -148,6 +150,7 @@
      winInvite.setUid(bossId);
      winInvite.setTeamUid(teamUid);
      winInvite.setMoney(money);
      winInvite.setIdentifyCode(StringUtil.Md5(RedPackWinInviteTypeEnum.oneStageReward.name() + ":" + teamUid));
      redPackWinInviteMapper.insertSelective(winInvite);
      
      // 增加红包
@@ -163,53 +166,48 @@
   
   
   @RequestSerializableByKeyService(key = "#uid")
   @RedPackGetVersionLimit(uid = "#uid")
   @Transactional(rollbackFor = Exception.class)
   @Override
   public void orderArriveReward(Long uid, Integer source, String orderNo) throws Exception {
   public void inviteOrderArriveReward(Long uid, Integer source, String orderNo) throws Exception {
      if (uid == null || source == null || StringUtil.isNullOrEmpty(orderNo))
         return;
      
      ThreeSale threeSale = threeSaleSerivce.getByWorkerIdAndTime(uid, Constant.RED_PACK_REWARD_TIME);
      if(threeSale == null)
         return;
      bossReward(threeSale.getBoss().getId(), uid, source, orderNo);
   }
   /**
    * 上级奖励
    * @param uid
    * @param teamUid
    * @param source
    * @param orderNo
    * @throws Exception
    */
   @Transactional
   private void  bossReward(Long bossId, Long teamUid, Integer source, String orderNo)  throws Exception {
      UserActiveLog activeLog = userActiveLogService.getUserLatestActiveInfo(bossId);
      if (activeLog == null)
      //获取订单对应下单人
      List<CommonOrder> list = commonOrderService.listBySourceTypeAndOrderId(source, orderNo);
      if (list == null || list.isEmpty())
         return;
      
      // 小于2.0.2版本不增加
      if (!VersionUtil.greaterThan_2_1("appstore".equalsIgnoreCase(activeLog.getChannel()) ? "ios" : "android",
            activeLog.getVersionCode()))
      CommonOrder commonOrder = list.get(0);
      if (commonOrder == null || commonOrder.getUserInfo() == null)
         return;
      // 下单人id
      Long teamUid = commonOrder.getUserInfo().getId();
      if (teamUid == null)
         return;
      // 验证上下级关系
      ThreeSale threeSale = threeSaleSerivce.getByWorkerIdAndTime(teamUid, Constant.RED_PACK_REWARD_TIME);
      if(threeSale == null || threeSale.getBoss().getId().longValue() != uid.longValue())
         return;
      
      // 第一阶段(验证)
      RedPackWinInvite oneStage = redPackWinInviteMapper.getByUidAndTeamUidAndType(bossId, teamUid, RedPackWinInviteTypeEnum.oneStageReward.name());
      RedPackWinInvite oneStage = redPackWinInviteMapper.getByUidAndTeamUidAndType(uid, teamUid, RedPackWinInviteTypeEnum.oneStageReward.name());
      if (oneStage == null)
         return;
      
      // 第二阶段(验证)
      RedPackWinInvite twoStage = redPackWinInviteMapper.getByUidAndTeamUidAndType(bossId, teamUid, RedPackWinInviteTypeEnum.twoStageReward.name());
      RedPackWinInvite twoStage = redPackWinInviteMapper.getByUidAndTeamUidAndType(uid, teamUid, RedPackWinInviteTypeEnum.twoStageReward.name());
      if (twoStage == null) {
         twoStageRewardToBoss(bossId, teamUid, oneStage.getCreateTime(), source, orderNo);
         twoStageRewardToBoss(uid, teamUid, oneStage.getCreateTime(), source, orderNo);
         return;
      } 
      
      // 第三阶段
      threeStageRewardToBoss(bossId, teamUid, twoStage.getCreateTime(), source, orderNo);
      threeStageRewardToBoss(uid, teamUid, twoStage.getCreateTime(), source, orderNo);
   }
   
   /**
    *    上级奖励--第二阶段
@@ -222,7 +220,8 @@
   private void twoStageRewardToBoss(Long bossId, Long teamUid, Date oneStageTime, Integer source, String orderNo) throws Exception{
      // 第一阶段完成之后的90天内 ; 队友产生的订单中(自购+分享),邀请人累计产生≥1 元奖金  
      Date endDate = DateUtil.plusDayDate(Constant.TWO_STAGE_LIMIT_DAYS, oneStageTime);
      BigDecimal rewardMoney = hongBaoV2CountService.getShareRewardByTeamUid(bossId, teamUid, endDate);
      // 统计订单奖金 (“好友自购”和“好友分享”)
      BigDecimal rewardMoney = hongBaoV2CountService.getOrderRewardByTeamUid(bossId, teamUid, endDate);
      if (rewardMoney == null || rewardMoney.compareTo(Constant.TWO_STAGE_ORDER_REWARD_MIN) < 0)
         return;
      
@@ -244,6 +243,7 @@
      winInvite.setCreateTime(new Date());
      winInvite.setUpdateTime(new Date());
      winInvite.setType(RedPackWinInviteTypeEnum.twoStageReward);
      winInvite.setIdentifyCode(StringUtil.Md5(RedPackWinInviteTypeEnum.twoStageReward.name() + ":" + teamUid));
      redPackWinInviteMapper.insertSelective(winInvite);
      
      // 4、增加红包
@@ -287,8 +287,8 @@
      if (monthSpace !=  totalNum + 1)
         return;
      
      // 每月给你累计产生≥2 元
      BigDecimal rewardMoney = hongBaoV2CountService.getShareRewardByTeamUidLastMonth(bossId, teamUid);
      // 统计本月获得奖金 (“好友自购”和“好友分享”)
      BigDecimal rewardMoney = hongBaoV2CountService.getOrderRewardByTeamUidTheMonth(bossId, teamUid);
      if (rewardMoney == null || rewardMoney.compareTo(Constant.THREE_STAGE_ORDER_REWARD_MIN) < 0)
         return;
      
@@ -307,6 +307,7 @@
      winInvite.setMoney(money);
      winInvite.setSource(source);
      winInvite.setOrderNo(orderNo);
      winInvite.setIdentifyCode(StringUtil.Md5(RedPackWinInviteTypeEnum.threeStageReward.name() + ":" + teamUid + "-" + monthSpace));
      redPackWinInviteMapper.insertSelective(winInvite);
      
      // 4、增加红包