# 流程报表-二开口子
# 一、常用表说明/Sql

## 1.1、流程效率报表核心表结构说明

> 【流程基础分析表】wfr_request_flowtime表结构说明

| 列名         | 字段类型  | 含义描述                                 |
|------------------------|----------|--------------------------------------------------|
| consult_status         | tinyint  | 存在征询 0-不存在  1-存在                                 |
| create_date_time       | datetime | 流程创建时间                                           |
| create_month           | int      | 创建月 yyyyMM                                       |
| create_season          | int      | 创建年季 yyyy+1,2,3,4四季                                            |
| create_time            | datetime | 数据创建时间（系统字段）                                                 |
| create_year            | int      | 创建年 yyyy                                         |
| creator                | bigint   | 流程创建人id                                          |
| creator_code           | varchar  | 创建人编号                                            |
| creator_dept_id        | bigint   | 创建人部门id                                          |
| creator_dept_name      | varchar  | 创建人部门名称                                          |
| creator_identity_id    | bigint   | 创建人兼职Id                                          |
| creator_is_admin       | tinyint  | 是否系统管理员                                          |
| creator_job            | bigint   | 创建人岗位                                            |
| creator_job_name       | varchar  | 创建人岗位名称                                          |
| creator_name           | varchar  | 创建人名称                                            |
| creator_real_dept_id   | bigint   | 创建人操作身份部门Id                                      |
| creator_real_id        | bigint   | 创建人操作身份ID                                        |
| creator_real_job_id    | bigint   | 创建人操作身份岗位Id                                      |
| creator_real_subcom_id | bigint   | 创建人操作身份分部Id                                      |
| creator_status         | int      | 创建人状态 （0-离职 1-在职）                                |
| creator_subcom         | bigint   | 创建人分部id                                          |
| creator_subcom_name    | varchar  | 创建人分部名称                                          |
| current_node_id        | bigint   | 当前节点id                                           |
| current_node_type      | int      | 记录当前操作节点的类型 0创建 1待批准 2待提交 3结束                    |
| delete_type            | int      | 数据删除状态（系统字段）                                                 |
| finish_date_time       | datetime | 流程结束时间，未结束单据记录统一调度开始时间                           |
| finish_status          | tinyint  | 流程完成状态 0-未完成 1-已完成                               |
| flow_status            | int      | 流程状态（0-草稿，1-审判中，2-已退回，3-正常归档，4-强制归档，5-已作废，6-待提交） |
| flow_time              | bigint   | 流转时长（单位：秒）                                             |
| flow_time_work         | bigint   | 去除非工作时间流转时长（单位：秒）                                      |
| id                     | bigint   | 分布式ID                                            |
| intervention_status    | tinyint  | 存在干预 0-不存在  1-存在                                 |
| is_overtime            | tinyint  | 所包含节点是否存在超时情况 0-未超时 1-超时                         |
| last_node_id           | bigint   | 最后操作节点ID，未结束的为当前节点                               |
| last_node_type         | int      | 最后操作流程节点类型，创建、提交、批准、归档、自动处理、等待，未结束的为当前节点         |
| last_operator          | bigint   | 最后操作流程节点人员，未结束的为当前节点                             |
| limit_time             | datetime | 流程限时时间点                                          |
| limit_time_processed   | int      | 流程限时处理方式                                         |
| min_overtime           | datetime | 这个流程超时时间点                                        |
| module                 | int      | 所属模块                                             |
| only_save              | tinyint  | 0非草稿 1纯草稿 2操作过的草稿                                                 |
| operator_size          | int      |                                                  |
| part_time_job          | tinyint  | 是否兼职                                             |
| reject_status          | tinyint  | 存在退回 0-不存在  1-存在                                 |
| request_id             | bigint   | 流程请求ID                                           |
| request_level          | int      | 流程紧急程度                                           |
| request_mark           | varchar  | 流程编号                                                 |
| request_name           | varchar  | 流程标题                                             |
| request_name_html      | text     | 流程列表标题（带html格式）                                                 |
| request_name_title     | varchar  | 流程列表标题（去除html格式）                                                 |
| request_overtime       | bigint   | 单据超时总时长                                          |
| request_overtime_work  | bigint   | 去除非工作日单据超时总时长                                    |
| sec_level              | int      | 密级                                               |
| status                 | varchar  | 特殊操作状态【保留值】                                      |
| tenant_key             | varchar  | 租户KEY                                            |
| turn_todo_status       | tinyint  | 存在转办 0-不存在  1-存在                                 |
| update_time            | datetime | 数据更新时间                                                 |
| workflow_belong_type   | int      | 路径所属类型 （0-个人审批 1-团体审批 2-云商店，-999 成员审批）           |
| workflow_id            | bigint   | 路径ID                                             |
| workflow_type          | bigint   | 路径分类                                             |
| workflow_version_flag  | bigint   | 路径的多版本统一字段标识                                     |


> 【操作基础分析表】wfr_operate_flowtime表结构说明

| 列名         | 字段类型  | 含义描述                                 |
|---------------------------|----------|------------------------------------------|
| consult_consume_time      | bigint   |意见征询时间耗时                               |
| consult_consume_time_work | bigint   |去除非工作时间意见征询时间耗时                        |
| create_month              | int      |创建月 yyyyMM                             |
| create_season             | int      |创建年季 yyyy+1,2,3,4四季                    |
| create_time               | datetime |数据创建时间（系统字段）                                       |
| create_year               | int      |创建年 yyyy                               |
| creator                   | bigint   |创建人id                                  |
| creator_dept_id           | bigint   |创建人部门id                                |
| creator_identity_id       | bigint   |创建人兼职Id                                |
| creator_is_admin          | tinyint  |是否系统管理员                                |
| creator_job               | bigint   |创建人岗位                                  |
| creator_job_name          | varchar  |创建人岗位名称                                |
| creator_name              | varchar  |创建人名称                                  |
| creator_status            | int      |创建人状态 （0-离职 1-在职）                      |
| creator_subcom            | bigint   |创建人分部id                                |
| delete_type               | int      |数据删除状态（系统字段）                                       |
| finish_status             | tinyint  |操作完成状态 0-未完成 1-已完成                     |
| first_view_date_time      | datetime |第一次查看时间，如果有值不会再更新                      |
| flow_time                 | bigint   |操作耗时（单位：秒）                                   |
| flow_time_for_work        | bigint   |去除非工作时间操作耗时（单位：秒）                            |
| id                        | bigint   |分布式ID                                  |
| is_be_reject              | tinyint  |是否退回操作                                 |
| is_overtime               | tinyint  |是否存在超时情况                               |
| isremark                  | int      |操作标识，枚举对应：OperateRemarkEnum            |
| need_wfback               | int      |是否需要反馈                                 |
| node_id                   | bigint   |节点ID                                   |
| node_name                 | varchar  |节点名称                                   |
| node_type                 | int      |节点类型                                   |
| operate_audit             | int      |                                       |
| operate_date_time         | datetime |操作日期时间                                 |
| operate_id                | bigint   |wfc_operate 表id                        |
| operate_reason            | bigint   |                                       |
| operate_round             | int      |操作轮次                                       |
| operate_type              | int      |流程流转类型                                 |
| opt_group_detail_id       | bigint   |操作者明细表数据ID                             |
| opt_group_id              | bigint   |操作者批次                                  |
| over_flow_time            | bigint   |操作超时时长（单位：秒）                                 |
| over_flow_time_for_work   | bigint   |去除非工作时间操作超时时长（单位：秒）                          |
| part_time_job             | tinyint  |是否兼职                                   |
| plan_flow_time            | datetime |计划工时, 记录超时流程设置的多久超时.操作人操作超时时间点         |
| pre_isremark              | int      |插入时操作状态值，插入后不变更                        |
| pre_node_id               | bigint   |                                       |
| pre_reason                | bigint   |                                       |
| pre_user_id               | bigint   |                                       |
| process_user              | bigint   |实际操作人ID                                |
| receive_date_time         | datetime |接受日期时间                                 |
| request_id                | bigint   |流程请求ID                                 |
| request_log_id            | bigint   |操作意见ID                                 |
| sec_level                 | int      |密级                                     |
| signgroup                 | bigint   |会签组                                    |
| signorder                 | int      |会签关系                                   |
| source_node_id            | bigint   |来源节点ID， 自由节点时 存有值                      |
| supervision_status        | tinyint  |督办状态                                   |
| tenant_key                | varchar  |租户KEY                                  |
| update_time               | datetime |数据更新时间                                       |
| user_real_dept_id         | bigint   |操作人身份部门ID                              |
| user_real_id              | bigint   |操作人身份ID                                |
| user_real_job_id          | bigint   |操作人身份岗位ID                              |
| user_real_subcom_id       | bigint   |操作人身份分部ID                              |
| view_date_time            | datetime |                                       |
| view_type                 | tinyint  |是否查看 0-未查看， 1-已查看                      |
| workflow_belong_type      | int      |路径所属类型 （0-个人审批 1-团体审批 2-云商店，-999 成员审批） |
| workflow_id               | bigint   |路径ID                                   |
| workflow_type             | bigint   |路径分类                                   |
| workflow_version_flag     | bigint   |路径的多版本统一字段标识                          |


> 【节点基础分析表】wfr_nodes_flowtime表结构说明

| 列名         | 字段类型  | 含义描述                                 |
|-------------------------|----------|------------------------------------------|
| consult_status          | tinyint  | 存在征询 0-不存在  1-存在                       |
| create_month            | int      | 创建月 yyyyMM                                       |
| create_season           | int      | 创建年季 yyyy+1,2,3,4四季                                       |
| create_time             | datetime | 数据创建时间（系统字段）                                       |
| create_year             | int      | 创建年 yyyy                                        |
| creator                 | bigint   | 数据创建人（系统字段）                                       |
| delete_type             | int      | 数据删除状态（系统字段）                                       |
| finish_status           | tinyint  | 节点完成状态                                 |
| flow_time               | bigint   | 节点耗时（单位：秒）                                   |
| flow_time_for_work      | bigint   | 去除非工作时间节点耗时（单位：秒）                            |
| id                      | bigint   | 分布式ID                                  |
| intervention_status     | tinyint  | 存在干预 0-不存在  1-存在                       |
| is_overtime             | tinyint  | 是否超时                                   |
| node_end_time           | datetime | 离开时间                                   |
| node_id                 | bigint   | 节点ID                                   |
| node_name               | varchar  | 节点名称                                   |
| node_start_time         | datetime | 到达时间                                   |
| node_type               | int      | 节点类型                                   |
| operate_round           | int      | 节点进入次数                                 |
| over_flow_time          | bigint   | 节点超时时长                                 |
| over_flow_time_for_work | bigint   | 去除非工作时间节点超时时长                          |
| reject_status           | tinyint  | 存在退回 0-不存在  1-存在                       |
| request_id              | bigint   | 流程请求ID                                 |
| seclevel                | int      | 密级                                     |
| source_node_id          | bigint   | 来源节点ID， 自由节点时 存有值                      |
| tenant_key              | varchar  | 租户KEY                                  |
| total_consume_time      | bigint   | 操作总耗时                                  |
| total_consume_time_work | bigint   | 去除非工作日操作总耗时                            |
| total_user_num          | int      | 操作者数量                                  |
| turn_todo_status        | tinyint  | 存在转办 0-不存在  1-存在                       |
| update_time             | datetime | 数据更新时间                                       |
| workflow_belong_type    | int      | 路径所属类型 （0-个人审批 1-团体审批 2-云商店，-999 成员审批） |
| workflow_id             | bigint   | 路径ID                                   |
| workflow_type           | bigint   | 路径分类                                   |
| workflow_version_flag   | bigint   | 路径的多版本统一字段标识                          |

# 二、二开场景案例
## 效率报表二开钩子说明
### 总体说明
效率报表的钩子事件 由配置文件 里面的开关控制

>  **<font style="color:#f90a0a;">启用开关：nacos中weaver-workflow-report-service.properties配置文件中需要增加配置项 weaver.report.openWfrSecondHook=t</font>****<font style="color:#f90606;">r</font>****<font style="color:#f90202;">ue，否则不执行复写钩子。</font>**
>

**<font style="color:#f90202;">钩子定义枚举类： com.weaver.workflow.report.constant.ecode.WfrRegHookEventType</font>**

| **钩子事件** | **说明** | **最低基线支持** |
| --- | --- | --- |
| wfrEffReportRightSql | 效率报表共享权限sql<br/>-- 用于增加效率报表查看范围 | 最低基线：2503 |
| wfrFlowSummaryHookEvent | 首页流程概览二开事件 | |
| wfrFlowSummaryClearHookEvent | 首页流程概览二开事件-清理事件 | |
| wfrEffAnalyseHookEvent | 流程效率分析-二开事件 | 单独出包 2505 基线<br/>实际支持：2510 基线 |
| wfrFlowTimeAnalyseHookEvent | 流程流转时间分析表-二开事件 | 单独出包 2505 基线<br/>实际支持：2510 基线 |
| wfrNodeOptEffRankHookEvent | 节点操作效率人员排名表-二开事件 | 单独出包 2505 基线<br/>实际支持：2510 基线 |
| wfrApprovalOverdueAnalyseHookEvent | 流程超期分析-二开事件 | 实际支持：2512 基线 |
| | | |


## 钩子事件
###  效率报表共享权限sql
> 该口子将效率报表页面url参数全部传进来；这里二开时即可根据自己的业务做不同的权限控制；
>
> 比如：
>
> + 增加个人权限范围,允许查看自己参与过的流程
>

#### 使用说明
通过在接口地址栏上输入指定的条件，接口会透传到二开服务，进行对应的参数拼接

![](${appMdRes}/1757994702-image.png))

#### 参数说明
**参数类型是Map，其中各个Key信息如下**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| reportType | int | 报表类型id |
| wfrAlis | String | wfr_request_flowtime表别名 |
| userId | Long | 人员id |
| tenantKey | String | 租户Key |
| url中自定义的参数 | | url自定义参数 |


```java
package com.weaver.secondev;

import com.weaver.loom.api.annotation.RegHook;
import com.weaver.loom.context.register.AbstractRegHookEvent;

import java.util.Map;

/**
 * @author 王朔
 * @description 效率报表权限复写demo
 *
 * 1. 返回值必须为sql字符串
 * 2. 复写的权限是以or的关联关系增加到原本的权限sql中，所以不需要返回关联关系and 或者 or
 * 3. 标准的权限sql只涉及wfr_request_flowtime表，注意要使用别名进行字段引用
 *
 */
@RegHook(module = "workflow", event = "wfrEffReportRightSql", order = 0)
public class WfrRightSqlSecondDev extends AbstractRegHookEvent {
    public WfrRightSqlSecondDev () {
    }
    @Override
    public Object handle(Object[] args) throws Exception {
        if (args!= null && args.length > 0) {
            Map<String,Object> param = (Map<String,Object>) args[0];
            // 报表类型id
            int reportType = (int)param.get("reportType");
            // wfr_request_flowtime表别名
            String wrfAlis = (String) param.get("wfrAlis");
            // userId
            Long userId = (Long) param.get("userId");
            // tenantKey
            String tenantKey = (String) param.get("tenantKey");
            // 其它为url自定义参数

            /* wfr_operate_flowtime 表别名 t2
            *  12 待办流程分析
            */
            if (reportType == 12) {
                return "t2.creator = " + userId;
            }

            /* wfr_operate_flowtime 表别名 wfrope
            *  13 待办流程分析
            *  14 待办流程最多人员排名表
            */
            if (reportType == 13 || reportType == 14) {
                return "wfrope.creator = " + userId;
            }

            /* wfr_operate_flowtime 表别名 wof
            *  15 办理效率分析
            *  16 人员办理时间分析表
            *  18 办理超期分析
            *  19 超期最多人员排名表
            */
            if (reportType == 15 || reportType == 16 || reportType == 18 || reportType == 19) {
                return "wof.creator = " + userId;
            }

            /* wfr_operate_flowtime 表别名 wfrope
            *  17 节点操作效率人员排名表
            */
            if (reportType == 17) {
                return "wfrope.creator = " + userId;
            }

            /* wfr_operate_flowtime 表别名 t1
            *  20 流程办理情况统计表
            */
            if (reportType == 20) {
                return "t1.creator = " + userId;
            }

            // 实列：增加个人权限范围,允许查看自己参与过的流程
            StringBuilder rightSql = new StringBuilder();
            rightSql.append(" exists(select 1 from wfr_operate_flowtime wof where ")
                    .append(wrfAlis).append(".request_id = wof.request_id")
                    .append(" and wof.tenant_key = '").append(tenantKey).append("'")
                    .append(" and wof.creator = ").append(userId).append(")");
            return rightSql.toString();
        }
        return "";
    }
}


```

报表类型枚举

```java
    /**
     * 全部报表
     */
    all_reports (99,212,"全部"),

    /**
     * 流程量分析
     */
    approval_volume_analysis(2,86134,"流程量分析"),

    /**
     * 流程类型统计表
     */
    approval_type_statistics_table(5,97457,"流程类型统计"),

    /**
     * 流程效率分析
     */
    approval_efficiency_analysis(6,65645,"流程效率分析"),

    /**
     * 流转时间分析表
     */
    flow_time_analysis_table(7,96707,"流转时间分析表"),

    /**
     * 耗时情况统计表
     */
    statistical_table_of_time_consuming_situations(8,96708,"耗时情况统计表"),

    /**
     * 耗时最长流程排名表
     */
    ranking_table_for_the_longest_approval(9, 98311,"耗时最长流程排名表"),

    /**
     * 流程超期分析
     */
    approval_overdue_analysis(10, 98312,"流程超期分析"),

    /**
     *超期最多流程排名表
     */
    deferred_approval_ranking_table(11,108599, "超期最多流程排名表"),
    /**
     *在办流程分析
     */
    job_approval_analysis(12, 101369,"待办流程分析"),
    /**
     *待办流程统计表
     */
    pending_approval_statistics_table(13, 98315,"待办流程统计表"),
    /**
     *待办流程最多人员排名表
     */
    ranking_table_of_the_most_upcoming_approvals(14, 98316,"待办流程最多人员排名表"),
    /**
     *办理效率分析
     */
    processing_efficiency_analysis(15,65680, "办理效率分析"),
    /**
     *人员办理时间分析表
     */
    personnel_processing_time_analysis_table(16, 98317,"人员办理时间分析表"),
    /**
     *节点操作效率人员排名表
     */
    node_Operational_Efficiency_Personnel_Ranking_Table(17, 98318,"节点操作效率人员排名表"),
    /**
     *办理超期分析
     */
    handle_overdue_analysis(18, 98319,"办理超期分析"),
    /**
     *超期最多人员排名表
     */
    ranking_table_of_the_most_overdue_personne(19, 98320,"超期最多人员排名表"),

    /**
     *流程办理情况统计表
     */
    statistical_table_of_examination_and_approval_processing(20, 95097,"流程办理情况统计表"),

    /**
     * 流程退回分析
     */
    request_return_analyse(21, 143902,"流程退回分析"),

    /**
     * 流程退回统计表
     */
    request_return_statistics_table(22, 143904,"流程退回统计表"),
```



报表共享权限枚举 (wfr_ph_wfc_effreport表 source_type )

```java
    /**
     * 个人
     */
    PERSONAL(20008, 66480, "个人"),
    /**
     * 同部门
     */
    DEPARTMENT(20002, 98306, "同部门"),
    /**
     * 同分部
     */
    BRAN_COMPANY(20003, 98307, "同分部"),
    /**
     * 总部
     */
    COMPANY(20004,97458, "全部机构"),


    /**
     * 同部门的下级部门
     */
    SUB_DEPARTMENT(20005, 116360, "同部门的下级部门"),

    /**
     * 多部门
     */
    APPOINT_DEPARTMENT(20006, 98309, "多部门"),
    APPOINT_DEPARTMENT_INCLUDE_SUB(200061, 98309, "多部门/含下级"),

    /**
     * 多分部
     */
    APPOINT_BRAN_COMPANY(20007, 98310, "多分部"),
    APPOINT_BRAN_COMPANY_INCLUDE_SUB(200071, 98310, "多分部/含下级")
    ;
```

### 首页流程概览二开事件
#### 使用说明
![](${appMdRes}/1757994765-image.png)

首页流程概览分为 3 个流程报表指标和一个实时指标，在使用时，通过拦截对应接口参数，在参数中追加 params 的 map 对象参数进行对应业务的二开处理



#### 参数说明
**参数类型是Map，其中各个Key信息如下**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| userId | Long | 人员id |
| tenantKey | String | 租户Key |
| reqParams | String | com.weaver.workflow.common.dto.flowcenter.req.OverViewCountReq 的 JSON 字符串参数 |




响应参数：

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| summarySubType | String | 用于区分概览的细化分类缓存标记  => 如果进行分类则二开入口必须存放，否则和标准数据缓存有冲突<br/><br/>-- wfWorkflow 工作流区分下的流程模块数据 docWorkflow 公文模块数据 |
| realTimeConditionSql | String | 拼接给待办数量的 实时sql片段 |
| notRealTimeConditionSql | String | 拼接给其他指标 非实时sql片段 |
| filterOfsData | boolean | 待办数量 实时指标中 过滤异构系统数据 |
| filterDraftData | boolean | 待办数量 实时指标中 过滤草稿数据 |
| filterAgentData | boolean | 待办数量 实时指标中 过滤代理数据 |




```java
package com.weaver.seconddev.qc3825921;

import com.alibaba.fastjson.JSON;
import com.weaver.loom.api.annotation.RegHook;
import com.weaver.loom.context.register.AbstractRegHookEvent;
import com.weaver.workflow.common.dto.flowcenter.req.OverViewCountReq;
import com.weaver.workflow.common.util.DataTransUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Slf4j
@RegHook(module = "workflow", event = "wfrFlowSummaryHookEvent", order = 0)
public class CustomSummaryDatasHook extends AbstractRegHookEvent {

    @Autowired
    private DevCommonUtil devCommonUtil;

    @Override
    public Object handle(Object[] args) throws Exception {
        Map<String,Object> result = new HashMap<>();

        Map<String,Object> argParam = (Map<String,Object>) args[0];
        long userId = DataTransUtil.getLongValue(DataTransUtil.null2String(argParam.get("userId")));
        String tenantKey = DataTransUtil.null2String(argParam.get("tenantKey"));
        String reqParams = DataTransUtil.null2String(argParam.get("reqParams"));
        OverViewCountReq overViewCountReq = JSON.parseObject(reqParams, OverViewCountReq.class);
        String summarySubType  = "";
        if (overViewCountReq!= null){
            Map<String, Object> params = overViewCountReq.getParams();
            if (params!=null&&params.containsKey("summarySubType")){
                summarySubType = DataTransUtil.null2String(params.get("summarySubType"));
            }
        }
        if (!summarySubType.isEmpty()){
            //执行二开业务逻辑
            // xxxxxx 
            String realTimeConditionSql = "";
            String notRealTimeConditionSql = "";
            // 对非实时拼接条件，对应的表别名使用 req, 对应wfr_request_flowtime
            // 对实时拼接条件，对应的表别名使用 t1， 对应 wfc_requestbase
            
            result.put("summarySubType",summarySubType);
            result.put("realTimeConditionSql", realTimeConditionSql);
            result.put("notRealTimeConditionSql", notRealTimeConditionSql);
            result.put("filterDraftData", true);
        }

        return result;
    }
}

```



### 首页流程概览二开事件-清理事件
#### 使用说明
在增加了首页流程概览二开事件后，如果存在分类的场景summarySubType，需要在效率报表计算完成后，触发一个口子，告知要清理哪些换成数据



#### 参数说明
**参数类型是Map，其中各个Key信息如下**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| tenantKey | String | 租户Key |




响应参数：

直接返回了字符串，告知清理的summarySubType 类型



### 流程效率分析-二开事件
#### 使用说明
针对流程效率分析报表，支持二开参数条件控制，通过在请求参数com.weaver.workflow.report.effreport.entity.e9transfer.wfeffanalyse.req.WfEffAnalyseConditionReq 里塞入 otherParams（map 对象）参数，透传到二开服务，进行对应条件的拼接



#### 参数说明
**参数类型是Map，其中各个Key信息如下**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| userId | Long | 人员id |
| tenantKey | String | 租户Key |
| reqParams | String | com.weaver.workflow.report.effreport.entity.e9transfer.wfeffanalyse.req.WfEffAnalyseConditionReq 的 JSON 字符串参数 |




响应参数：返回对象 com.weaver.workflow.common.dto.report.WfrRegHookSqlDto

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| baseSelectSQL | String | 基础查询SQL片段 |
| baseWhereSQL | String | 基础条件SQL片段 |
| baseOrderSQL | String | 基础排序SQL片段 |




对应涉及的表及其别名：

wfr_request_flowtime req

wfr_nodes_flowtime nodes



### 流程流转时间分析表-二开事件
#### 使用说明
针对流程流转时间分析报表，支持二开参数条件控制，通过在请求参数com.weaver.workflow.report.effreport.entity.e9transfer.wfeffanalyse.req.WfEffAnalyseConditionReq 里塞入 otherParams（map 对象）参数，透传到二开服务，进行对应条件的拼接



#### 参数说明
**参数类型是Map，其中各个Key信息如下**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| userId | Long | 人员id |
| tenantKey | String | 租户Key |
| reqParams | String | com.weaver.workflow.report.effreport.entity.e9transfer.wfeffanalyse.req.WfEffAnalyseConditionReq 的 JSON 字符串参数 |




响应参数：返回对象 com.weaver.workflow.common.dto.report.WfrRegHookSqlDto

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| baseSelectSQL | String | 基础查询SQL片段 |
| baseWhereSQL | String | 基础条件SQL片段 |
| baseOrderSQL | String | 基础排序SQL片段 |




对应涉及的表及其别名：

wfr_request_flowtime req

wfr_nodes_flowtime nodes



### 节点操作效率人员排名表-二开事件
#### 使用说明
针对节点操作效率人员排名表报表，支持二开参数条件控制，通过在请求参数com.weaver.workflow.report.effreport.entity.WfrGlobalParamEntity 里塞入 otherParams（map 对象）参数，透传到二开服务，进行对应条件的拼接



#### 参数说明
**参数类型是Map，其中各个Key信息如下**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| userId | Long | 人员id |
| tenantKey | String | 租户Key |
| reqParams | String | com.weaver.workflow.report.effreport.entity.WfrGlobalParamEntity 的 JSON 字符串参数 |




响应参数：返回对象 com.weaver.workflow.common.dto.report.WfrRegHookSqlDto

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| baseSelectSQL | String | 基础查询SQL片段 |
| baseWhereSQL | String | 基础条件SQL片段 |
| baseOrderSQL | String | 基础排序SQL片段 |




对应涉及的表及其别名：

wfr_request_flowtime  <font style="color:#DF2A3F;">wfrreq</font>

wfr_operate_flowtime	 <font style="color:#DF2A3F;">wfrope</font>



### 流程超期分析-二开事件
#### 使用说明
针对流程超期分析报表，支持二开参数条件控制，通过在请求参数com.weaver.workflow.report.bean.req.WfrOERCReportReq 里塞入 otherParams（map 对象）参数，透传到二开服务，进行对应条件的拼接



#### 参数说明
**参数类型是Map，其中各个Key信息如下**

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| userId | Long | 人员id |
| tenantKey | String | 租户Key |
| reqParams | String | com.weaver.workflow.report.bean.dto.WfrOERCReportDto 的 JSON 字符串参数 |




响应参数：返回对象 com.weaver.workflow.common.dto.report.WfrRegHookSqlDto

| 参数名 | 类型 | 描述 |
| --- | --- | --- |
| baseSelectSQL | String | 基础查询SQL片段 |
| baseWhereSQL | String | 基础条件SQL片段 |
| baseOrderSQL | String | 基础排序SQL片段 |




对应涉及的表及其别名：

wfr_request_flowtime  <font style="color:#DF2A3F;">wrf</font>

wfr_operate_flowtime	 <font style="color:#DF2A3F;">wof</font>



# 三、配置文件个性化配置说明

> 非单体部署客户，需要到nacos修改配置<br>
> 单体部署客户，需要到/e10服务部署目录/webapps/ROOT/WEB-INF/classes/weaver/config/config-center目录修改，修改完需要重启服务

## 3.1、流程效率报表执行时间限制

> 流程效率报表数据非实时统计，而是每天晚上凌晨1点通过定时任务更新前一天变更的增量数据，定时任务默认仅可在凌晨1点到早上6点执行，超时则结束定时任务

### 3.1.1、配置项说明
- 配置文件名称：weaver-workflow-report-service.properties
- 配置项名称：weaver.report.calculateExecPeriodsOfTime
- 配置项value说明：删除此配置项，或将此配置值改为空，表示效率报表定时任务执行时间不受控，可在任意时间触发执行
- 是否需要重启（非单体）：否
- 最低支持版本：10.0.2412.01
- 配置示例：
> 
```properties
weaver.report.calculateExecPeriodsOfTime=01:00:00-06:00:00
```

### 3.1.2、流程效率报表任务执行记录

> 流程模块--工作流统计菜单下任意一个流程效率报表页面，右下角数据统计范围提示入口可以查看（**需要登陆系统管理员账号**）

![](${appMdRes}/1746580824-image.png)
![](${appMdRes}/1746580820-image.png)

### 3.1.3、流程效率报表手动执行
> 访问oa地址/info/dispatch/escheduler/task，高级搜索中使用方法别名搜索CalCulateReportHandler，并在行末下拉菜单中手动执行（若环境为多租户，需要登陆主管团队管理员账号，并切换至主管团队，再访问此链接）
>
> 若需要手动执行一次效率报表，**可先将配置项值调整为空**，再手动执行，**执行完成后切记需要恢复配置项原值**

![](${appMdRes}/1746580708-image.png)


# 四、特殊场景处理方案
## 4.1 清理首页的流程概览数据

![](${appMdRes}/1774843064-image.png)
> 流程概览组件上有数据的时间范围概念，数据非实时，依赖于数据抽取，4个指标中，只有待办数量是一个实时指标。所以如果数据发生了变动，需要等到下一个调度抽取周期才会统计到对应的数据【目前默认凌晨执行一次抽取调度】

如果现在面临的场景是：需要全部清理掉测试数据，并且不能等到下一个抽取周期的自动执行，则需要手动清理下数据表
```
truncate table wfr_request_flowtime;
truncate table wfr_operate_flowtime;
truncate table wfr_nodes_flowtime;
truncate table wfr_flowtime_reporttask_log;

```

这里数据属于全部清理【不用担心影响其他业务，这里的表数据是独立的，下一次抽取调度会重新计算】

如果想现在就立马执行 + 不删除全部数据，则需要手动触发一次抽取调度，可以参考这篇文章 [效率报表抽取自行检测步骤文档](https://weapp.eteams.cn/ecode/playground/doc/share/view/1167244267273478146)
【但需要注意配置上允许的可执行时间】

![](${appMdRes}/1774843803-image.png)

执行完成后，在到浏览器上调用下这个接口，清理缓存数据
> 环境IP地址 + /api/workflow/report/selfTest/clearHomePageCache?tenantKey=租户key

![](${appMdRes}/1774843983-image.png)


