From 73016f1244e6d701b5fbfe7e6dfc3660d6910cf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=84=B1=EC=98=81?= Date: Wed, 15 Oct 2025 09:50:55 +0900 Subject: [PATCH] =?UTF-8?q?HTTP=20=EC=BA=90=EC=8B=9C=20=EB=B0=A9=EC=A7=80?= =?UTF-8?q?=20=ED=97=A4=EB=8D=94=20=EC=84=A4=EC=A0=95=20=EC=A3=BC=EC=84=9D?= =?UTF-8?q?,=20=EC=A1=B0=EC=B9=98=EC=B2=98=EB=A6=AC=EC=83=81=ED=83=9C=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?=EB=B0=8F=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../egovframework/config/EgovConfigWeb.java | 5 +- .../CrdnRegistAndViewController.java | 44 ++++++- .../main/mapper/CrdnRegistAndViewMapper.java | 8 ++ .../service/CrdnRegistAndViewService.java | 11 +- .../impl/CrdnRegistAndViewServiceImpl.java | 30 ++++- .../main/CrdnRegistAndViewMapper_maria.xml | 81 ++++++++++--- .../crdn/crndRegistAndView/main/list.jsp | 108 ++++++++++++------ 7 files changed, 219 insertions(+), 68 deletions(-) diff --git a/src/main/java/egovframework/config/EgovConfigWeb.java b/src/main/java/egovframework/config/EgovConfigWeb.java index 69321c6..13ac6ba 100644 --- a/src/main/java/egovframework/config/EgovConfigWeb.java +++ b/src/main/java/egovframework/config/EgovConfigWeb.java @@ -54,8 +54,9 @@ public class EgovConfigWeb implements WebMvcConfigurer, ApplicationContextAware /** * 브라우저 캐시 방지 Interceptor 등록 * 중요로직: 모든 요청에 대해 캐시 방지 헤더를 추가하여 브라우저 뒤로가기 시에도 항상 최신 데이터를 표시한다. + * js, jsp, css 즉각 반영안됨, 주석처리 */ - @Override + /*@Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new HandlerInterceptor() { @Override @@ -67,7 +68,7 @@ public class EgovConfigWeb implements WebMvcConfigurer, ApplicationContextAware return true; } }).addPathPatterns("/**"); // 모든 경로에 적용 - } + }*/ /** * Exception handling is now done using @ControllerAdvice in EgovExceptionAdvice class. diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/controller/CrdnRegistAndViewController.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/controller/CrdnRegistAndViewController.java index 9563e80..ed153f0 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/controller/CrdnRegistAndViewController.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/controller/CrdnRegistAndViewController.java @@ -317,7 +317,7 @@ public class CrdnRegistAndViewController { /** * 단속 상태를 업데이트합니다. - * + * * @param crdnYr 단속 연도 * @param crdnNo 단속 번호 * @param crdnPrcsSttsCd 변경할 처리 상태 코드 @@ -334,16 +334,16 @@ public class CrdnRegistAndViewController { @Parameter(description = "단속 연도") @RequestParam String crdnYr, @Parameter(description = "단속 번호") @RequestParam String crdnNo, @Parameter(description = "처리 상태 코드") @RequestParam String crdnPrcsSttsCd) { - + log.debug("단속 상태 업데이트 요청 - 단속연도: {}, 단속번호: {}, 상태코드: {}", crdnYr, crdnNo, crdnPrcsSttsCd); - + CrdnRegistAndViewVO paramVO = new CrdnRegistAndViewVO(); paramVO.setCrdnYr(crdnYr); paramVO.setCrdnNo(crdnNo); paramVO.setCrdnPrcsSttsCd(crdnPrcsSttsCd); - + int result = service.updateStatus(paramVO); - + if (result > 0) { return ApiResponseUtil.success("단속 상태가 성공적으로 업데이트되었습니다."); } else { @@ -351,4 +351,38 @@ public class CrdnRegistAndViewController { } } + /** + * 조치처리상태를 확인합니다. + * 중요로직: 팝업 호출 전 미조치(코드 1) 여부를 확인하기 위한 API + * + * @param crdnYr 단속 연도 + * @param crdnNo 단속 번호 + * @return 조치처리상태 코드를 담은 ResponseEntity 객체 + */ + @GetMapping("/checkActCmpltCd.ajax") + @Operation(summary = "조치처리상태 확인", description = "조치처리상태 코드를 조회합니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "조치처리상태 조회 성공"), + @ApiResponse(responseCode = "400", description = "조치처리상태 조회 실패"), + @ApiResponse(description = "오류로 인한 실패") + }) + public ResponseEntity checkActCmpltCd( + @Parameter(description = "단속 연도") @RequestParam String crdnYr, + @Parameter(description = "단속 번호") @RequestParam String crdnNo) { + + log.debug("조치처리상태 확인 요청 - 단속연도: {}, 단속번호: {}", crdnYr, crdnNo); + + CrdnRegistAndViewVO paramVO = new CrdnRegistAndViewVO(); + paramVO.setCrdnYr(crdnYr); + paramVO.setCrdnNo(crdnNo); + + String actCmpltCd = service.selectActCmpltCd(paramVO); + + if (actCmpltCd != null) { + return ApiResponseUtil.success(actCmpltCd, "조치처리상태 조회가 완료되었습니다."); + } else { + return ApiResponseUtil.error("해당 단속 정보를 찾을 수 없습니다."); + } + } + } \ No newline at end of file diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/mapper/CrdnRegistAndViewMapper.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/mapper/CrdnRegistAndViewMapper.java index e54ff76..f564a70 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/mapper/CrdnRegistAndViewMapper.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/mapper/CrdnRegistAndViewMapper.java @@ -98,4 +98,12 @@ public interface CrdnRegistAndViewMapper { */ int updateOnlyDate(CrdnRegistAndViewVO vo); + /** + * 조치처리상태 코드를 조회한다. + * 중요로직: tb_act_info 테이블의 행위정보 집계로 조치처리상태 계산 [행위정보없음 0, 미조치 1, 조치완료 3] + * @param vo 조회할 PK 정보(crdnYr, crdnNo)를 담은 VO 객체 + * @return 조치처리상태 코드 (0:행위정보없음, 1:미조치, 3:조치완료) + */ + String selectActCmpltCd(CrdnRegistAndViewVO vo); + } \ No newline at end of file diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/CrdnRegistAndViewService.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/CrdnRegistAndViewService.java index 196c232..d033332 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/CrdnRegistAndViewService.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/CrdnRegistAndViewService.java @@ -75,10 +75,19 @@ public interface CrdnRegistAndViewService { /** * 단속 처리 상태를 업데이트합니다. - * + * * @param vo 상태 업데이트할 단속 정보(crdnYr, crdnNo, crdnPrcsSttsCd)를 담은 VO 객체 * @return 업데이트된 행의 수 */ int updateStatus(CrdnRegistAndViewVO vo); + /** + * 조치처리상태 코드를 조회합니다. + * 중요로직: tb_act_info 테이블의 행위정보 집계로 조치처리상태 계산 + * + * @param vo 조회할 PK 정보(crdnYr, crdnNo)를 담은 VO 객체 + * @return 조치처리상태 코드 (0:행위정보없음, 1:미조치, 3:조치완료) + */ + String selectActCmpltCd(CrdnRegistAndViewVO vo); + } \ No newline at end of file diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/impl/CrdnRegistAndViewServiceImpl.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/impl/CrdnRegistAndViewServiceImpl.java index 1a857d7..4aa7bcb 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/impl/CrdnRegistAndViewServiceImpl.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/impl/CrdnRegistAndViewServiceImpl.java @@ -241,29 +241,49 @@ public class CrdnRegistAndViewServiceImpl extends EgovAbstractServiceImpl implem /** * 단속 처리 상태를 업데이트합니다. - * + * * @param vo 상태 업데이트할 단속 정보(crdnYr, crdnNo, crdnPrcsSttsCd)를 담은 VO 객체 * @return 업데이트된 행의 수 */ @Override public int updateStatus(CrdnRegistAndViewVO vo) { log.debug("단속 상태 업데이트 - 단속연도: {}, 단속번호: {}, 상태코드: {}", vo.getCrdnYr(), vo.getCrdnNo(), vo.getCrdnPrcsSttsCd()); - + // PK(단속연도+단속번호) 필수값 검증 validatePrimaryKey(vo); - + // 처리 상태 코드 필수값 검증 if (vo.getCrdnPrcsSttsCd() == null || vo.getCrdnPrcsSttsCd().trim().isEmpty()) { log.warn("단속 상태 업데이트 실패 - 처리상태코드 미입력"); throw new MessageException("처리 상태 코드는 필수값입니다."); } - + // 단속 처리 일자를 현재 일자로 설정 (yyyyMMdd 형식) vo.setCrdnPrcsYmd(LocalDate.now().toString().replace("-", "")); - + // 상태 업데이트 수행 int result = mapper.updateStatus(vo); log.debug("단속 상태 업데이트 완료 - 업데이트 건수: {}", result); return result; } + + /** + * 조치처리상태 코드를 조회합니다. + * 중요로직: tb_act_info 테이블의 행위정보 집계로 조치처리상태 계산 + * + * @param vo 조회할 PK 정보(crdnYr, crdnNo)를 담은 VO 객체 + * @return 조치처리상태 코드 (0:행위정보없음, 1:미조치, 3:조치완료) + */ + @Override + public String selectActCmpltCd(CrdnRegistAndViewVO vo) { + log.debug("조치처리상태 코드 조회 - 단속연도: {}, 단속번호: {}", vo.getCrdnYr(), vo.getCrdnNo()); + + // PK(단속연도+단속번호) 필수값 검증 + validatePrimaryKey(vo); + + // 조치처리상태 코드 조회 + String actCmpltCd = mapper.selectActCmpltCd(vo); + log.debug("조치처리상태 코드 조회 완료 - 조치처리상태: {}", actCmpltCd); + return actCmpltCd; + } } \ No newline at end of file diff --git a/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnRegistAndViewMapper_maria.xml b/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnRegistAndViewMapper_maria.xml index 1d39f05..166327b 100644 --- a/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnRegistAndViewMapper_maria.xml +++ b/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnRegistAndViewMapper_maria.xml @@ -6,12 +6,7 @@ + + + @@ -308,10 +308,10 @@ align: 'center', width: 100, formatter: function(e) { - /* 행위정보없음 0, 미조치 1, 조치완료 2 */ + /* 행위정보없음 0, 미조치 1, 조치완료 3 */ if (e.value === '0') return '행위정보없음'; else if (e.value === '1') return '미조치'; - else if (e.value === '2') return '조치완료'; + else if (e.value === '3') return '조치완료'; else return e.value || ''; } }, @@ -571,6 +571,42 @@ }); }, + /** + * 조치처리상태를 확인하고 미조치(코드 1)인 경우에만 콜백 함수를 실행합니다. + * 중요로직: 팝업 호출 전 미조치(코드 1) 여부를 확인하는 공통 함수 + * + * @param crdnYr 단속 연도 + * @param crdnNo 단속 번호 + * @param buttonName 버튼 이름 (에러 메시지용) + * @param callback 미조치인 경우 실행할 콜백 함수 + */ + checkActCmpltCdAndExecute: function(crdnYr, crdnNo, buttonName, callback) { + $.ajax({ + url: '', + type: 'GET', + data: { + crdnYr: crdnYr, + crdnNo: crdnNo + }, + success: function(response) { + if (response && response.success) { + if (response.data === '1') { + // 미조치(코드 1)인 경우 콜백 실행 + callback(); + } else { + alert('미조치 상태가 아닙니다. 미조치 상태일 때만 ' + buttonName + '을(를) 진행할 수 있습니다.'); + } + } else { + alert('조치처리상태 확인에 실패했습니다.'); + } + }, + error: function( xhr, status, error ) { + console.error( error ); + alert('조치처리상태 확인 중 오류가 발생했습니다.'); + } + }); + }, + /** * 재부과 팝업을 엽니다. * @@ -739,81 +775,81 @@ // 이행정보 관리 팝업 호출 이벤트들 - "처분사전" 버튼 $("#btnDsps").on('click', function() { - // 선택된 행 확인 if (!self.selectedRow) { alert('이행정보를 관리할 단속 건을 선택해주세요.'); return; } - - // 처분사전 팝업 열기 - self.openImpltTaskPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '1'); // 1: 처분사전 + // 중요로직: 미조치(코드 1) 확인 후 팝업 열기 + self.checkActCmpltCdAndExecute(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '처분사전', function() { + self.openImpltTaskPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '1'); + }); }); - + $("#btnCrcCmd").on('click', function() { - // 선택된 행 확인 if (!self.selectedRow) { alert('이행정보를 관리할 단속 건을 선택해주세요.'); return; } - - // 시정명령 팝업 열기 - self.openImpltTaskPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '2'); // 2: 시정명령 + // 중요로직: 미조치(코드 1) 확인 후 팝업 열기 + self.checkActCmpltCdAndExecute(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '시정명령', function() { + self.openImpltTaskPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '2'); + }); }); - + $("#btnCrcUrg").on('click', function() { - // 선택된 행 확인 if (!self.selectedRow) { alert('이행정보를 관리할 단속 건을 선택해주세요.'); return; } - - // 시정촉구 팝업 열기 - self.openImpltTaskPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '3'); // 3: 시정촉구 + // 중요로직: 미조치(코드 1) 확인 후 팝업 열기 + self.checkActCmpltCdAndExecute(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '시정촉구', function() { + self.openImpltTaskPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '3'); + }); }); - + $("#btnLevyPrvntc").on('click', function() { - // 선택된 행 확인 if (!self.selectedRow) { alert('부과예고를 관리할 단속 건을 선택해주세요.'); return; } - - // 부과예고 팝업 열기 - self.openLevyPrvntcPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '4'); // 3: 부과예고 + // 중요로직: 미조치(코드 1) 확인 후 팝업 열기 + self.checkActCmpltCdAndExecute(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '부과예고', function() { + self.openLevyPrvntcPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '4'); + }); }); - + $("#btnLevy").on('click', function() { - // 선택된 행 확인 if (!self.selectedRow) { alert('부과를 관리할 단속 건을 선택해주세요.'); return; } - - // 부과예고 팝업 열기 - self.openLevyPrvntcPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '5'); // 5: 부과 + // 중요로직: 미조치(코드 1) 확인 후 팝업 열기 + self.checkActCmpltCdAndExecute(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '부과', function() { + self.openLevyPrvntcPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '5'); + }); }); - + $("#btnPayUrg").on('click', function() { - // 선택된 행 확인 if (!self.selectedRow) { alert('납부촉구를 관리할 단속 건을 선택해주세요.'); return; } - - // 부과예고 팝업 열기 - self.openLevyPrvntcPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '6'); // 6: 납부촉구 + // 중요로직: 미조치(코드 1) 확인 후 팝업 열기 + self.checkActCmpltCdAndExecute(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '납부촉구', function() { + self.openLevyPrvntcPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '6'); + }); }); // 재부과 버튼 클릭 이벤트 $("#btnRelevy").on('click', function() { - // 선택된 행 확인 if (!self.selectedRow) { alert('재부과를 진행할 단속 건을 선택해주세요.'); return; } - - // 재부과 팝업 열기 - self.openRelevyPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo); + // 중요로직: 미조치(코드 1) 확인 후 팝업 열기 + self.checkActCmpltCdAndExecute(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '재부과', function() { + self.openRelevyPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo); + }); }); // 엔터키 검색