Files
vexplor/src/com/pms/mapper/productKindSpec.xml
2025-08-21 09:41:46 +09:00

458 lines
13 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="productKindSpec">
<select id ="selectProductKindSpecMaster" parameterType="map" resultType="com.pms.common.UpperKeyMap">
SELECT
COALESCE(SUBSTRING(PROJECT_NO_MAX,POSITION('-' IN PROJECT_NO_MAX)+1), '0') PROJECT_NO_MAX_NUM,
T.*
FROM
(SELECT
CODE_NAME(T.PRODUCT) AS PRODUCT_NAME
,T.FACILITY_QTY
,WT.TITLE
,(SELECT MAX(PROJECT_NO) FROM PROJECT_MGMT P WHERE T.OBJID = P.CONTRACT_OBJID) PROJECT_NO_MAX
FROM CONTRACT_MGMT T
INNER JOIN PMS_WBS_TEMPLATE WT
ON T.PRODUCT = WT.PRODUCT_OBJID
WHERE 1=1
AND T.OBJID = #{OBJID_CONTRACT}
AND WT.TITLE = #{MECHANICAL_TYPE}
<!--
LIMIT 1
-->
) T
</select>
<select id ="selectProductKindSpecProjectList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
SELECT
CODE_NAME(T.PRODUCT) AS PRODUCT_NAME
,T.FACILITY_QTY
,REPLACE(PROJECT_NO, '-', '_') PROJECT_NO
FROM PROJECT_MGMT T
WHERE 1=1
AND T.CONTRACT_OBJID = #{OBJID_CONTRACT}
<!--
AND T.OBJID = #{OBJID}
-->
ORDER BY PROJECT_NO ASC
</select>
<select id ="searchProductKindSpecGridList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
SELECT
<!--
TITLE||'-'|| (SUBSTRING(COALESCE(PROJECT_NO_MAX, '0'), POSITION('-' IN PROJECT_NO_MAX)+1)::NUMERIC+1)
||' ~ '||
TITLE||'-'||((SUBSTRING(COALESCE(PROJECT_NO_MAX, '0'), POSITION('-' IN PROJECT_NO_MAX)+1)::NUMERIC)+(FACILITY_QTY::NUMERIC)) PROJECT_NO_MAX_NUM,
CASE WHEN T.FACILITY_QTY::NUMERIC &lt; 2 THEN (SELECT MAX(PROJECT_NO) FROM PROJECT_MGMT P WHERE P.CONTRACT_OBJID = T.OBJID_CONTRACT)
ELSE
(SELECT MIN(PROJECT_NO) FROM PROJECT_MGMT P WHERE P.CONTRACT_OBJID = T.OBJID_CONTRACT)
||' ~ '||
(SELECT MAX(PROJECT_NO) FROM PROJECT_MGMT P WHERE P.CONTRACT_OBJID = T.OBJID_CONTRACT)
END PROJECT_NO_MAX_NUM,
-->
T.*
FROM
(
SELECT
T.OBJID OBJID_CONTRACT
,CASE WHEN T.FACILITY_QTY::NUMERIC &lt; 2 THEN (SELECT MAX(PROJECT_NO) FROM PROJECT_MGMT P WHERE P.CONTRACT_OBJID = T.OBJID)
ELSE
(SELECT MIN(PROJECT_NO) FROM PROJECT_MGMT P WHERE P.CONTRACT_OBJID = T.OBJID)
||' ~ '||
(SELECT MAX(PROJECT_NO) FROM PROJECT_MGMT P WHERE P.CONTRACT_OBJID = T.OBJID)
END PROJECT_NO_MAX_NUM
,T.CATEGORY_CD
,CODE_NAME(T.CATEGORY_CD) AS CATEGORY_NAME
,T.CUSTOMER_OBJID
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID = T.CUSTOMER_OBJID::NUMERIC) AS CUSTOMER_NAME
,T.PRODUCT
,CODE_NAME(T.PRODUCT)||'('||T.MECHANICAL_TYPE||')' AS PRODUCT_NAME
,T.MECHANICAL_TYPE
,T.CUSTOMER_PROJECT_NAME
,T.STATUS_CD
,CODE_NAME(T.STATUS_CD) AS STATUS_NAME
,T.DUE_DATE
,T.LOCATION
,T.SETUP
,T.FACILITY
,CODE_NAME(T.FACILITY) AS FACILITY_NAME
,T.FACILITY_QTY
,T.FACILITY_TYPE
,T.FACILITY_DEPTH
,T.PRODUCTION_NO
,T.BUS_CAL_CD
,CODE_NAME(T.BUS_CAL_CD) AS BUS_CAL_NAME
,T.CATEGORY1_CD
,CODE_NAME(T.CATEGORY1_CD) AS CATEGORY1_NAME
,T.CHG_USER_ID
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = T.CHG_USER_ID ) AS CHG_USER_NAME
,T.PLAN_DATE
,T.COMPLETE_DATE
,T.RESULT_CD
,CODE_NAME(T.RESULT_CD) AS RESULT_NAME
,T.PROJECT_NO
,T.PM_USER_ID
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = T.PM_USER_ID ) AS PM_USER_NAME
,T.CONTRACT_PRICE
,T.CONTRACT_PRICE_CURRENCY
,T.CONTRACT_CURRENCY
,CODE_NAME(T.CONTRACT_CURRENCY) AS CONTRACT_CURRENCY_NAME
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = T.WRITER ) AS WRITER_NAME
,T.CONTRACT_NO
,SUBSTR(T.CONTRACT_DATE,0,5) CONTRACT_DATE_YEAR
,T.CUSTOMER_EQUIP_NAME
,T.REQ_DEL_DATE
,T.CONTRACT_DEL_DATE
,T.CONTRACT_COMPANY
,CODE_NAME(T.CONTRACT_COMPANY) AS CONTRACT_COMPANY_NAME
,T.CONTRACT_DATE
,T.PO_NO
,T.MANUFACTURE_PLANT
,CODE_NAME(T.MANUFACTURE_PLANT) AS MANUFACTURE_PLANT_NAME
,T.CONTRACT_RESULT
,CODE_NAME(T.CONTRACT_RESULT) AS CONTRACT_RESULT_NAME
,T.PROJECT_NAME
,T.AREA_CD
,CODE_NAME(T.AREA_CD) AS AREA_NAME
,T.REGDATE
,TO_CHAR(T.REGDATE,'YYYY-MM-DD') AS REG_DATE
,TO_CHAR(T.REGDATE,'YYYY') REG_YYYY
,T.WRITER
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = T.WRITER ) AS WRITER_NAME
,SPEC.OBJID SPEC_OBJID
,SPEC.STATUS SPEC_STATUS
,CASE WHEN SPEC.STATUS = 'REGIST' THEN '등록'
WHEN SPEC.STATUS = 'DEPLOY' THEN '배포'
ELSE ''
END SPEC_STATUS_NAME
<!--
,(SELECT MAX(PROJECT_NO) FROM PROJECT_MGMT P WHERE P.PRODUCT = T.PRODUCT) PROJECT_NO_MAX
-->
,TO_CHAR(SPEC.REGDATE,'YYYY-MM-DD') AS SPEC_REG_DATE
,(SELECT USER_NAME FROM USER_INFO AS O WHERE O.USER_ID = SPEC.WRITER ) AS SPEC_WRITER_NAME
,(SELECT TITLE FROM PMS_WBS_TEMPLATE WT WHERE T.MECHANICAL_TYPE = WT.TITLE AND T.PRODUCT = WT.PRODUCT_OBJID ) TITLE
<!--
,WT.TITLE
-->
FROM CONTRACT_MGMT AS T
LEFT OUTER JOIN PRODUCT_KIND_SPEC_MAIN SPEC
ON T.OBJID = SPEC.OBJID_CONTRACT
<!--
LEFT OUTER JOIN PMS_WBS_TEMPLATE WT
ON T.PRODUCT = WT.PRODUCT_OBJID
-->
WHERE 1=1
<if test="Year !=null and Year != '' ">
AND SUBSTR(T.CONTRACT_DATE,0,5) = #{Year}
</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 T.product = #{product}
</if>
<if test="status_cd !=null and status_cd !=''">
AND T.status_cd = #{status_cd}
</if>
<if test="result_cd !=null and result_cd !=''">
AND T.result_cd = #{result_cd}
</if>
<if test="contract_start_date != null and !''.equals(contract_start_date)">
AND TO_DATE(T.CONTRACT_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(T.CONTRACT_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 T.pm_user_id = #{pm_user_id}
</if>
<if test="setup != null and !''.equals(setup)">
AND UPPER(T.SETUP) LIKE UPPER('%${setup}%')
</if>
<if test="regUserId !=null and regUserId !=''">
AND SPEC.WRITER = #{regUserId}
</if>
) T
WHERE 1=1
<if test="project_no !=null and project_no != '' ">
AND PROJECT_NO_MAX_NUM LIKE '%'||#{project_no}||'%'
</if>
ORDER BY T.CONTRACT_NO DESC
</select>
<select id ="searchProductKindSpecPopupGridList" parameterType="map" resultType="com.pms.common.UpperKeyMap">
SELECT
T.*
<!--
,CASE WHEN SPEC.VC_CODE IS NULL OR COALESCE(SPEC.VC_CODE,'') = '' THEN 'VC'|| LPAD(UNIT_NO_RANK::VARCHAR , 2, '0')
ELSE SPEC.VC_CODE
END VC_CODE
-->
<if test="projectList != null">
<foreach collection="projectList" item="obj">
<!--
,#{obj.PROJECT_NO} as ${obj.PROJECT_NO}
-->
,(SELECT OBJID
FROM PRODUCT_KIND_SPEC SPEC
WHERE T.UNIT_OBJID = SPEC.UNIT_OBJID
AND T.TITLE = SPEC.MECHANICAL_TYPE
AND T.VC_CODE = SPEC.VC_CODE
AND SPEC.PROJECT_NO = #{obj.PROJECT_NO}
) as OBJID_${obj.PROJECT_NO}
,(SELECT VALUE
FROM PRODUCT_KIND_SPEC SPEC
WHERE T.UNIT_OBJID = SPEC.UNIT_OBJID
AND T.TITLE = SPEC.MECHANICAL_TYPE
AND T.VC_CODE = SPEC.VC_CODE
AND SPEC.PROJECT_NO = #{obj.PROJECT_NO}
) as VALUE_${obj.PROJECT_NO}
</foreach>
</if>
FROM(
SELECT
T.OBJID UNIT_OBJID
, T.PARENT_OBJID
, WT.TITLE
, T.TASK_NAME
, T.TASK_SEQ
, RANK() OVER (PARTITION BY UNIT_NO ORDER BY TASK_SEQ ) UNIT_NO_RANK
<!--
, T.USER_ID
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = T.USER_ID) AS USER_ID_TITLE
, T.WRITER
, T.REG_DATE
-->
, T.UNIT_NO
, SPEC.OBJID_PARENT
, SPEC.VC_CODE SPEC_VC_CODE
,CASE WHEN SPEC.VC_CODE IS NULL OR COALESCE(SPEC.VC_CODE,'') = '' THEN 'VC01'
ELSE SPEC.VC_CODE
END VC_CODE
<!--
, SPEC.OBJID SPEC_OBJID
, SPEC.PRODUCT
, SPEC.MECHANICAL_TYPE
, SPEC.UNIT_OBJID
, SPEC.VC_CODE VC_CODE_ORG
, SPEC.PROJECT_NO
, SPEC.VALUE
, SPEC.STATUS
-->
FROM PMS_WBS_TASK_STANDARD T
INNER JOIN PMS_WBS_TEMPLATE WT
ON WT.OBJID = T.PARENT_OBJID
AND WT.TITLE = #{MECHANICAL_TYPE}
LEFT OUTER JOIN (
SELECT SPEC.OBJID_PARENT, SPEC.VC_CODE, SPEC.MECHANICAL_TYPE, SPEC.UNIT_OBJID
FROM PRODUCT_KIND_SPEC_MAIN SM
INNER JOIN PRODUCT_KIND_SPEC SPEC
ON SM.OBJID = SPEC.OBJID_PARENT
WHERE SM.MECHANICAL_TYPE = #{MECHANICAL_TYPE}
AND SM.OBJID_CONTRACT = #{OBJID_CONTRACT}
GROUP BY SPEC.OBJID_PARENT, SPEC.VC_CODE, SPEC.MECHANICAL_TYPE, SPEC.UNIT_OBJID
) SPEC
ON T.OBJID = SPEC.UNIT_OBJID
AND WT.TITLE = SPEC.MECHANICAL_TYPE
WHERE 1=1
<!--
AND T.PARENT_OBJID = (SELECT OBJID FROM PMS_WBS_TEMPLATE WHERE PRODUCT_OBJID = #{OBJID_PRODUCT} LIMIT 1)
-->
) T
ORDER BY T.UNIT_NO, VC_CODE
</select>
<insert id="mergeProductKindSpecMain" parameterType="map">
<!--
MERGE INTO PRODUCT_KIND_SPEC_MAIN T
USING (SELECT #{OBJID} AS OBJID) AS T1
ON T.OBJID = T1.OBJID
WHEN MATCHED THEN
-->
WITH UPSERT AS (
UPDATE PRODUCT_KIND_SPEC_MAIN SET
STATUS = #{STATUS}
,EDITDATE = NOW()
,EDITER = #{WRITER}
WHERE OBJID = #{OBJID}
)
<!--
WHEN NOT MATCHED THEN
INSERT (
-->
INSERT INTO PRODUCT_KIND_SPEC_MAIN(
OBJID
,OBJID_CONTRACT
,PRODUCT
,MECHANICAL_TYPE
,STATUS
,REGDATE
,EDITDATE
,WRITER
,EDITER
)
<!--
VALUES (
-->
SELECT
#{OBJID}
,#{OBJID_CONTRACT}
,#{PRODUCT}
,#{MECHANICAL_TYPE}
,#{STATUS}
,NOW()
,NULL
,#{WRITER}
,NULL
WHERE NOT EXISTS (
SELECT *
FROM PRODUCT_KIND_SPEC_MAIN
WHERE OBJID = #{OBJID}
)
</insert>
<select id ="getProductKindSpecMain" parameterType="map" resultType="com.pms.common.UpperKeyMap">
SELECT
OBJID
,OBJID_CONTRACT
,PRODUCT
,STATUS
,REGDATE
,EDITDATE
,WRITER
,EDITER
FROM PRODUCT_KIND_SPEC_MAIN
WHERE OBJID = #{OBJID}
</select>
<delete id="deleteProductKindSpecMain" parameterType="map">
DELETE
FROM PRODUCT_KIND_SPEC_MAIN
WHERE 1=1
<![CDATA[ AND (CASE WHEN OBJID = '' THEN 0 ELSE POSITION(OBJID||',' IN #{checkArr}||',') END) > 0 ]]>
<if test="checkArr !=null and checkArr != '' ">
</if>
</delete>
<update id="updateProductKindSpecMain" parameterType="map">
UPDATE PRODUCT_KIND_SPEC_MAIN SET
STATUS = #{STATUS}
,EDITDATE = NOW()
,EDITER = #{WRITER}
WHERE OBJID = #{OBJID}
</update>
<update id="updateProductKindSpec" parameterType="map">
UPDATE PRODUCT_KIND_SPEC SET
STATUS = #{STATUS}
,EDITDATE = NOW()
,EDITER = #{WRITER}
WHERE OBJID_PARENT = #{OBJID_PARENT}
</update>
<insert id="mergeProductKindSpec" parameterType="map">
<!--
MERGE INTO PRODUCT_KIND_SPEC T
USING (SELECT #{OBJID} AS OBJID) AS T1
ON T.OBJID = T1.OBJID
WHEN MATCHED THEN
-->
WITH UPSERT AS (
UPDATE PRODUCT_KIND_SPEC SET
EDITDATE = NOW()
,EDITER = #{WRITER}
,VALUE = #{VALUE}
<if test="VALUE !=null and VALUE != '' ">
</if>
,STATUS = #{STATUS}
WHERE OBJID = #{OBJID}
)
<!--
WHEN NOT MATCHED THEN
INSERT (
-->
INSERT INTO PRODUCT_KIND_SPEC(
OBJID
,OBJID_PARENT
,PRODUCT
,MECHANICAL_TYPE
,UNIT_OBJID
,VC_CODE
,PROJECT_NO
,VALUE
,STATUS
,REGDATE
,EDITDATE
,WRITER
,EDITER
)
<!--
VALUES (
-->
SELECT
#{OBJID}
,#{OBJID_PARENT}
,#{PRODUCT}
,#{MECHANICAL_TYPE}
,#{UNIT_OBJID}
,#{VC_CODE}
,#{PROJECT_NO}
,#{VALUE}
,#{STATUS}
,NOW()
,NULL
,#{WRITER}
,NULL
WHERE NOT EXISTS (
SELECT *
FROM PRODUCT_KIND_SPEC
WHERE OBJID = #{OBJID}
)
</insert>
<select id ="getProductKindSpec" parameterType="map" resultType="com.pms.common.UpperKeyMap">
SELECT
OBJID
,OBJID_PARENT
,PRODUCT
,MECHANICAL_TYPE
,UNIT_OBJID
,VC_CODE
,PROJECT_NO
,VALUE
,STATUS
,REGDATE
,EDITDATE
,WRITER
,EDITER
FROM PRODUCT_KIND_SPEC
WHERE OBJID = #{objId}
</select>
<delete id="deleteProductKindSpec" parameterType="map">
DELETE
FROM PRODUCT_KIND_SPEC
WHERE 1=1
<if test="checkArr !=null and checkArr != '' ">
<![CDATA[ AND (CASE WHEN OBJID_PARENT = '' THEN 0 ELSE POSITION(OBJID_PARENT||',' IN #{checkArr}||',') END) > 0 ]]>
</if>
<if test="UNIT_OBJID !=null and UNIT_OBJID != '' ">
AND OBJID_PARENT = #{OBJID_PARENT}
AND UNIT_OBJID = #{UNIT_OBJID}
AND VC_CODE = #{VC_CODE}
</if>
</delete>
</mapper>