| | |
| | | import com.alibaba.excel.context.AnalysisContext; |
| | | import com.alibaba.excel.event.AnalysisEventListener; |
| | | import com.alibaba.excel.exception.ExcelDataConvertException; |
| | | import com.alibaba.excel.read.metadata.holder.ReadSheetHolder; |
| | | import com.consum.base.BaseController; |
| | | import com.consum.base.core.utils.CommonUtil; |
| | | import com.consum.base.core.utils.FinSysTenantUtils; |
| | | import com.consum.base.pojo.FinSysTenantParam; |
| | | import com.consum.base.pojo.FinSysTenantSearchParam; |
| | | import com.consum.base.pojo.excel.ImportTenantTemplate; |
| | | import com.consum.base.service.FinSysTenantService; |
| | | import com.consum.base.service.FinSysTenantUserService; |
| | | import com.consum.model.po.FinSysTenant; |
| | |
| | | @PostMapping("import") |
| | | public ResponseValue upload(@RequestParam Long pid, MultipartFile file) throws IOException { |
| | | String originalFilename = file.getOriginalFilename(); |
| | | if (!"xls".equals(originalFilename.substring(originalFilename.lastIndexOf(".") + 1))) { |
| | | if (!originalFilename.endsWith("xls")) { |
| | | return ResponseValue.error("文件格式有误!"); |
| | | } |
| | | FinSysTenantUser sysInfo = this.getSysInfo(); |
| | |
| | | return ResponseValue.error("不能创建县(区)级以下机构"); |
| | | } |
| | | |
| | | EasyExcel.read(file.getInputStream(), FinSysTenantParam.class, new AnalysisEventListener<FinSysTenantParam>() { |
| | | LinkedList<FinSysTenantParam> finSysTenantParams = new LinkedList<>(); |
| | | EasyExcel |
| | | .read(file.getInputStream(), ImportTenantTemplate.class, new AnalysisEventListener<ImportTenantTemplate>() { |
| | | LinkedList<FinSysTenantParam> finSysTenantParams = new LinkedList<>(); |
| | | |
| | | @Override |
| | | public void invoke(FinSysTenantParam finSysTenantParam, AnalysisContext analysisContext) { |
| | | if (StringUtils.isEmpty(finSysTenantParam.getCode()) || finSysTenantParam.getCode().length() > 20) { |
| | | IllegalStateException exception = new IllegalStateException( |
| | | "第" + analysisContext.readSheetHolder().getRowIndex() + "行,机构编号不能为空或长度大于20"); |
| | | throw exception; |
| | | } |
| | | if (null != finSysTenantService.queryOneByCode(finSysTenantParam.getCode())) { |
| | | throw new IllegalStateException( |
| | | "第" + analysisContext.readSheetHolder().getRowIndex() + "行,机构编号已存在"); |
| | | } |
| | | if (StringUtils.isEmpty(finSysTenantParam.getName()) || finSysTenantParam.getName().length() > 100) { |
| | | IllegalStateException exception = new IllegalStateException( |
| | | "第" + analysisContext.readSheetHolder().getRowIndex() + "行,机构名称不能为空或长度大于100"); |
| | | throw exception; |
| | | } |
| | | finSysTenantParam.setParentId(pid); |
| | | finSysTenantParam.setStatus(1); |
| | | finSysTenantParam.setSummary("系统导入"); |
| | | finSysTenantParams.add(finSysTenantParam); |
| | | } |
| | | |
| | | @Override |
| | | public void doAfterAllAnalysed(AnalysisContext analysisContext) { |
| | | finSysTenantService.insertFinSysTenantBatch(finSysTenantParams, sysInfo, lv); |
| | | } |
| | | |
| | | @Override |
| | | public void onException(Exception exception, AnalysisContext context) { |
| | | // 如果是某一个单元格的转换异常 能获取到具体行号 |
| | | if (exception instanceof ExcelDataConvertException) { |
| | | ExcelDataConvertException excelDataConvertException = (ExcelDataConvertException)exception; |
| | | logger.error("第{}行,第{}列解析异常,数据为:{}", excelDataConvertException.getRowIndex(), |
| | | excelDataConvertException.getColumnIndex() + 1, |
| | | excelDataConvertException.getCellData().getStringValue()); |
| | | throw new IllegalStateException("第" + (excelDataConvertException.getRowIndex() + 1) + "行,第" |
| | | + (excelDataConvertException.getColumnIndex() + 1) + "列解析异常,异常数据为:[ " |
| | | + excelDataConvertException.getCellData().getStringValue() + " ]"); |
| | | } |
| | | if (exception instanceof IllegalStateException) { |
| | | throw (IllegalStateException)exception; |
| | | @Override |
| | | public void invoke(ImportTenantTemplate finSysTenantParam, AnalysisContext analysisContext) { |
| | | String code = finSysTenantParam.getCode(); |
| | | String tenantName = finSysTenantParam.getTenantName(); |
| | | ReadSheetHolder readSheetHolder = analysisContext.readSheetHolder(); |
| | | Integer rowIndex = readSheetHolder.getRowIndex() + 1; |
| | | if (StringUtils.isEmpty(code) || code.length() > 20) { |
| | | IllegalStateException exception = |
| | | new IllegalStateException("第" + rowIndex + "行,机构编号不能为空或长度大于20"); |
| | | throw exception; |
| | | } |
| | | if (null != finSysTenantService.queryOneByCode(code)) { |
| | | throw new IllegalStateException("第" + rowIndex + "行,机构编号已存在"); |
| | | } |
| | | if (StringUtils.isEmpty(tenantName) || tenantName.length() > 100) { |
| | | IllegalStateException exception = |
| | | new IllegalStateException("第" + rowIndex + "行,机构名称不能为空或长度大于100"); |
| | | throw exception; |
| | | } |
| | | FinSysTenantParam tenantParam = new FinSysTenantParam(); |
| | | tenantParam.setParentId(pid); |
| | | tenantParam.setStatus(1); |
| | | tenantParam.setSummary("系统导入"); |
| | | tenantParam.setCode(code); |
| | | tenantParam.setName(tenantName); |
| | | finSysTenantParams.add(tenantParam); |
| | | } |
| | | |
| | | } |
| | | @Override |
| | | public void doAfterAllAnalysed(AnalysisContext analysisContext) { |
| | | finSysTenantService.insertFinSysTenantBatch(finSysTenantParams, sysInfo, lv); |
| | | } |
| | | |
| | | }).doReadAll(); |
| | | @Override |
| | | public void onException(Exception exception, AnalysisContext context) { |
| | | // 如果是某一个单元格的转换异常 能获取到具体行号 |
| | | if (exception instanceof ExcelDataConvertException) { |
| | | ExcelDataConvertException excelDataConvertException = (ExcelDataConvertException)exception; |
| | | Integer rowIndex = excelDataConvertException.getRowIndex() + 1; |
| | | Integer columnIndex = excelDataConvertException.getColumnIndex(); |
| | | String stringValue = excelDataConvertException.getCellData().getStringValue(); |
| | | logger.error("第{}行,第{}列解析异常,数据为:{}", rowIndex, columnIndex, stringValue); |
| | | throw new IllegalStateException( |
| | | "第" + rowIndex + "行,第" + columnIndex + "列解析异常,异常数据为:[ " + stringValue + " ]"); |
| | | } |
| | | if (exception instanceof IllegalStateException) { |
| | | throw (IllegalStateException)exception; |
| | | } |
| | | |
| | | } |
| | | |
| | | }).doReadAll(); |
| | | |
| | | return ResponseValue.success("导入成功!", 1); |
| | | } |