一、需求分析
本系统主要涉及到3中对象:游客(未登录)、商城注册用户、管理员。
游客(未登录):可以登录、注册、商品查看,能在线浏览商城中已有的书籍。不能直接购买和添加到购物车。
商城注册用户:可以进行商品查看、添加商品到购物车、购物车管理、生成订单、订单管理、在线支付。实体书购买则需要通过添加购物车,设置收货地址,填写相关收货信息,确认一切无误后,生成订单再在线支付,等待图书管理员以邮递的形式将实体书寄给用户。
管理员:可以添加商品、商品管理、查看订单 、榜单查看(导出)。管理员可以添加新的书籍和将出售完的书籍下架,系统还需要统计一段时间内各类书籍网络版和实体版的出售数量,并建立榜单来吸引用户。
本系统目前设定12大功能:
1、用户注册 2、用户登录 3、管理员添加商品 4、查看商品列表 5、查看商品详情 6、将商品添加购物车
7、查看购物车 8、修改购物车 9、生成订单 10、订单查看(取消) 11、在线支付 12、下载销售榜单
用户需要填写用户名、密码、确认密码、昵称、邮箱、验证码。需要用户填写一次性的验证码,验证码输入正确,其他信息不为空,且邮箱格式输入正确,才可以注册,用户点击注册按钮,系统会向用户发送激活邮件,用户需要在限定时间内点击激活邮件内的激活链接进行激活,激活成功则注册成功,可以进行登录操作。
当用注册成功后才可以进行登录操作,如果登录成功,判断是否勾选了记住用户名,系统设置Cookie保存用户名7天;判断是否勾选自动登录,如果勾选了,系统设置Cookie保存用户名和密码7天,7天内自动登录。如果登录失败,显示用户名或密码错误。如果用户未激活,则无法登录成功。如果用户名不存在,则登录不成功。
用户登录成功后会有一个注销按钮,点击注销按钮,可以注销用户。
管理员有权限添加商品,添加商品时需要添加一个商品图片,我们使用文件上传。添加商品时需要输入商品名称、商品价格、商品类别、商品数量、商品图片、商品描述。非管理员添加商品上传文件会显示权限不足。图片添加成功后会跳转到主页面。
可以以列表的形式查看所有商品的简略信息,商品会以图片的形式显示,通过点击商品名称或者商品图片,可以查看商品的详细信息。也可以根据商品id查找相应商品。
点击商品名称或者商品图片,可以查看商品的详细信息,商品详情页面会显示商品名称、商品价格、商品类别、商品数量、商品描述、商品图片以及添加到购物车等信息。
本系统对购物车功能进行了简化,没有使用到数据库,直接使用session存储信息。添加商品到购物车流程:点击添加到购物车,将商品id传递Servlet ,从Session中取出购物车对象,判断商品是否已经在购物车中,如果不在,添加商品到购物车数量 +1 。如果商品不在购物车中,需要根据商品 id 查询商品所有信息,添加购物车。
当点击查看购物车中商品时,会跳转到一个jsp页面,购物车是存储在session中的,那么在jsp页面上就可以直接得到session中的商品信息,包括商品名称、商品单价、可购买数量、购买数量、总价等信息。在购物车页面还可以清空购物车,删除购物车中单项商品,删除一项后,判断购物车是否为空,如果为空,移除购物车对象 。在删除商品时会有删除确认操作,确认删除后才可以删除。还可以修改购买的数量, 通过JavaScript 控制购物数量修改。可以点击+ -按钮完成商品数量修改操作,也可以直接在文本框中输入相应数量进行修改。
在购物车页面还可以清空购物车,删除购物车中单项商品,删除一项后,判断购物车是否为空,如果为空,移除购物车对象 。在删除商品时会有删除确认操作,确认删除后才可以删除。还可以修改购买的数量, 通过JavaScript 控制购物数量修改。可以点击+ -按钮完成商品数量修改操作,也可以直接在文本框中输入相应数量进行修改。
在购物车页面,点击结算会出生成订单,跳转到订单页面,显示订单信息,需要填写收货地址。当订单生成后,需要对以下的表进行操作:1.订单表中要插入数据; 2.商品表中的商品数量要进行修改(修改商品的库存) 3.订单与用户之间也存在关系,添加订单时,也需要得到当前用户的id。
查看订单时,会根据用户的权限显示不同的信息,管理员可以查看做所有的订单,注册用户只能查看当前用户的订单。查询订单基本信息时,可以查询下单用户昵称和用户名,查询订单项信息时,可以查询商品的名称和单价。订单取消 : 删除订单表信息时,同时删除订单项信息 (订单项信息依赖 订单信息 ,必须先删除订单项)。注意事项 :1) 可以取消未支付的订单,如果订单已经支付,将无法取消 ;2) 管理员不能取消任何用户未支付订单,普通用户只能取消 自己的未支付的订单。
本系统的支付操作,使用了在线支付操作epay第三方支付平台,在显示订单页面上,显示的订单信息中,包含了当前支付状态。会显示 "已支付" "未支付",如果是未支付,会有一个连接访问支付页面,并将当前订单的id,以及当前订单的金额传递到支付页面。在支付页面上可以选择银行,表单提交时,将订单编号,金额,以及银行进行提交。借助第三方支付工具进行支付,支付成功后,修改订单状态,修改订单状态要根据订单编号修改。
1) 网站进行支付,根据易宝支付接口请求规范,生成易宝需要数据,将数据提交到易宝指定网址 https://www.yeepay.com/app-merchant-proxy/node
* 在提交支付请求给易宝,需要将请求中数据,使用易宝提供密钥和算法进行加密,获得数字签名 hmac码 ,将hmac码发送给易宝
2) 易宝会连接银行,进行支付
3) 支付后,浏览器会以重定向方式访问 网站回调程序,易宝在收到银行转账后,会以Socket方式通知网站
* 在浏览器重定向通知后,提供给用户支付成功显示页面 (不要去修改订单状态)
* 在网站收到易宝点对点通知后,回复易宝success,修改订单状态
数字签名原理:将数据 使用密钥和算法加密后 获得数字签名hmac,将数据和数字签名hmac一起发送给易宝,易宝采用同样密钥和算法对数据进行加密获得数字签名hmac,比较请求中数字签名hmac与加密后获得数字签名hmac是否一致,如果一致 签名hmac有效 (数据没有被篡改 )
流程入口: 未支付订单可以进行支付,管理员不允许支付
在线支付
1) pay.jsp 银行选择页面
2) OnlinePayServlet 准备易宝支付参数
* 提供密钥和算法 商家编号 真实的 将PaymentUtil 复制 utils包 , 将 merchantInfo.properties 复制 src
* responseURL 支付成功后 回调地址 ,该地址会收到 浏览器重定向和服务器点对点两次通知 ,确保该地址 可以被易宝访问 (estore项目必须要配置缺省虚拟主机)
将OnlinePayServlet准备易宝参数,传递JSP 确认
3) confirm.jsp 通过form的隐藏域,提交参数给易宝网址 https://www.yeepay.com/app-merchant-proxy/node
4) CallbackServlet 回调程序,收到浏览器重定向和服务器点对点两个通知 ,浏览器重定向,显示支付成功,不要修改订单状态。服务器点对点,修改订单状态,回复success 。
在显示订单的页面上,会提供一个删除订单的连接。删除订单注意事项 :1.删除订单要将orders表中数据删除---根据id删除。2.需要删除orderItem表中数据。 3.需要修改商品的数量 ,也就是说需要对products表进行update操作。
以上操作,都需要进行事务控制。
导出销售榜单,可以获得商品销售情况,统计已支付订单项内容。榜单中包括销售信息、销售数量、订单支付情况等。榜单文件可以使用 POI类库导出为Excel。
附:
资料+源码:链接:https://pan.baidu.com/s/1Hn-F98exx6pNXNLOwmLPMQ
提取码:ekw3