From d4fec4c4261c433eb0167fba9487bbaa8434317b Mon Sep 17 00:00:00 2001 From: lanyuanxiaoyao Date: Fri, 26 Sep 2025 17:25:29 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=E5=B9=B4?= =?UTF-8?q?=E7=BA=BF=E6=83=85=E5=86=B5=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/service/AssessmentService.java | 6 +--- .../leopard/core/service/IndustryService.java | 35 +++++++++++-------- .../leopard/core/service/TaskService.java | 12 ------- .../server/LeopardServerApplication.java | 11 ++++++ leopard-strategy/pom.xml | 13 +++---- 5 files changed, 37 insertions(+), 40 deletions(-) diff --git a/leopard-core/src/main/java/com/lanyuanxiaoyao/leopard/core/service/AssessmentService.java b/leopard-core/src/main/java/com/lanyuanxiaoyao/leopard/core/service/AssessmentService.java index eebcb40..eae2883 100644 --- a/leopard-core/src/main/java/com/lanyuanxiaoyao/leopard/core/service/AssessmentService.java +++ b/leopard-core/src/main/java/com/lanyuanxiaoyao/leopard/core/service/AssessmentService.java @@ -32,11 +32,7 @@ public class AssessmentService { public Set assess(Set stocks, int year) { if (ObjectUtil.isNotEmpty(stocks)) { - var industries = stocks - .stream() - .map(Stock::getIndustry) - .collect(Collectors.toSet()); - var topChange = industryService.topChange(year, industries, stocks); + var topChange = industryService.topChange(year, stocks); var dailyMap = dailyRepository.findAll( QDaily.daily.tradeDate.year().eq(year) .and(QDaily.daily.stock.in(stocks)) diff --git a/leopard-core/src/main/java/com/lanyuanxiaoyao/leopard/core/service/IndustryService.java b/leopard-core/src/main/java/com/lanyuanxiaoyao/leopard/core/service/IndustryService.java index 93f6ca7..f26c190 100644 --- a/leopard-core/src/main/java/com/lanyuanxiaoyao/leopard/core/service/IndustryService.java +++ b/leopard-core/src/main/java/com/lanyuanxiaoyao/leopard/core/service/IndustryService.java @@ -1,5 +1,6 @@ package com.lanyuanxiaoyao.leopard.core.service; +import cn.hutool.core.util.ObjectUtil; import com.lanyuanxiaoyao.leopard.core.entity.Daily; import com.lanyuanxiaoyao.leopard.core.entity.QDaily; import com.lanyuanxiaoyao.leopard.core.entity.Stock; @@ -31,29 +32,24 @@ public class IndustryService { } public Map topChange(int year) { - return topChange(year, null, null); + return topChange(year, null); } - public Map topChange(int year, Set includeIndustries) { - return topChange(year, includeIndustries, null); - } - - public Map topChange(int year, Set includeIndustries, Set includeStocks) { - return topChange(year, year, includeIndustries, includeStocks); + public Map topChange(int year, Set includeStocks) { + return topChange(year, year, includeStocks); } public Map topChange(int startYear, int endYear) { - return topChange(startYear, endYear, null, null); + return topChange(startYear, endYear, null); } - public Map topChange(int startYear, int endYear, Set includeIndustries) { - return topChange(startYear, endYear, includeIndustries, null); - } - - public Map topChange(int startYear, int endYear, Set includeIndustries, Set includeStocks) { + public Map topChange(int startYear, int endYear, Set includeStocks) { + var includeIndustries = ObjectUtil.isNull(includeStocks) + ? null + : includeStocks.stream().map(Stock::getIndustry).collect(Collectors.toSet()); return stockRepository.findDistinctIndustries() .parallelStream() - .filter(industry -> includeIndustries == null || includeIndustries.contains(industry)) + .filter(o -> ObjectUtil.isNull(includeIndustries) || includeIndustries.contains(o)) .flatMap(industry -> { var keys = new ArrayList(); for (int year = startYear; year <= endYear; year++) { @@ -62,7 +58,6 @@ public class IndustryService { return keys.stream(); }) .map(key -> { - log.info("计算行业 {} {} 年度涨跌幅", key.industry(), key.year()); var maxChange = dailyRepository .findAll( QDaily.daily.stock.industry.eq(key.industry()) @@ -90,4 +85,14 @@ public class IndustryService { public record IndustryYearlyKey(String industry, int year) { } + + public record IndustryYearlyData( + String industry, + int year, + double maxChange, + double minChange, + double avgChange, + double medianChange + ) { + } } diff --git a/leopard-core/src/main/java/com/lanyuanxiaoyao/leopard/core/service/TaskService.java b/leopard-core/src/main/java/com/lanyuanxiaoyao/leopard/core/service/TaskService.java index d0e5232..27794fe 100644 --- a/leopard-core/src/main/java/com/lanyuanxiaoyao/leopard/core/service/TaskService.java +++ b/leopard-core/src/main/java/com/lanyuanxiaoyao/leopard/core/service/TaskService.java @@ -11,7 +11,6 @@ import com.lanyuanxiaoyao.leopard.core.task.UpdateFinanceIndicatorTask; import com.lanyuanxiaoyao.leopard.core.task.UpdateStockTask; import com.lanyuanxiaoyao.leopard.core.task.UpdateYearlyTask; import com.lanyuanxiaoyao.service.template.service.SimpleServiceSupport; -import jakarta.transaction.Transactional; import java.util.Map; import java.util.Set; import java.util.concurrent.ExecutorService; @@ -20,9 +19,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import lombok.Getter; import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.ApplicationContext; -import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; /** @@ -33,7 +30,6 @@ import org.springframework.stereotype.Service; @Service public class TaskService extends SimpleServiceSupport { private final ExecutorService executor = Executors.newFixedThreadPool(50); - private final TaskRepository taskRepository; private final ApplicationContext context; @Getter @@ -49,17 +45,9 @@ public class TaskService extends SimpleServiceSupport { public TaskService(TaskRepository repository, ApplicationContext context) { super(repository); - this.taskRepository = repository; this.context = context; } - @Transactional(rollbackOn = Throwable.class) - @EventListener(ApplicationReadyEvent.class) - public void onApplicationReady() { - log.warn("更新所有未完成的任务状态为失败"); - taskRepository.updateAllRunningTaskToFailure(); - } - public TaskTemplate getTemplate(String templateId) { return templateMap.get(templateId); } diff --git a/leopard-server/src/main/java/com/lanyuanxiaoyao/leopard/server/LeopardServerApplication.java b/leopard-server/src/main/java/com/lanyuanxiaoyao/leopard/server/LeopardServerApplication.java index e49251f..31c3411 100644 --- a/leopard-server/src/main/java/com/lanyuanxiaoyao/leopard/server/LeopardServerApplication.java +++ b/leopard-server/src/main/java/com/lanyuanxiaoyao/leopard/server/LeopardServerApplication.java @@ -1,5 +1,7 @@ package com.lanyuanxiaoyao.leopard.server; +import com.lanyuanxiaoyao.leopard.core.repository.TaskRepository; +import jakarta.transaction.Transactional; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; @@ -15,11 +17,20 @@ import org.springframework.data.jpa.repository.config.EnableJpaAuditing; @SpringBootApplication(scanBasePackages = "com.lanyuanxiaoyao.leopard") @EnableJpaAuditing public class LeopardServerApplication implements ApplicationRunner { + private final TaskRepository taskRepository; + + public LeopardServerApplication(TaskRepository taskRepository) { + this.taskRepository = taskRepository; + } + public static void main(String[] args) { SpringApplication.run(LeopardServerApplication.class, args); } + @Transactional(rollbackOn = Throwable.class) @Override public void run(ApplicationArguments args) { + log.warn("更新所有未完成的任务状态为失败"); + taskRepository.updateAllRunningTaskToFailure(); } } diff --git a/leopard-strategy/pom.xml b/leopard-strategy/pom.xml index 2ec3d9c..dcb4bdd 100644 --- a/leopard-strategy/pom.xml +++ b/leopard-strategy/pom.xml @@ -24,14 +24,6 @@ com.yomahub liteflow-spring-boot-starter - - io.github.ralfkonrad.quantlib_for_maven - quantlib - - - org.ta4j - ta4j-core - org.commonmark commonmark @@ -53,6 +45,11 @@ postgresql runtime + + com.h2database + h2 + runtime +