摘 要
随着微信小程序的使用越来越广泛,在传统的商业模式中,对于各类生活日常商品,人们习惯于到各种商家店铺购买。然而在快节奏的新时代中,人们不一定能为购买商品腾出时间,更不会耐心挑选自己想要的商品。所以设计一个电商微信小程序,既是迎合电子商务的大潮流,也是传统商品行业的一个突破口,可以给传统商品行业带来转变和机遇。电商微信小程序主要是提供给用户一个购买商品的平台,通过价格优势吸引众多消费者来购买,实现正常运营。本文主要是采用Java语言、SSM框架、Mysql数据库、Tomcat服务器作为开发平台,系统采用B/S结构进行开发,完成一个电商微信小程序。目标是实现一个以销售为中心的计算机系统,构建用户信息与账号,账号与订单信息有机结合的业务系统。
关键词:电商微信小程序;购物系统;Mysql数据库
ABSTRACT
With the increasingly widespread use of WeChat mini programs, in traditional business models, people are accustomed to purchasing various daily goods from various merchant stores. However, in the fast-paced new era, people may not be able to make time for purchasing goods, let alone patiently choose the products they want. So designing an e-commerce WeChat mini program not only caters to the trend of e-commerce, but also serves as a breakthrough point for the traditional commodity industry, which can bring transformation and opportunities to the traditional commodity industry. The e-commerce WeChat mini program mainly provides users with a platform to purchase goods, attracting many consumers to make purchases through price advantages, and achieving normal operation. This article mainly uses Java language, SSM framework, MySQL database, and Tomcat server as the development platform, and the system adopts B/S structure for development, completing an e-commerce WeChat mini program. The goal is to achieve a sales centric computer system, building a business system that organically combines user information and account information, as well as account and order information.
Key words:E-commerce WeChat mini program; Shopping system; MySQL database
目 录
(一) 开发技术 2
(二) mysql数据库 2
(三) B/S结构 2
(四) SSM框架 2
(五) 微信开发者工具 3
各种物品是人们日常的消费品,物品供应与消费者需求有着极为重要的关系。社会压力造成工作日渐繁忙,时间观念越来越强,简化事务、方便消费,使网络化销售逐渐成为消费社会化的需要。同时,由于人们生活消费质量的不断提高,各种物品消费需要由“数量型”向“质量型”转变,物品消费的消耗性、多样化也成为一种消费需求。
这种消费型社会的大趋势已为网络销售业发展提供了良好商机。据了解,目前内陆各省大多有销售企业在运转,起步时间都不长,而且上规模的正规企业也不是很多,部分仍处于买卖双方谈妥价格后的私下交易。而在广东、山东、北京、上海、天津等地已有大规模的商品销售中心出现,特别是大城市中面向家庭客户的商品销售服务已蔚然兴起。
然而,随着业务量的不断增长,众多企业目前都多多少少的面临着一个严峻的问题,就是由于缺乏信息化的支持,从商品生产到客户下单,再到物流运输的整个业务流程都缺乏有效管理,作业方式较为原始,管理成本不断攀升,而且差错率难以控制。本系统是针对企业面临的困境与现状,为方便消费者的购买以及将线上与线下更好的结合在一起,利用相关的技术所设计出的。
随着我国电子商务的迅速发展,网络销售已形成了一定的规模并取得较大的成功,其对企业的效益越来越突出。淘宝、京东、亚马逊、苏宁易购、国美等大型电子商务企业的崛起,由此可以看出网络销售的巨大潜力和崭新的盈利模式。网络销售可以加快产品的发布和宣传,使交易过程简化、自动化,销售方只需要把产品交给物流行业运作即可,省去传统交易模式的繁琐。在空间上可以减少店铺租金的支出,不用频繁的进货、卸货、装货以及上架产品,侧面上减少了实体店的数量,为目前堵塞的城市现状给予一定的缓解。
但是,目前网络销售在实践过程存在着部分问题:
(1)关于电子商务的法律法规不完善。无良商家肆无忌惮的通过网络售卖假冒伪劣产品,以假乱真,欺骗消费者。
(2)网络安全技术人才紧缺。目前,很多销售系统被黑客攻击甚至偷取信息、钱财等案件时有发生。
(3)网络宣传不到位。目前很多企业开通了网络销售系统,但在消费者中知名度不高。
对于典型的数据库系统,尤其是对于像电商微信小程序这样的数据流量特别大的网络系统,必须要满足使用方便、操作灵活等要求。本系统在设计时应该满足以下几个目标
(1)采用人机对话的操作方式,界面美观、友好,信息查询灵活、方便,数据存储准确、安全可靠;
(2)全面展示所有商品,并可展示主要商品;
(3)便于顾客快捷地进行商品信息查询;
(4)用户可以随时修改自己的基本资料;
(5)实现下单的功能;
(6)顾客可以随时查看自己的订单信息;
(7)对客户输入的数据,系统进行严格的数据检验,尽可能排除人为的错误;
(8)系统最大限度地实现了易维护性和易操作性;
(9)系统运行稳定、安全可靠。
本文具体内容包括:绪论、系统采用的关键技术、系统分析、系统设计、系统实现和系统测试。本文着重描述了系统的组成与结构,阐述了系统的设计方案、实现方法以及所采用的开发工具和相关技术,另外,重点剖析了部分环节的开发过程。本系统在一定的环境下对系统的重要模块进行了模拟测试,证实了系统的可用性、可靠性。
(一)开发技术
本系统前端部分基于MVVM模式进行开发,采用B/S模式,后端部分基于Java的ssm框架进行开发。
前端部分:前端框架采用了比较流行的渐进式JavaScript框架Vue.js。使用Vue-Router和Vuex实现动态路由和全局状态管理,Ajax实现前后端通信,Element UI组件库使页面快速成型,项目前端通过栅格布局实现响应式,可适应PC端、平板端、手机端等不同屏幕大小尺寸的完美布局展示。
后端部分:采用ssm作为开发框架,同时集成MyBatis、Redis等相关技术。
(二)mysql数据库
MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言。因为其自身的功能相当强大,目前已成为最为流行的数据库软件之一。
MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
(三)B/S结构
系统计划采用BS模式,是因为比传统的C/S结构具有明显的优越性。B/S模式不需要每台PC客户机都进行部署,只需要部署服务器端,维护费用低。对客户端几乎没有要求,在PC机或者手机上都可以通过浏览器登录。
(四)SSM框架
SSM即SpringMVVM+Spring+MySQL,这三个框架有各自最独有的优势,那么将它们组合在一起能够碰撞出很强的火花。设计者在不需消耗大量功夫,能做出Web应用程序,而且这个程序还具有层次清晰、升级更新操作不影响正常使用的、允许多次使用的特点。这个复合框架形成一个有着结构完整、功能强大和结构良好的体系:SpringMVVM使各板块分离,Spring使开发更灵活方便,让开发者直接对对象进行操纵,各层次分工明细,并实现各个层次间的解耦,让代码更加的灵活精简。这个框架使程序员能够规避在开发时期避免个别错误导致整体被破坏,也能在后期应对客户对产品提出的新需求。
- 微信开发者工具
微信开发者工具现在已经被小程序开发团队开发运行,目前微信开发者工具任然在不断的完善中,在开发小程序时经常要不断的更新。可以使用微信扫码登陆开发者工具,开发者工具将使用这个微信帐号的信息进行小程序的开发和调试。
机型选择:小程序以智能手机的屏幕尺寸为设计标准,进行切图。
预览界面:写好视图布局后点击编译,用来刷新视图界面。
控制台:方便调试打印输出信息。
上传代码:上传到腾讯服务器,提交审核必经步骤。上传代码时可以填写版本号和备注信息。
资源文件:一般可以在资源文件进行对应项目的文件目录的断点调试。
显示远程调试:手机端和PC端开发工具联调对用户而言是非常实用的。
本地数据存储:显示的是本地存储的数据。
视图调试:标组件以子父层级结构呈现,方便调试。
微信限制在2M 以内的代码体积;开发中一般不校验合法域名信息;小程序后台要做配置服务器域名。
以上就是在开发过程中微信开发者工具常用到的功能,微信开发者工具也在不断的完善。
本系统操作简单,易理解。电商微信小程序与大部分电子商务系统的操作流程类似,避免了用户学习使用系统的时间和负担。
3.1.1操作可行性
本系统使用的是现流行的开发语言,即Java技术。同时所有的信息都是以网页的形式展示,系统中的信息都可以在后台操作数据库达到数据更新的效果。用户只需要会计算机的基本操作或者会上网就可以使用本系统,系统管理员只需要懂得文件上传,处理文本即可操作管理后台。系统布局较简单,功能操作不复杂,完全符合现代市场需求。因此本系统具有操作可行性。
3.1.2技术可行性
本系统在Windows7开发环境下,利用Myeclipse10开发工具,并使用Mysql作为数据库管理系统来实现系统的各种功能。Mysql属于主从式的数据库服务器这也是主从式数据库服务器的特点,服务器本身重在数据的管理,为用户端应用程序提供一致的接口。可以提高系统的性能,降低它的局限性。
3.1.3经济可行性
顾客可以直接在小程序上购买商品,同时计算机的价格十分低廉,性能却有了长足的进步。而此系统的开发可以有效的提高工作效率,降低管理成本,节省管理费用,为企业的工作效率带来了一个质的飞跃。因此,本系统在经济上是完全具有可行性的。
通过本系统,卖家节省了用于交易场所、服务质量、维护商铺杂支开销等方面的投入,从而降低了价格;买家方面,不仅节约了时间成本,同时降低了购买成本,可以“货比三家”地随意挑选性价比高的产品。加快了交易和货币流通速度,而进而推动经济的增长。
根据条件需要,系统结构主要由两大用户组成。一是用户(系统用户、商户、快递),二是管理员用户。
1用户登录及身份要求
验证用户、管理员的信息
2本系统销售功能需求
允许用户在线留言。
允许用户在线进行问题咨询。
允许用户查询商品的信息。
允许用户对购买订单的管理。
自动生成订单。
用户在线支付订单费用。
买家选择商品,进行购买,填写发货地址、联系电话等信息。
用户可以查看物流详情进行快递联系。
用户可以在线提交商品售后信息。
3本系统后台管理功能需求
对商品信息的管理(添加、删除,修改,查询)。
对用户订单的管理(删除,修改,查询)。
对商品类别管理(添加、删除、修改商品类别)。
物流信息、咨询信息、售后信息进行管理
1.下图所示描述管理员的用例。
![](https://i-blog.csdnimg.cn/blog_migrate/56457c11062a3ce0f5400e1328962149.png)
2.下图所示为用户用例图。
![](https://i-blog.csdnimg.cn/blog_migrate/909ac6193ff81b8b36de65eb40f0626f.png)
数据流图的设计主要是由于系统目前功能还没有确定,可以先描述可能要使用到的功能内容,并且向用户了解“系统从外界接受什么数据”和“系统向外界送出什么数据”等信息,根据用户所给的答复进行设计数据流图。
如下为系统的0层数据流图,系统用户分为管理员和普通用户。
![](https://i-blog.csdnimg.cn/blog_migrate/c7d64628d6779c0351ca2d72798662fb.png)
图3-3系统数据流图(0层)
如下图所示为系统1层数据流图。
![](https://i-blog.csdnimg.cn/blog_migrate/d4506a8789393e27b7e3e7de7e2124f1.png)
电商微信小程序第二层数据流图主要详细反应各功能模块对应的操作与数据进行交互的原理。并且更详细的显示出各角色对功能模块操作的数据流向,让开发人员能了解该系统的开发方向,能够更准确的开发出系统模型。
将商品信息维护进行细化得到商品信息管理二层数据流程图,如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/a9643db9b8d3ce9b089aaa9bf277358d.png)
图3-5商品管理数据流图(2层)
将订单信息管理进行细化得到订单信息管理二层数据流程图,如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/d6e6ae7206e569a30c7dd485581a3052.png)
图3-6订单管理数据流图(2层)
1.数据存储描述
下表描述了用户信息的数据流、数据来源、数据去向和数据流组成的词条。
数据流 | 用户信息 |
数据流来源 | Mysql数据库中用户信息表,用户详细信息表 |
数据去向 | 系统界面,用户信息管理界面 |
数据流组成 | 用户名、用户密码、添加时间、编号 |
下表描述了购买订单信息的数据流、数据来源、数据去向和数据流组成的词条。
数据流 | 购买订单信息 |
数据流来源 | Mysql数据库中购买订单表,购买订单详细信息表 |
数据去向 | 购买订单界面 |
数据流组成 | 购买订单ID、用户ID、商品ID、数量 |
下表描述了订单信息的数据流、数据来源、数据去向和数据流组成的词条。
数据流 | 订单信息 |
数据流来源 | Mysql数据库中订单表,订单详情表 |
数据去向 | 用户订单界面,订单管理界面 |
数据流组成 | 用户ID、订单ID、商品ID、下单时间、订单金额 |
下表描述了商品管理的数据流、数据来源、数据去向和数据流组成的词条。
数据流 | 商品信息 |
数据流来源 | Mysql数据库中商品表、商品类别表 |
数据去向 | 商品查询界面、商品详情界面、购买订单界面、商品管理界面 |
数据流组成 | 商品名、商品价格、库存数量、商品类别 |
下表描述用户通过输入用户名和密码进行身份验证处理,验证成功后将返回的信息显示在界面上。
处理逻辑名称 | 用户身份验证 |
简述 | 检查输入信息的合法性 |
输入的数据流 | 用户名+密码 |
处理过程 | 根据输入的用户名和密码,检索用户,显示查询信息 |
输出的数据流 | 用户信息、商品信息 |
下表描述用户成功登录系统后通过用户名查询物流信息,根据查询后返回的数据显示在界面上。
处理逻辑名称 | 物流信息查询 |
简述 | 检查输入信息的合法性 |
输入的数据流 | 用户名或物流状态 |
处理过程 | 登录成功的用户,通过用户名查询用户订单的物流详情。 |
输出的数据流 | 用户物流信息 |
下表描述用户成功登录系统后可以添加咨询,添加后,重新查询咨询表,返回的咨询数据显示在界面上。
表3-7咨询信息添加
处理逻辑名称 | 咨询信息添加 |
简述 | 检查输入信息的合法性 |
输入的数据流 | 咨询信息 |
处理过程 | 登录成功的用户,往数据库添加一条咨询信息数据。 |
输出的数据流 | 咨询商品信息 |
下表描述管理员用户成功登录系统后,购买商品,填写订单收货人、收货地址、联系电话等,生成购买订单后,重新查询订单表,返回的订单数据显示在界面上。
表3-8订单生成
处理逻辑名称 | 订单生成 |
简述 | 检查输入信息的合法性 |
输入的数据流 | 订单信息 |
处理过程 | 登录成功的用户,往数据库添加一条订单信息数据。 |
输出的数据流 | 订单信息 |
本系统的设计是基于Java技术+Mysql数据库+Tomcat服务器的方式设计,以Myeclipse10为开发工具,并运用Photoshop CS6技术美化网页,辅之以CSS技术。本系统使用的角色主要有系统管理员和系统用户、商户用户、快递用户,系统分为前台和后台,。
系统功能结构图如下所示。
![](https://i-blog.csdnimg.cn/blog_migrate/78959380621242941c245f068af1244c.png)
图4-1系统功能结构图
1.用户登录模块:确保用户注册信息的真实度是提高系统效率和盈利的重要因素。真实的用户才能带来价值,注册是保证真实用户使用系统主要业务的第一步,通过对用户注册信息的审核,可防止机器注册。使用现如今较为流行的管理员进行账号激活的验证方式,对用户注册信息进行过滤,未激活用户信息将不能使用系统主要功能。
如下图所示为用户登录流程图。
![](https://i-blog.csdnimg.cn/blog_migrate/2457121cbb5cd3aeff173d1cb6d0031c.png)
图4-2用户登录流程图
2.商品浏览模块:没有登录的用户和登录的用户都可以在系统前台进行商品浏览,用户可以查看商品的详细信息和选择相应的商品类别进行该类别下的商品查看,用户还可以通过商品名称的关键字进行搜索。
如下图所示为商品浏览流程图。
![](https://i-blog.csdnimg.cn/blog_migrate/cf2aba262472baeeeb3f97ef241cc190.png)
图4-3商品浏览流程图
3.订单模块:用户购买商品后,填写收货地址、收货人、电话等信息,生成订单信息,管理员可以对订单进行维护管理。
如下图所示为订单管理流程图。
![](https://i-blog.csdnimg.cn/blog_migrate/846dc7b886db1a851b888df4fd33b7d2.png)
图4-4订单管理流程图
5.用户管理模块
系统管理员可以对用户信息进行增、删、改、查的操作。
4.3.1概念设计
本系统的E-R图表现了系统中各个实体之间的联系,经过分析,系统的实体有商品、商品类别、用户等。
商品信息的实体图如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/639371cbee4581ba30697c55448ce610.png)
图4-5商品信息实体图
商品类别实体图如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/8201ad7dbc91cec2ef7e5726dc866d06.png)
图4-6商品类别信息实体图
订单信息实体图如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/0c37e5eb4c07427a000db94c4e0227d3.png)
图4-7订单信息实体图
物流信息实体图如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/82f1c2ab5a987e638e32d7050d541e9d.png)
图4-8物流信息实体图
系统总体的实体图如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/4f8cd6c738c41a14dc1ba3fdf2f38348.png)
4.3.2表设计
数据库表设计:经过前期的需求分析、可执行分析、数据流分析等各个流程分析,结合软件工程的高内聚、低耦合规则,并考虑到以后的程序功能扩展,设计如下几张表。
表after_sales_information (售后信息)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | after_sales_information_id | int | 10 | 0 | N | Y | 售后信息ID | |
2 | order_number | varchar | 64 | 0 | Y | N | 订单编号 | |
3 | store_name | varchar | 64 | 0 | Y | N | 店铺名称 | |
4 | merchant_users | int | 10 | 0 | Y | N | 0 | 商户用户 |
5 | product_number | varchar | 64 | 0 | Y | N | 商品编号 | |
6 | product_name | varchar | 64 | 0 | Y | N | 商品名称 | |
7 | user_information | int | 10 | 0 | Y | N | 0 | 用户信息 |
8 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
9 | contact_number | varchar | 64 | 0 | Y | N | 联系电话 | |
10 | purchase_quantity | varchar | 64 | 0 | Y | N | 购买数量 | |
11 | after_sales_type | varchar | 64 | 0 | Y | N | 售后类型 | |
12 | after_sales_reasons | text | 65535 | 0 | Y | N | 售后原因 | |
13 | merchant_review | varchar | 64 | 0 | Y | N | 商户审核 | |
14 | merchant_response | text | 65535 | 0 | Y | N | 商户回复 | |
15 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
16 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
17 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表consultation_information (咨询信息)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | consultation_information_id | int | 10 | 0 | N | Y | 咨询信息ID | |
2 | consultation_title | varchar | 64 | 0 | Y | N | 咨询标题 | |
3 | store_name | varchar | 64 | 0 | Y | N | 店铺名称 | |
4 | merchant_users | int | 10 | 0 | Y | N | 0 | 商户用户 |
5 | product_name | varchar | 64 | 0 | Y | N | 商品名称 | |
6 | user_information | int | 10 | 0 | Y | N | 0 | 用户信息 |
7 | consultation_content | text | 65535 | 0 | Y | N | 咨询内容 | |
8 | merchant_response | text | 65535 | 0 | Y | N | 商户回复 | |
9 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
10 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
11 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表express_contact (快递联系)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | express_contact_id | int | 10 | 0 | N | Y | 快递联系ID | |
2 | order_number | varchar | 64 | 0 | Y | N | 订单编号 | |
3 | store_name | varchar | 64 | 0 | Y | N | 店铺名称 | |
4 | product_name | varchar | 64 | 0 | Y | N | 商品名称 | |
5 | user_information | int | 10 | 0 | Y | N | 0 | 用户信息 |
6 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
7 | contact_number | varchar | 64 | 0 | Y | N | 联系电话 | |
8 | shipping_address | varchar | 64 | 0 | Y | N | 收货地址 | |
9 | express_delivery_users | int | 10 | 0 | Y | N | 0 | 快递用户 |
10 | express_content | text | 65535 | 0 | Y | N | 快递内容 | |
11 | customer_response | text | 65535 | 0 | Y | N | 客户回复 | |
12 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
13 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
14 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表express_delivery_users (快递用户)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | express_delivery_users_id | int | 10 | 0 | N | Y | 快递用户ID | |
2 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
3 | user_gender | varchar | 64 | 0 | Y | N | 用户性别 | |
4 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
5 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
6 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
7 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表hits (用户点击)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | hits_id | int | 10 | 0 | N | Y | 点赞ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
表logistics_information (物流信息)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | logistics_information_id | int | 10 | 0 | N | Y | 物流信息ID | |
2 | order_number | varchar | 64 | 0 | Y | N | 订单编号 | |
3 | store_name | varchar | 64 | 0 | Y | N | 店铺名称 | |
4 | merchant_users | int | 10 | 0 | Y | N | 0 | 商户用户 |
5 | product_name | varchar | 64 | 0 | Y | N | 商品名称 | |
6 | user_information | int | 10 | 0 | Y | N | 0 | 用户信息 |
7 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
8 | contact_number | varchar | 64 | 0 | Y | N | 联系电话 | |
9 | shipping_address | varchar | 64 | 0 | Y | N | 收货地址 | |
10 | express_delivery_users | int | 10 | 0 | Y | N | 0 | 快递用户 |
11 | logistics_status | varchar | 64 | 0 | Y | N | 物流状态 | |
12 | logistics_description | text | 65535 | 0 | Y | N | 物流描述 | |
13 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
14 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
15 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表merchant_users (商户用户)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | merchant_users_id | int | 10 | 0 | N | Y | 商户用户ID | |
2 | store_name | varchar | 64 | 0 | Y | N | 店铺名称 | |
3 | merchant_name | varchar | 64 | 0 | Y | N | 商户姓名 | |
4 | merchant_gender | varchar | 64 | 0 | Y | N | 商户性别 | |
5 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
6 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
7 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
8 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表order_information (订单信息)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | order_information_id | int | 10 | 0 | N | Y | 订单信息ID | |
2 | order_number | varchar | 64 | 0 | Y | N | 订单编号 | |
3 | store_name | varchar | 64 | 0 | Y | N | 店铺名称 | |
4 | merchant_users | int | 10 | 0 | Y | N | 0 | 商户用户 |
5 | product_number | varchar | 64 | 0 | Y | N | 商品编号 | |
6 | product_name | varchar | 64 | 0 | Y | N | 商品名称 | |
7 | commodity_price | varchar | 64 | 0 | Y | N | 商品价格 | |
8 | user_information | int | 10 | 0 | Y | N | 0 | 用户信息 |
9 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
10 | contact_number | varchar | 64 | 0 | Y | N | 联系电话 | |
11 | shipping_address | varchar | 64 | 0 | Y | N | 收货地址 | |
12 | purchase_quantity | int | 10 | 0 | Y | N | 0 | 购买数量 |
13 | total_purchase_price | varchar | 64 | 0 | Y | N | 购买总价 | |
14 | purchase_notes | text | 65535 | 0 | Y | N | 购买备注 | |
15 | order_status | varchar | 64 | 0 | Y | N | 订单状态 | |
16 | order_remarks | text | 65535 | 0 | Y | N | 订单备注 | |
17 | pay_state | varchar | 16 | 0 | N | N | 未支付 | 支付状态 |
18 | pay_type | varchar | 16 | 0 | Y | N | 支付类型: 微信、支付宝、网银 | |
19 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
20 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
21 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表product_information (商品信息)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | product_information_id | int | 10 | 0 | N | Y | 商品信息ID | |
2 | store_name | varchar | 64 | 0 | Y | N | 店铺名称 | |
3 | merchant_users | int | 10 | 0 | Y | N | 0 | 商户用户 |
4 | product_number | varchar | 64 | 0 | Y | N | 商品编号 | |
5 | product_name | varchar | 64 | 0 | Y | N | 商品名称 | |
6 | product_type | varchar | 64 | 0 | Y | N | 商品类型 | |
7 | commodity_price | int | 10 | 0 | Y | N | 0 | 商品价格 |
8 | inventory_of_goods | int | 10 | 0 | Y | N | 0 | 商品库存 |
9 | product_specifications | varchar | 64 | 0 | Y | N | 商品规格 | |
10 | product_image | varchar | 255 | 0 | Y | N | 商品图片 | |
11 | product_introduction | longtext | 2147483647 | 0 | Y | N | 商品介绍 | |
12 | hits | int | 10 | 0 | N | N | 0 | 点击数 |
13 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
14 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
15 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
16 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
5.1登录模块
一个系统最基本的功能就是登录功能,本系统可以进行系统登录的角色有系统用户、商户用户、快递用户、管理员,用户对应前台登录界面,管理员对应后台登录界面,首先进入登录页,输入用户名和密码,然后提交至服务端进行数据库数据验证,通过JavaEE逻辑代码判断数据库是否存在用户输入的这一个记录,如果存在,则判断用户身份,如果是用户,则进入用户前台,如果是管理员用户,则进入系统主页,并把用户对象存放在session中,如果不存在这样一条记录,则返回登录界面。
登录界面如下所示。
![](https://i-blog.csdnimg.cn/blog_migrate/b4fb79a208aa5c5ab11d2cf48a14a789.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c162ab405c1d0658486524f3bb6bb4a9.png)
登录关键代码如下:
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
QueryWrapper wrapper = new QueryWrapper<User>();
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
tokenService.save(accessToken);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "账号或密码不正确");
}
}
public String select(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer("select ");
sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
}
if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
}
if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
}
log.info("[{}] - 查询操作,sql: {}",table,sql);
return sql.toString();
}
public List selectBaseList(String select) {
List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
List<E> list = new ArrayList<>();
for (Map<String,Object> map:mapList) {
list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
}
return list;
}
5.3咨询信息模块
用户可以在线进行问题咨询提交店铺,咨询信息展示界面。
如下图所示为咨询信息界面。
![](https://i-blog.csdnimg.cn/blog_migrate/713fab8ae264574a9496b14bc86f386f.png)
咨询信息关键代码如下:
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
@Transactional
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
系统提供商品评论功能,在pinglunadd.jsp实现商品的评论,添加评论后,存入数据库的评论表。管理员管理商品的评论信息。
如下图所示为评论的部分界面。
![](https://i-blog.csdnimg.cn/blog_migrate/531b5ae0c610e219506e2362fe5dd426.png)
图5-4评论界面
用户可以搜索查看商品后进行商品购买,确定商品之后可以生成订单,然后支付。
如下图所示为订单信息的界面。
![](https://i-blog.csdnimg.cn/blog_migrate/34992ffaa11934201949477ff0f5e83d.png)
购买商品的关键代码:
@RequestMapping("/get_obj")
public Map<String, Object> obj(HttpServletRequest request) {
List resultList = service.selectBaseList(service.select(service.readQuery(request), service.readConfig(request)));
if (resultList.size() > 0) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("obj",resultList.get(0));
return success(jsonObject);
} else {
return success(null);
}
}
5.6系统用户管理模块
过去传统的手工登记管理系统人员信息很不方便,也很容易造成数据出错,所以本系统需要一个可以管理登记人员信息的功能,管理员登入系统,可以添加新的管理员用户,删除现有的管理员,也可以对自己的密码和管理员用户的密码进行修改。修改密码是经过跟数据库的原来的密码字段的数据进行判断,如果输入两次的新密码一致,则更新密码这属性对应的一条数据。
如下图所示为系统用户管理的部分界面。
![](https://i-blog.csdnimg.cn/blog_migrate/b55d2b1f3623242fb335ba37c790341e.png)
如下图所示为个人资料修改界面。
![](https://i-blog.csdnimg.cn/blog_migrate/8733731f03593bb6dbdbc898f8e8891f.png)
图5-7修改个人资料界面
系统用户管理关键代码如下:
public Map<String, Object> upload(@RequestParam(value = "file",required=false) MultipartFile file,HttpServletRequest request) {
log.info("进入方法");
if (file.isEmpty()) {
return error(30000, "没有选择文件");
}
try {
//判断有没路径,没有则创建
String filePath = request.getSession().getServletContext().getRealPath("\\") +"upload\\";
// String filePath = System.getProperty("user.dir") + "\\target\\classes\\static\\upload\\";
File targetDir = new File(filePath);
if (!targetDir.exists() && !targetDir.isDirectory()) {
if (targetDir.mkdirs()) {
log.info("创建目录成功");
} else {
log.error("创建目录失败");
}
}
// String path = ResourceUtils.getURL("classpath:").getPath() + "static/upload/";
// String filePath = path.replace('/', '\\').substring(1, path.length());
String fileName = file.getOriginalFilename();
int lastIndexOf = fileName.lastIndexOf(".");
//获取文件的后缀名 .jpg
String suffix = fileName.substring(lastIndexOf);
fileName = IdWorker.getId()+suffix;
File dest = new File(filePath + fileName);
log.info("文件路径:{}", dest.getPath());
log.info("文件名:{}", dest.getName());
file.transferTo(dest);
JSONObject jsonObject = new JSONObject();
jsonObject.put("url", "/api/upload/" + fileName);
return success(jsonObject);
} catch (IOException e) {
log.info("上传失败:{}", e.getMessage());
}
return error(30000, "上传失败");
}
5.7售后信息管理模块
用户可以在线进行商品售后提交,完善用户信息、联系电话、售后类型、购买数量、售后原因信息后进行提交商户,由商户进行审核处理,管理员端可以对售后信息进行管理。
售后信息提交的界面如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/bddc2d870c21a4cec00c00d930a325d6.png)
5.8商品管理模块
商品可以对商品进行增删查改的操作,这些操作将在商品管理界面进行,管理员端可以对商品信息进行管理。
如下图为商品管理界面。
![](https://i-blog.csdnimg.cn/blog_migrate/6b4409de91eaff3b8e0e220c4b5095c7.png)
商品管理关键代码如下:
@RequestMapping("/get_list")
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return success(map);
}
6.1测试目的
该系统能够完成商品管理、商品展示、物流信息管理、订单管理、售后管理、快递联系管理等功能,做到所开发的系统操作简单,尽量使系统操作不受用户对电脑知识水平的限制,符合系统可维护性,由于系统涉及的信息比较广,数据库中的数据需定期修改,系统可利用的空间及性能也随之下降,为了使系统更好地运转,系统可以对系统数据及一些简单的功能进行独立的维护及调整;符合系统开放性要求,该系统能够在开放的硬件体系结构中运行,并且能与其他系统顺利连接。
6.2测试用例
1.注册测试
字段名称 | 描述 |
测试项 | 首页注册功能测试 |
输入数据 | 1、输入正确的邮箱、用户名、密码、确认密码、以及验证码之后点击“注册”按钮 2、输入错误的用户名或密码、邮箱、验证码等,单击“注册”按钮 3、不输入邮箱、用户名、密码、确认密码、以及验证码之后点击“注册”按钮 |
预计输出数据 | 1、用户能正确注册账号,成功插入数据库用户的账户资料,提示注册成功。 2、无法注册用户信息,注册失败。 3、无法注册用户信息,注册失败。 |
使用上述测试用例对前台首页注册界面进行测试,当在输入正确的邮箱、用户名、密码、确认密码、以及验证码之后,系统将弹出注册成功信息提示对话框。
使用上述测试用例对前台首页注册界面进行测试,当在输入错误的用户名或密码、邮箱、验证码之后,系统将提示错误。
使用上述测试用例对前台首页注册界面进行测试,当在不输入用户名、密码、邮箱、验证码之后,点击注册按钮。
2.登录界面进行测试
测试项 | 首页登录功能测试 |
输入数据 | 1、输入正确的用户名和密码,单击“登录”按钮 2、输入错误的用户名和密码,单击“登录”按钮 3、不输入用户名和密码,单击“登录”按钮 |
预计输出数据 | 1、数据库中存在的用户能正确登录,。结果弹出主界面。 2、错误的或者无效用户登录,登录系统失败。 3、输入用户名或密码信息为空,登录系统失败。 |
3.商品管理进行测试
名称:用户管理测试 目的:测试商品管理界面
内容:口令的输入,合法性检查,合理性检查,界面的显示控制。
下表描述了商品表中目前所存在的记录。
商品名 | 商品规格 | 商品价格 | 商品状态 |
A | A | 389 | 上架 |
B | B | 249 | 上架 |
C | C | 322 | 下架 |
D | D | 168 | 上架 |
添加时应注意事项:
管理员添加商品时必须添加已存在的商品类别,若该商品不属于现有的所有类别,则应该先添加商品类别。
下表描述了添加商品进行测试的用例,主要是为了防止添加商品时出现异常和存在的漏洞。
输入 | 输出 | ||
商品名 | 商品价格 | 商品图片 | |
空 | 参数错误 | ||
空 | 参数错误 | ||
空 | 请选择上传图片 | ||
A | 1 | a.jpg | 添加成功 |
4.购买商品测试
名称:购买商品测试 目的:测试购买商品界面
内容:口令的输入,合法性检查,合理性检查,界面的显示控制。
下表描述了购买商品的测试用例,防止购买时出错。
表6-7购买商品测试用例
输入 | 输出 | ||
用户ID | 商品ID | 商品数量 | |
11 | 1 | 1 | 购买商品成功 |
22 | 薯片 | 请填写商品数量 | |
33 | 薯片 | a | 购买失败 |
用户购买商品时,首先判断商品数量是否小于库存,若超出库存数量,则提示商品数量不足。
经过这几个月的设计和开发,“基于SSM的电商微信小程序”已经完成了,其功能符合设计需求,能够完成用户的注册、在线购买、商品管理、售后处理、物流信息管理、咨询信息管理、快递联系管理等功能。经过最后的使用,证明系统完全具有可行性与可扩充性。
在系统的分析阶段,主要是分析系统的需求,理解系统要完成的基本功能,找出系统的用例(Use Case)和角色(Actor),画出系统的用例模型图,用例模型是此后系统建模的基础。在用例的基础上分析顺序图和协作图,得到系统的所有对象,然后建立对象模型。抽象出系统的类,并将系统中联系紧密的类划分为若干个包,画出包图。有了这些基础,就可以将系统划分为小单元功能模块。
整个过程中,我必须认可UML统一建模语言,它让我很清晰的知道自己想做什么,想实现什么,对系统后面的代码编写起到决定性的帮助,同时经过本次系统的设计与实现,让我积累了很多经验,提高了编写程序的能力,为以后的学习和工作打下了坚实的基础。
由于时间有限,本系统还有待继续完善和改进,因此需要进一步进行分析和修改,以使其更加完善!
参考文献
- 王江霖,黄彩霞,樊旭龙.基于SSM框架的网络资源共享平台的研究与实现[J].电脑知识与技术,2021,17(28):76-78.
- 曹华山.SSM框架在Web应用开发中的设计与实现[J].无线互联科技,2021,18(11):108-109.
- 程红琳. 网上购物系统品目扩容效果几何[N]. 中国政府采购报,2021-05-18(005).
- 马君峰, 农产品自营网上购物系统智慧平台V1.0. 甘肃省,甘肃科博科技咨询有限责任公司,2021-02-01.
[5]王娟.基于Android系统的手机网上购物系统设计与实现[J].电子技术与软件工程,2021(03):43-44.
[6]韩己峰.综合性网上购物系统引领山东政府采购驶入高速路[J].中国政府采购,2020(12):39-41.
[7]袁江琛.基于MVC框架网上购物系统的设计与实现[J].信息与电脑(理论版),2020,32(20):126-128.
[8]袁江琛.Ajax+jQuery在网上购物系统购物车模块中的设计与实现[J].电脑编程技巧与维护,2020(10):34-35+68.
[9]王柯梦,王瑞平.基于B2C网上购物系统前台系统数据库设计与实现[J].广西质量监督导报,2020(09):70-71.
[10]薄志强. 基于SSM框架的网上购物系统系统的设计与实现[D].西安电子科技大学,2020..
[11]张浩. 基于网上购物系统服务对话系统的研究与实现[D].黑龙江大学,2020.
[12]孙建英.分布式、集中式、区块链技术在网上购物系统中的应用[J].商场现代化,2020(01):13-15.
[13]李颖,方浪,武瑞婵.“Free-Try”虚拟试衣在网上购物系统中的实现[J].襄阳职业技术学院学报,2019,18(06):64-66.
[14]王一凡. 基于MOT的云南移动网上购物系统O2O手机营销策略优化研究[D].云南大学,2019.
[15]布祉颖.论B2C和O2O的进口商品营销的模式——关于零始科技有限公司的零始网研究[J].现代妇女(下旬),2018(12):75-76.
[16]老潘,花椰菜.商品控的购物车[J].宠物世界(狗迷),2018(12):50-55.
致 谢
大学的学习生活总是感觉短暂的,总感到知识还没有学够,但大学毕业就在我们面前,即毕业设计即将的结束,意味着我们的大学生涯即将结束。毕业设计是我们在大学所学知识的一次总结,更是对我们过去所学知识的提炼和升华,通过毕业设计,我们认识到大学学习过程中还有那些知识没有掌握,那些知识需要我们进入深入研究。这次毕业设计让我学到了很多新的知识,研究了一些新的以前自己不熟悉的领域,使我处理问题的能力得到了一定的提升,同时也为今后的继续深造或踏入社会大门提供了很好的锻炼机会。
我也曾经沮丧过,失落过,想放弃过,可是因为你们这不厌其烦的鼓励和支持才使得我坚持了下来,这里我要对我的老师和同学们说句“谢谢你们”。因为我们的知识是有限的,所以本文将不可避免的会出现一些错误和不足之处,还请老师指正。
免费领取项目源码,请关注❥点赞收藏并私信博主,谢谢~