kcw-wx-java/youchain-system/src/main/java/com/youchain/utils/ExcelDownUtils.java

164 lines
6.3 KiB
Java
Raw Normal View History

2025-07-25 11:22:48 +08:00
package com.youchain.utils;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.youchain.basicdata.service.dto.TableConfigDto;
import com.youchain.basicdata.service.dto.TableConfigQueryCriteria;
import com.youchain.basicdata.service.impl.TableConfigServiceImpl;
import com.youchain.exception.BadRequestException;
import com.youchain.modules.system.domain.DictDetail;
import com.youchain.modules.system.service.impl.DictDetailServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.formula.functions.T;
import java.lang.reflect.Field;
import java.util.*;
@Slf4j
public class ExcelDownUtils {
public static List<Map<String, Object>> CreateMap(List all,String tableType) throws Exception{
Long stTime=System.currentTimeMillis();
//查询配置表
TableConfigServiceImpl tableConfigService = SpringContextHolder.getBean(TableConfigServiceImpl.class);
TableConfigQueryCriteria tbble_criteria =new TableConfigQueryCriteria();
tbble_criteria.setTableType(tableType.trim());
List<TableConfigDto> tableConfigDtoList=tableConfigService.queryAll(tbble_criteria);
if(tableConfigDtoList.size()<=0){
throw new BadRequestException("请先保存配置");
}
TableConfigDto tableConfigDto=tableConfigDtoList.get(0);
//解析配置内容
List<FanShe> tableConfigList;
try{
tableConfigList= JSONUtil.toList(tableConfigDto.getValue(),FanShe.class);
}catch (Exception e){
throw new BadRequestException("请保存配置");
}
log.error("导出配置数据:"+tableConfigList+"");
//创建空的字典集合
Map<String, Map<String, DictDetail>> dictDetailMaps =new HashMap<>();
//加载字典表
DictDetailServiceImpl dictDetailService = SpringContextHolder.getBean(DictDetailServiceImpl.class);
//查找所需要用到的字典
tableConfigList.forEach(fanShe->{
//遍历配置属性
String property=fanShe.property;
if(property.indexOf("#")>-1){
//如果带# 代表调用了字典
try{
String dictStr=property.split("#")[0];
Map<String, DictDetail> dictDetailMap=dictDetailService.getDictDetailByNameForValue(dictStr);
dictDetailMaps.put(dictStr,dictDetailMap);
}catch (Exception e){
log.error(e.toString());
log.error("获取字典配置"+property+"异常");
}
}
});
List<Map<String, Object>> list = new ArrayList<>();
for (Object obj : all) {
Map<String,Object> map = new LinkedHashMap<>();
tableConfigList.forEach(fanShe->{
if(fanShe.visible){
//获取属性名
String property=fanShe.property;
if(property.indexOf("#")>-1){
try{
String dictStr=property.split("#")[0];
String propertyStr=property.split("#")[1];
Map<String, DictDetail> dictDetailMap=dictDetailMaps.get(dictStr);
//log.info("dictDetailMap"+dictDetailMap.size());
//for (String key: dictDetailMap.keySet()) {
//log.info("dictDetailMap"+key);
//}
//log.info(dictStr+"获取value"+json.getByPath(propertyStr)+"");
DictDetail dictDetail=dictDetailMap.get(getNestedFieldValue(obj,propertyStr));
//log.info(jsonObject.getStr("label")+"--"+dictDetail.getLabel()+"");
String value=dictDetail.getLabel()+"";
map.put(fanShe.label, value.trim()+"");
}catch (Exception e){
log.error(e.toString());
log.error("匹配字典:"+property+"异常");
}
}else{
try{
Object value= getNestedFieldValue(obj,property);
if(value!=null){
if(value instanceof String){
value=((String) value).trim();
}
map.put(fanShe.label,value);
}else{
map.put(fanShe.label,"");
}
}catch (Exception e){
//log.error(e.toString());
//log.error("匹配数据"+property+"异常");
}
}
}
});
list.add(map);
//Object value2 = jsonObj.eval("$.address.city");
}
return list;
}
2025-09-30 12:07:47 +08:00
private static Field getFieldRecursively(Class<?> clazz, String fieldName) {
while (clazz != null) {
try {
return clazz.getDeclaredField(fieldName);
} catch (NoSuchFieldException e) {
clazz = clazz.getSuperclass();
}
}
return null;
}
2025-07-25 11:22:48 +08:00
public static Object getNestedFieldValue(Object obj, String nestedFieldName) throws Exception {
String[] fields = nestedFieldName.split("\\.");
2025-09-30 12:07:47 +08:00
try {
Object result = obj;
for (String field : fields) {
if (result == null) {
throw new IllegalArgumentException("尝试在 null 对象上访问字段: " + field);
}
Field f = getFieldRecursively(result.getClass(), field);
if (f == null) {
throw new NoSuchFieldException("字段 " + field + " 在类 " +
result.getClass().getName() + " 中不存在");
}
f.setAccessible(true);
result = f.get(result);
}
return result;
} catch (Exception e) {
log.error("获取字段值失败: " + e.getMessage());
return null;
2025-07-25 11:22:48 +08:00
}
}
}