yujian
2020-03-28 393e3a365b5ebbed6e9eef07fbd18881cde73711
fanli/src/main/java/com/yeshi/fanli/service/impl/user/vip/UserVIPPreInfoServiceImpl.java
@@ -7,24 +7,53 @@
import javax.annotation.Resource;
import com.yeshi.fanli.dao.mybatis.user.vip.UserVIPPreInfoMapper;
import com.yeshi.fanli.entity.bus.user.vip.UserVIPPreInfo;
import com.yeshi.fanli.exception.user.vip.UserVIPInfoException;
import com.yeshi.fanli.service.inter.user.vip.UserVIPPreInfoService;
import org.springframework.stereotype.Service;
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.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.msg.MsgAccountDetailService;
import com.yeshi.fanli.service.inter.user.vip.UserVIPPreInfoService;
import com.yeshi.fanli.service.inter.user.vip.UserVipConfigService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.TimeUtil;
import com.yeshi.fanli.util.annotation.RequestSerializableByKeyService;
@Service
public class UserVIPPreInfoServiceImpl implements UserVIPPreInfoService {
   @Resource
   private UserVIPPreInfoMapper userVIPPreInfoMapper;
   @Resource
   private HongBaoV2CountService hongBaoV2CountService;
   @Resource
   private ThreeSaleSerivce threeSaleSerivce;
   @Resource
   private MsgAccountDetailService msgAccountDetailService;
   @Resource
   private UserVipConfigService userVipConfigService;
   @Override
   public void addUserVIPPreInfo(UserVIPPreInfo info) throws UserVIPInfoException {
   public void addUserVIPPreInfo(UserVIPPreInfo info) throws UserVIPPreInfoException {
      if (info == null || info.getUid() == null || info.getProcess() == null)
         throw new UserVIPInfoException(1, "信息不完整");
         throw new UserVIPPreInfoException(1, "信息不完整");
      UserVIPPreInfo oldInfo = userVIPPreInfoMapper.selectByUidAndProcess(info.getUid(), info.getProcess());
      if (oldInfo != null)
         throw new UserVIPInfoException(2, "进度已存在");
         throw new UserVIPPreInfoException(2, "进度已存在");
      if (info.getCreateTime() == null)
         info.setCreateTime(new Date());
      userVIPPreInfoMapper.insertSelective(info);
@@ -48,4 +77,226 @@
      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 verifyVipPreInfo(Long uid, boolean inviteSuccess) {
      if (uid == null || uid <= 0)
         return;
      verifyCondition(uid);
      // 验证上级
      if (inviteSuccess) {
         UserInfo boss = threeSaleSerivce.getBoss(uid);
         if (boss != null) {
            verifyVipPreInfoBoss(boss.getId());
         }
      }
   }
   // 上级验证
   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
    * @param firstTeam
    * @param secondTeam
    */
   private boolean oneProcess(Long uid, long countZiGou, long countShare, long firstTeam, long secondTeam) {
      boolean process = false;
      String msg = "";
      long limitZiGou = 0;
      String zigou = userVipConfigService.getValueByKey("vip_pre_3_zigou_order_count");
      if (!StringUtil.isNullOrEmpty(zigou)) {
         limitZiGou = Long.parseLong(zigou);
      }
      long limitShare = 0;
      String share = userVipConfigService.getValueByKey("vip_pre_3_share_order_count");
      if (!StringUtil.isNullOrEmpty(share)) {
         limitShare = Long.parseLong(share);
      }
      long limitFirst = 0;
      String first = userVipConfigService.getValueByKey("vip_pre_3_first_level_team_count");
      if (!StringUtil.isNullOrEmpty(first)) {
         limitFirst = Long.parseLong(first);
      }
      long limitSecond = 0;
      String second = userVipConfigService.getValueByKey("vip_pre_3_second_level_team_count");
      if (!StringUtil.isNullOrEmpty(second)) {
         limitSecond = Long.parseLong(second);
      }
      if (countZiGou >= limitZiGou) {
         process = true;
         msg = "恭喜你!返利订单达到 " + limitZiGou + "笔";
      } else if (countShare >= limitShare) {
         process = true;
         msg = "恭喜你!分享订单达到 " + limitShare + "笔";
      } else if (firstTeam >= limitFirst && secondTeam >= limitSecond) {
         process = true;
         msg = "直接粉丝达到" + limitFirst + "人,间接粉丝达到 " + limitSecond + "人";
      }
      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 process;
   }
   /**
    * 二阶段
    *
    * @param uid
    * @param countZiGou
    * @param countShare
    * @param firstTeam
    * @param secondTeam
    */
   private boolean twoProcess(Long uid, long countZiGou, long countShare, long firstTeam, long secondTeam) {
      boolean process = false;
      String msg = "";
      long limitZiGou = 0;
      String zigou = userVipConfigService.getValueByKey("vip_pre_7_zigou_order_count");
      if (!StringUtil.isNullOrEmpty(zigou)) {
         limitZiGou = Long.parseLong(zigou);
      }
      long limitShare = 0;
      String share = userVipConfigService.getValueByKey("vip_pre_7_share_order_count");
      if (!StringUtil.isNullOrEmpty(share)) {
         limitShare = Long.parseLong(share);
      }
      long limitFirst = 0;
      String first = userVipConfigService.getValueByKey("vip_pre_7_first_level_team_count");
      if (!StringUtil.isNullOrEmpty(first)) {
         limitFirst = Long.parseLong(first);
      }
      long limitSecond = 0;
      String second = userVipConfigService.getValueByKey("vip_pre_7_second_level_team_count");
      if (!StringUtil.isNullOrEmpty(second)) {
         limitSecond = Long.parseLong(second);
      }
      if (countZiGou >= limitZiGou) {
         process = true;
         msg = "恭喜你!返利订单达到 " + limitZiGou + "笔";
      } else if (countShare >= limitShare) {
         process = true;
         msg = "恭喜你!分享订单达到 " + limitShare + "笔";
      } else if (firstTeam >= limitFirst && secondTeam >= limitSecond) {
         process = true;
         msg = "直接粉丝达到" + limitFirst + "人,间接粉丝达到 " + limitSecond + "人";
      }
      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 process;
   }
   @Override
   public UserVIPPreInfo selectByUidAndProcess(Long uid, int process) {
      UserVIPPreInfo info = userVIPPreInfoMapper.selectByUidAndProcess(uid, process);
      return info;
   }
}