智慧城管信息分析系统_第1页
智慧城管信息分析系统_第2页
智慧城管信息分析系统_第3页
智慧城管信息分析系统_第4页
智慧城管信息分析系统_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

智慧城管信息分析系统1绪论享有“人间天堂”盛誉的杭州,一直是全国数字城管创新实践中的开拓者和佼佼者。自上线以来,杭州坚持以建设服务、创新、效能型数字城管为目标,紧紧围绕市委、市政府的战略部署,切实落实“三个第一”(第一时间发现问题,第一时间处置问题,第—时间解决问题)和城市“四化”(洁化、绿化、亮化、序化)长效管理要求,走出了一条独具杭州特色、符合杭州实际的数字城管建设和运行之路。信息采集市场化、“新两轴”、资源整合、标准创新、市辖城域统一平台、“街镇模式”等等,不仅是全国范围内的首创,更为全国数字城管事业的持续发展提供了极好的实践借鉴和理论启迪。2007年10月3日,中央政治局委员、国务院副总理曾培炎在现任国家住房和城乡建设部部长姜伟新及浙江省、杭州市主要领导的陪同下,视察了杭州市“数字城管”工作,并给予了充分肯定,指示要“认真总结经验,努力加以推广”。随着数字城管工作的深入推进,目前就发现、处置、解决问题的机制越来越成熟,但是却一直未有对数字城管案卷数据的进行系统的统计分析软件,仅仅只是为了处置问题而处置问题,没有对城市管理中发现的问题进行系统的归类、统计、分析,从而总结出一定的规律,来辅助城市管理决策者们进行更加优化的城市管理工作。笔者认为对数字城管数据进行系统分析的意义重大,能够大大提高数字城管的使用绩效,使数字城管成为真正的智慧城管。首先能使城市管理化被动为主动,以前城市管理往往是被动的处置各类问题,重点在处置问题上,而没有很好的对问题进行分析,挖掘数据表面以外更深层次的内容,从而预先判断接下来的趋势,尽早的制定相应的措施,做好防范,进而提高城市管理的水平,增强管理主动性。其次,能够及时发现城市管理中的疑难问题,有针对性的开展工作。通过大量数据分析,找出在一个时间段内频繁出现的问题,并有目标的开展集中整治或重点整治活动,杜绝此类事件的频繁发生,促进老大难问题的有效解决。还有,对数字城管的数据进行分析还能作为绩效评价的依据。通过数据的波动从而能够比较直观的反映出一个政策或者一个整治活动实施或者开展以后的实际效果,给政策制定者提供了很好的反馈信息,从而提高政策落实的绩效。另外,通过数据的分析能够实时的提供一些数据超标的预警,使城市管理的行为具有一定的超前性,能够提早的判断问题发展的趋势,将问题消灭在萌芽状态。目前,全国很多城市都建立了、或准备建立数字城管信息处置的平台。在城市管理的方方面面都起到了很好的效果。拿杭州为例,目前数字城管平台主要用于以下几个方面:(1)推动市民关注热、难点问题的解决。杭州数字城管每年能上报处理各类有效信息10万件左右,且每年的处置结案率均超过90%,使大量与市井细民息息相关的城管问题得到了切实解决。(2)用于城市综合管理和应急处置的需要。数字城管的基础平台及专业的信息采集队伍,便于为城市信息摸底及街面动态状况实时跟踪提供翔实的数据信息。在五年来的城市防汛抗台、节庆保障、“三创”迎检中都发挥了重要作用。(3)用于行业监管的信息普查。根据各城区、部门的需要,杭州市数字城管自运行以来,共开展了庭院改善、背街小巷、夜市整治、户外广告、卫生死角等各类普查,并出具了分析报告,配合有关部门推进了各类专项整治,在城市“四化”长效管理中发挥了明显作用。但很多城市目前的数字城管系统仅仅只集成了问题采集与处置子系统,并没有数据分析系统,在数据分析方面还不够重视,没有充分挖掘数据内部深层次的意义,提高决策的准确性、客观性。论文主要内容为城管案卷的数据分析和数据预警,包括对数字城管信息建设的介绍、相关技术的使用,再通过软件工程的发流程,将系统的建立分为需求分析、详细设计、具体实现和编码测试等阶段,通过各个阶段的分析研究最终完成系统的建立。论文通过不同的章节去描述以上的内容,具体的章节安排如下。论文的主要章节分为绪论、相关技术介绍、系统需求分析、系统设计、系统实现以及系统测试。第一章是绪论,包括数字城管的背景介绍、现状分析以及数字城管智慧分析系统的简介。第二章是相关技术介绍,包含系统用到的程序语言、开发环境、构建工具、数据库、应用使用的框架以及前端使用的技术。第三章是系统需求分析,包括数字城管智慧分析系统的设计目标、运行的软硬件环境、功能和性能的需求分析。第四章是系统设计,包含系统的设计理念和设计原则、系统架构、系统构建、主要的功能模块设计、系统的数据库设计,其中主要功能模块技术分为登陆设计、权限管理、系统管理、数据分析功能设计。系统数据库设计分为系统E-R图设计和数据库表设计。第五章是系统实现,包含登陆功能实现、权限功能实现、预警功能实现、分页功能实现、通用功能实现、模块管理实现、角色管理实现、案卷管理实现、批量上传案卷实现、预警管理实现、图形分析实现、街道分析实现、路段分析实现。第六章是系统测试,包含系统的功能测试、性能测试和测试结果及分析。

2相关技术介绍智慧城管信息分析系统主要使用的开发程序语言为Java。Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台(8卩JavaSE,JavaEE,JavaME)的总称。Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制器、科学超级计算机、移动和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。Java是面向对象的编程语言,不仅具有很高的安全性及系统无关性,并且还有具有解释性、可移植、多线程等特性。在本系统中,Maven主要作为一个构建工具,用来把源代码构建成可发布的构件的工具。通过Maven约定优于配置的原则,可以很清晰地管理代码结构、jar包。Maven是作为一个项管软件,它的功能非常强大。其功能不仅包含了项目对象模型、项目生命周期,还包含了依赖管理系统和用来运行定义在生命周期阶段中插件目标的逻辑等方面。开发的IDE采用了Eclipse。Eclipse是一个开放源代码的、基于Java的具有良好扩展性能的开发平台。从软件的本质上来说,用于经相关插件组件搭设发环境的。仅仅只有一个框架和一组服务。幸运的是,Eclipse还带有一个统一的插件集合,里面包含了Java的开发工具JDK。通过Eclipse自带的代码提示功能、格式化、重构等功能和同步代码等插件可以有效地提高开发效率,节约开发成本。服务器采用了JBoss应用服务器。在J2EE应用服务器领域,JBoss是发展最为迅速的应用服务器。由于JBoss遵循商业友好的LGPL授权分发,并且由源社区开发,这使得JBoss广为流行。JBoss是不收费的,并且开放源代码,只要有LGPL许可证就可以进行发布。但同时也有闭源的,开源和闭源流入流出的不是同一途径。架设JBoss服务器需要的硬件配置较低,并且安装简单,安装完成以后,只需设置部分环境变量就能使用了。数据库采用了MySQL数据库。MySQL是一个源码开放的非大型关联式数据库管理系统,开发者为瑞典MySQLAB公司。MySQL被广泛地应用到Internet上的中小型网站建设中。由于其软件体积小、响应较为迅速、数据库维护成本较低,尤其适合小型项目。本系统采用了iBatis作为持久化层框架,Webx作为MVC框架,Velocity作为页面濱染框架,利用Spring框架来进行各框架的整合。iBatis自带的持久层框架包括SQLMaps和DataAccessObjects(DAO)。就现阶段较为流行的ORM而言,不管Hibernate或者是ApacheOJB,都比较完整地封装了数据库的结构,从POJO映射到数据库表所有机制都可以提供。软件设计人员通常只需将POJO到数据库表的映射关系定义好,就能很轻松的由Hibemate/OJB提供的方法来操控持久层。软件设计人员甚至无需熟练掌握SQL的相关知识,相关存储逻辑会被Hibemate/OJB自动制定的,从而生成相应的SQL并执行JDBC接口的调用。与Hibernate和ApacheOJB等ORM解决方案有所不同的是,iBatis是一种非“一站式”的ORM实现。POJO与SQL之间的映射关系是iBatis的主要着眼点。换句话说,iBatis并不会在运行期间为软件设计人员自动生成SQL并予以执行。软件设计人员需要编写具体的SQL,接下来将SQL所需的参数,以及返回的结果字段通过映射配置文件映射到指定POJO。这样的好处是用户只要了解SQL及iBatis的配置方法就可以很快地上手,更加灵活,更能进行数据库的SQL调优,不会有Hibernate那样很高的学习成本。Spring从开销和大小两个方面来说都是轻量的,它是一个轻量级的控制反转(loC)和面向切面(AOP)的容器框架。Spring框架可以非常小,一个较为完整的框架包含在1MB左右的JAR文件里就可以进行发布。另外所需的处理开销对Spring而言的也是非常有限的。由于Spring是非侵入式的,所以,对Spring应用中的对象来说,它不依赖于Spring的特定类。Spring采用了控制反转(loC)技术来增加松耦合。用被动的方式使某一对象,它所依赖的其它对象传递进来,loC的应用结果不再是这个对象本身创建或者查找依赖对象。也就是说loC与JNDI刚好相反一一不是对象从容器中查找依赖,而是容器在对象刚刚进入初始化时,在对象尚未请求的阶段就主动传递依赖给它。应用对象的配置以及生命周期是由Spring管理的,从这个方面来说它应该归为一种容器,你可以随意创建每个bean以及进行相关配置操作,而你的bean可以在需要时生成一个新的实例或者单独创建一个实例。Spring通过简单的组件配置拼接、内容不断扩大,能够最终组合成为一个复杂的应用。在Spring中,应用对象通过声明的方式进行组合,常常能够在一个XML文件里被发现。Spring也提供了很多基础的功能,例如:持久化框架以及集成事务管理等方面),而留给了软件设计人员的是应用逻辑的开发。Spring所拥有上述这些特征,能够使软件设计人员编写的代码更简洁、更具逻辑性、更可管理,也能够更方便的进行测试。这些特征也为Spring中的不同的模块提供了很好的支持。Webx框架是基于经典MVC设计模式的WEB框架,推崇页面驱动和约定胜于配置的理念。Webx是一个基于Spring的组件框架。组件是一^t"软件包,它可以被其它组件扩展,也可以扩展其它组件。利用这些特性,Webx不仅能够用来发高度可定制的Web应用(这是它的主要功能),也能够用来帮助你开发高度可扩展的非WEB的应用。Velocity是一个基于java的模板引擎(templateengine)。它允许任何人仅仅简单的使用模板语言(templatelanguage)来引用由java代码定义的对象。当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码从web页面中分离出来,这样为web站点的长期维护提供了便利,同时也为我们在JSP和PHP之外又提供了一种可选的方案。本系统采用CSS控制样式,JQuery编写js,Highcharts图形控件进行数据分析。JQuery是继prototype之后又一个优秀的Javascript框架。它是轻量级的js库,它兼容CSS3,还兼容各种浏览器。JQuery使用户能更方便地处理HTMLdocuments、events、实现动画效果,并且方便地为网站提供AJAX交互。JQueiy还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。JQuery能够使用户的html页面保持代码和html内容分离,也就是说,不用再在html里面插入一堆js来调用命令了,只需定义id即可。CSS是英语CascadingStyleSheets(层叠样式表单)的缩写,它是一种用来表现HTML或XML等文件样式的计算机语言。CSS能够真正做到网页表现与内容分离,相对于传统HTML的表现而言,CSS能够对网页中的对象的位置排版进行像素级的精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力,并能够进行初步交互设计,是目前基于文本展示最优秀的表现设计语言。CSS能够根据不同使用者的理解能力,简化或者优化写法,针对各类人群,有较强的易读性。Highcharts是一个制作图表的纯Javascript类库,它兼容当今所有的浏览器,包括iPhone、IE和火狐等等;对个人用户完全免费;支持大部分的图表类型:直线图,曲线图、区域图、区域曲线图、柱状图、饼装图、散布图;提示功能:鼠标移动到图表的某一点上有提示信息;易用性:无需要特殊的开发技能,只需要设置一下选项就可以制作适合自己的图表。

3系统需求分析本系统主要通过对数字城管数据进行系统的定量分析,将数据用图形、图表的形式展现出来,让用户能够比较直观的发现城市管理中出现的各类问题的分布及变化情况,从而为城市管理决策提供依据。(1)硬件环境:普通PC服务器,最低配置要求如下:CPU频率3GHz, CPU数量1个,内存容量1GB,硬盘容量80GB。(2)软件环境:包括PC服务器安装Windows,JBOSS4.2.2及以上,JDK1.5及以上,MySQL5.0及以上,Chrome26及以上或者FireFox3.0及以上,还需要能上网的外部环境。3.3.1系统流程图用户可在登陆页面输入用户名、密码,若用户名和密码匹配则进入系统首页。己登陆用户可退出系统,重新登陆或者切换用户登陆。每个用户都有对应的角色,每个角色有相应的模块权限(可以多个),用户登陆成功后,可看到拥有权限的模块,若访问无权限的页面,则跳转到错误页面,三秒后自动跳转至首页。根据页面的url进行模块的权限控制,通过角色控制模块和区域数据分析,用户和角色再进行一对一的对应关系。系统流程图如下图所示:图系统流程图图系统用例图角色分为系统管理员、数据分析员和超级管理员三种。系统管理员,可以对系统管理相应页面进行操作:案卷管理、批量上传案卷、预警管理;数据分析员,可以对数据分析模块相应页面进行操作,其中分析员又细分为每个区域的分析员,例如西湖区分析员、上城区分析员等,单一区域的分析员只能对该区域下的数据进行分析;超级管理员,拥有所有页面的权限。系统用例图如上图所示。(1)权限管理:为实现权限功能,就有了权限管理模块,权限管理包括模块管理、角色管理、用户管理三个页面,三个页面都有增删改查、禁用、启用、分页的功能。多个模块属于一个角色,一个用户只有一个角色。用户的密码必须安全,构成复杂,不能用简单的数字或英文,并且有一定的长度,以免数据泄露。(2)系统管理:数据分析和数据预警都依赖于案卷信息,系统管理包括案卷管理、批量上传案卷和预警管理三个页面。其中案件管理和预警管理页面有增删改查、禁用、启用、分页的功能。批量上传案卷页面可以通过CSV文件批量上传案卷到数据库。案件管理和批量上传案卷都可以新增案卷,是预警管理和数据分析模块的前置条件。一条案卷记录包含发生时间、问题描述、小类、大类、社区、街道、区域、处置部门等信息。发生时间表示案卷的发生时间,精确到分钟;问题描述表示案卷的具体内容,一般包含地点、事件、具体描述,如“华中路华中路华中跨河桥由北往南人行道有人行道板破损缺失1平方”、“文阵路文阵路丨58号东侧5米左右(世纪华联)门口人行道上有沿街瞭晒”等;小类表示案卷的明细分类,比较大类来说,小类分类更清晰,如“乱堆物堆料”、“行道树”、“车行道”等;大类表示案卷的笼统分类,如“街面秩序”、"道路交通设施”等;社区是案卷发生的所属社区,如“皇亲苑社区”、“刀茅巷社区”等;街道是案卷发生的所属街道,如"文阵街道”、"东新街道”等;区域是案卷发生的所属区域,如“下城区”、“西湖区”等;处置部门是处置该案卷的部门,如“长庆执法中队”、“下城市容环卫监管中心”等。其中小类属于大类,社E属于街道,街道属于区域,在选择时要注意这些有父子关系的维度之间的联动。预警功能是在系统空闲时间,系统会启动一个定时任务,去扫描预警表,根据状态正常的每条预警记录的条件(小类、大类、社区、街道、区域、处置部门、预警区间:年月周日)去査询案卷表,若查询的案卷记录数符合预警条件(大于预警最大值或小于预警最大值或全部满足),则会给创建此预警记录的用户发送邮件,邮件包含符合预警条件的案卷记录数及预警内容。(3)数据分析:数据分析本系统从三个方向(图形分析、街道分析、路段分析)对案卷进行分析。图形分析用户可根据条件生成相应的图形,对案卷的某一维度的趋势变化一个直观的展现,对后续的决策给予有效的支持;街道分析对某一时间区间内的小类发生的案卷次数以街道作为统计尺度,取前十进行分析,也可查看明细信息。在一个月内,用户可查看每周相对于上一周的小类案卷的增长次数,增长排名前十的街道就需要引起重视,采取措施以降低此类案卷的发生;路段分析是街道分析的补充,因为就实际情况来说,一条路很有可能横跨好几个区域,如莫干山路有部分路段属于西湖区,部分路段又属于拱墅区。像此类情况,用户就很难知道整条路的案卷情况,而路段分析就可以让用户对整条路段的案卷情况有直观的了解,以便做出相应的决策;对用户来说,不同部门不同地域的分析员,对图形分析的条件千变万化,所以对数据的查询条件不做限制,用户可以根据(小类、大类、社区、街道、区域、处置部门、开始日期、结束日期)查询案卷,对用户的分析维度也不做限制,用户可以根据(小类、大类、社区、街道、区域、处置部门)进行分析,用户可按折线图、柱状图和饼图三种展现形式进行展现。每个列表页的记录都有删除、启用、禁用的功能,本质上就是修改该记录的状态,删除状态值为-1,启用状态值为1,禁用状态值为0。删除状态的记录在系统不显示,但是在数据库中可见,禁用状态的记录只在对应的列表页可见,其他不可见,正常状态即启用状态的记录任何地方都可见。新增记录时的验证采用服务器端验证,尽可能避免发生浏览器兼容性、JS不可用等问题。服务器端无法验证则采用前端JS验证。以上为智慧城管信息分析系统各个模块的功能需求分析,通过这些分析,系统各个模块的功能点都大致展现出来了,为下一步系统的数据设计和功能的实现打下良好的基础。在全面了解了系统的功能需求后,接下来可以对系统进行性能需求的分析。性能需求分析主要包括对系统的规划能力、验证能力以及调优能力进行分析,主要通过容量测试、并发测试、稳定性测试、压力测试等方式,对系统的交互能力、业务架构、网络、数据库,甚至到用户行为进行一一分析测试,从而降低系统上线运行的风险,使系统的稳定性更高。下面就通过不同的角度对系统进行性能需求的分析。首先从业务角度进行分析。当系统上线之后使用人数多,访问量大,就需要做相应的性能测试,反之,如果没有几个客户在使用,则无论系统多大,设计如何复杂,都不需要做类似并发性的性能需求分析。其中并发用户数需求是整个用户性能需求的重要发面,并发用户数支持的多少决定了系统的可用性和可扩展性。可以通过JMeter工具对系统进行压测,因为本系统的主要功能点是数据分析和数据预警,无论是维度信息还是数据信息都是在同一张案卷表中,可以考虑对维度信息进行缓存,按实际情况设置缓存失效时间。案卷表的数据需要由数字城管系统同步过来,可以采用导入CSV的方式进行初始化,但是导入操作很有可能会影响数据分析,可以考虑在系统空闲的时候采用同步脚本对数据库直接进行同步。同理,预警功能也可如此操作。其次可以从实时性角度进行分析。系统的实时性主要体现在系统的响应时间上。响应时间指的是从用户向系统发出请求开始,直到收到系统返回的最后一个信息包为止的时间。随着网络的发展,用户能接受的响应时间也越来越短,一般大概为3秒左右。影响系统响应时间的因素有很多,大致可以归结为网络、服务器和系统应用。还可以通过其他几种角度进行分析。例如从应用系统的可用性方面进行分析。可用性不能停留在对用户发调查表进行评估,而使要通过用户的实际使用来分析。通过给予用户不同的业务操作任务,比如完成一次数据分析等方式,根据用户使用的结果进行评估。最后根据大量的实际结果来分析,注意要选择大多数用户使用满意的结果,因为系统不可能使所有的用户满意。还可以从数据库角度进行分析。通过大量的业务操作,这些业务操作需要不断的访问操作数据库,对数据库的SQL执行速度有一定要求,可以通过优化SQL、建索引、主备分离、读写分离等手段进行优化。通过对这些数据库性能数据的收集,反映给DBA,再根据DBA的建议以及实际性能的需求来进行相应的数据库改造和升级。通过以上角度进行性能需求分析,找出系统的瓶颈,提出优化系统的方案,从而对系统的资源进行合理的分配,使系统的性能能够最大限度的发挥出来,达到实际性能的需求。

4系统设计(1)整体性保障原则:本系统本着以用户为中心,以实际应用为目标的设计理念开发。本系统的开发策略是先进行总体规划、然后再分步具体实施。也就是说在刚开始开发时候,先作总的布局(总体分析与总体设计),接下来在总体规划的前提下开展分步开发。(2)满足实际需要原则:软件设计的出发点以及着眼点都是以满足实际需要为前提,一个好的软件应该与与业务紧密结合,并且具有严格的业务针对性,也许需要什么,软件就提供相应的服务。所以,在软件设计设想以及系统需求分析时都做了大量的准备工作。(3)人性化的界面设计原则:由于该系统的主要是针对城市管理决策层而进行设计的,在人性化的界面设计显得尤为重要,好的设计使用户打开界面后一目了然,不需要培训即可使用。强大的功能使用户在使用时方便、快捷、即时、准确。(4)模块化设计原则:本系统采用模块化的设计模式,系统更新较为灵活性,功能模块具有一定的伸缩性,可以按需求实施动态变化的,用户可根据实际情况扩展模块。(5)权限细分设计原则:本系统接可以通过部门内部的局域网,也可以通过外部的因特网进行访问,针对这种复杂的应用环境,必须对所有用户的权限进行细化的分配,实行可靠管理。本系统采用的权限管理设计较为独特,将模块与角色进行多对一建立映射关系,角色还可对分析数据进行权限管理,有效地保障了信息的私密性以及数据的安全性。本系统采用基于B/S的多层架构模式,从下至上依次为:数据库、数据访问层、Model层、业务逻辑层、表示层。除此之外贯穿于数据访问层、业务逻辑层、表示层之间的还有一层数据传输层。这种模型使组织关系更明确,系统结构更清楚,便于后期的维护和升级。B/S架构最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件。只要有一台能上网的电脑就能使用,客户端零维护。分层则实现了程序之间的解耦,提高了程序的复用性,降低了需求变更的代价,易维护、易扩展、可替换。(1)数据库采用了MySQL数据库,MySQL比较小,而且免费,开源,相较于Oracle更容易上手、维护,默认的配置完全能支持本系统。(2)数据访问层也称为持久层,主要是实现0/R映射。数据访问层采用iBatis作为持久化框架,对比Hibernate而言,iBatis更轻量化,学习成本更低,只要会sql,再学习配置就能熟练使用,因为iBatis的sql都保存到单独的文件中,所以更容易进行sql的优化,也更容易维护。(3)Model层编写Dao和实现,根据模块需要的各种持久化操作,确定对应的方法,一般都是一些最基本的增删改査、分页等方法,在本系统中为了操作方便,对Dao层进行了统一的配置,通过泛型来控制传参,写了一个通用的接口:GenericDao.java,实现了增删改查、分页、批量增删改等通用操作。(4)业务逻辑层是整个系统的核心,它与这个系统的业务有关。业务逻辑层的相关设计,均和系统特有的逻辑相关,例如角色管理等操作。如果涉及到数据库的访问,则调用Model层,业务逻辑层对Model层中的操作予以封装。(5)表现层为客户端提供对应应用程序的访问,在本系统中即后缀为vm结尾的velocity页面。此层涉及到js操作,ess样式控制,页面布局等。在数据分析模块中还使用了highcharts图形控件。4.3系统构建用maven工具构建项目的步骤如下:(1)在某个盘下运行如下命令:mvnarchetype:create-DgroupId=com.jiangnaiqiangDartifactld=city然后删除city目录下的src的目录,修改pom.xml的<packaging>属性为pom。(2)在city目录下运行如下命令,建立city-common、city-daKcity-biz、city-web、deploy子工程。其中city-common子工程是一些工具类;city-dal是数据访问层和Model层的代码,包含了数据源配置,iBatis的配置xml,实体类及通用的DAO层接口定义和实现;city-biz是业务逻辑层的代码,还有接口的测试类;city-web是用户表现层,主要包含webx3的screen类、action类、control类和velocity的页面,还有js、ess和highcharts图形实现等;deploy是项目的构建目录。构建命令如下:mvnarchetypexreate-Dgroupld=com.jiangnaiqiang-DartifactId=city-commonmvngnaiqiang-Dartifactld=city-dalmvnarchetypexreate-Dgroupld=com.jiangnaiqiang-Dartifactld=city-bizmvngnaiqiang-Dartifactld=city-wemvnarchetypexreate-DgroupId=comjiangnaiqiang-Dartifactld=deploy修改deploy目录下的pom.xml的〈packaging〉属性为pom。(3)整理poni.xml,删除JUnit的依赖,添加项目所需的dependency和plugin,让maven仓库管理项目的jar包。:mvneclipse:clean,清除EcHpse项目文件;eclipseEclipse.bat脚本:mvneclipse:ecHpse,生成Eclipse项目文件;mvnDownloadSources.bat脚本:mvneclipse:edipse-DdownloadSources=true,生成Eclipse项目文件,且下载项目依赖的jar包到本地;clean.bat脚本:mvnclean,清除产生的项目;package_test.bat脚本:mvnpackage,打包并运行test;package.bat脚本:mvnpackage-Dmaven,test.skip=true-DdownloadSources=false,打包不运行test,不下载jar包。系统目录结构如下图所示:图系统目录结构(5)依次运行mvnDownloadSources.bat、package.bat脚本,将mvn项目导入eclipse本系统只对管理员和普通会员开放,用户必须先通过系统提供的登录界面进入智慧城管信息分析系统,然后才能完成相关操作。用户登录系统完成相关操作后,通过关闭浏览器或注销的方式退出系统。所有需要使用智慧城管信息分析系统的用户,通过本单位超级管理员为其开通的帐号即可登录系统。若用户名不存在或密码错误弹出相应错误信息,若用户名和密码正确则进入首页,首页包含系统介绍和帮助信息。登录系统的用户由于角色、权限不同,看到的工作界面也不尽相同。用户访问系统某个页面,若未登陆,则跳转到登陆页面。用户输入用户名和用户密码。若登陆不成功,则提示用户名不存在或密码不正确。若登陆成功,则跳转到首页,首页为本系统的基本介绍和帮助信息,不同角色的用户看到的左边菜单栏的内容也会不一样。系统管理员,则只显示系统管理模块;数据分析员,则只显示数据分析模块;超级管理员,则显示所有模块。在WEB应用中,表单验证是非常重要的一环。表单验证,顾名思义,就是确保用户所填写的数据符合应用的要求。验证WEB页面中的表单有如下三种形式:服务端批量验证是最传统验证形式,它将所有表单字段一次性提交给服务器来验证。服务器对所有表单进行批量的验证后,根据验证的结果跳转到不同的结果页面;客户端验证是利用JavaScript对用户输入的数据进行逐个验证;服务器异步验证是利用JavaScript发出异步AJAX请求,来要求服务器验证单个或多个字段。如果网络延迟不明显,那么服务器异步验证给用户的体验类似于客户端验证。(1)功能性:由于服务器端验证逻辑存在于服务器上,可访问服务器的一切资源,所以功能很强。而客户端验证逻辑存在于用户浏览器上,不能访问服务器资源,因此有一些功能无法实现,例如:检査验证码、确认注册用户ID未被占用等,所以功能性弱。(2)网络负荷:服务器端批量验证当用户填错任意一个字段时,所有的字段都必须在浏览器和服务器之间来回传输一次。所以它会给网络传输带来较髙的负荷。客户端验证在验证时,不需要网络通信,不存在网络负荷。服务器异步验证每次验证,只需要发送当前被验证字段的数据即可,网络负荷较小。(3)用户体验:服务器端批量验证由于网络负荷较高,造成的响应迟缓。此外,验证失败时必须整个页面被刷新。这些会给用户带来不好的体验。客户端验证响应速度极快,用户体验最好。服务器异步验证由于网络负荷小,用户响应远快于服务端批量验证,用户体验较好。(4)简单性:服务器端验证因为是后端程序,所以实现比较简单。客户端验证相对更复杂,因为需要JS编程。(5)可靠性:相对于其它几种方式,服务端批量验证也是最可靠的方式。因为JavaScript可能会失效(因为浏览器不支持、JavaScript被关闭、网站受攻击等原因),但服务器批量验证总不会失效。综上所述,没有一种验证方法是完美的。但把它们结合起来就可以克服各自的缺点,达到较完美的境地:对所有字段做服务器端批量验证,即便JavaScript失效,服务器验证可作为最后的防线;只要有可能,就对字段做客户端验证,确保最迅速的响应和较好的用户体验;对于必须访问服务器资源的验证逻辑,例如检查验证码、确认注册帐户ID未被占用等,采用服务器异步验证,提高用户体验。以上混合形式的验证无疑是好的,但是它的实现也比较复杂。本系统采用了Webx表单验证服务即服务器端批量验证加客户端验证的结合的方式进行表单验证。Webx表单验证服务主张验证逻辑和页面表现逻辑及应用代码完全分离。所有的验证规则都写在一个单独的配置文件中——页面模板是不需要关心这些验证规则的。当你需要修改验证规则时,只需要修改独立的配置文件就可以了,并不用修改页面模板;应用程序的代码是不需要关心这些验证规则的。当你需要修改验证规则时,只需要修改独立的配置文件就可以了,并不需要修改程序代码。(1)模块管理主要包含新增、编辑、禁用、启用、删除、查询、分页功能。一条模块记录包含模块名称、模块路径、状态等信息。每个模块下的页面的访问路径都必须包含模块路径,即页面必须在相对应的模块目录下,后续模块权限的判断也是以模块路径为依据。因为每个模块具有唯一性,所以模块名称和模块路径不可重复。因为模块路径是页面访问路径的一部分,所以必须以/开头,以/结尾。当模块为禁用状态时,只在模块管理列表可见。可删除模块记录,记录在系统不可见,但是数据库可见,以便查找问题。当模块记录数大于15条时,列表页采用分页展示。可以根据名称和路径模糊查询。(2)角色管理主要包含新增、编辑、禁用、启用、删除、查询、分页功能。一条角色记录包含角色名称、模块权限、区域权限、备注、状态等信息。多个模块可以属于一个角色,一个角色至少拥有一个模块的权限。若为数据分析员,则需配置分析区域,如若不配置则表示所有区域可以查看。若该数据分析员为区域分析员,则一个角色对应一个区域。因为每个角色具有唯一性,所以角色名称不可重复。新增或编辑角色时,模块信息从模块表获取,区域信息从案卷表获取。当角色为禁用状态时,只在角色管理列表可见。可删除角色记录,记录在系统不可见,但是数据库可见,以便查找问题。当角色记录数大于15条时,列表页采用分页展示。可以根据名称模糊查询。(3)用户管理主要包含新增、编辑、禁用、启用、删除、查询、分页功能。一条用户记录包含用户名称、用户密码、、固话、邮箱、角色、状态等信息。因为每个用户具有唯一性,所以用户名称不可重复。用户密码为用户登录时使用,有判断强弱密码的功能,密码必须包含数字、字母、特殊字符,且经过加密后存数据库。用户和角色有一一对应关系,以便根据登陆用户判断所拥有的权限。当用户为禁用状态时,只在用户管理列表可见。可删除用户记录,记录在系统不可见,但是数据库可见,以便查找问题。当用户记录数大于15条时,列表页采用分页展示。可以根据名称模糊查询。(1)案卷管理主要包含新增、编辑、禁用、启用、删除、查询、分页功能。一条案卷记录包含发生时间、问题描述、小类、大类、社区、街道、区域、处置部门、状态等信息。查询、新增、编辑时,当选择某一大类时,只显示此大类下的小类;当选择某一区域时,只显示此区域下的街道;当选择某一街道时,只显示此街道下的社区。当案卷为禁用状态时,只在案卷管理列表可见。可删除案卷记录,记录在系统不可见,但是数据库可见,以便查找问题。当用户记录数大于15条时,列表页采用分页展示。可以根据小类、大类、社区、街道、区域、处置部门模糊查询,开始日期、结束日期查询。(2)批量上传案卷:可通过上传数字城管系统下载的CSV文件,通过程序使CSV的字段对应数据库所需字段,批量导入案卷至数据库。导入文件必须为CSV格式,若导入成功,则跳转至案卷管理页面。(3)预警管理主要包含新增、编辑、禁用、启用、删除、查询、分页功能。一条预警记录包含预警区间、预警最小值、预警最大值、小类、大类、社区、街道、区域、处置部门、状态等信息。查询、新增、编辑时,当选择某一大类时,只显示此大类下的小类;当选择某一区域时,只显示此区域下的街道;当选择某一街道时,只显示此街道下的社区。预警区间有年月周日四种区间。当预警为禁用状态时,只在预警管理列表可见。可删除预警记录,记录在系统不可见,但是数据库可见,以便查找问题。当预警记录数大于15条时,列表页采用分页展示。可以根据小类、大类、社区、街道、区域、处置部门模糊查询,预警区间精确查询。当服务器启动时,会启动一个定时任务,每天的零时会根据预警表的每条正常状态的记录去查询案卷表,预警记录小类、大类、社区、街道、区域、处置部门为查询条件,若记录数满足“小于等于预警最小值”和“大于等于预警最大值”的两个条件之一或者全部满足,则会生成一份预警文档,里面包含预警内容及满足预警的案卷记录,发送邮件至配置预警记录的用户。(1)图形分析:首先根据条件(大类、小类、区域、街道、社区、所属部门、开始日期、结束日期)对案卷进行筛选。当用户为某一区域的数据分析员时,区域选择框只显示该分析员拥有权限的区域,街道和社区选择框只显示此区域下的值。当选择某一大类时,只显示此大类下的小类;当选择某一区域时,只显示此区域下的街道;当选择某一街道时,只显示此街道下的社区。开始日期、结束日期必填,可直接输入或通过时间控件选择;然后选择相应的分析维度(大类、小类、区域、街道、社区、所属部门),选择维度后,会列出该维度下的指标。因指标过多的话,图形过于凌乱,达不到分析的目的,所以选择维度后,用户必须勾选显示指标才能生成分析的图形,至少选择一个显示指标,最多选择六个显示指标;选完指标后,选择想要展现的图形形式。点击分析,则生成相应的折线图、柱状图或饼图。因为显示指标的选择区域会很多,所以点击隐藏指标后会隐藏,当切换显示指标时可以重新生成图形。当鼠标浮动到图形某一区域时,会显示相应的值和必要的信息,生成图形后可点击导出按钮,导出相应的案卷记录列表。(2)街道分析:小类街道Top分析首先选择某一小类,然后选择想要分析的时间区间(开始日期、结束日期),点击分析后,显示此小类在选中时间区间内的发生案卷次数最多的前十街道的名称及发生案卷的次数,点击街道名称可显示相应的案卷明细。小类街道周增长Top分析首先选择某一小类,然后再选择某一月和需要比较的周,比如选择第一周和第四周,点击分析后,显示第四周比第一周增长案卷次数最多的前十的街道的名称及增长的案卷的次数。(3)路段分析:主要是对小类路段发生案卷的次数进行统计,首先选择某一小类,然后选择想要分析的时间区间(开始日期、结束日期),点击分析后,显示此小类在选中时间区间内的发生案卷次数最多的前十路段的名称及发生案卷的次数,点击路段名称可显示相应的案卷明细。案卷没有相应的路段作为维度字段,而是保存在案卷内容中,所以需要对内容进行过滤才能进行路段分析,这就依赖于在录入案卷的过程中必须遵循一定的规范,以便后续进行统计,不然的话会在统计过程中产生脏数据。案卷内容必须以路段名称开头,路段名称后面加一空格。4.5数据库设计数据库是这些系统的关键所在,在数据库中存放着系统所有的信息。作为一个网站的核心功能,数据库设计的好坏对系统的建设与使用有着极其重要的作用。一个合理的数据库开发流程应该是先进行系统分析,再做逻辑设计,最后是物理实现。通过系统分析,分析用户对数据库的具体需求,并根据需求直观地画出E-R图。而逻辑设计的任务就是,根据系统分析设计产生一个关系模型。物理设计的主要任务就是用数据库软件创建一个与逻辑设计中的数据模型对应的数据库。本系统的数据库实体主要有“模块”、“角色”、“用户”、“案卷”。其中“模块”与“角色”存在“所属”联系,一个角色可以拥有多个模块的权限,即“角色”与“模块”之间是一对多的关系。“用户”与“角色”存在一对一关系,即一个“用户”只能有一种“角色”。所以“用户”与“模块”之间是也是一对多的关系。“案卷”用来存放数字城管的案卷,用作本系统的数据分析,“预警”用来存放本系统的预警配置信息,“案卷”和“预警”存在多对多的关系。整个数据库可以用一个E-R图表示,如下图:图E-R图经过数据库的系统分析以后,相关的数据结构已经非常清晰,剩下的工作就是用一种数据库软件来实现上述的数据库结构。首先建立city数据库,然后再建立所相对应的表。(1)模块数据表(city_module):模块数据表用于存放模块的信息,信息包含模块编号、模块名称、状态、创建者、修改者、创建时间、修改时间等信息。模块数据表如下表所示:表模块数据表(2)角色数据表(city_role):角色数据表用于存放角色的信息,信息包含角色编号、角色名称、模块权限W、分析区域权限、状态、创建者、修改者、创建时间、修改时间等信息。角色数据表如下表所示。表角色数据表(3)用户数据表(city_user):用户数据表用于存放用户的信息,信息包含用户编号、角色名称、用户密码、、固话、qq、邮箱、角色id、状态、创建者、修改者、创建时间、修改时间等信息。用户数据表如下表所示:表用户数据表(4)案卷数据表(city_record):案卷数据表用于存放案卷的信息,信息包含案卷编号、发生时间、问题描述、小类、大类、社区、街道、区域、处置部门、状态、创建时间等信息。如下表所示。表案卷数据表(5)预警数据表(city_alarm):预警数据表用于存放预警的信息,信息包含预警编号、预警区间、预警最小值、预警最大值、小类、大类、社区、街道、区域、处置部门、状态、创建者、修改者、创建时间、修改时间等信息。如下表所示。表预警数据表

5系统实现5.1公共功能(1)初次登陆本系统,打开浏览器(Chrome),访问智慧城符信总分析系统网地://localhost/login.htm,出现登陆界面如下图:图登陆界面登陆流程图图登录程序流程图在ValidateUserValve管道类中判断当前用户是否登陆://获取访问的URLStringurl=request.getRequestURLO-toStringO;//从session中获取登录用户,若登录用户为null,则跳转到登陆页面ObjectloginUser=request.getSession0.getAttribute("IoginUser");if(loginUser!=null){}else{//URL不为登陆页if(ntains(Constants.LOGIN_PAGE)){//跳转到登陆页面Redirect(Constants.LOGIN_PAGE);}}用户输入密码与数据库中加密后的密码比较,如若不相同则对用户密码字段设置密码错误的信息。为保障系统安全性,采用MD5加密用户密码,取MD5值的前10位存数据库。(2)退出系统用户登录到智慧城管信息分析系统完成相关操作后,需要退出智慧城管信息分析系统有两种方式:选择页面右上角的"退出“按钮或直接关闭所有打开的浏览器。这两种方式都将保证用户退出智慧城管信息分析系统。LoginAction登陆Action类中登出事件定义。publicvoiddoLoginOut(Navigatornav){//session中清除当前登陆用户,跳转到登陆页面request.getSession().setAttribute("loginUser",null);directToLocation("/login.htm");}(3)界面布局智慧城管信息分析系统界面分为三个区域,上下结构,下又分为左右结构。其中区域上显示智慧城管信息分析系统的标题,区域下左显示用户登录后可供选择的菜单,区域下右显示用户左边菜单栏显示的内容。实现原理:通过webx3结合velocity实现页面布局,将公用的顶部抽取成header.vm,左边导航抽取成leftmenu.vm,右下的页面全部放在screen目录下,使用公共的布局default.vm因为本系统的管理模块都有新增和修改功能,这就需要表单验证功能。本系统采用了Webx表单验证服务,其本质就是服务器端的批量验证,主要由验证规则、页面模板和Java代码组成。(1)验证规则:表单验证服务是一个基于Spring和Spring Ext的服务,因此验证规则可利用Schema来配置。<form>代表表单验证服务的配置。从这里开始定义表单验证的规则。可以定义多个groups,每个group有一个唯一的名称,例如:“inoduleNew”。每个group代表了一组需要验证的字段(field)。每个fie丨d有一个在组中唯一的名称,例如:“模块名称”等。每个field又包含了多个验证规则(validator)。每个验证规则都包含了一段文字描述(message),如果用户填写的数据没有通过当前的规则的验证,那么用户将会看到这段文字描述,以解释出错的原因。配置文件fotmxml结构如下所示:<services:groupname="moduleNew"><services;fieldnanie="name"displayName=”模块名称”〉<required-vaHdator><niessage>必须填写${disp丨ayName}</message></required-validator>..更多validator<custom-eiTorid="name.exist"><message>${displayName}已经存在</message></custom-error>..更多custom-error</services:field>…更多field〈/services:group>…更多group(2)创建表单页面。首先需要使用一个pull tool工具,配置如下:<services:pullchema/services/pull/factories">〈form-toolid="form"/></services:pull>上面的配置定义了一个$fonn工具。现在可以在模板中直接使用它,以新增模块为例,核心代码如下:〈formname="addform"id="addform"method="post"action="">#set($group=$form.moduleNew.defaultInstance)〈inputnanie=”id”value="$!id"id="id"type="hidden"/>〈tableclass=”layout-table"〉<tbody><tr><tddass="title"><eni>*</em>模块名称:</td><td><spanclass="e-verify-wrap#if($!.message)e-verify-waming#end">〈inputclass="e-input-boxmod-input"name="$.key"type="text"value="$!group.nanie.value"/>〈spanclass="e-verify-bubble">$!.message</span></span><pdass=”notice">最长10个字符,只能由中文汉字、英文字母、数字、_组成</p></td></tr><tr><td(:1335=”1:丨1;16”><6111>*</€111>模块路径:</td><td><spanclass="e-verify-wrap#if($!group.path.message)e-verify-waming#end”〉〈inputclass="e-input-boxmod-input"name="$group.path.key"type="text"value="$!group.path.value"〉〈spanclass="e-verify-bubble">$!group.path.message</span></span><pclass="notice">最长100个字符,只能以/开头和以/结尾的英文字母组成</p></td></tr></tbody></table>〈inputtype="submit"name="event_submit_do_edit"value="保存信息”class="e-btne-btn-waming"/>〈inputtype="reset"value="重置信息"class="e-btn"/>〈inputtype="button"id="cancel"value="取消”class="e-btne-btn-linkdialog-cancel-btn"/>〈inputtype="hidden"name="action"value=7inoduleAction"/>HTMLform的action值为空,意思是把表单提交给当前页面。这样,当用户填写表单有错时,应用会停留在当前表单页面,将表单数据连同错误提示一起显示给用户,要求用户修改。如果表单验证通过,应用必须通过重定向操作来转向下lld.value。定义velocity宏:仅当field验证通过时(即$group.field.vaHd=true),才显示错误信息。对于空白表单和通过验证的字段而言,$group.field.valid为true。如果验证失败的话,显示验证出错消息。根据这参数,表单将会被交给modu丨eAction来处理。Action的职责是调用表单验证过程。假如验证通过,就保存数据,并重定向到下一个页面。根据这个参数,表单被提交以后,系统会调用当前action(即moduleAction)的doEdit()方法。每个action类中,可以包含多个处理数据的动作,例如doAdd、doUpdate、doDelete等。上面的Velocity页面模板演示了怎样利用表单验证服务创建一个模块的HTML表单。关键技术解释如下:①创建leNew.defaultlnstance将会对moduleNewgroup创建一个默认的实例。绝大多数情况下,只需要创建唯一的defaultinstance就足够了。所创建的groupinstance(如register)必须先在规则配置文件中被定义。ld.key。表单验证服务会自动生成一个字段名。这个字段名被设计成仅供系统丨d.value。它初始值(即用户填写数据之前)是null。但你也可以在配置文件中为它指定一个默认的初始值,因为值可能是null,因此在velocity中,需要以“$!”来标记它:Velocity认为nul丨是一个错误,除非你以$!来标记它,告诉velocity忽略它。需要注意的是,默认值只会影响field的初始值。一旦用户填写并提交了表单,那么$group.field.value的值将保持用户所填写的值不变——不论验证失败或成功。③页面展现:一般来说,需要定义CSS风格以便让表单的field和错误信息能以适当的格式来显示给用户。表单系统不应该干预页面的具体展现方法,以下内容均和表单系统无关。例如:Field展现的方式:textbox、checkbox、hiddenfield、错误信息的颜色、显示位置等。(3)创建Java代码(action):用户提交表单后,由服务器端的Java代码读取并验证用户的数据。在Webx中,这个功能通常由action来完成。前文已经提到,在HTML表单中,设置action字段,以及event_submit_do_edit提交按钮,就可以让Webx框架调用ModuleAction.doEditO方法。验证表单,如果失败则不执行action,否则执行doEdit方法。取得form和moduleNewgroup对象,并将group中的数据注入到cityModule对象中,下面是ModuleAction类的实现代码:publicvoiddoEdit(@FormGroup("moduleNew")Groupgroup,@Param("id")Integerid,Contextcontext){FieldnameField=group.getField("name");ngValueQ;CityModuleparaml=newCityModuleQ;paraml.setName(name);paraml.setEditld(id);List<CityModule>listl=cityModuleAO.getList(paraml);if(listl!=null&&!listLisEmptyQ){nameField.setMessage("name.exist");//设置模块名称重复的自定义错误}FieldpathField=group.getField("path");Stringpath=pathField.getStringValueQ;CityModuleparam2=newCityModuleQ;param2.setPath(path);param2.setEditId(id);List<CityModule>list2=cityModuleAO.getList(param2);if(pty()){pathField.setMessage("path.exist");//设置模块路径重复的自定义错}if(group.isValid()){//仅当表单验证成功时,才执行下去CityModulecityModule=newCityModuleQ;group.setProperties(cityModule);//将group中的数据灌入bean中intresult;if(id==nun){//若ID为null,则新增模块tatus(Constants.STATUS_ACTIVE);result=cityModuleAO.insert(cityModule);}else{//若ID不为nuU,则编辑模块cityModule.setld(id);esult=cityModuleAO.update(cityModule);}if(result>0){//若数据库操作成功,则设置成功信息context.put("msg","success");}}}(4)修改老数据。之前的新增模块是从一个空白表单开始的,也就是说,在用户填写表单之前,表单是没有内容的,或只包含默认值的。另一种常见情况是修改老数据。例如“修改模块''。和创建新数据的例子不同,在用户填写表单之前,表单里己经包含了从数据库中取得的老数据。在创建新数据的模板和代码中,稍微添加一点东西,就可以实现修改老数据的功能。用screen来读取数据:修改老数据的第一步,是要取得老的数据。例如,取得要修改的模块信息。在Webx中,这个任务是由screen来完成的,以下就是moduleNew页面对应的screen类:publicvoidexecute(@FonnGroup("moduleNew")Groupgroup,@Parani("id")Integerid,Contextcontext){if(id!=null)(//当id不为nuH时,则为修改模块CityModulecityModule=newCityModuleQ;cityModule.setld(id);List<CityModule>list=cityPageAO.getList(cityModule);if(list!=null&&!list,isEmpty()){group,mapTo(Hstget(0));//用数据库中所取得的module对象的值来填充表单,作为表单的初始值。和Group.setProperties()方法相反,mapTo将JavaBeanproperties的值映射到同名的fields中。}context.put("id",id);//将id值put到页面上}}因为修改老数据的和创建新数据代码几乎相同,只是修改老数据在加载页面时要在表单中填入数据,己经用以上的screen类解决,再在页面上加入id隐藏域就可以了。不同角色的用户登陆系统后看到的左边菜单都不一样,当用户点击或在地址栏中直接输URL地址访问无权限的页面时,会跳转到无权限的提示页面,3秒过后自动跳转到首页。区域分析员在数据分析模块中只会看到相应区域下的数据,流程图如下图所示:图权限功能程序流程图(1)页面访问实现原理://当前登陆用户CityUseruser=(CityUser)loginUser;Integerroleld=user.getRoleldQ;booleanhasAuth=false;//初始无模块权限//根据当前登陆用户的角色查询角色拥有的模块权限CityRoIecityRole=newCityRoleQ;cityRole.setld(roleld);List<CityRole>list=cityRoleAO.getList(cityRole);if(list!=null&&!list.isEmptyO){CityRolerole=list.get(0);Stringmodulelds=role.getModuleIds();CityModulecityModuIe=newCityModuleQ;leIdList(moduleIds.split(","));List<CityModule>modules=cityPageAO.getList(cityModule);//初始化用户拥有的模块权限的路径列表List<String>pathList=newArTayList<String>();for(CityModulemodule:modules){pathList.add(module.getPath());)//若当前URL在拥有的模块路径列表内,则表明拥有权限if(!pathList.isEmpty()){for(Stringpath;pathList){if(url.contains(path)){hasAuth=true;break;}}}}if(!hasAuth){//无模块权限,则跳到报错页面response.sendRedirect(Constants.ERROR_PAGE+"?type=l");)(2)前台展示实现原理:査数据库,判断当前登陆用户是否拥有超级管理、系统管理员、数据分析员的角色,以系统管理模块为例,必须为超级管理员或者系统管理员,左边导航栏的系统管理模块才可见,即admin=true或systetT?=true#if($!{admin}||$!{system})<dt><ahref=”javascript:void(0);”>系统管理</a></dt><dd><ul><li#if($menu=-record')class="current"#end><a”>案卷管理</a></li〉<li#if($menu=='upload')class="current"#end><a”>批量上传案卷</a></li><li#if($menu=-alarm')class="current"#end><ahref=””>预警管理</a></li></ul></dd>#end(1)当鼠标滑动到列表页面某一行时,会出现提示信息,包含创建人、创建时间、最后修改人,通过onMouseOver和onMouseOut方法实现;(2)对于部分录入的关键数据,系统提供数据校验功能,如果录入的数据不符合要求,提交后会在输入框上出现错误提示,鼠标聚焦到输入框时,错误提示会消失;(3)时间输入可以使用两种方式:①从时间的文本框中直接输入,时间输入必须按照规定的格式,年-月-日,如:2013-08-01②利用日历控件输入,时间的格式为系统自动给出的,只要点击时间输入区域,通过弹出的时间控件选择时间即可。时间输入界面如图5.4所示:图时间输入界面引入My97日期控件的js〈scriptsrc="/js/My97DatePiclcer/WdatePickerjs”></script>在onclick方法上配置即可,可设置格式化、最大值、最小值等信息〈inputclass="e-input-box"type="text"id="startDate"name="startDate"value="$!startDate"onclick="WdatePicker({dateFmt:'yyyy-MM-dd*,maxDate:'#F{$dp.$D(\'endDateV)}*});"/>〈inputclass="e-input-box"type="text"id-"endDate"name="endDate"value="$!endDate"onclick="WdatePicker({dateFmt:'yyyy-MM-dd\minDate:'#F{$dp.$D(\*startDateV)}'});"/>(4)对于新增、修改操作都用同一对话框显示,通过判断id区分,对话框釆用iframe实现,可实现大小自适应。实现自适应代码如下:jQuery(function($){$.namespaceCcitymon.dialog');vardoc=$(document);citymon.dialog={dialog:$C.e-dialog").firstO,iframe:$(parent.docunient.getElementByld(*dialogWrap')).find(*ifranie*),selfAdaption:functionO{varwidth=this.dialog.width(),height=this.dialog.heightQ;this.iframe.width(width);this.iframe.height(height);},ink;function(){this.selfAdaptionO;doc.delegate('.dialog-close-btn,.dialog-cancel-btn'/click*,function(e){e.preventDefault();window.parent.citymon.dialogWrap.close();});}};citymon.dialog.initO;});(5)每个list页面中的每条记录都有禁用、启用、删除功能。相关界面如下图所示:图记录功能界面当状态为正常时,显示禁用按钮,当状态为禁用时,显示启用按钮;只有在列表页面才会把禁用和正常状态的记录查询出来,给其他页面使用的记录只取正常状态的记录;当按下“禁用”按钮时,弹出确认框,确认后才能进行禁用操作;当按下击“启用”按钮时,弹出确认框,确认后才能进行启用操作;当按下“删除”按钮时,弹出确认框,确认后才能进行删除操作;实现原理,以用户管理为例。在ibatis配置文件中加入以下update:〈updateid="delete"parameterClass="cityUser">updatecity—usersetstatus=#status#,modifier=#modifier#,gmt_modify=now()whereid=#id#〈/update〉在对应的CityUserAO中加入delete接口。实现如下:publicIntegerdelete(CityUsercityUser){return(Integer)cityDao.update("CityUser",cityUser,"delete");}在对应的userList.vm中加入相应的元素。实现如下:#if($!{item.status}~l)<ahref=”javascript:void(0);"class="J_Disable"data-id="$!item.id">禁用</a>#elseif($!{item.status}==0)<ahref="javascript:void(0);"class=”J—Enable”data-id="$!item.id">启用</a>#end<ahref="javascript:void(0);"class="J_Remove"data-id="$!item.id">删除</a>在对应的UserAction中加入相应的事件。实现如下:publicvoiddoUpdateStatus(@Param("id”)Integerid,@Param("status")Integerstatus.Contextcontext){//获取登录用户ObjectloginUser=on().getAttribute("loginUser");StringloginName=null;if(loginUser!=null){loginName=((CityUser)loginUser).getName();}CityUsercityUser=newCityUserQ;cityUser.setld(id);cityUser.setStatus(status);cityUser.setModifier(loginName);intresult=cityUserAO.delete(cityUser);if(result>0){context.put("msg","success");}}在公共的Ustjs中加入相应的js。实现如下://操作方法:确认信息、记录id、状态functionoper(confirmStr,id,status){if(confirm(confirmStr)){varcityAction=$C#cityAction').val();varurl=Vpub/ajaxResultPage.htm?eventsubmit_do_updateStatus=y';url+='&action=MxityAction+'&id='+id+,&status='+status;$.ajax({url:url,type:'post*,dataType

温馨提示

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

评论

0/150

提交评论