Day-19-订单模块的实现

订单模块的实现

1.订单确认页面跳转

说明: 当点击去结算按钮时,应该跳转到订单确认页面order-cart.jsp.
在这里插入图片描述

2 编辑OrderController

package com.jt.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.jt.pojo.Cart;
import com.jt.service.DubboCartService;
import com.jt.util.UserThreadLocal;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

@Controller
@RequestMapping("/order")
public class OrderController {

    @Reference
    private DubboCartService cartService;

    /**
     * 业务说明:
     *      当点击按钮时,跳转到订单确认页面  cartList购物车数据
     * URL地址:http://www.jt.com/order/create.html
     * 参数:  userId
     * 返回值: 页面逻辑名称 order-cart
     * 页面取值: ${carts}
     */
    @RequestMapping("/create")
    public String orderCreate(Model model){

        long userId = UserThreadLocal.get().getId();
        List<Cart> cartList = cartService.findCartListByUserId(userId);
        model.addAttribute("carts",cartList);
        return "order-cart";
    }





}


3 页面效果展现

在这里插入图片描述

3.2 订单项目创建

3.2.1 创建订单项目

在这里插入图片描述
3.2.2 添加继承/依赖/插件

 <dependencies>
        <dependency>
            <groupId>com.jt</groupId>
            <artifactId>jt-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <!--添加插件 有main方法时 需要添加插件-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

3.2.3 关于订单表设计说明
在这里插入图片描述
3.2.4 编辑POJO,继承BasePojo
在这里插入图片描述
3.2.5 代码结构如下
实现好对应接口,Mapper,启动类(别忘了加包扫描)
在这里插入图片描述

3.4 订单提交

3.4.1 页面分析

1).页面URL分析
在这里插入图片描述
2).参数说明
在这里插入图片描述
3).POJO对象封装
在这里插入图片描述
4).页面JS分析

jQuery.ajax( {
			type : "POST",
			dataType : "json",
			url : "/order/submit",
			//将name属性与值进行拼接 形式 name=value1&name2=value2&name3=value3......
			//表单序列化,可以简化参数写法
			data : $("#orderForm").serialize(),
			cache : false,
			success : function(result) {    //SysResult对象
				if(result.status == 200){   //要求返回orderId
					location.href = "/order/success.html?id="+result.data;
				}else{
					$("#submit_message").html("订单提交失败,请稍后重试...").show();
				}
			},
			error : function(error) {
				$("#submit_message").html("亲爱的用户请不要频繁点击, 请稍后重试...").show();
			}
		});


3.4.2 编辑OrderController

/**
     * 实现订单入库操作
     * url分析:   http://www.jt.com/order/submit
     * 参数:      整个form表单 Order对象
     * 返回值:    SysResult对象
     * 页面取值:  要求返回orderId
     */
    @RequestMapping("/submit")
    @ResponseBody
    public SysResult submit(Order order){
        long userId = UserThreadLocal.get().getId();
        order.setUserId(userId);
        String orderId = orderService.saveOrder(order);
        //完成订单之后,应该删除购物车.. 分布式事务....
        //cartService.deleteCart();
        return SysResult.success(orderId);
    }

3.4.3 编辑OrderService

package com.jt.service;

import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import com.alibaba.dubbo.config.annotation.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.jt.mapper.OrderItemMapper;
import com.jt.mapper.OrderMapper;
import com.jt.mapper.OrderShippingMapper;
import com.jt.pojo.Order;
import com.jt.pojo.OrderItem;
import com.jt.pojo.OrderShipping;

@Service
public class OrderServiceImpl implements DubboOrderService {
	
	@Autowired
	private OrderMapper orderMapper;
	@Autowired
	private OrderShippingMapper orderShippingMapper;
	@Autowired
	private OrderItemMapper orderItemMapper;

	/**
	 * 完成3张表入库操作
	 * order表入库
	 * orderItem表入库
	 * OrderShipping表入库
	 * 动态生成orderId.设定默认状态
	 * 注意数据库事务控制
	 * @param order
	 * @return
	 */
	@Override
	@Transactional
	public String saveOrder(Order order) {
		//动态生成主键
		String orderId = "" + order.getUserId() + System.currentTimeMillis();
		//1.完成订单入库操作
		order.setOrderId(orderId).setStatus(1);
		orderMapper.insert(order);
		System.out.println("订单入库操作成功!!!");

		//2.完成订单物流入库
		OrderShipping orderShipping = order.getOrderShipping();
		orderShipping.setOrderId(orderId);
		orderShippingMapper.insert(orderShipping);
		System.out.println("订单物流入库成功!!!");

		//3.完成订单商品入库操作
		List<OrderItem> orderItems = order.getOrderItems();
		for (OrderItem orderItem : orderItems){
			orderItem.setOrderId(orderId);
			orderItemMapper.insert(orderItem);
		}
		System.out.println("订单全部入库成功!!!!");
		return orderId;
	}
}


3.5 订单查询

3.5.1 业务分析

说明: 当用户订单入库之后,应该跳转到订单的成功页面. 格式如下:
页面数据: ${order}
在这里插入图片描述
在这里插入图片描述

3.5.2 编辑OrderController

 /**
     * 实现订单查询
     * url: http://www.jt.com/order/success.html?id=71613981329562
     * 参数: orderId
     * 返回值: 成功页面 success.jsp
     * 页面取值: Order对象(包含其它2个业务数据) ${order.orderId}
     */
    @RequestMapping("/success")
    public String success(String id,Model model){
        //根据id 查询订单对象
        Order order = orderService.findOrderById(id);
        model.addAttribute("order", order);
        return "success";
    }

3.5.3 编辑OrderService

@Override
	public Order findOrderById(String id) {

		Order order = orderMapper.selectById(id);
		OrderShipping orderShipping = orderShippingMapper.selectById(id);
		QueryWrapper queryWrapper = new QueryWrapper();
		queryWrapper.eq("order_id", id);
		List<OrderItem> orderItems = orderItemMapper.selectList(queryWrapper);
		return order.setOrderShipping(orderShipping).setOrderItems(orderItems);
	}

3.5.4 页面效果
在这里插入图片描述

订单模块的实现步骤

1-建立单独订单模块,添加继承/依赖/插件
2-设计pojo :order(整个订单模板),orderItem(商品订单:商品展示在订单里的西信息有哪些),orderShipping(商品物流)
3-jt-web 前端编辑一个隐藏的form表单,
当点击按钮时,跳转到订单确认页面 cartList购物车数据
参数: userId
返回值: 页面逻辑名称 order-cart,
页面取值: ${carts}

4-通过ThreadLocal获取到userId,然后根据userId,查询数据库,得到商品列表,并用控制层的Model渲染为商品订单界面
5-跳转到商品订单界面后,点击确认按钮通过本地线程ThreaLocal线程获取到userId,然后在业务层进行三张表的入库操作

  • 完成3张表入库操作
  • order表入库
  • orderItem表入库
  • OrderShipping表入库

最后,返回orderId给订单提交成功后的界面,

最后当用户订单入库之后,跳转到订单的成功页面

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

香瓜西蕉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值