package cn.com.goldenwater.dcproj.utils.export; import cn.com.goldenwater.dcproj.dao.AttRsBaseCrrctDao; import cn.com.goldenwater.dcproj.dto.BisInspRsvrRgstrPcDto; import cn.com.goldenwater.dcproj.dto.BisInspRsvrRgstrPcDtoVo; import cn.com.goldenwater.dcproj.model.*; import cn.com.goldenwater.dcproj.param.*; import cn.com.goldenwater.dcproj.service.*; import cn.com.goldenwater.dcproj.utils.ZipUtil; import cn.com.goldenwater.util.common.FileUtils; import com.github.pagehelper.PageInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.io.*; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.UUID; /** * @ClassName CreateSkTables * @Author liyz * @Date 2019/3/15 11:40 * @Version 1.0 **/ @Component public class CreateSkTables { private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); @Value("${export.basePath}") public String exportBasePath; @Autowired private ExcelFieldUtil excelFieldUtil; @Autowired private CreateExcelHelper createExcelHelper; /** * 8.小水库督查情况Service */ @Autowired private BisInspRsvrRgstrService bisInspRsvrRgstrService; // 5张表合成1张表 // 5-1 基础信息 @Autowired private AttRsBaseCrrctDao attRsBaseCrrctDao; @Autowired private AttRsBaseService attRsBaseService; // 5-2 重点环节落实情况 @Autowired private BisInspBaseExtService bisInspBaseExtService; // 5-3 责任人落实情况 @Autowired private BisInspBasePresExtService bisInspBasePresExtService; // 5-4 水库工程实体和运行情况 @Autowired private BisInspSafeExtManageService bisInspSafeExtManageService; // 5-5 走访情况 @Autowired private BisInspBaseViewService bisInspBaseViewService; // 通过小水库督查情况表 得id 获取其他5张表的数据 合成一张表 /** * 8.创建小水库督查情况表 * * @param * @param */ public void createBisInspRsvrRgstrPcDtoExcel(TypeExportParam typeExportParam, PrintWriter printWriter) { // 一页查200条数据 typeExportParam.setPageNum(0); typeExportParam.setPageSize(200); PageInfo data = bisInspRsvrRgstrService.findPcPage(typeExportParam); // 如果没有数据,则直接返回 if (data.getList().size() == 0) { printWriter.println("暂无数据可导出。
"); printWriter.flush(); return; } String tab = TableEnum.T8.toString(); OutputStream os = null; printWriter.println("准备导出,开始创建导出目录
"); printWriter.flush(); String fileName = TableEnum.T8.getName(); printWriter.println(sdf.format(new Date()) + " 开始创建 " + fileName + ".xls" + "
"); printWriter.flush(); //导出 try { String filePath = UUID.randomUUID().toString(); String dir = exportBasePath + File.separator + filePath + File.separator; String zipFile = exportBasePath + File.separator + filePath + ".zip"; FileUtils.mkFolder(dir); // 如果有数据,则导出到excel File outputFile = new File(dir + fileName + (System.currentTimeMillis()) + ".xls"); os = new FileOutputStream(outputFile); // 导出到excel // 处理一下,加入5张表的数据 ExportAbstract exportZ = createExcelHelper.export(tab, fileName, os, excelFieldUtil.getBisInspRsvrRgstrPcDtoDataList(getBisVo(data.getList()))); int pages = data.getPages(); // 如果超过一页 if (pages > 1) { for (int p = 2; p <= pages; p++) { typeExportParam.setPageNum(p); PageInfo dataNext = bisInspRsvrRgstrService.findPcPage(typeExportParam); // 继续导出 // 处理一下,加入5张表的数据 exportZ.ContinueExport(excelFieldUtil.getBisInspRsvrRgstrPcDtoDataList(getBisVo(dataNext.getList()))); } } exportZ.EndExport(); os.close(); printWriter.println(sdf.format(new Date()) + " 完成创建 " + fileName + ".xls" + "
"); printWriter.flush(); // 指定压缩源,可以是目录或文件 String src = dir; // 压缩包路径 String archive = zipFile; // 压缩包注释 String comment = "Java Zip SLDC"; // 压缩文件或目录 ZipUtil.zip(src, archive, comment); printWriter.write("创建完成。压缩完成。 点击下载"); printWriter.flush(); } catch (Exception e) { try { os.close(); } catch (IOException e1) { e1.printStackTrace(); } e.printStackTrace(); } } private List getBisVo(List dataList) { List dataListVo = new ArrayList<>(); dataList.forEach(x -> { BisInspRsvrRgstrPcDtoVo bisVo = new BisInspRsvrRgstrPcDtoVo(); // 放入督查情况表 bisVo.setBisInspRsvrRgstrPcDto(x); // 1.放入基础信息 bisVo.setAttRsBaseCrrct(getAttRsBaseCrrctBy(x)); bisVo.setAttRsBase(getAttRsBaseBy(x)); // 2.重点环节落实情况 bisVo.setBisInspBaseExt(getBisInspBaseExtBy(x)); // 3.责任人落实情况 bisVo.setBisInspBasePresExt(getBisInspBasePresExtBy(x)); // 4.水库工程实体和运行情况 bisVo.setBisInspSafeExtManage(getBisInspSafeExtManageBy(x)); // 5.走访情况 bisVo.setBisInspBaseView(getBisInspBaseViewBy(x)); dataListVo.add(bisVo); }); return dataListVo; } private AttRsBaseCrrct getAttRsBaseCrrctBy(BisInspRsvrRgstrPcDto bisInspRsvrRgstrPcDto) { String rsCode = bisInspRsvrRgstrPcDto.getRsCode(); String persId = bisInspRsvrRgstrPcDto.getRecPersId(); AttRsBaseCrrct att = attRsBaseCrrctDao.get(rsCode, persId); return att == null ? new AttRsBaseCrrct() : att; } private AttRsBase getAttRsBaseBy(BisInspRsvrRgstrPcDto bisInspRsvrRgstrPcDto) { String rsCode = bisInspRsvrRgstrPcDto.getRsCode(); AttRsBase att = attRsBaseService.get(rsCode); return att == null ? new AttRsBase() : att; } // 2 private BisInspBaseExt getBisInspBaseExtBy(BisInspRsvrRgstrPcDto bisInspRsvrRgstrPcDto) { BisInspBaseExtParam bisInspBaseExtParam = new BisInspBaseExtParam(); String rgstrId = bisInspRsvrRgstrPcDto.getRgstrId(); BisInspBaseExt bisInspBaseExt = new BisInspBaseExt(); if (rgstrId != null) { bisInspBaseExtParam.setRgstrId(rgstrId); bisInspBaseExt = bisInspBaseExtService.getBy(bisInspBaseExtParam); } return bisInspBaseExt == null ? new BisInspBaseExt() : bisInspBaseExt; } //3 根据督查登记表ID获取三个责任人基本信息 private BisInspBasePresExt getBisInspBasePresExtBy(BisInspRsvrRgstrPcDto bisInspRsvrRgstrPcDto) { BisInspBasePresExtParam bisInspBasePresExtParam = new BisInspBasePresExtParam(); String rgstrId = bisInspRsvrRgstrPcDto.getRgstrId(); bisInspBasePresExtParam.setRgstrId(rgstrId); BisInspBasePresExt inspBaseExt = bisInspBasePresExtService.getBy(bisInspBasePresExtParam); return inspBaseExt == null ? new BisInspBasePresExt() : inspBaseExt; } //4 水库工程实体和运行管理情况 private BisInspSafeExtManage getBisInspSafeExtManageBy(BisInspRsvrRgstrPcDto bisInspRsvrRgstrPcDto) { BisInspSafeExtManageParam safeExtManageParam = new BisInspSafeExtManageParam(); String rgstrId = bisInspRsvrRgstrPcDto.getRgstrId(); safeExtManageParam.setRgstrId(rgstrId); BisInspSafeExtManage bisInspSafeExtManage = bisInspSafeExtManageService.getBy(safeExtManageParam); return bisInspSafeExtManage == null ? new BisInspSafeExtManage() : bisInspSafeExtManage; } // 5 走访情况 private BisInspBaseView getBisInspBaseViewBy(BisInspRsvrRgstrPcDto bisInspRsvrRgstrPcDto) { BisInspBaseViewParam bisInspBaseViewParam = new BisInspBaseViewParam(); String rgstrId = bisInspRsvrRgstrPcDto.getRgstrId(); bisInspBaseViewParam.setRgstrId(rgstrId); BisInspBaseView inspBaseView = bisInspBaseViewService.getBy(bisInspBaseViewParam); return inspBaseView == null ? new BisInspBaseView() : inspBaseView; } }