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..c933b63 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;