Files
wace_plm/src/com/pms/mapper/quality.xml

1274 lines
49 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="quality">
<!-- //품질검사 중복 count 반환 -->
<select id="getDuplicateQualityTestCnt" parameterType="map" resultType="map">
SELECT COUNT(*) AS CNT
FROM PMS_QUALITY_TEST_INFO
WHERE 1=1
AND CAR_OBJID = #{carObjId}
AND PROD_OBJID = #{prodObjId}
AND TEST_TYPE_OBJID = #{testTypeObjId}
AND STEP1 = #{step1}
AND STEP2 = #{step2}
</select>
<!-- 품질검사 갑지등록 -->
<insert id="insertQualityTestInfo" parameterType="map">
MERGE INTO PMS_QUALITY_TEST_INFO USING DUAL ON (OBJID = #{objId})
WHEN MATCHED THEN
UPDATE SET
CAR_OBJID = #{carObjId}
, PROD_OBJID = #{prodObjId}
, TEST_TYPE_OBJID = #{testTypeObjId}
, STEP1 = #{step1}
, STEP2 = #{step2}
WHEN NOT MATCHED THEN
INSERT (
OBJID
, CAR_OBJID
, PROD_OBJID
, TEST_TYPE_OBJID
, STEP1
, STEP2
, WRITER
, REGDATE
, STATUS
) VALUES (
#{objId}
, #{carObjId}
, #{prodObjId}
, #{testTypeObjId}
, #{step1}
, #{step2}
, #{writer}
, SYSDATE
, 'create'
)
</insert>
<!-- //품질결과 임시목록 -->
<select id="getQualityTestTempList" parameterType="map" resultType="map">
SELECT *
FROM(
SELECT A.*, ROW_NUMBER() OVER (ORDER BY REGDATE_ORG DESC) RNUM
FROM(
SELECT A.*
FROM(
SELECT A.OBJID
, (SELECT OEM_OBJID FROM CAR_MNG WHERE OBJID = A.CAR_OBJID) AS OEM_OBJID
, (SELECT OEM_NAME FROM OEM_MNG WHERE OBJID = (SELECT OEM_OBJID FROM CAR_MNG WHERE OBJID = A.CAR_OBJID)) AS OEM_NAME
, A.CAR_OBJID
, (SELECT CAR_NAME FROM CAR_MNG WHERE OBJID = A.CAR_OBJID) AS CAR_NAME
, (SELECT CAR_CODE FROM CAR_MNG WHERE OBJID = A.CAR_OBJID) AS CAR_CODE
, (SELECT MODEL_CODE FROM CAR_MNG WHERE OBJID = A.CAR_OBJID) AS MODEL_CODE
, (SELECT PRODUCT_GROUP_OBJID FROM PRODUCT_MNG WHERE OBJID = A.PROD_OBJID) AS PROD_GROUP_OBJID
, (SELECT PRODUCT_GROUP_NAME FROM PRODUCT_GROUP_MNG WHERE OBJID = (SELECT PRODUCT_GROUP_OBJID FROM PRODUCT_MNG WHERE OBJID = A.PROD_OBJID)) AS PROD_GROUP_NAME
, A.PROD_OBJID
, (SELECT PRODUCT_NAME FROM PRODUCT_MNG WHERE OBJID = A.PROD_OBJID) AS PROD_NAME
, A.TEST_TYPE_OBJID
, (SELECT TEST_TYPE_NAME FROM TEST_TYPE_MNG WHERE OBJID = A.TEST_TYPE_OBJID) AS TEST_TYPE_NAME
, A.STEP1
, A.STEP2
, A.WRITER
, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = A.WRITER) AS WRITER_DEPT_NAME
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = A.WRITER) AS WRITER_USER_NAME
, A.REGDATE AS REGDATE_ORG
, TO_CHAR(A.REGDATE, 'YYYY-MM-DD') AS REGDATE
, A.STATUS
FROM PMS_QUALITY_TEST_INFO A
WHERE 1=1
AND UPPER(STATUS) = 'CREATE'
)A WHERE 1=1
<if test="search_oem !=null and search_oem !=''">
AND OEM_OBJID = #{search_oem}
</if>
<if test="search_productGroup != null and search_productGroup !=''">
AND PROD_GROUP_OBJID = #{search_productGroup}
</if>
<if test="search_carType != null and search_carType != ''">
AND CAR_OBJID = #{search_carType}
</if>
<if test="search_productType != null and search_productType !=''">
AND PROD_OBJID = #{search_productType}
</if>
<if test="search_writer != null and !''.equals(search_writer)">
AND UPPER(WRITER_USER_NAME) LIKE UPPER('%${search_writer}%')
</if>
<if test="search_status !=null and search_status !='' ">
AND STATUS = #{search_status}
</if>
<if test="search_testType !=null and search_testType !='' ">
AND TEST_TYPE_OBJID = #{search_testType}
</if>
<if test="step1 !=null and step1 !='' ">
AND STEP1 = #{step1}
</if>
<if test="step2 !=null and step2 !='' ">
AND STEP2 = #{step2}
</if>
)A WHERE 1=1
) WHERE 1=1
<if test="PAGE_END != null and PAGE_END !=''">
<![CDATA[ AND RNUM <= #{PAGE_END} ]]>
</if>
<if test="PAGE_START != null and PAGE_STRART!=''">
<![CDATA[ AND RNUM >= #{PAGE_START} ]]>
</if>
</select>
<!-- //품질결과 임시목록 Count -->
<select id="getQualityTestTempListCnt" parameterType="map" resultType="map">
SELECT CEIL(TOTAL_CNT/#{COUNT_PER_PAGE}) MAX_PAGE_SIZE,
TOTAL_CNT
FROM (
SELECT COUNT(1) TOTAL_CNT
FROM(
SELECT A.*
FROM(
SELECT A.OBJID
, (SELECT OEM_OBJID FROM CAR_MNG WHERE OBJID = A.CAR_OBJID) AS OEM_OBJID
, (SELECT OEM_NAME FROM OEM_MNG WHERE OBJID = (SELECT OEM_OBJID FROM CAR_MNG WHERE OBJID = A.CAR_OBJID)) AS OEM_NAME
, A.CAR_OBJID
, (SELECT CAR_NAME FROM CAR_MNG WHERE OBJID = A.CAR_OBJID) AS CAR_NAME
, (SELECT CAR_CODE FROM CAR_MNG WHERE OBJID = A.CAR_OBJID) AS CAR_CODE
, (SELECT MODEL_CODE FROM CAR_MNG WHERE OBJID = A.CAR_OBJID) AS MODEL_CODE
, (SELECT PRODUCT_GROUP_OBJID FROM PRODUCT_MNG WHERE OBJID = A.PROD_OBJID) AS PROD_GROUP_OBJID
, (SELECT PRODUCT_GROUP_NAME FROM PRODUCT_GROUP_MNG WHERE OBJID = (SELECT PRODUCT_GROUP_OBJID FROM PRODUCT_MNG WHERE OBJID = A.PROD_OBJID)) AS PROD_GROUP_NAME
, A.PROD_OBJID
, (SELECT PRODUCT_NAME FROM PRODUCT_MNG WHERE OBJID = A.PROD_OBJID) AS PROD_NAME
, A.TEST_TYPE_OBJID
, (SELECT TEST_TYPE_NAME FROM TEST_TYPE_MNG WHERE OBJID = A.TEST_TYPE_OBJID) AS TEST_TYPE_NAME
, A.STEP1
, A.STEP2
, A.WRITER
, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = A.WRITER) AS WRITER_DEPT_NAME
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = A.WRITER) AS WRITER_USER_NAME
, A.REGDATE AS REGDATE_ORG
, TO_CHAR(A.REGDATE, 'YYYY-MM-DD') AS REGDATE
, A.STATUS
FROM PMS_QUALITY_TEST_INFO A
WHERE 1=1
AND UPPER(STATUS) = 'CREATE'
)A WHERE 1=1
<if test="search_oem !=null and search_oem !=''">
AND OEM_OBJID = #{search_oem}
</if>
<if test="search_productGroup != null and search_productGroup !=''">
AND PROD_GROUP_OBJID = #{search_productGroup}
</if>
<if test="search_carType != null and search_carType != ''">
AND CAR_OBJID = #{search_carType}
</if>
<if test="search_productType != null and search_productType !=''">
AND PROD_OBJID = #{search_productType}
</if>
<if test="search_resDeptName != null and !''.equals(search_resDeptName)">
AND UPPER(RES_PIC_DEPT_NAME) LIKE UPPER('%${search_resDeptName}%')
</if>
<if test="search_status !=null and search_status !='' ">
AND STATUS = #{search_status}
</if>
<if test="search_testType !=null and search_testType !='' ">
AND TEST_TYPE_OBJID = #{search_testType}
</if>
<if test="step1 !=null and step1 !='' ">
AND STEP1 = #{step1}
</if>
<if test="step2 !=null and step2 !='' ">
AND STEP2 = #{step2}
</if>
)A WHERE 1=1
)WHERE 1=1
</select>
<!-- //품질결과 확정목록 -->
<select id="getQualityTestList" parameterType="map" resultType="map">
SELECT *
FROM(
SELECT A.*, ROW_NUMBER() OVER (ORDER BY REGDATE_ORG DESC) RNUM
FROM(
SELECT A.*
FROM(
SELECT A.OBJID
, (SELECT OEM_OBJID FROM CAR_MNG WHERE OBJID = A.CAR_OBJID) AS OEM_OBJID
, (SELECT OEM_NAME FROM OEM_MNG WHERE OBJID = (SELECT OEM_OBJID FROM CAR_MNG WHERE OBJID = A.CAR_OBJID)) AS OEM_NAME
, A.CAR_OBJID
, (SELECT CAR_NAME FROM CAR_MNG WHERE OBJID = A.CAR_OBJID) AS CAR_NAME
, (SELECT CAR_CODE FROM CAR_MNG WHERE OBJID = A.CAR_OBJID) AS CAR_CODE
, (SELECT MODEL_CODE FROM CAR_MNG WHERE OBJID = A.CAR_OBJID) AS MODEL_CODE
, (SELECT PRODUCT_GROUP_OBJID FROM PRODUCT_MNG WHERE OBJID = A.PROD_OBJID) AS PROD_GROUP_OBJID
, (SELECT PRODUCT_GROUP_NAME FROM PRODUCT_GROUP_MNG WHERE OBJID = (SELECT PRODUCT_GROUP_OBJID FROM PRODUCT_MNG WHERE OBJID = A.PROD_OBJID)) AS PROD_GROUP_NAME
, A.PROD_OBJID
, (SELECT PRODUCT_NAME FROM PRODUCT_MNG WHERE OBJID = A.PROD_OBJID) AS PROD_NAME
, A.TEST_TYPE_OBJID
, (SELECT TEST_TYPE_NAME FROM TEST_TYPE_MNG WHERE OBJID = A.TEST_TYPE_OBJID) AS TEST_TYPE_NAME
, A.STEP1
, A.STEP2
, A.WRITER
, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = A.WRITER) AS WRITER_DEPT_NAME
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = A.WRITER) AS WRITER_USER_NAME
, A.REGDATE AS REGDATE_ORG
, TO_CHAR(A.REGDATE, 'YYYY-MM-DD') AS REGDATE
, A.STATUS
, (SELECT COUNT(WBS_TASK.OBJID) AS TASK_CNT FROM PMS_WBS_TASK WBS_TASK,PMS_REL_WBS_TASK_FNC_TASK REL WHERE REL.TARGET_OBJID = WBS_TASK.OBJID AND REL.SUB_OBJID = A.OBJID) AS REL_TASK_CNT
FROM PMS_QUALITY_TEST_INFO A
WHERE 1=1
AND UPPER(STATUS) = 'COMPLETE'
)A WHERE 1=1
<if test="search_oem !=null and search_oem !=''">
AND OEM_OBJID = #{search_oem}
</if>
<if test="search_productGroup != null and search_productGroup !=''">
AND PROD_GROUP_OBJID = #{search_productGroup}
</if>
<if test="search_carType != null and search_carType != ''">
AND CAR_OBJID = #{search_carType}
</if>
<if test="search_productType != null and search_productType !=''">
AND PROD_OBJID = #{search_productType}
</if>
<if test="search_writer != null and !''.equals(search_writer)">
AND UPPER(WRITER_USER_NAME) LIKE UPPER('%${search_writer}%')
</if>
<if test="search_status !=null and search_status !='' ">
AND STATUS = #{search_status}
</if>
<if test="search_testType !=null and search_testType !='' ">
AND TEST_TYPE_OBJID = #{search_testType}
</if>
<if test="step1 !=null and step1 !='' ">
AND STEP1 = #{step1}
</if>
<if test="step2 !=null and step2 !='' ">
AND STEP2 = #{step2}
</if>
<if test="search_fromMonthRegDate != null and search_fromMonthRegDate !='' ">
AND TO_DATE(TO_CHAR(A.REGDATE, 'YYYY-MM'),'YYYY-MM') <![CDATA[ >= ]]> TO_DATE(#{search_fromMonthRegDate},'YYYY-MM')
</if>
<if test="search_toMonthRegDate != null and search_toMonthRegDate !='' ">
AND TO_DATE(TO_CHAR(A.REGDATE, 'YYYY-MM'),'YYYY-MM') <![CDATA[ <= ]]> TO_DATE(#{search_toMonthRegDate},'YYYY-MM')
</if>
)A WHERE 1=1
) WHERE 1=1
<if test="PAGE_END != null and PAGE_END !=''">
<![CDATA[ AND RNUM <= #{PAGE_END} ]]>
</if>
<if test="PAGE_START != null and PAGE_STRART!=''">
<![CDATA[ AND RNUM >= #{PAGE_START} ]]>
</if>
</select>
<!-- //품질결과 확정목록 Count -->
<select id="getQualityTestListCnt" parameterType="map" resultType="map">
SELECT CEIL(TOTAL_CNT/#{COUNT_PER_PAGE}) MAX_PAGE_SIZE,
TOTAL_CNT
FROM (
SELECT COUNT(1) TOTAL_CNT
FROM(
SELECT A.*
FROM(
SELECT A.OBJID
, (SELECT OEM_OBJID FROM CAR_MNG WHERE OBJID = A.CAR_OBJID) AS OEM_OBJID
, (SELECT OEM_NAME FROM OEM_MNG WHERE OBJID = (SELECT OEM_OBJID FROM CAR_MNG WHERE OBJID = A.CAR_OBJID)) AS OEM_NAME
, A.CAR_OBJID
, (SELECT CAR_NAME FROM CAR_MNG WHERE OBJID = A.CAR_OBJID) AS CAR_NAME
, (SELECT CAR_CODE FROM CAR_MNG WHERE OBJID = A.CAR_OBJID) AS CAR_CODE
, (SELECT MODEL_CODE FROM CAR_MNG WHERE OBJID = A.CAR_OBJID) AS MODEL_CODE
, (SELECT PRODUCT_GROUP_OBJID FROM PRODUCT_MNG WHERE OBJID = A.PROD_OBJID) AS PROD_GROUP_OBJID
, (SELECT PRODUCT_GROUP_NAME FROM PRODUCT_GROUP_MNG WHERE OBJID = (SELECT PRODUCT_GROUP_OBJID FROM PRODUCT_MNG WHERE OBJID = A.PROD_OBJID)) AS PROD_GROUP_NAME
, A.PROD_OBJID
, (SELECT PRODUCT_NAME FROM PRODUCT_MNG WHERE OBJID = A.PROD_OBJID) AS PROD_NAME
, A.TEST_TYPE_OBJID
, (SELECT TEST_TYPE_NAME FROM TEST_TYPE_MNG WHERE OBJID = A.TEST_TYPE_OBJID) AS TEST_TYPE_NAME
, A.STEP1
, A.STEP2
, A.WRITER
, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = A.WRITER) AS WRITER_DEPT_NAME
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = A.WRITER) AS WRITER_USER_NAME
, A.REGDATE AS REGDATE_ORG
, TO_CHAR(A.REGDATE, 'YYYY-MM-DD') AS REGDATE
, A.STATUS
FROM PMS_QUALITY_TEST_INFO A
WHERE 1=1
AND UPPER(STATUS) = 'COMPLETE'
)A WHERE 1=1
<if test="search_oem !=null and search_oem !=''">
AND OEM_OBJID = #{search_oem}
</if>
<if test="search_productGroup != null and search_productGroup !=''">
AND PROD_GROUP_OBJID = #{search_productGroup}
</if>
<if test="search_carType != null and search_carType != ''">
AND CAR_OBJID = #{search_carType}
</if>
<if test="search_productType != null and search_productType !=''">
AND PROD_OBJID = #{search_productType}
</if>
<if test="search_writer != null and !''.equals(search_writer)">
AND UPPER(WRITER_USER_NAME) LIKE UPPER('%search_writer%')
</if>
<if test="search_status !=null and search_status !='' ">
AND STATUS = #{search_status}
</if>
<if test="search_testType !=null and search_testType !='' ">
AND TEST_TYPE_OBJID = #{search_testType}
</if>
<if test="step1 !=null and step1 !='' ">
AND STEP1 = #{step1}
</if>
<if test="step2 !=null and step2 !='' ">
AND STEP2 = #{step2}
</if>
<if test="search_fromMonthRegDate != null and search_fromMonthRegDate !='' ">
AND TO_DATE(TO_CHAR(A.REGDATE, 'YYYY-MM'),'YYYY-MM') <![CDATA[ >= ]]> TO_DATE(#{search_fromMonthRegDate},'YYYY-MM')
</if>
<if test="search_toMonthRegDate != null and search_toMonthRegDate !='' ">
AND TO_DATE(TO_CHAR(A.REGDATE, 'YYYY-MM'),'YYYY-MM') <![CDATA[ <= ]]> TO_DATE(#{search_toMonthRegDate},'YYYY-MM')
</if>
)A WHERE 1=1
)WHERE 1=1
</select>
<!-- //품질검사 상세 part목록 -->
<select id="getQualityTestDetailPartList" parameterType="map" resultType="map">
SELECT ROW_NUMBER() OVER(ORDER BY SEQ) AS RNUM
, QUALITY_MASTER.PART_MASTER_OBJID
, QUALITY_MASTER.OEM_OBJID
, QUALITY_MASTER.CAR_OBJID
, QUALITY_MASTER.PROD_GROUP_OBJID
, QUALITY_MASTER.PROD_OBJID
, QUALITY_MASTER.PART_NO
, QUALITY_MASTER.PART_NAME
, QUALITY_MASTER.SEQ
, QUALITY_MASTER.RATE
, QUALITY_MASTER.MOLD_MAKE_COMPANY
, QUALITY_MASTER.PROBLEM_CNT
, QUALITY_MASTER.QUALITY_MASTER_OBJID
, QUALITY_MASTER.TEST_TYPE_OBJID
, QUALITY_MASTER.STEP1
, QUALITY_MASTER.STEP2
, QUALITY_MASTER.STATUS AS QUALITY_MASTER_STATUS
, QUALITY_SLAVE.OBJID AS QUALITY_SLAVE_OBJID
, QUALITY_SLAVE.SCORE
, QUALITY_SLAVE.RESULT
, QUALITY_SLAVE.TYPE1
, QUALITY_SLAVE.TYPE2
FROM (
SELECT PART.PART_MASTER_OBJID
, PART.OEM_OBJID
, PART.CAR_OBJID
, PART.PROD_GROUP_OBJID
, PART.PROD_OBJID
, PART.PART_NO
, PART.PART_NAME
, PART.SEQ
, UPPER(PART.RATE) AS RATE
, MOLD_MAKE_COMPANY
, PART.PROBLEM_CNT
, Q_M.OBJID AS QUALITY_MASTER_OBJID
, Q_M.TEST_TYPE_OBJID
, Q_M.STEP1
, Q_M.STEP2
, Q_M.STATUS
FROM (
SELECT M.OBJID AS PART_MASTER_OBJID
, M.OEM_OBJID
, M.CAR_OBJID
, M.PROD_GROUP_OBJID
, M.PROD_OBJID
, S.PART_NO
, (SELECT PART_NAME FROM PART_INFO WHERE PART_NO = S.PART_NO AND UPPER(STATUS) = 'COMPLETE' AND IS_LAST = 1) AS PART_NAME
, S.SEQ
<!--
, (SELECT RATE FROM (SELECT TARGET_OBJID, RATE, PART_NO FROM PMS_DEV_MASTER_REL_PART_INFO WHERE RATE IS NOT NULL ORDER BY DEV_POINT DESC) A, PMS_DEV_MASTER B WHERE A.TARGET_OBJID = B.OBJID AND B.TARGET_OBJID = M.OBJID AND A.PART_NO = S.PART_NO AND ROWNUM = 1) AS RATE
, (SELECT MOLD_MAKE_COMPANY FROM (SELECT TARGET_OBJID, MOLD_MAKE_COMPANY, PART_NO FROM PMS_DEV_MASTER_REL_PART_INFO WHERE MOLD_MAKE_COMPANY IS NOT NULL ORDER BY DEV_POINT DESC) A, PMS_DEV_MASTER B WHERE A.TARGET_OBJID = B.OBJID AND B.TARGET_OBJID = M.OBJID AND A.PART_NO = S.PART_NO AND ROWNUM = 1) AS MOLD_MAKE_COMPANY
-->
, (SELECT RATE FROM (SELECT B.RATE, B.PART_NO FROM PMS_DEV_MASTER A, PMS_DEV_MASTER_REL_PART_INFO B WHERE A.OBJID = B.TARGET_OBJID AND B.RATE IS NOT NULL ORDER BY DEV_POINT DESC) A WHERE A.PART_NO = S.PART_NO AND ROWNUM = 1) AS RATE
, (SELECT MOLD_MAKE_COMPANY FROM (SELECT B.MOLD_MAKE_COMPANY, B.PART_NO FROM PMS_DEV_MASTER A, PMS_DEV_MASTER_REL_PART_INFO B WHERE A.OBJID = B.TARGET_OBJID AND B.MOLD_MAKE_COMPANY IS NOT NULL ORDER BY DEV_POINT DESC) A WHERE A.PART_NO = S.PART_NO AND ROWNUM = 1) AS MOLD_MAKE_COMPANY
, (SELECT COUNT(*) FROM PMS_PROBLEM_INFO WHERE PART_NO = S.PART_NO AND UNMANAGE_TYPE IS NULL) PROBLEM_CNT
FROM PMS_PART_MASTER M, PMS_PART_MASTER_CONNECT_PART S
WHERE 1=1
AND M.OBJID = S.TARGET_OBJID
AND UPPER(S.IS_DEL) IS NULL
ORDER BY S.SEQ) PART, PMS_QUALITY_TEST_INFO Q_M
WHERE 1=1
AND PART.CAR_OBJID = Q_M.CAR_OBJID
AND PART.PROD_OBJID = Q_M.PROD_OBJID
AND Q_M.OBJID = ${targetObjId}
) QUALITY_MASTER, PMS_QUALITY_TEST_REL_PART_ATTR QUALITY_SLAVE
WHERE 1=1
AND QUALITY_MASTER.QUALITY_MASTER_OBJID = QUALITY_SLAVE.TARGET_OBJID(+)
AND QUALITY_MASTER.PART_NO = QUALITY_SLAVE.PART_NO(+)
</select>
<!-- //품질검사 part별 정보 저장 -->
<update id="saveQualityTestPartInfo" parameterType="map">
MERGE INTO PMS_QUALITY_TEST_REL_PART_ATTR USING DUAL ON (OBJID = #{objId})
WHEN MATCHED THEN
UPDATE SET
SCORE = #{score}
, RESULT = #{result}
, TYPE1 = #{type1}
, TYPE2 = #{type2}
WHEN NOT MATCHED THEN
INSERT (
OBJID
, TARGET_OBJID
, PART_NO
, SCORE
, RESULT
, TYPE1
, TYPE2
, WRITER
, REGDATE
, STATUS
) VALUES (
#{objId}
, #{targetObjId}
, #{partNo}
, #{score}
, #{result}
, #{type1}
, #{type2}
, #{writer}
, SYSDATE
, 'create'
)
</update>
<!-- //품질검사 갑지 확정 -->
<update id="completeQualityTestInfo" parameterType="map">
UPDATE PMS_QUALITY_TEST_INFO SET STATUS = 'complete' WHERE OBJID = #{targetObjId}
</update>
<!-- //품질검사 갑지조회 -->
<select id="getQualityTestInfo" parameterType="map" resultType="map">
SELECT OBJID
, (SELECT OEM_NAME FROM OEM_MNG WHERE OBJID = (SELECT OEM_OBJID FROM CAR_MNG WHERE OBJID = CAR_OBJID)) AS OEM_NAME
, (SELECT OEM_OBJID FROM CAR_MNG WHERE OBJID = CAR_OBJID) AS OEM_OBJID
, CAR_OBJID
, (SELECT CAR_NAME FROM CAR_MNG WHERE OBJID = CAR_OBJID) AS CAR_NAME
, (SELECT CAR_CODE FROM CAR_MNG WHERE OBJID = CAR_OBJID) AS CAR_CODE
, (SELECT PRODUCT_GROUP_NAME FROM PRODUCT_GROUP_MNG WHERE OBJID = (SELECT PRODUCT_GROUP_OBJID FROM PRODUCT_MNG WHERE OBJID = PROD_OBJID)) AS PRODUCT_GROUP_NAME
, (SELECT PRODUCT_GROUP_OBJID FROM PRODUCT_MNG WHERE OBJID = PROD_OBJID) AS PROD_GROUP_OBJID
, PROD_OBJID
, (SELECT PRODUCT_NAME FROM PRODUCT_MNG WHERE OBJID = PROD_OBJID) AS PRODUCT_NAME
, TEST_TYPE_OBJID
, (SELECT TEST_TYPE_NAME FROM TEST_TYPE_MNG WHERE OBJID = TEST_TYPE_OBJID) AS TEST_TYPE_NAME
, STEP1
, DECODE(STEP1, 'design', '설계', 'develop', '개발', 'production', '양산', '') AS STEP1_NAME
, STEP2
, WRITER
, REGDATE
, STATUS
FROM PMS_QUALITY_TEST_INFO
WHERE 1=1
AND OBJID = #{targetObjId}
</select>
<!-- =====================================================
품질관리 기초정보관리
===================================================== -->
<!-- 검사구분 목록 조회 -->
<select id="getInspectionTypeList" parameterType="map" resultType="map">
SELECT OBJID
, INSPECTION_TYPE_NAME
, STATUS
, TO_CHAR(REG_DATE, 'YYYY-MM-DD') AS REG_DATE
FROM PMS_QUALITY_INSPECTION_TYPE
WHERE 1=1
ORDER BY REG_DATE DESC
</select>
<!-- 검사구분 등록 -->
<insert id="insertInspectionType" parameterType="map">
INSERT INTO PMS_QUALITY_INSPECTION_TYPE (
OBJID
, INSPECTION_TYPE_NAME
, STATUS
, WRITER
, REG_DATE
) VALUES (
#{OBJID}
, #{INSPECTION_TYPE_NAME}
, #{STATUS}
, #{writer}
, SYSDATE
)
</insert>
<!-- 검사구분 수정 -->
<update id="updateInspectionType" parameterType="map">
UPDATE PMS_QUALITY_INSPECTION_TYPE
SET INSPECTION_TYPE_NAME = #{INSPECTION_TYPE_NAME}
, STATUS = #{STATUS}
WHERE OBJID = #{OBJID}
</update>
<!-- 검사구분 삭제 -->
<delete id="deleteInspectionType" parameterType="map">
DELETE FROM PMS_QUALITY_INSPECTION_TYPE
WHERE OBJID = #{OBJID}
</delete>
<!-- 불량유형 목록 조회 -->
<select id="getDefectTypeList" parameterType="map" resultType="map">
SELECT OBJID
, DEFECT_TYPE_NAME
, STATUS
, TO_CHAR(REG_DATE, 'YYYY-MM-DD') AS REG_DATE
FROM PMS_QUALITY_DEFECT_TYPE
WHERE 1=1
ORDER BY REG_DATE DESC
</select>
<!-- 불량유형 등록 -->
<insert id="insertDefectType" parameterType="map">
INSERT INTO PMS_QUALITY_DEFECT_TYPE (
OBJID
, DEFECT_TYPE_NAME
, STATUS
, WRITER
, REG_DATE
) VALUES (
#{OBJID}
, #{DEFECT_TYPE_NAME}
, #{STATUS}
, #{writer}
, SYSDATE
)
</insert>
<!-- 불량유형 수정 -->
<update id="updateDefectType" parameterType="map">
UPDATE PMS_QUALITY_DEFECT_TYPE
SET DEFECT_TYPE_NAME = #{DEFECT_TYPE_NAME}
, STATUS = #{STATUS}
WHERE OBJID = #{OBJID}
</update>
<!-- 불량유형 삭제 -->
<delete id="deleteDefectType" parameterType="map">
DELETE FROM PMS_QUALITY_DEFECT_TYPE
WHERE OBJID = #{OBJID}
</delete>
<!-- 불량원인 목록 조회 -->
<select id="getDefectReasonList" parameterType="map" resultType="map">
SELECT A.OBJID
, A.DEFECT_TYPE_OBJID
, B.DEFECT_TYPE_NAME
, A.DEFECT_REASON_NAME
, A.STATUS
, TO_CHAR(A.REG_DATE, 'YYYY-MM-DD') AS REG_DATE
FROM PMS_QUALITY_DEFECT_REASON A
LEFT JOIN PMS_QUALITY_DEFECT_TYPE B ON A.DEFECT_TYPE_OBJID = B.OBJID
WHERE 1=1
<if test="DEFECT_TYPE_OBJID != null and DEFECT_TYPE_OBJID != ''">
AND A.DEFECT_TYPE_OBJID = #{DEFECT_TYPE_OBJID}
</if>
ORDER BY B.DEFECT_TYPE_NAME, A.REG_DATE DESC
</select>
<!-- 불량원인 등록 -->
<insert id="insertDefectReason" parameterType="map">
INSERT INTO PMS_QUALITY_DEFECT_REASON (
OBJID
, DEFECT_TYPE_OBJID
, DEFECT_REASON_NAME
, STATUS
, WRITER
, REG_DATE
) VALUES (
#{OBJID}
, #{DEFECT_TYPE_OBJID}
, #{DEFECT_REASON_NAME}
, #{STATUS}
, #{writer}
, SYSDATE
)
</insert>
<!-- 불량원인 수정 -->
<update id="updateDefectReason" parameterType="map">
UPDATE PMS_QUALITY_DEFECT_REASON
SET DEFECT_REASON_NAME = #{DEFECT_REASON_NAME}
, STATUS = #{STATUS}
WHERE OBJID = #{OBJID}
</update>
<!-- 불량원인 삭제 -->
<delete id="deleteDefectReason" parameterType="map">
DELETE FROM PMS_QUALITY_DEFECT_REASON
WHERE OBJID = #{OBJID}
</delete>
<!-- 불량유형별 불량원인 일괄 삭제 -->
<delete id="deleteDefectReasonByType" parameterType="map">
DELETE FROM PMS_QUALITY_DEFECT_REASON
WHERE DEFECT_TYPE_OBJID = #{OBJID}
</delete>
<!-- =====================================================
수입검사 관리
===================================================== -->
<!-- 품의서 번호 목록 조회 (검색조건용) -->
<select id="getProposalNoList" parameterType="map" resultType="map">
SELECT DISTINCT PROPOSAL_NO
FROM SALES_REQUEST_MASTER
WHERE PROPOSAL_NO IS NOT NULL
ORDER BY PROPOSAL_NO DESC
</select>
<!-- 발주서 번호 목록 조회 (검색조건용) -->
<select id="getPurchaseOrderNoList" parameterType="map" resultType="map">
SELECT DISTINCT PURCHASE_ORDER_NO
FROM PURCHASE_ORDER_MASTER
WHERE PURCHASE_ORDER_NO IS NOT NULL
ORDER BY PURCHASE_ORDER_NO DESC
</select>
<!-- 프로젝트 번호 목록 조회 (검색조건용) -->
<select id="getProjectNoList" parameterType="map" resultType="map">
SELECT DISTINCT PROJECT_NO
FROM CONTRACT_MNG
WHERE PROJECT_NO IS NOT NULL
ORDER BY PROJECT_NO DESC
</select>
<!-- 공급업체 목록 조회 (검색조건용) -->
<select id="getPartnerList" parameterType="map" resultType="map">
SELECT OBJID::VARCHAR, SUPPLY_NAME AS PARTNER_NAME
FROM ADMIN_SUPPLY_MNG
WHERE 1=1
ORDER BY SUPPLY_NAME
</select>
<!-- 검사자 목록 조회 (검색조건용) -->
<select id="getInspectorList" parameterType="map" resultType="map">
SELECT USER_ID, USER_NAME
FROM USER_INFO
WHERE STATUS = 'active'
ORDER BY USER_NAME
</select>
<!-- 수입검사 목록 조회 -->
<select id="getIncomingInspectionList" parameterType="map" resultType="map">
SELECT POM.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.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 (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 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 LIKE '%' || #{search_project_no} || '%'
</if>
<if test="search_part_no != null and 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 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 OBJID::VARCHAR = POM.PARTNER_OBJID)) LIKE UPPER('%' || #{search_partner_name} || '%')
</if>
<if test="search_delivery_status != null and 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.REGDATE DESC
</select>
<!-- 수입검사 상세 정보 조회 -->
<select id="getIncomingInspectionInfo" parameterType="map" resultType="map">
SELECT A.OBJID
, A.PURCHASE_ORDER_MASTER_OBJID
, A.INSPECTOR_ID
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = A.INSPECTOR_ID) AS INSPECTOR_NAME
, TO_CHAR(A.INSPECTION_DATE, 'YYYY-MM-DD') AS INSPECTION_DATE
, A.INSPECTION_RESULT
, A.INSPECTION_MEMO
, A.WRITER
, TO_CHAR(A.REG_DATE, 'YYYY-MM-DD') AS REG_DATE
FROM QUALITY_INCOMING_INSPECTION A
WHERE A.OBJID = #{OBJID}
</select>
<!-- 수입검사 등록 -->
<insert id="insertIncomingInspection" parameterType="map">
INSERT INTO QUALITY_INCOMING_INSPECTION (
OBJID
, PURCHASE_ORDER_MASTER_OBJID
, INSPECTOR_ID
, INSPECTION_DATE
, INSPECTION_RESULT
, INSPECTION_MEMO
, WRITER
, REG_DATE
) VALUES (
#{OBJID}
, #{PURCHASE_ORDER_MASTER_OBJID}
, #{INSPECTOR_ID}
, TO_DATE(#{INSPECTION_DATE}, 'YYYY-MM-DD')
, #{INSPECTION_RESULT}
, #{INSPECTION_MEMO}
, #{writer}
, SYSDATE
)
</insert>
<!-- 수입검사 수정 -->
<update id="updateIncomingInspection" parameterType="map">
UPDATE QUALITY_INCOMING_INSPECTION
SET INSPECTOR_ID = #{INSPECTOR_ID}
, INSPECTION_DATE = TO_DATE(#{INSPECTION_DATE}, 'YYYY-MM-DD')
, INSPECTION_RESULT = #{INSPECTION_RESULT}
, INSPECTION_MEMO = #{INSPECTION_MEMO}
WHERE OBJID = #{OBJID}
</update>
<!-- 수입검사 목록 조회 (엑셀용) -->
<select id="getIncomingInspectionListForExcel" parameterType="map" resultType="map">
SELECT A.OBJID
, A.PROPOSAL_NO
, A.PURCHASE_ORDER_NO
, A.PROJECT_NO
, A.PART_NO
, A.PART_NAME
, A.PARTNER_NAME
, A.DELIVERY_STATUS
, B.INSPECTOR_ID
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = B.INSPECTOR_ID) AS INSPECTOR_NAME
, TO_CHAR(B.INSPECTION_DATE, 'YYYY-MM-DD') AS INSPECTION_DATE
, B.INSPECTION_RESULT
FROM (
SELECT POM.OBJID
, SRM.PROPOSAL_NO
, POM.PURCHASE_ORDER_NO
, PJ.PROJECT_NO
, POD.PART_NO
, POD.PART_NAME
, PM.PARTNER_NAME
, CASE WHEN NVL(POD.DELIVERY_QTY, 0) >= NVL(POD.ORDER_QTY, 0) THEN '입고완료' ELSE '입고중' END AS DELIVERY_STATUS
FROM PMS_PURCHASE_ORDER_MASTER POM
LEFT JOIN PMS_PURCHASE_ORDER_DETAIL POD ON POM.OBJID = POD.PURCHASE_ORDER_MASTER_OBJID
LEFT JOIN PMS_SALES_REQUEST_MASTER SRM ON POM.SALES_REQUEST_MASTER_OBJID = SRM.OBJID
LEFT JOIN PMS_PROJECT_INFO PJ ON POM.PROJECT_OBJID = PJ.OBJID
LEFT JOIN PARTNER_MNG PM ON POM.PARTNER_OBJID = PM.OBJID
WHERE 1=1
) A
LEFT JOIN QUALITY_INCOMING_INSPECTION B ON A.OBJID = B.PURCHASE_ORDER_MASTER_OBJID
ORDER BY A.PURCHASE_ORDER_NO DESC
</select>
<!-- =====================================================
공정검사 관리
===================================================== -->
<!-- 공정검사 목록 조회 -->
<select id="getProcessInspectionList" parameterType="map" resultType="map">
SELECT PPI.OBJID
, TO_CHAR(PPI.INSPECTION_DATE, 'YYYY-MM-DD') AS INSPECTION_DATE
, PPI.PROJECT_NO
, PPI.PART_NO
, PPI.PART_NAME
, PPI.DEFECT_QTY
, PPI.WORK_ENV_STATUS
, PPI.MEASURING_DEVICE
, PPI.INSPECTOR_ID
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = PPI.INSPECTOR_ID) AS INSPECTOR_NAME
, PPI.INSPECTION_RESULT
FROM PMS_QUALITY_PROCESS_INSPECTION PPI
WHERE 1=1
<if test="search_project_no != null and search_project_no != ''">
AND UPPER(PPI.PROJECT_NO) LIKE UPPER('%' || #{search_project_no} || '%')
</if>
<if test="search_part_no != null and search_part_no != ''">
AND UPPER(PPI.PART_NO) LIKE UPPER('%' || #{search_part_no} || '%')
</if>
<if test="search_part_name != null and search_part_name != ''">
AND UPPER(PPI.PART_NAME) LIKE UPPER('%' || #{search_part_name} || '%')
</if>
<if test="search_work_env_status != null and search_work_env_status != ''">
AND UPPER(PPI.WORK_ENV_STATUS) LIKE UPPER('%' || #{search_work_env_status} || '%')
</if>
<if test="search_measuring_device != null and search_measuring_device != ''">
AND UPPER(PPI.MEASURING_DEVICE) LIKE UPPER('%' || #{search_measuring_device} || '%')
</if>
<if test="search_inspector != null and search_inspector != ''">
AND (
UPPER(PPI.INSPECTOR_ID) LIKE UPPER('%' || #{search_inspector} || '%')
OR UPPER((SELECT USER_NAME FROM USER_INFO WHERE USER_ID = PPI.INSPECTOR_ID)) LIKE UPPER('%' || #{search_inspector} || '%')
)
</if>
<if test="search_inspection_date_from != null and search_inspection_date_from != ''">
AND PPI.INSPECTION_DATE >= TO_DATE(#{search_inspection_date_from}, 'YYYY-MM-DD')
</if>
<if test="search_inspection_date_to != null and search_inspection_date_to != ''">
AND PPI.INSPECTION_DATE <![CDATA[<=]]> TO_DATE(#{search_inspection_date_to}, 'YYYY-MM-DD')
</if>
<if test="search_inspection_result != null and search_inspection_result != ''">
AND PPI.INSPECTION_RESULT = #{search_inspection_result}
</if>
ORDER BY PPI.INSPECTION_DATE DESC, PPI.REG_DATE DESC
</select>
<!-- 공정검사 상세 조회 -->
<select id="getProcessInspectionInfo" parameterType="map" resultType="map">
SELECT PPI.OBJID
, TO_CHAR(PPI.INSPECTION_DATE, 'YYYY-MM-DD') AS INSPECTION_DATE
, PPI.PROJECT_NO
, PPI.PART_NO
, PPI.PART_NAME
, PPI.DEFECT_QTY
, PPI.WORK_ENV_STATUS
, PPI.MEASURING_DEVICE
, PPI.INSPECTOR_ID
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = PPI.INSPECTOR_ID) AS INSPECTOR_NAME
, PPI.INSPECTION_RESULT
, PPI.REMARK
, PPI.WRITER
, TO_CHAR(PPI.REG_DATE, 'YYYY-MM-DD') AS REG_DATE
FROM PMS_QUALITY_PROCESS_INSPECTION PPI
WHERE PPI.OBJID = #{OBJID}
</select>
<!-- =====================================================
반제품검사 관리
===================================================== -->
<!-- 반제품검사 목록 조회 -->
<select id="getSemiProductInspectionList" parameterType="map" resultType="map">
SELECT SPI.OBJID
, SPI.PROJECT_NO
, SPI.WORK_ORDER_NO
, SPI.PART_NO
, SPI.PART_NAME
, SPI.RECEIPT_QTY
, SPI.DISPOSITION_TYPE
FROM PMS_QUALITY_SEMI_PRODUCT_INSPECTION SPI
WHERE 1=1
ORDER BY SPI.REG_DATE DESC
</select>
<!-- 반제품검사 상세 조회 -->
<select id="getSemiProductInspectionInfo" parameterType="map" resultType="map">
SELECT SPI.OBJID
, SPI.PROJECT_NO
, SPI.WORK_ORDER_NO
, SPI.PART_NO
, SPI.PART_NAME
, SPI.RECEIPT_QTY
, SPI.DISPOSITION_TYPE
, SPI.REMARK
, SPI.WRITER
, TO_CHAR(SPI.REG_DATE, 'YYYY-MM-DD') AS REG_DATE
FROM PMS_QUALITY_SEMI_PRODUCT_INSPECTION SPI
WHERE SPI.OBJID = #{OBJID}
</select>
<!-- =====================================================
고객 CS 관리
===================================================== -->
<!-- 고객 CS 목록 조회 -->
<select id="getCustomerCsList" parameterType="map" resultType="map">
SELECT CCS.OBJID
, CCS.RECEIPT_NO
, TO_CHAR(CCS.RECEIPT_DATE, 'YYYY-MM-DD') AS RECEIPT_DATE
, CCS.QTY
, CCS.CUSTOMER_NAME
, CCS.MODEL_NAME
, CCS.PRODUCT_NAME
, CCS.PART_NO
, TO_CHAR(CCS.PRODUCTION_DATE, 'YYYY-MM-DD') AS PRODUCTION_DATE
, TO_CHAR(CCS.SALES_DATE, 'YYYY-MM-DD') AS SALES_DATE
, CCS.SERIAL_NO
, CCS.MANUFACTURER
, CCS.COMPLAINT_CONTENT
, CCS.ACTION_CONTENT
, CCS.BLAME_DECISION
, CCS.STATUS
, CCS.REMARK
, TO_CHAR(CCS.ACTION_DATE, 'YYYY-MM-DD') AS ACTION_DATE
, CCS.ACTION_USER_ID
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = CCS.ACTION_USER_ID) AS ACTION_USER_NAME
, CASE WHEN CCS.ATTACH_FILE_OBJID IS NOT NULL THEN 'Y' ELSE 'N' END AS ATTACH_FILE
FROM PMS_QUALITY_CUSTOMER_CS CCS
WHERE 1=1
<if test="search_receipt_date_from != null and search_receipt_date_from != ''">
AND CCS.RECEIPT_DATE >= TO_DATE(#{search_receipt_date_from}, 'YYYY-MM-DD')
</if>
<if test="search_receipt_date_to != null and search_receipt_date_to != ''">
AND CCS.RECEIPT_DATE <![CDATA[<=]]> TO_DATE(#{search_receipt_date_to}, 'YYYY-MM-DD')
</if>
<if test="search_customer_name != null and search_customer_name != ''">
AND UPPER(CCS.CUSTOMER_NAME) LIKE UPPER('%' || #{search_customer_name} || '%')
</if>
<if test="search_model_name != null and search_model_name != ''">
AND UPPER(CCS.MODEL_NAME) LIKE UPPER('%' || #{search_model_name} || '%')
</if>
<if test="search_product_name != null and search_product_name != ''">
AND UPPER(CCS.PRODUCT_NAME) LIKE UPPER('%' || #{search_product_name} || '%')
</if>
<if test="search_part_no != null and search_part_no != ''">
AND UPPER(CCS.PART_NO) LIKE UPPER('%' || #{search_part_no} || '%')
</if>
<if test="search_serial_no != null and search_serial_no != ''">
AND UPPER(CCS.SERIAL_NO) LIKE UPPER('%' || #{search_serial_no} || '%')
</if>
<if test="search_manufacturer != null and search_manufacturer != ''">
AND UPPER(CCS.MANUFACTURER) LIKE UPPER('%' || #{search_manufacturer} || '%')
</if>
<if test="search_blame_decision != null and search_blame_decision != ''">
AND CCS.BLAME_DECISION = #{search_blame_decision}
</if>
<if test="search_status != null and search_status != ''">
AND CCS.STATUS = #{search_status}
</if>
<if test="search_action_date_from != null and search_action_date_from != ''">
AND CCS.ACTION_DATE >= TO_DATE(#{search_action_date_from}, 'YYYY-MM-DD')
</if>
<if test="search_action_date_to != null and search_action_date_to != ''">
AND CCS.ACTION_DATE <![CDATA[<=]]> TO_DATE(#{search_action_date_to}, 'YYYY-MM-DD')
</if>
<if test="search_action_user != null and search_action_user != ''">
AND (
UPPER(CCS.ACTION_USER_ID) LIKE UPPER('%' || #{search_action_user} || '%')
OR UPPER((SELECT USER_NAME FROM USER_INFO WHERE USER_ID = CCS.ACTION_USER_ID)) LIKE UPPER('%' || #{search_action_user} || '%')
)
</if>
ORDER BY CCS.RECEIPT_DATE DESC, CCS.REG_DATE DESC
</select>
<!-- 고객 CS 상세 조회 -->
<select id="getCustomerCsInfo" parameterType="map" resultType="map">
SELECT CCS.OBJID
, CCS.RECEIPT_NO
, TO_CHAR(CCS.RECEIPT_DATE, 'YYYY-MM-DD') AS RECEIPT_DATE
, CCS.QTY
, CCS.CUSTOMER_NAME
, CCS.MODEL_NAME
, CCS.PRODUCT_NAME
, CCS.PART_NO
, TO_CHAR(CCS.PRODUCTION_DATE, 'YYYY-MM-DD') AS PRODUCTION_DATE
, TO_CHAR(CCS.SALES_DATE, 'YYYY-MM-DD') AS SALES_DATE
, CCS.SERIAL_NO
, CCS.MANUFACTURER
, CCS.COMPLAINT_CONTENT
, CCS.ACTION_CONTENT
, CCS.BLAME_DECISION
, CCS.STATUS
, CCS.REMARK
, TO_CHAR(CCS.ACTION_DATE, 'YYYY-MM-DD') AS ACTION_DATE
, CCS.ACTION_USER_ID
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = CCS.ACTION_USER_ID) AS ACTION_USER_NAME
, CCS.ATTACH_FILE_OBJID
, CCS.WRITER
, TO_CHAR(CCS.REG_DATE, 'YYYY-MM-DD') AS REG_DATE
FROM PMS_QUALITY_CUSTOMER_CS CCS
WHERE CCS.OBJID = #{OBJID}
</select>
<!-- =====================================================
ECR 관리
===================================================== -->
<!-- ECR 목록 조회 -->
<select id="getEcrList" parameterType="map" resultType="map">
SELECT ECR.OBJID
, ECR.ECR_NO
, TO_CHAR(ECR.REQUEST_DATE, 'YYYY-MM-DD') AS REQUEST_DATE
, ECR.REQUESTER_ID
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = ECR.REQUESTER_ID) AS REQUESTER_NAME
, ECR.PART_NO
, ECR.PART_NAME
, ECR.ISSUE_CONTENT
, TO_CHAR(ECR.DUE_DATE, 'YYYY-MM-DD') AS DUE_DATE
, ECR.ACTION_DEPT
, ECR.ACTION_MANAGER_ID
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = ECR.ACTION_MANAGER_ID) AS ACTION_MANAGER_NAME
, ECR.ACTION_USER_ID
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = ECR.ACTION_USER_ID) AS ACTION_USER_NAME
, ECR.ACTION_CONTENT
, TO_CHAR(ECR.COMPLETE_DATE, 'YYYY-MM-DD') AS COMPLETE_DATE
, CASE WHEN ECR.ATTACH_FILE_OBJID IS NOT NULL THEN 'Y' ELSE 'N' END AS ATTACH_FILE
FROM PMS_QUALITY_ECR ECR
WHERE 1=1
<if test="search_request_date_from != null and search_request_date_from != ''">
AND ECR.REQUEST_DATE >= TO_DATE(#{search_request_date_from}, 'YYYY-MM-DD')
</if>
<if test="search_request_date_to != null and search_request_date_to != ''">
AND ECR.REQUEST_DATE <![CDATA[<=]]> TO_DATE(#{search_request_date_to}, 'YYYY-MM-DD')
</if>
<if test="search_requester != null and search_requester != ''">
AND (
UPPER(ECR.REQUESTER_ID) LIKE UPPER('%' || #{search_requester} || '%')
OR UPPER((SELECT USER_NAME FROM USER_INFO WHERE USER_ID = ECR.REQUESTER_ID)) LIKE UPPER('%' || #{search_requester} || '%')
)
</if>
<if test="search_part_no != null and search_part_no != ''">
AND UPPER(ECR.PART_NO) LIKE UPPER('%' || #{search_part_no} || '%')
</if>
<if test="search_part_name != null and search_part_name != ''">
AND UPPER(ECR.PART_NAME) LIKE UPPER('%' || #{search_part_name} || '%')
</if>
<if test="search_due_date_from != null and search_due_date_from != ''">
AND ECR.DUE_DATE >= TO_DATE(#{search_due_date_from}, 'YYYY-MM-DD')
</if>
<if test="search_due_date_to != null and search_due_date_to != ''">
AND ECR.DUE_DATE <![CDATA[<=]]> TO_DATE(#{search_due_date_to}, 'YYYY-MM-DD')
</if>
<if test="search_action_dept != null and search_action_dept != ''">
AND UPPER(ECR.ACTION_DEPT) LIKE UPPER('%' || #{search_action_dept} || '%')
</if>
<if test="search_action_manager != null and search_action_manager != ''">
AND (
UPPER(ECR.ACTION_MANAGER_ID) LIKE UPPER('%' || #{search_action_manager} || '%')
OR UPPER((SELECT USER_NAME FROM USER_INFO WHERE USER_ID = ECR.ACTION_MANAGER_ID)) LIKE UPPER('%' || #{search_action_manager} || '%')
)
</if>
<if test="search_action_user != null and search_action_user != ''">
AND (
UPPER(ECR.ACTION_USER_ID) LIKE UPPER('%' || #{search_action_user} || '%')
OR UPPER((SELECT USER_NAME FROM USER_INFO WHERE USER_ID = ECR.ACTION_USER_ID)) LIKE UPPER('%' || #{search_action_user} || '%')
)
</if>
<if test="search_complete_date_from != null and search_complete_date_from != ''">
AND ECR.COMPLETE_DATE >= TO_DATE(#{search_complete_date_from}, 'YYYY-MM-DD')
</if>
<if test="search_complete_date_to != null and search_complete_date_to != ''">
AND ECR.COMPLETE_DATE <![CDATA[<=]]> TO_DATE(#{search_complete_date_to}, 'YYYY-MM-DD')
</if>
ORDER BY ECR.REQUEST_DATE DESC, ECR.REG_DATE DESC
</select>
<!-- ECR 상세 조회 -->
<select id="getEcrInfo" parameterType="map" resultType="map">
SELECT ECR.OBJID
, ECR.ECR_NO
, TO_CHAR(ECR.REQUEST_DATE, 'YYYY-MM-DD') AS REQUEST_DATE
, ECR.REQUESTER_ID
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = ECR.REQUESTER_ID) AS REQUESTER_NAME
, ECR.PART_NO
, ECR.PART_NAME
, ECR.ISSUE_CONTENT
, TO_CHAR(ECR.DUE_DATE, 'YYYY-MM-DD') AS DUE_DATE
, ECR.ACTION_DEPT
, ECR.ACTION_MANAGER_ID
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = ECR.ACTION_MANAGER_ID) AS ACTION_MANAGER_NAME
, ECR.ACTION_USER_ID
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = ECR.ACTION_USER_ID) AS ACTION_USER_NAME
, ECR.ACTION_CONTENT
, TO_CHAR(ECR.COMPLETE_DATE, 'YYYY-MM-DD') AS COMPLETE_DATE
, ECR.ATTACH_FILE_OBJID
, ECR.REMARK
, ECR.WRITER
, TO_CHAR(ECR.REG_DATE, 'YYYY-MM-DD') AS REG_DATE
FROM PMS_QUALITY_ECR ECR
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>