commit adaec0eadd39bb21e8a381a6cf43f7730e0b2b65 Author: clay <20932067@zju.edu.cn> Date: Wed Mar 6 17:44:09 2024 +0800 init diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..0994585 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,50 @@ +### Java template +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +### Maven template +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +# https://github.com/takari/maven-wrapper#usage-without-binary-jar +.mvn/wrapper/maven-wrapper.jar + +### Example user template template +### Example user template + +# IntelliJ project files +.idea +*.iml +out +gen + + +!$DRONE_COMMIT_BRANCH.jar +!start.sh \ No newline at end of file diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..45f7168 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,105 @@ +kind: pipeline +type: docker +name: fateverse +platform: + os: linux + arch: arm64 + + +steps: + - name: build-jar # 流水线名称 + image: maven:3.8.5-openjdk-11 # 定义创建容器的Docker镜像,maven:3.8.5-openjdk-8用于对java进行打包使用 + volumes: # 将容器内目录挂载到宿主机,仓库需要开启Trusted设置 + - name: maven-cache + path: /root/.m2 # 将maven下载依赖的目录挂载出来,防止重复下载 + - name: maven-build + path: /app/build # 将应用打包好的Jar和执行脚本挂载出来 + commands: # 定义在Docker容器中执行的shell命令 + - sed -i 's/$DRONE_COMMIT_BRANCH/'"$DRONE_COMMIT_BRANCH"'/' start.sh + - bash maven.sh + + - name: build-docker # 制作docker镜像 + image: docker # 使用官方docker镜像 + volumes: # 将容器内目录挂载到宿主机 + - name: maven-build + path: /app/build # 将应用打包好的Jar和执行脚本挂载出来 + - name: docker + path: /var/run/docker.sock # 挂载宿主机的docker +# - name: skywalking +# path: /app/skywalking + environment: # 获取到密文的docker用户名和密码 + DOCKER_USERNAME: + from_secret: docker_username + DOCKER_PASSWORD: + from_secret: docker_password + REGISTRY: + from_secret: registry + REGISTRY_NAMESPACE: + from_secret: registry_namespace + commands: # 定义在Docker容器中执行的shell命令 + - cd /app/build/$DRONE_COMMIT_BRANCH + - sed -i 's/$REGISTRY/'"$REGISTRY"'/' deployment.yml + - sed -i 's/$REGISTRY_NAMESPACE/'"$REGISTRY_NAMESPACE"'/' deployment.yml + - sed -i 's/$DRONE_COMMIT_BRANCH/'"$DRONE_COMMIT_BRANCH"'/' start.sh + - sed -i 's/$DRONE_COMMIT_BRANCH/'"$DRONE_COMMIT_BRANCH"'/' Dockerfile + - sed -i 's/$DRONE_COMMIT_BRANCH/'"$DRONE_COMMIT_BRANCH"'/' .dockerignore + - sed -i 's/$DRONE_COMMIT_BRANCH/'"$DRONE_COMMIT_BRANCH"'/' deployment.yml + - sed -i 's/$DRONE_COMMIT/'"$DRONE_COMMIT"'/' deployment.yml + # docker登录,不能在脚本中登录,并且不能使用docker login -u -p + - echo $DOCKER_PASSWORD | docker login $REGISTRY --username $DOCKER_USERNAME --password-stdin + - chmod +x docker.sh +# - cp -r /app/skywalking ./ + - sh docker.sh + # 执行完脚本删除本次制作的docker镜像,避免多次后当前runner空间不足 + - docker rmi -f $(docker images | grep $DRONE_COMMIT_BRANCH | awk '{print $3}') + + + - name: deploy # rancher运行 + image: bitnami/kubectl:1.26.13-debian-11-r1 #阿里云的kubectl镜像,里面包含kubectl命令行工具 + volumes: # 将容器内目录挂载到宿主机 + - name: maven-build + path: /app/build # 将应用打包好的Jar和执行脚本挂载出来 + - name: config + path: /app/config # 将kubectl 配置文件挂载出来 + commands: # 定义在Docker容器中执行的shell命令 + - cd /app/build/$DRONE_COMMIT_BRANCH + # 通过kubectl指令运行deployment.yml,并指定授权文件kubectl_conf.yml + - kubectl apply -f deployment.yml -n fateverse --kubeconfig=/app/config/base-taishan-kubectl.yml + + + +volumes: + - name: maven-build + host: + path: /home/build/fateverse + - name: skywalking + host: + path: /home/skywalking-agent + - name: config # k8s对接的配置文件 + host: + path: /home/kubect + - name: maven-cache + host: + path: /home/data/maven/cache + - name: docker + host: + path: /var/run/docker.sock +# 定义触发条件 +trigger: + branch: + - gateway + - auth + - admin-biz + - notice-biz + - log-biz + - monitor + - code-gen + - custom-query + - sentinel-dashboard + - sentinel-dashboard-pro + - code-gen-test-mysql + - workflow + - flowable + + event: + - push \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e29b398 --- /dev/null +++ b/.gitignore @@ -0,0 +1,36 @@ +.gradle +/build/ +!gradle/wrapper/gradle-wrapper.jar + +**/target/ +#**/resources/bootstrap.yml +#common/common-log/pom.xml +!.mvn/wrapper/maven-wrapper.jar + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..c453a69 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,18 @@ +FROM openjdk:11.0.10-jre +VOLUME /tmp +RUN useradd -b /home -m -s /bin/bash clay +RUN chmod a+xr -R /home/clay && chown clay:clay -R /home/clay +#COPY skywalking /home/clay/skywalking-agent +#RUN chmod a+xr -R /home/clay/skywalking-agent && chown clay:clay -R /home/clay/skywalking-agent +USER clay +ARG NAME=$DRONE_COMMIT_BRANCH +COPY ./$NAME.jar /home/clay/$NAME.jar +COPY start.sh /home/clay/start.sh +WORKDIR /home/clay +RUN mkdir -p /home/clay/logs && touch /home/clay/logs/spring.log +#RUN mkdir -p /home/clay/code +#RUN chmod 777 /home/clay/code +#RUN mkdir -p /home/clay/skywalking-agent/logs && touch /home/clay/skywalking-agent/logs/skywalking-api.log +ENV REF_NAME dev +EXPOSE 8080 +CMD bash /home/clay/start.sh $REF_NAME && echo "start logging..." && : > /home/clay/logs/spring.log && tail -F -n 500 /home/clay/logs/spring.log \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..872deba --- /dev/null +++ b/README.md @@ -0,0 +1,70 @@ +# 系统说明 + +- 基于 Spring Cloud 2021 、Spring Boot 2.7、 Spring Security 的权限管理系统 +- 采用前后端分离的模式,前端(基于 FateVerse-React, FateVerse-Vue) +- 注册中心,配置中心使用Nacos,权限认证使用Spring Security + Redis +- 流量控制使用Sentinel,分布式事务选用Seata +- gitea+drone+harbor+rancher全套部署流程 + +## 快速开始 + +### 核心依赖 + +| 依赖 | 版本 | +|----------------------|------------| +| Spring Boot | 2.7.5 | +| Spring Cloud | 2021.0.5 | +| Spring Cloud Alibaba | 2021.0.4.0 | +| Mybatis | 3.5.2 | +| Vue | 3.1.3 | +| React | 3.1.3 | + +### 模块说明 + +```lua +FateVerse +├── auth -- 授权服务提供 +└── common -- 系统公共模块 + ├── common-code -- 代码引擎的基础封装 + ├── common-core -- 公共工具类核心包 + ├── common-decrypt -- 加密模块 + ├── common-dubbo -- dubbo rpc服务 + ├── common-email -- 邮件发送服务 + ├── common-excel -- excel导出模块 + ├── common-file -- 分布式文件存储 + ├── common-lock -- 分布式锁模块 + ├── common-mybatis -- mybatis 扩展封装 + ├── common-mybatis-puls -- mybatis-puls 扩展封装 + ├── common-redis -- redis序列化封装 + ├── common-seata -- seata模块 + ├── common-security -- 系统权限控制模块 + ├── common-swagger -- swagger接口文档 + └── common-log -- 系统日志记录 +└── notice -- 通用消息公告模块 + ├── notice-api -- 通用消息公告模块公共api模块 + └── notice-biz -- 通用消息公告模块业务处理模块[5000] +└── admin -- 通用用户权限管理模块 + ├── admin-api -- 通用用户权限管理系统公共api模块 + └── admin-biz -- 通用用户权限管理系统业务处理模块[4000] +├── sql -- 数据库文件 +└── visual -- 图形化管理模块 + ├── code-gen -- 代码生成模块 + ├── monitor -- 服务监控 + └── sentinel-dashboard -- sentinel 官方版 +└── nacos_config.zip -- nacos基础配置 +``` + +### 本地开发 运行 + +### 对象存储 + +在 SpringBoot **FTP**、**minio**、**FastDFS**、**阿里云OSS** + +### 系统架构图 + +![architecture_diagram.png](architecture_diagram.png) + +### 压力测试 + +- 4*8 单节点测试结果 + ![qps_test.png](qps_test.png) \ No newline at end of file diff --git a/admin/admin-api/pom.xml b/admin/admin-api/pom.xml new file mode 100644 index 0000000..1231232 --- /dev/null +++ b/admin/admin-api/pom.xml @@ -0,0 +1,34 @@ + + + + admin + cn.fateverse + 1.0.0 + + 4.0.0 + + admin-api + + + + cn.fateverse + common-dubbo + + + cn.fateverse + common-core + + + cn.fateverse + common-swagger + true + + + cn.fateverse + common-decrypt + true + + + \ No newline at end of file diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/dto/ConfigDto.java b/admin/admin-api/src/main/java/cn/fateverse/admin/dto/ConfigDto.java new file mode 100644 index 0000000..2f1b254 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/dto/ConfigDto.java @@ -0,0 +1,71 @@ +package cn.fateverse.admin.dto; + +import cn.fateverse.admin.entity.Config; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * 参数配置表对象 sys_config + * + * @author clay + * @date 2023-06-09 + */ +@Data +@ApiModel("参数配置表Dto") +public class ConfigDto { + + /** + * 参数主键 + */ + @ApiModelProperty("参数主键") + private Integer configId; + + /** + * 参数名称 + */ + @NotNull(message = "参数名称不能为空!") + @ApiModelProperty("参数名称") + private String configName; + + /** + * 参数键名 + */ + @NotNull(message = "参数键名不能为空!") + @ApiModelProperty("参数键名") + private String configKey; + + /** + * 参数键值 + */ + @NotNull(message = "参数键值不能为空!") + @ApiModelProperty("参数键值") + private String configValue; + + /** + * 系统内置(1是 0否) + */ + @NotNull(message = "是否系统内置不能为空!") + @ApiModelProperty("系统内置(1是 0否)") + private Integer configType; + + /** + * 备注 + */ + @ApiModelProperty("备注") + private String remark; + + public Config toConfig() { + Config build = Config.builder() + .configId(configId) + .configName(configName) + .configKey(configKey) + .configValue(configValue) + .configType(configType) + .build(); + build.setRemark(remark); + return build; + } +} \ No newline at end of file diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/dto/DeptDto.java b/admin/admin-api/src/main/java/cn/fateverse/admin/dto/DeptDto.java new file mode 100644 index 0000000..f2db241 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/dto/DeptDto.java @@ -0,0 +1,83 @@ +package cn.fateverse.admin.dto; + +import lombok.Data; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; + +/** + * 部门表 sys_dept + * + * @author Clay + * @date 2022/10/30 + */ +@Data +public class DeptDto { + + + /** + * 部门ID + */ + private Long deptId; + + /** + * 父部门ID + */ + private Long parentId; + + /** + * 祖级列表 + */ + private String ancestors; + + /** + * 部门名称 + */ + @NotBlank(message = "部门名称不能为空!") + private String deptName; + + /** + * 显示顺序 + */ + @NotNull(message = "显示顺序不能为空!") + private Integer orderNum; + + /** + * 负责人 + */ + @NotBlank(message = "负责人不能为空!") + private String leader; + + /** + * 负责人id + */ + @NotNull(message = "负责人id不能为空!") + private Long leaderId; + + /** + * 联系电话 + */ + @Pattern(message = "手机号格式错误!",regexp = "^1[0-9]{10}$") + private String phone; + + /** + * 邮箱 + */ + @Email(message = "邮箱格式错误!") + private String email; + + /** + * 部门状态:1正常,0停用 + */ + private String state; + + /** + * 删除标志(0代表存在 2代表删除) + */ + private String delFlag; + + + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/dto/DictDataDto.java b/admin/admin-api/src/main/java/cn/fateverse/admin/dto/DictDataDto.java new file mode 100644 index 0000000..6121316 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/dto/DictDataDto.java @@ -0,0 +1,70 @@ +package cn.fateverse.admin.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @author Clay + * @date 2023/5/18 + */ +@Data +@ApiModel("字典数据实体") +public class DictDataDto { + /** + * 字典编码 + */ + private Long dictCode; + /** + * 字典排序 + */ + @ApiModelProperty("字典排序") + @NotNull(message = "状态不能为空!") + private Integer dictSort; + /** + * 字典标签 + */ + @ApiModelProperty("字典标签") + @NotNull(message = "字典标签不能为空!") + private String dictLabel; + /** + * 字典键值 + */ + @ApiModelProperty("字典键值") + @NotNull(message = "字典键值不能为空!") + private String dictValue; + /** + * 字典类型 + */ + @ApiModelProperty("字典类型") + @NotNull(message = "字典类型不能为空!") + private String dictType; + /** + * 样式属性(其他样式扩展) + */ + @ApiModelProperty("样式属性(其他样式扩展)") + private Boolean isType; + /** + * 表格回显样式 + */ + @ApiModelProperty("表格回显样式") + private String listClass; + /** + * 字典显示主题(ui框架时)or文字颜色(自定义颜色时) + */ + @ApiModelProperty("字典显示主题(ui框架时)or文字颜色(自定义颜色时)") + private String theme; + /** + * 是否默认(Y是 N否) + */ + @ApiModelProperty("是否默认(Y是 N否)") + private Integer isDefault; + /** + * 状态(1正常 0停用) + */ + @ApiModelProperty(value = "状态(1正常 0停用)",required = true) + @NotNull(message = "状态不能为空!") + private String state; +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/dto/DictTypeDto.java b/admin/admin-api/src/main/java/cn/fateverse/admin/dto/DictTypeDto.java new file mode 100644 index 0000000..ed01f09 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/dto/DictTypeDto.java @@ -0,0 +1,42 @@ +package cn.fateverse.admin.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @author Clay + * @date 2022/11/9 + */ +@Data +@ApiModel("字典类型实体") +public class DictTypeDto { + + /** + * 字典主键 + */ + @ApiModelProperty("字典主键") + private Long dictId; + /** + * 字典名称 + */ + @ApiModelProperty("字典名称") + @NotNull(message = "字典名称不能为空!") + private String dictName; + /** + * 字典类型 + */ + @ApiModelProperty("字典类型") + @NotNull(message = "字典类型不能为空!") + private String dictType; + /** + * 字典状态(1正常 0停用) + */ + @ApiModelProperty("字典状态") + @NotNull(message = "字典状态不能为空!") + private String state; + + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/dto/IpBackDto.java b/admin/admin-api/src/main/java/cn/fateverse/admin/dto/IpBackDto.java new file mode 100644 index 0000000..56f7cb6 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/dto/IpBackDto.java @@ -0,0 +1,26 @@ +package cn.fateverse.admin.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * @author Clay + * @date 2023-10-22 + */ +@Data +public class IpBackDto { + /** + * 主键id + */ + @ApiModelProperty("主键id") + private Long id; + /** + * ip地址 + */ + @NotBlank(message = "ip地址不能为空") + @ApiModelProperty("ip地址") + private String ipAddr; + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/dto/MappingSwitchDto.java b/admin/admin-api/src/main/java/cn/fateverse/admin/dto/MappingSwitchDto.java new file mode 100644 index 0000000..475fd56 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/dto/MappingSwitchDto.java @@ -0,0 +1,33 @@ +package cn.fateverse.admin.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import cn.fateverse.common.decrypt.annotation.EncryptField; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * @author Clay + * @date 2024/2/5 16:37 + */ +@Data +@ApiModel("接口开关Dto") +public class MappingSwitchDto { + /** + * key作为唯一编号 + */ + @NotBlank(message = "唯一编号不能为空") + @ApiModelProperty("唯一编号不能为空") + @EncryptField + private String key; + + /** + * 当前方法的状态,true为正常放行,false为关闭 + */ + @NotNull(message = "状态不能为空") + @ApiModelProperty("当前方法的状态,true为正常放行,false为关闭") + private Boolean state; + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/dto/MenuDto.java b/admin/admin-api/src/main/java/cn/fateverse/admin/dto/MenuDto.java new file mode 100644 index 0000000..48fd9a8 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/dto/MenuDto.java @@ -0,0 +1,114 @@ +package cn.fateverse.admin.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.io.Serializable; + +/** + * 菜单详细返回对象 + * + * @author Clay + */ +@Data +@ApiModel("菜单") +public class MenuDto implements Serializable { + + /** + * 菜单ID + */ + @ApiModelProperty("菜单ID") + private Long menuId; + + /** + * 菜单名称 + */ + @NotBlank(message = "菜单名称不能为空") + @Size(min = 0, max = 50, message = "菜单名称长度不能超过50个字符") + @ApiModelProperty("菜单名称") + private String menuName; + + /** + * 父菜单ID + */ + @ApiModelProperty("父菜单ID") + private Long parentId; + + /** + * 显示顺序 + */ + @ApiModelProperty("显示顺序") + @NotNull(message = "显示顺序不能为空") + private Integer orderNum; + + /** + * 路由地址 + */ + @ApiModelProperty("路由地址") + @Size(min = 0, max = 200, message = "路由地址不能超过200个字符") + private String path; + + @ApiModelProperty("路径参数") + private String pathParams; + + /** + * 组件路径 + */ + @ApiModelProperty("组件路径") + @Size(min = 0, max = 200, message = "组件路径不能超过255个字符") + private String component; + + /** + * 是否为外链(0是 1否) + */ + @ApiModelProperty("是否为外链(0是 1否)") + private Boolean isFrame; + + /** + * 是否缓存(0缓存 1不缓存) + */ + @ApiModelProperty("是否缓存(0缓存 1不缓存)") + private Boolean isCache; + + @ApiModelProperty("不重定向") + private Boolean noRedirect; + + @ApiModelProperty("面包屑") + private Boolean breadcrumb; + + /** + * 类型(D目录 M菜单 B按钮) + */ + @ApiModelProperty("类型(D目录 M菜单 B按钮)") + @NotBlank(message = "菜单类型不能为空") + private String menuType; + + /** + * 显示状态(0显示 1隐藏) + */ + @ApiModelProperty("显示状态(0显示 1隐藏)") + private String visible; + + /** + * 菜单状态(0显示 1隐藏) + */ + @ApiModelProperty("菜单状态(0显示 1隐藏)") + private String state; + + /** + * 权限字符串 + */ + @ApiModelProperty("权限字符串") + @Size(min = 0, max = 100, message = "权限标识长度不能超过100个字符") + private String perms; + + /** + * 菜单图标 + */ + @ApiModelProperty("菜单图标") + private String icon; +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/dto/PostDto.java b/admin/admin-api/src/main/java/cn/fateverse/admin/dto/PostDto.java new file mode 100644 index 0000000..abc2f7c --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/dto/PostDto.java @@ -0,0 +1,47 @@ +package cn.fateverse.admin.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @author Clay + * @date 2022/11/26 + */ +@Data +@ApiModel("岗位实体") +public class PostDto { + + /** + * 岗位ID + */ + @ApiModelProperty("岗位ID") + private Long postId; + /** + * 岗位编码 + */ + @ApiModelProperty("岗位编码") + @NotNull(message = "岗位编码不能为空!") + private String postCode; + /** + * 岗位名称 + */ + @ApiModelProperty("岗位名称") + @NotNull(message = "岗位名称不能为空!") + private String postName; + /** + * 显示顺序 + */ + @ApiModelProperty("显示顺序") + @NotNull(message = "显示顺序不能为空!") + private Integer postSort; + /** + * 状态(1正常 0停用) + */ + @ApiModelProperty("状态(1正常 0停用)") + @NotNull(message = "状态不能为空!") + private String state; + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/dto/RoleDto.java b/admin/admin-api/src/main/java/cn/fateverse/admin/dto/RoleDto.java new file mode 100644 index 0000000..a380c1c --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/dto/RoleDto.java @@ -0,0 +1,87 @@ +package cn.fateverse.admin.dto; + +import cn.fateverse.admin.entity.Role; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.Set; + +/** + * @author Clay + * @date 2022/11/5 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@ApiModel("角色接受对象") +public class RoleDto { + + /** + * 角色ID + */ + @ApiModelProperty("角色id") + private Long roleId; + + /** + * 角色名称 + */ + @ApiModelProperty("角色名称") + @NotBlank(message = "角色名称不能为空!") + private String roleName; + + /** + * 角色关键词 + */ + @ApiModelProperty("角色关键词") + @NotBlank(message = "角色关键词不能为空!") + private String roleKey; + + /** + * 角色排序 + */ + @ApiModelProperty("角色排序") + @NotNull(message = "角色排序不能为空!") + private Integer roleSort; + + /** + * 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限) + */ + @ApiModelProperty("数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限)") + private String dataScope; + + /** + * 角色状态(1正常 0停用) + */ + @ApiModelProperty("角色状态(1正常 0停用)") + @NotBlank(message = "角色状态不能为空!") + private String state; + + /** + * 菜单组 + */ + @ApiModelProperty("菜单组") + private Set menuIds; + + /** + * 部门组(数据权限) + */ + @ApiModelProperty("部门组(数据权限)") + private Long[] deptIds; + + public Role toRole() { + return Role.builder() + .roleId(roleId) + .roleName(roleName) + .roleKey(roleKey) + .roleSort(roleSort) + .dataScope(dataScope) + .state(state) + .delFlag("0") + .build(); + } +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/dto/UserDto.java b/admin/admin-api/src/main/java/cn/fateverse/admin/dto/UserDto.java new file mode 100644 index 0000000..14cd0f3 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/dto/UserDto.java @@ -0,0 +1,100 @@ +package cn.fateverse.admin.dto; + +import cn.fateverse.admin.entity.UserBase; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.util.List; + +/** + * @author Clay + * @date 2022/11/7 + */ +@Data +@ApiModel("用户返回实体") +public class UserDto{ + + + /** + * 用户ID + */ + private Long userId; + + /** + * 部门ID + */ + private Long deptId; + + /** + * 用户账号 + */ + @NotBlank(message = "用户名称不能为空") + @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符") + private String userName; + + /** + * 用户昵称 + */ + @NotBlank(message = "用户昵称不能为空") + @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符") + private String nickName; + + /** + * 用户邮箱 + */ + @Email(message = "邮箱格式不正确") + @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符") + private String email; + + /** + * 手机号码 + */ + @Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符") + private String phoneNumber; + + /** + * 用户性别 + */ + private String sex; + + /** + * 密码 + */ + private String password; + + /** + * 帐号状态(1正常 0停用) + */ + private String state; + + /** + * 岗位ids + */ + @ApiModelProperty("岗位ids") + private List postIds; + /** + * 角色ids + */ + @ApiModelProperty("角色ids") + private List roleIds; + + + public UserBase toUser() { + return UserBase.builder() + .userId(userId) + .deptId(deptId) + .userName(userName) + .nickName(nickName) + .email(email) + .phoneNumber(phoneNumber) + .sex(sex) + .password(password) + .state(state) + .build(); + } + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/dubbo/DubboDeptService.java b/admin/admin-api/src/main/java/cn/fateverse/admin/dubbo/DubboDeptService.java new file mode 100644 index 0000000..ac503d8 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/dubbo/DubboDeptService.java @@ -0,0 +1,19 @@ +package cn.fateverse.admin.dubbo; + +import cn.fateverse.admin.vo.DeptVo; + +import java.util.List; + +/** + * @author Clay + * @date 2023-02-20 + */ +public interface DubboDeptService { + /** + * 通过部门id获取到部门信息 + * + * @param deptIds 部门列表 + * @return 返回部门信息 + */ + List searchDeptByDeptId(List deptIds); +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/dubbo/DubboDictDataService.java b/admin/admin-api/src/main/java/cn/fateverse/admin/dubbo/DubboDictDataService.java new file mode 100644 index 0000000..ede1f0d --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/dubbo/DubboDictDataService.java @@ -0,0 +1,23 @@ +package cn.fateverse.admin.dubbo; + +import cn.fateverse.admin.vo.DictDataVo; + +import java.util.List; +import java.util.Map; + +/** + * @author Clay + * @date 2023-02-20 + */ + +public interface DubboDictDataService { + + /** + * 获取到字典缓存 + * + * @param cacheKeys 字典缓存key + * @return 映射完成的字典对象 + */ + Map> searchDictDataCacheKeys(List cacheKeys); + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/dubbo/DubboMenuService.java b/admin/admin-api/src/main/java/cn/fateverse/admin/dubbo/DubboMenuService.java new file mode 100644 index 0000000..c6f4022 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/dubbo/DubboMenuService.java @@ -0,0 +1,55 @@ +package cn.fateverse.admin.dubbo; + +import cn.fateverse.admin.dto.MenuDto; +import cn.fateverse.admin.vo.MenuVo; +import cn.fateverse.admin.vo.RouterVo; +import cn.fateverse.common.core.result.Result; + +import java.util.List; +import java.util.Set; + +/** + * @author Clay + * @date 2023-02-20 + */ +public interface DubboMenuService { + /** + * 获取到用户的菜单权限信息 + * + * @param userId 用户id + * @return 当前用户的权限信息 + */ + Set selectMenuPermsByUserId(Long userId); + + /** + * 保存登录信息 + * + * @param userId 用户id + * @return 当前用户的路由信息 + */ + List selectMenuRouterByUserId(Long userId); + + /** + * 新增菜单 + * + * @param menuDto 菜单对象 + * @return 操作结果 + */ + Result insertMenu(MenuDto menuDto); + + /** + * 删除菜单 + * + * @param menuId 菜单id + */ + void removeMenu(Long menuId); + + /** + * 根据id查询父级菜单信息 + * + * @param menuId 父级菜单 + * @return 菜单信息 + */ + Result selectMenuByMenuId(Long menuId); + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/dubbo/DubboRoleService.java b/admin/admin-api/src/main/java/cn/fateverse/admin/dubbo/DubboRoleService.java new file mode 100644 index 0000000..9157d60 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/dubbo/DubboRoleService.java @@ -0,0 +1,18 @@ +package cn.fateverse.admin.dubbo; + +import java.util.List; + +/** + * @author Clay + * @date 2023-05-06 + */ +public interface DubboRoleService { + + /** + * 根据角色id获取到角色name + * + * @param roleIds 角色id + * @return 角色名称 + */ + List searchRoleNameByIds(List roleIds); +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/dubbo/DubboUserService.java b/admin/admin-api/src/main/java/cn/fateverse/admin/dubbo/DubboUserService.java new file mode 100644 index 0000000..375a372 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/dubbo/DubboUserService.java @@ -0,0 +1,60 @@ +package cn.fateverse.admin.dubbo; + +import cn.fateverse.admin.entity.User; +import cn.fateverse.admin.vo.UserVo; + +import java.util.List; + +/** + * @author Clay + * @date 2023-02-20 + */ + +public interface DubboUserService { + /** + * 通过用户名查询用户信息 + * + * @param username 用户名称 + * @return 用户信息 + */ + User getUserByUsername(String username); + + /** + * 根据用户id查询用户信息 + * + * @param userId 用户id + * @return 用户信息 + */ + User getUserByUserId(Long userId); + + /** + * 根据roleId查询用户列表 + * + * @param roleIds 角色id列表 + * @return 用户信息列表 + */ + List searchUserListByRoleIds(List roleIds); + + /** + * 根据用户id查询用户信息 + * + * @param userIds 用户id列表 + * @return 用户信息列表 + */ + List searchUserListByUserIds(List userIds); + + /** + * 根据部门id查询用户信息 + * + * @param deptIds 部门信息列表 + * @return 部门列表 + */ + List searchUserByDeptIds(List deptIds); + + /** + * 获取所有的用户id + * + * @return 所有用户的id + */ + List searchAllUserIds(); +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/entity/Config.java b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/Config.java new file mode 100644 index 0000000..7e177b9 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/Config.java @@ -0,0 +1,49 @@ +package cn.fateverse.admin.entity; + +import cn.fateverse.common.core.annotaion.EnableAutoField; +import cn.fateverse.common.core.entity.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + + +/** + * 参数配置表对象 sys_config + * + * @author clay + * @date 2023-06-09 +*/ +@Data +@Builder +@EnableAutoField +@AllArgsConstructor +@NoArgsConstructor +public class Config extends BaseEntity{ + + /** + * 参数主键 + */ + private Integer configId; + + /** + * 参数名称 + */ + private String configName; + + /** + * 参数键名 + */ + private String configKey; + + /** + * 参数键值 + */ + private String configValue; + + /** + * 系统内置(1是 0否) + */ + private Integer configType; + +} \ No newline at end of file diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/entity/Dept.java b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/Dept.java new file mode 100644 index 0000000..0dbdde3 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/Dept.java @@ -0,0 +1,86 @@ +package cn.fateverse.admin.entity; + +import cn.fateverse.common.core.annotaion.EnableAutoField; +import cn.fateverse.common.core.entity.BaseEntity; +import lombok.Data; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; + +/** + * 部门表 sys_dept + * + * @author Clay + * @date 2022/10/30 + */ +@Data +@EnableAutoField +public class Dept extends BaseEntity { + + + /** + * 部门ID + */ + private Long deptId; + + /** + * 父部门ID + */ + private Long parentId; + + /** + * 祖级列表 + */ + private String ancestors; + + /** + * 部门名称 + */ + @NotBlank(message = "部门名称不能为空!") + private String deptName; + + /** + * 显示顺序 + */ + @NotNull(message = "显示顺序不能为空!") + private Integer orderNum; + + /** + * 负责人 + */ + @NotBlank(message = "负责人不能为空!") + private String leader; + + /** + * 负责人id + */ + @NotNull(message = "负责人id不能为空!") + private Long leaderId; + + /** + * 联系电话 + */ + @Pattern(message = "手机号格式错误!",regexp = "^1[0-9]{10}$") + private String phone; + + /** + * 邮箱 + */ + @Email(message = "邮箱格式错误!") + private String email; + + /** + * 部门状态:1正常,0停用 + */ + private String state; + + /** + * 删除标志(0代表存在 2代表删除) + */ + private String delFlag; + + + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/entity/DictData.java b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/DictData.java new file mode 100644 index 0000000..bf09558 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/DictData.java @@ -0,0 +1,141 @@ +package cn.fateverse.admin.entity; + +import cn.fateverse.admin.dto.DictDataDto; +import cn.fateverse.admin.vo.DictDataSimpVo; +import cn.fateverse.admin.vo.DictDataVo; +import cn.fateverse.common.core.annotaion.EnableAutoField; +import cn.fateverse.common.core.entity.BaseEntity; +import cn.fateverse.common.core.entity.Option; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.beans.BeanUtils; + +/** + * @author Clay + * @date 2022/11/9 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@EnableAutoField +public class DictData extends BaseEntity { + /** + * 字典编码 + */ + private Long dictCode; + /** + * 字典排序 + */ + private Integer dictSort; + /** + * 字典标签 + */ + private String dictLabel; + /** + * 字典键值 + */ + private String dictValue; + /** + * 字典类型 + */ + private String dictType; + /** + * 样式属性(其他样式扩展) + */ + private Boolean isType; + /** + * 表格回显样式 + */ + private String listClass; + /** + * 字典显示主题(ui框架时)or文字颜色(自定义颜色时) + */ + private String theme; + /** + * 是否默认(Y是 N否) + */ + private Integer isDefault; + /** + * 状态(1正常 0停用) + */ + private String state; + + public static DictData toDictData(DictDataDto dto) { + return DictData.builder() + .dictCode(dto.getDictCode()) + .dictSort(dto.getDictSort()) + .dictLabel(dto.getDictLabel()) + .dictValue(dto.getDictValue()) + .dictType(dto.getDictType()) + .isType(dto.getIsType()) + .listClass(dto.getListClass()) + .theme(dto.getTheme()) + .isDefault(dto.getIsDefault()) + .state(dto.getState()) + .build(); + } + + public static DictDataVo toDictDataListVo(DictData dict) { + return DictDataVo.builder() + .dictCode(dict.getDictCode()) + .dictLabel(dict.getDictLabel()) + .dictSort(dict.getDictSort()) + .dictValue(dict.getDictValue()) + .dictType(dict.getDictType()) + .isDefault(dict.getIsDefault()) + .isType(dict.getIsType()) + .state(dict.getState()) + .listClass(dict.getListClass()) + .theme(dict.getTheme()) + .createTime(dict.getCreateTime()) + .build(); + } + + /** + * 字典对象转换成为Option对象 + * + * @param dictData 字典对象 + * @return Option选项 + */ + public static Option dictDataToOption(DictData dictData) { + return Option.builder() + .value(dictData.getDictValue()) + .label(dictData.getDictLabel()) + .build(); + } + + + /** + * 将DictData对象转换为DictDataVo对象 + * + * @param dict 待转换的DictData对象 + * @return 转换后的DictDataVo对象 + */ + public static DictDataVo toDictDataVo(DictData dict) { + DictDataVo dataVo = new DictDataVo(); + BeanUtils.copyProperties(dict, dataVo); + return dataVo; + } + + + /** + * 字典对象转换成为简单的字典返回Vo + * + * @param dictData 字典对象 + * @return 简单vo对象 + */ + public static DictDataSimpVo toDictDataSimpVo(DictData dictData) { + return DictDataSimpVo.builder() + .label(dictData.getDictLabel()) + .value(dictData.getDictValue()) + .isType(dictData.getIsType()) + .listClass(dictData.getListClass()) + .theme(dictData.getTheme()) + .isDefault(dictData.getIsDefault()) + .build(); + } + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/entity/DictType.java b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/DictType.java new file mode 100644 index 0000000..53b31dd --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/DictType.java @@ -0,0 +1,45 @@ +package cn.fateverse.admin.entity; + +import cn.fateverse.common.core.annotaion.EnableAutoField; +import cn.fateverse.common.core.entity.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @author Clay + * @date 2022/11/9 + */ +@Data +@EnableAutoField +@ApiModel("字典类型实体") +public class DictType extends BaseEntity { + + /** + * 字典主键 + */ + @ApiModelProperty("字典主键") + private Long dictId; + /** + * 字典名称 + */ + @ApiModelProperty("字典名称") + @NotNull(message = "字典名称不能为空!") + private String dictName; + /** + * 字典类型 + */ + @ApiModelProperty("字典类型") + @NotNull(message = "字典类型不能为空!") + private String dictType; + /** + * 字典状态(1正常 0停用) + */ + @ApiModelProperty("字典状态") + @NotNull(message = "字典状态不能为空!") + private String state; + + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/entity/IpBack.java b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/IpBack.java new file mode 100644 index 0000000..b0aa6e4 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/IpBack.java @@ -0,0 +1,38 @@ +package cn.fateverse.admin.entity; + +import cn.fateverse.admin.vo.IpBackVo; +import cn.fateverse.common.core.annotaion.EnableAutoField; +import cn.fateverse.common.core.entity.BaseEntity; +import lombok.Data; + +/** + * @author Clay + * @date 2023-10-22 + */ +@Data +@EnableAutoField +public class IpBack extends BaseEntity { + /** + * 主键id + */ + private Long id; + /** + * ip地址 + */ + private String ipAddr; + /** + * ip类型 ipv4 ipv6 + */ + private String type; + + public IpBackVo toIPBackVo(){ + return IpBackVo.builder() + .id(id) + .ipAddr(ipAddr) + .type(type) + .createTime(getCreateTime()) + .remark(getRemark()) + .build(); + } + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/entity/Menu.java b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/Menu.java new file mode 100644 index 0000000..62a532e --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/Menu.java @@ -0,0 +1,98 @@ +package cn.fateverse.admin.entity; + +import cn.fateverse.common.core.annotaion.EnableAutoField; +import cn.fateverse.common.core.entity.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 菜单权限表 sys_menu + * + * @author Clay + */ +@Data +@Builder +@EnableAutoField +@NoArgsConstructor +@AllArgsConstructor +public class Menu extends BaseEntity { + + + /** + * 菜单ID + */ + private Long menuId; + + /** + * 菜单名称 + */ + private String menuName; + + /** + * 父菜单ID + */ + private Long parentId; + + /** + * 显示顺序 + */ + private Integer orderNum; + + /** + * 路由地址 + */ + private String path; + + /** + * 路径参数 + */ + private String pathParams; + + /** + * 组件路径 + */ + private String component; + + /** + * 是否为外链(1是 0否) + */ + private Boolean isFrame; + + /** + * 是否缓存(1 缓存 0不缓存) + */ + private Boolean isCache; + + + private Boolean noRedirect; + + + private Boolean breadcrumb; + /** + * 类型(D目录 M菜单 B按钮) + */ + private String menuType; + + /** + * 显示状态(1显示 0隐藏) + */ + private String visible; + + /** + * 菜单状态(1正常 0停用) + */ + private String state; + + /** + * 权限字符串 + */ + private String perms; + + /** + * 菜单图标 + */ + private String icon; + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/entity/OnlineUser.java b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/OnlineUser.java new file mode 100644 index 0000000..ad52a76 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/OnlineUser.java @@ -0,0 +1,64 @@ +package cn.fateverse.admin.entity; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; + +import java.util.Date; + +/** + * @author Clay + * @date 2022/11/13 + */ +@Data +@Builder +@ApiModel("在线用户实体") +public class OnlineUser { + + /** + * 会话id + */ + @ApiModelProperty("会话id") + private String tokenId; + + /** + * 用户名 + */ + @ApiModelProperty("用户名") + private String username; + + /** + * 部门名称 + */ + @ApiModelProperty("部门名称") + private String deptName; + /** + * 登录ip + */ + @ApiModelProperty("登录ip") + private String ipAddr; + /** + * 登录地点 + */ + @ApiModelProperty("登录地点") + private String loginLocation; + /** + * 浏览器类型 + */ + @ApiModelProperty("浏览器类型") + private String browser; + /** + * 操作系统 + */ + @ApiModelProperty("操作系统") + private String os; + + /** + * 登录时间 + */ + @ApiModelProperty("登录时间") + private Date loginTime; + + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/entity/Post.java b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/Post.java new file mode 100644 index 0000000..124c0f7 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/Post.java @@ -0,0 +1,41 @@ +package cn.fateverse.admin.entity; + +import cn.fateverse.common.core.annotaion.EnableAutoField; +import cn.fateverse.common.core.entity.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + + +/** + * @author Clay + * @date 2022/11/26 + */ +@Data +@EnableAutoField +@AllArgsConstructor +@NoArgsConstructor +public class Post extends BaseEntity { + + /** + * 岗位ID + */ + private Long postId; + /** + * 岗位编码 + */ + private String postCode; + /** + * 岗位名称 + */ + private String postName; + /** + * 显示顺序 + */ + private Integer postSort; + /** + * 状态(1正常 0停用) + */ + private String state; + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/entity/Role.java b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/Role.java new file mode 100644 index 0000000..eb52b9a --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/Role.java @@ -0,0 +1,77 @@ +package cn.fateverse.admin.entity; + +import cn.fateverse.common.core.annotaion.EnableAutoField; +import cn.fateverse.common.core.entity.BaseEntity; +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + + +/** + * + * @author Clay + * @date 2022/10/30 + */ +@Data +@Builder +@EnableAutoField +@AllArgsConstructor +@NoArgsConstructor +public class Role extends BaseEntity { + + /** + * 角色ID + */ + private Long roleId; + + /** + * 角色名称 + */ + private String roleName; + + /** + * 角色关键词 + */ + private String roleKey; + + /** + * 角色排序 + */ + private Integer roleSort; + + /** + * 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限) + */ + private String dataScope; + + /** + * 角色状态(1正常 0停用) + */ + private String state; + + /** + * 删除标志(0代表存在 1代表删除) + */ + @JsonIgnore + private String delFlag; + + private Integer roleType = 0; + + @JsonIgnore + public boolean isAdmin() { + return isAdmin(this.roleId); + } + + @JsonIgnore + public static boolean isAdmin(Long roleId) { + return roleId != null && 1L == roleId; + } + + public Role(Long roleId) { + this.roleId = roleId; + } + + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/entity/RoleMenu.java b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/RoleMenu.java new file mode 100644 index 0000000..cb67989 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/RoleMenu.java @@ -0,0 +1,22 @@ +package cn.fateverse.admin.entity; + +import lombok.Builder; +import lombok.Data; + +/** + * @author Clay + * @date 2022/11/6 + */ +@Data +@Builder +public class RoleMenu { + /** + * 角色id + */ + private Long roleId; + /** + * 菜单id + */ + private Long menuId; + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/entity/User.java b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/User.java new file mode 100644 index 0000000..b8247b6 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/User.java @@ -0,0 +1,36 @@ +package cn.fateverse.admin.entity; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; + +import java.util.List; + +/** + * @author Clay + * @date 2022/10/27 + */ +@Data +public class User extends UserBase { + + + /** + * 部门对象 + */ + private Dept dept; + + /** + * 角色对象 + */ + private List roles; + + + @JsonIgnore + public boolean isAdmin() { + return isAdmin(super.getUserId()); + } + + @JsonIgnore + public static boolean isAdmin(Long userId) { + return userId != null && 1L == userId; + } +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/entity/UserBase.java b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/UserBase.java new file mode 100644 index 0000000..9646d59 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/UserBase.java @@ -0,0 +1,112 @@ +package cn.fateverse.admin.entity; + +import cn.fateverse.common.core.annotaion.EnableAutoField; +import cn.fateverse.common.core.entity.BaseEntity; +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * @author Clay + * @date 2022/11/7 + */ +@Data +@Builder +@EnableAutoField +@AllArgsConstructor +@NoArgsConstructor +public class UserBase extends BaseEntity { + + /** + * 用户ID + */ + private Long userId; + + /** + * 部门ID + */ + private Long deptId; + + /** + * 用户账号 + */ + private String userName; + + /** + * 用户昵称 + */ + private String nickName; + + /** + * 用户邮箱 + */ + private String email; + + /** + * 手机号码 + */ + private String phoneNumber; + + /** + * 用户性别 + */ + private String sex; + + /** + * 用户头像 + */ + private String avatar; + + /** + * 密码 + */ + private String password; + + /** + * 盐加密 + */ + @JsonIgnore + private String salt; + + /** + * 帐号状态(1正常 0停用) + */ + private String state; + + /** + * 删除标志(0代表存在 2代表删除) + */ + @JsonIgnore + private String delFlag; + /** + * 用户类型 + */ + private String userType; + + /** + * 一个微信开放平台帐号下的应用,同一用户的 union + */ + private String unionId; + /** + * 用户唯一标识 + */ + private String openId; + /** + * 城市 + */ + private String city; + + /** + * 最后登录IP + */ + private String loginIp; + + /** + * 最后登录时间 + */ + private Date loginDate; +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/entity/UserPost.java b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/UserPost.java new file mode 100644 index 0000000..d5f4411 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/UserPost.java @@ -0,0 +1,23 @@ +package cn.fateverse.admin.entity; + +import lombok.Builder; +import lombok.Data; + +/** + * @author Clay + * @date 2022/11/26 + */ +@Data +@Builder +public class UserPost { + /** + * 用户id + */ + private Long userId; + + /** + * 角色id + */ + private Long postId; + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/entity/UserRole.java b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/UserRole.java new file mode 100644 index 0000000..3923b5a --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/entity/UserRole.java @@ -0,0 +1,24 @@ +package cn.fateverse.admin.entity; + +import lombok.Builder; +import lombok.Data; + +/** + * @author Clay + * @date 2022/11/6 + */ +@Data +@Builder +public class UserRole { + + /** + * 用户id + */ + private Long userId; + + /** + * 角色id + */ + private Long roleId; + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/query/ConfigQuery.java b/admin/admin-api/src/main/java/cn/fateverse/admin/query/ConfigQuery.java new file mode 100644 index 0000000..435bda3 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/query/ConfigQuery.java @@ -0,0 +1,38 @@ +package cn.fateverse.admin.query; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 参数配置表对象 sys_config + * + * @author clay + * @date 2023-06-09 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@ApiModel("参数配置表Query") +public class ConfigQuery { + + /** + * 参数名称 + */ + @ApiModelProperty("参数名称") + private String configName; + + /** + * 参数键名 + */ + @ApiModelProperty("参数键名") + private String configKey; + + /** + * 系统内置(1是 0否) + */ + @ApiModelProperty("系统内置(1是 0否)") + private Integer configType; +} \ No newline at end of file diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/query/DictDataQuery.java b/admin/admin-api/src/main/java/cn/fateverse/admin/query/DictDataQuery.java new file mode 100644 index 0000000..619d0d3 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/query/DictDataQuery.java @@ -0,0 +1,28 @@ +package cn.fateverse.admin.query; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author Clay + * @date 2022/11/9 + */ +@Data +public class DictDataQuery { + + /** + * 字典类型 + */ + @ApiModelProperty(value = "字典名称",required = true) + private String dictType; + /** + * 字典标签 + */ + @ApiModelProperty("字典标签") + private String dictLabel; + /** + * 状态(1正常 0停用) + */ + @ApiModelProperty("帐号状态(1正常 0停用)") + private String state; +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/query/DictTypeQuery.java b/admin/admin-api/src/main/java/cn/fateverse/admin/query/DictTypeQuery.java new file mode 100644 index 0000000..47aa286 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/query/DictTypeQuery.java @@ -0,0 +1,31 @@ +package cn.fateverse.admin.query; + +import cn.fateverse.common.core.entity.QueryTime; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author Clay + * @date 2022/11/9 + */ +@Data +public class DictTypeQuery extends QueryTime { + + /** + * 字典名称 + */ + @ApiModelProperty("字典名称") + private String dictName; + /** + * 字典类型 + */ + @ApiModelProperty("字典类型") + private String dictType; + + /** + * 帐号状态(1正常 0停用) + */ + @ApiModelProperty("帐号状态(1正常 0停用)") + private String state; + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/query/IpBackQuery.java b/admin/admin-api/src/main/java/cn/fateverse/admin/query/IpBackQuery.java new file mode 100644 index 0000000..e8c668c --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/query/IpBackQuery.java @@ -0,0 +1,23 @@ +package cn.fateverse.admin.query; + +import cn.fateverse.common.core.annotaion.Excel; +import cn.fateverse.common.core.entity.QueryTime; +import lombok.Data; + +/** + * @author Clay + * @date 2023-10-22 + */ +@Data +public class IpBackQuery extends QueryTime { + /** + * ip地址 + */ + private String ipAddr; + + /** + * ip类型 ipv4 ipv6 + */ + private String type; + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/query/MappingSwitchQuery.java b/admin/admin-api/src/main/java/cn/fateverse/admin/query/MappingSwitchQuery.java new file mode 100644 index 0000000..6b12c5e --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/query/MappingSwitchQuery.java @@ -0,0 +1,23 @@ +package cn.fateverse.admin.query; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author Clay + * @date 2024/2/5 14:35 + */ +@Data +@ApiModel("接口开关Query") +public class MappingSwitchQuery { + + @ApiModelProperty("应用名称") + private String applicationName; + + @ApiModelProperty("类别名称") + private String className; + + @ApiModelProperty("方法名称") + private String methodName; +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/query/PostQuery.java b/admin/admin-api/src/main/java/cn/fateverse/admin/query/PostQuery.java new file mode 100644 index 0000000..7795ca0 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/query/PostQuery.java @@ -0,0 +1,34 @@ +package cn.fateverse.admin.query; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @author Clay + * @date 2022/11/26 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PostQuery { + + /** + * 岗位编码 + */ + @ApiModelProperty("岗位编码") + private String postCode; + + /** + * 岗位名称 + */ + @ApiModelProperty("岗位名称") + private String postName; + + /** + * 状态(1正常 0停用) + */ + @ApiModelProperty("状态(1正常 0停用)") + private String state; +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/query/RoleQuery.java b/admin/admin-api/src/main/java/cn/fateverse/admin/query/RoleQuery.java new file mode 100644 index 0000000..983363a --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/query/RoleQuery.java @@ -0,0 +1,31 @@ +package cn.fateverse.admin.query; + +import cn.fateverse.common.core.entity.QueryTime; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author Clay + * @date 2022/11/4 + */ +@Data +@ApiModel("角色查询实体") +public class RoleQuery extends QueryTime { + /** + * 权限字符 + */ + @ApiModelProperty("角色名称") + private String roleName; + + /** + * 权限字符 + */ + @ApiModelProperty("权限字符") + private String roleKey; + /** + * 帐号状态(1正常 0停用) + */ + @ApiModelProperty("帐号状态(1正常 0停用)") + private String state; +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/query/UserQuery.java b/admin/admin-api/src/main/java/cn/fateverse/admin/query/UserQuery.java new file mode 100644 index 0000000..8717e40 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/query/UserQuery.java @@ -0,0 +1,41 @@ +package cn.fateverse.admin.query; + +import cn.fateverse.common.core.entity.QueryTime; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author Clay + * @date 2022/11/2 + */ +@Data +@ApiModel("用户查询对象") +public class UserQuery extends QueryTime { + + /** + * 部门ID + */ + @ApiModelProperty("部门ID") + private Long deptId; + + /** + * 用户账号 + */ + @ApiModelProperty("用户账号") + private String userName; + + /** + * 手机号码 + */ + @ApiModelProperty("手机号码") + private String phoneNumber; + + /** + * 帐号状态(1正常 0停用) + */ + @ApiModelProperty("帐号状态(1正常 0停用)") + private String state; + + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/vo/ConfigVo.java b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/ConfigVo.java new file mode 100644 index 0000000..ec220f8 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/ConfigVo.java @@ -0,0 +1,76 @@ +package cn.fateverse.admin.vo; + +import cn.fateverse.admin.entity.Config; +import cn.fateverse.common.core.annotaion.Excel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 参数配置表对象 sys_config + * + * @author clay + * @date 2023-06-09 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@ApiModel("参数配置表Vo") +public class ConfigVo { + + /** + * 参数主键 + */ + @ApiModelProperty("参数主键") + private Integer configId; + + /** + * 参数名称 + */ + @ApiModelProperty("参数名称") + @Excel("参数名称") + private String configName; + + /** + * 参数键名 + */ + @ApiModelProperty("参数键名") + @Excel("参数键名") + private String configKey; + + /** + * 参数键值 + */ + @ApiModelProperty("参数键值") + @Excel("参数键值") + private String configValue; + + /** + * 系统内置(1是 0否) + */ + @ApiModelProperty("系统内置(1是 0否)") + @Excel("系统内置(1是 0否)") + private Integer configType; + + /** + * 备注 + */ + @ApiModelProperty("备注") + @Excel("备注") + private String remark; + + public static ConfigVo toConfigVo(Config config) { + return ConfigVo.builder() + .configId(config.getConfigId()) + .configName(config.getConfigName()) + .configKey(config.getConfigKey()) + .configValue(config.getConfigValue()) + .configType(config.getConfigType()) + .remark(config.getRemark()) + .build(); + } +} \ No newline at end of file diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/vo/DeptVo.java b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/DeptVo.java new file mode 100644 index 0000000..d9ff1ba --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/DeptVo.java @@ -0,0 +1,76 @@ +package cn.fateverse.admin.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * @author Clay + * @date 2022/11/2 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DeptVo implements Serializable { + + /** + * 父部门名称 + */ + private Long parentId; + + /** + * 部门ID + */ + private Long deptId; + + /** + * 部门名称 + */ + private String deptName; + + /** + * 显示顺序 + */ + private Integer orderNum; + + /** + * 负责人 + */ + private String leader; + /** + * 负责人Id + */ + private Long leaderId; + + /** + * 联系电话 + */ + private String phone; + + /** + * 邮箱 + */ + private String email; + + /** + * 部门状态:1正常,0停用 + */ + private String state; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 子节点 + */ + private List children; + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/vo/DictDataSimpVo.java b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/DictDataSimpVo.java new file mode 100644 index 0000000..4013cbc --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/DictDataSimpVo.java @@ -0,0 +1,74 @@ +package cn.fateverse.admin.vo; + +import cn.fateverse.admin.entity.DictData; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotNull; + +/** + * @author Clay + * @date 2022/11/11 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@ApiModel("Cache字典数据实体") +public class DictDataSimpVo { + /** + * 字典标签 + */ + @ApiModelProperty("字典标签") + @NotNull(message = "字典标签不能为空!") + private String label; + /** + * 字典键值 + */ + @ApiModelProperty("字典键值") + @NotNull(message = "字典键值不能为空!") + private String value; + /** + * 样式属性(其他样式扩展) + */ + @ApiModelProperty("样式属性(其他样式扩展)") + private Boolean isType; + /** + * 表格回显样式 + */ + @ApiModelProperty("表格回显样式") + private String listClass; + /** + * 字典显示主题(ui框架时)or文字颜色(自定义颜色时) + */ + @ApiModelProperty("字典显示主题(ui框架时)or文字颜色(自定义颜色时)") + private String theme; + /** + * 是否默认(Y是 N否) + */ + @ApiModelProperty("是否默认(Y是 N否)") + private Integer isDefault; + + + /** + * 字典对象转换成为简单的字典返回Vo + * + * @param dictData 字典对象 + * @return 简单vo对象 + */ + public static DictDataSimpVo dictDataToDictDataVo(DictData dictData) { + return DictDataSimpVo.builder() + .label(dictData.getDictLabel()) + .value(dictData.getDictValue()) + .isType(dictData.getIsType()) + .listClass(dictData.getListClass()) + .isDefault(dictData.getIsDefault()) + .build(); + } + + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/vo/DictDataVo.java b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/DictDataVo.java new file mode 100644 index 0000000..d65794d --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/DictDataVo.java @@ -0,0 +1,79 @@ +package cn.fateverse.admin.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Date; + + +/** + * 字典数据返回vo + * + * @author Clay + * @date 2023/05/18 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class DictDataVo implements Serializable { + /** + * 字典编码 + */ + private Long dictCode; + /** + * 字典排序 + */ + @ApiModelProperty("字典排序") + private Integer dictSort; + /** + * 字典标签 + */ + @ApiModelProperty("字典标签") + private String dictLabel; + /** + * 字典键值 + */ + @ApiModelProperty("字典键值") + private String dictValue; + /** + * 字典类型 + */ + @ApiModelProperty("字典类型") + private String dictType; + /** + * 样式属性(其他样式扩展) + */ + @ApiModelProperty("样式属性(其他样式扩展)") + private Boolean isType; + /** + * 表格回显样式 + */ + @ApiModelProperty("表格回显样式") + private String listClass; + /** + * 字典显示主题(ui框架时)or文字颜色(自定义颜色时) + */ + @ApiModelProperty("字典显示主题(ui框架时)or文字颜色(自定义颜色时)") + private String theme; + /** + * 是否默认(Y是 N否) + */ + @ApiModelProperty("是否默认(Y是 N否)") + private Integer isDefault; + /** + * 状态(1正常 0停用) + */ + @ApiModelProperty(value = "状态(1正常 0停用)") + private String state; + + + @ApiModelProperty(value = "创建时间") + private Date createTime; + + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/vo/DictTypeVo.java b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/DictTypeVo.java new file mode 100644 index 0000000..1b77eb0 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/DictTypeVo.java @@ -0,0 +1,48 @@ +package cn.fateverse.admin.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @author Clay + * @date 2022/11/9 + */ +@Data +@Builder +@ApiModel("字典返回实体") +public class DictTypeVo { + /** + * 字典id + */ + @ApiModelProperty("字典id") + private Long dictId; + /** + * 字典名称 + */ + @ApiModelProperty("字典名称") + private String dictName; + /** + * 字典类型 + */ + @ApiModelProperty("字典类型") + private String dictType; + + /** + * 帐号状态(1正常 0停用) + */ + @ApiModelProperty("帐号状态(1正常 0停用)") + private String state; + + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/vo/IpBackVo.java b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/IpBackVo.java new file mode 100644 index 0000000..d63c9b5 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/IpBackVo.java @@ -0,0 +1,61 @@ +package cn.fateverse.admin.vo; + +import cn.fateverse.admin.entity.IpBack; +import cn.fateverse.common.core.annotaion.Excel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * @author Clay + * @date 2023-10-22 + */ +@Data +@Builder +@ApiModel("ip黑名单") +@AllArgsConstructor +@NoArgsConstructor +public class IpBackVo { + /** + * 主键id + */ + @ApiModelProperty("主键id") + @Excel("id") + private Long id; + /** + * ip地址 + */ + @ApiModelProperty("ip地址") + @Excel("ip地址") + private String ipAddr; + /** + * ip类型 ipv4 ipv6 + */ + @ApiModelProperty("ip类型 ipv4 ipv6") + @Excel("ip类型 ipv4 ipv6") + private String type; + /** + * 备注信息 + */ + @Excel("备注信息") + private String remark; + + @ApiModelProperty("创建时间") + @Excel("创建时间") + private Date createTime; + + public static IpBackVo toIpBackVo(IpBack ipBack) { + return IpBackVo.builder() + .id(ipBack.getId()) + .ipAddr(ipBack.getIpAddr()) + .type(ipBack.getType()) + .remark(ipBack.getRemark()) + .createTime(ipBack.getCreateTime()) + .build(); + } +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/vo/MenuSimpVo.java b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/MenuSimpVo.java new file mode 100644 index 0000000..fb9ef11 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/MenuSimpVo.java @@ -0,0 +1,80 @@ +package cn.fateverse.admin.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.Size; +import java.util.Date; +import java.util.List; + +/** + * @author Clay + * @date 2022/11/5 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@ApiModel("菜单返回实体") +public class MenuSimpVo { + + /** + * 菜单ID + */ + @ApiModelProperty("菜单ID") + private Long menuId; + + /** + * 菜单名称 + */ + @ApiModelProperty("菜单名称") + private String menuName; + + /** + * 菜单图标 + */ + @ApiModelProperty("菜单图标") + private String icon; + + /** + * 显示顺序 + */ + @ApiModelProperty("显示顺序") + private Integer orderNum; + + + @ApiModelProperty("显示顺序") + private String menuType; + + /** + * 权限字符串 + */ + @ApiModelProperty("权限字符串") + @Size(min = 0, max = 100, message = "权限标识长度不能超过100个字符") + private String perms; + + /** + * 组件路径 + */ + @ApiModelProperty("组件路径") + private String component; + + /** + * 菜单状态(0显示 1隐藏) + */ + @ApiModelProperty("菜单状态(0显示 1隐藏)") + private String state; + + /** + * 创建时间 + */ + private Date createTime; + + + private List children; + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/vo/MenuVo.java b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/MenuVo.java new file mode 100644 index 0000000..379f27a --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/MenuVo.java @@ -0,0 +1,104 @@ +package cn.fateverse.admin.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * 菜单详细返回对象 + * + * @author Clay + */ +@Data +@ApiModel("菜单") +public class MenuVo implements Serializable { + + /** + * 菜单ID + */ + @ApiModelProperty("菜单ID") + private Long menuId; + + /** + * 菜单名称 + */ + @ApiModelProperty("菜单名称") + private String menuName; + + /** + * 父菜单ID + */ + @ApiModelProperty("父菜单ID") + private Long parentId; + + /** + * 显示顺序 + */ + @ApiModelProperty("显示顺序") + private Integer orderNum; + + /** + * 路由地址 + */ + @ApiModelProperty("路由地址") + private String path; + + @ApiModelProperty("路径参数") + private String pathParams; + + /** + * 组件路径 + */ + @ApiModelProperty("组件路径") + private String component; + + /** + * 是否为外链(0是 1否) + */ + @ApiModelProperty("是否为外链(0是 1否)") + private Boolean isFrame; + + /** + * 是否缓存(0缓存 1不缓存) + */ + @ApiModelProperty("是否缓存(0缓存 1不缓存)") + private Boolean isCache; + + @ApiModelProperty("不重定向") + private Boolean noRedirect; + + @ApiModelProperty("面包屑") + private Boolean breadcrumb; + /** + * 类型(D目录 M菜单 B按钮) + */ + @ApiModelProperty("类型(D目录 M菜单 B按钮)") + private String menuType; + + /** + * 显示状态(0显示 1隐藏) + */ + @ApiModelProperty("显示状态(0显示 1隐藏)") + private String visible; + + /** + * 菜单状态(0显示 1隐藏) + */ + @ApiModelProperty("菜单状态(0显示 1隐藏)") + private String state; + + /** + * 权限字符串 + */ + @ApiModelProperty("权限字符串") + private String perms; + + /** + * 菜单图标 + */ + @ApiModelProperty("菜单图标") + private String icon; + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/vo/MetaVo.java b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/MetaVo.java new file mode 100644 index 0000000..c382431 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/MetaVo.java @@ -0,0 +1,62 @@ +package cn.fateverse.admin.vo; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author Clay + * @date 2022/10/30 + */ +@Data +public class MetaVo implements Serializable { + /** + * 设置该路由在侧边栏和面包屑中展示的名字 + */ + private String title; + + /** + * 设置该路由的图标,对应路径src/assets/icons/svg + */ + private String icon; + + /** + * 设置为true,则不会被 缓存 + */ + private Boolean noCache; + + /** + * 是否重定向 + */ + private Boolean noRedirect; + + /** + * 是否开起面包屑 + */ + private Boolean breadcrumb; + + private Boolean isFrame; + + public MetaVo() { + } + + public MetaVo(String title, String icon) { + this.title = title; + this.icon = icon; + } + + public MetaVo(String title, String icon, Boolean noCache) { + this.title = title; + this.icon = icon; + this.noCache = noCache; + } + + public MetaVo(String title, String icon, Boolean noCache, Boolean noRedirect, Boolean breadcrumb,Boolean isFrame) { + this.title = title; + this.icon = icon; + this.noCache = noCache; + this.noRedirect = noRedirect; + this.breadcrumb = breadcrumb; + this.isFrame = isFrame; + } +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/vo/OptionMenuVo.java b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/OptionMenuVo.java new file mode 100644 index 0000000..8d7c707 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/OptionMenuVo.java @@ -0,0 +1,26 @@ +package cn.fateverse.admin.vo; + +import cn.fateverse.common.core.entity.OptionTree; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; + +import java.util.List; +import java.util.Set; + +/** + * @author Clay + * @date 2022/11/6 + */ +@Data +@Builder +@ApiModel("角色修改时菜单返回实体") +public class OptionMenuVo { + + @ApiModelProperty("已选择的") + private Set checked; + @ApiModelProperty("菜单选择option") + private List menuOption; + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/vo/PostVo.java b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/PostVo.java new file mode 100644 index 0000000..0520950 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/PostVo.java @@ -0,0 +1,69 @@ +package cn.fateverse.admin.vo; + +import cn.fateverse.admin.entity.Post; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.Date; + +/** + * @author Clay + * @date 2023-05-05 + */ +@Data +@Builder +@ApiModel("岗位实体") +public class PostVo { + + /** + * 岗位ID + */ + @ApiModelProperty("岗位ID") + private Long postId; + /** + * 岗位编码 + */ + @ApiModelProperty("岗位编码") + @NotNull(message = "岗位编码不能为空!") + private String postCode; + /** + * 岗位名称 + */ + @ApiModelProperty("岗位名称") + @NotNull(message = "岗位名称不能为空!") + private String postName; + /** + * 显示顺序 + */ + @ApiModelProperty("显示顺序") + @NotNull(message = "显示顺序不能为空!") + private Integer postSort; + /** + * 状态(1正常 0停用) + */ + @ApiModelProperty("状态(1正常 0停用)") + @NotNull(message = "状态不能为空!") + private String state; + + /** + * 创建时间 + */ + @JsonFormat(locale = "zh",timezone = "GMT+8",pattern = "yyyy-MM-dd") + private Date createTime; + + public static PostVo toPostVo(Post post){ + return PostVo.builder() + .postId(post.getPostId()) + .postCode(post.getPostCode()) + .postName(post.getPostName()) + .postSort(post.getPostSort()) + .state(post.getState()) + .createTime(post.getCreateTime()) + .build(); + } + +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/vo/RoleVo.java b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/RoleVo.java new file mode 100644 index 0000000..f480cd9 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/RoleVo.java @@ -0,0 +1,78 @@ +package cn.fateverse.admin.vo; + +import cn.fateverse.admin.entity.Role; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; +import java.util.Set; + + +/** + * @author Clay + * @date 2023-05-26 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class RoleVo { + + @ApiModelProperty("角色id") + private Long roleId; + + @ApiModelProperty("角色名称") + private String roleName; + + + @ApiModelProperty("角色权限字符串") + private String roleKey; + + @ApiModelProperty("角色排序") + private Integer roleSort; + + /** + * 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限) + */ + @ApiModelProperty("数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限)") + private String dataScope; + + /** + * 角色状态(1正常 0停用) + */ + @ApiModelProperty("角色状态(1正常 0停用)") + private String state; + + /** + * 菜单组 + */ + @ApiModelProperty("菜单组") + @JsonInclude(JsonInclude.Include.NON_NULL) + private Set menuIds; + + /** + * 部门组(数据权限) + */ + @ApiModelProperty("部门组(数据权限)") + @JsonInclude(JsonInclude.Include.NON_NULL) + private Long[] deptIds; + private Date createTime; + private Date updateTime; + + public static RoleVo toRoleVo(Role role){ + return RoleVo.builder() + .roleId(role.getRoleId()) + .roleName(role.getRoleName()) + .roleKey(role.getRoleKey()) + .roleSort(role.getRoleSort()) + .dataScope(role.getDataScope()) + .state(role.getState()) + .createTime(role.getCreateTime()) + .updateTime(role.getUpdateTime()) + .build(); + } +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/vo/RouterVo.java b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/RouterVo.java new file mode 100644 index 0000000..c14ac72 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/RouterVo.java @@ -0,0 +1,69 @@ +package cn.fateverse.admin.vo; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL; + +/** + * @author Clay + * @date 2022/10/30 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class RouterVo implements Serializable { + /** + * 路由名字 + */ + private String name; + + /** + * 路由地址 + */ + private String path; + /** + * 路径参数 + */ + private String pathParams; + + /** + * 是否隐藏路由,当设置 true 的时候该路由不会再侧边栏出现 + */ + private boolean hidden; + + /** + * 重定向地址,当设置 noRedirect 的时候该路由在面包屑导航中不可被点击 + */ + @JsonInclude(NON_NULL) + private String redirect; + + /** + * 组件地址 + */ + private String component; + + /** + * 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面 + */ + @JsonInclude(NON_NULL) + private Boolean alwaysShow; + + /** + * 其他元素 + */ + private MetaVo meta; + + /** + * 子路由 + */ + @JsonInclude(NON_NULL) + private List children; +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/vo/UserChooseVo.java b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/UserChooseVo.java new file mode 100644 index 0000000..0b379b3 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/UserChooseVo.java @@ -0,0 +1,62 @@ +package cn.fateverse.admin.vo; + +import cn.fateverse.admin.entity.Role; +import cn.fateverse.admin.entity.Dept; +import lombok.Builder; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Clay + * @date 2023-03-02 + */ +@Data +@Builder +public class UserChooseVo { + + private Long id; + + private String name; + + private Integer type; + + private String value; + + private String avatar; + + private List children; + + + public static UserChooseVo toUserChooseByDept(Dept dept, Long id) { + return UserChooseVo.builder() + .id(dept.getDeptId()) + .type(2) + .value(id + "-" + dept.getDeptId()) + .children(new ArrayList<>()) + .name(dept.getDeptName()) + .build(); + } + + public static UserChooseVo toUserChooseByRole(Role role) { + return UserChooseVo.builder() + .id(role.getRoleId()) + .type(1) + .value("0-" + role.getRoleId()) + .children(new ArrayList<>()) + .name(role.getRoleName()) + .build(); + } + + public static UserChooseVo toUserChooseByUser(UserVo user, long id) { + return UserChooseVo.builder() + .id(user.getUserId()) + .type(0) + .value(id + "-" + user.getUserId()) + .children(new ArrayList<>()) + .avatar(user.getAvatar()) + .name(user.getNickName()) + .build(); + } +} diff --git a/admin/admin-api/src/main/java/cn/fateverse/admin/vo/UserDetailVo.java b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/UserDetailVo.java new file mode 100644 index 0000000..7a7c9d3 --- /dev/null +++ b/admin/admin-api/src/main/java/cn/fateverse/admin/vo/UserDetailVo.java @@ -0,0 +1,34 @@ +package cn.fateverse.admin.vo; + +import cn.fateverse.admin.entity.User; +import cn.fateverse.common.core.entity.Option; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Builder; +import lombok.Data; + +import java.util.List; + +/** + * @author Clay + * @date 2022/11/4 + */ +@Data +@Builder +@ApiModel("用户详细信息") +public class UserDetailVo { + @ApiModelProperty("用户基本细腻系") + private User user; + + @ApiModelProperty("用户所在的岗位") + private List postIds; + + @ApiModelProperty("岗位option选择数组") + private List