first commit
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
DELIMITER //
|
||||
|
||||
CREATE OR REPLACE PROCEDURE get_gantt_data(
|
||||
IN p_projectid VARCHAR(100)
|
||||
)
|
||||
/*
|
||||
Function : 配合 amis 的擴充元件(gantt), 取得甘特圖資料
|
||||
Description: 獲取專案甘特圖資料,處理雲伺服器時間差問題
|
||||
Build Date : 2023/07/19 (MariaDB 版本)
|
||||
|
||||
Modify History
|
||||
Item Who Date Modify Docs
|
||||
==== ========== ========== ================================================
|
||||
1 Michael 2022/7/31 初始版本
|
||||
2 Michael 2022/12/14 加入 Azure 雲端時間差處理
|
||||
3 Michael 2025/07/20 改寫為 MariaDB 並最佳化(ChatGPT+DeepSeek)
|
||||
*/
|
||||
BEGIN
|
||||
-- 聲明變數
|
||||
DECLARE v_year1 INT;
|
||||
DECLARE v_start_date VARCHAR(10);
|
||||
|
||||
-- 設置默認起始日(去年1月1日)
|
||||
SET v_year1 = YEAR(CURDATE()) - 1;
|
||||
SET v_start_date = CONCAT(v_year1, '-01-01');
|
||||
|
||||
-- 創建臨時表存儲結果
|
||||
DROP TEMPORARY TABLE IF EXISTS tmp_gantt_data;
|
||||
CREATE TEMPORARY TABLE tmp_gantt_data (
|
||||
id VARCHAR(100),
|
||||
name VARCHAR(255),
|
||||
ower VARCHAR(100),
|
||||
per DECIMAL(5,2),
|
||||
type TINYINT,
|
||||
startTime DATE,
|
||||
endTime DATE,
|
||||
stoneTime DATE,
|
||||
top INT,
|
||||
`left` INT,
|
||||
widthChild INT,
|
||||
widthMe INT,
|
||||
isShow TINYINT,
|
||||
ROW_ID INT
|
||||
);
|
||||
|
||||
-- 獲取專案PBI資料
|
||||
INSERT INTO tmp_gantt_data
|
||||
SELECT
|
||||
pbiid AS id,
|
||||
pbi_title AS name, -- 項目名稱
|
||||
owner AS ower, -- 負責人
|
||||
pbi_rate AS per, -- 進度(完成率)
|
||||
1 AS type, -- 項目類型(1.PBI 2.mile stone 3.分組)
|
||||
startdate AS startTime,
|
||||
DATE_ADD(startdate, INTERVAL CAST(pbi_planworktime AS SIGNED) DAY) AS endTime,
|
||||
'2022-01-01' AS stoneTime, -- 里程碑日
|
||||
0 AS top, -- 初始top位置
|
||||
DATEDIFF(startdate, v_start_date) * 40 AS `left`,
|
||||
CAST(pbi_planworktime AS SIGNED) * 40 AS widthChild,
|
||||
CAST(pbi_planworktime AS SIGNED) * 40 AS widthMe,
|
||||
1 AS isShow,
|
||||
@row_num := @row_num + 1 AS ROW_ID
|
||||
FROM pms_pbi, (SELECT @row_num := 0) AS r
|
||||
WHERE projectid = p_projectid
|
||||
ORDER BY pbiid ASC;
|
||||
|
||||
-- 處理雲端時間差並返回結果
|
||||
SELECT
|
||||
id,
|
||||
name,
|
||||
ower,
|
||||
per,
|
||||
type,
|
||||
cloud_addtime(startTime) AS startTime,
|
||||
cloud_addtime(endTime) AS endTime,
|
||||
cloud_addtime(stoneTime) AS stoneTime,
|
||||
((ROW_ID-1) * 40) + 15 AS top,
|
||||
`left`,
|
||||
widthChild,
|
||||
widthMe,
|
||||
isShow
|
||||
FROM tmp_gantt_data;
|
||||
|
||||
-- 臨時表會在會話結束時自動刪除
|
||||
END //
|
||||
|
||||
DELIMITER ;
|
||||
Reference in New Issue
Block a user