- 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
384 lines
12 KiB
XML
384 lines
12 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="usedMng">
|
|
|
|
<sql id="usedMngBase">
|
|
(
|
|
SELECT
|
|
OBJID,
|
|
EQUIPMENT_NUMBER,
|
|
DIVISION,
|
|
BUYER,
|
|
PURCHASE_AMOUNT,
|
|
PURCHASE_DATE,
|
|
TO_CHAR(T.PURCHASE_DATE,'YYYY-MM-DD') AS PURCHASE_DATE_TITLE,
|
|
LOCATION,
|
|
UNIQUENESS,
|
|
WEIGHT,
|
|
SPAN,
|
|
LENGTH,
|
|
HEAD,
|
|
NECK_HEIGHT,
|
|
WHEEL_BASE,
|
|
WINDING,
|
|
RAIL,
|
|
WHEEL_SIZE,
|
|
TRANSVERSE,
|
|
BASE_PLATE,
|
|
PINION_GEAR,
|
|
ELECTRIC,
|
|
FRAME,
|
|
UPPER_LOWER_PLATE,
|
|
INNER_WIDTH,
|
|
SIDE_PLATE,
|
|
OUTER_WIDTH,
|
|
REPAIR_AMOUNT,
|
|
SALES_TARGET,
|
|
CASE
|
|
WHEN SALES_TARGET != '' AND SALES_TARGET IS NOT NULL
|
|
THEN (SELECT PROJECT_NO FROM ORDER_MGMT O WHERE 1=1 AND O.ORDER_MGMT_OBJID = T.SALES_TARGET::NUMERIC)
|
|
ELSE ''
|
|
END AS SALES_TARGET_TITLE,
|
|
SALES_AMOUNT,
|
|
INPUT_AMOUNT,
|
|
REGDATE,
|
|
TO_CHAR(T.REGDATE,'YYYY-MM-DD') AS REGDATE_TITLE,
|
|
TO_CHAR(T.REGDATE,'YYYY') AS REGDATE_YEAR_TITLE,
|
|
TO_CHAR(T.EDITDATE,'YYYY-MM-DD') AS EDITDATE_TITLE,
|
|
WRITER,
|
|
(SELECT DEPT_NAME||' '||USER_NAME FROM USER_INFO WHERE USER_ID = T.WRITER) AS WRITER_TITLE,
|
|
STATUS,
|
|
USE_YN,
|
|
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE 1 = 1 AND F.TARGET_OBJID = T.OBJID AND F.DOC_TYPE = 'USED_MNG_IMAGE' AND UPPER(F.STATUS) = 'ACTIVE') as USED_MNG_IMAGE_CNT,
|
|
(SELECT COUNT(1) FROM ATTACH_FILE_INFO F WHERE 1 = 1 AND F.TARGET_OBJID = T.OBJID AND F.DOC_TYPE = 'USED_MNG_REPAIR' AND UPPER(F.STATUS) = 'ACTIVE') as USED_MNG_REPAIR_CNT,
|
|
A.APPR_STATUS,
|
|
A.ROUTE_OBJID,
|
|
A.APPROVAL_OBJID
|
|
FROM
|
|
USED_MNG 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 ('USED_MNG')
|
|
) A
|
|
ON T.OBJID::numeric = A.TARGET_OBJID
|
|
)
|
|
</sql>
|
|
|
|
<!-- 중고관리 목록을 가져온다. -->
|
|
<select id="getUsedMngList" parameterType="map" resultType="map">
|
|
SELECT *
|
|
FROM(
|
|
SELECT T.*, ROW_NUMBER() OVER(ORDER BY REGDATE DESC) RNUM
|
|
FROM(
|
|
SELECT
|
|
T.*
|
|
,(SELECT O.CODE_NAME FROM COMM_CODE O WHERE O.CODE_ID = T.DIVISION AND O.PARENT_CODE_ID = #{DIVISION_CD}) AS DIVISION_TITLE
|
|
,(SELECT O.CODE_NAME FROM COMM_CODE O WHERE O.CODE_ID = T.LOCATION AND O.PARENT_CODE_ID = #{LOCATION_CD}) AS LOCATION_TITLE
|
|
,(SELECT O.CODE_NAME FROM COMM_CODE O WHERE O.CODE_ID = T.STATUS AND O.PARENT_CODE_ID = #{USED_MNG_STATUS_CD}) AS STATUS_TITLE
|
|
FROM <include refid="usedMngBase"/> T
|
|
WHERE 1=1
|
|
<if test="search_year != null and search_year != ''">
|
|
AND T.REGDATE_YEAR_TITLE = #{search_year}
|
|
</if>
|
|
<if test="search_division != null and search_division != ''">
|
|
AND T.DIVISION = #{search_division}
|
|
</if>
|
|
<if test="search_buyer != null and search_buyer != ''">
|
|
AND UPPER(BUYER) LIKE UPPER('%${search_buyer}%')
|
|
</if>
|
|
<if test="search_start_purchase_date != null and search_start_purchase_date != ''">
|
|
<![CDATA[ AND PURCHASE_DATE_TITLE >= #{search_start_purchase_date} ]]>
|
|
</if>
|
|
<if test="search_end_purchase_date != null and search_end_purchase_date != ''">
|
|
<![CDATA[ AND PURCHASE_DATE_TITLE <= #{search_end_purchase_date} ]]>
|
|
</if>
|
|
<if test="search_location != null and search_location != ''">
|
|
AND T.LOCATION = #{search_location}
|
|
</if>
|
|
<if test="search_start_reg_date != null and search_start_reg_date != ''">
|
|
<![CDATA[ AND T.REGDATE_TITLE >= #{search_start_reg_date} ]]>
|
|
</if>
|
|
<if test="search_end_reg_date != null and search_end_reg_date != ''">
|
|
<![CDATA[ AND T.REGDATE_TITLE <= #{search_end_reg_date} ]]>
|
|
</if>
|
|
) T
|
|
) A WHERE 1=1
|
|
AND <![CDATA[ RNUM::integer <= #{PAGE_END}::integer ]]>
|
|
AND <![CDATA[ RNUM::integer >= #{PAGE_START}::integer]]>
|
|
</select>
|
|
|
|
<select id="getUsedMngListCnt" parameterType="map" resultType="map">
|
|
SELECT
|
|
CEIL(TOTAL_CNT/#{COUNT_PER_PAGE})::numeric::integer AS MAX_PAGE_SIZE,
|
|
TOTAL_CNT::integer,
|
|
SUM_PURCHASE_AMOUNT
|
|
FROM (
|
|
SELECT
|
|
COUNT(1)::float TOTAL_CNT,
|
|
SUM(CAST_PURCHASE_AMOUNT::numeric) SUM_PURCHASE_AMOUNT
|
|
FROM(
|
|
SELECT
|
|
T.*
|
|
,(SELECT O.CODE_NAME FROM COMM_CODE O WHERE O.CODE_ID = T.DIVISION AND O.PARENT_CODE_ID = #{DIVISION_CD}) AS DIVISION_TITLE
|
|
,(SELECT O.CODE_NAME FROM COMM_CODE O WHERE O.CODE_ID = T.LOCATION AND O.PARENT_CODE_ID = #{LOCATION_CD}) AS LOCATION_TITLE
|
|
,(SELECT O.CODE_NAME FROM COMM_CODE O WHERE O.CODE_ID = T.STATUS AND O.PARENT_CODE_ID = #{USED_MNG_STATUS_CD}) AS STATUS_TITLE
|
|
,CASE
|
|
WHEN T.PURCHASE_AMOUNT != '' AND 0 <![CDATA[ < ]]> CAST (T.PURCHASE_AMOUNT AS INTEGER) AND T.PURCHASE_AMOUNT IS NOT NULL
|
|
THEN T.PURCHASE_AMOUNT
|
|
ELSE '0'
|
|
END CAST_PURCHASE_AMOUNT
|
|
FROM <include refid="usedMngBase"/> T
|
|
WHERE 1=1
|
|
<if test="search_year != null and search_year != ''">
|
|
AND T.REGDATE_YEAR_TITLE = #{search_year}
|
|
</if>
|
|
<if test="search_division != null and search_division != ''">
|
|
AND T.DIVISION = #{search_division}
|
|
</if>
|
|
<if test="search_buyer != null and search_buyer != ''">
|
|
AND UPPER(BUYER) LIKE UPPER('%${search_buyer}%')
|
|
</if>
|
|
<if test="search_start_purchase_date != null and search_start_purchase_date != ''">
|
|
<![CDATA[ AND PURCHASE_DATE_TITLE >= #{search_start_purchase_date} ]]>
|
|
</if>
|
|
<if test="search_end_purchase_date != null and search_end_purchase_date != ''">
|
|
<![CDATA[ AND PURCHASE_DATE_TITLE <= #{search_end_purchase_date} ]]>
|
|
</if>
|
|
<if test="search_location != null and search_location != ''">
|
|
AND T.LOCATION = #{search_location}
|
|
</if>
|
|
<if test="search_start_reg_date != null and search_start_reg_date != ''">
|
|
<![CDATA[ AND T.REGDATE_TITLE >= #{search_start_reg_date} ]]>
|
|
</if>
|
|
<if test="search_end_reg_date != null and search_end_reg_date != ''">
|
|
<![CDATA[ AND T.REGDATE_TITLE <= #{search_end_reg_date} ]]>
|
|
</if>
|
|
) T
|
|
)A WHERE 1=1
|
|
</select>
|
|
|
|
<select id="getUsedMngInfo" parameterType="map" resultType="map">
|
|
SELECT
|
|
T.*
|
|
,(SELECT O.CODE_NAME FROM COMM_CODE O WHERE O.CODE_ID = T.DIVISION AND O.PARENT_CODE_ID = #{DIVISION_CD}) AS DIVISION_TITLE
|
|
,(SELECT O.CODE_NAME FROM COMM_CODE O WHERE O.CODE_ID = T.LOCATION AND O.PARENT_CODE_ID = #{LOCATION_CD}) AS LOCATION_TITLE
|
|
,(SELECT O.CODE_NAME FROM COMM_CODE O WHERE O.CODE_ID = T.STATUS AND O.PARENT_CODE_ID = #{USED_MNG_STATUS_CD}) AS STATUS_TITLE
|
|
FROM <include refid="usedMngBase"/> T
|
|
WHERE 1=1
|
|
AND T.OBJID = #{OBJID}::numeric
|
|
</select>
|
|
|
|
<!-- 중고관리 merge -->
|
|
<update id="mergeUsedMng" parameterType="map">
|
|
INSERT INTO USED_MNG
|
|
(
|
|
OBJID
|
|
,EQUIPMENT_NUMBER
|
|
,DIVISION
|
|
,BUYER
|
|
,PURCHASE_AMOUNT
|
|
<if test="PURCHASE_DATE != null and PURCHASE_DATE != ''">
|
|
,PURCHASE_DATE
|
|
</if>
|
|
,LOCATION
|
|
,UNIQUENESS
|
|
,WEIGHT
|
|
,SPAN
|
|
,LENGTH
|
|
,HEAD
|
|
,NECK_HEIGHT
|
|
,WHEEL_BASE
|
|
,WINDING
|
|
,RAIL
|
|
,WHEEL_SIZE
|
|
,TRANSVERSE
|
|
,BASE_PLATE
|
|
,PINION_GEAR
|
|
,ELECTRIC
|
|
,FRAME
|
|
,UPPER_LOWER_PLATE
|
|
,INNER_WIDTH
|
|
,SIDE_PLATE
|
|
,OUTER_WIDTH
|
|
,REPAIR_AMOUNT
|
|
,SALES_TARGET
|
|
,SALES_AMOUNT
|
|
,INPUT_AMOUNT
|
|
,REGDATE
|
|
,WRITER
|
|
,STATUS
|
|
,USE_YN
|
|
)
|
|
VALUES
|
|
(
|
|
#{OBJID}::numeric
|
|
,'UE-'||to_char(now(),'YYYY')||'-'||LPAD((select coalesce(substring(max(EQUIPMENT_NUMBER),9,3),'0')::numeric+1 from used_mng)::text, 3, '0')
|
|
,#{DIVISION}
|
|
,#{BUYER}
|
|
,#{PURCHASE_AMOUNT}
|
|
<if test="PURCHASE_DATE != null and PURCHASE_DATE != ''">
|
|
,#{PURCHASE_DATE}::TIMESTAMP
|
|
</if>
|
|
,#{LOCATION}
|
|
,#{UNIQUENESS}
|
|
,#{WEIGHT}
|
|
,#{SPAN}
|
|
,#{LENGTH}
|
|
,#{HEAD}
|
|
,#{NECK_HEIGHT}
|
|
,#{WHEEL_BASE}
|
|
,#{WINDING}
|
|
,#{RAIL}
|
|
,#{WHEEL_SIZE}
|
|
,#{TRANSVERSE}
|
|
,#{BASE_PLATE}
|
|
,#{PINION_GEAR}
|
|
,#{ELECTRIC}
|
|
,#{FRAME}
|
|
,#{UPPER_LOWER_PLATE}
|
|
,#{INNER_WIDTH}
|
|
,#{SIDE_PLATE}
|
|
,#{OUTER_WIDTH}
|
|
,#{REPAIR_AMOUNT}
|
|
,#{SALES_TARGET}
|
|
,#{SALES_AMOUNT}
|
|
,#{INPUT_AMOUNT}
|
|
,now()
|
|
,#{WRITER}
|
|
,(SELECT CODE_ID FROM COMM_CODE WHERE PARENT_CODE_ID = '0001488' AND CODE_NAME = '작성중')
|
|
,#{USE_YN}
|
|
) ON CONFLICT (OBJID) DO
|
|
|
|
UPDATE
|
|
SET
|
|
EQUIPMENT_NUMBER = #{EQUIPMENT_NUMBER},
|
|
DIVISION = #{DIVISION},
|
|
BUYER = #{BUYER},
|
|
PURCHASE_AMOUNT = #{PURCHASE_AMOUNT},
|
|
<if test="PURCHASE_DATE != null and PURCHASE_DATE != ''">
|
|
PURCHASE_DATE = #{PURCHASE_DATE}::TIMESTAMP,
|
|
</if>
|
|
LOCATION = #{LOCATION},
|
|
UNIQUENESS = #{UNIQUENESS},
|
|
WEIGHT = #{WEIGHT},
|
|
SPAN = #{SPAN},
|
|
LENGTH = #{LENGTH},
|
|
HEAD = #{HEAD},
|
|
NECK_HEIGHT = #{NECK_HEIGHT},
|
|
WHEEL_BASE = #{WHEEL_BASE},
|
|
WINDING = #{WINDING},
|
|
RAIL = #{RAIL},
|
|
WHEEL_SIZE = #{WHEEL_SIZE},
|
|
TRANSVERSE = #{TRANSVERSE},
|
|
BASE_PLATE = #{BASE_PLATE},
|
|
PINION_GEAR = #{PINION_GEAR},
|
|
ELECTRIC = #{ELECTRIC},
|
|
FRAME = #{FRAME},
|
|
UPPER_LOWER_PLATE = #{UPPER_LOWER_PLATE},
|
|
INNER_WIDTH = #{INNER_WIDTH},
|
|
SIDE_PLATE = #{SIDE_PLATE},
|
|
OUTER_WIDTH = #{OUTER_WIDTH},
|
|
REPAIR_AMOUNT = #{REPAIR_AMOUNT},
|
|
SALES_TARGET = #{SALES_TARGET},
|
|
SALES_AMOUNT = #{SALES_AMOUNT},
|
|
INPUT_AMOUNT = #{INPUT_AMOUNT},
|
|
WRITER = #{WRITER},
|
|
EDITDATE = now(),
|
|
STATUS = #{STATUS},
|
|
USE_YN = #{USE_YN}
|
|
</update>
|
|
|
|
<delete id="deleteUsedMng" parameterType="map">
|
|
DELETE FROM USED_MNG WHERE OBJID = #{OBJID}::numeric
|
|
</delete>
|
|
|
|
<select id="getUsedMngDashBoard" parameterType="map" resultType="map">
|
|
SELECT
|
|
T.DIVISION
|
|
,(SELECT O.CODE_NAME FROM COMM_CODE O WHERE O.CODE_ID = T.DIVISION AND O.PARENT_CODE_ID = #{DIVISION_CD}) AS DIVISION_TITLE
|
|
,SUM(PURCHASE_CNT::numeric) AS PURCHASE_CNT
|
|
,SUM(PURCHASE_AMOUNT::numeric) AS PURCHASE_AMOUNT
|
|
,SUM(REPAIR_AMOUNT::numeric) AS REPAIR_AMOUNT
|
|
,SUM(PURCHASE_AMOUNT::numeric+REPAIR_AMOUNT::numeric) AS SUM_AMOUNT
|
|
,SUM(SALES_CNT::numeric) AS SALES_CNT
|
|
,SUM(SALES_AMOUNT::numeric) AS SALES_AMOUNT
|
|
,(SUM(PURCHASE_CNT::numeric)-SUM(SALES_CNT::numeric)) AS HOLDING_CNT
|
|
FROM(
|
|
SELECT
|
|
T.DIVISION
|
|
,CASE
|
|
WHEN T.PURCHASE_AMOUNT != '' AND 0 <![CDATA[ < ]]> CAST (T.PURCHASE_AMOUNT AS INTEGER) AND T.PURCHASE_AMOUNT IS NOT NULL
|
|
THEN T.PURCHASE_AMOUNT
|
|
ELSE '0'
|
|
END PURCHASE_AMOUNT
|
|
,CASE
|
|
WHEN T.REPAIR_AMOUNT != '' AND 0 <![CDATA[ < ]]> CAST (T.REPAIR_AMOUNT AS INTEGER) AND T.REPAIR_AMOUNT IS NOT NULL
|
|
THEN T.REPAIR_AMOUNT
|
|
ELSE '0'
|
|
END REPAIR_AMOUNT
|
|
,CASE
|
|
WHEN T.SALES_AMOUNT != '' AND 0 <![CDATA[ < ]]> CAST (T.SALES_AMOUNT AS INTEGER) AND T.SALES_AMOUNT IS NOT NULL
|
|
THEN T.SALES_AMOUNT
|
|
ELSE '0'
|
|
END SALES_AMOUNT
|
|
,CASE
|
|
WHEN T.PURCHASE_AMOUNT != '' AND 0 <![CDATA[ < ]]> CAST (T.PURCHASE_AMOUNT AS INTEGER) AND T.PURCHASE_AMOUNT IS NOT NULL
|
|
THEN 1
|
|
ELSE '0'
|
|
END PURCHASE_CNT
|
|
,CASE
|
|
WHEN T.REPAIR_AMOUNT != '' AND 0 <![CDATA[ < ]]> CAST (T.REPAIR_AMOUNT AS INTEGER) AND T.REPAIR_AMOUNT IS NOT NULL
|
|
THEN 1
|
|
ELSE '0'
|
|
END REPAIR_CNT
|
|
,CASE
|
|
WHEN T.SALES_AMOUNT != '' AND 0 <![CDATA[ < ]]> CAST (T.SALES_AMOUNT AS INTEGER) AND T.SALES_AMOUNT IS NOT NULL
|
|
THEN 1
|
|
ELSE '0'
|
|
END SALES_CNT
|
|
FROM <include refid="usedMngBase"/> T
|
|
WHERE 1=1
|
|
<if test="search_year != null and search_year != ''">
|
|
AND T.REGDATE_YEAR_TITLE = #{search_year}
|
|
</if>
|
|
) T
|
|
WHERE 1=1
|
|
GROUP BY T.DIVISION
|
|
</select>
|
|
|
|
</mapper> |