第一天
1.业务分析
2.模块设计
- 管理模块 销售模块
- 实体类模块 接口模块
- (基础模块类,不同公司,不同部门能使用的公共模块,可以单独提取出来给别的项目使用) 工具类模块 定时任务模块 接口管理模块
模块化开发的好处:
- 实现高内聚,低耦合,方便项目管理。
- 并行开发 ,提高开发效率, 不会出现冲突,不好分工的情况。
- 轮子重复使用,代码重用性高,甚至用到其它项目。
划分模块标准:
- 按业务层次进行模块划分, 比如dao层或者service层分别单独做一个模块,实现高内聚。
- 按功能划分,比如这个理财项目有管理端跟销售端,可以分别提取出来作为模块。
- 可重复使用的东西可以单独划分模块。
相关概念:
- 最好使用构建工具, 比如gradle,maven等。
- 项目:这个理财产品就是个项目。
- 模块:根据项目进行划分,可以是个jar包(可以被其它模块依赖使用,并不能独立部署),也可以是个war包(可能依赖其它模块,构成一个应用,并可以进行部署)。
- 工程:对于开发工具说的,可以把多个模块建立一个工程,或者一个应用建立一个工程。
- 应用:可以包含多个模块, 并可以单独部署运行的。
3.工程创建
开发环境:JDK1.8,gradel4.9
开发工具:IDEA 2018.2.2
1.项目创建:
- 使用IDEA创建项目,gradel方式构建项目,并添加如下模块:
2.在项目根目录新建 dependencies.gradle 各模块公共jar包管理文件:
ext {
versions = [
springBootVersion: '1.5.4.RELEASE'
]
libs = [
common : [
"org.springframework.boot:spring-boot-starter-web:${versions.springBootVersion}",
"org.springframework.boot:spring-boot-starter-data-jpa:${versions.springBootVersion}",
"org.apache.commons:commons-lang3:3.5"
],
mysql : [
"mysql:mysql-connector-java:5.1.29"
],
test : [
"org.springframework.boot:spring-boot-starter-test:${versions.springBootVersion}"
]
]
}
3.修改项目根目录下的build.gradle 公共gradel项目管理文件:
group 'com.imooc'
version '1.0-SNAPSHOT'
//导入jar包管理文件
apply from: "$rootDir/dependencies.gradle"
//全局项目配置
subprojects {
//所需插件
apply plugin: 'java'
apply plugin: 'war'
//环境配置
sourceCompatibility = 1.8
targetCompatibility = 1.8
//仓库配置
repositories {
mavenLocal()
maven {
url ='http://maven.aliyun.com/nexus/content/groups/public'
}
mavenCentral()
}
//jar包配置
dependencies {
compile libs.common
testCompile libs.test
}
}完成创建后结构目录如下:
模块和jar包成功导入后,项目构建成功:
第二天
1.数据库设计
销售模块一张表product:
创表sql:
/*ss
SQLyog Enterprise v12.09 (64 bit)
MySQL - 5.6.36 : Database - manager
*********************************************************************
*/
CREATE DATABASE /*!32312 IF NOT EXISTS*/`manager` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `manager`;
/*Table structure for table `product` */
DROP TABLE IF EXISTS `product`;
CREATE TABLE `product` (
`id` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT '产品编号',
`name` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT '产品名称',
`threshold_amount` decimal(15,3) NOT NULL COMMENT '起投金额',
`step_amount` decimal(15,3) NOT NULL COMMENT '投资步长',
`lock_term` smallint(6) NOT NULL COMMENT '锁定期',
`reward_rate` decimal(5,3) NOT NULL COMMENT '收益率,0-100 百分比值',
`status` varchar(20) COLLATE utf8_unicode_ci NOT NULL COMMENT '状态,AUDINTING:审核中,IN_SELL:销售中,LOCKED:暂停销售,FINISHED:已结束',
`memo` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '备注',
`create_at` datetime DEFAULT NULL COMMENT '创建时间',
`create_user` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '创建者',
`update_at` datetime DEFAULT NULL COMMENT '更新时间',
`update_user` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '更新者',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
管理模块一张表:
创表sql:
/*
SQLyog Enterprise v12.09 (64 bit)
MySQL - 5.6.36 : Database - seller
*********************************************************************
*/
CREATE DATABASE /*!32312 IF NOT EXISTS*/`seller` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */;
USE `seller`;
/*Table structure for table `order_t` */
DROP TABLE IF EXISTS `order_t`;
CREATE TABLE `order_t` (
`order_id` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT '订单编号',
`chan_id` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT '渠道编号',
`product_id` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT '产品编号',
`chan_user_id` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT '渠道用户编号',
`order_type` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT '类型,APPLY:申购,REDEEM:赎回',
`order_status` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT '状态,INIT:初始化,PROCESS:处理中,SUCESS:成功,FAIL:失败',
`outer_order_id` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT '外部订单编号',
`amount` decimal(15,3) NOT NULL COMMENT '金额',
`memo` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '备注',
`create_at` datetime DEFAULT NULL COMMENT '创建时间',
`update_at` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
2.实体类创建:
1.在entity模块src/main/java目录新建包com.imooc.entity,
2.在com.imooc.entity包下创建销售实体类Product,和管理实体类Order:
Product类
package com.imooc.entity;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.math.BigDecimal;
import java.util.Date;
/**
* 产品
*/
@Entity
public class Product {
@Id
private String id;
private String name;
/**
* 对应枚举类 有状态详细
* @see com.imooc.entity.enums.ProductStatus
*/
private String status ;
//起投金额
private BigDecimal thresholdAmount ;
//投资步长
private BigDecimal stepAmount;
//锁定期
private Integer lockTerm;
//收益率,因为要与其他数相乘,所以使用BigDecimal
private BigDecimal rewardRate;
private String memo;
private Date createAt;
private Date updateAt;
private String createUser;
private String updateUser;
public Product() {
}
public Product(String id, String name, String status, BigDecimal thresholdAmount, BigDecimal stepAmount, BigDecimal rewardRate) {
this.id = id;
this.name = name;
this.status = status;
this.thresholdAmount = thresholdAmount;
this.stepAmount = stepAmount;
this.rewardRate = rewardRate;
}
@Override
public String toString() {
return "Product{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", status='" + status + '\'' +
", thresholdAmount=" + thresholdAmount +
", stepAmount=" + stepAmount +
", lockTerm=" + lockTerm +
", rewardRate=" + rewardRate +
", memo='" + memo + '\'' +
", createAt=" + createAt +
", updateAt=" + updateAt +
", createUser='" + createUser + '\'' +
", updateUser='" + updateUser + '\'' +
'}';
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public BigDecimal getThresholdAmount() {
return thresholdAmount;
}
public void setThresholdAmount(BigDecimal thresholdAmount) {
this.thresholdAmount = thresholdAmount;
}
public BigDecimal getStepAmount() {
return stepAmount;
}
public void setStepAmount(BigDecimal stepAmount) {
this.stepAmount = stepAmount;
}
public Integer getLockTerm() {
return lockTerm;
}
public void setLockTerm(Integer lockTerm) {
this.lockTerm = lockTerm;
}
public BigDecimal getRewardRate() {
return rewardRate;
}
public void setRewardRate(BigDecimal rewardRate) {
this.rewardRate = rewardRate;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
public Date getCreateAt() {
return createAt;
}
public void setCreateAt(Date createAt) {
this.createAt = createAt;
}
public Date getUpdateAt() {
return updateAt;
}
public void setUpdateAt(Date updateAt) {
this.updateAt = updateAt;
}
public String getCreateUser() {
return createUser;
}
public void setCreateUser(String createUser) {
this.createUser = createUser;
}
public String getUpdateUser() {
return updateUser;
}
public void setUpdateUser(String updateUser) {
this.updateUser = updateUser;
}
}Order类:
package com.imooc.entity;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.math.BigDecimal;
import java.util.Date;
/**
*订单
*/
@Entity(name="order_t")
public class Order {
@Id
private String orderId;
//渠道id
private String chanId;
private String chanUserId;
private String orderType;
private String productId;
private BigDecimal amount;
private String outerOrderId;
/**
* 订单状态
* @see com.imooc.entity.enums.OrderStatus
*/
private String orderStatus;
private String memo;
private Date createAt;
private Date updateAt;
public Order() {
}
@Override
public String toString() {
return "Order{" +
"orderId='" + orderId + '\'' +
", chanId='" + chanId + '\'' +
", chanUserId='" + chanUserId + '\'' +
", orderType='" + orderType + '\'' +
", productId='" + productId + '\'' +
", amount=" + amount +
", outerOrderId='" + outerOrderId + '\'' +
", orderStatus='" + orderStatus + '\'' +
", memo='" + memo + '\'' +
", createAt=" + createAt +
", updateAt=" + updateAt +
'}';
}
public String getOrderId() {
return orderId;
}
public void setOrderId(String orderId) {
this.orderId = orderId;
}
public String getChanId() {
return chanId;
}
public void setChanId(String chanId) {
this.chanId = chanId;
}
public String getChanUserId() {
return chanUserId;
}
public void setChanUserId(String chanUserId) {
this.chanUserId = chanUserId;
}
public String getOrderType() {
return orderType;
}
public void setOrderType(String orderType) {
this.orderType = orderType;
}
public String getProductId() {
return productId;
}
public void setProductId(String productId) {
this.productId = productId;
}
public BigDecimal getAmount() {
return amount;
}
public void setAmount(BigDecimal amount) {
this.amount = amount;
}
public String getOuterOrderId() {
return outerOrderId;
}
public void setOuterOrderId(String outerOrderId) {
this.outerOrderId = outerOrderId;
}
public String getOrderStatus() {
return orderStatus;
}
public void setOrderStatus(String orderStatus) {
this.orderStatus = orderStatus;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
public Date getCreateAt() {
return createAt;
}
public void setCreateAt(Date createAt) {
this.createAt = createAt;
}
public Date getUpdateAt() {
return updateAt;
}
public void setUpdateAt(Date updateAt) {
this.updateAt = updateAt;
}
}3.创建两实体类struts和orderStatus字段对应的枚举类,在在com.imooc.entity下新建enums包下并创建枚举ProductStatus 和 OrderStatus:
ProductStatus :
package com.imooc.entity.enums;
/**
* 产品状态
*/
public enum ProductStatus {
AUDITING("审核中"),
IN_SELL("销售中"),
LOCKED("暂停销售"),
FINISHED("已结束");
private String desc;
ProductStatus(String desc){
this.desc = desc;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}OrderStatus:
package com.imooc.entity.enums;
/**
* 订单状态
*/
public enum OrderStatus {
INIT("初始化"),
PROCESS("处理中"),
SUCCESS("成功"),
FAIL("失败");
private String desc;
OrderStatus(String desc) {
this.desc = desc;
}
public String getDesc() {
return desc;
}
}
因为接下来需要使用到springdata所以正在学习中: