feat(user): 加入审计日志、用户中心操作日志

This commit is contained in:
2025-12-31 15:19:40 +08:00
parent bab3ea1a15
commit 467b2a7d93
45 changed files with 580 additions and 198 deletions
@@ -98,15 +98,15 @@
<!-- 操作日志 -->
<el-tab-pane label="操作日志" name="second">
<el-table v-loading="loading" :data="data" style="width: 100%;">
<el-table-column prop="description" label="行为" />
<el-table-column prop="bizName" label="业务名称" />
<el-table-column prop="requestIp" label="IP" />
<el-table-column :show-overflow-tooltip="true" prop="address" label="IP来源" />
<el-table-column prop="browser" label="浏览器" />
<el-table-column prop="time" label="请求耗时" align="center">
<el-table-column prop="browserInfo" label="浏览器" />
<el-table-column prop="executeTime" label="请求耗时" align="center">
<template slot-scope="scope">
<el-tag v-if="scope.row.time <= 300">{{ scope.row.time }}ms</el-tag>
<el-tag v-else-if="scope.row.time <= 1000" type="warning">{{ scope.row.time }}ms</el-tag>
<el-tag v-else type="danger">{{ scope.row.time }}ms</el-tag>
<el-tag v-if="scope.row.executeTime <= 300">{{ scope.row.time }}ms</el-tag>
<el-tag v-else-if="scope.row.executeTime <= 1000" type="warning">{{ scope.row.executeTime }}ms</el-tag>
<el-tag v-else type="danger">{{ scope.row.executeTime }}ms</el-tag>
</template>
</el-table-column>
<el-table-column
@@ -211,7 +211,7 @@ export default {
}
},
beforeInit() {
this.url = 'api/logs/user'
this.url = 'api/logs/searchUserLog'
return true
},
cropUploadSuccess(jsonData, field) {
@@ -1,6 +1,7 @@
package cn.odboy.system.constant;
public interface SystemYesOrNoChConst {
String YES_STR = "是";
String NO_STR = "否";
}
@@ -16,7 +16,6 @@
package cn.odboy.system.controller;
import cn.odboy.annotation.AnonymousPostMapping;
import cn.odboy.system.dal.model.SystemUserInfoVo;
import cn.odboy.system.dal.model.SystemUserLoginArgs;
import cn.odboy.system.service.SystemAuthService;
import io.swagger.annotations.Api;
@@ -27,7 +26,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -52,20 +50,6 @@ public class SystemAuthController {
return ResponseEntity.ok(loginInfo);
}
@ApiOperation("获取用户信息")
@PostMapping(value = "/info")
public ResponseEntity<SystemUserInfoVo> getUserInfo() {
SystemUserInfoVo userInfoVo = systemAuthService.getCurrentUserInfoVo();
return ResponseEntity.ok(userInfoVo);
}
@ApiOperation("获取验证码")
@AnonymousPostMapping(value = "/captcha/getImage")
public ResponseEntity<Map<String, Object>> getCode() {
Map<String, Object> imgResult = systemAuthService.getCaptchaInfo();
return ResponseEntity.ok(imgResult);
}
@ApiOperation("退出登录")
@AnonymousPostMapping(value = "/logout")
public ResponseEntity<Void> logout(HttpServletRequest request) {
@@ -17,6 +17,7 @@ package cn.odboy.system.controller;
import cn.odboy.system.constant.SystemCaptchaBizEnum;
import cn.odboy.system.dal.model.SystemCheckEmailCaptchaArgs;
import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.service.SystemEmailService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -37,23 +38,25 @@ public class SystemCaptchaController {
@Autowired
private SystemEmailService systemEmailService;
@OperationLog
@ApiOperation("重置邮箱, 发送验证码")
@PostMapping(value = "/sendResetEmailCaptcha")
public ResponseEntity<Void> sendResetEmailCaptcha(@RequestParam String email) {
@PostMapping(value = "/sendResetEmailCode")
public ResponseEntity<Void> sendResetEmailCode(@RequestParam String email) {
systemEmailService.sendCaptcha(SystemCaptchaBizEnum.EMAIL_RESET_EMAIL_CODE, email);
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("重置密码,发送验证码")
@PostMapping(value = "/sendResetPasswordCaptcha")
public ResponseEntity<Void> sendResetPasswordCaptcha(@RequestParam String email) {
@PostMapping(value = "/sendResetPasswordCode")
public ResponseEntity<Void> sendResetPasswordCode(@RequestParam String email) {
systemEmailService.sendCaptcha(SystemCaptchaBizEnum.EMAIL_RESET_PWD_CODE, email);
return ResponseEntity.ok(null);
}
@ApiOperation("验证码验证")
@PostMapping(value = "/checkEmailCaptcha")
public ResponseEntity<Void> checkEmailCaptcha(@Validated @RequestBody SystemCheckEmailCaptchaArgs args) {
@PostMapping(value = "/verifyCode")
public ResponseEntity<Void> verifyCode(@Validated @RequestBody SystemCheckEmailCaptchaArgs args) {
systemEmailService.checkEmailCaptcha(args);
return ResponseEntity.ok(null);
}
@@ -34,16 +34,16 @@ public class SystemComponentController {
private SystemDeptService systemDeptService;
@ApiOperation("查询部门下拉选择数据源")
@PostMapping(value = "/queryDeptSelectDataSource")
@PostMapping(value = "/listDeptSelectDataSource")
@PreAuthorize("@el.check()")
public ResponseEntity<?> queryDeptSelectDataSource() {
return ResponseEntity.ok(systemDeptService.queryDeptSelectDataSource());
public ResponseEntity<?> listDeptSelectDataSource() {
return ResponseEntity.ok(systemDeptService.listDeptSelectDataSource());
}
@ApiOperation("查询部门下拉选择Pro数据源")
@PostMapping(value = "/queryDeptSelectProDataSource")
@PostMapping(value = "/listDeptSelectProDataSource")
@PreAuthorize("@el.check()")
public ResponseEntity<?> queryDeptSelectProDataSource() {
return ResponseEntity.ok(systemDeptService.queryDeptSelectProDataSource());
public ResponseEntity<?> listDeptSelectProDataSource() {
return ResponseEntity.ok(systemDeptService.listDeptSelectProDataSource());
}
}
@@ -20,6 +20,7 @@ import cn.odboy.base.KitPageResult;
import cn.odboy.system.dal.dataobject.SystemDeptTb;
import cn.odboy.system.dal.model.SystemCreateDeptArgs;
import cn.odboy.system.dal.model.SystemQueryDeptArgs;
import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.service.SystemDeptService;
import cn.odboy.util.KitPageUtil;
import io.swagger.annotations.Api;
@@ -46,6 +47,7 @@ public class SystemDeptController {
@Autowired
private SystemDeptService systemDeptService;
@OperationLog
@ApiOperation("导出部门数据")
@GetMapping(value = "/download")
@PreAuthorize("@el.check('dept:list')")
@@ -54,7 +56,7 @@ public class SystemDeptController {
}
@ApiOperation("查询部门")
@PostMapping
@PostMapping(value = "/searchDept")
@PreAuthorize("@el.check('user:list','dept:list')")
public ResponseEntity<KitPageResult<SystemDeptTb>> queryDept(
@Validated @RequestBody KitPageArgs<SystemQueryDeptArgs> pageArgs) throws Exception {
@@ -63,13 +65,14 @@ public class SystemDeptController {
}
@ApiOperation("查询部门:根据ID获取同级与上级数据")
@PostMapping("/queryDeptSuperiorTree")
@PostMapping("/searchDeptTree")
@PreAuthorize("@el.check('user:list','dept:list')")
public ResponseEntity<KitPageResult<SystemDeptTb>> queryDeptSuperiorTree(@RequestBody List<Long> ids,
@RequestParam(defaultValue = "false") Boolean exclude) {
return ResponseEntity.ok(systemDeptService.searchDeptTree(ids, exclude));
}
@OperationLog
@ApiOperation("新增部门")
@PostMapping(value = "/saveDept")
@PreAuthorize("@el.check('dept:add')")
@@ -78,18 +81,20 @@ public class SystemDeptController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("修改部门")
@PostMapping(value = "/modifyDept")
@PostMapping(value = "/updateDeptById")
@PreAuthorize("@el.check('dept:edit')")
public ResponseEntity<Void> modifyDept(@Validated(SystemDeptTb.Update.class) @RequestBody SystemDeptTb args) {
systemDeptService.updateDept(args);
public ResponseEntity<Void> updateDeptById(@Validated(SystemDeptTb.Update.class) @RequestBody SystemDeptTb args) {
systemDeptService.updateDeptById(args);
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("删除部门")
@PostMapping(value = "/removeDeptByIds")
@PostMapping(value = "/deleteDeptByIds")
@PreAuthorize("@el.check('dept:del')")
public ResponseEntity<Void> removeDeptByIds(@RequestBody Set<Long> ids) {
public ResponseEntity<Void> deleteDeptByIds(@RequestBody Set<Long> ids) {
systemDeptService.deleteDeptByIds(ids);
return ResponseEntity.ok(null);
}
@@ -20,7 +20,7 @@ import cn.odboy.base.KitPageResult;
import cn.odboy.system.dal.dataobject.SystemDictTb;
import cn.odboy.system.dal.model.SystemCreateDictArgs;
import cn.odboy.system.dal.model.SystemQueryDictArgs;
import cn.odboy.system.service.SystemDictDetailService;
import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.service.SystemDictService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
@@ -46,9 +46,8 @@ public class SystemDictController {
@Autowired
private SystemDictService systemDictService;
@Autowired
private SystemDictDetailService systemDictDetailService;
@OperationLog
@ApiOperation("导出字典数据")
@GetMapping(value = "/download")
@PreAuthorize("@el.check('dict:list')")
@@ -56,15 +55,16 @@ public class SystemDictController {
systemDictService.exportDictXlsx(response, args);
}
@ApiOperation("查询字典")
@Deprecated
@ApiOperation("查询所有字典")
@PostMapping(value = "/queryAllDict")
@PreAuthorize("@el.check('dict:list')")
public ResponseEntity<List<SystemDictTb>> queryAllDict() {
return ResponseEntity.ok(systemDictService.queryDictByArgs(new SystemQueryDictArgs()));
}
@ApiOperation("查询字典")
@PostMapping
@ApiOperation("分页查询字典")
@PostMapping(value = "/searchDict")
@PreAuthorize("@el.check('dict:list')")
public ResponseEntity<KitPageResult<SystemDictTb>> queryDictByArgs(
@Validated @RequestBody KitPageArgs<SystemQueryDictArgs> pageArgs) {
@@ -72,6 +72,7 @@ public class SystemDictController {
return ResponseEntity.ok(systemDictService.searchDict(pageArgs.getArgs(), page));
}
@OperationLog
@ApiOperation("新增字典")
@PostMapping(value = "/saveDict")
@PreAuthorize("@el.check('dict:add')")
@@ -80,18 +81,20 @@ public class SystemDictController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("修改字典")
@PostMapping(value = "/modifyDictById")
@PostMapping(value = "/updateDictById")
@PreAuthorize("@el.check('dict:edit')")
public ResponseEntity<Void> modifyDictById(@Validated(SystemDictTb.Update.class) @RequestBody SystemDictTb args) {
public ResponseEntity<Void> updateDictById(@Validated(SystemDictTb.Update.class) @RequestBody SystemDictTb args) {
systemDictService.updateDictById(args);
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("删除字典")
@PostMapping(value = "/removeDictByIds")
@PostMapping(value = "/deleteDictByIds")
@PreAuthorize("@el.check('dict:del')")
public ResponseEntity<Void> removeDictByIds(@RequestBody Set<Long> ids) {
public ResponseEntity<Void> deleteDictByIds(@RequestBody Set<Long> ids) {
systemDictService.deleteDictByIds(ids);
return ResponseEntity.ok(null);
}
@@ -21,6 +21,7 @@ import cn.odboy.system.dal.dataobject.SystemDictDetailTb;
import cn.odboy.system.dal.model.SystemCreateDictDetailArgs;
import cn.odboy.system.dal.model.SystemDictDetailVo;
import cn.odboy.system.dal.model.SystemQueryDictDetailArgs;
import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.service.SystemDictDetailService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
@@ -47,14 +48,7 @@ public class SystemDictDetailController {
private SystemDictDetailService systemDictDetailService;
@ApiOperation("查询字典详情")
@PostMapping
public ResponseEntity<KitPageResult<SystemDictDetailVo>> queryDictDetailByCrud(
@Validated @RequestBody KitPageArgs<SystemQueryDictDetailArgs> args) {
return queryDictDetailByArgs(args);
}
@ApiOperation("查询字典详情")
@PostMapping(value = "/queryDictDetailByArgs")
@PostMapping(value = "/searchDictDetail")
public ResponseEntity<KitPageResult<SystemDictDetailVo>> queryDictDetailByArgs(
@Validated @RequestBody KitPageArgs<SystemQueryDictDetailArgs> pageArgs) {
Page<SystemDictDetailTb> page = new Page<>(pageArgs.getPage(), pageArgs.getSize());
@@ -68,6 +62,7 @@ public class SystemDictDetailController {
return ResponseEntity.ok(dictMap);
}
@OperationLog
@ApiOperation("新增字典详情")
@PostMapping(value = "/saveDictDetail")
@PreAuthorize("@el.check('dict:add')")
@@ -76,19 +71,21 @@ public class SystemDictDetailController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("修改字典详情")
@PostMapping(value = "/modifyDictDetailById")
@PostMapping(value = "/updateDictDetailById")
@PreAuthorize("@el.check('dict:edit')")
public ResponseEntity<Void> modifyDictDetailById(
public ResponseEntity<Void> updateDictDetailById(
@Validated(SystemDictDetailTb.Update.class) @RequestBody SystemDictDetailTb args) {
systemDictDetailService.updateDictDetailById(args);
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("删除字典详情")
@PostMapping(value = "/removeDictDetailById")
@PostMapping(value = "/deleteDictDetailById")
@PreAuthorize("@el.check('dict:del')")
public ResponseEntity<Void> removeDictDetailById(@RequestBody SystemDictDetailTb args) {
public ResponseEntity<Void> deleteDictDetailById(@RequestBody SystemDictDetailTb args) {
systemDictDetailService.deleteDictDetailById(args.getId());
return ResponseEntity.ok(null);
}
@@ -17,6 +17,7 @@ package cn.odboy.system.controller;
import cn.odboy.system.dal.dataobject.SystemEmailConfigTb;
import cn.odboy.system.dal.model.SystemSendEmailArgs;
import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.service.SystemEmailService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -45,17 +46,19 @@ public class SystemEmailController {
return ResponseEntity.ok(systemEmailService.getLastEmailConfig());
}
@ApiOperation("配置邮件")
@PostMapping(value = "/modifyEmailConfig")
public ResponseEntity<Void> modifyEmailConfig(@Validated @RequestBody SystemEmailConfigTb emailConfig)
@OperationLog
@ApiOperation("修改邮箱配置")
@PostMapping(value = "/updateEmailConfigById")
public ResponseEntity<Void> updateEmailConfigById(@Validated @RequestBody SystemEmailConfigTb emailConfig)
throws Exception {
systemEmailService.updateEmailConfigById(emailConfig);
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("发送邮件")
@PostMapping(value = "/sendEmail")
public ResponseEntity<Void> sendEmail(@Validated @RequestBody SystemSendEmailArgs sendEmailRequest) {
@PostMapping(value = "/send")
public ResponseEntity<Void> send(@Validated @RequestBody SystemSendEmailArgs sendEmailRequest) {
systemEmailService.sendEmail(sendEmailRequest);
return ResponseEntity.ok(null);
}
@@ -20,6 +20,7 @@ import cn.odboy.base.KitPageResult;
import cn.odboy.system.dal.dataobject.SystemJobTb;
import cn.odboy.system.dal.model.SystemCreateJobArgs;
import cn.odboy.system.dal.model.SystemQueryJobArgs;
import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.service.SystemJobService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
@@ -45,6 +46,7 @@ public class SystemJobController {
@Autowired
private SystemJobService systemJobService;
@OperationLog
@ApiOperation("导出岗位数据")
@GetMapping(value = "/download")
@PreAuthorize("@el.check('job:list')")
@@ -52,8 +54,8 @@ public class SystemJobController {
systemJobService.exportJobXlsx(response, args);
}
@ApiOperation("查询岗位")
@PostMapping(value = "/queryAllEnableJob")
@ApiOperation("分页查询岗位")
@PostMapping(value = "/searchJob")
@PreAuthorize("@el.check('job:list','user:list')")
public ResponseEntity<KitPageResult<SystemJobTb>> queryJobByArgs(
@Validated @RequestBody KitPageArgs<SystemQueryJobArgs> pageArgs) {
@@ -61,14 +63,7 @@ public class SystemJobController {
return ResponseEntity.ok(systemJobService.searchJobByArgs(pageArgs.getArgs(), page));
}
@ApiOperation("查询岗位")
@PostMapping
@PreAuthorize("@el.check('job:list','user:list')")
public ResponseEntity<KitPageResult<SystemJobTb>> queryJobByCrud(
@Validated @RequestBody KitPageArgs<SystemQueryJobArgs> args) {
return queryJobByArgs(args);
}
@OperationLog
@ApiOperation("新增岗位")
@PostMapping(value = "/saveJob")
@PreAuthorize("@el.check('job:add')")
@@ -77,18 +72,20 @@ public class SystemJobController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("修改岗位")
@PostMapping(value = "/modifyJobById")
@PostMapping(value = "/updateJobById")
@PreAuthorize("@el.check('job:edit')")
public ResponseEntity<Void> modifyJobById(@Validated(SystemJobTb.Update.class) @RequestBody SystemJobTb args) {
public ResponseEntity<Void> updateJobById(@Validated(SystemJobTb.Update.class) @RequestBody SystemJobTb args) {
systemJobService.updateJobById(args);
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("删除岗位")
@PostMapping(value = "/removeJobByIds")
@PostMapping(value = "/deleteJobByIds")
@PreAuthorize("@el.check('job:del')")
public ResponseEntity<Void> removeJobByIds(@RequestBody Set<Long> ids) {
public ResponseEntity<Void> deleteJobByIds(@RequestBody Set<Long> ids) {
systemJobService.deleteJobByIds(ids);
return ResponseEntity.ok(null);
}
@@ -19,6 +19,7 @@ import cn.odboy.base.KitPageArgs;
import cn.odboy.base.KitPageResult;
import cn.odboy.system.dal.dataobject.SystemLocalStorageTb;
import cn.odboy.system.dal.model.SystemQueryStorageArgs;
import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.service.SystemLocalStorageService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
@@ -46,7 +47,7 @@ public class SystemLocalStorageController {
private SystemLocalStorageService localStorageService;
@ApiOperation("查询文件")
@PostMapping
@PostMapping(value = "/searchLocalStorage")
@PreAuthorize("@el.check('storage:list')")
public ResponseEntity<KitPageResult<SystemLocalStorageTb>> queryLocalStorage(
@Validated @RequestBody KitPageArgs<SystemQueryStorageArgs> pageArgs) {
@@ -54,13 +55,15 @@ public class SystemLocalStorageController {
return ResponseEntity.ok(localStorageService.searchLocalStorage(pageArgs.getArgs(), page));
}
@ApiOperation("导出数据")
@OperationLog
@ApiOperation("导出本地存储记录数据")
@GetMapping(value = "/download")
@PreAuthorize("@el.check('storage:list')")
public void exportFile(HttpServletResponse response, SystemQueryStorageArgs args) throws IOException {
localStorageService.exportLocalStorageXlsx(response, args);
}
@OperationLog
@ApiOperation("上传文件")
@PostMapping(value = "/uploadFile")
@PreAuthorize("@el.check('storage:add')")
@@ -69,6 +72,7 @@ public class SystemLocalStorageController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("上传图片")
@PostMapping("/uploadPicture")
public ResponseEntity<SystemLocalStorageTb> uploadPicture(@RequestParam MultipartFile file) {
@@ -76,16 +80,18 @@ public class SystemLocalStorageController {
return ResponseEntity.ok(localStorage);
}
@OperationLog
@ApiOperation("修改文件")
@PostMapping(value = "/modifyLocalStorageById")
@PostMapping(value = "/updateLocalStorageById")
@PreAuthorize("@el.check('storage:edit')")
public ResponseEntity<Void> modifyLocalStorageById(@Validated @RequestBody SystemLocalStorageTb args) {
public ResponseEntity<Void> updateLocalStorageById(@Validated @RequestBody SystemLocalStorageTb args) {
localStorageService.updateLocalStorageById(args);
return ResponseEntity.ok(null);
}
@ApiOperation("多选删除")
@PostMapping(value = "/removeFileByIds")
@OperationLog
@ApiOperation("删除文件")
@PostMapping(value = "/deleteFileByIds")
public ResponseEntity<Void> deleteFileByIds(@RequestBody Long[] ids) {
localStorageService.deleteFileByIds(ids);
return ResponseEntity.ok(null);
@@ -21,6 +21,7 @@ import cn.odboy.framework.exception.BadRequestException;
import cn.odboy.system.dal.dataobject.SystemMenuTb;
import cn.odboy.system.dal.model.SystemMenuVo;
import cn.odboy.system.dal.model.SystemQueryMenuArgs;
import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.service.SystemMenuService;
import cn.odboy.util.KitPageUtil;
import io.swagger.annotations.Api;
@@ -47,6 +48,7 @@ public class SystemMenuController {
@Autowired
private SystemMenuService systemMenuService;
@OperationLog
@ApiOperation("导出菜单数据")
@GetMapping(value = "/download")
@PreAuthorize("@el.check('menu:list')")
@@ -62,30 +64,22 @@ public class SystemMenuController {
}
@ApiOperation("返回全部的菜单")
@PostMapping(value = "/queryMenuListByPid")
@PostMapping(value = "/listMenuByPid")
@PreAuthorize("@el.check('menu:list','roles:list')")
public ResponseEntity<List<SystemMenuTb>> queryMenuListByPid(@RequestParam Long pid) {
public ResponseEntity<List<SystemMenuTb>> listMenuByPid(@RequestParam Long pid) {
List<SystemMenuTb> systemMenuTbs = systemMenuService.listMenuByPid(pid);
return ResponseEntity.ok(systemMenuTbs);
}
@ApiOperation("根据菜单ID返回所有子节点ID, 包含自身ID")
@PostMapping(value = "/queryChildMenuSet")
@PostMapping(value = "/listChildMenuSetByMenuId")
@PreAuthorize("@el.check('menu:list','roles:list')")
public ResponseEntity<Set<Long>> queryChildMenuSet(@RequestParam Long id) {
public ResponseEntity<Set<Long>> listChildMenuSetByMenuId(@RequestParam Long id) {
Set<Long> ids = systemMenuService.listChildMenuSetByMenuId(id);
return ResponseEntity.ok(ids);
}
@PostMapping
@ApiOperation("查询菜单")
@PreAuthorize("@el.check('menu:list')")
public ResponseEntity<KitPageResult<SystemMenuTb>> queryAllMenuByCrud(
@Validated @RequestBody KitPageArgs<SystemQueryMenuArgs> args) throws Exception {
return queryAllMenu(args);
}
@PostMapping(value = "/queryMenuByArgs")
@PostMapping(value = "/searchMenu")
@ApiOperation("查询菜单")
@PreAuthorize("@el.check('menu:list')")
public ResponseEntity<KitPageResult<SystemMenuTb>> queryAllMenu(
@@ -102,6 +96,7 @@ public class SystemMenuController {
return ResponseEntity.ok(systemMenuTbs);
}
@OperationLog
@ApiOperation("新增菜单")
@PostMapping(value = "/saveMenu")
@PreAuthorize("@el.check('menu:add')")
@@ -113,18 +108,20 @@ public class SystemMenuController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("修改菜单")
@PostMapping(value = "/modifyMenuById")
@PostMapping(value = "/updateMenuById")
@PreAuthorize("@el.check('menu:edit')")
public ResponseEntity<Void> modifyMenuById(@Validated(SystemMenuTb.Update.class) @RequestBody SystemMenuTb args) {
public ResponseEntity<Void> updateMenuById(@Validated(SystemMenuTb.Update.class) @RequestBody SystemMenuTb args) {
systemMenuService.updateMenuById(args);
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("删除菜单")
@PostMapping(value = "/removeMenuByIds")
@PostMapping(value = "/deleteMenuByIds")
@PreAuthorize("@el.check('menu:del')")
public ResponseEntity<Void> removeMenuByIds(@RequestBody Set<Long> ids) {
public ResponseEntity<Void> deleteMenuByIds(@RequestBody Set<Long> ids) {
systemMenuService.deleteMenuByIds(ids);
return ResponseEntity.ok(null);
}
@@ -15,6 +15,7 @@
*/
package cn.odboy.system.controller;
import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.service.SystemMonitorService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -34,10 +35,11 @@ public class SystemMonitorController {
@Autowired
private SystemMonitorService systemMonitorService;
@PostMapping(value = "/queryServerMonitorInfo")
@OperationLog
@PostMapping(value = "/getServerMonitorInfo")
@ApiOperation("查询服务监控")
@PreAuthorize("@el.check('monitor:list')")
public ResponseEntity<Map<String, Object>> queryServerMonitorInfo() {
public ResponseEntity<Map<String, Object>> getServerMonitorInfo() {
return ResponseEntity.ok(systemMonitorService.getServerMonitorInfo());
}
}
@@ -19,6 +19,7 @@ import cn.odboy.base.KitPageArgs;
import cn.odboy.base.KitPageResult;
import cn.odboy.system.dal.model.SystemUserOnlineVo;
import cn.odboy.system.dal.redis.SystemUserOnlineInfoDAO;
import cn.odboy.system.framework.operalog.OperationLog;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
@@ -43,23 +44,26 @@ public class SystemOnlineController {
@Autowired
private SystemUserOnlineInfoDAO systemUserOnlineInfoDAO;
@OperationLog
@ApiOperation("查询在线用户")
@PostMapping
@PostMapping(value = "/searchOnlineUser")
@PreAuthorize("@el.check()")
public ResponseEntity<KitPageResult<SystemUserOnlineVo>> queryOnlineUser(
@Validated @RequestBody KitPageArgs<SystemUserOnlineVo> pageArgs) {
IPage<SystemUserOnlineVo> page = new Page<>(pageArgs.getPage(), pageArgs.getSize());
return ResponseEntity.ok(systemUserOnlineInfoDAO.queryUserOnlineModelPage(pageArgs.getArgs(), page));
return ResponseEntity.ok(systemUserOnlineInfoDAO.searchOnlineUser(pageArgs.getArgs(), page));
}
@ApiOperation("导出数据")
@OperationLog
@ApiOperation("导出在线用户数据")
@GetMapping(value = "/download")
@PreAuthorize("@el.check()")
public void exportOnlineUser(HttpServletResponse response, String username) {
systemUserOnlineInfoDAO.exportOnlineUserXlsx(response, username);
}
@ApiOperation("踢出用户")
@OperationLog
@ApiOperation("踢出在线用户")
@PostMapping(value = "/kickOutUser")
@PreAuthorize("@el.check()")
public ResponseEntity<Void> kickOutUser(@RequestBody Set<String> keys) throws Exception {
@@ -20,6 +20,7 @@ import cn.odboy.base.KitPageResult;
import cn.odboy.system.dal.dataobject.SystemOssStorageTb;
import cn.odboy.system.dal.model.SystemOssStorageVo;
import cn.odboy.system.dal.model.SystemQueryStorageArgs;
import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.service.SystemOssStorageService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
@@ -49,7 +50,7 @@ public class SystemOssStorageController {
private SystemOssStorageService systemOssStorageService;
@ApiOperation("查询文件")
@PostMapping
@PostMapping(value = "/searchOssStorage")
@PreAuthorize("@el.check('storage:list')")
public ResponseEntity<KitPageResult<SystemOssStorageVo>> queryOssStorage(
@Validated @RequestBody KitPageArgs<SystemQueryStorageArgs> pageArgs) {
@@ -57,14 +58,16 @@ public class SystemOssStorageController {
return ResponseEntity.ok(systemOssStorageService.searchOssStorage(pageArgs.getArgs(), page));
}
@ApiOperation("导出数据")
@OperationLog
@ApiOperation("导出OSS存储记录数据")
@GetMapping(value = "/download")
@PreAuthorize("@el.check('storage:list')")
public void exportFile(HttpServletResponse response, SystemQueryStorageArgs args) throws IOException {
systemOssStorageService.exportOssStorageXlsx(response, args);
}
@ApiOperation("上传文件")
@OperationLog
@ApiOperation("上传文件到OSS")
@PostMapping(value = "/uploadFile")
@PreAuthorize("@el.check('storage:add')")
public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {
@@ -72,9 +75,10 @@ public class SystemOssStorageController {
return ResponseEntity.ok(fileUrl);
}
@ApiOperation("多选删除")
@PostMapping(value = "/removeFileByIds")
public ResponseEntity<Void> removeFileByIds(@RequestBody Long[] ids) {
@OperationLog
@ApiOperation("从OSS删除文件")
@PostMapping(value = "/deleteFileByIds")
public ResponseEntity<Void> deleteFileByIds(@RequestBody Long[] ids) {
systemOssStorageService.deleteFileByIds(ids);
return ResponseEntity.ok(null);
}
@@ -21,6 +21,7 @@ import cn.odboy.system.dal.dataobject.SystemQuartzJobTb;
import cn.odboy.system.dal.dataobject.SystemQuartzLogTb;
import cn.odboy.system.dal.model.SystemQueryQuartzJobArgs;
import cn.odboy.system.dal.model.SystemUpdateQuartzJobArgs;
import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.service.SystemQuartzJobService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
@@ -35,7 +36,6 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -50,7 +50,7 @@ public class SystemQuartzJobController {
private SystemQuartzJobService systemQuartzJobService;
@ApiOperation("查询定时任务")
@PostMapping
@PostMapping(value = "/searchQuartzJob")
@PreAuthorize("@el.check('quartzJob:list')")
public ResponseEntity<KitPageResult<SystemQuartzJobTb>> queryQuartzJobByCrud(
@Validated @RequestBody KitPageArgs<SystemQueryQuartzJobArgs> pageArgs) {
@@ -58,28 +58,31 @@ public class SystemQuartzJobController {
return ResponseEntity.ok(systemQuartzJobService.searchQuartzJobByArgs(pageArgs.getArgs(), page));
}
@ApiOperation("导出任务数据")
@OperationLog
@ApiOperation("导出定时任务数据")
@GetMapping(value = "/download")
@PreAuthorize("@el.check('quartzJob:list')")
public void exportQuartzJob(HttpServletResponse response, SystemQueryQuartzJobArgs args) {
systemQuartzJobService.exportQuartzJobXlsx(response, args);
}
@ApiOperation("导出日志数据")
@OperationLog
@ApiOperation("导出定时任务日志数据")
@GetMapping(value = "/logs/download")
@PreAuthorize("@el.check('quartzJob:list')")
public void exportQuartzJobLog(HttpServletResponse response, SystemQueryQuartzJobArgs args) {
systemQuartzJobService.exportQuartzLogXlsx(response, args);
}
@ApiOperation("查询任务执行日志")
@PostMapping(value = "/logs")
@ApiOperation("查询定时任务执行日志")
@PostMapping(value = "/searchQuartzLog")
@PreAuthorize("@el.check('quartzJob:list')")
public ResponseEntity<KitPageResult<SystemQuartzLogTb>> queryQuartzJobLog(SystemQueryQuartzJobArgs args) {
Page<SystemQuartzLogTb> page = new Page<>(args.getPage(), args.getSize());
return ResponseEntity.ok(systemQuartzJobService.searchQuartzLogByArgs(args, page));
}
@OperationLog
@ApiOperation("新增定时任务")
@PostMapping(value = "/createQuartzJob")
@PreAuthorize("@el.check('quartzJob:add')")
@@ -88,8 +91,9 @@ public class SystemQuartzJobController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("修改定时任务")
@PutMapping
@PostMapping(value = "/updateQuartzJobResumeCron")
@PreAuthorize("@el.check('quartzJob:edit')")
public ResponseEntity<Void> updateQuartzJob(
@Validated(SystemQuartzJobTb.Update.class) @RequestBody SystemUpdateQuartzJobArgs args) {
@@ -97,6 +101,7 @@ public class SystemQuartzJobController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("更改定时任务状态")
@PostMapping(value = "/switchQuartzJobStatus/{id}")
@PreAuthorize("@el.check('quartzJob:edit')")
@@ -105,6 +110,7 @@ public class SystemQuartzJobController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("执行定时任务")
@PostMapping(value = "/startQuartzJob/{id}")
@PreAuthorize("@el.check('quartzJob:edit')")
@@ -113,10 +119,11 @@ public class SystemQuartzJobController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("删除定时任务")
@PostMapping(value = "/removeJobByIds")
@PostMapping(value = "/deleteJobByIds")
@PreAuthorize("@el.check('quartzJob:del')")
public ResponseEntity<Void> removeJobByIds(@RequestBody Set<Long> ids) {
public ResponseEntity<Void> deleteJobByIds(@RequestBody Set<Long> ids) {
systemQuartzJobService.deleteJobByIds(ids);
return ResponseEntity.ok(null);
}
@@ -22,6 +22,7 @@ import cn.odboy.system.dal.dataobject.SystemRoleTb;
import cn.odboy.system.dal.model.SystemCreateRoleArgs;
import cn.odboy.system.dal.model.SystemQueryRoleArgs;
import cn.odboy.system.dal.model.SystemRoleVo;
import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.service.SystemRoleService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
@@ -49,9 +50,9 @@ public class SystemRoleController {
private SystemRoleService systemRoleService;
@ApiOperation("获取单个role")
@PostMapping(value = "/queryRoleById")
@PostMapping(value = "/getRoleById")
@PreAuthorize("@el.check('roles:list')")
public ResponseEntity<SystemRoleVo> queryRoleById(@RequestBody SystemRoleTb args) {
public ResponseEntity<SystemRoleVo> getRoleById(@RequestBody SystemRoleTb args) {
return ResponseEntity.ok(systemRoleService.getRoleById(args.getId()));
}
@@ -63,14 +64,14 @@ public class SystemRoleController {
}
@ApiOperation("返回全部的角色")
@PostMapping(value = "/queryRoleList")
@PostMapping(value = "/listAllRole")
@PreAuthorize("@el.check('roles:list','user:add','user:edit')")
public ResponseEntity<List<SystemRoleTb>> queryRoleList() {
public ResponseEntity<List<SystemRoleTb>> listAllRole() {
return ResponseEntity.ok(systemRoleService.listAllRole());
}
@ApiOperation("查询角色")
@PostMapping
@PostMapping(value = "/searchRole")
@PreAuthorize("@el.check('roles:list')")
public ResponseEntity<KitPageResult<SystemRoleVo>> queryRoleByArgs(
@Validated @RequestBody KitPageArgs<SystemQueryRoleArgs> pageArgs) {
@@ -79,11 +80,12 @@ public class SystemRoleController {
}
@ApiOperation("获取用户级别")
@PostMapping(value = "/queryRoleLevel")
public ResponseEntity<Dict> queryRoleLevel() {
return ResponseEntity.ok(systemRoleService.getRoleLevel());
@PostMapping(value = "/getCurrentUserRoleLevel")
public ResponseEntity<Dict> getCurrentUserRoleLevel() {
return ResponseEntity.ok(systemRoleService.getCurrentUserRoleLevel());
}
@OperationLog
@ApiOperation("新增角色")
@PostMapping(value = "/saveRole")
@PreAuthorize("@el.check('roles:add')")
@@ -92,26 +94,29 @@ public class SystemRoleController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("修改角色")
@PostMapping(value = "/modifyRoleById")
@PostMapping(value = "/updateRoleById")
@PreAuthorize("@el.check('roles:edit')")
public ResponseEntity<Void> modifyRoleById(@Validated(SystemRoleTb.Update.class) @RequestBody SystemRoleVo args) {
public ResponseEntity<Void> updateRoleById(@Validated(SystemRoleTb.Update.class) @RequestBody SystemRoleVo args) {
systemRoleService.updateRoleById(args);
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("修改角色菜单")
@PostMapping(value = "/modifyBindMenuById")
@PostMapping(value = "/updateBindMenuById")
@PreAuthorize("@el.check('roles:edit')")
public ResponseEntity<Void> modifyBindMenuById(@RequestBody SystemRoleVo args) {
public ResponseEntity<Void> updateBindMenuById(@RequestBody SystemRoleVo args) {
systemRoleService.updateBindMenuById(args);
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("删除角色")
@PostMapping(value = "/removeRoleByIds")
@PostMapping(value = "/deleteRoleByIds")
@PreAuthorize("@el.check('roles:del')")
public ResponseEntity<Void> removeRoleByIds(@RequestBody Set<Long> ids) {
public ResponseEntity<Void> deleteRoleByIds(@RequestBody Set<Long> ids) {
systemRoleService.deleteRoleByIds(ids);
return ResponseEntity.ok(null);
}
@@ -21,8 +21,11 @@ import cn.odboy.base.KitSelectOptionVo;
import cn.odboy.system.dal.dataobject.SystemUserTb;
import cn.odboy.system.dal.model.SystemQueryUserArgs;
import cn.odboy.system.dal.model.SystemUpdateUserPasswordArgs;
import cn.odboy.system.dal.model.SystemUserInfoVo;
import cn.odboy.system.dal.model.SystemUserVo;
import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.framework.permission.core.KitSecurityHelper;
import cn.odboy.system.service.SystemAuthService;
import cn.odboy.system.service.SystemUserService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
@@ -50,8 +53,10 @@ public class SystemUserController {
@Autowired
private SystemUserService systemUserService;
@Autowired
private SystemAuthService systemAuthService;
@OperationLog
@ApiOperation("导出用户数据")
@GetMapping(value = "/download")
@PreAuthorize("@el.check('user:list')")
@@ -60,7 +65,7 @@ public class SystemUserController {
}
@ApiOperation("查询用户")
@PostMapping
@PostMapping(value = "/aggregationSearchUser")
@PreAuthorize("@el.check('user:list')")
public ResponseEntity<KitPageResult<SystemUserVo>> queryUserByArgs(@Validated @RequestBody KitPageArgs<SystemQueryUserArgs> pageArgs) {
String currentUsername = KitSecurityHelper.getCurrentUsername();
@@ -68,6 +73,7 @@ public class SystemUserController {
return ResponseEntity.ok(systemUserService.aggregationSearchUserByArgs(page, pageArgs.getArgs(), currentUsername));
}
@OperationLog
@ApiOperation("新增用户")
@PostMapping(value = "/saveUser")
@PreAuthorize("@el.check('user:add')")
@@ -76,53 +82,60 @@ public class SystemUserController {
return ResponseEntity.ok(null);
}
@ApiOperation("修改用户")
@PostMapping(value = "/modifyUserById")
@OperationLog
@ApiOperation("修改用户数据")
@PostMapping(value = "/updateUserById")
@PreAuthorize("@el.check('user:edit')")
public ResponseEntity<Object> modifyUserById(@Validated(SystemUserTb.Update.class) @RequestBody SystemUserVo args) {
public ResponseEntity<Object> updateUserById(@Validated(SystemUserTb.Update.class) @RequestBody SystemUserVo args) {
systemUserService.updateUserById(args);
return ResponseEntity.ok(null);
}
@ApiOperation("修改用户:个人中心")
@PostMapping(value = "modifyUserCenterInfoById")
public ResponseEntity<Object> modifyUserCenterInfoById(@Validated(SystemUserTb.Update.class) @RequestBody SystemUserTb args) {
@OperationLog
@ApiOperation("修改个人中心信息")
@PostMapping(value = "/updateUserCenterInfoById")
public ResponseEntity<Object> updateUserCenterInfoById(@Validated(SystemUserTb.Update.class) @RequestBody SystemUserTb args) {
systemUserService.updateUserCenterInfoById(args);
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("删除用户")
@PostMapping(value = "/removeUserByIds")
@PostMapping(value = "/deleteUserByIds")
@PreAuthorize("@el.check('user:del')")
public ResponseEntity<Object> removeUserByIds(@RequestBody Set<Long> ids) {
systemUserService.removeUserByIds(ids);
public ResponseEntity<Object> deleteUserByIds(@RequestBody Set<Long> ids) {
systemUserService.deleteUserByIds(ids);
return ResponseEntity.ok(null);
}
@ApiOperation("修改密码")
@PostMapping(value = "/modifyUserPasswordByUsername")
public ResponseEntity<Object> modifyUserPasswordByUsername(@RequestBody SystemUpdateUserPasswordArgs passVo) throws Exception {
@OperationLog
@ApiOperation("修改用户密码")
@PostMapping(value = "/updateUserPasswordByUsername")
public ResponseEntity<Object> updateUserPasswordByUsername(@RequestBody SystemUpdateUserPasswordArgs passVo) throws Exception {
String currentUsername = KitSecurityHelper.getCurrentUsername();
systemUserService.updateUserPasswordByUsername(currentUsername, passVo);
return ResponseEntity.ok(null);
}
@ApiOperation("重置密码")
@OperationLog
@ApiOperation("重置用户密码")
@PostMapping(value = "/resetUserPasswordByIds")
public ResponseEntity<Object> resetUserPasswordByIds(@RequestBody Set<Long> ids) {
systemUserService.resetUserPasswordByIds(ids);
return ResponseEntity.ok(null);
}
@ApiOperation("修改头像")
@PostMapping(value = "/modifyUserAvatar")
public ResponseEntity<Object> modifyUserAvatar(@RequestParam MultipartFile avatar) {
@OperationLog
@ApiOperation("修改用户头像")
@PostMapping(value = "/updateUserAvatar")
public ResponseEntity<Object> updateUserAvatar(@RequestParam MultipartFile avatar) {
return ResponseEntity.ok(systemUserService.updateUserAvatar(avatar));
}
@ApiOperation("修改邮箱")
@PostMapping(value = "/modifyUserEmailByUsername/{code}")
public ResponseEntity<Object> modifyUserEmailByUsername(@PathVariable String code, @RequestBody SystemUserTb args) throws Exception {
@OperationLog
@ApiOperation("修改用户邮箱")
@PostMapping(value = "/updateUserEmailByUsername/{code}")
public ResponseEntity<Object> updateUserEmailByUsername(@PathVariable String code, @RequestBody SystemUserTb args) throws Exception {
String currentUsername = KitSecurityHelper.getCurrentUsername();
systemUserService.updateUserEmailByUsername(currentUsername, args, code);
return ResponseEntity.ok(null);
@@ -135,4 +148,11 @@ public class SystemUserController {
List<KitSelectOptionVo> collect = systemUserService.queryUserMetadataOptions(args);
return ResponseEntity.ok(collect);
}
@ApiOperation("获取用户信息")
@PostMapping(value = "/getCurrentUserInfo")
public ResponseEntity<SystemUserInfoVo> getUserInfo() {
SystemUserInfoVo userInfoVo = systemAuthService.getCurrentUserInfoVo();
return ResponseEntity.ok(userInfoVo);
}
}
@@ -22,11 +22,11 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
@@ -42,8 +42,7 @@ public class SystemDeptTb extends KitBaseUserTimeTb {
@TableField(exist = false)
@JSONField(serialize = false)
@ApiModelProperty(value = "角色")
private Set<SystemRoleTb>
roles;
private Set<SystemRoleTb> roles;
@TableField(exist = false)
@ApiModelProperty(value = "子部门")
private List<SystemDeptTb> children;
@@ -20,9 +20,9 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import java.util.Objects;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import java.util.Objects;
import lombok.Getter;
import lombok.Setter;
@@ -22,10 +22,10 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import jakarta.validation.constraints.NotNull;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.Setter;
@@ -23,9 +23,9 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import java.util.Objects;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import java.util.Objects;
import lombok.Getter;
import lombok.Setter;
@@ -21,11 +21,11 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import java.util.Date;
import java.util.Objects;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import java.util.Date;
import java.util.Objects;
import lombok.Getter;
import lombok.Setter;
@@ -121,7 +121,7 @@ public class SystemUserOnlineInfoDAO {
* @param pageable /
* @return /
*/
public KitPageResult<SystemUserOnlineVo> queryUserOnlineModelPage(SystemUserOnlineVo onlineVo,
public KitPageResult<SystemUserOnlineVo> searchOnlineUser(SystemUserOnlineVo onlineVo,
IPage<SystemUserOnlineVo> pageable) {
String username = null;
if (onlineVo != null) {
@@ -0,0 +1,38 @@
/*
* Copyright 2021-2025 Odboy
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.odboy.system.framework.operalog;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 捕捉操作日志
*
* @author odboy
* @date 2025-05-12
*/
@Inherited
@Documented
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface OperationLog {
String bizName() default "";
}
@@ -0,0 +1,120 @@
/*
* Copyright 2021-2025 Odboy
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.odboy.system.framework.operalog;
import cn.hutool.core.date.TimeInterval;
import cn.hutool.core.exceptions.ExceptionUtil;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.StrUtil;
import cn.odboy.framework.context.KitRequestHolder;
import cn.odboy.system.dal.dataobject.SystemOperationLogTb;
import cn.odboy.system.dal.mysql.SystemOperationLogMapper;
import cn.odboy.system.framework.permission.core.KitSecurityHelper;
import cn.odboy.util.KitBrowserUtil;
import cn.odboy.util.KitIPUtil;
import com.alibaba.fastjson2.JSON;
import io.swagger.annotations.ApiOperation;
import java.lang.reflect.Method;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* 捕捉操作日志
*
* @author odboy
* @date 2025-05-12
*/
@Slf4j
@Aspect
@Component
public class OperationLogAspect {
@Autowired
private SystemOperationLogMapper systemOperationLogMapper;
@Around("@annotation(operationLog)")
public Object operationLogCatch(ProceedingJoinPoint joinPoint, OperationLog operationLog) throws Throwable {
return handleLog(joinPoint, operationLog);
}
private Object handleLog(ProceedingJoinPoint joinPoint, OperationLog annotation) throws Throwable {
TimeInterval timeInterval = new TimeInterval();
try {
Object result = joinPoint.proceed();
SystemOperationLogTb record = getOperationLogTb(joinPoint, annotation, timeInterval);
ThreadUtil.execAsync(() -> {
try {
systemOperationLogMapper.insert(record);
} catch (Exception e) {
// 忽略
}
});
return result;
} catch (Throwable exception) {
SystemOperationLogTb record = getOperationLogTb(joinPoint, annotation, timeInterval);
record.setExceptionDetail(ExceptionUtil.stacktraceToString(exception));
ThreadUtil.execAsync(() -> {
try {
systemOperationLogMapper.insert(record);
} catch (Exception e) {
// 忽略
}
});
throw exception;
}
}
private SystemOperationLogTb getOperationLogTb(ProceedingJoinPoint joinPoint, OperationLog annotation,
TimeInterval timeInterval) {
long executeTime = timeInterval.intervalMs();
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
String bizName = annotation.bizName();
if (StrUtil.isBlank(bizName)) {
Method method = signature.getMethod();
ApiOperation apiOperation = method.getAnnotation(ApiOperation.class);
if (apiOperation != null) {
bizName = apiOperation.value();
}
}
if (StrUtil.isBlank(bizName)) {
bizName = "默认业务";
}
String method = joinPoint.getTarget().getClass().getName() + "." + signature.getName() + "()";
Object[] args = joinPoint.getArgs();
String params = JSON.toJSONString(args);
HttpServletRequest request = KitRequestHolder.getHttpServletRequest();
String requestIp = KitBrowserUtil.getIp(request);
String browserInfo = KitBrowserUtil.getVersion(request);
String address = KitIPUtil.getCityInfo(requestIp);
String username = KitSecurityHelper.getCurrentUsername();
SystemOperationLogTb record = new SystemOperationLogTb();
record.setBizName(bizName);
record.setMethod(method);
record.setParams(params);
record.setRequestIp(requestIp);
record.setExecuteTime(executeTime);
record.setUsername(username);
record.setAddress(address);
record.setBrowserInfo(browserInfo);
return record;
}
}
@@ -0,0 +1,122 @@
/*
* Copyright 2021-2025 Odboy
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.odboy.system.framework.operalog;
import cn.hutool.core.date.TimeInterval;
import cn.hutool.core.exceptions.ExceptionUtil;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.StrUtil;
import cn.odboy.framework.context.KitRequestHolder;
import cn.odboy.system.dal.dataobject.SystemOperationLogTb;
import cn.odboy.system.dal.mysql.SystemOperationLogMapper;
import cn.odboy.system.framework.permission.core.KitSecurityHelper;
import cn.odboy.util.KitBrowserUtil;
import cn.odboy.util.KitIPUtil;
import com.alibaba.fastjson2.JSON;
import io.swagger.annotations.ApiOperation;
import java.lang.reflect.Method;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* 捕捉操作日志
*
* @author odboy
* @date 2025-05-12
*/
@Slf4j
@Aspect
@Component
public class SystemOperationLogAspect {
@Autowired
private SystemOperationLogMapper systemOperationLogMapper;
@Around("@annotation(operationLog)")
public Object operationLogCatch(ProceedingJoinPoint joinPoint, OperationLog operationLog) throws Throwable {
return handleLog(joinPoint, operationLog);
}
private Object handleLog(ProceedingJoinPoint joinPoint, OperationLog annotation) throws Throwable {
TimeInterval timeInterval = new TimeInterval();
try {
Object result = joinPoint.proceed();
SystemOperationLogTb record = getOperationLogTb(joinPoint, annotation, timeInterval);
ThreadUtil.execAsync(() -> {
try {
systemOperationLogMapper.insert(record);
} catch (Exception e) {
// log.error("保存审计日志失败", e);
// 忽略
}
});
return result;
} catch (Throwable exception) {
SystemOperationLogTb record = getOperationLogTb(joinPoint, annotation, timeInterval);
record.setExceptionDetail(ExceptionUtil.stacktraceToString(exception));
ThreadUtil.execAsync(() -> {
try {
systemOperationLogMapper.insert(record);
} catch (Exception e) {
// log.error("保存审计日志失败", e);
// 忽略
}
});
throw exception;
}
}
private SystemOperationLogTb getOperationLogTb(ProceedingJoinPoint joinPoint, OperationLog annotation,
TimeInterval timeInterval) {
long executeTime = timeInterval.intervalMs();
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
String bizName = annotation.bizName();
if (StrUtil.isBlank(bizName)) {
Method method = signature.getMethod();
ApiOperation apiOperation = method.getAnnotation(ApiOperation.class);
if (apiOperation != null) {
bizName = apiOperation.value();
}
}
if (StrUtil.isBlank(bizName)) {
bizName = "默认业务";
}
String method = joinPoint.getTarget().getClass().getName() + "." + signature.getName() + "()";
Object[] args = joinPoint.getArgs();
String params = JSON.toJSONString(args);
HttpServletRequest request = KitRequestHolder.getHttpServletRequest();
String requestIp = KitBrowserUtil.getIp(request);
String browserInfo = KitBrowserUtil.getVersion(request);
String address = KitIPUtil.getCityInfo(requestIp);
String username = KitSecurityHelper.getCurrentUsername();
SystemOperationLogTb record = new SystemOperationLogTb();
record.setBizName(bizName);
record.setMethod(method);
record.setParams(params);
record.setRequestIp(requestIp);
record.setExecuteTime(executeTime);
record.setUsername(username);
record.setAddress(address);
record.setBrowserInfo(browserInfo);
return record;
}
}
@@ -78,7 +78,7 @@ public class SystemDeptService {
* @param args /
*/
@Transactional(rollbackFor = Exception.class)
public void updateDept(SystemDeptTb args) {
public void updateDeptById(SystemDeptTb args) {
// 旧的部门
Long oldPid = this.getDeptById(args.getId()).getPid();
Long newPid = args.getPid();
@@ -365,7 +365,7 @@ public class SystemDeptService {
return depts;
}
public List<SystemProductLineVo> queryDeptSelectDataSource() {
public List<SystemProductLineVo> listDeptSelectDataSource() {
List<SystemDeptTb> depts = this.listEnabledDepts();
return buildDeptSelectOptions(depts);
}
@@ -414,7 +414,7 @@ public class SystemDeptService {
}
}
public List<SystemProductLineTreeVo> queryDeptSelectProDataSource() {
public List<SystemProductLineTreeVo> listDeptSelectProDataSource() {
List<SystemDeptTb> depts = this.listEnabledDepts();
// 获取所有部门并按父子关系组织
Map<Long, SystemDeptTb> deptMap =
@@ -255,7 +255,7 @@ public class SystemRoleService {
return systemUserRoleService.convertToRoleVo(roleTb);
}
public Dict getRoleLevel() {
public Dict getCurrentUserRoleLevel() {
return Dict.create().set("level", checkRoleLevels(null));
}
@@ -209,7 +209,7 @@ public class SystemUserService {
* @param ids /
*/
@Transactional(rollbackFor = Exception.class)
public void removeUserByIds(Set<Long> ids) {
public void deleteUserByIds(Set<Long> ids) {
Long currentUserId = KitSecurityHelper.getCurrentUserId();
// 校验权限
for (Long id : ids) {
@@ -16,7 +16,6 @@
package cn.odboy.system.controller;
import cn.odboy.annotation.AnonymousPostMapping;
import cn.odboy.system.dal.model.SystemUserInfoVo;
import cn.odboy.system.dal.model.SystemUserLoginArgs;
import cn.odboy.system.service.SystemAuthService;
import io.swagger.annotations.Api;
@@ -27,7 +26,6 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -17,6 +17,7 @@ package cn.odboy.system.controller;
import cn.odboy.system.constant.SystemCaptchaBizEnum;
import cn.odboy.system.dal.model.SystemCheckEmailCaptchaArgs;
import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.service.SystemEmailService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -37,6 +38,7 @@ public class SystemCaptchaController {
@Autowired
private SystemEmailService systemEmailService;
@OperationLog
@ApiOperation("重置邮箱, 发送验证码")
@PostMapping(value = "/sendResetEmailCode")
public ResponseEntity<Void> sendResetEmailCode(@RequestParam String email) {
@@ -44,6 +46,7 @@ public class SystemCaptchaController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("重置密码,发送验证码")
@PostMapping(value = "/sendResetPasswordCode")
public ResponseEntity<Void> sendResetPasswordCode(@RequestParam String email) {
@@ -20,6 +20,7 @@ import cn.odboy.base.KitPageResult;
import cn.odboy.system.dal.dataobject.SystemDeptTb;
import cn.odboy.system.dal.model.SystemCreateDeptArgs;
import cn.odboy.system.dal.model.SystemQueryDeptArgs;
import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.service.SystemDeptService;
import cn.odboy.util.KitPageUtil;
import io.swagger.annotations.Api;
@@ -46,6 +47,7 @@ public class SystemDeptController {
@Autowired
private SystemDeptService systemDeptService;
@OperationLog
@ApiOperation("导出部门数据")
@GetMapping(value = "/download")
@PreAuthorize("@el.check('dept:list')")
@@ -70,6 +72,7 @@ public class SystemDeptController {
return ResponseEntity.ok(systemDeptService.searchDeptTree(ids, exclude));
}
@OperationLog
@ApiOperation("新增部门")
@PostMapping(value = "/saveDept")
@PreAuthorize("@el.check('dept:add')")
@@ -78,6 +81,7 @@ public class SystemDeptController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("修改部门")
@PostMapping(value = "/updateDeptById")
@PreAuthorize("@el.check('dept:edit')")
@@ -86,6 +90,7 @@ public class SystemDeptController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("删除部门")
@PostMapping(value = "/deleteDeptByIds")
@PreAuthorize("@el.check('dept:del')")
@@ -20,6 +20,7 @@ import cn.odboy.base.KitPageResult;
import cn.odboy.system.dal.dataobject.SystemDictTb;
import cn.odboy.system.dal.model.SystemCreateDictArgs;
import cn.odboy.system.dal.model.SystemQueryDictArgs;
import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.service.SystemDictService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
@@ -46,6 +47,7 @@ public class SystemDictController {
@Autowired
private SystemDictService systemDictService;
@OperationLog
@ApiOperation("导出字典数据")
@GetMapping(value = "/download")
@PreAuthorize("@el.check('dict:list')")
@@ -70,6 +72,7 @@ public class SystemDictController {
return ResponseEntity.ok(systemDictService.searchDict(pageArgs.getArgs(), page));
}
@OperationLog
@ApiOperation("新增字典")
@PostMapping(value = "/saveDict")
@PreAuthorize("@el.check('dict:add')")
@@ -78,6 +81,7 @@ public class SystemDictController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("修改字典")
@PostMapping(value = "/updateDictById")
@PreAuthorize("@el.check('dict:edit')")
@@ -86,6 +90,7 @@ public class SystemDictController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("删除字典")
@PostMapping(value = "/deleteDictByIds")
@PreAuthorize("@el.check('dict:del')")
@@ -21,6 +21,7 @@ import cn.odboy.system.dal.dataobject.SystemDictDetailTb;
import cn.odboy.system.dal.model.SystemCreateDictDetailArgs;
import cn.odboy.system.dal.model.SystemDictDetailVo;
import cn.odboy.system.dal.model.SystemQueryDictDetailArgs;
import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.service.SystemDictDetailService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
@@ -61,6 +62,7 @@ public class SystemDictDetailController {
return ResponseEntity.ok(dictMap);
}
@OperationLog
@ApiOperation("新增字典详情")
@PostMapping(value = "/saveDictDetail")
@PreAuthorize("@el.check('dict:add')")
@@ -69,6 +71,7 @@ public class SystemDictDetailController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("修改字典详情")
@PostMapping(value = "/updateDictDetailById")
@PreAuthorize("@el.check('dict:edit')")
@@ -78,6 +81,7 @@ public class SystemDictDetailController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("删除字典详情")
@PostMapping(value = "/deleteDictDetailById")
@PreAuthorize("@el.check('dict:del')")
@@ -17,6 +17,7 @@ package cn.odboy.system.controller;
import cn.odboy.system.dal.dataobject.SystemEmailConfigTb;
import cn.odboy.system.dal.model.SystemSendEmailArgs;
import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.service.SystemEmailService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -45,7 +46,8 @@ public class SystemEmailController {
return ResponseEntity.ok(systemEmailService.getLastEmailConfig());
}
@ApiOperation("配置邮件")
@OperationLog
@ApiOperation("修改邮箱配置")
@PostMapping(value = "/updateEmailConfigById")
public ResponseEntity<Void> updateEmailConfigById(@Validated @RequestBody SystemEmailConfigTb emailConfig)
throws Exception {
@@ -53,6 +55,7 @@ public class SystemEmailController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("发送邮件")
@PostMapping(value = "/send")
public ResponseEntity<Void> send(@Validated @RequestBody SystemSendEmailArgs sendEmailRequest) {
@@ -20,6 +20,7 @@ import cn.odboy.base.KitPageResult;
import cn.odboy.system.dal.dataobject.SystemJobTb;
import cn.odboy.system.dal.model.SystemCreateJobArgs;
import cn.odboy.system.dal.model.SystemQueryJobArgs;
import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.service.SystemJobService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
@@ -45,6 +46,7 @@ public class SystemJobController {
@Autowired
private SystemJobService systemJobService;
@OperationLog
@ApiOperation("导出岗位数据")
@GetMapping(value = "/download")
@PreAuthorize("@el.check('job:list')")
@@ -61,6 +63,7 @@ public class SystemJobController {
return ResponseEntity.ok(systemJobService.searchJobByArgs(pageArgs.getArgs(), page));
}
@OperationLog
@ApiOperation("新增岗位")
@PostMapping(value = "/saveJob")
@PreAuthorize("@el.check('job:add')")
@@ -69,6 +72,7 @@ public class SystemJobController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("修改岗位")
@PostMapping(value = "/updateJobById")
@PreAuthorize("@el.check('job:edit')")
@@ -77,6 +81,7 @@ public class SystemJobController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("删除岗位")
@PostMapping(value = "/deleteJobByIds")
@PreAuthorize("@el.check('job:del')")
@@ -19,6 +19,7 @@ import cn.odboy.base.KitPageArgs;
import cn.odboy.base.KitPageResult;
import cn.odboy.system.dal.dataobject.SystemLocalStorageTb;
import cn.odboy.system.dal.model.SystemQueryStorageArgs;
import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.service.SystemLocalStorageService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
@@ -54,13 +55,15 @@ public class SystemLocalStorageController {
return ResponseEntity.ok(localStorageService.searchLocalStorage(pageArgs.getArgs(), page));
}
@ApiOperation("导出数据")
@OperationLog
@ApiOperation("导出本地存储记录数据")
@GetMapping(value = "/download")
@PreAuthorize("@el.check('storage:list')")
public void exportFile(HttpServletResponse response, SystemQueryStorageArgs args) throws IOException {
localStorageService.exportLocalStorageXlsx(response, args);
}
@OperationLog
@ApiOperation("上传文件")
@PostMapping(value = "/uploadFile")
@PreAuthorize("@el.check('storage:add')")
@@ -69,6 +72,7 @@ public class SystemLocalStorageController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("上传图片")
@PostMapping("/uploadPicture")
public ResponseEntity<SystemLocalStorageTb> uploadPicture(@RequestParam MultipartFile file) {
@@ -76,6 +80,7 @@ public class SystemLocalStorageController {
return ResponseEntity.ok(localStorage);
}
@OperationLog
@ApiOperation("修改文件")
@PostMapping(value = "/updateLocalStorageById")
@PreAuthorize("@el.check('storage:edit')")
@@ -84,7 +89,8 @@ public class SystemLocalStorageController {
return ResponseEntity.ok(null);
}
@ApiOperation("多选删除")
@OperationLog
@ApiOperation("删除文件")
@PostMapping(value = "/deleteFileByIds")
public ResponseEntity<Void> deleteFileByIds(@RequestBody Long[] ids) {
localStorageService.deleteFileByIds(ids);
@@ -21,6 +21,7 @@ import cn.odboy.framework.exception.BadRequestException;
import cn.odboy.system.dal.dataobject.SystemMenuTb;
import cn.odboy.system.dal.model.SystemMenuVo;
import cn.odboy.system.dal.model.SystemQueryMenuArgs;
import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.service.SystemMenuService;
import cn.odboy.util.KitPageUtil;
import io.swagger.annotations.Api;
@@ -47,6 +48,7 @@ public class SystemMenuController {
@Autowired
private SystemMenuService systemMenuService;
@OperationLog
@ApiOperation("导出菜单数据")
@GetMapping(value = "/download")
@PreAuthorize("@el.check('menu:list')")
@@ -94,6 +96,7 @@ public class SystemMenuController {
return ResponseEntity.ok(systemMenuTbs);
}
@OperationLog
@ApiOperation("新增菜单")
@PostMapping(value = "/saveMenu")
@PreAuthorize("@el.check('menu:add')")
@@ -105,6 +108,7 @@ public class SystemMenuController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("修改菜单")
@PostMapping(value = "/updateMenuById")
@PreAuthorize("@el.check('menu:edit')")
@@ -113,6 +117,7 @@ public class SystemMenuController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("删除菜单")
@PostMapping(value = "/deleteMenuByIds")
@PreAuthorize("@el.check('menu:del')")
@@ -15,6 +15,7 @@
*/
package cn.odboy.system.controller;
import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.service.SystemMonitorService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -34,6 +35,7 @@ public class SystemMonitorController {
@Autowired
private SystemMonitorService systemMonitorService;
@OperationLog
@PostMapping(value = "/getServerMonitorInfo")
@ApiOperation("查询服务监控")
@PreAuthorize("@el.check('monitor:list')")
@@ -19,6 +19,7 @@ import cn.odboy.base.KitPageArgs;
import cn.odboy.base.KitPageResult;
import cn.odboy.system.dal.model.SystemUserOnlineVo;
import cn.odboy.system.dal.redis.SystemUserOnlineInfoDAO;
import cn.odboy.system.framework.operalog.OperationLog;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
@@ -43,6 +44,7 @@ public class SystemOnlineController {
@Autowired
private SystemUserOnlineInfoDAO systemUserOnlineInfoDAO;
@OperationLog
@ApiOperation("查询在线用户")
@PostMapping(value = "/searchOnlineUser")
@PreAuthorize("@el.check()")
@@ -52,14 +54,16 @@ public class SystemOnlineController {
return ResponseEntity.ok(systemUserOnlineInfoDAO.searchOnlineUser(pageArgs.getArgs(), page));
}
@ApiOperation("导出数据")
@OperationLog
@ApiOperation("导出在线用户数据")
@GetMapping(value = "/download")
@PreAuthorize("@el.check()")
public void exportOnlineUser(HttpServletResponse response, String username) {
systemUserOnlineInfoDAO.exportOnlineUserXlsx(response, username);
}
@ApiOperation("踢出用户")
@OperationLog
@ApiOperation("踢出在线用户")
@PostMapping(value = "/kickOutUser")
@PreAuthorize("@el.check()")
public ResponseEntity<Void> kickOutUser(@RequestBody Set<String> keys) throws Exception {
@@ -20,6 +20,7 @@ import cn.odboy.base.KitPageResult;
import cn.odboy.system.dal.dataobject.SystemOssStorageTb;
import cn.odboy.system.dal.model.SystemOssStorageVo;
import cn.odboy.system.dal.model.SystemQueryStorageArgs;
import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.service.SystemOssStorageService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
@@ -57,14 +58,16 @@ public class SystemOssStorageController {
return ResponseEntity.ok(systemOssStorageService.searchOssStorage(pageArgs.getArgs(), page));
}
@ApiOperation("导出数据")
@OperationLog
@ApiOperation("导出OSS存储记录数据")
@GetMapping(value = "/download")
@PreAuthorize("@el.check('storage:list')")
public void exportFile(HttpServletResponse response, SystemQueryStorageArgs args) throws IOException {
systemOssStorageService.exportOssStorageXlsx(response, args);
}
@ApiOperation("上传文件")
@OperationLog
@ApiOperation("上传文件到OSS")
@PostMapping(value = "/uploadFile")
@PreAuthorize("@el.check('storage:add')")
public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {
@@ -72,7 +75,8 @@ public class SystemOssStorageController {
return ResponseEntity.ok(fileUrl);
}
@ApiOperation("多选删除")
@OperationLog
@ApiOperation("从OSS删除文件")
@PostMapping(value = "/deleteFileByIds")
public ResponseEntity<Void> deleteFileByIds(@RequestBody Long[] ids) {
systemOssStorageService.deleteFileByIds(ids);
@@ -21,6 +21,7 @@ import cn.odboy.system.dal.dataobject.SystemQuartzJobTb;
import cn.odboy.system.dal.dataobject.SystemQuartzLogTb;
import cn.odboy.system.dal.model.SystemQueryQuartzJobArgs;
import cn.odboy.system.dal.model.SystemUpdateQuartzJobArgs;
import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.service.SystemQuartzJobService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
@@ -35,7 +36,6 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -58,21 +58,23 @@ public class SystemQuartzJobController {
return ResponseEntity.ok(systemQuartzJobService.searchQuartzJobByArgs(pageArgs.getArgs(), page));
}
@ApiOperation("导出任务数据")
@OperationLog
@ApiOperation("导出定时任务数据")
@GetMapping(value = "/download")
@PreAuthorize("@el.check('quartzJob:list')")
public void exportQuartzJob(HttpServletResponse response, SystemQueryQuartzJobArgs args) {
systemQuartzJobService.exportQuartzJobXlsx(response, args);
}
@ApiOperation("导出日志数据")
@OperationLog
@ApiOperation("导出定时任务日志数据")
@GetMapping(value = "/logs/download")
@PreAuthorize("@el.check('quartzJob:list')")
public void exportQuartzJobLog(HttpServletResponse response, SystemQueryQuartzJobArgs args) {
systemQuartzJobService.exportQuartzLogXlsx(response, args);
}
@ApiOperation("查询任务执行日志")
@ApiOperation("查询定时任务执行日志")
@PostMapping(value = "/searchQuartzLog")
@PreAuthorize("@el.check('quartzJob:list')")
public ResponseEntity<KitPageResult<SystemQuartzLogTb>> queryQuartzJobLog(SystemQueryQuartzJobArgs args) {
@@ -80,6 +82,7 @@ public class SystemQuartzJobController {
return ResponseEntity.ok(systemQuartzJobService.searchQuartzLogByArgs(args, page));
}
@OperationLog
@ApiOperation("新增定时任务")
@PostMapping(value = "/createQuartzJob")
@PreAuthorize("@el.check('quartzJob:add')")
@@ -88,6 +91,7 @@ public class SystemQuartzJobController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("修改定时任务")
@PostMapping(value = "/updateQuartzJobResumeCron")
@PreAuthorize("@el.check('quartzJob:edit')")
@@ -97,6 +101,7 @@ public class SystemQuartzJobController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("更改定时任务状态")
@PostMapping(value = "/switchQuartzJobStatus/{id}")
@PreAuthorize("@el.check('quartzJob:edit')")
@@ -105,6 +110,7 @@ public class SystemQuartzJobController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("执行定时任务")
@PostMapping(value = "/startQuartzJob/{id}")
@PreAuthorize("@el.check('quartzJob:edit')")
@@ -113,6 +119,7 @@ public class SystemQuartzJobController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("删除定时任务")
@PostMapping(value = "/deleteJobByIds")
@PreAuthorize("@el.check('quartzJob:del')")
@@ -22,6 +22,7 @@ import cn.odboy.system.dal.dataobject.SystemRoleTb;
import cn.odboy.system.dal.model.SystemCreateRoleArgs;
import cn.odboy.system.dal.model.SystemQueryRoleArgs;
import cn.odboy.system.dal.model.SystemRoleVo;
import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.service.SystemRoleService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
@@ -84,6 +85,7 @@ public class SystemRoleController {
return ResponseEntity.ok(systemRoleService.getCurrentUserRoleLevel());
}
@OperationLog
@ApiOperation("新增角色")
@PostMapping(value = "/saveRole")
@PreAuthorize("@el.check('roles:add')")
@@ -92,6 +94,7 @@ public class SystemRoleController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("修改角色")
@PostMapping(value = "/updateRoleById")
@PreAuthorize("@el.check('roles:edit')")
@@ -100,6 +103,7 @@ public class SystemRoleController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("修改角色菜单")
@PostMapping(value = "/updateBindMenuById")
@PreAuthorize("@el.check('roles:edit')")
@@ -108,6 +112,7 @@ public class SystemRoleController {
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("删除角色")
@PostMapping(value = "/deleteRoleByIds")
@PreAuthorize("@el.check('roles:del')")
@@ -23,6 +23,7 @@ import cn.odboy.system.dal.model.SystemQueryUserArgs;
import cn.odboy.system.dal.model.SystemUpdateUserPasswordArgs;
import cn.odboy.system.dal.model.SystemUserInfoVo;
import cn.odboy.system.dal.model.SystemUserVo;
import cn.odboy.system.framework.operalog.OperationLog;
import cn.odboy.system.framework.permission.core.KitSecurityHelper;
import cn.odboy.system.service.SystemAuthService;
import cn.odboy.system.service.SystemUserService;
@@ -55,7 +56,7 @@ public class SystemUserController {
@Autowired
private SystemAuthService systemAuthService;
@OperationLog
@ApiOperation("导出用户数据")
@GetMapping(value = "/download")
@PreAuthorize("@el.check('user:list')")
@@ -72,6 +73,7 @@ public class SystemUserController {
return ResponseEntity.ok(systemUserService.aggregationSearchUserByArgs(page, pageArgs.getArgs(), currentUsername));
}
@OperationLog
@ApiOperation("新增用户")
@PostMapping(value = "/saveUser")
@PreAuthorize("@el.check('user:add')")
@@ -80,7 +82,8 @@ public class SystemUserController {
return ResponseEntity.ok(null);
}
@ApiOperation("修改用户")
@OperationLog
@ApiOperation("修改用户数据")
@PostMapping(value = "/updateUserById")
@PreAuthorize("@el.check('user:edit')")
public ResponseEntity<Object> updateUserById(@Validated(SystemUserTb.Update.class) @RequestBody SystemUserVo args) {
@@ -88,13 +91,15 @@ public class SystemUserController {
return ResponseEntity.ok(null);
}
@ApiOperation("修改用户:个人中心")
@OperationLog
@ApiOperation("修改个人中心信息")
@PostMapping(value = "/updateUserCenterInfoById")
public ResponseEntity<Object> updateUserCenterInfoById(@Validated(SystemUserTb.Update.class) @RequestBody SystemUserTb args) {
systemUserService.updateUserCenterInfoById(args);
return ResponseEntity.ok(null);
}
@OperationLog
@ApiOperation("删除用户")
@PostMapping(value = "/deleteUserByIds")
@PreAuthorize("@el.check('user:del')")
@@ -103,7 +108,8 @@ public class SystemUserController {
return ResponseEntity.ok(null);
}
@ApiOperation("修改密码")
@OperationLog
@ApiOperation("修改用户密码")
@PostMapping(value = "/updateUserPasswordByUsername")
public ResponseEntity<Object> updateUserPasswordByUsername(@RequestBody SystemUpdateUserPasswordArgs passVo) throws Exception {
String currentUsername = KitSecurityHelper.getCurrentUsername();
@@ -111,20 +117,23 @@ public class SystemUserController {
return ResponseEntity.ok(null);
}
@ApiOperation("重置密码")
@OperationLog
@ApiOperation("重置用户密码")
@PostMapping(value = "/resetUserPasswordByIds")
public ResponseEntity<Object> resetUserPasswordByIds(@RequestBody Set<Long> ids) {
systemUserService.resetUserPasswordByIds(ids);
return ResponseEntity.ok(null);
}
@ApiOperation("修改头像")
@OperationLog
@ApiOperation("修改用户头像")
@PostMapping(value = "/updateUserAvatar")
public ResponseEntity<Object> updateUserAvatar(@RequestParam MultipartFile avatar) {
return ResponseEntity.ok(systemUserService.updateUserAvatar(avatar));
}
@ApiOperation("修改邮箱")
@OperationLog
@ApiOperation("修改用户邮箱")
@PostMapping(value = "/updateUserEmailByUsername/{code}")
public ResponseEntity<Object> updateUserEmailByUsername(@PathVariable String code, @RequestBody SystemUserTb args) throws Exception {
String currentUsername = KitSecurityHelper.getCurrentUsername();