乐趣区

关于java:订单模块的简单说明

订单表设计

创立订单我的项目

创立我的项目

增加继承依赖

<!--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);
}

页面成果展示

退出移动版