若依框架实现导入功能,同时发生错误时导出错误数据

您所在的位置:网站首页 前端实现导出功能的方法 若依框架实现导入功能,同时发生错误时导出错误数据

若依框架实现导入功能,同时发生错误时导出错误数据

#若依框架实现导入功能,同时发生错误时导出错误数据| 来源: 网络整理| 查看: 265

前端调用封装好的方法,传入后台

//加载表格 function queryReload(columnsVal) { //将原表格销毁,再重新init()初始化一次即可 $("#bootstrap-table").bootstrapTable('destroy'); var options = { url: prefix + "/list", createUrl: prefix + "/add", updateUrl: prefix + "/edit/{id}", removeUrl: prefix + "/remove", exportUrl: prefix + "/export", importUrl: prefix + "/importData", importTemplateUrl: prefix + "/importTemplate", modalName: "教师发展中心工作量汇总", tableName: "bas_fzzxgzl", columns: columnsVal, showSearch: false, showRefresh: false, showToggle: false, showColumns: false, }; $.table.init(options); }

添加导入按钮事件

导入

添加导入区域

下载模板 提示:仅允许导入“xls”或“xlsx”格式文件!

在实体变量上添加@Excel注解,默认为导出导入,也可以单独设置仅导入Type.IMPORT

@Excel(name = "用户序号") private Long id; @Excel(name = "部门编号", type = Type.IMPORT) private Long deptId; @Excel(name = "用户名称") private String userName; /** 导出部门多个对象 */ @Excels({ @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT), @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT) }) private SysDept dept; /** 导出部门单个对象 */ @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT) private SysDept dept;

在Controller添加导入方法

/** * 模板下载 * * @param * @return com.ruoyi.common.core.domain.AjaxResult * @author * */ @RequiresPermissions("ndjs:fzzxgzl:view") @GetMapping("/importTemplate") @ResponseBody public AjaxResult importTemplate() { ExcelUtil util = new ExcelUtil(BasFzzxgzl.class); return util.importTemplateExcel("教师发展中心工作量数据"); } /** * 导入 * * @param file * @param updateSupport * @return com.ruoyi.common.core.domain.AjaxResult * @author * */ @Log(title = "社会实践工作量", businessType = BusinessType.IMPORT) @RequiresPermissions("ndjs:fzzxgzl:import") @PostMapping("/importData") @ResponseBody public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception { ExcelUtil util = new ExcelUtil(BasFzzxgzl.class); List fzzxgzlList = util.importExcel(file.getInputStream()); return basFzzxgzlService.importFzzxgzl(fzzxgzlList, updateSupport); }

创建一个实体类用来记录导入时的错误数据

public class BasImportRecord extends BaseEntity { private static final long serialVersionUID = 1L; /** id */ private Long id; /** 导入记录表名称 */ @Excel(name = "导入记录表名称") private String importTableName; /** 导入记录原内容行号*/ private Long importLineNum; /** 导入批次序号yyyymmddhhmmssfff */ @Excel(name = "导入批次序号yyyymmddhhmmssfff") private String importBatchNum; /** 导入的一行记录内容|分隔多列内容 */ @Excel(name = "导入的一行记录内容|分隔多列内容") private String importContent; /** 导入状态 0成功 1失败 */ @Excel(name = "导入状态 0成功 1失败") private String importState; /** 导入信息(失败原因) */ @Excel(name = "导入信息(失败原因)") private String importInfo; }

添加数据库语句

select id, import_table_name,import_line_num, import_batch_num, import_content, import_state, import_info, create_by, create_time, update_by, update_time from bas_import_record and import_table_name = #{importTableName} and import_batch_num = #{importBatchNum} and import_content = #{importContent} and import_state = #{importState} and import_info = #{importInfo} where id = #{id} insert into bas_import_record id, import_table_name, import_batch_num, import_content, import_state, import_info, create_by, create_time, update_by, update_time, remark, import_line_num, #{id}, #{importTableName}, #{importBatchNum}, #{importContent}, #{importState}, #{importInfo}, #{createBy}, #{createTime}, #{updateBy}, #{updateTime}, #{remark}, #{importLineNum}, update bas_import_record import_table_name = #{importTableName}, import_batch_num = #{importBatchNum}, import_content = #{importContent}, import_state = #{importState}, import_info = #{importInfo}, create_by = #{createBy}, create_time = #{createTime}, update_by = #{updateBy}, update_time = #{updateTime}, remark = #{remark}, import_line_num = #{importLineNum}, where id = #{id} delete from bas_import_record where id = #{id} delete from bas_import_record where id in #{id} SELECT a.* FROM ( SELECT date_format(max( r.create_time ), '%Y-%m-%d %H:%i:%s') AS createTime, count( * ) AS count, r.import_table_name as importTableName, r.import_batch_num as importBatchNum, count( IF ( r.import_state = 0, TRUE, NULL ) ) AS succeedCount, count( IF ( r.import_state = 1, TRUE, NULL ) ) AS failureCount FROM bas_import_record r WHERE r.create_time IS NOT NULL AND r.import_table_name = #{importTableName} AND r.create_by = #{createBy} GROUP BY r.import_batch_num) a ORDER BY a.createTime DESC import_state = '1' and import_table_name = #{tableName} and import_batch_num = #{batchNum}

在servlet层添加自定义方法

public AjaxResult importFzzxgzl(List basFzzxgzlList, Boolean isUpdateSupport) { if (StringUtils.isNull(basFzzxgzlList) || basFzzxgzlList.size() == 0) { return AjaxResult.error("导入教师发展中心工作量数据不能为空!"); } try { basFzzxgzlList.get(0).getJsgh(); }catch (Exception ex){ return AjaxResult.error("导入文件与模板不符!"); } if (basFzzxgzlList.size() > 500) { return AjaxResult.error("导入教师发展中心工作量不能超过500条!"); } int successNum = 0; int failureNum = 0; String importBatchBum = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); for (int i = 0; i failureNum++; //存在异常 basImportRecord.setImportLineNum((long) i + 1); basImportRecord.setImportState("1"); String error = ""; for (int j = 0; j successNum++; //不存在异常 basImportRecord.setImportLineNum((long) i + 1); basImportRecord.setImportState("0"); basFzzxgzl.setJsgh(fzzxgzl.getJsgh()); String name = fzzxgzl.getXm() + "(" + fzzxgzl.getJsgh() + ")"; basFzzxgzl.setXm(name); basFzzxgzl.setKkyxbh(fzzxgzl.getKkyxbh()); basFzzxgzl.setKkyxmc(fzzxgzl.getKkyxmc()); basFzzxgzl.setDirectingLoad(fzzxgzl.getDirectingLoad()); basFzzxgzl.setTeachingLoad(fzzxgzl.getTeachingLoad()); //basFzzxgzl.setWaitLoad(fzzxgzl.getWaitLoad()); basFzzxgzl.setOtherLoad(fzzxgzl.getOtherLoad()); basFzzxgzl.setSsYear(fzzxgzl.getSsYear()); basFzzxgzl.setRemark(fzzxgzl.getRemark()); // 新增 insertBasFzzxgzl(basFzzxgzl); } basImportRecord.setCreateTime(DateUtils.getNowDate()); basImportRecord.setUpdateTime(DateUtils.getNowDate()); basImportRecordMapper.insertBasImportRecord(basImportRecord); } if (failureNum > 0) { return AjaxResult.error("导入成功" + successNum + "条数据,导入失败" + failureNum + "条数据", importBatchBum); } else { return AjaxResult.success("导入成功" + successNum + "条数据"); } }

添加自定义的验证导入数据的方法

public Map checkImportError(BasFzzxgzl fzzxgzl) { Map map = new HashMap(); JSONArray jsonAdd = new JSONArray(); if (StringUtils.isBlank(fzzxgzl.getJsgh())) { jsonAdd.add("教师工号不能为空"); map.put("error", jsonAdd); } else { if (fzzxgzl.getJsgh().length() > 20) { jsonAdd.add("教师工号不能超过20个字符"); map.put("error", jsonAdd); } } if (StringUtils.isBlank(fzzxgzl.getXm())) { jsonAdd.add("教师姓名不能为空"); map.put("error", jsonAdd); } else { if (fzzxgzl.getXm().length() > 50) { jsonAdd.add("教师姓名不能超过50个字符"); map.put("error", jsonAdd); } } if (StringUtils.isNotBlank(fzzxgzl.getJsgh()) && StringUtils.isNotBlank(fzzxgzl.getXm())) { int jsCount = basYjsgzlMapper.selectCountByJsghAndXm(fzzxgzl.getJsgh(), fzzxgzl.getXm()); if (jsCount == 0) { jsonAdd.add("教师姓名与教师工号不匹配"); map.put("error", jsonAdd); } else { int jyCount = basYjsgzlMapper.selectCountByJsghAndYxbh(fzzxgzl.getJsgh(), fzzxgzl.getKkyxbh()); if (jyCount == 0) { jsonAdd.add("教师与学院不匹配"); map.put("error", jsonAdd); } } } if (StringUtils.isBlank(fzzxgzl.getKkyxbh())) { jsonAdd.add("学院编号不能为空"); map.put("error", jsonAdd); } else { if (fzzxgzl.getKkyxbh().length() > 20) { jsonAdd.add("学院编号不能超过20个字符"); map.put("error", jsonAdd); } } if (StringUtils.isBlank(fzzxgzl.getKkyxmc())) { jsonAdd.add("学院名称不能为空"); map.put("error", jsonAdd); } else { if (fzzxgzl.getKkyxmc().length() > 100) { jsonAdd.add("学院名称不能超过100个字符"); map.put("error", jsonAdd); } } if (StringUtils.isNotBlank(fzzxgzl.getKkyxbh()) && StringUtils.isNotBlank(fzzxgzl.getKkyxmc())) { int xyCount = basYjsgzlMapper.selectCountByYxbhAndYxmc(fzzxgzl.getKkyxbh(), fzzxgzl.getKkyxmc()); if (xyCount == 0) { jsonAdd.add("学院名称与学院编号不匹配"); map.put("error", jsonAdd); } } if (fzzxgzl.getDirectingLoad() != null) { if (fzzxgzl.getDirectingLoad().toString().length() > 10) { jsonAdd.add("导师工作量不能超过10个字符"); map.put("error", jsonAdd); } else { if (fzzxgzl.getDirectingLoad().toString().indexOf(".") > 8) { jsonAdd.add("导师工作量整数部分不能超过10位"); map.put("error", jsonAdd); } else { if (fzzxgzl.getDirectingLoad().toString().indexOf(".") == -1) { if (fzzxgzl.getDirectingLoad().toString().length() > 8) { jsonAdd.add("导师工作量整数部分不能超过10位"); map.put("error", jsonAdd); } } } } if(fzzxgzl.getDirectingLoad().toString().charAt(0)=='-'){ jsonAdd.add("导师工作量不能为负数"); map.put("error",jsonAdd); } } if (fzzxgzl.getTeachingLoad() != null) { if (fzzxgzl.getTeachingLoad().toString().length() > 10) { jsonAdd.add("助教工作量不能超过10个字符"); map.put("error", jsonAdd); } else { if (fzzxgzl.getTeachingLoad().toString().indexOf(".") > 8) { jsonAdd.add("助教工作量整数部分不能超过10位"); map.put("error", jsonAdd); } else { if (fzzxgzl.getTeachingLoad().toString().indexOf(".") == -1) { if (fzzxgzl.getTeachingLoad().toString().length() > 8) { jsonAdd.add("助教工作量整数部分不能超过10位"); map.put("error", jsonAdd); } } } } if(fzzxgzl.getTeachingLoad().toString().charAt(0)=='-'){ jsonAdd.add("助教工作量不能为负数"); map.put("error",jsonAdd); } } /* if (fzzxgzl.getWaitLoad() != null) { if (fzzxgzl.getWaitLoad().toString().length() > 10) { jsonAdd.add("此列名称待定不能超过10个字符"); map.put("error", jsonAdd); } else { if (!StringUtils.isNumeric(fzzxgzl.getWaitLoad().toString())) { jsonAdd.add("此列名称待定必须是数字"); map.put("error", jsonAdd); } } }*/ if (fzzxgzl.getOtherLoad() != null) { if (fzzxgzl.getOtherLoad().toString().length() > 10) { jsonAdd.add("其他工作量不能超过10个字符"); map.put("error", jsonAdd); } else { if (fzzxgzl.getOtherLoad().toString().indexOf(".") > 8) { jsonAdd.add("其他工作量整数部分不能超过10位"); map.put("error", jsonAdd); } else { if (fzzxgzl.getOtherLoad().toString().indexOf(".") == -1) { if (fzzxgzl.getOtherLoad().toString().length() > 8) { jsonAdd.add("其他工作量整数部分不能超过10位"); map.put("error", jsonAdd); } } } } if(fzzxgzl.getOtherLoad().toString().charAt(0)=='-'){ jsonAdd.add("其他工作量不能为负数"); map.put("error",jsonAdd); } } if (!StringUtils.isBlank(fzzxgzl.getRemark())) { if (fzzxgzl.getRemark().length() > 50) { jsonAdd.add("备注不能超过50个字符"); map.put("error", jsonAdd); } } if (!StringUtils.isBlank(fzzxgzl.getSsYear())) { if (fzzxgzl.getSsYear().length() > 5) { jsonAdd.add("所属时间不能超过5个字符"); map.put("error", jsonAdd); } else { if (!StringUtils.isNumeric(fzzxgzl.getSsYear())) { jsonAdd.add("所属时间必须是整数数字"); map.put("error", jsonAdd); } } } else { jsonAdd.add("所属时间不能为空"); map.put("error", jsonAdd); } map.put("error", jsonAdd); return map; }

导出错误数据的方法

public HSSFWorkbook drawExport(List list) { // 创建excel文件对象 HSSFWorkbook wb = new HSSFWorkbook(); // 创建sheet Sheet sheet = wb.createSheet("sheet1"); //表头字体 Font headerFont = wb.createFont(); headerFont.setFontName("微软雅黑"); headerFont.setFontHeightInPoints((short) 18); headerFont.setColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex()); //正文字体 Font contextFont = wb.createFont(); contextFont.setFontName("微软雅黑"); contextFont.setFontHeightInPoints((short) 12); headerFont.setColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex()); //表头样式,左右上下居中 CellStyle headerStyle = wb.createCellStyle(); headerStyle.setFont(headerFont); headerStyle.setAlignment(HorizontalAlignment.CENTER);// 左右居中 headerStyle.setVerticalAlignment(VerticalAlignment.CENTER);// 上下居中 headerStyle.setLocked(true); headerStyle.setWrapText(false);// 自动换行 headerStyle.setBorderBottom(BorderStyle.MEDIUM); //下边框 headerStyle.setBorderLeft(BorderStyle.MEDIUM);//左边框 headerStyle.setBorderTop(BorderStyle.MEDIUM);//上边框 headerStyle.setBorderRight(BorderStyle.MEDIUM);//右边框 // 单元格样式,左右上下居中 边框 CellStyle commonStyle = wb.createCellStyle(); commonStyle.setFont(contextFont); commonStyle.setAlignment(HorizontalAlignment.CENTER);// 左右居中 commonStyle.setVerticalAlignment(VerticalAlignment.CENTER);// 上下居中 commonStyle.setLocked(true); commonStyle.setWrapText(false);// 自动换行 commonStyle.setBorderBottom(BorderStyle.MEDIUM); //下边框 commonStyle.setBorderLeft(BorderStyle.MEDIUM);//左边框 commonStyle.setBorderTop(BorderStyle.MEDIUM);//上边框 commonStyle.setBorderRight(BorderStyle.MEDIUM);//右边框 // 行号 int rowNum = 0; Row r3 = sheet.createRow(rowNum++); r3.setHeight((short) 700); String[] row = {"教师工号", "教师名称", "开课院系编号", "开课院系名称", "导师工作量", "助教工作量", "其他工作量", "所属年份", "备注", "失败原因"}; for (int i = 0; i String[] content = bir.getImportContent().split("\\|"); Row tempRow = sheet.createRow(rowNum++); tempRow.setHeight((short) 500); // 循环单元格填入数据 for (int j = 0; j tempValue = StringUtils.isBlank(content[j]) ? "" : content[j]; } else { tempValue = StringUtils.isBlank(bir.getImportInfo()) ? "" : bir.getImportInfo(); } tempCell.setCellValue(tempValue); } } for (int o = 0; o List list = basImportRecordMapper.selectByTableNameAndBatchNum(tableName,importBatchBum); HSSFWorkbook wb = new HSSFWorkbook(); if(tableName.equals("bas_fzzxgzl")){ //教师发展中心工作量 wb = basFzzxgzlService.drawExport(list); } //响应到客户端 try { response.setContentType("multipart/form-data"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-Disposition", "attachment;fileName=" + FileUtils.setFileDownloadHeader(request, fileName+importBatchBum+"批次导入失败记录表.xls")); OutputStream outputStream = response.getOutputStream(); wb.write(outputStream); outputStream.flush(); outputStream.close(); } catch (Exception e) { log.error("下载文件失败", e); } }

注意此方法中的tableName.equals(“bas_fzzxgzl”)这个bas_fzzxgzl必须和前端页面中的 tableName: “bas_fzzxgzl”, 相对应



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3