From 4cd08be2aafaa3682fffd8acdff4afd3b0885d9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=84=B1=EC=98=81?= Date: Thu, 13 Nov 2025 15:12:00 +0900 Subject: [PATCH] =?UTF-8?q?=EC=8B=A0=EA=B7=9C=20excel=20download=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9=20=EC=A7=84=ED=96=89=EC=A4=91....?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CrdnRegistAndViewController.java | 40 ++ .../main/mapper/CrdnRegistAndViewMapper.java | 8 + .../model/CrdnRegistAndViewExcelGridVO.java | 145 +++++ .../service/CrdnRegistAndViewService.java | 8 + .../impl/CrdnRegistAndViewServiceImpl.java | 12 + .../main/CrdnRegistAndViewMapper_maria.xml | 613 ++++++++++++------ .../crdn/crndRegistAndView/main/list.jsp | 48 +- 7 files changed, 677 insertions(+), 197 deletions(-) create mode 100644 src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/CrdnRegistAndViewExcelGridVO.java 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 e39a871..4acc776 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 @@ -9,6 +9,7 @@ import egovframework.util.excel.ExcelSheetData; import egovframework.util.excel.SxssfExcelFile; import go.kr.project.common.model.CmmnCodeSearchVO; import go.kr.project.common.service.CommonCodeService; +import go.kr.project.crdn.crndRegistAndView.main.model.CrdnRegistAndViewExcelGridVO; import go.kr.project.crdn.crndRegistAndView.main.model.CrdnRegistAndViewExcelVO; import go.kr.project.crdn.crndRegistAndView.main.model.CrdnRegistAndViewVO; import go.kr.project.crdn.crndRegistAndView.main.service.CrdnImpltTaskService; @@ -428,4 +429,43 @@ public class CrdnRegistAndViewController { } } + + /** + * 단속 목록을 엑셀 파일로 다운로드합니다. + * + * @param paramVO 검색 조건을 담은 VO 객체 + * @param request HTTP 요청 객체 + * @param response HTTP 응답 객체 + */ + @PostMapping("/excelGrid.do") + @Operation(summary = "그리드 항목 단속 목록 엑셀 다운로드", description = "그리드 항목 단속 목록을 엑셀 파일로 다운로드합니다.") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "다운로드 성공"), + @ApiResponse(responseCode = "400", description = "다운로드 실패"), + @ApiResponse(description = "오류로 인한 실패") + }) + public void downloadExcelGrid( + @ModelAttribute CrdnRegistAndViewVO paramVO, + HttpServletRequest request, + HttpServletResponse response) { + try { + log.debug("단속 그리드 목록 엑셀 다운로드 요청"); + + // 페이징 처리 없이 전체 데이터 조회 + paramVO.setPagingYn("N"); + + // 단속 목록 조회 + List excelList = service.selectListExcelGrid(paramVO); + + // 엑셀 파일 생성 및 다운로드 (제목 행 포함) + String filename = "단속그리드목록_" + java.time.LocalDateTime.now().format(java.time.format.DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + ".xlsx"; + new SxssfExcelFile(ExcelSheetData.of(excelList, CrdnRegistAndViewExcelGridVO.class, "단속 그리드 목록 "+excelList.size() +"건"), request, response, filename); + + log.debug("단속 그리드 목록 엑셀 다운로드 완료 - 파일명: {}, 건수: {}", filename, excelList.size()); + } catch (Exception e) { + log.error("엑셀 다운로드 중 오류 발생", e); + } + } + + } \ 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 02f6f3c..709ddaf 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 @@ -1,5 +1,6 @@ package go.kr.project.crdn.crndRegistAndView.main.mapper; +import go.kr.project.crdn.crndRegistAndView.main.model.CrdnRegistAndViewExcelGridVO; import go.kr.project.crdn.crndRegistAndView.main.model.CrdnRegistAndViewExcelVO; import go.kr.project.crdn.crndRegistAndView.main.model.CrdnRegistAndViewVO; import org.apache.ibatis.annotations.Mapper; @@ -35,6 +36,13 @@ public interface CrdnRegistAndViewMapper { */ int selectListTotalCount(CrdnRegistAndViewVO vo); + /** + * 단속 목록을 조회한다. - 그리드 형태 그대로 엑셀 다운로드 + * @param vo 검색 조건과 페이징 정보를 담은 VO 객체 + * @return 단속 목록 + */ + List selectListExcelGrid(CrdnRegistAndViewVO vo); + /** * 특정 단속 연도와 번호에 해당하는 단속 정보를 조회한다. * @param vo 조회할 PK 정보(crdnYr, crdnNo)를 담은 VO 객체 diff --git a/src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/CrdnRegistAndViewExcelGridVO.java b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/CrdnRegistAndViewExcelGridVO.java new file mode 100644 index 0000000..9127154 --- /dev/null +++ b/src/main/java/go/kr/project/crdn/crndRegistAndView/main/model/CrdnRegistAndViewExcelGridVO.java @@ -0,0 +1,145 @@ +package go.kr.project.crdn.crndRegistAndView.main.model; + +import egovframework.util.excel.ExcelColumn; +import egovframework.util.excel.ExcelSheet; +import lombok.*; + +/** + * packageName : go.kr.project.crdn.crndRegistAndView.main.model + * fileName : CrdnRegistAndViewExcelVO + * author : 시스템 관리자 + * date : 2025-08-25 + * description : 단속 목록 엑셀 다운로드용 VO 클래스 + * 중요한 로직 주석: 엑셀 다운로드 시 사용되는 전용 VO로 @ExcelColumn 어노테이션을 포함 + * 엑셀 샘플 순서에 맞게 필드를 정렬하고, 필요한 컬럼만 헤더 설정 + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2025-08-25 시스템 관리자 최초 생성 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@ToString +@ExcelSheet(name = "단속목록") +public class CrdnRegistAndViewExcelGridVO { + + /** 단속 연도 */ + @ExcelColumn(headerName = "단속연도", headerWidth = 15, align = ExcelColumn.Align.CENTER) + private String crdnYr; + + /** 단속 번호 */ + @ExcelColumn(headerName = "단속번호", headerWidth = 15, align = ExcelColumn.Align.CENTER) + private String crdnNo; + + /** 재부과 여부 */ + @ExcelColumn(headerName = "재부과여부", headerWidth = 15, align = ExcelColumn.Align.CENTER) + private String relevyYn; + + /** 소유자명들 (쉼표로 구분) */ + @ExcelColumn(headerName = "소유자", headerWidth = 15, align = ExcelColumn.Align.CENTER) + private String ownrNams; + + /** 행위자명들 (쉼표로 구분) */ + @ExcelColumn(headerName = "행위자", headerWidth = 15, align = ExcelColumn.Align.CENTER) + private String actrNams; + + /** 법정동 읍면동 코드명 */ + @ExcelColumn(headerName = "법정동", headerWidth = 15, align = ExcelColumn.Align.CENTER) + private String stdgEmdCdNm; + + /** 지번 본번- 지번 부번 */ + @ExcelColumn(headerName = "지번", headerWidth = 15, align = ExcelColumn.Align.CENTER) + private String lotnoNo; + + /** 상세주소 */ + @ExcelColumn(headerName = "상세주소", headerWidth = 15, align = ExcelColumn.Align.CENTER) + private String dtlAddr; + + /** 행위 유형 코드명 */ + @ExcelColumn(headerName = "행위내용", headerWidth = 15, align = ExcelColumn.Align.CENTER) + private String actTypeCdNm; + + /** 지목 코드명 */ + @ExcelColumn(headerName = "지목", headerWidth = 15, align = ExcelColumn.Align.CENTER) + private String ldcgCdNm; + + /* 용도 지수 코드 */ + @ExcelColumn(headerName = "용도", headerWidth = 15, align = ExcelColumn.Align.CENTER) + private String usgIdxCdNm; + + /** 면적 */ + @ExcelColumn(headerName = "면적", headerWidth = 15, align = ExcelColumn.Align.CENTER) + private Double area; + + /** 구조 지수 코드명 */ + @ExcelColumn(headerName = "구조", headerWidth = 15, align = ExcelColumn.Align.CENTER) + private String strctIdxCdNm; + + /** 가중 부과 대상 여부 */ + @ExcelColumn(headerName = "가중부과대상여부", headerWidth = 15, align = ExcelColumn.Align.CENTER) + private String agrvtnLevyTrgtYn; + + /** 조사 일자 */ + @ExcelColumn(headerName = "조사일자", headerWidth = 15, align = ExcelColumn.Align.CENTER) + private String dsclYmd; + + /** 처분 사전 시작 일자 */ + @ExcelColumn(headerName = "처분사전", headerWidth = 15, align = ExcelColumn.Align.CENTER) + private String dspsBfhdBgngYmd; + + /** 처분 사전 종료 일자 */ + private String dspsBfhdEndYmd; + + /** 시정 명령 시작 일자 */ + @ExcelColumn(headerName = "시정명령", headerWidth = 15, align = ExcelColumn.Align.CENTER) + private String crcCmdBgngYmd; + + /** 시정 명령 종료 일자 */ + private String crcCmdEndYmd; + + /** 시정 촉구 시작 일자 */ + @ExcelColumn(headerName = "시정촉구", headerWidth = 15, align = ExcelColumn.Align.CENTER) + private String crcUrgBgngYmd; + + /** 시정 촉구 종료 일자 */ + private String crcUrgEndYmd; + + /** 부과 예고 시작 일자 */ + @ExcelColumn(headerName = "부과예고", headerWidth = 15, align = ExcelColumn.Align.CENTER) + private String levyPrvntcBgngYmd; + + /** 부과 예고 종료 일자 */ + private String levyPrvntcEndYmd; + + /** 부과 시작 일자 */ + @ExcelColumn(headerName = "부과", headerWidth = 15, align = ExcelColumn.Align.CENTER) + private String levyBgngYmd; + + /** 부과 종료 일자 */ + private String levyEndYmd; + + /** 납부 촉구 시작 일자 */ + @ExcelColumn(headerName = "납부촉구", headerWidth = 15, align = ExcelColumn.Align.CENTER) + private String payUrgBgngYmd; + + /** 납부 촉구 종료 일자 */ + private String payUrgEndYmd; + + /** 단속 처리 상태 코드명 */ + @ExcelColumn(headerName = "진행단계", headerWidth = 15, align = ExcelColumn.Align.CENTER) + private String crdnPrcsSttsCdNm; + + /** 조치처리상태 코드 [행위정보없음: 0, 미조치: 1, 조치완료: 3] */ + private String actCmpltCd; + + /** 조치처리상태 코드명 [행위정보없음: 0, 미조치: 1, 조치완료: 3] */ + @ExcelColumn(headerName = "조치처리상태", headerWidth = 15, align = ExcelColumn.Align.CENTER) + private String actCmpltCdNm; + + /** 적발 방법 코드명 */ + @ExcelColumn(headerName = "적발방법", headerWidth = 15, align = ExcelColumn.Align.CENTER) + private String dsclMthdCdNm; + +} 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 4f10d90..729901c 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 @@ -1,5 +1,6 @@ package go.kr.project.crdn.crndRegistAndView.main.service; +import go.kr.project.crdn.crndRegistAndView.main.model.CrdnRegistAndViewExcelGridVO; import go.kr.project.crdn.crndRegistAndView.main.model.CrdnRegistAndViewExcelVO; import go.kr.project.crdn.crndRegistAndView.main.model.CrdnRegistAndViewVO; @@ -34,6 +35,13 @@ public interface CrdnRegistAndViewService { */ int selectListTotalCount(CrdnRegistAndViewVO vo); + /** + * 단속 목록을 조회한다. - 그리드 형태 그대로 엑셀 다운로드 + * @param vo 검색 조건과 페이징 정보를 담은 VO 객체 + * @return 단속 목록 + */ + List selectListExcelGrid(CrdnRegistAndViewVO vo); + /** * 단속 정보를 조회합니다. * 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 4b477fb..c697751 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 @@ -5,6 +5,7 @@ import egovframework.exception.MessageException; import egovframework.util.SessionUtil; import egovframework.util.StringUtil; import go.kr.project.crdn.crndRegistAndView.main.mapper.CrdnRegistAndViewMapper; +import go.kr.project.crdn.crndRegistAndView.main.model.CrdnRegistAndViewExcelGridVO; import go.kr.project.crdn.crndRegistAndView.main.model.CrdnRegistAndViewExcelVO; import go.kr.project.crdn.crndRegistAndView.main.model.CrdnRegistAndViewVO; import go.kr.project.crdn.crndRegistAndView.main.service.CrdnRegistAndViewService; @@ -60,6 +61,17 @@ public class CrdnRegistAndViewServiceImpl extends EgovAbstractServiceImpl implem return mapper.selectListTotalCount(vo); } + /** + * 단속 목록을 조회합니다. - 그리드 형태 그대로 엑셀 다운로드 + * + * @param vo 검색 조건과 페이징 정보를 담은 VO 객체 + * @return 단속 목록 + */ + @Override + public List selectListExcelGrid(CrdnRegistAndViewVO vo) { + return mapper.selectListExcelGrid(vo); + } + /** * 단속 정보를 조회합니다. * 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 29e21d8..4475cf3 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 @@ -368,6 +368,428 @@ + + + + + + - /* CrdnRegistAndViewMapper.selectListForExcel : 엑셀 다운로드용 단속 목록 조회 */ - /* 중요로직: 기존 selectList와 동일하되, 부과금액(tb_levy_info.IMPLT_CPSR_AMT)과 향후절차(다음 진행코드) 추가 */ - SELECT m.* - FROM ( - /* 중요로직: 엑셀 VO(CrdnRegistAndViewExcelVO) 순서에 맞춰 컬럼 정렬, 사용하지 않는 컬럼은 하단으로 이동 */ - SELECT - /* ===================== [VO 표출 컬럼 - 상단 고정] ===================== */ - CONCAT(c.CRDN_YR, '-', c.CRDN_NO) AS MNG_NO, /* 관리번호 (단속연도-단속번호) */ - '' AS SEWMTR_MNG_NO, /* 세움터 관리번호 (공백 처리) */ - DATE_FORMAT(STR_TO_DATE(c.DSCL_YMD, '%Y%m%d'), '%Y-%m-%d') AS DSCL_YMD, /* 적발 일자 */ - DATE_FORMAT(STR_TO_DATE(ai.ACT_BGNG_YMD, '%Y%m%d'), '%Y년') as ACT_YMD, /* 행위일자 (현재 DB에 없음) */ - CASE - WHEN c.FRST_CRDN_YR IS NULL OR c.FRST_CRDN_NO IS NULL - THEN DATE_FORMAT(STR_TO_DATE(c.CRC_CMD_BGNG_YMD, '%Y%m%d'), '%Y-%m-%d') - ELSE ( - SELECT DATE_FORMAT(STR_TO_DATE(fc.CRC_CMD_BGNG_YMD, '%Y%m%d'), '%Y-%m-%d') - FROM tb_crdn fc - WHERE fc.CRDN_YR = c.FRST_CRDN_YR - AND fc.CRDN_NO = c.FRST_CRDN_NO - AND fc.DEL_YN = 'N' - ) - END AS CRC_CMD_BGNG_YMD, /* 최초 시정명령 */ - DATE_FORMAT(STR_TO_DATE(c.LEVY_BGNG_YMD, '%Y%m%d'), '%Y-%m-%d') AS LEVY_BGNG_YMD, /* 최근 부과일 */ - (SELECT li.IMPLT_CPSR_AMT - FROM tb_levy_info li - WHERE li.CRDN_YR = c.CRDN_YR - AND li.CRDN_NO = c.CRDN_NO - AND li.DEL_YN = 'N' - ORDER BY li.LEVY_INFO_ID - LIMIT 1) AS LEVY_AMT, /* 부과금액 (첫번째 값) */ - '' AS PAY_YMD, /* 납부일자 (공백 처리) */ - p.LOTNO_WHOL_ADDR, /* 번지 (지번 전체 주소) */ - p.DTL_ADDR, /* 상세주소 */ - (SELECT GROUP_CONCAT(DISTINCT o2.FLNM SEPARATOR ', ') - FROM tb_ownr_info oi2 - LEFT JOIN tb_ownr o2 ON o2.OWNR_ID = oi2.OWNR_ID AND o2.DEL_YN = 'N' - WHERE oi2.CRDN_YR = c.CRDN_YR - AND oi2.CRDN_NO = c.CRDN_NO - AND oi2.DEL_YN = 'N') AS OWNR_NAMS, /* 소유자(건축주) */ - (SELECT GROUP_CONCAT(DISTINCT o2.FLNM SEPARATOR ', ') - FROM tb_actr_info ari - LEFT JOIN tb_ownr o2 ON o2.OWNR_ID = ari.OWNR_ID AND o2.DEL_YN = 'N' - WHERE ari.CRDN_YR = c.CRDN_YR - AND ari.CRDN_NO = c.CRDN_NO - AND ari.ACT_INFO_ID = ai.ACT_INFO_ID - AND ari.DEL_YN = 'N') AS ACTR_NAMS, /* 행위자(상호) */ - c.AGRVTN_LEVY_TRGT_YN, /* 가중부과 대상 여부 */ - act.VLTN_BDST AS ACT_TYPE_CD_NM, /* 불법행위 */ - '' AS ACT_DTL_CN, /* 세부내용 (현재 DB에 없음) */ - usg.USG_NM AS USG_IDX_CD_NM, /* 용도 */ - '' AS USG_DTL_CN, /* 세부용도 (현재 DB에 없음) */ - ROUND(CAST(ai.AREA AS DECIMAL(10,2)) - CAST(IFNULL(ai.ACTN_WHOL_AREA, 0) AS DECIMAL(10,2)), 2) AS ILLEGAL_AREA, /* 불법면적 */ - strct_ai.STRCT_NM, /* 구조 (구조지수명) */ - '' AS REMAIN_DAYS, /* 남은일 엑셀에서 today - DEADLINE 서식으로 표현예정*/ - stts.CD_NM AS CRDN_PRCS_STTS_CD_NM, /* 처분내용 (진행단계) */ - CASE - WHEN c.CRDN_PRCS_STTS_CD = '20' THEN DATE_FORMAT(STR_TO_DATE(c.DSPS_BFHD_BGNG_YMD, '%Y%m%d'), '%Y-%m-%d') - WHEN c.CRDN_PRCS_STTS_CD = '30' THEN DATE_FORMAT(STR_TO_DATE(c.CRC_CMD_BGNG_YMD, '%Y%m%d'), '%Y-%m-%d') - WHEN c.CRDN_PRCS_STTS_CD = '40' THEN DATE_FORMAT(STR_TO_DATE(c.CRC_URG_BGNG_YMD, '%Y%m%d'), '%Y-%m-%d') - WHEN c.CRDN_PRCS_STTS_CD = '50' THEN DATE_FORMAT(STR_TO_DATE(c.LEVY_PRVNTC_BGNG_YMD, '%Y%m%d'), '%Y-%m-%d') - WHEN c.CRDN_PRCS_STTS_CD = '60' THEN DATE_FORMAT(STR_TO_DATE(c.LEVY_BGNG_YMD, '%Y%m%d'), '%Y-%m-%d') - WHEN c.CRDN_PRCS_STTS_CD = '70' THEN DATE_FORMAT(STR_TO_DATE(c.PAY_URG_BGNG_YMD, '%Y%m%d'), '%Y-%m-%d') - ELSE NULL - END AS CRDN_PRCS_YMD, /* 처분일 */ - (SELECT next_cd.CD_NM - FROM tb_cd_detail curr_cd - LEFT JOIN tb_cd_detail next_cd - ON next_cd.CD_GROUP_ID = 'CRDN_PRCS_STTS_CD' - AND next_cd.USE_YN = 'Y' - AND next_cd.SORT_ORDR = ( - SELECT MIN(ncd.SORT_ORDR) - FROM tb_cd_detail ncd - WHERE ncd.CD_GROUP_ID = 'CRDN_PRCS_STTS_CD' - AND ncd.USE_YN = 'Y' - AND ncd.SORT_ORDR > curr_cd.SORT_ORDR - ) - WHERE curr_cd.CD_GROUP_ID = 'CRDN_PRCS_STTS_CD' - AND curr_cd.CD_ID = c.CRDN_PRCS_STTS_CD) AS NEXT_PRCS_NM, /* 향후절차 */ - CASE - WHEN c.CRDN_PRCS_STTS_CD = '20' THEN DATE_FORMAT(STR_TO_DATE(c.DSPS_BFHD_END_YMD, '%Y%m%d'), '%Y-%m-%d') - WHEN c.CRDN_PRCS_STTS_CD = '30' THEN DATE_FORMAT(STR_TO_DATE(c.CRC_CMD_END_YMD, '%Y%m%d'), '%Y-%m-%d') - WHEN c.CRDN_PRCS_STTS_CD = '40' THEN DATE_FORMAT(STR_TO_DATE(c.CRC_URG_END_YMD, '%Y%m%d'), '%Y-%m-%d') - WHEN c.CRDN_PRCS_STTS_CD = '50' THEN DATE_FORMAT(STR_TO_DATE(c.LEVY_PRVNTC_END_YMD, '%Y%m%d'), '%Y-%m-%d') - WHEN c.CRDN_PRCS_STTS_CD = '60' THEN DATE_FORMAT(STR_TO_DATE(c.LEVY_END_YMD, '%Y%m%d'), '%Y-%m-%d') - WHEN c.CRDN_PRCS_STTS_CD = '70' THEN DATE_FORMAT(STR_TO_DATE(c.PAY_URG_END_YMD, '%Y%m%d'), '%Y-%m-%d') - ELSE NULL - END AS DEADLINE, /* 기한 현재 처분내용 코드에 따라 해당하는 종료일자 반환 */ - c.RMRK, /* 특이사항 (비고) */ - '' AS TELNO, /* 연락처 (현재 DB에 없음) */ - /* ===================== [VO 비표출/추가 정보 - 하단] ===================== */ - c.CRDN_YR, /* 단속 연도 */ - c.CRDN_NO, /* 단속 번호 */ - c.SGG_CD, /* 시군구 코드 */ - sgg.CD_NM AS SGG_CD_NM, - c.RGN_SE_CD, /* 지역 구분 코드 */ - rgn.CD_NM AS RGN_SE_CD_NM, - c.DSCL_MTHD_CD, /* 단속 방법 코드 */ - dscl.CD_NM AS DSCL_MTHD_CD_NM, - c.EXMNR, /* 조사원 */ - DATE_FORMAT(STR_TO_DATE(c.DSPS_BFHD_BGNG_YMD, '%Y%m%d'), '%Y-%m-%d') AS DSPS_BFHD_BGNG_YMD, /* 사전처분 시작일 */ - DATE_FORMAT(STR_TO_DATE(c.DSPS_BFHD_END_YMD, '%Y%m%d'), '%Y-%m-%d') AS DSPS_BFHD_END_YMD, /* 사전처분 종료일 */ - DATE_FORMAT(STR_TO_DATE(c.CRC_CMD_END_YMD, '%Y%m%d'), '%Y-%m-%d') AS CRC_CMD_END_YMD, /* 시정명령 종료일 */ - DATE_FORMAT(STR_TO_DATE(c.CRC_URG_BGNG_YMD, '%Y%m%d'), '%Y-%m-%d') AS CRC_URG_BGNG_YMD, /* 시정촉구 시작일 */ - DATE_FORMAT(STR_TO_DATE(c.CRC_URG_END_YMD, '%Y%m%d'), '%Y-%m-%d') AS CRC_URG_END_YMD, /* 시정촉구 종료일 */ - DATE_FORMAT(STR_TO_DATE(c.LEVY_PRVNTC_BGNG_YMD, '%Y%m%d'), '%Y-%m-%d') AS LEVY_PRVNTC_BGNG_YMD, /* 부과예고 시작일 */ - DATE_FORMAT(STR_TO_DATE(c.LEVY_PRVNTC_END_YMD, '%Y%m%d'), '%Y-%m-%d') AS LEVY_PRVNTC_END_YMD, /* 부과예고 종료일 */ - DATE_FORMAT(STR_TO_DATE(c.LEVY_END_YMD, '%Y%m%d'), '%Y-%m-%d') AS LEVY_END_YMD, /* 부과 종료일 */ - DATE_FORMAT(STR_TO_DATE(c.PAY_URG_BGNG_YMD, '%Y%m%d'), '%Y-%m-%d') AS PAY_URG_BGNG_YMD, /* 납부촉구 시작일 */ - DATE_FORMAT(STR_TO_DATE(c.PAY_URG_END_YMD, '%Y%m%d'), '%Y-%m-%d') AS PAY_URG_END_YMD, /* 납부촉구 종료일 */ - c.FRST_CRDN_YR, /* 최초 단속 연도 */ - c.FRST_CRDN_NO, /* 최초 단속 번호 */ - c.RELEVY_YN, /* 재과 여부 */ - c.CRDN_PRCS_STTS_CD, /* 단속 처리 상태 코드 */ - c.REG_DT, - c.RGTR, - u.USER_ACNT AS RGTR_ACNT, - u.USER_NM AS RGTR_NM, - p.STDG_EMD_CD, /* 법정동 읍면동 코드 */ - emd.CD_NM AS STDG_EMD_CD_NM, - p.ZIP, - ai.ACT_TYPE_CD, /* 행위 유형 코드 */ - ai.USG_IDX_CD, /* 용도 지수 코드 */ - ai.ACT_INFO_ID - FROM tb_crdn c - inner join tb_act_info ai on ai.CRDN_NO = c.CRDN_NO and ai.CRDN_YR = c.CRDN_YR and ai.ACTN_PRCS_STTS_CD != '3' and ai.DEL_YN = 'N' - LEFT JOIN tb_cd_detail sgg ON sgg.CD_GROUP_ID = 'ORG_CD' AND sgg.CD_ID = c.SGG_CD - LEFT JOIN tb_cd_detail rgn ON rgn.CD_GROUP_ID = 'RGN_SE_CD' AND rgn.CD_ID = c.RGN_SE_CD - LEFT JOIN tb_cd_detail dscl ON dscl.CD_GROUP_ID = 'DSCL_MTHD_CD' AND dscl.CD_ID = c.DSCL_MTHD_CD - LEFT JOIN tb_cd_detail stts ON stts.CD_GROUP_ID = 'CRDN_PRCS_STTS_CD' AND stts.CD_ID = c.CRDN_PRCS_STTS_CD - LEFT JOIN tb_user u ON u.USER_ID = c.RGTR AND u.USE_YN = 'Y' - LEFT JOIN tb_pstn_info p ON p.CRDN_YR = c.CRDN_YR AND p.CRDN_NO = c.CRDN_NO AND p.DEL_YN = 'N' - LEFT JOIN tb_cd_detail emd ON emd.CD_GROUP_ID = 'STDG_EMD_CD' AND emd.CD_ID = p.STDG_EMD_CD - LEFT JOIN tb_act_type act ON act.ACT_TYPE_CD = ai.ACT_TYPE_CD - LEFT JOIN tb_usg_idx usg ON usg.USG_IDX_CD = ai.USG_IDX_CD - LEFT JOIN tb_strct_idx strct_ai ON strct_ai.STRCT_IDX_CD = ai.STRCT_IDX_CD - WHERE c.DEL_YN = 'N' - - AND c.CRDN_YR = #{schCrdnYr} - - - AND c.CRDN_NO LIKE CONCAT('%', #{schCrdnNo}, '%') - - - AND p.STDG_EMD_CD IN - - #{emdCd} - - - - AND c.RGN_SE_CD = #{schRgnSeCd} - - - AND c.DSCL_MTHD_CD = #{schDsclMthdCd} - - - AND c.EXMNR LIKE CONCAT('%', #{schExmnr}, '%') - - - AND c.CRDN_PRCS_STTS_CD = #{schCrdnPrcsSttsCd} - - - AND c.CRDN_PRCS_YMD >= #{schPrcsSttsStartDt} - - - AND c.CRDN_PRCS_YMD <= #{schPrcsSttsEndDt} - - - AND c.AGRVTN_LEVY_TRGT_YN = #{schAgrvtnLevyTrgtYn} - - - AND p.ZIP LIKE CONCAT('%', #{schZip}, '%') - - - AND p.LOTNO_ADDR LIKE CONCAT('%', #{schLotnoAddr}, '%') - - - AND p.DTL_ADDR LIKE CONCAT('%', #{schDtlAddr}, '%') - - - AND p.LOTNO_MNO = #{schLotnoMno} - - - AND p.LOTNO_SNO = #{schLotnoSno} - - ) m - WHERE 1=1 - ORDER BY m.CRDN_YR DESC, m.CRDN_NO DESC, m.ACT_INFO_ID - - \ 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 eca4c67..cfa056e 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 @@ -12,12 +12,6 @@
- - @@ -121,6 +115,18 @@ +
    +
  • + +
  • +
  • + +
  • +
@@ -778,6 +784,31 @@ } }, + /** + * 엑셀 다운로드 + */ + downloadExcelGrid: function() { + setSearchCond(); + var searchParams = $.param(SEARCH_COND); + + var $form = $('
'); + $form.attr('action', ''); + $form.attr('method', 'post'); + + var params = searchParams.split('&'); + for (var i = 0; i < params.length; i++) { + var param = params[i].split('='); + var name = decodeURIComponent(param[0]); + var value = decodeURIComponent(param[1] || ''); + + $form.append($('')); + } + + $('body').append($form); + $form.submit(); + $form.remove(); + }, + /** * 엑셀 다운로드 */ @@ -924,6 +955,11 @@ self.openViewPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo); }); + // 그리드 - 엑셀 다운로드 버튼 클릭 이벤트 + $("#excelDownGridBtn").on('click', function() { + self.downloadExcelGrid(); + }); + // 엑셀 다운로드 버튼 클릭 이벤트 $("#excelDownBtn").on('click', function() { self.downloadExcel();