package com.xcong.excoin.modules.coin.controller;
|
|
import cn.hutool.core.util.StrUtil;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.xcong.excoin.common.LoginUserUtils;
|
import com.xcong.excoin.common.enumerates.CoinTypeEnum;
|
import com.xcong.excoin.common.response.Result;
|
import com.xcong.excoin.modules.coin.dao.GbzOrderDao;
|
import com.xcong.excoin.modules.coin.entity.GbzOrderEntity;
|
import com.xcong.excoin.modules.coin.parameter.dto.GbzAddDto;
|
import com.xcong.excoin.modules.coin.parameter.dto.GbzListDto;
|
import com.xcong.excoin.modules.coin.parameter.vo.PriceVo;
|
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.utils.LogRecordUtils;
|
import com.xcong.excoin.utils.RedisUtils;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiResponse;
|
import io.swagger.annotations.ApiResponses;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.validation.annotation.Validated;
|
import org.springframework.web.bind.annotation.*;
|
|
import java.math.BigDecimal;
|
|
@Slf4j
|
@Validated
|
@RestController
|
@RequestMapping(value = "/api/gbz")
|
@Api(value = "GbzOrderController", tags = "gbz订单接口类")
|
public class GbzOrderController {
|
|
@Autowired
|
private GbzOrderDao gbzOrderDao;
|
|
@Autowired
|
private MemberWalletCoinDao memberWalletCoinDao;
|
|
@Autowired
|
private RedisUtils redisUtils;
|
|
@ApiOperation(value = "新增订单", notes = "新增订单")
|
@PostMapping(value = "/add")
|
@Transactional(rollbackFor = Exception.class)
|
public Result add(@RequestBody GbzAddDto gbzAddDto) {
|
// String status = redisUtils.getString("bea_order_status");
|
// if ("1".equals(status)) {
|
// return Result.fail("无法购买");
|
// }
|
|
String start = redisUtils.getString("bea_start");
|
if ("2".equals(start)) {
|
return Result.fail("暂无法购买");
|
}
|
|
if (gbzAddDto.getCount() < 10) {
|
return Result.fail("最少购买数量为10个");
|
}
|
|
String total = redisUtils.getString("bea_coin_total");
|
MemberEntity loginUser = LoginUserUtils.getAppLoginUser();
|
BigDecimal price = new BigDecimal(redisUtils.getString("bea_order_new_price"));
|
BigDecimal amount = BigDecimal.valueOf(gbzAddDto.getCount()).multiply(price);
|
|
MemberWalletCoinEntity wallet = memberWalletCoinDao.selectWalletCoinBymIdAndCode(loginUser.getId(), CoinTypeEnum.USDT.name());
|
if (amount.compareTo(wallet.getAvailableBalance()) > 0) {
|
return Result.fail("可用金额不足");
|
}
|
|
if (Integer.parseInt(total) < gbzAddDto.getCount()) {
|
return Result.fail("BEA数量不足");
|
}
|
|
GbzOrderEntity gbzOrder = new GbzOrderEntity();
|
gbzOrder.setPrice(price);
|
gbzOrder.setAmount(amount);
|
gbzOrder.setCnt(gbzAddDto.getCount());
|
gbzOrder.setMemberId(loginUser.getId());
|
gbzOrder.setSymbol(CoinTypeEnum.BEA.name());
|
gbzOrder.setStatus(1);
|
|
gbzOrderDao.insert(gbzOrder);
|
|
memberWalletCoinDao.updateBlockBalance(wallet.getId(), amount.negate(), BigDecimal.ZERO, 0);
|
redisUtils.set("bea_coin_total", Integer.parseInt(total) - gbzAddDto.getCount());
|
LogRecordUtils.insertMemberAccountMoneyChange(loginUser.getId(), "购买BEA", amount, "USDT", 1, 1);
|
return Result.ok("购买成功");
|
}
|
|
|
@ApiOperation(value = "获取订单列表")
|
@PostMapping(value = "/findList")
|
public Result findList(@RequestBody GbzListDto gbzListDto) {
|
MemberEntity member = LoginUserUtils.getAppLoginUser();
|
GbzOrderEntity gbzOrderEntity = new GbzOrderEntity();
|
gbzOrderEntity.setMemberId(member.getId());
|
Page<GbzOrderEntity> page = new Page<>(gbzListDto.getPageNum(), gbzListDto.getPageSize());
|
IPage<GbzOrderEntity> result = gbzOrderDao.selectInPage(gbzOrderEntity, page);
|
|
return Result.ok(result.getRecords());
|
}
|
|
@ApiOperation(value = "获取最新价")
|
@ApiResponses({
|
@ApiResponse(code = 200, message = "sucess", response = PriceVo.class)
|
})
|
@GetMapping(value = "/findPrice")
|
public Result findPrice() {
|
PriceVo priceVo = new PriceVo();
|
String newPriceStr = redisUtils.getString("bea_order_new_price");
|
priceVo.setNewPrice(StrUtil.isNotBlank(newPriceStr) ? new BigDecimal(newPriceStr) : BigDecimal.valueOf(66));
|
|
String status = redisUtils.getString("bea_order_status");
|
priceVo.setStatus(StrUtil.isNotBlank(status) ? Integer.parseInt(status) : 2);
|
|
|
String remain = redisUtils.getString("bea_coin_total");
|
priceVo.setRemainCnt(Integer.parseInt(remain));
|
|
BigDecimal totalAmount = gbzOrderDao.selectOrderTotalAmount(LoginUserUtils.getAppLoginUser().getId());
|
priceVo.setTotalAmount(totalAmount);
|
return Result.ok(priceVo);
|
}
|
|
@ApiOperation(value = "提取到资产")
|
@PostMapping(value = "/changeWallet")
|
public Result changeWallet() {
|
String status = redisUtils.getString("bea_order_status");
|
if (!"1".equals(status)) {
|
return Result.fail("暂无法划转");
|
}
|
|
MemberEntity member = LoginUserUtils.getAppLoginUser();
|
BigDecimal totalAmount = gbzOrderDao.selectOrderTotalAmount(member.getId());
|
|
if (totalAmount.compareTo(BigDecimal.ZERO) <= 0) {
|
return Result.fail("无可提取金额");
|
}
|
|
MemberWalletCoinEntity wallet = memberWalletCoinDao.selectWalletCoinBymIdAndCode(member.getId(), CoinTypeEnum
|
.BEA.name());
|
memberWalletCoinDao.updateBlockBalance(wallet.getId(), totalAmount, BigDecimal.ZERO, 0);
|
|
gbzOrderDao.updateStatus(member.getId());
|
LogRecordUtils.insertMemberAccountMoneyChange(member.getId(), "提取BEA到资产", totalAmount, "BEA", 1, 1);
|
return Result.ok("提取成功");
|
}
|
}
|