首页 > 其他分享 >苍穹外卖 商家取消、派送、完成订单

苍穹外卖 商家取消、派送、完成订单

时间:2024-11-07 21:17:53浏览次数:3  
标签:orders id 订单 取消 ordersDB 外卖 派送 苍穹 Orders

        OrderController

// 取消订单
    // 取消订单逻辑:
    // 1.商家需要将订单状态修改为“已取消”
    // 2.商家取消订单时需要指定取消原因
    // 3.商家取消订单时,若用户已经完成了支付,那么需要为用户退款
    /**
     * 取消订单
     *
     * @param ordersCancelDTO
     * @return
     */
    @PutMapping("/cancel")
    @ApiOperation("取消订单")
    public Result cancel(@RequestBody OrdersCancelDTO ordersCancelDTO) throws Exception {
        orderService.cancel(ordersCancelDTO);
        return Result.success();
    }

    /**
     * 派送订单
     *
     * @param id
     * @return
     */
    @PutMapping("/delivery/{id}")
    @ApiOperation("派送订单")
    public Result delivery(@PathVariable Long id) {
        orderService.delivery(id);
        return Result.success();
    }

    /**
     * 完成订单
     *
     * @param id
     * @return
     */
    @PutMapping("/complete/{id}")
    @ApiOperation("完成订单")
    public Result complete(@PathVariable Long id) {
        orderService.complete(id);
        return Result.success();
    }

        OrderService

/**
     * 取消订单
     *
     * @param ordersCancelDTO
     */
    @Override
    public void cancel(OrdersCancelDTO ordersCancelDTO) throws Exception {
        // 根据id查询需要取消的订单
        Orders ordersDB = orderMapper.getById(ordersCancelDTO.getId());
        // 查询支付状态判断是否应该退款
        Integer payStatus = ordersDB.getPayStatus();
        if (payStatus.equals(Orders.PAID)) {
            //用户已支付,需要退款
            refund(ordersDB);
        }

        // 管理端取消订单需要退款,根据订单id更新订单状态、取消原因、取消时间
        // 封装一个Orders对象便于mapper操作数据库
        Orders orders = new Orders();
        // orderCancelDTO中的id和这个封装的Orders对象是一样的
        orders.setId(ordersCancelDTO.getId());
        // 修改订单状态
        orders.setStatus(Orders.CANCELLED);
        // 修改订单取消原因
        orders.setCancelReason(ordersCancelDTO.getCancelReason());
        // 修改订单取消时间
        orders.setCancelTime(LocalDateTime.now());
        // 在数据库中完成修改
        orderMapper.update(orders);
    }

    /**
     * 派送订单
     *
     * @param id
     */
    @Override
    public void delivery(Long id) {
        // 根据id查询订单
        Orders ordersDB = orderMapper.getById(id);

        // 校验订单是否存在,并且状态是已接单(3)
        if (ordersDB == null) {
            // 若订单不存在,抛出订单不存在异常
            throw new OrderBusinessException(MessageConstant.ORDER_NOT_FOUND);
        }
        if (!ordersDB.getStatus().equals(Orders.CONFIRMED)) {
            // 若订单状态不是已接单,抛出订单状态异常
            throw new OrderBusinessException(MessageConstant.ORDER_STATUS_ERROR);
        }

        Orders orders = new Orders();
        orders.setId(ordersDB.getId());
        // 更新订单状态,将订单状态变为派送中
        orders.setStatus(Orders.DELIVERY_IN_PROGRESS);
        // 更新数据库
        orderMapper.update(orders);
    }

    /**
     * 完成订单
     *
     * @param id
     */
    @Override
    public void complete(Long id) {
        // 根据id查询订单
        Orders ordersDB = orderMapper.getById(id);
        // 检验订单是否存在,并且状态为派送中
        if (ordersDB == null) {
            // 若订单不存在,抛出订单不存在异常
            throw new OrderBusinessException(MessageConstant.ORDER_NOT_FOUND);
        }
        if (!ordersDB.getStatus().equals(Orders.DELIVERY_IN_PROGRESS)) {
            // 若订单状态不是已接单,抛出订单状态异常
            throw new OrderBusinessException(MessageConstant.ORDER_STATUS_ERROR);
        }

        Orders orders = new Orders();
        orders.setId(ordersDB.getId());
        // 更新订单状态,状态转为完成
        orders.setStatus(Orders.COMPLETED);
        orders.setDeliveryTime(LocalDateTime.now());

        orderMapper.update(orders);
    }

        OrderMapper

 

 <update id="update" parameterType="com.sky.entity.Orders">
        update orders
        <set>
            <if test="cancelReason != null and cancelReason!='' ">
                cancel_reason=#{cancelReason},
            </if>
            <if test="rejectionReason != null and rejectionReason!='' ">
                rejection_reason=#{rejectionReason},
            </if>
            <if test="cancelTime != null">
                cancel_time=#{cancelTime},
            </if>
            <if test="payStatus != null">
                pay_status=#{payStatus},
            </if>
            <if test="payMethod != null">
                pay_method=#{payMethod},
            </if>
            <if test="checkoutTime != null">
                checkout_time=#{checkoutTime},
            </if>
            <if test="status != null">
                status = #{status},
            </if>
            <if test="deliveryTime != null">
                delivery_time = #{deliveryTime}
            </if>
        </set>
        where id = #{id}
    </update>

标签:orders,id,订单,取消,ordersDB,外卖,派送,苍穹,Orders
From: https://blog.csdn.net/Aishangyuwen/article/details/143535547

相关文章

  • 67.”苍穹外卖项目个人所得“
    当然这个单体项目已经可能是烂大街的东西了但认真学一些总是能有所得的1.所得到就是规范的目录结构开发流程2.前后端分离接口规范设计路径访问方式返回参数都特别规范这样可以联调通顺所以在干任何事情前规划可以事半功倍3.阿里云OSS存储将图片上传到阿里云Bucke......
  • SpringBoot外卖服务系统k83px 本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:用户,商家,店铺信息,菜品分类,菜品信息,店铺公告开题报告内容一、研究背景与意义随着互联网技术的飞速发展,人们的生活方式正在发生深刻变革。在餐饮......
  • springboot 食念外卖软件app-计算机毕业设计源码65729
    摘 要随着移动互联网的快速发展和智能手机的普及,外卖行业已经成为了人们日常生活中不可或缺的一部分。传统的外卖方式通常需要用户打电话或者使用第三方外卖平台进行订餐,这种方式存在着操作繁琐、信息不准确等问题。为了解决这些问题,本项目设计并实现了一款食念外卖软件app......
  • 苍穹外卖心得-环境搭建-nginx-大佬可跳过
    一开始环境搭建的很好,结果突然登陆的时候就登陆不进去了,看到弹幕说的方法几乎都试了,sql我怎么想也不可能错啊,后来我就感觉是我的nginx的问题,之前自学的时候安装过nginx,怀疑是不是nginx的问题,于是就去学了一上午的nginx,虽然并没有起到很大左右,不过了解到了原理还是很有意思的:可......
  • SpringBoot外卖鲜花系统8kc1h程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、课题背景随着人们生活品质的提高,鲜花已成为表达情感、营造氛围的重要工具。然而,传统的鲜花购买方式受限于地理位置和营业时间,无法满足消费者随......
  • 苍穹外卖 地址簿的CRUD
        AddressControllerpackagecom.sky.controller.user;importcom.sky.constant.MessageConstant;importcom.sky.context.BaseContext;importcom.sky.entity.AddressBook;importcom.sky.result.Result;importcom.sky.service.AddressBookService;import......
  • 苍穹外卖-day1-课程安排
    后端开发d1--开发环境搭建+swaggerd2--添加员工+分页显示+启用禁用账号d3--公共字段填充+添加菜品+分页显示+删除菜品+修改菜品d4--redis+营业状态设置d5--HttpClient+微信小程序开发+微信登录+商品导入d6--缓存菜品,缓存套餐+添加/查看/清空......
  • 美团外卖代付搭建系统!分两种系统
    搭建微suqihangxiaoyuan卖代付、美团代付+京东代付+拼多多代付三合一代付系统搭建!系统带倒计时!代付系统三合一搭建,功能强大!系统自带倒计时手机端h5页面自助下单商品代付代付人头像信息展示,h5搭建更加耐用,长期使用抗feng!外卖小程序,有外卖好友代付功能,跟美团代付一模一样,如......
  • 苍穹外卖 新增套餐接口
        新增套餐主要的坑:新增时操作数据库,不能使用简单的@Insert注解,因为要使用到数据库自增的id值,所以说必须使用XML配置数据库;必须要注意建立好套餐和对应菜品之间的关联。    SetmealControllerpackagecom.sky.controller.admin;importcom.sky.dto.Setme......
  • 苍穹外卖 将菜品缓存到Redis
        CategoryController,用户端查询分类id及其分类下对应的菜品,假如是第一次查询,那么就从数据库中查询并加入redis缓存中,若不是第一次查询,那么直接从redis中查询,不再查询数据库。//redis缓存菜品,减少数据库的查询//在数据库中查找属于IO,假如有很多用户同时访问,那么......