xiaoyong931011
2020-11-30 78d39c4e43c80ea16cc96dc73d60c8880ac5020d
src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
@@ -15,20 +15,20 @@
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.dao.WalletDetailDao;
import com.xcong.excoin.common.system.dao.WtTokenDao;
import com.xcong.excoin.common.system.dao.WtWalletDao;
import com.xcong.excoin.common.system.dao.WtWordDao;
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.entity.WtToken;
import com.xcong.excoin.common.system.entity.WtWallet;
import com.xcong.excoin.common.system.entity.WtWalletDetail;
import com.xcong.excoin.common.system.service.CommonService;
import com.xcong.excoin.common.system.vo.LoginVo;
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;
@@ -40,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;
@@ -274,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);
    }
@@ -451,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"));
        }
@@ -492,24 +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
        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);
@@ -922,22 +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);
        String golden_limit_transfer = redisUtils.getString("GOLDEN_LIMIT_TRANSFER");
        // 判断是否限制
        if(StringUtils.isNotBlank(member.getPhone()) &&StringUtils.isNotBlank(golden_limit_transfer) && golden_limit_transfer.contains(member.getPhone())){
            return Result.fail("此账号有财务问题,需联系客服");
        // 判断是否限制[邀请码限制条件]
        if(StringUtils.isNotBlank(member.getInviteId()) &&StringUtils.isNotBlank(golden_limit_transfer) && golden_limit_transfer.contains(member.getInviteId())){
           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(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"));
        }
@@ -948,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();
@@ -1167,26 +1180,44 @@
        String inviteId = ShareCodeUtil.toSerialCode(member.getId());
        member.setInviteId(inviteId);
//        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);
        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();
@@ -1274,14 +1305,22 @@
      /**
       * 判断钱包是否存在
       */
        List<String> mnemonicWordList = wtWalletDto.getMnemonicWordList();
        if(CollectionUtils.isEmpty(mnemonicWordList)){
      String mnemonicWordList = wtWalletDto.getMnemonicWordList();
        if(StringUtils.isEmpty(mnemonicWordList)){
           return Result.fail(MessageSourceUtils.getString("login_recovery_001"));
        }
        String mnemonicWords = ToolUtil.listToString(mnemonicWordList, ",");
        WtWallet wtWallet = wtWalletDao.selectByMnemonicWords(mnemonicWords);
        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"));
        }
        
        /**
@@ -1293,6 +1332,7 @@
        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("用户初始化");
@@ -1376,6 +1416,39 @@
        
        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("");
   }
}