计算项预加工的主调用存储过程。

1 调用格式

p_dn_ci (
 v_app      varchar (50),
 v_ci_or_cf varchar (100)
)
参数说明:

v_app:字符串类型;乐创者的应用名。因为1个乐创者服务支持多个应用,所以需要指定1个明确的应用。

v_ci_or_cf:字符串类型;计算项名称或字段名称(“计算项”或“计算项.字段”)。如果是“计算项”的名称,那么就计算这个计算项;如果是“计算项.字段”,则就专门计算该计算项内的某1个字段。

2 实现原理

本存储过程是lczWord在进行计算项预加工的主调用过程。

处理过程大致是:

1)分析参数 v_ci_or_cf,为 v_ci 和 v_cf 其中一个设置值;

2)记录状态,前置判定,直接调用存储过程的情况;

3)调用核心存储过程 p_dn_ci_compute:

CALL p_dn_ci_compute(
            v_app, v_ci,v_cf,
            i_count_field,
            v_err,v_log
        );

4)判定结果、记录状态。

3 存储过程

存储过程如下:

CREATE DEFINER=`root`@`%` PROCEDURE `p_dn_ci`(v_App VARCHAR (50),-- 应用
    v_CI_or_CF VARCHAR (100))
LABEL1:BEGIN
    DECLARE i_count_field INT (2) DEFAULT 0;

    DECLARE v_log TEXT DEFAULT '';
    DECLARE v_err VARCHAR(4096) DEFAULT '';

    DECLARE v_ci VARCHAR(50) DEFAULT '';
    DECLARE v_cf VARCHAR(50) DEFAULT '';

    DECLARE i_index INT(2) DEFAULT 0;
    DECLARE v_log_count INT(1) DEFAULT 0;

  -- ------------------------
    -- 判断v_ci和v_Cf
  -- ------------------------
    SET i_index = INSTR(v_CI_or_CF,'.');
    IF i_index > 0 THEN
        SET v_ci = LEFT(v_CI_or_cF,i_index-1);
        SET v_cf = MID(v_CI_or_cF,i_index+1);
    ELSE
        SET v_ci = v_CI_or_CF;
        SET v_cf = '';
    END IF;

    -- ------------------------
    -- 记录状态,前置判定,直接调用存储过程的情况
    -- ------------------------
    SELECT COUNT(*) INTO v_log_count FROM dn_cc_jsx_yjg_jg WHERE yymc = v_App AND jsxmc = v_ci;
        IF v_log_count = 0 THEN
                INSERT INTO dn_cc_jsx_yjg_jg VALUES(UUID(),v_App,v_ci,v_cf,null,3,1,'database',now(),null);
        END IF;
    UPDATE dn_cc_jsx_yjg_jg SET rzbz = 2 WHERE yymc = v_App AND jsxmc = v_ci;

    SELECT COUNT(*) INTO i_index FROM dn_dy_jsx WHERE yymc = v_App AND jsxmc = v_ci;
    IF i_index = 0 THEN
        UPDATE dn_cc_jsx_yjg_jg SET rzbz = 4, rzxx = CONCAT('{\"error\":\"不存在预加工计算项',v_ci,'\"}') WHERE yymc = v_App AND jsxmc = v_ci;
        SELECT 1 ZT,CONCAT('{\"error\":\"不存在预加工计算项',v_ci,'\"}') CWXX    FROM DUAL;
        LEAVE LABEL1;
    END IF;

    IF v_cf <> '' THEN
        SELECT COUNT(*) INTO i_index FROM dn_dy_jsx_zd WHERE yymc = v_App AND jsxmc = v_ci AND ZDMC = v_cf;
        IF i_index = 0 THEN
            UPDATE dn_cc_jsx_yjg_jg SET rzbz = 4, rzxx = CONCAT('{\"error\":\"不存在预加工计算项字段',v_ci,'.',v_cf,'\"}') WHERE yymc = v_App AND jsxmc = v_ci;
            SELECT 1 ZT,CONCAT('{\"error\":\"不存在预加工计算项字段',v_ci,'.',v_cf,'\"}') CWXX FROM DUAL;
            LEAVE LABEL1;
        END IF;
    ELSE
        SELECT COUNT(*) INTO i_index FROM dn_dy_jsx_zd WHERE yymc = v_App AND jsxmc = v_ci;
        IF i_index = 0 THEN
            UPDATE dn_cc_jsx_yjg_jg SET rzbz = 4, rzxx = CONCAT('{\"error\":\"预加工计算项',v_ci,'不存在字段','\"}') WHERE yymc = v_App AND jsxmc = v_ci;
            SELECT 1 ZT,CONCAT('{\"error\":\"预加工计算项',v_ci,'不存在字段','\"}') CWXX FROM DUAL;
            LEAVE LABEL1;
        END IF;
    END IF;

    -- ------------------------
    -- 调用核心存储过程
  -- ------------------------
    CALL p_dn_ci_compute(
            v_App, v_ci,v_cf,
            i_count_field,
            v_err,v_log
        );
    -- ------------------------
    -- 判定结果记录状态
  -- ------------------------
    IF v_err <> '' THEN
        UPDATE dn_cc_jsx_yjg_jg SET rzbz = 4,rzxx = CONCAT('{\"error\":\"',replace(v_err,"\"","""),'\",\"log\":[',v_log,']}'),jssj=now() WHERE yymc = v_App AND jsxmc = v_ci;
        SELECT 1 ZT,CONCAT('{\"error\":\"',v_err,'\",\"log\":[',v_log,']}') CWXX    
        FROM DUAL;
    ELSE
        UPDATE dn_cc_jsx_yjg_jg SET rzbz = 3,rzxx = CONCAT(
                    '{\"volume\":\"',v_App,'\",',
                    '\"target\":\"',v_CI_or_CF,'\",',
                    '\"fieldCount\":\"',i_count_field,'\",',
                    '\"log\":[',v_log,']}'),jssj=now() WHERE yymc = v_App AND jsxmc = v_ci;
        SELECT 0 ZT,
                CONCAT(
                    '{\"volume\":\"',v_App,'\",',
                    '\"target\":\"',v_CI_or_CF,'\",',
                    '\"fieldCount\":\"',i_count_field,'\",',
                    '\"log\":[',v_log,']}') CWXX    
        FROM DUAL;
    END IF;

END
作者:敏  创建时间:2024-09-14 15:41
最后编辑:敏  更新时间:2025-03-07 10:05