前言:
首先感谢JEECG开源平台,本平台在架构设计上参考学习了JEECG开源平台的思想,后台使用SpringMvc+Mybatis,前端使用jquery+easyUI+ace,重新设计了一套新的代码生成器机制和数据库交互机制。
另外也要感谢工作流引擎StarFlow,基于该引擎的基础上,重新设计了一套在线流程定义、展示、分发等方案和重构了流程分发机制满足会签、回退等能力,使本平台的工作流引擎支持在线画流程,自定义表单,表单挂接,业务流转,流程监控,流程跟踪,流程委托等能力。
简介:
本平台是一款基于自动生成代码的J2EE快速开发平台, 可以帮助解决Java项目80%的重复工作,让开发更多关注业务逻辑。既能快速提高开发效率,帮助公司节省人力成本,同时又不失灵活性。它可以用于所有的Web应用程序,如:MIS,CRM,OA,ERP,CMS,网站后台,互联网后台等等,当然您也可以对她进行深度定制,以做出更强系统。
开发平台特点:
1、代码生成器,快速提高开发效率,减少重复代码编写;
2、在线流程设计,实现在线画流程,自定义表单,表单挂靠,业务流转;
3、UI快速开发库,针对WEB UI进行标准封装,页面统一采用UI标签实现功能,包括数据datagrid,表单校验,Popup,Tab等,实现JSP页面零JS,开发维护非常高效;
4、自定义表单,支持用户自定义表单布局(无需编码);
5、在线配置报表(无需编码,通过在线配置方式,实现曲线图,柱状图,数据等报表);
6、数据权限(精细化数据权限控制,控制到行级,列表级,表单字段级,实现不同人看不同数据,不同人对同一个页面操作不同字段;
7、CAS集成;
8、个推集成;
9、MQ集成,支持Apache ActiveMQ、rabbitmq等;
10、短信及系统消息(web端、APP)管理,所有功能均可配置和监控。
11、Dubbo分布式服务集成,满足微服务开发。
重点技术介绍:
主要包括单点登录、webservices、MQ集成、数据库分库分表设计、平台消息管理、分布式服务Dubbo集成、工作流引擎等
一、单点登录
单点登录是一种统一认证和授权机制,指访问不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个统一的登录认证之后,再访问其他应用中的受保护资源时,不再需要重新登录验证。解决了用户只需要登录一次就可以访问所有相互信任的应用系统,而不用重复登录的问题。本平台基于CAS Server开源的基础上,重新制定了平台集成的机制。
二、Web Services 使用
本平台支持两种webservices集成,包括Apache Axis和CXF。
1、Apache Axis是一个开源的WebSerbive运行引擎,为WEB应用程式提供Web服务的接口。Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持spring、JSON等技术。
2、 Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构。它允许创建高性能和可扩展的服务,您可以将这样的服务部署在 Tomcat 和基于 Spring 的轻量级容器中,以及部署在更高级的服务器上,例如 Jboss、IBM® WebSphere® 或 BEA WebLogic。
三、MQ集成
本系统与外部异构系统间的 SOA 设计,主要是设计一个基于webservice的集成机构和MQ总线来实现各业务系统间的交互,支持Apache ActiveMQ、rabbitmq的基础。MQ用于多个系统之间通过定时任务来同步数据,解决多系统、异构系统间的数据交换(消息通知/通讯)问题。
以上是MQ的代码集成示例,
其中MonitorLogMessageHandler.java为监听到接收的数据
MQSendUtil.java为下发同步数据的公共类
四、分库分表介绍
分库分表插件诣在为ibatis实现数据水平切分的功能。数据的水平切分包括多数据库的切分和多表的数据切分。已经实现了单数据库的数据多表水平切分。可以以插件的方式和mybatis3.x进行整合,对mybatis的代码无侵入,不改变用户对mybatis的使用习惯。插件的使用与原生的mybatis3没有区别,使用者只需要将插件以Mybatis插件的方式引入进来,实现路由策略接口,实现自己的路由策略即可,此外还需要一个配置文件,定义哪些sql映射操作需要使用路由策略。
- 配置与使用
- 自定义mybatis拦截器
mybatis-config.xml配置拦截器如下:
<plugins>
<plugin interceptor="com.bdre.core.interceptors.plugins.tablesplit.split.TableSplitInterceptor">
</plugin>
</plugins>
- 配置分表策略
api-spring-servlet.xml文件配置分表策略,可根据实际项目要求,自定义编写自己的分表策略类:
<bean id="strategyManager" class="com.bdre.core.interceptors.plugins.tablesplit.split.StrategyManager">
<property name="strategies">
<map>
<entry key="YYYY" value="com.bdre.core.interceptors.plugins.tablesplit.split.impl.YYYYStrategy" />
<entry key="SMS" value="com.bdre.core.interceptors.plugins.tablesplit.split.impl.SmsStrategy" />
<entry key="Remainder" value="com.bdre.core.interceptors.plugins.tablesplit.split.impl.RemainderStrategy" />
<entry key="InBox" value="com.bdre.core.interceptors.plugins.tablesplit.split.impl.FlowInBoxStrategy" />
</map>
</property>
<property name="tables">
<map>
<entry key="WF_WORKITEM" value="InBox,PROCESSINSTID" />
<entry key="WF_ACTIVITYINST" value="InBox,processInstId" />
<entry key="T_SMS_MANAGE" value="SMS,esStatus" />
</map>
</property>
</bean>
五、平台消息管理
主要通过消息管理插件,聚合整个系统的所有消息(包括系统消息、邮件、短息、APP消息提醒),统一发送,统一维护,统一监控。
- 消息发送定时器配置
spring-mvc-timeTask.xml文件增加,定时器配置:
<!-- 定时任务配置 smsSendTask 可配置到管理界面 -->
<bean id="smsSendTaskJob"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="smsSendTask" />
<property name="targetMethod" value="run" />
<property name="concurrent" value="true" />
</bean>
<bean id="smsSendTaskCronTrigger" class="com.bdre.core.timer.DataBaseCronTriggerBean">
<property name="jobDetail" ref="smsSendTaskJob" />
<property name="cronExpression" value="0 0/1 * * * ?" />
</bean>
<!-- 定时任务调度器 -->
<bean id="schedulerFactory" lazy-init="false" autowire="no"
class="com.bdre.core.timer.DataBaseSchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="taskDemoServiceTaskCronTrigger" />
<ref bean="smsSendTaskCronTrigger" />
</list>
</property>
</bean>
在定时任务页面,增加以上定时器的配置,可配置间隔多长时间发送执行一回:
- 相关页面说明
包括以下功能:
- 消息分类管理:可按照本项目的模块进行分类分级管理,方便使用及维护管理。
- 消息模板管理:参数化消息内容,灵活配置,适应业务的变化。
- 消息推送配置:可自定义预警信息接收用户、接收角色、接收机构、自定义条件SQL;可选择手机短信、APP、邮件、系统登录、功能触发点等多种预警信息通知方式;可设置消息类型(事前、事中、滞后、其他)、发送模式(即时、定时)、消息等级(一级、二级、三级)
- 消息发送监控:提供对系统所有发出消息的监控,错误预警消息可重发。
六、分布式服务Dubbo集成
- Pom.xml文件增加dubbo依赖
<!-- dubbo dependency --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.6.0</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.0.35.Final</version> </dependency> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.2</version> </dependency> |
- 服务提供者配置
- 消费者配置
七、工作流引擎
本平台集成自主研发的工作流引擎,实现定义的流程包括计划下发业务、工序执行情况反馈业务、各类信息发布审批、施工过程管理相关表单的流转等。具有多种协同处理的方式和协同策略,业务表单和流程能够实现灵活的自定义。通过自行开发工作流引擎实现主动式的任务指派、提醒和审批,满足表单和业务过程管理。
工作流程引擎的主要功能是搭载组织的业务运行和管理工作流程。在管理平台架构下的流程引擎与工作流Workflow有很强的关联,可以视为是Workflow的应用封装和扩展。具体流程引擎架构如下所示:
工作流引擎满足以下功能需求:
(1)流程触发
工作流引擎支持人工、定时或者系统事件等手段触发特定业务流程的启动。工作流引擎支持人工或者系统事件等方式触发调用该接口启动某个业务流程,工作流也内置了一个定时器,也可以在定时器中配置启动某个流程。
(2)表单绑定
每个流程能够和一个或多个处理表单或业务表单绑定。流程引擎中每个流程的每个活动节点通过交互式组件(url方式)绑定表单,不同的节点可以绑定不同的交互式组件,也即绑定不同的表单
(3)人员控制
在环节中指定该环节操作的人群,如特定层级、特定角色、操作者所在部门的特定人群,如本部门人员、部门主管、部门内特定角色等。
流程引擎通过活动的任务分派来指定环节的执行人员,设置方式包括:流程启动人员;选定活动的执行人员;选定的人员;部门下人员;角色下人员;部门内角色下人员;人员相对关系(比如部门领导、部门主管领导);特定级别用户等不同的方式,通过变量动态绑定的方式动态关联操作者所在部门;对于特别特殊人任务安排也可以通过API进行扩展
(4)子流程功能
系统支持子流程功能,一个流程可以进入已设置好的另一个子流程,当完成子流程的执行后,能够回到原来的流程执行点继续执行。
流程引擎同时支持活动集和子流程,如果单个活动中环节很多可以通过活动集将流程分层描述,如果系统中多个流程有一些相类似的部分,可以将这些部门各自设计为子流程,通过主流程集成子流程从而实现流程的重用,子流程的集成方式分为同步和异步两种模式,同步模式的流程主流程进入子流程后就会一直等到子流程完成返回后再往后继续流转。
(5)流程跟踪
用户可以跟踪一个事务整个处理过程经过的业务环节,以及每个环节用户的处理情况,包括接收/发送时间、操作内容和操作结果等。支持图形方式显示流程的执行路径。
流程引擎供了两种流程实例的监控图,流程实例图和流程历史图,通过流程实例图可以直观的看到我们设计的流程,在图中标识了流程实例流转的痕迹以及环节的已完成、处理中、未激活等状态,同时为了解决流程实例图中对循环的表达不足,还提供了流程历史图,以图形的方式逐步记录了从流程实例启动以后的每一步操作的执行人、执行时间、执行情况等信息
(6)任务代理
用户可以在不能处理任务时,指派一项或者多项任务给不同的其用户代办,并且系统能够为委托人跟踪和显示代办人的代办结果;同时委托人能够阅读被代理人处理的文档。
提供了工作委托的功能,用户可以设置在某个时间段内将一项、多项或者全部任务委托给其他人执行,也可以分别设置委托给不同的人。引擎也提供了接口委托人能够查询委托的事项信息。
(7)任务列表
系统能够提供的任务列表包括:待办任务、跟踪任务(本人或同角色处理过的,尚未结束的任务)、待阅任务、已办任务、已阅任务、拟稿任务等。
提供了工作任务列表的灵活查询接口API,根据该接口中设置不同的查询条件,可以依据工作任务项的状态定义出待办任务,跟踪任务、已办任务等,也可以根据状态和环节类型定义出待阅任务、已阅任务、拟稿任务等。
(8)催办和督办
系统提供催办和督办功能,对于超过规定办理时间文件,系统能够自动进行提醒或者启动督办流程。提醒的方式包含手机短信提醒。
中流程和活动都可以设置完成时限,并提供业务日历的绑定以支持工作日的计算,一方面可以直接配置在超时的时候已短信或者邮件的方式提醒相关人员,也可以通过超时分支启动督办流程。
(9)撤回流程
在下一步处理人未处理的前提下,各环节的处理人可以撤回后重新处理。
流程引擎提供“撤回”的接口,在下一步处理人未处理的前提下,各环节的处理人可以撤回后重新处理。同时配置的流程实例管理人员也可以暂停、终止、恢复暂停、重新调整执行人员、跳转流程的当前执行环节等,同时也提供了日志模块记录每一次对流程有影响的操作
(10)操作控制
流程管理人员可以控制各个业务环节处理的具体内容,如允许(不允许)进行审核、填写意见、撤回、中止流程等操作。
系统提供完善的流程管理和干预功能,包括流程的强制跳转、流程的挂起、恢复、终止和回退等操作。
(11)流程设计限制
所有流程必须基于业务进行设计,在流程设计中,不得在环节中直接指定操作人员的姓名或部门名称。采用角色或业务名称代替,系统中提供角色列表和业务名称与部门之间的关联表。
工作流引擎集成企业组织结构,配置企业的部门、角色以及人员的关联关系;良好的支持基于角色和业务名称的流程节点授权方式。
(12)业务表单、流程设置
包括表单定制、业务流程定制、表单与流程之间关联。
支持流程定制、流程和表单关联关系的定制,提供了面向开发人员的通用流程设计器和面向业务人员的专用流程设计器,通过专用流程设计器,没有任何技术背景的业务人员可以轻松的定制和调整业务流程,也可以通过交互式组件的配置绑定流程和表单之间的关联。
(13)工作流版本控制
工作流程具备版本控制能力,在启用新版本流程后,同时终止旧版本使用,但不影响已按旧版本流转的文档或表单的继续流转。
流程引擎有完整的版本管理机制,一方面各版本相互隔离,发布启动新版本流程后,新创建的流程实例默认绑定最新的版本,原有流程实例依然按照老版本流转,同时为满足特殊要求,同时也提供了版本迁移的功能,用户可以选择迁移已在运行的老版本的流程实例绑定新的版本,按照新的版本继续流转。
(14)办理提醒
在表单递交同时,作为操作提醒将自动向下一环节的处理人发送即时消息或手机短信。
流程引擎有完善的提醒机制,一方面可以设置接收任务、完成任务等时间点,另一方面也可以设置邮件或短信(包括即时消息)提醒方式,结合接收任务时间点和短信提醒方式就可以满足在表单递交同时,作为操作提醒将自动向下一环节的处理人发送即时消息或手机短信。