4299 lines
147 KiB
XML
4299 lines
147 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="productionplanning">
|
|
|
|
<!-- 생산관리 -> 현황 -->
|
|
<select id="planningdashboardGridList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
(SELECT COUNT(1) FROM PLANNING_ISSUE AS O WHERE O.PROJECT_OBJID = T.OBJID AND O.status='release' ) AS ISSUE_CNT
|
|
,(SELECT COUNT(1) FROM PLANNING_ISSUE AS O WHERE O.PROJECT_OBJID = T.OBJID AND O.status='release'
|
|
AND O.DESIGN_RESULT !='' AND O.DESIGN_DATE !='') AS COMP_CNT
|
|
,(SELECT COUNT(1) FROM PLANNING_ISSUE AS O WHERE O.PROJECT_OBJID = T.OBJID AND O.status='release' ) - (SELECT COUNT(1) FROM PLANNING_ISSUE AS O WHERE O.PROJECT_OBJID = T.OBJID AND O.status='release'
|
|
AND O.DESIGN_RESULT !='' AND O.DESIGN_DATE !='') AS MISS_CNT
|
|
,CASE WHEN (SELECT COUNT(1) FROM PLANNING_ISSUE AS O WHERE O.PROJECT_OBJID = T.OBJID AND O.status='release' ) = 0
|
|
THEN 0
|
|
ELSE ROUND(((SELECT COUNT(1) FROM PLANNING_ISSUE AS O WHERE O.PROJECT_OBJID = T.OBJID AND O.status='release'
|
|
AND O.DESIGN_RESULT !='' AND O.DESIGN_DATE !='')::float / (SELECT COUNT(1) FROM PLANNING_ISSUE AS O WHERE O.PROJECT_OBJID = T.OBJID AND O.status='release' )::FLOAT * 100)::numeric, 1)
|
|
END AS issue_rate
|
|
,CASE WHEN (SELECT COUNT(1) FROM SETUP_WBS_TASK AS O WHERE O.CONTRACT_OBJID = T.OBJID AND (PARENT_OBJID IS NOT NULL AND PARENT_OBJID != '')) = '0' then '0'
|
|
ELSE ROUND((((SELECT COUNT(1) FROM SETUP_WBS_TASK AS O WHERE O.CONTRACT_OBJID = T.OBJID and (O.SETUP_ACT_END !='' AND O.SETUP_ACT_END IS not null) AND (PARENT_OBJID IS NOT NULL AND PARENT_OBJID != ''))::FLOAT
|
|
/ (SELECT COUNT(1) FROM SETUP_WBS_TASK AS O WHERE O.CONTRACT_OBJID = T.OBJID AND (PARENT_OBJID IS NOT NULL AND PARENT_OBJID != ''))) * 100)::integer, 1)
|
|
END SETUP_RATE
|
|
,(SELECT MAX(SETUP_ACT_END) FROM SETUP_WBS_TASK AS O WHERE O.CONTRACT_OBJID = T.OBJID AND (PARENT_OBJID IS NOT NULL OR PARENT_OBJID != '')) AS SETUP_ACT_END
|
|
<!-- ,(SELECT coalesce(SUM(COALESCE(EMPLOYEES_IN,'0')::integer+COALESCE(EMPLOYEES_OUT,'0')::integer),'0') FROM SETUP_WBS_TASK AS O WHERE O.CONTRACT_OBJID = T.OBJID AND (PARENT_OBJID IS NOT NULL OR PARENT_OBJID != '')) AS EMPLOYEES_TOTAL -->
|
|
,Q.ASSEMBLY_DATE_END
|
|
<!-- ,Q.ASSEMBLY_EMPLOYEES_TOTAL
|
|
,R.ASSEMBLY_RATE
|
|
-->
|
|
,ROUND((AS_RATE_SUM / (SELECT COUNT(1) FROM PMS_WBS_TASK W WHERE W.CONTRACT_OBJID = T.OBJID) ),1) AS ASSEMBLY_RATE
|
|
,OBJID
|
|
,CATEGORY_CD
|
|
,CODE_NAME(CATEGORY_CD) AS CATEGORY_NAME
|
|
,CUSTOMER_OBJID
|
|
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID = T.CUSTOMER_OBJID::NUMERIC) AS CUSTOMER_NAME
|
|
,PRODUCT
|
|
,CODE_NAME(PRODUCT) AS PRODUCT_NAME
|
|
,(SELECT O.CUSTOMER_PROJECT_NAME FROM CONTRACT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS CUSTOMER_PROJECT_NAME
|
|
,STATUS_CD
|
|
,CODE_NAME(STATUS_CD) AS STATUS_NAME
|
|
,DUE_DATE
|
|
,LOCATION
|
|
,SETUP
|
|
,FACILITY
|
|
,CODE_NAME(FACILITY) AS FACILITY_NAME
|
|
,FACILITY_QTY
|
|
,FACILITY_TYPE
|
|
,FACILITY_DEPTH
|
|
,PRODUCTION_NO
|
|
,BUS_CAL_CD
|
|
,CODE_NAME(BUS_CAL_CD) AS BUS_CAL_NAME
|
|
,CATEGORY1_CD
|
|
,CODE_NAME(CATEGORY1_CD) AS CATEGORY1_NAME
|
|
,CHG_USER_ID
|
|
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = T.CHG_USER_ID ) AS CHG_USER_NAME
|
|
,PLAN_DATE
|
|
,COMPLETE_DATE
|
|
,RESULT_CD
|
|
,CODE_NAME(RESULT_CD) AS RESULT_NAME
|
|
,PROJECT_NO
|
|
,PM_USER_ID
|
|
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = (SELECT O.PM_USER_ID FROM CONTRACT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID)) AS PM_USER_NAME
|
|
,CONTRACT_PRICE
|
|
,CONTRACT_PRICE_CURRENCY
|
|
,CONTRACT_CURRENCY
|
|
,CODE_NAME(CONTRACT_CURRENCY) AS CONTRACT_CURRENCY_NAME
|
|
,REGDATE
|
|
,TO_CHAR(REGDATE,'YYYY-MM-DD') AS REG_DATE
|
|
,WRITER
|
|
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = T.WRITER ) AS WRITER_NAME
|
|
,CONTRACT_NO
|
|
,CUSTOMER_EQUIP_NAME
|
|
,REQ_DEL_DATE
|
|
,CONTRACT_DEL_DATE
|
|
,CONTRACT_COMPANY
|
|
,CODE_NAME(CONTRACT_COMPANY) AS CONTRACT_COMPANY_NAME
|
|
,CONTRACT_DATE
|
|
,PO_NO
|
|
,MANUFACTURE_PLANT
|
|
,CODE_NAME(MANUFACTURE_PLANT) AS MANUFACTURE_PLANT_NAME
|
|
,CONTRACT_RESULT
|
|
,CODE_NAME(CONTRACT_RESULT) AS CONTRACT_RESULT_NAME
|
|
,CODE_NAME(AREA_CD) AS AREA_NAME
|
|
,PROJECT_NAME
|
|
,MECHANICAL_TYPE
|
|
,coalesce(P.WORK_HOUR , '0') as PRODUCTION_INPUT /*조립생산*/
|
|
,coalesce(O.WORK_HOUR , '0') as OUTSOURCING /*조립외주*/
|
|
,coalesce(P.WORK_HOUR , '0')::numeric + coalesce(O.WORK_HOUR , '0')::numeric as ASSEMBLY_EMPLOYEES_TOTAL
|
|
,coalesce(SP.WORK_HOUR , '0') as S_PRODUCTION_INPUT /*셋업생산*/
|
|
,coalesce(SO.WORK_HOUR , '0') as S_OUTSOURCING /*셋업외주*/
|
|
,coalesce(SP.WORK_HOUR , '0')::numeric + coalesce(SO.WORK_HOUR , '0')::numeric as EMPLOYEES_TOTAL
|
|
FROM
|
|
PROJECT_MGMT AS T
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
P.CONTRACT_OBJID,
|
|
MAX(ASSEMBLY_DATE) as ASSEMBLY_DATE_END
|
|
<!-- SUM(CASE WHEN INSOURCING='' AND INSOURCING IS NOT NULL THEN '0' ELSE INSOURCING END ::INTEGER)+SUM(CASE WHEN OUTSOURCING='' AND OUTSOURCING IS NOT NULL THEN '0' ELSE OUTSOURCING END ::INTEGER) as ASSEMBLY_EMPLOYEES_TOTAL -->
|
|
FROM
|
|
(SELECT
|
|
A.* ,
|
|
T.CONTRACT_OBJID
|
|
FROM
|
|
ASSEMBLY_WBS_TASK A
|
|
LEFT OUTER JOIN PART_BOM_REPORT T
|
|
ON A.PARENT_OBJID = T.OBJID) AS P
|
|
GROUP BY CONTRACT_OBJID) Q
|
|
ON Q.CONTRACT_OBJID = T.OBJID
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID,
|
|
SUM(AS_RATE) AS_RATE_SUM
|
|
FROM
|
|
(SELECT
|
|
OBJID
|
|
,CONTRACT_OBJID
|
|
,CASE WHEN (SELECT COUNT(*) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR where BP.BOM_REPORT_OBJID = T.OBJID and PM.part_type is not null and PM.part_type != '') = 0 THEN 0
|
|
ELSE ROUND((((SELECT count(1) FROM ASSEMBLY_WBS_TASK AS A WHERE A.PARENT_OBJID = T.OBJID AND assembly_user_id IS NOT NULL AND assembly_user_id !='' AND assembly_date IS NOT NULL AND assembly_date!=''
|
|
)::numeric / (SELECT COUNT(*) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR where BP.BOM_REPORT_OBJID = T.OBJID and PM.part_type is not null and PM.part_type != '')) * 100), 1)
|
|
END AS AS_RATE
|
|
<!--, CASE WHEN (SELECT SUM(CASE WHEN RECEIVE_QTY='' AND RECEIVE_QTY IS NOT NULL THEN '0' ELSE RECEIVE_QTY END ::INTEGER) FROM ASSEMBLY_WBS_TASK AS A WHERE A.PARENT_OBJID = T.OBJID) = 0
|
|
THEN 0
|
|
ELSE
|
|
ROUND(((SELECT SUM(CASE WHEN RECEIVE_QTY='' AND RECEIVE_QTY IS NOT NULL THEN '0' ELSE RECEIVE_QTY END ::INTEGER) FROM ASSEMBLY_WBS_TASK AS A WHERE A.PARENT_OBJID = T.OBJID
|
|
AND ASSEMBLY_USER_ID IS NOT NULL AND ASSEMBLY_USER_ID !='' AND ASSEMBLY_DATE IS NOT NULL AND ASSEMBLY_DATE!='' AND (INSOURCING IS NOT NULL OR INSOURCING!='')
|
|
AND (OUTSOURCING IS NOT NULL OR OUTSOURCING!='')
|
|
)::NUMERIC / (SELECT SUM(CASE WHEN RECEIVE_QTY='' AND RECEIVE_QTY IS NOT NULL THEN '0' ELSE RECEIVE_QTY END ::INTEGER) FROM ASSEMBLY_WBS_TASK AS A WHERE A.PARENT_OBJID = T.OBJID) * 100),1)
|
|
END AS AS_RATE -->
|
|
FROM
|
|
PART_BOM_REPORT AS T) P
|
|
GROUP BY CONTRACT_OBJID) R
|
|
ON R.CONTRACT_OBJID = T.OBJID
|
|
LEFT OUTER JOIN /*조립생산*/
|
|
(SELECT
|
|
CONTRACT_OBJID
|
|
,(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID)
|
|
,SUM(WORK_HOUR::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID != '' AND WD.CONTRACT_OBJID IS NOT null
|
|
AND STATUS = 'complete'
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) IN ('DPT005','DPT023','DPT013')
|
|
AND PRODUCTION_TYPE = 'assemble'
|
|
GROUP BY CONTRACT_OBJID, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) ) AS P
|
|
ON P.CONTRACT_OBJID = T.OBJID /*조립외주*/
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID
|
|
,SUM(WORK_HOUR::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID != '' AND WD.CONTRACT_OBJID IS NOT null
|
|
AND STATUS = 'complete'
|
|
AND SOURCING_TYPE = 'outsourcing'
|
|
AND PRODUCTION_TYPE = 'assemble'
|
|
GROUP BY CONTRACT_OBJID ) AS O
|
|
ON O.CONTRACT_OBJID = T.OBJID
|
|
LEFT OUTER JOIN /*셋업생산*/
|
|
(SELECT
|
|
CONTRACT_OBJID
|
|
,(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID)
|
|
,SUM(WORK_HOUR::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID != '' AND WD.CONTRACT_OBJID IS NOT null
|
|
AND STATUS = 'complete'
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) IN ('DPT005','DPT023','DPT013')
|
|
AND PRODUCTION_TYPE = 'setup'
|
|
GROUP BY CONTRACT_OBJID, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) ) AS SP
|
|
ON SP.CONTRACT_OBJID = T.OBJID
|
|
LEFT OUTER JOIN /*셋업외주*/
|
|
(SELECT
|
|
CONTRACT_OBJID
|
|
,SUM(WORK_HOUR::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID != '' AND WD.CONTRACT_OBJID IS NOT null
|
|
AND STATUS = 'complete'
|
|
AND SOURCING_TYPE = 'outsourcing'
|
|
AND PRODUCTION_TYPE = 'setup'
|
|
GROUP BY CONTRACT_OBJID ) AS SO
|
|
ON SO.CONTRACT_OBJID = T.OBJID
|
|
WHERE 1=1
|
|
<if test="Year !=null and Year != '' ">
|
|
AND TO_CHAR(REGDATE,'YYYY') = #{Year}
|
|
</if>
|
|
|
|
<!-- <if test="project_no !=null and project_no != '' ">
|
|
AND OBJID = #{project_no}
|
|
</if> -->
|
|
|
|
<if test="project_nos != null and project_nos != ''">
|
|
AND OBJID IN
|
|
<foreach item="state" collection="project_nos.split(',')"
|
|
open="(" separator="," close=")">
|
|
#{state}
|
|
</foreach>
|
|
</if>
|
|
|
|
<if test="category_cd !=null and category_cd != '' ">
|
|
AND category_cd = #{category_cd}
|
|
</if>
|
|
|
|
<if test="customer_objid !=null and customer_objid != '' ">
|
|
AND CUSTOMER_OBJID = #{customer_objid}
|
|
</if>
|
|
|
|
<if test="product != null and product !='' ">
|
|
AND product = #{product}
|
|
</if>
|
|
|
|
<if test="status_cd !=null and status_cd !=''">
|
|
AND status_cd = #{status_cd}
|
|
</if>
|
|
|
|
<if test="result_cd !=null and result_cd !=''">
|
|
AND result_cd = #{result_cd}
|
|
</if>
|
|
|
|
<if test="contract_start_date != null and !''.equals(contract_start_date)">
|
|
AND TO_DATE(DUE_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{contract_start_date}, 'YYYY-MM-DD')
|
|
|
|
</if>
|
|
<if test="contract_end_date != null and !''.equals(contract_end_date)">
|
|
AND TO_DATE(DUE_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{contract_end_date}, 'YYYY-MM-DD')
|
|
</if>
|
|
|
|
<if test="pm_user_id !=null and pm_user_id !=''">
|
|
AND pm_user_id = #{pm_user_id}
|
|
</if>
|
|
<if test="location != null and !''.equals(location)">
|
|
AND UPPER(LOCATION) LIKE UPPER('%${location}%')
|
|
</if>
|
|
<if test="setup != null and !''.equals(setup)">
|
|
AND UPPER(SETUP) LIKE UPPER('%${setup}%')
|
|
</if>
|
|
ORDER BY SUBSTRING(PROJECT_NO,POSITION('-' IN PROJECT_NO)+1) DESC
|
|
</select>
|
|
|
|
<!-- 생산관리 -> 생산계획수립 -->
|
|
<select id="planningGridList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
OBJID
|
|
,CATEGORY_CD
|
|
,CODE_NAME(CATEGORY_CD) AS CATEGORY_NAME
|
|
,CUSTOMER_OBJID
|
|
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID = T.CUSTOMER_OBJID::NUMERIC) AS CUSTOMER_NAME
|
|
,PRODUCT
|
|
,CODE_NAME(PRODUCT) AS PRODUCT_NAME
|
|
,(SELECT O.CUSTOMER_PROJECT_NAME FROM CONTRACT_MGMT AS O WHERE O.OBJID = CONTRACT_OBJID) AS CUSTOMER_PROJECT_NAME
|
|
,STATUS_CD
|
|
,CODE_NAME(STATUS_CD) AS STATUS_NAME
|
|
,DUE_DATE
|
|
,LOCATION
|
|
,SETUP
|
|
,FACILITY
|
|
,CODE_NAME(FACILITY) AS FACILITY_NAME
|
|
,FACILITY_QTY
|
|
,FACILITY_TYPE
|
|
,FACILITY_DEPTH
|
|
,PRODUCTION_NO
|
|
,BUS_CAL_CD
|
|
,CODE_NAME(BUS_CAL_CD) AS BUS_CAL_NAME
|
|
,CATEGORY1_CD
|
|
,CODE_NAME(CATEGORY1_CD) AS CATEGORY1_NAME
|
|
,CHG_USER_ID
|
|
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = T.CHG_USER_ID ) AS CHG_USER_NAME
|
|
,PLAN_DATE
|
|
,COMPLETE_DATE
|
|
,RESULT_CD
|
|
,CODE_NAME(RESULT_CD) AS RESULT_NAME
|
|
,PROJECT_NO
|
|
,PM_USER_ID
|
|
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = (SELECT O.PM_USER_ID FROM CONTRACT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID)) AS PM_USER_NAME
|
|
,CONTRACT_PRICE
|
|
,CONTRACT_PRICE_CURRENCY
|
|
,CONTRACT_CURRENCY
|
|
,CODE_NAME(CONTRACT_CURRENCY) AS CONTRACT_CURRENCY_NAME
|
|
,REGDATE
|
|
,TO_CHAR(REGDATE,'YYYY-MM-DD') AS REG_DATE
|
|
,WRITER
|
|
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = T.WRITER ) AS WRITER_NAME
|
|
,CONTRACT_NO
|
|
,CUSTOMER_EQUIP_NAME
|
|
,REQ_DEL_DATE
|
|
,CONTRACT_DEL_DATE
|
|
,CONTRACT_COMPANY
|
|
,CODE_NAME(CONTRACT_COMPANY) AS CONTRACT_COMPANY_NAME
|
|
,CONTRACT_DATE
|
|
,PO_NO
|
|
,MANUFACTURE_PLANT
|
|
,CODE_NAME(MANUFACTURE_PLANT) AS MANUFACTURE_PLANT_NAME
|
|
,CONTRACT_RESULT
|
|
,CODE_NAME(CONTRACT_RESULT) AS CONTRACT_RESULT_NAME
|
|
,CODE_NAME(AREA_CD) AS AREA_NAME
|
|
,PROJECT_NAME
|
|
,MECHANICAL_TYPE
|
|
,(SELECT COUNT(1) FROM PMS_WBS_TASK AS O WHERE O.CONTRACT_OBJID = T.OBJID AND (O.PRODUCE_PLAN_START !='' OR O.PRODUCE_PLAN_END !=''
|
|
OR O.PRODUCE_ACT_START!='' OR O.PRODUCE_ACT_END !='' OR O.PRODUCE_USER_ID !='' )) AS WBS_CNT
|
|
,(SELECT MIN(PRODUCE_PLAN_START) FROM PMS_WBS_TASK AS O WHERE O.CONTRACT_OBJID = T.OBJID AND O.PRODUCE_PLAN_START !='') AS PRODUCE_PLAN_START
|
|
|
|
,(SELECT MAX(PRODUCE_PLAN_END) FROM PMS_WBS_TASK AS O WHERE O.CONTRACT_OBJID = T.OBJID AND O.PRODUCE_PLAN_END !='') AS PRODUCE_PLAN_END
|
|
|
|
,(SELECT MIN(PRODUCE_ACT_START) FROM PMS_WBS_TASK AS O WHERE O.CONTRACT_OBJID = T.OBJID AND O.PRODUCE_ACT_START!='') AS PRODUCE_ACT_START
|
|
,(SELECT MAX(PRODUCE_ACT_END) FROM PMS_WBS_TASK AS O WHERE O.CONTRACT_OBJID = T.OBJID AND O.PRODUCE_ACT_END !='' ) AS PRODUCE_ACT_END
|
|
|
|
,(SELECT COUNT(1) FROM SETUP_WBS_TASK AS O WHERE O.CONTRACT_OBJID = T.OBJID AND (O.SETUP_PLAN_START !='' OR O.SETUP_PLAN_END !=''
|
|
OR O.SETUP_ACT_START!='' OR O.SETUP_ACT_END !='')) AS SETUP_WBS_CNT
|
|
,(SELECT MIN(SETUP_PLAN_START) FROM SETUP_WBS_TASK AS O WHERE O.CONTRACT_OBJID = T.OBJID AND O.SETUP_PLAN_START !='') AS SETUP_PLAN_START
|
|
|
|
,(SELECT MAX(SETUP_PLAN_END) FROM SETUP_WBS_TASK AS O WHERE O.CONTRACT_OBJID = T.OBJID AND O.SETUP_PLAN_END !='') AS SETUP_PLAN_END
|
|
|
|
,(SELECT MIN(SETUP_ACT_START) FROM SETUP_WBS_TASK AS O WHERE O.CONTRACT_OBJID = T.OBJID AND O.SETUP_ACT_START!='') AS SETUP_ACT_START
|
|
,(SELECT MAX(SETUP_ACT_END) FROM SETUP_WBS_TASK AS O WHERE O.CONTRACT_OBJID = T.OBJID AND O.SETUP_ACT_END !='' ) AS SETUP_ACT_END
|
|
|
|
|
|
FROM PROJECT_MGMT AS T
|
|
WHERE 1=1
|
|
<if test="Year !=null and Year != '' ">
|
|
AND TO_CHAR(REGDATE,'YYYY') = #{Year}
|
|
</if>
|
|
|
|
<!-- <if test="project_no !=null and project_no != '' ">
|
|
AND OBJID = #{project_no}
|
|
</if> -->
|
|
|
|
<if test="project_nos != null and project_nos != ''">
|
|
AND OBJID IN
|
|
<foreach item="state" collection="project_nos.split(',')"
|
|
open="(" separator="," close=")">
|
|
#{state}
|
|
</foreach>
|
|
</if>
|
|
|
|
<if test="category_cd !=null and category_cd != '' ">
|
|
AND category_cd = #{category_cd}
|
|
</if>
|
|
|
|
<if test="customer_objid !=null and customer_objid != '' ">
|
|
AND CUSTOMER_OBJID = #{customer_objid}
|
|
</if>
|
|
|
|
<if test="product != null and product !='' ">
|
|
AND product = #{product}
|
|
</if>
|
|
|
|
<if test="status_cd !=null and status_cd !=''">
|
|
AND status_cd = #{status_cd}
|
|
</if>
|
|
|
|
<if test="result_cd !=null and result_cd !=''">
|
|
AND result_cd = #{result_cd}
|
|
</if>
|
|
|
|
<if test="contract_start_date != null and !''.equals(contract_start_date)">
|
|
AND TO_DATE(DUE_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{contract_start_date}, 'YYYY-MM-DD')
|
|
|
|
</if>
|
|
<if test="contract_end_date != null and !''.equals(contract_end_date)">
|
|
AND TO_DATE(DUE_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{contract_end_date}, 'YYYY-MM-DD')
|
|
</if>
|
|
|
|
<if test="pm_user_id !=null and pm_user_id !=''">
|
|
AND pm_user_id = #{pm_user_id}
|
|
</if>
|
|
<if test="location != null and !''.equals(location)">
|
|
AND UPPER(LOCATION) LIKE UPPER('%${location}%')
|
|
</if>
|
|
<if test="setup != null and !''.equals(setup)">
|
|
AND UPPER(SETUP) LIKE UPPER('%${setup}%')
|
|
</if>
|
|
ORDER BY SUBSTRING(PROJECT_NO,POSITION('-' IN PROJECT_NO)+1) DESC
|
|
</select>
|
|
|
|
|
|
|
|
<!-- 생산관리 -> 공정실적관리 -->
|
|
<select id="processperformanceGridList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
<!-- ROW_NUMBER() OVER(ORDER BY REGDATE DESC) AS NUM, -->
|
|
OBJID,
|
|
CUSTOMER_OBJID,
|
|
(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID::VARCHAR = T.CUSTOMER_OBJID) AS CUSTOMER_NAME,
|
|
T.CONTRACT_OBJID,
|
|
(SELECT CUSTOMER_PROJECT_NAME FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS CUSTOMER_PROJECT_NAME,
|
|
(SELECT PROJECT_NAME FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PROJECT_NAME,
|
|
(SELECT PROJECT_NO FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PROJECT_NO,
|
|
|
|
(SELECT MECHANICAL_TYPE FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS MECHANICAL_TYPE,
|
|
(SELECT DUE_DATE FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS DUE_DATE,
|
|
(SELECT SETUP FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS SETUP,
|
|
(SELECT USER_NAME(PM_USER_ID) FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PM_USER_NAME,
|
|
(SELECT CODE_NAME(PRODUCT) FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PRODUCT_NAME,
|
|
|
|
T.UNIT_CODE,
|
|
(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = T.UNIT_CODE) AS UNIT_NAME,
|
|
STATUS,
|
|
CASE UPPER(STATUS)
|
|
WHEN 'CREATE' THEN '등록중'
|
|
WHEN 'CHANGEDESIGN' THEN '설계변경미배포'
|
|
WHEN 'DEPLOY' THEN '배포완료'
|
|
ELSE ''
|
|
END STATUS_TITLE,
|
|
WRITER,
|
|
(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WRITER) AS DEPT_NAME,
|
|
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = WRITER) AS USER_NAME,
|
|
(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WRITER) || '/' || (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = WRITER) as DEPT_USER_NAME,
|
|
REGDATE AS REGDATE,
|
|
TO_CHAR(REGDATE, 'YYYY-MM-DD') AS REG_DATE,
|
|
DEPLOY_DATE,
|
|
REVISION,
|
|
(SELECT MAX(PM.EO_NO) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR WHERE BP.BOM_REPORT_OBJID =T.OBJID) AS EO_NO,
|
|
(SELECT MAX(PM.EO_DATE) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR WHERE BP.BOM_REPORT_OBJID =T.OBJID) AS EO_DATE,
|
|
NOTE,
|
|
(SELECT COUNT(*) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON COALESCE(NULLIF(BP.LAST_PART_OBJID, ''), BP.PART_NO) = PM.OBJID::VARCHAR WHERE BP.BOM_REPORT_OBJID = T.OBJID AND PM.part_type is not null AND PM.part_type != '' AND BP.STATUS in ('beforeEdit', 'editing', 'deleting', 'deploy')) AS BOM_CNT,
|
|
(SELECT count(1) FROM ASSEMBLY_WBS_TASK AS A
|
|
INNER JOIN BOM_PART_QTY AS BP
|
|
ON A.PARENT_OBJID = BP.BOM_REPORT_OBJID
|
|
AND A.PART_OBJID = COALESCE(NULLIF(BP.LAST_PART_OBJID, ''), BP.PART_NO)
|
|
AND A.BOM_QTY_CHILD_OBJID = BP.CHILD_OBJID
|
|
AND BP.STATUS in ('beforeEdit', 'editing', 'deleting', 'deploy')
|
|
WHERE A.PARENT_OBJID = T.OBJID AND assembly_user_id IS NOT NULL AND assembly_user_id !='' AND assembly_date IS NOT NULL AND assembly_date!='' ) as ASSING_CNT,
|
|
CASE WHEN (SELECT COUNT(*) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON COALESCE(NULLIF(BP.LAST_PART_OBJID, ''), BP.PART_NO) = PM.OBJID::VARCHAR where BP.BOM_REPORT_OBJID = T.OBJID and PM.part_type is not null and PM.part_type != '' AND BP.STATUS in ('beforeEdit', 'editing', 'deleting', 'deploy')) = 0 THEN 0
|
|
ELSE ROUND((((SELECT count(1) FROM ASSEMBLY_WBS_TASK AS A
|
|
INNER JOIN BOM_PART_QTY AS BP
|
|
ON A.PARENT_OBJID = BP.BOM_REPORT_OBJID
|
|
AND A.PART_OBJID = COALESCE(NULLIF(BP.LAST_PART_OBJID, ''), BP.PART_NO)
|
|
AND A.BOM_QTY_CHILD_OBJID = BP.CHILD_OBJID
|
|
AND BP.STATUS in ('beforeEdit', 'editing', 'deleting', 'deploy')
|
|
WHERE A.PARENT_OBJID = T.OBJID AND assembly_user_id IS NOT NULL AND assembly_user_id !='' AND assembly_date IS NOT NULL AND assembly_date!=''
|
|
)::numeric / (SELECT COUNT(*) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON COALESCE(NULLIF(BP.LAST_PART_OBJID, ''), BP.PART_NO) = PM.OBJID::VARCHAR where BP.BOM_REPORT_OBJID = T.OBJID and PM.part_type is not null and PM.part_type != '' AND BP.STATUS in ('beforeEdit', 'editing', 'deleting', 'deploy'))) * 100), 1)
|
|
END AS AS_RATE ,
|
|
|
|
coalesce(P.WORK_HOUR , '0') as INSOURCING_SUM,
|
|
coalesce(O.WORK_HOUR , '0') as OUTSOURCING_SUM,
|
|
coalesce(P.WORK_HOUR , '0')::numeric + coalesce(O.WORK_HOUR , '0')::numeric as TOTAL_SUM
|
|
<!-- (SELECT COUNT(*) FROM BOM_PART_QTY AS A WHERE A.BOM_REPORT_OBJID = T.OBJID) AS BOM_CNT -->
|
|
<!-- ,(SELECT SUM(CASE WHEN INSOURCING='' AND INSOURCING IS NOT NULL THEN '0' ELSE INSOURCING END ::INTEGER) FROM ASSEMBLY_WBS_TASK AS A WHERE A.PARENT_OBJID = T.OBJID) +
|
|
(SELECT SUM(CASE WHEN OUTSOURCING='' AND OUTSOURCING IS NOT NULL THEN '0' ELSE OUTSOURCING END ::integer) FROM ASSEMBLY_WBS_TASK AS A WHERE A.PARENT_OBJID = T.OBJID) AS TOTAL_SUM
|
|
,(SELECT SUM(CASE WHEN INSOURCING='' AND INSOURCING IS NOT NULL THEN '0' ELSE INSOURCING END ::INTEGER) FROM ASSEMBLY_WBS_TASK AS A WHERE A.PARENT_OBJID = T.OBJID) AS INSOURCING_SUM
|
|
,(SELECT SUM(CASE WHEN OUTSOURCING='' AND OUTSOURCING IS NOT NULL THEN '0' ELSE OUTSOURCING END ::integer) FROM ASSEMBLY_WBS_TASK AS A WHERE A.PARENT_OBJID = T.OBJID) AS OUTSOURCING_SUM -->
|
|
<!-- ,(SELECT SUM(CASE WHEN receive_qty='' AND receive_qty IS NOT NULL THEN '0' ELSE receive_qty END ::INTEGER) FROM ASSEMBLY_WBS_TASK AS A WHERE A.PARENT_OBJID = T.OBJID) AS ASS_CNT -->
|
|
<!-- ,(SELECT SUM(CASE WHEN receive_qty='' AND receive_qty IS NOT NULL THEN '0' ELSE receive_qty END ::INTEGER) FROM ASSEMBLY_WBS_TASK AS A WHERE A.PARENT_OBJID = T.OBJID
|
|
AND assembly_user_id IS NOT NULL AND assembly_user_id !='' AND assembly_date IS NOT NULL AND assembly_date!='' AND (insourcing IS NOT NULL OR insourcing!='')
|
|
AND (outsourcing IS NOT NULL OR outsourcing!='')
|
|
) AS ASSING_CNT
|
|
,CASE WHEN (SELECT SUM(CASE WHEN receive_qty='' AND receive_qty IS NOT NULL THEN '0' ELSE receive_qty END ::INTEGER) FROM ASSEMBLY_WBS_TASK AS A WHERE A.PARENT_OBJID = T.OBJID) = 0
|
|
THEN 0
|
|
ELSE
|
|
ROUND(((SELECT SUM(CASE WHEN receive_qty='' AND receive_qty IS NOT NULL THEN '0' ELSE receive_qty END ::INTEGER) FROM ASSEMBLY_WBS_TASK AS A WHERE A.PARENT_OBJID = T.OBJID
|
|
AND assembly_user_id IS NOT NULL AND assembly_user_id !='' AND assembly_date IS NOT NULL AND assembly_date!='' AND (insourcing IS NOT NULL OR insourcing!='')
|
|
AND (outsourcing IS NOT NULL OR outsourcing!='')
|
|
)::numeric / (SELECT SUM(CASE WHEN receive_qty='' AND receive_qty IS NOT NULL THEN '0' ELSE receive_qty END ::INTEGER) FROM ASSEMBLY_WBS_TASK AS A WHERE A.PARENT_OBJID = T.OBJID) * 100),1)
|
|
END AS AS_RATE -->
|
|
|
|
FROM
|
|
PART_BOM_REPORT AS T
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID
|
|
,UNIT_CODE
|
|
,(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID)
|
|
,SUM(WORK_HOUR::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID != '' AND WD.CONTRACT_OBJID IS NOT null
|
|
AND STATUS = 'complete'
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) IN ('DPT005','DPT023','DPT013')
|
|
AND PRODUCTION_TYPE = 'assemble'
|
|
GROUP BY CONTRACT_OBJID, UNIT_CODE, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) ) AS P
|
|
ON P.UNIT_CODE = T.UNIT_CODE
|
|
AND P.CONTRACT_OBJID = T.CONTRACT_OBJID
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID ,
|
|
UNIT_CODE ,
|
|
SUM(WORK_HOUR::numeric) as WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE
|
|
WD.CONTRACT_OBJID != ''
|
|
AND WD.CONTRACT_OBJID IS NOT NULL
|
|
AND STATUS = 'complete'
|
|
AND PRODUCTION_TYPE = 'assemble'
|
|
AND SOURCING_TYPE = 'outsourcing'
|
|
GROUP BY CONTRACT_OBJID, UNIT_CODE ) AS O
|
|
ON O.UNIT_CODE = T.UNIT_CODE
|
|
AND O.CONTRACT_OBJID = T.CONTRACT_OBJID
|
|
|
|
WHERE 1=1
|
|
AND T.STATUS = 'deploy'
|
|
|
|
<if test="Year !=null and Year != '' ">
|
|
AND TO_CHAR(REGDATE,'YYYY') = #{Year}
|
|
</if>
|
|
|
|
<!-- <if test="project_no !=null and project_no != '' ">
|
|
AND T.CONTRACT_OBJID = #{project_no}
|
|
</if> -->
|
|
<if test="project_nos != null and project_nos != ''">
|
|
AND T.CONTRACT_OBJID IN
|
|
<foreach item="state" collection="project_nos.split(',')"
|
|
open="(" separator="," close=")">
|
|
#{state}
|
|
</foreach>
|
|
</if>
|
|
|
|
<if test="unit_code !=null and unit_code != '' ">
|
|
AND T.UNIT_CODE = #{unit_code}
|
|
</if>
|
|
|
|
<if test="category_cd !=null and category_cd != '' ">
|
|
AND T.category_cd = #{category_cd}
|
|
</if>
|
|
|
|
<if test="customer_objid !=null and customer_objid != '' ">
|
|
AND T.CUSTOMER_OBJID = #{customer_objid}
|
|
</if>
|
|
|
|
<if test="product != null and product !='' ">
|
|
AND (SELECT PRODUCT FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) = #{product}
|
|
</if>
|
|
|
|
<if test="pm_user_id !=null and pm_user_id !=''">
|
|
AND (SELECT PM_USER_ID FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) = #{pm_user_id}
|
|
</if>
|
|
|
|
ORDER BY REGDATE DESC
|
|
</select>
|
|
|
|
|
|
<!-- //이슈 목록 조회 -->
|
|
<select id="getIssueList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT *
|
|
FROM (
|
|
SELECT PMS_ISSUE_INFO.*,ROW_NUMBER() OVER (ORDER BY REGDATE DESC) AS RNUM
|
|
FROM(
|
|
SELECT PMS_ISSUE_INFO.*
|
|
FROM(
|
|
SELECT A.OBJID
|
|
, A.REGION
|
|
, A.OEM_OBJID
|
|
, (SELECT OEM_NAME FROM OEM_MNG WHERE OBJID = A.OEM_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
|
|
, A.PROD_GROUP_OBJID
|
|
, (SELECT PRODUCT_GROUP_NAME FROM PRODUCT_GROUP_MNG WHERE OBJID = A.PROD_GROUP_OBJID) AS PROD_GROUP_NAME
|
|
, A.PROD_OBJID
|
|
, (SELECT PRODUCT_NAME FROM PRODUCT_MNG WHERE OBJID = A.PROD_OBJID) AS PROD_NAME
|
|
, A.SUBJECT
|
|
, A.ISSUE_CONTENTS
|
|
, A.ISSUE_RESULT_CONTENTS
|
|
, A.PIC_DEPT
|
|
, TO_CHAR(A.COMPLETE_PLAN_DATE, 'YYYY-MM-DD') AS COMPLETE_PLAN_DATE
|
|
, TO_CHAR(A.COMPLETE_DATE, 'YYYY-MM-DD') AS COMPLETE_DATE
|
|
, 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
|
|
, DECODE(COMPLETE_DATE, NULL, '진행중', '완료') AS STATUS
|
|
, (SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = A.OBJID AND DOC_TYPE='ISSUE_ATTACH' AND UPPER(STATUS) = 'ACTIVE') AS ISSUE_FILE_CNT
|
|
FROM PMS_ISSUE_INFO A
|
|
WHERE 1=1
|
|
<if test="search_region != null and search_region !='' ">
|
|
AND A.REGION = #{search_region}
|
|
</if>
|
|
<if test="search_carType != null and search_carType != '' ">
|
|
AND A.CAR_OBJID = #{search_carType}
|
|
</if>
|
|
<if test="search_productType != null and search_productType !=''">
|
|
AND A.PROD_OBJID = #{search_productType}
|
|
</if>
|
|
) PMS_ISSUE_INFO
|
|
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_fromDate != null and search_fromDate != ''">
|
|
AND TO_DATE(REGDATE,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{search_fromDate}, 'YYYY-MM-DD')
|
|
</if>
|
|
<if test="search_toDate != null and search_toDate != ''">
|
|
AND TO_DATE(REGDATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{search_toDate}, 'YYYY-MM-DD')
|
|
</if>
|
|
<if test="search_status !=null and search_status !=''">
|
|
AND UPPER(STATUS) = UPPER(#{search_status})
|
|
</if>
|
|
<if test="search_writer != null and !''.equals(search_writer)">
|
|
AND UPPER(WRITER_USER_NAME) LIKE UPPER('%${search_writer}%')
|
|
</if>
|
|
<if test="search_dept != null and !''.equals(search_dept)">
|
|
AND UPPER(WRITER_DEPT_NAME) LIKE UPPER('%${search_dept}%')
|
|
</if>
|
|
<if test="search_pic_dept != null and !''.equals(search_pic_dept)">
|
|
AND UPPER(PIC_DEPT) LIKE UPPER('%${search_pic_dept}%')
|
|
</if>
|
|
)PMS_ISSUE_INFO
|
|
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>
|
|
|
|
<select id="selectPlanningIssueList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
OBJID,
|
|
ISSUE_NO,
|
|
(SELECT PROJECT_NO FROM PROJECT_MGMT AS O WHERE O.OBJID = T.PROJECT_OBJID) AS PROJECT_NO,
|
|
PROJECT_OBJID,
|
|
UNIT_CODE,
|
|
(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM pms_wbs_task AS O WHERE O.OBJID = T.UNIT_CODE) AS UNIT_CODE_NAME,
|
|
PART_OBJID,
|
|
(SELECT PART_NO FROM PART_MNG AS O WHERE O.OBJID = T.PART_OBJID) AS PART_NO,
|
|
(SELECT PART_NAME FROM PART_MNG AS O WHERE O.OBJID = T.PART_OBJID) AS PART_NAME,
|
|
ISSUE_CATEGORY,
|
|
CODE_NAME(ISSUE_CATEGORY) AS ISSUE_CATEGORY_NAME,
|
|
ISSUE_TYPE,
|
|
CODE_NAME(ISSUE_TYPE) AS ISSUE_TYPE_NAME,
|
|
CONTENT,
|
|
DESIGN_USERID,
|
|
USER_NAME(DESIGN_USERID) AS DESIGN_USERID_NAME,
|
|
CODE_NAME(DESIGN_RESULT) AS DESIGN_RESULT_NAME,
|
|
DESIGN_RESULT,
|
|
DESIGN_DATE,
|
|
PURCHASE_USERID,
|
|
USER_NAME(PURCHASE_USERID) AS PURCHASE_USERID_NAME,
|
|
PURCHASE_RESULT,
|
|
CODE_NAME(PURCHASE_RESULT) AS PURCHASE_RESULT_NAME,
|
|
PURCHASE_DATE,
|
|
QUALITY_USERID,
|
|
USER_NAME(QUALITY_USERID) AS QUALITY_USERID_NAME,
|
|
CODE_NAME(QUALITY_RESULT) AS QUALITY_RESULT_NAME,
|
|
QUALITY_RESULT,
|
|
QUALITY_DATE,
|
|
PRODUCTION_USERID,
|
|
USER_NAME(PRODUCTION_USERID) AS PRODUCTION_USERID_NAME,
|
|
CODE_NAME(PRODUCTION_RESULT) AS PRODUCTION_RESULT_NAME,
|
|
PRODUCTION_RESULT,
|
|
PRODUCTION_DATE,
|
|
REG_DATE,
|
|
WRITER,
|
|
USER_NAME(WRITER) AS WRITER_NAME,
|
|
TO_CHAR(REG_DATE,'YYYY-MM-DD') AS REG_DATE_TEXT,
|
|
CASE WHEN STATUS ='write' THEN '등록'
|
|
WHEN STATUS = 'release' AND
|
|
(
|
|
((DESIGN_USERID IS NOT NULL AND DESIGN_USERID != '') AND DESIGN_DATE != '') OR
|
|
((DESIGN_USERID IS NULL OR DESIGN_USERID = '') AND DESIGN_DATE = '')
|
|
) AND
|
|
(
|
|
((PURCHASE_USERID IS NOT NULL AND PURCHASE_USERID != '') AND PURCHASE_DATE != '') OR
|
|
((PURCHASE_USERID IS NULL OR PURCHASE_USERID = '') AND PURCHASE_DATE = '')
|
|
) AND
|
|
(
|
|
((QUALITY_USERID IS NOT NULL AND QUALITY_USERID != '') AND QUALITY_DATE != '') OR
|
|
((QUALITY_USERID IS NULL OR QUALITY_USERID = '') AND QUALITY_DATE = '')
|
|
) AND
|
|
(
|
|
((PRODUCTION_USERID IS NOT NULL AND PRODUCTION_USERID != '') AND PRODUCTION_DATE != '') OR
|
|
((PRODUCTION_USERID IS NULL OR PRODUCTION_USERID = '') AND PRODUCTION_DATE = '')
|
|
) AND
|
|
(
|
|
(DESIGN_USERID IS NOT NULL AND DESIGN_USERID != '') OR
|
|
(PURCHASE_USERID IS NOT NULL AND PURCHASE_USERID != '') OR
|
|
(QUALITY_USERID IS NOT NULL AND QUALITY_USERID != '') OR
|
|
(PRODUCTION_USERID IS NOT NULL AND PRODUCTION_USERID != '')
|
|
)
|
|
THEN '조치완료'
|
|
WHEN STATUS = 'release' AND
|
|
(
|
|
(DESIGN_USERID IS NOT NULL AND DESIGN_USERID != '') OR
|
|
(PURCHASE_USERID IS NOT NULL AND PURCHASE_USERID != '') OR
|
|
(QUALITY_USERID IS NOT NULL AND QUALITY_USERID != '') OR
|
|
(PRODUCTION_USERID IS NOT NULL AND PRODUCTION_USERID != '') OR
|
|
DESIGN_DATE != '' OR PURCHASE_DATE != '' OR
|
|
QUALITY_DATE != '' OR PRODUCTION_DATE != ''
|
|
)
|
|
THEN '조치중'
|
|
<!-- WHEN STATUS = 'release' AND DESIGN_RESULT != '' AND DESIGN_DATE != '' AND
|
|
PURCHASE_RESULT != '' AND PURCHASE_DATE != '' AND
|
|
QUALITY_RESULT != '' AND QUALITY_DATE != '' AND
|
|
PRODUCTION_RESULT != '' AND PRODUCTION_DATE != '' AND
|
|
(DESIGN_USERID IS NOT NULL OR PURCHASE_USERID IS NOT NULL OR
|
|
QUALITY_USERID IS NOT NULL OR PRODUCTION_USERID IS NOT NULL) THEN '조치완료' -->
|
|
<!-- WHEN STATUS ='release' AND DESIGN_RESULT !='' AND DESIGN_DATE !=''
|
|
THEN '조치완료' -->
|
|
ELSE
|
|
CASE WHEN STATUS ='release' AND to_date(TO_CHAR(REG_DATE,'yyyy-mm-dd'),'yyyy-mm-dd') <![CDATA[ > ]]> to_date(TO_CHAR(REG_DATE,'yyyy-mm-dd'),'yyyy-mm-dd')+5 AND DESIGN_DATE =''
|
|
THEN '미조치'
|
|
ELSE '배포' END
|
|
END AS STATUS_NAME,
|
|
STATUS
|
|
FROM PLANNING_ISSUE AS T
|
|
WHERE 1=1
|
|
<if test="Year !=null and Year != '' ">
|
|
AND TO_CHAR(REG_DATE,'YYYY') = #{Year}
|
|
</if>
|
|
|
|
<!-- <if test="project_no !=null and project_no != '' ">
|
|
AND PROJECT_OBJID = #{project_no}
|
|
</if> -->
|
|
|
|
<if test="project_nos != null and project_nos != ''">
|
|
AND PROJECT_OBJID IN
|
|
<foreach item="state" collection="project_nos.split(',')"
|
|
open="(" separator="," close=")">
|
|
#{state}
|
|
</foreach>
|
|
</if>
|
|
|
|
<if test="unit_code !=null and unit_code != '' ">
|
|
AND UNIT_CODE = #{unit_code}
|
|
</if>
|
|
|
|
<if test="issue_category !=null and issue_category != '' ">
|
|
AND ISSUE_CATEGORY = #{issue_category}
|
|
</if>
|
|
|
|
<if test="issue_type !=null and issue_type != '' ">
|
|
AND ISSUE_TYPE = #{issue_type}
|
|
</if>
|
|
|
|
<if test="writer !=null and writer != '' ">
|
|
AND WRITER = #{writer}
|
|
</if>
|
|
|
|
<if test="design_userid !=null and design_userid != '' ">
|
|
AND DESIGN_USERID = #{design_userid}
|
|
</if>
|
|
|
|
<if test="design_result !=null and design_result != '' ">
|
|
AND DESIGN_RESULT = #{design_result}
|
|
</if>
|
|
|
|
<if test="search_status !=null and search_status != '' ">
|
|
|
|
<if test="search_status == 'write'">
|
|
AND STATUS = 'write'
|
|
</if>
|
|
|
|
<!-- Check if search_status is 'complete' -->
|
|
<if test="search_status == 'complete'">
|
|
AND STATUS = 'release'
|
|
AND DESIGN_RESULT != ''
|
|
AND DESIGN_DATE != ''
|
|
AND DESIGN_USERID !=''
|
|
</if>
|
|
|
|
<!-- Check if search_status is 'late' -->
|
|
<if test="search_status == 'late'">
|
|
AND STATUS = 'release'
|
|
AND TO_DATE(TO_CHAR(REG_DATE, 'yyyy-mm-dd'), 'yyyy-mm-dd') <![CDATA[ > ]]>
|
|
TO_DATE(TO_CHAR(REG_DATE, 'yyyy-mm-dd'), 'yyyy-mm-dd') + 5
|
|
AND DESIGN_DATE = ''
|
|
</if>
|
|
|
|
<!-- Check if search_status is 'release' -->
|
|
<if test="search_status == 'release'">
|
|
AND STATUS = 'release'
|
|
AND (DESIGN_DATE = '' OR DESIGN_USERID = '' OR DESIGN_RESULT ='')
|
|
</if>
|
|
|
|
</if>
|
|
|
|
|
|
<if test="status !=null and status != '' ">
|
|
|
|
<if test="status == 'all'">
|
|
AND STATUS != 'write'
|
|
</if>
|
|
|
|
|
|
<if test="status == 'complete'">
|
|
AND STATUS = 'release'
|
|
AND DESIGN_RESULT != ''
|
|
AND DESIGN_DATE != ''
|
|
AND DESIGN_USERID !=''
|
|
</if>
|
|
|
|
<if test="status == 'late'">
|
|
AND STATUS = 'release'
|
|
AND (DESIGN_DATE = '' OR DESIGN_USERID = '' OR DESIGN_RESULT ='')
|
|
</if>
|
|
</if>
|
|
|
|
ORDER BY ISSUE_NO DESC
|
|
</select>
|
|
|
|
<select id="selectPlanningIssueInfo" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
OBJID,
|
|
ISSUE_NO,
|
|
(SELECT PROJECT_NO FROM PROJECT_MGMT AS O WHERE O.OBJID = T.PROJECT_OBJID) AS PROJECT_NO,
|
|
PROJECT_OBJID,
|
|
UNIT_CODE,
|
|
(SELECT TASK_NAME FROM pms_wbs_task_standard AS O WHERE O.OBJID = T.UNIT_CODE) AS UNIT_CODE_NAME,
|
|
PART_OBJID,
|
|
(SELECT PART_NO FROM PART_MNG AS O WHERE O.OBJID = T.PART_OBJID) AS PART_NO,
|
|
(SELECT PART_NAME FROM PART_MNG AS O WHERE O.OBJID = T.PART_OBJID) AS PART_NAME,
|
|
ISSUE_CATEGORY,
|
|
CODE_NAME(ISSUE_CATEGORY) AS ISSUE_CATEGORY_NAME,
|
|
ISSUE_TYPE,
|
|
CODE_NAME(ISSUE_TYPE) AS ISSUE_TYPE_NAME,
|
|
CONTENT,
|
|
DESIGN_USERID,
|
|
USER_NAME(DESIGN_USERID) AS DESIGN_USERID_NAME,
|
|
CODE_NAME(DESIGN_RESULT) AS DESIGN_RESULT_NAME,
|
|
DESIGN_RESULT,
|
|
DESIGN_DATE,
|
|
PURCHASE_USERID,
|
|
USER_NAME(PURCHASE_USERID) AS PURCHASE_USERID_NAME,
|
|
PURCHASE_RESULT,
|
|
CODE_NAME(PURCHASE_RESULT) AS PURCHASE_RESULT_NAME,
|
|
PURCHASE_DATE,
|
|
QUALITY_USERID,
|
|
USER_NAME(QUALITY_USERID) AS QUALITY_USERID_NAME,
|
|
CODE_NAME(QUALITY_RESULT) AS QUALITY_RESULT_NAME,
|
|
QUALITY_RESULT,
|
|
QUALITY_DATE,
|
|
PRODUCTION_USERID,
|
|
USER_NAME(PRODUCTION_USERID) AS PRODUCTION_USERID_NAME,
|
|
CODE_NAME(PRODUCTION_RESULT) AS PRODUCTION_RESULT_NAME,
|
|
PRODUCTION_RESULT,
|
|
PRODUCTION_DATE,
|
|
REG_DATE,
|
|
WRITER,
|
|
USER_NAME(WRITER) AS WRITER_NAME,
|
|
TO_CHAR(REG_DATE,'YYYY-MM-DD') AS REG_DATE_TEXT,
|
|
STATUS
|
|
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID::VARCHAR = T.OBJID AND DOC_TYPE='ISSUE01' AND UPPER(STATUS) = 'ACTIVE') AS FILE_CNT1
|
|
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID::VARCHAR = T.OBJID AND DOC_TYPE='ISSUE02' AND UPPER(STATUS) = 'ACTIVE') AS FILE_CNT2
|
|
,(SELECT SUM(FILE_SIZE) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID::VARCHAR = T.OBJID AND DOC_TYPE='ISSUE01' AND UPPER(STATUS) = 'ACTIVE') AS FILE_SIZE1
|
|
,(SELECT SUM(FILE_SIZE) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID::VARCHAR = T.OBJID AND DOC_TYPE='ISSUE02' AND UPPER(STATUS) = 'ACTIVE') AS FILE_SIZE2
|
|
FROM PLANNING_ISSUE AS T
|
|
WHERE T.OBJID = #{objId}
|
|
</select>
|
|
|
|
<select id="selectAssemblyDate" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
<!-- 2024.04.18 조립공정율 추가 -->
|
|
SELECT
|
|
OBJID,
|
|
T.CONTRACT_OBJID,
|
|
(SELECT PROJECT_NAME FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PROJECT_NAME,
|
|
(SELECT PROJECT_NO FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PROJECT_NO,
|
|
(SELECT COUNT(*) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR WHERE BP.BOM_REPORT_OBJID = T.OBJID AND PM.part_type is not null AND PM.part_type != '') AS BOM_CNT,
|
|
(SELECT count(1) FROM ASSEMBLY_WBS_TASK AS A WHERE A.PARENT_OBJID = T.OBJID AND assembly_user_id IS NOT NULL AND assembly_user_id !='' AND assembly_date IS NOT NULL AND assembly_date!='' ) as ASSING_CNT,
|
|
CASE WHEN (SELECT COUNT(*) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR where BP.BOM_REPORT_OBJID = T.OBJID and PM.part_type is not null and PM.part_type != '') = 0 THEN '0'
|
|
ELSE ROUND((((SELECT count(1) FROM ASSEMBLY_WBS_TASK AS A WHERE A.PARENT_OBJID = T.OBJID AND assembly_user_id IS NOT NULL AND assembly_user_id !='' AND assembly_date IS NOT NULL AND assembly_date!=''
|
|
)::numeric / (SELECT COUNT(*) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR where BP.BOM_REPORT_OBJID = T.OBJID and PM.part_type is not null and PM.part_type != '')) * 100), 0)::varchar
|
|
END AS AS_RATE ,
|
|
AWT.PARENT_OBJID,
|
|
AWT.PRODUCE_ACT_START,
|
|
AWT.PRODUCE_ACT_END
|
|
FROM
|
|
PART_BOM_REPORT AS T
|
|
LEFT OUTER JOIN (
|
|
SELECT
|
|
PARENT_OBJID
|
|
,MIN(NVL(ASSEMBLY_DATE,'9999')) as PRODUCE_ACT_START
|
|
,MAX(ASSEMBLY_DATE) as PRODUCE_ACT_END
|
|
FROM
|
|
ASSEMBLY_WBS_TASK
|
|
GROUP BY PARENT_OBJID
|
|
) AWT on AWT.PARENT_OBJID = T.OBJID
|
|
WHERE 1=1
|
|
AND PARENT_OBJID = #{PARENT_OBJID}
|
|
ORDER BY REGDATE DESC
|
|
<!--
|
|
SELECT
|
|
PARENT_OBJID
|
|
,MIN(NVL(ASSEMBLY_DATE,'9999')) as PRODUCE_ACT_START
|
|
,MAX(ASSEMBLY_DATE) as PRODUCE_ACT_END
|
|
FROM
|
|
ASSEMBLY_WBS_TASK
|
|
WHERE PARENT_OBJID = #{PARENT_OBJID}
|
|
GROUP BY PARENT_OBJID -->
|
|
</select>
|
|
|
|
<!-- //이슈 등록 및 수정 -->
|
|
<update id="mergeissueInfo" parameterType="map">
|
|
INSERT INTO PLANNING_ISSUE
|
|
(
|
|
OBJID
|
|
,ISSUE_NO
|
|
,PROJECT_OBJID
|
|
,UNIT_CODE
|
|
,PART_OBJID
|
|
,ISSUE_CATEGORY
|
|
,ISSUE_TYPE
|
|
,CONTENT
|
|
,DESIGN_USERID
|
|
,DESIGN_RESULT
|
|
,DESIGN_DATE
|
|
,PURCHASE_USERID
|
|
,PURCHASE_RESULT
|
|
,PURCHASE_DATE
|
|
,QUALITY_USERID
|
|
,QUALITY_RESULT
|
|
,QUALITY_DATE
|
|
,PRODUCTION_USERID
|
|
,PRODUCTION_RESULT
|
|
,PRODUCTION_DATE
|
|
,REG_DATE
|
|
,WRITER
|
|
,STATUS
|
|
)
|
|
VALUES
|
|
(
|
|
#{objId}
|
|
,(SELECT 'ISSUE' || to_char(now(),'YY')||'-'||LPAD((SELECT CASE WHEN MAX(SUBSTR(ISSUE_NO,9,3)) IS NULL THEN 1 ELSE MAX(SUBSTR(ISSUE_NO,9,3))::INTEGER+1 END FROM PLANNING_ISSUE)::VARCHAR,3,'0'))
|
|
,#{project_objid}
|
|
,#{unit_code}
|
|
,#{part_objid}
|
|
,#{issue_category}
|
|
,#{issue_type}
|
|
,#{content}
|
|
,#{design_userid}
|
|
,#{design_result}
|
|
,#{design_date}
|
|
,#{purchase_userid}
|
|
,#{purchase_result}
|
|
,#{purchase_date}
|
|
,#{quality_userid}
|
|
,#{quality_result}
|
|
,#{quality_date}
|
|
,#{production_userid}
|
|
,#{production_result}
|
|
,#{production_date}
|
|
,now()
|
|
,#{writer}
|
|
,'write'
|
|
)
|
|
ON CONFLICT (OBJID) DO
|
|
UPDATE
|
|
SET
|
|
PROJECT_OBJID=#{project_objid}
|
|
,UNIT_CODE=#{unit_code}
|
|
,PART_OBJID=#{part_objid}
|
|
,ISSUE_CATEGORY=#{issue_category}
|
|
,ISSUE_TYPE=#{issue_type}
|
|
,CONTENT=#{content}
|
|
,DESIGN_USERID=#{design_userid}
|
|
,DESIGN_RESULT=#{design_result}
|
|
,DESIGN_DATE=#{design_date}
|
|
,PURCHASE_USERID=#{purchase_userid}
|
|
,PURCHASE_RESULT=#{purchase_result}
|
|
,PURCHASE_DATE=#{purchase_date}
|
|
,QUALITY_USERID=#{quality_userid}
|
|
,QUALITY_RESULT=#{quality_result}
|
|
,QUALITY_DATE=#{quality_date}
|
|
,PRODUCTION_USERID=#{production_userid}
|
|
,PRODUCTION_RESULT=#{production_result}
|
|
,PRODUCTION_DATE=#{production_date}
|
|
</update>
|
|
|
|
|
|
<!-- 이슈 삭제 -->
|
|
<delete id="planningDelete" parameterType="map">
|
|
DELETE FROM PLANNING_ISSUE WHERE OBJID = #{OBJID}
|
|
</delete>
|
|
|
|
|
|
<update id="planningrelease" parameterType="map">
|
|
UPDATE PLANNING_ISSUE SET
|
|
STATUS='release'
|
|
WHERE OBJID = #{OBJID}
|
|
</update>
|
|
|
|
|
|
<!-- 생산관리 -> 출고관리-->
|
|
<select id="releaseMgmtGridList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
CM.*
|
|
,RM.OBJID AS RELEASE_OBJID
|
|
,RM.PARENT_OBJID
|
|
,RM.RELEASE_CAR_NO
|
|
,RM.RELEASE_DATE
|
|
,RM.TASK_OVER_USER_ID
|
|
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = RM.TASK_OVER_USER_ID) AS TASK_OVER_USER_NAME
|
|
,RM.TASK_OVER_DATE
|
|
,RM.TASK_OVER_COMMENT
|
|
,RM.REGDATE AS RELEASE_REGDATE
|
|
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = RM.WRITER) AS RELEASE_WRITER
|
|
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID::VARCHAR = RM.OBJID AND DOC_TYPE='RELEASE_CHECK' AND UPPER(STATUS) = 'ACTIVE') AS RELEASE_CHECK_CNT
|
|
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID::VARCHAR = RM.OBJID AND DOC_TYPE='RELEASE_ORDER' AND UPPER(STATUS) = 'ACTIVE') AS RELEASE_ORDER_CNT
|
|
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID::VARCHAR = RM.OBJID AND DOC_TYPE='RELEASE_TAKING_OVER' AND UPPER(STATUS) = 'ACTIVE') AS RELEASE_TAKING_OVER_CNT
|
|
,CASE
|
|
WHEN (COALESCE(TRIM(RM.RELEASE_DATE),'') !='') THEN '출고완료'
|
|
WHEN TO_CHAR(NOW(),'YYYYMMDD') <![CDATA[ <= ]]> TO_CHAR(TO_DATE(CM.CONTRACT_COST_RESULT_DATE,'YYYY-MM-DD'),'YYYYMMDD') THEN '취소'
|
|
WHEN (COALESCE(TRIM(CM.CONTRACT_COST_RESULT_DATE),'') !='') THEN '수주'
|
|
WHEN TO_CHAR(NOW(),'YYYYMMDD') >= TO_CHAR(TO_DATE(CM.DUE_DATE,'YYYY-MM-DD'),'YYYYMMDD') THEN '지연'
|
|
ELSE '계약'
|
|
END RELEASE_STATUS_TITLE
|
|
,RM.INSTALL_COMPLETE_DATE
|
|
,RM.INSTALL_RESULT
|
|
,(SELECT COUNT(1) FROM INSPECTION_MGMT AS O WHERE O.PARENT_OBJID = CM.OBJID) AS INSPECTION_CNT
|
|
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = CM.OBJID AND DOC_TYPE='ADMISSION_INSPECTION_FILE' AND UPPER(STATUS) = 'ACTIVE') AS ADMISSION_INSPECTION_CNT
|
|
FROM
|
|
<include refid="fundMgmt.fundMgmtBase"/> CM
|
|
LEFT OUTER JOIN
|
|
RELEASE_MGMT RM
|
|
ON CM.OBJID::VARCHAR = RM.PARENT_OBJID
|
|
<!-- AND CM.PRODUCT_GROUP = RM.PRODUCT_GROUP -->
|
|
AND CM.PRODUCT = RM.PRODUCT
|
|
WHERE 1=1
|
|
<if test="Year !=null and Year != '' ">
|
|
AND TO_CHAR(CM.REGDATE,'YYYY') = #{Year}
|
|
</if>
|
|
|
|
<!-- <if test="project_no !=null and project_no != '' ">
|
|
AND CM.OBJID = #{project_no}
|
|
</if> -->
|
|
<if test="project_nos != null and project_nos != ''">
|
|
AND CM.OBJID IN
|
|
<foreach item="state" collection="project_nos.split(',')"
|
|
open="(" separator="," close=")">
|
|
#{state}
|
|
</foreach>
|
|
</if>
|
|
|
|
<if test="category_cd !=null and category_cd != '' ">
|
|
AND CM.category_cd = #{category_cd}
|
|
</if>
|
|
|
|
<if test="customer_objid !=null and customer_objid != '' ">
|
|
AND CM.CUSTOMER_OBJID = #{customer_objid}
|
|
</if>
|
|
|
|
<if test="product != null and product !='' ">
|
|
AND CM.PRODUCT = #{product}
|
|
<!-- AND (SELECT PRODUCT FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) = #{product} -->
|
|
</if>
|
|
|
|
<if test="pm_user_id !=null and pm_user_id !=''">
|
|
AND CM.PM_USER_ID = #{pm_user_id}
|
|
<!-- AND (SELECT PM_USER_ID FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) = #{pm_user_id} -->
|
|
</if>
|
|
ORDER BY SUBSTRING(PROJECT_NO,POSITION('-' IN PROJECT_NO)+1) DESC
|
|
</select>
|
|
|
|
|
|
<select id="selectSetupMgmtList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
T.*
|
|
,CASE WHEN TASK_CNT = '0' THEN '0'
|
|
ELSE ((COMPLETE_CNT::FLOAT / TASK_CNT) * 100)::integer
|
|
END SETUP_RATE
|
|
FROM
|
|
(SELECT
|
|
(SELECT COUNT(1) FROM SETUP_WBS_TASK AS O WHERE O.CONTRACT_OBJID = T.OBJID AND (PARENT_OBJID IS NOT NULL AND PARENT_OBJID != '')) AS TASK_CNT
|
|
,(SELECT COUNT(1) FROM SETUP_WBS_TASK AS O WHERE O.CONTRACT_OBJID = T.OBJID and (O.SETUP_ACT_END !='' AND O.SETUP_ACT_END IS not null) AND (PARENT_OBJID IS NOT NULL AND PARENT_OBJID != '')) AS COMPLETE_CNT
|
|
,(SELECT SUM(COALESCE(EMPLOYEES_IN,'0')::integer) FROM SETUP_WBS_TASK AS O WHERE O.CONTRACT_OBJID = T.OBJID AND (PARENT_OBJID IS NOT NULL OR PARENT_OBJID != '')) AS EMPLOYEES_IN
|
|
,(SELECT SUM(COALESCE(EMPLOYEES_OUT,'0')::integer) FROM SETUP_WBS_TASK AS O WHERE O.CONTRACT_OBJID = T.OBJID AND (PARENT_OBJID IS NOT NULL OR PARENT_OBJID != '')) AS EMPLOYEES_OUT
|
|
,(SELECT SUM(COALESCE(EMPLOYEES_OUT,'0')::integer+COALESCE(EMPLOYEES_IN,'0')::integer) FROM SETUP_WBS_TASK AS O WHERE O.CONTRACT_OBJID = T.OBJID) AS EMPLOYEES_TOTAL
|
|
,OBJID
|
|
,CATEGORY_CD
|
|
,CODE_NAME(CATEGORY_CD) AS CATEGORY_NAME
|
|
,CUSTOMER_OBJID
|
|
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID = T.CUSTOMER_OBJID::NUMERIC) AS CUSTOMER_NAME
|
|
,PRODUCT
|
|
,CODE_NAME(PRODUCT) AS PRODUCT_NAME
|
|
,(SELECT O.CUSTOMER_PROJECT_NAME FROM CONTRACT_MGMT AS O WHERE O.OBJID = CONTRACT_OBJID) AS CUSTOMER_PROJECT_NAME
|
|
,STATUS_CD
|
|
,CODE_NAME(STATUS_CD) AS STATUS_NAME
|
|
,DUE_DATE
|
|
,LOCATION
|
|
,SETUP
|
|
,FACILITY
|
|
,CODE_NAME(FACILITY) AS FACILITY_NAME
|
|
,FACILITY_QTY
|
|
,FACILITY_TYPE
|
|
,FACILITY_DEPTH
|
|
,PRODUCTION_NO
|
|
,BUS_CAL_CD
|
|
,CODE_NAME(BUS_CAL_CD) AS BUS_CAL_NAME
|
|
,CATEGORY1_CD
|
|
,CODE_NAME(CATEGORY1_CD) AS CATEGORY1_NAME
|
|
,CHG_USER_ID
|
|
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = T.CHG_USER_ID ) AS CHG_USER_NAME
|
|
,PLAN_DATE
|
|
,COMPLETE_DATE
|
|
,RESULT_CD
|
|
,CODE_NAME(RESULT_CD) AS RESULT_NAME
|
|
,PROJECT_NO
|
|
,PM_USER_ID
|
|
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = (SELECT O.PM_USER_ID FROM CONTRACT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID)) AS PM_USER_NAME
|
|
,CONTRACT_PRICE
|
|
,CONTRACT_PRICE_CURRENCY
|
|
,CONTRACT_CURRENCY
|
|
,CODE_NAME(CONTRACT_CURRENCY) AS CONTRACT_CURRENCY_NAME
|
|
,REGDATE
|
|
,TO_CHAR(REGDATE,'YYYY-MM-DD') AS REG_DATE
|
|
,WRITER
|
|
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = T.WRITER ) AS WRITER_NAME
|
|
,CONTRACT_NO
|
|
,CUSTOMER_EQUIP_NAME
|
|
,REQ_DEL_DATE
|
|
,CONTRACT_DEL_DATE
|
|
,CONTRACT_COMPANY
|
|
,CODE_NAME(CONTRACT_COMPANY) AS CONTRACT_COMPANY_NAME
|
|
,CONTRACT_DATE
|
|
,PO_NO
|
|
,MANUFACTURE_PLANT
|
|
,CODE_NAME(MANUFACTURE_PLANT) AS MANUFACTURE_PLANT_NAME
|
|
,CONTRACT_RESULT
|
|
,CODE_NAME(CONTRACT_RESULT) AS CONTRACT_RESULT_NAME
|
|
,CODE_NAME(AREA_CD) AS AREA_NAME
|
|
,PROJECT_NAME
|
|
,MECHANICAL_TYPE
|
|
FROM
|
|
PROJECT_MGMT AS T
|
|
WHERE 1=1
|
|
<if test="Year !=null and Year != '' ">
|
|
AND TO_CHAR(REGDATE,'YYYY') = #{Year}
|
|
</if>
|
|
|
|
<!-- <if test="project_no !=null and project_no != '' ">
|
|
AND OBJID = #{project_no}
|
|
</if> -->
|
|
|
|
<if test="project_nos != null and project_nos != ''">
|
|
AND OBJID IN
|
|
<foreach item="state" collection="project_nos.split(',')"
|
|
open="(" separator="," close=")">
|
|
#{state}
|
|
</foreach>
|
|
</if>
|
|
|
|
<if test="customer_objid !=null and customer_objid != '' ">
|
|
AND CUSTOMER_OBJID = #{customer_objid}
|
|
</if>
|
|
|
|
<if test="product !=null and product != '' ">
|
|
AND PRODUCT = #{product}
|
|
</if>
|
|
|
|
<if test="pm_user_id !=null and pm_user_id != '' ">
|
|
AND PM_USER_ID = #{pm_user_id}
|
|
</if>
|
|
|
|
<if test="unit_code !=null and unit_code != '' ">
|
|
AND UNIT_CODE = #{unit_code}
|
|
</if>
|
|
|
|
<if test="writer !=null and writer != '' ">
|
|
AND WRITER = #{writer}
|
|
</if>
|
|
ORDER BY SUBSTRING(PROJECT_NO,POSITION('-' IN PROJECT_NO)+1) DESC ) AS T
|
|
</select>
|
|
|
|
|
|
|
|
|
|
<!-- //정전개 조회 쿼리 -->
|
|
<select id="selectStructureAscendingList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
WITH RECURSIVE VIEW_BOM(
|
|
BOM_REPORT_OBJID,
|
|
PARENT_OBJID,
|
|
CHILD_OBJID,
|
|
PARENT_PART_NO,
|
|
PART_NO,
|
|
REGDATE,
|
|
QTY,
|
|
QTY_TEMP,
|
|
PART_OBJID,
|
|
<!--
|
|
DESIGN_DATE,
|
|
EO_NO,
|
|
EO_DATE,
|
|
PART_NO_TITLE,
|
|
PART_NAME,
|
|
REV,
|
|
MATERIAL,
|
|
SUB_MATERIAL,
|
|
SPEC,
|
|
WEIGHT,
|
|
PART_OBJID,
|
|
THICKNESS,
|
|
WIDTH,
|
|
HEIGHT,
|
|
OUT_DIAMETER,
|
|
IN_DIAMETER,
|
|
LENGTH,
|
|
MAKER,
|
|
POST_PROCESSING,
|
|
PART_MNG_NO,
|
|
PARENT_PART_MNG_NO,
|
|
-->
|
|
LEV,
|
|
PATH,
|
|
PATH2,
|
|
CYCLE,
|
|
SEQ,
|
|
LAST_PART_OBJID
|
|
) AS (
|
|
SELECT
|
|
A.BOM_REPORT_OBJID,
|
|
A.PARENT_OBJID,
|
|
A.CHILD_OBJID,
|
|
A.PARENT_PART_NO,
|
|
A.PART_NO,
|
|
A.REGDATE,
|
|
A.QTY,
|
|
A.QTY_TEMP,
|
|
NVL(A.LAST_PART_OBJID, A.PART_NO) PART_OBJID,
|
|
<!--
|
|
B.DESIGN_DATE,
|
|
B.EO_NO,
|
|
B.EO_DATE,
|
|
B.PART_NO AS PART_NO_TITLE,
|
|
B.PART_NAME,
|
|
B.REVISION AS REV,
|
|
B.MATERIAL,
|
|
B.SUB_MATERIAL,
|
|
B.SPEC,
|
|
B.WEIGHT,
|
|
B.OBJID AS PART_OBJID,
|
|
B.THICKNESS,
|
|
B.WIDTH,
|
|
B.HEIGHT,
|
|
B.OUT_DIAMETER,
|
|
B.IN_DIAMETER,
|
|
B.LENGTH,
|
|
B.MAKER,
|
|
B.POST_PROCESSING,
|
|
A.PART_MNG_NO,
|
|
A.PARENT_PART_MNG_NO,
|
|
-->
|
|
1,
|
|
ARRAY [A.CHILD_OBJID::TEXT],
|
|
ARRAY [A.SEQ::TEXT],
|
|
FALSE,
|
|
A.SEQ,
|
|
A.LAST_PART_OBJID
|
|
FROM
|
|
BOM_PART_QTY A
|
|
WHERE 1=1
|
|
AND (A.PARENT_OBJID IS NULL OR A.PARENT_OBJID = '')
|
|
AND A.BOM_REPORT_OBJID=#{OBJID}
|
|
AND A.STATUS in ('beforeEdit', 'editing', 'deleting', 'deploy')
|
|
<!--
|
|
(
|
|
SELECT
|
|
BPQ.*
|
|
|
|
,(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PART_NO) AS PART_MNG_NO
|
|
,(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PARENT_PART_NO) AS PARENT_PART_MNG_NO
|
|
|
|
FROM BOM_PART_QTY BPQ
|
|
WHERE (PARENT_PART_NO IS NULL OR PARENT_PART_NO = '')
|
|
AND BPQ.BOM_REPORT_OBJID=#{OBJID}
|
|
AND STATUS in ('beforeEdit', 'editing', 'deleting', 'deploy')
|
|
<if test="customer_cd != null and !''.equals(customer_cd)">
|
|
AND EXISTS (SELECT 1 FROM PART_BOM_REPORT R
|
|
WHERE R.CUSTOMER_OBJID = #{customer_cd}
|
|
|
|
AND R.OBJID = BPQ.BOM_REPORT_OBJID)
|
|
</if>
|
|
<if test="project_name != null and !''.equals(project_name)">
|
|
AND EXISTS (SELECT 1 FROM PART_BOM_REPORT R
|
|
WHERE R.CONTRACT_OBJID = #{project_name}
|
|
AND R.OBJID = BPQ.BOM_REPORT_OBJID)
|
|
</if>
|
|
<if test="unit_code != null and !''.equals(unit_code)">
|
|
AND EXISTS (SELECT 1 FROM PART_BOM_REPORT R
|
|
WHERE R.UNIT_CODE = #{unit_code}
|
|
AND R.OBJID = BPQ.BOM_REPORT_OBJID)
|
|
</if>
|
|
) A
|
|
,PART_MNG B,
|
|
PART_BOM_REPORT C
|
|
WHERE 1=1
|
|
AND A.BOM_REPORT_OBJID=#{OBJID}
|
|
-->
|
|
<!--
|
|
AND C.OBJID = A.BOM_REPORT_OBJID
|
|
AND NVL(A.LAST_PART_OBJID, A.PART_NO) = B.OBJID
|
|
AND A.LAST_PART_OBJID = B.OBJID
|
|
AND B.IS_LAST='1'
|
|
AND C.OBJID=#{OBJID}
|
|
-->
|
|
<!-- <if test="customer_cd != null and !''.equals(customer_cd)">
|
|
AND C.CUSTOMER_OBJID = #{customer_cd}
|
|
</if>
|
|
|
|
<if test="project_name != null and !''.equals(project_name)">
|
|
AND C.CONTRACT_OBJID = #{project_name}
|
|
</if>
|
|
<if test="unit_code != null and !''.equals(unit_code)">
|
|
AND C.UNIT_CODE = #{unit_code}
|
|
</if> -->
|
|
|
|
UNION ALL
|
|
|
|
SELECT
|
|
A.BOM_REPORT_OBJID,
|
|
A.PARENT_OBJID,
|
|
A.CHILD_OBJID,
|
|
A.PARENT_PART_NO,
|
|
A.PART_NO,
|
|
A.REGDATE,
|
|
A.QTY,
|
|
A.QTY_TEMP,
|
|
NVL(A.LAST_PART_OBJID, A.PART_NO) PART_OBJID,
|
|
<!--
|
|
B.DESIGN_DATE,
|
|
B.EO_NO,
|
|
B.EO_DATE,
|
|
B.PART_NO AS PART_NO_TITLE,
|
|
B.PART_NAME,
|
|
B.REVISION AS REV,
|
|
B.MATERIAL,
|
|
B.SUB_MATERIAL,
|
|
B.SPEC,
|
|
B.WEIGHT,
|
|
B.OBJID AS PART_OBJID,
|
|
B.THICKNESS,
|
|
B.WIDTH,
|
|
B.HEIGHT,
|
|
B.OUT_DIAMETER,
|
|
B.IN_DIAMETER,
|
|
B.LENGTH,
|
|
B.MAKER,
|
|
B.POST_PROCESSING,
|
|
A.PART_MNG_NO,
|
|
A.PARENT_PART_MNG_NO,
|
|
-->
|
|
LEV + 1,
|
|
PATH||A.CHILD_OBJID::TEXT,
|
|
PATH2||A.SEQ::TEXT,
|
|
A.PARENT_OBJID = ANY(PATH),
|
|
A.SEQ,
|
|
A.LAST_PART_OBJID
|
|
FROM
|
|
BOM_PART_QTY A
|
|
<!--
|
|
(
|
|
SELECT
|
|
BPQ.*,
|
|
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PART_NO) AS PART_MNG_NO,
|
|
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PARENT_PART_NO) AS PARENT_PART_MNG_NO
|
|
FROM BOM_PART_QTY BPQ
|
|
WHERE 1=1
|
|
) A,
|
|
PART_MNG B,
|
|
PART_BOM_REPORT C,
|
|
-->
|
|
,VIEW_BOM V
|
|
WHERE 1=1
|
|
AND A.PARENT_OBJID = V.CHILD_OBJID
|
|
AND V.BOM_REPORT_OBJID = A.BOM_REPORT_OBJID
|
|
AND A.STATUS in ('beforeEdit', 'editing', 'deleting', 'deploy')
|
|
<!--
|
|
AND C.OBJID = A.BOM_REPORT_OBJID
|
|
AND NVL(A.LAST_PART_OBJID, A.PART_NO) = B.OBJID
|
|
AND A.PARENT_OBJID = D.CHILD_OBJID
|
|
-->
|
|
)
|
|
SELECT
|
|
V.BOM_REPORT_OBJID,
|
|
V.PARENT_PART_NO,
|
|
V.CHILD_OBJID,
|
|
V.REGDATE,
|
|
V.QTY,
|
|
V.QTY_TEMP,
|
|
V.PART_OBJID,
|
|
CASE WHEN AS_WBS.PART_OBJID IS NULL
|
|
THEN V.PART_OBJID
|
|
ELSE AS_WBS.PART_OBJID END AS PART_OBJID,
|
|
V.LEV,
|
|
V.LEV AS LEVEL,
|
|
V.SEQ,
|
|
<!--
|
|
V.PART_MNG_NO,
|
|
V.PARENT_PART_MNG_NO,
|
|
-->
|
|
B.DESIGN_DATE,
|
|
B.EO_NO,
|
|
B.EO_DATE,
|
|
(SELECT O.PART_NO FROM PART_MNG AS O WHERE O.OBJID = V.CHILD_OBJID) AS PART_NO_TITLE,
|
|
B.PART_NAME,
|
|
B.MATERIAL,
|
|
B.SUB_MATERIAL,
|
|
B.WEIGHT,
|
|
B.REVISION,
|
|
B.PART_NO,
|
|
B.THICKNESS,
|
|
B.WIDTH,
|
|
B.HEIGHT,
|
|
B.OUT_DIAMETER,
|
|
B.IN_DIAMETER,
|
|
B.LENGTH,
|
|
B.SPEC,
|
|
B.REMARK,
|
|
B.MAKER,
|
|
B.POST_PROCESSING,
|
|
B.UNIT_TITLE,
|
|
B.PART_TYPE_TITLE,
|
|
B.CU01_CNT AS FILE_3D_CNT,
|
|
B.CU02_CNT AS FILE_2D_CNT,
|
|
B.CU03_CNT AS FILE_PDF_CNT,
|
|
|
|
(
|
|
SELECT
|
|
CASE
|
|
WHEN COUNT(*) > 0 THEN 0
|
|
ELSE 1
|
|
END LEAF
|
|
FROM VIEW_BOM VT
|
|
WHERE V.BOM_REPORT_OBJID = VT.BOM_REPORT_OBJID
|
|
AND V.PART_OBJID = VT.PARENT_PART_NO
|
|
<!--
|
|
AND V.PART_MNG_NO = VT.PARENT_PART_MNG_NO
|
|
-->
|
|
) AS LEAF
|
|
,AS_WBS.OBJID AS ASS_OBJID
|
|
<!-- ,AS_WBS.RECEIVE_DATE
|
|
,AS_WBS.RECEIVE_QTY
|
|
,AS_WBS.RECEIVE_USER_ID
|
|
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = AS_WBS.RECEIVE_USER_ID) AS RECEIVE_USER_NAME -->
|
|
,AS_WBS.ASSEMBLY_USER_ID
|
|
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = AS_WBS.ASSEMBLY_USER_ID) AS ASSEMBLY_USER_NAME
|
|
<!-- ,AS_WBS.TRANSFER_USER_ID
|
|
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = AS_WBS.TRANSFER_USER_ID) AS TRANSFER_USER_NAME -->
|
|
,AS_WBS.ASSEMBLY_DATE
|
|
,AS_WBS.INSOURCING
|
|
,AS_WBS.OUTSOURCING
|
|
,RH.RECEIVE_QTY
|
|
<!-- ,DH.DELIVERY_QTY -->
|
|
,CASE WHEN PART_TYPE_TITLE = '구매품표준' THEN (DH.DELIVERY_QTY || ' / ' || POP.ORDER_QTY)
|
|
ELSE DH.DELIVERY_QTY::TEXT END
|
|
<!--
|
|
,(SELECT ARRAY_TO_STRING(ARRAY_AGG(ARRIVAL_PLAN_DATE),',') FROM ARRIVAL_PLAN A WHERE A.PART_OBJID = V.PART_OBJID AND ARRIVAL_PLAN_DATE > TO_CHAR((NOW() - INTERVAL '7 day'), 'YYYY-MM-DD') ) ARRIVAL_PLAN_DATES
|
|
-->
|
|
,(SELECT ARRAY_TO_STRING(ARRAY_AGG(DISTINCT RECEIPT_DATE), ',')
|
|
RECEIPT_DATE
|
|
FROM ARRIVAL_PLAN A
|
|
WHERE A.PART_OBJID = V.PART_OBJID
|
|
ORDER BY RECEIPT_DATE
|
|
LIMIT 3
|
|
) RECEIPT_DATES
|
|
,(
|
|
WITH
|
|
today_date AS (
|
|
SELECT ARRIVAL_PLAN_DATE
|
|
FROM ARRIVAL_PLAN A
|
|
WHERE A.PART_OBJID = V.PART_OBJID
|
|
AND ARRIVAL_PLAN_DATE = TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD')
|
|
LIMIT 1
|
|
),
|
|
future_dates AS (
|
|
SELECT ARRIVAL_PLAN_DATE
|
|
FROM ARRIVAL_PLAN A
|
|
WHERE A.PART_OBJID = V.PART_OBJID
|
|
AND ARRIVAL_PLAN_DATE > TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD')
|
|
ORDER BY ARRIVAL_PLAN_DATE
|
|
LIMIT 3
|
|
),
|
|
past_dates AS (
|
|
SELECT ARRIVAL_PLAN_DATE
|
|
FROM ARRIVAL_PLAN A
|
|
WHERE A.PART_OBJID = V.PART_OBJID
|
|
AND ARRIVAL_PLAN_DATE < TO_CHAR(CURRENT_DATE, 'YYYY-MM-DD')
|
|
ORDER BY ARRIVAL_PLAN_DATE DESC
|
|
LIMIT 3
|
|
),
|
|
combined_dates AS (
|
|
SELECT ARRIVAL_PLAN_DATE FROM today_date
|
|
UNION ALL
|
|
SELECT ARRIVAL_PLAN_DATE FROM future_dates
|
|
UNION ALL
|
|
SELECT ARRIVAL_PLAN_DATE FROM past_dates
|
|
)
|
|
SELECT (SELECT ARRAY_TO_STRING(ARRAY_AGG(ARRIVAL_PLAN_DATE), ',')
|
|
FROM (
|
|
SELECT ARRIVAL_PLAN_DATE
|
|
FROM combined_dates
|
|
ORDER BY ARRIVAL_PLAN_DATE
|
|
LIMIT 3
|
|
) T) AS ARRIVAL_PLAN_DATES
|
|
) ARRIVAL_PLAN_DATES
|
|
FROM
|
|
VIEW_BOM V
|
|
LEFT OUTER JOIN <include refid="partMng.partMngBaseSimple"/> B
|
|
ON NVL(V.LAST_PART_OBJID, V.PART_OBJID) = B.OBJID
|
|
LEFT OUTER JOIN ASSEMBLY_WBS_TASK AS AS_WBS
|
|
ON NVL(V.LAST_PART_OBJID, V.PART_OBJID) = AS_WBS.PART_OBJID
|
|
AND V.BOM_REPORT_OBJID = AS_WBS.PARENT_OBJID
|
|
AND V.CHILD_OBJID = AS_WBS.BOM_QTY_CHILD_OBJID
|
|
|
|
LEFT OUTER JOIN (
|
|
SELECT
|
|
SUM(POP.ORDER_QTY::NUMERIC) AS ORDER_QTY
|
|
,PART_OBJID
|
|
FROM
|
|
PURCHASE_ORDER_MASTER POM
|
|
,PURCHASE_ORDER_PART POP
|
|
WHERE POM.OBJID = POP.PURCHASE_ORDER_MASTER_OBJID
|
|
AND POM.CONTRACT_MGMT_OBJID = #{project_name}
|
|
GROUP BY POP.PART_OBJID
|
|
)POP
|
|
ON POP.PART_OBJID = V.PART_OBJID
|
|
|
|
LEFT OUTER JOIN (
|
|
SELECT
|
|
O.CONTRACT_MGMT_OBJID
|
|
,O.UNIT
|
|
,O.PART_OBJID
|
|
,SUM(RECEIVE_QTY) AS RECEIVE_QTY
|
|
FROM
|
|
(SELECT
|
|
IMO.*,
|
|
IM.PART_OBJID ,
|
|
IM.CONTRACT_OBJID
|
|
FROM
|
|
(
|
|
SELECT
|
|
CONTRACT_MGMT_OBJID,
|
|
UNIT,
|
|
PARENT_OBJID,
|
|
SUM(case when OUT_QTY is null or OUT_QTY = '' then 0 else OUT_QTY::integer end) as RECEIVE_QTY
|
|
FROM
|
|
INVENTORY_MGMT_OUT IMO
|
|
WHERE
|
|
CONTRACT_MGMT_OBJID = #{project_name}
|
|
AND UNIT = #{unit_code}
|
|
GROUP BY
|
|
CONTRACT_MGMT_OBJID,
|
|
UNIT,
|
|
PARENT_OBJID ) IMO
|
|
LEFT OUTER JOIN INVENTORY_MGMT IM ON
|
|
IMO.PARENT_OBJID = IM.OBJID ) O
|
|
GROUP BY CONTRACT_MGMT_OBJID, UNIT, PART_OBJID
|
|
<!-- SELECT
|
|
PARENT_OBJID,
|
|
PART_OBJID,
|
|
SUM(CASE WHEN RECEIVE_QTY IS NULL OR RECEIVE_QTY = '' THEN 0 ELSE RECEIVE_QTY::integer END) AS RECEIVE_QTY
|
|
FROM
|
|
RECEIVE_HISTORY RH
|
|
WHERE
|
|
1=1
|
|
GROUP BY PARENT_OBJID, PART_OBJID -->
|
|
) AS RH
|
|
ON V.PART_OBJID = RH.PART_OBJID
|
|
<!-- AND RH.CONTRACT_OBJID = (SELECT CONTRACT_OBJID FROM PART_BOM_REPORT PBR WHERE V.BOM_REPORT_OBJID = PBR.OBJID) -->
|
|
AND RH.CONTRACT_MGMT_OBJID = (SELECT CONTRACT_OBJID FROM PART_BOM_REPORT PBR WHERE V.BOM_REPORT_OBJID = PBR.OBJID)
|
|
AND RH.UNIT = (SELECT UNIT_CODE FROM PART_BOM_REPORT PBR WHERE V.BOM_REPORT_OBJID = PBR.OBJID)
|
|
<!-- AND V.BOM_REPORT_OBJID = RH.PARENT_OBJID -->
|
|
LEFT OUTER JOIN (
|
|
SELECT
|
|
<!-- IMI.*, -->
|
|
IM.PART_OBJID
|
|
,SUM(DELIVERY_QTY) AS DELIVERY_QTY
|
|
,IM.CONTRACT_OBJID
|
|
<!-- ,IM.UNIT -->
|
|
FROM
|
|
(
|
|
SELECT
|
|
PARENT_OBJID,
|
|
SUM(CASE WHEN RECEIPT_QTY IS NULL OR RECEIPT_QTY = '' THEN 0 ELSE RECEIPT_QTY::INTEGER - coalesce(MOVE_QTY::INTEGER, 0) END) AS DELIVERY_QTY
|
|
FROM INVENTORY_MGMT_in IMI
|
|
WHERE CONTRACT_MGMT_OBJID = #{project_name}
|
|
GROUP BY PARENT_OBJID ) IMI
|
|
LEFT OUTER JOIN INVENTORY_MGMT IM
|
|
ON IMI.PARENT_OBJID = IM.OBJID
|
|
GROUP BY IM.PART_OBJID, CONTRACT_OBJID) AS DH
|
|
ON V.PART_OBJID = DH.PART_OBJID
|
|
AND DH.CONTRACT_OBJID = (SELECT CONTRACT_OBJID FROM PART_BOM_REPORT PBR WHERE V.BOM_REPORT_OBJID = PBR.OBJID)
|
|
<!-- AND DH.UNIT = (SELECT UNIT_CODE FROM PART_BOM_REPORT PBR WHERE V.BOM_REPORT_OBJID = PBR.OBJID) -->
|
|
<!-- LEFT OUTER JOIN (
|
|
SELECT
|
|
PART_OBJID
|
|
,SUM(RECEIPT_QTY::INTEGER) as DELIVERY_QTY
|
|
,SUM(DELIVERY_QTY::INTEGER) as DELIVERY_QTY
|
|
FROM
|
|
ARRIVAL_PLAN
|
|
DELIVERY_HISTORY
|
|
GROUP BY PART_OBJID
|
|
) AS DH
|
|
ON DH.PART_OBJID = V.PART_OBJID -->
|
|
WHERE 1=1
|
|
<!--
|
|
AND IS_LAST='1'
|
|
-->
|
|
ORDER BY V.PATH2
|
|
</select>
|
|
|
|
|
|
<!-- 공정 실적 등록 -->
|
|
<update id="mergeassemblyList" parameterType="map">
|
|
INSERT INTO ASSEMBLY_WBS_TASK
|
|
(
|
|
OBJID
|
|
,BOM_QTY_CHILD_OBJID
|
|
,PART_OBJID
|
|
,PARENT_OBJID
|
|
<!-- ,RECEIVE_DATE
|
|
,RECEIVE_QTY
|
|
,RECEIVE_USER_ID -->
|
|
,ASSEMBLY_USER_ID
|
|
<!-- ,TRANSFER_USER_ID -->
|
|
,ASSEMBLY_DATE
|
|
,INSOURCING
|
|
,OUTSOURCING
|
|
,WRITER
|
|
,REGDATE
|
|
)
|
|
VALUES
|
|
(
|
|
#{OBJID}
|
|
,#{CHILD_OBJID}
|
|
,#{PART_OBJID}
|
|
,#{PARENT_OBJID}
|
|
<!-- ,#{RECEIVE_DATE}
|
|
,#{RECEIVE_QTY}
|
|
,#{RECEIVE_USER_ID} -->
|
|
,#{ASSEMBLY_USER_ID}
|
|
<!-- ,#{TRANSFER_USER_ID} -->
|
|
,#{ASSEMBLY_DATE}
|
|
,#{INSOURCING}
|
|
,#{OUTSOURCING}
|
|
,#{WRITER}
|
|
,now()
|
|
) ON CONFLICT (OBJID) DO
|
|
UPDATE
|
|
SET
|
|
<!-- RECEIVE_DATE = #{RECEIVE_DATE}
|
|
,RECEIVE_QTY = #{RECEIVE_QTY}
|
|
,RECEIVE_USER_ID = #{RECEIVE_USER_ID} -->
|
|
ASSEMBLY_USER_ID = #{ASSEMBLY_USER_ID}
|
|
<!-- ,TRANSFER_USER_ID = #{TRANSFER_USER_ID} -->
|
|
,ASSEMBLY_DATE = #{ASSEMBLY_DATE}
|
|
,INSOURCING = #{INSOURCING}
|
|
,OUTSOURCING = #{OUTSOURCING}
|
|
,WRITER = #{WRITER}
|
|
</update>
|
|
|
|
<select id="inspectionGridList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
(SELECT COUNT(1) FROM INSPECTION_MGMT AS O WHERE O.PARENT_OBJID = T.OBJID) AS INSPECTION_CNT
|
|
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = T.OBJID AND DOC_TYPE='ADMISSION_INSPECTION_FILE' AND UPPER(STATUS) = 'ACTIVE') AS ADMISSION_INSPECTION_CNT
|
|
,OBJID
|
|
,CATEGORY_CD
|
|
,CODE_NAME(CATEGORY_CD) AS CATEGORY_NAME
|
|
,CUSTOMER_OBJID
|
|
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID = T.CUSTOMER_OBJID::NUMERIC) AS CUSTOMER_NAME
|
|
,PRODUCT
|
|
,CODE_NAME(PRODUCT) AS PRODUCT_NAME
|
|
,(SELECT O.CUSTOMER_PROJECT_NAME FROM CONTRACT_MGMT AS O WHERE O.OBJID = CONTRACT_OBJID) AS CUSTOMER_PROJECT_NAME
|
|
,STATUS_CD
|
|
,CODE_NAME(STATUS_CD) AS STATUS_NAME
|
|
,DUE_DATE
|
|
,LOCATION
|
|
,SETUP
|
|
,FACILITY
|
|
,CODE_NAME(FACILITY) AS FACILITY_NAME
|
|
,FACILITY_QTY
|
|
,FACILITY_TYPE
|
|
,FACILITY_DEPTH
|
|
,PRODUCTION_NO
|
|
,BUS_CAL_CD
|
|
,CODE_NAME(BUS_CAL_CD) AS BUS_CAL_NAME
|
|
,CATEGORY1_CD
|
|
,CODE_NAME(CATEGORY1_CD) AS CATEGORY1_NAME
|
|
,CHG_USER_ID
|
|
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = T.CHG_USER_ID ) AS CHG_USER_NAME
|
|
,PLAN_DATE
|
|
,COMPLETE_DATE
|
|
,RESULT_CD
|
|
,CODE_NAME(RESULT_CD) AS RESULT_NAME
|
|
,PROJECT_NO
|
|
,PM_USER_ID
|
|
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = (SELECT O.PM_USER_ID FROM CONTRACT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID)) AS PM_USER_NAME
|
|
,CONTRACT_PRICE
|
|
,CONTRACT_PRICE_CURRENCY
|
|
,CONTRACT_CURRENCY
|
|
,CODE_NAME(CONTRACT_CURRENCY) AS CONTRACT_CURRENCY_NAME
|
|
,REGDATE
|
|
,TO_CHAR(REGDATE,'YYYY-MM-DD') AS REG_DATE
|
|
,WRITER
|
|
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = T.WRITER ) AS WRITER_NAME
|
|
,CONTRACT_NO
|
|
,CUSTOMER_EQUIP_NAME
|
|
,REQ_DEL_DATE
|
|
,CONTRACT_DEL_DATE
|
|
,CONTRACT_COMPANY
|
|
,CODE_NAME(CONTRACT_COMPANY) AS CONTRACT_COMPANY_NAME
|
|
,CONTRACT_DATE
|
|
,PO_NO
|
|
,MANUFACTURE_PLANT
|
|
,CODE_NAME(MANUFACTURE_PLANT) AS MANUFACTURE_PLANT_NAME
|
|
,CONTRACT_RESULT
|
|
,CODE_NAME(CONTRACT_RESULT) AS CONTRACT_RESULT_NAME
|
|
,CODE_NAME(AREA_CD) AS AREA_NAME
|
|
,PROJECT_NAME
|
|
,MECHANICAL_TYPE
|
|
FROM
|
|
PROJECT_MGMT AS T
|
|
WHERE 1=1
|
|
<if test="Year !=null and Year != '' ">
|
|
AND TO_CHAR(REGDATE,'YYYY') = #{Year}
|
|
</if>
|
|
<!-- <if test="project_no !=null and project_no != '' ">
|
|
AND OBJID = #{project_no}
|
|
</if> -->
|
|
<if test="project_nos != null and project_nos != ''">
|
|
AND OBJID IN
|
|
<foreach item="state" collection="project_nos.split(',')"
|
|
open="(" separator="," close=")">
|
|
#{state}
|
|
</foreach>
|
|
</if>
|
|
<if test="customer_objid !=null and customer_objid != '' ">
|
|
AND CUSTOMER_OBJID = #{customer_objid}
|
|
</if>
|
|
<if test="product !=null and product != '' ">
|
|
AND PRODUCT = #{product}
|
|
</if>
|
|
<if test="pm_user_id !=null and pm_user_id != '' ">
|
|
AND PM_USER_ID = #{pm_user_id}
|
|
</if>
|
|
<if test="unit_code !=null and unit_code != '' ">
|
|
AND UNIT_CODE = #{unit_code}
|
|
</if>
|
|
<if test="writer !=null and writer != '' ">
|
|
AND WRITER = #{writer}
|
|
</if>
|
|
ORDER BY SUBSTRING(PROJECT_NO,POSITION('-' IN PROJECT_NO)+1) DESC
|
|
</select>
|
|
|
|
<select id="workStatusByImployeeList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
OBJID
|
|
,CATEGORY_CD
|
|
,CODE_NAME(CATEGORY_CD) AS CATEGORY_NAME
|
|
,CUSTOMER_OBJID
|
|
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID = T.CUSTOMER_OBJID::NUMERIC) AS CUSTOMER_NAME
|
|
,PRODUCT
|
|
,CODE_NAME(PRODUCT) AS PRODUCT_NAME
|
|
,(SELECT O.CUSTOMER_PROJECT_NAME FROM CONTRACT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS CUSTOMER_PROJECT_NAME
|
|
,STATUS_CD
|
|
,CODE_NAME(STATUS_CD) AS STATUS_NAME
|
|
,DUE_DATE
|
|
,LOCATION
|
|
,SETUP
|
|
,FACILITY
|
|
,CODE_NAME(FACILITY) AS FACILITY_NAME
|
|
,FACILITY_QTY
|
|
,FACILITY_TYPE
|
|
,FACILITY_DEPTH
|
|
,PRODUCTION_NO
|
|
,BUS_CAL_CD
|
|
,CODE_NAME(BUS_CAL_CD) AS BUS_CAL_NAME
|
|
,CATEGORY1_CD
|
|
,CODE_NAME(CATEGORY1_CD) AS CATEGORY1_NAME
|
|
,CHG_USER_ID
|
|
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = T.CHG_USER_ID ) AS CHG_USER_NAME
|
|
,PLAN_DATE
|
|
,COMPLETE_DATE
|
|
,RESULT_CD
|
|
,CODE_NAME(RESULT_CD) AS RESULT_NAME
|
|
,PROJECT_NO
|
|
,PM_USER_ID
|
|
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = (SELECT O.PM_USER_ID FROM CONTRACT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID)) AS PM_USER_NAME
|
|
,CONTRACT_PRICE
|
|
,CONTRACT_PRICE_CURRENCY
|
|
,CONTRACT_CURRENCY
|
|
,CODE_NAME(CONTRACT_CURRENCY) AS CONTRACT_CURRENCY_NAME
|
|
,REGDATE
|
|
,TO_CHAR(REGDATE,'YYYY-MM-DD') AS REG_DATE
|
|
,WRITER
|
|
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = T.WRITER ) AS WRITER_NAME
|
|
,CONTRACT_NO
|
|
,CUSTOMER_EQUIP_NAME
|
|
,REQ_DEL_DATE
|
|
,CONTRACT_DEL_DATE
|
|
,CONTRACT_COMPANY
|
|
,CODE_NAME(CONTRACT_COMPANY) AS CONTRACT_COMPANY_NAME
|
|
,CONTRACT_DATE
|
|
,PO_NO
|
|
,MANUFACTURE_PLANT
|
|
,CODE_NAME(MANUFACTURE_PLANT) AS MANUFACTURE_PLANT_NAME
|
|
,CONTRACT_RESULT
|
|
,CODE_NAME(CONTRACT_RESULT) AS CONTRACT_RESULT_NAME
|
|
,CODE_NAME(AREA_CD) AS AREA_NAME
|
|
,PROJECT_NAME
|
|
,MECHANICAL_TYPE
|
|
,WD.WORKER_ID
|
|
,(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) AS WORKER_DEPT_NAME
|
|
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) AS WORKER_USER_NAME
|
|
,WD.WORK_HOUR
|
|
,ROUND((WD.WORK_HOUR::float / 8)::numeric,1) AS MAN_DAY
|
|
,ROUND((WD.WORK_HOUR::float / 8 / 22)::numeric,1) AS MAN_MONTH
|
|
FROM
|
|
PROJECT_MGMT AS T
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID
|
|
,WORKER_ID
|
|
,SUM(work_hour::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID != '' AND WD.CONTRACT_OBJID IS NOT null
|
|
AND STATUS = 'complete'
|
|
<if test="Year !=null and Year != '' ">
|
|
AND TO_CHAR(REGDATE,'YYYY') = #{Year}
|
|
</if>
|
|
GROUP BY CONTRACT_OBJID, WORKER_ID ) AS WD
|
|
ON WD.CONTRACT_OBJID = T.OBJID
|
|
WHERE 1=1
|
|
|
|
<!-- SELECT
|
|
T.OBJID,
|
|
T.CUSTOMER_OBJID,
|
|
(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID::VARCHAR = T.CUSTOMER_OBJID) AS CUSTOMER_NAME,
|
|
T.CONTRACT_OBJID,
|
|
(SELECT CUSTOMER_PROJECT_NAME FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS CUSTOMER_PROJECT_NAME,
|
|
(SELECT PROJECT_NAME FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PROJECT_NAME,
|
|
(SELECT PROJECT_NO FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PROJECT_NO,
|
|
(SELECT MECHANICAL_TYPE FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS MECHANICAL_TYPE,
|
|
(SELECT DUE_DATE FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS DUE_DATE,
|
|
(SELECT SETUP FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS SETUP,
|
|
(SELECT USER_NAME(PM_USER_ID) FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PM_USER_NAME,
|
|
(SELECT CODE_NAME(PRODUCT) FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PRODUCT_NAME,
|
|
T.UNIT_CODE,
|
|
(SELECT TASK_NAME FROM PMS_WBS_TASK_STANDARD AS O WHERE O.OBJID = T.UNIT_CODE) AS UNIT_NAME,
|
|
T.STATUS,
|
|
CASE UPPER(T.STATUS)
|
|
WHEN 'CREATE' THEN '등록중'
|
|
WHEN 'CHANGEDESIGN' THEN '설계변경미배포'
|
|
WHEN 'DEPLOY' THEN '배포완료'
|
|
ELSE ''
|
|
END STATUS_TITLE,
|
|
T.WRITER,
|
|
(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = T.WRITER) AS DEPT_NAME,
|
|
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = T.WRITER) AS USER_NAME,
|
|
(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = T.WRITER) || '/' || (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = T.WRITER) as DEPT_USER_NAME,
|
|
T.REGDATE AS REGDATE,
|
|
TO_CHAR(T.REGDATE, 'YYYY-MM-DD') AS REG_DATE,
|
|
T.DEPLOY_DATE,
|
|
T.REVISION,
|
|
(SELECT MAX(PM.EO_NO) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR WHERE BP.BOM_REPORT_OBJID =T.OBJID) AS EO_NO,
|
|
(SELECT MAX(PM.EO_DATE) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR WHERE BP.BOM_REPORT_OBJID =T.OBJID) AS EO_DATE,
|
|
T.NOTE,
|
|
AWT.ASSEMBLY_USER_ID,
|
|
(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = AWT.ASSEMBLY_USER_ID) AS ASSEMBLY_DEPT_NAME,
|
|
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = AWT.ASSEMBLY_USER_ID) AS ASSEMBLY_USER_NAME,
|
|
AWT.WORK_HOUR,
|
|
ROUND((AWT.WORK_HOUR::float / 8)::numeric,1) AS MAN_DAY,
|
|
ROUND((AWT.WORK_HOUR::float / 8 / 22)::numeric,1) AS MAN_MONTH
|
|
FROM
|
|
PART_BOM_REPORT AS T
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
PARENT_OBJID,
|
|
ASSEMBLY_USER_ID,
|
|
COUNT(*) AS WORK_HOUR
|
|
FROM
|
|
ASSEMBLY_WBS_TASK AWT
|
|
WHERE (AWT.ASSEMBLY_USER_ID != '' AND AWT.ASSEMBLY_USER_ID IS NOT NULL)
|
|
GROUP BY
|
|
PARENT_OBJID,
|
|
ASSEMBLY_USER_ID) as AWT
|
|
ON AWT.PARENT_OBJID = T.OBJID
|
|
AND AWT.ASSEMBLY_USER_ID != ''
|
|
|
|
WHERE 1=1 -->
|
|
|
|
<!-- <if test="project_no !=null and project_no != '' ">
|
|
AND T.OBJID = #{project_no}
|
|
</if> -->
|
|
|
|
<if test="project_nos != null and project_nos != ''">
|
|
AND T.OBJID IN
|
|
<foreach item="state" collection="project_nos.split(',')"
|
|
open="(" separator="," close=")">
|
|
#{state}
|
|
</foreach>
|
|
</if>
|
|
|
|
<if test="unit_code !=null and unit_code != '' ">
|
|
AND T.UNIT_CODE = #{unit_code}
|
|
</if>
|
|
<if test="busUsersDeptId !=null and busUsersDeptId != '' ">
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) = #{busUsersDeptId}
|
|
</if>
|
|
<if test="worker !=null and worker != '' ">
|
|
AND WD.WORKER_ID = #{worker}
|
|
</if>
|
|
ORDER BY SUBSTRING(PROJECT_NO,POSITION('-' IN PROJECT_NO)+1) DESC
|
|
<!-- ORDER BY T.UNIT_CODE -->
|
|
</select>
|
|
|
|
<select id="workStatusByImployeeNPList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
WD.WORKER_ID
|
|
,(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) AS WORKER_DEPT_NAME
|
|
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) AS WORKER_USER_NAME
|
|
,WD.WORK_HOUR
|
|
,ROUND((WD.WORK_HOUR::float / 8)::numeric,1) AS MAN_DAY
|
|
,ROUND((WD.WORK_HOUR::float / 8 / 22)::numeric,1) AS MAN_MONTH
|
|
FROM
|
|
(SELECT
|
|
WORKER_ID
|
|
,SUM(WORK_HOUR::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID = '' OR WD.CONTRACT_OBJID IS NULL
|
|
AND STATUS = 'complete'
|
|
<if test="Year !=null and Year != '' ">
|
|
AND TO_CHAR(REGDATE,'YYYY') = #{Year}
|
|
</if>
|
|
GROUP BY WORKER_ID ) AS WD
|
|
WHERE 1=1
|
|
|
|
<if test="busUsersDeptId !=null and busUsersDeptId != '' ">
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) = #{busUsersDeptId}
|
|
</if>
|
|
<if test="worker !=null and worker != '' ">
|
|
AND WD.WORKER_ID = #{worker}
|
|
</if>
|
|
</select>
|
|
|
|
<!-- workStatusByImployeeList 쿼리의 총계만 계산하여 가져온다. -->
|
|
<select id="workStatusByImployeeList_sum" parameterType="map" resultType="map">
|
|
SELECT
|
|
COALESCE(SUM(WORK_HOUR),'0') AS SUM_WORK_HOUR,
|
|
COALESCE(SUM(MAN_DAY),'0') AS SUM_MAN_DAY,
|
|
COALESCE(SUM(MAN_MONTH),'0') AS SUM_MAN_MONTH
|
|
FROM(
|
|
SELECT
|
|
OBJID
|
|
,CATEGORY_CD
|
|
,CODE_NAME(CATEGORY_CD) AS CATEGORY_NAME
|
|
,CUSTOMER_OBJID
|
|
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID = T.CUSTOMER_OBJID::NUMERIC) AS CUSTOMER_NAME
|
|
,PRODUCT
|
|
,CODE_NAME(PRODUCT) AS PRODUCT_NAME
|
|
,(SELECT O.CUSTOMER_PROJECT_NAME FROM CONTRACT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS CUSTOMER_PROJECT_NAME
|
|
,STATUS_CD
|
|
,CODE_NAME(STATUS_CD) AS STATUS_NAME
|
|
,DUE_DATE
|
|
,LOCATION
|
|
,SETUP
|
|
,FACILITY
|
|
,CODE_NAME(FACILITY) AS FACILITY_NAME
|
|
,FACILITY_QTY
|
|
,FACILITY_TYPE
|
|
,FACILITY_DEPTH
|
|
,PRODUCTION_NO
|
|
,BUS_CAL_CD
|
|
,CODE_NAME(BUS_CAL_CD) AS BUS_CAL_NAME
|
|
,CATEGORY1_CD
|
|
,CODE_NAME(CATEGORY1_CD) AS CATEGORY1_NAME
|
|
,CHG_USER_ID
|
|
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = T.CHG_USER_ID ) AS CHG_USER_NAME
|
|
,PLAN_DATE
|
|
,COMPLETE_DATE
|
|
,RESULT_CD
|
|
,CODE_NAME(RESULT_CD) AS RESULT_NAME
|
|
,PROJECT_NO
|
|
,PM_USER_ID
|
|
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = (SELECT O.PM_USER_ID FROM CONTRACT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID)) AS PM_USER_NAME
|
|
,CONTRACT_PRICE
|
|
,CONTRACT_PRICE_CURRENCY
|
|
,CONTRACT_CURRENCY
|
|
,CODE_NAME(CONTRACT_CURRENCY) AS CONTRACT_CURRENCY_NAME
|
|
,REGDATE
|
|
,TO_CHAR(REGDATE,'YYYY-MM-DD') AS REG_DATE
|
|
,WRITER
|
|
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = T.WRITER ) AS WRITER_NAME
|
|
,CONTRACT_NO
|
|
,CUSTOMER_EQUIP_NAME
|
|
,REQ_DEL_DATE
|
|
,CONTRACT_DEL_DATE
|
|
,CONTRACT_COMPANY
|
|
,CODE_NAME(CONTRACT_COMPANY) AS CONTRACT_COMPANY_NAME
|
|
,CONTRACT_DATE
|
|
,PO_NO
|
|
,MANUFACTURE_PLANT
|
|
,CODE_NAME(MANUFACTURE_PLANT) AS MANUFACTURE_PLANT_NAME
|
|
,CONTRACT_RESULT
|
|
,CODE_NAME(CONTRACT_RESULT) AS CONTRACT_RESULT_NAME
|
|
,CODE_NAME(AREA_CD) AS AREA_NAME
|
|
,PROJECT_NAME
|
|
,MECHANICAL_TYPE
|
|
,WD.WORKER_ID
|
|
,(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) AS WORKER_DEPT_NAME
|
|
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) AS WORKER_USER_NAME
|
|
,WD.WORK_HOUR
|
|
,ROUND((WD.WORK_HOUR::float / 8)::numeric,1) AS MAN_DAY
|
|
,ROUND((WD.WORK_HOUR::float / 8 / 22)::numeric,1) AS MAN_MONTH
|
|
FROM
|
|
PROJECT_MGMT AS T
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID
|
|
,WORKER_ID
|
|
,SUM(work_hour::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID != '' AND WD.CONTRACT_OBJID IS NOT null
|
|
AND STATUS = 'complete'
|
|
<if test="Year !=null and Year != '' ">
|
|
AND TO_CHAR(REGDATE,'YYYY') = #{Year}
|
|
</if>
|
|
GROUP BY CONTRACT_OBJID, WORKER_ID ) AS WD
|
|
ON WD.CONTRACT_OBJID = T.OBJID
|
|
WHERE 1=1
|
|
|
|
<if test="project_no !=null and project_no != '' ">
|
|
AND T.OBJID = #{project_no}
|
|
</if>
|
|
<if test="unit_code !=null and unit_code != '' ">
|
|
AND T.UNIT_CODE = #{unit_code}
|
|
</if>
|
|
<if test="busUsersDeptId !=null and busUsersDeptId != '' ">
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) = #{busUsersDeptId}
|
|
</if>
|
|
<if test="worker !=null and worker != '' ">
|
|
AND WD.WORKER_ID = #{worker}
|
|
</if>
|
|
ORDER BY SUBSTRING(PROJECT_NO,POSITION('-' IN PROJECT_NO)+1) DESC
|
|
) AS TOTAL_SUM
|
|
</select>
|
|
|
|
<select id="workStatusByProjectList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
T.*,
|
|
T.WORK_HOUR,
|
|
ROUND((T.WORK_HOUR::float / 8)::numeric,1) AS MAN_DAY,
|
|
ROUND((T.WORK_HOUR::float / 8 / 22)::numeric,1) AS MAN_MONTH
|
|
FROM
|
|
(SELECT
|
|
T.OBJID,
|
|
T.CUSTOMER_OBJID,
|
|
(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID::VARCHAR = T.CUSTOMER_OBJID) AS CUSTOMER_NAME,
|
|
T.CONTRACT_OBJID,
|
|
(SELECT CUSTOMER_PROJECT_NAME FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS CUSTOMER_PROJECT_NAME,
|
|
(SELECT PROJECT_NAME FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PROJECT_NAME,
|
|
(SELECT PROJECT_NO FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PROJECT_NO,
|
|
(SELECT MECHANICAL_TYPE FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS MECHANICAL_TYPE,
|
|
(SELECT DUE_DATE FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS DUE_DATE,
|
|
(SELECT SETUP FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS SETUP,
|
|
(SELECT USER_NAME(PM_USER_ID) FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PM_USER_NAME,
|
|
(SELECT CODE_NAME(PRODUCT) FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PRODUCT_NAME,
|
|
T.UNIT_CODE,
|
|
(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = T.UNIT_CODE) AS UNIT_NAME,
|
|
T.STATUS,
|
|
CASE UPPER(T.STATUS)
|
|
WHEN 'CREATE' THEN '등록중'
|
|
WHEN 'CHANGEDESIGN' THEN '설계변경미배포'
|
|
WHEN 'DEPLOY' THEN '배포완료'
|
|
ELSE ''
|
|
END STATUS_TITLE,
|
|
T.WRITER,
|
|
(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = T.WRITER) AS DEPT_NAME,
|
|
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = T.WRITER) AS USER_NAME,
|
|
(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = T.WRITER) || '/' || (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = T.WRITER) as DEPT_USER_NAME,
|
|
T.REGDATE AS REGDATE,
|
|
TO_CHAR(T.REGDATE, 'YYYY-MM-DD') AS REG_DATE,
|
|
T.DEPLOY_DATE,
|
|
T.REVISION,
|
|
(SELECT MAX(PM.EO_NO) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR WHERE BP.BOM_REPORT_OBJID =T.OBJID) AS EO_NO,
|
|
(SELECT MAX(PM.EO_DATE) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR WHERE BP.BOM_REPORT_OBJID =T.OBJID) AS EO_DATE,
|
|
T.NOTE,
|
|
coalesce(D.WORK_HOUR , '0') as DESIGN_INPUT, /*설계*/
|
|
coalesce(PC.WORK_HOUR, '0') as PURCHASE_INPUT, /*구매*/
|
|
coalesce(S.WORK_HOUR , '0') as SALES_INPUT, /*영업*/
|
|
coalesce(PM.WORK_HOUR, '0') as PRODUCTION_MGMT_INPUT, /*생산관리*/
|
|
coalesce(P.WORK_HOUR , '0') as PRODUCTION_INPUT, /*생산*/
|
|
coalesce(M.WORK_HOUR , '0') as MGMT_INPUT, /*관리*/
|
|
coalesce(O.WORK_HOUR , '0') as OUTSOURCING, /*외주*/
|
|
(coalesce(D.WORK_HOUR,'0'))::numeric + (coalesce(PC.WORK_HOUR,'0'))::numeric + (coalesce(S.WORK_HOUR,'0'))::numeric + (coalesce(PM.WORK_HOUR,'0'))::numeric + (coalesce(P.WORK_HOUR,'0'))::numeric + (coalesce(M.WORK_HOUR,'0'))::numeric + coalesce(O.WORK_HOUR , '0') as WORK_HOUR
|
|
<!-- AWT.ASSEMBLY_USER_ID,
|
|
(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = AWT.ASSEMBLY_USER_ID) AS ASSEMBLY_DEPT_NAME,
|
|
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = AWT.ASSEMBLY_USER_ID) AS ASSEMBLY_USER_NAME,
|
|
AWT.WORK_HOUR,
|
|
ROUND((AWT.WORK_HOUR::float / 8)::numeric,1) AS MAN_DAY,
|
|
ROUND((AWT.WORK_HOUR::float / 8 / 22)::numeric,1) AS MAN_MONTH -->
|
|
FROM
|
|
PART_BOM_REPORT AS T
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID
|
|
,UNIT_CODE
|
|
,(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID)
|
|
,SUM(WORK_HOUR::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID != '' AND WD.CONTRACT_OBJID IS NOT null
|
|
AND STATUS = 'complete'
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) IN ('DPT014','DPT006')
|
|
GROUP BY CONTRACT_OBJID, UNIT_CODE, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) ) AS D
|
|
ON D.UNIT_CODE = T.UNIT_CODE
|
|
AND D.CONTRACT_OBJID = T.CONTRACT_OBJID
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID
|
|
,UNIT_CODE
|
|
,(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID)
|
|
,SUM(WORK_HOUR::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID != '' AND WD.CONTRACT_OBJID IS NOT null
|
|
AND STATUS = 'complete'
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) IN ('DPT012','DPT004')
|
|
GROUP BY CONTRACT_OBJID, UNIT_CODE, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) ) AS PC
|
|
ON PC.UNIT_CODE = T.UNIT_CODE
|
|
AND PC.CONTRACT_OBJID = T.CONTRACT_OBJID
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID
|
|
,UNIT_CODE
|
|
,(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID)
|
|
,SUM(WORK_HOUR::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID != '' AND WD.CONTRACT_OBJID IS NOT null
|
|
AND STATUS = 'complete'
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) = 'DPT016'
|
|
GROUP BY CONTRACT_OBJID, UNIT_CODE, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) ) AS S
|
|
ON S.UNIT_CODE = T.UNIT_CODE
|
|
AND S.CONTRACT_OBJID = T.CONTRACT_OBJID
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID
|
|
,UNIT_CODE
|
|
,(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID)
|
|
,SUM(WORK_HOUR::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID != '' AND WD.CONTRACT_OBJID IS NOT null
|
|
AND STATUS = 'complete'
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) IN ('DPT003','DPT018')
|
|
GROUP BY CONTRACT_OBJID, UNIT_CODE, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) ) AS PM
|
|
ON PM.UNIT_CODE = T.UNIT_CODE
|
|
AND PM.CONTRACT_OBJID = T.CONTRACT_OBJID
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID
|
|
,UNIT_CODE
|
|
,(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID)
|
|
,SUM(WORK_HOUR::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID != '' AND WD.CONTRACT_OBJID IS NOT null
|
|
AND STATUS = 'complete'
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) IN ('DPT005','DPT023','DPT013')
|
|
GROUP BY CONTRACT_OBJID, UNIT_CODE, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) ) AS P
|
|
ON P.UNIT_CODE = T.UNIT_CODE
|
|
AND P.CONTRACT_OBJID = T.CONTRACT_OBJID
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID
|
|
,UNIT_CODE
|
|
,(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID)
|
|
,SUM(WORK_HOUR::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID != '' AND WD.CONTRACT_OBJID IS NOT null
|
|
AND STATUS = 'complete'
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) IN ('DPT019','DPT001','DPT002')
|
|
GROUP BY CONTRACT_OBJID, UNIT_CODE, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) ) AS M
|
|
ON M.UNIT_CODE = T.UNIT_CODE
|
|
AND M.CONTRACT_OBJID = T.CONTRACT_OBJID
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID ,
|
|
UNIT_CODE ,
|
|
SUM(WORK_HOUR::numeric) as WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE
|
|
WD.CONTRACT_OBJID != ''
|
|
AND WD.CONTRACT_OBJID IS NOT NULL
|
|
AND STATUS = 'complete'
|
|
AND SOURCING_TYPE = 'outsourcing'
|
|
GROUP BY
|
|
CONTRACT_OBJID,
|
|
UNIT_CODE
|
|
) AS O
|
|
ON O.UNIT_CODE = T.UNIT_CODE
|
|
AND O.CONTRACT_OBJID = T.CONTRACT_OBJID ) T
|
|
<!-- LEFT OUTER JOIN
|
|
(SELECT
|
|
PARENT_OBJID,
|
|
ASSEMBLY_USER_ID,
|
|
COUNT(*) AS WORK_HOUR
|
|
FROM
|
|
ASSEMBLY_WBS_TASK AWT
|
|
WHERE (AWT.ASSEMBLY_USER_ID != '' AND AWT.ASSEMBLY_USER_ID IS NOT NULL)
|
|
GROUP BY
|
|
PARENT_OBJID,
|
|
ASSEMBLY_USER_ID) as AWT
|
|
ON AWT.PARENT_OBJID = T.OBJID
|
|
AND AWT.ASSEMBLY_USER_ID != '' -->
|
|
WHERE 1=1
|
|
<if test="Year !=null and Year != '' ">
|
|
AND TO_CHAR(T.REGDATE,'YYYY') = #{Year}
|
|
</if>
|
|
<!-- <if test="project_no !=null and project_no != '' ">
|
|
AND T.CONTRACT_OBJID = #{project_no}
|
|
</if> -->
|
|
<if test="project_nos != null and project_nos != ''">
|
|
AND T.CONTRACT_OBJID IN
|
|
<foreach item="state" collection="project_nos.split(',')"
|
|
open="(" separator="," close=")">
|
|
#{state}
|
|
</foreach>
|
|
</if>
|
|
<if test="unit_code !=null and unit_code != '' ">
|
|
AND T.UNIT_CODE = #{unit_code}
|
|
</if>
|
|
<!-- <if test="busUsersDeptId !=null and busUsersDeptId != '' ">
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = AWT.ASSEMBLY_USER_ID) = #{busUsersDeptId}
|
|
</if>
|
|
<if test="worker !=null and worker != '' ">
|
|
AND AWT.ASSEMBLY_USER_ID = #{worker}
|
|
</if> -->
|
|
ORDER BY T.UNIT_CODE
|
|
</select>
|
|
|
|
<!-- workStatusByProjectList 쿼리의 총계만 계산하여 가져온다. -->
|
|
<select id="workStatusByProjectList_sum" parameterType="map" resultType="map">
|
|
SELECT
|
|
coalesce(SUM(DESIGN_INPUT), '0') as SUM_DESIGN_INPUT,
|
|
coalesce(SUM(PURCHASE_INPUT), '0') as SUM_PURCHASE_INPUT,
|
|
coalesce(SUM(SALES_INPUT), '0') as SUM_SALES_INPUT,
|
|
coalesce(SUM(PRODUCTION_MGMT_INPUT), '0') as SUM_PRODUCTION_MGMT_INPUT,
|
|
coalesce(SUM(PRODUCTION_INPUT), '0') as SUM_PRODUCTION_INPUT,
|
|
coalesce(SUM(MGMT_INPUT), '0') as SUM_MGMT_INPUT,
|
|
coalesce(SUM(OUTSOURCING), '0') as SUM_OUTSOURCING,
|
|
COALESCE(SUM(WORK_HOUR),'0') AS SUM_WORK_HOUR,
|
|
COALESCE(SUM(MAN_DAY),'0') AS SUM_MAN_DAY,
|
|
COALESCE(SUM(MAN_MONTH),'0') AS SUM_MAN_MONTH
|
|
FROM(
|
|
SELECT
|
|
T.*,
|
|
ROUND((T.WORK_HOUR::float / 8)::numeric,1) AS MAN_DAY,
|
|
ROUND((T.WORK_HOUR::float / 8 / 22)::numeric,1) AS MAN_MONTH
|
|
FROM
|
|
(SELECT
|
|
T.OBJID,
|
|
T.CUSTOMER_OBJID,
|
|
(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID::VARCHAR = T.CUSTOMER_OBJID) AS CUSTOMER_NAME,
|
|
T.CONTRACT_OBJID,
|
|
(SELECT CUSTOMER_PROJECT_NAME FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS CUSTOMER_PROJECT_NAME,
|
|
(SELECT PROJECT_NAME FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PROJECT_NAME,
|
|
(SELECT PROJECT_NO FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PROJECT_NO,
|
|
(SELECT MECHANICAL_TYPE FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS MECHANICAL_TYPE,
|
|
(SELECT DUE_DATE FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS DUE_DATE,
|
|
(SELECT SETUP FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS SETUP,
|
|
(SELECT USER_NAME(PM_USER_ID) FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PM_USER_NAME,
|
|
(SELECT CODE_NAME(PRODUCT) FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PRODUCT_NAME,
|
|
T.UNIT_CODE,
|
|
(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = T.UNIT_CODE) AS UNIT_NAME,
|
|
T.STATUS,
|
|
CASE UPPER(T.STATUS)
|
|
WHEN 'CREATE' THEN '등록중'
|
|
WHEN 'CHANGEDESIGN' THEN '설계변경미배포'
|
|
WHEN 'DEPLOY' THEN '배포완료'
|
|
ELSE ''
|
|
END STATUS_TITLE,
|
|
T.WRITER,
|
|
(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = T.WRITER) AS DEPT_NAME,
|
|
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = T.WRITER) AS USER_NAME,
|
|
(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = T.WRITER) || '/' || (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = T.WRITER) as DEPT_USER_NAME,
|
|
T.REGDATE AS REGDATE,
|
|
TO_CHAR(T.REGDATE, 'YYYY-MM-DD') AS REG_DATE,
|
|
T.DEPLOY_DATE,
|
|
T.REVISION,
|
|
(SELECT MAX(PM.EO_NO) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR WHERE BP.BOM_REPORT_OBJID =T.OBJID) AS EO_NO,
|
|
(SELECT MAX(PM.EO_DATE) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR WHERE BP.BOM_REPORT_OBJID =T.OBJID) AS EO_DATE,
|
|
T.NOTE,
|
|
coalesce(D.WORK_HOUR , '0') as DESIGN_INPUT, /*설계*/
|
|
coalesce(PC.WORK_HOUR, '0') as PURCHASE_INPUT, /*구매*/
|
|
coalesce(S.WORK_HOUR , '0') as SALES_INPUT, /*영업*/
|
|
coalesce(PM.WORK_HOUR, '0') as PRODUCTION_MGMT_INPUT, /*생산관리*/
|
|
coalesce(P.WORK_HOUR , '0') as PRODUCTION_INPUT, /*생산*/
|
|
coalesce(M.WORK_HOUR , '0') as MGMT_INPUT, /*관리*/
|
|
coalesce(O.WORK_HOUR , '0') as OUTSOURCING, /*외주*/
|
|
(coalesce(D.WORK_HOUR,'0'))::numeric + (coalesce(PC.WORK_HOUR,'0'))::numeric + (coalesce(S.WORK_HOUR,'0'))::numeric + (coalesce(PM.WORK_HOUR,'0'))::numeric + (coalesce(P.WORK_HOUR,'0'))::numeric + (coalesce(M.WORK_HOUR,'0'))::numeric + (coalesce(O.WORK_HOUR , '0'))::numeric as WORK_HOUR
|
|
FROM
|
|
PART_BOM_REPORT AS T
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID
|
|
,UNIT_CODE
|
|
,(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID)
|
|
,SUM(WORK_HOUR::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID != '' AND WD.CONTRACT_OBJID IS NOT null
|
|
AND STATUS = 'complete'
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) IN ('DPT014','DPT006')
|
|
GROUP BY CONTRACT_OBJID, UNIT_CODE, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) ) AS D
|
|
ON D.UNIT_CODE = T.UNIT_CODE
|
|
AND D.CONTRACT_OBJID = T.CONTRACT_OBJID
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID
|
|
,UNIT_CODE
|
|
,(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID)
|
|
,SUM(WORK_HOUR::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID != '' AND WD.CONTRACT_OBJID IS NOT null
|
|
AND STATUS = 'complete'
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) IN ('DPT012','DPT004')
|
|
GROUP BY CONTRACT_OBJID, UNIT_CODE, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) ) AS PC
|
|
ON PC.UNIT_CODE = T.UNIT_CODE
|
|
AND PC.CONTRACT_OBJID = T.CONTRACT_OBJID
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID
|
|
,UNIT_CODE
|
|
,(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID)
|
|
,SUM(WORK_HOUR::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID != '' AND WD.CONTRACT_OBJID IS NOT null
|
|
AND STATUS = 'complete'
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) = 'DPT016'
|
|
GROUP BY CONTRACT_OBJID, UNIT_CODE, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) ) AS S
|
|
ON S.UNIT_CODE = T.UNIT_CODE
|
|
AND S.CONTRACT_OBJID = T.CONTRACT_OBJID
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID
|
|
,UNIT_CODE
|
|
,(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID)
|
|
,SUM(WORK_HOUR::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID != '' AND WD.CONTRACT_OBJID IS NOT null
|
|
AND STATUS = 'complete'
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) IN ('DPT003','DPT018')
|
|
GROUP BY CONTRACT_OBJID, UNIT_CODE, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) ) AS PM
|
|
ON PM.UNIT_CODE = T.UNIT_CODE
|
|
AND PM.CONTRACT_OBJID = T.CONTRACT_OBJID
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID
|
|
,UNIT_CODE
|
|
,(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID)
|
|
,SUM(WORK_HOUR::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID != '' AND WD.CONTRACT_OBJID IS NOT null
|
|
AND STATUS = 'complete'
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) IN ('DPT005','DPT023','DPT013')
|
|
GROUP BY CONTRACT_OBJID, UNIT_CODE, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) ) AS P
|
|
ON P.UNIT_CODE = T.UNIT_CODE
|
|
AND P.CONTRACT_OBJID = T.CONTRACT_OBJID
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID
|
|
,UNIT_CODE
|
|
,(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID)
|
|
,SUM(WORK_HOUR::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID != '' AND WD.CONTRACT_OBJID IS NOT null
|
|
AND STATUS = 'complete'
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) IN ('DPT019','DPT001','DPT002')
|
|
GROUP BY CONTRACT_OBJID, UNIT_CODE, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) ) AS M
|
|
ON M.UNIT_CODE = T.UNIT_CODE
|
|
AND M.CONTRACT_OBJID = T.CONTRACT_OBJID
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID ,
|
|
UNIT_CODE ,
|
|
SUM(WORK_HOUR::numeric) as WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE
|
|
WD.CONTRACT_OBJID != ''
|
|
AND WD.CONTRACT_OBJID IS NOT NULL
|
|
AND STATUS = 'complete'
|
|
AND SOURCING_TYPE = 'outsourcing'
|
|
GROUP BY
|
|
CONTRACT_OBJID,
|
|
UNIT_CODE
|
|
) AS O
|
|
ON O.UNIT_CODE = T.UNIT_CODE
|
|
AND O.CONTRACT_OBJID = T.CONTRACT_OBJID ) T
|
|
|
|
WHERE 1=1
|
|
<if test="Year !=null and Year != '' ">
|
|
AND TO_CHAR(T.REGDATE,'YYYY') = #{Year}
|
|
</if>
|
|
<!-- <if test="project_no !=null and project_no != '' ">
|
|
AND T.CONTRACT_OBJID = #{project_no}
|
|
</if> -->
|
|
<if test="project_nos != null and project_nos != ''">
|
|
AND T.CONTRACT_OBJID IN
|
|
<foreach item="state" collection="project_nos.split(',')"
|
|
open="(" separator="," close=")">
|
|
#{state}
|
|
</foreach>
|
|
</if>
|
|
<if test="unit_code !=null and unit_code != '' ">
|
|
AND T.UNIT_CODE = #{unit_code}
|
|
</if>
|
|
<if test="busUsersDeptId !=null and busUsersDeptId != '' ">
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = AWT.ASSEMBLY_USER_ID) = #{busUsersDeptId}
|
|
</if>
|
|
<if test="worker !=null and worker != '' ">
|
|
AND AWT.ASSEMBLY_USER_ID = #{worker}
|
|
</if>
|
|
ORDER BY T.UNIT_CODE
|
|
) AS TOTAL_SUM
|
|
</select>
|
|
|
|
<select id="getAssemblyWbsHistoryList" parameterType="map" resultType="map">
|
|
SELECT
|
|
IMO.OBJID
|
|
,IMO.PARENT_OBJID
|
|
,IMO.CONTRACT_MGMT_OBJID
|
|
,IMO.UNIT
|
|
,IMO.OUT_DATE AS RECEIVE_DATE
|
|
,IMO.OUT_QTY AS RECEIVE_QTY
|
|
,IMO.ACQ_USER AS RECEIVE_USER_ID
|
|
,USER_NAME(IMO.ACQ_USER) AS RECEIVE_USER_NAME
|
|
,IMO.WRITER AS TRANSFER_USER_ID
|
|
,USER_NAME(IMO.WRITER) AS TRANSFER_USER_NAME
|
|
,IM.PART_OBJID
|
|
FROM
|
|
INVENTORY_MGMT_OUT IMO
|
|
LEFT OUTER JOIN INVENTORY_MGMT IM
|
|
ON IMO.PARENT_OBJID = IM.OBJID
|
|
WHERE PART_OBJID = #{PART_OBJID}
|
|
AND CONTRACT_MGMT_OBJID = #{PROJECT_NAME}
|
|
AND IMO.UNIT = #{UNIT}
|
|
<!-- SELECT
|
|
RH.OBJID
|
|
,RH.PART_OBJID
|
|
,RH.PARENT_OBJID
|
|
,RH.RECEIVE_DATE
|
|
,RH.RECEIVE_QTY
|
|
,RH.RECEIVE_USER_ID
|
|
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = RH.RECEIVE_USER_ID) AS RECEIVE_USER_NAME
|
|
,RH.TRANSFER_USER_ID
|
|
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = RH.TRANSFER_USER_ID) AS TRANSFER_USER_NAME
|
|
FROM
|
|
RECEIVE_HISTORY RH
|
|
WHERE PART_OBJID = #{PART_OBJID}
|
|
AND PARENT_OBJID = #{PARENT_OBJID} -->
|
|
</select>
|
|
|
|
<update id="deleteassemblyWbsHistoryList" parameterType="map">
|
|
DELETE FROM RECEIVE_HISTORY WHERE OBJID = #{OBJID}
|
|
</update>
|
|
|
|
<delete id="deleteAllAssemblyHistoryList" parameterType="map">
|
|
DELETE FROM RECEIVE_HISTORY
|
|
WHERE PARENT_OBJID = #{parentObjId}
|
|
AND PART_OBJID = #{partObjid}
|
|
</delete>
|
|
|
|
<update id="saveAssemblyWbsHistory" parameterType="map">
|
|
INSERT INTO RECEIVE_HISTORY
|
|
(
|
|
OBJID
|
|
,PART_OBJID
|
|
,PARENT_OBJID
|
|
,RECEIVE_DATE
|
|
,RECEIVE_QTY
|
|
,RECEIVE_USER_ID
|
|
,TRANSFER_USER_ID
|
|
,WRITER
|
|
,REGDATE
|
|
)
|
|
VALUES
|
|
(
|
|
#{OBJID}
|
|
,#{PART_OBJID}
|
|
,#{PARENT_OBJID}
|
|
,#{RECEIVE_DATE}
|
|
,#{RECEIVE_QTY}
|
|
,#{RECEIVE_USER_ID}
|
|
,#{TRANSFER_USER_ID}
|
|
,#{WRITER}
|
|
,now()
|
|
) ON CONFLICT (OBJID) DO
|
|
UPDATE
|
|
SET
|
|
RECEIVE_DATE = #{RECEIVE_DATE}
|
|
,RECEIVE_QTY = #{RECEIVE_QTY}
|
|
,RECEIVE_USER_ID = #{RECEIVE_USER_ID}
|
|
,TRANSFER_USER_ID = #{TRANSFER_USER_ID}
|
|
,WRITER = #{WRITER}
|
|
</update>
|
|
|
|
<select id="workDiaryGridList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
OBJID,
|
|
CONTRACT_OBJID,
|
|
(SELECT PROJECT_NO FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PROJECT_NO,
|
|
UNIT_CODE,
|
|
(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = T.UNIT_CODE) AS UNIT_CODE_NAME,
|
|
DIVISION,
|
|
TASK_NAME,
|
|
WORKER_ID,
|
|
(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = T.WORKER_ID) AS DEPT_NAME,
|
|
USER_NAME(WORKER_ID) AS WORKER_NAME,
|
|
WORK_START_DATE,
|
|
WORK_END_DATE,
|
|
WORK_HOUR,
|
|
REMARK,
|
|
REGDATE,
|
|
WRITER,
|
|
SOURCING_TYPE,
|
|
PRODUCTION_TYPE,
|
|
USER_NAME(WRITER) AS WRITER_NAME,
|
|
TO_CHAR(REGDATE,'YYYY-MM-DD') AS REG_DATE_TEXT,
|
|
STATUS,
|
|
CASE WHEN T.STATUS = 'write' THEN '작성중'
|
|
WHEN T.STATUS = 'complete' THEN '확인완료'
|
|
ELSE ''
|
|
END STATUS_TITLE
|
|
FROM
|
|
WORK_DIARY AS T
|
|
WHERE 1=1
|
|
<if test="Year !=null and Year != '' ">
|
|
AND TO_CHAR(T.REGDATE,'YYYY') = #{Year}
|
|
</if>
|
|
<if test="search_division !=null and search_division != '' ">
|
|
AND DIVISION = #{search_division}
|
|
</if>
|
|
<!-- <if test="project_no !=null and project_no != '' ">
|
|
AND T.CONTRACT_OBJID = #{project_no}
|
|
</if> -->
|
|
<if test="project_nos != null and project_nos != ''">
|
|
AND T.CONTRACT_OBJID IN
|
|
<foreach item="state" collection="project_nos.split(',')"
|
|
open="(" separator="," close=")">
|
|
#{state}
|
|
</foreach>
|
|
</if>
|
|
<if test="unit_code !=null and unit_code != '' ">
|
|
AND T.UNIT_CODE = #{unit_code}
|
|
</if>
|
|
<if test="busUsersDeptId !=null and busUsersDeptId != '' ">
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = T.WORKER_ID) = #{busUsersDeptId}
|
|
</if>
|
|
<if test="worker !=null and worker != '' ">
|
|
AND T.WORKER_ID = #{worker}
|
|
</if>
|
|
<if test="search_status !=null and search_status != '' ">
|
|
AND T.STATUS = #{search_status}
|
|
</if>
|
|
<if test="objId !=null and objId != '' ">
|
|
AND T.OBJID = #{objId}
|
|
</if>
|
|
ORDER BY REGDATE desc
|
|
</select>
|
|
|
|
<select id="selectWorkDiaryInfo" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
OBJID,
|
|
CONTRACT_OBJID,
|
|
(SELECT PROJECT_NO FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PROJECT_NO,
|
|
UNIT_CODE,
|
|
(SELECT TASK_NAME FROM pms_wbs_task_standard AS O WHERE O.OBJID = T.UNIT_CODE) AS UNIT_CODE_NAME,
|
|
DIVISION,
|
|
TASK_NAME,
|
|
WORKER_ID,
|
|
USER_NAME(WORKER_ID) AS WORKER_NAME,
|
|
WORK_START_DATE,
|
|
WORK_END_DATE,
|
|
WORK_HOUR,
|
|
REMARK,
|
|
REGDATE,
|
|
WRITER,
|
|
USER_NAME(WRITER) AS WRITER_NAME,
|
|
TO_CHAR(REGDATE,'YYYY-MM-DD') AS REG_DATE_TEXT,
|
|
STATUS,
|
|
CASE WHEN T.STATUS = 'write' THEN '작성중'
|
|
WHEN T.STATUS = 'complete' THEN '확인완료'
|
|
END STATUS_TITLE,
|
|
SOURCING_TYPE,
|
|
PRODUCTION_TYPE
|
|
FROM
|
|
WORK_DIARY AS T
|
|
WHERE T.OBJID = #{objId}
|
|
</select>
|
|
|
|
<update id="mergeWorkDiaryInfo" parameterType="map">
|
|
INSERT INTO WORK_DIARY
|
|
(
|
|
OBJID
|
|
,CONTRACT_OBJID
|
|
,UNIT_CODE
|
|
,DIVISION
|
|
,TASK_NAME
|
|
,WORKER_ID
|
|
,WORK_START_DATE
|
|
,WORK_END_DATE
|
|
,WORK_HOUR
|
|
,REMARK
|
|
,STATUS
|
|
,WRITER
|
|
,REGDATE
|
|
,SOURCING_TYPE
|
|
,PRODUCTION_TYPE
|
|
)
|
|
VALUES
|
|
(
|
|
#{objId }
|
|
,#{project_objid }
|
|
,#{unit_code }
|
|
,#{division }
|
|
,#{task_name }
|
|
,#{worker_id }
|
|
,#{work_start_date }
|
|
,#{work_end_date }
|
|
,#{work_hour }
|
|
,#{remark }
|
|
,'write'
|
|
,#{writer }
|
|
,now()
|
|
,#{sourcing_type }
|
|
,#{production_type }
|
|
) ON CONFLICT (OBJID) DO
|
|
UPDATE
|
|
SET
|
|
CONTRACT_OBJID = #{project_objid }
|
|
,UNIT_CODE = #{unit_code }
|
|
,DIVISION = #{division }
|
|
,TASK_NAME = #{task_name }
|
|
,WORKER_ID = #{worker_id }
|
|
,WORK_START_DATE = #{work_start_date }
|
|
,WORK_END_DATE = #{work_end_date }
|
|
,WORK_HOUR = #{work_hour }
|
|
,REMARK = #{remark }
|
|
<!-- ,STATUS = #{status } -->
|
|
,SOURCING_TYPE = #{sourcing_type }
|
|
,PRODUCTION_TYPE = #{production_type }
|
|
|
|
</update>
|
|
|
|
<delete id="workDiaryDelete" parameterType="map">
|
|
DELETE FROM WORK_DIARY WHERE OBJID = #{OBJID}
|
|
</delete>
|
|
|
|
<update id="workDiaryConfirm" parameterType="map">
|
|
UPDATE WORK_DIARY SET
|
|
STATUS='complete'
|
|
WHERE OBJID = #{OBJID}
|
|
</update>
|
|
|
|
<!-- 작업관리 -> 현황 -->
|
|
<select id="workMgmtdashboardGridList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
T.*,
|
|
T.WORK_HOUR,
|
|
ROUND((T.WORK_HOUR::float / 8)::numeric,1) AS MAN_DAY,
|
|
ROUND((T.WORK_HOUR::float / 8 / 22)::numeric,1) AS MAN_MONTH
|
|
FROM
|
|
(SELECT
|
|
OBJID
|
|
,CATEGORY_CD
|
|
,CODE_NAME(CATEGORY_CD) AS CATEGORY_NAME
|
|
,CUSTOMER_OBJID
|
|
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID = T.CUSTOMER_OBJID::NUMERIC) AS CUSTOMER_NAME
|
|
,PRODUCT
|
|
,CODE_NAME(PRODUCT) AS PRODUCT_NAME
|
|
,(SELECT O.CUSTOMER_PROJECT_NAME FROM CONTRACT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS CUSTOMER_PROJECT_NAME
|
|
,STATUS_CD
|
|
,CODE_NAME(STATUS_CD) AS STATUS_NAME
|
|
,DUE_DATE
|
|
,LOCATION
|
|
,SETUP
|
|
,FACILITY
|
|
,CODE_NAME(FACILITY) AS FACILITY_NAME
|
|
,FACILITY_QTY
|
|
,FACILITY_TYPE
|
|
,FACILITY_DEPTH
|
|
,PRODUCTION_NO
|
|
,BUS_CAL_CD
|
|
,CODE_NAME(BUS_CAL_CD) AS BUS_CAL_NAME
|
|
,CATEGORY1_CD
|
|
,CODE_NAME(CATEGORY1_CD) AS CATEGORY1_NAME
|
|
,CHG_USER_ID
|
|
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = T.CHG_USER_ID ) AS CHG_USER_NAME
|
|
,PLAN_DATE
|
|
,COMPLETE_DATE
|
|
,RESULT_CD
|
|
,CODE_NAME(RESULT_CD) AS RESULT_NAME
|
|
,PROJECT_NO
|
|
,PM_USER_ID
|
|
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = (SELECT O.PM_USER_ID FROM CONTRACT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID)) AS PM_USER_NAME
|
|
,CONTRACT_PRICE
|
|
,CONTRACT_PRICE_CURRENCY
|
|
,CONTRACT_CURRENCY
|
|
,CODE_NAME(CONTRACT_CURRENCY) AS CONTRACT_CURRENCY_NAME
|
|
,REGDATE
|
|
,TO_CHAR(REGDATE,'YYYY-MM-DD') AS REG_DATE
|
|
,WRITER
|
|
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = T.WRITER ) AS WRITER_NAME
|
|
,CONTRACT_NO
|
|
,CUSTOMER_EQUIP_NAME
|
|
,REQ_DEL_DATE
|
|
,CONTRACT_DEL_DATE
|
|
,CONTRACT_COMPANY
|
|
,CODE_NAME(CONTRACT_COMPANY) AS CONTRACT_COMPANY_NAME
|
|
,CONTRACT_DATE
|
|
,PO_NO
|
|
,MANUFACTURE_PLANT
|
|
,CODE_NAME(MANUFACTURE_PLANT) AS MANUFACTURE_PLANT_NAME
|
|
,CONTRACT_RESULT
|
|
,CODE_NAME(CONTRACT_RESULT) AS CONTRACT_RESULT_NAME
|
|
,CODE_NAME(AREA_CD) AS AREA_NAME
|
|
,PROJECT_NAME
|
|
,MECHANICAL_TYPE
|
|
,coalesce(D.WORK_HOUR , '0') as DESIGN_INPUT /*설계*/
|
|
,coalesce(PC.WORK_HOUR, '0') as PURCHASE_INPUT /*구매*/
|
|
,coalesce(S.WORK_HOUR , '0') as SALES_INPUT /*영업*/
|
|
,coalesce(PM.WORK_HOUR, '0') as PRODUCTION_MGMT_INPUT /*생산관리*/
|
|
,coalesce(P.WORK_HOUR , '0') as PRODUCTION_INPUT /*생산*/
|
|
,coalesce(M.WORK_HOUR , '0') as MGMT_INPUT /*관리*/
|
|
,coalesce(O.WORK_HOUR , '0') as OUTSOURCING /*외주*/
|
|
,(coalesce(D.WORK_HOUR,'0'))::numeric + (coalesce(PC.WORK_HOUR,'0'))::numeric + (coalesce(S.WORK_HOUR,'0'))::numeric + (coalesce(PM.WORK_HOUR,'0'))::numeric
|
|
+ (coalesce(P.WORK_HOUR,'0'))::numeric + (coalesce(M.WORK_HOUR,'0'))::numeric + coalesce(O.WORK_HOUR , '0') as WORK_HOUR
|
|
FROM PROJECT_MGMT AS T
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID
|
|
,(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID)
|
|
,SUM(WORK_HOUR::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID != '' AND WD.CONTRACT_OBJID IS NOT null
|
|
AND STATUS = 'complete'
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) IN ('DPT014','DPT006')
|
|
<if test="busUsersDeptId !=null and busUsersDeptId != '' ">
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) = #{busUsersDeptId}
|
|
</if>
|
|
<if test="Year !=null and Year != '' ">
|
|
AND TO_CHAR(REGDATE,'YYYY') = #{Year}
|
|
</if>
|
|
GROUP BY CONTRACT_OBJID, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) ) AS D
|
|
ON D.CONTRACT_OBJID = T.OBJID
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID
|
|
,(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID)
|
|
,SUM(WORK_HOUR::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID != '' AND WD.CONTRACT_OBJID IS NOT null
|
|
AND STATUS = 'complete'
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) IN ('DPT012','DPT004')
|
|
<if test="busUsersDeptId !=null and busUsersDeptId != '' ">
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) = #{busUsersDeptId}
|
|
</if>
|
|
<if test="Year !=null and Year != '' ">
|
|
AND TO_CHAR(REGDATE,'YYYY') = #{Year}
|
|
</if>
|
|
GROUP BY CONTRACT_OBJID, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) ) AS PC
|
|
ON PC.CONTRACT_OBJID = T.OBJID
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID
|
|
,(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID)
|
|
,SUM(WORK_HOUR::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID != '' AND WD.CONTRACT_OBJID IS NOT null
|
|
AND STATUS = 'complete'
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) = 'DPT016'
|
|
<if test="busUsersDeptId !=null and busUsersDeptId != '' ">
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) = #{busUsersDeptId}
|
|
</if>
|
|
<if test="Year !=null and Year != '' ">
|
|
AND TO_CHAR(REGDATE,'YYYY') = #{Year}
|
|
</if>
|
|
GROUP BY CONTRACT_OBJID, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) ) AS S
|
|
ON S.CONTRACT_OBJID = T.OBJID
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID
|
|
,(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID)
|
|
,SUM(WORK_HOUR::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID != '' AND WD.CONTRACT_OBJID IS NOT null
|
|
AND STATUS = 'complete'
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) IN ('DPT003','DPT018')
|
|
<if test="busUsersDeptId !=null and busUsersDeptId != '' ">
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) = #{busUsersDeptId}
|
|
</if>
|
|
<if test="Year !=null and Year != '' ">
|
|
AND TO_CHAR(REGDATE,'YYYY') = #{Year}
|
|
</if>
|
|
GROUP BY CONTRACT_OBJID, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) ) AS PM
|
|
ON PM.CONTRACT_OBJID = T.OBJID
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID
|
|
,(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID)
|
|
,SUM(WORK_HOUR::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID != '' AND WD.CONTRACT_OBJID IS NOT null
|
|
AND STATUS = 'complete'
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) IN ('DPT005','DPT023','DPT013')
|
|
<if test="busUsersDeptId !=null and busUsersDeptId != '' ">
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) = #{busUsersDeptId}
|
|
</if>
|
|
<if test="Year !=null and Year != '' ">
|
|
AND TO_CHAR(REGDATE,'YYYY') = #{Year}
|
|
</if>
|
|
GROUP BY CONTRACT_OBJID, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) ) AS P
|
|
ON P.CONTRACT_OBJID = T.OBJID
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID
|
|
,(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID)
|
|
,SUM(WORK_HOUR::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID != '' AND WD.CONTRACT_OBJID IS NOT null
|
|
AND STATUS = 'complete'
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) IN ('DPT019','DPT001','DPT002')
|
|
<if test="busUsersDeptId !=null and busUsersDeptId != '' ">
|
|
AND (SELECT DEPT_CODE FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) = #{busUsersDeptId}
|
|
</if>
|
|
<if test="Year !=null and Year != '' ">
|
|
AND TO_CHAR(REGDATE,'YYYY') = #{Year}
|
|
</if>
|
|
GROUP BY CONTRACT_OBJID, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WD.WORKER_ID) ) AS M
|
|
ON M.CONTRACT_OBJID = T.OBJID
|
|
LEFT OUTER JOIN
|
|
(SELECT
|
|
CONTRACT_OBJID
|
|
,SUM(WORK_HOUR::numeric) AS WORK_HOUR
|
|
FROM
|
|
WORK_DIARY WD
|
|
WHERE WD.CONTRACT_OBJID != '' AND WD.CONTRACT_OBJID IS NOT null
|
|
AND STATUS = 'complete'
|
|
AND SOURCING_TYPE = 'outsourcing'
|
|
<if test="busUsersDeptId !=null and busUsersDeptId != '' ">
|
|
AND SOURCING_TYPE = #{busUsersDeptId}
|
|
</if>
|
|
<if test="Year !=null and Year != '' ">
|
|
AND TO_CHAR(REGDATE,'YYYY') = #{Year}
|
|
</if>
|
|
GROUP BY CONTRACT_OBJID ) AS O
|
|
ON O.CONTRACT_OBJID = T.OBJID ) T
|
|
WHERE 1=1
|
|
<!-- <if test="Year !=null and Year != '' ">
|
|
AND TO_CHAR(T.REGDATE,'YYYY') = #{Year}
|
|
</if> -->
|
|
<if test="project_no !=null and project_no != '' ">
|
|
AND T.OBJID = #{project_no}
|
|
</if>
|
|
ORDER BY SUBSTRING(PROJECT_NO,POSITION('-' IN PROJECT_NO)+1) DESC
|
|
</select>
|
|
|
|
<!-- M-BOM 관리 목록 조회 - 품목별로 나눠서 보이기 (판매관리와 동일) -->
|
|
<select id="mBomMgmtGridList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
/* productionplanning.mBomMgmtGridList - 품목별로 나눠서 조회 (CONTRACT_ITEM 기준) */
|
|
SELECT
|
|
PM.OBJID,
|
|
PM.CONTRACT_OBJID,
|
|
PM.PROJECT_NO,
|
|
CM.CATEGORY_CD,
|
|
COALESCE(
|
|
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CM.CATEGORY_CD LIMIT 1),
|
|
''
|
|
) AS CATEGORY_NAME,
|
|
CM.PRODUCT,
|
|
COALESCE(
|
|
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CM.PRODUCT LIMIT 1),
|
|
''
|
|
) AS PRODUCT_NAME,
|
|
CM.AREA_CD,
|
|
COALESCE(
|
|
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CM.AREA_CD LIMIT 1),
|
|
''
|
|
) AS AREA_NAME,
|
|
TO_CHAR(PM.REGDATE, 'YYYY-MM-DD') AS RECEIPT_DATE,
|
|
CM.CUSTOMER_OBJID,
|
|
COALESCE(
|
|
(SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE OBJID = CM.CUSTOMER_OBJID::NUMERIC LIMIT 1),
|
|
''
|
|
) AS CUSTOMER_NAME,
|
|
CM.PAID_TYPE,
|
|
COALESCE(
|
|
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CM.PAID_TYPE LIMIT 1),
|
|
CASE
|
|
WHEN CM.PAID_TYPE = 'paid' THEN '유상'
|
|
WHEN CM.PAID_TYPE = 'free' THEN '무상'
|
|
ELSE ''
|
|
END
|
|
) AS PAID_TYPE_NAME,
|
|
-- 품목 정보: CONTRACT_ITEM에서 가져오기 (품목별로 펼쳐서 보이기)
|
|
COALESCE(CI.PART_NO, PM.PART_NO, '') AS PART_NO,
|
|
COALESCE(CI.PART_NAME, PM.PART_NAME, '') AS PART_NAME,
|
|
CI.PART_OBJID,
|
|
-- S/N: 해당 품목의 시리얼 번호만 표시
|
|
(SELECT
|
|
CASE
|
|
WHEN COUNT(*) = 0 THEN ''
|
|
WHEN COUNT(*) = 1 THEN MIN(CIS.SERIAL_NO)
|
|
ELSE MIN(CIS.SERIAL_NO) || ' 외 ' || (COUNT(*) - 1)::TEXT || '건'
|
|
END
|
|
FROM CONTRACT_ITEM_SERIAL CIS
|
|
WHERE CIS.ITEM_OBJID = CI.OBJID
|
|
AND UPPER(CIS.STATUS) = 'ACTIVE'
|
|
AND CIS.SERIAL_NO IS NOT NULL) AS SERIAL_NO,
|
|
-- 수량: CONTRACT_ITEM의 수량
|
|
COALESCE(CI.ORDER_QUANTITY::numeric, PM.QUANTITY::numeric, 0) AS QUANTITY,
|
|
-- 요청납기: CONTRACT_ITEM 우선
|
|
COALESCE(CI.DUE_DATE, PM.DUE_DATE, CM.req_del_date) AS REQ_DEL_DATE,
|
|
-- 고객요청사항: CONTRACT_ITEM에서 가져옴
|
|
COALESCE(CI.CUSTOMER_REQUEST, '') AS CUSTOMER_REQUEST,
|
|
-- E-BOM 정보: CI.PART_OBJID가 E-BOM OBJID를 가리킴
|
|
COALESCE(CI.PART_OBJID, PM.PART_OBJID) AS BOM_REPORT_OBJID,
|
|
COALESCE(
|
|
(SELECT PBR.STATUS
|
|
FROM PART_BOM_REPORT PBR
|
|
WHERE PBR.OBJID::VARCHAR = COALESCE(CI.PART_OBJID, PM.PART_OBJID)
|
|
LIMIT 1),
|
|
''
|
|
) AS EBOM_STATUS,
|
|
COALESCE(
|
|
(SELECT TO_CHAR(PBR.REGDATE, 'YYYY-MM-DD')
|
|
FROM PART_BOM_REPORT PBR
|
|
WHERE PBR.OBJID::VARCHAR = COALESCE(CI.PART_OBJID, PM.PART_OBJID)
|
|
LIMIT 1),
|
|
''
|
|
) AS EBOM_REGDATE,
|
|
-- M-BOM HEADER OBJID: 구매리스트 생성 시 필요
|
|
(SELECT MH.OBJID::VARCHAR
|
|
FROM MBOM_HEADER MH
|
|
WHERE MH.PROJECT_OBJID = PM.OBJID::VARCHAR
|
|
AND MH.STATUS = 'Y'
|
|
ORDER BY MH.REGDATE DESC
|
|
LIMIT 1) AS MBOM_HEADER_OBJID,
|
|
-- 구매리스트 OBJID: 이미 생성된 구매리스트가 있는지 확인용
|
|
(SELECT SRM.OBJID::VARCHAR
|
|
FROM SALES_REQUEST_MASTER SRM
|
|
WHERE SRM.MBOM_HEADER_OBJID = (
|
|
SELECT MH.OBJID::VARCHAR
|
|
FROM MBOM_HEADER MH
|
|
WHERE MH.PROJECT_OBJID = PM.OBJID::VARCHAR
|
|
AND MH.STATUS = 'Y'
|
|
ORDER BY MH.REGDATE DESC
|
|
LIMIT 1
|
|
)
|
|
LIMIT 1) AS PURCHASE_LIST_OBJID,
|
|
-- M-BOM 상태: 새 MBOM_HEADER 테이블에서 조회
|
|
COALESCE(
|
|
(SELECT
|
|
CASE
|
|
WHEN COUNT(*) > 0 THEN 'Y'
|
|
ELSE COALESCE(PM.MBOM_STATUS, '')
|
|
END
|
|
FROM MBOM_HEADER MH
|
|
WHERE MH.PROJECT_OBJID = PM.OBJID::VARCHAR
|
|
AND MH.STATUS = 'Y'
|
|
LIMIT 1),
|
|
COALESCE(PM.MBOM_STATUS, '')
|
|
) AS MBOM_STATUS,
|
|
-- M-BOM 품번: 새 MBOM_HEADER 테이블에서 조회
|
|
COALESCE(
|
|
(SELECT MH.MBOM_NO
|
|
FROM MBOM_HEADER MH
|
|
WHERE MH.PROJECT_OBJID = PM.OBJID::VARCHAR
|
|
AND MH.STATUS = 'Y'
|
|
ORDER BY MH.REGDATE DESC
|
|
LIMIT 1),
|
|
''
|
|
) AS MBOM_PART_NO,
|
|
'1.0' AS MBOM_VERSION,
|
|
-- M-BOM 저장일: 새 MBOM_HEADER 테이블에서 조회 (수정일 우선, 없으면 등록일)
|
|
(SELECT TO_CHAR(COALESCE(MH.EDIT_DATE, MH.REGDATE), 'YYYY-MM-DD')
|
|
FROM MBOM_HEADER MH
|
|
WHERE MH.PROJECT_OBJID = PM.OBJID::VARCHAR
|
|
AND MH.STATUS = 'Y'
|
|
ORDER BY COALESCE(MH.EDIT_DATE, MH.REGDATE) DESC
|
|
LIMIT 1) AS MBOM_REGDATE
|
|
FROM
|
|
PROJECT_MGMT PM
|
|
LEFT JOIN CONTRACT_MGMT CM ON PM.CONTRACT_OBJID = CM.OBJID
|
|
LEFT OUTER JOIN CONTRACT_ITEM CI ON PM.CONTRACT_OBJID = CI.CONTRACT_OBJID
|
|
AND PM.PART_OBJID = CI.PART_OBJID
|
|
-- CONTRACT_ITEM과 LEFT JOIN하여 품목별로 펼쳐서 보이기
|
|
-- LEFT JOIN CONTRACT_ITEM CI ON CM.OBJID::VARCHAR = CI.CONTRACT_OBJID
|
|
AND CI.STATUS = 'ACTIVE'
|
|
WHERE 1=1
|
|
AND PM.PROJECT_NO IS NOT NULL
|
|
AND PM.PROJECT_NO != ''
|
|
<!-- 품번 검색 (대소문자 구분 없음) -->
|
|
<if test="search_part_no != null and search_part_no != ''">
|
|
AND (
|
|
UPPER(PM.PART_NO) LIKE '%' || UPPER(#{search_part_no}) || '%'
|
|
OR UPPER(CI.PART_NO) LIKE '%' || UPPER(#{search_part_no}) || '%'
|
|
)
|
|
</if>
|
|
<!-- 품명 검색 (대소문자 구분 없음) -->
|
|
<if test="search_part_name != null and search_part_name != ''">
|
|
AND (
|
|
UPPER(PM.PART_NAME) LIKE '%' || UPPER(#{search_part_name}) || '%'
|
|
OR UPPER(CI.PART_NAME) LIKE '%' || UPPER(#{search_part_name}) || '%'
|
|
)
|
|
</if>
|
|
ORDER BY PM.REGDATE DESC, CI.PART_NO
|
|
</select>
|
|
|
|
<!-- E-BOM을 PROJECT_MGMT에 할당 -->
|
|
<update id="assignEbomToProject" parameterType="map">
|
|
UPDATE PROJECT_MGMT
|
|
SET
|
|
PART_OBJID = #{bomReportObjid}
|
|
WHERE OBJID = #{projectMgmtObjid}
|
|
</update>
|
|
|
|
<!-- E-BOM 정보 조회 -->
|
|
<select id="getEbomInfo" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
T.OBJID,
|
|
T.PRODUCT_CD,
|
|
CODE_NAME(T.PRODUCT_CD) as PRODUCT_NAME,
|
|
T.PART_NO,
|
|
T.PART_NAME,
|
|
T.STATUS,
|
|
T.REVISION,
|
|
TO_CHAR(T.REGDATE, 'YYYY-MM-DD') AS REG_DATE,
|
|
UI.USER_NAME AS WRITER_NAME,
|
|
UI.DEPT_NAME
|
|
FROM
|
|
PART_BOM_REPORT T
|
|
LEFT JOIN USER_INFO UI ON UI.USER_ID = T.WRITER
|
|
WHERE T.OBJID::VARCHAR = #{objid}
|
|
</select>
|
|
|
|
<!-- M-BOM 상세 조회 (PROJECT_MGMT + CONTRACT_MGMT 정보) -->
|
|
<select id="getProjectMgmtDetail" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
PM.OBJID,
|
|
PM.CONTRACT_OBJID,
|
|
PM.PROJECT_NO,
|
|
PM.BOM_REPORT_OBJID,
|
|
PM.PART_NO,
|
|
PM.PART_NAME,
|
|
PM.SOURCE_BOM_TYPE,
|
|
PM.SOURCE_EBOM_OBJID,
|
|
PM.SOURCE_MBOM_OBJID,
|
|
PM.QUANTITY,
|
|
COALESCE(
|
|
(SELECT PBR.PART_NO
|
|
FROM PART_BOM_REPORT PBR
|
|
WHERE PBR.OBJID::VARCHAR = PM.BOM_REPORT_OBJID
|
|
AND PM.MBOM_STATUS = 'Y'
|
|
LIMIT 1),
|
|
''
|
|
) AS MBOM_PART_NO,
|
|
CM.CATEGORY_CD,
|
|
COALESCE(
|
|
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CM.CATEGORY_CD LIMIT 1),
|
|
''
|
|
) AS CATEGORY_NAME,
|
|
CM.PRODUCT,
|
|
CM.PRODUCT AS PRODUCT_CODE,
|
|
COALESCE(
|
|
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CM.PRODUCT LIMIT 1),
|
|
''
|
|
) AS PRODUCT_NAME,
|
|
CM.AREA_CD,
|
|
COALESCE(
|
|
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CM.AREA_CD LIMIT 1),
|
|
''
|
|
) AS AREA_NAME,
|
|
CM.CUSTOMER_OBJID,
|
|
COALESCE(
|
|
(SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE OBJID = CM.CUSTOMER_OBJID::NUMERIC LIMIT 1),
|
|
''
|
|
) AS CUSTOMER_NAME,
|
|
CM.PAID_TYPE,
|
|
CM.REQ_DEL_DATE,
|
|
TO_CHAR(PM.REGDATE, 'YYYY-MM-DD') AS RECEIPT_DATE,
|
|
COALESCE(
|
|
(SELECT TO_CHAR(PBR.REGDATE, 'YYYY-MM-DD')
|
|
FROM PART_BOM_REPORT PBR
|
|
WHERE PBR.OBJID::VARCHAR = PM.BOM_REPORT_OBJID
|
|
AND PM.MBOM_STATUS = 'Y'
|
|
LIMIT 1),
|
|
TO_CHAR(PM.REGDATE, 'YYYY-MM-DD')
|
|
) AS MBOM_REGDATE
|
|
FROM
|
|
PROJECT_MGMT PM
|
|
INNER JOIN CONTRACT_MGMT CM ON PM.CONTRACT_OBJID = CM.OBJID
|
|
WHERE
|
|
PM.OBJID::VARCHAR = #{objId}
|
|
LIMIT 1
|
|
</select>
|
|
|
|
<!-- E-BOM 목록 조회 -->
|
|
<select id="getEbomList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
T.OBJID,
|
|
T.PRODUCT_CD,
|
|
COALESCE(
|
|
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = T.PRODUCT_CD LIMIT 1),
|
|
''
|
|
) AS PRODUCT_NAME,
|
|
T.PART_NO,
|
|
T.PART_NAME,
|
|
T.STATUS,
|
|
T.REVISION,
|
|
TO_CHAR(T.REGDATE, 'YYYY-MM-DD') AS REG_DATE,
|
|
UI.USER_NAME AS WRITER_NAME,
|
|
UI.DEPT_NAME,
|
|
COALESCE(PM.MATERIAL, '') AS MATERIAL,
|
|
COALESCE(PM.MAKER, '') AS SUPPLIER
|
|
FROM
|
|
PART_BOM_REPORT T
|
|
LEFT JOIN USER_INFO UI ON UI.USER_ID = T.WRITER
|
|
LEFT JOIN PART_MNG PM ON PM.PART_NO = T.PART_NO AND PM.STATUS = 'release'
|
|
WHERE 1=1
|
|
<!-- 품번, 품명이 비어있지 않은 것만 조회 -->
|
|
AND T.PART_NO IS NOT NULL
|
|
AND TRIM(T.PART_NO) != ''
|
|
AND T.PART_NAME IS NOT NULL
|
|
AND TRIM(T.PART_NAME) != ''
|
|
<!-- 품번 검색 -->
|
|
<if test="search_part_no != null and search_part_no != ''">
|
|
AND UPPER(T.PART_NO) LIKE '%' || UPPER(#{search_part_no}) || '%'
|
|
</if>
|
|
<!-- 품명 검색 -->
|
|
<if test="search_part_name != null and search_part_name != ''">
|
|
AND UPPER(T.PART_NAME) LIKE '%' || UPPER(#{search_part_name}) || '%'
|
|
</if>
|
|
<!-- 재료 검색 -->
|
|
<if test="search_material != null and search_material != ''">
|
|
AND UPPER(PM.MATERIAL) LIKE '%' || UPPER(#{search_material}) || '%'
|
|
</if>
|
|
<!-- 공급업체 검색 -->
|
|
<if test="search_supplier != null and search_supplier != ''">
|
|
AND UPPER(PM.MAKER) LIKE '%' || UPPER(#{search_supplier}) || '%'
|
|
</if>
|
|
ORDER BY T.REGDATE DESC
|
|
LIMIT 100
|
|
</select>
|
|
|
|
<!-- M-BOM 목록 조회 -->
|
|
<select id="getMbomList" resultType="map" parameterType="map">
|
|
SELECT
|
|
BPQ.OBJID,
|
|
BPQ.BOM_REPORT_OBJID,
|
|
BPQ.PARENT_OBJID,
|
|
BPQ.CHILD_OBJID,
|
|
BPQ.PARENT_PART_NO,
|
|
BPQ.PART_NO,
|
|
BPQ.QTY,
|
|
BPQ.ITEM_QTY,
|
|
BPQ.QTY_TEMP,
|
|
BPQ.SEQ,
|
|
BPQ.STATUS,
|
|
BPQ.LAST_PART_OBJID,
|
|
PM.PART_NO AS PART_NAME,
|
|
PM.PART_NAME AS PART_FULL_NAME,
|
|
PM.REVISION,
|
|
PM.SPEC,
|
|
COALESCE(
|
|
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = PM.PRODUCT_CODE LIMIT 1),
|
|
''
|
|
) AS PRODUCT_NAME,
|
|
COALESCE(
|
|
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = PM.STATUS LIMIT 1),
|
|
''
|
|
) AS STATUS_NAME,
|
|
-- 파일 개수
|
|
COALESCE(PM.CU01_CNT, 0) AS CU01_CNT,
|
|
COALESCE(PM.CU02_CNT, 0) AS CU02_CNT,
|
|
COALESCE(PM.CU03_CNT, 0) AS CU03_CNT,
|
|
-- E-BOM 컬럼들
|
|
COALESCE(PM.MATERIAL, '') AS MATERIAL,
|
|
COALESCE(PM.HEAT_TREATMENT_HARDNESS, '') AS HEAT_TREATMENT_HARDNESS,
|
|
COALESCE(PM.HEAT_TREATMENT_METHOD, '') AS HEAT_TREATMENT_METHOD,
|
|
COALESCE(PM.SURFACE_TREATMENT, '') AS SURFACE_TREATMENT,
|
|
COALESCE(PM.MAKER, '') AS SUPPLIER,
|
|
COALESCE(PM.CATEGORY, '') AS CATEGORY_NAME,
|
|
-- 생산관리 컬럼들
|
|
'' AS SUPPLY_TYPE,
|
|
'' AS RAW_MATERIAL,
|
|
'' AS SIZE,
|
|
0 AS REQUIRED_QTY,
|
|
0 AS ORDER_QTY,
|
|
0 AS PRODUCTION_QTY,
|
|
'' AS PROCESSING_VENDOR,
|
|
'' AS PROCESSING_DEADLINE,
|
|
'' AS GRINDING_DEADLINE,
|
|
-- 구매 컬럼들
|
|
'' AS MATERIAL_PART_NO,
|
|
0 AS NET_QTY,
|
|
0 AS PO_QTY,
|
|
'' AS VENDOR,
|
|
0 AS UNIT_PRICE,
|
|
0 AS TOTAL_PRICE,
|
|
1 AS LEVEL
|
|
FROM
|
|
BOM_PART_QTY BPQ
|
|
LEFT JOIN PART_MGMT PM ON BPQ.PART_NO = PM.PART_NO
|
|
LEFT JOIN PART_BOM_REPORT PBR ON BPQ.BOM_REPORT_OBJID::VARCHAR = PBR.OBJID::VARCHAR
|
|
WHERE 1=1
|
|
AND COALESCE(BPQ.STATUS, '') NOT IN ('deleting', 'deleted')
|
|
<!-- BOM_REPORT_OBJID로 직접 조회 (우선순위 높음) -->
|
|
<if test="bomReportObjId != null and bomReportObjId != ''">
|
|
AND BPQ.BOM_REPORT_OBJID::VARCHAR = #{bomReportObjId}
|
|
</if>
|
|
<!-- 품번 검색 -->
|
|
<if test="partNo != null and partNo != ''">
|
|
AND UPPER(PBR.PART_NO) LIKE '%' || UPPER(#{partNo}) || '%'
|
|
</if>
|
|
<!-- 품명 검색 -->
|
|
<if test="partName != null and partName != ''">
|
|
AND UPPER(PBR.PART_NAME) LIKE '%' || UPPER(#{partName}) || '%'
|
|
</if>
|
|
<!-- M-BOM 품번 검색 -->
|
|
<if test="mbomPartNo != null and mbomPartNo != ''">
|
|
AND UPPER(PBR.PART_NO) LIKE '%' || UPPER(#{mbomPartNo}) || '%'
|
|
</if>
|
|
<!-- 저장일 검색 -->
|
|
<if test="saveDate != null and saveDate != ''">
|
|
AND DATE(PBR.REGDATE) = #{saveDate}
|
|
</if>
|
|
ORDER BY BPQ.SEQ
|
|
LIMIT 1000
|
|
</select>
|
|
|
|
<!-- M-BOM 상세 데이터 조회 (프로젝트별) -->
|
|
<select id="getMbomDetailByProject" resultType="map" parameterType="map">
|
|
/* productionplanning.getMbomDetailByProject - PROJECT_MGMT의 BOM_REPORT_OBJID로 M-BOM 조회 */
|
|
SELECT
|
|
BPQ.OBJID,
|
|
BPQ.BOM_REPORT_OBJID,
|
|
BPQ.PARENT_OBJID,
|
|
BPQ.CHILD_OBJID,
|
|
BPQ.PARENT_PART_NO,
|
|
COALESCE(PM.PART_NO, '') AS PART_NO,
|
|
BPQ.QTY,
|
|
BPQ.ITEM_QTY,
|
|
BPQ.QTY_TEMP,
|
|
BPQ.SEQ,
|
|
BPQ.STATUS,
|
|
BPQ.LAST_PART_OBJID,
|
|
COALESCE(PM.PART_NAME, '') AS PART_NAME,
|
|
'' AS REVISION,
|
|
'' AS SPEC,
|
|
'' AS PRODUCT_NAME,
|
|
'' AS STATUS_NAME,
|
|
-- 파일 개수
|
|
0 AS CU01_CNT,
|
|
0 AS CU02_CNT,
|
|
0 AS CU03_CNT,
|
|
-- E-BOM 컬럼들
|
|
'' AS MATERIAL,
|
|
'' AS HEAT_TREATMENT_HARDNESS,
|
|
'' AS HEAT_TREATMENT_METHOD,
|
|
'' AS SURFACE_TREATMENT,
|
|
'' AS SUPPLIER,
|
|
'' AS CATEGORY_NAME,
|
|
-- 생산관리 컬럼들
|
|
'' AS SUPPLY_TYPE,
|
|
'' AS RAW_MATERIAL,
|
|
'' AS SIZE,
|
|
0 AS REQUIRED_QTY,
|
|
0 AS ORDER_QTY,
|
|
0 AS PRODUCTION_QTY,
|
|
'' AS PROCESSING_VENDOR,
|
|
'' AS PROCESSING_DEADLINE,
|
|
'' AS GRINDING_DEADLINE,
|
|
-- 구매 컬럼들
|
|
'' AS MATERIAL_PART_NO,
|
|
0 AS NET_QTY,
|
|
0 AS PO_QTY,
|
|
'' AS VENDOR,
|
|
0 AS UNIT_PRICE,
|
|
0 AS TOTAL_PRICE,
|
|
1 AS LEVEL
|
|
FROM
|
|
PROJECT_MGMT PROJ
|
|
INNER JOIN BOM_PART_QTY BPQ ON PROJ.BOM_REPORT_OBJID::VARCHAR = BPQ.BOM_REPORT_OBJID::VARCHAR
|
|
LEFT JOIN PART_MGMT PM ON PM.OBJID::VARCHAR = BPQ.PART_NO::VARCHAR
|
|
WHERE
|
|
PROJ.OBJID::VARCHAR = #{objId}
|
|
AND COALESCE(BPQ.STATUS, '') NOT IN ('deleting', 'deleted')
|
|
AND PROJ.BOM_REPORT_OBJID IS NOT NULL
|
|
AND PROJ.BOM_REPORT_OBJID != ''
|
|
ORDER BY
|
|
BPQ.SEQ
|
|
</select>
|
|
|
|
<!-- 품번으로 최신 M-BOM 조회 (Machine 이외 제품용) -->
|
|
<select id="getLatestMbomByPartNo" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
PM.OBJID,
|
|
COALESCE(
|
|
(SELECT PBR.PART_NO
|
|
FROM PART_BOM_REPORT PBR
|
|
WHERE PBR.OBJID::VARCHAR = PM.BOM_REPORT_OBJID
|
|
LIMIT 1),
|
|
''
|
|
) AS MBOM_PART_NO,
|
|
PM.BOM_REPORT_OBJID,
|
|
PM.PART_NO,
|
|
PM.PART_NAME,
|
|
TO_CHAR(PM.REGDATE, 'YYYY-MM-DD') AS SAVE_DATE
|
|
FROM
|
|
PROJECT_MGMT PM
|
|
INNER JOIN CONTRACT_MGMT CM ON PM.CONTRACT_OBJID = CM.OBJID
|
|
WHERE
|
|
PM.PART_NO = #{partNo}
|
|
AND PM.MBOM_STATUS = 'Y'
|
|
AND PM.BOM_REPORT_OBJID IS NOT NULL
|
|
AND CM.PRODUCT != '0001807' <!-- Machine 제외 -->
|
|
ORDER BY
|
|
PM.REGDATE DESC
|
|
LIMIT 1
|
|
</select>
|
|
|
|
<!-- M-BOM 이력 조회 -->
|
|
<select id="getMbomHistory" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
MH.OBJID,
|
|
MH.MBOM_HEADER_OBJID,
|
|
MH.CHANGE_TYPE,
|
|
MH.CHANGE_DESCRIPTION,
|
|
MH.BEFORE_DATA,
|
|
MH.AFTER_DATA,
|
|
MH.CHANGE_USER,
|
|
TO_CHAR(MH.CHANGE_DATE, 'YYYY-MM-DD HH24:MI:SS') AS CHANGE_DATE,
|
|
-- MBOM_HEADER 정보 조인
|
|
MHD.MBOM_NO AS MBOM_PART_NO,
|
|
MHD.PROJECT_OBJID,
|
|
TO_CHAR(MHD.REGDATE, 'YYYY-MM-DD HH24:MI:SS') AS REGDATE
|
|
FROM
|
|
MBOM_HISTORY MH
|
|
INNER JOIN MBOM_HEADER MHD ON MH.MBOM_HEADER_OBJID = MHD.OBJID
|
|
WHERE
|
|
MHD.PROJECT_OBJID = #{projectObjId}
|
|
ORDER BY MH.CHANGE_DATE DESC
|
|
</select>
|
|
|
|
<!-- E-BOM을 M-BOM으로 복사 -->
|
|
<insert id="saveMbomFromEbom" parameterType="map">
|
|
/* productionplanning.saveMbomFromEbom - E-BOM을 M-BOM으로 복사 */
|
|
/* 1. 새로운 PART_BOM_REPORT 생성 (M-BOM용) */
|
|
/* M-BOM 품번을 PART_NO에 저장 (규칙: M-{품번}-YYMMDD-01) */
|
|
WITH new_bom_report AS (
|
|
INSERT INTO PART_BOM_REPORT (
|
|
OBJID,
|
|
PART_NO,
|
|
PART_NAME,
|
|
WRITER,
|
|
REGDATE,
|
|
STATUS
|
|
) VALUES (
|
|
(SELECT (FLOOR(RANDOM() * 1000000000) + 1000000000)::INTEGER),
|
|
#{MBOM_PART_NO},
|
|
#{PART_NAME},
|
|
#{USER_ID},
|
|
NOW(),
|
|
'Y'
|
|
)
|
|
RETURNING OBJID
|
|
),
|
|
/* 2. E-BOM의 BOM_PART_QTY 데이터를 새 M-BOM으로 복사 */
|
|
copied_bom_data AS (
|
|
INSERT INTO BOM_PART_QTY (
|
|
BOM_REPORT_OBJID,
|
|
OBJID,
|
|
PARENT_OBJID,
|
|
CHILD_OBJID,
|
|
PARENT_PART_NO,
|
|
PART_NO,
|
|
QTY,
|
|
ITEM_QTY,
|
|
QTY_TEMP,
|
|
REGDATE,
|
|
WRITER,
|
|
SEQ,
|
|
STATUS,
|
|
LAST_PART_OBJID
|
|
)
|
|
SELECT
|
|
(SELECT OBJID FROM new_bom_report),
|
|
(SELECT (FLOOR(RANDOM() * 1000000000) + 1000000000 + ROW_NUMBER() OVER (ORDER BY OBJID))::INTEGER),
|
|
PARENT_OBJID,
|
|
CHILD_OBJID,
|
|
PARENT_PART_NO,
|
|
PART_NO,
|
|
QTY,
|
|
ITEM_QTY,
|
|
QTY_TEMP,
|
|
NOW(),
|
|
#{USER_ID},
|
|
ROW_NUMBER() OVER (ORDER BY OBJID),
|
|
'adding',
|
|
LAST_PART_OBJID
|
|
FROM BOM_PART_QTY
|
|
WHERE BOM_REPORT_OBJID::VARCHAR = #{SOURCE_BOM_OBJID}
|
|
AND COALESCE(STATUS, '') NOT IN ('deleting', 'deleted')
|
|
RETURNING 1
|
|
)
|
|
/* 3. PROJECT_MGMT 업데이트 */
|
|
UPDATE PROJECT_MGMT
|
|
SET
|
|
BOM_REPORT_OBJID = (SELECT OBJID FROM new_bom_report),
|
|
MBOM_STATUS = 'Y',
|
|
PART_NO = #{PART_NO},
|
|
PART_NAME = #{PART_NAME}
|
|
WHERE OBJID::VARCHAR = #{PROJECT_OBJID}
|
|
</insert>
|
|
|
|
<!-- M-BOM 관련 쿼리 -->
|
|
|
|
<!-- BOM 할당 정보 저장 (M-BOM 기준 설정) -->
|
|
<update id="saveBomAssignment" parameterType="map">
|
|
UPDATE PROJECT_MGMT
|
|
SET
|
|
SOURCE_BOM_TYPE = #{sourceBomType},
|
|
SOURCE_EBOM_OBJID = CASE WHEN #{sourceBomType} = 'EBOM' THEN #{sourceBomObjId} ELSE NULL END,
|
|
SOURCE_MBOM_OBJID = CASE WHEN #{sourceBomType} = 'MBOM' THEN #{sourceBomObjId} ELSE NULL END
|
|
WHERE OBJID::VARCHAR = #{projectObjId}
|
|
</update>
|
|
|
|
<!-- 프로젝트의 최신 저장된 M-BOM 조회 -->
|
|
<select id="getLatestMbomByProjectId" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
OBJID,
|
|
MBOM_NO,
|
|
SOURCE_BOM_TYPE,
|
|
SOURCE_EBOM_OBJID,
|
|
SOURCE_MBOM_OBJID,
|
|
PROJECT_OBJID,
|
|
STATUS,
|
|
REGDATE
|
|
FROM MBOM_HEADER
|
|
WHERE PROJECT_OBJID = #{projectObjId}
|
|
AND STATUS = 'Y'
|
|
ORDER BY REGDATE DESC
|
|
LIMIT 1
|
|
</select>
|
|
|
|
<!-- 품번 기준 최신 M-BOM 템플릿 조회 (Machine 이외 제품용) -->
|
|
<select id="getLatestMbomTemplateByPartNo" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
MH.OBJID AS TEMPLATE_HEADER_OBJID,
|
|
MH.MBOM_NO AS TEMPLATE_MBOM_NO,
|
|
MH.PART_NO,
|
|
MH.PART_NAME,
|
|
MH.SOURCE_BOM_TYPE,
|
|
MH.SOURCE_EBOM_OBJID,
|
|
MH.SOURCE_MBOM_OBJID,
|
|
TO_CHAR(MH.REGDATE, 'YYYY-MM-DD HH24:MI:SS') AS REGDATE
|
|
FROM MBOM_HEADER MH
|
|
INNER JOIN PROJECT_MGMT PM ON MH.PROJECT_OBJID = PM.OBJID
|
|
INNER JOIN CONTRACT_MGMT CM ON PM.CONTRACT_OBJID = CM.OBJID
|
|
WHERE MH.PART_NO = #{partNo}
|
|
AND MH.STATUS = 'Y'
|
|
AND CM.PRODUCT != '0000928' <!-- Machine 제외 -->
|
|
ORDER BY MH.REGDATE DESC
|
|
LIMIT 1
|
|
</select>
|
|
|
|
<!-- 템플릿 M-BOM의 상세 항목 조회 -->
|
|
<select id="getMbomTemplateDetails" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
WITH RECURSIVE VIEW_BOM(
|
|
MBOM_HEADER_OBJID,
|
|
OBJID,
|
|
PARENT_OBJID,
|
|
CHILD_OBJID,
|
|
PART_OBJID,
|
|
PART_NO,
|
|
PART_NAME,
|
|
QTY,
|
|
ITEM_QTY,
|
|
QTY_TEMP,
|
|
REGDATE,
|
|
SEQ,
|
|
STATUS,
|
|
LEV,
|
|
PATH,
|
|
PATH2,
|
|
CYCLE,
|
|
UNIT,
|
|
SUPPLY_TYPE,
|
|
MAKE_OR_BUY,
|
|
RAW_MATERIAL_PART_NO,
|
|
RAW_MATERIAL_SPEC,
|
|
RAW_MATERIAL,
|
|
RAW_MATERIAL_SIZE,
|
|
PROCESSING_VENDOR,
|
|
PROCESSING_DEADLINE,
|
|
GRINDING_DEADLINE,
|
|
REQUIRED_QTY,
|
|
WRITER,
|
|
EDITER,
|
|
EDIT_DATE,
|
|
REMARK
|
|
) AS (
|
|
SELECT
|
|
A.MBOM_HEADER_OBJID,
|
|
A.OBJID,
|
|
A.PARENT_OBJID,
|
|
A.CHILD_OBJID,
|
|
A.PART_OBJID,
|
|
A.PART_NO,
|
|
A.PART_NAME,
|
|
A.QTY,
|
|
A.QTY,
|
|
A.QTY,
|
|
A.REGDATE,
|
|
A.SEQ,
|
|
A.STATUS,
|
|
1,
|
|
ARRAY [A.CHILD_OBJID::TEXT],
|
|
ARRAY [A.SEQ::TEXT],
|
|
FALSE,
|
|
A.UNIT,
|
|
A.SUPPLY_TYPE,
|
|
A.MAKE_OR_BUY,
|
|
A.RAW_MATERIAL_PART_NO,
|
|
A.RAW_MATERIAL_SPEC,
|
|
A.RAW_MATERIAL,
|
|
A.RAW_MATERIAL_SIZE,
|
|
A.PROCESSING_VENDOR,
|
|
A.PROCESSING_DEADLINE,
|
|
A.GRINDING_DEADLINE,
|
|
A.REQUIRED_QTY,
|
|
A.WRITER,
|
|
A.EDITER,
|
|
A.EDIT_DATE,
|
|
A.REMARK
|
|
FROM
|
|
MBOM_DETAIL A
|
|
WHERE 1=1
|
|
AND (A.PARENT_OBJID IS NULL OR A.PARENT_OBJID = '')
|
|
AND A.MBOM_HEADER_OBJID = #{mbomHeaderObjid}
|
|
AND A.STATUS = 'ACTIVE'
|
|
|
|
UNION ALL
|
|
|
|
SELECT
|
|
B.MBOM_HEADER_OBJID,
|
|
B.OBJID,
|
|
B.PARENT_OBJID,
|
|
B.CHILD_OBJID,
|
|
B.PART_OBJID,
|
|
B.PART_NO,
|
|
B.PART_NAME,
|
|
B.QTY,
|
|
B.QTY,
|
|
B.QTY,
|
|
B.REGDATE,
|
|
B.SEQ,
|
|
B.STATUS,
|
|
LEV + 1,
|
|
PATH||B.CHILD_OBJID::TEXT,
|
|
PATH2||B.SEQ::TEXT,
|
|
B.PARENT_OBJID = ANY(PATH),
|
|
B.UNIT,
|
|
B.SUPPLY_TYPE,
|
|
B.MAKE_OR_BUY,
|
|
B.RAW_MATERIAL_PART_NO,
|
|
B.RAW_MATERIAL_SPEC,
|
|
B.RAW_MATERIAL,
|
|
B.RAW_MATERIAL_SIZE,
|
|
B.PROCESSING_VENDOR,
|
|
B.PROCESSING_DEADLINE,
|
|
B.GRINDING_DEADLINE,
|
|
B.REQUIRED_QTY,
|
|
B.WRITER,
|
|
B.EDITER,
|
|
B.EDIT_DATE,
|
|
B.REMARK
|
|
FROM
|
|
MBOM_DETAIL B
|
|
JOIN
|
|
VIEW_BOM
|
|
ON B.PARENT_OBJID = VIEW_BOM.CHILD_OBJID
|
|
AND VIEW_BOM.MBOM_HEADER_OBJID = B.MBOM_HEADER_OBJID
|
|
AND B.STATUS = 'ACTIVE'
|
|
)
|
|
SELECT
|
|
V.MBOM_HEADER_OBJID AS BOM_REPORT_OBJID,
|
|
V.OBJID,
|
|
V.PARENT_OBJID,
|
|
V.CHILD_OBJID,
|
|
V.PART_OBJID,
|
|
V.PART_OBJID AS LAST_PART_OBJID,
|
|
V.PART_OBJID AS BOM_LAST_PART_OBJID,
|
|
V.PART_NO,
|
|
V.PART_NAME,
|
|
V.QTY,
|
|
V.ITEM_QTY,
|
|
V.QTY_TEMP,
|
|
V.LEV AS LEVEL,
|
|
(SELECT COUNT(*) FROM MBOM_DETAIL WHERE PARENT_OBJID = V.CHILD_OBJID) AS SUB_PART_CNT,
|
|
V.SEQ,
|
|
V.STATUS,
|
|
-- M-BOM 전용 필드
|
|
V.UNIT,
|
|
V.SUPPLY_TYPE,
|
|
V.MAKE_OR_BUY,
|
|
V.RAW_MATERIAL_PART_NO AS RAW_MATERIAL_NO,
|
|
V.RAW_MATERIAL_SPEC,
|
|
V.RAW_MATERIAL,
|
|
V.RAW_MATERIAL_SIZE AS SIZE,
|
|
V.PROCESSING_VENDOR,
|
|
V.PROCESSING_DEADLINE,
|
|
V.GRINDING_DEADLINE,
|
|
V.REQUIRED_QTY,
|
|
-- ORDER_QTY, PRODUCTION_QTY는 새 프로젝트에서 재계산되므로 제외
|
|
V.WRITER,
|
|
TO_CHAR(V.REGDATE, 'YYYY-MM-DD HH24:MI:SS') AS REGDATE,
|
|
V.EDITER,
|
|
CASE WHEN V.EDIT_DATE IS NOT NULL THEN TO_CHAR(V.EDIT_DATE, 'YYYY-MM-DD HH24:MI:SS') ELSE NULL END AS EDIT_DATE,
|
|
V.REMARK,
|
|
-- E-BOM 호환 필드
|
|
NULL AS PARENT_PART_NO,
|
|
NULL AS CONTRACT_OBJID,
|
|
CASE WHEN V.LEV = 1 THEN V.OBJID ELSE NULL END AS ROOT_OBJID,
|
|
CASE WHEN V.LEV = 1 THEN V.OBJID ELSE NULL END AS SUB_ROOT_OBJID,
|
|
1 AS LEAF,
|
|
-- PART_MNG 테이블에서 추가 정보 (3D/2D/PDF, 재료, 열처리 등)
|
|
P.SPEC,
|
|
P.MATERIAL,
|
|
P.WEIGHT,
|
|
P.PART_TYPE,
|
|
P.REVISION,
|
|
P.MAKER,
|
|
P.THICKNESS,
|
|
P.WIDTH,
|
|
P.HEIGHT,
|
|
P.OUT_DIAMETER,
|
|
P.IN_DIAMETER,
|
|
P.LENGTH,
|
|
P.SOURCING_CODE,
|
|
P.HEAT_TREATMENT_HARDNESS,
|
|
P.HEAT_TREATMENT_METHOD,
|
|
P.SURFACE_TREATMENT,
|
|
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = P.UNIT) AS UNIT_TITLE,
|
|
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = P.PART_TYPE) AS PART_TYPE_TITLE,
|
|
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('3D_CAD')) AS CU01_CNT,
|
|
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_DRAWING_CAD')) AS CU02_CNT,
|
|
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_PDF_CAD')) AS CU03_CNT,
|
|
V.LEV
|
|
FROM VIEW_BOM V
|
|
LEFT JOIN PART_MNG P ON V.PART_OBJID = P.OBJID
|
|
ORDER BY V.PATH2
|
|
</select>
|
|
|
|
<!-- M-BOM 할당 정보 조회 -->
|
|
<select id="getMbomAssignment" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
PM.OBJID,
|
|
PM.SOURCE_BOM_TYPE,
|
|
PM.SOURCE_EBOM_OBJID,
|
|
PM.SOURCE_MBOM_OBJID,
|
|
PM.PART_NO,
|
|
PM.PART_NAME,
|
|
CM.PRODUCT AS PRODUCT_CODE,
|
|
CODE_NAME(CM.PRODUCT) AS PRODUCT_NAME,
|
|
-- E-BOM 정보
|
|
CASE WHEN PM.SOURCE_BOM_TYPE = 'EBOM' THEN
|
|
(SELECT PART_NO FROM PART_BOM_REPORT WHERE OBJID = PM.SOURCE_EBOM_OBJID)
|
|
END AS EBOM_PART_NO,
|
|
CASE WHEN PM.SOURCE_BOM_TYPE = 'EBOM' THEN
|
|
(SELECT PART_NAME FROM PART_BOM_REPORT WHERE OBJID = PM.SOURCE_EBOM_OBJID)
|
|
END AS EBOM_PART_NAME,
|
|
-- M-BOM 정보
|
|
CASE WHEN PM.SOURCE_BOM_TYPE = 'MBOM' THEN
|
|
(SELECT MBOM_NO FROM MBOM_HEADER WHERE OBJID = PM.SOURCE_MBOM_OBJID)
|
|
END AS MBOM_NO,
|
|
CASE WHEN PM.SOURCE_BOM_TYPE = 'MBOM' THEN
|
|
(SELECT PART_NAME FROM MBOM_HEADER WHERE OBJID = PM.SOURCE_MBOM_OBJID)
|
|
END AS MBOM_PART_NAME
|
|
FROM PROJECT_MGMT PM
|
|
INNER JOIN CONTRACT_MGMT CM ON PM.CONTRACT_OBJID = CM.OBJID
|
|
WHERE PM.OBJID::VARCHAR = #{projectObjId}
|
|
</select>
|
|
|
|
<!-- M-BOM 품번 생성 - 같은 날짜의 최대 순번 조회 -->
|
|
<select id="getMaxMbomSeqByDate" parameterType="map" resultType="int">
|
|
SELECT COALESCE(MAX(
|
|
CAST(
|
|
SUBSTRING(
|
|
MBOM_NO FROM LENGTH(MBOM_NO) - 1 FOR 2
|
|
) AS INTEGER
|
|
)
|
|
), 0) AS MAX_SEQ
|
|
FROM MBOM_HEADER
|
|
WHERE MBOM_NO LIKE #{mbomPrefix} || '%'
|
|
AND REGDATE::DATE = CURRENT_DATE
|
|
</select>
|
|
|
|
<!-- M-BOM 품번으로 조회 -->
|
|
<select id="getMbomByNo" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT * FROM MBOM_HEADER
|
|
WHERE PROJECT_OBJID = #{projectObjId}
|
|
ORDER BY REGDATE DESC
|
|
LIMIT 1
|
|
</select>
|
|
|
|
<!-- 프로젝트의 활성 M-BOM 목록 조회 -->
|
|
<select id="getActiveMbomsByProjectId" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT * FROM MBOM_HEADER
|
|
WHERE PROJECT_OBJID = #{projectObjId}
|
|
AND (STATUS = 'Y' OR STATUS = 'ACTIVE')
|
|
ORDER BY REGDATE DESC
|
|
</select>
|
|
|
|
<!-- M-BOM HEADER 비활성화 -->
|
|
<update id="inactivateMbomHeader" parameterType="map">
|
|
UPDATE MBOM_HEADER
|
|
SET STATUS = 'INACTIVE',
|
|
EDIT_DATE = NOW()
|
|
WHERE OBJID = #{mbomHeaderObjid}
|
|
</update>
|
|
|
|
<!-- M-BOM DETAIL 비활성화 -->
|
|
<update id="inactivateMbomDetail" parameterType="map">
|
|
UPDATE MBOM_DETAIL
|
|
SET STATUS = 'INACTIVE',
|
|
EDIT_DATE = NOW()
|
|
WHERE MBOM_HEADER_OBJID = #{mbomHeaderObjid}
|
|
</update>
|
|
|
|
<!-- MBOM_HEADER 삽입 -->
|
|
<insert id="insertMbomHeader" parameterType="map">
|
|
INSERT INTO MBOM_HEADER (
|
|
OBJID, MBOM_NO, SOURCE_BOM_TYPE, SOURCE_EBOM_OBJID, SOURCE_MBOM_OBJID,
|
|
PROJECT_OBJID, PART_NO, PART_NAME, STATUS, MBOM_STATUS,
|
|
WRITER, REGDATE
|
|
) VALUES (
|
|
#{objid}, #{mbomNo}, #{sourceBomType}, #{sourceEbomObjid}, #{sourceMbomObjid},
|
|
#{projectObjId}, #{partNo}, #{partName}, 'Y', 'DRAFT',
|
|
#{sessionUserId}, NOW()
|
|
)
|
|
</insert>
|
|
|
|
<!-- MBOM_DETAIL 삽입 -->
|
|
<insert id="insertMbomDetail" parameterType="map">
|
|
INSERT INTO MBOM_DETAIL (
|
|
OBJID, MBOM_HEADER_OBJID, PARENT_OBJID, CHILD_OBJID, SEQ, LEVEL,
|
|
PART_OBJID, PART_NO, PART_NAME, QTY, UNIT,
|
|
SUPPLY_TYPE, MAKE_OR_BUY,
|
|
RAW_MATERIAL_PART_NO, RAW_MATERIAL_SPEC, RAW_MATERIAL, RAW_MATERIAL_SIZE,
|
|
PROCESSING_VENDOR, PROCESSING_DEADLINE, GRINDING_DEADLINE,
|
|
REQUIRED_QTY, ORDER_QTY, PRODUCTION_QTY, STOCK_QTY, SHORTAGE_QTY,
|
|
NET_QTY, PO_QTY,
|
|
VENDOR, UNIT_PRICE, TOTAL_PRICE, CURRENCY, LEAD_TIME, MIN_ORDER_QTY,
|
|
<if test="proposalDate != null">
|
|
PROPOSAL_DATE,
|
|
</if>
|
|
STATUS, WRITER, REGDATE, REMARK
|
|
) VALUES (
|
|
#{objid}, #{mbomHeaderObjid}, #{parentObjid}, #{childObjid}, #{seq}, #{level},
|
|
#{partObjid}, #{partNo}, #{partName}, #{qty}, #{unit},
|
|
#{supplyType}, #{makeOrBuy},
|
|
#{rawMaterialPartNo}, #{rawMaterialSpec}, #{rawMaterial}, #{rawMaterialSize},
|
|
#{processingVendor}, #{processingDeadline}, #{grindingDeadline},
|
|
#{requiredQty}, #{orderQty}, #{productionQty}, #{stockQty}, #{shortageQty},
|
|
#{netQty}, #{poQty},
|
|
#{vendor}, #{unitPrice}, #{totalPrice}, #{currency}, #{leadTime}, #{minOrderQty},
|
|
<if test="proposalDate != null">
|
|
#{proposalDate},
|
|
</if>
|
|
'ACTIVE', #{sessionUserId}, NOW(), #{remark}
|
|
)
|
|
</insert>
|
|
|
|
<!-- MBOM_HEADER 업데이트 -->
|
|
<update id="updateMbomHeader" parameterType="map">
|
|
UPDATE MBOM_HEADER
|
|
SET
|
|
PART_NO = #{partNo},
|
|
PART_NAME = #{partName},
|
|
EDITER = #{sessionUserId},
|
|
EDIT_DATE = NOW()
|
|
WHERE OBJID = #{mbomHeaderObjid}
|
|
</update>
|
|
|
|
<!-- MBOM_DETAIL 삭제 (수정 시 기존 데이터 삭제 후 재삽입) -->
|
|
<delete id="deleteMbomDetail" parameterType="map">
|
|
DELETE FROM MBOM_DETAIL
|
|
WHERE MBOM_HEADER_OBJID = #{mbomHeaderObjid}
|
|
</delete>
|
|
|
|
<!-- MBOM_HISTORY 삽입 -->
|
|
<insert id="insertMbomHistory" parameterType="map">
|
|
INSERT INTO MBOM_HISTORY (
|
|
OBJID, MBOM_HEADER_OBJID, CHANGE_TYPE, CHANGE_DESCRIPTION,
|
|
BEFORE_DATA, AFTER_DATA, CHANGE_USER, CHANGE_DATE
|
|
) VALUES (
|
|
#{objid}, #{mbomHeaderObjid}, #{changeType}, #{changeDescription},
|
|
#{beforeData}::JSONB, #{afterData}::JSONB, #{sessionUserId}, NOW()
|
|
)
|
|
</insert>
|
|
|
|
<!-- PROJECT_MGMT MBOM_STATUS 업데이트 -->
|
|
<update id="updateProjectMbomStatus" parameterType="map">
|
|
UPDATE PROJECT_MGMT
|
|
SET
|
|
MBOM_STATUS = 'Y',
|
|
MBOM_WRITER = #{sessionUserId},
|
|
MBOM_REGDATE = NOW()
|
|
WHERE OBJID::VARCHAR = #{projectObjId}
|
|
</update>
|
|
|
|
<!-- M-BOM 목록 조회 (셀렉트박스용) -->
|
|
<select id="getMbomListForSelect" parameterType="map" resultType="map">
|
|
SELECT
|
|
OBJID,
|
|
MBOM_NO,
|
|
SOURCE_BOM_TYPE,
|
|
REGDATE,
|
|
STATUS
|
|
FROM MBOM_HEADER
|
|
WHERE STATUS = 'Y'
|
|
ORDER BY REGDATE DESC, MBOM_NO
|
|
</select>
|
|
|
|
<!-- M-BOM 목록 (bizMakeOptionList용) -->
|
|
<select id="getMbomListForSelect2" parameterType="map" resultType="map">
|
|
SELECT
|
|
OBJID AS CODE,
|
|
COALESCE(MBOM_NO, '') ||
|
|
CASE WHEN SOURCE_BOM_TYPE IS NOT NULL AND SOURCE_BOM_TYPE != '' THEN ' (' || SOURCE_BOM_TYPE || ')' ELSE '' END AS NAME
|
|
FROM MBOM_HEADER
|
|
WHERE STATUS = 'Y'
|
|
ORDER BY REGDATE DESC, MBOM_NO
|
|
</select>
|
|
|
|
<!-- M-BOM 상세 리스트 조회 (이력용) -->
|
|
<select id="getMbomDetailList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
SELECT
|
|
OBJID,
|
|
MBOM_HEADER_OBJID,
|
|
PARENT_OBJID,
|
|
CHILD_OBJID,
|
|
SEQ,
|
|
LEVEL,
|
|
PART_OBJID,
|
|
PART_NO,
|
|
PART_NAME,
|
|
QTY,
|
|
UNIT,
|
|
SUPPLY_TYPE,
|
|
MAKE_OR_BUY,
|
|
RAW_MATERIAL_PART_NO,
|
|
RAW_MATERIAL_SPEC,
|
|
RAW_MATERIAL,
|
|
RAW_MATERIAL_SIZE,
|
|
PROCESSING_VENDOR,
|
|
PROCESSING_DEADLINE,
|
|
GRINDING_DEADLINE,
|
|
REQUIRED_QTY,
|
|
ORDER_QTY,
|
|
PRODUCTION_QTY,
|
|
STOCK_QTY,
|
|
SHORTAGE_QTY,
|
|
NET_QTY,
|
|
PO_QTY,
|
|
VENDOR,
|
|
UNIT_PRICE,
|
|
TOTAL_PRICE,
|
|
CURRENCY,
|
|
LEAD_TIME,
|
|
MIN_ORDER_QTY,
|
|
PROPOSAL_DATE,
|
|
STATUS,
|
|
REMARK
|
|
FROM
|
|
MBOM_DETAIL
|
|
WHERE
|
|
MBOM_HEADER_OBJID = #{mbomHeaderObjid}
|
|
AND STATUS = 'ACTIVE'
|
|
ORDER BY SEQ
|
|
</select>
|
|
|
|
<!-- 저장된 M-BOM 트리 조회 (MBOM_DETAIL 테이블) -->
|
|
<select id="getSavedMbomTreeList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
WITH RECURSIVE VIEW_BOM(
|
|
MBOM_HEADER_OBJID,
|
|
OBJID,
|
|
PARENT_OBJID,
|
|
CHILD_OBJID,
|
|
PART_OBJID,
|
|
PART_NO,
|
|
PART_NAME,
|
|
QTY,
|
|
ITEM_QTY,
|
|
QTY_TEMP,
|
|
REGDATE,
|
|
SEQ,
|
|
STATUS,
|
|
LEV,
|
|
PATH,
|
|
PATH2,
|
|
CYCLE,
|
|
UNIT,
|
|
SUPPLY_TYPE,
|
|
MAKE_OR_BUY,
|
|
RAW_MATERIAL_PART_NO,
|
|
RAW_MATERIAL_SPEC,
|
|
RAW_MATERIAL,
|
|
RAW_MATERIAL_SIZE,
|
|
PROCESSING_VENDOR,
|
|
PROCESSING_DEADLINE,
|
|
GRINDING_DEADLINE,
|
|
REQUIRED_QTY,
|
|
ORDER_QTY,
|
|
PRODUCTION_QTY,
|
|
STOCK_QTY,
|
|
SHORTAGE_QTY,
|
|
VENDOR,
|
|
UNIT_PRICE,
|
|
TOTAL_PRICE,
|
|
CURRENCY,
|
|
LEAD_TIME,
|
|
MIN_ORDER_QTY,
|
|
WRITER,
|
|
EDITER,
|
|
EDIT_DATE,
|
|
REMARK
|
|
) AS (
|
|
SELECT
|
|
A.MBOM_HEADER_OBJID,
|
|
A.OBJID,
|
|
A.PARENT_OBJID,
|
|
A.CHILD_OBJID,
|
|
A.PART_OBJID,
|
|
A.PART_NO,
|
|
A.PART_NAME,
|
|
A.QTY,
|
|
A.QTY,
|
|
A.QTY,
|
|
A.REGDATE,
|
|
A.SEQ,
|
|
A.STATUS,
|
|
1,
|
|
ARRAY [A.CHILD_OBJID::TEXT],
|
|
ARRAY [A.SEQ::TEXT],
|
|
FALSE,
|
|
A.UNIT,
|
|
A.SUPPLY_TYPE,
|
|
A.MAKE_OR_BUY,
|
|
A.RAW_MATERIAL_PART_NO,
|
|
A.RAW_MATERIAL_SPEC,
|
|
A.RAW_MATERIAL,
|
|
A.RAW_MATERIAL_SIZE,
|
|
A.PROCESSING_VENDOR,
|
|
A.PROCESSING_DEADLINE,
|
|
A.GRINDING_DEADLINE,
|
|
A.REQUIRED_QTY,
|
|
A.ORDER_QTY,
|
|
A.PRODUCTION_QTY,
|
|
A.STOCK_QTY,
|
|
A.SHORTAGE_QTY,
|
|
A.VENDOR,
|
|
A.UNIT_PRICE,
|
|
A.TOTAL_PRICE,
|
|
A.CURRENCY,
|
|
A.LEAD_TIME,
|
|
A.MIN_ORDER_QTY,
|
|
A.WRITER,
|
|
A.EDITER,
|
|
A.EDIT_DATE,
|
|
A.REMARK
|
|
FROM
|
|
MBOM_DETAIL A
|
|
WHERE 1=1
|
|
AND (A.PARENT_OBJID IS NULL OR A.PARENT_OBJID = '')
|
|
AND A.MBOM_HEADER_OBJID = #{mbomHeaderObjid}
|
|
AND A.STATUS = 'ACTIVE'
|
|
|
|
UNION ALL
|
|
|
|
SELECT
|
|
B.MBOM_HEADER_OBJID,
|
|
B.OBJID,
|
|
B.PARENT_OBJID,
|
|
B.CHILD_OBJID,
|
|
B.PART_OBJID,
|
|
B.PART_NO,
|
|
B.PART_NAME,
|
|
B.QTY,
|
|
B.QTY,
|
|
B.QTY,
|
|
B.REGDATE,
|
|
B.SEQ,
|
|
B.STATUS,
|
|
LEV + 1,
|
|
PATH||B.CHILD_OBJID::TEXT,
|
|
PATH2||B.SEQ::TEXT,
|
|
B.PARENT_OBJID = ANY(PATH),
|
|
B.UNIT,
|
|
B.SUPPLY_TYPE,
|
|
B.MAKE_OR_BUY,
|
|
B.RAW_MATERIAL_PART_NO,
|
|
B.RAW_MATERIAL_SPEC,
|
|
B.RAW_MATERIAL,
|
|
B.RAW_MATERIAL_SIZE,
|
|
B.PROCESSING_VENDOR,
|
|
B.PROCESSING_DEADLINE,
|
|
B.GRINDING_DEADLINE,
|
|
B.REQUIRED_QTY,
|
|
B.ORDER_QTY,
|
|
B.PRODUCTION_QTY,
|
|
B.STOCK_QTY,
|
|
B.SHORTAGE_QTY,
|
|
B.VENDOR,
|
|
B.UNIT_PRICE,
|
|
B.TOTAL_PRICE,
|
|
B.CURRENCY,
|
|
B.LEAD_TIME,
|
|
B.MIN_ORDER_QTY,
|
|
B.WRITER,
|
|
B.EDITER,
|
|
B.EDIT_DATE,
|
|
B.REMARK
|
|
FROM
|
|
MBOM_DETAIL B
|
|
JOIN
|
|
VIEW_BOM
|
|
ON B.PARENT_OBJID = VIEW_BOM.CHILD_OBJID
|
|
AND VIEW_BOM.MBOM_HEADER_OBJID = B.MBOM_HEADER_OBJID
|
|
AND B.STATUS = 'ACTIVE'
|
|
)
|
|
SELECT
|
|
V.MBOM_HEADER_OBJID AS BOM_REPORT_OBJID,
|
|
V.OBJID,
|
|
V.PARENT_OBJID,
|
|
V.CHILD_OBJID,
|
|
V.PART_OBJID,
|
|
V.PART_OBJID AS LAST_PART_OBJID,
|
|
V.PART_OBJID AS BOM_LAST_PART_OBJID,
|
|
V.PART_NO,
|
|
V.PART_NAME,
|
|
V.QTY,
|
|
V.ITEM_QTY,
|
|
V.QTY_TEMP,
|
|
V.LEV AS LEVEL,
|
|
(SELECT COUNT(*) FROM MBOM_DETAIL WHERE PARENT_OBJID = V.CHILD_OBJID) AS SUB_PART_CNT,
|
|
V.SEQ,
|
|
V.STATUS,
|
|
-- M-BOM 전용 필드
|
|
V.UNIT,
|
|
V.SUPPLY_TYPE,
|
|
V.MAKE_OR_BUY,
|
|
V.RAW_MATERIAL_PART_NO AS RAW_MATERIAL_NO,
|
|
V.RAW_MATERIAL_SPEC,
|
|
V.RAW_MATERIAL,
|
|
V.RAW_MATERIAL_SIZE AS SIZE,
|
|
V.PROCESSING_VENDOR,
|
|
V.PROCESSING_DEADLINE,
|
|
V.GRINDING_DEADLINE,
|
|
V.REQUIRED_QTY,
|
|
V.ORDER_QTY,
|
|
V.PRODUCTION_QTY,
|
|
V.STOCK_QTY,
|
|
V.SHORTAGE_QTY,
|
|
V.VENDOR,
|
|
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG WHERE OBJID::VARCHAR = V.VENDOR) AS VENDOR_NAME,
|
|
V.UNIT_PRICE,
|
|
V.TOTAL_PRICE,
|
|
V.CURRENCY,
|
|
V.LEAD_TIME,
|
|
V.MIN_ORDER_QTY,
|
|
V.WRITER,
|
|
TO_CHAR(V.REGDATE, 'YYYY-MM-DD HH24:MI:SS') AS REGDATE,
|
|
V.EDITER,
|
|
CASE WHEN V.EDIT_DATE IS NOT NULL THEN TO_CHAR(V.EDIT_DATE, 'YYYY-MM-DD HH24:MI:SS') ELSE NULL END AS EDIT_DATE,
|
|
V.REMARK,
|
|
-- E-BOM 호환 필드
|
|
NULL AS PARENT_PART_NO,
|
|
NULL AS CONTRACT_OBJID,
|
|
CASE WHEN V.LEV = 1 THEN V.OBJID ELSE NULL END AS ROOT_OBJID,
|
|
CASE WHEN V.LEV = 1 THEN V.OBJID ELSE NULL END AS SUB_ROOT_OBJID,
|
|
1 AS LEAF,
|
|
-- PART_MNG 테이블에서 추가 정보
|
|
P.SPEC,
|
|
P.MATERIAL,
|
|
P.WEIGHT,
|
|
P.PART_TYPE,
|
|
P.REVISION,
|
|
P.MAKER,
|
|
P.THICKNESS,
|
|
P.WIDTH,
|
|
P.HEIGHT,
|
|
P.OUT_DIAMETER,
|
|
P.IN_DIAMETER,
|
|
P.LENGTH,
|
|
P.SOURCING_CODE,
|
|
P.HEAT_TREATMENT_HARDNESS,
|
|
P.HEAT_TREATMENT_METHOD,
|
|
P.SURFACE_TREATMENT,
|
|
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = P.UNIT) AS UNIT_TITLE,
|
|
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = P.PART_TYPE) AS PART_TYPE_TITLE,
|
|
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('3D_CAD')) AS CU01_CNT,
|
|
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_DRAWING_CAD')) AS CU02_CNT,
|
|
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_PDF_CAD')) AS CU03_CNT,
|
|
V.LEV
|
|
FROM VIEW_BOM V
|
|
INNER JOIN PART_MNG P ON P.OBJID = V.PART_OBJID
|
|
WHERE 1=1
|
|
ORDER BY V.PATH2
|
|
</select>
|
|
|
|
<!-- M-BOM 구조만 조회 (할당용 - 생산 정보 제외) -->
|
|
<select id="getMbomStructureOnly" parameterType="map" resultType="com.pms.common.UpperKeyMap">
|
|
/* productionplanning.getMbomStructureOnly - M-BOM 구조만 조회 (생산 정보 제외) */
|
|
WITH RECURSIVE VIEW_BOM(
|
|
MBOM_HEADER_OBJID,
|
|
OBJID,
|
|
PARENT_OBJID,
|
|
CHILD_OBJID,
|
|
PART_OBJID,
|
|
PART_NO,
|
|
PART_NAME,
|
|
QTY,
|
|
ITEM_QTY,
|
|
QTY_TEMP,
|
|
REGDATE,
|
|
SEQ,
|
|
STATUS,
|
|
LEV,
|
|
PATH,
|
|
PATH2,
|
|
CYCLE,
|
|
UNIT,
|
|
WRITER
|
|
) AS (
|
|
SELECT
|
|
A.MBOM_HEADER_OBJID,
|
|
A.OBJID,
|
|
A.PARENT_OBJID,
|
|
A.CHILD_OBJID,
|
|
A.PART_OBJID,
|
|
A.PART_NO,
|
|
A.PART_NAME,
|
|
A.QTY,
|
|
A.QTY,
|
|
A.QTY,
|
|
A.REGDATE,
|
|
A.SEQ,
|
|
A.STATUS,
|
|
1,
|
|
ARRAY [A.CHILD_OBJID::TEXT],
|
|
ARRAY [A.SEQ::TEXT],
|
|
FALSE,
|
|
A.UNIT,
|
|
A.WRITER
|
|
FROM
|
|
MBOM_DETAIL A
|
|
WHERE 1=1
|
|
AND (A.PARENT_OBJID IS NULL OR A.PARENT_OBJID = '')
|
|
AND A.MBOM_HEADER_OBJID = #{mbomHeaderObjid}
|
|
AND A.STATUS = 'ACTIVE'
|
|
|
|
UNION ALL
|
|
|
|
SELECT
|
|
B.MBOM_HEADER_OBJID,
|
|
B.OBJID,
|
|
B.PARENT_OBJID,
|
|
B.CHILD_OBJID,
|
|
B.PART_OBJID,
|
|
B.PART_NO,
|
|
B.PART_NAME,
|
|
B.QTY,
|
|
B.QTY,
|
|
B.QTY,
|
|
B.REGDATE,
|
|
B.SEQ,
|
|
B.STATUS,
|
|
LEV + 1,
|
|
PATH||B.CHILD_OBJID::TEXT,
|
|
PATH2||B.SEQ::TEXT,
|
|
B.PARENT_OBJID = ANY(PATH),
|
|
B.UNIT,
|
|
B.WRITER
|
|
FROM
|
|
MBOM_DETAIL B
|
|
JOIN
|
|
VIEW_BOM
|
|
ON B.PARENT_OBJID = VIEW_BOM.CHILD_OBJID
|
|
AND VIEW_BOM.MBOM_HEADER_OBJID = B.MBOM_HEADER_OBJID
|
|
AND B.STATUS = 'ACTIVE'
|
|
)
|
|
SELECT
|
|
V.MBOM_HEADER_OBJID AS BOM_REPORT_OBJID,
|
|
V.OBJID,
|
|
V.PARENT_OBJID,
|
|
V.CHILD_OBJID,
|
|
V.PART_OBJID,
|
|
V.PART_OBJID AS LAST_PART_OBJID,
|
|
V.PART_OBJID AS BOM_LAST_PART_OBJID,
|
|
V.PART_NO,
|
|
V.PART_NAME,
|
|
V.QTY,
|
|
V.ITEM_QTY,
|
|
V.QTY_TEMP,
|
|
V.LEV AS LEVEL,
|
|
(SELECT COUNT(*) FROM MBOM_DETAIL WHERE PARENT_OBJID = V.CHILD_OBJID) AS SUB_PART_CNT,
|
|
V.SEQ,
|
|
V.STATUS,
|
|
V.UNIT,
|
|
V.WRITER,
|
|
TO_CHAR(V.REGDATE, 'YYYY-MM-DD HH24:MI:SS') AS REGDATE,
|
|
-- 생산 정보는 모두 NULL
|
|
NULL AS SUPPLY_TYPE,
|
|
NULL AS MAKE_OR_BUY,
|
|
NULL AS RAW_MATERIAL_NO,
|
|
NULL AS RAW_MATERIAL_SPEC,
|
|
NULL AS RAW_MATERIAL,
|
|
NULL AS SIZE,
|
|
NULL AS PROCESSING_VENDOR,
|
|
NULL AS PROCESSING_DEADLINE,
|
|
NULL AS GRINDING_DEADLINE,
|
|
NULL AS REQUIRED_QTY,
|
|
NULL AS ORDER_QTY,
|
|
NULL AS PRODUCTION_QTY,
|
|
NULL AS STOCK_QTY,
|
|
NULL AS SHORTAGE_QTY,
|
|
NULL AS VENDOR,
|
|
NULL AS UNIT_PRICE,
|
|
NULL AS TOTAL_PRICE,
|
|
NULL AS CURRENCY,
|
|
NULL AS LEAD_TIME,
|
|
NULL AS MIN_ORDER_QTY,
|
|
NULL AS EDITER,
|
|
NULL AS EDIT_DATE,
|
|
NULL AS REMARK,
|
|
-- E-BOM 호환 필드
|
|
NULL AS PARENT_PART_NO,
|
|
NULL AS CONTRACT_OBJID,
|
|
CASE WHEN V.LEV = 1 THEN V.OBJID ELSE NULL END AS ROOT_OBJID,
|
|
CASE WHEN V.LEV = 1 THEN V.OBJID ELSE NULL END AS SUB_ROOT_OBJID,
|
|
1 AS LEAF,
|
|
-- PART_MNG 테이블에서 파트 속성 정보
|
|
P.SPEC,
|
|
P.MATERIAL,
|
|
P.WEIGHT,
|
|
P.PART_TYPE,
|
|
P.REVISION,
|
|
P.MAKER,
|
|
P.THICKNESS,
|
|
P.WIDTH,
|
|
P.HEIGHT,
|
|
P.OUT_DIAMETER,
|
|
P.IN_DIAMETER,
|
|
P.LENGTH,
|
|
P.SOURCING_CODE,
|
|
P.HEAT_TREATMENT_HARDNESS,
|
|
P.HEAT_TREATMENT_METHOD,
|
|
P.SURFACE_TREATMENT,
|
|
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = P.UNIT) AS UNIT_TITLE,
|
|
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = P.PART_TYPE) AS PART_TYPE_TITLE,
|
|
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('3D_CAD')) AS CU01_CNT,
|
|
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_DRAWING_CAD')) AS CU02_CNT,
|
|
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_PDF_CAD')) AS CU03_CNT,
|
|
V.LEV
|
|
FROM VIEW_BOM V
|
|
INNER JOIN PART_MNG P ON P.OBJID = V.PART_OBJID
|
|
WHERE 1=1
|
|
ORDER BY V.PATH2
|
|
</select>
|
|
|
|
<!-- MBOM_HEADER 테이블에 OBJID 존재 여부 확인 -->
|
|
<select id="checkMbomHeaderExists" parameterType="map" resultType="int">
|
|
/* productionplanning.checkMbomHeaderExists - M-BOM 존재 확인 */
|
|
SELECT COUNT(*)
|
|
FROM MBOM_HEADER
|
|
WHERE OBJID = #{objid}
|
|
AND STATUS = 'Y'
|
|
</select>
|
|
|
|
</mapper>
|