first commit

This commit is contained in:
DATAEXPRESS\4734
2026-02-06 14:44:08 +08:00
commit 3b3e190726
42 changed files with 5385 additions and 0 deletions
+146
View File
@@ -0,0 +1,146 @@
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 ;