| | |
| | | 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 org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.validation.Valid; |
| | | import java.math.BigDecimal; |
| | | import java.time.Instant; |
| | | import java.util.Date; |
| | | |
| | | |
| | | @Api(tags ="新币管理") |
| | |
| | | @Autowired |
| | | private UserSubscriptionService userSubscriptionService; |
| | | |
| | | @Autowired |
| | | ItemService itemService; |
| | | |
| | | @Autowired |
| | | RealtimeService realtimeService; |
| | | |
| | | /** |
| | | * 产品列表数据 |
| | | */ |
| | | @ApiOperation(value = "新币列表") |
| | | @GetMapping("list") |
| | | public Result<Page<Ico>> list(IcoQuery icoQuery, Page<Ico> page) throws Exception { |
| | | QueryWrapper queryWrapper = QueryWrapperGenerator.buildQueryCondition (icoQuery, IcoQuery.class); |
| | | 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) { //新增校验 |
| | | long count = icoService.count(new LambdaQueryWrapper<Ico>() |
| | | .eq(Ico::getSymbol, ico.getSymbol())); |
| | | 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("产品表已存在数据"); |
| | | } |
| | | if(count > 0){ |
| | | throw new YamiShopBindException("代币符号已存在"); |
| | | throw new YamiShopBindException("代币符号或数据源编码已存在"); |
| | | } |
| | | } 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)){ |
| | | if (!model.getSymbol().equalsIgnoreCase(ico.getSymbol()) || |
| | | !model.getSymbolData().equalsIgnoreCase(ico.getSymbolData())) { |
| | | 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("代币符号或数据源编码已存在"); |
| | | } |
| | | |
| | | //更新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); |
| | | } |
| | | } |
| | | //新增或编辑表单保存 |
| | |
| | | @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); |
| | | } |