【生成订单】 servlet代码

 

复制代码
package com.exp.bookstore.web.servlet;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.UUID;

import javax.security.auth.message.callback.PrivateKeyCallback.Request;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.BeanUtils;

import com.gyf.bookstore.model.Order;
import com.gyf.bookstore.model.OrderItem;
import com.gyf.bookstore.model.Product;
import com.gyf.bookstore.model.User;
import com.gyf.bookstore.service.OrderService;

/**
 * 生成定单
 * @author exp
 *
 */
@WebServlet("/createOrder")
public class CreateOrderServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取session的user
        User user = (User) request.getSession().getAttribute("user");
        if(user == null){
            response.getWriter().write("非法访问...");
            return;
        }
        
        //取购物车
        Map<Product,Integer> cart = (Map<Product, Integer>) request.getSession().getAttribute("cart");
        if(cart == null || cart.size() == 0){
            response.getWriter().write("购物车没商品");
            return;
        }
        
        
        //1.把数据封装好
        Order order = new Order();
        try {
            //1.1把请求参数封装成Order
            BeanUtils.populate(order, request.getParameterMap());
            
            //1.2补全Order数据
            order.setId(UUID.randomUUID().toString());
            order.setOrdertime(new Date());
            order.setUser(user);
            
            //1.3封装定单详情OrderItem【定单有n个商品】
            List<OrderItem> items = new ArrayList<OrderItem>();
            //取购物车
            double totalPrice = 0;
            for(Entry<Product, Integer> entry : cart.entrySet()){
                OrderItem item = new OrderItem();
                //设置购物数量
                item.setBuynum(entry.getValue());
                //设置商品
                item.setProduct(entry.getKey());
                //设置定单
                item.setOrder(order);
                
                totalPrice += entry.getKey().getPrice() * entry.getValue();
                
                items.add(item);
            }
            
            //设置Order中items
            order.setItems(items);
            
            //1.4设置总价格
            order.setMoney(totalPrice);
            
            //打印:
            System.out.println("---------------");
            System.out.println("定单:");
            System.out.println(order);
                    
            System.out.println("定单中商品:");
            for(OrderItem item : items){
                System.out.println("商品名称:" + item.getProduct().getName() + " 数量:" + item.getBuynum());
            }
            
            //System.out.println(order);
            
            //2.插入数据库
            OrderService os = new OrderService();
            os.createOrder(order);
            
            
            //3.定单成功(移除购物车数据)
            request.getSession().removeAttribute("cart");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        
        
    }
}
复制代码

 

posted @   expworld  阅读(551)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示