From 1eeb4345973b95e50be06351078c0fbbc50163ae Mon Sep 17 00:00:00 2001 From: zhangsan <646228430@qq.com> Date: Tue, 23 Apr 2024 12:23:43 +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 --- .../user/AddressBookController.java | 116 ++++++++++++++++++ .../sky/controller/user/OrderController.java | 27 ++++ .../com/sky/mapper/AddressBookMapper.java | 56 +++++++++ .../com/sky/mapper/OrderDetailMapper.java | 11 ++ .../main/java/com/sky/mapper/OrderMapper.java | 9 ++ .../com/sky/service/AddressBookService.java | 20 +++ .../java/com/sky/service/OrderService.java | 8 ++ .../service/impl/AddressBookServiceImpl.java | 86 +++++++++++++ .../sky/service/impl/OrderServiceImpl.java | 90 ++++++++++++++ .../resources/mapper/AddressBookMapper.xml | 45 +++++++ .../resources/mapper/OrderDetailMapper.xml | 15 +++ .../src/main/resources/mapper/OrderMapper.xml | 15 +++ 12 files changed, 498 insertions(+) create mode 100644 sky-server/src/main/java/com/sky/controller/user/AddressBookController.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/AddressBookMapper.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/AddressBookService.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/AddressBookServiceImpl.java create mode 100644 sky-server/src/main/java/com/sky/service/impl/OrderServiceImpl.java create mode 100644 sky-server/src/main/resources/mapper/AddressBookMapper.xml 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/AddressBookController.java b/sky-server/src/main/java/com/sky/controller/user/AddressBookController.java new file mode 100644 index 0000000..ab86d88 --- /dev/null +++ b/sky-server/src/main/java/com/sky/controller/user/AddressBookController.java @@ -0,0 +1,116 @@ +package com.sky.controller.user; + +import com.sky.context.BaseContext; +import com.sky.entity.AddressBook; +import com.sky.result.Result; +import com.sky.service.AddressBookService; +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.*; +import java.util.List; + +@RestController +@RequestMapping("/user/addressBook") +@Slf4j +@Api(tags = "C端地址簿接口") +public class AddressBookController { + + @Autowired + private AddressBookService addressBookService; + + /** + * 查询当前登录用户的所有地址信息 + * + * @return + */ + @GetMapping("/list") + @ApiOperation("查询当前登录用户的所有地址信息") + public Result> list() { + log.info("列出地址"); + AddressBook addressBook = new AddressBook(); + addressBook.setUserId(BaseContext.getCurrentId()); + List list = addressBookService.list(addressBook); + return Result.success(list); + } + + /** + * 新增地址 + * + * @param addressBook + * @return + */ + @PostMapping + @ApiOperation("新增地址") + public Result save(@RequestBody AddressBook addressBook) { + addressBookService.save(addressBook); + return Result.success(); + } + + @GetMapping("/{id}") + @ApiOperation("根据id查询地址") + public Result getById(@PathVariable Long id) { + AddressBook addressBook = addressBookService.getById(id); + return Result.success(addressBook); + } + + /** + * 根据id修改地址 + * + * @param addressBook + * @return + */ + @PutMapping + @ApiOperation("根据id修改地址") + public Result update(@RequestBody AddressBook addressBook) { + addressBookService.update(addressBook); + return Result.success(); + } + + /** + * 设置默认地址 + * + * @param addressBook + * @return + */ + @PutMapping("/default") + @ApiOperation("设置默认地址") + public Result setDefault(@RequestBody AddressBook addressBook) { + addressBookService.setDefault(addressBook); + return Result.success(); + } + + /** + * 根据id删除地址 + * + * @param id + * @return + */ + @DeleteMapping + @ApiOperation("根据id删除地址") + public Result deleteById(Long id) { + addressBookService.deleteById(id); + return Result.success(); + } + + /** + * 查询默认地址 + */ + @GetMapping("default") + @ApiOperation("查询默认地址") + public Result getDefault() { + //SQL:select * from address_book where user_id = ? and is_default = 1 + AddressBook addressBook = new AddressBook(); + addressBook.setIsDefault(1); + addressBook.setUserId(BaseContext.getCurrentId()); + List list = addressBookService.list(addressBook); + + if (list != null && list.size() == 1) { + return Result.success(list.get(0)); + } + + return Result.error("没有查询到默认地址"); + } + +} 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..0a07a3b --- /dev/null +++ b/sky-server/src/main/java/com/sky/controller/user/OrderController.java @@ -0,0 +1,27 @@ +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 +@Api("用户订单相关接口") +@Slf4j +@RequestMapping("/user/order") +public class OrderController { + @Autowired + private OrderService orderService; + @PostMapping("/submit") + public Result submit(@RequestBody OrdersSubmitDTO ordersSubmitDTO){ + OrderSubmitVO orderSubmitVO=orderService.submit(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 new file mode 100644 index 0000000..b4fc021 --- /dev/null +++ b/sky-server/src/main/java/com/sky/mapper/AddressBookMapper.java @@ -0,0 +1,56 @@ +package com.sky.mapper; + +import com.sky.entity.AddressBook; +import org.apache.ibatis.annotations.*; +import java.util.List; + +@Mapper +public interface AddressBookMapper { + + /** + * 条件查询 + * @param addressBook + * @return + */ + List list(AddressBook addressBook); + + /** + * 新增 + * @param addressBook + */ + @Insert("insert into address_book" + + " (user_id, consignee, phone, sex, province_code, province_name, city_code, city_name, district_code," + + " district_name, detail, label, is_default)" + + " values (#{userId}, #{consignee}, #{phone}, #{sex}, #{provinceCode}, #{provinceName}, #{cityCode}, #{cityName}," + + " #{districtCode}, #{districtName}, #{detail}, #{label}, #{isDefault})") + void insert(AddressBook addressBook); + + /** + * 根据id查询 + * @param id + * @return + */ + @Select("select * from address_book where id = #{id}") + AddressBook getById(Long id); + + /** + * 根据id修改 + * @param addressBook + */ + void update(AddressBook addressBook); + + /** + * 根据 用户id修改 是否默认地址 + * @param addressBook + */ + @Update("update address_book set is_default = #{isDefault} where user_id = #{userId}") + void updateIsDefaultByUserId(AddressBook addressBook); + + /** + * 根据id删除地址 + * @param id + */ + @Delete("delete from address_book where id = #{id}") + void deleteById(Long id); + +} 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..e454065 --- /dev/null +++ b/sky-server/src/main/java/com/sky/mapper/OrderDetailMapper.java @@ -0,0 +1,11 @@ +package com.sky.mapper; + +import com.sky.entity.OrderDetail; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface OrderDetailMapper { + 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..012d959 --- /dev/null +++ b/sky-server/src/main/java/com/sky/mapper/OrderMapper.java @@ -0,0 +1,9 @@ +package com.sky.mapper; + +import com.sky.entity.Orders; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface OrderMapper { + void insert(Orders order); +} diff --git a/sky-server/src/main/java/com/sky/service/AddressBookService.java b/sky-server/src/main/java/com/sky/service/AddressBookService.java new file mode 100644 index 0000000..84afd77 --- /dev/null +++ b/sky-server/src/main/java/com/sky/service/AddressBookService.java @@ -0,0 +1,20 @@ +package com.sky.service; + +import com.sky.entity.AddressBook; +import java.util.List; + +public interface AddressBookService { + + List list(AddressBook addressBook); + + void save(AddressBook addressBook); + + AddressBook getById(Long id); + + void update(AddressBook addressBook); + + void setDefault(AddressBook addressBook); + + void deleteById(Long id); + +} 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..4f6a10b --- /dev/null +++ b/sky-server/src/main/java/com/sky/service/OrderService.java @@ -0,0 +1,8 @@ +package com.sky.service; + +import com.sky.dto.OrdersSubmitDTO; +import com.sky.vo.OrderSubmitVO; + +public interface OrderService { + OrderSubmitVO submit(OrdersSubmitDTO ordersSubmitDTO); +} diff --git a/sky-server/src/main/java/com/sky/service/impl/AddressBookServiceImpl.java b/sky-server/src/main/java/com/sky/service/impl/AddressBookServiceImpl.java new file mode 100644 index 0000000..5fd03a9 --- /dev/null +++ b/sky-server/src/main/java/com/sky/service/impl/AddressBookServiceImpl.java @@ -0,0 +1,86 @@ +package com.sky.service.impl; + +import com.sky.context.BaseContext; +import com.sky.entity.AddressBook; +import com.sky.mapper.AddressBookMapper; +import com.sky.service.AddressBookService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import java.util.List; + +@Service +@Slf4j +public class AddressBookServiceImpl implements AddressBookService { + @Autowired + private AddressBookMapper addressBookMapper; + + /** + * 条件查询 + * + * @param addressBook + * @return + */ + public List list(AddressBook addressBook) { + return addressBookMapper.list(addressBook); + } + + /** + * 新增地址 + * + * @param addressBook + */ + public void save(AddressBook addressBook) { + addressBook.setUserId(BaseContext.getCurrentId()); + addressBook.setIsDefault(0); + addressBookMapper.insert(addressBook); + } + + /** + * 根据id查询 + * + * @param id + * @return + */ + public AddressBook getById(Long id) { + AddressBook addressBook = addressBookMapper.getById(id); + return addressBook; + } + + /** + * 根据id修改地址 + * + * @param addressBook + */ + public void update(AddressBook addressBook) { + addressBookMapper.update(addressBook); + } + + /** + * 设置默认地址 + * + * @param addressBook + */ + @Transactional + public void setDefault(AddressBook addressBook) { + //1、将当前用户的所有地址修改为非默认地址 update address_book set is_default = ? where user_id = ? + addressBook.setIsDefault(0); + addressBook.setUserId(BaseContext.getCurrentId()); + addressBookMapper.updateIsDefaultByUserId(addressBook); + + //2、将当前地址改为默认地址 update address_book set is_default = ? where id = ? + addressBook.setIsDefault(1); + addressBookMapper.update(addressBook); + } + + /** + * 根据id删除地址 + * + * @param id + */ + public void deleteById(Long id) { + addressBookMapper.deleteById(id); + } + +} 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..3e234cb --- /dev/null +++ b/sky-server/src/main/java/com/sky/service/impl/OrderServiceImpl.java @@ -0,0 +1,90 @@ +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 AddressBookMapper addressBookMapper; + @Autowired + private ShoppingCartMapper shoppingCartMapper; + @Autowired + private OrderMapper orderMapper; + @Autowired + private OrderDetailMapper orderDetailMapper; + @Override + @Transactional + public OrderSubmitVO submit(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 order = new Orders(); + BeanUtils.copyProperties(ordersSubmitDTO,order); + order.setPhone(addressBook.getPhone()); + order.setAddress(addressBook.getDetail()); + order.setConsignee(addressBook.getConsignee()); + order.setNumber(String.valueOf(System.currentTimeMillis())); //订单号 + order.setUserId(userId); + order.setStatus(Orders.PENDING_PAYMENT); + order.setPayStatus(Orders.UN_PAID); + order.setOrderTime(LocalDateTime.now()); + //向订单表插入1条数据 + orderMapper.insert(order); + //订单明细数据 + List orderDetailList = new ArrayList<>(); + for (ShoppingCart cart : shoppingCartList) { + OrderDetail orderDetail = new OrderDetail(); + BeanUtils.copyProperties(cart, orderDetail); + orderDetail.setOrderId(order.getId()); + orderDetailList.add(orderDetail); + } + //向明细表插入n条数据 + orderDetailMapper.insertBatch(orderDetailList); + //清理购物车中的数据 + shoppingCartMapper.deleteByUserId(userId); + + //封装返回结果 + OrderSubmitVO orderSubmitVO = OrderSubmitVO.builder() + .id(order.getId()) + .orderNumber(order.getNumber()) + .orderAmount(order.getAmount()) + .orderTime(order.getOrderTime()) + .build(); + + return orderSubmitVO; + } +} diff --git a/sky-server/src/main/resources/mapper/AddressBookMapper.xml b/sky-server/src/main/resources/mapper/AddressBookMapper.xml new file mode 100644 index 0000000..b7ece35 --- /dev/null +++ b/sky-server/src/main/resources/mapper/AddressBookMapper.xml @@ -0,0 +1,45 @@ + + + + + + + + update address_book + + + consignee = #{consignee}, + + + sex = #{sex}, + + + phone = #{phone}, + + + detail = #{detail}, + + + label = #{label}, + + + is_default = #{isDefault}, + + + where id = #{id} + + + 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..8151ed2 --- /dev/null +++ b/sky-server/src/main/resources/mapper/OrderDetailMapper.xml @@ -0,0 +1,15 @@ + + + + + + insert into order_detail + (name, order_id, dish_id, setmeal_id, dish_flavor, number, amount, image) + values + + (#{od.name},#{od.orderId},#{od.dishId},#{od.setmealId},#{od.dishFlavor}, + #{od.number},#{od.amount},#{od.image}) + + + \ 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..818b7f7 --- /dev/null +++ b/sky-server/src/main/resources/mapper/OrderMapper.xml @@ -0,0 +1,15 @@ + + + + + + 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}) + + \ No newline at end of file