我最近在复习和汇总以前学习过的知识和做过的东西,JYUOA(JYU全称是Jiaying University)是我在大二刚学完SSH框架的时候,做的第一个SSH的项目。怎么说呢,这可以说是我的启蒙项目,通过这个项目,我学到很多东西,像什么框架之间的整合,还有SSH框架的具体实战使用,还有三层架构设计,以及权限管理等知识,所以我觉得这是一个十分适合刚学完SSH框架的朋友的项目。
OA是Office Automation的缩写,本意为利用技术的手段提高办公的效率,进而实现办公的自动化处理。实现信息化、无纸化办公,可方便的生成统计报表等。
当然了,真正的一个OA系统的功能是很多的,下面这张图是说一个OA系统能够具有的全部功能,现在的OA系统的功能基本上就是下面这张图的子集。
而JYUOA只是实现了其中很小的一部分功能,不够这样也够呛了,也需要具备很多知识的了,在后面我会介绍一下它的整体架构和里面的功能。下面是项目的主页
一般这个时候就要扯到三层架构和MVC模式了,不管很多人都这两个其实会搞混,说不出个所以然来,这里我强烈建议你去看看对三层和MVC的认识过程。
现在回到我们这个项目,这个项目有采用MVC模式,至于三层嘛,其实这个项目最开始用的也是三层,但后来进行重构,直接把业务逻辑层与数据访问层合并了,所以变成了两层,为什么要这么做呢,因为这个项目的业务逻辑并不是特别复杂,普遍都是增删改查操作,这样一来的话业务逻辑层的Service类的方法只是简单地调用一下数据访问层的Dao类的方法,所以干脆把它们整合一起。
还是普遍增删改查的问题还有分页等公共功能,所以把这些普通的功能都抽取出来了,如在界面层(UI)就抽取了Action
,抽取出来一个edu.jyu.oa.base.BaseAction
和edu.jyu.oa.base.ModelDrivenBaseAction<T>
,其中ModelDrivenBaseAction
继承了BaseAction
,一个Action
类如果需要用到Struts2的ModelDriven的话,k就继承ModelDrivenBaseAction
,否则继承BaseAction
,例如edu.jyu.oa.view.action.ProcessDefinitionAction
。
那么就以部门为例,整个项目的层次结构如下图
还有就是实体类图,可能在这里看不清楚,但是我已经放在相关资料那里了
说明:还有jQuery.validate与jQuery.treeview等小插件
目录结构
包结构
这个岗位管理其实可以看作是角色管理了,而角色有什么用呢?角色其实就是用户跟权限中间的一个桥梁,一个用户可以拥有很多权限,但是如果有些用户的所拥有的权限是一样的,那么分别跟这些用户分配权限的话就会很麻烦,所以不如就将权限分配到角色去,然后给用户分配角色,这样子,用户就拥有了角色所拥有的权限。一个用户可以有多个角色,一个角色可以有多个权限。如果一个用户没有某一项权限,那么就不会显示那个权限对应的操作给该用户看。
岗位管理有以下功能:
岗位对应的实体类是edu.jyu.oa.domain.Role
部门呢,就是部门咯,它可以有一个上级部门,也可以有多个下级部门,没有上级部门的可以称作顶级部门,一个部门下面可以有多个用户,即用户与部门的关系是1对多。
部门管理有以下功能:
部门对应的实体类是edu.jyu.oa.domain.Department
用户管理呢,真的没什么好说的,大家都懂的。
用户管理有以下功能:
用户对应的实体类是edu.jyu.oa.domain.User
这里应该说称作论坛版块管理比较适合点。
论坛管理有以下功能:
论坛版块对应的实体类是edu.jyu.oa.domain.Forum
这里就是真正可以去论坛版块交流的地方了,你可以选择一个版块,然后再该版块上发帖子
论坛有以下功能:
编辑帖子和删除帖子功能没有做。置顶和精华也没做,其实就是修改edu.jyu.oa.domain.Topic
的type
值。有兴趣的也可以做一下,也不是很难的。
论坛中的帖子对应着实体类edu.jyu.oa.domain.Topic
和edu.jyu.oa.domain.Article
,其中Topic
继承了Article
你要要申请一个东西,就要有一个流程,比如说请假,先给谁审批,再给谁审批。这里就可以部署一个流程的定义文件了,这个流程定义文件是用Eclipse的JBPM插件做的。
审批流程管理有以下功能:
流程定义对应的是org.jbpm.api.ProcessDefinition
,这是一个接口,由JBPM提供的
有了流程定义,我们就可以创建一个申请模板了,该申请模板可以引用一个流程定义,并且关联一个申请文件(.doc格式),员工可以根据该申请模板进行申请事务。
申请模板管理有以下功能:
申请模板对应的实体类是edu.jyu.oa.domain.Template
有了申请模板以后,就可以起草申请了。
起草申请有以下功能:
申请对应的实体类是edu.jyu.oa.domain.Application
在申请以后,就需要对申请进行审批。
待我审批有以下功能:
审批有关的实体类是edu.jyu.oa.domain.ApproveInfo
在这里可以看到历史申请记录的和正在申请的记录。
我的申请查询有以下功能:
整个项目大概就介绍到这里,现在就来说说怎么在你的机器上泡起来。我在本机运行这个项目的时候,用的JDK版本是1.7,Tomcat版本是8,千万不要用JDK 1.8,因为这个项目的Spring版本跟JDK 1.8不兼容,所以关于一些环境版本的选择,你要小心咯。
jyuoa
,如果你创建的数据库名不是这个的话,就得到config
中的jdbc.properties
里修改一下数据库配置,还有就是数据库账号密码什么也是在那修改的,注意了,你创建的这个数据库要选择UTF-8编码。.project
文件,因为我用的是Eclipse,你可能用的是其它工具。我也没有上传.classpath
,因为像Eclipse的WebContent
到了MyEclipse
就是WebRoot
,.classpath
文件可能会让产生一些让你疑惑的问题,比如说同时出现了WebContent
和WebRoot
,反正我就被懵过,至于其它的IDE我也没用过了,也不知道会出现什么问题,所以你要记得把src
、test
还有config
文件夹Build Path为源码目录(Source Folder)。edu.jyu.oa.install.Installer
类,运行一下,把项目的基本信息插入到数据库中,像超级管理员信息还有一些权限的信息,不过可能第一次运行会比较慢,因为要建很多表。大概就是这样子吧,出了错别慌,尽情地谷歌和百度,实在不行你找我。
这个项目可能对于以后我遇到的项目来讲,是a piece of cake,但是这对于我来说是一个很好的开始,每次积累一点点,最后整合起来就是一大块。但是这个项目也有很多缺点,比如说日志没怎么做,异常处理也不好,有些功能没有完成,不过只要花点时间,肯定是能行的!最后需要说的是,这个项目我是学习传智播客的OA项目的,所以非常感谢传智播客将他们的教学资源分享出来。
项目地址https://github.com/HuangFromJYU/JYUOA