diff --git a/deploy.bat b/deploy.bat new file mode 100644 index 0000000..0db5f10 --- /dev/null +++ b/deploy.bat @@ -0,0 +1,41 @@ +@echo off + +:: 1. 设置动态参数 +set REMOTE_IP=8.138.144.54 +set REMOTE_PORT=22 +set REMOTE_PATH=/root +set REMOTE_USER=root +set START_SCRIPT=/root/start_diagnose.sh + +:: 2. 运行 Maven 打包 +echo Running mvn clean package... +:: call mvn clean package -P thin-jar +call mvn clean package + +:: 检查是否打包成功 +IF %ERRORLEVEL% NEQ 0 ( + echo Maven build failed, exiting... + exit /b %ERRORLEVEL% +) + +:: 3. 将 JAR 包传输到 Linux 服务器 +echo Copying JAR file to Linux server... +call scp -P %REMOTE_PORT% target\DiagnoseApiServer-2.6.7.jar %REMOTE_USER%@%REMOTE_IP%:%REMOTE_PATH% + +:: 检查 SCP 命令是否成功 +IF %ERRORLEVEL% NEQ 0 ( + echo File transfer failed, exiting... + exit /b %ERRORLEVEL% +) + +:: 4. 通过 SSH 运行 start.sh 脚本 +echo Running start_diagnose.sh script on Linux server... +call ssh -p %REMOTE_PORT% %REMOTE_USER%@%REMOTE_IP% "bash %START_SCRIPT%" + +:: 检查 SSH 命令是否成功 +IF %ERRORLEVEL% NEQ 0 ( + echo Failed to start the application, exiting... + exit /b %ERRORLEVEL% +) + +echo Deployment successful! \ No newline at end of file diff --git a/deploy_prod.bat b/deploy_prod.bat new file mode 100644 index 0000000..fe2fe82 --- /dev/null +++ b/deploy_prod.bat @@ -0,0 +1,41 @@ +@echo off + +:: 1. 设置动态参数 +set REMOTE_IP=119.29.151.152 +set REMOTE_PORT=22101 +set REMOTE_PATH=/tmp +set REMOTE_USER=ubuntu +set DEPLOY_SCRIPT=/home/ubuntu/deploy_diagnose.sh + +:: 2. 运行 Maven 打包 +echo Running mvn clean package... +:: call mvn clean package -P thin-jar +call mvn clean package + +:: 检查是否打包成功 +IF %ERRORLEVEL% NEQ 0 ( + echo Maven build failed, exiting... + exit /b %ERRORLEVEL% +) + +:: 3. 将 JAR 包传输到 Linux 服务器 +echo Copying JAR file to Linux server... +call scp -P %REMOTE_PORT% target\DiagnoseApiServer-2.6.7.jar %REMOTE_USER%@%REMOTE_IP%:%REMOTE_PATH% + +:: 检查 SCP 命令是否成功 +IF %ERRORLEVEL% NEQ 0 ( + echo File transfer failed, exiting... + exit /b %ERRORLEVEL% +) + +:: 4. 通过 SSH 运行 deploy.sh 脚本 +echo Running deploy_diagnose.sh script on Linux server... +call ssh -p %REMOTE_PORT% %REMOTE_USER%@%REMOTE_IP% "bash %DEPLOY_SCRIPT%" + +:: 检查 SSH 命令是否成功 +IF %ERRORLEVEL% NEQ 0 ( + echo Failed to start the application, exiting... + exit /b %ERRORLEVEL% +) + +echo Deployment successful! \ No newline at end of file diff --git a/deploy_prod_without_package.bat b/deploy_prod_without_package.bat new file mode 100644 index 0000000..e0cb990 --- /dev/null +++ b/deploy_prod_without_package.bat @@ -0,0 +1,30 @@ +@echo off + +:: 1. 设置动态参数 +set REMOTE_IP=119.29.151.152 +set REMOTE_PORT=22101 +set REMOTE_PATH=/tmp +set REMOTE_USER=ubuntu +set DEPLOY_SCRIPT=/home/ubuntu/deploy_diagnose.sh + +:: 2. 将 JAR 包传输到 Linux 服务器 +echo Copying JAR file to Linux server... +call scp -P %REMOTE_PORT% target\DiagnoseApiServer-2.6.7.jar %REMOTE_USER%@%REMOTE_IP%:%REMOTE_PATH% + +:: 检查 SCP 命令是否成功 +IF %ERRORLEVEL% NEQ 0 ( + echo File transfer failed, exiting... + exit /b %ERRORLEVEL% +) + +:: 3. 通过 SSH 运行 deploy.sh 脚本 +echo Running deploy_diagnose.sh script on Linux server... +call ssh -p %REMOTE_PORT% %REMOTE_USER%@%REMOTE_IP% "bash %DEPLOY_SCRIPT%" + +:: 检查 SSH 命令是否成功 +IF %ERRORLEVEL% NEQ 0 ( + echo Failed to start the application, exiting... + exit /b %ERRORLEVEL% +) + +echo Deployment successful! \ No newline at end of file diff --git a/src/main/java/com/diagnose/common/config/ScheduleConfig.java b/src/main/java/com/diagnose/common/config/ScheduleConfig.java index 7750d54..257eeee 100644 --- a/src/main/java/com/diagnose/common/config/ScheduleConfig.java +++ b/src/main/java/com/diagnose/common/config/ScheduleConfig.java @@ -16,7 +16,7 @@ public class ScheduleConfig implements SchedulingConfigurer { @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { // 开启定时任务多线程,防止默认单线程阻塞问题,超过核心线程数后,还是会阻塞 - taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10)); + taskRegistrar.setScheduler(Executors.newScheduledThreadPool(16)); } } diff --git a/src/main/java/com/diagnose/constant/ELineType.java b/src/main/java/com/diagnose/constant/ELineType.java new file mode 100644 index 0000000..74842a6 --- /dev/null +++ b/src/main/java/com/diagnose/constant/ELineType.java @@ -0,0 +1,37 @@ +package com.diagnose.constant; + +public enum ELineType { + + HDT_DAY_KLINE(0), + HDT_MIN1_KLINE(1), + HDT_MIN5_KLINE(2), + HDT_MIN15_KLINE(3), + HDT_MIN30_KLINE(4), + HDT_MIN60_KLINE(5), + HDT_RTMIN(6), + HDT_WEEK_KLINE(7), + HDT_MONTH_KLINE(8), + HDT_SEASON_KLINE(9), + HDT_YEAR_KLINE(10), + HDT_DAY_MONEYFLOW(11), + HDT_TICK(12), + HDT_WEEK_MONEYFLOW(13), + HDT_MONTH_MONEYFLOW(14), + HDT_SEASON_MONEYFLOW(15), + HDT_YEAR_MONEYFLOW(16), + HDT_FLOW_MIN1(17), + HDT_FLOW_MIN5(18), + HDT_FLOW_MIN15(19), + HDT_FLOW_MIN30(20), + HDT_FLOW_MIN60(21), + HDT_MIN120_KLINE(22), + HDT_FLOW_MIN120(23); + ; + + public final int value; + + ELineType(int value) { + this.value = value; + } + +} diff --git a/src/main/java/com/diagnose/controller/DiagnoseController.java b/src/main/java/com/diagnose/controller/DiagnoseController.java index dd89729..7bf2539 100644 --- a/src/main/java/com/diagnose/controller/DiagnoseController.java +++ b/src/main/java/com/diagnose/controller/DiagnoseController.java @@ -31,58 +31,65 @@ public class DiagnoseController { @ApiOperation("综合搜索") @GetMapping("/diagnose/search") - public CommonResult> search(@RequestParam("关键词") @Validated @NotBlank @ApiParam(required = true) String keyword) { + public CommonResult> search(@RequestParam("keyword") @Validated @NotBlank @ApiParam(required = true, value = "关键词") String keyword) { List list = searchService.search(keyword); return CommonResult.success(list); } + @ApiOperation("聚合数据") + @GetMapping("/diagnose/union") + public CommonResult union(@RequestParam("stkUniCode") @Validated @NotNull @ApiParam(required = true, value = "证券统一编码") Long stkUniCode) { + UnionVO vo = stockService.unionWithCache(stkUniCode); + return CommonResult.success(vo); + } + @ApiOperation("综合评分") @GetMapping("/diagnose/comprehensiveEvaluation") - public CommonResult comprehensiveEvaluation(@RequestParam("证券统一编码") @Validated @NotNull @ApiParam(required = true) Long stkUniCode) { + public CommonResult comprehensiveEvaluation(@RequestParam("stkUniCode") @Validated @NotNull @ApiParam(required = true, value = "证券统一编码") Long stkUniCode) { ComprehensiveEvaluationVO vo = stockService.comprehensiveEvaluation(stkUniCode); return CommonResult.success(vo); } @ApiOperation("财务估值") @GetMapping("/diagnose/financialValuation") - public CommonResult financialValuation(@RequestParam("证券统一编码") @Validated @NotNull @ApiParam(required = true) Long stkUniCode) { + public CommonResult financialValuation(@RequestParam("stkUniCode") @Validated @NotNull @ApiParam(required = true, value = "证券统一编码") Long stkUniCode) { FinancialValuationVO vo = stockService.financialValuation(stkUniCode); return CommonResult.success(vo); } @ApiOperation("财务估值-更多") @GetMapping("/diagnose/financialValuationExtend") - public CommonResult financialValuationExtend(@RequestParam("证券统一编码") @Validated @NotNull @ApiParam(required = true) Long stkUniCode) { + public CommonResult financialValuationExtend(@RequestParam("stkUniCode") @Validated @NotNull @ApiParam(required = true, value = "证券统一编码") Long stkUniCode) { FinancialValuationExtendVO vo = stockService.financialValuationExtend(stkUniCode); return CommonResult.success(vo); } @ApiOperation("财务估值-估值分析") @GetMapping("/diagnose/financialValuationAnalysis") - public CommonResult> financialValuationAnalysis(@RequestParam("证券统一编码") @Validated @NotNull @ApiParam(required = true) Long stkUniCode, - @RequestParam("周期 1、3、5、10年") @Validated @NotNull @Min(1) @Max(10) @ApiParam(required = true) Integer timeSpan, - @RequestParam("类型 2:市盈率 3:市净率") @Validated @NotNull @Min(2) @Max(3) @ApiParam(required = true) Integer type) { + public CommonResult> financialValuationAnalysis(@RequestParam("stkUniCode") @Validated @NotNull @ApiParam(required = true, value = "证券统一编码") Long stkUniCode, + @RequestParam("timeSpan") @Validated @NotNull @Min(1) @Max(10) @ApiParam(required = true, value = "周期 1、3、5、10年") Integer timeSpan, + @RequestParam("type") @Validated @NotNull @Min(2) @Max(3) @ApiParam(required = true, value = "类型 2:市盈率 3:市净率") Integer type) { List list = stockService.financialValuationAnalysis(stkUniCode, timeSpan, type); return CommonResult.success(list); } @ApiOperation("量化分析") @GetMapping("/diagnose/quantitativeAnalysis") - public CommonResult quantitativeAnalysis(@RequestParam("证券统一编码") @Validated @NotNull @ApiParam(required = true) Long stkUniCode) { + public CommonResult quantitativeAnalysis(@RequestParam("stkUniCode") @Validated @NotNull @ApiParam(required = true, value = "证券统一编码") Long stkUniCode) { QuantitativeAnalysisVO vo = stockService.quantitativeAnalysis(stkUniCode); return CommonResult.success(vo); } @ApiOperation("市场热度") @GetMapping("/diagnose/marketSentiment") - public CommonResult marketSentiment(@RequestParam("证券统一编码") @Validated @NotNull @ApiParam(required = true) Long stkUniCode) { + public CommonResult marketSentiment(@RequestParam("stkUniCode") @Validated @NotNull @ApiParam(required = true, value = "证券统一编码") Long stkUniCode) { MarketSentimentVO vo = stockService.marketSentiment(stkUniCode); return CommonResult.success(vo); } @ApiOperation("主力动向") @GetMapping("/diagnose/institutionalActivity") - public CommonResult institutionalActivity(@RequestParam("证券统一编码") @Validated @NotNull @ApiParam(required = true) Long stkUniCode) { + public CommonResult institutionalActivity(@RequestParam("stkUniCode") @Validated @NotNull @ApiParam(required = true, value = "证券统一编码") Long stkUniCode) { InstitutionalActivityVO vo = stockService.institutionalActivity(stkUniCode); return CommonResult.success(vo); } diff --git a/src/main/java/com/diagnose/mapper/DiagnoseMapper.java b/src/main/java/com/diagnose/mapper/DiagnoseMapper.java index 5d0c49a..d145057 100644 --- a/src/main/java/com/diagnose/mapper/DiagnoseMapper.java +++ b/src/main/java/com/diagnose/mapper/DiagnoseMapper.java @@ -50,7 +50,7 @@ public interface DiagnoseMapper extends BaseMapper { List selectDiagnoseValuation(@Param("stkUniCode") Long stkUniCode); @Select("SELECT * FROM (" + - " SELECT tech_sum_mac, stk_spt_lvl, stk_prs_lvl, ROW_NUMBER() OVER (PARTITION BY stk_code, mkt_num ORDER BY trd_date DESC) AS rn\n" + + " SELECT tech_sum_mac, stk_spt_lvl, stk_prs_lvl, score, ROW_NUMBER() OVER (PARTITION BY stk_code, mkt_num ORDER BY trd_date DESC) AS rn\n" + " FROM vol_pri_fac\n" + " WHERE stk_code = #{stkCode} AND mkt_num = #{mktNum}\n" + ") t WHERE t.rn = 1") diff --git a/src/main/java/com/diagnose/mapper/FinanceMapper.java b/src/main/java/com/diagnose/mapper/FinanceMapper.java index 584420a..4816f81 100644 --- a/src/main/java/com/diagnose/mapper/FinanceMapper.java +++ b/src/main/java/com/diagnose/mapper/FinanceMapper.java @@ -13,7 +13,7 @@ import java.util.List; public interface FinanceMapper extends BaseMapper { @Select("SELECT * FROM (" + - " SELECT fin_sum_mac, score, ROW_NUMBER() OVER (PARTITION BY stk_code, mkt_num ORDER BY trd_date DESC) AS rn\n" + + " SELECT fin_sum_mac, score, prf_abli_mac, grw_abli_mac, ass_quali_mac, solv_marg_mac, cash_flow_mac, ROW_NUMBER() OVER (PARTITION BY stk_code, mkt_num ORDER BY trd_date DESC) AS rn\n" + " FROM fin_val_fac\n" + " WHERE stk_code = #{stkCode} AND mkt_num = #{mktNum}\n" + ") t WHERE t.rn = 1") diff --git a/src/main/java/com/diagnose/mapper/StockMapper.java b/src/main/java/com/diagnose/mapper/StockMapper.java index c63d784..004d2d5 100644 --- a/src/main/java/com/diagnose/mapper/StockMapper.java +++ b/src/main/java/com/diagnose/mapper/StockMapper.java @@ -24,14 +24,15 @@ public interface StockMapper extends BaseMapper { "WHERE sc.sec_type_par = 1 AND sc.sec_small_type_par = 101 AND sc.list_status_par = 7 AND sc.isvalid = 1") List selectAllStock(); - @Select("SELECT * FROM (\n" + - " SELECT end_date, close_price, stk_per_ttm, price_bookv_ratio, row_number() OVER (PARTITION BY stk_uni_code ORDER BY end_date DESC) AS rn\n" + - " FROM ${tableName}\n" + - " WHERE stk_uni_code = #{stkUniCode} AND isvalid = 1\n" + - ") t WHERE t.rn = 1") + @Select("SELECT end_date, close_price, stk_per_ttm, price_bookv_ratio\n" + + "FROM ${tableName}\n" + + "WHERE stk_uni_code = #{stkUniCode} AND end_date = (\n" + + " SELECT MAX(end_date)\n" + + " FROM ${tableName}\n" + + " WHERE stk_uni_code = #{stkUniCode} AND isvalid = 1)") StockPriceVO selectLatestPrice(@Param("tableName") String tableName, @Param("stkUniCode") Long stkUniCode); - @Select("SELECT s.end_date, s.${stockValueColumn} AS stock_value, p.avg_1 AS plate_value\n" + + @Select("SELECT s.end_date as date, s.${stockValueColumn} AS stock_value, p.avg_1 AS plate_value\n" + "FROM ${tableName} s\n" + "JOIN plate_val_info p\n" + "ON s.end_date = p.end_date\n" + @@ -50,7 +51,7 @@ public interface StockMapper extends BaseMapper { @Param("year") Integer year, @Param("type") Integer type); - @Select("SELECT s.trade_date, s.open_price, s.close_price, s.high_price, s.low_price\n" + + @Select("SELECT s.trade_date AS date, s.open_price AS open, s.close_price AS close, s.high_price AS high, s.low_price AS low\n" + "FROM ${tableName} s\n" + "WHERE s.stk_uni_code = #{stkUniCode}\n" + " AND s.trade_date >= DATE_SUB(CURDATE(), INTERVAL #{month} MONTH)\n" + @@ -75,7 +76,7 @@ public interface StockMapper extends BaseMapper { List selectInstitutionalFundFlow(@Param("tableName") String tableName, @Param("stkUniCode") Long stkUniCode, @Param("stkCode") String stkCode, @Param("secMarPar") Integer secMarPar); @Select("SELECT * FROM (" + - " SELECT tot_hld_num, avg_share, ROW_NUMBER() OVER (PARTITION BY stk_code, sec_mar_par ORDER BY end_date DESC) AS rn\n" + + " SELECT tot_hld_num, avg_share, end_date, ROW_NUMBER() OVER (PARTITION BY stk_code, sec_mar_par ORDER BY end_date DESC) AS rn\n" + " FROM com_hld_tot\n" + " WHERE stk_code = #{stkCode} AND sec_mar_par = #{secMarPar}\n" + ") t WHERE t.rn <= 5") diff --git a/src/main/java/com/diagnose/query/KLineDataQuery.java b/src/main/java/com/diagnose/query/KLineDataQuery.java new file mode 100644 index 0000000..05aa67c --- /dev/null +++ b/src/main/java/com/diagnose/query/KLineDataQuery.java @@ -0,0 +1,35 @@ +package com.diagnose.query; + +import com.diagnose.constant.ELineType; +import com.diagnose.service.MarketService; + +import java.time.LocalDate; + +public class KLineDataQuery { + + private KLineQuery stReq; + + public KLineDataQuery(KLineQuery kLineQuery) { + this.stReq = kLineQuery; + } + + public KLineDataQuery(Integer market, String sCode, ELineType eLineType, LocalDate startDate, Integer number) { + if (startDate == null) { + this.stReq = new KLineQuery(market, sCode, eLineType.value, number); + } else { + this.stReq = new KLineQuery(market, sCode, eLineType.value, MarketService.dateToLong(startDate), number); + } + } + + public KLineDataQuery(Integer market, String sCode, ELineType eLineType, Integer number) { + this.stReq = new KLineQuery(market, sCode, eLineType.value, number); + } + + public KLineQuery getStReq() { + return stReq; + } + + public void setStReq(KLineQuery stReq) { + this.stReq = stReq; + } +} diff --git a/src/main/java/com/diagnose/query/KLineQuery.java b/src/main/java/com/diagnose/query/KLineQuery.java new file mode 100644 index 0000000..c735ee9 --- /dev/null +++ b/src/main/java/com/diagnose/query/KLineQuery.java @@ -0,0 +1,71 @@ +package com.diagnose.query; + +public class KLineQuery { + + private Integer market; + + private String sCode; + + private Integer eLineType; + + private Long lDate; + + private Integer shtStartxh; + + private Integer shtWantNum; + + public KLineQuery(Integer market, String sCode, Integer eLineType, Long lDate, Integer shtWantNum) { + this.market = market; + this.sCode = sCode; + this.eLineType = eLineType; + this.lDate = lDate; + this.shtWantNum = shtWantNum; + } + + public KLineQuery(Integer market, String sCode, Integer eLineType, Integer shtWantNum) { + this.market = market; + this.sCode = sCode; + this.eLineType = eLineType; + this.shtWantNum = shtWantNum; + } + + public Integer getMarket() { + return market; + } + + public void setMarket(Integer market) { + this.market = market; + } + + public String getsCode() { + return sCode; + } + + public void setsCode(String sCode) { + this.sCode = sCode; + } + + public Integer geteLineType() { + return eLineType; + } + + public void seteLineType(Integer eLineType) { + this.eLineType = eLineType; + } + + public Integer getShtStartxh() { + return shtStartxh; + } + + public void setShtStartxh(Integer shtStartxh) { + this.shtStartxh = shtStartxh; + } + + public Integer getShtWantNum() { + return shtWantNum; + } + + public void setShtWantNum(Integer shtWantNum) { + this.shtWantNum = shtWantNum; + } +} diff --git a/src/main/java/com/diagnose/query/StockHqSimpleQuery.java b/src/main/java/com/diagnose/query/StockHqSimpleQuery.java new file mode 100644 index 0000000..e940732 --- /dev/null +++ b/src/main/java/com/diagnose/query/StockHqSimpleQuery.java @@ -0,0 +1,24 @@ +package com.diagnose.query; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class StockHqSimpleQuery { + + private StockListQuery stReq; + + public StockHqSimpleQuery(Integer shtSetcode, String sCode) { + List vStock = Collections.singletonList(new StockQuery(shtSetcode, sCode)); + this.stReq = new StockListQuery(vStock); + } + + public StockListQuery getStReq() { + return stReq; + } + + public void setStReq(StockListQuery stReq) { + this.stReq = stReq; + } + +} diff --git a/src/main/java/com/diagnose/query/StockListQuery.java b/src/main/java/com/diagnose/query/StockListQuery.java new file mode 100644 index 0000000..dae025c --- /dev/null +++ b/src/main/java/com/diagnose/query/StockListQuery.java @@ -0,0 +1,24 @@ +package com.diagnose.query; + +import java.util.List; + +public class StockListQuery { + + private List vStock; + + public StockListQuery() { + } + + public StockListQuery(List vStock) { + this.vStock = vStock; + } + + public List getvStock() { + return vStock; + } + + public void setvStock(List vStock) { + this.vStock = vStock; + } + +} diff --git a/src/main/java/com/diagnose/query/StockQuery.java b/src/main/java/com/diagnose/query/StockQuery.java new file mode 100644 index 0000000..554bb1a --- /dev/null +++ b/src/main/java/com/diagnose/query/StockQuery.java @@ -0,0 +1,33 @@ +package com.diagnose.query; + +public class StockQuery { + + private Integer shtSetcode; + + private String sCode; + + public StockQuery() { + } + + public StockQuery(Integer shtSeccode, String sCode) { + this.shtSetcode = shtSeccode; + this.sCode = sCode; + } + + public Integer getShtSetcode() { + return shtSetcode; + } + + public void setShtSetcode(Integer shtSetcode) { + this.shtSetcode = shtSetcode; + } + + public String getsCode() { + return sCode; + } + + public void setsCode(String sCode) { + this.sCode = sCode; + } + +} diff --git a/src/main/java/com/diagnose/service/MarketService.java b/src/main/java/com/diagnose/service/MarketService.java new file mode 100644 index 0000000..bb57ef8 --- /dev/null +++ b/src/main/java/com/diagnose/service/MarketService.java @@ -0,0 +1,105 @@ +package com.diagnose.service; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.http.HttpRequest; +import cn.hutool.json.JSONUtil; +import com.diagnose.common.handler.BizException; +import com.diagnose.common.result.ResponseStatus; +import com.diagnose.common.util.logger.LoggerUtil; +import com.diagnose.constant.ELineType; +import com.diagnose.query.KLineDataQuery; +import com.diagnose.query.StockHqSimpleQuery; +import com.diagnose.vo.KLineVO; +import com.diagnose.vo.market.KLineDataResponseVO; +import com.diagnose.vo.market.KLineDataVO; +import com.diagnose.vo.market.StockHqSimpleResponseVO; +import com.diagnose.vo.market.StockHqSimpleVO; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.util.Collections; +import java.util.List; + +@Service +public class MarketService { + + @Value("${business.api.host}") + private String host = "http://wup.cnsoft.sztg.com/json"; + + @Value("${business.api.url.stockHqSimple}") + private String stockHqSimple = "/hs_server/stockHqSimple"; + + @Value("${business.api.url.kLineData}") + private String kLineData = "/hs_server/kLineData"; + + @Value("${business.api.timeout}") + private int timeout = 10000; + + public StockHqSimpleVO stockHqSimple(Integer shtSetcode, String sCode) { + StockHqSimpleResponseVO responseVO = post(stockHqSimple, new StockHqSimpleQuery(shtSetcode, sCode), StockHqSimpleResponseVO.class); + if (responseVO == null || responseVO.getStRsp() == null || CollUtil.isEmpty(responseVO.getStRsp().getvData())) { + return null; + } + return responseVO.getStRsp().getvData().get(0); + } + + /** + * 指定日期向后取{"stReq":{"market":0,"sCode":"000002","eLineType":0,"lDate":202503010000,"shtWantNum":10}} + * 指定日期向前取{"stReq":{"market":0,"sCode":"000002","eLineType":0,"lDate":202503010000,"shtWantNum":-10}} + * 当前日期向前取{"stReq":{"market":0,"sCode":"000002","eLineType":0,"shtWantNum":10}} + */ + public List kLineData(Integer market, String sCode, ELineType eLineType, LocalDate startDate, Integer number) { + KLineDataQuery kLineDataQuery = new KLineDataQuery(market, sCode, eLineType, startDate, number); + KLineDataResponseVO kLineDataResponseVO = post(kLineData, kLineDataQuery, KLineDataResponseVO.class); + if (kLineDataResponseVO == null || kLineDataResponseVO.getStRsp() == null || CollUtil.isEmpty(kLineDataResponseVO.getStRsp().getvAnalyData())) { + return Collections.emptyList(); + } + for (KLineDataVO kLineVO : kLineDataResponseVO.getStRsp().getvAnalyData()) { + if (kLineVO.getSttDateTime() != null && kLineVO.getSttDateTime().getiDate() != 0) { + kLineVO.setTradeDate(intToDate(kLineVO.getSttDateTime().getiDate())); + } + } + System.out.println(JSONUtil.toJsonStr(kLineDataResponseVO.getStRsp().getvAnalyData())); + return kLineDataResponseVO.getStRsp().getvAnalyData(); + } + + public List kLineData(Integer market, String sCode, ELineType eLineType, Integer number) { + return kLineData(market, sCode, eLineType, null, number); + } + + private T post(String url, Object query, Class type) { + T vo; + try { + String body = JSONUtil.toJsonStr(query); + LoggerUtil.api.info("url:" + url + ",body:" + body); + String response = HttpRequest.post(host + url) + .body(body, "application/json") + .timeout(timeout)//超时,毫秒 + .execute().body(); + LoggerUtil.api.info("response:" + response); + vo = JSONUtil.toBean(response, type); + LoggerUtil.api.info("vo:" + JSONUtil.toJsonStr(vo)); + return vo; + } catch (BizException e) { + throw e; + } catch (Exception e) { + throw new BizException(ResponseStatus.OUTSYS_ERROR, e); + } + } + + public static long dateToLong(LocalDate date) { + return date.getYear() * 1000000 + date.getMonthValue() * 10000 + date.getDayOfMonth() * 100; + } + + public static LocalDate intToDate(int date) { + return LocalDate.of(date / 10000, date % 10000 / 100, date % 100); + } + +// public static void main(String[] args) { +// MarketService marketService = new MarketService(); +// marketService.stockHqSimple(1, "600000"); +// marketService.kLineData(0, "000002", ELineType.HDT_DAY_KLINE, LocalDate.now().plusDays(-10), 10); +// marketService.kLineData(0, "000002", ELineType.HDT_DAY_KLINE, 10); +// } +} diff --git a/src/main/java/com/diagnose/service/SearchService.java b/src/main/java/com/diagnose/service/SearchService.java index 19ea195..73473ff 100644 --- a/src/main/java/com/diagnose/service/SearchService.java +++ b/src/main/java/com/diagnose/service/SearchService.java @@ -2,9 +2,11 @@ package com.diagnose.service; import cn.hutool.core.lang.Validator; import com.diagnose.vo.StockVO; +import com.diagnose.vo.UnionVO; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import javax.validation.constraints.NotNull; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; diff --git a/src/main/java/com/diagnose/service/StockService.java b/src/main/java/com/diagnose/service/StockService.java index 8072401..3a5422f 100644 --- a/src/main/java/com/diagnose/service/StockService.java +++ b/src/main/java/com/diagnose/service/StockService.java @@ -1,18 +1,30 @@ package com.diagnose.service; import com.diagnose.common.handler.BizException; +import com.diagnose.common.result.CommonResult; import com.diagnose.common.result.ResponseStatus; import com.diagnose.mapper.DiagnoseMapper; import com.diagnose.mapper.FinanceMapper; import com.diagnose.mapper.StockMapper; import com.diagnose.vo.*; +import com.diagnose.vo.market.StockHqSimpleVO; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import javax.validation.constraints.Max; +import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import java.math.BigDecimal; +import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; +import java.util.concurrent.TimeUnit; import java.util.function.Function; import java.util.stream.Collectors; @@ -38,6 +50,21 @@ public class StockService { @Resource private DiagnoseMapper diagnoseMapper; + @Resource + private MarketService marketService; + + @Resource + private Executor taskExecutor; + + private static final Integer defaultTimeSpan = 3; + + private static final Integer defaultType = 2; + + private static Cache cache = CacheBuilder.newBuilder() + .maximumSize(6000) + .expireAfterWrite(1, TimeUnit.HOURS) + .build(); + public List selectAllStock() { return stockMapper.selectAllStock(); } @@ -79,6 +106,7 @@ public class StockService { } ComprehensiveEvaluationVO vo = new ComprehensiveEvaluationVO(); vo.setStock(stock); + // 得分排名 DiagnoseRankVO diagnoseRankVO = rank(stock); if (diagnoseRankVO == null) { return null; @@ -88,8 +116,14 @@ public class StockService { if (star == null) { return vo; } + // 回测 List backTestList = diagnoseMapper.selectBackTest(star); vo.setBackTestList(backTestList); + // 行情 + Integer mktNum = stock.getMktNum(); + String secCode = stock.getSecCode(); + StockHqSimpleVO stockHq = marketService.stockHqSimple(mktNum, secCode); + vo.setStockHq(stockHq); return vo; } @@ -191,7 +225,7 @@ public class StockService { } // 市场热度 - public MarketSentimentVO marketSentiment(@NotNull Long stkUniCode) { + public MarketSentimentVO marketSentiment(Long stkUniCode) { StockVO stock = getStock(stkUniCode); if (stock == null) { return null; @@ -243,4 +277,49 @@ public class StockService { vo.setShareholderList(shareholderList); return vo; } + + public UnionVO union(Long stkUniCode) { + // 综合评分 + CompletableFuture comprehensiveEvaluationFuture = + CompletableFuture.supplyAsync(() -> comprehensiveEvaluation(stkUniCode), taskExecutor); + // 财务估值 + CompletableFuture financialValuationFuture = + CompletableFuture.supplyAsync(() -> financialValuation(stkUniCode), taskExecutor); + // 财务估值-更多 + CompletableFuture financialValuationExtendFuture = + CompletableFuture.supplyAsync(() -> financialValuationExtend(stkUniCode), taskExecutor); + // 财务估值-估值分析 + CompletableFuture> financialValuationAnalysisFuture = + CompletableFuture.supplyAsync(() -> financialValuationAnalysis(stkUniCode, defaultTimeSpan, defaultType), taskExecutor); + // 量化分析 + CompletableFuture quantitativeAnalysisFuture = + CompletableFuture.supplyAsync(() -> quantitativeAnalysis(stkUniCode), taskExecutor); + // 市场热度 + CompletableFuture marketSentimentFuture = + CompletableFuture.supplyAsync(() -> marketSentiment(stkUniCode), taskExecutor); + // 主力动向 + CompletableFuture institutionalActivityFuture = + CompletableFuture.supplyAsync(() -> institutionalActivity(stkUniCode), taskExecutor); + + CompletableFuture allFutures = CompletableFuture.allOf(comprehensiveEvaluationFuture, + financialValuationFuture, financialValuationExtendFuture, financialValuationAnalysisFuture, + quantitativeAnalysisFuture, marketSentimentFuture, institutionalActivityFuture); + + try { + allFutures.get(); + UnionVO vo = new UnionVO(comprehensiveEvaluationFuture.get(), financialValuationFuture.get(), financialValuationExtendFuture.get(), + financialValuationAnalysisFuture.get(), quantitativeAnalysisFuture.get(), marketSentimentFuture.get(), institutionalActivityFuture.get()); + return vo; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public UnionVO unionWithCache(Long stkUniCode) { + try { + return cache.get(stkUniCode, () -> union(stkUniCode)); + } catch (Exception e) { + throw new RuntimeException(e); + } + } } diff --git a/src/main/java/com/diagnose/vo/ComprehensiveEvaluationVO.java b/src/main/java/com/diagnose/vo/ComprehensiveEvaluationVO.java index 3daca45..eda0876 100644 --- a/src/main/java/com/diagnose/vo/ComprehensiveEvaluationVO.java +++ b/src/main/java/com/diagnose/vo/ComprehensiveEvaluationVO.java @@ -1,5 +1,6 @@ package com.diagnose.vo; +import com.diagnose.vo.market.StockHqSimpleVO; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -12,6 +13,9 @@ public class ComprehensiveEvaluationVO implements Serializable { @ApiModelProperty("股票基本信息") private StockVO stock; + @ApiModelProperty("实时行情") + private StockHqSimpleVO stockHq; + @ApiModelProperty("评分排名") private DiagnoseRankVO rank; @@ -34,6 +38,14 @@ public class ComprehensiveEvaluationVO implements Serializable { this.stock = stock; } + public StockHqSimpleVO getStockHq() { + return stockHq; + } + + public void setStockHq(StockHqSimpleVO stockHq) { + this.stockHq = stockHq; + } + public List getBackTestList() { return backTestList; } diff --git a/src/main/java/com/diagnose/vo/FinancialValuationExtendVO.java b/src/main/java/com/diagnose/vo/FinancialValuationExtendVO.java index 856c628..43d7edb 100644 --- a/src/main/java/com/diagnose/vo/FinancialValuationExtendVO.java +++ b/src/main/java/com/diagnose/vo/FinancialValuationExtendVO.java @@ -6,7 +6,7 @@ import io.swagger.annotations.ApiModelProperty; import java.io.Serializable; import java.util.List; -@ApiModel("财务估值") +@ApiModel("财务估值-更多") public class FinancialValuationExtendVO implements Serializable { @ApiModelProperty("总结性机器语") diff --git a/src/main/java/com/diagnose/vo/FinancialValuationVO.java b/src/main/java/com/diagnose/vo/FinancialValuationVO.java index d5e4010..8d8b69c 100644 --- a/src/main/java/com/diagnose/vo/FinancialValuationVO.java +++ b/src/main/java/com/diagnose/vo/FinancialValuationVO.java @@ -18,6 +18,21 @@ public class FinancialValuationVO implements Serializable { @ApiModelProperty("财务分析行业排名") private FinanceRankVO financeRank; + @ApiModelProperty("盈利能力机器语") + private String prfAblMac; + + @ApiModelProperty("成长能力机器语") + private String grwAblMac; + + @ApiModelProperty("资产质量机器语") + private String assQualiMac; + + @ApiModelProperty("偿偾能力机器语") + private String solvMargMac; + + @ApiModelProperty("现金流量机器语") + private String cashFlowMac; + @ApiModelProperty("行情估值") private StockPriceVO stockPrice; @@ -44,6 +59,50 @@ public class FinancialValuationVO implements Serializable { return financeRank; } + public void setFinanceRank(FinanceRankVO financeRank) { + this.financeRank = financeRank; + } + + public String getPrfAblMac() { + return prfAblMac; + } + + public void setPrfAblMac(String prfAblMac) { + this.prfAblMac = prfAblMac; + } + + public String getGrwAblMac() { + return grwAblMac; + } + + public void setGrwAblMac(String grwAblMac) { + this.grwAblMac = grwAblMac; + } + + public String getAssQualiMac() { + return assQualiMac; + } + + public void setAssQualiMac(String assQualiMac) { + this.assQualiMac = assQualiMac; + } + + public String getSolvMargMac() { + return solvMargMac; + } + + public void setSolvMargMac(String solvMargMac) { + this.solvMargMac = solvMargMac; + } + + public String getCashFlowMac() { + return cashFlowMac; + } + + public void setCashFlowMac(String cashFlowMac) { + this.cashFlowMac = cashFlowMac; + } + public StockPriceVO getStockPrice() { return stockPrice; } @@ -52,10 +111,6 @@ public class FinancialValuationVO implements Serializable { this.stockPrice = stockPrice; } - public void setFinanceRank(FinanceRankVO financeRank) { - this.financeRank = financeRank; - } - public List getDiagnoseValuationList() { return diagnoseValuationList; } @@ -63,5 +118,4 @@ public class FinancialValuationVO implements Serializable { public void setDiagnoseValuationList(List diagnoseValuationList) { this.diagnoseValuationList = diagnoseValuationList; } - } diff --git a/src/main/java/com/diagnose/vo/QuantitativeAnalysisVO.java b/src/main/java/com/diagnose/vo/QuantitativeAnalysisVO.java index 8e81a1d..d2cb38b 100644 --- a/src/main/java/com/diagnose/vo/QuantitativeAnalysisVO.java +++ b/src/main/java/com/diagnose/vo/QuantitativeAnalysisVO.java @@ -19,6 +19,9 @@ public class QuantitativeAnalysisVO implements Serializable { @ApiModelProperty("压力位") private BigDecimal stkPrsLvl; + @ApiModelProperty("得分") + private Integer score; + @ApiModelProperty("K线列表") private List kLineList; @@ -46,6 +49,14 @@ public class QuantitativeAnalysisVO implements Serializable { this.stkPrsLvl = stkPrsLvl; } + public Integer getScore() { + return score; + } + + public void setScore(Integer score) { + this.score = score; + } + public List getkLineList() { return kLineList; } diff --git a/src/main/java/com/diagnose/vo/UnionVO.java b/src/main/java/com/diagnose/vo/UnionVO.java new file mode 100644 index 0000000..8a50684 --- /dev/null +++ b/src/main/java/com/diagnose/vo/UnionVO.java @@ -0,0 +1,101 @@ +package com.diagnose.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.io.Serializable; +import java.util.List; + +@ApiModel("聚合数据") +public class UnionVO implements Serializable { + + @ApiModelProperty("综合评分") + private ComprehensiveEvaluationVO comprehensiveEvaluation; + + @ApiModelProperty("财务估值") + private FinancialValuationVO financialValuation; + + @ApiModelProperty("财务估值-更多") + private FinancialValuationExtendVO financialValuationExtend; + + @ApiModelProperty("财务估值-估值分析") + private List financialValuationAnalysis; + + @ApiModelProperty("量化分析") + private QuantitativeAnalysisVO quantitativeAnalysis; + + @ApiModelProperty("市场热度") + private MarketSentimentVO marketSentiment; + + public UnionVO() { + } + + public UnionVO(ComprehensiveEvaluationVO comprehensiveEvaluation, FinancialValuationVO financialValuation, FinancialValuationExtendVO financialValuationExtend, List financialValuationAnalysis, QuantitativeAnalysisVO quantitativeAnalysis, MarketSentimentVO marketSentiment, InstitutionalActivityVO institutionalActivity) { + this.comprehensiveEvaluation = comprehensiveEvaluation; + this.financialValuation = financialValuation; + this.financialValuationExtend = financialValuationExtend; + this.financialValuationAnalysis = financialValuationAnalysis; + this.quantitativeAnalysis = quantitativeAnalysis; + this.marketSentiment = marketSentiment; + this.institutionalActivity = institutionalActivity; + } + + @ApiModelProperty("主力动向") + private InstitutionalActivityVO institutionalActivity; + + public ComprehensiveEvaluationVO getComprehensiveEvaluation() { + return comprehensiveEvaluation; + } + + public void setComprehensiveEvaluation(ComprehensiveEvaluationVO comprehensiveEvaluation) { + this.comprehensiveEvaluation = comprehensiveEvaluation; + } + + public FinancialValuationVO getFinancialValuation() { + return financialValuation; + } + + public void setFinancialValuation(FinancialValuationVO financialValuation) { + this.financialValuation = financialValuation; + } + + public FinancialValuationExtendVO getFinancialValuationExtend() { + return financialValuationExtend; + } + + public void setFinancialValuationExtend(FinancialValuationExtendVO financialValuationExtend) { + this.financialValuationExtend = financialValuationExtend; + } + + public List getFinancialValuationAnalysis() { + return financialValuationAnalysis; + } + + public void setFinancialValuationAnalysis(List financialValuationAnalysis) { + this.financialValuationAnalysis = financialValuationAnalysis; + } + + public QuantitativeAnalysisVO getQuantitativeAnalysis() { + return quantitativeAnalysis; + } + + public void setQuantitativeAnalysis(QuantitativeAnalysisVO quantitativeAnalysis) { + this.quantitativeAnalysis = quantitativeAnalysis; + } + + public MarketSentimentVO getMarketSentiment() { + return marketSentiment; + } + + public void setMarketSentiment(MarketSentimentVO marketSentiment) { + this.marketSentiment = marketSentiment; + } + + public InstitutionalActivityVO getInstitutionalActivity() { + return institutionalActivity; + } + + public void setInstitutionalActivity(InstitutionalActivityVO institutionalActivity) { + this.institutionalActivity = institutionalActivity; + } +} diff --git a/src/main/java/com/diagnose/vo/ValuationAnalysisVO.java b/src/main/java/com/diagnose/vo/ValuationAnalysisVO.java index e9696c2..cbefa68 100644 --- a/src/main/java/com/diagnose/vo/ValuationAnalysisVO.java +++ b/src/main/java/com/diagnose/vo/ValuationAnalysisVO.java @@ -7,7 +7,7 @@ import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDate; -@ApiModel +@ApiModel("财务估值-估值分析") public class ValuationAnalysisVO implements Serializable { @ApiModelProperty("日期") diff --git a/src/main/java/com/diagnose/vo/market/KLineDataDateTime.java b/src/main/java/com/diagnose/vo/market/KLineDataDateTime.java new file mode 100644 index 0000000..0f5578f --- /dev/null +++ b/src/main/java/com/diagnose/vo/market/KLineDataDateTime.java @@ -0,0 +1,35 @@ +package com.diagnose.vo.market; + +public class KLineDataDateTime { + + private Integer shtTime; + + private Integer shtDay; + + private Integer iDate; + + public Integer getShtTime() { + return shtTime; + } + + public void setShtTime(Integer shtTime) { + this.shtTime = shtTime; + } + + public Integer getShtDay() { + return shtDay; + } + + public void setShtDay(Integer shtDay) { + this.shtDay = shtDay; + } + + public Integer getiDate() { + return iDate; + } + + public void setiDate(Integer iDate) { + this.iDate = iDate; + } + +} diff --git a/src/main/java/com/diagnose/vo/market/KLineDataListVO.java b/src/main/java/com/diagnose/vo/market/KLineDataListVO.java new file mode 100644 index 0000000..16d67fd --- /dev/null +++ b/src/main/java/com/diagnose/vo/market/KLineDataListVO.java @@ -0,0 +1,19 @@ +package com.diagnose.vo.market; + +import com.diagnose.vo.KLineVO; + +import java.util.List; + +public class KLineDataListVO { + + private List vAnalyData; + + public List getvAnalyData() { + return vAnalyData; + } + + public void setvAnalyData(List vAnalyData) { + this.vAnalyData = vAnalyData; + } + +} diff --git a/src/main/java/com/diagnose/vo/market/KLineDataResponseVO.java b/src/main/java/com/diagnose/vo/market/KLineDataResponseVO.java new file mode 100644 index 0000000..6f732da --- /dev/null +++ b/src/main/java/com/diagnose/vo/market/KLineDataResponseVO.java @@ -0,0 +1,14 @@ +package com.diagnose.vo.market; + +public class KLineDataResponseVO { + + private KLineDataListVO stRsp; + + public KLineDataListVO getStRsp() { + return stRsp; + } + + public void setStRsp(KLineDataListVO stRsp) { + this.stRsp = stRsp; + } +} diff --git a/src/main/java/com/diagnose/vo/market/KLineDataVO.java b/src/main/java/com/diagnose/vo/market/KLineDataVO.java new file mode 100644 index 0000000..ff09d98 --- /dev/null +++ b/src/main/java/com/diagnose/vo/market/KLineDataVO.java @@ -0,0 +1,143 @@ +package com.diagnose.vo.market; + +import com.alibaba.fastjson.annotation.JSONField; +import io.swagger.annotations.ApiModelProperty; + +import java.math.BigDecimal; +import java.time.LocalDate; + +public class KLineDataVO { + + /** + * { + * "fTurnoverRate": 0, + * "fZhenfu": 0, + * "uiAtpTradeNum": 0, + * "dAtpAmount": 0, + * "sttDateTime": { + * "shtTime": 0, + * "shtDay": 0, + * "iDate": 20250310 + * }, + * "fOpen": 7.54, + * "uiAtpVolume": 0, + * "fHigh": 7.57, + * "fAmount": 732008896, + * "sttZhiShu": { + * "usDown": 0, + * "usUp": 0, + * "fYClose": 0, + * "uiVolInStock": 0 + * }, + * "fLow": 7.44, + * "fClose": 7.48, + * "lVolume": 977810, + * "dSettlementPrice": 0} + * + * 1 optional HDateTime sttDateTime; // 时间,历史原因, 存到盘上的数据都是 *100 以后的 DWORD 型数据 + * 2 optional double fOpen; // 单位开盘价 + * 3 optional double fHigh; // 单位最高价 + * 4 optional double fLow; // 单位最低价 + * 5 optional double fClose; // 单位收盘价 + * 6 optional double fAmount; // 单位成交金额 期货没有成交额 实际是持仓量 + * 7 optional long lVolume; // 成交量 + * 9 optional double dSettlementPrice; // 今日结算 + * 10 optional HTogetherZhiShu sttZhiShu; // 指数信息 + * 11 optional unsigned int uiAtpVolume = 0; // 盘后成交量 + * 12 optional double dAtpAmount = 0; // 盘后成交额 + * 13 optional unsigned int uiAtpTradeNum = 0; // 盘后成交笔数 + * 14 optional float fZhenfu = 0; // 振幅 * 100% + * 15 optional float fTurnoverRate = 0; // 换手率 * 100% + * 16 optional double fZTPrice; // 涨停价 + * 17 optional double fDTPrice; // 跌停价 + * 18 optional unsigned int uiAuctionVolume; // 集合竞价成交量 + * 19 optional double dAucAmount; // 竞价成交额 + */ + @JSONField(serialize = false) + private KLineDataDateTime sttDateTime; + + @ApiModelProperty("交易日") + private LocalDate tradeDate; + + @ApiModelProperty("单位开盘价") + private BigDecimal fOpen; + + @ApiModelProperty("单位最高价") + private BigDecimal fHigh; + + @ApiModelProperty("单位最低价") + private BigDecimal fLow; + + @ApiModelProperty("单位收盘价") + private BigDecimal fClose; + + @ApiModelProperty("单位成交金额 期货没有成交额 实际是持仓量") + private BigDecimal fAmount; + + @ApiModelProperty("成交量") + private BigDecimal lVolume; + + public KLineDataDateTime getSttDateTime() { + return sttDateTime; + } + + public void setSttDateTime(KLineDataDateTime sttDateTime) { + this.sttDateTime = sttDateTime; + } + + public LocalDate getTradeDate() { + return tradeDate; + } + + public void setTradeDate(LocalDate tradeDate) { + this.tradeDate = tradeDate; + } + + public BigDecimal getfOpen() { + return fOpen; + } + + public void setfOpen(BigDecimal fOpen) { + this.fOpen = fOpen; + } + + public BigDecimal getfHigh() { + return fHigh; + } + + public void setfHigh(BigDecimal fHigh) { + this.fHigh = fHigh; + } + + public BigDecimal getfLow() { + return fLow; + } + + public void setfLow(BigDecimal fLow) { + this.fLow = fLow; + } + + public BigDecimal getfClose() { + return fClose; + } + + public void setfClose(BigDecimal fClose) { + this.fClose = fClose; + } + + public BigDecimal getfAmount() { + return fAmount; + } + + public void setfAmount(BigDecimal fAmount) { + this.fAmount = fAmount; + } + + public BigDecimal getlVolume() { + return lVolume; + } + + public void setlVolume(BigDecimal lVolume) { + this.lVolume = lVolume; + } +} diff --git a/src/main/java/com/diagnose/vo/market/StockHqSimpleDataVO.java b/src/main/java/com/diagnose/vo/market/StockHqSimpleDataVO.java new file mode 100644 index 0000000..153364c --- /dev/null +++ b/src/main/java/com/diagnose/vo/market/StockHqSimpleDataVO.java @@ -0,0 +1,17 @@ +package com.diagnose.vo.market; + +import java.util.List; + +public class StockHqSimpleDataVO { + + private List vData; + + public List getvData() { + return vData; + } + + public void setvData(List vData) { + this.vData = vData; + } + +} diff --git a/src/main/java/com/diagnose/vo/market/StockHqSimpleResponseVO.java b/src/main/java/com/diagnose/vo/market/StockHqSimpleResponseVO.java new file mode 100644 index 0000000..75ecc18 --- /dev/null +++ b/src/main/java/com/diagnose/vo/market/StockHqSimpleResponseVO.java @@ -0,0 +1,15 @@ +package com.diagnose.vo.market; + +public class StockHqSimpleResponseVO { + + private StockHqSimpleDataVO stRsp; + + public StockHqSimpleDataVO getStRsp() { + return stRsp; + } + + public void setStRsp(StockHqSimpleDataVO stRsp) { + this.stRsp = stRsp; + } + +} diff --git a/src/main/java/com/diagnose/vo/market/StockHqSimpleVO.java b/src/main/java/com/diagnose/vo/market/StockHqSimpleVO.java new file mode 100644 index 0000000..5a97f94 --- /dev/null +++ b/src/main/java/com/diagnose/vo/market/StockHqSimpleVO.java @@ -0,0 +1,162 @@ +package com.diagnose.vo.market; + +import io.swagger.annotations.ApiModelProperty; + +import java.math.BigDecimal; + +public class StockHqSimpleVO { + + @ApiModelProperty("交易日") + private String iTradeDate; + + @ApiModelProperty("市场代码") + private String shtSetcode; + + @ApiModelProperty("股票代码") + private String sCode; + + @ApiModelProperty("股票名称") + private String sName; + + @ApiModelProperty("振幅") + private BigDecimal fZhenfu; + + @ApiModelProperty("涨跌幅") + private BigDecimal fChgRatio; + + @ApiModelProperty("涨跌金额") + private BigDecimal fChgValue; + + @ApiModelProperty("成交量") + private Long lVolume; + + @ApiModelProperty("成交额") + private BigDecimal fAmount; + + @ApiModelProperty("最低价") + private BigDecimal fLow; + + @ApiModelProperty("现价") + private BigDecimal fNowPrice; + + @ApiModelProperty("开盘价") + private BigDecimal fOpen; + + @ApiModelProperty("最高价") + private BigDecimal fHigh; + + @ApiModelProperty("昨日收盘价") + private BigDecimal fClose; + + public String getiTradeDate() { + return iTradeDate; + } + + public void setiTradeDate(String iTradeDate) { + this.iTradeDate = iTradeDate; + } + + public String getShtSetcode() { + return shtSetcode; + } + + public void setShtSetcode(String shtSetcode) { + this.shtSetcode = shtSetcode; + } + + public String getsCode() { + return sCode; + } + + public void setsCode(String sCode) { + this.sCode = sCode; + } + + public String getsName() { + return sName; + } + + public void setsName(String sName) { + this.sName = sName; + } + + public BigDecimal getfZhenfu() { + return fZhenfu; + } + + public void setfZhenfu(BigDecimal fZhenfu) { + this.fZhenfu = fZhenfu; + } + + public BigDecimal getfChgRatio() { + return fChgRatio; + } + + public void setfChgRatio(BigDecimal fChgRatio) { + this.fChgRatio = fChgRatio; + } + + public BigDecimal getfChgValue() { + return fChgValue; + } + + public void setfChgValue(BigDecimal fChgValue) { + this.fChgValue = fChgValue; + } + + public Long getlVolume() { + return lVolume; + } + + public void setlVolume(Long lVolume) { + this.lVolume = lVolume; + } + + public BigDecimal getfAmount() { + return fAmount; + } + + public void setfAmount(BigDecimal fAmount) { + this.fAmount = fAmount; + } + + public BigDecimal getfLow() { + return fLow; + } + + public void setfLow(BigDecimal fLow) { + this.fLow = fLow; + } + + public BigDecimal getfNowPrice() { + return fNowPrice; + } + + public void setfNowPrice(BigDecimal fNowPrice) { + this.fNowPrice = fNowPrice; + } + + public BigDecimal getfOpen() { + return fOpen; + } + + public void setfOpen(BigDecimal fOpen) { + this.fOpen = fOpen; + } + + public BigDecimal getfHigh() { + return fHigh; + } + + public void setfHigh(BigDecimal fHigh) { + this.fHigh = fHigh; + } + + public BigDecimal getfClose() { + return fClose; + } + + public void setfClose(BigDecimal fClose) { + this.fClose = fClose; + } +} diff --git a/src/main/resources/application-dev.yaml b/src/main/resources/application-dev.yaml index b3e1e91..517a1cf 100644 --- a/src/main/resources/application-dev.yaml +++ b/src/main/resources/application-dev.yaml @@ -4,7 +4,4 @@ spring: on-profile: dev # 引入开发环境配置文件 import: - - optional:classpath:/dev/advisorServer.yaml - - optional:classpath:/dev/application.yaml - - optional:classpath:/dev/tencentConfig.yaml - - optional:classpath:/dev/business.yaml \ No newline at end of file + - optional:classpath:/dev/application.yaml \ No newline at end of file diff --git a/src/main/resources/application-prod.yaml b/src/main/resources/application-prod.yaml index 975fe0c..cabb35a 100644 --- a/src/main/resources/application-prod.yaml +++ b/src/main/resources/application-prod.yaml @@ -1,10 +1,6 @@ spring: config: activate: - on-profile: prod-admin + on-profile: prod import: - - optional:classpath:/prod/advisorServer.yaml - - optional:classpath:/prod/application.yaml - - optional:classpath:/prod/tencentConfig.yaml - - optional:classpath:/prod/business.yaml - - optional:classpath:/prod/admin.yaml \ No newline at end of file + - optional:classpath:/prod/application.yaml \ No newline at end of file diff --git a/src/main/resources/application-test.yaml b/src/main/resources/application-test.yaml index 3c14cac..ce9a96b 100644 --- a/src/main/resources/application-test.yaml +++ b/src/main/resources/application-test.yaml @@ -4,7 +4,4 @@ spring: on-profile: test # 引入开发环境配置文件 import: - - optional:classpath:/dev/advisorServer.yaml - - optional:classpath:/dev/application.yaml - - optional:classpath:/dev/tencentConfig.yaml - - optional:classpath:/dev/business.yaml \ No newline at end of file + - optional:classpath:/dev/application.yaml \ No newline at end of file diff --git a/src/main/resources/dev/application.yaml b/src/main/resources/dev/application.yaml index 55b7547..2e927d9 100644 --- a/src/main/resources/dev/application.yaml +++ b/src/main/resources/dev/application.yaml @@ -38,4 +38,13 @@ spring: timeout-per-shutdown-phase: "10s" springfox: documentation: - enabled: true #是否开启swagger \ No newline at end of file + enabled: true #是否开启swagger +server: + port: 9090 +business: + api: + host: http://wup.cnsoft.sztg.com/json + timeout: 10000 + url: + stockHqSimple: /hs_server/stockHqSimple + kLineData: /hs_server/kLineData \ No newline at end of file diff --git a/src/main/resources/logback-prod.xml b/src/main/resources/logback-prod.xml index f8c4a66..2eae419 100644 --- a/src/main/resources/logback-prod.xml +++ b/src/main/resources/logback-prod.xml @@ -2,12 +2,12 @@ - + - ${LOG_PATH}/advisor_server-%d{yyyyMMdd}.log + ${LOG_PATH}/diagnose_server-%d{yyyyMMdd}.log 30 1GB @@ -18,7 +18,7 @@ - ${LOG_PATH}/advisor_server-data-%d{yyyyMMdd}.log + ${LOG_PATH}/diagnose_server-data-%d{yyyyMMdd}.log 30 1GB @@ -29,7 +29,7 @@ - ${LOG_PATH}/advisor_server-error-%d{yyyyMMdd}.log + ${LOG_PATH}/diagnose_server-error-%d{yyyyMMdd}.log 30 1GB @@ -46,10 +46,6 @@ - - - - diff --git a/src/main/resources/logback-tst.xml b/src/main/resources/logback-tst.xml index 7ddcaa0..994f29f 100644 --- a/src/main/resources/logback-tst.xml +++ b/src/main/resources/logback-tst.xml @@ -7,7 +7,7 @@ - ${LOG_PATH}/advisor_server-%d{yyyyMMdd}.log + ${LOG_PATH}/diagnose_server-%d{yyyyMMdd}.log 30 1GB @@ -18,7 +18,7 @@ - ${LOG_PATH}/advisor_server-data-%d{yyyyMMdd}.log + ${LOG_PATH}/diagnose_server-data-%d{yyyyMMdd}.log 30 1GB @@ -29,7 +29,7 @@ - ${LOG_PATH}/advisor_server-error-%d{yyyyMMdd}.log + ${LOG_PATH}/diagnose_server-error-%d{yyyyMMdd}.log 30 1GB diff --git a/src/main/resources/prod/application.yaml b/src/main/resources/prod/application.yaml index 4903b28..8543a35 100644 --- a/src/main/resources/prod/application.yaml +++ b/src/main/resources/prod/application.yaml @@ -38,4 +38,13 @@ spring: timeout-per-shutdown-phase: "10s" springfox: documentation: - enabled: false #是否开启swagger \ No newline at end of file + enabled: false #是否开启swagger +server: + port: 9090 +business: + api: + host: http://172.27.1.11:18080/json + timeout: 10000 + url: + stockHqSimple: /hs_server/stockHqSimple + kLineData: /hs_server/kLineData \ No newline at end of file