From dade7259482567c8dd10636cce984c88d9c7db9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=84=B1=EC=98=81?= Date: Thu, 2 Oct 2025 13:31:10 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9E=AC=EB=B6=80=EA=B3=BC=20=EA=B7=B8?= =?UTF-8?q?=EB=A6=AC=EB=93=9C=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/LevyRelevyController.java | 127 ++++ .../levyRelevy/mapper/LevyRelevyMapper.java | 38 ++ .../levy/levyRelevy/model/LevyRelevyVO.java | 211 +++++++ .../levyRelevy/service/LevyRelevyService.java | 37 ++ .../service/impl/LevyRelevyServiceImpl.java | 54 ++ .../levyRelevy/RevyRelevyMapper_maria.xml | 137 +++++ .../WEB-INF/views/levy/levyRelevy/list.jsp | 559 ++++++++++++++++++ 7 files changed, 1163 insertions(+) create mode 100644 src/main/java/go/kr/project/levy/levyRelevy/controller/LevyRelevyController.java create mode 100644 src/main/java/go/kr/project/levy/levyRelevy/mapper/LevyRelevyMapper.java create mode 100644 src/main/java/go/kr/project/levy/levyRelevy/model/LevyRelevyVO.java create mode 100644 src/main/java/go/kr/project/levy/levyRelevy/service/LevyRelevyService.java create mode 100644 src/main/java/go/kr/project/levy/levyRelevy/service/impl/LevyRelevyServiceImpl.java create mode 100644 src/main/resources/mybatis/mapper/levy/levyRelevy/RevyRelevyMapper_maria.xml create mode 100644 src/main/webapp/WEB-INF/views/levy/levyRelevy/list.jsp diff --git a/src/main/java/go/kr/project/levy/levyRelevy/controller/LevyRelevyController.java b/src/main/java/go/kr/project/levy/levyRelevy/controller/LevyRelevyController.java new file mode 100644 index 0000000..230e900 --- /dev/null +++ b/src/main/java/go/kr/project/levy/levyRelevy/controller/LevyRelevyController.java @@ -0,0 +1,127 @@ +package go.kr.project.levy.levyRelevy.controller; + +import egovframework.constant.TilesConstants; +import egovframework.util.ApiResponseUtil; +import go.kr.project.common.model.CmmnCodeSearchVO; +import go.kr.project.common.service.CommonCodeService; +import go.kr.project.crdn.crndRegistAndView.main.model.CrdnRegistAndViewVO; +import go.kr.project.crdn.crndRegistAndView.main.service.CrdnImpltTaskService; +import go.kr.project.levy.levyRelevy.model.LevyRelevyVO; +import go.kr.project.levy.levyRelevy.service.LevyRelevyService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +import java.util.List; + +/** + * packageName : go.kr.project.levy.levyRelevy.controller + * fileName : LevyRelevyController + * author : 시스템 관리자 + * date : 2025-08-25 + * description : 재부과 관련 요청을 처리하는 컨트롤러 + * 중요한 로직 주석: 재부과 대상 조회 화면 제공 및 목록 조회 API를 처리하는 컨트롤러 + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2025-08-25 시스템 관리자 최초 생성 + */ +@Controller +@RequestMapping("/levy/levyRelevy") +@RequiredArgsConstructor +@Slf4j +@Tag(name = "재부과", description = "재부과 관련 API") +public class LevyRelevyController { + + /** 재부과 서비스 */ + private final LevyRelevyService service; + + /** 이행정보 서비스 */ + private final CrdnImpltTaskService crdnImpltTaskService; + + private final CommonCodeService commonCodeService; + + /** + * 재부과 대상 목록 화면을 제공하고, 검색 조건에 사용될 공통코드를 모델에 추가한다. + * @param model 뷰에 전달할 데이터를 담는 모델 객체 + * @return 재부과 대상 목록 화면 경로 + */ + @GetMapping("/list.do") + @Operation(summary = "재부과 대상 목록 화면", description = "재부과 대상 목록을 조회하는 화면을 제공합니다.") + public String list( Model model ) { + log.debug("재부과 대상 목록 화면 요청"); + + //법정동 읍면동 코드 조회 + CmmnCodeSearchVO stdgEmdCdSearchVO = CmmnCodeSearchVO.builder() + .searchCdGroupId("STDG_EMD_CD") + .sortColumn("SORT_ORDR") + .sortAscending(true) + .build(); + model.addAttribute("stdgEmdCdList", commonCodeService.selectCodeDetailList(stdgEmdCdSearchVO)); + + //지역구분 코드 조회 + CmmnCodeSearchVO rgnSeCdSearchVO = CmmnCodeSearchVO.builder() + .searchCdGroupId("RGN_SE_CD") + .sortColumn("SORT_ORDR") + .sortAscending(true) + .build(); + model.addAttribute("regionList", commonCodeService.selectCodeDetailList(rgnSeCdSearchVO)); + + //적발방법 코드 조회 + CmmnCodeSearchVO dsclMthdCdSearchVO = CmmnCodeSearchVO.builder() + .searchCdGroupId("DSCL_MTHD_CD") + .sortColumn("CD_NM") + .sortAscending(true) + .build(); + model.addAttribute("dsclMthdCdList", commonCodeService.selectCodeDetailList(dsclMthdCdSearchVO)); + + //진행단계 코드 조회 + CmmnCodeSearchVO crdnPrcsSttsCdSearchVO = CmmnCodeSearchVO.builder() + .searchCdGroupId("CRDN_PRCS_STTS_CD") + .sortColumn("SORT_ORDR") + .sortAscending(true) + .build(); + model.addAttribute("crdnPrcsSttsCdList", commonCodeService.selectCodeDetailList(crdnPrcsSttsCdSearchVO)); + + return "levy/levyRelevy/list" + TilesConstants.BASE; + } + + /** + * 재부과 대상 목록을 조회하는 AJAX 메소드 + * 공통 응답 형식(ApiResponse)을 사용하여 응답합니다. + * + * @param paramVO 검색 조건을 담은 VO 객체 + * @return 재부과 대상 목록과 성공 상태를 담은 ResponseEntity 객체 + */ + @Operation(summary = "재부과 대상 목록 조회 (AJAX)", description = "재부과 대상 목록을 조회하고 JSON 형식으로 반환합니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "재부과 대상 목록 조회 성공"), + @ApiResponse(responseCode = "400", description = "재부과 대상 목록 조회 실패"), + @ApiResponse(description = "오류로 인한 실패") + }) + @PostMapping("/list.ajax") + public ResponseEntity listAjax(@ModelAttribute LevyRelevyVO paramVO) { + + // 총 재부과 대상 수 조회 + int totalCount = service.selectListTotalCount(paramVO); + paramVO.setTotalCount(totalCount); + + // 페이징 처리를 위한 설정 + paramVO.setPagingYn("Y"); + + // 페이징 처리된 재부과 대상 목록 조회 + List list = service.selectList(paramVO); + return ApiResponseUtil.successWithGrid(list, paramVO); + } + +} \ No newline at end of file diff --git a/src/main/java/go/kr/project/levy/levyRelevy/mapper/LevyRelevyMapper.java b/src/main/java/go/kr/project/levy/levyRelevy/mapper/LevyRelevyMapper.java new file mode 100644 index 0000000..8a0461b --- /dev/null +++ b/src/main/java/go/kr/project/levy/levyRelevy/mapper/LevyRelevyMapper.java @@ -0,0 +1,38 @@ +package go.kr.project.levy.levyRelevy.mapper; + +import go.kr.project.levy.levyRelevy.model.LevyRelevyVO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * packageName : go.kr.project.levy.levyRelevy.mapper + * fileName : LevyRelevyMapper + * author : 시스템 관리자 + * date : 2025-08-25 + * description : 재부과 관련 데이터베이스 접근을 위한 MyBatis 매퍼 인터페이스 + * 중요한 로직 주석: 재부과 조회를 위해 단속 테이블(tb_crdn)에 대한 조회 작업을 수행하는 매퍼 인터페이스 + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2025-08-25 시스템 관리자 최초 생성 + */ +@Mapper +public interface LevyRelevyMapper { + + /** + * 재부과 대상 목록을 조회한다. + * @param vo 검색 조건과 페이징 정보를 담은 VO 객체 + * @return 재부과 대상 목록 + */ + List selectList(LevyRelevyVO vo); + + /** + * 재부과 대상 목록의 총 개수를 조회한다. + * @param vo 검색 조건을 담은 VO 객체 + * @return 조회된 목록의 총 개수 + */ + int selectListTotalCount(LevyRelevyVO vo); + + +} \ No newline at end of file diff --git a/src/main/java/go/kr/project/levy/levyRelevy/model/LevyRelevyVO.java b/src/main/java/go/kr/project/levy/levyRelevy/model/LevyRelevyVO.java new file mode 100644 index 0000000..86c0b85 --- /dev/null +++ b/src/main/java/go/kr/project/levy/levyRelevy/model/LevyRelevyVO.java @@ -0,0 +1,211 @@ +package go.kr.project.levy.levyRelevy.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import go.kr.project.common.model.PagingVO; +import lombok.*; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +/** + * packageName : go.kr.project.levy.levyRelevy.model + * fileName : LevyRelevyVO + * author : 시스템 관리자 + * date : 2025-08-25 + * description : 재부과 관련 데이터를 담는 Value Object 클래스 + * 중요한 로직 주석: 재부과 조회를 위해 단속 테이블(tb_crdn)과 매핑되는 VO 클래스로 페이징 기능을 포함한다. + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2025-08-25 시스템 관리자 최초 생성 + */ +@EqualsAndHashCode(callSuper=true) +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class LevyRelevyVO extends PagingVO { + + // ==================== 기본 테이블 컬럼 ==================== + + /** 단속 연도 */ + private String crdnYr; + + /** 단속 번호 */ + private String crdnNo; + + /** 시군구 코드(그룹코드:ORG_CD, 로그인한 사용자정보에서 ORG_CD 가져온다.) */ + private String sggCd; + + /** 지역 구분 코드 */ + private String rgnSeCd; + + /** 적발 방법 코드 */ + private String dsclMthdCd; + + /** 적발 일자 */ + private String dsclYmd; + + /** 조사원 */ + private String exmnr; + + + /** 비고 */ + private String rmrk; + + /** 처분 사전 시작 일자 */ + private String dspsBfhdBgngYmd; + + /** 처분 사전 종료 일자 */ + private String dspsBfhdEndYmd; + + /** 시정 명령 시작 일자 */ + private String crcCmdBgngYmd; + + /** 시정 명령 종료 일자 */ + private String crcCmdEndYmd; + + /** 시정 촉구 시작 일자 */ + private String crcUrgBgngYmd; + + /** 시정 촉구 종료 일자 */ + private String crcUrgEndYmd; + + /** 부과 예고 시작 일자 */ + private String levyPrvntcBgngYmd; + + /** 부과 예고 종료 일자 */ + private String levyPrvntcEndYmd; + + /** 부과 시작 일자 */ + private String levyBgngYmd; + + /** 부과 종료 일자 */ + private String levyEndYmd; + + /** 납부 촉구 시작 일자 */ + private String payUrgBgngYmd; + + /** 납부 촉구 종료 일자 */ + private String payUrgEndYmd; + + /** 최초 단속 연도 */ + private String frstCrdnYr; + + /** 최초 단속 번호 */ + private String frstCrdnNo; + + /** 재부과 여부 */ + private String relevyYn; + + /** 가중 부과 대상 여부 */ + private String agrvtnLevyTrgtYn; + + /* 단속 처리 상태 코드 */ + private String crdnPrcsSttsCd; + + /* 단속 처리 일자 */ + private String crdnPrcsYmd; + + /* 법정동 읍면동 코드 */ + private String stdgEmdCd; + + /* 행위 유형 코드 */ + private String actTypeCd; + + /* 용도 지수 코드 */ + private String usgIdxCd; + + /** 등록 일시 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul") + private LocalDateTime regDt; + + /** 등록자 */ + private String rgtr; + + /** 등록자 계정 */ + private String rgtrAcnt; + + /** 등록자 사용자명 */ + private String rgtrNm; + + /** 삭제 여부 */ + private String delYn; + + /** 삭제 일시 */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul") + private LocalDateTime delDt; + + /** 삭제자 */ + private String dltr; + + // ==================== 조인 컬럼 (코드명) ==================== + + /** 시군구 코드명 */ + private String sggCdNm; + + /** 지역 구분 코드명 */ + private String rgnSeCdNm; + + /** 적발 방법 코드명 */ + private String dsclMthdCdNm; + + + /** 단속 처리 상태 코드명 */ + private String crdnPrcsSttsCdNm; + + /** 소유자명들 (쉼표로 구분) */ + private String ownrNams; + + /** 행위자명들 (쉼표로 구분) */ + private String actrNams; + + /** 법정동 읍면동 코드명 */ + private String stdgEmdCdNm; + + /** 행위 유형 코드명 */ + private String actTypeCdNm; + + /** 용도 지수 코드명 */ + private String usgIdxCdNm; + + /** 지번 전체 주소 */ + private String lotnoWholAddr; + + /** 우편번호 */ + private String zip; + + /** 역순 행 번호 (그리드 표시용) */ + private Integer rowNum; + + + // ==================== 검색 조건 ==================== + + /** 검색 조건 - 단속 연도 */ + private String schCrdnYr; + + /** 검색 조건 - 단속 번호 */ + private String schCrdnNo; + + /** 검색 조건 - 법정동 읍면동 코드 */ + private String schStdgEmdCd; + + /** 검색 조건 - 지역 구분 코드 */ + private String schRgnSeCd; + + /** 검색 조건 - 적발 방법 코드 */ + private String schDsclMthdCd; + + /** 검색 조건 - 조사원 */ + private String schExmnr; + + /** 검색 조건 - 진행단계 코드 */ + private String schCrdnPrcsSttsCd; + + /** 검색 조건 - 가중 부과 대상 여부 */ + private String schAgrvtnLevyTrgtYn; + +} \ No newline at end of file diff --git a/src/main/java/go/kr/project/levy/levyRelevy/service/LevyRelevyService.java b/src/main/java/go/kr/project/levy/levyRelevy/service/LevyRelevyService.java new file mode 100644 index 0000000..5754a04 --- /dev/null +++ b/src/main/java/go/kr/project/levy/levyRelevy/service/LevyRelevyService.java @@ -0,0 +1,37 @@ +package go.kr.project.levy.levyRelevy.service; + +import go.kr.project.levy.levyRelevy.model.LevyRelevyVO; + +import java.util.List; + +/** + * packageName : go.kr.project.levy.levyRelevy.service + * fileName : LevyRelevyService + * author : 박성영 + * date : 2025-08-25 + * description : 재부과 관련 비즈니스 로직을 처리하는 서비스 인터페이스 + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2025-08-25 박성영 최초 생성 + */ +public interface LevyRelevyService { + + /** + * 재부과 대상 목록을 조회합니다. + * + * @param vo 검색 조건과 페이징 정보를 담은 VO 객체 + * @return 재부과 대상 목록 + */ + List selectList(LevyRelevyVO vo); + + /** + * 재부과 대상 목록의 총 개수를 조회합니다. + * + * @param vo 검색 조건을 담은 VO 객체 + * @return 조회된 목록의 총 개수 + */ + int selectListTotalCount(LevyRelevyVO vo); + + +} \ No newline at end of file diff --git a/src/main/java/go/kr/project/levy/levyRelevy/service/impl/LevyRelevyServiceImpl.java b/src/main/java/go/kr/project/levy/levyRelevy/service/impl/LevyRelevyServiceImpl.java new file mode 100644 index 0000000..9e006b8 --- /dev/null +++ b/src/main/java/go/kr/project/levy/levyRelevy/service/impl/LevyRelevyServiceImpl.java @@ -0,0 +1,54 @@ +package go.kr.project.levy.levyRelevy.service.impl; + +import go.kr.project.levy.levyRelevy.mapper.LevyRelevyMapper; +import go.kr.project.levy.levyRelevy.model.LevyRelevyVO; +import go.kr.project.levy.levyRelevy.service.LevyRelevyService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * packageName : go.kr.project.levy.levyRelevy.service.impl + * fileName : LevyRelevyServiceImpl + * author : 박성영 + * date : 2025-08-25 + * description : 재부과 관련 비즈니스 로직을 처리하는 서비스 구현체 + * 중요한 로직 주석: 재부과 대상 조회 시 페이징 처리와 검색 조건을 적용하여 목록을 제공한다. + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2025-08-25 박성영 최초 생성 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class LevyRelevyServiceImpl extends EgovAbstractServiceImpl implements LevyRelevyService { + + private final LevyRelevyMapper mapper; + + /** + * 재부과 대상 목록을 조회합니다. + * + * @param vo 검색 조건과 페이징 정보를 담은 VO 객체 + * @return 재부과 대상 목록 + */ + @Override + public List selectList(LevyRelevyVO vo) { + return mapper.selectList(vo); + } + + /** + * 재부과 대상 목록의 총 개수를 조회합니다. + * + * @param vo 검색 조건을 담은 VO 객체 + * @return 조회된 목록의 총 개수 + */ + @Override + public int selectListTotalCount(LevyRelevyVO vo) { + return mapper.selectListTotalCount(vo); + } + +} \ No newline at end of file diff --git a/src/main/resources/mybatis/mapper/levy/levyRelevy/RevyRelevyMapper_maria.xml b/src/main/resources/mybatis/mapper/levy/levyRelevy/RevyRelevyMapper_maria.xml new file mode 100644 index 0000000..f048cb9 --- /dev/null +++ b/src/main/resources/mybatis/mapper/levy/levyRelevy/RevyRelevyMapper_maria.xml @@ -0,0 +1,137 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/levy/levyRelevy/list.jsp b/src/main/webapp/WEB-INF/views/levy/levyRelevy/list.jsp new file mode 100644 index 0000000..72ddd4f --- /dev/null +++ b/src/main/webapp/WEB-INF/views/levy/levyRelevy/list.jsp @@ -0,0 +1,559 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> +<%@ taglib prefix="dateUtil" uri="http://egovframework.go.kr/functions/date-util" %> + + +
+
+
+
+
+ <%-- + --%> +
+
+
+
+
+
    +
  • 단속 년도
  • +
  • + +
  • +
  • 단속 번호
  • +
  • + +
  • +
  • 법정동
  • +
  • + +
  • +
  • 지역 구분
  • +
  • + +
  • +
  • 적발 방법
  • +
  • + +
  • +
  • 조사원
  • +
  • + +
  • +
  • 진행단계
  • +
  • + +
  • +
  • 가중 부과 대상
  • +
  • + +
  • +
+
    +
  • +
  • +
+
+
+
+
+
+
    +
  • 단속 목록
  • +
  • + 총 0건 + + / Pages +
  • +
+
+
+
+
+
+
+
+
+
+ + + \ No newline at end of file