电商网站订单生成流程

电商网站订单生成流程

1. 提交订单

1.1. 功能分析

1、在订单确认页面点击“提交订单”按钮生成订单。

2、请求的url:/order/create

3、参数:提交的是表单的数据。保存的数据:订单、订单明细、配送地址。

a) 向tb_order中插入记录。

i. 订单号需要手动生成。

要求订单号不能重复。

订单号可读性号。

可以使用redis的incr命令生成订单号。订单号需要一个初始值。

ii. Payment:表单数据

iii. payment_type:表单数据

iv. user_id:用户信息

v. buyer_nick:用户名

vi. 其他字段null

b) 向tb_order_item订单明细表插入数据。

i. Id:使用incr生成

ii. order_id:生成的订单号

iii. 其他的都是表单中的数据。

c) tb_order_shipping,订单配送信息

i. order_id:生成的订单号

ii. 其他字段都是表单中的数据。

d) 使用pojo接收表单的数据。

可以扩展TbOrder,在子类中添加两个属性一个是商品明细列表,一个是配送信息。

把pojo放到e3-order-interface工程中。

/**

* 用于存放用户提交订单信息

* @Auther: jun

* @Date: 2018/6/1 0001 21:45

* @Description:

*/

public class OrderInfo extends TbOrder implements Serializable {

private List orderItems;

private TbOrderShipping orderShipping;

public List getOrderItems() {

return orderItems;

}

public void setOrderItems(List orderItems) {

this.orderItems = orderItems;

}

public TbOrderShipping getOrderShipping() {

return orderShipping;

}

public void setOrderShipping(TbOrderShipping orderShipping) {

this.orderShipping = orderShipping;

}

}

业务逻辑:

1、接收表单的数据

2、生成订单id

3、向订单表插入数据。

4、向订单明细表插入数据

5、向订单物流表插入数据。

6、返回e3Result。

返回值:e3Result

1.1. Dao层

可以使用逆向工程。

1.1. Service层

参数:OrderInfo

返回值:e3Result

/**

* 订单Service

* 订单需要操作三张数据到所有要注入三张表对应生成的mapper

* @Auther: jun

* @Date: 2018/6/1 0001 21:51

* @Description:

*/

@Service

public class OrderServiceImpl implements OrderService {

@Autowired

private TbOrderMapper tbOrderMapper;

@Autowired

private TbOrderItemMapper tbOrderItemMapper;

@Autowired

private TbOrderShippingMapper tbOrderShippingMapper;

@Autowired

private JedisClient jedisClient;

@Value("${ORDER_ID_GEN_KEY}")

private String ORDER_ID_GEN_KEY;

@Value("${ORDER_ID_START}")

private String ORDER_ID_START;

@Value("${ORDER_DETAIL_ID_GEN_KEY}")

private String ORDER_DETAIL_ID_GEN_KEY;

@Override

public E3Result createOrder(OrderInfo orderInfo) {

//生订单是最好给定初始值所以要判断一下

if (!jedisClient.exists(ORDER_ID_GEN_KEY)) {

//设置初始值,从ORDER_ID_START数开始

jedisClient.set(ORDER_ID_GEN_KEY,ORDER_ID_START);

}

//生成订单号,使用redis的incr生成

String orderId=jedisClient.incr(ORDER_ID_GEN_KEY).toString();

//补全OrderInfo属性

//id

orderInfo.setOrderId(orderId);

//'状态:1、未付款,2、已付款,3、未发货,4、已发货,5、交易成功,6、交易关闭'

orderInfo.setStatus(1);

orderInfo.setCreateTime(new Date());

orderInfo.setUpdateTime(new Date());

//插入订单表

tbOrderMapper.insert(orderInfo);

//向订单明细表插入数据

List orderItems=orderInfo.getOrderItems();

//遍历

for (TbOrderItem orderItem:orderItems){

//生成订单明细id

String orderItem_Id=jedisClient.incr(ORDER_DETAIL_ID_GEN_KEY).toString();

//补全明细属性

orderItem.setId(orderItem_Id);

orderItem.setOrderId(orderId);

//向明细表插入数据

tbOrderItemMapper.insert(orderItem);

}

//向订单物流表插入数据

//从订单详细中获得订单物流对象

TbOrderShipping tbOrderShipping=orderInfo.getOrderShipping();

//补全属性

tbOrderShipping.setOrderId(orderId);

tbOrderShipping.setCreated(new Date());

tbOrderShipping.setUpdated(new Date());

//向订单物流插入数据

tbOrderShippingMapper.insert(tbOrderShipping);

//返回成功,包含订单号

return E3Result.ok(orderId);

}

}

1.1. Controller

请求的url:/order/create

参数:使用OrderInfo接收

返回值:逻辑视图。

业务逻辑:

1、接收表单提交的数据OrderInfo。

2、补全用户信息。

3、调用Service创建订单。

4、返回逻辑视图展示成功页面

a) 需要Service返回订单号

在拦截器中添加用户处理逻辑:

Controller代码

/**

* 提交订单

*

* @param orderInfo,model

* @auther: jun

* @date: 2018/6/1 0001 22:29

* @return: java.lang.String

* @Description:

*/

@RequestMapping(value = "order/create", method = RequestMethod.POST)

public String createOrder(OrderInfo orderInfo, Model model, HttpServletRequest request) {

//取用户信息

TbUser user = (TbUser) request.getAttribute ( "user" );

//把用户信息添加到orderInfo中

orderInfo.setUserId ( user.getId () );

orderInfo.setBuyerNick ( user.getUsername () );

//调用服务生产订单

E3Result result=orderService.createOrder (orderInfo);

//如果订单生成成功,需要删除购物车

if (result.getStatus ()==200){

cartService.clearCartItem (user.getId ());

}

//返回页面需要参数

//把订单号转递给页面

request.setAttribute ("orderId",result.getData ());

request.setAttribute ("payment",orderInfo.getPayment ());

//返回逻辑视图

return "success";

}

相关推荐

《故乡》百年,乡关何处

《故乡》百年,乡关何处

📅 06-27 👁️ 6897
虺是什么动物(解密传说中的“虺”)
史记是我国第一部什么体通史

史记是我国第一部什么体通史

📅 06-27 👁️ 9910