<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # :-: 數據導出 一、總體流程如下 數據導出采用異步任務方式處理。用戶先在頁面點擊導出數據按鈕執行創建一個導出任務,專門的任務對其執行具體的導出任務。執行完畢后會生成一個csv文件存儲在OSS。用戶去下載中心可以查看并下載文件 ![](https://img.kancloud.cn/de/c9/dec931e2d0387f40b2c78d126c639741_1267x158.png) 二、流程說明 1、創建任務: A:準備好導出sql模板語句 放在common\_query\_template 表。需要符合mybatis 標準 B:頁面執行點擊導出操作,請求接口/data/export 參數包含 導出名稱 導出數據列 查詢條件 模板SQL的keyCode等。 C:接口將導出的請求驗證之后存儲在common\_export 表。 ~~~ CommonQueryTemplate queryTemplate = queryService.getCommonQueryTemplate(request.getExportKey()); AssertUtil.notNull(queryTemplate, "參數有誤!"); CommonExport commonExport=new CommonExport(); commonExport.setExportKey(request.getExportKey()); commonExport.setExportName(request.getExportName()); commonExport.setQueue(JSONObject.toJSONString(request)); commonExport.setUserId(AdminContextUtil.getMyId()); commonExport.setStatus(0); int r=commonExportMapper.insert(commonExport); ~~~ 2、發送MQ消息: 創建任務后系統發送一個MQ消息 消息的內容是導出任務表的ID ~~~ kafkaSender.sendMsg(MsgConf.Topics.Export,commonExport.getId()); ~~~ 3、消費MQ消息: 導出的Topic接收到消息之后執行導出的任務 ~~~ @Component @Slf4j public class ExportListener { @Resource ExportService exportService; @KafkaListener(id="Export",topics = "Export" ) public void onMessage0( ConsumerRecord r){ log.info("【ExportListener消息消費接收到消息key....{}.....value....{}",r.key(),r.value()); Object value=r.value().toString(); exportService.export(Long.parseLong(value.toString())); } } ~~~ 根據導出任務的條件執行模板SQL語句。然后將查詢到的數據存儲在csv 文件中。將生成的csv文件存放到阿里云的OSS中。導出任務完成。 ~~~ /** * 導出數據 */ public void export(Long id){ CommonExport commonExportUpdate=new CommonExport(); commonExportUpdate.setId(id); QuerySQLContext.remove(); try { log.info("【導出數據】.....id{}",id); CommonExport commonExport = commonExportMapper.selectById(id); AssertUtil.isTrue(commonExport!=null, "數據導出失敗"); if (commonExport.getStatus()==1) { log.error("【導出數據】數據正在導出......停止本次導出"); return; } if (commonExport.getStatus() == 2) { log.error("【導出數據】數據導出失敗......停止本次導出"); return; } log.info("【導出數據】....commonExport.....{}",commonExport); CommonQueryTemplate queryTemplate = queryService.getCommonQueryTemplate(commonExport.getExportKey()); AssertUtil.notNull(queryTemplate, "【導出數據】queryTemplate==null"); ExportDataReq exportDataReq = JSONObject.parseObject(commonExport.getQueue(),ExportDataReq.class); QuerySQLContext.set(getQuerySqlTemplate(queryTemplate)); String fileName ="export/" + commonExport.getExportName().concat(".csv"); commonExportUpdate.setStatus(1); commonExportMapper.updateById(commonExportUpdate); exportData(exportDataReq, commonExport, fileName, 0L); commonExportUpdate.setStatus(2); commonExportUpdate.setUrl(ConfUtil.serverFileUrl+fileName); commonExportMapper.updateById(commonExportUpdate); }catch (Exception e){ log.error("【導出數據】........發生異常......{}",e); if (commonExportUpdate.getId() != null) { commonExportUpdate.setErrorDesc(e.getMessage()); commonExportUpdate.setStatus( 3); commonExportMapper.updateById(commonExportUpdate); } e.printStackTrace(); } } /** * 數據導出執行 */ private void exportData(ExportDataReq exportDataReq ,CommonExport data, String fileName,Long nextPoint) { JSONObject search = exportDataReq.getSearchParam(); search.put(TemplateKit.PAGE_SIZE, 1000); List<Map> expDataList =ObjectUtils.defaultIfNull(queryService.queryExportData(search),new ArrayList<>()); ExcelDataUtils.ExcelHeaderData excelHeaderData = ExcelDataUtils.builderHeaderAndData(exportDataReq.getExportColumn().stream() .map(ExportDataReq.Column::getKey).collect(Collectors.toList()), exportDataReq.getExportColumn().stream() .map(ExportDataReq.Column::getValue).collect(Collectors.toList()), expDataList); File file = new File("export_" + data.getExportName() + ".csv"); List<String[]> arrayList = new ArrayList<>(); if (nextPoint <= 0) { arrayList.add(excelHeaderData.getHeader()); } arrayList.addAll(excelHeaderData.getData()); CsvUtil.write(file, arrayList); data.setTotal(ObjectUtils.defaultIfNull(data.getTotal(), 0L) + expDataList.size()); log.info("【數據導出執行】:{},total:{},dataSize:{}", fileName, data.getTotal(), excelHeaderData.getData().size()); if (excelHeaderData.getData().size() > 0) { search.put(TemplateKit.PAGE_NUMBER, ObjectUtils.defaultIfNull(search.getLong(TemplateKit.PAGE_NUMBER), 0L) + 1); nextPoint = OSSClientUtil.appendUpload(fileName, file, nextPoint); exportData(exportDataReq, data, fileName, nextPoint); } } ~~~ 4、導出文件下載 導出的任務完成之后會將下載文件的URL寫入common\_export 表。下載中心下載相應的數據 ![](https://img.kancloud.cn/ef/00/ef00796d756c2db62701104b08aa1003_1525x1071.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看