From 79587613d862fe0cc764e3bb20fd03e79acb5cee Mon Sep 17 00:00:00 2001 From: slhaf Date: Mon, 23 Dec 2024 22:40:42 +0800 Subject: [PATCH] submit order --- .../sky/controller/user/OrderController.java | 30 ++++++ .../com/sky/mapper/AddressBookMapper.java | 3 + .../com/sky/mapper/OrderDetailMapper.java | 16 ++++ .../main/java/com/sky/mapper/OrderMapper.java | 10 ++ .../com/sky/mapper/ShoppingCartMapper.java | 7 ++ .../java/com/sky/service/OrderService.java | 16 ++++ .../sky/service/impl/OrderServiceImpl.java | 93 +++++++++++++++++++ .../resources/mapper/OrderDetailMapper.xml | 14 +++ .../src/main/resources/mapper/OrderMapper.xml | 17 ++++ 9 files changed, 206 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..540cab4 --- /dev/null +++ b/sky-server/src/main/java/com/sky/controller/user/OrderController.java @@ -0,0 +1,30 @@ +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 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") +@Slf4j +@Api(tags = "Order-Controller") +public class OrderController { + + @Autowired + private OrderService orderService; + + @PostMapping("/submit") + public Result submit(@RequestBody OrdersSubmitDTO ordersSubmitDTO) { + log.info("order submit: {}", ordersSubmitDTO); + OrderSubmitVO orderSubmitVO = orderService.submitOrder(ordersSubmitDTO); + return Result.success(orderSubmitVO); + } +} diff --git a/sky-server/src/main/java/com/sky/mapper/AddressBookMapper.java b/sky-server/src/main/java/com/sky/mapper/AddressBookMapper.java index 410b0f6..70448c9 100644 --- a/sky-server/src/main/java/com/sky/mapper/AddressBookMapper.java +++ b/sky-server/src/main/java/com/sky/mapper/AddressBookMapper.java @@ -24,4 +24,7 @@ public interface AddressBookMapper { @Update("update sky_take_out.address_book set is_default = 1 where id = #{id}") void updateDefault(Long id); + + @Select("select * from sky_take_out.address_book where id = #{addressBookId}") + AddressBook getById(Long addressBookId); } 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..3c7c6aa --- /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.List; + +@Mapper +public interface OrderDetailMapper { + + /** + * insert order details into table order_detail + * @param orderDetails + */ + void insertBatch(List orderDetails); +} 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..a8f3b3c --- /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 { + + void insert(Orders orders); +} diff --git a/sky-server/src/main/java/com/sky/mapper/ShoppingCartMapper.java b/sky-server/src/main/java/com/sky/mapper/ShoppingCartMapper.java index 4627cd6..52c5e4e 100644 --- a/sky-server/src/main/java/com/sky/mapper/ShoppingCartMapper.java +++ b/sky-server/src/main/java/com/sky/mapper/ShoppingCartMapper.java @@ -51,4 +51,11 @@ public interface ShoppingCartMapper { * @param shoppingCart */ void delete(ShoppingCart shoppingCart); + + /** + * delete shopping cart by user id + * @param userId + */ + @Delete("delete from sky_take_out.shopping_cart where user_id = #{userId}") + void deleteByUserId(Long userId); } 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..d9bf54b --- /dev/null +++ b/sky-server/src/main/java/com/sky/service/OrderService.java @@ -0,0 +1,16 @@ +package com.sky.service; + +import com.sky.dto.OrdersSubmitDTO; +import com.sky.vo.OrderSubmitVO; +import org.springframework.stereotype.Service; + +@Service +public interface OrderService { + + /** + * submit order + * @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..06760b1 --- /dev/null +++ b/sky-server/src/main/java/com/sky/service/impl/OrderServiceImpl.java @@ -0,0 +1,93 @@ +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 lombok.extern.slf4j.Slf4j; +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 +@Slf4j +public class OrderServiceImpl implements OrderService { + + @Autowired + private OrderMapper orderMapper; + @Autowired + private AddressBookMapper addressBookMapper; + @Autowired + private ShoppingCartMapper shoppingCartMapper; + @Autowired + private OrderDetailMapper orderDetailMapper; + + @Override + @Transactional + public OrderSubmitVO submitOrder(OrdersSubmitDTO ordersSubmitDTO) { + //handle exception situation(address book is empty, shopping cart is empty) + 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 list = shoppingCartMapper.list(shoppingCart); + if (list == null || list.isEmpty()) { + throw new ShoppingCartBusinessException(MessageConstant.SHOPPING_CART_IS_NULL); + } + + //insert data into orders table + Orders orders = new Orders(); + BeanUtils.copyProperties(ordersSubmitDTO, orders); + orders.setUserId(userId); + orders.setOrderTime(LocalDateTime.now()); + orders.setPayStatus(Orders.UN_PAID); + orders.setStatus(Orders.PENDING_PAYMENT); + orders.setNumber(userId + "-" + System.currentTimeMillis()); + orders.setPhone(addressBook.getPhone()); + orders.setUserName(addressBook.getConsignee()); + orders.setAddress(addressBook.getDetail()); + + orderMapper.insert(orders); + + //insert data into data_detail table + List orderDetails = new ArrayList<>(); + for (ShoppingCart cart : list) { + OrderDetail orderDetail = new OrderDetail(); + BeanUtils.copyProperties(cart, orderDetail); + orderDetail.setOrderId(orders.getId()); + orderDetails.add(orderDetail); + } + orderDetailMapper.insertBatch(orderDetails); + + //clear the shopping cart of current user + shoppingCartMapper.deleteByUserId(userId); + + //construct OrderSubmitVO + 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..5cbf45d --- /dev/null +++ b/sky-server/src/main/resources/mapper/OrderDetailMapper.xml @@ -0,0 +1,14 @@ + + + + + + insert into sky_take_out.order_detail(name, image, order_id, dish_id, setmeal_id, dish_flavor, number, amount) + VALUES + + (#{orderDetail.name},#{orderDetail.image},#{orderDetail.orderId},#{orderDetail.dishId},#{orderDetail.setmealId},#{orderDetail.dishFlavor},#{orderDetail.number},#{orderDetail.amount}) + + + \ No newline at end of file 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..2a80403 --- /dev/null +++ b/sky-server/src/main/resources/mapper/OrderMapper.xml @@ -0,0 +1,17 @@ + + + + + + insert into sky_take_out.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}) + + \ No newline at end of file