package com.engine.salary.encrypt; import com.engine.common.util.ServiceUtil; import com.engine.salary.annotation.Encrypt; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.sys.service.SalarySysConfService; import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import weaver.hrm.User; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Slf4j public class EncryptUtil { private SalarySysConfService getSalarySysConfService(User user) { return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); } public T encrypt(T data, Class clazz) { if (data == null || clazz == null) { return data; } boolean encryptIsOpen = getSalarySysConfService(null).encryptIsOpen(); if (!encryptIsOpen) { return data; } try { List fieldList = Arrays.stream(clazz.getDeclaredFields()).filter(field -> field.isAnnotationPresent(Encrypt.class)).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(fieldList)) { for (Field field : fieldList) { Field declaredField = data.getClass().getDeclaredField(field.getName()); declaredField.setAccessible(true); String fieldValue = (String) declaredField.get(data); if (StringUtils.isNotBlank(fieldValue)) { String encryptValue = AESEncryptUtil.encrypt(fieldValue); declaredField.set(data, encryptValue); } } } return data; } catch (Exception e) { log.error("加密异常", e); throw new SalaryRunTimeException("加密异常"); } } public List encryptList(List dataList, Class clazz) { if (CollectionUtils.isEmpty(dataList) || clazz == null) { return dataList; } boolean encryptIsOpen = getSalarySysConfService(null).encryptIsOpen(); if (!encryptIsOpen) { return dataList; } try { List fieldList = Arrays.stream(clazz.getDeclaredFields()).filter(field -> field.isAnnotationPresent(Encrypt.class)).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(fieldList)) { List> values = new ArrayList<>(); for (T data : dataList) { for (Field field : fieldList) { Field declaredField = data.getClass().getDeclaredField(field.getName()); declaredField.setAccessible(true); String fieldValue = (String) declaredField.get(data); if (StringUtils.isNotBlank(fieldValue)) { String encryptValue = AESEncryptUtil.encrypt(fieldValue); declaredField.set(data, encryptValue); } } } } return dataList; } catch (Exception e) { log.error("批量加密异常", e); throw new SalaryRunTimeException("批量加密异常"); } } public T decrypt(T data, Class clazz) { if (data == null || clazz == null) { return data; } boolean encryptIsOpen = getSalarySysConfService(null).encryptIsOpen(); if (!encryptIsOpen) { return data; } try { List fieldList = Arrays.stream(clazz.getDeclaredFields()).filter(field -> field.isAnnotationPresent(Encrypt.class)).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(fieldList)) { for (Field field : fieldList) { Field declaredField = data.getClass().getDeclaredField(field.getName()); declaredField.setAccessible(true); String fieldValue = (String) declaredField.get(data); if (StringUtils.isNotBlank(fieldValue)) { String encryptValue = AESEncryptUtil.decrypt(fieldValue); declaredField.set(data, encryptValue); } } } return data; } catch (Exception e) { log.error("解密异常", e); throw new SalaryRunTimeException("解密异常"); } } public List decryptList(List dataList, Class clazz) { if (CollectionUtils.isEmpty(dataList) || clazz == null) { return dataList; } boolean encryptIsOpen = getSalarySysConfService(null).encryptIsOpen(); if (!encryptIsOpen) { return dataList; } try { List fieldList = Arrays.stream(clazz.getDeclaredFields()).filter(field -> field.isAnnotationPresent(Encrypt.class)).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(fieldList)) { for (T data : dataList) { for (Field field : fieldList) { Field declaredField = data.getClass().getDeclaredField(field.getName()); declaredField.setAccessible(true); String fieldValue = (String) declaredField.get(data); if (StringUtils.isNotBlank(fieldValue)) { String encryptValue = AESEncryptUtil.decrypt(fieldValue); declaredField.set(data, encryptValue); } } } } return dataList; } catch (Exception e) { log.error("批量解密异常", e); throw new SalaryRunTimeException("批量解密异常"); } } }