视频下载

准备环境

  1. 安装 OpenJDK 1.8

  2. 安装 Idea 社区版(可自选)

  3. 安装 Pai-Cli 工具,下载后解压并添加到环境变量,依赖 JAVA_HOME

技术选型

1、系统环境

  • Java EE 8
  • Servlet 3.0
  • Apache Maven 3
  • MySQL >= 8.0.18
  • Nacos 1.3.0
  • Redis >= 5.0.5
  • ElaticSearch + Logstash + Kibana
  • MQ(Kafka)

2、主框架

  • Spring Boot 2.2.5
  • Spring Framework 5.2.4
  • Spring Security 2.2.1

3、持久层

  • Apache MyBatis 3.4 + MyBatisPlus
  • Alibaba Druid 1.1

4、视图层

  • Vue
  • ElementUI

规范约定

  • 禁止使用 Lombok 语法(为什么)

  • Nacos 来实现注册与发现

  • 工程名称规范:

    • 前端:以 pai 开头,前端以 ui 结尾, 如:pai-xxx-ui
    • 后端:以 pai 开头, 如:pai-xxx
    • Docker:以 pai 开头,前端以 dk 结尾, 如:pai-xxxx-dk
    • 数据端:以 pai-dp 开头, 如:pai-dp-xxxx
  • 统一端口:后端工程为8080,前端工程为80

  • 源代码参考 GitFlow 工作流 规范,以 develop 为开发分支,master 为保护分支,只能合并不能提交

  • 每个后端工程会对应一个数据库,库名为工程名,账号为工程名,密码由系统随机生成

  • 表名以应用缩写为前缀,要求由字母和下划线组成,如:sys_users

  • 表结构规范

    • 主键使用雪花算法生成

    • varchar 最长2000,超过请使用text类型

    • 时间使用datetime类型

    • 默认要有create_by,create_time,update_by,update_time字段;create_by、update_by存使用者主键

      Hutool 雪花算法ID工具,workerId与datacenterId还需确定怎么取值,暂时(1, 1)

      示例:

      Snowflake snowflake = IdUtil.createSnowflake(1, 1);
      snowflake.nextId();

  • 遵从阿里 JAVA 开发规范

Pai 工具介绍及安装

Pai 工具介绍

pai是一个能让开发进行以下一系列的操作的辅助工具:

  • 快速创建工程项目骨架

  • 根据表结构生成代码

  • 使用Maven进行本地运行和执行单测试

  • 远程构建: 编译 > 打包 > 构建Docker > K8S部署

pai命令

Pai 工具安装

Git提交消息约定

  • [IMP] 提升改善正在开发或者已经实现的功能

  • [FIX] 修正BUG

  • [REF] 重构一个功能,对功能重写

  • [ADD] 添加实现新功能

  • [REM] 删除不需要的文件

创建套件

1. 创建套件

  • 登录 开发者后台
  • 演示套件(sims) cn.flyrise.sims
  • sims > student information management system 学生信息管理系统

角色权限配置

  • 权限管理:定义权限标识,在接口类(Controller)进行权限鉴权
  • 角色管理:场景化设计及开过程按角色进行鉴权放行
  • 数据权限:按部门或个体进行数据组分配,在业务实现中进行获取过滤数据

参数配置

  • 数字字典:分为系统级(只读)、套件级(只读)、用户级(编辑)
  • 参数管理:预定义套件中工程要用到的参数声明,利于在安装套件时进行配置实际的参数

消息配置

  • 即模板配置,于开发阶段先定义一个开发模板标识,实现开发与使用者解耦

流水号配置

  • 即模板配置,于开发阶段先定义一个开发模板标识,实现开发与使用者解耦,开发阶段需要引入Common包进行模板代码实现

流程建模

  • 开发阶段定义好流程标识,绑定表单,绘制标准建议流程,再由实施阶段进行规则配置

规则管理

  • 通过引用Common包加注解式声明,再由实施阶段进行配置实际的规则

API权限

  • 申请开通获取Client Id 和 Secret Key(只能通过重置获取),开通后通过AIP市场选用接口套件,添加进来即进行了授权

OSS配置

  • 申请开通获取Client Id 和 Secret Key 通过Nacos配置参数,前端提供了标准化附件上传及回显示控件,需后端配合实现OSS认证签发

2. 后端

  • 创建工程 pai-sim
# 根据骨架创建工程
pai create service -n pai-sims -s cn.flyrise.sims

# 初始化git
cd pai-sims
pai init

# 添加所有文件
pai add .

# 提交初始项目
pai commit -m "[ADD] 创建初始项目"

SQL目录:src/main/resources/meta/sql/VYYYYMMDDNN__[DESC].sql
Nacos配置:src/main/reources/meta/nacos.yml

修改Swagger标题:学生信息管理系统

  • 创建表生成代码

student 学生信息表

字段 类型 描述
name varchar(20) 姓名
age int(11) 年龄
sex char(1) 性别(F - 女 M - 男 O - 其他)
cd pai-sims
pai code -t student
  • 本地运行(pai 或 IDE)
pai run 
  • 国际化

详细说明

文件夹里包含三个属性文件: messages.properties,messages_en_US.properties和messages_zh_CN.properties,
其中 messages.properties 是个默认文件,即使为空也要有,否则MessageSource加会变成[Empty MessageSource]
切记切记 所有文件编码必需是 UTF-8 格式

  • 验证+国际化

VO

/** 姓名 */
@ApiModelProperty("姓名")
@NotBlank
@InvalidCode(value = "5001",  desc = "姓名")
private String name;

/** 年龄 */
@ApiModelProperty("年龄")
@Range(min = 6, max = 100)
@InvalidCode(value = "5002",  desc = "年龄")
private Integer age;

PO
原则上建议继承BaseEntity,如不继承需要配置自动填充注解

Controller
注意修改Swagger描述,原则上Controller不写业务逻辑,统一写到Service层,新增或修改基本上要返回处理完成的VO(实际上是PO在Service中转成VO返回)

@ApiOperation("添加单条记录")
@PostMapping
public Reply<StudentVO> insert(@RequestBody @Valid StudentVO vo) {
    return Reply.success(this.studentService.add(vo));
}

Sevice

@Override
public StudentVO add(StudentVO studentVO){
    StudentPO po = new StudentPO();
    po.setName(studentVO.getName());
    StudentPO exist = selectOnePO(new QueryWrapper<>(po));
    if(exist != null){
        throw new SimsBizException(BusinessErrors.ERR_1001, null);
    }

    studentVO = insertVoReturnVO(studentVO);
    return studentVO;
}

可通过 BusinessErrors.main生成message.properties
通过Swagger 添加全局参数模拟不同语言: Accept-Language en-US header

  • 异常处理

    统一抛出异常BizException的子类

  • 获取当前用户信息

    LoginUser loginUser = SecurityUtils.getLoginUser();

    相关权限及鉴权参考详情

  • 部署运行

# 添加所有文件
pai add .

# 添加新功能模块
pai commit -m "[ADD] 增加学生信息管理功能"

# 推送代码到远程仓库
pai push

# 远程构建并部署到k8s
pai deploy service -n pai-sims

实战演练

图书管理系统

表1 图书信息表(TB_BOOINFO)

字段名 类型 长度 小数位数 允许空 默认值 描述
ID VARCHAR 19 0 主键
BOOKCODE VARCHAR 30 0 图书条形码(可唯一索引)
BOOKNAME VARHCAR 50 0 V NULL 图书名称
BOOKTYPE VARHCAR 50 0 V NULL 图书类型
AUTHOR VERCHAR 50 0 V NULL 作者
TRANSLATOER VERCHAR 50 0 V NULL 图书翻译者
PUBNAME VERCHAR 100 0 V NULL 出版社名
PRICE DECIMAL 19 4 V NULL 价格
PAGE INT 11 0 V NULL 页码
BCASE VERCHAR 50 0 V NULL 书架信息
STORAGE INT 11 0 V NULL 库存
INTTIME DATETIME V NULL 入库时间
OPERATOR VERCHAR 30 0 V NULL 操作员
BORROWNUM INT 11 0 V NULL 借阅次数

表2 图书类型信息表(TB_BOOKTYPE)

字段名 类型 长度 小数位数 允许空 默认值 描述
ID VARCHAR 19 0 主键
TYPENAME VARCHAR 30 0 NULL 类型名称
DAYS INT 11 0 V NULL 可借阅天数

表3 读者信息表(TB_READER)

字段名 类型 长度 小数位数 允许空 默认值 描述
ID VARCHAR 19 0 主键
NAME VARCHAR 50 0 V NULL 姓名
SEX VARCHAR 50 0 V NULL 类型
UTYPE VARCHAR 50 0 V NULL
BIRTHDAY DATETIME V NULL 出生日期
PAPERTYPE VARCHAR 20 0 V NULL 证件类型
PAPERNUM VARCHAR 30 0 V NULL 证件号码
TEL VARCHAR 20 0 V NULL 联系电话
EMAIL VARCHAR 50 0 V NULL 电子邮件
REGDATE VARCHAR 50 0 V NULL 注册日期
OPERATOR VARCHAR 30 0 V NULL 操作人员
REMARK VARCHAR 300 0 V NULL 备注
BORROWNUM INT 11 0 V NULL 借阅图书本数
TOTALS INT 11 0 V NULL 借阅图书总数量

表4 读者类型表(TB_READERTYPE)

字段名 类型 长度 小数位数 允许空 默认值 描述
ID VARCHAR 19 0 主键
NAME VARCHAR 50 0 V NULL 读者类型名称
NUMBER INT 10 0 V NULL 该类型可借书数量
文档更新时间: 2024-04-25 14:58   作者:管理员