yujian
2019-12-19 bb07147aaa96d1ef4c99e358dbbe7dad160dc62a
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoExtraServiceImpl.java
@@ -19,8 +19,15 @@
import org.yeshi.utils.entity.FileUploadResult;
import org.yeshi.utils.tencentcloud.COSManager;
import com.aliyun.openservices.ons.api.Message;
import com.aliyun.openservices.ons.api.Producer;
import com.google.gson.Gson;
import com.yeshi.fanli.dao.mybatis.user.UserInfoExtraMapper;
import com.yeshi.fanli.dao.mybatis.user.UserRankRecordMapper;
import com.yeshi.fanli.dto.mq.user.UserTopicTagEnum;
import com.yeshi.fanli.dto.mq.user.body.InviteCodeActiveMQMsg;
import com.yeshi.fanli.dto.mq.user.body.UserInfoUpdateMQMsg;
import com.yeshi.fanli.dto.mq.user.body.UserInfoUpdateMQMsg.UserInfoUpdateTypeEnum;
import com.yeshi.fanli.dto.wx.WXAccountInfoDTO;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
@@ -43,6 +50,8 @@
import com.yeshi.fanli.util.InviteCodeFilterUtil;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.account.UserUtil;
import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory;
import com.yeshi.fanli.util.rocketmq.MQTopicName;
import com.yeshi.fanli.util.wx.WXLoginUtil;
import com.yeshi.fanli.vo.user.UserInfoExtraVO;
@@ -78,6 +87,9 @@
   @Resource
   private UserInviteRecordService userInviteRecordService;
   @Resource(name = "producer")
   private Producer producer;
   @Override
   public UserInfoExtraVO getRankInfo(Long uid) throws UserInfoExtraException, Exception {
@@ -176,7 +188,7 @@
      } else {
         extra.setUserInfo(new UserInfo(uid));
      }
      // 更新等级
      if (isupdateRank) {
         List<UserRank> listRank = userRankService.getAllRank();
@@ -276,7 +288,6 @@
      userInfoExtraMapper.insertSelective(userInfoExtra);
   }
   @Override
   public UserInfoExtra saveUserInfoExtra(UserInfoExtra userInfoExtra) throws UserInfoExtraException {
@@ -313,9 +324,9 @@
   @Override
   @Transactional(rollbackFor = Exception.class)
   public String activateInviteCode(Long uid, String inviteCode) throws UserInfoExtraException {
      if (uid == null || inviteCode == null)
      if (uid == null || inviteCode == null)
         throw new UserInfoExtraException(1, "激活信息不能为空");
      // 被邀请人信息
      UserInfo invitee = userInfoService.selectByPKey(uid);
      if (invitee == null)
@@ -331,7 +342,7 @@
      UserInfo inviter = userInfoService.getUserInfoByInviteCode(inviteCode);
      if (inviter == null)
         throw new UserInfoExtraException(1, "上级邀请码不存在");
      // 绑定关系
      try {
         threeSaleSerivce.bindRelationshipByInviteCode(invitee, inviter);
@@ -346,7 +357,7 @@
      // 生成邀请码
      String mycode = createInviteCode(uid);
      if (StringUtil.isNullOrEmpty(mycode))
      if (StringUtil.isNullOrEmpty(mycode))
         throw new UserInfoExtraException(1, "激活码生成失败");
      UserInfoExtra userInfoExtra = new UserInfoExtra();
@@ -360,6 +371,12 @@
         userInfoExtra.setCreateTime(new Date());
         userInfoExtraMapper.insertSelective(userInfoExtra);
      }
      // 发送激活成功消息
      Message message = MQMsgBodyFactory.create(MQTopicName.TOPIC_USER, UserTopicTagEnum.inviteCodeActive,
            new Gson().toJson(new InviteCodeActiveMQMsg(uid, new Date())));
      producer.send(message);
      return mycode;
   }
@@ -368,7 +385,7 @@
   public void activationInviteWX(WXAccountInfoDTO wxAccount, Long uid, String code) throws UserInfoExtraException {
      if (uid == null || code == null)
         throw new UserInfoExtraException(1, "激活信息不完整");
      UserInfo invitee = userInfoService.selectByPKey(uid);
      if (invitee == null)
         throw new UserInfoExtraException(1, "用户不存在");
@@ -458,9 +475,9 @@
      // 生成邀请码
      String inviteCode = createInviteCode(uid);
      if (StringUtil.isNullOrEmpty(inviteCode))
      if (StringUtil.isNullOrEmpty(inviteCode))
         throw new UserInfoExtraException(1, "激活码生成失败");
      UserInfoExtra userInfoExtra = new UserInfoExtra();
      userInfoExtra.setUserInfo(invitee);
      userInfoExtra.setInviteCode(inviteCode);
@@ -472,6 +489,10 @@
         userInfoExtra.setCreateTime(new Date());
         userInfoExtraMapper.insertSelective(userInfoExtra);
      }
      // 发送激活成功消息
      Message message = MQMsgBodyFactory.create(MQTopicName.TOPIC_USER, UserTopicTagEnum.inviteCodeActive,
            new Gson().toJson(new InviteCodeActiveMQMsg(uid, new Date())));
      producer.send(message);
   }
   @Override
@@ -571,10 +592,11 @@
      }
      // 生成邀请码
      String inviteCode = createInviteCode(uid);;
      if (StringUtil.isNullOrEmpty(inviteCode))
      String inviteCode = createInviteCode(uid);
      ;
      if (StringUtil.isNullOrEmpty(inviteCode))
         throw new UserInfoExtraException(1, "激活码生成失败");
      UserInfoExtra userInfoExtra = new UserInfoExtra();
      userInfoExtra.setUserInfo(invitee);
      userInfoExtra.setInviteCode(inviteCode);
@@ -617,12 +639,12 @@
   public void updateGoldCoin(Long id, Integer goldCoin) {
      userInfoExtraMapper.updateGoldCoin(id, goldCoin);
   }
   @Override
   public void addGoldCoinByUid(Long uid, Integer goldCoin) {
      userInfoExtraMapper.addGoldCoinByUid(uid, goldCoin);
   }
   @Override
   public void updateByPrimaryKeySelective(UserInfoExtra record) {
      userInfoExtraMapper.updateByPrimaryKeySelective(record);
@@ -640,17 +662,17 @@
         // vip邀请码优先
         if (!StringUtil.isNullOrEmpty(userInfoExtra.getInviteCodeVip()))
            return userInfoExtra.getInviteCodeVip();
         if (!StringUtil.isNullOrEmpty(userInfoExtra.getInviteCode()))
            return userInfoExtra.getInviteCode();
         // 是否满足生产邀请码
         int relationshipNum = threeSaleSerivce.getSuccessRelationshipNum(uid);
         if (relationshipNum > 0) {
            try {
               String inviteCode = createInviteCode(uid);
               if (!StringUtil.isNullOrEmpty(inviteCode)) {
                  UserInfoExtra extra= new UserInfoExtra();
                  UserInfoExtra extra = new UserInfoExtra();
                  extra.setId(userInfoExtra.getId());
                  extra.setInviteCode(inviteCode);
                  userInfoExtraMapper.updateByPrimaryKeySelective(extra);
@@ -666,12 +688,13 @@
   /**
    * 生产邀请码
    *
    * @param uid
    * @return
    */
   private String createInviteCode(Long uid) {
      String inviteCode = null;
      for (int i = 1; i <= 5; i ++) {
      for (int i = 1; i <= 5; i++) {
         inviteCode = UserUtil.getInviteCode(i, uid);
         long countCode = userInfoExtraMapper.countByInviteCode(inviteCode);
         if (countCode <= 0)
@@ -679,8 +702,7 @@
      }
      return inviteCode;
   }
   @Override
   public long countByRankId(Long rankId) {
      return userInfoExtraMapper.countByRankId(rankId);
@@ -724,11 +746,11 @@
   public UserInfo getUserByInviteCode(String inviteCode) throws UserInfoExtraException {
      if (StringUtil.isNullOrEmpty(inviteCode))
         throw new UserInfoExtraException(1, "邀请码不能为空");
      UserInfo inviter = userInfoService.getUserInfoByInviteCode(inviteCode);
      if (inviter == null)
         throw new UserInfoExtraException(1, "上级邀请码不存在");
      return inviter;
   }
@@ -782,40 +804,44 @@
      userInfoExtraMapper.updateAutoExtract(days);
   }
   @Transactional
   @Transactional(rollbackFor=Exception.class)
   @Override
   public void updateInviteCodeVip(String inviteCodeVip, Long uid) throws UserInfoExtraException {
      if (inviteCodeVip == null || inviteCodeVip.length() < 4 || inviteCodeVip.length() > 12)
         throw new UserInfoExtraException(1, "邀请码必须为4到12位");
      UserInfoExtra extra = getUserInfoExtra(uid);
      if (extra == null)
         throw new UserInfoExtraException(2, "用户信息不存在");
      if (StringUtil.isNullOrEmpty(extra.getInviteCode()))
         throw new UserInfoExtraException(3, "邀请码尚未激活");
      if (!StringUtil.isNullOrEmpty(extra.getInviteCodeVip()))
         throw new UserInfoExtraException(4, "只能修改一次");
      // 转换成大写
      inviteCodeVip = inviteCodeVip.toUpperCase();
      // 验证特殊码
      if(InviteCodeFilterUtil.isSpecialCode(inviteCodeVip))
      if (InviteCodeFilterUtil.isSpecialCode(inviteCodeVip))
         throw new UserInfoExtraException(5, "邀请码已存在");
      if (inviteCodeVip.equalsIgnoreCase(extra.getInviteCode()))
         throw new UserInfoExtraException(5, "不能为原邀请码");
      long count = userInfoExtraMapper.countByInviteCode(inviteCodeVip);
      if (count > 0)
         throw new UserInfoExtraException(6, "邀请码已存在");
      UserInfoExtra update = new UserInfoExtra();
      update.setId(extra.getId());
      update.setInviteCodeVip(inviteCodeVip);
      update.setUpdateTime(new Date());
      userInfoExtraMapper.updateByPrimaryKeySelective(update);
       //发送邀请码更改成功的消息
      Message message = MQMsgBodyFactory.create(MQTopicName.TOPIC_USER, UserTopicTagEnum.userInfoUpdate,
            new Gson().toJson(new UserInfoUpdateMQMsg(uid, UserInfoUpdateTypeEnum.inviteCode, inviteCodeVip, new Date())));
      producer.send(message);
   }
}