From 01b8c0f93572190a8115cf7fada65b99d76b0758 Mon Sep 17 00:00:00 2001 From: zvv <508748680@qq.com> Date: Thu, 2 Apr 2026 20:46:26 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E4=B8=8B=E5=8D=95=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E4=BB=A3=E7=A0=81=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sky/controller/user/OrderController.java | 35 ++++++ .../com/sky/mapper/OrderDetailMapper.java | 18 +++ .../main/java/com/sky/mapper/OrderMapper.java | 15 +++ .../java/com/sky/service/OrderService.java | 17 +++ .../sky/service/impl/OrderServiceImpl.java | 106 ++++++++++++++++++ .../resources/mapper/OrderDetailMapper.xml | 14 +++ .../src/main/resources/mapper/OrderMapper.xml | 14 +++ 7 files changed, 219 insertions(+) create mode 100644 sky-server/src/main/java/com/sky/controller/user/OrderController.java create mode 100644 sky-server/src/main/java/com/sky/mapper/OrderDetailMapper.java create mode 100644 sky-server/src/main/java/com/sky/mapper/OrderMapper.java create mode 100644 sky-server/src/main/java/com/sky/service/OrderService.java create mode 100644 sky-server/src/main/java/com/sky/service/impl/OrderServiceImpl.java create mode 100644 sky-server/src/main/resources/mapper/OrderDetailMapper.xml create mode 100644 sky-server/src/main/resources/mapper/OrderMapper.xml diff --git a/sky-server/src/main/java/com/sky/controller/user/OrderController.java b/sky-server/src/main/java/com/sky/controller/user/OrderController.java new file mode 100644 index 0000000..89e81bf --- /dev/null +++ b/sky-server/src/main/java/com/sky/controller/user/OrderController.java @@ -0,0 +1,35 @@ +package com.sky.controller.user; + + +import com.sky.dto.OrdersSubmitDTO; +import com.sky.result.Result; +import com.sky.service.OrderService; +import com.sky.vo.OrderSubmitVO; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + + +@RestController("userOrderController") +@RequestMapping("/user/order") +@Api(tags = "用户端订单相关接口") +@Slf4j +public class OrderController { + + @Autowired + private OrderService orderService; + + + @PostMapping("/submit") + @ApiOperation("用户下单接口") + public Result submit(@RequestBody OrdersSubmitDTO ordersSubmitDTO){ + log.info("用户下单,参数为{}", ordersSubmitDTO); + OrderSubmitVO orderSubmitVO = orderService.submitOrder(ordersSubmitDTO); + return Result.success(orderSubmitVO); + } +} diff --git a/sky-server/src/main/java/com/sky/mapper/OrderDetailMapper.java b/sky-server/src/main/java/com/sky/mapper/OrderDetailMapper.java new file mode 100644 index 0000000..76aba24 --- /dev/null +++ b/sky-server/src/main/java/com/sky/mapper/OrderDetailMapper.java @@ -0,0 +1,18 @@ +package com.sky.mapper; + + +import com.sky.entity.OrderDetail; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface OrderDetailMapper { + + + /** + * 批量插入订单明细数据 + * @param orderDetailList + */ + void insertBatch(List orderDetailList); +} diff --git a/sky-server/src/main/java/com/sky/mapper/OrderMapper.java b/sky-server/src/main/java/com/sky/mapper/OrderMapper.java new file mode 100644 index 0000000..0581a37 --- /dev/null +++ b/sky-server/src/main/java/com/sky/mapper/OrderMapper.java @@ -0,0 +1,15 @@ +package com.sky.mapper; + + +import com.sky.entity.Orders; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface OrderMapper { + + /** + * 插入订单数据 + * @param orders + */ + void insert(Orders orders); +} diff --git a/sky-server/src/main/java/com/sky/service/OrderService.java b/sky-server/src/main/java/com/sky/service/OrderService.java new file mode 100644 index 0000000..5bc6a12 --- /dev/null +++ b/sky-server/src/main/java/com/sky/service/OrderService.java @@ -0,0 +1,17 @@ +package com.sky.service; + +import com.sky.dto.OrdersSubmitDTO; +import com.sky.vo.OrderSubmitVO; + + + + +public interface OrderService { + + /** + * 用户下单 + * @param ordersSubmitDTO + * @return + */ + OrderSubmitVO submitOrder(OrdersSubmitDTO ordersSubmitDTO); +} diff --git a/sky-server/src/main/java/com/sky/service/impl/OrderServiceImpl.java b/sky-server/src/main/java/com/sky/service/impl/OrderServiceImpl.java new file mode 100644 index 0000000..d971587 --- /dev/null +++ b/sky-server/src/main/java/com/sky/service/impl/OrderServiceImpl.java @@ -0,0 +1,106 @@ +package com.sky.service.impl; + +import com.sky.constant.MessageConstant; +import com.sky.context.BaseContext; +import com.sky.dto.OrdersSubmitDTO; +import com.sky.entity.AddressBook; +import com.sky.entity.OrderDetail; +import com.sky.entity.Orders; +import com.sky.entity.ShoppingCart; +import com.sky.exception.AddressBookBusinessException; +import com.sky.exception.ShoppingCartBusinessException; +import com.sky.mapper.AddressBookMapper; +import com.sky.mapper.OrderDetailMapper; +import com.sky.mapper.OrderMapper; +import com.sky.mapper.ShoppingCartMapper; +import com.sky.result.Result; +import com.sky.service.OrderService; +import com.sky.service.UserService; +import com.sky.vo.OrderSubmitVO; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + + +@Service +public class OrderServiceImpl implements OrderService { + + @Autowired + private OrderMapper orderMapper; + @Autowired + private OrderDetailMapper orderDetailMapper; + @Autowired + private AddressBookMapper addressBookMapper; + @Autowired + private ShoppingCartMapper shoppingCartMapper; + + /** + * 用户下单 + * @param ordersSubmitDTO + * @return + */ + @Override + @Transactional + public OrderSubmitVO submitOrder(OrdersSubmitDTO ordersSubmitDTO) { + + //首先处理业务异常(地址簿为空 购物车数据为空) + + //地址簿为空 + AddressBook addressBook = addressBookMapper.getById(ordersSubmitDTO.getAddressBookId()); + if(addressBook==null){ + throw new AddressBookBusinessException(MessageConstant.ADDRESS_BOOK_IS_NULL); + } + + + //购物车为空 + Long userId = BaseContext.getCurrentId(); + ShoppingCart shoppingCart = new ShoppingCart(); + shoppingCart.setUserId(userId); + List shoppingCartList = shoppingCartMapper.list(shoppingCart); + if(shoppingCartList==null || shoppingCartList.size()==0){ + throw new ShoppingCartBusinessException(MessageConstant.SHOPPING_CART_IS_NULL); + } + + //向订单表插入一条数据 + Orders orders = new Orders(); + BeanUtils.copyProperties(ordersSubmitDTO,orders); + orders.setOrderTime(LocalDateTime.now()); + orders.setPayStatus(Orders.UN_PAID); + orders.setStatus(Orders.PENDING_PAYMENT); + orders.setNumber(String.valueOf(System.currentTimeMillis())); //使用时间戳作为订单号 + orders.setPhone(addressBook.getPhone()); + orders.setConsignee(addressBook.getConsignee()); + orders.setUserId(userId); + + orderMapper.insert(orders); + + List orderDetailList = new ArrayList<>(); + //向订单明细表插入多条数据 + for(ShoppingCart cart:shoppingCartList){ + OrderDetail orderDetail = new OrderDetail(); + BeanUtils.copyProperties(cart,orderDetail); + orderDetail.setOrderId(orders.getId()); //设置当前订单明细关联的订单id + orderDetailList.add(orderDetail); + } + //批量插入 + orderDetailMapper.insertBatch(orderDetailList); + + //清空当前用户的购物车数据 + shoppingCartMapper.deleteByUserId(userId); + + //封装VO返回结果 + OrderSubmitVO orderSubmitVO = OrderSubmitVO.builder() + .id(orders.getId()) + .orderTime(orders.getOrderTime()) + .orderNumber(orders.getNumber()) + .orderAmount(orders.getAmount()) + .build(); + + return orderSubmitVO; + } +} diff --git a/sky-server/src/main/resources/mapper/OrderDetailMapper.xml b/sky-server/src/main/resources/mapper/OrderDetailMapper.xml new file mode 100644 index 0000000..26e1671 --- /dev/null +++ b/sky-server/src/main/resources/mapper/OrderDetailMapper.xml @@ -0,0 +1,14 @@ + + + + + + + insert into order_detail (name, image, order_id, dish_id, setmeal_id, dish_flavor, number, amount) + values + + (#{od.name}, #{od.image}, #{od.orderId},#{od.dishId},#{od.setmealId},#{od.dishFlavor},#{od.number}, #{od.amount}) + + + diff --git a/sky-server/src/main/resources/mapper/OrderMapper.xml b/sky-server/src/main/resources/mapper/OrderMapper.xml new file mode 100644 index 0000000..94d940a --- /dev/null +++ b/sky-server/src/main/resources/mapper/OrderMapper.xml @@ -0,0 +1,14 @@ + + + + + + + insert into orders (number, status, user_id, address_book_id, order_time, checkout_time, pay_method, pay_status, amount, remark, phone, address, consignee, estimated_delivery_time, delivery_status, pack_amount, tableware_number, tableware_status) + values + (#{number}, #{status}, #{userId}, #{addressBookId}, #{orderTime}, #{checkoutTime}, + #{payMethod}, #{payStatus}, #{amount}, #{remark}, #{phone}, #{address}, + #{consignee}, #{estimatedDeliveryTime}, #{deliveryStatus}, #{packAmount}, #{tablewareNumber}, #{tablewareStatus}) + +