Search in sources :

Example 1 with ProgressInfo

use of com.varsql.core.common.beans.ProgressInfo in project varsql by varsqlinfo.

the class ExportServiceImpl method downloadTableData2.

public ResponseResult downloadTableData2(PreferencesRequestDTO preferencesInfo, HttpServletRequest req, HttpServletResponse res) throws Exception {
    DataDownloadInfo ddi = VartechUtils.jsonStringToObject(preferencesInfo.getPrefVal(), DataDownloadInfo.class, true);
    DatabaseInfo databaseInfo = SecurityUtil.loginInfo().getDatabaseInfo().get(ddi.getConuid());
    logger.debug("downloadTableData : {}", preferencesInfo.getPrefVal());
    String prefixSchema = StringUtils.isBlank(ddi.getSchema()) ? "" : ddi.getSchema() + ".";
    String charset = StringUtils.isBlank(ddi.getCharset()) ? VarsqlConstants.CHAR_SET : ddi.getCharset();
    String exportFileName = ValidateUtils.getValidFileName(ddi.getFileName());
    String fileId = VartechUtils.generateUUID();
    Path fileExportPath = FileServiceUtils.getSavePath(UploadFileType.EXPORT);
    File zipFile = new File(FileUtils.pathConcat(fileExportPath.toAbsolutePath().toString(), VarsqlFileType.ZIP.concatExtension(fileId)));
    int bufferSize = 2048;
    final VarsqlFileType exportType = ddi.getExportType();
    DBType dbType = DBType.getDBType(databaseInfo.getType());
    String requid = ddi.getRequid();
    ProgressInfo progressInfo = new ProgressInfo();
    progressInfo.setTotalItemSize(ddi.getItems().size());
    String sessAttrKey = HttpSessionConstants.progressKey(requid);
    System.out.println("downloadTableData2 sessAttrKey : " + sessAttrKey);
    HttpSession session = req.getSession();
    session.setAttribute(sessAttrKey, progressInfo);
    try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile), Charset.forName(charset))) {
        int idx = 0;
        for (DownloadItemInfo item : ddi.getItems()) {
            ++idx;
            SqlExecuteDTO seDto = new SqlExecuteDTO();
            seDto.setLimit(ddi.getLimit());
            seDto.setConuid(ddi.getConuid(), exportFileName, databaseInfo);
            String objectName = prefixSchema + item.getName();
            seDto.setSqlParam("{}");
            seDto.setSql(SQLUtils.generateSelectQuery(objectName, item.getCondition(), dbType));
            String downloadFilePath = FileUtils.pathConcat(fileExportPath.toAbsolutePath().toString(), exportType.concatExtension(VartechUtils.generateUUID()));
            progressInfo.setName(item.getName());
            progressInfo.setItemIdx(idx);
            AbstractWriter writer = null;
            try (OutputStream outstream = new FileOutputStream(downloadFilePath)) {
                if (VarsqlFileType.CSV.equals(exportType)) {
                    writer = new CSVWriter(outstream, ',', charset);
                } else if (VarsqlFileType.JSON.equals(exportType)) {
                    writer = new JSONWriter(outstream, "row", charset);
                } else if (VarsqlFileType.XML.equals(exportType)) {
                    writer = new XMLWriter(outstream, "row", charset);
                } else if (VarsqlFileType.EXCEL.equals(exportType)) {
                    writer = new ExcelWriter(outstream);
                } else {
                    writer = new SQLWriter(outstream, dbType, objectName, charset);
                }
                logger.debug("data export downloadFilePath :{} , query : {}", downloadFilePath, seDto.getSql());
                final String tableName = item.getName();
                SQLExecuteResult ser = (new SelectExecutor()).execute(seDto, new AbstractSQLExecutorHandler(writer) {

                    private boolean firstFlag = true;

                    private int rowIdx = 0;

                    public boolean handle(SQLHandlerParameter handleParam) {
                        if (this.firstFlag) {
                            WriteMetadataInfo whi = new WriteMetadataInfo("exportInfo");
                            List<ExportColumnInfo> columns = new LinkedList<>();
                            handleParam.getColumnInfoList().forEach(item -> {
                                ExportColumnInfo gci = new ExportColumnInfo();
                                gci.setName(item.getLabel());
                                // 추가 할것.
                                gci.setAlias(item.getKey());
                                gci.setType(item.getDbType());
                                gci.setNumber(item.isNumber());
                                gci.setLob(item.isLob());
                                columns.add(gci);
                            });
                            whi.addMetedata("tableName", tableName);
                            whi.addMetedata("columns", columns);
                            getWriter().setMetadata(new WriteMetadataInfo[] { whi });
                            if (VarsqlFileType.SQL.equals(exportType)) {
                                ((SQLWriter) getWriter()).setColumnInfos(handleParam.getColumnInfoList());
                            }
                            this.firstFlag = false;
                        }
                        progressInfo.setProgressContentLength(++rowIdx);
                        try {
                            getWriter().addRow(handleParam.getRowObject());
                        } catch (IOException e) {
                            logger.error(e.getMessage(), e);
                            return false;
                        }
                        return true;
                    }
                });
                writer.writeAndClose();
                String zipFileName = exportType.concatExtension(item.getName());
                if (ser.getResultCode() != null) {
                    VarsqlUtils.textDownload(new FileOutputStream(downloadFilePath), ser.getMessage());
                    zipFileName = item.getName() + "-export-error.txt";
                }
                try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(downloadFilePath))) {
                    ZipEntry zentry = new ZipEntry(zipFileName);
                    zentry.setSize(new File(downloadFilePath).length());
                    zos.putNextEntry(zentry);
                    byte[] buffer = new byte[bufferSize];
                    int cnt = 0;
                    while ((cnt = bis.read(buffer, 0, bufferSize)) != -1) {
                        zos.write(buffer, 0, cnt);
                    }
                    zos.closeEntry();
                }
                new File(downloadFilePath).delete();
            } catch (Exception e) {
                throw e;
            } finally {
                IOUtils.close(writer);
            }
        }
        IOUtils.close(zos);
    }
    FileInfoEntity fie = FileInfoEntity.builder().fileId(fileId).fileContId(fileId).contGroupId(databaseInfo.getVconnid()).fileDiv(UploadFileType.EXPORT.getDiv()).fileFieldName("downloadZipFile").fileName(VarsqlFileType.ZIP.concatExtension(exportFileName)).fileSize(zipFile.length()).fileExt(VarsqlFileType.ZIP.getExtension()).filePath(FileUtils.pathConcat(FileServiceUtils.getSaveRelativePath(UploadFileType.EXPORT), zipFile.getName())).build();
    fileInfoEntityRepository.save(fie);
    session.setAttribute(sessAttrKey, "complete");
    return VarsqlUtils.getResponseResultItemOne(fie);
}
Also used : JSONWriter(com.vartech.common.io.writer.JSONWriter) SelectExecutor(com.varsql.core.sql.executor.SelectExecutor) ExportColumnInfo(com.varsql.core.sql.beans.ExportColumnInfo) Arrays(java.util.Arrays) MetaControlBean(com.varsql.core.db.MetaControlBean) DatabaseParamInfo(com.varsql.core.db.valueobject.DatabaseParamInfo) BufferedInputStream(java.io.BufferedInputStream) WriteMetadataInfo(com.vartech.common.io.writer.WriteMetadataInfo) LoggerFactory(org.slf4j.LoggerFactory) Autowired(org.springframework.beans.factory.annotation.Autowired) VarsqlUtils(com.varsql.web.util.VarsqlUtils) ModelMap(org.springframework.ui.ModelMap) DatabaseInfo(com.varsql.core.db.valueobject.DatabaseInfo) ObjectType(com.varsql.core.db.servicemenu.ObjectType) DataCommonVO(com.varsql.web.common.beans.DataCommonVO) DownloadItemInfo(com.varsql.web.dto.DownloadItemInfo) Map(java.util.Map) SQLUtils(com.varsql.core.sql.util.SQLUtils) VarsqlReportConfig(com.varsql.core.db.report.VarsqlReportConfig) JSONWriter(com.vartech.common.io.writer.JSONWriter) XMLWriter(com.vartech.common.io.writer.XMLWriter) Path(java.nio.file.Path) ZipEntry(java.util.zip.ZipEntry) HttpSession(javax.servlet.http.HttpSession) DataDownloadInfo(com.varsql.web.dto.DataDownloadInfo) PreferencesConstants(com.varsql.web.constants.PreferencesConstants) ProgressInfo(com.varsql.core.common.beans.ProgressInfo) VarsqlFileType(com.varsql.core.common.code.VarsqlFileType) Collectors(java.util.stream.Collectors) CSVWriter(com.vartech.common.io.writer.CSVWriter) DDLCreateOption(com.varsql.core.db.valueobject.ddl.DDLCreateOption) List(java.util.List) ZipOutputStream(java.util.zip.ZipOutputStream) DDLInfo(com.varsql.core.db.valueobject.ddl.DDLInfo) FileInfoEntity(com.varsql.web.model.entity.app.FileInfoEntity) ExcelWriter(com.vartech.common.io.writer.ExcelWriter) IOUtils(com.vartech.common.utils.IOUtils) SQLWriter(com.varsql.core.data.writer.SQLWriter) ValidateUtils(com.varsql.web.util.ValidateUtils) HashMap(java.util.HashMap) ResponseResult(com.vartech.common.app.beans.ResponseResult) SQLExecuteResult(com.varsql.core.sql.executor.SQLExecuteResult) FileUtils(com.vartech.common.utils.FileUtils) BufferedOutputStream(java.io.BufferedOutputStream) SecurityUtil(com.varsql.core.common.util.SecurityUtil) VartechUtils(com.vartech.common.utils.VartechUtils) HttpServletRequest(javax.servlet.http.HttpServletRequest) UploadFileType(com.varsql.web.constants.UploadFileType) Charset(java.nio.charset.Charset) BlankConstants(com.varsql.core.common.constants.BlankConstants) AbstractWriter(com.vartech.common.io.writer.AbstractWriter) Service(org.springframework.stereotype.Service) LinkedList(java.util.LinkedList) HttpSessionConstants(com.varsql.web.constants.HttpSessionConstants) EnumMapperValue(com.vartech.common.app.beans.EnumMapperValue) OutputStream(java.io.OutputStream) Logger(org.slf4j.Logger) Iterator(java.util.Iterator) FileServiceUtils(com.varsql.web.util.FileServiceUtils) StringUtils(com.vartech.common.utils.StringUtils) HttpServletResponse(javax.servlet.http.HttpServletResponse) VarsqlConstants(com.varsql.core.common.constants.VarsqlConstants) FileOutputStream(java.io.FileOutputStream) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) File(java.io.File) PreferencesRequestDTO(com.varsql.web.dto.user.PreferencesRequestDTO) SQLHandlerParameter(com.varsql.core.sql.executor.handler.SQLHandlerParameter) DBType(com.varsql.core.db.DBType) MetaControlFactory(com.varsql.core.db.MetaControlFactory) FileInfoEntityRepository(com.varsql.web.repository.user.FileInfoEntityRepository) SqlExecuteDTO(com.varsql.web.dto.sql.SqlExecuteDTO) SelectExecutor(com.varsql.core.sql.executor.SelectExecutor) AbstractSQLExecutorHandler(com.varsql.core.sql.executor.handler.AbstractSQLExecutorHandler) ExcelReport(com.vartech.common.excel.ExcelReport) DatabaseInfo(com.varsql.core.db.valueobject.DatabaseInfo) ZipOutputStream(java.util.zip.ZipOutputStream) BufferedOutputStream(java.io.BufferedOutputStream) OutputStream(java.io.OutputStream) FileOutputStream(java.io.FileOutputStream) ExcelWriter(com.vartech.common.io.writer.ExcelWriter) SQLHandlerParameter(com.varsql.core.sql.executor.handler.SQLHandlerParameter) WriteMetadataInfo(com.vartech.common.io.writer.WriteMetadataInfo) ZipEntry(java.util.zip.ZipEntry) CSVWriter(com.vartech.common.io.writer.CSVWriter) DBType(com.varsql.core.db.DBType) AbstractWriter(com.vartech.common.io.writer.AbstractWriter) XMLWriter(com.vartech.common.io.writer.XMLWriter) VarsqlFileType(com.varsql.core.common.code.VarsqlFileType) AbstractSQLExecutorHandler(com.varsql.core.sql.executor.handler.AbstractSQLExecutorHandler) ExportColumnInfo(com.varsql.core.sql.beans.ExportColumnInfo) BufferedInputStream(java.io.BufferedInputStream) ProgressInfo(com.varsql.core.common.beans.ProgressInfo) List(java.util.List) LinkedList(java.util.LinkedList) FileInfoEntity(com.varsql.web.model.entity.app.FileInfoEntity) DownloadItemInfo(com.varsql.web.dto.DownloadItemInfo) Path(java.nio.file.Path) SqlExecuteDTO(com.varsql.web.dto.sql.SqlExecuteDTO) HttpSession(javax.servlet.http.HttpSession) DataDownloadInfo(com.varsql.web.dto.DataDownloadInfo) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) IOException(java.io.IOException) ZipOutputStream(java.util.zip.ZipOutputStream) FileOutputStream(java.io.FileOutputStream) SQLWriter(com.varsql.core.data.writer.SQLWriter) SQLExecuteResult(com.varsql.core.sql.executor.SQLExecuteResult) File(java.io.File)

Aggregations

ProgressInfo (com.varsql.core.common.beans.ProgressInfo)1 VarsqlFileType (com.varsql.core.common.code.VarsqlFileType)1 BlankConstants (com.varsql.core.common.constants.BlankConstants)1 VarsqlConstants (com.varsql.core.common.constants.VarsqlConstants)1 SecurityUtil (com.varsql.core.common.util.SecurityUtil)1 SQLWriter (com.varsql.core.data.writer.SQLWriter)1 DBType (com.varsql.core.db.DBType)1 MetaControlBean (com.varsql.core.db.MetaControlBean)1 MetaControlFactory (com.varsql.core.db.MetaControlFactory)1 VarsqlReportConfig (com.varsql.core.db.report.VarsqlReportConfig)1 ObjectType (com.varsql.core.db.servicemenu.ObjectType)1 DatabaseInfo (com.varsql.core.db.valueobject.DatabaseInfo)1 DatabaseParamInfo (com.varsql.core.db.valueobject.DatabaseParamInfo)1 DDLCreateOption (com.varsql.core.db.valueobject.ddl.DDLCreateOption)1 DDLInfo (com.varsql.core.db.valueobject.ddl.DDLInfo)1 ExportColumnInfo (com.varsql.core.sql.beans.ExportColumnInfo)1 SQLExecuteResult (com.varsql.core.sql.executor.SQLExecuteResult)1 SelectExecutor (com.varsql.core.sql.executor.SelectExecutor)1 AbstractSQLExecutorHandler (com.varsql.core.sql.executor.handler.AbstractSQLExecutorHandler)1 SQLHandlerParameter (com.varsql.core.sql.executor.handler.SQLHandlerParameter)1