146 lines
5.4 KiB
Plaintext
146 lines
5.4 KiB
Plaintext
DELIMITER //
|
|
|
|
CREATE OR REPLACE PROCEDURE zen_create_json_prepare_detaildata(
|
|
IN p_uuid VARCHAR(100),
|
|
IN p_FunctionTag VARCHAR(100),
|
|
IN p_code_id VARCHAR(100),
|
|
IN p_detail_table VARCHAR(100),
|
|
IN p_detail_key VARCHAR(100),
|
|
IN p_detail_sort_fieldname VARCHAR(100),
|
|
IN p_query_type VARCHAR(1)
|
|
)
|
|
/*
|
|
功能 : amis Wizard 產生 json UI 的核心程式(每個 Component 有各自的 json UI 定義)
|
|
描述: 本段 sp 主要是設定 master-detail 中 detail 相關的 json 定義
|
|
建立日期 : 2023/12/20
|
|
|
|
修改歷史
|
|
項目 誰 日期 修改說明
|
|
==== ========== ========== ================================================
|
|
1 Michael 2023/12/20 根據 v1.0 重構
|
|
*/
|
|
BEGIN
|
|
DECLARE v_uuid_d VARCHAR(100);
|
|
DECLARE v_detail_fields VARCHAR(800);
|
|
DECLARE v_GridFooter_Sum VARCHAR(2000);
|
|
DECLARE v_is_footer_sum VARCHAR(1);
|
|
DECLARE v_grid_footer_sum VARCHAR(2000);
|
|
DECLARE v_first_formula_in INT;
|
|
DECLARE v_pos INT;
|
|
DECLARE v_imax INT;
|
|
DECLARE v_imin INT;
|
|
DECLARE v_crlf VARCHAR(2);
|
|
DECLARE v_lastsep VARCHAR(1);
|
|
DECLARE v_comps TEXT;
|
|
DECLARE v_db VARCHAR(200);
|
|
DECLARE v_ip VARCHAR(200);
|
|
DECLARE v_query_type_data TEXT;
|
|
DECLARE v_keyword_search VARCHAR(600);
|
|
DECLARE v_fieldname VARCHAR(100);
|
|
DECLARE v_rowid INT;
|
|
|
|
SET v_crlf = CONCAT(CHAR(13), CHAR(10));
|
|
SET v_ip = '${ls:base_ip}';
|
|
SET v_db = '${ls:base_db}';
|
|
|
|
/*
|
|
建立臨時表儲存 detail 欄位資訊
|
|
*/
|
|
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_default3 (
|
|
fieldname VARCHAR(100),
|
|
is_footer_sum VARCHAR(1),
|
|
rowid INT AUTO_INCREMENT PRIMARY KEY
|
|
);
|
|
|
|
TRUNCATE TABLE tmp_default3;
|
|
|
|
-- 取得 detail 的欄位名稱(要包含 pk 欄位)
|
|
INSERT INTO tmp_default3 (fieldname, is_footer_sum)
|
|
SELECT fieldname, is_footer_sum
|
|
FROM zen_fields
|
|
WHERE functiontag = p_functiontag and fieldblock >= 90 and fieldsh = 'Y'
|
|
ORDER BY seqno;
|
|
|
|
SET v_detail_fields = '';
|
|
SET v_GridFooter_Sum = '';
|
|
SET v_grid_footer_sum = '';
|
|
SET v_pos = 0;
|
|
|
|
SELECT MAX(rowid) INTO v_imax FROM tmp_default3;
|
|
SELECT MIN(rowid) INTO v_imin FROM tmp_default3;
|
|
|
|
WHILE v_imin <= v_imax DO
|
|
SELECT fieldname, is_footer_sum INTO v_fieldname, v_is_footer_sum
|
|
FROM tmp_default3 WHERE rowid = v_imin;
|
|
|
|
IF v_imin = v_imax THEN
|
|
SET v_lastsep = '';
|
|
ELSE
|
|
SET v_lastsep = ',';
|
|
END IF;
|
|
|
|
SET v_detail_fields = CONCAT(v_detail_fields, v_fieldname, v_lastsep);
|
|
|
|
-- 加入 grid_footer_sum 的判斷
|
|
SET v_pos = v_pos + 1;
|
|
IF v_is_footer_sum = 'Y' THEN
|
|
IF v_grid_footer_sum = '' THEN
|
|
SET v_grid_footer_sum = CONCAT(
|
|
' {', v_crlf,
|
|
' "type": "text",', v_crlf,
|
|
' "text": "合計",', v_crlf,
|
|
' "className": "right-10",', v_crlf,
|
|
' "colSpan": ', CAST(v_pos-1 AS CHAR), v_crlf,
|
|
' },', v_crlf,
|
|
' {', v_crlf,
|
|
' "type": "tpl",', v_crlf,
|
|
' "tpl": "${details|pick:',v_fieldname,'|sum}"', v_crlf,
|
|
' },', v_crlf);
|
|
ELSE
|
|
SET v_grid_footer_sum = CONCAT(v_grid_footer_sum,
|
|
' {', v_crlf,
|
|
' "type": "tpl",', v_crlf,
|
|
' "tpl": "${details|pick:',v_fieldname,'|sum}"', v_crlf,
|
|
' },', v_crlf);
|
|
END IF;
|
|
END IF;
|
|
|
|
SELECT MIN(rowid) INTO v_imin FROM tmp_default3 WHERE rowid > v_imin;
|
|
END WHILE;
|
|
|
|
DROP TEMPORARY TABLE IF EXISTS tmp_default3;
|
|
|
|
IF v_grid_footer_sum <> '' THEN
|
|
SET v_grid_footer_sum = CONCAT(SUBSTRING(v_grid_footer_sum,1,LENGTH(v_grid_footer_sum)-3), v_crlf);
|
|
|
|
SET v_GridFooter_Sum = CONCAT(',', v_crlf,
|
|
'"affixRow": [', v_crlf,
|
|
v_grid_footer_sum,
|
|
' ]', v_crlf);
|
|
END IF;
|
|
|
|
-- 將傳入的 json 寫入暫存表方便處理
|
|
INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'Sub_TableName',IFNULL(p_detail_table,''),NOW());
|
|
-- MD 中 uuid template 的 d 檔暫存檔(目前先 hard code) Michael 20240319
|
|
INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'Sub_TableName_x',REPLACE(IFNULL(p_detail_table,''),'_d','_x'),NOW());
|
|
INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'Sub_pk',IFNULL(p_detail_key,''),NOW());
|
|
INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'seqno',IFNULL(p_detail_sort_fieldname,''),NOW());
|
|
INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'GridFooter_Sum',IFNULL(v_GridFooter_Sum,''),NOW());
|
|
INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'detail_fields',IFNULL(v_detail_fields,''),NOW());
|
|
|
|
-- Master-detail 的 detail
|
|
IF SUBSTRING(p_code_id,1,12) = 'MasterDetail' THEN
|
|
SET v_uuid_d = UUID();
|
|
|
|
-- v2: 將主要的 dataset 整理後寫入
|
|
CALL zen_create_json_prepare_ds('D',v_uuid_d,p_FunctionTag);
|
|
|
|
-- v2: kernel compoment
|
|
CALL zen_create_json_kernel(v_uuid_d,p_FunctionTag,p_detail_table,p_detail_key,p_query_type,p_code_id);
|
|
|
|
-- v2: 寫入暫存表的3個變數(部分參考 final 的寫法)
|
|
CALL zen_create_json_detail(v_uuid_d,p_uuid,p_FunctionTag,p_code_id,p_detail_key);
|
|
END IF;
|
|
END //
|
|
|
|
DELIMITER ; |