admin
2020-04-01 5c03e2dd5afd65c483ef5da8346e78abc29dc7e3
fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPPreInfoServiceImpl.java
@@ -11,15 +11,18 @@
import org.springframework.transaction.annotation.Transactional;
import com.yeshi.fanli.dao.mybatis.user.vip.UserVIPPreInfoMapper;
import com.yeshi.fanli.dto.msg.MsgAccountVipDTO;
import com.yeshi.fanli.entity.bus.user.HongBaoV2;
import com.yeshi.fanli.entity.bus.user.vip.UserVIPInfo;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.vip.UserVIPPreInfo;
import com.yeshi.fanli.exception.user.vip.UserVIPPreInfoException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.count.HongBaoV2CountService;
import com.yeshi.fanli.service.inter.user.invite.ThreeSaleSerivce;
import com.yeshi.fanli.service.inter.user.vip.UserVIPInfoService;
import com.yeshi.fanli.service.inter.user.msg.MsgAccountDetailService;
import com.yeshi.fanli.service.inter.user.vip.UserVIPPreInfoService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.annotation.RequestSerializableByKeyService;
@Service
@@ -27,15 +30,15 @@
   @Resource
   private UserVIPPreInfoMapper userVIPPreInfoMapper;
   @Resource
   private HongBaoV2CountService hongBaoV2CountService;
   @Resource
   private ThreeSaleSerivce threeSaleSerivce;
   @Resource
   private UserVIPInfoService userVIPInfoService;
   private MsgAccountDetailService msgAccountDetailService;
   @Override
   public void addUserVIPPreInfo(UserVIPPreInfo info) throws UserVIPPreInfoException {
@@ -68,45 +71,87 @@
      return infoList.get(0);
   }
   @Override
   public UserVIPPreInfo getProcessInfo(Long uid, Date time) {
      List<UserVIPPreInfo> infoList = userVIPPreInfoMapper.listByUid(uid);
      if (infoList == null || infoList.size() == 0)
         return null;
      Comparator<UserVIPPreInfo> cm = new Comparator<UserVIPPreInfo>() {
         @Override
         public int compare(UserVIPPreInfo o1, UserVIPPreInfo o2) {
            return o2.getProcess() - o1.getProcess();
         }
      };
      Collections.sort(infoList, cm);
      for (UserVIPPreInfo info : infoList) {
         if (time.getTime() >= info.getCreateTime().getTime())
            return info;
      }
      return null;
   }
   @RequestSerializableByKeyService(key = "#uid")
   @Transactional(rollbackFor = Exception.class)
   @Override
   public void verifyVipCondition(Long uid) {
   public void verifyVipPreInfo(Long uid, boolean inviteSuccess) {
      if (uid == null || uid <= 0)
         return;
      // 验证是否VIP
      boolean vip = userVIPInfoService.isVIP(uid);
      if (vip) {
         return;
      verifyCondition(uid);
      // 验证上级
      if (inviteSuccess) {
         UserInfo boss = threeSaleSerivce.getBoss(uid);
         if (boss != null) {
            verifyVipPreInfoBoss(boss.getId());
         }
      }
      // 邀请订单
      long countZiGou = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY, HongBaoV2.TYPE_ZIGOU);
      // 邀请订单
      long countShare = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY, HongBaoV2.TYPE_SHARE_GOODS);
      // 队员
      long firstTeam = threeSaleSerivce.countFirstTeam(uid, 1);
      long secondTeam = threeSaleSerivce.countSecondTeam(uid, 1);
      // 一阶段
      boolean process1 = oneProcess(uid, countZiGou, countShare, firstTeam, secondTeam);
      if (!process1) {
         return;
      }
      // 一阶段
      boolean process2 = twoProcess(uid, countZiGou, countShare, firstTeam, secondTeam);
      if (!process2) {
         return;
      }
      vipProcess(uid, countZiGou, countShare, firstTeam, secondTeam);
   }
   // 上级验证
   private void verifyVipPreInfoBoss(Long uid) {
      if (uid == null || uid <= 0)
         return;
      verifyCondition(uid);
   }
   private void verifyCondition(Long uid) {
      try {
         // 验证二阶段
         UserVIPPreInfo oldInfo = userVIPPreInfoMapper.selectByUidAndProcess(uid, UserVIPPreInfo.PROCESS_2);
         if (oldInfo != null) {
            return;
         }
         // 邀请订单
         long countZiGou = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY,
               HongBaoV2.TYPE_ZIGOU);
         // 邀请订单
         long countShare = hongBaoV2CountService.counOrderByUidAndOrderType(uid, Constant.VIP_ORDER_PAY,
               HongBaoV2.TYPE_SHARE_GOODS);
         // 队员
         long firstTeam = threeSaleSerivce.countFirstTeam(uid, 1);
         long secondTeam = threeSaleSerivce.countSecondTeam(uid, 1);
         // 一阶段
         boolean process1 = oneProcess(uid, countZiGou, countShare, firstTeam, secondTeam);
         if (!process1) {
            return;
         }
         // 二阶段
         twoProcess(uid, countZiGou, countShare, firstTeam, secondTeam);
      } catch (Exception e) {
         LogHelper.errorDetailInfo(e);
      }
   }
   /**
    * 一阶段
    *
    * @param uid
    * @param countZiGou
    * @param countShare
@@ -114,27 +159,43 @@
    * @param secondTeam
    */
   private boolean oneProcess(Long uid, long countZiGou, long countShare, long firstTeam, long secondTeam) {
      UserVIPPreInfo oldInfo = userVIPPreInfoMapper.selectByUidAndProcess(uid, UserVIPPreInfo.PROCESS_1);
      if (oldInfo != null) {
         return true;
      boolean process = false;
      String msg = "";
      if (countZiGou >= Constant.VIP_PROCESS_1_ZIGOU) {
         process = true;
         msg = "恭喜你!返利订单达到 " + Constant.VIP_PROCESS_1_ZIGOU + "笔";
      } else if (countShare >= Constant.VIP_PROCESS_1_SHARE) {
         process = true;
         msg = "恭喜你!分享订单达到 " + Constant.VIP_PROCESS_1_SHARE + "笔";
      } else if (firstTeam >= Constant.VIP_PROCESS_1_TEAM && secondTeam >= Constant.VIP_PROCESS_1_TEAM_SECOND) {
         process = true;
         msg = "直接粉丝达到" + Constant.VIP_PROCESS_1_TEAM + "人,间接粉丝达到 " + Constant.VIP_PROCESS_1_TEAM_SECOND + "人";
      }
      if (countZiGou >= Constant.VIP_PROCESS_1_ZIGOU || countShare >= Constant.VIP_PROCESS_1_SHARE
            || (firstTeam >= Constant.VIP_PROCESS_1_TEAM && secondTeam >= Constant.VIP_PROCESS_1_TEAM_SECOND)) {
         UserVIPPreInfo info = new UserVIPPreInfo();
         info.setUid(uid);
         info.setProcess(UserVIPPreInfo.PROCESS_1);
         info.setCreateTime(new Date());
         info.setUpdateTime(new Date());
         userVIPPreInfoMapper.insertSelective(info);
         return true;
      if (process) {
         try {
            UserVIPPreInfo info = new UserVIPPreInfo();
            info.setUid(uid);
            info.setProcess(UserVIPPreInfo.PROCESS_1);
            info.setCreateTime(new Date());
            info.setUpdateTime(new Date());
            addUserVIPPreInfo(info);
            // 消息
            MsgAccountVipDTO msgDto = new MsgAccountVipDTO();
            msgDto.setStatus("系统已将你的账户由快省达人升级为普通会员");
            msgDto.setEquity("从收到本消息起,你将获得全部普通会员权益");
            msgAccountDetailService.addMsgVIP(uid, msg, "如有疑问请联系我的-人工客服", msgDto);
         } catch (UserVIPPreInfoException e) {
            e.printStackTrace();
         }
      }
      return false;
      return process;
   }
   /**
    * 一阶段
    * 二阶段
    *
    * @param uid
    * @param countZiGou
    * @param countShare
@@ -142,43 +203,44 @@
    * @param secondTeam
    */
   private boolean twoProcess(Long uid, long countZiGou, long countShare, long firstTeam, long secondTeam) {
      UserVIPPreInfo oldInfo = userVIPPreInfoMapper.selectByUidAndProcess(uid, UserVIPPreInfo.PROCESS_2);
      if (oldInfo != null) {
         return true;
      boolean process = false;
      String msg = "";
      if (countZiGou >= Constant.VIP_PROCESS_2_ZIGOU) {
         process = true;
         msg = "恭喜你!返利订单达到 " + Constant.VIP_PROCESS_2_ZIGOU + "笔";
      } else if (countShare >= Constant.VIP_PROCESS_2_SHARE) {
         process = true;
         msg = "恭喜你!分享订单达到 " + Constant.VIP_PROCESS_2_SHARE + "笔";
      } else if (firstTeam >= Constant.VIP_PROCESS_2_TEAM && secondTeam >= Constant.VIP_PROCESS_2_TEAM_SECOND) {
         process = true;
         msg = "直接粉丝达到" + Constant.VIP_PROCESS_2_TEAM + "人,间接粉丝达到 " + Constant.VIP_PROCESS_2_TEAM_SECOND + "人";
      }
      if (countZiGou >= Constant.VIP_PROCESS_2_ZIGOU || countShare >= Constant.VIP_PROCESS_2_SHARE
            || (firstTeam >= Constant.VIP_PROCESS_2_TEAM && secondTeam >= Constant.VIP_PROCESS_2_TEAM_SECOND)) {
         UserVIPPreInfo info = new UserVIPPreInfo();
         info.setUid(uid);
         info.setProcess(UserVIPPreInfo.PROCESS_2);
         info.setCreateTime(new Date());
         info.setUpdateTime(new Date());
         userVIPPreInfoMapper.insertSelective(info);
         return true;
      if (process) {
         try {
            UserVIPPreInfo info = new UserVIPPreInfo();
            info.setUid(uid);
            info.setProcess(UserVIPPreInfo.PROCESS_2);
            info.setCreateTime(new Date());
            info.setUpdateTime(new Date());
            addUserVIPPreInfo(info);
            // 消息
            MsgAccountVipDTO msgDto = new MsgAccountVipDTO();
            msgDto.setStatus("系统已将你的账户由普通会员升级为高级会员");
            msgDto.setEquity("从收到本消息起,你将获得全部高级会员权益");
            msgAccountDetailService.addMsgVIP(uid, msg, "如有疑问请联系我的-人工客服", msgDto);
         } catch (UserVIPPreInfoException e) {
            e.printStackTrace();
         }
      }
      return false;
      return process;
   }
   /**
    * 一阶段
    * @param uid
    * @param countZiGou
    * @param countShare
    * @param firstTeam
    * @param secondTeam
    */
   private boolean vipProcess(Long uid, long countZiGou, long countShare, long firstTeam, long secondTeam) {
      if (countZiGou >= Constant.VIP_PROCESS_3_ZIGOU || countShare >= Constant.VIP_PROCESS_3_SHARE
            || (firstTeam >= Constant.VIP_PROCESS_3_TEAM && secondTeam >= Constant.VIP_PROCESS_3_TEAM_SECOND)) {
         return true;
      }
      return false;
   @Override
   public UserVIPPreInfo selectByUidAndProcess(Long uid, int process) {
      UserVIPPreInfo info = userVIPPreInfoMapper.selectByUidAndProcess(uid, process);
      return info;
   }
}