feat(operationLog): 添加操作日志注解

- 在多个控制器的方法上添加 @OperationLogAnnotation 注解
- 注解内容包括操作类型(如新建、更新、删除)和操作对象(如附件、公告、部门等)
- 此修改涉及多个模块,包括附件、公告、部门、菜单、操作日志、产品、属性、角色、用户、用户通知等
This commit is contained in:
zhuangtianxiang 2025-03-13 19:35:09 +08:00
parent 8746fea3cc
commit 1215e94c78
13 changed files with 56 additions and 3 deletions

View File

@ -3,6 +3,7 @@ package com.zsc.edu.gateway.modules.attachment.controller;
import com.zsc.edu.gateway.exception.StorageException;
import com.zsc.edu.gateway.modules.attachment.entity.Attachment;
import com.zsc.edu.gateway.modules.attachment.service.AttachmentService;
import com.zsc.edu.gateway.modules.operationLog.entity.OperationLogAnnotation;
import lombok.AllArgsConstructor;
import org.springframework.core.io.Resource;
import org.springframework.http.ContentDisposition;
@ -37,6 +38,7 @@ public class AttachmentController {
* @return 附件信息
*/
@PostMapping()
@OperationLogAnnotation(content = "'附件上传'", operationType = "新建")
public Attachment upload(
@RequestParam(required = false, defaultValue = "其他") Attachment.Type type,
@RequestParam("file") MultipartFile file
@ -84,6 +86,7 @@ public class AttachmentController {
* 批量上传附件
*/
@PostMapping("multipartFile")
@OperationLogAnnotation(content = "'附件批量上传'", operationType = "新建")
public List<Attachment> uploadMultipleFiles(
@RequestParam(defaultValue = "其他") Attachment.Type type,
@RequestParam("files") List<MultipartFile> files
@ -101,6 +104,7 @@ public class AttachmentController {
* 根据附件ID删除附件信息
*/
@DeleteMapping("delete/{id}")
@OperationLogAnnotation(content = "'附件'", operationType = "删除")
public Boolean delete(@PathVariable("id") String id) {
return service.delete(id);
}

View File

@ -15,6 +15,7 @@ import com.zsc.edu.gateway.modules.iot.device.service.DeviceService;
import com.zsc.edu.gateway.modules.iot.device.vo.DeviceVo;
import com.zsc.edu.gateway.modules.iot.record.entity.RecordData;
import com.zsc.edu.gateway.modules.iot.record.service.RecordDataService;
import com.zsc.edu.gateway.modules.operationLog.entity.OperationLogAnnotation;
import jakarta.annotation.Resource;
import lombok.AllArgsConstructor;
import org.springframework.http.HttpStatus;
@ -45,6 +46,7 @@ public class DeviceController {
*/
@PostMapping
@PreAuthorize("hasAuthority('iot:device:create')")
@OperationLogAnnotation(content = "'设备'", operationType = "新建")
public Device create(@RequestBody DeviceDto deviceDto) {
return service.create(deviceDto);
}
@ -55,6 +57,7 @@ public class DeviceController {
*/
@PostMapping("batch")
@PreAuthorize("hasAuthority('iot:device:create')")
@OperationLogAnnotation(content = "'批量设备'", operationType = "新建")
public List<Device> batchCreate(@RequestBody BatchDeviceDto batchDeviceDto) {
return service.batchCreate(batchDeviceDto);
}
@ -65,6 +68,7 @@ public class DeviceController {
*/
@PatchMapping("{id}")
@PreAuthorize("hasAuthority('iot:device:update')")
@OperationLogAnnotation(content = "'设备'", operationType = "更新")
public Device update(@RequestBody DeviceDto deviceDto, @PathVariable("id") Long id) {
return service.update(deviceDto, id);
}
@ -85,6 +89,7 @@ public class DeviceController {
*/
@DeleteMapping("{id}")
@PreAuthorize("hasAuthority('iot:device:delete')")
@OperationLogAnnotation(content = "'设备'", operationType = "删除")
public Boolean delete(@PathVariable("id") Long id) {
return service.removeById(id);
}
@ -105,6 +110,7 @@ public class DeviceController {
*/
@PostMapping("serve")
@PreAuthorize("hasAuthority('iot:device:create')")
@OperationLogAnnotation(content = "'手动触发事件'", operationType = "新建")
public ResponseEntity<String> serve(@RequestBody DeviceServeDto dto) {
if (service.serve(dto)) {
return ResponseEntity.ok("服务执行成功");
@ -156,6 +162,7 @@ public class DeviceController {
* 下发命令
*/
@PostMapping("/send")
@OperationLogAnnotation(content = "'设备命令下发'", operationType = "新建")
public String send(Long deviceId, Integer qos, @RequestBody JSONObject paras) throws JSONException {
return service.send(deviceId, qos, paras);
}

View File

@ -10,6 +10,7 @@ import com.zsc.edu.gateway.modules.iot.product.query.ProductQuery;
import com.zsc.edu.gateway.modules.iot.product.service.ProductService;
import com.zsc.edu.gateway.modules.iot.product.service.impl.ProductServiceImpl;
import com.zsc.edu.gateway.modules.iot.product.vo.ProductStatusVo;
import com.zsc.edu.gateway.modules.operationLog.entity.OperationLogAnnotation;
import jakarta.annotation.Resource;
import lombok.AllArgsConstructor;
import org.springframework.data.domain.Pageable;
@ -46,6 +47,7 @@ public class ProductController {
*/
@PostMapping
@PreAuthorize("hasAuthority('iot:product:create')")
@OperationLogAnnotation(content = "'产品'", operationType = "新建")
public Product create(@RequestBody ProductDto dto) {
return service.create(dto);
}
@ -58,6 +60,7 @@ public class ProductController {
*/
@PatchMapping("{id}")
@PreAuthorize("hasAuthority('iot:product:update')")
@OperationLogAnnotation(content = "'产品'", operationType = "更新")
public Product update(@RequestBody ProductDto dto, @PathVariable("id") Long id) {
return service.update(dto, id);
}
@ -97,6 +100,7 @@ public class ProductController {
*/
@DeleteMapping("{id}")
@PreAuthorize("hasAuthority('iot:product:delete')")
@OperationLogAnnotation(content = "'产品'", operationType = "删除")
public Boolean delete(@PathVariable("id") Long id) {
return service.delete(id);
}

View File

@ -9,6 +9,7 @@ import com.zsc.edu.gateway.modules.iot.tsl.entity.EventLog;
import com.zsc.edu.gateway.modules.iot.tsl.query.EventQuery;
import com.zsc.edu.gateway.modules.iot.tsl.repo.EventLogRepository;
import com.zsc.edu.gateway.modules.iot.tsl.service.EventService;
import com.zsc.edu.gateway.modules.operationLog.entity.OperationLogAnnotation;
import lombok.AllArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@ -34,6 +35,7 @@ public class EventController {
*/
@PostMapping
@PreAuthorize("hasAuthority('iot:event:create')")
@OperationLogAnnotation(content = "'事件'", operationType = "新建")
public Event create(@RequestBody EventDto dto) {
return service.create(dto);
}
@ -46,6 +48,7 @@ public class EventController {
*/
@PatchMapping("{id}")
@PreAuthorize("hasAuthority('iot:event:update')")
@OperationLogAnnotation(content = "'事件'", operationType = "更新")
public Event update(@RequestBody EventDto dto, @PathVariable("id") Long id) {
return service.update(dto, id);
}
@ -86,6 +89,7 @@ public class EventController {
*/
@DeleteMapping("{id}")
@PreAuthorize("hasAuthority('iot:event:delete')")
@OperationLogAnnotation(content = "'事件'", operationType = "删除")
public Boolean delete(@PathVariable("id") Long id) {
return service.delete(id);
}

View File

@ -5,6 +5,7 @@ import com.zsc.edu.gateway.modules.iot.tsl.dto.PropertyDto;
import com.zsc.edu.gateway.modules.iot.tsl.entity.Property;
import com.zsc.edu.gateway.modules.iot.tsl.query.PropertyQuery;
import com.zsc.edu.gateway.modules.iot.tsl.service.PropertyService;
import com.zsc.edu.gateway.modules.operationLog.entity.OperationLogAnnotation;
import lombok.AllArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@ -30,6 +31,7 @@ public class PropertyController {
*/
@PostMapping
@PreAuthorize("hasAuthority('iot:property:create')")
@OperationLogAnnotation(content = "'属性'", operationType = "新建")
public Property create(@RequestBody PropertyDto dto) {
return service.create(dto);
}
@ -42,6 +44,7 @@ public class PropertyController {
*/
@PatchMapping("{id}")
@PreAuthorize("hasAuthority('iot:property:update')")
@OperationLogAnnotation(content = "'属性'", operationType = "更新")
public Property update(@RequestBody PropertyDto dto, @PathVariable("id") Long id) {
return service.update(dto, id);
}
@ -67,6 +70,7 @@ public class PropertyController {
*/
@DeleteMapping("{id}")
@PreAuthorize("hasAuthority('iot:property:delete')")
@OperationLogAnnotation(content = "'属性'", operationType = "删除")
public Boolean delete(@PathVariable("id") Long id) {
return service.removeById(id);
}

View File

@ -6,6 +6,7 @@ import com.zsc.edu.gateway.modules.iot.tsl.dto.ServeDto;
import com.zsc.edu.gateway.modules.iot.tsl.entity.Serve;
import com.zsc.edu.gateway.modules.iot.tsl.query.ServeQuery;
import com.zsc.edu.gateway.modules.iot.tsl.service.ServeService;
import com.zsc.edu.gateway.modules.operationLog.entity.OperationLogAnnotation;
import lombok.AllArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@ -30,6 +31,7 @@ public class ServeController {
*/
@PostMapping
@PreAuthorize("hasAnyAuthority('iot:serve:create')")
@OperationLogAnnotation(content = "'服务'", operationType = "新建")
public Serve create(@RequestBody ServeDto dto) {
return serveService.create(dto);
}
@ -42,6 +44,7 @@ public class ServeController {
*/
@PatchMapping("{id}")
@PreAuthorize("hasAnyAuthority('iot:serve:update')")
@OperationLogAnnotation(content = "'服务'", operationType = "更新")
public Serve update(@RequestBody ServeDto dto, @PathVariable("id") Long id) {
return serveService.update(dto, id);
}
@ -68,6 +71,7 @@ public class ServeController {
*/
@DeleteMapping("{id}")
@PreAuthorize("hasAnyAuthority('iot:serve:delete')")
@OperationLogAnnotation(content = "'服务'", operationType = "删除")
public Boolean delete(@PathVariable("id") Long id) {
return serveService.delete(id);
}

View File

@ -8,6 +8,7 @@ import com.zsc.edu.gateway.modules.message.entity.Bulletin;
import com.zsc.edu.gateway.modules.message.query.BulletinQuery;
import com.zsc.edu.gateway.modules.message.service.BulletinService;
import com.zsc.edu.gateway.modules.message.vo.BulletinVo;
import com.zsc.edu.gateway.modules.operationLog.entity.OperationLogAnnotation;
import lombok.AllArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
@ -84,6 +85,7 @@ public class BulletinController {
*/
@PostMapping
@PreAuthorize("hasAuthority('message:bulletin:create')")
@OperationLogAnnotation(content = "'公告'", operationType = "新建")
public Bulletin create(@AuthenticationPrincipal UserDetailsImpl userDetails, @RequestBody BulletinDto dto) {
return service.create(userDetails, dto);
}
@ -98,6 +100,7 @@ public class BulletinController {
*/
@PatchMapping("/{id}")
@PreAuthorize("hasAuthority('message:bulletin:update')")
@OperationLogAnnotation(content = "'公告'", operationType = "更新")
public Boolean update(@AuthenticationPrincipal UserDetailsImpl userDetails, @RequestBody BulletinDto dto, @PathVariable("id") Long id) {
return service.update(userDetails, dto, id);
}
@ -110,6 +113,7 @@ public class BulletinController {
*/
@PatchMapping("/{id}/toggle-top")
@PreAuthorize("hasAuthority('message:bulletin:update')")
@OperationLogAnnotation(content = "'公告置顶状态'", operationType = "更新")
public Boolean toggleTop(@PathVariable("id") Long id) {
return service.toggleTop(id);
}
@ -123,6 +127,7 @@ public class BulletinController {
*/
@PatchMapping("/publish")
@PreAuthorize("hasAuthority('message:bulletin:update')")
@OperationLogAnnotation(content = "'发布公告状态'", operationType = "更新")
public Boolean publish(@AuthenticationPrincipal UserDetailsImpl userDetails, @RequestBody List<Long> ids) {
return service.publish(userDetails, ids);
}
@ -136,6 +141,7 @@ public class BulletinController {
*/
@PatchMapping("/{id}/toggleClose")
@PreAuthorize("hasAuthority('message:bulletin:update')")
@OperationLogAnnotation(content = "'关闭公告状态'", operationType = "更新")
public Boolean toggleClose(@AuthenticationPrincipal UserDetailsImpl userDetails, @PathVariable("id") Long id) {
return service.close(userDetails, id);
}
@ -148,6 +154,7 @@ public class BulletinController {
*/
@DeleteMapping("/{id}")
@PreAuthorize("hasAuthority('message:bulletin:delete')")
@OperationLogAnnotation(content = "'公告'", operationType = "删除")
public Boolean delete(@PathVariable("id") Long id) {
return service.delete(id);
}

View File

@ -10,6 +10,7 @@ import com.zsc.edu.gateway.modules.message.query.UserNoticeQuery;
import com.zsc.edu.gateway.modules.message.service.UserNoticeService;
import com.zsc.edu.gateway.modules.message.vo.AdminNoticeVo;
import com.zsc.edu.gateway.modules.message.vo.UserNoticeVo;
import com.zsc.edu.gateway.modules.operationLog.entity.OperationLogAnnotation;
import lombok.AllArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
@ -122,6 +123,7 @@ public class UserNoticeController {
*/
@PostMapping
@PreAuthorize("hasAuthority('message:notice:create')")
@OperationLogAnnotation(content = "'消息'", operationType = "新建")
public Boolean create(@RequestBody UserNoticeDto dto) {
return service.createByAdmin(dto);
}

View File

@ -3,6 +3,7 @@ package com.zsc.edu.gateway.modules.operationLog.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zsc.edu.gateway.modules.operationLog.entity.OperationLog;
import com.zsc.edu.gateway.modules.operationLog.entity.OperationLogAnnotation;
import com.zsc.edu.gateway.modules.operationLog.query.OperationLogQuery;
import com.zsc.edu.gateway.modules.operationLog.repo.OperationLogRepository;
import lombok.AllArgsConstructor;
@ -43,6 +44,7 @@ public class OperationController {
*/
@DeleteMapping("/batch")
@PreAuthorize("hasAuthority('operationLog:delete')")
@OperationLogAnnotation(content = "'批量操作日志'", operationType = "删除")
public int deleteBatch(@RequestBody List<Long> ids) {
LambdaQueryWrapper<OperationLog> wrapper = new LambdaQueryWrapper<>();
wrapper.in(OperationLog::getId, ids);

View File

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zsc.edu.gateway.exception.ConstraintException;
import com.zsc.edu.gateway.framework.mybatisplus.DataPermission;
import com.zsc.edu.gateway.modules.operationLog.entity.OperationLogAnnotation;
import com.zsc.edu.gateway.modules.system.dto.DeptDto;
import com.zsc.edu.gateway.modules.system.entity.Dept;
import com.zsc.edu.gateway.modules.system.entity.User;
@ -62,6 +63,7 @@ public class DeptController {
*/
@PostMapping
@PreAuthorize("hasAuthority('system:dept:create')")
@OperationLogAnnotation(content = "'部门'", operationType = "新建")
public Dept create(@RequestBody DeptDto dto) {
return service.create(dto);
}
@ -75,6 +77,7 @@ public class DeptController {
*/
@PatchMapping("/{id}")
@PreAuthorize("hasAuthority('system:dept:update')")
@OperationLogAnnotation(content = "'部门'", operationType = "更新")
public Boolean update(@RequestBody DeptDto dto, @PathVariable("id") Long id) {
return service.edit(dto, id);
}
@ -86,6 +89,7 @@ public class DeptController {
*/
@DeleteMapping("/{id}")
@PreAuthorize("hasAuthority('system:dept:delete')")
@OperationLogAnnotation(content = "'部门'", operationType = "删除")
public Boolean delete(@PathVariable("id") Long id) {
// 是否存在用户绑定此部门
boolean hasUser = userService.count(new LambdaQueryWrapper<User>().eq(User::getDeptId, id)) > 0;
@ -100,6 +104,7 @@ public class DeptController {
* */
@PatchMapping("/toggle/{id}")
@PreAuthorize("hasAuthority('system:dept:update')")
@OperationLogAnnotation(content = "'部门状态'", operationType = "更新")
public Boolean toggle(@PathVariable("id") Long id) {
return service.toggle(id);
}

View File

@ -2,6 +2,7 @@ package com.zsc.edu.gateway.modules.system.controller;
import com.zsc.edu.gateway.framework.mybatisplus.DataPermission;
import com.zsc.edu.gateway.framework.security.UserDetailsImpl;
import com.zsc.edu.gateway.modules.operationLog.entity.OperationLogAnnotation;
import com.zsc.edu.gateway.modules.system.dto.MenuDto;
import com.zsc.edu.gateway.modules.system.entity.Menu;
import com.zsc.edu.gateway.modules.system.service.MenuService;
@ -28,6 +29,7 @@ public class MenuController {
*/
@PostMapping
@PreAuthorize("hasAuthority('system:menu:create')")
@OperationLogAnnotation(content = "'菜单'", operationType = "新建")
public Menu create(@RequestBody MenuDto dto) {
return service.create(dto);
}
@ -37,6 +39,7 @@ public class MenuController {
*/
@PatchMapping("/{id}")
@PreAuthorize("hasAuthority('system:menu:update')")
@OperationLogAnnotation(content = "'菜单'", operationType = "更新")
public Menu update(@RequestBody MenuDto dto, @PathVariable("id") Long id) {
return service.update(dto, id);
}
@ -46,6 +49,7 @@ public class MenuController {
*/
@DeleteMapping("/{id}")
@PreAuthorize("hasAuthority('system:menu:delete')")
@OperationLogAnnotation(content = "'菜单'", operationType = "删除")
public Boolean delete(@PathVariable("id") Long id) {
return service.delete(id);
}

View File

@ -2,6 +2,7 @@ package com.zsc.edu.gateway.modules.system.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zsc.edu.gateway.framework.mybatisplus.DataPermission;
import com.zsc.edu.gateway.modules.operationLog.entity.OperationLogAnnotation;
import com.zsc.edu.gateway.modules.system.dto.AuthorityCreateDto;
//import com.zsc.edu.gateway.modules.system.dto.RoleAuthCreateDto;
import com.zsc.edu.gateway.modules.system.dto.RoleDto;
@ -49,6 +50,7 @@ public class RoleController {
*/
@PostMapping
@PreAuthorize("hasAuthority('system:role:create')")
@OperationLogAnnotation(content = "'角色'", operationType = "新建")
public Role create(@RequestBody RoleDto dto) {
return service.create(dto);
}
@ -62,6 +64,7 @@ public class RoleController {
*/
@PatchMapping("{id}")
@PreAuthorize("hasAuthority('system:role:update')")
@OperationLogAnnotation(content = "'角色'", operationType = "更新")
public Role update(@RequestBody RoleDto dto, @PathVariable("id") Long id) {
return service.edit(dto, id);
}
@ -74,6 +77,7 @@ public class RoleController {
*/
@PatchMapping("{id}/toggle")
@PreAuthorize("hasAuthority('system:role:update')")
@OperationLogAnnotation(content = "'角色状态'", operationType = "更新")
public Boolean toggle(@PathVariable("id") Long id) {
return service.toggle(id);
}
@ -98,6 +102,7 @@ public class RoleController {
*/
@DeleteMapping("{id}")
@PreAuthorize("hasAuthority('system:role:delete')")
@OperationLogAnnotation(content = "'角色'", operationType = "删除")
public Boolean delete(@PathVariable Long id) {
return service.delete(id);
}

View File

@ -147,7 +147,7 @@ public class UserController {
* @return 新建的用户信息
*/
@OperationLogAnnotation(operationType = "新建")
@OperationLogAnnotation(content = "'用户'", operationType = "新建")
@PostMapping
@PreAuthorize("hasAuthority('system:user:create')")
public Boolean create(@RequestBody UserCreateDto dto) {
@ -161,7 +161,7 @@ public class UserController {
* @param id ID
* @return 更新后的用户
*/
@OperationLogAnnotation(operationType = "更新")
@OperationLogAnnotation(content = "'用户'", operationType = "更新")
@PatchMapping("{id}")
@PreAuthorize("hasAuthority('system:user:update')")
public Boolean update(@RequestBody UserUpdateDto dto, @PathVariable("id") Long id) {
@ -189,15 +189,16 @@ public class UserController {
*/
@PatchMapping("{id}/toggle")
@PreAuthorize("hasAuthority('system:user:delete')")
@OperationLogAnnotation(content = "'用户角色'", operationType = "更新")
public Boolean toggle(@PathVariable("id") Long id) {
return service.toggle(id);
}
/**
* 删除用户 hasAuthority('SYSTEM:USER:DELETE')
* */
@OperationLogAnnotation(operationType = "删除")
@DeleteMapping("{id}")
@PreAuthorize("hasAuthority('system:user:delete')")
@OperationLogAnnotation(content = "'用户'", operationType = "删除")
public Boolean delete(@PathVariable("id") Long id) {
return service.removeById(id);
}