Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified .gradle/8.14.3/executionHistory/executionHistory.bin
Binary file not shown.
Binary file modified .gradle/8.14.3/executionHistory/executionHistory.lock
Binary file not shown.
Binary file modified .gradle/8.14.3/fileHashes/fileHashes.bin
Binary file not shown.
Binary file modified .gradle/8.14.3/fileHashes/fileHashes.lock
Binary file not shown.
Binary file modified .gradle/8.14.3/fileHashes/resourceHashesCache.bin
Binary file not shown.
Binary file modified .gradle/buildOutputCleanup/buildOutputCleanup.lock
Binary file not shown.
Binary file modified build/tmp/compileJava/previous-compilation-data.bin
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,14 @@ public ApiResponse<String> updateErrorStockData(@RequestParam String stockCd) {
stockService.forceUpdateStockData(stockCd);
return ApiResponse.onSuccess("오류 주가 데이터 재업데이트 성공");
}

@GetMapping("/update/all-stock-prices")
@Operation(
summary = "모든 주식 가격 데이터 업데이트",
description = "모든 주식의 가격 데이터를 업데이트합니다. (오래 걸릴 수 있음)"
)
public ApiResponse<String> updateAllStockPriceData() {
stockService.updateAllStockPriceData();
return ApiResponse.onSuccess("모든 주식 가격 데이터 업데이트 성공");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public void updateCurrentIndexData(MarketType marketType) {
@Transactional
public void updateHistoricalIndexData(MarketType marketType) {
LocalDate endDate = LocalDate.now();
LocalDate startDate = endDate.minusYears(10);
LocalDate startDate = LocalDate.of(1980, 1, 4); // KOSPI 시작일 기준

List<KisIndexPeriodPrice> indexPeriodPriceList = new ArrayList<>();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,6 @@ public interface StockService {
void forceUpdateStockData(String stockCd);

void saveDailyStockData();

void updateAllStockPriceData();
}
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public List<StockQueryResponse> searchStocks(String query) {
@Transactional
public void updateCurrentStockData() {
List<Stock> stocks = stockRepository.findAll();
for (int stockIdx = 0; stockIdx < stocks.size() / 30; stockIdx++) {
for (int stockIdx = 0; stockIdx <= stocks.size() / 30; stockIdx++) {
List<Stock> stockList = stocks.subList(stockIdx * 30, Math.min((stockIdx + 1) * 30, stocks.size()));
List<String> stockCdList = stockList.stream()
.map(Stock::getStockCd)
Expand Down Expand Up @@ -141,11 +141,31 @@ public void saveDailyStockData() {
for (Stock stock : stockList) {
if (savedId.contains(stock.getStockCd()))
continue;
if (stock.getCurrentPriceInfo() == null) {
log.info("[stock] 일간 주가 데이터 저장 건너뜀: {} {} (현재가 정보 없음)", stock.getStockName(), stock.getStockCd());
continue;
}

StockPrice stockPrice = stock.getCurrentPriceInfo().toStockPriceEntity();
stockPrice.updateStock(stock);

savePriceList.add(stockPrice);
}
stockPriceRepository.saveAll(savePriceList);
}

@Override
public void updateAllStockPriceData() {
List<Stock> stocks = stockRepository.findAll();

for (Stock stock : stocks) {
for (LocalDate updateDate = stock.getListedDate(); updateDate.isBefore(LocalDate.of(2015, 11, 2)); updateDate = updateDate.plusDays(140)) {
periodicSaver.saveOnePeriod(stock, updateDate, updateDate.plusDays(139));
}

log.info("[stock] 전체 주가 데이터 업데이트 완료: {} 진행률 {}%",
stock.getStockCd(),
(stocks.indexOf(stock) + 1) * 100 / stocks.size());
}
}
}
Loading