SpringBoot15 sell02 订单模块
1 订单模块
1.1 MySQL数据表
订单模块涉及到两个数据表:
订单表:主要存储订单相关的基本信息
- DROP TABLE IF EXISTS `order_master`;
- CREATE TABLE `order_master` (
- `order_id` varchar(32) NOT NULL,
- `buyer_name` varchar(32) NOT NULL COMMENT '买家名字',
- `buyer_phone` varchar(32) NOT NULL COMMENT '买家电话',
- `buyer_address` varchar(128) NOT NULL COMMENT '买家地址',
- `buyer_openid` varchar(64) NOT NULL COMMENT '买家微信openid',
- `order_amount` decimal(8,2) NOT NULL COMMENT '订单总金额',
- `order_status` tinyint(3) NOT NULL DEFAULT '' COMMENT '订单状态, 默认为新下单',
- `pay_status` tinyint(3) NOT NULL DEFAULT '' COMMENT '支付状态, 默认未支付',
- `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
- PRIMARY KEY (`order_id`),
- KEY `idx_buyer_openid` (`buyer_openid`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
order_master
订单详情表:主要存放和订单相关的shaping详细信息
- DROP TABLE IF EXISTS `order_detail`;
- CREATE TABLE `order_detail` (
- `detail_id` varchar(32) NOT NULL,
- `order_id` varchar(32) NOT NULL,
- `product_id` varchar(32) NOT NULL,
- `product_name` varchar(64) NOT NULL COMMENT '商品名称',
- `product_price` decimal(8,2) NOT NULL COMMENT '当前价格,单位分',
- `product_quantity` int(11) NOT NULL COMMENT '数量',
- `product_icon` varchar(512) DEFAULT NULL COMMENT '小图',
- `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
- `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
- PRIMARY KEY (`detail_id`),
- KEY `idx_order_id` (`order_id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
order_detail
1.2 实体类
1.2.1 持久实体类
- package cn.xiangxu.demo.sell_demo.entity.entityPO;
- import com.baomidou.mybatisplus.annotations.TableField;
- import lombok.Data;
- import javax.persistence.Column;
- import javax.persistence.Entity;
- import javax.persistence.Id;
- import javax.persistence.Table;
- import java.math.BigDecimal;
- import java.util.Date;
- /**
- * @author 王杨帅
- * @create 2018-04-21 13:33
- * @desc 订单实体类
- **/
- @Table(name = "order_master")
- @Data
- @Entity
- public class OrderMasterPO {
- /**
- * 订单ID
- */
- @Id
- @Column(name = "order_id")
- private String orderId;
- /**
- * 买家名字
- */
- @Column(name = "buyer_name")
- private String buyerName;
- /**
- * 买家电话
- */
- @Column(name = "buyer_phone")
- private String buyerPhone;
- /**
- * 买家地址
- */
- @Column(name = "buyer_address")
- private String buyerAddress;
- /**
- * 买家微信openid
- */
- @Column(name = "buyer_openid")
- private String buyerOpenid;
- /**
- * 订单总金额
- */
- @Column(name = "order_amount")
- private BigDecimal orderAmount;
- /**
- * 订单状态, 默认为新下单
- */
- @Column(name = "order_status")
- private Integer orderStatus;
- /**
- * 支付状态, 默认未支付
- */
- @Column(name = "pay_status")
- private Integer payStatus;
- /**
- * 创建时间
- */
- @Column(name = "create_time")
- private Date createTime;
- /**
- * 修改时间
- */
- @Column(name = "update_time")
- private Date updateTime;
- }
OrderMasterPO.java
- package cn.xiangxu.demo.sell_demo.entity.entityPO;
- import lombok.Data;
- import javax.persistence.Column;
- import javax.persistence.Entity;
- import javax.persistence.Id;
- import javax.persistence.Table;
- import java.math.BigDecimal;
- import java.util.Date;
- /**
- * @author 王杨帅
- * @create 2018-04-21 13:35
- * @desc 订单详情实体类
- **/
- @Table(name = "order_detail")
- @Data
- @Entity
- public class OrderDetailPO {
- /**
- * 订单详情ID
- */
- @Id
- @Column(name = "detail_id")
- private String detailId;
- /**
- * 订单ID
- */
- @Column(name = "order_id")
- private String orderId;
- /**
- * 产品ID
- */
- @Column(name = "product_id")
- private String productId;
- /**
- * 商品名称
- */
- @Column(name = "product_name")
- private String productName;
- /**
- * 当前价格,单位分
- */
- @Column(name = "product_price")
- private BigDecimal productPrice;
- /**
- * 数量
- */
- @Column(name = "product_quantity")
- private Integer productQuantity;
- /**
- * 小图
- */
- @Column(name = "product_icon")
- private String productIcon;
- /**
- * 创建时间
- */
- @Column(name = "create_time")
- private Date createTime;
- /**
- * 修改时间
- */
- @Column(name = "update_time")
- private Date updateTime;
- }
OrderDetailPO.java
1.2.2 传输实体类
- package cn.xiangxu.demo.sell_demo.entity.entityDTO;
- import cn.xiangxu.demo.sell_demo.entity.entityPO.OrderDetailPO;
- import lombok.Data;
- import java.math.BigDecimal;
- import java.util.Date;
- import java.util.List;
- /**
- * 商品订单和订单详情组合成的数据传输对象
- */
- @Data
- //@JsonInclude(JsonInclude.Include.NON_NULL) // 数据为null时就不返回
- public class OrderDTO {
- /** 订单ID */
- private String orderId;
- /** 买家名字 */
- private String buyerName;
- /** 买家电话 */
- private String buyerPhone;
- /** 买家地址 */
- private String buyerAddress;
- /** 买家微信OpenId */
- private String buyerOpenid;
- /** 订单金额 */
- private BigDecimal orderAmount;
- /** 订单状态,默认为0:新下单 */
- private Integer orderStatus;
- /** 支付状态,默认为0:未支付 */
- private Integer payStatus;
- /** 创建时间 */
- // @JsonSerialize(using = Date2Long.class) // 让毫秒变成秒
- private Date createTime;
- /** 更新时间 */
- // @JsonSerialize(using = Date2Long.class)
- private Date updateTime;
- /** 订单商品列表 */
- List<OrderDetailPO> orderDetailPOList;
- }
OrderDTO.java
- package cn.xiangxu.demo.sell_demo.entity.entityDTO;
- import lombok.Data;
- @Data
- public class CarDTO {
- /** 商品ID */
- private String productId;
- /** 商品数量 */
- private Integer productQuantity;
- public CarDTO() {
- }
- public CarDTO(String productId, Integer productQuantity) {
- this.productId = productId;
- this.productQuantity = productQuantity;
- }
- }
CarDTO.java
1.3 持久层
1.3.1 订单-master
- package cn.xiangxu.demo.sell_demo.dao;
- import cn.xiangxu.demo.sell_demo.entity.entityPO.OrderMasterPO;
- import org.springframework.data.jpa.repository.JpaRepository;
- import java.util.List;
- /**
- * @author 王杨帅
- * @create 2018-04-21 13:42
- * @desc 订单持久层接口
- **/
- public interface OrderMasterDao extends JpaRepository<OrderMasterPO, String> {
- /**
- * 根据买家的微信OpenId查询订单信息
- * @param openId
- * @return
- */
- List<OrderMasterPO> findByBuyerOpenid(String openId);
- }
OrderMasterDao.java
- package cn.xiangxu.demo.sell_demo.dao;
- import cn.xiangxu.demo.sell_demo.entity.entityPO.OrderMasterPO;
- import cn.xiangxu.demo.sell_demo.enums.OrderStatusEnum;
- import cn.xiangxu.demo.sell_demo.enums.PayStatusEnum;
- import lombok.extern.slf4j.Slf4j;
- import org.junit.Assert;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.test.context.SpringBootTest;
- import org.springframework.test.context.junit4.SpringRunner;
- import java.math.BigDecimal;
- import java.util.List;
- import static org.junit.Assert.*;
- @RunWith(SpringRunner.class)
- @SpringBootTest
- @Slf4j
- public class OrderMasterDaoTest {
- private final String className = getClass().getName();
- @Autowired
- private OrderMasterDao orderMasterDao;
- @Test
- public void create() {
- // 01 构建订单对象
- OrderMasterPO orderMasterPO = new OrderMasterPO();
- orderMasterPO.setOrderId("20180001");
- orderMasterPO.setBuyerName("王杨帅");
- orderMasterPO.setBuyerPhone("13272885616");
- orderMasterPO.setBuyerAddress("广东工业大学");
- orderMasterPO.setBuyerOpenid("123456");
- orderMasterPO.setOrderAmount(new BigDecimal(333));
- orderMasterPO.setOrderStatus(OrderStatusEnum.NEW.getCode());
- orderMasterPO.setPayStatus(PayStatusEnum.WAIT.getCode());
- // 02 调用持久层对象进行新增操作
- OrderMasterPO result = orderMasterDao.save(orderMasterPO);
- // 03 打印新增结果数据
- log.info("===/" + className + "/create===更新后返回的结果为:{}", result);
- Assert.assertNotEquals(null, result);
- }
- @Test
- public void findByBuyerOpenid() throws Exception {
- // 01 模拟一个微信openId
- String openId = "123456";
- // 02 根据微信OpenId查询数据
- List<OrderMasterPO> result = orderMasterDao.findByBuyerOpenid(openId);
- // 03 打印查询到的数据
- log.info("===/" + className + "/findByBuyerOpenid===根据微信openId查询到的数据为:{}", result);
- }
- }
OrderMasterDaoTest.java
1.3.2 订单-detail
- package cn.xiangxu.demo.sell_demo.dao;
- import cn.xiangxu.demo.sell_demo.entity.entityPO.OrderDetailPO;
- import org.springframework.data.jpa.repository.JpaRepository;
- import java.util.List;
- /**
- * @author 王杨帅
- * @create 2018-04-21 13:41
- * @desc 订单详情持久层接口
- **/
- public interface OrderDetailDao extends JpaRepository<OrderDetailPO, String> {
- /** 根据订单ID查询订单详情信息 */
- List<OrderDetailPO> findByOrOrderId(String orderId);
- }
OrderDetailDao.java
- package cn.xiangxu.demo.sell_demo.dao;
- import cn.xiangxu.demo.sell_demo.entity.entityPO.OrderDetailPO;
- import lombok.extern.slf4j.Slf4j;
- import org.junit.Assert;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.test.context.SpringBootTest;
- import org.springframework.test.context.junit4.SpringRunner;
- import java.math.BigDecimal;
- import java.util.List;
- import static org.junit.Assert.*;
- @RunWith(SpringRunner.class)
- @SpringBootTest
- @Slf4j
- public class OrderDetailDaoTest {
- private final String className = getClass().getName();
- @Autowired
- private OrderDetailDao orderDetailDao;
- @Test
- public void create() {
- // 01 模拟一个订单详情实例
- OrderDetailPO orderDetailPO = new OrderDetailPO();
- orderDetailPO.setDetailId("2");
- orderDetailPO.setOrderId("20180001");
- orderDetailPO.setProductId("20180001");
- orderDetailPO.setProductName("皮蛋粥");
- orderDetailPO.setProductPrice(new BigDecimal(3.5));
- orderDetailPO.setProductQuantity(3);
- orderDetailPO.setProductIcon("http://xxasd.com");
- // 02 执行新增操作
- OrderDetailPO result = orderDetailDao.save(orderDetailPO);
- // 03 返回结果
- log.info("===/" + className + "/create===新增后的返回数据为:{}", result);
- Assert.assertNotEquals(null, result);
- }
- @Test
- public void findByOrOrderId() throws Exception {
- // 模拟一个订单ID
- String orderId = "20180001";
- // 根据订单ID进行查询
- List<OrderDetailPO> result = orderDetailDao.findByOrOrderId(orderId);
- // 记录查询结果
- log.info("===/" + className + "/findByOrderId===根据订单ID查询到的数据为:{}", result);
- Assert.assertNotEquals(0, result.size());
- }
- }
OrderDetailDaoTest.java
SpringBoot15 sell02 订单模块的更多相关文章
- 【JAVAWEB学习笔记】网上商城实战3:购物模块和订单模块
网上商城实战3 今日任务 完成购物模块的功能 完成订单模块的功能 1.1 购物模块: 1.1.1 功能演示: 商品详情: 购物车模块: 1.1.2 代码实现: 1.在商品详情的页 ...
- bookStore第三篇【用户模块、购买模块、订单模块】
用户模块 要登陆后才能购买,因此我们先写购买模块 设计实体 private String id; private String username; private String password; p ...
- 关于正餐智能POS6.0.1.1改版后,订单模块无法进行部分退款的FAQ
适用版本:智能POS正餐V6.0.1.1+ 适用情况:订单模块,无法输入自定义金额进行部分退款. 原因:为让报表统计的数据更准确. 改版之后仍可适用部分退款的情况: 1.口碑先付订单,可在口碑模块,选 ...
- 电子商务(电销)平台中订单模块(Order)数据库设计明细(转)
以下是自己在电子商务系统设计中的订单模块的数据库设计经验总结,而今发表出来一起分享,如有不当,欢迎跟帖讨论~ 订单表 (order)|-- 自动编号(order_id, 自增长主键)|-- 订单单号( ...
- 电子商务(电销)平台中订单模块(Order)数据库设计明细
电子商务(电销)平台中订单模块(Order)数据库设计明细 - sochishun - 博客园 http://www.cnblogs.com/sochishun/p/7040628.html 电子商务 ...
- 【JAVAWEB学习笔记】网上商城实战4:订单模块
今日任务 完成订单模块的功能 1.1 订单 模块的功能 1.1.1 我的订单: [我的订单的查询] * 在header.jsp中点击我的订单. * 提交到Servlet: * 获得用户 ...
- 电子商务(电销)平台中订单模块(Order)数据库设计明细(转载)
电子商务(电销)平台中订单模块(Order)数据库设计明细 以下是自己在电子商务系统设计中的订单模块的数据库设计经验总结,而今发表出来一起分享,如有不当,欢迎跟帖讨论~ 订单表 (order)|-- ...
- Java生鲜电商平台-订单模块状态机架构设计
Java生鲜电商平台-订单模块状态机架构设计 说明:在Java生鲜电商平台中订单的状态流转业务 我们知道 一个订单会有很多种状态:临时单.已下单.待支付.待收货.待评价.已完成,退货中等 ...
- 【笔记6-支付及订单模块】从0开始 独立完成企业级Java电商网站开发(服务端)
支付模块 实际开发工作中经常会遇见如下场景,一个支付模块,一个订单模块,有一定依赖,一个同事负责支付模块,另一个同事负责订单模块,但是开发支付模块的时候要依赖订单模块的相关类 ,方法,或者工具类,这些 ...
随机推荐
- C# 通过窗口句柄获取程序路径 图标
转自:http://qqhack8.blog.163.com/blog/static/11414798520113363829505/ C# 通过窗口句柄获取程序路径 图标using System;u ...
- Multisim的电路分析方法
Multisim的电路分析方法:主要有直流工作点分析,交流分析,瞬态分析,傅里叶分析,噪声分析,失真分析,直流扫描分析, 灵敏度分析,参数扫描分析,温度扫描分析,零一极点分析,传递函数分析,最坏情况分 ...
- 【3】SpringMVC的Controller
1SpringMvc的Controller是线程安全的吗? (1)由于是单例,tomcat的多线程环境访问,属性必须是不可变的,如果可变,会产生脏数据,线程不安全 2Spring的事务管理 (1)ao ...
- openfaas k8s 集成
备注 k8s 1.6 以下版本与k8s 1.6 以上版本会有一些简单的区别 1. 克隆k8s 部署文档 https://github.com/openfaas/faas-netes 2. 创 ...
- 一个detect问题引发的一系列思考
在用BoneCP的时候,发现一个JVM日志中报了一个异常,大意是“探测(detect)到有数据库链接没有关闭”(不得不说JVM的强大),但是我用的是连接池里面的链接啊,怎么会需要关闭呢? 有问题首先找 ...
- 找到最大或最小的N个元素
问题: 想在某个集合中找到最大或最小的N个元素 解决方案: heapq 模块中有两个函数 nlargest() 和 nsmallest() 它们正是我们需要的.例如: import heapq n ...
- AzureStack混合云大数据解决方案
AzureStack是Azure的私有云解决方案.AzureStack可以帮助用户实现混合云的部署模式. 本文将介绍混合云的模式下,Azure作为计算资源,AzureStack作为存储资源.如下图: ...
- 你知道SOCKET吗
要想理解socket首先得熟悉一下TCP/IP协议族, TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,定义了主 ...
- Linux:课程安排、Linux简介、虚拟机安装、课前准备(常用设置和操作)
一.课程安排 1)Linux 的作用 商业服务器基本上都是 Linux: 开源软件都先支持 Linux: 大数据分析.机器学习首先选 Linux: 整个互联网地基靠Linux撑起来: Linux 系统 ...
- java中求利息的代码
总结:函数的重要性,懂得用哪一种函数 package com.badu; import java.util.Scanner; //输入存款金额 money.存期 year 和年利率 rate, //根 ...