feat: 系统模块集成操作日志功能

- 添加操作日志管理Controller,提供完整的CRUD和查询接口
- 实现操作日志Service业务逻辑,支持分页查询和统计分析
- 添加操作日志定时清理任务,定期清理过期日志数据
- 集成操作日志插件依赖到系统模块POM配置
- 为所有Controller方法添加@OperLog注解,实现操作记录
- 创建操作日志Mapper和XML映射文件,支持数据库操作
- 提供日志统计和仪表盘数据接口,便于监控分析
This commit is contained in:
Leo 2025-07-07 22:44:47 +08:00
parent 16fbe7dc09
commit 60d0598975
12 changed files with 82 additions and 72 deletions

View File

@ -35,11 +35,11 @@
<version>${revision}</version> <version>${revision}</version>
</dependency> </dependency>
<!-- 操作日志组件 --> <!-- 操作日志组件 -->
<!-- <dependency> --> <dependency>
<!-- <groupId>org.leocoder.thin</groupId> --> <groupId>org.leocoder.thin</groupId>
<!-- <artifactId>coder-common-thin-oper-logs</artifactId> --> <artifactId>coder-common-thin-oper-logs</artifactId>
<!-- <version>${revision}</version> --> <version>${revision}</version>
<!-- </dependency> --> </dependency>
<!-- SpringDoc OpenAPI 3.0 --> <!-- SpringDoc OpenAPI 3.0 -->
<dependency> <dependency>
<groupId>org.springdoc</groupId> <groupId>org.springdoc</groupId>

View File

@ -1,20 +1,22 @@
package org.leocoder.thin.system.controller.file; package org.leocoder.thin.system.controller.file;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.leocoder.thin.common.constants.CoderConstants; import org.leocoder.thin.common.constants.CoderConstants;
import org.leocoder.thin.common.exception.coder.YUtil; import org.leocoder.thin.common.exception.coder.YUtil;
import org.leocoder.thin.common.satoken.CoderLoginUtil; import org.leocoder.thin.common.satoken.CoderLoginUtil;
import org.leocoder.thin.common.utils.file.FileUtil; import org.leocoder.thin.common.utils.file.FileUtil;
import org.leocoder.thin.domain.enums.oper.OperType;
import org.leocoder.thin.domain.model.vo.system.SysFileVo; import org.leocoder.thin.domain.model.vo.system.SysFileVo;
import org.leocoder.thin.domain.pojo.system.SysFile; import org.leocoder.thin.domain.pojo.system.SysFile;
import org.leocoder.thin.operlog.annotation.OperLog;
import org.leocoder.thin.system.service.file.SysFileService; import org.leocoder.thin.system.service.file.SysFileService;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@ -91,7 +93,7 @@ public class SysFileController {
@Operation(summary = "新增文件记录", description = "添加新的文件资源记录") @Operation(summary = "新增文件记录", description = "添加新的文件资源记录")
@SaCheckPermission("system:file:add") @SaCheckPermission("system:file:add")
@PostMapping("/sysFile/add") @PostMapping("/sysFile/add")
// @OperLog(value = "新增文件资源", operType = OperType.INSERT) @OperLog(value = "新增文件资源", operType = OperType.INSERT)
public void add(@Validated @RequestBody SysFile sysFile) { public void add(@Validated @RequestBody SysFile sysFile) {
sysFile.setCreateBy(CoderLoginUtil.getUserName()); sysFile.setCreateBy(CoderLoginUtil.getUserName());
YUtil.isTrue(!sysFileService.save(sysFile), "新增失败,请稍后重试"); YUtil.isTrue(!sysFileService.save(sysFile), "新增失败,请稍后重试");
@ -104,7 +106,7 @@ public class SysFileController {
@Operation(summary = "修改文件信息", description = "更新系统文件的基本信息") @Operation(summary = "修改文件信息", description = "更新系统文件的基本信息")
@SaCheckPermission("system:file:update") @SaCheckPermission("system:file:update")
@PostMapping("/sysFile/update") @PostMapping("/sysFile/update")
// @OperLog(value = "修改文件资源", operType = OperType.UPDATE) @OperLog(value = "修改文件资源", operType = OperType.UPDATE)
public void update(@Validated @RequestBody SysFile sysFile) { public void update(@Validated @RequestBody SysFile sysFile) {
sysFile.setUpdateBy(CoderLoginUtil.getUserName()); sysFile.setUpdateBy(CoderLoginUtil.getUserName());
YUtil.isTrue(!sysFileService.updateById(sysFile), "修改失败,请稍后重试"); YUtil.isTrue(!sysFileService.updateById(sysFile), "修改失败,请稍后重试");
@ -117,7 +119,7 @@ public class SysFileController {
@Operation(summary = "删除文件", description = "根据文件ID删除指定文件及其记录") @Operation(summary = "删除文件", description = "根据文件ID删除指定文件及其记录")
@SaCheckPermission("system:file:delete") @SaCheckPermission("system:file:delete")
@PostMapping("/sysFile/deleteById/{id}") @PostMapping("/sysFile/deleteById/{id}")
// @OperLog(value = "删除文件资源", operType = OperType.DELETE) @OperLog(value = "删除文件资源", operType = OperType.DELETE)
public void delete(@PathVariable("id") Long id) { public void delete(@PathVariable("id") Long id) {
SysFile sysFile = sysFileService.getById(id); SysFile sysFile = sysFileService.getById(id);
if (!ObjectUtil.isEmpty(sysFile)) { if (!ObjectUtil.isEmpty(sysFile)) {
@ -137,7 +139,7 @@ public class SysFileController {
@SaCheckPermission("system:file:delete") @SaCheckPermission("system:file:delete")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@PostMapping("/sysFile/batchDelete") @PostMapping("/sysFile/batchDelete")
// @OperLog(value = "批量删除文件资源", operType = OperType.DELETE) @OperLog(value = "批量删除文件资源", operType = OperType.DELETE)
public void batchDelete(@RequestBody List<Long> ids) { public void batchDelete(@RequestBody List<Long> ids) {
LambdaQueryWrapper<SysFile> lambdaQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SysFile> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.in(SysFile::getFileId, ids); lambdaQueryWrapper.in(SysFile::getFileId, ids);

View File

@ -1,24 +1,26 @@
package org.leocoder.thin.system.controller.menu; package org.leocoder.thin.system.controller.menu;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.leocoder.thin.common.constants.CoderConstants; import org.leocoder.thin.common.constants.CoderConstants;
import org.leocoder.thin.common.exception.coder.YUtil; import org.leocoder.thin.common.exception.coder.YUtil;
import org.leocoder.thin.common.satoken.CoderLoginUtil; import org.leocoder.thin.common.satoken.CoderLoginUtil;
import org.leocoder.thin.domain.enums.oper.OperType;
import org.leocoder.thin.domain.model.bo.element.CascaderLongBo; import org.leocoder.thin.domain.model.bo.element.CascaderLongBo;
import org.leocoder.thin.domain.model.bo.system.SysMenuBo; import org.leocoder.thin.domain.model.bo.system.SysMenuBo;
import org.leocoder.thin.domain.model.vo.system.SysMenuVo; import org.leocoder.thin.domain.model.vo.system.SysMenuVo;
import org.leocoder.thin.domain.pojo.system.SysMenu; import org.leocoder.thin.domain.pojo.system.SysMenu;
import org.leocoder.thin.operlog.annotation.OperLog;
import org.leocoder.thin.system.service.menu.SysMenuService; import org.leocoder.thin.system.service.menu.SysMenuService;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -93,7 +95,7 @@ public class SysMenuController {
@Operation(summary = "新增菜单", description = "添加新的系统菜单") @Operation(summary = "新增菜单", description = "添加新的系统菜单")
@SaCheckPermission("system:menu:add") @SaCheckPermission("system:menu:add")
@PostMapping("/sysMenu/add") @PostMapping("/sysMenu/add")
// @OperLog(value = "新增菜单", operType = OperType.INSERT) @OperLog(value = "新增菜单", operType = OperType.INSERT)
public void add(@Validated @RequestBody SysMenu sysMenu) { public void add(@Validated @RequestBody SysMenu sysMenu) {
// 路由Path不能重复 // 路由Path不能重复
if (StringUtils.isNotBlank(sysMenu.getPath())) { if (StringUtils.isNotBlank(sysMenu.getPath())) {
@ -124,7 +126,7 @@ public class SysMenuController {
@Operation(summary = "修改菜单信息", description = "更新系统菜单的基本信息") @Operation(summary = "修改菜单信息", description = "更新系统菜单的基本信息")
@SaCheckPermission("system:menu:update") @SaCheckPermission("system:menu:update")
@PostMapping("/sysMenu/update") @PostMapping("/sysMenu/update")
// @OperLog(value = "修改菜单", operType = OperType.UPDATE) @OperLog(value = "修改菜单", operType = OperType.UPDATE)
public void update(@Validated @RequestBody SysMenu sysMenu) { public void update(@Validated @RequestBody SysMenu sysMenu) {
// 路由Path不能重复 // 路由Path不能重复
if (StringUtils.isNotBlank(sysMenu.getPath())) { if (StringUtils.isNotBlank(sysMenu.getPath())) {
@ -151,7 +153,7 @@ public class SysMenuController {
@Operation(summary = "删除菜单", description = "根据菜单ID删除指定菜单") @Operation(summary = "删除菜单", description = "根据菜单ID删除指定菜单")
@SaCheckPermission("system:menu:delete") @SaCheckPermission("system:menu:delete")
@PostMapping("/sysMenu/deleteById/{id}") @PostMapping("/sysMenu/deleteById/{id}")
// @OperLog(value = "删除菜单", operType = OperType.DELETE) @OperLog(value = "删除菜单", operType = OperType.DELETE)
public void delete(@PathVariable Long id) { public void delete(@PathVariable Long id) {
SysMenu menu = sysMenuService.getById(id); SysMenu menu = sysMenuService.getById(id);
YUtil.isTrue(ObjectUtils.isEmpty(menu) || menu.getMenuId() == null, "请选择需要删除的数据"); YUtil.isTrue(ObjectUtils.isEmpty(menu) || menu.getMenuId() == null, "请选择需要删除的数据");
@ -170,7 +172,7 @@ public class SysMenuController {
@Operation(summary = "批量删除菜单", description = "批量删除多个系统菜单") @Operation(summary = "批量删除菜单", description = "批量删除多个系统菜单")
@SaCheckPermission("system:menu:delete") @SaCheckPermission("system:menu:delete")
@PostMapping("/sysMenu/batchDelete") @PostMapping("/sysMenu/batchDelete")
// @OperLog(value = "批量删除菜单", operType = OperType.DELETE) @OperLog(value = "批量删除菜单", operType = OperType.DELETE)
public void batchDelete(@RequestBody List<Long> ids) { public void batchDelete(@RequestBody List<Long> ids) {
YUtil.isTrue(!sysMenuService.removeBatchByIds(ids), "删除失败,请稍后重试"); YUtil.isTrue(!sysMenuService.removeBatchByIds(ids), "删除失败,请稍后重试");
} }
@ -183,7 +185,7 @@ public class SysMenuController {
@Operation(summary = "修改菜单状态", description = "启用或禁用系统菜单") @Operation(summary = "修改菜单状态", description = "启用或禁用系统菜单")
@SaCheckPermission("system:menu:update") @SaCheckPermission("system:menu:update")
@PostMapping("/sysMenu/updateStatus/{id}/{menuStatus}") @PostMapping("/sysMenu/updateStatus/{id}/{menuStatus}")
// @OperLog(value = "修改菜单状态", operType = OperType.UPDATE) @OperLog(value = "修改菜单状态", operType = OperType.UPDATE)
public void updateStatus(@PathVariable("id") Long id, @PathVariable("menuStatus") String menuStatus) { public void updateStatus(@PathVariable("id") Long id, @PathVariable("menuStatus") String menuStatus) {
UpdateWrapper<SysMenu> updateWrapper = new UpdateWrapper<>(); UpdateWrapper<SysMenu> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("menu_status", menuStatus).eq("menu_id", id); updateWrapper.set("menu_status", menuStatus).eq("menu_id", id);
@ -196,7 +198,7 @@ public class SysMenuController {
*/ */
@Operation(summary = "修改菜单展开状态", description = "设置菜单是否默认展开") @Operation(summary = "修改菜单展开状态", description = "设置菜单是否默认展开")
@PostMapping("/sysMenu/updateSpread/{id}/{isSpread}") @PostMapping("/sysMenu/updateSpread/{id}/{isSpread}")
// @OperLog(value = "修改菜单展开状态", operType = OperType.UPDATE) @OperLog(value = "修改菜单展开状态", operType = OperType.UPDATE)
public void updateSpread(@PathVariable("id") Long id, @PathVariable("isSpread") String isSpread) { public void updateSpread(@PathVariable("id") Long id, @PathVariable("isSpread") String isSpread) {
LambdaUpdateWrapper<SysMenu> updateWrapper = new LambdaUpdateWrapper<>(); LambdaUpdateWrapper<SysMenu> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.set(StringUtils.isNotBlank(isSpread), SysMenu::getIsSpread, isSpread).eq(SysMenu::getMenuId, id); updateWrapper.set(StringUtils.isNotBlank(isSpread), SysMenu::getIsSpread, isSpread).eq(SysMenu::getMenuId, id);
@ -272,7 +274,7 @@ public class SysMenuController {
@Operation(summary = "保存角色菜单权限", description = "保存角色和菜单权限之间的关联关系") @Operation(summary = "保存角色菜单权限", description = "保存角色和菜单权限之间的关联关系")
@SaCheckPermission("system:role:menu") @SaCheckPermission("system:role:menu")
@PostMapping("/sysMenu/saveRoleMenu/{roleId}/{menuIds}") @PostMapping("/sysMenu/saveRoleMenu/{roleId}/{menuIds}")
// @OperLog(value = "保存角色菜单权限", operType = OperType.UPDATE) @OperLog(value = "保存角色菜单权限", operType = OperType.UPDATE)
public void saveRoleMenu(@PathVariable("roleId") Long roleId, @PathVariable("menuIds") List<Long> menuIds) { public void saveRoleMenu(@PathVariable("roleId") Long roleId, @PathVariable("menuIds") List<Long> menuIds) {
sysMenuService.saveRoleMenu(roleId, menuIds); sysMenuService.saveRoleMenu(roleId, menuIds);
} }

View File

@ -1,12 +1,12 @@
package org.leocoder.system.controller.operlog; package org.leocoder.thin.system.controller.operlog;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.leocoder.domain.pojo.system.SysOperLog; import org.leocoder.thin.domain.model.vo.system.SysOperLogVo;
import org.leocoder.domain.model.vo.system.SysOperLogVo; import org.leocoder.thin.domain.pojo.system.SysOperLog;
import org.leocoder.system.service.operlog.SysOperLogService; import org.leocoder.thin.system.service.operlog.SysOperLogService;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.List;

View File

@ -1,18 +1,20 @@
package org.leocoder.thin.system.controller.picture; package org.leocoder.thin.system.controller.picture;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.leocoder.thin.common.constants.CoderConstants; import org.leocoder.thin.common.constants.CoderConstants;
import org.leocoder.thin.common.exception.coder.YUtil; import org.leocoder.thin.common.exception.coder.YUtil;
import org.leocoder.thin.common.satoken.CoderLoginUtil; import org.leocoder.thin.common.satoken.CoderLoginUtil;
import org.leocoder.thin.domain.enums.oper.OperType;
import org.leocoder.thin.domain.model.vo.system.SysPictureVo; import org.leocoder.thin.domain.model.vo.system.SysPictureVo;
import org.leocoder.thin.domain.pojo.system.SysPicture; import org.leocoder.thin.domain.pojo.system.SysPicture;
import org.leocoder.thin.operlog.annotation.OperLog;
import org.leocoder.thin.system.service.picture.SysPictureService; import org.leocoder.thin.system.service.picture.SysPictureService;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@ -87,7 +89,7 @@ public class SysPictureController {
@Operation(summary = "新增图片记录", description = "添加新的图片资源记录") @Operation(summary = "新增图片记录", description = "添加新的图片资源记录")
@SaCheckPermission("system:sysPicture:add") @SaCheckPermission("system:sysPicture:add")
@PostMapping("/sysPicture/add") @PostMapping("/sysPicture/add")
// @OperLog(value = "新增图库", operType = OperType.INSERT) @OperLog(value = "新增图库", operType = OperType.INSERT)
public void add(@Validated @RequestBody SysPicture sysPicture) { public void add(@Validated @RequestBody SysPicture sysPicture) {
sysPicture.setCreateBy(CoderLoginUtil.getUserName()); sysPicture.setCreateBy(CoderLoginUtil.getUserName());
YUtil.isTrue(!sysPictureService.save(sysPicture), "新增失败,请稍后重试"); YUtil.isTrue(!sysPictureService.save(sysPicture), "新增失败,请稍后重试");
@ -100,7 +102,7 @@ public class SysPictureController {
@Operation(summary = "修改图片信息", description = "更新系统图片的基本信息") @Operation(summary = "修改图片信息", description = "更新系统图片的基本信息")
@SaCheckPermission("system:sysPicture:update") @SaCheckPermission("system:sysPicture:update")
@PostMapping("/sysPicture/update") @PostMapping("/sysPicture/update")
// @OperLog(value = "修改图库", operType = OperType.UPDATE) @OperLog(value = "修改图库", operType = OperType.UPDATE)
public void update(@Validated @RequestBody SysPicture sysPicture) { public void update(@Validated @RequestBody SysPicture sysPicture) {
sysPicture.setUpdateBy(CoderLoginUtil.getUserName()); sysPicture.setUpdateBy(CoderLoginUtil.getUserName());
YUtil.isTrue(!sysPictureService.updateById(sysPicture), "修改失败,请稍后重试"); YUtil.isTrue(!sysPictureService.updateById(sysPicture), "修改失败,请稍后重试");
@ -113,7 +115,7 @@ public class SysPictureController {
@Operation(summary = "删除图片", description = "根据图片ID删除指定图片记录") @Operation(summary = "删除图片", description = "根据图片ID删除指定图片记录")
@SaCheckPermission("system:sysPicture:delete") @SaCheckPermission("system:sysPicture:delete")
@PostMapping("/sysPicture/deleteById/{id}") @PostMapping("/sysPicture/deleteById/{id}")
// @OperLog(value = "删除图库", operType = OperType.DELETE) @OperLog(value = "删除图库", operType = OperType.DELETE)
public void delete(@PathVariable("id") Long id) { public void delete(@PathVariable("id") Long id) {
YUtil.isTrue(!sysPictureService.removeById(id), "删除失败,请稍后重试"); YUtil.isTrue(!sysPictureService.removeById(id), "删除失败,请稍后重试");
} }
@ -126,7 +128,7 @@ public class SysPictureController {
@SaCheckPermission("system:sysPicture:delete") @SaCheckPermission("system:sysPicture:delete")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@PostMapping("/sysPicture/batchDelete") @PostMapping("/sysPicture/batchDelete")
// @OperLog(value = "批量删除图库", operType = OperType.DELETE) @OperLog(value = "批量删除图库", operType = OperType.DELETE)
public void batchDelete(@RequestBody List<Long> ids) { public void batchDelete(@RequestBody List<Long> ids) {
YUtil.isTrue(!sysPictureService.removeBatchByIds(ids), "删除失败,请稍后重试"); YUtil.isTrue(!sysPictureService.removeBatchByIds(ids), "删除失败,请稍后重试");
} }

View File

@ -11,10 +11,12 @@ import org.apache.commons.lang3.StringUtils;
import org.leocoder.thin.common.constants.CoderConstants; import org.leocoder.thin.common.constants.CoderConstants;
import org.leocoder.thin.common.exception.coder.YUtil; import org.leocoder.thin.common.exception.coder.YUtil;
import org.leocoder.thin.common.satoken.CoderLoginUtil; import org.leocoder.thin.common.satoken.CoderLoginUtil;
import org.leocoder.thin.domain.enums.oper.OperType;
import org.leocoder.thin.domain.model.bo.element.SelectLongBo; import org.leocoder.thin.domain.model.bo.element.SelectLongBo;
import org.leocoder.thin.domain.model.vo.base.BaseVo; import org.leocoder.thin.domain.model.vo.base.BaseVo;
import org.leocoder.thin.domain.model.vo.system.SysRoleVo; import org.leocoder.thin.domain.model.vo.system.SysRoleVo;
import org.leocoder.thin.domain.pojo.system.SysRole; import org.leocoder.thin.domain.pojo.system.SysRole;
import org.leocoder.thin.operlog.annotation.OperLog;
import org.leocoder.thin.system.service.role.SysRoleService; import org.leocoder.thin.system.service.role.SysRoleService;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@ -77,7 +79,7 @@ public class SysRoleController {
@Operation(summary = "新增角色", description = "添加新的系统角色") @Operation(summary = "新增角色", description = "添加新的系统角色")
@SaCheckPermission("system:role:add") @SaCheckPermission("system:role:add")
@PostMapping("/sysRole/add") @PostMapping("/sysRole/add")
// @OperLog(value = "新增角色", operType = OperType.INSERT) @OperLog(value = "新增角色", operType = OperType.INSERT)
public void add(@Validated @RequestBody SysRole sysRole) { public void add(@Validated @RequestBody SysRole sysRole) {
if (StringUtils.isNotBlank(CoderLoginUtil.getUserName())) { if (StringUtils.isNotBlank(CoderLoginUtil.getUserName())) {
sysRole.setCreateBy(CoderLoginUtil.getUserName()); sysRole.setCreateBy(CoderLoginUtil.getUserName());
@ -108,7 +110,7 @@ public class SysRoleController {
@Operation(summary = "修改角色信息", description = "更新系统角色的基本信息") @Operation(summary = "修改角色信息", description = "更新系统角色的基本信息")
@SaCheckPermission("system:role:update") @SaCheckPermission("system:role:update")
@PostMapping("/sysRole/update") @PostMapping("/sysRole/update")
// @OperLog(value = "修改角色", operType = OperType.UPDATE) @OperLog(value = "修改角色", operType = OperType.UPDATE)
public void update(@Validated @RequestBody SysRole sysRole) { public void update(@Validated @RequestBody SysRole sysRole) {
if (StringUtils.isNotBlank(CoderLoginUtil.getUserName())) { if (StringUtils.isNotBlank(CoderLoginUtil.getUserName())) {
sysRole.setUpdateBy(CoderLoginUtil.getUserName()); sysRole.setUpdateBy(CoderLoginUtil.getUserName());
@ -123,7 +125,7 @@ public class SysRoleController {
@Operation(summary = "删除角色", description = "根据角色ID删除指定角色") @Operation(summary = "删除角色", description = "根据角色ID删除指定角色")
@SaCheckPermission("system:role:delete") @SaCheckPermission("system:role:delete")
@PostMapping("/sysRole/deleteById/{id}") @PostMapping("/sysRole/deleteById/{id}")
// @OperLog(value = "删除角色", operType = OperType.DELETE) @OperLog(value = "删除角色", operType = OperType.DELETE)
public void delete(@PathVariable("id") Long id) { public void delete(@PathVariable("id") Long id) {
YUtil.isTrue(Objects.equals(id, 1L), "超级管理员不可删除"); YUtil.isTrue(Objects.equals(id, 1L), "超级管理员不可删除");
YUtil.isTrue(!sysRoleService.removeById(id), "删除失败,请稍后重试"); YUtil.isTrue(!sysRoleService.removeById(id), "删除失败,请稍后重试");
@ -136,7 +138,7 @@ public class SysRoleController {
@Operation(summary = "批量删除角色", description = "批量删除多个系统角色") @Operation(summary = "批量删除角色", description = "批量删除多个系统角色")
@SaCheckPermission("system:role:delete") @SaCheckPermission("system:role:delete")
@PostMapping("/sysRole/batchDelete") @PostMapping("/sysRole/batchDelete")
// @OperLog(value = "批量删除角色", operType = OperType.DELETE) @OperLog(value = "批量删除角色", operType = OperType.DELETE)
public void batchDelete(@RequestBody List<Long> ids) { public void batchDelete(@RequestBody List<Long> ids) {
for (Long id : ids) { for (Long id : ids) {
YUtil.isTrue(Objects.equals(id, 1L), "超级管理员不可删除"); YUtil.isTrue(Objects.equals(id, 1L), "超级管理员不可删除");
@ -150,7 +152,7 @@ public class SysRoleController {
*/ */
@Operation(summary = "修改角色状态", description = "启用或禁用系统角色") @Operation(summary = "修改角色状态", description = "启用或禁用系统角色")
@PostMapping("/sysRole/updateStatus/{roleId}/{roleStatus}") @PostMapping("/sysRole/updateStatus/{roleId}/{roleStatus}")
// @OperLog(value = "修改角色状态", operType = OperType.UPDATE) @OperLog(value = "修改角色状态", operType = OperType.UPDATE)
public void update(@PathVariable("roleId") Long roleId, @PathVariable("roleStatus") String roleStatus) { public void update(@PathVariable("roleId") Long roleId, @PathVariable("roleStatus") String roleStatus) {
UpdateWrapper<SysRole> updateWrapper = new UpdateWrapper<>(); UpdateWrapper<SysRole> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("role_status", roleStatus).eq("role_id", roleId); updateWrapper.set("role_status", roleStatus).eq("role_id", roleId);
@ -178,7 +180,7 @@ public class SysRoleController {
@Operation(summary = "分配用户角色", description = "为指定用户分配角色权限") @Operation(summary = "分配用户角色", description = "为指定用户分配角色权限")
@SaCheckPermission("system:user:role") @SaCheckPermission("system:user:role")
@GetMapping("/sysRole/assignUserRole/{userId}/{roleIds}") @GetMapping("/sysRole/assignUserRole/{userId}/{roleIds}")
// @OperLog(value = "分配用户角色", operType = OperType.UPDATE) @OperLog(value = "分配用户角色", operType = OperType.UPDATE)
public void assignUserRole(@PathVariable("userId") Long userId, @PathVariable("roleIds") List<Long> roleIds) { public void assignUserRole(@PathVariable("userId") Long userId, @PathVariable("roleIds") List<Long> roleIds) {
sysRoleService.assignUserRole(userId, roleIds); sysRoleService.assignUserRole(userId, roleIds);
} }

View File

@ -1,13 +1,12 @@
package org.leocoder.thin.system.controller.user; package org.leocoder.thin.system.controller.user;
import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaCheckPermission;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -21,10 +20,12 @@ import org.leocoder.thin.common.satoken.CoderLoginUtil;
import org.leocoder.thin.common.satoken.CoderPasswordUtil; import org.leocoder.thin.common.satoken.CoderPasswordUtil;
import org.leocoder.thin.common.utils.file.FileTypeUtil; import org.leocoder.thin.common.utils.file.FileTypeUtil;
import org.leocoder.thin.common.utils.number.VerifyCodeUtil; import org.leocoder.thin.common.utils.number.VerifyCodeUtil;
import org.leocoder.thin.domain.enums.oper.OperType;
import org.leocoder.thin.domain.model.vo.system.SysLoginUserVo; import org.leocoder.thin.domain.model.vo.system.SysLoginUserVo;
import org.leocoder.thin.domain.model.vo.system.SysPwdVo; import org.leocoder.thin.domain.model.vo.system.SysPwdVo;
import org.leocoder.thin.domain.pojo.system.SysLoginUser; import org.leocoder.thin.domain.pojo.system.SysLoginUser;
import org.leocoder.thin.easyexcel.core.utils.EasyExcelUtil; import org.leocoder.thin.easyexcel.core.utils.EasyExcelUtil;
import org.leocoder.thin.operlog.annotation.OperLog;
import org.leocoder.thin.system.service.role.SysRoleService; import org.leocoder.thin.system.service.role.SysRoleService;
import org.leocoder.thin.system.service.user.SysLoginUserService; import org.leocoder.thin.system.service.user.SysLoginUserService;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -112,7 +113,7 @@ public class SysLoginUserController {
@SaCheckPermission("system:user:add") @SaCheckPermission("system:user:add")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@PostMapping("/sysLoginUser/add") @PostMapping("/sysLoginUser/add")
// @OperLog(value = "新增用户", operType = OperType.INSERT, excludeFields = {"password", "salt"}) @OperLog(value = "新增用户", operType = OperType.INSERT, excludeFields = {"password", "salt"})
public void add(@Validated @RequestBody SysLoginUser sysLoginUser) { public void add(@Validated @RequestBody SysLoginUser sysLoginUser) {
// 1先查询是否已经存在登录名 // 1先查询是否已经存在登录名
LambdaQueryWrapper<SysLoginUser> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SysLoginUser> wrapper = new LambdaQueryWrapper<>();
@ -139,7 +140,7 @@ public class SysLoginUserController {
@SaCheckPermission("system:user:update") @SaCheckPermission("system:user:update")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@PostMapping("/sysLoginUser/update") @PostMapping("/sysLoginUser/update")
// @OperLog(value = "修改用户", operType = OperType.UPDATE, excludeFields = {"password", "salt"}) @OperLog(value = "修改用户", operType = OperType.UPDATE, excludeFields = {"password", "salt"})
public void update(@Validated @RequestBody SysLoginUser sysLoginUser) { public void update(@Validated @RequestBody SysLoginUser sysLoginUser) {
// 1修改用户基本信息 // 1修改用户基本信息
if (StringUtils.isNotBlank(CoderLoginUtil.getUserName())) { if (StringUtils.isNotBlank(CoderLoginUtil.getUserName())) {
@ -158,7 +159,7 @@ public class SysLoginUserController {
@SaCheckPermission("system:user:delete") @SaCheckPermission("system:user:delete")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@PostMapping("/sysLoginUser/deleteById/{id}") @PostMapping("/sysLoginUser/deleteById/{id}")
// @OperLog(value = "删除用户", operType = OperType.DELETE) @OperLog(value = "删除用户", operType = OperType.DELETE)
public void delete(@PathVariable("id") Long id) { public void delete(@PathVariable("id") Long id) {
// 1超级管理员不可删除 // 1超级管理员不可删除
YUtil.isTrue(id == 1L, "超级管理员不可删除"); YUtil.isTrue(id == 1L, "超级管理员不可删除");
@ -176,7 +177,7 @@ public class SysLoginUserController {
@SaCheckPermission("system:user:delete") @SaCheckPermission("system:user:delete")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@PostMapping("/sysLoginUser/batchDelete") @PostMapping("/sysLoginUser/batchDelete")
// @OperLog(value = "批量删除用户", operType = OperType.DELETE) @OperLog(value = "批量删除用户", operType = OperType.DELETE)
public void deleteBatch(@NotNull(message = "请选择需要删除的数据") @RequestBody List<Long> ids) { public void deleteBatch(@NotNull(message = "请选择需要删除的数据") @RequestBody List<Long> ids) {
for (Long id : ids) { for (Long id : ids) {
// 1超级管理员不可删除 // 1超级管理员不可删除
@ -194,7 +195,7 @@ public class SysLoginUserController {
*/ */
@Operation(summary = "修改用户状态", description = "启用或禁用系统用户") @Operation(summary = "修改用户状态", description = "启用或禁用系统用户")
@PostMapping("/sysLoginUser/updateStatus/{userId}/{userStatus}") @PostMapping("/sysLoginUser/updateStatus/{userId}/{userStatus}")
// @OperLog(value = "修改用户状态", operType = OperType.UPDATE) @OperLog(value = "修改用户状态", operType = OperType.UPDATE)
public void update(@PathVariable("userId") Long userId, @PathVariable("userStatus") String userStatus) { public void update(@PathVariable("userId") Long userId, @PathVariable("userStatus") String userStatus) {
UpdateWrapper<SysLoginUser> updateWrapper = new UpdateWrapper<>(); UpdateWrapper<SysLoginUser> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("user_status", userStatus).eq("user_id", userId); updateWrapper.set("user_status", userStatus).eq("user_id", userId);
@ -227,7 +228,7 @@ public class SysLoginUserController {
*/ */
@Operation(summary = "修改个人资料", description = "修改个人基本信息和头像") @Operation(summary = "修改个人资料", description = "修改个人基本信息和头像")
@PostMapping("/sysLoginUser/updateBasicData") @PostMapping("/sysLoginUser/updateBasicData")
// @OperLog(value = "修改个人资料", operType = OperType.UPDATE) @OperLog(value = "修改个人资料", operType = OperType.UPDATE)
public void updateBasicData(@RequestBody SysLoginUser sysLoginUser) { public void updateBasicData(@RequestBody SysLoginUser sysLoginUser) {
sysLoginUser.setUserId(CoderLoginUtil.getUserId()); sysLoginUser.setUserId(CoderLoginUtil.getUserId());
YUtil.isTrue(!sysLoginUserService.updateById(sysLoginUser), "操作失败"); YUtil.isTrue(!sysLoginUserService.updateById(sysLoginUser), "操作失败");
@ -239,7 +240,7 @@ public class SysLoginUserController {
*/ */
@Operation(summary = "修改登录密码", description = "用户修改自己的登录密码") @Operation(summary = "修改登录密码", description = "用户修改自己的登录密码")
@PostMapping("/sysLoginUser/updateUserPwd") @PostMapping("/sysLoginUser/updateUserPwd")
// @OperLog(value = "修改密码", operType = OperType.UPDATE, saveRequestData = false, saveResponseData = false) @OperLog(value = "修改密码", operType = OperType.UPDATE, saveRequestData = false, saveResponseData = false)
public void updateUserPwd(@Validated @RequestBody SysPwdVo vo) { public void updateUserPwd(@Validated @RequestBody SysPwdVo vo) {
SysLoginUser sysLoginUser = sysLoginUserService.getById(CoderLoginUtil.getUserId()); SysLoginUser sysLoginUser = sysLoginUserService.getById(CoderLoginUtil.getUserId());
YUtil.isTrue(ObjectUtils.isEmpty(sysLoginUser), "用户信息发生改变,请重新登录"); YUtil.isTrue(ObjectUtils.isEmpty(sysLoginUser), "用户信息发生改变,请重新登录");
@ -273,7 +274,7 @@ public class SysLoginUserController {
@SaCheckPermission("system:user:resetPwd") @SaCheckPermission("system:user:resetPwd")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@PostMapping("/sysLoginUser/resetPwd/{id}/{password}") @PostMapping("/sysLoginUser/resetPwd/{id}/{password}")
// @OperLog(value = "重置用户密码", operType = OperType.UPDATE, saveRequestData = false, saveResponseData = false) @OperLog(value = "重置用户密码", operType = OperType.UPDATE, saveRequestData = false, saveResponseData = false)
public void resetPwd(@PathVariable("id") Long id, @PathVariable("password") String password) { public void resetPwd(@PathVariable("id") Long id, @PathVariable("password") String password) {
// 1参数校验 // 1参数校验
YUtil.isTrue(id == null, "用户ID不能为空"); YUtil.isTrue(id == null, "用户ID不能为空");
@ -298,7 +299,7 @@ public class SysLoginUserController {
*/ */
@Operation(summary = "下载用户导入模版", description = "下载用户数据导入的Excel模版文件") @Operation(summary = "下载用户导入模版", description = "下载用户数据导入的Excel模版文件")
@GetMapping("/sysLoginUser/downloadExcelTemplate") @GetMapping("/sysLoginUser/downloadExcelTemplate")
// @OperLog(value = "下载用户导入模板", operType = OperType.EXPORT) @OperLog(value = "下载用户导入模板", operType = OperType.EXPORT)
public void downloadExcelTemplate(HttpServletResponse response) { public void downloadExcelTemplate(HttpServletResponse response) {
List<SysLoginUser> list = new ArrayList<>(); List<SysLoginUser> list = new ArrayList<>();
easyExcelUtil.exportExcel(response, list, SysLoginUser.class, "下载模版", "下载模版"); easyExcelUtil.exportExcel(response, list, SysLoginUser.class, "下载模版", "下载模版");
@ -311,7 +312,7 @@ public class SysLoginUserController {
@Operation(summary = "导出用户数据", description = "根据查询条件导出用户数据到Excel文件") @Operation(summary = "导出用户数据", description = "根据查询条件导出用户数据到Excel文件")
@SaCheckPermission("system:user:export") @SaCheckPermission("system:user:export")
@GetMapping("/sysLoginUser/exportExcelData") @GetMapping("/sysLoginUser/exportExcelData")
// @OperLog(value = "导出用户数据", operType = OperType.EXPORT) @OperLog(value = "导出用户数据", operType = OperType.EXPORT)
public void exportExcelData(SysLoginUserVo vo, HttpServletResponse response) { public void exportExcelData(SysLoginUserVo vo, HttpServletResponse response) {
List<SysLoginUser> list = sysLoginUserService.listLoginUser(vo); List<SysLoginUser> list = sysLoginUserService.listLoginUser(vo);
easyExcelUtil.exportExcel(response, list, SysLoginUser.class, "导出", "用户信息表"); easyExcelUtil.exportExcel(response, list, SysLoginUser.class, "导出", "用户信息表");
@ -325,7 +326,7 @@ public class SysLoginUserController {
@SaCheckPermission("system:user:import") @SaCheckPermission("system:user:import")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@PostMapping("/sysLoginUser/importExcelData") @PostMapping("/sysLoginUser/importExcelData")
// @OperLog(value = "导入用户数据", operType = OperType.IMPORT, saveRequestData = false, saveResponseData = true) @OperLog(value = "导入用户数据", operType = OperType.IMPORT, saveRequestData = false, saveResponseData = true)
public void importExcelData(@RequestParam("file") MultipartFile multipartFile) { public void importExcelData(@RequestParam("file") MultipartFile multipartFile) {
// 判断是否符合excel文件格式 // 判断是否符合excel文件格式
FileTypeUtil.decideIsExcel(multipartFile); FileTypeUtil.decideIsExcel(multipartFile);

View File

@ -1,10 +1,10 @@
package org.leocoder.system.service.operlog; package org.leocoder.thin.system.service.operlog;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import org.leocoder.domain.pojo.system.SysOperLog; import org.leocoder.thin.domain.model.vo.system.SysOperLogVo;
import org.leocoder.domain.model.vo.system.SysOperLogVo; import org.leocoder.thin.domain.pojo.system.SysOperLog;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;

View File

@ -1,4 +1,4 @@
package org.leocoder.system.service.operlog; package org.leocoder.thin.system.service.operlog;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -7,12 +7,12 @@ import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.leocoder.common.exception.coder.YUtil; import org.leocoder.thin.common.exception.coder.YUtil;
import org.leocoder.common.utils.cache.RedisUtil; import org.leocoder.thin.common.utils.cache.RedisUtil;
import org.leocoder.common.utils.date.DateUtil; import org.leocoder.thin.common.utils.date.DateUtil;
import org.leocoder.domain.pojo.system.SysOperLog; import org.leocoder.thin.domain.model.vo.system.SysOperLogVo;
import org.leocoder.domain.model.vo.system.SysOperLogVo; import org.leocoder.thin.domain.pojo.system.SysOperLog;
import org.leocoder.mp.mapper.system.SysOperLogMapper; import org.leocoder.thin.mybatisplus.mapper.system.SysOperLogMapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -222,8 +222,8 @@ public class SysOperLogServiceImpl extends ServiceImpl<SysOperLogMapper, SysOper
// 本月统计 // 本月统计
// 获取本月第一天 // 获取本月第一天
java.util.Calendar calendar = java.util.Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
calendar.set(java.util.Calendar.DAY_OF_MONTH, 1); calendar.set(Calendar.DAY_OF_MONTH, 1);
String monthStart = DateUtil.format(calendar.getTime(), "yyyy-MM-dd"); String monthStart = DateUtil.format(calendar.getTime(), "yyyy-MM-dd");
Long monthCount = this.count(new LambdaQueryWrapper<SysOperLog>() Long monthCount = this.count(new LambdaQueryWrapper<SysOperLog>()
.ge(SysOperLog::getOperTime, monthStart + " 00:00:00")); .ge(SysOperLog::getOperTime, monthStart + " 00:00:00"));

View File

@ -1,12 +1,12 @@
package org.leocoder.system.task; package org.leocoder.thin.system.task;
import org.leocoder.system.service.operlog.SysOperLogService; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.leocoder.thin.system.service.operlog.SysOperLogService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.beans.factory.annotation.Value;
import lombok.extern.slf4j.Slf4j;
import lombok.RequiredArgsConstructor;
/** /**
* @author Leocoder * @author Leocoder

View File

@ -1,10 +1,11 @@
package org.leocoder.mp.mapper.system; package org.leocoder.thin.mybatisplus.mapper.system;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.leocoder.domain.pojo.system.SysOperLog;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.leocoder.thin.domain.pojo.system.SysOperLog;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;

View File

@ -3,10 +3,10 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.leocoder.mp.mapper.system.SysOperLogMapper"> <mapper namespace="org.leocoder.thin.mybatisplus.mapper.system.SysOperLogMapper">
<!-- 基础字段映射 --> <!-- 基础字段映射 -->
<resultMap id="BaseResultMap" type="org.leocoder.domain.pojo.system.SysOperLog"> <resultMap id="BaseResultMap" type="org.leocoder.thin.domain.pojo.system.SysOperLog">
<id column="oper_id" property="operId" /> <id column="oper_id" property="operId" />
<result column="oper_name" property="operName" /> <result column="oper_name" property="operName" />
<result column="oper_type" property="operType" /> <result column="oper_type" property="operType" />