Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

业务开发

新增业务流程配置

以文章和角色两种场景来演示

新增流程类别字典

img_13.png

新增流程配置

img_14.png 新闻文章审批配置

img_15.png 角色审批配置

表单项流程配置json结构说明

JSON结构说明

参数是否必填说明默认值
tableName业务表名
statusField自定义状态字段名,如有该业务表有自己的状态字段时,请填写对应表字段FLOW_STATUS
statusOptions自定义初始(新增)与完成(审批通过)的流程状态,不设置默认会提供一套状态
fields条件字段配置。不填写时,设置的互斥网关将走最右侧的分支
updateStrategy决定业务数据在审批中的更新策略(reject,continue,rollback)
reject: 禁止更新流程中的业务数据
continue: 允许更新,并以新数据继续执行流程
rollback: 允许更新,终止当前流程,回滚到待提交状态
reject

fields字段说明

参数是否必填示例值说明
fieldCONTENT_TITLE数据库中字段名
name文章标题条件选择下拉展示名称
typeinput条件选择类型,条件会根据type来生成选择控件
input: 输入框
select: 下拉框
date: 日期选择框
time: 时间选择框
radio: 下拉框
checkbox: 下拉框
switch: 开关
multiplefalse,在type为select、radio、checkbox时需要字段值是否支持多选
options[{“value”:“选项1”,“label”:“选项1”}]当type为select、radio、checkbox时,options为下拉框的选项,只有以上类型才与需要此字段
fmtYYYY-MM-DD HH:mm:ss当type为date时,fmt为日期时间格式
{
  "tableName": "CMS_CONTENT",
  "statusField": "PROGRESS_STATUS",
  "statusOptions": {
    "0": "草稿",
    "1": "审批中",
    "8": "终审通过"
  },
  "fields": [{
    "field": "CONTENT_DATETIME",
    "name": "发布时间",
    "type": "date",
    "fmt": "YYYY-MM-DD HH:mm:ss"
  },{
    "field": "CONTENT_TYPE",
    "name": "文章类型",
    "key": "value",
    "type": "select",
    "multiple": "false",
    "options": [
      {
        "value": "c",
        "label": "推荐"
      },
      {
        "value": "f",
        "label": "幻灯"
      },
      {
        "value": "h",
        "label": "头条"
      },
      {
        "value": "p",
        "label": "图片"
      }]
  },{
    "field": "CATEGORY_ID",
    "name": "所属栏目",
    "type": "select",
    "multiple": "false",
    "options": [{
      "value": "1499198773946273794",
      "label": "文化"
    }, {
      "value": "1546662562244468738",
      "label": "动漫"
    }, {
      "value": "1546662842281369601",
      "label": "综艺"
    }]
  }]
}

流程设计效果展示,通过下拉选择的方式简单设置条件

img_16.png

img_17.png

审批表单

介绍:在办理审批时,用于展示业务数据详情;审批表单路径为一个控制层视图请求或路由(如 /basic/role/form.do),一般办理审批时,相较于新增数据表单,审批表单禁止修改,按钮隐藏

img_9.png 设置了审批表单,在办理审批时,左侧会根据配置的路径展示业务数据

img_8.png 没有设置审批表单,在办理审批时,不会展示业务数据

审批表单方案1:复用业务数据表单

通用办理会传递一个isReadonly=true参数,业务表单接收参数并根据isReadonly去实现审批表单效果

...
<el-header class="ms-header ms-tr" height="50px" >
    <el-button type="primary" class="iconfont icon-baocun" size="default" @click="save()" :loading="saveDisabled" v-if="!isReadonly">保存
    </el-button>
    <el-button size="default" class="iconfont icon-fanhui" plain @click="back()" v-if="!isReadonly">返回</el-button>
</el-header>
...
<el-form ref="form" :model="form" :rules="rules" label-width="100px" size="default" :disabled="isReadonly">
...
</el-form>
...
<!--vue js-->

data: function () {
    return {
        ...
        isReadonly: false,  // 是否只读
        ...
    }
}

created: function () {
    this.isReadonly = ms.util.getParameter("isReadonly");
}

审批表单方案2:自定义表单

创建一个新的表单页,单独用来展示审批时的业务数据,需要对应新增控制层视图请求或路由

监听器配置

在流程办理的过程中,可以通过监听器监听流程办理过程中的不同时期,达到增强的目的,需要二次开发

参考文档流程监听器

流程绑定

业务分类独立流程图场景

场景说明:当一张表的业务数据有分类,分类是独立表,不同分类下的业务数据通过各自的流程图执行流程,这类场景下流程绑定在分类数据上;如 文章 栏目场景,不同栏目下的文章走不同的审批流程;

特点:业务数据可以通过分类清晰地知道业务数据是否有审批配置,独立流程图,流程图版本更稳定;但是需要对分类表、分类业务做处理

分类表添加流程编码字段

ALTER TABLE YOUR_TABLE
 ADD COLUMN FLOW_CODE VARCHAR(255) DEFAULT '' COMMENT '流程编码';

img_18.png 业务分类数据控制层新增、更新方法添加@EnableFlow注解

注解参数是否必填说明默认值
category流程类别的字典名称

前端分类数据表单页使用绑定流程分类组件<ms-flow-select-category>

img_4.png

<ms-flow-select-category>组件参数说明

组件参数是否必填说明默认值
dataId当前业务数据id
formData当前表单提交的业务数据对象
category查询指定类型的业务流程数据,为空时查询全部,值来源:流程类别字典名称

<ms-flow-select-category>集成代码示例

...
<!-- 头部添加组件引入 -->
<#include "flow/components/ms-flow-select-category.ftl"/>
...

...
<!-- 组件使用 -->
<ms-flow-select-category v-if="!form.id || form.leaf" :form-data="form" :data-id="form.id" category="栏目文章"></ms-flow-select-category>
...

<!-- vue js -->
var categoryForm = Vue.defineComponent({
    components:{
        ...
        // 注册组件
        MsFlowSelectCategory
        ...
    },
...
})

业务无分类场景

场景说明:一张表的业务数据共用一个流程,在提交时通过flowCode参数去指定流程

业务数据

业务数据添加流程字段

-- 如果业务数据原本有审批状态字段,执行下面的sql 注意 要在流程配置json的statusField中需要配置业务表中的审批字段
ALTER TABLE YOUR_TABLE
ADD COLUMN FLOW_INSTANCE_ID varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '流程实例id' AFTER DEL,
ADD COLUMN FLOW_NODE_CODE varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '节点编码' AFTER FLOW_INSTANCE_ID,
ADD COLUMN FLOW_NODE_NAME varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '流程节点名称' AFTER FLOW_NODE_CODE,
ADD COLUMN FLOW_NODE_TYPE int NULL DEFAULT NULL COMMENT '节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)' AFTER FLOW_NODE_NAME;

-- 如果新产生审批的业务,执行下面的sql
ALTER TABLE YOUR_TABLE
ADD COLUMN FLOW_STATUS varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '流程状态' AFTER DEL,
ADD COLUMN FLOW_INSTANCE_ID varchar(25) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '流程实例id' AFTER FLOW_STATUS,
ADD COLUMN FLOW_NODE_CODE varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '节点编码' AFTER FLOW_INSTANCE_ID,
ADD COLUMN FLOW_NODE_NAME varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL COMMENT '流程节点名称' AFTER FLOW_NODE_CODE,
ADD COLUMN FLOW_NODE_TYPE int NULL DEFAULT NULL COMMENT '节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)' AFTER FLOW_NODE_NAME;

img_27.png 有审批属性的业务实体对象继承BaseFlowEntity,并忽略flowStatus字段

img_23.png

新产生审批业务实体对象继承BaseFlowEntity

业务数据控制层使用@FlowStatus注解

img_28.png

在业务数据的新增和更新方法上添加@FlowStatus注解,在新增、更新业务数据时,会自动设置流程状态值,业务实体必须要继承BaseFlowEntity

注解参数是否必填说明默认值
category流程类别的字典名称
typeField业务实体中分类字段名,值为分类实体中的id,如ContentEntity中的categoryId空串

功能介绍:

  • 新增场景
    • 业务流程为发布状态时,新增业务数据审批状态为0,如果流程配置json有配置statusOptions,那么为0对应的值;否则为0,页面上通过ms-flow-status格式化0为待提交
    • 业务流程为未发布状态时,新增业务数据审批状态为8,如果流程配置json有配置statusOptions,那么为8对应的值;否则为8,页面上通过ms-flow-status格式化8为已完成
  • 编辑场景,根据流程配置json中的updateStrategy决定处理方式
    • reject(默认),禁止更新流程中的业务数据
    • continue,允许更新,并以新数据继续执行流程
    • rollback,允许更新,终止当前流程,回滚到待提交状态

业务数据列表页提交审批、撤回组件ms-flow-action

img_25.png

组件参数说明

组件参数是否必填说明默认值
dataId当前业务数据id
flowCode流程编码
actionType当前业务操作类型,支持类型 submit revokesubmit
title操作按钮名称submit情况默认为提交审批,revoke情况默认为撤回
flowDataTitle业务数据标题,用于待办页面显示,提交操作生效
callback提交后回调方法
...
<!-- 头部添加组件引入 -->
<#include "flow/components/ms-flow-action.ftl"/>
...

<!--操作列展示-->

<!--提交审批 -->
<ms-flow-action :data-id="scope.row.id" 
                :flow-Code="getFlowCodeFromCategory" 
                @callback="list"
                :title="scope.row.progressStatus == '审批不通过' ? '重新提交':'提交审批'"
                v-if="
                ms.util.includes(ms.managerPermissions,'flow:'+getFlowType()+':submit') &&
                (scope.row.progressStatus == '待提交' || 
                scope.row.progressStatus == '审批不通过' || 
                scope.row.progressStatus == '撤销')" 
></ms-flow-action>

<!--撤销-->
<ms-flow-action :data-id="scope.row.id" 
                :flow-Code="getFlowCodeFromCategory" 
                @callback="list" 
                action-type="revoke"
                v-if="
                ms.util.includes(ms.managerPermissions,'flow:'+getFlowType()+':revoke') &&
                scope.row.progressStatus == '审批中'"
></ms-flow-action>

<!--vue js-->
components: {
    // 注册组件
    MsFlowAction,
},
method: {
    // 在分类场景下 选中有流程的分类时 获取到该分类绑定流程的flowCode
    getFlowCodeFromCategory(){
        return 'role_approval'
    },
    // 获取业务数据对应的流程类别字典的字典值
    getFlowType(){
        return 'role';
    }
}

提交、撤回权限添加

img_19.png

权限结构:“flow:” + 业务对应流程类别字典的数据值 + “:submit|:revoke”

业务数据列表审批状态格式化组件ms-flow-status

img_26.png

流程默认有一套流程状态的处理,如果没有自定义流程状态的需求,可以直接使用默认的

组件参数说明

组件参数是否必填说明默认值
flowStatus当前业务数据的审批状态值
...
<!-- 头部添加组件引入 -->
<#include "flow/components/ms-flow-status.ftl">
...

<el-table-column label="审批状态" align="left" show-overflow-tooltip>
<template #default="scope">
    <!-- 注意:scope.row.xxx 这个属性 优先为流程配置json中的statusField,默认为flowStatus -->
    <ms-flow-status :flow-status="scope.row.progressStatus"></ms-flow-status>
</template>
</el-table-column>


<!--vue js-->
components: {
    // 注册组件
    MsFlowStatus,
},


<!------组件------>
// 通过flowStatusOptions进行格式化处理 不在flowStatusOptions中的值,原值显示
flowStatusOptions: // (0待提交 1审批中 8已完成 2 审批通过-在审批日志中使用)
  [{
    value: 0,
    label: '待提交'
  }, {
    value: 1,
    label: '审批中'
  },{
    value: 2,
    label: '审批通过'
  }, {
    value: 8,
    label: '已完成'
  }],

业务数据列表流程进度组件ms-flow-chart

img_29.png

流程进度组件参数说明

组件参数是否必填说明默认值
insId当前业务数据的流程实例ID
...
<!-- 头部添加组件引入 -->
<#include "flow/components/ms-flow-chart.ftl">
...

<!--操作列展示-->
<ms-flow-chart :ins-id="scope.row.flowInstanceId" 
               v-if="
               scope.row.progressStatus != '待提交' && 
               scope.row.flowInstanceId "">
</ms-flow-chart>


<!--vue js-->
components: {
    // 注册组件
    MsFlowChart,
},

业务数据列表增加审批记录按钮

img_31.png img_30.png


<!--操作列展示-->
<@shiro.hasPermission name="flow:task:done">
    <el-link type="primary" :underline="false" @click="showDoneList(scope.row.id,scope.row.flowInstanceId)">审批记录</el-link>
</@shiro.hasPermission>


<!--vue js-->
showDoneList:function (id,instanceId){
  var url = "/flow/task/done/doneList.do?dataId="+id+"&backUrl="+encodeURIComponent("/basic/role/index.do")
  if (instanceId){
    url += "&instanceId="+instanceId
  }
  ms.util.openSystemUrl(url)
},

抄送

定义:抄送功能,是指流程执行过程中,节点可设置抄送人,节点执行完成时,将节点的审批结果进行抄送,抄送的通知方式需要自行实现

流程图设计

img_21.png

监听器中处理节点抄送人

抄送消息内容和抄送通知方式按需处理

img_22.png

流程设计器接口权限控制

img_32.png shiroConfig中进行接口权限控制