瑞吉外卖 <再来一单> 功能

项目场景:

瑞吉外卖的项目中,我们有一个历史订单功能,历史订单在完成了之后会显示 [再来一单] 功能,在我的上一篇文章中,已经做过了历史订单功能。今天我们来做这个再来一单功能。思路还是跟黑马的讲师一样!

上一篇的链接:瑞吉外卖订单后台和用户端功能


编写思路:

第一步:通过F12的网络查看点击按钮发送的ajax请求

我们能看到是对 http://localhost:8080/order/again 发送了一个post请求,也就是对我们的订单控制器发送的请求,所以这个id明显是订单ID。

第二步:编写again方法

通过查看前端发送的数据,我们知道他是Post请求和json格式,然后需要添加@PostMapping("/again") 注解 和 @RequestBody 注解来接收

@PostMapping("/again")
public R<String> again(@RequestBody Orders orders) {

}

第三步:我们将步骤写出来

  1. 获取订单ID

  2. 通过订单ID查询订单明细

  3. 清空现在的购物车

  4. 将订单明细里的数据添加到购物车

第四步:编写代码 

需注意:我的订单ID不是Orders表的id 而是 number,所以我还获取了一下order的数据。

/**
     * 再来一单
     * @param orders
     * @return
     */
    @PostMapping("/again")
    public R<String> again(@RequestBody Orders orders) {
        log.info("订单:{}",orders);

        //获取订单ID
        //SQL : select * from orders where id = ?
        Orders ordersData = ordersService.getById(orders.getId());
        String id = ordersData.getNumber();

        //通过订单ID查询订单明细
        //SQL : select * from order_detail where order_id = ?
        LambdaQueryWrapper<OrderDetail> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(OrderDetail::getOrderId,id);
        List<OrderDetail> orderDetailList = orderDetailService.list(lambdaQueryWrapper);
        log.info("该订单数据:{}",orderDetailList);

        //清空现在的购物车
        //SQL : delete * from shopping_cart where user_id = ?
        LambdaQueryWrapper<ShoppingCart> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(ShoppingCart::getUserId,BaseContext.getCurrentId());
        shoppingCartService.remove(queryWrapper);

        //将订单明细里的数据添加到购物车
        List<ShoppingCart> shoppingCartList = orderDetailList.stream().map((item) -> {
            ShoppingCart shoppingCart = new ShoppingCart();
            shoppingCart.setName(item.getName());
            shoppingCart.setImage(item.getImage());
            shoppingCart.setUserId(BaseContext.getCurrentId());
            shoppingCart.setDishId(item.getDishId());
            shoppingCart.setSetmealId(item.getSetmealId());
            shoppingCart.setDishFlavor(item.getDishFlavor());
            shoppingCart.setNumber(item.getNumber());
            shoppingCart.setAmount(item.getAmount());
            return shoppingCart;
        }).collect(Collectors.toList());

        shoppingCartService.saveBatch(shoppingCartList);

        return R.success("Success!");
    }

完整代码:

下面是OrderController的完整代码:

package com.itheima.reggie.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.reggie.common.BaseContext;
import com.itheima.reggie.common.R;
import com.itheima.reggie.dto.OrdersDto;
import com.itheima.reggie.entity.OrderDetail;
import com.itheima.reggie.entity.Orders;
import com.itheima.reggie.entity.ShoppingCart;
import com.itheima.reggie.service.OrderDetailService;
import com.itheima.reggie.service.OrdersService;
import com.itheima.reggie.service.ShoppingCartService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.stream.Collectors;

@Slf4j
@RestController
@RequestMapping("/order")
public class OrderController {

    @Autowired
    private OrdersService ordersService;

    @Autowired
    private OrderDetailService orderDetailService;

    @Autowired
    private ShoppingCartService shoppingCartService;

    /**
     * 用户下单
     * @param orders
     * @return
     */
    @PostMapping("/submit")
    public R<String> submit(@RequestBody Orders orders) {

        log.info("订单数据:{}",orders);

        ordersService.submit(orders);

        return R.success("下单成功");
    }

    /**
     * 后台分页查询订单
     * @param page
     * @param pageSize
     * @param number
     * @param beginTime
     * @param endTime
     * @return
     */
    @GetMapping("/page")
    public R<Page> page(int page, int pageSize, String number, String beginTime, String endTime) {
        //分页构造器
        Page<Orders> pageInfo = new Page<>(page, pageSize);
        //条件构造器
        LambdaQueryWrapper<Orders> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        //添加排序条件,根据订单时间进行排序
        lambdaQueryWrapper.orderByDesc(Orders::getOrderTime);

        //打印订单号
        log.info("订单号:{}",number);

        //如果订单号不为空
        if(number != null){
            //添加订单号比较条件
            lambdaQueryWrapper.eq(Orders::getNumber,number);
        }

        //如果 开始时间 和 结束时间 都不为空
        if(beginTime != null && endTime != null){
            //SQL : where (orderTime BETWEEN beginTime AND endTime)
            //添加范围内查询条件 筛选出下单时间 大于等于 开始时间 小于等于 结束时间
            lambdaQueryWrapper.between(Orders::getOrderTime,beginTime,endTime);
        }

        //进行分页查询
        ordersService.page(pageInfo, lambdaQueryWrapper);

        return R.success(pageInfo);
    }

    /**
     *  更改订单状态
     * @param orders
     * @return
     */
    @PutMapping
    public R<String> status(@RequestBody Orders orders) {

        log.info(orders.toString());

        ordersService.updateById(orders);

        return R.success("派送成功");
    }

    /**
     * 用户订单
     * @param page
     * @param pageSize
     * @return
     */
    @GetMapping("/userPage")
    public R<Page> userPage(int page , int pageSize) {

        //分页构造器
        Page<Orders> pageInfo = new Page<>(page,pageSize);
        Page<OrdersDto> ordersDtoPage = new Page<>();

        //SQL:select * from orders where user_id = ? order by order_time desc

        //条件构造器
        LambdaQueryWrapper<Orders> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        //添加用户ID
        lambdaQueryWrapper.eq(Orders::getUserId, BaseContext.getCurrentId());
        //添加排序条件,根据订单时间进行倒序
        lambdaQueryWrapper.orderByDesc(Orders::getOrderTime);

        //进行分页查询
        ordersService.page(pageInfo,lambdaQueryWrapper);

        //对象拷贝 将pageInfo 拷贝 到 orderDtoPage 忽略 records
        BeanUtils.copyProperties(pageInfo,ordersDtoPage,"records");

        //获取pageInfo的records
        List<Orders> records = pageInfo.getRecords();

        //遍历records
        List<OrdersDto> list = records.stream().map((item) -> {

            OrdersDto ordersDto = new OrdersDto();
            //将 records的数据拷贝到 ordersDto
            BeanUtils.copyProperties(item,ordersDto);

            //SQL:select * from order_detail where order_id = ?

            //条件构造器
            LambdaQueryWrapper<OrderDetail> queryWrapper = new LambdaQueryWrapper<>();
            //通过records里面的订单ID [number] 对比 订单明细表的order_id 查询订单明细
            queryWrapper.eq(OrderDetail::getOrderId,item.getNumber());
            //查询出订单明细信息 列表
            List<OrderDetail> orderDetail = orderDetailService.list(queryWrapper);

            ordersDto.setOrderDetails(orderDetail);
            return ordersDto;
        }).collect(Collectors.toList());

        ordersDtoPage.setRecords(list);

        return R.success(ordersDtoPage);
    }

    /**
     * 再来一单
     * @param orders
     * @return
     */
    @PostMapping("/again")
    public R<String> again(@RequestBody Orders orders) {
        log.info("订单:{}",orders);

        //获取订单ID
        //SQL : select * from orders where id = ?
        Orders ordersData = ordersService.getById(orders.getId());
        String id = ordersData.getNumber();

        //通过订单ID查询订单明细
        //SQL : select * from order_detail where order_id = ?
        LambdaQueryWrapper<OrderDetail> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(OrderDetail::getOrderId,id);
        List<OrderDetail> orderDetailList = orderDetailService.list(lambdaQueryWrapper);
        log.info("该订单数据:{}",orderDetailList);

        //清空现在的购物车
        //SQL : delete * from shopping_cart where user_id = ?
        LambdaQueryWrapper<ShoppingCart> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(ShoppingCart::getUserId,BaseContext.getCurrentId());
        shoppingCartService.remove(queryWrapper);

        //将订单明细里的数据添加到购物车
        List<ShoppingCart> shoppingCartList = orderDetailList.stream().map((item) -> {
            ShoppingCart shoppingCart = new ShoppingCart();
            shoppingCart.setName(item.getName());
            shoppingCart.setImage(item.getImage());
            shoppingCart.setUserId(BaseContext.getCurrentId());
            shoppingCart.setDishId(item.getDishId());
            shoppingCart.setSetmealId(item.getSetmealId());
            shoppingCart.setDishFlavor(item.getDishFlavor());
            shoppingCart.setNumber(item.getNumber());
            shoppingCart.setAmount(item.getAmount());
            return shoppingCart;
        }).collect(Collectors.toList());

        shoppingCartService.saveBatch(shoppingCartList);

        return R.success("Success!");
    }
}

文章到此结束!仅作学习参考!谢谢! 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是一个简单的瑞吉外卖毕业设计: 1. 项目概述 瑞吉外卖是一个在线点餐和外卖配送平台,旨在为用户提供方便快捷的餐饮服务。本项目的目标是设计和开发一个瑞吉外卖平台的Web应用程序,使用户能够浏览菜单、下订单、支付并收到外卖。 2. 功能需求 - 用户注册和登录:用户可以注册账号并登录,以便进行下单和支付。 - 菜单浏览:用户可以浏览瑞吉外卖的菜单,包括菜品名称、图片、描述和价格等信息。 - 下订单:用户可以选择所需的菜品,并将其添加到购物车中。用户可以在购物车中修改订单内容,然后提交订单。 - 支付功能:用户可以使用信用卡、支付宝或微信支付等方式进行支付。 - 外卖配送:一旦订单被支付,瑞吉外卖系统将为用户安排外卖配送。 3. 技术实现 - 后端开发:使用Java语言Spring框架开发后端逻辑。 - 数据库:使用MySQL数据库存储用户信息、菜单和订单等数据。 - 前端开发:使用HTML、CSS和JavaScript等技术实现用户界面。 - 支付接口:使用支付宝和微信支付的API实现支付功能。 - 外卖配送:使用第三方配送平台(例如饿了么)进行外卖配送。 4. 项目展望 瑞吉外卖是一项有潜力的业务,未来可以考虑以下扩展: - 扩大菜单种类和数量:增加更多的菜品种类和数量,以满足更广泛的用户需求。 - 推广活动:开展促销和折扣活动,以吸引更多用户。 - 用户评价:开发用户评价功能,使用户可以对菜品和服务进行评价,提供反馈和建议。 - 移动应用:开发移动应用程序,使用户可以更方便地使用瑞吉外卖服务。 以上是一个简单的瑞吉外卖毕业设计。当然,具体实现细节和功能可以根据自己的需求进行扩展和修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值