1.工程启动最简步骤
- 启动PigxNacosApplication
- 启动PigxGatewayApplication
- 启动PigxAdminApplication
- 启动所需业务微服务
- 修改本地host
127.0.0.1 pigx-register
127.0.0.1 pigx-gateway
127.0.0.1 pigx-redis
127.0.0.1 pigx-xxl
127.0.0.1 pigx-mysql
127.0.0.1 pigx-sentinel
注:常用地址
本地nacos地址:http://localhost:8848/nacos/
swagger2地址:http://pigx-gateway:9999/swagger-ui.html
框架使用文档:http://124.93.26.52:63324/web/
2.目录结构
1.constant 常量
--enums 枚举<br /> 对数据项标准的状态使用枚举的考虑:1.由于数据表中同时存放状态编码及状态名称,故前端可以直接显示状态名称;2.在业务上六个状态编码及名称几乎不会发生改变,故选择使用枚举方式表示状态。
2.controller 对外暴露的接口
- DataStdCatalogController 数据项目录
包括新增、修改、删除、通过id查询、查询全部目录并给出树形结构体、通过目录名称模糊搜索所有上级树形结构体。
- DataStdController 数据项标准
包括新增、修改、通过id删除(需要校验状态)、下线、发布、存草稿以及数据导入导出等。
【注】下线逻辑:数据标准下线,下线版本记录复制到发布历史表中。
【注】发布时一定要前端传版本号
- DataStdDraftController 数据项草稿
包括新增、修改、通过id查询、发布等功能
【注】草稿发布逻辑:1.保存或更新草稿数据 2.主表旧版本copy到历史表 3.草稿copy到主表 4.草稿删除
- DataStdHisController 数据项历史
3.dto 数据传输对象
-
4.entity 实体类
5.exception 自定义异常类
CustomException继承自RuntimeException,可被GlobalBizExceptionHandler捕获
public class CustomException extends RuntimeException
6.handle 处理器
GlobalBizExceptionHandler 全局异常处理器,详细说明请参考4.c异常处理方式
7.mapper
需要编写一些mabtis plus不能生成的复杂sql,如多表关联等
8.service 服务层
—business 业务整合层
IDraftService 通过dao层聚合实现两种方式的单条草稿发布
- IStdService 通过dao层聚合实现批量删除/下线/发布等功能
- IStdUploadService 数据导入
—dao 一般性增删改查
—rpc 远程过程调用(一般使用Feign)
- IApprovalService 审批预留
-
9.utils 工具类
LocalDateTimeConverter 由于EasyExcel不支持LocalDateTime,所以编写此转换器。
- TreeNode 树形节点(可用于目录树、菜单树等树形结构体)
- TreeUtil 生成树的工具类
10.vo 视图对象
略3.业务逻辑
发布/下线流程
4.可能存在疑问的一些点
a.controller中的注解
//在类或方法上使用@Inner注解,使得url无需鉴权。
@Inner(value = false)
//允许跨域请求
@CrossOrigin
public class DataStdController {
}
b.判断符合某条件的数据是否存在
/**
* 检查此目录下是否有数据。
*
* 注:使用select 1 。。。limit 1原因: 遍历到第一个满足条件时停止,可减少大数据量时的查询时间。
*
* @param catalCd
* @return
*/
@Select("select 1 from data_std_t where catal_cd = #{catalCd} limit 1")
Integer existStdByCatalCd(String catalCd);
c.异常处理方式:
通过GlobalBizExceptionHandler(全局业务异常处理类)拦截CustomException(自定义异常类)以及Exception。
抛业务异常建议使用此方式:throw new CustomException("xxxxx");
。
以handleCustomException为例:
@ExceptionHandler(CustomException.class)
@ResponseStatus(HttpStatus.OK)
public R handleCustomException(CustomException e){
log.error("自定义异常信息 ex={}",e.getMessage(),e);
Tracer.trace(e);
return R.failed(e.getLocalizedMessage());
}
代码中抛出的CustomException
会被@ExceptionHandler(CustomException.class)
捕获。@ResponseStatus(HttpStatus.OK)
表示返回200状态码。
d.关于目录数据初始化
- 在resources目录下创建schema.sql,data.sql文件。
- schema.sql中写入DDL脚本,data.sql中写入DML脚本。
- 在nacos相应的配置文件中增加配置
4.启动服务即可spring:
datasource:
schema: classpath:schema.sql
data: classpath:data.sql
initialization-mode: always
4.数据项标准未来需要完善的
- 授权
- 审批及用户信息接口
- 数据项标准的数据类型(建议使用码表增加可扩展性)
- 导入数据目前不能返回失败信息