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 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 queryWrapper = new QueryWrapper<>(); List 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 page = new Page<>(ydProductListDto.getPageNum(), ydProductListDto.getPageSize()); IPage list = ydProductDao.getProductList(page, ydProductListDto); List records = list.getRecords(); if(CollUtil.isNotEmpty(records)){ //预计收益 BigDecimal prifitT = BigDecimal.ZERO; Wrapper queryWrapper = new QueryWrapper<>(); List 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); } Integer shelvesDays = ydProductVo.getShelvesDays(); String proUnit = ydProductVo.getProUnit(); if(shelvesDays == 0){ ydProductVo.setShelvesDaysStr("待定"); }else{ ydProductVo.setShelvesDaysStr(proUnit+"+"+shelvesDays); } } } 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 queryWrapper = new QueryWrapper<>(); List ydBasicSettingEntities = ydBasicSettingDao.selectList(queryWrapper); if(CollUtil.isNotEmpty(ydBasicSettingEntities)){ BigDecimal prifitT = ydBasicSettingEntities.get(0).getPrifitT(); if(ObjectUtil.isNotEmpty(prifitT)){ ydProductVo.setProfitT(prifitT); } } /** *产出规则 */ //上架天数 Integer shelvesDays = ydProductVo.getShelvesDays(); String proUnit = ydProductVo.getProUnit(); if(shelvesDays == 0){ ydProductVo.setGetType(2); ydProductVo.setShelvesDaysStr("待定"); }else{ ydProductVo.setGetType(1); ydProductVo.setShelvesDaysStr(proUnit+"+"+shelvesDays); } Date date = DateUtil.date(); ydProductVo.setNowTime(date); 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 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 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 page = new Page<>(ydOrderListDto.getPageNum(), ydOrderListDto.getPageSize()); YdOrderEntity ydOrderEntity = new YdOrderEntity(); ydOrderEntity.setMemberId(memberId); ydOrderEntity.setState(state); IPage 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 objectQueryWrapper = new QueryWrapper<>(); objectQueryWrapper.eq("member_id",memberId); objectQueryWrapper.eq("type",YdOrderEntity.PRODUCT_ORDER); List 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 powerNowQuery = new QueryWrapper<>(); powerNowQuery.eq("member_id",memberId); powerNowQuery.eq("state",YdOrderEntity.ORDER_STATE_WORK); powerNowQuery.eq("type",YdOrderEntity.PRODUCT_ORDER); List PowerNowQuery = ydOrderDao.selectList(powerNowQuery); if(CollUtil.isNotEmpty(PowerNowQuery)){ for(YdOrderEntity order : PowerNowQuery){ int quantity = order.getQuantity(); Long productId = order.getProductId(); YdProductEntity ydProductEntity = ydProductDao.selectById(productId); if(ydProductEntity.getCoin() == "XCH"){ Integer proNum = ydProductEntity.getProNum(); powerNow = powerNow + quantity*proNum; } } } orderAllInfoVo.setPowerNow(powerNow); //当前待生效算力 int powerReady = 0; QueryWrapper powerReradyQuery = new QueryWrapper<>(); powerReradyQuery.eq("member_id",memberId); powerReradyQuery.eq("type",YdOrderEntity.PRODUCT_ORDER); powerReradyQuery.eq("state",YdOrderEntity.ORDER_STATE_READY); List powerReradyQuerys = ydOrderDao.selectList(powerReradyQuery); if(CollUtil.isNotEmpty(powerReradyQuerys)){ for(YdOrderEntity order : powerReradyQuerys){ int quantity = order.getQuantity(); Long productId = order.getProductId(); YdProductEntity ydProductEntity = ydProductDao.selectById(productId); if(ydProductEntity.getCoin() == "XCH"){ Integer proNum = ydProductEntity.getProNum(); powerReady = powerReady + quantity*proNum; } } } orderAllInfoVo.setPowerReady(powerReady); //昨日总收益 BigDecimal lastdayProfit = BigDecimal.ZERO; Date date = DateUtil.date(); Date dateTime = DateUtil.offsetDay(date, 1); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("type",4); queryWrapper.eq("member_id",memberId); queryWrapper.eq("status",1); queryWrapper.like("create_time",DateUtil.formatDate(dateTime)); List 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 queryWrapper = new QueryWrapper<>(); List 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 queryWrapper = new QueryWrapper<>(); List 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 page = new Page<>(ydAgentDto.getPageNum(), ydAgentDto.getPageSize()); YdBasicLevelSettingEntity ydBasicLevelSettingEntity = new YdBasicLevelSettingEntity(); IPage 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 memberEntityList = ydOrderDao.selectMemberByInviteId(inviteId); if(CollUtil.isNotEmpty(memberEntityList)){ memberNum = memberEntityList.size(); } teamVo.setMemberNum(memberNum); //购买总算力 int allPower =0; List ydOrderEntitys = ydOrderDao.selectListByMemberIdAndElse(inviteId); if(CollUtil.isNotEmpty(ydOrderEntitys)){ for(YdOrderEntity ydOrderEntity : ydOrderEntitys){ Long productId = ydOrderEntity.getProductId(); YdProductEntity ydProductEntity = ydProductDao.selectById(productId); if(ydProductEntity.getCoin() == "XCH"){ Integer proNum = ydProductEntity.getProNum(); Integer quantity = ydOrderEntity.getQuantity(); allPower = allPower + proNum*quantity; } } } teamVo.setAllPower(allPower); //详细列表 Page page = new Page<>(teamInfoDto.getPageNum(), teamInfoDto.getPageSize()); IPage teamInfoVos = ydOrderDao.getTeamInfoList(page, memberEntity); List 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 memberEntityInviteList = ydOrderDao.selectMemberByInviteId(phone); if(CollUtil.isNotEmpty(memberEntityInviteList)){ memberNumInvite = memberEntityInviteList.size(); } teamInfoVo.setMemberNum(memberNumInvite); //下属团队总算力 int powerNum =0; List ydOrderEntityLevel = ydOrderDao.selectListByMemberIdAndElse(inviteId); if(CollUtil.isNotEmpty(ydOrderEntityLevel)){ for(YdOrderEntity ydOrderEntity : ydOrderEntityLevel){ Long productId = ydOrderEntity.getProductId(); YdProductEntity ydProductEntity = ydProductDao.selectById(productId); if(ydProductEntity.getCoin() == "XCH"){ Integer proNum = ydProductEntity.getProNum(); Integer quantity = ydOrderEntity.getQuantity(); powerNum = powerNum + proNum*quantity; } } } 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; } }