From c9160253b4c3ff7252d38108975b39062d74ddb3 Mon Sep 17 00:00:00 2001 From: tianea Date: Wed, 9 Mar 2022 20:11:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=98=E9=91=AB=E7=BB=A9=E6=95=88=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../competitiion/job/CompetitionJob.java | 37 +++++++- .../java/com/tz/platform/entity/Ranking.java | 94 +++++++++++++++++++ .../{juejing => juejin}/JueJinApi.java | 47 +++++++++- .../{juejing => juejin}/bo/AccountInfo.java | 2 +- .../{juejing => juejin}/bo/CashInfo.java | 2 +- .../{juejing => juejin}/bo/Indicator.java | 2 +- .../platform/{juejing => juejin}/bo/Info.java | 2 +- .../{juejing => juejin}/bo/ListCashInfo.java | 2 +- .../{juejing => juejin}/bo/ReportInfo.java | 2 +- 9 files changed, 177 insertions(+), 13 deletions(-) create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/entity/Ranking.java rename tz/competition/competition-service/src/main/java/com/tz/platform/{juejing => juejin}/JueJinApi.java (70%) rename tz/competition/competition-service/src/main/java/com/tz/platform/{juejing => juejin}/bo/AccountInfo.java (90%) rename tz/competition/competition-service/src/main/java/com/tz/platform/{juejing => juejin}/bo/CashInfo.java (94%) rename tz/competition/competition-service/src/main/java/com/tz/platform/{juejing => juejin}/bo/Indicator.java (94%) rename tz/competition/competition-service/src/main/java/com/tz/platform/{juejing => juejin}/bo/Info.java (83%) rename tz/competition/competition-service/src/main/java/com/tz/platform/{juejing => juejin}/bo/ListCashInfo.java (76%) rename tz/competition/competition-service/src/main/java/com/tz/platform/{juejing => juejin}/bo/ReportInfo.java (88%) diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/CompetitionJob.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/CompetitionJob.java index 500484b..dcd2846 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/CompetitionJob.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/CompetitionJob.java @@ -3,10 +3,14 @@ package com.tz.platform.competitiion.job; import com.tz.platform.competitiion.job.biz.CompetitionJobBiz; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.connection.RedisStringCommands; +import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.types.Expiration; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.util.Objects; import java.util.concurrent.TimeUnit; @Component @@ -14,8 +18,8 @@ import java.util.concurrent.TimeUnit; public class CompetitionJob { -// @Autowired -// private RedisTemplate redisTemplate; + @Autowired + private RedisTemplate redisTemplate; @Autowired private CompetitionJobBiz jobBiz; @@ -36,4 +40,33 @@ public class CompetitionJob { // } // } } + + /** + * 获取一个redis分布锁 + * + * @param lockKey 锁住的key + * @param lockExpireMils 锁住的时长。如果超时未解锁,视为加锁线程死亡,其他线程可夺取锁 + * @return + */ + public boolean lock(String lockKey, long lockExpireMils) { + return (Boolean) redisTemplate.execute((RedisCallback) connection -> { + long nowTime = System.currentTimeMillis(); + Boolean acquire = connection.setNX(lockKey.getBytes(), String.valueOf(nowTime + lockExpireMils + 1).getBytes()); + if (acquire) { + return Boolean.TRUE; + } else { + byte[] value = connection.get(lockKey.getBytes()); + if (Objects.nonNull(value) && value.length > 0) { + long oldTime = Long.parseLong(new String(value)); + if (oldTime < nowTime) { + //connection.getSet:返回这个key的旧值并设置新值。 + byte[] oldValue = connection.getSet(lockKey.getBytes(), String.valueOf(nowTime + lockExpireMils + 1).getBytes()); + //当key不存时会返回空,表示key不存在或者已在管道中使用 + return oldValue == null ? false : Long.parseLong(new String(oldValue)) < nowTime; + } + } + } + return Boolean.FALSE; + }); + } } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/entity/Ranking.java b/tz/competition/competition-service/src/main/java/com/tz/platform/entity/Ranking.java new file mode 100644 index 0000000..f88f51a --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/entity/Ranking.java @@ -0,0 +1,94 @@ +package com.tz.platform.entity; + +import lombok.Data; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import java.util.Date; + +@Data +@Entity +public class Ranking { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + private String accountId; + /** + * 总资产 + */ + private Long nav; + + /** + * 可用资产 + */ + private Long available; + + /** + * 市值 + */ + private Long marketValue; + + /** + * 累计盈亏 + */ + private Long accumulativeTotalProfitLoss; + + /** + * 累计手续费 + */ + private Long cumCommission; + + /** + * 浮动盈亏 + */ + private Long fpnl; + + /** + * 累计收益率 + */ + private Long pnlRation; + + /** + * 最大回测 + */ + private Long maxDrawdown; + + /** + * 卡玛比率 + */ + private Long calmarRatio; + + /** + * 夏普比率 + */ + private Long sharpRatio; + + /** + * 开仓次数 + */ + private Integer openCount; + + /** + * 平仓次数 + */ + private Integer closeCount; + + /** + * 年化收益率 + */ + private Long pnlRatioAnnual; + + /** + *胜率 + */ + private Long winRatio; + + /** + * 更新时间 + */ + private Date updateTime; + +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/juejing/JueJinApi.java b/tz/competition/competition-service/src/main/java/com/tz/platform/juejin/JueJinApi.java similarity index 70% rename from tz/competition/competition-service/src/main/java/com/tz/platform/juejing/JueJinApi.java rename to tz/competition/competition-service/src/main/java/com/tz/platform/juejin/JueJinApi.java index 96afab7..8003cd9 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/juejing/JueJinApi.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/juejin/JueJinApi.java @@ -1,9 +1,9 @@ -package com.tz.platform.juejing; +package com.tz.platform.juejin; import cn.hutool.json.JSONUtil; import com.tz.platform.common.core.base.BaseException; import com.tz.platform.common.core.tools.HttpUtil; -import com.tz.platform.juejing.bo.AccountInfo; +import com.tz.platform.juejin.bo.AccountInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.StringUtils; @@ -63,13 +63,42 @@ public class JueJinApi { return content; } + /** + * 绩效报告 + * @param accountId + * @param title + * @return + */ public String createReport(String accountId,String title){ - String url = "https://api.myquant.cn:9001/perfweb-rpcgw/api/v1/sim/detail/"+accountId+"?title="+title; + String url = baseUrl+ "/perfweb-rpcgw/api/v1/sim/detail/"+accountId+"?title="+title; String content = HttpUtil.get(url,headers); logger.info("报告生成请求: {}",content); return ""; } + /** + * 获取绩效报告 + * @param reportId + * @return + */ + public String getReport(String reportId){ + String url = baseUrl +"/perfweb-rpcgw/api/v1/report/summaries?report_ids="+reportId; + String content = HttpUtil.get(url,headers); + logger.info("报告获取:{}",content); + return content; + } + + /** + * 基准收益率 + * @return + */ + public String getBaseRatio(){ + String url = baseUrl +"/ds-history-rpcgw/v3/data-history/benchmark-return?symbol=SHSE.000300&frequency=1d&start_time=2022-03-07&end_time=2022-03-09&adjust=0"; + String content = HttpUtil.get(url,headers); + logger.info("基准收益率:{}",content); + return content; + } + public String test(){ String url = "https://sim.sztzjy.com/sim?acc=2e41a913-9dc1-11ec-89b3-00163e0e6ad0"; @@ -78,16 +107,24 @@ public class JueJinApi { return ""; } + + public static void main(String[] args) { JueJinApi api = new JueJinApi(); String accountId = "2e41a913-9dc1-11ec-89b3-00163e0e6ad0"; -// AccountInfo info = api.createAccount("test2",1000000L,1); + String zhangSan1Qihuo = "0cfc7894-9f4e-11ec-bf20-00163e0e6ad0"; + String zhangSan1GuPiao = ""; + + + AccountInfo info = api.createAccount("张三1",1000000L,4); // System.out.println(info.getAccount_id()); // api.deleteAccount("4811913f-9dba-11ec-89b3-00163e0e6ad0"); // api.getCashInfo("2e41a913-9dc1-11ec-89b3-00163e0e6ad0"); // api.test(); - api.createReport(accountId,"report"+ System.currentTimeMillis()); +// api.createReport(accountId,"report"+ System.currentTimeMillis()); +// api.getReport("5"); + api.getBaseRatio(); } } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/AccountInfo.java b/tz/competition/competition-service/src/main/java/com/tz/platform/juejin/bo/AccountInfo.java similarity index 90% rename from tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/AccountInfo.java rename to tz/competition/competition-service/src/main/java/com/tz/platform/juejin/bo/AccountInfo.java index de925ba..7f6f088 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/AccountInfo.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/juejin/bo/AccountInfo.java @@ -1,4 +1,4 @@ -package com.tz.platform.juejing.bo; +package com.tz.platform.juejin.bo; import lombok.Data; diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/CashInfo.java b/tz/competition/competition-service/src/main/java/com/tz/platform/juejin/bo/CashInfo.java similarity index 94% rename from tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/CashInfo.java rename to tz/competition/competition-service/src/main/java/com/tz/platform/juejin/bo/CashInfo.java index 2df4516..656b099 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/CashInfo.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/juejin/bo/CashInfo.java @@ -1,4 +1,4 @@ -package com.tz.platform.juejing.bo; +package com.tz.platform.juejin.bo; import lombok.Data; diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/Indicator.java b/tz/competition/competition-service/src/main/java/com/tz/platform/juejin/bo/Indicator.java similarity index 94% rename from tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/Indicator.java rename to tz/competition/competition-service/src/main/java/com/tz/platform/juejin/bo/Indicator.java index 3f89c1e..52f86a4 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/Indicator.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/juejin/bo/Indicator.java @@ -1,4 +1,4 @@ -package com.tz.platform.juejing.bo; +package com.tz.platform.juejin.bo; import lombok.Data; diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/Info.java b/tz/competition/competition-service/src/main/java/com/tz/platform/juejin/bo/Info.java similarity index 83% rename from tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/Info.java rename to tz/competition/competition-service/src/main/java/com/tz/platform/juejin/bo/Info.java index 2c9c399..5f6fa4c 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/Info.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/juejin/bo/Info.java @@ -1,4 +1,4 @@ -package com.tz.platform.juejing.bo; +package com.tz.platform.juejin.bo; import lombok.Data; diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/ListCashInfo.java b/tz/competition/competition-service/src/main/java/com/tz/platform/juejin/bo/ListCashInfo.java similarity index 76% rename from tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/ListCashInfo.java rename to tz/competition/competition-service/src/main/java/com/tz/platform/juejin/bo/ListCashInfo.java index d16a90e..92a9b42 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/ListCashInfo.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/juejin/bo/ListCashInfo.java @@ -1,4 +1,4 @@ -package com.tz.platform.juejing.bo; +package com.tz.platform.juejin.bo; import lombok.Data; diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/ReportInfo.java b/tz/competition/competition-service/src/main/java/com/tz/platform/juejin/bo/ReportInfo.java similarity index 88% rename from tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/ReportInfo.java rename to tz/competition/competition-service/src/main/java/com/tz/platform/juejin/bo/ReportInfo.java index d8e9221..5b649f2 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/ReportInfo.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/juejin/bo/ReportInfo.java @@ -1,4 +1,4 @@ -package com.tz.platform.juejing.bo; +package com.tz.platform.juejin.bo; import lombok.Data;