当前位置: 首页 > news >正文

苍穹外卖day06

目录

前言:

用户端:

1.查询历史订单

2.查询订单详情

3.取消订单

4.再来一单

管理端:

1.订单搜索

2. 各个状态的订单数量统计

3 需求分析和设计

4.接单

5.拒单

6.取消订单

7.派送订单

8.完成订单

总结:


前言:

本文对应外卖视频的day09项目实战,主包将记录自己的代码和思考

用户端:

1.查询历史订单

基本信息

Path: /user/order/historyOrders

Method: GET
接口描述:
请求参数

Query

参数名称是否必须示例备注
page1页面
pageSize10每页记录数
status订单状态
返回数据
名称类型是否必须默认值备注其他信息
codenumber非必须
msgnull非必须
dataobject非必须
├─ totalnumber非必须
├─ recordsobject []非必须

item 类型: object

├─ idnumber非必须
├─ numberstring非必须
├─ statusnumber非必须
├─ userIdnumber非必须
├─ addressBookIdnumber非必须
├─ orderTimestring非必须
├─ checkoutTimestring非必须
├─ payMethodnumber非必须
├─ payStatusnumber非必须
├─ amountnumber非必须
├─ remarkstring非必须
├─ userNamenull非必须
├─ phonestring非必须
├─ addressstring非必须
├─ consigneestring非必须
├─ cancelReasonnull非必须
├─ rejectionReasonnull非必须
├─ cancelTimenull非必须
├─ estimatedDeliveryTimestring非必须
├─ deliveryStatusnumber非必须
├─ deliveryTimenull非必须
├─ packAmountnumber非必须
├─ tablewareNumbernumber非必须
├─ tablewareStatusnumber非必须
├─ orderDetailListobject []非必须

item 类型: object

├─ idnumber必须
├─ namestring必须
├─ orderIdnumber必须
├─ dishIdnumber必须
├─ setmealIdnull必须
├─ dishFlavornull,string必须
├─ numbernumber必须
├─ amountnumber必须
├─ imagestring必须

看到这个数据,返回的是order类多了一个orderDetailList 我想到了就是用两次mapper查两次,再封装到一起

OrderController:

 /*** 历史订单查询* @param ordersPageDTO* @return*/@GetMapping("/historyOeders")public Result<PageResult> historyOrders(OrdersPageDTO ordersPageDTO){log.info("分页查询历史订单:{}",ordersPageDTO);//开始分页查询 还是封装到之前的PageResult中//这里我设计了一个DTO来接收前端传进来的三个参数PageResult pageResult = orderService.historyOrders(ordersPageDTO);return Result.success(pageResult);}

OrderService:

  PageResult historyOrders(OrdersPageDTO ordersPageDTO);

OrderServiceImpl:

  public PageResult historyOrders(OrdersPageDTO ordersPageDTO){//利用分页插件传进去两个参数开始分页查询//这里我还设计了一个VO对象,因为订单表和订单明细表是1对多的关系,所以要返回订单表和订单明细表//但是order表是没有的,所以用voPageHelper.startPage(ordersPageDTO.getPage(), ordersPageDTO.getPageSize());Orders orders  = new Orders();BeanUtils.copyProperties(ordersPageDTO, orders);orders.setUserId(BaseContext.getCurrentId());//查询对应的历史订单数据,这里还没有查到订单明细表Page<OrderPageVO> page = ordersMapper.pageQuery(orders);//查了两次mapper,其实是可以多表查询用resultMap的//遍历对应的订单集合,给每个订单找到它的明细表for(OrderPageVO p: page){List<OrderDetail> list = orderDetailMapper.listByOrderId(p.getId());p.setOrderDetails(list);}return PageResult.builder().total(page.getTotal()).records(page.getResult()).build();}/// 这里我使用build的时候报错了,要记得在对应类(Pagesult)上加@builder注解哦

OrdersMapper:

    /*** 查询历史订单数据* @param orders* @return*/Page<OrderPageVO> pageQuery(Orders orders);

OrdersMapper.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.sky.mapper.OrdersMapper">
<select id="pageQuery" parameterType="com.sky.entity.Orders" resultType="com.sky.vo.OrderPageVO">
select  * from orders
<where>
<if test="status != null and status != ''">
and status = #{status}
</if>
<if test="userId != null and userId != ''">
and user_id = #{userId}
</if>
</where>order by order_time desc
</select></mapper>

OrderDetail:

  @Select("select * from order_detail where order_id = #{orderId}")List<OrderDetail> listByOrderId(Long OrderId);

2.查询订单详情

基本信息

Path: /user/order/orderDetail/{id}

Method: GET

接口描述:
请求参数
路径参数
参数名称示例备注
id101订单id
返回数据
名称类型是否必须默认值备注其他信息
codeinteger非必须

format: int32

dataobject非必须
├─ addressstring非必须
├─ addressBookIdinteger非必须

format: int64

├─ amountnumber非必须
├─ cancelReasonstring非必须
├─ cancelTimestring非必须

format: date-time

├─ checkoutTimestring非必须

format: date-time

├─ consigneestring非必须
├─ deliveryStatusinteger非必须

format: int32

├─ deliveryTimestring非必须

format: date-time

├─ estimatedDeliveryTimestring非必须

format: date-time

├─ idinteger非必须

format: int64

├─ numberstring非必须
├─ orderDetailListobject []非必须

item 类型: object

├─ amountnumber非必须
├─ dishFlavorstring非必须
├─ dishIdinteger非必须

format: int64

├─ idinteger非必须

format: int64

├─ imagestring非必须
├─ namestring非必须
├─ numberinteger非必须

format: int32

├─ orderIdinteger非必须

format: int64

├─ setmealIdinteger非必须

format: int64

├─ orderTimestring非必须

format: date-time

├─ packAmountinteger非必须

format: int32

├─ payMethodinteger非必须

format: int32

├─ payStatusinteger非必须

format: int32

├─ phonestring非必须
├─ rejectionReasonstring非必须
├─ remarkstring非必须
├─ statusinteger非必须

format: int32

├─ tablewareNumberinteger非必须

format: int32

├─ tablewareStatusinteger非必须

format: int32

├─ userIdinteger非必须

format: int64

├─ userNamestring非必须
msgstring非必须

这个跟上一个几乎一样,是上一个简化版

OrderController:

    /*** 查询订单详情* @param id* @return*/@GetMapping("/orderDetail")public Result<OrderPageVO> orderDetail(@PathVariable Long id){log.info("查询订单详情:{}",id);OrderPageVO orderPageVO = orderService.orderDetail(id);return Result.success(orderPageVO);}

OrderService:

 OrderPageVO orderDetail(Long id);

OrderServiceImpl:

   public OrderPageVO orderDetail(Long id){OrderPageVO orderPageVO  = ordersMapper.getById(id);List<OrderDetail> list = orderDetailMapper.listByOrderId(id);orderPageVO.setOrderDetails(list);return orderPageVO;}

OrdersMapper:

@Select("SELECT * from orders where id = #{id}")
OrderPageVO getById(Long id);

3.取消订单

基本信息

Path: /user/order/cancel/{id}

Method: PUT

接口描述:
请求参数
路径参数
参数名称示例备注
id101订单id
返回数据
名称类型是否必须默认值备注其他信息
codeinteger必须

format: int32

dataobject非必须
msgstring非必须

业务规则:

  • 待支付和待接单状态下,用户可直接取消订单

  • 商家已接单状态下,用户取消订单需电话沟通商家

  • 派送中状态下,用户取消订单需电话沟通商家

  • 如果在待接单状态下取消订单,需要给用户退款

  • 取消订单后需要将订单状态修改为“已取消”

OrderController:

    /*** 取消订单* @param id* @Return*/@PutMapping("/cancel/{id}")public Result cancel(@PathVariable Long id){log.info("取消订单:{}",id);orderService.cancel(id);return Result.success();}

OrderService:

void cancel(Long id);

OrderServiceImpl:

         public void cancel(Long id){OrderPageVO orderPageVO  = ordersMapper.getById(id);Orders orders = new Orders();BeanUtils.copyProperties(orderPageVO, orders);Integer status = orders.getStatus();/// 待派送和派送中的订单,用户不可取消,取消的和商家联系if (status > 2 ) {throw new OrderBusinessException("和商家联系");}/// 待支付和待接单状态下,用户可直接取消订单/// 待支付退款if(status == Orders.PENDING_PAYMENT){//退款 因为没实现微信支付功能 所以直接修改订单状态为退款orders.setPayStatus(Orders.REFUND);}//取消订单orders.setStatus(Orders.CANCELLED);orders.setCancelReason("用户取消");orders.setCancelTime(LocalDateTime.now());ordersMapper.update(orders);}

OrdersMapper:

  /*** 修改订单信息* @param orders*/void update(Orders orders);@Select("SELECT * from orders where id = #{id}")
OrderPageVO getById(Long id);

OrdersMapper.xml:

    <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>

4.再来一单

基本信息

Path: /user/order/repetition/{id}

Method: POST

接口描述:
请求参数
路径参数

参数名称

示例

备注

id

101

订单id

返回数据
名称类型是否必须默认值备注其他信息
codeinteger必须

format: int32

dataobject非必须
msgstring非必须

我选择复用加入购物车的代码

OrderController:

    /*** 再来一单* @param id* @Return*/@PostMapping("/repetition/{id}")public Result repetition(@PathVariable Long id){log.info("再来一单:{}",id);orderService.repetition(id);return Result.success();}

OrderService:

 void repetition(Long id);

OrderServiceImpl:

    public void repetition(Long id){List<OrderDetail>   orderDetails = orderDetailMapper.listByOrderId(id);for(OrderDetail orderDetail:orderDetails){ShoppingCartDTO cart = new ShoppingCartDTO();BeanUtils.copyProperties(orderDetail, cart);shoppingCartService.addShoppingCart(cart);}}

管理端:

1.订单搜索

基本信息

Path: /admin/order/conditionSearch

Method: GET

接口描述:
请求参数
Query
参数名称是否必须示例备注
beginTimebeginTime
endTimeendTime
numbernumber
pagepage
pageSizepageSize
phonephone
statusstatus
返回数据
名称类型是否必须默认值备注其他信息
codenumber必须
msgnull非必须
dataobject非必须
├─ totalnumber非必须
├─ recordsobject []非必须

item 类型: object

├─ idnumber必须
├─ numberstring必须
├─ statusnumber必须
├─ userIdnumber必须
├─ addressBookIdnumber必须
├─ orderTimestring必须
├─ checkoutTimenull,string必须
├─ payMethodnumber必须
├─ payStatusnumber必须
├─ amountnumber必须
├─ remarkstring必须
├─ userNamestring必须
├─ phonestring必须
├─ addressstring必须
├─ consigneestring必须
├─ cancelReasonstring必须
├─ rejectionReasonstring必须
├─ cancelTimestring必须
├─ estimatedDeliveryTimestring必须
├─ deliveryStatusnumber必须
├─ deliveryTimestring必须
├─ packAmountnumber必须
├─ tablewareNumbernumber必须
├─ tablewareStatusnumber必须
├─ orderDishesstring必须订单包含的菜品,以字符串形式展示

 OrderController:

    @GetMapping("conditionSearch")public Result<PageResult> conditionSearch( OrdersPageQueryDTO ordersPageQueryDTO) {log.info("订单条件查询");PageResult pageResult =  orderService.conditionSearch(ordersPageQueryDTO);return Result.success(pageResult);}

OrderService:

 PageResult conditionSearch( OrdersPageQueryDTO ordersPageQueryDTO);

OrderServiceImpl:

    public PageResult conditionSearch( OrdersPageQueryDTO ordersPageQueryDTO){/// 开始分页查询PageHelper.startPage(ordersPageQueryDTO.getPage(), ordersPageQueryDTO.getPageSize());/// 创建order 接受前端穿过来的参数Orders orders  = new Orders();BeanUtils.copyProperties(ordersPageQueryDTO, orders);/// 这里不要设置userId 因为是商家再查询所欲的用户订单,所以不用设置/// 这里刚开始写的是报错了   因为order刚开始是没有开始时间结束时间的 我又加上了而已Page<OrderPageVO> page = ordersMapper.pageQuery(orders);/// 返回参数是有字符串类型的订单信息的 所以遍历for循环 将OrderPageVO换成我们要传递的vo类型 顺便编写一个方法传递字符串类型的订单信息/// 黑马使用的是stream流的map 都一样List<OrderVO> list = new ArrayList<>();for(OrderPageVO p: page.getResult()){OrderVO orderVO = new OrderVO();BeanUtils.copyProperties(p, orderVO);orderVO.setOrderDishes(getOrderDishes(orderVO.getId()));list.add(orderVO);}return PageResult.builder().total(page.getTotal()).records(list).build();}public String getOrderDishes(Long id){/// 先查询出来对应的订单详细信息List<OrderDetail> list = orderDetailMapper.listByOrderId(id);/// 创建一个字符串集合List<String> dishes = new ArrayList<>();/// 遍历集合 拼接 要: 鱼香肉丝*3份for(OrderDetail orderDetail:list){String dish = orderDetail.getName() + "*" + orderDetail.getNumber() + "份";dishes.add(dish);}/// 把整个集合拼接起来return StringUtils.join(",", dishes);}

OrderDetailMapper:

@Select("select * from order_detail where order_id = #{orderId}")List<OrderDetail> listByOrderId(Long OrderId);

2. 各个状态的订单数量统计

 OrderController:

    @GetMapping("/statistics")public Result<OrderStatisticsVO > statistics(){log.info("各个状态的订单数量统计");return Result.success(orderService.getOrderStatistics());}

OrderService:

 OrderStatisticsVO getOrderStatistics();

OrderDetailMapper:

    public OrderStatisticsVO getOrderStatistics(){Integer toBeConfirmed = ordersMapper.getStatistics(Orders.TO_BE_CONFIRMED);Integer confirmed = ordersMapper.getStatistics(Orders.CONFIRMED);Integer deliveryInProgress = ordersMapper.getStatistics(Orders.DELIVERY_IN_PROGRESS);return OrderStatisticsVO.builder().toBeConfirmed(toBeConfirmed).confirmed(confirmed).deliveryInProgress(deliveryInProgress).build();}

3 需求分析和设计

基本信息

Path: /admin/order/details/{id}

Method: GET

接口描述:

请求参数
路径参数

参数名称

示例

备注

id

101

订单id

返回数据
名称类型是否必须默认值备注其他信息
codeinteger必须

format: int32

dataobject非必须
├─ addressstring非必须
├─ addressBookIdinteger非必须

format: int64

├─ amountnumber非必须
├─ cancelReasonstring非必须
├─ cancelTimestring非必须

format: date-time

├─ checkoutTimestring非必须

format: date-time

├─ consigneestring非必须
├─ deliveryStatusinteger非必须

format: int32

├─ deliveryTimestring非必须

format: date-time

├─ estimatedDeliveryTimestring非必须

format: date-time

├─ idinteger非必须

format: int64

├─ numberstring非必须
├─ orderDetailListobject []非必须

item 类型: object

├─ amountnumber非必须
├─ dishFlavorstring非必须
├─ dishIdinteger非必须

format: int64

├─ idinteger非必须

format: int64

├─ imagestring非必须
├─ namestring非必须
├─ numberinteger非必须

format: int32

├─ orderIdinteger非必须

format: int64

├─ setmealIdinteger非必须

format: int64

├─ orderDishesstring非必须
├─ orderTimestring非必须

format: date-time

├─ packAmountinteger非必须

format: int32

├─ payMethodinteger非必须

format: int32

├─ payStatusinteger非必须

format: int32

├─ phonestring非必须
├─ rejectionReasonstring非必须
├─ remarkstring非必须
├─ statusinteger非必须

format: int32

├─ tablewareNumberinteger非必须

format: int32

├─ tablewareStatusinteger非必须

format: int32

├─ userIdinteger非必须

format: int64

├─ userNamestring非必须
msgstring非必须

业务规则:

  • 订单详情页面需要展示订单基本信息(状态、订单号、下单时间、收货人、电话、收货地址、金额等)

  • 订单详情页面需要展示订单明细数据(商品名称、数量、单价)

这里之在写用户端的时候其实已经相当于写过了

现在只用写controllor层

   @GetMapping("details/{id}")public Result<OrderPageVO> details(@PathVariable  Long id) {log.info("订单详情查询");return Result.success(orderService.orderDetail(id));}

4.接单

基本信息

Path: /admin/order/confirm

Method: PUT

接口描述:
请求参数
Headers
参数名称参数值是否必须示例备注
Content-Typeapplication/json
Body
名称类型是否必须默认值备注其他信息
idinteger必须订单id

format: int64

返回数据
名称类型是否必须默认值备注其他信息
codeinteger必须

format: int32

dataobject非必须
msgstring非必须

业务规则:

  • 商家接单其实就是将订单的状态修改为“已接单”

 OrderController:

    /*** 接单** @return*/@PutMapping("/confirm")public Result confirm(@RequestBody OrdersConfirmDTO ordersConfirmDTO) {orderService.confirm(ordersConfirmDTO);return Result.success();}

OrderService:

 void confirm(OrdersConfirmDTO ordersConfirmDTO);

OrderServiceImpl:

    public void confirm(OrdersConfirmDTO ordersConfirmDTO) {Orders orders = new Orders();BeanUtils.copyProperties(ordersConfirmDTO, orders);ordersMapper.update(orders);}

OrdersMapper.xml:

    <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>

5.拒单

基本信息

Path: /admin/order/rejection

Method: PUT

接口描述:
请求参数

Headers

参数名称参数值是否必须示例备注
Content-Typeapplication/json
Body
名称类型是否必须默认值备注其他信息
idinteger必须订单id

format: int64

rejectionReasonstring必须拒单原因
返回数据
名称类型是否必须默认值备注其他信息
codeinteger必须

format: int32

dataobject非必须
msgstring非必须

业务规则:

  • 商家拒单其实就是将订单状态修改为“已取消”

  • 只有订单处于“待接单”状态时可以执行拒单操作

  • 商家拒单时需要指定拒单原因

  • 商家拒单时,如果用户已经完成了支付,需要为用户退款

 OrderController:.

    @PutMapping("/rejection")public Result rejection(@RequestBody OrdersCancelDTO ordersCancelDTO){log.info("拒单");orderService.rejection(ordersCancelDTO);return Result.success();

OrderService:

void rejection(OrdersCancelDTO ordersCancelDTO);

OrderServiceImpl:

   public void rejection(OrdersCancelDTO ordersCancelDTO){Orders orders = new Orders();/// 先获取到订单 这里我的是vo 但是并不影响  用order转换一下OrderPageVO  orderPageVO  = ordersMapper.getById(ordersCancelDTO.getId());BeanUtils.copyProperties(orderPageVO, orders);/// 先判断订单存在吗 再判断订单状态if (orders == null || !orders.getStatus().equals(Orders.TO_BE_CONFIRMED)) {throw new OrderBusinessException(MessageConstant.ORDER_STATUS_ERROR);}/// 是2 才处理if(orders.getPayStatus() == Orders.PAID){log.info("退款");orders.setPayStatus(Orders.REFUND);}orders.setCancelReason(ordersCancelDTO.getCancelReason());orders.setStatus(Orders.CANCELLED);orders.setCancelTime(LocalDateTime.now());ordersMapper.update(orders);}

OrdersMapper.xml:

    <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>

6.取消订单

基本信息

Path: /admin/order/cancel

Method: PUT

接口描述:
请求参数

Headers

参数名称参数值是否必须示例备注
Content-Typeapplication/json

Body

名称类型是否必须默认值备注其他信息
cancelReasonstring必须订单取消原因
idinteger必须订单id

format: int64

返回数据
名称类型是否必须默认值备注其他信息
codeinteger必须

format: int32

dataobject非必须
msgstring非必须

业务规则:

  • 取消订单其实就是将订单状态修改为“已取消”

  • 商家取消订单时需要指定取消原因

  • 商家取消订单时,如果用户已经完成了支付,需要为用户退款

其实跟上一个一模一样,还简单了些

 OrderController:

    /*** 取消订单** @return*/@PutMapping("/cancel")public Result cancel(@RequestBody OrdersCancelDTO ordersCancelDTO) throws Exception {orderService.admincancel(ordersCancelDTO);return Result.success();}

OrderService:

 void admincancel(OrdersCancelDTO ordersCancelDTO);

OrderServiceImpl:

 public void admincancel(OrdersCancelDTO ordersCancelDTO){Orders orders = new Orders();/// 先获取到订单 这里我的是vo 但是并不影响  用order转换一下OrderPageVO  orderPageVO  = ordersMapper.getById(ordersCancelDTO.getId());BeanUtils.copyProperties(orderPageVO, orders);/// 先判断订单存在吗if (orders == null ) {throw new OrderBusinessException(MessageConstant.ORDER_STATUS_ERROR);}if(orders.getPayStatus() == Orders.PAID){log.info("退款");orders.setPayStatus(Orders.REFUND);}orders.setCancelReason(ordersCancelDTO.getCancelReason());orders.setStatus(Orders.CANCELLED);orders.setCancelTime(LocalDateTime.now());ordersMapper.update(orders);}

OrdersMapper.xml:

    <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>

7.派送订单

基本信息

Path: /admin/order/delivery/{id}

Method: PUT

接口描述:
请求参数
路径参数

参数名称

示例

备注

id

101

订单id

返回数据
名称类型是否必须默认值备注其他信息
codeinteger必须

format: int32

dataobject非必须
msgstring非必须

 OrderController:

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

OrderService:

void delivery(Long id);

OrderServiceImpl:

    public void delivery(Long id) {Orders orders = new Orders();/// 先获取到订单 这里我的是vo 但是并不影响  用order转换一下// 根据id查询订单OrderPageVO  orderPageVO = ordersMapper.getById(id);BeanUtils.copyProperties(orderPageVO, orders);// 校验订单是否存在,并且状态为3if (orders == null || !orders.getStatus().equals(Orders.CONFIRMED)) {throw new OrderBusinessException(MessageConstant.ORDER_STATUS_ERROR);}// 更新订单状态,状态转为派送中orders.setStatus(Orders.DELIVERY_IN_PROGRESS);ordersMapper.update(orders);}

OrdersMapper.xml:

    <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>

 

8.完成订单

基本信息

Path: /admin/order/complete/{id}

Method: PUT

接口描述:
请求参数
Headers

参数名称

参数值

是否必须

示例

备注

Content-Type

application/json

路径参数

参数名称

示例

备注

id

101

订单id

返回数据
名称类型是否必须默认值备注其他信息
codeinteger必须

format: int32

dataobject非必须
msgstring非必须

OrderController:

  @PutMapping("/complete/{id}")public Result complete(@PathVariable("id") Long id) {orderService.complete(id);return Result.success();}

OrderService:

 void complete(Long id);

OrderServiceImpl:

  public void complete(Long id) {// 根据id查询订单Orders orders = new Orders();/// 先获取到订单 这里我的是vo 但是并不影响  用order转换一下// 根据id查询订单OrderPageVO  orderPageVO = ordersMapper.getById(id);BeanUtils.copyProperties(orderPageVO, orders);// 校验订单是否存在,并且状态为4if (orders == null || !orders.getStatus().equals(Orders.DELIVERY_IN_PROGRESS)) {throw new OrderBusinessException(MessageConstant.ORDER_STATUS_ERROR);}// 更新订单状态,状态转为完成orders.setStatus(Orders.COMPLETED);orders.setDeliveryTime(LocalDateTime.now());ordersMapper.update(orders);}

OrdersMapper.xml:

    <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>

总结:

第九天的订单作业还是很值的一做的,很有锻炼意义

http://www.dtcms.com/a/462411.html

相关文章:

  • mysql大表批量查询中IN vs JOIN vs CTE 性能实验
  • Cryptomator:免费的加密工具,
  • 逐位加|二分
  • 外贸行业网站推广wordpress galleria
  • 没技术怎么做网站湛江的高铁站建在哪里
  • MySQL 中数据完整性约束、外键管理(含级联策略) 和多表查询
  • 做效果图的网站有哪些软件有哪些wordpress漂浮
  • 为什么ffmpeg进行视频合成有时长误差
  • 做旅游销售网站平台ppt百度的域名
  • 网站建营销型企业网站有哪些类型
  • 2008服务器网站专门做定制的网站
  • 【软件设计师中级】计算机组成与结构(四):总线系统 - 计算机的“高速公路网络“
  • 专注服务于站长和网站的信息平台.网站建设需要学ps吗
  • 视频直播点播平台EasyDSS推拉流技术结合无人机推流在道路交通巡检场景中的应用
  • 涂鸦T5AI开发板直播互动游戏控制器实现方案【全开源】
  • Spring Boot 应用启动机制详解
  • 河南省建设工程造价协会网站joomla 2.5:你的网站建设_使用与管理 pdf
  • 只有通过Motor 获取 mongodb的collection,才能正常使用 async with collection.watch()监听集合变更
  • 做一个网站 如何盈利网站开发一般用什么软件有哪些
  • 能够完美“适配”不同传感器的语音芯片WT2003H
  • 怎样建设网站的步骤网站建设中js控制什么
  • 陇南地网站建设黄骅市有什么好玩的地方
  • 零基础从头教学Linux(Day 46)
  • RK3588从数据集到训练到部署YoloV8
  • 网站商城建设价格做网站的一定要开80或8080端口
  • STranslate(翻译工具OCR工具) 中文绿色版
  • 算法学习 || 动态规划(买卖股票的最佳时机2)
  • 网站常用图标素材哈尔滨手机网站建设
  • 各种爬虫框架及其特点
  • 架设网站多少钱郑州汉狮做网站的大公司