From fa91cc62d16b55c99d4cf6451ac6e2f1e0031dd5 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Sat, 15 May 2021 18:35:15 +0800
Subject: [PATCH] 20210515 云顶

---
 src/main/java/com/xcong/excoin/modules/yunding/service/Impl/YunDingServiceImpl.java |  668 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 668 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/modules/yunding/service/Impl/YunDingServiceImpl.java b/src/main/java/com/xcong/excoin/modules/yunding/service/Impl/YunDingServiceImpl.java
index 1427ad6..820863f 100644
--- a/src/main/java/com/xcong/excoin/modules/yunding/service/Impl/YunDingServiceImpl.java
+++ b/src/main/java/com/xcong/excoin/modules/yunding/service/Impl/YunDingServiceImpl.java
@@ -1,14 +1,682 @@
 package com.xcong.excoin.modules.yunding.service.Impl;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.crypto.SecureUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xcong.excoin.common.LoginUserUtils;
+import com.xcong.excoin.common.response.Result;
+import com.xcong.excoin.modules.coin.dao.MemberAccountMoneyChangeDao;
+import com.xcong.excoin.modules.coin.entity.MemberAccountMoneyChange;
+import com.xcong.excoin.modules.member.dao.MemberDao;
+import com.xcong.excoin.modules.member.dao.MemberWalletCoinDao;
+import com.xcong.excoin.modules.member.entity.MemberEntity;
+import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity;
+import com.xcong.excoin.modules.yunding.dao.YdBasicLevelSettingDao;
+import com.xcong.excoin.modules.yunding.dao.YdBasicSettingDao;
 import com.xcong.excoin.modules.yunding.dao.YdOrderDao;
+import com.xcong.excoin.modules.yunding.dao.YdProductDao;
+import com.xcong.excoin.modules.yunding.dto.*;
+import com.xcong.excoin.modules.yunding.entity.YdBasicLevelSettingEntity;
+import com.xcong.excoin.modules.yunding.entity.YdBasicSettingEntity;
 import com.xcong.excoin.modules.yunding.entity.YdOrderEntity;
+import com.xcong.excoin.modules.yunding.entity.YdProductEntity;
 import com.xcong.excoin.modules.yunding.service.YunDingService;
+import com.xcong.excoin.modules.yunding.vo.*;
+import com.xcong.excoin.rabbit.producer.YunDingProducter;
+import com.xcong.excoin.utils.LogRecordUtils;
+import com.xcong.excoin.utils.RedisUtils;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.text.DecimalFormat;
+import java.util.Date;
+import java.util.List;
 
 @Slf4j
 @Service
 public class YunDingServiceImpl extends ServiceImpl<YdOrderDao, YdOrderEntity> implements YunDingService {
 
+    @Resource
+    private YdProductDao ydProductDao;
+    @Resource
+    private YdBasicSettingDao ydBasicSettingDao;
+    @Resource
+    private YdOrderDao ydOrderDao;
+    @Resource
+    private MemberWalletCoinDao memberWalletCoinDao;
+    @Resource
+    private MemberAccountMoneyChangeDao memberAccountMoneyChangeDao;
+    @Resource
+    private YdBasicLevelSettingDao ydBasicLevelSettingDao;
+    @Resource
+    private MemberDao memberDao;
+    @Autowired
+    private YunDingProducter yunDingProducter;
+    @Autowired
+    private RedisUtils redisUtils;
+
+    @Override
+    public Result findAllInfo() {
+        log.info("全网数据");
+        YdBasicSettingVo ydBasicSettingVo = new YdBasicSettingVo();
+        Wrapper<YdBasicSettingEntity> queryWrapper = new QueryWrapper<>();
+        List<YdBasicSettingEntity> ydBasicSettingEntities = ydBasicSettingDao.selectList(queryWrapper);
+        if(CollUtil.isNotEmpty(ydBasicSettingEntities)){
+            // 不足四位小数补0
+            DecimalFormat decimalFormat = new DecimalFormat("0.0000#");
+            YdBasicSettingEntity ydBasicSettingEntity = ydBasicSettingEntities.get(0);
+            ydBasicSettingVo.setAllPower(ydBasicSettingEntity.getAllPower() == null ? decimalFormat.format(BigDecimal.ZERO) : decimalFormat.format(ydBasicSettingEntity.getAllPower()));
+            ydBasicSettingVo.setProfitDay(ydBasicSettingEntity.getProfitDay() == null ?decimalFormat.format(BigDecimal.ZERO) : decimalFormat.format(ydBasicSettingEntity.getProfitDay()));
+            ydBasicSettingVo.setPowerModel(ydBasicSettingEntity.getPowerModel() == null ? "" : ydBasicSettingEntity.getPowerModel());
+            ydBasicSettingVo.setExplosiveBlock(ydBasicSettingEntity.getExplosiveBlock() == null ?decimalFormat.format(BigDecimal.ZERO) : decimalFormat.format(ydBasicSettingEntity.getExplosiveBlock()));
+        }
+        return Result.ok(ydBasicSettingVo);
+    }
+
+    @Override
+    public Result getProductList(YdProductListDto ydProductListDto) {
+        log.info("获取产品列表");
+        Integer typeCoin = ydProductListDto.getTypeCoin();
+        //默认查询现货的产品
+        if(ObjectUtil.isEmpty(typeCoin)){
+            typeCoin = 2;
+        }
+        //MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
+        Page<YdProductVo> page = new Page<>(ydProductListDto.getPageNum(), ydProductListDto.getPageSize());
+        IPage<YdProductVo> list = ydProductDao.getProductList(page, ydProductListDto);
+        List<YdProductVo> records = list.getRecords();
+        if(CollUtil.isNotEmpty(records)){
+            //预计收益
+            BigDecimal prifitT = BigDecimal.ZERO;
+            Wrapper<YdBasicSettingEntity> queryWrapper = new QueryWrapper<>();
+            List<YdBasicSettingEntity> ydBasicSettingEntities = ydBasicSettingDao.selectList(queryWrapper);
+            if(CollUtil.isNotEmpty(ydBasicSettingEntities)){
+                prifitT = ydBasicSettingEntities.get(0).getPrifitT();
+            }
+            for(YdProductVo ydProductVo : records){
+                ydProductVo.setProfitT(prifitT);
+
+                if(ydProductVo.getSurplusT().compareTo(BigDecimal.ZERO) < 1) {
+                    ydProductVo.setStatus(2);
+                }
+            }
+        }
+
+        return Result.ok(list);
+    }
+
+    @Override
+    public Result findProductInfoById(Long id) {
+        log.info("获取产品详情");
+        YdProductVo ydProductVo = ydProductDao.findProductInfoById(id);
+        if (ObjectUtil.isEmpty(ydProductVo)) {
+            return Result.fail("产品不存在!");
+        }
+        //预计收益
+        Wrapper<YdBasicSettingEntity> queryWrapper = new QueryWrapper<>();
+        List<YdBasicSettingEntity> ydBasicSettingEntities = ydBasicSettingDao.selectList(queryWrapper);
+        if(CollUtil.isNotEmpty(ydBasicSettingEntities)){
+            BigDecimal prifitT = ydBasicSettingEntities.get(0).getPrifitT();
+            if(ObjectUtil.isNotEmpty(prifitT)){
+                ydProductVo.setProfitT(prifitT);
+            }
+        }
+        /**
+         *产出规则
+         */
+        Date date = DateUtil.date();
+        ydProductVo.setNowTime(date);
+        //上架天数
+        Integer shelvesDays = ydProductVo.getShelvesDays();
+        Date workTime = DateUtil.offsetDay(date, shelvesDays);
+        ydProductVo.setWorkTime(workTime);
+        //服务周期
+        Integer proCycle = ydProductVo.getProCycle();
+        Date endTime = DateUtil.offsetDay(workTime, proCycle);
+        ydProductVo.setEndTime(endTime);
+
+        if (ydProductVo.getSurplusT().compareTo(BigDecimal.ZERO) < 1) {
+            ydProductVo.setStatus(2);
+        }
+        return Result.ok(ydProductVo);
+    }
+
+    @Override
+    public Result getBalance() {
+        log.info("获取可用USDT");
+        MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
+        Long memberId = memberEntity.getId();
+//        Long memberId = 28L;
+        MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, "USDT");
+        BigDecimal availableBalance = memberWalletCoinEntity.getAvailableBalance();
+        return Result.ok(availableBalance);
+    }
+
+    @Override
+    @Transactional
+    public Result payProduct(PayProductDto payProductDto) {
+        log.info("购买,点击支付");
+        /**
+         * 获取购买数量和当前价格,计算出支付总数
+         * 去加减币币账户余额,减少产品的剩余数目
+         *   成功后
+         *   生成订单记录
+         *   生成返利记录
+         */
+        MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
+        Long memberId = memberEntity.getId();
+
+        String tradePassword = payProductDto.getTradePassword();
+        if(StrUtil.isEmpty(tradePassword)){
+            return Result.fail("请输入交易密码");
+        }
+        String tradePasswordOwn = memberEntity.getTradePassword();
+        if(StrUtil.isEmpty(tradePasswordOwn)){
+            return Result.fail("请设置交易密码");
+        }
+        String tradePasswords = SecureUtil.md5(tradePassword);
+        if(!StrUtil.equals(tradePasswordOwn,tradePasswords)){
+            return Result.fail("请输入正确的交易密码");
+        }
+        BigDecimal quantity = payProductDto.getQuantity();
+        if(ObjectUtil.isEmpty(quantity)){
+            return Result.fail("请输入购买数量");
+        }
+        if(quantity.compareTo(BigDecimal.ZERO) <= 0){
+            return Result.fail("请输入正确的购买数量");
+        }
+        Long id = payProductDto.getId();
+        YdProductEntity ydProductEntity = ydProductDao.selectById(id);
+        if(ObjectUtil.isEmpty(ydProductEntity)){
+            return Result.fail("请重新选择产品");
+        }
+
+        Integer status = ydProductEntity.getStatus();
+        if(YdProductEntity.STATUE_WORK != status){
+            if(YdProductEntity.STATUE_END == status){
+                return Result.fail("产品已售罄");
+            }
+            if(YdProductEntity.STATUE_READY == status){
+                return Result.fail("产品未开售");
+            }
+        }
+
+        //限购总量
+        Integer limitedNum = ydProductEntity.getLimitedNum();
+        //获取目前待生效,已生效的总T数
+        int quantityOwn = 0;
+        QueryWrapper<YdOrderEntity> powerReradyQuery = new QueryWrapper<>();
+        powerReradyQuery.eq("member_id",memberId);
+        powerReradyQuery.eq("product_id",payProductDto.getId());
+        powerReradyQuery.eq("type",YdOrderEntity.PRODUCT_ORDER);
+        powerReradyQuery.ne("state",YdOrderEntity.ORDER_STATE_END);
+        List<YdOrderEntity> powerReradyQuerys = ydOrderDao.selectList(powerReradyQuery);
+        if(CollUtil.isNotEmpty(powerReradyQuerys)){
+            for(YdOrderEntity ydOrderEntity : powerReradyQuerys){
+                quantityOwn = quantityOwn + ydOrderEntity.getQuantity();
+            }
+        }
+        int quantityInt = quantity.intValue();
+        if(quantityOwn + quantityInt > limitedNum){
+            return Result.fail("产品限购"+limitedNum);
+        }
+
+//        if (quantity.compareTo(BigDecimal.valueOf(ydProductEntity.getLimitedNum())) < 1) {
+//            return Result.fail("产品限购" + ydProductEntity.getLimitedNum());
+//        }
+        BigDecimal salePrice = ydProductEntity.getSalePrice();
+        //剩余产品数量
+        BigDecimal surplusT = ydProductEntity.getSurplusT();
+        if(quantity.compareTo(surplusT) > 0){
+            return Result.fail("当前产品数量不足,请联系客服");
+        }
+        //支付总数
+        BigDecimal multiplyUsdt = quantity.multiply(salePrice);
+        if(multiplyUsdt.compareTo(BigDecimal.ZERO) <= 0){
+            return Result.fail("支付失败");
+        }
+        //去加减币币账户余额,减少产品的剩余数目
+        boolean flag = updateWalletCoin(memberId, multiplyUsdt,id,quantity);
+        if(flag == false){
+            return Result.fail("支付失败");
+        }
+        //生成订单
+        YdOrderEntity ydOrderEntity = new YdOrderEntity();
+        ydOrderEntity.setMemberId(memberId);
+        ydOrderEntity.setProductId(id);
+        ydOrderEntity.setQuantity(Integer.parseInt(quantity.toString()));
+        ydOrderEntity.setAmount(multiplyUsdt);
+        ydOrderEntity.setTotalProfit(BigDecimal.ZERO);
+        ydOrderEntity.setTodayProfit(BigDecimal.ZERO);
+        ydOrderEntity.setState(YdOrderEntity.ORDER_STATE_READY);
+        ydOrderEntity.setType(YdOrderEntity.PRODUCT_ORDER);
+        Date date = DateUtil.date();
+        ydOrderEntity.setBuyTime(date);
+        //上架天数
+        Integer shelvesDays = ydProductEntity.getShelvesDays();
+        Date workTime = DateUtil.offsetDay(date, shelvesDays);
+        ydOrderEntity.setWorkTime(workTime);
+        //服务周期
+        Integer proCycle = ydProductEntity.getProCycle();
+        Date endTime = DateUtil.offsetDay(workTime, proCycle);
+        ydOrderEntity.setEndTime(endTime);
+        ydOrderEntity.setReturnState(YdOrderEntity.RETURN_STATE_READY);
+        ydOrderDao.insert(ydOrderEntity);
+        //生成流水记录
+        LogRecordUtils.insertMemberAccountMoneyChangeWithId(memberId, "购买产品", multiplyUsdt,
+                "USDT", 1, 3, ydOrderEntity.getId());
+
+        yunDingProducter.sendYunDingUsdtProfit(ydOrderEntity.getId());
+        return Result.ok("支付成功");
+    }
+
+    @Override
+    public Result getOrderList(YdOrderListDto ydOrderListDto) {
+
+        log.info("获取订单列表");
+        Integer state = ydOrderListDto.getState();
+        //默认查询待生效
+        if(ObjectUtil.isEmpty(state)){
+            state = 1;
+        }
+        MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
+        Long memberId = memberEntity.getId();
+        //Long memberId = 28L;
+        Page<YdOrderVo> page = new Page<>(ydOrderListDto.getPageNum(), ydOrderListDto.getPageSize());
+        YdOrderEntity ydOrderEntity = new YdOrderEntity();
+        ydOrderEntity.setMemberId(memberId);
+        ydOrderEntity.setState(state);
+        IPage<YdOrderVo> list = ydOrderDao.getOrderList(page, ydOrderEntity);
+        return Result.ok(list);
+    }
+
+    @Override
+    public Result findOrderAllInfo() {
+
+        log.info("订单头部数据");
+
+        MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
+        Long memberId = memberEntity.getId();
+//        Long memberId = 442L;
+        OrderAllInfoVo orderAllInfoVo = new OrderAllInfoVo();
+        DecimalFormat decimalFormat = new DecimalFormat("0.0000#");
+        //历史总收益
+        BigDecimal totalProfitAll = BigDecimal.ZERO;
+        QueryWrapper<YdOrderEntity> objectQueryWrapper = new QueryWrapper<>();
+        objectQueryWrapper.eq("member_id",memberId);
+        objectQueryWrapper.eq("type",YdOrderEntity.PRODUCT_ORDER);
+        List<YdOrderEntity> ydOrderEntities = ydOrderDao.selectList(objectQueryWrapper);
+        if(CollUtil.isNotEmpty(ydOrderEntities)){
+            for(YdOrderEntity order : ydOrderEntities){
+                BigDecimal totalProfit = order.getTotalProfit();
+                totalProfitAll = totalProfitAll.add(totalProfit);
+            }
+        }
+        orderAllInfoVo.setAllProfit(decimalFormat.format(totalProfitAll));
+        //当前已生效算力
+        int powerNow = 0;
+        QueryWrapper<YdOrderEntity> powerNowQuery = new QueryWrapper<>();
+        powerNowQuery.eq("member_id",memberId);
+        powerNowQuery.eq("state",YdOrderEntity.ORDER_STATE_WORK);
+        powerNowQuery.eq("type",YdOrderEntity.PRODUCT_ORDER);
+        List<YdOrderEntity> PowerNowQuery = ydOrderDao.selectList(powerNowQuery);
+        if(CollUtil.isNotEmpty(PowerNowQuery)){
+            for(YdOrderEntity order : PowerNowQuery){
+                int quantity = order.getQuantity();
+                powerNow = powerNow + quantity;
+            }
+        }
+        orderAllInfoVo.setPowerNow(powerNow);
+        //当前待生效算力
+        int powerReady = 0;
+        QueryWrapper<YdOrderEntity> powerReradyQuery = new QueryWrapper<>();
+        powerReradyQuery.eq("member_id",memberId);
+        powerReradyQuery.eq("type",YdOrderEntity.PRODUCT_ORDER);
+        powerReradyQuery.eq("state",YdOrderEntity.ORDER_STATE_READY);
+        List<YdOrderEntity> powerReradyQuerys = ydOrderDao.selectList(powerReradyQuery);
+        if(CollUtil.isNotEmpty(powerReradyQuerys)){
+            for(YdOrderEntity order : powerReradyQuerys){
+                int quantity = order.getQuantity();
+                powerReady = powerReady + quantity;
+            }
+        }
+        orderAllInfoVo.setPowerReady(powerReady);
+        //昨日总收益
+        BigDecimal lastdayProfit = BigDecimal.ZERO;
+        Date date = DateUtil.date();
+        Date dateTime = DateUtil.offsetDay(date, 1);
+        QueryWrapper<MemberAccountMoneyChange> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("type",4);
+        queryWrapper.eq("member_id",memberId);
+        queryWrapper.eq("status",1);
+        queryWrapper.like("create_time",DateUtil.formatDate(dateTime));
+        List<MemberAccountMoneyChange> memberAccountMoneyChanges = memberAccountMoneyChangeDao.selectList(queryWrapper);
+        if(CollUtil.isNotEmpty(memberAccountMoneyChanges)){
+            for(MemberAccountMoneyChange memberAccountMoneyChange : memberAccountMoneyChanges){
+                BigDecimal amount = memberAccountMoneyChange.getAmount();
+                lastdayProfit = lastdayProfit.add(amount);
+            }
+        }
+        orderAllInfoVo.setLastdayProfit(decimalFormat.format(lastdayProfit));
+        return Result.ok(orderAllInfoVo);
+    }
+
+    @Override
+    public Result getOrderInfo(Long id) {
+
+        log.info("获取订单详情");
+        MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
+        Long memberId = memberEntity.getId();
+        YdOrderVo ydOrderVo = ydOrderDao.selectOrderByMemberIdAndId(memberId,id);
+        return Result.ok(ydOrderVo);
+    }
+
+    @Override
+    public Result changeUsdt() {
+        log.info("转换成USDT");
+        MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
+        Long memberId = memberEntity.getId();
+//        Long memberId = 442L;
+        ChangeVo changeVo = new ChangeVo();
+        BigDecimal currentPrice = BigDecimal.ZERO;
+        Wrapper<YdBasicSettingEntity> queryWrapper = new QueryWrapper<>();
+        List<YdBasicSettingEntity> ydBasicSettingEntities = ydBasicSettingDao.selectList(queryWrapper);
+        if(CollUtil.isNotEmpty(ydBasicSettingEntities)){
+            YdBasicSettingEntity ydBasicSettingEntity = ydBasicSettingEntities.get(0);
+            if(ObjectUtil.isNotEmpty(ydBasicSettingEntity)){
+                //获取当前价
+                currentPrice = ydBasicSettingEntity.getCurrentPrice();
+                if(ObjectUtil.isNotEmpty(currentPrice)){
+                    changeVo.setCurrentPrice(currentPrice);
+                }
+                BigDecimal changeXch = ydBasicSettingEntity.getChangeXch();
+                if(ObjectUtil.isNotEmpty(changeXch)){
+                    changeVo.setChangeXchRadio(changeXch);
+                }
+            }
+        }
+        //获取可用
+        MemberWalletCoinEntity xch = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, "XCH");
+        if(ObjectUtil.isNotEmpty(xch)){
+            BigDecimal availableBalance = xch.getAvailableBalance();
+            changeVo.setXchAvailableBalance(availableBalance.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO:availableBalance);
+        }
+        return Result.ok(changeVo);
+    }
+
+    @Override
+    @Transactional
+    public Result insureChangeUsdt(InsureChangeUsdtDto insureChangeUsdtdto) {
+        log.info("确认转换成USDT");
+        MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
+        Long memberId = memberEntity.getId();
+
+//        Long memberId = 442L;
+//        MemberEntity memberEntity = memberDao.selectById(memberId);
+        /**
+         * 验证入参
+         *
+         *     USDT账户增加
+         *     XCH账户减少
+         */
+        String tradePassword = insureChangeUsdtdto.getTradePassword();
+        if(StrUtil.isEmpty(tradePassword)){
+            return Result.fail("请输入交易密码");
+        }
+        String tradePasswordOwn = memberEntity.getTradePassword();
+        if(StrUtil.isEmpty(tradePasswordOwn)){
+            return Result.fail("请设置交易密码");
+        }
+        String tradePasswords = SecureUtil.md5(tradePassword);
+        if(!StrUtil.equals(tradePasswordOwn,tradePasswords)){
+            return Result.fail("请输入正确的交易密码");
+        }
+
+        BigDecimal xchNum = insureChangeUsdtdto.getXchNum();
+        if(BigDecimal.ZERO.compareTo(xchNum) >= 0){
+            return Result.fail("请输入正确的数量");
+        }
+
+        MemberWalletCoinEntity xch = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, "XCH");
+        BigDecimal totalBalance = xch.getTotalBalance();
+        BigDecimal subtractTotalBalance = totalBalance.subtract(xchNum);
+        if(BigDecimal.ZERO.compareTo(subtractTotalBalance) >= 0){
+            return Result.fail("XCH数量不足");
+        }
+
+        BigDecimal availableBalance = xch.getAvailableBalance();
+        BigDecimal subtractAvailableBalance = availableBalance.subtract(xchNum);
+        if(BigDecimal.ZERO.compareTo(subtractAvailableBalance) >= 0){
+            return Result.fail("XCH数量不足");
+        }
+        //xch减少
+        xch.setTotalBalance(subtractTotalBalance);
+        xch.setAvailableBalance(subtractAvailableBalance);
+        memberWalletCoinDao.updateById(xch);
+
+        BigDecimal currentPrice = BigDecimal.ZERO;
+        //获取当前价
+        Wrapper<YdBasicSettingEntity> queryWrapper = new QueryWrapper<>();
+        List<YdBasicSettingEntity> ydBasicSettingEntities = ydBasicSettingDao.selectList(queryWrapper);
+        if(CollUtil.isNotEmpty(ydBasicSettingEntities)){
+            YdBasicSettingEntity ydBasicSettingEntity = ydBasicSettingEntities.get(0);
+            currentPrice = ydBasicSettingEntity.getCurrentPrice();
+        }
+        //USDT账户增加
+        BigDecimal multiply = xchNum.multiply(currentPrice);
+        MemberWalletCoinEntity usdt = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, "USDT");
+        usdt.setTotalBalance(usdt.getTotalBalance().add(multiply));
+        usdt.setAvailableBalance(usdt.getAvailableBalance().add(multiply));
+        memberWalletCoinDao.updateById(usdt);
+
+        //生成流水记录
+        LogRecordUtils.insertMemberAccountMoneyChangeWithId(memberId, "XCH兑换"+multiply+"USDT", xchNum,
+                "USDT", 1, 7, memberId);
+        return Result.ok("操作成功");
+    }
+
+    @Override
+    public Result getAgentList(YdAgentDto ydAgentDto) {
+        log.info("获取代理级别列表");
+        MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
+        Long memberId = memberEntity.getId();
+//        Long memberId = 442L;
+        Page<AgentVo> page = new Page<>(ydAgentDto.getPageNum(), ydAgentDto.getPageSize());
+        YdBasicLevelSettingEntity ydBasicLevelSettingEntity = new YdBasicLevelSettingEntity();
+        IPage<AgentVo> list = ydOrderDao.getAgentList(page, ydBasicLevelSettingEntity);
+        return Result.ok(list);
+    }
+
+    @Override
+    @Transactional
+    public Result bugAgentLevel(BugAgentLeveldto bugAgentLeveldto) {
+        log.info("购买代理级别");
+        MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
+        Long memberId = memberEntity.getId();
+        /**
+         * 获取代理级别(Level字段越小,级别越高)
+         *      不能向下购买代理级别
+         *      不能购买同级别
+         * 获取用户当前USDT余额
+         *      减少用户的USDT余额
+         *      更新用户的代理级别
+         */
+
+        String tradePassword = bugAgentLeveldto.getTradePassword();
+        if(StrUtil.isEmpty(tradePassword)){
+            return Result.fail("请输入交易密码");
+        }
+        String tradePasswordOwn = memberEntity.getTradePassword();
+        if(StrUtil.isEmpty(tradePasswordOwn)){
+            return Result.fail("请设置交易密码");
+        }
+        String tradePasswords = SecureUtil.md5(tradePassword);
+        if(!StrUtil.equals(tradePasswordOwn,tradePasswords)){
+            return Result.fail("请输入正确的交易密码");
+        }
+
+        Long id = bugAgentLeveldto.getId();
+        YdBasicLevelSettingEntity ydBasicLevelSettingEntityTo = ydBasicLevelSettingDao.selectById(id);
+        if(ObjectUtil.isEmpty(ydBasicLevelSettingEntityTo)){
+            return Result.fail("稍候再试");
+        }
+        Integer levelTo = ydBasicLevelSettingEntityTo.getLevel();
+        //获取当前代理级别
+        Integer agentLevel = memberEntity.getAgentLevel();
+
+        BigDecimal salePrice = ydBasicLevelSettingEntityTo.getSalePrice();
+        Integer levelNow = 0;
+        if (agentLevel != null) {
+            long agentId = Long.parseLong(agentLevel.toString());
+            YdBasicLevelSettingEntity ydBasicLevelSettingEntityNow = ydBasicLevelSettingDao.selectById(agentId);
+            if(ObjectUtil.isNotEmpty(ydBasicLevelSettingEntityNow)){
+                levelNow = ydBasicLevelSettingEntityNow.getLevel();
+                if(levelTo.equals(levelNow)){
+                    return Result.fail("不能重复购买当前代理");
+                }
+
+                if (levelNow < levelTo) {
+                    return Result.fail("不能购买低于当前代理");
+                }
+            }
+
+            //用户如果已经有等级则减少差价
+            if(levelNow != 0){
+                salePrice = salePrice.subtract(ydBasicLevelSettingEntityNow.getSalePrice());
+            }
+        }
+
+        //获取用户当前USDT余额
+        MemberWalletCoinEntity usdt = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, "USDT");
+        BigDecimal availableBalance = usdt.getAvailableBalance();
+        if(salePrice.compareTo(availableBalance) > 0){
+            return Result.fail("USDT数量不足");
+        }
+        BigDecimal totalBalance = usdt.getTotalBalance();
+        usdt.setAvailableBalance(availableBalance.subtract(salePrice));
+        usdt.setTotalBalance(totalBalance.subtract(salePrice));
+        memberWalletCoinDao.updateById(usdt);
+        //更新用户的代理级别
+        ydOrderDao.updateAgentLevel(memberId,Integer.parseInt(id.toString()));
+
+        YdOrderEntity orderEntity = new YdOrderEntity();
+        orderEntity.setType(YdOrderEntity.AGENT_ORDER);
+        orderEntity.setMemberId(memberId);
+        orderEntity.setProductId(id);
+        orderEntity.setAmount(salePrice);
+        ydOrderDao.insert(orderEntity);
+
+        LogRecordUtils.insertMemberAccountMoneyChangeWithId(memberId, "购买代理", salePrice,
+                "USDT", 1, 8, memberId);
+
+        memberEntity.setAgentLevel(id.intValue());
+        LoginUserUtils.resetAppLoginUser(memberEntity);
+        yunDingProducter.sendYunDingUsdtProfit(orderEntity.getId());
+        return Result.ok("购买成功");
+    }
+
+    @Override
+    public Result getXchPrice() {
+        log.info("获取XCH当前价");
+        BigDecimal xchNewPrices = BigDecimal.ZERO;
+        String xchNewPrice = redisUtils.getString("XCH_NEW_PRICE");
+        if(StrUtil.isNotEmpty(xchNewPrice)){
+            xchNewPrices = new BigDecimal(xchNewPrice);
+        }
+        return Result.ok(xchNewPrices);
+    }
+
+    @Override
+    public Result getTeamList(TeamInfoDto teamInfoDto) {
+        log.info("获取团队信息");
+        MemberEntity memberEntity = LoginUserUtils.getAppLoginUser();
+        Long memberId = memberEntity.getId();
+//        Long memberId = 444L;
+//        MemberEntity memberEntity = memberDao.selectById(memberId);
+        /**
+         * 获取团队总人数,总购买数
+         *      详细列表
+         *
+         */
+        TeamVo teamVo = new TeamVo();
+        //团队总人数
+        int memberNum = 0;
+        String inviteId = memberEntity.getInviteId();
+        List<MemberEntity> memberEntityList = ydOrderDao.selectMemberByInviteId(inviteId);
+        if(CollUtil.isNotEmpty(memberEntityList)){
+            memberNum = memberEntityList.size();
+        }
+        teamVo.setMemberNum(memberNum);
+        //购买总算力
+        int allPower = ydOrderDao.selectAllPowerByMemberIdAndElse(inviteId);
+        teamVo.setAllPower(allPower);
+        //详细列表
+        Page<TeamInfoVo> page = new Page<>(teamInfoDto.getPageNum(), teamInfoDto.getPageSize());
+        IPage<TeamInfoVo> teamInfoVos = ydOrderDao.getTeamInfoList(page, memberEntity);
+        List<TeamInfoVo> records = teamInfoVos.getRecords();
+        if(CollUtil.isNotEmpty(records)){
+            for(TeamInfoVo teamInfoVo : records){
+                String phone = teamInfoVo.getInvitephone();
+                if(StrUtil.isNotEmpty(phone)){
+                    teamInfoVo.setInvitephone(StrUtil.subSufByLength(phone,4));
+                }
+                //下属团队人数
+                int memberNumInvite = 0;
+                List<MemberEntity> memberEntityInviteList = ydOrderDao.selectMemberByInviteId(phone);
+                if(CollUtil.isNotEmpty(memberEntityInviteList)){
+                    memberNumInvite = memberEntityInviteList.size();
+                }
+                teamInfoVo.setMemberNum(memberNumInvite);
+                //下属团队总算力
+                int powerNum = ydOrderDao.selectAllPowerByMemberIdAndElse(phone);
+                teamInfoVo.setPowerNum(powerNum);
+            }
+        }
+        teamVo.setTeamInfoVos(records);
+        return Result.ok(teamVo);
+    }
+
+
+    /**
+     * 去加减币币账户余额,减少产品的剩余数目
+     * @param memberId
+     * @param multiplyUsdt
+     * @param productId
+     * @param quantity
+     * @return
+     */
+    public synchronized boolean updateWalletCoin(Long memberId,BigDecimal multiplyUsdt,Long productId,BigDecimal quantity){
+        MemberWalletCoinEntity memberWalletCoinEntity = memberWalletCoinDao.selectWalletCoinBymIdAndCode(memberId, "USDT");
+        BigDecimal availableBalance = memberWalletCoinEntity.getAvailableBalance();
+        BigDecimal totalBalance = memberWalletCoinEntity.getTotalBalance();
+        BigDecimal availableSubtract = availableBalance.subtract(multiplyUsdt);
+        BigDecimal totalSubtract = totalBalance.subtract(multiplyUsdt);
+        boolean flag = false;
+        if(availableSubtract.compareTo(BigDecimal.ZERO) >= 0){
+            //更新余额
+            memberWalletCoinEntity.setAvailableBalance(availableSubtract);
+            memberWalletCoinEntity.setTotalBalance(totalSubtract);
+            memberWalletCoinDao.updateById(memberWalletCoinEntity);
+            //减少产品的剩余数量
+            YdProductEntity ydProductEntity = ydProductDao.selectById(productId);
+            BigDecimal surplusT = ydProductEntity.getSurplusT();
+            BigDecimal subtract = surplusT.subtract(quantity);
+            ydProductEntity.setSurplusT(subtract);
+            ydProductDao.updateById(ydProductEntity);
+            flag = true;
+        }
+        return flag;
+    }
+
 }

--
Gitblit v1.9.1