From d24c17e1a9e9b2ee786987ab546ec58119da5ac1 Mon Sep 17 00:00:00 2001 From: Bunny <1319900154@qq.com> Date: Wed, 10 Jan 2024 10:49:58 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E4=B8=8B=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 4 +- sky-server/pom.xml | 4 +- .../sky/controller/admin/orderController.java | 11 ++ .../sky/controller/user/OrderController.java | 38 ++++++ .../com/sky/mapper/OrderDetailMapper.java | 16 +++ .../main/java/com/sky/mapper/OrderMapper.java | 10 ++ .../java/com/sky/service/OrderService.java | 14 +++ .../sky/service/impl/OrderServiceImpl.java | 112 ++++++++++++++++++ .../resources/mapper/OrderDetailMapper.xml | 14 +++ .../src/main/resources/mapper/OrderMapper.xml | 16 +++ 10 files changed, 235 insertions(+), 4 deletions(-) create mode 100644 sky-server/src/main/java/com/sky/controller/admin/orderController.java 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/pom.xml b/pom.xml index b10da2e..6fa1428 100644 --- a/pom.xml +++ b/pom.xml @@ -1,6 +1,6 @@ - 4.0.0 diff --git a/sky-server/pom.xml b/sky-server/pom.xml index 2049733..24e5c57 100644 --- a/sky-server/pom.xml +++ b/sky-server/pom.xml @@ -1,6 +1,6 @@ - sky-take-out diff --git a/sky-server/src/main/java/com/sky/controller/admin/orderController.java b/sky-server/src/main/java/com/sky/controller/admin/orderController.java new file mode 100644 index 0000000..a94a5bc --- /dev/null +++ b/sky-server/src/main/java/com/sky/controller/admin/orderController.java @@ -0,0 +1,11 @@ +package com.sky.controller.admin; + +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController("adminOrderController") +@RequestMapping("/admin/order") +@Api(tags = "管理端订单接口") +public class orderController { +} 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..a42749b --- /dev/null +++ b/sky-server/src/main/java/com/sky/controller/user/OrderController.java @@ -0,0 +1,38 @@ +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.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; + +import javax.annotation.Resource; + +@RestController("userOrderController") +@RequestMapping("/user/order") +@Api(tags = "用户端订单相关接口") +@Slf4j +public class OrderController { + @Resource + private OrderService orderService; + + /** + * 用户下单 + * + * @param ordersSubmitDTO 订单请求数据 + * @return Result + */ + @ApiOperation("用户下单") + @PostMapping("/submit") + 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..a69640c --- /dev/null +++ b/sky-server/src/main/java/com/sky/mapper/OrderDetailMapper.java @@ -0,0 +1,16 @@ +package com.sky.mapper; + +import com.sky.entity.OrderDetail; +import org.apache.ibatis.annotations.Mapper; + +import java.util.ArrayList; + +@Mapper +public interface OrderDetailMapper { + /** + * 批量插入订单明细数据 + * + * @param orderDetailArrayList ArrayList + */ + void insertBatch(ArrayList orderDetailArrayList); +} 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..12da6fe --- /dev/null +++ b/sky-server/src/main/java/com/sky/mapper/OrderMapper.java @@ -0,0 +1,10 @@ +package com.sky.mapper; + +import com.sky.entity.Orders; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface OrderMapper { + // 向订单中插入1条数据 + 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..7ca2408 --- /dev/null +++ b/sky-server/src/main/java/com/sky/service/OrderService.java @@ -0,0 +1,14 @@ +package com.sky.service; + +import com.sky.dto.OrdersSubmitDTO; +import com.sky.vo.OrderSubmitVO; + +public interface OrderService { + /** + * 用户下单 + * + * @param ordersSubmitDTO 用户下单请求数据 + * @return OrderSubmitVO + */ + 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..4ea4ec6 --- /dev/null +++ b/sky-server/src/main/java/com/sky/service/impl/OrderServiceImpl.java @@ -0,0 +1,112 @@ +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.service.OrderService; +import com.sky.vo.OrderSubmitVO; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + +@Service +public class OrderServiceImpl implements OrderService { + @Resource + private OrderMapper orderMapper; + @Resource + private OrderDetailMapper orderDetailMapper; + @Resource + private AddressBookMapper addressBookMapper; + @Resource + private ShoppingCartMapper shoppingCartMapper; + + /** + * 用户下单 + * + * @param ordersSubmitDTO 用户下单请求数据 + * @return OrderSubmitVO + */ + @Override + @Transactional + public OrderSubmitVO submitOrder(OrdersSubmitDTO ordersSubmitDTO) { + // 处理各种异常 (地址簿为空,购物车为空) + AddressBook addressBook = addressBookMapper.getById(ordersSubmitDTO.getAddressBookId()); + if (addressBook == null) { + // 抛出异常,购物车为空 + throw new AddressBookBusinessException(MessageConstant.ADDRESS_BOOK_IS_NULL); + } + + // 1. 查询当前用户的购物车数据 + ShoppingCart shoppingCart = new ShoppingCart(); + Long currentId = BaseContext.getCurrentId(); + shoppingCart.setUserId(currentId); + List shoppingCartList = shoppingCartMapper.list(shoppingCart); + if (shoppingCartList == null || shoppingCartList.isEmpty()) { + throw new ShoppingCartBusinessException(MessageConstant.SHOPPING_CART_IS_NULL); + } + + // 2. 向订单中插入1条数据 + 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.getConsignee()); + orders.setUserId(currentId); + orderMapper.insert(orders); + + ArrayList orderDetailArrayList = new ArrayList<>(); + // 3. 向订单数据插入n条数据 + for (ShoppingCart cart : shoppingCartList) { + OrderDetail orderDetail = new OrderDetail(); + BeanUtils.copyProperties(cart, orderDetail); + orderDetail.setOrderId(orders.getId()); + orderDetailArrayList.add(orderDetail); + } + orderDetailMapper.insertBatch(orderDetailArrayList); + + // 4. 清空当前用户购物车数据 + shoppingCartMapper.deleteByUserId(currentId); + // 5. 封装返回结果 + return OrderSubmitVO.builder() + .id(orders.getId()) + .orderTime(orders.getOrderTime()) + .orderNumber(orders.getNumber()) + .orderAmount(orders.getAmount()).build(); + } +} + + + + + + + + + + + + + + + + + + + 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..a0ba0a9 --- /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..d747cc8 --- /dev/null +++ b/sky-server/src/main/resources/mapper/OrderMapper.xml @@ -0,0 +1,16 @@ + + + + + + + insert into orders (number, status, user_id, address_book_id, order_time, checkout_time, pay_method, + pay_status, amount, remark, phone, address, user_name, consignee, cancel_reason, + rejection_reason, cancel_time, estimated_delivery_time, delivery_status, delivery_time, + pack_amount, tableware_number, tableware_status) + values (#{number}, #{status}, #{userId}, #{addressBookId}, #{orderTime}, #{checkoutTime}, #{payMethod}, + #{payStatus}, #{amount}, #{remark}, #{phone}, #{address}, #{userName}, #{consignee}, #{cancelReason}, + #{rejectionReason}, #{cancelTime}, #{estimatedDeliveryTime}, #{deliveryStatus}, #{deliveryTime}, + #{packAmount}, #{tablewareNumber}, #{tablewareStatus}); + +