Files
Omni_app.db/eip_getCalendar.txt
2026-02-06 23:26:59 +08:00

113 lines
3.4 KiB
Plaintext

DELIMITER //
CREATE OR REPLACE PROCEDURE eip_getCalendar (
IN p_functiontag VARCHAR(100),
IN p_userid VARCHAR(20),
IN p_start VARCHAR(30),
IN p_end VARCHAR(30)
)
/*
Function : 取得行事曆資料, 並考慮雲端時間差問題
Description: 使用 FullCalendar + Cloud 主機時的時間差處理方案
a. 在 FullCalendar+Vue 程式中使用 local 時間而非 UTC
b. Cloud Server 使用 UTC 時間,需進行時間調整
c. 使用 cloud_addtime 函數調整時間差 (目前設為減8小時)
Build Date : 2023/07/19 (MariaDB 版本)
call eip_getcalendar('eipm02','admin','2023-12-31T16:00:00.000Z','2026-12-30T16:00:00.000Z');
Modify History
Item Who Date Modify Docs
==== ========== ========== ================================================
1 Michael 2022/12/14 加入考慮 Azure 的時間差
2 Michael 2022/12/23 加入 FullCalendar 相關註解說明
3 Michael 2024/03/11 傳入參數由 tablename 改為 functiontag
4 Michael 2025/07/20 改寫為 MariaDB 並最佳化(ChatGPT+DeepSeek)
*/
BEGIN
-- 處理一下日期
SET p_start = STR_TO_DATE(p_start, '%Y-%m-%dT%H:%i:%s.000Z');
SET p_end = STR_TO_DATE(p_end, '%Y-%m-%dT%H:%i:%s.000Z');
-- 創建臨時表存儲結果
DROP TEMPORARY TABLE IF EXISTS tmp_calendar;
CREATE TEMPORARY TABLE tmp_calendar (
id VARCHAR(100),
title NVARCHAR(100),
start DATETIME,
end DATETIME,
create_at VARCHAR(20)
);
-- 根據不同的 functiontag 查詢不同的表
CASE p_functiontag
WHEN 'eipm15' THEN -- 會議室預約
INSERT INTO tmp_calendar
SELECT
uniqueno,
response_desc,
CONCAT(startdate, ' ', starttime),
CONCAT(end_date, ' ', endtime),
personid
FROM eipplace_fc
WHERE DATE(startdate) >= DATE(p_start)
AND DATE(end_date) <= DATE(p_end)
AND (personid = p_userid OR create_user = p_userid OR update_user = p_userid);
WHEN 'eipm13' THEN -- 會議通知
INSERT INTO tmp_calendar
SELECT
uniqueno,
meeting_title,
CONCAT(startdate, ' ', starttime),
CONCAT(end_date, ' ', end_time),
boss_personid
FROM eipmeetingrec_m
WHERE DATE(startdate) >= DATE(p_start)
AND DATE(end_date) <= DATE(p_end)
AND (boss_personid = p_userid OR create_user = p_userid OR update_user = p_userid);
WHEN 'eipm02' THEN -- 行程管理
INSERT INTO tmp_calendar
SELECT
uuid,
title,
start_time,
end_time,
personid
FROM eip_new_calendar
WHERE DATE(start_time) >= DATE(p_start)
AND DATE(end_time) <= DATE(p_end)
AND (create_user = p_userid OR personid = p_userid);
ELSE -- 默認處理 eip_core_calendar
INSERT INTO tmp_calendar
SELECT
id,
title,
start_time,
end_time,
personid
FROM eip_core_calendar
WHERE start_time >= p_start
AND end_time <= p_end
AND personid = p_userid;
END CASE;
-- dataset 0(因為只回傳 dataset = 1 一直會報錯 20251120
select 0, 'ok' as msg;
-- 處理雲端時間差並返回結果
SELECT
id,
title,
-- cloud_addtime(start) AS start,
start,
-- cloud_addtime(end) AS end,
end,
create_at
FROM tmp_calendar;
-- 自動清理臨時表 (MariaDB 會話結束時自動刪除)
END //
DELIMITER ;