From 45846a70ecf64bb6e1672057711e4daf967c40fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A0=EC=A7=80=EC=9D=B8?= Date: Mon, 9 Feb 2026 11:29:01 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B0=9C=EC=A3=BC=EA=B8=B0=EA=B4=80=20>=20?= =?UTF-8?q?=EA=B4=80=EB=A6=AC=EC=8B=9C=EC=B6=94=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=ED=98=84=ED=99=A9,=20=EC=8B=9C=EC=B6=94=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EA=B4=80=EB=A6=AC=20CSV=20=EB=8B=A4=EC=9A=B4=EB=A1=9C=EB=93=9C?= =?UTF-8?q?=20=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 --- .../inquiry/DrillingInquiryController.java | 49 ++++++++++++++----- .../drilling/inquiry/drilling_inquiry.jsp | 1 + .../inquiry/drilling_inquiry_project.jsp | 38 +++++++++++++- .../WEB-INF/views/drilling/mgmt/project.jsp | 38 +++++++++++++- 4 files changed, 113 insertions(+), 13 deletions(-) diff --git a/src/main/java/geoinfo/drilling/inquiry/DrillingInquiryController.java b/src/main/java/geoinfo/drilling/inquiry/DrillingInquiryController.java index 2de1d977..cd6ba7cc 100644 --- a/src/main/java/geoinfo/drilling/inquiry/DrillingInquiryController.java +++ b/src/main/java/geoinfo/drilling/inquiry/DrillingInquiryController.java @@ -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; + } } diff --git a/src/main/webapp/WEB-INF/views/drilling/inquiry/drilling_inquiry.jsp b/src/main/webapp/WEB-INF/views/drilling/inquiry/drilling_inquiry.jsp index 14cedda5..9cc5f537 100644 --- a/src/main/webapp/WEB-INF/views/drilling/inquiry/drilling_inquiry.jsp +++ b/src/main/webapp/WEB-INF/views/drilling/inquiry/drilling_inquiry.jsp @@ -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'); diff --git a/src/main/webapp/WEB-INF/views/drilling/inquiry/drilling_inquiry_project.jsp b/src/main/webapp/WEB-INF/views/drilling/inquiry/drilling_inquiry_project.jsp index cbdb6f93..21597dc4 100644 --- a/src/main/webapp/WEB-INF/views/drilling/inquiry/drilling_inquiry_project.jsp +++ b/src/main/webapp/WEB-INF/views/drilling/inquiry/drilling_inquiry_project.jsp @@ -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 -
Total: -
+
+
+ +
+
Total: -
+
+
diff --git a/src/main/webapp/WEB-INF/views/drilling/mgmt/project.jsp b/src/main/webapp/WEB-INF/views/drilling/mgmt/project.jsp index 5f360a59..c7f53f90 100644 --- a/src/main/webapp/WEB-INF/views/drilling/mgmt/project.jsp +++ b/src/main/webapp/WEB-INF/views/drilling/mgmt/project.jsp @@ -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 -
Total: -
+
+
+ +
+
Total: -
+
+