|
@@ -1,6 +1,8 @@
|
|
|
package org.eco.als.utils;
|
|
|
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
|
+import cn.hutool.core.date.DatePattern;
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.io.FileUtil;
|
|
|
import cn.hutool.core.map.MapUtil;
|
|
|
import cn.hutool.core.text.csv.CsvData;
|
|
@@ -8,6 +10,7 @@ import cn.hutool.core.text.csv.CsvReader;
|
|
|
import cn.hutool.core.text.csv.CsvRow;
|
|
|
import cn.hutool.core.text.csv.CsvUtil;
|
|
|
import cn.hutool.core.util.CharsetUtil;
|
|
|
+import cn.hutool.core.util.ObjUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import cn.hutool.json.JSONArray;
|
|
|
import cn.hutool.json.JSONObject;
|
|
@@ -24,6 +27,7 @@ import org.eco.common.core.utils.uuid.Seq;
|
|
|
import java.io.File;
|
|
|
import java.io.InputStream;
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.stream.Collectors;
|
|
@@ -280,6 +284,49 @@ public class CsvUtils {
|
|
|
return jsonObject;
|
|
|
}
|
|
|
|
|
|
+ public static JSONObject getDataByHeaders(String csvFilePath, List<String> headerNames, String begin, String end) {
|
|
|
+ log.info("getDataByHeaders 参数列:{}", headerNames);
|
|
|
+ List<CsvRow> rows = getCsvRowList(EcoConfig.getProfile() + csvFilePath);
|
|
|
+ // 获取CSV表头,即第一行数据
|
|
|
+ List<String> headers = rows.get(0).getRawList();
|
|
|
+ log.info("getDataByHeaders CSV表头:{}", headers.toString());
|
|
|
+ List<Integer> indexList = new ArrayList<>();
|
|
|
+ headerNames.forEach(name -> {
|
|
|
+ int index = headers.indexOf(name);
|
|
|
+ if (index != -1) {
|
|
|
+ log.info("表头:{},索引为:{}", name, index);
|
|
|
+ indexList.add(index);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if (CollectionUtil.isEmpty(indexList)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ Date beginDate = null;
|
|
|
+ Date endDate = null;
|
|
|
+ if (StrUtil.isNotBlank(begin) && StrUtil.isNotBlank(end)) {
|
|
|
+ beginDate = DateUtil.parse(begin, DatePattern.NORM_DATETIME_MS_PATTERN);
|
|
|
+ endDate = DateUtil.parse(end, DatePattern.NORM_DATETIME_MS_PATTERN);
|
|
|
+ }
|
|
|
+ // 去除第一行,保留后续数据
|
|
|
+ List<CsvRow> dataLines = rows.subList(1, rows.size());
|
|
|
+ JSONObject jsonObject = new JSONObject();
|
|
|
+ for (int i = 0; i < headers.size(); i++) {
|
|
|
+ JSONArray jsonArray = new JSONArray();
|
|
|
+ for (CsvRow line : dataLines) {
|
|
|
+ Date currDate = DateUtil.parse(line.getRawList().get(headers.indexOf("时间")), DatePattern.NORM_DATETIME_MS_PATTERN);
|
|
|
+ if (!(ObjUtil.isEmpty(beginDate) || ObjUtil.isEmpty(end)) && !DateUtil.isIn(currDate, beginDate, endDate)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ jsonArray.add(line.getRawList().get(i));
|
|
|
+ }
|
|
|
+ // 参数索引位置
|
|
|
+ if (indexList.contains(i)) {
|
|
|
+ jsonObject.putOnce(headers.get(i), jsonArray);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return jsonObject;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 处理数据帧
|
|
|
*
|