前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >i系统的文件下载

i系统的文件下载

作者头像
热心的社会主义接班人
发布2019-06-12 13:54:53
7980
发布2019-06-12 13:54:53
举报
文章被收录于专栏:cscs

导出文件,采用多态,多线程的设计方法。 定义一个 WriterUtil 的基类,写xls,txt,ndt等都继承其方法,同时重要的writeFile() 为了要复写,在基类抛出异常。

代码语言:javascript
复制
    /**
     * 是否剔除中间汇总节点
     * @return
     * @throws Exception
     */
    public File writeFile() throws Exception {
        throw new Exception("请实现该方法!");
    }

TIM截图20190606145621.png

在control中的下载方法中,采用多线程下载各个东西。

代码语言:javascript
复制
@ResponseBody
    @RequestMapping("/ei/rwdata/download/start")
    public void startDownload(HttpServletResponse response, @RequestParam int choosetype, @RequestParam String sid, HttpServletRequest request)
            throws Exception {
        long start = System.currentTimeMillis();
        Login login = JspFunc.getLogin(request);
        response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
        request.setAttribute("choosetype", choosetype);
        WriterParams params = getParamsMap(sid);
        params.setType(choosetype);
        WriterUtil util = null;
        int type = params.getType();
        StringBuffer log = new StringBuffer();//记录日志的信息
        switch (type) {
            case TYPE_PAT:
                log.append("导出格式:").append("PAT").append("\r\n");
                util = new PatWriterUtil(login, params);
                break;
            case TYPE_TXT:
                log.append("导出格式:").append("TXT").append("\r\n");
                util = new TxtWriterUtil(login, params);
                break;
            case TYPE_NDT:
                log.append("导出格式:").append("NDT").append("\r\n");
                util = new NdtWriterUtil(login, params);
                break;
            case TYPE_EXCEL:
                log.append("导出格式:").append("EXCEL").append("\r\n");
                util = new XlsWriterUtil(login, params);
                break;
            case TYPE_OEM_XML:
                log.append("导出格式:").append("XML").append("\r\n");
                util = new XmlWriterUtil(login, params);
                break;
            case TYPE_DAT:
                log.append("导出格式:").append("DAT").append("\r\n");
                util = new DatWriterUtil(login, params);
                break;
            case TYPE_EXCEL_ADBC_KHFX:
                log.append("导出格式:").append("DAT").append("\r\n");
                util = new XlsWriterUtilForKHFX(login, params);
                break;
        }
        log.append("任务:").append(params.getTask().getCaption()).append("\r\n");
        log.append("数据集:").append(params.getDataset()).append("\r\n");
        if (params.getBbqs() != null || !StrFunc.isNull(params.getCbbq())) {
            log.append("报表期:");
            String[] bbqs = params.getBbqs();
            if (bbqs != null && bbqs.length > 0) {
                log.append(ArrayFunc.array2Str(bbqs, ","));
            } else {
                log.append(params.getCbbq());
            }
        }
        Bbh cbbh = params.getCbbh();
        if (cbbh != null) {
            log.append("\r\n当前报表户:").append(cbbh.getName()).append("(").append(cbbh.getId()).append(")").append("\r\n");
        }
        int op = params.getDwOp();
        String[] dwop = new String[] { "本级单位(作为基层单位上报)", "本级及直接下级单位(下级单位作为基层单位上报)", "所有单位", "已选择的单位" };
        if (op > -1 && op < dwop.length) {
            log.append("导出单位选项:").append(dwop[op]).append("\r\n");
            if (op == WriterUtil.UPSELECTED) {
                //解决添加多标签选中报表户串的问题
                String id = StrFunc.null2blank(params.getTabid())+params.getTask().getServerId();
                BbhBookMarks marks = BbhBookMarkUtil.getBbhBookMarks(login, id);
                if (marks != null) {
                    int count = marks.getCount();
                    log.append("选择户数:").append(count).append("\r\n");
                    if (count <= 10) {
                        String[] bbhs = marks.getBbhs();
                        log.append("选择的户:").append(ArrayFunc.array2Str(bbhs, ";")).append("\r\n");
                    }
                }
            }
        }

        WriteFileThread thread = new WriteFileThread(util);
        /**
         * IRPT-21919  edit by ligl on 20160223  导出的excel和导出数据明显感觉时间不对,都是0 
         */
        thread.setStartTime(start);
        thread.setLogs(log.toString());
        threadMap.put(sid, thread);
        Thread realthread = new Thread(thread);
        realthread.start();
//      ReportLogManager.addInfoLog(login, LogedOperations.OP_BBHDATA_EXPORTDATA, start, null, params.getTask().getGroup(),
//              params.getTask().getServerId(), params.getCbbq(), cbbh.getId(), cbbh.getType(), "导出报表户数据", log.toString(), null);
    }

WriteFileThread 类实现了Runnable接口。 其run方法,调用具体的文件的写util类。

代码语言:javascript
复制
public void run() {
        try {
            file = util.writeFile();
        }
        catch (CancelException e) {
            util.addLog("导出操作被取消!");
        }
        catch (Exception e) {
            ReportLogManager.addWarnLog(null, null, null, null, null, null, null, null,
                    e.getMessage(), StrFunc.exception2str(e), null);
            ex = e;
            util.addLog(StrFunc.exceptionMsg2str(e));
        }
        finally {
            finished = true;
        }

    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.06.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档