diff --git a/WebContent/WEB-INF/classes/com/pms/mapper/quality.xml b/WebContent/WEB-INF/classes/com/pms/mapper/quality.xml
index d1f2eaa..6f35fbf 100644
--- a/WebContent/WEB-INF/classes/com/pms/mapper/quality.xml
+++ b/WebContent/WEB-INF/classes/com/pms/mapper/quality.xml
@@ -1358,30 +1358,32 @@
DELETE FROM PROCESS_INSPECTION_DETAIL WHERE MASTER_OBJID = #{MASTER_OBJID}
-
+
-
+
diff --git a/WebContent/WEB-INF/view/quality/processInspectionList.jsp b/WebContent/WEB-INF/view/quality/processInspectionList.jsp
index b4df8e9..758201f 100644
--- a/WebContent/WEB-INF/view/quality/processInspectionList.jsp
+++ b/WebContent/WEB-INF/view/quality/processInspectionList.jsp
@@ -83,6 +83,11 @@ $(document).ready(function(){
fn_registPopUp();
});
+ // 엑셀 다운로드
+ $("#btnExcel").click(function(){
+ fn_excelDownload();
+ });
+
fn_search();
});
@@ -169,6 +174,126 @@ function fn_openAttachFilePopUp(objId) {
fn_watchPopupClose(popup, objId, 'ATTACH_FILE_CNT', 'PROCESS_INSPECTION_FILE');
}
+// 엑셀 다운로드 (전체 데이터 풀어서 - ExcelJS)
+function fn_excelDownload(){
+ var params = {
+ search_project_no: $("#search_project_no").val() || "",
+ productType: $("#productType").val() || "",
+ search_part_no: $("#search_part_no").val() || "",
+ search_part_name: $("#search_part_name").val() || "",
+ search_inspection_date_from: $("#search_inspection_date_from").val() || "",
+ search_inspection_date_to: $("#search_inspection_date_to").val() || "",
+ search_inspector: $("#search_inspector").val() || "",
+ search_inspection_result: $("#search_inspection_result").val() || ""
+ };
+
+ $.ajax({
+ url: "/quality/getProcessInspectionListForExcel.do",
+ type: "POST",
+ data: params,
+ dataType: "json",
+ success: function(result){
+ console.log("엑셀 데이터:", result);
+ if(result && result.list && result.list.length > 0){
+ fn_createExcelFile(result.list);
+ } else {
+ Swal.fire("다운로드할 데이터가 없습니다.");
+ }
+ },
+ error: function(xhr, status, error){
+ console.error("엑셀 데이터 조회 실패:", error);
+ console.error("상태:", status);
+ console.error("응답:", xhr.responseText);
+ Swal.fire("엑셀 데이터 조회 중 오류가 발생했습니다.");
+ }
+ });
+}
+
+// ExcelJS로 엑셀 파일 생성 (전체 풀어서)
+async function fn_createExcelFile(data){
+ try {
+ var pageTitle = "공정검사관리";
+ const workbook = new ExcelJS.Workbook();
+ const worksheet = workbook.addWorksheet(pageTitle);
+
+ // 헤더 설정 (모든 컬럼 포함: 제품구분, 공정명, 부서, 작업자, 디테일비고, 조치현황)
+ var headers = ["No", "검사일", "검사자", "제품구분", "공정명", "프로젝트번호", "품번", "품명",
+ "검사수량", "불량수량", "불량율(%)", "작업환경상태", "측정기", "부서", "작업자", "디테일비고", "조치현황", "검사결과"];
+
+ // 열 너비 설정
+ var colWidths = [6, 12, 12, 15, 12, 18, 18, 22, 12, 12, 10, 14, 10, 12, 12, 15, 12, 10];
+ colWidths.forEach(function(width, idx){
+ worksheet.getColumn(idx + 1).width = width;
+ });
+
+ // 헤더 행 추가
+ var headerRow = worksheet.addRow(headers);
+
+ // 헤더 스타일 (노란색 배경)
+ headerRow.eachCell(function(cell){
+ cell.fill = {
+ type: 'pattern',
+ pattern: 'solid',
+ fgColor: { argb: 'FFFFFF00' } // 노란색
+ };
+ cell.font = { bold: true };
+ cell.alignment = { vertical: 'middle', horizontal: 'center' };
+ cell.border = {
+ top: { style: 'thin' },
+ left: { style: 'thin' },
+ bottom: { style: 'thin' },
+ right: { style: 'thin' }
+ };
+ });
+
+ // 데이터 추가 (모든 컬럼 포함)
+ data.forEach(function(item, index){
+ var row = worksheet.addRow([
+ index + 1,
+ item.inspection_date || item.INSPECTION_DATE || "",
+ item.inspector_name || item.INSPECTOR_NAME || "",
+ item.product_type || item.PRODUCT_TYPE || "",
+ item.process_name || item.PROCESS_NAME || "",
+ item.project_no || item.PROJECT_NO || "",
+ item.part_no || item.PART_NO || "",
+ item.part_name || item.PART_NAME || "",
+ item.inspection_qty || item.INSPECTION_QTY || 0,
+ item.defect_qty || item.DEFECT_QTY || 0,
+ item.defect_rate || item.DEFECT_RATE || 0,
+ item.work_env_status || item.WORK_ENV_STATUS || "",
+ item.measuring_device || item.MEASURING_DEVICE || "",
+ item.dept_name || item.DEPT_NAME || "",
+ item.user_name || item.USER_NAME || "",
+ item.detail_remark || item.DETAIL_REMARK || "",
+ item.action_status || item.ACTION_STATUS || "",
+ item.inspection_result || item.INSPECTION_RESULT || ""
+ ]);
+
+ // 데이터 행 스타일
+ row.eachCell(function(cell){
+ cell.border = {
+ top: { style: 'thin' },
+ left: { style: 'thin' },
+ bottom: { style: 'thin' },
+ right: { style: 'thin' }
+ };
+ });
+ });
+
+ // 파일명 생성
+ var today = new Date();
+ var dateStr = today.getFullYear() + ("0" + (today.getMonth()+1)).slice(-2) + ("0" + today.getDate()).slice(-2);
+ var fileName = pageTitle + "_" + dateStr + ".xlsx";
+
+ // 다운로드
+ const buffer = await workbook.xlsx.writeBuffer();
+ saveAs(new Blob([buffer]), fileName);
+ } catch(e) {
+ console.error("엑셀 생성 오류:", e);
+ Swal.fire("엑셀 파일 생성 중 오류가 발생했습니다.");
+ }
+}
+
@@ -187,6 +312,7 @@ function fn_openAttachFilePopUp(objId) {
+
diff --git a/WebContent/WEB-INF/view/quality/semiProductInspectionList.jsp b/WebContent/WEB-INF/view/quality/semiProductInspectionList.jsp
index 28171ce..6cda045 100644
--- a/WebContent/WEB-INF/view/quality/semiProductInspectionList.jsp
+++ b/WebContent/WEB-INF/view/quality/semiProductInspectionList.jsp
@@ -84,9 +84,8 @@ $(document).ready(function(){
fn_search();
});
-// 엑셀 다운로드 (원본 데이터 - 외 N건 풀어서)
+// 엑셀 다운로드 (전체 데이터 풀어서 - ExcelJS)
function fn_excelDownload(){
- // 서버에서 원본 데이터 가져오기
var params = {
search_model_name: $("#search_model_name").val() || "",
search_work_order_no: $("#search_work_order_no").val() || "",
@@ -102,132 +101,110 @@ function fn_excelDownload(){
data: params,
dataType: "json",
success: function(result){
+ console.log("엑셀 데이터:", result);
if(result && result.list && result.list.length > 0){
- createExcelFile(result.list);
+ fn_createExcelFile(result.list);
} else {
Swal.fire("다운로드할 데이터가 없습니다.");
}
},
error: function(xhr, status, error){
console.error("엑셀 데이터 조회 실패:", error);
+ console.error("상태:", status);
+ console.error("응답:", xhr.responseText);
Swal.fire("엑셀 데이터 조회 중 오류가 발생했습니다.");
}
});
}
-// ExcelJS로 원본 데이터 엑셀 파일 생성 (공통 스타일 적용)
-async function createExcelFile(data){
- var pageTitle = "반제품검사관리";
- const workbook = new ExcelJS.Workbook();
- const worksheet = workbook.addWorksheet(pageTitle);
-
- // 헤더 설정 (컬럼 순서 변경: 검사일, 검사자를 앞으로)
- var headers = ["No", "검사일", "검사자", "품명(모델명)", "작업지시번호", "부품품번", "부품명",
- "입고수량 합계", "양품수량 합계", "불량수량 합계", "불량율(%)", "재생수량 합계", "최종양품수량 합계",
- "불량유형", "불량원인", "귀책부서", "처리현황", "처리결과", "비고"];
-
- // 열 너비 설정
- var colWidths = [6, 12, 12, 25, 18, 20, 25, 15, 15, 15, 12, 15, 18, 15, 15, 12, 12, 12, 20];
- colWidths.forEach(function(width, idx){
- worksheet.getColumn(idx + 1).width = width;
- });
-
- // 제목 행 추가
- worksheet.mergeCells('A1:S1');
- var titleCell = worksheet.getCell('A1');
- titleCell.value = pageTitle;
- titleCell.font = { size: 16, bold: true };
- titleCell.alignment = { vertical: 'middle', horizontal: 'center' };
- worksheet.getRow(1).height = 30;
-
- // 빈 행 추가
- worksheet.addRow([]);
-
- // 헤더 행 추가 (3행)
- var headerRow = worksheet.addRow(headers);
-
- // 헤더 스타일 (공통 스타일: 파란색 배경, 흰색 글자)
- headerRow.eachCell(function(cell){
- cell.fill = {
- type: 'pattern',
- pattern: 'solid',
- fgColor: { argb: 'FF4472C4' } // 파란색
- };
- cell.font = {
- color: { argb: 'FFFFFFFF' }, // 흰색 글자
- bold: true
- };
- cell.alignment = {
- vertical: 'middle',
- horizontal: 'center',
- wrapText: true
- };
- cell.border = {
- top: { style: 'thin' },
- left: { style: 'thin' },
- bottom: { style: 'thin' },
- right: { style: 'thin' }
- };
- });
- headerRow.height = 25;
-
- // 데이터 추가 (컬럼 순서 변경: 검사일, 검사자를 앞으로)
- data.forEach(function(item, index){
- var row = worksheet.addRow([
- index + 1,
- item.inspection_date || item.INSPECTION_DATE || "",
- item.writer_name || item.WRITER_NAME || "",
- item.model_name || item.MODEL_NAME || "",
- item.work_order_no || item.WORK_ORDER_NO || "",
- item.part_no || item.PART_NO || "",
- item.part_name || item.PART_NAME || "",
- item.receipt_qty || item.RECEIPT_QTY || 0,
- item.good_qty || item.GOOD_QTY || 0,
- item.defect_qty || item.DEFECT_QTY || 0,
- item.defect_rate || item.DEFECT_RATE || 0,
- item.regeneration_qty || item.REGENERATION_QTY || 0,
- item.final_good_qty || item.FINAL_GOOD_QTY || 0,
- item.defect_type || item.DEFECT_TYPE || "",
- item.defect_cause || item.DEFECT_CAUSE || "",
- item.responsible_dept || item.RESPONSIBLE_DEPT || "",
- item.process_status || item.PROCESS_STATUS || "",
- item.disposition_type || item.DISPOSITION_TYPE || "",
- item.remark || item.REMARK || ""
- ]);
+// ExcelJS로 엑셀 파일 생성 (전체 풀어서)
+async function fn_createExcelFile(data){
+ try {
+ var pageTitle = "반제품검사관리";
+ const workbook = new ExcelJS.Workbook();
+ const worksheet = workbook.addWorksheet(pageTitle);
- // 데이터 행 스타일 (테두리)
- row.eachCell(function(cell, colNumber){
+ // 헤더 설정 (DATA_TYPE, PRODUCT_TYPE, INSPECTION_GROUP_ID 추가)
+ var headers = ["No", "검사일", "검사자", "품명(모델명)", "제품구분", "작업지시번호", "부품품번", "부품명",
+ "입고수량", "양품수량", "불량수량", "불량율(%)", "재생수량", "최종양품수량",
+ "불량유형", "불량원인", "귀책부서", "처리현황", "처리결과", "비고", "데이터타입", "검사그룹ID"];
+
+ // 열 너비 설정
+ var colWidths = [6, 12, 12, 20, 12, 15, 18, 20, 12, 12, 12, 10, 12, 14, 12, 12, 10, 10, 10, 15, 10, 15];
+ colWidths.forEach(function(width, idx){
+ worksheet.getColumn(idx + 1).width = width;
+ });
+
+ // 헤더 행 추가
+ var headerRow = worksheet.addRow(headers);
+
+ // 헤더 스타일 (노란색 배경)
+ headerRow.eachCell(function(cell){
+ cell.fill = {
+ type: 'pattern',
+ pattern: 'solid',
+ fgColor: { argb: 'FFFFFF00' } // 노란색
+ };
+ cell.font = { bold: true };
+ cell.alignment = { vertical: 'middle', horizontal: 'center' };
cell.border = {
top: { style: 'thin' },
left: { style: 'thin' },
bottom: { style: 'thin' },
right: { style: 'thin' }
};
- // 숫자 컬럼 오른쪽 정렬 (8~13번 컬럼: 수량, 불량율)
- if(colNumber >= 8 && colNumber <= 13){
- cell.alignment = { horizontal: 'right' };
- // 숫자에 천단위 구분자 (불량율 제외)
- if(colNumber !== 11 && typeof cell.value === 'number'){
- cell.numFmt = '#,##0';
- }
- } else if(colNumber === 1 || colNumber === 2 || colNumber === 3){
- cell.alignment = { horizontal: 'center' };
- }
});
- });
-
- // 파일명 생성
- var date = new Date();
- var currentDate = date.getFullYear() +
- ("0" + (date.getMonth() + 1)).slice(-2) +
- ("0" + date.getDate()).slice(-2) + "_" +
- ("0" + date.getHours()).slice(-2) +
- ("0" + date.getMinutes()).slice(-2);
- var fileName = pageTitle + "_" + currentDate + ".xlsx";
-
- // 다운로드
- const buffer = await workbook.xlsx.writeBuffer();
- saveAs(new Blob([buffer]), fileName);
+
+ // 데이터 추가 (DATA_TYPE, PRODUCT_TYPE, INSPECTION_GROUP_ID 추가)
+ data.forEach(function(item, index){
+ var row = worksheet.addRow([
+ index + 1,
+ item.inspection_date || item.INSPECTION_DATE || "",
+ item.writer_name || item.WRITER_NAME || "",
+ item.model_name || item.MODEL_NAME || "",
+ item.product_type || item.PRODUCT_TYPE || "",
+ item.work_order_no || item.WORK_ORDER_NO || "",
+ item.part_no || item.PART_NO || "",
+ item.part_name || item.PART_NAME || "",
+ item.receipt_qty || item.RECEIPT_QTY || 0,
+ item.good_qty || item.GOOD_QTY || 0,
+ item.defect_qty || item.DEFECT_QTY || 0,
+ item.defect_rate || item.DEFECT_RATE || 0,
+ item.regeneration_qty || item.REGENERATION_QTY || 0,
+ item.final_good_qty || item.FINAL_GOOD_QTY || 0,
+ item.defect_type || item.DEFECT_TYPE || "",
+ item.defect_cause || item.DEFECT_CAUSE || "",
+ item.responsible_dept || item.RESPONSIBLE_DEPT || "",
+ item.process_status || item.PROCESS_STATUS || "",
+ item.disposition_type || item.DISPOSITION_TYPE || "",
+ item.remark || item.REMARK || "",
+ item.data_type || item.DATA_TYPE || "",
+ item.inspection_group_id || item.INSPECTION_GROUP_ID || ""
+ ]);
+
+ // 데이터 행 스타일
+ row.eachCell(function(cell){
+ cell.border = {
+ top: { style: 'thin' },
+ left: { style: 'thin' },
+ bottom: { style: 'thin' },
+ right: { style: 'thin' }
+ };
+ });
+ });
+
+ // 파일명 생성
+ var today = new Date();
+ var dateStr = today.getFullYear() + ("0" + (today.getMonth()+1)).slice(-2) + ("0" + today.getDate()).slice(-2);
+ var fileName = pageTitle + "_" + dateStr + ".xlsx";
+
+ // 다운로드
+ const buffer = await workbook.xlsx.writeBuffer();
+ saveAs(new Blob([buffer]), fileName);
+ } catch(e) {
+ console.error("엑셀 생성 오류:", e);
+ Swal.fire("엑셀 파일 생성 중 오류가 발생했습니다.");
+ }
}
// 컬럼: 검사일, 검사자, 품명(모델명), 작업지시번호, 부품품번, 부품명, 입고수량 합계, 양품수량 합계, 불량수량 합계, 불량율, 재생수량 합계, 최종양품수량 합계
diff --git a/src/com/pms/controller/QualityController.java b/src/com/pms/controller/QualityController.java
index 0b1b72f..3d07d0c 100644
--- a/src/com/pms/controller/QualityController.java
+++ b/src/com/pms/controller/QualityController.java
@@ -597,7 +597,7 @@ public class QualityController {
}
/**
- * 공정검사 엑셀 다운로드
+ * 공정검사 엑셀 다운로드 (JSP 방식)
*/
@RequestMapping("/quality/processInspectionExcelDownload.do")
public String processInspectionExcelDownload(HttpServletRequest request, @RequestParam Map paramMap){
@@ -606,6 +606,18 @@ public class QualityController {
return "/quality/processInspectionExcel";
}
+ /**
+ * 공정검사 엑셀 데이터 조회 (AJAX JSON) - 전체 풀어서 다운로드
+ */
+ @ResponseBody
+ @RequestMapping("/quality/getProcessInspectionListForExcel.do")
+ public Map getProcessInspectionListForExcel(HttpServletRequest request, @RequestParam Map paramMap){
+ Map result = new HashMap();
+ List list = service.getProcessInspectionListForExcel(paramMap);
+ result.put("list", list);
+ return result;
+ }
+
// =====================================================
// 반제품검사 관리
// =====================================================
diff --git a/src/com/pms/mapper/quality.xml b/src/com/pms/mapper/quality.xml
index d1f2eaa..6f35fbf 100644
--- a/src/com/pms/mapper/quality.xml
+++ b/src/com/pms/mapper/quality.xml
@@ -1358,30 +1358,32 @@
DELETE FROM PROCESS_INSPECTION_DETAIL WHERE MASTER_OBJID = #{MASTER_OBJID}
-
+
-
+