diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/controller/CrdnLevyPrvntcController.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/controller/CrdnLevyPrvntcController.java new file mode 100644 index 0000000..5f5cd72 --- /dev/null +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/controller/CrdnLevyPrvntcController.java @@ -0,0 +1,162 @@ +package go.kr.project.crdn.crndRegistAndView.main.controller; + +import egovframework.constant.ImpltTaskSeConstants; +import egovframework.constant.TilesConstants; +import egovframework.exception.MessageException; +import egovframework.util.ApiResponseUtil; +import egovframework.util.SessionUtil; +import go.kr.project.crdn.crndRegistAndView.crdnActInfo.model.CrdnActInfoVO; +import go.kr.project.crdn.crndRegistAndView.crdnActInfo.service.CrdnActInfoService; +import go.kr.project.crdn.crndRegistAndView.crdnPstnInfo.model.CrdnPstnInfoVO; +import go.kr.project.crdn.crndRegistAndView.crdnPstnInfo.service.CrdnPstnInfoService; +import go.kr.project.crdn.crndRegistAndView.main.model.CrdnImpltTaskVO; +import go.kr.project.crdn.crndRegistAndView.main.model.CrdnImpltTrprInfoVO; +import go.kr.project.crdn.crndRegistAndView.main.model.CrdnRegistAndViewVO; +import go.kr.project.crdn.crndRegistAndView.main.model.LevyPrvntcActInfoVO; +import go.kr.project.crdn.crndRegistAndView.main.service.CrdnImpltTaskService; +import go.kr.project.crdn.crndRegistAndView.main.service.CrdnLevyPrvntcService; +import go.kr.project.crdn.crndRegistAndView.main.service.CrdnRegistAndViewService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +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.*; +import org.springframework.web.servlet.ModelAndView; + +import java.util.List; + +/** + * packageName : go.kr.project.crdn.crndRegistAndView.controller + * fileName : CrdnLevyPrvntcController + * author : 시스템 관리자 + * date : 2025-08-25 + * description : 부과예고 등록/조회 관련 요청을 처리하는 컨트롤러 + * 중요한 로직 주석: 단속 관련 화면 제공 및 CRUD API를 처리하는 컨트롤러 + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2025-08-25 시스템 관리자 최초 생성 + */ +@Controller +@RequestMapping("/crdn/crndRegistAndView/crdnLevyPrvntc") +@RequiredArgsConstructor +@Slf4j +@Tag(name = "부과예고 등록/조회", description = "부과예고 등록/조회 관련 API") +public class CrdnLevyPrvntcController { + + /* 이행정보 서비스 */ + private final CrdnImpltTaskService crdnImpltTaskService; + + /* 단속 서비스 */ + private final CrdnRegistAndViewService crdnRegistAndViewService; + + /* 위치정보 서비스 */ + private final CrdnPstnInfoService crdnPstnInfoService; + + /* 행위정보 서비스 */ + private final CrdnActInfoService crdnActInfoService; + + /* 부과예고 서비스 */ + private final CrdnLevyPrvntcService crdnLevyPrvntcService; + + + /** + * 부과예고 관리 팝업 화면을 제공합니다. + * + * @param crdnYr 단속 연도 + * @param crdnNo 단속 번호 + * @param mode 모드 (C:등록, U:수정, V:보기) + * @param model 모델 객체 + * @return 부과예고 관리 팝업 화면 + */ + @GetMapping("/levyPrvntcPopup.do") + @Operation(summary = "부과예고 관리 팝업", description = "부과예고 관리 팝업 화면을 제공합니다.") + public ModelAndView levyPrvntcPopup( + @Parameter(description = "단속 연도") @RequestParam String crdnYr, + @Parameter(description = "단속 번호") @RequestParam String crdnNo, + @Parameter(description = "이행업무구분코드") @RequestParam String impltTaskSeCd, + @Parameter(description = "모드") @RequestParam(defaultValue = "C") String mode, + Model model) { + + log.debug("부과예고 관리 팝업 요청 - 단속연도: {}, 단속번호: {}, 모드: {}", + crdnYr, crdnNo, mode); + + ModelAndView mav = new ModelAndView("crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup" + TilesConstants.POPUP); + + // 기본 파라미터 설정 + mav.addObject("crdnYr", crdnYr); + mav.addObject("crdnNo", crdnNo); + mav.addObject("impltTaskSeCd", impltTaskSeCd); + mav.addObject("mode", mode); + + // 이행업무구분코드명 설정 + String impltTaskSeCdNm = ImpltTaskSeConstants.getImpltTaskSeCdNm(impltTaskSeCd); + mav.addObject("impltTaskSeCdNm", impltTaskSeCdNm); + + // 단속정보 + CrdnRegistAndViewVO crdnParamVO = new CrdnRegistAndViewVO(); + crdnParamVO.setCrdnYr(crdnYr); + crdnParamVO.setCrdnNo(crdnNo); + CrdnRegistAndViewVO crdnData = crdnRegistAndViewService.selectOne(crdnParamVO); + mav.addObject("crdnData", crdnData); + + // 위치정보 + CrdnPstnInfoVO pstnParamVO = new CrdnPstnInfoVO(); + pstnParamVO.setCrdnYr(crdnYr); + pstnParamVO.setCrdnNo(crdnNo); + CrdnPstnInfoVO pstnData = crdnPstnInfoService.selectPstnOne(pstnParamVO); + if( pstnData == null ){ + throw new MessageException("위치정보를 찾을 수 없습니다."); + } + mav.addObject("pstnData", pstnData); + + // 수정/보기 모드인 경우 기존 이행정보 조회 + if ("U".equals(mode) || "V".equals(mode)) { + CrdnImpltTaskVO searchVO = new CrdnImpltTaskVO(); + searchVO.setCrdnYr(crdnYr); + searchVO.setCrdnNo(crdnNo); + searchVO.setImpltTaskSeCd(impltTaskSeCd); + + CrdnImpltTaskVO impltTaskInfo = crdnImpltTaskService.selectImpltInfo(searchVO); + if (impltTaskInfo != null) { + mav.addObject("impltTaskInfo", impltTaskInfo); + } + } + + return mav; + } + + + /** + * 불법위반행위정보 목록 조회 (AJAX) + * @param vo 검색조건 및 페이징 정보 + * @return 불법위반행위정보 목록 + */ + @Operation(summary = "부과예고에 대한 불법위반행위정보 목록 조회", description = "부과예고에 대한 불법위반행위정보 목록을 조회합니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "조회 성공"), + @ApiResponse(responseCode = "500", description = "서버 오류") + }) + @PostMapping("/actlist.ajax") + public ResponseEntity listAjax(@ModelAttribute LevyPrvntcActInfoVO vo) { + log.debug("부과예고에 대한 불법위반행위정보 목록 조회 요청: {}", vo); + + // 1. 총 개수 조회 + int totalCount = crdnLevyPrvntcService.selectActInfoList(vo).size(); + // 2. 응답 데이터 구성 + vo.setTotalCount(totalCount); + // 3. 페이징 처리 + //vo.setPagingYn("Y"); + + List list = crdnLevyPrvntcService.selectActInfoList(vo); + return ApiResponseUtil.successWithGrid(list, vo); + } + + +} \ No newline at end of file diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/mapper/CrdnLevyPrvntcMapper.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/mapper/CrdnLevyPrvntcMapper.java new file mode 100644 index 0000000..35bae33 --- /dev/null +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/mapper/CrdnLevyPrvntcMapper.java @@ -0,0 +1,28 @@ +package go.kr.project.crdn.crndRegistAndView.main.mapper; + +import go.kr.project.crdn.crndRegistAndView.main.model.CrdnImpltTaskVO; +import go.kr.project.crdn.crndRegistAndView.main.model.CrdnImpltTrprInfoVO; +import go.kr.project.crdn.crndRegistAndView.main.model.LevyPrvntcActInfoVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * packageName : go.kr.project.crdn.crndRegistAndView.main.mapper + * fileName : CrdnLevyPrvntcMapper + * author : 시스템 관리자 + * date : 2025-09-08 + * description : 부과예고 관련 데이터베이스 접근을 위한 MyBatis 매퍼 인터페이스 + * 중요한 로직 주석:CRUD 작업을 수행한다. + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2025-09-08 시스템 관리자 최초 생성 + */ +@Mapper +public interface CrdnLevyPrvntcMapper { + + List selectActInfoList(LevyPrvntcActInfoVO vo); + +} \ No newline at end of file diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/LevyPrvntcActInfoVO.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/LevyPrvntcActInfoVO.java new file mode 100644 index 0000000..7ce474d --- /dev/null +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/LevyPrvntcActInfoVO.java @@ -0,0 +1,52 @@ +package go.kr.project.crdn.crndRegistAndView.main.model; + +import go.kr.project.common.model.PagingVO; +import lombok.*; + +import java.math.BigDecimal; + +/** + * packageName : go.kr.project.crdn.crndRegistAndView.main.model + * fileName : LevyPrvntcActInfoVO + * author : 박성영 + * date : 25. 9. 18. + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 25. 9. 18. 박성영 최초 생성 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class LevyPrvntcActInfoVO extends PagingVO { + private String pstnInfoId; //위치정보ID + private String ldcgCd; //지목코드 + private String ldcgCdNm; //지목코드명 + private BigDecimal ptout; //지적 + private BigDecimal oalp; //공시지가 + private String lotnoWholAddr; //지번전체주소 + private String zip; //우편번호 + private String lotnoMno; //지번본번 + private String lotnoSno; //지번부번 + private String actInfoId; //행위정보ID + private String actBgngYmd; //행위시작일자 + private String actTypeCd; //행위유형코드 + private String actTypeCdNm; //행위유형코드명 + private String vltnLwrgCd1; //위반법규코드 + private String vltnLaw1; //위반법 + private String crcLaw1; //시정법 + private String impltLaw1; //이행법 + private String strctIdxCd; //구조지수코드 + private String strctIdxCdNm; //구조지수명 + private String usgIdxCd; //용도지수코드 + private String usgIdxCdNm; //용도지수명 + private BigDecimal area; //면적 + + /* ======= 검색 조건 =========== */ + private String crdnYr; //단속년도 + private String crdnNo; //단속번호 + +} diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/CrdnLevyPrvntcService.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/CrdnLevyPrvntcService.java new file mode 100644 index 0000000..e5f65cd --- /dev/null +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/CrdnLevyPrvntcService.java @@ -0,0 +1,28 @@ +package go.kr.project.crdn.crndRegistAndView.main.service; + +import go.kr.project.crdn.crndRegistAndView.main.model.CrdnImpltTaskVO; +import go.kr.project.crdn.crndRegistAndView.main.model.CrdnImpltTrprInfoVO; +import go.kr.project.crdn.crndRegistAndView.main.model.LevyPrvntcActInfoVO; + +import java.util.List; + +/** + * packageName : go.kr.project.crdn.crndRegistAndView.service + * fileName : CrdnLevyPrvntcService + * author : 시스템 관리자 + * date : 2025-08-25 + * description : 부과예고 등록/조회 관련 요청을 처리하는 서비스 인터페이스 + * 중요한 로직 주석: 단속 관련 화면 제공 및 CRUD API를 처리하는 서비스 인터페이스 + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2025-08-25 시스템 관리자 최초 생성 + */ +public interface CrdnLevyPrvntcService { + + /** + * 부과예고에 대한 행위정보 목록 + * */ + List selectActInfoList(LevyPrvntcActInfoVO vo); + +} \ No newline at end of file diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/impl/CrdnCrdnImpltTaskServiceImpl.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/impl/CrdnImpltTaskServiceImpl.java similarity index 99% rename from src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/impl/CrdnCrdnImpltTaskServiceImpl.java rename to src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/impl/CrdnImpltTaskServiceImpl.java index 724a44d..c1fbee4 100644 --- a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/impl/CrdnCrdnImpltTaskServiceImpl.java +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/impl/CrdnImpltTaskServiceImpl.java @@ -42,7 +42,7 @@ import static egovframework.constant.CrdnPrcsSttsConstants.*; @Slf4j @Service @RequiredArgsConstructor -public class CrdnCrdnImpltTaskServiceImpl extends EgovAbstractServiceImpl implements CrdnImpltTaskService { +public class CrdnImpltTaskServiceImpl extends EgovAbstractServiceImpl implements CrdnImpltTaskService { private final CrdnImpltTaskMapper crdnImpltTaskMapper; private final CrdnRegistAndViewMapper crdnRegistAndViewMapper; diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/impl/CrdnLevyPrvntcServiceImpl.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/impl/CrdnLevyPrvntcServiceImpl.java new file mode 100644 index 0000000..2a5eb40 --- /dev/null +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/service/impl/CrdnLevyPrvntcServiceImpl.java @@ -0,0 +1,44 @@ +package go.kr.project.crdn.crndRegistAndView.main.service.impl; + +import go.kr.project.crdn.crndRegistAndView.main.mapper.CrdnImpltTaskMapper; +import go.kr.project.crdn.crndRegistAndView.main.mapper.CrdnLevyPrvntcMapper; +import go.kr.project.crdn.crndRegistAndView.main.model.CrdnRegistAndViewVO; +import go.kr.project.crdn.crndRegistAndView.main.model.LevyPrvntcActInfoVO; +import go.kr.project.crdn.crndRegistAndView.main.service.CrdnLevyPrvntcService; +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.crdn.crndRegistAndView.service.impl + * fileName : CrdnLevyPrvntcServiceImpl + * author : 시스템 관리자 + * date : 2025-08-25 + * description : 부과예고 등록/조회 관련 요청을 처리하는 서비스 구현체 + * 중요한 로직 주석: 단속 관련 화면 제공 및 CRUD API를 처리하는 서비스 구현체 + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2025-08-25 시스템 관리자 최초 생성 + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class CrdnLevyPrvntcServiceImpl extends EgovAbstractServiceImpl implements CrdnLevyPrvntcService { + + private final CrdnImpltTaskMapper crdnImpltTaskMapper; + + private final CrdnLevyPrvntcMapper crdnLevyPrvntcMapper; + + /** + * 부과예고에 대한 행위정보 목록 + * */ + @Override + public List selectActInfoList(LevyPrvntcActInfoVO vo) { + return crdnLevyPrvntcMapper.selectActInfoList(vo); + } + +} \ No newline at end of file diff --git a/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnLevyPrvntcMapper_maria.xml b/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnLevyPrvntcMapper_maria.xml new file mode 100644 index 0000000..1f9157d --- /dev/null +++ b/src/main/resources/mybatis/mapper/crdn/crndRegistAndView/main/CrdnLevyPrvntcMapper_maria.xml @@ -0,0 +1,43 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp new file mode 100644 index 0000000..a3208c6 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/crdnLevyPrvntc/levyPrvntcPopup.jsp @@ -0,0 +1,584 @@ +<%@ 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" %> + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/list.jsp b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/list.jsp index 38581db..7db25da 100644 --- a/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/list.jsp +++ b/src/main/webapp/WEB-INF/views/crdn/crndRegistAndView/main/list.jsp @@ -444,6 +444,35 @@ }); }, + /** + * 부과예고 관리 팝업을 엽니다. + * + * @param crdnYr 단속 연도 + * @param crdnNo 단속 번호 + * @param impltTaskSeCd 이행업무구분코드 (4:부과예고) + */ + openLevyPrvntcPopup: function(crdnYr, crdnNo, impltTaskSeCd) { + // 기존 이행정보가 있는지 확인하여 모드 결정 + var self = this; + $.ajax({ + url: '', + type: 'GET', + data: { + crdnYr: crdnYr, + crdnNo: crdnNo, + impltTaskSeCd: impltTaskSeCd + }, + success: function(response) { + var mode = (response && response.success && response.data) ? 'U' : 'C'; + var url = '?mode=' + mode + + '&crdnYr=' + encodeURIComponent(crdnYr) + + '&crdnNo=' + encodeURIComponent(crdnNo) + + '&impltTaskSeCd=' + encodeURIComponent(impltTaskSeCd); + openPopup(url, 1600, 1200, 'levyPrvntcPopup'); + } + }); + }, + /** * 목록 현재 페이징 새로고침 */ @@ -591,7 +620,14 @@ }); $("#btnLevyPrvntc").on('click', function() { - self.updateStatus('50', '부과예고'); + // 선택된 행 확인 + if (!self.selectedRow) { + alert('부과예고를 관리할 단속 건을 선택해주세요.'); + return; + } + + // 시정촉구 팝업 열기 + self.openLevyPrvntcPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo, '4'); // 3: 부과예고 }); $("#btnLevy").on('click', function() { diff --git a/src/main/webapp/resources/xit/xit-popup.css b/src/main/webapp/resources/xit/xit-popup.css index 918c08b..c0b9c9e 100644 --- a/src/main/webapp/resources/xit/xit-popup.css +++ b/src/main/webapp/resources/xit/xit-popup.css @@ -16,7 +16,7 @@ .popup_inner { position: relative; width: 97%; - max-width: 1200px; + max-width: 1600px; background: #fff; border-radius: 4px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);