|
|
|
|
@ -24,8 +24,17 @@ import org.springframework.web.servlet.ModelAndView;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 위치정보 컨트롤러
|
|
|
|
|
* packageName : go.kr.project.crdn.crndRegistAndView.crdnPstnInfo.controller
|
|
|
|
|
* fileName : CrdnPstnInfoController
|
|
|
|
|
* author : 시스템 관리자
|
|
|
|
|
* date : 2025-08-28
|
|
|
|
|
* description : 단속 위치정보 관리 컨트롤러
|
|
|
|
|
* 중요한 로직 주석: Grid1(단속자료 위치정보)에서 사용하는 목록/등록 API 제공. 페이징 순서(총건수→setTotalCount→setPagingYn)를 준수한다.
|
|
|
|
|
* 위치정보 등록/수정 시 등록자ID와 시군구코드는 세션에서 설정하고, 삭제 시 논리 삭제를 수행한다.
|
|
|
|
|
* ===========================================================
|
|
|
|
|
* DATE AUTHOR NOTE
|
|
|
|
|
* -----------------------------------------------------------
|
|
|
|
|
* 2025-08-28 시스템 관리자 최초 생성
|
|
|
|
|
*/
|
|
|
|
|
@Controller
|
|
|
|
|
@RequestMapping("/crdn/crndRegistAndView/crdnPstnInfo")
|
|
|
|
|
@ -38,15 +47,23 @@ public class CrdnPstnInfoController {
|
|
|
|
|
private final CommonCodeService commonCodeService;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 위치정보 목록 조회(AJAX)
|
|
|
|
|
* 위치정보 목록을 조회하는 AJAX 메소드
|
|
|
|
|
* 공통 응답 형식(ApiResponse)을 사용하여 응답합니다.
|
|
|
|
|
*
|
|
|
|
|
* @param vo 검색 조건을 담은 VO 객체
|
|
|
|
|
* @return 위치정보 목록과 성공 상태를 담은 ResponseEntity 객체
|
|
|
|
|
* @throws Exception 조회 중 발생할 수 있는 예외
|
|
|
|
|
*/
|
|
|
|
|
@Operation(summary = "위치정보 목록 조회", description = "단속연도/번호로 위치정보를 조회합니다.")
|
|
|
|
|
@Operation(summary = "위치정보 목록 조회 (AJAX)", description = "위치정보 목록을 조회하고 JSON 형식으로 반환합니다.")
|
|
|
|
|
@ApiResponses(value = {
|
|
|
|
|
@ApiResponse(responseCode = "200", description = "조회 성공"),
|
|
|
|
|
@ApiResponse(responseCode = "400", description = "조회 실패")
|
|
|
|
|
@ApiResponse(responseCode = "200", description = "위치정보 목록 조회 성공"),
|
|
|
|
|
@ApiResponse(responseCode = "400", description = "위치정보 목록 조회 실패"),
|
|
|
|
|
@ApiResponse(description = "오류로 인한 실패")
|
|
|
|
|
})
|
|
|
|
|
@PostMapping("/list.ajax")
|
|
|
|
|
public ResponseEntity<?> listAjax(@ModelAttribute CrdnPstnInfoVO vo) {
|
|
|
|
|
log.debug("위치정보 목록 AJAX 조회 - 검색조건: {}", vo);
|
|
|
|
|
|
|
|
|
|
// 1. 총 개수 조회
|
|
|
|
|
int totalCount = service.selectPstnInfoListTotalCount(vo);
|
|
|
|
|
// 2. 응답 데이터 구성
|
|
|
|
|
@ -59,9 +76,17 @@ public class CrdnPstnInfoController {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 위치정보 팝업 화면 제공
|
|
|
|
|
* 중요한 로직 주석: 팝업은 단속연도/번호를 파라미터로 받아 입력폼을 제공, 코드목록(법정동, 지목)을 모델로 전달한다.
|
|
|
|
|
* 수정 모드인 경우 pstnInfoId로 기존 데이터를 조회하여 전달한다.
|
|
|
|
|
* 위치정보 등록/수정 팝업 페이지를 조회합니다.
|
|
|
|
|
* 팝업은 단속연도/번호를 파라미터로 받아 입력폼을 제공하고, 코드목록(법정동, 지목)을 모델로 전달합니다.
|
|
|
|
|
* 수정 모드인 경우 pstnInfoId로 기존 데이터를 조회하여 전달합니다.
|
|
|
|
|
*
|
|
|
|
|
* @param crdnYr 단속 연도
|
|
|
|
|
* @param crdnNo 단속 번호
|
|
|
|
|
* @param mode 모드(C/U/V)
|
|
|
|
|
* @param pstnInfoId 위치정보 ID (수정시 필수)
|
|
|
|
|
* @param model 뷰에 전달할 데이터를 담는 모델 객체
|
|
|
|
|
* @return 위치정보 팝업 페이지 ModelAndView 객체
|
|
|
|
|
* @throws Exception 조회 중 발생할 수 있는 예외
|
|
|
|
|
*/
|
|
|
|
|
@GetMapping("/popup.do")
|
|
|
|
|
@Operation(summary = "위치정보 등록/수정 팝업", description = "위치정보 등록 또는 수정을 위한 팝업 화면을 제공합니다.")
|
|
|
|
|
@ -72,6 +97,8 @@ public class CrdnPstnInfoController {
|
|
|
|
|
@Parameter(description = "위치정보 ID (수정시 필수)") @RequestParam(required = false) String pstnInfoId,
|
|
|
|
|
Model model) {
|
|
|
|
|
|
|
|
|
|
log.debug("위치정보 팝업 조회 - 단속년도: {}, 단속번호: {}, 모드: {}, 위치정보ID: {}", crdnYr, crdnNo, mode, pstnInfoId);
|
|
|
|
|
|
|
|
|
|
// 법정동 코드 목록
|
|
|
|
|
CmmnCodeSearchVO emdSearch = CmmnCodeSearchVO.builder()
|
|
|
|
|
.searchCdGroupId("STDG_EMD_CD")
|
|
|
|
|
@ -103,16 +130,23 @@ public class CrdnPstnInfoController {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 위치정보 등록(AJAX)
|
|
|
|
|
* 중요한 로직 주석: 등록자ID와 시군구코드는 세션에서 설정한다. DEL_YN은 매퍼에서 기본 'N'으로 저장.
|
|
|
|
|
* 새로운 위치정보를 등록하는 AJAX 메소드
|
|
|
|
|
* 등록자ID와 시군구코드는 세션에서 설정하고, DEL_YN은 매퍼에서 기본 'N'으로 저장됩니다.
|
|
|
|
|
*
|
|
|
|
|
* @param vo 등록할 위치정보를 담은 VO 객체
|
|
|
|
|
* @return 등록 결과를 담은 ResponseEntity 객체
|
|
|
|
|
* @throws Exception 등록 중 발생할 수 있는 예외
|
|
|
|
|
*/
|
|
|
|
|
@Operation(summary = "위치정보 등록", description = "단속 자료의 위치정보를 등록합니다.")
|
|
|
|
|
@ApiResponses(value = {
|
|
|
|
|
@ApiResponse(responseCode = "200", description = "등록 성공"),
|
|
|
|
|
@ApiResponse(responseCode = "400", description = "등록 실패")
|
|
|
|
|
@ApiResponse(responseCode = "200", description = "위치정보 등록 성공"),
|
|
|
|
|
@ApiResponse(responseCode = "400", description = "위치정보 등록 실패"),
|
|
|
|
|
@ApiResponse(description = "오류로 인한 실패")
|
|
|
|
|
})
|
|
|
|
|
@PostMapping("/insert.ajax")
|
|
|
|
|
public ResponseEntity<?> insertAjax(@ModelAttribute CrdnPstnInfoVO vo) {
|
|
|
|
|
log.debug("위치정보 등록 요청 - 단속년도: {}, 단속번호: {}", vo.getCrdnYr(), vo.getCrdnNo());
|
|
|
|
|
|
|
|
|
|
vo.setRgtr(SessionUtil.getUserId());
|
|
|
|
|
// 세션의 조직코드를 시군구 코드로 설정
|
|
|
|
|
vo.setSggCd(SessionUtil.getSessionVO().getUser().getOrgCd());
|
|
|
|
|
@ -125,16 +159,23 @@ public class CrdnPstnInfoController {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 위치정보 수정(AJAX)
|
|
|
|
|
* 중요한 로직 주석: 수정자ID는 세션에서 설정한다. 수정일시는 SQL에서 NOW()로 자동 설정.
|
|
|
|
|
* 기존 위치정보를 수정하는 AJAX 메소드
|
|
|
|
|
* 수정자ID는 세션에서 설정하고, 수정일시는 SQL에서 NOW()로 자동 설정됩니다.
|
|
|
|
|
*
|
|
|
|
|
* @param vo 수정할 위치정보를 담은 VO 객체
|
|
|
|
|
* @return 수정 결과를 담은 ResponseEntity 객체
|
|
|
|
|
* @throws Exception 수정 중 발생할 수 있는 예외
|
|
|
|
|
*/
|
|
|
|
|
@Operation(summary = "위치정보 수정", description = "단속 자료의 위치정보를 수정합니다.")
|
|
|
|
|
@ApiResponses(value = {
|
|
|
|
|
@ApiResponse(responseCode = "200", description = "수정 성공"),
|
|
|
|
|
@ApiResponse(responseCode = "400", description = "수정 실패")
|
|
|
|
|
@ApiResponse(responseCode = "200", description = "위치정보 수정 성공"),
|
|
|
|
|
@ApiResponse(responseCode = "400", description = "위치정보 수정 실패"),
|
|
|
|
|
@ApiResponse(description = "오류로 인한 실패")
|
|
|
|
|
})
|
|
|
|
|
@PostMapping("/update.ajax")
|
|
|
|
|
public ResponseEntity<?> updateAjax(@ModelAttribute CrdnPstnInfoVO vo) {
|
|
|
|
|
log.debug("위치정보 수정 요청 - 위치정보ID: {}", vo.getPstnInfoId());
|
|
|
|
|
|
|
|
|
|
vo.setMdfr(SessionUtil.getUserId());
|
|
|
|
|
|
|
|
|
|
int result = service.updatePstnInfo(vo);
|
|
|
|
|
@ -145,16 +186,23 @@ public class CrdnPstnInfoController {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 위치정보 삭제(AJAX)
|
|
|
|
|
* 중요한 로직 주석: 다중 위치정보를 논리 삭제(DEL_YN='Y') 처리한다. 삭제자ID와 삭제일시는 세션과 SQL에서 자동 설정.
|
|
|
|
|
* 선택된 위치정보들을 삭제하는 AJAX 메소드
|
|
|
|
|
* 다중 위치정보를 논리 삭제(DEL_YN='Y') 처리합니다. 삭제자ID와 삭제일시는 세션과 SQL에서 자동 설정됩니다.
|
|
|
|
|
*
|
|
|
|
|
* @param pstnInfoIds 삭제할 위치정보 ID 목록
|
|
|
|
|
* @return 삭제 결과를 담은 ResponseEntity 객체
|
|
|
|
|
* @throws Exception 삭제 중 발생할 수 있는 예외
|
|
|
|
|
*/
|
|
|
|
|
@Operation(summary = "위치정보 삭제", description = "선택된 위치정보들을 삭제합니다.")
|
|
|
|
|
@ApiResponses(value = {
|
|
|
|
|
@ApiResponse(responseCode = "200", description = "삭제 성공"),
|
|
|
|
|
@ApiResponse(responseCode = "400", description = "삭제 실패")
|
|
|
|
|
@ApiResponse(responseCode = "200", description = "위치정보 삭제 성공"),
|
|
|
|
|
@ApiResponse(responseCode = "400", description = "위치정보 삭제 실패"),
|
|
|
|
|
@ApiResponse(description = "오류로 인한 실패")
|
|
|
|
|
})
|
|
|
|
|
@PostMapping("/delete.ajax")
|
|
|
|
|
public ResponseEntity<?> deleteAjax(@RequestParam("pstnInfoIds") List<String> pstnInfoIds) {
|
|
|
|
|
log.debug("위치정보 삭제 요청 - 위치정보ID 목록: {}", pstnInfoIds);
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
String dltr = SessionUtil.getUserId();
|
|
|
|
|
int result = service.deletePstnInfos(pstnInfoIds, dltr);
|
|
|
|
|
|