From ee83d0637242444dc4624a57289a9facc24dd58d Mon Sep 17 00:00:00 2001 From: subaixi Date: Thu, 26 Sep 2024 21:06:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=85=AC=E5=85=B1=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E8=87=AA=E5=8A=A8=E5=A1=AB=E5=85=85=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sky/annotation/AutoFill.java | 18 ++++ .../java/com/sky/aspect/AutoFillAspect.java | 87 +++++++++++++++++++ .../java/com/sky/mapper/CategoryMapper.java | 3 + .../java/com/sky/mapper/EmployeeMapper.java | 4 + .../sky/service/impl/CategoryServiceImpl.java | 20 ++--- .../sky/service/impl/EmployeeServiceImpl.java | 24 ++--- 6 files changed, 134 insertions(+), 22 deletions(-) create mode 100644 sky-server/src/main/java/com/sky/annotation/AutoFill.java create mode 100644 sky-server/src/main/java/com/sky/aspect/AutoFillAspect.java diff --git a/sky-server/src/main/java/com/sky/annotation/AutoFill.java b/sky-server/src/main/java/com/sky/annotation/AutoFill.java new file mode 100644 index 0000000..1931191 --- /dev/null +++ b/sky-server/src/main/java/com/sky/annotation/AutoFill.java @@ -0,0 +1,18 @@ +package com.sky.annotation; + +import com.sky.enumeration.OperationType; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 自定义注解,用于标识某个方法需要进行自动填充 + */ +@Target(value = {ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +public @interface AutoFill { + //数据库操作属性:update\insert + OperationType value(); +} diff --git a/sky-server/src/main/java/com/sky/aspect/AutoFillAspect.java b/sky-server/src/main/java/com/sky/aspect/AutoFillAspect.java new file mode 100644 index 0000000..062bb34 --- /dev/null +++ b/sky-server/src/main/java/com/sky/aspect/AutoFillAspect.java @@ -0,0 +1,87 @@ +package com.sky.aspect; + +import com.sky.annotation.AutoFill; +import com.sky.constant.AutoFillConstant; +import com.sky.context.BaseContext; +import com.sky.enumeration.OperationType; +import lombok.Builder; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Method; +import java.time.LocalDateTime; + +/** + * 自定义切面,实现公共字段自动填充 + */ +@Aspect +@Component +@Slf4j +public class AutoFillAspect { + + /** + * 切入点 + */ + @Pointcut("execution(* com.sky.mapper.*.*(..)) && @annotation(com.sky.annotation.AutoFill)") + public void autoFillPointcut() {} + + /** + * 前置通知,在通知中进行公共字段赋值 + */ + @Before("autoFillPointcut()") + public void autoFill(JoinPoint joinPoint) { + log.info("自动填充公共字段"); + + //获取被拦截方法的数据库操作类型 + MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();//获取方法签名对象 + AutoFill autoFill = methodSignature.getMethod().getAnnotation(AutoFill.class);//获取方法上的注解对象 + OperationType operateType = autoFill.value();//获取注解中的操作类型 + + //获取被拦截方法的参数列表 + Object[] args = joinPoint.getArgs(); + if (args.length == 0 || args[0] == null) { + return; + } + Object entity = args[0]; + + //准备赋值的数据 + LocalDateTime now = LocalDateTime.now(); + Long currentId = BaseContext.getCurrentId(); + + //根据不同操作类型,为对应的属性通过反射来赋值 + if (operateType == OperationType.INSERT) { + //为四个公共字段赋值 + try { + Method setCreateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_CREATE_TIME, LocalDateTime.class); + Method setCreateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_CREATE_USER, Long.class); + Method setUpdateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_TIME, LocalDateTime.class); + Method setUpdateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER, Long.class); + + //通过反射为字段赋值 + setCreateTime.invoke(entity, now); + setCreateUser.invoke(entity, currentId); + setUpdateTime.invoke(entity, now); + setUpdateUser.invoke(entity, currentId); + } catch (Exception e) { + e.printStackTrace(); + } + } else if (operateType == OperationType.UPDATE) { + //为两个公共字段赋值 + try { + Method setUpdateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_TIME, LocalDateTime.class); + Method setUpdateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER, Long.class); + + //通过反射为字段赋值 + setUpdateTime.invoke(entity, now); + setUpdateUser.invoke(entity, currentId); + } catch (Exception e) { + e.printStackTrace(); + } + } + } +} diff --git a/sky-server/src/main/java/com/sky/mapper/CategoryMapper.java b/sky-server/src/main/java/com/sky/mapper/CategoryMapper.java index 56a34fd..ad2c36f 100644 --- a/sky-server/src/main/java/com/sky/mapper/CategoryMapper.java +++ b/sky-server/src/main/java/com/sky/mapper/CategoryMapper.java @@ -1,6 +1,7 @@ package com.sky.mapper; import com.github.pagehelper.Page; +import com.sky.annotation.AutoFill; import com.sky.enumeration.OperationType; import com.sky.dto.CategoryPageQueryDTO; import com.sky.entity.Category; @@ -19,6 +20,7 @@ public interface CategoryMapper { @Insert("insert into category(type, name, sort, status, create_time, update_time, create_user, update_user)" + " VALUES" + " (#{type}, #{name}, #{sort}, #{status}, #{createTime}, #{updateTime}, #{createUser}, #{updateUser})") + @AutoFill(value = OperationType.INSERT) void insert(Category category); /** @@ -39,6 +41,7 @@ public interface CategoryMapper { * 根据id修改分类 * @param category */ + @AutoFill(value = OperationType.UPDATE) void update(Category category); /** diff --git a/sky-server/src/main/java/com/sky/mapper/EmployeeMapper.java b/sky-server/src/main/java/com/sky/mapper/EmployeeMapper.java index 7d1bf94..f97c70d 100644 --- a/sky-server/src/main/java/com/sky/mapper/EmployeeMapper.java +++ b/sky-server/src/main/java/com/sky/mapper/EmployeeMapper.java @@ -1,8 +1,10 @@ package com.sky.mapper; import com.github.pagehelper.Page; +import com.sky.annotation.AutoFill; import com.sky.dto.EmployeePageQueryDTO; import com.sky.entity.Employee; +import com.sky.enumeration.OperationType; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; @@ -26,6 +28,7 @@ public interface EmployeeMapper { "create_time, update_time, create_user, update_user) " + "VALUES (#{name}, #{username}, #{password}, #{phone}, #{sex}, #{idNumber}, " + "#{createTime}, #{updateTime}, #{createUser}, #{updateUser})") + @AutoFill(value = OperationType.INSERT) void insert(Employee employee); @@ -40,6 +43,7 @@ public interface EmployeeMapper { * 根据id动态更新员工 * @param employee */ + @AutoFill(value = OperationType.UPDATE) void update(Employee employee); /** diff --git a/sky-server/src/main/java/com/sky/service/impl/CategoryServiceImpl.java b/sky-server/src/main/java/com/sky/service/impl/CategoryServiceImpl.java index 1c98f80..c74c9cf 100644 --- a/sky-server/src/main/java/com/sky/service/impl/CategoryServiceImpl.java +++ b/sky-server/src/main/java/com/sky/service/impl/CategoryServiceImpl.java @@ -47,11 +47,11 @@ public class CategoryServiceImpl implements CategoryService { //分类状态默认为禁用状态0 category.setStatus(StatusConstant.DISABLE); - //设置创建时间、修改时间、创建人、修改人 - category.setCreateTime(LocalDateTime.now()); - category.setUpdateTime(LocalDateTime.now()); - category.setCreateUser(BaseContext.getCurrentId()); - category.setUpdateUser(BaseContext.getCurrentId()); +// //设置创建时间、修改时间、创建人、修改人 +// category.setCreateTime(LocalDateTime.now()); +// category.setUpdateTime(LocalDateTime.now()); +// category.setCreateUser(BaseContext.getCurrentId()); +// category.setUpdateUser(BaseContext.getCurrentId()); categoryMapper.insert(category); } @@ -99,9 +99,9 @@ public class CategoryServiceImpl implements CategoryService { Category category = new Category(); BeanUtils.copyProperties(categoryDTO,category); - //设置修改时间、修改人 - category.setUpdateTime(LocalDateTime.now()); - category.setUpdateUser(BaseContext.getCurrentId()); +// //设置修改时间、修改人 +// category.setUpdateTime(LocalDateTime.now()); +// category.setUpdateUser(BaseContext.getCurrentId()); categoryMapper.update(category); } @@ -115,8 +115,8 @@ public class CategoryServiceImpl implements CategoryService { Category category = Category.builder() .id(id) .status(status) - .updateTime(LocalDateTime.now()) - .updateUser(BaseContext.getCurrentId()) +// .updateTime(LocalDateTime.now()) +// .updateUser(BaseContext.getCurrentId()) .build(); categoryMapper.update(category); } diff --git a/sky-server/src/main/java/com/sky/service/impl/EmployeeServiceImpl.java b/sky-server/src/main/java/com/sky/service/impl/EmployeeServiceImpl.java index 867b6f5..8a9769e 100644 --- a/sky-server/src/main/java/com/sky/service/impl/EmployeeServiceImpl.java +++ b/sky-server/src/main/java/com/sky/service/impl/EmployeeServiceImpl.java @@ -90,13 +90,13 @@ public class EmployeeServiceImpl implements EmployeeService { //设置默认密码 employee.setPassword(DigestUtils.md5DigestAsHex(PasswordConstant.DEFAULT_PASSWORD.getBytes())); - //设置创建时间和修改时间 - employee.setCreateTime(LocalDateTime.now()); - employee.setUpdateTime(LocalDateTime.now()); - - //设置当前记录创建人和修改人id - employee.setCreateUser(BaseContext.getCurrentId()); - employee.setUpdateUser(BaseContext.getCurrentId()); +// //设置创建时间和修改时间 +// employee.setCreateTime(LocalDateTime.now()); +// employee.setUpdateTime(LocalDateTime.now()); +// +// //设置当前记录创建人和修改人id +// employee.setCreateUser(BaseContext.getCurrentId()); +// employee.setUpdateUser(BaseContext.getCurrentId()); employeeMapper.insert(employee); } @@ -152,11 +152,11 @@ public class EmployeeServiceImpl implements EmployeeService { //对象属性拷贝 BeanUtils.copyProperties(employeeDTO, employee); - //设置修改时间 - employee.setUpdateTime(LocalDateTime.now()); - - //设置当前记录修改人id - employee.setUpdateUser(BaseContext.getCurrentId()); +// //设置修改时间 +// employee.setUpdateTime(LocalDateTime.now()); +// +// //设置当前记录修改人id +// employee.setUpdateUser(BaseContext.getCurrentId()); employeeMapper.update(employee); }