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