first commit

This commit is contained in:
2026-02-06 23:26:59 +08:00
parent 0f3f1467b8
commit 6cf8248b2d
34 changed files with 2348 additions and 0 deletions
+140
View File
@@ -0,0 +1,140 @@
DELIMITER //
CREATE OR REPLACE PROCEDURE get_orgstructure(
IN p_type VARCHAR(20) -- 'person'/'user'/'role'
)
/*
Function : 配合 amis 的 transfer, 取得組織結構資料
Description: 用於選擇會議人員等表單
person - 獲取部門-人員資料(最常用)
user - 獲取角色-使用者資料(功能表使用)
role - 獲取角色資料
Build Date : 2023/07/19 (MariaDB 版本)
Modify History
Item Who Date Modify Docs
==== ========== ========== ================================================
1 Michael 2021/10/19 初始版本
2 Michael 2021/10/21 新增 type 參數
3 Developer 2023/07/19 轉換為 MariaDB 版本並優化
*/
BEGIN
DECLARE v_max INT;
DECLARE v_curr_id INT;
DECLARE v_group_id INT;
DECLARE v_next_group_id INT;
DECLARE v_json_data TEXT;
DECLARE v_footer TEXT;
DECLARE v_dept_name VARCHAR(100);
DECLARE v_emp_name VARCHAR(100);
DECLARE v_person_id VARCHAR(100);
DECLARE v_comm VARCHAR(1);
-- 創建臨時表存儲中間資料
DROP TEMPORARY TABLE IF EXISTS temp_org_data;
CREATE TEMPORARY TABLE temp_org_data (
xr_id VARCHAR(100),
x_id VARCHAR(100),
xr_name VARCHAR(100),
x_name VARCHAR(100),
group_id INT,
row_id INT
);
-- 根據類型插入資料
IF p_type = 'role' THEN
INSERT INTO temp_org_data (xr_id, x_id, xr_name, x_name, group_id, row_id)
SELECT
'*', roleid, '(全部角色)', CONCAT('(', roleid, ') ', rolename),
@rownum := @rownum + 1,
@rownum
FROM sys_roles, (SELECT @rownum := 0) r
WHERE roleid IS NOT NULL AND roleid <> ''
ORDER BY roleid;
ELSEIF p_type = 'user' THEN
INSERT INTO temp_org_data (xr_id, x_id, xr_name, x_name, group_id, row_id)
SELECT
'*', userid, '(全部使用者)', CONCAT('(', userid, ') ', username),
@rownum := @rownum + 1,
@rownum
FROM sys_users, (SELECT @rownum := 0) r
WHERE userid IS NOT NULL AND userid <> ''
ORDER BY userid;
ELSE -- 預設獲取部門-人員資料
INSERT INTO temp_org_data (xr_id, x_id, xr_name, x_name, group_id, row_id)
SELECT
bp.departmentid, bp.personid,
CONCAT('(', bp.departmentid, ') ', bm.departmentcname),
CONCAT('(', bp.personid, ') ', bp.personcname),
IF(@dept = bp.departmentid, @group, @group := @group + 1),
@rownum := @rownum + 1
FROM
(SELECT @rownum := 0, @group := 0, @dept := '') r,
basperson bp
LEFT JOIN basdepartment bm ON bp.departmentid = bm.departmentid
WHERE bp.departmentid IS NOT NULL AND bp.departmentid <> ''
ORDER BY bp.departmentid, bp.personid;
END IF;
-- 準備生成JSON資料
SELECT COUNT(*) INTO v_max FROM temp_org_data;
SELECT MIN(row_id) INTO v_curr_id FROM temp_org_data;
SET v_json_data = '';
SET v_comm = '';
-- 使用GROUP_CONCAT簡化JSON構建過程
SELECT
CONCAT(
'[',
GROUP_CONCAT(
IF(
group_id = 1 AND row_id > 1,
CONCAT(
' },\n',
' {\n',
' "label": "', xr_name, '",\n',
' "children": [\n',
' {\n',
' "label": "', x_name, '",\n',
' "value": "', x_id, '"\n',
' }', IF(row_id = v_max, '', ',')
),
IF(
group_id = 1,
CONCAT(
' {\n',
' "label": "', xr_name, '",\n',
' "children": [\n',
' {\n',
' "label": "', x_name, '",\n',
' "value": "', x_id, '"\n',
' }', IF(row_id = v_max, '', ',')
),
CONCAT(
' {\n',
' "label": "', x_name, '",\n',
' "value": "', x_id, '"\n',
' }', IF(row_id = v_max, '', ',')
)
)
)
ORDER BY row_id
SEPARATOR '\n'
),
'\n ]\n',
' }\n',
' ]'
) INTO v_json_data
FROM temp_org_data;
-- 返回結果
SELECT 0 AS code, 'ok' AS msg;
SELECT v_json_data AS jsoncode;
-- 臨時表會在會話結束時自動刪除
END //
DELIMITER ;