海南初始版本提交

This commit is contained in:
hzj
2024-03-06 17:04:08 +08:00
parent 34b76fe7ff
commit 4ed75512fb
66 changed files with 7663 additions and 33 deletions

View File

@@ -30,7 +30,9 @@ public enum AdvanceResponseEnum {
RESPONSIBILITY_PARAMETER_ERROR("A0101","调用接口程序计算失败,参数非法"), RESPONSIBILITY_PARAMETER_ERROR("A0101","调用接口程序计算失败,参数非法"),
EVENT_EMPTY("A0102","没有查询到未分析事件") EVENT_EMPTY("A0102","没有查询到未分析事件"),
USER_NAME_EXIST("A0103","用户名已存在"),
DATA_NOT_FOUND("A0104","数据缺失,请根据模版上传近两周数据"),
; ;
private final String code; private final String code;

View File

@@ -0,0 +1,111 @@
package com.njcn.advance.enums;
import lombok.Getter;
/**
* @Description: 承载能力评估相关枚举
* @Param:
* @return:
* @Author: clam
* @Date: 2024/1/31
*/
@Getter
public enum CarryingCapacityEnum {
K("K","0.8","海南日照修正系数"),
/**
* h 3 ,5 ,7 ,9 ,11 ,13或者偶次
* k_h 1.62, ,1.28 ,0.72 ,0.18 ,0.08 ,0
*/
K_H_2("K_H_2","0.00","2次谐波电流K_2系数"),
K_H_3("K_H_3","1.62","3次谐波电流K_3系数"),
K_H_4("K_H_4","0.00","4次谐波电流K_4系数"),
K_H_5("K_H_5","1.28","5次谐波电流K_5系数"),
K_H_6("K_H_6","0.00","6次谐波电流K_6系数"),
K_H_7("K_H_7","0.72","7次谐波电流K_7系数"),
K_H_8("K_H_8","0.00","8次谐波电流K_8系数"),
K_H_9("K_H_9","0.18","9次谐波电流K_9系数"),
K_H_10("K_H_10","0.00","10次谐波电流K_10系数"),
K_H_11("K_H_11","0.08","11次谐波电流K_11系数"),
K_H_12("K_H_12","0.00","12次谐波电流K_12系数"),
K_H_13("K_H_13","0.00","13次谐波电流K_13系数"),
K_H_14("K_H_14","0.00","14次谐波电流K_14系数"),
K_H_15("K_H_15","0.00","15次谐波电流K_15系数"),
K_H_16("K_H_16","0.00","16次谐波电流K_16系数"),
K_H_17("K_H_17","0.00","17次谐波电流K_17系数"),
K_H_18("K_H_18","0.00","18次谐波电流K_18系数"),
K_H_19("K_H_19","0.00","19次谐波电流K_19系数"),
K_H_20("K_H_20","0.00","20次谐波电流K_20系数"),
K_H_21("K_H_21","0.00","21次谐波电流K_21系数"),
K_H_22("K_H_22","0.00","22次谐波电流K_22系数"),
K_H_23("K_H_23","0.00","23次谐波电流K_23系数"),
K_H_24("K_H_24","0.00","24次谐波电流K_24系数"),
K_H_25("K_H_25","0.00","25次谐波电流K_25系数"),
//光伏逆变器第h次的典型谐波电流含有率:I_INV_H
I_INV_2("I_INV_2","0.254","2次典型谐波电流含有率"),
I_INV_3("I_INV_3","0.121","3次典型谐波电流含有率"),
I_INV_4("I_INV_4","0.087","4次典型谐波电流含有率"),
I_INV_5("I_INV_5","2.446","5次典型谐波电流含有率"),
I_INV_6("I_INV_6","0.024","6次典型谐波电流含有率"),
I_INV_7("I_INV_7","1.629","7次典型谐波电流含有率"),
I_INV_8("I_INV_8","0.042","8次典型谐波电流含有率"),
I_INV_9("I_INV_9","0.039","9次典型谐波电流含有率"),
I_INV_10("I_INV_10","0.037","10次典型谐波电流含有率"),
I_INV_11("I_INV_11","0.439","11次典型谐波电流含有率"),
I_INV_12("I_INV_12","0.021","12次典型谐波电流含有率"),
I_INV_13("I_INV_13","0.379","13次典型谐波电流含有率"),
I_INV_14("I_INV_14","0.042","14次典型谐波电流含有率"),
I_INV_15("I_INV_15","0.037","15次典型谐波电流含有率"),
I_INV_16("I_INV_16","0.043","16次典型谐波电流含有率"),
I_INV_17("I_INV_17","0.263","17次典型谐波电流含有率"),
I_INV_18("I_INV_18","0.017","18次典型谐波电流含有率"),
I_INV_19("I_INV_19","0.197","19次典型谐波电流含有率"),
I_INV_20("I_INV_20","0.062","20次典型谐波电流含有率"),
I_INV_21("I_INV_21","0.024","21次典型谐波电流含有率"),
I_INV_22("I_INV_22","0.032","22次典型谐波电流含有率"),
I_INV_23("I_INV_23","0.304","23次典型谐波电流含有率"),
I_INV_24("I_INV_24","0.03","24次典型谐波电流含有率"),
I_INV_25("I_INV_25","0.176","25次典型谐波电流含有率"),
I_INV_26("I_INV_26","0.032","26次典型谐波电流含有率"),
I_INV_27("I_INV_27","0.038","27次典型谐波电流含有率"),
I_INV_28("I_INV_28","0.031","28次典型谐波电流含有率"),
I_INV_29("I_INV_29","0.158","29次典型谐波电流含有率"),
I_INV_30("I_INV_30","0.024","30次典型谐波电流含有率"),
I_INV_31("I_INV_31","0.028","31次典型谐波电流含有率"),
I_INV_32("I_INV_32","0.026","32次典型谐波电流含有率"),
I_INV_33("I_INV_33","0.033","33次典型谐波电流含有率"),
I_INV_34("I_INV_34","0.018","34次典型谐波电流含有率"),
I_INV_35("I_INV_35","0.072","35次典型谐波电流含有率");
/**
* 字段code
*/
private final String Code;
/**
* 字段值
*/
private final String value;
/**
* 字段描述
*/
private final String description;
CarryingCapacityEnum(String code, String value, String description) {
Code = code;
this.value = value;
this.description = description;
}
public static String getValueByCode(String code) {
for (CarryingCapacityEnum item : CarryingCapacityEnum.values()) {
if (item.Code.equals(code)) {
return item.value;
}
}
return null;
}
}

View File

@@ -0,0 +1,134 @@
package com.njcn.advance.pojo.carrycapacity.excel;
import cn.afterturn.easypoi.excel.annotation.Excel;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.njcn.influx.utils.InstantDateSerializer;
import lombok.Data;
import org.influxdb.annotation.Column;
import java.time.Instant;
/**
* 类的介绍:
*
* @author xuyang
* @version 1.0.0
* @createTime 2022/5/12 9:13
*/
@Data
public class CarryCapcityDataIEexcel {
@Column(name = "time")
@JsonSerialize(using = InstantDateSerializer.class)
@Excel(name = "时间",width = 30)
private Instant time;
@Column(name = "line_id")
@Excel(name = "监测点id",width = 30)
private String lineId;
@Column(name = "phasic_type")
@Excel(name = "项别",width = 30)
private String phaseType;
@Column(name = "value_type")
@Excel(name = "数据类型",width = 30)
private String valueType;
@Column(name = "i_2")
@Excel(name = "2次谐波幅值)",width = 30)
private Double i2;
@Column(name = "i_3")
@Excel(name = "3次谐波幅值)",width = 30)
private Double i3;
@Column(name = "i_4")
@Excel(name = "4次谐波幅值)",width = 30)
private Double i4;
@Column(name = "i_5")
@Excel(name = "5次谐波幅值)",width = 30)
private Double i5;
@Column(name = "i_6")
@Excel(name = "6次谐波幅值)",width = 30)
private Double i6;
@Column(name = "i_7")
@Excel(name = "7次谐波幅值)",width = 30)
private Double i7;
@Column(name = "i_8")
@Excel(name = "8次谐波幅值)",width = 30)
private Double i8;
@Column(name = "i_9")
@Excel(name = "9次谐波幅值)",width = 30)
private Double i9;
@Column(name = "i_10")
@Excel(name = "10次谐波幅值)",width = 30)
private Double i10;
@Column(name = "i_11")
@Excel(name = "11次谐波幅值)",width = 30)
private Double i11;
@Column(name = "i_12")
@Excel(name = "12次谐波幅值)",width = 30)
private Double i12;
@Column(name = "i_13")
@Excel(name = "13次谐波幅值)",width = 30)
private Double i13;
@Column(name = "i_14")
@Excel(name = "14次谐波幅值)",width = 30)
private Double i14;
@Column(name = "i_15")
@Excel(name = "15次谐波幅值)",width = 30)
private Double i15;
@Column(name = "i_16")
@Excel(name = "16次谐波幅值)",width = 30)
private Double i16;
@Column(name = "i_17")
@Excel(name = "17次谐波幅值)",width = 30)
private Double i17;
@Column(name = "i_18")
@Excel(name = "18次谐波幅值)",width = 30)
private Double i18;
@Column(name = "i_19")
@Excel(name = "19次谐波幅值)",width = 30)
private Double i19;
@Column(name = "i_20")
@Excel(name = "20次谐波幅值)",width = 30)
private Double i20;
@Column(name = "i_21")
@Excel(name = "21次谐波幅值)",width = 30)
private Double i21;
@Column(name = "i_22")
@Excel(name = "22次谐波幅值)",width = 30)
private Double i22;
@Column(name = "i_23")
@Excel(name = "23次谐波幅值)",width = 30)
private Double i23;
@Column(name = "i_24")
@Excel(name = "24次谐波幅值)",width = 30)
private Double i24;
@Column(name = "i_25")
@Excel(name = "25次谐波幅值)",width = 30)
private Double i25;
}

View File

@@ -0,0 +1,41 @@
package com.njcn.advance.pojo.carrycapacity.excel;
import cn.afterturn.easypoi.excel.annotation.Excel;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.njcn.influx.utils.InstantDateSerializer;
import lombok.Data;
import org.influxdb.annotation.Column;
import java.time.Instant;
/**
* 类的介绍:
*
* @author xuyang
* @version 1.0.0
* @createTime 2022/5/12 9:13
*/
@Data
public class CarryCapcityDataPEexcel {
@Column(name = "time")
@JsonSerialize(using = InstantDateSerializer.class)
@Excel(name = "时间",width = 30)
private Instant time;
@Column(name = "line_id")
@Excel(name = "监测点id",width = 30)
private String lineId;
@Column(name = "phasic_type")
@Excel(name = "项别",width = 30)
private String phaseType;
@Column(name = "value_type")
@Excel(name = "数据类型",width = 30)
private String valueType;
@Excel(name = "数据(有功功率)",width = 30)
private Double value;
}

View File

@@ -0,0 +1,41 @@
package com.njcn.advance.pojo.carrycapacity.excel;
import cn.afterturn.easypoi.excel.annotation.Excel;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.njcn.influx.utils.InstantDateSerializer;
import lombok.Data;
import org.influxdb.annotation.Column;
import java.time.Instant;
/**
* 类的介绍:
*
* @author xuyang
* @version 1.0.0
* @createTime 2022/5/12 9:13
*/
@Data
public class CarryCapcityDataQEexcel {
@Column(name = "time")
@JsonSerialize(using = InstantDateSerializer.class)
@Excel(name = "时间",width = 30)
private Instant time;
@Column(name = "line_id")
@Excel(name = "监测点id",width = 30)
private String lineId;
@Column(name = "phasic_type")
@Excel(name = "项别",width = 30)
private String phaseType;
@Column(name = "value_type")
@Excel(name = "数据类型",width = 30)
private String valueType;
@Excel(name = "数据(无功功率)",width = 30)
private Double value;
}

View File

@@ -0,0 +1,41 @@
package com.njcn.advance.pojo.carrycapacity.excel;
import cn.afterturn.easypoi.excel.annotation.Excel;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.njcn.influx.utils.InstantDateSerializer;
import lombok.Data;
import org.influxdb.annotation.Column;
import java.time.Instant;
/**
* 类的介绍:
*
* @author xuyang
* @version 1.0.0
* @createTime 2022/5/12 9:13
*/
@Data
public class CarryCapcityDataVEexcel {
@Column(name = "time")
@JsonSerialize(using = InstantDateSerializer.class)
@Excel(name = "时间",width = 30)
private Instant time;
@Column(name = "line_id")
@Excel(name = "监测点id",width = 30)
private String lineId;
@Column(name = "phasic_type")
@Excel(name = "项别",width = 30)
private String phaseType;
@Column(name = "value_type")
@Excel(name = "数据类型",width = 30)
private String valueType;
@Excel(name = "数据(电压)",width = 30)
private Double value;
}

View File

@@ -0,0 +1,47 @@
package com.njcn.advance.pojo.carrycapacity.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import java.util.List;
import java.util.Map;
/**
*
* Description:
* Date: 2024/2/20 11:15【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CarryCapacityCalParam {
@NotBlank(message = "参数不能为空")
@ApiModelProperty("监测点索引")
private String lineId;
@ApiModelProperty("用户Id")
private String userId;
@ApiModelProperty(name = "scale",value = "电压等级")
private String scale;
@ApiModelProperty(name = "S_T",value = "S_T为配变额定容量监测点基准容量")
private Double S_T;
@ApiModelProperty(name = "S_pv",value = "S_pv为拟接入光伏容量")
private Double S_pv;
@ApiModelProperty(name = "stringMap",value = "首端电流模型参数A,B,C三项")
private Map<String, Double[]> stringMap;
@ApiModelProperty(name = "P_βminMap",value = "有功功率最小CP95值A,B,C三项")
private Map<String, Double> P_βminMap;
@ApiModelProperty(name = "Q_βminMap",value = "无功功率最小CP95值A,B,C三项")
private Map<String, Double> Q_βminMap;
@ApiModelProperty(name = "I_βmax",value = "2-25次谐波幅值最大95概率值A,B,C三项中的最大值")
private List<Double> I_βmax;
}

View File

@@ -0,0 +1,45 @@
package com.njcn.advance.pojo.carrycapacity.param;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import java.time.LocalDate;
/**
*
* Description:
* Date: 2024/2/20 11:15【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CarryCapacityQueryDataParam {
@NotBlank(message = "监测点索引为空")
@ApiModelProperty("监测点索引")
private String lineId;
@ApiModelProperty("用户Id")
@NotBlank(message = "用户ID为空")
private String userId;
@ApiModelProperty("开始时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")
private LocalDate startTime;
@ApiModelProperty("结束时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd")
private LocalDate endTime;
@Min(2)
@Max(25)
@ApiModelProperty("谐波次数")
private Integer time=2;
}

View File

@@ -0,0 +1,51 @@
package com.njcn.advance.pojo.carrycapacity.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* Description:
* Date: 2024/3/5 10:47【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CarryCapacityStrategyParam {
/**
* 总承载能力评估结果1-安全2-III级预警3-II级预警4-I 级预警)
*/
@ApiModelProperty(value = "总承载能力评估结果1-安全2-III级预警3-II级预警4-I 级预警)")
@NotNull(message = "总承载能力评估结果不能为空")
private Integer result;
/**
* 指标评估结果1-安全2-III级预警3-II级预警4-I 级预警)
*/
@ApiModelProperty(value = "指标评估结果1-安全2-III级预警3-II级预警4-I 级预警)")
@NotNull(message = "指标评估结果不能为空")
private Integer indexResult;
/**
* 比较符
*/
@ApiModelProperty(value = "比较符")
@NotBlank(message = "比较符不能为空")
private String comparisonOperators;
/**
* 数量
*/
@ApiModelProperty(value = "数量")
@NotNull(message = "数量不能为空")
private Integer count;
}

View File

@@ -0,0 +1,100 @@
package com.njcn.advance.pojo.carrycapacity.param;
import com.njcn.common.pojo.constant.PatternRegex;
import com.njcn.web.constant.ValidMessage;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
/**
*
* Description:
* Date: 2024/2/20 11:15【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CarryCapacityUserParam {
/**
* 用户名称
*/
private String userName;
/**
* 用户类型
*/
private String userType;
/**
* 电压等级(V)
*/
private String voltage;
/**
* 用户协议容量(MVA)
*/
private Double protocolCapacity;
/**
* 省
*/
private String province;
/**
* 市
*/
private String city;
/**
* 区
*/
private String region;
/**
* 所属区域
*/
private String area;
/**
* 更新操作实体
*/
@Data
@EqualsAndHashCode(callSuper = true)
public static class CarryCapacityUserUpdateParam extends CarryCapacityUserParam {
@ApiModelProperty("用户Id")
@NotBlank(message = "用户Id不能为空")
@Pattern(regexp = PatternRegex.SYSTEM_ID, message = ValidMessage.ID_FORMAT_ERROR)
private String userId;
}
@Data
@EqualsAndHashCode(callSuper = true)
public static class CarryCapacityUserPageParam extends CarryCapacityUserParam {
private String userId;
@NotNull(message="当前页不能为空!")
@Min(value = 1, message = "当前页不能为0")
@ApiModelProperty(value = "当前页",name = "pageNum",dataType ="Integer",required = true)
private Integer pageNum;
/**显示条数*/
@NotNull(message="显示条数不能为空!")
@ApiModelProperty(value = "显示条数",name = "pageSize",dataType ="Integer",required = true)
private Integer pageSize;
@ApiModelProperty(value="起始时间")
private String startTime;
@ApiModelProperty(value="结束时间")
private String endTime;
}
}

View File

@@ -0,0 +1,49 @@
package com.njcn.advance.pojo.carrycapacity.po;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
import com.njcn.db.bo.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.time.LocalDate;
/**
*
* Description:
* Date: 2024/3/6 14:45【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
@AllArgsConstructor
@TableName(value = "carry_capacity_data")
public class CarryCapacityDataPO extends BaseEntity{
/**
* 台区id
*/
@MppMultiId(value = "line_id")
private String lineId;
/**
* 开始时间
*/
@MppMultiId(value = "start_time")
private LocalDate startTime;
/**
* 结束时间
*/
@MppMultiId(value = "end_time")
private LocalDate endTime;
/**
* 上传数据集地址
*/
@TableField(value = "date_list")
private String dateList;
}

View File

@@ -0,0 +1,89 @@
package com.njcn.advance.pojo.carrycapacity.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.time.LocalDate;
import java.time.LocalDateTime;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
*
* Description:
* Date: 2024/3/1 15:38【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
@AllArgsConstructor
@TableName(value = "carry_capacity_result")
public class CarryCapacityResultPO {
/**
* 承载能力评估id
*/
@TableId(value = "id", type = IdType.INPUT)
private String id;
/**
* 配变首端电压等级1-安全2-III级预警3-II级预警4-I 级预警)
*/
@TableField(value = "u_t_level")
private Integer uTLevel;
/**
* 配变的功率因等级1-安全2-III级预警3-II级预警4-I 级预警)
*/
@TableField(value = "pf_t_level")
private Integer pfTLevel;
/**
* 等效负载率最小值等级1-安全2-III级预警3-II级预警4-I 级预警)
*/
@TableField(value = "b_t_level")
private Integer bTLevel;
/**
* 各次谐波电流幅值等级 1-安全2-III级预警3-II级预警4-I 级预警)
*/
@TableField(value = "i_level")
private Integer iLevel;
/**
* 总结果等级1-安全2-III级预警3-II级预警4-I 级预警)
*/
@TableField(value = "reslut_level")
private Integer reslutLevel;
/**
* 评估日期
*/
@TableField(value = "evaluate_date")
private LocalDate evaluateDate;
/**
* 创建用户
*/
@TableField(value = "create_by")
private String createBy;
/**
* 创建时间
*/
@TableField(value = "create_time")
private LocalDateTime createTime;
/**
* 更新用户
*/
@TableField(value = "update_by")
private String updateBy;
/**
* 更新时间
*/
@TableField(value = "update_time")
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,82 @@
package com.njcn.advance.pojo.carrycapacity.po;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
/**
* Description:
* Date: 2024/3/5 10:54【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "carry_capacity_strategy")
public class CarryCapacityStrategyPO {
/**
* 总承载能力评估结果1-安全2-III级预警3-II级预警4-I 级预警)
*/
@TableField(value = "`result`")
private Integer result;
/**
* 指标评估结果1-安全2-III级预警3-II级预警4-I 级预警)
*/
@TableField(value = "index_result")
private Integer indexResult;
/**
* 比较符
*/
@TableField(value = "comparison_operators")
private String comparisonOperators;
/**
* 数量
*/
@TableField(value = "`count`")
private Integer count;
/**
* 初始配置1客户配置2
*/
@TableField(value = "proto_flag")
private Integer protoFlag;
/**
* 启用配置1不启用配置2
*/
@TableField(value = "user_flag")
private Integer userFlag;
/**
* 创建用户
*/
@TableField(value = "create_by")
private String createBy;
/**
* 创建时间
*/
@TableField(value = "create_time")
private LocalDateTime createTime;
/**
* 更新用户
*/
@TableField(value = "update_by")
private String updateBy;
/**
* 更新时间
*/
@TableField(value = "update_time")
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,80 @@
package com.njcn.advance.pojo.carrycapacity.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.njcn.db.bo.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
* Description:
* Date: 2024/2/20 11:15【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "carry_capacity_user")
public class CarryCapacityUserPO extends BaseEntity {
/**
* 用户id
*/
@TableId(value = "user_id", type = IdType.ASSIGN_UUID)
private String userId;
/**
* 用户名称
*/
@TableField(value = "user_name")
private String userName;
/**
* 用户类型
*/
@TableField(value = "user_type")
private String userType;
/**
* 电压等级(V)
*/
@TableField(value = "voltage")
private String voltage;
/**
* 用户协议容量(MVA)
*/
@TableField(value = "protocol_capacity")
private Double protocolCapacity;
/**
* 省
*/
@TableField(value = "province")
private String province;
/**
* 市
*/
@TableField(value = "city")
private String city;
/**
* 区
*/
@TableField(value = "region")
private String region;
/**
* 所属区域
*/
@TableField(value = "area")
private String area;
}

View File

@@ -0,0 +1,37 @@
package com.njcn.advance.pojo.carrycapacity.vo;
import lombok.Data;
/**
* Description:
* Date: 2024/2/27 11:24【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
public class CarryCapacityDResultVO {
private Integer uTLevel;
/**
* 配变的功率因等级1-安全2-III级预警3-II级预警4-I 级预警)
*/
private Integer pfTLevel;
/**
* 等效负载率最小值等级1-安全2-III级预警3-II级预警4-I 级预警)
*/
private Integer bTLevel;
/**
* 各次谐波电流幅值等级 1-安全2-III级预警3-II级预警4-I 级预警)
*/
private Integer iLevel;
/**
* 总结果等级1-安全2-III级预警3-II级预警4-I 级预警)
*/
private Integer reslutLevel;
}

View File

@@ -0,0 +1,25 @@
package com.njcn.advance.pojo.carrycapacity.vo;
import com.njcn.influx.pojo.bo.CarryCapcityData;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* Description:
* Date: 2024/2/27 11:24【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
public class CarryCapacityDataIVO {
@ApiModelProperty(name = "data",value = "谐波幅值数据")
private List<CarryCapcityData> data;
@ApiModelProperty(name = "I_βmax",value = "2-25次谐波幅值最大95概率值A,B,C三项中的最大值")
private List<Double> I_βmax;
}

View File

@@ -0,0 +1,26 @@
package com.njcn.advance.pojo.carrycapacity.vo;
import com.njcn.influx.pojo.bo.CarryCapcityData;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
* Description:
* Date: 2024/2/27 11:24【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
public class CarryCapacityDataQVO {
@ApiModelProperty(name = "data",value = "有功功率数据")
private List<CarryCapcityData> data;
@ApiModelProperty(name = "Q_βminMap",value = "无功功率最小CP95值A,B,C三项")
private Map<String, Double> Q_βminMap;
}

View File

@@ -0,0 +1,37 @@
package com.njcn.advance.pojo.carrycapacity.vo;
import com.njcn.influx.pojo.bo.CarryCapcityData;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
* Description:
* Date: 2024/2/27 11:24【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
public class CarryCapacityDataVO {
@ApiModelProperty(name = "data",value = "有功功率数据")
private List<CarryCapcityData> data;
@ApiModelProperty(name = "stringMap",value = "首端电流模型参数A,B,C三项")
private Map<String, Double[]> stringMap;
@ApiModelProperty(name = "P_βminMap",value = "有功功率最小CP95值A,B,C三项")
private Map<String, Double> P_βminMap;
@ApiModelProperty(name = "scale",value = "电压等级")
private String scale;
@ApiModelProperty(name = "devCapacity",value = "基准容量/额定容量MVA")
private Double standardCapacity;
/**
* 用户协议容量(MVA)
*/
@ApiModelProperty(name = "dealCapacity",value = "用户协议容量MVA")
private Double protocolCapacity;
}

View File

@@ -0,0 +1,40 @@
package com.njcn.advance.pojo.carrycapacity.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* Description:
* Date: 2024/3/5 10:47【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
public class CarryCapacityStrategyVO {
/**
* 总承载能力评估结果1-安全2-III级预警3-II级预警4-I 级预警)
*/
@ApiModelProperty(value = "总承载能力评估结果1-安全2-III级预警3-II级预警4-I 级预警)")
private Integer result;
/**
* 指标评估结果1-安全2-III级预警3-II级预警4-I 级预警)
*/
@ApiModelProperty(value = "指标评估结果1-安全2-III级预警3-II级预警4-I 级预警)")
private Integer indexResult;
/**
* 比较符
*/
@ApiModelProperty(value = "比较符")
private String comparisonOperators;
/**
* 数量
*/
@ApiModelProperty(value = "数量")
private Integer count;
}

View File

@@ -0,0 +1,53 @@
package com.njcn.advance.pojo.carrycapacity.vo;
import com.njcn.db.bo.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
* Description:
* Date: 2024/2/20 11:15【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CarryCapacityUserVO extends BaseEntity {
/**
* 用户id
*/
private String userId;
/**
* 用户名称
*/
private String userName;
/**
* 用户类型
*/
private String userType;
/**
* 电压等级(V)
*/
private String voltage;
/**
* 用户协议容量(MVA)
*/
private Double protocolCapacity;
/**
* 所属区域
*/
private String area;
}

View File

@@ -57,7 +57,11 @@
<artifactId>event-api</artifactId> <artifactId>event-api</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
<dependency>
<groupId>com.njcn</groupId>
<artifactId>pqs-influx</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies> </dependencies>

View File

@@ -0,0 +1,157 @@
package com.njcn.advance.controller.carrycapacity;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import com.alibaba.nacos.shaded.com.google.common.collect.Maps;
import com.njcn.advance.pojo.carrycapacity.excel.CarryCapcityDataIEexcel;
import com.njcn.advance.pojo.carrycapacity.excel.CarryCapcityDataPEexcel;
import com.njcn.advance.pojo.carrycapacity.excel.CarryCapcityDataQEexcel;
import com.njcn.advance.pojo.carrycapacity.excel.CarryCapcityDataVEexcel;
import com.njcn.advance.pojo.carrycapacity.param.CarryCapacityCalParam;
import com.njcn.advance.pojo.carrycapacity.param.CarryCapacityQueryDataParam;
import com.njcn.advance.pojo.carrycapacity.vo.CarryCapacityDResultVO;
import com.njcn.advance.pojo.carrycapacity.vo.CarryCapacityDataIVO;
import com.njcn.advance.pojo.carrycapacity.vo.CarryCapacityDataQVO;
import com.njcn.advance.pojo.carrycapacity.vo.CarryCapacityDataVO;
import com.njcn.advance.service.carrycapacity.CarryCapcityService;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.device.pq.pojo.vo.TerminalTree;
import com.njcn.poi.util.PoiUtil;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.apache.commons.compress.utils.Lists;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @author hongawen
* @version 1.0.0
* @date 2023年07月21日 10:06
*/
@RestController
@RequestMapping("carrycapacity")
@Api(tags = "承载能力评估")
@RequiredArgsConstructor
public class CarryCapacityController extends BaseController {
private final CarryCapcityService carryCapcityService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/queryCarryCapacityData")
@ApiOperation("承载能力评估数据查询-主页面")
@ApiImplicitParam(name = "queryParam", value = "查询参数", required = true)
public HttpResult<CarryCapacityDataVO> queryCarryCapacityData(@RequestBody @Validated CarryCapacityQueryDataParam queryParam) {
String methodDescribe = getMethodDescribe("queryCarryCapacityData");
CarryCapacityDataVO carryCapacityDataVO = carryCapcityService.queryCarryCapacityData(queryParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, carryCapacityDataVO, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/queryCarryCapacityQData")
@ApiOperation("承载能力评估数据查询-无功功率")
@ApiImplicitParam(name = "queryParam", value = "查询参数", required = true)
public HttpResult<CarryCapacityDataQVO> queryCarryCapacityQData(@RequestBody @Validated CarryCapacityQueryDataParam queryParam) {
String methodDescribe = getMethodDescribe("queryCarryCapacityQData");
CarryCapacityDataQVO carryCapacityDataQVO = carryCapcityService.queryCarryCapacityQData(queryParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, carryCapacityDataQVO, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/queryCarryCapacityIData")
@ApiOperation("承载能力评估数据查询-谐波电流幅值")
@ApiImplicitParam(name = "queryParam", value = "查询参数", required = true)
public HttpResult<CarryCapacityDataIVO> queryCarryCapacityIData(@RequestBody @Validated CarryCapacityQueryDataParam queryParam) {
String methodDescribe = getMethodDescribe("queryCarryCapacityIData");
CarryCapacityDataIVO carryCapacityDataIVO = carryCapcityService.queryCarryCapacityIData(queryParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, carryCapacityDataIVO, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/carryCapacityCal")
@ApiOperation("承载能力评估")
@ApiImplicitParam(name = "calParam", value = "计算参数", required = true)
public HttpResult<CarryCapacityDResultVO> carryCapacityCal(@RequestBody @Validated CarryCapacityCalParam calParam) {
String methodDescribe = getMethodDescribe("carryCapacityCal");
CarryCapacityDResultVO carryCapacityDResultVO = carryCapcityService.carryCapacityCal(calParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, carryCapacityDResultVO, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@GetMapping("/carryCapacityTree")
@ApiOperation("承载能力评估-台账树")
public HttpResult<List<TerminalTree>> carryCapacityTree() {
String methodDescribe = getMethodDescribe("carryCapacityTree");
List<TerminalTree> terminalTree = carryCapcityService.carryCapacityTree();
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, terminalTree, methodDescribe);
}
@ResponseBody
@ApiOperation("导出设备模板")
@GetMapping(value = "getExcelTemplate")
public HttpResult<String> getExcelTemplate(HttpServletResponse response) {
final List<Map<String, Object>> sheetsList = Lists.newArrayList();
Map<String, Object> exportMap = Maps.newHashMap();
final ExportParams exportParams = new ExportParams(null, "电流幅值", ExcelType.HSSF);
// 以下3个参数为API中写死的参数名 分别是sheet配置/导出类(注解定义)/数据集
exportMap.put("title", exportParams);
exportMap.put("entity", CarryCapcityDataIEexcel.class);
exportMap.put("data", new ArrayList<>());
// 加入多sheet配置列表
sheetsList.add(exportMap);
Map<String, Object> exportMap2 = Maps.newHashMap();
final ExportParams exportParams2 = new ExportParams(null, "电压", ExcelType.HSSF);
// 以下3个参数为API中写死的参数名 分别是sheet配置/导出类(注解定义)/数据集
exportMap2.put("title", exportParams2);
exportMap2.put("entity", CarryCapcityDataVEexcel.class);
exportMap2.put("data", new ArrayList<>());
// 加入多sheet配置列表
sheetsList.add(exportMap2);
Map<String, Object> exportMap3 = Maps.newHashMap();
final ExportParams exportParams3 = new ExportParams(null, "有功功率", ExcelType.HSSF);
// 以下3个参数为API中写死的参数名 分别是sheet配置/导出类(注解定义)/数据集
exportMap3.put("title", exportParams3);
exportMap3.put("entity", CarryCapcityDataPEexcel.class);
exportMap3.put("data", new ArrayList<>());
// 加入多sheet配置列表
sheetsList.add(exportMap3);
Map<String, Object> exportMap4 = Maps.newHashMap();
final ExportParams exportParams4 = new ExportParams(null, "无功功率", ExcelType.HSSF);
// 以下3个参数为API中写死的参数名 分别是sheet配置/导出类(注解定义)/数据集
exportMap4.put("title", exportParams4);
exportMap4.put("entity", CarryCapcityDataQEexcel.class);
exportMap4.put("data", new ArrayList<>());
// 加入多sheet配置列表
sheetsList.add(exportMap4);
Workbook workbook = ExcelExportUtil.exportExcel(sheetsList, ExcelType.HSSF);
String fileName = "数据集.xls";
ExportParams exportExcel = new ExportParams("数据集", "数据集");
PoiUtil.exportFileByWorkbook(workbook, fileName, response);
return null;
}
}

View File

@@ -0,0 +1,67 @@
package com.njcn.advance.controller.carrycapacity;
import com.njcn.advance.pojo.carrycapacity.param.CarryCapacityStrategyParam;
import com.njcn.advance.pojo.carrycapacity.vo.CarryCapacityStrategyVO;
import com.njcn.advance.service.carrycapacity.CarryCapacityStrategyPOService;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* Description:
* Date: 2024/3/5 10:35【需求编号】
*
* @author clam
* @version V1.0.0
*/
@RestController
@RequestMapping("carrycapacity")
@Api(tags = "承载能力评估策略配置")
@RequiredArgsConstructor
public class CarryCapacityStrategyController extends BaseController {
private final CarryCapacityStrategyPOService carryCapacityStrategyPOService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/add")
@ApiOperation("用户新增承载能力评估策略")
@ApiImplicitParam(name = "carryCapacityStrategyParam", value = "新增参数", required = true)
public HttpResult<Boolean> add(@RequestBody @Validated CarryCapacityStrategyParam carryCapacityStrategyParam) {
String methodDescribe = getMethodDescribe("add");
Boolean flag = carryCapacityStrategyPOService.add(carryCapacityStrategyParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, flag, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/queyDetail")
@ApiOperation("承载能力评估策略初始化查询")
public HttpResult<List<CarryCapacityStrategyVO>> queyDetail() {
String methodDescribe = getMethodDescribe("queyDetail");
List<CarryCapacityStrategyVO> carryCapacityStrategyVOList = carryCapacityStrategyPOService.queyDetail();
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, carryCapacityStrategyVOList, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/restore")
@ApiOperation("承载能力评估策略一键还原")
public HttpResult<Boolean> restore() {
String methodDescribe = getMethodDescribe("restore");
Boolean flag = carryCapacityStrategyPOService.restore();
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, flag, methodDescribe);
}
}

View File

@@ -0,0 +1,80 @@
package com.njcn.advance.controller.carrycapacity;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.njcn.advance.pojo.carrycapacity.param.CarryCapacityUserParam;
import com.njcn.advance.pojo.carrycapacity.po.CarryCapacityUserPO;
import com.njcn.advance.service.carrycapacity.CarryCapacityUserPOService;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author hongawen
* @version 1.0.0
* @date 2023年07月21日 10:06
*/
@RestController
@RequestMapping("carrycapacityuser")
@Api(tags = "承载能力评估用户")
@RequiredArgsConstructor
public class CarryCapacityUserController extends BaseController {
private final CarryCapacityUserPOService carryCapacityUserPOService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/add")
@ApiOperation("承载能力评估用户新增")
@ApiImplicitParam(name = "carryCapacityUserParam", value = "新增参数", required = true)
public HttpResult<Boolean> add(@RequestBody @Validated CarryCapacityUserParam carryCapacityUserParam) {
String methodDescribe = getMethodDescribe("add");
Boolean flag = carryCapacityUserPOService.add(carryCapacityUserParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, flag, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/remove")
@ApiOperation("承载能力评估用户批量删除")
@ApiImplicitParam(name = "userIds", value = "用户id集合", required = true)
public HttpResult<Boolean> remove(@RequestParam("userIds") List<String> userIds) {
String methodDescribe = getMethodDescribe("remove");
Boolean flag = carryCapacityUserPOService.removeByIds(userIds);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, flag, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/update")
@ApiOperation("承载能力评估用户编辑")
@ApiImplicitParam(name = "userUpdateParam", value = "编辑参数", required = true)
public HttpResult<Boolean> update(@RequestBody @Validated CarryCapacityUserParam.CarryCapacityUserUpdateParam userUpdateParam) {
String methodDescribe = getMethodDescribe("update");
Boolean flag = carryCapacityUserPOService.updateUser(userUpdateParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, flag, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/queyDetailUser")
@ApiOperation("承载能力评估用户查询")
@ApiImplicitParam(name = "pageParam", value = "编辑参数", required = true)
public HttpResult<IPage<CarryCapacityUserPO>> queyDetailUser(@RequestBody @Validated CarryCapacityUserParam.CarryCapacityUserPageParam pageParam) {
String methodDescribe = getMethodDescribe("queyDetailUser");
IPage<CarryCapacityUserPO> page = carryCapacityUserPOService.queyDetailUser(pageParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, page, methodDescribe);
}
}

View File

@@ -0,0 +1,15 @@
package com.njcn.advance.mapper.carrycapacity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.advance.pojo.carrycapacity.po.CarryCapacityDataPO;
/**
*
* Description:
* Date: 2024/3/6 14:45【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface CarryCapacityDataPOMapper extends BaseMapper<CarryCapacityDataPO> {
}

View File

@@ -0,0 +1,15 @@
package com.njcn.advance.mapper.carrycapacity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.advance.pojo.carrycapacity.po.CarryCapacityResultPO;
/**
*
* Description:
* Date: 2024/3/1 15:38【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface CarryCapacityResultPOMapper extends BaseMapper<CarryCapacityResultPO> {
}

View File

@@ -0,0 +1,14 @@
package com.njcn.advance.mapper.carrycapacity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.advance.pojo.carrycapacity.po.CarryCapacityStrategyPO;
/**
* Description:
* Date: 2024/3/5 10:54【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface CarryCapacityStrategyPOMapper extends BaseMapper<CarryCapacityStrategyPO> {
}

View File

@@ -0,0 +1,15 @@
package com.njcn.advance.mapper.carrycapacity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.advance.pojo.carrycapacity.po.CarryCapacityUserPO;
/**
*
* Description:
* Date: 2024/2/20 11:15【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface CarryCapacityUserPOMapper extends BaseMapper<CarryCapacityUserPO> {
}

View File

@@ -0,0 +1,20 @@
<?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.advance.mapper.carrycapacity.CarryCapacityDataPOMapper">
<resultMap id="BaseResultMap" type="com.njcn.advance.pojo.carrycapacity.po.CarryCapacityDataPO">
<!--@mbg.generated-->
<!--@Table carry_capacity_data-->
<id column="line_id" jdbcType="VARCHAR" property="lineId" />
<id column="start_time" jdbcType="DATE" property="startTime" />
<id column="end_time" jdbcType="DATE" property="endTime" />
<result column="date_list" jdbcType="VARCHAR" property="dateList" />
<result column="create_by" jdbcType="VARCHAR" property="createBy" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="update_by" jdbcType="VARCHAR" property="updateBy" />
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
line_id, start_time, end_time, date_list, create_by, create_time, update_by, update_time
</sql>
</mapper>

View File

@@ -0,0 +1,24 @@
<?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.advance.mapper.carrycapacity.CarryCapacityResultPOMapper">
<resultMap id="BaseResultMap" type="com.njcn.advance.pojo.carrycapacity.po.CarryCapacityResultPO">
<!--@mbg.generated-->
<!--@Table carry_capacity_result-->
<id column="id" jdbcType="VARCHAR" property="id" />
<result column="u_t_level" jdbcType="INTEGER" property="uTLevel" />
<result column="pf_t_level" jdbcType="INTEGER" property="pfTLevel" />
<result column="b_t_level" jdbcType="INTEGER" property="bTLevel" />
<result column="i_level" jdbcType="INTEGER" property="iLevel" />
<result column="reslut_level" jdbcType="INTEGER" property="reslutLevel" />
<result column="evaluate_date" jdbcType="DATE" property="evaluateDate" />
<result column="create_by" jdbcType="VARCHAR" property="createBy" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="update_by" jdbcType="VARCHAR" property="updateBy" />
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
id, u_t_level, pf_t_level, b_t_level, i_level, reslut_level, evaluate_date, create_by,
create_time, update_by, update_time
</sql>
</mapper>

View File

@@ -0,0 +1,23 @@
<?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.advance.mapper.carrycapacity.CarryCapacityStrategyPOMapper">
<resultMap id="BaseResultMap" type="com.njcn.advance.pojo.carrycapacity.po.CarryCapacityStrategyPO">
<!--@mbg.generated-->
<!--@Table carry_capacity_strategy-->
<result column="result" jdbcType="INTEGER" property="result" />
<result column="index_result" jdbcType="INTEGER" property="indexResult" />
<result column="comparison_operators" jdbcType="VARCHAR" property="comparisonOperators" />
<result column="count" jdbcType="INTEGER" property="count" />
<result column="proto_flag" jdbcType="INTEGER" property="protoFlag" />
<result column="user_flag" jdbcType="INTEGER" property="userFlag" />
<result column="create_by" jdbcType="VARCHAR" property="createBy" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="update_by" jdbcType="VARCHAR" property="updateBy" />
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
`result`, index_result, comparison_operators, `count`, proto_flag, user_flag, create_by,
create_time, update_by, update_time
</sql>
</mapper>

View File

@@ -0,0 +1,23 @@
<?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.advance.mapper.carrycapacity.CarryCapacityUserPOMapper">
<resultMap id="BaseResultMap" type="com.njcn.advance.pojo.carrycapacity.po.CarryCapacityUserPO">
<!--@mbg.generated-->
<!--@Table carry_capacity_user-->
<id column="user_id" jdbcType="VARCHAR" property="userId" />
<result column="user_name" jdbcType="VARCHAR" property="userName" />
<result column="user_type" jdbcType="VARCHAR" property="userType" />
<result column="voltage" jdbcType="VARCHAR" property="voltage" />
<result column="protocol_capacity" jdbcType="DOUBLE" property="protocolCapacity" />
<result column="area" jdbcType="VARCHAR" property="area" />
<result column="create_by" jdbcType="VARCHAR" property="createBy" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="update_by" jdbcType="VARCHAR" property="updateBy" />
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
</resultMap>
<sql id="Base_Column_List">
<!--@mbg.generated-->
user_id, user_name, user_type, voltage, protocol_capacity, area, create_by, create_time,
update_by, update_time
</sql>
</mapper>

View File

@@ -0,0 +1,16 @@
package com.njcn.advance.service.carrycapacity;
import com.njcn.advance.pojo.carrycapacity.po.CarryCapacityDataPO;
import com.baomidou.mybatisplus.extension.service.IService;
/**
*
* Description:
* Date: 2024/3/6 14:45【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface CarryCapacityDataPOService extends IService<CarryCapacityDataPO>{
}

View File

@@ -0,0 +1,16 @@
package com.njcn.advance.service.carrycapacity;
import com.njcn.advance.pojo.carrycapacity.po.CarryCapacityResultPO;
import com.baomidou.mybatisplus.extension.service.IService;
/**
*
* Description:
* Date: 2024/3/1 15:38【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface CarryCapacityResultPOService extends IService<CarryCapacityResultPO>{
}

View File

@@ -0,0 +1,26 @@
package com.njcn.advance.service.carrycapacity;
import com.njcn.advance.pojo.carrycapacity.param.CarryCapacityStrategyParam;
import com.njcn.advance.pojo.carrycapacity.po.CarryCapacityStrategyPO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.advance.pojo.carrycapacity.vo.CarryCapacityStrategyVO;
import java.util.List;
/**
*
* Description:
* Date: 2024/3/5 10:33【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface CarryCapacityStrategyPOService extends IService<CarryCapacityStrategyPO>{
Boolean add(CarryCapacityStrategyParam carryCapacityStrategyParam);
List<CarryCapacityStrategyVO> queyDetail();
Boolean restore();
}

View File

@@ -0,0 +1,23 @@
package com.njcn.advance.service.carrycapacity;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.njcn.advance.pojo.carrycapacity.param.CarryCapacityUserParam;
import com.njcn.advance.pojo.carrycapacity.po.CarryCapacityUserPO;
import com.baomidou.mybatisplus.extension.service.IService;
/**
*
* Description:
* Date: 2024/2/20 11:15【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface CarryCapacityUserPOService extends IService<CarryCapacityUserPO>{
Boolean add(CarryCapacityUserParam carryCapacityUserParam);
Boolean updateUser(CarryCapacityUserParam.CarryCapacityUserUpdateParam userUpdateParam);
IPage<CarryCapacityUserPO> queyDetailUser(CarryCapacityUserParam.CarryCapacityUserPageParam pageParm);
}

View File

@@ -0,0 +1,32 @@
package com.njcn.advance.service.carrycapacity;
import com.njcn.advance.pojo.carrycapacity.param.CarryCapacityCalParam;
import com.njcn.advance.pojo.carrycapacity.param.CarryCapacityQueryDataParam;
import com.njcn.advance.pojo.carrycapacity.vo.CarryCapacityDResultVO;
import com.njcn.advance.pojo.carrycapacity.vo.CarryCapacityDataIVO;
import com.njcn.advance.pojo.carrycapacity.vo.CarryCapacityDataQVO;
import com.njcn.advance.pojo.carrycapacity.vo.CarryCapacityDataVO;
import com.njcn.device.pq.pojo.vo.TerminalTree;
import java.util.List;
/**
* Description:
* Date: 2024/1/31 14:40【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface CarryCapcityService {
CarryCapacityDataVO queryCarryCapacityData(CarryCapacityQueryDataParam queryParam);
CarryCapacityDataQVO queryCarryCapacityQData(CarryCapacityQueryDataParam queryParam);
CarryCapacityDataIVO queryCarryCapacityIData(CarryCapacityQueryDataParam queryParam);
CarryCapacityDResultVO carryCapacityCal(CarryCapacityCalParam calParam);
List<TerminalTree> carryCapacityTree();
}

View File

@@ -0,0 +1,21 @@
package com.njcn.advance.service.carrycapacity.impl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.advance.pojo.carrycapacity.po.CarryCapacityDataPO;
import com.njcn.advance.mapper.carrycapacity.CarryCapacityDataPOMapper;
import com.njcn.advance.service.carrycapacity.CarryCapacityDataPOService;
/**
*
* Description:
* Date: 2024/3/6 14:45【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
public class CarryCapacityDataPOServiceImpl extends ServiceImpl<CarryCapacityDataPOMapper, CarryCapacityDataPO> implements CarryCapacityDataPOService{
}

View File

@@ -0,0 +1,19 @@
package com.njcn.advance.service.carrycapacity.impl;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.advance.mapper.carrycapacity.CarryCapacityResultPOMapper;
import com.njcn.advance.pojo.carrycapacity.po.CarryCapacityResultPO;
import com.njcn.advance.service.carrycapacity.CarryCapacityResultPOService;
/**
*
* Description:
* Date: 2024/3/1 15:38【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
public class CarryCapacityResultPOServiceImpl extends ServiceImpl<CarryCapacityResultPOMapper, CarryCapacityResultPO> implements CarryCapacityResultPOService{
}

View File

@@ -0,0 +1,78 @@
package com.njcn.advance.service.carrycapacity.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.advance.mapper.carrycapacity.CarryCapacityStrategyPOMapper;
import com.njcn.advance.pojo.carrycapacity.param.CarryCapacityStrategyParam;
import com.njcn.advance.pojo.carrycapacity.po.CarryCapacityStrategyPO;
import com.njcn.advance.pojo.carrycapacity.vo.CarryCapacityStrategyVO;
import com.njcn.advance.service.carrycapacity.CarryCapacityStrategyPOService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
/**
*
* Description:
* Date: 2024/3/5 10:33【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
public class CarryCapacityStrategyPOServiceImpl extends ServiceImpl<CarryCapacityStrategyPOMapper, CarryCapacityStrategyPO> implements CarryCapacityStrategyPOService{
@Override
@Transactional(rollbackFor = {Exception.class})
public Boolean add(CarryCapacityStrategyParam carryCapacityStrategyParam) {
CarryCapacityStrategyPO carryCapacityStrategyPO = new CarryCapacityStrategyPO();
BeanUtils.copyProperties(carryCapacityStrategyParam, carryCapacityStrategyPO);
//将原始策略处理为不启用
this.lambdaUpdate().eq(CarryCapacityStrategyPO::getResult, carryCapacityStrategyParam.getResult())
.eq(CarryCapacityStrategyPO::getIndexResult, carryCapacityStrategyParam.getIndexResult())
.eq(CarryCapacityStrategyPO::getProtoFlag, 1)
.set(CarryCapacityStrategyPO::getUserFlag,2)
.update();
QueryWrapper<CarryCapacityStrategyPO> lambdaQuery = new QueryWrapper<>();
lambdaQuery.lambda()
.eq(CarryCapacityStrategyPO::getResult, carryCapacityStrategyParam.getResult())
.eq(CarryCapacityStrategyPO::getIndexResult, carryCapacityStrategyParam.getIndexResult())
.eq(CarryCapacityStrategyPO::getProtoFlag, 2);
//将客户对应策略删除
this.remove(lambdaQuery);
//新增客户策略;
carryCapacityStrategyPO.setProtoFlag(2);
carryCapacityStrategyPO.setUserFlag(1);
boolean save = this.save(carryCapacityStrategyPO);
return save;
}
@Override
public List<CarryCapacityStrategyVO> queyDetail() {
List<CarryCapacityStrategyPO> list = this.lambdaQuery().eq(CarryCapacityStrategyPO::getUserFlag, 1).list();
List<CarryCapacityStrategyVO> collect = list.stream().map(temp -> {
CarryCapacityStrategyVO vo = new CarryCapacityStrategyVO();
BeanUtils.copyProperties(temp, vo);
return vo;
}).collect(Collectors.toList());
return collect;
}
@Override
public Boolean restore() {
//将客户对应策略删除
QueryWrapper<CarryCapacityStrategyPO> lambdaQuery = new QueryWrapper<>();
lambdaQuery.lambda()
.eq(CarryCapacityStrategyPO::getProtoFlag, 2);
this.remove(lambdaQuery
);
//将原始策略处理为启用
boolean update = this.lambdaUpdate().eq(CarryCapacityStrategyPO::getProtoFlag, 1)
.set(CarryCapacityStrategyPO::getUserFlag, 1)
.update();
return update;
}
}

View File

@@ -0,0 +1,69 @@
package com.njcn.advance.service.carrycapacity.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.advance.enums.AdvanceResponseEnum;
import com.njcn.advance.mapper.carrycapacity.CarryCapacityUserPOMapper;
import com.njcn.advance.pojo.carrycapacity.param.CarryCapacityUserParam;
import com.njcn.advance.pojo.carrycapacity.po.CarryCapacityUserPO;
import com.njcn.advance.service.carrycapacity.CarryCapacityUserPOService;
import com.njcn.common.pojo.exception.BusinessException;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Objects;
/**
*
* Description:
* Date: 2024/2/20 11:15【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
public class CarryCapacityUserPOServiceImpl extends ServiceImpl<CarryCapacityUserPOMapper, CarryCapacityUserPO> implements CarryCapacityUserPOService{
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean add(CarryCapacityUserParam carryCapacityUserParam) {
CarryCapacityUserPO carryCapacityUserPO = new CarryCapacityUserPO();
BeanUtils.copyProperties(carryCapacityUserParam, carryCapacityUserPO);
CarryCapacityUserPO one = this.lambdaQuery().eq(CarryCapacityUserPO::getUserName, carryCapacityUserParam.getUserName()).one();
if(Objects.nonNull(one)){
throw new BusinessException(AdvanceResponseEnum.USER_NAME_EXIST);
}
boolean save = this.save(carryCapacityUserPO);
return save;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean updateUser(CarryCapacityUserParam.CarryCapacityUserUpdateParam userUpdateParam) {
CarryCapacityUserPO carryCapacityUserPO = new CarryCapacityUserPO();
BeanUtils.copyProperties(userUpdateParam, carryCapacityUserPO);
CarryCapacityUserPO one = this.lambdaQuery().eq(CarryCapacityUserPO::getUserName, userUpdateParam.getUserName()).ne(CarryCapacityUserPO::getUserId,userUpdateParam.getUserId()).one();
if(Objects.nonNull(one)){
throw new BusinessException(AdvanceResponseEnum.USER_NAME_EXIST);
}
boolean save = this.updateById(carryCapacityUserPO);
return save;
}
@Override
public IPage<CarryCapacityUserPO> queyDetailUser(CarryCapacityUserParam.CarryCapacityUserPageParam pageParm) {
Page<CarryCapacityUserPO> returnpage = new Page<> (pageParm.getPageNum ( ), pageParm.getPageSize ( ));
QueryWrapper<CarryCapacityUserPO> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(StringUtils.isNotBlank(pageParm.getUserId()) ,CarryCapacityUserPO::getUserId,pageParm.getUserId())
.eq(StringUtils.isNotBlank(pageParm.getUserType()) ,CarryCapacityUserPO::getUserType,pageParm.getUserType())
.between(StringUtils.isNotBlank(pageParm.getStartTime()) && StringUtils.isNotBlank(pageParm.getEndTime()) ,CarryCapacityUserPO::getCreateTime,pageParm.getStartTime(),pageParm.getEndTime());
IPage<CarryCapacityUserPO> page = this.page (returnpage, queryWrapper);
return page;
}
}

View File

@@ -0,0 +1,699 @@
package com.njcn.advance.service.carrycapacity.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import com.njcn.advance.enums.AdvanceResponseEnum;
import com.njcn.advance.enums.CarryingCapacityEnum;
import com.njcn.advance.pojo.carrycapacity.param.CarryCapacityCalParam;
import com.njcn.advance.pojo.carrycapacity.param.CarryCapacityQueryDataParam;
import com.njcn.advance.pojo.carrycapacity.vo.*;
import com.njcn.advance.service.carrycapacity.CarryCapacityStrategyPOService;
import com.njcn.advance.service.carrycapacity.CarryCapcityService;
import com.njcn.advance.utils.CZNLPG;
import com.njcn.advance.utils.Utils;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.utils.PubUtils;
import com.njcn.device.biz.pojo.po.Overlimit;
import com.njcn.device.pq.api.DeviceTreeClient;
import com.njcn.device.pq.api.LineFeignClient;
import com.njcn.device.pq.pojo.vo.TerminalTree;
import com.njcn.influx.deprecated.InfluxDBPublicParam;
import com.njcn.influx.imapper.DataHarmPowerPMapper;
import com.njcn.influx.imapper.DataHarmPowerQMapper;
import com.njcn.influx.imapper.DataVMapper;
import com.njcn.influx.imapper.IDataIMapper;
import com.njcn.influx.pojo.bo.CarryCapcityData;
import com.njcn.influx.pojo.po.DataHarmPowerP;
import com.njcn.influx.pojo.po.DataHarmPowerQ;
import com.njcn.influx.pojo.po.DataI;
import com.njcn.influx.pojo.po.DataV;
import com.njcn.redis.utils.RedisUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* Description:
* Date: 2024/1/31 14:42【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
@RequiredArgsConstructor
public class CarryCapcityServiceImpl implements CarryCapcityService {
private final LineFeignClient lineFeignClient;
private final DeviceTreeClient deviceTreeClient;
private final DataHarmPowerQMapper dataHarmPowerQMapper;
private final DataHarmPowerPMapper dataHarmPowerPMapper;
private final DataVMapper dataVMapper;
private final IDataIMapper dataIMapper;
private final CarryCapacityStrategyPOService carryCapacityStrategyPOService;
private final RedisUtil redisUtil;
private static final double DEFAULTVALUE=3.1415926;
//光伏评估
void photovoltaicEvaluate(double S_T, double S_pv) {
//电压等级
List<DataHarmPowerP> dataHarmPowerPList = null;
List<DataHarmPowerQ> dataHarmPowerQList = null;
Integer voltage = null;
//数据清洗取近一周的配变每日9时~15时段的负载率数据中概率95%小值所对应时刻的有功功率和无功功率值
List<Double> listP = dataHarmPowerPList.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
.map(DataHarmPowerP::getP)
.collect(Collectors.toList());
List<Double> listQ = dataHarmPowerQList.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
.map(DataHarmPowerQ::getQ)
.collect(Collectors.toList());
//todo 检查数据是否缺失校验数据完整性
double P_βmin = CZNLPG.calculatePercentile(listP, 1);
double Q_βmin = CZNLPG.calculatePercentile(listQ, 1);
double P_pv = S_pv * Integer.valueOf(CarryingCapacityEnum.K.getValue());
double Bt = CZNLPG.calculateB(P_βmin, Q_βmin, Double.valueOf(CarryingCapacityEnum.K.getValue()), S_T, S_pv, P_pv);
CZNLPG.calculatePF_T(P_βmin, Q_βmin,Double.valueOf(CarryingCapacityEnum.K.getValue()),S_pv);
//前2周的数据
List<DataHarmPowerP> dataHarmPowerPList2 = null;
List<DataHarmPowerQ> dataHarmPowerQList2 = null;
List<DataV> DataVList2 = null;
List<String> phaseType = Stream.of("A", "B", "C").collect(Collectors.toList());
//存储UA, UB,UC;
List<Double> uList = new ArrayList<>();
phaseType.stream().forEach(phase -> {
List<Double> listP2 = dataHarmPowerPList2.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
.filter(temp -> temp.getPhaseType().equals(phase))
.map(DataHarmPowerP::getP)
.collect(Collectors.toList());
List<Double> listQ2 = dataHarmPowerQList2.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
.filter(temp -> temp.getPhaseType().equals(phase))
.map(DataHarmPowerQ::getQ)
.collect(Collectors.toList());
List<Double> listV2 = DataVList2.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
.filter(temp -> temp.getPhasicType().equals(phase))
.map(DataV::getRms)
.collect(Collectors.toList());
//todo 抽取5000条数据抽取方式待确定
Double[] res = new Double[3];
CZNLPG.cznlpgDataTrain(listV2, listP2, listQ2, listV2.size(), res);
//前一周数据计算p_minq_min
List<Double> listPPhase = dataHarmPowerPList.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
.filter(temp -> temp.getPhaseType().equals(phase))
.map(DataHarmPowerP::getP)
.collect(Collectors.toList());
List<Double> listQPhase = dataHarmPowerQList.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
.filter(temp -> temp.getPhaseType().equals(phase))
.map(DataHarmPowerQ::getQ)
.collect(Collectors.toList());
//todo 检查数据是否缺失校验数据完整性
double p_min = CZNLPG.calculatePercentile(listPPhase, 1);
double q_min = CZNLPG.calculatePercentile(listQPhase, 1);
double U = CZNLPG.calculateU(res[0], res[1], res[2], p_min, Double.valueOf(CarryingCapacityEnum.K.getValue()), q_min, S_pv, voltage);
uList.add(U);
});
//取uList最大值
double U_T = uList.stream().mapToDouble(Double::doubleValue)
.max()
.getAsDouble();
List<Double> i_Th_List = new ArrayList<>();
List<DataI> dataIList = null;
List<Integer> integerList = Stream.of(2, 3, 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25).collect(Collectors.toList());
integerList.stream().forEach(temp->{
List<Double> iList = new ArrayList<>();
phaseType.stream().forEach(phase -> {
List<DataI> tempDataIList = dataIList.stream().filter(temp1 -> Utils.isTimeInRange(temp1.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
.filter(temp1 -> temp1.getPhaseType().equals(phase))
.collect(Collectors.toList());
//todo 检查数据是否缺失校验数据完整性
List<Double> attributeValueByPropertyName = Utils.getAttributeValueByPropertyName(tempDataIList, "i" + temp);
double I_cp95 = CZNLPG.calculatePercentile(attributeValueByPropertyName, 0);
double I_phase = CZNLPG.calculateITm(I_cp95, Double.valueOf(CarryingCapacityEnum.K.getValue()),
voltage, S_pv, Double.valueOf(CarryingCapacityEnum.getValueByCode("K_H_" + temp)),
Double.valueOf(CarryingCapacityEnum.getValueByCode("I_INV_" + temp)));
iList.add(I_phase);
});
double I_th = iList.stream().mapToDouble(Double::doubleValue)
.max()
.getAsDouble();
i_Th_List.add(I_th);
});
//todo 根据监测点查找限值
}
@Override
public CarryCapacityDataVO queryCarryCapacityData(CarryCapacityQueryDataParam queryParam) {
CarryCapacityDataVO carryCapacityDataVO = new CarryCapacityDataVO();
String lineId = queryParam.getLineId();
// LineDetailDataVO data = lineFeignClient.getLineDetailData(lineId).getData();
// //时间间隔
// Integer timeInterval = data.getTimeInterval();
Integer timeInterval =1;
//根据时间间隔算出最低数据量 7天*6小时*60分钟*3项*90%/时间间隔
int minDataNum = 7*6*60*3*90/(100*timeInterval);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String startTime = LocalDateTimeUtil.format(queryParam.getStartTime(), formatter) + " 00:00:00";
String endTime = LocalDateTimeUtil.format(queryParam.getEndTime(), formatter) + " 23:59:00";
/* 近一周的数据包括电流,电压有功功率无功功率数据完整性校验就取有功功率一组数据校验因为要有都有要没有都没有数据查询按时间间隔和tag分组
缺失布置3.1415926后边更具3.1415926个数来判断数据完整性,及进行数据补充*/
//有功功率
String SqlP1 = "select mean(p) as value from data_harmpower_p where value_type='CP95' and phasic_type!='T' and line_id='"+lineId+
"' and time >= '" + startTime + "'and time <= '" +endTime + "'"+"group by time("+timeInterval+"m) ,* fill(3.1415926)"+InfluxDBPublicParam.TIME_ZONE;
List<CarryCapcityData> dataHarmPowerPList = dataHarmPowerPMapper.getSqlResult(SqlP1);
//数据校验
if(CollectionUtil.isEmpty(dataHarmPowerPList)){
throw new BusinessException(AdvanceResponseEnum.DATA_NOT_FOUND);
}else {
//数据清洗取近一周的配变每日9时~15时段的负载率数据中概率95%小值所对应时刻的有功功率和无功功率值
List<Double> listP = dataHarmPowerPList.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
.filter(temp -> temp.getValue()!=DEFAULTVALUE)
.map(CarryCapcityData::getValue)
.collect(Collectors.toList());
if (listP.size()<minDataNum){
throw new BusinessException(AdvanceResponseEnum.DATA_NOT_FOUND);
}
}
//数据缺失填补
linearInterpolation(dataHarmPowerPList);
carryCapacityDataVO.setData(dataHarmPowerPList);
List<String> phaseType = Stream.of("A", "B", "C").collect(Collectors.toList());
Map<String,Double> results = new HashMap<>(4);
//计算最小Cp95值用于评估
phaseType.stream().forEach(phase -> {
List<Double> listP = dataHarmPowerPList.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
.filter(temp -> temp.getValue()!=DEFAULTVALUE)
.filter(temp -> Objects.equals(temp.getPhaseType(),phase))
.map(CarryCapcityData::getValue)
.collect(Collectors.toList());
double P_βmin = CZNLPG.calculatePercentile(listP, 1);
results.put(phase, P_βmin);
});
carryCapacityDataVO.setP_βminMap(results);
//前2周的数据用于计算首端电流模型参数
String forwardStartTime = LocalDateTimeUtil.format(queryParam.getStartTime()
// .plusWeeks(-1)
, formatter) + " 00:00:00";
String forwardEndTime = LocalDateTimeUtil.format(queryParam.getEndTime()
// .plusWeeks(-1)
, formatter) + " 23:59:00";
String SqlP2 = "select mean(p) as value from data_harmpower_p where value_type='CP95' and phasic_type!='T' and line_id='"+lineId+
"' and time >= '" + forwardStartTime + "'and time <= '" +forwardEndTime + "'"+"group by time("+timeInterval+"m) ,* fill(3.1415926)"+InfluxDBPublicParam.TIME_ZONE;
List<CarryCapcityData> dataHarmPowerPList2 = dataHarmPowerPMapper.getSqlResult(SqlP2);
//数据校验
// if(CollectionUtil.isEmpty(dataHarmPowerPList2)){
// throw new BusinessException(AdvanceResponseEnum.DATA_NOT_FOUND);
// }else {
// //数据清洗取近一周的配变每日9时~15时段的负载率数据中概率95%小值所对应时刻的有功功率和无功功率值
// List<Double> listP = dataHarmPowerPList2.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
// .filter(temp -> temp.getValue()!=DEFAULTVALUE)
// .map(CarryCapcityData::getValue)
// .collect(Collectors.toList());
// if (listP.size()<minDataNum){
// throw new BusinessException(AdvanceResponseEnum.DATA_NOT_FOUND);
// }
// }
//数据缺失填补
linearInterpolation(dataHarmPowerPList2);
//有功功率
String SqlQ2 = "select mean(q) as value from data_harmpower_q where value_type='CP95' and phasic_type!='T' and line_id='"+lineId+
"' and time >= '" + forwardStartTime + "'and time <= '" +forwardEndTime + "'"+"group by time("+timeInterval+"m) ,* fill(3.1415926)"+InfluxDBPublicParam.TIME_ZONE;
List<CarryCapcityData> dataHarmPowerQList2 = dataHarmPowerQMapper.getSqlResult(SqlQ2);
//数据缺失填补
linearInterpolation(dataHarmPowerQList2);
//电压
String SqlU2 = "select mean(rms) as value from data_v where value_type='CP95' and phasic_type!='T' and line_id='"+lineId+
"' and time >= '" + forwardStartTime + "'and time <= '" +forwardEndTime + "'"+"group by time("+timeInterval+"m) ,* fill(3.1415926)"+InfluxDBPublicParam.TIME_ZONE;
List<CarryCapcityData> dataVList2 = dataVMapper.getSqlResult(SqlU2);
//数据缺失填补
linearInterpolation(dataVList2);
//用前2周的数据计算C,a,b
Map<String, Double[]> stringMap = calUParam(dataHarmPowerPList2, dataHarmPowerQList2, dataVList2);
carryCapacityDataVO.setStringMap(stringMap);
return carryCapacityDataVO;
}
@Override
public CarryCapacityDataQVO queryCarryCapacityQData(CarryCapacityQueryDataParam queryParam) {
CarryCapacityDataQVO carryCapacityDataQVO = new CarryCapacityDataQVO();
String lineId = queryParam.getLineId();
// LineDetailDataVO data = lineFeignClient.getLineDetailData(lineId).getData();
// //时间间隔
// Integer timeInterval = data.getTimeInterval();
Integer timeInterval =1;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String startTime = LocalDateTimeUtil.format(queryParam.getStartTime(), formatter) + " 00:00:00";
String endTime = LocalDateTimeUtil.format(queryParam.getEndTime(), formatter) + " 23:59:00";
//无功功率
String SqlQ1 = "select mean(q) as value from data_harmpower_q where value_type='CP95' and phasic_type!='T' and line_id='"+lineId+
"' and time >= '" + startTime + "'and time <= '" +endTime + "'"+"group by time("+timeInterval+"m) ,* fill(3.1415926)"+InfluxDBPublicParam.TIME_ZONE;
List<CarryCapcityData> dataHarmPowerList = dataHarmPowerQMapper.getSqlResult(SqlQ1);
//数据缺失填补
linearInterpolation(dataHarmPowerList);
carryCapacityDataQVO.setData(dataHarmPowerList);
List<String> phaseType = Stream.of("A", "B", "C").collect(Collectors.toList());
Map<String,Double> results = new HashMap<>(4);
//计算最小Cp95值用于评估
phaseType.stream().forEach(phase -> {
List<Double> listQ = dataHarmPowerList.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
.filter(temp -> temp.getValue()!=DEFAULTVALUE)
.filter(temp -> Objects.equals(temp.getPhaseType(),phase))
.map(CarryCapcityData::getValue)
.collect(Collectors.toList());
double Q_βmin = CZNLPG.calculatePercentile(listQ, 1);
results.put(phase, Q_βmin);
});
carryCapacityDataQVO.setQ_βminMap(results);
return carryCapacityDataQVO;
}
@Override
public CarryCapacityDataIVO queryCarryCapacityIData(CarryCapacityQueryDataParam queryParam) {
CarryCapacityDataIVO carryCapacityDataIVO = new CarryCapacityDataIVO();
String lineId = queryParam.getLineId();
// LineDetailDataVO data = lineFeignClient.getLineDetailData(lineId).getData();
// //时间间隔
// Integer timeInterval = data.getTimeInterval();
Integer timeInterval =1;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String startTime = LocalDateTimeUtil.format(queryParam.getStartTime(), formatter) + " 00:00:00";
String endTime = LocalDateTimeUtil.format(queryParam.getEndTime(), formatter) + " 23:59:00";
//电流
StringBuilder stringBuilder1 = new StringBuilder();
StringBuilder stringBuilder2 = new StringBuilder();
for (int i = 2; i <=25 ; i++) {
if (i==25){
stringBuilder1.append("mean(i_").append(i).append(") AS i_").append(i);
} else {
stringBuilder1.append("mean(i_").append(i).append(") AS i_").append(i).append(",");
}
}
stringBuilder2.append ("line_id='").append (lineId).append ("' and ").append(InfluxDBPublicParam.TIME + " >= '").append(startTime).append("' and ").append(InfluxDBPublicParam.TIME).append(" <= '").append(endTime).append("' group by time(").append(timeInterval).append("m),* fill(3.1415926) ").append(InfluxDBPublicParam.TIME_ZONE);
String sqlI1 = "select "+stringBuilder1+" from "+ InfluxDBPublicParam.DATA_I+" where value_type='CP95' and phasic_type!='T' and "+stringBuilder2;
List<DataI> dataI = dataIMapper.getSqlResult(sqlI1);
//数据缺失填补
linearInterpolationI(dataI);
List<CarryCapcityData> i_list = dataI.stream().map(temp -> {
CarryCapcityData carryCapcityData = new CarryCapcityData();
BeanUtils.copyProperties(temp, carryCapcityData);
carryCapcityData.setValue(Utils.getAttributeValueByPropertyName(temp, "i" + queryParam.getTime()));
return carryCapcityData;
}).collect(Collectors.toList());
carryCapacityDataIVO.setData(i_list);
List<Double> I_βmax =new ArrayList<>();
List<Integer> integerList = Stream.of(2, 3, 4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25).collect(Collectors.toList());
List<String> phaseType = Stream.of("A", "B", "C").collect(Collectors.toList());
integerList.stream().forEach(temp->{
List<Double> iList = new ArrayList<>();
phaseType.stream().forEach(phase -> {
List<DataI> tempDataIList = dataI.stream().filter(temp1 -> Utils.isTimeInRange(temp1.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
.filter(temp1 -> temp1.getPhaseType().equals(phase))
.collect(Collectors.toList());
List<Double> attributeValueByPropertyName = Utils.getAttributeValueByPropertyName(tempDataIList, "i" + temp);
double I_cp95 = CZNLPG.calculatePercentile(attributeValueByPropertyName, 0);
iList.add(I_cp95);
});
//取uList最大值
double i_Max = iList.stream().mapToDouble(Double::doubleValue)
.max()
.getAsDouble();
I_βmax.add(i_Max);
});
carryCapacityDataIVO.setI_βmax(I_βmax);
return carryCapacityDataIVO;
}
@Override
public CarryCapacityDResultVO carryCapacityCal(CarryCapacityCalParam calParam) {
CarryCapacityDResultVO carryCapacityDResultVO = new CarryCapacityDResultVO();
Double S_T = calParam.getS_T();
Double S_pv = calParam.getS_pv();
Double P_pv = calParam.getS_pv()*Double.valueOf(CarryingCapacityEnum.K.getValue());
List<String> phaseType = Stream.of("A", "B", "C").collect(Collectors.toList());
List<Double> uList = new ArrayList<>();
List<Double> BtList = new ArrayList<>();
List<Double> PF_TList = new ArrayList<>();
for (String phase : phaseType) {
Double P_βmin = calParam.getP_βminMap().get(phase);
Double Q_βmin = calParam.getQ_βminMap().get(phase);
Double[] res = calParam.getStringMap().get(phase);
double Bt = CZNLPG.calculateB(P_βmin, Q_βmin, Double.valueOf(CarryingCapacityEnum.K.getValue()), S_T, S_pv, P_pv);
BtList.add(Bt);
double PF_T = CZNLPG.calculatePF_T(P_βmin, Q_βmin, Double.valueOf(CarryingCapacityEnum.K.getValue()), S_pv);
PF_TList.add(PF_T);
double U = CZNLPG.calculateU(res[0], res[1], res[2], P_βmin, Double.valueOf(CarryingCapacityEnum.K.getValue()), Q_βmin, S_pv, Double.valueOf(calParam.getScale()));
uList.add(U);
}
//取uList最大值
double U_T_Max = uList.stream().mapToDouble(Double::doubleValue)
.max()
.getAsDouble();
double Bt_Max = BtList.stream().mapToDouble(Double::doubleValue)
.max()
.getAsDouble();
double PF_T_Max = PF_TList.stream().mapToDouble(Double::doubleValue)
.max()
.getAsDouble();
Integer uTLevel = CZNLPG.evaluateVoltageLevel(U_T_Max);
carryCapacityDResultVO.setUTLevel(uTLevel);
Integer pfTLevel = CZNLPG.evaluatePowerFactorLevel(PF_T_Max);
carryCapacityDResultVO.setPfTLevel(pfTLevel);
Integer bTLevel = CZNLPG.evaluateEquivalentLoadRateLevel(PF_T_Max);
carryCapacityDResultVO.setPfTLevel(bTLevel);
//谐波电流幅值判断
//获取限值
Overlimit overlimit = lineFeignClient.getOverLimitData(calParam.getLineId()).getData();
//各次谐波电流 均小于国标限值 返回1 存在某次谐波电流幅值 超出限值但在1.25倍限值内 返回2 存在某次谐波电流幅值超出限值1.25倍以上 返回3 存在多次谐波电流幅值均超出限值1.25倍以上 返回4
//i_count1小于国标限值的个数i_count2>=国标限值<=1.25倍的国标限值i_count3>1.25倍的国标限值
int i_count1=0,i_count2=0,i_count3=0;
for (int i = 0; i < calParam.getI_βmax().size(); i++) {
double I_TM = CZNLPG.calculateITm(calParam.getI_βmax().get(i), Double.valueOf(CarryingCapacityEnum.K.getValue()),
Double.valueOf(calParam.getScale()), S_pv, Double.valueOf(CarryingCapacityEnum.getValueByCode("K_H_" + (i + 2))),
Double.valueOf(CarryingCapacityEnum.getValueByCode("I_INV_" + (i + 2))));
double getUharm = PubUtils.getValueByMethod(overlimit, "getIharm", i + 2);
if (I_TM<getUharm) {
i_count1++;
} else if (I_TM >= getUharm && I_TM <= 1.25 * getUharm) {
i_count2++;
} else if (I_TM > 1.25 * getUharm) {
i_count3++;
}
}
Integer iLevel = 1;
if (i_count3>1) {
iLevel=4;
} else if (i_count3==1) {
iLevel=3;
} else if (i_count2==1) {
iLevel=2;
}else {
iLevel=1;
}
carryCapacityDResultVO.setILevel(iLevel);
//统计安全3级预警2级预警1级预警个数
List<Integer> list = Stream.of(uTLevel, pfTLevel, bTLevel, iLevel).collect(Collectors.toList());
int safe_count=0,warn_count3=0,warn_count2=0,warn_count1=0;
safe_count =(int) list.stream()
.filter(temp ->temp==1)
.count();
warn_count3 =(int) list.stream()
.filter(temp ->temp==2)
.count();
warn_count2 =(int) list.stream()
.filter(temp ->temp==3)
.count();
warn_count1 =(int) list.stream()
.filter(temp ->temp==1)
.count();
List<CarryCapacityStrategyVO> carryCapacityStrategyVOList = carryCapacityStrategyPOService.queyDetail();
//1-安全2-III级预警3-II级预警4-I 级预警,依次执行策略看是否符合
for (int i = 1; i < 5; i++) {
int finalI = i;
boolean b = StrategyReslut(carryCapacityStrategyVOList, i, 1, safe_count);
boolean b1 = StrategyReslut(carryCapacityStrategyVOList, i, 2, warn_count3);
boolean b2 = StrategyReslut(carryCapacityStrategyVOList, i, 3, warn_count2);
boolean b3 = StrategyReslut(carryCapacityStrategyVOList, i, 4, warn_count1);
if(b&&b1&&b2&&b3){
carryCapacityDResultVO.setReslutLevel(i);
break;
}
}
return carryCapacityDResultVO;
}
@Override
public List<TerminalTree> carryCapacityTree() {
List<TerminalTree> data = deviceTreeClient.getTerminalTree().getData();
data.forEach(temp->{
temp.getChildren().forEach(temp1->{
temp1.getChildren().forEach(temp2->{
temp2.getChildren().forEach(temp3->{
temp3.getChildren().forEach(temp4->{
List<TerminalTree> collect = temp4.getChildren().stream()
.map(TerminalTree::getChildren).flatMap(Collection::stream)
.map(TerminalTree::getChildren).flatMap(Collection::stream)
.collect(Collectors.toList());
temp4.setChildren(collect);
});
});
});
});
});
return data;
}
/**
* @Description: 首先,找到缺失值的前一个和后一个非缺失值。
* 计算两个非缺失值之间的差值。
* 将差值除以两个非缺失值之间的距离,得到斜率。
* 使用斜率和前一个非缺失值计算缺失值的近似值。
* @Param:
* @Author: clam
* @Date: 2024/2/28
*/
public static void linearInterpolation(List<CarryCapcityData> data) {
for (int i = 0; i < data.size(); i++) {
if (data.get(i).getValue() == DEFAULTVALUE ) {
int prevIndex = i - 1;
int nextIndex = i + 1;
while (prevIndex >= 0 && data.get(prevIndex).getValue() == DEFAULTVALUE) {
prevIndex--;
}
while (nextIndex < data.size() && data.get(nextIndex).getValue() == DEFAULTVALUE) {
nextIndex++;
}
if (prevIndex >= 0 && nextIndex < data.size()) {
double slope = (data.get(nextIndex).getValue() - data.get(prevIndex).getValue()) / (nextIndex - prevIndex);
data.get(i).setValue(data.get(prevIndex).getValue() + slope * (i - prevIndex));
} else {
data.get(i).setValue(DEFAULTVALUE);
}
}
}
}
/**
* @Description: linearInterpolationI 电流数据缺失填补
* @Param:
* @return: void
* @Author: clam
* @Date: 2024/2/28
*/
public static void linearInterpolationI(List<DataI> data) {
for (int k= 2; k <=25 ; k++) {
for (int i = 0; i < data.size(); i++) {
if (data.get(i).getI2() == DEFAULTVALUE) {
int prevIndex = i - 1;
int nextIndex = i + 1;
while (prevIndex >= 0 && data.get(prevIndex).getI2() == DEFAULTVALUE) {
prevIndex--;
}
while (nextIndex < data.size() && data.get(nextIndex).getI2() == DEFAULTVALUE) {
nextIndex++;
}
if (prevIndex >= 0 && nextIndex < data.size()) {
double slope = (data.get(nextIndex).getI2() - data.get(prevIndex).getI2()) / (nextIndex - prevIndex);
data.get(i).setI2(data.get(prevIndex).getI2() + slope * (i - prevIndex));
data.get(i).setI3(data.get(prevIndex).getI3() + slope * (i - prevIndex));
data.get(i).setI4(data.get(prevIndex).getI4() + slope * (i - prevIndex));
data.get(i).setI5(data.get(prevIndex).getI5() + slope * (i - prevIndex));
data.get(i).setI6(data.get(prevIndex).getI6() + slope * (i - prevIndex));
data.get(i).setI7(data.get(prevIndex).getI7() + slope * (i - prevIndex));
data.get(i).setI8(data.get(prevIndex).getI8() + slope * (i - prevIndex));
data.get(i).setI9(data.get(prevIndex).getI9() + slope * (i - prevIndex));
data.get(i).setI10(data.get(prevIndex).getI10() + slope * (i - prevIndex));
data.get(i).setI11(data.get(prevIndex).getI11() + slope * (i - prevIndex));
data.get(i).setI12(data.get(prevIndex).getI12() + slope * (i - prevIndex));
data.get(i).setI13(data.get(prevIndex).getI13() + slope * (i - prevIndex));
data.get(i).setI14(data.get(prevIndex).getI14() + slope * (i - prevIndex));
data.get(i).setI15(data.get(prevIndex).getI15() + slope * (i - prevIndex));
data.get(i).setI16(data.get(prevIndex).getI16() + slope * (i - prevIndex));
data.get(i).setI17(data.get(prevIndex).getI17() + slope * (i - prevIndex));
data.get(i).setI18(data.get(prevIndex).getI18() + slope * (i - prevIndex));
data.get(i).setI19(data.get(prevIndex).getI19() + slope * (i - prevIndex));
data.get(i).setI20(data.get(prevIndex).getI20() + slope * (i - prevIndex));
data.get(i).setI21(data.get(prevIndex).getI21() + slope * (i - prevIndex));
data.get(i).setI22(data.get(prevIndex).getI22() + slope * (i - prevIndex));
data.get(i).setI23(data.get(prevIndex).getI23() + slope * (i - prevIndex));
data.get(i).setI24(data.get(prevIndex).getI24() + slope * (i - prevIndex));
data.get(i).setI25(data.get(prevIndex).getI25() + slope * (i - prevIndex));
} else {
data.get(i).setI2(DEFAULTVALUE);
data.get(i).setI3(DEFAULTVALUE);
data.get(i).setI4(DEFAULTVALUE);
data.get(i).setI5(DEFAULTVALUE);
data.get(i).setI6(DEFAULTVALUE);
data.get(i).setI7(DEFAULTVALUE);
data.get(i).setI8(DEFAULTVALUE);
data.get(i).setI9(DEFAULTVALUE);
data.get(i).setI10(DEFAULTVALUE);
data.get(i).setI11(DEFAULTVALUE);
data.get(i).setI12(DEFAULTVALUE);
data.get(i).setI13(DEFAULTVALUE);
data.get(i).setI14(DEFAULTVALUE);
data.get(i).setI15(DEFAULTVALUE);
data.get(i).setI16(DEFAULTVALUE);
data.get(i).setI17(DEFAULTVALUE);
data.get(i).setI18(DEFAULTVALUE);
data.get(i).setI19(DEFAULTVALUE);
data.get(i).setI20(DEFAULTVALUE);
data.get(i).setI21(DEFAULTVALUE);
data.get(i).setI22(DEFAULTVALUE);
data.get(i).setI23(DEFAULTVALUE);
data.get(i).setI24(DEFAULTVALUE);
data.get(i).setI25(DEFAULTVALUE);
}
}
}
}
}
/**
* @Description: calUParam 首端电压模型训练获取A,B,C三项C,ab参数
* @Param:
* @return: java.util.Map<java.lang.String,java.lang.Double[]>
* @Author: clam
* @Date: 2024/2/29
*/
public static Map<String,Double[]> calUParam(List<CarryCapcityData> dataHarmPowerPList2,List<CarryCapcityData> dataHarmPowerQList2,List<CarryCapcityData> DataVList2){
Map<String,Double[]> results = new HashMap<>(4);
List<String> phaseType = Stream.of("A", "B", "C").collect(Collectors.toList());
//存储UA, UB,UC;
List<Double> uList = new ArrayList<>();
phaseType.stream().forEach(phase -> {
List<Double> listP2 = dataHarmPowerPList2.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
.filter(temp -> temp.getPhaseType().equals(phase))
.map(CarryCapcityData::getValue)
.collect(Collectors.toList());
List<Double> listQ2 = dataHarmPowerQList2.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
.filter(temp -> temp.getPhaseType().equals(phase))
.map(CarryCapcityData::getValue)
.collect(Collectors.toList());
List<Double> listV2 = DataVList2.stream().filter(temp -> Utils.isTimeInRange(temp.getTime(), LocalTime.of(9, 0), LocalTime.of(15, 0)))
.filter(temp -> temp.getPhaseType().equals(phase))
.map(CarryCapcityData::getValue)
.collect(Collectors.toList());
//todo 抽取5000条数据抽取方式待确定
Double[] res = new Double[3];
CZNLPG.cznlpgDataTrain(listV2, listP2, listQ2, listV2.size(), res);
results.put(phase, res);
});
return results;
}
private static boolean compareNumbers(int num1, int num2, String operator) {
if (operator.equals("/")) {
return true;
}
else if (operator.equals("<") ) {
return num1 < num2;
} else if (operator.equals(">")) {
return num1 > num2;
} else if (operator.equals("<=")) {
return num1 <= num2;
} else if (operator.equals(">=")) {
return num1 >= num2;
} else if (operator.equals("==")) {
return num1 == num2;
} else if (operator.equals("!=")) {
return num1 != num2;
} else {
throw new IllegalArgumentException("无效的操作符");
}
}
private static boolean StrategyReslut(List<CarryCapacityStrategyVO> carryCapacityStrategyVOList, int result_level, int index_result_level,int result_count) {
CarryCapacityStrategyVO carryCapacityStrategyVO = carryCapacityStrategyVOList.stream()
.filter(temp -> temp.getResult() == result_level)
.filter(temp -> temp.getIndexResult() == index_result_level)
.collect(Collectors.toList()).get(0);
boolean b1 = compareNumbers(result_count, carryCapacityStrategyVO.getCount(), carryCapacityStrategyVO.getComparisonOperators());
return b1;
}
}

View File

@@ -0,0 +1,314 @@
package com.njcn.advance.utils;
import org.apache.commons.math3.linear.DecompositionSolver;
import org.apache.commons.math3.linear.LUDecomposition;
import org.apache.commons.math3.linear.MatrixUtils;
import org.apache.commons.math3.linear.RealMatrix;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
public class CZNLPG {
private static final String DATA_CSV = "C:\\njcn\\pqs\\pqs-advance\\advance-boot\\src\\main\\resources\\test.csv";
private static final int MAX_PRO_DATA_NUM = 5000;
private static final int MAX_DATA_COL_NUM = 9;
private static double[][] arr = new double[MAX_PRO_DATA_NUM][MAX_DATA_COL_NUM];
public static void main(String[] args) {
double[] data_u = new double[MAX_PRO_DATA_NUM];
double[] data_p = new double[MAX_PRO_DATA_NUM];
double[] data_q = new double[MAX_PRO_DATA_NUM];
int data_num = parseCSV(DATA_CSV, data_u, data_p, data_q);
System.out.println("data_num: " + data_num);
double[] res = new double[3];
// cznlpgDataTrain(data_u, data_p, data_q, data_num, res);
System.out.println("C = " + res[0] + " a = " + res[1] + " b = " + res[2]);
}
private static int parseCSV(String path, double[] data_u, double[] data_p, double[] data_q) {
int line = 0;
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
String lines;
while ((lines = br.readLine()) != null) {
String[] tokens = lines.split(",");
for (int i = 0; i < tokens.length; i++) {
arr[line][i] = Double.parseDouble(tokens[i]);
}
System.out.println("line " + line + ": ");
for (int i = 0; i < tokens.length; i++) {
System.out.println("arr[" + line + "][" + i + "]=" + arr[line][i]);
}
data_u[line] = arr[line][0];
data_p[line] = arr[line][1];
data_q[line] = arr[line][2];
line++;
}
} catch (IOException e) {
e.printStackTrace();
}
return line;
}
/*
* 模型训练
* */
public static void cznlpgDataTrain(List<Double> u, List<Double> p, List<Double> q, int num, Double[] outRes) {
if (num > MAX_PRO_DATA_NUM) {
return;
}
RealMatrix matPQ = MatrixUtils.createRealMatrix(num, 3);
RealMatrix matU = MatrixUtils.createRealMatrix(num, 1);
RealMatrix matW = MatrixUtils.createRealMatrix(3, 1);
// Matrix assignment
for (int i = 0; i < num; i++) {
matPQ.setEntry(i, 0, 1);
matPQ.setEntry(i, 1, p.get(i));
matPQ.setEntry(i, 2, q.get(i));
matU.setEntry(i, 0, u.get(i));
}
System.out.println("matPQ=");
printMatrix(matPQ);
System.out.println("matPQ transpose=");
printMatrix(matPQ.transpose());
// w = inv(PQ1'*PQ1)*PQ1'*U
// U = 224.5133 - 2.3041e-5 * P - 1.1900e-4 * Q
RealMatrix matPQT = matPQ.transpose();
RealMatrix matInverse = inverseMatrix(matPQT.multiply(matPQ));
matW = matInverse.multiply(matPQT).multiply(matU);
outRes[0] = matW.getEntry(0, 0);
outRes[1] = matW.getEntry(1, 0);
outRes[2] = matW.getEntry(2, 0);
}
private static void printMatrix(RealMatrix matrix) {
System.out.println(matrix);
}
//矩阵求逆
public static RealMatrix inverseMatrix(RealMatrix matrix) {
LUDecomposition LUDe = new LUDecomposition(matrix);
DecompositionSolver solver = LUDe.getSolver();
RealMatrix result = solver.getInverse();
return result;
}
/**
* @Description: 负载率约束指标计算P_βmin和Q_βmin分别为近一周的配变每日9时~15时段的负载率数据中概率95%小值所对应时刻的有功功率和无功功率值;
* S_T为配变额定容量S_pv为拟接入光伏容量k为修正系数 ,取值可参照如下。
* 台区日照条件 k
* 光照强度大于1250kWh/m^2 0.8~0.9
* 光照强度小于1250kWh/m^2 0.75~0.8
* 海南 0.8
* @Param:
* @return: double Loadrate
* @Author: clam
* @Date: 2024/1/26
*/
public static double calculateB(double P_βmin, double Q_βmin, double k, double S_T, double S_pv, double P_pv) {
double term1 = Math.pow(P_βmin - k * S_T, 2);
double term2 = Math.pow(Q_βmin, 2);
double numerator = Math.sqrt(term1 + term2);
if (P_βmin > P_pv) {
return numerator / S_pv;
} else {
return -numerator / S_pv;
}
}
/**
* @Description: calculatePF_T 功率因数指标计算
* @Param:
* @return: double
* @Author: clam
* @Date: 2024/2/20
*/
public static double calculatePF_T(double P_βmin, double Q_βmin, double k, double S_pv) {
double term1 = Math.pow(P_βmin - k * S_pv, 2);
double term2 = Math.pow(Q_βmin, 2);
double v = P_βmin - k * S_pv;
double numerator = Math.sqrt(term1 + term2);
return v/numerator;
}
/**
* @Description: 总结:
* p_min和 q_min能够根据测点数据获取得到
* S_pv为拟接入光伏容量此部分需要现场选取好台区后获取。
* k为修正系数徐工提供海南k系数是否需要考虑不同季节台区日照系数。
* C、a、b需要用模型计算是此算法中难点。
* 结论【拟接入光伏容量】为入参【A/B/C相有功功率】和【A/B/C相无功功率值】95%小值从A/B/C相历史数据中计算得出 为枚举参数;能够计算三相配变首端电压 、 、 从而得出U 。
* 380v -U=C-a(p_min -k*S_pv/3)-b*q_min
* 220v -U=C-a(p_min -k*S_pv)-b*q_min
*
* @Param:
* @return: double
* @Author: clam
* @Date: 2024/2/2
*/
public static double calculateU(double C, double a, double b, double p_min, double K, double q_min,double S_pv, double voltage) {
if (voltage == 220) {
return C-a*(p_min-K*S_pv)-b*q_min;
} else if (voltage == 380) {
return C-a*(p_min-K*S_pv/3)-b*q_min;
} else {
return 0;
}
}
/**
* I_(stock,h)为台区一周内的h次谐波电流95%概率大值I_"inv" ^h%为光伏逆变器第h次的典型谐波电流含有率
* S_pv为拟接入光伏容量此部分需要现场选取好台区后获取。
* k为修正系数徐工提供海南k系数是否需要考虑不同季节台区日照系数。
* 结论【电压等级】为入参I_(stock,h)为台区一周内的h次谐波电流95%概率大值I_"inv" ^h%为光伏逆变器第h次的典型谐波电流含有率
* 为枚举参数k为枚举参数能够计算各次的谐波电流幅值 、 、 ,从而得出 。
*/
public static double calculateITm(double I_cp95, double k, double voltage, double S_pv, double K, double I_inv) {
double term1 = Math.pow(I_cp95, 2);
double term2 = 0, term3 = 0;
if (voltage == 220) {
term2 = Math.pow(k * S_pv * I_inv / 220, 2);
term3 = K * I_cp95 * (k * S_pv * I_inv / 220);
} else if (voltage == 380) {
term2 = Math.pow(k * S_pv * I_inv / 3 * 220, 2);
term3 = K * I_cp95 * (k * S_pv * I_inv / 3 * 220);
} else {
return 0;
}
double sumOfTerms = term1 + term2 + term3;
return Math.sqrt(sumOfTerms);
}
/**
* @Description: evaluateVoltageLevel 根据规则评估配变首端电压等级
* @Param:
* @return: int
* @Author: clam
* @Date: 2024/1/30
*/
public static int evaluateVoltageLevel(double voltage) {
if (voltage <= 235.4) {
return 1; // 安全
} else if (voltage > 235.4 && voltage <= 253.0) {
return 2; // Ⅲ级预警
} else if (voltage > 253.0 && voltage < 260.0) {
return 3; // Ⅱ级预警
} else {
return 4; // Ⅰ级预警
}
}
/**
* @Description: evaluatePowerFactorLevel // 根据规则评估功率因数等级
* @Param:
* @return: int
* @Author: clam
* @Date: 2024/1/30
*/
public static int evaluatePowerFactorLevel(double powerFactor) {
if (powerFactor >= 0.9) {
return 1; // 安全
} else if (powerFactor >= 0.85 && powerFactor < 0.9) {
return 2; // Ⅲ级预警
} else if (powerFactor >= 0.8 && powerFactor < 0.85) {
return 3; // Ⅱ级预警
} else {
return 4; // Ⅰ级预警
}
}
/**
* @Description: / 根据规则评估等效负载率等级
* @Param:
* @return: int
* @Author: clam
* @Date: 2024/1/30
*/
public static int evaluateEquivalentLoadRateLevel(double equivalentLoadRate) {
if (equivalentLoadRate >= 0.0) {
return 1; // 安全
} else if (equivalentLoadRate >= -40.0 && equivalentLoadRate < 0.0) {
return 2; // Ⅲ级预警
} else if (equivalentLoadRate >= -80.0 && equivalentLoadRate < -40.0) {
return 3; // Ⅱ级预警
} else {
return 4; // Ⅰ级预警
}
}
/**
* @Description: 判断O:各项指标是否均为“安全” 安全接入
* 判断2: 至多2项指标达到“III级预警”其余指标均为“安全” 3接入预警
* @: 超过2项指标达到“III级预警”且无“II级预警”及以上的指标:或至多1项指标达到“I 级预警且其余指标均为“安全” 2接入预警
* 判断@: 至多2项指标达到“II 级预警”且其余指标均为“安全”: 或至多1项指标达到“II级预警”且其余指标存在“III级预警” 1级接入预警
* 否则 限制接入
* @Param:
* @return:
* @Author: clam
* @Date: 2024/1/30
*/
public static int evaluateG(List<Integer> indicators) {
long count1 = indicators.stream().filter(i -> i == 1).count();
long count2 = indicators.stream().filter(i -> i == 2).count();
long count3 = indicators.stream().filter(i -> i == 3).count();
if (count1 == 4) {
return 1;
} else if (count2 <= 2 && count2 + count1 == 4) {
return 2;
} else if ((count2 >= 2 && count2 + count1 == 4) || (count3 == 1 && count1 == 3)) {
return 3;
} else if ((count3 <= 2 && count1 + count3 == 4) || (count3 == 1 && count2 >= 1 && count1 + count2 == 3)) {
return 4;
} else {
return 5;
}
}
/**
* 计算一组数据的最大95概率值最小95概率值 入参一组double集合一个flag表示计算类型 返回double
*
* @param data
* @param type 0 最大95概率值 1 最小95概率值
* @return
*/
public static double calculatePercentile(List<Double> data, Integer type) {
// 对数组进行排序
// 正序排序
Collections.sort(data);
int index =0;
if (type == 0) {
// 计算最大95%概率值的索引
index =(int) Math.ceil(0.95 * data.size()) ;
} else if (type == 1) {
// 计算最小95%概率值的索引
index = (int) Math.ceil(0.05 * data.size()) - 1;
}
// 根据计算类型返回相应的值
return data.get(index);
}
}

View File

@@ -10,6 +10,9 @@ package com.njcn.advance.utils;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import java.lang.reflect.Field;
import java.time.Instant;
import java.time.LocalTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -99,4 +102,34 @@ public class Utils {
} }
return result; return result;
} }
// 辅助方法:检查时间是否在指定范围内
public static boolean isTimeInRange(Instant instant, LocalTime startTime, LocalTime endTime) {
LocalTime localTime = instant.atZone(Instant.now().atZone(java.time.ZoneId.systemDefault()).getZone()).toLocalTime();
return !localTime.isBefore(startTime) && !localTime.isAfter(endTime);
}
public static <T> List<Double> getAttributeValueByPropertyName(List<T> list, String propertyName) {
List<Double> resultList = new ArrayList<>();
for (T item : list) {
try {
Field field = item.getClass().getDeclaredField(propertyName);
field.setAccessible(true);
resultList.add((Double) field.get(item));
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
}
return resultList;
}
public static <T> Double getAttributeValueByPropertyName(T item, String propertyName) {
Double result = null;
try {
Field field = item.getClass().getDeclaredField(propertyName);
field.setAccessible(true);
result=(Double) field.get(item);
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
return result;
}
} }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -2,10 +2,7 @@ package com.njcn.device.biz.utils;
import com.njcn.device.biz.pojo.po.Overlimit; import com.njcn.device.biz.pojo.po.Overlimit;
import com.njcn.system.enums.DicDataEnum; import com.njcn.system.enums.DicDataEnum;
import com.njcn.system.pojo.po.Dic;
import org.springframework.boot.SpringApplication;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
@@ -211,7 +208,13 @@ public class COverlimitUtil {
} }
overlimit.buildIHarm(iHarmTem); overlimit.buildIHarm(iHarmTem);
} }
/**
* @Description: iHarmCalculate
* @Param: protocolCapacity 协议容量 devCapacity设备容量 calCap 短路容量
* @return: float
* @Author: clam
* @Date: 2024/2/4
*/
private static float iHarmCalculate(int nHarm, Float voltageLevel,float protocolCapacity, float devCapacity,float calCap) { private static float iHarmCalculate(int nHarm, Float voltageLevel,float protocolCapacity, float devCapacity,float calCap) {
double tag = calCap*getHarmTag(nHarm,voltageLevel); double tag = calCap*getHarmTag(nHarm,voltageLevel);
Double limit = getHarmonicLimit(nHarm,tag,new BigDecimal(String.valueOf(devCapacity)).doubleValue(),new BigDecimal(String.valueOf(protocolCapacity)).doubleValue()); Double limit = getHarmonicLimit(nHarm,tag,new BigDecimal(String.valueOf(devCapacity)).doubleValue(),new BigDecimal(String.valueOf(protocolCapacity)).doubleValue());

View File

@@ -7,6 +7,8 @@ import com.njcn.device.pq.pojo.vo.TerminalTree;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import java.util.List;
/** /**
* pqs * pqs
* *
@@ -21,4 +23,8 @@ public interface DeviceTreeClient {
*/ */
@GetMapping("/getTerminalTreeForFive") @GetMapping("/getTerminalTreeForFive")
HttpResult<TerminalTree> getTerminalTreeForFive(); HttpResult<TerminalTree> getTerminalTreeForFive();
@GetMapping("getTerminalTree")
HttpResult<List<TerminalTree>> getTerminalTree();
} }

View File

@@ -10,6 +10,8 @@ import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List;
/** /**
* pqs * pqs
* *
@@ -36,6 +38,12 @@ public class DeviceTreeClientFallbackFactory implements FallbackFactory<DeviceTr
throw new BusinessException(finalExceptionEnum); throw new BusinessException(finalExceptionEnum);
} }
@Override
public HttpResult<List<TerminalTree>> getTerminalTree() {
log.error("{}异常,降级处理,异常为:{}","获取终端树",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
}; };
} }

View File

@@ -1,8 +1,10 @@
package com.njcn.influx.imapper; package com.njcn.influx.imapper;
import com.njcn.influx.ano.Param;
import com.njcn.influx.ano.Select;
import com.njcn.influx.base.InfluxDbBaseMapper; import com.njcn.influx.base.InfluxDbBaseMapper;
import com.njcn.influx.pojo.bo.CarryCapcityData;
import com.njcn.influx.pojo.po.DataHarmPowerP; import com.njcn.influx.pojo.po.DataHarmPowerP;
import com.njcn.influx.pojo.po.DataV;
import com.njcn.influx.query.InfluxQueryWrapper; import com.njcn.influx.query.InfluxQueryWrapper;
import java.util.List; import java.util.List;
@@ -15,4 +17,7 @@ import java.util.List;
public interface DataHarmPowerPMapper extends InfluxDbBaseMapper<DataHarmPowerP> { public interface DataHarmPowerPMapper extends InfluxDbBaseMapper<DataHarmPowerP> {
List<DataHarmPowerP> getStatisticsByWraper(InfluxQueryWrapper influxQueryWrapper); List<DataHarmPowerP> getStatisticsByWraper(InfluxQueryWrapper influxQueryWrapper);
@Select(value = "#{sql}",resultType = CarryCapcityData.class)
List<CarryCapcityData> getSqlResult(@Param("sql")String sql);
} }

View File

@@ -1,6 +1,9 @@
package com.njcn.influx.imapper; package com.njcn.influx.imapper;
import com.njcn.influx.ano.Param;
import com.njcn.influx.ano.Select;
import com.njcn.influx.base.InfluxDbBaseMapper; import com.njcn.influx.base.InfluxDbBaseMapper;
import com.njcn.influx.pojo.bo.CarryCapcityData;
import com.njcn.influx.pojo.po.DataHarmPowerQ; import com.njcn.influx.pojo.po.DataHarmPowerQ;
import com.njcn.influx.query.InfluxQueryWrapper; import com.njcn.influx.query.InfluxQueryWrapper;
@@ -14,5 +17,6 @@ import java.util.List;
public interface DataHarmPowerQMapper extends InfluxDbBaseMapper<DataHarmPowerQ> { public interface DataHarmPowerQMapper extends InfluxDbBaseMapper<DataHarmPowerQ> {
List<DataHarmPowerQ> getStatisticsByWraper(InfluxQueryWrapper influxQueryWrapper); List<DataHarmPowerQ> getStatisticsByWraper(InfluxQueryWrapper influxQueryWrapper);
@Select(value = "#{sql}",resultType = CarryCapcityData.class)
List<CarryCapcityData> getSqlResult(@Param("sql")String sql);
} }

View File

@@ -1,6 +1,9 @@
package com.njcn.influx.imapper; package com.njcn.influx.imapper;
import com.njcn.influx.ano.Param;
import com.njcn.influx.ano.Select;
import com.njcn.influx.base.InfluxDbBaseMapper; import com.njcn.influx.base.InfluxDbBaseMapper;
import com.njcn.influx.pojo.bo.CarryCapcityData;
import com.njcn.influx.pojo.bo.MeasurementCount; import com.njcn.influx.pojo.bo.MeasurementCount;
import com.njcn.influx.pojo.po.DataV; import com.njcn.influx.pojo.po.DataV;
import com.njcn.influx.query.InfluxQueryWrapper; import com.njcn.influx.query.InfluxQueryWrapper;
@@ -19,5 +22,6 @@ public interface DataVMapper extends InfluxDbBaseMapper<DataV> {
List<DataV> getStatisticsByWraper(InfluxQueryWrapper influxQueryWrapper); List<DataV> getStatisticsByWraper(InfluxQueryWrapper influxQueryWrapper);
List<MeasurementCount> getMeasurementCount(InfluxQueryWrapper influxQueryWrapper); List<MeasurementCount> getMeasurementCount(InfluxQueryWrapper influxQueryWrapper);
@Select(value = "#{sql}",resultType = CarryCapcityData.class)
List<CarryCapcityData> getSqlResult(@Param("sql")String sql);
} }

View File

@@ -1,5 +1,7 @@
package com.njcn.influx.imapper; package com.njcn.influx.imapper;
import com.njcn.influx.ano.Param;
import com.njcn.influx.ano.Select;
import com.njcn.influx.base.InfluxDbBaseMapper; import com.njcn.influx.base.InfluxDbBaseMapper;
import com.njcn.influx.pojo.dto.HarmData; import com.njcn.influx.pojo.dto.HarmData;
import com.njcn.influx.pojo.po.DataI; import com.njcn.influx.pojo.po.DataI;
@@ -19,4 +21,7 @@ public interface IDataIMapper extends InfluxDbBaseMapper<DataI> {
List<HarmData> getIHistoryData(InfluxQueryWrapper influxQueryWrapper); List<HarmData> getIHistoryData(InfluxQueryWrapper influxQueryWrapper);
List<DataI> getStatisticsByWraper(InfluxQueryWrapper influxQueryWrapper); List<DataI> getStatisticsByWraper(InfluxQueryWrapper influxQueryWrapper);
@Select(value = "#{sql}",resultType = DataI.class)
List<DataI> getSqlResult(@Param("sql")String sql);
} }

View File

@@ -0,0 +1,38 @@
package com.njcn.influx.pojo.bo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.njcn.influx.utils.InstantDateSerializer;
import lombok.Data;
import org.influxdb.annotation.Column;
import java.time.Instant;
/**
* 类的介绍:
*
* @author xuyang
* @version 1.0.0
* @createTime 2022/5/12 9:13
*/
@Data
public class CarryCapcityData {
@Column(name = "time")
@JsonSerialize(using = InstantDateSerializer.class)
private Instant time;
@Column(name = "line_id")
private String lineId;
@Column(name = "phasic_type")
private String phaseType;
@Column(name = "quality_flag")
private String qualityFlag;
@Column(name = "value_type")
private String valueType;
private Double value;
}

View File

@@ -28,16 +28,16 @@ public class DataFluc {
@Column(name = "fluccf") @Column(name = "fluccf")
private Double fluccf; private Double fluccf;
@Column(name = "line_id") @Column(name = "line_id",tag = true)
private String lineId; private String lineId;
@Column(name = "phasic_type") @Column(name = "phasic_type",tag = true)
private String phaseType; private String phaseType;
@Column(name = "quality_flag") @Column(name = "quality_flag",tag = true)
private String qualityFlag; private String qualityFlag;
@Column(name = "value_type") @Column(name = "value_type",tag = true)
private String valueType; private String valueType;
} }

View File

@@ -22,16 +22,16 @@ public class DataHarmPhasicI {
@JsonSerialize(using = InstantDateSerializer.class) @JsonSerialize(using = InstantDateSerializer.class)
private Instant time; private Instant time;
@Column(name = "line_id") @Column(name = "line_id",tag = true)
private String lineId; private String lineId;
@Column(name = "phasic_type") @Column(name = "phasic_type",tag = true)
private String phaseType; private String phaseType;
@Column(name = "quality_flag") @Column(name = "quality_flag",tag = true)
private String qualityFlag; private String qualityFlag;
@Column(name = "value_type") @Column(name = "value_type",tag = true)
private String valueType; private String valueType;
@Column(name = "i_1") @Column(name = "i_1")

View File

@@ -23,16 +23,16 @@ public class DataHarmPowerP {
@JsonSerialize(using = InstantDateSerializer.class) @JsonSerialize(using = InstantDateSerializer.class)
private Instant time; private Instant time;
@Column(name = "line_id") @Column(name = "line_id",tag = true)
private String lineId; private String lineId;
@Column(name = "phasic_type") @Column(name = "phasic_type",tag = true)
private String phaseType; private String phaseType;
@Column(name = "quality_flag") @Column(name = "quality_flag",tag = true)
private String qualityFlag; private String qualityFlag;
@Column(name = "value_type") @Column(name = "value_type",tag = true)
private String valueType; private String valueType;
@Column(name = "df") @Column(name = "df")

View File

@@ -23,18 +23,19 @@ public class DataHarmPowerQ {
@JsonSerialize(using = InstantDateSerializer.class) @JsonSerialize(using = InstantDateSerializer.class)
private Instant time; private Instant time;
@Column(name = "line_id") @Column(name = "line_id", tag = true)
private String lineId; private String lineId;
@Column(name = "phasic_type") @Column(name = "phasic_type", tag = true)
private String phaseType; private String phaseType;
@Column(name = "quality_flag") @Column(name = "quality_flag", tag = true)
private String qualityFlag; private String qualityFlag;
@Column(name = "value_type") @Column(name = "value_type", tag = true)
private String valueType; private String valueType;
@Column(name = "q") @Column(name = "q")
private Double q; private Double q;

View File

@@ -23,16 +23,16 @@ public class DataHarmPowerS {
@JsonSerialize(using = InstantDateSerializer.class) @JsonSerialize(using = InstantDateSerializer.class)
private Instant time; private Instant time;
@Column(name = "line_id") @Column(name = "line_id",tag = true)
private String lineId; private String lineId;
@Column(name = "phasic_type") @Column(name = "phasic_type",tag = true)
private String phaseType; private String phaseType;
@Column(name = "quality_flag") @Column(name = "quality_flag",tag = true)
private String qualityFlag; private String qualityFlag;
@Column(name = "value_type") @Column(name = "value_type",tag = true)
private String valueType; private String valueType;
@Column(name = "s") @Column(name = "s")

View File

@@ -20,16 +20,16 @@ public class DataInHarmRateI {
@Column(name = "time") @Column(name = "time")
private Instant time; private Instant time;
@Column(name = "line_id") @Column(name = "line_id",tag = true)
private String lineId; private String lineId;
@Column(name = "phasic_type") @Column(name = "phasic_type",tag = true)
private String phaseType; private String phaseType;
@Column(name = "quality_flag") @Column(name = "quality_flag",tag = true)
private String qualityFlag; private String qualityFlag;
@Column(name = "value_type") @Column(name = "value_type",tag = true)
private String valueType; private String valueType;
@Column(name = "i_1") @Column(name = "i_1")

View File

@@ -0,0 +1,15 @@
package com.njcn.influx.service;
import com.njcn.influx.pojo.po.DataHarmPowerQ;
import java.util.List;
/**
* @author hongawen
* @version 1.0.0
* @date 2023年05月05日 09:51
*/
public interface DataHarmPowerQService {
List<DataHarmPowerQ> getHarmonicPowerQ(String lineIndex, String startTime, String endTime);
}

View File

@@ -3,6 +3,8 @@ package com.njcn.influx.service;
import com.njcn.influx.pojo.po.DataI; import com.njcn.influx.pojo.po.DataI;
import com.njcn.influx.query.InfluxQueryWrapper; import com.njcn.influx.query.InfluxQueryWrapper;
import java.util.List;
/** /**
* @author hongawen * @author hongawen
* @version 1.0.0 * @version 1.0.0
@@ -11,4 +13,12 @@ import com.njcn.influx.query.InfluxQueryWrapper;
public interface IDataIService { public interface IDataIService {
DataI getMeanAllTimesData(InfluxQueryWrapper influxQueryWrapper); DataI getMeanAllTimesData(InfluxQueryWrapper influxQueryWrapper);
/**
* @Description: getWeekDataI 承载能力评估获取一周数据
* @Param:
* @return: java.util.List<com.njcn.influx.pojo.po.DataI>
* @Author: clam
* @Date: 2024/2/27
*/
List<DataI> getWeekDataI(String lineIndex, String startTime, String endTime);
} }

View File

@@ -8,4 +8,5 @@ public interface IDataVService {
List<DataV> getDataV(String lineIndex, String startTime, String endTime); List<DataV> getDataV(String lineIndex, String startTime, String endTime);
List<DataV> getHarmonicDataV(String lineIndex, String startTime, String endTime); List<DataV> getHarmonicDataV(String lineIndex, String startTime, String endTime);
} }

View File

@@ -0,0 +1,35 @@
package com.njcn.influx.service.impl;
import com.njcn.influx.imapper.DataHarmPowerQMapper;
import com.njcn.influx.pojo.po.DataHarmPowerP;
import com.njcn.influx.pojo.po.DataHarmPowerQ;
import com.njcn.influx.query.InfluxQueryWrapper;
import com.njcn.influx.service.DataHarmPowerQService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* Description:
* Date: 2024/2/27 14:50【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
public class DataHarmPowerQServiceImpl implements DataHarmPowerQService {
@Resource
private DataHarmPowerQMapper dataHarmPowerQMapper;
@Override
public List<DataHarmPowerQ> getHarmonicPowerQ(String lineIndex, String startTime, String endTime) {
List<DataHarmPowerQ> result1 ;
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataHarmPowerP.class);
influxQueryWrapper.eq(DataHarmPowerQ::getLineId, lineIndex)
.eq(DataHarmPowerQ::getValueType, "AVG")
.eq(DataHarmPowerQ::getPhaseType, "T")
.between(DataHarmPowerQ::getTime, startTime, endTime);
result1 = dataHarmPowerQMapper.getStatisticsByWraper(influxQueryWrapper);
return result1;
}
}

View File

@@ -61,6 +61,7 @@ public class DataVServiceImpl implements IDataVService {
return result1; return result1;
} }
/*** /***
* 自定义需要查询的谐波次数 * 自定义需要查询的谐波次数
* @author xuyang * @author xuyang

View File

@@ -7,6 +7,8 @@ import com.njcn.influx.service.IDataIService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
/** /**
* @author hongawen * @author hongawen
* @version 1.0.0 * @version 1.0.0
@@ -22,4 +24,17 @@ public class IDataIServiceImpl implements IDataIService {
public DataI getMeanAllTimesData(InfluxQueryWrapper influxQueryWrapper) { public DataI getMeanAllTimesData(InfluxQueryWrapper influxQueryWrapper) {
return dataIMapper.getMeanAllTimesData(influxQueryWrapper); return dataIMapper.getMeanAllTimesData(influxQueryWrapper);
} }
@Override
public List<DataI> getWeekDataI(String lineIndex, String startTime, String endTime) {
List<DataI> result1 ;
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataI.class);
influxQueryWrapper
.eq(DataI::getLineId, lineIndex)
.eq(DataI::getValueType, "CP95")
.ne(DataI::getPhaseType, "T")
.between(DataI::getTime, startTime, endTime);;
result1 = dataIMapper.getStatisticsByWraper(influxQueryWrapper);
return result1;
}
} }