입고수량, 양품, 불량수량 등 표시, 검색조건 추가
This commit is contained in:
@@ -58,6 +58,15 @@ $(document).ready(function(){
|
||||
$('.select2').select2();
|
||||
fnc_datepick();
|
||||
|
||||
// DOM 렌더링 완료 후 그리드 높이 계산
|
||||
setTimeout(function() {
|
||||
fnc_calculateContentHeight("gridDiv", 10);
|
||||
}, 100);
|
||||
|
||||
$(window).resize(function() {
|
||||
fnc_calculateContentHeight("gridDiv", 10);
|
||||
});
|
||||
|
||||
$("input").keyup(function(e){
|
||||
if(e.keyCode == 13){
|
||||
$("#page").val("1");
|
||||
@@ -92,7 +101,9 @@ function fn_excelDownload(){
|
||||
search_part_no: $("#search_part_no").val() || "",
|
||||
search_part_name: $("#search_part_name").val() || "",
|
||||
search_inspection_date: $("#search_inspection_date").val() || "",
|
||||
search_writer: $("#search_writer").val() || ""
|
||||
search_writer: $("#search_writer").val() || "",
|
||||
search_defect_type: $("#search_defect_type").val() || "",
|
||||
search_responsible_dept: $("#search_responsible_dept").val() || ""
|
||||
};
|
||||
|
||||
$.ajax({
|
||||
@@ -243,9 +254,70 @@ var columns = [
|
||||
}
|
||||
];
|
||||
|
||||
// 조회
|
||||
// 조회 (Total 합계 표시 포함)
|
||||
function fn_search(){
|
||||
_tabulGrid = fnc_tabul_search(_tabul_layout_fitColumns, _tabulGrid, "/quality/semiProductInspectionGridList.do", columns, true);
|
||||
var formData = $("#form1").serializeObject();
|
||||
|
||||
$.ajax({
|
||||
url: "/quality/semiProductInspectionGridList.do",
|
||||
type: "POST",
|
||||
data: formData,
|
||||
dataType: "json",
|
||||
beforeSend: function(){
|
||||
_startLoading("Loading...");
|
||||
},
|
||||
complete: function(){
|
||||
_endLoading();
|
||||
},
|
||||
success: function(response) {
|
||||
// 그리드 데이터 설정
|
||||
if(_tabulGrid){
|
||||
_tabulGrid.setData(response.RESULTLIST || []);
|
||||
} else {
|
||||
_tabulGrid = new Tabulator("#mainGrid", {
|
||||
height: "100%",
|
||||
layout: _tabul_layout_fitColumns,
|
||||
columns: columns,
|
||||
data: response.RESULTLIST || [],
|
||||
selectable: true
|
||||
});
|
||||
}
|
||||
|
||||
// Total 합계 계산
|
||||
var totalReceiptQty = 0; // 총 입고수량
|
||||
var totalGoodQty = 0; // 총 양품수량
|
||||
var totalDefectiveQty = 0; // 총 불량수량
|
||||
var totalRegenerationQty = 0; // 총 재생수량
|
||||
var totalFinalGoodQty = 0; // 총 최종양품수량
|
||||
|
||||
if(response.RESULTLIST && response.RESULTLIST.length > 0) {
|
||||
response.RESULTLIST.forEach(function(row) {
|
||||
totalReceiptQty += parseFloat(row.RECEIPT_QTY || 0);
|
||||
totalGoodQty += parseFloat(row.GOOD_QTY || 0);
|
||||
totalDefectiveQty += parseFloat(row.DEFECTIVE_QTY || 0);
|
||||
totalRegenerationQty += parseFloat(row.REGENERATION_QTY || 0);
|
||||
totalFinalGoodQty += parseFloat(row.FINAL_GOOD_QTY || 0);
|
||||
});
|
||||
}
|
||||
|
||||
// 합계 표시
|
||||
$("#totalReceiptQty").text(Number(totalReceiptQty).toLocaleString());
|
||||
$("#totalGoodQty").text(Number(totalGoodQty).toLocaleString());
|
||||
$("#totalDefectiveQty").text(Number(totalDefectiveQty).toLocaleString());
|
||||
$("#totalRegenerationQty").text(Number(totalRegenerationQty).toLocaleString());
|
||||
$("#totalFinalGoodQty").text(Number(totalFinalGoodQty).toLocaleString());
|
||||
|
||||
// 페이징 HTML 업데이트
|
||||
if(response.PAGE_HTML){
|
||||
$(".table_paging_wrap").html(response.PAGE_HTML);
|
||||
}
|
||||
},
|
||||
error: function(xhr, status, error) {
|
||||
_endLoading();
|
||||
alert("데이터 조회 중 오류가 발생했습니다.");
|
||||
console.error("Error:", error);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 검사일 클릭 시 검사결과 확인/수정 팝업
|
||||
@@ -370,9 +442,37 @@ function fn_registPopUp(){
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="">불량유형</label></td>
|
||||
<td>
|
||||
<select name="search_defect_type" id="search_defect_type" class="select2" style="width:150px;" autocomplete="off">
|
||||
<option value="">전체</option>
|
||||
${code_map.defect_type}
|
||||
</select>
|
||||
</td>
|
||||
|
||||
<td><label for="">귀책부서</label></td>
|
||||
<td>
|
||||
<select name="search_responsible_dept" id="search_responsible_dept" class="select2" style="width:150px;" autocomplete="off">
|
||||
<option value="">전체</option>
|
||||
${code_map.responsible_dept}
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<!-- Total 합계 표시 영역 -->
|
||||
<div style="padding:5px 10px; background: #f5f5f5; border: 1px solid #ddd; margin-bottom: 5px;">
|
||||
<span style="font-weight: bold; font-size: 13px;">
|
||||
Total 총 입고수량: <span id="totalReceiptQty" style="color: #2196F3;">0</span>EA
|
||||
Total 총 양품수량: <span id="totalGoodQty" style="color: #4CAF50;">0</span>EA
|
||||
Total 총 불량수량: <span id="totalDefectiveQty" style="color: #dc3545;">0</span>EA
|
||||
Total 총 재생수량: <span id="totalRegenerationQty" style="color: #FF9800;">0</span>EA
|
||||
Total 총 최종양품수량: <span id="totalFinalGoodQty" style="color: #9C27B0;">0</span>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<%@include file= "/WEB-INF/view/common/common_gridArea.jsp" %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -644,6 +644,10 @@ public class QualityController {
|
||||
code_map.put("inspection_date", commonService.bizMakeOptionList("", (String)paramMap.get("search_inspection_date"), "quality.getSemiProductInspectionDateList"));
|
||||
// 검사자 드롭박스
|
||||
code_map.put("writer", commonService.bizMakeOptionList("", (String)paramMap.get("search_writer"), "quality.getSemiProductWriterList"));
|
||||
// 불량유형 드롭박스
|
||||
code_map.put("defect_type", commonService.bizMakeOptionList("", (String)paramMap.get("search_defect_type"), "quality.getSemiProductDefectTypeList"));
|
||||
// 귀책부서 드롭박스
|
||||
code_map.put("responsible_dept", commonService.bizMakeOptionList("", (String)paramMap.get("search_responsible_dept"), "quality.getSemiProductResponsibleDeptList"));
|
||||
request.setAttribute("code_map", code_map);
|
||||
|
||||
// 엑셀 다운로드
|
||||
|
||||
@@ -1496,17 +1496,17 @@
|
||||
AND (T2.INSPECTOR IS NOT NULL OR T2.WRITER IS NOT NULL)) sub
|
||||
WHERE val IS NOT NULL AND val != ''
|
||||
) AS WRITER_NAME
|
||||
<!-- 수량 집계 -->
|
||||
, SUM(T.RECEIPT_QTY) AS RECEIPT_QTY
|
||||
, SUM(T.GOOD_QTY) AS GOOD_QTY
|
||||
, SUM(T.DEFECT_QTY) AS DEFECTIVE_QTY
|
||||
<!-- 수량 집계 (입고수량은 양품 데이터에서만 합산) -->
|
||||
, SUM(CASE WHEN T.DATA_TYPE = 'GOOD' THEN T.RECEIPT_QTY ELSE 0 END) AS RECEIPT_QTY
|
||||
, SUM(CASE WHEN T.DATA_TYPE = 'GOOD' THEN T.GOOD_QTY ELSE 0 END) AS GOOD_QTY
|
||||
, SUM(CASE WHEN T.DATA_TYPE = 'DEFECT' THEN T.DEFECT_QTY ELSE 0 END) AS DEFECTIVE_QTY
|
||||
, CASE
|
||||
WHEN SUM(T.RECEIPT_QTY) > 0
|
||||
THEN ROUND(SUM(T.DEFECT_QTY) * 100.0 / SUM(T.RECEIPT_QTY), 2)
|
||||
WHEN SUM(CASE WHEN T.DATA_TYPE = 'GOOD' THEN T.RECEIPT_QTY ELSE 0 END) > 0
|
||||
THEN ROUND(SUM(CASE WHEN T.DATA_TYPE = 'DEFECT' THEN T.DEFECT_QTY ELSE 0 END) * 100.0 / SUM(CASE WHEN T.DATA_TYPE = 'GOOD' THEN T.RECEIPT_QTY ELSE 0 END), 2)
|
||||
ELSE 0
|
||||
END AS DEFECT_RATE
|
||||
, SUM(CASE WHEN T.DISPOSITION_TYPE = '수정' THEN T.DEFECT_QTY ELSE 0 END) AS REGENERATION_QTY
|
||||
, SUM(T.GOOD_QTY) + SUM(CASE WHEN T.DISPOSITION_TYPE = '수정' THEN T.DEFECT_QTY ELSE 0 END) AS FINAL_GOOD_QTY
|
||||
, SUM(CASE WHEN T.DATA_TYPE = 'DEFECT' AND T.DISPOSITION_TYPE = '수정' THEN T.DEFECT_QTY ELSE 0 END) AS REGENERATION_QTY
|
||||
, SUM(CASE WHEN T.DATA_TYPE = 'GOOD' THEN T.GOOD_QTY ELSE 0 END) + SUM(CASE WHEN T.DATA_TYPE = 'DEFECT' AND T.DISPOSITION_TYPE = '수정' THEN T.DEFECT_QTY ELSE 0 END) AS FINAL_GOOD_QTY
|
||||
FROM (
|
||||
SELECT SPI.OBJID
|
||||
, COALESCE(SPI.MODEL_NAME, '') AS MODEL_NAME
|
||||
@@ -1547,6 +1547,14 @@
|
||||
<if test="search_writer != null and search_writer != ''">
|
||||
AND SPI.WRITER = #{search_writer}
|
||||
</if>
|
||||
<!-- 불량유형 검색 -->
|
||||
<if test="search_defect_type != null and search_defect_type != ''">
|
||||
AND UPPER(SPI.DEFECT_TYPE) LIKE UPPER('%' || #{search_defect_type} || '%')
|
||||
</if>
|
||||
<!-- 귀책부서 검색 -->
|
||||
<if test="search_responsible_dept != null and search_responsible_dept != ''">
|
||||
AND UPPER(SPI.RESPONSIBLE_DEPT) LIKE UPPER('%' || #{search_responsible_dept} || '%')
|
||||
</if>
|
||||
) T
|
||||
GROUP BY T.INSPECTION_GROUP_ID
|
||||
ORDER BY MIN(T.INSPECTION_DATE) DESC, T.INSPECTION_GROUP_ID
|
||||
@@ -1655,6 +1663,24 @@
|
||||
ORDER BY NAME
|
||||
</select>
|
||||
|
||||
<!-- 반제품검사 불량유형 드롭박스 목록 (CODE, NAME 형태) -->
|
||||
<select id="getSemiProductDefectTypeList" parameterType="map" resultType="map">
|
||||
SELECT DISTINCT SPI.DEFECT_TYPE AS CODE
|
||||
, SPI.DEFECT_TYPE AS NAME
|
||||
FROM PMS_QUALITY_SEMI_PRODUCT_INSPECTION SPI
|
||||
WHERE SPI.DEFECT_TYPE IS NOT NULL AND SPI.DEFECT_TYPE != ''
|
||||
ORDER BY NAME
|
||||
</select>
|
||||
|
||||
<!-- 반제품검사 귀책부서 드롭박스 목록 (CODE, NAME 형태) -->
|
||||
<select id="getSemiProductResponsibleDeptList" parameterType="map" resultType="map">
|
||||
SELECT DISTINCT SPI.RESPONSIBLE_DEPT AS CODE
|
||||
, SPI.RESPONSIBLE_DEPT AS NAME
|
||||
FROM PMS_QUALITY_SEMI_PRODUCT_INSPECTION SPI
|
||||
WHERE SPI.RESPONSIBLE_DEPT IS NOT NULL AND SPI.RESPONSIBLE_DEPT != ''
|
||||
ORDER BY NAME
|
||||
</select>
|
||||
|
||||
<!-- 반제품검사 상세 조회 -->
|
||||
<select id="getSemiProductInspectionInfo" parameterType="map" resultType="map">
|
||||
SELECT SPI.OBJID
|
||||
|
||||
Reference in New Issue
Block a user