From 9ee5d996a6537121aad58c46adb066c82381fa1c Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Thu, 24 Feb 2022 15:31:58 +0800
Subject: [PATCH] 20222223

---
 src/main/java/com/xcong/excoin/modules/coin/service/impl/CoinServiceImpl.java |  458 +++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 408 insertions(+), 50 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/modules/coin/service/impl/CoinServiceImpl.java b/src/main/java/com/xcong/excoin/modules/coin/service/impl/CoinServiceImpl.java
index 5516712..54eed4f 100644
--- a/src/main/java/com/xcong/excoin/modules/coin/service/impl/CoinServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/coin/service/impl/CoinServiceImpl.java
@@ -1,10 +1,17 @@
 package com.xcong.excoin.modules.coin.service.impl;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.List;
+import java.text.SimpleDateFormat;
+import java.util.*;
 import javax.annotation.Resource;
 
+import cn.hutool.core.util.RandomUtil;
+import cn.hutool.core.date.DateUtil;
+import com.xcong.excoin.modules.coin.dao.ZhiYaDao;
+import com.xcong.excoin.modules.coin.dao.ZhiYaRecordDao;
+import com.xcong.excoin.modules.coin.entity.ZhiYaEntity;
+import com.xcong.excoin.modules.coin.entity.ZhiYaRecordEntity;
+import com.xcong.excoin.modules.coin.parameter.vo.*;
 import com.xcong.excoin.modules.platform.entity.PlatformCnyUsdtExchangeEntity;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -21,12 +28,6 @@
 import com.xcong.excoin.modules.coin.entity.OrderCoinsDealEntity;
 import com.xcong.excoin.modules.coin.mapper.MemberAccountMoneyChangeMapper;
 import com.xcong.excoin.modules.coin.parameter.dto.RecordsPageDto;
-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.MemberWalletAgentDao;
 import com.xcong.excoin.modules.member.dao.MemberWalletCoinDao;
@@ -58,6 +59,10 @@
     MemberAccountMoneyChangeDao memberAccountMoneyChangeDao;
     @Resource
     MemberWalletAgentDao memberWalletAgentDao;
+    @Resource
+    ZhiYaRecordDao zhiYaRecordDao;
+    @Resource
+    ZhiYaDao zhiYaDao;
     @Resource
     RedisUtils redisUtils;
 
@@ -95,7 +100,15 @@
                         totalUsdts = totalUsdts.add(totalUsdt);
                         BigDecimal totalCny = totalUsdt.multiply(cnyUsdt);
                         walletCoin.setTotalBalance(totalCny);
-                    } else {
+                    }
+//                    else if (MemberWalletCoinEnum.WALLETGUSDCOINCODE.getValue().equals(walletCoin.getWalletCode())) {
+//                        BigDecimal totalUsdt = BigDecimal.ZERO;
+//                        totalUsdt = walletCoin.getAvailableBalance().add(walletCoin.getFrozenBalance());
+//                        totalUsdts = totalUsdts.add(totalUsdt);
+//                        BigDecimal totalCny = totalUsdt.multiply(cnyUsdt);
+//                        walletCoin.setTotalBalance(totalCny);
+//                    }
+                    else {
                         BigDecimal amount = walletCoin.getAvailableBalance().add(walletCoin.getFrozenBalance());
                         // 获取最新价
                         BigDecimal closePrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(walletCoin.getWalletCode()+"/USDT")));
@@ -134,12 +147,15 @@
             memberWalletCoinlist.add(coin);
             coin.setWalletCode(CoinTypeEnum.ETC.toString());
             memberWalletCoinlist.add(coin);
+//            coin.setWalletCode(CoinTypeEnum.GUSD.toString());
+//            memberWalletCoinlist.add(coin);
+            coin.setWalletCode(CoinTypeEnum.GOLDRICE.toString());
+            memberWalletCoinlist.add(coin);
 
             MemberWalletCoinVo memberWalletCoinVo = new MemberWalletCoinVo();
             memberWalletCoinVo.setTotalUsdt(totalUsdts.setScale(4, BigDecimal.ROUND_DOWN));
             memberWalletCoinVo.setTotalCny(totalUsdts.multiply(cnyUsdt).setScale(4, BigDecimal.ROUND_DOWN));
             memberWalletCoinVo.setMemberWalletCoinInfoVo(memberWalletCoinlist);
-            ;
             return Result.ok(memberWalletCoinVo);
         }
     }
@@ -185,26 +201,12 @@
         if (ObjectUtil.isEmpty(walletContract)) {
             return Result.fail(MessageSourceUtils.getString("member_service_0001"));
         }
-        /**
-         * todo
-         */
-        //获取当前的合约持仓
-        //获取实时盈亏
-        BigDecimal profitAndLoss = new BigDecimal("0");
-        //获取总付款
-        BigDecimal totalPayment = new BigDecimal("0");
-        BigDecimal lastTotalBalance = new BigDecimal("0");
-        BigDecimal totalBalance = walletContract.getTotalBalance();
-        lastTotalBalance = totalBalance.add(profitAndLoss);
-        if (lastTotalBalance.compareTo(BigDecimal.ZERO) < 0) {
-            lastTotalBalance = new BigDecimal("0");
-        }
 
         MemberWalletContractInfoVo memberWalletContractInfoVo = new MemberWalletContractInfoVo();
-        memberWalletContractInfoVo.setFrozenBalance(totalPayment.setScale(4, BigDecimal.ROUND_DOWN));
-        memberWalletContractInfoVo.setAvailableBalance(walletContract.getAvailableBalance());
-        memberWalletContractInfoVo.setTotalBalance(lastTotalBalance.setScale(4, BigDecimal.ROUND_DOWN));
-        memberWalletContractInfoVo.setTotalRMBBalance(lastTotalBalance.multiply(cnyUsdt).setScale(4, BigDecimal.ROUND_DOWN));
+        memberWalletContractInfoVo.setFrozenBalance(walletContract.getFrozenBalance().setScale(4, BigDecimal.ROUND_DOWN));
+        memberWalletContractInfoVo.setAvailableBalance(walletContract.getAvailableBalance().setScale(4, BigDecimal.ROUND_DOWN));
+        memberWalletContractInfoVo.setTotalBalance(walletContract.getTotalBalance().setScale(4, BigDecimal.ROUND_DOWN));
+        memberWalletContractInfoVo.setTotalRMBBalance(walletContract.getTotalBalance().multiply(cnyUsdt).setScale(4, BigDecimal.ROUND_DOWN));
 
         return Result.ok(memberWalletContractInfoVo);
     }
@@ -228,9 +230,6 @@
                 return Result.fail(MessageSourceUtils.getString("member_service_0005"));
             }
             BigDecimal subtract = walletCoin.getTotalBalance().subtract(balance);
-            if (subtract.compareTo(BigDecimal.ZERO) < 0) {
-                return Result.fail(MessageSourceUtils.getString("member_service_0005"));
-            }
             walletCoin.setAvailableBalance(total);
             walletCoin.setTotalBalance(subtract);
             int updateWalletCoinById = memberWalletCoinDao.updateById(walletCoin);
@@ -497,29 +496,388 @@
     }
 
 	@Override
-	public Result getWalletAgentIntoRecords() {
+	public Result getWalletAgentIntoRecords(RecordsPageDto recordsPageDto) {
 	        //获取用户ID
 	        Long memberId = LoginUserUtils.getAppLoginUser().getId();
-
-	        List<MemberAccountMoneyChange> contractRecordList =
-	                memberAccountMoneyChangeDao.selectWalletAgentIntoRecordsByMemIdTypeSymbol(memberId);
-
-	        MemberAgentIntoInfoVo memberAgentIntoInfoVo = new MemberAgentIntoInfoVo();
+	        
+	        Page<OrderCoinsDealEntity> page = new Page<>(recordsPageDto.getPageNum(), recordsPageDto.getPageSize());
+	        MemberAccountMoneyChange memberAccountMoneyChange = new MemberAccountMoneyChange();
+	        memberAccountMoneyChange.setMemberId(memberId);
+	        IPage<MemberAccountMoneyChange> list = memberAccountMoneyChangeDao.selectWalletAgentIntoRecordsByMemIdTypeSymbol(page, memberAccountMoneyChange);
+	        List<MemberAccountMoneyChange> contractRecordList = list.getRecords();
 	        List<MemberAccountMoneyChangeInfoVo> arrayList = new ArrayList<>();
-	        if (ObjectUtil.isNotNull(contractRecordList)) {
-	            for (MemberAccountMoneyChange memberAccountMoneyChange : contractRecordList) {
-	                MemberAccountMoneyChangeInfoVo memberAccountMoneyChangeInfoVo = new MemberAccountMoneyChangeInfoVo();
-	                memberAccountMoneyChangeInfoVo.setAmount(memberAccountMoneyChange.getAmount());
-	                memberAccountMoneyChangeInfoVo.setContent(memberAccountMoneyChange.getContent());
-	                memberAccountMoneyChangeInfoVo.setStatus(memberAccountMoneyChange.getStatus());
-	                memberAccountMoneyChangeInfoVo.setSymbol(memberAccountMoneyChange.getSymbol());
-	                memberAccountMoneyChangeInfoVo.setType(memberAccountMoneyChange.getType());
-	                memberAccountMoneyChangeInfoVo.setUpdateTime(memberAccountMoneyChange.getUpdateTime());
-	                arrayList.add(memberAccountMoneyChangeInfoVo);
-	            }
+	        if(CollUtil.isNotEmpty(contractRecordList)) {
+	        	if (ObjectUtil.isNotNull(contractRecordList)) {
+	        		for (MemberAccountMoneyChange memberAccountMoneyChanges : contractRecordList) {
+	        			MemberAccountMoneyChangeInfoVo memberAccountMoneyChangeInfoVo = new MemberAccountMoneyChangeInfoVo();
+	        			memberAccountMoneyChangeInfoVo.setAmount(memberAccountMoneyChanges.getAmount());
+	        			memberAccountMoneyChangeInfoVo.setContent(memberAccountMoneyChanges.getContent());
+	        			memberAccountMoneyChangeInfoVo.setStatus(memberAccountMoneyChanges.getStatus());
+	        			memberAccountMoneyChangeInfoVo.setSymbol(memberAccountMoneyChanges.getSymbol());
+	        			memberAccountMoneyChangeInfoVo.setType(memberAccountMoneyChanges.getType());
+	        			memberAccountMoneyChangeInfoVo.setUpdateTime(memberAccountMoneyChanges.getUpdateTime());
+	        			arrayList.add(memberAccountMoneyChangeInfoVo);
+	        		}
+	        	}
 	        }
-	        memberAgentIntoInfoVo.setMemberAccountMoneyChangeInfoVo(arrayList);
-	        return Result.ok(memberAgentIntoInfoVo);
+	        Page<MemberAccountMoneyChangeInfoVo> pageEntityToPageVo = new Page<>();
+	        pageEntityToPageVo.setRecords(arrayList);
+	        
+	        return Result.ok(pageEntityToPageVo);
 	}
 
+	@Override
+	public Result getAllWalletCoin() {
+		//获取【币币】
+        Long memberId = LoginUserUtils.getAppLoginUser().getId();
+        PlatformCnyUsdtExchangeEntity cnyUsdtExchange = cnyUsdtExchangeDao.getCNYAndUSDTOne();
+        BigDecimal cnyUsdt = cnyUsdtExchange.getValue();
+        AllWalletCoinVo allWalletCoinVo = new AllWalletCoinVo();
+
+        BigDecimal totalUsdts = BigDecimal.ZERO;
+        if (!StrUtil.isEmpty(memberId.toString())) {
+
+            List<MemberWalletCoinEntity> memberWalletCoinlist = memberWalletCoinDao.selectMemberWalletCoinsByMemberId(memberId);
+            List<MemberWalletCoinInfoVo> memberWalletCoinInfoVolist = new ArrayList<MemberWalletCoinInfoVo>();
+
+            if (CollUtil.isNotEmpty(memberWalletCoinlist)) {
+                for (MemberWalletCoinEntity memberWalletCoinEntity : memberWalletCoinlist) {
+                    MemberWalletCoinInfoVo memberWalletCoinInfoVo = new MemberWalletCoinInfoVo();
+                    memberWalletCoinInfoVo.setAvailableBalance(memberWalletCoinEntity.getAvailableBalance().setScale(4, BigDecimal.ROUND_DOWN));
+                    memberWalletCoinInfoVo.setFrozenBalance(memberWalletCoinEntity.getFrozenBalance().setScale(4, BigDecimal.ROUND_DOWN));
+                    memberWalletCoinInfoVo.setMemberId(memberWalletCoinEntity.getMemberId());
+                    memberWalletCoinInfoVo.setTotalBalance(memberWalletCoinEntity.getTotalBalance().setScale(4, BigDecimal.ROUND_DOWN));
+                    memberWalletCoinInfoVo.setWalletCode(memberWalletCoinEntity.getWalletCode());
+                    memberWalletCoinInfoVolist.add(memberWalletCoinInfoVo);
+                }
+            }
+
+            if (CollUtil.isNotEmpty(memberWalletCoinInfoVolist)) {
+                for (MemberWalletCoinInfoVo walletCoin : memberWalletCoinInfoVolist) {
+                    if (MemberWalletCoinEnum.WALLETCOINCODE.getValue().equals(walletCoin.getWalletCode())) {
+                        BigDecimal totalUsdt = BigDecimal.ZERO;
+                        totalUsdt = walletCoin.getAvailableBalance().add(walletCoin.getFrozenBalance());
+                        totalUsdts = totalUsdts.add(totalUsdt);
+                    } else {
+                        BigDecimal amount = walletCoin.getAvailableBalance().add(walletCoin.getFrozenBalance());
+                        // 获取最新价
+                        BigDecimal closePrice = new BigDecimal(redisUtils.getString(CoinTypeConvert.convertToKey(walletCoin.getWalletCode()+"/USDT")));
+                        BigDecimal totalUsdt = BigDecimal.ZERO;
+                        totalUsdt = totalUsdt.add(amount.multiply(closePrice));
+                        totalUsdts = totalUsdts.add(totalUsdt);
+                    }
+                }
+            }
+        } 
+        allWalletCoinVo.setWalletUsdt(totalUsdts.setScale(4, BigDecimal.ROUND_DOWN));
+		//获取【合约】
+        String walletCode = MemberWalletCoinEnum.WALLETCOINCODE.getValue();
+        MemberWalletContractEntity walletContract = memberWalletContractDao.findWalletContractByMemberIdAndSymbol(memberId, walletCode);
+        if (ObjectUtil.isEmpty(walletContract)) {
+            return Result.fail(MessageSourceUtils.getString("member_service_0001"));
+        }
+        allWalletCoinVo.setContractUsdt(walletContract.getTotalBalance().setScale(4, BigDecimal.ROUND_DOWN));
+        totalUsdts = totalUsdts.add(walletContract.getTotalBalance());
+		//获取【代理】
+        MemberWalletAgentEntity walletAgent = memberWalletAgentDao.selectWalletAgentBymIdAndCode(memberId, walletCode);
+        BigDecimal availableBalance = walletAgent.getAvailableBalance();
+        allWalletCoinVo.setAgentUsdt(availableBalance.setScale(4, BigDecimal.ROUND_DOWN));
+        totalUsdts = totalUsdts.add(availableBalance);
+        
+        allWalletCoinVo.setTotalUsdt(totalUsdts.setScale(4, BigDecimal.ROUND_DOWN));
+        allWalletCoinVo.setTotalCny(totalUsdts.multiply(cnyUsdt).setScale(4, BigDecimal.ROUND_DOWN));
+        return Result.ok(allWalletCoinVo);
+	}
+
+    @Override
+    public void updateWalletBalance(Long id, BigDecimal availableBalance,  BigDecimal totalBalance,BigDecimal frozenBalance) {
+        if(id==null){
+            return;
+        }
+        // 这里需要加锁 保证同一个时间只有一个线程操作一个钱包
+        String key = "UPDATE_WALLET_COIN_"+id;
+        while (true){
+            boolean b = redisUtils.setNotExist(key, 1, 2);
+            if(b){
+                //System.out.println("我拿到了锁");
+                // 拿到了锁才能扣
+                memberWalletCoinDao.updateWalletBalance(id,availableBalance,totalBalance,frozenBalance);
+                // 扣完释放锁
+                redisUtils.del(key);
+                break;
+            }else {
+
+            }
+        }
+    }
+
+    @Override
+    public Result usdtToGusd(BigDecimal balance,Integer type) {
+        //获取用户ID
+        Long memberId = LoginUserUtils.getAppLoginUser().getId();
+        if (balance.compareTo(BigDecimal.ZERO) <= 0) {
+            return Result.fail(MessageSourceUtils.getString("member_service_0004"));
+        }
+        if(1 == type){
+            // 扣币
+            String walletCode = MemberWalletCoinEnum.WALLETCOINCODE.getValue();
+            MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, walletCode);
+            BigDecimal availableBalance = memberWalletCoinEntity.getAvailableBalance();
+            BigDecimal totalBalance = memberWalletCoinEntity.getTotalBalance();
+
+            BigDecimal available = availableBalance.subtract(balance);
+            if (available.compareTo(BigDecimal.ZERO) < 0) {
+                return Result.fail(MessageSourceUtils.getString("member_service_0005"));
+            }
+            BigDecimal total = totalBalance.subtract(balance);
+            if (total.compareTo(BigDecimal.ZERO) < 0) {
+                return Result.fail(MessageSourceUtils.getString("member_service_0005"));
+            }
+
+            memberWalletCoinEntity.setAvailableBalance(available);
+            memberWalletCoinEntity.setTotalBalance(total);
+            int i = memberWalletCoinDao.updateById(memberWalletCoinEntity);
+            if (i < 1) {
+                return Result.fail(MessageSourceUtils.getString("member_service_0096"));
+            }
+            //添加资金划转历史记录
+            MemberAccountMoneyChange memberAccountRecord = new MemberAccountMoneyChange();
+            //获取usdt兑换gusd的兑换比例
+            BigDecimal usdtToGusd = new BigDecimal(redisUtils.getString("USDTTOGSD"));
+            BigDecimal gusdBalance = balance.multiply(usdtToGusd);
+
+            ZhiYaEntity zhiya = zhiYaDao.selectByMemberId(memberId);
+            BigDecimal gusdAvailableBalance = zhiya.getAvailableBalance();
+            BigDecimal gusdTotalBalance = zhiya.getTotalBalance();
+            zhiya.setAvailableBalance(gusdAvailableBalance.add(gusdBalance));
+            zhiya.setTotalBalance(gusdTotalBalance.add(gusdBalance));
+
+            int updateById = zhiYaDao.updateById(zhiya);
+            if (updateById < 1) {
+                return Result.fail(MessageSourceUtils.getString("member_service_0096"));
+            }
+
+            //添加资金划转历史记录
+            memberAccountRecord.setMemberId(memberId);
+            memberAccountRecord.setStatus(MemberAccountMoneyChange.STATUS_SUCCESS_INTEGER);
+            memberAccountRecord.setSymbol(walletCode);
+            memberAccountRecord.setContent(MemberWalletCoinEnum.ZHIYATOGUSD.getValue());
+            memberAccountRecord.setType(MemberAccountMoneyChange.TYPE_WALLET_COIN);
+            memberAccountRecord.setAmount(gusdBalance);
+            memberAccountMoneyChangeDao.insert(memberAccountRecord);
+        }else if(2 == type){
+            // 扣币
+            ZhiYaEntity zhiya = zhiYaDao.selectByMemberId(memberId);
+            BigDecimal availableBalance = zhiya.getAvailableBalance();
+            BigDecimal totalBalance = zhiya.getTotalBalance();
+
+            BigDecimal available = availableBalance.subtract(balance);
+            if (available.compareTo(BigDecimal.ZERO) < 0) {
+                return Result.fail(MessageSourceUtils.getString("member_service_0005"));
+            }
+            BigDecimal total = totalBalance.subtract(balance);
+            if (total.compareTo(BigDecimal.ZERO) < 0) {
+                return Result.fail(MessageSourceUtils.getString("member_service_0005"));
+            }
+
+            zhiya.setAvailableBalance(available);
+            zhiya.setTotalBalance(total);
+            int i = zhiYaDao.updateById(zhiya);
+            if (i < 1) {
+                return Result.fail(MessageSourceUtils.getString("member_service_0096"));
+            }
+            //添加资金划转历史记录
+            MemberAccountMoneyChange memberAccountRecord = new MemberAccountMoneyChange();
+            //获取usdt兑换gusd的兑换比例
+            BigDecimal usdtToGusd = new BigDecimal(redisUtils.getString("USDTTOGSD"));
+            BigDecimal usdtBalance = balance.divide(usdtToGusd);
+
+            String walletCode = MemberWalletCoinEnum.WALLETCOINCODE.getValue();
+            MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, walletCode);
+
+            BigDecimal gusdAvailableBalance = memberWalletCoinEntity.getAvailableBalance();
+            BigDecimal gusdTotalBalance = memberWalletCoinEntity.getTotalBalance();
+            memberWalletCoinEntity.setAvailableBalance(gusdAvailableBalance.add(usdtBalance));
+            memberWalletCoinEntity.setTotalBalance(gusdTotalBalance.add(usdtBalance));
+
+            int updateById = memberWalletCoinDao.updateById(memberWalletCoinEntity);
+            if (updateById < 1) {
+                return Result.fail(MessageSourceUtils.getString("member_service_0096"));
+            }
+
+            //添加资金划转历史记录
+            memberAccountRecord.setMemberId(memberId);
+            memberAccountRecord.setStatus(MemberAccountMoneyChange.STATUS_SUCCESS_INTEGER);
+            memberAccountRecord.setSymbol(walletCode);
+            memberAccountRecord.setContent(MemberWalletCoinEnum.ZHIYATOUSDT.getValue());
+            memberAccountRecord.setType(MemberAccountMoneyChange.TYPE_WALLET_COIN);
+            memberAccountRecord.setAmount(usdtBalance);
+            memberAccountMoneyChangeDao.insert(memberAccountRecord);
+
+        }else{
+            return  Result.fail("member_controller_0005");
+        }
+
+        return Result.ok(MessageSourceUtils.getString("member_service_0024"));
+    }
+
+    @Override
+    public Result zhiYaGusd(BigDecimal balance) {
+        //获取用户ID
+        Long memberId = LoginUserUtils.getAppLoginUser().getId();
+        if (balance.compareTo(new BigDecimal(100)) < 0) {
+            return Result.fail(MessageSourceUtils.getString("zhiya_service_0006"));
+        }
+
+        //质押Gusd,质押数量进入冻结余额,
+        ZhiYaEntity zhiya = zhiYaDao.selectByMemberId(memberId);
+        BigDecimal gusdAvailableBalance = zhiya.getAvailableBalance();
+        BigDecimal gusdTotalBalance = zhiya.getTotalBalance();
+        BigDecimal gusdfrozenBalance = zhiya.getFrozenBalance();
+
+        BigDecimal available = gusdAvailableBalance.subtract(balance);
+        if (available.compareTo(BigDecimal.ZERO) < 0) {
+            return Result.fail(MessageSourceUtils.getString("zhiya_service_0005"));
+        }
+        BigDecimal total = gusdTotalBalance.subtract(balance);
+        if (total.compareTo(BigDecimal.ZERO) < 0) {
+            return Result.fail(MessageSourceUtils.getString("zhiya_service_0005"));
+        }
+        zhiya.setFrozenBalance(gusdfrozenBalance.add(balance));
+        zhiya.setAvailableBalance(gusdAvailableBalance.subtract(balance));
+
+        int updateById = zhiYaDao.updateById(zhiya);
+        if (updateById < 1) {
+            return Result.fail(MessageSourceUtils.getString("member_service_0096"));
+        }
+        //产生质押单,当前有的话,累加质押数量
+        ZhiYaRecordEntity zhiYaRecord = zhiYaRecordDao.selectByMemberIdAndOrderStatus(memberId,1);
+        if(ObjectUtil.isEmpty(zhiYaRecord)){
+            //产生一条质押记录
+            ZhiYaRecordEntity zhiYaRecordEntity = new ZhiYaRecordEntity();
+            zhiYaRecordEntity.setMemberId(memberId);
+            zhiYaRecordEntity.setOrderNo(generateSimpleSerialno(memberId.toString()));
+            zhiYaRecordEntity.setSymbol(MemberWalletCoinEnum.WALLETGUSDCOINCODE.getValue());
+            zhiYaRecordEntity.setZhiyaCnt(balance);
+            zhiYaRecordEntity.setOrderStatus(1);
+            Date date = new Date();
+            Date newDate = DateUtil.offsetDay(date, 1);
+            zhiYaRecordEntity.setEffectDate(newDate);
+            zhiYaRecordDao.insert(zhiYaRecordEntity);
+        }else{
+            zhiYaRecord.setZhiyaCnt(zhiYaRecord.getZhiyaCnt().add(balance));
+            Date date = new Date();
+            Date newDate = DateUtil.offsetDay(date, 1);
+            zhiYaRecord.setEffectDate(newDate);
+            zhiYaRecordDao.updateById(zhiYaRecord);
+        }
+
+        return Result.ok(MessageSourceUtils.getString("member_service_0024"));
+    }
+
+    @Override
+    public Result shuhuiGusd(BigDecimal balance,Long id) {
+        //获取用户ID
+        Long memberId = LoginUserUtils.getAppLoginUser().getId();
+        if (balance.compareTo(BigDecimal.ZERO) <= 0) {
+            return Result.fail(MessageSourceUtils.getString("zhiya_service_0004"));
+        }
+        //赎回Gusd,获取质押单据,
+        ZhiYaRecordEntity zhiYaRecordEntity = zhiYaRecordDao.selectByIdAndMemberId(id,memberId);
+        if(ObjectUtil.isEmpty(zhiYaRecordEntity)){
+            return Result.fail(MessageSourceUtils.getString("zhiya_service_0002"));
+        }
+        if(1 != zhiYaRecordEntity.getOrderStatus()){
+            return Result.fail(MessageSourceUtils.getString("zhiya_service_0003"));
+        }
+        BigDecimal zhiyaCnt = zhiYaRecordEntity.getZhiyaCnt();
+        if(balance.compareTo(zhiyaCnt) > 0){
+            return Result.fail(MessageSourceUtils.getString("zhiya_service_0004"));
+        }
+        zhiYaRecordEntity.setZhiyaCnt(zhiyaCnt.subtract(balance));
+        if(zhiyaCnt.compareTo(balance) == 0){
+            zhiYaRecordEntity.setOrderStatus(2);
+        }
+        zhiYaRecordDao.updateById(zhiYaRecordEntity);
+        //赎回Gusd,质押数量进入可用余额,
+        ZhiYaEntity zhiya = zhiYaDao.selectByMemberId(memberId);
+        BigDecimal gusdAvailableBalance = zhiya.getAvailableBalance();
+        BigDecimal gusdTotalBalance = zhiya.getTotalBalance();
+        BigDecimal gusdfrozenBalance = zhiya.getFrozenBalance();
+
+        BigDecimal frozen = gusdfrozenBalance.subtract(balance);
+        if (frozen.compareTo(BigDecimal.ZERO) < 0) {
+            return Result.fail(MessageSourceUtils.getString("zhiya_service_0001"));
+        }
+        BigDecimal total = gusdTotalBalance.subtract(balance);
+        if (total.compareTo(BigDecimal.ZERO) < 0) {
+            return Result.fail(MessageSourceUtils.getString("member_service_0005"));
+        }
+        zhiya.setFrozenBalance(gusdfrozenBalance.subtract(balance));
+        zhiya.setAvailableBalance(gusdAvailableBalance.add(balance));
+        zhiYaDao.updateById(zhiya);
+        return Result.ok(MessageSourceUtils.getString("member_service_0024"));
+    }
+
+    @Override
+    public Result findMemberGusdInfo() {
+        //获取用户ID
+        Long memberId = LoginUserUtils.getAppLoginUser().getId();
+        ZhiYaEntity zhiYaEntity = zhiYaDao.selectByMemberId(memberId);
+        MemberGusdInfoVo memberGusdInfoVo = new MemberGusdInfoVo();
+        memberGusdInfoVo.setMemberId(memberId);
+        memberGusdInfoVo.setFrozenBalance(zhiYaEntity.getFrozenBalance());
+        memberGusdInfoVo.setTotalBalance(zhiYaEntity.getTotalBalance());
+        memberGusdInfoVo.setAvailableBalance(zhiYaEntity.getAvailableBalance());
+        return Result.ok(memberGusdInfoVo);
+    }
+
+    @Override
+    public Result getZhiyaRecords(RecordsPageDto recordsPageDto) {
+        //获取用户ID
+        Long memberId = LoginUserUtils.getAppLoginUser().getId();
+
+        Page<ZhiyaInfoVo> page = new Page<>(recordsPageDto.getPageNum(), recordsPageDto.getPageSize());
+        ZhiYaEntity zhiya = new ZhiYaEntity();
+        zhiya.setMemberId(memberId);
+        IPage<ZhiyaInfoVo> lists = zhiYaRecordDao.selectByMemberIdInPage(page, zhiya);
+        return Result.ok(lists);
+    }
+
+    @Override
+    public Result getusdtToGusdRecords(RecordsPageDto recordsPageDto) {
+        //获取用户ID
+        Long memberId = LoginUserUtils.getAppLoginUser().getId();
+
+        Page<UsdtToGusdVo> page = new Page<>(recordsPageDto.getPageNum(), recordsPageDto.getPageSize());
+        MemberAccountMoneyChange memberAccountMoneyChange = new MemberAccountMoneyChange();
+        memberAccountMoneyChange.setMemberId(memberId);
+        IPage<UsdtToGusdVo> lists = memberAccountMoneyChangeDao.selectByMemberIdInPage(page, memberAccountMoneyChange);
+        return Result.ok(lists);
+    }
+
+    public String generateSimpleSerialno(String userId) {
+        StringBuilder sb = new StringBuilder();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        SimpleDateFormat sd = new SimpleDateFormat("yyyyMMdd");
+        Date now = new Date();
+        sb.append(sd.format(now));
+        Calendar calendar = new GregorianCalendar();
+        calendar.setTime(now);
+        calendar.add(calendar.DATE, 1);
+        Date nextDate = calendar.getTime();
+        if (StrUtil.isNotEmpty(userId)) {
+            sb.append(userId);
+        }
+        sb.append(RandomUtil.randomInt(2));
+        long count = zhiYaRecordDao.getOrderCountByToday(sdf.format(now), sdf.format(nextDate));
+        count++;
+        int size = 4;
+        for (int i = 0; i < size - String.valueOf(count).length(); i++) {
+            sb.append("0");
+        }
+        sb.append(count);
+        return sb.toString();
+    }
+
 }

--
Gitblit v1.9.1