创建@Aspect
@Aspect
@Component
public class BaseInfoFillAspect {
@Pointcut("@annotation(com.caltta.common.datascope.annotation.BaseInfoFillAnnotation))")
public void setBaseInfo(){}
@Around("setBaseInfo()")
public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
Object res = null;
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
BaseInfoFillAnnotation annotation = signature.getMethod().getAnnotation(BaseInfoFillAnnotation.class);
OperateTypeEnum value = annotation.value();
Object[] args = joinPoint.getArgs();
if (args.length > 0) {
BaseEntity arg = (BaseEntity) args[0];
Date now = DateUtils.getNowDate();
// 获取当前的用户
LoginUser user = SecurityUtils.getLoginUser();
if (StringUtils.isNotNull(user)) {
String userName = user.getUsername();
if (value == OperateTypeEnum.ADD) {
arg.setCreateBy(userName);
arg.setCreateTime(now);
arg.setUpdateBy(userName);
arg.setUpdateTime(now);
} else if (value == OperateTypeEnum.UPDATE || value == OperateTypeEnum.DELETE) {
arg.setUpdateBy(userName);
arg.setUpdateTime(now);
}
}
}
res = joinPoint.proceed(args);
return res;
}
}
创建@Annotation
@Documented
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface BaseInfoFillAnnotation {
OperateTypeEnum value();
}
使用方式
@RequiresPermissions("reback:task:add")
@Log(title = "新增版本回退任务", businessType = BusinessType.INSERT)
@PostMapping
@BaseInfoFillAnnotation(value = OperateTypeEnum.ADD)
public AjaxResult add(@RequestBody RebackTask rebackTask) {
return toAjax(rebackTaskService.insertRebackTask(rebackTask));
}