商城项目(1.0版本)第四篇

主要内容:订单模块 , 通过第三方接口实现支付功能.

订单
一、订单功能

1_模型的抽取
2_提交订单
3_查询我的订单
4_订单详情
5_支付功能
6_权限过滤器

二、订单模型的抽取
1、小票的分析

会员ID:1231231
流水号:hrwj_ba_31_sy003_1002
交易时间:2017年3月10日08:41:53
商品名称 商品价格 商品数量 小计
好日子 15 2 30
芙蓉王 25 2 50
黄鹤楼 15 3 45
大前门 10 1 10
总金额:135元

2、设计表

第一种:设计表,存储小票上的数据
会员id 流水号 交易时间 商品名称 商品价格 商品数量 小计 总金额
1231231 XXX XXXX 好日子 15 2 30 135
1231231 XXX XXXX 芙蓉王 25 2 50 135
1231231 XXX XXXX 黄鹤楼 15 3 45 135
1231231 XXX XXXX 大前门 10 1 10 135
弊端:数据冗余严重 DB原则:存储最少的数据,办更多的事情

第二种:设计表,存储小票上的数据
用户表user(uid,username,password,name,birthday,telephone,state,code…)

一个表专注于交易描述 ,订单表 orders
订单id(流水号) 会员id 交易时间 总金额 收货人姓名 地址 电话 订单状态(1234)
1123 1231231 XXXX 135
1124 1234444 YYYY 200

orders表中的会员id列参照了用户表uid
订单状态:
买家:下单未付款,付款未发货,已发货,签收
卖家: 未付款,发货,未签收,已收货(结束)

一个表专注于每笔订单详细交易情况,订单项orderitem
订单项id 商品id 数量 小计 所在订单编号
001 p003 2 30 1123
002 p005 2 50 1123
003 p101 3 45 1123
004 p220 1 10 1123
005 p334 1 101 1124
006 p556 3 54 1124
007 p445 5 45 1124
orderitem表中的商品id参照了商品表的pid
orderitem表中的所在订单编号参照了订单表的订单id

订单信息的查询
在这里插入图片描述
保存订单:
为订单表中插入一行数据,描述本次交易,这行数据部分数据是通过程序赋予,部分数据来自购物车的,部分数据来自session中的用户
oid:UUIDUtils orderTime:new Date(); total: 从购物车获取
state:1 address: null name:null telephone:null uid:从session中的用户获取

保存订单项:
向订单项表中插入数据,描述当前订单的详细的购买信息,部分数据来自于购物车,部分数据需要通过程序赋予
itemid: UUIDUtils quantity:来自于购物车中的购物项
total:来自于购物车中的购物项 pid:来自于购物车上的购物项下商品对象pid
oid:来自于当前订单id

提交订单时,订单以及订单项必须同时成功(事务)

2.3实现订单模块相关程序
OrderServlet OrderService OrderServiceImp OrderDao OrderDaoImp
Order{ User user, List list=new ArrayList(); …}
OrderItem{ Product product,Order order;}

2.4步骤实现
1_准备工作

2_OrderServlet__>saveOrder
//确认用户登录状态
//创建订单对象,为订单对象赋值
//遍历购物项的同时,创建订单项
//调用业务层功能:保存订单
//清空购物车
//将订单放入request
//转发/jsp/order_info.jsp
return “/jsp/order_info.jsp”;
3_OrderService
利用事务保存订单,订单项
4_OrderDao
5_/jsp/order_info.jsp
获取到订单信息

总结:
1_模型的抽取
2_业务层事务

第3章我的订单查询
3.1原理分析

3.2步骤实现
1_准备工作
我的订单
2_OrderServlet__>findMyOrdersWithPage
获取用户信息
获取当前页
调用业务层功能:查询当前用户订单信息,返回PageModel
将PageModel放入request
转发到/jsp/order_list.jsp
3_OrderServiceImp
//1_创建PageModel对象,目的:计算并且携带分页参数
//2_关联集合
//3_关联url
4_OrderDaoImp
*_利用MapListHandler封装多表查询结果
*_多表查询语句
*_BeanUtils自动填充数据

5_实现/jsp/order_list.jsp 获取订单信息,完成响应
PS: 遍历数据时,2个循环,大循环遍历订单,小循环遍历的是订单上的订单项

第4章订单详情功能
4.1原理分析

4.2步骤实现
1_准备工作 order_list.jsp 修改连接
付款
2_OrderServlet___>findOrderByOid
获取到订单oid
调用业务层功能:根据订单编号查询订单信息
将订单放入request
转发到/jsp/order_info.jsp
3_OrderService
4_OrderDaoImp
根据订单oid查询当前订单
根据订单oid查询订单下所有的订单项以及订单项关联的商品
5_/jsp/order_info.jsp
开发中:多个功能对应同一个JSP页面,为了提高代码复用率,所有的功能在向同一个
JSP页面转发的时候,向request存入相同的数据(属性名一致)
request.setAttribute(name,obj);

第5章支付功能实现
5.1基础概念
银行接口:
优点:资金没有延时
缺点:银行API发生变化,支付功能需要更改
第三方支付api:
缺点:资金延时,收费
有点:银行API发生变化,支付功能不需要更改

5.2支付数据执行过程

5.3如何保证数据传输有效性
张三和李四传输数据:
原文:ABCDE
算法:对原文中的每个字符的ASC码增加一个数字(公开)
秘钥:增加的3(只有张三和李四知道)
密文:CDEFG
张三向李四传递数据: ABCDE&CDEFG
李四获取到张三的数据之后:ABCDE利用算法和秘钥3对原文再次加密得到密文
比较得到的密文和获取到的密文是否一致,一致数据是合法的.

加密算法: 对称加密,非对称加密
对称加密: 原文<>密文
非对称加密:原文
>密文

A公司实现电商项目,A公司需要拿着公司营业执照,银行账户各种资质证明,去易宝支付申请使用权限,易宝支付审核之后为A公司分配商户编号,秘钥

5.4原理分析

5.5步骤实现
1_准备工作 /jsp/order_info.jsp
设置form表单(method,action,id)
设置form表单 input 标签的name属性 address name telephone
设置隐藏域 传递订单oid
2_OrderServlet___>payOrder
获取订单oid,收货人地址,姓名,电话,银行
更新订单上收货人的地址,姓名,电话
向易宝支付发送参数
3_OrderServlet___>callBack
接收响应会的数据
确保数据有效性
更新订单状态
向request放入提示信息
转发到/jsp/info.jsp

总结:原理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
GeoPandas是一个开源的Python库,旨在简化地理空间数据的处理和分析。它结合了Pandas和Shapely的能力,为Python用户提供了一个强大而灵活的工具来处理地理空间数据。以下是关于GeoPandas的详细介绍: 一、GeoPandas的基本概念 1. 定义 GeoPandas是建立在Pandas和Shapely之上的一个Python库,用于处理和分析地理空间数据。 它扩展了Pandas的DataFrame和Series数据结构,允许在其中存储和操作地理空间几何图形。 2. 核心数据结构 GeoDataFrame:GeoPandas的核心数据结构,是Pandas DataFrame的扩展。它包含一个或多个列,其中至少一列是几何列(geometry column),用于存储地理空间几何图形(如点、线、多边形等)。 GeoSeries:GeoPandas中的另一个重要数据结构,类似于Pandas的Series,但用于存储几何图形序列。 二、GeoPandas的功能特性 1. 读取和写入多种地理空间数据格式 GeoPandas支持读取和写入多种常见的地理空间数据格式,包括Shapefile、GeoJSON、PostGIS、KML等。这使得用户可以轻松地从各种数据源中加载地理空间数据,并将处理后的数据保存为所需的格式。 2. 地理空间几何图形的创建、编辑和分析 GeoPandas允许用户创建、编辑和分析地理空间几何图形,包括点、线、多边形等。它提供了丰富的空间操作函数,如缓冲区分析、交集、并集、差集等,使得用户可以方便地进行地理空间数据分析。 3. 数据可视化 GeoPandas内置了数据可视化功能,可以绘制地理空间数据的地图。用户可以使用matplotlib等库来进一步定制地图的样式和布局。 4. 空间连接和空间索引 GeoPandas支持空间连接操作,可以将两个GeoDataFrame按照空间关系(如相交、包含等)进行连接。此外,它还支持空间索引,可以提高地理空间数据查询的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值