订单模块的实现

一、总体思路分析

 

二、创建订单

1)servlet

public class OrderServlet extends BeanServlet {

    private OrderService orderService = new OrderServiceipml();

    protected void creatOrder(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println(111);
        // 先获取Cart购物车对象
        Cart cart = (Cart) req.getSession().getAttribute("cart");
        // 获取Userid
        User loginUser = (User) req.getSession().getAttribute("user");
        //判断用户是否登入
        if (loginUser == null) {
            //如果没登入就跳转到登入页面
            req.getRequestDispatcher("/pages/user/login.jsp").forward(req,resp);
            //如果没有登入就不再执行下面的代码了
            return;
        }
        Integer userId = loginUser.getId();
//        调用orderService.createOrder(Cart,Userid);生成订单
        String orderId = orderService.createOrder(cart, userId);
        req.setAttribute("orderId", orderId);
        // 请求转发到/pages/cart/checkout.jsp
        //        req.getRequestDispatcher("/pages/cart/checkout.jsp").forward(req, resp);
        //把用户ID保存到
        req.getSession().setAttribute("orderId",orderId);

        resp.sendRedirect(req.getContextPath()+"/pages/cart/checkout.jsp");
    }

2)Service

/**
     * 生成订单
     *
     * @param cart
     * @param userId
     * @return java.lang.String
     * @author weisn
     * @date 10:24
     */

    @Override
    public String createOrder(Cart cart, Integer userId) {
        // 订单号===唯一性   System.currentTimeMillis()---获取时间戳
        String orderId = System.currentTimeMillis() + "" + userId;
        // 创建一个订单对象
        Order order = new Order(orderId, new Date(), cart.getTotalPrice(), 0, userId);
        // 保存订单
        orderDao.saveOrder(order);

        // 遍历购物车中每一个商品项转换成为订单项保存到数据库
        for (Map.Entry<Integer, CartItem> entry : cart.getItems().entrySet()) {
            // 获取每一个购物车中的商品项
            CartItem cartItem = entry.getValue();
            // 转换为每一个订单项
            OrderItem orderItem = new OrderItem(null, cartItem.getName(), cartItem.getCount(), cartItem.getPrince(),
                    cartItem.getTotalPrice(), orderId);
            // 保存订单项到数据库
            orderItemDao.saveOrderItem(orderItem);
            // 更新库存和销量
            //通过商品id去查找商品的详情
            Book book = bookDao.queryBookByid(cartItem.getId());
            //设置销售量
            book.setSales(book.getSales() + cartItem.getCount());
            //设置库存
            book.setStock(book.getStock() - cartItem.getCount());
            bookDao.updateBook(book);


        }
        //去结账的时候一般要清空购物车
        cart.clear();
        return orderId;

    }

3)OrderDao 

/**
 * @Description: OrderDao实现类  // 类说明
 * @ClassName: OrderDaoimpl    // 类名
 * @Author: 曾伟鸿            // 创建者
 * @Date: 2022/1/15 22:15   // 时间
 * @Version: 1.0       // 版本
 */
public class OrderDaoimpl extends BaseDao implements OrderDao {
    @Override
    public int saveOrder(Order order) {
        String sql = "insert into t_order(`order_id`,`create_time`,`price`,`status`,`user_id`) values(?,?,?,?,?)";
        return update(sql, order.getOrderId(), order.getCreateTime(), order.getPrice(), order.getStatus(),
                order.getUserId());
    }
}

4)OrderItemDao

/**
 * @Description: 实现类  // 类说明
 * @ClassName: OrderItemDaoimpl    // 类名
 * @Author: 曾伟鸿            // 创建者
 * @Date: 2022/1/15 22:16   // 时间
 * @Version: 1.0       // 版本
 */
public class OrderItemDaoimpl extends BaseDao implements OrderItemDao {
    @Override
    public int saveOrderItem(OrderItem orderItem) {
        String sql = "insert into t_order_item(`name`,`count`,`price`,`total_price`,`order_id`) values(?,?,?,?,?)";
        return update(sql, orderItem.getName(), orderItem.getCount(), orderItem.getPrice(), orderItem.getTotalPrice()
                , orderItem.getOrderId());
    }
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,订单模块实现代码需要根据不同的业务场景而定,以下是一个简单的Java订单模块实现示例: ```java //订单类 public class Order { private String orderId; //订单private String userId; //用户ID private double amount; //订单金额 private int status; //订单状态,0表示未支付,1表示已支付 //构造方法 public Order(String orderId, String userId, double amount) { this.orderId = orderId; this.userId = userId; this.amount = amount; this.status = 0; //默认未支付 } //支付方法 public void pay() { //调用支付接口,修改订单状态为已支付 boolean result = PaymentApi.pay(this.orderId, this.amount); if (result) { this.status = 1; System.out.println("订单支付成功!"); } else { System.out.println("订单支付失败!"); } } //退款方法 public void refund() { //调用退款接口,修改订单状态为未支付 boolean result = PaymentApi.refund(this.orderId, this.amount); if (result) { this.status = 0; System.out.println("订单退款成功!"); } else { System.out.println("订单退款失败!"); } } //其他订单相关方法 //... } //支付接口类 public class PaymentApi { //模拟支付接口,返回支付结果 public static boolean pay(String orderId, double amount) { //调用第三方支付平台接口,模拟支付流程 return true; } //模拟退款接口,返回退款结果 public static boolean refund(String orderId, double amount) { //调用第三方支付平台接口,模拟退款流程 return true; } } //订单测试类 public class OrderTest { public static void main(String[] args) { Order order = new Order("20211231001", "123456", 100.0); order.pay(); //支付订单 order.refund(); //退款订单 } } ``` 以上示例代码实现了一个简单的订单模块,包含订单类、支付接口类和订单测试类。其中,订单实现订单的创建、支付、退款等功能;支付接口类模拟了支付和退款接口,返回支付和退款结果;订单测试类调用订单类的方法,测试订单功能是否正常。 请注意,以上示例代码仅供参考,实际开发中需要根据业务场景进行适当调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值