public static Result assembleExcelData(Class entryClass, Map<Integer, String[]> excelData,
Map<String,Object> domainCodes){
//保存返回的结果
Result result = new Result();
//组装后的数据LIST
List<Object> returnList = new ArrayList<>();
//保存校验失败信息
StringBuilder errorMsg = new StringBuilder();
//循环excel数据
((i,cells)->{
Object vo = null;
try {
//按照传入的Class,生成对应实例
vo= ();
} catch (Exception e) {
();
}
//获取并循环Bean中的所有字段,进行校验和组装
for (Field field : ()) {
//如果包含有ImportValidation注解的话,才进行处理。
if ((ImportValidation.class)) {
ImportValidation annotation = (ImportValidation.class);
//cell下表
int index = x();
//字典Code
String domainCode = ();
//是否必填
boolean nullAble = ();
//字段名称
String name = ();
//获取单元格内容,并前后去空格处理
String cellData = cells[index].trim();
/*如果字段为空,且字段设置不能为空,则进行错误提醒*/
try {
//若必填,则进行判断校验并提醒
if ((cellData) && !nullAble) {
("第").append(i).append("行: ").append(name).append("字段不能为空!\r\n");
}
/*如果字典编码为空,则可以直接赋值*/
else if ((domainCode) || (cellData)) {
//给对应字段赋值
setFiled(field, vo, cellData);
} else {
//进行字典转换
List<Map> domains = (List<Map>) domainCodes.get(domainCode);
boolean match = false;
for (Map map : domains) {
if (map.get("TEXT").equals(cellData)) {
//给对应字段赋值
setFiled(field, vo, String.valueOf(map.get("VALUE")));
match = true;
break;
}
}
/*如果没有匹配,则转换失败*/
if (!match) {
("第").append(i).append("行: ").append(name).append("字段字典值不存在!!\r\n");
}
}
} catch (Exception e) {
("第").append(i).append("行: ").append(name).append("字段填写格式不正确!!\r\n");
}
}
}
//组装LIST
returnList.add(vo);
});
//如果有错误信息的话,返回错误信息,返回错误标记
if (errorMsg.length()>0){
result = ();
(());
}
//放入组装后的LIST。校验失败的字段值为空
(returnList);
return result;
}
//反射给Filed赋值
public static void setFiled(Field filed,Object vo,String data) throws IllegalAccessException {
try {
//当单元格值不为空的时候才需要进行赋值操作
if ((data)){
//获取Bean 属性字段的类型
Type fileType = ();
(true);
//如果是String
if ((String.class)){
filed.set(vo,data);
}
//如果是int
else if((int.class)||(Integer.class)){
filed.set(vo,(data));
}
//如果是Double
else if((Double.class)||(double.class)){
filed.set(vo,(data));
}
//如果是Long
else if((Long.class)||(long.class)){
filed.set(vo,(data));
}
//如果是BigDecimal
else if((BigDecimal.class)){
filed.set(vo,new BigDecimal(data));
}
//如果是日期
else if((Date.class)){
filed.set(vo, 8601DateTime(data));
}
}
} catch (Exception e) {
throw e;
}
}
复制代码