依赖和前端的东西和我上一篇一样:
Controller:
@Transactional(rollbackFor = Exception.class)
@PostMapping("/importExcel")
@ApiOperation("导入")
@LogOperation("导入")
public Result importExcel2(@RequestParam("file") MultipartFile file, @RequestParam Map<String, String> params) {
//excel 数据是否有异常可插入
Boolean success = false;
//表格数据
List<FysjtsygtDTO> list = new ArrayList<FysjtsygtDTO>();
Map map = new HashMap();
map = ExcelUtils.saveAndAnalysisExcel(file, BIMConstants.ZHGL_DADJ);//返回数据源
List daoruExcel = new ArrayList();
daoruExcel = (List) map.get("ExcelList");
//失败原因
StringBuilder errorReason = new StringBuilder();
try {
if (daoruExcel.size() > 0) {
//外层循环取数据集合,从第三列获取 到倒数第二行结束。根据你的表格格式来。
int size = daoruExcel.size()-2;
for (int i = 4; i < size ; i++) //noinspection AlibabaRemoveCommentedCode
{
FysjtsygtDTO fysjtsygtDTO = new FysjtsygtDTO();
List dataList = (List) daoruExcel.get(i);
String id = UUIDHexGenerator.getUUID();
// 第1列 : 序号
String fyOrder = dataList.get(0).toString().trim();
// 第2列 : 企业名称
String fysjtQyName = dataList.get(1).toString().trim();
// 第3列 : 企业性质name
String orgXzName = dataList.get(2).toString().trim();
// 第4列 : 线名
String lineName = dataList.get(3).toString().trim();
// 第5列 : 起点
String smile = dataList.get(4).toString().trim();
// 第6列 : 终点
String emile = dataList.get(5).toString().trim();
// 第7列 : 省
String shengName = dataList.get(6).toString().trim();
// 第8列 : 市
String shiName = dataList.get(7).toString().trim();
// 第9列 : 县
String xianName = dataList.get(8).toString().trim();
// 第10列 : 详细地址
String fysjtAddress = dataList.get(9).toString().trim();
// 第11列 : 宗地名称
String zdName = dataList.get(10).toString().trim();
// 第12列 : 土地证号
String zdCode = dataList.get(11).toString().trim();
// 第13列 : 宗地面积
String zdAreaSyq = dataList.get(12).toString().trim();
// 第14列 : 权利人
String zdOwner = dataList.get(13).toString().trim();
// 第15列 : 土地性质
String zdSyqtypeName = dataList.get(14).toString().trim();
// 第16列 : 使用面积
String fysjtAreaSy = dataList.get(15).toString().trim();
// 第17列 : 房屋面积
String fysjtAreaFw = dataList.get(16).toString().trim();
// 第18列 : 房屋所有权人
String fysjtFwOwner = dataList.get(17).toString().trim();
// 第29列 : 备注
String fysjtDesc = dataList.get(18).toString().trim();
int spanNum = i + 1;
if (StringUtils.isEmpty(fysjtQyName)) {
errorReason.append("第" + spanNum + "行,第1列;企业名称不能为空!!!");
break;
}
if (StringUtils.isEmpty(orgXzName)) {
errorReason.append("第" + spanNum + "行,第2列;企业性质不能为空!!!");
break;
}
if (StringUtils.isEmpty(zdCode)) {
errorReason.append("第" + spanNum + "行,第12列;土地证号不能为空!!!");
break;
}
if (StringUtils.isEmpty(shengName)) {
errorReason.append("第" + spanNum + "行,第7列;省不能为空!!!");
break;
}
if (StringUtils.isEmpty(shiName)) {
errorReason.append("第" + spanNum + "行,第8列;市不能为空!!!");
break;
}
if (StringUtils.isEmpty(xianName)) {
errorReason.append("第" + spanNum + "行,第9列;县不能为空!!!");
break;
}
if (StringUtils.isEmpty(fysjtAreaSy)) {
errorReason.append("第" + spanNum + "行,第16列;使用土地面积不能为空!!!");
break;
}
if (StringUtils.isEmpty(fysjtAreaFw)) {
errorReason.append("第" + spanNum + "行,第17列;房屋面积不能为空!!!");
break;
}
//数量需判断是否为数字
if (!isInteger(fysjtAreaSy)) {
success = false;
errorReason.append("第" + spanNum + "行,第16列" + fysjtAreaSy + ":数据格式异常,请填写数字!!!");
break;
}
if (!isInteger(fysjtAreaFw)) {
success = false;
errorReason.append("第" + spanNum + "行,第17列" + fysjtAreaFw + ":数据格式异常,请填写数字!!!");
break;
}
fysjtsygtDTO.setId(id);
//对象其他的set方法省略
//判断是否存在重复数据
// Integer ifDa = daCommonService.ifDacode(fysjtsygtDTO);
// if(ifDa > 0){
// success = false;
// errorReason.append("第"+i+"行第一列"+fysjtQyName+",该档案系统中已存在!!!");
// break;}
list.add(fysjtsygtDTO);
success = true;
}
//excel填报数据无异常可入库
if (success) {
fysjtsygtService.saveBatchfys(list);//批量插入
}
}
//无异常数据
if (StringUtils.isEmpty(errorReason.toString())) {
return new Result().ok("数据导入成功");
}
} catch (Exception e) {
e.printStackTrace();
}
return new Result().error(errorReason.toString());
}
/**
* 利用正则表达式判断字符串是否是数字
* @param str
* @return
*/
public boolean isInteger(String str){
String z = "[0-9]*";
Pattern pattern = Pattern.compile(z);
Matcher isNum = pattern.matcher(str);
if( !isNum.matches() ){
return false;
}
return true;
}