xiaoyong931011
2020-11-30 78d39c4e43c80ea16cc96dc73d60c8880ac5020d
src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
@@ -5,16 +5,30 @@
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.contants.WalletConstants;
import com.xcong.excoin.common.enumerates.CoinTypeEnum;
import com.xcong.excoin.common.enumerates.SymbolEnum;
import com.xcong.excoin.common.response.Result;
import com.xcong.excoin.common.system.dto.OutCenterRegisterDto;
import com.xcong.excoin.common.system.dto.RegisterDto;
import com.xcong.excoin.common.system.dto.WtWalletDto;
import com.xcong.excoin.common.system.service.CommonService;
import com.xcong.excoin.modules.coin.dao.MemberAccountMoneyChangeDao;
import com.xcong.excoin.modules.coin.entity.MemberAccountMoneyChange;
import com.xcong.excoin.modules.login.dao.WalletDetailDao;
import com.xcong.excoin.modules.login.dao.WtTokenDao;
import com.xcong.excoin.modules.login.dao.WtWalletDao;
import com.xcong.excoin.modules.login.dao.WtWordDao;
import com.xcong.excoin.modules.login.entity.WtToken;
import com.xcong.excoin.modules.login.entity.WtWallet;
import com.xcong.excoin.modules.login.entity.WtWalletDetail;
import com.xcong.excoin.modules.login.vo.LoginVo;
import com.xcong.excoin.modules.member.dao.*;
import com.xcong.excoin.modules.member.entity.*;
import com.xcong.excoin.modules.member.parameter.dto.MemberAddCoinAddressDto;
@@ -26,8 +40,8 @@
import com.xcong.excoin.modules.member.parameter.dto.MemberForgetPwdDto;
import com.xcong.excoin.modules.member.parameter.dto.MemberPaymethodDto;
import com.xcong.excoin.modules.member.parameter.dto.MemberSubmitCoinApplyDto;
import com.xcong.excoin.modules.member.parameter.dto.MemberTradersPwdOutcenterDto;
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.dto.MemberUpdateTradersPwdTimeDto;
import com.xcong.excoin.modules.member.parameter.vo.*;
import com.xcong.excoin.modules.member.service.MemberService;
@@ -35,12 +49,18 @@
import com.xcong.excoin.modules.platform.dao.PlatformSymbolsCoinDao;
import com.xcong.excoin.modules.platform.entity.PlatformFeeSettingEntity;
import com.xcong.excoin.modules.platform.entity.PlatformSymbolsCoinEntity;
import com.xcong.excoin.utils.MD5Util;
import com.xcong.excoin.utils.MessageSourceUtils;
import com.xcong.excoin.utils.RedisUtils;
import com.xcong.excoin.utils.ShareCodeUtil;
import com.xcong.excoin.utils.ThreadPoolUtils;
import com.xcong.excoin.utils.ToolUtil;
import com.xcong.excoin.utils.UUIDUtil;
import com.xcong.excoin.utils.WordsUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
@@ -51,6 +71,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import javax.annotation.Resource;
import javax.validation.Valid;
@@ -112,7 +133,18 @@
    @Resource
    private MemberWalletContractSimulateDao memberWalletContractSimulateDao;
    @Resource
    private WtWalletDao wtWalletDao;
    @Resource
    private WtWordDao wtWordDao;
    @Resource
    private WtTokenDao wtTokenDao;
    @Resource
    private WalletDetailDao walletDetailDao;
    @Transactional()
    @Override
    public Result register(RegisterDto registerDto) {
@@ -242,17 +274,15 @@
        Long memberId = LoginUserUtils.getAppLoginUser().getId();
        MemberEntity memberEntity = memberDao.selectById(memberId);
        MemberInfoVo memberInfoVo = new MemberInfoVo();
        if (ObjectUtil.isNotEmpty(memberEntity)) {
            String email = memberEntity.getEmail();
            String phone = memberEntity.getPhone();
            if (StrUtil.isNotEmpty(phone)) {
                memberInfoVo.setPhone(phone);
            } else if (StrUtil.isNotEmpty(email)) {
                memberInfoVo.setPhone(email);
            }
           String address = memberEntity.getAddress();
           WtWallet wtWallet = wtWalletDao.selectSimpleById(address);
           String walletName = wtWallet.getWalletName();
           memberInfoVo.setWalletName(walletName);
            memberInfoVo.setInviteId(memberEntity.getInviteId());
        }
        return Result.ok(memberInfoVo);
    }
@@ -383,6 +413,11 @@
            if (count > 0) {
                return Result.fail(MessageSourceUtils.getString("member_service_0060"));
            }
            // 同一个人只能认证一次
            int authenByMemberId = memberAuthenticationDao.findAuthenByMemberId(memberId);
            if (authenByMemberId > 0) {
                return Result.fail(MessageSourceUtils.getString("member_service_0055"));
            }
            if (StrUtil.isBlank(memberAuthenticationDto.getIdCardFront())
                    || StrUtil.isBlank(memberAuthenticationDto.getIdCardReverse())
                    || StrUtil.isBlank(memberAuthenticationDto.getIdCardImage())) {
@@ -414,30 +449,31 @@
    @Override
    @Transactional
    public Result memberUpdateTradePwd(@Valid MemberUpdateTradePwdDto memberUpdateTradePwdDto) {
    public Result memberUpdateTradePwd(@Valid MemberTradersPwdOutcenterDto memberTradersPwdOutcenterDto) {
        //获取用户ID
        Long memberId = LoginUserUtils.getAppLoginUser().getId();
        MemberEntity memberEntity = memberDao.selectById(memberId);
        String code = memberUpdateTradePwdDto.getCode();
        String password = memberUpdateTradePwdDto.getPassword();
        String account = memberUpdateTradePwdDto.getAccount();
        String phone = memberEntity.getPhone();
        String email = memberEntity.getEmail();
        int type = memberUpdateTradePwdDto.getType();
        //验证手机号或者邮箱是否是该账户绑定的手机号或者邮箱
        if (MemberEntity.ACCOUNT_TYPE_PHONE.equals(type) && !phone.equals(account)) {
            return Result.fail(MessageSourceUtils.getString("member_service_0041"));
        String password = memberTradersPwdOutcenterDto.getPassword();
        String mnemonicWordList = memberTradersPwdOutcenterDto.getMnemonicWordList();
        /**
       * 判断钱包是否存在
       */
        if(StringUtils.isEmpty(mnemonicWordList)){
           return Result.fail(MessageSourceUtils.getString("login_recovery_001"));
        }
        if (MemberEntity.ACCOUNT_TYPE_EMAIL.equals(type) && !email.equals(account)) {
            return Result.fail(MessageSourceUtils.getString("member_service_0041"));
        WtWallet wtWallet = wtWalletDao.selectByMnemonicWords(mnemonicWordList);
        if(wtWallet==null){
           return Result.fail(MessageSourceUtils.getString("login_recovery_002"));
        }
        boolean flag = commonservice.verifyCode(account, code);
        boolean flag = true;
        if (flag) {
            memberEntity.setTradePassword(SecureUtil.md5(password));
            memberDao.updateById(memberEntity);
            wtWallet.setPassword(SecureUtil.md5(password));
            wtWalletDao.updateByModel(wtWallet);
            LoginUserUtils.resetAppLoginUser(memberEntity);
            return Result.ok(MessageSourceUtils.getString("member_service_0051"));
        }
@@ -455,23 +491,33 @@
            return Result.fail(MessageSourceUtils.getString("member_service_0003"));
        }
        String token = LoginUserUtils.getAppLoginUserToken();
        redisUtils.del(AppContants.APP_LOGIN_PREFIX + token);
        redisUtils.del(token);
        SecurityContextHolder.clearContext();
        return Result.ok(MessageSourceUtils.getString("member_service_0071"));
    }
    @Override
    @Transactional
    public Result memberTradersPwd(@Valid MemberForgetPwdDto memberForgetPwdDto) {
    public Result memberTradersPwd(@Valid MemberTradersPwdOutcenterDto memberTradersPwdOutcenterDto) {
        //获取用户ID
        MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
        Long memberId = LoginUserUtils.getAppLoginUser().getId();
        MemberEntity memberEntity = memberDao.selectById(memberId);
        String code = memberForgetPwdDto.getCode();
        String password = memberForgetPwdDto.getPassword();
        String account = memberForgetPwdDto.getAccount();
        int type = memberForgetPwdDto.getType();
        String password = memberTradersPwdOutcenterDto.getPassword();
        String mnemonicWordList = memberTradersPwdOutcenterDto.getMnemonicWordList();
        /**
       * 判断钱包是否存在
       */
        if(StringUtils.isEmpty(mnemonicWordList)){
           return Result.fail(MessageSourceUtils.getString("login_recovery_001"));
        }
        WtWallet wtWallet = wtWalletDao.selectByMnemonicWords(mnemonicWordList);
        if(wtWallet==null){
           return Result.fail(MessageSourceUtils.getString("login_recovery_002"));
        }
        boolean flag = commonservice.verifyCode(account, code);
        boolean flag = true;
//        boolean flag = commonservice.verifyCode(account, code);
        if (flag) {
            memberEntity.setTradePassword(SecureUtil.md5(password));
            memberDao.updateById(memberEntity);
@@ -593,9 +639,13 @@
        MemberEntity member = memberDao.selectById(memberId);
        if (ObjectUtil.isNotEmpty(member)) {
            if (!commonservice.verifyCode(phone, code)) {
            if (!commonservice.mutiVerifyCode(member.getEmail(), memberBindPhoneDto.getOtherCode(), phone, code)) {
                return Result.fail(MessageSourceUtils.getString("member_service_0013"));
            }
            // 验证邮箱验证码
//            if (!commonservice.verifyCode(member.getEmail(), memberBindPhoneDto.getOtherCode())) {
//                return Result.fail("邮箱"+MessageSourceUtils.getString("member_service_0013"));
//            }
            Map<String, Object> columnMap = new HashMap<>();
            columnMap.put("phone", phone);
            List<MemberEntity> selectByMap = memberDao.selectByMap(columnMap);
@@ -621,7 +671,14 @@
        String code = memberBindEmailDto.getCode();
        MemberEntity member = memberDao.selectById(memberId);
        boolean flag = commonservice.verifyCode(email, code);
        boolean flag = commonservice.mutiVerifyCode(email, code, member.getPhone(), memberBindEmailDto.getOtherCode());
//        boolean flag2 = commonservice.verifyCode(member.getPhone(), memberBindEmailDto.getOtherCode());
       if(!flag){
           return Result.fail(MessageSourceUtils.getString("member_service_0013"));
       }
//       if(!flag2){
//           return Result.fail("手机"+MessageSourceUtils.getString("member_service_0013"));
//       }
        if (ObjectUtil.isNotEmpty(member)) {
            if (flag) {
                Map<String, Object> columnMap = new HashMap<>();
@@ -873,14 +930,26 @@
        return Result.ok("success");
    }
    @Transactional
    @Override
    public Result memberSubmitCoinApply(@Valid MemberSubmitCoinApplyDto memberSubmitCoinApplyDto) {
        //获取用户ID
        Long memberId = LoginUserUtils.getAppLoginUser().getId();
        MemberEntity member = memberDao.selectById(memberId);
        if (member.getCertifyStatus() != MemberEntity.CERTIFY_STATUS_Y) {
            return Result.fail(MessageSourceUtils.getString("member_service_0077"));
        String golden_limit_transfer = redisUtils.getString("GOLDEN_LIMIT_TRANSFER");
        // 判断是否限制[邀请码限制条件]
        if(StringUtils.isNotBlank(member.getInviteId()) &&StringUtils.isNotBlank(golden_limit_transfer) && golden_limit_transfer.contains(member.getInviteId())){
           return Result.fail("此账号有财务问题,需联系客服");
        }
//        if(StringUtils.isNotBlank(member.getPhone()) &&StringUtils.isNotBlank(golden_limit_transfer) && golden_limit_transfer.contains(member.getPhone())){
//            return Result.fail("此账号有财务问题,需联系客服");
//        }
//        if(StringUtils.isNotBlank(member.getEmail()) &&StringUtils.isNotBlank(golden_limit_transfer) && golden_limit_transfer.contains(member.getEmail())){
//            return Result.fail("此账号有财务问题,需联系客服");
//        }
//        if (member.getCertifyStatus() != MemberEntity.CERTIFY_STATUS_Y) {
//            return Result.fail(MessageSourceUtils.getString("member_service_0077"));
//        }
        if (StrUtil.isEmpty(member.getTradePassword())) {
            return Result.fail(MessageSourceUtils.getString("member_service_0081"));
        }
@@ -891,7 +960,8 @@
            return Result.fail(MessageSourceUtils.getString("member_service_0082"));
        }
        boolean flag = commonservice.verifyCode(memberSubmitCoinApplyDto.getAccount(), memberSubmitCoinApplyDto.getCode());
        boolean flag = true;
//        boolean flag = commonservice.verifyCode(memberSubmitCoinApplyDto.getAccount(), memberSubmitCoinApplyDto.getCode());
        if (flag) {
            MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, memberSubmitCoinApplyDto.getSymbol());
            BigDecimal availableBalance = walletCoin.getAvailableBalance();
@@ -995,6 +1065,390 @@
        }
        return Result.ok(arrayList);
    }
    @Transactional()
   @Override
   public Result registerOutCenter(OutCenterRegisterDto outCenterRegisterDto) {
       LoginVo loginVo = new LoginVo();
       log.info("钱包初始化");
      /**
       * 钱包初始化
       */
      // 创建钱包需要先清除这个设备之前的钱包
      //wtWalletDao.deleteTerminal(outCenterRegisterDto.getTerminalId());
        WtWallet wtWallet = new WtWallet();
        wtWallet.setWalletName(outCenterRegisterDto.getWalletName());
        wtWallet.setTerminalId(outCenterRegisterDto.getTerminalId());
        wtWallet.setPassword(MD5Util.strToMD5(outCenterRegisterDto.getPassword()));
        // 校验钱包名和密码
        // 得到助记词
        List<String> words = getWords();
        wtWallet.setMnemonicWordList(words);
        loginVo.setMnemonicWordList(words);
        if(CollectionUtils.isEmpty(words)){
            // 报错 不能生成钱包
           return Result.fail(MessageSourceUtils.getString("login_init"));
        }
        // 创建钱包
       // 生成钱包地址和私钥 34 52   42 64
        // 公链钱包地址36位  私钥 46
        String randomID = UUIDUtil.getRandomID();
        String address = WalletConstants.ADDRESS_PREFIX+randomID;
        String privateKey = (UUIDUtil.getRandomID()+UUIDUtil.getRandomID()).substring(0,46);
        wtWallet.setAddress(address);
        loginVo.setAddress(address);
        String strToMD5 = MD5Util.strToMD5(address);
        loginVo.setAddressMd(strToMD5);
        wtWallet.setPrivateKey(privateKey);
        wtWallet.setMnemonicWords(ToolUtil.listToString(words,","));
        wtWalletDao.insert(wtWallet);
        // 同时需要创建各个token
        List<WtToken> wtTokens = wtTokenDao.selectAllToken();
        List<WtWalletDetail> wtWalletDetails = new ArrayList<>();
        WtWalletDetail wtWalletDetail = null;
        if(CollectionUtils.isNotEmpty(wtTokens)){
            for(WtToken token : wtTokens){
                wtWalletDetail = new WtWalletDetail();
                String symbol = token.getSymbol();
                wtWalletDetail.setAddress(address);
                wtWalletDetail.setBalance(BigDecimal.ZERO);
                wtWalletDetail.setSymbol(symbol);
                wtWalletDetail.setMain(token.getMain());
                wtWalletDetail.setIsShow(0);
                wtWalletDetails.add(wtWalletDetail);
            }
            walletDetailDao.batchInsert(wtWalletDetails);
        }
        // 置空敏感信息
        wtWallet.setTerminalId(null);
        wtWallet.setPassword(null);
        wtWallet.setPrivateKey(null);
        // 查询是否存在该账号用户
//        MemberEntity member = memberDao.selectMemberInfoByAccount(registerDto.getAccount());
//        if (member != null) {
//            return Result.fail("账号已存在");
//        }
//        boolean isTrue = commonservice.verifyCode(registerDto.getAccount(), registerDto.getCode());
//        if (!isTrue) {
//            return Result.fail(MessageSourceUtils.getString("common_verify_code"));
//        }
        log.info("用户初始化");
        /**
         * 用户初始化
         */
      MemberEntity member = new MemberEntity();
      member.setAddress(address);
      member.setPassword(SecureUtil.md5(outCenterRegisterDto.getPassword()));
        member.setTradePassword(SecureUtil.md5(outCenterRegisterDto.getPassword()));
        // 判断账号类型
//        if (MemberEntity.ACCOUNT_TYPE_PHONE.equals(registerDto.getType())) {
//            member.setPhone(registerDto.getAccount());
//        } else if (MemberEntity.ACCOUNT_TYPE_EMAIL.equals(registerDto.getType())) {
//            member.setEmail(registerDto.getAccount());
//        } else {
//            return Result.fail("账号类型错误");
//        }
        // 判断是否拥有推荐人,若为空则默认系统
//        if (StrUtil.isBlank(registerDto.getRefererId())) {
//            registerDto.setRefererId(AppContants.SYSTEM_REFERER);
//        }
//        if (!AppContants.SYSTEM_REFERER.equals(outCenterRegisterDto.getRefererId())) {
//            MemberEntity isExist = memberDao.selectMemberInfoByInviteId(outCenterRegisterDto.getRefererId());
//            if (isExist != null) {
//                member.setRefererId(outCenterRegisterDto.getRefererId());
//            }
//        }
        member.setAccountStatus(MemberEntity.ACCOUNT_STATUS_ENABLE);
        member.setAccountType(MemberEntity.ACCOUNT_TYPE_NORMAL);
        member.setAgentLevel(MemberEntity.ACCOUNT_AGENT_LEVEL);
        member.setCertifyStatus(MemberEntity.CERTIFY_STATUS_UN_SUBMIT);
        member.setIsForce(1);
        member.setIsProfit(0);
        memberDao.insert(member);
        MemberSettingEntity memberSettingEntity = new MemberSettingEntity();
        memberSettingEntity.setSpread(BigDecimal.ONE);
        memberSettingEntity.setClosingSpread(BigDecimal.valueOf(5));
        memberSettingEntity.setForceParam(BigDecimal.valueOf(0.0030));
        memberSettingEntity.setMemberId(member.getId());
        memberSettingDao.insert(memberSettingEntity);
        String inviteId = ShareCodeUtil.toSerialCode(member.getId());
        member.setInviteId(inviteId);
        String refererId = outCenterRegisterDto.getRefererId();
        if(StrUtil.isNotEmpty(refererId)) {
           MemberEntity selectMemberInfoByInviteId = memberDao.selectMemberInfoByInviteId(refererId);
           if(ObjectUtil.isNotEmpty(selectMemberInfoByInviteId)) {
              boolean flag = false;
                String parentId = member.getRefererId();
                String ids = "";
                while (!flag && StringUtils.isNotBlank(parentId)) {
                    ids += ("," + parentId);
                    MemberEntity parentMember = memberDao.selectMemberInfoByInviteId(parentId);
                    if (parentMember == null) {
                        break;
                    }
                    parentId = parentMember.getRefererId();
                    if(StringUtils.isBlank(parentId)){
                        break;
                    }
                    if (parentMember.getRefererId().equals(parentMember.getInviteId())) {
                        flag = true;
                    }
                }
                member.setRefererIds(ids);
           }
        }
        memberDao.updateById(member);
        // 插入ser地址
        MemberCoinAddressEntity coinAddress = new MemberCoinAddressEntity();
        coinAddress.setAddress(address);
        coinAddress.setIsBiyict(MemberCoinAddressEntity.IS_BIYICT_YES);
        coinAddress.setMemberId(member.getId());
        coinAddress.setPrivateKey(privateKey);
        coinAddress.setSymbol(SymbolEnum.SER.name());
        coinAddress.setLabel(member.getInviteId());
        memberCoinAddressDao.insert(coinAddress);
        //初始化合约钱包
        MemberWalletContractEntity walletContract = new MemberWalletContractEntity();
        walletContract.setMemberId(member.getId());
        walletContract.setAvailableBalance(AppContants.INIT_MONEY);
        walletContract.setFrozenBalance(AppContants.INIT_MONEY);
        walletContract.setTotalBalance(AppContants.INIT_MONEY);
        walletContract.setBorrowedFund(AppContants.INIT_MONEY);
        walletContract.setWalletCode(CoinTypeEnum.USDT.name());
        memberWalletContractDao.insert(walletContract);
        MemberWalletContractSimulateEntity walletContractSimulate = new MemberWalletContractSimulateEntity();
        walletContractSimulate.setMemberId(member.getId());
        walletContractSimulate.setAvailableBalance(new BigDecimal(AppContants.INIT_SIMULATE_MONEY));
        walletContractSimulate.setTotalBalance(new BigDecimal(AppContants.INIT_SIMULATE_MONEY));
        walletContractSimulate.setFrozenBalance(AppContants.INIT_MONEY);
        walletContractSimulate.setBorrowedFund(AppContants.INIT_MONEY);
        walletContractSimulate.setWalletCode(CoinTypeEnum.USDT.name());
        memberWalletContractSimulateDao.insert(walletContractSimulate);
        // 初始化币币钱包
        for (CoinTypeEnum coinTypeEnum : CoinTypeEnum.values()) {
            MemberWalletCoinEntity walletCoin = new MemberWalletCoinEntity();
            walletCoin.setWalletCode(coinTypeEnum.name());
            walletCoin.setMemberId(member.getId());
            walletCoin.setAvailableBalance(AppContants.INIT_MONEY);
            walletCoin.setFrozenBalance(AppContants.INIT_MONEY);
            walletCoin.setTotalBalance(AppContants.INIT_MONEY);
            walletCoin.setBorrowedFund(AppContants.INIT_MONEY);
            memberWalletCoinDao.insert(walletCoin);
        }
        // 初始化代理佣金钱包
        MemberWalletAgentEntity walletAgent = new MemberWalletAgentEntity();
        walletAgent.setMemberId(member.getId());
        walletAgent.setWalletCode(CoinTypeEnum.USDT.name());
        memberWalletAgentDao.insert(walletAgent);
        // 初始化杠杆
        for (SymbolEnum symbolEnum : SymbolEnum.values()) {
            MemberLevelRateEntity levelRate = new MemberLevelRateEntity();
            levelRate.setMemberId(member.getId());
            levelRate.setSymbol(symbolEnum.getValue());
            memberLevelRateDao.insert(levelRate);
        }
        //加密地址为key,member为value
        redisUtils.set(strToMD5, JSONObject.toJSONString(member));
        return Result.ok(loginVo);
    }
   public  List<String> getWords(){
        if(CollectionUtils.isEmpty(WordsUtil.words_list)){
            WordsUtil.words_list = wtWordDao.selectAllWords();
        }
        // 随机得12个单词
        if(CollectionUtils.isEmpty(WordsUtil.words_list)){
            throw new RuntimeException("error");
        }
        int size = WordsUtil.words_list.size();
        Random random = new Random();
        // 获得12个单词
        List<String> zjc = new ArrayList<>(12);
        boolean loop = true;
        while (loop){
            int randInt = random.nextInt(size - 1);
            // 根据得到的随机数去取
            String s = WordsUtil.words_list.get(randInt);
            if(!zjc.contains(s)){
                zjc.add(s);
            }
            if(zjc.size()>=12){
                loop = false;
            }
        }
        return zjc;
    }
   @Transactional
   @Override
   public Result recovery(WtWalletDto wtWalletDto) {
      LoginVo loginVo = new LoginVo();
      /**
       * 判断钱包是否存在
       */
      String mnemonicWordList = wtWalletDto.getMnemonicWordList();
        if(StringUtils.isEmpty(mnemonicWordList)){
           return Result.fail(MessageSourceUtils.getString("login_recovery_001"));
        }
        WtWallet wtWallet = wtWalletDao.selectByMnemonicWords(mnemonicWordList);
        if(wtWallet==null){
           return Result.fail(MessageSourceUtils.getString("login_recovery_002"));
        }
        /**
         * 资金密码验证
         */
        String pssword = wtWalletDto.getPassword();
        String passwordToMD5 = MD5Util.strToMD5(pssword);
        String passwordWallet = wtWallet.getPassword();
        if(!passwordToMD5.equals(passwordWallet)) {
           return Result.fail(MessageSourceUtils.getString("login_recovery_004"));
        }
        /**
         * 通过地址获取该用户是否存在
         */
        String address = wtWallet.getAddress();
        String strToMD5 = MD5Util.strToMD5(address);
        loginVo.setAddress(address);
        loginVo.setAddressMd(strToMD5);
        Wrapper<MemberEntity> queryWrapperOrepool = new QueryWrapper<>();
        ((QueryWrapper<MemberEntity>) queryWrapperOrepool).eq("address", address);
        ((QueryWrapper<MemberEntity>) queryWrapperOrepool).eq("trade_password", passwordToMD5);
        MemberEntity memberEntity = memberDao.selectOne(queryWrapperOrepool);
        if(ObjectUtil.isEmpty(memberEntity)) {
           log.info("用户初始化");
            /**
             * 用户初始化
             */
          MemberEntity member = new MemberEntity();
          member.setAddress(address);
          member.setPassword(MD5Util.strToMD5(wtWalletDto.getPassword()));
            member.setTradePassword(MD5Util.strToMD5(wtWalletDto.getPassword()));
            member.setAccountStatus(MemberEntity.ACCOUNT_STATUS_ENABLE);
            member.setAccountType(MemberEntity.ACCOUNT_TYPE_NORMAL);
            member.setAgentLevel(MemberEntity.ACCOUNT_AGENT_LEVEL);
            member.setCertifyStatus(MemberEntity.CERTIFY_STATUS_UN_SUBMIT);
            member.setIsForce(1);
            member.setIsProfit(0);
            memberDao.insert(member);
            MemberSettingEntity memberSettingEntity = new MemberSettingEntity();
            memberSettingEntity.setSpread(BigDecimal.ONE);
            memberSettingEntity.setClosingSpread(BigDecimal.valueOf(5));
            memberSettingEntity.setForceParam(BigDecimal.valueOf(0.0030));
            memberSettingEntity.setMemberId(member.getId());
            memberSettingDao.insert(memberSettingEntity);
            String inviteId = ShareCodeUtil.toSerialCode(member.getId());
            member.setInviteId(inviteId);
            memberDao.updateById(member);
            //初始化合约钱包
            MemberWalletContractEntity walletContract = new MemberWalletContractEntity();
            walletContract.setMemberId(member.getId());
            walletContract.setAvailableBalance(AppContants.INIT_MONEY);
            walletContract.setFrozenBalance(AppContants.INIT_MONEY);
            walletContract.setTotalBalance(AppContants.INIT_MONEY);
            walletContract.setBorrowedFund(AppContants.INIT_MONEY);
            walletContract.setWalletCode(CoinTypeEnum.USDT.name());
            memberWalletContractDao.insert(walletContract);
            MemberWalletContractSimulateEntity walletContractSimulate = new MemberWalletContractSimulateEntity();
            walletContractSimulate.setMemberId(member.getId());
            walletContractSimulate.setAvailableBalance(new BigDecimal(AppContants.INIT_SIMULATE_MONEY));
            walletContractSimulate.setTotalBalance(new BigDecimal(AppContants.INIT_SIMULATE_MONEY));
            walletContractSimulate.setFrozenBalance(AppContants.INIT_MONEY);
            walletContractSimulate.setBorrowedFund(AppContants.INIT_MONEY);
            walletContractSimulate.setWalletCode(CoinTypeEnum.USDT.name());
            memberWalletContractSimulateDao.insert(walletContractSimulate);
            // 初始化币币钱包
            for (CoinTypeEnum coinTypeEnum : CoinTypeEnum.values()) {
                MemberWalletCoinEntity walletCoin = new MemberWalletCoinEntity();
                walletCoin.setWalletCode(coinTypeEnum.name());
                walletCoin.setMemberId(member.getId());
                walletCoin.setAvailableBalance(AppContants.INIT_MONEY);
                walletCoin.setFrozenBalance(AppContants.INIT_MONEY);
                walletCoin.setTotalBalance(AppContants.INIT_MONEY);
                walletCoin.setBorrowedFund(AppContants.INIT_MONEY);
                memberWalletCoinDao.insert(walletCoin);
            }
            // 初始化代理佣金钱包
            MemberWalletAgentEntity walletAgent = new MemberWalletAgentEntity();
            walletAgent.setMemberId(member.getId());
            walletAgent.setWalletCode(CoinTypeEnum.USDT.name());
            memberWalletAgentDao.insert(walletAgent);
            // 初始化杠杆
            for (SymbolEnum symbolEnum : SymbolEnum.values()) {
                MemberLevelRateEntity levelRate = new MemberLevelRateEntity();
                levelRate.setMemberId(member.getId());
                levelRate.setSymbol(symbolEnum.getValue());
                memberLevelRateDao.insert(levelRate);
            }
            //加密地址为key,member为value
            redisUtils.set(strToMD5, JSONObject.toJSONString(member));
        }else {
           redisUtils.set(strToMD5, JSONObject.toJSONString(memberEntity));
        }
        return Result.ok(loginVo);
   }
   @Override
   public Result getMnemonicWordList() {
      //获取用户ID
        Long memberId = LoginUserUtils.getAppLoginUser().getId();
        MemberEntity memberEntity = memberDao.selectById(memberId);
        String address = memberEntity.getAddress();
        WtWallet wtWallet = wtWalletDao.selectById(address);
        String mnemonicWords = wtWallet.getMnemonicWords();
        String[] split = mnemonicWords.split(",");
        List<String> list = new ArrayList<>();
        for(String s : split){
            list.add(s);
        }
        return Result.ok(list);
   }
   @Override
   public Result getMemberTradeCode(String tradeCode) {
      //获取用户ID
        Long memberId = LoginUserUtils.getAppLoginUser().getId();
        MemberEntity memberEntity = memberDao.selectById(memberId);
        String tradePassword = memberEntity.getTradePassword();
        if(StrUtil.isEmpty(tradePassword)) {
           return Result.fail(MessageSourceUtils.getString("member_controller_0002"));
        }
        if(!SecureUtil.md5(tradeCode).equals(tradePassword)) {
           return Result.fail(MessageSourceUtils.getString("member_controller_0004"));
        }
        return Result.ok("");
   }
}