엑셀 다운로드, 기본 로직, 다운로드 로직에 제목 추가 로직 예정

dev
박성영 2 months ago
parent bd3221fcc7
commit b495bcc71e

@ -5,8 +5,11 @@ import egovframework.constant.TilesConstants;
import egovframework.exception.MessageException;
import egovframework.util.ApiResponseUtil;
import egovframework.util.SessionUtil;
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.CrdnRegistAndViewExcelVO;
import go.kr.project.crdn.crndRegistAndView.main.model.CrdnRegistAndViewVO;
import go.kr.project.crdn.crndRegistAndView.main.service.CrdnImpltTaskService;
import go.kr.project.crdn.crndRegistAndView.main.service.CrdnRegistAndViewService;
@ -23,7 +26,10 @@ import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.stream.Collectors;
/**
* packageName : go.kr.project.crdn.crndRegistAndView.controller
@ -385,4 +391,71 @@ public class CrdnRegistAndViewController {
}
}
/**
* .
*
* @param paramVO VO
* @param request HTTP
* @param response HTTP
*/
@PostMapping("/excel.do")
@Operation(summary = "단속 목록 엑셀 다운로드", description = "단속 목록을 엑셀 파일로 다운로드합니다.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "다운로드 성공"),
@ApiResponse(responseCode = "400", description = "다운로드 실패"),
@ApiResponse(description = "오류로 인한 실패")
})
public void downloadExcel(
@ModelAttribute CrdnRegistAndViewVO paramVO,
HttpServletRequest request,
HttpServletResponse response) {
try {
log.debug("단속 목록 엑셀 다운로드 요청");
// 페이징 처리 없이 전체 데이터 조회
paramVO.setPagingYn("N");
// 단속 목록 조회
List<CrdnRegistAndViewVO> list = service.selectList(paramVO);
// VO를 ExcelVO로 변환
List<CrdnRegistAndViewExcelVO> excelList = list.stream()
.map(vo -> CrdnRegistAndViewExcelVO.builder()
.crdnYr(vo.getCrdnYr())
.crdnNo(vo.getCrdnNo())
.stdgEmdCdNm(vo.getStdgEmdCdNm())
.rgnSeCdNm(vo.getRgnSeCdNm())
.dsclMthdCdNm(vo.getDsclMthdCdNm())
.dsclYmd(vo.getDsclYmd())
.exmnr(vo.getExmnr())
.relevyYn(vo.getRelevyYn())
.agrvtnLevyTrgtYn(vo.getAgrvtnLevyTrgtYn())
.crdnPrcsSttsCdNm(vo.getCrdnPrcsSttsCdNm())
.actCmpltCd(vo.getActCmpltCd())
.lotnoWholAddr(vo.getLotnoWholAddr())
.actTypeCdNm(vo.getActTypeCdNm())
.usgIdxCdNm(vo.getUsgIdxCdNm())
.ownrNams(vo.getOwnrNams())
.actrNams(vo.getActrNams())
.dspsBfhdBgngYmd(vo.getDspsBfhdBgngYmd())
.crcCmdBgngYmd(vo.getCrcCmdBgngYmd())
.crcUrgBgngYmd(vo.getCrcUrgBgngYmd())
.levyPrvntcBgngYmd(vo.getLevyPrvntcBgngYmd())
.levyBgngYmd(vo.getLevyBgngYmd())
.payUrgBgngYmd(vo.getPayUrgBgngYmd())
.regDt(vo.getRegDt() != null ? vo.getRegDt().format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")) : null)
.rgtrNm(vo.getRgtrNm())
.build())
.collect(Collectors.toList());
// 엑셀 파일 생성 및 다운로드
String filename = "단속목록_" + java.time.LocalDateTime.now().format(java.time.format.DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + ".xlsx";
new SxssfExcelFile(ExcelSheetData.of(excelList, CrdnRegistAndViewExcelVO.class), request, response, filename);
log.debug("단속 목록 엑셀 다운로드 완료 - 파일명: {}, 건수: {}", filename, excelList.size());
} catch (Exception e) {
log.error("엑셀 다운로드 중 오류 발생", e);
}
}
}

@ -0,0 +1,96 @@
package go.kr.project.crdn.crndRegistAndView.main.model;
import egovframework.util.excel.ExcelColumn;
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
public class CrdnRegistAndViewExcelVO {
@ExcelColumn(headerName = "단속년도")
private String crdnYr;
@ExcelColumn(headerName = "단속번호")
private String crdnNo;
@ExcelColumn(headerName = "법정동")
private String stdgEmdCdNm;
@ExcelColumn(headerName = "지역구분")
private String rgnSeCdNm;
@ExcelColumn(headerName = "적발방법")
private String dsclMthdCdNm;
@ExcelColumn(headerName = "적발일자")
private String dsclYmd;
@ExcelColumn(headerName = "조사원")
private String exmnr;
@ExcelColumn(headerName = "재부과여부")
private String relevyYn;
@ExcelColumn(headerName = "가중부과대상")
private String agrvtnLevyTrgtYn;
@ExcelColumn(headerName = "진행단계")
private String crdnPrcsSttsCdNm;
@ExcelColumn(headerName = "조치처리상태")
private String actCmpltCd;
@ExcelColumn(headerName = "위치")
private String lotnoWholAddr;
@ExcelColumn(headerName = "행위유형")
private String actTypeCdNm;
@ExcelColumn(headerName = "용도")
private String usgIdxCdNm;
@ExcelColumn(headerName = "소유자")
private String ownrNams;
@ExcelColumn(headerName = "행위자")
private String actrNams;
@ExcelColumn(headerName = "처분사전 일자")
private String dspsBfhdBgngYmd;
@ExcelColumn(headerName = "시정명령 일자")
private String crcCmdBgngYmd;
@ExcelColumn(headerName = "시정촉구 일자")
private String crcUrgBgngYmd;
@ExcelColumn(headerName = "부과예고 일자")
private String levyPrvntcBgngYmd;
@ExcelColumn(headerName = "부과 일자")
private String levyBgngYmd;
@ExcelColumn(headerName = "납부촉구 일자")
private String payUrgBgngYmd;
@ExcelColumn(headerName = "등록일시")
private String regDt;
@ExcelColumn(headerName = "등록자")
private String rgtrNm;
}

@ -12,6 +12,9 @@
<div class="sub_title"></div>
<button type="button" id="registerBtn" class="newbtn bg1">등록</button>
<button type="button" id="updaterBtn" class="newbtn bg4">수정</button>
<button type="button" id="excelDownBtn" class="newbtn bg4 iconz">
<span class="mdi mdi-microsoft-excel"></span>엑셀 다운로드
</button>
</section>
</div>
</section>
@ -654,6 +657,31 @@
}
},
/**
* 엑셀 다운로드
*/
downloadExcel: function() {
setSearchCond();
var searchParams = $.param(SEARCH_COND);
var $form = $('<form></form>');
$form.attr('action', '<c:url value="/crdn/crndRegistAndView/excel.do"/>');
$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($('<input type="hidden" name="' + name + '" value="' + value + '">'));
}
$('body').append($form);
$form.submit();
$form.remove();
},
/**
* 단속 상태를 업데이트합니다.
* 선택된 행이 있을 때만 상태를 업데이트합니다.
@ -768,11 +796,16 @@
alert('수정할 단속 건을 선택해주세요.');
return;
}
// 선택된 행의 데이터로 팝업 열기
self.openViewPopup(self.selectedRow.crdnYr, self.selectedRow.crdnNo);
});
// 엑셀 다운로드 버튼 클릭 이벤트
$("#excelDownBtn").on('click', function() {
self.downloadExcel();
});
// 이행정보 관리 팝업 호출 이벤트들 - "처분사전" 버튼
$("#btnDsps").on('click', function() {
if (!self.selectedRow) {

Loading…
Cancel
Save