Merge remote-tracking branch 'origin/main' into V2025112501

This commit is contained in:
leeheejin
2025-12-17 13:48:59 +09:00
10 changed files with 584 additions and 142 deletions

View File

@@ -513,6 +513,20 @@ public class QualityController {
*/
@RequestMapping("/quality/processInspectionList.do")
public String processInspectionList(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
Map code_map = new HashMap();
try {
// 프로젝트번호 목록
code_map.put("project_no", commonService.bizMakeOptionList("", (String)paramMap.get("search_project_no"), "common.getProjectNameList"));
// 검사자 목록
code_map.put("inspector_id", commonService.bizMakeOptionList("", (String)paramMap.get("search_inspector"), "common.getUserselect"));
//제품구분
code_map.put("product_cd", commonService.bizMakeOptionList("0000001", (String)paramMap.get("productType"),"common.getCodeselect"));
} catch(Exception e) {
e.printStackTrace();
}
request.setAttribute("code_map", code_map);
return "/quality/processInspectionList";
}
@@ -717,6 +731,8 @@ public class QualityController {
try {
// 고객사
code_map.put("customer_cd", commonService.bizMakeOptionList("", "", "common.getClientMngSupplySelect"));
// 제품구분
code_map.put("product_type", commonService.bizMakeOptionList("0000001", (String)paramMap.get("search_product_type"), "common.getCodeselect"));
request.setAttribute("code_map", code_map);
} catch(Exception e) {
e.printStackTrace();
@@ -750,6 +766,8 @@ public class QualityController {
}
// 고객사
code_map.put("customer_cd", commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)info.get("customer_objid")), "common.getClientMngSupplySelect"));
// 제품구분
code_map.put("product_cd", commonService.bizMakeOptionList("0000001", CommonUtils.nullToEmpty((String)info.get("PRODUCT_TYPE")), "common.getCodeselect"));
} catch(Exception e) {
e.printStackTrace();
}
@@ -772,8 +790,19 @@ public class QualityController {
*/
@RequestMapping("/quality/customerCsActionFormPopUp.do")
public String customerCsActionFormPopUp(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
Map info = service.getCustomerCsInfo(paramMap);
Map code_map = new HashMap();
Map info = new HashMap();
try {
info = service.getCustomerCsInfo(paramMap);
// 조치구분
code_map.put("action_type", commonService.bizMakeOptionList("0001835", CommonUtils.nullToEmpty((String)info.get("action_type")), "common.getCodeselect"));
} catch(Exception e) {
e.printStackTrace();
}
request.setAttribute("info", info);
request.setAttribute("code_map", code_map);
return "/quality/customerCsActionFormPopUp";
}

View File

@@ -2529,7 +2529,6 @@ SELECT option_objid::VARCHAR AS CODE
</select>
<select id="getPartInfo" parameterType="map" resultType="map">
SELECT
PART_NO
@@ -2785,6 +2784,16 @@ ORDER BY COALESCE(T.REVISION, '1.0')
-->
</select>
<!-- 프로젝트 목록 조회 (제품구분 포함) -->
<select id="getProjectNameListWithProduct" parameterType="map" resultType="map">
SELECT
OBJID::VARCHAR AS CODE
,PROJECT_NO AS NAME
,CODE_NAME(PRODUCT) AS PRODUCT_NAME
FROM PROJECT_MGMT
ORDER BY SUBSTRING(PROJECT_NO,POSITION('-' IN PROJECT_NO)+1) DESC
</select>
<select id="getCodeselectAllLevel" parameterType="map" resultType="map">
WITH RECURSIVE V_CODE AS (
SELECT CODE_ID

View File

@@ -1012,10 +1012,35 @@
<!-- 공정검사 마스터 목록 조회 -->
<select id="getProcessInspectionList" parameterType="map" resultType="map">
SELECT PIM.OBJID
, PIM.INSPECTION_DATE
, PIM.INSPECTOR_ID
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = PIM.INSPECTOR_ID) AS INSPECTOR_NAME
<!-- 프로젝트명 (외 N건) -->
/* 검사일 (외 N건) - 디테일 테이블에서 집계 */
, (SELECT
CASE WHEN COUNT(DISTINCT PID.INSPECTION_DATE) > 1
THEN MIN(PID.INSPECTION_DATE) || ' 외 ' || (COUNT(DISTINCT PID.INSPECTION_DATE) - 1) || '건'
WHEN COUNT(DISTINCT PID.INSPECTION_DATE) = 1
THEN MIN(PID.INSPECTION_DATE)
ELSE ''
END
FROM PROCESS_INSPECTION_DETAIL PID WHERE PID.MASTER_OBJID = PIM.OBJID AND PID.INSPECTION_DATE IS NOT NULL AND PID.INSPECTION_DATE != ''
) AS INSPECTION_DATE
/* 검사자 (외 N건) - 디테일 테이블에서 집계 */
, (SELECT
CASE WHEN COUNT(DISTINCT PID.INSPECTOR_ID) > 1
THEN (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = MIN(PID.INSPECTOR_ID)) || ' 외 ' || (COUNT(DISTINCT PID.INSPECTOR_ID) - 1) || '건'
WHEN COUNT(DISTINCT PID.INSPECTOR_ID) = 1
THEN (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = MIN(PID.INSPECTOR_ID))
ELSE ''
END
FROM PROCESS_INSPECTION_DETAIL PID WHERE PID.MASTER_OBJID = PIM.OBJID AND PID.INSPECTOR_ID IS NOT NULL AND PID.INSPECTOR_ID != ''
) AS INSPECTOR_NAME
/* 제품구분 (외 N건) */
, (SELECT
CASE WHEN COUNT(DISTINCT PID.PROJECT_OBJID) > 1
THEN (SELECT CODE_NAME(PRODUCT) FROM PROJECT_MGMT WHERE OBJID = MIN(PID.PROJECT_OBJID)) || ' 외 ' || (COUNT(DISTINCT PID.PROJECT_OBJID) - 1) || '건'
ELSE (SELECT CODE_NAME(PRODUCT) FROM PROJECT_MGMT WHERE OBJID = MIN(PID.PROJECT_OBJID))
END
FROM PROCESS_INSPECTION_DETAIL PID WHERE PID.MASTER_OBJID = PIM.OBJID
) AS PRODUCT_NAME
/* 프로젝트명 (외 N건) */
, (SELECT
CASE WHEN COUNT(DISTINCT PID.PROJECT_OBJID) > 1
THEN (SELECT PROJECT_NO FROM PROJECT_MGMT WHERE OBJID = MIN(PID.PROJECT_OBJID)) || ' 외 ' || (COUNT(DISTINCT PID.PROJECT_OBJID) - 1) || '건'
@@ -1023,7 +1048,7 @@
END
FROM PROCESS_INSPECTION_DETAIL PID WHERE PID.MASTER_OBJID = PIM.OBJID
) AS PROJECT_NO
<!-- 품번 (외 N건) -->
/* 품번 (외 N건) */
, (SELECT
CASE WHEN COUNT(*) > 1
THEN MIN(PID.PART_NO) || ' 외 ' || (COUNT(*) - 1) || '건'
@@ -1031,7 +1056,7 @@
END
FROM PROCESS_INSPECTION_DETAIL PID WHERE PID.MASTER_OBJID = PIM.OBJID
) AS PART_NO
<!-- 품명 (외 N건) -->
/* 품명 (외 N건) */
, (SELECT
CASE WHEN COUNT(*) > 1
THEN MIN(PID.PART_NAME) || ' 외 ' || (COUNT(*) - 1) || '건'
@@ -1039,56 +1064,86 @@
END
FROM PROCESS_INSPECTION_DETAIL PID WHERE PID.MASTER_OBJID = PIM.OBJID
) AS PART_NAME
<!-- 불량수량 합계 -->
, (SELECT COALESCE(SUM(PID.DEFECT_QTY), 0) FROM PROCESS_INSPECTION_DETAIL PID WHERE PID.MASTER_OBJID = PIM.OBJID) AS DEFECT_QTY
<!-- 작업환경상태 (하나라도 불량이면 불량) -->
/* 검사수량 합계 */
, (SELECT COALESCE(SUM(PID.INSPECTION_QTY), 0) FROM PROCESS_INSPECTION_DETAIL PID WHERE PID.MASTER_OBJID = PIM.OBJID) AS INSPECTION_QTY
/* 불량수량 합계 */
, (SELECT COALESCE(SUM(PID.DEFECT_QTY), 0) FROM PROCESS_INSPECTION_DETAIL PID WHERE PID.MASTER_OBJID = PIM.OBJID) AS DEFECT_QTY
/* 작업환경상태 (하나라도 불량이면 불량) */
, (SELECT CASE WHEN COUNT(CASE WHEN PID.WORK_ENV_STATUS = '불량' THEN 1 END) > 0 THEN '불량' ELSE '양호' END
FROM PROCESS_INSPECTION_DETAIL PID WHERE PID.MASTER_OBJID = PIM.OBJID
) AS WORK_ENV_STATUS
<!-- 측정기 (하나라도 불량이면 불량) -->
/* 측정기 (하나라도 불량이면 불량) */
, (SELECT CASE WHEN COUNT(CASE WHEN PID.MEASURING_DEVICE = '불량' THEN 1 END) > 0 THEN '불량' ELSE '양호' END
FROM PROCESS_INSPECTION_DETAIL PID WHERE PID.MASTER_OBJID = PIM.OBJID
) AS MEASURING_DEVICE
<!-- 검사결과 (하나라도 NG면 NG) -->
/* 검사결과 (하나라도 NG면 NG) */
, (SELECT CASE WHEN COUNT(CASE WHEN PID.INSPECTION_RESULT = 'NG' THEN 1 END) > 0 THEN 'NG' ELSE 'OK' END
FROM PROCESS_INSPECTION_DETAIL PID WHERE PID.MASTER_OBJID = PIM.OBJID
) AS INSPECTION_RESULT
, PIM.REMARK
FROM PROCESS_INSPECTION_MASTER PIM
WHERE 1=1
/* 프로젝트번호 */
<if test="search_project_no != null and search_project_no != ''">
AND EXISTS (SELECT 1 FROM PROCESS_INSPECTION_DETAIL PID
WHERE PID.MASTER_OBJID = PIM.OBJID
AND PID.PROJECT_OBJID = #{search_project_no})
</if>
/* 제품구분 */
<if test="productType != null and productType != ''">
AND EXISTS (SELECT 1 FROM PROCESS_INSPECTION_DETAIL PID
JOIN PROJECT_MGMT PM ON PM.OBJID = PID.PROJECT_OBJID
WHERE PID.MASTER_OBJID = PIM.OBJID
AND UPPER(PM.PROJECT_NO) LIKE UPPER('%' || #{search_project_no} || '%'))
AND PM.PRODUCT = #{productType})
</if>
<if test="search_part_no != null and search_part_no != ''">
/* 품번 */
<if test="search_part_objid != null and search_part_objid != ''">
AND EXISTS (SELECT 1 FROM PROCESS_INSPECTION_DETAIL PID
WHERE PID.MASTER_OBJID = PIM.OBJID
AND UPPER(PID.PART_NO) LIKE UPPER('%' || #{search_part_no} || '%'))
AND PID.PART_OBJID = #{search_part_objid})
</if>
/* 품명 */
<if test="search_part_name != null and search_part_name != ''">
AND EXISTS (SELECT 1 FROM PROCESS_INSPECTION_DETAIL PID
WHERE PID.MASTER_OBJID = PIM.OBJID
AND UPPER(PID.PART_NAME) LIKE UPPER('%' || #{search_part_name} || '%'))
AND PID.PART_OBJID = #{search_part_name})
</if>
/* 작업환경상태 */
<if test="search_work_env_status != null and search_work_env_status != ''">
AND EXISTS (SELECT 1 FROM PROCESS_INSPECTION_DETAIL PID
WHERE PID.MASTER_OBJID = PIM.OBJID
AND PID.WORK_ENV_STATUS = CASE WHEN #{search_work_env_status} = 'OK' THEN '양호' ELSE '불량' END)
</if>
/* 측정기 */
<if test="search_measuring_device != null and search_measuring_device != ''">
AND EXISTS (SELECT 1 FROM PROCESS_INSPECTION_DETAIL PID
WHERE PID.MASTER_OBJID = PIM.OBJID
AND PID.MEASURING_DEVICE = CASE WHEN #{search_measuring_device} = 'OK' THEN '양호' ELSE '불량' END)
</if>
/* 검사자 */
<if test="search_inspector != null and search_inspector != ''">
AND (
UPPER(PIM.INSPECTOR_ID) LIKE UPPER('%' || #{search_inspector} || '%')
OR UPPER((SELECT USER_NAME FROM USER_INFO WHERE USER_ID = PIM.INSPECTOR_ID)) LIKE UPPER('%' || #{search_inspector} || '%')
)
AND EXISTS (SELECT 1 FROM PROCESS_INSPECTION_DETAIL PID
WHERE PID.MASTER_OBJID = PIM.OBJID
AND PID.INSPECTOR_ID = #{search_inspector})
</if>
/* 검사일 (시작) */
<if test="search_inspection_date_from != null and search_inspection_date_from != ''">
AND PIM.INSPECTION_DATE <![CDATA[>=]]> #{search_inspection_date_from}
AND EXISTS (SELECT 1 FROM PROCESS_INSPECTION_DETAIL PID
WHERE PID.MASTER_OBJID = PIM.OBJID
AND PID.INSPECTION_DATE <![CDATA[>=]]> #{search_inspection_date_from})
</if>
/* 검사일 (종료) */
<if test="search_inspection_date_to != null and search_inspection_date_to != ''">
AND PIM.INSPECTION_DATE <![CDATA[<=]]> #{search_inspection_date_to}
AND EXISTS (SELECT 1 FROM PROCESS_INSPECTION_DETAIL PID
WHERE PID.MASTER_OBJID = PIM.OBJID
AND PID.INSPECTION_DATE <![CDATA[<=]]> #{search_inspection_date_to})
</if>
/* 검사결과 */
<if test="search_inspection_result != null and search_inspection_result != ''">
AND (SELECT CASE WHEN COUNT(CASE WHEN PID.INSPECTION_RESULT = 'NG' THEN 1 END) > 0 THEN 'NG' ELSE 'OK' END
FROM PROCESS_INSPECTION_DETAIL PID WHERE PID.MASTER_OBJID = PIM.OBJID) = #{search_inspection_result}
</if>
ORDER BY PIM.INSPECTION_DATE DESC, PIM.REG_DATE DESC
ORDER BY PIM.REG_DATE DESC
</select>
<!-- 공정검사 마스터 상세 조회 -->
@@ -1112,6 +1167,7 @@
, (SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = PID.PROCESS_CD) AS PROCESS_NAME
, PID.PROJECT_OBJID
, (SELECT PROJECT_NO FROM PROJECT_MGMT WHERE OBJID = PID.PROJECT_OBJID) AS PROJECT_NO
, (SELECT CODE_NAME(PRODUCT) FROM PROJECT_MGMT WHERE OBJID = PID.PROJECT_OBJID) AS PRODUCT_NAME
, PID.PART_OBJID
, PID.PART_NO
, PID.PART_NAME
@@ -1123,9 +1179,16 @@
, (SELECT DEPT_NAME FROM DEPT_INFO WHERE OBJID::VARCHAR = PID.DEPT_CD) AS DEPT_NAME
, PID.USER_ID
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = PID.USER_ID) AS USER_NAME
, PID.INSPECTION_DATE
, PID.INSPECTOR_ID
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = PID.INSPECTOR_ID) AS INSPECTOR_NAME
, PID.REMARK
, PID.ACTION_STATUS
, PID.INSPECTION_RESULT
/* 이미지파일 카운트 */
, (SELECT COUNT(*) FROM ATTACH_FILE_INFO F WHERE F.TARGET_OBJID = PID.OBJID AND F.DOC_TYPE = 'PROCESS_INSPECTION_IMAGE' AND UPPER(F.STATUS) = 'ACTIVE') AS IMAGE_FILE_CNT
/* 첨부파일 카운트 */
, (SELECT COUNT(*) FROM ATTACH_FILE_INFO F WHERE F.TARGET_OBJID = PID.OBJID AND F.DOC_TYPE = 'PROCESS_INSPECTION_FILE' AND UPPER(F.STATUS) = 'ACTIVE') AS ATTACH_FILE_CNT
FROM PROCESS_INSPECTION_DETAIL PID
WHERE PID.MASTER_OBJID = #{MASTER_OBJID}
ORDER BY PID.REG_DATE
@@ -1176,6 +1239,8 @@
, MEASURING_DEVICE
, DEPT_CD
, USER_ID
, INSPECTION_DATE
, INSPECTOR_ID
, REMARK
, ACTION_STATUS
, INSPECTION_RESULT
@@ -1195,6 +1260,8 @@
, #{MEASURING_DEVICE}
, #{DEPT_CD}
, #{USER_ID}
, #{INSPECTION_DATE}
, #{INSPECTOR_ID}
, #{REMARK}
, #{ACTION_STATUS}
, #{INSPECTION_RESULT}
@@ -1213,6 +1280,8 @@
, MEASURING_DEVICE = #{MEASURING_DEVICE}
, DEPT_CD = #{DEPT_CD}
, USER_ID = #{USER_ID}
, INSPECTION_DATE = #{INSPECTION_DATE}
, INSPECTOR_ID = #{INSPECTOR_ID}
, REMARK = #{REMARK}
, ACTION_STATUS = #{ACTION_STATUS}
, INSPECTION_RESULT = #{INSPECTION_RESULT}
@@ -1776,7 +1845,8 @@
, CCS.QTY
, CCS.CUSTOMER_OBJID
, (SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = CCS.CUSTOMER_OBJID) AS CUSTOMER_NAME
, CCS.MODEL_NAME
, CCS.MODEL_NAME AS PRODUCT_TYPE
, CODE_NAME(CCS.MODEL_NAME) AS PRODUCT_TYPE_NAME
, CCS.PRODUCT_NAME
, CCS.PART_NO
, CCS.PRODUCT_NO
@@ -1786,8 +1856,11 @@
, CCS.SERIAL_NO
, CCS.MANUFACTURER
, CCS.COMPLAINT_CONTENT
, CCS.ACTION_TYPE
, CODE_NAME(CCS.ACTION_TYPE) AS ACTION_TYPE_NAME
, CCS.ACTION_CONTENT
, CCS.BLAME_DECISION
, CASE CCS.BLAME_DECISION WHEN 'R' THEN 'RPS' WHEN 'C' THEN '고객사' WHEN 'O' THEN '외주업체' ELSE CCS.BLAME_DECISION END AS BLAME_DECISION_NAME
, CCS.STATUS
, CCS.REMARK
, CCS.ACTION_DATE
@@ -1806,8 +1879,8 @@
<if test="search_customer_objid != null and search_customer_objid != ''">
AND CCS.CUSTOMER_OBJID = #{search_customer_objid}
</if>
<if test="search_model_name != null and search_model_name != ''">
AND UPPER(CCS.MODEL_NAME) LIKE UPPER('%' || #{search_model_name} || '%')
<if test="search_product_type != null and search_product_type != ''">
AND CCS.MODEL_NAME = #{search_product_type}
</if>
<if test="search_product_no != null and search_product_no != ''">
AND UPPER(CCS.PRODUCT_NO) LIKE UPPER('%' || #{search_product_no} || '%')
@@ -1856,7 +1929,8 @@
, CCS.QTY
, CCS.CUSTOMER_OBJID
, (SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = CCS.CUSTOMER_OBJID) AS CUSTOMER_NAME
, CCS.MODEL_NAME
, CCS.MODEL_NAME AS PRODUCT_TYPE
, CODE_NAME(CCS.MODEL_NAME) AS PRODUCT_TYPE_NAME
, CCS.PRODUCT_NAME
, CCS.PART_NO
, CCS.PRODUCT_NO
@@ -1866,8 +1940,11 @@
, CCS.SERIAL_NO
, CCS.MANUFACTURER
, CCS.COMPLAINT_CONTENT
, CCS.ACTION_TYPE
, CODE_NAME(CCS.ACTION_TYPE) AS ACTION_TYPE_NAME
, CCS.ACTION_CONTENT
, CCS.BLAME_DECISION
, CASE CCS.BLAME_DECISION WHEN 'R' THEN 'RPS' WHEN 'C' THEN '고객사' WHEN 'O' THEN '외주업체' ELSE CCS.BLAME_DECISION END AS BLAME_DECISION_NAME
, CCS.STATUS
, CCS.REMARK
, CCS.ACTION_DATE
@@ -1962,6 +2039,7 @@
, STATUS = #{STATUS}
, REMARK = #{REMARK}
, MOD_DATE = NOW()
, ACTION_TYPE = #{ACTION_TYPE}
WHERE OBJID = #{OBJID}
</update>

View File

@@ -888,10 +888,7 @@ public class QualityService extends BaseService{
// 수정
masterParamMap.put("OBJID", masterObjId);
sqlSession.update("quality.updateProcessInspectionMaster", masterParamMap);
// 기존 디테일 삭제 후 재등록
Map<String, Object> deleteParamMap = new HashMap<String, Object>();
deleteParamMap.put("MASTER_OBJID", masterObjId);
sqlSession.delete("quality.deleteProcessInspectionDetailByMaster", deleteParamMap);
// 디테일 삭제하지 않고 UPSERT로 처리 (파일 첨부 연동 유지)
}
// 디테일 저장
@@ -903,7 +900,11 @@ public class QualityService extends BaseService{
for(Map<String, Object> rowData : dataList){
Map<String, Object> sqlParamMap = new HashMap<String, Object>();
String detailObjId = CommonUtils.checkNull(CommonUtils.createObjId());
// 클라이언트에서 전달한 OBJID 사용 (파일 첨부 연동을 위해)
String detailObjId = CommonUtils.checkNull(rowData.get("OBJID"));
if(detailObjId.isEmpty()) {
detailObjId = CommonUtils.checkNull(CommonUtils.createObjId());
}
sqlParamMap.put("OBJID", detailObjId);
sqlParamMap.put("MASTER_OBJID", masterObjId);
@@ -918,6 +919,8 @@ public class QualityService extends BaseService{
sqlParamMap.put("MEASURING_DEVICE", CommonUtils.checkNull(rowData.get("MEASURING_DEVICE")));
sqlParamMap.put("DEPT_CD", CommonUtils.checkNull(rowData.get("DEPT_CD")));
sqlParamMap.put("USER_ID", CommonUtils.checkNull(rowData.get("USER_ID")));
sqlParamMap.put("INSPECTION_DATE", CommonUtils.checkNull(rowData.get("INSPECTION_DATE")));
sqlParamMap.put("INSPECTOR_ID", CommonUtils.checkNull(rowData.get("INSPECTOR_ID")));
sqlParamMap.put("REMARK", CommonUtils.checkNull(rowData.get("REMARK")));
sqlParamMap.put("ACTION_STATUS", CommonUtils.checkNull(rowData.get("ACTION_STATUS")));
sqlParamMap.put("INSPECTION_RESULT", CommonUtils.checkNull(rowData.get("INSPECTION_RESULT")));