新版仿ok交易所-后端
1
zj
18 hours ago 640ccb9229224642515527daf87f308a7aa9bdf4
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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
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.data.domain.Realtime;
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.config.RequestDataHelper;
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.huobi.data.DataCache;
import com.yami.trading.security.common.util.SecurityUtils;
import com.yami.trading.service.data.RealtimeService;
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.math.BigDecimal;
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;
 
    @Autowired
    RealtimeService realtimeService;
 
    /**
     * 产品列表数据
     */
    @ApiOperation(value = "新币列表")
    @GetMapping("list")
    public Result<Page<Ico>> list(ItemQuery icoQuery, Page<Ico> page) throws Exception {
        QueryWrapper queryWrapper = QueryWrapperGenerator.buildQueryCondition (icoQuery, ItemQuery.class);
        queryWrapper.orderByDesc("market_date");
        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()));
            //产品表
            long iCount = itemService.count(new LambdaQueryWrapper<Item>()
                    .eq(Item::getSymbol, ico.getSymbol()).or().eq(Item::getSymbolData, ico.getSymbolData()));
            if(iCount > 0){
                throw new YamiShopBindException("Product data already exists");
            }
            if(count > 0){
                throw new YamiShopBindException("Token symbol or data source code already exists");
            }
        } else {
            Ico model = icoService.getById(ico.getId());
            if (model == null) {
                throw new YamiShopBindException("Data does not exist");
            }
            Date now = Date.from(Instant.now());
            if (model.getMarketDate() != null && model.getMarketDate().before(now)){
                if (!model.getSymbol().equalsIgnoreCase(ico.getSymbol()) ||
                        !model.getSymbolData().equalsIgnoreCase(ico.getSymbolData())) {
                    throw new YamiShopBindException("Already listed, token symbol and data source code cannot be modified");
                }
            }
 
            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("Token symbol or data source code already exists");
            }
 
            //更新ico实时价格
            /*if (model.getUnitAmount().compareTo(BigDecimal.ZERO) >0 &&
                    model.getUnitAmount().compareTo(ico.getUnitAmount()) != 0){
                String symbol = ico.getSymbol();
                RequestDataHelper.set("symbol", symbol);
                LambdaQueryWrapper<Realtime> queryWrapper = new LambdaQueryWrapper<Realtime>()
                        .eq(Realtime::getSymbol, symbol)
                        .orderByDesc(Realtime::getTs)
                        .last("LIMIT 1");
                Realtime realtime = realtimeService.getOne(queryWrapper);
                realtime.setClose(ico.getUnitAmount());
                realtimeService.updateById(realtime);
                RequestDataHelper.clear();
                DataCache.putRealtime(symbol, realtime);
            }*/
        }
        //新增或编辑表单保存
        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("Subscription records exist, deletion failed");
        }
        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");
        queryWrapper.orderByDesc("created_at");
        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("删除记录成功");
    }
 
}