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..62d092e --- /dev/null +++ b/sky-server/src/main/java/com/sky/annotation/AutoFill.java @@ -0,0 +1,21 @@ +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(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface AutoFill { + + //数据库操作类型update insert + //这两个操作存在公共字段 updatetime updateuser createtime createuser + 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..d5aa58d --- /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.extern.slf4j.Slf4j; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.Signature; +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 { + + /** + * 切入点 在mapper包下的所有方法且带有AutoFill注解 + */ + @Pointcut("execution(* com.sky.mapper.*.*(..)) && @annotation(com.sky.annotation.AutoFill)") + public void autoFillPointCut() {} + + //前置通知 在通知中进行公共字段的赋值 + //joinpoint连接点 在哪里进行赋值 + @Before("autoFillPointCut()") + public void autoFill(JoinPoint joinPoint) { + log.info("开始进行公共字段的填充..."); + + //获取当前被拦截的方法上的数据库操作类型 + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); //方法签名对象 + AutoFill autoFill = signature.getMethod().getAnnotation(AutoFill.class); //获得方法上的注解对象 + OperationType operationType = autoFill.value(); //获得数据库操作类型 + + //获取到当前被拦截的方法的参数 实体对象 + Object[] args = joinPoint.getArgs(); + if(args == null || args.length == 0){ + return; + } + //默认将实体放在第一位 + Object entity = args[0]; + + //准备为实体对象的属性赋值的数据 + LocalDateTime now = LocalDateTime.now(); + Long currentId = BaseContext.getCurrentId(); + + //根据当前不同的操作类型 为对应的属性通过反射赋值 + if(operationType == 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(operationType == 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) { + throw new RuntimeException(e); + } + } + } +} 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 6e9d3d7..6b1d3c9 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 { @Insert("insert into employee (name, username, password, phone, sex, id_number, 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); @@ -42,6 +45,7 @@ public interface EmployeeMapper { * 启用禁用员工 * @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..28b77a8 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 @@ -48,10 +48,10 @@ public class CategoryServiceImpl implements CategoryService { 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); } @@ -100,8 +100,8 @@ public class CategoryServiceImpl implements CategoryService { 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 12e6f12..a442d9b 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 @@ -81,12 +81,12 @@ public class EmployeeServiceImpl implements EmployeeService { //设置实体类剩下的属性 employee.setStatus(StatusConstant.ENABLE); employee.setPassword(DigestUtils.md5DigestAsHex(PasswordConstant.DEFAULT_PASSWORD.getBytes())); - employee.setCreateTime(LocalDateTime.now()); - employee.setUpdateTime(LocalDateTime.now()); + //employee.setCreateTime(LocalDateTime.now()); + //employee.setUpdateTime(LocalDateTime.now()); - // - employee.setCreateUser(BaseContext.getCurrentId()); - employee.setUpdateUser(BaseContext.getCurrentId()); + + //employee.setCreateUser(BaseContext.getCurrentId()); + //employee.setUpdateUser(BaseContext.getCurrentId()); //调用持久层 employeeMapper.insert(employee); @@ -149,10 +149,10 @@ public class EmployeeServiceImpl implements EmployeeService { public void update(EmployeeDTO employeeDTO) { Employee employee = new Employee(); BeanUtils.copyProperties(employeeDTO, employee); - employee.setUpdateTime(LocalDateTime.now()); + //employee.setUpdateTime(LocalDateTime.now()); //在拦截器中设置好id - employee.setUpdateUser(BaseContext.getCurrentId()); + //employee.setUpdateUser(BaseContext.getCurrentId()); employeeMapper.update(employee); }