Skip to content
Open
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
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication(scanBasePackages = {"server-child", "server-parent"})
@SpringBootApplication
public class Server3Application {

public static void main(String[] args) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import sinhan.server1.domain.invest.dto.StockFindCurrentResponseDTO;
import sinhan.server1.domain.invest.dto.StockFindDetailResponseDTO;
import sinhan.server1.domain.invest.service.StockService;
import sinhan.server1.domain.utils.ApiResult;
Expand All @@ -24,7 +25,14 @@ public ApiResult getStocks(){
@GetMapping("/stocks/{ticker}")
public ApiResult getStock(@PathVariable("ticker") String ticker){
System.out.println(ticker);
StockFindDetailResponseDTO result = stockService.getStocks(ticker,0);
StockFindCurrentResponseDTO result = stockService.getStockCurrent(ticker);
return ApiResult.responseSuccess(result);
}
@GetMapping("/stocks/{ticker}/{year}")
public ApiResult getStock(@PathVariable("ticker") String ticker,@PathVariable("year") String year){
StockFindDetailResponseDTO result = stockService.getStockDetail(ticker,year);
return ApiResult.responseSuccess(result);
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package sinhan.server1.domain.invest.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@Builder
@AllArgsConstructor
@Data
public class StockFindCurrentResponseDTO {
public String changePrice;
public String changeSign;
public String changeRate;
public String currentPrice;
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
public class StockFindDetailResponseDTO {
Expand All @@ -28,4 +27,19 @@ public class StockFindDetailResponseDTO {
public String changeSign;
public String changeRate;
public List<StockCartDate> charts;

public StockFindDetailResponseDTO() {
this.PSR = "1";
}

public void calSPS(int temp){
try{
Integer sps = Integer.valueOf(temp);
Integer tempPSR = Integer.valueOf(PSR);
this.PSR = sps*tempPSR+"";
}catch (NumberFormatException ex){
System.out.println(ex);
}
}

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,119 @@
package sinhan.server1.domain.invest.repository;

import org.springframework.stereotype.Service;
import org.springframework.stereotype.Repository;
import java.net.URI;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.util.UriBuilder;
import reactor.core.publisher.Mono;
import sinhan.server1.domain.invest.entity.StockDivideOutput;
import sinhan.server1.domain.invest.entity.StockDuraionPriceOutput;
import sinhan.server1.domain.invest.entity.StockFianceResponseOutput;

@Service
@Repository
public class StockRepository {
@Autowired
WebClient webClientP;
@Autowired
WebClient webClientF;
@Autowired
WebClient webDartClient;

public StockDuraionPriceOutput getApiCurrentPrice(String ticker,String year){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
Date endDate = new Date();
Date startDate = new Date();

String endDateString;
String startDateString;
String fid_period_div_code;
if(year.equals("0")){
startDate.setMonth(startDate.getMonth()-1);
fid_period_div_code = "D";
}else if(year.equals("1")){
startDate.setYear(startDate.getYear()-1);
fid_period_div_code = "W";
} else {
startDate.setYear(startDate.getYear()-1);
fid_period_div_code = "W";
}
endDateString = simpleDateFormat.format(endDate);
startDateString = simpleDateFormat.format(startDate);

String uri = "/uapi/domestic-stock/v1/quotations/inquire-daily-itemchartprice";
Mono<StockDuraionPriceOutput> mono = webClientP.get().uri(
uriBuilder -> {
return uriBuilder.path(uri)
.queryParam("fid_cond_mrkt_div_code","J")
.queryParam("fid_input_iscd",ticker)
.queryParam("fid_input_date_1",startDateString)
.queryParam("fid_input_date_2",endDateString)
.queryParam("fid_period_div_code",fid_period_div_code)
.queryParam("fid_org_adj_prc",0).build();
})
.retrieve()
// .onStatus(HttpStatus::is5xxServerError, response -> {
// // 5xx 서버 오류 처리
// return Mono.error(new Exception("서버에서 오류 발생: " + response.statusCode()));
// })
.bodyToMono(StockDuraionPriceOutput.class)
.onErrorResume(Exception.class, error -> {
// 예외 발생 시 대체 처리
System.err.println("오류 발생: " + error.getMessage());
return Mono.empty(); // 또는 기본값 등을 반환할 수 있음
});
// .subscribe(
// price -> System.out.println("현재 주가: " + price),
// error -> System.err.println("에러 발생: " + error.getMessage())
// );
return mono.block();
// mono.subscribe(
// price -> System.out.println("현재 주가: " + price),
// error -> System.err.println("에러 발생: " + error.getMessage())
// );
// System.out.println(mono);
// return mono;
}

public StockFianceResponseOutput getApiFiance(String ticker){
String uri = "/uapi/domestic-stock/v1/finance/financial-ratio";
Mono<StockFianceResponseOutput> mono;
return webClientF.get().uri(
uriBuilder -> {
URI build = uriBuilder.path(uri)
.queryParam("fid_cond_mrkt_div_code", "J")
.queryParam("fid_input_iscd", ticker)
.queryParam("fid_div_cls_code", "0").build();
System.out.println(build);
return uriBuilder.build();
})
.retrieve().bodyToMono(StockFianceResponseOutput.class).block();
// mono.subscribe(
// price -> System.out.println("현재 주가: " + price),
// error -> System.err.println("에러 발생: " + error.getMessage())
// );
// System.out.println(mono);
// return mono;
}

public StockDivideOutput getApiDivide(String ticker){
return webDartClient.get().uri(
uriBuilder1 -> {
UriBuilder uriBuilder =
uriBuilder1.path("")
.queryParam("corp_code","00126380")
.queryParam("bsns_year","2023")
.queryParam("reprt_code","11011")
;
return uriBuilder.build();
}).retrieve().bodyToMono(StockDivideOutput.class).block();
// mono.subscribe(
// price -> System.out.println("현재 주가: " + price),
// error -> System.err.println("에러 발생: " + error.getMessage())
// );
// System.out.println(mono);
// return mono;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.util.UriBuilder;
import reactor.core.publisher.Mono;
import sinhan.server1.domain.invest.dto.StockFindCurrentResponseDTO;
import sinhan.server1.domain.invest.dto.StockFindDetailResponseDTO;
import sinhan.server1.domain.invest.entity.StockDivideOutput;
import sinhan.server1.domain.invest.entity.StockDuraionPriceOutput;
Expand All @@ -17,150 +18,47 @@
@Service
public class StockService {
StockRepository stockRepository;
@Autowired
WebClient webClientP;
@Autowired
WebClient webClientF;
@Autowired
WebClient webDartClient;


@Autowired
StockService(StockRepository stockRepository){
this.stockRepository = stockRepository;
}

public StockFindDetailResponseDTO getStocks(String ticker,int year){
Mono<StockDuraionPriceOutput> stockDuraionPriceOutput = getApiCurrentPrice(ticker,year);
Mono<StockFianceResponseOutput> stockFianceResponseOutput = getApiFiance(ticker);
Mono<StockDivideOutput> stockDivideOutputMono = getApiDivide(ticker);
stockDuraionPriceOutput.subscribe(
price -> System.out.println("현재 주가: " + price),
error -> System.err.println("에러 발생: " + error.getMessage())
);
stockFianceResponseOutput.subscribe(
price -> System.out.println("현재 주가: " + price),
error -> System.err.println("에러 발생: " + error.getMessage())
);
stockDivideOutputMono.subscribe(
price -> System.out.println("현재 주가: " + price),
error -> System.err.println("에러 발생: " + error.getMessage())
);
// System.out.println(stockDivideOutputMono.subscribe());
// System.out.println(stockDivideOutputMono.block());
// System.out.println(stockFianceResponseOutput.subscribe().toString());
// System.out.println(stockFianceResponseOutput.block());
// System.out.println(stockDivideOutputMono);
// System.out.println(stockDuraionPriceOutput.block());
// System.out.println(stockDuraionPriceOutput.block());
// System.out.println(stockFianceResponseOutput.block());
// System.out.println(stockDivideOutputMono.block());
return null;
// return StockFindDetailResponseDTO.builder()
// .charts(Objects.requireNonNull(stockDuraionPriceOutput.block(),"char null 값입니다.").getOutput2())
// .ROE(Objects.requireNonNull(stockFianceResponseOutput.block()).getOutput().get(0).getRoe())
// .PSR(getPSR(Objects.requireNonNull(stockDuraionPriceOutput.block()),
// Objects.requireNonNull(stockFianceResponseOutput.block())))
// .PBR(Objects.requireNonNull(stockDuraionPriceOutput.block()).getOutput1().getPbr())
// .changeSign(Objects.requireNonNull(stockDuraionPriceOutput.block()).getOutput1().getChangeSign())
// .changePrice(Objects.requireNonNull(stockDuraionPriceOutput.block()).getOutput1().getChangePrice())
// .changeRate(Objects.requireNonNull(stockDuraionPriceOutput.block()).getOutput1().getChangeRate())
// .marketCapitalization(
// Objects.requireNonNull(stockDuraionPriceOutput.block()).getOutput1().getMarketCapitalization())
// .dividendYield(Objects.requireNonNull(stockDivideOutputMono.block()).getList().get(8).getDividendYield())
// .companyName(Objects.requireNonNull(stockDuraionPriceOutput.block()).getOutput1().getCompanyName())
// .currentPrice(Objects.requireNonNull(stockDuraionPriceOutput.block()).getOutput1().getCurrentPrice())
// .PER(Objects.requireNonNull(stockDuraionPriceOutput.block()).getOutput1().getPer())
// .build();
}


public Mono<StockDuraionPriceOutput> getApiCurrentPrice(String ticker,int year){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
Date endDate = new Date();
Date startDate = new Date();

String endDateString;
String startDateString;
String fid_period_div_code;
if(year == 0 ){
startDate.setMonth(startDate.getMonth()-1);
fid_period_div_code = "D";
}else if(year == 1){
startDate.setYear(startDate.getYear()-1);
fid_period_div_code = "W";
} else {
startDate.setYear(startDate.getYear()-1);
fid_period_div_code = "W";
public StockFindDetailResponseDTO getStockDetail(String ticker, String year) {
StockDuraionPriceOutput stockDuraionPriceOutput = stockRepository.getApiCurrentPrice(ticker, year);
StockDivideOutput stockDivideOutputMono = stockRepository.getApiDivide(ticker);
StockFianceResponseOutput stockFianceResponseOutput = stockRepository.getApiFiance(ticker);
System.out.println(stockFianceResponseOutput);
System.out.println(stockDuraionPriceOutput);
System.out.println(stockDivideOutputMono);
return StockFindDetailResponseDTO.builder()
.charts(stockDuraionPriceOutput.getOutput2())
.ROE(stockFianceResponseOutput.getOutput().get(0).getRoe())
.PBR(stockDuraionPriceOutput.getOutput1().getPbr())
.PSR(getPSR(stockDuraionPriceOutput,stockFianceResponseOutput))
.changeSign(stockDuraionPriceOutput.getOutput1().getChangeSign())
.changePrice(stockDuraionPriceOutput.getOutput1().getChangePrice())
.changeRate(stockDuraionPriceOutput.getOutput1().getChangeRate())
.marketCapitalization(stockDuraionPriceOutput.getOutput1().getMarketCapitalization())
.dividendYield(stockDivideOutputMono.getList().get(8).getDividendYield())
.companyName(stockDuraionPriceOutput.getOutput1().getCompanyName())
.currentPrice(stockDuraionPriceOutput.getOutput1().getCurrentPrice())
.PER(stockDuraionPriceOutput.getOutput1().getPer())
.build();
}
public String getPSR(StockDuraionPriceOutput stockDuraionPriceOutput, StockFianceResponseOutput stockFianceResponseOutput){
return stockDuraionPriceOutput.getOutput1().getCurrentPrice()*stockFianceResponseOutput.getOutput().get(0).getSps() + "";
}
endDateString = simpleDateFormat.format(endDate);
startDateString = simpleDateFormat.format(startDate);

String uri = "/uapi/domestic-stock/v1/quotations/inquire-price";
Mono<StockDuraionPriceOutput> mono = webClientP.get().uri(
uriBuilder -> {
return uriBuilder.path(uri)
.queryParam("fid_cond_mrkt_div_code","J")
.queryParam("fid_input_iscd",ticker)
.queryParam("fid_input_date_1",startDateString)
.queryParam("fid_input_date_2",endDateString)
.queryParam("fid_period_div_code",fid_period_div_code)
.queryParam("fid_org_adj_prc",0).build();
})
.retrieve()
.bodyToMono(StockDuraionPriceOutput.class);
mono.subscribe(
price -> System.out.println("현재 주가: " + price),
error -> System.err.println("에러 발생: " + error.getMessage())
);
return mono;
// mono.subscribe(
// price -> System.out.println("현재 주가: " + price),
// error -> System.err.println("에러 발생: " + error.getMessage())
// );
// System.out.println(mono);
// return mono;
}

public Mono<StockFianceResponseOutput> getApiFiance(String ticker){
String uri = "/uapi/domestic-stock/v1/finance/financial-ratio";
Mono<StockFianceResponseOutput> mono;
return webClientF.get().uri(
uriBuilder -> {
URI build = uriBuilder.path(uri)
.queryParam("fid_cond_mrkt_div_code", "J")
.queryParam("fid_input_iscd", ticker)
.queryParam("fid_div_cls_code", "0").build();
System.out.println(build);
return uriBuilder.build();
})
.retrieve().bodyToMono(StockFianceResponseOutput.class);
// mono.subscribe(
// price -> System.out.println("현재 주가: " + price),
// error -> System.err.println("에러 발생: " + error.getMessage())
// );
// System.out.println(mono);
// return mono;
}
public StockFindCurrentResponseDTO getStockCurrent(String ticker) {
StockDuraionPriceOutput stockDuraionPriceOutput = stockRepository.getApiCurrentPrice(ticker, "0");
return StockFindCurrentResponseDTO.builder()
.currentPrice(String.valueOf(stockDuraionPriceOutput.getOutput1().getCurrentPrice()))
.changePrice(stockDuraionPriceOutput.getOutput1().getChangePrice())
.changeRate(stockDuraionPriceOutput.getOutput1().getChangeRate())
.changeSign(stockDuraionPriceOutput.getOutput1().getChangeSign())
.build();
}

public Mono<StockDivideOutput> getApiDivide(String ticker){
Mono<StockDivideOutput> mono;
return webDartClient.get().uri(
uriBuilder1 -> {
UriBuilder uriBuilder =
uriBuilder1.path("")
.queryParam("corp_code","00126380")
.queryParam("bsns_year","2023")
.queryParam("reprt_code","11011")
;
return uriBuilder.build();
}).retrieve().bodyToMono(StockDivideOutput.class);
// mono.subscribe(
// price -> System.out.println("현재 주가: " + price),
// error -> System.err.println("에러 발생: " + error.getMessage())
// );
// System.out.println(mono);
// return mono;
}
public String getPSR(StockDuraionPriceOutput stockDuraionPriceOutput, StockFianceResponseOutput stockFianceResponseOutput){
return stockDuraionPriceOutput.getOutput1().getCurrentPrice()*stockFianceResponseOutput.getOutput().get(0).getSps() + "";
}
}