first commit
This commit is contained in:
@@ -0,0 +1,234 @@
|
||||
DELIMITER //
|
||||
|
||||
CREATE OR REPLACE PROCEDURE zen_create_json_prepare(
|
||||
IN p_uuid VARCHAR(100),
|
||||
IN p_FunctionTag VARCHAR(100),
|
||||
IN p_code_id VARCHAR(100), -- Wizard Template Id
|
||||
IN p_is_extend VARCHAR(1),
|
||||
IN p_query_type VARCHAR(1),
|
||||
IN p_funcName VARCHAR(100),
|
||||
IN p_tblName VARCHAR(100),
|
||||
IN p_pk VARCHAR(100),
|
||||
IN p_database VARCHAR(100),
|
||||
IN p_op_width INT
|
||||
)
|
||||
/*
|
||||
功能 : amis Wizard 產生 json UI 的欲處理核心程式(通常是非 Fields 的相關獨立設定)
|
||||
描述: 本段 sp 主要是
|
||||
1.修正原 Wizard 資料表中的預設值
|
||||
2.設定一些 button, picker 及預設值的 json 定義
|
||||
建立日期 : 2023/12/22
|
||||
|
||||
修改歷史
|
||||
項目 誰 日期 修改說明
|
||||
==== ========== ========== ================================================
|
||||
1 Michael 2023/12/22 根據 v1.0 重構
|
||||
*/
|
||||
BEGIN
|
||||
DECLARE v_ip VARCHAR(100);
|
||||
DECLARE v_db VARCHAR(100);
|
||||
DECLARE v_ext_button_U TEXT;
|
||||
DECLARE v_ext_button_I TEXT;
|
||||
DECLARE v_frequency VARCHAR(100);
|
||||
DECLARE v_menuid VARCHAR(100);
|
||||
DECLARE v_imax INT;
|
||||
DECLARE v_y INT;
|
||||
DECLARE v_cnt INT;
|
||||
DECLARE v_imin INT;
|
||||
DECLARE v_picker_datas TEXT;
|
||||
DECLARE v_fieldnames VARCHAR(600);
|
||||
DECLARE v_FieldName VARCHAR(100);
|
||||
DECLARE v_iscolumnmatch VARCHAR(1);
|
||||
DECLARE v_crlf VARCHAR(2);
|
||||
DECLARE v_lastsep VARCHAR(1);
|
||||
DECLARE v_fielddefault VARCHAR(200);
|
||||
DECLARE v_insert_default VARCHAR(800);
|
||||
DECLARE v_update_default VARCHAR(800);
|
||||
DECLARE v_detail_fields VARCHAR(800);
|
||||
DECLARE v_formsize VARCHAR(100);
|
||||
DECLARE v_formsize_drawer VARCHAR(100); -- 專門給 Drawer 用的 Form Size(要配合修改 Template), 但是舊資料就有點麻煩 20230521
|
||||
|
||||
-- 通用寫法
|
||||
SET v_crlf = CONCAT(CHAR(13), CHAR(10));
|
||||
SET v_ip = '${ls:base_ip}';
|
||||
SET v_db = '${ls:base_db}';
|
||||
|
||||
/*
|
||||
待處理, 持續整理中
|
||||
*/
|
||||
INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'is_query_header',CASE WHEN p_query_type = 'C' THEN 'true' ELSE 'false' END,NOW());
|
||||
-- 簡單的固定變數也統一寫入暫存
|
||||
INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'functionName',p_funcName,NOW());
|
||||
INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'TableName',p_tblName,NOW());
|
||||
INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'pk',p_pk,NOW());
|
||||
INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'database',p_database,NOW());
|
||||
INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'ip-port',v_ip,NOW());
|
||||
INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'op-width',CAST(p_op_width AS CHAR),NOW());
|
||||
-- transfer 的 initApi(在 trans 中累加即可)
|
||||
INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'init_api_org','',NOW());
|
||||
-- 配合 md uuid 的 template 使用
|
||||
INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'TableName:4_6',SUBSTRING(p_tblName,4,6),NOW());
|
||||
|
||||
/*
|
||||
擴充 button 處理 2022-2-5(可能有多個 button), 分為2個位置
|
||||
get data from zen_function_button
|
||||
*/
|
||||
SELECT zen_get_ext_button(p_FunctionTag,'U',v_ip,v_db) INTO v_ext_button_U;
|
||||
SELECT zen_get_ext_button(p_FunctionTag,'I',v_ip,v_db) INTO v_ext_button_I;
|
||||
|
||||
-- 取得週期性的欄位名稱
|
||||
SELECT FieldName INTO v_frequency
|
||||
FROM zen_fields WHERE FunctionTag = p_FunctionTag AND fieldObject = 'cycle-frequency';
|
||||
|
||||
-- 如果是擴充表單, 權限同主 Form (要加判斷)
|
||||
IF p_is_extend = 'Y' THEN
|
||||
IF LOCATE('_',p_FunctionTag) > 0 THEN
|
||||
SET v_menuid = SUBSTRING(p_FunctionTag,1,LOCATE('_',p_FunctionTag)-1);
|
||||
ELSE
|
||||
SET v_menuid = p_FunctionTag;
|
||||
END IF;
|
||||
ELSE
|
||||
SET v_menuid = p_FunctionTag;
|
||||
END IF;
|
||||
|
||||
-- 將傳入的 json 寫入暫存表方便處理
|
||||
INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'ext_button_U',v_ext_button_U,NOW());
|
||||
INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'ext_button_I',v_ext_button_I,NOW());
|
||||
INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'frequency',IFNULL(v_frequency,''),NOW());
|
||||
INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'menuid',v_menuid,NOW());
|
||||
|
||||
/*
|
||||
picker 的 data
|
||||
*/
|
||||
SET v_y = 0;
|
||||
SET v_imax = 0;
|
||||
SET v_picker_datas = '';
|
||||
SET v_lastsep = '';
|
||||
SET v_cnt = 0;
|
||||
|
||||
SELECT MIN(rowid) INTO v_y FROM zen_wizard_jsondata WHERE uuid = p_uuid;
|
||||
SELECT MAX(rowid) INTO v_imax FROM zen_wizard_jsondata WHERE uuid = p_uuid;
|
||||
|
||||
WHILE v_y <= v_imax DO
|
||||
SELECT FieldName,iscolumnmatch INTO v_FieldName,v_iscolumnmatch
|
||||
FROM zen_wizard_jsondata WHERE uuid = p_uuid AND rowid = v_y;
|
||||
|
||||
IF v_y = v_imax THEN
|
||||
SET v_lastsep = '';
|
||||
ELSE
|
||||
SET v_lastsep = ',';
|
||||
END IF;
|
||||
|
||||
-- 組出 @picker_datas@
|
||||
IF v_iscolumnmatch = 'Y' THEN
|
||||
SET v_picker_datas = CONCAT(v_picker_datas, ' "', v_FieldName, '": "${', v_FieldName, '.', v_FieldName, ' === null | isTrue: ', v_FieldName, ' : ', v_FieldName, '.', v_FieldName, '}"', v_lastsep, v_crlf);
|
||||
SET v_cnt = v_cnt + 1;
|
||||
ELSE
|
||||
SET v_picker_datas = CONCAT(v_picker_datas, ' "', v_FieldName, '": "${', v_FieldName, '}"', v_lastsep, v_crlf);
|
||||
END IF;
|
||||
|
||||
SET v_y = v_y + 1;
|
||||
END WHILE;
|
||||
|
||||
IF v_cnt > 0 THEN
|
||||
SET v_picker_datas = CONCAT(' "data": {', v_crlf,
|
||||
CASE WHEN LOCATE('MasterDetail',p_code_id) > 0 THEN ' "details": "${details}",' ELSE '' END, v_crlf,
|
||||
v_picker_datas,
|
||||
' },', v_crlf);
|
||||
END IF;
|
||||
|
||||
INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'picker_datas',v_picker_datas,NOW());
|
||||
|
||||
/*
|
||||
處理 default 的 data domain (@insert_default@, @update_default@)
|
||||
|
||||
預設值第一碼 Michael 20230909
|
||||
@ 目前無任何設定, 我已經忘了原先是要定義甚麼
|
||||
$ 表示設定值是 ${ls:userid}
|
||||
# 新增, 專門配合 picker 多回傳欄位用, 也要加 ${ls:userid} Michael 20230901
|
||||
*/
|
||||
SET v_insert_default = '';
|
||||
SET v_update_default = '';
|
||||
SET v_lastsep = '';
|
||||
|
||||
-- 處理 $ 開頭的預設值
|
||||
SELECT MAX(rowid) INTO v_imax FROM zen_wizard_jsondata
|
||||
WHERE uuid = p_uuid AND IFNULL(fielddefault,'') <> '' AND SUBSTRING(fielddefault,1,1) <> '@' AND LOCATE('$',fielddefault) > 0;
|
||||
|
||||
SELECT MIN(rowid) INTO v_imin FROM zen_wizard_jsondata
|
||||
WHERE uuid = p_uuid AND IFNULL(fielddefault,'') <> '' AND SUBSTRING(fielddefault,1,1) <> '@' AND LOCATE('$',fielddefault) > 0;
|
||||
|
||||
WHILE v_imin <= v_imax DO
|
||||
SELECT fieldname,fielddefault INTO v_FieldName,v_fielddefault
|
||||
FROM zen_wizard_jsondata
|
||||
WHERE uuid = p_uuid AND IFNULL(fielddefault,'') <> '' AND SUBSTRING(fielddefault,1,1) <> '@' AND LOCATE('$',fielddefault) > 0 AND rowid = v_imin;
|
||||
|
||||
IF v_imin = v_imax THEN
|
||||
SET v_lastsep = '';
|
||||
ELSE
|
||||
SET v_lastsep = ',';
|
||||
END IF;
|
||||
|
||||
SET v_insert_default = CONCAT(v_insert_default, '"', v_FieldName, '": "${', SUBSTRING(v_fielddefault,2,100), '}"', v_lastsep, v_crlf);
|
||||
|
||||
SELECT MIN(rowid) INTO v_imin FROM zen_wizard_jsondata
|
||||
WHERE uuid = p_uuid AND IFNULL(fielddefault,'') <> '' AND SUBSTRING(fielddefault,1,1) <> '@' AND LOCATE('$',fielddefault) > 0 AND rowid > v_imin;
|
||||
END WHILE;
|
||||
|
||||
IF v_insert_default <> '' THEN
|
||||
SET v_insert_default = CONCAT('"data": { ', v_crlf, v_insert_default, ' },');
|
||||
END IF;
|
||||
|
||||
-- 處理 @ 開頭的預設值
|
||||
SELECT MAX(rowid) INTO v_imax FROM zen_wizard_jsondata
|
||||
WHERE uuid = p_uuid AND IFNULL(fielddefault,'') <> '' AND SUBSTRING(fielddefault,1,1) = '@';
|
||||
|
||||
SELECT MIN(rowid) INTO v_imin FROM zen_wizard_jsondata
|
||||
WHERE uuid = p_uuid AND IFNULL(fielddefault,'') <> '' AND SUBSTRING(fielddefault,1,1) = '@';
|
||||
|
||||
WHILE v_imin <= v_imax DO
|
||||
SELECT fieldname,fielddefault INTO v_FieldName,v_fielddefault
|
||||
FROM zen_wizard_jsondata
|
||||
WHERE uuid = p_uuid AND IFNULL(fielddefault,'') <> '' AND SUBSTRING(fielddefault,1,1) = '@' AND rowid = v_imin;
|
||||
|
||||
IF v_imin = v_imax THEN
|
||||
SET v_lastsep = '';
|
||||
ELSE
|
||||
SET v_lastsep = ',';
|
||||
END IF;
|
||||
|
||||
SET v_update_default = CONCAT(v_update_default, '"', v_FieldName, '": "${', SUBSTRING(v_fielddefault,3,100), '}"', v_lastsep, v_crlf);
|
||||
|
||||
SELECT MIN(rowid) INTO v_imin FROM zen_wizard_jsondata
|
||||
WHERE uuid = p_uuid AND IFNULL(fielddefault,'') <> '' AND SUBSTRING(fielddefault,1,1) = '@' AND rowid > v_imin;
|
||||
END WHILE;
|
||||
|
||||
IF v_update_default <> '' THEN
|
||||
SET v_update_default = CONCAT('"data": { ', v_crlf, v_update_default, ' },');
|
||||
END IF;
|
||||
|
||||
INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'insert_default',v_insert_default,NOW());
|
||||
INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'update_default',v_update_default,NOW());
|
||||
|
||||
/*
|
||||
以下是幾個一般設定, 就不獨立開 proc 寫 code 了
|
||||
*/
|
||||
SELECT COUNT(*) INTO v_imax FROM zen_wizard_jsondata WHERE uuid = p_uuid;
|
||||
-- form size (xs,sm,md,lg,xl,full) Dialog 才有 full
|
||||
-- drawer 抽屉尺寸((xs,sm,md,lg,xl)
|
||||
IF v_imax <= 6 THEN
|
||||
SET v_formsize = 'md';
|
||||
SET v_formsize_drawer = 'md';
|
||||
ELSEIF v_imax < 25 THEN
|
||||
SET v_formsize = 'lg';
|
||||
SET v_formsize_drawer = 'lg';
|
||||
ELSE
|
||||
SET v_formsize = 'full';
|
||||
SET v_formsize_drawer = 'xl';
|
||||
END IF;
|
||||
|
||||
INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'formsize',v_formsize,NOW());
|
||||
INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'formsize_drawer',v_formsize_drawer,NOW());
|
||||
END //
|
||||
|
||||
DELIMITER ;
|
||||
Reference in New Issue
Block a user