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

233 lines
7.1 KiB
XML
Raw Normal View History

2025-08-21 09:41:46 +09:00
<?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="menu">
<!-- 사용자가 사용하는 화면에서 보여지는 메뉴 목록을 가져온다. -->
<select id="selectUserViewMenuList" parameterType="map" resultType="map">
WITH RECURSIVE v_menu(
LEVEL,
MENU_TYPE,
OBJID,
PARENT_OBJ_ID,
MENU_NAME_KOR,
MENU_URL,
MENU_DESC,
SEQ,
WRITER,
REGDATE,
STATUS,
PATH,
CYCLE
) AS (
SELECT
1 AS LEVEL,
MENU_TYPE,
OBJID::numeric,
PARENT_OBJ_ID,
MENU_NAME_KOR,
MENU_URL,
MENU_DESC,
SEQ,
WRITER,
REGDATE,
STATUS,
ARRAY [MENU.OBJID],
FALSE
FROM MENU_INFO MENU
WHERE PARENT_OBJ_ID=0
AND MENU_TYPE=1
UNION ALL
SELECT
V_MENU.LEVEL+1,
MENU_SUB.MENU_TYPE,
MENU_SUB.OBJID,
MENU_SUB.PARENT_OBJ_ID,
MENU_SUB.MENU_NAME_KOR,
MENU_SUB.MENU_URL,
MENU_SUB.MENU_DESC,
MENU_SUB.SEQ,
MENU_SUB.WRITER,
MENU_SUB.REGDATE,
MENU_SUB.STATUS,
PATH||MENU_SUB.SEQ::numeric,
MENU_SUB.OBJID = ANY(PATH)
FROM MENU_INFO MENU_SUB
JOIN
V_MENU
ON
MENU_SUB.PARENT_OBJ_ID = V_MENU.OBJID
WHERE 1=1
AND UPPER(MENU_SUB.STATUS) = 'ACTIVE'
)
SELECT
LEVEL AS LEV,
case MENU_TYPE
when '0' then 'admin'
when '1' then 'user'
else ''
END AS MENU_TYPE,
OBJID AS menuObjId,
PARENT_OBJ_ID AS parentObjId,
MENU_NAME_KOR AS menuName,
MENU_NAME_KOR AS menuNameEn,
LPAD(' ', 3*(LEVEL-1))||MENU_NAME_KOR AS lpadMenuName,
MENU_URL AS url,
MENU_DESC AS description,
SEQ AS seq,
WRITER,
TO_CHAR(REGDATE,'YYYY-MM-DD') AS regDate,
STATUS AS status,
case UPPER(STATUS)
when 'ACTIVE' then '활성화'
when 'INACTIVE' then '비활성화'
else ''
END AS statusTitle,
B.CREATE_AUTH_CNT,
B.READ_AUTH_CNT,
B.UPDATE_AUTH_CNT,
B.DELETE_AUTH_CNT
FROM
v_menu A,
(
SELECT
B.MENU_OBJID,
SUM(CASE B.CREATE_YN WHEN 'Y' THEN 1 ELSE 0 END) CREATE_AUTH_CNT,
SUM(CASE B.READ_YN WHEN 'Y' THEN 1 ELSE 0 END) READ_AUTH_CNT,
SUM(CASE B.UPDATE_YN WHEN 'Y' THEN 1 ELSE 0 END) UPDATE_AUTH_CNT,
SUM(CASE B.DELETE_YN WHEN 'Y' THEN 1 ELSE 0 END) DELETE_AUTH_CNT
FROM
REL_MENU_AUTH B,
AUTHORITY_MASTER C
WHERE
1 = 1
AND B.AUTH_OBJID = C.OBJID
AND C.OBJID IN (
SELECT
MASTER_OBJID
FROM
AUTHORITY_SUB_USER
WHERE
USER_ID = #{userId}
)
GROUP BY
B.MENU_OBJID
) B
WHERE 1=1
AND a.objid = b.menu_objid
AND A.seq > 1
ORDER BY PATH,SEQ
</select>
<!-- 관리자 메뉴 목록 조회 -->
<select id="selectAdminMenuList" parameterType="map" resultType="map">
SELECT
OBJID AS menuObjId,
PARENT_OBJ_ID AS parentObjId,
MENU_NAME_KOR AS menuName,
MENU_NAME_KOR AS menuNameEn,
MENU_URL AS url,
MENU_DESC AS description,
SEQ AS seq,
STATUS AS status,
MENU_TYPE AS menuType
FROM MENU_INFO
WHERE MENU_TYPE = '0'
AND UPPER(STATUS) = 'ACTIVE'
ORDER BY SEQ
</select>
<!-- 사용자 메뉴 권한 확인 -->
<select id="checkUserMenuAuth" parameterType="map" resultType="map">
SELECT
COUNT(*) AS authCount,
SUM(CASE B.READ_YN WHEN 'Y' THEN 1 ELSE 0 END) AS readAuth,
SUM(CASE B.CREATE_YN WHEN 'Y' THEN 1 ELSE 0 END) AS createAuth,
SUM(CASE B.UPDATE_YN WHEN 'Y' THEN 1 ELSE 0 END) AS updateAuth,
SUM(CASE B.DELETE_YN WHEN 'Y' THEN 1 ELSE 0 END) AS deleteAuth
FROM
REL_MENU_AUTH B,
AUTHORITY_MASTER C,
MENU_INFO M
WHERE
1 = 1
AND B.AUTH_OBJID = C.OBJID
AND B.MENU_OBJID = M.OBJID
AND M.MENU_URL = #{menuUrl}
AND C.OBJID IN (
SELECT
MASTER_OBJID
FROM
AUTHORITY_SUB_USER
WHERE
USER_ID = #{userId}
)
</select>
<!-- 메뉴 정보 조회 -->
<select id="selectMenuInfo" parameterType="map" resultType="map">
SELECT
OBJID AS menuObjId,
PARENT_OBJ_ID AS parentObjId,
MENU_NAME_KOR AS menuName,
MENU_NAME_KOR AS menuNameEn,
MENU_URL AS url,
MENU_DESC AS description,
SEQ AS seq,
STATUS AS status,
MENU_TYPE AS menuType,
TO_CHAR(REGDATE,'YYYY-MM-DD HH24:MI:SS') AS regDate,
WRITER
FROM MENU_INFO
WHERE OBJID = #{menuObjId}
</select>
<!-- 메뉴 등록 -->
<insert id="insertMenu" parameterType="map">
INSERT INTO MENU_INFO (
OBJID,
PARENT_OBJ_ID,
MENU_NAME_KOR,
MENU_URL,
MENU_DESC,
SEQ,
STATUS,
MENU_TYPE,
REGDATE,
WRITER
) VALUES (
nextval('seq_menu_info'),
#{parentObjId},
#{menuName},
#{url},
#{description},
#{seq},
#{status},
#{menuType},
now(),
#{writer}
)
</insert>
<!-- 메뉴 수정 -->
<update id="updateMenu" parameterType="map">
UPDATE MENU_INFO SET
PARENT_OBJ_ID = #{parentObjId},
MENU_NAME_KOR = #{menuName},
MENU_URL = #{url},
MENU_DESC = #{description},
SEQ = #{seq},
STATUS = #{status},
MENU_TYPE = #{menuType}
WHERE OBJID = #{menuObjId}
</update>
<!-- 메뉴 삭제 -->
<delete id="deleteMenu" parameterType="map">
DELETE FROM MENU_INFO
WHERE OBJID = #{menuObjId}
</delete>
</mapper>