1.工程启动最简步骤

  1. 启动PigxNacosApplication
  2. 启动PigxGatewayApplication
  3. 启动PigxAdminApplication
  4. 启动所需业务微服务
  5. 修改本地host
    1. 127.0.0.1 pigx-register
    2. 127.0.0.1 pigx-gateway
    3. 127.0.0.1 pigx-redis
    4. 127.0.0.1 pigx-xxl
    5. 127.0.0.1 pigx-mysql
    6. 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 常量

    1. --enums 枚举<br /> 对数据项标准的状态使用枚举的考虑:1.由于数据表中同时存放状态编码及状态名称,故前端可以直接显示状态名称;2.在业务上六个状态编码及名称几乎不会发生改变,故选择使用枚举方式表示状态。

    2.controller 对外暴露的接口

  • DataStdCatalogController 数据项目录

包括新增、修改、删除、通过id查询、查询全部目录并给出树形结构体、通过目录名称模糊搜索所有上级树形结构体。

  • DataStdController 数据项标准

包括新增、修改、通过id删除(需要校验状态)、下线、发布、存草稿以及数据导入导出等。
【注】下线逻辑:数据标准下线,下线版本记录复制到发布历史表中。
【注】发布时一定要前端传版本号

  • DataStdDraftController 数据项草稿

包括新增、修改、通过id查询、发布等功能
【注】草稿发布逻辑:1.保存或更新草稿数据 2.主表旧版本copy到历史表 3.草稿copy到主表 4.草稿删除

  • DataStdHisController 数据项历史

查询发布历史记录

3.dto 数据传输对象

  • UserInfo 用户信息中转(待用户中心完成后按需修改)

    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 审批预留
  • IUserService 用户中心预留

    9.utils 工具类

  • LocalDateTimeConverter 由于EasyExcel不支持LocalDateTime,所以编写此转换器。

  • TreeNode 树形节点(可用于目录树、菜单树等树形结构体)
  • TreeUtil 生成树的工具类

    10.vo 视图对象

    3.业务逻辑

    发布/下线流程

    image.png

    4.可能存在疑问的一些点

a.controller中的注解

  1. //在类或方法上使用@Inner注解,使得url无需鉴权。
  2. @Inner(value = false)
  3. //允许跨域请求
  4. @CrossOrigin
  5. public class DataStdController {
  6. }

b.判断符合某条件的数据是否存在

  1. /**
  2. * 检查此目录下是否有数据。
  3. *
  4. * 注:使用select 1 。。。limit 1原因: 遍历到第一个满足条件时停止,可减少大数据量时的查询时间。
  5. *
  6. * @param catalCd
  7. * @return
  8. */
  9. @Select("select 1 from data_std_t where catal_cd = #{catalCd} limit 1")
  10. Integer existStdByCatalCd(String catalCd);

c.异常处理方式:

通过GlobalBizExceptionHandler(全局业务异常处理类)拦截CustomException(自定义异常类)以及Exception。
抛业务异常建议使用此方式:throw new CustomException("xxxxx");
以handleCustomException为例:

  1. @ExceptionHandler(CustomException.class)
  2. @ResponseStatus(HttpStatus.OK)
  3. public R handleCustomException(CustomException e){
  4. log.error("自定义异常信息 ex={}",e.getMessage(),e);
  5. Tracer.trace(e);
  6. return R.failed(e.getLocalizedMessage());
  7. }

代码中抛出的CustomException会被@ExceptionHandler(CustomException.class)捕获。
@ResponseStatus(HttpStatus.OK)表示返回200状态码。

d.关于目录数据初始化

  1. 在resources目录下创建schema.sql,data.sql文件。
  2. schema.sql中写入DDL脚本,data.sql中写入DML脚本。
  3. 在nacos相应的配置文件中增加配置
    1. spring:
    2. datasource:
    3. schema: classpath:schema.sql
    4. data: classpath:data.sql
    5. initialization-mode: always
    4.启动服务即可

4.数据项标准未来需要完善的

  1. 授权
  2. 审批及用户信息接口
  3. 数据项标准的数据类型(建议使用码表增加可扩展性)
  4. 导入数据目前不能返回失败信息