- Add Docker Compose configurations for dev, prod, and standalone environments - Add database initialization scripts (init-db.sh, init-db-docker.sh) - Add enhanced start-docker-linux.sh with DB init support - Add comprehensive database initialization guide - Support for automatic dbexport.pgsql import on first run - Include safety checks for production environment
3399 lines
113 KiB
XML
3399 lines
113 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="part">
|
|
|
|
|
|
<!-- PART 관리 목록 조회 -->
|
|
<select id="partMgmtList" parameterType="map" resultType="map">
|
|
SELECT * FROM
|
|
(
|
|
with recursive t1 ( part_mgmt_objid
|
|
,part_mgmt_parent_objid
|
|
,project_mgmt_objid
|
|
,part_name
|
|
,part_no
|
|
,parent_part_no
|
|
,spec_cd
|
|
,mfa_cd
|
|
,qty
|
|
,process_cd
|
|
,sort_cd
|
|
,sup_cd
|
|
,rev
|
|
,is_last
|
|
,rel_date
|
|
,reg_date
|
|
,reg_user_id
|
|
,change_cd
|
|
,status
|
|
,del_yn
|
|
,rel_status
|
|
,sized
|
|
,material
|
|
, lev,path,part_array,cycle) as (
|
|
SELECT t2.*,
|
|
1 AS lev,
|
|
t2.part_no::text,
|
|
ARRAY[t2.part_no] as part_array,
|
|
FALSE as CYCLE
|
|
from part_mgmt AS t2
|
|
where part_no = parent_part_no
|
|
|
|
union all
|
|
|
|
SELECT distinct t3.*,
|
|
lev+1,
|
|
PATH||t3.part_no::text,
|
|
t1.part_array,
|
|
t3.part_no = ANY(part_array) as CYCLE
|
|
from part_mgmt AS t3, t1
|
|
where t3.parent_part_no = t1.part_no
|
|
and t3.parent_part_no != t3.part_no
|
|
and NOT CYCLE
|
|
)
|
|
SELECT
|
|
t1.part_mgmt_objid
|
|
,t1.part_mgmt_parent_objid
|
|
,t1.project_mgmt_objid
|
|
,t1.part_name
|
|
,t1.part_no
|
|
,t1.parent_part_no
|
|
,t1.spec_cd
|
|
,t1.mfa_cd
|
|
,t1.qty
|
|
,t1.process_cd
|
|
,t1.sort_cd
|
|
,t1.sup_cd
|
|
,t1.rev
|
|
,t1.is_last
|
|
,to_char(t1.rel_date,'yyyy-mm-dd') as rel_date
|
|
,to_char(t1.reg_date,'yyyy-mm-dd') as reg_date
|
|
,t1.reg_user_id
|
|
,(select user_name from user_info as o1 where o1.user_id = t1.reg_user_id) AS reg_user_name
|
|
,t1.change_cd
|
|
,t1.status
|
|
,t1.del_yn
|
|
,t1.rel_status
|
|
,t1.sized
|
|
,t1.material
|
|
,(select o.code_name from comm_code o where o.code_id = t1.sort_cd) AS sort_name
|
|
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = T1.part_mgmt_objid AND DOC_TYPE='PART_FILE' AND UPPER(STATUS) = 'ACTIVE') AS FILE_CNT
|
|
,t1.lev
|
|
,row_number() over (order by path,lev,part_no) as rnum
|
|
from t1
|
|
WHERE t1.DEL_YN='N'
|
|
AND t1.STATUS='complete'
|
|
AND t1.PROJECT_MGMT_OBJID = #{projectno}::integer
|
|
|
|
<if test="search_isLast != null and search_isLast != '' and 1 == search_isLast">
|
|
and t1.is_last = '1'
|
|
</if>
|
|
|
|
<if test=" part_no != null and part_no != '' ">
|
|
AND UPPER(t1.PART_NO) LIKE UPPER('%${part_no}%')
|
|
</if>
|
|
|
|
<if test="part_name !=null and part_name !=''">
|
|
AND UPPER(t1.PART_NAME) LIKE UPPER('%${part_name}%')
|
|
</if>
|
|
|
|
<if test="spec_cd !=null and spec_cd !=''">
|
|
AND UPPER(t1.SPEC_CD) LIKE UPPER('%${spec_cd}%')
|
|
</if>
|
|
|
|
<if test="process_cd !=null and process_cd !=''">
|
|
AND t1.PROCESS_CD LIKE '%${process_cd}%'
|
|
</if>
|
|
|
|
<if test="sort_cd !=null and sort_cd !=''">
|
|
AND t1.SORT_CD = #{sort_cd}
|
|
</if>
|
|
|
|
<if test="supply_cd !=null and supply_cd !=''">
|
|
AND t1.SUP_CD LIKE '%${supply_cd}%'
|
|
</if>
|
|
|
|
<if test="material !=null and material !=''">
|
|
AND t1.MATERIAL LIKE '%${material}%'
|
|
</if>
|
|
|
|
<if test="search_fromDate != null and !''.equals(search_fromDate)">
|
|
AND TO_DATE(t1.REL_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{search_fromDate}, 'YYYY-MM-DD')
|
|
</if>
|
|
<if test="search_toDate != null and !''.equals(search_toDate)">
|
|
AND TO_DATE(t1.REL_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{search_toDate}, 'YYYY-MM-DD')
|
|
</if>
|
|
order by path,lev,part_no
|
|
) AS TT
|
|
WHERE 1=1
|
|
|
|
|
|
<if test="PAGE_END != null and PAGE_END != ''">
|
|
<![CDATA[ AND TT.RNUM <= #{PAGE_END}::integer ]]>
|
|
</if>
|
|
<if test="PAGE_START != null and PAGE_START != ''">
|
|
<![CDATA[ AND TT.RNUM >= #{PAGE_START}::integer ]]>
|
|
</if>
|
|
</select>
|
|
|
|
|
|
|
|
<select id="materpartMgmtList" parameterType="map" resultType="map">
|
|
SELECT * FROM (SELECT T.*,LEVEL AS PART_LEVEL ,
|
|
ROWNUM AS RNUM FROM (SELECT T.*
|
|
FROM
|
|
(SELECT DISTINCT PMS_PART_MGMT.*
|
|
FROM
|
|
(
|
|
SELECT DISTINCT
|
|
PART_MGMT_OBJID
|
|
,PART_MGMT_PARENT_OBJID
|
|
,PROJECT_MGMT_OBJID
|
|
,PART_NAME
|
|
,PART_NO
|
|
,PARENT_PART_NO
|
|
,SPEC_CD
|
|
,CODE_NAME(SPEC_CD) AS SPEC_NAME
|
|
,MFA_CD
|
|
,CODE_NAME(MFA_CD) AS MFA_NAME
|
|
,QTY
|
|
,PROCESS_CD
|
|
,CODE_NAME(PROCESS_CD) AS PROCESS_NAME
|
|
,SORT_CD
|
|
,CODE_NAME(SORT_CD) AS SORT_NAME
|
|
,SUP_CD
|
|
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG O WHERE O.SUPPLY_CODE = SUP_CD) AS SUP_NAME
|
|
,REV
|
|
,TO_CHAR(REL_DATE,'YYYY-MM-DD') AS REL_DATE
|
|
,REG_DATE
|
|
,REG_USER_ID
|
|
,IS_LAST
|
|
,REL_STATUS
|
|
FROM PART_MGMT T
|
|
WHERE 1=1
|
|
AND T.DEL_YN='N'
|
|
AND T.STATUS='complete'
|
|
AND IS_LAST = 1
|
|
AND PROJECT_MGMT_OBJID = #{projectno}
|
|
) PMS_PART_MGMT
|
|
WHERE 1=1
|
|
) T )T
|
|
WHERE 1=1
|
|
AND PROJECT_MGMT_OBJID = #{projectno}
|
|
AND SORT_CD = #{sort_cd}
|
|
<if test="sup_cd != null and sup_cd != '' ">
|
|
AND SUP_CD = #{sup_cd}
|
|
</if>
|
|
|
|
<if test="part_no != null and part_no != '' ">
|
|
AND UPPER(PART_NO) LIKE UPPER('%${part_no}%')
|
|
</if>
|
|
|
|
<if test="process1_cd != null and process1_cd != '' ">
|
|
AND UPPER(PART_NO) LIKE UPPER('%${process_cd}%')
|
|
</if>
|
|
|
|
<if test="part_stcd != null and part_stcd != '' ">
|
|
AND REL_STATUS = #{part_stcd}
|
|
</if>
|
|
|
|
<if test="search_fromDate != null and !''.equals(search_fromDate)">
|
|
AND TO_CHAR(TO_DATE(REL_DATE,'YYYY-MM-DD')) <![CDATA[ >= ]]> TO_CHAR(TO_DATE(#{search_fromDate}, 'YYYY-MM-DD'))
|
|
</if>
|
|
<if test="search_toDate != null and !''.equals(search_toDate)">
|
|
AND TO_CHAR(TO_DATE(REL_DATE,'YYYY-MM-DD')) <![CDATA[ <= ]]> TO_CHAR(TO_DATE(#{search_toDate}, 'YYYY-MM-DD'))
|
|
</if>
|
|
|
|
START WITH PART_NO = PARENT_PART_NO CONNECT BY NOCYCLE PRIOR PART_NO = PARENT_PART_NO
|
|
ORDER SIBLINGS BY PART_NO,PART_NAME )
|
|
</select>
|
|
|
|
|
|
<select id="searchSupMgmt" parameterType="map" resultType="map">
|
|
SELECT *
|
|
FROM
|
|
(
|
|
SELECT
|
|
PART_MGMT_OBJID
|
|
,PART_MGMT_PARENT_OBJID
|
|
,PROJECT_MGMT_OBJID
|
|
,TRIM(PART_NAME) AS PART_NAME
|
|
,PART_NO
|
|
,PARENT_PART_NO
|
|
,SPEC_CD
|
|
,CODE_NAME(SPEC_CD) AS SPEC_NAME
|
|
,MFA_CD
|
|
,CODE_NAME(MFA_CD) AS MFA_NAME
|
|
,QTY
|
|
,PROCESS_CD
|
|
,CODE_NAME(PROCESS_CD) AS PROCESS_NAME
|
|
,SORT_CD
|
|
,CODE_NAME(SORT_CD) AS SORT_NAME
|
|
,SUP_CD
|
|
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG O WHERE O.SUPPLY_CODE = SUP_CD) AS SUP_NAME
|
|
,REV
|
|
,TO_CHAR(REL_DATE,'YYYY-MM-DD') AS REL_DATE
|
|
,REG_DATE
|
|
,REG_USER_ID
|
|
,LEVEL AS PART_LEVEL
|
|
FROM PART_MGMT T
|
|
WHERE 1=1
|
|
AND T.DEL_YN='N'
|
|
AND T.STATUS='complete'
|
|
AND T.IS_LAST = 1
|
|
AND T.PROJECT_MGMT_OBJID = #{projectno}
|
|
<if test=" part_no != null and part_no != '' ">
|
|
AND UPPER(PART_NO) LIKE UPPER('%${part_no}%')
|
|
</if>
|
|
|
|
<if test=" process1_cd != null and process1_cd != '' ">
|
|
AND UPPER(PART_NO) LIKE UPPER('%${process_cd}%')
|
|
</if>
|
|
|
|
START WITH T.PART_NO = T.PARENT_PART_NO
|
|
CONNECT BY NOCYCLE PRIOR T.PART_NO = T.PARENT_PART_NO
|
|
ORDER SIBLINGS BY PARENT_PART_NO,REL_DATE DESC
|
|
) T ,MATERIAL_COMPANY_MGMT T1
|
|
WHERE T.PART_MGMT_OBJID = T1.PART_MGMT_OBJID
|
|
|
|
<if test=" sup_cd != null and sup_cd != '' ">
|
|
AND T1.SUP_CD = #{sup_cd}
|
|
</if>
|
|
|
|
|
|
</select>
|
|
|
|
<select id="materpartSupMgmtList" parameterType="map" resultType="map">
|
|
SELECT
|
|
PART_MGMT_OBJID
|
|
,PART_MGMT_PARENT_OBJID
|
|
,PROJECT_MGMT_OBJID
|
|
,TRIM(PART_NAME) AS PART_NAME
|
|
,PART_NO
|
|
,PARENT_PART_NO
|
|
,SPEC_CD
|
|
,CODE_NAME(SPEC_CD) AS SPEC_NAME
|
|
,MFA_CD
|
|
,CODE_NAME(MFA_CD) AS MFA_NAME
|
|
,QTY
|
|
,PROCESS_CD
|
|
,CODE_NAME(PROCESS_CD) AS PROCESS_NAME
|
|
,SORT_CD
|
|
,CODE_NAME(SORT_CD) AS SORT_NAME
|
|
,SUP_CD
|
|
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG O WHERE O.SUPPLY_CODE = SUP_CD) AS SUP_NAME
|
|
,REV
|
|
,TO_CHAR(REL_DATE,'YYYY-MM-DD') AS REL_DATE
|
|
,REG_DATE
|
|
,REG_USER_ID
|
|
FROM PART_MGMT T
|
|
WHERE T.SORT_CD IS NOT NULL
|
|
AND T.DEL_YN='N'
|
|
AND T.STATUS='complete'
|
|
AND T.IS_LAST = 1
|
|
AND T.PROJECT_MGMT_OBJID = #{projectno}
|
|
<if test="search_fromDate != null and !''.equals(search_fromDate)">
|
|
AND TO_CHAR(TO_DATE(REL_DATE,'YYYY-MM-DD')) <![CDATA[ >= ]]> TO_CHAR(TO_DATE(#{search_fromDate}, 'YYYY-MM-DD'))
|
|
</if>
|
|
<if test="search_toDate != null and !''.equals(search_toDate)">
|
|
AND TO_CHAR(TO_DATE(REL_DATE,'YYYY-MM-DD')) <![CDATA[ <= ]]> TO_CHAR(TO_DATE(#{search_toDate}, 'YYYY-MM-DD'))
|
|
</if>
|
|
|
|
|
|
<if test=" part_no != null and part_no != '' ">
|
|
AND UPPER(PART_NO) LIKE UPPER('%${part_no}%')
|
|
</if>
|
|
|
|
<if test=" sup_gubun != null and sup_gubun != '' ">
|
|
AND T.SUP_CD IS NULL
|
|
</if>
|
|
|
|
<if test=" sup_cd != null and sup_cd != '' ">
|
|
AND T.SUP_CD = #{sup_cd}
|
|
</if>
|
|
|
|
<if test=" process1_cd != null and process1_cd != '' ">
|
|
AND UPPER(PART_NO) LIKE UPPER('%${process_cd}%')
|
|
</if>
|
|
|
|
<if test="sort_cd !=null and sort_cd !=''">
|
|
AND SORT_CD = #{sort_cd}
|
|
</if>
|
|
|
|
ORDER BY PART_NO
|
|
|
|
</select>
|
|
|
|
|
|
|
|
<!-- PART 관리 목록 조회 -->
|
|
<select id="partMgmtTempList" parameterType="map" resultType="map">
|
|
<!-- SELECT *
|
|
FROM
|
|
(SELECT PMS_PART_MGMT.*
|
|
FROM
|
|
(
|
|
-->
|
|
with recursive t1 ( part_mgmt_objid
|
|
,part_mgmt_parent_objid
|
|
,project_mgmt_objid
|
|
,part_name
|
|
,part_no
|
|
,parent_part_no
|
|
,spec_cd
|
|
,mfa_cd
|
|
,qty
|
|
,process_cd
|
|
,sort_cd
|
|
,sup_cd
|
|
,rev
|
|
,is_last
|
|
,rel_date
|
|
,reg_date
|
|
,reg_user_id
|
|
,change_cd
|
|
,status
|
|
,del_yn
|
|
,rel_status
|
|
,sized
|
|
,material
|
|
, lev,path,part_array,cycle) as (
|
|
SELECT t2.*,
|
|
1 AS lev,
|
|
t2.part_no::text,
|
|
ARRAY[t2.part_no] as part_array,
|
|
FALSE as CYCLE
|
|
from part_mgmt AS t2
|
|
where part_no = parent_part_no
|
|
|
|
union all
|
|
|
|
SELECT t3.*,
|
|
lev+1,
|
|
PATH||t3.part_no::text,
|
|
t1.part_array,
|
|
t3.part_no = ANY(part_array) as CYCLE
|
|
from part_mgmt AS t3, t1
|
|
where t3.parent_part_no = t1.part_no
|
|
and t3.parent_part_no != t3.part_no
|
|
and NOT CYCLE
|
|
)
|
|
SELECT
|
|
t1.part_mgmt_objid
|
|
,t1.part_mgmt_parent_objid
|
|
,t1.project_mgmt_objid
|
|
,t1.part_name
|
|
,t1.part_no
|
|
,t1.parent_part_no
|
|
,t1.spec_cd
|
|
,t1.mfa_cd
|
|
,t1.qty
|
|
,(SELECT O.CODE_NAME FROM COMM_CODE O WHERE O.CODE_ID = t1.process_cd) AS process_name
|
|
,t1.process_cd
|
|
,t1.sort_cd
|
|
,(SELECT O.CODE_NAME FROM COMM_CODE O WHERE O.CODE_ID = t1.sort_cd) AS sort_name
|
|
,t1.sup_cd
|
|
,(select supply_name from supply_mng o where o.supply_code = t1.sup_cd) as sup_name
|
|
,t1.rev
|
|
,t1.is_last
|
|
,t1.rel_date
|
|
,to_char(t1.rel_date,'yyyy-mm-dd') as rel_date_title
|
|
,to_char(t1.reg_date,'yyyy-mm-dd') as reg_date
|
|
,(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = t1.reg_user_id) WRITER_TITLE
|
|
,t1.reg_user_id
|
|
,t1.change_cd
|
|
,t1.status
|
|
,t1.del_yn
|
|
,t1.rel_status
|
|
,t1.sized
|
|
,t1.material
|
|
,t1.lev
|
|
|
|
from t1
|
|
WHERE t1.DEL_YN='N'
|
|
AND t1.STATUS='write'
|
|
|
|
<if test=" projectno != null and projectno != '' ">
|
|
AND t1.PROJECT_MGMT_OBJID = #{projectno}::integer
|
|
</if>
|
|
|
|
AND t1.REG_USER_ID = #{CONNECTUSERID}
|
|
|
|
<if test=" part_no != null and part_no != '' ">
|
|
AND UPPER(t1.PART_NO) LIKE UPPER('%${part_no}%')
|
|
</if>
|
|
|
|
<if test="part_name !=null and part_name !=''">
|
|
AND UPPER(t1.PART_NAME) LIKE UPPER('%${part_name}%')
|
|
</if>
|
|
|
|
<if test="spec_cd !=null and spec_cd !=''">
|
|
AND UPPER(t1.SPEC_CD) LIKE UPPER('%${spec_cd}%')
|
|
</if>
|
|
|
|
<if test="process_cd !=null and process_cd !=''">
|
|
AND t1.PROCESS_CD LIKE '%${process_cd}%'
|
|
</if>
|
|
|
|
<if test="material !=null and material !=''">
|
|
AND t1.MATERIAL LIKE '%${material}%'
|
|
</if>
|
|
|
|
<if test="sort_cd !=null and sort_cd !=''">
|
|
AND t1.SORT_CD = #{sort_cd}
|
|
</if>
|
|
|
|
<if test="supply_cd !=null and supply_cd !=''">
|
|
AND t1.SUP_CD LIKE '%${supply_cd}%'
|
|
</if>
|
|
|
|
<if test="search_fromDate != null and !''.equals(search_fromDate)">
|
|
AND TO_DATE(t1.REQ_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{search_fromDate}, 'YYYY-MM-DD')
|
|
</if>
|
|
<if test="search_toDate != null and !''.equals(search_toDate)">
|
|
AND TO_DATE(t1.REQ_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{search_toDate}, 'YYYY-MM-DD')
|
|
</if>
|
|
order by path,lev,part_no
|
|
<!-- ) PMS_PART_MGMT
|
|
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_START != ''">
|
|
<![CDATA[ AND RNUM >= #{PAGE_START} ]]>
|
|
</if> -->
|
|
</select>
|
|
|
|
|
|
<!-- PART 관리 목록 조회 -->
|
|
<select id="partMgmtTempFormList" parameterType="map" resultType="map">
|
|
with recursive t1 ( part_mgmt_objid
|
|
,part_mgmt_parent_objid
|
|
,project_mgmt_objid
|
|
,part_name
|
|
,part_no
|
|
,parent_part_no
|
|
,spec_cd
|
|
,mfa_cd
|
|
,qty
|
|
,process_cd
|
|
,sort_cd
|
|
,sup_cd
|
|
,rev
|
|
,is_last
|
|
,rel_date
|
|
,reg_date
|
|
,reg_user_id
|
|
,change_cd
|
|
,status
|
|
,del_yn
|
|
,rel_status
|
|
,sized
|
|
,material
|
|
, lev,path,part_array,cycle) as (
|
|
SELECT t2.*,
|
|
1 AS lev,
|
|
t2.part_no::text,
|
|
ARRAY[t2.part_no] as part_array,
|
|
FALSE as CYCLE
|
|
from part_mgmt AS t2
|
|
where part_no = parent_part_no
|
|
|
|
union all
|
|
|
|
SELECT t3.*,
|
|
lev+1,
|
|
PATH||t3.part_no::text,
|
|
t1.part_array,
|
|
t3.part_no = ANY(part_array) as CYCLE
|
|
from part_mgmt AS t3, t1
|
|
where t3.parent_part_no = t1.part_no
|
|
and t3.parent_part_no != t3.part_no
|
|
and NOT CYCLE -- NOCYCLE 지정
|
|
)
|
|
SELECT
|
|
t1.part_mgmt_objid
|
|
,t1.part_mgmt_parent_objid
|
|
,t1.project_mgmt_objid
|
|
,t1.part_name
|
|
,t1.part_no
|
|
,t1.parent_part_no
|
|
,t1.spec_cd
|
|
,t1.mfa_cd
|
|
,t1.qty
|
|
,t1.process_cd
|
|
,t1.sort_cd
|
|
,code_name(t1.sort_cd) as sort_name
|
|
,t1.sup_cd
|
|
,t1.rev
|
|
,to_char(t1.rel_date,'yyyy-mm-dd') as rel_date
|
|
,t1.reg_date
|
|
,t1.reg_user_id
|
|
,t1.sized
|
|
,t1.material
|
|
from t1
|
|
WHERE t1.DEL_YN='N'
|
|
AND t1.STATUS='write'
|
|
AND (t1.rev='' or t1.rev is null)
|
|
AND t1.PROJECT_MGMT_OBJID = #{projectno}::integer
|
|
order by path,lev,part_no
|
|
</select>
|
|
|
|
|
|
<select id="partMgmtListCnt" parameterType="map" resultType="map">
|
|
SELECT CEIL(CAST(TOTAL_CNT AS FLOAT)/#{COUNT_PER_PAGE})::numeric::integer as MAX_PAGE_SIZE
|
|
,TOTAL_CNT::integer
|
|
FROM (
|
|
SELECT COUNT(1)::float AS TOTAL_CNT
|
|
FROM(
|
|
with recursive t1 ( part_mgmt_objid
|
|
,part_mgmt_parent_objid
|
|
,project_mgmt_objid
|
|
,part_name
|
|
,part_no
|
|
,parent_part_no
|
|
,spec_cd
|
|
,mfa_cd
|
|
,qty
|
|
,process_cd
|
|
,sort_cd
|
|
,sup_cd
|
|
,rev
|
|
,is_last
|
|
,rel_date
|
|
,reg_date
|
|
,reg_user_id
|
|
,change_cd
|
|
,status
|
|
,del_yn
|
|
,rel_status
|
|
,sized
|
|
,material
|
|
, lev,path,part_array,cycle) as (
|
|
SELECT t2.*,
|
|
1 AS lev,
|
|
t2.part_no::text,
|
|
ARRAY[t2.part_no] as part_array,
|
|
FALSE as CYCLE
|
|
from part_mgmt AS t2
|
|
where part_no = parent_part_no
|
|
|
|
union all
|
|
|
|
SELECT distinct t3.*,
|
|
lev+1,
|
|
PATH||t3.part_no::text,
|
|
t1.part_array,
|
|
t3.part_no = ANY(part_array) as CYCLE
|
|
from part_mgmt AS t3, t1
|
|
where t3.parent_part_no = t1.part_no
|
|
and t3.parent_part_no != t3.part_no
|
|
and NOT CYCLE -- NOCYCLE 지정
|
|
)
|
|
SELECT *
|
|
from t1
|
|
WHERE t1.DEL_YN='N'
|
|
AND t1.STATUS='complete'
|
|
<if test=" projectno != null and projectno != '' ">
|
|
AND t1.PROJECT_MGMT_OBJID = #{projectno}::integer
|
|
</if>
|
|
|
|
<if test="search_isLast != null and search_isLast != '' and 1 == search_isLast">
|
|
and t1.is_last = '1'
|
|
</if>
|
|
|
|
<if test=" part_no != null and part_no != '' ">
|
|
AND UPPER(t1.PART_NO) LIKE UPPER('%${part_no}%')
|
|
</if>
|
|
|
|
<if test="part_name !=null and part_name !=''">
|
|
AND UPPER(t1.PART_NAME) LIKE UPPER('%${part_name}%')
|
|
</if>
|
|
|
|
<if test="spec_cd !=null and spec_cd !=''">
|
|
AND UPPER(t1.SPEC_CD) LIKE UPPER('%${spec_cd}%')
|
|
</if>
|
|
|
|
<if test="process_cd !=null and process_cd !=''">
|
|
AND t1.PROCESS_CD LIKE '%${process_cd}%'
|
|
</if>
|
|
|
|
<if test="sort_cd !=null and sort_cd !=''">
|
|
AND t1.SORT_CD = #{sort_cd}
|
|
</if>
|
|
|
|
<if test="supply_cd !=null and supply_cd !=''">
|
|
AND t1.SUP_CD LIKE '%${supply_cd}%'
|
|
</if>
|
|
|
|
<if test="material !=null and material !=''">
|
|
AND t1.MATERIAL LIKE '%${material}%'
|
|
</if>
|
|
|
|
<if test="search_fromDate != null and !''.equals(search_fromDate)">
|
|
AND TO_DATE(t1.REL_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{search_fromDate}, 'YYYY-MM-DD')
|
|
</if>
|
|
<if test="search_toDate != null and !''.equals(search_toDate)">
|
|
AND TO_DATE(t1.REL_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{search_toDate}, 'YYYY-MM-DD')
|
|
</if>
|
|
|
|
) AS TT
|
|
) AS TTT
|
|
</select>
|
|
|
|
<select id="partMgmtTempListCnt" parameterType="map" resultType="map">
|
|
SELECT CEIL(TOTAL_CNT/#{COUNT_PER_PAGE})::numeric::integer MAX_PAGE_SIZE,
|
|
TOTAL_CNT::integer
|
|
FROM (
|
|
SELECT COUNT(1)::float TOTAL_CNT
|
|
FROM(
|
|
with recursive t1 ( part_mgmt_objid
|
|
,part_mgmt_parent_objid
|
|
,project_mgmt_objid
|
|
,part_name
|
|
,part_no
|
|
,parent_part_no
|
|
,spec_cd
|
|
,mfa_cd
|
|
,qty
|
|
,process_cd
|
|
,sort_cd
|
|
,sup_cd
|
|
,rev
|
|
,is_last
|
|
,rel_date
|
|
,reg_date
|
|
,reg_user_id
|
|
,change_cd
|
|
,status
|
|
,del_yn
|
|
,rel_status
|
|
,size
|
|
,material
|
|
, lev,path,part_array,cycle) as (
|
|
SELECT t2.*,
|
|
1 AS lev,
|
|
t2.part_no::text,
|
|
ARRAY[t2.part_no] as part_array,
|
|
FALSE as CYCLE
|
|
from part_mgmt AS t2
|
|
where part_no = parent_part_no
|
|
|
|
union all
|
|
|
|
SELECT t3.*,
|
|
lev+1,
|
|
PATH||t3.part_no::text,
|
|
t1.part_array,
|
|
t3.part_no = ANY(part_array) as CYCLE
|
|
from part_mgmt AS t3, t1
|
|
where t3.parent_part_no = t1.part_no
|
|
and t3.parent_part_no != t3.part_no
|
|
and NOT CYCLE -- NOCYCLE 지정
|
|
)
|
|
SELECT *
|
|
from t1
|
|
WHERE t1.DEL_YN='N'
|
|
AND t1.STATUS='write'
|
|
|
|
<if test=" projectno != null and projectno != '' ">
|
|
AND t1.PROJECT_MGMT_OBJID = #{projectno}::integer
|
|
</if>
|
|
|
|
AND t1.REG_USER_ID = #{CONNECTUSERID}
|
|
<if test=" part_no != null and part_no != '' ">
|
|
AND UPPER(t1.PART_NO) LIKE UPPER('%${part_no}%')
|
|
</if>
|
|
|
|
<if test="part_name !=null and part_name !=''">
|
|
AND UPPER(t1.PART_NAME) LIKE UPPER('%${part_name}%')
|
|
</if>
|
|
|
|
<if test="spec_cd !=null and spec_cd !=''">
|
|
AND UPPER(t1.SPEC_CD) LIKE UPPER('%${spec_cd}%')
|
|
</if>
|
|
|
|
<if test="process_cd !=null and process_cd !=''">
|
|
AND t1.PROCESS_CD LIKE '%${process_cd}%'
|
|
</if>
|
|
|
|
<if test="sort_cd !=null and sort_cd !=''">
|
|
AND t1.SORT_CD = #{sort_cd}
|
|
</if>
|
|
|
|
<if test="supply_cd !=null and supply_cd !=''">
|
|
AND t1.SUP_CD LIKE '%${supply_cd}%'
|
|
</if>
|
|
|
|
<if test="material !=null and material !=''">
|
|
AND t1.MATERIAL LIKE '%${material}%'
|
|
</if>
|
|
|
|
<if test="search_fromDate != null and !''.equals(search_fromDate)">
|
|
AND TO_DATE(t1.REQ_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{search_fromDate}, 'YYYY-MM-DD')
|
|
</if>
|
|
<if test="search_toDate != null and !''.equals(search_toDate)">
|
|
AND TO_DATE(t1.REQ_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{search_toDate}, 'YYYY-MM-DD')
|
|
</if>
|
|
order by path,lev,part_no
|
|
) T
|
|
) T
|
|
|
|
</select>
|
|
|
|
|
|
<!-- //part 상세조회 -->
|
|
<select id="getpartMgmtInfo" parameterType="map" resultType="map">
|
|
SELECT
|
|
PART_MGMT_OBJID
|
|
,PART_MGMT_PARENT_OBJID
|
|
,(SELECT PROJECT_NO FROM ORDER_MGMT O1 WHERE O1.ORDER_MGMT_OBJID = T.PROJECT_MGMT_OBJID) AS PROJECT_NO
|
|
,(SELECT O.ORDER_TITLE FROM ORDER_MGMT O WHERE O.ORDER_MGMT_OBJID = T.PROJECT_MGMT_OBJID) AS PROJECT_TITLE
|
|
,PART_NAME
|
|
,PART_NO
|
|
,PARENT_PART_NO
|
|
,SPEC_CD
|
|
,MFA_CD
|
|
,QTY
|
|
,PROCESS_CD
|
|
,SORT_CD
|
|
,SUP_CD
|
|
,REV
|
|
,IS_LAST
|
|
,TO_CHAR(REL_DATE,'YYYY-MM-DD') AS REL_DATE
|
|
,TO_CHAR(REG_DATE,'YYYY-MM-DD') AS REG_DATE
|
|
,REG_USER_ID
|
|
,CHANGE_CD
|
|
,SIZED
|
|
,MATERIAL
|
|
FROM PART_MGMT T
|
|
WHERE T.PART_MGMT_OBJID=#{objid}::integer
|
|
</select>
|
|
|
|
|
|
<!-- //part 상세조회 -->
|
|
<select id="getpartRev" parameterType="map" resultType="map">
|
|
SELECT
|
|
coalesce(T.REV,'0') AS REV
|
|
FROM PART_MGMT T
|
|
WHERE T.PART_MGMT_OBJID=#{targetObjId}::integer
|
|
</select>
|
|
|
|
|
|
|
|
<!-- //차종, 제품, 사양을 통해 BOM 구조등록 ObjId 조회 -->
|
|
<select id="getBOMStructureStandardObjId" parameterType="map" resultType="string">
|
|
SELECT OBJID
|
|
FROM PART_BOM_REPORT A
|
|
WHERE 1=1
|
|
<!-- AND OEM_OBJID = ${search_oemObjId} -->
|
|
AND CAR_OBJID = ${search_carObjId}
|
|
AND PRODUCT_OBJID = ${search_productObjId}
|
|
<!-- AND REGION_OBJID = ${search_regionObjId} -->
|
|
</select>
|
|
|
|
<!-- //bomObjId를 통해 BOM 구조등록 기본정보 조회 -->
|
|
<select id="getBOMStructureStandardInfoByObjId" parameterType="string" resultType="map">
|
|
SELECT OBJID
|
|
, CAR_OBJID
|
|
, (SELECT CAR_NAME FROM CAR_MNG WHERE OBJID = A.CAR_OBJID::numeric) AS CAR_NAME
|
|
, (SELECT CAR_CODE FROM CAR_MNG WHERE OBJID = A.CAR_OBJID::numeric) AS CAR_CODE
|
|
, (SELECT MODEL_CODE FROM CAR_MNG WHERE OBJID = A.CAR_OBJID::numeric) AS CAR_MODEL_CODE
|
|
, OEM_OBJID
|
|
, (SELECT OEM_NAME FROM OEM_MNG WHERE OBJID = A.OEM_OBJID::numeric) AS OEM_NAME
|
|
, (SELECT OEM_CODE FROM OEM_MNG WHERE OBJID = A.OEM_OBJID::numeric) AS OEM_CODE
|
|
, PRODUCT_OBJID
|
|
, (SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = A.PRODUCT_OBJID::text) AS PRODUCT_NAME
|
|
<!-- , (SELECT PRODUCT_NAME FROM PRODUCT_MNG WHERE OBJID = A.PRODUCT_OBJID) AS PRODUCT_NAME -->
|
|
, REGION_OBJID
|
|
<!-- , (SELECT REGION_NAME FROM REGION_MNG WHERE OBJID = A.REGION_OBJID) AS REGION_NAME -->
|
|
, '' AS REGION_NAME
|
|
, TO_CHAR(REGDATE, 'YYYY-MM-DD') AS REGDATE
|
|
, REGDATE AS REGDATE_ORG
|
|
FROM PART_BOM_REPORT A
|
|
WHERE 1=1
|
|
AND OBJID = #{bomObjId}::numeric
|
|
</select>
|
|
|
|
<!-- //BOM 구조등록 기본정보 등록 -->
|
|
<insert id="createBOMReportStructureStandardInfo" parameterType="map">
|
|
INSERT INTO PART_BOM_REPORT (
|
|
OBJID
|
|
, OEM_OBJID
|
|
, CAR_OBJID
|
|
, PRODUCT_OBJID
|
|
, REGION_OBJID
|
|
, WRITER
|
|
, REGDATE
|
|
) VALUES (
|
|
${bomObjId}
|
|
, ${oemObjId}
|
|
, ${carObjId}
|
|
, ${productObjId}
|
|
, 0
|
|
, #{writer}
|
|
, NOW()
|
|
)
|
|
</insert>
|
|
|
|
<!-- 파트정보를 merge 한다. -->
|
|
<!-- <update id="mergePartInfo" parameterType="map">
|
|
MERGE INTO PART_INFO T USING DUAL ON ( T.OBJID = #{objid})
|
|
WHEN MATCHED THEN
|
|
UPDATE
|
|
SET
|
|
T.OEM_OBJID = #{oem},
|
|
T.CAR_OBJID = #{car},
|
|
T.PRODUCT_GROUP_OBJID = #{productFamily},
|
|
T.PRODUCT_OBJID = #{product},
|
|
T.PART_NO = #{partNo},
|
|
T.RH_PART_OBJID = #{rhPartObjId},
|
|
T.PART_NAME = #{partName},
|
|
T.DRAWING_RELEASE_TYPE = #{drawReleaseType},
|
|
T.PART_TYPE = #{partType},
|
|
T.REV = UPPER(#{revision}),
|
|
T.MATERIAL_TYPE_OBJID = #{materialType},
|
|
T.DRAWING_TYPE = #{drawType},
|
|
T.DRAWING_NO_OBJID = #{drawingNoObjId},
|
|
T.MATERIAL_OBJID = #{material},
|
|
T.PART_OPTION = #{optionSpec},
|
|
T.THICKNESS = #{thickness},
|
|
T.WEIGHT = #{weight},
|
|
T.APPLY_POINT_OBJID = #{applyPointType},
|
|
T.MNG_ITEM_TYPE = #{mngType},
|
|
T.IS_LAST = #{isLast},
|
|
T.STATUS = #{status},
|
|
T.CAVITY = #{cavity},
|
|
T.REMARKS = #{remarks},
|
|
T.MOLD_CLASSIFICATION = #{mod_c},
|
|
T.COMPANY_MOLD = #{com_m},
|
|
T.COMPANY_SUP_MATERIAL = #{com_sm},
|
|
T.COMPANY_PLATING_PAINTING = #{com_pp},
|
|
T.COMPANY_ELEMENT = #{com_em},
|
|
T.SPRUE = #{sprue},
|
|
T.EO_NO = #{ecoNo},
|
|
T.EO_ISSUE_DATE = #{ecoDate},
|
|
T.RH_PART_NO = #{erpno},
|
|
T.PLATED = #{plated},
|
|
T.STAMP = #{stamp}
|
|
WHEN NOT MATCHED THEN
|
|
INSERT(
|
|
OBJID,
|
|
OEM_OBJID,
|
|
CAR_OBJID,
|
|
PRODUCT_GROUP_OBJID,
|
|
PRODUCT_OBJID,
|
|
PART_NO,
|
|
RH_PART_OBJID,
|
|
PART_NAME,
|
|
DRAWING_RELEASE_TYPE,
|
|
PART_TYPE,
|
|
REV,
|
|
MATERIAL_TYPE_OBJID,
|
|
DRAWING_TYPE,
|
|
DRAWING_NO_OBJID,
|
|
MATERIAL_OBJID,
|
|
PART_OPTION,
|
|
THICKNESS,
|
|
WEIGHT,
|
|
APPLY_POINT_OBJID,
|
|
MNG_ITEM_TYPE,
|
|
IS_LAST,
|
|
WRITER,
|
|
REGDATE,
|
|
STATUS,
|
|
CAVITY,
|
|
REMARKS,
|
|
MOLD_CLASSIFICATION,
|
|
COMPANY_MOLD,
|
|
COMPANY_SUP_MATERIAL,
|
|
COMPANY_PLATING_PAINTING,
|
|
COMPANY_ELEMENT,
|
|
SPRUE,
|
|
EO_NO,
|
|
EO_ISSUE_DATE,
|
|
RH_PART_NO,
|
|
PLATED,
|
|
STAMP
|
|
)
|
|
VALUES
|
|
(
|
|
#{objid},
|
|
#{oem},
|
|
#{car},
|
|
#{productFamily},
|
|
#{product},
|
|
#{partNo},
|
|
#{rhPartObjId},
|
|
#{partName},
|
|
#{drawReleaseType},
|
|
#{partType},
|
|
UPPER(#{revision}),
|
|
#{materialType},
|
|
#{drawType},
|
|
#{drawingNoObjId},
|
|
#{material},
|
|
#{optionSpec},
|
|
#{thickness},
|
|
#{weight},
|
|
#{applyPointType},
|
|
#{mngType},
|
|
#{isLast},
|
|
#{writer},
|
|
SYSDATE,
|
|
#{status},
|
|
#{cavity},
|
|
#{remarks},
|
|
#{mod_c},
|
|
#{com_m},
|
|
#{com_sm},
|
|
#{com_pp},
|
|
#{com_em},
|
|
#{sprue},
|
|
#{ecoNo},
|
|
#{ecoDate},
|
|
#{erpno},
|
|
#{plated},
|
|
#{stamp}
|
|
)
|
|
</update> -->
|
|
|
|
<!-- Excel Import 파트정보를 merge 한다. -->
|
|
<update id="mergeImportPartInfo" parameterType="map">
|
|
MERGE INTO PART_INFO T USING DUAL ON ( T.PART_NO = #{partNo} AND T.REV = #{revision} AND T.STATUS = #{status})
|
|
WHEN MATCHED THEN
|
|
UPDATE
|
|
SET
|
|
T.OEM_OBJID = #{oem},
|
|
T.CAR_OBJID = #{car},
|
|
T.PRODUCT_GROUP_OBJID = #{productFamily},
|
|
T.PRODUCT_OBJID = #{product},
|
|
T.RH_PART_OBJID = #{rhPartObjId},
|
|
T.PART_NAME = #{partName},
|
|
T.DRAWING_RELEASE_TYPE = #{drawReleaseType},
|
|
T.PART_TYPE = #{partType},
|
|
T.MATERIAL_TYPE_OBJID = #{materialType},
|
|
T.DRAWING_TYPE = #{drawType},
|
|
T.DRAWING_NO_OBJID = #{drawingNoObjId},
|
|
T.MATERIAL_OBJID = #{material},
|
|
T.PART_OPTION = #{optionSpec},
|
|
T.THICKNESS = #{thickness},
|
|
T.WEIGHT = #{weight},
|
|
T.APPLY_POINT_OBJID = #{applyPointType},
|
|
T.MNG_ITEM_TYPE = #{mngType},
|
|
T.IS_LAST = #{isLast}
|
|
WHEN NOT MATCHED THEN
|
|
INSERT(
|
|
OBJID,
|
|
OEM_OBJID,
|
|
CAR_OBJID,
|
|
PRODUCT_GROUP_OBJID,
|
|
PRODUCT_OBJID,
|
|
PART_NO,
|
|
RH_PART_OBJID,
|
|
PART_NAME,
|
|
DRAWING_RELEASE_TYPE,
|
|
PART_TYPE,
|
|
REV,
|
|
MATERIAL_TYPE_OBJID,
|
|
DRAWING_TYPE,
|
|
DRAWING_NO_OBJID,
|
|
MATERIAL_OBJID,
|
|
PART_OPTION,
|
|
THICKNESS,
|
|
WEIGHT,
|
|
APPLY_POINT_OBJID,
|
|
MNG_ITEM_TYPE,
|
|
IS_LAST,
|
|
WRITER,
|
|
REGDATE,
|
|
STATUS
|
|
)
|
|
VALUES
|
|
(
|
|
#{objid},
|
|
#{oem},
|
|
#{car},
|
|
#{productFamily},
|
|
#{product},
|
|
#{partNo},
|
|
#{rhPartObjId},
|
|
#{partName},
|
|
#{drawReleaseType},
|
|
#{partType},
|
|
UPPER(#{revision}),
|
|
#{materialType},
|
|
#{drawType},
|
|
#{drawingNoObjId},
|
|
#{material},
|
|
#{optionSpec},
|
|
#{thickness},
|
|
#{weight},
|
|
#{applyPointType},
|
|
#{mngType},
|
|
#{isLast},
|
|
#{writer},
|
|
SYSDATE,
|
|
#{status}
|
|
)
|
|
</update>
|
|
|
|
<update id="mergeRevisionPartInfo" parameterType="map">
|
|
MERGE INTO PART_INFO T USING DUAL ON ( T.OBJID = #{objid})
|
|
WHEN MATCHED THEN
|
|
UPDATE
|
|
SET
|
|
T.REV = UPPER(#{revision}),
|
|
T.RH_PART_OBJID = #{rhPartObjId},
|
|
T.DRAWING_NO_OBJID = #{drawingNoObjId},
|
|
T.IS_LAST = #{isLast},
|
|
T.STATUS = #{status}
|
|
WHEN NOT MATCHED THEN
|
|
INSERT(
|
|
OBJID,
|
|
REV,
|
|
IS_LAST,
|
|
WRITER,
|
|
REGDATE,
|
|
RH_PART_OBJID,
|
|
DRAWING_NO_OBJID,
|
|
STATUS
|
|
)
|
|
VALUES
|
|
(
|
|
#{objid},
|
|
UPPER(#{revision}),
|
|
#{isLast},
|
|
#{writer},
|
|
SYSDATE,
|
|
#{rhPartObjId},
|
|
#{drawingNoObjId},
|
|
#{status}
|
|
)
|
|
</update>
|
|
|
|
<!-- part정보를 삭제한다. -->
|
|
<delete id="deletePart" parameterType="map">
|
|
DELETE PART_INFO WHERE OBJID = #{objid}
|
|
</delete>
|
|
|
|
|
|
<!-- 작성중 part정보 프로젝트 번호로 모두 삭제를 -->
|
|
<delete id="deleteAlltempData" parameterType="map">
|
|
DELETE FROM PART_MGMT
|
|
WHERE PROJECT_MGMT_OBJID = #{PROJECT_MGMT_OBJID}::integer
|
|
AND DEL_YN='N'
|
|
AND STATUS='write'
|
|
AND REV IS NULL
|
|
</delete>
|
|
|
|
|
|
|
|
<!-- PART 정보 연결된 하위 삭제 업데이트 -->
|
|
<update id="updatedeletePartInfo" parameterType="map">
|
|
UPDATE PART_MGMT
|
|
SET DEL_YN = 'Y'
|
|
WHERE PART_MGMT_OBJID IN(
|
|
SELECT O.PART_MGMT_OBJID FROM PART_MGMT O
|
|
START WITH O.PART_MGMT_OBJID=#{objId}
|
|
CONNECT BY NOCYCLE PRIOR O.PART_NO = O.PARENT_PART_NO)
|
|
</update>
|
|
|
|
|
|
<!-- PART 정보 업데이트 -->
|
|
<update id="updatePartTempInfo" parameterType="map">
|
|
UPDATE PART_MGMT
|
|
SET reg_date = now()
|
|
,part_name = #{part_name}
|
|
,spec_cd =#{spec_cd}
|
|
,qty =#{qty}
|
|
,process_cd =#{process_cd}
|
|
,sort_cd =#{sort_cd}
|
|
,sup_cd =#{supply_cd}
|
|
,mfa_cd =#{mfa_cd}
|
|
,change_cd =#{change_cd}
|
|
,sized =#{sized}
|
|
,material =#{material}
|
|
WHERE PART_MGMT_OBJID = #{objId}::integer
|
|
</update>
|
|
|
|
|
|
<!-- PART 복제 -->
|
|
<insert id="insertPartCopy" parameterType="map">
|
|
INSERT INTO PART_MGMT (
|
|
select DISTINCT
|
|
PART_MGMT_OBJID+1
|
|
,PART_MGMT_PARENT_OBJID
|
|
,#{copyprojectno}
|
|
,PART_NAME
|
|
,PART_NO
|
|
,PARENT_PART_NO
|
|
,SPEC_CD
|
|
,MFA_CD
|
|
,QTY
|
|
,PROCESS_CD
|
|
,SORT_CD
|
|
,SUP_CD
|
|
,REV
|
|
,IS_LAST
|
|
,REL_DATE
|
|
,REG_DATE
|
|
,REG_USER_ID
|
|
,CHANGE_CD
|
|
,STATUS
|
|
,DEL_YN
|
|
,
|
|
CASE WHEN SORT_CD IS NOT NULL
|
|
THEN 'PRTS00100'
|
|
ELSE ''
|
|
END AS REL_STATUS
|
|
,PRICE
|
|
,SUP_PRICE
|
|
FROM PART_MGMT T
|
|
WHERE T.PROJECT_MGMT_OBJID=#{projectno}
|
|
START WITH PART_NO = PARENT_PART_NO CONNECT BY NOCYCLE PRIOR PART_NO = PARENT_PART_NO )
|
|
</insert>
|
|
|
|
|
|
<!-- PART 도면 복제 -->
|
|
<insert id="insertPartCopyFile" parameterType="map">
|
|
INSERT INTO ATTACH_FILE_INFO (
|
|
select
|
|
T1.OBJID+1
|
|
,T1.TARGET_OBJID+1
|
|
,T1.SAVED_FILE_NAME
|
|
,T1.REAL_FILE_NAME
|
|
,T1.DOC_TYPE
|
|
,T1.DOC_TYPE_NAME
|
|
,T1.FILE_SIZE
|
|
,T1.FILE_EXT
|
|
,T1.FILE_PATH
|
|
,T1.WRITER
|
|
,T1.REGDATE
|
|
,T1.STATUS
|
|
FROM PART_MGMT T , ATTACH_FILE_INFO T1
|
|
WHERE T.PROJECT_MGMT_OBJID=#{projectno}
|
|
AND T.PART_MGMT_OBJID = T1.TARGET_OBJID)
|
|
|
|
</insert>
|
|
|
|
<!-- 해당파트의 상태 및 최종여부 정보를 변경한다.. -->
|
|
<update id="changePartStatus" parameterType="map">
|
|
<!-- UPDATE PART_MGMT SET STATUS = 'complete', IS_LAST = #{isLast} ,REV = #{REV} ,REL_DATE = SYSDATE
|
|
WHERE PART_MGMT_OBJID IN(SELECT T.PART_MGMT_OBJID FROM PART_MGMT T
|
|
WHERE T.STATUS='write'
|
|
START WITH PART_MGMT_OBJID = #{targetObjId}
|
|
CONNECT BY NOCYCLE PRIOR PART_NO = PARENT_PART_NO) -->
|
|
UPDATE PART_MGMT SET STATUS = 'complete', IS_LAST = #{isLast} ,REV = #{REV} ,REL_DATE = now()
|
|
WHERE PART_MGMT_OBJID = #{targetObjId}::integer
|
|
</update>
|
|
<!-- 해당파트의 상태 및 최종여부 단건 배포. -->
|
|
<update id="changeOnePartStatus" parameterType="map">
|
|
UPDATE PART_MGMT
|
|
SET STATUS = 'complete'
|
|
,IS_LAST = '1'
|
|
,REL_DATE = now()
|
|
,PART_NAME = #{part_name}
|
|
,SPEC_CD =#{spec_cd}
|
|
,QTY = #{qty}
|
|
,PROCESS_CD =#{process_cd}
|
|
,SORT_CD =#{sort_cd}
|
|
,SUP_CD=#{supply_cd}
|
|
,CHANGE_CD = #{change_cd}
|
|
,MFA_CD = #{mfa_cd}
|
|
WHERE PART_MGMT_OBJID = #{objId}::integer
|
|
</update>
|
|
|
|
|
|
<!-- 파트 확정 시 동일 품번의 is_last를 0으로 변경한다. -->
|
|
<update id="changeSamePartNoIsLast" parameterType="map">
|
|
UPDATE PART_MGMT
|
|
SET IS_LAST = '0'
|
|
WHERE PART_NO = (SELECT o.PART_NO FROM PART_MGMT AS o WHERE o.PART_MGMT_OBJID = #{targetObjId}::integer)
|
|
AND PARENT_PART_NO = (SELECT o.PARENT_PART_NO FROM PART_MGMT AS o WHERE o.PART_MGMT_OBJID = #{targetObjId}::integer)
|
|
</update>
|
|
|
|
<!-- 파트 목록을 가져온다(상태값 필수) -->
|
|
<select id="getPartList" parameterType="map" resultType="map">
|
|
SELECT ROWNUM RNUM,
|
|
T.*
|
|
FROM
|
|
(SELECT PART.OBJID,
|
|
PART.OEM_OBJID,
|
|
PART.CAR_OBJID,
|
|
(SELECT OEM_NAME FROM OEM_MNG WHERE OBJID = PART.OEM_OBJID) OEM_NAME,
|
|
(SELECT CAR_NAME FROM CAR_MNG WHERE OBJID = PART.CAR_OBJID) CAR_NAME,
|
|
PART.PRODUCT_GROUP_OBJID,
|
|
PART.PRODUCT_OBJID,
|
|
(SELECT PRODUCT_GROUP_NAME FROM PRODUCT_GROUP_MNG WHERE OBJID = PART.PRODUCT_GROUP_OBJID) PRODUCT_GROUP_NAME,
|
|
(SELECT PRODUCT_NAME FROM PRODUCT_MNG WHERE OBJID = PART.PRODUCT_OBJID) PRODUCT_NAME,
|
|
PART.PART_NO,
|
|
PART.RH_PART_OBJID,
|
|
PART.RH_PART_NO,
|
|
PART.PART_NAME,
|
|
PART.DRAWING_RELEASE_TYPE,
|
|
DECODE(PART.DRAWING_RELEASE_TYPE,'dev','개발','product','양산') DRAWING_RELEASE_TYPE_TITLE,
|
|
PART.PART_TYPE,
|
|
PART.EO_OBJID,
|
|
PART.EO_NO,
|
|
PART.EO_ISSUE_DATE,
|
|
TO_CHAR(PART.EO_ISSUE_DATE,'YYYY-MM-DD') EO_ISSUE_DATE_TITLE,
|
|
PART.REV,
|
|
PART.MATERIAL_TYPE_OBJID,
|
|
(SELECT MATERIAL_TYPE_NAME FROM MATERIAL_TYPE_MNG WHERE OBJID = PART.MATERIAL_TYPE_OBJID) MATERIAL_TYPE_NAME,
|
|
PART.DRAWING_TYPE,
|
|
DECODE(PART.DRAWING_TYPE,'draw','D','shownOn','S') AS DRAWING_TYPE_TITLE,
|
|
PART.DRAWING_NO_OBJID,
|
|
(SELECT PART_NO FROM PART_INFO WHERE OBJID = PART.DRAWING_NO_OBJID) DRAWING_NO,
|
|
PART.MATERIAL_OBJID,
|
|
(SELECT MATERIAL_NAME FROM MATERIAL_MNG WHERE OBJID = PART.MATERIAL_OBJID) MATERIAL_NAME,
|
|
PART.PART_OPTION,
|
|
(SELECT OPTION_NAME FROM option_spec_mng WHERE OBJID = PART.PART_OPTION) PART_OPTION_NAME,
|
|
PART.THICKNESS,
|
|
PART.WEIGHT,
|
|
PART.APPLY_POINT_OBJID,
|
|
(SELECT APPLY_POINT_NAME FROM APPLY_POINT_MNG WHERE OBJID = PART.APPLY_POINT_OBJID) APPLY_POINT_NAME,
|
|
PART.MNG_ITEM_TYPE MNG_ITEM_TYPE_ORG,
|
|
DECODE(UPPER(PART.MNG_ITEM_TYPE),'MANAGEMENT','Y','N') MNG_ITEM_TYPE,
|
|
(SELECT OBJID FROM ATTACH_FILE_INFO WHERE DOC_TYPE = 'PART_ECD' AND TARGET_OBJID = PART.OBJID AND UPPER(STATUS) = 'ACTIVE') AS ECD_OBJID,
|
|
(SELECT OBJID FROM ATTACH_FILE_INFO WHERE DOC_TYPE = 'PART_MNG_ITEM' AND TARGET_OBJID = PART.OBJID AND UPPER(STATUS) = 'ACTIVE') AS MNG_ITEM_FILE_OBJID,
|
|
(SELECT SAVED_FILE_NAME FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = PART.OBJID AND DOC_TYPE = 'PART_SHAPE' AND UPPER(STATUS) = 'ACTIVE') AS SAVED_FILE_NAME,
|
|
(SELECT REAL_FILE_NAME FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = PART.OBJID AND DOC_TYPE = 'PART_SHAPE' AND UPPER(STATUS) = 'ACTIVE') AS REAL_FILE_NAME,
|
|
(SELECT OBJID FROM ATTACH_FILE_INFO WHERE UPPER(DOC_TYPE) = 'PART_CONVERT_2D' AND TARGET_OBJID = PART.OBJID AND UPPER(STATUS) = 'ACTIVE') AS CONVERT_2D_OBJID,
|
|
(SELECT OBJID FROM ATTACH_FILE_INFO WHERE UPPER(DOC_TYPE) = 'PART_CONVERT_3D' AND TARGET_OBJID = PART.OBJID AND UPPER(STATUS) = 'ACTIVE') AS CONVERT_3D_OBJID,
|
|
(SELECT REPLACE(FILE_PATH, '\', '\\') FILE_PATH FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = PART.OBJID AND DOC_TYPE = 'PART_SHAPE' AND UPPER(STATUS) = 'ACTIVE') AS FILE_PATH,
|
|
PART.IS_LAST,
|
|
PART.WRITER,
|
|
PART.CAVITY,
|
|
PART.REMARKS,
|
|
PART.MOLD_CLASSIFICATION,
|
|
PART.COMPANY_MOLD,
|
|
PART.COMPANY_SUP_MATERIAL,
|
|
PART.COMPANY_PLATING_PAINTING,
|
|
PART.COMPANY_ELEMENT,
|
|
PART.SPRUE,
|
|
PART.STAMP,
|
|
PART.PLATED,
|
|
TO_CHAR(PART.REGDATE,'YYYY-MM-DD') REGDATE,
|
|
PART.REGDATE REGDATE_ORG,
|
|
DECODE(UPPER(PART.STATUS),'CREATE','작성중','COMPLETE','확정','REVISION','작성중(Revision)') STATUS_STR,
|
|
(SELECT WM_CONCAT(CODE_NAME) COMM_NAME FROM part_product_category P, comm_code C WHERE P.COMM_CODE = C.code_id AND P.part_objid = PART.OBJID GROUP BY PART_OBJID) COMM_NAME,
|
|
<if test=" actionType != null and actionType != '' and actionType == 'excel'">
|
|
(SELECT DECODE(COUNT(1),0,'N','Y') FROM REL_PART_CHANGE_ITEM WHERE MASTER_OBJID = PART.OBJID AND ITEM_NAME = 'changeGeometry') CHANGE_GEOMETRY_FLAG,
|
|
(SELECT DECODE(COUNT(1),0,'N','Y') FROM REL_PART_CHANGE_ITEM WHERE MASTER_OBJID = PART.OBJID AND ITEM_NAME = 'materialThickChange') MATERIAL_THICK_CHANGE_FLAG,
|
|
(SELECT DECODE(COUNT(1),0,'N','Y') FROM REL_PART_CHANGE_ITEM WHERE MASTER_OBJID = PART.OBJID AND ITEM_NAME = 'cycleChange') CYCLE_CHANGE_FLAG,
|
|
(SELECT DECODE(COUNT(1),0,'N','Y') FROM REL_PART_CHANGE_ITEM WHERE MASTER_OBJID = PART.OBJID AND ITEM_NAME = 'constructChange') CONSTRUCT_CHANGE_FLAG,
|
|
(SELECT DECODE(COUNT(1),0,'N','Y') FROM REL_PART_CHANGE_ITEM WHERE MASTER_OBJID = PART.OBJID AND ITEM_NAME = 'weldingSpot') WELDING_SPOT_FLAG,
|
|
(SELECT DECODE(COUNT(1),0,'N','Y') FROM REL_PART_CHANGE_ITEM WHERE MASTER_OBJID = PART.OBJID AND ITEM_NAME = 'structurGlue') STRUCTUR_GLUE_FLAG,
|
|
(SELECT DECODE(COUNT(1),0,'N','Y') FROM REL_PART_CHANGE_ITEM WHERE MASTER_OBJID = PART.OBJID AND ITEM_NAME = 'first') FIRST_FLAG,
|
|
(SELECT DECODE(COUNT(1),0,'N','Y') FROM REL_PART_CHANGE_ITEM WHERE MASTER_OBJID = PART.OBJID AND ITEM_NAME = 'etc') ETC_FLAG,
|
|
</if>
|
|
PART.STATUS
|
|
FROM PART_INFO PART
|
|
WHERE 1=1
|
|
<if test=" isLast != null and isLast != '' ">
|
|
AND IS_LAST = #{isLast}
|
|
</if>
|
|
ORDER BY PART.PART_NO DESC
|
|
)T
|
|
WHERE 1=1
|
|
<if test=" status != null and status != '' ">
|
|
<choose>
|
|
<when test=" status == 'create' ">
|
|
AND UPPER(T.STATUS) IN ('CREATE','REVISION')
|
|
</when>
|
|
<when test=" status == 'complete' ">
|
|
AND UPPER(T.STATUS) IN UPPER(#{status})
|
|
</when>
|
|
<otherwise>
|
|
AND UPPER(T.STATUS) IN ('CREATE','REVISION','COMPLETE')
|
|
</otherwise>
|
|
</choose>
|
|
</if>
|
|
<if test=" search_oem != null and search_oem != '' ">
|
|
AND T.OEM_OBJID = #{search_oem}
|
|
</if>
|
|
<if test=" search_car != null and search_car != '' ">
|
|
AND T.CAR_OBJID = #{search_car}
|
|
</if>
|
|
<if test=" search_productGroup != null and search_productGroup != '' ">
|
|
AND T.PRODUCT_GROUP_OBJID = #{search_productGroup}
|
|
</if>
|
|
<if test=" search_productFamily != null and search_productFamily != '' ">
|
|
AND T.PRODUCT_GROUP_OBJID = #{search_productFamily}
|
|
</if>
|
|
<if test=" search_product != null and search_product != '' ">
|
|
AND T.PRODUCT_OBJID = #{search_product}
|
|
</if>
|
|
<choose>
|
|
<when test="multiSearch != null and !''.equals(multiSearch)">
|
|
AND UPPER(T.PART_NO) IN <foreach item="item" index="index" collection="partNoArr" open="(" separator="," close=")">UPPER(#{item})</foreach>
|
|
</when>
|
|
<otherwise>
|
|
<if test=" search_partNo != null and search_partNo != '' ">
|
|
AND UPPER(T.PART_NO) LIKE UPPER('%${search_partNo}%')
|
|
</if>
|
|
</otherwise>
|
|
</choose>
|
|
<if test=" search_partName != null and search_partName != '' ">
|
|
AND UPPER(T.PART_NAME) LIKE UPPER('%${search_partName}%')
|
|
</if>
|
|
<if test=" search_material != null and search_material != '' ">
|
|
AND T.MATERIAL_OBJID = #{search_material}
|
|
</if>
|
|
<if test=" search_revision != null and search_revision != '' ">
|
|
AND UPPER(T.REV) LIKE UPPER('%${search_revision}%')
|
|
</if>
|
|
<if test=" search_eoNo != null and search_eoNo != '' ">
|
|
AND UPPER(T.EO_NO) LIKE UPPER('%${search_eoNo}%')
|
|
</if>
|
|
<if test=" search_drawReleaseType != null and search_drawReleaseType != '' ">
|
|
AND T.DRAWING_RELEASE_TYPE = #{search_drawReleaseType}
|
|
</if>
|
|
<choose>
|
|
<when test="multiSearchThickness != null and !''.equals(multiSearchThickness)">
|
|
AND T.THICKNESS IN <foreach item="item" index="index" collection="thicknessArr" open="(" separator="," close=")">UPPER(#{item})</foreach>
|
|
</when>
|
|
<otherwise>
|
|
<if test=" search_thickness != null and search_thickness != '' ">
|
|
AND T.THICKNESS LIKE '%${search_thickness}%'
|
|
</if>
|
|
</otherwise>
|
|
</choose>
|
|
<choose>
|
|
<when test="multiSearchDrawingNo != null and !''.equals(multiSearchDrawingNo)">
|
|
AND UPPER(T.DRAWING_NO) IN <foreach item="item" index="index" collection="drawingNoArr" open="(" separator="," close=")">UPPER(#{item})</foreach>
|
|
OR UPPER(T.PART_NO) IN <foreach item="item" index="index" collection="drawingNoArr" open="(" separator="," close=")">UPPER(#{item})</foreach>
|
|
</when>
|
|
<otherwise>
|
|
<if test=" search_drawingNo != null and search_drawingNo != '' ">
|
|
AND UPPER(T.DRAWING_NO) LIKE UPPER('%${search_drawingNo}%')
|
|
OR UPPER(T.PART_NO) LIKE UPPER('%${search_drawingNo}%')
|
|
</if>
|
|
</otherwise>
|
|
</choose>
|
|
</select>
|
|
|
|
<!-- 파트 Revision 목록을 가져온다(상태값 필수) -->
|
|
<select id="getPartRevisionList" parameterType="map" resultType="map">
|
|
SELECT ROWNUM RNUM, TT.*
|
|
FROM (
|
|
SELECT T.*
|
|
FROM(
|
|
SELECT PART.OBJID,
|
|
PART.OEM_OBJID,
|
|
PART.CAR_OBJID,
|
|
(SELECT OEM_NAME FROM OEM_MNG WHERE OBJID = PART.OEM_OBJID) OEM_NAME,
|
|
(SELECT CAR_NAME FROM CAR_MNG WHERE OBJID = PART.CAR_OBJID) CAR_NAME,
|
|
(SELECT CAR_CODE FROM CAR_MNG WHERE OBJID = PART.CAR_OBJID) CAR_CODE,
|
|
PART.PRODUCT_GROUP_OBJID,
|
|
PART.PRODUCT_OBJID,
|
|
(SELECT PRODUCT_GROUP_NAME FROM PRODUCT_GROUP_MNG WHERE OBJID = PART.PRODUCT_GROUP_OBJID) PRODUCT_GROUP_NAME,
|
|
(SELECT PRODUCT_NAME FROM PRODUCT_MNG WHERE OBJID = PART.PRODUCT_OBJID) PRODUCT_NAME,
|
|
PART.PART_NO,
|
|
PART.RH_PART_OBJID,
|
|
(SELECT PART_NO FROM PART_INFO WHERE OBJID = PART.RH_PART_OBJID) RH_PART_NO,
|
|
PART.PART_NAME,
|
|
PART.DRAWING_RELEASE_TYPE,
|
|
DECODE(PART.DRAWING_RELEASE_TYPE,'dev','개발','product','양산') DRAWING_RELEASE_TYPE_TITLE,
|
|
PART.PART_TYPE,
|
|
PART.EO_OBJID,
|
|
PART.EO_NO,
|
|
PART.EO_ISSUE_DATE,
|
|
TO_CHAR(PART.EO_ISSUE_DATE,'YYYY-MM-DD') EO_ISSUE_DATE_TITLE,
|
|
PART.REV,
|
|
PART.MATERIAL_TYPE_OBJID,
|
|
(SELECT MATERIAL_TYPE_NAME FROM MATERIAL_TYPE_MNG WHERE OBJID = PART.MATERIAL_TYPE_OBJID) MATERIAL_TYPE_NAME,
|
|
PART.DRAWING_TYPE,
|
|
DECODE(PART.DRAWING_TYPE,'draw','D','shownOn','S') AS DRAWING_TYPE_TITLE,
|
|
PART.DRAWING_NO_OBJID,
|
|
(SELECT PART_NO FROM PART_INFO WHERE OBJID = PART.DRAWING_NO_OBJID) DRAWING_NO,
|
|
PART.MATERIAL_OBJID,
|
|
(SELECT MATERIAL_NAME FROM MATERIAL_MNG WHERE OBJID = PART.MATERIAL_OBJID) MATERIAL_NAME,
|
|
PART.PART_OPTION,
|
|
(SELECT OPTION_NAME FROM option_spec_mng WHERE OBJID = PART.PART_OPTION) PART_OPTION_NAME,
|
|
PART.THICKNESS,
|
|
PART.WEIGHT,
|
|
PART.APPLY_POINT_OBJID,
|
|
(SELECT APPLY_POINT_NAME FROM APPLY_POINT_MNG WHERE OBJID = PART.APPLY_POINT_OBJID) APPLY_POINT_NAME,
|
|
PART.MNG_ITEM_TYPE MNG_ITEM_TYPE_ORG,
|
|
DECODE(UPPER(PART.MNG_ITEM_TYPE),'MANAGEMENT','Y','N') MNG_ITEM_TYPE,
|
|
(SELECT OBJID FROM ATTACH_FILE_INFO WHERE DOC_TYPE = 'PART_ECD' AND TARGET_OBJID = PART.OBJID AND UPPER(STATUS) = 'ACTIVE') AS ECD_OBJID,
|
|
(SELECT OBJID FROM ATTACH_FILE_INFO WHERE DOC_TYPE = 'PART_MNG_ITEM' AND TARGET_OBJID = PART.OBJID AND UPPER(STATUS) = 'ACTIVE') AS MNG_ITEM_FILE_OBJID,
|
|
(SELECT SAVED_FILE_NAME FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = PART.OBJID AND DOC_TYPE = 'PART_SHAPE' AND UPPER(STATUS) = 'ACTIVE') AS SAVED_FILE_NAME,
|
|
(SELECT REAL_FILE_NAME FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = PART.OBJID AND DOC_TYPE = 'PART_SHAPE' AND UPPER(STATUS) = 'ACTIVE') AS REAL_FILE_NAME,
|
|
(SELECT OBJID FROM ATTACH_FILE_INFO WHERE UPPER(DOC_TYPE) = 'PART_CONVERT_2D' AND TARGET_OBJID = PART.OBJID AND UPPER(STATUS) = 'ACTIVE') AS CONVERT_2D_OBJID,
|
|
(SELECT OBJID FROM ATTACH_FILE_INFO WHERE UPPER(DOC_TYPE) = 'PART_CONVERT_3D' AND TARGET_OBJID = PART.OBJID AND UPPER(STATUS) = 'ACTIVE') AS CONVERT_3D_OBJID,
|
|
(SELECT REPLACE(FILE_PATH, '\', '\\') FILE_PATH FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = PART.OBJID AND DOC_TYPE = 'PART_SHAPE' AND UPPER(STATUS) = 'ACTIVE') AS FILE_PATH,
|
|
PART.IS_START_DEV_PART IS_START_DEV_PART_ORG,
|
|
NVL2(PART.IS_START_DEV_PART,PART.IS_START_DEV_PART,'1') IS_START_DEV_PART,
|
|
PART.IS_LAST,
|
|
PART.WRITER,
|
|
TO_CHAR(PART.REGDATE,'YYYY-MM-DD') REGDATE,
|
|
PART.REGDATE REGDATE_ORG,
|
|
DECODE(UPPER(PART.STATUS),'CREATE','작성중','COMPLETE','확정','REVISION','작성중(Revision)') STATUS_STR,
|
|
<if test=" actionType != null and actionType != '' and actionType == 'excel'">
|
|
(SELECT DECODE(COUNT(1),0,'N','Y') FROM REL_PART_CHANGE_ITEM WHERE MASTER_OBJID = PART.OBJID AND ITEM_NAME = 'changeGeometry') CHANGE_GEOMETRY_FLAG,
|
|
(SELECT DECODE(COUNT(1),0,'N','Y') FROM REL_PART_CHANGE_ITEM WHERE MASTER_OBJID = PART.OBJID AND ITEM_NAME = 'materialThickChange') MATERIAL_THICK_CHANGE_FLAG,
|
|
(SELECT DECODE(COUNT(1),0,'N','Y') FROM REL_PART_CHANGE_ITEM WHERE MASTER_OBJID = PART.OBJID AND ITEM_NAME = 'cycleChange') CYCLE_CHANGE_FLAG,
|
|
(SELECT DECODE(COUNT(1),0,'N','Y') FROM REL_PART_CHANGE_ITEM WHERE MASTER_OBJID = PART.OBJID AND ITEM_NAME = 'constructChange') CONSTRUCT_CHANGE_FLAG,
|
|
(SELECT DECODE(COUNT(1),0,'N','Y') FROM REL_PART_CHANGE_ITEM WHERE MASTER_OBJID = PART.OBJID AND ITEM_NAME = 'weldingSpot') WELDING_SPOT_FLAG,
|
|
(SELECT DECODE(COUNT(1),0,'N','Y') FROM REL_PART_CHANGE_ITEM WHERE MASTER_OBJID = PART.OBJID AND ITEM_NAME = 'structurGlue') STRUCTUR_GLUE_FLAG,
|
|
(SELECT DECODE(COUNT(1),0,'N','Y') FROM REL_PART_CHANGE_ITEM WHERE MASTER_OBJID = PART.OBJID AND ITEM_NAME = 'first') FIRST_FLAG,
|
|
(SELECT DECODE(COUNT(1),0,'N','Y') FROM REL_PART_CHANGE_ITEM WHERE MASTER_OBJID = PART.OBJID AND ITEM_NAME = 'etc') ETC_FLAG,
|
|
</if>
|
|
(SELECT WM_CONCAT(DECODE(ITEM_NAME,'changeGeometry','형상변경','materialThickChange','재질/두께변경','cycleChange','주기변경','constructChange','구성변경','weldingSpot','용접점','structurGlue','구조용접착제','first','초도','etc','기타','none','해당무')) FROM REL_PART_CHANGE_ITEM WHERE MASTER_OBJID = PART.OBJID) AS CHANGE_ITEM_TITLE,
|
|
PART.STATUS
|
|
FROM PART_INFO PART
|
|
WHERE 1=1
|
|
<if test=" isLast != null and isLast != '' ">
|
|
AND IS_LAST = #{isLast}
|
|
</if>
|
|
<if test=" status != null and status != '' ">
|
|
<choose>
|
|
<when test=" status == 'create' ">
|
|
AND UPPER(STATUS) IN ('CREATE','REVISION')
|
|
</when>
|
|
<when test=" status == 'complete' ">
|
|
AND UPPER(STATUS) IN UPPER(#{status})
|
|
</when>
|
|
<otherwise>
|
|
AND UPPER(STATUS) IN ('CREATE','REVISION','COMPLETE')
|
|
</otherwise>
|
|
</choose>
|
|
</if>
|
|
ORDER BY PART.EO_ISSUE_DATE DESC NULLS LAST
|
|
)T
|
|
WHERE 1=1
|
|
<!-- 시작 Part조회를 위한 조건 추가 -->
|
|
<if test=" isStartDevPart != null and isStartDevPart != '' ">
|
|
AND T.IS_START_DEV_PART = #{isStartDevPart}
|
|
</if>
|
|
<if test=" search_oem != null and search_oem != '' ">
|
|
AND T.OEM_OBJID = #{search_oem}
|
|
</if>
|
|
<if test=" search_car != null and search_car != '' ">
|
|
AND T.CAR_OBJID = #{search_car}
|
|
</if>
|
|
<if test=" search_productGroup != null and search_productGroup != '' ">
|
|
AND T.PRODUCT_GROUP_OBJID = #{search_productGroup}
|
|
</if>
|
|
<if test=" search_productFamily != null and search_productFamily != '' ">
|
|
AND T.PRODUCT_GROUP_OBJID = #{search_productFamily}
|
|
</if>
|
|
<if test=" search_product != null and search_product != '' ">
|
|
AND T.PRODUCT_OBJID = #{search_product}
|
|
</if>
|
|
<choose>
|
|
<when test="multiSearch != null and !''.equals(multiSearch)">
|
|
AND UPPER(T.PART_NO) IN <foreach item="item" index="index" collection="partNoArr" open="(" separator="," close=")">UPPER(#{item})</foreach>
|
|
</when>
|
|
<otherwise>
|
|
<if test=" search_partNo != null and search_partNo != '' ">
|
|
AND UPPER(T.PART_NO) LIKE UPPER('%${search_partNo}%')
|
|
</if>
|
|
</otherwise>
|
|
</choose>
|
|
<if test=" search_partName != null and search_partName != '' ">
|
|
AND UPPER(T.PART_NAME) LIKE UPPER('%${search_partName}%')
|
|
</if>
|
|
<if test=" search_material != null and search_material != '' ">
|
|
AND T.MATERIAL_OBJID = #{search_material}
|
|
</if>
|
|
<if test=" search_revision != null and search_revision != '' ">
|
|
AND UPPER(T.REV) LIKE UPPER('%${search_revision}%')
|
|
</if>
|
|
<if test=" search_eoNo != null and search_eoNo != '' ">
|
|
AND UPPER(T.EO_NO) LIKE UPPER('%${search_eoNo}%')
|
|
</if>
|
|
<if test=" search_drawingNo != null and search_drawingNo != '' ">
|
|
AND UPPER(T.DRAWING_NO) LIKE UPPER('%${search_drawingNo}%')
|
|
</if>
|
|
<if test=" search_drawReleaseType != null and search_drawReleaseType != '' ">
|
|
AND T.DRAWING_RELEASE_TYPE = #{search_drawReleaseType}
|
|
</if>
|
|
<if test=" search_eoNo != null and search_eoNo != '' ">
|
|
AND UPPER(EO_NO) LIKE UPPER('%${search_eoNo}%')
|
|
</if>
|
|
<if test="search_fromDate != null and search_fromDate != ''">
|
|
AND TO_DATE(EO_ISSUE_DATE_TITLE,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{search_fromDate}, 'YYYY-MM-DD')
|
|
</if>
|
|
<if test="search_toDate != null and search_toDate != ''">
|
|
AND TO_DATE(EO_ISSUE_DATE_TITLE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{search_toDate}, 'YYYY-MM-DD')
|
|
</if>
|
|
<choose>
|
|
<when test="multiSearchThickness != null and !''.equals(multiSearchThickness)">
|
|
AND T.THICKNESS IN <foreach item="item" index="index" collection="thicknessArr" open="(" separator="," close=")">UPPER(#{item})</foreach>
|
|
</when>
|
|
<otherwise>
|
|
<if test=" search_thickness != null and search_thickness != '' ">
|
|
AND T.THICKNESS LIKE '%${search_thickness}%'
|
|
</if>
|
|
</otherwise>
|
|
</choose>
|
|
<choose>
|
|
<when test="multiSearchDrawingNo != null and !''.equals(multiSearchDrawingNo)">
|
|
AND (UPPER(T.DRAWING_NO) IN <foreach item="item" index="index" collection="drawingNoArr" open="(" separator="," close=")">UPPER(#{item})</foreach>
|
|
OR UPPER(T.PART_NO) IN <foreach item="item" index="index" collection="drawingNoArr" open="(" separator="," close=")">UPPER(#{item})</foreach>)
|
|
</when>
|
|
<otherwise>
|
|
<if test=" search_drawingNo != null and search_drawingNo != '' ">
|
|
|
|
AND(UPPER(T.DRAWING_NO) LIKE UPPER('%${search_drawingNo}%')
|
|
OR UPPER(T.PART_NO) LIKE UPPER('%${search_drawingNo}%'))
|
|
</if>
|
|
</otherwise>
|
|
</choose>
|
|
) TT
|
|
</select>
|
|
|
|
<!-- 파트 중복여부 확인 -->
|
|
<select id="getDuplicatePartList" parameterType="map" resultType="map">
|
|
SELECT
|
|
OBJID
|
|
,PART_NO
|
|
,STATUS
|
|
,REV
|
|
FROM PART_INFO
|
|
WHERE 1=1
|
|
<if test=" targetObjId != null and targetObjId != '' ">
|
|
AND OBJID NOT IN(#{targetObjId})
|
|
</if>
|
|
<if test=" search_partNo != null and search_partNo != '' ">
|
|
AND PART_NO = #{search_partNo}
|
|
</if>
|
|
<if test=" search_revision != null and search_revision != '' ">
|
|
AND UPPER(REV) = UPPER(#{search_revision})
|
|
</if>
|
|
</select>
|
|
|
|
<!-- 파트가 EO당 하나만 연결가능하다는 전제하에 연결 가능한 파트 목록을 가져온다(상태값 필수) -->
|
|
<select id="getConnectablePartList" parameterType="map" resultType="map">
|
|
SELECT ROWNUM RNUM,
|
|
T.*
|
|
FROM
|
|
(SELECT PART.OBJID,
|
|
PART.OEM_OBJID,
|
|
PART.CAR_OBJID,
|
|
(SELECT OEM_NAME
|
|
FROM OEM_MNG
|
|
WHERE OBJID = PART.OEM_OBJID
|
|
) OEM_NAME,
|
|
(SELECT OEM_CODE
|
|
FROM OEM_MNG
|
|
WHERE OBJID = PART.OEM_OBJID
|
|
) OEM_CODE,
|
|
(SELECT CAR_NAME
|
|
FROM CAR_MNG
|
|
WHERE OBJID = PART.CAR_OBJID
|
|
) CAR_NAME,
|
|
(SELECT CAR_CODE
|
|
FROM CAR_MNG
|
|
WHERE OBJID = PART.CAR_OBJID
|
|
) CAR_CODE,
|
|
PART.PRODUCT_GROUP_OBJID,
|
|
PART.PRODUCT_OBJID,
|
|
(SELECT PRODUCT_GROUP_NAME
|
|
FROM PRODUCT_GROUP_MNG
|
|
WHERE OBJID = PART.PRODUCT_GROUP_OBJID
|
|
) PRODUCT_GROUP_NAME,
|
|
(SELECT PRODUCT_NAME
|
|
FROM PRODUCT_MNG
|
|
WHERE OBJID = PART.PRODUCT_OBJID
|
|
) PRODUCT_NAME,
|
|
PART.PART_NO,
|
|
PART.RH_PART_OBJID,
|
|
(SELECT PART_NO FROM PART_INFO WHERE OBJID = PART.RH_PART_OBJID) RH_PART_NO,
|
|
PART.PART_NAME,
|
|
PART.DRAWING_RELEASE_TYPE,
|
|
DECODE(PART.DRAWING_RELEASE_TYPE,'dev','개발','product','양산') DRAWING_RELEASE_TYPE_TITLE,
|
|
PART.PART_TYPE,
|
|
PART.EO_OBJID,
|
|
PART.REV,
|
|
PART.MATERIAL_TYPE_OBJID,
|
|
(SELECT MATERIAL_TYPE_NAME
|
|
FROM MATERIAL_TYPE_MNG
|
|
WHERE OBJID = PART.MATERIAL_TYPE_OBJID
|
|
) MATERIAL_TYPE_NAME,
|
|
PART.DRAWING_TYPE,
|
|
DECODE(PART.DRAWING_TYPE,'draw','D','shownOn','S') AS DRAWING_TYPE_TITLE,
|
|
PART.MATERIAL_OBJID,
|
|
(SELECT MATERIAL_NAME
|
|
FROM MATERIAL_MNG
|
|
WHERE OBJID = PART.MATERIAL_OBJID
|
|
) MATERIAL_NAME,
|
|
PART.PART_OPTION,
|
|
(SELECT OPTION_NAME
|
|
FROM option_spec_mng
|
|
WHERE OBJID = PART.PART_OPTION
|
|
) PART_OPTION_NAME,
|
|
PART.THICKNESS,
|
|
PART.WEIGHT,
|
|
PART.APPLY_POINT_OBJID,
|
|
PART.MNG_ITEM_TYPE MNG_ITEM_TYPE_ORG,
|
|
DECODE(UPPER(PART.MNG_ITEM_TYPE),'MANAGEMENT','Y','N') MNG_ITEM_TYPE,
|
|
(SELECT OBJID FROM ATTACH_FILE_INFO WHERE DOC_TYPE = 'PART_ECD' AND TARGET_OBJID = PART.OBJID AND UPPER(STATUS) = 'ACTIVE') AS ECD_OBJID,
|
|
(SELECT OBJID FROM ATTACH_FILE_INFO WHERE DOC_TYPE = 'PART_MNG_ITEM' AND TARGET_OBJID = PART.OBJID AND UPPER(STATUS) = 'ACTIVE') AS MNG_ITEM_FILE_OBJID,
|
|
PART.IS_LAST,
|
|
PART.WRITER,
|
|
TO_CHAR(PART.REGDATE,'YYYY-MM-DD') REGDATE,
|
|
PART.REGDATE REGDATE_ORG,
|
|
DECODE(UPPER(PART.STATUS),'CREATE','작성중','확정') STATUS_STR,
|
|
PART.STATUS
|
|
FROM PART_INFO PART
|
|
)T
|
|
WHERE T.STATUS = #{status}
|
|
AND T.EO_OBJID IS NULL
|
|
<if test=" search_oem != null and search_oem != '' ">
|
|
AND T.OEM_OBJID = #{search_oem}
|
|
</if>
|
|
<if test=" search_car != null and search_car != '' ">
|
|
AND T.CAR_OBJID = #{search_car}
|
|
</if>
|
|
<if test=" search_productGroup != null and search_productGroup != '' ">
|
|
AND T.PRODUCT_GROUP_OBJID = #{search_productGroup}
|
|
</if>
|
|
<if test=" search_productFamily != null and search_productFamily != '' ">
|
|
AND T.PRODUCT_GROUP_OBJID = #{search_productFamily}
|
|
</if>
|
|
<if test=" search_product != null and search_product != '' ">
|
|
AND T.PRODUCT_OBJID = #{search_product}
|
|
</if>
|
|
<if test=" search_partNo != null and search_partNo != '' ">
|
|
AND upper(T.PART_NO) like UPPER('%${search_partNo}%')
|
|
</if>
|
|
<if test=" search_partName != null and search_partName != '' ">
|
|
AND upper(T.PART_NAME) like UPPER('%${search_partName}%')
|
|
</if>
|
|
<if test=" search_material != null and search_material != '' ">
|
|
AND T.MATERIAL_OBJID = #{search_material}
|
|
</if>
|
|
<if test=" search_thickness != null and search_thickness != '' ">
|
|
AND T.THICKNESS = #{search_thickness}
|
|
</if>
|
|
<if test=" search_revision != null and search_revision != '' ">
|
|
AND UPPER(T.REV) like UPPER('%${search_revision}%')
|
|
</if>
|
|
<if test=" search_eoNo != null and search_eoNo != '' ">
|
|
AND T.EO_NO = #{search_eoNo}
|
|
</if>
|
|
<if test=" search_drawReleaseType != null and search_drawReleaseType != '' ">
|
|
AND T.DRAWING_RELEASE_TYPE = #{search_drawReleaseType}
|
|
</if>
|
|
<if test=" search_thickness != null and search_thickness != '' ">
|
|
AND T.THICKNESS = #{search_thickness}
|
|
</if>
|
|
<if test=" search_isLast != null and search_isLast != '' and 1 == search_isLast">
|
|
AND T.IS_LAST = #{search_isLast}
|
|
</if>
|
|
</select>
|
|
|
|
<!-- 파트의 상세 정보를 가져온다. -->
|
|
<select id="getPartInfoDetail" parameterType="map" resultType="map">
|
|
SELECT ROWNUM RNUM,
|
|
T.*
|
|
FROM
|
|
(SELECT PART.OBJID,
|
|
PART.OEM_OBJID,
|
|
PART.CAR_OBJID,
|
|
(SELECT OEM_NAME FROM OEM_MNG WHERE OBJID = PART.OEM_OBJID) OEM_NAME,
|
|
(SELECT OEM_CODE FROM OEM_MNG WHERE OBJID = PART.OEM_OBJID) OEM_CODE,
|
|
(SELECT CAR_NAME FROM CAR_MNG WHERE OBJID = PART.CAR_OBJID) CAR_NAME,
|
|
(SELECT CAR_CODE FROM CAR_MNG WHERE OBJID = PART.CAR_OBJID) CAR_CODE,
|
|
PART.PRODUCT_GROUP_OBJID,
|
|
PART.PRODUCT_OBJID,
|
|
(SELECT PRODUCT_GROUP_NAME FROM PRODUCT_GROUP_MNG WHERE OBJID = PART.PRODUCT_GROUP_OBJID) PRODUCT_GROUP_NAME,
|
|
(SELECT PRODUCT_NAME FROM PRODUCT_MNG WHERE OBJID = PART.PRODUCT_OBJID) PRODUCT_NAME,
|
|
PART.PART_NO,
|
|
PART.RH_PART_OBJID,
|
|
PART.RH_PART_NO,
|
|
PART.PART_NAME,
|
|
PART.DRAWING_RELEASE_TYPE,
|
|
DECODE(PART.DRAWING_RELEASE_TYPE,'dev','개발','product','양산') DRAWING_RELEASE_TYPE_TITLE,
|
|
PART.PART_TYPE,
|
|
PART.EO_OBJID,
|
|
TO_CHAR(EO_ISSUE_DATE,'YYYY-MM-DD') AS EO_ISSUE_DATE,
|
|
PART.EO_NO,
|
|
PART.REV,
|
|
(SELECT COUNT(1) FROM PART_INFO WHERE OBJID != PART.OBJID AND PART_NO = PART.PART_NO AND STATUS = 'revision') REV_CNT,
|
|
PART.MATERIAL_TYPE_OBJID,
|
|
(SELECT MATERIAL_TYPE_NAME FROM MATERIAL_TYPE_MNG WHERE OBJID = PART.MATERIAL_TYPE_OBJID) MATERIAL_TYPE_NAME,
|
|
PART.DRAWING_TYPE,
|
|
PART.DRAWING_NO_OBJID,
|
|
(SELECT PART_NO FROM PART_INFO WHERE OBJID = PART.DRAWING_NO_OBJID) DRAWING_NO,
|
|
PART.MATERIAL_OBJID,
|
|
(SELECT MATERIAL_NAME FROM MATERIAL_MNG WHERE OBJID = PART.MATERIAL_OBJID) MATERIAL_NAME,
|
|
PART.PART_OPTION,
|
|
(SELECT OPTION_NAME FROM OPTION_SPEC_MNG WHERE OBJID = PART.PART_OPTION) PART_OPTION_NAME,
|
|
PART.THICKNESS,
|
|
PART.WEIGHT,
|
|
PART.APPLY_POINT_OBJID,
|
|
PART.MNG_ITEM_TYPE MNG_ITEM_TYPE_ORG,
|
|
DECODE(UPPER(PART.MNG_ITEM_TYPE),'MANAGEMENT','Y','N') MNG_ITEM_TYPE,
|
|
PART.IS_LAST,
|
|
PART.WRITER,
|
|
PART.CAVITY,
|
|
PART.REMARKS,
|
|
PART.MOLD_CLASSIFICATION,
|
|
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = PART.MOLD_CLASSIFICATION) MOLD_CLASSIFICATION_NAME,
|
|
PART.COMPANY_MOLD,
|
|
PART.COMPANY_SUP_MATERIAL,
|
|
PART.COMPANY_PLATING_PAINTING,
|
|
PART.COMPANY_ELEMENT,
|
|
PART.SPRUE,
|
|
PART.STAMP,
|
|
PART.PLATED,
|
|
TO_CHAR(PART.REGDATE,'YYYY-MM-DD') REGDATE,
|
|
PART.REGDATE REGDATE_ORG,
|
|
DECODE(UPPER(PART.STATUS),'CREATE','작성중','확정') STATUS_STR,
|
|
PART.STATUS,
|
|
<!-- 해당 파트 관리항목 중 확인 해야할 내용 Count를 가져온다. -->
|
|
(SELECT COUNT(1) FROM PART_MNG_ITEM_RECEPT WHERE TARGET_OBJID = PART.OBJID AND USER_ID = #{userId}) PART_MNG_ITEM_CNT,
|
|
(SELECT COUNT(1) FROM PART_INFO WHERE PART_NO = PART.PART_NO AND OBJID != PART.OBJID) DUPLICATE_PART_CNT
|
|
FROM PART_INFO PART
|
|
)T
|
|
WHERE T.OBJID = #{objid}
|
|
</select>
|
|
|
|
<!-- Import 시 Update 대상이 되는 파트의 정보를 가져온다. -->
|
|
<select id="getImportTargetPartInfoDetail" parameterType="map" resultType="map">
|
|
SELECT ROWNUM RNUM,
|
|
T.*
|
|
FROM
|
|
(SELECT PART.OBJID,
|
|
PART.OEM_OBJID,
|
|
PART.CAR_OBJID,
|
|
(SELECT OEM_NAME FROM OEM_MNG WHERE OBJID = PART.OEM_OBJID) OEM_NAME,
|
|
(SELECT OEM_CODE FROM OEM_MNG WHERE OBJID = PART.OEM_OBJID) OEM_CODE,
|
|
(SELECT CAR_NAME FROM CAR_MNG WHERE OBJID = PART.CAR_OBJID) CAR_NAME,
|
|
(SELECT CAR_CODE FROM CAR_MNG WHERE OBJID = PART.CAR_OBJID) CAR_CODE,
|
|
PART.PRODUCT_GROUP_OBJID,
|
|
PART.PRODUCT_OBJID,
|
|
(SELECT PRODUCT_GROUP_NAME FROM PRODUCT_GROUP_MNG WHERE OBJID = PART.PRODUCT_GROUP_OBJID) PRODUCT_GROUP_NAME,
|
|
(SELECT PRODUCT_NAME FROM PRODUCT_MNG WHERE OBJID = PART.PRODUCT_OBJID) PRODUCT_NAME,
|
|
PART.PART_NO,
|
|
PART.RH_PART_OBJID,
|
|
(SELECT PART_NO FROM PART_INFO WHERE OBJID = PART.RH_PART_OBJID) RH_PART_NO,
|
|
PART.PART_NAME,
|
|
PART.DRAWING_RELEASE_TYPE,
|
|
DECODE(PART.DRAWING_RELEASE_TYPE,'dev','개발','product','양산') DRAWING_RELEASE_TYPE_TITLE,
|
|
PART.PART_TYPE,
|
|
PART.EO_OBJID,
|
|
(SELECT EO_NO FROM EO_INFO WHERE OBJID = PART.EO_OBJID) EO_NO,
|
|
TO_CHAR((SELECT EO_ISSUE_DATE FROM EO_INFO WHERE OBJID = PART.EO_OBJID),'YYYY-MM-DD') EO_ISSUE_DATE,
|
|
PART.REV,
|
|
(SELECT COUNT(1) FROM PART_INFO WHERE OBJID != PART.OBJID AND PART_NO = PART.PART_NO AND STATUS = 'revision') REV_CNT,
|
|
PART.MATERIAL_TYPE_OBJID,
|
|
(SELECT MATERIAL_TYPE_NAME FROM MATERIAL_TYPE_MNG WHERE OBJID = PART.MATERIAL_TYPE_OBJID) MATERIAL_TYPE_NAME,
|
|
PART.DRAWING_TYPE,
|
|
PART.DRAWING_NO_OBJID,
|
|
(SELECT PART_NO FROM PART_INFO WHERE OBJID = PART.DRAWING_NO_OBJID) DRAWING_NO,
|
|
PART.MATERIAL_OBJID,
|
|
(SELECT MATERIAL_NAME FROM MATERIAL_MNG WHERE OBJID = PART.MATERIAL_OBJID) MATERIAL_NAME,
|
|
PART.PART_OPTION,
|
|
(SELECT OPTION_NAME FROM OPTION_SPEC_MNG WHERE OBJID = PART.PART_OPTION) PART_OPTION_NAME,
|
|
PART.THICKNESS,
|
|
PART.WEIGHT,
|
|
PART.APPLY_POINT_OBJID,
|
|
PART.MNG_ITEM_TYPE MNG_ITEM_TYPE_ORG,
|
|
DECODE(UPPER(PART.MNG_ITEM_TYPE),'MANAGEMENT','Y','N') MNG_ITEM_TYPE,
|
|
PART.IS_LAST,
|
|
PART.WRITER,
|
|
TO_CHAR(PART.REGDATE,'YYYY-MM-DD') REGDATE,
|
|
PART.REGDATE REGDATE_ORG,
|
|
DECODE(UPPER(PART.STATUS),'CREATE','작성중','확정') STATUS_STR,
|
|
PART.STATUS
|
|
FROM PART_INFO PART
|
|
)T
|
|
WHERE T.PART_NO = #{partNo}
|
|
<if test="status != null and !''.equals(status)">
|
|
AND T.STATUS = #{status}
|
|
</if>
|
|
AND T.REV = #{revision}
|
|
</select>
|
|
|
|
<!-- 접속한 인원의 파트 관리항목 확인여부 목록을 가져온다. -->
|
|
<select id="getPartMngItemList" parameterType="map" resultType="map">
|
|
SELECT
|
|
DOC_TYPE_NAME
|
|
,FILE_EXT
|
|
,REPLACE(FILE_PATH, '\', '\\') FILE_PATH
|
|
,OBJID
|
|
,REAL_FILE_NAME
|
|
,REGDATE
|
|
,SAVED_FILE_NAME
|
|
,STATUS
|
|
,TARGET_OBJID
|
|
,WRITER
|
|
FROM ATTACH_FILE_INFO FILE_INFO
|
|
WHERE TARGET_OBJID = #{objid}
|
|
AND UPPER(DOC_TYPE) IN ('PART_MNG_ITEM')
|
|
</select>
|
|
|
|
<!-- 파일다운로드/확인 시 merge 한다. -->
|
|
<update id="mergePartMngItemCheck" parameterType="map">
|
|
MERGE INTO PART_MNG_ITEM_RECEPT T USING DUAL ON ( T.TARGET_OBJID = #{partObjId} and T.SUB_OBJID = #{fileObjId} AND T.USER_ID = #{userId})
|
|
WHEN MATCHED THEN
|
|
UPDATE
|
|
SET
|
|
STATUS = #{status}
|
|
WHEN NOT MATCHED THEN
|
|
INSERT
|
|
(
|
|
OBJID
|
|
,TARGET_OBJID
|
|
,USER_ID
|
|
,STATUS
|
|
,SUB_OBJID
|
|
,REG_DATE
|
|
)
|
|
VALUES
|
|
(
|
|
#{newObjId}
|
|
,#{partObjId}
|
|
,#{userId}
|
|
,#{status}
|
|
,#{fileObjId}
|
|
,SYSDATE
|
|
)
|
|
</update>
|
|
|
|
<!-- 파트에 연결된 SPEC 정보를 가져온다. -->
|
|
<select id="getPartRelSpecList" parameterType="map" resultType="map">
|
|
SELECT REL.MASTER_OBJID,
|
|
REL.OBJID,
|
|
REL.REGDATE,
|
|
REL.SUB_OBJID,
|
|
REL.WRITER,
|
|
DOC_INFO.SPEC_NO,
|
|
DOC_INFO.DOC_NAME,
|
|
DOC_CATE.CATEGORY_NAME
|
|
FROM REL_PART_SPEC REL,
|
|
STANDARD_DOC_INFO DOC_INFO,
|
|
STANDARD_DOC_CATEGORY DOC_CATE
|
|
WHERE DOC_INFO.OBJID = REL.SUB_OBJID
|
|
AND DOC_INFO.CATEGORY_OBJID = DOC_CATE.OBJID
|
|
AND REL.MASTER_OBJID = #{objid}
|
|
</select>
|
|
|
|
<select id="getSPECConnectedList" parameterType="map" resultType="map">
|
|
SELECT
|
|
LEAF
|
|
,AFTER_SPEC_NO AS SPEC_NO
|
|
,SUB_OBJID
|
|
,DOC_NAME
|
|
FROM (
|
|
SELECT
|
|
LEVEL
|
|
,CONNECT_BY_ISLEAF LEAF
|
|
,SPEC_LINK.OBJID
|
|
,SPEC_LINK.CATEGORY_OBJID
|
|
,SPEC_LINK.AFTER_SPEC_NO
|
|
,(SELECT OBJID FROM STANDARD_DOC_INFO WHERE CATEGORY_OBJID = SPEC_LINK.CATEGORY_OBJID AND SPEC_NO = SPEC_LINK.AFTER_SPEC_NO) SUB_OBJID
|
|
,(SELECT DOC_NAME FROM STANDARD_DOC_INFO WHERE CATEGORY_OBJID = SPEC_LINK.CATEGORY_OBJID AND SPEC_NO = SPEC_LINK.AFTER_SPEC_NO) DOC_NAME
|
|
,SPEC_LINK.BEFORE_SPEC_NO
|
|
FROM SPEC_LINK_INFO SPEC_LINK
|
|
START WITH SPEC_LINK.BEFORE_SPEC_NO = (SELECT (SELECT SPEC_NO FROM STANDARD_DOC_INFO WHERE OBJID = REL.SUB_OBJID) AS SPEC_NO FROM REL_PART_SPEC REL WHERE MASTER_OBJID = #{objid} AND SUB_OBJID = #{specObjId})
|
|
AND SPEC_LINK.CATEGORY_OBJID = (SELECT (SELECT CATEGORY_OBJID FROM STANDARD_DOC_INFO WHERE OBJID = REL.SUB_OBJID) AS SPEC_CATEGORY_OBJID FROM REL_PART_SPEC REL WHERE MASTER_OBJID = #{objid} AND SUB_OBJID = #{specObjId})
|
|
CONNECT BY PRIOR SPEC_LINK.AFTER_SPEC_NO = SPEC_LINK.BEFORE_SPEC_NO
|
|
)SPEC WHERE LEAF = 1
|
|
</select>
|
|
|
|
<!-- 파트에 기변항목 정보를 가져온다. -->
|
|
<select id="getPartRelChangeItemList" parameterType="map" resultType="map">
|
|
SELECT ITEM_NAME,
|
|
MASTER_OBJID,
|
|
OBJID,
|
|
REGDATE,
|
|
WRITER
|
|
FROM REL_PART_CHANGE_ITEM
|
|
WHERE MASTER_OBJID = #{objid}
|
|
</select>
|
|
|
|
<!-- 파트에 생산구분 정보를 가져온다. -->
|
|
<select id="getPartProductCategoryItemList" parameterType="map" resultType="map">
|
|
SELECT COMM_CODE,
|
|
PART_OBJID,
|
|
OBJID,
|
|
REGDATE,
|
|
PARENT_COMM_CODE
|
|
|
|
FROM part_product_category where PART_OBJID = #{objid}
|
|
</select>
|
|
|
|
<!-- 파트와 연결된 SPEC을 삭제한다. -->
|
|
<delete id="deletePartRelSpec" parameterType="map">
|
|
DELETE REL_PART_SPEC WHERE MASTER_OBJID = #{objid}
|
|
</delete>
|
|
|
|
<!-- PART 삭제 -->
|
|
<delete id="deleteRealPart" parameterType="map">
|
|
<!-- DELETE PART_MGMT WHERE PART_MGMT_OBJID = #{partObjid} -->
|
|
delete from part_mgmt where part_mgmt_objid in(with recursive t1 ( part_mgmt_objid
|
|
,part_mgmt_parent_objid
|
|
,project_mgmt_objid
|
|
,part_name
|
|
,part_no
|
|
,parent_part_no
|
|
,spec_cd
|
|
,mfa_cd
|
|
,qty
|
|
,process_cd
|
|
,sort_cd
|
|
,sup_cd
|
|
,rev
|
|
,is_last
|
|
,rel_date
|
|
,reg_date
|
|
,reg_user_id
|
|
,change_cd
|
|
,status
|
|
,del_yn
|
|
,rel_status
|
|
,price
|
|
,sup_price
|
|
, lev,path,part_array,cycle) as (
|
|
SELECT t2.*,
|
|
1 AS lev,
|
|
t2.part_no::text,
|
|
ARRAY[t2.part_no] as part_array,
|
|
FALSE as CYCLE
|
|
from part_mgmt AS t2
|
|
where part_no = parent_part_no
|
|
union all
|
|
SELECT t3.*,
|
|
lev+1,
|
|
PATH||t3.part_no::text,
|
|
t1.part_array,
|
|
t3.part_no = ANY(part_array) as CYCLE
|
|
from part_mgmt AS t3, t1
|
|
WHERE t3.parent_part_no = t1.part_no
|
|
AND t3.parent_part_no != t3.part_no
|
|
AND t1.part_mgmt_objid = #{partObjid}::integer
|
|
and NOT CYCLE -- NOCYCLE 지정
|
|
)
|
|
SELECT part_mgmt_objid
|
|
from t1
|
|
WHERE t1.STATUS='write'
|
|
)
|
|
</delete>
|
|
|
|
|
|
<!-- 파트정보와 SPEC 정보를 연결한다. -->
|
|
<update id="mergePartRelSpec" parameterType="map">
|
|
MERGE INTO REL_PART_SPEC T USING DUAL ON ( T.MASTER_OBJID = #{objid} AND T.SUB_OBJID = #{specObjid})
|
|
WHEN NOT MATCHED THEN
|
|
INSERT
|
|
(
|
|
OBJID,
|
|
MASTER_OBJID,
|
|
SUB_OBJID,
|
|
WRITER,
|
|
REGDATE
|
|
)
|
|
VALUES
|
|
(
|
|
#{relObjid},
|
|
#{objid},
|
|
#{specObjid},
|
|
#{writer},
|
|
SYSDATE
|
|
)
|
|
</update>
|
|
|
|
<!-- 파트에 연결된 첨부파일을 삭제한다. -->
|
|
<delete id="deletePartRelAttachFile" parameterType="map">
|
|
DELETE ATTACH_FILE_INFO WHERE TARGET_OBJID = #{objid} AND DOC_TYPE = #{docType}
|
|
</delete>
|
|
|
|
<!-- 기변항목과 part정보를 삭제한다. -->
|
|
<delete id="deletePartRelChangeItem" parameterType="map">
|
|
DELETE REL_PART_CHANGE_ITEM WHERE MASTER_OBJID = #{objid}
|
|
</delete>
|
|
|
|
<!-- 생산구분과 part정보를 삭제한다. -->
|
|
<delete id="deletePartProductCategoryItem" parameterType="map">
|
|
DELETE part_product_category WHERE PART_OBJID = #{objid}
|
|
</delete>
|
|
|
|
<!-- 파트정보와 기변항목을 연결한다. -->
|
|
<update id="mergePartRelChangeItem" parameterType="map">
|
|
MERGE INTO REL_PART_CHANGE_ITEM T USING DUAL ON ( T.MASTER_OBJID = #{objid} AND ITEM_NAME = #{changeItem})
|
|
WHEN NOT MATCHED THEN
|
|
INSERT
|
|
(
|
|
OBJID,
|
|
MASTER_OBJID,
|
|
ITEM_NAME,
|
|
WRITER,
|
|
REGDATE
|
|
)
|
|
VALUES
|
|
(
|
|
#{relObjid},
|
|
#{objid},
|
|
#{changeItem},
|
|
#{writer},
|
|
SYSDATE
|
|
)
|
|
</update>
|
|
|
|
<!-- 파트정보와 생산구분을 연결한다. -->
|
|
<update id="mergePartProductCategoryItem" parameterType="map">
|
|
MERGE INTO part_product_category T USING DUAL ON ( T.PART_OBJID = #{objid} AND COMM_CODE = #{changeItem})
|
|
WHEN NOT MATCHED THEN
|
|
INSERT
|
|
(
|
|
OBJID,
|
|
PART_OBJID,
|
|
COMM_CODE,
|
|
REGDATE,
|
|
PARENT_COMM_CODE
|
|
)
|
|
VALUES
|
|
(
|
|
#{relObjid},
|
|
#{objid},
|
|
#{changeItem},
|
|
SYSDATE,
|
|
#{parent_comm_code}
|
|
)
|
|
</update>
|
|
|
|
<!-- Part와 동일한 품번을 가지는 Part 목록을 가져와 IS_LAST를 지정한다. -->
|
|
<select id="getChangePartIsLast" parameterType="map" resultType="map">
|
|
SELECT
|
|
T.*
|
|
FROM
|
|
(SELECT PART.OBJID,
|
|
PART.OEM_OBJID,
|
|
PART.CAR_OBJID,
|
|
(SELECT OEM_NAME
|
|
FROM OEM_MNG
|
|
WHERE OBJID = PART.OEM_OBJID
|
|
) OEM_NAME,
|
|
(SELECT CAR_NAME
|
|
FROM CAR_MNG
|
|
WHERE OBJID = PART.CAR_OBJID
|
|
) CAR_NAME,
|
|
PART.PRODUCT_GROUP_OBJID,
|
|
PART.PRODUCT_OBJID,
|
|
(SELECT PRODUCT_GROUP_NAME
|
|
FROM PRODUCT_GROUP_MNG
|
|
WHERE OBJID = PART.PRODUCT_GROUP_OBJID
|
|
) PRODUCT_GROUP_NAME,
|
|
(SELECT PRODUCT_NAME
|
|
FROM PRODUCT_MNG
|
|
WHERE OBJID = PART.PRODUCT_OBJID
|
|
) PRODUCT_NAME,
|
|
PART.PART_NO,
|
|
PART.RH_PART_OBJID,
|
|
(SELECT PART_NO FROM PART_INFO WHERE OBJID = PART.RH_PART_OBJID) RH_PART_NO,
|
|
PART.PART_NAME,
|
|
PART.DRAWING_RELEASE_TYPE,
|
|
PART.PART_TYPE,
|
|
PART.EO_OBJID,
|
|
(SELECT EO_NO FROM EO_INFO WHERE OBJID = PART.EO_OBJID) EO_NO,
|
|
TO_CHAR((SELECT EO_ISSUE_DATE FROM EO_INFO WHERE OBJID = PART.EO_OBJID),'YYYY-MM-DD') EO_ISSUE_DATE,
|
|
PART.REV,
|
|
PART.MATERIAL_TYPE_OBJID,
|
|
(SELECT MATERIAL_TYPE_NAME
|
|
FROM MATERIAL_TYPE_MNG
|
|
WHERE OBJID = PART.MATERIAL_TYPE_OBJID
|
|
) MATERIAL_TYPE_NAME,
|
|
PART.DRAWING_TYPE,
|
|
PART.MATERIAL_OBJID,
|
|
(SELECT MATERIAL_NAME
|
|
FROM MATERIAL_MNG
|
|
WHERE OBJID = PART.MATERIAL_OBJID
|
|
) MATERIAL_NAME,
|
|
PART.PART_OPTION,
|
|
(SELECT OPTION_NAME
|
|
FROM OPTION_SPEC_MNG
|
|
WHERE OBJID = PART.PART_OPTION
|
|
) PART_OPTION_NAME,
|
|
PART.THICKNESS,
|
|
PART.WEIGHT,
|
|
PART.APPLY_POINT_OBJID,
|
|
PART.MNG_ITEM_TYPE MNG_ITEM_TYPE_ORG,
|
|
DECODE(UPPER(PART.MNG_ITEM_TYPE),'MANAGEMENT','Y','N') MNG_ITEM_TYPE,
|
|
DECODE(PART.IS_LAST,'1','Y','0','N') IS_LAST_TITLE,
|
|
PART.IS_LAST,
|
|
PART.WRITER,
|
|
TO_CHAR(PART.REGDATE,'YYYY-MM-DD') REGDATE,
|
|
PART.REGDATE REGDATE_ORG,
|
|
DECODE(UPPER(PART.STATUS),'CREATE','작성중','확정') STATUS_STR,
|
|
PART.STATUS
|
|
FROM PART_INFO PART
|
|
)T
|
|
WHERE T.PART_NO = (SELECT PART_NO FROM PART_INFO WHERE OBJID = #{objid})
|
|
</select>
|
|
|
|
<!-- oldObjId에 해당하는 파트 정보를 통해 Revision을 생성한다. -->
|
|
<insert id="createPartRevision" parameterType="map">
|
|
INSERT
|
|
INTO PART_INFO
|
|
(
|
|
OBJID,
|
|
<!-- APPLY_POINT_OBJID, -->
|
|
CAR_OBJID,
|
|
DRAWING_NO_OBJID,
|
|
DRAWING_RELEASE_TYPE,
|
|
DRAWING_TYPE,
|
|
IS_LAST,
|
|
MATERIAL_OBJID,
|
|
MATERIAL_TYPE_OBJID,
|
|
MNG_ITEM_TYPE,
|
|
OEM_OBJID,
|
|
PART_NAME,
|
|
PART_NO,
|
|
PART_OPTION,
|
|
PART_TYPE,
|
|
PRODUCT_GROUP_OBJID,
|
|
PRODUCT_OBJID,
|
|
REGDATE,
|
|
RH_PART_OBJID,
|
|
STATUS,
|
|
THICKNESS,
|
|
WEIGHT,
|
|
WRITER
|
|
)
|
|
SELECT
|
|
#{newObjId},
|
|
<!-- APPLY_POINT_OBJID, -->
|
|
CAR_OBJID,
|
|
DRAWING_NO_OBJID,
|
|
DRAWING_RELEASE_TYPE,
|
|
DRAWING_TYPE,
|
|
'0',
|
|
MATERIAL_OBJID,
|
|
MATERIAL_TYPE_OBJID,
|
|
MNG_ITEM_TYPE,
|
|
OEM_OBJID,
|
|
PART_NAME,
|
|
PART_NO,
|
|
PART_OPTION,
|
|
PART_TYPE,
|
|
PRODUCT_GROUP_OBJID,
|
|
PRODUCT_OBJID,
|
|
SYSDATE,
|
|
RH_PART_OBJID,
|
|
#{status},
|
|
THICKNESS,
|
|
WEIGHT,
|
|
#{writer}
|
|
FROM PART_INFO
|
|
WHERE OBJID = #{oldObjId}
|
|
|
|
</insert>
|
|
|
|
|
|
<!-- oldObjId에 해당하는 파트 정보를 통해 Revision을 생성한다. -->
|
|
<insert id="insertNewPartRevision" parameterType="map">
|
|
INSERT
|
|
INTO PART_MGMT
|
|
(
|
|
PART_MGMT_OBJID
|
|
,PART_MGMT_PARENT_OBJID
|
|
,PROJECT_MGMT_OBJID
|
|
,PART_NAME
|
|
,PART_NO
|
|
,PARENT_PART_NO
|
|
,SPEC_CD
|
|
,MFA_CD
|
|
,QTY
|
|
,PROCESS_CD
|
|
,SORT_CD
|
|
,SUP_CD
|
|
,REV
|
|
,IS_LAST
|
|
,REL_DATE
|
|
,REG_DATE
|
|
,REG_USER_ID
|
|
,CHANGE_CD
|
|
,STATUS
|
|
,DEL_YN
|
|
,REL_STATUS
|
|
,SIZED
|
|
,MATERIAL
|
|
)
|
|
SELECT
|
|
#{objId}::integer
|
|
,PART_MGMT_PARENT_OBJID
|
|
,PROJECT_MGMT_OBJID
|
|
,PART_NAME
|
|
,PART_NO
|
|
,PARENT_PART_NO
|
|
,SPEC_CD
|
|
,MFA_CD
|
|
,QTY
|
|
,PROCESS_CD
|
|
,SORT_CD
|
|
,SUP_CD
|
|
,#{rev}
|
|
,'0'
|
|
,null
|
|
,now()
|
|
,REG_USER_ID
|
|
,#{change_cd}
|
|
,'write'
|
|
,DEL_YN
|
|
,'PRTS00100'
|
|
,SIZED
|
|
,MATERIAL
|
|
FROM PART_MGMT
|
|
WHERE PART_MGMT_OBJID = #{part_mgmt_objid}::integer
|
|
|
|
</insert>
|
|
|
|
|
|
<!-- 첨부한 파일 목록을 가져온다. -->
|
|
<select id="getUploadFileList" resultType="map" parameterType="map">
|
|
SELECT * FROM (
|
|
SELECT OBJID
|
|
, TARGET_OBJID
|
|
, SAVED_FILE_NAME
|
|
, REAL_FILE_NAME
|
|
, REPLACE(REAL_FILE_NAME,'-','') REMOVE_CHAR_REAL_FILE_NAME
|
|
, DOC_TYPE
|
|
, DOC_TYPE_NAME
|
|
, FILE_SIZE
|
|
, FILE_EXT
|
|
, UPPER(FILE_EXT) UPPER_FILE_EXT
|
|
, REPLACE(FILE_PATH, '\', '\\') AS FILE_PATH
|
|
, WRITER
|
|
, TO_CHAR(REGDATE, 'YYYY-MM-DD') AS REGDATE
|
|
, REGDATE AS REGDATE_ORG
|
|
, STATUS
|
|
FROM ATTACH_FILE_INFO
|
|
WHERE 1=1
|
|
AND TARGET_OBJID = ${targetObjId}
|
|
AND STATUS = 'Active'
|
|
<if test="docType != null and !''.equals(docType)">
|
|
AND DOC_TYPE = #{docType}
|
|
</if>
|
|
<!-- 일괄다운로드시 여러 DOC_TYPE 조회 시 사용 -->
|
|
<if test="docTypeList != null and docTypeList.size != 0">
|
|
AND DOC_TYPE IN
|
|
<foreach collection="docTypeList" item="docType" index="index" separator="," open="(" close=")">
|
|
#{docType}
|
|
</foreach>
|
|
</if>
|
|
)WHERE 1=1
|
|
<if test="realFileName != null and !''.equals(realFileName)">
|
|
AND REMOVE_CHAR_REAL_FILE_NAME LIKE '%${realFileName}%'
|
|
</if>
|
|
ORDER BY REGDATE_ORG DESC
|
|
</select>
|
|
|
|
<!-- 첨부한 파일의 targetObjId를 변경한다. -->
|
|
<update id="updatePartImportAttachFile" parameterType="map">
|
|
UPDATE ATTACH_FILE_INFO SET TARGET_OBJID = #{partObjId}, DOC_TYPE = #{docType}, DOC_TYPE_NAME = #{docTypeName} WHERE OBJID = #{fileObjId}
|
|
</update>
|
|
|
|
<!-- 기존 파트에 첨부파일 연결여부를 확인하여 이미 연결되어 있는 경우 삭제한다. -->
|
|
<delete id="deletePartImportAttachFile" parameterType="map">
|
|
DELETE ATTACH_FILE_INFO WHERE TARGET_OBJID = #{partObjId} AND DOC_TYPE = #{docType}
|
|
</delete>
|
|
|
|
<!-- **************************************************************************** -->
|
|
<!-- //구조등록 좌측 트리메뉴 -->
|
|
<select id="getBOMTreeList" parameterType="map" resultType="map">
|
|
<!--
|
|
|
|
SELECT LEVEL
|
|
, A.PART_NO
|
|
, LPAD(' ', 3*(LEVEL-1))||A.PART_NO LPAD_PART_NO
|
|
, (SELECT PART_NAME FROM PART_INFO WHERE PART_NO = A.PART_NO AND IS_LAST = 1) AS PART_NAME
|
|
, A.PARENT_PART_NO
|
|
, A.QTY
|
|
, (SELECT COUNT(*) FROM PART_BOM_QTY WHERE PARENT_PART_NO = A.PART_NO) AS SUB_PART_CNT
|
|
, (SELECT WM_CONCAT(DISTINCT PART_NO) FROM PART_BOM_QTY WHERE BOM_REPORT_OBJID = A.BOM_REPORT_OBJID START WITH PART_NO = A.PART_NO CONNECT BY PRIOR PARENT_PART_NO = PART_NO AND PRIOR BOM_REPORT_OBJID = A.BOM_REPORT_OBJID) AS PARENT_PARTS
|
|
FROM PART_BOM_QTY A
|
|
WHERE 1=1
|
|
AND BOM_REPORT_OBJID = #{bomReportObjId}
|
|
START WITH PARENT_PART_NO IS NULL
|
|
CONNECT BY NOCYCLE PRIOR PART_NO = PARENT_PART_NO AND PRIOR BOM_REPORT_OBJID = BOM_REPORT_OBJID
|
|
-->
|
|
<!-- SELECT LEVEL
|
|
, A.OBJID
|
|
, A.PART_NO
|
|
, LPAD(' ',(LEVEL-1))||A.PART_NO LPAD_PART_NO
|
|
, (SELECT PART_NAME FROM PART_INFO WHERE PART_NO = A.PART_NO AND IS_LAST = 1) AS PART_NAME
|
|
, A.PARENT_PART_NO
|
|
, A.QTY
|
|
, (SELECT COUNT(*) FROM PART_BOM_QTY WHERE PARENT_PART_NO = A.PART_NO) AS SUB_PART_CNT
|
|
, (SELECT WM_CONCAT(DISTINCT PART_NO) FROM PART_BOM_QTY WHERE BOM_REPORT_OBJID = A.BOM_REPORT_OBJID START WITH PART_NO = A.PART_NO CONNECT BY PRIOR PARENT_PART_NO = PART_NO AND PRIOR BOM_REPORT_OBJID = A.BOM_REPORT_OBJID) AS PARENT_PARTS
|
|
FROM PART_BOM_QTY A
|
|
WHERE 1=1
|
|
START WITH PARENT_PART_NO IS NULL AND BOM_REPORT_OBJID = #{bomReportObjId}
|
|
CONNECT BY NOCYCLE PRIOR PART_NO = PARENT_PART_NO AND PRIOR BOM_REPORT_OBJID = BOM_REPORT_OBJID -->
|
|
|
|
|
|
WITH RECURSIVE VIEW_BOM(
|
|
OBJID,
|
|
PART_NO,
|
|
BOM_REPORT_OBJID,
|
|
LEV,
|
|
PATH,
|
|
CYCLE
|
|
) AS (
|
|
SELECT
|
|
A.OBJID,
|
|
A.PART_NO,
|
|
A.BOM_REPORT_OBJID,
|
|
1,
|
|
ARRAY [A.PART_NO],
|
|
FALSE
|
|
FROM
|
|
PART_BOM_QTY A
|
|
WHERE 1=1
|
|
AND A.PARENT_PART_NO IS NULL AND A.BOM_REPORT_OBJID = #{bomReportObjId}::NUMERIC
|
|
|
|
UNION ALL
|
|
|
|
SELECT
|
|
B.OBJID,
|
|
B.PART_NO,
|
|
B.BOM_REPORT_OBJID,
|
|
LEV + 1,
|
|
PATH,
|
|
B.PARENT_PART_NO = ANY(PATH)
|
|
FROM
|
|
PART_BOM_QTY B
|
|
JOIN
|
|
VIEW_BOM
|
|
ON B.PARENT_PART_NO = VIEW_BOM.PART_NO
|
|
AND VIEW_BOM.BOM_REPORT_OBJID = B.BOM_REPORT_OBJID
|
|
)
|
|
SELECT
|
|
*
|
|
FROM VIEW_BOM
|
|
WHERE 1=1
|
|
|
|
ORDER BY
|
|
PATH
|
|
|
|
</select>
|
|
<!-- //BOM 구조등록 -->
|
|
<insert id="relatePartInfo" parameterType="map">
|
|
INSERT INTO PART_BOM_QTY(BOM_REPORT_OBJID, OBJID, PARENT_OBJID, PARENT_PART_NO, PART_NO, QTY, REGION_OBJID, REGDATE) VALUES (
|
|
#{bomReportObjId}
|
|
, #{partObjId}
|
|
, #{parentObjId}
|
|
, #{parentPartNo}
|
|
, #{partNo}
|
|
, #{qty}
|
|
, #{regionObjId}
|
|
, SYSDATE
|
|
)
|
|
</insert>
|
|
<!-- //BOM_LEVEL 구조 레벨 등록 -->
|
|
<insert id="relatePartLevelInfo" parameterType="map">
|
|
INSERT INTO PART_BOM_LEVEL(BOM_REPORT_OBJID, BOM_LAVEL, OBJID, PART_BOM_QTY_OBJID, REGDATE) VALUES (
|
|
#{bom_report_objid}
|
|
, #{bom_lavel}
|
|
, #{objid}
|
|
, #{part_bom_qty_objid}
|
|
, SYSDATE
|
|
)
|
|
</insert>
|
|
<!-- //BOM 구조삭제 -->
|
|
<delete id="deletePartRelateInfo" parameterType="map">
|
|
DELETE FROM PART_BOM_QTY
|
|
WHERE OBJID IN (
|
|
SELECT OBJID
|
|
FROM PART_BOM_QTY
|
|
WHERE 1=1
|
|
START WITH OBJID = #{leftPartObjId}
|
|
CONNECT BY PRIOR OBJID = PARENT_OBJID
|
|
)
|
|
|
|
<!-- 이상한 쿼리 -->
|
|
<!-- DELETE FROM PART_BOM_QTY
|
|
WHERE 1=1
|
|
AND BOM_REPORT_OBJID = #{objId}
|
|
<choose>
|
|
<when test="leftParentPartNo == null or ''.equals(leftParentPartNo)">
|
|
AND PARENT_PART_NO IS NULL
|
|
</when>
|
|
<otherwise>
|
|
AND PARENT_PART_NO = #{leftParentPartNo}
|
|
</otherwise>
|
|
</choose>
|
|
AND OBJID IN (
|
|
SELECT OBJID
|
|
FROM PART_BOM_QTY
|
|
WHERE 1=1
|
|
START WITH PART_NO = #{leftPartNo}
|
|
CONNECT BY PRIOR PART_NO = PARENT_PART_NO
|
|
) -->
|
|
</delete>
|
|
<!-- //BOM 구조삭제 후, DUMMY DATA 삭제 -->
|
|
<delete id="deleteDummyAfterDeletePartRelatedInfo" parameterType="map">
|
|
DELETE
|
|
FROM PART_BOM_QTY
|
|
WHERE 1=1
|
|
AND BOM_REPORT_OBJID = #{objId}
|
|
AND OBJID NOT IN (
|
|
SELECT OBJID
|
|
FROM PART_BOM_QTY
|
|
WHERE 1=1
|
|
START WITH PARENT_PART_NO IS NULL
|
|
CONNECT BY NOCYCLE PRIOR PART_NO = PARENT_PART_NO AND PRIOR BOM_REPORT_OBJID = BOM_REPORT_OBJID
|
|
)
|
|
</delete>
|
|
<!-- //구조등록 목록조회 -->
|
|
<select id="getBOMStandardStructureList" parameterType="map" resultType="map">
|
|
SELECT ROW_NUMBER() OVER(ORDER BY REGDATE_ORG DESC) AS RNUM, AA.*
|
|
FROM (
|
|
SELECT A.OBJID
|
|
, A.CAR_OBJID
|
|
, (SELECT CAR_CODE FROM CAR_MNG WHERE OBJID = A.CAR_OBJID) AS CAR_CODE
|
|
, (SELECT CAR_NAME FROM CAR_MNG WHERE OBJID = A.CAR_OBJID) AS CAR_NAME
|
|
, A.OEM_OBJID
|
|
, (SELECT OEM_NAME FROM OEM_MNG WHERE OBJID = A.OEM_OBJID) AS OEM_NAME
|
|
, (SELECT OEM_CODE FROM OEM_MNG WHERE OBJID = A.OEM_OBJID) AS OEM_CODE
|
|
, A.PRODUCT_OBJID
|
|
, (SELECT PRODUCT_GROUP_OBJID FROM PRODUCT_MNG WHERE OBJID = A.PRODUCT_OBJID) AS PRODUCT_GROUP_OBJID
|
|
, (SELECT PRODUCT_GROUP_NAME FROM PRODUCT_GROUP_MNG WHERE OBJID = (SELECT PRODUCT_GROUP_OBJID FROM PRODUCT_MNG WHERE OBJID = A.PRODUCT_OBJID)) AS PRODUCT_GROUP_NAME
|
|
, (SELECT PRODUCT_NAME FROM PRODUCT_MNG WHERE OBJID = A.PRODUCT_OBJID) AS PRODUCT_NAME
|
|
, A.REGION_OBJID
|
|
<!-- , (SELECT REGION_NAME FROM REGION_MNG WHERE OBJID = A.REGION_OBJID) AS REGION_NAME -->
|
|
, '' AS REGION_NAME
|
|
, A.WRITER
|
|
, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = A.WRITER) AS DEPT_NAME
|
|
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = A.WRITER) AS USER_NAME
|
|
, REGDATE AS REGDATE_ORG
|
|
, TO_CHAR(REGDATE, 'YYYY-MM-DD') AS REGDATE
|
|
FROM PART_BOM_REPORT A
|
|
WHERE 1=1
|
|
) AA
|
|
WHERE 1=1
|
|
<!-- <if test="PAGE_END != null and PAGE_END != '' and actionType != 'excel'">
|
|
<![CDATA[ AND RNUM <= #{PAGE_END} ]]>
|
|
</if>
|
|
<if test="PAGE_START != null and PAGE_START != '' and actionType != 'excel'">
|
|
<![CDATA[ AND RNUM >= #{PAGE_START} ]]>
|
|
</if>
|
|
-->
|
|
<if test="search_oemObjId != null and !''.equals(search_oemObjId)">
|
|
AND OEM_OBJID = #{search_oemObjId}
|
|
</if>
|
|
<if test="search_carTypeObjId != null and !''.equals(search_carTypeObjId)">
|
|
AND CAR_OBJID = #{search_carTypeObjId}
|
|
</if>
|
|
<if test="search_productGroupObjId != null and !''.equals(search_productGroupObjId)">
|
|
AND PRODUCT_GROUP_OBJID = #{search_productGroupObjId}
|
|
</if>
|
|
<if test="search_productObjId != null and !''.equals(search_productObjId)">
|
|
AND PRODUCT_OBJID = #{search_productObjId}
|
|
</if>
|
|
<if test="search_regionObjId != null and !''.equals(search_regionObjId)">
|
|
AND REGION_OBJID = #{search_regionObjId}
|
|
</if>
|
|
|
|
ORDER BY REGDATE_ORG DESC
|
|
|
|
</select>
|
|
|
|
<select id="getBOMStandardStructureListCnt" parameterType="map" resultType="map">
|
|
SELECT CEIL(TOTAL_CNT/#{COUNT_PER_PAGE}) MAX_PAGE_SIZE, TOTAL_CNT
|
|
FROM (
|
|
SELECT COUNT(1) TOTAL_CNT
|
|
FROM (
|
|
SELECT A.OBJID
|
|
, A.CAR_OBJID
|
|
, (SELECT CAR_CODE FROM CAR_MNG WHERE OBJID = A.CAR_OBJID) AS CAR_CODE
|
|
, (SELECT CAR_NAME FROM CAR_MNG WHERE OBJID = A.CAR_OBJID) AS CAR_NAME
|
|
, A.OEM_OBJID
|
|
, (SELECT OEM_NAME FROM OEM_MNG WHERE OBJID = A.OEM_OBJID) AS OEM_NAME
|
|
, (SELECT OEM_CODE FROM OEM_MNG WHERE OBJID = A.OEM_OBJID) AS OEM_CODE
|
|
, A.PRODUCT_OBJID
|
|
, (SELECT PRODUCT_GROUP_OBJID FROM PRODUCT_MNG WHERE OBJID = A.PRODUCT_OBJID) AS PRODUCT_GROUP_OBJID
|
|
, (SELECT PRODUCT_GROUP_NAME FROM PRODUCT_GROUP_MNG WHERE OBJID = (SELECT PRODUCT_GROUP_OBJID FROM PRODUCT_MNG WHERE OBJID = A.PRODUCT_OBJID)) AS PRODUCT_GROUP_NAME
|
|
, (SELECT PRODUCT_NAME FROM PRODUCT_MNG WHERE OBJID = A.PRODUCT_OBJID) AS PRODUCT_NAME
|
|
, A.REGION_OBJID
|
|
<!-- , (SELECT REGION_NAME FROM REGION_MNG WHERE OBJID = A.REGION_OBJID) AS REGION_NAME -->
|
|
, '' AS REGION_NAME
|
|
, A.WRITER
|
|
, (SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = A.WRITER) AS DEPT_NAME
|
|
, (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = A.WRITER) AS USER_NAME
|
|
, REGDATE AS REGDATE_ORG
|
|
, TO_CHAR(REGDATE, 'YYYY-MM-DD') AS REGDATE
|
|
FROM PART_BOM_REPORT A
|
|
WHERE 1=1
|
|
)
|
|
WHERE 1=1
|
|
<if test="search_oemObjId != null and !''.equals(search_oemObjId)">
|
|
AND OEM_OBJID = #{search_oemObjId}
|
|
</if>
|
|
<if test="search_carTypeObjId != null and !''.equals(search_carTypeObjId)">
|
|
AND CAR_OBJID = #{search_carTypeObjId}
|
|
</if>
|
|
<if test="search_productGroupObjId != null and !''.equals(search_productGroupObjId)">
|
|
AND PRODUCT_GROUP_OBJID = #{search_productGroupObjId}
|
|
</if>
|
|
<if test="search_productObjId != null and !''.equals(search_productObjId)">
|
|
AND PRODUCT_OBJID = #{search_productObjId}
|
|
</if>
|
|
<if test="search_regionObjId != null and !''.equals(search_regionObjId)">
|
|
AND REGION_OBJID = #{search_regionObjId}
|
|
</if>
|
|
)
|
|
WHERE 1=1
|
|
</select>
|
|
<!-- //1레벨에 같은 part no가 있는지 체크 -->
|
|
<select id="getSameTopPartNoCnt" parameterType="map" resultType="map">
|
|
SELECT COUNT(*) AS CNT
|
|
FROM PART_BOM_QTY
|
|
WHERE 1=1
|
|
AND PARENT_PART_NO IS NULL
|
|
AND BOM_REPORT_OBJID = #{objId}
|
|
AND PART_NO IN <foreach item="item" index="index" collection="rightCheckedArr" open="(" separator="," close=")">#{item}</foreach>
|
|
</select>
|
|
<!-- //qty 수량 조정 -->
|
|
<update id="structureQtySave" parameterType="map">
|
|
UPDATE PART_BOM_QTY SET QTY = #{qty} WHERE PART_NO = #{partNo}
|
|
<choose>
|
|
<when test="parentPartNo != null and !''.equals(parentPartNo)">
|
|
AND PARENT_PART_NO = #{parentPartNo}
|
|
</when>
|
|
<otherwise>
|
|
AND PARENT_PART_NO IS NULL
|
|
AND BOM_REPORT_OBJID = #{bomReportObjId}
|
|
</otherwise>
|
|
</choose>
|
|
</update>
|
|
|
|
<!-- //구조등록 Excel Import시 임시 테이블에 값 등록 -->
|
|
<insert id="insertStructureTempExcelImportData" parameterType="map">
|
|
INSERT INTO STRUCTURE_TEMP_XLS_IMPORT_DATA (
|
|
TARGET_OBJID
|
|
, NO
|
|
, PARENT_PART_NO
|
|
, PART_NO
|
|
, QTY
|
|
, REGDATE
|
|
, MSG
|
|
, OBJID
|
|
) VALUES (
|
|
#{targetObjId}
|
|
, #{no}
|
|
, #{parentPartNo}
|
|
, #{partNo}
|
|
, #{qty}
|
|
, SYSDATE
|
|
, #{msg}
|
|
, #{objId}
|
|
)
|
|
</insert>
|
|
|
|
<!-- //구조등록 Excel Import 테이블 값 조회 -->
|
|
<select id="selectStructureTempExcelImportData" resultType="map" parameterType="map">
|
|
SELECT A.TARGET_OBJID
|
|
, A.NO
|
|
, A.PARENT_PART_NO
|
|
, A.PART_NO
|
|
, A.QTY
|
|
, A.MSG
|
|
, (SELECT COUNT(*) FROM PART_INFO WHERE TRIM(PART_NO) = TRIM(A.PARENT_PART_NO) AND UPPER(STATUS) = UPPER('COMPLETE')) AS PARENT_PART_COMPLETE_CNT
|
|
, (SELECT COUNT(*) FROM PART_INFO WHERE TRIM(PART_NO) = TRIM(A.PART_NO) AND UPPER(STATUS) = UPPER('COMPLETE')) AS PART_COMPLETE_CNT
|
|
, (SELECT WM_CONCAT(DISTINCT PART_NO) FROM STRUCTURE_TEMP_XLS_IMPORT_DATA WHERE TARGET_OBJID = A.TARGET_OBJID AND PART_NO != A.PART_NO START WITH PART_NO = A.PART_NO CONNECT BY NOCYCLE PRIOR PARENT_PART_NO = PART_NO AND PRIOR TARGET_OBJID = A.TARGET_OBJID) AS PARENT_PARTS
|
|
, (SELECT COUNT(*) FROM STRUCTURE_TEMP_XLS_IMPORT_DATA WHERE TARGET_OBJID = A.TARGET_OBJID AND PARENT_PART_NO IS NULL AND PART_NO = A.PART_NO) AS TOP_LEVEL_PART_CNT
|
|
FROM STRUCTURE_TEMP_XLS_IMPORT_DATA A
|
|
WHERE 1=1
|
|
AND TARGET_OBJID = #{targetObjId}
|
|
ORDER BY TO_NUMBER(NO) ASC
|
|
</select>
|
|
|
|
<!-- //구조등록 Excel Import 테이블 초기화 -->
|
|
<delete id="initializeStructureTempExcelImportData" parameterType="map">
|
|
DELETE FROM STRUCTURE_TEMP_XLS_IMPORT_DATA WHERE TARGET_OBJID = #{targetObjId}
|
|
</delete>
|
|
|
|
<!-- //해당 part가 확정인지 확인 -->
|
|
<select id="isPartComplete" parameterType="map" resultType="map">
|
|
SELECT COUNT(*) AS CNT
|
|
FROM PART_INFO
|
|
WHERE 1=1
|
|
AND PART_NO = #{partNo}
|
|
AND UPPER(STATUS) = 'COMPLETE'
|
|
</select>
|
|
|
|
<!-- //구조등록 excel import temp data를 통해 PART_BOM_QTY 테이블 값 입력 -->
|
|
<insert id="saveStructureExcelImportData" parameterType="map">
|
|
INSERT INTO PART_BOM_QTY(
|
|
BOM_REPORT_OBJID
|
|
, PARENT_PART_NO
|
|
, PART_NO
|
|
, QTY
|
|
, REGION_OBJID
|
|
, REGDATE
|
|
, OBJID
|
|
) SELECT #{bomObjId} as BOM_REPORT_OBJID
|
|
, replace(PARENT_PART_NO, ' ', '')
|
|
, replace(PART_NO, ' ', '')
|
|
, CASE WHEN REGEXP_INSTR(QTY, '[^0-9]') = '1' THEN '1' ELSE QTY END AS QTY
|
|
, #{search_regionObjId} AS REGION_OBJID
|
|
, REGDATE
|
|
, OBJID
|
|
FROM STRUCTURE_TEMP_XLS_IMPORT_DATA
|
|
WHERE 1=1
|
|
AND TARGET_OBJID = #{targetObjId}
|
|
ORDER BY NO
|
|
</insert>
|
|
|
|
<select id="aaaaa" parameterType="map" resultType="map">
|
|
SELECT LEVEL, T.* from (SELECT
|
|
PART_MGMT_OBJID
|
|
,PART_MGMT_PARENT_OBJID
|
|
,PROJECT_MGMT_OBJID
|
|
,PART_NAME
|
|
,PART_NO
|
|
,PARENT_PART_NO
|
|
,SPEC_CD
|
|
,CODE_NAME(SPEC_CD) AS SPEC_NAME
|
|
,MFA_CD
|
|
,CODE_NAME(MFA_CD) AS MFA_NAME
|
|
,QTY
|
|
,PROCESS_CD
|
|
,CODE_NAME(PROCESS_CD) AS PROCESS_NAME
|
|
,SORT_CD
|
|
,CODE_NAME(SORT_CD) AS SORT_NAME
|
|
,SUP_CD
|
|
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG O WHERE O.SUPPLY_CODE = SUP_CD) AS SUP_NAME
|
|
,REV
|
|
,TO_CHAR(REL_DATE,'YYYY-MM-DD') AS REL_DATE
|
|
,REG_DATE
|
|
,REG_USER_ID
|
|
FROM PART_MGMT
|
|
WHERE 1=1
|
|
AND IS_LAST = 1
|
|
AND DEL_YN='N'
|
|
AND PROJECT_MGMT_OBJID = #{projectno}
|
|
) T WHERE 1 = 1
|
|
|
|
<if test="search_partNo != null and !''.equals(search_partNo)">
|
|
AND UPPER(PART_NO) LIKE UPPER('%${search_partNo}%')
|
|
</if>
|
|
|
|
<if test="search_partName != null and !''.equals(search_partName)">
|
|
AND UPPER(PART_NAME) LIKE UPPER('%${search_partName}%')
|
|
</if>
|
|
|
|
START WITH T.PART_NO = T.PARENT_PART_NO
|
|
CONNECT BY NOCYCLE PRIOR T.PART_NO = T.PARENT_PART_NO
|
|
|
|
<!-- START WITH PART_MGMT_PARENT_OBJID IS NULL
|
|
CONNECT BY NOCYCLE PRIOR PART_MGMT_OBJID = PART_MGMT_PARENT_OBJID -->
|
|
</select>
|
|
|
|
<select id="bbbbb" parameterType="map" resultType="map">
|
|
SELECT LEVEL,
|
|
LEVEL+('${search_partLevel}')-1 AS LEV,
|
|
CONNECT_BY_ROOT PART_MGMT_OBJID AS SUB_ROOT_OBJID ,
|
|
LPAD(' ', 3*(LEVEL-1))||PART_NO LPAD_PART_NO ,
|
|
CONNECT_BY_ISLEAF "LEAF" ,
|
|
T.*,
|
|
CONNECT_BY_ROOT PART_MGMT_OBJID AS ROOT_OBJID
|
|
FROM
|
|
(SELECT
|
|
PART_MGMT_OBJID
|
|
,PART_MGMT_PARENT_OBJID
|
|
,PROJECT_MGMT_OBJID
|
|
,PART_NAME
|
|
,PART_NO
|
|
,PARENT_PART_NO
|
|
,SPEC_CD
|
|
,CODE_NAME(SPEC_CD) AS SPEC_NAME
|
|
,MFA_CD
|
|
,CODE_NAME(MFA_CD) AS MFA_NAME
|
|
,QTY
|
|
,PROCESS_CD
|
|
,CODE_NAME(PROCESS_CD) AS PROCESS_NAME
|
|
,SORT_CD
|
|
,CODE_NAME(SORT_CD) AS SORT_NAME
|
|
,SUP_CD
|
|
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG O WHERE O.SUPPLY_CODE = SUP_CD) AS SUP_NAME
|
|
,REV
|
|
,TO_CHAR(REL_DATE,'YYYY-MM-DD') AS REL_DATE
|
|
,REG_DATE
|
|
,REG_USER_ID
|
|
FROM PART_MGMT
|
|
WHERE 1=1
|
|
AND IS_LAST = 1
|
|
AND DEL_YN='N'
|
|
AND PROJECT_MGMT_OBJID = #{projectno}
|
|
) T
|
|
WHERE 1=1
|
|
START WITH PART_MGMT_OBJID = #{objid}
|
|
CONNECT BY NOCYCLE PRIOR T.PART_NO = T.PARENT_PART_NO
|
|
|
|
<!-- START WITH T.PART_NO = T.PARENT_PART_NO -->
|
|
<!-- CONNECT BY NOCYCLE PRIOR PART_MGMT_OBJID = PART_MGMT_PARENT_OBJID -->
|
|
|
|
|
|
|
|
</select>
|
|
|
|
|
|
<!-- //정전개 조회 쿼리 -->
|
|
<select id="selectStructureAscendingList" parameterType="map" resultType="map">
|
|
SELECT * FROM
|
|
(
|
|
with recursive t1 ( part_mgmt_objid
|
|
,part_mgmt_parent_objid
|
|
,project_mgmt_objid
|
|
,part_name
|
|
,part_no
|
|
,parent_part_no
|
|
,spec_cd
|
|
,mfa_cd
|
|
,qty
|
|
,process_cd
|
|
,sort_cd
|
|
,sup_cd
|
|
,rev
|
|
,is_last
|
|
,rel_date
|
|
,reg_date
|
|
,reg_user_id
|
|
,change_cd
|
|
,status
|
|
,del_yn
|
|
,rel_status
|
|
,sized
|
|
,material
|
|
, lev,path,part_array,cycle) as (
|
|
SELECT t2.*,
|
|
1 AS lev,
|
|
t2.part_no::text,
|
|
ARRAY[t2.part_no] as part_array,
|
|
FALSE as CYCLE
|
|
from part_mgmt AS t2
|
|
where part_no = parent_part_no
|
|
|
|
union all
|
|
|
|
SELECT distinct t3.*,
|
|
lev+1,
|
|
PATH||t3.part_no::text,
|
|
t1.part_array,
|
|
t3.part_no = ANY(part_array) as CYCLE
|
|
from part_mgmt AS t3, t1
|
|
where t3.parent_part_no = t1.part_no
|
|
and t3.parent_part_no != t3.part_no
|
|
and NOT CYCLE
|
|
)
|
|
SELECT
|
|
t1.part_mgmt_objid
|
|
,t1.part_mgmt_parent_objid
|
|
,t1.project_mgmt_objid
|
|
,t1.part_name
|
|
,t1.part_no
|
|
,t1.parent_part_no
|
|
,t1.spec_cd
|
|
,t1.mfa_cd
|
|
,t1.qty
|
|
,t1.process_cd
|
|
,t1.sort_cd
|
|
,t1.sup_cd
|
|
,t1.rev
|
|
,t1.is_last
|
|
,to_char(t1.rel_date,'yyyy-mm-dd') as rel_date
|
|
,to_char(t1.reg_date,'yyyy-mm-dd') as reg_date
|
|
,t1.reg_user_id
|
|
,t1.change_cd
|
|
,t1.status
|
|
,t1.del_yn
|
|
,t1.rel_status
|
|
,t1.sized
|
|
,t1.material
|
|
,(select o.code_name from comm_code o where o.code_id = t1.sort_cd) AS sort_name
|
|
,t1.lev
|
|
,LPAD(' ', 3*(t1.lev-1))||t1.part_no as LPAD_PART_NO
|
|
, case
|
|
when (t1.lev - lead(t1.lev) over (order by path)) <![CDATA[ < ]]> 0
|
|
then 0
|
|
else 1
|
|
end as LEAF,
|
|
(SELECT part_mgmt_objid FROM t1 WHERE lev='1' AND t1.PROJECT_MGMT_OBJID = #{projectno}::integer and t1.DEL_YN='N'
|
|
AND t1.STATUS='complete'
|
|
AND t1.is_last='1') AS ROOT_OBJID,
|
|
|
|
(SELECT part_mgmt_objid FROM t1 WHERE lev='1' AND t1.PROJECT_MGMT_OBJID = #{projectno}::integer and t1.DEL_YN='N'
|
|
AND t1.STATUS='complete'
|
|
AND t1.is_last='1') AS SUB_ROOT_OBJID
|
|
from t1
|
|
WHERE t1.DEL_YN='N'
|
|
AND t1.STATUS='complete'
|
|
AND t1.is_last='1'
|
|
AND t1.PROJECT_MGMT_OBJID = #{projectno}::integer
|
|
|
|
<if test="search_partNo != null and !''.equals(search_partNo)">
|
|
AND UPPER(t1.PART_NO) LIKE UPPER('%${search_partNo}%')
|
|
</if>
|
|
|
|
<if test="search_partName != null and !''.equals(search_partName)">
|
|
AND UPPER(t1.PART_NAME) LIKE UPPER('%${search_partName}%')
|
|
</if>
|
|
|
|
order by path,lev,part_no
|
|
) AS TT
|
|
|
|
<!-- SELECT LEVEL,
|
|
LEVEL AS LEV,
|
|
CONNECT_BY_ROOT PART_MGMT_OBJID AS SUB_ROOT_OBJID ,
|
|
LPAD(' ', 3*(LEVEL-1))||PART_NO LPAD_PART_NO ,
|
|
CONNECT_BY_ISLEAF "LEAF" ,
|
|
T.*,
|
|
CONNECT_BY_ROOT PART_MGMT_OBJID AS ROOT_OBJID
|
|
FROM
|
|
(SELECT
|
|
T.PART_MGMT_OBJID
|
|
,PART_MGMT_PARENT_OBJID
|
|
,T.PROJECT_MGMT_OBJID
|
|
,PART_NAME
|
|
,PART_NO
|
|
,PARENT_PART_NO
|
|
,SPEC_CD
|
|
,CODE_NAME(SPEC_CD) AS SPEC_NAME
|
|
,MFA_CD
|
|
,CODE_NAME(MFA_CD) AS MFA_NAME
|
|
,T.QTY
|
|
,T.PROCESS_CD
|
|
,CODE_NAME(T.PROCESS_CD) AS PROCESS_NAME
|
|
,SORT_CD
|
|
,CODE_NAME(SORT_CD) AS SORT_NAME
|
|
,SUP_CD
|
|
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG O WHERE O.SUPPLY_CODE = SUP_CD) AS SUP_NAME
|
|
,REV
|
|
,TO_CHAR(REL_DATE,'YYYY-MM-DD') AS REL_DATE
|
|
,T.REG_DATE
|
|
,T.REG_USER_ID
|
|
FROM PART_MGMT T
|
|
WHERE 1=1
|
|
AND IS_LAST = 1
|
|
AND DEL_YN='N'
|
|
AND PROJECT_MGMT_OBJID = #{projectno}
|
|
) T
|
|
|
|
WHERE 1=1 -->
|
|
|
|
</select>
|
|
|
|
<!-- <select id="selectStructureAscendingList" parameterType="map" resultType="map">
|
|
SELECT LEVEL
|
|
, CONNECT_BY_ROOT OBJID AS SUB_ROOT_OBJID
|
|
, LPAD(' ', 3*(LEVEL-1))||AA.PART_NO LPAD_PART_NO
|
|
, CONNECT_BY_ISLEAF "LEAF"
|
|
, AA.*
|
|
FROM (
|
|
SELECT LEVEL AS LEV
|
|
, T.*, CONNECT_BY_ROOT OBJID AS ROOT_OBJID
|
|
FROM (
|
|
SELECT A.BOM_REPORT_OBJID
|
|
, A.OBJID
|
|
, A.PARENT_PART_NO
|
|
, A.PART_NO
|
|
, B.PART_TYPE
|
|
, (SELECT OBJID FROM PART_INFO WHERE PART_NO = A.PART_NO AND IS_LAST = 1 AND UPPER(STATUS) = 'COMPLETE') AS PART_OBJID
|
|
, A.QTY
|
|
, B.PART_NAME
|
|
, B.EO_NO
|
|
, (SELECT OBJID FROM EO_INFO WHERE EO_NO = B.EO_NO) AS EO_OBJID
|
|
, B.EO_ISSUE_DATE AS EO_ISSUE_DATE_ORG
|
|
, TO_CHAR(B.EO_ISSUE_DATE, 'YYYY-MM-DD') AS EO_ISSUE_DATE
|
|
, B.OEM_OBJID
|
|
, (SELECT OEM_NAME FROM OEM_MNG WHERE OBJID = (SELECT OEM_OBJID FROM CAR_MNG WHERE OBJID = C.CAR_OBJID)) AS OEM_NAME
|
|
, C.CAR_OBJID
|
|
, (SELECT CAR_NAME FROM CAR_MNG WHERE OBJID = C.CAR_OBJID) AS CAR_NAME
|
|
, (SELECT CAR_CODE FROM CAR_MNG WHERE OBJID = C.CAR_OBJID) AS CAR_CODE
|
|
, (SELECT MODEL_CODE FROM CAR_MNG WHERE OBJID = C.CAR_OBJID) AS CAR_MODEL_CODE
|
|
, (SELECT PRODUCT_GROUP_NAME FROM PRODUCT_GROUP_MNG WHERE OBJID = (SELECT PRODUCT_GROUP_OBJID FROM PRODUCT_MNG WHERE OBJID = C.PRODUCT_OBJID)) AS PRODUCT_GROUP_NAME
|
|
, C.PRODUCT_OBJID
|
|
, (SELECT PRODUCT_NAME FROM PRODUCT_MNG WHERE OBJID = C.PRODUCT_OBJID) AS PRODUCT_NAME
|
|
, A.REGION_OBJID
|
|
, (SELECT REGION_NAME FROM REGION_MNG WHERE OBJID = A.REGION_OBJID) AS REGION_NAME
|
|
, B.MATERIAL_OBJID
|
|
, (SELECT MATERIAL_NAME FROM MATERIAL_MNG WHERE OBJID = B.MATERIAL_OBJID) AS MATERIAL_NAME
|
|
, B.THICKNESS
|
|
, B.REV
|
|
, CASE WHEN B.DRAWING_TYPE = 'draw' THEN 'D'
|
|
WHEN B.DRAWING_TYPE = 'shownOn' THEN 'S'
|
|
ELSE B.DRAWING_TYPE
|
|
END AS DRAWING_TYPE
|
|
, CASE WHEN B.DRAWING_RELEASE_TYPE = 'dev' THEN '개발'
|
|
WHEN B.DRAWING_RELEASE_TYPE = 'product' THEN '양산'
|
|
ELSE B.DRAWING_RELEASE_TYPE
|
|
END AS DRAWING_RELEASE_TYPE
|
|
, B.DRAWING_TYPE AS DRAWING_TYPE_ORG
|
|
, B.DRAWING_RELEASE_TYPE AS DRAWING_RELEASE_TYPE_ORG
|
|
, A.REGDATE
|
|
FROM PART_BOM_QTY A, PART_INFO B, PART_BOM_REPORT C
|
|
WHERE 1=1
|
|
AND C.OBJID = A.BOM_REPORT_OBJID
|
|
AND A.PART_NO = B.PART_NO
|
|
AND UPPER(B.STATUS) = 'COMPLETE'
|
|
AND B.IS_LAST = 1
|
|
<if test="search_carObjId != null and !''.equals(search_carObjId)">
|
|
AND C.CAR_OBJID = #{search_carObjId}
|
|
</if>
|
|
<if test="search_productObjId != null and !''.equals(search_productObjId)">
|
|
AND C.PRODUCT_OBJID = #{search_productObjId}
|
|
</if>
|
|
) T
|
|
WHERE 1=1
|
|
START WITH PARENT_PART_NO IS NULL
|
|
CONNECT BY NOCYCLE PRIOR PART_NO = PARENT_PART_NO AND PRIOR BOM_REPORT_OBJID = BOM_REPORT_OBJID
|
|
) AA
|
|
WHERE 1=1
|
|
START WITH
|
|
<choose>
|
|
<when test="search_partNo != null and !''.equals(search_partNo) or search_partName != null and !''.equals(search_partName)">
|
|
<if test="search_partNo != null and !''.equals(search_partNo)">
|
|
UPPER(AA.PART_NO) LIKE UPPER('%${search_partNo}%')
|
|
</if>
|
|
<if test="search_partNo != null and !''.equals(search_partNo) and search_partName != null and !''.equals(search_partName)">
|
|
AND
|
|
</if>
|
|
<if test="search_partName != null and !''.equals(search_partName)">
|
|
UPPER(AA.PART_NAME) LIKE UPPER('%${search_partName}%')
|
|
</if>
|
|
</when>
|
|
<otherwise>
|
|
PARENT_PART_NO IS NULL
|
|
</otherwise>
|
|
</choose>
|
|
CONNECT BY NOCYCLE PRIOR AA.PART_NO = AA.PARENT_PART_NO
|
|
황의돈 DR 주석처리
|
|
AND PRIOR AA.BOM_REPORT_OBJID = AA.BOM_REPORT_OBJID
|
|
아래는 원래 주석처리 되어 있었음
|
|
AND PRIOR ROOT_OBJID = ROOT_OBJID
|
|
|
|
|
|
ORDER SIBLINGS BY AA.BOM_REPORT_OBJID, AA.PART_TYPE DESC
|
|
</select> -->
|
|
|
|
<!-- //역전개 조회 쿼리 -->
|
|
<select id="selectStructureDescendingList" parameterType="map" resultType="map">
|
|
SELECT *
|
|
FROM (
|
|
WITH RECURSIVE t1
|
|
(
|
|
part_mgmt_objid ,
|
|
part_mgmt_parent_objid ,
|
|
project_mgmt_objid ,
|
|
part_name ,
|
|
part_no ,
|
|
parent_part_no ,
|
|
spec_cd ,
|
|
mfa_cd ,
|
|
qty ,
|
|
process_cd ,
|
|
sort_cd ,
|
|
sup_cd ,
|
|
rev ,
|
|
is_last ,
|
|
rel_date ,
|
|
reg_date ,
|
|
reg_user_id ,
|
|
change_cd ,
|
|
status ,
|
|
del_yn ,
|
|
rel_status ,
|
|
sized ,
|
|
material ,
|
|
lev,
|
|
PATH,
|
|
part_array,
|
|
CYCLE
|
|
) AS
|
|
(SELECT t2.*,
|
|
1 AS lev,
|
|
t2.part_no::text,
|
|
ARRAY[t2.part_no] AS part_array,
|
|
FALSE AS CYCLE
|
|
FROM part_mgmt AS t2
|
|
WHERE 1=1
|
|
<if test="search_partNo != null and !''.equals(search_partNo)">
|
|
AND PART_NO = #{search_partNo}
|
|
</if>
|
|
UNION ALL
|
|
SELECT DISTINCT t3.*,
|
|
lev+1,
|
|
PATH||t3.part_no::text,
|
|
t1.part_array,
|
|
t3.part_no = ANY(part_array) AS CYCLE
|
|
FROM part_mgmt AS t3,
|
|
t1
|
|
WHERE t1.parent_part_no = t3.part_no
|
|
AND t3.parent_part_no != t3.part_no
|
|
AND NOT CYCLE
|
|
)
|
|
SELECT t1.part_mgmt_objid ,
|
|
t1.part_mgmt_parent_objid ,
|
|
t1.project_mgmt_objid ,
|
|
t1.part_name ,
|
|
t1.part_no ,
|
|
t1.parent_part_no ,
|
|
t1.spec_cd ,
|
|
t1.mfa_cd ,
|
|
t1.qty ,
|
|
t1.process_cd ,
|
|
t1.sort_cd ,
|
|
t1.sup_cd ,
|
|
t1.rev ,
|
|
t1.is_last ,
|
|
to_char(t1.rel_date,'yyyy-mm-dd') AS rel_date ,
|
|
to_char(t1.reg_date,'yyyy-mm-dd') AS reg_date ,
|
|
t1.reg_user_id ,
|
|
t1.change_cd ,
|
|
t1.status ,
|
|
t1.del_yn ,
|
|
t1.rel_status ,
|
|
t1.sized ,
|
|
t1.material ,
|
|
(SELECT o.code_name
|
|
FROM comm_code o
|
|
WHERE o.code_id = t1.sort_cd
|
|
) AS sort_name ,
|
|
t1.lev,
|
|
LPAD(' ', 3*(t1.lev-1))||t1.part_no AS LPAD_PART_NO ,
|
|
CASE
|
|
WHEN
|
|
(
|
|
t1.lev - lead(t1.lev) over (ORDER BY PATH)
|
|
)
|
|
<![CDATA[ < ]]>
|
|
0
|
|
THEN 0
|
|
ELSE 1
|
|
END AS LEAF,
|
|
(SELECT part_mgmt_objid
|
|
FROM t1
|
|
WHERE lev='1'
|
|
AND t1.PROJECT_MGMT_OBJID = #{projectno}::integer
|
|
AND t1.DEL_YN='N'
|
|
AND t1.STATUS='complete'
|
|
AND t1.is_last='1'
|
|
) AS BASE_ROOT_OBJID,
|
|
(SELECT part_mgmt_objid
|
|
FROM t1
|
|
WHERE lev='1'
|
|
AND t1.PROJECT_MGMT_OBJID = #{projectno}::integer
|
|
AND t1.DEL_YN='N'
|
|
AND t1.STATUS='complete'
|
|
AND t1.is_last='1'
|
|
) AS SUB_ROOT_OBJID
|
|
FROM t1
|
|
WHERE t1.DEL_YN='N'
|
|
AND t1.STATUS='complete'
|
|
AND t1.is_last='1'
|
|
AND t1.PROJECT_MGMT_OBJID = #{projectno}::integer
|
|
ORDER BY PATH,
|
|
lev,
|
|
part_no ) AS TT
|
|
</select>
|
|
|
|
<!-- //Excel을 통해 저장하기 전 PART_BOM_QTY 테이블 초기화 -->
|
|
<delete id="deleteStructureInfo" parameterType="map">
|
|
DELETE FROM PART_BOM_QTY WHERE BOM_REPORT_OBJID = #{bomObjId}
|
|
</delete>
|
|
|
|
<!-- //partNo를 통해 Part Object ID를 반환한다. -->
|
|
<select id="getPartInfoObjIdByPartNo" parameterType="string" resultType="string">
|
|
SELECT OBJID
|
|
FROM PART_INFO
|
|
WHERE 1=1
|
|
AND IS_LAST = '1'
|
|
AND UPPER(STATUS) = 'COMPLETE'
|
|
AND UPPER(PART_NO) = UPPER(#{partNo})
|
|
</select>
|
|
<!-- **************************************************************************** -->
|
|
|
|
<!-- 파트정보를 merge 한다. -->
|
|
<update id="mergepartInfo" parameterType="map">
|
|
INSERT INTO part_mng
|
|
(part_mgmt_objid
|
|
,part_mgmt_parent_objid
|
|
,project_mgmt_objid
|
|
,part_name
|
|
,part_no
|
|
,parent_part_no
|
|
,spec_cd
|
|
,mfa_cd
|
|
,qty
|
|
,process_cd
|
|
,sort_cd
|
|
,sup_cd
|
|
,is_last
|
|
,reg_date
|
|
,reg_user_id
|
|
,change_cd
|
|
,status
|
|
,del_yn
|
|
,rel_status
|
|
,sized
|
|
,material
|
|
)
|
|
VALUES (
|
|
#{PART_MGMT_OBJID}::integer
|
|
,#{PART_MGMT_PARENT_OBJID}::integer
|
|
,#{PROJECT_MGMT_OBJID}::integer
|
|
,#{PART_NAME}
|
|
,#{PART_NO}
|
|
,#{PARENT_PART_NO}
|
|
,#{SPEC_CD}
|
|
,#{MFA_CD}
|
|
,#{QTY}
|
|
,#{PROCESS_CD}
|
|
,#{SORT_CD}
|
|
,#{SUP_CD}
|
|
,'0'
|
|
,now()
|
|
,#{CONNECTUSERID}
|
|
,#{CHANGE_CD}
|
|
,'write'
|
|
,'N'
|
|
,#{REL_STATUS}
|
|
,#{SIZED}
|
|
,#{MATERIAL}
|
|
) ON
|
|
CONFLICT (part_mgmt_objid) DO
|
|
UPDATE
|
|
SET PART_NAME=#{PART_NAME}
|
|
,SPEC_CD=#{SPEC_CD}
|
|
,MFA_CD=#{MFA_CD}
|
|
,QTY=#{QTY}
|
|
,PROCESS_CD=#{PROCESS_CD}
|
|
,SORT_CD=#{SORT_CD}
|
|
,SUP_CD=#{SUP_CD}
|
|
,SIZED=#{SIZED}
|
|
,MATERIAL=#{MATERIAL}
|
|
|
|
</update>
|
|
|
|
|
|
<!-- //BOM 구조등록 -->
|
|
<!-- <insert id="insertpartInfo" parameterType="map">
|
|
INSERT INTO PART_MGMT
|
|
(
|
|
PART_MGMT_OBJID
|
|
,PART_MGMT_PARENT_OBJID
|
|
,PROJECT_MGMT_OBJID
|
|
,PART_NAME
|
|
,PART_NO
|
|
,PARENT_PART_NO
|
|
,SPEC_CD
|
|
,MFA_CD
|
|
,QTY
|
|
,PROCESS_CD
|
|
,SORT_CD
|
|
,SUP_CD
|
|
,IS_LAST
|
|
,REG_DATE
|
|
,REG_USER_ID
|
|
,CHANGE_CD
|
|
,STATUS
|
|
,DEL_YN
|
|
) VALUES (
|
|
#{PART_MGMT_OBJID}
|
|
,#{PART_MGMT_PARENT_OBJID}
|
|
,#{PROJECT_MGMT_OBJID}
|
|
,#{PART_NAME}
|
|
,#{PART_NO}
|
|
,#{PARENT_PART_NO}
|
|
,#{SPEC_CD}
|
|
,#{MFA_CD}
|
|
,#{QTY}
|
|
,#{PROCESS_CD}
|
|
,#{SORT_CD}
|
|
,#{SUPPLY_CD}
|
|
,'0'
|
|
,SYSDATE
|
|
,#{CONNECTUSERID}
|
|
,#{CHANGE_CD}
|
|
,'write'
|
|
,'N'
|
|
)
|
|
</insert> -->
|
|
|
|
<!-- //BOM 파일등록 -->
|
|
<insert id="insertpartfileInfo" parameterType="map">
|
|
INSERT INTO ATTACH_FILE_INFO
|
|
(
|
|
OBJID
|
|
,TARGET_OBJID
|
|
,SAVED_FILE_NAME
|
|
,REAL_FILE_NAME
|
|
,DOC_TYPE
|
|
,DOC_TYPE_NAME
|
|
,FILE_SIZE
|
|
,FILE_EXT
|
|
,FILE_PATH
|
|
,WRITER
|
|
,REGDATE
|
|
,STATUS
|
|
|
|
) VALUES (
|
|
#{OBJID}::integer
|
|
,#{TARGET_OBJID}::integer
|
|
,#{SAVED_FILE_NAME}
|
|
,#{REAL_FILE_NAME}
|
|
,#{DOC_TYPE}
|
|
,#{DOC_TYPE_NAME}
|
|
,#{FILE_SIZE}::integer
|
|
,#{FILE_EXT}
|
|
,#{FILE_PATH}
|
|
,#{WRITER}
|
|
,now()
|
|
,'Active'
|
|
)
|
|
</insert>
|
|
|
|
|
|
<insert id="insertpartMngInfo" parameterType="map">
|
|
INSERT INTO PART_MNG
|
|
(
|
|
OBJID
|
|
,PART_NO
|
|
,PART_NAME
|
|
,UNIT
|
|
,QTY
|
|
,SPEC
|
|
,MATERIAL
|
|
,SUB_MATERIAL
|
|
,WEIGHT
|
|
,REMARK
|
|
,STATUS
|
|
,REG_DATE
|
|
,WRITER
|
|
,IS_LAST
|
|
,PART_TYPE
|
|
,PRODUCT_MGMT_OBJID
|
|
<!-- ,UPG_NO --> -->
|
|
,REVISION
|
|
,EXCEL_UPLOAD_SEQ
|
|
,PARENT_PART_NO
|
|
) VALUES (
|
|
#{OBJID}::NUMERIC
|
|
,#{PART_NO}
|
|
,#{PART_NAME}
|
|
,#{UNIT}
|
|
,#{QTY}
|
|
,#{SPEC}
|
|
,#{MATERIAL}
|
|
,#{SUB_MATERIAL}
|
|
,#{WEIGHT}
|
|
,#{REMARK}
|
|
,'create'
|
|
,now()
|
|
,#{CONNECTUSERID}
|
|
,'0'
|
|
,#{PART_TYPE}
|
|
,#{PRODUCT_MGMT_OBJID}
|
|
<!-- ,#{UPG_NO} --> -->
|
|
,#{REVISION}
|
|
<!-- ,CASE WHEN (SELECT COUNT(1) FROM PART_MNG WHERE PART_NO = #{PART_NO}) = 0 then null -->
|
|
<!-- WHEN (SELECT COUNT(1) FROM PART_MNG WHERE PART_NO = #{PART_NO}) > 9 then 'R' || (SELECT COUNT(1) FROM PART_MNG WHERE PART_NO = #{PART_NO}) -->
|
|
<!-- ELSE 'R0' || (SELECT COUNT(1) FROM PART_MNG WHERE PART_NO = #{PART_NO}) -->
|
|
<!-- END -->
|
|
,nextval('part_excel_upload_seq')
|
|
,COALESCE((SELECT P.OBJID::varchar FROM PART_MNG P WHERE P.PART_NO = #{PARENT_PART_NO} AND P.REVISION = #{PARENT_REVISION}),'')
|
|
)
|
|
</insert>
|
|
|
|
|
|
<!-- PART 관리 목록 조회 -->
|
|
<select id="getPartDetailList" parameterType="map" resultType="map">
|
|
SELECT
|
|
T.*,
|
|
ROW_NUMBER() OVER(ORDER BY REG_DATE DESC) RNUM
|
|
FROM(
|
|
SELECT
|
|
T.*
|
|
FROM (
|
|
SELECT
|
|
P.OBJID,
|
|
P.PRODUCT_MGMT_OBJID,
|
|
P.UPG_NO,
|
|
P.PART_NO,
|
|
P.PART_NAME,
|
|
P.UNIT,
|
|
(SELECT CODE_NAME FROM COMM_CODE CC WHERE 1=1 AND CODE_ID = P.UNIT) AS UNIT_TITLE,
|
|
P.QTY,
|
|
P.SPEC,
|
|
P.MATERIAL,
|
|
P.WEIGHT,
|
|
P.PART_TYPE,
|
|
(SELECT CODE_NAME FROM COMM_CODE CC WHERE 1=1 AND CODE_ID = P.PART_TYPE) AS PART_TYPE_TITLE,
|
|
P.REMARK,
|
|
P.ES_SPEC,
|
|
P.MS_SPEC,
|
|
P.CHANGE_OPTION,
|
|
P.DESIGN_APPLY_POINT,
|
|
(SELECT CODE_NAME FROM COMM_CODE CC WHERE 1=1 AND CODE_ID = P.DESIGN_APPLY_POINT) AS DESIGN_APPLY_POINT_TITLE,
|
|
P.MANAGEMENT_FLAG,
|
|
P.REVISION,
|
|
P.STATUS,
|
|
P.REG_DATE,
|
|
P.EDIT_DATE,
|
|
P.WRITER,
|
|
P.IS_LAST,
|
|
(SELECT EO_NO FROM EO_MNG AS EO WHERE EO.OBJID::varchar = P.EO) AS EO_NO,
|
|
(SELECT TO_CHAR(REG_DATE,'YYYY-MM-DD') FROM EO_MNG AS EO WHERE EO.OBJID::varchar = P.EO) AS EO_DATE,
|
|
P.EO,
|
|
AF.SAVED_FILE_NAME,
|
|
AF.REAL_FILE_NAME,
|
|
REPLACE(AF.FILE_PATH, '\', '\\') AS FILE_PATH,
|
|
|
|
AF_ECD.SAVED_FILE_NAME AS ECD_SAVED_FILE_NAME,
|
|
AF_ECD.REAL_FILE_NAME AS ECD_REAL_FILE_NAME,
|
|
REPLACE(AF_ECD.FILE_PATH, '\', '\\') AS ECD_FILE_PATH,
|
|
CASE
|
|
WHEN AF_ECD.SAVED_FILE_NAME IS NOT NULL THEN 'Y'
|
|
ELSE 'N'
|
|
END ECD_FLAG
|
|
FROM
|
|
PART_MNG P
|
|
LEFT OUTER JOIN
|
|
(
|
|
SELECT
|
|
TARGET_OBJID,
|
|
SAVED_FILE_NAME,
|
|
REAL_FILE_NAME,
|
|
FILE_PATH,
|
|
DOC_TYPE
|
|
FROM ATTACH_FILE_INFO
|
|
WHERE 1 = 1
|
|
AND DOC_TYPE IN ('PART_SHAPE_IMG')
|
|
AND UPPER(STATUS) = 'ACTIVE'
|
|
) AF
|
|
ON P.OBJID::NUMERIC = AF.TARGET_OBJID
|
|
LEFT OUTER JOIN
|
|
(
|
|
SELECT
|
|
TARGET_OBJID,
|
|
SAVED_FILE_NAME,
|
|
REAL_FILE_NAME,
|
|
FILE_PATH,
|
|
DOC_TYPE
|
|
FROM ATTACH_FILE_INFO
|
|
WHERE 1 = 1
|
|
AND DOC_TYPE IN ('ECD_DOC')
|
|
AND UPPER(STATUS) = 'ACTIVE'
|
|
) AF_ECD
|
|
ON P.OBJID::NUMERIC = AF_ECD.TARGET_OBJID
|
|
) T
|
|
WHERE 1=1
|
|
AND PART_NO = #{OBJID}
|
|
) T
|
|
</select>
|
|
|
|
|
|
</mapper> |