%% DataLink.SqlWebCall 默认分支次流程图
flowchart TD
    A([MESCommonBase default 分支])
    B[DataLink.SqlWebCall(type,jsonData,dataobj)]
    C{initSystemIsOk?}
    D[InitSystemReg<br/>读取 Web.config appSettings ConnectionString<br/>initSystemIsOk = true]
    E{switch(type)}

    A --> B --> C
    C -->|否| D --> E
    C -->|是| E

    E -->|8888| L1[GetEncryptStr<br/>读取 Name/name 并加密]
    E -->|5001| L2[ExePROCEDURE_Type11_AddUser<br/>Password MD5<br/>执行 Name 指定存储过程]
    E -->|5002| L3[ExePROCEDURE_Type11_Login<br/>解密密码并比对<br/>成功写入 token]

    E -->|1/2/5| O1[旧协议存储过程<br/>对象: jsonobj dataobj<br/>Param 为拼接字符串]
    O1 --> O2[SQLCommon.GetCmdParam<br/>按 & / = / | 拆参数<br/>支持 output 参数]
    O2 --> DBP[SQLCommon.ExecuteStoredProcedure]

    E -->|11/111/12/13/21| N1[新协议存储过程<br/>对象: JsonData jsonData<br/>Param 为 JSON 数组字符串]
    N1 --> N2[GetString_JsonData<br/>读取 Type/Name/Param/token/pageSize/pageList]
    N2 --> T{token 非空?}
    T -->|是| T1[CheckToken<br/>权限管理_Token_查询数据]
    T -->|否| N3[解析 Param 为 SqlParameter[]]
    T1 -->|通过| N3
    T1 -->|失败| R3[返回 result=3]
    N3 --> N4{Type=111 且有分页字段?}
    N4 -->|是| N5[追加 PageCurrent/PageSize/PageCount/ItemCount]
    N4 -->|否| DBP
    N5 --> DBP

    E -->|1001/1002/3/4/7/22/3001| S1[SQL / 建表导入 / 命令执行类<br/>Name/name 可能是 SQL 文本或表名]
    S1 --> DBS[SQLCommon.ExecuteDataTable / ExecuteDataset<br/>ExecuteInsertMesWork / ExecuteSelectMesWork<br/>或 DbCallType1003_SqlCmd.SqlExec]

    L1 --> R1[返回加密字符串]
    L2 --> DBP
    L3 --> DBP
    DBP --> R2[返回结果<br/>DataTable JSON / DataSet JSON<br/>result=1/0 / rows-total / code-message-data]
    DBS --> R2
    R1 --> Z[Response.Write(responseText)]
    R2 --> Z
    R3 --> Z
    Z --> END([返回 MESCommonBase default 响应出口])

    subgraph RISK[次流程关键风险]
        K1[token 多数是非空才校验<br/>不传 token 常见路径不拒绝]
        K2[客户端可控制 Name/name<br/>存储过程名 / SQL 文本 / 表名]
        K3[CommandTimeout = 0<br/>长 SQL 或存储过程可能长期阻塞]
        K4[未支持 Type 返回空字符串<br/>异常常返回 result=0]
    end

    END --> RISK
