From 9a9b3bd2c07d177807dfde1b1796cddc1ac410a4 Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Fri, 29 May 2020 11:48:12 +0800 Subject: [PATCH] finish kline detail interface --- src/main/java/com/xcong/excoin/modules/symbols/parameter/vo/KlineDataVo.java | 40 +++++++++++++ src/main/java/com/xcong/excoin/modules/symbols/controller/SymbolsController.java | 24 ++++++- src/main/java/com/xcong/excoin/modules/symbols/service/SymbolsService.java | 3 + src/main/java/com/xcong/excoin/common/system/mapper/CandlestickMapper.java | 21 +++++++ src/main/java/com/xcong/excoin/modules/symbols/service/impl/SymbolsServiceImpl.java | 39 +++++++++++++ src/main/java/com/xcong/excoin/quartz/job/UsdtCnyExchangePriceUpdateJob.java | 5 + src/main/java/com/xcong/excoin/utils/TypeJudgeUtils.java | 22 +++++++ src/main/resources/application.yml | 4 src/main/java/com/xcong/excoin/modules/symbols/parameter/dto/KlineDetailDto.java | 8 -- 9 files changed, 153 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/xcong/excoin/common/system/mapper/CandlestickMapper.java b/src/main/java/com/xcong/excoin/common/system/mapper/CandlestickMapper.java new file mode 100644 index 0000000..4e6fca1 --- /dev/null +++ b/src/main/java/com/xcong/excoin/common/system/mapper/CandlestickMapper.java @@ -0,0 +1,21 @@ +package com.xcong.excoin.common.system.mapper; + +import com.huobi.client.model.Candlestick; +import com.xcong.excoin.modules.symbols.parameter.vo.KlineDataVo; +import com.xcong.excoin.utils.api.response.KlineReturn; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +/** + * @author wzy + * @date 2020-05-29 + **/ +@Mapper +public abstract class CandlestickMapper { + public static final CandlestickMapper INSTANCE = Mappers.getMapper(CandlestickMapper.class); + + @Mapping(source = "timestamp", target = "time") + public abstract KlineDataVo toKlineDataVo(Candlestick candlestick); + +} diff --git a/src/main/java/com/xcong/excoin/modules/symbols/controller/SymbolsController.java b/src/main/java/com/xcong/excoin/modules/symbols/controller/SymbolsController.java index dd8786d..55b6f5c 100644 --- a/src/main/java/com/xcong/excoin/modules/symbols/controller/SymbolsController.java +++ b/src/main/java/com/xcong/excoin/modules/symbols/controller/SymbolsController.java @@ -2,10 +2,11 @@ import com.xcong.excoin.common.response.Result; import com.xcong.excoin.modules.symbols.parameter.dto.KlineDetailDto; +import com.xcong.excoin.modules.symbols.parameter.vo.HomeSymbolsVo; +import com.xcong.excoin.modules.symbols.parameter.vo.KlineDataVo; import com.xcong.excoin.modules.symbols.service.SymbolsService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; +import com.xcong.excoin.utils.TypeJudgeUtils; +import io.swagger.annotations.*; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; @@ -26,21 +27,34 @@ private SymbolsService symbolsService; @ApiOperation(value = "轮询获取app首页币种交易信息", notes = "轮询获取app首页币种交易信息") + @ApiResponses({ + @ApiResponse(code = 0, message = "success", response = HomeSymbolsVo.class) + }) @GetMapping(value = "/homeSymbols") public Result homeSymbols(@ApiParam(name = "type", value = "类型1-币币2-合约3-自选", required = true, example = "1") Integer type) { return symbolsService.homeSymbols(type); } @ApiOperation(value = "根据币种查询币种当前各种数据", notes = "根据币种查询币种当前各种数据") + @ApiResponses({ + @ApiResponse(code = 0, message = "success", response = HomeSymbolsVo.class) + }) @GetMapping(value = "/findSymbolData") - public Result findSymbolData(@ApiParam(name = "symbol", value="币种", required = true, example = "BTC/USDT") String symbol) { + public Result findSymbolData(@ApiParam(name = "symbol", value = "币种", required = true, example = "BTC/USDT") String symbol) { return symbolsService.findSymbolData(symbol); } @ApiOperation(value = "查询历史K线数据", notes = "查询历史K线数据") + @ApiResponses({ + @ApiResponse(code = 0, message = "success", response = KlineDataVo.class) + }) @PostMapping(value = "/klineDetail") public Result klineDetail(@RequestBody @Valid KlineDetailDto klineDetailDto) { - return null; + if (!TypeJudgeUtils.klinePeriod(klineDetailDto.getPeriod())) { + return Result.fail("非法参数"); + } + + return symbolsService.findKlineDetails(klineDetailDto); } } diff --git a/src/main/java/com/xcong/excoin/modules/symbols/parameter/dto/KlineDetailDto.java b/src/main/java/com/xcong/excoin/modules/symbols/parameter/dto/KlineDetailDto.java index 5281ea8..32aa355 100644 --- a/src/main/java/com/xcong/excoin/modules/symbols/parameter/dto/KlineDetailDto.java +++ b/src/main/java/com/xcong/excoin/modules/symbols/parameter/dto/KlineDetailDto.java @@ -20,14 +20,10 @@ private String symbol; @NotNull - @ApiModelProperty(value = "", example = "5min") + @ApiModelProperty(value = "k线时长", example = "5min") private String period; @NotNull - @ApiModelProperty(value = "", example = "150") - private Integer size; - - @NotNull - @ApiModelProperty(value = "", example = "1") + @ApiModelProperty(value = "类型 1-币币2-合约", example = "1") private Integer type; } diff --git a/src/main/java/com/xcong/excoin/modules/symbols/parameter/vo/KlineDataVo.java b/src/main/java/com/xcong/excoin/modules/symbols/parameter/vo/KlineDataVo.java new file mode 100644 index 0000000..3484e4d --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/symbols/parameter/vo/KlineDataVo.java @@ -0,0 +1,40 @@ +package com.xcong.excoin.modules.symbols.parameter.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * k线返回类 + * + * @author wzy + * @date 2020-05-29 + **/ +@Data +@ApiModel(value = "KlineDataVo", description = "k线返回类") +public class KlineDataVo { + + @ApiModelProperty(value = "时间") + private long time; + + @ApiModelProperty(value = "开盘指数价") + private BigDecimal open; + + @ApiModelProperty(value = "收盘指数价") + private BigDecimal high; + + @ApiModelProperty(value = "最低指数价") + private BigDecimal low; + + @ApiModelProperty(value = "最高指数价") + private BigDecimal close; + + @ApiModelProperty(value = "成交量张数") + private BigDecimal volume; + + @ApiModelProperty(value = "成交量") + private BigDecimal amount; + +} diff --git a/src/main/java/com/xcong/excoin/modules/symbols/service/SymbolsService.java b/src/main/java/com/xcong/excoin/modules/symbols/service/SymbolsService.java index 2cad3b9..be91c71 100644 --- a/src/main/java/com/xcong/excoin/modules/symbols/service/SymbolsService.java +++ b/src/main/java/com/xcong/excoin/modules/symbols/service/SymbolsService.java @@ -2,6 +2,7 @@ import com.xcong.excoin.common.response.Result; +import com.xcong.excoin.modules.symbols.parameter.dto.KlineDetailDto; /** * @author wzy @@ -15,4 +16,6 @@ public Result findSymbolData(String symbol); + public Result findKlineDetails(KlineDetailDto klineDetailDto); + } diff --git a/src/main/java/com/xcong/excoin/modules/symbols/service/impl/SymbolsServiceImpl.java b/src/main/java/com/xcong/excoin/modules/symbols/service/impl/SymbolsServiceImpl.java index b6ba34e..bd78569 100644 --- a/src/main/java/com/xcong/excoin/modules/symbols/service/impl/SymbolsServiceImpl.java +++ b/src/main/java/com/xcong/excoin/modules/symbols/service/impl/SymbolsServiceImpl.java @@ -1,13 +1,17 @@ package com.xcong.excoin.modules.symbols.service.impl; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.huobi.client.model.Candlestick; import com.xcong.excoin.common.contants.AppContants; import com.xcong.excoin.common.enumerates.SymbolEnum; import com.xcong.excoin.common.response.Result; +import com.xcong.excoin.common.system.mapper.CandlestickMapper; import com.xcong.excoin.modules.platform.dao.PlatformCnyUsdtExchangeDao; import com.xcong.excoin.modules.platform.entity.PlatformCnyUsdtExchangeEntity; +import com.xcong.excoin.modules.symbols.parameter.dto.KlineDetailDto; import com.xcong.excoin.modules.symbols.parameter.vo.HomeSymbolsVo; +import com.xcong.excoin.modules.symbols.parameter.vo.KlineDataVo; import com.xcong.excoin.modules.symbols.service.SymbolsService; import com.xcong.excoin.utils.CoinTypeConvert; import com.xcong.excoin.utils.RedisUtils; @@ -143,4 +147,39 @@ return homeSymbolsVo; } + + @Override + public Result findKlineDetails(KlineDetailDto klineDetailDto) { + String key = "KINE_{}_{}"; + // 币币k线数据 + if (AppContants.HOME_SYMBOLS_COIN == klineDetailDto.getType()) { + key = StrUtil.format(key, klineDetailDto.getSymbol(), klineDetailDto.getPeriod()); + // 合约k线数据 + } else { + key = StrUtil.format(key, klineDetailDto.getSymbol(), klineDetailDto.getPeriod()); + } + + Object data = redisUtils.get(key); + if (data != null) { + List list = (List) data; + int length = 0; + // 默认获取k线900个柱状(超出会报错) + int size = 900; + + if (list.size() > size) { + length = size - 1; + } else { + length = list.size() - 1; + } + + List<KlineDataVo> result = new ArrayList<>(length); + for (int i = length; i > 0; i--) { + Candlestick object = (Candlestick) list.get(i); + KlineDataVo klineDataVo = CandlestickMapper.INSTANCE.toKlineDataVo(object); + result.add(klineDataVo); + } + return Result.ok(result); + } + return Result.fail("获取数据失败"); + } } diff --git a/src/main/java/com/xcong/excoin/quartz/job/UsdtCnyExchangePriceUpdateJob.java b/src/main/java/com/xcong/excoin/quartz/job/UsdtCnyExchangePriceUpdateJob.java index 840250b..6f87c46 100644 --- a/src/main/java/com/xcong/excoin/quartz/job/UsdtCnyExchangePriceUpdateJob.java +++ b/src/main/java/com/xcong/excoin/quartz/job/UsdtCnyExchangePriceUpdateJob.java @@ -2,6 +2,7 @@ import com.alibaba.fastjson.JSONObject; import com.xcong.excoin.modules.platform.dao.PlatformCnyUsdtExchangeDao; +import lombok.extern.slf4j.Slf4j; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -20,6 +21,7 @@ * @author wzy * @date 2020-05-28 **/ +@Slf4j @Component @ConditionalOnProperty(prefix = "app", name = "other-job", havingValue = "true") public class UsdtCnyExchangePriceUpdateJob { @@ -56,6 +58,9 @@ String code = jsonObject.getString("code"); if ("200".equals(code)) { JSONObject jsonData = (JSONObject) jsonObject.get("data"); + log.info("{}", jsonData); + log.info("{}", jsonData.getDouble("price")); + log.info("{}", jsonData.getString("price")); cnyUsdtExchangeDao.updateUsdt(BigDecimal.valueOf(jsonData.getDouble("price"))); } } catch (Exception e) { diff --git a/src/main/java/com/xcong/excoin/utils/TypeJudgeUtils.java b/src/main/java/com/xcong/excoin/utils/TypeJudgeUtils.java index a3b933d..c7f511a 100644 --- a/src/main/java/com/xcong/excoin/utils/TypeJudgeUtils.java +++ b/src/main/java/com/xcong/excoin/utils/TypeJudgeUtils.java @@ -25,4 +25,26 @@ return false; } } + + /** + * 判断k线区间 + * + * @param period + * @return + */ + public static boolean klinePeriod(String period) { + switch (period) { + case "1min": + case "5min": + case "30min": + case "60min": + case "4hour": + case "1day": + case "1week": + return true; + default: + return false; + } + + } } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 61560cd..794fdc7 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -96,9 +96,9 @@ # k线更新任务控制 kline-update-job: false #最新价任务控制 - newest-price-update-job: true + newest-price-update-job: false #其他任务控制 - other-job: true + other-job: false rsa: public_key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCCf8UFZK54AiK4PRu7tNd+Z8qZ77o/QXCnk25DRmygVpOEu5mGNSAvfnWmKp2pEV2RljeXq3Rid/+LQkonaebMJeXKSF0yxL/VgyeT8JaQ5gNbOrdfdlc+mFkXJyzyJt8YkvApEdPRNSU2ENBn7mgRfD0BYPM4vZ6/rv+de38FJwIDAQAB -- Gitblit v1.9.1