Selaa lähdekoodia

资金导出excel

hankunkun 11 kuukautta sitten
vanhempi
sitoutus
a234c671e7

+ 99 - 81
src/main/java/ieven/server/webapp/domain/exporter/Exporter.java

@@ -23,92 +23,110 @@ import java.util.Map;
 
 @Slf4j
 public class Exporter {
-  private String rootPath = "temp";
-  private MongoTemplate mongoTemplate;
-  private GridFsTemplate gridFsTemplate;
+    private String rootPath = "temp";
+    private MongoTemplate mongoTemplate;
+    private GridFsTemplate gridFsTemplate;
 
-  public Exporter() {
-    this.mongoTemplate = SpringContextUtil.getBean(MongoTemplate.class);
-    this.gridFsTemplate = SpringContextUtil.getBean(GridFsTemplate.class);
-  }
-
-  public String generateFile(
-      Fields fields, String filename, String filePath, MongoCursor<Document> cursor)
-      throws IOException {
-    LinkedHashMap<String, String> headers = fields.getFields();
-    LinkedHashMap<String, String> headersReverse = fields.getFieldsReverse();
-    int currentRowRead = 0;
-    int currentSheetNum = 1;
-    Workbook wb = new SXSSFWorkbook(1000); // 关键语句
-    CreationHelper createHelper = wb.getCreationHelper();
-    Sheet sheet = null; // 工作表对象
-    Row cRow = null; // 行对象
-    // 创建sheet
-    if (sheet == null) {
-      sheet = wb.createSheet("sheet" + currentSheetNum);
-    }
-    // 创建表头
-    cRow = sheet.createRow(0);
-    int hcIndex = 0;
-    for (Map.Entry<String, String> entry : headersReverse.entrySet()) {
-      String key = entry.getKey();
-      Cell cell = cRow.createCell(hcIndex);
-      cell.setCellValue(key);
-      hcIndex++;
+    public Exporter() {
+        this.mongoTemplate = SpringContextUtil.getBean(MongoTemplate.class);
+        this.gridFsTemplate = SpringContextUtil.getBean(GridFsTemplate.class);
     }
-    currentRowRead++;
-    // 创建内容
-    Document doc;
-    while (cursor.hasNext()) {
-      doc = cursor.next();
-      cRow = sheet.createRow(currentRowRead);
-      int cInsert = 0;
-      // 遍历表头并且插入数据,默认全部为字符串
-      for (String alias : headers.keySet()) {
-        Cell cell = cRow.createCell(cInsert);
-        Object value = doc.get(alias);
-        if (value instanceof String) {
-          cell.setCellValue((String) value);
-        } else if (value instanceof Number) {
-          cell.setCellType(CellType.NUMERIC);
-          cell.setCellValue(Double.parseDouble(String.valueOf(value)));
+
+    public String generateFile(
+            Fields fields, String filename, String filePath, MongoCursor<Document> cursor)
+            throws IOException {
+        LinkedHashMap<String, String> headers = fields.getFields();
+        LinkedHashMap<String, String> headersReverse = fields.getFieldsReverse();
+        int currentRowRead = 0;
+        int currentSheetNum = 1;
+        Workbook wb = new SXSSFWorkbook(1000); // 关键语句
+        Sheet sheet = null; // 工作表对象
+        Row cRow = null; // 行对象
+        // 创建sheet
+        if (sheet == null) {
+            sheet = wb.createSheet("sheet" + currentSheetNum);
+        }
+        // 创建表头
+        cRow = sheet.createRow(0);
+        int hcIndex = 0;
+        for (Map.Entry<String, String> entry : headersReverse.entrySet()) {
+            String key = entry.getKey();
+            Cell cell = cRow.createCell(hcIndex);
+            cell.setCellValue(key);
+            hcIndex++;
+        }
+        currentRowRead++;
+        // 创建内容
+        Document doc;
+        while (cursor.hasNext()) {
+            doc = cursor.next();
+            cRow = sheet.createRow(currentRowRead);
+            int cInsert = 0;
+            // 遍历表头并且插入数据,默认全部为字符串
+            for (String alias : headers.keySet()) {
+                Cell cell = cRow.createCell(cInsert);
+                Object value = doc.get(alias);
+                if (value instanceof String) {
+                    cell.setCellValue((String) value);
+                } else if (value instanceof Number) {
+                    cell.setCellType(CellType.NUMERIC);
+                    cell.setCellValue(Double.parseDouble(String.valueOf(value)));
+                }
+                cInsert++;
+            }
+            currentRowRead++;
         }
-        cInsert++;
-      }
-      currentRowRead++;
+        // 创建文件夹防止报错
+        File file = new File(filePath);
+        if (!file.exists()) {
+            boolean created = file.mkdirs();
+            log.info(created ? "创建文件夹成功" : "创建文件夹失败");
+        }
+        filePath = filePath + File.separator + filename + ".csv";
+        log.info("导出路径:" + filePath);
+        FileOutputStream fOut = new FileOutputStream(filePath);
+        wb.write(fOut);
+        fOut.close();
+        wb.close();
+        return filePath;
     }
-    // 创建文件夹防止报错
-    File file = new File(filePath);
-    if (!file.exists()) {
-      boolean created = file.mkdirs();
-      log.info(created ? "创建文件夹成功" : "创建文件夹失败");
+
+    public String export(MongoCursor<Document> cursor, String fileId, String filename)
+            throws IOException {
+        Fields fields =
+                mongoTemplate.findOne(new Query(Criteria.where("fileId").is(fileId)), Fields.class);
+        String date = DataUtils.currentDate().replaceAll(":", "_");
+        filename = filename + date + ".csv";
+        if (fields == null) {
+            return "";
+        }
+        String tmpdir = System.getProperty("java.io.tmpdir");
+        String filePath = this.generateFile(fields, filename, tmpdir, cursor);
+        FileInputStream inputStream = new FileInputStream(filePath);
+        ObjectId objectId = gridFsTemplate.store(inputStream, filename);
+        inputStream.close();
+        // 删除文件
+        File file1 = new File(filePath);
+        file1.delete();
+        return objectId.toHexString();
     }
-    filePath = filePath + File.separator + filename + ".xlsx";
-    log.info("导出路径:" + filePath);
-    FileOutputStream fOut = new FileOutputStream(filePath);
-    wb.write(fOut);
-    fOut.close();
-    wb.close();
-    return filePath;
-  }
 
-  public String export(MongoCursor<Document> cursor, String fileId, String filename)
-      throws IOException {
-    Fields fields =
-        mongoTemplate.findOne(new Query(Criteria.where("fileId").is(fileId)), Fields.class);
-    String date = DataUtils.currentDate().replaceAll(":", "_");
-    filename = filename + date + ".xlsx";
-    if (fields == null) {
-      return "";
+    public String export(MongoCursor<Document> cursor, String fileId, String filename,String tmpdir)
+            throws IOException {
+        Fields fields =
+                mongoTemplate.findOne(new Query(Criteria.where("fileId").is(fileId)), Fields.class);
+        String path = tmpdir + File.separator + filename + ".csv";
+        if (fields == null) {
+            return "";
+        }
+        File file1 = new File(path);
+        if(file1.exists()){
+            file1.delete();
+        }
+        String filePath = this.generateFile(fields, filename, tmpdir, cursor);
+        FileInputStream inputStream = new FileInputStream(filePath);
+        ObjectId objectId = gridFsTemplate.store(inputStream, filename);
+        inputStream.close();
+        return objectId.toHexString();
     }
-    String tmpdir = System.getProperty("java.io.tmpdir");
-    String filePath = this.generateFile(fields, filename, tmpdir, cursor);
-    FileInputStream inputStream = new FileInputStream(filePath);
-    ObjectId objectId = gridFsTemplate.store(inputStream, filename);
-    inputStream.close();
-    // 删除文件
-    File file1 = new File(filePath);
-    file1.delete();
-    return objectId.toHexString();
-  }
 }

+ 10 - 0
src/main/java/ieven/server/webapp/domain/model/ModelService.java

@@ -13,6 +13,7 @@ import ieven.server.webapp.domain.file.LogicalFile;
 import ieven.server.webapp.infrastructure.wrapper.Mapped;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.domain.Sort.Order;
@@ -24,6 +25,7 @@ import org.springframework.scheduling.annotation.Async;
 import org.springframework.scheduling.annotation.AsyncResult;
 import org.springframework.stereotype.Service;
 
+import java.io.File;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
@@ -41,6 +43,8 @@ public class ModelService {
     @Autowired
     @Lazy
     private ModelService modelService;
+    @Value("spring.data.fileExportPath")
+    private String path;
 
     public ModelService() {
     }
@@ -124,6 +128,12 @@ public class ModelService {
         }
 
         this.mongoTemplate.remove(new Query(Criteria.where("modelId").is(id)), TFromToFileIds.class);
+        String fileName=path+"测试"+".csv";
+        File file=new File(fileName);
+        if(file.exists()){
+            file.delete();
+        }
+
         return Mapped.OK();
     }
 

+ 6 - 4
src/main/java/ieven/server/webapp/service/alipay/AlipayService.java

@@ -8,10 +8,7 @@ import ieven.server.webapp.domain.file.FileService;
 import ieven.server.webapp.domain.file.LogicalFile;
 import ieven.server.webapp.infrastructure.wrapper.Mapped;
 import ieven.server.webapp.service.FieldsService;
-import ieven.server.webapp.service.datastatic.DataStaticAnalysis;
-import ieven.server.webapp.service.datastatic.DataStaticAnalysisDs;
-import ieven.server.webapp.service.datastatic.DataStaticAnalysisMain;
-import ieven.server.webapp.service.datastatic.DataStaticAnalysisTotal;
+import ieven.server.webapp.service.datastatic.*;
 import ieven.server.webapp.service.tenpay.*;
 import ieven.server.webapp.util.DataUtils;
 import lombok.extern.slf4j.Slf4j;
@@ -224,6 +221,11 @@ public class AlipayService {
                 new DataStaticAnalysisDs(
                         headerProperties, modelId, mongoTemplate, fileService, latch13));
         latch13.await();
+
+        //数据统计-生成资金excel
+        CountDownLatch latch14 = new CountDownLatch(1);
+        exec.execute(new DataStaticExportExcel( modelId, mongoTemplate, fileService, latch14));
+        latch14.await();
         reorder(modelId);
         log.info("执行完毕");
         return Mapped.OK();

+ 67 - 0
src/main/java/ieven/server/webapp/service/datastatic/DataStaticExportExcel.java

@@ -0,0 +1,67 @@
+package ieven.server.webapp.service.datastatic;
+
+import com.mongodb.client.MongoCursor;
+import ieven.server.webapp.domain.alipay.HeaderProperties;
+import ieven.server.webapp.domain.data.DataMap;
+import ieven.server.webapp.domain.exporter.Exporter;
+import ieven.server.webapp.domain.file.FileService;
+import ieven.server.webapp.domain.file.LogicalFile;
+import ieven.server.webapp.service.Ops;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.bson.Document;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+
+@Slf4j
+public class DataStaticExportExcel extends Ops implements Runnable {
+    String modelId;
+    MongoTemplate mongoTemplate;
+    FileService fileService;
+    CountDownLatch latch;
+
+    public DataStaticExportExcel(
+            String modelId,
+            MongoTemplate mongoTemplate,
+            FileService fileService,
+            CountDownLatch latch) {
+        this.modelId = modelId;
+        this.mongoTemplate = mongoTemplate;
+        this.fileService = fileService;
+        this.latch = latch;
+    }
+
+    @SneakyThrows
+    @Override
+    public void run() {
+        log.info("数据分析-生成excel表格");
+        new Thread(new Runnable() {
+            @SneakyThrows
+            @Override
+            public void run() {
+                String dateFileId = getFileId("数据分析-主体信息汇总明细", modelId, mongoTemplate);
+                Criteria criteria = Criteria.where("fileId").in(dateFileId);
+                Query dataQuery = new Query(criteria);
+                // 查询游标
+                MongoCursor<Document> cursor =
+                        mongoTemplate
+                                .getCollection("data")
+                                .find(dataQuery.getQueryObject())
+                                .batchSize(1000)
+                                .noCursorTimeout(true)
+                                .cursor();
+                Exporter exporter = new Exporter();
+                exporter.export(cursor, dateFileId, "测试", "");
+            }
+        }).start();
+        latch.countDown();
+        log.info("数据分析-结束excel表格");
+    }
+}

+ 1 - 0
src/main/resources/application.properties

@@ -14,6 +14,7 @@ logging.level.org.springframework.data.mongodb.core=DEBUG
 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
 spring.jackson.time-zone=GMT+8
 spring.data.fileUploadPath=E:\\tempFiles\\createModel
+spring.data.fileExportPath=E:\\tempFiles\\createModel\\excel
 headers.anti-cheat-origin=\u5E8F\u53F7,\u652F\u4ED8\u8BA2\u5355\u53F7,\u4EA4\u6613\u7C7B\u578B,\u652F\u4ED8\u7C7B\u578B,\u4EA4\u6613\u4E3B\u4F53\u7684\u51FA\u5165\u8D26\u6807\u8BC6,\u4EA4\u6613\u65F6\u95F4,\u5E01\u79CD,\u4EA4\u6613\u91D1\u989D,\u4EA4\u6613\u6D41\u6C34\u53F7,\u4EA4\u6613\u4F59\u989D,\
   \u6536\u6B3E\u65B9\u94F6\u884C\u5361\u6240\u5C5E\u94F6\u884C\u673A\u6784\u7F16\u7801,\u6536\u6B3E\u65B9\u94F6\u884C\u5361\u6240\u5C5E\u94F6\u884C\u540D\u79F0,\u6536\u6B3E\u65B9\u94F6\u884C\u5361\u6240\u5C5E\u94F6\u884C\u5361\u53F7,\u6536\u6B3E\u65B9\u7684\u652F\u4ED8\u5E10\u53F7,\u6D88\u8D39pos\u673A\u7F16\u53F7,\u6536\u6B3E\u65B9\u7684\u5546\u6237\u53F7,\
   \u6536\u6B3E\u65B9\u7684\u5546\u6237\u540D\u79F0,\u4ED8\u6B3E\u65B9\u94F6\u884C\u5361\u6240\u5C5E\u94F6\u884C\u673A\u6784\u7F16\u7801,\u4ED8\u6B3E\u65B9\u94F6\u884C\u5361\u6240\u5C5E\u94F6\u884C\u540D\u79F0,\u4ED8\u6B3E\u65B9\u94F6\u884C\u5361\u6240\u5C5E\u94F6\u884C\u5361\u53F7,\u4ED8\u6B3E\u65B9\u7684\u652F\u4ED8\u5E10\u53F7,\u4EA4\u6613\u8BBE\u5907\u7C7B\u578B,\