{用户下单}

用户下单后,付完钱,才能发货哦

用户下单业务说明

在电商系统中,用户是通过下单的方式通知商家,用户已经购买了商品,需要商家进行备货发货

用户下单后会产生订单相关数据,订单数据需要能够体现如右信息

整个支付页面流程

确认支付

完成支付

去支付

1

根据用户下单接口的参数设计DTO:OrdersSubmitDTO

2

根据用户下单接口的返回结果设计VO:

OrderSubmitVO

3

创建OrderController并提供用户下单submit方法

5

创建OrderMapper接口和对应的xml映射文件,书写SQL语句

4

创建OrderServiceImpl实现OrderService接口

覆写submitOrder方法

6

测试下单和提交Git

下单代码开发流程

业务层代码

public class OrdersSubmitDTO implements Serializable {
//地址簿id
private Long addressBookId;
//付款方式
private int payMethod;
//备注
private String remark;
//预计送达时间
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime estimatedDeliveryTime;
//配送状态  1立即送出  0选择具体时间
private Integer deliveryStatus;
//餐具数量
private Integer tablewareNumber;
//餐具数量状态  1按餐量提供  0选择具体数量
private Integer tablewareStatus;
//打包费
private Integer packAmount;
//总金额
private BigDecimal amount;
}
订单表:主要存储订单的基本信息(如: 订单号、状态、金额、支付方式、下单用户、收件地址等)

字段名	数据类型	说明	备注
id	bigint	主键	自增
number	varchar(50)	订单号	
status	int	订单状态	1待付款 2待接单 3已接单 4派送中 5已完成 6已取消
user_id	bigint	用户id	逻辑外键
address_book_id	bigint	地址id	逻辑外键
order_time	datetime	下单时间	
checkout_time	datetime	付款时间	
pay_method	int	支付方式	1微信支付 2支付宝支付
pay_status	tinyint	支付状态	0未支付 1已支付 2退款
amount	decimal(10,2)	订单金额	
remark	varchar(100)	备注信息	
phone	varchar(11)	手机号	冗余字段
address	varchar(255)	详细地址信息	冗余字段
consignee	varchar(32)	收货人	冗余字段
cancel_reason	varchar(255)	订单取消原因	
rejection_reason	varchar(255)	拒单原因	
cancel_time	datetime	订单取消时间	
estimated_delivery_time	datetime	预计送达时间	
delivery_status	tinyint	配送状态	1立即送出 0选择具体时间
delivery_time	datetime	送达时间	
pack_amount	int	打包费	
tableware_number	int	餐具数量	
tableware_status	tinyint	餐具数量状态	1按餐量提供 0选择具体数量
order_detail订单明细表
字段名	数据类型	说明	备注
id	bigint	主键	自增
name	varchar(32)	商品名称	冗余字段
image	varchar(255)	商品图片路径	冗余字段
order_id	bigint	订单id	逻辑外键
dish_id	bigint	菜品id	逻辑外键
setmeal_id	bigint	套餐id	逻辑外键
dish_flavor	varchar(50)	菜品口味	
number	int	商品数量	
amount	decimal(10,2)	商品单价
AddressBook(地址信息:收获地址,收货电话,收货人)
//根据用户Id查询购物车信息
List<ShoppingCart> shoppingCartList
//创建订单对象,依次赋值后,插入一条订单
Orders order = new Orders();
 //将购物车数据,转化成为 订单明细数据
 List<OrderDetail> orderDetailList = new ArrayList<>();
 for (ShoppingCart cart : shoppingCartList) {
   OrderDetail orderDetail = new OrderDetail();
   BeanUtils.copyProperties(cart, orderDetail);
   orderDetail.setOrderId(order.getId());
   orderDetailList.add(orderDetail);
 }
//向明细表插入n条数据
orderDetailMapper.insertBatch(orderDetailList);

//清理购物车中的数据
shoppingCartMapper.deleteByUserId(userId);

地址->

购物车列表->

构建订单->

<-构建明细数据

<-插入明细和清空车

封装结果

OrderSubmitVO orderSubmitVO = OrderSubmitVO.builder()
                .id(order.getId())
                .orderNumber(order.getNumber())
                .orderAmount(order.getAmount())
                .orderTime(order.getOrderTime())
                .build();

{Bye}

下单成功后,购物车的数据记得要清空哦!