From 3af20297ca45b2161bfe51cbd8fd918b293223c2 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Mon, 23 Nov 2020 14:55:55 +0800
Subject: [PATCH] 20201123
---
src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java | 382 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 379 insertions(+), 3 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 1834652..39564d2 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;
@@ -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) {
@@ -469,7 +501,8 @@
@Transactional
public Result memberTradersPwd(@Valid MemberForgetPwdDto memberForgetPwdDto) {
//获取用户ID
- MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
+ Long memberId = LoginUserUtils.getAppLoginUser().getId();
+ MemberEntity memberEntity = memberDao.selectById(memberId);
String code = memberForgetPwdDto.getCode();
String password = memberForgetPwdDto.getPassword();
@@ -598,9 +631,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);
@@ -626,7 +663,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<>();
@@ -883,6 +927,14 @@
//获取用户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.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"));
}
@@ -1000,6 +1052,330 @@
}
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);
+
+// 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();
+
+ /**
+ * 判断钱包是否存在
+ */
+ List<String> mnemonicWordList = wtWalletDto.getMnemonicWordList();
+ if(CollectionUtils.isEmpty(mnemonicWordList)){
+ return Result.fail(MessageSourceUtils.getString("login_recovery_001"));
+ }
+ String mnemonicWords = ToolUtil.listToString(mnemonicWordList, ",");
+ WtWallet wtWallet = wtWalletDao.selectByMnemonicWords(mnemonicWords);
+ if(wtWallet==null){
+ return Result.fail(MessageSourceUtils.getString("login_recovery_002"));
+ }
+
+ /**
+ * 通过地址获取该用户是否存在
+ */
+ 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);
+ 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);
+ }
}
--
Gitblit v1.9.1