摘 要
随着互联网的快速发展,人们对商品经济的消费和思考不再停留在传统
的经济模式上,网上购物商城是企业与企业进行、企业与消费者进行电子商
务交易的一个很好平台。网上购物商城极大地降低了企业商家的交易成本,
缩短企业供应链周期,提高整个社会的效率。
目前我国的中小企业发展迅速,虽然它们没有单独开展电子商务的实力,
但这些企业终将要建设自己的电子商务平台。网上购物商城建设就是为商家
企业进行电子商务活动搭建的一个交易和服务的平台,企业通过网上购物商
城能很好地将买卖双方集中到一起,以提出建议、个性化服务或者其他形式
的内容来增加企业自身的价值。
本论文开发了一款基于 SpringCloud 全品类电商交易平台,主要工作
包括调查研究电子商务的发展趋势,然后通过资料调研分析本系统的需求以
及设计开发本系统的技术要求,采用 SpringCloud 框架开发 Web 商城应用
系统,运用面向对象思想和面向服务设计思想完成系统的框架设计,以
Eureka 作为微服务的注册中心来实现远程服务的调用,并配合使用 Ribbon
负载均衡来实现后台服务器的合理调度,使用 openResty 生成商品详情页,
此外还通过 Redis 来缓存数据库中商品数据以提升查询的效率,同时使用
Canal 实现 redis 缓存同步,以及搭建 Elasticsearch 实时搜索服务器用以
处理用户的搜索请求,利用消息中间件 RabbitMQ 来同步 ElasticSearch 索
引库;利用 JWT 技术来提升用户登录网站时的体验,最后对于设计完成的
系统进行功能性和非功能性测试以及基于测试数据的分析总结和展望。
关键词:电子商务,SpringCloud,Web 商城,负载均衡,实时搜索
获取更多资料,请联系网站咨询或致电400-618-4000
Abstract
With the rapid development of the Internet, people’s consumption and thinking
of commodity economy no longer stay on the traditional economic model.
Online shopping mall is a good platform for enterprises and enterprises to carry
out e-commerce transactions between enterprises and consumers. Online
shopping mall greatly reduces the transaction cost of enterprises, shortens the
supply chain cycle and improves the efficiency of the whole society.
At present, small and medium-sized enterprises in China are developing rapidly.
Although they do not have the strength to carry out e-commerce alone, these
enterprises will eventually carry out their own e-commerce enterprises. The
construction of online shopping mall is a trading and service platform for
business enterprises to carry out e-commerce activities. Enterprises can well
concentrate buyers and sellers together through online shopping malls. To put
forward suggestions, personalized services or other forms of content to increase
the value of the enterprise itself. .
A SpringCloud - based e - commerce trading platform, The main work
includes investigating the development trend of e-commerce,Then through the
data investigation and analysis of the requirements of the system and the design
and development of the system technical requirements, Using SpringCloud
framework to develop Web Mall application system, Using Object-Oriented and
Service-Oriented Design, Eureka as the registry of micro services to implement
remote service calls, And with the use of Ribbon load balancing to achieve
reasonable scheduling of background servers, Generate product details pages
using openResty, Furthermore, Redis is used to cache commodity data in
databases to improve query efficiency, redis cache synchronization using Canal,
And build Elasticsearch real-time search server to process user search requests,
Use message middleware RabbitMQ to synchronize ElasticSearch index library;
By using JWT technology to enhance the user’s experience when logging in,
Finally, the functional and non-functional tests and the analysis and prospect
based on the test data are carried out.
Key words: E-commerce, SpringCloud, Web Mall, Load
balancing,Real-time search
目 录
第一章 绪论… 1
1.1 研究背景… 1
1.2 国内外发展现状… 2
1.2.1 全球发展现状和特点… 2
1.2.2 国内发展现状和特点… 3
1.3 商城的开发意义… 4
1.4 商城开发功能目标… 5
第 2 章 系统开发环境与技术… 6
2.1 总体开发环境简介… 6
2.1.1 开发环境与技术路线… 6
2.1.2 开发设计思想… 6
2.2 微服务简介… 7
2.2.1 微服务的特点:… 7
2.2.2 微服务结构图:… 8
2.3 VUE 简介 … 8
2.4 结构化查询语言(Structured Query Language)… 8
第 3 章 系统分析与设计… 10
3.1 系统基本功能描述… 10
3.2 可行性分析… 10
3.3 系统需求分析… 10
3.3.1 商家功能… 11
3.3.2 消费者功能:… 11
3.3.3 系统功能要求… 11
3.3.4 系统运行环境… 12
3.4 系统开发工具… 13
3.4.1 Intellij IDEA … 13
3.4.2 Mysql … 13
3.4.3 Maven… 13
3.4.4 Docker … 14
3.5.系统架构设计… 14
第 4 章 数据库设计… 16
4.1 数据库设计原则… 16
4.2.数据库概念结构设计… 16
4.3 数据库表设计… 18
4.4.本章小结… 21
第 5 章系统设计… 22
5.1 商家后台详细设计与实现… 22
5.1.1.修改商品… 23
5.1.2.新增品牌… 25
5.2. 前台详细设计与实现… 26
5.2.1.搜索功能详细设计与实现… 27
5.2.2.用户注册功能… 31
第六章 系统测试… 35
6.1 功能性测试 … 35
6.1.1 商家后台功能测试… 35
6.1.2 前台功能测试… 36
6.2 非功能性测试… 37
6.3 本章小结… 39
第一章 绪论
1.1 研究背景
改革开放以来,几十年高速增长的 GDP 向世界证明了中国特色社会主
义道路。然而,随着国际贸易环境的纷繁多变以及基于可持续发展的理念,
过去的唯增速的 GDP 模式已经不再适合当下的中国,亟需对经济发展模式
进行改革。在高速发展的过程中沿海地区领先于内陆,城市的发展比农村地
区快的多。发展不平衡不充分的一些突出问题尚未解决,发展质量和效益还
不高。
互联网的诞生为人们的生活带来了极大的便利,如今互联网充斥了人们
生活的各个角落,以前需要去线下排队才能完成的事,如今足不出户,只需
要一台电脑,一部手机就能搞定,互联网无时无刻不在影响着人们的消费习
惯和生活方式。在线商城是传统商业和互联网相结合的产物,打破了传统的
商业模式,创造了新的商业理念,利用信息科技将传统商业行为,电子化,
信息化。它与传统商业模式的区别在于它不会收到时间和空间的限制,用户
和商家可以随时随地进行线上商业交易,近些年,无论国外还是国内,电子
商务的迅猛发展,用户规模不断扩大,交易屡创新高,根据中国电子商务研
究中心统计数据,2014 年至 2021 年全球电商预计销售额如图 1-1 所示。
图 1-1
根据图 1-1,2014 年到 2021 年,电商业务预计增长 265%,未来电商市
场仍然稳步上升,当前,电商正朝着与实体经济相结合的方向发展,对社会
经济运行的影响越来越大,正在成为推动全球经济增长的新动力。
1.2 国内外发展现状
1.2.1 全球发展现状和特点
随着 1995 年亚马逊在美国成立,这种互通过联网进行商业交易的新兴
模式就在全球蔓延开来。美国电商发展史如图 1-2 所示。
图 1-2
较美国而言,欧洲的电子商务发展起步略晚,但欧洲发展速度快,已经
成为电子商务的成熟发展地区。亚洲作为电子商务发展的后起之秀,市场潜
力巨大,近年来发展速度和市场份额都在不断增长,是全球电子商务的持续
发展地区。
目前,全球范围内电子商务有如下现状和特点:
(1) 交易规模持续扩大。
(2) 地区差距逐步减小。
(3) 共享模式迅速崛起。
(4) 商业并购日趋频繁。
1.2.2 国内发展现状和特点
国内电子商务发展可追溯从 1999 年起,随着阿里巴巴成立 B2B 电商平
台,2003 年京东在北京成立 B2C 电商平台,从此开启来我国电子商务快速
发展的篇章。国内电商发展史如图 1-2 所示:
图 1-2
国内电子商务的现状和特点:
(1) 新零售时代流量获取话题突出 平台多样模式创新争取用户。
(2) 电商体系加速成熟 行业发展将更显规范化。
(3) 消费者电商购物更注重品质 平台背书影响力扩大。
(4) 电商平台加强社交化布局 组团拼购模式发展速度提升。
(5) 基础设施完善助力电商平台渗透加强 下沉城市争夺将更趋激烈。
1.3 商城的开发意义
虽然现如今电商行业发展迅速,平台成熟,但是小的个体商家想要在头
部电商平台中交易还是代价很高,各种供应链拖欠货款层出不穷,当客户和
平台由于商品问题产生纠纷后,平台整体会倾向于客户处理,总之,还是要
有自己的商城系统,构成所谓的两条腿发展,做到既可以利用第三方平台销
售,也需要自己建立平台。我们开发的商城,具备全品类商品的买卖能
力,并且组建了一整套高性能服务,可以实现高并发高可用,满足电商的各
种促销。为中小企业全方位解决搭建交易平台的难题。
1.4 商城开发功能目标
(1) 商品管理模块:实现商品分类,品牌,规格参数,商品自身管理,商
品的上架,下架处理。
(2) 搜索系统:基于 elasticSearch 实现商品搜索,搜索自动提示,高亮,
排序,搜索过滤。
(3) 登录系统:实现用户的登录以及登出,过期时间刷新。
(4) 购物车系统:基于 SpringData 及 MongoDB 实现购物车增删改查。
(5) 下单系统:下单减库存,使用分布式事务解决方案 Seata
(6) 支付系统:调用第三方电子支付平台完成支付及回调,动态修改订单
状态为已支付,为后续发货物流,做好保障工作。
第 2 章 系统开发环境与技术
2.1 总体开发环境简介
按照软件工程对软件工作阶段的划分,软件开发分为需求分析、软件设
计、编码、测试及维护等不同阶段,相应的软件工具则包括需求工具,软件
设计工具,软件构造工具,软件测试工具,软件维护工具等。现在很多工具
都逐渐集成在一起形成集成开发环境(IDE),比如 Intellij IDEA,可以完
成从软件的设计(UML)到软件的编程(Java),再到测试(JUnit)等大
部分工作。因此当多种工具集成在一起时,我们也可以说这是一种开发环境。
2.1.1 开发环境与技术路线
整个系统采用 Java 语言基于 Spring 全家桶,与 MySQL 数据库,redis,
Elasticsearch,MongoDB 相结合而开发,并且以 mybatis-plus 进行数据库连
接及访问操作;系统前台界面采用基于 Vue 前端框架以及 Vuetify 前端 UI
框架开发的静态 web 服务,并通过 SpringMVC 作为后台核心调度控制,并借
助 Elasticsearch 实现实时搜索。
2.1.2 开发设计思想
1.系统的优点不仅仅要体现在功能上,还要在使用上具有方便、快捷、
高效的特点
2.系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,
又便于系统维护。
3.在服务器、数据库等多个层次上提供行之有效的安全防范措施,可确
保系统安全稳定地运行。
4.具有高度的灵活性和良好的可扩充性,可随着用户需求的变化在功能
和规模两方面随时进行扩展和升级。
2.2 微服务简介
微服务 (Microservices) 就是一些协同工作小而自治的服务。2014 年,
Martin Fowler 与 James Lewis 共同提出了微服务的概念,定义了微服务是由
以单一应用程序构成的小服务,自己拥有自己的行程与轻量化处理,服务依
业务功能设计,以全自动的方式部署,与其他服务使用 HTTP API 通信。
同时服务会使用最小的规模的集中管理能力,服务可以用不同的编程语言与
数据库等组件实现 。
2.2.1 微服务的特点:
单一职责:微服务中每一个服务都对应唯一的业务能力,做到单一职责
微:微服务的服务拆分粒度很小,例如一个用户管理就可以作为一个服务。
每个服务虽小,但“五脏俱全”。
面向服务:面向服务是说每个服务都要对外暴露 Rest 风格服务接口 API。
并不关心服务的技术实现,做到与平台和语言无关,也不限定用什么技术实
现,只要提供 Rest 的接口即可。
自治:自治是说服务间互相独立,互不干扰
团队独立:每个服务都是一个独立的开发团队,人数不能过多。
技术独立:因为是面向服务,提供 Rest 接口,使用什么技术没有别人干涉。
前后端分离:采用前后端分离开发,提供统一 Rest 接口,后端不用再为 PC、
移动端,开发不同接口。
数据库分离:每个服务都使用自己的数据源。
部署独立,服务间虽然有调用,但要做到服务重启,不影响其它服务。有利
于持续集成和持续交付。每个服务都是独立的组件,可复用,可替换,降低
耦合,易维护。
2.2.2 微服务结构图:
图 2-1
2.3 VUE 简介
Vue.js 是一套构建用户界面的渐进式框架。与其他重量级框架不同的是,
Vue 采用自底向上增量开发的设计。Vue 的核心库只关注视图层,并且非常
容易学习,非常容易与其它库或已有项目整合。另一方面,Vue 完全有能
力驱动采用单文件组件和 Vue 生态系统支持的库而开发的复杂单页应用。
Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的
视图组件。
Vue.js 自身不是一个全能框架——它只聚焦于视图层。因此它非常容易
学习,非常容易与其它库或已有项目整合。另一方面,在与相关工具和支持
库一起使用时,Vue.js 也能完美地驱动复杂的单页应用。
2.4 结构化查询语言(Structured Query Language)
结构化查询语言(Structured Query Language)即 SQL,是一种标准的关系型数
据库查询语言。SQL 语言的主要功能就是同各种数据库建立联系,进行沟
通。按照 ANSI(美国国家标准协会)的规定,SQL 被作为关系型数据库管理
系统的标准语言。SQL 语句可以用来执行各种各样的操作,例如更新数据
库中的数据,从数据库中提取数据等。目前,绝大多数流行的关系型数据库
管理系统,如 Oracle, Sybase, Microsoft SQL Server, Access 等都采用了 SQL
语言标准。虽然很多数据库都对 SQL 语句进行了再开发和扩展,但是包括
Select, Insert, Update, Delete, Create,以及Drop在内的标准的SQL命令仍然可
以被用来完成几乎所有的数据库操作。SQL 为许多任务提供了命令,包括:
1.查询数据
2.在表中插入、修改和删除记录
3.建立、修改和删除数据对象
4.控制对数据和数据对象的存取
5.保证数据库一致性和完整性
10
第 3 章 系统分析与设计
3.1 系统基本功能描述
本系统的主要用途是供企业进行线上商品交易处理,用户分为后台管理
员以及前台买家消费者。
本系统为管理者提供了方便统一的管理功能,包括:商品分类管理,品
牌管理,商品规格参数管理,商品增删改查,以及商品的上下架管理等。用
户可以实现的功能有,登录注册,商品搜索,搜索自动提示,加入购物车,
下单,结算,支付等。
3.2 可行性分析
(1)技术可行性:本系统的配置在这种中小规模的情况下能够提供较快
的数据访问,技术上可行。
(2)经济可行性:系统的配置,不需要昂贵的服务器,大部分软件都是
可以免费获得,开发成本低。
(3)操作可行性:访问本系统后台的主要是企业的管理员。不需要太复
杂的操作,只需通过界面提示的信息直接录入信息或者查询,修改,删除信
息即可实现系统的完整、稳定的运行,不会造成系统的巨大压力,不需要太
高的技术支持。前台系统对应的操作虽然会有高并发风险,但是我们对应的
后台系统可以做异步,缓存及集群等优化部署,可以全方位保证系统安全可
靠执行。
3.3 系统需求分析
通过对系统需求进行分析,我们可以确定系统中有两类用户:商家和
消费者。两类用户的具体描述如下:
3.3.1 商家功能
管理商品分类,商品品牌,商品规格参数,商品的上下架,以及商品的
增删改查,一键导入数据库的数据到索引库。
3.3.2 消费者功能:
实现商品搜索,登录注册,搜索智能提示 ,商品加入购物车,从购物车
下单,下单后基于订单的支付
3.3.3 系统功能要求
商家后台管理功能:
- 商品分类管理:管理员在后台系统负责处理整个商城所售卖的商品分类
信息,可以实现增删改查,如果当前分类下有商品则分类信息不允许删
除。 - 商品品牌管理:管理员在后台系统负责处理整个商城所售卖的商品品牌
信息,品牌需要和分类进行对应,可以实现增删改查,如果当前品牌下
有商品,品牌不允许删除。 - 商品规格参数管理:管理员针对分类进行对应的商品信息规格进行增删
改查,只要当前分类下有商品,规格参数不允许删除。 - 商品管理:管理员在商品系统对商品进行添加处理,上下架,修改,删
除,查询。 - 索引库更新:当商品上下架以及新增后,搜索系统会跟随商品系统的商
品变化而变化。 - 静态页缓存更新:使用 canal 监听数据库实现数据库表数据变更,对应
缓存数据更新。
消费者购物功能: - 用户登录注册:用户可以在系统中先注册再登录实现,注册需要用户名
以及手机号唯一,注册时使用发短信验证码方式证验手机号是否真实有
效。 - 用户搜索提示:当用户搜索时,不需要全部输入搜索内容,会根据现有
搜索内容自动补全 - 用户实时搜索:当用户键入搜索信息时,会立即响应搜索,并进行高亮,
用户可以对搜索结果进行排序,排序条件有上架时间,销量,以及价格
等。 - 用户购物车:客户对感兴趣的商品可以加入购物车处理,并可以修改数
量,以及删除。 - 用户下单处理:用户可以筛选购物车中的某个,或者所有商品进行下单
处理,后台会生成订单并产生唯一的订单编号,生成订单同时对应会减
库存。 - 用户支付:支付模块采用微信等第三方支付方式,采用二维码扫描方式
识别,校验并完成付款操作。 - 支付回调:支付完成后,微信自动请求系统进行订单状态修改,从未支
付改为已支付,为后续发货等操作做准备。
3.3.4 系统运行环境
1.浏览器版本:Google Chrome 45 或以上。
2.分辨率:最佳效果 1920*1080 像素。
3.操作系统:Windows8,Windows10
4.服务器:Tomcat 8.5 或以上
5.数据库:Mysql 5.7 或以上
6.CPU:Intel G5950 3.5GHz
7.内存:8G 以上
13
3.4 系统开发工具
跟随 Java Web 开发主流,商城设计与实现使用了 SpringCloud 微服
务框架进行开发,使用的工具主要有 Intellij IDEA,Mysql,Maven,Docker
等。
3.4.1 IntellijIDEA
IDEA 是一个被广泛使用的、基于 Java 的可扩展开发平台。IDEA 不仅
可以当作 Java 集成开发环境来使用,还包括插件开发环境(Plug-in
Development Environment,PDE),这个组件主要针对希望扩展 IDEA 的软件
开发人员,因为它允许他们构建与 IDEA 环境无缝集成的工具。
商城设计与实现开发中,正是使用了 IDEA 的这一特点,集成了
VUE,Maven,做 Web 开发,方便快捷。
3.4.2 Mysql
Mysql 是一个基于关系型数据库模型建立的数据库管理系统软件
(DBMS)。它帮助用户方使地得到所需信息,并提供强大的数据处理工具。
它可以帮助用户组织和共享数据库信息,以便于根据数据库信息作出有效的
决策。另外,仅有这样—个数据库管理系统软件(DBMS),则只能进行一些
信息系统所需要的简单数据处理,且对操作者有较高的操作技能要求。因此,
信息系统的开发者都是在某种数据库管理系统软件〔DBMS〕环境下编写相
应的应川程序,以形成一个能够满足应用需求且操作尽可能简单的应用型信
息系统,这被称之为二次开发。
3.4.3 Maven
Maven 翻译为“专家”、“内行”,是 Apache 下的一个纯 Java 开发
的开源项目。基于项目对象模型(缩写:POM)概念,Maven 利用一个中
央信息片断能管理一个项目的构建、报告和文档等步骤。
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其
他语言编写的项目。Maven 曾是 Jakarta 项目的子项目,现为由 Apache 软
件基金会主持的独立 Apache 项目。
3.4.4 Docker
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0
协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、
可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟
化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的
app),更重要的是容器性能开销极低。
Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使
您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,
您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方
法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中
运行代码之间的延迟。
3.5.系统架构设计
系统架构设计在系统的开发中扮演着重要作用,它是对系统的整体规划
和系统开发的前提,为整个开发过程服务。优秀的架构设计不但能够提高开
发效率,缩短开发周期,而且可以降低后期维护成本。
由于该电商平台上线之后,可能会面临海量的并发访问,所以需要把系
统结构设计成面向服务的分布式系统,分布式系统能够保证在高并发情况下
系统然能 9 行 。本文设计的电商平台架构设计如图所示:
图 3-1 系统架构设计
第 4 章 数据库设计
4.1 数据库设计原则
在系统中,数据库用来保存数据。数据库设计是整个系统的根基和起点,
也是系统开发的重要环节,它的设计好坏直接关系到系统是否具有较高的可
靠性和稳定性,重要性不言而喻。良好的数据库设计能够提高查询效率、保
证数据准确、 减少数据冗余。本文设计的电商平台采用开源的关系型数据
库 MySQL 作为数据库。通过分析,系统确定了如下数据库设计规则 :
(1) 数据库表都有主键字段 ,且非空唯一,但主键的生成方式可以不同
(2) 数据库表若有外键 ,外键字段不能为空
(3) 若两张表之间关系复杂,采用第三张映射表来关联维护两张表之间的关
系
(4) 数据库表名和字段都采取英文字母加下划线的方式命名,英文字母全部
小写
(5) 添加一些必要的冗余字段,例如:创建时间、修改时间、备注等,方便
后期维护拓展
4.2.数据库概念结构设计
数据库概念结构设计是把需求分析得出的需求抽象成概念模型的过程。
通过系统的需求分析需要确定数据库中需要哪些实体、这些实体的属性和实
体之间的联系。实体之间的联系包括一对一、一对多和多对多。E-R 图能够
反映实体与实体之间的联系,通过 3.3 小节的系统功能性需求分析我们知道
系统必然存在最重要的 2 个实体,分别是商家和用户。该电商平台的 E-R
图如图 所示:
图 4-2 系统实体 ER 图
4.3 数据库表设计
数据库物理结构设计主要工作为设计数据库表结构,本文设计的电商平台数
据库实体表设计总表如表 4-1 所示:
表 4-1 表总体结构设计
表名 主键 外键 表说明
tb_category id 商品分类表
tb_brand id 商品品牌表
tb_category_brand brand_id
category_id
brand_id
category_id
品牌分类中间表
tb_spu id brand_id
cid1
cid2
cid3
商品表
tb_sku id spu_id 商品 sku 表
tb_spec_group id category_id 商品规格组表
tb_spec_param id category_id
group_id
商品规格参数表
tb_user id 用户 id
tb_address id user_id 用户地址表
tb_order order_id user_id 订单表
tb_order_detail id order_id 订单详情
19
sku_id
tb_order_logistics id order_id 订单物流
由于篇幅原因且表结构众多,在此不再列出全部数据库表结构 ,以分类表、
商品表、用户表的表结构为例进行介绍:
商品分类共分三级,一级与二级,二级与三级分类之间都是 1 对多关系。商
品与分类表中的第三级分类关联:
表 4-2 商品分类结构设计
字段名称 字段类型 允许为空 说明
id bigint(20) 自增编号 编号
name varchar(50) 否 分类名
parent_id bigint(20) 否 父类目 id
is_parent tinyint(1) 否 是否是父类目
sort tinyint(1) 否 顺序
create_time timestamp 否 创建时间
update_time timestamp 否 更新时间
商品表用来存储商品,结构如下:
表 4-3 商品表结构
字段名称 字段类型 允许为空 说明
20
id int(4) 自增编号 编号
name varchar(50) 否 商品名称
title varchar(50) 否 商品标题
cid1 bigint(20) 否 商品分类 1 级分类
cid2 bigint(20) 否 商品分类 2 级分类
cid3 bigint(20) 否 商品分类 3 级分类
brand_id bigint(20) 否 品牌 id
saleable tinyint(1) 否 是否上架
create_time timestamp 否 添加时间
update_time timestamp 否 更新时间
用户表结构如下:
表 4-4 用户表结构
字段名称 字段类型 允许为空 说明
id int(4) 自增编号 编号
username varchar(50) 否 用户名
password varchar(50) 否 密码
phone varchar(11) 否 电话
create_time timestamp 否 添加时间
update_time timestamp 否 更新时间
4.4.本章小结
本章主要介绍了系统概要设计包 括系统架构设计和系统数据库设计。
其中,系统架构设计对该电商平台整体架构进行设计,系统数据库设计对数
据库 设计原则、数据库概念结构设计 、数据库物理结构设计进行了阐述 。
第 5 章系统设计
本章在前章需求分析和概要设计的基础上 ,通过流程图 、类图、时序
图等方式介绍了该电商平台的详细设计与实现过程,包括商家后台详细设计
与实现、前台详细设计与实现和系统集群详细设计与实现。
5.1 商家后台详细设计与实现
通过第 4 章的需求分析,我们知道,商家后台系统主要包括商品管理、
分类管理、品牌管理、规格管理等五项功能。具体功能包括哪些内容 己在
3.3.1 小节功能需求分析中详细阐明,这里不再赘述。商家后台业务执行流
程图如图 5-1 所示:
图 5-1 商家后台业务执行流程图
通过商家后台业务执行流程图可以得出 ,商家首先访问后台登录界面,
成功登录后就可以对商品、分类、品牌、规格和规格参数进行管理 ,管理
完成后还可以安全退出商家后台。
涉及商品管理的控制层类是 BrandController 类、GoodsController 类、
CategoryController 类、SpecController 类。负责品牌和分类管理的是
BrandController 和 CategoryController。与商品管理有关的是 GoodsController,
包括商品、商品详情、商品 SKU 的管理。与规格参数有关的是 SpecController,
其中包括了规格组管理和规格参数管理。在服务层,有与控制层对应的类进
行业务逻辑处理 。持久层类通过操作实体对象操作数据库 。
下面以商品管理中的修改商品和品牌管理中的新增品牌为例进行详细
说明 。
5.1.1.修改商品
商家登录管理后台后,需要下架商品,然后就可以修改商品。修改完成
并提交到后台后,后台完成数据校验,写入数据库,完成商品修改。商品修
改时序图见图 5-2:
图 5-2 商品修改时序图
修改商品是对下架商品做参数修改。商家可以修改的参数包括:商品名
称、标题、商品描述、商品包装清单、商品售后服务、商品规格参数等。除
此之外,商家还可以修改商品包含的 SKU 信息,例如:商品价格、库存、
图片。商家还可以添加新的 SKU 或者删除一个 SKU。当商家点击保存商品
时,需要对用户修改的数据做检查,将被修改的部分提交到服务端。如果
Sku 有新增、修改、删除并存,需要加以区分:sku 中包含 saleable 的为删
除;sku 中不包含 saleable 并且有 id 的是修改;sku 中不包含 saleable 并且没
有 id 是新增。另外服务端要校验商品 spu 中的 saleable 字段,这个字段是代
表上下架,在修改商品时是不允许修改的。当商品修改完毕,商家验证通过
后再完成提交。
商家后台商品修改的界面如图 5-3,5-4 所示。
图 5-3 商品修改后台页面
图 5-4 商品修改后台页面
5.1.2.新增品牌
品牌管理是对平台的商品品牌进行管理 ,包括对平台所有品牌的查询 、
增加、 修改和删除 ,当该平台需要引入新的品牌时,可以使用新增品牌功
能增加新的品 牌,新增品牌时序图如图 5-5 所示。
图 5-5 新增品牌时序图
商家点击品牌管理界面的 “新建” 按钮 ,进入新增品牌页 ,新增品
牌需要 填写品牌名称、品牌首字母、关联的商品分类及品牌图片等信息,
当点击“保存”后,前端会把商家输入信息封装成对象传递给 BrandController
类的 save()方法,BrandController 类的 save()方法再把对象传递给将服务层
的 save()方法 ,服务层 save() 方法再调用持久层的 insert()方法将对象保存
到数据库的品牌表中,这样就完成了商品品牌的增加。
商家后台新增品牌界面如图 5-6 所示。
图 5-6 商家后台新增品牌界面
5.2. 前台详细设计与实现
前台面向的是用户 ,前台包含的七个子模块己在 3.3.2 小节前台功能
需求分析中阐述,这里不在赘述 。用户首先访问门户首页 ,门户首页向用
户展示商品分类、广告轮播图 、商品广告 、搜索入口和秒杀入口 等。接
着用户可以在门户首页 根据关键宇搜索商品 ,搜索到结果后用户还能够在
搜索面板设置不同的过滤条 件,以达到更精准的搜索结果 ,同时还能够对
搜索结果按照一定规则进行排序 。用户点击搜索结果中的某个商品就能进
入到该商品 的商品详情页,在商品详情 页,用户能够看到与商品有关的详
细信息 ,包括标题、价格、规格等信息 。用户 选择完商品和数量之后点
击加入购物车按钮就能把指定的商品和数量加入到购 物车当中 。在购物车
中 ,用户可以对购物车添加 、修改和删除 ,并且己登录的用 户可以对购
物车的商品进行结算 ,在结算页面选择收货人信息 和支付方式就能够 提
交订单 ,提交订单后用户需要完成在线支付。个人中心主要包含用户注册
和个人信息维护功能、订单查询功能。网站前台业务执行流程图如图 5-7 所
示。
图 5-7前台业务执行流程图
5.2.1.搜索功能详细设计与实现
门户首页是用户首先访问的页面 ,而首页最重要的就是商品搜索入口。
商品搜索是一种站内搜索功能 ,面向的使用者是用户。该电商平台为用户
提 供了快捷方便的商品搜索功能。商品搜索主要包含关键字搜索、动态搜
索过滤条件展示、条件过滤筛选、分页、结果高亮、搜索结果排序等功能。
商品首页见图 5-8
图 5-8 商品前台首页
用户在搜索框内输入一个或多个关键字 ,点击搜索按钮后会将搜索结
果列表展示给用户,同时用户可以通过搜索面板的商品分类 、商品品牌、
规格和价格区间等条件对搜索 结果进行进一步筛 选,也可以对搜索结果按
照价格 、销量等进行排序 。
在搜索商品时,如果使用传统的数据库查询方式搜索会导致在高并发情
况下 搜索性能低下,甚至出现系统瘫痪 。所以 ,本文设计的商品搜索功
能需要搭建 elasticsearch 集群,并通过 WebFlux 响应式编程,实现对
elasticsearch 的异步查询,形成一个异步的 web 服务。当用户搜索商品时 ,
搜索服务会根据关键宇向索 引库中查询商品,而不再向数据库查询 。
当后台商家对商品修改时,还需要利用 MQ 技术实时通知搜索服务,完
成索引库数据与数据库数据的同步,确保双写一致性。
商品搜索的具体实现过程如下 :
(1) 建立商品索引库
(2) 将商品数据导入索引库中
(3) 用户输入搜索关键字、点击搜索过滤条件或排序条件,前端提交参数到
搜索服务
(4) 搜索服务组织搜索条件,向 elasticsearch 发起查询
(5) elasticsearch 利用倒排索引,在索引库中查询商品并返回给搜索服务器
(6) 搜索服务器将商品返回页面,页面完成渲染
建立商品索引库过程如下 :
1)搭建 elasticsearch 集群
2)配置中文分词器,这里是使用 IK Analyzer
3)设置索引库数据结构
4)查询数据库数据,封装成索引库结构,写入索引库
第一步和第二部由于篇幅原因不再展开叙述 ,第三步索引库商品数据结构
设计表如表 5-1 所示:
表 5-1 商品搜索域设计表
字段名称 字段类型 是否索引 是否存储 字段描述
id long 是 是 唯一标示
title text 是 是 标题
image keyword 否 是 商品图片
suggestion completion 是 否 自动补全提
示
categoryId long 是 否 分类 id
brandId long 是 否 品牌 id
specs nested 是 否 规格过滤项
prices long 是 是 价格
sold long 是 是 销量
updateTime Date 是 否 更新时间
设置好商品索引库结构后 ,基于 SpringBoot 编写 elasticsearch 的工具
类,将 elasticsearch 的操作封装为一个自动配置的 starter。在搜索服务中调
用该工具,将商品表中上架状态的(saleable 为 1)的商品查询出来,最后
将查询出的商品明细数据封装,并导入到 elasticsearch 索引库,这样该电商
平台的商品索引库就建立完成 。
下面以关键宇搜索为例进行详细说明,关键字搜索是指用户在搜索框内输入
搜索关键字,点击搜索按钮后会将搜索结果列表展示给用户,关键字搜索类
图如图 5-9 所示。
图 5-9 关键字搜索类图
关键字搜索时序图如图 5-10 所示。
图 5-10 商品搜索时序图
与关键字搜索有关 的类包括 SearchController 类、SearchServicelmpl 类
和 Elasticsearch 工具 GoodsRepository,使用 GoodsRepository 能够对索引库
进行增删改查 。用户在 门户首页或搜索页的搜索框内输入搜索关键字,点
击搜索 ,前端会发送搜索请求到服务端,服务端接收请求,调用
SearchController 类的 search()方法并将搜索参数传递给该方法 ,接着
SearchController 类的 search()方法会调用 SearchService 的 search()方法并把
关键宇参数传递给该方法 ,在 SearchService 的 search()方法中,首先根据
关键字参数添加查询条件,再判断是否有过滤条件、排序条件、分页条件、
高亮条件等。调用 GoodsRepository 的 queryForPage()方法 将符合条件的结
果查询出来 。最后将结果封装到 Mono这个异步对象中返回到
前端页面 。
商品搜索界面如图 5-11 所示:
图 5-11 商品搜索界面
5.2.2.用户注册功能
新用户可以通过注册成为会员,注册成功后可以登录用户中心对个人信
息进行查询和修改。本小节首先介绍用户中心的类图,然后分别介绍用户注
册和个人信息 维护功能的具体实现过程 。用户中心类图如图 5-12 所示。
图 5-12 用户中心类图
如用户中心类图所示 ,主要包括的类分别是 UserController 类、
UserService 类和 UserMapper 接口 。
UserController 类是控制层类,负责业务模块流程的控制 ,它连接前端
和后端 ,接收前端的请求 ,并向后端发送请求。 UserService 类是服务层
实现类 ,负责用户中心各功能的具体业务逻辑实现。UserMapper 接口是用
户实体类的数据库接口,在 UserMappe 接口中定义了若干方法对数据库中
的用户表 tb_user 进行操作 。
接下来分别介绍用户注册和登录的 具体实现过程 。
(1)用户注册
用户注册时需要在注册页填写相关的注册信息 ,包括用户名 、登录密
码 、手机号和短信验证码 。用户首先需要填写用户名、登录密码和手机号,
然后点击获取验证码就能在于机上获取到短信验证码 ,最后输入短信验证
码再点击注册就能完成用户注册功能 。
用户注册时序图如图 5-13 所示。
33
图 5-13 用户注册时序图
完成用户注册可以分为两个步骤,第一步是获取动态验证码 ,第二步
是填写 验证码进行注册 ,下面分别介绍两个步骤 。
第一步:在用户注册页,用户输入用户名、密码和手机号后,点击获取
验证 码按钮,就会调用 UserController 类的 sendCode()方法并接收用户输
入的手机号,该 sendCode() 方 法 会 调 用 UserService 类 的 sendCode()
方法。在 sendCode ()方法中首先随机生成一个 6 位验证码 ,然后将此验证
码以此机号为 key 存入到 Redis 中,并将该验证码发送给消息中间件
RabbitMQ ,最后短信微服务接收到来自 RabbitMQ 的短信验证码并调用阿
里大于短信发送平台将该验证码发送到用户的手机上。
第二步 :用户手机收到短信验证码后 ,将验证码填入到注册页 ,点
击注册, 会调用 UserController 类的 register()方法并接收用户输入的 账
户、密码、手机号和短 信 验 证 码 。UserController 类的 register ()方法首
先会调用 UserServiceImpl 类的 register()方法。register()方法中,将 Redis
中存有的验证码与用户输入的验证码进行匹配,如果不一致则提示用户输入
的验证码有误;如果一致将用户注册信息添加到数据库表 tb_user 中。
用户注册界面如图 5-14 所示。
图 5-14 用户注册页面
第六章 系统测试
系统测试是整个项目开发生命周期的一个重要环节,也是系统上线之前
必须要完成的步骤。测试的目的是对系统进行整体检验,发现系统设计中存
在的 bug 。通过系统测试 ,开发人员能够及时修复和升级 bug,确保系统
在上线运营时能够完成用户的各项业务需求,进而提升用户体验和用户粘性。
本章主要从系 统功能性测试和系统非功能性测试两方面进行说明 。
6.1 功能性测试
系统功能性测试包括运营商后台功能测试 、商家后台功能测试和前台
功能测 试三个部分。本小节将结合测试用例分别对三个部分进行说明。
6.1.1 商家后台功能测试
表 6-1 是针对商家后台的测试用例 ,主要验证商家登录 、商家登出和
商品管理功能。
表 6-1商家后台测试用例表
用例编号 用例名称 测试流程 预期结果 测试结果 结论
T1 商家登录 在商家后台
6.1.2 前台功能测试
前台功能测试包括门户首页功能测试 ,商品搜索功能测试 、商品详情
页功能 测试、用户中心功能测试 、单点登录功能测试、购物车模块功能测
试和秒杀频道 功能测试 。由于篇幅原因,在此不再全部列出前台全部模块
的功能测试用例 ,以 商品搜索功能测试、用户中心功能测试和购物车模块
功能测试为 例进行说明。
表 6-2 是针对商品搜索的测试用例 ,主要验证关键宇搜索 、条件过滤筛选
和商品排序功能 。
表 6-2 搜索功能测试用例表
用例编号 用例名称 测试流程 预期结果 测试结果 结论
6.2 非功能性测试
系统测试不仅包含功能测试 ,还需要进行非功能性测试,非功能性测
试主要为系统性能测试,
性能测试也可以称作压力测试。由于该电商平台需要实现高并发特性,
所以需要对系统进行压力测试以此检验该电商平台是否能够达到预期的并
发要求。
压力测试需要通过压力 测试工具模拟用户真实的并发请求 ,本文设计
的电商平台使用 JMeter 进行压力测试问,JMeter 是阿帕奇开发的基于
Java 的开源压力测试软件,JMeter 设计之初被用于 Web 应用测试 ,后续
经过扩展也被用于其他领域测试。使用 JMeter 不但可以对 Java Servlet 、
Java 对象、数据库和 FTP 服务器等静态资源和动态资源进行测试,还可以
通过模拟大量并发负载对服务器 、网络或对象的健壮性和性能进行评估 。
JMeter 的聚合报告中,主要提供平均响应时间,错误晌应率等信息。在系
统压力测试过程中,设置每秒并发量从 2000 开始 ,并以 2000 为增量逐
级递增到 12000 并发量 ,循环次数均设置为 3 次。以搜索页的压力测试
为例 ,商品搜索页
压力测试结果如表 5-6 所示。
在压力测试过程中,平均响应时间和错误响应率随着平台并发量的增加
而增加,根据表 5-6 得出并发量平均响应时间折线图如图 6-1 所示
图 6-1 并发量-平均响应时间折线图
图 6-1 中,横坐标为每秒的并发访问请求,纵坐标为平均响应时间 。
通过压力测试结果和并发量平均响应时间折线图可以得出,当并发量在
10000 以内时, 该电商平台的商品搜索页,平均响应时间在 2 秒以下,错
误率在 3%以下,当并发量突破 10000 为 12000 时,该电商平台的商品搜
索页平均响应时间己经在 3 秒以上,错误率为 5.9% 。由此可见,该平台己
经达到预期的支撑 10000 的并发访问量,在该并发量下页面平均响应时间
小于 2 秒,响应错误率低于 3%的需求。
6.3 本章小结
本章主要介绍了该电商平台的系统测试 ,包括功能测试和非功能测试。
功能测试又包括商城后台功能测试和前台功能测试。非功能测试主要为系统
性能测试,目的是检验该电商平台是否能够达到预期的并发需求。
结束语
本软件的设计目的是使得中小企业可以直接对外提供线上销售服务,解
决从 0 到 1 的问题。通过这几个月的毕业设计,我学到很多以前没有学到的
WEB 开发技术,在软件工程学上更是取得了很大的进步,同时也基本完成了
商城的设计与开发。系统服务器端,我采用 MySQL Server5.5 数据库系
统,Elasticsearch 和 MVC 结构来完成系统,客户端采用浏览器来商品管理
以及搜索下单全过程。这种模式的系统运用方便、操作简单,效率很高。现
阶段实现了用户注册、商品管理、规格参数管理、分类管理、品牌管理、索
引库管理,搜索展示,搜索提示,加入购物车,下单支付等重要功能。
系统其他功能方面,本系统提供了一些常用的数据操作,可以比较完整
的对数据库进行增、删、查、改,但缺乏必要的统计与分析功能,如销售数
据统计分析等。
在整个过程中使我真正体会到了需求分析与总体设计的重要性。由于自
身原因和时间的关系,放弃了一些设想和功能。但是总的来说,这次的毕业
设计对我来说是一次非常难得的锻炼机会。毕业设计使我对几年来所学的专
业课知识得到了融会贯通,得到了比任何一门课都大的提高和进步。
参考文献
[1] [美]Y.Daniel Liang. Java 语言程序设计,北京:机械工业出版社,2009:
113-150
[2] 厉小军. Web 编程技术,北京:机械工业出版社,2009:229-348
[3] 贺智明 等. JavaEE 企业应用开发技术,北京:清华大学出版社,
2012:31-106
[4] 朱欣娟 等. 信息系统分析与设计,西安:西安电子科技大学出版社,
2008:73-94
[5] 江开耀. 软件工程与开发技术,西安:西安电子科技大学出版社,2009:
[6] 毋国庆 等. 软件需求工程,北京:机械工业出版社,2010:38-93
[7] 萨师煊 等. 数据库系统概论,北京:高等教育出版社,2008:198-231
[8] 王晓悦. Java-JDK、数据库系统开发、Web 开发,北京:人民邮电出版
社,2007:479-512
[9] 吴亚峰 王鑫磊. NetBeans-Java 桌面、Web 与企业级程序开发详解,北
京:人民邮电出版社,2007:379-407
[10] 鲁晓东等. JSP 软件工程案例精解[M],北京:电子工业出版社,2005.
[11] 夏欣等.Java 面向对象编程指南,电子工业出版社,2005
[12] [美]万普勒 著,王海鹏 译.Java 与 UML 面向对象程序设计,北京:
人民邮电出版社,2002
致 谢
首先感谢我的指导老师 xx 老师,在 x 老师的指导和帮助下才完成了毕业
设计和论文工作,x 老师认真负责的工作态度,严谨治学的精神和深厚的理论
水平都使本人受益匪浅,x 老师无论在理论上还是在实践中,都给予了本人很
大的帮助,对本人的毕业设计任务和论文书写提出了许多建设性建议,给了本
人极大的鼓励和帮助,在这里本人向他表示真诚的感谢!
还要衷心感谢计算科学学院全体老师四年来对本人的教诲,他们不仅使本
人的知识能力得到提高,更重要的是教会了本人怎样提高自己的自学能力,怎
样去适应社会。
祝全体老师身体健康、心想事成,愿母校明天更辉煌!