1.台区台账模板导入(唐山/张家口)
2.获取台区遥测数据接口编写
This commit is contained in:
@@ -7,6 +7,8 @@ import cn.hutool.core.util.StrUtil;
|
|||||||
import com.alibaba.excel.EasyExcel;
|
import com.alibaba.excel.EasyExcel;
|
||||||
import com.njcn.jbsyncdata.pojo.DisPhotovoltaic10Excel;
|
import com.njcn.jbsyncdata.pojo.DisPhotovoltaic10Excel;
|
||||||
import com.njcn.jbsyncdata.pojo.DisPhotovoltaic380Excel;
|
import com.njcn.jbsyncdata.pojo.DisPhotovoltaic380Excel;
|
||||||
|
import com.njcn.jbsyncdata.pojo.DistributionAreaExcel;
|
||||||
|
import com.njcn.jbsyncdata.pojo.ZhangDistributionAreaExcel;
|
||||||
import com.njcn.jbsyncdata.service.DisPhotovoltaicService;
|
import com.njcn.jbsyncdata.service.DisPhotovoltaicService;
|
||||||
import com.njcn.jbsyncdata.service.IBusinessService;
|
import com.njcn.jbsyncdata.service.IBusinessService;
|
||||||
import com.njcn.jbsyncdata.util.StreamUtil;
|
import com.njcn.jbsyncdata.util.StreamUtil;
|
||||||
@@ -76,6 +78,42 @@ public class DisPhotovoltaicController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param date yyyy-MM-dd
|
||||||
|
*/
|
||||||
|
@ApiOperation(value = "查询指定日期所有台区用户的遥测数据")
|
||||||
|
@PostMapping("/queryTelemetryAreaData")
|
||||||
|
public void queryTelemetryAreaData(String date) {
|
||||||
|
try {
|
||||||
|
businessService.queryTelemetryAreaData(date);
|
||||||
|
} catch (Exception exception) {
|
||||||
|
exception.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param startTime 起始时间 yyyy-MM-dd
|
||||||
|
* @param endTime 截止时间 yyyy-MM-dd
|
||||||
|
*/
|
||||||
|
@ApiOperation(value = "查询日期范围内所有台区用户的遥测数据")
|
||||||
|
@PostMapping("/queryTelemetryAreaDataTimeRange")
|
||||||
|
public void queryTelemetryAreaDataTimeRange(String startTime, String endTime) {
|
||||||
|
try {
|
||||||
|
DateTime startDate = DateUtil.parse(startTime, DatePattern.NORM_DATE_FORMAT);
|
||||||
|
DateTime endDate = DateUtil.parse(endTime, DatePattern.NORM_DATE_FORMAT);
|
||||||
|
long betweenDay = DateUtil.betweenDay(startDate, endDate, true);
|
||||||
|
//第一天
|
||||||
|
businessService.queryTelemetryAreaData(DateUtil.format(startDate, DatePattern.NORM_DATE_PATTERN));
|
||||||
|
//后续递增1
|
||||||
|
for (int i = 0; i < betweenDay; i++) {
|
||||||
|
startDate = DateUtil.offsetDay(startDate, 1);
|
||||||
|
businessService.queryTelemetryAreaData(DateUtil.format(startDate, DatePattern.NORM_DATE_PATTERN));
|
||||||
|
}
|
||||||
|
} catch (Exception exception) {
|
||||||
|
exception.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ApiOperation(value = "导入10kv分布式光伏接入情况", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
|
@ApiOperation(value = "导入10kv分布式光伏接入情况", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
|
||||||
@PostMapping("/import10KV")
|
@PostMapping("/import10KV")
|
||||||
@@ -110,16 +148,54 @@ public class DisPhotovoltaicController {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiOperation(value = "导入唐山供电公司台区数据")
|
||||||
|
@PostMapping("/importArea")
|
||||||
|
public void importArea(MultipartFile file, HttpServletResponse response) throws Exception {
|
||||||
|
List<DistributionAreaExcel> list = EasyExcel.read(file.getInputStream())
|
||||||
|
.head(DistributionAreaExcel.class)
|
||||||
|
.sheet(0).doReadSync();
|
||||||
|
list = list.stream()
|
||||||
|
.filter(t -> !"#N/A".equals(t.getPmsID()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
disPhotovoltaicService.SavaArea(list,response);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiOperation(value = "导入张家口供电公司台区数据")
|
||||||
|
@PostMapping("/importZhangArea")
|
||||||
|
public void importZhangArea(MultipartFile file, HttpServletResponse response) throws Exception {
|
||||||
|
List<ZhangDistributionAreaExcel> list = EasyExcel.read(file.getInputStream())
|
||||||
|
.head(ZhangDistributionAreaExcel.class)
|
||||||
|
.doReadAllSync();
|
||||||
|
list = list.stream()
|
||||||
|
.filter(t -> StrUtil.isNotBlank(t.getId()))
|
||||||
|
.filter(StreamUtil.distinctByKey(ZhangDistributionAreaExcel::getId))
|
||||||
|
.filter(t -> !"#N/A".equals(t.getPmsID()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
disPhotovoltaicService.SavaZhangArea(list,response);
|
||||||
|
System.out.println();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@ApiOperation(value = "将用户数据导入到配网表中")
|
@ApiOperation(value = "将用户数据导入到配网表中")
|
||||||
@PostMapping("/insertDistributionMonitor")
|
@PostMapping("/insertDistributionMonitor")
|
||||||
public String import380KV() throws Exception {
|
public String import380KV() {
|
||||||
Boolean aBoolean = disPhotovoltaicService.savePmsDistributionMonitor();
|
Boolean aBoolean = disPhotovoltaicService.savePmsDistributionMonitor();
|
||||||
if (aBoolean) {
|
if (aBoolean) {
|
||||||
return "数据导入成功";
|
return "数据导入成功";
|
||||||
}
|
}
|
||||||
return "数据导入失败";
|
return "数据导入失败";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ApiOperation(value = "将台区数据导入到配网表中")
|
||||||
|
@PostMapping("/insertDistributionArea")
|
||||||
|
public String importArea() {
|
||||||
|
Boolean aBoolean = disPhotovoltaicService.savePmsDistributionArea();
|
||||||
|
if (aBoolean) {
|
||||||
|
return "数据导入成功";
|
||||||
|
}
|
||||||
|
return "数据导入失败";
|
||||||
|
}
|
||||||
@Scheduled(cron = "0 30 8 * * ?")
|
@Scheduled(cron = "0 30 8 * * ?")
|
||||||
public void insert() {
|
public void insert() {
|
||||||
log.error(Thread.currentThread().getName(),"1.定时器启动----!");
|
log.error(Thread.currentThread().getName(),"1.定时器启动----!");
|
||||||
@@ -128,6 +204,8 @@ public class DisPhotovoltaicController {
|
|||||||
String ds = s.substring(0, s.indexOf(" "));
|
String ds = s.substring(0, s.indexOf(" "));
|
||||||
log.error(Thread.currentThread().getName() + "2.定时器执行数据日期 "+ds+"----!");
|
log.error(Thread.currentThread().getName() + "2.定时器执行数据日期 "+ds+"----!");
|
||||||
businessService.queryTelemetryData(ds);
|
businessService.queryTelemetryData(ds);
|
||||||
|
log.error(Thread.currentThread().getName() + "台区定时器执行数据日期 "+ds+"----!");
|
||||||
|
businessService.queryTelemetryAreaData(ds);
|
||||||
log.error(Thread.currentThread().getName() + "2.定时器执行数据成功 "+ds+"----!");
|
log.error(Thread.currentThread().getName() + "2.定时器执行数据成功 "+ds+"----!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ public interface DictDataMapper extends BaseMapper<DictData> {
|
|||||||
List<DictData> selectList(@Param("code") String code);
|
List<DictData> selectList(@Param("code") String code);
|
||||||
DictData selectByCode(@Param("dataCode") String dataCode,@Param("typeCode") String typeCode);
|
DictData selectByCode(@Param("dataCode") String dataCode,@Param("typeCode") String typeCode);
|
||||||
List<Dept> selectUserList();
|
List<Dept> selectUserList();
|
||||||
Boolean deletePmsDistributionMonitor(@Param("date") String date);
|
Boolean deletePmsDistributionMonitor(@Param("dic") String dic,@Param("type") String type);
|
||||||
Boolean insertPmsDistributionMonitor();
|
Boolean insertPmsDistributionMonitor();
|
||||||
|
Boolean insertPmsDistributionArea(@Param("dic") String dic);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.njcn.jbsyncdata.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.njcn.jbsyncdata.pojo.po.PmsPowerDistributionarea;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 台区信息 Mapper 接口
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author wr
|
||||||
|
* @since 2023-11-20
|
||||||
|
*/
|
||||||
|
public interface PmsPowerDistributionareaMapper extends BaseMapper<PmsPowerDistributionarea> {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -36,11 +36,48 @@
|
|||||||
pms_power_generation_user
|
pms_power_generation_user
|
||||||
where Status=1
|
where Status=1
|
||||||
</insert>
|
</insert>
|
||||||
|
<insert id="insertPmsDistributionArea">
|
||||||
|
INSERT INTO pms_distribution_monitor (
|
||||||
|
Monitor_Sort,
|
||||||
|
Monitor_Id,
|
||||||
|
Org_Id,
|
||||||
|
Voltage_Level,
|
||||||
|
If_Power_User,
|
||||||
|
Monitor_State,
|
||||||
|
Created_Date,
|
||||||
|
Status,
|
||||||
|
Create_Time,
|
||||||
|
Update_Time,
|
||||||
|
Line_Id,
|
||||||
|
Statistical_Interval,
|
||||||
|
Power_Station_Id
|
||||||
|
)
|
||||||
|
select
|
||||||
|
#{dic} as Monitor_Sort,
|
||||||
|
id as Monitor_Id,
|
||||||
|
Org_Id as Org_Id ,
|
||||||
|
Voltage_Level as Voltage_Level,
|
||||||
|
1 as If_Power_User,
|
||||||
|
(select sd.id from sys_dict_data sd INNER JOIN sys_dict_type st on st.id=sd.Type_Id where sd.`Code`="Run" and st.`Code`="Line_State") as Monitor_State,
|
||||||
|
now() as Created_Date,
|
||||||
|
1 as Status,
|
||||||
|
now() as Create_Time,
|
||||||
|
now() as Update_Time,
|
||||||
|
Line_Id as Statistical_Interval,
|
||||||
|
15 as Statistical_Interval,
|
||||||
|
Power_Station_Id as Power_Station_Id
|
||||||
|
from
|
||||||
|
pms_power_distributionarea
|
||||||
|
where Status=1
|
||||||
|
</insert>
|
||||||
<delete id="deletePmsDistributionMonitor">
|
<delete id="deletePmsDistributionMonitor">
|
||||||
delete FROM pms_distribution_monitor
|
delete FROM pms_distribution_monitor
|
||||||
<where>
|
<where>
|
||||||
<if test="date != null and date !=''">
|
<if test="type != null and type !='' ">
|
||||||
DATE_FORMAT(Create_Time, '%Y-%m-%d') = DATE_FORMAT(#{date}, '%Y-%m-%d')
|
and If_Power_User = #{type}
|
||||||
|
</if>
|
||||||
|
<if test="dic != null and dic !=''">
|
||||||
|
and Monitor_Sort = #{dic}
|
||||||
</if>
|
</if>
|
||||||
</where>
|
</where>
|
||||||
</delete>
|
</delete>
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.njcn.jbsyncdata.mapper.PmsPowerDistributionareaMapper">
|
||||||
|
|
||||||
|
</mapper>
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
package com.njcn.jbsyncdata.pojo;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 台区信息
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author wr
|
||||||
|
* @since 2023-11-20
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ColumnWidth(30)
|
||||||
|
public class DistributionAreaExcel implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "错误信息")
|
||||||
|
private String errorMessage;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 台区编号
|
||||||
|
*/
|
||||||
|
@ExcelProperty(value = "台区编号")
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 变压器名称
|
||||||
|
*/
|
||||||
|
@ExcelProperty("变压器名称")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PMS资源id(同源)
|
||||||
|
*/
|
||||||
|
@ExcelProperty("PMS资源id(同源)")
|
||||||
|
private String pmsID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 监测线路名称
|
||||||
|
*/
|
||||||
|
@ExcelProperty("所属线路")
|
||||||
|
private String lineName;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "公司名称")
|
||||||
|
private String orgName;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "供电所")
|
||||||
|
private String powerSupply;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
25
src/main/java/com/njcn/jbsyncdata/pojo/InfluxAreaData.java
Normal file
25
src/main/java/com/njcn/jbsyncdata/pojo/InfluxAreaData.java
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
package com.njcn.jbsyncdata.pojo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class InfluxAreaData implements Serializable {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 台区id
|
||||||
|
*/
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* influxData数据
|
||||||
|
*/
|
||||||
|
private String influxData;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,113 @@
|
|||||||
|
package com.njcn.jbsyncdata.pojo;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 台区信息
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author wr
|
||||||
|
* @since 2023-11-20
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@ColumnWidth(30)
|
||||||
|
public class ZhangDistributionAreaExcel implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
|
||||||
|
@ExcelProperty("台区编号")
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
@ExcelProperty("台区(变压器)名称")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
|
||||||
|
@ExcelProperty("组织机构名称")
|
||||||
|
private String orgName;
|
||||||
|
|
||||||
|
|
||||||
|
@ExcelProperty("组织机构id")
|
||||||
|
private String orgId;
|
||||||
|
|
||||||
|
|
||||||
|
@ExcelProperty("运维单位名称")
|
||||||
|
private String operationName;
|
||||||
|
|
||||||
|
|
||||||
|
@ExcelProperty("运维单位id")
|
||||||
|
private String operationId;
|
||||||
|
|
||||||
|
|
||||||
|
@ExcelProperty("变电站名称")
|
||||||
|
private String powerrName;
|
||||||
|
|
||||||
|
|
||||||
|
@ExcelProperty("变电站id")
|
||||||
|
private String powerStationId;
|
||||||
|
|
||||||
|
|
||||||
|
@ExcelProperty("监测线路名称")
|
||||||
|
private String lineName;
|
||||||
|
|
||||||
|
|
||||||
|
@ExcelProperty("所属线路ID")
|
||||||
|
private String lineId;
|
||||||
|
|
||||||
|
|
||||||
|
@ExcelProperty("电压等级")
|
||||||
|
private String voltageLevel;
|
||||||
|
|
||||||
|
|
||||||
|
@ExcelProperty("PMS中资源ID")
|
||||||
|
private String pmsID;
|
||||||
|
|
||||||
|
|
||||||
|
@ExcelProperty("配变容量")
|
||||||
|
private String pCapacity;
|
||||||
|
|
||||||
|
|
||||||
|
@ExcelProperty("地区特征")
|
||||||
|
private String regionalism;
|
||||||
|
|
||||||
|
@ExcelProperty("是否农网")
|
||||||
|
private String ifRuralPowerGrid;
|
||||||
|
|
||||||
|
@ExcelProperty("使用性质")
|
||||||
|
private String natureOfUse;
|
||||||
|
|
||||||
|
|
||||||
|
@ExcelProperty("供电半径")
|
||||||
|
private Float powerSupplyRadius;
|
||||||
|
|
||||||
|
|
||||||
|
@ExcelProperty("供电线路总长度")
|
||||||
|
private Float lineLength;
|
||||||
|
|
||||||
|
|
||||||
|
@ExcelProperty("运行状态")
|
||||||
|
private String state;
|
||||||
|
|
||||||
|
|
||||||
|
@ExcelProperty("分布式光伏用户数")
|
||||||
|
private Integer distributedPhotovoltaicNum;
|
||||||
|
|
||||||
|
|
||||||
|
@ExcelProperty("装机容量")
|
||||||
|
private Float photovoltaicCapacity;
|
||||||
|
|
||||||
|
|
||||||
|
@ExcelProperty("是否有电动汽车接入")
|
||||||
|
private String ifBevAp;
|
||||||
|
|
||||||
|
|
||||||
|
@ExcelProperty("接入负荷类型")
|
||||||
|
private String apLoadType;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,220 @@
|
|||||||
|
package com.njcn.jbsyncdata.pojo.po;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 台区信息
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author wr
|
||||||
|
* @since 2023-11-20
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@TableName("pms_power_distributionarea")
|
||||||
|
public class PmsPowerDistributionarea {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 台区编号
|
||||||
|
*/
|
||||||
|
@TableId("Id")
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 台区名称
|
||||||
|
*/
|
||||||
|
@TableField("Name")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 组织机构名称
|
||||||
|
*/
|
||||||
|
@TableField("Org_Name")
|
||||||
|
private String orgName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 组织机构ID(外键)
|
||||||
|
*/
|
||||||
|
@TableField("Org_Id")
|
||||||
|
private String orgId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 运维单位名称
|
||||||
|
*/
|
||||||
|
@TableField("Operation_Name")
|
||||||
|
private String operationName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 运维单位ID(外键)
|
||||||
|
*/
|
||||||
|
@TableField("Operation_Id")
|
||||||
|
private String operationId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 变电站名称
|
||||||
|
*/
|
||||||
|
@TableField("Powerr_Name")
|
||||||
|
private String powerrName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电站ID(外键)
|
||||||
|
*/
|
||||||
|
@TableField("Power_Station_Id")
|
||||||
|
private String powerStationId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 监测线路名称
|
||||||
|
*/
|
||||||
|
@TableField("Line_Name")
|
||||||
|
private String lineName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 所属线路ID(外键)
|
||||||
|
*/
|
||||||
|
@TableField("Line_Id")
|
||||||
|
private String lineId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 电压等级
|
||||||
|
*/
|
||||||
|
@TableField("Voltage_Level")
|
||||||
|
private String voltageLevel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 配变容量
|
||||||
|
*/
|
||||||
|
@TableField("P_Capacity")
|
||||||
|
private Float pCapacity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 地区特征(字典)
|
||||||
|
*/
|
||||||
|
@TableField("Regionalism")
|
||||||
|
private String regionalism;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设备地区特征
|
||||||
|
*/
|
||||||
|
@TableField("Dev_Regionalism")
|
||||||
|
private String devRegionalism;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否农网:0-否;1:是;
|
||||||
|
*/
|
||||||
|
@TableField("If_Rural_Power_Grid")
|
||||||
|
private Boolean ifRuralPowerGrid;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 使用性质
|
||||||
|
*/
|
||||||
|
@TableField("Nature_Of_Use")
|
||||||
|
private String natureOfUse;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 供电半径
|
||||||
|
*/
|
||||||
|
@TableField("Power_Supply_Radius")
|
||||||
|
private Float powerSupplyRadius;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 供电线路总长度
|
||||||
|
*/
|
||||||
|
@TableField("Line_Length")
|
||||||
|
private Float lineLength;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 运行状态(字典)
|
||||||
|
*/
|
||||||
|
@TableField("State")
|
||||||
|
private String state;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分布式光伏用户数
|
||||||
|
*/
|
||||||
|
@TableField("Distributed_Photovoltaic_Num")
|
||||||
|
private Integer distributedPhotovoltaicNum;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分布式光伏总装机容量
|
||||||
|
*/
|
||||||
|
@TableField("Photovoltaic_Capacity")
|
||||||
|
private Float photovoltaicCapacity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否有电动汽车接入:0-否;1:是;
|
||||||
|
*/
|
||||||
|
@TableField("If_Bev_Ap")
|
||||||
|
private Boolean ifBevAp;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 接入负荷类型(字典)
|
||||||
|
*/
|
||||||
|
@TableField("Ap_Load_Type")
|
||||||
|
private String apLoadType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 经度
|
||||||
|
*/
|
||||||
|
@TableField("Longitude")
|
||||||
|
private Double longitude;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 维度
|
||||||
|
*/
|
||||||
|
@TableField("Latitude")
|
||||||
|
private Double latitude;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否是上送国网监测点,0-否 1-是
|
||||||
|
*/
|
||||||
|
@TableField("Is_Up_To_Grid")
|
||||||
|
private Boolean isUpToGrid;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据状态:0-删除;1-正常;
|
||||||
|
*/
|
||||||
|
@TableField("Status")
|
||||||
|
private Boolean status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据状态:0-手动录入;1-gw台账录入
|
||||||
|
*/
|
||||||
|
@TableField("input_Status")
|
||||||
|
private Integer inputStatus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建用户
|
||||||
|
*/
|
||||||
|
@TableField("Create_By")
|
||||||
|
private String createBy;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
@TableField("Create_Time")
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新用户
|
||||||
|
*/
|
||||||
|
@TableField("Update_By")
|
||||||
|
private String updateBy;
|
||||||
|
|
||||||
|
@TableField("Pms_Id")
|
||||||
|
private String pmsID;
|
||||||
|
/**
|
||||||
|
* 更新时间
|
||||||
|
*/
|
||||||
|
@TableField("Update_Time")
|
||||||
|
private LocalDateTime updateTime;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -2,6 +2,8 @@ package com.njcn.jbsyncdata.service;
|
|||||||
|
|
||||||
import com.njcn.jbsyncdata.pojo.DisPhotovoltaic10Excel;
|
import com.njcn.jbsyncdata.pojo.DisPhotovoltaic10Excel;
|
||||||
import com.njcn.jbsyncdata.pojo.DisPhotovoltaic380Excel;
|
import com.njcn.jbsyncdata.pojo.DisPhotovoltaic380Excel;
|
||||||
|
import com.njcn.jbsyncdata.pojo.DistributionAreaExcel;
|
||||||
|
import com.njcn.jbsyncdata.pojo.ZhangDistributionAreaExcel;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -31,6 +33,21 @@ public interface DisPhotovoltaicService {
|
|||||||
*/
|
*/
|
||||||
void SavaPmsPowerGenerationUser380KV(List<DisPhotovoltaic380Excel> list, HttpServletResponse response);
|
void SavaPmsPowerGenerationUser380KV(List<DisPhotovoltaic380Excel> list, HttpServletResponse response);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 唐山模板导入
|
||||||
|
* @param list
|
||||||
|
* @param response
|
||||||
|
*/
|
||||||
|
void SavaArea(List<DistributionAreaExcel> list, HttpServletResponse response);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 张家口模板导入
|
||||||
|
* @param list
|
||||||
|
* @param response
|
||||||
|
*/
|
||||||
|
void SavaZhangArea(List<ZhangDistributionAreaExcel> list, HttpServletResponse response);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Description: 配网表数据新增
|
* @Description: 配网表数据新增
|
||||||
* @param
|
* @param
|
||||||
@@ -39,4 +56,13 @@ public interface DisPhotovoltaicService {
|
|||||||
* @Date: 2023/10/11 14:31
|
* @Date: 2023/10/11 14:31
|
||||||
*/
|
*/
|
||||||
Boolean savePmsDistributionMonitor();
|
Boolean savePmsDistributionMonitor();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Description: 配网表数据新增
|
||||||
|
* @param
|
||||||
|
* @return: java.lang.Boolean
|
||||||
|
* @Author: wr
|
||||||
|
* @Date: 2023/10/11 14:31
|
||||||
|
*/
|
||||||
|
Boolean savePmsDistributionArea();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,4 +5,8 @@ public interface IBusinessService {
|
|||||||
|
|
||||||
void queryTelemetryData(String date);
|
void queryTelemetryData(String date);
|
||||||
|
|
||||||
|
|
||||||
|
void queryTelemetryAreaData(String date);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.njcn.jbsyncdata.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import com.njcn.jbsyncdata.pojo.po.PmsPowerDistributionarea;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 台区信息 服务类
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author wr
|
||||||
|
* @since 2023-11-20
|
||||||
|
*/
|
||||||
|
public interface IPmsPowerDistributionareaService extends IService<PmsPowerDistributionarea> {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -5,11 +5,15 @@ import cn.hutool.core.date.DateTime;
|
|||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONObject;
|
||||||
import cn.hutool.json.JSONUtil;
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.njcn.jbsyncdata.component.TokenComponent;
|
import com.njcn.jbsyncdata.component.TokenComponent;
|
||||||
import com.njcn.jbsyncdata.enums.MeasTypeEnum;
|
import com.njcn.jbsyncdata.enums.MeasTypeEnum;
|
||||||
|
import com.njcn.jbsyncdata.pojo.po.PmsPowerDistributionarea;
|
||||||
import com.njcn.jbsyncdata.pojo.result.*;
|
import com.njcn.jbsyncdata.pojo.result.*;
|
||||||
import com.njcn.jbsyncdata.service.IBusinessService;
|
import com.njcn.jbsyncdata.service.IBusinessService;
|
||||||
|
import com.njcn.jbsyncdata.service.IPmsPowerDistributionareaService;
|
||||||
import com.njcn.jbsyncdata.service.IPmsPowerGenerationUserService;
|
import com.njcn.jbsyncdata.service.IPmsPowerGenerationUserService;
|
||||||
|
import com.njcn.jbsyncdata.util.AreaDataProcessing;
|
||||||
import com.njcn.jbsyncdata.util.DataProcessing;
|
import com.njcn.jbsyncdata.util.DataProcessing;
|
||||||
import com.njcn.jbsyncdata.util.RestTemplateUtil;
|
import com.njcn.jbsyncdata.util.RestTemplateUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@@ -19,6 +23,7 @@ import org.springframework.stereotype.Service;
|
|||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
@@ -31,8 +36,13 @@ public class BusinessServiceImpl implements IBusinessService {
|
|||||||
@Resource
|
@Resource
|
||||||
private DataProcessing dataProcessing;
|
private DataProcessing dataProcessing;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private AreaDataProcessing areaDataProcessing;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private IPmsPowerGenerationUserService pmsPowerGenerationUserService;
|
private IPmsPowerGenerationUserService pmsPowerGenerationUserService;
|
||||||
|
@Resource
|
||||||
|
private IPmsPowerDistributionareaService powerDistributionareaService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 此方法通过发电客户编号查询数据,该方法存在以下问题
|
* 此方法通过发电客户编号查询数据,该方法存在以下问题
|
||||||
@@ -86,5 +96,45 @@ public class BusinessServiceImpl implements IBusinessService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void queryTelemetryAreaData(String date) {
|
||||||
|
DateTime dateTemp = DateUtil.parse(date, DatePattern.NORM_DATE_FORMAT);
|
||||||
|
DateTime beginOfDay = DateUtil.beginOfDay(dateTemp);
|
||||||
|
DateTime endOfDay = DateUtil.endOfDay(dateTemp);
|
||||||
|
RestTemplateUtil restTemplateUtil = new RestTemplateUtil();
|
||||||
|
TokenResult tokenWithRestTemplate = tokenComponent.getTokenWithRestTemplate();
|
||||||
|
if (null == tokenWithRestTemplate) {
|
||||||
|
log.error("token信息获取失败");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
List<String> typeList = MeasTypeEnum.getMeasList();
|
||||||
|
JSONObject jsonObject = JSONUtil.createObj();
|
||||||
|
JSONObject jsonObjectSub = JSONUtil.createObj();
|
||||||
|
jsonObject.set("page", 1);
|
||||||
|
jsonObject.set("perPage", 10000);
|
||||||
|
jsonObject.set("startTime", DateUtil.format(beginOfDay, DatePattern.NORM_DATETIME_FORMATTER));
|
||||||
|
jsonObject.set("endTime", DateUtil.format(endOfDay, DatePattern.NORM_DATETIME_FORMATTER));
|
||||||
|
//1公专变2低压用户3光伏
|
||||||
|
jsonObjectSub.set("consNos", new ArrayList<>());
|
||||||
|
jsonObjectSub.set("consType", "");
|
||||||
|
jsonObjectSub.set("astIds", new ArrayList<>());
|
||||||
|
jsonObjectSub.set("astType", "");
|
||||||
|
jsonObjectSub.set("psrType", "0401004");
|
||||||
|
jsonObjectSub.set("measPointIds", new ArrayList<>());
|
||||||
|
jsonObjectSub.set("telemetryTypes", typeList);
|
||||||
|
//组装好json开始发送请求
|
||||||
|
Map<String, String> headers = new HashMap<>();
|
||||||
|
headers.put("x-token", tokenWithRestTemplate.getAccess_token());
|
||||||
|
//获取所有发电用户的id
|
||||||
|
List<PmsPowerDistributionarea> list = powerDistributionareaService.list(new LambdaQueryWrapper<PmsPowerDistributionarea>()
|
||||||
|
.select(PmsPowerDistributionarea::getId, PmsPowerDistributionarea::getPmsID)
|
||||||
|
.isNotNull(PmsPowerDistributionarea::getPmsID)
|
||||||
|
);
|
||||||
|
List<List<PmsPowerDistributionarea>> singleQueryDataUserId = ListUtils.partition(list, 20000);
|
||||||
|
for (int k = 0; k < singleQueryDataUserId.size(); k++) {
|
||||||
|
areaDataProcessing.asyncInfluxDb(tokenComponent,date, restTemplateUtil, typeList, jsonObject, jsonObjectSub, headers, singleQueryDataUserId, k);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,21 +4,19 @@ import cn.hutool.core.collection.CollUtil;
|
|||||||
import cn.hutool.core.date.DateTime;
|
import cn.hutool.core.date.DateTime;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.util.CharsetUtil;
|
import cn.hutool.core.util.CharsetUtil;
|
||||||
|
import cn.hutool.core.util.IdUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.alibaba.excel.EasyExcel;
|
import com.alibaba.excel.EasyExcel;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.njcn.jbsyncdata.mapper.DictDataMapper;
|
import com.njcn.jbsyncdata.mapper.DictDataMapper;
|
||||||
import com.njcn.jbsyncdata.pojo.*;
|
import com.njcn.jbsyncdata.pojo.*;
|
||||||
|
import com.njcn.jbsyncdata.pojo.po.PmsPowerDistributionarea;
|
||||||
import com.njcn.jbsyncdata.service.DisPhotovoltaicService;
|
import com.njcn.jbsyncdata.service.DisPhotovoltaicService;
|
||||||
|
import com.njcn.jbsyncdata.service.IPmsPowerDistributionareaService;
|
||||||
import com.njcn.jbsyncdata.service.IPmsPowerGenerationUserService;
|
import com.njcn.jbsyncdata.service.IPmsPowerGenerationUserService;
|
||||||
import com.njcn.jbsyncdata.service.IPmsStatationStatService;
|
import com.njcn.jbsyncdata.service.IPmsStatationStatService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import com.njcn.jbsyncdata.util.StreamUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
import javax.servlet.ServletOutputStream;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@@ -26,6 +24,13 @@ import java.time.ZoneId;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
import javax.servlet.ServletOutputStream;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author wr
|
* @author wr
|
||||||
@@ -40,6 +45,7 @@ public class DisPhotovoltaicServiceImpl implements DisPhotovoltaicService {
|
|||||||
private final IPmsPowerGenerationUserService iPmsPowerGenerationUserService;
|
private final IPmsPowerGenerationUserService iPmsPowerGenerationUserService;
|
||||||
private final DictDataMapper dictDataMapper;
|
private final DictDataMapper dictDataMapper;
|
||||||
private final IPmsStatationStatService iPmsStatationStatService;
|
private final IPmsStatationStatService iPmsStatationStatService;
|
||||||
|
private final IPmsPowerDistributionareaService powerDistributionareaService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void SavaPmsPowerGenerationUser10KV(List<DisPhotovoltaic10Excel> list, HttpServletResponse response) {
|
public void SavaPmsPowerGenerationUser10KV(List<DisPhotovoltaic10Excel> list, HttpServletResponse response) {
|
||||||
@@ -103,7 +109,7 @@ public class DisPhotovoltaicServiceImpl implements DisPhotovoltaicService {
|
|||||||
user.setPowerGenerationMode(powerGenerationMode.getId());
|
user.setPowerGenerationMode(powerGenerationMode.getId());
|
||||||
|
|
||||||
//todo 电压等级(需要转换)
|
//todo 电压等级(需要转换)
|
||||||
user.setVoltageLevel(getVoltage(excel.getVoltage_Level(), dev_voltage));
|
user.setVoltageLevel(getVoltage(excel.getVoltage_Level().replace("交流",""), dev_voltage));
|
||||||
|
|
||||||
|
|
||||||
user.setSourceCapacity(excel.getContractCapacity());
|
user.setSourceCapacity(excel.getContractCapacity());
|
||||||
@@ -129,10 +135,10 @@ public class DisPhotovoltaicServiceImpl implements DisPhotovoltaicService {
|
|||||||
info.add(user);
|
info.add(user);
|
||||||
}
|
}
|
||||||
if (CollUtil.isNotEmpty(info)) {
|
if (CollUtil.isNotEmpty(info)) {
|
||||||
// LambdaQueryWrapper<PmsPowerGenerationUser> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<PmsPowerGenerationUser> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
// lambdaQueryWrapper.eq(PmsPowerGenerationUser::getInputStatus, 0);
|
lambdaQueryWrapper.eq(PmsPowerGenerationUser::getInputStatus, 0);
|
||||||
// iPmsPowerGenerationUserService.remove(lambdaQueryWrapper);
|
iPmsPowerGenerationUserService.remove(lambdaQueryWrapper);
|
||||||
// iPmsPowerGenerationUserService.saveOrUpdateBatch(info, 1000);
|
iPmsPowerGenerationUserService.saveOrUpdateBatch(info, 1000);
|
||||||
}
|
}
|
||||||
if (CollUtil.isNotEmpty(errorInfo)) {
|
if (CollUtil.isNotEmpty(errorInfo)) {
|
||||||
exportExcel(DateUtil.now() + "_10kV错误信息.xlsx", errorInfo,DisPhotovoltaic10Excel.class, response);
|
exportExcel(DateUtil.now() + "_10kV错误信息.xlsx", errorInfo,DisPhotovoltaic10Excel.class, response);
|
||||||
@@ -229,10 +235,10 @@ public class DisPhotovoltaicServiceImpl implements DisPhotovoltaicService {
|
|||||||
info.add(user);
|
info.add(user);
|
||||||
}
|
}
|
||||||
if (CollUtil.isNotEmpty(info)) {
|
if (CollUtil.isNotEmpty(info)) {
|
||||||
// LambdaQueryWrapper<PmsPowerGenerationUser> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<PmsPowerGenerationUser> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
// lambdaQueryWrapper.eq(PmsPowerGenerationUser::getInputStatus, 1);
|
lambdaQueryWrapper.eq(PmsPowerGenerationUser::getInputStatus, 1);
|
||||||
// iPmsPowerGenerationUserService.remove(lambdaQueryWrapper);
|
iPmsPowerGenerationUserService.remove(lambdaQueryWrapper);
|
||||||
// iPmsPowerGenerationUserService.saveBatch(info, 1000);
|
iPmsPowerGenerationUserService.saveBatch(info, 1000);
|
||||||
}
|
}
|
||||||
if (CollUtil.isNotEmpty(errorInfo)) {
|
if (CollUtil.isNotEmpty(errorInfo)) {
|
||||||
exportExcel(DateUtil.now() + "_380kV错误信息.xlsx", errorInfo,DisPhotovoltaic380Excel.class, response);
|
exportExcel(DateUtil.now() + "_380kV错误信息.xlsx", errorInfo,DisPhotovoltaic380Excel.class, response);
|
||||||
@@ -240,14 +246,213 @@ public class DisPhotovoltaicServiceImpl implements DisPhotovoltaicService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void SavaArea(List<DistributionAreaExcel> list, HttpServletResponse response) {
|
||||||
|
List<PmsPowerDistributionarea> info=new ArrayList<>();
|
||||||
|
//电压等级
|
||||||
|
DictData dictData = dictDataMapper.selectByCode("10kV", "Dev_Voltage");
|
||||||
|
//运行状态
|
||||||
|
DictData runData = dictDataMapper.selectByCode("Run", "Line_State");
|
||||||
|
|
||||||
|
List<Dept> depts = dictDataMapper.selectUserList();
|
||||||
|
//获取变电站信息
|
||||||
|
List<PmsStatationStat> oldList = iPmsStatationStatService.list(
|
||||||
|
new LambdaQueryWrapper<PmsStatationStat>()
|
||||||
|
.eq(PmsStatationStat::getStatus, 1)
|
||||||
|
);
|
||||||
|
Integer num=0;
|
||||||
|
PmsPowerDistributionarea area;
|
||||||
|
for (DistributionAreaExcel excel : list) {
|
||||||
|
area=new PmsPowerDistributionarea();
|
||||||
|
if(StrUtil.isNotBlank(excel.getId())){
|
||||||
|
area.setId(excel.getId().equals("新上")?excel.getId()+excel.getPmsID().substring(0,30):excel.getId());
|
||||||
|
}else{
|
||||||
|
area.setId(excel.getPmsID().substring(0,32));
|
||||||
|
}
|
||||||
|
area.setName(excel.getName());
|
||||||
|
List<Dept> dept = depts.stream().filter(x -> x.getName().contains(excel.getOrgName())).collect(Collectors.toList());
|
||||||
|
if(CollUtil.isNotEmpty(dept)){
|
||||||
|
area.setOrgName(dept.get(0).getName());
|
||||||
|
area.setOrgId(dept.get(0).getCode());
|
||||||
|
area.setOperationName(dept.get(0).getName());
|
||||||
|
area.setOperationId(dept.get(0).getCode());
|
||||||
|
}
|
||||||
|
if(StrUtil.isNotEmpty(excel.getPowerSupply())){
|
||||||
|
List<PmsStatationStat> station = oldList.stream()
|
||||||
|
.filter(x ->x.getPowerName().contains(excel.getPowerSupply()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
if (CollUtil.isNotEmpty(station)){
|
||||||
|
area.setPowerrName(station.get(0).getPowerName());
|
||||||
|
area.setPowerStationId(station.get(0).getPowerId());
|
||||||
|
area.setVoltageLevel(station.get(0).getVoltageLevel());
|
||||||
|
}else {
|
||||||
|
area.setPowerrName(excel.getPowerSupply());
|
||||||
|
area.setPowerStationId(IdUtil.simpleUUID());
|
||||||
|
area.setVoltageLevel(dictData.getId());
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
area.setPowerrName("");
|
||||||
|
area.setPowerStationId("");
|
||||||
|
area.setVoltageLevel(dictData.getId());
|
||||||
|
}
|
||||||
|
area.setLineName(StrUtil.isBlank(excel.getLineName())?"":excel.getLineName());
|
||||||
|
area.setLineId(IdUtil.simpleUUID());
|
||||||
|
area.setPCapacity(100.0F);
|
||||||
|
area.setRegionalism("");
|
||||||
|
area.setDevRegionalism("");
|
||||||
|
area.setIfRuralPowerGrid(false);
|
||||||
|
area.setNatureOfUse("");
|
||||||
|
area.setPowerSupplyRadius(100.0F);
|
||||||
|
area.setLineLength(100.0F);
|
||||||
|
area.setState(runData.getId());
|
||||||
|
area.setDistributedPhotovoltaicNum(10);
|
||||||
|
area.setPhotovoltaicCapacity(100.0F);
|
||||||
|
area.setIfBevAp(false);
|
||||||
|
area.setApLoadType("分布式光伏");
|
||||||
|
area.setLongitude(0.0D);
|
||||||
|
area.setLatitude(0.0D);
|
||||||
|
area.setIsUpToGrid(false);
|
||||||
|
area.setStatus(true);
|
||||||
|
area.setInputStatus(1);
|
||||||
|
area.setCreateBy("");
|
||||||
|
area.setCreateTime(LocalDateTime.now());
|
||||||
|
area.setUpdateBy("");
|
||||||
|
area.setUpdateTime(LocalDateTime.now());
|
||||||
|
area.setPmsID(excel.getPmsID());
|
||||||
|
info.add(area);
|
||||||
|
}
|
||||||
|
if (CollUtil.isNotEmpty(info)) {
|
||||||
|
info= info.stream()
|
||||||
|
.filter(StreamUtil.distinctByKey(PmsPowerDistributionarea::getId))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
LambdaQueryWrapper<PmsPowerDistributionarea> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
lambdaQueryWrapper.eq(PmsPowerDistributionarea::getInputStatus, 1);
|
||||||
|
powerDistributionareaService.remove(lambdaQueryWrapper);
|
||||||
|
powerDistributionareaService.saveBatch(info, 1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void SavaZhangArea(List<ZhangDistributionAreaExcel> list, HttpServletResponse response) {
|
||||||
|
List<PmsPowerDistributionarea> info=new ArrayList<>();
|
||||||
|
//电压等级
|
||||||
|
List<DictData> dictData = dictDataMapper.selectList("Dev_Voltage");
|
||||||
|
DictData data10KV = dictDataMapper.selectByCode("10kV", "Dev_Voltage");
|
||||||
|
//运行状态
|
||||||
|
DictData runData = dictDataMapper.selectByCode("Run", "Line_State");
|
||||||
|
//获取部门信息
|
||||||
|
List<Dept> depts = dictDataMapper.selectUserList();
|
||||||
|
|
||||||
|
Integer num=0;
|
||||||
|
PmsPowerDistributionarea area;
|
||||||
|
for (ZhangDistributionAreaExcel excel : list) {
|
||||||
|
area=new PmsPowerDistributionarea();
|
||||||
|
if("#N/A".equals(excel.getId())){
|
||||||
|
area.setId(excel.getPmsID().substring(0,30));
|
||||||
|
}else{
|
||||||
|
area.setId(excel.getId());
|
||||||
|
}
|
||||||
|
area.setName(excel.getName());
|
||||||
|
|
||||||
|
|
||||||
|
List<Dept> deptList = depts.stream().filter(x -> x.getCode().contains(excel.getOrgId())).collect(Collectors.toList());
|
||||||
|
if(CollUtil.isEmpty(deptList)){
|
||||||
|
String org = subString(excel.getOrgName().replace("国网",""));
|
||||||
|
List<Dept> deptName = depts.stream().filter(x -> x.getName().contains(org)).collect(Collectors.toList());
|
||||||
|
if(CollUtil.isNotEmpty(deptName)){
|
||||||
|
area.setOrgName(deptName.get(0).getName());
|
||||||
|
area.setOrgId(deptName.get(0).getCode());
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
area.setOrgName(deptList.get(0).getName());
|
||||||
|
area.setOrgId(deptList.get(0).getCode());
|
||||||
|
}
|
||||||
|
if(StrUtil.isNotBlank(excel.getOperationId())){
|
||||||
|
area.setOperationName(excel.getOperationName());
|
||||||
|
area.setOperationId(excel.getOperationId());
|
||||||
|
}else{
|
||||||
|
area.setOperationName("");
|
||||||
|
area.setOperationId("");
|
||||||
|
}
|
||||||
|
area.setPowerrName(excel.getPowerrName());
|
||||||
|
area.setPowerStationId(excel.getPowerStationId());
|
||||||
|
if(StrUtil.isNotBlank(excel.getLineId())){
|
||||||
|
area.setLineName(excel.getLineName());
|
||||||
|
area.setLineId(excel.getLineId());
|
||||||
|
}else{
|
||||||
|
area.setLineName("");
|
||||||
|
area.setLineId("");
|
||||||
|
}
|
||||||
|
if(StrUtil.isNotBlank(excel.getVoltageLevel())){
|
||||||
|
int i = excel.getVoltageLevel().indexOf("(");
|
||||||
|
if(i !=-1){
|
||||||
|
area.setVoltageLevel(get380Voltage(excel.getVoltageLevel().substring(0,i), dictData));
|
||||||
|
}else{
|
||||||
|
area.setVoltageLevel(data10KV.getId());
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
area.setVoltageLevel(data10KV.getId());
|
||||||
|
}
|
||||||
|
if(StrUtil.isNotBlank(excel.getPCapacity())&&!"#N/A".equals(excel.getPCapacity())){
|
||||||
|
String substring = excel.getPCapacity().substring(excel.getPCapacity().lastIndexOf("-")+1, excel.getPCapacity().indexOf("/") );
|
||||||
|
area.setPCapacity(Float.valueOf(substring));
|
||||||
|
}else{
|
||||||
|
area.setPCapacity(0.0f);
|
||||||
|
}
|
||||||
|
area.setRegionalism("");
|
||||||
|
area.setDevRegionalism("");
|
||||||
|
area.setIfRuralPowerGrid(false);
|
||||||
|
area.setNatureOfUse("");
|
||||||
|
area.setPowerSupplyRadius(ObjectUtil.isNull(excel.getPowerSupplyRadius())?100.0f:excel.getPowerSupplyRadius());
|
||||||
|
area.setLineLength(ObjectUtil.isNull(excel.getLineLength())?100.0f:excel.getLineLength());
|
||||||
|
area.setState(runData.getId());
|
||||||
|
area.setDistributedPhotovoltaicNum(ObjectUtil.isNull(excel.getDistributedPhotovoltaicNum())?10:excel.getDistributedPhotovoltaicNum());
|
||||||
|
area.setPhotovoltaicCapacity(ObjectUtil.isNull(excel.getPhotovoltaicCapacity())?100.0f:excel.getPhotovoltaicCapacity());
|
||||||
|
area.setIfBevAp(false);
|
||||||
|
area.setApLoadType("分布式光伏");
|
||||||
|
area.setLongitude(0.0D);
|
||||||
|
area.setLatitude(0.0D);
|
||||||
|
area.setIsUpToGrid(false);
|
||||||
|
area.setStatus(true);
|
||||||
|
area.setInputStatus(2);
|
||||||
|
area.setCreateBy("");
|
||||||
|
area.setCreateTime(LocalDateTime.now());
|
||||||
|
area.setUpdateBy("");
|
||||||
|
area.setPmsID(excel.getPmsID());
|
||||||
|
area.setUpdateTime(LocalDateTime.now());
|
||||||
|
info.add(area);
|
||||||
|
}
|
||||||
|
if (CollUtil.isNotEmpty(info)) {
|
||||||
|
info= info.stream()
|
||||||
|
.filter(StreamUtil.distinctByKey(PmsPowerDistributionarea::getId))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
LambdaQueryWrapper<PmsPowerDistributionarea> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
lambdaQueryWrapper.eq(PmsPowerDistributionarea::getInputStatus, 2);
|
||||||
|
powerDistributionareaService.remove(lambdaQueryWrapper);
|
||||||
|
powerDistributionareaService.saveBatch(info, 1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public Boolean savePmsDistributionMonitor() {
|
public Boolean savePmsDistributionMonitor() {
|
||||||
Boolean aBoolean = dictDataMapper.deletePmsDistributionMonitor(null);
|
DictData dictData = dictDataMapper.selectByCode("Three_Line", "Line_Sort");
|
||||||
|
Boolean aBoolean = dictDataMapper.deletePmsDistributionMonitor(dictData.getId(),"1");
|
||||||
if(aBoolean){
|
if(aBoolean){
|
||||||
return dictDataMapper.insertPmsDistributionMonitor();
|
return dictDataMapper.insertPmsDistributionMonitor();
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public Boolean savePmsDistributionArea() {
|
||||||
|
DictData dictData = dictDataMapper.selectByCode("Two_Line", "Line_Sort");
|
||||||
|
dictDataMapper.deletePmsDistributionMonitor(dictData.getId(),null);
|
||||||
|
return dictDataMapper.insertPmsDistributionArea(dictData.getId());
|
||||||
|
}
|
||||||
|
|
||||||
public String getAlgoDescribe(String name, List<DictData> dictData) {
|
public String getAlgoDescribe(String name, List<DictData> dictData) {
|
||||||
List<DictData> dictDataList = dictData.stream().filter(x -> x.getName().indexOf(name) != -1).collect(Collectors.toList());
|
List<DictData> dictDataList = dictData.stream().filter(x -> x.getName().indexOf(name) != -1).collect(Collectors.toList());
|
||||||
if (CollUtil.isNotEmpty(dictDataList)) {
|
if (CollUtil.isNotEmpty(dictDataList)) {
|
||||||
@@ -317,7 +522,7 @@ public class DisPhotovoltaicServiceImpl implements DisPhotovoltaicService {
|
|||||||
stat.setOrgId(dept.getCode());
|
stat.setOrgId(dept.getCode());
|
||||||
stat.setOrgName(dept.getName());
|
stat.setOrgName(dept.getName());
|
||||||
stat.setShouldBeNum(100);
|
stat.setShouldBeNum(100);
|
||||||
stat.setVoltageLevel(getVoltage(value.getVoltage_Level(), dev_voltage));
|
stat.setVoltageLevel(getVoltage(value.getVoltage_Level().replace("交流",""), dev_voltage));
|
||||||
stat.setStatus(1);
|
stat.setStatus(1);
|
||||||
stat.setCreateTime(LocalDateTime.now());
|
stat.setCreateTime(LocalDateTime.now());
|
||||||
stat.setUpdateTime(LocalDateTime.now());
|
stat.setUpdateTime(LocalDateTime.now());
|
||||||
@@ -326,7 +531,7 @@ public class DisPhotovoltaicServiceImpl implements DisPhotovoltaicService {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (CollUtil.isNotEmpty(info)) {
|
if (CollUtil.isNotEmpty(info)) {
|
||||||
iPmsStatationStatService.saveBatch(info, 1000);
|
iPmsStatationStatService.saveOrUpdateBatch(info, 1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -361,7 +566,7 @@ public class DisPhotovoltaicServiceImpl implements DisPhotovoltaicService {
|
|||||||
stat.setOrgId(dept.getCode());
|
stat.setOrgId(dept.getCode());
|
||||||
stat.setOrgName(dept.getName());
|
stat.setOrgName(dept.getName());
|
||||||
stat.setShouldBeNum(100);
|
stat.setShouldBeNum(100);
|
||||||
stat.setVoltageLevel(getVoltage(value.getVoltage_Level(), dev_voltage));
|
stat.setVoltageLevel(get380Voltage(value.getVoltage_Level(), dev_voltage));
|
||||||
stat.setStatus(1);
|
stat.setStatus(1);
|
||||||
stat.setCreateTime(LocalDateTime.now());
|
stat.setCreateTime(LocalDateTime.now());
|
||||||
stat.setUpdateTime(LocalDateTime.now());
|
stat.setUpdateTime(LocalDateTime.now());
|
||||||
@@ -370,7 +575,7 @@ public class DisPhotovoltaicServiceImpl implements DisPhotovoltaicService {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (CollUtil.isNotEmpty(info)) {
|
if (CollUtil.isNotEmpty(info)) {
|
||||||
iPmsStatationStatService.saveBatch(info, 1000);
|
iPmsStatationStatService.saveOrUpdateBatch(info, 1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package com.njcn.jbsyncdata.service.impl;
|
||||||
|
|
||||||
|
import com.njcn.jbsyncdata.mapper.PmsPowerDistributionareaMapper;
|
||||||
|
import com.njcn.jbsyncdata.pojo.po.PmsPowerDistributionarea;
|
||||||
|
import com.njcn.jbsyncdata.service.IPmsPowerDistributionareaService;
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* 台区信息 服务实现类
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author wr
|
||||||
|
* @since 2023-11-20
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class PmsPowerDistributionareaServiceImpl extends ServiceImpl<PmsPowerDistributionareaMapper, PmsPowerDistributionarea> implements IPmsPowerDistributionareaService {
|
||||||
|
|
||||||
|
}
|
||||||
264
src/main/java/com/njcn/jbsyncdata/util/AreaDataProcessing.java
Normal file
264
src/main/java/com/njcn/jbsyncdata/util/AreaDataProcessing.java
Normal file
@@ -0,0 +1,264 @@
|
|||||||
|
package com.njcn.jbsyncdata.util;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import cn.hutool.core.date.DatePattern;
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.io.file.FileReader;
|
||||||
|
import cn.hutool.core.io.file.FileWriter;
|
||||||
|
import cn.hutool.core.text.StrPool;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import cn.hutool.json.JSONArray;
|
||||||
|
import cn.hutool.json.JSONObject;
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import com.njcn.influx.utils.InfluxDbUtils;
|
||||||
|
import com.njcn.jbsyncdata.component.TokenComponent;
|
||||||
|
import com.njcn.jbsyncdata.enums.MeasTypeEnum;
|
||||||
|
import com.njcn.jbsyncdata.pojo.InfluxAreaData;
|
||||||
|
import com.njcn.jbsyncdata.pojo.po.PmsPowerDistributionarea;
|
||||||
|
import com.njcn.jbsyncdata.pojo.result.TokenResult;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.collections4.ListUtils;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.influxdb.InfluxDB;
|
||||||
|
import org.influxdb.dto.BatchPoints;
|
||||||
|
import org.influxdb.dto.Point;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.scheduling.annotation.Async;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wr
|
||||||
|
* @description
|
||||||
|
* @date 2023/10/20 14:14
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@Slf4j
|
||||||
|
public class AreaDataProcessing {
|
||||||
|
|
||||||
|
private final InfluxDbUtils influxDbUtils;
|
||||||
|
|
||||||
|
@Async("asyncExecutor")
|
||||||
|
public void asyncInfluxDb(
|
||||||
|
TokenComponent tokenComponent,
|
||||||
|
String date,
|
||||||
|
RestTemplateUtil restTemplateUtil,
|
||||||
|
List<String> typeList,
|
||||||
|
JSONObject jsonObject,
|
||||||
|
JSONObject jsonObjectSub,
|
||||||
|
Map<String, String> headers,
|
||||||
|
List<List<PmsPowerDistributionarea>> singleQueryDataUserId, int k
|
||||||
|
) {
|
||||||
|
TokenResult tokenWithRestTemplate;
|
||||||
|
//将发电用户编号按100尺寸分片
|
||||||
|
List<List<PmsPowerDistributionarea>> partitionList = ListUtils.partition(singleQueryDataUserId.get(k), 100);
|
||||||
|
log.error("总计分了{}片", partitionList.size());
|
||||||
|
int count = 0;
|
||||||
|
tokenWithRestTemplate = tokenComponent.getTokenWithRestTemplate();
|
||||||
|
headers.put("x-token", tokenWithRestTemplate.getAccess_token());
|
||||||
|
//先获取数据
|
||||||
|
List<ResponseEntity<String>> responseEntities = new ArrayList<>(2000);
|
||||||
|
int kk = k + 1;
|
||||||
|
for (List<PmsPowerDistributionarea> generationAreaIDList : partitionList) {
|
||||||
|
count++;
|
||||||
|
log.error("查询第{}大片,{}小片数据", kk, count);
|
||||||
|
//按批次处理用户编号数据
|
||||||
|
List<String> psrIds = generationAreaIDList.stream().map(PmsPowerDistributionarea::getPmsID).collect(Collectors.toList());
|
||||||
|
jsonObjectSub.set("psrIds", psrIds);
|
||||||
|
JSONArray jsonArray = JSONUtil.createArray();
|
||||||
|
jsonArray.add(jsonObjectSub);
|
||||||
|
jsonObject.set("filters", jsonArray);
|
||||||
|
try {
|
||||||
|
responseEntities.add(restTemplateUtil.post(tokenComponent.getUrl().concat("/realMeasCenter/telemetry/commonQuery"), headers, jsonObject, String.class));
|
||||||
|
} catch (Exception exception) {
|
||||||
|
log.error("远程调用接口异常,异常为:" + exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//开始解析数据
|
||||||
|
Set<String> userIdConcatMeasType = new HashSet<>();
|
||||||
|
//将指标+客户编号组合起来匹配返回数据的第一条记录:userId@measType
|
||||||
|
for (String measType : typeList) {
|
||||||
|
userIdConcatMeasType.addAll(singleQueryDataUserId.get(k).stream().map(x->x.getPmsID().concat(StrPool.AT).concat(measType)).collect(Collectors.toSet()));
|
||||||
|
}
|
||||||
|
List</*各值以逗号分隔*/InfluxAreaData> influxData;
|
||||||
|
Map</*表名*/String, List</*各值以逗号分隔*/String>> typeData = new HashMap<>();
|
||||||
|
StringBuilder tempInfluxData;
|
||||||
|
ResponseEntity<String> response;
|
||||||
|
JSONArray statisticsDataList;
|
||||||
|
JSONObject result;
|
||||||
|
JSONObject statisticsData;
|
||||||
|
JSONObject body;
|
||||||
|
JSONArray records;
|
||||||
|
String dataIdentify;
|
||||||
|
JSONObject commonTelemetry;
|
||||||
|
MeasTypeEnum measTypeEnumByMeasType;
|
||||||
|
|
||||||
|
//获取资源id和台区的对应关系
|
||||||
|
Map<String, List<String>> areaMap = singleQueryDataUserId.get(k).stream().collect(Collectors.groupingBy(PmsPowerDistributionarea::getPmsID, Collectors.mapping(PmsPowerDistributionarea::getId, Collectors.toList())));
|
||||||
|
|
||||||
|
for (int i = 0; i < partitionList.size(); i++) {
|
||||||
|
log.error("解析第{}片数据", i);
|
||||||
|
response = responseEntities.get(i);
|
||||||
|
body = JSONUtil.parseObj(response.getBody());
|
||||||
|
|
||||||
|
// String path = "C:\\Users\\web2023\\Desktop\\分布式光伏台区API调用结果\\2.txt";
|
||||||
|
// FileReader fileReader = new FileReader(path);
|
||||||
|
// String jsonStr = fileReader.readString();
|
||||||
|
// body = JSONUtil.parseObj(jsonStr);
|
||||||
|
if (response.getStatusCodeValue() == 200 && body.get("status", String.class).equalsIgnoreCase("000000")) {
|
||||||
|
result = JSONUtil.parseObj(body.get("result", String.class));
|
||||||
|
records = JSONUtil.parseArray(result.get("records", String.class));
|
||||||
|
log.error("查询遥测数据结束,返回数据量:{}", records.size());
|
||||||
|
if (CollectionUtil.isEmpty(records)) {
|
||||||
|
//日志输出:
|
||||||
|
log.error("查询时间:{},无遥测数据;", date);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
//处理各个record的数据,因用户下可能有多个测量点,按指标循环,默认采用第一个匹配上的做数据处理
|
||||||
|
for (Object obj : records) { // 最多循环100*16次
|
||||||
|
commonTelemetry = JSONUtil.parseObj(obj);
|
||||||
|
dataIdentify = commonTelemetry.get("psrId", String.class).concat(StrPool.AT).concat(commonTelemetry.get("measTypeCode", String.class));
|
||||||
|
if (userIdConcatMeasType.contains(dataIdentify)) {
|
||||||
|
//首个包含该标识的数据进行处理
|
||||||
|
measTypeEnumByMeasType = MeasTypeEnum.getMeasTypeEnumByMeasType(commonTelemetry.get("measTypeCode", String.class));
|
||||||
|
//统计数据,经过测试,接口响应json可能不包含该属性
|
||||||
|
statisticsDataList = commonTelemetry.get("telemetryValue", JSONArray.class);
|
||||||
|
if (CollectionUtil.isEmpty(statisticsDataList)) {
|
||||||
|
//添加进有指标但无遥测数据集合
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
influxData = new ArrayList<>();
|
||||||
|
InfluxAreaData influxAreaData;
|
||||||
|
for (Object subObj : statisticsDataList) { // 匹配上进入,循环96次
|
||||||
|
statisticsData = JSONUtil.parseObj(subObj);
|
||||||
|
if(areaMap.containsKey(commonTelemetry.get("psrId", String.class))){
|
||||||
|
List<String> list = areaMap.get(commonTelemetry.get("psrId", String.class));
|
||||||
|
for (String s : list) {
|
||||||
|
tempInfluxData = new StringBuilder();
|
||||||
|
tempInfluxData.append(measTypeEnumByMeasType.getPhaseType())
|
||||||
|
.append(StrPool.COMMA)
|
||||||
|
.append(s)
|
||||||
|
.append(StrPool.COMMA)
|
||||||
|
.append(statisticsData.get("dataTime", String.class))
|
||||||
|
.append(StrPool.COMMA)
|
||||||
|
.append(measTypeEnumByMeasType.getFieldName())
|
||||||
|
.append(StrPool.COMMA)
|
||||||
|
.append(StrUtil.isBlank(statisticsData.get("measValue", String.class)) ? "0" : statisticsData.get("measValue", String.class));
|
||||||
|
influxAreaData=new InfluxAreaData();
|
||||||
|
influxAreaData.setId(s);
|
||||||
|
influxAreaData.setInfluxData(tempInfluxData.toString());
|
||||||
|
|
||||||
|
influxData.add(influxAreaData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//userId@measType@tableName:存在多个指标存储表名一致,避免数据覆盖;
|
||||||
|
Map<String, List<String>> influxLineData = influxData.stream().collect(Collectors.groupingBy(InfluxAreaData::getId,Collectors.mapping(InfluxAreaData::getInfluxData, Collectors.toList())));
|
||||||
|
for (String s : influxLineData.keySet()) {
|
||||||
|
typeData.put(s.concat(StrPool.AT).concat(measTypeEnumByMeasType.getMeasType()).concat(StrPool.AT).concat(measTypeEnumByMeasType.getTableName()),influxLineData.get(s) );
|
||||||
|
}
|
||||||
|
|
||||||
|
//处理完,删除该条记录,减少集合尺寸,提高效率
|
||||||
|
userIdConcatMeasType.remove(dataIdentify);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//没有匹配上的就是该用户没有数据
|
||||||
|
log.error("剩余有{}条标识", userIdConcatMeasType.size());
|
||||||
|
} else {
|
||||||
|
log.error("查询遥测数据失败!第{}片,结果为:{}", count, response);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//最后输出没有数据的资源编号
|
||||||
|
/**
|
||||||
|
* 输出到2个文件,lackData.txt、 excalationData.txt
|
||||||
|
* 注:
|
||||||
|
* 1、所有指标均没有有数据的资源编号
|
||||||
|
* 2、部分指标没有数据的资源编号,并表明是哪些指标
|
||||||
|
*/
|
||||||
|
if (CollectionUtil.isNotEmpty(userIdConcatMeasType)) {
|
||||||
|
Map<String, List<String>> finalMap = userIdConcatMeasType.stream().collect(Collectors.groupingBy(str ->
|
||||||
|
str.substring(0, str.indexOf(StrPool.AT))
|
||||||
|
));
|
||||||
|
//全部缺失数据的用户
|
||||||
|
List<String> lackData = new ArrayList<>();
|
||||||
|
//部分缺失的用户及指标
|
||||||
|
List<String> excalationData = new ArrayList<>();
|
||||||
|
Set<String> keyedSet = finalMap.keySet();
|
||||||
|
for (String key : keyedSet) {
|
||||||
|
List<String> data = finalMap.get(key);
|
||||||
|
if (data.size() == typeList.size()) {
|
||||||
|
lackData.add(key);
|
||||||
|
} else {
|
||||||
|
data = data.stream().map(t -> t.substring(t.indexOf(StrPool.AT) + 1)).collect(Collectors.toList());
|
||||||
|
key = key.concat(StrPool.COMMA).concat(StringUtils.join(data, StrPool.AT));
|
||||||
|
excalationData.add(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FileWriter lackDataWriter = FileWriter.create(new File("/usr/local/syncData/lackData" + date + k + ".txt"));
|
||||||
|
lackDataWriter.writeLines(lackData);
|
||||||
|
FileWriter excalationDataWriter = FileWriter.create(new File("/usr/local/syncData/excalationData" + date + k + ".txt"));
|
||||||
|
excalationDataWriter.writeLines(excalationData);
|
||||||
|
}
|
||||||
|
log.error("用户有指标没有数据的长度为:{}", userIdConcatMeasType.size());
|
||||||
|
//最后批量入库
|
||||||
|
batchInsertData(typeData);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量入库influxDB
|
||||||
|
*
|
||||||
|
* @param typeData 远程根据用户编号获取的数据 Map</表名/String, List<Map</属性名/String,/数值/String>>> typeData = new HashMap<>();
|
||||||
|
*/
|
||||||
|
private void batchInsertData(Map<String, List<String>> typeData) {
|
||||||
|
log.error("总计有{}条记录入库,以20000作为基数分片插入influxdb", typeData.size());
|
||||||
|
List<String> sqlList = new ArrayList<>();
|
||||||
|
Set<String> tableNames = typeData.keySet();
|
||||||
|
String[] datas;
|
||||||
|
Map<String, String> tags;
|
||||||
|
Map<String, Object> fields;
|
||||||
|
Point point;
|
||||||
|
BatchPoints batchPoints;
|
||||||
|
for (String tableName : tableNames) {
|
||||||
|
List<String> data = typeData.get(tableName);
|
||||||
|
tableName = tableName.substring(tableName.lastIndexOf(StrPool.AT) + 1);
|
||||||
|
for (String datum : data) {
|
||||||
|
datas = datum.split(StrPool.COMMA);
|
||||||
|
//tag数据
|
||||||
|
tags = new HashMap<>();
|
||||||
|
tags.put("phasic_type", datas[0]);
|
||||||
|
tags.put("line_id", datas[1]);
|
||||||
|
tags.put("quality_flag", "0");
|
||||||
|
tags.put("value_type", "AVG");
|
||||||
|
String time = datas[2];
|
||||||
|
//tag数据删完后,剩余均是filed数据,因filed属性名不固定,无法指定获取,直接循环
|
||||||
|
fields = new HashMap<>();
|
||||||
|
fields.put(datas[3], datas[4]);
|
||||||
|
point = influxDbUtils.pointBuilder(tableName, DateUtil.parse(time, DatePattern.NORM_DATETIME_FORMATTER).getTime(), TimeUnit.MILLISECONDS, tags, fields);
|
||||||
|
batchPoints = BatchPoints.database(influxDbUtils.getDbName()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build();
|
||||||
|
batchPoints.point(point);
|
||||||
|
sqlList.add(batchPoints.lineProtocol());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List<List<String>> subSqlList = ListUtils.partition(sqlList, 20000);
|
||||||
|
int count = 1;
|
||||||
|
for (List<String> sql : subSqlList) {
|
||||||
|
try {
|
||||||
|
influxDbUtils.batchInsert(influxDbUtils.getDbName(), "autogen", InfluxDB.ConsistencyLevel.ALL, TimeUnit.MILLISECONDS, sql);
|
||||||
|
} catch (Exception exception) {
|
||||||
|
log.error("数据批量入库异常,异常为:{}",exception.toString());
|
||||||
|
exception.printStackTrace();
|
||||||
|
}
|
||||||
|
log.error("已经入库{}条记录!", count * 20000);
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
log.error("当前批次所有数据,{}条均已入库!", sqlList.size());
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user