当前位置: 首页 > news >正文

外卖项目day11---用户下单

 

 

 

 OrderController代码

@RestController("userOrderController")
@RequestMapping("/user/order")
@Api(tags = "用户端订单相关接口")
@Slf4j
public class OrderController {@Autowiredprivate 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 {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate OrderDetailMapper orderDetailMapper;@Autowiredprivate AddressBookMapper addressBookMapper;@Autowiredprivate ShoppingCartMapper shoppingCartMapper;/*** 用户下单* @param ordersSubmitDTO* @return*/@Transactionalpublic 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()); //设置当前订单明细关联的订单idorderDetailList.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>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【虚拟化】KVM概念和架构
  • 鸿蒙开发FA模型和Stage模型
  • 配置本地软件仓库
  • FPGA开发——按键控制数码管的设计
  • MybatisPlus(二)
  • 卢松松:分享6个短视频拍摄设备
  • Linux Vim教程(十四):使用Vim进行项目管理
  • 基因克隆技术在医学领域的应用有哪些局限性?
  • 异常 29
  • Win10安装node版本管理工具nvm
  • MySQL学习笔记第三天
  • Prompt提示工程上手指南:基础原理及实践-Prompt个性知识库引导
  • 【Golang】短链接系统
  • matlab中的双层数值积分
  • 这本vue3编译原理开源电子书,初中级前端竟然都能看懂
  • [译]CSS 居中(Center)方法大合集
  • 「面试题」如何实现一个圣杯布局?
  • CODING 缺陷管理功能正式开始公测
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • Gradle 5.0 正式版发布
  • java第三方包学习之lombok
  • Java新版本的开发已正式进入轨道,版本号18.3
  • Python语法速览与机器学习开发环境搭建
  • Redis 懒删除(lazy free)简史
  • vuex 笔记整理
  • vue中实现单选
  • windows下使用nginx调试简介
  • 订阅Forge Viewer所有的事件
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 前端性能优化——回流与重绘
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • nb
  • Java数据解析之JSON
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • # Java NIO(一)FileChannel
  • # 达梦数据库知识点
  • #Spring-boot高级
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (~_~)
  • (Forward) Music Player: From UI Proposal to Code
  • (pycharm)安装python库函数Matplotlib步骤
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (一)u-boot-nand.bin的下载
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • (自用)gtest单元测试
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .net framework profiles /.net framework 配置
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?