Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r37807 -r37829 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 37807) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 37829) @@ -167,6 +167,7 @@ import com.forgon.tools.MyCollectionUtils; import com.forgon.tools.SpringBeanManger; import com.forgon.tools.SqlBuilder; +import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.date.DateTools; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.db.InitDbConnection; @@ -2896,7 +2897,24 @@ tousseList = objectDao.findBySql(TousseInstance.class.getSimpleName(), sql); } if(CollectionUtils.isNotEmpty(tousseList)){ - createExportFileByJxl(tousseList, ops); + List columns = new ArrayList(); + //器械包信息模块不导出已过滤的数据,只导出选中的列 + boolean enableFilteredDataIsNotExportedOfTousseInstanceView = + ConfigUtils.getSystemSetConfigByNameBool("enableFilteredDataIsNotExportedOfTousseInstanceView"); + if(enableFilteredDataIsNotExportedOfTousseInstanceView){ + String columnsStr = StrutsParamUtils.getPraramValue("columns", ""); + columns = (List) StringTools.toCollectionIgnoreNullAndBlank(columnsStr, ";"); + }else{ + //需导出的列头定义(与器械包信息页面列表保持一致) + String ss[] = {"器械包名称","条码","标识牌条码","状态","所在位置","所属仓库","申请时间","回收时间","清洗人","清洗时间", + "失效日期","装配人","装配时间","审核人","审核时间","包装类型","灭菌员","灭菌完成时间", + "灭菌程序","灭菌批号","发货人","发货时间","废弃时间","废弃原因","废弃操作人","生物监测结果", + "化学监测结果","外来器械归还时间" + }; + columns = new ArrayList(); + CollectionUtils.addAll(columns, ss); + } + createExportFileByJxl(tousseList, columns, ops); } } @@ -14217,5 +14235,344 @@ } return tousseOperationStatus; } + + /** + * 基础jxl组件的导出下载实现方法 + */ + private void createExportFileByJxl(List tousseList, List headers, OutputStream ops){ + WritableWorkbook book = null; + try { + // 打开文件 + book = Workbook.createWorkbook(ops); + if(tousseList!=null && !tousseList.isEmpty()){ + int length=tousseList.size();//查询结果记录数 + int sheetSize=60000; + int sheetNum=1; + if(length%sheetSize>0){ + sheetNum=length/sheetSize+1; + }else{ + sheetNum=length/sheetSize; + } + //导出excel列的宽度 + Map widthMap = buildExportExcelColumnWidthMap(headers); + List filterHeaders = new ArrayList(); + for (String header : headers) { + if(!widthMap.containsKey(header)){ + continue; + } + if(filterHeaders.contains(header)){ + continue; + } + filterHeaders.add(header); + } + if(CollectionUtils.isEmpty(filterHeaders)){ + return; + } + + //获取器械包实例的其他导出信息 + List exportVoList = getExportVo(tousseList); + Label label; + //位置科室名称map + Map locationMap = new HashMap(); + if(filterHeaders.contains("所在位置")){ + locationMap = this.loadLocationCodeAndNameMap(tousseList); + } + //仓库名称map + Map wareHouseMap = new HashMap(); + if(filterHeaders.contains("所属仓库")){ + wareHouseMap = this.loadWareHouseIdAndNameMap(tousseList); + } + //申请单map + Map invoicePlanMap = new HashMap(); + if(filterHeaders.contains("申请时间")){ + invoicePlanMap = loadInvoicePlanIdAndInvoicePlanMap(tousseList); + } + + //循环sheet数量 + for(int kk=0;kk tiId.equals(a.getTousseInstanceId())).findFirst().orElse(null); + //行 + int r = (i+1-(kk*sheetSize)); + //列 + for (int c = 0; c < filterHeaders.size(); c++) { + //列名称 + String column = filterHeaders.get(c); + //单元格内容 + String cont = ""; + switch(column){ + case "器械包名称": + cont = tousseInstance.getTousseName();break; + case "条码": + cont = tousseInstance.getBarcode();break; + case "标识牌条码": + cont = tousseInstance.getIdCardInstanceBarcode();break; + case "状态": + cont = tousseInstance.getStatus();break; + case "所在位置": + cont = locationMap.get(tousseInstance.getLocation());break; + case "所属仓库": + cont = wareHouseMap.get(tousseInstance.getWareHouseId());break; + case "申请时间": + InvoicePlan ip = invoicePlanMap.get(tousseInstance.getInvoicePlanID()); + cont = (ip == null ? "" : ip.getApplicationTimeStr()); + break; + case "回收时间": + cont = tousseInstance.getRecyclingTime();break; + case "清洗人": + cont = tousseInstance.getWashOperator();break; + case "清洗时间": + cont = tousseInstance.getWashEndTime();break; + case "失效日期": + cont = tousseInstance.getValidUntilStr(new SimpleDateFormat("yyyy-MM-dd"));break; + case "装配人": + cont = tousseInstance.getOperator();break; + case "装配时间": + cont = (tousseInstance.getOperationTime() != null ? new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(tousseInstance.getOperationTime()) : "");break; + case "审核人": + cont = tousseInstance.getReviewer();break; + case "审核时间": + cont = (tousseInstance.getReviewTime() != null ? new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(tousseInstance.getReviewTime()) : "");break; + case "包装类型": + cont = tousseInstance.getPackageType();break; + case "灭菌员": + cont = tousseInstance.getSterilizationUser();break; + case "灭菌完成时间": + cont = tousseInstance.getSterileEndTime();break; + case "灭菌程序": + cont = tousseInstance.getSterilingType();break; + case "灭菌批号": + cont = ((StringUtils.isNotBlank(tousseInstance.getSterilizerName()) && StringUtils.isNotBlank(tousseInstance.getSterileFrequency())) ? tousseInstance.getSterilizerName() + ",第" + tousseInstance.getSterileFrequency() + "炉" : "");break; + case "发货人": + cont = tousseInstance.getInvoiceSender();break; + case "发货时间": + cont = (tousseInstance.getInvoiceSendTime() != null ? new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(tousseInstance.getInvoiceSendTime()) : "");break; + case "废弃时间": + cont = (tousseInstance.getWasteDate() != null ? new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(tousseInstance.getWasteDate()) : "");break; + case "废弃原因": + cont = tousseInstance.getWasteReason();break; + case "废弃操作人": + cont = tousseInstance.getOperateUser();break; + case "生物监测结果"://生物监测结果 + String biologyResult = ""; + if(tIExportVo != null){ + biologyResult = tIExportVo.getBiologyResult(); + } + cont = biologyResult; + break; + case "化学监测结果"://化学监测结果 + String chemistryResult = ""; + if(tIExportVo != null){ + chemistryResult = tIExportVo.getChemistryResult(); + } + cont = chemistryResult; + break; + case "外来器械归还时间"://外来器械归还时间 + String ftRetrnTime = ""; + if(null != tIExportVo){ + Date ftRetrnTimeDate = tIExportVo.getForeignTousseApplicationReturnTime(); + if(ftRetrnTimeDate != null){ + ftRetrnTime = DateTools.getFormatDateStr(ftRetrnTimeDate, DateTools.COMMON_DATE_HMS); + } + } + cont = ftRetrnTime; + break; + default: + cont = ""; + ; + } + label = new Label(c, r, cont); + ws.addCell(label); + } + }else{ + break; + } + } + } + } + + // 写入数据并关闭文件 + book.write(); + } catch (Exception e) { + e.printStackTrace(); + }finally{ + if(book!=null){ + try { + book.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + + /** + * 包实例的申请单Map + * @param tousseList + * @return + */ + @SuppressWarnings("unchecked") + private Map loadInvoicePlanIdAndInvoicePlanMap(List tousseList) { + Map invoicePlanIdAndInvoicePlanMap = new HashMap(); + if(CollectionUtils.isEmpty(tousseList)){ + return invoicePlanIdAndInvoicePlanMap; + } + Set invoicePlanIds = new HashSet(); + for (TousseInstance ti : tousseList) { + if(DatabaseUtil.isPoIdValid(ti.getInvoicePlanID())){ + invoicePlanIds.add(ti.getInvoicePlanID()); + } + } + List invoicePlans = null; + if(CollectionUtils.isNotEmpty(invoicePlanIds)){ + List invoicePlanIdList = new ArrayList(); + invoicePlanIdList.addAll(invoicePlanIds); + invoicePlans = objectDao.getCollection(InvoicePlan.class.getSimpleName(), "id", invoicePlanIdList); + if(CollectionUtils.isNotEmpty(invoicePlans)){ + for (InvoicePlan ip : invoicePlans) { + invoicePlanIdAndInvoicePlanMap.put(ip.getId(), ip); + } + } + } + return invoicePlanIdAndInvoicePlanMap; + } + + /** + * 表格每一列的宽度 + * @param headers + * @return + */ + private Map buildExportExcelColumnWidthMap(List headers) { + Map widthMap = new HashMap(); + if(CollectionUtils.isEmpty(headers)){ + return widthMap; + } + /*String ss[] = {"器械包名称","条码","标识牌条码","状态","所在位置","所属仓库","清洗人","清洗时间", + "失效日期","装配人","装配时间","审核人","审核时间","包装类型","灭菌员","灭菌完成时间", + "灭菌程序","灭菌批号","发货人","发货时间","废弃时间","废弃原因","废弃操作人","生物监测结果", + "化学监测结果","外来器械归还时间","申请时间","回收时间" + };*/ + for (String header : headers) { + Integer width = null; + switch (header) { + case "器械包名称": + width = 30; + break; + case "条码": + width = 15; + break; + case "标识牌条码": + width = 20; + break; + case "状态": + width = 20; + break; + case "所在位置": + width = 20; + break; + case "所属仓库": + width = 20; + break; + case "清洗人": + width = 20; + break; + case "清洗时间": + width = 20; + break; + case "失效日期": + width = 15; + break; + case "装配人": + width = 15; + break; + case "装配时间": + width = 20; + break; + case "审核人": + width = 20; + break; + case "审核时间": + width = 20; + break; + case "包装类型": + width = 20; + break; + case "灭菌员": + width = 20; + break; + case "灭菌完成时间": + width = 20; + break; + case "灭菌程序": + width = 15; + break; + case "灭菌批号": + width = 15; + break; + case "发货人": + width = 20; + break; + case "发货时间": + width = 20; + break; + case "废弃时间": + width = 20; + break; + case "废弃原因": + width = 20; + break; + case "废弃操作人": + width = 20; + break; + case "生物监测结果": + width = 20; + break; + case "化学监测结果": + width = 20; + break; + case "外来器械归还时间": + width = 23; + break; + case "申请时间": + width = 23; + break; + case "回收时间": + width = 23; + break; + default: + break; + } + if(width != null){ + widthMap.put(header, width); + } + } + return widthMap; + } + }