摘 要
随着我国计算机技术的不断发展,信息化办公和无纸化办公越来越普遍,信 息化建设也被各级法院提上日程。人民法院作为国家审判机关,招标是其进行自 我建设不可或缺的工作环节。传统的招标工作不仅效率低下,而且存在着信息透 明度以及公平公正等问题。电子招投标系统作为法院信息化建设的项目之一,不仅改变了传统的纸质办公模式,提高了办公效率,而且丰富了法院的信息化建设。
通过对比传统的招投标业务,分析法院招标模式,我们基于B/S 模式开发了电子招投标系统。电子招投标系统从招标项目发起开始,对招标项目进行发标、 开标、评标、定标等环节实施,同时供应商作为投标人,在系统允许的投标时间内,进行电子投标,实现了全程电子无纸化招投标。
本文围绕电子招投标系统的设计与实现,进行了如下工作:
(1)介绍了本项目国内研究现状,介绍了本系统所使用的开发技术与框架,包括 MVC 思想、SpringBoot框架、Vue 框架、Mybatis 框架以及 Activiti 工作流。
(2)通过分析法院招投标业务需求,对系统进行整体架构、模块划分,设计数据库,最后进行项目详细设计。
(3)基于需求分析和项目整体设计,着重阐述了电子招投标系统的工作流管理、项目管理、招标管理、投标管理和系统管理等相关模块的实现。
本文将 Activiti工作流引入电子招投标系统,满足了法院流程审批需求。同 时实现了招标模块与投标模块,满足了法院招投标业务需求。系统管理等其他模 块完善了系统设计。电子招投标系统于2018年3月在天津市高级人民法院上线。
系统上线后,运行情况良好,提高了法院工作人员的工作效率。
关键词:招投标系统,SpringBoot 框架,Vue 框架,Mybatis 框架,Shiro,Activiti工作流
第一章 引言
1.1 项目背景
近年来,随着科技的发展和计算机技术的不断进步,法院的办公方式发生了 很大的变化[段玉平等,2008]。从传统的纸质办公到现在的互联网办公,信息化 的办公方式占据了法院办公的主导地位。信息化办公与无纸化办公不仅提高了法 院工作人员的办公办事效率,更使得法院的信息传播的更快更广,也极大方便了企业和广大人民。
招投标作为法院自身建设的工作之一,需要以公开公正的方式进行,严格的 法院招投标体制可以规范法院招标采购工作,提升国家和地方公共资金的利用 率,规避法院采购中的腐败现象[芦苇,2011]。然而传统的招标方式不仅费时费
力,而且经常存在操作不规范、风气不正、效率低下、信息透明度低等问题,招
标常常变成一种表面形式。
因此,基于传统招投标的现状,我们应该将制度与技术相结合,从以下几个 方面加强招投标的信息化建设,使得法院的招投标真正做到公平公正,杜绝腐败,
提高办公效率:
1.法院办公中审批环节贯穿始终,招标项目的立项离不开审批环节,从招标 立项开始交由各级主管审批,到最终分管院长审批,通过工作流技术管理,实现随时随地电子审核,提高招投标的工作办事效率。
2.通过信息化系统发布招标通知与公告,能够实时迅速的将招标信息发布到法院网站,方便供应商及时查看并按意愿进行投标。
3.通过系统审核供应商信息,可以直接过滤掉资质不合格的供应商,保证了中标供应商的可靠性和招标项目建设过程中的稳定性。
4.加强投标工作中数据保密性和评标过程中的合理性,通过系统加密标书, 隐藏参加投标的用户信息,实现真正按标书评标而不是按企业评标,加强招投标公平性。
在计算机技术不断发展的现代互联网社会,电子招投标系统将技术与法院制度相结合,不仅丰富了法院工作人员的办公方式,也推动了法院的廉洁建设。
1.2 国内招投标系统的发展概况
目前,我国招投标机制已经基本通过靠市场导向来进行运作,通过市场的导 向与调节作用,工程报价更加的合理化。近年来,我国的供求市场的运作情况趋 于良好,这使得我国的招投标项目工程的报价更加符合市场需求,也与价值基础更加契合[梁萍,2014]。
招投标机制自引入我国以来,为法院和政府等诸多单位带来了非常积极的影 响,各单位也发挥了招投标机制的优越性。但是,我国对招投标机制的发展依然不够充分,致使招投标工作在实际操作中存在很多问题。
招标公告发布不及时,信息流通不及时的问题依然存在,招投标过程中贿赂 腐败的问题也很突出,同时,在开标、评标、定标等环节中,都存在着资源分配 不均、工作效率低下等现象,这都会直接或间接影响我国的招投标机制发展,使得我国招投标机制一直处于比较低的水平[沈文欣,2012]。
通过机制与技术相结合,国内这几年电子招投标系统发展迅速, 一部分系统 采用 C/S 模式开发,运行平台多为老版本的操作系统,系统维护困难,漏洞过 多。另一部分系统采用 B/S 模式开发,但系统多采用ASP 和 JSP 技术进行开发,系统可维护性低,数据传输和安全性方面也得不到很好的保证。
1.3 本文主要研究的工作
本文所研究的电子招投标系统,是一个符合法院招标业务流程的信息自动化 办公系统,是覆盖工作流审批、项目管理、招标管理、投标管理、供应商审核管 理以及各类通知管理的信息系统,是能够实现发布招标公告、澄清招标文件问题、投标、开标、评标、定标全流程的招投标系统。
本文所研究的系统由工作流管理、项目管理、招标管理、投标管理、供应商管理、通知管理和系统管理7个模块组成。
其中工作流管理模块管理了整个系统的电子审批业务,项目管理模块则是通过审批环节管理招标项目,招标和投标模块是系统主要业务模块,涉及招投标的主要业务流程,供应商管理模块保证了参加招标的供应商资质的合法性。电子招投标系统遵从开放式体系结构,易于维护与扩展,从而使法院的招投标工作更加便捷、高效,确保审批环节和招投标的各环节运行的更加高效,使得 法院工作水平进一步提高,让招投标工作更加公平公正,促进法院廉洁建设[马叶敏等,2012]。
基于上述用户的需求,电子招投标系统采用 Java EE 体系结构,运用 MVC 模式的设计思想[弗里曼,2004],使用了当今流行的 SpringBoot、Vue、Mybatis 技术框架,同时结合了Shiro安全机制,Redis 缓存和 Activiti 工作流,数据库使用 Mysql 数据库[黄缙华,2011]。
电子招投标系统在基于MVC 模式的基础上,将整个系统分为4层:
视图层:基于Vue 框架,采用单页面开发,通过Vue 路由和Ajax 进行请求,运用 Element UI 和 Lay UI进行页面美化,提升用户体验。
控制层:基于RESTful 接口和JSON 模式进行请求,抛弃了 JSP 页面和其他模板引擎,让前后端交互更加方便,也让前端的作用发挥的更大。
业务逻辑层:该层主要负责本系统业务逻辑的编写,对于控制层,接收其传 来的数据和请求并进行逻辑处理后传到数据访问层,对于数据访问层,接收数据层返回的结果集并返回到控制层。
数据持久层:主要用来控制数据库的访问,使用了 Mybatis 框架,采用 XML
的格式进行 SQL 语句编写,应用 XML 文件对数据库进行映射和操作。
本文重点对系统中使用的前后端框架做了深入的研究,并对各个功能模块的相关详细实现做了阐述。
1.4 本文的组织结构
本文首先介绍了项目背景和项目中所使用的技术框架,包括 SpringBoot 框架、Vue 框架等,接着介绍了项目分析与设计,最后介绍了项目实现的具体细节。
本文的组织结构如下:
第一章引言部分。介绍了电子招投标系统的项目研究背景,国内在该项目的研究现状以及本文的主要研究工作。
第二章技术综述。介绍了电子招投标系统开发所使用的技术和框架,包括 后端的 SpringBoot 框架、与前端相关的 Vue 框架、与数据库相关的 Mybatis 框架以及Activiti 工作流等。
第三章电子招投标系统的分析与设计。整理并分析项目的基本需求,对本 项目的总体设计思路进行了描述,划分了项目中的各个功能模块、设计了本系统所需要使用的数据库的相关表结构。
第四章电子招投标系统的具体实现。在项目需求分析与系统总体设计的基 础上,介绍了项目工作流管理模块、项目管理模块、招标管理模块、投标管理模块和系统管理模块的详细实现细节。介绍了系统的应用情况与效果。
第五章总结与展望。总结论文期间所做的工作,并且就该电子招投标系统的未来扩展作了进一步展望。
第二章 技术综述
2.1 SpringBoot 框架
2.1.1 Spring 框架介绍
在 Java 众多的开源框架中 . Spring 框架独树 一 帜 以 前 能 EJB Enterprise Java Bean ) 元成的事情. Spring 框架使用基本的 JavaBean 1!成 .Spring 相架的出现将JAVAEE 开发人员从 EJB 繁项曲置車的开发模式中时依解救出来[ 民 等 .2008] Spring 框架改力于通通 个品效的与式来 构 总 应 用 与 其 他 的 单 层 框 架 不 同 的 是 ,Spring 相 架 支 持 将 各 种 单 要 框 架 以 最佳的方式组合在一是、建文一个连贯的应用体系[计文制. 2009]Spring e 架是一个轻量级容器框架,其主要核心技术是面向切面 (AOP和控制反转( loC ) [戚欣 . 2008] Spring 框架总体结构如图 2.1 所示:
图2.1 Spring 框架总体结构
如图2 . 1所示, Spring 框架主要有7个模块组成:
(1)Spring Core: Spring 框架的基本功能由 Spring Core 模块实现,本模块是 Spring 框架中最为核心的模块。其中,组件 BeanFactory 的具体实现运 用了工厂模式,是Spring Core的主要组件、BeanFactory 运 用loC 将程序的配置和规范与实际应用 程序代码分开[吕毅,2006]
(2)Spring Context: 各付象的状态的保存山 Spring Context 提供的一个运行时的环境来完成。除此之外, Spring Context 还包括 EJB 、Mail 、JNDI 、国际化等企业服务[汪云飞,2016]。
(3) Spring AOP: 对于面向切面编程的支持由 Spring AOP 模块来完成, 所有 Spring 应用实现面向切面编程都要基于本模块来进行代码编写。SpringAOP 模块还引入了元数据编程[李洋等,2011]。
(4)Spring Dao:Spring 运用 JDBC 技术连接数据库会产生许多重复的代 码。Spring 的 JDBC 和 DAO 模块提取了这些重复的代码,使得程序的代码可以 保持整洁。同时,本模块还提供了异常层次结构,可以使用该结构来管理异常处理和抛出不同的错误信息。
(5 )Spring ORM:Spring 不提供具体的 ORM 解决方案,而是通过 SringORM 来集成流行的 ORM 解决方案,例如 Hibernate、Mybatis 等。
(6)Spring Web:Spring Web 模块用于为 Web 应用程序提供上下文服务,
此外,Web 模块还提供了面向服务支持。
(7)Spring MVC:本模块是 Spring 提供的一个功能全面的 MVC 框架,通 过策略模式, MVC 框架成为了高度可配置的框架。同时,MVC 模块容纳了大量
的视图技术[凯耶尔,2010]。
2.1.2 SpringBoot 框架介绍
Spring 框架非常强大,但是就算是很小的项目,也要进行大量的配置。尽管 许多配置都是固定的,但是,配置工作还是比较繁琐,并且经常因为配置的问题 产生大量的异常,导致开发效率低下。为了简化配置,让开发人员专注于业务逻 辑开发,2013年, Pivotal 团队提供 一种基于 Spring 的全新框架 — —SpringBoot[温晓丽等,2017]。
SpringBoot 框架大大简化了 Spring 应用程序的各个方面的配置,包括搭建 程序框架、配置、开发和部署等。SpringBoot 基于“约定优先配置”的原则,使开发人员不再需要大量繁琐的模板化配置[王永和等,2016]。
SpringApplication 执行流程如图2.2所示:
图 2.2 SpringApplication 执行流程
图 2.2 可 知.SpringApplication 从初始化 Spring Boot 自带的监听器开始,通过初始化参数. 加载配置等, 最终发布 ApplicationEventReady事件以启动SpringBoot应 用 程 序 [ 张 峰 ,2017]自动配置是SpringBoot 框架的核心,通过Maven 等方式导入相应依赖包后, SpringBoot 框架即可通过自动配置进行管理,同时, SpringBoot 也集成了很多 开发中常见的基础框架,使得开发者在令XML 配置中即可应用常用的基础框架 开发。
2.1.3 SpringBoot 框架的优点
SpringBoot 框架在继承 Spring 框架优点的前提下,简化了Spring 应用程序 的配置过程,让开发者可以快速搭建应用程序, 同时, SpringBoot 框架还有以下儿个优点:
(1) SpringBoot 可支持快速开发 RESTful 风格的微服务架构[张卫滨 .2014]
(2) SpringBoot 可以使部署变得简单,内嵌的 Tomcat 容器使得单 ·JAR包的部署和管理都非常方便。
(3) 简 化 Maven 配置,自动配置 Spring
(4) 简洁的安全策略集成 . 支持关系型数据库和非关系型数据库。
(5 ) SpringBoot 可实现对应用程序的监控,使得监控变得简单
2.2 Vue 框架
2.2.1 MVVM 设计模式
开 发 具 ! B/S 模式的Java Web 1 系统的 . 的由差理由前合展示贡间的 开发与美化 一传统的页面开发与交星都是基于对 DOM 数据资源的控制以达到预 期的交互效果 . 但通过对 DOM 元素进行操作极易出现错误[陈涛 . 2014 ] 近 年 来 . 随着前端技术的发展 . 涌现了各种各样的前端框架,这些框架基于 MVVM 设计模式 . 极天方便了前端页面的开发与维护[麦冬等 .2017] MVVM 设计模式
架构图如图 2.3 所示:
图2.3 MVVM 设计模式架构图
MVVM 设计模式基于传统的 MVC 设计模式衍生而来,全称为 Model ViewViewModel。由图 2.3 可知, 用 户 通 过 数 据 绑 定 和 指 令 将 在 View 层 的 操 作 传 递 ViewModel 层并更新 Model.Model 层数据更新后, ViewModel 会自动跟踪变化,将更新重新渲染到 View [易剑波,2016]。
2.2.2 Vue 框架简介
Vue.js 是一款 MVVM 前端框架,通过双向绑定数据,数据变化实时反映并 映射到虚拟 DOM 上,简化了前端开发流程,提升了开发效率。 同时 . Vue 也是款用于构建前端用户界面的渐进式框架,白底向上逐层应用是 Vue 框架最大的特点[旷志光等,2017] Vue 框架更多是关注视图层,并Ⅱ Vue 能够非常便利 的与第三方项目整合 通过与现代化的工具链和各种类库结合使用 .Vue 可为复杂 的 单 页 面 应 用 程 导 提 供 张 动 Vue 框 架 结 构 原 理 图 2.4 所 示 :
图 2.4 Vue 框架结构原理图
非侵入性的响应式系统是 Vue 最独特的特性之 一 ,数据模型是普通的 JavaScript 对象。当将一个普通的 JavaScript 对象传递给 Vue 实例时, Vue 将 会遍历此对象的所有属性,并把这行属性转为 setter/getter 。 对用户而言,转换 来的 setter/getter 是不可见的。在内部,由Vue 追踪依赖,在属性被修改和访问的时候通知变化[陈岩, 2018]。
每 个 watcher 实例对象与每个组件实例是一一对应的关系,在组件渲染的过 程 中 ,watcher 实例对象会把属性记录为依赖, 当setter 被 调 用 时 ,watcher 实例对象会被通知进行重新计算,以此来更新与它相关联的组件。
2.2.3 Vue 框架优点
Vue 可以抛弃繁琐复杂的 DOM 操作,通过双向绑定,只需关注数据源,此外,Vue 框架还有以下优点:
(1)Vue的学习成本相比较于其他框架较低,简单易学。
(2)Vue使用基于依赖追踪的观察并使用异步队列更新,所有数据都是独立触发,比较高效[徐倾等,2017]。
(3)Vue模板中的指令、过滤器等,使得开发人员对 DOM 的操作变得非常便捷。
(4)针对有着复杂逻辑交互的前端应用程序, Vue 可以提供基础的架构抽象,同时,可以应用AJAX 进行数据持久化,保证前端良好的用户交互与体验。
2.2.4 Vue 框架与其他框架的比较
目前,在前端框架中,比较流行的有Vuejs 框架,React 框架和 AngularJS 框架。Vue.js 框架与其他两种框架都是 MVVM 框架,都支持双向数据绑定,但Vuejs 与其他两种框架在应用与实现上还有一些不同。
与 AngularJS 相比较,二者都支持指令和过滤器,同时对于 IE8 及其以下 的低版本浏览器,二者都不支持,但是 AngularJS 的学习成本要比 Vue.js 高, 性能上,AngularJS 依赖对数据做脏检查,对于庞大的应用来说,Vue.js 的性能优化的更好一点。
与 React 相比,尽管二者都推荐使用本框架规定的文件格式进行前端项目 开发,通过编译后运行,同时,二者都是以组件为中心的前端框架,提供了合理 的钩子函数,可以让开发者定制化处理用户需求。但是 React 不支持指令和过滤器等,同时,React 依赖 Virtual DOM, 而 Vue.js 可以使用指令快速操作 DOM。
2.3 Mybatis 框架
2.3.1 Mybatis 框架简介
在 Java Web 应用程序的开发过程中,应用程序对数据库的访问通常通过Java 数据库连接技术来实现 随着技术的不断演进,开发人员为了简化对数据 库的操作,把对数据库的操作封装后进行调用, 由此产生了许多持久层框架,在 众多的持久层框架中. Mybatis 是一款优秀的 ORM 持久层框架 基于简单的注 解机制或者通过 XML 文件进行配置信息,将任意的接山和简单Java 对象映射成为数据库中的相关记录[徐雯等, 2012]
图 2.5 Mybatis 功能架构图
如 图 2.5 所 示 .Mybatis功 能 架 构 由API 接 H 层 、 数 据 处 理 层 和 基 础 支 撑构成:
(1) API 接口层:对数据库进行增删改查操作的接口由 API 接口层提供, 对于接收到的数据处理请求,API 接11层会通过调用数据处理层来完成,处理完成后,由API 接口层将结果返回。[荣艳冬,2015]
(2) 数据处理层:负责 SQL 语句的查找、解析、执行和返回结果映射等,这一层的主要工作是由API 接口层调用,完成对数据库的 CURD 操作。
(3)基础支撑层:对于缓存的处理、配置加载、连接管理和事务管理等基 础的功能,由基础支撑层负责管理。并且,本层将这些最基础的功能作为组件为上层提供支撑。
2.3.2 Mybatis 的工作流程
基于 Mybatis 三层功能架构及模块, Mybatis 的工作流程如图 2.6 所示:
图 2.6 Mybatis 工作 流 程 图
Mybatis 的配置文件主要有主配置文件和映射配置文件,其中,主配置文件 用于应用程序连接数据库.因此.系统中会减少很多数据库连接的重复代码.而 映射配置文件完成了 SQL 语句的封装, 同时,实现了数据处理层和数据库表的 关联映射一完成对配置文件的相关加载后,程序将开始创建会话,会话会调用 Mybatis, 此时, Mybatis 将会创建 SqlSessionFactory 实例和 SqlSession 实例, 将映射配置文件中的SQL 标识作为参数,传递给 SqISession 实例的方法.执行Sql 语句,实现对数据库的访问[赵艳铎, 2011]。
2.3.3 Mybatis 框架的特点
Mybatis 框架主要有以下特点:
(1) Mybatis 框架精巧而简单,没有第三方依赖,通过配置文件和 Maven 管理引入包文件即可使用,通过官方文档和源代码,可以快速掌握框架的设计思
路和实现,学习成本低。
(2)Mybatis 将 SQL 语句写在XML 格式的文件中,对于SQL 语句的管理和优化更加方便 。
(3) Mybatis 解 除 了 应 用 程 序 代 码 和 SQL 语 句 的 耦 合 , 使 系 统 的 设 计 更 加
清 晰 , 更 加 易 于 维 护 和 管 理 [ 片 毅 等 .2006]
(4 )Mybatis 支持动态 SQL 编写,支持对象与数据库的ORM 字段关系维护
2.3.4 Mybatis 与 Hibernate 比较
Hibernate 是一个非常流行的数据持久层开源框架,是一个全自动的 ORM 框架 .与 Mybatis 不同的是,Hibernate 不需要加载映射配置文件.而过 HQLHibernate 查 训 语 句 ) 进 行 对 数 据 库 的 操 作 和 数 据 查 询 但 是 , 通 过 自 动 生 成 SQL与 降 银 了 正 发 的 足 活 性 . 对于 高 复 杂 的 查 南 操 作 . 实 理 起 来 费 ! 生Mybatis 维度更人 . 导致 Hibernate 习成不变尚 Mybatis 按通过将 SQL生 在 酸 射 面 置 文 件 中 未 撑 在 数 据 库 主 支 持 动 点 SQL , 天 活 码 业 人 , 申 易 ! 学习 . SQ L 调优电更 加容易
2.4 Shiro 安全机制
Apache Shiro 是一款用于系统认证、角色授权、系统加密和会话管理的 Java 安 全 框 架 . 它 以 系 统 安 全 管 理 为 出 发 点 , 为 开 发 人 员 提 供 了 一 整 套 全 面 的 系 统 安全 解 决 方 案 。Shiro 框 架 有 着 完 善 的 接 口 驱 动 . 同 时 , 框 架 符 合 面 向 对 象 原 则 ,这 使 得Shiro 非 常 易 于 扩 展 Shiro 除 了 提 供 默 认 的 实 现 方 案 之 外 , 还 支 持 各 种
白 定 义 实 现 方 案 [ 徐 号 成 , 2 0 1 5 ] Shiro 框 架 整 体 架 构 图 如 图 2.7 所示:
图2.7 Shiro 框架整体架构图
Shiro 框架主要关心 Authentication、Authorization、Session Management 和Cryptography 四大安全基石。其中Authen tication (身份验证)负责身份验证 与登陆,验证用户是否拥有相应的身份。Authorizati on (授权)负责用户权限的 验 ,Session Management(会话管理)负责管理用户的 Se ssion,Cryptography(加密)负责利用加密算法保证数据安金。除此之外, Shiro 还提供了很多扩展功能,例如 Web Support、Caching、Remember me 等。
在 Shiro 框架中 . 主要组件为 Subject、SecurityManager 和 Realms.
图2.8 Shiro 组件工作流图
其 中 ,Subject 是指当前用户,但是,这里的“当前用户”并不是仅仅指人 与当前系统进行交重的都可以描述为“当前用户”,是一种抽象的描述。作为 Shiro框架的控制器, SecurityManager 是 Shiro 最关健的组件,用户的授权和认证都是 SecurityManager 通过协调其他组件来完成的。Realms 定义了数据的访间方式, 用以连接不同的数据源。
2.5 Activiti 工作流
Activiti 工作流是由 Alfresco 软件发布的业务流程管理 ( BPM) 框架,是 一 个覆盖了工作流管理、业务流管理、服务协作等模块的开源的、易于扩展与维护的流程管理框架[徐亦楠等, 2 014]。 Activit i 的 核 心 是 BPMN2.0(BusinessProcess Model and Notation) 流程擎。 Activiti 基本架构图如图 2.9 所示:
图 2.9 Activiti 框架图
Activiti 相 架 :
1、 RepositoryService:Activiti 无法直接读取 XML 格式的流程图、流程 图文件需要部署到Activiti 中才能被使用,这个过程l repositoryService 来完成,
通过 repositoryService 提供的若干接!1、可以将XML 部署到数据库中、也可以
从数据库中读取特定的流程图进行处理[李修云. 2016]
(2)RuntimeService: 基本所有的关于流程的操作都是通过 runtimeService
来完成的,是 Activiti最重要的 一 个服务
( 3)FormService: 节点与相关数据的绑定服务 formService 来完成,获得某个节点的绑定表单数据也是利用 formService 来实现的
( 4)IdentityService:identityService 用于 Activiti 管理本身的组织机构服务
( 5)TaskService:taskService是 Activiti 的核心功能之 一 ,所有涉及业务的操作都通过本接口完成。
( 6)HistoryService:historyService 用于保存流程实例信息,在 一个流程 结束之前,流程实例信息会被保存到 runtimeService和 historyService 中,流程结束后,便只于 historyService 中。
(7)ManagementService: 提供了对 Activiti 数据库的直接访间。
2.6 本章小结
本章主要介绍了本论文所研究的电子招投标系统使用的主要技术框架,包括 SpringBoot技术框架、Vue 技术框架、Mybatis技术框架、Shiro安全机制和 Activiti 工作流。注重研究了这些框架的技术背景、工作原理、体系结构、特性以及应用 场合等。SpringBoot 技术框架基于Spring框架,采用“约定优先配置”的原则, 大大减少了开发的配置文件和系统的配置复杂度, Vue 框架和 Element UI 提供了良好的用户界面和人机交互体验, Mybatis 提供了优秀的数据持久化机制,Shiro 安全机制严格控制了系统的安全以及权限访问, Activiti工作流为系统开发 审批功能提供了极大的便利。通过将这些技术框架结合在一起,降低了系统的开发难度,提高了开发效率和系统稳定性。
第三章 电子招投标系统的分析与设计
3.1 项目总体规划
本系统由工作流管理、项目管理、招标管理、投标管理、供应商管理、通知管理和系统管理七个模块组成。
其中工作流管理模块负责对系统中需要的审批流程进行设计和部署,是系统 所有审批需求的管理模块,项目管理模块通过对招标项目审批以及审批他人的项 目完成对招标项目的立项和管理工作,招标管理模块负责发布招标公告到指定网 站、答复投标人对招标书中的相关疑问、开标、评标以及定标管理,投标管理负 责投标人进行投标以及提出相关招标疑问,是与投标人直接相关的业务模块,供 应商管理模块负责招标人对供应商的资质审核,以确保参与招标的供应商达到项 目的基本要求,通知管理模块负责系统中审批、发布等通知的管理,系统管理模块通过权限发放功能来实现通过不同的角色来发放不同权限。
本系统是法院进行招投标建设工作的信息管理系统,是一个兼顾立项、招标、 投标和供应商管理的应用系统,通过电子招投标系统的应用,不仅简化了法院对 招投标工作的工作流程,而且提高了招投标工作的透明度和办事效率,促进了法院的廉政建设。
3.2 系统需求分析
3.2.1 业务逻辑需求分析
本系统是集流程设计、项目审批、招标投标和信息管理功能于一体的综合应 用系统。由 Activiti 工作流管理审批流程,其中,本项目中流程管理主要用于设 计和管理招标项目审批流程以及供应商信息审批,项目审批通过后对项目进行标 书上传并向本法院官网招标模块发布招标公告,通过时间点的设置,按相应时间 点进行招标项目问题澄清、开标、评标和定标等《招标法》中规定的流程,流程 中应按要求发出通知,包括项目审批通知、开标通知和中标通知,对于系统中的用户,本系统应该按角色不同分配权限,系统超级管理员拥有最高权限,系统用户分招标人和投标人,投标拥有投标管理模块和个人信息管理功能,招标人按角色不同分配审批权限。
3.2.2 系统功能性需求
根据业务逻辑分析,本系统主要完成以下功能,系统用例图如图3 . 1 所示:
1.工作流管理:本模块对整个系统审核流程进行管理,集成 Activiti 工作流 程管理项目。用户使用 Activiti modeler 进行流程设计,并通过本系统对已经完 成设计的流程进行各个节点设置,设置节点的业务名称、节点类型、节点行为和 节点审批范围。流程设计完成后,通过流程部署功能进行部署,以供用户在提交 审批时选择使用,流程修改后,通过流程升级功能对已经部署过的流程进行重新 部署。流程设计中所需要的流程业务信息也有本模块进行管理,主要是对其进行增加,修改和删除。工作流管理用例图如图3 . 2 所示:
图 3 . 2 工 作 流 管 理 用 例 图
2. 项 目 管 理 : 这 一 功 能 模 块 主 要 是 对 用 户 的 提 变 的 埃 目 遇 有 审 推 和 管 理 用 户 通 过 新 增 项 目 功 能 添 加 新 的 项 目 . 经 提 交 审 批 功 能 后 进 人 流 程 审 批 环 节 , 通 过 预先设计好的流程审批环节 , 级进行审批 , 审批完成后将收到系统通知 ,
除 此 之 外 . 其 他 项 目 交 由 本 用 户 审 批 也 将 由 本 模 块 管 理 一 项 目 管 理 用 例 图 如 图
图 3 . 3 项 目 管 理 用 例 图
3.招标管理:招标管理用例图如图3.4所示:
图 3.4 招标管理用例图
本功能模块负责对招标过程中招标人参与的各个环节进行管理和操作,用广 通过本模块对已经通过审批环节的项目进行招标公告发布 . 发布公告后充许投标 人进行注册和报名投标 . 同时 . 对手投标人关于公告和招标书中的相关问题予以 澄 清 到开标环节后,用户通过本模块进行开标管理 . 下载并解密投标人标书并进行评标, 中标后向投标人发送中标通知书。
4.投标管理:投标管理用例图如图 3.5 所示:
图3 . 5 投标管理用例图
投标人通过报名注册并完善企业相关资质信息后,可向正在进行招标的项目 进行报名和投标,按照要求提交投标标书,并对标书进行加密,对于招标标书中 存在的疑问,投标人向招标人发起疑问并等待相关回应,在开标阶段,投标人对投标标书进行加密并等待评标结果,中标后即可查看中标通知书。
5.供应商管理:供应商只有通过招标人的审批后才可以进行投标,这一功能模块主要用来管理供应商的各种信息。
6.通知管理:对于需要进行通知的业务,由本功能模块进行管理和触发。包括通知的发出,定时发放,查看和删除。
7.系统管理:本系统拥有不同的系统角色,通过本功能模块进行角色权限分配、用户角色分配和用户部门管理。
3.2.3 系统非功能性需求
(1)技术约束
本系统使用 Java 技术进行 Web 项目开发,应用 B/S 模式,项目基于Chrome浏览器运行。
(2)可扩展性
本系统需要与官方网站进行整合,对于系统还需增加的功能,应保证在不干扰现有功能的基础上进行扩展。
(3)可恢复性
系统数据库应该按时备份,同时应该后台应该存储系统运行日志,以方便系统的恢复和数据库的恢复。
(4)安全性
系统运用 Shiro 安全机制进行权限控制,确保各角色各司其职,保证系统数据安全。
3.3 系统总体设计与模块设计
3.3.1 总体结构
图 3.6 系 统 总 体 结 构
如 图3.6 所 示 . 电 子 招 投 标 系 统 主 要 由 工 作 流 管 理 模 块 、 项 目 管 理 模 块 、 招 标管理模块、投标管理模块、供应商管理模块、通知管理模块和系统管理模块组成
系统整体流程图如图3.7所示:
图3.7 系统整体流程图
山 图 3 . 7 可 知 , 当 需 要 进 行 项 目 招 标 时 , 招 标 人 首 先 通 过 系 统 发 出 招 标 项 申请,并查看是否存在符合本次申请的业务审批流,如果不存在,则由系统管理 员进行创建并将流程部署到本系统,接着,招标人通过选择合适的业务审批流发 起招标项目审批请求,项目经审批通过后即可发布招标信息,投标人通过查看招 标信息决定是否参与招标,投标人参与招标后,按照招标项目开标时间参加项目 开标、评标、定标等流程,最终.招标人向社会发布招标结果,投标人查看招标结果, 次项目招标随之结束。
3.3.2 工作流管理模块
工 作流管理模块主要包括流 程设计、节点设置、流程 部薯与升级 和流程业务 管理四个功能模块 系统管理员对本系统需要的审批流程进行设计和部署以及修改用级 . 对于经没有部费的流程, 理以遵行删除操作 其相架图加图3.8例小:
图 3 . 8 工 作 流 管 理 模 块 架 构 图
工 作 流 管 理 流 程 图 如 图 3.9 所示:
图3.9 工作流管理流程图
由 图 3 . 9 可 知 , 系 统 管 理 员 通 过 新 建 工 作 流 进 行 审 批 工 作 流 的 设 计 与 编 辑 操作,并在新建时选择本工作流的所属业务,对流程设计图中的各个流程节点设置后,可以对流程发布或者升级,流程发布后可供整个系统审批使用
(1)流程设计
流程设计时序图如图 3.10 所示:
图3.10 新建流程时序图
已经部署过的流程管理员仍然可以对其进行修改和编辑,但不能再进行删除操作,
(2) 节点设置
系统管理员对流程中的各个节点的节点名称、节点类型、节点行为、节点回 调行为、本节点审批范围进行设置并保存,同时,可以设置在审批到本节点时,表单可以修改的字段。
(3)节点流程部署与升级
完成流程设计和节点设置后,管理员对本流程进行部署,对于已经部署过的流程,修改后使用升级对流程进行重新部署。
(4)流程业务管理
系统管理员对流程设计中所需要的业务流程信息进行增加、修改、查看和删除操作:
3.3.3 项目管理模块
顶目管理模块主要是对项目进行审批管理以及用户所关联的项目进行审批 信息管理,主要包括用户项目管理、用户审批管理和关联项目管理三个功能模块
招标项目的审批通过本模块进行,本模块的框架图如图3.11 所示:
图3 . 11 项目管理模块架构图
(1) 用户项目管理
用户新增项目活动图如图3.12 所示:
图3 . 12 新 建 项 1 活 动 图
( 2 ) 用 户 审 批 管 理
用户如果拥有相关权限,则可以对其他项目进行项目审批,待当前用户审批的项目显示在本功能列表里,用户通过办理功能对项目进行审批办理,可以对项目进行审批通过、审批驳间、转到其他审批人等操作, 审批过程中可以修改该流程规定可修改字段. 同时,可以提交当前用户的审批意见
(3)关联项目管理
对于不是自己创建但经当前用户审批的项目,可以通过本功能列表对项目的进度以及项目详情进行查询。
3.3.4 招标管理模块
招标项目审核通过后,招标人既可以通过本模块间社会发布本质目的招标息 , 投 标 人 可 以 查 看 招 标 信 息 并 提 出 自 已 疑 间 . 招 标 人 收 到 疑 间 后 对 其 进 行 解 答 , 如 果 日 期已 到 开 标 目 期 . 则 通 在 开 标 操 作 . 遵 人 开 标 零 , 按 照 开 标 流 程 与 规 则ii . 标 、 计 标 以 专 建 标 经 束 员 . 处 果 有 中 标 的 供 应 能 . 则 要 有 中 称 会 告 , 知 果 没
有 评 通 合 适 的 供 应 商 . 则 发 布 流 标 公 告 、 超 标 结 束 招 标 据 程 图 如 图 3 . 1 3 衡 小 :
图3. 13 招标流程图
图3.14 招标管理模块架构图
本模块架构图如图3.14 所示。本管理模块主要是对招标流程中各个环节进行管理,主要包括招标公告发布、 招标项目问题澄清、 开标管理、 评标问题澄清和定标管理五个功能模块。用户通过本模块发布招标公告,同时对于招标过程中的其他流程,也通过本模块进行管理。
(1)招标公告发布
对于已经审批通过的项目,确定开标日期和招标方案后即可进行招标发布, 发布后的公告显示在网站中的相应栏目中,对于工程过大的项目,可以通过分包 操作对项目进行分包招标。已经发布招标公告的项目即进入招标流程,通过查看 详情页面进行查看项目招标进度,已经发布招标公告的项目不可以进行删除,但可以做流标处理,
(2)招标项目问题澄清
对于收到的投标人关于招标项目和招标书中的相关疑问,用户通过招标项目 问题澄清功能发布问题澄清公告,投标人通过查看项目澄清公告查看关于项目的澄清回复。
(3)开标管理
按照招标公告发布时设定的开标时间,按时开标,开标后,投标人进入开标室按开标要求对投标文件进行解密,招标人在解读完投标标书后进行评标,并对标书中的相关疑问向投标人进行求证。
(4)评标问题澄清
对于评标过程中存在的问题,招标人通过发出评标问题澄清说明解释评标过程中的相关问题,并对所有参与开标的用户发出查看澄清通知。
(5)定标管理
用户通过添加中标通知或者流标原因来完成该项目的招标流程。
3.3.5 投标管理模块
投标人通过查看招标信息后获取关于招标项目的相关信息,决定参与投标后 通过本模块报名投标并上传投标书,在开标之前,投标人有权放弃参加开标,开 标后,参与开标的投标人按预定流程进行评标与定标,定标结束后,招标人参与
投标的流程也随之结束。投标流程图如图3.15所示:
图 3.15 投标流程图
不 模 块 主 要 是 投 标 人 进 行 投 标 管 理 . 包 括 招 标 项 目 报 名 与 投 标 、 参 加 开 标 、
协 经 果 查 有 一 不 防 能 模 块 , 不 模 块 架 构 图 3 . 1 6 间 小 :
图3 . 16 投标管理模块架构图
(1)招标项目报名与投标
投标人通过资质审核后,可按投标人的身份登录本系统进行报名投标,投标 报 名 通 过 审 核 后 , 可 按 照 要 求 在 投 标 要 求 时 间 截 正 之 前 上 传 投 标 标 书 , 同 时 . 在 开标开始之前,投标人随时可以撤回投标标书进行修改,用户也可以在开标之前放弃本项目的投标。
(2)参加开标
开标开始后,用户进入开标室,下载投标文件,解密投标文件,并对开标和评标过程中招标人提出的疑问进行澄清,对招标文件进行介绍。
(3)中标结果查看
对于已经中标的项目,投标人进行中标通知书查看,对手未中标的项目,查看流标原因。
3.3.6 供应商管理模块
本模块是对供应商的相关信息进行管理,包括供应商审核和供应商名录两个功能模块,其框架图如图3 . 17 所示:
图 3 . 1 7 共 应 商 管 理 模 块 架 构 图
1: 供 应 商 审 核
付于参与注脏的供应商,得供应商按要求提交企业资质后,由用产对相关查 点进行审核,并将审核结果通知供应商,通过审核的供应商可以通过本系统对正
在进行招标的项目报名投标
(2) 供应商名录
用户通过本列表查看通过审核的供应商名录,对于以往开标过程中不遵守招标规定的供应商可以进行拉黑处理, 同时, 可以对优秀的供应商进行邀请投标
3.3.7 通知管理模块
本模块主要负责项目中各种通知的管理,包插通知的查看、发出、删除等,系统中所有与通知相关的管理都显示在本模块中。
3.3.8 系统管理模块
图3 . 18 系统管理模块架构图
本模块架构图如图3.18所示。本模块是用户对本系统的角色、权限等进行
管理,包括用户管理、角色管理和部门管理三个功能模块。
(1)用户管理
管理员通过用户管理进行系统用户管理,包括用户的增加、删除、修改和用户账户启用与禁用。
(2)角色管理
管理员通过角色管理对用户进行角色分配,同时通过添加、修改和删除操作对系统角色进行管理。
(3)部门管理
管理员通过本功能对系统用户中的部门进行分配,用户审批流程中审批范围的选择也通过部门实现。
3.4 系统架构设计
3.4.1 系统总体架构设计
电子招投标系统采用 B/S 架构,遵从 MVC 设计思想,并对系统做了详细的 划分。因此本系统主要包括视图层 (View) 、Controller (控制层)、Service (业 务逻辑层)和 Dao (数据持久层)。通过分层,使得各层专注于本层工作,遵从 开闭原则,便于修改和扩展。搭配流行框架“SpringBoot+Vue”, 可以加速系统 的开发和扩展,同时应用 Element Ul使系统拥有良好的用户界面的良好的用户交互体验。
本系统使用 SpringBoot 来进行项目搭建,使用 SpringBoot 框架“约定优先 配置”的原则减少了系统的XML 配置,在视图层,我们使用Vue 和 Element Ul 提供的样式,通过AJAX 请求将请求数据传到 Controller 层 ,Controller 接收到 前端传过来的数据后,运用 JOSNObject 进行解析,并通过@Autowired 注入 Service 层进行业务逻辑处理,业务逻辑层通过调用 Dao 层的接口和相关映射 XML 文件进行数据库的操作。返回结果以 JSONObject 的形式传递给前端页面
进行处理。本系统的主要技术架构图如图3.19所示:
图 3 . 1 9 系 统 技 术 架 构 图
3.4.2 系统数据库设计
电子招投标系统涉及了天量的数据模型 , 这些数据模型结构如下 :
(1) 工作流管理 E-R 模 型
工 作 流 管 理 E-R 模 型 如 图 3.20 所 示 :
图 3.20 工 作 流 管 理 E-R 模 型
(2) 项 目 管 理 E-R 模 型
项 目 管 理 E-R 模 型 如 图 3.21 所示:
图 3.21 项目管理 E-R 模 型
( 3) 招 标 与 投 标 E-R 模 型
招标与投标 E-R 模型如图 3.22 所示:
图 3.2 2 招 标 与 投 标 E-R 模型
(4) 供 应 商 管 理 E-R 模 型
供 应 商 管 理 E-R 模 型 如 图 3.23 所 示 :
图 3.23 供应商管理 E-R 模 型
(5) 系 统 管 理 E-R 模 型
系统管理 E-R 模型如图 3.24 所示:
图 3.24 系 经 管 再 E- R 模
根据 E-R 图 可 知 . 本 系 统 主 要 包 括 系 统 管 理 用产 信 息 表 、 焦 应 商 信 思 表、
招 标 项 目 合 息 表 和 投 标 信 息 表 等 29 张表、 主 要 数 据 表 的 信 息 如 下 所 示 :
11)系统管理 用 户 信息表
表 3.1 系 统 管 理 用 户 信 息 表
小 | 代码 | 数据类型 | 注释 |
il | VARCHAR(32) | 主键 | |
hill | NNRCI\R(32) | ||
用户姓名 密码 头像 箱 | iset\;tt · login\:t DISSN d nta1 T i | \ARCTI\R(661) | |
NNRCHAR(6-1) | |||
VARUAR(1)S | |||
VNRIHMR(61) | |||
VARCHAR(25:5) VNRCHAR(128) | |||
创建11期 | CF!CTi | DATETIMI | |
删除11期 | updateTie | DNTETIME | |
创建者11) | 'FCaLelr | VARCHAR(32) | |
更新者I) | upda1nlc | VARCHAR(32) | |
用户状态 | status | VARCIIAR(6) | 1: 正常 1 : 禁 用 |
备注 | remuk | VARCHAR(255) |
(2)供应商信息表
表 3 . 2 供 应 商 信 息 表
名称 | 代码 | 数据类型 | 注释 |
供应商II) | id | YAKC1HK(3) | 主键 |
投标负责人 | IS H | VARCHAR(128) |
3.3 招 标 项 目 信 息 表
loginName | VARCHAR(64) | ||
登陆密码 | passworo | VARCHAR(128) | |
供应商状态 | status | VARCHAR(3) | |
创建时间 | createTime | DATETIME | |
审批时间 | actTime | DATETIME | |
供应商名称 | supplierName | VARCHAR(512) | |
法人代表 | legalRepresentative | VARCHAR(128) | |
供应商联系方式 | supplierphone | VARCHAR(128) | |
供应商类型 | supplierType | VARCHAR(32) | |
供应商地址 | supplierAddress | VARCHAR(32) | |
供应商资质文件 | supplierFile | VARCHAR(512) | |
其他说明 | other | VARCHAR(512) | |
备注 | remark | VARCHAR(512) |
(3)招标项目信息表
表3.3招标项目信息表
名称 | 代码 | 数据类型 | 注释 |
项目1D | id | VARCHAR(32) | 主键 |
招标负责人 | userid | VARCHAR(32) | |
项目名称 | title | VARCHAR(256) | |
项目描述 | content | VARCHAR(1024) | |
流程实例Id | instantId | VARCHAR(32) | |
创建时间 | createTime | DATETIME | |
流程发起人 | startUserId | VARCHAR(32) | |
招标开始时间 | projectStrstTime | DATETIME | |
招标截止时间 | projectEndTime | DATETIME | |
开标时间 | bidTime | DATETIME | |
审批结果 | actResult | NUMBER | |
其他说明 | other | VARCHAR(512) | |
备注 | remark | VARCHAR(512) |
(4)流程模型信息表
表3.4流程模型信息表
名称 | 代码 | 数据类型 | 注释 |
模型ID | id | VARCHAR(32) | 主键 |
版本号 | actVersion | VARCHAR(6) | |
关联业务ID | businessId | VARCHAR(32) | |
部署Id | deploymentId | VARCHAR(32) | |
描述 | description | VARCHAR(512) | |
名称 | title | DATETIME | |
状态 | status | NUMBER | |
部门ID | baid | VARCHAR(32) | |
流程Id | defid | VARCHAR(32) |
instanceId | VARCHAR(32) | ||
流程发起时间 | startTime | DATETIME | |
更新人Id | updateTo | VARCHAR(32) | |
更新时间 | updateTime | DATETIME | |
创建时间 | creeateTime | DATETIME | |
创建人id | createId | VARCHAR(32) |
(5)招标项目审批信息表
表3.5招标项目审批信息表
名称 | 代码 | 数据类型 | 注释 |
审批ID | id | VARCHAR(32) | 主键 |
业务ID | busId | VARCHAR(32) | |
流程定义ID | defId | VARCHAR(32) | |
流程实例ID | instanceld | VARCHAR(32) | |
名称 | taskId | VARCHAR(32s) | |
流程任务名称 | taskName | VARCHAR(256) | |
预处理人 | advanceId | VARCHAR(32) | |
办理人 | dealId | VARCHAR(32) | |
办理时间 | dealTime | DATETIME | |
代理人 | agenId | VARCHAR(32) | |
审批意见 | appOption | VARCHAR(255) | |
审批行为 | appAction | VARCHAR(6) | |
任务创建时间 | createTime | DATETIME |
(6)投标信息表
表3.6投标信息表
名称 | 代码 | 数据类型 | 注释 |
投标ID | id | VARCHAR(32) | 主键 |
投标人Id | userId | VARCHAR(32) | |
招标项目Id | projectId | VARCHAR(32) | |
投标进度 | progress | NUMBER | |
投标状态 | status | VARCHAR(3) | |
投标时间 | createTime | DATETIME | |
标书上传时间 | uploadTime | DATETIME |
3.5本章小结
本章主要对电子招投标系统进行了系统分析与设计,首先对系统的需求进行了分析,然后对本系统的工作流管理模块、项目管理模块、招标管理模块、投标管理模块、供应商管理模块、通知管理模块和系统管理模块进行了详细的分析与设计,最后对系统的数据库结构进行了描述与设计。
第四章 电子招投标系统的实现
基于第三章对电子招投标系统的需求分析与设计,本章将对项目的具体实现 细节作重点阐述,本章将会以工作流管理模块、项目管理模块、招标管理模块、 投标管理模块和系统管理模块为例作详细介绍,其他模块相对简单,不再作出详细介绍。
4.1 工作流管理模块的实现
工作流管理模块主要包含以下子模块:流程设计、节点设置、流程部署与升 级、流程业务管理,下面将详细阐述流程设计、节点设置、流程部署与升级三个子模块,流程业务管理子模块实现过于简单,不再对其作详细阐述。
4.1.1 流程设计
系统管理员根据法院不同的业务审批需求,按照业务模式不同,对不同业务 所需要的流程进行设计,设计后的流程用于本业务的相关审批操作,通过 Activiti Modeler 流程设计器,完成对系统中所有相关业务的审批流程设计。流程设计完 成后,对于尚未发布的流程,系统管理员依然拥有修改和删除本流程图的权限,同时,任何时间,系统管理员都有权查看审批流程设计图。
本功能模块主要包含的类如表4.1 所示:
表4.1 流程设计模块主要类
分类 | 主要包含的类 |
控制层类 | ModelSaveRestResourceController.java ActModelController.java |
业务逻辑类 | ActModelServicelmp.java RepositoryService.java |
持久对象类 | ActModelEntity.java |
数据持久类 | ActModelDao.java |
本模块主要实现了以下功能:
流程的新增、编辑与修改:填写流程名称和描述,选择所属业务流程名称,新增流程并保存。对已经保存的流程信息进行编辑后保存。对于不符合要求的未
流程图的设计与查阅:根据业务流程需求,使用 Activiti Modeler 设计器进 行业务流程设计并保存流程图。对已经存在的流程,通过流程名称或者流程列表 进行查阅。使用 Activiti Modeler 设计器以 BPMN 2.0 标准设计的某次招标项目
审批流程图如图 4.1 所示:
图 4 .1 项 目 审 批 流 程 设 计 图
在 进 行 审 批 流 程 设 计 时 , 从 开 始 节 点 开 始 , 按 照 项 目 审 批 规 则 . 逐 步 设 计ji
批流程 如 图4.1 所示的某次招标项目审批流程设计图所示,审批开始后,首先
用户开始拟稿立项工作,接着将招标项目提交上级审批. 上级审批通过后交由部 门审批.部门审批通过后交由领导审批,领导审批通过后,审批流程结束。如果 审 批 过 程 中 有 节 点 审批 不 通 过 , 则 由 用 户 重 新 拟 稿 立 项 后 再 次 提 交 审 批 。Activiti
Modeler 设计器会对图4.1 所示的流程以 BPMN2.0 标准的格式进行描述,其部
分 代 码 片 段 如 图 4 . 2 所 示 :
图4 . 2 项目审批流程设计图代码描述图
在图4.2中,startEvent与 endEvent 代表了启动节点与结束节点,userTask 表示用户活动节点, sequenceFlow 用于表示节点的流向。BPMN2.0 标准中除
了以上几种标签,还有其他表示标签,在此不再作出详细陈列。
系统管理员通过 Activiti Modeler 设计器进行流程设计后,通过前端传值到 后台保存已经设计好的流程,前端通过JSON_XML 字段将设计好的流程中的相 关信息以 JSON 数据格式传给后台的 ModelSaveRestResourceController 类中 的 saveModel 方法,图形以及图形之间的关联信息通过 SV G 传给 saveModel 方法,该方法会接收四个参数,分别是 modelld 、modelName 、JSON_XML 和 SVG_XML 。 后 端 接 收 到 参 数 后 , 会 根 据 modelld 通 过 Activiti 中 的 repositoryService 实 例 获 得 Model, 随 后 通 过 repositoryService 的 addModelEditorSource 方法将 model 的 JSON 数据传到数据库中进行关联保 存。对于接收到的 SVG 图形数据,通过 PNGTranscoder 类的 transcoder方法, 将 SVG 图 形 数 据 装 换 成 PNG 图 形 后 , 通 过 repositoryService 的addModelEditorSourceExtra 方法将图形传到数据库中进行关联存储。使用 ModelSaveRestResourceController类对设计的流程图进行保存的相关代码如图4 . 3所示:
try {
Model model =repositoryService.getModel(modelld);
ObjectNode modelJson =
(ObjectNode)objectMapper.readTree(model.getMetalnfo(); modelJson.put(MODEL_NAME,name);
modelJson.put(MODEL_DESCRIPTION,description);
model.setMetalnfo(modelJson.toString());
model.setName(name);
repositoryService.saveModel(model);
repositoryService.addModelEditorSource(model.getld(),
json_xml.getBytes("utf-8"));
InputStream svgStream =new ByteArrayInputStream(svg_xml.getBytes("utf-8")); Transcoderlnput input =new Transcoderlnput(svgStream);
图4 .3 流程设计图保存部分代码图
Activiti Modeler 流程设计界面如图4.4 所示:
流程图设计 v启动事件 ○事件 》活动列表 >网关列表 >结束任务列表 >连接对象 | @ | |
科长审批 分管院长市批 开始激程 | 审础 |
图4 . 4 流程设计界而图
4.1.2 节点设置
系统管理员通过流程设计功能设计好审批流程后,需要对审批流程中各个审 批节点作出行为设置,这些行为包括本节点的审批范围和审批人员、本节点审批 时可以修改的信息和本节点回调函数等。对流程设计图中的所有节点进行行为设 置后,可以通过系统的流程部署与升级功能发布审批流程供系统中流程审批业务
使用。
本功能模块主要包含的类如表4 .2所示:
39
分类 | 主要包含的类 |
控制层类 | ActModelController.java |
业务逻辑类 | ActNodesetServicelmp.java ActModelServicelmpl.java |
持久对象类 | ActNodesetEntity.java ActNodeuserEntity.java |
数据持久类 | ActNodesetDao.java ActNodeUserDao.java |
用户通过向后台传递 modelld 获得流程模型信息,获得信息经过后台 ActModelController类中的 modelToTree 方法处理后将数据传给前台,前端以树 状图的形式层次显示各个节点已有信息,用户通过点击各个节点获得可以参与此 类节点的审批的用户类型和用户 Id, 后台获得这些 ld 的数组后,通过遍历方式 对节点进行审批用户信息设置,设置完成后,使用 nodeuserDao 的 saveBatch
方法将节点的审批用户信息与节点信息关联保存到数据库中。
对审批范围进行保存的部分代码如图4.5所示,流程节点设置界面图,如图
4.6所示。
l/保存审批用户 String[]userTypes =actNodeset.getUserTypes(); String[]userlds =actNodeset.getUserlds(); List<ActNodeuserEntity>nodeUsers =new ArrayList<>(); ActNodeuserEntity nodeUser =null if(userlds!=null &&userlds.length>0){ or (int i=0;i<userlds.length;i++){ nodeUser =newActNodeuserEntity(); nodeUser.setld(userlds[i]); nodeUser.setUserType(userTypes[i]); nodeUser.setNodeld(actNodeset.getNodeld()); nodeUsers.add(nodeUser); l/对数据库操作保存到相关表中 nodeuserDao.saveBatch(nodeUsers); } } |
图4.5 保存审批用户代码图
40
流程节点设置
×
名称:
·行为:
·可修改信息:
审批范图
类型
用户
审批节点
-请选择--
项目名称项目编号
名称
超级管理员
保 存 关 闭
图4.6 流程节点设置界面图
4.1.3 流程部署与升级
流程设计完成并对本流程中的所有节点进行了信息设置后,可以对流程进行 部署.部署后的流程可以用于招商项日申请等流程审批业务 对于流程有所变更的业务,对相关流程进行重新设计或者修改后,可以对流程进行升级操作,即重新部署流程,流程一经部署,便不再提供删除流程的权限
本功能模块主要包含的类如表4.3所示:
表4.3流程部署与升级模块主要类
分类 | 主要包舍的类 |
控制层类 | ActModelController.java |
业务逻辑类 | ActModelServicelmp.java |
持久对象类 | ActModelEntity.java |
数据持久类 | ActModelDao.java |
在流程部署或升级时,前端会向后台发送要部署的流程的 modelld, 后台接 收到流程的 modelld 后,会使用 Activiti的 repositoryService 获得该流程模型, 将获得流程模型指向model 实例,同时通过 getModelEditorSource 方法获得流 程模型的 JSON 格式字符串,随后 convertToBpmnModel 方法将 JSON 宁符串 转化成bpmn 模型,接着convertToXML 方法将 bpmn 模型转化成可部署的 XML形式,经过数据持久化类ActModelDao 将数据存储到数据库后完成流程部署或者升级。使用ActModelServicelmpl 类对流程进行部署的部分代码如图4.7所示:
1/设置流程属性 ExtendActModelEntity extModel =extendActModelDao.getModelAndBusInfo(modelld); String key=StringUtils.toStringByObject(extModel.getActKey()); process.setld(key); process.setName(StringUtils.toStringByObject(extModel.getName(); process.setDocumentation(StringUtils.toStringByObject(extModel.getRemark()); ObjectNode objectNode =new BpmnJsonConverter().convertToJson(bpmnModel); //更新模型信息 repositoryService.addModelEditorSource(modelld,objectNode.toString().getBytes("utf-8")) //更新模型 model.setName(StringUtils.toStringByObject(extModel.getName())); model.setKey(key); ObjectNode actObjectNode =objectMapper.createObjectNode(); actObjectNode.put(ModelDataJsonConstants.MODEL_NAME, StringUtils.toStringByObject(extModel.getName())); actObjectNode.put(ModelDataJsonConstants.MODEL_REVISION,model.getVersion()); actObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, StringUtils.toStringByObject(extModel.getRemark())); model.setMetalnfo(actObjectNode.toString()); //设置流程名称 String deployName =process.getName(); l/转换 bpmnModel 为可部署的 xml 形式 bytel]bpmnBytes =new BpmnXMLConverter().convertToXML(bpmnModel); |1数据持久化和其他代码省略 |
图4 . 7 部署流程代码图
4.2 项目管理模块的实现
项目管理模块主要包括用户项目管理、用户审批管理和关联项目管理三个功 能模块,下面将对用户项目管理和用户审批管理这两个功能模块作详细介绍。关联项目管理实现过于简单,不再对其作详细阐述。
4.2.1 用户项目管理
在发布招标信息之前,用户首先需要进行招标项目的提出以及新建工作,用 户项目管理负责用户项目的新建以及发起审批申请的工作。用户通过新增项目功 能进行项目添加。添加后,在还未进行提交审批申请前,用户可以反复多次修改项目信息,项目新建完成后,通过提交审批功能进行招标项目审批申请, 一旦提交审批申请,项目的所有信息都将不可更改,直到审批驳回后,才可以对项目信 息修改。用户可以通过查看招标项目列表以及审批详情,查看用户提交的所有审批项目的审批进度以及审批结果。
本功能模块主要包含的类如表4.4所示:
表4.4用户项目管理模块主要类
分类 | 主要包含的类 |
控制层类 | ActDealController.java |
业务逻辑类 | ActDealServicelmpl.java |
持久对象类 | ActTasklogEntity.java ActProjectEntity.java |
数据持久类 | ActProjectDao.jave |
ActDealServicelmpl 类实现了启动项目审批的 startFlow 方法,该方法通过 接收 ProcessTaskDto 类型的参数,得到了一个数据转换后的对象,方法判断对 象中的各个属性值不为空后,使用key 获取流程业务关联信息,随后,数据持久 化类通过代码中生成的 params 参数查询当前要提交流程的业务记录。查询完成 后,通过 runtimeService 的 startProcesslnstanceByld 方法对流程进行启动并设 置启动变量。提交之后,更改业务审批状态为审批中,审批结果也为审批中,流程完成后,更改当前业务表的流程信息,并向发起审批申请的用户发送通知。前端向后台发送 ProcessTaskDto 类型数据后,使用 ActModelerController类启动项目审批,相关代码如图4.8所示:
@RequestMapping(value ="startFlow",method =RequestMethod.POST) @ResponseBody public Result startFlow(ProcessTaskDto processTaskDto){ Result result =null; try { actModelerService.startFlow(processTaskDto) esult=Result.ok("提交成功!"); }catch (Exception e){ e.printStackTrace() esult=Result.error("提交失败!"); return result; } |
图4.8 查看审批记录户代码图
查看审批记录界面图,如图4.9所示:
图4.9 查看市批记录界面图
需要当前用户审批的相关项目显示在当前列表中,用户办理审批后相关记录
从 该 列 表 中 移 除 , 用户可以对项目进行审批和查看项目信息操作
本功能模块主要包含的类如表4 . 5所示:
表 4 .5 用户审批管理模块主要类
分类 | 要包含的类 |
控制层类 | ActDealController.java |
业务逻辑水 | ActDealServicelmp.java |
持久对象类 | ActTasklogEntity.java ActProjectEntity.java |
数据持久类 | ActProjectDao.java |
用户办理审批时,同意当前节点的同时,需要确定下 一 审批节点的审批人,
ActDealServicelmpl 的 getNextActNodes 方法实现了这 一 功能,其部分实现代
码图如图4 . 10所示。
Task task = taskService.createTaskQuery().taskld(processTaskDto.getTaskld()).singleResult(); String[]varNames=processTaskDto.getVarName().split(".") String[]varValues=processTaskDto.getVarValue().split(".") Map<String,Object>elMap =new HashMap<>(); or (int i=0;i<varNames.length;i++){ f(StringUtils.isEmpty(varNames[i])){ continue; |
4.3 招标管理模块的实现
招标管理模块主要包括招标公告发布、招标项目间题澄清、开标管理、评标 问题澄清和定标管理五个功能模块,下面将对招标公告发布、开标管理和定标管理这三个功能模块作详细介绍。
4.3.1 招标公告发布
招标项目通过审批后,可以通过本功能模块向社会发布招标公告信息进行公 开招标,招标信息中应该包含项目名称、项目类型、招标编号、招标部门等项目相关信息,如果在招标过程中遇到了大型的招标项目,可以进行分包后分别招标。
木功能模块主要包含的类如表4.6所示:
表4 . 6 招标公告发布模块主要类
分类 | 主要包含的类 |
控 制层类 | PublicBiddingBulletinController.java |
业务逻辑类 | PublicBiddingBulletinServicelmp.java |
持久对象类 | BidProjectEntity.java |
数 据 持久类 | BidManagerDao.java PublicBiddingBulletinDao.java |
新增招标公告表单图如图4 . 12 所示, 由于篇幅限制,本图片仅仪截取了前 端页面中的部分字段 . 由图可知,分包在项目进行招标公告发布时进行 . 如果分 包 . 会单独添加分包名称 . 同 一 个项 目中的不同包项目招标编号也不相同 . 但包所 属 项 目 为 同 一 个 项 日
4.3.2 开标管理
按照发布招标公告时设置的开标日期进行开标,开标后,投标人(供应商) 可进入开标室并解密标书,回答招标人关于标书中各项指标的提出的问题,招标人进行评标。本功能模块主要包含的类如表4 . 7所示:
表4.7开标管理模块主要类
分类 | 主要包含的类 |
控制层类 | BidManagerController.java |
业务逻辑类 | BidManagerServicelmp.java TenderManagerServicelmp.java StartBidServicelmpl.Java |
持久对象类 | BidProjectEntity.java |
数据持久类 | BidManagerDao.java |
StartBidServicelmpl 的 acceptMessage 方法实现了开标室中的消息接收功
能,其用于接收消息的线程的实现代码如图4.13 所示。
public void run(){ try { while (connected){ int size =0 selector.select(); for (lterator<SelectionKey>it =selector.selectedKeys().iterator();it.hasNext();){ SelectionKey selectionKey =it.next(); t.remove(); f (selectionKey.isReadable()){ ByteArrayOutputStream baos =new ByteArrayOutputStream(); while((size =clientChannel.read(buf))>0){ buf.flip(); baos.write(buf.array(),0,size); buf.clear(); } byte[]bytes =baos.toByteArray() baos.close(); Response response =ProtoStuffUtil.deserialize(bytes, Response.class); handleResponse(response) } } }catch (IOException e){ JOptionPane.showMessageDialog(null,"服务器关闭,请重新尝试连接"); sLogin =false; } |
图4.13 接收消息线程代码图
4.3.3 定标管理
评标过程结束后,即可开始定标工作,定标通过对参与本次招标的所有投标 人按照各项招标指标评估,选出最适合本次招标项目的投标人。定标结束后,通 过本功能向中标的投标人发出中标通知,并提交中标通知书,向社会发布中标公告。若评标阶段没有投标人中标,对本项目做流标处理,发布流标公告。
本功能模块主要包含的类如表4.8所示:
表4.8定标管理模块主要类
分类 | 主要包含的类 |
控制层类 | CalibrationManagerController.java |
业务逻辑类 | BidManagerServicelmpl.jave Calibration Servicelmpl.java NotificationServicelmp.java |
持久对象类 | BidProjectEntity.java |
数据持久类 | BidManagerDao.java CalibrationDao.java |
4.4投标管理模块的实现
投标管理模块主要包括报名与投标、参与开标和中标通知查看三个功能模 块,下面将对报名与投标和参与开标这两个功能模块作详细介绍,中标通知查看依赖于通知管理模块的实现,因此不再作详细介绍。
4.4.1 报名与投标
对于已经通过系统审核的供应商,可在招标项目列表中对自己企业感兴趣的 项目进行招标报名,报名审核通过后,即可在规定的截止日期之前进行投标文件的提交,同时,在未开标之前,随时可以撤回投标文件。
本功能模块主要包含的类如表4.9所示:
表4.9报名与投标模块主要类
分类 | 主要包含的类 |
控制层类 | TenderManagerController.java |
业务逻辑类 | TenderManagerServicelmp.java |
持久对象类 | BidProjectEntity.jave |
数据持久类 | TenderManagerDao.java |
用户上传的标书最后需要经过系统对标书加密,由于本系统只接收 PDF 格 式的电子投标书,因此,在标书加密阶段,调用 Itext 的 PDF 加 密 方 法 对 标 书 加 密 , 出于数据安全性的原因,标书的加密密码由用户自行保存,系统数据库不再
保存用户的投标书密码, Itext对 PDF 的 加 密 部 分 代 码 如 图4.14 所示:
4.4.2 参与开标
到达开标日期后,用户按照流程进入开标室,解密开标文件并回答招标人对 于标书提出的疑问。由于投标时仅对投标标书作了文档加密,因此,在开标下载
文档后,应由投标人提供文档密码进行解密。
本功能模块主要包含的类如表4 . 10所示:
表 4 . 1 0 参 与 开 标 模 块 主 要 类
分类 | 主要包含的类 |
控制层类 | OpenTenderManagerController.java |
业务逻辑类 | OpenTenderManagerServicelmp.java |
StartBidServicelmpl.Java | |
持久对象类 | BidProjectEntity.java OpenTenderEntity.java |
数据持久类 | OpenTenderManagerDao.java |
4.5 系统管理模块的实现
系统管理模块主要包括系统用户管理、系统角色管理和部门管理三个功能模 块,下面将对系统用户管理和部门管理作详细介绍,系统角色管理实现逻辑与系统用户管理实现逻辑类似,不再作详细介绍。
4.5.1 系统用户管理
对系统中的用户进行管理,包括用户的添加、修改,删除、禁用、启用和查看用户信息。
本功能模块主要包含的类如表4.11所示:
表4.11系统用户管理模块主要类
分类 | 主要包含的类 |
控制层类 | UserController.java |
业务逻辑类 | UserServicelmpl.java RoleServicelmp.java |
持久对象类 | UserEntity.java RoleEntity.java |
数据持久类 | UserDao.java |
使用 UserServicelmpl 类对获取权限,相关代码如图4.16所示:
public Map<String,List<String>>queryBaidByUserld(String userld){ f(StringUtils.isEmpty(userld)){ throw new MyException("用户id为空,获取用户部门权限失败") } ll用户对应的部门id List<Map<String,Object>>maps =userDao.queryOrganldByUserld(userld, Constant.OrganType.DEPART.gefValue()) Map<String,List<String>>baidMap =new HashMap<>(); for (Map<String,Object>map:maps){ String bald =(String)map.get("organld") String roleld =(String)map.get("roleld"); I第一次添加角色id Key f(!baidMap.containsKey(roleld)){ List<String>tempList =new ArrayList<>(); |
tempList.add(bald); baidMap.put(roleld,tempList) }else { baidMap.get(roleld).add(bald); } return baidMap; |
图 4 . 16 获 取 用 户 权 限 代 码 图
系 统 用 户 信 息 修 改 界 面 图 , 如 图4.17 所 示 :
4.5.2 部门管理
本模块对系统中的用户所属部门进行管理,包括用户部门的添加、修改,删除、禁用、启用和查看部门信息。
本功能模块主要包含的类如表4.12所示:
表4.12部门管理模块主要类
分类 | 主要包含的类 |
控制层类 | OrganController.java |
业务逻辑类 | OrganServicelmp.java |
持久对象类 | OrganEntity.jave |
数据持久类 | OrganDao.java |
使 用 OrganController 类 对 部 门 进 行 新 建 保 存 , 相 关 代 码 如 图 4 . 1 8 所 示 :
public Result save(@RequestBody OrganEntity organ){ List<OrganEntity>organEntities =organService.queryListByCode(organ.getCode()); if(organEntities !=null &&organEntities.size()>0}{ return Result.error(“部门编号已经存在,请重新输入!”); } String id =organService.save(organ); if(StringUtils.isEmpty(id)){ return Result.error("保存"+organ.getName()+"失败!"); OrganEntity organEntity =organService.queryObject(id); return Result.ok("保存"+organ.getName()+"成功!").put("organlnfo",organEntity); |
图4. 18 保存部门代码图
由图4.18可知,用户通过前台代码将 OrganEntity 类型的参数传到后台后, 首先后台会对数据进行校验,查验是否已经使用了存在的部门编号,校验通过后,会对数据通过持久化类 OrganDao 进行保存后返回结果。
4.6 系统应用情况与效果
系统通过 SpringBoot 和 Vue 框架实现后以JAR 方式于2018年3月在天津 市高级人民法院的服务器运行,经法院人员运用后,可以满足法院招投标工作的 基本需求,通过工作人员对本系统的使用,也提高了法院招标项目的透明度和工作人员的办事效率。同时,也加强了法院的办公信息化建设和廉政建设。
4.7 本章小结
本章在项目需求分析和系统设计的基础上,对系统的工作流管理模块、项目 管理模块、招标管理模块、投标管理模块和系统管理模块的具体实现进行了详细 描述,对这五个功能模块中的部分代码作了介绍和实现描述,对系统中的关键页面和关键功能作了页面展示。同时,对项目的应用情况与效果做了介绍。
第五章 总结与展望
5.1 总结
本文主要论述了电子招投标系统的设计与实现,介绍了系统的研究背景、项目需求分析、项目总体设计、数据库设计和模块详细实现等内容。
本文所研究的电子招投标系统,是一个符合法院业务流程体系的信息自动化 办公系统。主要包括工作流管理、项目管理、招标管理、投标管理、供应商审核 管理以及通知管理等模块,其中工作流管理是主要负责系统中各项审批业务的管 理与查看。项目管理主要是对提交的招标项目进行审核以及查询。招标管理主要 是对招标阶段中的发布招标公告、项目问题澄清、开标、评标以及定标等各阶段 的管理。投标管理主要是对投标人参与招标与递交标书的管理。供应商管理主要 负责对参与招标的供应商进行审核以及管理。通知管理主要是本系统各类通知的 查阅以及管理。系统管理主要是对本系统的用户进行权限以及部门的管理和用户基本信息的维护。
在本系统中,各个功能模块相互协作,实现各模块之间的数据传递,系统运 用了先进的 SpringBoot 技术框架和 Vue 技术框架,保证了系统按照预期平稳运行。
5.2 进一步工作展望
电子招投标系统是一个易于维护和扩展的综合信息管理办公系统,为了更好符合招投标业务标准,更好的提高工作人员的办公效率,系统还需完善以下部分:
1.为本系统单独开发展示页面,不再基于其他网站的页面展示,降低数据交互逻辑。
2.引入评标专家模块,实现在线专家评标。
3.增加系统测试用例,确保线上系统平稳运行。
参 考 文 献
[陈岩,2018] | 陈岩,轻量级响应式框架 Vue.js 应用分析,中国管理信 息化,2018(3):181-183。 |
[陈涛,2014] | 陈涛, MVVM 设计模式及其应用研究, 计算机与数字工 程,2014(10):1982-1985。 |
[段玉平等,2008] | 段玉平,罗锦珠,信息与办公自动化,科学技术文献出版 社,1995。 |
[弗里曼,2004] | 弗里曼著,HeadFirst 设计模式,中国电力出版社,2007。 |
[黄缙华,2011] | 黄缙华著,MySQL 入门很简单,清华大学出版社,2011。 |
[胡启民等,2008] | 胡启民,薛锦云,钟林辉,基于 Spring 框架的 J2EE 架 构与应用,计算机工程与应用,2008,44(5):115-133。 |
[计文柯,2009] | 计文柯著,Spring 技术内幕深入解析 Spring 结构与设 |
计原理,机械工业出版社,2009。
[旷志光等,2017] | 旷志光,纪婷婷,吴小丽,基于 Vue.js 的后台单页应用 管理系统的研究与实现,现代计算机,2017(20):51-55。 |
[凯耶尔,2010] | 凯耶尔著,张平,龚波,李平芳等译, Java EE 设计模 式-Spring 企业级开发最佳实践,人民邮电出版社,2010。 |
[吕毅等,2006] | 吕毅,葛玮,郝克刚, Spring 轻量级 J2EE 开发框架的研 究,计算机技术与发展,2006,16(12):208-211。 |
[梁萍,2014] | 梁萍,贺易明,晁玉增,我国电子招投标现状分析与发展 对策研究,改革与开放,2014(17):13-15。 |
[李修云,2016] | 李修云,基于 Activiti 框架的在线审批流程应用研究,计 算机科学,2016,43(S1):555-557。 |
[李洋等,2011] | 李洋,孙永维,许冰,王英双,基于 Ajax,Struts,Hibernate 和 Spring 的 J2EE 架构,吉林大学学报(信息科学版), 2011,29(6):576-584。 |
[芦苇,2011] | 芦苇,政府招投标中的廉政创新举措分析,九江学院学报 (社会科学版),2011,30(1):48-50。 |
[麦冬等,2017] | 麦冬,陈涛,梁宗湾,轻量级响应式框架 Vue,js 应用分 析,信息与电脑,2017(7):58-59。 |
[马叶敏等,2012] | 马叶敏,郭叶,法院信息化建设初探,法律文献信息与研 究,2012(2):35-44。 |
[戚欣,2008] | 戚欣,基于 J2EE 架构的层次结构研究及应用,吉林大 学学报(信息科学版),2008,26(3):295-301。 |
[荣艳冬,2015] | 荣艳冬,关于 Mybatis 持久层框架的应用研究,信息安全 与技术,2015,6(12):86-88。 |
[沈文欣,2012] | 沈文欣,浅谈建设工程电子招投标,中国招标, 2012(38):7-9。 |
[王永和等,2016] | 王永和,张劲松,邓安明, Spring Boot 研究和应用,信 息通信,2016(10):91-94。 |
[汪云飞,2016] | 汪云飞著,JavaEE 开发的颠覆者-Spring Boot 实战,电 子工业出版社,2016。 |
[温晓丽等,2017] | 温晓丽,苏浩伟,陈欢,邹大毕,基于 SpringBoot 微服 务架构的城市一卡通手机充值支撑系统研究,电子产品世 界,2017,24(10):59-62。 |
[徐雯等,2012] | 徐雯,高建华,基于 Spring MVC及 MyBatis 的 Web 应 用框架研究,微型电脑应用,2012,28(7):1-10。 |
[徐亦楠等,2014] | 徐亦楠,葛志辉,潘海源, Activiti5 工作流在 OA 系统 中的应用,大众科技,2014(1):5-11。 |
[徐孝成,2015] | 徐孝成,基于 Shiro 的 Web 应用安全框架的设计与实现, 电脑知识与技术,2015(16):93-95。 |
[徐頓等,2017] | 徐頓,朱广华,贾瑶,基于VueJs 的 WEB 前端开发研究, 科技风,2017(14):69-69。 |
[易剑波,2016] | 易剑波,基于 MVVM 模式的 WEB 前端框架的研究,信 息与电脑,2016(19):78-84。 |
[赵艳铎,2011] | David M.Kroenke 、David J.Auer著, 赵艳铎、葛萌萌译, 数据库概念(第5版),机械工业出版社,2011。 |
致 谢
随着时间的流逝,研究生的学习生涯即将接近尾声。在南京大学软件学院学 习的这两年里,有很多值得感谢的人。首先,非常感谢骆斌教授的指导,其次感 谢给我论文和项目极大帮助的葛季栋老师和张峰老师。在论文的选题、项目的时间安排以及论文的撰写过程中,正是骆斌教授、葛季栋老师和张峰老师的耐心指导,才使我能够顺利完成毕业论文。在这里,我要向导师们表示深深的谢意。感谢南京大学软件工程中心的同学们,在我技术上遇到困难时给予了很大的
帮助。感谢我的同学,与我一起度过短暂而又精彩的研究生生活,在我的生活和学习上给了我极大的帮助。感谢父母对我的养育之恩,对我的无私奉献和持之以恒的支持。感谢南京大学软件学院为我提供的优秀的学习环境。最后,感谢为评阅本论文而付出宝贵时间的所有老师、专家和教授们。