package com.xcong.excoin.modules.yunding.service.Impl;
|
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.date.DateTime;
|
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.HashMap;
|
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;
|
|
@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.getTotalT().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.getTotalT().compareTo(BigDecimal.ZERO) < 1) {
|
ydProductVo.setStatus(2);
|
} else {
|
ydProductVo.setStatus(1);
|
}
|
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();
|
}
|
}
|
if(quantityOwn >= 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());
|
yunDingProducter.sendYunDingAutoAgent(ydOrderEntity.getMemberId());
|
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.sendYunDingAutoAgent(memberId);
|
yunDingProducter.sendYunDingUsdtProfit(orderEntity.getId());
|
return Result.ok("购买成功");
|
}
|
|
|
/**
|
* 去加减币币账户余额,减少产品的剩余数目
|
* @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;
|
}
|
|
}
|