This commit is contained in:
zjarlin 2024-08-29 18:44:25 +08:00
parent 4eb3224b73
commit 6b3e1d7d48
16 changed files with 213 additions and 149 deletions

View File

@ -0,0 +1,9 @@
package com.gisroad.business.common.aop.dicttrans.strategy;
import java.lang.annotation.Annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface DictIgnoreShow {
}

View File

@ -27,18 +27,20 @@ import com.gisroad.sjzyxt.common.models.ResponseModel;
import com.gisroad.sjzyxt.service.impl.ColumnDTO;
import com.gisroad.sjzyxt.service.impl.FieldInfoDTO;
import com.gisroad.sjzyxt.service.impl.ScopedSlotsDTO;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.tuple.Pair;
import org.springframework.core.annotation.AnnotatedElementUtils;
import org.springframework.util.Assert;
import springfox.documentation.spring.web.scanners.ApiModelReader;
import javax.annotation.Resource;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import static cn.hutool.core.text.CharSequenceUtil.isBlank;
import static cn.hutool.core.text.CharSequenceUtil.isNotBlank;
/**
* @author zjarlin
* @since 2023/11/8 10:31
@ -412,14 +414,14 @@ public interface TransStrategy<T> {
TableField annotation = e.getAnnotation(TableField.class);
return !annotationPresent || annotation.exist();
}).collect(Collectors.toMap(e -> {
TableField annotation = e.getAnnotation(TableField.class);
if (Objects.isNull(annotation)) {
//这里暂时大写,不确定是不是先转下划线再转大写
return e.getName().toUpperCase();
}
String value = annotation.value();
return value;
}, Field::getName
TableField annotation = e.getAnnotation(TableField.class);
if (Objects.isNull(annotation)) {
//这里暂时大写,不确定是不是先转下划线再转大写
return e.getName().toUpperCase();
}
String value = annotation.value();
return value;
}, Field::getName
// ,(up,down)->down
));
// copyOptions.setFieldMapping()
@ -509,63 +511,80 @@ public interface TransStrategy<T> {
return !aStatic && annotated;
});
List<ColumnDTO> collect = Arrays.stream(fields).flatMap(e -> {
String fieldName = e.getName();
Set<Dict> allMergedAnnotations = AnnotatedElementUtils.getMergedRepeatableAnnotations(e, Dict.class);
return allMergedAnnotations.stream().map(dict -> {
String value = dict.value();
List<ColumnDTO> collect = Arrays.stream(fields)
//显式指定隐藏显示的字段
.filter(e -> !e.isAnnotationPresent(DictIgnoreShow.class))
.flatMap(e -> {
String fieldName = e.getName();
ApiModelProperty annotation = e.getAnnotation(ApiModelProperty.class);
String comment = Optional.ofNullable(annotation).map(ApiModelProperty::value).orElse(null);
Set<Dict> allMergedAnnotations = AnnotatedElementUtils.getMergedRepeatableAnnotations(e, Dict.class);
return allMergedAnnotations.stream()
.filter(dict -> {
String nameColumn = dict.nameColumn();
String s = dict.codeColumn();
boolean allNotBlank = StrUtil.isAllNotBlank(nameColumn, s);
// nameColumn = StrUtil.toCamelCase(nameColumn);
// String serializationAlias = dict.serializationAlias();
// String chineseName = Optional.ofNullable(dict.serializationChinese()).filter(StrUtil::isNotBlank).orElse(Optional.ofNullable(comment).orElse(serializationAlias));
// boolean notBlank = isNotBlank(chineseName);
return allNotBlank;
})
.map(dict -> {
String value = dict.value();
// String dicCode = Optional.ofNullable(dict.dicCode()).filter(StrUtil::isNotBlank).orElse(value);
// String codeColumn = dict.codeColumn();
String nameColumn = dict.nameColumn();
nameColumn = StrUtil.toCamelCase(nameColumn);
String nameColumn = dict.nameColumn();
nameColumn = StrUtil.toCamelCase(nameColumn);
String serializationAlias = dict.serializationAlias();
String chineseName = Optional.ofNullable(dict.serializationChinese()).filter(StrUtil::isNotBlank).orElse(Optional.ofNullable(comment).orElse(serializationAlias));
String serializationAlias = dict.serializationAlias();
String chineseName = Optional.ofNullable(dict.serializationChinese()).filter(StrUtil::isNotBlank).orElse(serializationAlias);
String dictFieldName = StrUtil.firstNonBlank(serializationAlias, nameColumn, fieldName + "_dictText");
ColumnDTO columnDTO = new ColumnDTO();
columnDTO.setTitle(chineseName);
columnDTO.setDataIndex(dictFieldName);
columnDTO.setCansearch(0);
columnDTO.setFieldType(1);
columnDTO.setEllipsis(false);
columnDTO.setKey(dictFieldName);
columnDTO.setShow("1");
FieldInfoDTO fieldInfo = new FieldInfoDTO();
fieldInfo.setIsStation(0);
fieldInfo.setCanEdit(false);
fieldInfo.setData(new ArrayList<>());
FieldInfoDTO.ExtendDTO extend = new FieldInfoDTO.ExtendDTO();
extend.setRowspan(1);
extend.setColspan(1);
extend.setAccept(null);
extend.setSearchSpan(null);
extend.setHideLabel(null);
String dictFieldName = StrUtil.firstNonBlank(serializationAlias, nameColumn, fieldName + "_dictText");
ColumnDTO columnDTO = new ColumnDTO();
columnDTO.setTitle(chineseName);
columnDTO.setDataIndex(dictFieldName);
columnDTO.setCansearch(0);
columnDTO.setFieldType(1);
columnDTO.setEllipsis(false);
columnDTO.setKey(dictFieldName);
columnDTO.setShow("1");
FieldInfoDTO fieldInfo = new FieldInfoDTO();
fieldInfo.setIsStation(0);
fieldInfo.setCanEdit(false);
fieldInfo.setData(new ArrayList<>());
FieldInfoDTO.ExtendDTO extend = new FieldInfoDTO.ExtendDTO();
extend.setRowspan(1);
extend.setColspan(1);
extend.setAccept(null);
extend.setSearchSpan(null);
extend.setHideLabel(null);
fieldInfo.setExtend(extend);
fieldInfo.setFieldAlias(dictFieldName);
fieldInfo.setFieldDes(chineseName);
fieldInfo.setFieldLength(255);
fieldInfo.setFieldName(dictFieldName);
fieldInfo.setFieldType(1);
fieldInfo.setFieldValue("");
fieldInfo.setIsInput(0);
fieldInfo.setIsMain(true);
fieldInfo.setIsMust(false);
fieldInfo.setMain(true);
fieldInfo.setMust(false);
fieldInfo.setSid(null);
fieldInfo.setStepSid(null);
fieldInfo.setSubType("");
fieldInfo.setTempValue("");
columnDTO.setFieldInfo(fieldInfo);
ScopedSlotsDTO scopedSlots = new ScopedSlotsDTO();
scopedSlots.setCustomRender(dictFieldName);
columnDTO.setScopedSlots(scopedSlots);
columnDTO.setWidth(100);
return columnDTO;
});
}).collect(Collectors.toList());
fieldInfo.setExtend(extend);
fieldInfo.setFieldAlias(dictFieldName);
fieldInfo.setFieldDes(chineseName);
fieldInfo.setFieldLength(255);
fieldInfo.setFieldName(dictFieldName);
fieldInfo.setFieldType(1);
fieldInfo.setFieldValue("");
fieldInfo.setIsInput(0);
fieldInfo.setIsMain(true);
fieldInfo.setIsMust(false);
fieldInfo.setMain(true);
fieldInfo.setMust(false);
fieldInfo.setSid(null);
fieldInfo.setStepSid(null);
fieldInfo.setSubType("");
fieldInfo.setTempValue("");
columnDTO.setFieldInfo(fieldInfo);
ScopedSlotsDTO scopedSlots = new ScopedSlotsDTO();
scopedSlots.setCustomRender(dictFieldName);
columnDTO.setScopedSlots(scopedSlots);
columnDTO.setWidth(100);
return columnDTO;
});
})
.collect(Collectors.toList());
return collect;
}

View File

@ -179,7 +179,9 @@ public interface ShiPeiUtil {
fieldInfo.setIsStation(0);
fieldInfo.setMain(false);
return fieldInfo;
}).collect(Collectors.toList());
})
.collect(Collectors.toList());
oList.addAll(collect);
}
}

View File

@ -29,6 +29,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.commons.lang3.tuple.Triple;
import org.jetbrains.annotations.NotNull;
import org.springframework.core.annotation.AnnotatedElementUtils;
import java.io.Serializable;
@ -324,19 +325,7 @@ public class MpUtil1<P> {
}
//融合数据,todo 联表融合
//检查当前表上是否有依赖关系,有的话依赖关系也要融合
Class<P> entityClass = ps.getEntityClass();
DependsOnService annotation = entityClass.getAnnotation(DependsOnService.class);
if (Objects.nonNull(annotation)) {
result = processMultiTable(annotation, collection, intersection);
} else {
result = singleTabProcessor(collection, intersection, ps);
}
// result = handleMerge(collection, intersection);
}
@ -345,6 +334,19 @@ public class MpUtil1<P> {
}
private @NotNull Result handleMerge(Collection<P> collection, List<P> intersection) {
Result result;
Class<P> entityClass = ps.getEntityClass();
DependsOnService annotation = entityClass.getAnnotation(DependsOnService.class);
if (Objects.nonNull(annotation)) {
result = processMultiTable(annotation, collection, intersection);
} else {
result = singleTabProcessor(collection, intersection, ps);
}
return result;
}
private boolean isByAnno() {
Class<P> entityClass = ps.getEntityClass();
Field[] fields = ReflectUtil.getFields(entityClass);

View File

@ -18,14 +18,17 @@ import com.gisroad.business.common.base.ImportContext;
import com.gisroad.business.common.base.convert.BaseConvert;
import com.gisroad.business.common.enums.ZoneType;
import com.gisroad.business.common.util.mputil.MpUtil1;
import com.gisroad.business.convert.DataZoneConvert;
import com.gisroad.business.entity.Biz1datazone;
import com.gisroad.business.entity.BizRBqgx;
import com.gisroad.business.entity.BizSpo;
import com.gisroad.business.model.AddTagInVO;
import com.gisroad.business.model.DataZoneImportDTO;
import com.gisroad.business.model.GuanLianQuyuInVO;
import com.gisroad.business.model.QuyuDaoruDTO;
import com.gisroad.business.service.IBiz1datazoneService;
import com.gisroad.business.service.IBizRBqgxService;
import com.gisroad.business.service.IBizSpoService;
import com.gisroad.business.util.DownloadUtil;
import com.gisroad.business.util.easyexcel.EasyExcelReadUtil;
import com.gisroad.business.util.graph.entity.GraphNode;
@ -46,9 +49,6 @@ import lombok.SneakyThrows;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.commons.lang3.tuple.Triple;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.*;
@ -76,17 +76,53 @@ import static cn.hutool.core.text.CharSequenceUtil.isBlank;
@RestController
@RequestMapping("/biz1datazone")
public class Biz1datazoneController extends BaseController<IBiz1datazoneService, Biz1datazone> {
@Resource
private IBizSpoService iBizSpoService;
@PostMapping("regionalAggregationRootAddition")
@ApiOperation("区域集聚根节点添加")
public void add(@RequestBody DataZoneImportDTO importDTO) {
}
@Autowired
private DataZoneConvert dataZoneConvert;
@Resource
private IBizRBqgxService iBizRBqgxService;
@PostMapping("regionalAggregationRootAddition")
@ApiOperation("区域聚合根添加")
public Boolean add(@RequestBody DataZoneImportDTO importDTO) {
MpUtil1<Biz1datazone> biz1datazoneMpUtil1 = MpUtil1.of(service);
Biz1datazone biz1datazone = new Biz1datazone();
dataZoneConvert.jdoaisdj(importDTO, biz1datazone);
Biz1datazone biz1datazone1 = biz1datazoneMpUtil1.voidcompareSaveOrUpdate(biz1datazone);
String sid = biz1datazone1.getSid();
List<BizSpo> spos = importDTO.getSpos();
spos.forEach(e -> e.setSubjectId(sid));
MpUtil1<BizSpo> bizSpoMpUtil1 = MpUtil1.of(iBizSpoService);
Triple<List<BizSpo>, List<BizSpo>, Boolean> listListBooleanTriple = bizSpoMpUtil1.voidcompareSaveOrUpdate(spos);
Boolean right = listListBooleanTriple.getRight();
return right;
}
@PostMapping("regionalAggregationRootImport")
@ApiOperation("区域聚合根导入")
public Boolean regionalAggregationRootImport(MultipartFile file, String formSid) {
// geten
// EasyExcelReadUtil.readExcelWithSpo(file, formSid)
// MpUtil1<Biz1datazone> biz1datazoneMpUtil1 = MpUtil1.of(service);
// Biz1datazone biz1datazone = new Biz1datazone();
// dataZoneConvert.jdoaisdj(importDTO, biz1datazone);
// Biz1datazone biz1datazone1 = biz1datazoneMpUtil1.voidcompareSaveOrUpdate(biz1datazone);
//
// String sid = biz1datazone1.getSid();
// List<BizSpo> spos = importDTO.getSpos();
// spos.forEach(e -> e.setSubjectId(sid));
// MpUtil1<BizSpo> bizSpoMpUtil1 = MpUtil1.of(iBizSpoService);
// Triple<List<BizSpo>, List<BizSpo>, Boolean> listListBooleanTriple = bizSpoMpUtil1.voidcompareSaveOrUpdate(spos);
// Boolean right = listListBooleanTriple.getRight();
// return right;
return null;
}
@PostMapping("changeTag")
@ApiOperation("改变标签(先删后加)")
@ -483,10 +519,10 @@ public class Biz1datazoneController extends BaseController<IBiz1datazoneService,
List<Biz1datazone> biz1datazones = TreePredicateBuilder.lambdaQuery(zoneTrees, Biz1datazone::getChildren)
.like(StrUtil.isNotBlank(keyWord), Biz1datazone::getName, keyWord)
.eq(StrUtil.isNotBlank(zoneType), Biz1datazone::getZoneType, zoneType)
.in(CollUtil.isNotEmpty(collect), Biz1datazone::getSid, collect)
.in(Biz1datazone::getParentId, Arrays.asList("0", "1", "2"))
// .and(e-> StrUtil.isNotBlank(e.getParentId()))
.listSonAndFather();
//

View File

@ -0,0 +1,22 @@
package com.gisroad.business.convert;
import com.gisroad.business.common.base.convert.BaseConvert;
import com.gisroad.business.entity.Biz1datazone;
import com.gisroad.business.entity.Biz33aihangwu;
import com.gisroad.business.model.Biz33aihangwuVo;
import com.gisroad.business.model.DataZoneImportDTO;
import org.mapstruct.Mapper;
import org.mapstruct.MappingTarget;
import org.mapstruct.NullValuePropertyMappingStrategy;
import org.mapstruct.factory.Mappers;
/**
* @author zjarlin
* @since 2024/1/12 09:58
*/
@Mapper(componentModel = "spring",nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
public interface DataZoneConvert {
void jdoaisdj(DataZoneImportDTO importDTO, @MappingTarget Biz1datazone biz1datazone);
}

View File

@ -7,6 +7,7 @@ import com.gisroad.business.common.anno.Comment;
import com.gisroad.business.common.anno.EnableImportUnique;
import com.gisroad.business.common.anno.MayBeFileName;
import com.gisroad.business.common.aop.dicttrans.anno.Dict;
import com.gisroad.business.common.aop.dicttrans.strategy.DictIgnoreShow;
import com.gisroad.business.common.entity.BaseShenheEntity;
import com.gisroad.business.util.auto_wrapper.Where;
import io.swagger.annotations.ApiModel;
@ -34,6 +35,7 @@ public class Biz31zhuangbei extends BaseShenheEntity {
@ApiModelProperty("装备分类*")
@TableField("EQUIP_PID")
@Dict("1805610011393789952")
// @DictIgnoreShow
private String equipPid;
@ApiModelProperty("装备名称*")
@ -44,6 +46,7 @@ public class Biz31zhuangbei extends BaseShenheEntity {
@ApiModelProperty("投送类型*")
@TableField("YB_SEND_TYPE")
// @DictIgnoreShow
@Dict("1805604366170984448")
private String ybSendType;

View File

@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;
import com.gisroad.business.common.entity.BaseEntity;
import com.gisroad.business.util.auto_wrapper.Where;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
@ -30,35 +31,10 @@ import com.alibaba.excel.annotation.ExcelProperty;
@TableName("BIZ_SPO")
public class BizSpo extends BaseEntity {
@ApiModelProperty("主键")
@ExcelProperty("主键")
@TableField("ID")
private String id;
@ApiModelProperty("数据来源")
@ExcelProperty("数据来源")
@TableField("DATA_SOURCE")
private String dataSource;
@ApiModelProperty("部门编号")
@ExcelProperty("部门编号")
@TableField("SYS_ORG_CODE")
private String sysOrgCode;
@ApiModelProperty("备注")
@ExcelProperty("备注")
@TableField("REMARK")
private String remark;
@ApiModelProperty("逻辑删除")
@ExcelProperty("逻辑删除")
@TableField("DELETED")
private Integer deleted;
@ApiModelProperty("表单id")
@ExcelProperty("表单id")
@TableField("FORM_SID")
@Where
private String formSid;
@ApiModelProperty("字典组id")
@ -69,16 +45,19 @@ public class BizSpo extends BaseEntity {
@ApiModelProperty("绑定对象")
@ExcelProperty("绑定对象")
@TableField("SUBJECT")
@Where
private String subject;
@ApiModelProperty("属性名")
@ExcelProperty("属性名")
@TableField("PREDICATE")
@Where
private String predicate;
@ApiModelProperty("属性值")
@ExcelProperty("属性值")
@TableField("OBJECT")
@Where
private String object;
@ApiModelProperty("绑定对象定义id")
@ -91,4 +70,4 @@ public class BizSpo extends BaseEntity {
@TableField("PREDICATE_ID")
private String predicateId;
}
}

View File

@ -14,7 +14,7 @@ import java.util.*;
@Data
public class ChaoxiTjVO {
List<ShiKuangOutVO> shikuangList = new ArrayList();
List<ShiKuangOutVO> shikuangList = new ArrayList<>();
private String nodeId;
private String name;
@Dict(tab = "BIZ_1PORT", codeColumn = "SID", nameColumn = "MAIN_CWQSM", serializationAlias = "MAIN_CWQSM", serializationChinese = "潮位起算面")
@ -67,4 +67,4 @@ public class ChaoxiTjVO {
}
}

View File

@ -4,6 +4,7 @@ import cn.afterturn.easypoi.excel.annotation.Excel;
import com.baomidou.mybatisplus.annotation.TableField;
import com.gisroad.business.common.aop.dicttrans.anno.Dict;
import com.gisroad.business.entity.Biz11chaoxi;
import com.gisroad.business.entity.BizSpo;
import com.gisroad.business.util.auto_wrapper.Where;
import com.gisroad.business.util.spohandler.entity.Spo;
import io.swagger.annotations.ApiModelProperty;
@ -15,7 +16,7 @@ import java.util.List;
@Data
public class DataZoneImportDTO {
@TableField( exist = false)
List<Spo> spos;
List<BizSpo> spos;
// @TableField( exist = false)
// List<Biz11chaoxi> chaoxis;

View File

@ -13,12 +13,6 @@ bakdm:
enableDocker: true
dbContainerName: "dm8" #不填默认dm8,不开启docker无需指定
#自动添加字段
enableAutoAddColumn: false
#检查验证码
checkCaptcha: false
#验证是否是同一个session
checkSession: false
server:
port: 7085
servlet:

View File

@ -13,12 +13,6 @@ bakdm:
enableDocker: true
dbContainerName: "dm8" #不填默认dm8,不开启docker无需指定
#自动添加字段
enableAutoAddColumn: true
#检查验证码
#验证是否是同一个session
checkSession: false
server:
port: 7085
servlet:

View File

@ -13,12 +13,6 @@ bakdm:
enableDocker: true
dbContainerName: "dm8" #不填默认dm8,不开启docker无需指定
#自动添加字段
enableAutoAddColumn: false
#检查验证码
checkCaptcha: false
#验证是否是同一个session
checkSession: false
server:
port: 7085
servlet:

View File

@ -13,12 +13,6 @@ bakdm:
enableDocker: true
dbContainerName: "dm8" #不填默认dm8,不开启docker无需指定
#自动添加字段
enableAutoAddColumn: true
#检查验证码
checkCaptcha: false
#验证是否是同一个session
checkSession: false
server:
port: 7085
servlet:

View File

@ -1,5 +1,12 @@
# 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
isCurrentLogin: true
#自动添加字段
enableAutoAddColumn: false
#检查验证码
checkCaptcha: false
#验证是否是同一个session
checkSession: false
server:
port: 7085
@ -16,7 +23,8 @@ spring:
cache:
type: simple
profiles:
active: addzero
# active: addzero
active: dev
mvc:
servlet:
load-on-startup: 10

View File

@ -16,7 +16,6 @@ import com.alibaba.excel.read.metadata.ReadSheet;
import com.gisroad.business.util.spohandler.entity.Spo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.tuple.Pair;
import org.junit.jupiter.api.Test;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
@ -60,9 +59,7 @@ public class EasyExcelReadUtil {
// 需要读取超链接 默认不读取
.extraRead(CellExtraTypeEnum.HYPERLINK)
// 需要读取合并单元格信息 默认不读取
.extraRead(CellExtraTypeEnum.MERGE)
.sheet(sheetNo)
.doRead();
.extraRead(CellExtraTypeEnum.MERGE).sheet(sheetNo).doRead();
return listener.getRows();
}
@ -107,8 +104,7 @@ public class EasyExcelReadUtil {
DataListener<T> listener = new DataListener<>();
// 这里 需要指定读用哪个class去读然后读取第一个sheet 文件流会自动关闭
EasyExcel.read(inputStream, clazz, listener)
.sheet(sheetName).doRead();
EasyExcel.read(inputStream, clazz, listener).sheet(sheetName).doRead();
return listener.getRows();
}
@ -163,10 +159,21 @@ public class EasyExcelReadUtil {
return collect.get(sheetIndex);
}
public static <T> Pair<List<T>, List<Spo>> readExcelWithSpo(String fileName, Class<T> entityClass, Function<T, ?> keyFunction, String contextTableName) {
return readExcelWithSpo(EasyExcel.read(fileName), entityClass, keyFunction, contextTableName);
}
public static <T> Pair<List<T>, List<Spo>> readExcelWithSpo(InputStream inputStream
, Class<T> entityClass, Function<T, ?> keyFunction, String contextTableName) {
return readExcelWithSpo(EasyExcel.read(inputStream), entityClass, keyFunction, contextTableName);
}
public static <T> Pair<List<T>, List<Spo>> readExcelWithSpo(File file
, Class<T> entityClass, Function<T, ?> keyFunction, String contextTableName) {
return readExcelWithSpo(EasyExcel.read(file), entityClass, keyFunction, contextTableName);
}
public static <T> Pair<List<T>, List<Spo>> readExcelWithSpo(ExcelReaderBuilder excelReaderBuilder, Class<T> entityClass, Function<T, ?> keyFunction, String contextTableName) {
ExcelReaderBuilder excelReaderBuilder = EasyExcel.read(fileName);
BiMap<Integer, String> myHeadMap = new BiMap<>(new HashMap<>());
// List<Spo> spoList = new ArrayList<>();
@ -244,4 +251,4 @@ public class EasyExcelReadUtil {
excelReaderBuilder.sheet().doRead();
return Pair.of(retList, spoRet);
}
}
}