该项目包含的通用模块代码等我有时间一并剥离贡献出来(基于WebSocket的通知引擎,工作流整合模块,自定义表单(http://cxlh.iteye.com/blog/306952),基于RBAC权限设计),最近太忙了,Web项目有一段时间没碰,有点生疏的感觉,主要在忙GQT项目,一套基于桌面开发的框架,详见http://cxlh.iteye.com/blog/2021463,写代码写的有点手酸的感觉。
基于Web的含工作流的项目看起来并不如想象的那么简单,主要需求:
- 灵活定制工作流,并跟踪流程进度;
- 每个Order含有历史轨迹记录,可在历史中查看;
- 工作流的Action灵活,认领任务不一定非要先提取表单,因为很多节点都只有几个动作,直接按钮操作即可;
- 待办事宜列表在不刷新页面情况下也能变动;
项目要求:
- 操作简单高效;
- 权限细节到按钮级别;
- 并发数少,不超过3000个在线用户;
主要可能使用到技术:
- 工作流引擎,我这里选用Activiti5,很灵活好用;
- 权限使用Spring Security,基于标签式管理权限很方便;
- 通知引擎使用WebSocket,基于Flash实时通信,基于socket.io;
- 权限粒度基于经典的RBAC;
- 总体框架Spring MVC+Mybatis;
实现的WebSocket的总体思路:
- WebSocket Server独立于Web项目,Web Server与WebSocket Server之间的局域网通信基于简单的Socket通信,这样这个组件可以完全解耦和通用;
- 当Web项目要Push消息到Client时,通过Web Server的Socket Client向WebSocket Server的Socker Server发送消息,然后WebSocket Server收到消息后解码,广播到所有浏览器;
我们实现的事件通知非常简单,设定全局变量并让浏览器侦听:
var G_WebSocket=false; var EVENT_ORDER_CHANGE_STATUS = "orderChange"; var EVENT_ORDER_CHANGE_AMOUNT = "amountChange"; var EVENT_ORDER_CHANGE_REFUND = "refundChange"; WebSocket.init = function(callbackFunc){ socket = io.connect(connUrl, connOptions); socket.on('connect', function() { G_WebSocket=true; callbackFunc("connect",null); }); socket.on('disconnect', function() { G_WebSocket=false; callbackFunc("disconnect",null); }); socket.on('clientQuit', function(obj){ G_WebSocket=false; callbackFunc("clientQuit",obj); }); socket.on('broadcast', function(obj) { callbackFunc("broadcast",obj); }); };
在需要侦听WebSocket接受Web Server推送消息的地方加上一个函数即可:
WebSocket.init(function(command,jsonObj){ if(command=="broadcast"){ if(jsonObj.e == EVENT_ORDER_CHANGE_STATUS){ //TODO:write your code here }else if(jsonObj.e == EVENT_ORDER_CHANGE_AMOUNT){ //TODO:write your code here }else if(jsonObj.e == EVENT_ORDER_CHANGE_REFUND){ //TODO:write your code here } } });
这样的结构要扩展推送服务很简单,比如按频道推送等,都可以很容易的扩展。
再看看看工作流,我们实现了activiti通用的申请提交任务流程和自定义表单功能,提取跟踪流程图功能等,这样你要设计一个新流程也变得非常简单,只需要在eclipse里划上工作流图,在后台发布,然后通过SpringMVC的RestAPI启动实例流程,申领完成任务等,如下图:
流程走到了分支的两个节点上,这样对后续新增的工作流提供了极大的遍历。
最后说说Spring Security,基于RBAC的权限体系搭建好后(可以用在任何管理系统中),要在页面中访问一个资源,首先判断一下是否有权限,如下HTML:
<sec:authorize ifAllGranted="r_pd"> <a href="#">resource access here</a> </sec:authorize>
<sec:authorize url="/XXX/XXX/XXX.html"> <a href="XXX/XXX/XXX.html'"> <span>XXX功能</span> </a> </sec:authorize>
前台由于项目比较小,没有用到js的MVC框架,如backbone等,这里就不再记录了。
相关推荐
web工作流管理系统开发之三 可视化流程设计器 web工作流管理系统开发之四 自定义表单 web工作流管理系统开发之五 开源osworkflow之用户系统改造 web工作流管理系统开发之六 表单权限与流程的权限控制
easyui实现的Activiti工作流引擎web版流程设计器 跨浏览器流程设计器 打开文件 processDesigner\wf\designer\index.html
《疯狂Workflow讲义——基于Activiti的工作流应用开发》的最后通过讲解一个办公自动化系统的开发过程,让读者更了解Activiti在实际生产中的使用,让本书的内容不仅仅停留在理论的层次,更为读者开辟了实践的道路。...
《疯狂Workflow讲义——基于Activiti的工作流应用开发》的最后通过讲解一个办公自动化系统的开发过程,让读者更了解Activiti在实际生产中的使用,让本书的内容不仅仅停留在理论的层次,更为读者开辟了实践的道路。...
《疯狂Workflow讲义——基于Activiti的工作流应用开发》的最后通过讲解一个办公自动化系统的开发过程,让读者更了解Activiti在实际生产中的使用,让本书的内容不仅仅停留在理论的层次,更为读者开辟了实践的道路。
《疯狂Workflow讲义——基于Activiti的工作流应用开发》的最后通过讲解一个办公自动化系统的开发过程,让读者更了解Activiti在实际生产中的使用,让本书的内容不仅仅停留在理论的层次,更为读者开辟了实践的道路。
《疯狂Workflow讲义——基于Activiti的工作流应用开发》的最后通过讲解一个办公自动化系统的开发过程,让读者更了解Activiti在实际生产中的使用,让本书的内容不仅仅停留在理论的层次,更为读者开辟了实践的道路。
《疯狂Workflow讲义——基于Activiti的工作流应用开发》的最后通过讲解一个办公自动化系统的开发过程,让读者更了解Activiti在实际生产中的使用,让本书的内容不仅仅停留在理论的层次,更为读者开辟了实践的道路。
首先介绍了传统软件过程中人为因素的影响,并给出了减少这种影响的解决方法:在工作流与软件过程相结合的基础上集成软件过程开发平台SPDET(Software Process Develop Environment Tool)。然后详细的讨论了SPDET的...
《疯狂Workflow讲义——基于Activiti的工作流应用开发》的最后通过讲解一个办公自动化系统的开发过程,让读者更了解Activiti在实际生产中的使用,让本书的内容不仅仅停留在理论的层次,更为读者开辟了实践的道路。
《疯狂Workflow讲义:基于Activiti的工作流应用开发》内容概括: 本书是一本介绍Java工作流领域的书,以Activiti为核心,内容囊括了多个流行的企业级Java EE框架,全书主要可分为以下几个部分。 第1部分:对...
本源码提供了一个基于Java和Snaker工作流的smart-web2流程引擎设计。项目包含1495个文件,其中包括530个Java源文件、286个PNG图片、185个JavaScript文件、181个JSP页面、124个CSS样式文件、75个GIF图片、49个HTML...
功能:工作流模板创建 创建工作流-》开始工作流-》流程审批-》驳回、拒绝、接受流程处理-》流程审批信息查看等等
提出的应用开发模式将Web开发划分为页面开发、流程控制框架和业务单元实现三个相互独立的部分,并讨论了如何利用Struts框架实现流程相关数据和业务数据之间的关联,以及基于工作流技术实现流程管理和控制。...
传统方式根据主流系统分别开发相应的系统耗时又耗力,为了高效开发并节约开发项目成本,本文采用Android+HTML5相结合的方式进行移动端Web系统的设计研发工作。 然而,由于HTML5的W3C标准规范还未制定,安卓系统中类...
基于Django+bpmn-js 开发的一个 Activiti 工作流作图管理系统,可以增删查改流程图,WEB版画图工具
基于web的流程定义工具,目前已经开发完成雏形,可以基于该雏形定制自己需要的web流程定义工具
电视节目的编辑和审批各个环节从采编成功到实际上报播出,环节复杂且对审查者不可见,制约了节目后期制作的全局把握和实时的沟通交流,本文所设计的基于web的传媒平台在解决上述问题的同时,有效推进了电视后期制作...
工作流平台基于Web的流程图自定义源程序代码,基于VS2005+C# 开发,供进行基于.NET平台的工作流系统开发使用,供广大程序爱好者学习使用!
基于Acticiti7的Web工作流引擎,完整开源。前端基于layuimini。使用BPMN-JS绘制业务流程。集成SpringSecurity安全框架