订单表设计
创立订单我的项目
创立我的项目
增加继承依赖
<!--2. 增加依赖信息 -->
<dependencies>
<!-- 依赖本质依赖的是 jar 包文件 -->
<dependency>
<groupId>com.jt</groupId>
<artifactId>jt-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<!--3. 增加插件 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
增加 POJO
删除 orderItem 的主键标识
构建 order 我的项目
代码构造
订单页面跳转
url 剖析
编辑 OrderController
package com.jt.controller;
import com.alibaba.dubbo.config.annotation.Reference;
import com.jt.pojo.Cart;
import com.jt.pojo.Order;
import com.jt.service.DubboCartService;
import com.jt.service.DubboOrderService;
import com.jt.theardLocal.UserTheardLocal;
import com.jt.vo.SysResult;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@Controller
@RequestMapping("/order")
public class OrderController {@Reference(timeout = 3000,check = false)
private DubboOrderService orderService;
@Reference(timeout = 3000,check = false)
private DubboCartService cartService;
/**
* 订单页面跳转到确认页面
* url:http://www.jt.com/order/create.html
* 页面的取值:${carts}
* */ @RequestMapping("/create")
public String create(Model model){
// 依据 userId 查问购物车信息】Long userId= UserTheardLocal.get().getId();
List<Cart> cartList = cartService.findCartListUserId(userId);
// 通过 model 将数据带到页面中去
model.addAttribute("carts",cartList);
// 跳转到订单确认页面
return "order-cart";
}
编辑 OrderService
@Override
public List<Cart> findCartListByUserId(Long userId) {QueryWrapper<Cart> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("user_id", userId);
return cartMapper.selectList(queryWrapper);
}
页面成果展示
对于 SpringMVC 参数提交问题阐明
简略参数传参问题
1. 页面 url 标识
2.Controller 中的办法
public void xxxx(User user){
}
public class User{
private Integer name;
private String age;
}
应用对象的援用为参数赋值
属性提交问题 ….
解决思路:可采纳对象援用形式为属性赋值。
<input name="name" value="二郎神" />
<input name="age" value="3000" />
<input name="dog.name" value="哮天犬" />
<input name="dog.age" value="8000" />
Controller 中的办法
public void xxx(User user){ }
public class Dog{
private String name;
private Integer age;
}
public class User{
private String name;
private Integer age;
private Dog dog;
}
对于订单提交
页面 url 阐明
申请参数
页面 JS 解析
jQuery.ajax( {
type : "POST",
dataType : "json",
url : "/order/submit",
data : $("#orderForm").serialize(),
// data: {"key":"value","key2":"value2".....}
// data: id=1&name="xxx"&age=18......
cache : false,
success : function(result) {if(result.status == 200){location.href = "/order/success.html?id="+result.data;}else{$("#submit_message").html("订单提交失败,请稍后重试...").show();}
},
error : function(error) {$("#submit_message").html("敬爱的用户请不要频繁点击, 请稍后重试...").show();}
});
编辑 OrderController
/**
* 订单提交
* url:http://www.jt.com/order/submit
* 参数:整个 form 表单
* 返回值:SysResult 对象 须要携带返回值 orderId
* 业务阐明:* 当订单入库之后,须要返回 orderId,让用户查问订单信息和状态
*/
@RequestMapping("/submit")
@ResponseBody
public SysResult saveOrder(Order order){
// 获取用户的编号
Long userId=UserTheardLocal.get().getId();
order.setUserId(userId);
String orderId=orderService.saveOrder(order);
// 判断 orderId 是否为空
if(StringUtils.isEmpty(orderId)){return SysResult.fail();
}else{
// 如果执行胜利将 orderId 返回给用户
return SysResult.success(orderId);
}
}
编辑 OrderService
package com.jt.service;
import com.alibaba.dubbo.config.annotation.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
@Service(timeout = 3000)
public class DubboOrderServiceImpl implements DubboOrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private OrderShippingMapper orderShippingMapper;
@Autowired
private OrderItemMapper orderItemMapper;
/**
* Order 分为三大块:1、order 订单自身,2、order 物流信息,3、order 商品信息
* 须要操作 3 张表实现入库操作
* 主键信息:OrderId
* @param order
* @return
*/
@Override
public String saveOrder(Order order) {
// 拼接 orderId
String orderId=
""+order.getUserId()+System.currentTimeMillis();
//1、实现订单入库
order.setOrderId(orderId)// 将 orderId 存到 order 对象中
.setStatus(1);// 设置订单提交的状态
orderMapper.insert(order);// 将订单入库
//2、实现订单物流入库
OrderShipping orderShipping= order.getOrderShipping();// 从 order 中先取出 OrderShipping 对象
orderShipping.setOrderId(orderId);// 将查物流的 orderId 存到物流对象中
// 间接入库
orderShippingMapper.insert(orderShipping);
//3、实现订单商品的入库
List<OrderItem> orderItems = order.getOrderItems();
// 批量入库操作的 sql://insert into xxx(xxx,xx,xx)values (xxx,xx,x),(xxx,xx,x).....
for(OrderItem orderItem:orderItems){orderItem.setOrderId(orderId);// 将订单 id 存到订单信息中
orderItemMapper.insert(orderItem);// 实现订单入库
}
System.out.println("订单入库胜利!!!");
return orderId;
}
订单胜利跳转
页面 url 剖析
编辑 OrderController
/**
* 实现订单提交胜利的页面(商品的查问)* url:http://www.jt.com/order/success.html?id=101605796286970
* 参数阐明:orderId 订单编号
* 返回值类型:success.html
* 页面的取值形式:${order.orderId}
*/
@RequestMapping("/success")
public String findOrderById(String id,Model model){
// 依据 id 查问订单商品信息
Order order=orderService.findOrderById(id);
// 通过 model 对象将数据传到页面
model.addAttribute("order",order);
return "success";
}
编辑 OrderService
/**
* 实现订单提交胜利的页面(商品的查问)* url:http://www.jt.com/order/success.html?id=101605796286970
* 参数阐明:orderId 订单编号
* 返回值类型:success.html
* 页面的取值形式:${order.orderId}
*/@Override
public Order findOrderById(String id) {
//1. 查问订单信息
Order order=orderMapper.selectById(id);
// 查问订单物流信息
OrderShipping orderShipping=orderShippingMapper.selectById(id);
// 查问订单商品, 因为一个订单下能够有多个商品所以用 selectList
QueryWrapper<OrderItem> queryWrapper=new QueryWrapper<>();
queryWrapper.eq("order_id", id);
List<OrderItem> lists=orderItemMapper.selectList(queryWrapper);
return order.setOrderShipping(orderShipping).setOrderItems(lists);
}
页面成果展示