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电商网站开发(服务端)
支付模块 实际开发工作中经常会遇见如下场景,一个支付模块,一个订单模块,有一定依赖,一个同事负责支付模块,另一个同事负责订单模块,但是开发支付模块的时候要依赖订单模块的相关类 ,方法,或者工具类,这些 ...
随机推荐
- 同一局域网环境下的arp欺骗和中间人攻击(mac)
最近读了一篇有关arp欺骗和中间人攻击的文章,于是乎就想着自己实现一下,顺便验证下微信在回话劫持后的安全性. 1.本机环境 Macbook Air:OS X 10.11 El Captain 2.推荐 ...
- Fillder手机抓包的使用
1.Fillder下载地址: http://www.onlinedown.net/soft/73207.htm 2.网络设置 手机和电脑需链接网络相同 3.fillder设置 3.1打开fillder ...
- 关于 avalon总线理解(整理)
1,一个基于Avalon接口的系统会包含很多功能模块,这些功能模块就是Avalon存储器映射外设,通常简称Avalon外设.所谓存储器映射外设是指外设和存储器使用相同的总线来寻址,并且CPU使用访问存 ...
- 转载 fpga中 restoring 和 non-restoring 除法实现。
对于non-restoring方法,主要是用rem和den移位数据比较,rem_d长度为den+nom的总长,den_d长度为den+nom的总长度,rem_d的初始值为{{d_width{1'b0} ...
- 什么是镜头shading
shading分为两种: Lens Shading:由于Lens的光学特性,Sensor影像区的边缘区域接收的光强比中心小,所造成的中心和四角亮度不一致的现象. color shading:由于LEN ...
- Mybatis自动生成实体类、dao接口和mapping映射文件
由于Mybatis是一种半自动的ORM框架,它的工作主要是配置mapping映射文件,为了减少手动书写映射文件,可以利用mybatis生成器,自动生成实体类.dao接口以及它的映射文件,然后直接拷贝到 ...
- 通过IHttpModule,IHttpHandler扩展IIS
IIS对Http Request的处理流程 当Windows Server收到从浏览器发送过来的http请求,处理流程如下(引用自官方文档): 最终请求会被w3wp.exe处理,处理过程如下: 左边蓝 ...
- Java 传递可变参数和方法重载
形式:类型... 参数名 示例:public void show(int... a) {}; 可变参数在方法中被当作数组来处理 可变参数传值的四种方式: 一个值也不传,可变参数会接收到长度为0的数组 ...
- C++的三大特性?C也可以做到
C++的三大特性是什么?封装.继承与多态,那么今天这篇文章小编就来介绍一下,如何用C语言实现C++的这三个特性. 1.封装 何为封装? 在面向对象的思想中,将数据和对数据的操作封装在一起——即类. 类 ...
- UE4事件相关总结
转自:http://blog.ch-wind.com/ue4-event-overview/ 事件机制是实现游戏内逻辑的重要部分,在开始进行游戏逻辑的设计和实现之前,对UE4的事件机制进行理解是非常必 ...