ERP-node/backend/src/main/resources/mybatis/mapper/multilang.xml

310 lines
9.6 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="multilang">
<!-- 회사 목록 조회 -->
<select id="selectCompanies" resultType="map">
SELECT
company_code as "companyCode",
company_name as "companyName",
writer as "writer",
regdate as "regdate",
status as "status"
FROM company_mng
WHERE status = 'active' OR status IS NULL
ORDER BY company_code
</select>
<!-- 언어 마스터 조회 -->
<select id="selectLanguages" resultType="map">
SELECT
lang_code as "langCode",
lang_name as "langName",
lang_native as "langNative",
is_active as "isActive",
sort_order as "sortOrder",
created_date as "createdDate",
created_by as "createdBy",
updated_date as "updatedDate",
updated_by as "updatedBy"
FROM LANGUAGE_MASTER
ORDER BY sort_order, lang_code
</select>
<!-- 언어 추가 -->
<insert id="insertLanguage" parameterType="map">
INSERT INTO LANGUAGE_MASTER (
lang_code,
lang_name,
lang_native,
is_active,
sort_order,
created_date,
created_by,
updated_date,
updated_by
) VALUES (
#{langCode},
#{langName},
#{langNative},
#{isActive},
#{sortOrder},
now(),
#{createdBy},
now(),
#{updatedBy}
)
</insert>
<!-- 언어 수정 -->
<update id="updateLanguage" parameterType="map">
UPDATE LANGUAGE_MASTER
SET
lang_name = #{langName},
lang_native = #{langNative},
is_active = #{isActive},
sort_order = #{sortOrder},
updated_date = now(),
updated_by = #{updatedBy}
WHERE lang_code = #{langCode}
</update>
<!-- 언어 삭제 -->
<delete id="deleteLanguage" parameterType="map">
DELETE FROM LANGUAGE_MASTER
WHERE lang_code = #{langCode}
</delete>
<!-- 특정 언어 조회 -->
<select id="selectLanguageByCode" parameterType="map" resultType="map">
SELECT
lang_code as "langCode",
lang_name as "langName",
lang_native as "langNative",
is_active as "isActive",
sort_order as "sortOrder",
created_date as "createdDate",
created_by as "createdBy",
updated_date as "updatedDate",
updated_by as "updatedBy"
FROM LANGUAGE_MASTER
WHERE lang_code = #{langCode}
</select>
<!-- 언어 상태 업데이트 -->
<update id="updateLanguageStatus" parameterType="map">
UPDATE LANGUAGE_MASTER
SET
is_active = #{isActive},
updated_date = now(),
updated_by = 'system'
WHERE lang_code = #{langCode}
</update>
<!-- 회사별 다국어 키 목록 조회 -->
<select id="selectLangKeys" parameterType="map" resultType="map">
SELECT
key_id as "keyId",
company_code as "companyCode",
menu_name as "menuName",
lang_key as "langKey",
description,
is_active as "isActive",
created_date as "createdDate",
created_by as "createdBy",
updated_date as "updatedDate",
updated_by as "updatedBy"
FROM MULTI_LANG_KEY_MASTER
WHERE 1=1
<if test="companyCode != null and companyCode != ''">
AND company_code = #{companyCode}
</if>
<if test="searchText != null and searchText != ''">
AND (lang_key ILIKE '%' || #{searchText} || '%'
OR description ILIKE '%' || #{searchText} || '%'
OR menu_name ILIKE '%' || #{searchText} || '%')
</if>
ORDER BY company_code, menu_name, lang_key
</select>
<!-- 특정 키의 다국어 텍스트 조회 -->
<select id="selectLangTexts" parameterType="map" resultType="map">
SELECT
text_id as "textId",
key_id as "keyId",
lang_code as "langCode",
lang_text as "langText",
is_active as "isActive",
created_date as "createdDate",
created_by as "createdBy",
updated_date as "updatedDate",
updated_by as "updatedBy"
FROM MULTI_LANG_TEXT
WHERE key_id = #{keyId}::numeric
AND is_active = 'Y'
ORDER BY lang_code
</select>
<!-- 사용자별 다국어 텍스트 조회 -->
<select id="selectUserText" parameterType="map" resultType="map">
SELECT
t.lang_text as "langText"
FROM MULTI_LANG_KEY_MASTER km
JOIN MULTI_LANG_TEXT t ON km.key_id = t.key_id
WHERE km.company_code = #{companyCode}
AND km.menu_name = #{menuCode}
AND km.lang_key = #{langKey}
AND t.lang_code = #{userLang}
AND km.is_active = 'Y'
AND t.is_active = 'Y'
LIMIT 1
</select>
<!-- 다국어 키 생성 -->
<insert id="insertLangKey" parameterType="map">
INSERT INTO MULTI_LANG_KEY_MASTER (
company_code,
menu_name,
lang_key,
description,
is_active,
created_date,
created_by,
updated_date,
updated_by
) VALUES (
#{companyCode},
#{menuName},
#{langKey},
#{description},
'Y',
now(),
#{createdBy},
now(),
#{updatedBy}
)
<selectKey resultType="int" keyProperty="keyId" order="AFTER">
SELECT currval('multi_lang_key_master_key_id_seq')
</selectKey>
</insert>
<!-- 다국어 키 수정 -->
<update id="updateLangKey" parameterType="map">
UPDATE MULTI_LANG_KEY_MASTER
SET
company_code = #{companyCode},
menu_name = #{menuName},
lang_key = #{langKey},
description = #{description},
updated_date = now(),
updated_by = #{updatedBy}
WHERE key_id = #{keyId}::numeric
</update>
<!-- 다국어 키 삭제 (물리 삭제) -->
<delete id="deleteLangKey" parameterType="map">
DELETE FROM MULTI_LANG_KEY_MASTER
WHERE key_id = #{keyId}::numeric
</delete>
<!-- 특정 키 조회 -->
<select id="selectLangKeyById" parameterType="map" resultType="map">
SELECT
key_id as "keyId",
company_code as "companyCode",
menu_name as "menuName",
lang_key as "langKey",
description,
is_active as "isActive",
created_date as "createdDate",
created_by as "createdBy",
updated_date as "updatedDate",
updated_by as "updatedBy"
FROM MULTI_LANG_KEY_MASTER
WHERE key_id = #{keyId}::numeric
</select>
<!-- 회사와 언어키로 중복 체크 -->
<select id="selectLangKeyByCompanyAndKey" parameterType="map" resultType="map">
SELECT
key_id as "keyId",
company_code as "companyCode",
menu_name as "menuName",
lang_key as "langKey",
description,
is_active as "isActive"
FROM MULTI_LANG_KEY_MASTER
WHERE company_code = #{companyCode}
AND lang_key = #{langKey}
</select>
<!-- 회사와 언어키로 중복 체크 (자신 제외) -->
<select id="selectLangKeyByCompanyAndKeyExcludeSelf" parameterType="map" resultType="map">
SELECT
key_id as "keyId",
company_code as "companyCode",
menu_name as "menuName",
lang_key as "langKey",
description,
is_active as "isActive"
FROM MULTI_LANG_KEY_MASTER
WHERE company_code = #{companyCode}
AND lang_key = #{langKey}
AND key_id != #{keyId}::numeric
</select>
<!-- 다국어 키 상태 업데이트 -->
<update id="updateLangKeyStatus" parameterType="map">
UPDATE MULTI_LANG_KEY_MASTER
SET
is_active = #{isActive},
updated_date = now(),
updated_by = 'system'
WHERE key_id = #{keyId}::numeric
</update>
<!-- 다국어 텍스트 삭제 -->
<delete id="deleteLangTexts" parameterType="map">
DELETE FROM MULTI_LANG_TEXT
WHERE key_id = #{keyId}::numeric
</delete>
<!-- 다국어 텍스트 삽입 -->
<insert id="insertLangText" parameterType="map">
INSERT INTO MULTI_LANG_TEXT (
key_id,
lang_code,
lang_text,
is_active,
created_date,
created_by,
updated_date,
updated_by
) VALUES (
#{keyId}::numeric,
#{langCode},
#{langText},
'Y',
now(),
#{createdBy},
now(),
#{updatedBy}
)
</insert>
<!-- 특정 키의 다국어 텍스트 조회 -->
<select id="selectLangText" parameterType="map" resultType="map">
SELECT
t.lang_text as "langText"
FROM MULTI_LANG_TEXT t
JOIN MULTI_LANG_KEY_MASTER k ON t.key_id = k.key_id
WHERE k.company_code = #{companyCode}
AND k.lang_key = #{langKey}
AND t.lang_code = #{langCode}
AND t.is_active = 'Y'
AND k.is_active = 'Y'
</select>
</mapper>