Files
wace_plm/WebContent/WEB-INF/classes/com/pms/mapper/partMng.xml
chpark da06c4684c Initial commit: WACE PLM with database initialization features
- 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
2025-08-29 15:46:08 +09:00

7516 lines
230 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="partMng">
<sql id="v_bom_qty">
WITH RECURSIVE VIEW_BOM AS (
SELECT
A.BOM_REPORT_OBJID,
A.OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.QTY,
A.QTY_TEMP,
A.REGDATE,
A.SEQ,
1,
ARRAY [A.CHILD_OBJID::TEXT],
ARRAY [A.SEQ::TEXT],
FALSE
FROM
BOM_PART_QTY A
WHERE 1=1
AND (A.PARENT_OBJID IS NULL OR A.PARENT_OBJID = '')
<!--
AND A.BOM_REPORT_OBJID = #{bomReportObjId}
-->
<choose>
<when test="search_type != null and !''.equals(search_type) and 'working'.equals(search_type)">
AND STATUS NOT IN ('deleting', 'deleted')
<!--
AND (BQP.STATUS IS NULL OR BQP.STATUS = '')
-->
</when>
<otherwise>
AND STATUS IN ('beforeEdit', 'editing','deleting', 'deploy')
</otherwise>
</choose>
UNION ALL
SELECT
B.BOM_REPORT_OBJID,
B.OBJID,
B.PARENT_OBJID,
B.CHILD_OBJID,
B.PARENT_PART_NO,
B.PART_NO,
B.QTY,
B.QTY_TEMP,
B.REGDATE,
B.SEQ,
LEV + 1,
PATH||B.CHILD_OBJID::TEXT,
PATH2||B.SEQ::TEXT,
B.PARENT_OBJID = ANY(PATH)
FROM
BOM_PART_QTY B
JOIN
VIEW_BOM
ON B.PARENT_OBJID = VIEW_BOM.CHILD_OBJID
AND VIEW_BOM.BOM_REPORT_OBJID = B.BOM_REPORT_OBJID
<choose>
<when test="search_type != null and !''.equals(search_type) and 'working'.equals(search_type)">
AND STATUS NOT IN ('deleting', 'deleted')
<!--
AND (BQP.STATUS IS NULL OR BQP.STATUS = '')
-->
</when>
<otherwise>
AND B.STATUS IN ('beforeEdit', 'editing','deleting', 'deploy')
</otherwise>
</choose>
)
</sql>
<sql id="partMngBaseSimple">
(
<!--
WITH V_F AS (
SELECT *
FROM ATTACH_FILE_INFO F
WHERE F.DOC_TYPE IN ('3D_CAD', '2D_DRAWING_CAD','2D_PDF_CAD')
AND F.STATUS = 'Active'
)
-->
SELECT
P.EXCEL_UPLOAD_SEQ,
p.PARENT_PART_NO,
p.DESIGN_DATE,
p.DEPLOY_DATE,
p.SUB_MATERIAL,
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,
NVL((SELECT QTY FROM BOM_PART_QTY Q WHERE Q.LAST_PART_OBJID = P.OBJID AND STATUS = 'deploy' ORDER BY DEPLOY_DATE DESC LIMIT 1), P.QTY) QTY,
P.QTY QTY_P,
P.SPEC,
P.POST_PROCESSING,
P.MATERIAL,
P.WEIGHT,
P.PART_TYPE,
P.IS_LONGD,
(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_TYPE,
P.DESIGN_APPLY_POINT,
P.CHANGE_OPTION,
(SELECT ARRAY_TO_STRING(ARRAY_AGG(CODE_NAME),',')
FROM COMM_CODE AS CC
WHERE CC.CODE_ID IN (SELECT UNNEST(STRING_TO_ARRAY(CHANGE_OPTION, ',')) AS CHANGE_OPTION
FROM PART_MNG AS T
WHERE T.OBJID = P.OBJID)
) CHANGE_OPTION_NAME,
<!--
T3.CHANGE_OPTION_NAME,
(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,
TO_CHAR(P.REG_DATE,'YYYY-MM-DD') AS PART_REGDATE_TITLE,
P.EDIT_DATE,
P.WRITER,
P.IS_LAST,
P.EO_DATE,
P.EO_NO,
P.EO_TEMP,
P.MAKER,
P.CONTRACT_OBJID,
P.THICKNESS,
P.WIDTH,
P.HEIGHT,
P.OUT_DIAMETER,
P.IN_DIAMETER,
P.LENGTH,
P.SOURCING_CODE,
P.MAJOR_CATEGORY,
P.SUB_CATEGORY,
P.CODE1,
P.CODE2,
P.CODE3,
P.CODE4,
P.CODE5,
P.IS_NEW,
P.IS_LONGD,
<!--
(SELECT CC.CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = P.SOURCING_CODE) AS SOURCING_NAME,
-->
SUPPLY_CODE
<!--
(SELECT SUPPLY_NAME FROM admin_supply_mng O WHERE O.objid::varchar = P.SUPPLY_CODE) AS SUPPLY_NAME
-->
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID <!-- AND F.STATUS = 'Active'--> AND F.DOC_TYPE IN ('3D_CAD')) CU01_CNT
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID <!-- AND F.STATUS = 'Active'--> AND F.DOC_TYPE IN ('2D_DRAWING_CAD')) CU02_CNT
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID <!-- AND F.STATUS = 'Active'--> AND F.DOC_TYPE IN ('2D_PDF_CAD')) CU03_CNT
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID <!-- AND F.STATUS = 'Active'--> AND F.DOC_TYPE IN ('2D_PDF_CAD','2D_DRAWING_CAD')) CU_TOTAL_CNT
FROM PART_MNG P
<!--
LEFT OUTER JOIN ATTACH_FILE_INFO F
ON P.OBJID = CAD.TARGET_OBJID::varchar
AND F.DOC_TYPE IN ('3D_CAD', '2D_DRAWING_CAD','2D_PDF_CAD')
AND F.STATUS = 'Active'
-->
<!--
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 ('3D_CAD')
AND STATUS = 'Active'
) CAD
ON P.OBJID::varchar = CAD.TARGET_OBJID::varchar
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 ('2D_DRAWING_CAD')
AND STATUS = 'Active'
) DRAWING
ON P.OBJID::varchar = DRAWING.TARGET_OBJID::varchar
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 ('2D_PDF_CAD')
AND STATUS = 'Active'
) PDF
ON P.OBJID::varchar = PDF.TARGET_OBJID::varchar
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 ('2D_PDF_CAD','2D_DRAWING_CAD')
AND STATUS = 'Active'
) PDFDRA
ON P.OBJID::varchar = PDFDRA.TARGET_OBJID::varchar
-->
)
</sql>
<!-- Part 관리 기본 조회 -->
<sql id="partMngBase">
(
WITH V_FILE AS (
SELECT
TARGET_OBJID
, SAVED_FILE_NAME
, REAL_FILE_NAME
, FILE_PATH
, DOC_TYPE
, STATUS
FROM ATTACH_FILE_INFO
WHERE 1 = 1
AND DOC_TYPE IN ('PART_SHAPE_IMG','ECD_DOC','3D_CAD','2D_DRAWING_CAD','2D_PDF_CAD')
AND STATUS = 'Active'
)
SELECT DISTINCT
P.EXCEL_UPLOAD_SEQ,
p.PARENT_PART_NO,
p.DESIGN_DATE,
p.DEPLOY_DATE,
p.SUB_MATERIAL,
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.POST_PROCESSING,
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_TYPE,
P.CHANGE_OPTION,
T3.CHANGE_OPTION_NAME,
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,
TO_CHAR(P.REG_DATE,'YYYY-MM-DD') AS PART_REGDATE_TITLE,
P.EDIT_DATE,
P.WRITER,
P.IS_LAST,
P.EO_DATE,
P.EO_NO,
P.EO_TEMP,
P.MAKER,
P.CONTRACT_OBJID,
P.SOURCING_CODE,
(SELECT CC.CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = P.SOURCING_CODE) AS SOURCING_NAME,
AF.SAVED_FILE_NAME,
AF.REAL_FILE_NAME,
REPLACE(AF.FILE_PATH, '\', '\\') AS FILE_PATH,
case when CAD.SAVED_FILE_NAME is NOT NULL
then 1
else 0 end as CU01_CNT,
case when DRAWING.SAVED_FILE_NAME is NOT NULL
then 1
else 0 end as CU02_CNT,
case when PDF.SAVED_FILE_NAME is NOT NULL
then 1
else 0 end as CU03_CNT,
case when PDFDRA.SAVED_FILE_NAME is NOT NULL
then 1
else 0 end as CU_TOTAL_CNT,
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,
THICKNESS,
WIDTH,
HEIGHT,
OUT_DIAMETER,
IN_DIAMETER,
LENGTH,
SUPPLY_CODE,
(SELECT SUPPLY_NAME FROM admin_supply_mng O WHERE O.objid::varchar = P.SUPPLY_CODE) AS SUPPLY_NAME
FROM
PART_MNG P
LEFT OUTER JOIN V_FILE AF
ON P.OBJID = AF.TARGET_OBJID
AND AF.DOC_TYPE IN ('PART_SHAPE_IMG')
<!--
AND AF.STATUS = 'Active'
-->
LEFT OUTER JOIN V_FILE AF_ECD
ON P.OBJID = AF_ECD.TARGET_OBJID
AND AF_ECD.DOC_TYPE IN ('ECD_DOC')
<!--
AND AF_ECD.STATUS = 'Active'
-->
LEFT OUTER JOIN V_FILE CAD
ON P.OBJID = CAD.TARGET_OBJID
AND CAD.DOC_TYPE IN ('3D_CAD')
<!--
AND CAD.STATUS = 'Active'
-->
LEFT OUTER JOIN V_FILE DRAWING
ON P.OBJID = DRAWING.TARGET_OBJID
AND DRAWING.DOC_TYPE IN ('2D_DRAWING_CAD')
<!--
AND DRAWING.STATUS = 'Active'
-->
LEFT OUTER JOIN V_FILE PDF
ON P.OBJID = PDF.TARGET_OBJID
AND PDF.DOC_TYPE IN ('2D_PDF_CAD')
<!--
AND PDF.STATUS = 'Active'
-->
LEFT OUTER JOIN V_FILE PDFDRA
ON P.OBJID = PDFDRA.TARGET_OBJID
AND PDFDRA.DOC_TYPE IN ('2D_PDF_CAD', '2D_DRAWING_CAD')
<!--
AND PDFDRA.STATUS = 'Active'
-->
<!--
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 STATUS = 'Active'
) AF
ON P.OBJID::varchar = AF.TARGET_OBJID::varchar
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 STATUS = 'Active'
) AF_ECD
ON P.OBJID::varchar = AF_ECD.TARGET_OBJID::varchar
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 ('3D_CAD')
AND STATUS = 'Active'
) CAD
ON P.OBJID::varchar = CAD.TARGET_OBJID::varchar
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 ('2D_DRAWING_CAD')
AND STATUS = 'Active'
) DRAWING
ON P.OBJID::varchar = DRAWING.TARGET_OBJID::varchar
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 ('2D_PDF_CAD')
AND STATUS = 'Active'
) PDF
ON P.OBJID::varchar = PDF.TARGET_OBJID::varchar
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 ('2D_PDF_CAD','2D_DRAWING_CAD')
AND STATUS = 'Active'
) PDFDRA
ON P.OBJID::varchar = PDFDRA.TARGET_OBJID::varchar
-->
LEFT OUTER JOIN(
SELECT
TT.OBJID,
ARRAY_TO_STRING(ARRAY_AGG((SELECT CODE_NAME FROM COMM_CODE AS CC WHERE CC.CODE_ID IN(TT.CHANGE_OPTION))),',') AS CHANGE_OPTION_NAME
FROM (
SELECT
T.OBJID,
UNNEST(STRING_TO_ARRAY(CHANGE_OPTION, ',')) AS CHANGE_OPTION
FROM PART_MNG AS T
) AS TT
GROUP BY TT.OBJID
) AS T3
ON T3.OBJID = P.OBJID
)
</sql>
<sql id="partMngBase2">
(
SELECT
P.*,
E.EO_NO,
E.EO_DATE,
TO_CHAR(E.EO_DATE,'YYYY-MM-DD') AS EO_DATE_TITLE
FROM(
SELECT
P.OBJID,
CASE
WHEN P.CUSTOMER = '' THEN '0'
WHEN P.CUSTOMER IS NULL THEN '0'
ELSE P.CUSTOMER
END CUSTOMER,
CASE
WHEN P.CAR_TYPE = '' THEN '0'
WHEN P.CAR_TYPE IS NULL THEN '0'
ELSE P.CAR_TYPE
END CAR_TYPE,
P.PRODUCT_GROUP,
P.PRODUCT,
P.PART_NO,
P.MY_PART_NO,
P.PART_NAME,
CASE
WHEN P.EO = '' THEN '0'
WHEN P.EO IS NULL THEN '0'
ELSE P.EO
END EO,
P.REVISION,
P.RH_PART,
P.RELEASE_TYPE,
P.PART_TYPE,
P.DRAWING_TYPE,
P.SHOW_ON,
P.QTY,
P.MATERIAL,
P.WEIGHT,
P.SIZE,
P.SURFACE_TREATMENT,
P.SPEC_NO,
P.MOLD_DEV,
case P.MOLD_DEV
when 'new' then '신작'
when 'carryOver' then 'C/O'
ELSE ''
END MOLD_DEV_TITLE,
P.CARRY_OVER_CAR,
P.CHANGE_OPTION,
case P.CHANGE_OPTION
when 'changeModel' then '형상변경'
when 'changeMaterial' then '재질변경'
when 'changeAdd' then '추가변경'
when 'changePakege' then '구성변경'
when 'first' then '초도'
when 'etc' then '기타'
ELSE ''
END CHANGE_OPTION_TITLE,
P.DESIGN_APPLY_POINT,
P.MANAGEMENT_ITEM,
CASE P.MANAGEMENT_ITEM
WHEN 'exist' THEN '유'
WHEN 'notExist' THEN '무'
ELSE ''
END MANAGEMENT_ITEM_TITLE,
P.STATUS,
P.REG_DATE,
TO_CHAR(P.REG_DATE,'YYYY-MM-DD') AS REG_DATE_TITLE,
TO_CHAR(P.REG_DATE,'YYYY') AS REG_DATE_YEAR_TITLE,
P.EDIT_DATE,
P.WRITER,
P.IS_LAST,
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,
THICKNESS,
WIDTH,
HEIGHT,
OUT_DIAMETER,
IN_DIAMETER,
LENGTH
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
) P
LEFT OUTER JOIN EO_MNG E
ON P.EO::NUMERIC = E.OBJID
)
</sql>
<!-- Part 등록 -->
<update id="mergePartMng" parameterType="map">
INSERT INTO PART_MNG
(
OBJID,
PRODUCT_MGMT_OBJID,
UPG_NO,
PART_NO,
PART_NAME,
UNIT,
QTY,
SPEC,
MATERIAL,
WEIGHT,
PART_TYPE,
REMARK,
ES_SPEC,
MS_SPEC,
CHANGE_TYPE,
CHANGE_OPTION,
DESIGN_APPLY_POINT,
MANAGEMENT_FLAG,
REVISION,
STATUS,
REG_DATE,
WRITER,
IS_LAST,
PARENT_PART_NO,
SUB_MATERIAL,
EO_DATE,
DESIGN_DATE,
THICKNESS,
WIDTH,
HEIGHT,
OUT_DIAMETER,
IN_DIAMETER,
LENGTH,
SUPPLY_CODE,
MAKER,
POST_PROCESSING,
MAJOR_CATEGORY,
SUB_CATEGORY
) VALUES (
#{OBJID}::NUMERIC,
#{PRODUCT_MGMT_OBJID},
#{UPG_NO},
#{PART_NO},
#{PART_NAME},
#{UNIT},
#{QTY},
#{SPEC},
#{MATERIAL},
#{WEIGHT},
#{PART_TYPE},
#{REMARK},
#{ES_SPEC},
#{MS_SPEC},
#{CHANGE_TYPE},
#{CHANGE_OPTION},
<!-- #{CHANGE_OPTION_Arr}, -->
#{DESIGN_APPLY_POINT},
#{MANAGEMENT_FLAG},
#{REVISION},
<!--
'release',
-->
'create',
NOW(),
#{WRITER},
'1',
#{PARENT_PART_NO},
#{SUB_MATERIAL},
#{EO_DATE},
#{DESIGN_DATE},
#{THICKNESS},
#{WIDTH},
#{HEIGHT},
#{OUT_DIAMETER},
#{IN_DIAMETER},
#{LENGTH},
#{SUPPLY_CODE},
#{MAKER},
#{POST_PROCESSING},
#{MAJOR_CATEGORY},
#{SUB_CATEGORY}
) ON
CONFLICT (OBJID) DO
UPDATE
SET
PRODUCT_MGMT_OBJID = #{PRODUCT_MGMT_OBJID},
UPG_NO = #{UPG_NO},
PART_NO = #{PART_NO},
PART_NAME = #{PART_NAME},
UNIT = #{UNIT},
QTY = #{QTY},
SPEC = #{SPEC},
MATERIAL = #{MATERIAL},
WEIGHT = #{WEIGHT},
PART_TYPE = #{PART_TYPE},
REMARK = #{REMARK},
ES_SPEC = #{ES_SPEC},
MS_SPEC = #{MS_SPEC},
CHANGE_TYPE = #{CHANGE_TYPE},
CHANGE_OPTION = #{CHANGE_OPTION},
<!-- CHANGE_OPTION = #{CHANGE_OPTION_Arr}, -->
DESIGN_APPLY_POINT = #{DESIGN_APPLY_POINT},
MANAGEMENT_FLAG = #{MANAGEMENT_FLAG},
REVISION = #{REVISION},
STATUS = #{STATUS},
EDIT_DATE = NOW(),
WRITER = #{WRITER},
PARENT_PART_NO = #{PARENT_PART_NO},
SUB_MATERIAL = #{SUB_MATERIAL},
EO_DATE = #{EO_DATE},
DESIGN_DATE = #{DESIGN_DATE},
THICKNESS = #{THICKNESS},
WIDTH = #{WIDTH},
HEIGHT = #{HEIGHT},
OUT_DIAMETER = #{OUT_DIAMETER},
IN_DIAMETER = #{IN_DIAMETER},
LENGTH = #{LENGTH},
SUPPLY_CODE = #{SUPPLY_CODE},
MAKER = #{MAKER},
POST_PROCESSING = #{POST_PROCESSING},
MAJOR_CATEGORY = #{MAJOR_CATEGORY},
SUB_CATEGORY = #{SUB_CATEGORY}
</update>
<!-- Part 설변등록 -->
<update id="mergePartMngchangeDesign" parameterType="map">
INSERT INTO PART_MNG
(
OBJID,
PRODUCT_MGMT_OBJID,
CONTRACT_OBJID,
UPG_NO,
PART_NO,
PART_NAME,
UNIT,
QTY,
SPEC,
MATERIAL,
WEIGHT,
PART_TYPE,
REMARK,
ES_SPEC,
MS_SPEC,
CHANGE_TYPE,
CHANGE_OPTION,
DESIGN_APPLY_POINT,
MANAGEMENT_FLAG,
REVISION,
STATUS,
REG_DATE,
WRITER,
IS_LAST,
PARENT_PART_NO,
SUB_MATERIAL,
EO_NO,
EO_DATE,
DESIGN_DATE,
THICKNESS,
WIDTH,
HEIGHT,
OUT_DIAMETER,
IN_DIAMETER,
LENGTH,
MAKER,
POST_PROCESSING,
MAJOR_CATEGORY,
SUB_CATEGORY,
CODE1,
CODE2,
CODE3,
CODE4,
CODE5,
IS_NEW,
IS_LONGD
) VALUES (
#{OBJID}::NUMERIC,
#{PRODUCT_MGMT_OBJID},
#{CONTRACT_OBJID},
#{UPG_NO},
#{PART_NO},
#{PART_NAME},
#{UNIT},
#{QTY},
#{SPEC},
#{MATERIAL},
#{WEIGHT},
#{PART_TYPE},
#{REMARK},
#{ES_SPEC},
#{MS_SPEC},
#{CHANGE_TYPE},
#{CHANGE_OPTION},
<!-- #{CHANGE_OPTION_Arr}, -->
#{DESIGN_APPLY_POINT},
#{MANAGEMENT_FLAG},
UPPER(#{REVISION}),
#{STATUS},
NOW(),
#{WRITER},
<!--
'1',
-->
COALESCE(#{IS_LAST}, '0'),
#{PARENT_PART_NO},
#{SUB_MATERIAL},
#{EO_NO},
<!--
(SELECT 'EO'||TO_CHAR(NOW(),'yy')::VARCHAR ||'-'||LPAD((SELECT COALESCE(SUBSTR(MAX(EO_NO),6,8)::INTEGER+1,1) FROM part_mng WHERE EO_NO IS NOT NULL)||'', 4,'0')),
-->
#{EO_DATE},
#{DESIGN_DATE},
#{THICKNESS},
#{WIDTH},
#{HEIGHT},
#{OUT_DIAMETER},
#{IN_DIAMETER},
#{LENGTH},
#{MAKER},
#{POST_PROCESSING},
#{MAJOR_CATEGORY},
#{SUB_CATEGORY},
#{CODE1},
#{CODE2},
#{CODE3},
#{CODE4},
#{CODE5},
#{IS_NEW},
#{IS_LONGD}
) ON
CONFLICT (OBJID) DO
UPDATE
SET
PRODUCT_MGMT_OBJID = #{PRODUCT_MGMT_OBJID},
UPG_NO = #{UPG_NO},
PART_NO = #{PART_NO},
PART_NAME = #{PART_NAME},
UNIT = #{UNIT},
QTY = #{QTY},
SPEC = #{SPEC},
MATERIAL = #{MATERIAL},
WEIGHT = #{WEIGHT},
PART_TYPE = #{PART_TYPE},
REMARK = #{REMARK},
ES_SPEC = #{ES_SPEC},
MS_SPEC = #{MS_SPEC},
CHANGE_TYPE = #{CHANGE_TYPE},
CHANGE_OPTION = #{CHANGE_OPTION},
<!-- CHANGE_OPTION = #{CHANGE_OPTION_Arr}, -->
DESIGN_APPLY_POINT = #{DESIGN_APPLY_POINT},
MANAGEMENT_FLAG = #{MANAGEMENT_FLAG},
REVISION = #{REVISION},
STATUS = #{STATUS},
EDIT_DATE = NOW(),
WRITER = #{WRITER},
PARENT_PART_NO = #{PARENT_PART_NO},
SUB_MATERIAL = #{SUB_MATERIAL},
EO_DATE = #{EO_DATE},
DESIGN_DATE = #{DESIGN_DATE},
THICKNESS = #{THICKNESS},
WIDTH = #{WIDTH},
HEIGHT = #{HEIGHT},
OUT_DIAMETER = #{OUT_DIAMETER},
IN_DIAMETER = #{IN_DIAMETER},
LENGTH = #{LENGTH},
MAKER = #{MAKER},
POST_PROCESSING = #{POST_PROCESSING},
MAJOR_CATEGORY = #{MAJOR_CATEGORY},
SUB_CATEGORY = #{SUB_CATEGORY},
CODE1 = #{CODE1},
CODE2 = #{CODE2},
CODE3 = #{CODE3},
CODE4 = #{CODE4},
CODE5 = #{CODE5},
IS_NEW = #{IS_NEW},
IS_LONGD = #{IS_LONGD}
</update>
<update id="mergePartMngHistory" parameterType="map">
INSERT INTO PART_MNG_HISTORY
(
OBJID,
PRODUCT_MGMT_OBJID,
UPG_NO,
PART_NO,
PART_NAME,
UNIT,
QTY,
SPEC,
MATERIAL,
WEIGHT,
PART_TYPE,
REMARK,
ES_SPEC,
MS_SPEC,
CHANGE_TYPE,
CHANGE_OPTION,
DESIGN_APPLY_POINT,
MANAGEMENT_FLAG,
REVISION,
STATUS,
REG_DATE,
WRITER,
IS_LAST,
PARENT_PART_NO,
SUB_MATERIAL,
EO_NO,
EO_DATE,
DESIGN_DATE,
THICKNESS,
WIDTH,
HEIGHT,
OUT_DIAMETER,
IN_DIAMETER,
LENGTH,
CONTRACT_OBJID,
MAKER
) VALUES (
#{OBJID}::NUMERIC,
#{PRODUCT_MGMT_OBJID},
#{UPG_NO},
#{PART_NO},
#{PART_NAME},
#{UNIT},
#{QTY},
#{SPEC},
#{MATERIAL},
#{WEIGHT},
#{PART_TYPE},
#{REMARK},
#{ES_SPEC},
#{MS_SPEC},
#{CHANGE_TYPE},
#{CHANGE_OPTION},
#{DESIGN_APPLY_POINT},
#{MANAGEMENT_FLAG},
UPPER(#{REVISION}),
#{STATUS},
NOW(),
#{WRITER},
'0',
#{PARENT_PART_NO},
#{SUB_MATERIAL},
(SELECT EO_NO FROM PART_MNG WHERE OBJID = #{OBJID}),
#{EO_DATE},
#{DESIGN_DATE},
#{THICKNESS},
#{WIDTH},
#{HEIGHT},
#{OUT_DIAMETER},
#{IN_DIAMETER},
#{LENGTH},
#{CONTRACT_OBJID},
#{MAKER}
) ON
CONFLICT (OBJID) DO
UPDATE
SET
PRODUCT_MGMT_OBJID = #{PRODUCT_MGMT_OBJID},
UPG_NO = #{UPG_NO},
PART_NO = #{PART_NO},
PART_NAME = #{PART_NAME},
UNIT = #{UNIT},
QTY = #{QTY},
SPEC = #{SPEC},
MATERIAL = #{MATERIAL},
WEIGHT = #{WEIGHT},
PART_TYPE = #{PART_TYPE},
REMARK = #{REMARK},
ES_SPEC = #{ES_SPEC},
MS_SPEC = #{MS_SPEC},
CHANGE_TYPE = #{CHANGE_TYPE},
CHANGE_OPTION = #{CHANGE_OPTION},
DESIGN_APPLY_POINT = #{DESIGN_APPLY_POINT},
MANAGEMENT_FLAG = #{MANAGEMENT_FLAG},
REVISION = #{REVISION},
STATUS = #{STATUS},
EDIT_DATE = NOW(),
WRITER = #{WRITER},
PARENT_PART_NO = #{PARENT_PART_NO},
SUB_MATERIAL = #{SUB_MATERIAL},
EO_DATE = #{EO_DATE},
DESIGN_DATE = #{DESIGN_DATE},
THICKNESS = #{THICKNESS},
WIDTH = #{WIDTH},
HEIGHT = #{HEIGHT},
OUT_DIAMETER = #{OUT_DIAMETER},
IN_DIAMETER = #{IN_DIAMETER},
LENGTH = #{LENGTH},
CONTRACT_OBJID = (SELECT CONTRACT_OBJID FROM PART_MNG WHERE OBJID = #{OBJID}),
MAKER =#{MAKER}
</update>
<select id="overlapPartMng" parameterType="map" resultType="map">
SELECT
T.*
FROM <include refid="partMngBase"/> T
WHERE 1=1
AND T.OBJID != #{OBJID}
AND T.PART_NO = #{PART_NO}
<if test="REVISION != null and !''.equals(REVISION)">
AND T.REVISION = #{REVISION}
</if>
</select>
<select id="overlapPartMng2" parameterType="map" resultType="map">
SELECT
T.*
FROM PART_MNG T
WHERE 1=1
AND T.PART_NO = #{PART_NO}
</select>
<!-- PART 관리 목록 조회 -->
<select id="structureDescendingList_Backup" parameterType="map" resultType="map">
WITH RECURSIVE VIEW_BOM(
BOM_REPORT_OBJID,
PARENT_OBJID,
CHILD_OBJID,
PARENT_PART_NO,
PART_NO,
REGDATE,
PART_NO_TITLE,
PART_NAME,
QTY,
REV,
MATERIAL,
SPEC,
WEIGHT,
UNIT_TITLE,
PART_OBJID,
LEV,
PATH,
CYCLE
) AS (
SELECT
A.BOM_REPORT_OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.REGDATE,
B.PART_NO AS PART_NO_TITLE,
B.PART_NAME,
B.QTY,
B.REVISION AS REV,
B.MATERIAL,
B.SPEC,
B.WEIGHT,
B.UNIT_TITLE,
B.OBJID AS PART_OBJID,
1,
ARRAY [A.CHILD_OBJID::TEXT],
FALSE
FROM
(
SELECT
BPQ.*,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PART_NO) AS PART_MNG_NO,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PARENT_PART_NO) AS PARENT_PART_MNG_NO
FROM BOM_PART_QTY BPQ
) A,
<include refid="partMngBase"/> B,
PART_BOM_REPORT C
WHERE 1=1
AND C.OBJID = A.BOM_REPORT_OBJID
AND A.PART_MNG_NO = B.PART_NO
<!-- AND B.IS_LAST = '1' -->
AND (A.PARENT_PART_NO IS NULL OR A.PARENT_PART_NO = '')
UNION ALL
SELECT
A.BOM_REPORT_OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.REGDATE,
B.PART_NO AS PART_NO_TITLE,
B.PART_NAME,
B.QTY,
B.REVISION AS REV,
B.MATERIAL,
B.SPEC,
B.WEIGHT,
B.UNIT_TITLE,
B.OBJID AS PART_OBJID,
LEV + 1,
PATH||A.CHILD_OBJID::TEXT,
A.PARENT_OBJID = ANY(PATH)
FROM
(
SELECT
BPQ.*,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PART_NO) AS PART_MNG_NO,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PARENT_PART_NO) AS PARENT_PART_MNG_NO
FROM BOM_PART_QTY BPQ
) A,
<include refid="partMngBase"/> B,
PART_BOM_REPORT C,
VIEW_BOM D
WHERE 1=1
<!-- AND B.IS_LAST = '1' -->
AND C.OBJID = A.BOM_REPORT_OBJID
AND A.PART_MNG_NO = B.PART_NO
AND A.PARENT_OBJID = D.CHILD_OBJID
),VIEW_TEMP(
BOM_REPORT_OBJID,
PARENT_OBJID,
CHILD_OBJID,
PARENT_PART_NO,
PART_NO,
REGDATE,
PART_NO_TITLE,
PART_NAME,
QTY,
REV,
MATERIAL,
WEIGHT,
PART_OBJID,
LEV,
PATH1,
PART_ARRAY1,
CYCLE1
) AS (
SELECT
A.BOM_REPORT_OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.REGDATE,
A.PART_NO AS PART_NO_TITLE,
A.PART_NAME,
A.QTY,
A.REV,
A.MATERIAL,
A.WEIGHT,
A.PART_OBJID,
1,
ARRAY[A.PART_NO::TEXT],
ARRAY[A.PART_NO] AS PART_ARRAY1,
FALSE
FROM
VIEW_BOM A,
PART_BOM_REPORT B
WHERE 1=1
AND A.BOM_REPORT_OBJID::INTEGER = B.OBJID
<if test="search_oemObjId != null and !''.equals(search_oemObjId)">
AND B.OEM_OBJID = #{search_oemObjId}::NUMERIC
</if>
<if test="search_carObjId != null and !''.equals(search_carObjId)">
AND B.CAR_OBJID = #{search_carObjId}::NUMERIC
</if>
<if test="search_productObjId != null and !''.equals(search_productObjId)">
AND B.PRODUCT_OBJID = #{search_productObjId}
</if>
<if test="search_partNo != null and !''.equals(search_partNo)">
AND UPPER(A.PART_NO_TITLE) LIKE UPPER('%${search_partNo}%')
</if>
<if test="search_partName != null and !''.equals(search_partName)">
AND UPPER(A.PART_NAME) LIKE UPPER('%${search_partName}%')
</if>
UNION ALL
SELECT A.BOM_REPORT_OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.REGDATE,
A.PART_NO AS PART_NO_TITLE,
A.PART_NAME,
A.QTY,
A.REV,
A.MATERIAL,
A.WEIGHT,
A.PART_OBJID,
C.LEV+1,
PATH||A.PART_NO::TEXT,
C.PART_ARRAY1,
A.PART_NO = ANY(PART_ARRAY1) AS CYCLE1
FROM VIEW_BOM A,
PART_BOM_REPORT B,
VIEW_TEMP C
WHERE 1=1
AND A.BOM_REPORT_OBJID::INTEGER = B.OBJID
AND A.CHILD_OBJID = C.PARENT_OBJID
AND A.BOM_REPORT_OBJID = C.BOM_REPORT_OBJID
)
SELECT V.BOM_REPORT_OBJID,
V.PARENT_PART_NO,
V.PART_NO,
V.REGDATE,
<!-- V.PART_NO AS PART_NO_TITLE, -->
(SELECT o.part_no FROM part_mng AS o WHERE o.objid::NUMERIC = V.PART_NO::NUMERIC) AS PART_NO_TITLE,
V.PART_NAME,
V.QTY,
V.REV,
V.MATERIAL,
V.WEIGHT,
V.PART_OBJID,
V.LEV,
V.LEV AS LEVEL
<!-- ,(SELECT BOM_REPORT_OBJID
FROM VIEW_BOM VT
WHERE V.BOM_REPORT_OBJID = VT.BOM_REPORT_OBJID
AND VT.LEV = 1
) AS SUB_ROOT_OBJID ,
V.PART_NO_TITLE LPAD_PART_NO ,
(SELECT COUNT(*)
FROM VIEW_BOM VT
WHERE V.BOM_REPORT_OBJID = VT.BOM_REPORT_OBJID
AND V.PARENT_PART_NO = VT.PART_NO
) AS SUB_PART_CNT ,
(SELECT BOM_REPORT_OBJID
FROM VIEW_BOM VT
WHERE V.BOM_REPORT_OBJID = VT.BOM_REPORT_OBJID
AND VT.LEV = 1
) AS ROOT_OBJID -->
FROM VIEW_TEMP V
WHERE 1=1
ORDER BY REGDATE DESC,
LEV,
PATH1
</select>
<select id="structureDescendingList" parameterType="map" resultType="map">
SELECT ROW_NUMBER() OVER(ORDER BY REGDATE_ORG DESC) AS RNUM, AA.*
FROM (
SELECT DISTINCT
PBM.OBJID,
PBM.PRODUCT_MGMT_OBJID,
PBM.PRODUCT_MGMT_SPEC,
PBM.PRODUCT_MGMT_UPG,
PBM.PRODUCT_MGMT_VC,
PBM.STATUS,
CASE UPPER(PBM.STATUS)
WHEN 'CREATE' THEN '등록중'
WHEN 'DEPLOY' THEN '배포완료'
ELSE ''
END STATUS_TITLE,
PBM.WRITER,
(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = PBM.WRITER) AS DEPT_NAME,
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = PBM.WRITER) AS USER_NAME,
(SELECT PRODUCT_CODE FROM PRODUCT_MGMT AS O WHERE O.OBJID = PBM.PRODUCT_MGMT_OBJID) AS PRODUCT_CODE,
PBM.REV,
PBM.SPEC_NAME,
PBM.REGDATE AS REGDATE_ORG,
TO_CHAR(PBM.REGDATE, 'YYYY-MM-DD') AS REGDATE,
PBM.DEPLOY_DATE,
PBM.WRITER,
INFO.*
FROM BOM_PART_QTY A
LEFT JOIN PART_BOM_REPORT PBM
ON A.BOM_REPORT_OBJID = PBM.OBJID::TEXT
LEFT OUTER JOIN
(
SELECT
PMUD.*,
(SELECT model_CODE FROM product_mgmt_model O1
WHERE O1.product_category = (SELECT o.product_category from product_mgmt o WHERE o.objid = PMUD.product_objid)
AND O1.MODEL_NAME = (SELECT o.PRODUCT_CODE from product_mgmt o WHERE o.objid = PMUD.product_objid)
)||PMUD.UPG_CODE||'-'||PMUD.VC AS UPG_NO
FROM(
SELECT
DISTINCT
PMUD.OBJID AS DETAIL_OBJID,
PMUD.OBJID::VARCHAR AS CODE,
PMUD.UPG_NAME,
PMUD.UPG_NAME AS NAME,
PMUD.UPG_CODE AS CODE_CD,
PMUD.NOTE,
PMUD.TARGET_OBJID AS MASTER_OBJID,
PMUD.VC,
PMUD.PRODUCT_OBJID,
PMUD.UPG_CODE,
(SELECT SPEC_NAME FROM PRODUCT_MGMT_UPG_MASTER PMUM WHERE 1=1 AND PMUM.OBJID = PMUD.TARGET_OBJID) AS SPEC_NAME,
(SELECT PRODUCT_CODE FROM PRODUCT_MGMT PM WHERE 1=1 AND PM.OBJID = PMUD.PRODUCT_OBJID) AS PRODUCT_CODE
FROM
PRODUCT_MGMT_UPG_DETAIL PMUD
WHERE 1=1
) PMUD
) INFO
ON PBM.PRODUCT_MGMT_OBJID = INFO.PRODUCT_OBJID
AND PBM.PRODUCT_MGMT_SPEC = INFO.MASTER_OBJID
AND PBM.PRODUCT_MGMT_UPG = INFO.UPG_NO
LEFT OUTER JOIN PART_MNG PM
ON A.PART_NO = PM.OBJID::TEXT
WHERE 1=1
<if test="product_code != null and product_code != ''">
AND PBM.PRODUCT_MGMT_OBJID = #{product_code}::NUMERIC
</if>
<if test="product_mgmt_spec != null and product_mgmt_spec != ''">
AND PBM.PRODUCT_MGMT_SPEC = #{product_mgmt_spec}::NUMERIC
</if>
<if test="upg_no != null and upg_no != ''">
AND PBM.PRODUCT_MGMT_UPG = #{upg_no}
</if>
<if test="search_partNo != null and !''.equals(search_partNo)">
AND UPPER(PM.PART_NO) LIKE UPPER('%${search_partNo}%')
</if>
<if test="search_partName != null and !''.equals(search_partName)">
AND UPPER(PM.PART_NAME) LIKE UPPER('%${search_partName}%')
</if>
) AA
</select>
<select id="structureDescendingListPopup" parameterType="map" resultType="map">
WITH RECURSIVE VIEW_BOM_DESC AS (
SELECT A.PART_NO
, A.PARENT_PART_NO
, A.BOM_REPORT_OBJID
, A.REGDATE
, A.PART_NO AS ROOT_PART_NO
, 1 AS LEV
, ARRAY [A.PART_NO::TEXT] AS PATH
, FALSE AS CYCLE
FROM BOM_PART_QTY A, PART_MNG B, PART_BOM_REPORT C
WHERE 1=1
AND A.PART_NO = B.OBJID::TEXT
AND A.BOM_REPORT_OBJID = C.objid::TEXT
<if test="bom_report_objid != null and bom_report_objid != ''">
AND A.BOM_REPORT_OBJID = #{bom_report_objid}
</if>
<if test="product_code != null and product_code != ''">
AND C.PRODUCT_MGMT_OBJID = #{product_code}::NUMERIC
</if>
<if test="product_mgmt_spec != null and product_mgmt_spec != ''">
AND C.PRODUCT_MGMT_SPEC = #{product_mgmt_spec}::NUMERIC
</if>
<if test="upg_no != null and upg_no != ''">
AND C.PRODUCT_MGMT_UPG = #{upg_no}
</if>
<if test="search_oemObjId != null and !''.equals(search_oemObjId)">
AND B.OEM_OBJID = #{search_oemObjId}::NUMERIC
</if>
<if test="search_carObjId != null and !''.equals(search_carObjId)">
AND B.CAR_OBJID = #{search_carObjId}::NUMERIC
</if>
<if test="search_productObjId != null and !''.equals(search_productObjId)">
AND B.PRODUCT_OBJID = #{search_productObjId}
</if>
<if test="search_partNo != null and !''.equals(search_partNo)">
AND UPPER(B.PART_NO) LIKE UPPER('%${search_partNo}%')
</if>
<if test="search_partName != null and !''.equals(search_partName)">
AND UPPER(B.PART_NAME) LIKE UPPER('%${search_partName}%')
</if>
UNION ALL
SELECT A.PART_NO
, A.PARENT_PART_NO
, A.BOM_REPORT_OBJID
, A.REGDATE
, V.ROOT_PART_NO
, V.LEV + 1 AS LEV
, V.PATH||A.PART_NO::TEXT AS PATH
, A.PARENT_PART_NO = ANY(V.PATH) AS CYCLE
FROM BOM_PART_QTY A, VIEW_BOM_DESC V
WHERE 1=1
AND A.BOM_REPORT_OBJID = V.BOM_REPORT_OBJID
AND A.PART_NO = V.PARENT_PART_NO
)
SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
FROM (SELECT DISTINCT VB.LEV
, VB.BOM_REPORT_OBJID
, VB.ROOT_PART_NO
, VB.PART_NO
, VB.PATH
, VB.REGDATE
, (CASE WHEN VB.CYCLE IS NULL THEN 1 ELSE 0 END) AS LEAF
FROM VIEW_BOM_DESC VB
) T1
,<include refid="partMngBase"/> T2
WHERE T1.PART_NO = T2.OBJID::TEXT
ORDER BY T1.BOM_REPORT_OBJID, T1.LEV, T1.PATH, T1.REGDATE
</select>
<select id="structureAscendingListPopup" parameterType="map" resultType="map">
WITH RECURSIVE VIEW_BOM(
BOM_REPORT_OBJID,
OBJID,
PARENT_OBJID,
CHILD_OBJID,
PARENT_PART_NO,
PART_NO,
QTY,
REGDATE,
SEQ,
LEV,
PATH,
CYCLE
) AS (
SELECT
A.BOM_REPORT_OBJID,
A.OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.QTY,
A.REGDATE,
A.SEQ,
1,
ARRAY [A.CHILD_OBJID::TEXT],
FALSE
FROM
BOM_PART_QTY A
where 1=1
AND (A.PARENT_OBJID IS NULL OR A.PARENT_OBJID = '')
AND A.BOM_REPORT_OBJID = #{bom_report_objid}
UNION ALL
SELECT
B.BOM_REPORT_OBJID,
B.OBJID,
B.PARENT_OBJID,
B.CHILD_OBJID,
B.PARENT_PART_NO,
B.PART_NO,
B.QTY,
B.REGDATE,
B.SEQ,
LEV + 1,
PATH||B.CHILD_OBJID::TEXT,
B.PARENT_OBJID = ANY(PATH)
FROM
BOM_PART_QTY B
JOIN
VIEW_BOM
ON B.PARENT_OBJID = VIEW_BOM.CHILD_OBJID
AND VIEW_BOM.BOM_REPORT_OBJID = B.BOM_REPORT_OBJID
)
SELECT
V.BOM_REPORT_OBJID
,V.OBJID
,V.PARENT_OBJID
,V.CHILD_OBJID
,V.PARENT_PART_NO
,V.PART_NO AS PART_OBJID
,V.QTY
--,(SELECT PART_NAME FROM PART_MNG WHERE OBJID = V.PART_NO::INTEGER) AS PART_NAME
--,(SELECT PART_NO FROM PART_MNG WHERE OBJID = V.PART_NO::INTEGER) AS PART_NO
,(SELECT REVISION FROM PART_MNG WHERE OBJID = V.PART_NO::INTEGER) AS REVISION
,V.LEV
,(SELECT COUNT(*) FROM BOM_PART_QTY WHERE PARENT_OBJID = V.CHILD_OBJID) AS SUB_PART_CNT
,V.SEQ
, (CASE WHEN V.CYCLE IS NULL THEN 1 ELSE 0 END) AS LEAF
,T2.*
FROM VIEW_BOM V,
<include refid="partMngBase"/> T2
WHERE V.PART_NO = T2.OBJID::TEXT
ORDER BY V.SEQ
<!-- WITH RECURSIVE VIEW_BOM_DESC AS (
SELECT A.PART_NO
, A.PARENT_PART_NO
, A.BOM_REPORT_OBJID
, A.REGDATE
, A.PART_NO AS ROOT_PART_NO
, 1 AS LEV
, ARRAY [A.PART_NO::TEXT] AS PATH
, FALSE AS CYCLE
FROM BOM_PART_QTY A, PART_MNG B, PART_BOM_REPORT C
WHERE 1=1
AND A.PART_NO = B.OBJID::TEXT
AND A.BOM_REPORT_OBJID = C.objid::TEXT
<if test="bom_report_objid != null and bom_report_objid != ''">
AND A.BOM_REPORT_OBJID = #{bom_report_objid}
</if>
<if test="product_code != null and product_code != ''">
AND C.PRODUCT_MGMT_OBJID = #{product_code}::NUMERIC
</if>
<if test="product_mgmt_spec != null and product_mgmt_spec != ''">
AND C.PRODUCT_MGMT_SPEC = #{product_mgmt_spec}::NUMERIC
</if>
<if test="upg_no != null and upg_no != ''">
AND C.PRODUCT_MGMT_UPG = #{upg_no}
</if>
<if test="search_oemObjId != null and !''.equals(search_oemObjId)">
AND B.OEM_OBJID = #{search_oemObjId}::NUMERIC
</if>
<if test="search_carObjId != null and !''.equals(search_carObjId)">
AND B.CAR_OBJID = #{search_carObjId}::NUMERIC
</if>
<if test="search_productObjId != null and !''.equals(search_productObjId)">
AND B.PRODUCT_OBJID = #{search_productObjId}
</if>
<if test="search_partNo != null and !''.equals(search_partNo)">
AND UPPER(B.PART_NO) LIKE UPPER('%${search_partNo}%')
</if>
<if test="search_partName != null and !''.equals(search_partName)">
AND UPPER(B.PART_NAME) LIKE UPPER('%${search_partName}%')
</if>
UNION ALL
SELECT A.PART_NO
, A.PARENT_PART_NO
, A.BOM_REPORT_OBJID
, A.REGDATE
, V.ROOT_PART_NO
, V.LEV + 1 AS LEV
, V.PATH||A.PART_NO::TEXT AS PATH
, A.PARENT_PART_NO = ANY(V.PATH) AS CYCLE
FROM BOM_PART_QTY A, VIEW_BOM_DESC V
WHERE 1=1
AND A.BOM_REPORT_OBJID = V.BOM_REPORT_OBJID
AND A.PART_NO = V.PARENT_PART_NO
),
VIEW_BOM_ASC AS (
SELECT A.PART_NO
, A.PARENT_PART_NO
, A.BOM_REPORT_OBJID
, A.REGDATE
, A.PART_NO AS ROOT_PART_NO
, 1 AS LEV
, ARRAY [A.PART_NO::TEXT] AS PATH
, FALSE AS CYCLE
FROM BOM_PART_QTY A,
( /*검색된 ROOT PART_NO */
SELECT DISTINCT BOM_REPORT_OBJID, PART_NO
FROM ( SELECT VB.BOM_REPORT_OBJID, VB.PART_NO
,DENSE_RANK() OVER(PARTITION BY VB.BOM_REPORT_OBJID, VB.ROOT_PART_NO ORDER BY VB.LEV DESC) AS LEV_TOP
FROM VIEW_BOM_DESC VB
) T
WHERE LEV_TOP = 1
) B
WHERE 1=1
AND A.BOM_REPORT_OBJID = B.BOM_REPORT_OBJID
AND A.PART_NO = B.PART_NO
UNION ALL
SELECT A.PART_NO
, A.PARENT_PART_NO
, A.BOM_REPORT_OBJID
, A.REGDATE
, V.ROOT_PART_NO
, V.LEV + 1 AS LEV
, V.PATH||A.PART_NO::TEXT AS PATH
, A.PARENT_PART_NO = ANY(V.PATH) AS CYCLE
FROM BOM_PART_QTY A, VIEW_BOM_ASC V
WHERE 1=1
AND A.BOM_REPORT_OBJID = V.BOM_REPORT_OBJID
AND V.PART_NO = A.PARENT_PART_NO
)
SELECT T1.LEV, T1.BOM_REPORT_OBJID, T1.ROOT_PART_NO, T1.PATH, T1.LEAF, T2.*
FROM (SELECT VB.LEV
, VB.BOM_REPORT_OBJID
, VB.ROOT_PART_NO
, VB.PART_NO
, VB.PATH
, VB.REGDATE
, (CASE WHEN VB.CYCLE IS NULL THEN 1 ELSE 0 END) AS LEAF
FROM VIEW_BOM_ASC VB
) T1
,<include refid="partMngBase"/> T2
WHERE T1.PART_NO = T2.OBJID::TEXT
ORDER BY T1.BOM_REPORT_OBJID, T1.LEV, T1.PATH, T1.REGDATE -->
</select>
<select id="partMngListCnt" parameterType="map" resultType="map">
SELECT
CEIL(TOTAL_CNT/#{COUNT_PER_PAGE})::numeric::integer AS MAX_PAGE_SIZE,
TOTAL_CNT::integer
FROM (
SELECT
COUNT(1)::float TOTAL_CNT
FROM (
SELECT T.*
FROM <include refid="partMngBaseSimple"/> T
WHERE T.status='release'
) AS PMS_PART_MGMT
WHERE 1=1
<if test="product_code != null and product_code != ''">
AND PRODUCT_MGMT_OBJID = #{product_code}
</if>
<if test="upg_no != null and upg_no != ''">
AND UPG_NO = #{upg_no}
</if>
<if test="SEARCH_YEAR != null and SEARCH_YEAR != ''">
AND REG_DATE_YEAR_TITLE = #{SEARCH_YEAR}
</if>
<if test="SEARCH_PART_NO != null and SEARCH_PART_NO != ''">
AND UPPER(PART_NO) LIKE UPPER('%${SEARCH_PART_NO}%')
</if>
<if test="SEARCH_PART_NAME != null and SEARCH_PART_NAME != ''">
AND UPPER(PART_NAME) LIKE UPPER('%${SEARCH_PART_NAME}%')
</if>
<if test="SEARCH_MATERIAL != null and SEARCH_MATERIAL != ''">
AND UPPER(MATERIAL) LIKE UPPER('%${SEARCH_MATERIAL}%')
</if>
<if test="SEARCH_SPEC != null and SEARCH_SPEC != ''">
AND UPPER(SPEC) LIKE UPPER('%${SEARCH_SPEC}%')
</if>
<if test="SEARCH_PART_TYPE != null and SEARCH_PART_TYPE != ''">
AND PART_TYPE = #{SEARCH_PART_TYPE}
</if>
<!-- EO 기능 개발 후 추가 -->
<!-- <if test="SEARCH_EO != null and SEARCH_EO != ''">
AND UPPER(EO_NO) LIKE UPPER('%${SEARCH_EO}%')
</if>
<if test="SEARCH_EO_DATE_FROM != null and SEARCH_EO_DATE_FROM != ''">
AND EO_DATE <![CDATA[ >= ]]> #{SEARCH_EO_DATE_FROM}::TIMESTAMP
</if>
<if test="SEARCH_EO_DATE_TO != null and SEARCH_EO_DATE_TO != ''">
AND EO_DATE <![CDATA[ <= ]]> #{SEARCH_EO_DATE_TO}::TIMESTAMP
</if> -->
<if test="SEARCH_DESIGN_DATE_FROM != null and SEARCH_DESIGN_DATE_FROM != ''">
AND TO_DATE(DESIGN_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> #{SEARCH_DESIGN_DATE_FROM}::TIMESTAMP
</if>
<if test="SEARCH_DESIGN_DATE_TO != null and SEARCH_DESIGN_DATE_TO != ''">
AND TO_DATE(DESIGN_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> #{SEARCH_DESIGN_DATE_TO}::TIMESTAMP
</if>
<if test="SEARCH_WRITER != null and SEARCH_WRITER != ''">
AND WRITER = #{SEARCH_WRITER}
</if>
<if test="IS_LAST != null and IS_LAST != ''">
AND IS_LAST = #{IS_LAST}
</if>
<if test="EO != null and EO != ''">
AND EO_TEMP IS NULL OR EO_TEMP = ''
</if>
) AS T
</select>
<!-- PART 관리 목록 조회 -->
<select id="partMngList" parameterType="map" resultType="map">
SELECT
T.*
FROM(
<!--
<include refid="v_bom_qty"/>
-->
SELECT
<!--
ROW_NUMBER() OVER(ORDER BY PART_NO, (CASE WHEN REVISION LIKE 'RE%' THEN 0 ELSE 1 END, REVISION) desc ) RNUM,
-->
T.*
<!--
,NVL((SELECT SUM(NVL(QTY, '0')::NUMERIC) FROM INVENTORY_MGMT IM WHERE IM.PART_OBJID = T.OBJID)::VARCHAR, '0') STOCK_QTY
-->
,(COALESCE((SELECT SUM(CASE WHEN (RECEIPT_QTY IS NULL OR RECEIPT_QTY ='')
THEN 0
ELSE RECEIPT_QTY::NUMERIC END)
FROM INVENTORY_MGMT AS IM
INNER JOIN INVENTORY_MGMT_IN AS O
ON O.PARENT_OBJID = IM.OBJID
WHERE IM.PART_OBJID = T.OBJID
),0) - COALESCE((SELECT SUM(CASE WHEN (REQUEST_QTY IS NULL OR REQUEST_QTY ='')
THEN 0
ELSE REQUEST_QTY::NUMERIC END)
FROM INVENTORY_MGMT AS IM
INNER JOIN INVENTORY_MGMT_OUT AS O
ON O.PARENT_OBJID = IM.OBJID
WHERE IM.PART_OBJID = T.OBJID
),0)) AS STOCK_QTY
,(SELECT SUM(I.QTY) FROM INVENTORY_MNG I, RESOURCE_MNG RM
WHERE RM.OBJID = I.PARENT_OBJID
AND I.IS_LAST = 'Y'
AND RM.PART_OBJID = T.OBJID::varchar
GROUP BY I.PARENT_OBJID
) AS INVEN_TOTAL_QTY
FROM <include refid="partMngBaseSimple"/> T
<!--
LEFT OUTER JOIN VIEW_BOM V
ON V.PART_OBJID = T.OBJID
-->
WHERE 1=1
AND T.status='release'
<if test="product_code != null and product_code != ''">
AND PRODUCT_MGMT_OBJID = #{product_code}
</if>
<if test="upg_no != null and upg_no != ''">
AND UPG_NO = #{upg_no}
</if>
<if test="SEARCH_YEAR != null and SEARCH_YEAR != ''">
AND REG_DATE_YEAR_TITLE = #{SEARCH_YEAR}
</if>
<if test="SEARCH_PART_NO != null and SEARCH_PART_NO != ''">
AND UPPER(PART_NO) LIKE UPPER('%${SEARCH_PART_NO}%')
</if>
<if test="SEARCH_PART_NO_END != null and SEARCH_PART_NO_END != ''">
AND UPPER(PART_NO) LIKE UPPER('%${SEARCH_PART_NO_END}')
</if>
<if test="SEARCH_PART_NO_EQ != null and SEARCH_PART_NO_EQ != ''">
AND UPPER(PART_NO) = #{SEARCH_PART_NO_EQ}
</if>
<if test="SEARCH_PART_NAME_EQ != null and SEARCH_PART_NAME_EQ != ''">
AND UPPER(PART_NAME) = #{SEARCH_PART_NAME_EQ}
</if>
<if test="SEARCH_PART_NAME != null and SEARCH_PART_NAME != ''">
AND UPPER(PART_NAME) LIKE UPPER('%${SEARCH_PART_NAME}%')
</if>
<if test="SEARCH_MATERIAL != null and SEARCH_MATERIAL != ''">
AND UPPER(MATERIAL) LIKE UPPER('%${SEARCH_MATERIAL}%')
</if>
<if test="SEARCH_SPEC != null and SEARCH_SPEC != ''">
AND UPPER(SPEC) LIKE UPPER('%${SEARCH_SPEC}%')
</if>
<if test="SEARCH_PART_TYPE != null and SEARCH_PART_TYPE != ''">
AND PART_TYPE = #{SEARCH_PART_TYPE}
<!--
<choose>
<when test="'0001788'.equals(SEARCH_PART_TYPE)">구매품표준(241010)
AND PART_TYPE = '0001788'
AND IS_NEW = '1'
</when>
<otherwise>
</otherwise>
</choose>
-->
</if>
<if test="SEARCH_BOM_OBJID != null and SEARCH_BOM_OBJID != ''">
AND OBJID IN (SELECT PART_NO FROM BOM_PART_QTY Q
WHERE BOM_REPORT_OBJID = #{SEARCH_BOM_OBJID})
</if>
<!-- EO 기능 개발 후 추가 -->
<!-- <if test="SEARCH_EO != null and SEARCH_EO != ''">
AND UPPER(EO_NO) LIKE UPPER('%${SEARCH_EO}%')
</if>
<if test="SEARCH_EO_DATE_FROM != null and SEARCH_EO_DATE_FROM != ''">
AND EO_DATE <![CDATA[ >= ]]> #{SEARCH_EO_DATE_FROM}::TIMESTAMP
</if>
<if test="SEARCH_EO_DATE_TO != null and SEARCH_EO_DATE_TO != ''">
AND EO_DATE <![CDATA[ <= ]]> #{SEARCH_EO_DATE_TO}::TIMESTAMP
</if> -->
<if test="SEARCH_DESIGN_DATE_FROM != null and SEARCH_DESIGN_DATE_FROM != ''">
AND TO_DATE(DESIGN_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> #{SEARCH_DESIGN_DATE_FROM}::TIMESTAMP
</if>
<if test="SEARCH_DESIGN_DATE_TO != null and SEARCH_DESIGN_DATE_TO != ''">
AND TO_DATE(DESIGN_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> #{SEARCH_DESIGN_DATE_TO}::TIMESTAMP
</if>
<if test="SEARCH_WRITER != null and SEARCH_WRITER != ''">
AND WRITER = #{SEARCH_WRITER}
</if>
<if test="IS_LAST != null and IS_LAST != ''">
AND IS_LAST = #{IS_LAST}
</if>
<if test="SEARCH_REVISION_RELEASE != null and SEARCH_REVISION_RELEASE != ''">
AND IS_LAST = #{SEARCH_REVISION_RELEASE}
</if>
<if test="EO != null and EO != ''">
AND EO_TEMP IS NULL OR EO_TEMP = ''
</if>
<!-- <if test="STATUS != null and STATUS != ''">
AND STATUS = #{STATUS}
</if> -->
) T
WHERE 1=1
<!--
<if test="PAGE_END != null and PAGE_END != ''">
<![CDATA[ AND RNUM <= #{PAGE_END}::integer ]]>
</if>
<if test="PAGE_START != null and PAGE_START != ''">
<![CDATA[ AND RNUM >= #{PAGE_START}::integer ]]>
</if>
-->
</select>
<!-- PART 관리 목록 조회 -->
<select id="partMngGridList" parameterType="map" resultType="map">
SELECT
ROW_NUMBER() OVER(ORDER BY T.PART_NO, (CASE WHEN T.REVISION LIKE 'RE%' THEN 0 ELSE 1 END, T.REVISION) DESC ) NUM,
<!--
DENSE_RANK() OVER(PARTITION BY T.OBJID ORDER BY Q.SEQ) AS PART_SEQ,
-->
T.*
,DECODE(PART_TYPE, '0000063', '1', (SELECT SUM(CASE WHEN QTY = '' THEN '0' ELSE COALESCE(QTY, '0')END ::NUMERIC) FROM BOM_PART_QTY Q WHERE Q.LAST_PART_OBJID = T.OBJID)::CHARACTER ) BOM_QTY
<!--
,nvl((SELECT SUM(CASE WHEN QTY = '' THEN '0' ELSE COALESCE(QTY, '0')END ::NUMERIC) FROM BOM_PART_QTY Q WHERE Q.LAST_PART_OBJID = T.OBJID), QTY_P) BOM_QTY
,COALESCE(
(SELECT SUM(COALESCE(QTY, '0')::NUMERIC) FROM BOM_PART_QTY Q WHERE Q.LAST_PART_OBJID = T.OBJID)
,(SELECT SUM(COALESCE(QTY, '0')::NUMERIC) FROM BOM_PART_QTY Q WHERE Q.PART_NO = T.OBJID) ) BOM_QTY
,(SELECT SUM(I.QTY)
FROM INVENTORY_MNG I
, RESOURCE_MNG RM
WHERE RM.OBJID = I.PARENT_OBJID
AND I.IS_LAST = 'Y'
AND RM.PART_OBJID = T.OBJID::varchar
GROUP BY I.PARENT_OBJID
) AS INVEN_TOTAL_QTY
,Q.OBJID OBJID_QTY
,Q.CHILD_OBJID
,Q.QTY
,Q.QTY_TEMP
,(CASE WHEN Q.STATUS = 'deploy' THEN Q.QTY
WHEN (Q.QTY_TEMP IS NULL OR Q.QTY_TEMP = '') THEN Q.QTY
WHEN Q.STATUS != 'editing' WHEN
ELSE Q.QTY_TEMP END) Q_QTY
,(SELECT PART_NO||' '||PART_NAME FROM PART_MNG SP WHERE SP.OBJID = Q.PARENT_PART_NO) PARENT_PART_INFO
,B.CUSTOMER_OBJID
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID::VARCHAR = B.CUSTOMER_OBJID) AS CUSTOMER_NAME
,B.CONTRACT_OBJID
,(SELECT CUSTOMER_PROJECT_NAME FROM PROJECT_MGMT AS O WHERE O.OBJID = B.CONTRACT_OBJID) AS CUSTOMER_PROJECT_NAME
,(SELECT PROJECT_NO FROM PROJECT_MGMT AS O WHERE O.OBJID = B.CONTRACT_OBJID) AS PROJECT_NO
,B.UNIT_CODE
,(SELECT TASK_NAME FROM PMS_WBS_TASK_STANDARD AS O WHERE O.OBJID = B.UNIT_CODE) AS UNIT_NAME
-->
<!-- (SELECT CODE_NAME FROM COMM_CODE AS O WHERE O.CODE_ID = T.UNIT_CODE) AS UNIT_NAME,
(SELECT TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = T.UNIT_CODE) AS UNIT_NAME,
-->
FROM <include refid="partMngBaseSimple"/> T
<!--
FROM <include refid="partMngBase"/> T
-->
<!--
LEFT OUTER JOIN BOM_PART_QTY Q
ON (
(Q.LAST_PART_OBJID = T.OBJID
AND Q.STATUS IN ('deploy'))
OR
ON T.OBJID = Q.PART_NO
(T.OBJID = ( SELECT PM1.OBJID
FROM PART_MNG PM1
,PART_MNG PM2
WHERE PM1.IS_LAST = '1'
AND PM2.OBJID = Q.PART_NO
AND PM1.PART_NO = PM2.PART_NO)
AND Q.STATUS IN ('editing')
)
)
AND Q.STATUS IN ('beforeEdit', 'editing','deleting', 'deploy')
<choose>
<when test="ACTION_TYPE != null and !''.equals(ACTION_TYPE) and 'changeDesign'.equals(ACTION_TYPE)">
AND Q.STATUS IN ('deploy')
</when>
<otherwise>
AND Q.STATUS IN ('editing','deploy')
</otherwise>
</choose>
LEFT OUTER JOIN PART_BOM_REPORT B
ON B.OBJID = Q.BOM_REPORT_OBJID
-->
WHERE 1=1
AND T.status='release'
<if test="product_code != null and product_code != ''">
AND T.PRODUCT_MGMT_OBJID = #{product_code}
</if>
<if test="upg_no != null and upg_no != ''">
AND T.UPG_NO = #{upg_no}
</if>
<if test="SEARCH_YEAR != null and SEARCH_YEAR != ''">
AND T.REG_DATE_YEAR_TITLE = #{SEARCH_YEAR}
</if>
<if test="SEARCH_PART_NO != null and SEARCH_PART_NO != ''">
AND UPPER(T.PART_NO) LIKE UPPER('%${SEARCH_PART_NO}%')
</if>
<if test="SEARCH_PART_OBJID != null and SEARCH_PART_OBJID != ''">
AND T.OBJID = #{SEARCH_PART_OBJID}
</if>
<if test="SEARCH_PART_NAME != null and SEARCH_PART_NAME != ''">
AND UPPER(T.PART_NAME) LIKE UPPER('%${SEARCH_PART_NAME}%')
</if>
<if test="SEARCH_MATERIAL != null and SEARCH_MATERIAL != ''">
AND UPPER(T.MATERIAL) LIKE UPPER('%${SEARCH_MATERIAL}%')
</if>
<if test="SEARCH_SPEC != null and SEARCH_SPEC != ''">
AND UPPER(T.SPEC) LIKE UPPER('%${SEARCH_SPEC}%')
</if>
<if test="SEARCH_PART_TYPE != null and SEARCH_PART_TYPE != ''">
AND T.PART_TYPE = #{SEARCH_PART_TYPE}
</if>
<!-- 설계변경 PART조회 -->
<if test="customer_cd != null and customer_cd != ''">
AND B.CUSTOMER_OBJID = #{customer_cd}
</if>
<if test="project_name != null and project_name != ''">
AND B.CONTRACT_OBJID = #{project_name}
</if>
<if test="unit_code != null and unit_code != ''">
AND B.UNIT_CODE = #{unit_code}
</if>
<!-- EO 기능 개발 후 추가 -->
<!-- <if test="SEARCH_EO != null and SEARCH_EO != ''">
AND UPPER(EO_NO) LIKE UPPER('%${SEARCH_EO}%')
</if>
<if test="SEARCH_EO_DATE_FROM != null and SEARCH_EO_DATE_FROM != ''">
AND EO_DATE <![CDATA[ >= ]]> #{SEARCH_EO_DATE_FROM}::TIMESTAMP
</if>
<if test="SEARCH_EO_DATE_TO != null and SEARCH_EO_DATE_TO != ''">
AND EO_DATE <![CDATA[ <= ]]> #{SEARCH_EO_DATE_TO}::TIMESTAMP
</if> -->
<if test="SEARCH_DESIGN_DATE_FROM != null and SEARCH_DESIGN_DATE_FROM != ''">
AND TO_DATE(T.DESIGN_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> #{SEARCH_DESIGN_DATE_FROM}::TIMESTAMP
</if>
<if test="SEARCH_DESIGN_DATE_TO != null and SEARCH_DESIGN_DATE_TO != ''">
AND TO_DATE(T.DESIGN_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> #{SEARCH_DESIGN_DATE_TO}::TIMESTAMP
</if>
<if test="SEARCH_WRITER != null and SEARCH_WRITER != ''">
AND T.WRITER = #{SEARCH_WRITER}
</if>
<if test="IS_LAST != null and IS_LAST != ''">
AND T.IS_LAST = #{IS_LAST}
</if>
<if test="EO != null and EO != ''">
AND T.EO_TEMP IS NULL OR EO_TEMP = ''
</if>
<!-- <if test="STATUS != null and STATUS != ''">
AND STATUS = #{STATUS}
</if> -->
</select>
<select id="partMngListByBom" parameterType="map" resultType="map">
SELECT
T.*
FROM <include refid="partMngBase"/> T
WHERE 1=1
<!--
AND T.status='release'
-->
AND OBJID IN (SELECT NVL(LAST_PART_OBJID, PART_NO) FROM BOM_PART_QTY Q
WHERE BOM_REPORT_OBJID = #{SEARCH_BOM_OBJID}
<if test="qtyObjId != null and qtyObjId != ''">
AND Q.CHILD_OBJID = #{qtyObjId}
</if>
)
</select>
<!-- PART 관리 목록 조회 -->
<select id="partMngChangeGridList" parameterType="map" resultType="map">
SELECT
ROW_NUMBER() OVER(ORDER BY T.PART_NO, (CASE WHEN T.REVISION LIKE 'RE%' THEN 0 ELSE 1 END, T.REVISION) DESC ) NUM,
DENSE_RANK() OVER(PARTITION BY T.OBJID ORDER BY Q.SEQ) AS PART_SEQ,
T.*
,(SELECT SUM(I.QTY)
FROM INVENTORY_MNG I
, RESOURCE_MNG RM
WHERE RM.OBJID = I.PARENT_OBJID
AND I.IS_LAST = 'Y'
AND RM.PART_OBJID = T.OBJID::varchar
GROUP BY I.PARENT_OBJID
) AS INVEN_TOTAL_QTY
,Q.OBJID OBJID_QTY
,LAST_PART_OBJID
,Q.CHILD_OBJID
,Q.QTY
,Q.QTY_TEMP
,Q.STATUS Q_STATUS
,(CASE WHEN Q.STATUS = 'deploy' THEN Q.QTY
WHEN (Q.QTY_TEMP IS NULL OR Q.QTY_TEMP = '') THEN Q.QTY
<!--
WHEN Q.STATUS != 'editing' WHEN
-->
ELSE Q.QTY_TEMP END) Q_QTY
,(SELECT PART_NO||' '||PART_NAME FROM PART_MNG SP WHERE SP.OBJID = Q.PARENT_PART_NO) PARENT_PART_INFO
,B.CUSTOMER_OBJID
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID::VARCHAR = B.CUSTOMER_OBJID) AS CUSTOMER_NAME
,B.CONTRACT_OBJID
,(SELECT CUSTOMER_PROJECT_NAME FROM PROJECT_MGMT AS O WHERE O.OBJID = B.CONTRACT_OBJID) AS CUSTOMER_PROJECT_NAME
,(SELECT PROJECT_NO FROM PROJECT_MGMT AS O WHERE O.OBJID = B.CONTRACT_OBJID) AS PROJECT_NO
,B.UNIT_CODE
,(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = B.UNIT_CODE) AS UNIT_NAME
<!-- (SELECT CODE_NAME FROM COMM_CODE AS O WHERE O.CODE_ID = T.UNIT_CODE) AS UNIT_NAME,
(SELECT TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = T.UNIT_CODE) AS UNIT_NAME,
-->
FROM <include refid="partMngBaseSimple"/> T
<!--
FROM <include refid="partMngBase"/> T
-->
LEFT OUTER JOIN BOM_PART_QTY Q
ON (
(Q.LAST_PART_OBJID = T.OBJID
AND Q.STATUS IN ('deploy', 'beforeEdit'))
OR
<!--
ON T.OBJID = Q.PART_NO
-->
(T.OBJID = ( SELECT PM1.OBJID
FROM PART_MNG PM1
,PART_MNG PM2
WHERE PM1.IS_LAST = '1'
AND PM2.OBJID = Q.PART_NO
AND PM1.PART_NO = PM2.PART_NO)
AND Q.STATUS IN ('editing')
)
)
<!--
AND Q.STATUS IN ('beforeEdit', 'editing','deleting', 'deploy')
-->
<choose>
<when test="ACTION_TYPE != null and !''.equals(ACTION_TYPE) and 'changeDesign'.equals(ACTION_TYPE)">
AND Q.STATUS IN ('deploy', 'beforeEdit')
</when>
<otherwise>
AND Q.STATUS IN ('editing','deploy')
</otherwise>
</choose>
LEFT OUTER JOIN PART_BOM_REPORT B
ON B.OBJID = Q.BOM_REPORT_OBJID
WHERE 1=1
AND T.status='release'
<if test="product_code != null and product_code != ''">
AND T.PRODUCT_MGMT_OBJID = #{product_code}
</if>
<if test="upg_no != null and upg_no != ''">
AND T.UPG_NO = #{upg_no}
</if>
<if test="SEARCH_YEAR != null and SEARCH_YEAR != ''">
AND T.REG_DATE_YEAR_TITLE = #{SEARCH_YEAR}
</if>
<if test="SEARCH_PART_NO != null and SEARCH_PART_NO != ''">
AND UPPER(T.PART_NO) LIKE UPPER('%${SEARCH_PART_NO}%')
</if>
<if test="SEARCH_PART_OBJID != null and SEARCH_PART_OBJID != ''">
AND T.OBJID = #{SEARCH_PART_OBJID}
</if>
<if test="SEARCH_PART_NAME != null and SEARCH_PART_NAME != ''">
AND UPPER(T.PART_NAME) LIKE UPPER('%${SEARCH_PART_NAME}%')
</if>
<if test="SEARCH_MATERIAL != null and SEARCH_MATERIAL != ''">
AND UPPER(T.MATERIAL) LIKE UPPER('%${SEARCH_MATERIAL}%')
</if>
<if test="SEARCH_SPEC != null and SEARCH_SPEC != ''">
AND UPPER(T.SPEC) LIKE UPPER('%${SEARCH_SPEC}%')
</if>
<if test="SEARCH_PART_TYPE != null and SEARCH_PART_TYPE != ''">
AND T.PART_TYPE = #{SEARCH_PART_TYPE}
</if>
<!-- 설계변경 PART조회 -->
<if test="customer_cd != null and customer_cd != ''">
AND B.CUSTOMER_OBJID = #{customer_cd}
</if>
<if test="project_name != null and project_name != ''">
<!-- 240326 아래 조건으로 변경(동시 프로젝트 같은 파트를 동시에 조회하여 설변하도록)
AND B.CONTRACT_OBJID = #{project_name}
-->
AND EXISTS (SELECT 'E' FROM PROJECT_MGMT SP
WHERE SP.OBJID = B.CONTRACT_OBJID
AND EXISTS
(SELECT 'E' FROM CONTRACT_MGMT SC
WHERE SC.OBJID = SP.CONTRACT_OBJID
AND EXISTS
(SELECT 'E' FROM PROJECT_MGMT SP2
WHERE SC.OBJID = SP2.CONTRACT_OBJID
AND SP2.OBJID = #{project_name})
)
)
</if>
<!--
<if test="unit_code != null and unit_code != ''">
AND B.UNIT_CODE = #{unit_code}
</if> 240326 아래 name으로 가져오는것으로 변경
-->
<if test="unit_code !=null and unit_code != '' ">
AND EXISTS (SELECT 'E' FROM PMS_WBS_TASK AS O
WHERE O.OBJID = B.UNIT_CODE
AND ( UPPER(O.TASK_NAME) = (SELECT UPPER(TASK_NAME) FROM PMS_WBS_TASK ST WHERE ST.OBJID = #{unit_code})
OR UPPER(O.UNIT_NO || '-' || O.TASK_NAME) = (SELECT UPPER(TASK_NAME) FROM PMS_WBS_TASK ST WHERE ST.OBJID = #{unit_code}) ) )
</if>
<!-- EO 기능 개발 후 추가 -->
<!-- <if test="SEARCH_EO != null and SEARCH_EO != ''">
AND UPPER(EO_NO) LIKE UPPER('%${SEARCH_EO}%')
</if>
<if test="SEARCH_EO_DATE_FROM != null and SEARCH_EO_DATE_FROM != ''">
AND EO_DATE <![CDATA[ >= ]]> #{SEARCH_EO_DATE_FROM}::TIMESTAMP
</if>
<if test="SEARCH_EO_DATE_TO != null and SEARCH_EO_DATE_TO != ''">
AND EO_DATE <![CDATA[ <= ]]> #{SEARCH_EO_DATE_TO}::TIMESTAMP
</if> -->
<if test="SEARCH_DESIGN_DATE_FROM != null and SEARCH_DESIGN_DATE_FROM != ''">
AND TO_DATE(T.DESIGN_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> #{SEARCH_DESIGN_DATE_FROM}::TIMESTAMP
</if>
<if test="SEARCH_DESIGN_DATE_TO != null and SEARCH_DESIGN_DATE_TO != ''">
AND TO_DATE(T.DESIGN_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> #{SEARCH_DESIGN_DATE_TO}::TIMESTAMP
</if>
<if test="SEARCH_WRITER != null and SEARCH_WRITER != ''">
AND T.WRITER = #{SEARCH_WRITER}
</if>
<if test="IS_LAST != null and IS_LAST != ''">
AND T.IS_LAST = #{IS_LAST}
</if>
<if test="EO != null and EO != ''">
AND T.EO_TEMP IS NULL OR EO_TEMP = ''
</if>
<!-- <if test="STATUS != null and STATUS != ''">
AND STATUS = #{STATUS}
</if> -->
</select>
<!-- PART 관리 목록 조회 -->
<select id="partMngTempList" parameterType="map" resultType="map">
SELECT
T.*
FROM(SELECT
T.*,
ROW_NUMBER() OVER(ORDER BY EXCEL_UPLOAD_SEQ ASC) RNUM
FROM(
SELECT
T.*,
CASE
WHEN T.REVISION IS NULL THEN '0'
ELSE T.REVISION
END AS SORT,
O.PARTNER_TITLE
FROM
<include refid="partMngBase"/> T
LEFT OUTER JOIN (
SELECT
PART_OBJID,
ARRAY_TO_STRING(ARRAY_AGG(PARTNER_TITLE), ',') AS PARTNER_TITLE
FROM(
SELECT
OBJID,
PART_OBJID,
SEQ || '. ' ||(
SELECT
SUPPLY_NAME
FROM
ADMIN_SUPPLY_MNG
WHERE
OBJID::VARCHAR = PARTNER_OBJID::VARCHAR
) AS PARTNER_TITLE
FROM
ORDER_SPEC_MNG OSM
ORDER BY
SEQ
) OSMO GROUP BY PART_OBJID
) O
ON T.OBJID::VARCHAR = O.PART_OBJID::VARCHAR
WHERE 1=1
<if test="product_code != null and product_code != ''">
AND PRODUCT_MGMT_OBJID = #{product_code}
</if>
<if test="upg_no != null and upg_no != ''">
AND UPG_NO = #{upg_no}
</if>
<if test="SEARCH_PART_NO != null and SEARCH_PART_NO != ''">
AND UPPER(PART_NO) LIKE UPPER('%${SEARCH_PART_NO}%')
</if>
<if test="SEARCH_PART_NAME != null and SEARCH_PART_NAME != ''">
AND UPPER(PART_NAME) LIKE UPPER('%${SEARCH_PART_NAME}%')
</if>
<if test="SEARCH_MATERIAL != null and SEARCH_MATERIAL != ''">
AND UPPER(MATERIAL) LIKE UPPER('%${SEARCH_MATERIAL}%')
</if>
<if test="SEARCH_SPEC != null and SEARCH_SPEC != ''">
AND UPPER(SPEC) LIKE UPPER('%${SEARCH_SPEC}%')
</if>
<if test="SEARCH_PART_TYPE != null and SEARCH_PART_TYPE != ''">
AND PART_TYPE = #{SEARCH_PART_TYPE}
</if>
<if test="SEARCH_WRITER != null and SEARCH_WRITER != ''">
AND WRITER = #{SEARCH_WRITER}
</if>
<!-- <if test="IS_LAST != null and IS_LAST != ''"> -->
<!-- AND IS_LAST = #{IS_LAST} -->
<!-- </if> -->
<if test="STATUS != null and STATUS != ''">
AND STATUS = #{STATUS}
</if>
) T
ORDER BY RNUM,PART_NO,SORT ASC
) T
WHERE 1=1
<if test="PAGE_END != null and PAGE_END != ''">
<![CDATA[ AND RNUM <= #{PAGE_END}::integer ]]>
</if>
<if test="PAGE_START != null and PAGE_START != ''">
<![CDATA[ AND RNUM >= #{PAGE_START}::integer ]]>
</if>
</select>
<!-- PART 관리 목록 조회 -->
<select id="partMngTempGridList" parameterType="map" resultType="map">
SELECT
T.*,
CASE
WHEN T.REVISION IS NULL THEN '0'
ELSE T.REVISION
END AS SORT,
O.PARTNER_TITLE
,(SELECT PART_NO<!-- ||' '||PART_NAME --> FROM PART_MNG SP WHERE SP.OBJID = Q.PARENT_PART_NO) PARENT_PART_INFO
,Q.BOM_REPORT_OBJID
,Q.OBJID OBJID_QTY
,Q.CHILD_OBJID
,Q.QTY
,Q.QTY_TEMP
,(CASE WHEN Q.STATUS = 'deploy' THEN Q.QTY
WHEN (Q.QTY_TEMP IS NULL OR Q.QTY_TEMP = '') THEN NVL(Q.QTY, T.QTY)
<!--
WHEN Q.STATUS != 'editing' WHEN
-->
ELSE NVL(Q.QTY_TEMP, T.QTY) END) Q_QTY
FROM <include refid="partMngBaseSimple"/> T
<!--
FROM <include refid="partMngBase"/> T
-->
LEFT OUTER JOIN (
SELECT
PART_OBJID,
ARRAY_TO_STRING(ARRAY_AGG(PARTNER_TITLE), ',') AS PARTNER_TITLE
FROM(
SELECT
OBJID,
PART_OBJID,
SEQ || '. ' ||(
SELECT
SUPPLY_NAME
FROM
ADMIN_SUPPLY_MNG
WHERE
OBJID::VARCHAR = PARTNER_OBJID::VARCHAR
) AS PARTNER_TITLE
FROM
ORDER_SPEC_MNG OSM
ORDER BY
SEQ
) OSMO GROUP BY PART_OBJID
) O
ON T.OBJID::VARCHAR = O.PART_OBJID::VARCHAR
LEFT OUTER JOIN BOM_PART_QTY Q
ON (
<!--
(Q.LAST_PART_OBJID = T.OBJID
AND Q.STATUS IN ('deploy'))
OR
-->
<!--
ON T.OBJID = Q.PART_NO
-->
<!--
-->
(T.OBJID in ( SELECT DISTINCT PM1.OBJID
FROM PART_MNG PM1
,PART_MNG PM2
<!--
WHERE PM1.IS_LAST = '1'
-->
WHERE PM1.STATUS = 'changing'
AND PM2.STATUS != 'changing'
AND PM2.OBJID = Q.PART_NO
AND PM1.PART_NO = PM2.PART_NO)
AND Q.STATUS IN ('beforeEdit')
)
)
WHERE 1=1
<if test="product_code != null and product_code != ''">
AND T.PRODUCT_MGMT_OBJID = #{product_code}
</if>
<if test="upg_no != null and upg_no != ''">
AND T.UPG_NO = #{upg_no}
</if>
<if test="SEARCH_PART_NO != null and SEARCH_PART_NO != ''">
AND UPPER(T.PART_NO) LIKE UPPER('%${SEARCH_PART_NO}%')
</if>
<if test="SEARCH_PART_NAME != null and SEARCH_PART_NAME != ''">
AND UPPER(T.PART_NAME) LIKE UPPER('%${SEARCH_PART_NAME}%')
</if>
<if test="SEARCH_MATERIAL != null and SEARCH_MATERIAL != ''">
AND UPPER(T.MATERIAL) LIKE UPPER('%${SEARCH_MATERIAL}%')
</if>
<if test="SEARCH_SPEC != null and SEARCH_SPEC != ''">
AND UPPER(T.SPEC) LIKE UPPER('%${SEARCH_SPEC}%')
</if>
<if test="SEARCH_PART_TYPE != null and SEARCH_PART_TYPE != ''">
AND T.PART_TYPE = #{SEARCH_PART_TYPE}
</if>
<if test="WRITER != null and WRITER != ''">
AND T.WRITER = #{WRITER}
</if>
<!-- <if test="IS_LAST != null and IS_LAST != ''"> -->
<!-- AND IS_LAST = #{IS_LAST} -->
<!-- </if> -->
<if test="STATUS != null and STATUS != ''">
AND T.STATUS = #{STATUS}
</if>
<if test="STATUS_ARR != null">
AND T.STATUS IN <foreach item="item" index="index" collection="STATUS_ARR" open="(" separator="," close=")">#{item}</foreach>
</if>
ORDER BY PARENT_PART_INFO, T.PART_NO
</select>
<!-- PART 관리 목록 조회 -->
<select id="partMngTempListCnt" parameterType="map" resultType="map">
SELECT
CEIL(TOTAL_CNT/#{COUNT_PER_PAGE})::numeric::integer AS MAX_PAGE_SIZE,
TOTAL_CNT::integer
FROM (
SELECT
COUNT(1)::float TOTAL_CNT
FROM
<include refid="partMngBase"/> T
LEFT OUTER JOIN (
SELECT
PART_OBJID,
ARRAY_TO_STRING(ARRAY_AGG(PARTNER_TITLE), ',') AS PARTNER_TITLE
FROM(
SELECT
OBJID,
PART_OBJID,
SEQ || '. ' ||(
SELECT
SUPPLY_NAME
FROM
ADMIN_SUPPLY_MNG
WHERE
OBJID::VARCHAR = PARTNER_OBJID::VARCHAR
) AS PARTNER_TITLE
FROM
ORDER_SPEC_MNG OSM
ORDER BY
SEQ
) OSMO GROUP BY PART_OBJID
) O
ON T.OBJID::VARCHAR = O.PART_OBJID::VARCHAR
WHERE 1=1
<if test="product_code != null and product_code != ''">
AND PRODUCT_MGMT_OBJID = #{product_code}
</if>
<if test="upg_no != null and upg_no != ''">
AND UPG_NO = #{upg_no}
</if>
<if test="SEARCH_PART_NO != null and SEARCH_PART_NO != ''">
AND UPPER(PART_NO) LIKE UPPER('%${SEARCH_PART_NO}%')
</if>
<if test="SEARCH_PART_NAME != null and SEARCH_PART_NAME != ''">
AND UPPER(PART_NAME) LIKE UPPER('%${SEARCH_PART_NAME}%')
</if>
<if test="SEARCH_MATERIAL != null and SEARCH_MATERIAL != ''">
AND UPPER(MATERIAL) LIKE UPPER('%${SEARCH_MATERIAL}%')
</if>
<if test="SEARCH_SPEC != null and SEARCH_SPEC != ''">
AND UPPER(SPEC) LIKE UPPER('%${SEARCH_SPEC}%')
</if>
<if test="SEARCH_PART_TYPE != null and SEARCH_PART_TYPE != ''">
AND PART_TYPE = #{SEARCH_PART_TYPE}
</if>
<if test="SEARCH_WRITER != null and SEARCH_WRITER != ''">
AND WRITER = #{SEARCH_WRITER}
</if>
<if test="STATUS != null and STATUS != ''">
AND STATUS = #{STATUS}
</if>
) T
</select>
<!-- <select id="partMngListCnt" parameterType="map" resultType="map">
SELECT
CEIL(TOTAL_CNT/#{COUNT_PER_PAGE})::numeric::integer AS MAX_PAGE_SIZE,
TOTAL_CNT::integer
FROM (
SELECT
COUNT(1)::float TOTAL_CNT
FROM(
SELECT
T.*
FROM <include refid="partMngBase"/> T
WHERE 1=1
) T
)A WHERE 1=1
</select> -->
<!-- PART 관리 목록 조회 -->
<select id="getToConnectPartMngList" parameterType="map" resultType="map">
WITH RECURSIVE VIEW_BOM(
OBJID,
PART_NO,
BOM_REPORT_OBJID,
PARENT_PART_NO,
QTY,
LEV,
PATH,
CYCLE
) AS (
SELECT
A.OBJID,
A.PART_NO,
A.BOM_REPORT_OBJID,
A.PARENT_PART_NO,
A.QTY,
1,
ARRAY [A.PART_NO],
FALSE
FROM
PART_BOM_QTY A
WHERE 1=1
AND (A.PARENT_PART_NO IS NULL OR A.PARENT_PART_NO = '')
AND A.BOM_REPORT_OBJID = #{bomReportObjId}::NUMERIC
UNION ALL
SELECT
B.OBJID,
B.PART_NO,
B.BOM_REPORT_OBJID,
B.PARENT_PART_NO,
B.QTY,
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
T.*,
ROW_NUMBER() OVER(ORDER BY EXCEL_UPLOAD_SEQ ASC) RNUM
FROM(
SELECT
T.*
FROM
<include refid="partMngBase"/> T
WHERE 1=1
<!-- AND IS_LAST = '1' -->
<!-- AND NOT EXISTS
(
SELECT
1
FROM VIEW_BOM V
WHERE 1=1
AND V.PART_NO = T.PART_NO
) -->
<!-- EO 기능 말들고 추가 필요 -->
<if test="search_eo != null and search_eo != ''">
AND UPPER(EO_NO) LIKE UPPER('%${search_eo}%')
</if>
<if test="search_except_eo != null and search_except_eo != ''">
AND EO != #{search_except_eo}
AND (EO IS NULL OR EO = '' OR EO = '0')
</if>
<if test="search_eo_date_from != null and search_eo_date_from != ''">
AND EO_DATE <![CDATA[ >= ]]> #{search_eo_date_from}::TIMESTAMP
</if>
<if test="search_eo_date_to != null and search_eo_date_to != ''">
AND EO_DATE <![CDATA[ <= ]]> #{search_eo_date_to}::TIMESTAMP
</if>
<if test="search_product_mgmt_objid != null and search_product_mgmt_objid != ''">
AND PRODUCT_MGMT_OBJID = #{search_product_mgmt_objid}
</if>
<if test="search_part_no != null and search_part_no != ''">
AND UPPER(PART_NO) LIKE UPPER('%${search_part_no}%')
</if>
<if test="search_part_name != null and search_part_name != ''">
AND UPPER(PART_NAME) LIKE UPPER('%${search_part_name}%')
</if>
<if test="search_spec != null and search_spec != ''">
AND UPPER(SPEC) LIKE UPPER('%${search_spec}%')
</if>
<if test="search_maker != null and search_maker != ''">
AND UPPER(MAKER) LIKE UPPER('%${search_maker}%')
</if>
<if test="search_writer != null and search_writer != ''">
AND WRITER = #{search_writer}
</if>
<if test="IS_LAST != null and IS_LAST != ''">
AND IS_LAST = #{IS_LAST}
</if>
<if test="STATUS != null and STATUS != ''">
AND STATUS = #{STATUS}
</if>
<if test="searchTargetStatus != null and searchTargetStatus != '' and 'create'.equals(searchTargetStatus)">
AND STATUS = 'create'
</if>
<if test="searchTargetStatus != null and searchTargetStatus != '' and 'deploy'.equals(searchTargetStatus)">
AND STATUS = 'release'
</if>
<if test="searchTargetStatus != null and searchTargetStatus != '' and 'changeDesign'.equals(searchTargetStatus)">
AND STATUS = 'release'
</if>
<if test="search_product_mgmt_upg != null and !''.equals(search_product_mgmt_upg)">
AND UPG_NO = #{search_product_mgmt_upg}
</if>
ORDER BY PART_NO
) T
</select>
<!-- PART 관리 목록 조회 -->
<select id="partMngInfo" parameterType="map" resultType="map">
SELECT
T.*
FROM <include refid="partMngBaseSimple"/> T
<!--
FROM <include refid="partMngBase"/> T
-->
WHERE 1=1
AND T.OBJID = #{OBJID}
</select>
<!-- //구조등록 목록조회 -->
<select id="getBOMStandardStructureList" parameterType="map" resultType="map">
SELECT * FROM
(SELECT
ROW_NUMBER() OVER(ORDER BY REGDATE DESC) AS RNUM,
OBJID,
CUSTOMER_OBJID,
(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID::VARCHAR = T.CUSTOMER_OBJID) AS CUSTOMER_NAME,
CONTRACT_OBJID,
(SELECT CUSTOMER_PROJECT_NAME FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS CUSTOMER_PROJECT_NAME,
(SELECT PROJECT_NO FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PROJECT_NO,
UNIT_CODE,
<!-- (SELECT CODE_NAME FROM COMM_CODE AS O WHERE O.CODE_ID = T.UNIT_CODE) AS UNIT_NAME,
(SELECT TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = T.UNIT_CODE) AS UNIT_NAME,
-->
(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = T.UNIT_CODE) AS UNIT_NAME,
STATUS,
CASE UPPER(STATUS)
WHEN 'CREATE' THEN '등록중'
WHEN 'CHANGEDESIGN' THEN '설계변경미배포'
WHEN 'DEPLOY' THEN '배포완료'
ELSE ''
END STATUS_TITLE,
WRITER,
(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WRITER) AS DEPT_NAME,
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = WRITER) AS USER_NAME,
REGDATE AS REGDATE,
TO_CHAR(REGDATE, 'YYYY-MM-DD') AS REG_DATE,
DEPLOY_DATE,
REVISION,
<!-- (SELECT MAX(PM.REVISION) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR WHERE BP.BOM_REPORT_OBJID =T.OBJID) AS REVISION, -->
(SELECT MAX(PM.EO_NO) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR WHERE BP.BOM_REPORT_OBJID =T.OBJID) AS EO_NO,
(SELECT MAX(PM.EO_DATE) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR WHERE BP.BOM_REPORT_OBJID =T.OBJID) AS EO_DATE,
NOTE,
(SELECT COUNT(*) FROM BOM_PART_QTY AS A WHERE A.BOM_REPORT_OBJID = T.OBJID) AS BOM_CNT
FROM PART_BOM_REPORT AS T
WHERE 1=1
<if test="customer_cd != null and customer_cd != ''">
AND T.CUSTOMER_OBJID = #{customer_cd}
</if>
<if test="project_name != null and project_name != ''">
AND T.CONTRACT_OBJID = #{project_name}
</if>
<if test="project_no != null and project_no != ''">
AND T.CONTRACT_OBJID = #{project_no}
</if>
<if test="unit_code != null and unit_code != ''">
AND T.UNIT_CODE = #{unit_code}
</if>
<if test="unit_name_eq != null and unit_name_eq != ''">
AND EXISTS (SELECT 'E' FROM PMS_WBS_TASK AS O WHERE O.OBJID = T.UNIT_CODE AND (UPPER(O.TASK_NAME) = UPPER(#{unit_name_eq}) OR UPPER(O.UNIT_NO || '-' || O.TASK_NAME) = UPPER(#{unit_name_eq})) )
</if>
<if test="SEARCH_WRITER != null and !''.equals(SEARCH_WRITER)">
AND T.WRITER = #{SEARCH_WRITER}
</if>
<if test="SEARCH_OBJID != null and !''.equals(SEARCH_OBJID)">
AND T.OBJID = #{SEARCH_OBJID}
</if>
<if test="SEARCH_DEPLOY_DATE_FROM != null and SEARCH_DEPLOY_DATE_FROM != ''">
AND T.DEPLOY_DATE IS NOT NULL
AND TO_DATE(T.DEPLOY_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> #{SEARCH_DEPLOY_DATE_FROM}::TIMESTAMP
</if>
<if test="SEARCH_DEPLOY_DATE_TO != null and SEARCH_DEPLOY_DATE_TO != ''">
AND T.DEPLOY_DATE IS NOT NULL
AND TO_DATE(T.DEPLOY_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> #{SEARCH_DEPLOY_DATE_TO}::TIMESTAMP
</if>
<if test="status != null and !''.equals(status)">
AND T.STATUS = #{status}
</if>
<if test="checkArr != null and !''.equals(checkArr)">
AND T.OBJID = #{checkArr}
</if>
<if test="MULTI_MASTER_OBJID != null and !''.equals(MULTI_MASTER_OBJID)">
AND ( T.OBJID = #{MULTI_MASTER_OBJID}
OR T.MULTI_MASTER_OBJID = #{MULTI_MASTER_OBJID})
</if>
) AS T
WHERE 1=1
<if test="PAGE_END != null and PAGE_END != ''">
<![CDATA[ AND RNUM <= #{PAGE_END}::integer ]]>
</if>
<if test="PAGE_START != null and PAGE_START != ''">
<![CDATA[ AND RNUM >= #{PAGE_START}::integer ]]>
</if>
</select>
<!-- //구조등록 목록조회 -->
<select id="getBOMStandardStructureGridList" parameterType="map" resultType="map">
SELECT
ROW_NUMBER() OVER(ORDER BY REGDATE DESC) AS NUM,
OBJID,
CUSTOMER_OBJID,
(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID::VARCHAR = T.CUSTOMER_OBJID) AS CUSTOMER_NAME,
CONTRACT_OBJID,
(SELECT CUSTOMER_PROJECT_NAME FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS CUSTOMER_PROJECT_NAME,
(SELECT PROJECT_NO FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PROJECT_NO,
UNIT_CODE,
<!-- (SELECT CODE_NAME FROM COMM_CODE AS O WHERE O.CODE_ID = T.UNIT_CODE) AS UNIT_NAME,
(SELECT TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = T.UNIT_CODE) AS UNIT_NAME,
-->
(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = T.UNIT_CODE) AS UNIT_NAME,
STATUS,
CASE UPPER(STATUS)
WHEN 'CREATE' THEN '등록중'
WHEN 'CHANGEDESIGN' THEN '설계변경미배포'
WHEN 'DEPLOY' THEN '배포완료'
ELSE ''
END STATUS_TITLE,
WRITER,
(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WRITER) AS DEPT_NAME,
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = WRITER) AS USER_NAME,
(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WRITER) || '/' || (SELECT USER_NAME FROM USER_INFO WHERE USER_ID = WRITER) as DEPT_USER_NAME,
REGDATE AS REGDATE,
TO_CHAR(REGDATE, 'YYYY-MM-DD') AS REG_DATE,
DEPLOY_DATE,
REVISION,
<!-- (SELECT MAX(PM.REVISION) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR WHERE BP.BOM_REPORT_OBJID =T.OBJID) AS REVISION, -->
(SELECT MAX(PM.EO_NO) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR WHERE BP.BOM_REPORT_OBJID =T.OBJID) AS EO_NO,
(SELECT MAX(PM.EO_DATE) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR WHERE BP.BOM_REPORT_OBJID =T.OBJID) AS EO_DATE,
NOTE,
T.MULTI_YN
,T.MULTI_MASTER_YN
,T.MULTI_BREAK_YN
,T.MULTI_MASTER_OBJID
,(SELECT COUNT(*) FROM BOM_PART_QTY AS A WHERE A.BOM_REPORT_OBJID = T.OBJID) AS BOM_CNT
FROM
PART_BOM_REPORT AS T
WHERE 1=1
<if test="customer_cd != null and customer_cd != ''">
AND T.CUSTOMER_OBJID = #{customer_cd}
</if>
<if test="project_name != null and project_name != ''">
AND T.CONTRACT_OBJID = #{project_name}
</if>
<if test="unit_code != null and unit_code != ''">
AND T.UNIT_CODE = #{unit_code}
</if>
<if test="SEARCH_UNIT_NAME != null and SEARCH_UNIT_NAME != ''">
AND EXISTS (SELECT 'E' FROM PMS_WBS_TASK W WHERE W.OBJID = T.UNIT_CODE AND ( W.TASK_NAME LIKE UPPER('%'||#{SEARCH_UNIT_NAME}||'%')
OR W.UNIT_NO LIKE UPPER('%'||#{SEARCH_UNIT_NAME}||'%') ) )
</if>
<if test="SEARCH_WRITER != null and !''.equals(SEARCH_WRITER)">
AND T.WRITER = #{SEARCH_WRITER}
</if>
<if test="SEARCH_OBJID != null and !''.equals(SEARCH_OBJID)">
AND T.OBJID = #{SEARCH_OBJID}
</if>
<if test="SEARCH_DEPLOY_DATE_FROM != null and SEARCH_DEPLOY_DATE_FROM != ''">
AND T.DEPLOY_DATE IS NOT NULL
AND TO_DATE(T.DEPLOY_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> #{SEARCH_DEPLOY_DATE_FROM}::TIMESTAMP
</if>
<if test="SEARCH_DEPLOY_DATE_TO != null and SEARCH_DEPLOY_DATE_TO != ''">
AND T.DEPLOY_DATE IS NOT NULL
AND TO_DATE(T.DEPLOY_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> #{SEARCH_DEPLOY_DATE_TO}::TIMESTAMP
</if>
<if test="status != null and !''.equals(status)">
AND T.STATUS = #{status}
</if>
<if test="checkArr != null and !''.equals(checkArr)">
AND T.OBJID = #{checkArr}
</if>
<if test="SEARCH_UNIT_NAME != null and !''.equals(SEARCH_UNIT_NAME)">
AND (SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = T.UNIT_CODE) LIKE '%' || #{SEARCH_UNIT_NAME} || '%'
</if>
</select>
<select id="getBOMStandardStructureListCnt" parameterType="map" resultType="map">
SELECT
CEIL(TOTAL_CNT/#{COUNT_PER_PAGE})::numeric::integer AS MAX_PAGE_SIZE,
TOTAL_CNT::integer
FROM (
SELECT
COUNT(1)::float TOTAL_CNT
FROM (
SELECT
OBJID,
CUSTOMER_OBJID,
(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID::VARCHAR = T.CUSTOMER_OBJID) AS CUSTOMER_NAME,
CONTRACT_OBJID,
(SELECT CUSTOMER_PROJECT_NAME FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS CUSTOMER_PROJECT_NAME,
(SELECT PROJECT_NO FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PROJECT_NO,
UNIT_CODE,
(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = T.UNIT_CODE) AS UNIT_NAME,
STATUS,
CASE UPPER(STATUS)
WHEN 'CREATE' THEN '등록중'
WHEN 'DEPLOY' THEN '배포완료'
ELSE ''
END STATUS_TITLE,
WRITER,
(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WRITER) AS DEPT_NAME,
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = WRITER) AS USER_NAME,
REGDATE AS REGDATE,
TO_CHAR(REGDATE, 'YYYY-MM-DD') AS REG_DATE,
DEPLOY_DATE,
(SELECT MAX(PM.REVISION) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR WHERE BP.BOM_REPORT_OBJID =T.OBJID) AS REVISION,
(SELECT MAX(PM.EO_NO) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR WHERE BP.BOM_REPORT_OBJID =T.OBJID) AS EO_NO,
(SELECT MAX(PM.EO_DATE) FROM BOM_PART_QTY AS BP LEFT JOIN PART_MNG AS PM ON BP.PART_NO = PM.OBJID::VARCHAR WHERE BP.BOM_REPORT_OBJID =T.OBJID) AS EO_DATE,
NOTE,
(SELECT COUNT(*) FROM BOM_PART_QTY AS A WHERE A.BOM_REPORT_OBJID = T.OBJID) AS BOM_CNT
FROM PART_BOM_REPORT T
WHERE 1=1
) T
WHERE 1=1
<if test="customer_cd != null and customer_cd != ''">
AND T.CUSTOMER_OBJID = #{customer_cd}
</if>
<if test="project_name != null and project_name != ''">
AND T.CONTRACT_OBJID = #{project_name}
</if>
<if test="unit_code != null and unit_code != ''">
AND T.UNIT_CODE = #{unit_code}
</if>
<if test="unit_name_eq != null and unit_name_eq != ''">
AND EXISTS (SELECT 'E' FROM PMS_WBS_TASK AS O WHERE O.OBJID = T.UNIT_CODE AND (UPPER(O.TASK_NAME) = UPPER(#{unit_name_eq}) OR UPPER(O.UNIT_NO || '-' || O.TASK_NAME) = UPPER(#{unit_name_eq})) )
</if>
<if test="SEARCH_WRITER != null and !''.equals(SEARCH_WRITER)">
AND T.WRITER = #{SEARCH_WRITER}
</if>
<if test="SEARCH_OBJID != null and !''.equals(SEARCH_OBJID)">
AND T.OBJID = #{SEARCH_OBJID}
</if>
<if test="SEARCH_DEPLOY_DATE_FROM != null and SEARCH_DEPLOY_DATE_FROM != ''">
AND T.DEPLOY_DATE IS NOT NULL
AND TO_DATE(T.DEPLOY_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> #{SEARCH_DEPLOY_DATE_FROM}::TIMESTAMP
</if>
<if test="SEARCH_DEPLOY_DATE_TO != null and SEARCH_DEPLOY_DATE_TO != ''">
AND T.DEPLOY_DATE IS NOT NULL
AND TO_DATE(T.DEPLOY_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> #{SEARCH_DEPLOY_DATE_TO}::TIMESTAMP
</if>
<if test="status != null and !''.equals(status)">
AND T.STATUS = #{status}
</if>
) A
WHERE 1=1
</select>
<!-- rev버젼 추출 -->
<select id="getBOMStructureRev" parameterType="string" resultType="map">
SELECT
case when COUNT(1)<![CDATA[ < ]]> 1 THEN 1
else count(*)+1
END::varchar as rev
FROM PART_BOM_REPORT PBM
WHERE PBM.PRODUCT_MGMT_OBJID =#{product_code}::numeric
</select>
<!-- //bomObjId를 통해 BOM 구조등록 기본정보 조회 -->
<select id="getBOMStructureStandardInfoByObjId" parameterType="string" resultType="map">
SELECT
OBJID,
CUSTOMER_OBJID,
(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID::VARCHAR = T.CUSTOMER_OBJID) AS CUSTOMER_NAME,
CONTRACT_OBJID,
(SELECT CUSTOMER_PROJECT_NAME FROM CONTRACT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS CUSTOMER_PROJECT_NAME,
(SELECT PROJECT_NO FROM CONTRACT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PROJECT_NO,
(SELECT PROJECT_NO FROM PROJECT_MGMT AS O WHERE O.OBJID = T.CONTRACT_OBJID) AS PROJECT_NO2,
UNIT_CODE,
<!-- (SELECT CODE_NAME FROM COMM_CODE AS O WHERE O.CODE_ID = T.UNIT_CODE) AS UNIT_NAME, -->
(SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = T.UNIT_CODE) AS UNIT_NAME,
REVISION,
STATUS,
CASE UPPER(STATUS)
WHEN 'CREATE' THEN '등록중'
WHEN 'DEPLOY' THEN '배포완료'
ELSE ''
END STATUS_TITLE,
WRITER,
(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = WRITER) AS DEPT_NAME,
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = WRITER) AS USER_NAME,
REGDATE AS REGDATE,
TO_CHAR(REGDATE, 'YYYY-MM-DD') AS REG_DATE,
DEPLOY_DATE,
EO_NO,
EO_DATE,
NOTE
FROM PART_BOM_REPORT AS T
WHERE 1=1
<if test=" (OBJID == null or ''.equals(OBJID))
and ( (customer_cd == null or ''.equals(customer_cd))
or (project_name == null or ''.equals(project_name))
or (unit_code == null or ''.equals(unit_code)) ) ">
AND T.OBJID = '!@#$'
</if>
<if test="OBJID != null and OBJID != ''">
AND T.OBJID = #{OBJID}
</if>
<if test="customer_cd != null and customer_cd != ''">
AND T.CUSTOMER_OBJID = #{customer_cd}
</if>
<if test="project_name != null and project_name != ''">
AND T.CONTRACT_OBJID = #{project_name}
</if>
<if test="project_no != null and project_no != ''">
AND T.CONTRACT_OBJID = #{project_no}
</if>
<if test="unit_code != null and unit_code != ''">
AND T.UNIT_CODE = #{unit_code}
</if>
</select>
<select id="getBOMStructureStandardInfoByObjId_old" parameterType="string" resultType="map">
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_GROUP_OBJID
,(SELECT O.CODE_NAME FROM COMM_CODE O WHERE 1=1 AND O.CODE_ID = A.PRODUCT_GROUP_OBJID AND O.PARENT_CODE_ID = #{PRODUCT_GROUP_CODE}) AS PRODUCT_GROUP_NAME
, A.PRODUCT_OBJID
,(SELECT O.CODE_NAME FROM COMM_CODE O WHERE 1=1 AND O.CODE_ID = A.PRODUCT_OBJID AND O.PARENT_CODE_ID = A.PRODUCT_GROUP_OBJID) AS PRODUCT_NAME
, A.REGION_OBJID
, '' 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
AND OBJID = #{OBJID}::numeric
</select>
<!-- //BOM 구조등록 기본정보 등록 -->
<insert id="createBOMReportStructureStandardInfo" parameterType="map">
INSERT INTO PART_BOM_REPORT (
OBJID
, CUSTOMER_OBJID
, CONTRACT_OBJID
, UNIT_CODE
, STATUS
, WRITER
, REGDATE
,MULTI_YN
,MULTI_MASTER_YN
,MULTI_BREAK_YN
,MULTI_MASTER_OBJID
) VALUES (
#{OBJID}
, #{CUSTOMER_OBJID}
, #{CONTRACT_OBJID}
, #{UNIT_CODE}
, 'create'
, #{WRITER}
, NOW()
,#{MULTI_YN }
,#{MULTI_MASTER_YN }
,#{MULTI_BREAK_YN }
,#{MULTI_MASTER_OBJID }
) ON
CONFLICT (OBJID) DO
UPDATE
SET WRITER = #{WRITER}
</insert>
<insert id="createBOMReportStructureStandardInfo_old" parameterType="map">
INSERT INTO PART_BOM_REPORT (
OBJID
, OEM_OBJID
, CAR_OBJID
, PRODUCT_GROUP_OBJID
, PRODUCT_OBJID
, REGION_OBJID
, WRITER
, REGDATE
) VALUES (
${bomObjId}::NUMERIC
, ${oemObjId}::NUMERIC
, ${carObjId}::NUMERIC
, #{productGroupObjId}
, #{productObjId}
, ''
, #{writer}
, NOW()
)
</insert>
<select id="getBOMTreeList" parameterType="map" resultType="map">
WITH RECURSIVE VIEW_BOM(
BOM_REPORT_OBJID,
OBJID,
PARENT_OBJID,
CHILD_OBJID,
PARENT_PART_NO,
PART_NO,
LAST_PART_OBJID,
QTY,
QTY_TEMP,
REGDATE,
SEQ,
STATUS,
PART_MNG_NO,
PARENT_PART_MNG_NO,
LEV,
PATH,
PATH2,
CYCLE
) AS (
SELECT
A.BOM_REPORT_OBJID,
A.OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.LAST_PART_OBJID,
A.QTY,
A.QTY_TEMP,
A.REGDATE,
A.SEQ,
A.STATUS,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::varchar = A.PART_NO) AS PART_MNG_NO,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::varchar = A.PARENT_PART_NO) AS PARENT_PART_MNG_NO,
1,
ARRAY [A.CHILD_OBJID::TEXT],
ARRAY [A.SEQ::TEXT],
FALSE
FROM
BOM_PART_QTY A
WHERE 1=1
AND (A.PARENT_OBJID IS NULL OR A.PARENT_OBJID = '')
AND A.BOM_REPORT_OBJID = #{bomReportObjId}
<choose>
<when test="search_type != null and !''.equals(search_type) and 'working'.equals(search_type)">
AND (A.STATUS NOT IN ('deleting', 'deleted') OR A.STATUS is null)
<!--
AND (BQP.STATUS IS NULL OR BQP.STATUS = '')
-->
</when>
<otherwise>
AND STATUS IN ('beforeEdit', 'editing','deleting', 'deploy')
</otherwise>
</choose>
UNION ALL
SELECT
B.BOM_REPORT_OBJID,
B.OBJID,
B.PARENT_OBJID,
B.CHILD_OBJID,
B.PARENT_PART_NO,
B.PART_NO,
B.LAST_PART_OBJID,
B.QTY,
B.QTY_TEMP,
B.REGDATE,
B.SEQ,
B.STATUS,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::varchar = B.PART_NO) AS PART_MNG_NO,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::varchar = B.PARENT_PART_NO) AS PARENT_PART_MNG_NO,
LEV + 1,
PATH||B.CHILD_OBJID::TEXT,
PATH2||B.SEQ::TEXT,
B.PARENT_OBJID = ANY(PATH)
FROM
BOM_PART_QTY B
JOIN
VIEW_BOM
ON B.PARENT_OBJID = VIEW_BOM.CHILD_OBJID
AND VIEW_BOM.BOM_REPORT_OBJID = B.BOM_REPORT_OBJID
<choose>
<when test="search_type != null and !''.equals(search_type) and 'working'.equals(search_type)">
AND (B.STATUS NOT IN ('deleting', 'deleted') OR B.STATUS IS null)
<!--
AND (BQP.STATUS IS NULL OR BQP.STATUS = '')
-->
</when>
<otherwise>
AND B.STATUS IN ('beforeEdit', 'editing','deleting', 'deploy')
</otherwise>
</choose>
)
SELECT
V.BOM_REPORT_OBJID
,V.OBJID
,V.PARENT_OBJID
,V.CHILD_OBJID
,V.PARENT_PART_NO
,V.PART_NO PART_OBJID
,V.LAST_PART_OBJID BOM_LAST_PART_OBJID
<!-- ,V.PART_NO PART_NO_QTY -->
,( SELECT OBJID
FROM PART_MNG PM1
WHERE IS_LAST = '1'
AND PART_NO = (
( SELECT PM2.PART_NO
FROM PART_MNG PM2
WHERE PM2.OBJID = V.PART_NO)
)
) AS LAST_PART_OBJID
,V.QTY
,(CASE WHEN V.STATUS = 'deploy' THEN V.QTY
WHEN V.STATUS = 'beforeEdit' THEN V.QTY
WHEN V.STATUS != 'editing' AND (V.QTY_TEMP IS NULL OR V.QTY_TEMP = '') THEN V.QTY
ELSE COALESCE(V.QTY_TEMP, V.QTY) END) QTY_TEMP
<!-- 231208 위 설변된 최종part로 연결되게 수정
,( SELECT PART_NAME
FROM PART_MNG PM1
WHERE IS_LAST = '1'
AND PART_NO = (
( SELECT PM2.PART_NO
FROM PART_MNG PM2
WHERE PM2.OBJID = V.PART_NO)
)
) AS PART_NAME
,(SELECT PART_NO FROM PART_MNG WHERE OBJID = V.PART_NO) AS PART_NO
,(SELECT PART_NAME FROM PART_MNG WHERE OBJID = V.PART_NO) AS PART_NAME
,( SELECT REVISION
FROM PART_MNG PM1
WHERE IS_LAST = '1'
AND PART_NO = (
( SELECT PM2.PART_NO
FROM PART_MNG PM2
WHERE PM2.OBJID = V.PART_NO)
)
) AS REVISION
-->
,V.LEV AS LEVEL
,(SELECT COUNT(*) FROM BOM_PART_QTY WHERE PARENT_OBJID = V.CHILD_OBJID) AS SUB_PART_CNT
,V.SEQ
,V.STATUS
,(
SELECT CONTRACT_OBJID
FROM PART_MNG PM1
WHERE IS_LAST = '1'
AND PART_NO = (
(
SELECT PM2.PART_NO
FROM PART_MNG PM2
WHERE PM2.OBJID = V.PART_NO
)
)
) AS CONTRACT_OBJID
,P.OBJID LAST_PART_OBJID
,P.PART_NAME
,P.PART_NO
,(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
,(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_TYPE
,P.DESIGN_APPLY_POINT
,P.CHANGE_OPTION
,P.REVISION
,P.STATUS
,P.REG_DATE
,TO_CHAR(P.REG_DATE,'YYYY-MM-DD') AS PART_REGDATE_TITLE
,P.EDIT_DATE
,P.WRITER
,P.IS_LAST
,P.EO_DATE
,P.EO_NO
,P.EO_TEMP
,P.MAKER
,P.CONTRACT_OBJID
,P.THICKNESS
,P.WIDTH
,P.HEIGHT
,P.OUT_DIAMETER
,P.IN_DIAMETER
,P.LENGTH
,P.SOURCING_CODE
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID <!--AND STATUS = 'Active'--> AND F.DOC_TYPE IN ('3D_CAD')) AS CU01_CNT
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID <!--AND STATUS = 'Active'--> AND F.DOC_TYPE IN ('2D_DRAWING_CAD')) AS CU02_CNT
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID <!--AND STATUS = 'Active'--> AND F.DOC_TYPE IN ('2D_PDF_CAD')) AS CU03_CNT
,V.LEV
,(SELECT OBJID FROM VIEW_BOM VT WHERE V.BOM_REPORT_OBJID = VT.BOM_REPORT_OBJID AND VT.LEV = 1 ORDER BY SEQ LIMIT 1) AS ROOT_OBJID
,(SELECT OBJID FROM VIEW_BOM VT WHERE V.BOM_REPORT_OBJID = VT.BOM_REPORT_OBJID AND VT.LEV = 1 ORDER BY SEQ LIMIT 1) AS SUB_ROOT_OBJID
,( SELECT
CASE
WHEN COUNT(*) > 0 THEN 0
ELSE 1
END LEAF
FROM VIEW_BOM VT
WHERE V.BOM_REPORT_OBJID = VT.BOM_REPORT_OBJID
AND V.PART_MNG_NO = VT.PARENT_PART_MNG_NO
) AS LEAF
FROM VIEW_BOM V
INNER JOIN PART_MNG P
<!--
ON P.OBJID = V.PART_NO
배포된 마지막 part
ON P.PART_NO = (
(
SELECT PM2.PART_NO
FROM PART_MNG PM2
WHERE PM2.OBJID = V.PART_NO
)
)
AND P.IS_LAST = '1'
아래는 봄에 배포된(설변된) 파트 기준으로 조회(240904)
ON (V.LAST_PART_OBJID = P.OBJID OR V.PART_NO = P.OBJID)
-->
<choose>
<when test="search_type == null or ''.equals(search_type)">
ON P.OBJID = NVL(V.LAST_PART_OBJID, V.PART_NO)
</when>
<otherwise>
ON P.OBJID = NVL(V.LAST_PART_OBJID, V.PART_NO)
<!-- 250212 아래에서 위로 수정(아래는 무조건 최신 part로 연결됨)
ON P.OBJID = ( SELECT OBJID
FROM PART_MNG PM1
WHERE IS_LAST = '1'
AND PART_NO = (
( SELECT PM2.PART_NO
FROM PART_MNG PM2
WHERE PM2.OBJID = V.PART_NO)
)
)
-->
</otherwise>
</choose>
WHERE 1=1
<!-- <if test="LEVEL != null and LEVEL != ''">
AND V.LEV = #{LEVEL}
</if> -->
<!-- ORDER BY V.SEQ -->
ORDER BY V.PATH2
</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}::numeric
AND PART_NO IN <foreach item="item" index="index" collection="rightCheckedArr" open="(" separator="," close=")">#{item}</foreach>
</select>
<delete id="deletePartRelateInfo" parameterType="map">
WITH RECURSIVE VIEW_BOM(
OBJID,
PART_NO,
BOM_REPORT_OBJID,
PARENT_PART_NO,
PARENT_OBJID,
CHILD_OBJID,
QTY,
LEV,
PATH,
CYCLE
) AS (
SELECT
A.OBJID,
A.PART_NO,
A.BOM_REPORT_OBJID,
A.PARENT_PART_NO,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.QTY,
1,
ARRAY [A.CHILD_OBJID],
FALSE
FROM
BOM_PART_QTY A
WHERE 1=1
AND CHILD_OBJID = #{leftObjId}
AND A.BOM_REPORT_OBJID = #{OBJID}
UNION ALL
SELECT
B.OBJID,
B.PART_NO,
B.BOM_REPORT_OBJID,
B.PARENT_PART_NO,
B.PARENT_OBJID,
B.CHILD_OBJID,
B.QTY,
LEV + 1,
PATH,
B.PARENT_OBJID = ANY(PATH)
FROM
BOM_PART_QTY B
JOIN
VIEW_BOM
ON B.PARENT_OBJID = VIEW_BOM.CHILD_OBJID
AND VIEW_BOM.BOM_REPORT_OBJID = B.BOM_REPORT_OBJID
AND B.BOM_REPORT_OBJID = #{OBJID}
)
DELETE FROM BOM_PART_QTY
WHERE OBJID IN
(
SELECT OBJID FROM VIEW_BOM
)
<!-- 이상한 쿼리 -->
<!-- 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>
<delete id="deleteStatusPartRelateInfo" parameterType="map">
WITH RECURSIVE VIEW_BOM(
OBJID,
PART_NO,
BOM_REPORT_OBJID,
PARENT_PART_NO,
PARENT_OBJID,
CHILD_OBJID,
QTY,
LEV,
PATH,
CYCLE
) AS (
SELECT
A.OBJID,
A.PART_NO,
A.BOM_REPORT_OBJID,
A.PARENT_PART_NO,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.QTY,
1,
ARRAY [A.CHILD_OBJID],
FALSE
FROM
BOM_PART_QTY A
WHERE 1=1
AND CHILD_OBJID = #{leftObjId}
AND A.BOM_REPORT_OBJID = #{OBJID}
UNION ALL
SELECT
B.OBJID,
B.PART_NO,
B.BOM_REPORT_OBJID,
B.PARENT_PART_NO,
B.PARENT_OBJID,
B.CHILD_OBJID,
B.QTY,
LEV + 1,
PATH,
B.PARENT_OBJID = ANY(PATH)
FROM
BOM_PART_QTY B
JOIN
VIEW_BOM
ON B.PARENT_OBJID = VIEW_BOM.CHILD_OBJID
AND VIEW_BOM.BOM_REPORT_OBJID = B.BOM_REPORT_OBJID
AND B.BOM_REPORT_OBJID = #{OBJID}
AND B.STATUS NOT IN ('deleting', 'deleted')
)
UPDATE BOM_PART_QTY
SET EDIT_DATE = NOW(),
STATUS = 'deleting'
WHERE OBJID IN
(
SELECT OBJID FROM VIEW_BOM
)
</delete>
<delete id="deletePartRelateInfoHis" parameterType="map">
WITH RECURSIVE VIEW_BOM(
OBJID,
PART_NO,
BOM_REPORT_OBJID,
PARENT_PART_NO,
PARENT_OBJID,
CHILD_OBJID,
STATUS,
QTY,
LEV,
PATH,
CYCLE
) AS (
SELECT
A.OBJID,
A.PART_NO,
A.BOM_REPORT_OBJID,
A.PARENT_PART_NO,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.STATUS,
A.QTY,
1,
ARRAY [A.CHILD_OBJID],
FALSE
FROM
BOM_PART_QTY A
WHERE 1=1
AND CHILD_OBJID = #{leftObjId}
AND A.BOM_REPORT_OBJID = #{OBJID}
UNION ALL
SELECT
B.OBJID,
B.PART_NO,
B.BOM_REPORT_OBJID,
B.PARENT_PART_NO,
B.PARENT_OBJID,
B.CHILD_OBJID,
B.STATUS,
B.QTY,
LEV + 1,
PATH,
B.PARENT_OBJID = ANY(PATH)
FROM
BOM_PART_QTY B
JOIN
VIEW_BOM
ON B.PARENT_OBJID = VIEW_BOM.CHILD_OBJID
AND VIEW_BOM.BOM_REPORT_OBJID = B.BOM_REPORT_OBJID
AND B.BOM_REPORT_OBJID = #{OBJID}
)
DELETE FROM PART_MNG_HISTORY
WHERE QTY_CHILD_OBJID IN
(
SELECT CHILD_OBJID FROM VIEW_BOM V
WHERE V.STATUS = 'adding'
)
</delete>
<insert id="InsertPartTemp" parameterType="map">
INSERT INTO PART_MNG_TEMP
(
PART_REPORT_OBJID,
OBJID,
PART_NO,
PART_NAME,
UNIT,
QTY,
SPEC,
MATERIAL,
WEIGHT,
PART_TYPE,
REMARK,
SEQ,
SUB_MATERIAL,
PARENT_PART_NO
) VALUES
(
#{PART_REPORT_OBJID}::integer,
#{OBJID}::integer,
#{PART_NO},
#{PART_NAME},
#{UNIT},
#{QTY},
#{SPEC},
#{MATERIAL},
#{WEIGHT},
#{PART_TYPE},
#{REMARK},
nextval('part_mng_temp_seq'),
#{SUB_MATERIAL},
#{PARENT_PART_NO}
)
</insert>
<select id="getPartTempList" parameterType="map" resultType="map">
SELECT T.*
FROM (
SELECT DISTINCT ON(T.real_part_no) T.real_part_no
,
T.part_no,
T.part_name,
T.revision,
T.unit,
T.qty,
T.spec,
T.material,
T.sub_material,
t.parent_part_no,
T.weight,
T.part_type,
T.remark,
T.seq,
(SELECT COUNT(1) FROM part_mng AS PM WHERE PM.part_no = T.real_part_no AND PM.revision = COALESCE(T.revision, '')) AS CNT
FROM (SELECT DISTINCT
T.PART_NO,
T.PART_NAME,
CASE WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R1'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R2'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R3'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R4'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R5'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R6'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R7'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R8'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R9'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R01'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R02'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R03'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R04'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R05'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R06'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R07'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R08'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R09'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R10'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R11'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R12'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R13'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R14'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R15'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R16'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R17'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R18'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R19'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R20'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R21'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R22'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R23'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R24'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R25'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
ELSE T.part_no
END AS real_part_no,
CASE WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R1'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R2'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R3'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R4'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R5'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R6'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R7'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R8'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R9'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R01'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R02'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R03'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R04'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R05'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R06'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R07'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R08'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R09'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R10'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R11'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R12'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R13'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R14'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R15'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R16'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R17'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R18'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R19'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R20'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R21'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R22'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R23'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R24'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R25'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
ELSE NULL
END AS revision,
T.UNIT,
T.QTY,
T.SPEC,
T.MATERIAL,
T.SUB_MATERIAL,
T.PARENT_PART_NO,
T.WEIGHT,
T.PART_TYPE,
T.REMARK,
T.SEQ::numeric
FROM part_mng_temp AS T
WHERE PART_REPORT_OBJID = #{targetObjId}::integer) AS T
) AS T
ORDER BY SEQ ASC
</select>
<select id="getPartBomTempList" parameterType="map" resultType="map">
SELECT
T.PARENT_PART_NO,
T.PART_NO,
T.QTY,
T.SEQ::numeric
FROM BOM_PART_QTY_TEMP AS T
WHERE T.BOM_REPORT_OBJID = #{targetObjId}
ORDER BY T.SEQ ASC
</select>
<!-- //BOM 구조등록 -->
<insert id="relatePartTempInfo" parameterType="map">
INSERT INTO BOM_PART_QTY_TEMP
(
BOM_REPORT_OBJID,
OBJID,
PARENT_OBJID,
CHILD_OBJID,
PARENT_PART_NO,
PART_NO,
QTY,
REGDATE,
SEQ
) VALUES
(
#{BOM_REPORT_OBJID},
#{OBJID},
(SELECT PART_NO FROM BOM_PART_QTY_TEMP WHERE 1=1 AND PART_NO = PARENT_PART_NO),
#{CHILD_OBJID},
(SELECT OBJID FROM PART_MNG WHERE PART_NO = #{PARENT_PART_NO} AND REVISION = #{REVISION_}),
(SELECT OBJID FROM PART_MNG WHERE PART_NO = #{PART_NO} AND REVISION = #{REVISION}),
#{QTY}::INTEGER,
NOW(),
nextval('seq_bom_qty')
)
</insert>
<!-- //BOM 구조등록 -->
<insert id="relatePartInfo" parameterType="map">
INSERT INTO BOM_PART_QTY
(
BOM_REPORT_OBJID,
OBJID,
PARENT_OBJID,
CHILD_OBJID,
PARENT_PART_NO,
PART_NO,
QTY,
QTY_TEMP,
REGDATE,
WRITER,
SEQ,
STATUS,
LAST_PART_OBJID
<if test="DEPLOY_USER_ID != null and !''.equals(DEPLOY_USER_ID)">
,DEPLOY_USER_ID
</if>
<if test="DEPLOY_DATE != null and !''.equals(DEPLOY_DATE)">
,DEPLOY_DATE
</if>
) VALUES
(
#{BOM_REPORT_OBJID},
#{OBJID},
#{PARENT_OBJID},
#{CHILD_OBJID},
#{PARENT_PART_NO},
#{PART_NO},
<!-- (SELECT PART_NO FROM BOM_PART_QTY WHERE 1=1 AND CHILD_OBJID = #{PARENT_OBJID} AND BOM_REPORT_OBJID = #{BOM_REPORT_OBJID}),
#{PART_OBJID}, -->
#{QTY},
#{QTY_TEMP},
NOW(),
#{WRITER},
nextval('seq_bom_qty'),
#{STATUS},
#{LAST_PART_OBJID}
<if test="DEPLOY_USER_ID != null and !''.equals(DEPLOY_USER_ID)">
,#{DEPLOY_USER_ID}
</if>
<if test="DEPLOY_DATE != null and !''.equals(DEPLOY_DATE)">
,NOW()
</if>
)
</insert>
<!-- //BOM 엑셀구조등록 -->
<insert id="relateexcelPartInfo" parameterType="map">
INSERT INTO BOM_PART_QTY
(
SELECT
BOM_REPORT_OBJID,
OBJID,
(SELECT O.CHILD_OBJID FROM BOM_PART_QTY_TEMP AS O WHERE O.PART_NO =T.PARENT_PART_NO AND O.BOM_REPORT_OBJID = #{OBJID} AND T.seq > O.seq ORDER BY o.seq DESC LIMIT 1) AS PARENT_OBJID,
CHILD_OBJID,
PARENT_PART_NO,
PART_NO,
QTY,
now(),
seq
FROM BOM_PART_QTY_TEMP AS t
WHERE T.BOM_REPORT_OBJID = #{OBJID}
)
</insert>
<update id="structureQtySave" parameterType="map">
UPDATE BOM_PART_QTY
SET
<!--
QTY = #{QTY}::numeric
,STATUS = 'editing'
,STATUS = 'beforeEdit'
-->
STATUS = (CASE WHEN COALESCE(#{STATUS},'') = '' THEN STATUS ELSE #{STATUS} END)
,QTY_TEMP = (CASE WHEN COALESCE(#{QTY_TEMP}::VARCHAR,'') = '' THEN QTY_TEMP ELSE #{QTY_TEMP}::VARCHAR END)
WHERE CHILD_OBJID = #{CHILD_OBJID}
<!--
AND STATUS != 'adding'
AND QTY != #{QTY_TEMP}
-->
</update>
<update id="structureQtySaveHis" parameterType="map">
UPDATE PART_MNG_HISTORY
SET
<!--
QTY = #{QTY}::numeric
,STATUS = 'editing'
,STATUS = 'beforeEdit'
-->
QTY_TEMP = (CASE WHEN COALESCE(#{QTY_TEMP}::VARCHAR,'') = '' THEN QTY_TEMP ELSE #{QTY_TEMP}::VARCHAR END)
WHERE QTY_CHILD_OBJID = #{CHILD_OBJID}
AND BOM_REPORT_OBJID = #{BOM_REPORT_OBJID}
<!--
AND STATUS != 'adding'
AND QTY != #{QTY_TEMP}
-->
</update>
<update id="structureQtySave_org" parameterType="map">
UPDATE PART_BOM_QTY SET QTY = #{qty}::numeric 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 OR PARENT_PART_NO = '')
AND BOM_REPORT_OBJID = #{bomReportObjId}::numeric
</otherwise>
</choose>
</update>
<update id="partMngDeploy" parameterType="map">
UPDATE PART_MNG P
SET
<!--
-->
IS_LAST = '1',
EDIT_DATE = NOW(),
DEPLOY_DATE = NOW(),
STATUS = 'release',
REVISION = (CASE WHEN COALESCE(REVISION,'') = '' THEN 'RE' ELSE REVISION END),
<!-- 231215
-->
EO_DATE = TO_CHAR(NOW(),'YYYY-MM-DD'),
EO_NO = CASE
WHEN P.IS_LONGD = '1' THEN
(SELECT 'EOB'||TO_CHAR(NOW(),'yy')::VARCHAR ||'-'||LPAD((SELECT COALESCE(SUBSTR(MAX(EO_NO),7,8)::INTEGER+1,1)
FROM PART_MNG SP
WHERE SP.EO_NO IS NOT NULL
AND SP.EO_NO LIKE 'EOB' || TO_CHAR(NOW(),'yy') || '-%'
AND SP.PART_NO != P.PART_NO
AND SP.REVISION != P.REVISION
)||'', 4,'0'))
ELSE
(SELECT 'EO'||TO_CHAR(NOW(),'yy')::VARCHAR ||'-'||LPAD((SELECT COALESCE(SUBSTR(MAX(EO_NO),6,8)::INTEGER+1,1)
FROM PART_MNG SP
WHERE SP.EO_NO IS NOT NULL
AND SP.EO_NO LIKE 'EO' || TO_CHAR(NOW(),'yy') || '-%'
AND SP.PART_NO != P.PART_NO
AND SP.REVISION != P.REVISION
)||'', 4,'0'))
END
<!-- EO_NO = (SELECT 'EO'||TO_CHAR(NOW(),'yy')::VARCHAR ||'-'||LPAD((SELECT COALESCE(SUBSTR(MAX(EO_NO),6,8)::INTEGER+1,1) FROM PART_MNG SP
WHERE SP.EO_NO IS NOT NULL
AND SP.PART_NO != P.PART_NO 231211 같은 part일때 중복 채번 제거
AND SP.REVISION != P.REVISION
)||'', 4,'0')) -->
WHERE OBJID = #{OBJID}
</update>
<!-- 동일 Part IS_LAST 초기화 -->
<update id="partMngIsLastInit" parameterType="map">
UPDATE PART_MNG
SET
IS_LAST = '0',
EDIT_DATE = NOW()
WHERE PART_NO = (
SELECT
PART_NO
FROM PART_MNG
WHERE OBJID = #{OBJID}
)
</update>
<!-- Part 이력등록 -->
<update id="insertPartMngHistory" parameterType="map">
INSERT INTO PART_MNG_HISTORY
(
SELECT
P.OBJID::numeric,
P.PRODUCT_MGMT_OBJID,
P.UPG_NO,
P.PART_NO,
P.PART_NAME,
P.UNIT,
<!--
P.QTY,
(CASE WHEN (Q.QTY_TEMP IS NULL OR Q.QTY_TEMP = '') THEN P.QTY ELSE Q.QTY_TEMP END),
-->
Q.QTY,
P.SPEC,
P.MATERIAL,
P.WEIGHT,
P.PART_TYPE,
P.REMARK,
P.ES_SPEC,
P.MS_SPEC,
(CASE WHEN (#{CHANGE_OPTION} IS NULL OR #{CHANGE_OPTION} = '') THEN P.CHANGE_OPTION ELSE #{CHANGE_OPTION} END),
<!--
'',
-->
P.DESIGN_APPLY_POINT,
P.MANAGEMENT_FLAG,
P.REVISION,
P.STATUS,
P.REG_DATE,
NOW(),
#{WRITER},
P.IS_LAST,
P.EO_NO,
P.EO_TEMP,
P.EXCEL_UPLOAD_SEQ,
P.SOURCING_CODE,
P.SUB_MATERIAL,
<!--
P.PARENT_PART_NO,
#{PARENT_PART_NO},
'',
-->
(CASE WHEN (#{PARENT_PART_NO} IS NULL OR #{PARENT_PART_NO} = '') THEN Q.PARENT_PART_NO ELSE #{PARENT_PART_NO} END),
P.DESIGN_DATE,
P.EO_DATE,
P.DEPLOY_DATE
,P.THICKNESS
,P.WIDTH
,P.HEIGHT
,P.OUT_DIAMETER
,P.IN_DIAMETER
,P.LENGTH
,P.SUPPLY_CODE
,(CASE WHEN (#{CHANGE_TYPE} IS NULL OR #{CHANGE_TYPE} = '') THEN P.CHANGE_TYPE ELSE #{CHANGE_TYPE} END)
<!--
,''
-->
,P.CONTRACT_OBJID
,P.MAKER
,Q.QTY_TEMP
,(CASE WHEN (#{BOM_REPORT_OBJID} IS NULL OR #{BOM_REPORT_OBJID} = '') THEN Q.BOM_REPORT_OBJID ELSE #{BOM_REPORT_OBJID} END)
,(CASE WHEN (#{PARENT_PART_OBJID} IS NULL OR #{PARENT_PART_OBJID} = '') THEN Q.PARENT_PART_NO ELSE #{PARENT_PART_OBJID} END)
,(CASE WHEN (#{PARENT_QTY_CHILD_OBJID} IS NULL OR #{PARENT_QTY_CHILD_OBJID} = '') THEN Q.PARENT_OBJID ELSE #{PARENT_QTY_CHILD_OBJID} END)
<!--
,'','',''
-->
,Q.STATUS
,NOW()
,#{WRITER}
,#{HIS_STATUS}
,#{CHILD_OBJID}
,''
,NULL
,#{CHG_PART_OBJID}
,#{CHG_PART_NO}
,#{CHG_PART_REV}
FROM
PART_MNG P
LEFT OUTER JOIN BOM_PART_QTY Q
ON Q.CHILD_OBJID = #{CHILD_OBJID}
AND P.PART_NO IN (SELECT PM2.PART_NO
FROM PART_MNG PM2
<!--
,PART_MNG PM1
-->
WHERE PM2.OBJID = Q.PART_NO
<!--
AND PM1.IS_LAST = '1'
AND PM1.PART_NO = PM2.PART_NO
-->
)
<choose>
<when test="HIS_STATUS != null and !''.equals(HIS_STATUS) and 'DEPLOY'.equals(HIS_STATUS)">
<!-- 설변대상 PART에서 온 건 -->
AND Q.STATUS = 'beforeEdit'
<!--
AND Q.STATUS IN ('beforeEdit', 'editing','deleting', 'deploy')
-->
</when>
<when test="HIS_STATUS != null and !''.equals(HIS_STATUS) and 'DEL'.equals(HIS_STATUS)">
</when>
<when test="HIS_STATUS != null and !''.equals(HIS_STATUS) and 'ADD'.equals(HIS_STATUS)">
</when>
<otherwise>
</otherwise>
</choose>
WHERE P.OBJID = #{OBJID}
)
</update>
<!-- Part삭제시 이력등록 -->
<insert id="insertPartMngHistoryWhenDelPartRelation" parameterType="map">
WITH RECURSIVE VIEW_BOM(
OBJID,
PART_NO,
BOM_REPORT_OBJID,
PARENT_PART_NO,
PARENT_OBJID,
CHILD_OBJID,
QTY,
LEV,
PATH,
CYCLE
) AS (
SELECT
A.OBJID,
A.PART_NO,
A.BOM_REPORT_OBJID,
A.PARENT_PART_NO,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.QTY,
1,
ARRAY [A.CHILD_OBJID],
FALSE
FROM
BOM_PART_QTY A
WHERE 1=1
AND CHILD_OBJID = #{leftObjId}
AND A.BOM_REPORT_OBJID = #{OBJID}
UNION ALL
SELECT
B.OBJID,
B.PART_NO,
B.BOM_REPORT_OBJID,
B.PARENT_PART_NO,
B.PARENT_OBJID,
B.CHILD_OBJID,
B.QTY,
LEV + 1,
PATH,
B.PARENT_OBJID = ANY(PATH)
FROM
BOM_PART_QTY B
JOIN
VIEW_BOM
ON B.PARENT_OBJID = VIEW_BOM.CHILD_OBJID
AND VIEW_BOM.BOM_REPORT_OBJID = B.BOM_REPORT_OBJID
AND B.BOM_REPORT_OBJID = #{OBJID}
AND B.STATUS NOT IN ('deleting', 'deleted')
)
INSERT INTO PART_MNG_HISTORY
(
SELECT
P.OBJID::numeric,
P.PRODUCT_MGMT_OBJID,
P.UPG_NO,
P.PART_NO,
P.PART_NAME,
P.UNIT,
<!--
P.QTY,
(CASE WHEN (Q.QTY_TEMP IS NULL OR Q.QTY_TEMP = '') THEN P.QTY ELSE Q.QTY_TEMP END),
-->
Q.QTY,
P.SPEC,
P.MATERIAL,
P.WEIGHT,
P.PART_TYPE,
P.REMARK,
P.ES_SPEC,
P.MS_SPEC,
(CASE WHEN (#{CHANGE_OPTION} IS NULL OR #{CHANGE_OPTION} = '') THEN P.CHANGE_OPTION ELSE #{CHANGE_OPTION} END),
P.DESIGN_APPLY_POINT,
P.MANAGEMENT_FLAG,
P.REVISION,
P.STATUS,
P.REG_DATE,
NOW(),
#{WRITER},
P.IS_LAST,
P.EO_NO,
P.EO_TEMP,
P.EXCEL_UPLOAD_SEQ,
P.SOURCING_CODE,
P.SUB_MATERIAL,
<!--
P.PARENT_PART_NO,
#{PARENT_PART_NO},
-->
(CASE WHEN (#{PARENT_PART_NO} IS NULL OR #{PARENT_PART_NO} = '') THEN Q.PARENT_PART_NO ELSE #{PARENT_PART_NO} END),
P.DESIGN_DATE,
P.EO_DATE,
P.DEPLOY_DATE
,P.THICKNESS
,P.WIDTH
,P.HEIGHT
,P.OUT_DIAMETER
,P.IN_DIAMETER
,P.LENGTH
,P.SUPPLY_CODE
,(CASE WHEN (#{CHANGE_TYPE} IS NULL OR #{CHANGE_TYPE} = '') THEN P.CHANGE_TYPE ELSE #{CHANGE_TYPE} END)
,P.CONTRACT_OBJID
,P.MAKER
,Q.QTY_TEMP
,(CASE WHEN (#{BOM_REPORT_OBJID} IS NULL OR #{BOM_REPORT_OBJID} = '') THEN Q.BOM_REPORT_OBJID ELSE #{BOM_REPORT_OBJID} END)
,(CASE WHEN (#{PARENT_PART_OBJID} IS NULL OR #{PARENT_PART_OBJID} = '') THEN Q.PARENT_PART_NO ELSE #{PARENT_PART_OBJID} END)
,(CASE WHEN (#{PARENT_QTY_CHILD_OBJID} IS NULL OR #{PARENT_QTY_CHILD_OBJID} = '') THEN Q.PARENT_OBJID ELSE #{PARENT_QTY_CHILD_OBJID} END)
,Q.STATUS
,NOW()
,#{WRITER}
,#{HIS_STATUS}
,Q.CHILD_OBJID
,''
FROM
BOM_PART_QTY Q
INNER JOIN PART_MNG P
ON Q.LAST_PART_OBJID = P.OBJID
WHERE Q.OBJID IN
(
SELECT OBJID FROM VIEW_BOM
)
)
</insert>
<!-- Part 삭제 -->
<delete id="partMngDelete" parameterType="map">
<!-- DELETE FROM PART_MNG WHERE OBJID = #{OBJID}::numeric -->
DELETE FROM PART_MNG
WHERE 1=1
<![CDATA[ AND POSITION(OBJID||',' in #{checkArr}||',') > 0 ]]>
</delete>
<delete id="partMngDelete2" parameterType="map">
DELETE FROM PART_MNG
WHERE OBJID = #{OBJID}
</delete>
<!-- 설계변경중인 파트 삭제시 구조정보 상태 원복 -->
<update id="rollbackBomPartQtyStatus" parameterType="map">
UPDATE BOM_PART_QTY
SET STATUS = 'deploy'
,EDIT_DATE = NOW()
,EDITER = #{WRITER}
WHERE CHILD_OBJID = #{CHILD_OBJID}
AND STATUS = 'beforeEdit'
</update>
<select id="selectBomPartQtyChanging" parameterType="map" resultType="com.pms.common.UpperKeyMap">
select * from BOM_PART_QTY
WHERE 1=1
AND CHILD_OBJID = #{CHILD_OBJID}
AND STATUS = 'beforeEdit'
</select>
<!-- //정전개 조회 쿼리 -->
<select id="selectStructureAscendingMultiList수정전" parameterType="map" resultType="map">
WITH RECURSIVE VIEW_BOM(
OBJID,
PART_NO,
BOM_REPORT_OBJID,
PARENT_PART_NO,
LEV,
PATH,
PART_ARRAY,
CYCLE,
QTY,
REVISION,
MATERIAL,
WEIGHT,
SPEC,
UNIT_TITLE,
REMARK,
PART_OBJID
) AS (
SELECT
A.OBJID,
A.PART_NO,
A.BOM_REPORT_OBJID,
A.PARENT_PART_NO,
1,
ARRAY[A.PART_NO::TEXT],
ARRAY[A.PART_NO] AS PART_ARRAY,
FALSE AS CYCLE,
A.QTY,
B.REVISION,
B.MATERIAL,
B.WEIGHT,
B.SPEC,
(SELECT CODE_NAME FROM COMM_CODE WHERE 1=1 AND CODE_ID = B.UNIT) UNIT_TITLE,
B.REMARK,
B.OBJID AS PART_OBJID
FROM
PART_BOM_QTY A,
<include refid="partMngBase"/> B,
PART_BOM_REPORT C
WHERE 1=1
AND C.OBJID = A.BOM_REPORT_OBJID
AND A.PART_NO = B.PART_NO
<!-- AND B.IS_LAST = '1' -->
AND C.PRODUCT_MGMT_UPG IN(
SELECT OBJID FROM PRODUCT_MGMT_UPG_DETAIL AS O
WHERE O.TARGET_OBJID IN(
SELECT T.OBJID FROM PRODUCT_MGMT_UPG_MASTER AS T
WHERE T.TARGET_OBJID=#{root_code}::NUMERIC)
AND O.UPG_NAME = (SELECT T.CODE_NAME FROM COMM_CODE T
WHERE T.CODE_ID=#{code_id})
)
AND (A.PARENT_PART_NO IS NULL OR A.PARENT_PART_NO = '')
UNION ALL
SELECT
A.OBJID,
A.PART_NO,
A.BOM_REPORT_OBJID,
A.PARENT_PART_NO,
LEV + 1,
PATH||A.PART_NO::TEXT,
D.PART_ARRAY,
A.PART_NO = ANY(PART_ARRAY) AS CYCLE,
A.QTY,
B.REVISION,
B.MATERIAL,
B.WEIGHT,
B.SPEC,
(SELECT CODE_NAME FROM COMM_CODE WHERE 1=1 AND CODE_ID = B.UNIT) UNIT_TITLE,
B.REMARK,
B.OBJID AS PART_OBJID
FROM
PART_BOM_QTY A,
<include refid="partMngBase"/> B,
PART_BOM_REPORT C,
VIEW_BOM D
WHERE 1=1
<!-- AND B.IS_LAST = '1' -->
AND C.OBJID = A.BOM_REPORT_OBJID
AND A.PART_NO = B.PART_NO
AND A.PARENT_PART_NO = D.PART_NO
AND D.BOM_REPORT_OBJID = A.BOM_REPORT_OBJID
AND C.PRODUCT_MGMT_UPG IN(
SELECT OBJID FROM PRODUCT_MGMT_UPG_DETAIL AS O
WHERE O.TARGET_OBJID IN(
SELECT T.OBJID FROM PRODUCT_MGMT_UPG_MASTER AS T
WHERE T.TARGET_OBJID=#{root_code}::NUMERIC)
AND O.UPG_NAME = (SELECT T.CODE_NAME FROM COMM_CODE T
WHERE T.CODE_ID=#{code_id})
)
)
SELECT
V.LEV AS LEVEL
,V.LEV
,(SELECT OBJID FROM VIEW_BOM VT WHERE V.BOM_REPORT_OBJID = VT.BOM_REPORT_OBJID AND VT.LEV = 1) AS SUB_ROOT_OBJID
,V.PART_NO LPAD_PART_NO
,(
SELECT
CASE
WHEN COUNT(*) > 0 THEN 0
ELSE 1
END LEAF
FROM VIEW_BOM VT
WHERE V.BOM_REPORT_OBJID = VT.BOM_REPORT_OBJID
AND V.PART_NO = VT.PARENT_PART_NO
) AS LEAF
,V.OBJID
,V.PART_NO
,(SELECT PART_NAME FROM PART_MNG WHERE PART_NO = V.PART_NO) AS PART_NAME
,V.PARENT_PART_NO
,(SELECT COUNT(*) FROM VIEW_BOM VT WHERE V.BOM_REPORT_OBJID = VT.BOM_REPORT_OBJID AND V.PARENT_PART_NO = VT.PART_NO) AS SUB_PART_CNT
,(SELECT OBJID FROM VIEW_BOM VT WHERE V.BOM_REPORT_OBJID = VT.BOM_REPORT_OBJID AND VT.LEV = 1) AS ROOT_OBJID
,V.QTY
,V.REVISION
,V.MATERIAL
,V.WEIGHT
,V.SPEC
,V.UNIT_TITLE
,V.REMARK
,V.PART_OBJID
FROM VIEW_BOM V
WHERE 1=1
ORDER BY
BOM_REPORT_OBJID,
PATH
</select>
<select id="selectStructureAscendingMultiList" parameterType="map" resultType="map">
WITH RECURSIVE VIEW_BOM(
BOM_REPORT_OBJID,
PARENT_OBJID,
CHILD_OBJID,
PARENT_PART_NO,
PART_NO,
REGDATE,
PART_NO_TITLE,
PART_NAME,
QTY,
REV,
MATERIAL,
SPEC,
WEIGHT,
UNIT_TITLE,
PART_OBJID,
SEQ,
LEV,
PATH,
CYCLE,
PRODUCT_MGMT_UPG,
REMARK,
EO_NO,
EO_DATE
) AS (
SELECT
A.BOM_REPORT_OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.REGDATE,
B.PART_NO AS PART_NO_TITLE,
B.PART_NAME,
B.QTY,
B.REVISION AS REV,
B.MATERIAL,
B.SPEC,
B.WEIGHT,
B.UNIT_TITLE,
B.OBJID AS PART_OBJID,
A.SEQ,
1,
ARRAY [A.PART_NO::TEXT],
FALSE,
C.PRODUCT_MGMT_UPG,
B.REMARK,
(SELECT EO_NO FROM EO_MNG AS EO WHERE EO.OBJID::varchar = B.EO) AS EO_NO,
(SELECT TO_CHAR(REG_DATE,'YYYY-MM-DD') FROM EO_MNG AS EO WHERE EO.OBJID::varchar = B.EO) AS EO_DATE
FROM
(
SELECT
BPQ.*,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PART_NO) AS PART_MNG_NO,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PARENT_PART_NO) AS PARENT_PART_MNG_NO
FROM BOM_PART_QTY BPQ
) A,
(
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,
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
) B,
PART_BOM_REPORT C
WHERE 1=1
AND C.OBJID = A.BOM_REPORT_OBJID
AND A.PART_NO::numeric = B.OBJID::numeric
<!-- AND B.IS_LAST = '1' -->
AND (A.PARENT_PART_NO IS NULL OR A.PARENT_PART_NO = '')
AND C.PRODUCT_MGMT_UPG IN(SELECT (SELECT model_CODE FROM product_mgmt_model O1 WHERE
O1.product_category = (SELECT o.product_category from product_mgmt AS o WHERE o.objid = PMUD.product_objid)
AND O1.MODEL_NAME = (SELECT o.PRODUCT_CODE from product_mgmt AS o WHERE o.objid = PMUD.product_objid))||PMUD.UPG_CODE||'-'|| PMUD.VC FROM PRODUCT_MGMT_UPG_DETAIL AS PMUD
WHERE PMUD.TARGET_OBJID IN
(SELECT T.OBJID FROM PRODUCT_MGMT_UPG_MASTER AS T
WHERE T.TARGET_OBJID=#{root_code}::NUMERIC)
AND PMUD.upg_name = (SELECT T.CODE_NAME FROM COMM_CODE T WHERE T.CODE_ID=#{code_id})
)
UNION ALL
SELECT
A.BOM_REPORT_OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.REGDATE,
B.PART_NO AS PART_NO_TITLE,
B.PART_NAME,
B.QTY,
B.REVISION AS REV,
B.MATERIAL,
B.SPEC,
B.WEIGHT,
B.UNIT_TITLE,
B.OBJID AS PART_OBJID,
A.SEQ,
LEV + 1,
PATH||A.PART_NO::TEXT,
A.PARENT_PART_NO = ANY(PATH),
C.PRODUCT_MGMT_UPG,
B.REMARK,
(SELECT EO_NO FROM EO_MNG AS EO WHERE EO.OBJID::varchar = B.EO) AS EO_NO,
(SELECT TO_CHAR(REG_DATE,'YYYY-MM-DD') FROM EO_MNG AS EO WHERE EO.OBJID::varchar = B.EO) AS EO_DATE
FROM
(
SELECT
BPQ.*,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PART_NO) AS PART_MNG_NO,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PARENT_PART_NO) AS PARENT_PART_MNG_NO
FROM BOM_PART_QTY BPQ
) A,
(
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,
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
) B,
PART_BOM_REPORT C,
VIEW_BOM D
WHERE 1=1
<!-- AND B.IS_LAST = '1' -->
AND C.OBJID = A.BOM_REPORT_OBJID
AND A.PART_NO::numeric = B.OBJID::numeric
AND A.PARENT_OBJID = D.CHILD_OBJID
AND C.PRODUCT_MGMT_UPG IN(SELECT (SELECT model_CODE FROM product_mgmt_model O1 WHERE
O1.product_category = (SELECT o.product_category from product_mgmt AS o WHERE o.objid = PMUD.product_objid)
AND O1.MODEL_NAME = (SELECT o.PRODUCT_CODE from product_mgmt AS o WHERE o.objid = PMUD.product_objid))||PMUD.UPG_CODE||'-'|| PMUD.VC FROM PRODUCT_MGMT_UPG_DETAIL AS PMUD
WHERE PMUD.TARGET_OBJID IN
(SELECT T.OBJID FROM PRODUCT_MGMT_UPG_MASTER AS T
WHERE T.TARGET_OBJID=#{root_code}::NUMERIC)
AND PMUD.upg_name = (SELECT T.CODE_NAME FROM COMM_CODE T WHERE T.CODE_ID=#{code_id})
)
)
SELECT MIN(PATH ) PATH,
MIN(V.LEV ) LEV ,
MIN(V.PART_NO_TITLE) PART_NO ,
MIN(V.PART_NAME) AS PART_NAME ,
MIN(V.REV) AS REVISION,
MIN(V.MATERIAL ) AS MATERIAL ,
MIN(V.WEIGHT ) AS WEIGHT ,
MIN(V.SPEC ) AS SPEC ,
MIN(V.UNIT_TITLE ) AS UNIT_TITLE ,
MIN(V.REMARK ) AS REMARK ,
MIN(V.PART_OBJID ) AS PART_OBJID,
MIN(V.SEQ) AS SEQ,
MIN(V.EO_NO) AS EO_NO,
MIN(V.EO_DATE) AS EO_DATE
FROM VIEW_BOM V
WHERE 1=1
GROUP BY PATH, LEV, PART_NO, UNIT_TITLE, REV, MATERIAL, SPEC, WEIGHT, REMARK, PART_OBJID,SEQ
ORDER BY SEQ
<!-- WITH RECURSIVE VIEW_BOM(
OBJID,
PART_NO,
BOM_REPORT_OBJID,
PARENT_PART_NO,
LEV,
PATH,
PART_ARRAY,
CYCLE,
QTY,
REVISION,
MATERIAL,
WEIGHT,
SPEC,
UNIT_TITLE,
REMARK,
PART_OBJID
) AS (
SELECT
A.OBJID,
A.PART_NO,
A.BOM_REPORT_OBJID,
A.PARENT_PART_NO,
1,
ARRAY[A.PART_NO::TEXT],
ARRAY[A.PART_NO] AS PART_ARRAY,
FALSE AS CYCLE,
A.QTY,
B.REVISION,
B.MATERIAL,
B.WEIGHT,
B.SPEC,
(SELECT CODE_NAME FROM COMM_CODE WHERE 1=1 AND CODE_ID = B.UNIT) UNIT_TITLE,
B.REMARK,
B.OBJID AS PART_OBJID
FROM
PART_BOM_QTY A,
<include refid="partMngBase"/> B,
PART_BOM_REPORT C
WHERE 1=1
AND C.OBJID = A.BOM_REPORT_OBJID
AND A.PART_NO = B.PART_NO
AND B.IS_LAST = '1'
AND C.PRODUCT_MGMT_UPG IN(
SELECT UPG_CODE ||'-'|| (SELECT PRODUCT_CODE FROM PRODUCT_MGMT PM WHERE PM.OBJID = O.PRODUCT_OBJID) ||'-'|| VC FROM PRODUCT_MGMT_UPG_DETAIL AS O
WHERE O.TARGET_OBJID IN(
SELECT T.OBJID FROM PRODUCT_MGMT_UPG_MASTER AS T
WHERE T.TARGET_OBJID=#{root_code}::NUMERIC)
AND O.UPG_NAME = (SELECT T.CODE_NAME FROM COMM_CODE T
WHERE T.CODE_ID=#{code_id})
)
AND (A.PARENT_PART_NO IS NULL OR A.PARENT_PART_NO = '')
UNION ALL
SELECT
A.OBJID,
A.PART_NO,
A.BOM_REPORT_OBJID,
A.PARENT_PART_NO,
LEV + 1,
PATH||A.PART_NO::TEXT,
D.PART_ARRAY,
A.PART_NO = ANY(PART_ARRAY) AS CYCLE,
A.QTY,
B.REVISION,
B.MATERIAL,
B.WEIGHT,
B.SPEC,
(SELECT CODE_NAME FROM COMM_CODE WHERE 1=1 AND CODE_ID = B.UNIT) UNIT_TITLE,
B.REMARK,
B.OBJID AS PART_OBJID
FROM
PART_BOM_QTY A,
<include refid="partMngBase"/> B,
PART_BOM_REPORT C,
VIEW_BOM D
WHERE 1=1
AND B.IS_LAST = '1'
AND C.OBJID = A.BOM_REPORT_OBJID
AND A.PART_NO = B.PART_NO
AND A.PARENT_PART_NO = D.PART_NO
AND D.BOM_REPORT_OBJID = A.BOM_REPORT_OBJID
AND C.PRODUCT_MGMT_UPG IN(
SELECT UPG_CODE ||'-'|| (SELECT PRODUCT_CODE FROM PRODUCT_MGMT PM WHERE PM.OBJID = O.PRODUCT_OBJID) ||'-'|| VC FROM PRODUCT_MGMT_UPG_DETAIL AS O
WHERE O.TARGET_OBJID IN(
SELECT T.OBJID FROM PRODUCT_MGMT_UPG_MASTER AS T
WHERE T.TARGET_OBJID=#{root_code}::NUMERIC)
AND O.UPG_NAME = (SELECT T.CODE_NAME FROM COMM_CODE T
WHERE T.CODE_ID=#{code_id})
)
)
SELECT MIN(PATH ) PATH,
MIN(V.LEV ) LEV ,
MIN(V.PART_NO) PART_NO ,
MIN((SELECT PART_NAME
FROM PART_MNG
WHERE PART_NO = V.PART_NO
AND IS_LAST = 1::TEXT
)) AS PART_NAME ,
MIN(V.REVISION::NUMERIC) AS REVISION,
MIN(V.MATERIAL ) AS MATERIAL ,
MIN(V.WEIGHT ) AS WEIGHT ,
MIN(V.SPEC ) AS SPEC ,
MIN(V.UNIT_TITLE ) AS UNIT_TITLE ,
MIN(V.REMARK ) AS REMARK ,
MIN(V.PART_OBJID ) AS PART_OBJID
FROM VIEW_BOM V
WHERE 1=1
GROUP BY PATH, LEV, PART_NO, UNIT_TITLE, REVISION, MATERIAL, SPEC, WEIGHT, REMARK, PART_OBJID
ORDER BY PATH -->
</select>
<select id="selectStructureAscendingMultiListVC" parameterType="map" resultType="map">
WITH RECURSIVE VIEW_BOM(
BOM_REPORT_OBJID,
PARENT_OBJID,
CHILD_OBJID,
PARENT_PART_NO,
PART_NO,
REGDATE,
PART_NO_TITLE,
PART_NAME,
QTY,
REV,
MATERIAL,
SPEC,
WEIGHT,
UNIT_TITLE,
PART_OBJID,
SEQ,
LEV,
PATH,
CYCLE,
PRODUCT_MGMT_UPG
) AS (
SELECT
A.BOM_REPORT_OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.REGDATE,
B.PART_NO AS PART_NO_TITLE,
B.PART_NAME,
B.QTY,
B.REVISION AS REV,
B.MATERIAL,
B.SPEC,
B.WEIGHT,
B.UNIT_TITLE,
B.OBJID AS PART_OBJID,
A.SEQ,
1,
ARRAY [A.CHILD_OBJID::TEXT],
FALSE,
C.PRODUCT_MGMT_UPG
FROM
(
SELECT
BPQ.*,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PART_NO) AS PART_MNG_NO,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PARENT_PART_NO) AS PARENT_PART_MNG_NO
FROM BOM_PART_QTY BPQ
) A,
(
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,
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
) B,
PART_BOM_REPORT C
WHERE 1=1
AND C.OBJID = A.BOM_REPORT_OBJID
AND A.PART_MNG_NO = B.PART_NO
<!-- AND B.IS_LAST = '1' -->
AND (A.PARENT_PART_NO IS NULL OR A.PARENT_PART_NO = '')
AND C.PRODUCT_MGMT_UPG IN(SELECT (SELECT model_CODE FROM product_mgmt_model O1 WHERE
O1.product_category = (SELECT o.product_category from product_mgmt AS o WHERE o.objid = PMUD.product_objid)
AND O1.MODEL_NAME = (SELECT o.PRODUCT_CODE from product_mgmt AS o WHERE o.objid = PMUD.product_objid))||PMUD.UPG_CODE||'-'|| PMUD.VC FROM PRODUCT_MGMT_UPG_DETAIL AS PMUD
WHERE PMUD.TARGET_OBJID IN
(SELECT T.OBJID FROM PRODUCT_MGMT_UPG_MASTER AS T
WHERE T.TARGET_OBJID=#{root_code}::NUMERIC)
AND PMUD.upg_name = (SELECT T.CODE_NAME FROM COMM_CODE T WHERE T.CODE_ID=#{code_id})
)
UNION ALL
SELECT
A.BOM_REPORT_OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.REGDATE,
B.PART_NO AS PART_NO_TITLE,
B.PART_NAME,
B.QTY,
B.REVISION AS REV,
B.MATERIAL,
B.SPEC,
B.WEIGHT,
B.UNIT_TITLE,
B.OBJID AS PART_OBJID,
A.SEQ,
LEV + 1,
PATH||A.CHILD_OBJID::TEXT,
A.PARENT_OBJID = ANY(PATH),
C.PRODUCT_MGMT_UPG
FROM
(
SELECT
BPQ.*,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PART_NO) AS PART_MNG_NO,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PARENT_PART_NO) AS PARENT_PART_MNG_NO
FROM BOM_PART_QTY BPQ
) A,
(
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,
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
) B,
PART_BOM_REPORT C,
VIEW_BOM D
WHERE 1=1
<!-- AND B.IS_LAST = '1' -->
AND C.OBJID = A.BOM_REPORT_OBJID
AND A.PART_MNG_NO = B.PART_NO
AND A.PARENT_OBJID = D.CHILD_OBJID
AND C.PRODUCT_MGMT_UPG IN(SELECT (SELECT model_CODE FROM product_mgmt_model O1 WHERE
O1.product_category = (SELECT o.product_category from product_mgmt AS o WHERE o.objid = PMUD.product_objid)
AND O1.MODEL_NAME = (SELECT o.PRODUCT_CODE from product_mgmt AS o WHERE o.objid = PMUD.product_objid))||PMUD.UPG_CODE||'-'|| PMUD.VC FROM PRODUCT_MGMT_UPG_DETAIL AS PMUD
WHERE PMUD.TARGET_OBJID IN
(SELECT T.OBJID FROM PRODUCT_MGMT_UPG_MASTER AS T
WHERE T.TARGET_OBJID=#{root_code}::NUMERIC)
AND PMUD.upg_name = (SELECT T.CODE_NAME FROM COMM_CODE T WHERE T.CODE_ID=#{code_id})
)
)
SELECT DISTINCT
SPLIT_PART(V.PRODUCT_MGMT_UPG, '-', 2) AS VC
FROM VIEW_BOM V
ORDER BY 1
<!-- WITH RECURSIVE VIEW_BOM
(
OBJID,
PART_NO,
BOM_REPORT_OBJID,
PATH,
PART_ARRAY,
CYCLE,
QTY,
PRODUCT_MGMT_UPG
) AS
( SELECT A.OBJID,
A.PART_NO,
A.BOM_REPORT_OBJID,
ARRAY[A.PART_NO::TEXT],
ARRAY[A.PART_NO] AS PART_ARRAY,
FALSE AS CYCLE,
A.QTY,
C.PRODUCT_MGMT_UPG
FROM part_bom_qty A,
part_mng B,
part_bom_report C
WHERE 1=1
AND A.PART_NO = B.PART_NO
AND B.IS_LAST = '1'
AND A.BOM_REPORT_OBJID = C.OBJID
AND C.PRODUCT_MGMT_UPG IN
(SELECT UPG_CODE ||'-'|| (SELECT PRODUCT_CODE FROM PRODUCT_MGMT PM WHERE PM.OBJID = O.PRODUCT_OBJID) ||'-'|| VC FROM PRODUCT_MGMT_UPG_DETAIL AS O
WHERE O.TARGET_OBJID IN
(SELECT T.OBJID FROM PRODUCT_MGMT_UPG_MASTER AS T
WHERE T.TARGET_OBJID=#{root_code}::NUMERIC )
AND O.UPG_NAME = (SELECT T.CODE_NAME FROM COMM_CODE T WHERE T.CODE_ID=#{code_id})
)
AND ( A.PARENT_PART_NO IS NULL OR A.PARENT_PART_NO = '' )
UNION ALL
SELECT A.OBJID,
A.PART_NO,
A.BOM_REPORT_OBJID,
PATH||A.PART_NO::TEXT,
D.PART_ARRAY,
A.PART_NO = ANY(PART_ARRAY) AS CYCLE,
A.QTY,
C.PRODUCT_MGMT_UPG
FROM part_bom_qty A,
part_mng B,
PART_BOM_REPORT C,
VIEW_BOM D
WHERE 1=1
AND A.PART_NO = B.PART_NO
AND B.IS_LAST = '1'
AND A.BOM_REPORT_OBJID = C.OBJID
AND A.PARENT_PART_NO = D.PART_NO
AND A.BOM_REPORT_OBJID = D.BOM_REPORT_OBJID
AND C.PRODUCT_MGMT_UPG IN
(SELECT UPG_CODE ||'-'|| (SELECT PRODUCT_CODE FROM PRODUCT_MGMT PM WHERE PM.OBJID = O.PRODUCT_OBJID) ||'-'|| VC FROM PRODUCT_MGMT_UPG_DETAIL AS O
WHERE O.TARGET_OBJID IN
(SELECT T.OBJID FROM PRODUCT_MGMT_UPG_MASTER AS T
WHERE T.TARGET_OBJID=#{root_code}::NUMERIC )
AND O.UPG_NAME = (SELECT T.CODE_NAME FROM COMM_CODE T WHERE T.CODE_ID=#{code_id})
)
)
SELECT DISTINCT
SPLIT_PART(V.PRODUCT_MGMT_UPG, '-', 3) AS VC
FROM VIEW_BOM V
ORDER BY 1 -->
</select>
<select id="selectStructureAscendingMultiListVCqty" parameterType="map" resultType="map">
WITH RECURSIVE VIEW_BOM(
BOM_REPORT_OBJID,
PARENT_OBJID,
CHILD_OBJID,
PARENT_PART_NO,
PART_NO,
REGDATE,
PART_NO_TITLE,
PART_NAME,
QTY,
REV,
MATERIAL,
SPEC,
WEIGHT,
UNIT_TITLE,
PART_OBJID,
SEQ,
LEV,
PATH,
CYCLE,
PRODUCT_MGMT_UPG,
REMARK
) AS (
SELECT
A.BOM_REPORT_OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.REGDATE,
B.PART_NO AS PART_NO_TITLE,
B.PART_NAME,
A.QTY,
B.REVISION AS REV,
B.MATERIAL,
B.SPEC,
B.WEIGHT,
B.UNIT_TITLE,
B.OBJID AS PART_OBJID,
A.SEQ,
1,
ARRAY [A.PART_NO::TEXT],
FALSE,
C.PRODUCT_MGMT_UPG,
B.REMARK
FROM
(
SELECT
BPQ.*,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PART_NO) AS PART_MNG_NO,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PARENT_PART_NO) AS PARENT_PART_MNG_NO
FROM BOM_PART_QTY BPQ
) A,
(
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,
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
) B,
PART_BOM_REPORT C
WHERE 1=1
AND C.OBJID = A.BOM_REPORT_OBJID
AND A.PART_MNG_NO = B.PART_NO
<!-- AND B.IS_LAST = '1' -->
AND (A.PARENT_PART_NO IS NULL OR A.PARENT_PART_NO = '')
AND C.PRODUCT_MGMT_UPG IN(SELECT (SELECT model_CODE FROM product_mgmt_model O1 WHERE
O1.product_category = (SELECT o.product_category from product_mgmt AS o WHERE o.objid = PMUD.product_objid)
AND O1.MODEL_NAME = (SELECT o.PRODUCT_CODE from product_mgmt AS o WHERE o.objid = PMUD.product_objid))||PMUD.UPG_CODE||'-'|| PMUD.VC FROM PRODUCT_MGMT_UPG_DETAIL AS PMUD
WHERE PMUD.TARGET_OBJID IN
(SELECT T.OBJID FROM PRODUCT_MGMT_UPG_MASTER AS T
WHERE T.TARGET_OBJID=#{root_code}::NUMERIC)
AND PMUD.upg_name = (SELECT T.CODE_NAME FROM COMM_CODE T WHERE T.CODE_ID=#{code_id})
)
UNION ALL
SELECT
A.BOM_REPORT_OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.REGDATE,
B.PART_NO AS PART_NO_TITLE,
B.PART_NAME,
A.QTY,
B.REVISION AS REV,
B.MATERIAL,
B.SPEC,
B.WEIGHT,
B.UNIT_TITLE,
B.OBJID AS PART_OBJID,
A.SEQ,
LEV + 1,
PATH||A.PART_NO::TEXT,
A.PARENT_PART_NO = ANY(PATH),
C.PRODUCT_MGMT_UPG,
B.REMARK
FROM
(
SELECT
BPQ.*,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PART_NO) AS PART_MNG_NO,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PARENT_PART_NO) AS PARENT_PART_MNG_NO
FROM BOM_PART_QTY BPQ
) A,
(
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,
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
) B,
PART_BOM_REPORT C,
VIEW_BOM D
WHERE 1=1
<!-- AND B.IS_LAST = '1' -->
AND C.OBJID = A.BOM_REPORT_OBJID
AND A.PART_MNG_NO = B.PART_NO
AND A.PARENT_OBJID = D.CHILD_OBJID
AND C.PRODUCT_MGMT_UPG IN(SELECT (SELECT model_CODE FROM product_mgmt_model O1 WHERE
O1.product_category = (SELECT o.product_category from product_mgmt AS o WHERE o.objid = PMUD.product_objid)
AND O1.MODEL_NAME = (SELECT o.PRODUCT_CODE from product_mgmt AS o WHERE o.objid = PMUD.product_objid))||PMUD.UPG_CODE||'-'|| PMUD.VC FROM PRODUCT_MGMT_UPG_DETAIL AS PMUD
WHERE PMUD.TARGET_OBJID IN
(SELECT T.OBJID FROM PRODUCT_MGMT_UPG_MASTER AS T
WHERE T.TARGET_OBJID=#{root_code}::NUMERIC)
AND PMUD.upg_name = (SELECT T.CODE_NAME FROM COMM_CODE T WHERE T.CODE_ID=#{code_id})
)
)
SELECT PATH, QTY,
SPLIT_PART(V.PRODUCT_MGMT_UPG, '-', 2) AS VC
FROM VIEW_BOM V
ORDER BY 1
</select>
<!-- //정전개 조회 쿼리 -->
<select id="selectStructureAscendingList_old" parameterType="map" resultType="map">
WITH RECURSIVE VIEW_BOM(
BOM_REPORT_OBJID,
PARENT_OBJID,
CHILD_OBJID,
PARENT_PART_NO,
PART_NO,
REGDATE,
PART_NO_TITLE,
PART_NAME,
QTY,
REV,
REMARK,
MATERIAL,
SPEC,
WEIGHT,
UNIT_TITLE,
PART_OBJID,
EO_NO,
EO_DATE,
THICKNESS,
WIDTH,
HEIGHT,
OUT_DIAMETER,
IN_DIAMETER,
LENGTH,
SEQ,
LEV,
PATH,
CYCLE,
MAKER
) AS (
SELECT
A.BOM_REPORT_OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.REGDATE,
B.PART_NO AS PART_NO_TITLE,
B.PART_NAME,
B.QTY,
B.REVISION AS REV,
B.REMARK,
B.MATERIAL,
B.SPEC,
B.WEIGHT,
B.UNIT_TITLE,
B.OBJID AS PART_OBJID,
(SELECT EO_NO FROM EO_MNG AS EO WHERE EO.OBJID::varchar = B.EO::varchar) AS EO_NO,
(SELECT TO_CHAR(REG_DATE,'YYYY-MM-DD') FROM EO_MNG AS EO WHERE EO.OBJID::varchar = B.EO::varchar) AS EO_DATE,
THICKNESS,
WIDTH,
HEIGHT,
OUT_DIAMETER,
IN_DIAMETER,
LENGTH,
A.SEQ,
1,
ARRAY [A.CHILD_OBJID::TEXT],
FALSE,
B.MAKER
FROM
(
SELECT
BPQ.*,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::varchar = BPQ.PART_NO) AS PART_MNG_NO,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::varchar = BPQ.PARENT_PART_NO) AS PARENT_PART_MNG_NO
FROM BOM_PART_QTY BPQ
) A,
<include refid="partMngBase"/> B,
PART_BOM_REPORT C
WHERE 1=1
AND C.OBJID::VARCHAR = A.BOM_REPORT_OBJID::VARCHAR
AND A.PART_NO::VARCHAR = B.OBJID::VARCHAR
AND (A.PARENT_PART_NO IS NULL OR A.PARENT_PART_NO = '')
UNION ALL
SELECT
A.BOM_REPORT_OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.REGDATE,
B.PART_NO AS PART_NO_TITLE,
B.PART_NAME,
B.QTY,
B.REVISION AS REV,
B.REMARK,
B.MATERIAL,
B.SPEC,
B.WEIGHT,
B.UNIT_TITLE,
B.OBJID AS PART_OBJID,
(SELECT EO_NO FROM EO_MNG AS EO WHERE EO.OBJID::varchar = B.EO) AS EO_NO,
(SELECT TO_CHAR(REG_DATE,'YYYY-MM-DD') FROM EO_MNG AS EO WHERE EO.OBJID::varchar = B.EO) AS EO_DATE,
THICKNESS,
WIDTH,
HEIGHT,
OUT_DIAMETER,
IN_DIAMETER,
LENGTH,
A.SEQ,
LEV + 1,
PATH||A.CHILD_OBJID::TEXT,
A.PARENT_OBJID = ANY(PATH),
B.MAKER
FROM
(
SELECT
BPQ.*,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PART_NO) AS PART_MNG_NO,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PARENT_PART_NO) AS PARENT_PART_MNG_NO
FROM BOM_PART_QTY BPQ
) A,
<include refid="partMngBase"/> B,
PART_BOM_REPORT C,
VIEW_BOM D
WHERE 1=1
AND C.OBJID = A.BOM_REPORT_OBJID
AND A.PART_NO::varchar = B.OBJID::varchar
AND A.PARENT_OBJID = D.CHILD_OBJID
)
SELECT
V.BOM_REPORT_OBJID,
V.PARENT_PART_NO,
V.PART_NO,
V.REGDATE,
V.PART_NO_TITLE,
V.UNIT_TITLE,
V.PART_NAME,
V.QTY,
V.REV,
V.REMARK,
V.MATERIAL,
V.SPEC,
V.WEIGHT,
V.PART_OBJID,
V.EO_NO,
V.EO_DATE,
V.LEV,
V.LEV AS LEVEL,
V.PATH,
V.CYCLE,
(SELECT BOM_REPORT_OBJID FROM VIEW_BOM VT WHERE V.BOM_REPORT_OBJID = VT.BOM_REPORT_OBJID AND VT.LEV = 1) AS SUB_ROOT_OBJID
,V.PART_NO_TITLE LPAD_PART_NO
,(
SELECT
CASE
WHEN COUNT(*) <![CDATA[ > ]]> 0 THEN 0
ELSE 1
END LEAF
FROM VIEW_BOM VT
WHERE V.BOM_REPORT_OBJID = VT.BOM_REPORT_OBJID
AND V.PART_NO = VT.PARENT_PART_NO
) AS LEAF
,(SELECT COUNT(*) FROM VIEW_BOM VT WHERE V.BOM_REPORT_OBJID = VT.BOM_REPORT_OBJID AND V.PARENT_PART_NO = VT.PART_NO) AS SUB_PART_CNT
,(SELECT BOM_REPORT_OBJID FROM VIEW_BOM VT WHERE V.BOM_REPORT_OBJID = VT.BOM_REPORT_OBJID AND VT.LEV = 1) AS ROOT_OBJID
,V.MAKER
FROM VIEW_BOM V
WHERE 1=1
ORDER BY SEQ ASC
<!-- BOM_REPORT_OBJID,REGDATE,PATH -->
</select>
<!-- //정전개 조회 쿼리 -->
<select id="selectStructureAscendingList" parameterType="map" resultType="map">
<!--
SELECT * FROM (
WITH V_QTY AS(
SELECT
BPQ.*
,(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PART_NO) AS PART_MNG_NO
,(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PARENT_PART_NO) AS PARENT_PART_MNG_NO
FROM BOM_PART_QTY BPQ
)
-->
WITH RECURSIVE VIEW_BOM(
BOM_REPORT_OBJID,
PARENT_OBJID,
CHILD_OBJID,
PARENT_PART_NO,
PART_NO,
REGDATE,
QTY,
QTY_TEMP,
DESIGN_DATE,
<!--
CHANGE_OPTION_NAME,
UNIT_TITLE,
-->
EO_NO,
EO_DATE,
PART_NO_TITLE,
PART_NAME,
REV,
MATERIAL,
SUB_MATERIAL,
SPEC,
WEIGHT,
PART_OBJID,
THICKNESS,
WIDTH,
HEIGHT,
OUT_DIAMETER,
IN_DIAMETER,
LENGTH,
LEV,
PATH,
PATH2,
CYCLE,
SEQ,
MAKER,
POST_PROCESSING,
PART_MNG_NO,
PARENT_PART_MNG_NO,
LAST_PART_OBJID
) AS (
SELECT
A.BOM_REPORT_OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.REGDATE,
A.QTY,
A.QTY_TEMP,
B.DESIGN_DATE,
<!--
B.CHANGE_OPTION_NAME,
B.UNIT_TITLE,
-->
B.EO_NO,
B.EO_DATE,
B.PART_NO AS PART_NO_TITLE,
B.PART_NAME,
<!--
B.QTY,
-->
B.REVISION AS REV,
B.MATERIAL,
B.SUB_MATERIAL,
B.SPEC,
B.WEIGHT,
B.OBJID AS PART_OBJID,
B.THICKNESS,
B.WIDTH,
B.HEIGHT,
B.OUT_DIAMETER,
B.IN_DIAMETER,
B.LENGTH,
1,
ARRAY [A.CHILD_OBJID::TEXT],
ARRAY [A.SEQ::TEXT],
FALSE,
A.SEQ,
B.MAKER,
B.POST_PROCESSING,
A.PART_MNG_NO,
A.PARENT_PART_MNG_NO,
A.LAST_PART_OBJID
FROM
(
SELECT
BPQ.*
,(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PART_NO) AS PART_MNG_NO
,(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PARENT_PART_NO) AS PARENT_PART_MNG_NO
FROM BOM_PART_QTY BPQ
<!--
FROM V_QTY BQP
-->
WHERE (PARENT_PART_NO IS NULL OR PARENT_PART_NO = '')
<if test="customer_cd != null and !''.equals(customer_cd)">
AND EXISTS (SELECT 1 FROM PART_BOM_REPORT R
WHERE R.CUSTOMER_OBJID = #{customer_cd}
AND R.OBJID = BPQ.BOM_REPORT_OBJID)
</if>
<if test="project_name != null and !''.equals(project_name)">
AND EXISTS (SELECT 1 FROM PART_BOM_REPORT R
WHERE R.CONTRACT_OBJID = #{project_name}
AND R.OBJID = BPQ.BOM_REPORT_OBJID)
</if>
<if test="search_spec_name != null and !''.equals(search_spec_name)">
AND EXISTS (SELECT 1 FROM PART_BOM_REPORT R
WHERE R.SPEC_NAME = #{search_spec_name}
AND R.OBJID = BPQ.BOM_REPORT_OBJID)
</if>
<if test="unit_code != null and !''.equals(unit_code)">
AND EXISTS (SELECT 1 FROM PART_BOM_REPORT R
WHERE R.UNIT_CODE = #{unit_code}
AND R.OBJID = BPQ.BOM_REPORT_OBJID)
</if>
<choose>
<when test="search_type != null and !''.equals(search_type) and 'working'.equals(search_type)">
AND STATUS NOT IN ('deleting', 'deleted')
<!--
AND (BQP.STATUS IS NULL OR BQP.STATUS = '')
-->
</when>
<otherwise>
AND STATUS IN ('beforeEdit', 'editing','deleting', 'deploy')
<!--
AND COALESCE(STATUS,'') IN ('beforeEdit', 'editing','deleting', 'deploy', '')
-->
</otherwise>
</choose>
) A,
PART_MNG B,
<!-- 231208 위로 바꿈(속도개선)
<include refid="partMngBase"/> B,
-->
PART_BOM_REPORT C
WHERE 1=1
AND C.OBJID = A.BOM_REPORT_OBJID
<!-- 231208 아래 조건으로 변경(설변 전에는 마지막 PART로 연결해야 함)
AND A.PART_MNG_NO = B.PART_NO
-->
AND NVL(A.LAST_PART_OBJID, A.PART_NO) = B.OBJID
AND NVL(A.PARENT_OBJID, '') = ''
AND B.STATUS = 'release'
<!--
AND B.IS_LAST='1'
AND (C.STATUS = 'create' OR C.STATUS = 'deploy' AND B.IS_LAST='1')
-->
<if test="customer_cd != null and !''.equals(customer_cd)">
AND C.CUSTOMER_OBJID = #{customer_cd}
</if>
<if test="project_name != null and !''.equals(project_name)">
AND C.CONTRACT_OBJID = #{project_name}
</if>
<if test="search_spec_name != null and !''.equals(search_spec_name)">
AND C.SPEC_NAME = #{search_spec_name}
</if>
<if test="unit_code != null and !''.equals(unit_code)">
AND C.UNIT_CODE = #{unit_code}
</if>
<if test="SEARCH_UNIT_NAME != null and !''.equals(SEARCH_UNIT_NAME)">
AND (SELECT O.UNIT_NO || '-' || O.TASK_NAME FROM PMS_WBS_TASK AS O WHERE O.OBJID = C.UNIT_CODE) LIKE '%' || #{SEARCH_UNIT_NAME} || '%'
</if>
UNION ALL
SELECT
A.BOM_REPORT_OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.REGDATE,
A.QTY,
A.QTY_TEMP,
B.DESIGN_DATE,
<!--
B.CHANGE_OPTION_NAME,
B.UNIT_TITLE,
-->
B.EO_NO,
B.EO_DATE,
B.PART_NO AS PART_NO_TITLE,
B.PART_NAME,
<!--
B.QTY,
-->
B.REVISION AS REV,
B.MATERIAL,
B.SUB_MATERIAL,
B.SPEC,
B.WEIGHT,
B.OBJID AS PART_OBJID,
B.THICKNESS,
B.WIDTH,
B.HEIGHT,
B.OUT_DIAMETER,
B.IN_DIAMETER,
B.LENGTH,
LEV + 1,
PATH||A.CHILD_OBJID::TEXT,
PATH2||A.SEQ::TEXT,
A.PARENT_OBJID = ANY(PATH),
A.SEQ,
B.MAKER,
B.POST_PROCESSING,
<!--
A.PART_MNG_NO,
A.PARENT_PART_MNG_NO,
-->
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = A.PART_NO) AS PART_MNG_NO,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = A.PARENT_PART_NO) AS PARENT_PART_MNG_NO,
A.LAST_PART_OBJID
FROM
<!--
(
SELECT
BPQ.*,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PART_NO) AS PART_MNG_NO,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PARENT_PART_NO) AS PARENT_PART_MNG_NO
FROM BOM_PART_QTY BPQ
WHERE 1=1
<choose>
<when test="search_type != null and !''.equals(search_type) and 'working'.equals(search_type)">
AND STATUS NOT IN ('deleting', 'deleted')
AND (BQP.STATUS IS NULL OR BQP.STATUS = '')
</when>
<otherwise>
AND STATUS IN ('beforeEdit', 'editing','deleting', 'deploy')
</otherwise>
</choose>
) A,
-->
BOM_PART_QTY A
,PART_MNG B
<!--
<include refid="partMngBase"/> B,
-->
,PART_BOM_REPORT C
,VIEW_BOM D
WHERE 1=1
AND C.OBJID = A.BOM_REPORT_OBJID
AND A.LAST_PART_OBJID = B.OBJID
<choose>
<when test="search_type != null and !''.equals(search_type) and 'working'.equals(search_type)">
AND A.STATUS NOT IN ('deleting', 'deleted')
<!--
AND (BQP.STATUS IS NULL OR BQP.STATUS = '')
-->
</when>
<otherwise>
AND A.STATUS IN ('beforeEdit', 'editing','deleting', 'deploy')
</otherwise>
</choose>
<!--
AND B.IS_LAST = '1'
AND A.PART_MNG_NO = B.PART_NO
-->
<!--
AND A.PART_NO = B.OBJID
-->
AND A.PARENT_OBJID = D.CHILD_OBJID
)
SELECT
V.BOM_REPORT_OBJID,
V.PARENT_PART_NO,
V.REGDATE,
V.DESIGN_DATE,
<!--
V.CHANGE_OPTION_NAME,
-->
V.EO_NO,
V.EO_DATE,
(SELECT O.PART_NO FROM PART_MNG AS O WHERE O.OBJID = V.CHILD_OBJID) AS PART_NO_TITLE,
V.PART_NAME,
V.QTY,
V.QTY_TEMP,
V.REV,
V.MATERIAL,
V.SUB_MATERIAL,
V.WEIGHT,
V.PART_OBJID,
V.LEV,
V.LEV AS LEVEL,
B.REVISION,
B.PART_NO,
B.THICKNESS,
B.WIDTH,
B.HEIGHT,
B.OUT_DIAMETER,
B.IN_DIAMETER,
B.LENGTH,
B.SPEC,
B.REMARK,
B.UNIT_TITLE,
B.PART_TYPE_TITLE,
B.CU01_CNT AS FILE_3D_CNT,
B.CU02_CNT AS FILE_2D_CNT,
B.CU03_CNT AS FILE_PDF_CNT,
V.SEQ,
B.MAKER,
B.POST_PROCESSING,
V.PART_MNG_NO,
V.PARENT_PART_MNG_NO,
(
SELECT
CASE
WHEN COUNT(*) > 0 THEN 0
ELSE 1
END LEAF
FROM VIEW_BOM VT
WHERE V.BOM_REPORT_OBJID = VT.BOM_REPORT_OBJID
AND V.PART_MNG_NO = VT.PARENT_PART_MNG_NO
) AS LEAF
FROM
VIEW_BOM V
LEFT OUTER JOIN <include refid="partMngBase"/> B
ON V.PART_OBJID = B.OBJID
WHERE 1=1
<!--
<if test="search_level != null and !''.equals(search_level)">
AND ABCD.LEVEL <![CDATA[ >= ]]> #{search_level}::NUMERIC
</if>
-->
<if test="search_partNo != null and !''.equals(search_partNo)">
AND UPPER(PART_MNG_NO) LIKE UPPER('%${search_partNo}%')
</if>
<if test="search_partName != null and !''.equals(search_partName)">
AND UPPER(PART_NAME) LIKE UPPER('%${search_partName}%')
</if>
ORDER BY V.PATH2
<!--
ORDER BY V.SEQ
-->
<!--
) AS ABCD
WHERE 1=1
-->
</select>
<!--
//역전개 조회 쿼리
Level을 정전개를 통해가져온다.
-->
<select id="selectStructureDescendingList" parameterType="map" resultType="map">
WITH RECURSIVE VIEW_BOM(
BOM_REPORT_OBJID,
PARENT_OBJID,
CHILD_OBJID,
PARENT_PART_NO,
PART_NO,
REGDATE,
PART_NO_TITLE,
PART_NAME,
QTY,
REV,
DESIGN_DATE,
CHANGE_OPTION_NAME,
EO_DATE,
SUB_MATERIAL,
MATERIAL,
SPEC,
WEIGHT,
UNIT_TITLE,
PART_OBJID,
LEV,
PATH,
CYCLE
) AS (
SELECT
A.BOM_REPORT_OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.REGDATE,
B.PART_NO AS PART_NO_TITLE,
B.PART_NAME,
B.QTY,
B.REVISION AS REV,
B.DESIGN_DATE,
B.CHANGE_OPTION_NAME,
B.EO_DATE,
B.SUB_MATERIAL,
B.MATERIAL,
B.SPEC,
B.WEIGHT,
B.UNIT_TITLE,
B.OBJID AS PART_OBJID,
1,
ARRAY [A.CHILD_OBJID::TEXT],
FALSE
FROM
(
SELECT
BPQ.*,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PART_NO) AS PART_MNG_NO,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PARENT_PART_NO) AS PARENT_PART_MNG_NO
FROM BOM_PART_QTY BPQ
) A,
PART_MNG B,
<!--
<include refid="partMngBase"/> B,
-->
PART_BOM_REPORT C
WHERE 1=1
AND C.OBJID = A.BOM_REPORT_OBJID
AND A.PART_MNG_NO = B.PART_NO
<!-- AND B.IS_LAST = '1' -->
AND (A.PARENT_PART_NO IS NULL OR A.PARENT_PART_NO = '')
UNION ALL
SELECT
A.BOM_REPORT_OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.REGDATE,
B.PART_NO AS PART_NO_TITLE,
B.PART_NAME,
B.QTY,
B.REVISION AS REV,
B.DESIGN_DATE,
<!--
B.CHANGE_OPTION_NAME,
-->
B.EO_DATE,
B.SUB_MATERIAL,
B.MATERIAL,
B.SPEC,
B.WEIGHT,
B.UNIT_TITLE,
B.OBJID AS PART_OBJID,
LEV + 1,
PATH||A.CHILD_OBJID::TEXT,
A.PARENT_OBJID = ANY(PATH)
FROM(
SELECT
BPQ.*,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PART_NO) AS PART_MNG_NO,
(SELECT PART_NO FROM PART_MNG P WHERE 1=1 AND P.OBJID::VARCHAR = BPQ.PARENT_PART_NO) AS PARENT_PART_MNG_NO
FROM BOM_PART_QTY BPQ
) A,
<include refid="partMngBase"/> B,
PART_BOM_REPORT C,
VIEW_BOM D
WHERE 1=1
<!-- AND B.IS_LAST = '1' -->
AND C.OBJID = A.BOM_REPORT_OBJID
AND A.PART_MNG_NO = B.PART_NO
AND A.PARENT_OBJID = D.CHILD_OBJID
),VIEW_TEMP(
BOM_REPORT_OBJID,
PARENT_OBJID,
CHILD_OBJID,
PARENT_PART_NO,
PART_NO,
REGDATE,
PART_NO_TITLE,
PART_NAME,
QTY,
REV,
DESIGN_DATE,
CHANGE_OPTION_NAME,
EO_DATE,
SUB_MATERIAL,
MATERIAL,
WEIGHT,
PART_OBJID,
LEV,
PATH1,
PART_ARRAY1,
CYCLE1
) AS (
SELECT
A.BOM_REPORT_OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.REGDATE,
A.PART_NO AS PART_NO_TITLE,
A.PART_NAME,
A.QTY,
A.REV,
A.DESIGN_DATE,
A.CHANGE_OPTION_NAME,
A.EO_DATE,
A.SUB_MATERIAL,
A.MATERIAL,
A.WEIGHT,
A.PART_OBJID,
1,
ARRAY[A.PART_NO::TEXT],
ARRAY[A.PART_NO] AS PART_ARRAY1,
FALSE
FROM
VIEW_BOM A,
PART_BOM_REPORT B
WHERE 1=1
AND A.BOM_REPORT_OBJID::INTEGER = B.OBJID
<if test="search_partNo != null and !''.equals(search_partNo)">
AND UPPER(A.PART_NO_TITLE) LIKE UPPER('%${search_partNo}%')
</if>
<if test="search_partName != null and !''.equals(search_partName)">
AND UPPER(A.PART_NAME) LIKE UPPER('%${search_partName}%')
</if>
UNION ALL
SELECT A.BOM_REPORT_OBJID,
A.PARENT_OBJID,
A.CHILD_OBJID,
A.PARENT_PART_NO,
A.PART_NO,
A.REGDATE,
A.PART_NO AS PART_NO_TITLE,
A.PART_NAME,
A.QTY,
A.REV,
A.DESIGN_DATE,
A.CHANGE_OPTION_NAME,
A.EO_DATE,
A.SUB_MATERIAL,
A.MATERIAL,
A.WEIGHT,
A.PART_OBJID,
C.LEV+1,
PATH||A.PART_NO::TEXT,
C.PART_ARRAY1,
A.PART_NO = ANY(PART_ARRAY1) AS CYCLE1
FROM VIEW_BOM A,
PART_BOM_REPORT B,
VIEW_TEMP C
WHERE 1=1
AND A.BOM_REPORT_OBJID::INTEGER = B.OBJID
AND A.CHILD_OBJID = C.PARENT_OBJID
AND A.BOM_REPORT_OBJID = C.BOM_REPORT_OBJID
)
SELECT
V.BOM_REPORT_OBJID,
V.PARENT_PART_NO,
V.REGDATE,
(SELECT O.PART_NO FROM PART_MNG AS O WHERE O.OBJID = V.PART_NO) AS PART_NO_TITLE,
V.PART_NAME,
V.QTY,
V.REV,
V.DESIGN_DATE,
V.CHANGE_OPTION_NAME,
V.EO_DATE,
V.SUB_MATERIAL,
V.MATERIAL,
V.WEIGHT,
V.PART_OBJID,
V.LEV,
V.LEV AS LEVEL,
B.PART_NO,
B.UNIT_TITLE,
B.EO_NO,
B.EO_DATE,
B.SPEC,
B.PART_TYPE_TITLE,
B.REMARK,
B.CU01_CNT AS FILE_3D_CNT,
B.CU02_CNT AS FILE_2D_CNT,
B.CU03_CNT AS FILE_PDF_CNT
FROM
VIEW_TEMP V
LEFT OUTER JOIN <include refid="partMngBase"/> B
ON V.PART_OBJID = B.OBJID
WHERE 1=1
ORDER BY
REGDATE DESC,
LEV,
PATH1
</select>
<!--
//역전개 조회 쿼리
Level을 정전개를 통해가져오지 않는다.
-->
<select id="selectStructureDescendingList2" parameterType="map" resultType="map">
WITH RECURSIVE VIEW_BOM(
OBJID,
PART_NO,
BOM_REPORT_OBJID,
PARENT_PART_NO,
LEV,
PATH,
PART_ARRAY,
CYCLE,
QTY,
REV,
EO_NO,
EO_ISSUE_DATE,
MATERIAL_NAME,
WEIGHT,
SIZE,
SURFACE_TREATMENT,
MOLD_DEV,
PART_OBJID
) AS (
SELECT
A.OBJID,
A.PART_NO,
A.BOM_REPORT_OBJID,
A.PARENT_PART_NO,
1,
ARRAY[A.PART_NO::TEXT],
ARRAY[A.PART_NO] AS PART_ARRAY,
FALSE AS CYCLE,
B.QTY,
B.REVISION AS REV,
B.EO_NO,
B.EO_DATE AS EO_ISSUE_DATE,
(SELECT O.CODE_NAME FROM COMM_CODE O WHERE O.CODE_ID = B.MATERIAL AND O.PARENT_CODE_ID = #{MATERIAL_CODE}) AS MATERIAL_NAME,
B.WEIGHT,
B.SIZE,
B.SURFACE_TREATMENT,
B.MOLD_DEV,
B.OBJID AS PART_OBJID
FROM
PART_BOM_QTY A,
<include refid="partMngBase"/> B,
PART_BOM_REPORT C
WHERE 1=1
AND C.OBJID = A.BOM_REPORT_OBJID
AND A.PART_NO = B.PART_NO
<!-- AND B.IS_LAST = 1 -->
<if test="search_oemObjId != null and !''.equals(search_oemObjId)">
AND C.OEM_OBJID = #{search_oemObjId}
</if>
<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>
<if test="search_partNo != null and !''.equals(search_partNo)">
AND UPPER(A.PART_NO) LIKE UPPER('%${search_partNo}%')
</if>
<if test="search_partName != null and !''.equals(search_partName)">
AND UPPER(B.PART_NAME) LIKE UPPER('%${search_partName}%')
</if>
UNION ALL
SELECT
A.OBJID,
A.PART_NO,
A.BOM_REPORT_OBJID,
A.PARENT_PART_NO,
LEV + 1,
PATH||A.PART_NO::TEXT,
D.PART_ARRAY,
A.PART_NO = ANY(PART_ARRAY) AS CYCLE,
B.QTY,
B.REVISION AS REV,
B.EO_NO,
B.EO_DATE AS EO_ISSUE_DATE,
(SELECT O.CODE_NAME FROM COMM_CODE O WHERE O.CODE_ID = B.MATERIAL AND O.PARENT_CODE_ID = #{MATERIAL_CODE}) AS MATERIAL_NAME,
B.WEIGHT,
B.SIZE,
B.SURFACE_TREATMENT,
B.MOLD_DEV,
B.OBJID AS PART_OBJID
FROM
PART_BOM_QTY A,
<include refid="partMngBase"/> B,
PART_BOM_REPORT C,
VIEW_BOM D
WHERE 1=1
AND C.OBJID = A.BOM_REPORT_OBJID
AND A.PART_NO = B.PART_NO
AND A.PART_NO = D.PARENT_PART_NO
AND D.BOM_REPORT_OBJID = A.BOM_REPORT_OBJID
)
SELECT
V.LEV AS LEVEL
,V.LEV AS BASE_LEVEL
,V.LEV
,(SELECT OBJID FROM VIEW_BOM VT WHERE V.BOM_REPORT_OBJID = VT.BOM_REPORT_OBJID AND VT.LEV = 1) AS SUB_ROOT_OBJID
,V.PART_NO LPAD_PART_NO
,(
SELECT
CASE
WHEN COUNT(*) > 0 THEN 0
ELSE 1
END LEAF
FROM VIEW_BOM VT
WHERE V.BOM_REPORT_OBJID = VT.BOM_REPORT_OBJID
AND V.PART_NO = VT.PARENT_PART_NO
) AS LEAF
,V.OBJID
,V.PART_NO
,(SELECT PART_NAME FROM PART_MNG WHERE PART_NO = V.PART_NO) AS PART_NAME
,V.PARENT_PART_NO
,(SELECT COUNT(*) FROM VIEW_BOM VT WHERE V.BOM_REPORT_OBJID = VT.BOM_REPORT_OBJID AND V.PARENT_PART_NO = VT.PART_NO) AS SUB_PART_CNT
,(SELECT OBJID FROM VIEW_BOM VT WHERE V.BOM_REPORT_OBJID = VT.BOM_REPORT_OBJID AND VT.LEV = 1) AS ROOT_OBJID
,V.QTY
,V.REV AS REVISION
,V.REV
,V.EO_NO
,V.EO_ISSUE_DATE
,V.MATERIAL_NAME
,V.WEIGHT
,V.SIZE
,V.SURFACE_TREATMENT
,V.MOLD_DEV
,V.PART_OBJID
FROM VIEW_BOM V
WHERE 1=1
ORDER BY
BOM_REPORT_OBJID,
PATH
</select>
<!-- 선택된 구조등록을 삭제한다. -->
<delete id="deleteBomReport" parameterType="map">
DELETE FROM PART_BOM_REPORT
WHERE OBJID IN
<foreach collection="checkArr" item="objkey" index="index" separator="," open="(" close=")">
#{objkey}
</foreach>
</delete>
<!-- 선택된 구조등록 연결정보 삭제한다. -->
<delete id="deleteBomQty" parameterType="map">
<!-- DELETE FROM PART_BOM_QTY -->
DELETE FROM BOM_PART_QTY
WHERE BOM_REPORT_OBJID IN
<foreach collection="checkArr" item="objkey" index="index" separator="," open="(" close=")">
#{objkey}
</foreach>
</delete>
<!-- 선택된 구조등록을 배포한다. -->
<update id="deployBomReport" parameterType="map">
UPDATE PART_BOM_REPORT
SET
DEPLOY_DATE = TO_CHAR(NOW(),'YYYY-MM-DD')
<!-- ,EO_DATE = TO_CHAR(NOW(),'YYYY-MM-DD')
,EO_NO = (SELECT 'EO'||TO_CHAR(NOW(),'yy')::VARCHAR ||'-'||LPAD((SELECT COALESCE(SUBSTR(MAX(EO_NO),6,8)::INTEGER+1,1) FROM PART_MNG WHERE EO_NO IS NOT NULL)||'', 4,'0')) -->
,STATUS = 'deploy'
,REVISION = #{REVISION}
WHERE OBJID = #{checkArr}
</update>
<!-- 선택된 구조에 연결된 part를 배포한다. -->
<update id="deployPartInfo" parameterType="map">
UPDATE part_mng
SET status='release'
WHERE OBJID IN (SELECT part_no FROM bom_part_qty as t
WHERE t.bom_report_objid=#{checkArr})
AND status='create'
</update>
<!-- 선택된 구조등록 연결PART를 삭제한다.. -->
<delete id="deleteBomQtyPart" parameterType="map">
DELETE FROM PART_MNG
WHERE STATUS='create'
AND OBJID IN(SELECT PART_NO FROM BOM_PART_QTY AS T
WHERE T.BOM_REPORT_OBJID IN
<foreach collection="checkArr" item="objkey" index="index" separator="," open="(" close=")">
#{objkey}
</foreach>
)
</delete>
<!-- 구조변경시 BomReport의 상태값을 변경한다. -->
<update id="changeStatusBomReport" parameterType="map">
UPDATE PART_BOM_REPORT
SET
STATUS = (CASE WHEN STATUS != 'create' THEN 'changeDesign' ELSE STATUS END)
WHERE OBJID = #{BOM_REPORT_OBJID}
</update>
<!-- 구조변경시 BomReport의 상태값을 변경한다. -->
<update id="changeStatusBomReportByPartNo" parameterType="map">
UPDATE PART_BOM_REPORT
SET
STATUS = 'changeDesign'
,EDIT_DATE = NOW()
,EDITER = #{WRITER}
WHERE OBJID IN (SELECT Q.BOM_REPORT_OBJID
FROM BOM_PART_QTY Q
,PART_MNG P
WHERE P.PART_NO = #{PART_NO}
AND P.OBJID = Q.PART_NO)
AND STATUS != 'changeDesign'
</update>
<!-- 구조변경시 BomReport의 상태값을 변경한다. -->
<update id="changeStatusBomReportByPartObjid" parameterType="map">
UPDATE PART_BOM_REPORT
SET
STATUS = 'changeDesign'
,EDIT_DATE = NOW()
,EDITER = #{WRITER}
WHERE OBJID IN (SELECT Q.BOM_REPORT_OBJID
FROM BOM_PART_QTY Q
,PART_MNG P
,PART_MNG P2
WHERE P.OBJID = #{OBJID}
AND P.PART_NO = P2.PART_NO
AND P2.OBJID = Q.PART_NO)
AND STATUS != 'changeDesign'
</update>
<select id="selectBomPartQtyInfoByWorkingPartObjid" parameterType="map" resultType="com.pms.common.UpperKeyMap">
SELECT Q.BOM_REPORT_OBJID
FROM BOM_PART_QTY Q
,PART_MNG P
,PART_MNG P2
WHERE 1=1
AND P.OBJID = #{OBJID}
AND P.STATUS IN ('create', 'changing')
AND Q.STATUS IN ('beforeEdit')
AND P.PART_NO = P2.PART_NO
AND P2.OBJID = Q.PART_NO
</select>
<!-- 선택된 구조등록을 배포한다. -->
<update id="deployBomPartQty" parameterType="map">
UPDATE BOM_PART_QTY Q
SET STATUS = (CASE WHEN STATUS = 'deleting' THEN 'deleted'
ELSE 'deploy'
END
)
,DEPLOY_DATE = NOW()
,DEPLOY_USER_ID = #{WRITER}
,QTY = COALESCE(QTY_TEMP, QTY)
,QTY_TEMP = NULL
,LAST_PART_OBJID = (SELECT PM1.OBJID
FROM PART_MNG PM1
,PART_MNG PM2
WHERE PM1.IS_LAST = '1'
AND PM2.OBJID = Q.PART_NO
AND PM1.PART_NO = PM2.PART_NO)
WHERE BOM_REPORT_OBJID = #{checkArr}
AND COALESCE(STATUS, '') IN ('', 'beforeEdit', 'adding', 'deleting', 'editing')
</update>
<update id="deployBomPartQtyDelete" parameterType="map">
DELETE FROM BOM_PART_QTY
WHERE BOM_REPORT_OBJID = #{checkArr}
AND COALESCE(STATUS, '') = 'deleting'
</update>
<!-- 구조 배포시 하위 연결된 PART의 EO 및 EODATE를 업데이트 한다. -->
<update id="deployPartEoDate" parameterType="map">
UPDATE PART_MNG P
SET
EO_DATE = TO_CHAR(NOW(),'YYYY-MM-DD'),
EO_NO = CASE
WHEN P.IS_LONGD = '1' THEN
(SELECT 'EOB'||TO_CHAR(NOW(),'yy')::VARCHAR ||'-'||LPAD((SELECT COALESCE(SUBSTR(MAX(EO_NO),7,8)::INTEGER+1,1)
FROM PART_MNG SP
WHERE SP.EO_NO IS NOT NULL
AND SP.EO_NO LIKE 'EOB' || TO_CHAR(NOW(),'yy') || '-%'
)||'', 4,'0'))
ELSE
(SELECT 'EO'||TO_CHAR(NOW(),'yy')::VARCHAR ||'-'||LPAD((SELECT COALESCE(SUBSTR(MAX(EO_NO),6,8)::INTEGER+1,1)
FROM PART_MNG SP
WHERE SP.EO_NO IS NOT NULL
AND SP.EO_NO LIKE 'EO' || TO_CHAR(NOW(),'yy') || '-%'
)||'', 4,'0'))
END,
<!-- EO_NO = (SELECT 'EO'||TO_CHAR(NOW(),'yy')::VARCHAR ||'-'||LPAD((SELECT COALESCE(SUBSTR(MAX(EO_NO),6,8)::INTEGER+1,1) FROM part_mng WHERE EO_NO IS NOT NULL)||'', 4,'0')), -->
REVISION ='RE',
STATUS = 'release'
WHERE OBJID IN
(SELECT PM.OBJID FROM BOM_PART_QTY AS BP LEFT JOIN
PART_MNG AS PM
ON BP.PART_NO = PM.OBJID::VARCHAR
WHERE 1=1
<!--
AND PM.EO_NO IS NULL
-->
AND COALESCE(PM.EO_NO, '') = ''
AND BOM_REPORT_OBJID = #{checkArr}
)
</update>
<update id="deployPartHisStatus" parameterType="map">
UPDATE PART_MNG_HISTORY
SET
BOM_STATUS = 'deploy'
,BOM_DEPLOY_DATE = NOW()
WHERE BOM_REPORT_OBJID = #{checkArr}
</update>
<!-- 구조 배포시 하위 연결된 PART의 CONTRACT_OBJID를 업데이트 한다. -->
<update id="deployPartContractObjid" parameterType="map">
UPDATE PART_MNG_HISTORY
SET
CONTRACT_OBJID = #{CONTRACT_OBJID},
CHANGE_TYPE = #{CHANGE_TYPE}
WHERE OBJID IN
(SELECT
PM.OBJID
FROM
part_mng_history AS PM
LEFT JOIN BOM_PART_QTY AS BP
ON BP.PART_NO = PM.OBJID::VARCHAR
WHERE 1=1
AND COALESCE(PM.CONTRACT_OBJID, '') = ''
AND BP.BOM_REPORT_OBJID = #{checkArr}
)
</update>
<!-- 파트 설변요청 파일 인써트 -->
<insert id="insertChangeDesignPartFile" 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
)
SELECT
#{NEW_FILE_OBJID}::INTEGER,
#{NEW_PART_OBJID}::INTEGER,
SAVED_FILE_NAME,
REAL_FILE_NAME,
DOC_TYPE,
DOC_TYPE_NAME,
FILE_SIZE,
FILE_EXT,
FILE_PATH,
WRITER,
REGDATE,
STATUS
FROM
ATTACH_FILE_INFO
WHERE OBJID = #{BEFORE_FILE_OBJID}::INTEGER
</insert>
<!-- // part no가 있는지 체크 -->
<select id="getPART_NOCnt" parameterType="map" resultType="map">
SELECT COUNT(*) AS CNT
FROM PART_MNG
WHERE 1=1
AND PART_NO = #{PART_NO}
</select>
<!-- //countExcelpart 상세조회 -->
<select id="countExcelpart" parameterType="map" resultType="map">
SELECT
(
SELECT COUNT(*) FROM
(SELECT T.* ,
(SELECT COUNT(1) FROM part_mng AS PM WHERE PM.part_no = T.real_part_no AND PM.revision = COALESCE(T.revision, '')) AS CNT
FROM (SELECT DISTINCT
T.PART_NO,
char_length(T.PART_NO),
substring(T.PART_NO,char_length(T.PART_NO)-1),
CASE WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R1'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R2'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R3'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R4'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R5'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R6'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R7'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R8'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R9'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R01'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R02'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R03'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R04'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R05'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R06'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R07'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R08'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R09'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R10'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R11'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R12'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R13'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R14'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R15'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R16'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R17'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R18'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R19'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R20'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R21'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R22'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R23'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R24'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R25'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
ELSE T.part_no
END AS real_part_no,
CASE WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R1'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R2'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R3'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R4'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R5'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R6'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R7'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R8'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R9'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R01'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R02'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R03'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R04'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R05'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R06'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R07'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R08'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R09'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R10'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R11'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R12'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R13'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R14'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R15'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R16'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R17'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R18'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R19'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R20'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R21'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R22'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R23'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R24'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R25'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
ELSE NULL
END AS revision,
T.PART_NAME,
T.UNIT,
T.QTY,
T.SPEC,
T.MATERIAL,
T.WEIGHT,
T.PART_TYPE,
T.REMARK,
T.SEQ::numeric
FROM part_mng_temp AS T
WHERE PART_REPORT_OBJID = #{targetObjId}::integer) AS T
ORDER BY SEQ ASC) AS T
WHERE T.cnt > 0
) AS dup_cnt,
(
SELECT COUNT(*) FROM
(SELECT T.* ,
(SELECT COUNT(1) FROM part_mng AS PM WHERE PM.part_no = T.real_part_no AND PM.revision = COALESCE(T.revision, '')) AS CNT
FROM (SELECT DISTINCT
T.PART_NO,
char_length(T.PART_NO),
substring(T.PART_NO,char_length(T.PART_NO)-1),
CASE WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R1'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R2'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R3'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R4'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R5'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R6'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R7'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R8'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R9'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R01'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R02'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R03'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R04'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R05'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R06'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R07'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R08'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R09'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R10'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R11'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R12'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R13'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R14'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R15'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R16'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R17'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R18'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R19'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R20'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R21'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R22'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R23'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R24'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R25'::VARCHAR THEN substring(T.PART_NO,0,char_length(T.PART_NO)-2)
ELSE T.part_no
END AS real_part_no,
CASE WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R1'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R2'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R3'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R4'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R5'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R6'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R7'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R8'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-1)::VARCHAR = 'R9'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-1,1)||'0'||substring(T.PART_NO,char_length(T.PART_NO),1)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R01'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R02'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R03'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R04'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R05'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R06'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R07'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R08'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R09'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R10'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R11'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R12'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R13'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R14'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R15'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R16'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R17'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R18'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R19'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R20'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R21'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R22'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R23'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R24'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
WHEN substring(T.PART_NO,char_length(T.PART_NO)-2)::VARCHAR = 'R25'::VARCHAR THEN substring(T.PART_NO,char_length(T.PART_NO)-2)
ELSE NULL
END AS revision,
T.PART_NAME,
T.UNIT,
T.QTY,
T.SPEC,
T.MATERIAL,
T.WEIGHT,
T.PART_TYPE,
T.REMARK,
T.SEQ::numeric
FROM part_mng_temp AS T
WHERE PART_REPORT_OBJID = #{targetObjId}::integer) AS T
ORDER BY SEQ ASC) AS T
WHERE T.cnt = 0
) AS now_cnt
</select>
<!-- 도면 연결 배치대상 파트목록 조회 -->
<select id="getBatchTargetPartList" parameterType="map" resultType="map">
SELECT
T.*
FROM <include refid="partMngBase"/> T
WHERE 1=1
AND T.CU_TOTAL_CNT <![CDATA[ < ]]> 3
</select>
<select id="getSourceBomPartList" parameterType="map" resultType="map">
SELECT
parent_objid
,child_objid
,parent_part_no
,part_no
,qty::varchar
,seq::varchar
FROM BOM_PART_QTY T
WHERE BOM_REPORT_OBJID = #{REV}
</select>
<!-- Part 삭제 -->
<delete id="deleteBomPart" parameterType="map">
DELETE FROM BOM_PART_QTY WHERE BOM_REPORT_OBJID = #{TARGET_REV}
</delete>
<insert id="insertBomCopyData" parameterType="map">
INSERT INTO BOM_PART_QTY
(
BOM_REPORT_OBJID
,OBJID
,PARENT_OBJID
,CHILD_OBJID
,PARENT_PART_NO
,PART_NO
,QTY
,REGDATE
,SEQ
) VALUES (
#{BOM_REPORT_OBJID}
,#{OBJID}
,#{PARENT_OBJID}
,#{CHILD_OBJID}
,#{PARENT_PART_NO}
,#{PART_NO}
,#{QTY}::integer
,now()
,#{SEQ}::integer
)
</insert>
<insert id="insertPartBomReport" parameterType="map">
INSERT INTO PART_BOM_REPORT
(
OBJID
,PRODUCT_MGMT_OBJID
,WRITER
,REGDATE
,STATUS
,REV
,SPEC_NAME
) VALUES (
#{OBJID}::integer
,#{product_code}::integer
,#{WRITER}
,now()
,'create'
,#{TARGET_REV}
,#{TARGET_SPEC_NAME}
)
</insert>
<select id="structureAscendingList" parameterType="map" resultType="map">
SELECT
ROW_NUMBER() OVER(ORDER BY REGDATE_ORG DESC) AS RNUM,
AA.*
FROM (
SELECT DISTINCT
PBM.OBJID,
PBM.PRODUCT_MGMT_OBJID,
PBM.PRODUCT_MGMT_SPEC,
PBM.PRODUCT_MGMT_UPG,
PBM.PRODUCT_MGMT_VC,
PBM.STATUS,
CASE UPPER(PBM.STATUS)
WHEN 'CREATE' THEN '등록중'
WHEN 'DEPLOY' THEN '배포완료'
ELSE ''
END STATUS_TITLE,
PBM.WRITER,
(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = PBM.WRITER) AS DEPT_NAME,
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = PBM.WRITER) AS USER_NAME,
(SELECT PRODUCT_CODE FROM PRODUCT_MGMT AS O WHERE O.OBJID = PBM.PRODUCT_MGMT_OBJID) AS PRODUCT_CODE,
PBM.REV,
PBM.SPEC_NAME,
PBM.REGDATE AS REGDATE_ORG,
TO_CHAR(PBM.REGDATE, 'YYYY-MM-DD') AS REGDATE,
PBM.DEPLOY_DATE,
PBM.WRITER,
INFO.*,
(SELECT COUNT(*) FROM SALES_BOM_PART_QTY WHERE BOM_REPORT_OBJID = A.BOM_REPORT_OBJID) AS PART_CNT,
(SELECT DEPT_NAME FROM USER_INFO WHERE USER_ID = SBP.WRITER) AS SALES_DEPT_NAME,
(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = SBP.WRITER) AS SALES_USER_NAME,
SBP.REGDATE AS SALES_REGDATE_ORG,
TO_CHAR(SBP.REGDATE, 'YYYY-MM-DD') AS SALES_REGDATE
FROM BOM_PART_QTY A
LEFT JOIN SALES_BOM_REPORT SBP
ON A.BOM_REPORT_OBJID = SBP.BOM_REPORT_OBJID::TEXT
LEFT JOIN PART_BOM_REPORT PBM
ON A.BOM_REPORT_OBJID = PBM.OBJID::TEXT
LEFT OUTER JOIN
(
SELECT
PMUD.*,
(SELECT model_CODE FROM product_mgmt_model O1
WHERE O1.product_category = (SELECT o.product_category from product_mgmt o WHERE o.objid = PMUD.product_objid)
AND O1.MODEL_NAME = (SELECT o.PRODUCT_CODE from product_mgmt o WHERE o.objid = PMUD.product_objid)
)||PMUD.UPG_CODE||'-'||PMUD.VC AS UPG_NO
FROM(
SELECT
DISTINCT
PMUD.OBJID AS DETAIL_OBJID,
PMUD.OBJID::VARCHAR AS CODE,
PMUD.UPG_NAME,
PMUD.UPG_NAME AS NAME,
PMUD.UPG_CODE AS CODE_CD,
PMUD.NOTE,
PMUD.TARGET_OBJID AS MASTER_OBJID,
PMUD.VC,
PMUD.PRODUCT_OBJID,
PMUD.UPG_CODE,
(SELECT SPEC_NAME FROM PRODUCT_MGMT_UPG_MASTER PMUM WHERE 1=1 AND PMUM.OBJID = PMUD.TARGET_OBJID) AS SPEC_NAME,
(SELECT PRODUCT_CODE FROM PRODUCT_MGMT PM WHERE 1=1 AND PM.OBJID = PMUD.PRODUCT_OBJID) AS PRODUCT_CODE
FROM
PRODUCT_MGMT_UPG_DETAIL PMUD
WHERE 1=1
) PMUD
) INFO
ON PBM.PRODUCT_MGMT_OBJID = INFO.PRODUCT_OBJID
AND PBM.PRODUCT_MGMT_SPEC = INFO.MASTER_OBJID
AND PBM.PRODUCT_MGMT_UPG = INFO.UPG_NO
LEFT OUTER JOIN PART_MNG PM
ON A.PART_NO = PM.OBJID::TEXT
WHERE 1=1
<if test="product_code != null and product_code != ''">
AND PBM.PRODUCT_MGMT_OBJID::VARCHAR = #{product_code}::VARCHAR
</if>
<if test="product_mgmt_spec != null and product_mgmt_spec != ''">
AND PBM.SPEC_NAME::VARCHAR = #{product_mgmt_spec}::VARCHAR
</if>
<if test="upg_no != null and upg_no != ''">
AND PBM.PRODUCT_MGMT_UPG = #{upg_no}
</if>
<if test="search_partNo != null and !''.equals(search_partNo)">
AND UPPER(PM.PART_NO) LIKE UPPER('%${search_partNo}%')
</if>
<if test="search_partName != null and !''.equals(search_partName)">
AND UPPER(PM.PART_NAME) LIKE UPPER('%${search_partName}%')
</if>
) AA
</select>
<update id="structureSeqSave" parameterType="map">
UPDATE BOM_PART_QTY SET SEQ = #{SEQ}::numeric WHERE CHILD_OBJID = #{CHILD_OBJID}
</update>
<!-- PART 관리 목록 조회 -->
<select id="partMngDeployList" parameterType="map" resultType="map">
SELECT
ROW_NUMBER() OVER(ORDER BY PART_NO) RNUM,
P.*,
T3.CHANGE_OPTION_NAME,
AF.SAVED_FILE_NAME,
AF.REAL_FILE_NAME,
REPLACE(AF.FILE_PATH, '\', '\\') AS FILE_PATH,
case when CAD.SAVED_FILE_NAME is NOT NULL
then 1
else 0 end as CU01_CNT,
case when DRAWING.SAVED_FILE_NAME is NOT NULL
then 1
else 0 end as CU02_CNT,
case when PDF.SAVED_FILE_NAME is NOT NULL
then 1
else 0 end as CU03_CNT
FROM PART_MNG_HISTORY 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 STATUS = 'Active'
) AF
ON P.OBJID::varchar = AF.TARGET_OBJID::varchar
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 ('3D_CAD')
AND STATUS = 'Active'
) CAD
ON P.OBJID::varchar = CAD.TARGET_OBJID::varchar
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 ('2D_DRAWING_CAD')
AND STATUS = 'Active'
) DRAWING
ON P.OBJID::varchar = DRAWING.TARGET_OBJID::varchar
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 ('2D_PDF_CAD')
AND STATUS = 'Active'
) PDF
ON P.OBJID::varchar = PDF.TARGET_OBJID::varchar
LEFT OUTER JOIN(
SELECT
TT.OBJID,
ARRAY_TO_STRING(ARRAY_AGG((SELECT CODE_NAME FROM COMM_CODE AS CC WHERE CC.CODE_ID IN(TT.CHANGE_OPTION))),',') AS CHANGE_OPTION_NAME
FROM (
SELECT
T.OBJID,
UNNEST(STRING_TO_ARRAY(CHANGE_OPTION, ',')) AS CHANGE_OPTION
FROM PART_MNG AS T
) AS TT
GROUP BY TT.OBJID
) AS T3
ON T3.OBJID = P.OBJID
WHERE 1=1
AND P.status='release'
<if test="product_code != null and product_code != ''">
AND PRODUCT_MGMT_OBJID = #{product_code}
</if>
<if test="upg_no != null and upg_no != ''">
AND UPG_NO = #{upg_no}
</if>
<if test="SEARCH_PART_NO != null and SEARCH_PART_NO != ''">
AND UPPER(PART_NO) LIKE UPPER('%${SEARCH_PART_NO}%')
</if>
<if test="SEARCH_PART_NAME != null and SEARCH_PART_NAME != ''">
AND UPPER(PART_NAME) LIKE UPPER('%${SEARCH_PART_NAME}%')
</if>
<if test="SEARCH_MATERIAL != null and SEARCH_MATERIAL != ''">
AND UPPER(MATERIAL) LIKE UPPER('%${SEARCH_MATERIAL}%')
</if>
<if test="SEARCH_SPEC != null and SEARCH_SPEC != ''">
AND UPPER(SPEC) LIKE UPPER('%${SEARCH_SPEC}%')
</if>
<if test="SEARCH_PART_TYPE != null and SEARCH_PART_TYPE != ''">
AND PART_TYPE = #{SEARCH_PART_TYPE}
</if>
<if test="SEARCH_DESIGN_DATE_FROM != null and SEARCH_DESIGN_DATE_FROM != ''">
AND TO_DATE(DESIGN_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> #{SEARCH_DESIGN_DATE_FROM}::TIMESTAMP
</if>
<if test="SEARCH_DESIGN_DATE_TO != null and SEARCH_DESIGN_DATE_TO != ''">
AND TO_DATE(DESIGN_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> #{SEARCH_DESIGN_DATE_TO}::TIMESTAMP
</if>
<if test="SEARCH_WRITER != null and SEARCH_WRITER != ''">
AND WRITER = #{SEARCH_WRITER}
</if>
<if test="EO != null and EO != ''">
AND EO_TEMP IS NULL OR EO_TEMP = ''
</if>
</select>
<!-- OBJID 추출 -->
<select id="getPartObjid" parameterType="string" resultType="map">
SELECT
OBJID::VARCHAR AS PART_OBJID
FROM PART_MNG
WHERE IS_LAST='1'
AND PART_NO=#{PART_NO}
</select>
<!-- BOM_PART_QTY OBJID 추출 -->
<select id="getBomPartQtyObjid" parameterType="string" resultType="map">
SELECT
BPQ.CHILD_OBJID
FROM BOM_PART_QTY AS BPQ
WHERE BOM_REPORT_OBJID =#{BOM_REPORT_OBJID}
AND BPQ.PART_NO IN (SELECT OBJID::VARCHAR FROM PART_MNG AS O WHERE O.PART_NO = #{PART_NO})
AND COALESCE(STATUS, '') NOT IN ('deleting', 'deleted')
</select>
<insert id="insertpartInfo" parameterType="map">
INSERT INTO PART_MNG
(
OBJID
,PART_NO
,PART_NAME
,UNIT
,QTY
,SPEC
,MATERIAL
,THICKNESS
,WIDTH
,HEIGHT
,OUT_DIAMETER
,IN_DIAMETER
,LENGTH
,REMARK
,STATUS
,REG_DATE
,WRITER
,IS_LAST
,PART_TYPE
,PRODUCT_MGMT_OBJID
,SUPPLY_CODE
,MAKER
,CONTRACT_OBJID
,POST_PROCESSING
) VALUES (
#{PART_OBJID}::NUMERIC
,#{PART_NO}
,#{PART_NAME}
,#{UNIT}
,#{QTY}
,#{SPEC}
,#{MATERIAL}
,#{THICKNESS}
,#{WIDTH}
,#{HEIGHT}
,#{OUT_DIAMETER}
,#{IN_DIAMETER}
,#{LENGTH}
,#{REMARK}
,'create'
,now()
,#{CONNECTUSERID}
,'1'
,#{PART_TYPE}
,#{PRODUCT_MGMT_OBJID}
,#{SUPPLY_CODE}
,#{MAKER}
,#{CONTRACT_OBJID}
,#{POST_PROCESSING}
)
</insert>
<!-- 계약제품, 업체명으로 BOM에 등록된 부품정보 조회 -->
<select id="partLinkedBomContractList" parameterType="map" resultType="map">
SELECT P.OBJID AS PART_OBJID
,P.PART_NO AS DO_NO
,(SELECT SUM(I.QTY) FROM INVENTORY_MNG I, RESOURCE_MNG RM
WHERE RM.OBJID = I.PARENT_OBJID
AND I.IS_LAST = 'Y'
AND RM.PART_OBJID::INTEGER = P.OBJID
GROUP BY I.PARENT_OBJID
) AS INVEN_TOTAL_QTY
,P.*
FROM PART_BOM_REPORT PBR
,BOM_PART_QTY BPQ
,PART_MNG P
,PRODUCT_MGMT PDM
,CONTRACT_MGMT CM
WHERE PBR.OBJID = BPQ.BOM_REPORT_OBJID::NUMERIC
AND BPQ.CHILD_OBJID::NUMERIC = P.OBJID
AND PBR.PRODUCT_MGMT_OBJID = PDM.OBJID
AND PDM.PRODUCT_CODE = CM.PRODUCT_CODE
<if test="contract_mgmt_objid != null and contract_mgmt_objid != ''">
AND CM.OBJID = #{contract_mgmt_objid}::NUMERIC /*계약번호*/
</if>
<if test="supply_code != null and supply_code != ''">
AND P.SUPPLY_CODE = #{supply_code} /*공급업체*/
</if>
</select>
<!-- rev버젼 추출 -->
<select id="getBOMContractinfo" parameterType="string" resultType="map">
SELECT
(SELECT CODE_NAME FROM COMM_CODE AS O WHERE O.CODE_ID = PRODUCT) AS PRODUCT_NAME
,PRODUCT
,CUSTOMER_PROJECT_NAME
FROM PROJECT_MGMT
WHERE OBJID =#{project_name}
</select>
<select id="partMngHistList" parameterType="map" resultType="map">
SELECT PM.OBJID
,PM.EO_NO
,TO_CHAR(CM.REGDATE, 'YYYY') AS YEAR
,COALESCE(CM.CUSTOMER_PROJECT_NAME, CM2.CUSTOMER_PROJECT_NAME) AS PROJECT_NAME
,COALESCE(CM2.PROJECT_NO, CM.PROJECT_NO) PROJECT_NO
,(SELECT PART_NO||' '||PART_NAME FROM PART_MNG SP WHERE SP.OBJID = PM.PARENT_PART_NO) PARENT_PART_INFO
<!-- ,PM.PART_NO -->
,CASE WHEN CHANGE_OPTION = '0001790' THEN PM.PART_NO || '->' || PM.CHG_PART_NO
ELSE PM.PART_NO
END
,PM.PART_NAME
,CASE WHEN CHANGE_OPTION = '0001790' THEN PM.PART_NAME || '->' || (SELECT PART_NAME FROM PART_MNG P WHERE P.OBJID = PM.CHG_PART_OBJID::VARCHAR)
ELSE PM.PART_NAME
END
,PM.BOM_QTY_STATUS
,CASE WHEN PM.BOM_QTY_STATUS = 'adding' THEN PM.QTY_TEMP
ELSE PM.QTY END QTY
,CASE
WHEN PM.BOM_QTY_STATUS = 'adding' THEN ''
WHEN PM.BOM_QTY_STATUS = 'beforeEdit' and PM.QTY = PM.QTY_TEMP THEN ''
ELSE PM.QTY_TEMP END QTY_TEMP
,'' AS EO_STEP
,PM.CHANGE_TYPE
,(SELECT CODE_NAME FROM COMM_CODE AS O WHERE O.CODE_ID = PM.CHANGE_TYPE) AS CHANGE_TYPE_NAME
,PM.CHANGE_OPTION
,(SELECT CODE_NAME FROM COMM_CODE AS O WHERE O.CODE_ID = PM.CHANGE_OPTION) AS CHANGE_OPTION_NAME
<!-- ,PM.REVISION -->
,CASE WHEN CHANGE_OPTION = '0001790' THEN PM.REVISION || '->' || PM.CHG_PART_REV
ELSE PM.REVISION
END
,PM.EO_DATE
,PM.PART_TYPE
,(SELECT CODE_NAME FROM COMM_CODE AS O WHERE O.CODE_ID = PM.PART_TYPE) AS PART_TYPE_NAME
,PM.WRITER
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = PM.WRITER) AS WRITER_NAME
,WTS.UNIT_NO || '-' || WTS.TASK_NAME AS UNIT_NAME
,TO_CHAR(PM.HIS_REG_DATE,'YYYY-MM-DD') AS HIS_REG_DATE_TITLE
,BOM_DEPLOY_DATE
,TO_CHAR(PM.BOM_DEPLOY_DATE,'YYYY-MM-DD') AS BOM_DEPLOY_DATE_TITLE
FROM PART_MNG_HISTORY PM
LEFT OUTER JOIN PROJECT_MGMT CM
ON PM.CONTRACT_OBJID = CM.OBJID
LEFT OUTER JOIN PART_BOM_REPORT B
ON PM.BOM_REPORT_OBJID = B.OBJID
LEFT OUTER JOIN PROJECT_MGMT CM2
ON B.CONTRACT_OBJID = CM2.OBJID
LEFT OUTER JOIN PMS_WBS_TASK WTS
ON B.UNIT_CODE = WTS.OBJID
WHERE 1=1
<!-- 파트 신규등록건 조회 제외 -->
AND NOT ( PM.HIS_STATUS = 'DEPLOY'
AND PM.CHANGE_TYPE IS NULL
AND PM.REVISION = 'RE')
AND PM.REVISION IS NOT NULL
AND NVL(PM.BOM_STATUS, '') = 'deploy'
<!--
-->
<if test="Year !=null and Year != '' ">
AND TO_CHAR(CM.REGDATE, 'YYYY') = #{Year}
</if>
<if test="contract_objid !=null and contract_objid != '' ">
AND CM.OBJID = #{contract_objid}
</if>
<if test="unit_code != null and unit_code != ''">
AND B.UNIT_CODE = #{unit_code}
</if>
<if test="part_no !=null and part_no != '' ">
<!--
AND PM.PART_NO = #{part_no}
-->
AND UPPER(PM.PART_NO) LIKE UPPER('%${part_no}%')
</if>
<if test="part_name !=null and part_name != '' ">
<!--
AND PM.PART_NAME = #{part_name}
-->
AND UPPER(PM.PART_NAME) LIKE UPPER('%${part_name}%')
</if>
<if test="change_option !=null and change_option != '' ">
AND PM.CHANGE_OPTION = #{change_option}
</if>
<if test="eo_start_date !=null and eo_start_date != '' ">
AND TO_DATE(PM.EO_DATE, 'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{eo_start_date}, 'YYYY-MM-DD')
</if>
<if test="eo_end_date !=null and eo_end_date != '' ">
AND TO_DATE(PM.EO_DATE, 'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{eo_end_date} , 'YYYY-MM-DD')
</if>
<if test="change_type !=null and change_type != '' ">
AND PM.CHANGE_TYPE = #{change_type}
</if>
<if test="part_type !=null and part_type != '' ">
AND PM.PART_TYPE = #{part_type}
</if>
<if test="writer_id !=null and writer_id != '' ">
AND PM.WRITER = #{writer_id}
</if>
<if test="STATUS != null and STATUS != ''">
AND PM.STATUS = #{STATUS}
</if>
<if test="STATUS_NQ != null and STATUS_NQ != ''">
AND PM.STATUS != #{STATUS_NQ}
</if>
<if test="SEARCH_TYPE != null and SEARCH_TYPE != '' and 'CHANGE_LIST'.equals(SEARCH_TYPE) ">
AND ( PM.STATUS != 'create'
AND COALESCE(PM.REVISION, '') != ''
)
</if>
ORDER BY COALESCE(PM.HIS_REG_DATE, PM.REG_DATE) DESC, PM.PART_NO
</select>
<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>
<!-- is last 업데이트 -->
<update id="updateislast" parameterType="map">
UPDATE
PART_MNG
SET
IS_LAST = '0'
WHERE PART_NO = #{PART_NO}
</update>
<update id="updateislastByBomPartQty" parameterType="map">
UPDATE
PART_MNG
SET
IS_LAST = '0'
WHERE OBJID IN (SELECT Q.PART_NO
FROM BOM_PART_QTY Q
,PART_MNG P
WHERE BOM_REPORT_OBJID = #{BOM_REPORT_OBJID}
<!--
AND STATUS IN ('editing')
-->
AND P.OBJID = Q.PART_NO
AND P.STATUS IN ('changeDesign')
)
</update>
<!-- PART 관리 목록 조회 -->
<select id="parttypeInfo" parameterType="map" resultType="map">
SELECT
CODE_ID
FROM COMM_CODE
WHERE CODE_NAME=#{CODE_NAME}
AND PARENT_CODE_ID='0000062'
</select>
<!-- 배포 사유 저장 -->
<update id="saveChangeDesignInfo" parameterType="map">
UPDATE PART_BOM_REPORT SET NOTE = #{NOTE}
<!-- 240326 아래 다건 적용
WHERE OBJID = #{OBJID}
-->
WHERE <![CDATA[ POSITION(OBJID||',' in #{OBJID}||',') > 0 ]]>
</update>
<select id="relatePartMng" parameterType="map" resultType="map">
SELECT
*
FROM
BOM_PART_QTY
WHERE 1=1
AND BOM_REPORT_OBJID = #{}
</select>
<!-- 백업 240710-->
<sql id="sql_adminDeleteBomWhere">
</sql>
<insert id="bak_insertDelPartBom" parameterType="map">
INSERT INTO PART_BOM_REPORT_DEL
SELECT * FROM PART_BOM_REPORT
<if test="OBJID = null and checkArr = null">
WHERE 1=2
</if>
<if test="OBJID != null">
WHERE OBJID = #{OBJID}
</if>
<if test="checkArr != null">
WHERE OBJID IN
<foreach collection="checkArr" item="fobjid" index="index" separator="," open="(" close=")">
'${fobjid}'
</foreach>
</if>
</insert>
<insert id="bak_insertDelPartMng" parameterType="map">
INSERT INTO PART_MNG_DEL
SELECT * FROM PART_MNG P
WHERE EXISTS (
SELECT 'E' FROM BOM_PART_QTY Q
<if test="OBJID = null and checkArr = null">
WHERE 1=2
</if>
<if test="OBJID != null">
WHERE Q.BOM_REPORT_OBJID = #{OBJID}
</if>
<if test="checkArr != null">
WHERE Q.BOM_REPORT_OBJID IN
<foreach collection="checkArr" item="fobjid" index="index" separator="," open="(" close=")">
'${fobjid}'
</foreach>
</if>
AND NVL(Q.LAST_PART_OBJID, Q.PART_NO) = P.OBJID
)
AND NOT EXISTS (
SELECT 'E' FROM BOM_PART_QTY Q
<if test="OBJID != null">
WHERE Q.BOM_REPORT_OBJID != #{OBJID}
</if>
<if test="checkArr != null">
WHERE Q.BOM_REPORT_OBJID NOT IN
<foreach collection="checkArr" item="fobjid" index="index" separator="," open="(" close=")">
'${fobjid}'
</foreach>
</if>
AND (Q.LAST_PART_OBJID = P.OBJID OR Q.PART_NO = P.OBJID)
<!--
AND NVL(Q.LAST_PART_OBJID, Q.PART_NO) = P.OBJID
-->
)
</insert>
<insert id="bak_insertDelPartQty" parameterType="map">
INSERT INTO BOM_PART_QTY_DEL
SELECT * FROM BOM_PART_QTY
<if test="OBJID = null and checkArr = null">
WHERE 1=2
</if>
<if test="OBJID != null">
WHERE BOM_REPORT_OBJID = #{OBJID}
</if>
<if test="checkArr != null">
WHERE BOM_REPORT_OBJID IN
<foreach collection="checkArr" item="fobjid" index="index" separator="," open="(" close=")">
'${fobjid}'
</foreach>
</if>
</insert>
<!-- 삭제 -->
<delete id="deletePartBom" parameterType="map">
DELETE FROM PART_BOM_REPORT
<if test="OBJID = null and checkArr = null">
WHERE 1=2
</if>
<if test="OBJID != null">
WHERE OBJID = #{OBJID}
</if>
<if test="checkArr != null">
WHERE OBJID IN
<foreach collection="checkArr" item="fobjid" index="index" separator="," open="(" close=")">
'${fobjid}'
</foreach>
</if>
</delete>
<delete id="deletePartMng" parameterType="map">
DELETE FROM PART_MNG P
WHERE EXISTS (
SELECT 'E' FROM BOM_PART_QTY Q
<if test="OBJID = null and checkArr = null">
WHERE 1=2
</if>
<if test="OBJID != null">
WHERE Q.BOM_REPORT_OBJID = #{OBJID}
</if>
<if test="checkArr != null">
WHERE Q.BOM_REPORT_OBJID IN
<foreach collection="checkArr" item="fobjid" index="index" separator="," open="(" close=")">
'${fobjid}'
</foreach>
</if>
AND NVL(Q.LAST_PART_OBJID, Q.PART_NO) = P.OBJID
)
AND NOT EXISTS (
SELECT 'E' FROM BOM_PART_QTY Q
<if test="OBJID != null">
WHERE Q.BOM_REPORT_OBJID != #{OBJID}
</if>
<if test="checkArr != null">
WHERE Q.BOM_REPORT_OBJID NOT IN
<foreach collection="checkArr" item="fobjid" index="index" separator="," open="(" close=")">
'${fobjid}'
</foreach>
</if>
AND (Q.LAST_PART_OBJID = P.OBJID OR Q.PART_NO = P.OBJID)
<!--
AND NVL(Q.LAST_PART_OBJID, Q.PART_NO) = P.OBJID
-->
)
</delete>
<delete id="deletePartQty" parameterType="map">
DELETE FROM BOM_PART_QTY
<if test="OBJID = null and checkArr = null">
WHERE 1=2
</if>
<if test="OBJID != null">
WHERE BOM_REPORT_OBJID = #{OBJID}
</if>
<if test="checkArr != null">
WHERE BOM_REPORT_OBJID IN
<foreach collection="checkArr" item="fobjid" index="index" separator="," open="(" close=")">
'${fobjid}'
</foreach>
</if>
</delete>
<!-- 삭제 복구 -->
<insert id="res_insertPartBom" parameterType="map">
INSERT INTO PART_BOM_REPORT
SELECT * FROM PART_BOM_REPORT_DEL
<if test="OBJID = null and checkArr = null">
WHERE 1=2
</if>
<if test="OBJID != null">
WHERE BOM_REPORT_OBJID = #{OBJID}
</if>
<if test="checkArr != null">
WHERE BOM_REPORT_OBJID IN
<foreach collection="checkArr" item="fobjid" index="index" separator="," open="(" close=")">
'${fobjid}'
</foreach>
</if>
</insert>
<insert id="res_insertPartMng" parameterType="map">
INSERT INTO PART_MNG
SELECT * FROM PART_MNG_DEL P
WHERE EXISTS (
SELECT 'E' FROM BOM_PART_QTY_DEL Q
<if test="OBJID = null and checkArr = null">
WHERE 1=2
</if>
<if test="OBJID != null">
WHERE Q.BOM_REPORT_OBJID = #{OBJID}
</if>
<if test="checkArr != null">
WHERE Q.BOM_REPORT_OBJID IN
<foreach collection="checkArr" item="fobjid" index="index" separator="," open="(" close=")">
'${fobjid}'
</foreach>
</if>
AND NVL(Q.LAST_PART_OBJID, Q.PART_NO) = P.OBJID
)
AND NOT EXISTS (
SELECT 'E' FROM BOM_PART_QTY_DEL Q
,PART_MNG SP
<if test="OBJID = null and checkArr = null">
WHERE 1=2
</if>
<if test="OBJID != null">
WHERE Q.BOM_REPORT_OBJID = #{OBJID}
</if>
<if test="checkArr != null">
WHERE Q.BOM_REPORT_OBJID IN
<foreach collection="checkArr" item="fobjid" index="index" separator="," open="(" close=")">
'${fobjid}'
</foreach>
</if>
AND NVL(Q.LAST_PART_OBJID, Q.PART_NO) = P.OBJID
AND SP.OBJID = NVL(Q.LAST_PART_OBJID, Q.PART_NO)
)
</insert>
<insert id="res_insertPartQty" parameterType="map">
INSERT INTO BOM_PART_QTY
SELECT * FROM BOM_PART_QTY_DEL
<if test="OBJID = null and checkArr = null">
WHERE 1=2
</if>
<if test="OBJID != null">
WHERE BOM_REPORT_OBJID = #{OBJID}
</if>
<if test="checkArr != null">
WHERE BOM_REPORT_OBJID IN
<foreach collection="checkArr" item="fobjid" index="index" separator="," open="(" close=")">
'${fobjid}'
</foreach>
</if>
</insert>
<select id="existPartNoCheck" parameterType="map" resultType="map">
SELECT
T.*
FROM PART_MNG T
WHERE 1=1
<!-- AND T.OBJID != #{OBJID} -->
<!-- AND IS_LONGD = '1' -->
AND REPLACE(TRIM(UPPER(T.PART_NO)), ' ', '') = REPLACE(TRIM(UPPER(#{partNo})), ' ', '')
</select>
<insert id="changeRelatePartInfo" parameterType="map">
UPDATE BOM_PART_QTY
SET LAST_PART_OBJID = #{RIGHT_OBJID}
WHERE BOM_REPORT_OBJID = #{BOM_REPORT_OBJID}
AND OBJID = #{B_OBJID}
</insert>
<update id="insertPartChangeHistory" parameterType="map">
INSERT INTO PART_MNG_HISTORY
(
SELECT
P.OBJID::numeric,
P.PRODUCT_MGMT_OBJID,
P.UPG_NO,
P.PART_NO,
P.PART_NAME,
P.UNIT,
<!--
P.QTY,
(CASE WHEN (Q.QTY_TEMP IS NULL OR Q.QTY_TEMP = '') THEN P.QTY ELSE Q.QTY_TEMP END),
-->
Q.QTY,
P.SPEC,
P.MATERIAL,
P.WEIGHT,
P.PART_TYPE,
P.REMARK,
P.ES_SPEC,
P.MS_SPEC,
(CASE WHEN (#{CHANGE_OPTION} IS NULL OR #{CHANGE_OPTION} = '') THEN P.CHANGE_OPTION ELSE #{CHANGE_OPTION} END),
<!--
'',
-->
P.DESIGN_APPLY_POINT,
P.MANAGEMENT_FLAG,
P.REVISION,
P.STATUS,
P.REG_DATE,
NOW(),
#{WRITER},
P.IS_LAST,
P.EO_NO,
P.EO_TEMP,
P.EXCEL_UPLOAD_SEQ,
P.SOURCING_CODE,
P.SUB_MATERIAL,
<!--
P.PARENT_PART_NO,
#{PARENT_PART_NO},
'',
-->
(CASE WHEN (#{PARENT_PART_NO} IS NULL OR #{PARENT_PART_NO} = '') THEN Q.PARENT_PART_NO ELSE #{PARENT_PART_NO} END),
P.DESIGN_DATE,
P.EO_DATE,
P.DEPLOY_DATE
,P.THICKNESS
,P.WIDTH
,P.HEIGHT
,P.OUT_DIAMETER
,P.IN_DIAMETER
,P.LENGTH
,P.SUPPLY_CODE
,(CASE WHEN (#{CHANGE_TYPE} IS NULL OR #{CHANGE_TYPE} = '') THEN P.CHANGE_TYPE ELSE #{CHANGE_TYPE} END)
<!--
,''
-->
,P.CONTRACT_OBJID
,P.MAKER
,Q.QTY_TEMP
,(CASE WHEN (#{BOM_REPORT_OBJID} IS NULL OR #{BOM_REPORT_OBJID} = '') THEN Q.BOM_REPORT_OBJID ELSE #{BOM_REPORT_OBJID} END)
,(CASE WHEN (#{PARENT_PART_OBJID} IS NULL OR #{PARENT_PART_OBJID} = '') THEN Q.PARENT_PART_NO ELSE #{PARENT_PART_OBJID} END)
,(CASE WHEN (#{PARENT_QTY_CHILD_OBJID} IS NULL OR #{PARENT_QTY_CHILD_OBJID} = '') THEN Q.PARENT_OBJID ELSE #{PARENT_QTY_CHILD_OBJID} END)
<!--
,'','',''
-->
,Q.STATUS
,NOW()
,#{WRITER}
,#{HIS_STATUS}
,#{CHILD_OBJID}
,''
FROM
PART_MNG P
LEFT OUTER JOIN BOM_PART_QTY Q
ON P.PART_NO IN (SELECT PM2.PART_NO
FROM PART_MNG PM2
<!--
,PART_MNG PM1
-->
WHERE PM2.OBJID = Q.PART_NO
<!--
AND PM1.IS_LAST = '1'
AND PM1.PART_NO = PM2.PART_NO
-->
)
AND BOM_REPORT_OBJID = '801248820'
<choose>
<when test="HIS_STATUS != null and !''.equals(HIS_STATUS) and 'DEPLOY'.equals(HIS_STATUS)">
<!-- 설변대상 PART에서 온 건 -->
AND Q.STATUS = 'beforeEdit'
<!--
AND Q.STATUS IN ('beforeEdit', 'editing','deleting', 'deploy')
-->
</when>
<when test="HIS_STATUS != null and !''.equals(HIS_STATUS) and 'DEL'.equals(HIS_STATUS)">
</when>
<when test="HIS_STATUS != null and !''.equals(HIS_STATUS) and 'ADD'.equals(HIS_STATUS)">
</when>
<otherwise>
</otherwise>
</choose>
WHERE P.OBJID = #{BOM_REPORT_OBJID}
)
</update>
</mapper>