Helius
2020-08-21 529968bb86a985116a0921c30a03e6fc1645ee23
src/main/java/com/xcong/excoin/modules/coin/service/impl/CoinServiceImpl.java
@@ -4,7 +4,6 @@
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import javax.validation.Valid;
import com.xcong.excoin.modules.platform.entity.PlatformCnyUsdtExchangeEntity;
import org.springframework.stereotype.Service;
@@ -24,15 +23,16 @@
import com.xcong.excoin.modules.coin.parameter.dto.RecordsPageDto;
import com.xcong.excoin.modules.coin.parameter.vo.AllWalletCoinVo;
import com.xcong.excoin.modules.coin.parameter.vo.MemberAccountMoneyChangeInfoVo;
import com.xcong.excoin.modules.coin.parameter.vo.MemberAgentIntoInfoVo;
import com.xcong.excoin.modules.coin.parameter.vo.MemberWalletAgentInfoVo;
import com.xcong.excoin.modules.coin.parameter.vo.MemberWalletCoinInfoVo;
import com.xcong.excoin.modules.coin.parameter.vo.MemberWalletCoinVo;
import com.xcong.excoin.modules.coin.parameter.vo.MemberWalletContractInfoVo;
import com.xcong.excoin.modules.coin.service.CoinService;
import com.xcong.excoin.modules.member.dao.MemberDao;
import com.xcong.excoin.modules.member.dao.MemberWalletAgentDao;
import com.xcong.excoin.modules.member.dao.MemberWalletCoinDao;
import com.xcong.excoin.modules.member.dao.MemberWalletContractDao;
import com.xcong.excoin.modules.member.entity.MemberEntity;
import com.xcong.excoin.modules.member.entity.MemberWalletAgentEntity;
import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity;
import com.xcong.excoin.modules.member.entity.MemberWalletContractEntity;
@@ -40,6 +40,7 @@
import com.xcong.excoin.utils.CoinTypeConvert;
import com.xcong.excoin.utils.MessageSourceUtils;
import com.xcong.excoin.utils.RedisUtils;
import com.xcong.excoin.utils.ThreadPoolUtils;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
@@ -60,6 +61,8 @@
    MemberAccountMoneyChangeDao memberAccountMoneyChangeDao;
    @Resource
    MemberWalletAgentDao memberWalletAgentDao;
    @Resource
    MemberDao memberDao;
    @Resource
    RedisUtils redisUtils;
@@ -253,6 +256,71 @@
        }
        return Result.ok(MessageSourceUtils.getString("member_service_0006"));
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Result coinWalletTransferToContracts(BigDecimal balance, String symbol) {
        if (balance.compareTo(BigDecimal.ZERO) <= 0) {
            return Result.fail(MessageSourceUtils.getString("member_service_0004"));
        }
        //获取用户ID
        Long memberId = LoginUserUtils.getAppLoginUser().getId();
        if (!StrUtil.isEmpty(memberId.toString())) {
           //获取对应的币种
            String walletCode = MemberWalletCoinEnum.WALLETCOINCODE.getValue();
            MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, walletCode);
            BigDecimal available = walletCoin.getAvailableBalance();
            // 扣币
            BigDecimal total = available.subtract(balance);
            if (total.compareTo(BigDecimal.ZERO) < 0) {
                return Result.fail(MessageSourceUtils.getString("member_service_0005"));
            }
            BigDecimal subtract = walletCoin.getTotalBalance().subtract(balance);
            walletCoin.setAvailableBalance(total);
            walletCoin.setTotalBalance(subtract);
            int updateWalletCoinById = memberWalletCoinDao.updateById(walletCoin);
            if (updateWalletCoinById < 1) {
                return Result.fail(MessageSourceUtils.getString("member_service_0096"));
            }
            // 加币
            // 查询合约账户
            MemberWalletContractEntity walletContract = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberId, symbol);
            BigDecimal availableBalance = walletContract.getAvailableBalance();
            BigDecimal add = availableBalance.add(balance);
            walletContract.setAvailableBalance(add);
            BigDecimal totalBalance = walletContract.getTotalBalance();
            BigDecimal totalBigDecimal = totalBalance.add(balance);
            walletContract.setTotalBalance(totalBigDecimal);
            int updateWalletContractById = memberWalletContractDao.updateById(walletContract);
            if (updateWalletContractById < 1) {
                return Result.fail(MessageSourceUtils.getString("member_service_0096"));
            }
            //更新合约全仓模式下的订单权益
            MemberEntity memberEntity = memberDao.selectById(memberId);
            String symbols = symbol+"/USDT";
            ThreadPoolUtils.sendWholeForceClosingPrice(symbols, memberEntity);
            //添加币币资金划转历史记录
            MemberAccountMoneyChange memberAccountRecord = new MemberAccountMoneyChange();
            memberAccountRecord.setContent("转出至合约"+symbol+"账户");
            memberAccountRecord.setMemberId(memberId);
            memberAccountRecord.setAmount(balance.negate());
            memberAccountRecord.setStatus(MemberAccountMoneyChange.STATUS_SUCCESS_INTEGER);
            memberAccountRecord.setSymbol(MemberWalletCoinEnum.WALLETCOINCODE.getValue());
            memberAccountRecord.setType(MemberAccountMoneyChange.TYPE_WALLET_COIN);
            memberAccountMoneyChangeDao.insert(memberAccountRecord);
            //添加合约资金划转历史记录
            memberAccountRecord.setContent("由币币账户转入至合约"+symbol+"账户");
            memberAccountRecord.setSymbol(MemberWalletCoinEnum.WALLETCOINCODE.getValue());
            memberAccountRecord.setAmount(balance);
            memberAccountRecord.setType(MemberAccountMoneyChange.TYPE_WALLET_CONTRACT);
            memberAccountMoneyChangeDao.insert(memberAccountRecord);
        }
        return Result.ok(MessageSourceUtils.getString("member_service_0006"));
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -311,6 +379,70 @@
        memberAccountRecord.setAmount(balance);
        memberAccountMoneyChangeDao.insert(memberAccountRecord);
        return Result.ok(MessageSourceUtils.getString("member_service_0006"));
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Result contractTransferToWalletCoins(BigDecimal balance, String symbol) {
       if (balance.compareTo(BigDecimal.ZERO) <= 0) {
          return Result.fail(MessageSourceUtils.getString("member_service_0004"));
       }
       //获取用户ID
       Long memberId = LoginUserUtils.getAppLoginUser().getId();
       String walletCode = MemberWalletCoinEnum.WALLETCOINCODE.getValue();
       MemberWalletContractEntity walletContract = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberId, symbol);
       BigDecimal availableBalance = walletContract.getAvailableBalance();
       // 扣币
       BigDecimal availableSubtract = availableBalance.subtract(balance);
       if (availableSubtract.compareTo(BigDecimal.ZERO) < 0) {
          return Result.fail(MessageSourceUtils.getString("member_service_0007"));
       }
       BigDecimal totalBalance = walletContract.getTotalBalance();
       BigDecimal totalSubtract = totalBalance.subtract(balance);
       walletContract.setAvailableBalance(availableSubtract);
       walletContract.setTotalBalance(totalSubtract);
       int updateWalletCoinById = memberWalletContractDao.updateById(walletContract);
       if (updateWalletCoinById < 1) {
          return Result.fail(MessageSourceUtils.getString("member_service_0096"));
       }
       // 加币
       MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, walletCode);
       BigDecimal walletCoinAvailableBalance = walletCoin.getAvailableBalance();
       BigDecimal CoinAvailableBalance = walletCoinAvailableBalance.add(balance);
       BigDecimal walletCoinTotalBalance = walletCoin.getTotalBalance();
       BigDecimal CoinTotalBalance = walletCoinTotalBalance.add(balance);
       walletCoin.setAvailableBalance(CoinAvailableBalance);
       walletCoin.setTotalBalance(CoinTotalBalance);
       int updateById = memberWalletCoinDao.updateById(walletCoin);
       if (updateById < 1) {
          return Result.fail(MessageSourceUtils.getString("member_service_0096"));
       }
       //更新合约全仓模式下的订单权益
        MemberEntity memberEntity = memberDao.selectById(memberId);
        String symbols = symbol+"/USDT";
        ThreadPoolUtils.sendWholeForceClosingPrice(symbols, memberEntity);
       //添加资金划转历史记录
       MemberAccountMoneyChange memberAccountRecord = new MemberAccountMoneyChange();
       memberAccountRecord.setContent("合约"+symbol+"账户转出至币币账户");
       memberAccountRecord.setMemberId(memberId);
       memberAccountRecord.setAmount(balance.negate());
       memberAccountRecord.setStatus(MemberAccountMoneyChange.STATUS_SUCCESS_INTEGER);
       memberAccountRecord.setSymbol(walletCode);
       memberAccountRecord.setType(MemberAccountMoneyChange.TYPE_WALLET_CONTRACT);
       memberAccountMoneyChangeDao.insert(memberAccountRecord);
       //添加资金划转历史记录
       memberAccountRecord.setContent("由合约"+symbol+"账户转入");
       memberAccountRecord.setSymbol(walletCode);
       memberAccountRecord.setType(MemberAccountMoneyChange.TYPE_WALLET_COIN);
       memberAccountRecord.setAmount(balance);
       memberAccountMoneyChangeDao.insert(memberAccountRecord);
       return Result.ok(MessageSourceUtils.getString("member_service_0006"));
    }
    @Override
@@ -460,6 +592,97 @@
        return Result.ok(MessageSourceUtils.getString("member_service_0006"));
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Result agentTransferToWalletCoins(BigDecimal balance, Integer transfertype, String symbol) {
       if (balance.compareTo(BigDecimal.ZERO) <= 0) {
          return Result.fail(MessageSourceUtils.getString("member_service_0004"));
       }
       //获取用户ID
       Long memberId = LoginUserUtils.getAppLoginUser().getId();
       // 扣币
       String walletCode = MemberWalletCoinEnum.WALLETCOINCODE.getValue();
       MemberWalletAgentEntity walletAgent = memberWalletAgentDao.selectWalletAgentBymIdAndCode(memberId, walletCode);
       BigDecimal availableBalance = walletAgent.getAvailableBalance();
       BigDecimal totalBalance = walletAgent.getTotalBalance();
       BigDecimal available = availableBalance.subtract(balance);
       if (available.compareTo(BigDecimal.ZERO) < 0) {
          return Result.fail(MessageSourceUtils.getString("member_service_0008"));
       }
       BigDecimal total = totalBalance.subtract(balance);
       if (total.compareTo(BigDecimal.ZERO) < 0) {
          return Result.fail(MessageSourceUtils.getString("member_service_0008"));
       }
       walletAgent.setAvailableBalance(available);
       walletAgent.setTotalBalance(total);
       int i = memberWalletAgentDao.updateById(walletAgent);
       if (i < 1) {
          return Result.fail(MessageSourceUtils.getString("member_service_0095"));
       }
       //添加资金划转历史记录
       MemberAccountMoneyChange memberAccountRecord = new MemberAccountMoneyChange();
       //代理账户转币币
       if (MemberAccountMoneyChange.TYPE_WALLET_COIN.equals(transfertype)) {
          MemberWalletCoinEntity walletCoin = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, walletCode);
          BigDecimal walletCoinAvailableBalance = walletCoin.getAvailableBalance();
          BigDecimal walletCoinTotalBalance = walletCoin.getTotalBalance();
          walletCoin.setAvailableBalance(walletCoinAvailableBalance.add(balance));
          walletCoin.setTotalBalance(walletCoinTotalBalance.add(balance));
          int updateById = memberWalletCoinDao.updateById(walletCoin);
          if (updateById < 1) {
             return Result.fail(MessageSourceUtils.getString("member_service_0095"));
          }
          //添加资金划转历史记录
          memberAccountRecord.setMemberId(memberId);
          memberAccountRecord.setStatus(MemberAccountMoneyChange.STATUS_SUCCESS_INTEGER);
          memberAccountRecord.setSymbol(walletCode);
          memberAccountRecord.setContent(MemberWalletCoinEnum.CONTENTFROMAGENT.getValue());
          memberAccountRecord.setType(MemberAccountMoneyChange.TYPE_WALLET_COIN);
          memberAccountRecord.setAmount(balance);
          memberAccountMoneyChangeDao.insert(memberAccountRecord);
          memberAccountRecord.setContent(MemberWalletCoinEnum.CONTENTTOWALLETCOIN.getValue());
       } else if (MemberAccountMoneyChange.TYPE_WALLET_CONTRACT.equals(transfertype)) {
          //代理账户转合约
          MemberWalletContractEntity walletContract = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberId, symbol);
          BigDecimal walletContractAvailableBalance = walletContract.getAvailableBalance();
          BigDecimal walletContractTotalBalance = walletContract.getTotalBalance();
          walletContract.setAvailableBalance(walletContractAvailableBalance.add(balance));
          walletContract.setTotalBalance(walletContractTotalBalance.add(balance));
          int updateById = memberWalletContractDao.updateById(walletContract);
          if (updateById < 1) {
             return Result.fail(MessageSourceUtils.getString("member_service_0095"));
          }
          //更新合约全仓模式下的订单权益
            MemberEntity memberEntity = memberDao.selectById(memberId);
            String symbols = symbol+"/USDT";
            ThreadPoolUtils.sendWholeForceClosingPrice(symbols, memberEntity);
          //添加资金划转历史记录
          memberAccountRecord.setMemberId(memberId);
          memberAccountRecord.setStatus(MemberAccountMoneyChange.STATUS_SUCCESS_INTEGER);
          memberAccountRecord.setSymbol(walletCode);
          memberAccountRecord.setContent("由代理账户转入合约"+symbol+"账户");
          memberAccountRecord.setType(MemberAccountMoneyChange.TYPE_WALLET_CONTRACT);
          memberAccountRecord.setAmount(balance);
          memberAccountMoneyChangeDao.insert(memberAccountRecord);
          memberAccountRecord.setContent(MemberWalletCoinEnum.CONTENTTOCONTRACT.getValue());
       }
       memberAccountRecord.setAmount(balance.negate());
       memberAccountRecord.setType(MemberAccountMoneyChange.TYPE_WALLET_AGENT);
       memberAccountMoneyChangeDao.insert(memberAccountRecord);
       return Result.ok(MessageSourceUtils.getString("member_service_0006"));
    }
    @Override
    public Result findWalletAgentBySymbol() {