init: UserBaseService (backend + deploy + scripts)
ci-userbase-service / build-and-push (push) Successful in 40s

This commit is contained in:
chenxing
2026-08-10 14:50:22 +08:00
commit 4ec19486e0
234 changed files with 15604 additions and 0 deletions
@@ -0,0 +1,39 @@
package com.yunhai.userbase.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.util.Arrays;
import java.util.Optional;
/**
* @author chenx
* @date 2026/1/5 11:15
* @description 虚拟节点类型
*/
@Getter
@NoArgsConstructor
@AllArgsConstructor
public enum BizType {
ROOT (1),
TEXTBOOK (2),
GRADE (3),
KNOWLEDGE (4),
REALLY (5),
;
private Integer key;
public static BizType getByKey(Integer key){
BizType[] enums = BizType.values();
Optional<BizType> opt = Arrays.stream(enums).filter(item -> item.getKey().equals(key)).findAny();
if(opt.isPresent()){
return opt.get();
}else {
return null;
}
}
}
@@ -0,0 +1,50 @@
package com.yunhai.userbase.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.util.Arrays;
import java.util.Optional;
/**
* @author chenx
* @date 2026/1/16 9:32
* @description 资源类型
*/
@Getter
@NoArgsConstructor
@AllArgsConstructor
public enum BookType {
/** 教材 */
TextBook (1,"教材"),
/** 教辅 */
TeachingTutoring (2,"教辅"),
/** 知识点 */
KnowledgePoint (3,"知识点"),
;
private Integer key;
private String value;
public static BookType getByKey(Integer key){
BookType[] enums = BookType.values();
Optional<BookType> opt = Arrays.stream(enums).filter(item -> item.getKey().equals(key)).findAny();
if(opt.isPresent()){
return opt.get();
}else {
return null;
}
}
public static String getValue(Integer key) {
for (BookType bookType : BookType.values()) {
if (bookType.getKey().equals(key)) {
return bookType.getValue();
}
}
return null;
}
}
@@ -0,0 +1,35 @@
package com.yunhai.userbase.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author chenx
* @date 2026/07/13
* @description 客户端来源
*/
@Getter
@AllArgsConstructor
public enum ClientEnum implements IEnum<Integer> {
PC_BROWSER(1, "Pc浏览器"),
MOBILE_APP(2, "移动App"),
SYSTEM_MODULE(4, "系统模块"),
WECHAT_OFFICIAL(8, "微信公众号"),
WORK_WECHAT(16, "企业微信"),
DING_TALK(32, "钉钉"),
STUDENT_DEVICE(64, "学伴机");
private Integer key;
private String value;
@Override
public Integer getKey() {
return this.key;
}
@Override
public String getValue() {
return this.value;
}
}
@@ -0,0 +1,30 @@
package com.yunhai.userbase.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author chenx
* @date 2026/07/13
* @description 性别
*/
@Getter
@AllArgsConstructor
public enum GenderEnum implements IEnum<Integer> {
FEMALE(0, "女"),
MALE(1, "男");
private Integer key;
private String value;
@Override
public Integer getKey() {
return this.key;
}
@Override
public String getValue() {
return this.value;
}
}
@@ -0,0 +1,36 @@
package com.yunhai.userbase.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author chenx
* @date 2026/07/13
* @description 分组类型
*/
@Getter
@AllArgsConstructor
public enum GroupTypeEnum implements IEnum<Integer> {
NORMAL_GROUP(1, "普通组"),
SCHOOL_GROUP(2, "学校组"),
GRADE_GROUP(3, "年级组"),
CLASS_GROUP(4, "班级组"),
AREA_GROUP(5, "区域组"),
STAGE_GROUP(6, "学段组"),
TEACHER_GROUP(7, "教师组"),
STUDENT_GROUP(8, "学生组");
private Integer key;
private String value;
@Override
public Integer getKey() {
return this.key;
}
@Override
public String getValue() {
return this.value;
}
}
@@ -0,0 +1,65 @@
package com.yunhai.userbase.enums;
import com.yunhai.userbase.utils.EnumUtils;
import java.util.List;
import java.util.Map;
/**
* 统一枚举规范接口,仅定义契约getKey/getValue
* 内置静态工具方法,业务直接 IEnum.xxx(枚举类) 调用
* @param <T> key类型
*/
public interface IEnum<T> {
/** 获取编码key */
T getKey();
/** 获取中文展示value */
String getValue();
// ====================== 静态工具入口(统一对外调用) ======================
/** 获取枚举全部实例列表 */
static <E extends Enum<E> & IEnum<?>> List<E> toList(Class<E> clazz) {
return EnumUtils.toList(clazz);
}
/** 根据key获取枚举,无匹配返回null */
static <E extends Enum<E> & IEnum<?>> E getByKey(Class<E> clazz, Object key) {
return EnumUtils.getEnumByKey(clazz, key);
}
/** 根据key严格获取,不存在抛异常(对应fromKey) */
static <E extends Enum<E> & IEnum<?>> E fromKey(Class<E> clazz, Object key) {
return EnumUtils.fromKey(clazz, key);
}
/** 根据key获取中文value,无匹配返回空串 */
static <E extends Enum<E> & IEnum<?>> String getValueByKey(Class<E> clazz, Object key) {
return EnumUtils.getValue(clazz, key);
}
/** 根据中文value获取key字符串,无匹配返回空串 */
static <E extends Enum<E> & IEnum<?>> String getKeyByValue(Class<E> clazz, String value) {
return EnumUtils.getKey(clazz, value);
}
/** 判断key是否存在 */
static <E extends Enum<E> & IEnum<?>> boolean existsKey(Class<E> clazz, Object key) {
return EnumUtils.isExistKey(clazz, key);
}
/** 判断value是否存在 */
static <E extends Enum<E> & IEnum<?>> boolean existsValue(Class<E> clazz, String value) {
return EnumUtils.isExistValue(clazz, value);
}
/** 转完整Map列表(包含enum实例、name、key、value) */
static <E extends Enum<E> & IEnum<?>> List<Map<String, Object>> toFullMapList(Class<E> clazz) {
return EnumUtils.toMapList(clazz);
}
/** 转下拉简易Map列表,自定义key/value字段名 */
static <E extends Enum<E> & IEnum<?>> List<Map<String, Object>> toSimpleMapList(Class<E> clazz, String keyMapName, String valueMapName) {
return EnumUtils.toMapList(clazz, keyMapName, valueMapName);
}
}
@@ -0,0 +1,31 @@
package com.yunhai.userbase.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author chenx
* @date 2026/07/13
* @description 集成方式
*/
@Getter
@AllArgsConstructor
public enum IntegEnum implements IEnum<Integer> {
INNER(0, "内置"),
WEB(1, "Web"),
APP_JUMP(3, "App跳转");
private Integer key;
private String value;
@Override
public Integer getKey() {
return this.key;
}
@Override
public String getValue() {
return this.value;
}
}
@@ -0,0 +1,41 @@
package com.yunhai.userbase.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 操作日志级别。<br>
* 1-重要(删除) 2-次要(新增/编辑) 3-一般(查询)。<br>
*
* @author chenx
* @date 2026/7/28
*/
@Getter
@AllArgsConstructor
public enum LogLevel {
IMPORTANT(1, "重要(删除)"),
SECONDARY(2, "次要(新增/编辑)"),
GENERAL(3, "一般(查询)");
private final int code;
private final String desc;
/**
* 根据 code 反查级别。
*
* @param code 级别编码
* @return 对应级别,未知编码默认次要
*/
public static LogLevel fromCode(Integer code) {
if (code == null) {
return SECONDARY;
}
for (LogLevel level : values()) {
if (level.code == code) {
return level;
}
}
return SECONDARY;
}
}
@@ -0,0 +1,21 @@
package com.yunhai.userbase.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author chenx
* @date 2026/1/5 13:53
* @description 资源来源
*/
@AllArgsConstructor
@Getter
public enum ResourceSourceEnum {
ZIYUAN("ZIYUAN","资源库"),
LOCAL("LOCAL","平台资源库"),
;
private final String enKey;
private final String cnKey;
}
@@ -0,0 +1,49 @@
package com.yunhai.userbase.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.util.Arrays;
import java.util.Optional;
/**
* @author chenx
* @date 2025/12/15 13:29
* @description 根目录树类型
*/
@Getter
@NoArgsConstructor
@AllArgsConstructor
public enum RootNode {
ZIYUANKU (1,"ZIYUAN","资源"),
TUTORING (2,"TUTORING","辅导"),
QUESTION (3,"QUESTION","题库"),
SHIJUAN (4,"SHIJUAN","试卷"),
ZHUANXIANG (5,"ZHUANXIANG","专项"),
;
private Integer key;
private String enKey;
private String value;
public static RootNode getByKey(Integer key){
RootNode[] enums = RootNode.values();
Optional<RootNode> opt = Arrays.stream(enums).filter(item -> item.getKey().equals(key)).findAny();
if(opt.isPresent()){
return opt.get();
}else {
return null;
}
}
public static RootNode fromKey(Integer key) {
for (RootNode n : values()) if (n.key.equals(key)) return n;
throw new IllegalArgumentException("非法 RootNode key: " + key);
}
}
@@ -0,0 +1,66 @@
package com.yunhai.userbase.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.util.Arrays;
import java.util.Optional;
/**
* @author chenx
* @date 2025/12/15 15:55
* @description 学段
*/
@Getter
@NoArgsConstructor
@AllArgsConstructor
public enum SchoolStage {
PRIMARY (2,"PRIMARY","小学"),
MIDDLE (3,"MIDDLE","初中"),
HIGH (4,"HIGH","高中"),
;
private Integer key;
private String enKey;
private String value;
public static SchoolStage getByKey(Integer key){
SchoolStage[] enums = SchoolStage.values();
Optional<SchoolStage> opt = Arrays.stream(enums).filter(item -> item.getKey().equals(key)).findAny();
if(opt.isPresent()){
return opt.get();
}else {
return null;
}
}
public static String getName(Integer key) {
for (SchoolStage stage : SchoolStage.values()) {
if (stage.getKey().equals(key)) {
return stage.getValue();
}
}
return null;
}
public static SchoolStage getByValue(String value) {
if (value == null || value.trim().isEmpty()) {
return null;
}
return Arrays.stream(values())
.filter(item -> item.getValue().equals(value))
.findAny()
.orElse(null);
}
public static SchoolStage fromKey(Integer key) {
for (SchoolStage n : values()) if (n.key.equals(key)) return n;
throw new IllegalArgumentException("非法 SchoolStage key: " + key);
}
}
@@ -0,0 +1,30 @@
package com.yunhai.userbase.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author chenx
* @date 2026/07/13
* @description 通用启用禁用状态
*/
@Getter
@AllArgsConstructor
public enum StatusEnum implements IEnum<Integer> {
NORMAL(0, "正常"),
DISABLED(1, "禁用");
private Integer key;
private String value;
@Override
public Integer getKey() {
return this.key;
}
@Override
public String getValue() {
return this.value;
}
}
@@ -0,0 +1,32 @@
package com.yunhai.userbase.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author chenx
* @date 2026/07/25
* @description 操作模式枚举(应用授权等场景:追加/覆盖/删除)
*/
@Getter
@AllArgsConstructor
public enum SysModeEnum implements IEnum<Integer> {
APPEND(0, "追加"),
OVERWRITE(1, "覆盖"),
DELETE(2, "删除");
private Integer key;
private String value;
@Override
public Integer getKey() {
return this.key;
}
@Override
public String getValue() {
return this.value;
}
}
@@ -0,0 +1,40 @@
package com.yunhai.userbase.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.util.Arrays;
import java.util.Optional;
/**
* @author chenx
* @date 2026/07/13
* @description 用户角色枚举
*/
@Getter
@AllArgsConstructor
public enum SysRoleEnum implements IEnum<Integer>{
TEACHER(1, "老师"),
SCHOOL_LEADER(2, "校领导"),
STUDENT(3, "学生"),
PARENT(4, "家长"),
BUREAU_LEADER(5, "局领导"),
WORK_ACCOUNT(6, "工作号"),
ADMIN(7, "管理员");
private Integer key;
private String value;
@Override
public Integer getKey() {
return this.key;
}
@Override
public String getValue() {
return this.value;
}
}
@@ -0,0 +1,38 @@
package com.yunhai.userbase.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
/**
* @ Description : java类作用描述
* @Author : cls
* @ CreateDate : 2020/2/21 18:39
* @ Company : bestsch
*/
@AllArgsConstructor
@NoArgsConstructor
@Getter
public enum SystemGrade {
one(1,"一年级",2),two(2,"二年级",2),
three(3,"三年级",2),four(4,"四年级",2),
five(5,"五年级",2),six(6,"六年级",2),
seven(7,"七年级",3),eight(8,"八年级",3),
nine(9,"九年级",3),ten(10,"高一",4),
eleven(11,"高二",4),twelve(12,"高三",4);
private Integer gradeId;
private String gradeName;
private Integer stage;
public static String getName(Integer gradeId) {
for (SystemGrade grade : SystemGrade.values()) {
if (grade.getGradeId().equals(gradeId)) {
return grade.gradeName;
}
}
return null;
}
}
@@ -0,0 +1,28 @@
package com.yunhai.userbase.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
/**
* @program: UserProfile
* @description: 用户类别
* @author: chenx
* @create: 2023-05-26 10:46
**/
@Getter
@NoArgsConstructor
@AllArgsConstructor
public enum UserType {
TEACHER (1,"教师","Teacher"),
STUDENT (2,"学生","Student"),
;
private Integer key;
private String value;
private String code;
}
@@ -0,0 +1,34 @@
package com.yunhai.userbase.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author chenx
* @date 2026/08/03
* @description 用户类型枚举
* - NORMAL(0) 普通用户:默认类型
* - SUPER_ADMIN(1) 超级管理员:系统内置种子账号(yunhaisch / yunhaisch2 / yunhaisch3),由初始化脚本写入
* - SCHOOL_ADMIN(2) 学校管理员:拥有管理身份(角色含 ADMIN(7))的普通账号(非超级管理员)
*/
@Getter
@AllArgsConstructor
public enum UserTypeEnum implements IEnum<Integer> {
NORMAL(0, "普通用户"),
SUPER_ADMIN(1, "超级管理员"),
SCHOOL_ADMIN(2, "学校管理员");
private Integer key;
private String value;
@Override
public Integer getKey() {
return this.key;
}
@Override
public String getValue() {
return this.value;
}
}