Files
wace_plm/WebContent/WEB-INF/classes/com/pms/mapper/resourceMasterMng.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

326 lines
8.5 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="resourceMasterMng">
<sql id="resourceMasterMngBase">
(
SELECT
RM.OBJID,
RM.PART_OBJID,
PM.PART_NO,
(CASE WHEN PM.PART_NAME IS NULL THEN RM.PART_NAME ELSE PM.PART_NAME END) AS PART_NAME,
(CASE WHEN PM.SPEC IS NULL THEN RM.SPEC ELSE PM.SPEC END) AS SPEC,
(CASE WHEN PM.MATERIAL IS NULL THEN RM.MATERIAL ELSE PM.MATERIAL END) AS MATERIAL,
(CASE WHEN PM.UNIT IS NULL THEN RM.UNIT ELSE (SELECT CODE_NAME FROM COMM_CODE WHERE CODE_ID = PM.UNIT) END) AS UNIT,
(CASE WHEN PM.WEIGHT IS NULL THEN RM.WEIGHT ELSE PM.WEIGHT END) AS WEIGHT,
RM.THICKNESS ,
RM.WIDTH ,
RM.HEIGHT ,
RM.OUT_DIAMETER,
RM.IN_DIAMETER ,
RM.LENGTH ,
RP.UNIT_PRICE,
RP.PERSON_PRICE,
RP.AGENCY_PRICE,
RP.REMARK,
RP.PRICE_REGDATE_TITLE,
REGDATE,
TO_CHAR(RM.REGDATE,'YYYY-MM-DD') AS REGDATE_TITLE,
TO_CHAR(RM.REGDATE,'YYYY') AS REGDATE_YEAR_TITLE,
RM.WRITER,
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = RM.WRITER) AS WRITER_TITLE,
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE 1 = 1 AND F.TARGET_OBJID = RM.OBJID AND F.DOC_TYPE = 'RESOURCE_MASTER_MNG_FILE' AND UPPER(F.STATUS) = 'ACTIVE') AS FILE_CNT,
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,
AF.SAVED_FILE_NAME,
AF.REAL_FILE_NAME,
REPLACE(AF.FILE_PATH, '\', '\\') AS FILE_PATH
FROM
RESOURCE_MNG RM
LEFT OUTER JOIN
(
SELECT
PARENT_OBJID,
UNIT_PRICE,
PERSON_PRICE,
AGENCY_PRICE,
REMARK,
TO_CHAR(RP.APPLY_DATE,'YYYY-MM-DD') AS PRICE_REGDATE_TITLE,
ROW_NUMBER() OVER(PARTITION BY PARENT_OBJID ORDER BY REGDATE DESC) AS RNUM
FROM
RESOURCE_PRICE RP
) RP
ON RM.OBJID = RP.PARENT_OBJID
AND RP.RNUM = 1
LEFT OUTER JOIN PART_MNG AS PM
ON RM.PART_OBJID = PM.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 PM.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 PM.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 PM.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 ('PART_SHAPE_IMG')
AND STATUS = 'Active'
) AF
ON PM.OBJID::varchar = AF.TARGET_OBJID::varchar
)
</sql>
<sql id="resourcePriceBase">
(
SELECT
OBJID,
PARENT_OBJID,
UNIT_PRICE,
PERSON_PRICE,
AGENCY_PRICE,
REMARK,
REGDATE,
TO_CHAR(RP.REGDATE,'YYYY-MM-DD') AS REGDATE_TITLE,
TO_CHAR(RP.REGDATE,'YYYY') AS REGDATE_YEAR_TITLE,
TO_CHAR(RP.APPLY_DATE,'YYYY-MM-DD') AS APPLY_DATE_TITLE,
WRITER,
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = RP.WRITER) AS WRITER_TITLE
FROM
RESOURCE_PRICE RP
)
</sql>
<!-- 자재관리 목록 -->
<select id="getResourceMasterMngList" parameterType="map" resultType="map">
SELECT *
FROM(
SELECT T.*, ROW_NUMBER() OVER(ORDER BY REGDATE DESC) RNUM
FROM(
SELECT
T.*
FROM <include refid="resourceMasterMngBase"/> T
WHERE 1=1
<if test="search_year != null and search_year != ''">
AND T.REGDATE_YEAR_TITLE = #{search_year}
</if>
<if test="part_no != null and part_no != ''">
AND UPPER(T.PART_NO) LIKE UPPER('%${part_no}%')
</if>
<if test="part_name != null and part_name != ''">
AND UPPER(T.PART_NAME) LIKE UPPER('%${part_name}%')
</if>
<if test="search_resource_title != null and search_resource_title != ''">
AND T.RESOURCE_TITLE_ORG = #{search_resource_title}
</if>
<if test="search_product_title != null and search_product_title != ''">
AND T.PRODUCT_TITLE_ORG = #{search_product_title}
</if>
<if test="search_standard != null and search_standard != ''">
AND UPPER(T.STANDARD) LIKE UPPER('%${search_standard}%')
</if>
) T
) A WHERE 1=1
AND <![CDATA[ RNUM::integer <= #{PAGE_END}::integer ]]>
AND <![CDATA[ RNUM::integer >= #{PAGE_START}::integer]]>
</select>
<select id="getResourceMasterMngListCnt" 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="resourceMasterMngBase"/> T
WHERE 1=1
<if test="search_year != null and search_year != ''">
AND T.REGDATE_YEAR_TITLE = #{search_year}
</if>
<if test="search_resource_title != null and search_resource_title != ''">
AND T.RESOURCE_TITLE_ORG = #{search_resource_title}
</if>
<if test="search_product_title != null and search_product_title != ''">
AND T.PRODUCT_TITLE_ORG = #{search_product_title}
</if>
<if test="search_standard != null and search_standard != ''">
AND UPPER(T.STANDARD) LIKE UPPER('%${search_standard}%')
</if>
) T
)A WHERE 1=1
</select>
<select id="getResourceMasterMngInfo" parameterType="map" resultType="map">
SELECT
T.*
FROM <include refid="resourceMasterMngBase"/> T
WHERE 1=1
AND T.OBJID = #{OBJID}::numeric
</select>
<select id="getResourcePriceList" parameterType="map" resultType="map">
SELECT
T.*,
ROW_NUMBER() OVER(ORDER BY T.REGDATE) AS RNUM
FROM <include refid="resourcePriceBase"/> T
WHERE 1=1
AND T.PARENT_OBJID = #{OBJID}::numeric
ORDER BY T.REGDATE DESC
</select>
<!-- 중고관리 merge -->
<update id="mergeResourceMasterMng" parameterType="map">
INSERT INTO RESOURCE_MNG
(
OBJID,
PART_OBJID,
PART_NAME,
SPEC,
MATERIAL,
UNIT,
WEIGHT,
REGDATE,
WRITER
,THICKNESS
,WIDTH
,HEIGHT
,OUT_DIAMETER
,IN_DIAMETER
,LENGTH
)
VALUES
(
#{OBJID}::numeric,
(CASE WHEN #{part_objid} = '' THEN '0' ELSE #{part_objid} END),
#{part_name},
#{spec},
#{material},
#{unit},
#{weight},
NOW(),
#{WRITER}
,#{THICKNESS }
,#{WIDTH }
,#{HEIGHT }
,#{OUT_DIAMETER }
,#{IN_DIAMETER }
,#{LENGTH }
) ON CONFLICT (OBJID) DO
UPDATE
SET
PART_NAME = #{part_name},
SPEC = #{spec},
MATERIAL = #{material},
UNIT = #{unit},
WEIGHT = #{weight},
WRITER = #{WRITER}
,THICKNESS = #{THICKNESS }
,WIDTH = #{WIDTH }
,HEIGHT = #{HEIGHT }
,OUT_DIAMETER = #{OUT_DIAMETER }
,IN_DIAMETER = #{IN_DIAMETER }
,LENGTH = #{LENGTH }
</update>
<update id="mergeResourcePrice" parameterType="map">
INSERT INTO RESOURCE_PRICE
(
OBJID
,PARENT_OBJID
,UNIT_PRICE
,PERSON_PRICE
,AGENCY_PRICE
,REMARK
,APPLY_DATE
,REGDATE
,WRITER
)
VALUES
(
#{OBJID}::numeric
,#{PARENT_OBJID}::numeric
,#{UNIT_PRICE}
,#{PERSON_PRICE}
,#{AGENCY_PRICE}
,#{REMARK}
<choose>
<when test="APPLY_DATE != null and APPLY_DATE != ''">,#{APPLY_DATE}::TIMESTAMP</when>
<otherwise>,NOW()</otherwise>
</choose>
,NOW()
,#{WRITER}
)
</update>
<delete id="deleteResourceMasterMng" parameterType="map">
DELETE FROM RESOURCE_MNG WHERE OBJID = #{OBJID}::numeric
</delete>
<delete id="deleteResourcePrice" parameterType="map">
DELETE FROM RESOURCE_PRICE WHERE PARENT_OBJID = #{OBJID}::numeric
</delete>
</mapper>