者:李玉亮
JDEasyFlow是企业金融研发部自研的通用流程编排技术组件,适用于服务编排、工作流、审批流等场景,该组件已开源(https://github.com/JDEasyFlow/jd-easyflow),目前在部门的内部业务系统和科技输出系统中广泛应用,其他部门也有使用。
它的特点是简单、灵活、易扩展,开发人员一般30分钟可入门上手,半天可掌握其原理。它分为一个核心模块和若干扩展模块,模块之间松耦合,开发使用时可按需选择、快速集成、渐进式应用,同时支持JSON内置规范和BPMN规范。它的实现原理也有其特色,后面有介绍。
支持顺序流转、条件流转、循环流转等。
??
支持脚本节点、用户节点和消息节点。
??
?脚本节点:节点执行时运行一段代码脚本
?用户节点:根据用户的操作指令触发节点执行
?消息节点:接收消息后触发节点执行
支持串行执行、并行执行、串并组合执行等。
??
支持单次交互一次执行多节点、多次交互一次执行一节点、多次交互一次执行多节点等。
??
JDEasyFlow支持子流程的场景,可将把复杂的流程节点拆分为子流程,便于业务逻辑抽象。
??
JDEasyFlow提供了流程任务审批的能力;常用的审批、撤销、驳回、会签、加签等功能都可支持;内置了简单的动态表单。既支持从页面发起和操作流程任务,也支持API的方式,京东OA审批系统也有对接。
??
JDEasyFlow的功能架构如下图,功能模块之间松耦合, 开发时可按需选择、快速集成、渐进式应用。最简单的使用方式为只在业务应用端引入jar包使用流程引擎。如果需要流程可视化功能,可集成BPMN规范模块,如果还需要流程实例持久化、流程定义持久化等更丰富功能,则可以集成其他相关模块。
??
JDEasyFlow的核心模块,此模块提供了基于JSON格式的JDEasyFlow规范进行流程编排的能力,其他模块均基于该模块扩展,相当于流程执行的发动机、CPU。该功能模块为独立组件,无数据库依赖,应用中引入jar包便可使用。
提供了基于BPMN规范进行流程定义和可视化的能力,流程可视化基于[bpmn-js](https://bpmn.io/),其本质为提供了将BPMN格式流程定义转换为JDEasyFlow格式的能力。该模块为独立组件,仅依赖流程引擎模块,无数据库和服务依赖,应用中引入jar包便可使用。
目前可支持常用的BPMN元素:
?任务:脚本任务、用户任务、消息任务
?事件:开始事件、结束事件、消息接收事件
?网关:排他网关、并行网关、包容网关
??
流程定义模块支持流程定义的中心化、版本化管理,流程实例模块支持流程实例的持久化和生命周期管理。该功能依赖数据库,有服务端和ERP管理端。
支持任务生成、任务分配等功能,常用的审批、撤销、驳回、会签、加签等功能都可支持。该功能依赖数据库,有服务端和ERP管理端。
JDEasyFlow的完整系统架构如下,主要有三个端:业务应用端、流程服务端、流程管理端,三个端可部署在单体应用中,也可分开部署。
??
· 关系型数据库(如Mysql)
· 缓存(如Redis或R2M)
· 服务通讯框架(如Java API调用或Http调用或JSF调用)
数据库数据模型比较简单清晰,见下图:
??
· 如果仅是服务编排场景,则流程的执行仅依赖内存和CPU,并且是在流程客户端执行,性能上依赖于客户端服务器的性能,普通笔记本实测1秒可执行一个流程请求的1w+个节点,1秒可执行1万+次含1个节点的流程请求
· 如果需要流程状态管理和流程持久化功能,流程引擎在执行时会到流程服务端查询和保存流程实例和流程节点的状态,性能上主要依赖于数据库的查询和插入效率
· 对于流程任务审批功能,流程的任务审批流转是在服务端执行,一方面取决于流程服务端的计算性能,另一方面同样取决于数据库的查询和插入效率
· 流程引擎属于无状态,可随应用实例线性伸缩
· 流程服务端应用实例支持线性扩展
· 流程数据库可通过分库分表的方式支持大数据量的增长
在具体实践中,建议部署统一的流程中心(见下图),对流程定义统一管理。各系统的应用只需集成流程客户端jar包进行流程节点开发和流程调用便可。如果系统只使用任务审批的功能,则只需要通过API和消息与流程中心交互便可。
??
在源码的test目录下有quickstart测试用例(easyflow\easyflow-flow\src\test\java\com\jd\easyflow\flow\quickstart\QuickStartTest.java),可直接运行或调试以了解使用方式和运行原理。具体实践步骤如下:
1、代码中引入easyflow-flow jar包,以maven为例:
<dependency>
<groupId>com.jd.easyflow</groupId>
<artifactId>easyflow-flow</artifactId>
<version>{替换为最新版本}</version>
</dependency>
2、编写流程定义文件,以node001->node002→node003的执行顺序为例:
{"id": "quickstart_001", "name": "Quick Start 001",
"nodes": [
{"id": "node001","name": "Node001","action": {"createExp": "new com.jd.easyflow.flow.quickstart.QuickStart001Node01Action()"},"start": true,"post": {"to": "node002"}},
{"id": "node002","name": "Node002","action": {"createExp": "new com.jd.easyflow.flow.quickstart.QuickStart002Node01Action()"},"post": {"to": "node003"}},
{"id": "node003","name": "Node003","action": {"createExp": "new com.jd.easyflow.flow.quickstart.QuickStart003Node01Action()"}}
]
}
其中QuickStart001Node01Action等为java节点动作类。完整的流程定义配置项可见: https://github.com/JDEasyFlow/jd-easyflow/wiki/Flow-engine-usage (公网)
3、编写应用启动时加载流程引擎的代码
FlowEngineImpl flowEngine=new FlowEngineImpl();
flowEngine.setFlowPath("classpath:flow/quickstart/quickstart_001.json");
flowEngine.init();
Spring环境可直接定义FlowEngineImpl bean.
4、编写具体流程调用执行的代码
FlowParam param=new FlowParam("quickstart_001");
FlowResult result=flowEngine.execute(param);
完整测试用例的执行结果打印如下:
[main ] INFO FlowEngineImpl - Start parsing definition files:easyflow-flow/target/test-classes/flow/quickstart/quickstart_001.json
[main ] INFO FlowEngineImpl - SART EXECUTE FLOW, flowId:quickstart_001 nodeIds:null
[main ] INFO BaseFlowRunner - EXECUTE NODE:node001
[main ] INFO QuickStart001Node01Action - Execute Node 001
[main ] INFO BaseFlowRunner - NEXT NODES:node002
[main ] INFO BaseFlowRunner - EXECUTE NODE:node002
[main ] INFO QuickStart002Node01Action - Execute Node 002
[main ] INFO BaseFlowRunner - NEXT NODES:node003
[main ] INFO BaseFlowRunner - EXECUTE NODE:node003
[main ] INFO QuickStart003Node01Action - Execute Node 003
[main ] INFO BaseFlowRunner - NEXT NODES:
[main ] INFO QuickStartTest - Execute finish, current node is:node003
打开easyflow-flow-bpmn/BPMNDesigner.html流程设计器. 点击导入按钮,导入easyflow-flow-bpmn/src/test/resources/flow/quickstart/quickstart_001.bpmn文件,可在设计器中看到和以上JSON定义等价的BPMN流程定义.
??
代码集成使用时只需要将FlowEngineImpl的flowParser设置为BpmnFlowParser.
以上只是流程引擎和BPMN模块的简单使用示例,JDEasyFlow还包含其他模块、可支持很多的配置项和使用场景,更多使用可见最后的对接使用介绍.
目前市面上的流程编排组件基本都是基于图(边和顶点)结构的,而本组件是参考了计算机指令执行模型而实现,借鉴了程序计数器的实现原理,引擎内部通过类似程序计数器(PC)的待执行节点栈来维护后继节点;可以理解为是一种高级业务编程语言,它同时也是图灵完备的。
流程引擎核心模型名词只有一个:节点(Node),节点的功能为执行逻辑并输出后续节点 。
??
开发态可定义有限的节点,通过每个节点与其后续节点连接形成有向图;运行态按规则逻辑进行节点流转,支持并行执行,支持顺序、条件或循环,支持fork-join。
??
概念:
?流程:一个业务流程的抽象
?节点:流程的组成单位,一个节点能够执行节点动作同时可返回后继节点
节点内部构件:
节点内部构件的组成是可自定义的,流程引擎提供了缺省实现,其内部构件包括了前处理器(PreHandler)、节点动作(NodeAction)、后处理器(PostHandler)
??
?前处理器:判断该节点是否可以执行动作
?节点动作:真实的业务功能处理
?后处理器:负责计算后续节点
流程引擎执行逻辑
流程引擎有一个或多个流程触发节点,流程触发后执行如下逻辑:
1. 初始化流程上下文
2. 得到流程起始节点ID,放入执行栈
3. 如果执行栈为空,则返回,否则执行当前节点
1) 预检查
2) 执行Action
3) 计算后继节点ID并返回
4. 将后继节点放入执行栈,从栈中取出待执行节点,跳到第3步
因此JDEasyFlow整体的特色为简单:
?模型简单:核心模型概念就是节点的流转
?扩展简单:提供了监听器、过滤器功能,方便横向切面;节点支持自定义实现
?定义简单:只需要通过JSON进行节点流转逻辑配置便可,也支持BPMN格式
?运行简单:代码调用流程引擎,传入流程ID和业务参数便可
?使用简单:引入组件包便可使用,比较轻量
??
理论上JDEasyFlow可满足任何流程场景,它主要可解决三类问题:
?流程可编排:将业务流程抽象为软件流程,保证软件是现实的真实反映;不同场景可定义不同流程,且流程易修改
?功能松耦合:将业务节点抽象为软件流程节点,一方面实现功能的松耦合,另一方面实现节点的可复用
?流程可视化:所见即所得,方便业务产品人员和软件研发人员基于同一语言的交流,也便于流程监控
在实际软件系统开发过程中,如果有如下诉求,可考虑使用流程编排:
?业务流程是有明显的多个节点组成
?希望流程可灵活变更
?业务流程级别比程序流程高一层,在编程语言级别难以聚合和治理(如一个流程即需要前台操作,又有外系统参与,又有后台操作,在实现上入口分散)
JDEasyFlow的所有文档可见: https://github.com/JDEasyFlow/jd-easyflow/wiki
欢迎大家对接使用,有相关使用问题可联系: liyuliang5@jd.com
西班牙生活首先需要合法居留,但是刚到西班牙的小伙伴常常陷入不知道从哪里获得信息的困境,小金毛这里从居留及其他证件办理预约起步,向大家逐步介绍在西生活所需证件及如何获得它们。
首先我们需要保存有用的网址:
1. 西班牙居留/证件预约入口
https://sede.administracionespublicas.gob.es/icpplus/index.html
这个网址是专门用于预约的,全西班牙的预约都从这一个口进,进入后会有地区选择,大家可自行选择自己所在的城市。以马德里为例,选定后会提示用户这一居留预约主要涉及:
续学生居留
申请长期居留
续工作居留
续家庭居留
返乡证预约
虽然西班牙网上办公平台实际上还有一套可以简化申请/更换居留的全线上操作流程,但是线上操作流程需要当事人办理电子身份证,所以这里暂且不提,只讲解传统人工线下居留更换如何操作。
选定预约城市/大区后自然会跳出“预约事项”一栏让大家选择,这里选取部分华人常用的预约事项加以翻译:
Acceso A 1a Aut. de Residencia de Larga Duración y Larga Duración UE
第一次西班牙/欧盟长期居留申请
Autorización de Residencia de Menores Nacidos en Espa?a, Hijos de Residentes
西班牙出生的未成年人居留申请/居留持有者子女居留申请
Autorizaciones de Regreso
返乡证申请
Duplicado de Tarjeta de Identidad de Extranjero
外国人身份证补办申请
Prorroga de Estancia por Estudios
学生居留更换(延期)
Reagrupación Familiar
家庭团聚
Renovaciones de Autorizacion de Residencia con Trabajo
工作居留更换
Toma de Huellas (Expedición de Tarjeta) y Renovación de Tarjeta de Larga Duración
长期居留更换及按手印(长期居留发放最后一步)
2. 几个需要注意的tips
首先留学生朋友会发现,虽然上面给出的网站上有“学生居留更换”这个选项,但是实际上在一些城市已经启用网上预约更换了,可以直接携带相关材料,不用预约,前往材料递交部门即可,比如马德里。
网上更是给出了非常详尽的递交地址指导:
小金毛也建议大家不要一拥而上都前往某一个地点递交材料。选择离自己住家较近的市政府递交材料也是很好的选择,一则可以避开居留递交高峰(例如开学季),二则居留审批速度也可能受影响。
有关学生居留多说一句,实际上我们拿到的“学生居留”只相当于“暂住证”,西文表现更为明显,学生居留是ESTANCIA de estudiante,而真正的居留是RESIDENCIA,所以不少机会需要合法Residencia的时候,学生居留实际上并没有用处。
3. 预约进行中
出去学生居留更换这类已经弃用预约系统的手续,其他手续在网站上可以直接预约,预约进行时我们需要注意网站上跳出的提示。这里以家庭团聚申请为例:
一般这类信息跳出来的时候,小金毛建议大家先把需要下载的表格(比如这里注明的EX-02表格)下载保存起来。如果怕自己忘记,最好整个页面直接截图保存。一切确认之后,点击右下方的Aceptar按钮继续操作。
之后的步骤基本相同,填写个人资料,家庭信息,工作情况,住址,申请理由等等。这里仍旧给大家一些小提示,在填写西班牙人出具的表格时我们常会遇到姓名不知道哪个在前哪个在后的情况,这种情况下只需要记住,将姓大写即可。例如中文名为王明,如果习惯性先写姓了,可以写作WANG Ming,如果按照国外方式将姓放在后面了,可以写作Ming WANG。这样对方一定知道大写拼写的才是姓氏,也就不会搞混了。
4. 居留办理查询
说到居留办理查询,大家还需保存一个网址:
https://sede.administracionespublicas.gob.es/infoext2/jsp/indexnie.jsp
这一网址上可通过居留递交日期或是递交序列号查询居留办理进度。进入网址后按照提示直接输入相关信息即可查询。如果不记得自己递交居留更换的时间,可以找出当时拿回的居留递交单,上面一般会盖/贴有当日的日期签章。西班牙居留更换耗日时长,经常是一年一换,一换半年到一年,在这期间如果还想出镜西班牙就需要办理返乡证,有关返乡证的办理细节可以参考我们之前的文章。
(本文已授权新欧洲-西班牙首发,如需转载,请注明来源。)
历认证的认证范围
1. 在外国大学或其它高等教育机构攻读正规课程所获相应学历学位证书或高等教育文凭;
2. 在经中国国务院教育行政部门批准的中外合作办学机构(项目)学习所获国(境)外学历学位证书,在经中国各省、自治区、直辖市人民政府审批,并报中国国务院教育行政部门备案的高等专科教育、非学历高等教育的中外合作办学机构(项目)学习所获国(境)外高等教育文凭;
3. 在中国澳门特别行政区及台湾地区大学或其它高等教育机构攻读正规课程所获相应学历学位证书或高等教育文凭。在中国香港特别行政区大学或其它高等教育机构攻读正规课程所获学士以上(含学士)层次的学历学位证书
哪些证书不在学历认证的范围内
1. 参加外语培训所获得的结业证书;
2. 进修人员、访问学者的研究经历证明和博士后研究证明;
3. 预科证明;
4. 荣誉学位证书、荣誉称号;
5.未经中国政府相关教育行政部门批准的办学机构(项目)颁发的国(境)外学历学位证书或高等教育文凭;
6. 通过函授、远程教育及网络教育等非面授学习方式获得的国(境)外学历学位证书或高等教育文凭;
7. 各类职业技能或职业资格证书。
【特别补充】:教育部明确留学生受疫情影响,通过网络在线学习部分课程,不影响学历认证。详情请见下文:
“ 最近有很多学生表示疑惑,本该出国读书,由于受疫情影响只能在国内上网课,导致自己的境外停留时间达不到要求,这样是否会影响将来的学位学历认证?
中国教育部于2020年12月22日举行新闻发布会,教育部相关负责人表示,全日制留学生因疫情在国内上网课,不作为影响其学位学历认证结果的因素。
据教育部国际合作与交流司司长、港澳台办公室主任刘锦介绍,新冠肺炎疫情的全球大流行不仅给正常的教育合作交流按下“暂停键”,而且给跨国(境)流动的各类学生、教师的健康以及学习生活和工作带来严峻挑战。面对疫情,教育部、地方教育行政部门、各级各类学校以及驻外使领馆的教育部门迅速行动、全力应战。
针对很多在读留学生担心在国内上网课是否会影响自己将来学位学历认证的问题,刘锦明确表示不会影响。
教育部留学服务中心主任程家财补充说明此前办理学位学历的认证标准和办法并没有改变。该政策仅限于对全日制学生,仅限于疫情。
其实,早在2020年4月3日,教育部留学服务中心已发出通知,针对疫情影响下留学生学位认证做出说明。
*资料来源中国教育部留学服务中心。
所需材料(中国大陆学生)
1、需要认证的国(境)外学历学位证书或高等教育文凭(以下简称文凭证书)。上传文件格式为:pdf格式,不大于5M。
2、国(境)外学习期间使用的护照(通行证)及签证(签注)。上传文件格式为:jpg格式,每张不大于1M。
3、本人近期标准证件照片一张,底色不限。上传文件格式为:jpg格式,不大于1M。
4、按留服中心要求填写并签署的文凭证书核查授权声明。上传文件格式为:pdf格式,不大于1M。
5、在读证明
国外通用版
港澳台地区版
国外通用版下载地址:
http://zwfw.cscse.edu.cn/cscse/resource/cms/article/414610/452751/2020082115211020249.pdf
港澳台地区版下载地址:
http://zwfw.cscse.edu.cn/cscse/resource/cms/article/414610/452751/2020082115201511669.pdf
6. 其他相关材料。上传文件格式为:jpg格式,每张不大于1M。
? 详细材料要求:
http://zwfw.cscse.edu.cn/cscse/lxfwzxwsfwdt2020/xlxwrz32/sqcl/ndjm/442412/index.html
学历认证的申请流程
好消息!为了方便办理学历认证的同学,目前申请学历认证的手续已经大大简化。
同学们只需要在线上传认证材料的电子版,并支付相应费用,就可以进入认证审批程序,不需要亲自到认证机构递交纸质材料啦!
办理流程一览
1
第一步:注册账号
登录“教育部留学服务中心网上服务大厅(试运行)” 页面,注册个人账户
系统入口:
https://zwfwbl.cscse.edu.cn/toLogin?sysType=front
2
第二步:登录
使用注册的账户密码信息登录账号
3
第三步:办理
添加认证办理申请
4
第四步:填写信息
按官网提示提交信息
5
第五步:上传材料
材料可通过系统上传电子版,也可以到北京检验机构递交材料。
6
第六步:支付费用
学历认证费用为360元/份
使用带有“银联”标识的银行卡(借记卡或信用卡)进行支付
7
第七步:查询进程
递交认证申请后,可以经常登录认证系统去查询最新的认证进度及状态,看看是否还需要补充其他材料。
步骤:登录系统-点击右上角“用户中心”-“我的申请”
8
第八步:领取结果
当申请人在系统中看到“认证结果”后,即可点击查看证书
认证结果将以电子证照形式显示,不再提供认证结果。
学历认证并不是强制要求办理的,但是通常国内的大型企业和事业单位招聘时都需要查看,所以建议同学们毕业后尽早办理。
*请认真填写需求信息,我们会在24小时内与您取得联系。