Commit Graph

209 Commits

Author SHA1 Message Date
Charles7c
25f6e3402b 优化:优化使用 MyBatis Plus ChainWrapper 的方式 2023-03-04 17:38:10 +08:00
Charles7c
304615ea23 优化:优化部分 @Query 的使用 2023-03-04 16:41:31 +08:00
Charles7c
5f1f39d968 完善:完善部分类实现序列化接口 2023-03-04 16:38:44 +08:00
Charles7c
89a327920e 优化:基于阿里巴巴 Java 开发手册(黄山版)优化常量
1.编程规约>常量定义>第1条:
【强制】不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。
2023-03-04 14:35:45 +08:00
Charles7c
4779d77265 优化:基于阿里巴巴 Java 开发手册(黄山版)优化方法排序及访问权限修饰符
1.编程规约>OOP规约>第20条:
【推荐】当一个类有多个构造方法,或者多个同名方法,这些方法应该按顺序放置在一起,便于阅读,
此条规则优先于下一条。
2.编程规约>OOP规约>第21条:
【推荐】类内方法定义的顺序依次是:公有方法或保护方法 > 私有方法 > getter / setter 方法。
说明:公有方法是类的调用者和维护者最关心的方法,首屏展示最好;保护方法虽然只是子类关心,也可能是“模板设
计模式”下的核心方法;而私有方法外部一般不需要特别关心,是一个黑盒实现;因为承载的信息价值较低,所有
Service 和 DAO 的 getter / setter 方法放在类体最后。
3.编程规约>OOP规约>第26条:
【推荐】类成员与方法访问控制从严:
  1)如果不允许外部直接通过 new 来创建对象,那么构造方法必须是 private。
  2)工具类不允许有 public 或 default 构造方法。
  3)类非 static 成员变量并且与子类共享,必须是 protected。
  4)类非 static 成员变量并且仅在本类使用,必须是 private。
  5)类 static 成员变量如果仅在本类使用,必须是 private。
  6)若是 static 成员变量,考虑是否为 final。
  7)类成员方法只供类内部调用,必须是 private。
  8)类成员方法只对继承类公开,那么限制为 protected。
  说明:任何类、方法、参数、变量,严控访问范围。过于宽泛的访问范围,不利于模块解耦。思考:如果是一个
  private 的方法,想删除就删除,可是一个 public 的 service 成员方法或成员变量,删除一下,不得手心冒点汗吗?
  变量像自己的小孩,尽量在自己的视线内,变量作用域太大,无限制的到处跑,那么你会担心的。
2023-03-04 10:41:43 +08:00
Charles7c
6da85463c9 优化:基于阿里巴巴 Java 开发手册(黄山版)优化部分空集合处理
1.编程规约>集合处理>第7条:(个人理解:emptyList() 固然可以减少资源浪费,但未来由于不确定的需求变更,一旦增删元素必然会引发异常)
【强制】Collections 类返回的对象,如:emptyList() / singletonList() 等都是 immutable list,不可
对其进行添加或者删除元素的操作。
反例:如果查询无结果,返回 Collections.emptyList() 空集合对象,调用方一旦在返回的集合中进行了添加元素的操
作,就会触发 UnsupportedOperationException 异常。
2.编程规约>集合处理>第17条:
【推荐】集合初始化时,指定集合初始值大小。
说明:HashMap 使用构造方法 HashMap(int initialCapacity) 进行初始化时,如果暂时无法确定集合大小,那么指
定默认值(16)即可。
正例:initialCapacity = (需要存储的元素个数 / 负载因子) + 1。注意负载因子(即 loaderfactor)默认为 0.75,如果
暂时无法确定初始值大小,请设置为 16(即默认值)。
反例:HashMap 需要放置 1024 个元素,由于没有设置容量初始大小,随着元素增加而被迫不断扩容,resize() 方法
总共会调用 8 次,反复重建哈希表和数据迁移。当放置的集合元素个数达千万级时会影响程序性能。
2023-03-03 23:41:01 +08:00
Charles7c
dc751fc3ec 优化:基于阿里巴巴 Java 开发手册(黄山版)优化部分方法使用
1.编程规约>OOP规约>第12条:
【强制】禁止使用构造方法 BigDecimal(double) 的方式把 double 值转化为 BigDecimal 对象。
说明:BigDecimal(double) 存在精度损失风险,在精确计算或值比较的场景中可能会导致业务逻辑异常。
如:BigDecimal g = new BigDecimal(0.1F);实际的存储值为:0.100000001490116119384765625
正例:优先推荐入参为 String 的构造方法,或使用 BigDecimal 的 valueOf 方法,此方法内部其实执行了 Double 的
toString,而 Double 的 toString 按 double 的实际能表达的精度对尾数进行了截断。
BigDecimal recommend1 = new BigDecimal("0.1");
BigDecimal recommend2 = BigDecimal.valueOf(0.1);
2.编程规约>OOP规约>第19条:
【推荐】使用索引访问用 String 的 split 方法得到的数组时,需做最后一个分隔符后有无内容的检查,
否则会有抛 IndexOutOfBoundsException 的风险。
说明:
  String str = "a,b,c,,";
  String[] ary = str.split(",");
  // 预期大于 3,结果等于 3
  System.out.println(ary.length);
2023-03-03 23:14:15 +08:00
Charles7c
1257a4bc35 优化:基于阿里巴巴 Java 开发手册(黄山版)优化常量及包命名
1.编程规约>常量定义>第4条:
【推荐】不要使用一个常量类维护所有常量,要按常量功能进行归类,分开维护。
说明:大而全的常量类,杂乱无章,使用查找功能才能定位到要修改的常量,不利于理解,也不利于维护。
正例:缓存相关常量放在类 CacheConsts 下;系统配置相关常量放在类 SystemConfigConsts 下。
2.编程规约>常量定义>第5条:
【推荐】常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包内共享常
量、类内共享常量。
  1)跨应用共享常量:放置在二方库中,通常是 client.jar 中的 constant 目录下。
  2)应用内共享常量:放置在一方库中,通常是子模块中的 constant 目录下。
  反例:易懂常量也要统一定义成应用内共享常量,两个程序员在两个类中分别定义了表示“是”的常量:
  类 A 中:public static final String YES = "yes";
  类 B 中:public static final String YES = "y";
  A.YES.equals(B.YES),预期是 true,但实际返回为 false,导致线上问题。
  3)子工程内部共享常量:即在当前子工程的 constant 目录下。
  4)包内共享常量:即在当前包下单独的 constant 目录下。
  5)类内共享常量:直接在类内部 private static final 定义。
2023-03-03 22:34:19 +08:00
Charles7c
94be1f9553 新增:新增功能权限适配及校验
1.后端 API 注解鉴权使用方式:@SaCheckPermission("system:user:add")
2.前端全局指令函数使用方式:v-permission="['system:user:add']"
3.前端权限判断函数使用方式:checkPermission(['system:user:add'])
2023-03-02 23:39:22 +08:00
Charles7c
d4fd76dcc1 重构:🔥 重构查询树列表相关 API,并抽取到后端 CRUD 公共组件中
1.基于 Hutool TreeUtil 重构查询树列表相关 API
2.抽取查询树列表 API 到后端 CRUD 公共组件中,大大简化部门管理和菜单管理部分代码
2023-02-27 22:03:27 +08:00
Charles7c
6723903c62 优化:优化部分空集合返回 2023-02-26 23:39:41 +08:00
Charles7c
72e5522952 优化:优化新增关键词 create => add 2023-02-26 22:26:17 +08:00
Charles7c
a79b3e0e96 新增:新增公共查询枚举字典 API,优化前端获取枚举数据的方式 2023-02-26 21:49:03 +08:00
Charles7c
8200ea822f 新增:新增系统管理/岗位管理(列表、查看详情、新增、修改、删除、导出) 2023-02-26 00:19:56 +08:00
Charles7c
91165e63e5 重构:重构查询角色树 API 为查询角色字典列表
1.新增 LabelValueVO 通用字典数据结构
2023-02-24 22:24:25 +08:00
Charles7c
efa8f4fcf5 新增:新增系统管理/用户管理(列表、查看详情、新增、修改、删除、导出) 2023-02-22 23:58:28 +08:00
Charles7c
297fbd3675 重构:重构系统管理/角色管理功能
1. 使用抽屉代替对话框
2. 优化数据权限权限范围存储,新增角色和部门关联表
3. 新增角色和菜单关联表
4. 部分细节优化
2023-02-20 00:14:14 +08:00
Charles7c
510f86031f 新增:新增系统管理/菜单管理(列表、创建、修改、删除、导出) 2023-02-16 23:01:26 +08:00
Charles7c
1319cb3264 优化:使用 MyBatis Plus ChainWrapper 优化部分 QueryWrapper 的写法 2023-02-16 21:00:12 +08:00
Charles7c
56449263d3 优化:优化校验注解提示信息的写法 2023-02-16 20:54:17 +08:00
Charles7c
03b57fb021 优化:🔥 深度优化后端 CRUD 公共组件,并抽取前端下载功能到 CRUD 公共组件
1. 后端抽取导出功能到 CRUD 公共组件
2. 查询列表及导出接口支持排序参数
3. 深度优化 BaseServiceImpl 中的 CRUD 公共实现
4. 前端抽取公共下载组件
5. 优化部分细节并修复部分错误
2023-02-13 21:15:06 +08:00
Charles7c
142d315a8d 优化:MyBatis Plus 新增防全表更新与删除插件配置 2023-02-11 22:56:13 +08:00
Charles7c
ebc7c2b3b0 优化:基于 ESLint 和阿里编码规约插件对部分代码规范进行优化 2023-02-10 20:45:15 +08:00
Charles7c
5251a484f2 新增:新增系统管理/角色管理(分页、查看详情、创建、修改、删除) 2023-02-09 23:15:16 +08:00
Charles7c
8085edbfe6 优化:优化响应时间戳数据值 2023-02-08 22:11:05 +08:00
Charles7c
c44503b7ea 新增:部门管理对接用户信息(新增所属部门),并完善查看部门详情(增加上级部门显示) 2023-02-07 22:04:22 +08:00
Charles7c
ceba8e9e53 新增:新增系统管理/部门管理/导出功能(引入 Easy Excel 依赖用于导出 Excel,详情可见 README 介绍。另请注意:测试导出功能时,前端需要关闭 mockjs,否则 responseType 会被 mockjs 设置为 '',导致导出的文件无法打开) 2023-02-06 23:02:23 +08:00
Charles7c
c5d4e8ae21 重构:重构部门管理前端代码;新增修改部门、批量删除部门、查看部门详情功能(后端主要基于 CRUD 通用组件提供 API) 2023-02-01 23:25:36 +08:00
Charles7c
d27339ef3b 修复:修复分组校验导致无分组字段校验失效的问题 2023-02-01 20:54:57 +08:00
Charles7c
21fe29b56f 优化:优化日志表结构(新增 module 所属模块字段);优化日志引擎部分代码;使用 defaultIfNull() 和 blankToDefault 替换部分三元运算符代码(便于阅读及理解);将 BaseEntity 重命名为 BaseDO 2023-01-31 20:29:48 +08:00
Charles7c
1837047a9e 修复:🔥 修复重写 RequestMappingHandlerMapping 后,日志拦截器等失效的问题 2023-01-30 23:06:22 +08:00
Charles7c
83b01c2e4f 优化:优化后端 CRUD 公共组件(移除 BaseService 中无用的默认实现,抽取 BaseRequest 基类来方便使用分组校验),并同步调整部门管理 API 2023-01-30 22:35:17 +08:00
Charles7c
2c6bef91e8 优化:将列表排序由按修改时间降序调整为按创建时间降序(避免修改后数据记录移动),将列表中的审计信息由“修改人”、“修改时间”调整展示为“创建人”、“创建时间”,后续涉及完整审计信息将在详情中统一展示 2023-01-30 21:28:00 +08:00
Charles7c
3075038067 优化:优化模型类命名(为数据模型类添加 DO 后缀),并优化所有模型相关变量命名 2023-01-30 21:00:30 +08:00
Charles7c
d7851bc811 重构:初步封装后端 CRUD 公共组件(BaseController、BaseService、BaseServiceImpl) 2023-01-29 23:40:29 +08:00
Charles7c
dab3e597c2 优化:优化部分校验类型(业务验证迁移到 Service 层,使用 CheckUtils 来验证) 2023-01-25 23:07:25 +08:00
Charles7c
693e825144 新增:新增系统管理/部门管理/修改状态及删除功能(后续几天开始对现有代码进行优化,尤其要开始初步封装前后端 CRUD 组件,并针对现在使用的部分规范发起长期投票) 2023-01-25 12:59:30 +08:00
Charles7c
922b28126b 新增:新增系统管理/部门管理/新增功能 2023-01-24 01:14:48 +08:00
Charles7c
bdf8eeb1b4 新增:新增系统管理/部门管理/查询列表功能,并将所有描述字段名从 notes 调整为 description,将部分前端方法名前缀从 query 调整为 get,以及去除部分冗余代码 2023-01-23 19:00:47 +08:00
Charles7c
3116fd3eae 新增:新增系统监控/在线用户功能,并优化部分注释规范 2023-01-21 14:15:00 +08:00
Charles7c
185b79320f 优化:优化校验器相关方法名 2023-01-21 12:09:49 +08:00
Charles7c
c57383abad 新增:新增系统监控/登录日志功能,优化日志表结构,并新增记录错误信息(非未知异常不记录异常详情,只记录错误信息) 2023-01-17 23:16:37 +08:00
Charles7c
aa726fc6b6 新增:新增系统监控/操作日志功能,优化日志表结构 2023-01-16 23:00:54 +08:00
Charles7c
f4ea2d44d6 新增:个人中心新增查询操作日志功能,优化日志表结构,并支持关闭记录内网 IP 操作 2023-01-16 00:18:53 +08:00
Charles7c
8b82557883 新增:新增修改邮箱功能,并优化部分以往代码(引入 spring-boot-starter-mail 用于发送邮件验证码) 2023-01-14 01:05:39 +08:00
Charles7c
a08fd7773e 新增:新增修改密码功能,并优化部分以往代码 2023-01-10 23:25:58 +08:00
Charles7c
76fb698a37 新增:新增修改基础信息 API(优化 Jackson 针对通用枚举接口 IEnum 的序列化和反序列化) 2023-01-09 22:41:09 +08:00
Charles7c
5252c54c48 新增:新增上传头像 API,采用本地存储方式存储头像 2023-01-05 22:32:23 +08:00
Charles7c
abff6f997a 升级:升级 MyBatis Plus 版本为 3.5.3.1,升级 Hutool 版本为 5.8.11(已将 ServletUtils.getHeadersMap(HttpServletResponse) PR 到了 Hutool,详情见:dromara/hutool#2828) 2023-01-02 11:09:11 +08:00
Charles7c
21f5aceccf 优化:使用枚举存储性别、状态等信息(采用 MyBatis Plus#通用枚举扩展),常量类则专注于存储全局变量,例如:缓存键、默认值等 2023-01-02 00:19:56 +08:00
Charles7c
1d21019813 修复:解决 Jackson2ObjectMapperBuilderCustomizer 配置不生效的问题,同时优化所有 Date 类型为对应 Java 8 日期、时间类型 2022-12-29 21:48:50 +08:00
Charles7c
d9a48f7a95 修复:修复生产环境报 java.lang.NoClassDefFoundError: org/springframework/data/redis/connection/zset/Tuple 的错误问题(移除 Sa-Token 集成 Redis 依赖,改为本地 Redis 适配 SaTokenDao) 2022-12-28 23:32:05 +08:00
Charles7c
6a7ad96fa3 优化:优化跨域配置 2022-12-26 23:23:33 +08:00
Charles7c
727850933f 新增:新增系统监控模块(存放系统监控模块相关功能,例如:日志管理、服务监控等),新增操作日志引擎,记录 HTTP 请求信息 2022-12-25 13:16:15 +08:00
Charles7c
78e84e8941 完善:完善用户登录 API,优化部分包结构(引入 MyBatis Plus、多数据源、P6Spy、Liquibase 等依赖,详情可见 README 介绍) 2022-12-25 12:35:35 +08:00
Charles7c
00e2b44d0e 新增:新增用户登录和退出 API(引入 Sa-Token 依赖,详情可见 README 介绍) 2022-12-22 19:39:27 +08:00
Charles7c
79891e8b5a 新增:新增接口文档配置(基于 Spring Doc OpenAPI,使用 Knife4j 作为增强解决方案) 2022-12-11 22:32:18 +08:00
Charles7c
1e5eaab9d3 新增:新增获取图片验证码 API(引入 Redisson、Hutool、Easy Captcha 依赖,详情可见 README 介绍) 2022-12-11 15:06:21 +08:00
Charles7c
12b839f297 重构:按功能初步拆分模块 2022-12-10 21:25:14 +08:00