由于觉得公司对于导入数据处理的五花八门有特别啰嗦,所以写着这么一个工具方法供大家用,专门处理导入的excel数据
/**
* 标准化导入,我不敢保证我写的就是导入的标准,只是希望这件事能标准起来
* @param list excal中读取出的数据
* @param keylist 数据校验索引,目前支持的规则:含"*"的列为必填项,含"?"的列为必填项且不可重复,含"%"的列只能为整数,含"[]"的列只填写[]中的内容(注:选项用","隔开,","必须为英文且选项两边没有空格)
* @param importDataHandler 扩展类,其中包含两个方法:一个是需要对数据进行特殊验证的方法, 另一个操作整理后的数据
*/
public String standardImport(List
public interface ImportDataHandler {
/**
* 需要特殊验证部分字段
* @param importitem 导入的一行数据
* @param errlog 错误日志,验证失败记录在这里
* @param excelRow 当前验证的行数
*/
void checkData(Map importitem, List errlog, int excelRow) throws Exception;
/**
* 插入导入的数据
* @param insertlist 整理后的数据
*/
void insertData(List> insertlist) throws Exception;
}
使用示例:
//导入学生
@Override
public String tx_importStudentPerson(final User user, final Map data,
List> list) throws Exception {
//建立数据校验索引
final Map keylist = new HashMap();
keylist.put("personname", "*姓名");
keylist.put("majorname", "*专业");
keylist.put("sexname", "*性别[男,女]");
keylist.put("idcard", "?身份证号");
keylist.put("academicdegree", "学位");
keylist.put("email", "邮箱*");
keylist.put("gradeyear", "%届别(例如:2018)");
keylist.put("highestdegree", "学历[无,大专,本科,研究生]");
keylist.put("hospital", "所属医院");
keylist.put("jobnum", "?工号");
keylist.put("nation", "民族");
keylist.put("phoneno", "?手机号码");
keylist.put("school", "所属学校");
keylist.put("sourceatudenttype", "*学员类型[单位人,研究生,社会人]");
keylist.put("studentyears", "*学年");
keylist.put("tutor", "导师");
keylist.put("roundversion", "*大纲版本");
return toolstservice.standardImport(list, keylist, new ImportDataHandler() {
@Override
public void checkData(Map importitem, List errlog, int excelRow) throws Exception {
//身份证号验证
if(basicDataService.checkIdcard(importitem)) {
String err = "第"+excelRow+"行错误:\""+keylist.get("idcard")+"\"列所填写的"+importitem.get("idcard")+"与系统已有人员重复!";
errlog.add(err);
}
//专业名称验证
List> majorlist = basicDataService.getmajorbymajorname(importitem);
if(majorlist.size() == 1) {
importitem.put("majorid", majorlist.get(0).get("majorsubjectid"));
} else {
String err = "第"+excelRow+"行错误:\""+keylist.get("majorname")+"\"列所填写的"+importitem.get("majorname")+"与系统数据不匹配!";
errlog.add(err);
}
}
@Override
public void insertData(List> insertlist) throws Exception {
for(Map item : insertlist) {
String personid = toolstservice.getNumserialnumber("1");
item.put("personid", personid);
//学员人员类型为1
item.put("persontype", 1);
item.put("sex", "男".equals(item.get("sexname")) ? "1" : "0");
//添加人员表
personDao.addPerson(data);
//添加学生表
personDao.addPersonStudent(data);
}
}
});
}