From 89b7fb1d316cfce7eb98a27c8d668da493933f7f Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Fri, 25 Feb 2022 16:29:07 +0800
Subject: [PATCH] 20222223

---
 src/main/java/com/xcong/excoin/modules/coin/controller/GbzOrderController.java |   91 +++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 86 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/modules/coin/controller/GbzOrderController.java b/src/main/java/com/xcong/excoin/modules/coin/controller/GbzOrderController.java
index e39fdd3..0419268 100644
--- a/src/main/java/com/xcong/excoin/modules/coin/controller/GbzOrderController.java
+++ b/src/main/java/com/xcong/excoin/modules/coin/controller/GbzOrderController.java
@@ -1,21 +1,29 @@
 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.contants.AppContants;
 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.*;
 
@@ -34,23 +42,54 @@
     @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(66);
+        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("GRICE数量不足");
+        }
+
         GbzOrderEntity gbzOrder = new GbzOrderEntity();
         gbzOrder.setPrice(price);
         gbzOrder.setAmount(amount);
         gbzOrder.setCnt(gbzAddDto.getCount());
         gbzOrder.setMemberId(loginUser.getId());
-        gbzOrder.setSymbol(CoinTypeEnum.BZZ.name());
+        gbzOrder.setSymbol(CoinTypeEnum.GRICE.name());
+        gbzOrder.setStatus(1);
 
         gbzOrderDao.insert(gbzOrder);
 
-        MemberWalletCoinEntity wallet = memberWalletCoinDao.selectWalletCoinBymIdAndCode(loginUser.getId(), CoinTypeEnum.USDT.name());
         memberWalletCoinDao.updateBlockBalance(wallet.getId(), amount.negate(), BigDecimal.ZERO, 0);
+        redisUtils.set("bea_coin_total", Integer.parseInt(total) - gbzAddDto.getCount());
+        LogRecordUtils.insertMemberAccountMoneyChange(loginUser.getId(), "购买GRICE", amount, "USDT", 1, 1);
         return Result.ok("购买成功");
     }
 
@@ -58,16 +97,58 @@
     @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(page);
+        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() {
-        return Result.ok(BigDecimal.valueOf(66));
+        PriceVo priceVo = new PriceVo();
+        String newPriceStr = redisUtils.getString("bea_order_new_price");
+        priceVo.setNewPrice(StrUtil.isNotBlank(newPriceStr) ? new BigDecimal(newPriceStr) : AppContants.DEFAULT_PRICE);
+
+        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(280000);
+
+        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
+                .GRICE.name());
+        memberWalletCoinDao.updateBlockBalance(wallet.getId(), totalAmount, BigDecimal.ZERO, 0);
+
+        gbzOrderDao.updateStatus(member.getId());
+        LogRecordUtils.insertMemberAccountMoneyChange(member.getId(), "提取GRICE到资产", totalAmount, "GRICE", 1, 1);
+        return Result.ok("提取成功");
+    }
 }

--
Gitblit v1.9.1