一、新建订单接口
包含以下内容:

  1. 创建订单
OrderDTO create(OrderDTO orderDTO);
  1. 查询单个订单
OrderDTO findOne(String orderId);
  1. 查询订单列表
Page<OrderDTO> findList(String buyerOpenid, Pageable pageable);
  1. 取消订单
OrderDTO cancel(OrderDTO orderDTO);
  1. 完结订单
OrderDTO finished(OrderDTO orderDTO);
  1. 订单支付
OrderDTO paid(OrderDTO orderDTO);

这里指的注意,为什么我们用的新建的一个订单实体类 OrderDTO 而不是直接使用订单表。主要是不够方便,因为订单表对订单详情表是一对多的,即订单详情表可以包含多个订单,所以我们要在订单的实体类还要加一个属性:

List<OrderDetail> orderDetailList;

但直接加到 OrderMaster 是不合理的,也会报错,因为OrderMaster存的都是数据库里的字段,并没有orderDetailList这个字段(报错的话可以加个注解@Transient,作用是忽略数据库对应的字段)。

所以我们直接新建一个对象 dto(数据传输对象),新建类 OrderDTO

二、新建订单实现类,注意加上@Service注解

 @Autowiredprivate ProductService productService;@Autowiredprivate OrderDetailRepository orderDetailRepository;@Autowiredprivate OrderMasterRepository orderMasterRepository;
  1. 创建订单
//先定义一个总价
BigDecimal orderAmount = new BigDecimal(BigInteger.ZERO);
  • 查询商品(数量、价格)
//遍历商品
for (OrderDetail orderDetail:orderDTO.getOrderDetailList()){ProductInfo productInfo = productService.findOne(orderDetail.getProductId());//判断是否有商品,即数据库中是否有信息,若为空,说明商品不存在if (productInfo == null){throw new SellException(ResultEnum.PRODUCT_CODE_EXIST);}
  • 计算订单总价
//先计算某一件商品的总价乘以商品数量再加上原来的总价
orderAmount = productInfo.getProductPrice().multiply(new BigDecimal(orderDetail.getProductQuantity())).add(orderAmount);
  • 订单详情入库(orderMaster和orderDetail)
orderDetail.setOrderId(KeyUtil.genUniqueKey());
orderDetail.setDetailId(orderId);
BeanUtils.copyProperties(productInfo,orderDetail);
orderDetailRepository.save(orderDetail);
  • 订单写入数据库
OrderMaster orderMaster = new OrderMaster();
BeanUtils.copyProperties(orderDTO,orderMaster);
orderMaster.setOrderId(orderId);
orderMaster.setOrderAmount(orderAmount);
orderMaster.setOrderStatus(OrderStatusEnum.NEW.getCode());
orderMaster.setPayStatus(PayStatusEnum.WAIT.getCode());
orderMasterRepository.save(orderMaster);
  • 下单成功,扣库存
List<CartDTO> cartDTOList = orderDTO.getOrderDetailList().stream().map(e -> new CartDTO(e.getProductId(),e.getProductQuantity())).collect(Collectors.toList());
productService.decreaseStock(cartDTOList);
return orderDTO;
  1. 查询单个订单
  2. 查询订单列表
  3. 取消订单
  4. 完结订单
  5. 支付订单

微信点餐系统—买家订单(二 Service层,重难点)相关推荐

  1. 微信点餐系统——买家类目service层创建并测试通过

    ICategoryService /*** Created by 李柏霖* 2020/10/17 15:17*/package com.lbl.service;import com.lbl.dataO ...

  2. 第二课 SpringBoot微信点餐系统买家类目设计

    第二课 SpringBoot微信点餐系统买家类目设计 tags: Java 慕课网 categories: DAO层开发 service层开发 文章目录 第二课 SpringBoot微信点餐系统买家类 ...

  3. 微信点餐系统01——环境搭建

    微信点餐系统01--环境搭建 一.创建数据库表 ​ 微信点餐系统一共需要5个表. 商品表:商品编号.商品名称.商品价格.商品库存.商品描述.商品图片.商品情况(上架还是下架).它属于哪个类目(热销?男 ...

  4. 微信点餐系统的开发与实现

    作者主页:编程指南针 作者简介:Java领域优质创作者.CSDN博客专家 .掘金特邀作者.多年架构师设计经验.腾讯课堂常驻讲师 主要内容:Java项目.毕业设计.简历模板.学习资料.面试题库.技术互助 ...

  5. 1、微信点餐系统之数据库设计

    1.微信点餐系统之数据库设计 ---- ----商品表格 ---- CREATE TABLE `product_info` (`product_id` VARCHAR(32) NOT NULL COM ...

  6. 手机点餐系统概述_廖师兄 微信点餐系统 springcloud学习笔记

    概要:基于netflix的springcloud搭建微信点餐系统 目录 第一部分 项目概要 1.项目环境信息 2.介绍 第二部分 搭建Eureka Server 1.配置Eureka 的applica ...

  7. 云滋味:微信点餐系统案例分析

    餐饮业的不断发展,在经营管理上也逐步向电子化迈进,通过手机信息系统管理餐饮业的内部事务,使得作业更加简单化.高效.下面小编为大家介绍一款微信点餐系统--云滋味. 云滋味是英趣科技为中小型餐厅老板轻松解 ...

  8. 点餐系统架构模型_微信点餐系统的系统结构是由哪些功能模块组成呢?

    微信点餐系统的系统结构导读:随着外卖行业的发展,外卖平台越来越多,喜欢叫外卖的人也变得越来越多,随之而来的问题也就越来越多,例如,引客到店难,订单量多管理不当,留不住顾客等等一些餐饮行业痛点,客来云扫 ...

  9. 微信点餐系统java教程_构建微服务微信点餐系统教程

    凡是认购学员提供全部的问题解答,有问题请大家私信提出问题. 微服务是目前行业的热门技术架构,随着移动互联网愈演愈烈,微信支付和外卖成为人们的**,为了让广大技术爱好者学习微服务架构和业务结合,从而研发 ...

最新文章

  1. mysql数据库备份还原
  2. SVN服务器搭建--Subversio与TortoiseSVN的配置安装
  3. JavaScript———从setTimeout与setInterval到AJAX异步
  4. 机器学习算法-PCA降维技术
  5. Nacos配置管理-微服务配置拉取
  6. 07、08 条件渲染、列表渲染
  7. python学习实例(5)
  8. mysql类 php100_php mysql 类
  9. VisualStudio2005技巧集合--打造自己的CodeSnippet
  10. 1、计算机组成与体系结构
  11. Cocos2d-x 引擎概要
  12. 高响应比优先调度算法 java_操作系统高响应比优先模拟算法
  13. 微搭低代码中实现二维码生成
  14. java webservice原理_WebService的工作原理
  15. 天线的主要技术指标及其含义—天线的输入阻抗
  16. 【问题集合】3dsMax贴图模糊(2016)
  17. 表设计原则_表格设计原则
  18. golang runtime源码阅读 channal实现
  19. 新的3D地图制图技术改变了全球定位的游戏规则
  20. MySQL 不等于的三种表示及区别

热门文章

  1. “毒王”往事:熊猫烧香制造者的反转人生
  2. Trim函数的用法(笔记)
  3. NEON指令优化指南学习之一
  4. AYITOJ ROUND #1题解
  5. 梦幻西游原服务器物品,梦幻西游:物品贱如粪土的服务器,强化石摆3万无人要...
  6. ffmpeg 奇葩问题2
  7. 谈移动互联网开发的数据分析和决策思路
  8. 被动语态和非谓语区别_动词的被动语态和非谓语动词-ed形式区别
  9. 2021东京奥运会在哪看直播?当贝投影F3看直播效果好么?
  10. 磁带机PowerVault LTO-7使用