springBoot开发理财产品 第二天

530 阅读6分钟

第一天

1.业务分析


2.模块设计


  • 管理模块    销售模块
  • 实体类模块      接口模块
  • (基础模块类,不同公司,不同部门能使用的公共模块,可以单独提取出来给别的项目使用)     工具类模块   定时任务模块   接口管理模块 

模块化开发的好处:

  1. 实现高内聚,低耦合,方便项目管理。
  2. 并行开发 ,提高开发效率,   不会出现冲突,不好分工的情况。
  3. 轮子重复使用,代码重用性高,甚至用到其它项目。

划分模块标准:

  1. 按业务层次进行模块划分,  比如dao层或者service层分别单独做一个模块,实现高内聚。
  2. 按功能划分,比如这个理财项目有管理端跟销售端,可以分别提取出来作为模块。
  3. 可重复使用的东西可以单独划分模块。

相关概念:

  1. 最好使用构建工具,  比如gradle,maven等。
  2. 项目:这个理财产品就是个项目。
  3. 模块:根据项目进行划分,可以是个jar包(可以被其它模块依赖使用,并不能独立部署),也可以是个war包(可能依赖其它模块,构成一个应用,并可以进行部署)。
  4. 工程:对于开发工具说的,可以把多个模块建立一个工程,或者一个应用建立一个工程。
  5. 应用:可以包含多个模块,   并可以单独部署运行的。

3.工程创建

开发环境:JDK1.8,gradel4.9

开发工具:IDEA  2018.2.2

1.项目创建:

  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.创建两实体类strutsorderStatus字段对应的枚举类,在在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所以正在学习中: