springboot在线订单管理系统设计与实现-附源码080941
springboot在线订单管理系统设计与实现-附源码080941
目 录
第一章 摘要
1.1 系统开发的目的与意义
从上世纪末到目前,计算机科学技术已经被尝试应用在各个职业各个领域,在商业贸易上,使用比重较高。计算机科学技术包括软件技术、网络技术、硬件技术等,越来越多的商家使用计算机来进行营业,出售、收购、宣传各类商品,各类商业系统、软件解放了商家的双手,使商家把利益最大化,因此计算机技术在商业领域中占非常重要的地位。电子商务交易是卖家卖出东西,买家得到东西的过程,同时推广推销产品,为顾客提供购买服务。卖家不需要开店费用,节省了很多费用,从而将精力人力投入在销售质量和服务上。
在线订单管理系统采用Java编程语言,结合前段界面和MVVM技术,在Myeclipse编辑器和MySQL数据库上设计并实现的。目的在于呈现一个完整的交易系统,供各种用户使用,系统着重实现了商品发布、出售、交易、售后的功能。
1.2系统用户和功能
使用该系统,系统分为前台和后台,前台为普通用户,后台由管理员使用,但也可以用来登录普通用户,前台功能模块和后台功能模块可以细分为各种功能模块。
1.前台系统功能模块分为:
用户注册模块:要求新用户可以在系统前台注册,注册信息可以保存在数据库中,后台管理员审核注册的用户,防止一些违规注册,注册后即可登录系统前台。
商品展示模块:通过主要商品和商品类别展示系统的所有商品;
订单模块:要求购买商品的用户可以登录后在线购买,在线购买则需用户填写购买信息,并提交订单将信息展示在后台。
用户购买模块:跟淘宝、京东等大型电子商务网站一样,将商品放入用户购买记录,从而管理用户购买记录里的商品。
订单上交模块:跟淘宝、京东等大型电子商务网站一样,确认购买记录的商品后,提交用户订单,然后确认收货地址和收货人、联系电话等,方可付款。
付款模块:用户提交订单后,确认收货地址和收货人、联系电话等信息后,方可进入付款界面,付款。
2.后台系统功能模块分为:
用户管理模块:要求用户信息可以展示在后台中,用户管理分管理员和普通用户两部分,管理员可以修改管理员的名字和密码,用户管理可以显示用户注册的信息、修改用户个人资料和删除用户的操作。
订单管理模块:要求用户在线购买产生的订单信息可以展示在后台,卖家可以对订单信息进行标记审核,表示已接单,如果该订单过期或者迟迟没付款,也可以删除该订单的信息。
商品管理模块:要求商品信息可以展示在后台中,卖家可以对商品进行修改操作,修改后的商品替代原有的,并可以展示在前台中。
资讯管理模块:要求资讯信息可以在展示后台中,展示分二部分信息,分别购物需知和公告。可以进行增加、修改、删除、查看操作,然后更新到系统前台。
第二章 可行性 分析
2.1 业务流程分析
系统业务流程分析:
根据系统的功能需求,再分析该系统的业务流程,用户登录系统购买商品,先将商品加入至购买记录,然后对购买记录做调整,接着生成订单,订单生成后,在线支付金额,管理员管理商品,管理用户的订单。
系统前台业务流图如下图所示。
图
2
-1系统
前台
业务流图
系统后台业务流图如下图所示。
图
2
2
系统
后台
业务流图
2.2经济可行性
本系统最直接的目的就是让客户购买商品,为达到这一理念,首先设计了平台提供给用户购买商品,系统还提供清新的界面来吸引用户眼球。使用本系统可以直接为用户提供方便,不需要花太多的时间、精力、经费去宣传商品。系统直接向用户展示商品信息,让用户随心选购,放心使用。整个系统只需要后台管理员操作和配送员,比起传统的商品销售方便、简单、人员需求少,可以为企业节省开支,节省人力资源。系统为用户提供留言回馈让用户对商家服务满意,从而为商家增加客户,扩大市场。系统集多功能与一体,系统开发却不需要企业提供太多的人力物力资源,所以该系统投入市场,可以获得良好的口碑,为企业带来经济效益,绝对有经济可行性。
2.3操作可行性
在线订单管理系统是基于B/S模式,同时所有的信息都是以网页的形式展示,系统中的信息都可以在后台操作数据库达到数据更新的效果。用户只需要会计算机的基本操作或者会上网就可以使用本系统,系统管理员只需要懂得数据的添加、删除、修改,即可操作管理后台。系统布局较简单,功能操作不复杂,完全符合现代市场需求。因此本系统可以进行开发。
第三章 需求分析
3.1功能需求
通过现实商业销售系统的调查,如淘宝网、当当网、京东等知名电子商务系统,以及从企业的实际角度出发,要求本系统具有以下功能。
- 统一友好的操作界面,保证系统的易用性,方便用户的操作;
- 具备商品信息的展示功能,方便浏览者对商品信息进行浏览与比较;
- 规范的商品分类,方便浏览者分类查找商品;
- 完善的购买功能与用户结账功能;
- 设置系统主要商品模块,使浏览者能够及时了解系统的各项动态变化;
- 订单信息查询功能、商品信息查询功能;
- 全面的后台管理功能,以方便管理员对系统信息进行更新与管理。
8.系统前台功能模块分为:
商品模块:展示系统的所有最新商品;
推荐商品模块:展示系统的所有推荐商品;
商品分类模块:通过商品分类更快找到所需的商品;
商品索引模块:输入关键词,如商品名称、商品ID、商品类别来索引商品。
购买模块:跟淘宝、京东等大型电子商务网站一样,确认购买的商品后,提交用户订单,然后确认收货地址和收货人、联系电话等,方可付款。
用户订单索引模块:对用户的已有的订单进行查看和索引。
联系客服模块:用户对有质量或者需要退换货等问题,可以发起意见反馈。
用户注册模块:浏览者可以通过注册成为用户;
用户登录模块:用户可以登录后购买想要的商品;
用户资料修改:用户可以修改自己的信息。
9.系统后台功能模块分为:
商品信息管理模块:管理各商品信息,对商品的信息进行维护,可以增加商品,修改,删除商品信息;
系统用户维护模块:包括注册用户维护和系统管理员用户维护,普通管理员能对注册用户维护,不能对系统管理员用户维护,只有超级管理员才有维护管理员的权限。
订单维护模块;对用户的交易订单进行维护,是否有刷单等不合理订单,删除不合理的订单等操作。
公告管理模块:可以管理分类信息,增加和删除资讯信息。
订单售后模块:对用户发起售后进行审核和处理,回复用户解决方案。
3.2数据 流程分析
系统的0层数据流图如下图所示。
图3-1系统数据流图(0层)
系统1层数据流图如下图所示。
图3-2系统数据数据流图(1层)
订单管理数据流图如下图所示。
图3-3订单管理数据流图(2层)
第四章 总体设计
4.1结构设计
系统分为前台和后台,前台为普通用户,后台由管理员使用,但也可以用来登录普通用户,前台功能模块和后台功能模块可以细分为各种功能模块。
1.前台系统功能模块分为:
用户注册模块:要求新用户可以在系统前台注册,注册信息可以保存在数据库中,后台管理员审核注册的用户,防止一些违规注册,注册后即可登录系统前台。
商品展示模块:通过主要商品和商品类别展示系统的所有商品;
订单模块:要求购买商品的用户可以电话购买,也可以注册登录后在线购买,在线购买则需用户填写购买信息,并提交订单将信息展示在后台。
用户购买模块:跟淘宝、京东等大型电子商务网站一样,将商品放入用户购买记录,从而管理用户购买记录里的商品。
订单上交模块:跟淘宝、京东等大型电子商务网站一样,确认购买记录的商品后,提交用户订单,然后确认收货地址和收货人、联系电话等,方可付款。
付款模块:用户提交订单后,确认收货地址和收货人、联系电话等信息后,方可进入付款界面,付款。
2.后台系统功能模块分为:
用户管理模块:要求用户信息可以展示在后台中,用户管理分管理员和普通用户两部分,管理员可以修改管理员的名字和密码,用户管理可以显示用户注册的信息、修改用户个人资料和删除用户的操作。
订单管理模块:要求用户在线购买产生的订单信息可以展示在后台,卖家可以对订单信息进行标记审核,表示已接单,并分配物流配送,如果该订单过期或者迟迟没付款,也可以删除该订单的信息。
商品管理模块:要求商品信息可以展示在后台中,卖家可以对商品进行修改操作,修改后的商品替代原有的,并可以展示在前台中。
公告管理模块:要求资讯信息可以在展示后台中,展示分二部分信息,分别购物需知和促销公告。可以进行增加、修改、删除、查看操作,然后更新到系统前台。
系统功能结构图如下所示。
图4.1 系统数据流图
4.2数据库设计
对于电子商务系统而言,为了支持更大流量的数据访问需求,桌面数据库管理系统的使用不能满足需求,安全也得不到充分的保护。因此,需要采用商业常用的企业级数据库MySQL数据库。
4.2.1 数据库物理设计
要设计数据库,需要对数据进行物理分析。
从用户的注册、登录等功能来分析需要建立用户信息表,其中包含的数据项会有用户名、密码、电话、邮箱、QQ、微信、录入时间等。
从商品的类别和商品的信息等功能来分析需要建立商品类别表和商品信息表,其中包含的数据项会有商品类别名、商品类别录入时间、商品名称、库存数量、销售价格、商品录入时间等。
系统包含用户提交的订单,所以需要订单的相关数据,如订单号,订单提交时间,订单金额等。
用户提交订单后,管理员审核订单后,这个过程需要一系列关于订单的状态数据。
系统应该要存在多个管理员管理系统,所以系统需要管理员相关的数据,如管理员账号、密码等。
4.2.2 数据库概念设计
经过数据库的物理设计后,得到如下几个概念模型,它们的ER图如下所示。
表 图4.1 系统ER图
4.2.3 数据库逻辑设计
根据本系统的实际情况,本系统的数据库命名为db,db数据库中共分为如下几张数据表。
1.商品信息表
此表用于记录系统所有商品的基本信息,是与商品相关联的商品的类别表。如下表所示。
goods | |||||
字段名称 | 类型 | 长度 | 不是null | 主键 | 字段说明 |
goods_id | mediumint | 8 | 否 | 主键 | 产品id |
title | varchar | 125 | 是 | 标题 | |
img | text | 0 | 是 | 封面图 | |
description | varchar | 255 | 是 | 描述 | |
price_ago | double | 8 | 否 | 原价 | |
price | double | 8 | 否 | 卖价 | |
customize_field | text | 0 | 是 | 自定义字段 | |
sales | int | 10 | 否 | 销量 | |
inventory | int | 11 | 否 | 商品库存 | |
type | varchar | 64 | 否 | 商品分类 | |
hits | int | 10 | 否 | 点击量 | |
content | longtext | 0 | 是 | 正文 | |
create_time | timestamp | 0 | 否 | 创建时间 | |
update_time | timestamp | 0 | 否 | 更新时间 | |
img_1 | text | 0 | 是 | 主图1 | |
img_2 | text | 0 | 是 | 主图2 | |
img_3 | text | 0 | 是 | 主图3 | |
img_4 | text | 0 | 是 | 主图4 | |
img_5 | text | 0 | 是 | 主图5 | |
source_table | varchar | 255 | 是 | 来源表 | |
source_field | varchar | 255 | 是 | 来源字段 | |
source_id | int | 10 | 否 | 来源ID | |
user_id | int | 11 | 是 | 添加人 | |
goods_type | |||||
字段名称 | 类型 | 长度 | 不是null | 主键 | 字段说明 |
type_id | int | 11 | 否 | 主键 | 商品分类ID |
father_id | smallint | 5 | 否 | 上级分类ID | |
name | varchar | 255 | 是 | 商品名称 | |
desc | varchar | 255 | 是 | 描述 | |
icon | varchar | 255 | 是 | 图标 | |
source_table | varchar | 255 | 是 | 来源表 | |
source_field | varchar | 255 | 是 | 来源字段 | |
create_time | timestamp | 0 | 否 | 创建时间 | |
update_time | timestamp | 0 | 否 | 更新时间 | |
order | |||||
字段名称 | 类型 | 长度 | 不是null | 主键 | 字段说明 |
order_id | int | 11 | 否 | 主键 | 订单ID |
order_number | varchar | 64 | 是 | 订单号 | |
goods_id | mediumint | 8 | 否 | 商品id | |
title | varchar | 32 | 是 | 商品标题 | |
img | varchar | 255 | 是 | 商品图片 | |
price | double | 10 | 否 | 价格 | |
price_ago | double | 10 | 否 | 原价 | |
num | int | 8 | 否 | 数量 | |
price_count | double | 8 | 否 | 总价 | |
norms | varchar | 255 | 是 | 规格 | |
type | varchar | 64 | 否 | 商品分类 | |
contact_name | varchar | 32 | 是 | 联系人姓名 | |
contact_email | varchar | 125 | 是 | 联系人邮箱 | |
contact_phone | varchar | 11 | 是 | 联系人手机 | |
contact_address | varchar | 255 | 是 | 收件地址 | |
postal_code | varchar | 9 | 是 | 邮政编码 | |
user_id | int | 10 | 否 | 买家ID | |
merchant_id | mediumint | 8 | 否 | 商家ID | |
create_time | timestamp | 0 | 否 | 创建时间 | |
update_time | timestamp | 0 | 否 | 更新时间 | |
description | varchar | 255 | 是 | 描述 | |
state | varchar | 16 | 否 | 订单状态 | |
order_after_sales | |||||
字段名称 | 类型 | 长度 | 不是null | 主键 | 字段说明 |
order_after_sales_id | int | 11 | 否 | 主键 | 订单售后ID |
user_name | int | 11 | 是 | 用户名 | |
order_number | varchar | 64 | 是 | 订单号 | |
after_sale_goods | varchar | 64 | 是 | 售后商品 | |
after_sales_type | varchar | 64 | 是 | 售后类型 | |
relevant_vouchers | varchar | 255 | 是 | 相关凭证 | |
after_sales_content | text | 0 | 是 | 售后内容 | |
examine_state | varchar | 16 | 否 | 审核状态 | |
examine_reply | varchar | 16 | 是 | 审核回复 | |
recommend | int | 11 | 否 | 智能推荐 | |
create_time | datetime | 0 | 否 | 创建时间 | |
update_time | timestamp | 0 | 否 | 更新时间 | |
order_shipment | |||||
字段名称 | 类型 | 长度 | 不是null | 主键 | 字段说明 |
order_shipment_id | int | 11 | 否 | 主键 | 订单发货ID |
order_number | varchar | 64 | 是 | 订单号 | |
user | int | 11 | 是 | 用户 | |
receiving_address | varchar | 64 | 是 | 收货地址 | |
contact_number | varchar | 64 | 是 | 联系电话 | |
consignee | varchar | 64 | 是 | 收货人 | |
courier_services_company | varchar | 64 | 是 | 快递公司 | |
courier_number | varchar | 64 | 是 | 快递单号 | |
receipt_or_not | varchar | 64 | 是 | 是否收货 | |
commodity_details | text | 0 | 是 | 商品明细 | |
recommend | int | 11 | 否 | 智能推荐 | |
create_time | datetime | 0 | 否 | 创建时间 | |
update_time | timestamp | 0 | 否 | 更新时间 | |
praise | |||||
字段名称 | 类型 | 长度 | 不是null | 主键 | 字段说明 |
praise_id | int | 10 | 否 | 主键 | 点赞ID |
user_id | int | 11 | 否 | 点赞人 | |
create_time | timestamp | 0 | 否 | 创建时间 | |
update_time | timestamp | 0 | 否 | 更新时间 | |
source_table | varchar | 255 | 是 | 来源表 | |
source_field | varchar | 255 | 是 | 来源字段 | |
source_id | int | 10 | 否 | 来源ID | |
status | tinyint | 1 | 否 | 点赞状态1为点赞,0已取消 | |
registered_user | |||||
字段名称 | 类型 | 长度 | 不是null | 主键 | 字段说明 |
registered_user_id | int | 11 | 否 | 主键 | 注册用户ID |
user_name | varchar | 64 | 否 | 用户名 | |
examine_state | varchar | 16 | 否 | 审核状态 | |
recommend | int | 11 | 否 | 智能推荐 | |
user_id | int | 11 | 否 | 用户ID | |
create_time | datetime | 0 | 否 | 创建时间 | |
update_time | timestamp | 0 | 否 | 更新时间 | |
shopping_mall | |||||
字段名称 | 类型 | 长度 | 不是null | 主键 | 字段说明 |
shopping_mall_id | int | 11 | 否 | 主键 | 商城ID |
brand | varchar | 64 | 是 | 品牌 | |
specifications | varchar | 64 | 是 | 规格 | |
recommend | int | 11 | 否 | 智能推荐 | |
cart_title | varchar | 125 | 是 | 标题 | |
cart_img | text | 0 | 是 | 封面图 | |
cart_description | varchar | 255 | 是 | 描述 | |
cart_price_ago | double | 8 | 否 | 原价 | |
cart_price | double | 8 | 否 | 卖价 | |
cart_inventory | int | 11 | 否 | 商品库存 | |
cart_type | varchar | 64 | 否 | 商品分类 | |
cart_content | longtext | 0 | 是 | 正文 | |
cart_img_1 | text | 0 | 是 | 主图1 | |
cart_img_2 | text | 0 | 是 | 主图2 | |
cart_img_3 | text | 0 | 是 | 主图3 | |
cart_img_4 | text | 0 | 是 | 主图4 | |
cart_img_5 | text | 0 | 是 | 主图5 | |
create_time | datetime | 0 | 否 | 创建时间 | |
update_time | timestamp | 0 | 否 | 更新时间 |
第五章 系统实现
5.1 系统功能模块
在线订单管理系统,管理员在系统首页输入账号、密码登录系统。
图5-1登录界面
5.2前台功能设计与实现
5.2.1 用户模块设计与实现
作为网上商城,必须保证用户的正确性、购物安全、有效管理用户信息,用户管理是电子商务系统的重要组成部分。它主要包括用户注册、登录和验证、用户注册数据修改和用户退出等功能。
1.注册
用户首先进入系统前台,点击用户注册链接,进入用户注册页面,用户填满表单,即可点击提交,完成注册,之后用户可以使用账号登录系统前台。
用户注册是通过userreg.jsp和yonghuzhuce_add_list.jsp等页面实现的,userreg.jsp是用户点击注册后,进入注册页面的纯静态页面,通过userreg.jsp的表单将注册数据提交到yonghuzhuce_add_list.jsp,yonghuzhuce_add_list.jsp直接操作数据库,从而实现将注册数据添加至数据库的用户表中。
用户注册界面如下图所示。
图5-2用户注册界面
用户注册代码如下:
/**
注册
@param user
@return
*/
@PostMapping(“register”)
public Map<String, Object> signUp(@RequestBody User user) {
// 查询用户
Map<String, String> query = new HashMap<>();
query.put(“username”,user.getUsername());
List list = service.select(query, new HashMap<>()).getResultList();
if (list.size()>0){
return error(30000, “用户已存在”);
}
user.setUserId(null);
user.setPassword(service.encryption(user.getPassword()));
service.save(user);
return success(1);
}
/**
- 用户ID:[0,8388607]用户获取其他与用户相关的数据
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = “user_id”)
private Integer userId;
/**
- 账户状态:
*/
@Basic
@Column(name = “state”)
private Integer state;
/**
- 所在用户组:[0,32767]决定用户身份和权限
*/
@Basic
@Column(name = “user_group”)
private String userGroup;
/**
- 上次登录时间:
*/
@Basic
@Column(name = “login_time”)
private Timestamp loginTime;
/**
- 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时
*/
@Basic
@Column(name = “phone”)
private String phone;
/**
- 手机认证:
*/
@Basic
@Column(name = “phone_state”)
private Integer phoneState;
/**
- 用户名:[0,16]用户登录时所用的账户名称
*/
@Basic
@Column(name = “username”)
private String username;
/**
- 昵称:[0,16]
*/
@Basic
@Column(name = “nickname”)
private String nickname;
/**
- 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成
*/
@Basic
@Column(name = “password”)
private String password;
/**
- 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时
*/
@Basic
@Column(name = “email”)
private String email;
/**
- 邮箱认证:
*/
@Basic
@Column(name = “email_state”)
private Integer emailState;
/**
- 头像地址:[0,255]
*/
@Basic
@Column(name = “avatar”)
private String avatar;
/**
- 创建时间:
*/
@Basic
@Column(name = “create_time”)
@JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”)
private Timestamp createTime;
@Basic
@Transient
private String code;
}
2.登录
用户进入系统前台首页后,即可看到左上角有登录表单,用户输入用户名、密码、验证码,经过数据库验证,即可登录。如果验证失败,将通过js提示账号或密码错误。
本功能参与的代码文件有index.jsp、userlog_list.jsp、首先用户进入前台首页index.jsp,输入账号密码,通过表单提交到userlog_list.jsp,验证成功后跳到index.jsp,然后通过session获取用户的用户名,并显示出来。
用户登录流程图如下所示。
图5-3用户登录流程图
用户登录界面如下图所示。
图5-4用户登录界面
用户登录代码如下:
/**
登录
@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;
Map<String, String> map = new HashMap<>();
if(username != null && “".equals(username) == false){
map.put(“username”, username);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(email != null && “".equals(email) == false){
map.put(“email”, email);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(phone != null && “".equals(phone) == false){
map.put(“phone”, phone);
resultList = service.select(map, new HashMap<>()).getResultList();
}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.select(groupMap, new HashMap<>()).getResultList();
if (groupList.size()<1){
return error(30000,“用户组不存在”);
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String sql = “select examine_state from “+ userGroup.getSourceTable() +” WHERE user_id = " + byUsername.getUserId();
String res = String.valueOf(service.runCountSql(sql).getSingleResult());
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, “账号或密码不正确”);
}
}
5.2.2订单管理设计与实现
普通用户在系统前台购买商品后,提交订单,后台将生成用户提交的订单,管理员需要处理订单,审核订单,删除、修改订单等操作。
首先管理员点击进入订单列表dingdan_list.jsp,可以选择删除、或者修改,如果管理员点击删除,则将通过js提示管理员是否删除onClick=“return confirm(‘真的要删除?’)",如果删除后将请求sh.jsp进行数据库数据删除,如果管理员选择修改订单信息,将跳转至dingdan_updt2.jsp,然后管理员修改后,页面请求dingdan_updt2_list.jsp来操作数据库完成订单信息的修改,审核订单是将订单的是否审核状态的boolean值改成是true。
订单管理界面如下图所示。
图5-5订单管理界面
订单管理代码如下:
@PostMapping("/upload”)
public Map<String, Object> upload(@RequestParam(“file”) MultipartFile file) {
log.info(“进入方法”);
if (file.isEmpty()) {
return error(30000, “没有选择文件”);
}
try {
//判断有没路径,没有则创建
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 fileName = file.getOriginalFilename();
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.2.3 商品管理设计与实现
除了商品的基本信息管理功能外,为了方便客户浏览商品的真实外观,在添加的商品模块中添加商品图片上传的功能。
用户在商品添加页面中输入添加商品的基本信息,点击提交进入上传图片页面。在上传图片位置添加文件并单击提交按钮,在提交成功后,弹出提示信息。查看用户的商品信息,视图上的鼠标可以查看图片。
用户在系统后台点击添加商品,跳转至shangpin_add.jsp页面,填写好表单参数,提交至shangpin_add_list.jsp页面,然后又shangpin_add_list.jsp操作数据库,完成商品的添加。首先管理员点击进入普通商品列表shangpinxinxi_list.jsp,可以选择删除、或者修改,如果管理员点击删除,则将通过js提示管理员是否删除onClick=“return confirm(‘真的要删除?’)",如果删除后将请求sh.jsp进行数据库数据删除,如果管理员选择修改商品信息,将跳转至shangpinxinxi_updt2.jsp,然后管理员修改后,页面请求shangpinxinxi_updt2_list.jsp来操作数据库完成商品信息的修改。
商品管理界面如下图所示
图5-6商品管理界面
商品管理代码如下:
@RequestMapping("/get_obj”)
public Map<String, Object> obj(HttpServletRequest request) {
Query select = service.select(service.readQuery(request), service.readConfig(request));
List resultList = select.getResultList();
if (resultList.size() > 0) {
JSONObject jsonObject = new JSONObject();
jsonObject.put(“obj”,resultList.get(0));
return success(jsonObject);
} else {
return success(null);
}
}
public Query 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 runEntitySql(sql.toString());
}
5.2.4订单售后的设计与实现
用户需要登录系统后台,才能进行订单售后,用户点击导航栏的订单售后,填写用户名、订单号、售后商品、售后类型、相关凭证、售后内容、管理员可以处理客户的订单售后。
订单售后如下图所示。
图5-7订单售后界面
订单售后代码如下:
@RequestMapping(value = “/del”)
@Transactional
public Map<String, Object> del(HttpServletRequest request) {
service.delete(service.readQuery(request), service.readConfig(request));
return success(1);
}
@Transactional
public void delete(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer(“DELETE FROM “).append("").append(table).append("
”).append(” “);
sql.append(toWhereSql(query, “0”.equals(config.get(FindConfig.GROUP_BY))));
log.info(”[{}] - 删除操作:{}",table,sql);
Query query1 = runCountSql(sql.toString());
query1.executeUpdate();
}
第六章 系统测试
6.1测试 方法
根据系统测试目的并结合面向对象的测试方法,给出如下系统测试方案:
1、尽可能早的、并且不断地进行系统测试。因为错误发现的越早,修正它所付出的代价以及费用就会越小。
2、设计本测试用例时,应该给出测试的预期结果。一个合理的测试用例由两部分组成:主要有测试用的输入数据和该输入数据所期望的系统运行结果。
3、在设计本测试用例时,不仅需要有合法的输入测试用例,还应该要有非法的输入测试用例。因为,因为在系统的实际使用过程中,通常由于各种原因,用户往往会使用一些非法的输入测试用例来进行测试。 测试用例为了测试系统的正确性和完整性,本节将对系统中重点模块的测试进行介绍。
6.2测试目的
该系统能够完成商品选购,加入购买记录,商品管理,商品类别管理,订单管理,购买记录管理,用户管理等功能,做到所开发的系统操作简单,符合系统开放性要求,该系统能够在开放的硬件体系结构中运行,并且能与其他系统顺利连接。
6.3测试用例
6.3.1 注册测试
用户注册功能测试,如下表所示。
用例编号 | 用例名称 | 测试功能 | 输入 | 操作过程 | 预期输出 | 测试结果 |
B1 | 用户注册模块测试 | 正确输入用户信息,完成用户的注册。 | 用户的基本信息 | 用户在系统的注册页面根据提示填写相应的信息,然后点击“注册”按钮。 | 提示成功并跳转到登陆界面。 | 正确 |
B2 | 用户注册模块测试 | 用户注册失败的情况 | 用户不填写用户名 | 用户在系统的注册页面根据提示填写除了用户名以外相应的信息,然后点击“注册”按钮。 | 注册失败,提示“*用户名不符合要求”。 | 正确 |
B3 | 用户注册模块测试 | 用户注册失败的情况 | 用户两次输入密码不一致 | 用户在系统的注册页面根据提示填写相应的信息,填写密码时两次输入的密码不一致,然后点击“注册”按钮。 | 注册失败,提示“*两次输入密码不一致”。 | 正确 |
6.3.2购买订单测试
首先对购买订单的商品的数量进行单元测试,修改商品的数量,当输入除数字外的数量,比如输入a,系统能自动识别,并将数量改成1,通过测试几组数据,均发现没有bug,并且,系统能根据商品的数量,自动计算出商品总价。接着测试购买订单出现添加2种同样商品时的情况,发现添加商品的数量为2后,再添加该同样的商品数量为3,发现购买订单该商品的数量为5,测试无误,通过几次测试,均发现购买订单的商品数量和总价是正确的。
购买订单功能测试,如下表所示
表6-2购买订单测试用例表
用例编号 | 用例名称 | 测试功能 | 输入 | 操作过程 | 预期输出 | 测试结果 |
A1 | 购买订单功能测试 | 商品加入购买订单成功场景。 | 点击商品,填写数量加入购买订单 | 在系统的商品信息页选择商品点击“加入购买订单”按钮。 | 界面提示“有一件商品加入购买订单!” | 正确 |
6.3.3商品管理测试
1.添加功能的测试
添加商品时, 如果上传的是jpg等图片格式的图片,将上传成功,并且系统能正常显示该图片,如果上传doc、mp3等非图片格式的文件后,系统将提示上传失败,并要求用户重新上传图片,进行了几次的测试,均发现正常。
1.删除功能的测试
例如,用户想删除编号为2的商品,则点击删除按钮,系统提示是否删除,点击是,则将删除该商品,页面自动更新,同时查看数据库,发现该商品对应的数据也删除了,证实该功能正常。
1.查询功能的测试该系统中的查询功能是通过点击链接来实现的。 对商品管理代码进行测试,当用户的密码输入到后台时,可以通过点击商品管理直接看到商品信息。 点击查看商品图片查看商品是否已上传图片,系统未出现错误,查询成功。
第七章 总结
本文研究了在线商城销售平台的设计与实现,在文章开端首先对个研究背景、研究现状和研究内容作了简单的介绍,然后通过系统分析,引申出本系统研究的主要内容。
通过对 springboot 技术和MYSQL数据库的简介,从硬件和软件两反面说明了在线商城销售平台的设计与实现的可行性,本文结论及研究成果如下:实现了 springboot 与MYSQL相结合构建的在线订单管理系统,通过本次在线订单管理系统的设计与实现的研究与实现,我感触到学习一门新技术,最重要的是实践,只有多动手才能尽快掌握它,一个系统的开发,经验是最重要的,经验不足,就难免会有许多考虑不周之处。要想吸引更多的用户,系统的界面必须要美观、有特色、友好,功能要健全。
由于在此之前对于 springboot 知识并不了解,所以从一开始就碰到许多困难,例如一开始的页面显示不规范、数据库连接有问题已经无法实现参数的传递等等,不过通过我不断的查阅相关的资料,以及向老师同学请教,最后出现的所有的问题都得到了解决,通过这次的系统开发,我学到了很多的知识,也明白了自己在哪些方面有不足的地方,尤其是学会如何从大量的信息中筛选出所需有用的信息,同时我更加深刻的体会到了,虽然书本上的大部分知识都是有价值,正确的,但实际上每个人编程的思路和对数据处理的方法、思想都是不同的,这就要求我们一定要通过实践才能找到解决问题的方案。在此次毕业设计活动中,我不断的提高了自己,也得到了宝贵的经验,我相信这些对我以后的发展都会有很大帮助。
通过这次的在线订单管理系统开发,让我学到了更多的知识,同时通过这次系统的设计也让我明白了自己在哪方面有不足,以后加以学习争取可以开发住更多有用的适用的系统软件,本次系统的设计提高了我的编程水平,为了我今后系统的开发打下了结实的基础。
致谢
此次毕业设计的课题开发中,遇到了很多分析和技术上的问题,通过网上查找资料和请求同学帮忙,顺利解决许多问题。
首先,我要感谢学校,是它给了我四年良好的生活环境和学习的平台。我要感谢我的指导老师。在这次毕业课题设计和论文的撰写中,指导老师都给了我真诚的帮助和细心的指导。我要感谢我的专业老师,是他们在专业知识上帮我解除了疑惑,让我学到更多。我还要感谢的同学和朋友,是他们陪伴我走过四年的学习生活。
时间随流水般走过,大学四年时光就是这样在不经意之间就走到了尽头。有太多的不舍,但却不会有太多的遗憾。四年时间见证了很多,也让你们见证了我的成长。感谢在大学里有你们的陪伴,感谢在成长的路上有你们的支持和鼓励,谢谢你们,让我的生活变得更加精彩!
参考文献
[1]王屯屯.融合时序模型和W&D模型的在线商城商品推荐[J].信息技术与信息化,2021(08):78-80.
[2]刘庆. 威海:建价格监测机制 网上商城节支15%[N]. 政府采购信息报,2021-08-09(008).DOI:10.38293/n.cnki.nzfcg.2021.000771.
[3]沈家驹. 认知指示语的使用与消费者购买意愿的关系研究[D].四川外国语大学,2021.
[4]董莹. 吉林:为政采在线支付资金提速[N]. 政府采购信息报,2021-06-21(003).DOI:10.38293/n.cnki.nzfcg.2021.000511.
[5]Sriramulu Bojjagani,V. N. Sastry,Chien-Ming Chen,Saru Kumari,Muhammad Khurram Khan. Systematic survey of mobile payments, protocols, and security infrastructure[J]. Journal of Ambient Intelligence and Humanized Computing,2021(prepublish):
[6]印杏. 基于负面在线评论的国内外网购消费者行为差异性研究[D].浙江工商大学,2021.DOI:10.27462/d.cnki.ghzhc.2021.000274.
[7]宋苏娟,李赛凤,季振义,曾余洋,彭卫.在线评论有用性的影响因素探究——基于京东商城的实证研究[J].科技创业月刊,2021,34(02):72-79.
[8]牛希镭.基于JavaWeb的在线图书商城设计与实现[J].电子测试,2021(01):73-75.DOI:10.16520/j.cnki.1000-8519.2021.01.025.
[9]Jiao Ruohuang,Przepiorka Wojtek,Buskens Vincent. Reputation effects in peer-to-peer online markets: A meta-analysis[J]. Social Science Research,2021(prepublish):
[10]杨 丰嘉,黄 媛媛. 基于 Vue.js 的在线商城网站设计与实现[J]. 工程技术研究,2020,2(8):
[11]Cheng Hsing Kenneth,Fan Weiguo,Guo Peipei,Huang Hailiang,Qiu Liangfei. Can “Gold Medal” Online Sellers Earn Gold? The Impact of Reputation Badges on Sales[J]. Journal of Management Information Systems,2020,37(4):
[12]邹瑞,段华琼.基于前后端分离技术的在线商城的设计与实现[J].电脑知识与技术,2020,16(26):231-232+239.DOI:10.14004/j.cnki.ckt.2020.2844.
[13]贾行行. 企业自营在线商城及第三方在线平台的竞争策略及消费者偏好研究[D].北京邮电大学,2020.DOI:10.26969/d.cnki.gbydu.2020.000544.
[14]刘丽媛.基于HTML5技术的微商城设计与实现[J].电脑编程技巧与维护,2020(05):53-55.DOI:10.16184/j.cnki.comprg.2020.05.019.
[15]苏杰.基于UML的在线商城的分析与设计[J].电脑知识与技术,2020,16(11):276-277+286.DOI:10.14004/j.cnki.ckt.2020.1467.
[16]孟祥云. 基于用户体验优化在线导购APP界面设计研究[D].华东理工大学,2019.DOI:10.27148/d.cnki.ghagu.2019.000167.
[17]王学文. 面向在线商城的客服问答系统的设计与实现[D].哈尔滨工业大学,2019.DOI:10.27061/d.cnki.ghgdu.2019.001214.
[18]朱重佳. 基于SSM框架的网购商城的设计与实现[D].北京交通大学,2018.
[19]周娟. 基于顾客需求的B2C电子商务网站满意度评价研究[D].南昌大学,2018.
[20]周星宇. 跨境电商在线商城订单子系统的设计与实现[D].南京大学,2018.