diff --git a/WebContent/jsp/onl/admin/adapter/adapterManDetail.jsp b/WebContent/jsp/onl/admin/adapter/adapterManDetail.jsp index e082c21..6650bf6 100644 --- a/WebContent/jsp/onl/admin/adapter/adapterManDetail.jsp +++ b/WebContent/jsp/onl/admin/adapter/adapterManDetail.jsp @@ -649,6 +649,10 @@ $(document).ready(function() { type : "POST", url:url, data:postData, + beforeSend: function() { + $("[id^='btn_']").prop("disabled", true); + $("#btn_modify").text("처리중 . . . . ."); + }, success:function(args){ if(args.status=="error"){ alert("<%=localeMessage.getString("common.intizMsg")%>"+args.message); @@ -659,7 +663,11 @@ $(document).ready(function() { }, error:function(e){ alert(e.responseText); - } + }, + complete: function() { + $("[id^='btn_']").prop("disabled", false); + $("#btn_modify").text("수정"); + } }); }); $("#btn_clone,#btn_clone_new").click(function(){ @@ -696,6 +704,10 @@ $(document).ready(function() { type : "POST", url:url, data:postData, + beforeSend: function() { + $("[id^='btn_']").prop("disabled", true); + $("#btn_clone").text("처리중 . . . . ."); + }, success:function(args){ alert("<%=localeMessage.getString("common.croneMsg")%>"); //goNav(returnUrl);//LIST로 이동 @@ -715,7 +727,11 @@ $(document).ready(function() { alert(error); } } - } + }, + complete: function() { + $("[id^='btn_']").prop("disabled", false); + $("#btn_clone").text("복제"); + } }); }); $("#btn_delete").click(function(){ @@ -726,6 +742,10 @@ $(document).ready(function() { type : "POST", url:url, data:postData, + beforeSend: function() { + $("[id^='btn_']").prop("disabled", true); + $("#btn_delete").text("처리중 . . . . ."); + }, success:function(args){ if(args.status=="error"){ alert("<%=localeMessage.getString("common.intizMsg")%>"+args.message); @@ -736,7 +756,11 @@ $(document).ready(function() { }, error:function(e){ alert(e.responseText); - } + }, + complete: function() { + $("[id^='btn_']").prop("disabled", false); + $("#btn_delete").text("삭제"); + } }); }else{ return false; diff --git a/WebContent/jsp/onl/transaction/apim/apiInterfaceMan.jsp b/WebContent/jsp/onl/transaction/apim/apiInterfaceMan.jsp index 83f8050..d415e54 100644 --- a/WebContent/jsp/onl/transaction/apim/apiInterfaceMan.jsp +++ b/WebContent/jsp/onl/transaction/apim/apiInterfaceMan.jsp @@ -233,43 +233,129 @@ window.alert('이관 대상 API 성공['+successCount+']건, 실패['+failedCount+']건 서버에 다운로드 완료'); }); - buttonControl(); + buttonControl(); - FilePond.registerPlugin(FilePondPluginFileValidateType); - // FilePond 인스턴스 생성 - const pond = FilePond.create(document.querySelector('.filepond'), { - instantUpload: false, // 파일을 즉시 업로드하지 않음 - allowRevert: false, - acceptedFileTypes: ['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/json'], - // 서버 설정 - server: { - process: { - url: url_file + '?cmd=LIST_IMPORT_FILE&serviceType=' + sessionStorage["serviceType"], - method: 'POST', - // 필요한 경우 headers나 다른 설정 추가 + // 25.11.25 파일 가져오기 할 때 중복 검사 기능추가. + FilePond.registerPlugin(FilePondPluginFileValidateType); + + let uploadErrors = []; + let processedCount = 0; + let totalFiles = 0; + + // FilePond 인스턴스 생성 + const pond = FilePond.create(document.querySelector('.filepond'), { + instantUpload: false, + allowRevert: false, + acceptedFileTypes: ['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/json'], + + // 서버 설정 + server: { + process: { + url: url_file + '?cmd=LIST_IMPORT_FILE&serviceType=' + sessionStorage["serviceType"], + method: 'POST', + ondata: (formData) => { + const chkBox = document.querySelector('#uploadModal input[name="importDupliCheck"]'); + const isChecked = chkBox ? chkBox.checked : false; + formData.append('importDupliCheck', isChecked); + return formData; }, - // revert, load, restore, fetch 설정 (필요한 경우) - }, - // 다른 필요한 옵션 추가 - }); - - pond.on('processfiles', () => { - // 여기에 모든 파일 업로드 완료 후 실행할 코드를 작성 - console.debug('모든 파일의 처리가 완료되었습니다.'); - $('#btn_search').click(); - }); - - // "업로드 시작" 버튼 클릭 이벤트 핸들러 - document.getElementById('uploadButton').addEventListener('click', function () { - pond.processFiles(); // 선택된 모든 파일을 업로드 - }); - - // 모달 닫기 이벤트 핸들러 - $('#uploadModal').on('hidden.bs.modal', function (e) { - pond.removeFiles(); // 모달이 닫힐 때 파일 목록에서 모든 파일 제거 - }); + onerror: (response) => { + return response; + } + } + } }); + // 파일 처리 결과 수신 + pond.on('processfile', (error, file) => { + processedCount++; + + if (error) { + let errorMsg = ''; + + if (error.body) { + errorMsg = error.body; + } else if (typeof error === 'string') { + errorMsg = error; + } else { + errorMsg = '가져오기 중 오류가 발생 했습니다.'; + } + + let fileName = 'UnKnown'; + if (file) { + if(file.filename) fileName = file.filename; + else if (file.file && file.file.name) fileName = file.file.name; + } + + uploadErrors.push('파일명 [ ' + fileName + '] \n MESSAGE : ' + errorMsg); + } + + // 모든 파일 처리 완료 시 + if (processedCount >= totalFiles) { + setTimeout(() => { + if (uploadErrors.length > 0) { + const msg = "파일 처리 중 오류가 발생했습니다. \n" + uploadErrors.join('\n'); + + // 실패 시 변수 초기화 + uploadErrors = []; + processedCount = 0; + + $('#btn_search').click(); + alert(msg); + + } else { + alert('모든 파일이 성공적으로 업로드 되었습니다.'); + $('#uploadModal').modal('hide'); + $('#btn_search').click(); + } + }, 100); + } + }); + + // 업로드 버튼 클릭 이벤트 + document.getElementById('uploadButton').addEventListener('click', function(e) { + e.stopPropagation(); + + uploadErrors = []; + processedCount = 0; + + const currentFiles = pond.getFiles(); + totalFiles = currentFiles.length; + + if (totalFiles === 0) { + alert("업로드 할 파일을 선택하세요."); + return; + } + + const chkBox = document.getElementById('importDupliCheck'); + + if (chkBox && !chkBox.checked) { + if (!confirm("중복검사를 체크하지 않는 경우 기존 값은 덮어 씌워집니다. \n진행하시겠습니까?")) { + return; + } + } + + pond.processFiles(); + }); + + // 모달이 닫힐 때만 초기화 + $('#uploadModal').on('hidden.bs.modal', function(e) { + resetPond(); + }); + + function resetPond() { + pond.removeFiles(); + + const chkBox = document.getElementById('importDupliCheck'); + if (chkBox) chkBox.checked = false; + + processedCount = 0; + totalFiles = 0; + uploadErrors = []; + } + + }); + @@ -329,6 +415,10 @@ diff --git a/WebContent/jsp/onl/transaction/apim/apiInterfaceManDetail.jsp b/WebContent/jsp/onl/transaction/apim/apiInterfaceManDetail.jsp index 09bb0f7..d6de11e 100644 --- a/WebContent/jsp/onl/transaction/apim/apiInterfaceManDetail.jsp +++ b/WebContent/jsp/onl/transaction/apim/apiInterfaceManDetail.jsp @@ -867,6 +867,10 @@ type: "POST", url:url, data: postData, + beforeSend: function() { + $("[id^='btn_']").prop("disabled", true); + $("#btn_modify").text("처리중 . . . . ."); + }, success:function(message){ alert("저장 되었습니다. \n\n[실시간 반영 결과]\n"+JSON.stringify(message)); if (typeof callback === 'function') { @@ -877,6 +881,10 @@ }, error:function(xhr, status, errorMsg){ alert(JSON.parse(xhr.responseText).errorMsg); + }, + complete: function() { + $("[id^='btn_']").prop("disabled", false); + $("#btn_modify").text("수정"); } }); } @@ -936,6 +944,11 @@ type : "POST", url:url, data:postData, + beforeSend: function() { + $("[id^='btn_']").prop("disabled", true); + $("#btn_delete").text("처리중 . . . . ."); + }, + success:function(args){ alert("삭제 되었습니다."); goNav(returnUrl);//LIST로 이동 @@ -943,6 +956,10 @@ }, error:function(e){ alert(e.responseText); + }, + complete: function() { + $("[id^='btn_']").prop("disabled", false); + $("#btn_delete").text("삭제"); } }); }); @@ -1203,6 +1220,10 @@ newInboundHttpMethod, newInboundRestPath, }, + beforeSend: function() { + $("[id^='btn_']").prop("disabled", true); + $("#doCloneInterfaceButton").text("처리중 . . . . ."); + }, success: function () { alert("["+orgApiInterfaceId+"] => ["+newBizCode+"]["+newApiInterfaceId+"] 복제 완료."); $('#cloneInterfaceModal').modal('hide'); @@ -1210,19 +1231,25 @@ }, error: function (e) { alert(e.responseText); + }, + complete: function() { + $("[id^='btn_']").prop("disabled", false); + $("#doCloneInterfaceButton").text("복제"); } }); }); - $("#btn_excel_export").click(function () { - const url = url_excel + '?cmd=DETAIL_EXPORT_TO_EXCEL'; - const params = new URLSearchParams(); - params.append('eaiSvcName', getFullSvcName()); - - downloadFiles(url, params); - - return false; - }); + // 25.11.25 엑셀다운로드 사용안함. +// $("#btn_excel_export").click(function () { +// const url = url_excel + '?cmd=DETAIL_EXPORT_TO_EXCEL'; +// const params = new URLSearchParams(); +// params.append('eaiSvcName', getFullSvcName()); +// downloadFiles(url, params); +// return false; +// }); + + + // JSON 다운로드 $("#btn_json_export").click(function () { const uri = url + '?cmd=DETAIL_EXPORT_TO_JSON'; const params = new URLSearchParams(); diff --git a/WebContent/jsp/onl/transaction/apim/apiSpecManPopup.jsp b/WebContent/jsp/onl/transaction/apim/apiSpecManPopup.jsp index d6bd2a6..c34dd06 100644 --- a/WebContent/jsp/onl/transaction/apim/apiSpecManPopup.jsp +++ b/WebContent/jsp/onl/transaction/apim/apiSpecManPopup.jsp @@ -194,11 +194,19 @@ type: "POST", url: url, data: postData, + beforeSend: function() { + $("[id^='btn_']").prop("disabled", true); + $("#btn_save").text("처리중 . . . . ."); + }, success: function () { alert("<%= localeMessage.getString("common.saveMsg") %>"); }, error: function (e) { alert(e.responseText); + }, + complate: function() { + $("[id^='btn_']").prop("disabled", false); + $("#btn_save").text("수정"); } }); } @@ -258,12 +266,20 @@ type: "POST", url: url, data: { cmd: 'DELETE', apiId: $('#apiId').val() }, + beforeSend: function() { + $("[id^='btn_']").prop("disabled", true); + $("#btn_delete").text("처리중 . . . . ."); + }, success: function() { alert("<%= localeMessage.getString("common.deleteMsg") %>"); window.close(); }, error: function(e) { alert(e.responseText); + }, + complate: function() { + $("[id^='btn_']").prop("disabled", false); + $("#btn_delete").text("삭제"); } }); } @@ -276,6 +292,10 @@ cmd: 'GENERATE_SPEC', apiId: $('#apiId').val() }, + beforeSend: function() { + $("[id^='btn_']").prop("disabled", true); + $("#btn_generate_spec").text("처리중 . . . . ."); + }, success: function(data) { // Update the editors with generated content $('#apiRequestSpec').summernote('code', data.requestSpec); @@ -288,6 +308,10 @@ }, error: function(e) { alert("API 스펙 생성 중 오류가 발생했습니다: " + e.responseText); + }, + complate: function() { + $("[id^='btn_']").prop("disabled", false); + $("#btn_generate_spec").text("SPEC 자동 생성"); } }); } diff --git a/src/main/java/com/eactive/eai/rms/data/entity/onl/unifbwk/UnifBwkTpService.java b/src/main/java/com/eactive/eai/rms/data/entity/onl/unifbwk/UnifBwkTpService.java index d944e17..65950b8 100644 --- a/src/main/java/com/eactive/eai/rms/data/entity/onl/unifbwk/UnifBwkTpService.java +++ b/src/main/java/com/eactive/eai/rms/data/entity/onl/unifbwk/UnifBwkTpService.java @@ -20,6 +20,7 @@ import com.eactive.eai.data.entity.onl.unifbwk.UnifBwkTp; import com.eactive.eai.data.jpa.AbstractDataService; import com.eactive.eai.rms.data.entity.onl.bzwkdstcd.QUserBusiness; import com.eactive.eai.rms.onl.manage.comm.unifbwk.UnifbwkUISearch; +import com.querydsl.core.BooleanBuilder; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; @@ -54,12 +55,27 @@ public class UnifBwkTpService extends AbstractDataService findAllwithSearch(String searchBzwkName) { QUnifBwkTp qUnifBwkTp = QUnifBwkTp.unifBwkTp; + + BooleanBuilder builder = new BooleanBuilder(); + + if(StringUtils.isNotBlank(searchBzwkName)) { + + String[] keywords = searchBzwkName.split(","); + + for(String keyword : keywords) { + + String param = keyword.trim(); + + BooleanExpression predicate = QUnifBwkTp.unifBwkTp.bzwkdsticname + .containsIgnoreCase(param) + .or(qUnifBwkTp.eaibzwkdstcd.containsIgnoreCase(param)); + + builder.or(predicate); + } + + } - BooleanExpression predicate = QUnifBwkTp.unifBwkTp.bzwkdsticname - .containsIgnoreCase(searchBzwkName) - .or(qUnifBwkTp.eaibzwkdstcd.containsIgnoreCase(searchBzwkName)); - - return repository.findAll(predicate, qUnifBwkTp.eaibzwkdstcd.asc()); + return repository.findAll(builder, qUnifBwkTp.eaibzwkdstcd.asc()); } public Page findPageWithSearch(Pageable pageable, UnifbwkUISearch unifbwkUISearch) { diff --git a/src/main/java/com/eactive/eai/rms/onl/adapter/http/httpStatus/HttpStatusController.java b/src/main/java/com/eactive/eai/rms/onl/adapter/http/httpStatus/HttpStatusController.java index e4a45da..6ca21eb 100644 --- a/src/main/java/com/eactive/eai/rms/onl/adapter/http/httpStatus/HttpStatusController.java +++ b/src/main/java/com/eactive/eai/rms/onl/adapter/http/httpStatus/HttpStatusController.java @@ -104,7 +104,7 @@ public class HttpStatusController extends BaseController { list.removeIf(m -> m.get("adapterGroupSimple") == null || m.get("adapterGroupSimple") == ""); // 어댑터 업무그룹별 정렬 - String[] compareParam = { "adapterGroupName", "eaiSvrInstNm" }; + String[] compareParam = { "adapterStatus", "adapterGroupName", "eaiSvrInstNm" }; MapComparator comp = new MapComparator(compareParam); Collections.sort(list, comp); return ResponseEntity.ok(new GridResponse<>(list)); diff --git a/src/main/java/com/eactive/eai/rms/onl/adapter/socket/SocketProcessController.java b/src/main/java/com/eactive/eai/rms/onl/adapter/socket/SocketProcessController.java index e7400ce..29966a1 100644 --- a/src/main/java/com/eactive/eai/rms/onl/adapter/socket/SocketProcessController.java +++ b/src/main/java/com/eactive/eai/rms/onl/adapter/socket/SocketProcessController.java @@ -129,8 +129,8 @@ public class SocketProcessController extends BaseController{ pageVo.setTotalCount(list.size()); //어댑터 업무그룹별 정렬 - String[] compareParam = {"AdptrBzwkGroupName","EaiSevrInstncName"}; - + String[] compareParam = {"Status","AdptrBzwkGroupName","EaiSevrInstncName"}; + MapComparator comp = new MapComparator(compareParam); Collections.sort(list,comp); diff --git a/src/main/java/com/eactive/eai/rms/onl/adapter/socket/SocketStatusController.java b/src/main/java/com/eactive/eai/rms/onl/adapter/socket/SocketStatusController.java index 1bb219f..c91a1c0 100644 --- a/src/main/java/com/eactive/eai/rms/onl/adapter/socket/SocketStatusController.java +++ b/src/main/java/com/eactive/eai/rms/onl/adapter/socket/SocketStatusController.java @@ -91,7 +91,7 @@ public class SocketStatusController extends BaseController { List urls = new ArrayList<>(); for (EAIServer serverMap : serverList) { String url = "http://" + serverMap.getEaisevrip() + ":" + serverMap.getSevrlsnportname() - + HostInfomationForm.WEB_AGENT_CONTEXT_PATH + AGENT_PAGE_STATUS + "?adapterType=SOC" + + HostInfomationForm.WEB_AGENT_CONTEXT_PATH + AGENT_PAGE_STATUS + "?adapterType=NET" + "&eaiSvrInstNm=" + serverMap.getEaisevrinstncname(); urls.add(url); logger.debug(url); @@ -120,7 +120,7 @@ public class SocketStatusController extends BaseController { List> list = gUtil.flushXmlToClient(urls); // 어댑터 업무그룹별 정렬 - String[] compareParam = { "AdptrBzwkGroupName", "EaiSevrInstncName", "AdptrBzwkName" }; + String[] compareParam = { "Status", "AdptrBzwkGroupName", "EaiSevrInstncName", "AdptrBzwkName" }; MapComparator comp = new MapComparator(compareParam); Collections.sort(list, comp); diff --git a/src/main/java/com/eactive/eai/rms/onl/transaction/apim/ApiInterfaceController.java b/src/main/java/com/eactive/eai/rms/onl/transaction/apim/ApiInterfaceController.java index ecb0b7c..0cfa70f 100644 --- a/src/main/java/com/eactive/eai/rms/onl/transaction/apim/ApiInterfaceController.java +++ b/src/main/java/com/eactive/eai/rms/onl/transaction/apim/ApiInterfaceController.java @@ -21,6 +21,7 @@ import org.springframework.dao.DuplicateKeyException; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @@ -208,7 +209,6 @@ public class ApiInterfaceController extends OnlBaseAnnotationController { } } - @PostMapping(value = "/onl/transaction/apim/apiInterfaceMan.excel", params = "cmd=DETAIL_EXPORT_TO_EXCEL") public ResponseEntity detailExportToExcel(@RequestParam(name = "eaiSvcName") String eaiSvcName) throws Exception { // 단일 파일 처리 @@ -228,20 +228,22 @@ public class ApiInterfaceController extends OnlBaseAnnotationController { } @PostMapping(value = "/onl/transaction/apim/apiInterfaceMan.file", params = "cmd=LIST_IMPORT_FILE") - public ResponseEntity listImportFromExcel(@RequestParam("file") MultipartFile file) { + public ResponseEntity listImportFromJson(@RequestParam("file") MultipartFile file, boolean importDupliCheck) { try { if (file != null) { String extension = FilenameUtils.getExtension(file.getOriginalFilename()).toLowerCase(); - if("xls".equals(extension) || "xlsx".equals(extension)){ - ApiInterfaceReloadSyncSet apiInterfaceExportSetUI = service.importInterfaceFromExcel(file); - reloadSync(apiInterfaceExportSetUI.getApiInterfaceUI()); - return ResponseEntity.ok().body("File successfully imported"); - } else if("json".equals(extension)) { - ApiInterfaceReloadSyncSet apiInterfaceExportSetUI = service.importInterfaceFromJson(file); + if("json".equals(extension)) { + ApiInterfaceReloadSyncSet apiInterfaceExportSetUI = service.importInterfaceFromJson(file, importDupliCheck); reloadSync(apiInterfaceExportSetUI.getApiInterfaceUI()); return ResponseEntity.ok().body("File successfully imported"); + } else { + throw new IllegalStateException("파일 [ " + file.getOriginalFilename() + " ] 의 확장자가 JSON 이 아닙니다. 다시 시도하세요."); } } + } catch (IllegalStateException dupEx) { + return ResponseEntity + .status(HttpStatus.CONFLICT) + .body(dupEx.getMessage()); } catch (Exception e) { logger.error("Error processing file", e); return ResponseEntity.internalServerError().body("Error processing file - "+e.getMessage() ); @@ -269,10 +271,10 @@ public class ApiInterfaceController extends OnlBaseAnnotationController { } @PostMapping(value = "/onl/transaction/apim/apiInterfaceMan.json", params = "cmd=CLONE") - public ResponseEntity cloneApiInterface(String orgApiInterfaceId, String newBizCode, String newApiInterfaceId, String newInboundHttpMethod, String newInboundRestPath) throws BizException { + public ResponseEntity cloneApiInterface(String orgApiInterfaceId, String newBizCode, String newApiInterfaceId, String newInboundHttpMethod, String newInboundRestPath, boolean importDupliCheck) throws BizException { try { ApiInterfaceUI orgApiInterfaceUI = service.selectDetail(orgApiInterfaceId); - ApiInterfaceUI apiInterfaceUI = service.cloneApiInterface(orgApiInterfaceUI, newBizCode, newApiInterfaceId, newInboundHttpMethod, newInboundRestPath); + ApiInterfaceUI apiInterfaceUI = service.cloneApiInterface(orgApiInterfaceUI, newBizCode, newApiInterfaceId, newInboundHttpMethod, newInboundRestPath, importDupliCheck); Map resultMap = reloadSync(apiInterfaceUI); return ResponseEntity.ok(resultMap); } catch(Exception e) { diff --git a/src/main/java/com/eactive/eai/rms/onl/transaction/apim/ApiInterfaceService.java b/src/main/java/com/eactive/eai/rms/onl/transaction/apim/ApiInterfaceService.java index c401f87..416553c 100644 --- a/src/main/java/com/eactive/eai/rms/onl/transaction/apim/ApiInterfaceService.java +++ b/src/main/java/com/eactive/eai/rms/onl/transaction/apim/ApiInterfaceService.java @@ -588,6 +588,31 @@ public class ApiInterfaceService extends OnlBaseService { // 비표준에서 표준으로 가는 경우 표준으로 전환하기 위한 정보 이므로 내부로 갈 때만 처리 String eaiServiceName = vo.getEaiSvcName(); + + // 25.11.25 HS04 APIFULLPATH 추가. + List adapters = adapterGroup.getAdapters(); + + for (AdapterUI adapter : adapters) { + + // propGroup NULL 체크 + if(adapter.getAdapterPropGroup() == null) continue; + + List props = adapter.getAdapterPropGroup().getAdapterProps(); + + if (props != null) { + for (AdapterPropUI prop : props) { + if("API_PATH".equals(prop.getPrptyname())) { + + String fullPath = prop.getPrpty2val() + "/" + vo.getInboundRestPath(); + vo.setApiFullPath(fullPath); + + break; + } + } + } + + } + if (!"RST".equals(adapterGroup.getAdptrcd())) { throw new RuntimeException("인바운드 어댑터가 타입이 REST가 아닙니다. 타입을 확인하세요"); @@ -836,7 +861,8 @@ public class ApiInterfaceService extends OnlBaseService { apiInterfaceUI.setSendRecvType(sendRecvType); apiInterfaceUI.setInOutType(inOutType); } - + + /* 25.11.25 광주은행 엑셀 가져오기 기능 사용안함. public ApiInterfaceUI importInterfaceExcelSheet(Sheet sheet) throws Exception { String bizCode = PoiUtils.getCellValue(sheet, 1, 3); String elinkServiceId = PoiUtils.getCellValue(sheet, 1, 5); @@ -910,16 +936,27 @@ public class ApiInterfaceService extends OnlBaseService { return apiInterfaceUI; } + */ - private void importApiInterfaceUi(ApiInterfaceUI apiInterfaceUI) throws Exception { + private void importApiInterfaceUi(ApiInterfaceUI apiInterfaceUI, boolean importDupliCheck) throws Exception { String elinkServiceId = apiInterfaceUI.getEaiSvcName(); - if (!eaiMessageQueryService.existsById(elinkServiceId)) { - insert(apiInterfaceUI); + + // 중복검사 실시 + boolean elinkServiceIdExists = eaiMessageQueryService.existsById(elinkServiceId); + + // 아이디가 중복 일 경우, 중복검사 체크여부에 따라 업데이트 진행. + if (elinkServiceIdExists) { + // 중복검사 체크시 반환시킴 + if (importDupliCheck) { + throw new IllegalStateException("ApiInterfaceId already exists [ " + elinkServiceId + " ]" ); + } else { + update(apiInterfaceUI); + } } else { - update(apiInterfaceUI); + insert(apiInterfaceUI); } } - + /* 25.11.25 광주은행 엑셀 가져오기 기능 사용안함. public ApiInterfaceReloadSyncSet importInterfaceFromExcel(MultipartFile file) throws Exception { if (file.isEmpty()) { throw new IOException("File is empty"); @@ -958,8 +995,9 @@ public class ApiInterfaceService extends OnlBaseService { } return apiInterfaceReloadSyncSet; } + */ - public ApiInterfaceReloadSyncSet importInterfaceFromJson(MultipartFile file) throws Exception { + public ApiInterfaceReloadSyncSet importInterfaceFromJson(MultipartFile file, boolean importDupliCheck) throws Exception { if (file.isEmpty()) { throw new IOException("File is empty"); } @@ -983,7 +1021,7 @@ public class ApiInterfaceService extends OnlBaseService { importAndAddReloadSetTransform(transformUIList, apiInterfaceExportSetUI.getRequestTransform()); importAndAddReloadSetTransform(transformUIList, apiInterfaceExportSetUI.getResponseTransform()); - importApiInterfaceUi(apiInterfaceExportSetUI.getApiInterfaceUI()); + importApiInterfaceUi(apiInterfaceExportSetUI.getApiInterfaceUI(), importDupliCheck); apiInterfaceReloadSyncSet.setApiInterfaceUI(apiInterfaceExportSetUI.getApiInterfaceUI()); return apiInterfaceReloadSyncSet; @@ -1108,12 +1146,17 @@ public class ApiInterfaceService extends OnlBaseService { return updatedString; } - public ApiInterfaceUI cloneApiInterface(ApiInterfaceUI orgApiInterfaceUI, String newBizCd, String newApiInterfaceId, String newInboundHttpMethod, String newInboundRestPath) throws Exception { + public ApiInterfaceUI cloneApiInterface(ApiInterfaceUI orgApiInterfaceUI, String newBizCd, + String newApiInterfaceId, String newInboundHttpMethod, + String newInboundRestPath, boolean importDupliCheck) throws Exception { + Optional optional = eaiMessageQueryService.findById(newApiInterfaceId); if (optional.isPresent()) { String bzwkDstcd = optional.get().getEaibzwkdstcd(); throw new BizException("[" + bzwkDstcd + "][" + newApiInterfaceId + "]로 이미 등록된 인터페이스입니다.\n조회가 되지 않을 시 담당자에게 문의바랍니다."); } + + importDupliCheck = false; // 중복검사 완료. ApiInterfaceUI apiInterfaceUI = orgApiInterfaceUI; apiInterfaceUI.setEaiBzwkDstcd(newBizCd); @@ -1132,7 +1175,7 @@ public class ApiInterfaceService extends OnlBaseService { apiInterfaceUI.setResponseTransform(changeToTargetTransformUI(transform2Service.getTransformUiToExport(apiInterfaceUI.getResponseTransform()), newBizCd, newApiInterfaceId, apiInterfaceUI.getOutboundResponseLayout(), apiInterfaceUI.getInboundResponseLayout())); } - importApiInterfaceUi(apiInterfaceUI); + importApiInterfaceUi(apiInterfaceUI, importDupliCheck); return apiInterfaceUI; } diff --git a/src/main/java/com/eactive/eai/rms/onl/transaction/apim/mapping/ApiInterfaceUIMapper.java b/src/main/java/com/eactive/eai/rms/onl/transaction/apim/mapping/ApiInterfaceUIMapper.java index c70d363..8fbcf12 100644 --- a/src/main/java/com/eactive/eai/rms/onl/transaction/apim/mapping/ApiInterfaceUIMapper.java +++ b/src/main/java/com/eactive/eai/rms/onl/transaction/apim/mapping/ApiInterfaceUIMapper.java @@ -148,6 +148,7 @@ public interface ApiInterfaceUIMapper { @Mapping(target = "eaisendrecv", source = "sendRecvType") @Mapping(target = "eaidirection", source = "inOutType") @Mapping(target = "standardMessageItems", source = "standardMessageItems") + @Mapping(target = "apifullpath", source = "apiFullPath") StandardMessageInfo toStandardMessageInfo(ApiInterfaceUI vo); @AfterMapping diff --git a/src/main/java/com/eactive/eai/rms/onl/transaction/apim/ui/ApiInterfaceUI.java b/src/main/java/com/eactive/eai/rms/onl/transaction/apim/ui/ApiInterfaceUI.java index 82ee29f..a464377 100644 --- a/src/main/java/com/eactive/eai/rms/onl/transaction/apim/ui/ApiInterfaceUI.java +++ b/src/main/java/com/eactive/eai/rms/onl/transaction/apim/ui/ApiInterfaceUI.java @@ -49,6 +49,8 @@ public class ApiInterfaceUI { private List headerValues; private List standardMessageItems; private List inboundResponseStandardMessageItems ; + + private String apiFullPath; //ASYNC-SYNC 용 private String inboundResponseHttpMethod;