新版仿ok交易所-后端
zyy
2025-09-03 41b107ba7acd40fa32ce9ec8f103dfe1061ecf4e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
package com.yami.trading.admin.controller.ico;
 
import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.dto.UserSubscriptionDTO;
import com.yami.trading.bean.ico.query.IcoQuery;
import com.yami.trading.bean.item.domain.Item;
import com.yami.trading.bean.item.query.ItemQuery;
import com.yami.trading.common.domain.Result;
import com.yami.trading.common.exception.YamiShopBindException;
import com.yami.trading.common.query.QueryWrapperGenerator;
import com.yami.trading.security.common.util.SecurityUtils;
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.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
 
import javax.validation.Valid;
import java.time.Instant;
import java.util.Date;
 
 
@Api(tags ="新币管理")
@RestController
@RequestMapping(value = "normal/adminIcoAction!")
public class AdminIcoController {
 
    @Autowired
    private IcoService icoService;
 
    @Autowired
    private UserSubscriptionService    userSubscriptionService;
 
    @Autowired
    ItemService itemService;
 
    /**
     * 产品列表数据
     */
    @ApiOperation(value = "新币列表")
    @GetMapping("list")
    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);
    }
 
    /**
     * 保存产品
     */
    @ApiOperation(value = "保存新币")
    @PostMapping("save")
    public  Result <String> save(@Valid @RequestBody Ico ico) {
        long count;
        if (ico.getId() == null) { //新增校验
            count = icoService.count(new LambdaQueryWrapper<Ico>()
                    .eq(Ico::getSymbol, ico.getSymbol()).or().eq(Ico::getSymbolData, ico.getSymbolData()));
 
        } else {
            Ico model = icoService.getById(ico.getId());
            if (model == null) {
                throw new YamiShopBindException("数据不存在");
            }
            Date now = Date.from(Instant.now());
            if (model.getMarketDate() != null && model.getMarketDate().before(now)){
                throw new YamiShopBindException("已上市不能修改");
            }
 
            if (!model.getSymbol().equalsIgnoreCase(ico.getSymbol()) ||
                    !model.getSymbolData().equalsIgnoreCase(ico.getSymbolData())) {
                //修改编码判断是否有人购买
                QueryWrapper<UserSubscription> queryWrapper = new QueryWrapper<>();
                queryWrapper.eq("ico_project_id", ico.getId());
                long uCount = userSubscriptionService.count(queryWrapper);
                if (uCount > 0) {
                    throw new YamiShopBindException("已有申购,禁止修改代币符号,数据源编码");
                }
            }
            count = icoService.count(new LambdaQueryWrapper<Ico>()
                            .ne(Ico::getId, ico.getId())
                            .and(wrapper -> wrapper
                                    .eq(Ico::getSymbol, ico.getSymbol())
                                    .or()
                                    .eq(Ico::getSymbolData, ico.getSymbolData())));
        }
        if(count > 0){
            throw new YamiShopBindException("代币符号或数据源编码已存在");
        }
        //产品表
        long iCount = itemService.count(new LambdaQueryWrapper<Item>()
                .eq(Item::getSymbol, ico.getSymbol()).or().eq(Item::getSymbolData, ico.getSymbolData()));
        if(iCount > 0){
            throw new YamiShopBindException("产品表已存在数据");
        }
        //新增或编辑表单保存
        icoService.saveOrUpdate(ico);
        return Result.ok ( "保存产品成功" );
    }
 
    /**
     * 删除产品
     */
    @ApiOperation(value = "删除新币")
    @DeleteMapping("delete")
    public Result <String> delete(Integer id) {
        if (id == null) {
            throw new YamiShopBindException("id is null");
        }
        QueryWrapper<UserSubscription> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("ico_project_id", id);
        long count = userSubscriptionService.count(queryWrapper);
        if (count > 0) {
            throw new YamiShopBindException("已有申购记录,删除失败");
        }
        if (icoService.removeById(id)) {
            return Result.ok("删除成功");
        }
        return Result.ok("删除失败");
 
    }
 
    @ApiOperation(value = "新币申购记录列表")
    @GetMapping("recordList")
    public Result<Page<UserSubscriptionDTO>> recordList(IcoQuery icoQuery, Page<UserSubscriptionDTO> page) throws Exception {
        QueryWrapper queryWrapper = QueryWrapperGenerator.buildQueryCondition (icoQuery, IcoQuery.class);
        queryWrapper.eq("u.del_flag", "0");
        Page<UserSubscriptionDTO> result = userSubscriptionService.findPage(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("删除记录成功");
    }
 
}