Files
wace_plm/WebContent/WEB-INF/classes/com/pms/mapper/asMng.xml
chpark da06c4684c Initial commit: WACE PLM with database initialization features
- Add Docker Compose configurations for dev, prod, and standalone environments
- Add database initialization scripts (init-db.sh, init-db-docker.sh)
- Add enhanced start-docker-linux.sh with DB init support
- Add comprehensive database initialization guide
- Support for automatic dbexport.pgsql import on first run
- Include safety checks for production environment
2025-08-29 15:46:08 +09:00

1539 lines
48 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="as">
<update id="mergeAS" parameterType="map">
INSERT INTO AS_MNG
(
OBJID
,AS_NO
,CUSTCD
,COMPANY_NAME
,PRODUCT_CODE
,YEAR
,RELEASE_DATE
,CAR_NUMBER
,PAID_FREE
,PHONE
,PLAN_DATE
,REC_TYPE
,PROBLEM_CONTENTS
,ACTION_CONTENTS
,START_DATE
,END_DATE
,PART_PRICE
,AS_COST
,PAYMENT_TYPE
,REQ_USER
,REQ_DATE
,AS_USER
,AS_DATE
,FREE_CONTENTS
,WRITER
,STATUS_CD
,WORKINGTIME
,WAGE
,REG_DATE
,PRICE1
,PRICE2
,PRICE3
,TOTAL_PRICE
,WARRANTY_CODE
,MAINTENANCE
,SN_NO
)
VALUES
(
#{objId}::integer
,(SELECT 'AS-'||TO_CHAR(NOW(),'yyyy')::VARCHAR ||'-'||LPAD((SELECT nextval('seq_as_no'))::VARCHAR ,3,'0'))
,#{custcd}
,null
,#{product_code}
,#{year}
,#{release_date}
,#{car_number}
,#{paid_free}
,#{phone}
,#{plan_date}
,#{rec_type}
,#{problem_contents}
,#{action_contents}
,#{start_date}
,#{end_date}
,#{part_price}
,#{as_cost}
,#{payment_type}
,#{req_user}
,#{req_date}
,#{as_user}
,#{as_date}
,#{free_contents}
,#{writer}
,'0000100'
,#{workingtime}
,#{wage}
,now()
,#{price1}
,#{price2}
,#{price3}
,#{total_price}
,#{warranty_code}
,#{maintenance}
,#{sn_no}
) ON CONFLICT (OBJID) DO
UPDATE
SET
CUSTCD=#{custcd}
,PRODUCT_CODE=#{product_code}
,YEAR=#{year}
,RELEASE_DATE=#{release_date}
,CAR_NUMBER=#{car_number}
,PAID_FREE=#{paid_free}
,PHONE=#{phone}
,PLAN_DATE=#{plan_date}
,REC_TYPE=#{rec_type}
,PROBLEM_CONTENTS=#{problem_contents}
,ACTION_CONTENTS=#{action_contents}
,START_DATE=#{start_date}
,END_DATE=#{end_date}
,PART_PRICE=#{part_price}
,AS_COST=#{as_cost}
,PAYMENT_TYPE=#{payment_type}
,REQ_DATE=#{req_date}
,AS_DATE=#{as_date}
,FREE_CONTENTS=#{free_contents}
,WORKINGTIME=#{workingtime}
,WAGE=#{wage}
,PRICE1=#{price1}
,PRICE2=#{price2}
,PRICE3=#{price3}
,TOTAL_PRICE=#{total_price}
,WARRANTY_CODE=#{warranty_code}
,MAINTENANCE=#{maintenance}
,SN_NO=#{sn_no}
</update>
<update id="updateAsPart" parameterType="map">
UPDATE AS_PART_MNG SET
QTY=#{QTY}
,PRICE=#{PRICE}
,SUP_PRICE=#{SUP_PRICE}
,NOTE=#{NOTE}
WHERE OBJID = #{OBJID}::numeric
</update>
<!-- 페이징 처리한 EO 목록을 가져온다. -->
<select id="getECRListPaging" parameterType="map" resultType="map">
SELECT
*
FROM(
SELECT * FROM
(SELECT
ROW_NUMBER() OVER (ORDER BY AS_NO) AS RNUM,
T.OBJID::VARCHAR,
T.AS_NO,
T.WARRANTY_CODE,
<!-- T.MAINTENANCE, -->
(SELECT A.name FROM (
SELECT CONCAT(areaA, areaB, areaC, areaD) AS code
, areaName AS name
FROM SWJA050A_TBL A
) AS A
WHERE 1=1
AND A.code = T.MAINTENANCE) AS MAINTENANCE,
T.CUSTCD,
/*(SELECT CUSTNM
FROM SWSB210A_TBL AS PM
WHERE PM.CUSTCD = T.CUSTCD
) AS CUST_NAME, */
(SELECT sm.supply_name
FROM SUPPLY_MNG AS sm
WHERE sm.objid = T.CUSTCD::NUMERIC
) AS CUST_NAME,
T.COMPANY_NAME,
T.YEAR,
T.PRODUCT_CODE,
/*(SELECT O.GOODSNM FROM swsb110a_tbl AS O WHERE O.goodscd = T.product_code) AS PRODUCT_NAME,*/
(SELECT O.product_code FROM product_mgmt AS O WHERE O.objid = T.product_code::numeric) AS PRODUCT_NAME,
T.REC_TYPE,
T1.REC_TYPE_NAME,
T.WRITER,
(SELECT USER_NAME
FROM USER_INFO
WHERE USER_ID = T.WRITER
) AS WRITER_NAME,
T.STATUS_CD,
T.PHONE,
TO_DATE(T.PLAN_DATE,'YYYY-MM-DD') AS PLAN_DATE /*접수일*/,
code_name(T.STATUS_CD) AS STATUS_NAME,
TO_DATE(T.REQ_DATE,'YYYY-MM-DD') AS REQ_DATE /*접수일*/,
TO_DATE(T.AS_DATE,'YYYY-MM-DD') AS AS_DATE /*고객인도일*/,
T.release_date,
T.CAR_NUMBER,
T.paid_free,
(SELECT COUNT(1)
FROM ATTACH_FILE_INFO
WHERE TARGET_OBJID = T.OBJID
AND DOC_TYPE='AS_DOC'
AND UPPER(STATUS) = 'ACTIVE'
) AS CU01_CNT
,(SELECT COUNT(1)
FROM ATTACH_FILE_INFO
WHERE TARGET_OBJID = T.OBJID
AND DOC_TYPE='ECR_ATTACH_01'
AND UPPER(STATUS) = 'ACTIVE'
) AS CU02_CNT
,(SELECT COUNT(1)
FROM ATTACH_FILE_INFO
WHERE TARGET_OBJID = T.OBJID
AND DOC_TYPE='ECR_ATTACH_02'
AND UPPER(STATUS) = 'ACTIVE'
) AS CU03_CNT
,T.SN_NO
FROM AS_MNG T LEFT OUTER JOIN
(SELECT ARRAY_TO_STRING(ARRAY_AGG
(
(SELECT code_name
FROM comm_code AS cc
WHERE cc.code_id IN(TT.REC_TYPE)
)
)
,',') AS REC_TYPE_NAME,
TT.OBJID
FROM
(SELECT T.OBJID,
unnest(string_to_array(REC_TYPE, ',')) AS REC_TYPE
FROM AS_mng AS T
) AS TT
GROUP BY TT.OBJID
) AS T1
ON T.OBJID= T1.OBJID
) AS T
LEFT OUTER JOIN
(
SELECT
B.OBJID AS ROUTE_OBJID,
CASE B.STATUS
WHEN 'inProcess' THEN '결재중'
WHEN 'complete' THEN '결재완료'
WHEN 'reject' THEN '반려'
ELSE ''
END APPR_STATUS,
A.OBJID AS APPROVAL_OBJID,
A.TARGET_OBJID,
B.ROUTE_SEQ
FROM
APPROVAL A,
(
select
T1.*
from
(
select
TARGET_OBJID,
max(T.ROUTE_SEQ) as ROUTE_SEQ
from
ROUTE T
group by
T.TARGET_OBJID
) T,
ROUTE T1
where
T.TARGET_OBJID = T1.TARGET_OBJID
and T.ROUTE_SEQ = T1.ROUTE_SEQ
) B
WHERE
A.OBJID = B.APPROVAL_OBJID
AND TARGET_TYPE IN ('AS_MNG')
) A
ON T.OBJID::numeric = A.TARGET_OBJID
WHERE 1=1
<if test="Year !=null and Year != '' ">
AND TO_CHAR(T.REQ_DATE,'YYYY') = #{Year}
</if>
<if test="product_code != null and product_code != ''">
AND T.PRODUCT_CODE = #{product_code}
</if>
<if test="request_code != null and request_code != ''">
AND UPPER(REQUEST_CD) LIKE UPPER('%${request_code}%')
</if>
<if test="search_release_date_from != null and search_release_date_from != ''">
AND TO_DATE(TO_CHAR(TO_DATE(substring(T.RELEASE_DATE,1,4)||'-'||substring(T.RELEASE_DATE,5,2)||'-'||substring(T.RELEASE_DATE,7,2),'YYYY-MM-DD'),'YYYY-MM-DD'),'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{search_release_date_from}, 'YYYY-MM-DD')
</if>
<if test="search_release_date_to != null and search_release_date_to != ''">
AND TO_DATE(TO_CHAR(TO_DATE(substring(T.RELEASE_DATE,1,4)||'-'||substring(T.RELEASE_DATE,5,2)||'-'||substring(T.RELEASE_DATE,7,2),'YYYY-MM-DD'),'YYYY-MM-DD'),'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{search_release_date_to}, 'YYYY-MM-DD')
</if>
<if test="warranty_code != null and warranty_code != ''">
AND T.WARRANTY_CODE = #{warranty_code}
</if>
<if test="maintenance != null and maintenance != ''">
AND T.MAINTENANCE = (SELECT A.name FROM (
SELECT CONCAT(areaA, areaB, areaC, areaD) AS code
, areaName AS name
FROM SWJA050A_TBL A
) AS A
WHERE 1=1
AND A.code = #{maintenance})
</if>
<if test="rec_type != null and rec_type != ''">
AND UPPER(T.REC_TYPE) LIKE UPPER('%${rec_type}%')
</if>
<if test="search_req_date_from != null and search_req_date_from != ''">
AND TO_DATE(TO_CHAR( T.REQ_DATE ,'YYYY-MM-DD'),'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{search_req_date_from}, 'YYYY-MM-DD')
</if>
<if test="search_req_date_to != null and search_req_date_to != ''">
AND TO_DATE(TO_CHAR( T.REQ_DATE ,'YYYY-MM-DD'),'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{search_req_date_to}, 'YYYY-MM-DD')
</if>
<if test="search_plan_date_from != null and search_plan_date_from != ''">
AND TO_DATE(TO_CHAR( T.PLAN_DATE ,'YYYY-MM-DD'),'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{search_plan_date_from}, 'YYYY-MM-DD')
</if>
<if test="search_plan_date_to != null and search_plan_date_to != ''">
AND TO_DATE(TO_CHAR( T.PLAN_DATE ,'YYYY-MM-DD'),'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{search_plan_date_to}, 'YYYY-MM-DD')
</if>
<if test="search_as_date_from != null and search_as_date_from != ''">
AND TO_DATE(TO_CHAR( T.AS_DATE ,'YYYY-MM-DD'),'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{search_as_date_from}, 'YYYY-MM-DD')
</if>
<if test="search_as_date_to != null and search_as_date_to != ''">
AND TO_DATE(TO_CHAR( T.AS_DATE ,'YYYY-MM-DD'),'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{search_as_date_to}, 'YYYY-MM-DD')
</if>
<if test="writer != null and writer != ''">
AND T.writer = #{writer}
</if>
<if test="status_code != null and status_code != ''">
AND T.status_cd = #{status_code}
</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>
<!-- 페이징 처리한 ECR 목록을 가져온다. -->
<select id="getECRListCnt" 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 * FROM
(SELECT
ROW_NUMBER() OVER (ORDER BY AS_NO) AS RNUM,
T.OBJID::VARCHAR,
T.AS_NO,
T.WARRANTY_CODE,
(SELECT A.name FROM (
SELECT CONCAT(areaA, areaB, areaC, areaD) AS code
, areaName AS name
FROM SWJA050A_TBL A
) AS A
WHERE 1=1
AND A.code = T.MAINTENANCE) AS MAINTENANCE,
T.CUSTCD,
(SELECT CUSTNM
FROM SWSB210A_TBL AS PM
WHERE PM.CUSTCD = T.CUSTCD
) AS CUST_NAME,
T.COMPANY_NAME,
T.YEAR,
T.PRODUCT_CODE,
(SELECT O.GOODSNM FROM swsb110a_tbl AS O WHERE O.goodscd = T.product_code) AS PRODUCT_NAME,
T.REC_TYPE,
T1.REC_TYPE_NAME,
T.WRITER,
(SELECT USER_NAME
FROM USER_INFO
WHERE USER_ID = T.WRITER
) AS WRITER_NAME,
T.STATUS_CD,
T.PHONE,
TO_DATE(T.PLAN_DATE,'YYYY-MM-DD') AS PLAN_DATE /*접수일*/,
code_name(T.STATUS_CD) AS STATUS_NAME,
TO_DATE(T.REQ_DATE,'YYYY-MM-DD') AS REQ_DATE /*접수일*/,
TO_DATE(T.AS_DATE,'YYYY-MM-DD') AS AS_DATE /*고객인도일*/,
T.release_date,
T.CAR_NUMBER,
T.paid_free,
(SELECT COUNT(1)
FROM ATTACH_FILE_INFO
WHERE TARGET_OBJID = T.OBJID
AND DOC_TYPE='AS_DOC'
AND UPPER(STATUS) = 'ACTIVE'
) AS CU01_CNT
FROM AS_MNG T LEFT OUTER JOIN
(SELECT ARRAY_TO_STRING(ARRAY_AGG
(
(SELECT code_name
FROM comm_code AS cc
WHERE cc.code_id IN(TT.REC_TYPE)
)
)
,',') AS REC_TYPE_NAME,
TT.OBJID
FROM
(SELECT T.OBJID,
unnest(string_to_array(REC_TYPE, ',')) AS REC_TYPE
FROM AS_mng AS T
) AS TT
GROUP BY TT.OBJID
) AS T1
ON T.OBJID= T1.OBJID
) AS T
LEFT OUTER JOIN
(
SELECT
B.OBJID AS ROUTE_OBJID,
CASE B.STATUS
WHEN 'inProcess' THEN '결재중'
WHEN 'complete' THEN '결재완료'
WHEN 'reject' THEN '반려'
ELSE ''
END APPR_STATUS,
A.OBJID AS APPROVAL_OBJID,
A.TARGET_OBJID,
B.ROUTE_SEQ
FROM
APPROVAL A,
(
select
T1.*
from
(
select
TARGET_OBJID,
max(T.ROUTE_SEQ) as ROUTE_SEQ
from
ROUTE T
group by
T.TARGET_OBJID
) T,
ROUTE T1
where
T.TARGET_OBJID = T1.TARGET_OBJID
and T.ROUTE_SEQ = T1.ROUTE_SEQ
) B
WHERE
A.OBJID = B.APPROVAL_OBJID
AND TARGET_TYPE IN ('AS_MNG')
) A
ON T.OBJID::numeric = A.TARGET_OBJID
WHERE 1=1
) AS ECR WHERE 1=1
<if test="Year !=null and Year != '' ">
AND TO_CHAR(TO_DATE(ECR.REQ_DATE,'YYYY-MM-DD'),'YYYY') = #{Year}
</if>
<if test="product_code != null and product_code != ''">
AND ECR.PRODUCT_CODE = #{product_code}
</if>
<if test="search_release_date_from != null and search_release_date_from != ''">
AND TO_DATE(TO_CHAR(TO_DATE(substring(ECR.RELEASE_DATE,1,4)||'-'||substring(ECR.RELEASE_DATE,5,2)||'-'||substring(ECR.RELEASE_DATE,7,2),'YYYY-MM-DD'),'YYYY-MM-DD'),'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{search_release_date_from}, 'YYYY-MM-DD')
</if>
<if test="search_release_date_to != null and search_release_date_to != ''">
AND TO_DATE(TO_CHAR(TO_DATE(substring(ECR.RELEASE_DATE,1,4)||'-'||substring(ECR.RELEASE_DATE,5,2)||'-'||substring(ECR.RELEASE_DATE,7,2),'YYYY-MM-DD'),'YYYY-MM-DD'),'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{search_release_date_to}, 'YYYY-MM-DD')
</if>
<if test="warranty_code != null and warranty_code != ''">
AND ECR.WARRANTY_CODE = #{warranty_code}
</if>
<if test="maintenance != null and maintenance != ''">
AND ECR.MAINTENANCE = (SELECT A.name FROM (
SELECT CONCAT(areaA, areaB, areaC, areaD) AS code
, areaName AS name
FROM SWJA050A_TBL A
) AS A
WHERE 1=1
AND A.code = #{maintenance})
</if>
<if test="rec_type != null and rec_type != ''">
AND UPPER(ECR.REC_TYPE) LIKE UPPER('%${rec_type}%')
</if>
<if test="search_req_date_from != null and search_req_date_from != ''">
AND TO_DATE(TO_CHAR( TO_DATE(ECR.REQ_DATE,'YYYY-MM-DD'),'YYYY-MM-DD'),'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{search_req_date_from}, 'YYYY-MM-DD')
</if>
<if test="search_req_date_to != null and search_req_date_to != ''">
AND TO_DATE(TO_CHAR( TO_DATE(ECR.REQ_DATE,'YYYY-MM-DD') ,'YYYY-MM-DD'),'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{search_req_date_to}, 'YYYY-MM-DD')
</if>
<if test="search_plan_date_from != null and search_plan_date_from != ''">
AND TO_DATE(TO_CHAR( TO_DATE(ECR.PLAN_DATE,'YYYY-MM-DD'),'YYYY-MM-DD'),'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{search_plan_date_from}, 'YYYY-MM-DD')
</if>
<if test="search_plan_date_to != null and search_plan_date_to != ''">
AND TO_DATE(TO_CHAR( TO_DATE(ECR.PLAN_DATE,'YYYY-MM-DD') ,'YYYY-MM-DD'),'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{search_plan_date_to}, 'YYYY-MM-DD')
</if>
<if test="search_as_date_from != null and search_as_date_from != ''">
AND TO_DATE(TO_CHAR( TO_DATE(ECR.AS_DATE,'YYYY-MM-DD'),'YYYY-MM-DD'),'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{search_as_date_from}, 'YYYY-MM-DD')
</if>
<if test="search_as_date_to != null and search_as_date_to != ''">
AND TO_DATE(TO_CHAR( TO_DATE(ECR.AS_DATE,'YYYY-MM-DD') ,'YYYY-MM-DD'),'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{search_as_date_to}, 'YYYY-MM-DD')
</if>
<if test="request_code != null and request_code != ''">
AND UPPER(REQUEST_CD) LIKE UPPER('%${request_code}%')
</if>
<if test="writer != null and writer != ''">
AND ECR.writer = #{writer}
</if>
<if test="status_code != null and status_code != ''">
AND ECR.status_cd = #{status_code}
</if>
) AS T
</select>
<select id="getECRList_CS" parameterType="map" resultType="com.pms.common.UpperKeyMap">
SELECT CSM.OBJID
,CSM.SERVICE_NO
,CSM.PRODUCT
,(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CSM.PRODUCT) AS PRODUCT_NAME
,CSM.CONTRACT_OBJID
,CSM.CS_CATEGORY
,(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CSM.CS_CATEGORY) AS CATEGORY_NAME
,CSM.WARRANTY
,(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CSM.WARRANTY) AS WARRANTY_NAME
,CSM.MANAGER_ID
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = CSM.MANAGER_ID) AS MANAGER_NAME
,CSM.ACT_DATE
,CSM.CATEGORY_H
,CSM.CATEGORY_M
,CSM.CATEGORY_L
,(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CSM.CATEGORY_H) AS CATEGORY_H_NAME
,(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CSM.CATEGORY_M) AS CATEGORY_M_NAME
,(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CSM.CATEGORY_L) AS CATEGORY_L_NAME
,CSM.TITLE
,CSM.BEFORE_CONTENTS
,CSM.AFTER_CONTENTS
,CSM.WRITER
,CSM.REGDATE
,CSM.STATUS
,(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CSM.STATUS) AS STATUS_NAME
,TO_CHAR(CSM.REGDATE, 'YYYY-MM-DD') AS REC_DT
,CM.PROJECT_NO
,CM.CUSTOMER_OBJID
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE OBJID = CM.CUSTOMER_OBJID::INTEGER) AS CUSTOMER_NAME
,RM.RELEASE_DATE
,CM.SETUP
,CSW.PLAN_COST
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = CSM.OBJID AND DOC_TYPE='AS_IMG_01' AND UPPER(STATUS) = 'ACTIVE') AS CU01_CNT
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = CSM.OBJID AND DOC_TYPE='AS_IMG_02' AND UPPER(STATUS) = 'ACTIVE') AS CU02_CNT
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = CSM.OBJID AND DOC_TYPE='AS_DOC_01' AND UPPER(STATUS) = 'ACTIVE') AS CU03_CNT
,APPR.APPROVAL_OBJID
,APPR.ROUTE_OBJID
,APPR.APPR_STATUS
,APPR.APPR_STATUS_NAME
FROM CUSTOMER_SERVICE_MGMT AS CSM
LEFT OUTER JOIN PROJECT_MGMT AS CM
ON CSM.CONTRACT_OBJID = CM.OBJID
LEFT OUTER JOIN RELEASE_MGMT AS RM
ON CM.OBJID = RM.PARENT_OBJID
LEFT OUTER JOIN (SELECT PARENT_OBJID
,SUM(LABOR_COST::NUMERIC + EXPENSES::NUMERIC) AS PLAN_COST
FROM CUSTOMER_SERVICE_WORKINGTIME
GROUP BY PARENT_OBJID
) AS CSW
ON CSM.OBJID = CSW.PARENT_OBJID
LEFT OUTER JOIN (SELECT B.OBJID AS ROUTE_OBJID
,B.STATUS AS APPR_STATUS
,CASE UPPER(B.STATUS)
WHEN 'INPROCESS' THEN '결재중'
WHEN 'COMPLETE' THEN '결재완료'
WHEN 'REJECT' THEN '반려'
ELSE '' END APPR_STATUS_NAME
,A.OBJID AS APPROVAL_OBJID
,A.TARGET_OBJID
,B.ROUTE_SEQ
FROM APPROVAL A
,( SELECT T1.*
FROM ( SELECT TARGET_OBJID
,MAX(T.ROUTE_SEQ) AS ROUTE_SEQ
FROM ROUTE T
GROUP BY T.TARGET_OBJID
) T
,ROUTE T1
WHERE T.TARGET_OBJID = T1.TARGET_OBJID
AND T.ROUTE_SEQ = T1.ROUTE_SEQ
) B
WHERE A.OBJID = B.APPROVAL_OBJID
AND TARGET_TYPE IN ('CSM')
) AS APPR
ON CSM.OBJID::NUMERIC = APPR.TARGET_OBJID
WHERE 1=1
<if test="Year !=null and Year != '' ">
AND TO_CHAR(CSM.REGDATE,'YYYY') = #{Year}
</if>
<if test="product_cd !=null and product_cd != '' ">
AND CSM.PRODUCT = #{product_cd}
</if>
<!-- <if test="project_no !=null and project_no != '' ">
AND CSM.CONTRACT_OBJID = #{project_no}
</if> -->
<if test="project_nos != null and project_nos != ''">
AND CSM.CONTRACT_OBJID IN
<foreach item="state" collection="project_nos.split(',')"
open="(" separator="," close=")">
#{state}
</foreach>
</if>
<if test="project_no_txt !=null and project_no_txt != '' ">
AND CM.PROJECT_NO = #{project_no_txt}
</if>
<if test="warranty !=null and warranty != '' ">
AND CSM.WARRANTY = #{warranty}
</if>
<if test="category_h !=null and category_h != '' ">
AND CSM.CATEGORY_H = #{category_h}
</if>
<if test="category_m !=null and category_m != '' ">
AND CSM.CATEGORY_M = #{category_m}
</if>
<if test="category_l !=null and category_l != '' ">
AND CSM.CATEGORY_L = #{category_l}
</if>
<if test="rec_start_date != null and rec_start_date != ''">
AND TO_DATE(TO_CHAR(CSM.REGDATE ,'YYYY-MM-DD'),'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{rec_start_date}, 'YYYY-MM-DD')
</if>
<if test="rec_end_date != null and rec_end_date != ''">
AND TO_DATE(TO_CHAR(CSM.REGDATE ,'YYYY-MM-DD'),'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{rec_end_date }, 'YYYY-MM-DD')
</if>
<if test="manager_id != null and manager_id != ''">
AND CSM.MANAGER_ID = #{manager_id}
</if>
<if test="act_start_date != null and act_start_date != ''">
AND TO_DATE(CSM.ACT_DATE,'YYYY-MM-DD') <![CDATA[ >= ]]> TO_DATE(#{act_start_date}, 'YYYY-MM-DD')
</if>
<if test="act_end_date != null and act_end_date != ''">
AND TO_DATE(CSM.ACT_DATE,'YYYY-MM-DD') <![CDATA[ <= ]]> TO_DATE(#{act_end_date }, 'YYYY-MM-DD')
</if>
<if test="appr_status !=null and appr_status != '' ">
AND APPR.APPR_STATUS = #{appr_status}
</if>
ORDER BY CSM.REGDATE DESC
</select>
<select id="getAsTotalList_CS" parameterType="map" resultType="map">
SELECT PRODUCT
,(SELECT PRODUCT_CODE FROM PRODUCT_MGMT WHERE OBJID = T.PRODUCT::INTEGER) AS PRODUCT_NAME
,PROJECT_NO
,SUM(CASE WHEN WARRANTY = '0000157' THEN 1 ELSE 0 END) AS WARRANTY1
,SUM(CASE WHEN WARRANTY = '0000157' THEN COST ELSE 0 END) AS COST1
,SUM(CASE WHEN WARRANTY = '0000158' THEN 1 ELSE 0 END) AS WARRANTY2
,SUM(CASE WHEN WARRANTY = '0000158' THEN COST ELSE 0 END) AS COST2
,SUM(CASE WHEN CATEGORY_H = '0000976' THEN 1 ELSE 0 END) AS CAT_CNT1
,SUM(CASE WHEN CATEGORY_H = '0000977' THEN 1 ELSE 0 END) AS CAT_CNT2
,SUM(CASE WHEN CATEGORY_H = '0000978' THEN 1 ELSE 0 END) AS CAT_CNT3
,SUM(CASE WHEN CATEGORY_H = '0000979' THEN 1 ELSE 0 END) AS CAT_CNT4
,SUM(CASE WHEN CATEGORY_H = '0000980' THEN 1 ELSE 0 END) AS CAT_CNT5
FROM (
SELECT CSM.PRODUCT
,TRIM(CM.PROJECT_NO) AS PROJECT_NO
,CSM.WARRANTY /*157유상 158무상*/
,CSM.ACT_DATE
,CSM.CATEGORY_H
,(CSM.total_labor_cost::NUMERIC + CSM.total_expenses::NUMERIC) AS COST
FROM CUSTOMER_SERVICE_MGMT AS CSM
LEFT OUTER JOIN PROJECT_MGMT AS CM
ON CSM.CONTRACT_OBJID = CM.OBJID
WHERE 1=1
AND CSM.STATUS = '0000102' /*결재완료*/
<if test="Year !=null and Year != '' ">
AND TO_CHAR(TO_DATE(CSM.ACT_DATE, 'YYYY-MM-DD'),'YYYY') = #{Year}
</if>
<if test="product_cd !=null and product_cd != '' ">
AND CSM.PRODUCT = #{product_cd}
</if>
<if test="project_no !=null and project_no != '' ">
<!-- AND CM.PROJECT_NO LIKE '%'||#{project_name}||'%' -->
AND CSM.CONTRACT_OBJID = #{project_no}
</if>
<if test="warranty !=null and warranty != '' ">
AND CSM.WARRANTY = #{warranty}
</if>
<if test="category_h !=null and category_h != '' ">
AND CSM.CATEGORY_H = #{category_h}
</if>
) AS T
GROUP BY PRODUCT, PROJECT_NO
ORDER BY PROJECT_NO DESC
</select>
<!-- AS 단건 정보를 가져온다. -->
<select id="getECRInfo" parameterType="map" resultType="map">
SELECT
T.OBJID::varchar
,AS_NO
,CUSTCD
,COMPANY_NAME
,PRODUCT_CODE
,YEAR
,RELEASE_DATE
,CAR_NUMBER
,PAID_FREE
,PHONE
,PLAN_DATE
,REC_TYPE
,PROBLEM_CONTENTS
,ACTION_CONTENTS
,START_DATE
,END_DATE
,PART_PRICE
,AS_COST
,PAYMENT_TYPE
,REQ_USER
,REQ_DATE
,AS_USER
,AS_DATE
,FREE_CONTENTS
,WRITER
,STATUS_CD
,WORKINGTIME
,WAGE
,PRICE1
,PRICE2
,PRICE3
,TOTAL_PRICE
,TO_CHAR(T.REG_DATE,'YYYY-MM-DD') AS REG_DATE /*접수일*/
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = T.WRITER) AS WRITER_NAME
,WARRANTY_CODE
,MAINTENANCE
,SN_NO
FROM AS_MNG T
WHERE 1=1
AND OBJID = #{objId}::integer
</select>
<select id="getCSMInfo" parameterType="map" resultType="map">
SELECT CSM.OBJID
,CSM.SERVICE_NO
,CSM.PRODUCT
,(SELECT PRODUCT_CODE FROM PRODUCT_MGMT WHERE OBJID = CSM.PRODUCT::INTEGER) AS PRODUCT_NAME
,CSM.CONTRACT_OBJID
,CSM.CS_CATEGORY
,(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CSM.CS_CATEGORY) AS CATEGORY_NAME
,CSM.WARRANTY
,(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CSM.WARRANTY) AS WARRANTY_NAME
,CSM.MANAGER_ID
,(SELECT USER_NAME FROM USER_INFO WHERE USER_ID = CSM.MANAGER_ID) AS MANAGER_NAME
,CSM.ACT_DATE
,CSM.CATEGORY_H
,CSM.CATEGORY_M
,CSM.CATEGORY_L
,(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CSM.CATEGORY_H) AS CATEGORY_H_NAME
,(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CSM.CATEGORY_M) AS CATEGORY_M_NAME
,(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CSM.CATEGORY_L) AS CATEGORY_L_NAME
,CSM.TITLE
,CSM.BEFORE_CONTENTS
,CSM.AFTER_CONTENTS
,CSM.WRITER
,CSM.REGDATE
,CSM.STATUS
,(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = CSM.STATUS) AS STATUS_NAME
,TO_CHAR(CSM.REGDATE, 'YYYY-MM-DD') AS REC_DT
,CM.PROJECT_NO
,CM.CUSTOMER_OBJID
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG WHERE OBJID = CM.CUSTOMER_OBJID::INTEGER) AS CUSTOMER_NAME
,RM.RELEASE_DATE
,CM.SETUP
,CSW.PLAN_COST
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = CSM.OBJID AND DOC_TYPE='AS_IMG_01' AND UPPER(STATUS) = 'ACTIVE') AS CU01_CNT
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = CSM.OBJID AND DOC_TYPE='AS_IMG_02' AND UPPER(STATUS) = 'ACTIVE') AS CU02_CNT
,(SELECT COUNT(1) FROM ATTACH_FILE_INFO WHERE TARGET_OBJID = CSM.OBJID AND DOC_TYPE='AS_DOC_01' AND UPPER(STATUS) = 'ACTIVE') AS CU03_CNT
,APPR.APPR_STATUS
,APPR.APPR_STATUS_NAME
FROM CUSTOMER_SERVICE_MGMT AS CSM
LEFT OUTER JOIN CONTRACT_MGMT AS CM
ON CSM.CONTRACT_OBJID = CM.OBJID
LEFT OUTER JOIN RELEASE_MGMT AS RM
ON CM.OBJID = RM.PARENT_OBJID
LEFT OUTER JOIN (SELECT PARENT_OBJID
,SUM(LABOR_COST::NUMERIC + EXPENSES::NUMERIC) AS PLAN_COST
FROM CUSTOMER_SERVICE_WORKINGTIME
GROUP BY PARENT_OBJID
) AS CSW
ON CSM.OBJID = CSW.PARENT_OBJID
LEFT OUTER JOIN (SELECT B.OBJID AS ROUTE_OBJID
,B.STATUS AS APPR_STATUS
,CASE UPPER(B.STATUS)
WHEN 'INPROCESS' THEN '결재중'
WHEN 'COMPLETE' THEN '결재완료'
WHEN 'REJECT' THEN '반려'
ELSE '' END APPR_STATUS_NAME
,A.OBJID AS APPROVAL_OBJID
,A.TARGET_OBJID
,B.ROUTE_SEQ
FROM APPROVAL A
,( SELECT T1.*
FROM ( SELECT TARGET_OBJID
,MAX(T.ROUTE_SEQ) AS ROUTE_SEQ
FROM ROUTE T
GROUP BY T.TARGET_OBJID
) T
,ROUTE T1
WHERE T.TARGET_OBJID = T1.TARGET_OBJID
AND T.ROUTE_SEQ = T1.ROUTE_SEQ
) B
WHERE A.OBJID = B.APPROVAL_OBJID
AND TARGET_TYPE IN ('CSM')
) AS APPR
ON CSM.OBJID = APPR.TARGET_OBJID::VARCHAR
WHERE 1=1
AND CSM.OBJID = #{objId}
</select>
<select id="getCSPList" parameterType="map" resultType="map">
SELECT CSP.OBJID
,CSP.PARENT_OBJID
,CSP.PART_NO
,CSP.PART_NAME
,CSP.SPEC
,CSP.QTY
,CSP.CUR_QTY
,CSP.PRICE
,CSP.SUP_PRICE
FROM CUSTOMER_SERVICE_PART CSP
WHERE 1=1
AND CSP.PARENT_OBJID = #{objId}
</select>
<select id="getCSWList" parameterType="map" resultType="map">
SELECT CSW.OBJID
,CSW.PARENT_OBJID
,CSW.SUPPLY_OBJID
,CSW.FORM_DATE
,CSW.TO_DATE
,CSW.WORK_DAY
,CSW.WORK_PERSON
,CSW.WORK_DAY_M
,CSW.LABOR_COST
,CSW.EXPENSES
FROM CUSTOMER_SERVICE_WORKINGTIME CSW
WHERE 1=1
AND CSW.PARENT_OBJID = #{objId}
</select>
<update id="asDelete" parameterType="map">
DELETE FROM AS_MNG
WHERE OBJID=#{objId}::numeric
</update>
<sql id="eoMngBase2">
(
SELECT
OBJID,
eo_no,
eo_gubun,
ecr_objid,
product_1,
product_2,
eo_kind,
title,
request_code,
period_code,
unit,
DEPLOY_DATE,
TO_CHAR(REG_DATE,'YYYY-MM-DD') AS REG_DATE,
EDIT_DATE,
TO_CHAR(E.EDIT_DATE,'YYYY-MM-DD') AS EDIT_DATE_TITLE,
WRITER,
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = E.WRITER) AS WRITER_TITLE,
DEPLOY_WRITER,
DEPLOY_DEPT,
STATUS,
CASE STATUS
WHEN 'create' THEN '작성중'
WHEN 'deploy' THEN '배포완료'
WHEN 'approvalRequest' THEN '결재중'
WHEN 'approvalComplete' THEN '결재완료'
WHEN 'reject' THEN '반려'
ELSE ''
END STATUS_TITLE,
contents,
A.APPR_STATUS,
A.ROUTE_OBJID,
A.APPROVAL_OBJID
FROM
EO_MNG E
LEFT OUTER JOIN
(
SELECT
B.OBJID AS ROUTE_OBJID,
CASE B.STATUS
WHEN 'inProcess' THEN '결재중'
WHEN 'complete' THEN '결재완료'
WHEN 'reject' THEN '반려'
ELSE ''
END APPR_STATUS,
A.OBJID AS APPROVAL_OBJID,
A.TARGET_OBJID,
B.ROUTE_SEQ
FROM
APPROVAL A,
(
select
T1.*
from
(
select
TARGET_OBJID,
max(T.ROUTE_SEQ) as ROUTE_SEQ
from
ROUTE T
group by
T.TARGET_OBJID
) T,
ROUTE T1
where
T.TARGET_OBJID = T1.TARGET_OBJID
and T.ROUTE_SEQ = T1.ROUTE_SEQ
) B
WHERE
A.OBJID = B.APPROVAL_OBJID
AND TARGET_TYPE IN ('EO_MNG')
) A
ON E.OBJID::numeric = A.TARGET_OBJID
)
</sql>
<!-- Part 관리 기본 조회 -->
<sql id="partMngBase">
(
SELECT
P.OBJID,
P.PRODUCT_MGMT_OBJID,
PMUD.PRODUCT_CODE,
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
LEFT OUTER JOIN(
SELECT
PMUD.*
<!-- (UPG_CODE ||'-'|| PRODUCT_CODE ||'-'|| VC) AS UPG_NO -->
FROM(
SELECT
<!-- PMUD.OBJID AS DETAIL_OBJID,
PMUD.OBJID::VARCHAR AS CODE,
PMUD.TARGET_OBJID AS MASTER_OBJID,
PMUD.UPG_NAME,
PMUD.UPG_CODE,
PMUD.UPG_NAME AS NAME,
PMUD.UPG_CODE AS CODE_CD,
PMUD.VC,
PMUD.NOTE,
PMUD.PRODUCT_OBJID,
(SELECT PRODUCT_CODE FROM PRODUCT_MGMT PM WHERE 1=1 AND PM.OBJID = PMUD.PRODUCT_OBJID) AS PRODUCT_CODE -->
DISTINCT
PMUD.PRODUCT_OBJID,
(SELECT PRODUCT_CODE FROM PRODUCT_MGMT PM WHERE 1=1 AND PM.OBJID = PMUD.PRODUCT_OBJID) AS PRODUCT_CODE,
(UPG_CODE ||'-'|| (SELECT PRODUCT_CODE FROM PRODUCT_MGMT PM WHERE 1=1 AND PM.OBJID = PMUD.PRODUCT_OBJID) ||'-'|| VC) AS UPG_NO
FROM
PRODUCT_MGMT_UPG_DETAIL PMUD
WHERE 1=1
) PMUD
) PMUD
ON P.PRODUCT_MGMT_OBJID = PMUD.PRODUCT_OBJID::TEXT
AND P.UPG_NO = PMUD.UPG_NO
)
</sql>
<select id="getEOMngInfo" parameterType="map" resultType="map">
SELECT
T.*
<!-- ,(SELECT OEM_CODE FROM OEM_MNG WHERE OBJID = COALESCE(T.CUSTOMER,'0')::NUMERIC) AS CUSTOMER_TITLE -->
<!-- ,(SELECT CAR_CODE||'{'||CAR_NAME||'}' FROM CAR_MNG WHERE OBJID = COALESCE(T.CAR_TYPE,'0')::NUMERIC) AS CAR_TYPE_TITLE -->
<!-- ,(SELECT O.CODE_NAME FROM COMM_CODE O WHERE O.CODE_ID = T.EO_TYPE AND O.PARENT_CODE_ID = #{EO_TYPE_CODE}) AS EO_TYPE_TITLE -->
FROM <include refid="eoMngBase2"/> T
WHERE 1=1
AND T.OBJID = #{OBJID}::numeric
</select>
<!-- PART 관리 목록 조회 -->
<select id="partMngList" parameterType="map" resultType="map">
SELECT DISTINCT * FROM (SELECT T1.PART_NO FROM BOM_PART_QTY AS T1 , PART_BOM_REPORT AS T2
WHERE T1.BOM_REPORT_OBJID::NUMERIC = T2.OBJID
<if test="product_code != null and product_code != ''">
AND T2.PRODUCT_MGMT_OBJID = #{product_code}::NUMERIC
</if>
<if test="product_mgmt_spec != null and product_mgmt_spec != ''">
AND T2.PRODUCT_MGMT_SPEC = #{product_mgmt_spec}::NUMERIC
</if>
<if test="upg_no != null and upg_no != ''">
AND T2.PRODUCT_MGMT_UPG = #{upg_no}
</if>
) AS PART_BOM RIGHT OUTER JOIN
(SELECT
PM.OBJID::VARCHAR
,PM.PART_NO AS PART_NO_TITLE
,PM.PART_NAME
,PM.SPEC
,PM.MATERIAL
,PM.WEIGHT
,SWP.RIRCPTQTY
,SWP.RIPRICE
,PM.REG_DATE
,PM.REVISION
,PM.QTY
,COALESCE((select COALESCE(O.OHONHANDQTY,0) from swpe630a_tbl AS O WHERE O.imItemId = PM.part_no),0) AS OHONHANDQTY
FROM PART_MNG AS PM
LEFT OUTER JOIN SWPE201A_TBL AS SWP
ON PM.OBJID = SWP.IMITEMID::NUMERIC
WHERE PM.IS_LAST='1'
AND PM.STATUS='release') AS PART
ON PART_BOM.PART_NO = PART.OBJID
WHERE PART.OBJID IS NOT NULL
<if test="SEARCH_PART_NO != null and SEARCH_PART_NO != ''">
AND UPPER(PART.PART_NO) LIKE UPPER('%${SEARCH_PART_NO}%')
</if>
<if test="SEARCH_PART_NAME != null and SEARCH_PART_NAME != ''">
AND UPPER(PART.PART_NAME) LIKE UPPER('%${SEARCH_PART_NAME}%')
</if>
</select>
<insert id="insertASPartMng" parameterType="map">
INSERT INTO AS_PART_MNG
(
OBJID
,TARGET_OBJID
,PART_OBJID
,PRICE
)
VALUES
(
#{objId}::integer
,#{target_objid}::integer
,#{part_objid}::integer
,#{price}::varchar
)
</insert>
<select id="materpartMgmtList" parameterType="map" resultType="map">
SELECT
T.OBJID
,PM.PART_NO
,PM.PART_NAME
,PM.SPEC
,T.QTY
,T.PRICE
,T.SUP_PRICE
,T.NOTE
FROM AS_PART_MNG AS T LEFT OUTER JOIN
part_mng AS PM
ON T.part_objid = PM.objid
WHERE T.TARGET_OBJID = #{objId}::numeric
</select>
<!-- AS처리현황 목록을 가져온다. -->
<select id="getAsTotalList" parameterType="map" resultType="map">
SELECT *
FROM (
SELECT
COALESCE(COALESCE(COALESCE(COALESCE(COALESCE(COALESCE(AS_Y.product_code,AS_N.product_code),REC1.product_code),REC2.product_code),REC3.product_code),REC4.product_code),REC5.product_code) AS product_code
,(SELECT O.PRODUCT_NAME FROM PRODUCT_MGMT AS O WHERE O.OBJID::VARCHAR =
COALESCE(COALESCE(COALESCE(COALESCE(COALESCE(COALESCE(AS_Y.product_code,AS_N.product_code),REC1.product_code),REC2.product_code),REC3.product_code),REC4.product_code),REC5.product_code)
) AS PRODUCT_NAME
,CASE WHEN Y_CNT IS NULL
THEN '0'
ELSE Y_CNT
END AS Y_CNT
,CASE WHEN Y_total IS NULL
THEN '0'
ELSE Y_total
END AS Y_total
,CASE WHEN N_CNT IS NULL
THEN '0'
ELSE N_CNT
END AS N_CNT
,CASE WHEN N_total IS NULL
THEN '0'
ELSE N_total
END AS N_total
,CASE WHEN REC1.CNT1 IS NULL
THEN '0'
ELSE REC1.CNT1
END AS CNT1
,CASE WHEN REC2.CNT2 IS NULL
THEN '0'
ELSE REC2.CNT2
END AS CNT2
,CASE WHEN REC3.CNT3 IS NULL
THEN '0'
ELSE REC3.CNT3
END AS CNT3
,CASE WHEN REC4.CNT4 IS NULL
THEN '0'
ELSE REC4.CNT4
END AS CNT4
,CASE WHEN REC5.CNT5 IS NULL
THEN '0'
ELSE REC5.CNT5
END AS CNT5
FROM
(SELECT
product_code,count(warranty_code) AS Y_CNT, SUM(total_price::INTEGER) AS Y_total
FROM as_mng
WHERE warranty_code='0000158'
<if test="Year !=null and Year != '' ">
AND YEAR = #{Year}
</if>
GROUP BY product_code) AS AS_Y FULL OUTER JOIN
(SELECT
product_code,count(WARRANTY_CODE) AS N_CNT, SUM(total_price::INTEGER) AS N_total
FROM as_mng
WHERE warranty_code='0000157'
<if test="Year !=null and Year != '' ">
AND YEAR = #{Year}
</if>
GROUP BY product_code) AS AS_N
ON AS_Y.product_code = AS_N.product_code
LEFT OUTER JOIN
(SELECT
product_code,count(warranty_code) AS CNT1
FROM as_mng
WHERE rec_type='0000141'
<if test="Year !=null and Year != '' ">
AND YEAR = #{Year}
</if>
GROUP BY product_code) AS REC1
ON AS_N.product_code = REC1.product_code
LEFT OUTER JOIN
(SELECT
product_code,count(warranty_code) AS CNT2
FROM as_mng
WHERE rec_type='0000144'
<if test="Year !=null and Year != '' ">
AND YEAR = #{Year}
</if>
GROUP BY product_code) AS REC2
ON AS_N.product_code = REC2.product_code
LEFT OUTER JOIN
(SELECT
product_code,count(warranty_code) AS CNT3
FROM as_mng
WHERE rec_type='0000145'
<if test="Year !=null and Year != '' ">
AND YEAR = #{Year}
</if>
GROUP BY product_code) AS REC3
ON AS_N.product_code = REC3.product_code
LEFT OUTER JOIN
(SELECT
product_code,count(warranty_code) AS CNT4
FROM as_mng
WHERE rec_type='0000146'
<if test="Year !=null and Year != '' ">
AND YEAR = #{Year}
</if>
GROUP BY product_code) AS REC4
ON AS_N.product_code = REC4.product_code
LEFT OUTER JOIN
(SELECT
product_code,count(warranty_code) AS CNT5
FROM as_mng
WHERE rec_type='0000147'
<if test="Year !=null and Year != '' ">
AND YEAR = #{Year}
</if>
GROUP BY product_code) AS REC5
ON AS_N.product_code = REC5.product_code
) TT
WHERE 1=1
<if test="product_code != null and product_code != ''">
AND PRODUCT_CODE = #{product_code}
</if>
</select>
<delete id="deleteCSM" parameterType="map">
DELETE FROM CUSTOMER_SERVICE_MGMT WHERE OBJID = #{OBJID}
</delete>
<update id="mergeCSM" parameterType="map">
INSERT INTO CUSTOMER_SERVICE_MGMT (
OBJID
,SERVICE_NO
,PRODUCT
,CONTRACT_OBJID
,CS_CATEGORY
,WARRANTY
,MANAGER_ID
,ACT_DATE
,CATEGORY_H
,CATEGORY_M
,CATEGORY_L
,TITLE
,BEFORE_CONTENTS
,AFTER_CONTENTS
,WRITER
,REGDATE
,STATUS
,TOTAL_SUP_PRICE
,TOTAL_WORK_DAY
,TOTAL_WORK_PERSON
,TOTAL_WORK_DAY_M
,TOTAL_LABOR_COST
,TOTAL_EXPENSES
) VALUES (
#{ objId }
,(SELECT 'CSM'||TO_CHAR(NOW(),'yy')::VARCHAR ||'-'||LPAD((SELECT nextval('seq_as_no'))::VARCHAR ,4,'0'))
,(CASE WHEN #{product} = '' THEN NULL ELSE #{product} END)
,#{ contract_objid }
,#{ cs_category }
,#{ warranty }
,#{ manager_id }
,#{ act_date }
,#{ category_h }
,#{ category_m }
,#{ category_l }
,#{ title }
,#{ before_contents }
,#{ after_contents }
,#{ writer }
,now()
,(CASE WHEN #{ status } = '' OR #{ status } IS NULL THEN '0000100' ELSE #{ status }::VARCHAR END)
,#{ TOTAL_SUP_PRICE }
,#{ TOTAL_WORK_DAY }
,#{ TOTAL_WORK_PERSON }
,#{ TOTAL_WORK_DAY_M }
,#{ TOTAL_LABOR_COST }
,#{ TOTAL_EXPENSES }
) ON CONFLICT (OBJID) DO
UPDATE SET
SERVICE_NO = #{ service_no }
,PRODUCT = (CASE WHEN #{product} = '' THEN NULL ELSE #{product} END)
,CONTRACT_OBJID = #{ contract_objid }
,CS_CATEGORY = #{ cs_category }
,WARRANTY = #{ warranty }
,MANAGER_ID = #{ manager_id }
,ACT_DATE = #{ act_date }
,CATEGORY_H = #{ category_h }
,CATEGORY_M = #{ category_m }
,CATEGORY_L = #{ category_l }
,TITLE = #{ title }
,BEFORE_CONTENTS = #{ before_contents }
,AFTER_CONTENTS = #{ after_contents }
,WRITER = #{ writer }
,REGDATE = now()
,STATUS = (CASE WHEN #{ status } = '' OR #{ status } IS NULL THEN '0000100' ELSE #{ status }::VARCHAR END)
,TOTAL_SUP_PRICE = #{ TOTAL_SUP_PRICE }
,TOTAL_WORK_DAY = #{ TOTAL_WORK_DAY }
,TOTAL_WORK_PERSON = #{ TOTAL_WORK_PERSON }
,TOTAL_WORK_DAY_M = #{ TOTAL_WORK_DAY_M }
,TOTAL_LABOR_COST = #{ TOTAL_LABOR_COST }
,TOTAL_EXPENSES = #{ TOTAL_EXPENSES }
</update>
<delete id="deleteCSP" parameterType="map">
DELETE FROM CUSTOMER_SERVICE_PART WHERE PARENT_OBJID = #{PARENT_OBJID}
</delete>
<update id="mergeCSP" parameterType="map">
INSERT INTO CUSTOMER_SERVICE_PART (
OBJID
,PARENT_OBJID
,PART_NO
,PART_NAME
,SPEC
,QTY
,CUR_QTY
,PRICE
,SUP_PRICE
) VALUES (
#{ OBJID }
,#{ PARENT_OBJID }
,#{ PART_NO }
,#{ PART_NAME }
,#{ SPEC }
,#{ QTY }
,#{ CUR_QTY }
,#{ PRICE }
,#{ SUP_PRICE }
) ON CONFLICT (OBJID) DO
UPDATE SET
PARENT_OBJID = #{ PARENT_OBJID }
,PART_NO = #{ PART_NO }
,PART_NAME = #{ PART_NAME }
,SPEC = #{ SPEC }
,QTY = #{ QTY }
,CUR_QTY = #{ CUR_QTY }
,PRICE = #{ PRICE }
,SUP_PRICE = #{ SUP_PRICE }
</update>
<delete id="deleteCSW" parameterType="map">
DELETE FROM CUSTOMER_SERVICE_WORKINGTIME WHERE PARENT_OBJID = #{PARENT_OBJID}
</delete>
<update id="mergeCSW" parameterType="map">
INSERT INTO CUSTOMER_SERVICE_WORKINGTIME (
OBJID
,PARENT_OBJID
,SUPPLY_OBJID
,FORM_DATE
,TO_DATE
,WORK_DAY
,WORK_PERSON
,WORK_DAY_M
,LABOR_COST
,EXPENSES
) VALUES (
#{ OBJID }
,#{ PARENT_OBJID }
,#{ SUPPLY_OBJID }
,#{ FORM_DATE }
,#{ TO_DATE }
,#{ WORK_DAY }
,#{ WORK_PERSON }
,#{ WORK_DAY_M }
,#{ LABOR_COST }
,#{ EXPENSES }
) ON CONFLICT (OBJID) DO
UPDATE SET
PARENT_OBJID = #{ PARENT_OBJID }
,SUPPLY_OBJID = #{ SUPPLY_OBJID }
,FORM_DATE = #{ FORM_DATE }
,TO_DATE = #{ TO_DATE }
,WORK_DAY = #{ WORK_DAY }
,WORK_PERSON = #{ WORK_PERSON }
,WORK_DAY_M = #{ WORK_DAY_M }
,LABOR_COST = #{ LABOR_COST }
,EXPENSES = #{ EXPENSES }
</update>
<select id="getASDashboardList" parameterType="map" resultType="map">
SELECT A.*
FROM (
SELECT
PRODUCT
,(SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = T.PRODUCT) AS PRODUCT_NAME
,PROJECT_NO
,SUM(CASE WHEN WARRANTY = '0000157' THEN 1 ELSE 0 END) AS WARRANTY1
,SUM(CASE WHEN WARRANTY = '0000157' THEN COST ELSE 0 END) AS COST1
,SUM(CASE WHEN WARRANTY = '0000158' THEN 1 ELSE 0 END) AS WARRANTY2
,SUM(CASE WHEN WARRANTY = '0000158' THEN COST ELSE 0 END) AS COST2
<if test="columnList !=null">
<foreach collection="columnList" item="column">
,SUM(CASE WHEN CATEGORY_H = #{column.CODE_ID} THEN 1 ELSE 0 END) AS ${column.COL_NAME}
</foreach>
</if>
FROM(
SELECT
CSM.PRODUCT
,TRIM(CM.PROJECT_NO) AS PROJECT_NO
,CSM.WARRANTY /*157유상 158무상*/
,CSM.ACT_DATE
,CSM.CATEGORY_H
,(CSM.total_labor_cost::NUMERIC + CSM.total_expenses::NUMERIC) AS COST
FROM
CUSTOMER_SERVICE_MGMT AS CSM
LEFT OUTER JOIN CONTRACT_MGMT AS CM
ON CSM.CONTRACT_OBJID = CM.OBJID
WHERE 1=1
AND CSM.STATUS = '0000102' /*결재완료*/
<if test="Year !=null and Year != '' ">
AND TO_CHAR(TO_DATE(CSM.ACT_DATE, 'YYYY-MM-DD'),'YYYY') = #{Year}
</if>
<if test="product_cd !=null and product_cd != '' ">
AND CSM.PRODUCT = #{product_cd}
</if>
<!-- <if test="project_no !=null and project_no != '' ">
AND CM.PROJECT_NO LIKE '%'||#{project_name}||'%'
AND CSM.CONTRACT_OBJID = #{project_no}
</if> -->
<if test="project_nos != null and project_nos != ''">
AND CSM.CONTRACT_OBJID IN
<foreach item="state" collection="project_nos.split(',')"
open="(" separator="," close=")">
#{state}
</foreach>
</if>
<if test="warranty !=null and warranty != '' ">
AND CSM.WARRANTY = #{warranty}
</if>
<if test="category_h !=null and category_h != '' ">
AND CSM.CATEGORY_H = #{category_h}
</if>
) AS T
GROUP BY
PRODUCT,
PROJECT_NO
ORDER BY
PROJECT_NO DESC
) A
</select>
<select id="getHeaderList" parameterType="map" resultType="map">
WITH RECURSIVE COM (
PARENT_CODE_ID,
CODE_ID,
NAME,
CODE_CD,
STATUS,
ID,
EXT_VAL,
COL_NAME,
LEV
) AS (
SELECT
PARENT_CODE_ID,
CODE_ID,
CODE_NAME AS NAME,
CODE_CD,
STATUS,
ID,
EXT_VAL,
'COL_' || CODE_ID AS COL_NAME,
1 AS LEV
FROM
COMM_CODE
WHERE
1 = 1
AND UPPER(STATUS)= 'ACTIVE'
<choose>
<when test="code != null and !''.equals(code)">
AND PARENT_CODE_ID = #{code}
</when>
<otherwise>
AND PARENT_CODE_ID IS NULL
</otherwise>
</choose>
UNION ALL
SELECT
CC.PARENT_CODE_ID,
CC.CODE_ID,
CC.CODE_NAME AS NAME,
CC.CODE_CD,
CC.STATUS,
CC.ID,
CC.EXT_VAL,
'COL_' || CC.CODE_ID AS COL_NAME,
COM.LEV + 1
FROM
COMM_CODE CC
JOIN COM ON
COM.CODE_ID = CC.PARENT_CODE_ID
)
SELECT
ROW_NUMBER() OVER (PARTITION BY PARENT_CODE_ID ORDER BY CODE_ID) GROUP_SEQ,
(SELECT COUNT(1) FROM COMM_CODE WHERE 1 = 1 AND PARENT_CODE_ID = C.PARENT_CODE_ID) AS GROUP_CNT,
(SELECT CODE_NAME FROM COMM_CODE WHERE 1 = 1 AND CODE_ID = C.PARENT_CODE_ID) AS GROUP_NAME,
C.*
FROM
COM C
WHERE 1=1
AND LEV <![CDATA[ > ]]> 1
ORDER BY
C.PARENT_CODE_ID,
C.CODE_ID
</select>
</mapper>