From 50d3d5e3e3282f757ea639f9ca1939d429c6fd5d Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Mon, 30 Nov 2020 11:02:07 +0800
Subject: [PATCH] modify

---
 src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java |  663 ++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 557 insertions(+), 106 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java b/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
index a01ec56..f6551eb 100644
--- a/src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
+++ b/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,19 @@
 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;
 import org.springframework.transaction.annotation.Transactional;
@@ -50,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;
@@ -106,10 +128,23 @@
 
     @Resource
     AppVersionDao appVersionDao;
+    @Resource
+    private MemberSettingDao memberSettingDao;
 
     @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) {
@@ -142,21 +177,24 @@
 //        }
         if (!AppContants.SYSTEM_REFERER.equals(registerDto.getRefererId())) {
             MemberEntity isExist = memberDao.selectMemberInfoByInviteId(registerDto.getRefererId());
-            if (isExist == null) {
-                return Result.fail("推荐人不存在");
+            if (isExist != null) {
+                member.setRefererId(registerDto.getRefererId());
             }
         }
-
-        member.setRefererId(registerDto.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(0);
+        member.setIsForce(1);
         member.setIsProfit(0);
-        member.setSpread(BigDecimal.ONE);
-        member.setClosingSpread(BigDecimal.ONE);
         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);
@@ -164,13 +202,16 @@
         boolean flag = false;
         String parentId = member.getRefererId();
         String ids = "";
-        while (!flag) {
+        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;
             }
@@ -233,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);
     }
 
@@ -331,12 +370,12 @@
         //获取用户ID
         Long memberId = LoginUserUtils.getAppLoginUser().getId();
         MemberEntity member = memberDao.selectById(memberId);
-		if(MemberEntity.CERTIFY_STATUS_ING.equals(member.getCertifyStatus())) {
-			return Result.fail(MessageSourceUtils.getString("member_service_4000"));
-		}
+        if (MemberEntity.CERTIFY_STATUS_ING.equals(member.getCertifyStatus())) {
+            return Result.fail(MessageSourceUtils.getString("member_service_4000"));
+        }
         if (ObjectUtil.isNotEmpty(member)) {
 
-        	MemberAuthenticationEntity memberAuthenticationEntity = new MemberAuthenticationEntity();
+            MemberAuthenticationEntity memberAuthenticationEntity = new MemberAuthenticationEntity();
 
             if (MemberEntity.CERTIFY_STATUS_Y == member.getCertifyStatus()) {
                 return Result.fail(MessageSourceUtils.getString("member_service_0055"));
@@ -366,13 +405,18 @@
 
             String idCardNo = memberAuthenticationDto.getIdCardNo();
             if (StrUtil.isBlank(idCardNo)) {
-            	return Result.fail(MessageSourceUtils.getString("member_service_0060"));
+                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"));
+                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())
@@ -384,14 +428,14 @@
             memberAuthenticationEntity.setIdcardImageInHand(memberAuthenticationDto.getIdCardImage());
 
             Map<String, Object> columnMap = new HashMap<>();
-        	columnMap.put("member_id", memberId);
-        	List<MemberAuthenticationEntity> selectByMap = memberAuthenticationDao.selectByMap(columnMap);
-        	if(CollUtil.isEmpty(selectByMap)) {
-        		memberAuthenticationDao.insert(memberAuthenticationEntity);
-        	}else {
-        		memberAuthenticationEntity.setId(selectByMap.get(0).getId());
-        		memberAuthenticationDao.updateById(memberAuthenticationEntity);
-        	}
+            columnMap.put("member_id", memberId);
+            List<MemberAuthenticationEntity> selectByMap = memberAuthenticationDao.selectByMap(columnMap);
+            if (CollUtil.isEmpty(selectByMap)) {
+                memberAuthenticationDao.insert(memberAuthenticationEntity);
+            } else {
+                memberAuthenticationEntity.setId(selectByMap.get(0).getId());
+                memberAuthenticationDao.updateById(memberAuthenticationEntity);
+            }
 
             member.setCertifyStatus(MemberEntity.CERTIFY_STATUS_ING);
             member.setIdcardNo(idCardNo);
@@ -405,27 +449,26 @@
 
     @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);
@@ -446,23 +489,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);
@@ -488,14 +541,14 @@
 
         Map<String, Object> columnMap = new HashMap<>();
         columnMap.put("member_id", memberId);
-		List<MemberPaymentMethodEntity> selectByMap = memberPaymentMethodDao.selectByMap(columnMap);
-		if(CollUtil.isNotEmpty(selectByMap)) {
-			for(MemberPaymentMethodEntity memberPaymentMethodEntity : selectByMap) {
-				if(memberPaymethodDto.getAccount().equals(memberPaymentMethodEntity.getAccount())) {
-					return Result.fail(MessageSourceUtils.getString("member_service_0097"));
-				}
-			}
-		}
+        List<MemberPaymentMethodEntity> selectByMap = memberPaymentMethodDao.selectByMap(columnMap);
+        if (CollUtil.isNotEmpty(selectByMap)) {
+            for (MemberPaymentMethodEntity memberPaymentMethodEntity : selectByMap) {
+                if (memberPaymethodDto.getAccount().equals(memberPaymentMethodEntity.getAccount())) {
+                    return Result.fail(MessageSourceUtils.getString("member_service_0097"));
+                }
+            }
+        }
         String account = memberPaymethodDto.getAccount();
         String bank = memberPaymethodDto.getBank();
         String name = memberPaymethodDto.getName();
@@ -576,7 +629,7 @@
     @Override
     @Transactional
     public Result memberBindPhone(@Valid MemberBindPhoneDto memberBindPhoneDto) {
-    	//获取用户ID
+        //获取用户ID
         Long memberId = LoginUserUtils.getAppLoginUser().getId();
         String phone = memberBindPhoneDto.getPhone();
         String code = memberBindPhoneDto.getCode();
@@ -584,18 +637,22 @@
         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 );
-            if(CollUtil.isEmpty(selectByMap)) {
-            	member.setPhone(phone);
-            	memberDao.updateById(member);
-            	return Result.ok(MessageSourceUtils.getString("member_service_0014"));
-            }else {
-            	return Result.fail(MessageSourceUtils.getString("member_service_1400"));
+            List<MemberEntity> selectByMap = memberDao.selectByMap(columnMap);
+            if (CollUtil.isEmpty(selectByMap)) {
+                member.setPhone(phone);
+                memberDao.updateById(member);
+                return Result.ok(MessageSourceUtils.getString("member_service_0014"));
+            } else {
+                return Result.fail(MessageSourceUtils.getString("member_service_1400"));
             }
         }
 
@@ -606,24 +663,31 @@
     @Transactional
     public Result memberBindEmail(@Valid MemberBindEmailDto memberBindEmailDto) {
 
-    	//获取用户ID
+        //获取用户ID
         Long memberId = LoginUserUtils.getAppLoginUser().getId();
         String email = memberBindEmailDto.getEmail();
         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<>();
+                Map<String, Object> columnMap = new HashMap<>();
                 columnMap.put("email", email);
-    			List<MemberEntity> selectByMap = memberDao.selectByMap(columnMap );
-                if(CollUtil.isEmpty(selectByMap)) {
-                	member.setEmail(email);
+                List<MemberEntity> selectByMap = memberDao.selectByMap(columnMap);
+                if (CollUtil.isEmpty(selectByMap)) {
+                    member.setEmail(email);
                     memberDao.updateById(member);
                     return Result.ok(MessageSourceUtils.getString("member_service_0018"));
-                }else {
-                	return Result.fail(MessageSourceUtils.getString("member_service_1400"));
+                } else {
+                    return Result.fail(MessageSourceUtils.getString("member_service_1400"));
                 }
             }
         }
@@ -759,10 +823,10 @@
         Map<String, Object> columnMap = new HashMap<>();
         columnMap.put("member_id", memberId);
         List<MemberPaymentMethodEntity> selectByMap = memberPaymentMethodDao.selectByMap(columnMap);
-        if(CollUtil.isEmpty(selectByMap)) {
-        	memberPersonCenterInfoVo.setMemberPaymentMethod(0);
-        }else {
-        	memberPersonCenterInfoVo.setMemberPaymentMethod(1);
+        if (CollUtil.isEmpty(selectByMap)) {
+            memberPersonCenterInfoVo.setMemberPaymentMethod(0);
+        } else {
+            memberPersonCenterInfoVo.setMemberPaymentMethod(1);
         }
 
         if (StrUtil.isNotEmpty(member.getPhone())) {
@@ -823,16 +887,16 @@
         List<MemberAvivableCoinInfoVo> arrayList = new ArrayList<>();
 
 
-		List<PlatformFeeSettingEntity> feeSettingByTypeAndSymbolLable = platformFeeSettingDao.getFeeSettingsByTypeAndSymbol(2, symbol);
+        List<PlatformFeeSettingEntity> feeSettingByTypeAndSymbolLable = platformFeeSettingDao.getFeeSettingsByTypeAndSymbol(2, symbol);
         if (CollUtil.isEmpty(feeSettingByTypeAndSymbolLable)) {
             return Result.fail(MessageSourceUtils.getString("member_service_0087"));
         }
-        for(PlatformFeeSettingEntity platformFeeSettingEntity : feeSettingByTypeAndSymbolLable) {
-        	MemberAvivableCoinInfoVo memberAvivableCoinInfoVo = new MemberAvivableCoinInfoVo();
-        	memberAvivableCoinInfoVo.setAvailableBalance(walletCoin.getAvailableBalance());
-        	memberAvivableCoinInfoVo.setFee(platformFeeSettingEntity.getFeePrice());
-        	memberAvivableCoinInfoVo.setLable(platformFeeSettingEntity.getLable());
-        	arrayList.add(memberAvivableCoinInfoVo);
+        for (PlatformFeeSettingEntity platformFeeSettingEntity : feeSettingByTypeAndSymbolLable) {
+            MemberAvivableCoinInfoVo memberAvivableCoinInfoVo = new MemberAvivableCoinInfoVo();
+            memberAvivableCoinInfoVo.setAvailableBalance(walletCoin.getAvailableBalance());
+            memberAvivableCoinInfoVo.setFee(platformFeeSettingEntity.getFeePrice());
+            memberAvivableCoinInfoVo.setLable(platformFeeSettingEntity.getLable());
+            arrayList.add(memberAvivableCoinInfoVo);
         }
 
         return Result.ok(arrayList);
@@ -864,14 +928,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"));
         }
@@ -882,7 +958,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();
@@ -953,21 +1030,395 @@
         return Result.ok("");
     }
 
+    @Override
+    public Result getAppVersionInfo() {
+        Map<String, Object> columnMap = new HashMap<>();
+        List<AppVersionEntity> selectByMap = appVersionDao.selectByMap(columnMap);
+        List<Object> arrayList = new ArrayList<>();
+        if (CollUtil.isNotEmpty(selectByMap)) {
+            for (AppVersionEntity appVersionEntity : selectByMap) {
+                AppVersionVo appVersionVo = new AppVersionVo();
+                appVersionVo.setAddress(appVersionEntity.getAddress());
+                appVersionVo.setType(appVersionEntity.getType());
+                appVersionVo.setVersion(appVersionEntity.getVersion());
+                arrayList.add(appVersionVo);
+            }
+        }
+        return Result.ok(arrayList);
+    }
+
+    @Override
+    public Result getPcVersionInfo() {
+        Map<String, Object> columnMap = new HashMap<>();
+        List<AppVersionEntity> selectByMap = appVersionDao.selectByMap(columnMap);
+        List<Object> arrayList = new ArrayList<>();
+        if (CollUtil.isNotEmpty(selectByMap)) {
+            for (AppVersionEntity appVersionEntity : selectByMap) {
+                AppVersionVo appVersionVo = new AppVersionVo();
+                appVersionVo.setAddress(appVersionEntity.getAddress());
+                appVersionVo.setType(appVersionEntity.getType());
+                appVersionVo.setVersion(appVersionEntity.getVersion());
+                arrayList.add(appVersionVo);
+            }
+        }
+        return Result.ok(arrayList);
+    }
+
+    @Transactional()
 	@Override
-	public Result getAppVersionInfo() {
-	Map<String, Object> columnMap = new HashMap<>();
-	List<AppVersionEntity> selectByMap = appVersionDao.selectByMap(columnMap);
-	List<Object> arrayList = new ArrayList<>();
-		if(CollUtil.isNotEmpty(selectByMap)) {
-			for(AppVersionEntity appVersionEntity : selectByMap) {
-					AppVersionVo appVersionVo = new AppVersionVo();
-					appVersionVo.setAddress(appVersionEntity.getAddress());
-					appVersionVo.setType(appVersionEntity.getType());
-					appVersionVo.setVersion(appVersionEntity.getVersion());
-					arrayList.add(appVersionVo);
-				}
-			}
-	return Result.ok(arrayList);
+	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);
+
+        //初始化合约钱包
+        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);
 	}
 }
 

--
Gitblit v1.9.1