From 9d3924d3e10c94cb756244732dd434582ea3d2d1 Mon Sep 17 00:00:00 2001 From: dg_kim Date: Wed, 22 Oct 2025 16:32:48 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B6=80=EA=B3=BC=20=EB=A9=94=EB=89=B4=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=EB=B0=8F=20=EB=A6=AC=ED=8F=AC=ED=8A=B8=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../levy/levy/controller/LevyController.java | 119 ++++ .../project/levy/levy/mapper/LevyMapper.java | 49 ++ .../levy/levy/model/LevyNotiImpltInfoVO.java | 133 ++++ .../levy/model/LevyNotiImpltTrprInfoVO.java | 126 ++++ .../levy/levy/service/LevyService.java | 48 ++ .../levy/service/impl/LevyServiceImpl.java | 53 ++ .../mapper/levy/levy/LevyMapper_maria.xml | 107 +++ .../webapp/WEB-INF/views/levy/levy/list.jsp | 619 ++++++++++++++++++ src/main/webapp/ubi4/levyReport.jsp | 127 ++++ src/main/webapp/ubi4/work/levyReport.jrf | Bin 0 -> 9959 bytes 10 files changed, 1381 insertions(+) create mode 100644 src/main/java/go/kr/project/levy/levy/controller/LevyController.java create mode 100644 src/main/java/go/kr/project/levy/levy/mapper/LevyMapper.java create mode 100644 src/main/java/go/kr/project/levy/levy/model/LevyNotiImpltInfoVO.java create mode 100644 src/main/java/go/kr/project/levy/levy/model/LevyNotiImpltTrprInfoVO.java create mode 100644 src/main/java/go/kr/project/levy/levy/service/LevyService.java create mode 100644 src/main/java/go/kr/project/levy/levy/service/impl/LevyServiceImpl.java create mode 100644 src/main/resources/mybatis/mapper/levy/levy/LevyMapper_maria.xml create mode 100644 src/main/webapp/WEB-INF/views/levy/levy/list.jsp create mode 100644 src/main/webapp/ubi4/levyReport.jsp create mode 100644 src/main/webapp/ubi4/work/levyReport.jrf diff --git a/src/main/java/go/kr/project/levy/levy/controller/LevyController.java b/src/main/java/go/kr/project/levy/levy/controller/LevyController.java new file mode 100644 index 0000000..ae6a8f8 --- /dev/null +++ b/src/main/java/go/kr/project/levy/levy/controller/LevyController.java @@ -0,0 +1,119 @@ +package go.kr.project.levy.levy.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.noti.model.NotiImpltInfoVO; +import go.kr.project.noti.model.NotiImpltTrprInfoVO; +import go.kr.project.noti.service.NotiService; +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 javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * packageName : go.kr.project.levy.levy.controller + * fileName : LevyController + * author : 김동규 + * date : 2025-10-14 + * description : 부과 관리 관련 요청을 처리하는 컨트롤러 + * 중요한 로직 주석: 부과 관련 화면 제공 및 CRUD API를 처리하는 컨트롤러 + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2025-10-14 김동규 최초 생성 + */ + +@Controller +@RequestMapping("/levy/levy/") +@RequiredArgsConstructor +@Slf4j +@Tag(name = "부과정보 관리", description = "부과 정보 관리 관련 API") +public class LevyController { + + /** 이행정보 서비스 */ + private final NotiService service; + + /** 코드 서비스 */ + private final CommonCodeService commonCodeService; + + @GetMapping("/list.do") + @Operation(summary = "이행정보 관리 화면", description = "이행정보 목록을 조회합니다.") + public String mainPage(Model model, HttpServletRequest request) { + + //진행단계 코드 조회 + CmmnCodeSearchVO impltTaskSeCdSearchVO = CmmnCodeSearchVO.builder() + .searchCdGroupId("IMPLT_TASK_SE_CD") + .sortColumn("SORT_ORDR") + .sortAscending(true) + .build(); + model.addAttribute("impltTaskSeCdList", commonCodeService.selectCodeDetailList(impltTaskSeCdSearchVO)); + + return "levy/levy/list"+ TilesConstants.BASE; + } + + /** + * 이행정보 목록을 조회하는 AJAX 메소드 + * 공통 응답 형식(ApiResponse)을 사용하여 응답합니다. + * + * @param paramVO 검색 조건을 담은 VO 객체 + * @return 이행정보 목록과 성공 상태를 담은 ResponseEntity 객체 + * @throws Exception 조회 중 발생할 수 있는 예외 + */ + @Operation(summary = "이행정보 목록 조회 (AJAX)", description = "이행정보 목록을 조회하고 JSON 형식으로 반환합니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "이행정보 목록 조회 성공"), + @ApiResponse(responseCode = "400", description = "이행정보 목록 조회 실패"), + @ApiResponse(description = "오류로 인한 실패") + }) + @PostMapping("/levyImpltInfolist.ajax") + public ResponseEntity levyImpltInfolistAjax(@ModelAttribute NotiImpltInfoVO paramVO) { + + // 총 이행정보 수 조회 + int totalCount = service.selectImpltInfoListTotalCount(paramVO); + paramVO.setTotalCount(totalCount); + + // 페이징 처리를 위한 설정 + paramVO.setPagingYn("Y"); + + // 페이징 처리된 이행정보 목록 조회 + List list = service.selectImpltInfoList(paramVO); + return ApiResponseUtil.successWithGrid(list, paramVO); + } + + /** + * 이행 대상자를 조회하는 AJAX 메소드 + * + * @param paramVO 검색 조건을 담은 VO 객체 + * @return 이행 대상자 목록과 성공 상태를 담은 ResponseEntity 객체 + * @throws Exception 조회 중 발생할 수 있는 예외 + */ + @Operation(summary = "이행 대상자 목록 조회", description = "이행 대상자 목록을 조회합니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "이행 대상자 목록 조회 성공"), + @ApiResponse(responseCode = "400", description = "이행 대상자 목록 조회 실패"), + @ApiResponse(description = "오류로 인한 실패") + }) + @PostMapping("/levyImpltTrprInfolist.ajax") + public ResponseEntity levyImpltInfolistAjax(@ModelAttribute NotiImpltTrprInfoVO paramVO) { + + List result = service.selectImpltTrprInfoList(paramVO); + + return ApiResponseUtil.successWithGrid(result, paramVO); + + } + +} diff --git a/src/main/java/go/kr/project/levy/levy/mapper/LevyMapper.java b/src/main/java/go/kr/project/levy/levy/mapper/LevyMapper.java new file mode 100644 index 0000000..5dea217 --- /dev/null +++ b/src/main/java/go/kr/project/levy/levy/mapper/LevyMapper.java @@ -0,0 +1,49 @@ +package go.kr.project.levy.levy.mapper; + +import go.kr.project.levy.levy.model.LevyNotiImpltInfoVO; +import go.kr.project.levy.levy.model.LevyNotiImpltTrprInfoVO; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * packageName : go.kr.project.levy.levy.mapper + * fileName : LevyMapper + * author : 김동규 + * date : 2025-10-14 + * description : 이행정보 관련 데이터베이스 접근을 위한 MyBatis 매퍼 인터페이스 + * 중요한 로직 주석: 이행정보 테이블(tb_implt_info)과 이행대상자 테이블(tb_implt_trpr_info)에 대한 CRUD 작업을 수행한다. + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2025-09-08 시스템 관리자 최초 생성 + */ +@Mapper +public interface LevyMapper { + + // ==================== 이행정보(TB_IMPLT_INFO) 관련 메서드 ==================== + + /** + * 이행정보 목록의 총 개수를 조회한다. + * @param vo 검색 조건을 담은 VO 객체 + * @return 조회된 목록의 총 개수 + */ + int selectImpltInfoListTotalCount(LevyNotiImpltInfoVO vo); + + /** + * 이행정보 목록을 조회한다. + * @param vo 조회할 단속 정보와 이행업무구분코드를 담은 VO 객체 + * @return 조회된 이행정보 + */ + List selectImpltInfoList(LevyNotiImpltInfoVO vo); + + // ==================== 이행 대상자 정보(TB_IMPLT_TRPR_INFO) 관련 메서드 ==================== + + /** + * 이행 대상자 정보 목록을 조회한다. + * @param vo 조회할 이행정보 ID를 담은 VO 객체 + * @return 이행 대상자 정보 목록 + */ + List selectImpltTrprInfoList(LevyNotiImpltTrprInfoVO vo); + +} \ No newline at end of file diff --git a/src/main/java/go/kr/project/levy/levy/model/LevyNotiImpltInfoVO.java b/src/main/java/go/kr/project/levy/levy/model/LevyNotiImpltInfoVO.java new file mode 100644 index 0000000..d7ecc23 --- /dev/null +++ b/src/main/java/go/kr/project/levy/levy/model/LevyNotiImpltInfoVO.java @@ -0,0 +1,133 @@ +package go.kr.project.levy.levy.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import go.kr.project.common.model.PagingVO; +import go.kr.project.noti.model.NotiImpltTrprInfoVO; +import lombok.*; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; +import java.util.List; + +/** + * packageName : go.kr.project.levy.levy.model + * fileName : LevyNotiImpltInfoVO + * author : 김동규 + * date : 2025-10-14 + * description : 이행정보 관련 데이터를 담는 Value Object 클래스 + * 중요한 로직 주석: 이행정보 테이블(tb_implt_info)과 매핑되는 VO 클래스로 페이징 기능을 포함한다. + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2025-10-14 김동규 최초 생성 + */ +@EqualsAndHashCode(callSuper=true) +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class LevyNotiImpltInfoVO extends PagingVO { + + // ==================== 기본 테이블 컬럼 (TB_IMPLT_INFO) ==================== + + /** 이행정보 ID */ + private String impltInfoId; + + /** 시군구 코드 */ + private String sggCd; + + /** 단속 연도 */ + private String crdnYr; + + /** 단속 번호 */ + private String crdnNo; + + /** 이행업무구분코드 (1:처분사전, 2:시정명령, 3:시정촉구, 4:부과예고, 5:부과, 6:납부촉구) */ + private String impltTaskSeCd; + + /** 이행 시작 일자 (행정처분 시작일) */ + private String impltBgngYmd; + + /** 이행 종료 일자 (행정처분 종료일) */ + private String impltEndYmd; + + /** 행정처분 간격일 (자동계산) */ + private Integer impltDaysCnt; + + /** 등록 일시 */ + @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; + + /** 수정 일시 */ + @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 mdfcnDt; + + /** 수정자 */ + private String mdfr; + + /** 삭제 여부 */ + 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; + + // ==================== 추가 필드 ==================== + + /** 모드 (C:등록, U:수정, V:보기, D:삭제) */ + private String mode; + + /** 단속 정보 (조인용) */ + private String dsclYmd; // 적발일자 + private String exmnr; // 조사원 + private String lotnoWholAddr; // 지번전체주소 + private String lotnoAddr; // 지번주소 + private String lotnoMno; // 지번본번 + private String lotnoSno; // 지번부번 + + // ==================== 조인 컬럼 (코드명) ==================== + + /** 이행업무구분코드명 */ + private String impltTaskSeCdNm; + + /** 지역구분코드 */ + private String rgnSeCd; + + /** 지역구분코드명 */ + private String rgnSeCdNm; + + /** 표준읍면동코드 */ + private String stdgEmdCd; + + /** 표준읍면동코드명 */ + private String stdgEmdCdNm; + + private String rgtrNm; + private String mdrfNm; + + // ==================== 검색 조건 ==================== + + /** 검색 조건 - 단속 연도 */ + private String schCrdnYr; + + /** 검색 조건 - 진행 단계 코드 */ + private String schImpltTaskSeCd; + + /** 검색 조건 - 행정처분시작일 */ + private String schImpltBgngYmd1; + private String schImpltBgngYmd2; + // ==================== 이행 대상자 정보, 등록용도 ==================== + + /** 이행 대상자 정보 리스트 */ + private List impltTrprInfoList; +} \ No newline at end of file diff --git a/src/main/java/go/kr/project/levy/levy/model/LevyNotiImpltTrprInfoVO.java b/src/main/java/go/kr/project/levy/levy/model/LevyNotiImpltTrprInfoVO.java new file mode 100644 index 0000000..10e4453 --- /dev/null +++ b/src/main/java/go/kr/project/levy/levy/model/LevyNotiImpltTrprInfoVO.java @@ -0,0 +1,126 @@ +package go.kr.project.levy.levy.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.levy.model + * fileName : LevyNotiImpltTrprInfoVO + * author : 김동규 + * date : 2025-10-14 + * description : 이행 대상자 정보 관련 데이터를 담는 Value Object 클래스 + * 중요한 로직 주석: 이행 대상자 정보 테이블(tb_implt_trpr_info)과 매핑되는 VO 클래스 + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2025-10-14 김동규 최초 생성 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class LevyNotiImpltTrprInfoVO extends PagingVO { + + // ==================== 기본 테이블 컬럼 (TB_IMPLT_TRPR_INFO) ==================== + + /** 이행 대상자 정보 ID */ + private String impltTrprInfoId; + + /** 시군구 코드 */ + private String sggCd; + + /** 이행 정보 ID */ + private String impltInfoId; + + /** 이행 대상자 성명 */ + private String impltTrprFlnm; + + /** 이행 대상자 주소 */ + private String impltTrprAddr; + + /** 이행 대상자 상세주소 */ + private String impltTrprDaddr; + + /** 이행 대상자 우편번호 */ + private String impltTrprZip; + + /** 이행 대상자 구분 코드 (1:소유자, 2:행위자) */ + private String impltTrprSeCd; + + /** 소유자 행위자 정보 ID */ + private String ownrActrInfoId; + + /** 행위 번호 */ + private String actNo; + + /** 등록 일시 */ + @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; + + /** 수정 일시 */ + @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 mdfcnDt; + + /** 수정자 */ + private String mdfr; + + /** 삭제 여부 */ + 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 impltTrprSeCdNm; + + /** 시군구 코드명 */ + private String sggCdNm; + + /** 행위 구분 */ + private String actTypeCdNm; + + // ==================== 추가 필드 (체크박스 선택용) ==================== + + /** 체크박스 선택 여부 */ + //private boolean selected; + + //private String lotnoMno; + //private String lotnoSno; + + // ==================== 검색 조건 ==================== + + /** 검색 조건 - 이행 정보 ID */ + private String schImpltInfoId; + + // ==================== TUI 그리드용 속성 ==================== + /** + * TUI Grid 행 속성 (예: 체크박스, 클래스명) + *
+     * {
+     *   "checked": true,
+     *   "className": {
+     *     "row": ["red"]
+     *   }
+     * }
+     * 
+ */ + private java.util.Map _attributes; + +} \ No newline at end of file diff --git a/src/main/java/go/kr/project/levy/levy/service/LevyService.java b/src/main/java/go/kr/project/levy/levy/service/LevyService.java new file mode 100644 index 0000000..fb7e5d3 --- /dev/null +++ b/src/main/java/go/kr/project/levy/levy/service/LevyService.java @@ -0,0 +1,48 @@ +package go.kr.project.levy.levy.service; + +import go.kr.project.levy.levy.model.LevyNotiImpltInfoVO; +import go.kr.project.levy.levy.model.LevyNotiImpltTrprInfoVO; + +import java.util.List; + +/** + * packageName : go.kr.project.levy.levy.service + * fileName : LevyService + * author : 김동규 + * date : 2025-10-14 + * description : 이행정보 관련 비즈니스 로직을 처리하는 서비스 인터페이스 + * 중요한 로직 주석: 이행정보와 이행대상자 정보의 CRUD 기능을 제공한다. + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2025-10-14 김동규 최초 생성 + */ +public interface LevyService { + + // ==================== 이행정보(TB_IMPLT_INFO) 관련 메서드 ==================== + + /** + * 이행정보 목록의 총 개수를 조회합니다. + * + * @param vo 검색 조건을 담은 VO 객체 + * @return 조회된 목록의 총 개수 + */ + int selectImpltInfoListTotalCount(LevyNotiImpltInfoVO vo); + + /** + * 이행정보 목록을 조회한다. + * @param vo 조회할 단속 정보와 이행업무구분코드를 담은 VO 객체 + * @return 조회된 이행정보 + */ + List selectImpltInfoList(LevyNotiImpltInfoVO vo); + + // ==================== 이행 대상자 정보(TB_IMPLT_TRPR_INFO) 관련 메서드 ==================== + + /** + * 이행 대상자 정보 목록을 조회한다. + * @param vo 조회할 이행정보 ID를 담은 VO 객체 + * @return 이행 대상자 정보 목록 + */ + List selectImpltTrprInfoList(LevyNotiImpltTrprInfoVO vo); + +} \ No newline at end of file diff --git a/src/main/java/go/kr/project/levy/levy/service/impl/LevyServiceImpl.java b/src/main/java/go/kr/project/levy/levy/service/impl/LevyServiceImpl.java new file mode 100644 index 0000000..42e28d7 --- /dev/null +++ b/src/main/java/go/kr/project/levy/levy/service/impl/LevyServiceImpl.java @@ -0,0 +1,53 @@ +package go.kr.project.levy.levy.service.impl; + +import go.kr.project.levy.levy.mapper.LevyMapper; +import go.kr.project.levy.levy.model.LevyNotiImpltInfoVO; +import go.kr.project.levy.levy.model.LevyNotiImpltTrprInfoVO; +import go.kr.project.levy.levy.service.LevyService; +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.levy.service.impl + * fileName : LevyServiceImpl + * author : 김동규 + * date : 2025-10-14 + * description : 이행정보 관련 비즈니스 로직을 처리하는 서비스 구현 클래스 + * 중요한 로직 주석: 이행정보와 이행대상자 정보의 CRUD 기능을 제공하며, 트랜잭션 처리를 포함한다. + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2025-10-14 김동규 최초 생성 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class LevyServiceImpl extends EgovAbstractServiceImpl implements LevyService { + + private final LevyMapper mapper; + + // ==================== 이행정보(TB_IMPLT_INFO) 관련 메서드 ==================== + + @Override + public int selectImpltInfoListTotalCount(LevyNotiImpltInfoVO vo) { + return mapper.selectImpltInfoListTotalCount(vo); + } + + @Override + public List selectImpltInfoList(LevyNotiImpltInfoVO vo) { + return mapper.selectImpltInfoList(vo); + } + + // ==================== 이행 대상자 정보(TB_IMPLT_TRPR_INFO) 관련 메서드 ==================== + + @Override + public List selectImpltTrprInfoList(LevyNotiImpltTrprInfoVO vo) { + return mapper.selectImpltTrprInfoList(vo); + } + +} \ No newline at end of file diff --git a/src/main/resources/mybatis/mapper/levy/levy/LevyMapper_maria.xml b/src/main/resources/mybatis/mapper/levy/levy/LevyMapper_maria.xml new file mode 100644 index 0000000..dbbedbf --- /dev/null +++ b/src/main/resources/mybatis/mapper/levy/levy/LevyMapper_maria.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/levy/levy/list.jsp b/src/main/webapp/WEB-INF/views/levy/levy/list.jsp new file mode 100644 index 0000000..ecdeb3a --- /dev/null +++ b/src/main/webapp/WEB-INF/views/levy/levy/list.jsp @@ -0,0 +1,619 @@ +<%@ 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 diff --git a/src/main/webapp/ubi4/levyReport.jsp b/src/main/webapp/ubi4/levyReport.jsp new file mode 100644 index 0000000..ff09305 --- /dev/null +++ b/src/main/webapp/ubi4/levyReport.jsp @@ -0,0 +1,127 @@ +<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8" %> +<%! + String nullToStr(String s1, String s2) { + return ((s1 == null)?s2:s1); + } +%> +<% + String jrf = nullToStr(request.getParameter("jrf"), "levyReport.jrf"); + String pstnIdxNo = request.getParameter("pstnIdxNo"); // 선택한 위치지수번호 + String arg = "pstnIdxNo#" + pstnIdxNo + "#"; // 유비리포트 파라미터 + String resId = nullToStr(request.getParameter("resId"), "UBIHTML"); +%> + + + + + + +levy Report + + + + + + + +
+ + \ No newline at end of file diff --git a/src/main/webapp/ubi4/work/levyReport.jrf b/src/main/webapp/ubi4/work/levyReport.jrf new file mode 100644 index 0000000000000000000000000000000000000000..d708b744d2b6e607f3486aea51907e3902c69452 GIT binary patch literal 9959 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 literal 0 HcmV?d00001