From 9d1a90e82afba77f14af37fe56bebdba5c17c89e Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Fri, 29 May 2020 15:40:26 +0800
Subject: [PATCH] Merge branch 'master' of https://gitee.com/chonggaoxiao/new_excoin.git

---
 src/main/java/com/xcong/excoin/common/system/service/impl/CommonServiceImpl.java    |   32 ++++++
 src/main/java/com/xcong/excoin/modules/symbols/parameter/vo/KlineDataVo.java        |   40 ++++++++
 src/main/java/com/xcong/excoin/common/system/controller/CommonController.java       |   39 ++++++-
 src/main/java/com/xcong/excoin/common/system/mapper/CandlestickMapper.java          |   21 ++++
 src/main/java/com/xcong/excoin/utils/TypeJudgeUtils.java                            |   22 ++++
 src/main/java/com/xcong/excoin/modules/symbols/parameter/dto/KlineDetailDto.java    |    8 -
 src/main/java/com/xcong/excoin/common/contants/AppContants.java                     |    5 +
 src/main/java/com/xcong/excoin/common/system/service/CommonService.java             |   11 ++
 src/main/java/com/xcong/excoin/modules/symbols/controller/SymbolsController.java    |   25 +++-
 src/main/java/com/xcong/excoin/modules/symbols/service/SymbolsService.java          |    3 
 src/main/java/com/xcong/excoin/modules/symbols/service/impl/SymbolsServiceImpl.java |   43 ++++++++
 src/main/java/com/xcong/excoin/quartz/job/UsdtCnyExchangePriceUpdateJob.java        |    5 +
 src/main/resources/application.yml                                                  |    4 
 13 files changed, 235 insertions(+), 23 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/common/contants/AppContants.java b/src/main/java/com/xcong/excoin/common/contants/AppContants.java
index 9619ae1..6ad7724 100644
--- a/src/main/java/com/xcong/excoin/common/contants/AppContants.java
+++ b/src/main/java/com/xcong/excoin/common/contants/AppContants.java
@@ -59,4 +59,9 @@
      */
     public static final int HOME_SYMBOLS_CONTRACT = 2;
 
+    /**
+     * 验证码前缀 手机
+     */
+    public static final String VERIFY_CODE_PREFIX = "CODE_SMS_";
+
 }
diff --git a/src/main/java/com/xcong/excoin/common/system/controller/CommonController.java b/src/main/java/com/xcong/excoin/common/system/controller/CommonController.java
index db35bd2..8ba477e 100644
--- a/src/main/java/com/xcong/excoin/common/system/controller/CommonController.java
+++ b/src/main/java/com/xcong/excoin/common/system/controller/CommonController.java
@@ -1,14 +1,19 @@
 package com.xcong.excoin.common.system.controller;
 
+import cn.hutool.core.util.StrUtil;
 import com.xcong.excoin.common.contants.AppContants;
 import com.xcong.excoin.common.response.Result;
+import com.xcong.excoin.common.system.service.CommonService;
 import com.xcong.excoin.utils.RedisUtils;
 import com.xcong.excoin.utils.SmsUtils;
+import com.xcong.excoin.utils.mail.SubMailSend;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
@@ -32,23 +37,38 @@
     @Resource
     private RedisUtils redisUtils;
 
+    @Resource
+    private CommonService commonservice;
+
     @ApiOperation(value = "获取验证码接口", notes = "获取验证码通用接口")
     @GetMapping(value = "/verifyCode")
-    public Result verifyCode(String account, String type) {
+    public Result verifyCode(@ApiParam(name = "account", value = "手机号或邮箱", required = true) @RequestParam(value = "account") String account,
+                             @ApiParam(name = "type", value = "类型1-手机号2-邮箱", required = true) @RequestParam("type") String type) {
         log.info("#账号:{}, 类型:{}#", account, type);
 
-        int code = (int) ((Math.random() * 9 + 1) * 100000);
+        Integer code = (int) ((Math.random() * 9 + 1) * 100000);
+        if (StrUtil.isNotBlank(redisUtils.getString(AppContants.VERIFY_CODE_PREFIX + account))) {
+            return Result.fail("验证码已发送,请勿重复发");
+        }
+
+        // 发送手机验证码
         if (AppContants.ACCOUNT_TYPE_MOBILE.equals(type)) {
             Map<String, Object> result = SmsUtils.sendVerifyCode(account, code);
-
             if (SUCCESS.equals(result.get("resultstatus"))) {
                 Map<String, Object> map = new HashMap<>();
-                boolean flag = redisUtils.set("SMS_" + account, code, 120);
+                boolean flag = redisUtils.set(AppContants.VERIFY_CODE_PREFIX + account, code, 120);
                 map.put("code", flag);
                 return Result.ok("success", map);
             }
+            // 发送邮件验证码
         } else if (AppContants.ACCOUNT_TYPE_EMAIL.equals(type)) {
-            return Result.ok("success");
+            boolean flag = SubMailSend.sendMail(account, code.toString());
+            if (flag) {
+                redisUtils.set(AppContants.VERIFY_CODE_PREFIX + account, code, 120);
+                return Result.ok("success");
+            } else {
+                return Result.fail("发送失败");
+            }
         } else {
             log.info("未定义账号类型");
             return Result.fail("fail");
@@ -58,8 +78,13 @@
 
     @ApiOperation(value = "验证验证码是否正确", notes = "验证验证码是否正确")
     @GetMapping(value = "/checkVerify")
-    public Result checkVerify() {
-        return null;
+    public Result checkVerify(@ApiParam(name = "account", value = "账号", required = true) @RequestParam("account") String account,
+                              @ApiParam(name = "code", value = "验证码", required = true) @RequestParam("code") String code) {
+        boolean flag = commonservice.verifyCode(account, code);
+        if (flag) {
+            return Result.ok("success");
+        }
+        return Result.fail("验证码错误");
     }
 
     @ApiOperation(value = "文件上次接口", notes = "文件上传")
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/common/system/service/CommonService.java b/src/main/java/com/xcong/excoin/common/system/service/CommonService.java
new file mode 100644
index 0000000..be1ed3f
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/common/system/service/CommonService.java
@@ -0,0 +1,11 @@
+package com.xcong.excoin.common.system.service;
+
+
+/**
+ * @author helius
+ */
+public interface CommonService {
+
+    public boolean verifyCode(String account, String code);
+
+}
diff --git a/src/main/java/com/xcong/excoin/common/system/service/impl/CommonServiceImpl.java b/src/main/java/com/xcong/excoin/common/system/service/impl/CommonServiceImpl.java
new file mode 100644
index 0000000..aad0d55
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/common/system/service/impl/CommonServiceImpl.java
@@ -0,0 +1,32 @@
+package com.xcong.excoin.common.system.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.xcong.excoin.common.contants.AppContants;
+import com.xcong.excoin.common.system.service.CommonService;
+import com.xcong.excoin.utils.RedisUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * @author wzy
+ * @date 2020-05-29
+ **/
+@Slf4j
+@Service
+public class CommonServiceImpl implements CommonService {
+
+    @Resource
+    private RedisUtils redisUtils;
+
+    @Override
+    public boolean verifyCode(String account, String code) {
+        String cacheCode = redisUtils.getString(AppContants.VERIFY_CODE_PREFIX + account);
+        if (StrUtil.isBlank(cacheCode)) {
+            return false;
+        }
+
+        return code.equals(cacheCode);
+    }
+}
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..e8505e9 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,33 @@
     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) {
+    public Result homeSymbols(@ApiParam(name = "type", value = "类型1-币币2-合约3-自选", required = true, example = "1") @RequestParam(value = "type") 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") @RequestParam(value = "symbol") 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..aec29a5 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;
@@ -99,12 +103,12 @@
         // 币币行情
         if (AppContants.HOME_SYMBOLS_COIN == type) {
             for (SymbolEnum symbolEnum : SymbolEnum.values()) {
-                list.add(getSymbolReturnData(symbolEnum.getName()));
+                list.add(getSymbolReturnData(symbolEnum.getValue()));
             }
             // 合约行情
         } else if (AppContants.HOME_SYMBOLS_CONTRACT == type) {
             for (SymbolEnum symbolEnum : SymbolEnum.values()) {
-                list.add(getSymbolReturnData(symbolEnum.getName()));
+                list.add(getSymbolReturnData(symbolEnum.getValue()));
             }
             // 自选行情
         } else {
@@ -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