diff --git a/src/main/java/com/interplug/qcast/batch/master/StoreJobConfiguration.java b/src/main/java/com/interplug/qcast/batch/master/StoreJobConfiguration.java index ed2443a7..2155bfb1 100644 --- a/src/main/java/com/interplug/qcast/batch/master/StoreJobConfiguration.java +++ b/src/main/java/com/interplug/qcast/batch/master/StoreJobConfiguration.java @@ -7,6 +7,7 @@ import com.interplug.qcast.biz.storeFavorite.dto.StoreFavoriteRequest; import com.interplug.qcast.biz.user.UserService; import com.interplug.qcast.biz.user.dto.StoreRequest; import com.interplug.qcast.biz.user.dto.StoreSyncResponse; +import com.interplug.qcast.biz.user.dto.StoreSyncResquest; import com.interplug.qcast.biz.user.dto.UserRequest; import com.interplug.qcast.util.InterfaceQsp; import java.util.Collections; @@ -56,9 +57,12 @@ public class StoreJobConfiguration implements JobExecutionListener { public void beforeJob(JobExecution jobExecution) { log.info("Job 시작: 초기화 메서드 호출 중..."); try { + StoreSyncResquest storeSyncResquest = new StoreSyncResquest(); + storeSyncResquest.setAllYn("N"); // 전체가 아닌 날짜조건으로 조회 + this.storeSyncResponse = interfaceQsp.callApiData( - HttpMethod.GET, qspMasterStoreBatchUrl, null, StoreSyncResponse.class); + HttpMethod.GET, qspMasterStoreBatchUrl, storeSyncResquest, StoreSyncResponse.class); log.info("API 호출 완료, 항목 수: {}", this.storeSyncResponse.getStoreList().size()); } catch (Exception e) { log.error("storeSyncResponse 갱신 중 오류: {}", e.getMessage()); diff --git a/src/main/java/com/interplug/qcast/biz/user/UserController.java b/src/main/java/com/interplug/qcast/biz/user/UserController.java index 3c14ac84..c9c8de64 100644 --- a/src/main/java/com/interplug/qcast/biz/user/UserController.java +++ b/src/main/java/com/interplug/qcast/biz/user/UserController.java @@ -1,64 +1,79 @@ package com.interplug.qcast.biz.user; import com.interplug.qcast.biz.user.dto.StoreRequest; +import com.interplug.qcast.biz.user.dto.StoreSyncResquest; import com.interplug.qcast.biz.user.dto.UserRequest; import com.interplug.qcast.biz.user.dto.UserResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; -import java.util.List; - @Slf4j @RestController @RequestMapping("/api/user") @RequiredArgsConstructor @Tag(name = "UserController", description = "User 관련 API") public class UserController { - private final UserService userService; + private final UserService userService; - @Operation(description = "판매점 정보를 등록/수정 한다.(동기화)") - @PutMapping("/store-save") - @ResponseStatus(HttpStatus.OK) - public UserResponse setStoreSave(@RequestBody StoreRequest storeReq) throws Exception { - UserResponse userResponse = new UserResponse(); - - int resultCnt = userService.setStoreSave(storeReq); - - if (resultCnt > 0) userResponse.setCode("200"); - else userResponse.setCode("500"); - - return userResponse; + @Operation(description = "전체 판매점/사용자 정보를 동기화 한다.") + @GetMapping("/all-store-additional") + @ResponseStatus(HttpStatus.OK) + public UserResponse SetAllStoreAdditional(StoreSyncResquest storeSyncResquest) throws Exception { + UserResponse userResponse = new UserResponse(); + try { + userService.setAllStoreAdditional(storeSyncResquest); + userResponse.setCode("200"); + } catch (Exception e) { + userResponse.setCode("500"); + userResponse.setMessage(e.getMessage()); } + return userResponse; + } - @Operation(description = "user 정보를 등록/수정 한다.(동기화)") - @PutMapping("/user-save") - @ResponseStatus(HttpStatus.OK) - public UserResponse setUserSave(@RequestBody List userReqList) throws Exception { - UserResponse userResponse = new UserResponse(); + @Operation(description = "판매점 정보를 등록/수정 한다.(동기화)") + @PutMapping("/store-save") + @ResponseStatus(HttpStatus.OK) + public UserResponse setStoreSave(@RequestBody StoreRequest storeReq) throws Exception { + UserResponse userResponse = new UserResponse(); - int resultCnt = userService.setUserSave(userReqList); + int resultCnt = userService.setStoreSave(storeReq); - if (resultCnt > 0) userResponse.setCode("200"); - else userResponse.setCode("500"); + if (resultCnt > 0) userResponse.setCode("200"); + else userResponse.setCode("500"); - return userResponse; - } + return userResponse; + } - @Operation(description = "판매점 Sap 정보를 등록/수정 한다.(동기화)") - @PutMapping("/store-sap-info-save") - @ResponseStatus(HttpStatus.OK) - public UserResponse setStoreSapCdSave(@RequestBody StoreRequest storeReq) throws Exception { - UserResponse userResponse = new UserResponse(); + @Operation(description = "user 정보를 등록/수정 한다.(동기화)") + @PutMapping("/user-save") + @ResponseStatus(HttpStatus.OK) + public UserResponse setUserSave(@RequestBody List userReqList) throws Exception { + UserResponse userResponse = new UserResponse(); - int resultCnt = userService.setStoreSapCdSave(storeReq); + int resultCnt = userService.setUserSave(userReqList); - if (resultCnt > 0) userResponse.setCode("200"); - else userResponse.setCode("500"); + if (resultCnt > 0) userResponse.setCode("200"); + else userResponse.setCode("500"); - return userResponse; - } + return userResponse; + } + + @Operation(description = "판매점 Sap 정보를 등록/수정 한다.(동기화)") + @PutMapping("/store-sap-info-save") + @ResponseStatus(HttpStatus.OK) + public UserResponse setStoreSapCdSave(@RequestBody StoreRequest storeReq) throws Exception { + UserResponse userResponse = new UserResponse(); + + int resultCnt = userService.setStoreSapCdSave(storeReq); + + if (resultCnt > 0) userResponse.setCode("200"); + else userResponse.setCode("500"); + + return userResponse; + } } diff --git a/src/main/java/com/interplug/qcast/biz/user/UserService.java b/src/main/java/com/interplug/qcast/biz/user/UserService.java index 45ef1602..e97a138c 100644 --- a/src/main/java/com/interplug/qcast/biz/user/UserService.java +++ b/src/main/java/com/interplug/qcast/biz/user/UserService.java @@ -1,12 +1,12 @@ package com.interplug.qcast.biz.user; -import com.interplug.qcast.biz.user.dto.AdminUserSyncResponse; -import com.interplug.qcast.biz.user.dto.BusinessChargerSyncResponse; -import com.interplug.qcast.biz.user.dto.StoreRequest; -import com.interplug.qcast.biz.user.dto.UserRequest; +import com.interplug.qcast.biz.user.dto.*; +import com.interplug.qcast.util.InterfaceQsp; import java.util.List; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpMethod; import org.springframework.stereotype.Service; @Slf4j @@ -14,6 +14,10 @@ import org.springframework.stereotype.Service; @RequiredArgsConstructor public class UserService { private final UserMapper userMapper; + private final InterfaceQsp interfaceQsp; + + @Value("${qsp.master-store-batch-url}") + private String qspMasterStoreBatchUrl; /** * 판매점 정보 저장 @@ -120,4 +124,29 @@ public class UserService { } return cnt; } + + /** + * 전체 판매점,사용자 정보 동기화 + * + * @return + * @throws Exception + */ + public void setAllStoreAdditional(StoreSyncResquest storeSyncResquest) throws Exception { + + StoreSyncResponse storeSyncResponse = + interfaceQsp.callApiData( + HttpMethod.GET, qspMasterStoreBatchUrl, storeSyncResquest, StoreSyncResponse.class); + + List storeList = storeSyncResponse.getStoreList(); + for (StoreRequest storeRequest : storeList) { + userMapper.setStoreSave(storeRequest); + userMapper.setStoreSapCdSave(storeRequest); + userMapper.setStoreNorthModuleSave(storeRequest); + } + + List userList = storeSyncResponse.getUserList(); + for (UserRequest userRequest : userList) { + userMapper.setUserSave(userRequest); + } + } } diff --git a/src/main/java/com/interplug/qcast/biz/user/dto/StoreSyncResquest.java b/src/main/java/com/interplug/qcast/biz/user/dto/StoreSyncResquest.java new file mode 100644 index 00000000..b0e01e82 --- /dev/null +++ b/src/main/java/com/interplug/qcast/biz/user/dto/StoreSyncResquest.java @@ -0,0 +1,13 @@ +package com.interplug.qcast.biz.user.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class StoreSyncResquest { + + @Schema(description = "전체여부") + private String allYn; +} diff --git a/src/main/java/com/interplug/qcast/util/InterfaceQsp.java b/src/main/java/com/interplug/qcast/util/InterfaceQsp.java index da371df9..c6fccb8f 100644 --- a/src/main/java/com/interplug/qcast/util/InterfaceQsp.java +++ b/src/main/java/com/interplug/qcast/util/InterfaceQsp.java @@ -44,10 +44,23 @@ public class InterfaceQsp { StringBuilder sb = null; try { + + // GET 요청 시 requestObject를 쿼리 스트링으로 변환 + if (HttpMethod.GET.equals(httpMethod) && requestObject != null) { + ObjectMapper om = new ObjectMapper(); + Map params = om.convertValue(requestObject, Map.class); // Object -> Map 변환 + String queryString = + params.entrySet().stream() + .map(entry -> entry.getKey() + "=" + entry.getValue()) + .reduce((p1, p2) -> p1 + "&" + p2) + .orElse(""); + apiPath += "?" + queryString; // 쿼리 스트링 추가 + } + url = new URL(apiPath); con = (HttpURLConnection) url.openConnection(); - con.setConnectTimeout(30000); // 서버에 연결되는 Timeout 시간 설정 - con.setReadTimeout(30000); // InputStream 읽어 오는 Timeout 시간 설정 + con.setConnectTimeout(120000); // 서버에 연결되는 Timeout 시간 설정 + con.setReadTimeout(120000); // InputStream 읽어 오는 Timeout 시간 설정 con.setRequestMethod(httpMethod.toString()); con.setRequestProperty("Content-Type", "application/json"); con.setDoInput(true);