ApiInterface 파일 업로드 시 중복체크 기능 추가

This commit is contained in:
eactive
2025-11-25 15:54:44 +09:00
parent 48fe41794b
commit 7bcb641c1c
4 changed files with 174 additions and 62 deletions
@@ -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<byte[]> 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<String, Object> resultMap = reloadSync(apiInterfaceUI);
return ResponseEntity.ok(resultMap);
} catch(Exception e) {
@@ -836,7 +836,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 +911,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 +970,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 +996,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 +1121,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<EAIMessageEntity> 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 +1150,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;
}