#set($mapObject ="Map") ## 导入实例信息添加 #macro(TemlateDownloadDemo $MapName $Field) #set($key = $Field.config.jnpfKey) #set($mul = $Field.multiple) #set($level = $Field.level) #set($vModelThis = $Field.vModel) #if($Field.beforeVmodel) #set($vModelThis = $Field.beforeVmodel) #end #if($key == "createUser" || $key == "modifyUser" || $key == "createTime" || $key == "modifyTime" || $key == "currOrganize" || $key == "currPosition" || $key == "currDept" || $key == "billRule") ${MapName}.put("${vModelThis}", "系统自动生成"); #elseif($key == 'organizeSelect') #if($mul) ${MapName}.put("${vModelThis}", "例:引迈信息/产品部,引迈信息/技术部"); #else ${MapName}.put("${vModelThis}", "例:引迈信息/技术部"); #end #elseif($key == "depSelect") #if($mul) ${MapName}.put("${vModelThis}", "例:产品部/部门编码,技术部/部门编码"); #else ${MapName}.put("${vModelThis}", "例:技术部/部门编码"); #end #elseif($key == "posSelect") #if($mul) ${MapName}.put("${vModelThis}", "例:技术经理/岗位编码,技术员/岗位编码"); #else ${MapName}.put("${vModelThis}", "例:技术员/岗位编码"); #end #elseif($key == "userSelect") #if($mul) ${MapName}.put("${vModelThis}", "例:张三/账号,李四/账号"); #else ${MapName}.put("${vModelThis}", "例:张三/账号"); #end #elseif($key == "usersSelect") #if($mul) ${MapName}.put("${vModelThis}", "例:方方/账号,技术部/部门编码"); #else ${MapName}.put("${vModelThis}", "例:方方/账号"); #end #elseif($key == "roleSelect") #if($mul) ${MapName}.put("${vModelThis}", "例:研发人员/角色编码,测试人员/角色编码"); #else ${MapName}.put("${vModelThis}", "例:研发人员/角色编码"); #end #elseif($key == "groupSelect") #if($mul) ${MapName}.put("${vModelThis}", "例:A分组/分组编码,B分组/分组编码"); #else ${MapName}.put("${vModelThis}", "例:A分组/分组编码"); #end #elseif($key == 'datePicker') ${MapName}.put("${vModelThis}", "例: ${Field.format}"); #elseif($key == 'timePicker') ${MapName}.put("${vModelThis}", "例: ${Field.format}"); #elseif($key == 'areaSelect') #if($level==0) #if($mul) ${MapName}.put("${vModelThis}", "例:福建省,广东省"); #else ${MapName}.put("${vModelThis}", "例:福建省"); #end #elseif($level==1) #if($mul) ${MapName}.put("${vModelThis}", "例:福建省/莆田市,广东省/广州市"); #else ${MapName}.put("${vModelThis}", "例:福建省/莆田市"); #end #elseif($level==2) #if($mul) ${MapName}.put("${vModelThis}", "例:福建省/莆田市/城厢区,广东省/广州市/荔湾区"); #else ${MapName}.put("${vModelThis}", "例:福建省/莆田市/城厢区"); #end #elseif($level==3) #if($mul) ${MapName}.put("${vModelThis}", "例:福建省/莆田市/城厢区/霞林街道,广东省/广州市/荔湾区/沙面街道"); #else ${MapName}.put("${vModelThis}", "例:福建省/莆田市/城厢区/霞林街道"); #end #end #else ${MapName}.put("${vModelThis}", ""); #end #end ## 主子副,entity转成map isGetInfo是否不转换数据详情 isDetail 是否转换数据的详情 #macro(EntityToMap) ${mapObject} ${name}Map=JsonUtil.entityToMap(entity); ${name}Map.put("id", ${name}Map.get("${pKeyNameOriginal}")); //副表数据 #foreach($child in ${columnTableHandle}) ${child.modelUpName}Entity ${child.modelLowName}Entity = entity.get${child.modelUpName}(); if(ObjectUtil.isNotEmpty(${child.modelLowName}Entity)){ ${mapObject} ${child.modelLowName}Map=JsonUtil.entityToMap(${child.modelLowName}Entity); for(String key:${child.modelLowName}Map.keySet()){ ${name}Map.put("jnpf_${child.tableName}_jnpf_"+key,${child.modelLowName}Map.get(key)); } } #end //子表数据 #foreach($grid in ${childTableHandle}) List<${grid.aliasUpName}Entity> ${grid.aliasLowName}List = entity.get${grid.aliasUpName}(); ${name}Map.put("${grid.tableModel}",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(${grid.aliasLowName}List))); ${name}Map.put("${grid.aliasLowName}List",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(${grid.aliasLowName}List))); #end #end ###########################以上为通用宏,以下是controller方法################################# ## 获取列表信息 #macro(GetList) /** * 列表 * * @param ${name}Pagination * @return */ @Operation(summary = "获取列表") @PostMapping("/getList") public ActionResult list(@RequestBody ${Name}Pagination ${name}Pagination)throws Exception{ List<${table.entityName}> list= ${serviceName}.getList(${name}Pagination); List<${mapObject}> realList=new ArrayList<>(); for (${Name}Entity entity : list) { #EntityToMap() realList.add(${name}Map); } //数据转换 boolean isPc = "pc".equals(ServletUtil.getHeader("jnpf-origin" )); realList = generaterSwapUtil.swapDataList(realList, ${Name}Constant.getFormData(), ${Name}Constant.getColumnData(), ${name}Pagination.getModuleId(),isPc?${lineEdit}:false); #if($isFlow) //流程状态添加 generaterSwapUtil.getFlowStatus(realList); #end #if($treeTable || $groupTable) if(isPc){ //分组和树形的树形数据转换 realList = generaterSwapUtil.swapDataList(realList, ${Name}Constant.getColumnData(), "${peimaryKeyname}"); } #end //返回对象 PageListVO vo = new PageListVO(); vo.setList(realList); PaginationVO page = JsonUtil.getJsonToBean(${name}Pagination, PaginationVO.class); vo.setPagination(page); return ActionResult.success(vo); } #end ## 新增 #macro(CreateMethod) /** * 创建 * * @param ${name}Form * @return */ @PostMapping(#if($isFlow)"/{id}"#end) @Operation(summary = "创建") public ActionResult create(#if($isFlow)@PathVariable("id") String id, #end@RequestBody @Valid ${Name}Form ${name}Form) { String b = ${serviceName}.checkForm(${name}Form,0); if (StringUtil.isNotEmpty(b)){ return ActionResult.fail(b ); } try{ ${name}Service.saveOrUpdate(${name}Form,#if($isFlow) id #else null #end,true); }catch(Exception e){ return ActionResult.fail(MsgCode.FA028.get()); } return ActionResult.success(MsgCode.SU001.get()); } #end ## 编辑 #macro(UpdateMethod) /** * 编辑 * @param id * @param ${name}Form * @return */ @PutMapping("/{id}") @Operation(summary = "更新") public ActionResult update(@PathVariable("id") String id,@RequestBody @Valid ${Name}Form ${name}Form, @RequestParam(value = "isImport", required = false) boolean isImport){ ${Name}Entity entity= ${name}Service.getInfo(id); if(entity!=null){ ${name}Form.set${peimaryKeyName}(String.valueOf(entity.get${peimaryKeyName}())); if (!isImport) { String b = ${name}Service.checkForm(${name}Form,1); if (StringUtil.isNotEmpty(b)){ return ActionResult.fail(b ); } } try{ ${name}Service.saveOrUpdate(${name}Form,id,false); }catch (DataException e1){ return ActionResult.fail(e1.getMessage()); }catch(Exception e){ return ActionResult.fail(MsgCode.FA029.get()); } return ActionResult.success(MsgCode.SU004.get()); }else{ return ActionResult.fail(MsgCode.FA002.get()); } } #end ## 获取详情(不转数据) #macro(GetInfoMethod) /** * 获取详情(编辑页) * 编辑页面使用-不转换数据 * @param id * @return */ @Operation(summary = "信息") @GetMapping("/{id}") public ActionResult info(@PathVariable("id") String id){ ${Name}Entity entity= ${name}Service.getInfo(id); if(entity==null){ return ActionResult.fail(MsgCode.FA001.get()); } ## #EntityToMap() ${name}Map = generaterSwapUtil.swapDataForm(${name}Map,${Name}Constant.getFormData(),${Name}Constant.TABLEFIELDKEY,${Name}Constant.TABLERENAMES); return ActionResult.success(${name}Map); } #end ## 详情(转换数据) #macro(GetDetailMethod) /** * 表单信息(详情页) * 详情页面使用-转换数据 * @param id * @return */ @Operation(summary = "表单信息(详情页)") @GetMapping("/detail/{id}") public ActionResult detailInfo(@PathVariable("id") String id){ ${Name}Entity entity= ${name}Service.getInfo(id); if(entity==null){ return ActionResult.fail(MsgCode.FA001.get()); } #EntityToMap() boolean isPc = "pc".equals(ServletUtil.getHeader("jnpf-origin" )); ${name}Map = generaterSwapUtil.swapDataDetail(${name}Map,${Name}Constant.getFormData(),"${VisualDevId}",isPc?${lineEdit}:false); //子表数据 #foreach($grid in ${childTableHandle}) ${name}Map.put("${grid.aliasLowName}List",${name}Map.get("${grid.tableModel}")); #end return ActionResult.success(${name}Map); } #end ## 删除 #macro(DeleteMethod) /** * 删除 * @param id * @return */ @Operation(summary = "删除") @DeleteMapping("/{id}") #if(${DS}) @DSTransactional #else @Transactional #end public ActionResult delete(@PathVariable("id") String id,@RequestParam(name = "forceDel",defaultValue = "false") boolean forceDel) throws Exception{ ${Name}Entity entity= ${name}Service.getInfo(id); if(entity!=null){ #if($isFlow) if(!forceDel){ String errMsg = generaterSwapUtil.deleteFlowTask(entity.getFlowTaskId()); if (StringUtil.isNotEmpty(errMsg)) { throw new DataException(errMsg); } } #end #if($logicalDelete) //假删除 entity.setDeleteMark(1); entity.setDeleteUserId(userProvider.get().getUserId()); entity.setDeleteTime(new Date()); ${name}Service.setIgnoreLogicDelete().updateById(entity); #else //主表数据删除 ${name}Service.delete(entity); ## 副表 #if(${columnTableHandle.size()}>0) #foreach($cl in ${columnTableHandle}) QueryWrapper<${cl.modelUpName}Entity> queryWrapper${cl.modelUpName}=new QueryWrapper<>(); queryWrapper${cl.modelUpName}.lambda().eq(${cl.modelUpName}Entity::get${cl.relationUpField},entity.get${cl.mainUpKey}()); //副表数据删除 ${cl.modelLowName}Service.remove(queryWrapper${cl.modelUpName}); #end #end ## 子表 #foreach($tableModel in ${childTableHandle}) #set($mainFeild="${tableModel.relationField}") #set($MainFeild="${tableModel.relationField.substring(0,1).toUpperCase()}${tableModel.relationField.substring(1)}") #set($childFeild="${tableModel.tablefield}") #set($ChildFeild="${tableModel.tablefield.substring(0,1).toUpperCase()}${tableModel.tablefield.substring(1)}") QueryWrapper<${tableModel.aliasUpName}Entity> queryWrapper${tableModel.aliasUpName}=new QueryWrapper<>(); queryWrapper${tableModel.aliasUpName}.lambda().eq(${tableModel.aliasUpName}Entity::get${ChildFeild},entity.get${MainFeild}()); //子表数据删除 ${tableModel.aliasLowName}Service.remove(queryWrapper${tableModel.aliasUpName}); #end #end } return ActionResult.success(MsgCode.SU003.get()); } #end ## 批量删除 #macro(BatchRemoveMethod) /** * 批量删除 * @param obj * @return */ @DeleteMapping("/batchRemove") #if(${DS}) @DSTransactional #else @Transactional #end @Operation(summary = "批量删除") public ActionResult batchRemove(@RequestBody Object obj){ $mapObject objectMap = JsonUtil.entityToMap(obj); List idList = JsonUtil.getJsonToList(objectMap.get("ids"), String.class); String errInfo = ""; List successList = new ArrayList<>(); for (String allId : idList){ try { this.delete(allId,false); successList.add(allId); } catch (Exception e) { errInfo = e.getMessage(); } } if (successList.size() == 0 && StringUtil.isNotEmpty(errInfo)){ return ActionResult.fail(errInfo); } return ActionResult.success(MsgCode.SU003.get()); } #end ## 批量打印 #macro(BatchPrintMethod) #end ## 导入 #macro(UploaderMethod) @Operation(summary = "上传文件") @PostMapping("/Uploader") public ActionResult Uploader() { List list = UpUtil.getFileAll(); MultipartFile file = list.get(0); if (file.getOriginalFilename().endsWith(".xlsx") || file.getOriginalFilename().endsWith(".xls")) { String filePath = XSSEscape.escape(configValueUtil.getTemporaryFilePath()); String fileName = XSSEscape.escape(RandomUtil.uuId() + "." + UpUtil.getFileType(file)); //上传文件 #if(${isCloud}=="cloud") FileInfo fileInfo = fileUploadApi.uploadFile(file, filePath, fileName); #else FileInfo fileInfo = FileUploadUtils.uploadFile(file, filePath, fileName); #end DownloadVO vo = DownloadVO.builder().build(); vo.setName(fileInfo.getFilename()); return ActionResult.success(vo); } else { return ActionResult.fail(MsgCode.FA017.get()); } } /** * 模板下载 * * @return */ @Operation(summary = "模板下载") @GetMapping("/TemplateDownload") public ActionResult TemplateDownload(@RequestParam("menuId") String menuId){ DownloadVO vo = DownloadVO.builder().build(); UserInfo userInfo = userProvider.get(); String menuFullName = generaterSwapUtil.getMenuName(menuId); //主表对象 List entitys = new ArrayList<>(); List selectKeys = new ArrayList<>(); //以下添加字段 ## 导入字段添加到entity #foreach($fieldModel in $importFields) #set($config = $fieldModel.config) #set($vModel = ${fieldModel.vModel}) #if($vModel.toLowerCase().startsWith("tablefield")) //${vModel}子表对象 ExcelExportEntity ${vModel}ExcelEntity = new ExcelExportEntity("${fieldModel.label}(${vModel})","${vModel}"); List ${vModel}ExcelEntityList = new ArrayList<>(); #foreach($child in ${fieldModel.childList}) #set($itemFields =$child.fieLdsModel) ${vModel}ExcelEntityList.add(new ExcelExportEntity("${itemFields.config.label}($vModel-${itemFields.vModel})" ,"${itemFields.vModel}")); selectKeys.add("$vModel-${itemFields.vModel}"); #end ${vModel}ExcelEntity.setList(${vModel}ExcelEntityList); if(${vModel}ExcelEntityList.size() > 0){ entitys.add(${vModel}ExcelEntity); } #else entitys.add(new ExcelExportEntity("${config.label}($vModel)" ,"$vModel")); selectKeys.add("${vModel}"); #end #end ExcelModel excelModel = generaterSwapUtil.getExcelParams(${Name}Constant.getFormData(),selectKeys); List<${mapObject}> list = new ArrayList<>(); list.add(excelModel.getDataMap()); ExportParams exportParams = new ExportParams(null, menuFullName + "模板"); exportParams.setStyle(ExcelExportStyler.class); exportParams.setType(ExcelType.XSSF); try{ @Cleanup Workbook workbook = new HSSFWorkbook(); if (entitys.size()>0){ if (list.size()==0){ list.add(new HashMap<>()); } //复杂表头-表头和数据处理 ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(${Name}Constant.getColumnData(), ColumnDataModel.class); List complexHeaderList = columnDataModel.getComplexHeaderList(); if (!Objects.equals(columnDataModel.getType(), 3) && !Objects.equals(columnDataModel.getType(), 5)) { entitys = VisualUtils.complexHeaderHandel(entitys, complexHeaderList, false); list = VisualUtils.complexHeaderDataHandel(list, complexHeaderList, false); } ## excel处理 workbook = ExcelExportUtil.exportExcel(exportParams, entitys, list); ExcelHelper helper = new ExcelHelper(); helper.init(workbook, exportParams, entitys, excelModel); helper.doPreHandle(); helper.doPostHandle(); } String fileName = menuFullName + "导入模板.xls"; MultipartFile multipartFile = ExcelUtil.workbookToCommonsMultipartFile(workbook, fileName); #if(${isCloud}=="cloud") String temporaryFilePath = fileApi.getPath(FileTypeConstant.TEMPORARY); FileInfo fileInfo = fileUploadApi.uploadFile(multipartFile, temporaryFilePath, fileName); #else String temporaryFilePath = configValueUtil.getTemporaryFilePath(); FileInfo fileInfo = FileUploadUtils.uploadFile(multipartFile, temporaryFilePath, fileName); #end vo.setName(fileInfo.getFilename()); vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + "#" + "Temporary") + "&name=" + fileName); } catch (Exception e) { log.error("模板信息导出Excel错误:{}", e.getMessage()); e.printStackTrace(); } return ActionResult.success(vo); } /** * 导入预览 * * @return */ @Operation(summary = "导入预览" ) @GetMapping("/ImportPreview") public ActionResult<${mapObject}> ImportPreview(String fileName) throws Exception { ${mapObject} headAndDataMap = new HashMap<>(2); #if(${isCloud}=="cloud") String filePath = fileApi.getLocalBasePath() + configValueUtil.getTemporaryFilePath(); UploadFileModel uploadFileModel =new UploadFileModel(); uploadFileModel.setFolderName(filePath); uploadFileModel.setObjectName(fileName); fileUploadApi.downToLocal(uploadFileModel); #else String filePath = FileUploadUtils.getLocalBasePath() + configValueUtil.getTemporaryFilePath(); FileUploadUtils.downLocal(configValueUtil.getTemporaryFilePath(), filePath, fileName); #end File temporary = new File(XSSEscape.escapePath(filePath + fileName)); #if($importHasChildren || ${complexFieldList.size()} > 0) int headerRowIndex = 2; #else int headerRowIndex = 1; #end ImportParams params = new ImportParams(); params.setTitleRows(0); params.setHeadRows(headerRowIndex); params.setNeedVerify(true); try { InputStream inputStream = ExcelUtil.solveOrginTitle(temporary, headerRowIndex); List excelDataList = ExcelUtil.importExcelByInputStream(inputStream, 0, headerRowIndex, Map.class); //数据超过1000条 if(excelDataList != null && excelDataList.size() > 1000) { return ActionResult.fail(MsgCode.ETD117.get()); } ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(${Name}Constant.getColumnData(), ColumnDataModel.class); UploaderTemplateModel uploaderTemplateModel = JsonUtil.getJsonToBean(columnDataModel.getUploaderTemplateJson(), UploaderTemplateModel.class); List selectKey = uploaderTemplateModel.getSelectKey(); //子表合并 List<$mapObject> results = FormExecelUtils.dataMergeChildTable(excelDataList,selectKey); // 导入字段 List columns = new ArrayList<>(); ## 添加导入所有字段信息 #foreach($fieldModel in $importFieldsNew) #set($config = $fieldModel.config) #set($vModel = ${fieldModel.vModel}) #if($vModel.toLowerCase().startsWith("tablefield")) #if(${fieldModel.childList.size()}>0) //${vModel}子表对象 List ${vModel}columns = new ArrayList<>(); #foreach($child in ${fieldModel.childList}) #set($itemFields =$child.fieLdsModel) ${vModel}columns.add(new ExcelImFieldModel("${itemFields.vModel}" ,"#if(${itemFields.config.required})*#end${itemFields.config.label}")); #end columns.add(new ExcelImFieldModel("${vModel}","${fieldModel.label}","table",${vModel}columns)); #end #elseif($vModel.contains("complexHeader")) #set($item = ${fieldModel}) #if(${item.childColumns.size()}>0 && ${item.uploadFieldList.size()}>0) //${item.fullName} 复杂表头对象 List ${item.id}columns = new ArrayList<>(); #foreach($itemFields in ${item.uploadFieldList}) ${item.id}columns.add(new ExcelImFieldModel("${itemFields.vModel}" ,"#if(${itemFields.config.required})*#end${itemFields.label}")); #end columns.add(new ExcelImFieldModel("${item.id}","${item.fullName}","complexHeader",${item.id}columns)); #end #else columns.add(new ExcelImFieldModel("${vModel}","${config.label}","${config.jnpfKey}")); #end #end headAndDataMap.put("dataRow" , results); headAndDataMap.put("headerRow" , JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(columns))); } catch (Exception e){ e.printStackTrace(); return ActionResult.fail(MsgCode.VS407.get()); } return ActionResult.success(headAndDataMap); } /** * 导入数据 * * @return */ @Operation(summary = "导入数据" ) @PostMapping("/ImportData") public ActionResult ImportData(@RequestBody VisualImportModel visualImportModel) throws Exception { List<$mapObject> listData = visualImportModel.getList(); ImportFormCheckUniqueModel uniqueModel = new ImportFormCheckUniqueModel(); uniqueModel.setDbLinkId(${Name}Constant.DBLINKID); uniqueModel.setUpdate(Objects.equals("${importType}", "2")); #if($isFlow)uniqueModel.setFlowId(visualImportModel.getFlowId()); #end Map tablefieldkey = new HashMap<>(); for(String key:${Name}Constant.TABLEFIELDKEY.keySet()){ tablefieldkey.put(key,${Name}Constant.TABLERENAMES.get(${Name}Constant.TABLEFIELDKEY.get(key))); } ExcelImportModel excelImportModel = generaterSwapUtil.importData(${Name}Constant.getFormData(),listData,uniqueModel, tablefieldkey,${Name}Constant.getTableList()); List importDataModel = uniqueModel.getImportDataModel(); for (ImportDataModel model : importDataModel) { String id = model.getId(); $mapObject result = model.getResultData(); if(StringUtil.isNotEmpty(id)){ update(id, JsonUtil.getJsonToBean(result,${Name}Form.class), true); }else { create(#if($isFlow)RandomUtil.uuId(),#end JsonUtil.getJsonToBean(result,${Name}Form.class)); } } return ActionResult.success(excelImportModel); } /** * 导出异常报告 * * @return */ @Operation(summary = "导出异常报告") @PostMapping("/ImportExceptionData") public ActionResult ImportExceptionData(@RequestBody VisualImportModel visualImportModel) { DownloadVO vo = DownloadVO.builder().build(); UserInfo userInfo = userProvider.get(); String menuFullName = generaterSwapUtil.getMenuName(visualImportModel.getMenuId()); //主表对象 List entitys = new ArrayList<>(); entitys.add(new ExcelExportEntity("异常原因", "errorsInfo",30)); List selectKeys = new ArrayList<>(); //以下添加字段 ## 导入字段添加到entity #foreach($fieldModel in $importFields) #set($config = $fieldModel.config) #set($vModel = ${fieldModel.vModel}) #if($vModel.toLowerCase().startsWith("tablefield")) //${vModel}子表对象 ExcelExportEntity ${vModel}ExcelEntity = new ExcelExportEntity("${fieldModel.label}(${vModel})","${vModel}"); List ${vModel}ExcelEntityList = new ArrayList<>(); #foreach($child in ${fieldModel.childList}) #set($itemFields =$child.fieLdsModel) ${vModel}ExcelEntityList.add(new ExcelExportEntity("${itemFields.config.label}($vModel-${itemFields.vModel})" ,"${itemFields.vModel}")); selectKeys.add("$vModel-${itemFields.vModel}"); #end ${vModel}ExcelEntity.setList(${vModel}ExcelEntityList); entitys.add(${vModel}ExcelEntity); #else entitys.add(new ExcelExportEntity("${config.label}($vModel)" ,"$vModel")); selectKeys.add("${vModel}"); #end #end ExcelModel excelModel = generaterSwapUtil.getExcelParams(${Name}Constant.getFormData(),selectKeys); List<${mapObject}> list = new ArrayList<>(); list.addAll(visualImportModel.getList()); ExportParams exportParams = new ExportParams(null, menuFullName + "模板"); exportParams.setStyle(ExcelExportStyler.class); exportParams.setType(ExcelType.XSSF); exportParams.setFreezeCol(1); try{ @Cleanup Workbook workbook = new HSSFWorkbook(); if (entitys.size()>0){ if (list.size()==0){ list.add(new HashMap<>()); } //复杂表头-表头和数据处理 ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(${Name}Constant.getColumnData(), ColumnDataModel.class); List complexHeaderList = columnDataModel.getComplexHeaderList(); if (!Objects.equals(columnDataModel.getType(), 3) && !Objects.equals(columnDataModel.getType(), 5)) { entitys = VisualUtils.complexHeaderHandel(entitys, complexHeaderList, false); list = VisualUtils.complexHeaderDataHandel(list, complexHeaderList, false); } workbook = ExcelExportUtil.exportExcel(exportParams, entitys, list); ExcelHelper helper = new ExcelHelper(); helper.init(workbook, exportParams, entitys, excelModel); helper.doPreHandle(); helper.doPostHandle(); } String fileName = menuFullName + "错误报告_" + DateUtil.dateNow("yyyyMMddHHmmss") + ".xls"; MultipartFile multipartFile = ExcelUtil.workbookToCommonsMultipartFile(workbook, fileName); #if(${isCloud}=="cloud") String temporaryFilePath = fileApi.getPath(FileTypeConstant.TEMPORARY); FileInfo fileInfo = fileUploadApi.uploadFile(multipartFile, temporaryFilePath, fileName); #else String temporaryFilePath = configValueUtil.getTemporaryFilePath(); FileInfo fileInfo = FileUploadUtils.uploadFile(multipartFile, temporaryFilePath, fileName); #end vo.setName(fileInfo.getFilename()); vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + "#" + "Temporary") + "&name=" + fileName); } catch (Exception e) { e.printStackTrace(); } return ActionResult.success(vo); } #end ## 导出 #macro(ExportMethod) /** * 导出Excel * * @return */ @Operation(summary = "导出Excel") @PostMapping("/Actions/Export") public ActionResult Export(@RequestBody ${Name}Pagination ${name}Pagination) throws IOException { if (StringUtil.isEmpty(${name}Pagination.getSelectKey())){ return ActionResult.fail(MsgCode.IMP011.get()); } List<${table.entityName}> list= ${serviceName}.getList(${name}Pagination); List<${mapObject}> realList=new ArrayList<>(); for (${Name}Entity entity : list) { #EntityToMap() realList.add(${name}Map); } //数据转换 realList = generaterSwapUtil.swapDataList(realList, ${Name}Constant.getFormData(), ${Name}Constant.getColumnData(), ${name}Pagination.getModuleId(),${lineEdit}); String[]keys=!StringUtil.isEmpty(${name}Pagination.getSelectKey())?${name}Pagination.getSelectKey():new String[0]; UserInfo userInfo=userProvider.get(); String menuFullName = generaterSwapUtil.getMenuName(${name}Pagination.getMenuId()); #if(${isCloud}=="cloud") DownloadVO vo=this.creatModelExcel(fileApi.getPath(FileTypeConstant.TEMPORARY),realList,keys,userInfo,menuFullName); #else DownloadVO vo=this.creatModelExcel(configValueUtil.getTemporaryFilePath(),realList,keys,userInfo,menuFullName); #end return ActionResult.success(vo); } /** * 导出表格方法 */ public DownloadVO creatModelExcel(String path,List<${mapObject}>list,String[]keys,UserInfo userInfo,String menuFullName){ DownloadVO vo=DownloadVO.builder().build(); List entitys=new ArrayList<>(); if(keys.length>0){ ## 子表对象 #foreach($cl in $childTableHandle) ExcelExportEntity ${cl.tableModel}ExcelEntity = new ExcelExportEntity("${cl.label}(${cl.tableModel})","${cl.tableModel}"); List ${cl.tableModel}List = new ArrayList<>(); #end #set($lineEditName = "#if(${lineEdit})_name#end") for(String key:keys){ switch(key){ #if($columnListSize.size()>0) ## 主表 #foreach($fieldModel in ${mastTableHandle}) #set($config = $fieldModel.config) #set($vModel = ${fieldModel.vModel}) #if($vModel) case "${vModel}" : entitys.add(new ExcelExportEntity("${config.label}" ,"${vModel}${lineEditName}")); break; #end #end ## 副表 #foreach($clid in $columnTableHandle) #set($fieLdsModelList = $clid.fieLdsModelList) #foreach($cf in $fieLdsModelList) #set($field = ${cf.field}) #if($field) #set($label = $cf.mastTable.fieLdsModel.config.label) #set($lowName= ${cf.table.toLowerCase()}) case "${cf.vModel}" : entitys.add(new ExcelExportEntity("${label}" ,"${cf.vModel}${lineEditName}")); break; #end #end #end ## 子表 #foreach($cl in $childTableHandle) #set($clForm = $cl.childList) #foreach($clField in $clForm) #set($clForm = $clField.fieLdsModel) #if($!{clField.fieLdsModel.vModel}) case "${cl.tableModel}-${clField.fieLdsModel.vModel}": ${cl.tableModel}List.add(new ExcelExportEntity("${clField.fieLdsModel.config.label}" ,"${clField.fieLdsModel.vModel}${lineEditName}")); break; #end #end #end default: break; #end } } #foreach($cl in $childTableHandle) if(${cl.tableModel}List.size() > 0){ ${cl.tableModel}ExcelEntity.setList(${cl.tableModel}List); entitys.add(${cl.tableModel}ExcelEntity); } #end } ExportParams exportParams = new ExportParams(null, "表单信息"); exportParams.setType(ExcelType.XSSF); try{ @Cleanup Workbook workbook = new HSSFWorkbook(); if (entitys.size()>0){ if (list.size()==0){ list.add(new HashMap<>()); } //去除空数据 List<$mapObject> dataList = new ArrayList<>(); for ($mapObject map : list) { int i = 0; for (String key : keys) { //子表 if (key.toLowerCase().startsWith("tablefield")) { String tableField = key.substring(0, key.indexOf("-" )); String field = key.substring(key.indexOf("-" ) + 1); Object o = map.get(tableField); if (o != null) { List<$mapObject> childList = (List<$mapObject>) o; for ($mapObject childMap : childList) { if (childMap.get(field) != null) { i++; } } } } else { Object o = map.get(key); if (o != null) { i++; } } } if (i > 0) { dataList.add(map); } } List mergerEntitys = new ArrayList<>(entitys); List<$mapObject> mergerList=new ArrayList<>(dataList); //复杂表头-表头和数据处理 ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(${Name}Constant.getColumnData(), ColumnDataModel.class); List complexHeaderList = columnDataModel.getComplexHeaderList(); if (!Objects.equals(columnDataModel.getType(), 3) && !Objects.equals(columnDataModel.getType(), 5)) { entitys = VisualUtils.complexHeaderHandel(entitys, complexHeaderList, Objects.equals(columnDataModel.getType(), 4)); dataList = VisualUtils.complexHeaderDataHandel(dataList, complexHeaderList, Objects.equals(columnDataModel.getType(), 4)); } exportParams.setStyle(ExcelExportStyler.class); workbook = ExcelExportUtil.exportExcel(exportParams, entitys, dataList); VisualUtils.mergerVertical(workbook, mergerEntitys, mergerList); ## 表格样式添加 ExcelModel excelModel = generaterSwapUtil.getExcelParams(${Name}Constant.getFormData(),Arrays.asList(keys)); ExcelHelper helper = new ExcelHelper(); helper.init(workbook, exportParams, entitys, excelModel); helper.doPreHandle(); helper.doPostHandle(); } String fileName = menuFullName +"_"+ DateUtil.dateNow("yyyyMMddHHmmss") + ".xls"; MultipartFile multipartFile = ExcelUtil.workbookToCommonsMultipartFile(workbook, fileName); #if(${isCloud}=="cloud") String temporaryFilePath = fileApi.getPath(FileTypeConstant.TEMPORARY); FileInfo fileInfo = fileUploadApi.uploadFile(multipartFile, temporaryFilePath, fileName); #else String temporaryFilePath = configValueUtil.getTemporaryFilePath(); FileInfo fileInfo = FileUploadUtils.uploadFile(multipartFile, temporaryFilePath, fileName); #end vo.setName(fileInfo.getFilename()); vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + "#" + "Temporary") + "&name=" + fileName); } catch (Exception e) { log.error("信息导出Excel错误:{}", e.getMessage()); e.printStackTrace(); } return vo; } #end