From bafbea94df3dd8e74a58faee8ef6c859d2b1e32f Mon Sep 17 00:00:00 2001 From: xuxin <840198532@qq.com> Date: Tue, 25 Nov 2025 14:22:59 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8B=8D=E7=A9=B9=E5=A4=96=E5=8D=96--=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E4=B8=8B=E5=8D=95=E5=8A=9F=E8=83=BD=E5=AE=9E=E7=8E=B0?= 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 | 16 +++ .../main/java/com/sky/mapper/OrderMapper.java | 19 ++++ .../java/com/sky/service/OrderService.java | 13 +++ .../sky/service/impl/OrderServiceImpl.java | 100 ++++++++++++++++++ .../resources/mapper/OrderDetailMapper.xml | 10 ++ .../src/main/resources/mapper/OrderMapper.xml | 4 + 7 files changed, 197 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..601deb9 --- /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 +@Slf4j +@RequestMapping("/user/order") +@Api(tags = "用户端订单相关的接口") +public class OrderController { + + @Autowired + private OrderService orderService; + + + @PostMapping("/submit") + @ApiOperation("用户下单") + public Result submit(@RequestBody OrdersSubmitDTO ordersSubmitDTO) { + log.info("用户下单:{}",ordersSubmitDTO); + //调用业务端接口 + OrderSubmitVO orderSubmitVO = orderService.submit(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..ee7a2e8 --- /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 org.springframework.beans.factory.annotation.Autowired; + +import java.util.ArrayList; + +@Mapper +public interface OrderDetailMapper { + /** + * 订单明细表,批量插入 + * @param orderDetailList + */ + void insertBatch(ArrayList 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..6d54d4d --- /dev/null +++ b/sky-server/src/main/java/com/sky/mapper/OrderMapper.java @@ -0,0 +1,19 @@ +package com.sky.mapper; + +import com.sky.entity.Orders; +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Options; + +@Mapper +public interface OrderMapper { + + @Insert("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})") + @Options(useGeneratedKeys = true,keyProperty = "id") + 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..d91a8ec --- /dev/null +++ b/sky-server/src/main/java/com/sky/service/OrderService.java @@ -0,0 +1,13 @@ +package com.sky.service; + +import com.sky.dto.OrdersSubmitDTO; +import com.sky.vo.OrderSubmitVO; + +public interface OrderService { + /** + * 用户下单 + * @param ordersSubmitDTO + * @return + */ + OrderSubmitVO submit(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..2daff5d --- /dev/null +++ b/sky-server/src/main/java/com/sky/service/impl/OrderServiceImpl.java @@ -0,0 +1,100 @@ +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.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 AddressBookMapper addressBookMapper; + + @Autowired + private ShoppingCartMapper shoppingCartMapper; + + @Autowired + private OrderDetailMapper orderDetailMapper; + + /** + * 用户下单 + * @param ordersSubmitDTO + * @return + */ + @Transactional //让订单表 订单明细表 购物车表的sql操作同时成功或失败 + @Override + public OrderSubmitVO submit(OrdersSubmitDTO ordersSubmitDTO) { + //1.处理各种业务异常(地址簿为空,购物车中数据为空) + AddressBook addressBook = addressBookMapper.getById(ordersSubmitDTO.getAddressBookId()); + if (addressBook == null) { + throw new AddressBookBusinessException(MessageConstant.ADDRESS_BOOK_IS_NULL); + } + ShoppingCart cart = new ShoppingCart(); + cart.setUserId(BaseContext.getCurrentId()); + List cartList = shoppingCartMapper.list(cart); + if (cartList == null || cartList.size() == 0) { + throw new ShoppingCartBusinessException(MessageConstant.SHOPPING_CART_IS_NULL); + } + + //2.向订单表orders中插入一条数据 + 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(BaseContext.getCurrentId()); + orders.setAddress(addressBook.getProvinceName()+addressBook.getCityName()+addressBook.getDistrictName()+addressBook.getDetail());//详细地址:省市区+地址 + + orderMapper.insert(orders); + + //3.向订单明细表插入N条商品明细记录 + ArrayList orderDetails = new ArrayList<>();//订单明细集合 + for (ShoppingCart shoppingCart : cartList) { + OrderDetail orderDetail = new OrderDetail(); + BeanUtils.copyProperties(shoppingCart,orderDetail); + //动态设置订单明细属于哪个订单 + orderDetail.setOrderId(orders.getId()); + orderDetails.add(orderDetail); + } + + //批量插入数据 + orderDetailMapper.insertBatch(orderDetails); + + //4.清空当前用户的购物车数据 + shoppingCartMapper.deleteByUserId(BaseContext.getCurrentId()); + + //5.封装一个标准OrderSubmitVO返回给前端显示内容 + OrderSubmitVO submitVO = OrderSubmitVO.builder() + .id(orders.getId()) + .orderNumber(orders.getNumber()) + .orderAmount(orders.getAmount()) + .orderTime(orders.getOrderTime()).build(); + return submitVO; + } +} 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..28b8476 --- /dev/null +++ b/sky-server/src/main/resources/mapper/OrderDetailMapper.xml @@ -0,0 +1,10 @@ + + + + + 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}) + + + \ 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..800dd6e --- /dev/null +++ b/sky-server/src/main/resources/mapper/OrderMapper.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file