Ei kuvausta

hyx bb66a8b278 feat:新增校核相关功能 5 kuukautta sitten
server bb66a8b278 feat:新增校核相关功能 5 kuukautta sitten
.gitignore 4066495b90 first commit 5 kuukautta sitten
README.md 4066495b90 first commit 5 kuukautta sitten
pack.sh 4066495b90 first commit 5 kuukautta sitten
pom.xml 4066495b90 first commit 5 kuukautta sitten
卫星应用软件研究室开发规范.md c305bc8d04 init 5 kuukautta sitten

README.md

分布式飞控决策指挥系统

  • 网关Swagger: localhost:36601/swagger-ui/
  • 监控服务: localhost:36600

持续集成结果演示地址:

一、开发环境

1.1 语言及框架

  1. 开发语言

    • Java
    • JDK:1.8
  2. 中间件

    • 关系型数据库: Mysql 8
    • 内存数据库:Redis
  3. 部署环境

    • Linux、Docker

1.2 开发工具

  1. 通用

    • 版本控制工具:Git
    • Git仓库:GitLab
    • 编辑器:VSCode
  2. 后端

    • 数据库设计:PowerDesigner
    • 集成开发环境(IDE):Intellij IDEA > 必装插件:Lombok Plugin、MybatisX
    • Maven 3.3.9+
    • 数据库管理:IDEA、Navicat Premium 12.1+

二、开发事项

  1. 代码生成

code-generator模块内,运行CodeGenerator.java主类,控制台填相关参数,即可生成代码。

代码生成模板每个项目需要自己按照实际情况,调整部分内容,具体配置文件看: codegen.properties

代码生成模板,请按照实际情况进行调整,模板位置codegen-template

  1. 登录

    • 登录接口具体直接看Swagger - uac_Login章节。包含登录、登出、用户会话列表查询、踢用户下线

    • 使用swagger调试接口时,先调用/login登录接口获取token,然后将token填入swagger右上角的Authorize按钮中。

    • 密码前端统一先使用md5普通加密一次,所以直接调用登录接口时,需要使用md5以后的密码。

      例如初始密码六个1:111111,MD5以后为96e79218965eb72c92a549dd5a330112,则直接调用接口登陆时,使用的密码即为此MD5码。 UI前端密码输入框自动做了MD5转换,所以直接输入111111即可。

  2. 分页查询

分页查询,后端统一提供一个参数为PageModel对象的接口,前端传递对象信息作为参数进行查询。

- size: 分页条数,-1时表示查询所有
- page: 分页页数,第几页
- sortName: 排序方式:如多排序条件,分隔符为英文半角逗号:name asc,date desc
- queryConditionJson: 查询条件

  前端可以自由定制查询条件,格式如下
     ```
     [{"fieldName":"name","operate":"eq","value":"g"},{},...,{}]
     等于:eq,不等于:ne
     大于:gt,小于:lt,大于等于:ge,小于等于:le
     类似:like,不类似:notLike
     区间:between,两个值分别用 value,endValue
     包含:in,不包含:notIn
     为Null:isNull,不为Null:isNotNull
     ```
  1. 后端内部构造查询条件

任意Service内,可以使用以下方式,无需写sql即可创建查询,主要利用到mybatis-plus条件构造器实现。

使用方式例如:

```java 
//方式1
public List<User> findAllByLoginId(String value) {
    //需要在某service构造其他service的查询条件时,调用对应的 service.createQuery()方法即可。
    QueryDetail<User> queryDetail = createQuery();
    queryDetail.lambda().eq(User::getLoginId, value);
    return findAll(queryDetail);
}

//方式2
public List<User> findAllByLoginIdOrPhone(String value) {
    List<User> users = findAll(createQuery().lambda().eq(User::getLoginId, value).or().eq(User::getPhone, value));
    return users;
}
```
  1. WebSocket支持,右转 server/enhance/enhance-websocket

使用方式请查看enhance-websocket/README.md

  1. 前端部署

分离部署:前端单独打包为nginx镜像运行。 合并部署:前端build后,将dist文件夹内容,复制到server/gateway/src/main/resources/static 文件夹。

三、数据权限控制

数据权限控制功能,一般情况下为根据用户、组织、角色等进行数据查询结果的筛选。

系统已经包含数据权限控制功能,本质上为不同查询接口,需要根据不同的用户角色权限拼接不同的SQL条件。具体用法举例如下:

@Controller
@RequestMapping("/user")
public class UserResource extends DataVOResource<UserService, UserVO> {

    @DataScope(orgAlias = "o",statementIds = {"com.c503.htphy.ddcs.module.uac.repository.UserRepository.selectById"})
    @GetMapping(value = "/")
    @ApiOperation(value = "获取用户列表", notes = "根据分页参数获取分页列表")
    public ResponseEntity<CustomMessage<JsonNode>> getPage(PageModel<UserVO> pm) {
        service.findVOPage(pm);
        JsonNode rs = JacksonUtils.toJsonNodeWithDefaultMapper(pm);
        return ResultBuilder.buildObject(rs);
    }
}

关键点在会调用到数据库访问的方法上,添加@DataScope注解,注解具体字段内容,和需要控制的权限对象有关,具体请看: DataScope.java

相关代码请查看:com.c503.htphy.ddcs.module.config.config.datascope

背后利用到Mybatis-plus拦截插件功能。基于注解,增加切面类对所有需要进行权限控制的SQL语句拼接条件。 因此如需自定义更丰富的权限控制条件,请继续拓展DataScopeAspect.java