微信点餐系统—买家订单(二 Service层,重难点)
一、新建订单接口
包含以下内容:
- 创建订单
OrderDTO create(OrderDTO orderDTO);
- 查询单个订单
OrderDTO findOne(String orderId);
- 查询订单列表
Page<OrderDTO> findList(String buyerOpenid, Pageable pageable);
- 取消订单
OrderDTO cancel(OrderDTO orderDTO);
- 完结订单
OrderDTO finished(OrderDTO orderDTO);
- 订单支付
OrderDTO paid(OrderDTO orderDTO);
这里指的注意,为什么我们用的新建的一个订单实体类 OrderDTO
而不是直接使用订单表。主要是不够方便,因为订单表对订单详情表是一对多的,即订单详情表可以包含多个订单,所以我们要在订单的实体类还要加一个属性:
List<OrderDetail> orderDetailList;
但直接加到 OrderMaster
是不合理的,也会报错,因为OrderMaster
存的都是数据库里的字段,并没有orderDetailList
这个字段(报错的话可以加个注解@Transient
,作用是忽略数据库对应的字段)。
所以我们直接新建一个对象 dto(数据传输对象),新建类 OrderDTO
。
二、新建订单实现类,注意加上@Service
注解
@Autowiredprivate ProductService productService;@Autowiredprivate OrderDetailRepository orderDetailRepository;@Autowiredprivate OrderMasterRepository orderMasterRepository;
- 创建订单
//先定义一个总价
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;
- 查询单个订单
- 查询订单列表
- 取消订单
- 完结订单
- 支付订单
微信点餐系统—买家订单(二 Service层,重难点)相关推荐
- 微信点餐系统——买家类目service层创建并测试通过
ICategoryService /*** Created by 李柏霖* 2020/10/17 15:17*/package com.lbl.service;import com.lbl.dataO ...
- 第二课 SpringBoot微信点餐系统买家类目设计
第二课 SpringBoot微信点餐系统买家类目设计 tags: Java 慕课网 categories: DAO层开发 service层开发 文章目录 第二课 SpringBoot微信点餐系统买家类 ...
- 微信点餐系统01——环境搭建
微信点餐系统01--环境搭建 一.创建数据库表 微信点餐系统一共需要5个表. 商品表:商品编号.商品名称.商品价格.商品库存.商品描述.商品图片.商品情况(上架还是下架).它属于哪个类目(热销?男 ...
- 微信点餐系统的开发与实现
作者主页:编程指南针 作者简介:Java领域优质创作者.CSDN博客专家 .掘金特邀作者.多年架构师设计经验.腾讯课堂常驻讲师 主要内容:Java项目.毕业设计.简历模板.学习资料.面试题库.技术互助 ...
- 1、微信点餐系统之数据库设计
1.微信点餐系统之数据库设计 ---- ----商品表格 ---- CREATE TABLE `product_info` (`product_id` VARCHAR(32) NOT NULL COM ...
- 手机点餐系统概述_廖师兄 微信点餐系统 springcloud学习笔记
概要:基于netflix的springcloud搭建微信点餐系统 目录 第一部分 项目概要 1.项目环境信息 2.介绍 第二部分 搭建Eureka Server 1.配置Eureka 的applica ...
- 云滋味:微信点餐系统案例分析
餐饮业的不断发展,在经营管理上也逐步向电子化迈进,通过手机信息系统管理餐饮业的内部事务,使得作业更加简单化.高效.下面小编为大家介绍一款微信点餐系统--云滋味. 云滋味是英趣科技为中小型餐厅老板轻松解 ...
- 点餐系统架构模型_微信点餐系统的系统结构是由哪些功能模块组成呢?
微信点餐系统的系统结构导读:随着外卖行业的发展,外卖平台越来越多,喜欢叫外卖的人也变得越来越多,随之而来的问题也就越来越多,例如,引客到店难,订单量多管理不当,留不住顾客等等一些餐饮行业痛点,客来云扫 ...
- 微信点餐系统java教程_构建微服务微信点餐系统教程
凡是认购学员提供全部的问题解答,有问题请大家私信提出问题. 微服务是目前行业的热门技术架构,随着移动互联网愈演愈烈,微信支付和外卖成为人们的**,为了让广大技术爱好者学习微服务架构和业务结合,从而研发 ...
最新文章
- mysql数据库备份还原
- SVN服务器搭建--Subversio与TortoiseSVN的配置安装
- JavaScript———从setTimeout与setInterval到AJAX异步
- 机器学习算法-PCA降维技术
- Nacos配置管理-微服务配置拉取
- 07、08 条件渲染、列表渲染
- python学习实例(5)
- mysql类 php100_php mysql 类
- VisualStudio2005技巧集合--打造自己的CodeSnippet
- 1、计算机组成与体系结构
- Cocos2d-x 引擎概要
- 高响应比优先调度算法 java_操作系统高响应比优先模拟算法
- 微搭低代码中实现二维码生成
- java webservice原理_WebService的工作原理
- 天线的主要技术指标及其含义—天线的输入阻抗
- 【问题集合】3dsMax贴图模糊(2016)
- 表设计原则_表格设计原则
- golang runtime源码阅读 channal实现
- 新的3D地图制图技术改变了全球定位的游戏规则
- MySQL 不等于的三种表示及区别