발주기관 > 관리시추정보 현황, 시추정보 관리 CSV 다운로드 기능 추가

main
유지인 2026-02-09 11:29:01 +09:00
parent 91ad7725d4
commit 45846a70ec
4 changed files with 113 additions and 13 deletions

View File

@ -387,26 +387,31 @@ public class DrillingInquiryController {
idx++;
// sb.append(row.get("cid")).append(",");
sb.append(s(row.get("constName"))).append(",");
sb.append(s(row.get("projectStateCodeName"))).append(",");
sb.append(csv(row.get("constName"))).append(",");
sb.append(csv(row.get("projectStateCodeName"))).append(",");
// 사업기간 constStartDate ~ constEndDate
sb.append(s(row.get("constStartDate"))).append(" ~ ").append(s(row.get("constEndDate"))).append(",");
sb.append(csv(row.get("constStartDate"))).append(" ~ ").append(csv(row.get("constEndDate"))).append(",");
sb.append(s(row.get("constStateCodeName"))).append(",");
sb.append(s(row.get("masterCompanyDept"))).append(",");
sb.append(s(row.get("masterCompanyAdmin"))).append(",");
sb.append(s(row.get("masterCompanyTel"))).append(",");
sb.append(s(row.get("constCompanyDept"))).append(",");
sb.append(s(row.get("constCompanyAdmin"))).append(",");
sb.append(s(row.get("constCompanyTel"))).append("\n");
sb.append(csv(row.get("constStateCodeName"))).append(",");
sb.append(csv(row.get("masterCompanyDept"))).append(",");
sb.append(csv(row.get("masterCompanyAdmin"))).append(",");
sb.append(csv(row.get("masterCompanyTel"))).append(",");
sb.append(csv(row.get("coinstCompanyDept"))).append(",");
sb.append(csv(row.get("constCompanyAdmin"))).append(",");
sb.append(csv(row.get("constCompanyTel"))).append("\n");
}
byte[] csvBytes = sb.toString().getBytes("UTF-8");
byte[] bom = new byte[] {(byte)0xEF, (byte)0xBB, (byte)0xBF};
// ---------- ★ 한글 파일명 브라우저별 처리 ----------
String filename = "건설현장조회.csv";
String excelFileNm = "건설현장조회";
if (params.get("excelFileNm") != null && !"".equals(params.get("excelFileNm"))) {
excelFileNm = (String) params.get("excelFileNm");
}
String filename = excelFileNm+".csv";
String userAgent = request.getHeader("User-Agent");
String encodedFilename;
@ -434,4 +439,26 @@ public class DrillingInquiryController {
private String s(Object o) {
return o == null ? "" : o.toString();
}
private String csv(Object o) {
if (o == null) return "";
String value = o.toString();
boolean needQuote =
value.contains(",") ||
value.contains("\"") ||
value.contains("\n") ||
value.contains("\r");
if (value.contains("\"")) {
value = value.replace("\"", "\"\"");
}
if (needQuote) {
value = "\"" + value + "\"";
}
return value;
}
}

View File

@ -441,6 +441,7 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
params.append("constCompanyAdmin", trim($('#company-admin').val()));
params.append("constCompanyTel", trim($('#company-tel').val()));
params.append("excelDownload", "Y");
params.append("excelFileNm", "건설현장 조회");
// 페이지 정보
const pagingEle = document.getElementById('paging');

View File

@ -239,6 +239,35 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
});
/**
* 발주기관 목록화면 tr 드래그 시 상세화면 이동 방지처리
* 드래그 이벤트와 클릭이벤트를 구분하여 감지한다.
*/
function clickExcelListDown() {
const params = new URLSearchParams();
params.append("constTag", trim($('#const-tag').val()));
params.append("constName", trim($('#const-name').val()));
params.append("constStartDate", trim($('#const-start-date').val()));
params.append("constEndDate", trim($('#const-end-date').val()));
params.append("constStateCode", trim($('#const-state-code').val()));
params.append("projectStateCode", 6);
params.append("constCompanyName", trim($('#company-dept').val()));
params.append("constCompanyAdmin", trim($('#company-admin').val()));
params.append("constCompanyTel", trim($('#company-tel').val()));
params.append("excelDownload", "Y");
params.append("excelFileNm", "관리 시추정보 현황");
// 페이지 정보
const pagingEle = document.getElementById('paging');
params.append("nPage", pagingEle.getAttribute("data-npage"));
params.append("nCount", pagingEle.getAttribute("data-ncount"));
// AJAX가 아닌 직접 다운로드 요청
window.location.href = "/drilling/inquiry/csvDownload.do?" + params.toString();
$('#excelDownload').val("");
}
/**
* 발주기관 목록화면 tr 드래그 시 상세화면 이동 방지처리
* 드래그 이벤트와 클릭이벤트를 구분하여 감지한다.
@ -287,6 +316,7 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
<div class="page-top-search">
<form class="form-inline">
<label class="input-label-display">검색</label>
<input type="hidden" id="excelDownload" name="excelDownload" value="" >
<input type="hidden" id="const-tag" name="const-tag" value="P" >
<input type="search" id="const-name" name="const-name" class="input" placeholder="프로젝트명" title="" value="">
<input type="date" id="const-start-date" name="const-start-date" >
@ -306,7 +336,13 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
</button>
</form>
</div>
<div class="table-info-group">Total: <span id="count">-</span>건</div>
<div class="table-info-group display-flex" style="justify-content: space-between;">
<div>
<button class="btn-green btn-list-excel-download" type="button" id="excel-download-btn" onclick="javascript:clickExcelListDown();">CSV 다운로드</button>
</div>
<div>Total: <span id="count">-</span>건</div>
</div>
<!-- <div class="table-info-group">Total: <span id="count">-</span>건</div> -->
<div class="table-wrap">
<table>
<colgroup>

View File

@ -251,6 +251,35 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
});
/**
* 발주기관 목록화면 tr 드래그 시 상세화면 이동 방지처리
* 드래그 이벤트와 클릭이벤트를 구분하여 감지한다.
*/
function clickExcelListDown() {
const params = new URLSearchParams();
params.append("constTag", trim($('#const-tag').val()));
params.append("constName", trim($('#const-name').val()));
params.append("constStartDate", trim($('#const-start-date').val()));
params.append("constEndDate", trim($('#const-end-date').val()));
params.append("constStateCode", trim($('#const-state-code').val()));
params.append("projectStateCode", trim($('#project-state-code').val()));
params.append("constCompanyName", trim($('#company-dept').val()));
params.append("constCompanyAdmin", trim($('#company-admin').val()));
params.append("constCompanyTel", trim($('#company-tel').val()));
params.append("excelDownload", "Y");
params.append("excelFileNm", "시추정보 관리");
// 페이지 정보
const pagingEle = document.getElementById('paging');
params.append("nPage", pagingEle.getAttribute("data-npage"));
params.append("nCount", pagingEle.getAttribute("data-ncount"));
// AJAX가 아닌 직접 다운로드 요청
window.location.href = "/drilling/inquiry/csvDownload.do?" + params.toString();
$('#excelDownload').val("");
}
/**
* 발주기관 목록화면 tr 드래그 시 상세화면 이동 방지처리
* 드래그 이벤트와 클릭이벤트를 구분하여 감지한다.
@ -299,6 +328,7 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
<div class="page-top-search">
<form class="form-inline">
<label class="input-label-display">검색</label>
<input type="hidden" id="excelDownload" name="excelDownload" value="" >
<input type="hidden" id="const-tag" name="const-tag" value="P" >
<input type="search" id="const-name" name="const-name" class="input" placeholder="프로젝트명" title="" value="">
<input type="date" id="const-start-date" name="const-start-date" >
@ -338,7 +368,13 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
</button>
</form>
</div>
<div class="table-info-group">Total: <span id="count">-</span>건</div>
<div class="table-info-group display-flex" style="justify-content: space-between;">
<div>
<button class="btn-green btn-list-excel-download" type="button" id="excel-download-btn" onclick="javascript:clickExcelListDown();">CSV 다운로드</button>
</div>
<div>Total: <span id="count">-</span>건</div>
</div>
<!-- <div class="table-info-group">Total: <span id="count">-</span>건</div> -->
<div class="table-wrap">
<table>
<colgroup>