物业管理系统-软件工程毕业设计论文_第1页
物业管理系统-软件工程毕业设计论文_第2页
物业管理系统-软件工程毕业设计论文_第3页
物业管理系统-软件工程毕业设计论文_第4页
物业管理系统-软件工程毕业设计论文_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科毕业设计说明书(论文)(2012届)论文题目物业管理系统作者姓名 王坚指导教师 王子仁学科(专业) 所在学院 计算机科学与技术学院提交日期 2012年5月27浙江工业大学本科毕业设计说明书(论文)[2],图3-6显示了RBAC的基本模型。该模型中有三个实体集合和一个会话集合,叫做用户(User)、角色(Role)、权限(Permission)以及会话(Session),还包括了两对关系,用户角色分配(UA)和角色权限分配(PA),这两对关系都是多对多的关系。一个用户可以是多个角色的成员,一个角色也可以拥有多个用户;同样的,一个角色可以拥有多个权限,同一个权限也可以分配给多个角色。RBAC的关键就体现在这两个关系中。最终,是用户执行权限,角色作为中介使得用户执行权限。图3SEQ图\*ARABIC6RBAC基本模型RBAC扩展模型RBAC基本模型简化了权限的管理,使得可以灵活配置用户所拥有的权限,但是它并不能满足所有的需求。例如:在物业管理系统中,公司管理员可以查看该公司管理的所有小区的业主信息、缴费信息等,但是小区管理员只能查看自己小区的信息。同样,A物业公司只能查看自己公司管理的小区信息,而不能查看B公司的小区新。如果要求RBAC基本模型实现上述控制,将会导致权限集合的扩散,使得用户能够访问权限范围之外的数据。经过分析不难发现,凡是涉及业务逻辑的控制,使用RBAC基本模型进行权限管理是比较困难的。RBAC基本模型优势在于解决对象(资源)层面上的权限管理,即执行者能否操作某个对象,能够对其进行何种操作。而对于数据层面上的权限管理,RBAC基本模型在实现校验上是非常低效和复杂的。为此,本课题根据实际的我业务需求,对RBAC基本模型进行扩展,设计了符合物业管理系统需求的权限管理模型——RBAC扩展模型,图3-7显示了RBAC扩展模型:图3SEQ图\*ARABIC7RBAC扩展模型比较RBAC基本模型和RBAC扩展模型,我们可以看到在RBAC扩展模型中增加了三个对象集合和三对关系,他们分别是:用户组(Group)、模块(Module)、资源(Resource)和用户-用户组分配(GA)、角色模块分配(MA)、权限资源分配(RA)。基本要素用户(User):在这个模型中用户是指直接操作本系统的人,如:物业公司的工作人员。角色(Role):是物业公司中特定的一种工作职责或者是职位,如:公司管理员、会计等。属于同一角色的用户,他们一般是同一职位或是拥有相同责任的一组人,他们对本系统有着相同的操作功能。用户组(Group):表示能够访问同一批数据的一组用户的集合,例如:A公司用户组,表示属于该组的用户都能够访问A公司的所有数据;A1小区用户组,表示属于该组的用户都能访问A1小区的所有数据。模块(Module):表示一系列功能操作的集合,例如:用户信息管理(包括了用户的增、删、改功能),物业缴费管理(包括了物业费创建、录入、审核)。用户登录系统后能够根据角色自动加载模块列表。资源(Resource):表示所有的URL请求,如JSP页面请求、Action请求、JS文件请求等。权限(Permission):是操作和资源的聚合,权限的自然属性决定于实际的应用系统,例如:物业管理系统中,权限可以是“查看业主信息、修改业主信息”会话(Session):表示用户登录后被激活的角色和用户组。在物业管理系统的权限管理中,一个Session对象关联一个用户,一个用户在一次访问中只能拥有一种角色,并且只属于一个用户组。基本关系在扩展的RBAC模型中共有五对关系,他们分别是UA(用户-角色分配)、PA(角色-权限分配)、GA(用户-用户组分配)、RA(资源-权限分配)、MA(角色-模块分配)。在物业管理系统中,GA和UA是一对多关系,用户只能属于一个用户组,一个用户组可以有多个用户;一个用户只能拥有一个角色,一个角色可以拥有多个成员。PA、RA和MA是多对多的关系,一个资源可以被多个权限访问,一个权限也可以访问多个资源;一个资源可以被多个权限访问,一个权限也可以访问多个资源;一个角色可以拥有多个模块,一个模块也可以被多个角色拥有。数据库表图3SEQ图\*ARABIC8物业管理系统权限控制数据库E-R图 图3-8显示了物业管理系统安全平台的数据库E-R图。从图中可以看出,权限控制模块共有6张实体表和4张关系表。实体对象分别是:资源(Resource)、权限(Authority)、模块(Module)、角色(Role)、用户组(Group)、用户(User)。关系表分别是:权限-资源(AuthorityResource)、角色-权限(RoleAuthority)、角色-模块(Role-Module)、用户-用户组-角色(UserGroupRole)。数据库的表结构和RBAC扩展模型中基本要素及基本关系分别一一对应。 需要注意的是,用户组存在着层次关系,用户组共分为3个级别,每个用户组都有一个父用户组。级别为1的用户组的父亲用户组默认为0,级别为2的用户组的父用户组为级别为1的用户组中的一个,级别为3的用户组的父用户组为级别为2的用户组中的一个。“关联域”是指该用户组关联的物业公司或物业小区。SpringSecurity在传统的Web系统中,所有的权限验证逻辑都混杂在业务逻辑中,用户的每个操作可能都需要对用户是否有进行该项操作的权限进行判断,来达到认证授权的目的。类似这样的权限验证逻辑被分散在系统的许多地方,难以维护。SpringSecurity框架很好的解决了此类问题,它将系统的权限验证逻辑的实现从业务中分离出来,作为一个单独的“切面”进行管理,它的主要组件如图3-9所示:图3SEQ图\*ARABIC9SpringSecurity基本组件

SpringSecurity的架构在很大程度上依赖代理(delegates)和servlet过滤器,来实现环绕在web应用请求前后的功能层。SpringSecurity主要完成两件事情,其一是认证(Authentication),其二是授权(Authorization)。Web系统引入SpringSecurity框架后,一个对受保护Web资源的请求要经过如图3-10所示的11层过滤器。图3SEQ图\*ARABIC10流经SpringSecurity框架的请求SpringSecurity扩展虽然SpringSecurity能够很好的实现对受保护Web资源的请求的认证和授权,但是它却并不天生就符合RBAC模型。一是,在SpringSecurity中,角色和权限的概念的等同的,即受保护的对象(资源)直接与角色挂钩,这显然不符合RBAC的思想。二是,SpringSecurity没有实现RBAC动态职责分离的要求,因为SpringSecurity中的角色的概念与RBAC的不一样,所以无从谈角色的动态职责分离。为了让SpringSecurity实现真正意义上的RBAC,需要自定义图4-13的最后一层过滤器FilterSecurityInterceptor,命名为MyFilterSecurityInterceptor,该过滤器实现Filter接口并继承AbstractSecurityInterceptor父类。MyFilterSecurityInterce-Ptor通过调用AuthenticationManager对象完成对用户信息的认证,没有通过认证的用户将重定向到登录页面,若通过认证,则调用AccessDecisionManager对象完成用户授权。AccessDecisionManager通过对比用户拥有的权限和被访问受保护Web资源所需要的权限,来判断用户是否可以访问该Web资源,若授权成功,则响应该Web资源给用户,若授权失败,则将提示用户无权访问该受保护资源。SpringSecurity扩展类图图3-11SpringSecurity扩展类图中以“My”开头并且用红色椭圆选中的类均是自己实现的扩展类,它们分别是MyInvocationSecurityMetadataSource、MyFilter-SecurityInterceptor、MyUserDetailsService、MyAccessDecisionManager和TbUser对象。MyInvocationSecurityMetadataSource:该类的主要功能是创建资源和权限的映射Map对象,Key为资源(Resource),Value为权限(Authority)集合,表示访问该资源所需要的权限集合。该对象主要需要实现的方法是loadDefinedResource(参见图3-12具体实现),该方法在该类初始化时调用,创建Map对象。该类的另一个主要方法是getAttributes(参见图3-13具体实现),该方法主要实现根据资源名称获取该资源所需的权限集合。MyFilterSecurityInterceptor:拦截器类,继承AbstractSecurityInterceptor,请求经过该拦截器时,通过调用beforeInvocation方法完成对用户信息的认证和授权。认证时调用MyUserDetailsService对象获取用户信息,认证失败则重定向到登陆页面,认证成功则调用MyAccessDecisionManager对象完成用户授权,授权失败则重定向到失败处理页面,授权成功则显示请求资源。MyUserDetailsService:认证管理器依赖的认证提供者类,主要实现用户信息认证。该类的主要方法loadUserByUsername(参见图3-14具体实现),根据提交的用户名获取用户对象,若获取用户对象为null则抛出异常,该异常被异常处理类处理后重定向到登陆页面;若获取的用户对象不为null,则返回该用户对象给认证管理器,进行密码认证。MyAccessDecisionManager:授权管理器类,主要实现用户授权。该类的主要方法decide(参见图3-15具体实现),遍历用户拥有的权限,若含有被访问资源所需的权限则返回空,将显示被访问资源;若不含,则抛出异常,该异常被异常处理类处理后重定向到access_denied.jsp页面。图3SEQ图\*ARABIC11SpringSecurity扩展类图SpringSecurity关键类实现MyInvocationSecurityMetadataSource关键代码实现图3SEQ图\*ARABIC12MyInvocationSecurityMetadataSource的loadDefinedResource方法实现图3SEQ图\*ARABIC13MyInvocationSecurityMetadataSource的getAttributes方法实现MyUserDetailsService关键代码实现图3SEQ图\*ARABIC14MyUserDetailsService的loadUserByUsername方法实现MyAccessDecisionManager关键代码实现图3SEQ图\*ARABIC15MyAccessDecisionManager的Decide方法实现安全平台实现物业管理系统安全平台主要包括两个部分:系统权限的配置管理,用户请求权限控制。系统权限的配置管理是一个完整的相对独立的子系统,可以实现对系统资源、权限、角色、用户组、用户等信息的灵活配置;用户请求权限控制是一个实时运行的访问控制系统,会拦截每一个用户请求,对其实施权限控制。配置管理权限的配置管理子系统可以对资源、权限、模块、角色、用户组、用户信息等进行增删改操作,以及为权限分配资源、为角色分配权限、为角色分配模块、为用户配置角色和用户组等配置,以实现系统权限控制信息的灵活配置。图3-16、3-17、3-18分别显示了资源管理页面、角色管理页面、用户管理页面。图3SEQ图\*ARABIC16资源管理页面(资源列表)图3SEQ图\*ARABIC17角色管理页面(给角色分配权限)图3SEQ图\*ARABIC18用户管理页面(创建用户)实时控制安全平台的实时控制是通过SpringSecurity框架的拦截器实现,对每个用户请求进行权限判断,若符合权限要求则允许访问,否则拒绝访问。图3-19显示的是物业小区管理员单击“添加业主”按钮时返回的访问拒绝提示页面。因为物业小区管理员只拥有业主信息查看权限,并无权限添加业主信息,所以请求添加业主的jsp页面时,访问被拒绝。图3SEQ图\*ARABIC19访问拒绝提示本章小结本章主要就构建系统的安全平台展开阐述,首先介绍了RBAC模型,并在它的基础上进行扩展,设计符合物业管理系统需求的RBAC扩展模型;接着介绍了SpringSecurity框架,并在它的基础上进行扩展,以支持根据RBAC扩展模型设计的数据库表,使得资源权限的配置通过数据库动态读取。并就SpringSecurity扩展类的关键函数进行了详细介绍。最后介绍了安全平台最后实现的页面。第四章物业管理系统的日志系统构建SpringAOP概述面向方面编程(AOP)提供从另一个角度来考虑程序结构以完善面向对象编程(OOP)。面向对象将应用程序分解成各个层次的对象,而AOP将程序分解成各个方面或者说关注点。这使得可以模块化诸如事务管理等这些横切多个对象的关注点。(这些关注点术语称作横切关注点。)SpringAOP提供声明式企业服务,这些服务中最重要的是声明式事务管理,这个服务建立在Spring的事务管理抽象之上。SpringAOP允许用户实现自定义的方面,用AOP完善他们的OOP的使用。AOP基本概念因为SpringAOP的术语不是特别直观,此处介绍AOP通用的概念。方面(Aspect):一个关注点的模块化。方面用Spring的Advisor或拦截器实现。连接点(Joinpoint):程序执行过程中明确的点,如方法的调用或特定的异常被抛出。通知(Advice):在特定的连接点,AOP框架执行的动作。各种类型的通知包括around、before、throws和afterreturning通知。切入点(Pointcut):指定一个通知将被引发的一系列连接点的集合。AOP框架必须允许开发者指定切入点,如:使用正则表达式。引入(Introduction):添加方法或字段到被通知的类。Spring允许引入新的接口道任何被通知的对象。例如,可以使用一个引入使任何对象实现IsModified接口,来简化缓存。目标对象(TargetObject):包含连接点的对象。也被称作是被通知或被代理的对象。AOP代理(AOPProxy):AOP框架创建的对象,包含通知。在Spring中,AOP代理可以是JDK动态代理或CGLIB代理。织入(Weaving):组装方面创建一个被通知对象。这可以在编译时完成(如使用AspectJ编译器),也可以在运行时完成。Spring和其他纯JavaAOP框架一样,在运行时完成织入。Log4j日志框架Log4J是Apache组织提供的一个日志框架,它设计了灵活的配置文件,利用它可以在不更改程序的情况下,通过修改配置文件来调控日志输出。Log4J主要有以下三大基本构件:记录器(Logger):对日志信息进行分类筛选,通过指定优先级,控制程序中日志信息的输出:高于优先级的日志可以被输出,低于优先级的日志则被忽略。Log4J的级别包括:FATAL>ERROR>WARN>INFO>DEBUG。输出源(Appender):指定日志信息的输出设备。布局(Layout):指定日志输出的格式。日志格式定义一条有效的日志必须要包含的以下四个部分:时间、用户、事件、详情。为了追溯用户行为发生的准确时间,日志必须包含时间戳,并且须精确到秒,时间格式采用“yyyy-MM-ddhh:mm:ss”。每个操作必须要记录操作者是谁,我们采用“[Username]”的格式记录操作者,并且Username是从Session对象获取的当前登录的用户名。用户行为日志还必须包括事件类型,本日志系统记录的事件类型包括“Add(添加)、Update(修改)、删除(Delete)、批量添加(BatchAdd)、批量修改(BatchUpdate)、批量删除(BatchDelete)、登录(Login)、退出(Logout)”。在事件类型后面还需要紧跟操作的对象类型,如Company类、Owner类等。最后日志还需记录此次事件的详情,如:添加的数据详情、删除的数据详情等。表5-1表示一条日志记录的完整格式。表4SEQ表\*ARABIC\s11用户操作日志格式定义表时间用户名事件类型对象类型详情图4-20显示了用户行为跟踪的日志片段。图4SEQ图\*ARABIC20用户行为跟踪日志片段日志文件设置由于日志的访问操作频率较低、并且日志记录数据量比较大,所以采用文件形式保存较为合理,同时用文件存储日志记录还有利于后期对日志进行数据的筛选等处理。每一条日志记录不管长度多少,在文件中都以一行来表示,并且日志的数据行以时间戳来排序,先发生的事件先记录。本系统每天将产生一个日志文件,文件名称为“usertrack.[日期].log”。例如:usertrack.2012-06-01.log,该日志文件就表示2012年6月1日生成的日志文件,记录这一天所有用户的关键操作。日志记录写入文件采用的Log4J框架来实现的,Log4J的配置文件如图4-21所示。从配置可以看出,设置日志记录级别为INFO,只有INFO级别以及比INFO更高级别的才被输出。输出源指定为DailyRollingFileAppender,表示每日生成一个日志文件,并指定日志文件的保存位置和文件名。输出格式中定义了每行记录加上时间戳和记录内容。图4SEQ图\*ARABIC21Log4J日志文件配置日志切点配置为了能够让SpringAOP自动为我们创建日志切入点,我们将使用正则表达式来配置切入点。使用正则表达式的前提是我们所有的目标对象的方法必须采用统一的命名格式,同时为了能够记录操作详情,我们还需规定目标对象连接点的方法必须带有统一的参数类型。下面先就系统DAO层增删改以及批量增删改的方法声明作一些规定。添加一个对象的方法必须以“save”开头,并且要传递一个实体对象作为参数,如:publicvoidsaveCompany(Companyinstance)。更新一个对象的方法必须以“update”开头,并且要传递一个实体对象作为参数,如:publicvoidupdateCompany(Comaonyinstance)。删除一个对象的方法必须以“delete”开头,并且要传递一个实体对象作为参数,如:publicvoiddeleteCompany(Comaonyinstance)。批量添加对象的方法必须以“batchAdd”开头,并且要传递一个实体对象列表作为参数,如:publicvoidbatchAdd(List<Company>list)。批量修改对象的方法必须以“batchUpdate”开头,并且要传递一个实体对象列表作为参数,如:publicvoidbatchUpdate(List<Company>list)。批量删除对象的方法必须以“batchDelete”开头,并且要传递一个实体对象列表作为参数,如:publicvoidbatchDelete(List<Company>list)。所有的日志记录都是在这些增删改方法执行之后触发的,所以需要为这些切入点配置after通知,SpringAOP详细的配置情况如图4-22所示。图4SEQ图\*ARABIC22SpringAOP日志切点配置日志方法实现为了实现用户行为跟踪,需要为每一个切点(图4-22中所配置)设计一个通知方法,当系统运行到切点并执行成功后,将执行自定义的通知方法,记录当前操作的信息。通知方法主要设计思路是:首先从session中获取当前登录用户的真实姓名,并记录在log信息中;接着获取连接点对象Joinpoint,然后从连接点对象中获取参数列表,我们跟踪的增删改操作只有一个参数,所以取参数列表的第一个元素。获取连接点参数后,记录参数类型,也就是我们的操作对象类型,以及参数的具体信息。图4-23、4-24分别是添加对象和批量添加对象的通知方法的详细实现。图4SEQ图\*ARABIC23添加操作时触发的日志记录函数图4SEQ图\*ARABIC24批量添加操作时触发的日志记录函数修改对象、删除对象、批量修改、批量删除等的通知方法实现和添加对象通知方法的实现思路大致相同,此处不一一列举。本章小结本章首先介绍了SpringAOP面向切面编程的基本思想和Log4J日志框架,然后根据系统安全要求设计了日志格式,接着给出了Spring中声明式AOP的详细配置,最后介绍了日志跟踪中通知方法的设计,并给出一个添加对象通知的具体实现。第五章物业管理系统的短信平台构建短信发送流程短信发送的一般流程可以简单描述为:Web系统将待发送短信记录保存到数据库;Web系统调用自身的Jms消息生产者向消息队列发送短信发送的消息;短信发送服务程序的Jms消息消费者监听到消息,解析消息;短信发送服务程序读取数据库待发送短信记录;短信发送服务程序调用OpenMAS代理服务器提供的WebService接口,发送短信;短信发送服务程序接收OpenMAS接口返回的发送结果,并更新数据库中短信记录的状态。图5-25显示了短信发送流程的顺序图。图5SEQ图\*ARABIC25短信发送流程顺序图JMS消息机制构建ActiveMQ消息中间件ActiveMQ是Apache组织下的一个最受欢迎、功能强大的开源消息传递和集成服务器,同类产品有IBMWebSphereMQ、MicrosoftMessageQueuing(mSMQ)等,这些产品都是为了实现企业消息的传送。企业消息传送的一个关键概念就是:消息是通过网络从一个系统异步传送给其他系统的。异步传送一条消息意味着,发送者不需要等待接收者接收或处理该消息,它可以自由地发送消息并持续进行处理。在异步消息传送机制中,应用程序使用一个简单的API(Java消息服务API)来构建一条消息,然后再将消息转发给面向消息的中间件,以便传送给一个或多个的预定接收者(参见图5-26)。一条消息就是一个业务数据包,它通过网络从一个应用程序发送给其他应用程序。图5SEQ图\*ARABIC26面向消息的中间件SpringJMS+ActiveMQ配置要使用ActiveMQ的消息服务,必须先在服务器上安装和配置ActiveMQ服务器。ActiveMQ服务开启后默认采用TCP协议监听61616端口。Spring的JMS抽象框架简化了JMSAPI的使用,并与JMS提供者ActiveMQ平滑地集成。Spring框架通过JmsTemplate类来实现消息的发送与接收。消息的生产者和消费者通过向同一个消息队列发送消息和接收消息,来实现的通信和同步。图5-27的显示了ConnectionFactory(连接对象工厂)、JmsTemplate(Spring的消息模板)和Destination(消息队列)三个基本对象的配置情况。从JmsTemplate的配置可以看出,本系统采用的消息服务的模型是发布者/订阅者模型。图5SEQ图\*ARABIC27SpringJMS+ActiveMQ配置JMS消息格式定义为了实现Web系统与短信发送服务程序之间的通信,我们必须定义它们之间通信的消息格式,只有接受到指定格式的消息才触发相应的操作。本系统采用的是文本格式的消息,所以我们可以自定义文本格式,以实现不同的消息。再定义消息之前,我们首先要明确两个系统之间需要进行哪些通信,以及通信时需要传递什么信息。通过对短信平台分析,我们发现两个系统之间的通信主要包括:Web系统给短信发送服务程序传递“开始发送短信”的命令。短信发送程序向自己发送“结束服务”的命令。消息(1)格式定义:命令语句:参数列表从消息格式定义中可以看出,本消息由两部分组成,短信发送命令是:begintosend。参数列表是指存储在数据库中待发送短信记录的编号,若同时发送多条短信记录,则参数之间用“,”分隔。例子:begintosend:1,2,3,表示通知短信发送服务程序开始发送编号为1,2,3的短信记录。消息(2)格式定义:命令语句从消息格式定义中可以看出,本消息只有一个部分组成,停止服务的命令为:stopservice。一旦短信服务程序开启之后,将一直处于监听状态,直到接收到该命令后才跳出监听状态,此时不能再接收消息(1),也就无法执行短信发送服务。JMS消息生产者消息生产者类主要有实现一个sendMessage()方法,通过该方法向ActiveMQ服务器的指定消息队列发送消息。sendMessage()方法依赖JmsTemplate对象和Destination对象,并调用JmsTemplate对象的send()方法实现向Destination对象指定的消息队列发送消息。我们主要需要定义消息体。发送短信的消息体格式参见5.2.3小节中消息(1)的格式定义。图5SEQ图\*ARABIC28短信发送消息生产者JMS消息消费者消息消费者主要实现一个receive()方法,该方法使消息消费者类一直处于监听状态,一旦监听到消息队列有消息传送过来,便解析该消息。如果消息解析后的命令是begintosend,则再解析消息体的参数列表,最后调用smsUtil对象(该对象调用OpenMAS服务)实现短信发送任务。如果解析后的命令是stopservice,则使消息消费者推出监听状态,结束短信发送服务。消息消费者类依赖JmsTemplate对象和Destination对象。图5-29详细描述了消息消费者类的具体实现。图5SEQ图\*ARABIC29短信发送消息消费者OpenMAS接口MAS是中国移动部署在企业侧的移动代理服务器,其核心的能力是能够与企业中的应用系统集成起来。本系统采用OpenMAS提供的集成接口,为物业管理系统提供一个短信平台,将产生的业务信息通过短信发送给业主。在Java应用程序中使用OpenMAS需要导入OpenMasClient-1.2.jar包以及它依赖的jar文件,OpenMAS通过向外部发布WebService来提供服务。要使用OpenMAS服务必须首先在OpenMAS服务器上注册一个账号,应用程序中使用该账号来创建一个Sms对象。创建Sms对象实例:Smssms=newSms(“:8080/openmasservice”)。参数URL表示OpenMAS服务器的地址。发送短信只需调用Sms的SendMessage方法,该方法有五个参数,它们分别是:destinationAddress:String类型数组,表示接收人列表。message:String类型,表示短信的内容,用户自定义。extendedCode:String类型,表示扩展码,与OpenMAS服务器配置相同。applicationID:String类型,表示账号名,与OpenMAS服务器配置相同。password:String类型,表示账号密码,与OpenMAS服务器的配置相同。该方法执行成功后将返回String型一串哈希码,若接收到该哈希码则表示发送成功,否则将抛出异常。图5-30显示了OpenMAS接口方法调用的实例。图5SEQ图\*ARABIC30OpenMAS接口业务短信管理业务短信管理是指管理横切在具体的业务流程中的短信服务,比如:当用户缴纳物业费后系统将自动发送一条缴费提醒短信,提示该用户已成功缴费信息。由于不同的物业公司物业费管理的流程并不完全相同,A公司可能希望在小区管理员录入缴费信息后,就发送提醒短信给业主,而B公司可能希望等到该笔物业费被公司财务审核通过后,再发送提醒短信给业主,并且短信的内容可能也不尽相同。因此如果将短信发送相关代码直接写入业务流中,需求一旦变动将很难维护和管理,而且将使业务处理变得更加复杂。因此我们采用AOP切面编程,在需要短信服务的方法处设置切点,执行切点处的方法后将自动调用通知方法完成短信服务。如此不仅可以实现业务短信服务的灵活配置,而且使得业务处理更加的清晰简单。业务短信切点配置为了实现在当物业费录入后自动触发短信服务,需要把ICondoFeeService接口中batchInput方法作为切点,并为该切点配置after通知,具体的通知方法在SmsAdvice对象中定义(参见5.图5SEQ图\*ARABIC31业务短信切点配置业务短信通知方法业务短信的通知方法主要设计思路是:通过连接点对象合成短信内容,并创建短信记录实体对象,然后将该短信记录保存到数据库,保存成功后获取自动生成的短信记录ID,将此ID作为参数,调用JMS消息生产者发送消息给短息发送服务程序。群发短信管理群发短信管理是指短信平台支持同时给多人发送短信。主要用途在于,物业公司可以批量给整个小区或指定一部分业主发送短信,或是系统用户可以给系统中其它用户发送通知短信等。短信群发支持联系人查找功能,用户可以查找其权限范围内的所有业主和系统用户,并可选择地将其添加到接收人列表。同时还支持手动添加联系人。图5-32显示了短信平台的操作页面:图5SEQ图\*ARABIC32短信平台页面(查找联系人)历史短信查询历史短信查询是指系统用户可以查看其权限范围内的所有已发短信记录,群发的短信将作为一条记录显示,接收人列表为所有接收人。通常小区级别用户只能查看自己所发送的短信记录,公司级别管理员可以查看公司所有用户的短信记录。本章小结本章首先介绍了短信发送的整体流程,接着详细介绍了流程中两个关键步骤,JMS消息机制的建立以及OpenMAS接口的调用。然后,就短信平台的三个主要应用场景做了描述说明,它们分别是,业务短信管理、群发短信管理和历史短信查询。第六章物业管理系统业务功能实现物业管理系统的主要是为了实现物业管理的信息化和自动化,以提高物业管理工作的效率,所以实现系统的业务功能是本系统的首要需求。本系统的业务需求主要包括:物业信息的管理和维护以及物业费缴费管理。其中物业信息包括了物业小区信息、楼宇信息、房产信息、业主信息等等,物业缴费又包括了物业费的创建、录入、审核等多个流程。下面就对这些业务功能的实现展开阐述。公司信息管理因为本系统是多个物业公司的共享平台,所以必须对使用本系统的物业公司信息进行管理和维护。物业公司信息包括了公司的基本信息以及公司所注册的OpenMAS账号信息,这些信息的维护工作由移动公司管理员管理。物业项目管理本文中物业项目即是指小区,小区信息管理包括了小区的基本信息管理、小区的楼宇信息和房产信息管理。物业项目管理主要是实现信息的增删改、导入导出以及筛选功能。小区信息管理小区信息管理管理是指维护小区的基本信息,包括创建小区、修改小区信息、删除小区、批量导入小区信息等基本功能。其中删除小区时将级联删除与该小区相关的所有楼宇和房产信息。楼宇信息管理楼宇信息管理是指维护小区的楼宇信息,包括创建楼宇,修改楼宇信息、删除楼宇等基本功能。其中创建楼宇信息时将自动根据设定的楼宇信息字段自动生成房产信息,删除楼宇时也将级联删除与之关联的所有房产信息。房屋信息管理房产信息管理是指维护小区的房产信息,包括修改房产信息、删除房产信息,创建房产在创建楼宇时自动完成。业主信息管理业主信息管理是指维护小区的业主信息,包括新建业主、修改业主信息、删除业主、批量导入业主信息等基本功能。业主信息创建前必须先创建好物业项目信息,因为在业主信息中需要关联到某小区具体的某一房产。业主信息创建后将自动更新关联房产的信息,将该房产的状态设置为“已入住”并且设定该房屋的面积,同时将业主与房产的关联信息存到关联表中。业主信息导入采用了JXLAPI来完成Excel文件的操作。业主数据导入的基本思想是,利用JXL将文件输入流转换成Workbook对象,然后读取该对象的数据,并将其转换成业主对象数据,然后存到数据中。在保存业主数据的同时需要更新房产信息。文件上传只支持Excel1997-2003版本,即后缀名为.xls的文件。业主信息导入的整体流程如图6-33所示:图6SEQ图\*ARABIC33业主数据导入流程图物业缴费管理物业费是物业公司的主要收入来源,因此物业缴费管理是物业公司最重要的功能之一。物业缴费管理的整个过程由多个环节组成,并且每个环节都由不同的人员参与。首先是物业费的创建,创建过程由物业公司的财务人员创建;接着是物业费缴费和录入系统,这个环节由各个小区的管理员来完成;最后是物业费缴费信息的审核,这个环节同样由物业公司的财务来操作。经过这个三个主要环节,一笔物业费记录才算真正完成。一条物业费记录从创建到最终审核通过,共需要经历以下几个状态:new,input,payed(denied),pass。new:物业费项目创建后自动生成物业费清单,此时的物业费记录为new。input:公司财务人员通过导入已填写物业费应收金额的Excel表格,来完成应收金额的设置,导入成功后物业费记录状态变为input。payed:小区管理员录入缴费信息后,状态变为payed。pass:公司财务人员审核实收金额和应收金额是否一致,如果正确则将物业费记录状态设为pass。denied:若审核为通过,则状态被设为denied,此状态下小区管理员可以重新录入缴费信息。图6-34详细描述了物业缴费管理各个阶段的操作流程以及数据状态的变化。图6SEQ图\*ARABIC34物业缴费管理跨职流程图物业费创建从图6-34可以看出,物业费创建主要包括三个流程,分别是创建物业费项目,调用数据库存储过程生成物业费清单,下载并填写应收金额,最后倒入填写好的文件,完成应收金额设定。图6-35显示了物业费项目的创建过程:图7SEQ图\*ARABIC35物业费项目创建表单用户首先从物业项目列表中选择代创建物业费项目所在小区,下拉列表中的数据根据用户的权限信息进行显示,即只能显示本公司管辖的物业小区。选择好物业项目和时间后,点击预览,可以显示该物业费项目创建后将生成的清单项数据,用户确认后创建该项目,并自动调用数据库存储过程生成清单。在财务人员界面,选中新建的物业费项目后,可以单击“数据导出”,下载新建的物业费项目清单,以设定应收金额,填写完成后单击“数据导入”完成上传。图6SEQ图\*ARABIC36财务人员界面物业费清单列表(导出)物业费录入物业费录入是由小区管理员来完成的操作。小区管理在物业费管理界面可以通过房屋树快速找到某一户,选中该户后,右边列表会显示该户的所有物业费缴费记录。选中状态为input的记录后单击“缴费录入”按钮,会跳出录入框,填写好实收金额和备注,点提交即可完成录入。若是选中的记录状态不为input或denied,则单击“缴费录入”后将弹出提示框,提示无法录入,图6-37显示了小区管理员录入界面:图6SEQ图\*ARABIC37小区管理员界面物业费清单列表(录入)物业费审核物业费缴费是由公司财务人员来完成的操作。财务人员在物业费管理界面,可以通过物业费项目树快速找到某小区某一段时间的物业费记录。选中状态为payed的记录后,单击“缴费审核”会弹出如图6-38的缴费审核页面,用户核对好信息后,选择审核结果的下拉框,设置审核结果,完成审核只需单击“提交”。如果用户选中的记录状态不为payed,则将提示无法录入。图6SEQ图\*ARABIC38财务人员界面物业费清单列表(审核)本章小结本章从系统的业务功能需求出发,介绍了物业管理系统的公司管理、物业项目管理、业主信息管理、和物业缴费管理的实现第七章总结与展望总结物业管理系统基本符合物业公司对于日常管理的需求,在一定程序上提高了物业公司的管理效率和服务质量。从系统设计角度总结,本系统充分考虑了系统的灵活性和可扩展性,便于后期需求的变更以及系统的扩展升级。所有的功能模块以及系统权限都可以灵活的进行配置,当需要添加新的功能模块式只需要通过配置即可完成。从系统的的功能实现角度总结,本系统采用了面向对象编程(OOP)和面向切面编程(AOP)相结合的技术路线,充分利用各种技术的优点,使得系统的整体结构和业务逻辑十分的清晰。本人作为本项目的负责人、系统设计师以及主要的编程人员,从项目的整个生命周期中学到了很多,不仅仅是编程技术上的收获,还收获了项目管理的经验,学会了诸如版本控制等项目开发中必备的技能。开发完成的系统功能完备,进行了严格测试,已经具备了推广应用的基本要素,即将在中国移动舟山公司进行试运行。展望本项目作为物业公司的一套管理系统,虽然满足了公司的基本需求,但是系统在通用性方面还需要很大改进,以适应不同物业公司差异性的需求,如:物业缴费的操作流程还可以继续优化使得通用性更强。同时系统在安全性方面仍需要改进,虽然现在系统在访问控制以及日志跟踪方面做了充分地设计,但是在数据的保密性方面仍有欠缺,在接下来的系统升级中,我将考虑使用PKI技术来提高信息安全。参考文献DavidF.FerraioloandD.RichardKuhn.Role-BasedAccessControls[J].15thNationalComputerSecurityConference(1992)Baltimore,Oct13-16,1992.Pp.554-563.RaviS.Sandhu,EdwardJ.Coyne,Hal

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论