admin
2019-07-30 573c491b4a1ba60e12a5678a01c1546c0077c1ee
fanli/src/main/java/com/yeshi/fanli/service/impl/user/UserInfoExtraServiceImpl.java
@@ -1,6 +1,9 @@
package com.yeshi.fanli.service.impl.user;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@@ -13,16 +16,28 @@
import com.yeshi.fanli.dao.mybatis.user.UserInfoExtraMapper;
import com.yeshi.fanli.dao.mybatis.user.UserRankRecordMapper;
import com.yeshi.fanli.entity.bus.user.ThreeSale;
import com.yeshi.fanli.entity.bus.user.UserInfo;
import com.yeshi.fanli.entity.bus.user.UserInfoExtra;
import com.yeshi.fanli.entity.bus.user.UserRank;
import com.yeshi.fanli.entity.bus.user.UserRankRecord;
import com.yeshi.fanli.entity.bus.user.WeiXinUser;
import com.yeshi.fanli.exception.ThreeSaleException;
import com.yeshi.fanli.exception.user.UserInfoExtraException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.hongbao.ThreeSaleSerivce;
import com.yeshi.fanli.service.inter.order.CommonOrderCountService;
import com.yeshi.fanli.service.inter.user.ForbiddenUserIdentifyCodeService;
import com.yeshi.fanli.service.inter.user.UserAccountService;
import com.yeshi.fanli.service.inter.user.UserInfoExtraService;
import com.yeshi.fanli.service.inter.user.UserInfoService;
import com.yeshi.fanli.service.inter.user.UserInviteRecordService;
import com.yeshi.fanli.service.inter.user.UserRankService;
import com.yeshi.fanli.util.Constant;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.account.UserUtil;
import com.yeshi.fanli.util.wx.WXLoginUtil;
import com.yeshi.fanli.vo.user.UserInfoExtraVO;
@@ -43,6 +58,22 @@
   @Resource
   private ConfigService configService;
   @Resource
   private ThreeSaleSerivce threeSaleSerivce;
   @Resource
   private UserInfoService userInfoService;
   @Resource
   private UserAccountService userAccountService;
   @Resource
   private ForbiddenUserIdentifyCodeService forbiddenUserIdentifyCodeService;
   @Resource
   private UserInviteRecordService userInviteRecordService;
   @Override
   public UserInfoExtraVO getRankInfo(Long uid) throws UserInfoExtraException, Exception {
@@ -52,19 +83,19 @@
         throw new UserInfoExtraException(1, "用户附加信息不存在");
      }
      // 等级列表
      List<UserRank> listRank = userRankService.getAllRank();
      if (listRank == null || listRank.size() == 0) {
         throw new UserInfoExtraException(1, "系统等级不存在");
      }
      extraVO.setListRank(listRank);
      // 等级对照表
      String contrast = configService.get("user_rank_contrast");
      extraVO.setRankContrast(contrast);
      // 特别提醒
      String rankTip = configService.get("user_rank_tip");
      extraVO.setRankTip(rankTip);
      Integer rankOrderNum = extraVO.getRankOrderNum();
      if (rankOrderNum != null && rankOrderNum > 0) {
      UserRank userRank = extraVO.getUserRank();
      // 青铜等级不返回恭喜语句 注:青铜等级id 必须为1
      if (userRank != null && userRank.getId() != null && userRank.getId() > 1) {
         String rankMsg = null;
         Integer rankSource = extraVO.getRankSource();
         switch (rankSource) {
@@ -119,7 +150,10 @@
   }
   @Override
   public UserInfoExtra updateUserRankByUid(Long uid) throws UserInfoExtraException{
   public void updateUserRankByUid(Long uid) throws UserInfoExtraException{
      if (uid == null || uid == 0) {
         return;
      }
      
      boolean isupdateRank = true;
      
@@ -127,8 +161,11 @@
      if (userInfoExtra != null && userInfoExtra.getId() != null) {
         // 判断当月是否已更新
         Date rankUpdateTime = userInfoExtra.getRankUpdateTime();
         if (rankUpdateTime != null && DateUtil.isSameMonth(rankUpdateTime, new Date())) {
            isupdateRank = false;
         if (rankUpdateTime != null) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
            if (sdf.format(rankUpdateTime).equals(sdf.format(new Date()))) {
               isupdateRank = false;
            }
         } 
      } else {
         userInfoExtra = new UserInfoExtra();
@@ -139,8 +176,21 @@
      if (isupdateRank) {
         updateRank(userInfoExtra);
      }
   }
   @Override
   public void createUserInfoExtra (Long uid) throws UserInfoExtraException{
      UserInfoExtra userInfoExtra = userInfoExtraMapper.getInfoExtraByUid(uid);
      if (userInfoExtra != null) {
         return;
      }
      
      return userInfoExtra;
      userInfoExtra = new UserInfoExtra();
      userInfoExtra.setUserInfo(new UserInfo(uid));
      userInfoExtra.setFirstLoginTime(new Date());
      userInfoExtra.setCreateTime(new Date());
      userInfoExtra.setUpdateTime(new Date());
      userInfoExtraMapper.insertSelective(userInfoExtra);
   }
   
   
@@ -215,13 +265,17 @@
            rank = userRank;
            // 默认最低等级:青铜
            userInfoExtra.setUserRank(rank);
            userInfoExtra.setRankOrderNum(0);
            userInfoExtra.setRankOrderNum(selfOrderNum);
            userInfoExtra.setRankSource(Constant.TYPE_REBATE);
            break;
         }
      }
      // 等级更新时间
      userInfoExtra.setRankUpdateTime(new Date());
      // 等级更新时间 当月1号
      Calendar calendar1=Calendar.getInstance();
        calendar1.set(Calendar.DAY_OF_MONTH, 1);
      userInfoExtra.setRankUpdateTime(calendar1.getTime());
      // 保存信息并返回
      saveUserInfoExtra(userInfoExtra);
      
@@ -264,8 +318,267 @@
         }
      }
      return userInfoExtra;
   }
   @Override
   public String activateInviteCode(Long uid, String inviteCode, String platform, String version) throws UserInfoExtraException{
      if (uid == null || inviteCode == null) {
         throw new UserInfoExtraException(1, "用户id、邀请码不能为空");
      }
      // 被邀请人信息
      UserInfo invitee = userInfoService.selectByPKey(uid);
      if (invitee == null) {
         throw new UserInfoExtraException(1, "用户不存在");
      }
      UserInfoExtra extra = userInfoExtraMapper.getInfoExtraByUid(uid);
      if (extra != null) {
         String inviteCodeHas = extra.getInviteCode();
         if (inviteCodeHas != null && inviteCodeHas.trim().length() > 0) {
            throw new UserInfoExtraException(1, "已存在邀请码,请刷新页面");
         }
      }
      // 邀请人信息
      UserInfo inviter = userInfoService.getInfoByPhoneOrInviteCode(inviteCode, inviteCode);
      if (inviter == null) {
         throw new UserInfoExtraException(1, "上级邀请码不存在");
      }
      // 绑定关系
      try {
         threeSaleSerivce.bindRelationshipByInviteCode(invitee, inviter, platform, version);
      } catch (ThreeSaleException e) {
         try {
            LogHelper.errorDetailInfo(e);
         } catch (Exception e1) {
            e1.printStackTrace();
         }
         throw new UserInfoExtraException(1, "激活失败");
      }
      // 邀请码有效、生成邀请码
      String code = UserUtil.getInviteCode(uid);
      if (code == null || code.trim().length() == 0) {
         throw new UserInfoExtraException(1, "激活码生成失败");
      }
      UserInfoExtra userInfoExtra = new UserInfoExtra();
      userInfoExtra.setUserInfo(invitee);
      userInfoExtra.setInviteCode(code);
      // 保存额外信息
      saveUserInfoExtra(userInfoExtra);
      Long id = userInfoExtra.getId();
      if (id == null) {
         throw new UserInfoExtraException(1, "激活码生成失败");
      }
      return code;
   }
   @Override
   public void activationInviteWX(Long uid, String code, String platform, String version) throws UserInfoExtraException{
      if (uid == null || code == null) {
         throw new UserInfoExtraException(1, "激活信息不完整");
      }
      // 用户信息
      UserInfo invitee = userInfoService.selectByPKey(uid);
      if (invitee == null) {
         throw new UserInfoExtraException(1, "用户不存在");
      }
      // 用户额外信息
      UserInfoExtra extra = userInfoExtraMapper.getInfoExtraByUid(uid);
      if (extra != null) {
         String inviteCodeHas = extra.getInviteCode();
         if (inviteCodeHas != null && inviteCodeHas.trim().length() > 0) {
            throw new UserInfoExtraException(1, "已经激活, 无需再次激活");
         }
      }
      // 获取微信信息
      WeiXinUser weiXinUser = WXLoginUtil.getWeiXinUser(code);
      if (weiXinUser == null) {
         throw new UserInfoExtraException(1, "微信授权失败");
      }
      String wxUnionId = weiXinUser.getUnionid();
      if (wxUnionId == null || wxUnionId.trim().length() == 0) {
         throw new UserInfoExtraException(1, "微信授权失败");
      }
      // 验证数据
      String wxUnionIdExist = invitee.getWxUnionId();
      if (StringUtil.isNullOrEmpty(wxUnionIdExist)) {
         UserInfo newUser = userInfoService.getEffectiveUserInfoByWXUnionId(weiXinUser.getUnionid());
         if (newUser != null) {
            throw new UserInfoExtraException(1, "此微信已被其他帐号绑定");
         }
         // 自动绑定微信
         UserInfo updateUserInfo = new UserInfo(uid);
         updateUserInfo.setWxOpenId(weiXinUser.getOpenid());
         updateUserInfo.setWxUnionId(weiXinUser.getUnionid());
         if (!StringUtil.isNullOrEmpty(weiXinUser.getNickname())) {
            updateUserInfo.setWxName(weiXinUser.getNickname());
            updateUserInfo.setNickName(weiXinUser.getNickname());
         }
         if (!StringUtil.isNullOrEmpty(weiXinUser.getHeadimgurl())) {
            updateUserInfo.setWxPic(weiXinUser.getHeadimgurl());
            updateUserInfo.setPortrait(weiXinUser.getHeadimgurl());
         }
         userInfoService.updateByPrimaryKeySelective(updateUserInfo);
      } else if (!wxUnionId.equals(wxUnionIdExist)){
         throw new UserInfoExtraException(1, "绑定微信与激活微信不一致");
      }
      // 邀请人ID -1.5.3新版
      Long inviterId = userInviteRecordService.getNewestInviterId(wxUnionId);
      // 兼容1.5.3 之前版本
      ThreeSale threeSale = threeSaleSerivce.getByWorkerId(uid);
      if (inviterId == null && threeSale != null) {
         Long bossId = threeSale.getBoss().getId();
         UserInfoExtra inviterExtra = userInfoExtraMapper.getInfoExtraByUid(bossId);
         if (inviterExtra != null && inviterExtra.getInviteCode() == null ) {
            // 更新邀请码
            UserInfoExtra inviterInfoExtra = new UserInfoExtra();
            inviterInfoExtra.setId(inviterExtra.getId());
            inviterInfoExtra.setInviteCode(UserUtil.getInviteCode(bossId));
            userInfoExtraMapper.updateByPrimaryKeySelective(inviterInfoExtra);
         }
      }
      // 没有被邀请过
      if (inviterId == null && threeSale == null) {
         throw new UserInfoExtraException(1, "没有对应的邀请关系");
      }
      // 绑定关系
      try {
         threeSaleSerivce.bindRelationshipByWX(invitee, inviterId, threeSale, platform, version);
      } catch (ThreeSaleException e) {
         try {
            LogHelper.errorDetailInfo(e);
         } catch (Exception e1) {
            e1.printStackTrace();
         }
         throw new UserInfoExtraException(1, "关系绑定时失败");
      }
      // 邀请码有效、生成邀请码
      String inviteCode = UserUtil.getInviteCode(uid);
      if (inviteCode == null || inviteCode.trim().length() == 0) {
         throw new UserInfoExtraException(1, "激活码生成失败");
      }
      // 保存邀请码
      UserInfoExtra userInfoExtra = new UserInfoExtra();
      userInfoExtra.setUserInfo(invitee);
      userInfoExtra.setInviteCode(inviteCode);
      userInfoExtra.setUpdateTime(new Date());
      if (extra != null) {
         userInfoExtra.setId(extra.getId());
         userInfoExtraMapper.updateByPrimaryKeySelective(userInfoExtra);
      } else {
         userInfoExtra.setCreateTime(new Date());
         userInfoExtraMapper.insertSelective(userInfoExtra);
      }
   }
   @Override
   public UserInfoExtra getUserInfoExtra(Long uid) {
      return userInfoExtraMapper.getInfoExtraByUid(uid);
   }
   @Override
   public UserInfoExtraVO getInfoExtraVOByUid(Long uid) {
      return userInfoExtraMapper.getInfoExtraVOByUid(uid);
   }
   @Override
   public String getUserInviteCode(Long uid) throws UserInfoExtraException {
      UserInfoExtra userInfoExtra = userInfoExtraMapper.getInfoExtraByUid(uid);
      if (userInfoExtra == null) {
         userInfoExtra = new UserInfoExtra();
      }
      // 邀请码
      String inviteCode = userInfoExtra.getInviteCode();
      if (inviteCode == null || inviteCode.trim().length() == 0) {
         // 判断用户
         int relationshipNum = threeSaleSerivce.getSuccessRelationshipNum(uid);
         if (relationshipNum > 0) {
            // 邀请码有效、生成邀请码
            inviteCode = UserUtil.getInviteCode(uid);
            if (inviteCode == null || inviteCode.trim().length() == 0) {
               throw new UserInfoExtraException(1, "激活码生成失败");
            }
            // 保存邀请码
            userInfoExtra.setUserInfo(new UserInfo(uid));
            userInfoExtra.setInviteCode(inviteCode);
            // 保存附加信息
            saveUserInfoExtra(userInfoExtra);
         }
      }
      return inviteCode;
   }
   @Override
   public long countByRankId(Long rankId) {
      return userInfoExtraMapper.countByRankId(rankId);
   }
   @Override
   public boolean isNewUser(Long uid) {
      boolean isNew = false;
      if (uid == null) {
         return isNew;
      }
      UserInfoExtra extra = userInfoExtraMapper.getInfoExtraByUid(uid);
      if (extra != null && extra.getFirstLoginTime() != null) {
         try {
            int day = DateUtil.daysBetween(extra.getFirstLoginTime(), new Date());
            if (day <= 15) {
               isNew = true;
            }
         } catch (ParseException e) {
            e.printStackTrace();
         }
      }
      return isNew;
   }
   @Override
   public UserRank gerUserRank(Long uid) {
      if(uid == null) {
         return null;
      }
      UserInfoExtra userInfoExtra = userInfoExtraMapper.gerUserRank(uid);
      if (userInfoExtra == null) {
         return null;
      }
      return userInfoExtra.getUserRank();
   }
}