燕山石化溯源三维电子沙盘-【后端】-服务
1
13693261870
2024-11-01 2b75d84cabc3416d903f425239c713b65a98503f
src/main/java/com/yssh/utils/CsvParser.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,85 @@
package com.yssh.utils;
import java.util.ArrayList;
import java.util.List;
import com.yssh.entity.AlertConfig;
import com.yssh.entity.SuYuan;
import com.yssh.mapper.AlertConfigMapper;
import com.yssh.service.SuYuanService;
import com.github.biyanwen.impl.AbstractCsvFileParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.Resource;
public class CsvParser extends AbstractCsvFileParser<SuYuan> {
   protected final Logger logger = LoggerFactory.getLogger(this.getClass());
   /**
    * æ¯éš”100000条存储数据库,然后清理list ï¼Œæ–¹ä¾¿å†…存回收
    */
   public static final int BATCH_COUNT = 100000;
   /**
    * ç¼“存的数据
    */
   private List<SuYuan> cachedData = new ArrayList<>(BATCH_COUNT);
   private SuYuanService suYuanService;
   private String time;
   private double jcyj;
   public CsvParser(SuYuanService suYuanService, String time) {
      this.suYuanService = suYuanService;
      this.time = time;
      this.jcyj = suYuanService.getJcyj();
   }
   /**
    * æ‰€æœ‰æ•°æ®è§£æžå®Œæˆäº† ä¼šæ¥è°ƒç”¨,防止有数据没有被保存
    */
   protected void doAfterAllAnalysed() {
      try {
         saveSuYuanData();
      } catch (Exception e) {
         logger.error("解析保存数据出现异常,异常原因是:" + e.getMessage(), e);
         e.printStackTrace();
      }
   }
   protected void invoke(SuYuan t) {
      t.setId(t.getX() + "_" + t.getY() + "_" + t.getZ());
      /*if ("0_0_0".equals(t.getId())) {
         return; // è§£å†³ä¸»é”®é‡å¤
      }*/
      /*if (t.getZ() > 0 && t.getC() < jcyj) {
         return; // åªå…¥ç¬¬0层数据+Voc值大于1
      }*/
      // åªå…¥å€¼ > =0.05
      if (t.getC() < 0.1) {
         return;
      }
      cachedData.add(t);
      // è¾¾åˆ°BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
      if (cachedData.size() >= BATCH_COUNT) {
         try {
            saveSuYuanData();
         } catch (Exception e) {
            logger.error("解析保存数据出现异常,异常原因是:" + e.getMessage(), e);
            e.printStackTrace();
         }
         // å­˜å‚¨å®Œæˆæ¸…理 list
         cachedData = new ArrayList<>(BATCH_COUNT);
      }
   }
   private void saveSuYuanData() throws Exception {
      suYuanService.insertSuYuanDatas(cachedData, time);
   }
}