新版仿ok交易所-后端
zyy
2025-08-25 6e3ac72bb8da7d1622acf75c01b09caa341c2383
后台申购记录
4 files modified
1 files added
193 ■■■■■ changed files
trading-order-admin/src/main/java/com/yami/trading/admin/controller/ico/AdminIcoController.java 45 ●●●● patch | view | raw | blame | history
trading-order-bean/src/main/java/com/yami/trading/bean/ico/domain/UserSubscription.java 4 ●●●● patch | view | raw | blame | history
trading-order-bean/src/main/java/com/yami/trading/bean/ico/query/IcoQuery.java 49 ●●●●● patch | view | raw | blame | history
trading-order-bean/src/main/java/com/yami/trading/bean/model/Wallet.java 5 ●●●●● patch | view | raw | blame | history
trading-order-service/src/main/java/com/yami/trading/service/ico/IcoService.java 90 ●●●●● patch | view | raw | blame | history
trading-order-admin/src/main/java/com/yami/trading/admin/controller/ico/AdminIcoController.java
@@ -4,10 +4,14 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.yami.trading.bean.ico.domain.Ico;
import com.yami.trading.bean.ico.domain.UserSubscription;
import com.yami.trading.bean.ico.query.IcoQuery;
import com.yami.trading.bean.item.query.ItemQuery;
import com.yami.trading.common.domain.Result;
import com.yami.trading.common.query.QueryWrapperGenerator;
import com.yami.trading.service.ico.IcoService;
import com.yami.trading.service.ico.UserSubscriptionService;
import com.yami.trading.service.item.ItemService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
@@ -24,13 +28,16 @@
    @Autowired
    private IcoService icoService;
    @Autowired
    private UserSubscriptionService    userSubscriptionService;
    /**
     * 产品列表数据
     */
    @ApiOperation(value = "新币列表,配置列表")
    @ApiOperation(value = "新币列表")
    @GetMapping("list")
    public Result<Page<Ico>> list(ItemQuery itemQuery, Page<Ico> page) throws Exception {
        QueryWrapper queryWrapper = QueryWrapperGenerator.buildQueryCondition (itemQuery, ItemQuery.class);
    public Result<Page<Ico>> list(IcoQuery icoQuery, Page<Ico> page) throws Exception {
        QueryWrapper queryWrapper = QueryWrapperGenerator.buildQueryCondition (icoQuery, IcoQuery.class);
        Page<Ico> result = icoService.page(page, queryWrapper);
        return Result.ok(result);
    }
@@ -51,10 +58,36 @@
     */
    @ApiOperation(value = "删除新币")
    @DeleteMapping("delete")
    public Result <String> delete(String ids) {
        String idArray[] = ids.split(",");
        icoService.removeByIds ( Lists.newArrayList ( idArray ) );
    public Result <String> delete(Integer id) {
        icoService.removeById(id);
        return Result.ok("删除产品成功");
    }
    @ApiOperation(value = "新币申购记录列表")
    @GetMapping("recordList")
    public Result<Page<UserSubscription>> recordList(IcoQuery icoQuery, Page<UserSubscription> page) throws Exception {
        QueryWrapper queryWrapper = QueryWrapperGenerator.buildQueryCondition (icoQuery, IcoQuery.class);
        Page<UserSubscription> result = userSubscriptionService.page(page, queryWrapper);
        return Result.ok(result);
    }
    /**
     * 修改新币记录
     */
    @ApiOperation(value = "修改新币记录")
    @PostMapping("updateRecord")
    public  Result <String> save(@RequestBody UserSubscription userSubscription) {
        return icoService.updateRecord(userSubscription);
    }
    /**
     * 删除新币记录
     */
    @ApiOperation(value = "删除新币记录")
    @DeleteMapping("deleteRecord")
    public Result <String> deleteRecord(Integer id) {
        userSubscriptionService.removeById(id);
        return Result.ok("删除记录成功");
    }
}
trading-order-bean/src/main/java/com/yami/trading/bean/ico/domain/UserSubscription.java
@@ -28,10 +28,6 @@
    @ApiModelProperty("用户id")
    private String userId;
    @ApiModelProperty("订单号")
    private String orderNo;
    @ApiModelProperty("申购数量")
    private Integer subscribeNums;
trading-order-bean/src/main/java/com/yami/trading/bean/ico/query/IcoQuery.java
New file
@@ -0,0 +1,49 @@
package com.yami.trading.bean.ico.query;
import com.yami.trading.common.query.Query;
import com.yami.trading.common.query.QueryType;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * 产品DTO
 * @author lucas
 * @version 2023-03-10
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class IcoQuery {
    private static final long serialVersionUID = 1L;
    /**
     * name
     */
    @ApiParam(value = "name")
    @Query(type = QueryType.LIKE)
    private String name;
    /**
     * 代码
     */
    @ApiParam(value = "symbol")
    @Query(type = QueryType.LIKE)
    private String symbol;
    /**
     * 数据源编码
     */
    @ApiParam(value = "数据源编码")
    @Query(type = QueryType.LIKE)
    private String symbolData;
    @ApiParam(value = "userId")
    private String userId;
    private String delFlag;
}
trading-order-bean/src/main/java/com/yami/trading/bean/model/Wallet.java
@@ -39,6 +39,11 @@
     */
    private BigDecimal freezeMoney =new BigDecimal(0);
    /**
     * 待补金额
     */
    private BigDecimal amountToBeCovered =new BigDecimal(0);
    @Version
    private  int version;
trading-order-service/src/main/java/com/yami/trading/service/ico/IcoService.java
@@ -1,12 +1,17 @@
package com.yami.trading.service.ico;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yami.trading.bean.ico.domain.Ico;
import com.yami.trading.bean.ico.domain.UserSubscription;
import com.yami.trading.bean.model.MoneyLog;
import com.yami.trading.bean.model.User;
import com.yami.trading.bean.model.Wallet;
import com.yami.trading.bean.model.WalletExtend;
import com.yami.trading.common.constants.Constants;
import com.yami.trading.common.domain.Result;
import com.yami.trading.common.exception.YamiShopBindException;
@@ -16,6 +21,8 @@
import com.yami.trading.service.MoneyLogService;
import com.yami.trading.service.WalletService;
import com.yami.trading.service.user.UserService;
import com.yami.trading.service.user.WalletExtendService;
import io.swagger.v3.oas.annotations.parameters.RequestBody;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -23,6 +30,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.validation.Valid;
import java.math.BigDecimal;
import java.util.Date;
@@ -46,6 +54,9 @@
    @Autowired
    MoneyLogService moneyLogService;
    @Autowired
    WalletExtendService walletExtendService;
    /**
     * 新币申购
@@ -79,10 +90,10 @@
            }
            //购买金额
            BigDecimal amount = ico.getUnitAmount().multiply(new BigDecimal(model.getSubscribeNums()));
            Wallet wallet = walletService.saveWalletByPartyId(partyId);
            /*Wallet wallet = walletService.saveWalletByPartyId(partyId);
            if (amount.compareTo(wallet.getMoney()) > 0) {
                throw new YamiShopBindException("余额不足");
            }
            }*/
            if(amount.compareTo(ico.getMinContribution()) < 0 ){
                throw new YamiShopBindException("最低投资额: " + ico.getMinContribution());
            }
@@ -103,7 +114,7 @@
                model.setSubscriptionType(1);
            }
            userSubscriptionService.save(model);
            walletService.update(partyId, Arith.sub(0, amount.doubleValue()));
            /*walletService.update(partyId, Arith.sub(0, amount.doubleValue()));
            // 保存 资金日志
            MoneyLog moneylog = new MoneyLog();
@@ -116,7 +127,7 @@
            moneylog.setSymbol(ico.getSymbol());
            moneylog.setWalletType(ico.getSymbol());
            moneylog.setContentType(Constants.MONEYLOG_CONTENT_NEW_COIN_OPEN);
            moneyLogService.save(moneylog);
            moneyLogService.save(moneylog);*/
            return Result.ok("申请成功" );
        } catch (Exception e) {
            throw new RuntimeException(e);
@@ -124,4 +135,75 @@
    }
    public Result <String> updateRecord(UserSubscription model) {
        try {
            if( model.getId() == null || model.getStatus() == null){
                throw new YamiShopBindException("请输入参数");
            }
            UserSubscription userSubscription = userSubscriptionService.getById(model.getId());
            if (userSubscription == null) {
                throw new YamiShopBindException("记录不存在");
            }
            if (model.getStatus() == 3|| model.getStatus() == 2) {
                userSubscription.setEndTime(DateTime.now());
            }
            if (userSubscription.getStatus() == 5) {
                throw new YamiShopBindException("It's been converted");
            }
            if(userSubscription.getStatus() == 3){
                throw new YamiShopBindException("不能更改申购状态");
            }
            Ico ico = this.getById(model.getIcoProjectId());
            if (model.getStatus() == 3 || model.getStatus() == 5) {
                if(model.getBallotNumber() == null || model.getBallotNumber() == 0){
                    throw new YamiShopBindException("中签数量不能小于0");
                }
                if(model.getBallotNumber() > userSubscription.getSubscribeNums()){
                    throw new YamiShopBindException("配置中签数量不能超过申请数量");
                }
            }
            userSubscription.setStatus(model.getStatus());
            userSubscription.setBallotNumber(model.getBallotNumber());
            if (model.getStatus() == 3) { //中签
                int applyNumber = userSubscription.getSubscribeNums() - model.getBallotNumber();
                BigDecimal amount = ico.getUnitAmount().multiply(new BigDecimal(applyNumber));
                //资金账户
                Wallet wallet = walletService.saveWalletByPartyId(userSubscription.getUserId());
                BigDecimal subtract = amount.subtract(wallet.getMoney());
                if (subtract.compareTo(BigDecimal.ZERO) > 0) {
                    //放入待补
                    wallet.setMoney(BigDecimal.ZERO);
                    wallet.setAmountToBeCovered(subtract);
                    if (!walletService.updateById(wallet)) {
                        throw new YamiShopBindException("操作钱包失败!");
                    }
                } else {
                    //扣除资金
                    walletService.update(userSubscription.getUserId(), amount.negate().doubleValue());
                }
                //保存 资金日志
                MoneyLog moneylog = new MoneyLog();
                moneylog.setCategory(Constants.MONEYLOG_CONTENT_NEW_COIN);
                moneylog.setAmountBefore(wallet.getMoney());
                moneylog.setAmount(amount);
                moneylog.setAmountAfter(BigDecimal.valueOf(Arith.sub(wallet.getMoney().doubleValue(), amount.doubleValue())));
                moneylog.setLog("新币购买,申购金额[" + amount + "]");
                moneylog.setUserId(userSubscription.getUserId());
                moneylog.setSymbol(ico.getSymbol());
                moneylog.setWalletType(ico.getSymbol());
                moneylog.setContentType(Constants.MONEYLOG_CONTENT_NEW_COIN_OPEN);
                moneyLogService.save(moneylog);
                userSubscription.setStatus(5);
            }
            if (model.getStatus() == 3 || model.getStatus() == 5) {  //转入账户
                //获取币账户
                WalletExtend walletExtend = walletService.saveExtendByPara(userSubscription.getUserId(), ico.getSymbol());
                walletService.updateExtend(userSubscription.getUserId(), walletExtend.getWallettype(), model.getBallotNumber());
            }
            userSubscriptionService.save(userSubscription);
            return Result.ok ( "操作成功" );
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}