PublicAffairs/gather-app/src/main/java/com/ruoyi/aspect/ImportAspect.java

97 lines
3.4 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.ruoyi.aspect;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.cache.DictCache;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.bean.BeanValidators;
import lombok.RequiredArgsConstructor;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
import javax.validation.Validator;
import java.lang.reflect.Field;
import java.util.List;
@Aspect
@Component
@RequiredArgsConstructor
public class ImportAspect {
protected final Validator validator;
@Around("execution(* com.ruoyi.database.service.*.*import*(..))")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
// 获取方法的入参
Object[] args = joinPoint.getArgs();
List<?> importList = (List<?>) args[0];
if (CollUtil.isEmpty(importList)) {
throw new ServiceException("导入数据为空");
}
// 获取list表中类的类型
Class<?> clazz = importList.get(0).getClass();
// 错误标记,判断是否有错误信息
boolean errorFlag = false;
// 遍历list表中的数据回填字典值
for (Object obj : importList) {
// 记录属性中存在区域编码相关的属性的个数,判断如何回填区域编码
int codeCount = 0;
// 获取类中的所有属性
for (Field field : clazz.getDeclaredFields()) {
// 判断属性中是否有Cn结尾的属性
String fieldName = field.getName();
if (StrUtil.endWithIgnoreCase(fieldName, "Cn") && !field.getName().equals("structuredCameraTypeCn")) {
field.setAccessible(true);
// 获取非Cn属性名
String fieldName1 = StrUtil.subBefore(fieldName, "Cn", true);
String dictType = StrUtil.toUnderlineCase(fieldName1);
// 获取字典标签
Object dictLabel = field.get(obj);
int dictValue;
try {
// 获取字典值
dictValue = Integer.parseInt(DictCache.getDictValue(StrUtil.format("{}-{}", dictType, dictLabel)));
} catch (Exception e) {
// 字典值不存在,跳过
continue;
}
// 回填字典值
ReflectUtil.setFieldValue(obj, fieldName1, dictValue);
}
// // 判断属性中是否存在区域编码相关的属性
// if (StrUtil.equalsAny(fieldName, "placeCode", "gridCode", "buildingCode", "unitCode", "homeCode")) {
// codeCount++;
// }
}
// 校验数据,校验不通过则记录错误信息
try {
BeanValidators.validateWithException(validator, obj);
} catch (Exception e) {
ReflectUtil.setFieldValue(obj, "remark", e.getMessage());
errorFlag = true;
continue;
}
}
if (errorFlag) {
return importList;
}
// 执行目标方法
return joinPoint.proceed();
}
}