订单系统——提交订单

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<TbOrderItem> orderItems;

    private TbOrderShipping orderShipping;

    public List<TbOrderItem> getOrderItems() {
        return orderItems;
    }

    public void setOrderItems(List<TbOrderItem> 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<TbOrderItem> 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";
}

猜你喜欢

转载自blog.csdn.net/qq_39537939/article/details/80570016
今日推荐