当前位置:文档之家› OA办公自动化系统

OA办公自动化系统

联合永道办公自化系统V1.0

说明书

1 引言

传统的办公模式主要以纸介质为主,在信息革命的浪潮中,显然已经远远不能满足高效率、快节奏的现代工作和生活的需要。如何实现信息处理的自动化和办公的无纸化逐步得到了人们的重视。Internet/Intranet的迅猛发展,为信息的交流和共享,团队的协同运作提供了技术的保证,同时也预示着网络化办公时代来临。利用网络通讯基础及先进的网络应用平台,建设一个安全、可靠、开放、高效的信息网络和办公自动化、信息管理电子化系统,为管理部门提供现代化的日常办公条件及丰富的综合信息服务,提高办公效率和管理水平,实现企业各部门日常业务工作的规范化、电子化、标准化,增强档案的可管理性,实现信息的在线查询、借阅,最终实现“无纸”办公。

“无纸”办公不仅比较环保,节省了纸张的“浪费”,而且能够缩短办公人员的办公时间,对于提高企业效率上有一定帮助。所以企业引进办公自动化系统有一定必要性。传统技术基本可以完成办公自动化系统,但开发难度,开发周期等都比较大,它适合于开发难度比较低而且需求比较明确的系统。

对于系统权限方面,市面上存在一些比较简单的权限设计方案,虽然从根本上能实现权限的授权和验证,但不利如权限模块的可扩展性。或者存在过于复杂,但无用的设计,不利于系统的可理解性,也不利于维护。所以本系统从对RBAC模型的理解上扩展,形成一套扩展性和维护性相对较好的模型,既能满足大部分国内市场的需求,也能很好的完成权限的授权和验证。

2 联合永道办公自化系统需求分析

2.1系统功能模块

序号

功能名称

功能需求

标识

优先

简要描述

个人办公

我的办公桌

高打开个人办公桌,在个人

办公桌上,是到达各种管理功

能的快捷链接我的便签低随手记录的信息

我的任务低任务管理

通信录低个人通信录

公文管理

公文维护

高各种类型的公文管理、审

批公文等归档处理

高对已完成流转的公文进

行归档

公共信息

信息管理

中进行新闻、通知、期刊、

知识和规章制度的发布和管

理,使企业的信息和知识快速

传播和转移。

行政办公

会议管理中管理会议室的占用情况资产管理低管理企业的资产信息用品管理低管理企业用品的申请车辆管理低企业车辆的管理

图书管理低图书的借出管理

消息管理

收件箱中接收的所有消息

发件箱中发送的所有消息

垃圾箱中已删除的消息

聊天记录中跟某个用户的聊天记录

工作流程

流程管理高如何定义企业的流程(可

以灵活定义各种流程)

表单定义高如何针对不同的流程定

义表单

组织管理

机构管理高公司组织架构管理人员管理高公司人员管理

权限管理

模块管理高系统所有模块的管理

角色管理高系统的角色定义、给角色

分配权限等

用户管理高系统帐号的分配、给用户分配角色、给用户分配权限等

系统管理

密码修改低

代码定义低

系统初始化低

人事档案

人员履历低

转正申请低

离职申请低

员工考勤低

联合永道办公自化系统需求还是比较多的,在分析需求后划分系统模块,根据模块的特点和所用技术划分出优先级并制定开发计划,从优先级比较高的模块开始着手开发。这样从难到易的开发模式由利于节省开发成本,和缩短开发迭代的周期。

联合永道办公自化系统将只实现优先级为高的需求。在工作流模块中,流程管理里将实现流程的添加,更新和删除,通过结合JBPM使得流程管理功能更加强大;然后表单定义描述的是对动态表单的实现,每个流程可以对应不同的表单,这完全是用户自定义的。在组织管理模块中,机构管理将实现机构的增,删,改,查操作,鉴于机构有层次关系,机构的显示将会采用树形结构显示。在权限管理模块中,分别提供模块,角色和用户的增,

删,改,查操作,用户定义好模块之后,在角色管理里,能够按照不同的角色分别相应的模块增,删,改,查操作,为了满足更大的一部分需求,本系统除了可以为角色授权之外,还可以给用户单独授权,在用户管理里,显示所有用户,并能为之授权。最后在公文管理模块中,用户可以创建公文并绑定到某一工作流里,通过对工作流的触发,把公文提交到下一流程,最终实现“无纸“办公的目的。

3 系统总体设计

3.1系统架构设计

JAVA技术发展到今天,已有很多成熟的技术和思想,在技术和思想上两者可谓相辅相成,互相影响,缺一不可。技术和思想的不断革命为J2EE系统的开发注入不少动力,并且不断带来变化。从以前的纯JSP开发到JSP+JAVABEAN,再到MVC技术的普及等等,都带来革命性的影响。到了现在,J2EE各项技术和思想上的不断革新,程序员们陆续提倡要回归软件本身,回归软件的核心,即为用户解决领域相关问题的能力,其他的一些特性,尽管他们也许是必需的,但也是用来支持这个核心目的的。

解决领域相关问题要求我们更加关注领域对象模型的建模,而解决来自领域方面的问题的软件本分通常只占整个软件系统的一小部分,这于它的重要性相比是不成正比的。为了应用优秀的领域建模技术,我们需要把领域对象跟系统的其他功能分离出去,才能避免另领域概念雨其他跟软件技术相关的概念混淆或者在庞大的系统中失去对领域的把握。

这种成熟的领域分离技术早已出现,它为我们打下良好的基础-----系统架构分层。

传统三层架构早已在J2EE项目中得到广泛应用,它主要分为:表现层,业务逻辑层和持久化层。将一个复杂的程序进行层次划分。为每一层进行设计,每层都是高内聚的而且只依赖于它的下层,每层具体职责为:

表现层负责向用户显示信息,并解析用户命令。定义软件可以完

成的工作,并指挥下层操作领域对象来解决问题。

业务逻辑层该层对业务影响深远,他包含业务规则或者知识,完成系

统主要功能需求,操作领域对象互相合作解决问题

持久化层为上层提供通用技术能力,把领域对象持久化保存到数据

库中,为下次访问该对象提供条件

各层分工合作,层于层之间做到低耦合,每层间的类做到高内聚,使系统可维护性和扩展性得到巨大的提升。

3.2本系统架构设计及系统技术介绍

本系统采用JAVA语言进行开发,面向对象特性为系统的可维护性和可扩展性提供了根本的支持,而且JAVA开放源代码特性,使其迅速发展,涌现大量成熟技术支持,尤其在JAVA EE领域,更可谓前无古人。

JAVA EE包含13种技术,当然现在可能已经不止,当今JAVA EE领域里更多的是使用Struts,Hibernate,Spring的架构方式,现在分别介绍一下这三种技术,然后就这三种技术可以解决的问题作陈述,再而讨论本系统采用这三种技术的必要性。

3.3 Struts

Struts作为一个开放原代码的应用框架,在最近几年得到了飞速的发展,在JSP Web 应用开发中应用得非常广泛,有的文献上说它已经成为JSP Web应用框架的事实上的标准。

Struts是一个实现了Model2的MVC框架,要介绍Struts的话,就要从JSP Web应用的两种基本的结构模式:Model 1和Model 2说起,

Model 1结构如图1所示:

mode1 1是一个以JSP文件为中心的模式,在这种模式中JSP页面不仅负责表现逻辑,也负责控制逻辑。专业书籍上称之为逻辑耦合在页面中,这种处理方式,对一些规模很小的项目如:一个简单的留言簿,也没什么太大的坏处,实际上,人们开始接触一些对自己来说是新的东西的时候,比如,用JSP访问数据库时,往往喜欢别人能提供一个包含这一切的单个JSP页面,因为这样在一个页面上他就可以把握全局,便于理解。但是,用Model 1模式开发大型时,程序流向由一些互相能够感知的页面决定,当页面很多时要清楚地把握其流向将是很复杂的事情,当您修改一页时可能会影响相关的很多页面,大有

牵一发而动全身的感觉,使得程序的修改与维护变得异常困难;还有一个问题就是程序逻辑开发与页面设计纠缠在一起,既不便于分工合作也不利于代码的重用,这样的程序其健壮性和可伸缩性都不好。

Grady Booch等人在UML用户指南一书中,强调建模的重要性时,打了一个制作狗窝、私人住宅、和大厦的形象比喻来说明人们处理不同规模的事物时应该采用的合理方法一样,人们对不同规模的应用程序也应该采用不同的模式。

为了克服Model 1的缺陷,人们引入了Model 2,如下图所示:

它引入了"控制器"这个概念,控制器一般由servlet来担任,客户端的请求不再直接送给一个处理业务逻辑的JSP页面,而是送给这个控制器,再由控制器根据具体的请求调用不同的事务逻辑,并将处理结果返回到合适的页面。因此,这个servlet 控制器为应用程序提供了一个进行前-后端处理的中枢。一方面为输入数据的验证、身份认证、日志及实现国际化编程提供了一个合适的切入点;另一方面也提供了将业务逻辑从JSP文件剥离的可能。业务逻辑从JSP页面分离后,JSP文件蜕变成一个单纯完成显示任务的东西,这就是常说的View。而独立出来的事务逻辑变成人们常说的Model,再加上控制器Control 本身,就构成了MVC模式。实践证明,MVC模式为大型程序的开发及维护提供了巨大的便利。

其实,MVC开始并不是为Web应用程序提出的模式,传统的MVC要求M将其状态变化通报给V,但由于Web浏览器工作在典型的拉模式而非推模式,很难做到这一点。因此有些人又将用于Web应用的MVC称之为MVC2。正如上面所提到的MVC是一种模式,当然可以有各种不同的具体实现,包括您自己就可以实现一个体现MVC思想的程序框架,Struts就是

一种具体实现MVC2的程序框架。它的大致结构如下图所示:

上图基本勾勒出了一个基于Struts的应用程序的结构,从左到右,分别是其表示层(view)、控制层(controller)、和模型层(Model)。其表示层使用Struts标签库构建。来自客户的所有需要通过框架的请求统一由叫ActionServlet的servlet接收(ActionServlet Struts已经为我们写好了,只要您应用没有什么特别的要求,它基本上都能满足您的要求),根据接收的请求参数和Struts配置(struts- config.xml)中ActionMapping,将请求送给合适的Action去处理,解决由谁做的问题,它们共同构成Struts的控制器。 Action则是Struts应用中真正干活的组件,开发人员一般都要在这里耗费大量的时间,它解决的是做什么的问题,它通过调用需要的业务组件(模型)来完成应用的业务,业务组件解决的是如何做的问题,并将执行的结果返回一个代表所需的描绘响应的JSP(或Action)的ActionForward对象给ActionServlet以将响应呈现给客户。

过程如图四所示:

3.4 ORM

对象-关系映射就是Java应用中的对象到关系数据库中的表的自动的(和透明的)持久化,使用元数据(meta data)描述对象与数据库间的映射。本质上,ORM的工作是将数据从一种表示(双向)转换为另一种。

3.5 Hibernate

hibernate是一个基于orm的开源框架,也是一个轻量级框架,它是在JDBC之上提供一层薄薄的封装,在提供完全透明的持久化机制的同时又提供尽可能多的灵活性。

架构图如下:

1 hibernate 是一个对象/关系映射的框架,有了hibernate可以使我们不再关心数据库的底层结构只需要专心我们的对象是实现了完全面向对象的编程。

2 透明持久化,进行持久化的对象是单线程的而且对象的生命周期很短,当对象被hibernate持久化的时候对象没有太过依赖于hibernate 并没有实现某个接口或者那个框架它们只是和session进行关联 hibernate提供很好的session管理的方式,当对象持久化的操作完成后 session就会自动的关闭这样对象又能够被任何的其他层使用。

3 框架的特性,框架是一个轻量级的框架没有入侵性

4 hibernate的缓存机制hibernate提供了一级缓存session 二级缓存sessionFactory

5 hibernate是jdbc的轻量级的对象封装。是可以独立的对象持久层框架。可以用在任何jdbc可以使用的场合,比如说 java程序的数据库的访问,web程序的数据库的访问。它是指和jdbc 有关系和运用hibernate的程序关可以这样说只要是能够使用 jdbc 链接数据库的程序都能够使用hibernate进行数据库的链接,它和服务器或者程序也不存在兼容性。

6 内存消耗问题在开发小项目关系单一的话那么 eb的效率最高。 jdbc次之 hibernate也许是最低的但是对于大的项目关系非常复杂的来说 hibernate 的处理速度非常惊人,jdbc次之,eb几乎根本就不能够实现。

hibernate的缺点

7 hibernate适合各种数据库从一对一到多对多关系操作方便。

3.6 IOC(DI)

分离关注( Separation of Concerns : SOC)是Ioc模式和AOP产生最原始动力,通过功能分解可得到关注点,这些关注可以是组件Components, 方面Aspects或服务Services。

Ioc英文为 Inversion of Control,即反转模式,这里有著名的好莱坞理论:你呆着别动,到时我会找你。后被Martin Fowler改名为 Dependency Injection 依赖注射,也就是将类之间的关系通过第三方进行注射,不需要类自己去解决调用关系。

其实Ioc模式也是解决调用者和被调用者之间的一种关系,由于被调用者名称写入了调用者的代码中,这产生了一个接口实现的原罪:彼此联系,调用者和被调用者有紧密联系,在UML中是用依赖 Dependency 表示。

但是这种依赖在分离关注的思维下是不可忍耐的,必须切割,实现调用者和被调用者解耦,新的Ioc模式 Dependency Injection 模式由此产生了, Dependency Injection 模式是依赖注射的意思,也就是将依赖先剥离,然后在适当时候再注射进入。

3.7 AOP

AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。

方面(Aspect):对横向分布在多个对象中的关注点所做的模块化。在企业应用中,事务管理就是一个典型的横切关注点。https://www.doczj.com/doc/0b5954169.html,将方面实现为Advisor或拦截器(interceptor)。(按:Advisor是通知和切入点的组合,拦截器实际就是指通知,注意在本文档中,一般会把环绕通知称为拦截器,而将其它类型的通知称为通知,这是因为环绕通知实现的是 AopAlliance.Intercept.IMethodInterceptor接口,而其它通知类型实现的都是Spring.Aop命名空间下的通知接口。)

连接点(Joinpoint):程序执行过程中的一个点,例如对某个方法的调用或者某个特定异常的抛出都可以称为连接点。

通知(Advice):AOP框架在某个连接点所采取的行为。通知有多种类型,包括“环绕”通知,“前置”通知和“异常”通知等,后文将对通知类型进行讨论。包括https://www.doczj.com/doc/0b5954169.html, 在内的很多AOP框架都把通知建模为拦截器(interceptor),并且会维护一个"包围"在连接点周围的拦截器链。

切入点(Pointcut):指通知的应用条件,用于确定某个通知要被应用到哪些连接点

上。AOP框架应允许让开发人员指定切入点,例如,可以使用正则表达式来指定一个切入点。

引入(Introduction):向目标对象添加方法或字段的行为。https://www.doczj.com/doc/0b5954169.html,允许为任何目标对象引入新的接口。例如,可以利用引入让任何对象在运行期实现IAuditable接口,以简化对象状态变化的跟踪过程。(按:也称为mixin,混入)

目标对象(Target object):指包含连接点的对象。也称为被通知或被代理对象。(按:“被通知对象”实际是“被应用了通知的对象”,在译文中,将advised object或proxied object统称为目标对象,这样更为统一)

AOP代理(AOP proxy):由AOP框架在将通知应用于目标对象后创建的对象。在https://www.doczj.com/doc/0b5954169.html,中,AOP代理是使用IL代码在运行时创建的动态代理。

织入(Weaving):将方面进行组装,以创建一个目标对象。织入可以在编译期完成(例如使用Gripper_https://www.doczj.com/doc/0b5954169.html,编译器),也可以在运行时完成。https://www.doczj.com/doc/0b5954169.html,在运行时执行织入。

3.8 Sping

Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

架构图如下:

目的:解决企业应用开发的复杂性

功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

范围:任何Java应用

简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring 框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。

控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。

面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。

容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。

3.9 SSH

3.9.1 Struts基本原理和解决问题

ActionServlet是一个Servlet类,扩展了javax.servlet.http.HttpServlet,实现了servlet的生命周期的方法(init(),doGet(),doPost(),destroy())之处,还添加了一个真正处理请求的方法process.,实际上控制器所执行的控制逻辑包含在RequestProcessor类中,而不是ActionServlet类中。

RequestProcessor类的process() 方法从struts-config.xml文件中根据请求的URI 查找匹配的子元素,并根据子元素的"name"属性在该配置文件中查找匹配的子元素。确定下一步要用到的ActionForm Bean.,取得FormBean的名

称后,process()方法将创建或检索由元素的type属性命名的 ActionForm的一个实例。

然后用再请求提交的值来填充数据。并调用ActionForm的validate()方法验证提交的值。

最后 process()方法才真正开始处理请求。它首先从元素的type属性获得action类的名称,然后调用Action类里的execute()方法。由execute()方法返回一个ActionForward对象,确定应用程序的下一个视图。

由此可见,Struts为一个实现了MVC的框架,其灵活性相当高,适合用于绝大多数JAVA EE应用中,可以轻松解决页面和控制之间的耦合,对营造一个良好的系统架构起着关键性的作用。

3.9.2 Hibernate解决问题

现在关系数据库技术发展已相当成熟,不仅形成一套理论支持,更有很多成功的关系数据库产品,关系数据库已经成为工业开发上的首选。而JAVA EE应用中,使用的JAVA 是面向对象的语言,其面向对象特性和关系数据库特性明显截然不同,两者虽有协调之处,当总体显现为不和谐,不协调。

Hibernate的出现正为解决这一问题,其为一ORM产品,帮助程序员把对象于对象之间的关系“无型”地转化为表于表之间的关系,完全屏蔽数据库细节。

总之,采用hibernate开发系统,对于使用面向对象思想开发的程序员来说,更来的自然和协调。

3.9.3 Spring解决问题

Spring可以将简单的组件配置,组合成为复杂的应用。在 Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。

所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为 Spring中的各种模块提供了基础支持。

3.10 系统架构

综上所述,SSH从架构上很好体现系统架构,故该系统采用SSH技术进行开发。

由于该系统为办公自动化系统,需要处理工作流问题,故搭档JBPM进行开发。

系统架构图如下:

本系统分为两层,表现层和持久化层,上图所示为了表述,把业务逻辑层和持久化层画在一起。因为技术上采用hibernate的原因,屏蔽了数据库细节,跨数据库的特性,所以把业务逻辑层和持久化层结合为一层,简化系统结构,加快开发速度。

4、联合永道办公自化系统操作介绍

4.1界面设计

4. 1. 1 登录界面

4.1. 2 管理主界面

系统管理员登陆可看到以下界面,其它人员登陆系统,可看到的模块,请参考模块设置!

4. 1. 3 组织机构

组织机构管理主要包括机构管理和人员管理。

机构是一个树型结构,可以完成添加、删除操作。

主界面要求:

界面操作:点击机构管理进入机构管理主界面,在主界面上列出顶级机构,点击某个机构的名称,可以查看这个结构的详细信息以及所有子机构列表(在子机构列表上,还可以点击机构名称进行进一步的导航)。在列表界面上,可以点击“返回”以便返回上一级机构。

机构信息的浏览:

如,点击“北京分公司”,将可以列出此公司下面的所有部门:

机构信息的添加:

点击添加机构信息按钮,可以打开添加界面,在哪个机构层级上点击添加,就应该在本层级上添加机构!如在进入“北京分公司”之后的页面上点击添加机构信息:

则添加成功之后

其信息被添加到本页面下面:

机构信息的删除:

点击确定之后,才能删除对应的记录,同时刷新一下本界面。人员管理:包括添加、删除人员的信息

人员管理主界面:

人员管理的添加:

点击选择,可以打开新的界面选择所添加人员所属的机构

人员管理的删除:

在删除之前,跟机构管理一样,需要确认一下再删除,而且删除之后,需要刷新一下主界面。

4. 1. 4 权限管理

1、用户(User)可以拥有多个角色(Role),角色可以被分配给多个用户

2、权限的意思就是对某个资源的某个操作,现在规定:

a)所谓资源,即系统的模块

b)所谓操作,包括:增加、删除、修改、查询等操作

3、权限管理系统的总体功能分为:授权与认证

4、授权,指将权限授予角色或用户

a)如果用户A拥有角色B、角色C,那么,缺省的情况下,用户A将拥有被分配给角

色A和角色C的所有权限(即默认情况下,用户A继承其拥有的角色所具有的所有权限)

b)如果用户拥有多个角色,那么用户的权限是这些角色权限的合集

c)如果用户拥有多个角色,而且角色之间的授权有冲突(比如对同一个资源的同一

个操作,一个角色为“允许”,另外一个角色为“不允许”),将以优先级别高的角色为准(所谓优先级别,也就是对于这个用户所拥有的角色而言,是有顺序的,同一个角色在不同的用户那里可能拥有不同的优先级)

d)除了可以对角色进行授权外,也可以针对用户进行授权,也就是说,将权限授予

用户。针对某个资源的所有操作,我们可以设置这些权限对用户来说是“继承”

或“不继承”

i.继承:意思是这些权限将使用其(即用户)所拥有的角色的权限,而不使用其

(即用户)单独设置的权限

ii.不继承:意思是这些权限将使用其单独设置的权限,而不使用其所拥有的角色的权限

5、认证,指用户访问资源的某些操作时,根据授权,判断是否允许用户的访问

a)在用户访问的时候,需要进行即时的判断(是否有权访问)

b)应该提供查询的功能,可以查询某个用户所拥有的所有权限

总体上,可分为模块管理、角色管理和用户管理模块:

模块管理:

模块管理主界面参考:

因为模块是一个树状结构(本系统只支持两级模块的结构),我们可以点击其中一个模块以便打开其子模块来维护,比如点击“信件交流”:

相关主题
文本预览
相关文档 最新文档