OrderController代码
@RestController("userOrderController")
@RequestMapping("/user/order")
@Api(tags = "用户端订单相关接口")
@Slf4j
public class OrderController {
@Autowired
private OrderService orderService;
/**
* 用户下单
* @param ordersSubmitDTO
* @return
*/
@PostMapping("/submit")
@ApiOperation("用户下单")
public Result<OrderSubmitVO> submit(@RequestBody OrdersSubmitDTO ordersSubmitDTO){
log.info("用户下单,参数为:{}",ordersSubmitDTO);
OrderSubmitVO orderSubmitVO = orderService.submitOrder(ordersSubmitDTO);
return Result.success(orderSubmitVO);
}
}
OrderService代码
public interface OrderService {
/**
* 用户下单
* @param ordersSubmitDTO
* @return
*/
OrderSubmitVO submitOrder(OrdersSubmitDTO ordersSubmitDTO);
}
OrderServiceImpl代码
@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 */ @Transactional public OrderSubmitVO submitOrder(OrdersSubmitDTO ordersSubmitDTO) { //1、处理各种业务异常(地址簿为空,购物车数据为空) 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<ShoppingCart> shoppingCartList = shoppingCartMapper.list(shoppingCart); if(shoppingCartList == null || shoppingCartList.size() == 0 ){ //抛出业务异常 throw new ShoppingCartBusinessException(MessageConstant.SHOPPING_CART_IS_NULL); } //2、向订单表插入一条数据 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.setAddress(addressBook.getProvinceName() + addressBook.getCityName() + addressBook.getDistrictName()+addressBook.getDetail()); orders.setUserId(userId); orderMapper.insert(orders); List<OrderDetail> orderDetailList = new ArrayList<>(); //3、向订单明细表插入n条数据 for (ShoppingCart cart : shoppingCartList) { OrderDetail orderDetail = new OrderDetail(); //订单明细 BeanUtils.copyProperties(cart,orderDetail); orderDetail.setOrderId(orders.getId()); //设置当前订单明细关联的订单id orderDetailList.add(orderDetail); } orderDetailMapper.insertBatch(orderDetailList); //4、清空当前用户的购物车数据 shoppingCartMapper.cleanShoppingCart(userId); //5、封装VO返回结果 OrderSubmitVO orderSubmitVO = OrderSubmitVO.builder() .id(orders.getId()) .orderNumber(orders.getNumber()) .orderTime(orders.getOrderTime()) .orderAmount(orders.getAmount()) .build(); return orderSubmitVO; } }
OrderMapper代码
@Mapper public interface OrderMapper { /** * 插入订单数据 * @param orders */ void insert(Orders orders); }
OrderMapper.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.OrderDetailMapper"> <insert id="insertBatch"> insert into order_detail (name , image, order_id, dish_id, setmeal_id, dish_flavor, number, amount) values <foreach collection="orderDetailList" item="od" separator=","> (#{od.name}, #{od.image}, #{od.orderId},#{od.dishId},#{od.setmealId},#{od.dishFlavor},#{od.number},#{od.amount}) </foreach> </insert> </mapper>
OrderDetailMapper代码
@Mapper public interface OrderDetailMapper { /** * 批量插入订单明细数据 * @param orderDetailList */ void insertBatch(List<OrderDetail> orderDetailList); }
OrderDetailMapper.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.OrderMapper"> <insert id="insert" useGeneratedKeys="true" keyProperty="id"> 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}) </insert> </mapper>