ActionResult

package com.ceprei.rcm.controller; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jnpf.base.ActionResult; import jnpf.base.UserInfo; import jnpf.constant.FileTypeConstant; import jnpf.entity.FileParameter; import jnpf.exception.DataException; import jnpf.permission.entity.UserEntity; import jnpf.constant.MsgCode; import com.ceprei.rcm.service.; import com.ceprei.rcm.entity.; import jnpf.util.; import com.ceprei.rcm.model.bizunitevent.; import lombok.extern.slf4j.Slf4j; import org.dromara.x.file.storage.core.FileInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.; import jnpf.flowable.entity.TaskEntity; import jakarta.validation.Valid; import java.util.; import jnpf.model.ExcelModel; import jnpf.excel.ExcelExportStyler; import jnpf.excel.ExcelHelper; import jnpf.annotation.JnpfField; import jnpf.base.vo.PageListVO; import jnpf.base.vo.PaginationVO; import jnpf.base.vo.DownloadVO; import jnpf.config.ConfigValueUtil; import jnpf.base.entity.ProvinceEntity; import java.io.IOException; import java.util.stream.Collectors; import jnpf.flowable.entity.TaskEntity; import jnpf.exception.WorkFlowException; import jnpf.model.visualJson.UploaderTemplateModel; import jnpf.base.util.FormExecelUtils; import org.springframework.web.multipart.MultipartFile; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.ImportParams; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Workbook; import java.io.File; import java.io.IOException; import java.io.InputStream; import jnpf.onlinedev.model.ExcelImFieldModel; import jnpf.base.model.OnlineImport.ImportDataModel; import jnpf.base.model.OnlineImport.ImportFormCheckUniqueModel; import jnpf.base.model.OnlineImport.ExcelImportModel; import jnpf.base.model.OnlineImport.VisualImportModel; import lombok.Cleanup; import jnpf.model.visualJson.config.HeaderModel; import jnpf.base.model.ColumnDataModel; import jnpf.base.util.VisualUtils; import org.springframework.transaction.annotation.Transactional; /** BIZ_UNIT_EVENT @版本: V5.2.0 @版权: Copyright @ 2025 工业和信息化部电子第五研究所 @作者: 工业和信息化部电子第五研究所 @日期: 2025-09-09 */ @Slf4j @RestController @Tag(name = “BIZ_UNIT_EVENT” , description = “rcm”) @RequestMapping(“/api/rcm/BizUnitEvent”) public class BizUnitEventController { @Autowired private GeneraterSwapUtil generaterSwapUtil; @Autowired private UserProvider userProvider; @Autowired private BizUnitEventService bizUnitEventService; @Autowired private ConfigValueUtil configValueUtil; /** 列表 @param bizUnitEventPagination @return */ @Operation(summary = “获取列表”) @PostMapping(“/getList”) public ActionResult list(@RequestBody BizUnitEventPagination bizUnitEventPagination)throws Exception{ List list= bizUnitEventService.getList(bizUnitEventPagination); List<Map<String, Object>> realList=new ArrayList<>(); for (BizUnitEventEntity entity : list) { Map<String, Object> bizUnitEventMap=JsonUtil.entityToMap(entity); bizUnitEventMap.put(“id”, bizUnitEventMap.get(“ID”)); //副表数据 //子表数据 realList.add(bizUnitEventMap); } //数据转换 boolean isPc = “pc”.equals(ServletUtil.getHeader(“jnpf-origin” )); realList = generaterSwapUtil.swapDataList(realList, BizUnitEventConstant.getFormData(), BizUnitEventConstant.getColumnData(), bizUnitEventPagination.getModuleId(),isPc?false:false); //返回对象 PageListVO vo = new PageListVO(); vo.setList(realList); PaginationVO page = JsonUtil.getJsonToBean(bizUnitEventPagination, PaginationVO.class); vo.setPagination(page); return ActionResult.success(vo); } /** 创建 @param bizUnitEventForm @return / @PostMapping() @Operation(summary = “创建”) public ActionResult create(@RequestBody @Valid BizUnitEventForm bizUnitEventForm) { String b = bizUnitEventService.checkForm(bizUnitEventForm,0); if (StringUtil.isNotEmpty(b)){ return ActionResult.fail(b ); } try{ bizUnitEventService.saveOrUpdate(bizUnitEventForm, null ,true); }catch(Exception e){ return ActionResult.fail(MsgCode.FA028.get()); } return ActionResult.success(MsgCode.SU001.get()); } /* 导出Excel @return */ @Operation(summary = “导出Excel”) @PostMapping(“/Actions/Export”) public ActionResult Export(@RequestBody BizUnitEventPagination bizUnitEventPagination) throws IOException { if (StringUtil.isEmpty(bizUnitEventPagination.getSelectKey())){ return ActionResult.fail(MsgCode.IMP011.get()); } List list= bizUnitEventService.getList(bizUnitEventPagination); List<Map<String, Object>> realList=new ArrayList<>(); for (BizUnitEventEntity entity : list) { Map<String, Object> bizUnitEventMap=JsonUtil.entityToMap(entity); bizUnitEventMap.put(“id”, bizUnitEventMap.get(“ID”)); //副表数据 //子表数据 realList.add(bizUnitEventMap); } //数据转换 realList = generaterSwapUtil.swapDataList(realList, BizUnitEventConstant.getFormData(), BizUnitEventConstant.getColumnData(), bizUnitEventPagination.getModuleId(),false); String[]keys=!StringUtil.isEmpty(bizUnitEventPagination.getSelectKey())?bizUnitEventPagination.getSelectKey():new String[0]; UserInfo userInfo=userProvider.get(); String menuFullName = generaterSwapUtil.getMenuName(bizUnitEventPagination.getMenuId()); DownloadVO vo=this.creatModelExcel(configValueUtil.getTemporaryFilePath(),realList,keys,userInfo,menuFullName); return ActionResult.success(vo); } /** 导出表格方法 */ public DownloadVO creatModelExcel(String path,List<Map<String, Object>>list,String[]keys,UserInfo userInfo,String menuFullName){ DownloadVO vo=DownloadVO.builder().build(); List entitys=new ArrayList<>(); if(keys.length>0){ for(String key:keys){ switch(key){ case “branchCompany” : entitys.add(new ExcelExportEntity(“分公司” ,“branchCompany”)); break; case “powerPlant” : entitys.add(new ExcelExportEntity(“电厂” ,“powerPlant”)); break; case “unitName” : entitys.add(new ExcelExportEntity(“机组名称” ,“unitName”)); break; case “installedCapacity” : entitys.add(new ExcelExportEntity(“装机容量” ,“installedCapacity”)); break; case “eventStartTime” : entitys.add(new ExcelExportEntity(“事件起始时间” ,“eventStartTime”)); break; case “eventEndTime” : entitys.add(new ExcelExportEntity(“事件终止时间” ,“eventEndTime”)); break; case “eventStatus” : entitys.add(new ExcelExportEntity(“事件状态” ,“eventStatus”)); break; case “specialEventFlag” : entitys.add(new ExcelExportEntity(“特殊事件标记” ,“specialEventFlag”)); break; case “eventDurationHours” : entitys.add(new ExcelExportEntity(“事件持续小时” ,“eventDurationHours”)); break; case “powerReduction” : entitys.add(new ExcelExportEntity(“降出力” ,“powerReduction”)); break; case “equivalentOutageHours” : entitys.add(new ExcelExportEntity(“等效停运小时” ,“equivalentOutageHours”)); break; case “equipmentCode” : entitys.add(new ExcelExportEntity(“设备编码” ,“equipmentCode”)); break; case “technicalReasonCode” : entitys.add(new ExcelExportEntity(“技术原因编码” ,“technicalReasonCode”)); break; case “responsibilityReasonCode” : entitys.add(new ExcelExportEntity(“责任原因编码” ,“responsibilityReasonCode”)); break; case “successfulStartCount” : entitys.add(new ExcelExportEntity(“启动成功次数” ,“successfulStartCount”)); break; case “failedStartCount” : entitys.add(new ExcelExportEntity(“启动失败次数” ,“failedStartCount”)); break; case “eventReasonName” : entitys.add(new ExcelExportEntity(“事件原因名称” ,“eventReasonName”)); break; case “additionalNotes” : entitys.add(new ExcelExportEntity(“补充说明” ,“additionalNotes”)); break; default: break; } } } 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<Map<String, Object>> dataList = new ArrayList<>(); for (Map<String, Object> 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<Map<String, Object>> childList = (List<Map<String, Object>>) o; for (Map<String, Object> 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<Map<String, Object>> mergerList=new ArrayList<>(dataList); //复杂表头-表头和数据处理 ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(BizUnitEventConstant.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(BizUnitEventConstant.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); FileInfo fileInfo = FileUploadUtils.uploadFile(new FileParameter(FileTypeConstant.TEMPORARY, fileName), multipartFile); vo.setName(fileInfo.getFilename()); vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + "#" + FileTypeConstant.TEMPORARY) + "&name=" + fileName); } catch (Exception e) { log.error(“信息导出Excel错误:{}”, e.getMessage()); e.printStackTrace(); } return vo; } @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 fileName = XSSEscape.escape(RandomUtil.uuId() + “.” + UpUtil.getFileType(file)); //上传文件 FileInfo fileInfo = FileUploadUtils.uploadFile(new FileParameter(FileTypeConstant.TEMPORARY, fileName), file); 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<>(); //以下添加字段 entitys.add(new ExcelExportEntity(“分公司(branchCompany)” ,“branchCompany”)); selectKeys.add(“branchCompany”); entitys.add(new ExcelExportEntity(“电厂(powerPlant)” ,“powerPlant”)); selectKeys.add(“powerPlant”); entitys.add(new ExcelExportEntity(“机组名称(unitName)” ,“unitName”)); selectKeys.add(“unitName”); entitys.add(new ExcelExportEntity(“装机容量(installedCapacity)” ,“installedCapacity”)); selectKeys.add(“installedCapacity”); entitys.add(new ExcelExportEntity(“事件起始时间(eventStartTime)” ,“eventStartTime”)); selectKeys.add(“eventStartTime”); entitys.add(new ExcelExportEntity(“事件终止时间(eventEndTime)” ,“eventEndTime”)); selectKeys.add(“eventEndTime”); entitys.add(new ExcelExportEntity(“事件状态(eventStatus)” ,“eventStatus”)); selectKeys.add(“eventStatus”); entitys.add(new ExcelExportEntity(“特殊事件标记(specialEventFlag)” ,“specialEventFlag”)); selectKeys.add(“specialEventFlag”); entitys.add(new ExcelExportEntity(“事件持续小时(eventDurationHours)” ,“eventDurationHours”)); selectKeys.add(“eventDurationHours”); entitys.add(new ExcelExportEntity(“降出力(powerReduction)” ,“powerReduction”)); selectKeys.add(“powerReduction”); entitys.add(new ExcelExportEntity(“等效停运小时(equivalentOutageHours)” ,“equivalentOutageHours”)); selectKeys.add(“equivalentOutageHours”); entitys.add(new ExcelExportEntity(“设备编码(equipmentCode)” ,“equipmentCode”)); selectKeys.add(“equipmentCode”); entitys.add(new ExcelExportEntity(“技术原因编码(technicalReasonCode)” ,“technicalReasonCode”)); selectKeys.add(“technicalReasonCode”); entitys.add(new ExcelExportEntity(“责任原因编码(responsibilityReasonCode)” ,“responsibilityReasonCode”)); selectKeys.add(“responsibilityReasonCode”); entitys.add(new ExcelExportEntity(“启动成功次数(successfulStartCount)” ,“successfulStartCount”)); selectKeys.add(“successfulStartCount”); entitys.add(new ExcelExportEntity(“启动失败次数(failedStartCount)” ,“failedStartCount”)); selectKeys.add(“failedStartCount”); entitys.add(new ExcelExportEntity(“事件原因名称(eventReasonName)” ,“eventReasonName”)); selectKeys.add(“eventReasonName”); entitys.add(new ExcelExportEntity(“补充说明(additionalNotes)” ,“additionalNotes”)); selectKeys.add(“additionalNotes”); ExcelModel excelModel = generaterSwapUtil.getExcelParams(BizUnitEventConstant.getFormData(),selectKeys); List<Map<String, Object>> 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(BizUnitEventConstant.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 + “导入模板.xls”; MultipartFile multipartFile = ExcelUtil.workbookToCommonsMultipartFile(workbook, fileName); FileInfo fileInfo = FileUploadUtils.uploadFile(new FileParameter(FileTypeConstant.TEMPORARY, fileName), multipartFile); vo.setName(fileInfo.getFilename()); vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + “#” + FileTypeConstant.TEMPORARY) + “&name=” + fileName); } catch (Exception e) { log.error(“模板信息导出Excel错误:{}”, e.getMessage()); e.printStackTrace(); } return ActionResult.success(vo); } /** 导入预览 @return */ @Operation(summary = “导入预览” ) @GetMapping(“/ImportPreview”) public ActionResult<Map<String, Object>> ImportPreview(String fileName) throws Exception { Map<String, Object> headAndDataMap = new HashMap<>(2); File temporary = FileUploadUtils.downloadFileToLocal(new FileParameter(FileTypeConstant.TEMPORARY, fileName)); int headerRowIndex = 1; ImportParams params = new ImportParams(); params.setTitleRows(0); params.setHeadRows(headerRowIndex); params.setNeedVerify(true); try { InputStream inputStream = ExcelUtil.solveOrginTitle(temporary,0, 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(BizUnitEventConstant.getColumnData(), ColumnDataModel.class); UploaderTemplateModel uploaderTemplateModel = JsonUtil.getJsonToBean(columnDataModel.getUploaderTemplateJson(), UploaderTemplateModel.class); List<String> selectKey = uploaderTemplateModel.getSelectKey(); //子表合并 List<Map<String, Object>> results = FormExecelUtils.dataMergeChildTable(excelDataList,selectKey); // 导入字段 List<ExcelImFieldModel> columns = new ArrayList<>(); columns.add(new ExcelImFieldModel("unitName","机组名称","input")); columns.add(new ExcelImFieldModel("installedCapacity","装机容量","input")); columns.add(new ExcelImFieldModel("eventStartTime","事件起始时间","datePicker")); columns.add(new ExcelImFieldModel("eventEndTime","事件终止时间","datePicker")); columns.add(new ExcelImFieldModel("eventStatus","事件状态","input")); columns.add(new ExcelImFieldModel("specialEventFlag","特殊事件标记","input")); columns.add(new ExcelImFieldModel("eventDurationHours","事件持续小时","input")); columns.add(new ExcelImFieldModel("powerReduction","降出力","input")); columns.add(new ExcelImFieldModel("equipmentCode","设备编码","input")); columns.add(new ExcelImFieldModel("responsibilityReasonCode","责任原因编码","input")); columns.add(new ExcelImFieldModel("successfulStartCount","启动成功次数","input")); columns.add(new ExcelImFieldModel("failedStartCount","启动失败次数","input")); columns.add(new ExcelImFieldModel("eventReasonName","事件原因名称","input")); columns.add(new ExcelImFieldModel("additionalNotes","补充说明","input")); columns.add(new ExcelImFieldModel("branchCompany","分公司","input")); columns.add(new ExcelImFieldModel("powerPlant","电厂","input")); columns.add(new ExcelImFieldModel("equivalentOutageHours","等效停运小时","input")); columns.add(new ExcelImFieldModel("technicalReasonCode","技术原因编码","input")); 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<Map<String, Object>> listData = null; List<Map<String, Object>> headerRow = new ArrayList<>(); if (visualImportModel.isType()){ ActionResult result = ImportPreview(visualImportModel.getFileName()); if (result == null){ throw new Exception(MsgCode.FA018.get()); } if (result.getCode() != 200){ return result; } if (result.getData() instanceof Map){ Map<String, Object> dataMap = (Map<String, Object>) result.getData(); listData = (List<Map<String, Object>>) dataMap.get(“dataRow”); headerRow = (List<Map<String, Object>>) dataMap.get(“headerRow”); } }else{ listData = visualImportModel.getList(); } ImportFormCheckUniqueModel uniqueModel = new ImportFormCheckUniqueModel(); uniqueModel.setDbLinkId(BizUnitEventConstant.DBLINKID); uniqueModel.setUpdate(Objects.equals(“2”, “2”)); Map<String,String> tablefieldkey = new HashMap<>(); for(String key:BizUnitEventConstant.TABLEFIELDKEY.keySet()){ tablefieldkey.put(key,BizUnitEventConstant.TABLERENAMES.get(BizUnitEventConstant.TABLEFIELDKEY.get(key))); } ExcelImportModel excelImportModel = generaterSwapUtil.importData(BizUnitEventConstant.getFormData(),listData,uniqueModel, tablefieldkey,BizUnitEventConstant.getTableList()); List importDataModel = uniqueModel.getImportDataModel(); for (ImportDataModel model : importDataModel) { String id = model.getId(); Map<String, Object> result = model.getResultData(); if(StringUtil.isNotEmpty(id)){ update(id, JsonUtil.getJsonToBean(result,BizUnitEventForm.class), true); }else { create( JsonUtil.getJsonToBean(result,BizUnitEventForm.class)); } } excelImportModel.setHeaderRow(headerRow); 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<>(); //以下添加字段 entitys.add(new ExcelExportEntity(“机组名称(unitName)” ,“unitName”)); selectKeys.add(“unitName”); entitys.add(new ExcelExportEntity(“装机容量(installedCapacity)” ,“installedCapacity”)); selectKeys.add(“installedCapacity”); entitys.add(new ExcelExportEntity(“事件起始时间(eventStartTime)” ,“eventStartTime”)); selectKeys.add(“eventStartTime”); entitys.add(new ExcelExportEntity(“事件终止时间(eventEndTime)” ,“eventEndTime”)); selectKeys.add(“eventEndTime”); entitys.add(new ExcelExportEntity(“事件状态(eventStatus)” ,“eventStatus”)); selectKeys.add(“eventStatus”); entitys.add(new ExcelExportEntity(“特殊事件标记(specialEventFlag)” ,“specialEventFlag”)); selectKeys.add(“specialEventFlag”); entitys.add(new ExcelExportEntity(“事件持续小时(eventDurationHours)” ,“eventDurationHours”)); selectKeys.add(“eventDurationHours”); entitys.add(new ExcelExportEntity(“降出力(powerReduction)” ,“powerReduction”)); selectKeys.add(“powerReduction”); entitys.add(new ExcelExportEntity(“设备编码(equipmentCode)” ,“equipmentCode”)); selectKeys.add(“equipmentCode”); entitys.add(new ExcelExportEntity(“责任原因编码(responsibilityReasonCode)” ,“responsibilityReasonCode”)); selectKeys.add(“responsibilityReasonCode”); entitys.add(new ExcelExportEntity(“启动成功次数(successfulStartCount)” ,“successfulStartCount”)); selectKeys.add(“successfulStartCount”); entitys.add(new ExcelExportEntity(“启动失败次数(failedStartCount)” ,“failedStartCount”)); selectKeys.add(“failedStartCount”); entitys.add(new ExcelExportEntity(“事件原因名称(eventReasonName)” ,“eventReasonName”)); selectKeys.add(“eventReasonName”); entitys.add(new ExcelExportEntity(“补充说明(additionalNotes)” ,“additionalNotes”)); selectKeys.add(“additionalNotes”); entitys.add(new ExcelExportEntity(“分公司(branchCompany)” ,“branchCompany”)); selectKeys.add(“branchCompany”); entitys.add(new ExcelExportEntity(“电厂(powerPlant)” ,“powerPlant”)); selectKeys.add(“powerPlant”); entitys.add(new ExcelExportEntity(“等效停运小时(equivalentOutageHours)” ,“equivalentOutageHours”)); selectKeys.add(“equivalentOutageHours”); entitys.add(new ExcelExportEntity(“技术原因编码(technicalReasonCode)” ,“technicalReasonCode”)); selectKeys.add(“technicalReasonCode”); ExcelModel excelModel = generaterSwapUtil.getExcelParams(BizUnitEventConstant.getFormData(),selectKeys); List<Map<String, Object>> 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(BizUnitEventConstant.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); FileInfo fileInfo = FileUploadUtils.uploadFile(new FileParameter(FileTypeConstant.TEMPORARY, fileName), multipartFile); vo.setName(fileInfo.getFilename()); vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + "#" + FileTypeConstant.TEMPORARY) + "&name=" + fileName); } catch (Exception e) { e.printStackTrace(); } return ActionResult.success(vo); } /** 删除 @param id @return / @Operation(summary = “删除”) @DeleteMapping(“/{id}”) @Transactional public ActionResult delete(@PathVariable(“id”) String id,@RequestParam(name = “forceDel”,defaultValue = “false”) boolean forceDel) throws Exception{ BizUnitEventEntity entity= bizUnitEventService.getInfo(id); if(entity!=null){ //主表数据删除 bizUnitEventService.delete(entity); } return ActionResult.success(MsgCode.SU003.get()); } /* 批量删除 @param obj @return / @DeleteMapping(“/batchRemove”) @Transactional @Operation(summary = “批量删除”) public ActionResult batchRemove(@RequestBody Object obj){ Map<String, Object> 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()); } /* 编辑 @param id @param bizUnitEventForm @return */ @PutMapping(“/{id}”) @Operation(summary = “更新”) public ActionResult update(@PathVariable(“id”) String id,@RequestBody @Valid BizUnitEventForm bizUnitEventForm, @RequestParam(value = “isImport”, required = false) boolean isImport){ BizUnitEventEntity entity= bizUnitEventService.getInfo(id); if(entity!=null){ bizUnitEventForm.setId(String.valueOf(entity.getId())); if (!isImport) { String b = bizUnitEventService.checkForm(bizUnitEventForm,1); if (StringUtil.isNotEmpty(b)){ return ActionResult.fail(b ); } } try{ bizUnitEventService.saveOrUpdate(bizUnitEventForm,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()); } } /** 表单信息(详情页) 详情页面使用-转换数据 @param id @return / @Operation(summary = “表单信息(详情页)”) @GetMapping(“/detail/{id}”) public ActionResult detailInfo(@PathVariable(“id”) String id){ BizUnitEventEntity entity= bizUnitEventService.getInfo(id); if(entity==null){ return ActionResult.fail(MsgCode.FA001.get()); } Map<String, Object> bizUnitEventMap=JsonUtil.entityToMap(entity); bizUnitEventMap.put(“id”, bizUnitEventMap.get(“ID”)); //副表数据 //子表数据 boolean isPc = “pc”.equals(ServletUtil.getHeader(“jnpf-origin” )); bizUnitEventMap = generaterSwapUtil.swapDataDetail(bizUnitEventMap,BizUnitEventConstant.getFormData(),“735128948597357893”,isPc?false:false); //子表数据 return ActionResult.success(bizUnitEventMap); } /* 获取详情(编辑页) 编辑页面使用-不转换数据 @param id @return */ @Operation(summary = “信息”) @GetMapping(“/{id}”) public ActionResult info(@PathVariable(“id”) String id){ BizUnitEventEntity entity= bizUnitEventService.getInfo(id); if(entity==null){ return ActionResult.fail(MsgCode.FA001.get()); } Map<String, Object> bizUnitEventMap=JsonUtil.entityToMap(entity); bizUnitEventMap.put(“id”, bizUnitEventMap.get(“ID”)); //副表数据 //子表数据 bizUnitEventMap = generaterSwapUtil.swapDataForm(bizUnitEventMap,BizUnitEventConstant.getFormData(),BizUnitEventConstant.TABLEFIELDKEY,BizUnitEventConstant.TABLERENAMES); return ActionResult.success(bizUnitEventMap); } } 在上述代码中,有一个上传文件的接口,这个接口只会上传Excel文件,现在有一个需求,需要在获取到文件还没有保存时,给文件中的表头增加批注。批注内容就是像导出模版一样。上传的文件名称只有中文,鼠标悬停时不会出现批注,所以需要加上
09-10
package com.ceprei.rcm.controller; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jnpf.base.ActionResult; import jnpf.base.UserInfo; import jnpf.constant.FileTypeConstant; import jnpf.entity.FileParameter; import jnpf.exception.DataException; import jnpf.permission.entity.UserEntity; import jnpf.constant.MsgCode; import com.ceprei.rcm.service.*; import com.ceprei.rcm.entity.*; import jnpf.util.*; import com.ceprei.rcm.model.bizunitevent.*; import lombok.extern.slf4j.Slf4j; import org.dromara.x.file.storage.core.FileInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import jnpf.flowable.entity.TaskEntity; import jakarta.validation.Valid; import java.util.*; import jnpf.model.ExcelModel; import jnpf.excel.ExcelExportStyler; import jnpf.excel.ExcelHelper; import jnpf.annotation.JnpfField; import jnpf.base.vo.PageListVO; import jnpf.base.vo.PaginationVO; import jnpf.base.vo.DownloadVO; import jnpf.config.ConfigValueUtil; import jnpf.base.entity.ProvinceEntity; import java.io.IOException; import java.util.stream.Collectors; import jnpf.flowable.entity.TaskEntity; import jnpf.exception.WorkFlowException; import jnpf.model.visualJson.UploaderTemplateModel; import jnpf.base.util.FormExecelUtils; import org.springframework.web.multipart.MultipartFile; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.ImportParams; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Workbook; import java.io.File; import java.io.IOException; import java.io.InputStream; import jnpf.onlinedev.model.ExcelImFieldModel; import jnpf.base.model.OnlineImport.ImportDataModel; import jnpf.base.model.OnlineImport.ImportFormCheckUniqueModel; import jnpf.base.model.OnlineImport.ExcelImportModel; import jnpf.base.model.OnlineImport.VisualImportModel; import lombok.Cleanup; import jnpf.model.visualJson.config.HeaderModel; import jnpf.base.model.ColumnDataModel; import jnpf.base.util.VisualUtils; import org.springframework.transaction.annotation.Transactional; /** * BIZ_UNIT_EVENT * @版本: V5.2.0 * @版权: Copyright @ 2025 工业和信息化部电子第五研究所 * @作者: 工业和信息化部电子第五研究所 * @日期: 2025-09-09 */ @Slf4j @RestController @Tag(name = "BIZ_UNIT_EVENT" , description = "rcm") @RequestMapping("/api/rcm/BizUnitEvent") public class BizUnitEventController { @Autowired private GeneraterSwapUtil generaterSwapUtil; @Autowired private UserProvider userProvider; @Autowired private BizUnitEventService bizUnitEventService; @Autowired private ConfigValueUtil configValueUtil; /** * 列表 * * @param bizUnitEventPagination * @return */ @Operation(summary = "获取列表") @PostMapping("/getList") public ActionResult list(@RequestBody BizUnitEventPagination bizUnitEventPagination)throws Exception{ List<BizUnitEventEntity> list= bizUnitEventService.getList(bizUnitEventPagination); List<Map<String, Object>> realList=new ArrayList<>(); for (BizUnitEventEntity entity : list) { Map<String, Object> bizUnitEventMap=JsonUtil.entityToMap(entity); bizUnitEventMap.put("id", bizUnitEventMap.get("ID")); //副表数据 //子表数据 realList.add(bizUnitEventMap); } //数据转换 boolean isPc = "pc".equals(ServletUtil.getHeader("jnpf-origin" )); realList = generaterSwapUtil.swapDataList(realList, BizUnitEventConstant.getFormData(), BizUnitEventConstant.getColumnData(), bizUnitEventPagination.getModuleId(),isPc?false:false); //返回对象 PageListVO vo = new PageListVO(); vo.setList(realList); PaginationVO page = JsonUtil.getJsonToBean(bizUnitEventPagination, PaginationVO.class); vo.setPagination(page); return ActionResult.success(vo); } /** * 创建 * * @param bizUnitEventForm * @return */ @PostMapping() @Operation(summary = "创建") public ActionResult create(@RequestBody @Valid BizUnitEventForm bizUnitEventForm) { String b = bizUnitEventService.checkForm(bizUnitEventForm,0); if (StringUtil.isNotEmpty(b)){ return ActionResult.fail(b ); } try{ bizUnitEventService.saveOrUpdate(bizUnitEventForm, null ,true); }catch(Exception e){ return ActionResult.fail(MsgCode.FA028.get()); } return ActionResult.success(MsgCode.SU001.get()); } /** * 导出Excel * * @return */ @Operation(summary = "导出Excel") @PostMapping("/Actions/Export") public ActionResult Export(@RequestBody BizUnitEventPagination bizUnitEventPagination) throws IOException { if (StringUtil.isEmpty(bizUnitEventPagination.getSelectKey())){ return ActionResult.fail(MsgCode.IMP011.get()); } List<BizUnitEventEntity> list= bizUnitEventService.getList(bizUnitEventPagination); List<Map<String, Object>> realList=new ArrayList<>(); for (BizUnitEventEntity entity : list) { Map<String, Object> bizUnitEventMap=JsonUtil.entityToMap(entity); bizUnitEventMap.put("id", bizUnitEventMap.get("ID")); //副表数据 //子表数据 realList.add(bizUnitEventMap); } //数据转换 realList = generaterSwapUtil.swapDataList(realList, BizUnitEventConstant.getFormData(), BizUnitEventConstant.getColumnData(), bizUnitEventPagination.getModuleId(),false); String[]keys=!StringUtil.isEmpty(bizUnitEventPagination.getSelectKey())?bizUnitEventPagination.getSelectKey():new String[0]; UserInfo userInfo=userProvider.get(); String menuFullName = generaterSwapUtil.getMenuName(bizUnitEventPagination.getMenuId()); DownloadVO vo=this.creatModelExcel(configValueUtil.getTemporaryFilePath(),realList,keys,userInfo,menuFullName); return ActionResult.success(vo); } /** * 导出表格方法 */ public DownloadVO creatModelExcel(String path,List<Map<String, Object>>list,String[]keys,UserInfo userInfo,String menuFullName){ DownloadVO vo=DownloadVO.builder().build(); List<ExcelExportEntity> entitys=new ArrayList<>(); if(keys.length>0){ for(String key:keys){ switch(key){ case "branchCompany" : entitys.add(new ExcelExportEntity("分公司" ,"branchCompany")); break; case "powerPlant" : entitys.add(new ExcelExportEntity("电厂" ,"powerPlant")); break; case "unitName" : entitys.add(new ExcelExportEntity("机组名称" ,"unitName")); break; case "installedCapacity" : entitys.add(new ExcelExportEntity("装机容量" ,"installedCapacity")); break; case "eventStartTime" : entitys.add(new ExcelExportEntity("事件起始时间" ,"eventStartTime")); break; case "eventEndTime" : entitys.add(new ExcelExportEntity("事件终止时间" ,"eventEndTime")); break; case "eventStatus" : entitys.add(new ExcelExportEntity("事件状态" ,"eventStatus")); break; case "specialEventFlag" : entitys.add(new ExcelExportEntity("特殊事件标记" ,"specialEventFlag")); break; case "eventDurationHours" : entitys.add(new ExcelExportEntity("事件持续小时" ,"eventDurationHours")); break; case "powerReduction" : entitys.add(new ExcelExportEntity("降出力" ,"powerReduction")); break; case "equivalentOutageHours" : entitys.add(new ExcelExportEntity("等效停运小时" ,"equivalentOutageHours")); break; case "equipmentCode" : entitys.add(new ExcelExportEntity("设备编码" ,"equipmentCode")); break; case "technicalReasonCode" : entitys.add(new ExcelExportEntity("技术原因编码" ,"technicalReasonCode")); break; case "responsibilityReasonCode" : entitys.add(new ExcelExportEntity("责任原因编码" ,"responsibilityReasonCode")); break; case "successfulStartCount" : entitys.add(new ExcelExportEntity("启动成功次数" ,"successfulStartCount")); break; case "failedStartCount" : entitys.add(new ExcelExportEntity("启动失败次数" ,"failedStartCount")); break; case "eventReasonName" : entitys.add(new ExcelExportEntity("事件原因名称" ,"eventReasonName")); break; case "additionalNotes" : entitys.add(new ExcelExportEntity("补充说明" ,"additionalNotes")); break; default: break; } } } 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<Map<String, Object>> dataList = new ArrayList<>(); for (Map<String, Object> 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<Map<String, Object>> childList = (List<Map<String, Object>>) o; for (Map<String, Object> 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<ExcelExportEntity> mergerEntitys = new ArrayList<>(entitys); List<Map<String, Object>> mergerList=new ArrayList<>(dataList); //复杂表头-表头和数据处理 ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(BizUnitEventConstant.getColumnData(), ColumnDataModel.class); List<HeaderModel> 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(BizUnitEventConstant.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); FileInfo fileInfo = FileUploadUtils.uploadFile(new FileParameter(FileTypeConstant.TEMPORARY, fileName), multipartFile); vo.setName(fileInfo.getFilename()); vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + "#" + FileTypeConstant.TEMPORARY) + "&name=" + fileName); } catch (Exception e) { log.error("信息导出Excel错误:{}", e.getMessage()); e.printStackTrace(); } return vo; } @Operation(summary = "上传文件") @PostMapping("/Uploader") public ActionResult<Object> Uploader() { List<MultipartFile> list = UpUtil.getFileAll(); MultipartFile file = list.get(0); if (file.getOriginalFilename().endsWith(".xlsx") || file.getOriginalFilename().endsWith(".xls")) { String fileName = XSSEscape.escape(RandomUtil.uuId() + "." + UpUtil.getFileType(file)); //上传文件 FileInfo fileInfo = FileUploadUtils.uploadFile(new FileParameter(FileTypeConstant.TEMPORARY, fileName), file); 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<DownloadVO> TemplateDownload(@RequestParam("menuId") String menuId){ DownloadVO vo = DownloadVO.builder().build(); UserInfo userInfo = userProvider.get(); String menuFullName = generaterSwapUtil.getMenuName(menuId); //主表对象 List<ExcelExportEntity> entitys = new ArrayList<>(); List<String> selectKeys = new ArrayList<>(); //以下添加字段 entitys.add(new ExcelExportEntity("分公司(branchCompany)" ,"branchCompany")); selectKeys.add("branchCompany"); entitys.add(new ExcelExportEntity("电厂(powerPlant)" ,"powerPlant")); selectKeys.add("powerPlant"); entitys.add(new ExcelExportEntity("机组名称(unitName)" ,"unitName")); selectKeys.add("unitName"); entitys.add(new ExcelExportEntity("装机容量(installedCapacity)" ,"installedCapacity")); selectKeys.add("installedCapacity"); entitys.add(new ExcelExportEntity("事件起始时间(eventStartTime)" ,"eventStartTime")); selectKeys.add("eventStartTime"); entitys.add(new ExcelExportEntity("事件终止时间(eventEndTime)" ,"eventEndTime")); selectKeys.add("eventEndTime"); entitys.add(new ExcelExportEntity("事件状态(eventStatus)" ,"eventStatus")); selectKeys.add("eventStatus"); entitys.add(new ExcelExportEntity("特殊事件标记(specialEventFlag)" ,"specialEventFlag")); selectKeys.add("specialEventFlag"); entitys.add(new ExcelExportEntity("事件持续小时(eventDurationHours)" ,"eventDurationHours")); selectKeys.add("eventDurationHours"); entitys.add(new ExcelExportEntity("降出力(powerReduction)" ,"powerReduction")); selectKeys.add("powerReduction"); entitys.add(new ExcelExportEntity("等效停运小时(equivalentOutageHours)" ,"equivalentOutageHours")); selectKeys.add("equivalentOutageHours"); entitys.add(new ExcelExportEntity("设备编码(equipmentCode)" ,"equipmentCode")); selectKeys.add("equipmentCode"); entitys.add(new ExcelExportEntity("技术原因编码(technicalReasonCode)" ,"technicalReasonCode")); selectKeys.add("technicalReasonCode"); entitys.add(new ExcelExportEntity("责任原因编码(responsibilityReasonCode)" ,"responsibilityReasonCode")); selectKeys.add("responsibilityReasonCode"); entitys.add(new ExcelExportEntity("启动成功次数(successfulStartCount)" ,"successfulStartCount")); selectKeys.add("successfulStartCount"); entitys.add(new ExcelExportEntity("启动失败次数(failedStartCount)" ,"failedStartCount")); selectKeys.add("failedStartCount"); entitys.add(new ExcelExportEntity("事件原因名称(eventReasonName)" ,"eventReasonName")); selectKeys.add("eventReasonName"); entitys.add(new ExcelExportEntity("补充说明(additionalNotes)" ,"additionalNotes")); selectKeys.add("additionalNotes"); ExcelModel excelModel = generaterSwapUtil.getExcelParams(BizUnitEventConstant.getFormData(),selectKeys); List<Map<String, Object>> 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(BizUnitEventConstant.getColumnData(), ColumnDataModel.class); List<HeaderModel> 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 + "导入模板.xls"; MultipartFile multipartFile = ExcelUtil.workbookToCommonsMultipartFile(workbook, fileName); FileInfo fileInfo = FileUploadUtils.uploadFile(new FileParameter(FileTypeConstant.TEMPORARY, fileName), multipartFile); vo.setName(fileInfo.getFilename()); vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + "#" + FileTypeConstant.TEMPORARY) + "&name=" + fileName); } catch (Exception e) { log.error("模板信息导出Excel错误:{}", e.getMessage()); e.printStackTrace(); } return ActionResult.success(vo); } /** * 导入预览 * * @return */ @Operation(summary = "导入预览" ) @GetMapping("/ImportPreview") public ActionResult<Map<String, Object>> ImportPreview(String fileName) throws Exception { Map<String, Object> headAndDataMap = new HashMap<>(2); File temporary = FileUploadUtils.downloadFileToLocal(new FileParameter(FileTypeConstant.TEMPORARY, fileName)); int headerRowIndex = 1; ImportParams params = new ImportParams(); params.setTitleRows(0); params.setHeadRows(headerRowIndex); params.setNeedVerify(true); try { InputStream inputStream = ExcelUtil.solveOrginTitle(temporary,0, headerRowIndex); List<Map> 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(BizUnitEventConstant.getColumnData(), ColumnDataModel.class); UploaderTemplateModel uploaderTemplateModel = JsonUtil.getJsonToBean(columnDataModel.getUploaderTemplateJson(), UploaderTemplateModel.class); List<String> selectKey = uploaderTemplateModel.getSelectKey(); //子表合并 List<Map<String, Object>> results = FormExecelUtils.dataMergeChildTable(excelDataList,selectKey); // 导入字段 List<ExcelImFieldModel> columns = new ArrayList<>(); columns.add(new ExcelImFieldModel("unitName","机组名称","input")); columns.add(new ExcelImFieldModel("installedCapacity","装机容量","input")); columns.add(new ExcelImFieldModel("eventStartTime","事件起始时间","datePicker")); columns.add(new ExcelImFieldModel("eventEndTime","事件终止时间","datePicker")); columns.add(new ExcelImFieldModel("eventStatus","事件状态","input")); columns.add(new ExcelImFieldModel("specialEventFlag","特殊事件标记","input")); columns.add(new ExcelImFieldModel("eventDurationHours","事件持续小时","input")); columns.add(new ExcelImFieldModel("powerReduction","降出力","input")); columns.add(new ExcelImFieldModel("equipmentCode","设备编码","input")); columns.add(new ExcelImFieldModel("responsibilityReasonCode","责任原因编码","input")); columns.add(new ExcelImFieldModel("successfulStartCount","启动成功次数","input")); columns.add(new ExcelImFieldModel("failedStartCount","启动失败次数","input")); columns.add(new ExcelImFieldModel("eventReasonName","事件原因名称","input")); columns.add(new ExcelImFieldModel("additionalNotes","补充说明","input")); columns.add(new ExcelImFieldModel("branchCompany","分公司","input")); columns.add(new ExcelImFieldModel("powerPlant","电厂","input")); columns.add(new ExcelImFieldModel("equivalentOutageHours","等效停运小时","input")); columns.add(new ExcelImFieldModel("technicalReasonCode","技术原因编码","input")); 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<ExcelImportModel> ImportData(@RequestBody VisualImportModel visualImportModel) throws Exception { List<Map<String, Object>> listData = null; List<Map<String, Object>> headerRow = new ArrayList<>(); if (visualImportModel.isType()){ ActionResult result = ImportPreview(visualImportModel.getFileName()); if (result == null){ throw new Exception(MsgCode.FA018.get()); } if (result.getCode() != 200){ return result; } if (result.getData() instanceof Map){ Map<String, Object> dataMap = (Map<String, Object>) result.getData(); listData = (List<Map<String, Object>>) dataMap.get("dataRow"); headerRow = (List<Map<String, Object>>) dataMap.get("headerRow"); } }else{ listData = visualImportModel.getList(); } ImportFormCheckUniqueModel uniqueModel = new ImportFormCheckUniqueModel(); uniqueModel.setDbLinkId(BizUnitEventConstant.DBLINKID); uniqueModel.setUpdate(Objects.equals("2", "2")); Map<String,String> tablefieldkey = new HashMap<>(); for(String key:BizUnitEventConstant.TABLEFIELDKEY.keySet()){ tablefieldkey.put(key,BizUnitEventConstant.TABLERENAMES.get(BizUnitEventConstant.TABLEFIELDKEY.get(key))); } ExcelImportModel excelImportModel = generaterSwapUtil.importData(BizUnitEventConstant.getFormData(),listData,uniqueModel, tablefieldkey,BizUnitEventConstant.getTableList()); List<ImportDataModel> importDataModel = uniqueModel.getImportDataModel(); for (ImportDataModel model : importDataModel) { String id = model.getId(); Map<String, Object> result = model.getResultData(); if(StringUtil.isNotEmpty(id)){ update(id, JsonUtil.getJsonToBean(result,BizUnitEventForm.class), true); }else { create( JsonUtil.getJsonToBean(result,BizUnitEventForm.class)); } } excelImportModel.setHeaderRow(headerRow); return ActionResult.success(excelImportModel); } /** * 导出异常报告 * * @return */ @Operation(summary = "导出异常报告") @PostMapping("/ImportExceptionData") public ActionResult<DownloadVO> ImportExceptionData(@RequestBody VisualImportModel visualImportModel) { DownloadVO vo = DownloadVO.builder().build(); UserInfo userInfo = userProvider.get(); String menuFullName = generaterSwapUtil.getMenuName(visualImportModel.getMenuId()); //主表对象 List<ExcelExportEntity> entitys = new ArrayList<>(); entitys.add(new ExcelExportEntity("异常原因", "errorsInfo",30)); List<String> selectKeys = new ArrayList<>(); //以下添加字段 entitys.add(new ExcelExportEntity("机组名称(unitName)" ,"unitName")); selectKeys.add("unitName"); entitys.add(new ExcelExportEntity("装机容量(installedCapacity)" ,"installedCapacity")); selectKeys.add("installedCapacity"); entitys.add(new ExcelExportEntity("事件起始时间(eventStartTime)" ,"eventStartTime")); selectKeys.add("eventStartTime"); entitys.add(new ExcelExportEntity("事件终止时间(eventEndTime)" ,"eventEndTime")); selectKeys.add("eventEndTime"); entitys.add(new ExcelExportEntity("事件状态(eventStatus)" ,"eventStatus")); selectKeys.add("eventStatus"); entitys.add(new ExcelExportEntity("特殊事件标记(specialEventFlag)" ,"specialEventFlag")); selectKeys.add("specialEventFlag"); entitys.add(new ExcelExportEntity("事件持续小时(eventDurationHours)" ,"eventDurationHours")); selectKeys.add("eventDurationHours"); entitys.add(new ExcelExportEntity("降出力(powerReduction)" ,"powerReduction")); selectKeys.add("powerReduction"); entitys.add(new ExcelExportEntity("设备编码(equipmentCode)" ,"equipmentCode")); selectKeys.add("equipmentCode"); entitys.add(new ExcelExportEntity("责任原因编码(responsibilityReasonCode)" ,"responsibilityReasonCode")); selectKeys.add("responsibilityReasonCode"); entitys.add(new ExcelExportEntity("启动成功次数(successfulStartCount)" ,"successfulStartCount")); selectKeys.add("successfulStartCount"); entitys.add(new ExcelExportEntity("启动失败次数(failedStartCount)" ,"failedStartCount")); selectKeys.add("failedStartCount"); entitys.add(new ExcelExportEntity("事件原因名称(eventReasonName)" ,"eventReasonName")); selectKeys.add("eventReasonName"); entitys.add(new ExcelExportEntity("补充说明(additionalNotes)" ,"additionalNotes")); selectKeys.add("additionalNotes"); entitys.add(new ExcelExportEntity("分公司(branchCompany)" ,"branchCompany")); selectKeys.add("branchCompany"); entitys.add(new ExcelExportEntity("电厂(powerPlant)" ,"powerPlant")); selectKeys.add("powerPlant"); entitys.add(new ExcelExportEntity("等效停运小时(equivalentOutageHours)" ,"equivalentOutageHours")); selectKeys.add("equivalentOutageHours"); entitys.add(new ExcelExportEntity("技术原因编码(technicalReasonCode)" ,"technicalReasonCode")); selectKeys.add("technicalReasonCode"); ExcelModel excelModel = generaterSwapUtil.getExcelParams(BizUnitEventConstant.getFormData(),selectKeys); List<Map<String, Object>> 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(BizUnitEventConstant.getColumnData(), ColumnDataModel.class); List<HeaderModel> 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); FileInfo fileInfo = FileUploadUtils.uploadFile(new FileParameter(FileTypeConstant.TEMPORARY, fileName), multipartFile); vo.setName(fileInfo.getFilename()); vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + "#" + FileTypeConstant.TEMPORARY) + "&name=" + fileName); } catch (Exception e) { e.printStackTrace(); } return ActionResult.success(vo); } /** * 删除 * @param id * @return */ @Operation(summary = "删除") @DeleteMapping("/{id}") @Transactional public ActionResult delete(@PathVariable("id") String id,@RequestParam(name = "forceDel",defaultValue = "false") boolean forceDel) throws Exception{ BizUnitEventEntity entity= bizUnitEventService.getInfo(id); if(entity!=null){ //主表数据删除 bizUnitEventService.delete(entity); } return ActionResult.success(MsgCode.SU003.get()); } /** * 批量删除 * @param obj * @return */ @DeleteMapping("/batchRemove") @Transactional @Operation(summary = "批量删除") public ActionResult batchRemove(@RequestBody Object obj){ Map<String, Object> objectMap = JsonUtil.entityToMap(obj); List<String> idList = JsonUtil.getJsonToList(objectMap.get("ids"), String.class); String errInfo = ""; List<String> 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()); } /** * 编辑 * @param id * @param bizUnitEventForm * @return */ @PutMapping("/{id}") @Operation(summary = "更新") public ActionResult update(@PathVariable("id") String id,@RequestBody @Valid BizUnitEventForm bizUnitEventForm, @RequestParam(value = "isImport", required = false) boolean isImport){ BizUnitEventEntity entity= bizUnitEventService.getInfo(id); if(entity!=null){ bizUnitEventForm.setId(String.valueOf(entity.getId())); if (!isImport) { String b = bizUnitEventService.checkForm(bizUnitEventForm,1); if (StringUtil.isNotEmpty(b)){ return ActionResult.fail(b ); } } try{ bizUnitEventService.saveOrUpdate(bizUnitEventForm,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()); } } /** * 表单信息(详情页) * 详情页面使用-转换数据 * @param id * @return */ @Operation(summary = "表单信息(详情页)") @GetMapping("/detail/{id}") public ActionResult detailInfo(@PathVariable("id") String id){ BizUnitEventEntity entity= bizUnitEventService.getInfo(id); if(entity==null){ return ActionResult.fail(MsgCode.FA001.get()); } Map<String, Object> bizUnitEventMap=JsonUtil.entityToMap(entity); bizUnitEventMap.put("id", bizUnitEventMap.get("ID")); //副表数据 //子表数据 boolean isPc = "pc".equals(ServletUtil.getHeader("jnpf-origin" )); bizUnitEventMap = generaterSwapUtil.swapDataDetail(bizUnitEventMap,BizUnitEventConstant.getFormData(),"735128948597357893",isPc?false:false); //子表数据 return ActionResult.success(bizUnitEventMap); } /** * 获取详情(编辑页) * 编辑页面使用-不转换数据 * @param id * @return */ @Operation(summary = "信息") @GetMapping("/{id}") public ActionResult info(@PathVariable("id") String id){ BizUnitEventEntity entity= bizUnitEventService.getInfo(id); if(entity==null){ return ActionResult.fail(MsgCode.FA001.get()); } Map<String, Object> bizUnitEventMap=JsonUtil.entityToMap(entity); bizUnitEventMap.put("id", bizUnitEventMap.get("ID")); //副表数据 //子表数据 bizUnitEventMap = generaterSwapUtil.swapDataForm(bizUnitEventMap,BizUnitEventConstant.getFormData(),BizUnitEventConstant.TABLEFIELDKEY,BizUnitEventConstant.TABLERENAMES); return ActionResult.success(bizUnitEventMap); } } 在上述代码中,有一个上传文件的接口,这个接口只会上传Excel文件,现在有一个需求,需要在获取到文件还没有保存时,给文件中的表头增加批注。批注内容就是像导出模版一样。上传的文件名称只有中文,鼠标悬停时不会出现批注,所以需要加上
09-10
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值