한글주석 추가 및 기초 구조 잡는중....

internalApi
박성영 1 month ago
parent 434837a949
commit 24b906cb9a

@ -16,12 +16,15 @@ import java.util.List;
@Setter
public class BasicResponse {
/** 연계결과코드 */
@JsonProperty("CNTC_RESULT_CODE")
private String cntcResultCode;
/** 연계결과상세 */
@JsonProperty("CNTC_RESULT_DTLS")
private String cntcResultDtls;
/** 레코드 목록 */
@JsonProperty("record")
private List<Record> record;
@ -32,89 +35,173 @@ public class BasicResponse {
@Getter
@Setter
public static class Record {
/** 생산년도 */
@JsonProperty("PRYE") private String prye;
/** 등록일자 */
@JsonProperty("REGIST_DE") private String registDe;
/** 말소등록구분코드 */
@JsonProperty("ERSR_REGIST_SE_CODE") private String ersrRegistSeCode;
/** 말소등록구분명 */
@JsonProperty("ERSR_REGIST_SE_NM") private String ersrRegistSeNm;
/** 말소등록일자 */
@JsonProperty("ERSR_REGIST_DE") private String ersrRegistDe;
/** 등록상세코드 */
@JsonProperty("REGIST_DETAIL_CODE") private String registDetailCode;
/** 배기량 */
@JsonProperty("DSPLVL") private String dsplvl;
/** 사용본거지법정동코드 */
@JsonProperty("USE_STRNGHLD_LEGALDONG_CODE") private String useStrnghldLegaldongCode;
/** 사용본거지행정동코드 */
@JsonProperty("USE_STRNGHLD_ADSTRD_CODE") private String useStrnghldAdstrdCode;
/** 사용본거지산 */
@JsonProperty("USE_STRNGHLD_MNTN") private String useStrnghldMntn;
/** 사용본거지번지 */
@JsonProperty("USE_STRNGHLD_LNBR") private String useStrnghldLnbr;
/** 사용본거지호 */
@JsonProperty("USE_STRNGHLD_HO") private String useStrnghldHo;
/** 사용본거지주소명 */
@JsonProperty("USE_STRNGHLD_ADRES_NM") private String useStrnghldAdresNm;
/** 사용본거지도로명코드 */
@JsonProperty("USE_STRNGHLD_ROAD_NM_CODE") private String useStrnghldRoadNmCode;
/** 사용본거지지하건물구분코드 */
@JsonProperty("USGSRHLD_UNDGRND_BULD_SE_CODE") private String usgsrhldUndgrndBuldSeCode;
/** 사용본거지건물본번 */
@JsonProperty("USE_STRNGHLD_BULD_MAIN_NO") private String useStrnghldBuldMainNo;
/** 사용본거지건물부번 */
@JsonProperty("USE_STRNGHLD_BULD_SUB_NO") private String useStrnghldBuldSubNo;
/** 사용본거지주소전체 */
@JsonProperty("USGSRHLD_ADRES_FULL") private String usgsrhldAdresFull;
/** 소유자구분코드 */
@JsonProperty("MBER_SE_CODE") private String mberSeCode;
/** 소유자명 */
@JsonProperty("MBER_NM") private String mberNm;
/** 소유자구분번호 */
@JsonProperty("MBER_SE_NO") private String mberSeNo;
/** 전화번호 */
@JsonProperty("TELNO") private String telno;
/** 소유자법정동코드 */
@JsonProperty("OWNER_LEGALDONG_CODE") private String ownerLegaldongCode;
/** 소유자행정동코드 */
@JsonProperty("OWNER_ADSTRD_CODE") private String ownerAdstrdCode;
/** 소유자산 */
@JsonProperty("OWNER_MNTN") private String ownerMntn;
/** 소유자번지 */
@JsonProperty("OWNER_LNBR") private String ownerLnbr;
/** 소유자호 */
@JsonProperty("OWNER_HO") private String ownerHo;
/** 소유자주소명 */
@JsonProperty("OWNER_ADRES_NM") private String ownerAdresNm;
/** 소유자도로명코드 */
@JsonProperty("OWNER_ROAD_NM_CODE") private String ownerRoadNmCode;
/** 소유자지하건물구분코드 */
@JsonProperty("OWNER_UNDGRND_BULD_SE_CODE") private String ownerUndgrndBuldSeCode;
/** 소유자건물본번 */
@JsonProperty("OWNER_BULD_MAIN_NO") private String ownerBuldMainNo;
/** 소유자건물부번 */
@JsonProperty("OWNER_BULD_SUB_NO") private String ownerBuldSubNo;
/** 소유자주소전체 */
@JsonProperty("OWNER_ADRES_FULL") private String ownerAdresFull;
/** 변경후차량번호 */
@JsonProperty("AFTR_VHRNO") private String aftrVhrno;
/** 사용연료코드 */
@JsonProperty("USE_FUEL_CODE") private String useFuelCode;
/** 용도구분코드 */
@JsonProperty("PRPOS_SE_CODE") private String prposSeCode;
/** 제작사명 */
@JsonProperty("MTRS_FOM_NM") private String mtrsFomNm;
/** 변경전차량번호 */
@JsonProperty("FRNT_VHRNO") private String frntVhrno;
/** 차량번호 */
@JsonProperty("VHRNO") private String vhrno;
/** 차대번호 */
@JsonProperty("VIN") private String vin;
/** 차명 */
@JsonProperty("CNM") private String cnm;
/** 차량총중량 */
@JsonProperty("VHCLE_TOT_WT") private String vhcleTotWt;
/** 자동차보험종료일자 */
@JsonProperty("CAAG_ENDDE") private String caagEndde;
/** 변경일자 */
@JsonProperty("CHANGE_DE") private String changeDe;
/** 차종분류코드 */
@JsonProperty("VHCTY_ASORT_CODE") private String vhctyAsortCode;
/** 차종유형코드 */
@JsonProperty("VHCTY_TY_CODE") private String vhctyTyCode;
/** 차종구분코드 */
@JsonProperty("VHCTY_SE_CODE") private String vhctySeCode;
/** 최대적재량 */
@JsonProperty("MXMM_LDG") private String mxmmLdg;
/** 차종분류명 */
@JsonProperty("VHCTY_ASORT_NM") private String vhctyAsortNm;
/** 차종유형명 */
@JsonProperty("VHCTY_TY_NM") private String vhctyTyNm;
/** 차종구분명 */
@JsonProperty("VHCTY_SE_NM") private String vhctySeNm;
/** 최초등록일자 */
@JsonProperty("FRST_REGIST_DE") private String frstRegistDe;
/** 형식명 */
@JsonProperty("FOM_NM") private String fomNm;
/** 취득일자 */
@JsonProperty("ACQS_DE") private String acqsDe;
/** 취득종료일자 */
@JsonProperty("ACQS_END_DE") private String acqsEndDe;
/** 연식월 */
@JsonProperty("YBL_MD") private String yblMd;
/** 이전등록일자 */
@JsonProperty("TRANSR_REGIST_DE") private String transrRegistDe;
/** 특정등록상태코드 */
@JsonProperty("SPCF_REGIST_STTUS_CODE") private String spcfRegistSttusCode;
/** 색상명 */
@JsonProperty("COLOR_NM") private String colorNm;
/** 저당건수 */
@JsonProperty("MRTG_CO") private String mrtgCo;
/** 압류건수 */
@JsonProperty("SEIZR_CO") private String seizrCo;
/** 압인건수 */
@JsonProperty("STMD_CO") private String stmdCo;
/** 번호판보관여부 */
@JsonProperty("NMPL_CSDY_AT") private String nmplCsdyAt;
/** 번호판보관반납일자 */
@JsonProperty("NMPL_CSDY_REMNR_DE") private String nmplCsdyRemnrDe;
/** 원산지구분코드 */
@JsonProperty("ORIGIN_SE_CODE") private String originSeCode;
/** 번호판규격코드 */
@JsonProperty("NMPL_STNDRD_CODE") private String nmplStndrdCode;
/** 취득금액 */
@JsonProperty("ACQS_AMOUNT") private String acqsAmount;
/** 검사유효기간시작일자 */
@JsonProperty("INSPT_VALID_PD_BGNDE") private String insptValidPdBgnde;
/** 검사유효기간종료일자 */
@JsonProperty("INSPT_VALID_PD_ENDDE") private String insptValidPdEndde;
/** 사용본거지우편번호코드 */
@JsonProperty("USE_STRNGHLD_GRC_CODE") private String useStrnghldGrcCode;
/** 화물차승차정원수 */
@JsonProperty("TKCAR_PSCAP_CO") private String tkcarPscapCo;
/** 사양번호 */
@JsonProperty("SPMNNO") private String spmnno;
/** 주행거리 */
@JsonProperty("TRVL_DSTNC") private String trvlDstnc;
/** 최초등록신청번호 */
@JsonProperty("FRST_REGIST_RQRCNO") private String frstRegistRqrcno;
/** 자진말소예방공지일자 */
@JsonProperty("VLNT_ERSR_PRVNTC_NTICE_DE") private String vlntErsrPrvntcNticeDe;
/** 등록기관명 */
@JsonProperty("REGIST_INSTT_NM") private String registInsttNm;
/** 처리불가사유코드 */
@JsonProperty("PROCESS_IMPRTY_RESN_CODE") private String processImprtyResnCode;
/** 처리불가사유상세 */
@JsonProperty("PROCESS_IMPRTY_RESN_DTLS") private String processImprtyResnDtls;
/** 차체길이 */
@JsonProperty("CBD_LT") private String cbdLt;
/** 차체너비 */
@JsonProperty("CBD_BT") private String cbdBt;
/** 차체높이 */
@JsonProperty("CBD_HG") private String cbdHg;
/** 최초최대적재량 */
@JsonProperty("FRST_MXMM_LDG") private String frstMxmmLdg;
/** 연료소비율 */
@JsonProperty("FUEL_CNSMP_RT") private String fuelCnsmpRt;
/** 전기복합연료소비율 */
@JsonProperty("ELCTY_CMPND_FUEL_CNSMP_RT") private String elctyCmpndFuelCnsmpRt;
}

@ -16,186 +16,247 @@ import java.util.List;
@Setter
public class LedgerResponse {
/** 연계결과코드 */
@JsonProperty("CNTC_RESULT_CODE")
private String cntcResultCode;
/** 연계결과상세 */
@JsonProperty("CNTC_RESULT_DTLS")
private String cntcResultDtls;
/** 원부그룹번호 */
@JsonProperty("LEDGER_GROUP_NO")
private String ledgerGroupNo;
/** 원부개별화번호 */
@JsonProperty("LEDGER_INDVDLZ_NO")
private String ledgerIndvdlzNo;
/** 차량관리번호 */
@JsonProperty("VHMNO")
private String vhmno;
/** 차량번호 */
@JsonProperty("VHRNO")
private String vhrno;
/** 차대번호 */
@JsonProperty("VIN")
private String vin;
/** 차종분류코드 */
@JsonProperty("VHCTY_ASORT_CODE")
private String vhctyAsortCode;
/** 차종분류명 */
@JsonProperty("VHCTY_ASORT_NM")
private String vhctyAsortNm;
/** 차명 */
@JsonProperty("CNM")
private String cnm;
/** 색상코드 */
@JsonProperty("COLOR_CODE")
private String colorCode;
/** 색상명 */
@JsonProperty("COLOR_NM")
private String colorNm;
/** 번호판규격코드 */
@JsonProperty("NMPL_STNDRD_CODE")
private String nmplStndrdCode;
/** 번호판규격명 */
@JsonProperty("NMPL_STNDRD_NM")
private String nmplStndrdNm;
/** 용도구분코드 */
@JsonProperty("PRPOS_SE_CODE")
private String prposSeCode;
/** 용도구분명 */
@JsonProperty("PRPOS_SE_NM")
private String prposSeNm;
/** 제작사명 */
@JsonProperty("MTRS_FOM_NM")
private String mtrsFomNm;
/** 형식명 */
@JsonProperty("FOM_NM")
private String fomNm;
/** 취득금액 */
@JsonProperty("ACQS_AMOUNT")
private String acqsAmount;
/** 등록상세코드 */
@JsonProperty("REGIST_DETAIL_CODE")
private String registDetailCode;
/** 등록상세명 */
@JsonProperty("REGIST_DETAIL_NM")
private String registDetailNm;
/** 최초등록일자 */
@JsonProperty("FRST_REGIST_DE")
private String frstRegistDe;
/** 자동차보험종료일자 */
@JsonProperty("CAAG_ENDDE")
private String caagEndde;
/** 생산년도 */
@JsonProperty("PRYE")
private String prye;
/** 사양번호1 */
@JsonProperty("SPMNNO1")
private String spmnno1;
/** 사양번호2 */
@JsonProperty("SPMNNO2")
private String spmnno2;
/** 연식월 */
@JsonProperty("YBL_MD")
private String yblMd;
/** 주행거리 */
@JsonProperty("TRVL_DSTNC")
private String trvlDstnc;
/** 검사유효기간시작일자 */
@JsonProperty("INSPT_VALID_PD_BGNDE")
private String insptValidPdBgnde;
/** 검사유효기간종료일자 */
@JsonProperty("INSPT_VALID_PD_ENDDE")
private String insptValidPdEndde;
/** 점검유효기간시작일자 */
@JsonProperty("CHCK_VALID_PD_BGNDE")
private String chckValidPdBgnde;
/** 점검유효기간종료일자 */
@JsonProperty("CHCK_VALID_PD_ENDDE")
private String chckValidPdEndde;
/** 등록신청구분명 */
@JsonProperty("REGIST_REQST_SE_NM")
private String registReqstSeNm;
/** 최초등록신청번호 */
@JsonProperty("FRST_REGIST_RQRCNO")
private String frstRegistRqrcno;
/** 번호판보관반납일자 */
@JsonProperty("NMPL_CSDY_REMNR_DE")
private String nmplCsdyRemnrDe;
/** 번호판보관여부 */
@JsonProperty("NMPL_CSDY_AT")
private String nmplCsdyAt;
/** 영업용사용기간 */
@JsonProperty("BSS_USE_PD")
private String bssUsePd;
/** 직권말소예방공지일자 */
@JsonProperty("OCTHT_ERSR_PRVNTC_NTICE_DE")
private String octhtErsrPrvntcNticeDe;
/** 말소등록일자 */
@JsonProperty("ERSR_REGIST_DE")
private String ersrRegistDe;
/** 말소등록구분코드 */
@JsonProperty("ERSR_REGIST_SE_CODE")
private String ersrRegistSeCode;
/** 말소등록구분명 */
@JsonProperty("ERSR_REGIST_SE_NM")
private String ersrRegistSeNm;
/** 저당건수 */
@JsonProperty("MRTGCNT")
private String mrtgcnt;
/** 차량건수 */
@JsonProperty("VHCLECNT")
private String vhclecnt;
/** 압인건수 */
@JsonProperty("STMDCNT")
private String stmdcnt;
/** 주소1 */
@JsonProperty("ADRES1")
private String adres1;
/** 주소명1 */
@JsonProperty("ADRES_NM1")
private String adresNm1;
/** 주소 */
@JsonProperty("ADRES")
private String adres;
/** 주소명 */
@JsonProperty("ADRES_NM")
private String adresNm;
/** 개인법인여부 */
@JsonProperty("INDVDL_BSNM_AT")
private String indvdlBsnmAt;
/** 전화번호 */
@JsonProperty("TELNO")
private String telno;
/** 소유자명 */
@JsonProperty("MBER_NM")
private String mberNm;
/** 소유자구분코드 */
@JsonProperty("MBER_SE_CODE")
private String mberSeCode;
/** 소유자구분번호 */
@JsonProperty("MBER_SE_NO")
private String mberSeNo;
/** 면세대상자구분코드 */
@JsonProperty("TAXXMPT_TRGTER_SE_CODE")
private String taxxmptTrgterSeCode;
/** 면세대상자구분코드명 */
@JsonProperty("TAXXMPT_TRGTER_SE_CODE_NM")
private String taxxmptTrgterSeCodeNm;
/** 건수사항 */
@JsonProperty("CNT_MATTER")
private String cntMatter;
/** 읍면동명 */
@JsonProperty("EMD_NM")
private String emdNm;
/** 예방건수 */
@JsonProperty("PRVNTCCNT")
private String prvntccnt;
/** 수출이행여부확인일자 */
@JsonProperty("XPORT_FLFL_AT_STTEMNT_DE")
private String xportFlflAtSttemntDe;
/** 협력사신청번호 */
@JsonProperty("PARTN_RQRCNO")
private String partnRqrcno;
/** 레코드 목록 */
@JsonProperty("record")
private List<Record> record;
@ -206,18 +267,31 @@ public class LedgerResponse {
@Getter
@Setter
public static class Record {
/** 메인체크 */
@JsonProperty("MAINCHK") private String mainchk;
/** 변경작업구분코드 */
@JsonProperty("CHANGE_JOB_SE_CODE") private String changeJobSeCode;
/** 주번호 */
@JsonProperty("MAINNO") private String mainno;
/** 부번호 */
@JsonProperty("SUBNO") private String subno;
/** 상세내역 */
@JsonProperty("DTLS") private String dtls;
/** 신청번호 */
@JsonProperty("RQRCNO") private String rqrcno;
/** 차량관리번호 */
@JsonProperty("VHMNO") private String vhmno;
/** 원부그룹번호 */
@JsonProperty("LEDGER_GROUP_NO") private String ledgerGroupNo;
/** 원부개별화번호 */
@JsonProperty("LEDGER_INDVDLZ_NO") private String ledgerIndvdlzNo;
/** 구분명 */
@JsonProperty("GUBUN_NM") private String gubunNm;
/** 변경일자 */
@JsonProperty("CHANGE_DE") private String changeDe;
/** 상세일련번호 */
@JsonProperty("DETAIL_SN") private String detailSn;
/** 플래그 */
@JsonProperty("FLAG") private String flag;
public String getMainchk() { return mainchk; }

@ -20,10 +20,10 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;
/**
* Controller
@ -35,7 +35,7 @@ import java.net.URLEncoder;
@Slf4j
@Tag(name = "자동차 과태료 대상 등록", description = "자동차 과태료 대상 등록 및 목록 조회 API")
public class CarFfnlgTrgtController {
private final CarFfnlgTrgtService service;
private final CommonCodeService commonCodeService;
@ -238,30 +238,59 @@ public class CarFfnlgTrgtController {
@Operation(summary = "과태료 대상 삭제", description = "과태료 대상을 삭제(논리삭제)합니다.")
public ResponseEntity<?> delete(
@Parameter(description = "과태료 대상 ID") @RequestParam String carFfnlgTrgtId) {
log.info("과태료 대상 삭제 요청 - ID: {}", carFfnlgTrgtId);
try {
String dltr = SessionUtil.getUserId();
if (dltr == null || dltr.isEmpty()) {
return ApiResponseUtil.error("로그인 정보가 없습니다.");
}
CarFfnlgTrgtVO vo = new CarFfnlgTrgtVO();
vo.setCarFfnlgTrgtId(carFfnlgTrgtId);
vo.setDltr(dltr);
int result = service.delete(vo);
if (result > 0) {
return ApiResponseUtil.success(MessageConstants.Common.DELETE_SUCCESS);
} else {
return ApiResponseUtil.error(MessageConstants.Common.DELETE_ERROR);
}
} catch (Exception e) {
log.error("과태료 대상 삭제 중 오류 발생", e);
return ApiResponseUtil.error("삭제 중 오류가 발생했습니다: " + e.getMessage());
}
}
/**
* API /
* @param targetList
* @return
*/
@PostMapping("/compareWithApi.ajax")
@ResponseBody
@Operation(summary = "API 호출 및 데이터 비교", description = "선택된 목록에 대해 차량 API를 호출하고 기본정보 및 등록원부와 비교합니다.")
public ResponseEntity<?> compareWithApi(@RequestBody List<Map<String, String>> targetList) {
log.info("API 호출 및 비교 요청 - 선택된 데이터 건수: {}", targetList != null ? targetList.size() : 0);
try {
Map<String, Object> resultData = service.compareWithApi(targetList);
int successCount = (int) resultData.get("successCount");
int failCount = (int) resultData.get("failCount");
String message = String.format("API 호출 및 비교 완료\n성공: %d건, 실패: %d건", successCount, failCount);
return ApiResponseUtil.success(resultData, message);
} catch (IllegalArgumentException e) {
log.error("파라미터 검증 오류", e);
return ApiResponseUtil.error(e.getMessage());
} catch (Exception e) {
log.error("API 호출 및 비교 중 오류 발생", e);
return ApiResponseUtil.error("처리 중 오류가 발생했습니다: " + e.getMessage());
}
}
}

@ -69,4 +69,12 @@ public interface CarFfnlgTrgtService {
* @return EUC-KR
*/
byte[] generateEucKrDownloadBytes(CarFfnlgTrgtVO vo);
/**
* API /
*
* @param targetList (carFfnlgTrgtId, vhclno, inspYmd )
* @return (compareResults, totalCount, successCount, failCount)
*/
Map<String, Object> compareWithApi(List<Map<String, String>> targetList);
}

@ -1,6 +1,9 @@
package go.kr.project.carInspectionPenalty.registration.service.impl;
import egovframework.exception.MessageException;
import go.kr.project.api.model.VehicleApiResponseVO;
import go.kr.project.api.model.request.BasicRequest;
import go.kr.project.api.service.VehicleInfoService;
import go.kr.project.carInspectionPenalty.registration.config.CarFfnlgTxtParseConfig;
import go.kr.project.carInspectionPenalty.registration.mapper.CarFfnlgTrgtMapper;
import go.kr.project.carInspectionPenalty.registration.model.CarFfnlgTrgtVO;
@ -21,6 +24,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/**
* Service
@ -29,9 +33,10 @@ import java.util.Map;
@RequiredArgsConstructor
@Slf4j
public class CarFfnlgTrgtServiceImpl implements CarFfnlgTrgtService {
private final CarFfnlgTrgtMapper mapper;
private final CarFfnlgTxtParseConfig parseConfig;
private final VehicleInfoService vehicleInfoService;
// 날짜 형식 (YYYYMMDD)
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd");
@ -889,4 +894,161 @@ public class CarFfnlgTrgtServiceImpl implements CarFfnlgTrgtService {
return false;
}
/**
* API /
*
* @param targetList
* @return
*/
@Override
public Map<String, Object> compareWithApi(List<Map<String, String>> targetList) {
log.info("========== API 호출 및 비교 시작 ==========");
log.info("선택된 데이터 건수: {}", targetList != null ? targetList.size() : 0);
if (targetList == null || targetList.isEmpty()) {
throw new IllegalArgumentException("선택된 데이터가 없습니다.");
}
List<Map<String, Object>> compareResults = new ArrayList<>();
int successCount = 0;
int failCount = 0;
for (Map<String, String> target : targetList) {
String carFfnlgTrgtId = target.get("carFfnlgTrgtId");
String vhclno = target.get("vhclno");
String inspYmd = target.get("inspYmd");
log.info("처리 중 - 차량번호: {}, 검사일자: {}", vhclno, inspYmd);
Map<String, Object> compareResult = new HashMap<>();
compareResult.put("carFfnlgTrgtId", carFfnlgTrgtId);
compareResult.put("vhclno", vhclno);
try {
// 1. 기존 데이터 조회
CarFfnlgTrgtVO existingData = new CarFfnlgTrgtVO();
existingData.setCarFfnlgTrgtId(carFfnlgTrgtId);
existingData = mapper.selectOne(existingData);
if (existingData == null) {
compareResult.put("success", false);
compareResult.put("message", "기존 데이터를 찾을 수 없습니다.");
failCount++;
compareResults.add(compareResult);
continue;
}
// 2. API 호출 (통합 조회)
BasicRequest apiRequest = new BasicRequest();
apiRequest.setVhrno(vhclno);
apiRequest.setLevyStdde(inspYmd != null ? inspYmd.replace("-", "") : "");
apiRequest.setInqireSeCode("01"); // 조회구분코드 기본값
VehicleApiResponseVO apiResponse = vehicleInfoService.getVehicleInfo(apiRequest);
if (!apiResponse.isSuccess()) {
compareResult.put("success", false);
compareResult.put("message", "API 호출 실패: " + apiResponse.getMessage());
failCount++;
compareResults.add(compareResult);
continue;
}
// 3. 데이터 비교
Map<String, Object> comparisonDetail = compareData(existingData, apiResponse);
compareResult.put("success", true);
compareResult.put("message", "비교 완료");
compareResult.put("comparisonDetail", comparisonDetail);
successCount++;
} catch (Exception e) {
log.error("데이터 비교 중 오류 발생 - 차량번호: {}", vhclno, e);
compareResult.put("success", false);
compareResult.put("message", "비교 중 오류: " + e.getMessage());
failCount++;
}
compareResults.add(compareResult);
}
Map<String, Object> resultData = new HashMap<>();
resultData.put("compareResults", compareResults);
resultData.put("totalCount", targetList.size());
resultData.put("successCount", successCount);
resultData.put("failCount", failCount);
log.info("========== API 호출 및 비교 완료 ==========");
log.info("성공: {}건, 실패: {}건", successCount, failCount);
return resultData;
}
/**
* API
* TODO:
*
* @param existingData
* @param apiResponse API
* @return
*/
private Map<String, Object> compareData(CarFfnlgTrgtVO existingData, VehicleApiResponseVO apiResponse) {
Map<String, Object> comparison = new HashMap<>();
// 기본정보 비교
if (apiResponse.getBasicInfo() != null && apiResponse.getBasicInfo().getRecord() != null
&& !apiResponse.getBasicInfo().getRecord().isEmpty()) {
Map<String, String> basicComparison = new HashMap<>();
// 예시: 차량번호 비교
String existingVhclno = existingData.getVhclno();
String apiVhclno = apiResponse.getBasicInfo().getRecord().get(0).getVhrno();
basicComparison.put("차량번호_일치여부", Objects.equals(existingVhclno, apiVhclno) ? "일치" : "불일치");
basicComparison.put("기존_차량번호", existingVhclno);
basicComparison.put("API_차량번호", apiVhclno);
// 예시: 소유자명 비교
String existingOwnrNm = existingData.getOwnrNm();
String apiOwnrNm = apiResponse.getBasicInfo().getRecord().get(0).getMberNm();
basicComparison.put("소유자명_일치여부", Objects.equals(existingOwnrNm, apiOwnrNm) ? "일치" : "불일치");
basicComparison.put("기존_소유자명", existingOwnrNm);
basicComparison.put("API_소유자명", apiOwnrNm);
comparison.put("기본정보_비교", basicComparison);
}
// 등록원부 비교
if (apiResponse.getLedgerInfo() != null) {
Map<String, String> ledgerComparison = new HashMap<>();
// 예시: 차량번호 비교 (등록원부)
String existingVhclno = existingData.getVhclno();
String apiVhclno = apiResponse.getLedgerInfo().getVhrno();
ledgerComparison.put("차량번호_일치여부", Objects.equals(existingVhclno, apiVhclno) ? "일치" : "불일치");
// TODO: 추가적인 등록원부 필드 비교 로직 작성
// 예: 차대번호, 등록일자 등
comparison.put("등록원부_비교", ledgerComparison);
}
// 전체 일치 여부 판단
boolean allMatched = true;
if (apiResponse.getBasicInfo() != null && apiResponse.getBasicInfo().getRecord() != null
&& !apiResponse.getBasicInfo().getRecord().isEmpty()) {
String existingVhclno = existingData.getVhclno();
String apiVhclno = apiResponse.getBasicInfo().getRecord().get(0).getVhrno();
String existingOwnrNm = existingData.getOwnrNm();
String apiOwnrNm = apiResponse.getBasicInfo().getRecord().get(0).getMberNm();
if (!Objects.equals(existingVhclno, apiVhclno) || !Objects.equals(existingOwnrNm, apiOwnrNm)) {
allMatched = false;
}
}
comparison.put("전체_일치여부", allMatched ? "일치" : "불일치");
return comparison;
}
}

@ -10,6 +10,7 @@
<div class="sub_title">과태료 대상 목록</div>
<button type="button" id="registerBtn" class="newbtn bg1">등록</button>
<button type="button" id="deleteBtn" class="newbtn bg6">삭제</button>
<button type="button" id="callApiBtn" class="newbtn bg2">API 호출</button>
<button type="button" id="downloadBtn" class="newbtn bg3">목록 다운로드</button>
</section>
</div>
@ -386,6 +387,11 @@
self.deleteData();
});
// API 호출 버튼 클릭
$("#callApiBtn").on('click', function() {
self.callApiAndCompare();
});
// 목록 다운로드 버튼 클릭
$("#downloadBtn").on('click', function() {
var url = buildDownloadUrl();
@ -429,18 +435,18 @@
*/
deleteData: function() {
var checkedRows = this.grid.instance.getCheckedRows();
if (checkedRows.length === 0) {
alert("삭제할 데이터를 선택해주세요.");
return;
}
if (!confirm(checkedRows.length + "건의 데이터를 삭제하시겠습니까?")) {
return;
}
var deletePromises = [];
checkedRows.forEach(function(row) {
var promise = $.ajax({
url: '<c:url value="/carInspectionPenalty/registration/delete.ajax"/>',
@ -451,13 +457,71 @@
});
deletePromises.push(promise);
});
$.when.apply($, deletePromises).done(function() {
alert("삭제가 완료되었습니다.");
CarFfnlgTrgtList.grid.reload();
}).fail(function() {
alert("삭제 중 오류가 발생했습니다.");
});
},
/**
* API 호출 및 데이터 비교
*/
callApiAndCompare: function() {
var checkedRows = this.grid.instance.getCheckedRows();
if (checkedRows.length === 0) {
alert("API 호출할 데이터를 선택해주세요.");
return;
}
if (!confirm(checkedRows.length + "건의 데이터에 대해 API를 호출하고 비교하시겠습니까?")) {
return;
}
// 선택된 행 데이터 배열 준비
var targetList = checkedRows.map(function(row) {
return {
carFfnlgTrgtId: row.carFfnlgTrgtId,
vhclno: row.vhclno,
inspYmd: row.inspYmd,
ownrNm: row.ownrNm,
carNm: row.carNm
};
});
// 로딩 메시지 표시 (선택사항)
var loadingMsg = "API 호출 및 비교 중입니다...\n잠시만 기다려주세요.";
console.log(loadingMsg);
// AJAX 호출
$.ajax({
url: '<c:url value="/carInspectionPenalty/registration/compareWithApi.ajax"/>',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(targetList),
success: function(response) {
if (response.success) {
alert("API 호출 및 비교가 완료되었습니다.\n\n" + response.message);
// 비교 결과 상세 보기 (콘솔 출력)
if (response.data && response.data.compareResults) {
console.log("비교 결과 상세:", response.data.compareResults);
}
// 그리드 새로고침
CarFfnlgTrgtList.grid.reload();
} else {
alert("오류: " + response.message);
}
},
error: function(xhr, status, error) {
console.error("API 호출 실패:", error);
alert("API 호출 중 오류가 발생했습니다.\n" + error);
}
});
}
};

Loading…
Cancel
Save