Merge pull request 'dev' (#374) from dev into prd-deploy

Reviewed-on: #374
This commit is contained in:
ysCha 2026-02-05 14:55:16 +09:00
commit a451372142
2 changed files with 138 additions and 72 deletions

View File

@ -4,8 +4,11 @@ import com.fasterxml.jackson.core.type.TypeReference;
import com.interplug.qcast.biz.displayItem.DisplayItemService; import com.interplug.qcast.biz.displayItem.DisplayItemService;
import com.interplug.qcast.biz.displayItem.dto.ItemSyncResponse; import com.interplug.qcast.biz.displayItem.dto.ItemSyncResponse;
import com.interplug.qcast.util.InterfaceQsp; import com.interplug.qcast.util.InterfaceQsp;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import org.springframework.batch.core.Job; import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecutionListener; import org.springframework.batch.core.JobExecutionListener;
import org.springframework.batch.core.Step; import org.springframework.batch.core.Step;
@ -34,6 +37,9 @@ public class MaterialConfiguration implements JobExecutionListener {
@Value("${qsp.master-material-batch-url}") @Value("${qsp.master-material-batch-url}")
private String qspInterfaceUrl; private String qspInterfaceUrl;
@Value("${qsp.master-material-batch-page-size:1000}")
private int pageSize;
public MaterialConfiguration(DisplayItemService displayItemService, InterfaceQsp interfaceQsp) { public MaterialConfiguration(DisplayItemService displayItemService, InterfaceQsp interfaceQsp) {
this.displayItemService = displayItemService; this.displayItemService = displayItemService;
this.interfaceQsp = interfaceQsp; this.interfaceQsp = interfaceQsp;
@ -58,12 +64,32 @@ public class MaterialConfiguration implements JobExecutionListener {
@Bean @Bean
@StepScope @StepScope
public ListItemReader<ItemSyncResponse> materialReader() throws Exception { public ListItemReader<ItemSyncResponse> materialReader() throws Exception {
this.itemSyncList = List<ItemSyncResponse> aggregated = new ArrayList<>();
int page = 1;
while (true) {
Map<String, Object> params = new HashMap<>();
params.put("allYn", "N");
params.put("page", page);
params.put("size", pageSize);
List<ItemSyncResponse> pageItems =
interfaceQsp.callApiData( interfaceQsp.callApiData(
HttpMethod.GET, HttpMethod.GET,
qspInterfaceUrl + "?allYn=N", qspInterfaceUrl,
null, params,
new TypeReference<List<ItemSyncResponse>>() {}); new TypeReference<List<ItemSyncResponse>>() {});
if (pageItems == null || pageItems.isEmpty()) {
break;
}
aggregated.addAll(pageItems);
if (pageItems.size() < pageSize) {
break;
}
page++;
}
this.itemSyncList = aggregated;
return (itemSyncList != null) return (itemSyncList != null)
? new ListItemReader<>(itemSyncList) ? new ListItemReader<>(itemSyncList)
: new ListItemReader<>(Collections.emptyList()); : new ListItemReader<>(Collections.emptyList());

View File

@ -45,6 +45,8 @@ public class InterfaceQsp {
OutputStreamWriter osw = null; OutputStreamWriter osw = null;
BufferedReader br = null; BufferedReader br = null;
StringBuilder sb = null; StringBuilder sb = null;
long startAt = System.currentTimeMillis();
String requestType = requestObject == null ? "none" : requestObject.getClass().getSimpleName();
try { try {
@ -60,6 +62,11 @@ public class InterfaceQsp {
apiPath += "?" + queryString; // 쿼리 스트링 추가 apiPath += "?" + queryString; // 쿼리 스트링 추가
} }
log.debug(
"QSP API call start: method={}, url={}, requestType={}",
httpMethod,
apiPath,
requestType);
url = new URL(apiPath); url = new URL(apiPath);
con = (HttpURLConnection) url.openConnection(); con = (HttpURLConnection) url.openConnection();
con.setConnectTimeout(120000); // 서버에 연결되는 Timeout 시간 설정 con.setConnectTimeout(120000); // 서버에 연결되는 Timeout 시간 설정
@ -84,7 +91,8 @@ public class InterfaceQsp {
} }
sb = new StringBuilder(); sb = new StringBuilder();
if (con.getResponseCode() == HttpURLConnection.HTTP_OK) { int status = con.getResponseCode();
if (status == HttpURLConnection.HTTP_OK) {
br = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8")); br = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8"));
String line; String line;
@ -92,7 +100,19 @@ public class InterfaceQsp {
sb.append(line); sb.append(line);
} }
} }
log.debug(
"QSP API call end: method={}, url={}, status={}, durationMs={}",
httpMethod,
apiPath,
status,
System.currentTimeMillis() - startAt);
} catch (Exception e) { } catch (Exception e) {
log.error(
"QSP API call failed: method={}, url={}, durationMs={}",
httpMethod,
apiPath,
System.currentTimeMillis() - startAt,
e);
throw e; throw e;
} finally { } finally {
try { try {
@ -166,8 +186,15 @@ public class InterfaceQsp {
BufferedReader br = null; BufferedReader br = null;
byte[] bt = null; byte[] bt = null;
long startAt = System.currentTimeMillis();
String requestType = requestObject == null ? "none" : requestObject.getClass().getSimpleName();
try { try {
log.debug(
"QSP API call start: method={}, url={}, requestType={}",
httpMethod,
apiPath,
requestType);
url = new URL(apiPath); url = new URL(apiPath);
con = (HttpURLConnection) url.openConnection(); con = (HttpURLConnection) url.openConnection();
con.setConnectTimeout(30000); // 서버에 연결되는 Timeout 시간 설정 con.setConnectTimeout(30000); // 서버에 연결되는 Timeout 시간 설정
@ -190,7 +217,8 @@ public class InterfaceQsp {
osw.flush(); osw.flush();
} }
} }
if (con.getResponseCode() == HttpURLConnection.HTTP_OK) { int status = con.getResponseCode();
if (status == HttpURLConnection.HTTP_OK) {
// response 헤더 결과 셋팅 // response 헤더 결과 셋팅
result.put("type", con.getHeaderField("Content-Type")); result.put("type", con.getHeaderField("Content-Type"));
result.put("disposition", con.getHeaderField("Content-Disposition")); result.put("disposition", con.getHeaderField("Content-Disposition"));
@ -205,7 +233,19 @@ public class InterfaceQsp {
} }
bt = outputStream.toByteArray(); // 파일 데이터 반환 bt = outputStream.toByteArray(); // 파일 데이터 반환
} }
log.debug(
"QSP API call end: method={}, url={}, status={}, durationMs={}",
httpMethod,
apiPath,
status,
System.currentTimeMillis() - startAt);
} catch (Exception e) { } catch (Exception e) {
log.error(
"QSP API call failed: method={}, url={}, durationMs={}",
httpMethod,
apiPath,
System.currentTimeMillis() - startAt,
e);
throw e; throw e;
} finally { } finally {
try { try {