Files
jb_syncdata/src/main/java/com/njcn/jbsyncdata/util/PubUtils.java
2023-12-01 08:48:50 +08:00

698 lines
30 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.njcn.jbsyncdata.util;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.io.file.FileReader;
import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.type.TypeFactory;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.njcn.jbsyncdata.pojo.DisPhotovoltaic10Excel;
import com.njcn.jbsyncdata.pojo.DisPhotovoltaic380Excel;
import com.njcn.jbsyncdata.pojo.DistributionAreaExcel;
import com.njcn.jbsyncdata.pojo.ZhangDistributionAreaExcel;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import java.io.IOException;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import static java.lang.Integer.parseInt;
/**
* @author hongawen
* @version 1.0.0
* @date 2021年04月12日 14:21
*/
public class PubUtils {
private final static ObjectMapper MAPPER = new ObjectMapper();
private static final String DATE_TIME = "yyyy-MM-dd HH:mm:ss";
private static final String DATE = "yyyy-MM-dd";
private static final String TIME = "HH:mm:ss";
/**
* 生成随机码,包含字母。--> 大写
*
* @param length 随机码长度
*/
public static String randomCode(int length) {
return RandomUtil.randomString(length).toUpperCase(Locale.ENGLISH);
}
/****
* ***** ***** 验证IP是否属于某个IP段 ipSection IP段以'-'分隔) ip 所验证的IP号码 ***** *****
**/
public static boolean ipExistsInRange(String ip, String ipSection) {
ipSection = ipSection.trim();
ip = ip.trim();
int idx = ipSection.indexOf('-');
String beginIp = ipSection.substring(0, idx);
String endIp = ipSection.substring(idx + 1);
return getIp2long(beginIp) <= getIp2long(ip) && getIp2long(ip) <= getIp2long(endIp);
}
private static long getIp2long(String ip) {
ip = ip.trim();
String[] ips = ip.split("\\.");
long ip2long = 0L;
for (int i = 0; i < 4; ++i) {
ip2long = ip2long << 8 | parseInt(ips[i]);
}
return ip2long;
}
/**
* 获取当前时间
*
* @author cdf
* @date 2021/7/26
*/
public static String getNow() {
DateFormat bf = new SimpleDateFormat("yyyyMMddHHmmss");
return bf.format(new Date());
}
/**
* 毫秒转时间 ms:需要转换的毫秒时间
*/
public static Date ms2Date(Long ms) {
Calendar c = Calendar.getInstance();
c.setTimeInMillis(ms);
return c.getTime();
}
/**
* 日期转字符串函数 date:需要转换的日期 strFormat:转换的格式(yyyy-MM-dd HH:mm:ss)
*/
public static String date2String(Date date, String strFormat){
SimpleDateFormat format = new SimpleDateFormat(strFormat);
return format.format(date);
}
/**
* 获取当前web的IP
*/
public static String getLocalIp() {
String host;
try {
host = InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
e.printStackTrace();
host = "127.0.0.1";
}
return host;
}
/**
* 将JSON转为实体对象
*
* @param jsonStr json
* @param targetType 对象类型
* @param <T> 对象
*/
public static <T> T json2obj(String jsonStr, Type targetType) {
try {
JavaType javaType = TypeFactory.defaultInstance().constructType(targetType);
MAPPER.registerModule(new JavaTimeModule());
MAPPER.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
return MAPPER.readValue(jsonStr, javaType);
} catch (IOException e) {
throw new IllegalArgumentException("将JSON转换为对象时发生错误:" + jsonStr, e);
}
}
/**
* 将实体对象转为JSON
*
* @param object 实体对象
*/
public static String obj2json(Object object) {
try {
MAPPER.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
return MAPPER.writeValueAsString(object);
} catch (IOException e) {
throw new IllegalArgumentException("将将实体对象转为JSON时发生错误:" + object, e);
}
}
/**
* 判断一个数字是否在区间内
*
* @param current 待判断数字
* @param min 最小值
* @param max 最大值
*/
public static boolean rangeInDefined(int current, int min, int max) {
return Math.max(min, current) == Math.min(current, max);
}
/**
* 将起始日期字符串 yyyy-MM-dd 转为 yyyy-MM-dd HH:mm:ss的LocalDateTime
*/
public static LocalDateTime beginTimeToLocalDateTime(String beginTime) {
beginTime = beginTime + StrUtil.SPACE + "00:00:00";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DATE_TIME);
return LocalDateTime.parse(beginTime, dateTimeFormatter);
}
/**
* 将截止日期字符串 yyyy-MM-dd 转为 yyyy-MM-dd HH:mm:ss的LocalDateTime
*/
public static LocalDateTime endTimeToLocalDateTime(String endTime) {
endTime = endTime + StrUtil.SPACE + "23:59:59";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DATE_TIME);
return LocalDateTime.parse(endTime, dateTimeFormatter);
}
/**
* 将字符串日期转为LocalDate日期只用于日期转换
*/
public static LocalDate localDateFormat(String time) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DATE);
return LocalDate.parse(time, dateTimeFormatter);
}
public static LocalDateTime localDateTimeFormat(String time) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DATE_TIME);
return LocalDateTime.parse(time, dateTimeFormatter);
}
public static List<String> getStartTimeEndTime(String beginDate, String endDate) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.setTime(sdf.parse(beginDate));
List<String> startTimeEndTime = null;
for (long d = cal.getTimeInMillis(); d <= sdf.parse(endDate).getTime(); d = getDplaus(cal)) {
startTimeEndTime.add(sdf.format(d));
}
return startTimeEndTime;
}
public static long getDplaus(Calendar c) {
c.set(Calendar.DAY_OF_MONTH, c.get(Calendar.DAY_OF_MONTH) + 1);
return c.getTimeInMillis();
}
public static String comFlag(Integer comFlag) {
switch (comFlag) {
case 0:
return "中断";
case 1:
return "正常";
default:
return "";
}
}
public static String runFlag(Integer runFlag) {
switch (runFlag) {
case 0:
return "投运";
case 1:
return "热备用";
case 2:
return "停运";
default:
return "";
}
}
public static Integer getRunFlag(String runFlag) {
switch (runFlag) {
case "投运":
return 0;
case "热备用":
return 1;
case "停运":
return 2;
default:
return -1;
}
}
public static Double getDefectSeverity(String defectSeverity) {
switch (defectSeverity) {
case "轻缺陷":
return 0.02;
case "较重缺陷":
return 0.12;
case "严重缺陷":
return 0.42;
default:
return 0.00;
}
}
public static String ptType(Integer ptType) {
switch (ptType) {
case 0:
return "星型接线";
case 1:
return "三角型接线";
case 2:
return "开口三角型接线";
default:
return "";
}
}
public static Integer ptTypeName(String ptType) {
switch (ptType) {
case "星型接线":
return 0;
case "三角型接线":
return 1;
case "开口三角型接线":
return 2;
default:
return -1;
}
}
/**
* 将当前时间的秒数置为0
*
* @param date 时间
*/
public static Date getSecondsAsZero(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.SECOND, 0);
return calendar.getTime();
}
/**
* 根据起始时间和截止时间返回yyyy-MM-dd的日期
*
* @param startTime 起始时间
* @param endTime 截止时间
*/
public static List<String> getTimes(Date startTime, Date endTime) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
List<String> result = new ArrayList<>();
Calendar start = Calendar.getInstance();
start.setTime(startTime);
Calendar end = Calendar.getInstance();
end.setTime(endTime);
end.set(end.get(Calendar.YEAR), end.get(Calendar.MONTH), end.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
long interval = end.getTimeInMillis() - start.getTimeInMillis();
result.add(sdf.format(start.getTime()));
if (interval > 0) {
int days = (int) (interval / 86400000);
for (int i = 0; i < days; i++) {
start.add(Calendar.DAY_OF_MONTH, 1);
result.add(sdf.format(start.getTime()));
}
}
return result;
}
/***
* 将instant转为date 处理8小时误差
* @author hongawen
* @date 2023/7/20 15:58
* @param instant 日期
* @return Instant
*/
public static Date instantToDate(Instant instant){
return Date.from(instant.minusMillis(TimeUnit.HOURS.toMillis(8)));
}
/***
* 将date转为instant 处理8小时误差
* @author hongawen
* @date 2023/7/20 15:58
* @param date 日期
* @return Instant
*/
public static Instant dateToInstant(Date date){
return date.toInstant().plusMillis(TimeUnit.HOURS.toMillis(8));
}
/**
* 根据参数返回float的四舍五入值
*
* @param i 保留的位数
* @param value float原值
*/
public static Float floatRound(int i, float value) {
BigDecimal bp = new BigDecimal(value);
return bp.setScale(i, BigDecimal.ROUND_HALF_UP).floatValue();
}
//*****************************************xuyang添加,用于App********************************************************
/**
* 正则表达式字符串
* 要匹配的字符串
*
* @return 如果str 符合 regex的正则表达式格式,返回true, 否则返回 false;
*/
public static boolean match(String regex, String str) {
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
return matcher.matches();
}
/**
* 生成随机推荐码
*/
public static String getCode(Integer number){
final String BASIC = "123456789AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz";
char[] basicArray = BASIC.toCharArray();
Random random = new Random();
char[] result = new char[number];
for (int i = 0; i < result.length; i++) {
int index = random.nextInt(100) % (basicArray.length);
result[i] = basicArray[index];
}
return new String(result);
}
/**
* 将字节数组转成Float数组
* @param bytes
* @return
*/
public static List<Float> byteArrayToFloatList(byte[] bytes){
List<Float> d = new ArrayList<>(bytes.length/8);
byte[] doubleBuffer = new byte[4];
for(int j = 0; j < bytes.length; j += 4) {
System.arraycopy(bytes, j, doubleBuffer, 0, doubleBuffer.length);
d.add(bytes2Float(doubleBuffer));
}
return d;
}
public static float bytes2Float(byte[] arr) {
int accum = 0;
accum = accum|(arr[0] & 0xff);
accum = accum|(arr[1] & 0xff) << 8;
accum = accum|(arr[2] & 0xff) << 16;
accum = accum|(arr[3] & 0xff) << 24;
return Float.intBitsToFloat(accum);
}
/**
* 将字节数组转成Double数组
* @param arr
* @return
*/
public static List<Double> byteArrayToDoubleList(byte[] arr){
List<Double> d = new ArrayList<>(arr.length/8);
byte[] doubleBuffer = new byte[8];
for(int j = 0; j < arr.length; j += 8) {
System.arraycopy(arr, j, doubleBuffer, 0, doubleBuffer.length);
d.add(bytes2Double(doubleBuffer));
}
return d;
}
/**
* 将byte转换成double
* @param arr
* @return
*/
public static double bytes2Double(byte[] arr) {
long value = 0;
for (int i = 0; i < 8; i++) {
value |= ((long) (arr[i] & 0xff)) << (8 * i);
}
return Double.longBitsToDouble(value);
}
//***************************************************添加结束********************************************************
// public static void main(String[] args) throws IOException {
// //读取10kV的数据
// List<DisPhotovoltaic10Excel> list10kV = EasyExcel.read("D:\\temp\\基础表.xlsx")
// .excelType(ExcelTypeEnum.XLSX)
// .head(DisPhotovoltaic10Excel.class)
// .headRowNumber(2)
// .sheet(0).doReadSync();
// list10kV = list10kV.stream()
// .filter(t -> StrUtil.isNotBlank(t.getGenerationUserID()))
// .filter(t -> StrUtil.isNotBlank(t.getStageID()))
// .filter(StreamUtil.distinctByKey(DisPhotovoltaic10Excel::getGenerationUserID))
// .collect(Collectors.toList());
// //读取380V的数据
// List<DisPhotovoltaic380Excel> list380v = EasyExcel.read("D:\\temp\\基础表.xlsx")
// .excelType(ExcelTypeEnum.XLSX)
// .head(DisPhotovoltaic380Excel.class)
// .headRowNumber(2)
// .sheet(1).doReadSync();
// list380v = list380v.stream()
// .filter(t -> StrUtil.isNotBlank(t.getGenerationUserID()))
// .filter(t -> StrUtil.isNotBlank(t.getStageID()))
// .filter(StreamUtil.distinctByKey(DisPhotovoltaic380Excel::getGenerationUserID))
// .collect(Collectors.toList());
// //读取所有没数据的用户号
// FileReader fileReader = new FileReader("D:\\temp\\all.txt");
// List<String> noData = fileReader.readLines();
// Set<String> noDataSet = new HashSet<>(noData);
// FileReader fileReader2 = new FileReader("D:\\temp\\part.txt");
// List<String> noPartData = fileReader2.readLines();
// Set<String> noPartDataSet = new HashSet<>(noPartData);
//
// long millis = System.currentTimeMillis();
// //梳理10kV全部没有数据的
// List<DisPhotovoltaic10Excel> collect = list10kV.stream().filter(t -> noDataSet.contains(t.getGenerationUserID())).collect(Collectors.toList());
// EasyExcel.write("D:\\temp\\10kV全部没有数据的.xlsx", DisPhotovoltaic10Excel.class).sheet("10kV全部没有数据的").doWrite(collect);
// long millis1 = System.currentTimeMillis();
// System.out.println("10kV全部没有数据的耗时" + (millis1 - millis));
// //10kV部分没有数据的
// Map<String, List<String>> noPartDataMap = noPartDataSet.stream().collect(Collectors.groupingBy(t -> t.substring(0, t.indexOf(StrPool.COMMA))));
// Map<String, List<DisPhotovoltaic10Excel>> all10kVMap = list10kV.stream().collect(Collectors.groupingBy(DisPhotovoltaic10Excel::getGenerationUserID));
// Set<String> keyedSet1 = all10kVMap.keySet();
// List<DisPhotovoltaic10Excel> final10kVUserData = new LinkedList<>();
// String info;
// for (String userId : keyedSet1) {
// List<String> infoList = noPartDataMap.get(userId);
// if (CollectionUtil.isNotEmpty(infoList)) {
// info = infoList.get(0);
// DisPhotovoltaic10Excel disPhotovoltaic10Excel = all10kVMap.get(userId).get(0);
// info = info.substring(info.indexOf(StrPool.COMMA) + 1);
// info = info.replaceAll(StrPool.AT, "||")
// .replaceAll("A_phsA", "A相电流")
// .replaceAll("A_phsB", "B相电流")
// .replaceAll("A_phsC", "C相电流")
// .replaceAll("PhV_phsA", "A相电压")
// .replaceAll("PhV_phsB", "B相电压")
// .replaceAll("PhV_phsC", "C相电压")
// .replaceAll("TotW", "有功")
// .replaceAll("TotVar", "无功");
// disPhotovoltaic10Excel.setTypes(info);
// final10kVUserData.add(disPhotovoltaic10Excel);
// }
// }
// EasyExcel.write("D:\\temp\\10kV部分没有数据的.xlsx", DisPhotovoltaic10Excel.class).sheet("10kV部分没有数据的").doWrite(final10kVUserData);
// long millis2 = System.currentTimeMillis();
// System.out.println("10kV部分没有数据的" + (millis2 - millis1));
// //梳理380V全部没有数据的
// List<DisPhotovoltaic380Excel> collect4 = list380v.stream().filter(t -> noDataSet.contains(t.getGenerationUserID())).collect(Collectors.toList());
// EasyExcel.write("D:\\temp\\380V全部没有数据的.xlsx", DisPhotovoltaic380Excel.class).sheet("380V全部没有数据的").doWrite(collect4);
// long millis3 = System.currentTimeMillis();
// System.out.println("380V全部没有数据的" + (millis3 - millis2));
// //380V部分没有数据的
// Map<String, List<DisPhotovoltaic380Excel>> all380VMap = list380v.stream().collect(Collectors.groupingBy(DisPhotovoltaic380Excel::getGenerationUserID));
// Set<String> keyedSet = noPartDataMap.keySet();
// List<DisPhotovoltaic380Excel> final380VUserData = new LinkedList<>();
// List<DisPhotovoltaic380Excel> disPhotovoltaic380ExcelList;
// DisPhotovoltaic380Excel disPhotovoltaic380Excel;
// for (String userId : keyedSet) {
// disPhotovoltaic380ExcelList = all380VMap.get(userId);
// if (CollectionUtil.isNotEmpty(disPhotovoltaic380ExcelList)) {
// disPhotovoltaic380Excel = disPhotovoltaic380ExcelList.get(0);
// info = noPartDataMap.get(userId).get(0);
// info = info.substring(info.indexOf(StrPool.COMMA) + 1);
// info = info.replaceAll(StrPool.AT, "||")
// .replaceAll("A_phsA", "A相电流")
// .replaceAll("A_phsB", "B相电流")
// .replaceAll("A_phsC", "C相电流")
// .replaceAll("PhV_phsA", "A相电压")
// .replaceAll("PhV_phsB", "B相电压")
// .replaceAll("PhV_phsC", "C相电压")
// .replaceAll("TotW", "有功")
// .replaceAll("TotVar", "无功");
// disPhotovoltaic380Excel.setTypes(info);
// final380VUserData.add(disPhotovoltaic380Excel);
// }
// }
// EasyExcel.write("D:\\temp\\380V部分没有数据的.xlsx", DisPhotovoltaic380Excel.class).sheet("380V部分没有数据的").doWrite(final380VUserData);
// long millis4 = System.currentTimeMillis();
// System.out.println("380V部分没有数据的" + (millis4 - millis3));
// }
public static void main(String[] args) throws IOException {
//读取10kV的数据
List<DistributionAreaExcel> list = EasyExcel.read("D:\\test\\唐山.xlsx")
.head(DistributionAreaExcel.class)
.sheet(0).doReadSync();
list = list.stream()
.filter(t -> !"#N/A".equals(t.getPmsID()))
.collect(Collectors.toList());
List<ZhangDistributionAreaExcel> listZhang = EasyExcel.read("D:\\test\\张家口.xlsx")
.head(ZhangDistributionAreaExcel.class)
.doReadAllSync();
listZhang = listZhang.stream()
.filter(t -> StrUtil.isNotBlank(t.getId()))
.filter(StreamUtil.distinctByKey(ZhangDistributionAreaExcel::getId))
.filter(t -> !"#N/A".equals(t.getPmsID()))
.filter(t -> StrUtil.isNotBlank(t.getPmsID()))
.collect(Collectors.toList());
//读取所有没数据的用户号
FileReader fileReader = new FileReader("D:\\test\\all.txt");
List<String> noData = fileReader.readLines();
Set<String> noDataSet = new HashSet<>(noData);
FileReader fileReader2 = new FileReader("D:\\test\\part.txt");
List<String> noPartData = fileReader2.readLines();
Set<String> noPartDataSet = new HashSet<>(noPartData);
long millis = System.currentTimeMillis();
//唐山没有数据的信息
List<DistributionAreaExcel> collect = list.stream().filter(t -> noDataSet.contains(t.getPmsID())).collect(Collectors.toList());
EasyExcel.write("D:\\test\\唐山全部没有数据的.xlsx", DistributionAreaExcel.class).sheet("唐山全部没有数据的").doWrite(collect);
long millis1 = System.currentTimeMillis();
System.out.println("唐山全部没有数据的耗时:" + (millis1 - millis));
//唐山部分没有数据的
Map<String, List<String>> noPartDataMap = noPartDataSet.stream().collect(Collectors.groupingBy(t -> t.substring(0, t.indexOf(StrPool.COMMA))));
Map<String, List<DistributionAreaExcel>> all10kVMap = list.stream().collect(Collectors.groupingBy(DistributionAreaExcel::getPmsID));
Set<String> keyedSet1 = all10kVMap.keySet();
List<DistributionAreaExcel> final10kVUserData = new LinkedList<>();
String info;
for (String userId : keyedSet1) {
List<String> infoList = noPartDataMap.get(userId);
if (CollectionUtil.isNotEmpty(infoList)) {
info = infoList.get(0);
DistributionAreaExcel disPhotovoltaic10Excel = all10kVMap.get(userId).get(0);
info = info.substring(info.indexOf(StrPool.COMMA) + 1);
info = info.replaceAll(StrPool.AT, "||")
.replaceAll("A_phsA", "A相电流")
.replaceAll("A_phsB", "B相电流")
.replaceAll("A_phsC", "C相电流")
.replaceAll("PhV_phsA", "A相电压")
.replaceAll("PhV_phsB", "B相电压")
.replaceAll("PhV_phsC", "C相电压")
.replaceAll("TotW", "有功")
.replaceAll("TotVar", "无功")
.replaceAll("HphV2_phsA", "A相电压2次谐波值")
.replaceAll("HphV2_phsB", "B相电压2次谐波值")
.replaceAll("HphV2_phsC", "C相电压2次谐波值")
.replaceAll("HphV3_phsA", "A相电压3次谐波值")
.replaceAll("HphV3_phsB", "B相电压3次谐波值")
.replaceAll("HphV3_phsC", "C相电压3次谐波值")
.replaceAll("HphV5_phsA", "A相电压5次谐波值")
.replaceAll("HphV5_phsB", "B相电压5次谐波值")
.replaceAll("HphV7_phsC", "C相电压7次谐波值")
.replaceAll("HphV7_phsA", "A相电压7次谐波值")
.replaceAll("HphV7_phsB", "B相电压7次谐波值")
.replaceAll("HphV5_phsC", "C相电压5次谐波值")
.replaceAll("HphV9_phsA", "A相电压9次谐波值")
.replaceAll("HphV9_phsB", "B相电压9次谐波值")
.replaceAll("HphV9_phsC", "C相电压9次谐波值")
;
disPhotovoltaic10Excel.setTypes(info);
final10kVUserData.add(disPhotovoltaic10Excel);
}
}
EasyExcel.write("D:\\test\\唐山部分没有数据的.xlsx", DistributionAreaExcel.class).sheet("唐山部分没有数据的").doWrite(final10kVUserData);
long millis2 = System.currentTimeMillis();
System.out.println("唐山部分没有数据的:" + (millis2 - millis1));
//梳理380V全部没有数据的
List<ZhangDistributionAreaExcel> collect4 = listZhang.stream().filter(t -> noDataSet.contains(t.getPmsID())).collect(Collectors.toList());
EasyExcel.write("D:\\test\\张家口全部没有数据的.xlsx", ZhangDistributionAreaExcel.class).sheet("张家口全部没有数据的").doWrite(collect4);
long millis3 = System.currentTimeMillis();
System.out.println("张家口全部没有数据的:" + (millis3 - millis2));
//380V部分没有数据的
Map<String, List<ZhangDistributionAreaExcel>> all380VMap = listZhang.stream().collect(Collectors.groupingBy(ZhangDistributionAreaExcel::getPmsID));
Set<String> keyedSet = noPartDataMap.keySet();
List<ZhangDistributionAreaExcel> final380VUserData = new LinkedList<>();
List<ZhangDistributionAreaExcel> disPhotovoltaic380ExcelList;
ZhangDistributionAreaExcel disPhotovoltaic380Excel;
for (String userId : keyedSet) {
disPhotovoltaic380ExcelList = all380VMap.get(userId);
if (CollectionUtil.isNotEmpty(disPhotovoltaic380ExcelList)) {
List<ZhangDistributionAreaExcel> collect1 = disPhotovoltaic380ExcelList.stream().distinct().collect(Collectors.toList());
for (ZhangDistributionAreaExcel zhangDistributionAreaExcel : collect1) {
disPhotovoltaic380Excel=zhangDistributionAreaExcel;
info = zhangDistributionAreaExcel.getPmsID();
info = info.substring(info.indexOf(StrPool.COMMA) + 1);
info = info.replaceAll(StrPool.AT, "||")
.replaceAll("A_phsA", "A相电流")
.replaceAll("A_phsB", "B相电流")
.replaceAll("A_phsC", "C相电流")
.replaceAll("PhV_phsA", "A相电压")
.replaceAll("PhV_phsB", "B相电压")
.replaceAll("PhV_phsC", "C相电压")
.replaceAll("TotW", "有功")
.replaceAll("TotVar", "无功")
.replaceAll("HphV2_phsA", "A相电压2次谐波值")
.replaceAll("HphV2_phsB", "B相电压2次谐波值")
.replaceAll("HphV2_phsC", "C相电压2次谐波值")
.replaceAll("HphV3_phsA", "A相电压3次谐波值")
.replaceAll("HphV3_phsB", "B相电压3次谐波值")
.replaceAll("HphV3_phsC", "C相电压3次谐波值")
.replaceAll("HphV5_phsA", "A相电压5次谐波值")
.replaceAll("HphV5_phsB", "B相电压5次谐波值")
.replaceAll("HphV7_phsC", "C相电压7次谐波值")
.replaceAll("HphV7_phsA", "A相电压7次谐波值")
.replaceAll("HphV7_phsB", "B相电压7次谐波值")
.replaceAll("HphV5_phsC", "C相电压5次谐波值")
.replaceAll("HphV9_phsA", "A相电压9次谐波值")
.replaceAll("HphV9_phsB", "B相电压9次谐波值")
.replaceAll("HphV9_phsC", "C相电压9次谐波值")
;
disPhotovoltaic380Excel.setTypes(info);
final380VUserData.add(disPhotovoltaic380Excel);
}
}
}
List<String> collect1 = final380VUserData.stream().map(ZhangDistributionAreaExcel::getId).collect(Collectors.toList());
List<String> collect2 = collect4.stream().map(ZhangDistributionAreaExcel::getId).collect(Collectors.toList());
listZhang= listZhang.stream().filter(t -> !collect1.contains(t.getId())).collect(Collectors.toList());
listZhang= listZhang.stream().filter(t -> !collect2.contains(t.getId())).collect(Collectors.toList());
EasyExcel.write("D:\\test\\张家口部分没有数据的.xlsx", ZhangDistributionAreaExcel.class).sheet("张家口部分没有数据的").doWrite(final380VUserData);
long millis4 = System.currentTimeMillis();
System.out.println("张家口部分没有数据的:" + (millis4 - millis3));
}
}