• 一个订单的案例


    一个订单应该包括一个订单项,和一个订单
    订单项的商品id关联商品表,订单项的订单id关联订单表
    一个订单项应该包括:订单项ID,商品ID,订单ID,数量和小计
    一个订单表应该包括:订单ID,订单时间,订单总金,收货人,电话,地址,状态,用户ID

    一个订单项的实体:

    class OrderItem {
        //订单项ID
        private String itemid;
        //数量
        private Integer count;
        //小计
        private Double subtotal;
        //订单项id直接由订单实体对象代替
        private Order order;
        //商品ID也由商品实体对象代替
        private Product product;
        public String getItemid() {
            return itemid;
        }
        public void setItemid(String itemid) {
            this.itemid = itemid;
        }
        public Integer getCount() {
            return count;
        }
        public void setCount(Integer count) {
            this.count = count;
        }
        public Double getSubtotal() {
            return subtotal;
        }
        public void setSubtotal(Double subtotal) {
            this.subtotal = subtotal;
        }
        public Product getProduct() {
            return product;
        }
        public void setProduct(Product product) {
            this.product = product;
        }
        public Order getOrder() {
            return order;
        }
        public void setOrder(Order order) {
            this.order = order;
        }
    }

    一个订单的实体:

    class Order{
        //订单的ID
        private String oid;
        //订单的创建时间
        private Date ordertime;
        //订单的总金额
        private Double total;
        //订单的状态
        private Integer state; // 1:未付款   2:已经付款,未发货. 3:已结发货,没有确认收货.  4:已结确认收货,订单结束.
        //订单的地址
        private String address;
        //订单的收件人
        private String name;
        //订单的收件人电话
        private String telephone;
        //订单关联的用户信息id,由用户实体对象代替
        private User user;
        //订单关联的订单项的集合
        private List<OrderItem> orderItems = new ArrayList<OrderItem>();
        public String getOid() {
            return oid;
        }
    
        public void setOid(String oid) {
            this.oid = oid;
        }
    
        public Date getOrdertime() {
            return ordertime;
        }
    
        public void setOrdertime(Date ordertime) {
            this.ordertime = ordertime;
        }
    
        public Double getTotal() {
            return total;
        }
    
        public void setTotal(Double total) {
            this.total = total;
        }
    
        public Integer getState() {
            return state;
        }
    
        public void setState(Integer state) {
            this.state = state;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getTelephone() {
            return telephone;
        }
    
        public void setTelephone(String telephone) {
            this.telephone = telephone;
        }
    
        public User getUser() {
            return user;
        }
    
        public void setUser(User user) {
            this.user = user;
        }
    
        public List<OrderItem> getOrderItems() {
            return orderItems;
        }
    
        public void setOrderItems(List<OrderItem> orderItems) {
            this.orderItems = orderItems;
        }
    }


    在用户点击提交订单的时候,需要清空购物车,跳转到一个servlet的saveCart()方法
    在这个方法中要封装order和orderItem对象
    下面是这个方法,省略service层和dao层

    public String saveOrder(HttpServletRequest request,HttpServletResponse response) {
        //首先创建order实体对象
        Order order = new  order();
        //设置订单的编号,由uuid的工具类直接生成
        order.setOid(UUIDUtils.getUUID());
        //设置订单的生成时间
        order.setOrderTime(new Date());
        //设置付款状态
        order.setState(1);
        //首先获得购物车对象,
        Cart cart = (Cart) request.getSession().getAttribute("cart");
        //判断购物车是否为空
        if(cart == null) {
            request.setAttribute("msg", "购物车是空的!");
            return "/jsp/msg.jsp";
        }
        //设置总金额
        order.setTotal(cart.getTotal());
        //获得User对象
        User user = (User) request.getSession().getAttribute("existUser");
        //判断用户是否登录
        if(user == null) {
            request.setAttribute("msg", "您还没有登录!");
            return "/jsp/login.jsp";
        }
        //设置订单的客户
        order.setUser(user);
        
        //创建订单项的实体
        OrderItem orderItem = new OrderItem();
        //因为不确定一个订单中有多少个订单项,所以遍历为购物车中的购物项设置值
        for(CartItem cartItem:cart.getMap().values()) {
            //设置订单项id
            orderItem .setItemid(UUIDUtils.getUUID());
            //设置数量
            orderItem.setCount(cartItem.getCount());
            //设置小计
            orderItem.setSubtotal(cartItem.getSubtotal());
            //设置商品
            orderItem.setProduct(cartItem.getProduct());
            //设置订单
            orderItem.setOrder(order);
        }
        //调用业务层保存把order保存到数据库中
        OrderService os = new OrderServiceImpl();
        os.save(order);
        //订单一旦生成就清空购物车
        cart.clearCart();
        //把order保存到域对象然后转发
        request.setAttribute("order", order);
        return "/jsp/order_info.jsp";
    }
  • 相关阅读:
    Thinkphp回顾(五)之前台模板中的基本语法
    Thinkphp回顾之(四)查询方法深入学习
    Thinkphp框架回顾(三)之怎么实现平常的sql操作数据库
    Thinkphp学习回顾(二)之config.php的配置
    Thinkphp学习回顾(一)之基本结构目录
    端口
    curl put delete post get请求类型参数
    xshell连接virtualbox下的linux系统
    实现jsonp的三种方式
    匹配汉字
  • 原文地址:https://www.cnblogs.com/learnjfm/p/7003399.html
Copyright © 2020-2023  润新知