DELIMITER // CREATE OR REPLACE PROCEDURE sys_dashboard( IN p_token VARCHAR(100) ) /* Description: 取得首頁的幾個統計用數字 今日行事曆: 待簽核表單: 待辦事項: -- 協同工作單 執行中專案: -- 本 Sprint 未完成的 PBI 未結案留言單: Build Date : 2023/02/14 Modify History Item Who Date Modify Docs ==== ========== ========== ================================================ 1 Michael 2023/02/14 Init 2 Michael 2025/07/20 改寫為 MariaDB 並最佳化(ChatGPT+DeepSeek) */ BEGIN DECLARE v_userid VARCHAR(100); DECLARE v_cnt1 INT DEFAULT 0; DECLARE v_cnt2 INT DEFAULT 0; DECLARE v_cnt3 INT DEFAULT 0; DECLARE v_cnt4 INT DEFAULT 0; DECLARE v_cnt5 INT DEFAULT 0; -- 將 token 換成 userid SELECT userid INTO v_userid FROM sys_users WHERE token = p_token LIMIT 1; -- 今日行事曆(參考 sp=eip_getCalendar) SELECT COUNT(*) INTO v_cnt1 FROM eip_core_calendar WHERE DATE(start_time) = CURDATE() AND personid = v_userid; -- 待簽核表單(參考 sp=bpm_sign_todo) SELECT COUNT(*) INTO v_cnt2 FROM bpm_flow_sign a JOIN bpm_list b ON a.flow_id = b.flow_id JOIN basperson p ON a.signerid = p.personid WHERE a.sign_status = 'P' AND IFNULL(a.assign_to,'') = 'Y' AND a.signerid = v_userid; -- 待辦事項(建議是前後3天) SELECT COUNT(*) INTO v_cnt3 FROM crmassign_m m WHERE DATE(m.predictdate) BETWEEN DATE_SUB(CURDATE(), INTERVAL 3 DAY) AND DATE_ADD(CURDATE(), INTERVAL 3 DAY) AND (m.personid2 = v_userid OR m.personid3 = v_userid); -- 執行中 PBI(本 sprint 尚未完成, ) SELECT COUNT(*) INTO v_cnt4 FROM pms_pbi p JOIN pms_sprint s ON p.sprintid = s.sprintid WHERE DATE(p.startdate) BETWEEN DATE_SUB(CURDATE(), INTERVAL 3 DAY) AND DATE_ADD(CURDATE(), INTERVAL 3 DAY) AND CURDATE() BETWEEN DATE(s.sprint_startdate) AND DATE(s.sprint_enddate) AND (p.controller = v_userid OR p.tester = v_userid); -- 未結案留言單(規格要調整, 先暫緩) -- 回傳 dataset SELECT 0 AS code, 'ok' AS msg; SELECT v_cnt1 AS dashboard1, v_cnt2 AS dashboard2, v_cnt3 AS dashboard3, v_cnt4 AS dashboard4, v_cnt5 AS dashboard5; END // DELIMITER ;