使用云巧工坊编写业务流程并可视化

简介: 软件产品都面临业务需求、流程快速变化的现状,往往之前设计绘制的业务流程在几个月之后就会失效的问题,如果按照一定语法开发的代码可以实时正确反应业务流程就解决了业务流程保鲜的问题。yunqiao-boot-starter-flow 就是解决这一问题的开发框架。

软件产品都面临业务需求、流程快速变化的现状,往往之前设计绘制的业务流程在几个月之后就会失效的问题,如果按照一定语法开发的代码可以实时正确反应业务流程就解决了业务流程保鲜的问题。yunqiao-boot-starter-flow 就是解决这一问题的开发框架。


快速开始


一、安装依赖


在 maven pom.xml 中添加以下依赖,如果使用六边形架构,一般是添加到 application 层。


<properties><yunqiao-boot.version>0.1.1</yunqiao-boot.version></properties><dependencies>  ...
<dependency><groupId>com.aliyun.gts.yunqiao</groupId><artifactId>yunqiao-boot-starter-flow</artifactId><version>${yunqiao-boot.version}</version></dependency>  ...
</dependencies>


二、编程界面


yunqiao-boot-starter-flow 有主要两个类来进行业务流程编写:


  1. ISequence 对线性流程进行编写。
    主要使用 ISequence.then(String name, Function<T, R> function) 方法进行流程步骤编排,多个步骤可以链式调用多个 then 来完成一个线性没有分支的业务流程。其中 name 为业务节点名称,会渲染到流程图中。function 为处理函数。
    Example:
importcom.aliyun.gts.yunqiao.arch.flow.rx.sequence.Sequence;
importstaticcom.aliyun.gts.yunqiao.arch.flow.rx.Alias.seq;
// Sequence 是 ISequence 使用 rxjava3 实现的线性流程。intlength=Sequence.<String, Integer>create("去空格测长度")
              .start()
              .then("去空格", String::trim)
              .then("算长度", String::length)
              .stop()
              .run(" 1234 ");
// seq 是 Sequence 的简写。Stringresult=seq("算术题").then("+1", n->n+1)
                .then("+2", n->n+2)
                .then("秒", n->n+"s")
                .run(1);
  1. IGraph 对分支流程进行编写。
    主要使用:
  • .sequence 添加一个线性流程,可以直接使用上面的 Sequence
  • .whether 添加一个 是,否 分支,相当于 if else
  • .parallel 添加多个并行执行的流程分支。

Example:

// Graph 是 IGraph 使用 rxjava3 实现的分支流程。Graph.<Optional<Void>, Optional<Void>>create("流程图")
     .whether("参数检查", it->true,
Sequence.create("通过", newPassInputFunction<>()),
Sequence.create("不通过", "抛异常", it-> {
thrownewRuntimeException();
             }).end()
     )
     .sequence(Sequence.create("先行序列")
             .then(newPrintNamedFunction("先行1"))
             .then(newPrintNamedFunction("先行2")))
     .whether("是否需要排他", __->false,
Sequence.create("排他序列1")
                     .then(newPrintNamedFunction("排他1-1"))
                     .then(newPrintNamedFunction("排他1-2")),
Sequence.create("排他序列2")
                     .then(newPrintNamedFunction("排他2-1"))
                     .then(newPrintNamedFunction("排他2-2")))
     .both(
Sequence.create("并行序列1").then(newPrintNamedFunction("并行1-1")).then(newPrintNamedFunction("并行1-2")),
Sequence.create("并行序列1").then(newPrintNamedFunction("并行2-1")).then(newPrintNamedFunction("并行2-2")),
             (__, ___) -> {
System.out.println("汇聚");
return___;
             }).run();


三、图形显示


编写好的业务流程可以进行图形化展示,在需要展示的流程方法上打上Flow注解。


Example:


@FlowpublicResponseVocreate(RequestVoreq) {
returnGraph.create("").sequence(...).whether(...).run(req);
}


然后可以使用以下两种方式进行图形化展示

使用云巧工坊


  1. 打开 云巧工坊 -> 资产生产 -> 点击 初始化云巧标准应用 链接
  2. 按照提示步骤创建一个应用,并把代码 push 到应用仓库中
  3. 进入应用详情,点击刷新评分按钮,则会创建一个代码扫描流水线。


  1. 可以在大禹查看流水线运行状态和日志:

  1. 当流水线运行成功之后,刷新云巧工坊的页面就可以查看评分和流程图了

idea 插件实时展示

使用 yunqiao-intellij-plugin 可以在 IDEA 系编辑器中实时查看编写的业务流程图:

使用方法如下:

  1. 从云巧资产市场下载插件
  2. 打开 IDEA 插件管理界面,选择从磁盘上安装。

  1. 安装成功后可以看到右侧工具栏多了一个架构工作台的界面(目前只有业务流程可视化功能)。

  1. 编写一个流程,就可以看到流程图啦。

注:如果看不到流程,请手动 clean 工程再 compile 试试。


四、Api 列表


IFlow


ISequenceIGraph 的基类,定义类流程的通用方法。


/*** @param <I> 流程入参类型* @param <O> 流程出参类型* @author YanPeng* @date 2021/9/13*/publicinterfaceIFlow<I, O, SextendsIFlow<I, O, S>> {
/*** 运行一个流程,使用默认 Context** @param input 流程入参* @return 流程出参*/Orun(Iinput);
/*** 开始一个流程,使用自定义 Context** @param input   流程入参* @param context 自定义 Context* @param <C>     自定义 Context类型,需要实现 {@link com.aliyun.gts.x.arch.sketch.flow.Context} 接口* @return 流程出参*/<CextendsContext>Orun(Iinput, Ccontext);
/*** 没有业务含义,在流程图中添加一个开始节点** @return 自身,链式调用*/Sstart();
/*** 没有业务含义,在流程图中添加异常结束节点** @return 自身,链式调用*/Send();
/*** 没有业务含义,在流程图中添加正常结束节点** @return 自身,链式调用*/Sstop();
/*** 当流程开始的时候回调** @param consumer 回调函数* @return 自身,链式调用*/SdoOnStart(Consumer<?>consumer);
/*** 当流程结束的时候回调(无论正常还是异常结束)** @param onFinally 回调函数* @return 自身,链式调用*/SdoFinally(Consumer<?>onFinally);
}


ISequence


/*** @param <I> {@link IFlow}* @param <O> {@link IFlow}* @author yanpeng*/publicinterfaceISequence<I, O>extendsIFlow<I, O, ISequence<I, O>> {
/*** 下一步** @param function 下一步执行函数* @param <T>      函数入参类型* @param <R>      函数返回值类型* @return 函数执行结果*/<T, R>ISequence<I, O>then(NamedFunction<T, R>function);
/*** 下一步** @param name     函数名称(节点名称)* @param function 下一步执行函数* @param <T>      函数入参类型* @param <R>      函数返回值类型* @return 函数执行结果*/<T, R>ISequence<I, O>then(Stringname, Function<T, R>function);
/*** 获取所有已设置的 Function** @return 已设置function列表*/Collection<?extendsNamedFunction<?, ?>>functions();
}


IGraph

publicinterfaceIGraph<I, O>extendsIFlow<I, O, IGraph<I, O>> {
/*** 执行一个序列** @param sequence 需要执行的序列* @return 自身,链式调用*/<T, R>IGraph<I, O>sequence(ISequence<T, R>sequence);
/*** 执行一个只有一个Function的序列** @param name     Function名* @param function 执行函数* @return 自身,链式调用*/<T, R>IGraph<I, O>then(Stringname, Function<T, R>function);
/*** 执行排他分支,及只有一个分支符合执行条件** @param conditionName 条件描述* @param branches 分支* @return 自身,链式调用*/IGraph<I, O>exclusive(StringconditionName, IBranch<?, ?>... branches);
/*** 执行是否分支,排他分支的一种** @param on       是否执行的条件* @param positive 条件为真时执行* @param negative 条件为假时执行* @param <T>      初始入参类型* @return 自身,链式调用*/<T>IGraph<I, O>whether(NamedPredicate<T>on, ISequence<T, ?>positive, ISequence<T, ?>negative);
/*** 执行是否分支,排他分支的一种** @param conditionName 条件名称* @param on       是否执行的条件* @param positive 条件为真时执行* @param negative 条件为假时执行* @param <T>      初始入参类型* @return 自身,链式调用*/<T>IGraph<I, O>whether(StringconditionName, Predicate<T>on, ISequence<T, ?>positive, ISequence<T, ?>negative);
/*** 执行是否分支,排他分支的一种** @param conditionName 条件名称* @param on            是否执行的条件* @param positiveName  为真的节点名称* @param positive      条件为真时执行* @param negativeName  为假的节点名称* @param negative      条件为假时执行* @param <T>           初始入参类型* @return 自身,链式调用*/<T>IGraph<I, O>whether(StringconditionName, Predicate<T>on,
StringpositiveName, Function<T, ?>positive,
StringnegativeName, Function<T, ?>negative);
/*** 执行是否分支,排他分支的一种** @param conditionName 条件名称* @param on            是否执行的条件* @param positiveName  为真的节点名称* @param positive      条件为真时执行* @param negative      条件为假时执行* @param <T>           初始入参类型* @return 自身,链式调用*/<T>IGraph<I, O>whether(StringconditionName, Predicate<T>on,
StringpositiveName, Function<T, ?>positive,
NamedFunction<T, ?>negative);
/*** 两个分支都执行** @param seq1    分支1* @param seq2    分支2* @param reducer 分支聚合处理函数* @param <T>     初始入参类型* @param <R>     聚合结果类型* @return 自身,链式调用*/<T, R>IGraph<I, O>both(ISequence<T, ?>seq1, ISequence<T, ?>seq2, BiFunction<?, ?, R>reducer);
/*** 执行并行流程,及所有分支都执行** @param sequences 分支列表* @param reducer   分支聚合处理函数* @param <T>       初始入参类型* @param <R>       聚合结果类型* @return 自身,链式调用*/<T, R>IGraph<I, O>parallel(List<ISequence<T, ?>>sequences, BiFunction<?, ?, R>reducer);
}
目录
相关文章
|
8月前
|
监控 数据挖掘 BI
探索项目管理系统:解析五大功能,洞悉项目成功的关键
项目新手常忽视管理系统的价值,而高手已借助系统实现规划清晰。优秀的项目管理系统必备五大功能:项目WBS分解、图表报表、工时管理、团队协作和任务自动化。WBS能将复杂项目拆分成可管理任务,明确责任,评估时间和资源需求,便于跟踪进度。Zoho Projects作为示例,支持创建任务层级,利用甘特图和资源利用图监控进度和资源分配,工时管理则帮助控制项目时间和成本。同时,系统促进团队协作,如通过即时通讯和知识库增强团队凝聚力,而任务自动化则减少错误,提升效率。
113 1
|
数据可视化 IDE 安全
云巧-让开发更简单,更高效,更方便
近年来,快速迭代的新需求将引导企业改变其开发方式,进而转向使用支持快速、安全和高效的技术架构,组装式应用便成为了企业重要的战略技术趋势。组装式应用引入模块化的理念,使得各企业可以更敏捷、更有效地复用能力模块,提高商业的韧性和效率。云巧平台应运而生,能极大的改善开发环境,节省开发工作量,让开发更简单,更高效,更方便。
1939 0
|
24天前
|
数据可视化 数据挖掘 BI
团队管理者必读:高效看板类协同软件的功能解析
在现代职场中,团队协作的效率直接影响项目成败。看板类协同软件通过可视化界面,帮助团队清晰规划任务、追踪进度,提高协作效率。本文介绍看板类软件的优势,并推荐五款优质工具:板栗看板、Trello、Monday.com、ClickUp 和 Asana,助力团队实现高效管理。
46 2
|
2月前
|
监控 数据可视化 项目管理
|
20天前
|
监控 数据可视化
如何通过建模工具实现企业架构治理全流程管理
企业架构治理工具通过构建统一的架构语言、可视化建模、流程管理、资源整合和多场景分析,实现企业架构的全生命周期管理。该工具赋能企业数字化转型,确保业务、平台、数据及技术相互耦合闭环,提供从规划到决策的一站式服务,助力提升业务运营、优化组织管理和加速数字化建设。
38 2
如何通过建模工具实现企业架构治理全流程管理
|
1月前
|
运维 监控 供应链
如何通过安全看板优化企业安全管理流程?最受欢迎的工具推荐
随着企业对安全管理的重视,特别是在建筑、制造、能源和IT等行业,安全看板工具成为提升管理效率和保障员工安全的关键。这类工具通过可视化安全工作,优化任务分配、进度跟踪和风险识别,简化流程,提高团队响应速度,减少事故,降低成本。文章介绍了安全看板的概念、设计方法、案例及推荐工具(板栗看板、Zoho Projects、Smartsheet、Wrike和Airtable),旨在帮助企业选择合适的工具,提高安全管理效率。
如何通过安全看板优化企业安全管理流程?最受欢迎的工具推荐
|
3月前
|
移动开发 数据可视化 小程序
设计一次打通设计师+产品经理+技术开发团队必备可视化工具
设计一次打通设计师+产品经理+技术开发团队必备可视化工具
41 2
|
2月前
|
监控 数据可视化 搜索推荐
有哪些好用的流程管理工具?帮你快速搞定复杂工作流程
在职场中,流程管理是企业高效运转的核心。本文测评了五款热门流程管理工具:板栗看板、Trello、Asana、Jira 和 Notion,从功能、易用性和适用场景等方面进行全面分析,帮助你选择最适合的工具,提升团队协作和项目管理效率。
66 0
|
6月前
|
敏捷开发 前端开发 测试技术
软件开发工作流【详解】(含公司产品研发流程图、大厂研发架构图、大厂研发流程图)
软件开发工作流【详解】(含公司产品研发流程图、大厂研发架构图、大厂研发流程图)
1564 1
|
8月前
|
监控 数据可视化 数据挖掘
项目报表解析:项目管理中的得力助手
项目报表是展示项目进展和成果的关键文档,包含项目概述、进度、成本和质量信息,用于团队沟通和决策。常见类型有资源利用图、甘特图、看板图、WBS任务管理和项目进度图。报表通过多角度监控促进信息共享和协作,帮助管理者全面了解项目动态、优化资源利用、控制成本并跟踪进度。例如,Zoho Projects 提供自定义报表工具,支持多种模板和可视化选项,以增强项目管理效率。
65 6

热门文章

最新文章

下一篇
开通oss服务