xiaoyong931011
2020-05-28 7d4d43849aa80a6f36736a0deccc7e8d4fcd566f
src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
@@ -1,11 +1,12 @@
package com.xcong.excoin.modules.member.service.impl;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.asymmetric.Sign;
import cn.hutool.crypto.asymmetric.SignAlgorithm;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xcong.excoin.common.LoginUserUtils;
import com.xcong.excoin.common.contants.AppContants;
import com.xcong.excoin.common.enumerates.CoinTypeEnum;
import com.xcong.excoin.common.enumerates.SymbolEnum;
@@ -13,13 +14,27 @@
import com.xcong.excoin.common.system.dto.RegisterDto;
import com.xcong.excoin.modules.member.dao.*;
import com.xcong.excoin.modules.member.entity.*;
import com.xcong.excoin.modules.member.parameter.dto.MemberAuthenticationDto;
import com.xcong.excoin.modules.member.parameter.dto.MemberForgetPwdDto;
import com.xcong.excoin.modules.member.parameter.dto.MemberUpdatePwdDto;
import com.xcong.excoin.modules.member.parameter.dto.MemberUpdateTradePwdDto;
import com.xcong.excoin.modules.member.parameter.vo.MemberInfoVo;
import com.xcong.excoin.modules.member.service.MemberService;
import com.xcong.excoin.utils.MessageSourceUtils;
import com.xcong.excoin.utils.RedisUtils;
import com.xcong.excoin.utils.ShareCodeUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.validation.Valid;
/**
 * @author wzy
@@ -43,6 +58,12 @@
    @Resource
    private MemberLevelRateDao memberLevelRateDao;
    @Resource
    MemberAuthenticationDao memberAuthenticationDao;
    @Autowired
    RedisUtils redisUtils;
    @Transactional()
    @Override
@@ -135,9 +156,249 @@
            levelRate.setSymbol(symbolEnum.getValue());
            memberLevelRateDao.insert(levelRate);
        }
        return Result.ok("success");
    }
   @Override
   public Result getMemberInfo() {
      //获取用户ID
      Long memberId = LoginUserUtils.getAppLoginUser().getId();
      MemberEntity memberEntity = memberDao.selectById(memberId);
      MemberInfoVo memberInfoVo = new MemberInfoVo();
        if (ObjectUtil.isNotEmpty(memberEntity)) {
           memberInfoVo.setPhone(memberEntity.getPhone());
           memberInfoVo.setInviteId(memberEntity.getInviteId());
        }
        return Result.ok(memberInfoVo);
    }
   @Override
   @Transactional
   public Result memberForgetPwd(@Valid MemberForgetPwdDto memberForgetPwdDto) {
      int type = memberForgetPwdDto.getType();
      String phone = memberForgetPwdDto.getPhone();
      String email = memberForgetPwdDto.getEmail();
      String code = memberForgetPwdDto.getCode();
      String password = memberForgetPwdDto.getPassword();
      Map<String, Object> hashMap = new HashMap<>();
      if(type == 1) {
         hashMap.put("phone", phone);
      }else {
         hashMap.put("email", email);
      }
      List<MemberEntity> member = memberDao.selectByMap(hashMap);
      if (CollUtil.isEmpty(member)) {
            return Result.fail(MessageSourceUtils.getString("member_service_0047"));
        }
      boolean verificationCode = verificationCode(type, phone, code, email);
      if(verificationCode) {
         MemberEntity memberEntity = member.get(0);
         memberEntity.setPassword(SecureUtil.md5(password));
         memberDao.updateById(memberEntity);
      }else {
         return Result.fail(MessageSourceUtils.getString("member_service_0045"));
      }
      if(type == 1) {
         redisUtils.del("SMS_" + phone);
      }else {
         redisUtils.del("EMAIL_" + email);
      }
        return Result.ok(MessageSourceUtils.getString("member_service_0048"));
    }
   @Override
   @Transactional
   public Result memberUpdatePwd(@Valid MemberUpdatePwdDto memberUpdatePwdDto) {
      //获取用户ID
      Long memberId = LoginUserUtils.getAppLoginUser().getId();
      MemberEntity memberEntity = memberDao.selectById(memberId);
      String code = memberUpdatePwdDto.getCode();
      String password = memberUpdatePwdDto.getPassword();
      String phone = memberUpdatePwdDto.getPhone();
      String email = memberUpdatePwdDto.getEmail();
      int type = memberUpdatePwdDto.getType();
      boolean verificationCode = verificationCode(type, phone, code, email);
      if(verificationCode) {
         memberEntity.setPassword(SecureUtil.md5(password));
         memberDao.updateById(memberEntity);
      }else {
         return Result.fail(MessageSourceUtils.getString("member_service_0041"));
      }
      if(type == 1) {
         redisUtils.del("SMS_" + phone);
      }else {
         redisUtils.del("EMAIL_" + email);
      }
        return Result.ok(MessageSourceUtils.getString("member_service_0040"));
    }
   /**
    * 验证输入的验证码
    * @param type   验证类型1:电话2:邮箱
    * @param phone
    * @param email
    * @param code      验证码
    * @return
    */
   private boolean verificationCode(Integer type,String phone,String code,String email) {
      boolean verificationCode = false;
      if(type == 1) {
         String smsCode = redisUtils.get("SMS_" + phone) + "";
         if(code.equals(smsCode)) {
            verificationCode = true;
         }
      }else {
         String emailCode = redisUtils.get("EMAIL_" + email) + "";
         if(code.equals(emailCode)) {
            verificationCode = true;
         }
      }
      return verificationCode;
   }
   @Override
   @Transactional
   public Result memberAuthentication(@Valid MemberAuthenticationDto memberAuthenticationDto) {
      //获取用户ID
      Long memberId = LoginUserUtils.getAppLoginUser().getId();
      MemberEntity member = memberDao.selectById(memberId);
        if (ObjectUtil.isNotEmpty(member)) {
               MemberAuthenticationEntity memberAuthenticationEntity = new MemberAuthenticationEntity();
                if (MemberEntity.CERTIFY_STATUS_Y == member.getCertifyStatus()) {
                    return Result.fail(MessageSourceUtils.getString("member_service_0055"));
                }
                if (MemberEntity.CERTIFY_STATUS_ING == member.getCertifyStatus()) {
                    return Result.fail(MessageSourceUtils.getString("member_service_0056"));
                }
                memberAuthenticationEntity.setMemberId(memberId);
                if (StrUtil.isBlank(memberAuthenticationDto.getNation())) {
                    return Result.fail(MessageSourceUtils.getString("member_service_0057"));
                }
                memberAuthenticationEntity.setNation(memberAuthenticationDto.getNation());
                if (StrUtil.isBlank(memberAuthenticationDto.getFirstName())) {
                    return Result.fail(MessageSourceUtils.getString("member_service_0058"));
                }
                memberAuthenticationEntity.setFirstName(memberAuthenticationDto.getFirstName());
                if (StrUtil.isBlank(memberAuthenticationDto.getSecondName())) {
                    return Result.fail(MessageSourceUtils.getString("member_service_0059"));
                }
                memberAuthenticationEntity.setSecondName(memberAuthenticationDto.getSecondName());
                String idCardNo = memberAuthenticationDto.getIdCardNo();
                if (StrUtil.isBlank(idCardNo)) {
                    return Result.fail(MessageSourceUtils.getString("member_service_0060"));
                }
                memberAuthenticationEntity.setIdcardNo(idCardNo);
                //同一个身份证号码不能重复实名认证
                int count = memberAuthenticationDao.findMemberbyIdCardNoCount(idCardNo);
                if (count > 0) {
                    return Result.fail(MessageSourceUtils.getString("member_service_0060"));
                }
                if (StrUtil.isBlank(memberAuthenticationDto.getIdCardFront())
                      || StrUtil.isBlank(memberAuthenticationDto.getIdCardReverse())
                      || StrUtil.isBlank(memberAuthenticationDto.getIdCardImage())) {
                    return Result.fail(MessageSourceUtils.getString("member_service_0061"));
                }
                memberAuthenticationEntity.setIdcardImageFront(memberAuthenticationDto.getIdCardFront());
                memberAuthenticationEntity.setIdcardImageBack(memberAuthenticationDto.getIdCardReverse());
                memberAuthenticationEntity.setIdcardImageInHand(memberAuthenticationDto.getIdCardImage());
                memberAuthenticationDao.insert(memberAuthenticationEntity);
                member.setCertifyStatus(MemberEntity.CERTIFY_STATUS_ING);
                member.setIdcardNo(idCardNo);
                memberDao.updateById(member);
                /**
                 *  TODO dingtalk
                Constant.excutor.execute(new Runnable() {
               @Override
               public void run() {
                  DingTalkUtils.sendActionCard(4);
               }
            });*/
                return Result.ok(MessageSourceUtils.getString("member_service_0024"));
        }
        return Result.fail(MessageSourceUtils.getString("member_service_0063"));
    }
   @Override
   public Result memberUpdateTradePwd(@Valid MemberUpdateTradePwdDto memberUpdateTradePwdDto) {
      //获取用户ID
      Long memberId = LoginUserUtils.getAppLoginUser().getId();
      MemberEntity memberEntity = memberDao.selectById(memberId);
      String code = memberUpdateTradePwdDto.getCode();
      String password = memberUpdateTradePwdDto.getPassword();
      String phone = memberUpdateTradePwdDto.getPhone();
      String email = memberUpdateTradePwdDto.getEmail();
      int type = memberUpdateTradePwdDto.getType();
      boolean verificationCode = verificationCode(type, phone, code, email);
      if(verificationCode) {
         memberEntity.setTradePassword(SecureUtil.md5(password));
         memberDao.updateById(memberEntity);
      }else {
         return Result.fail(MessageSourceUtils.getString("member_service_0041"));
      }
      if(type == 1) {
         redisUtils.del("SMS_" + phone);
      }else {
         redisUtils.del("EMAIL_" + email);
      }
        return Result.ok(MessageSourceUtils.getString("member_service_0051"));
    }
   @Override
   public Result memberLogout() {
      //获取用户ID
      Long memberId = LoginUserUtils.getAppLoginUser().getId();
      MemberEntity memberEntity = memberDao.selectById(memberId);
         if (ObjectUtil.isEmpty(memberEntity)) {
            return Result.fail(MessageSourceUtils.getString("member_service_0003"));
         }
         String phone = memberEntity.getPhone();
         if(StrUtil.isEmpty(phone)) {
            redisUtils.del(memberEntity.getPhone());
         }
         String email = memberEntity.getEmail();
         if(StrUtil.isEmpty(email)) {
            redisUtils.del(memberEntity.getPhone());
         }
         return Result.ok(MessageSourceUtils.getString("member_service_0071"));
    }
   @Override
   public Result memberTradersPwd(@Valid MemberForgetPwdDto memberForgetPwdDto) {
      //获取用户ID
      Long memberId = LoginUserUtils.getAppLoginUser().getId();
      MemberEntity memberEntity = memberDao.selectById(memberId);
      String code = memberForgetPwdDto.getCode();
      String password = memberForgetPwdDto.getPassword();
      String phone = memberForgetPwdDto.getPhone();
      String email = memberForgetPwdDto.getEmail();
      int type = memberForgetPwdDto.getType();
      boolean verificationCode = verificationCode(type, phone, code, email);
      if(verificationCode) {
         memberEntity.setTradePassword(SecureUtil.md5(password));
         memberDao.updateById(memberEntity);
      }else {
         return Result.fail(MessageSourceUtils.getString("member_service_0041"));
      }
      if(type == 1) {
         redisUtils.del("SMS_" + phone);
      }else {
         redisUtils.del("EMAIL_" + email);
      }
        return Result.ok(MessageSourceUtils.getString("member_service_0051"));
    }
}