创建自定义注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Dal {
/**
*操作
*/
String operation() default "";
}
定义切面类
@Aspect
@Component
public class DalAspect {
private static final String CREATEDDATE = "CREATEDDATE";
private static final String CREATEDPERSON = "CREATEDPERSON";
private static final String UPDATEDDATE = "UPDATEDDATE";
private static final String UPDATEDPERSON = "UPDATEDPERSON";
private static final String ISDELETE = "ISDELETE";
private static final Logger logger = LoggerFactory.getLogger(DalAspect.class);
@Pointcut("@annotation(com.xx.annotation.Dal)")
public void operationPointCut() {
}
@Before("operationPointCut()")
public void around(JoinPoint point) throws Throwable {
MethodSignature signature = (MethodSignature) point.getSignature();
Method method = signature.getMethod();
Dal dal = method.getAnnotation(Dal.class);
if ("CREATE".equals(dal.operation())) {
beforeInsert(point);
} else {
beforeUpdate(point);
}
}
public void beforeInsert(JoinPoint point) {
Object[] args = point.getArgs();
if (args != null && args.length > 0) {
Object argument = args[0];
BeanWrapper beanWrapper = new BeanWrapperImpl(argument);
//设置创建时间和修改时间
if (beanWrapper.isWritableProperty(CREATEDDATE)) {
beanWrapper.setPropertyValue(CREATEDDATE, new Date());
}
if (beanWrapper.isWritableProperty(UPDATEDDATE)) {
beanWrapper.setPropertyValue(UPDATEDDATE, new Date());
}
//设置创建人和修改人
if (beanWrapper.isWritableProperty(CREATEDPERSON) && StringUtils.isNotEmpty(ShiroUtils.getUserId())) {
beanWrapper.setPropertyValue(CREATEDPERSON, ShiroUtils.getUserId());
}
if (beanWrapper.isWritableProperty(UPDATEDPERSON) && StringUtils.isNotEmpty(ShiroUtils.getUserId())) {
beanWrapper.setPropertyValue(UPDATEDPERSON, ShiroUtils.getUserId());
}
//设置是否删除
if (beanWrapper.isWritableProperty(ISDELETE)) {
beanWrapper.setPropertyValue(ISDELETE, "0");
}
logger.info("After insert = {}", ToStringBuilder.reflectionToString(argument, ToStringStyle.SHORT_PREFIX_STYLE));
}
}
public void beforeUpdate(JoinPoint point) {
Object[] args = point.getArgs();
if (args != null && args.length > 0) {
Object argument = args[0];
//如果参数是map类型
if (argument instanceof Map) {
Map map = (Map) argument;
map.put(UPDATEDDATE, new Date());
if (StringUtils.isNotBlank(ShiroUtils.getUserId())) {
map.put(UPDATEDPERSON, ShiroUtils.getUserId());
}
} else {
BeanWrapper beanWrapper = new BeanWrapperImpl(argument);
//设置修改时间
if (beanWrapper.isWritableProperty(UPDATEDDATE)) {
beanWrapper.setPropertyValue(UPDATEDDATE, new Date());
}
//设置修改人
if (beanWrapper.isWritableProperty(UPDATEDPERSON) && StringUtils.isNotBlank(ShiroUtils.getUserId())) {
beanWrapper.setPropertyValue(UPDATEDPERSON, ShiroUtils.getUserId());
}
}
logger.info("After update = {}", ToStringBuilder.reflectionToString(argument, ToStringStyle.SHORT_PREFIX_STYLE));
}
}
}
在相应的方法上加上@Dal(operation = “CREATE”)或@Dal即可动态设置
@PostMapping("/save")
@Dal(operation = "CREATE")
public R save(@RequestBody SysDict dict){
......
return R.ok();
}
@PutMapping("/update")
@Dal
public R update(@RequestBody SysDict dict){
......
return R.ok();
}