Helius
2020-05-29 9a9b3bd2c07d177807dfde1b1796cddc1ac410a4
finish kline detail interface
2 files added
7 files modified
166 ■■■■■ changed files
src/main/java/com/xcong/excoin/common/system/mapper/CandlestickMapper.java 21 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/symbols/controller/SymbolsController.java 24 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/symbols/parameter/dto/KlineDetailDto.java 8 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/symbols/parameter/vo/KlineDataVo.java 40 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/symbols/service/SymbolsService.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/symbols/service/impl/SymbolsServiceImpl.java 39 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/quartz/job/UsdtCnyExchangePriceUpdateJob.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/utils/TypeJudgeUtils.java 22 ●●●●● patch | view | raw | blame | history
src/main/resources/application.yml 4 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/common/system/mapper/CandlestickMapper.java
New file
@@ -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);
}
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);
    }
}
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;
}
src/main/java/com/xcong/excoin/modules/symbols/parameter/vo/KlineDataVo.java
New file
@@ -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;
}
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);
}
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("获取数据失败");
    }
}
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) {
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;
        }
    }
}
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