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

8469 lines
261 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 [LPAD(A.SEQ::TEXT, 10, '0')],
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||LPAD(B.SEQ::TEXT, 10, '0'),
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,
CC_UNIT.CODE_NAME AS UNIT_TITLE,
COALESCE(BOM_QTY_DATA.QTY, P.QTY) QTY,
P.QTY QTY_P,
P.SPEC,
P.POST_PROCESSING,
P.MATERIAL,
P.WEIGHT,
P.PART_TYPE,
P.IS_LONGD,
CC_PART.CODE_NAME AS PART_TYPE_TITLE,
P.REMARK,
P.ES_SPEC,
P.MS_SPEC,
P.CHANGE_TYPE,
P.DESIGN_APPLY_POINT,
P.CHANGE_OPTION,
CHANGE_OPT.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,
-->
P.SUPPLY_CODE,
SUP.SUPPLY_NAME,
P.HEAT_TREATMENT_HARDNESS,
P.HEAT_TREATMENT_METHOD,
P.SURFACE_TREATMENT,
P.ACCTFG,
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = P.ACCTFG) AS ACCTFG_NM,
P.ODRFG,
CASE WHEN P.ODRFG = '0' THEN '구매' WHEN P.ODRFG = '1' THEN '생산' WHEN P.ODRFG = '8' THEN 'Phantom' ELSE '' END AS ODRFG_NM,
P.UNIT_DC,
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = P.UNIT_DC) AS UNIT_DC_NM,
P.UNITMANG_DC,
(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = P.UNITMANG_DC) AS UNITMANG_DC_NM,
P.UNITCHNG_NB,
P.LOT_FG,
CASE WHEN P.LOT_FG = '1' THEN '사용' WHEN P.LOT_FG = '0' THEN '미사용' ELSE '' END AS LOT_FG_NM,
P.USE_YN,
CASE WHEN P.USE_YN = '1' THEN '사용' WHEN P.USE_YN = '0' THEN '미사용' ELSE '' END AS USE_YN_NM,
P.QC_FG,
CASE WHEN P.QC_FG = '1' THEN '검사' WHEN P.QC_FG = '0' THEN '무검사' ELSE '' END AS QC_FG_NM,
P.SETITEM_FG,
CASE WHEN P.SETITEM_FG = '1' THEN '여' WHEN P.SETITEM_FG = '0' THEN '부' ELSE '' END AS SETITEM_FG_NM,
P.REQ_FG,
CASE WHEN P.REQ_FG = '1' THEN '여' WHEN P.REQ_FG = '0' THEN '부' ELSE '' END AS REQ_FG_NM,
P.UNIT_LENGTH,
P.UNIT_QTY,
COALESCE(FILE_CNT.CU01_CNT, 0) CU01_CNT,
COALESCE(FILE_CNT.CU02_CNT, 0) CU02_CNT,
COALESCE(FILE_CNT.CU03_CNT, 0) CU03_CNT,
COALESCE(FILE_CNT.CU_TOTAL_CNT, 0) CU_TOTAL_CNT
FROM PART_MNG P
LEFT JOIN COMM_CODE CC_UNIT ON CC_UNIT.CODE_ID = P.UNIT
LEFT JOIN COMM_CODE CC_PART ON CC_PART.CODE_ID = P.PART_TYPE
LEFT JOIN admin_supply_mng SUP ON SUP.objid::varchar = P.SUPPLY_CODE
LEFT JOIN LATERAL (
SELECT QTY
FROM BOM_PART_QTY Q
WHERE Q.LAST_PART_OBJID = P.OBJID
AND STATUS = 'deploy'
ORDER BY DEPLOY_DATE DESC
LIMIT 1
) BOM_QTY_DATA ON TRUE
LEFT JOIN LATERAL (
SELECT ARRAY_TO_STRING(ARRAY_AGG(CC.CODE_NAME), ',') AS CHANGE_OPTION_NAME
FROM COMM_CODE AS CC
WHERE CC.CODE_ID IN (
SELECT UNNEST(STRING_TO_ARRAY(P.CHANGE_OPTION, ','))
)
) CHANGE_OPT ON TRUE
LEFT JOIN (
SELECT
TARGET_OBJID,
SUM(CASE WHEN DOC_TYPE = '3D_CAD' THEN 1 ELSE 0 END) AS CU01_CNT,
SUM(CASE WHEN DOC_TYPE = '2D_DRAWING_CAD' THEN 1 ELSE 0 END) AS CU02_CNT,
SUM(CASE WHEN DOC_TYPE = '2D_PDF_CAD' THEN 1 ELSE 0 END) AS CU03_CNT,
SUM(CASE WHEN DOC_TYPE IN ('2D_PDF_CAD', '2D_DRAWING_CAD') THEN 1 ELSE 0 END) AS CU_TOTAL_CNT
FROM ATTACH_FILE_INFO
WHERE STATUS = 'Active'
AND DOC_TYPE IN ('3D_CAD', '2D_DRAWING_CAD', '2D_PDF_CAD')
GROUP BY TARGET_OBJID
) FILE_CNT ON FILE_CNT.TARGET_OBJID = P.OBJID
<!--
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_COUNTS AS (
SELECT
TARGET_OBJID,
COUNT(CASE WHEN DOC_TYPE = '3D_CAD' THEN 1 END) AS CU01_CNT,
COUNT(CASE WHEN DOC_TYPE = '2D_DRAWING_CAD' THEN 1 END) AS CU02_CNT,
COUNT(CASE WHEN DOC_TYPE = '2D_PDF_CAD' THEN 1 END) AS CU03_CNT,
COUNT(CASE WHEN DOC_TYPE IN ('2D_PDF_CAD', '2D_DRAWING_CAD') THEN 1 END) AS CU_TOTAL_CNT,
COUNT(CASE WHEN DOC_TYPE = 'ECD_DOC' THEN 1 END) AS ECD_CNT
FROM ATTACH_FILE_INFO
WHERE STATUS = 'Active'
AND DOC_TYPE IN ('PART_SHAPE_IMG','ECD_DOC','3D_CAD','2D_DRAWING_CAD','2D_PDF_CAD')
GROUP BY TARGET_OBJID
),
V_FILE AS (
SELECT DISTINCT ON (TARGET_OBJID, DOC_TYPE)
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')
AND STATUS = 'Active'
ORDER BY TARGET_OBJID, DOC_TYPE, OBJID
)
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,
CC_UNIT.CODE_NAME AS UNIT_TITLE,
P.QTY,
P.SPEC,
P.POST_PROCESSING,
P.MATERIAL,
P.WEIGHT,
P.PART_TYPE,
CC_PART.CODE_NAME 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,
CC_DESIGN.CODE_NAME 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,
CC_SOURCING.CODE_NAME AS SOURCING_NAME,
AF_IMG.SAVED_FILE_NAME,
AF_IMG.REAL_FILE_NAME,
REPLACE(AF_IMG.FILE_PATH, '\', '\\') AS FILE_PATH,
COALESCE(FC.CU01_CNT, 0) AS CU01_CNT,
COALESCE(FC.CU02_CNT, 0) AS CU02_CNT,
COALESCE(FC.CU03_CNT, 0) AS CU03_CNT,
COALESCE(FC.CU_TOTAL_CNT, 0) 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 FC.ECD_CNT > 0 THEN 'Y' ELSE 'N' END AS ECD_FLAG,
THICKNESS,
WIDTH,
HEIGHT,
OUT_DIAMETER,
IN_DIAMETER,
LENGTH,
P.SUPPLY_CODE,
SUP.SUPPLY_NAME
FROM
PART_MNG P
LEFT JOIN COMM_CODE CC_UNIT ON CC_UNIT.CODE_ID = P.UNIT
LEFT JOIN COMM_CODE CC_PART ON CC_PART.CODE_ID = P.PART_TYPE
LEFT JOIN COMM_CODE CC_DESIGN ON CC_DESIGN.CODE_ID = P.DESIGN_APPLY_POINT
LEFT JOIN COMM_CODE CC_SOURCING ON CC_SOURCING.CODE_ID = P.SOURCING_CODE
LEFT JOIN admin_supply_mng SUP ON SUP.objid::varchar = P.SUPPLY_CODE
-- 파일 개수 집계 조인 (한 번만)
LEFT JOIN V_FILE_COUNTS FC ON P.OBJID = FC.TARGET_OBJID
-- 파일 정보 조인 (첫 번째만)
LEFT OUTER JOIN V_FILE AF_IMG
ON P.OBJID = AF_IMG.TARGET_OBJID
AND AF_IMG.DOC_TYPE = 'PART_SHAPE_IMG'
LEFT OUTER JOIN V_FILE AF_ECD
ON P.OBJID = AF_ECD.TARGET_OBJID
AND AF_ECD.DOC_TYPE = 'ECD_DOC'
<!--
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(CC.CODE_NAME ORDER BY CC.CODE_NAME), ',') AS CHANGE_OPTION_NAME
FROM (
SELECT
T.OBJID,
UNNEST(STRING_TO_ARRAY(CHANGE_OPTION, ',')) AS CHANGE_OPTION
FROM PART_MNG AS T
) AS TT
LEFT JOIN COMM_CODE CC ON CC.CODE_ID = TT.CHANGE_OPTION
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,
HEAT_TREATMENT_HARDNESS,
HEAT_TREATMENT_METHOD,
SURFACE_TREATMENT,
ACCTFG,
ODRFG,
UNIT_DC,
UNITMANG_DC,
UNITCHNG_NB,
LOT_FG,
USE_YN,
QC_FG,
SETITEM_FG,
REQ_FG,
UNIT_LENGTH,
UNIT_QTY
) 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},
#{HEAT_TREATMENT_HARDNESS},
#{HEAT_TREATMENT_METHOD},
#{SURFACE_TREATMENT},
#{ACCTFG},
#{ODRFG},
#{UNIT_DC},
#{UNITMANG_DC},
#{UNITCHNG_NB}::NUMERIC,
COALESCE(#{LOT_FG}, '0'),
COALESCE(#{USE_YN}, '1'),
COALESCE(#{QC_FG}, '0'),
COALESCE(#{SETITEM_FG}, '0'),
COALESCE(#{REQ_FG}, '0'),
#{UNIT_LENGTH},
#{UNIT_QTY}
) 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},
HEAT_TREATMENT_HARDNESS = #{HEAT_TREATMENT_HARDNESS},
HEAT_TREATMENT_METHOD = #{HEAT_TREATMENT_METHOD},
SURFACE_TREATMENT = #{SURFACE_TREATMENT},
ACCTFG = #{ACCTFG},
ODRFG = #{ODRFG},
UNIT_DC = #{UNIT_DC},
UNITMANG_DC = #{UNITMANG_DC},
UNITCHNG_NB = #{UNITCHNG_NB}::NUMERIC,
LOT_FG = COALESCE(#{LOT_FG}, PART_MNG.LOT_FG),
USE_YN = COALESCE(#{USE_YN}, PART_MNG.USE_YN),
QC_FG = COALESCE(#{QC_FG}, PART_MNG.QC_FG),
SETITEM_FG = COALESCE(#{SETITEM_FG}, PART_MNG.SETITEM_FG),
REQ_FG = COALESCE(#{REQ_FG}, PART_MNG.REQ_FG),
UNIT_LENGTH = #{UNIT_LENGTH},
UNIT_QTY = #{UNIT_QTY}
</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,
HEAT_TREATMENT_HARDNESS,
HEAT_TREATMENT_METHOD,
SURFACE_TREATMENT,
SUPPLY_CODE,
ACCTFG,
ODRFG
) 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},
#{HEAT_TREATMENT_HARDNESS},
#{HEAT_TREATMENT_METHOD},
#{SURFACE_TREATMENT},
#{SUPPLY_CODE},
#{ACCTFG},
#{ODRFG}
) 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},
HEAT_TREATMENT_HARDNESS = #{HEAT_TREATMENT_HARDNESS},
HEAT_TREATMENT_METHOD = #{HEAT_TREATMENT_METHOD},
SURFACE_TREATMENT = #{SURFACE_TREATMENT},
SUPPLY_CODE = #{SUPPLY_CODE},
ACCTFG = #{ACCTFG},
ODRFG = #{ODRFG}
</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,
HEAT_TREATMENT_HARDNESS,
HEAT_TREATMENT_METHOD,
SURFACE_TREATMENT,
SUPPLY_CODE
) 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},
#{HEAT_TREATMENT_HARDNESS},
#{HEAT_TREATMENT_METHOD},
#{SURFACE_TREATMENT},
#{SUPPLY_CODE}
) 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},
HEAT_TREATMENT_HARDNESS = #{HEAT_TREATMENT_HARDNESS},
HEAT_TREATMENT_METHOD = #{HEAT_TREATMENT_METHOD},
SURFACE_TREATMENT = #{SURFACE_TREATMENT},
SUPPLY_CODE = #{SUPPLY_CODE}
</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_HARDNESS != null and SEARCH_HARDNESS != ''">
AND UPPER(T.HEAT_TREATMENT_HARDNESS) LIKE UPPER('%${SEARCH_HARDNESS}%')
</if>
<if test="SEARCH_METHOD != null and SEARCH_METHOD != ''">
AND UPPER(T.HEAT_TREATMENT_METHOD) LIKE UPPER('%${SEARCH_METHOD}%')
</if>
<if test="SEARCH_SURFACE != null and SEARCH_SURFACE != ''">
AND UPPER(T.SURFACE_TREATMENT) LIKE UPPER('%${SEARCH_SURFACE}%')
</if>
<if test="customer_objid != null and customer_objid != ''">
AND T.SUPPLY_CODE = #{customer_objid}
</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}
AND (Q.STATUS IS NULL OR Q.STATUS NOT IN ('deleted', 'deleting'))
<if test="qtyObjId != null and qtyObjId != ''">
AND Q.CHILD_OBJID = #{qtyObjId}
</if>
)
</select>
<!-- 품번 목록으로 PART 조회 (화면에 표시된 파트만) -->
<select id="partMngListByPartNos" parameterType="map" resultType="map">
SELECT
T.*
FROM <include refid="partMngBase"/> T
WHERE 1=1
AND T.IS_LAST = '1'
<if test="PART_NO_LIST != null and PART_NO_LIST.size() > 0">
AND T.PART_NO IN
<foreach collection="PART_NO_LIST" item="partNo" open="(" separator="," close=")">
#{partNo}
</foreach>
</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(SEQ || '. ' || SUP.SUPPLY_NAME ORDER BY SEQ), ',') AS PARTNER_TITLE
FROM ORDER_SPEC_MNG OSM
LEFT JOIN ADMIN_SUPPLY_MNG SUP ON SUP.OBJID::VARCHAR = OSM.PARTNER_OBJID::VARCHAR
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(SEQ || '. ' || SUP.SUPPLY_NAME ORDER BY SEQ), ',') AS PARTNER_TITLE
FROM ORDER_SPEC_MNG OSM
LEFT JOIN ADMIN_SUPPLY_MNG SUP ON SUP.OBJID::VARCHAR = OSM.PARTNER_OBJID::VARCHAR
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(SEQ || '. ' || SUP.SUPPLY_NAME ORDER BY SEQ), ',') AS PARTNER_TITLE
FROM ORDER_SPEC_MNG OSM
LEFT JOIN ADMIN_SUPPLY_MNG SUP ON SUP.OBJID::VARCHAR = OSM.PARTNER_OBJID::VARCHAR
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 관리 목록 조회 (전체 데이터, 재귀 CTE 제거로 성능 개선) -->
<select id="getToConnectPartMngList" parameterType="map" resultType="map">
SELECT
T.*,
ROW_NUMBER() OVER(ORDER BY EXCEL_UPLOAD_SEQ ASC, PART_NO ASC) RNUM
FROM(
SELECT
T.*
FROM
<include refid="partMngBase"/> T
WHERE 1=1
<!-- 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 EXCEL_UPLOAD_SEQ ASC, PART_NO ASC
) T
</select>
<!-- PART 관리 목록 총 개수 조회 (페이징용) -->
<select id="getToConnectPartMngListCount" parameterType="map" resultType="int">
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
COUNT(*)
FROM(
SELECT
T.OBJID
FROM
<include refid="partMngBase"/> T
WHERE 1=1
<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>
) 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>
<!-- PART Detail 수정 저장 -->
<update id="updatePartDetail" parameterType="map">
UPDATE PART_MNG
SET
PART_NAME = #{PART_NAME},
MATERIAL = #{MATERIAL},
HEAT_TREATMENT_HARDNESS = #{HEAT_TREATMENT_HARDNESS},
HEAT_TREATMENT_METHOD = #{HEAT_TREATMENT_METHOD},
SURFACE_TREATMENT = #{SURFACE_TREATMENT},
MAKER = #{MAKER},
PART_TYPE = #{PART_TYPE},
ACCTFG = #{ACCTFG},
ODRFG = #{ODRFG},
SPEC = #{SPEC},
UNIT_DC = #{UNIT_DC},
UNITMANG_DC = #{UNITMANG_DC},
UNITCHNG_NB = #{UNITCHNG_NB}::NUMERIC,
LOT_FG = #{LOT_FG},
USE_YN = #{USE_YN},
QC_FG = #{QC_FG},
SETITEM_FG = #{SETITEM_FG},
REQ_FG = #{REQ_FG},
UNIT_LENGTH = #{UNIT_LENGTH},
UNIT_QTY = #{UNIT_QTY},
REMARK = #{REMARK},
EDIT_DATE = NOW()
WHERE OBJID = #{OBJID}
</update>
<!-- 품번 중복 체크 (PART_BOM_REPORT 테이블 - 헤더 품번) -->
<select id="checkDuplicatePartNo" parameterType="map" resultType="int">
SELECT COUNT(*)
FROM PART_BOM_REPORT
WHERE PART_NO = #{partNo}
<if test="bomReportObjid != null and bomReportObjid != ''">
AND OBJID != #{bomReportObjid}
</if>
</select>
<!-- //구조등록 목록조회 -->
<select id="getBOMStandardStructureList" parameterType="map" resultType="map">
SELECT * FROM
(SELECT
ROW_NUMBER() OVER(ORDER BY T.REGDATE DESC) AS RNUM,
T.OBJID,
T.CUSTOMER_OBJID,
SM.SUPPLY_NAME AS CUSTOMER_NAME,
T.CONTRACT_OBJID,
PM.CUSTOMER_PROJECT_NAME,
PM.PROJECT_NO,
T.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,
-->
COALESCE(WT.UNIT_NO || '-' || WT.TASK_NAME, '') AS UNIT_NAME,
T.STATUS,
CASE UPPER(T.STATUS)
WHEN 'CREATE' THEN '등록중'
WHEN 'CHANGEDESIGN' THEN '설계변경미배포'
WHEN 'DEPLOY' THEN '배포완료'
ELSE ''
END STATUS_TITLE,
T.WRITER,
UI.DEPT_NAME,
UI.USER_NAME,
T.REGDATE AS REGDATE,
TO_CHAR(T.REGDATE, 'YYYY-MM-DD') AS REG_DATE,
T.DEPLOY_DATE,
T.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, -->
EO_DATA.EO_NO,
EO_DATA.EO_DATE,
T.NOTE,
COALESCE(EO_DATA.BOM_CNT, 0) AS BOM_CNT
FROM PART_BOM_REPORT AS T
LEFT JOIN SUPPLY_MNG SM ON SM.OBJID::VARCHAR = T.CUSTOMER_OBJID
LEFT JOIN PROJECT_MGMT PM ON PM.OBJID = T.CONTRACT_OBJID
LEFT JOIN PMS_WBS_TASK WT ON WT.OBJID = T.UNIT_CODE
LEFT JOIN USER_INFO UI ON UI.USER_ID = T.WRITER
LEFT JOIN (
SELECT
BP.BOM_REPORT_OBJID,
MAX(PM2.EO_NO) AS EO_NO,
MAX(PM2.EO_DATE) AS EO_DATE,
COUNT(*) AS BOM_CNT
FROM BOM_PART_QTY BP
LEFT JOIN PART_MNG PM2 ON BP.PART_NO = PM2.OBJID::VARCHAR
GROUP BY BP.BOM_REPORT_OBJID
) EO_DATA ON EO_DATA.BOM_REPORT_OBJID = T.OBJID
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 T.DEPLOY_DATE::DATE <![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 T.REGDATE DESC) AS NUM,
T.OBJID,
T.CUSTOMER_OBJID,
SM.SUPPLY_NAME AS CUSTOMER_NAME,
T.CONTRACT_OBJID,
PM.CUSTOMER_PROJECT_NAME,
PM.PROJECT_NO,
T.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,
-->
COALESCE(WT.UNIT_NO || '-' || WT.TASK_NAME, '') AS UNIT_NAME,
T.STATUS,
CASE UPPER(T.STATUS)
WHEN 'CREATE' THEN '등록중'
WHEN 'CHANGEDESIGN' THEN '설계변경미배포'
WHEN 'DEPLOY' THEN '배포완료'
ELSE ''
END STATUS_TITLE,
T.WRITER,
UI.DEPT_NAME,
UI.USER_NAME,
COALESCE(UI.DEPT_NAME || '/' || UI.USER_NAME, '') as DEPT_USER_NAME,
T.REGDATE AS REGDATE,
TO_CHAR(T.REGDATE, 'YYYY-MM-DD') AS REG_DATE,
T.DEPLOY_DATE,
T.REVISION,
<!-- (SELECT MAX(PM.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, -->
EO_DATA.EO_NO,
EO_DATA.EO_DATE,
T.NOTE,
T.MULTI_YN
,T.MULTI_MASTER_YN
,T.MULTI_BREAK_YN
,T.MULTI_MASTER_OBJID
,COALESCE(EO_DATA.BOM_CNT, 0) AS BOM_CNT
,T.PRODUCT_CD
,CODE_NAME(T.PRODUCT_CD) as PRODUCT_NAME
,T.PART_NO
,T.PART_NAME
FROM
PART_BOM_REPORT AS T
LEFT JOIN SUPPLY_MNG SM ON SM.OBJID::VARCHAR = T.CUSTOMER_OBJID
LEFT JOIN PROJECT_MGMT PM ON PM.OBJID = T.CONTRACT_OBJID
LEFT JOIN PMS_WBS_TASK WT ON WT.OBJID = T.UNIT_CODE
LEFT JOIN USER_INFO UI ON UI.USER_ID = T.WRITER
LEFT JOIN (
SELECT
BP.BOM_REPORT_OBJID,
MAX(PM2.EO_NO) AS EO_NO,
MAX(PM2.EO_DATE) AS EO_DATE,
COUNT(*) AS BOM_CNT
FROM BOM_PART_QTY BP
LEFT JOIN PART_MNG PM2 ON BP.PART_NO = PM2.OBJID::VARCHAR
GROUP BY BP.BOM_REPORT_OBJID
) EO_DATA ON EO_DATA.BOM_REPORT_OBJID = T.OBJID
WHERE 1=1
<if test="SEARCH_PART_NO != null and !''.equals(SEARCH_PART_NO)">
AND UPPER(T.PART_NO) LIKE UPPER('%${SEARCH_PART_NO}%')
</if>
<if test="SEARCH_PART_NAME != null and !''.equals(SEARCH_PART_NAME)">
AND UPPER(T.PART_NAME) LIKE UPPER('%${SEARCH_PART_NAME}%')
</if>
<if test="product_cd != null and product_cd != ''">
AND T.PRODUCT_CD = #{product_cd}
</if>
<if test="search_fromDate != null and search_fromDate != ''">
AND REGDATE::DATE <![CDATA[ >= ]]> TO_DATE(#{search_fromDate}, 'YYYY-MM-DD')
</if>
<if test="search_toDate != null and search_toDate != ''">
AND REGDATE::DATE <![CDATA[ <= ]]> TO_DATE(#{search_toDate}, 'YYYY-MM-DD')
</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="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 구조등록 기본정보 조회 -->
<!-- 활성화된 BOM 목록 조회 (셀렉트박스용) -->
<select id="getActiveBomList" parameterType="map" resultType="map">
SELECT
OBJID AS CODE,
COALESCE(PART_NO, '') || ' - ' || COALESCE(PART_NAME, '') ||
CASE WHEN REVISION IS NOT NULL AND REVISION != '' THEN ' (Rev.' || REVISION || ')' ELSE '' END AS NAME
FROM PART_BOM_REPORT
WHERE STATUS = 'Y'
ORDER BY REGDATE DESC
</select>
<!-- 품번으로 BOM OBJID 조회 -->
<select id="getBomObjIdByPartNo" parameterType="map" resultType="map">
SELECT
OBJID,
PART_NO,
PART_NAME
FROM PART_BOM_REPORT
WHERE PART_NO = #{partNo}
AND PART_NO IS NOT NULL
AND TRIM(PART_NO) != ''
AND PART_NAME IS NOT NULL
AND TRIM(PART_NAME) != ''
ORDER BY REGDATE DESC
LIMIT 1
</select>
<!-- BOM 복사를 위한 파트 목록 조회 -->
<select id="getBomPartListForCopy" parameterType="map" resultType="map">
SELECT
BPQ.PARENT_PART_NO,
PM.PART_NO,
PM.PART_NAME,
BPQ.QTY,
BPQ.ITEM_QTY,
PM.MATERIAL,
PM.HEAT_TREATMENT_HARDNESS,
PM.HEAT_TREATMENT_METHOD,
PM.SURFACE_TREATMENT,
BPQ.SUPPLIER,
PM.PART_TYPE
FROM BOM_PART_QTY BPQ
LEFT JOIN PART_MNG PM ON BPQ.PART_NO = PM.OBJID::VARCHAR AND PM.IS_LAST = '1'
WHERE BPQ.BOM_REPORT_OBJID = #{BOM_REPORT_OBJID}
AND (BPQ.STATUS IS NULL OR BPQ.STATUS != 'deleted')
ORDER BY BPQ.SEQ
</select>
<!-- OBJID로 파트 정보 조회 -->
<select id="getPartInfoByObjid" parameterType="map" resultType="map">
SELECT
PART_NO,
PART_NAME
FROM PART_MNG
WHERE OBJID = #{OBJID}
AND IS_LAST = '1'
</select>
<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,
<!-- PART_BOM_REPORT 테이블에 저장된 품번/품명 사용 -->
T.PART_NO,
T.PART_NAME
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
, PRODUCT_CD
, PART_NO
, PART_NAME
, REVISION
) VALUES (
#{OBJID}
, #{CUSTOMER_OBJID}
, #{CONTRACT_OBJID}
, #{UNIT_CODE}
, 'N'
, #{WRITER}
, NOW()
, #{MULTI_YN}
, #{MULTI_MASTER_YN}
, #{MULTI_BREAK_YN}
, #{MULTI_MASTER_OBJID}
, #{PRODUCT_CD}
, #{PART_NO}
, #{PART_NAME}
, #{REVISION}
) ON
CONFLICT (OBJID) DO
UPDATE
SET WRITER = #{WRITER}
, PRODUCT_CD = #{PRODUCT_CD}
, PART_NO = #{PART_NO}
, PART_NAME = #{PART_NAME}
, REVISION = #{REVISION}
</insert>
<!-- 기존 BOM의 파트 데이터 삭제 -->
<delete id="deleteBomPartQtyByBomObjid" parameterType="string">
DELETE FROM BOM_PART_QTY
WHERE BOM_REPORT_OBJID = #{BOM_REPORT_OBJID}
</delete>
<!-- 기존 BOM 상태 초기화 -->
<update id="resetBomReportStatus" parameterType="string">
UPDATE PART_BOM_REPORT
SET STATUS = 'N'
WHERE OBJID = #{OBJID}
</update>
<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,
ITEM_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.ITEM_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 [LPAD(A.SEQ::TEXT, 10, '0')],
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.ITEM_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||LPAD(B.SEQ::TEXT, 10, '0'),
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
,V.ITEM_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
,P.HEAT_TREATMENT_HARDNESS
,P.HEAT_TREATMENT_METHOD
,P.SURFACE_TREATMENT
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('3D_CAD')) AS CU01_CNT
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_DRAWING_CAD')) AS CU02_CNT
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE P.OBJID = F.TARGET_OBJID AND F.STATUS = 'Active' AND F.DOC_TYPE IN ('2D_PDF_CAD')) AS CU03_CNT
,V.LEV
,(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>
<!-- E-BOM 내에서 특정 품번이 하위 품목을 가진 채 존재하는 BOM 찾기 (fallback용) -->
<select id="findPartInEbomWithChildren" parameterType="map" resultType="map">
SELECT BPQ.BOM_REPORT_OBJID, BPQ.CHILD_OBJID, BPQ.PART_NO AS PART_OBJID
FROM BOM_PART_QTY BPQ
INNER JOIN PART_MNG PM ON PM.OBJID::VARCHAR = BPQ.PART_NO AND PM.IS_LAST = '1'
WHERE PM.PART_NO = #{partNo}
AND (BPQ.STATUS NOT IN ('deleting', 'deleted') OR BPQ.STATUS IS NULL)
AND EXISTS (
SELECT 1 FROM BOM_PART_QTY SUB
WHERE SUB.PARENT_OBJID = BPQ.CHILD_OBJID
AND SUB.BOM_REPORT_OBJID = BPQ.BOM_REPORT_OBJID
AND (SUB.STATUS NOT IN ('deleting', 'deleted') OR SUB.STATUS IS NULL)
)
ORDER BY BPQ.REGDATE DESC
LIMIT 1
</select>
<!-- 특정 CHILD_OBJID 아래의 하위 트리 조회 (반제품 하위 구조 fallback용) -->
<select id="getSubTreeByParentChildObjid" parameterType="map" resultType="map">
WITH RECURSIVE sub_tree(
BOM_REPORT_OBJID, OBJID, PARENT_OBJID, CHILD_OBJID,
PARENT_PART_NO, PART_NO, LAST_PART_OBJID,
QTY, ITEM_QTY, QTY_TEMP, SEQ, STATUS, LEV
) 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.ITEM_QTY, A.QTY_TEMP, A.SEQ, A.STATUS, 1
FROM BOM_PART_QTY A
WHERE A.PARENT_OBJID = #{parentChildObjid}
AND A.BOM_REPORT_OBJID = #{bomReportObjId}
AND (A.STATUS NOT IN ('deleting', 'deleted') OR A.STATUS IS NULL)
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.ITEM_QTY, B.QTY_TEMP, B.SEQ, B.STATUS, S.LEV + 1
FROM BOM_PART_QTY B
JOIN sub_tree S ON B.PARENT_OBJID = S.CHILD_OBJID
AND B.BOM_REPORT_OBJID = S.BOM_REPORT_OBJID
WHERE (B.STATUS NOT IN ('deleting', 'deleted') OR B.STATUS IS NULL)
)
SELECT
S.BOM_REPORT_OBJID
,S.OBJID
,S.PARENT_OBJID
,S.CHILD_OBJID
,S.PARENT_PART_NO
,S.PART_NO AS PART_OBJID
,S.LAST_PART_OBJID AS BOM_LAST_PART_OBJID
,P.OBJID AS LAST_PART_OBJID
,P.PART_NO
,P.PART_NAME
,S.QTY
,S.ITEM_QTY
,(CASE WHEN S.STATUS = 'deploy' THEN S.QTY
WHEN S.STATUS = 'beforeEdit' THEN S.QTY
WHEN S.STATUS != 'editing' AND (S.QTY_TEMP IS NULL OR S.QTY_TEMP = '') THEN S.QTY
ELSE COALESCE(S.QTY_TEMP, S.QTY) END) AS QTY_TEMP
,S.LEV AS LEVEL
,(SELECT COUNT(*) FROM BOM_PART_QTY WHERE PARENT_OBJID = S.CHILD_OBJID) AS SUB_PART_CNT
,S.SEQ
,S.STATUS
,P.SPEC
,P.MATERIAL
,P.REVISION
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = P.PART_TYPE) AS PART_TYPE_TITLE
,(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = P.UNIT) AS UNIT_TITLE
FROM sub_tree S
INNER JOIN PART_MNG P ON P.OBJID = COALESCE(NULLIF(S.LAST_PART_OBJID, ''), S.PART_NO)
ORDER BY S.LEV, S.SEQ
</select>
<!-- E-BOM 차분 저장: 기존 데이터 조회 -->
<select id="getExistingBomPartQty" parameterType="map" resultType="map">
SELECT CHILD_OBJID, PARENT_OBJID, PART_NO, PARENT_PART_NO, QTY, ITEM_QTY, QTY_TEMP, SEQ, STATUS
FROM BOM_PART_QTY
WHERE BOM_REPORT_OBJID = #{bomReportObjId}
</select>
<!-- E-BOM 차분 저장: CHILD_OBJID 기준 개별 삭제 -->
<delete id="deleteBomPartQtyByChildObjid" parameterType="map">
DELETE FROM BOM_PART_QTY
WHERE BOM_REPORT_OBJID = #{bomReportObjId}
AND CHILD_OBJID = #{childObjid}
</delete>
<!-- E-BOM 차분 저장: CHILD_OBJID 기준 수정 (수량, 순서, 부모 등) -->
<update id="updateBomPartQtyByChildObjid" parameterType="map">
UPDATE BOM_PART_QTY
SET PARENT_OBJID = #{PARENT_OBJID},
QTY = COALESCE(NULLIF(#{QTY}, ''), '0')::NUMERIC,
ITEM_QTY = COALESCE(NULLIF(#{ITEM_QTY}, ''), '0')::NUMERIC,
QTY_TEMP = COALESCE(NULLIF(#{QTY_TEMP}, ''), '0')::NUMERIC,
SEQ = #{SEQ}
WHERE BOM_REPORT_OBJID = #{bomReportObjId}
AND CHILD_OBJID = #{childObjid}
</update>
<!-- E-BOM 차분 저장: 신규 행 INSERT -->
<insert id="insertBomPartQtyBatch" parameterType="map">
INSERT INTO BOM_PART_QTY (
BOM_REPORT_OBJID, OBJID, PARENT_OBJID, CHILD_OBJID,
PARENT_PART_NO, PART_NO, LAST_PART_OBJID,
QTY, ITEM_QTY, QTY_TEMP,
REGDATE, WRITER, SEQ, STATUS
) VALUES (
#{BOM_REPORT_OBJID}, #{OBJID}, #{PARENT_OBJID}, #{CHILD_OBJID},
#{PARENT_PART_NO}, #{PART_NO}, #{LAST_PART_OBJID},
COALESCE(NULLIF(#{QTY}, ''), '0')::NUMERIC,
COALESCE(NULLIF(#{ITEM_QTY}, ''), '0')::NUMERIC,
COALESCE(NULLIF(#{QTY_TEMP}, ''), '0')::NUMERIC,
NOW(), #{WRITER}, #{SEQ}, #{STATUS}
)
</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,
ITEM_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}, -->
COALESCE(NULLIF(#{QTY}, ''), '0')::NUMERIC,
COALESCE(NULLIF(#{ITEM_QTY}, ''), '0')::NUMERIC,
COALESCE(NULLIF(#{QTY_TEMP}, ''), '0')::NUMERIC,
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_backup" 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 [LPAD(A.SEQ::TEXT, 10, '0')],
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 COALESCE(BPQ.STATUS, '') NOT IN ('deleting', 'deleted')
</when>
<otherwise>
AND COALESCE(BPQ.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 IN ('create', '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||LPAD(A.SEQ::TEXT, 10, '0'),
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 COALESCE(A.STATUS, '') NOT IN ('deleting', 'deleted')
</when>
<otherwise>
AND COALESCE(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>
<!-- //정전개 조회 쿼리 (신규 - 간소화) -->
<select id="selectStructureAscendingList" parameterType="map" resultType="map">
WITH RECURSIVE BOM_TREE AS (
-- 최상위 레벨 (PARENT가 없는 항목)
SELECT
BPQ.BOM_REPORT_OBJID,
BPQ.OBJID AS BPQ_OBJID,
BPQ.PARENT_OBJID,
BPQ.CHILD_OBJID,
BPQ.PART_NO,
BPQ.PARENT_PART_NO,
BPQ.QTY,
BPQ.ITEM_QTY,
BPQ.SEQ,
COALESCE(BPQ.LAST_PART_OBJID, BPQ.PART_NO) AS LAST_PART_OBJID,
1 AS LEV,
ARRAY[BPQ.CHILD_OBJID::TEXT] AS PATH,
ARRAY[LPAD(BPQ.SEQ::TEXT, 10, '0')] AS PATH2,
0 AS LEAF
FROM BOM_PART_QTY BPQ
LEFT JOIN PART_BOM_REPORT PBR ON BPQ.BOM_REPORT_OBJID = PBR.OBJID
WHERE COALESCE(BPQ.PARENT_OBJID, '') = ''
AND COALESCE(BPQ.STATUS, '') NOT IN ('deleting', 'deleted')
AND PBR.STATUS = 'Y'
<!-- BOM REPORT 검색 조건 -->
<if test="customer_cd != null and !''.equals(customer_cd)">
AND PBR.CUSTOMER_OBJID = #{customer_cd}
</if>
<if test="project_name != null and !''.equals(project_name)">
AND PBR.CONTRACT_OBJID = #{project_name}
</if>
<if test="unit_code != null and !''.equals(unit_code)">
AND PBR.UNIT_CODE = #{unit_code}
</if>
<!-- 품번/품명 검색 조건 - 해당 품번이 포함된 BOM만 필터링 -->
<if test="search_partNo != null and !''.equals(search_partNo)">
AND EXISTS (
SELECT 1 FROM BOM_PART_QTY BPQ_SUB
LEFT JOIN PART_MNG PM_SUB ON COALESCE(BPQ_SUB.LAST_PART_OBJID, BPQ_SUB.PART_NO) = PM_SUB.OBJID
WHERE BPQ_SUB.BOM_REPORT_OBJID = BPQ.BOM_REPORT_OBJID
AND UPPER(PM_SUB.PART_NO) LIKE UPPER('%${search_partNo}%')
)
</if>
<if test="search_partName != null and !''.equals(search_partName)">
AND EXISTS (
SELECT 1 FROM BOM_PART_QTY BPQ_SUB
LEFT JOIN PART_MNG PM_SUB ON COALESCE(BPQ_SUB.LAST_PART_OBJID, BPQ_SUB.PART_NO) = PM_SUB.OBJID
WHERE BPQ_SUB.BOM_REPORT_OBJID = BPQ.BOM_REPORT_OBJID
AND UPPER(PM_SUB.PART_NAME) LIKE UPPER('%${search_partName}%')
)
</if>
UNION ALL
-- 하위 레벨 (재귀)
SELECT
BPQ.BOM_REPORT_OBJID,
BPQ.OBJID AS BPQ_OBJID,
BPQ.PARENT_OBJID,
BPQ.CHILD_OBJID,
BPQ.PART_NO,
BPQ.PARENT_PART_NO,
BPQ.QTY,
BPQ.ITEM_QTY,
BPQ.SEQ,
COALESCE(BPQ.LAST_PART_OBJID, BPQ.PART_NO) AS LAST_PART_OBJID,
BT.LEV + 1,
BT.PATH || BPQ.CHILD_OBJID::TEXT,
BT.PATH2 || LPAD(BPQ.SEQ::TEXT, 10, '0'),
0 AS LEAF
FROM BOM_PART_QTY BPQ
INNER JOIN BOM_TREE BT ON BPQ.PARENT_OBJID = BT.CHILD_OBJID
AND BPQ.BOM_REPORT_OBJID = BT.BOM_REPORT_OBJID
WHERE COALESCE(BPQ.STATUS, '') NOT IN ('deleting', 'deleted')
),
MAX_LEVEL_CTE AS (
-- 최대 레벨 계산
SELECT MAX(LEV) AS MAX_LEVEL
FROM BOM_TREE
)
SELECT
BT.BOM_REPORT_OBJID,
BT.LEV,
BT.LEV AS LEVEL,
BT.QTY,
BT.ITEM_QTY,
BT.QTY AS QTY_TEMP,
BT.SEQ,
-- BT.LEAF, -- 재귀 CTE의 LEAF는 항상 0이므로 제거 (아래에서 재계산)
-- PART 정보
PM.OBJID AS PART_OBJID,
PM.PART_NO,
PM.PART_NAME,
PM.REVISION,
PM.MATERIAL,
PM.SPEC,
PM.WEIGHT,
PM.THICKNESS,
PM.WIDTH,
PM.HEIGHT,
PM.OUT_DIAMETER,
PM.IN_DIAMETER,
PM.LENGTH,
PM.MAKER,
PM.POST_PROCESSING,
PM.REMARK,
PM.HEAT_TREATMENT_HARDNESS,
PM.HEAT_TREATMENT_METHOD,
PM.SURFACE_TREATMENT,
PM.SUPPLY_CODE,
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG O WHERE O.OBJID::VARCHAR = PM.SUPPLY_CODE) AS SUPPLY_NAME,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = PM.PART_TYPE) AS PART_TYPE_TITLE,
PM.DESIGN_DATE,
(SELECT EO_NO FROM EO_MNG EM WHERE EM.OBJID::VARCHAR = PM.EO_NO) AS EO_NO,
(SELECT TO_CHAR(REG_DATE,'YYYY-MM-DD') FROM EO_MNG EM WHERE EM.OBJID::VARCHAR = PM.EO_NO) AS EO_DATE,
PM.SUB_MATERIAL,
-- 첨부파일 개수
(SELECT COUNT(*) FROM ATTACH_FILE_INFO AF WHERE AF.TARGET_OBJID = PM.OBJID AND AF.DOC_TYPE = '3D_CAD' AND AF.STATUS = 'Active') AS FILE_3D_CNT,
(SELECT COUNT(*) FROM ATTACH_FILE_INFO AF WHERE AF.TARGET_OBJID = PM.OBJID AND AF.DOC_TYPE = '2D_DRAWING_CAD' AND AF.STATUS = 'Active') AS FILE_2D_CNT,
(SELECT COUNT(*) FROM ATTACH_FILE_INFO AF WHERE AF.TARGET_OBJID = PM.OBJID AND AF.DOC_TYPE = '2D_PDF_CAD' AND AF.STATUS = 'Active') AS FILE_PDF_CNT,
-- BOM REPORT 정보
PBR.PRODUCT_CD,
PBR.STATUS AS BOM_STATUS,
-- PATH 정보
BT.PATH2,
(SELECT PART_NO FROM PART_MNG P WHERE P.OBJID::VARCHAR = BT.PART_NO) AS PART_MNG_NO,
(SELECT PART_NO FROM PART_MNG P WHERE P.OBJID::VARCHAR = BT.PARENT_PART_NO) AS PARENT_PART_MNG_NO,
-- LEAF 계산 (하위 항목이 있는지 체크)
(
SELECT CASE WHEN COUNT(*) > 0 THEN 0 ELSE 1 END
FROM BOM_PART_QTY BPQ2
WHERE BPQ2.PARENT_OBJID = BT.CHILD_OBJID
AND BPQ2.BOM_REPORT_OBJID = BT.BOM_REPORT_OBJID
AND COALESCE(BPQ2.STATUS, '') NOT IN ('deleting', 'deleted')
) AS LEAF,
-- 상위 품번 (P_QTY 계산용)
BT.ITEM_QTY AS P_QTY,
-- ROOT 정보
(SELECT CHILD_OBJID FROM BOM_PART_QTY WHERE BOM_REPORT_OBJID = BT.BOM_REPORT_OBJID AND COALESCE(PARENT_OBJID, '') = '' LIMIT 1) AS ROOT_OBJID,
BT.PARENT_OBJID AS SUB_ROOT_OBJID,
-- MAX_LEVEL 추가
ML.MAX_LEVEL
FROM BOM_TREE BT
CROSS JOIN MAX_LEVEL_CTE ML
LEFT JOIN PART_MNG PM ON BT.LAST_PART_OBJID = PM.OBJID
LEFT JOIN PART_BOM_REPORT PBR ON BT.BOM_REPORT_OBJID = PBR.OBJID
WHERE (PM.OBJID IS NULL OR PM.STATUS IN ('create', 'release'))
AND PBR.STATUS = 'Y'
<!-- 품번/품명 검색 시: 검색된 품번을 포함하는 PATH만 표시 -->
<if test="search_partNo != null and !''.equals(search_partNo)">
AND EXISTS (
SELECT 1 FROM BOM_TREE BT_SEARCH
LEFT JOIN PART_MNG PM_SEARCH ON BT_SEARCH.LAST_PART_OBJID = PM_SEARCH.OBJID
WHERE BT_SEARCH.BOM_REPORT_OBJID = BT.BOM_REPORT_OBJID
AND UPPER(PM_SEARCH.PART_NO) LIKE UPPER('%${search_partNo}%')
AND (
BT.CHILD_OBJID = BT_SEARCH.CHILD_OBJID
OR BT_SEARCH.CHILD_OBJID::TEXT = ANY(BT.PATH)
)
)
</if>
<if test="search_partName != null and !''.equals(search_partName)">
AND EXISTS (
SELECT 1 FROM BOM_TREE BT_SEARCH
LEFT JOIN PART_MNG PM_SEARCH ON BT_SEARCH.LAST_PART_OBJID = PM_SEARCH.OBJID
WHERE BT_SEARCH.BOM_REPORT_OBJID = BT.BOM_REPORT_OBJID
AND UPPER(PM_SEARCH.PART_NAME) LIKE UPPER('%${search_partName}%')
AND (
BT.CHILD_OBJID = BT_SEARCH.CHILD_OBJID
OR BT_SEARCH.CHILD_OBJID::TEXT = ANY(BT.PATH)
)
)
</if>
ORDER BY BT.PATH2
</select>
<!--
//역전개 조회 쿼리 (백업)
Level을 정전개를 통해가져온다.
-->
<select id="selectStructureDescendingList_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,
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>
<!-- //역전개 조회 쿼리 (신규 - 간소화) -->
<select id="selectStructureDescendingList" parameterType="map" resultType="map">
WITH RECURSIVE BOM_TREE AS (
-- 검색된 파트를 시작점으로
SELECT
BPQ.BOM_REPORT_OBJID,
BPQ.OBJID AS BPQ_OBJID,
BPQ.PARENT_OBJID,
BPQ.CHILD_OBJID,
BPQ.PART_NO,
BPQ.PARENT_PART_NO,
BPQ.QTY,
BPQ.ITEM_QTY,
BPQ.SEQ,
COALESCE(BPQ.LAST_PART_OBJID, BPQ.PART_NO) AS LAST_PART_OBJID,
1 AS LEV,
ARRAY[BPQ.PART_NO::TEXT] AS PATH
FROM BOM_PART_QTY BPQ
INNER JOIN PART_MNG PM ON COALESCE(BPQ.LAST_PART_OBJID, BPQ.PART_NO) = PM.OBJID
INNER JOIN PART_BOM_REPORT PBR ON BPQ.BOM_REPORT_OBJID = PBR.OBJID
WHERE 1=1
AND COALESCE(BPQ.STATUS, '') NOT IN ('deleting', 'deleted')
AND PM.STATUS IN ('create', 'release')
AND PBR.STATUS = 'Y'
<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>
UNION ALL
-- 상위로 올라가기 (역방향)
SELECT
BPQ.BOM_REPORT_OBJID,
BPQ.OBJID AS BPQ_OBJID,
BPQ.PARENT_OBJID,
BPQ.CHILD_OBJID,
BPQ.PART_NO,
BPQ.PARENT_PART_NO,
BPQ.QTY,
BPQ.ITEM_QTY,
BPQ.SEQ,
COALESCE(BPQ.LAST_PART_OBJID, BPQ.PART_NO) AS LAST_PART_OBJID,
BT.LEV + 1,
BT.PATH || BPQ.PART_NO::TEXT
FROM BOM_PART_QTY BPQ
INNER JOIN BOM_TREE BT ON BPQ.CHILD_OBJID = BT.PARENT_OBJID
AND BPQ.BOM_REPORT_OBJID = BT.BOM_REPORT_OBJID
WHERE COALESCE(BPQ.STATUS, '') NOT IN ('deleting', 'deleted')
AND BPQ.PART_NO != ALL(BT.PATH) -- 순환 방지
),
MAX_LEVEL_CTE AS (
-- 최대 레벨 계산
SELECT MAX(LEV) AS MAX_LEVEL
FROM BOM_TREE
)
SELECT
BT.BOM_REPORT_OBJID,
-- 역전개는 레벨을 거꾸로 표시 (최상위가 1레벨)
(ML.MAX_LEVEL - BT.LEV + 1) AS LEV,
(ML.MAX_LEVEL - BT.LEV + 1) AS LEVEL,
BT.QTY,
BT.ITEM_QTY,
BT.QTY AS P_QTY,
BT.SEQ,
-- LEAF 계산 (역전개: 검색 시작점만 LEAF = 1, 나머지는 0)
-- 검색 시작점은 LEV = 1 (역순 표시하면 MAX_LEVEL)
CASE WHEN BT.LEV = 1 THEN 1 ELSE 0 END AS LEAF,
-- PART 정보
PM.OBJID AS PART_OBJID,
PM.PART_NO,
PM.PART_NAME,
PM.REVISION,
PM.MATERIAL,
PM.SPEC,
PM.WEIGHT,
PM.MAKER,
PM.REMARK,
PM.HEAT_TREATMENT_HARDNESS,
PM.HEAT_TREATMENT_METHOD,
PM.SURFACE_TREATMENT,
PM.SUPPLY_CODE,
(SELECT SUPPLY_NAME FROM ADMIN_SUPPLY_MNG O WHERE O.OBJID::VARCHAR = PM.SUPPLY_CODE) AS SUPPLY_NAME,
(SELECT CODE_NAME FROM COMM_CODE CC WHERE CC.CODE_ID = PM.PART_TYPE) AS PART_TYPE_TITLE,
PM.DESIGN_DATE,
(SELECT EO_NO FROM EO_MNG EM WHERE EM.OBJID::VARCHAR = PM.EO_NO) AS EO_NO,
(SELECT TO_CHAR(REG_DATE,'YYYY-MM-DD') FROM EO_MNG EM WHERE EM.OBJID::VARCHAR = PM.EO_NO) AS EO_DATE,
PM.SUB_MATERIAL,
-- 첨부파일 개수
(SELECT COUNT(*) FROM ATTACH_FILE_INFO AF WHERE AF.TARGET_OBJID = PM.OBJID AND AF.DOC_TYPE = '3D_CAD' AND AF.STATUS = 'Active') AS FILE_3D_CNT,
(SELECT COUNT(*) FROM ATTACH_FILE_INFO AF WHERE AF.TARGET_OBJID = PM.OBJID AND AF.DOC_TYPE = '2D_DRAWING_CAD' AND AF.STATUS = 'Active') AS FILE_2D_CNT,
(SELECT COUNT(*) FROM ATTACH_FILE_INFO AF WHERE AF.TARGET_OBJID = PM.OBJID AND AF.DOC_TYPE = '2D_PDF_CAD' AND AF.STATUS = 'Active') AS FILE_PDF_CNT,
-- BOM REPORT 정보
PBR.REGDATE,
PBR.PRODUCT_CD,
PBR.STATUS AS BOM_STATUS,
-- PATH 정보
BT.PATH,
BT.PARENT_PART_NO,
-- MAX_LEVEL 추가
ML.MAX_LEVEL
FROM BOM_TREE BT
CROSS JOIN MAX_LEVEL_CTE ML
LEFT JOIN PART_MNG PM ON BT.LAST_PART_OBJID = PM.OBJID
LEFT JOIN PART_BOM_REPORT PBR ON BT.BOM_REPORT_OBJID = PBR.OBJID
WHERE 1=1
AND (PM.OBJID IS NULL OR PM.STATUS IN ('create', 'release'))
AND PBR.STATUS = 'Y'
ORDER BY
PBR.REGDATE DESC,
(ML.MAX_LEVEL - BT.LEV + 1), -- 역전개: 레벨 역순
BT.PATH
</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>
<!-- BOM에 연결된 create 상태 파트 OBJID 목록 조회 (ERP 전송용) -->
<select id="getCreatePartObjidsByBomObjid" parameterType="map" resultType="string">
SELECT CAST(p.OBJID AS VARCHAR) AS PART_OBJID
FROM part_mng p
WHERE p.OBJID IN (
SELECT part_no FROM bom_part_qty AS t
WHERE t.bom_report_objid = #{checkArr}
)
AND p.status = 'create'
</select>
<!-- 선택된 구조등록 연결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 'N' ELSE STATUS END)
WHERE OBJID = #{BOM_REPORT_OBJID}
</update>
<!-- 구조변경시 BomReport의 상태값을 변경한다. -->
<update id="changeStatusBomReportByPartNo" parameterType="map">
UPDATE PART_BOM_REPORT
SET
-- STATUS = 'changeDesign'
STATUS = 'N'
,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 != 'N'
</update>
<!-- 구조변경시 BomReport의 상태값을 변경한다. -->
<update id="changeStatusBomReportByPartObjid" parameterType="map">
UPDATE PART_BOM_REPORT
SET
-- STATUS = 'changeDesign'
STATUS = 'N'
,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 != 'N'
</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
,HEAT_TREATMENT_HARDNESS
,HEAT_TREATMENT_METHOD
,SURFACE_TREATMENT
,ACCTFG
,ODRFG
,UNIT_DC
,UNITMANG_DC
,UNITCHNG_NB
,LOT_FG
,USE_YN
,QC_FG
,SETITEM_FG
,REQ_FG
,UNIT_LENGTH
,UNIT_QTY
) VALUES (
#{PART_OBJID}::NUMERIC
,#{PART_NO}
,#{PART_NAME}
,#{UNIT}
,COALESCE(NULLIF(#{QTY}, ''), '0')::NUMERIC
,#{SPEC}
,#{MATERIAL}
,NULLIF(#{THICKNESS}, '')
,NULLIF(#{WIDTH}, '')
,NULLIF(#{HEIGHT}, '')
,NULLIF(#{OUT_DIAMETER}, '')
,NULLIF(#{IN_DIAMETER}, '')
,NULLIF(#{LENGTH}, '')
,#{REMARK}
,'create'
,now()
,#{CONNECTUSERID}
,'1'
,#{PART_TYPE}
,#{PRODUCT_MGMT_OBJID}
,#{SUPPLY_CODE}
,#{MAKER}
,#{CONTRACT_OBJID}
,#{POST_PROCESSING}
,#{HEAT_TREATMENT_HARDNESS}
,#{HEAT_TREATMENT_METHOD}
,#{SURFACE_TREATMENT}
,#{ACCTFG}
,#{ODRFG}
,#{UNIT_DC}
,#{UNITMANG_DC}
,COALESCE(NULLIF(#{UNITCHNG_NB}, ''), '0')::NUMERIC
,COALESCE(#{LOT_FG}, '0')
,COALESCE(#{USE_YN}, '1')
,COALESCE(#{QC_FG}, '0')
,COALESCE(#{SETITEM_FG}, '0')
,COALESCE(#{REQ_FG}, '0')
,NULLIF(#{UNIT_LENGTH}, '')
,NULLIF(#{UNIT_QTY}, '')
)
</insert>
<!-- CSV 업로드 시 기존 파트 정보 업데이트 (임시 - 원복 예정) -->
<update id="updatePartInfoFromCsv" parameterType="map">
UPDATE PART_MNG
SET PART_NAME = #{PART_NAME}
,UNIT = #{UNIT}
,SPEC = #{SPEC}
,MATERIAL = #{MATERIAL}
,THICKNESS = NULLIF(#{THICKNESS}, '')
,WIDTH = NULLIF(#{WIDTH}, '')
,HEIGHT = NULLIF(#{HEIGHT}, '')
,OUT_DIAMETER = NULLIF(#{OUT_DIAMETER}, '')
,IN_DIAMETER = NULLIF(#{IN_DIAMETER}, '')
,LENGTH = NULLIF(#{LENGTH}, '')
,REMARK = #{REMARK}
,PART_TYPE = #{PART_TYPE}
,SUPPLY_CODE = #{SUPPLY_CODE}
,MAKER = #{MAKER}
,POST_PROCESSING = #{POST_PROCESSING}
,HEAT_TREATMENT_HARDNESS = #{HEAT_TREATMENT_HARDNESS}
,HEAT_TREATMENT_METHOD = #{HEAT_TREATMENT_METHOD}
,SURFACE_TREATMENT = #{SURFACE_TREATMENT}
,ACCTFG = #{ACCTFG}
,ODRFG = #{ODRFG}
,UNIT_DC = #{UNIT_DC}
,UNITMANG_DC = #{UNITMANG_DC}
,UNITCHNG_NB = COALESCE(NULLIF(#{UNITCHNG_NB}, ''), '0')::NUMERIC
,LOT_FG = COALESCE(#{LOT_FG}, '0')
,USE_YN = COALESCE(#{USE_YN}, '1')
,QC_FG = COALESCE(#{QC_FG}, '0')
,SETITEM_FG = COALESCE(#{SETITEM_FG}, '0')
,REQ_FG = COALESCE(#{REQ_FG}, '0')
,UNIT_LENGTH = NULLIF(#{UNIT_LENGTH}, '')
,UNIT_QTY = NULLIF(#{UNIT_QTY}, '')
,EDIT_DATE = now()
WHERE OBJID = #{PART_OBJID}
</update>
<!-- 계약제품, 업체명으로 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>
<!-- 계정구분 코드 조회 (한글명 → ERP 코드값) -->
<select id="getAcctfgCode" parameterType="map" resultType="map">
SELECT
CODE_ID
FROM COMM_CODE
WHERE CODE_NAME = #{CODE_NAME}
AND PARENT_CODE_ID = '0900213'
</select>
<!-- 단위 코드 조회 (코드명 → 코드값) -->
<select id="getUnitDcCode" parameterType="map" resultType="map">
SELECT
CODE_ID
FROM COMM_CODE
WHERE UPPER(TRIM(CODE_NAME)) = UPPER(TRIM(#{CODE_NAME}))
AND PARENT_CODE_ID = '0001399'
</select>
<!-- 공급업체명으로 OBJID 조회 -->
<select id="getSupplyCodeByName" parameterType="map" resultType="map">
SELECT
OBJID
FROM ADMIN_SUPPLY_MNG
WHERE SUPPLY_NAME = #{SUPPLY_NAME}
LIMIT 1
</select>
<!-- PART 관리 목록 조회 -->
<select id="supplyInfo" parameterType="map" resultType="map">
SELECT
OBJID::VARCHAR AS OBJID
FROM ADMIN_SUPPLY_MNG
WHERE REPLACE(SUPPLY_NAME, ' ', '') = REPLACE(#{SUPPLY_NAME}, ' ', '')
</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="getStructureInfo" parameterType="map" resultType="map">
SELECT
OBJID,
PRODUCT_CD,
PART_NO,
PART_NAME,
REVISION,
STATUS
FROM
PART_BOM_REPORT
WHERE
OBJID = #{objId}
</select>
<!-- 구조 상태 업데이트 -->
<update id="updateStructureStatus" parameterType="map">
UPDATE PART_BOM_REPORT
SET
PRODUCT_CD = #{product_cd},
PART_NO = #{part_no},
PART_NAME = #{part_name},
REVISION = #{version},
STATUS = #{status},
EDITER = #{EDITER},
EDIT_DATE = NOW()
WHERE
OBJID = #{objId}
</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>
<!-- E-BOM 목록 조회 (셀렉트박스용) -->
<select id="getEbomList" parameterType="map" resultType="map">
SELECT
OBJID,
PART_NO,
PART_NAME,
REV,
SPEC_NAME,
REGDATE
FROM PART_BOM_REPORT
WHERE STATUS = 'Y'
ORDER BY REGDATE DESC, PART_NO
</select>
<!-- PART_OBJID로 PART_MNG 테이블에서 파트 정보 조회 -->
<select id="getPartInfoByObjId" parameterType="map" resultType="com.pms.common.UpperKeyMap">
SELECT
OBJID,
PART_NO,
PART_NAME,
PART_TYPE,
UNIT,
MATERIAL,
SPEC,
MAKER,
SUPPLY_CODE
FROM PART_MNG
WHERE OBJID::VARCHAR = #{partObjId}
LIMIT 1
</select>
<!-- ERP 전송을 위한 전체 PART 목록 조회 -->
<select id="selectAllPartListForErp" resultType="map">
SELECT
P.OBJID,
P.PART_NO,
P.PART_NAME,
P.SPEC,
P.acctfg,
P.odrfg,
P.UNIT_DC,
COALESCE(CC_UNIT.CODE_NAME, P.UNIT_DC) AS UNIT_DC_NM,
P.UNITMANG_DC,
COALESCE(CC_UNITMANG.CODE_NAME, P.UNITMANG_DC) AS UNITMANG_DC_NM,
P.UNITCHNG_NB,
P.LOT_FG,
P.USE_YN,
P.QC_FG,
P.SETITEM_FG,
P.REQ_FG
FROM PART_MNG P
LEFT JOIN COMM_CODE CC_UNIT ON CC_UNIT.CODE_ID = P.UNIT_DC
LEFT JOIN COMM_CODE CC_UNITMANG ON CC_UNITMANG.CODE_ID = P.UNITMANG_DC
WHERE P.STATUS = 'release'
AND P.PART_NO IS NOT NULL
AND P.PART_NAME IS NOT NULL
ORDER BY P.PART_NO
</select>
<!-- OBJID로 단일 PART 조회 -->
<select id="selectPartByObjid" parameterType="map" resultType="map">
SELECT
P.OBJID,
P.PART_NO,
P.PART_NAME,
P.SPEC,
P.acctfg,
P.odrfg,
P.UNIT_DC,
COALESCE(CC_UNIT.CODE_NAME, P.UNIT_DC) AS UNIT_DC_NM,
P.UNITMANG_DC,
COALESCE(CC_UNITMANG.CODE_NAME, P.UNITMANG_DC) AS UNITMANG_DC_NM,
P.UNITCHNG_NB,
P.LOT_FG,
P.USE_YN,
P.QC_FG,
P.SETITEM_FG,
P.REQ_FG
FROM PART_MNG P
LEFT JOIN COMM_CODE CC_UNIT ON CC_UNIT.CODE_ID = P.UNIT_DC
LEFT JOIN COMM_CODE CC_UNITMANG ON CC_UNITMANG.CODE_ID = P.UNITMANG_DC
WHERE P.OBJID = #{objid}
</select>
</mapper>