购买

¥ 30.0

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 基于SSM的OA系统后台的设计与实现-毕业论文

基于SSM的OA系统后台的设计与实现-毕业论文.docx

基于SSM的OA系统后台的设计与实现-毕业论文

仙人指路
2018-05-08 0人阅读 举报 0 0 暂无简介

简介:本文档为《基于SSM的OA系统后台的设计与实现-毕业论文docx》,可适用于职业岗位领域

分类号:TPUDC:D()密级:公开编号:成都信息工程大学学位论文基于SSM的OA系统后台的设计与实现论文作者姓名:陈阳申请学位专业:软件工程申请学位类别:工学学士指导教师姓名(职称):高燕(讲师)论文提交日期:年月日基于SSM的OA系统后台的设计与实现摘要办公自动化(OfficeAutomation)简称OA它通常利用现代化计算机网络技术使用各种设备和人机信息系统来协助完成工作任务把人们从传统办公业务繁琐的人力操作中解放出来以达到提高工作效率、工作质量和生产率的目的。本系统采用BS架构来实现企业办公自动化和管理信息化同时采用近期比较流行的SpringMVC、Spring和Mybatis的框架组合实现了部门管理职能管理员工管理权限管理员工工资管理审批流程管理和站内消息这几个主要功能模块。审批流程管理是本系统中的重要研究内容主要涉及到工作流的设计与实现通过可视化技术实现流程模板的创建及流程实例的生成不仅用户体验良好而且具有高度灵活的可扩展性同时该功能模块支持任务拦截任务回退等功能具有较高的实用性而且符合办公自动化的理念。关键词:办公自动化SpringMVCSpringMybatis工作流DesignandImplementationofOASystemBasedonSSMAbstractOfficeAutomationreferredtoasOA,itoftenusesmoderncomputernetworktechnology,avarietyofequipmentandinformationsystemstohelppeoplecompletetasksandliberatespeoplefromthetraditionalofficeoperationscumbersomemanualoperationinordertoimproveworkefficiency,qualityofworkandproductivitypurposesThesystemisbasedonBSstructure,usingtheMVCmodeltodevelopmentAndtheuseofrecentpopularframeworkscombinationSpringMVC,SpringandMybatisThesystemimplementsdepartmentmanagement,functionmanagement,staffmanagement,rightsmanagement,payrollmanagement,approvalprocessmanagementandstationnewstheseseveralmajorfunctionalblocksApprovalprocessmanagementisanimportantresearchcontentinthissystem,whichmainlyinvolvesthedesignandimplementationofworkflow,throughthevisualizationtechnologytoachievethecreationofprocesstemplatesandprocessinstancesgeneration,notonlytheuserexperiencewell,butalsoithasahighlyflexiblescalabilityAtthesametimethisfunctionmodulesupportstaskinterception,taskbackandotherfunctionsIthasahighpracticalityandinlinewiththeconceptofofficeautomationKeywords:OfficeAutomationSpringMVCSpringMybatisworkflow目录论文总页数:页引言课题背景及意义国内外研究现状及发展动态课题研究内容系统总体设计方案系统总体结构设计及分析三层架构和MVC模式前后端分离系统功能设计开发运行平台选择及分析技术选型开发运行环境系统技术难点及关键技术系统优点系统详细设计系统模块总体设计系统流程及分析系统功能的详细定义组织管理模块个人信息管理模块工资管理模块站内消息模块审批流程模块对象定义与数据库设计主要对象定义数据库设计系统接口关系系统界面要求关键技术与难点解决方案系统具体实现登录拦截与权限验证的实现流程定义的实现流程模型解析的实现工作流并行执行的实现系统运行及测试结果测试环境测试的对象及目的测试内容及结果系统运行实例结语参考文献致谢声明引言课题背景及意义根据我国现状我国企业普遍使用的是传统的自动化管理传统的自动化管理主要以纸质来记录和传递信息不仅繁琐而且效率不高浪费了大量的人力物力。因此如何实现高效的办公管理成为企业迫切的需求。数字化办公必然引起管理体制的变革而管理体制变革势必意味着需要从新分配利益和权利而只要关系到利益和权利就是一件复杂的事情。尽管这样实现全面的数字化办公仍是现代企业发展的必然趋势。传统办公模式和网络化办公模式如图和图所示:图传统办公模式图图网络化办公模式图大型OA往往功能繁琐管理与使用起来都比较复杂同时所需的开发和维护费用也非常高昂。而中小型企业对OA的要求没有那么高所以低成本网络OA系统拥有很大的市场。国内外研究现状及发展动态国外方面办公自动化起源于年代的美国和日本年代后期才逐步形成涉及多种技术的新型综合学科。年代办公自动化高速发展随着技术的进步OA市场出现了应用高端化、市场规模化的趋势。年代后随着计算机网络技术的高速发展办公自动化也随之高速发展呈现出数字化、智能化、综合化的发展趋势。国内方面虽然国外有许多成熟的OA产品虽然功能强大但并不一定符合中国企业的现状操作管理都不符合国内用户的习惯因此世纪初国内也逐渐开始开发适合国内企业的办公自动化软件到现如今出现了一大批琳琅满目的OA协同软件但都不尽人意企业往往需要根据本企业特性进行二次开发。因此目前OA系统市场需要更多个性化强的办公自动化软件。经过这几十年的发展办公自动化越来越成熟其应用范围也愈来愈广。目前办公自动化是以知识管理为核心拥有强大的数据处理能力可以充分集成各种信息数据这些数据不仅包括电子邮件信息而且还包括文件系统中的文件、数据库数据、数据仓库中的数据甚至是互联网上的数据还可以充分利用各种协同工作手段包括多线程讨论、文档共享、电子邮件及一些辅助工具提供在线及时共享等。同时办公自动化也在不停地进步发展用最新的技术、设备和观念来制定办公自动化的有关规划以达到花费最少收益最大的目的。课题研究内容本课题在对OA需求分析的基础上抽取出其中比较有价值的几个功能点包括对工资的管理、审批流程的实现、站内交流这几个方面。确定好需求后再设计整个项目的框架和数据库。然后理清逻辑划分功能模块确定模块与模块之间的联系。接着编写代码实现各个模块的功能最后在完成整个项目后还要不断测试增加用户体验。本课题研究的重点在于工作流的设计与实现包括对流程的定义和描述对流程的解析对流程的执行要求能够良好的实现审批流程的功能并且在实现功能的同时还要有良好的用户体验。系统总体设计方案系统总体结构设计及分析三层架构和MVC模式三层架构把所有代码分解成UI界面层BLL业务逻辑层和DAL数据访问层。这样分解能够使程序员更加专注的处理具体的业务逻辑。比如常见的分解方法中把对数据库的增删改查封装到DAO(DataAccessObject数据访问对象)中这样在处理具体的业务逻辑时就可以直接调用DAO方法来实现数据库的存储。而MVC模式主要是针对BS结构的程序也就是WEB应用程序它把展示数据的页面尽可能的和业务代码分离。MVC把纯净的界面展示独立到Views层把交互的程序逻辑独立到Controller层中在Views和Controller中传递数据使用一些专门封装数据的实体对象Models。MVC和三层架构是没有关系的。因为任何应用程序都可以划分为三层而MVC一般用于WEB应用程序。但从解耦的角度来看它们又是一致的因为都是用来划分代码层次只不过划分的方法不一样罢了所以它们是可以同时存在的。本系统采用BS架构同时采用MVC模式和三层架构来进行代码层次的分解如图所示:图MVC模式和三层架构前后端分离前后端分离是当前BS架构应用程序比较流行的开发模式。常见的ldquo前后端分离rdquo案例是SPA(SinglePageApplication)。也就是常说的单页App因为所有的请求都是通过异步接口(AJAXJSONP)的方式来发送和响应的所以页面无刷新就呈现出一种好像所有东西都在同一个页面上的效果。但是在实际开发中SPA只能作为简单的应用模式无法满足复杂的业务需求所以本系统采用同步加异步混合的开发模式即少部分场景例如用户登录、表单提交等采用同步方式其它场景尽量采用AJAX技术进行异步交互同时本系统的前后端分离对开发人员从职责上划分的主要场景为:()前端开发人员:负责View层与后端开发人员共同决定涉及前后端交互的Controller层。()后端开发人员:负责MVC中的Model层包括业务处理逻辑等同时与前端开发人员交流沟通后实现Controller层。系统功能设计结合市面上现有OA情况根据开发人员对自动化办公的需求分析本系统主要抽取了以下几个开发人员觉得有价值的功能包括员工管理部门管理职能管理工资管理站内消息审批管理等功能需求如图所示:图主要功能模块图()员工管理包括对员工的增加、删除、修改、查看操作能实现不同条件的搜索对员工登录密码的初始化。()部门管理包括对部门的增加、删除、修改、查看操作能实现不同条件的搜索。()职能管理职能是对员工类型的划分包括对职能的增加、删除、修改、查看操作。()权限管理权限管理作为职能管理的补充权限之间有父子关系但最多三级权限那么一二级权限组成菜单列表三级权限为具体增删改操作。然后为职能分配权限再为员工分配职能那么不同职能的员工就拥有了不同的权限。()工资管理包括职能工资管理和员工工资管理。职能工资管理:为不同类型的员工设置一个基本工资在员工工资录入的时候默认此员工的基本工资为此员工所属职能的基本工资员工工资管理包括对员工工资记录的增加、查看和按条件查询工资记录并对查询出来的工作记录利用饼图折线图等进行分析统计。()站内消息OA系统内的用户能够互相发送短消息支持富文本包括一个收件箱和发件箱能增加删除查看搜索消息提示未读消息。()审批流程管理利用开发人员开发的工作流引擎实现简单的审批流程功能包括流程设计器流程模板申请列表我的申请我的任务我的审批记录查看申请状态等功能。开发运行平台选择及分析技术选型市面上JEE的开源框架层出不穷本系统采用近期比较流行的SSM的框架组合即SpringMVCSpringMybatis的框架组合同时使用Hibernate其中Mybatis和Hibernate都是操作数据库的框架同时使用是因为Mybatis查询效率高而Hibernate由于其ORM特性对更新修改操作很方便。具体采用技术框架描述如下:()SpringMVCSpringMVC是一种实现了MVC设计模式的轻量级Web框架大大简化了开发人员的日常Web开发选择SpringMVC还有一个原因就是SpringMVC对Ajax的支持非常好。()SpringSpring是一个全方位的应用程序框架一般用Spring来整合整个应用程序同时它也可以很轻松的用来整合其它各种框架包括Mybatis、Hibernate等。()MybatisMyBatis是优秀的持久层框架它可以通过配置xml或注解的方式来定制SQL然后将接口和Java的实体对象映射成数据库中的记录。()HibernateHibernate是一个完全实现了ORM的持久层框架。通过Hibernate只要映射好了对象和数据库的关系就可以通过直接更改对象来同步数据而不需要人工使用SQL和JDBC大大提高了开发效率。开发运行环境开发过程在Windows系统下进行需要Java环境开发工具选择MyEclipse数据库使用MySql服务器选择Tomcat具体选择如表所示。表开发运行环境系统环境JDK开发工具MyEclipse服务器Tomcat画图工具Visio数据库MySQL数据库管理工具NavicatPremium操作系统Windows系统技术难点及关键技术()同时使用Mybatis和Hibernate两种持久层工具可能出现冲突同时使用是因为为了兼具两种工具的优势Mybatis可以定制原生SQL查询效率高Hibernate对实体对象之间的关联关系处理的非常好用来做添加和更新操作很方便但同时使用会出现一些比如数据源、事务管理方面的冲突。()防止用户重复登录因为是办公系统需要保证安全性一个用户在同一时间地点只允许登录一次。()当前用户的登录拦截和权限验证最好能有一个统一进行验证的验证中心对用户的访问进行拦截每一次访问都进行一次登录验证和权限验证提高安全性。()根据用户权限显示菜单和操作为用户分配操作权限后最好能够根据用户拥有的权限显示当前用户的菜单和操作按钮没有权限就不显示这样就不会总是出现提示没有操作权限的提示提高用户体验度。()工资记录包含多个工资条目员工的工资记录可能包含多个工资条目能够根据具体情况进行增删。()工作流的模型解析和执行工作流的关键在于对流程模型进行定义和描述然后对流程模型进行解析解析成程序能读懂的实体对象当提交申请生成流程实例后就可以根据选择的流程模型进行执行审批流程的主要功能包括部署流程流程的顺序执行和并行执行流程的回退查看审批记录配置任务的前后置动作等。系统优点本系统采用了优秀的Web框架极大的减少了代码编写量同时采用MVC模式和三层架构编写代码极大降低了其耦合性方便代码的编写降低了人力物力节约开发成本。同时本系统采用免费开源的MySQL开源数据库同样节约了成本。在使用上管理员可以为不同的职能设置不同的权限同时本系统的操作简单界面友好能让使用者能快速上手。系统详细设计系统模块总体设计本系统不同用户根据其职能拥有不同的权限在同一个登录页面登录身份验证后进入相同的首页但是首页上只会显示拥有权限的菜单。从功能上划分系统具有员工管理部门管理职能管理工资管理站内消息审批管理等功能不同的用户具有不同的权限。系统功能模块图如图所示:图系统功能模块图系统流程及分析进入系统时直接进入首页然后通过登录拦截判断当前用户是否登录没有登录就跳转到登录页面登录了就进入首页这时候用户进行任何操作都会通过权限验证拦截如果是退出操作直接执行否则需要权限验证通过才能执行操作否则跳转到显示没有操作权限的提示信息页面。系统流程图如图所示:图系统流程图系统功能的详细定义组织管理模块组织管理模块主要是对公司或企业的人员组织进行管理包括员工管理职能管理和部门管理三个子模块。()员工管理模块包括对员工的增加、删除、修改、查看操作能实现不同条件的搜索对员工登录密码的初始化。增加修改用户时需要指定员工的职能和部门其中员工的登录账号和工号需要验证唯一性。搜索员工信息可以按照登录账号、姓名、工号、所属部门、所属职能等进行搜索。员工登录密码初始化时需要一个确认提示框确认初始化后初始化用户密码为工号。()部门管理模块包括对部门的增加、删除、修改、查看操作能实现不同条件的搜索。搜索部门信息时可以按照部门名称进行模糊查询。增加和修改部门信息时部门名称需要验证唯一性。()职能管理模块职能是对员工类型的划分包括对职能的增加、删除、修改、查看操作为职能分配不同的权限。搜索职能信息时可以按照职能名称进行模糊查询。增加和修改职能信息时职能名称需要验证唯一性。设置职能权限时权限信息需要以树状的形式进行展示并且可以多选。员工的职能和权限最初来自于系统管理员的设置系统管理员先录入员工信息然后给职能分配权限再把职能分配给员工这样员工就拥有了自己的操作权限其用例图如图所示:图管理员分配权限用例图个人信息管理模块()个人信息修改当前登录用户可以修改自己的手机号码、Email、通信地址、用户头像等基本信息但是姓名、工号、部门、职能等信息只能查看不能修改。()登录密码修改当前登录用户可以重置自己的登录密码需要先输入旧密码然后重复输入两次新密码验证通过后才能重置密码重置成功后新密码会在下次登录时生效。工资管理模块工资管理包括职能工资管理员工工资管理查询统计三个子模块。()职能工资管理:为不同类型的员工设置一个基本工资在员工工资录入的时候默认此员工的基本工资为此员工所属职能的基本工资方便录入。()员工工资管理:包括对员工工资记录的增加、查看。增加员工工资记录时需要先选择一个或多个员工然后在进入工资记录添加页面进行添加工资记录可以按照员工姓名、工号、所属部门、所属职能、年份、月份进行查询工资记录。()查询统计:可以按照员工姓名、工号、所属部门、所属职能、年份、月份进行查询查询出来的结果可以导出为excel文档并且用饼图和折线图对查询出的结果进行统计。站内消息模块包括收件箱和发件箱能够写信、查看消息和删除消息并且在页面顶部能够即时提醒未读消息。写信和查看消息支持富文本包括附件和图片的上传等大大丰富了短消息的内容。写信填写收件人时需要进行远程验证未读消息高亮显示查看消息后未读提醒需要及时更新提高用户体验度。审批流程模块审批流程功能模块是本系统的重点功能实现了一个小型的工作流引擎工作流引擎的作用是解析流程定义创建制流程实例并按照流程定义制订的步骤来执行和响应动作。包括流程定义的部署和解析创建流程实例并开启相应任务响应用户动作来执行任务通过后开启下一步的任务响应用户的回退请求将任务回退到上一步或重新开始。工作流引擎本身不处理具体的业务逻辑只针对审批任务本身进行控制。具体功能模块如图所示:图审批流程模块()流程设计器通过图形化界面的操作以拖拽的方式简单的实现流程的定义及部署。()流程模板可以通过提交流程定义的xml文件的方式进行部署能够启用、弃用、查看部署好的流程模板。添加部署时如果已经有同名的流程模板那么当前流程模板的版本号自动加一且自动弃用同名的老版本号的流程模板。弃用流程模板后在申请列表中将不可见。查看流程模板支持图形化的查看方式同时支持xml定义文件的下载。()申请列表列出启用的流程模板选择一个流程模板进行申请的创建提交申请后将生成此流程模板的一个流程实例进入工作流引擎开始进行审批。申请成功后自动跳转到我的申请列表。()我的申请查看当前登录用户所提交的申请能够按照申请编号、申请状态、申请结果进行查询能够以图形化的方式查看当前申请的状态能够查看申请的审批记录。()我的任务查看当前登录用户需要进行审批的任务能够查看任务所属申请的审批状态能够查看任务所属申请的审批记录能够根据流程模板所定义的操作权限进行任务办理。任务办理的权限独属于工作流引擎需要在流程模板中定义操作权限包括:顺序执行(同意或不同意)、关闭申请、回退申请等默认为顺序执行。待办理的任务在页面顶部进行提醒如办理完成即时更新页面顶部的提醒。对象定义与数据库设计主要对象定义()用户对象在本系统中主要用于存储员工的基本信息属性包括登录名、密码、工号、姓名、性别、电话号码、电子邮件、上次登录IP、上次登录时间、本次登录IP、本次登录时间、头像地址等()部门对象主要用于存储部门的基本信息属性包括编号、名称、描述等()职能对象主要用于存储职能的基本信息职能是按照工作职责对用户类型进行的一种划分属性包括名称、描述等()权限对象主要用于存储权限的相关信息在本系统中权限被分为三级一二级权限为菜单三级权限是相关操作的链接属性包括名称、url地址、图标等()职能基本工资对象主要用于存储职能的基本工资属性包括基本工资、基本工资项等()员工工资记录对象主要存储员工在某一年中某一个月的工资记录属性包括员工编号、员工姓名、员工部门编号、员工部门名称、年份、月份、基本收入项、扣款项、个税、最终所得等()消息对象主要用于存储用户在站内发送的消息属性包括标题、摘要、内容、收件人、发件人、发送时间、收件人删除标志、发件人删除标志等()流程模板对象主要用于存储流程模板的相关信息属性包括名称、可用标志、版本号、创建时间、创建人、描述、定义文档内容等()流程实例对象在本系统中一个流程实例相当于一个申请主要用于存储流程实例的基本信息属性包括实例编号、创建人、创建时间、附属变量、状态标志、结果、申请信息等()审批任务对象主要用于存储办理任务的相关信息属性包括名称、类型、开启时间、完成时间、附属变量、节点编号、参与类型、动作名称、当前任务标志、活动状态等()审批办理人对象用于存储任务所指定的办理人的基本信息审批办理人在工作流中单独进行存储属性包括办理人标识符、操作权限、完成标志、完成时间、动作名称()审批记录对象是用审批办理人和审批任务组成的包装类型实体仅用于查询()流程定义对象流程定义是通过xml文件解析出来的流程模型主要用于存储了流程模板中的相关信息系统中主要实体关系如图所示:图总体ER图其中主要的关系有:()员工只有一个职能员工也只能属于一个部门。()职能与权限是一对多的关系即一个职能可以拥有多个权限而一个员工只能有一个职能所以一个用户就拥有了多个权限。()一个员工在某一年的某一个月中只有一个工资记录。()一个流程模板可以生成多个流程实例每个流程实例都有属于自己的任务每个任务都有一到多个办理人。数据库设计数据库关系设计图如图所示:图数据库关系设计图()员工信息表(user):该表主要用于存储员工的基本信息结构如表所示:表员工信息表(user)名称类型可否为空说明备注idbigint否用户ID主键loginNamevarchar否登录账户名称唯一passwordvarchar否登录密码namevarchar否姓名gendervarchar否性别phoneNumbervarchar是手机电话emailvarchar是邮箱descriptionvarchar是描述departmentIdbigint否部门ID外键关联部门信息表中的主键idlastLoginIpvarchar是上次登录IPlastLoginTimedatetime是上次登录时间loginNumbigint是登录次数codevarchar否工号唯一photoUrlvarchar是头像地址roleIdbigint否职能ID外键关联职能信息表中的主键id其中loginName是用户登录的账户名所以必须唯一同样每个员工都有属于自己的工号所以也必须唯一同时工号作为用户的初始密码。()部门信息表(department)用于存储部门的相关信息结构如表所示:表部门信息表(department)名称类型可否为空说明备注idbigint否部门ID主键namevarchar否部门名称唯一descriptionvarchar是描述codevarchar否部门编号唯一其中的部门名称必须唯一即不能出现名称相同的部门。()职能信息表(role)用于存储职能的基本信息结构如表所示:表职能信息表(role)名称类型可否为空说明备注idbigint否部门ID主键namevarchar否部门名称唯一descriptionvarchar是描述codevarchar否部门编号唯一其中的职能名称必须唯一即不能出现名称相同的职能。()权限信息表(privilege)用于组织菜单结构和操作按钮权限表父子关系最多三级一二级权限作为菜单三级权限为具体增删改操作结构如表所示:表权限信息表(privilege)名称类型可否为空说明备注idbigint否权限ID主键urlvarchar是权限操作链接一级权限为空namevarchar否名称parentIdbigint是父权限icovarchar是小图标一级权限才有其中url为操作的链接ico为小图标parentId表示父权限一级权限相当于菜单栏中的一级菜单可以下拉所以一级权限的url为空parentId为空但是有小图标ico而二三级权限的url和parentId不能为空没有小图标。()职能权限关联表(roleprivilege)用于关联职能和权限即为职能分配权限结构如表所示:表职能权限关联表(roleprivilege)名称类型可否为空说明备注privilegeIdbigint否权限ID主键外键关联权限表的主键idroleIdbigint否职能ID主键外键关联职能表的主键id两个属性同时作为主键即联合主键表示这两个主键的组合不能重复出现保证了职能和权限一对多关系的建立。()消息表(messageinfo)主要用于存储站内发送的消息信息结构如表所示:表站内消息表(messageinfo)名称类型可否为空说明备注idbigint否消息ID主键titlevarchar否标题contenttext否内容writerNamevarchar否发件人账号receiverNamevarchar否收件人账号timedatetime是发送时间writeStateint是发件人删除标志未删已删receiveStateint是收件状态未读已读已删zhaiyaovarchar否摘要默认截取内容前字其中writerName和receiverName表示发件人和收件人的登录账号因为登录账号可以唯一确定一个用户writeState表示发件人的删除标志为表示发件人没有删除这条消息表示已经删除已经删除的消息发件人不能看到receiveState表示收件状态与writeState类似但是多了一个已读未读的状态用于提示用户阅读消息。()职能基本工资表(rolesalary)为职能设置一个基本工资表示这个职能下的员工的默认基本工资。结构如表所示:表职能基本工资表(rolesalary)名称类型可否为空说明备注idbigint否职能工资ID主键roleIdbigint否职能ID外键basicWagedouble是基本工资合计itemsvarchar是基本工资项按照一定格式存储各种工资项目其中的items用于存储工资信息一个工资条目的格式为ldquo(名称:金额)rdquo多个工资条目可以使用多个形如ldquo(名称:金额)(名称:金额)rdquo的格式。()员工工资记录表(employeesalary)工资记录需要单独存储所以员工及其所在部门等信息没有以外键关联的形式存储而是直接存储具体数据保证工资记录的独立性。结构如表所示:表员工工资记录表(employeesalary)名称类型可否为空说明备注idbigint否工资ID主键employeerIdbigint是员工ID关联员工主键yearint是年份位数字monthint否月份basicWagedouble否基本工资合计deductdouble是扣项合计socialInsurancedouble是代扣社保等incometaxdouble是个人所得税finalIncomedouble否最终所得itemsvarchar是工资项目各种工资项目userNamevarchar否员工姓名userCodevarchar否员工编号userDepartmentNamevarchar是员工所在部门名称userDepartmentCodevarchar是员工所在部门编号其中的items用来存储工资信息工资条目使用形如ldquo(名称:金额)rdquo的格式来表示不同工资类型比如属于基本工资还是扣款还是社保等使用符号ldquordquo来分隔没有就为空最后形成形如ldquo(名称:金额)(名称:金额)rdquo的格式。()员工职能关联表(userrole)用于关联员工和职能即为员工分配职能结构如表所示:表员工职能关联表(userrole)名称类型可否为空说明备注roleIdbigint否职能ID主键userIdbigint否员工ID主键两个属性同时作为主键即联合主键表示这两个主键的组合不能重复出现保证了用户和职能一对一关系的建立。()工作流流程模板表(wftemplete)内容包括从xml定义中解析出来的相关内容同时将xml内容以二进制的形式存储方便再次进行解析。结构如表所示:表流程模板表(wftemplete)名称类型可否为空说明备注idbigint否流程模板ID主键namevarchar否流程模板名称主键statetinyint否启用状态可用不可用contentlongblob否Xml内容versionint否版本号createTimedatetime否创建时间creatorvarchar否创建人descriptionvarchar是相关描述其中属性content采用longblob的格式来存储二进制数据。()工作流流程实例表(wfinstance)利用流程模板生成的流程实例每一个申请都可以看作一个流程实例。结构如表所示:表流程实例表(wfinstance)名称类型可否为空说明备注idbigint否流程实例ID主键templateIdbigint否流程模板ID外键creatorvarchar否创建人createTimedatetime否创建时间expireTimedatetime是超期时间variablevarchar是附属变量json存储instanceNovarchar否流程实例编号唯一instanceStatetinyint否状态正在使用关闭流程instanceResultint否结果审批中审批通过审批驳回applyInfotext是申请内容支持富文本其中附属变量以json字符串的形式存储附属变量可以看作提交申请时所提交的信息使用json存储的好处是可以存储任何的键值对类型的数据并且json可以方便的和map进行互转方便了开发和存储。()工作流任务表(wftask)用来存储一个流程实例正在办理或已经完成任务信息结构如表所示:表任务表(wftask)名称类型可否为空说明备注idbigint否任务ID主键instanceNovarchar否流程实力编号namevarchar否任务名称taskTypetinyint是任务类型operatorvarchar否办理人多个办理人使用,隔开createTimedatetime否任务开启时间finishTimedatetime是任务完成时间expireTimedatetime是任务超期时间variablevarchar是附属变量Json字符串nodeIdvarchar否此任务在流程定义中所在的节点位置performtypevarchar否办理人参与类型allanyactionNamevarchar是动作名称任务完成办理后记录任务的操作类型isCurrenttinyint否是否是当前任务不是是taskStatetinyint否任务状态关闭开启其中iscurrent表示是否为当前任务taskstate表示任务完成状态。当iscurrent=taskstate=表示任务已经完成iscurrent=taskstate=表示下一任务为汇聚节点需要等待iscurrent=taskstate=表示当前正在进行需要办理的任务。其中performtype表示办理人参与类型因为一个任务可以指定多个办理人。如果performtype为all那么所有的办理人都需要审批通过才会向后执行如果performtype为any那么只需要任意一人同意即可。任务附属变量同样使用json字符串来存储任务附属变量可以用来存储审批人提交的审批意见也可以按照需求存储其它的数据使用json存储的好处是可以存储任何的键值对类型的数据。()工作流任务办理人表(wftaskactor)用于存储任务指定的办理人的信息如表所示:表任务办理人表(wftaskactor)名称类型可否为空说明备注idbigint否ID主键taskIdbigint否任务ID外键actorIdvarchar否办理人标识符可以用员工账号privilegevarchar是任务权限completetinyint是任务是否完成未完成已完成completeTimedatetime是任务完成时间actionNamevarchar是动作名称任务办理完成后记录办理人的操作类型其中的属性actorId表示办理人使用字符串存储工作流要求这个办理人在工作流外部能够唯一确定一个用户本系统就使用员工的登录账号即表员工信息表中的属性loginName来唯一确定一个用户。系统接口关系图系统接口图如图所示本系统被划分成个层次分别是控制层服务层数据访问层层与层之间的访问通过接口实现每一个模块都有自己的请求控制器服务和数据访问的接口和其实现这样一来在控制层中处理请求服务层处理业务逻辑数据访问层操作数据库。一个完整的请求响应时序图如图和图所示:图同步请求响应时序图图异步请求响应时序图系统界面要求系统界面整体采用典型的左右布局即左边为菜单栏右边显示具体内容同时采用BootStrapAngualr的前端技术实现现代化的扁平化风格首页界面如图所示:图系统界面布局关键技术与难点解决方案()同时使用Mybatis和Hibernate两种持久层工具可能出现冲突Mybatis与Hibernate共用一个DataSource数据源事务管理共用Hibernate的事务管理。()防止用户重复登录利用Servlet提供的Session监听器当新增Session时候判断用户是否已经登录如果已经登录就禁止当前用户重复登录。()当前用户的登录拦截和权限验证使用SpringMVC提供的拦截器对用户的每次访问都进行拦截进行一次登录验证和权限验证提高安全性。()根据用户权限显示菜单和操作从登录页面进入首页时是使用的同步方式所以可以利用JSP动态渲染的技术利用eljstl表达式和自定义标签实现菜单栏和操作按钮按照权限进行展示但对于异步获取数据的页面就通过ajax先判断权限再进行页面渲染。由于权限是固定的所以可以采取一些优化方案比如在系统初始化的时候就将所有权限放进内存中。()工资包含多个工资条目工资条目在数据库中存字符串字符串的格式为ldquo(条目名称:条目金额)(条目名称:条目金额)(条目名称:条目金额)rdquo用符号ldquordquo来区分是工资相加的条目还是相减的条目如果有多个条目就用多个ldquo(条目名称:条目金额)rdquo即可。在工资记录实体对象Salary中将上述字符串解析为Map结构方便使用。()工作流的模型解析和执行工作流程的描述可以看作点与线组成的一个有向无环图使用xml格式的文件进行描述部署时利用domj将xml解析成一个Process对象(包含了流程定义信息)并放进缓存中这样在流程执行过程中需要分析流程定义的时候就可以直接从缓存中获取不必再次花费时间进行解析。将工作流的执行分为两步第一步为开启任务第二步为办理任务开启任务需要考虑输入(input)和输出(output):考虑input:在开启后续任务时需要判断后续任务是否是汇聚节点(input)如果input就需要判断下一任务节点的前面任务是否都完成否则不开启下一任务。考虑output:output=且下一个点是结束节点需要关闭流程output表示后面为并行任务后续任务需要考虑input输入的数量。而办理任务只关心output输出不需要考虑input输入。系统具体实现登录拦截与权限验证的实现登录拦截与权限验证的流程如图所示:图拦截器流程图登录拦截与权限验证由SpringMVC提供的拦截器实现每一个请求都会经过拦截器返回false请求不会继续执行返回true请求才回继续执行由此可以实现登录验证和权限验证。登录拦截与权限验证的核心代码如下:Handler执行之前调用这个方法PublicBooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{a,当前登录的用户HttpSessionsession=requestgetSession()Useruser=(User)sessiongetAttribute(loginuser)b,当前访问的URLStringurl=requestgetRequestURI()StringcontextPath=requestgetContextPath()if(urlcontains(contextPath)){去掉项目路径Stringa=urlsubstring(,contextPathlength())if(contextPathequals(a)){url=urlsubstring(contextPathlength())}}如果访问登陆或者退出就放行if(urlindexOf(loginoutlog)=||urlindexOf(ueditor)=){returntrue}一如果用户未登录就转到登录页面if(user==){if(urlindexOf(loginoutlog)=){a,如果当前访问的是登录功能就放行returntrue}else{b,如果当前访问的不是登录功能就转到登录页面requestgetRequestDispatcher(WEBINFjsploginoutloginjsp)forward(request,response)}}else{二如果用户已经登录就判断权限if(userServicehasPrivilegeByUrl(usergetId(),url)){a,如果有权限访问当前的URL则放行returntrue}else{b,如果没有权限访问当前的URL则转到提示消息的页面requestgetRequestDispatcher(noPrivilegeUIjsp)forward(request,response)}}returnfalse}流程定义的实现工作流使用xml对流程进行描述相关的定义如下:()每提交一个申请的同时生成一个流程实例并将申请资料作为流程实例的附属参数。()审批办理人在工作流内部只是一个字符串所以这个办理人在工作流外部要求能唯一确认一个用户例如这个办理人在工作流外部可以是一个员工的登录名或者工号。()审批任务的权限包括transit(同意、不同意)reject(回退到原点、回退到上个点)cancel(关闭流程)三种不设置则默认为transit。()相关节点描述transition:迁移节点相当于输入输出的指向箭头。start:开始节点必须且只能有一个start没有输入的transition。end:结束节点必须且只能有一个end没有输出的transitiontask任务节点可以有多个输入输出的transition。task:任务节点表示需要办理的审批任务有输入也有输出。()执行逻辑描述如果一个节点有多个输出表示分支节点开启并发如果一个节点有多个输入表示汇聚节点所有并行任务都完成通过才会开启后续任务一个分支节点必须与一个汇聚节点成对出现。()一个简单的xml定义如下:xmlversion=encoding=processnodeid=name=测试流程description=信贷申请流程startnodeid=startname=开始g=,,,transitionto=name=TO填写信贷报告g=,start!自定义开始tasknodeid=tasktype=name=初审operator=#{applicant},userg=,,,transitionto=name=TO审批g=,tasktasknodeid=name=审批g=,,,operator=usertransitionto=name=TO审批g=,transitionto=name=TO审批g=,task!并发流程tasknodeid=name=审批g=,,,operator=userperformtype=alltransitionto=name=TO审批g=,tasktasknodeid=name=审批g=,,,operator=user,usertransitionto=name=TO审批g=,task!并发流程结束tasknodeid=name=审批g=,,,operator=usertransitionto=name=TO审批g=,tasktasknodeid=name=审批g=,,,operator=user,userperformtype=anytransitionto=endname=TO结束g=,task!自定义结束endnodeid=endname=结束g=,,,process根据这个xml所描述的流程可以绘制成一个有向无环流程图如图所示:图简单xml定义所描述的流程图其中多个输出和多个输入之间默认为并行任务即任务审批和审批是并行任务当任务审批和审批都审批通过后任务审批才会被开启。流程模型解析的实现不同节点的解析需要定义不同的解析器那么使这些不同的解析器都继承同一个接口就可以根据具体的节点需求调用不同的实现类来完成解析核心代码如下:流程定义xml的节点根据其节点对应的解析器解析节点内容privatestaticNodeModelparseModel(Nodenode){StringnodeName=nodegetNodeName()Elementelement=(Element)nodeNodeParsernodeParser=try{不同节点类型使用不同的实现类来完成模型解析if(nodeNameequals(start)){nodeParser=newStartParser()}if(nodeNameequals(end)){nodeParser=newEndParser()}if(nodeNameequal

VIP尊享8折文档

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/40

基于SSM的OA系统后台的设计与实现-毕业论文

¥30.0

会员价¥24.0

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利