품질관리_수입검사관리 거의 완성

This commit is contained in:
2025-12-05 17:41:33 +09:00
parent f8af871104
commit a3b916eded
12 changed files with 767 additions and 299 deletions

View File

@@ -1,5 +1,6 @@
package com.pms.controller;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -10,14 +11,21 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.pms.common.bean.PersonBean;
import com.pms.common.utils.CommonUtils;
import com.pms.common.utils.Constants;
import com.pms.common.JsonUtil;
import com.pms.service.CommonService;
import com.pms.service.QualityService;
@Controller
public class QualityController {
@Autowired
CommonService commonService;
QualityService service = null;
@Autowired
@@ -257,19 +265,25 @@ public class QualityController {
* @return
*/
@RequestMapping("/quality/incomingInspectionList.do")
public String incomingInspectionList(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
// 검색조건용 리스트 조회
List proposalNoList = service.getProposalNoList(paramMap);
List purchaseOrderNoList = service.getPurchaseOrderNoList(paramMap);
List projectNoList = service.getProjectNoList(paramMap);
List partnerList = service.getPartnerList(paramMap);
List inspectorList = service.getInspectorList(paramMap);
public String incomingInspectionList(HttpServletRequest request, @RequestParam Map paramMap){
ArrayList list = new ArrayList();
Map code_map = new HashMap();
request.setAttribute("proposalNoList", proposalNoList);
request.setAttribute("purchaseOrderNoList", purchaseOrderNoList);
request.setAttribute("projectNoList", projectNoList);
request.setAttribute("partnerList", partnerList);
request.setAttribute("inspectorList", inspectorList);
try {
// 프로젝트번호
code_map.put("project_no", commonService.bizMakeOptionList("", (String)paramMap.get("project_no"), "common.getProjectNameList"));
// 공급업체
code_map.put("partner_objid", commonService.bizMakeOptionList("", (String)paramMap.get("partner_objid"), "common.getmatersupplyselect"));
// 검사자
code_map.put("inspector_id", commonService.bizMakeOptionList("", (String)paramMap.get("inspector_id"), "common.getUserselect"));
list = commonService.selectListPaging("quality.getIncomingInspectionList", request, paramMap);
} catch(Exception e) {
e.printStackTrace();
}
request.setAttribute("code_map", code_map);
request.setAttribute("LIST", JsonUtil.ListToJson(list));
return "/quality/incomingInspectionList";
}
@@ -280,10 +294,11 @@ public class QualityController {
* @param paramMap
* @return
*/
@ResponseBody
@RequestMapping("/quality/incomingInspectionGridList.do")
public String incomingInspectionGridList(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
request.setAttribute("RESULT", CommonUtils.getJsonArray(service.getIncomingInspectionList(request, paramMap)));
return "/ajax/ajaxResult";
public Map incomingInspectionGridList(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
commonService.selectListPagingNew("quality.getIncomingInspectionList", request, paramMap);
return paramMap;
}
/**
@@ -294,11 +309,47 @@ public class QualityController {
*/
@RequestMapping("/quality/incomingInspectionFormPopUp.do")
public String incomingInspectionFormPopUp(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
Map info = service.getIncomingInspectionInfo(paramMap);
request.setAttribute("info", info);
Map code_map = new HashMap();
try {
// 로그인 사용자 정보
PersonBean person = (PersonBean) request.getSession().getAttribute(Constants.PERSON_BEAN);
String loginUserId = person != null ? person.getUserId() : "";
// 기존 검사 정보 조회 (검사자, 검사일 가져오기)
Map info = service.getIncomingInspectionDetailInfo(paramMap);
String savedInspectorId = "";
if(info != null && info.get("INSPECTOR_ID") != null) {
savedInspectorId = (String) info.get("INSPECTOR_ID");
request.setAttribute("info", info);
} else {
// 저장된 값 없으면 로그인 사용자로 기본 설정
savedInspectorId = loginUserId;
}
// 검사자 목록 (기존 값 또는 로그인 사용자 selected)
code_map.put("inspector_id", commonService.bizMakeOptionList("", savedInspectorId, "common.getUserselect"));
} catch(Exception e) {
e.printStackTrace();
}
request.setAttribute("code_map", code_map);
return "/quality/incomingInspectionFormPopUp";
}
/**
* 수입검사 상세 그리드 목록 조회 (입고결과 기반)
* @param request
* @param paramMap
* @return
*/
@ResponseBody
@RequestMapping("/quality/incomingInspectionDetailGridList.do")
public Map incomingInspectionDetailGridList(HttpServletRequest request, @RequestParam Map<String, Object> paramMap){
commonService.selectListPagingNew("quality.getIncomingInspectionDetailList", request, paramMap);
return paramMap;
}
/**
* 수입검사 저장
* @param request

View File

@@ -1387,6 +1387,7 @@ INSERT INTO INVENTORY_MGMT_HISTORY
, CONTRACT_MGMT_OBJID
, PURCHASE_ORDER_MASTER_OBJID
, PURCHASE_ORDER_SUB_OBJID
, RECEIPT_DATE
)
VALUES
(
@@ -1400,6 +1401,7 @@ INSERT INTO INVENTORY_MGMT_HISTORY
, #{CONTRACT_MGMT_OBJID}
, #{PURCHASE_ORDER_MASTER_OBJID}
, #{PURCHASE_ORDER_SUB_OBJID}
, #{RECEIPT_DATE}
)
</update>

View File

@@ -4198,10 +4198,29 @@ SELECT POM.OBJID
,POM.DELIVERY_DATE
,POM.PARTNER_OBJID
,CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE 1=1 AND OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME
,(SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_NAME
<!-- 품의서 번호 -->
,POM.SALES_REQUEST_OBJID
,(SELECT REQUEST_MNG_NO FROM SALES_REQUEST_MASTER WHERE OBJID::VARCHAR = POM.SALES_REQUEST_OBJID) AS PROPOSAL_NO
<!-- 품번/품명 (첫번째 + 외 N건) -->
,(SELECT
CASE
WHEN COUNT(*) > 1 THEN MIN(POP.PART_NO) || ' 외 ' || (COUNT(*) - 1) || '건'
ELSE MIN(POP.PART_NO)
END
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID::VARCHAR
) AS PART_NO
,(SELECT
CASE
WHEN COUNT(*) > 1 THEN MIN(POP.PART_NAME) || ' 외 ' || (COUNT(*) - 1) || '건'
ELSE MIN(POP.PART_NAME)
END
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID::VARCHAR
) AS PART_NAME
,POM.SALES_MNG_USER_ID
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = POM.SALES_MNG_USER_ID) AS SALES_MNG_USER_NAME
@@ -4223,9 +4242,9 @@ SELECT POM.OBJID
<!-- ,S1.TOTAL_DEFECT_QTY -->
<!-- ,(CASE WHEN 0 <![CDATA[ >= ]]> ((SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - (S1.TOTAL_DELIVERY_QTY - S1.TOTAL_DEFECT_QTY)) THEN '입고완료' -->
<!-- ,((SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - (S1.TOTAL_DELIVERY_QTY - S1.TOTAL_DEFECT_QTY )) AS NON_DELIVERY_QTY -->
,((SELECT SUM(REAL_ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - (S1.TOTAL_DELIVERY_QTY )) AS NON_DELIVERY_QTY
,((SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - (S1.TOTAL_DELIVERY_QTY )) AS NON_DELIVERY_QTY
<!-- ,S1.TOTAL_DEFECT_QTY -->
,(CASE WHEN 0 <![CDATA[ >= ]]> ((SELECT SUM(REAL_ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - (S1.TOTAL_DELIVERY_QTY <!-- - S1.TOTAL_DEFECT_QTY -->)) THEN '입고완료'
,(CASE WHEN 0 <![CDATA[ >= ]]> ((SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - (S1.TOTAL_DELIVERY_QTY <!-- - S1.TOTAL_DEFECT_QTY -->)) THEN '입고완료'
WHEN TO_CHAR(NOW(),'YYYY-MM-DD') <![CDATA[ > ]]> POM.DELIVERY_DATE THEN '지연'
ELSE '입고중'
END) AS DELIVERY_STATUS

View File

@@ -660,64 +660,113 @@
<!-- 수입검사 목록 조회 -->
<select id="getIncomingInspectionList" parameterType="map" resultType="map">
SELECT POM.OBJID
, SRM.PROPOSAL_NO
, SRM.OBJID AS PROPOSAL_OBJID
, POM.PURCHASE_ORDER_NO
, CM.PROJECT_NO
, POP.PART_NO
, POP.PART_NAME
, CASE
WHEN POM.PARTNER_OBJID LIKE 'C_%' THEN (SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)
ELSE (SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID::VARCHAR = POM.PARTNER_OBJID)
END AS PARTNER_NAME
, CASE
WHEN COALESCE((SELECT SUM(REAL_ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART WHERE PURCHASE_ORDER_MASTER_OBJID = POM.OBJID::VARCHAR), 0)
<![CDATA[ <= ]]> COALESCE((SELECT SUM(RECEIPT_QTY::NUMERIC) FROM ARRIVAL_PLAN WHERE PARENT_OBJID = POM.OBJID), 0)
THEN '입고완료'
ELSE '입고중'
END AS DELIVERY_STATUS
, '' AS INSPECTOR_NAME
, '' AS INSPECTION_DATE
, '' AS INSPECTION_RESULT
FROM PURCHASE_ORDER_MASTER POM
LEFT JOIN PURCHASE_ORDER_PART POP ON POM.OBJID::VARCHAR = POP.PURCHASE_ORDER_MASTER_OBJID
LEFT JOIN SALES_REQUEST_MASTER SRM ON POM.SALES_REQUEST_MASTER_OBJID::VARCHAR = SRM.OBJID::VARCHAR
LEFT JOIN CONTRACT_MNG CM ON POM.CONTRACT_OBJID = CM.OBJID
<!-- 품의서 번호 -->
,POM.SALES_REQUEST_OBJID AS PROPOSAL_OBJID
,(SELECT REQUEST_MNG_NO FROM SALES_REQUEST_MASTER WHERE OBJID::VARCHAR = POM.SALES_REQUEST_OBJID) AS PROPOSAL_NO
,POM.PURCHASE_ORDER_NO
,CM.PROJECT_NO
<!-- 품번/품명 (첫번째 + 외 N건) -->
,(SELECT
CASE
WHEN COUNT(*) > 1 THEN MIN(POP.PART_NO) || ' 외 ' || (COUNT(*) - 1) || '건'
ELSE MIN(POP.PART_NO)
END
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID::VARCHAR
) AS PART_NO
,(SELECT
CASE
WHEN COUNT(*) > 1 THEN MIN(POP.PART_NAME) || ' 외 ' || (COUNT(*) - 1) || '건'
ELSE MIN(POP.PART_NAME)
END
FROM PURCHASE_ORDER_PART POP
WHERE POP.PURCHASE_ORDER_MASTER_OBJID = POM.OBJID::VARCHAR
) AS PART_NAME
<!-- 공급업체 (CLIENT_MNG) -->
,POM.PARTNER_OBJID
,(SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = POM.PARTNER_OBJID) AS PARTNER_NAME
<!-- 발주수량 -->
,(SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) AS TOTAL_PO_QTY
<!-- 입고수량/미입고수량 -->
,S1.TOTAL_DELIVERY_QTY
,((SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - COALESCE(S1.TOTAL_DELIVERY_QTY, 0)) AS NON_DELIVERY_QTY
<!-- 입고상태 -->
,(CASE WHEN 0 <![CDATA[ >= ]]> ((SELECT SUM(ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - COALESCE(S1.TOTAL_DELIVERY_QTY, 0)) THEN '입고완료'
WHEN TO_CHAR(NOW(),'YYYY-MM-DD') <![CDATA[ > ]]> POM.DELIVERY_DATE THEN '지연'
ELSE '입고중'
END) AS DELIVERY_STATUS
<!-- 검사 정보 (INCOMING_INSPECTION_DETAIL에서 조회) -->
,(SELECT U.USER_NAME FROM USER_INFO U WHERE U.USER_ID = IID.INSPECTOR_ID) AS INSPECTOR_NAME
,IID.INSPECTION_DATE
,(CASE WHEN IID.NG_COUNT > 0 THEN 'NG'
WHEN IID.TOTAL_COUNT > 0 AND IID.TOTAL_COUNT = IID.INSPECTED_COUNT THEN 'OK'
WHEN IID.INSPECTED_COUNT > 0 THEN '검사중'
ELSE '' END) AS INSPECTION_RESULT
FROM PURCHASE_ORDER_MASTER AS POM
LEFT OUTER JOIN (
SELECT PURCHASE_ORDER_MASTER_OBJID
,MAX(INSPECTOR_ID) AS INSPECTOR_ID
,MAX(INSPECTION_DATE) AS INSPECTION_DATE
,COUNT(*) AS TOTAL_COUNT
,COUNT(CASE WHEN INSPECTION_RESULT IS NOT NULL AND INSPECTION_RESULT != '' THEN 1 END) AS INSPECTED_COUNT
,COUNT(CASE WHEN INSPECTION_RESULT = 'NG' THEN 1 END) AS NG_COUNT
FROM INCOMING_INSPECTION_DETAIL
GROUP BY PURCHASE_ORDER_MASTER_OBJID
) AS IID ON POM.OBJID::VARCHAR = IID.PURCHASE_ORDER_MASTER_OBJID
LEFT OUTER JOIN (
SELECT POP.PURCHASE_ORDER_MASTER_OBJID
,SUM(POP.ORDER_QTY::NUMERIC) AS TOTAL_PO_QTY
,MAX(DH.RECEIPT_DATE) AS CUR_DELIVERY_DATE
,SUM(DH.RECEIPT_QTY::NUMERIC) AS TOTAL_DELIVERY_QTY
FROM PURCHASE_ORDER_PART POP
LEFT OUTER JOIN ARRIVAL_PLAN DH ON POP.OBJID = DH.ORDER_PART_OBJID
GROUP BY POP.PURCHASE_ORDER_MASTER_OBJID
) AS S1 ON POM.OBJID::VARCHAR = S1.PURCHASE_ORDER_MASTER_OBJID
LEFT OUTER JOIN PROJECT_MGMT AS CM ON POM.CONTRACT_MGMT_OBJID = CM.OBJID
WHERE 1=1
AND POM.STATUS = 'complete'
AND POM.MAIL_SEND_DATE IS NOT NULL
AND (MULTI_MASTER_YN = 'Y' OR NVL(MULTI_MASTER_YN, '') != 'Y' AND NVL(MULTI_YN, '') != 'Y')
<if test="search_proposal_no != null and search_proposal_no != ''">
AND SRM.PROPOSAL_NO = #{search_proposal_no}
AND (SELECT REQUEST_MNG_NO FROM SALES_REQUEST_MASTER WHERE OBJID::VARCHAR = POM.SALES_REQUEST_OBJID) LIKE '%' || #{search_proposal_no} || '%'
</if>
<if test="search_purchase_order_no != null and search_purchase_order_no != ''">
AND POM.PURCHASE_ORDER_NO = #{search_purchase_order_no}
AND TRIM(UPPER(POM.PURCHASE_ORDER_NO)) LIKE '%' || TRIM(UPPER(#{search_purchase_order_no})) || '%'
</if>
<if test="search_project_no != null and search_project_no != ''">
AND CM.PROJECT_NO = #{search_project_no}
AND CM.PROJECT_NO LIKE '%' || #{search_project_no} || '%'
</if>
<if test="search_part_no != null and search_part_no != ''">
AND UPPER(POP.PART_NO) LIKE UPPER('%' || #{search_part_no} || '%')
AND POM.OBJID::VARCHAR IN (
SELECT PURCHASE_ORDER_MASTER_OBJID FROM PURCHASE_ORDER_PART
WHERE TRIM(UPPER(PART_NO)) LIKE '%' || TRIM(UPPER(#{search_part_no})) || '%'
)
</if>
<if test="search_part_name != null and search_part_name != ''">
AND UPPER(POP.PART_NAME) LIKE UPPER('%' || #{search_part_name} || '%')
AND POM.OBJID::VARCHAR IN (
SELECT PURCHASE_ORDER_MASTER_OBJID FROM PURCHASE_ORDER_PART
WHERE TRIM(UPPER(PART_NAME)) LIKE '%' || TRIM(UPPER(#{search_part_name})) || '%'
)
</if>
<if test="search_partner != null and search_partner != ''">
AND POM.PARTNER_OBJID = #{search_partner}
</if>
<if test="search_partner_name != null and search_partner_name != ''">
AND (
UPPER((SELECT CLIENT_NM FROM CLIENT_MNG WHERE 'C_' || OBJID::VARCHAR = POM.PARTNER_OBJID)) LIKE UPPER('%' || #{search_partner_name} || '%')
OR UPPER((SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID::VARCHAR = POM.PARTNER_OBJID)) LIKE UPPER('%' || #{search_partner_name} || '%')
)
AND UPPER((SELECT CLIENT_NM FROM CLIENT_MNG WHERE OBJID::VARCHAR = POM.PARTNER_OBJID)) LIKE UPPER('%' || #{search_partner_name} || '%')
</if>
<if test="search_delivery_status != null and search_delivery_status != ''">
AND CASE
WHEN COALESCE((SELECT SUM(REAL_ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART WHERE PURCHASE_ORDER_MASTER_OBJID = POM.OBJID::VARCHAR), 0)
<![CDATA[ <= ]]> COALESCE((SELECT SUM(RECEIPT_QTY::NUMERIC) FROM ARRIVAL_PLAN WHERE PARENT_OBJID = POM.OBJID), 0)
THEN '입고완료'
ELSE '입고중'
END = #{search_delivery_status}
AND (CASE WHEN 0 <![CDATA[ >= ]]> ((SELECT SUM(REAL_ORDER_QTY::NUMERIC) FROM PURCHASE_ORDER_PART AS O WHERE POM.OBJID::VARCHAR = O.PURCHASE_ORDER_MASTER_OBJID) - COALESCE(S1.TOTAL_DELIVERY_QTY, 0)) THEN '입고완료'
WHEN TO_CHAR(NOW(),'YYYY-MM-DD') <![CDATA[ > ]]> POM.DELIVERY_DATE THEN '지연'
ELSE '입고중'
END) = #{search_delivery_status}
</if>
ORDER BY POM.PURCHASE_ORDER_NO DESC
ORDER BY POM.REGDATE DESC
</select>
<!-- 수입검사 상세 정보 조회 -->
@@ -731,13 +780,13 @@
, A.INSPECTION_MEMO
, A.WRITER
, TO_CHAR(A.REG_DATE, 'YYYY-MM-DD') AS REG_DATE
FROM PMS_QUALITY_INCOMING_INSPECTION A
FROM QUALITY_INCOMING_INSPECTION A
WHERE A.OBJID = #{OBJID}
</select>
<!-- 수입검사 등록 -->
<insert id="insertIncomingInspection" parameterType="map">
INSERT INTO PMS_QUALITY_INCOMING_INSPECTION (
INSERT INTO QUALITY_INCOMING_INSPECTION (
OBJID
, PURCHASE_ORDER_MASTER_OBJID
, INSPECTOR_ID
@@ -760,7 +809,7 @@
<!-- 수입검사 수정 -->
<update id="updateIncomingInspection" parameterType="map">
UPDATE PMS_QUALITY_INCOMING_INSPECTION
UPDATE QUALITY_INCOMING_INSPECTION
SET INSPECTOR_ID = #{INSPECTOR_ID}
, INSPECTION_DATE = TO_DATE(#{INSPECTION_DATE}, 'YYYY-MM-DD')
, INSPECTION_RESULT = #{INSPECTION_RESULT}
@@ -798,7 +847,7 @@
LEFT JOIN PARTNER_MNG PM ON POM.PARTNER_OBJID = PM.OBJID
WHERE 1=1
) A
LEFT JOIN PMS_QUALITY_INCOMING_INSPECTION B ON A.OBJID = B.PURCHASE_ORDER_MASTER_OBJID
LEFT JOIN QUALITY_INCOMING_INSPECTION B ON A.OBJID = B.PURCHASE_ORDER_MASTER_OBJID
ORDER BY A.PURCHASE_ORDER_NO DESC
</select>
@@ -1110,4 +1159,116 @@
WHERE ECR.OBJID = #{OBJID}
</select>
<!-- =====================================================
수입검사 상세 그리드 목록 (입고 결과 기준)
===================================================== -->
<!-- 수입검사 상세 그리드 목록 조회 (INVENTORY_MGMT_IN 기반) -->
<select id="getIncomingInspectionDetailList" parameterType="map" resultType="map">
SELECT IMI.OBJID
, IMI.PARENT_OBJID
, IM.PART_OBJID
, PM.PART_NO
, PM.PART_NAME
, COALESCE(IMI.RECEIPT_DATE, TO_CHAR(IMI.REGDATE, 'YYYY-MM-DD')) AS DELIVERY_DATE
, IMI.RECEIPT_QTY AS DELIVERY_QTY
, CASE WHEN EXISTS (
SELECT 1 FROM ATTACH_FILE_INFO DF
WHERE DF.TARGET_OBJID = POM.OBJID::VARCHAR
AND DF.DOC_TYPE = 'INSPECTION_FILE'
) THEN 'Y' ELSE 'N' END AS INSPECTION_FILE
, IID.OBJID AS INSPECTION_DETAIL_OBJID
, IID.INSPECTION_TYPE
, COALESCE(IID.INSPECTION_YN, '검사') AS INSPECTION_YN
, IID.DEFECT_TYPE
, (SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = IID.DEFECT_TYPE) AS DEFECT_TYPE_NAME
, IID.DEFECT_REASON
, (SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = IID.DEFECT_REASON) AS DEFECT_REASON_NAME
, IID.ACTION_STATUS
, IID.INSPECTION_QTY
, IID.DEFECT_QTY
, CASE WHEN NULLIF(IID.INSPECTION_QTY, '')::NUMERIC > 0
THEN ROUND((COALESCE(NULLIF(IID.DEFECT_QTY, '')::NUMERIC, 0) / NULLIF(IID.INSPECTION_QTY, '')::NUMERIC) * 100, 2)
ELSE NULL END AS DEFECT_RATE
, IID.INSPECTION_RESULT
, IID.ATTACH_FILE_OBJID
, (SELECT COUNT(*) FROM ATTACH_FILE_INFO AFI WHERE AFI.TARGET_OBJID = IMI.OBJID AND AFI.DOC_TYPE = 'INCOMING_INSPECTION' AND STATUS = 'Active') AS ATTACH_FILE_CNT
, IID.REMARK
, IMI.PURCHASE_ORDER_MASTER_OBJID
, POM.PURCHASE_ORDER_NO
FROM INVENTORY_MGMT_IN IMI
INNER JOIN INVENTORY_MGMT IM ON IM.OBJID = IMI.PARENT_OBJID
INNER JOIN PART_MNG PM ON PM.OBJID::VARCHAR = IM.PART_OBJID
LEFT JOIN PURCHASE_ORDER_MASTER POM ON POM.OBJID = IMI.PURCHASE_ORDER_MASTER_OBJID
LEFT JOIN INCOMING_INSPECTION_DETAIL IID ON IID.INVENTORY_IN_OBJID = IMI.OBJID
WHERE IMI.PURCHASE_ORDER_MASTER_OBJID = #{PURCHASE_ORDER_MASTER_OBJID}
ORDER BY IMI.REGDATE, PM.PART_NO
</select>
<!-- 수입검사 상세 정보 조회 (발주서 기준 첫번째 검사 정보) -->
<select id="getIncomingInspectionDetailInfo" parameterType="map" resultType="map">
SELECT IID.INSPECTION_DATE
, IID.INSPECTOR_ID
FROM INCOMING_INSPECTION_DETAIL IID
WHERE IID.PURCHASE_ORDER_MASTER_OBJID = #{OBJID}
ORDER BY IID.REG_DATE DESC
LIMIT 1
</select>
<!-- 수입검사 상세 저장 (UPSERT) -->
<update id="saveIncomingInspectionDetail" parameterType="map">
INSERT INTO INCOMING_INSPECTION_DETAIL (
OBJID
, INVENTORY_IN_OBJID
, PURCHASE_ORDER_MASTER_OBJID
, INSPECTION_DATE
, INSPECTOR_ID
, INSPECTION_TYPE
, INSPECTION_YN
, DEFECT_TYPE
, DEFECT_REASON
, ACTION_STATUS
, INSPECTION_QTY
, DEFECT_QTY
, INSPECTION_RESULT
, ATTACH_FILE_OBJID
, REMARK
, WRITER
, REG_DATE
) VALUES (
#{NEW_OBJID}
, #{OBJID}
, #{PURCHASE_ORDER_MASTER_OBJID}
, #{INSPECTION_DATE}
, #{INSPECTOR_ID}
, #{INSPECTION_TYPE}
, #{INSPECTION_YN}
, #{DEFECT_TYPE}
, #{DEFECT_REASON}
, #{ACTION_STATUS}
, #{INSPECTION_QTY}
, #{DEFECT_QTY}
, #{INSPECTION_RESULT}
, #{ATTACH_FILE_OBJID}
, #{REMARK}
, #{WRITER}
, NOW()
)
ON CONFLICT (INVENTORY_IN_OBJID) DO UPDATE SET
INSPECTION_DATE = #{INSPECTION_DATE}
, INSPECTOR_ID = #{INSPECTOR_ID}
, INSPECTION_TYPE = #{INSPECTION_TYPE}
, INSPECTION_YN = #{INSPECTION_YN}
, DEFECT_TYPE = #{DEFECT_TYPE}
, DEFECT_REASON = #{DEFECT_REASON}
, ACTION_STATUS = #{ACTION_STATUS}
, INSPECTION_QTY = #{INSPECTION_QTY}
, DEFECT_QTY = #{DEFECT_QTY}
, INSPECTION_RESULT = #{INSPECTION_RESULT}
, ATTACH_FILE_OBJID = #{ATTACH_FILE_OBJID}
, REMARK = #{REMARK}
, MODIFIER = #{WRITER}
, MOD_DATE = NOW()
</update>
</mapper>

View File

@@ -340,6 +340,7 @@ public class InventoryMngService extends BaseService{
historyMap.put("LOCATION" , CommonUtils.checkNull(paramMap.get("location")));
historyMap.put("SUB_LOCATION" , CommonUtils.checkNull(paramMap.get("sub_location")));
historyMap.put("RECEIPT_QTY" , CommonUtils.checkNull(paramMap.get("qty")));
historyMap.put("RECEIPT_DATE" , CommonUtils.checkNull(paramMap.get("receipt_date")));
historyMap.put("WRITER" , personId);
historyMap.put("CONTRACT_MGMT_OBJID",CommonUtils.checkNull(paramMap.get("project_no")));

View File

@@ -619,6 +619,7 @@ public class PurchaseOrderService {
historyMap.put("SUB_LOCATION" , CommonUtils.checkNull(request.getParameterValues("SUB_LOCATION")[i]));
historyMap.put("WRITER" , paramMap.get("WRITER"));
historyMap.put("RECEIPT_QTY", insertQty);
historyMap.put("RECEIPT_DATE", CommonUtils.checkNull(request.getParameterValues("RECEIPT_DATE")[i]));
historyMap.put("CONTRACT_MGMT_OBJID", CONTRACT_MGMT_OBJID);
historyMap.put("PURCHASE_ORDER_MASTER_OBJID", ORDER_OBJID);
historyMap.put("PURCHASE_ORDER_SUB_OBJID", ORDER_OBJID);
@@ -672,6 +673,7 @@ public class PurchaseOrderService {
historyMap.put("SUB_LOCATION" , CommonUtils.checkNull(request.getParameterValues("SUB_LOCATION")[i]));
historyMap.put("WRITER" , paramMap.get("WRITER"));
historyMap.put("RECEIPT_QTY", insertQty);
historyMap.put("RECEIPT_DATE", CommonUtils.checkNull(request.getParameterValues("RECEIPT_DATE")[i]));
historyMap.put("CONTRACT_MGMT_OBJID", contract_mgmt_objid);
historyMap.put("PURCHASE_ORDER_MASTER_OBJID", CommonUtils.checkNull(paramMap.get("ORDER_OBJID")));
historyMap.put("PURCHASE_ORDER_SUB_OBJID", purchase_order_sub_objid);
@@ -699,6 +701,7 @@ public class PurchaseOrderService {
historyMap.put("WRITER" , paramMap.get("WRITER"));
// Determine the quantity to insert based on remainingReceiptQty and ORDER_QTY
historyMap.put("RECEIPT_QTY", insertQty);
historyMap.put("RECEIPT_DATE", CommonUtils.checkNull(request.getParameterValues("RECEIPT_DATE")[i]));
historyMap.put("CONTRACT_MGMT_OBJID", CONTRACT_MGMT_OBJID);
historyMap.put("PURCHASE_ORDER_MASTER_OBJID", ORDER_OBJID);
historyMap.put("PURCHASE_ORDER_SUB_OBJID", ORDER_OBJID);
@@ -745,6 +748,7 @@ public class PurchaseOrderService {
historyMap.put("WRITER" , paramMap.get("WRITER"));
// Determine the quantity to insert based on remainingReceiptQty and ORDER_QTY
historyMap.put("RECEIPT_QTY", insertQty);
historyMap.put("RECEIPT_DATE", CommonUtils.checkNull(request.getParameterValues("RECEIPT_DATE")[i]));
historyMap.put("CONTRACT_MGMT_OBJID", contract_mgmt_objid);
historyMap.put("PURCHASE_ORDER_MASTER_OBJID", CommonUtils.checkNull(paramMap.get("ORDER_OBJID")));
historyMap.put("PURCHASE_ORDER_SUB_OBJID", purchase_order_sub_objid);
@@ -763,6 +767,7 @@ public class PurchaseOrderService {
historyMap.put("LOCATION" , CommonUtils.checkNull(request.getParameterValues("LOCATION")[i]));
historyMap.put("SUB_LOCATION" , CommonUtils.checkNull(request.getParameterValues("SUB_LOCATION")[i]));
historyMap.put("RECEIPT_QTY" , CommonUtils.checkNull(request.getParameterValues("RECEIPT_QTY")[i],"0"));
historyMap.put("RECEIPT_DATE", CommonUtils.checkNull(request.getParameterValues("RECEIPT_DATE")[i]));
historyMap.put("WRITER" , paramMap.get("WRITER"));
historyMap.put("CONTRACT_MGMT_OBJID",CommonUtils.checkNull(paramMap.get("CONTRACT_MGMT_OBJID")));
historyMap.put("PURCHASE_ORDER_MASTER_OBJID", CommonUtils.checkNull(paramMap.get("ORDER_OBJID")));
@@ -896,6 +901,7 @@ public class PurchaseOrderService {
historyMap.put("SUB_LOCATION" , CommonUtils.checkNull(request.getParameterValues("SUB_LOCATION")[i]));
historyMap.put("WRITER" , paramMap.get("WRITER"));
historyMap.put("RECEIPT_QTY", insertQty);
historyMap.put("RECEIPT_DATE", CommonUtils.checkNull(request.getParameterValues("RECEIPT_DATE")[i]));
historyMap.put("CONTRACT_MGMT_OBJID", CONTRACT_MGMT_OBJID);
historyMap.put("PURCHASE_ORDER_MASTER_OBJID", ORDER_OBJID);
historyMap.put("PURCHASE_ORDER_SUB_OBJID", ORDER_OBJID);
@@ -950,6 +956,7 @@ public class PurchaseOrderService {
historyMap.put("SUB_LOCATION" , CommonUtils.checkNull(request.getParameterValues("SUB_LOCATION")[i]));
historyMap.put("WRITER" , paramMap.get("WRITER"));
historyMap.put("RECEIPT_QTY", insertQty);
historyMap.put("RECEIPT_DATE", CommonUtils.checkNull(request.getParameterValues("RECEIPT_DATE")[i]));
historyMap.put("CONTRACT_MGMT_OBJID", contract_mgmt_objid);
historyMap.put("PURCHASE_ORDER_MASTER_OBJID", CommonUtils.checkNull(paramMap.get("ORDER_OBJID")));
historyMap.put("PURCHASE_ORDER_SUB_OBJID", purchase_order_sub_objid);
@@ -977,6 +984,7 @@ public class PurchaseOrderService {
historyMap.put("WRITER" , paramMap.get("WRITER"));
// Determine the quantity to insert based on remainingReceiptQty and ORDER_QTY
historyMap.put("RECEIPT_QTY", insertQty);
historyMap.put("RECEIPT_DATE", CommonUtils.checkNull(request.getParameterValues("RECEIPT_DATE")[i]));
historyMap.put("CONTRACT_MGMT_OBJID", CONTRACT_MGMT_OBJID);
historyMap.put("PURCHASE_ORDER_MASTER_OBJID", ORDER_OBJID);
historyMap.put("PURCHASE_ORDER_SUB_OBJID", ORDER_OBJID);
@@ -1024,6 +1032,7 @@ public class PurchaseOrderService {
historyMap.put("WRITER" , paramMap.get("WRITER"));
// Determine the quantity to insert based on remainingReceiptQty and ORDER_QTY
historyMap.put("RECEIPT_QTY", insertQty);
historyMap.put("RECEIPT_DATE", CommonUtils.checkNull(request.getParameterValues("RECEIPT_DATE")[i]));
historyMap.put("CONTRACT_MGMT_OBJID", contract_mgmt_objid);
historyMap.put("PURCHASE_ORDER_MASTER_OBJID", CommonUtils.checkNull(paramMap.get("ORDER_OBJID")));
historyMap.put("PURCHASE_ORDER_SUB_OBJID", purchase_order_sub_objid);
@@ -1042,6 +1051,7 @@ public class PurchaseOrderService {
historyMap.put("LOCATION" , CommonUtils.checkNull(request.getParameterValues("LOCATION")[i]));
historyMap.put("SUB_LOCATION" , CommonUtils.checkNull(request.getParameterValues("SUB_LOCATION")[i]));
historyMap.put("RECEIPT_QTY" , CommonUtils.checkNull(request.getParameterValues("RECEIPT_QTY")[i],"0"));
historyMap.put("RECEIPT_DATE", CommonUtils.checkNull(request.getParameterValues("RECEIPT_DATE")[i]));
historyMap.put("WRITER" , paramMap.get("WRITER"));
historyMap.put("CONTRACT_MGMT_OBJID",CommonUtils.checkNull(paramMap.get("CONTRACT_MGMT_OBJID")));
historyMap.put("PURCHASE_ORDER_MASTER_OBJID", CommonUtils.checkNull(paramMap.get("ORDER_OBJID")));
@@ -1196,6 +1206,7 @@ public class PurchaseOrderService {
historyMap.put("LOCATION" , CommonUtils.checkNull(request.getParameterValues("LOCATION")[i]));
historyMap.put("SUB_LOCATION" , CommonUtils.checkNull(request.getParameterValues("SUB_LOCATION")[i]));
historyMap.put("RECEIPT_QTY" , CommonUtils.checkNull(request.getParameterValues("RECEIPT_QTY")[i],"0"));
historyMap.put("RECEIPT_DATE", CommonUtils.checkNull(request.getParameterValues("RECEIPT_DATE")[i]));
sqlSession.insert("inventoryMng.insertInventoryIn",historyMap);
}

View File

@@ -645,7 +645,24 @@ public class QualityService extends BaseService{
}
/**
* 수입검사 저장
* 수입검사 상세 정보 조회 (발주서 기준 첫번째 검사 정보)
*/
public Map getIncomingInspectionDetailInfo(Map paramMap){
Map resultMap = new HashMap();
SqlSession sqlSession = null;
try{
sqlSession = SqlMapConfig.getInstance().getSqlSession();
resultMap = sqlSession.selectOne("quality.getIncomingInspectionDetailInfo", paramMap);
}catch(Exception e){
e.printStackTrace();
}finally{
sqlSession.close();
}
return resultMap;
}
/**
* 수입검사 저장 (그리드 데이터 일괄 저장)
*/
public Map saveIncomingInspection(HttpServletRequest request, Map paramMap){
Map resultMap = new HashMap();
@@ -655,15 +672,38 @@ public class QualityService extends BaseService{
PersonBean person = (PersonBean)request.getSession().getAttribute(Constants.PERSON_BEAN);
String writer = CommonUtils.checkNull(person.getUserId());
paramMap.put("writer", writer);
String objId = CommonUtils.checkNull(paramMap.get("OBJID"));
if("".equals(objId)){
objId = CommonUtils.createObjId();
paramMap.put("OBJID", objId);
sqlSession.insert("quality.insertIncomingInspection", paramMap);
} else {
sqlSession.update("quality.updateIncomingInspection", paramMap);
String inspectionDate = CommonUtils.checkNull(paramMap.get("INSPECTION_DATE"));
String inspectorId = CommonUtils.checkNull(paramMap.get("INSPECTOR_ID"));
String purchaseOrderMasterObjId = CommonUtils.checkNull(paramMap.get("PURCHASE_ORDER_MASTER_OBJID"));
String dataListJson = CommonUtils.checkNull(paramMap.get("dataListJson"));
// JSON 파싱
com.google.gson.Gson gson = new com.google.gson.Gson();
java.lang.reflect.Type listType = new com.google.gson.reflect.TypeToken<List<Map<String, String>>>(){}.getType();
List<Map<String, String>> dataList = gson.fromJson(dataListJson, listType);
// 각 행별로 저장
for(Map<String, String> data : dataList){
Map sqlParamMap = new HashMap();
sqlParamMap.put("NEW_OBJID", CommonUtils.createObjId()); // 신규 OBJID 생성
sqlParamMap.put("OBJID", data.get("OBJID")); // INVENTORY_MGMT_IN.OBJID
sqlParamMap.put("PURCHASE_ORDER_MASTER_OBJID", purchaseOrderMasterObjId);
sqlParamMap.put("INSPECTION_DATE", inspectionDate);
sqlParamMap.put("INSPECTOR_ID", inspectorId);
sqlParamMap.put("INSPECTION_TYPE", data.get("INSPECTION_TYPE"));
sqlParamMap.put("INSPECTION_YN", data.get("INSPECTION_YN"));
sqlParamMap.put("DEFECT_TYPE", data.get("DEFECT_TYPE"));
sqlParamMap.put("DEFECT_REASON", data.get("DEFECT_REASON"));
sqlParamMap.put("ACTION_STATUS", data.get("ACTION_STATUS"));
sqlParamMap.put("INSPECTION_QTY", data.get("INSPECTION_QTY"));
sqlParamMap.put("DEFECT_QTY", data.get("DEFECT_QTY"));
sqlParamMap.put("INSPECTION_RESULT", data.get("INSPECTION_RESULT"));
sqlParamMap.put("ATTACH_FILE_OBJID", data.get("ATTACH_FILE_OBJID"));
sqlParamMap.put("REMARK", data.get("REMARK"));
sqlParamMap.put("WRITER", writer);
sqlSession.update("quality.saveIncomingInspectionDetail", sqlParamMap);
}
sqlSession.commit();