feat: v4.5.0 包结构迁移、MyBatis-Plus 自动填充、Jackson 3.x 适配

- common.annotation -> framework.annotation(DataPermission/Log/RateLimit/RepeatSubmit/ValidField)
- common.base.BaseEntity -> framework.base.BaseEntity(含 createTime/updateTime 自动填充注解)
- BaseQuery/IBaseEnum 保留在 common.base(无框架依赖)
- AutoFillMetaObjectHandler 实现 createTime/updateTime/createBy/updateBy 自动填充
- 实体类(Dept/Role/Config/DictItem/Notice/SysUser)添加 createBy/updateBy @TableField(fill=...)
- Jackson 注解使用 com.fasterxml.jackson.annotation(2.x 兼容层),databind/core 使用 tools.jackson(3.x)
- 代码生成模板 entity.java.vm/form.java.vm 包路径同步更新
- 删除冗余 UserService default 方法、DataPermissionException、DictChangeEvent event 包
- 版本号 4.4.0 -> 4.5.0
This commit is contained in:
Ray.Hao
2026-07-28 17:24:44 +08:00
parent 14c4728179
commit 7b87543978
59 changed files with 126 additions and 153 deletions

View File

@@ -6,7 +6,7 @@
<groupId>com.youlai</groupId>
<artifactId>youlai-boot</artifactId>
<version>4.4.0</version>
<version>4.5.0</version>
<description>基于 Java 17 + SpringBoot 4 + Spring Security 构建的权限管理系统。</description>
<parent>
@@ -39,7 +39,7 @@
<!-- 对象存储 -->
<minio.version>8.5.10</minio.version>
<okhttp3.version>4.8.1</okhttp3.version>
<okhttp3.version>4.12.0</okhttp3.version>
<aliyun-sdk-oss.version>3.16.3</aliyun-sdk-oss.version>
@@ -47,7 +47,7 @@
<redisson.version>4.1.0</redisson.version>
<!-- 自动代码生成 -->
<mybatis-plus-generator.version>3.5.6</mybatis-plus-generator.version>
<mybatis-plus-generator.version>3.5.15</mybatis-plus-generator.version>
<velocity.version>2.3</velocity.version>
<!-- IP 地区转换 -->
@@ -57,7 +57,7 @@
<aliyun-sdk-core.version>4.7.6</aliyun-sdk-core.version>
<aliyun-sdk-dysmsapi.version>2.2.1</aliyun-sdk-dysmsapi.version>
<caffeine.version>2.9.3</caffeine.version>
<caffeine.version>3.2.0</caffeine.version>
<!-- 阿里 TransmittableThreadLocal (支持异步场景的ThreadLocal传递) -->
<transmittable-thread-local.version>2.14.5</transmittable-thread-local.version>

View File

@@ -5,8 +5,8 @@ import com.youlai.boot.common.enums.ActionTypeEnum;
import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.common.result.Result;
import com.youlai.boot.auth.service.AuthService;
import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.common.annotation.RateLimit;
import com.youlai.boot.framework.annotation.Log;
import com.youlai.boot.framework.annotation.RateLimit;
import com.youlai.boot.framework.captcha.model.CaptchaInfo;
import com.youlai.boot.framework.security.model.AuthenticationToken;
import io.swagger.v3.oas.annotations.Operation;

View File

@@ -4,8 +4,8 @@ import com.youlai.boot.auth.model.form.WxMaBindMobileForm;
import com.youlai.boot.auth.model.form.WxMaPhoneLoginForm;
import com.youlai.boot.auth.model.vo.WxMaLoginVO;
import com.youlai.boot.auth.service.WxMaAuthService;
import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.common.annotation.RateLimit;
import com.youlai.boot.framework.annotation.Log;
import com.youlai.boot.framework.annotation.RateLimit;
import com.youlai.boot.common.enums.ActionTypeEnum;
import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.common.result.Result;

View File

@@ -5,7 +5,7 @@ import com.youlai.boot.auth.qrcode.model.form.QrCodeTicketForm;
import com.youlai.boot.auth.qrcode.model.vo.QrCodeGenerateVO;
import com.youlai.boot.auth.qrcode.model.vo.QrCodeStatusVO;
import com.youlai.boot.auth.qrcode.service.QrCodeLoginService;
import com.youlai.boot.common.annotation.RateLimit;
import com.youlai.boot.framework.annotation.RateLimit;
import com.youlai.boot.common.result.Result;
import com.youlai.boot.framework.security.model.AuthenticationToken;
import com.youlai.boot.framework.security.util.SecurityUtils;

View File

@@ -11,7 +11,7 @@ import com.youlai.boot.codegen.model.form.GenConfigForm;
import com.youlai.boot.codegen.model.query.TableQuery;
import com.youlai.boot.codegen.model.vo.CodegenPreviewVO;
import com.youlai.boot.codegen.model.vo.TablePageVO;
import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.framework.annotation.Log;
import com.youlai.boot.codegen.service.GenTableService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;

View File

@@ -2,7 +2,7 @@ package com.youlai.boot.codegen.model.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.youlai.boot.common.base.BaseEntity;
import com.youlai.boot.framework.base.BaseEntity;
import lombok.Getter;
import lombok.Setter;

View File

@@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.youlai.boot.common.base.BaseEntity;
import com.youlai.boot.framework.base.BaseEntity;
import com.youlai.boot.codegen.enums.FormTypeEnum;
import com.youlai.boot.codegen.enums.QueryTypeEnum;
import lombok.Getter;

View File

@@ -1,6 +1,6 @@
package com.youlai.boot.common.base;
import com.youlai.boot.common.annotation.ValidField;
import com.youlai.boot.framework.annotation.ValidField;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

View File

@@ -1,6 +1,6 @@
package com.youlai.boot.common.validator;
import com.youlai.boot.common.annotation.ValidField;
import com.youlai.boot.framework.annotation.ValidField;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.common.annotation;
package com.youlai.boot.framework.annotation;
import java.lang.annotation.*;
@@ -25,4 +25,3 @@ public @interface DataPermission {
String userIdColumnName() default "create_by";
}

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.common.annotation;
package com.youlai.boot.framework.annotation;
import com.youlai.boot.common.enums.ActionTypeEnum;
import com.youlai.boot.common.enums.LogModuleEnum;

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.common.annotation;
package com.youlai.boot.framework.annotation;
import java.lang.annotation.*;

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.common.annotation;
package com.youlai.boot.framework.annotation;
import java.lang.annotation.*;

View File

@@ -1,4 +1,4 @@
package com.youlai.boot.common.annotation;
package com.youlai.boot.framework.annotation;
import com.youlai.boot.common.validator.FieldValidator;
import jakarta.validation.Constraint;

View File

@@ -1,12 +1,11 @@
package com.youlai.boot.common.base;
package com.youlai.boot.framework.base;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.io.Serial;
import java.io.Serializable;
@@ -15,7 +14,8 @@ import java.time.LocalDateTime;
/**
* 基础实体类
*
* <p>实体类的基类包含了实体类的公共属性如创建时间更新时间逻辑删除标识等</p>
* <p>包含主键和创建/更新时间适用于所有实体含关联表</p>
* <p>审计字段createBy/updateBy和逻辑删除字段isDeleted由需要的实体自行声明</p>
*
* @author Ray.Hao
* @since 4.3.1
@@ -37,7 +37,6 @@ public class BaseEntity implements Serializable {
*/
@TableField(fill = FieldFill.INSERT)
@JsonInclude(value = JsonInclude.Include.NON_NULL)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
/**
@@ -45,7 +44,6 @@ public class BaseEntity implements Serializable {
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
@JsonInclude(value = JsonInclude.Include.NON_NULL)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
}

View File

@@ -1,6 +1,7 @@
package com.youlai.boot.framework.mybatis.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.youlai.boot.framework.security.util.SecurityUtils;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
@@ -9,6 +10,9 @@ import java.time.LocalDateTime;
/**
* MyBatis-Plus 字段自动填充
*
* <p>自动填充 createTime/updateTime时间戳和 createBy/updateBy操作人ID</p>
* <p>实体字段需标注 {@code @TableField(fill = FieldFill.INSERT)} 或 {@code FieldFill.INSERT_UPDATE} 才会触发</p>
*
* @author Ray.Hao
* @since 3.0.0
*/
@@ -18,11 +22,14 @@ public class AutoFillMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", LocalDateTime::now, LocalDateTime.class);
this.strictInsertFill(metaObject, "createBy", SecurityUtils::getUserId, Long.class);
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class);
this.strictUpdateFill(metaObject, "updateBy", SecurityUtils::getUserId, Long.class);
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class);
this.strictUpdateFill(metaObject, "updateBy", SecurityUtils::getUserId, Long.class);
}
}

View File

@@ -4,7 +4,7 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.extension.plugins.handler.DataPermissionHandler;
import com.youlai.boot.common.annotation.DataPermission;
import com.youlai.boot.framework.annotation.DataPermission;
import com.youlai.boot.common.enums.DataScopeEnum;
import com.youlai.boot.framework.security.model.RoleDataScope;
import com.youlai.boot.framework.security.model.SecurityUserDetails;

View File

@@ -3,7 +3,7 @@ package com.youlai.boot.framework.web.aspect;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.useragent.UserAgent;
import cn.hutool.http.useragent.UserAgentUtil;
import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.framework.annotation.Log;
import com.youlai.boot.common.enums.ActionTypeEnum;
import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.common.util.IPUtils;

View File

@@ -2,7 +2,7 @@ package com.youlai.boot.framework.web.aspect;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.DigestUtil;
import com.youlai.boot.common.annotation.RateLimit;
import com.youlai.boot.framework.annotation.RateLimit;
import com.youlai.boot.common.constant.RedisConstants;
import com.youlai.boot.common.constant.SecurityConstants;
import com.youlai.boot.common.result.ResultCode;

View File

@@ -7,7 +7,7 @@ import com.youlai.boot.common.constant.RedisConstants;
import com.youlai.boot.common.constant.SecurityConstants;
import com.youlai.boot.common.result.ResultCode;
import com.youlai.boot.common.exception.BusinessException;
import com.youlai.boot.common.annotation.RepeatSubmit;
import com.youlai.boot.framework.annotation.RepeatSubmit;
import com.youlai.boot.common.util.IPUtils;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;

View File

@@ -5,7 +5,7 @@ import com.youlai.boot.common.enums.ActionTypeEnum;
import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.common.result.PageResult;
import com.youlai.boot.common.result.Result;
import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.framework.annotation.Log;
import com.youlai.boot.system.model.form.ConfigForm;
import com.youlai.boot.system.model.query.ConfigQuery;
import com.youlai.boot.system.model.vo.ConfigVO;
@@ -53,11 +53,11 @@ public class ConfigController {
}
@Operation(summary = "获取系统配置表单数据")
@GetMapping("/{id}/form")
@GetMapping("/{configId}/form")
public Result<ConfigForm> getConfigForm(
@Parameter(description = "系统配置ID") @PathVariable Long id
@Parameter(description = "系统配置ID") @PathVariable Long configId
) {
ConfigForm formData = configService.getConfigFormData(id);
ConfigForm formData = configService.getConfigFormData(configId);
return Result.success(formData);
}
@@ -70,19 +70,19 @@ public class ConfigController {
}
@Operation(summary = "修改系统配置")
@PutMapping(value = "/{id}")
@PutMapping(value = "/{configId}")
@PreAuthorize("@ss.hasPerm('sys:config:update')")
@Log(module = LogModuleEnum.CONFIG, value = ActionTypeEnum.UPDATE)
public Result<?> update(@Valid @PathVariable Long id, @RequestBody ConfigForm configForm) {
return Result.judge(configService.edit(id, configForm));
public Result<?> update(@Valid @PathVariable Long configId, @RequestBody ConfigForm configForm) {
return Result.judge(configService.edit(configId, configForm));
}
@Operation(summary = "删除系统配置")
@DeleteMapping("/{id}")
@DeleteMapping("/{configId}")
@PreAuthorize("@ss.hasPerm('sys:config:delete')")
@Log(module = LogModuleEnum.CONFIG, value = ActionTypeEnum.DELETE)
public Result<?> delete(@PathVariable Long id) {
return Result.judge(configService.delete(id));
public Result<?> delete(@PathVariable Long configId) {
return Result.judge(configService.delete(configId));
}
}

View File

@@ -2,13 +2,13 @@ package com.youlai.boot.system.controller;
import com.youlai.boot.common.enums.ActionTypeEnum;
import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.common.annotation.RepeatSubmit;
import com.youlai.boot.framework.annotation.RepeatSubmit;
import com.youlai.boot.common.model.Option;
import com.youlai.boot.common.result.Result;
import com.youlai.boot.system.model.form.DeptForm;
import com.youlai.boot.system.model.query.DeptQuery;
import com.youlai.boot.system.model.vo.DeptVO;
import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.framework.annotation.Log;
import com.youlai.boot.system.service.DeptService;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;

View File

@@ -12,9 +12,9 @@ import com.youlai.boot.system.model.query.DictQuery;
import com.youlai.boot.system.model.vo.DictItemOptionVO;
import com.youlai.boot.system.model.vo.DictItemPageVO;
import com.youlai.boot.system.model.vo.DictPageVO;
import com.youlai.boot.common.annotation.RepeatSubmit;
import com.youlai.boot.framework.annotation.RepeatSubmit;
import com.youlai.boot.system.model.form.DictForm;
import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.framework.annotation.Log;
import com.youlai.boot.system.service.DictItemService;
import com.youlai.boot.system.service.DictService;
import com.youlai.boot.message.service.SseService;
@@ -67,11 +67,11 @@ public class DictController {
}
@Operation(summary = "获取字典表单数据")
@GetMapping("/{id}/form")
@GetMapping("/{dictId}/form")
public Result<DictForm> getDictForm(
@Parameter(description = "字典ID") @PathVariable Long id
@Parameter(description = "字典ID") @PathVariable Long dictId
) {
DictForm formData = dictService.getDictForm(id);
DictForm formData = dictService.getDictForm(dictId);
return Result.success(formData);
}
@@ -90,14 +90,14 @@ public class DictController {
}
@Operation(summary = "修改字典")
@PutMapping("/{id}")
@PutMapping("/{dictId}")
@PreAuthorize("@ss.hasPerm('sys:dict:update')")
@Log(module = LogModuleEnum.DICT, value = ActionTypeEnum.UPDATE)
public Result<?> updateDict(
@PathVariable Long id,
@PathVariable Long dictId,
@RequestBody DictForm dictForm
) {
boolean status = dictService.updateDict(id, dictForm);
boolean status = dictService.updateDict(dictId, dictForm);
// 发送字典更新通知
if (status && dictForm.getDictCode() != null) {
sseService.sendDictChange(dictForm.getDictCode());

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.system.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.framework.annotation.Log;
import com.youlai.boot.common.enums.ActionTypeEnum;
import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.common.result.PageResult;

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.system.controller;
import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.common.annotation.RepeatSubmit;
import com.youlai.boot.framework.annotation.Log;
import com.youlai.boot.framework.annotation.RepeatSubmit;
import com.youlai.boot.common.enums.ActionTypeEnum;
import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.common.model.Option;
@@ -62,12 +62,12 @@ public class MenuController {
}
@Operation(summary = "菜单表单数据")
@GetMapping("/{id}/form")
@GetMapping("/{menuId}/form")
@PreAuthorize("@ss.hasPerm('sys:menu:update')")
public Result<MenuForm> getMenuForm(
@Parameter(description = "菜单ID") @PathVariable Long id
@Parameter(description = "菜单ID") @PathVariable Long menuId
) {
MenuForm menu = menuService.getMenuForm(id);
MenuForm menu = menuService.getMenuForm(menuId);
return Result.success(menu);
}
@@ -82,10 +82,11 @@ public class MenuController {
}
@Operation(summary = "修改菜单")
@PutMapping(value = "/{id}")
@PutMapping(value = "/{menuId}")
@PreAuthorize("@ss.hasPerm('sys:menu:update')")
@Log(module = LogModuleEnum.MENU, value = ActionTypeEnum.UPDATE)
public Result<?> updateMenu(
@Parameter(description = "菜单ID") @PathVariable Long menuId,
@RequestBody MenuForm menuForm
) {
boolean result = menuService.saveMenu(menuForm);
@@ -93,13 +94,13 @@ public class MenuController {
}
@Operation(summary = "删除菜单")
@DeleteMapping("/{id}")
@DeleteMapping("/{menuId}")
@PreAuthorize("@ss.hasPerm('sys:menu:delete')")
@Log(module = LogModuleEnum.MENU, value = ActionTypeEnum.DELETE)
public Result<?> deleteMenu(
@Parameter(description = "菜单ID多个以英文(,)分割") @PathVariable("id") Long id
@Parameter(description = "菜单ID多个以英文(,)分割") @PathVariable Long menuId
) {
boolean result = menuService.deleteMenu(id);
boolean result = menuService.deleteMenu(menuId);
return Result.judge(result);
}

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.system.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.framework.annotation.Log;
import com.youlai.boot.common.enums.ActionTypeEnum;
import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.common.result.PageResult;
@@ -57,55 +57,55 @@ public class NoticeController {
}
@Operation(summary = "获取通知公告表单数据")
@GetMapping("/{id}/form")
@GetMapping("/{noticeId}/form")
@PreAuthorize("@ss.hasPerm('sys:notice:update')")
public Result<NoticeForm> getNoticeForm(
@Parameter(description = "通知公告ID") @PathVariable Long id
@Parameter(description = "通知公告ID") @PathVariable Long noticeId
) {
NoticeForm formData = noticeService.getNoticeFormData(id);
NoticeForm formData = noticeService.getNoticeFormData(noticeId);
return Result.success(formData);
}
@Operation(summary = "阅读获取通知公告详情")
@GetMapping("/{id}/detail")
@GetMapping("/{noticeId}/detail")
public Result<NoticeDetailVO> getNoticeDetail(
@Parameter(description = "通知公告ID") @PathVariable Long id
@Parameter(description = "通知公告ID") @PathVariable Long noticeId
) {
NoticeDetailVO detailVo = noticeService.getNoticeDetail(id);
NoticeDetailVO detailVo = noticeService.getNoticeDetail(noticeId);
return Result.success(detailVo);
}
@Operation(summary = "修改通知公告")
@PutMapping(value = "/{id}")
@PutMapping(value = "/{noticeId}")
@PreAuthorize("@ss.hasPerm('sys:notice:update')")
@Log(module = LogModuleEnum.NOTICE, value = ActionTypeEnum.UPDATE)
public Result<Void> updateNotice(
@Parameter(description = "通知公告ID") @PathVariable Long id,
@Parameter(description = "通知公告ID") @PathVariable Long noticeId,
@RequestBody @Validated NoticeForm formData
) {
boolean result = noticeService.updateNotice(id, formData);
boolean result = noticeService.updateNotice(noticeId, formData);
return Result.judge(result);
}
@Operation(summary = "发布通知公告")
@PutMapping("/{id}/publish")
@PutMapping("/{noticeId}/publish")
@PreAuthorize("@ss.hasPerm('sys:notice:publish')")
@Log(module = LogModuleEnum.NOTICE, value = ActionTypeEnum.UPDATE)
public Result<Void> publishNotice(
@Parameter(description = "通知公告ID") @PathVariable Long id
@Parameter(description = "通知公告ID") @PathVariable Long noticeId
) {
boolean result = noticeService.publishNotice(id);
boolean result = noticeService.publishNotice(noticeId);
return Result.judge(result);
}
@Operation(summary = "撤回通知公告")
@PutMapping("/{id}/revoke")
@PutMapping("/{noticeId}/revoke")
@PreAuthorize("@ss.hasPerm('sys:notice:revoke')")
@Log(module = LogModuleEnum.NOTICE, value = ActionTypeEnum.UPDATE)
public Result<Void> revokeNotice(
@Parameter(description = "通知公告ID") @PathVariable Long id
@Parameter(description = "通知公告ID") @PathVariable Long noticeId
) {
boolean result = noticeService.revokeNotice(id);
boolean result = noticeService.revokeNotice(noticeId);
return Result.judge(result);
}

View File

@@ -3,14 +3,14 @@ package com.youlai.boot.system.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.common.enums.ActionTypeEnum;
import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.common.annotation.RepeatSubmit;
import com.youlai.boot.framework.annotation.RepeatSubmit;
import com.youlai.boot.common.model.Option;
import com.youlai.boot.common.result.PageResult;
import com.youlai.boot.common.result.Result;
import com.youlai.boot.system.model.form.RoleForm;
import com.youlai.boot.system.model.query.RoleQuery;
import com.youlai.boot.system.model.vo.RolePageVO;
import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.framework.annotation.Log;
import com.youlai.boot.system.service.RoleService;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -75,10 +75,12 @@ public class RoleController {
}
@Operation(summary = "修改角色")
@PutMapping(value = "/{id}")
@PutMapping(value = "/{roleId}")
@PreAuthorize("@ss.hasPerm('sys:role:update')")
@Log(module = LogModuleEnum.ROLE, value = ActionTypeEnum.UPDATE)
public Result<?> updateRole(@Valid @RequestBody RoleForm roleForm) {
public Result<?> updateRole(
@Parameter(description = "角色ID") @PathVariable Long roleId,
@Valid @RequestBody RoleForm roleForm) {
boolean result = roleService.saveRole(roleForm);
return Result.judge(result);
}

View File

@@ -2,8 +2,8 @@ package com.youlai.boot.system.controller;
import cn.idev.excel.EasyExcel;
import cn.idev.excel.ExcelWriter;
import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.common.annotation.RepeatSubmit;
import com.youlai.boot.framework.annotation.Log;
import com.youlai.boot.framework.annotation.RepeatSubmit;
import com.youlai.boot.common.enums.ActionTypeEnum;
import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.common.enums.StatusEnum;

View File

@@ -3,7 +3,7 @@ package com.youlai.boot.system.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.youlai.boot.common.annotation.DataPermission;
import com.youlai.boot.framework.annotation.DataPermission;
import com.youlai.boot.system.model.entity.Dept;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

View File

@@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.system.model.entity.SysUser;
import com.youlai.boot.system.model.query.UserQuery;
import com.youlai.boot.system.model.form.UserForm;
import com.youlai.boot.common.annotation.DataPermission;
import com.youlai.boot.framework.annotation.DataPermission;
import com.youlai.boot.framework.security.model.SecurityUser;
import com.youlai.boot.system.model.vo.UserExportVO;
import com.youlai.boot.system.model.vo.UserPageVO;
@@ -50,10 +50,6 @@ public interface UserMapper extends BaseMapper<SysUser> {
*/
SecurityUser getAuthInfoByUsername(String username);
default SecurityUser getAuthCredentialsByUsername(String username) {
return getAuthInfoByUsername(username);
}
/**
* 根据手机号获取用户认证信息
*
@@ -62,10 +58,6 @@ public interface UserMapper extends BaseMapper<SysUser> {
*/
SecurityUser getAuthInfoByMobile(String mobile);
default SecurityUser getAuthCredentialsByMobile(String mobile) {
return getAuthInfoByMobile(mobile);
}
/**
* 获取导出用户列表
*

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.system.model.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.youlai.boot.common.base.BaseEntity;
import com.youlai.boot.framework.base.BaseEntity;
import lombok.Data;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.EqualsAndHashCode;
@@ -42,11 +42,13 @@ public class Config extends BaseEntity {
/**
* 创建人ID
*/
@TableField(fill = FieldFill.INSERT)
private Long createBy;
/**
* 更新人ID
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateBy;
/**

View File

@@ -1,9 +1,9 @@
package com.youlai.boot.system.model.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.youlai.boot.common.base.BaseEntity;
import com.youlai.boot.framework.base.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -51,11 +51,13 @@ public class Dept extends BaseEntity {
/**
* 创建人 ID
*/
@TableField(fill = FieldFill.INSERT)
private Long createBy;
/**
* 更新人 ID
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateBy;
/**

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.system.model.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.youlai.boot.common.base.BaseEntity;
import com.youlai.boot.framework.base.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.system.model.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.youlai.boot.common.base.BaseEntity;
import com.youlai.boot.framework.base.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -56,10 +56,12 @@ public class DictItem extends BaseEntity {
/**
* 创建人 ID
*/
@TableField(fill = FieldFill.INSERT)
private Long createBy;
/**
* 更新人 ID
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateBy;
}

View File

@@ -2,7 +2,7 @@ package com.youlai.boot.system.model.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.youlai.boot.common.base.BaseEntity;
import com.youlai.boot.framework.base.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

View File

@@ -1,8 +1,7 @@
package com.youlai.boot.system.model.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.youlai.boot.common.base.BaseEntity;
import com.youlai.boot.framework.base.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -75,11 +74,13 @@ public class Notice extends BaseEntity {
/**
* 创建人ID
*/
@TableField(fill = FieldFill.INSERT)
private Long createBy;
/**
* 更新人ID
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateBy;
/**

View File

@@ -1,9 +1,9 @@
package com.youlai.boot.system.model.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.youlai.boot.common.base.BaseEntity;
import com.youlai.boot.framework.base.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -46,11 +46,13 @@ public class Role extends BaseEntity {
/**
* 创建人 ID
*/
@TableField(fill = FieldFill.INSERT)
private Long createBy;
/**
* 更新人 ID
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateBy;
/**

View File

@@ -2,7 +2,6 @@ package com.youlai.boot.system.model.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.system.model.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.youlai.boot.common.base.BaseEntity;
import com.youlai.boot.framework.base.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -64,11 +64,13 @@ public class SysUser extends BaseEntity {
/**
* 创建人 ID
*/
@TableField(fill = FieldFill.INSERT)
private Long createBy;
/**
* 更新人 ID
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateBy;
/**

View File

@@ -3,8 +3,7 @@ package com.youlai.boot.system.model.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.youlai.boot.common.base.BaseEntity;
import com.youlai.boot.framework.base.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

View File

@@ -1,7 +1,7 @@
package com.youlai.boot.system.model.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.youlai.boot.common.base.BaseEntity;
import com.youlai.boot.framework.base.BaseEntity;
import com.youlai.boot.common.enums.SocialPlatformEnum;
import lombok.Getter;
import lombok.Setter;

View File

@@ -1,8 +1,8 @@
package com.youlai.boot.system.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.time.LocalDateTime;
import java.util.List;

View File

@@ -1,6 +1,5 @@
package com.youlai.boot.system.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.youlai.boot.common.enums.ActionTypeEnum;
import com.youlai.boot.common.enums.LogModuleEnum;
import io.swagger.v3.oas.annotations.media.Schema;
@@ -70,7 +69,6 @@ public class LogPageVO implements Serializable {
@Schema(description = "错误信息")
private String errorMsg;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
}

View File

@@ -1,6 +1,5 @@
package com.youlai.boot.system.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@@ -31,9 +30,7 @@ public class RolePageVO {
@Schema(description="数据权限名称")
private String dataScopeLabel;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
}

View File

@@ -1,8 +1,8 @@
package com.youlai.boot.system.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.time.LocalDateTime;

View File

@@ -1,8 +1,8 @@
package com.youlai.boot.system.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;

View File

@@ -82,11 +82,6 @@ public interface UserService extends IService<SysUser> {
*/
SecurityUser getAuthInfoByUsername(String username);
default SecurityUser getAuthCredentialsByUsername(String username) {
return getAuthInfoByUsername(username);
}
/**
* 获取导出用户列表
*
@@ -198,8 +193,4 @@ public interface UserService extends IService<SysUser> {
*/
SecurityUser getAuthInfoByMobile(String mobile);
default SecurityUser getAuthCredentialsByMobile(String mobile) {
return getAuthInfoByMobile(mobile);
}
}

View File

@@ -12,7 +12,6 @@ import com.youlai.boot.system.model.form.ConfigForm;
import com.youlai.boot.system.model.query.ConfigQuery;
import com.youlai.boot.system.model.vo.ConfigVO;
import com.youlai.boot.system.service.ConfigService;
import com.youlai.boot.framework.security.util.SecurityUtils;
import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
@@ -78,7 +77,6 @@ public class ConfigServiceImpl extends ServiceImpl<ConfigMapper, Config> impleme
super.count(new LambdaQueryWrapper<Config>().eq(Config::getConfigKey, configForm.getConfigKey())) == 0,
"配置键已存在");
Config config = configConverter.toEntity(configForm);
config.setCreateBy(SecurityUtils.getUserId());
return this.save(config);
}
@@ -107,7 +105,6 @@ public class ConfigServiceImpl extends ServiceImpl<ConfigMapper, Config> impleme
super.count(new LambdaQueryWrapper<Config>().eq(Config::getConfigKey, configForm.getConfigKey()).ne(Config::getId, id)) == 0,
"配置键已存在");
Config config = configConverter.toEntity(configForm);
config.setUpdateBy(SecurityUtils.getUserId());
return this.updateById(config);
}

View File

@@ -84,7 +84,7 @@ public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements De
* @param deptList 部门列表
* @return 部门树形列表
*/
public List<DeptVO> recurDeptList(Long parentId, List<Dept> deptList) {
private List<DeptVO> recurDeptList(Long parentId, List<Dept> deptList) {
return deptList.stream()
.filter(dept -> dept.getParentId().equals(parentId))
.map(dept -> {
@@ -150,7 +150,6 @@ public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements De
String treePath = generateDeptTreePath(formData.getParentId());
entity.setTreePath(treePath);
entity.setCreateBy(SecurityUtils.getUserId());
// 保存部门并返回部门ID
boolean result = this.save(entity);
Assert.isTrue(result, "部门保存失败");
@@ -236,7 +235,7 @@ public class DeptServiceImpl extends ServiceImpl<DeptMapper, Dept> implements De
* @param deptList 部门列表
* @return 部门表格层级列表
*/
public static List<Option<Long>> recurDeptTreeOptions(long parentId, List<Dept> deptList) {
private static List<Option<Long>> recurDeptTreeOptions(long parentId, List<Dept> deptList) {
return CollectionUtil.emptyIfNull(deptList).stream()
.filter(dept -> dept.getParentId().equals(parentId))
.map(dept -> {

View File

@@ -95,7 +95,6 @@ public class NoticeServiceImpl extends ServiceImpl<NoticeMapper, Notice> impleme
}
}
Notice entity = noticeConverter.toEntity(formData);
entity.setCreateBy(SecurityUtils.getUserId());
return this.save(entity);
}
@@ -250,7 +249,6 @@ public class NoticeServiceImpl extends ServiceImpl<NoticeMapper, Notice> impleme
notice.setPublishStatus(NoticePublishStatusEnum.REVOKED.getValue());
notice.setRevokeTime(LocalDateTime.now());
notice.setUpdateBy(SecurityUtils.getUserId());
boolean revokeResult = this.updateById(notice);

View File

@@ -133,7 +133,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, SysUser> implements
// 设置默认加密密码
String defaultEncryptPwd = passwordEncoder.encode(SystemConstants.DEFAULT_PASSWORD);
entity.setPassword(defaultEncryptPwd);
entity.setCreateBy(SecurityUtils.getUserId());
// 新增用户
boolean result = this.save(entity);
@@ -171,7 +170,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, SysUser> implements
// form -> entity
SysUser entity = userConverter.toEntity(userForm);
entity.setUpdateBy(SecurityUtils.getUserId());
// 修改用户
boolean result = this.updateById(entity);

View File

@@ -170,8 +170,9 @@ springdoc:
packages-to-scan: # 扫描的 Controller 包,限制只生成指定包的接口文档
- com.youlai.boot.auth.controller
- com.youlai.boot.system.controller
- com.youlai.boot.module.file.controller
- com.youlai.boot.module.codegen.controller
- com.youlai.boot.file.controller
- com.youlai.boot.codegen.controller
- com.youlai.boot.message.controller
default-flat-param-object: true # 将对象参数扁平化显示在文档中
# knife4j 配置

View File

@@ -2,6 +2,6 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.youlai.boot.platform.codegen.mapper.GenTableColumnMapper">
<mapper namespace="com.youlai.boot.codegen.mapper.GenTableColumnMapper">
</mapper>

View File

@@ -2,6 +2,6 @@
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.youlai.boot.platform.codegen.mapper.GenTableMapper">
<mapper namespace="com.youlai.boot.codegen.mapper.GenTableMapper">
</mapper>

View File

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.youlai.boot.system.mapper.ConfigMapper">
</mapper>

View File

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.youlai.boot.system.mapper.DeptMapper">
</mapper>

View File

@@ -9,7 +9,7 @@ import java.time.LocalDateTime;
import java.math.BigDecimal;
#end
import com.baomidou.mybatisplus.annotation.TableName;
import ${packageName}.common.base.BaseEntity;
import ${packageName}.framework.base.BaseEntity;
/**
* $!{businessName}实体对象