diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RStatOrgMPO.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RStatOrgMPO.java
index f80969668..22dfd0574 100644
--- a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RStatOrgMPO.java
+++ b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/po/RStatOrgMPO.java
@@ -56,7 +56,7 @@ public class RStatOrgMPO {
* 日均有效接入监测点数
*/
@TableField(value = "effective_measurement_average")
- private Float effectiveMeasurementAverage;
+ private Double effectiveMeasurementAverage;
/**
* 累计有效接入监测点数
@@ -68,7 +68,7 @@ public class RStatOrgMPO {
* 日均稳态超标监测点数
*/
@TableField(value = "harmonic_measurement_average")
- private Float harmonicMeasurementAverage;
+ private Double harmonicMeasurementAverage;
/**
* 累计稳态超标监测点数
@@ -110,7 +110,7 @@ public class RStatOrgMPO {
* 日均监测到暂态指标的监测点数
*/
@TableField(value = "event_measurement_average")
- private Float eventMeasurementAverage;
+ private Double eventMeasurementAverage;
/**
* 累计监测到暂态指标的监测点数
diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/RStatHarmonicMPO.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/RStatHarmonicMPO.java
new file mode 100644
index 000000000..632afe2fb
--- /dev/null
+++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/RStatHarmonicMPO.java
@@ -0,0 +1,82 @@
+package com.njcn.prepare.harmonic.pojo.mysql.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.util.Date;
+
+import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
+import lombok.Data;
+
+/**
+ *
+ * Description:
+ * Date: 2023/6/7 16:10【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+@Data
+@TableName(value = "r_stat_harmonic_m")
+public class RStatHarmonicMPO {
+ /**
+ * 单位ID
+ */
+ @MppMultiId(value = "org_no")
+ private String orgNo;
+
+ /**
+ * 生成数据的时间,每月统计一次
+ */
+ @MppMultiId(value = "data_date")
+ private Date dataDate;
+
+ /**
+ * 监测点类别ID、监测对象类型ID
+ */
+ @MppMultiId(value = "measurement_type_class")
+ private String measurementTypeClass;
+
+ /**
+ * 稳态指标类型Id,字典表ID
+ */
+ @MppMultiId(value = "harmonic_type")
+ private String harmonicType;
+
+ /**
+ * 数据类型,字典表(01:主网测点 02:配网测点)
+ */
+ @MppMultiId(value = "data_type")
+ private String dataType;
+
+ /**
+ * 日均超标监测点数(根据 日表的超标监测点数 取平均值)
+ */
+ @TableField(value = "over_limit_measurement_average")
+ private Double overLimitMeasurementAverage;
+
+ /**
+ * 累计超标监测点数(监测点指标统计明细日表 统计)
+ */
+ @TableField(value = "over_limit_measurement_accrued")
+ private Integer overLimitMeasurementAccrued;
+
+ /**
+ * 累计超标天数(根据 日表的超标监测点数 求和)
+ */
+ @TableField(value = "over_day")
+ private Integer overDay;
+
+ /**
+ * 日均超标监测点数占比(根据 日表的超标监测点数占比 取平均值)
+ */
+ @TableField(value = "over_limit_measurement_ratio_average")
+ private Double overLimitMeasurementRatioAverage;
+
+ /**
+ * 累计超标监测点数占比(此表的累计超标监测点数/区域统计表中的区域分类统计月表中的累计有效接入监测点数)
+ */
+ @TableField(value = "over_limit_measurement_ratio_accrued")
+ private Double overLimitMeasurementRatioAccrued;
+}
\ No newline at end of file
diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/RStatHarmonicQPO.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/RStatHarmonicQPO.java
new file mode 100644
index 000000000..6334c1372
--- /dev/null
+++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/RStatHarmonicQPO.java
@@ -0,0 +1,82 @@
+package com.njcn.prepare.harmonic.pojo.mysql.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.util.Date;
+
+import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
+import lombok.Data;
+
+/**
+ *
+ * Description:
+ * Date: 2023/6/7 16:11【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+@Data
+@TableName(value = "r_stat_harmonic_q")
+public class RStatHarmonicQPO {
+ /**
+ * 单位ID
+ */
+ @MppMultiId(value = "org_no")
+ private String orgNo;
+
+ /**
+ * 生成数据的时间,每季度统计一次
+ */
+ @MppMultiId(value = "data_date")
+ private Date dataDate;
+
+ /**
+ * 监测点类别ID、监测对象类型ID
+ */
+ @MppMultiId(value = "measurement_type_class")
+ private String measurementTypeClass;
+
+ /**
+ * 稳态指标类型Id,字典表ID
+ */
+ @MppMultiId(value = "harmonic_type")
+ private String harmonicType;
+
+ /**
+ * 数据类型,字典表(01:主网测点 02:配网测点)
+ */
+ @MppMultiId(value = "data_type")
+ private String dataType;
+
+ /**
+ * 日均超标监测点数(根据 日表的超标监测点数 取平均值)
+ */
+ @TableField(value = "over_limit_measurement_average")
+ private Integer overLimitMeasurementAverage;
+
+ /**
+ * 累计超标监测点数(监测点指标统计明细日表 统计)
+ */
+ @TableField(value = "over_limit_measurement_accrued")
+ private Integer overLimitMeasurementAccrued;
+
+ /**
+ * 平均超标天数(月表的累计超标天数之和/月表的累计超标监测点数之和)
+ */
+ @TableField(value = "average_over_day")
+ private Double averageOverDay;
+
+ /**
+ * 日均超标监测点数占比(根据 日表的超标监测点数占比 取平均值)
+ */
+ @TableField(value = "over_limit_measurement_ratio_average")
+ private Double overLimitMeasurementRatioAverage;
+
+ /**
+ * 累计超标监测点数占比(此表的累计超标监测点数/区域统计表中的区域分类统计季表中的累计有效接入监测点数)
+ */
+ @TableField(value = "over_limit_measurement_ratio_accrued")
+ private Double overLimitMeasurementRatioAccrued;
+}
\ No newline at end of file
diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/RStatHarmonicVoltageD.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/RStatHarmonicVoltageD.java
new file mode 100644
index 000000000..51ddd9bf7
--- /dev/null
+++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/RStatHarmonicVoltageD.java
@@ -0,0 +1,68 @@
+package com.njcn.prepare.harmonic.pojo.mysql.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.util.Date;
+import lombok.Data;
+
+/**
+ *
+ * Description:
+ * Date: 2023/6/6 9:10【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+@Data
+@TableName(value = "r_stat_harmonic_voltage_d")
+public class RStatHarmonicVoltageD {
+ /**
+ * 单位ID
+ */
+ @TableId(value = "org_no", type = IdType.ASSIGN_UUID)
+ private String orgNo;
+
+ /**
+ * 生成数据的时间,每月统计一次
+ */
+ @TableId(value = "data_date", type = IdType.ASSIGN_UUID)
+ private Date dataDate;
+
+ /**
+ * 监测对象类型ID
+ */
+ @TableId(value = "measurement_type_class", type = IdType.ASSIGN_UUID)
+ private String measurementTypeClass;
+
+ /**
+ * 稳态指标类型Id,字典表ID
+ */
+ @TableId(value = "harmonic_type", type = IdType.ASSIGN_UUID)
+ private String harmonicType;
+
+ /**
+ * 电压等级Id,字典表ID
+ */
+ @TableId(value = "voltage_type", type = IdType.ASSIGN_UUID)
+ private String voltageType;
+
+ /**
+ * 数据类型,字典表(01:主网测点 02:配网测点)
+ */
+ @TableId(value = "data_type", type = IdType.ASSIGN_UUID)
+ private String dataType;
+
+ /**
+ * 超标监测点数
+ */
+ @TableField(value = "over_limit_measurement_average")
+ private Integer overLimitMeasurementAverage;
+
+ /**
+ * 超标监测点数占比
+ */
+ @TableField(value = "over_limit_measurement_ratio_average")
+ private Float overLimitMeasurementRatioAverage;
+}
\ No newline at end of file
diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/RStatHarmonicVoltageDPO.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/RStatHarmonicVoltageDPO.java
new file mode 100644
index 000000000..e419fb370
--- /dev/null
+++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/RStatHarmonicVoltageDPO.java
@@ -0,0 +1,70 @@
+package com.njcn.prepare.harmonic.pojo.mysql.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.util.Date;
+
+import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
+import lombok.Data;
+
+/**
+ *
+ * Description:
+ * Date: 2023/6/6 9:10【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+@Data
+@TableName(value = "r_stat_harmonic_voltage_d")
+public class RStatHarmonicVoltageDPO {
+ /**
+ * 单位ID
+ */
+ @MppMultiId(value = "org_no")
+ private String orgNo;
+
+ /**
+ * 生成数据的时间,每月统计一次
+ */
+ @MppMultiId(value = "data_date")
+ private Date dataDate;
+
+ /**
+ * 监测对象类型ID
+ */
+ @MppMultiId(value = "measurement_type_class")
+ private String measurementTypeClass;
+
+ /**
+ * 稳态指标类型Id,字典表ID
+ */
+ @MppMultiId(value = "harmonic_type")
+ private String harmonicType;
+
+ /**
+ * 电压等级Id,字典表ID
+ */
+ @MppMultiId(value = "voltage_type")
+ private String voltageType;
+
+ /**
+ * 数据类型,字典表(01:主网测点 02:配网测点)
+ */
+ @MppMultiId(value = "data_type")
+ private String dataType;
+
+ /**
+ * 超标监测点数
+ */
+ @TableField(value = "over_limit_measurement_average")
+ private Integer overLimitMeasurementAverage;
+
+ /**
+ * 超标监测点数占比
+ */
+ @TableField(value = "over_limit_measurement_ratio_average")
+ private Double overLimitMeasurementRatioAverage;
+}
\ No newline at end of file
diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/RStatHarmonicYPO.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/RStatHarmonicYPO.java
new file mode 100644
index 000000000..056bc69c4
--- /dev/null
+++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/RStatHarmonicYPO.java
@@ -0,0 +1,82 @@
+package com.njcn.prepare.harmonic.pojo.mysql.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.util.Date;
+
+import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
+import lombok.Data;
+
+/**
+ *
+ * Description:
+ * Date: 2023/6/7 16:11【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+@Data
+@TableName(value = "r_stat_harmonic_y")
+public class RStatHarmonicYPO {
+ /**
+ * 单位ID
+ */
+ @MppMultiId(value = "org_no")
+ private String orgNo;
+
+ /**
+ * 生成数据的时间,每季度统计一次
+ */
+ @MppMultiId(value = "data_date")
+ private Date dataDate;
+
+ /**
+ * 监测点类别ID、监测对象类型ID
+ */
+ @MppMultiId(value = "measurement_type_class")
+ private String measurementTypeClass;
+
+ /**
+ * 稳态指标类型Id,字典表ID
+ */
+ @MppMultiId(value = "harmonic_type")
+ private String harmonicType;
+
+ /**
+ * 数据类型,字典表(01:主网测点 02:配网测点)
+ */
+ @MppMultiId(value = "data_type")
+ private String dataType;
+
+ /**
+ * 日均超标监测点数(根据 日表的超标监测点数 取平均值)
+ */
+ @TableField(value = "over_limit_measurement_average")
+ private Integer overLimitMeasurementAverage;
+
+ /**
+ * 累计超标监测点数(监测点指标统计明细日表 统计)
+ */
+ @TableField(value = "over_limit_measurement_accrued")
+ private Integer overLimitMeasurementAccrued;
+
+ /**
+ * 平均超标天数(月表的累计超标天数之和/月表的累计超标监测点数之和)
+ */
+ @TableField(value = "average_over_day")
+ private Double averageOverDay;
+
+ /**
+ * 日均超标监测点数占比(根据 日表的超标监测点数占比 取平均值)
+ */
+ @TableField(value = "over_limit_measurement_ratio_average")
+ private Double overLimitMeasurementRatioAverage;
+
+ /**
+ * 累计超标监测点数占比(此表的累计超标监测点数/区域统计表中的区域分类统计季表中的累计有效接入监测点数)
+ */
+ @TableField(value = "over_limit_measurement_ratio_accrued")
+ private Double overLimitMeasurementRatioAccrued;
+}
\ No newline at end of file
diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/RStatOrgQPO.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/RStatOrgQPO.java
new file mode 100644
index 000000000..513487ca9
--- /dev/null
+++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/RStatOrgQPO.java
@@ -0,0 +1,148 @@
+package com.njcn.prepare.harmonic.pojo.mysql.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.util.Date;
+
+import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
+import lombok.Data;
+
+/**
+ *
+ * Description:
+ * Date: 2023/6/20 11:43【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+@Data
+@TableName(value = "r_stat_org_q")
+public class RStatOrgQPO {
+ /**
+ * 单位ID
+ */
+ @MppMultiId(value = "org_no")
+ private String orgNo;
+
+ /**
+ * 生成数据的时间,每季统计一次
+ */
+ @MppMultiId(value = "data_date")
+ private Date dataDate;
+
+ /**
+ * 监测点类别ID、监测对象类型ID
+ */
+ @MppMultiId(value = "measurement_type_class")
+ private String measurementTypeClass;
+
+ /**
+ * 总监测点数
+ */
+ @TableField(value = "all_count")
+ private Integer allCount;
+
+ /**
+ * 日均有效接入监测点数
+ */
+ @TableField(value = "effective_measurement_average")
+ private Double effectiveMeasurementAverage;
+
+ /**
+ * 累计有效接入监测点数
+ */
+ @TableField(value = "effective_measurement_accrued")
+ private Integer effectiveMeasurementAccrued;
+
+ /**
+ * 日均稳态超标监测点数
+ */
+ @TableField(value = "harmonic_measurement_average")
+ private Double harmonicMeasurementAverage;
+
+ /**
+ * 累计稳态超标监测点数
+ */
+ @TableField(value = "harmonic_measurement_accrued")
+ private Integer harmonicMeasurementAccrued;
+
+ /**
+ * 日均稳态超标监测点数占比
+ */
+ @TableField(value = "harmonic_measurement_ratio_average")
+ private Double harmonicMeasurementRatioAverage;
+
+ /**
+ * 稳态指标平均超标天数
+ */
+ @TableField(value = "average_over_day")
+ private Double averageOverDay;
+
+ /**
+ * 频率偏差合格率
+ */
+ @TableField(value = "freq_pass_rate")
+ private Double freqPassRate;
+
+ /**
+ * 电压偏差合格率
+ */
+ @TableField(value = "v_dev_pass_rate")
+ private Double vDevPassRate;
+
+ /**
+ * 闪变合格率
+ */
+ @TableField(value = "flicker_pass_rate")
+ private Double flickerPassRate;
+
+ /**
+ * 日均监测到暂态指标的监测点数
+ */
+ @TableField(value = "event_measurement_average")
+ private Double eventMeasurementAverage;
+
+ /**
+ * 累计监测到暂态指标的监测点数
+ */
+ @TableField(value = "event_measurement_accrued")
+ private Integer eventMeasurementAccrued;
+
+ /**
+ * 日均暂态超标监测点数占比
+ */
+ @TableField(value = "event_measurement_ratio_average")
+ private Double eventMeasurementRatioAverage;
+
+ /**
+ * 暂态指标发生频次
+ */
+ @TableField(value = "event_freq")
+ private Double eventFreq;
+
+ /**
+ * 暂态指标发生次数
+ */
+ @TableField(value = "event_count")
+ private Integer eventCount;
+
+ /**
+ * 应设点数
+ */
+ @TableField(value = "should_count")
+ private Integer shouldCount;
+
+ /**
+ * 告警监测点数
+ */
+ @TableField(value = "warn_count")
+ private Integer warnCount;
+
+ /**
+ * 数据类型,字典表(01:主网测点 02:配网测点)
+ */
+ @MppMultiId(value = "data_type")
+ private String dataType;
+}
\ No newline at end of file
diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/RStatOrgYPO.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/RStatOrgYPO.java
new file mode 100644
index 000000000..4ca8b711d
--- /dev/null
+++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/RStatOrgYPO.java
@@ -0,0 +1,146 @@
+package com.njcn.prepare.harmonic.pojo.mysql.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.util.Date;
+
+import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
+import lombok.Data;
+
+/**
+ *
+ * Description:
+ * Date: 2023/6/20 11:43【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+@Data
+@TableName(value = "r_stat_org_y")
+public class RStatOrgYPO {
+ /**
+ * 单位ID
+ */
+ @MppMultiId(value = "org_no")
+ private String orgNo;
+
+ /**
+ * 生成数据的时间,每年统计一次
+ */
+ @MppMultiId(value = "data_date")
+ private Date dataDate;
+
+ /**
+ * 监测点类别ID、监测对象类型ID
+ */
+ @MppMultiId(value = "measurement_type_class")
+ private String measurementTypeClass;
+
+ /**
+ * 数据类型,字典表(01:主网测点 02:配网测点)
+ */
+ @MppMultiId(value = "data_type")
+ private String dataType;
+
+ /**
+ * 总监测点数
+ */
+ @TableField(value = "all_count")
+ private Integer allCount;
+
+ /**
+ * 日均有效接入监测点数
+ */
+ @TableField(value = "effective_measurement_average")
+ private Double effectiveMeasurementAverage;
+
+ /**
+ * 累计有效接入监测点数
+ */
+ @TableField(value = "effective_measurement_accrued")
+ private Integer effectiveMeasurementAccrued;
+
+ /**
+ * 日均稳态超标监测点数
+ */
+ @TableField(value = "over_limit_measurement_average")
+ private Double overLimitMeasurementAverage;
+
+ /**
+ * 累计稳态超标监测点数
+ */
+ @TableField(value = "over_limit_measurement_accrued")
+ private Integer overLimitMeasurementAccrued;
+
+ /**
+ * 日均稳态超标监测点数占比
+ */
+ @TableField(value = "harmonic_measurement_ratio_average")
+ private Double harmonicMeasurementRatioAverage;
+
+ /**
+ * 稳态指标平均超标天数
+ */
+ @TableField(value = "average_over_day")
+ private Double averageOverDay;
+
+ /**
+ * 频率偏差合格率
+ */
+ @TableField(value = "freq_pass_rate")
+ private Double freqPassRate;
+
+ /**
+ * 电压偏差合格率
+ */
+ @TableField(value = "v_dev_pass_rate")
+ private Double vDevPassRate;
+
+ /**
+ * 闪变合格率
+ */
+ @TableField(value = "flicker_pass_rate")
+ private Double flickerPassRate;
+
+ /**
+ * 日均监测到暂态指标的监测点数
+ */
+ @TableField(value = "event_measurement_average")
+ private Double eventMeasurementAverage;
+
+ /**
+ * 累计监测到暂态指标的监测点数
+ */
+ @TableField(value = "event_measurement_accrued")
+ private Integer eventMeasurementAccrued;
+
+ /**
+ * 日均暂态超标监测点数占比
+ */
+ @TableField(value = "event_measurement_ratio_average")
+ private Double eventMeasurementRatioAverage;
+
+ /**
+ * 暂态指标发生频次
+ */
+ @TableField(value = "event_freq")
+ private Double eventFreq;
+
+ /**
+ * 暂态指标发生次数
+ */
+ @TableField(value = "event_count")
+ private Integer eventCount;
+
+ /**
+ * 应设点数
+ */
+ @TableField(value = "should_count")
+ private Integer shouldCount;
+
+ /**
+ * 告警监测点数
+ */
+ @TableField(value = "warn_count")
+ private Integer warnCount;
+}
\ No newline at end of file
diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/po/RStatOrgQPO.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/po/RStatOrgQPO.java
deleted file mode 100644
index a926e0e5d..000000000
--- a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/po/RStatOrgQPO.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package com.njcn.prepare.harmonic.pojo.po;
-
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
-import lombok.Data;
-
-import java.time.LocalDate;
-
-/**
- *
- * 区域分类统计季表
- *
- *
- * @author zbj
- * @since 2023-06-09
- */
-@Data
-@TableName("r_stat_org_q")
-public class RStatOrgQPO {
-
- @MppMultiId(value = "org_no")
- private String orgNo;
-
- @MppMultiId(value = "data_date")
- private LocalDate dataDate;
-
- @MppMultiId(value = "measurement_type_class")
- private String measurementTypeClass;
-
- @TableField(value = "all_count")
- private Integer allCount;
-
- @TableField(value = "effective_measurement_average")
- private Integer effectiveMeasurementAverage;
-
- @TableField(value = "effective_measurement_accrued")
- private Integer effectiveMeasurementAccrued;
-
- @TableField(value = "harmonic_measurement_average")
- private Integer harmonicMeasurementAverage;
-
- @TableField(value = "harmonic_measurement_accrued")
- private Integer harmonicMeasurementAccrued;
-
- @TableField(value = "harmonic_measurement_ratio_average")
- private Float harmonicMeasurementRatioAverage;
-
- @TableField(value = "average_over_day")
- private Float averageOverDay;
-
- @TableField(value = "freq_pass_rate")
- private Float freqPassRate;
-
- @TableField(value = "v_dev_pass_rate")
- private Float vDevPassRate;
-
- @TableField(value = "flicker_pass_rate")
- private Float flickerPassRate;
-
- @TableField(value = "event_measurement_average")
- private Integer eventMeasurementAverage;
-
- @TableField(value = "event_measurement_accrued")
- private Integer eventMeasurementAccrued;
-
- @TableField(value = "event_measurement_average")
- private Float eventMeasurementRatioAverage;
-
- @TableField(value = "event_freq")
- private Float eventFreq;
-
- @TableField(value = "event_count")
- private Integer eventCount;
-
- @TableField(value = "should_count")
- private Integer shouldCount;
-
- @TableField(value = "warn_count")
- private Integer warnCount;
-
- @MppMultiId(value = "data_type")
- private String dataType;
-
-}
diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/po/RStatOrgYPO.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/po/RStatOrgYPO.java
deleted file mode 100644
index e64fdff24..000000000
--- a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/po/RStatOrgYPO.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package com.njcn.prepare.harmonic.pojo.po;
-
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
-import lombok.Data;
-
-import java.time.LocalDate;
-
-/**
- *
- * 区域分类统计季表
- *
- *
- * @author zbj
- * @since 2023-06-09
- */
-@Data
-@TableName("r_stat_org_y")
-public class RStatOrgYPO {
-
- @MppMultiId(value = "org_no")
- private String orgNo;
-
- @MppMultiId(value = "data_date")
- private LocalDate dataDate;
-
- @MppMultiId(value = "measurement_type_class")
- private String measurementTypeClass;
-
- @TableField(value = "all_count")
- private Integer allCount;
-
- @TableField(value = "effective_measurement_average")
- private Integer effectiveMeasurementAverage;
-
- @TableField(value = "effective_measurement_accrued")
- private Integer effectiveMeasurementAccrued;
-
- @TableField(value = "harmonic_measurement_average")
- private Integer harmonicMeasurementAverage;
-
- @TableField(value = "harmonic_measurement_accrued")
- private Integer harmonicMeasurementAccrued;
-
- @TableField(value = "harmonic_measurement_ratio_average")
- private Float harmonicMeasurementRatioAverage;
-
- @TableField(value = "average_over_day")
- private Float averageOverDay;
-
- @TableField(value = "freq_pass_rate")
- private Float freqPassRate;
-
- @TableField(value = "v_dev_pass_rate")
- private Float vDevPassRate;
-
- @TableField(value = "flicker_pass_rate")
- private Float flickerPassRate;
-
- @TableField(value = "event_measurement_average")
- private Integer eventMeasurementAverage;
-
- @TableField(value = "event_measurement_accrued")
- private Integer eventMeasurementAccrued;
-
- @TableField(value = "event_measurement_average")
- private Float eventMeasurementRatioAverage;
-
- @TableField(value = "event_freq")
- private Float eventFreq;
-
- @TableField(value = "event_count")
- private Integer eventCount;
-
- @TableField(value = "should_count")
- private Integer shouldCount;
-
- @TableField(value = "warn_count")
- private Integer warnCount;
-
- @MppMultiId(value = "data_type")
- private String dataType;
-
-}
diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/utils/PublicUtil.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/utils/PublicUtil.java
index 570fe9670..468b426d5 100644
--- a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/utils/PublicUtil.java
+++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/utils/PublicUtil.java
@@ -8,7 +8,9 @@ import com.njcn.system.pojo.po.DictData;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
+import java.time.Month;
import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAdjusters;
import java.util.*;
public class PublicUtil {
@@ -98,13 +100,51 @@ public class PublicUtil {
// System.out.println ( PublicUtil.getNowQuarter ("2002-01-07"));
System.out.println(getDayByMonth(2023,03));
+ LocalDate currentDate = LocalDate.now();
+
+ // 获取当前季度的第一个月份
+ Month firstMonthOfQuarter = currentDate.getMonth().firstMonthOfQuarter();
+
+ // 获取当前季度的最后一个月份
+ Month lastMonthOfQuarter = firstMonthOfQuarter.plus(2);
+
+ // 计算当前季度的总天数
+ int totalDaysInQuarter = 0;
+ for (Month month = firstMonthOfQuarter; !month.equals(lastMonthOfQuarter.plus(1)); month = month.plus(1)) {
+ totalDaysInQuarter += month.length(currentDate.isLeapYear());
+ }
+
+ System.out.println("Total days in the current quarter: " + totalDaysInQuarter);
}
-
/**
- * 根据当前年、月获取每一天日期
- */
+ * @Description: 获取当前日期的当前季度总天数
+ * @Param:
+ * @return: java.lang.Integer
+ * @Author: clam
+ * @Date: 2023/6/6
+ */
+
+ public static Integer getQtrDays(LocalDate currentDate ){
+ Month firstMonthOfQuarter = currentDate.getMonth().firstMonthOfQuarter();
+
+ // 获取当前季度的最后一个月份
+ Month lastMonthOfQuarter = firstMonthOfQuarter.plus(2);
+
+ // 计算当前季度的总天数
+ int totalDaysInQuarter = 0;
+ for (Month month = firstMonthOfQuarter; !month.equals(lastMonthOfQuarter.plus(1)); month = month.plus(1)) {
+ totalDaysInQuarter += month.length(currentDate.isLeapYear());
+ }
+ return totalDaysInQuarter;
+
+ }
+
+
+ /**
+ * 根据当前年、月获取每一天日期
+ */
public static List getDayByMonth(int yearParam, int monthParam){
List list = new ArrayList<>();
Calendar calendar = Calendar.getInstance(Locale.CHINA);
@@ -180,4 +220,6 @@ public class PublicUtil {
}
return null;
}
+
+
}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatHarmonicByPowerLevelController.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatHarmonicByPowerLevelController.java
new file mode 100644
index 000000000..bb9e0081b
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/newalgorithm/RStatHarmonicByPowerLevelController.java
@@ -0,0 +1,75 @@
+package com.njcn.prepare.harmonic.controller.newalgorithm;
+
+import com.njcn.common.pojo.annotation.OperateInfo;
+import com.njcn.common.pojo.constant.ServerInfo;
+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.biz.commApi.CommTerminalGeneralClient;
+import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
+import com.njcn.device.biz.pojo.param.DeptGetLineParam;
+import com.njcn.prepare.harmonic.pojo.param.OrgParam;
+import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicService;
+import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicVoltageService;
+import com.njcn.user.api.DeptFeignClient;
+import com.njcn.user.pojo.po.Dept;
+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 lombok.extern.slf4j.Slf4j;
+import org.springframework.util.StringUtils;
+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.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * Description:
+ * 接口文档访问地址:http://serverIP:port/swagger-ui.html
+ * Date: 2022/12/28 13:47【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+@Slf4j
+@Api(tags = "单位监测点稳态指标统计通过电压等级")
+@RestController
+@RequestMapping("/rstatharmonicbypl")
+@RequiredArgsConstructor
+public class RStatHarmonicByPowerLevelController extends BaseController {
+
+
+ private final RStatHarmonicVoltageService service;
+ private final CommTerminalGeneralClient commTerminalGeneralClient;
+ private final DeptFeignClient deptFeignClient;
+ @OperateInfo(info = LogEnum.BUSINESS_COMMON)
+ @PostMapping("/HandlerByPowerLevel")
+ @ApiOperation("单位监测点稳态指标统计通过电压等级")
+ @ApiImplicitParam(name = "orgParam", value = "参数", required = true)
+ public HttpResult handlerByPowerLevel(@RequestBody @Validated OrgParam orgParam ){
+ log.info(LocalDateTime.now()+"handlerByPowerLevel始执行");
+ String methodDescribe = getMethodDescribe("handlerByPowerLevel");
+ /**
+ * 支持补录
+ */
+ DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
+
+ if(StringUtils.isEmpty(orgParam.getOrgId())){
+ Dept data = deptFeignClient.getRootDept().getData();
+ deptGetLineParam.setDeptId(data.getId());
+ }else {
+ deptGetLineParam.setDeptId(orgParam.getOrgId());
+ }
+ deptGetLineParam.setServerName(ServerInfo.PREPARE_BOOT);
+ List data = commTerminalGeneralClient.deptGetLine(deptGetLineParam).getData();
+ service.handlerByPowerLevel (data,orgParam.getDataDate(),orgParam.getType());
+ return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
+ }
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatHarmonicMPOMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatHarmonicMPOMapper.java
new file mode 100644
index 000000000..7b2629788
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatHarmonicMPOMapper.java
@@ -0,0 +1,16 @@
+package com.njcn.prepare.harmonic.mapper.mysql.area;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicMPO;
+
+/**
+ *
+ * Description:
+ * Date: 2023/6/7 16:10【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+public interface RStatHarmonicMPOMapper extends MppBaseMapper {
+}
\ No newline at end of file
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatHarmonicQPOMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatHarmonicQPOMapper.java
new file mode 100644
index 000000000..4dd6d5c6a
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatHarmonicQPOMapper.java
@@ -0,0 +1,16 @@
+package com.njcn.prepare.harmonic.mapper.mysql.area;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicQPO;
+
+/**
+ *
+ * Description:
+ * Date: 2023/6/7 16:11【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+public interface RStatHarmonicQPOMapper extends MppBaseMapper {
+}
\ No newline at end of file
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatHarmonicVoltageDPOMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatHarmonicVoltageDPOMapper.java
new file mode 100644
index 000000000..48056a469
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatHarmonicVoltageDPOMapper.java
@@ -0,0 +1,16 @@
+package com.njcn.prepare.harmonic.mapper.mysql.area;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicVoltageDPO;
+
+/**
+ *
+ * Description:
+ * Date: 2023/6/6 9:10【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+public interface RStatHarmonicVoltageDPOMapper extends MppBaseMapper {
+}
\ No newline at end of file
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatHarmonicYPOMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatHarmonicYPOMapper.java
new file mode 100644
index 000000000..b487b7d0a
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatHarmonicYPOMapper.java
@@ -0,0 +1,16 @@
+package com.njcn.prepare.harmonic.mapper.mysql.area;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicYPO;
+
+/**
+ *
+ * Description:
+ * Date: 2023/6/7 16:11【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+public interface RStatHarmonicYPOMapper extends MppBaseMapper {
+}
\ No newline at end of file
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatOrgQMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatOrgQMapper.java
index 22eb93b43..f8069c02a 100644
--- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatOrgQMapper.java
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatOrgQMapper.java
@@ -1,7 +1,7 @@
package com.njcn.prepare.harmonic.mapper.mysql.area;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
-import com.njcn.prepare.harmonic.pojo.po.RStatOrgQPO;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatOrgQPO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatOrgQPOMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatOrgQPOMapper.java
new file mode 100644
index 000000000..2a2bd9e07
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatOrgQPOMapper.java
@@ -0,0 +1,16 @@
+package com.njcn.prepare.harmonic.mapper.mysql.area;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatOrgQPO;
+
+/**
+ *
+ * Description:
+ * Date: 2023/6/7 8:47【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+public interface RStatOrgQPOMapper extends MppBaseMapper {
+}
\ No newline at end of file
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatOrgYMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatOrgYMapper.java
index 92eb3eec5..2a4d2fa8d 100644
--- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatOrgYMapper.java
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatOrgYMapper.java
@@ -1,8 +1,7 @@
package com.njcn.prepare.harmonic.mapper.mysql.area;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
-import com.njcn.prepare.harmonic.pojo.po.RStatOrgQPO;
-import com.njcn.prepare.harmonic.pojo.po.RStatOrgYPO;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatOrgYPO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatOrgYPOMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatOrgYPOMapper.java
new file mode 100644
index 000000000..6c9d9e04c
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/RStatOrgYPOMapper.java
@@ -0,0 +1,16 @@
+package com.njcn.prepare.harmonic.mapper.mysql.area;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatOrgYPO;
+
+/**
+ *
+ * Description:
+ * Date: 2023/6/7 8:47【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+public interface RStatOrgYPOMapper extends MppBaseMapper {
+}
\ No newline at end of file
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/mapping/RStatHarmonicMPOMapper.xml b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/mapping/RStatHarmonicMPOMapper.xml
new file mode 100644
index 000000000..3e8e763a6
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/mapping/RStatHarmonicMPOMapper.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ org_no, data_date, measurement_type_class, harmonic_type, data_type, over_limit_measurement_average,
+ over_limit_measurement_accrued, over_day, over_limit_measurement_ratio_average, over_limit_measurement_ratio_accrued
+
+
\ No newline at end of file
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/mapping/RStatHarmonicQPOMapper.xml b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/mapping/RStatHarmonicQPOMapper.xml
new file mode 100644
index 000000000..9a9ac9ecc
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/mapping/RStatHarmonicQPOMapper.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ org_no, data_date, measurement_type_class, harmonic_type, data_type, over_limit_measurement_average,
+ over_limit_measurement_accrued, average_over_day, over_limit_measurement_ratio_average,
+ over_limit_measurement_ratio_accrued
+
+
\ No newline at end of file
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/mapping/RStatHarmonicVoltageDPOMapper.xml b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/mapping/RStatHarmonicVoltageDPOMapper.xml
new file mode 100644
index 000000000..a2b5374c6
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/mapping/RStatHarmonicVoltageDPOMapper.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ org_no, data_date, measurement_type_class, harmonic_type, voltage_type, data_type,
+ over_limit_measurement_average, over_limit_measurement_ratio_average
+
+
\ No newline at end of file
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/mapping/RStatHarmonicYPOMapper.xml b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/mapping/RStatHarmonicYPOMapper.xml
new file mode 100644
index 000000000..37a4a0fcc
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/mapping/RStatHarmonicYPOMapper.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ org_no, data_date, measurement_type_class, harmonic_type, data_type, over_limit_measurement_average,
+ over_limit_measurement_accrued, average_over_day, over_limit_measurement_ratio_average,
+ over_limit_measurement_ratio_accrued
+
+
\ No newline at end of file
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/mapping/RStatOrgQPOMapper.xml b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/mapping/RStatOrgQPOMapper.xml
new file mode 100644
index 000000000..6b1839f81
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/mapping/RStatOrgQPOMapper.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ org_no, data_date, measurement_type_class, all_count, effective_measurement_average,
+ effective_measurement_accrued, harmonic_measurement_average, harmonic_measurement_accrued,
+ harmonic_measurement_ratio_average, average_over_day, freq_pass_rate, v_dev_pass_rate,
+ flicker_pass_rate, event_measurement_average, event_measurement_accrued, event_measurement_ratio_average,
+ event_freq, event_count, should_count, warn_count, data_type
+
+
\ No newline at end of file
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/mapping/RStatOrgYPOMapper.xml b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/mapping/RStatOrgYPOMapper.xml
new file mode 100644
index 000000000..3f4c0db0d
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/area/mapping/RStatOrgYPOMapper.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ org_no, data_date, measurement_type_class, data_type, all_count, effective_measurement_average,
+ effective_measurement_accrued, over_limit_measurement_average, over_limit_measurement_accrued,
+ harmonic_measurement_ratio_average, average_over_day, freq_pass_rate, v_dev_pass_rate,
+ flicker_pass_rate, event_measurement_average, event_measurement_accrued, event_measurement_ratio_average,
+ event_freq, event_count, should_count, warn_count
+
+
\ No newline at end of file
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicMPOServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicMPOServiceImpl.java
new file mode 100644
index 000000000..6af839f1b
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicMPOServiceImpl.java
@@ -0,0 +1,22 @@
+package com.njcn.prepare.harmonic.service.mysql.Impl.area;
+
+import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.njcn.prepare.harmonic.mapper.mysql.area.RStatHarmonicMPOMapper;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicMPO;
+import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicMPOService;
+/**
+ *
+ * Description:
+ * Date: 2023/6/7 16:10【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+@Service
+public class RStatHarmonicMPOServiceImpl extends MppServiceImpl implements RStatHarmonicMPOService{
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicQPOServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicQPOServiceImpl.java
new file mode 100644
index 000000000..c8fa11d28
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicQPOServiceImpl.java
@@ -0,0 +1,22 @@
+package com.njcn.prepare.harmonic.service.mysql.Impl.area;
+
+import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.njcn.prepare.harmonic.mapper.mysql.area.RStatHarmonicQPOMapper;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicQPO;
+import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicQPOService;
+/**
+ *
+ * Description:
+ * Date: 2023/6/7 16:11【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+@Service
+public class RStatHarmonicQPOServiceImpl extends MppServiceImpl implements RStatHarmonicQPOService{
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicServiceImpl.java
index e5aa92e60..7ff6bd147 100644
--- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicServiceImpl.java
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicServiceImpl.java
@@ -1,22 +1,24 @@
package com.njcn.prepare.harmonic.service.mysql.Impl.area;
+import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
-import com.njcn.harmonic.pojo.po.RMpPartHarmonicDetailD;
-import com.njcn.harmonic.pojo.po.RMpSurplusHarmonicDetailD;
-import com.njcn.harmonic.pojo.po.RStatHarmonicD;
-import com.njcn.harmonic.pojo.po.RStatOrgDPO;
+import com.njcn.device.pms.pojo.po.RStatOrgPO;
+import com.njcn.harmonic.pojo.po.*;
import com.njcn.prepare.harmonic.mapper.mysql.area.RStatOrgDMapper;
+import com.njcn.prepare.harmonic.mapper.mysql.area.RStatOrgMMapper;
import com.njcn.prepare.harmonic.mapper.mysql.line.RMpPartHarmonicDetailDMapper;
+import com.njcn.prepare.harmonic.mapper.mysql.line.RMpPartHarmonicDetailMMapper;
import com.njcn.prepare.harmonic.mapper.mysql.line.RMpSurplusHarmonicDetailDMapper;
+import com.njcn.prepare.harmonic.mapper.mysql.line.RMpSurplusHarmonicDetailMMapper;
import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicDPO;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicMPO;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicVoltageDPO;
import com.njcn.prepare.harmonic.service.mysql.Impl.line.RMpPartHarmonicDetailDServiceImpl;
-import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicDPOService;
-import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicService;
-import com.njcn.prepare.harmonic.service.mysql.area.RStatOrgDService;
+import com.njcn.prepare.harmonic.service.mysql.area.*;
import com.njcn.prepare.harmonic.service.mysql.line.IRMpPartHarmonicDetailDService;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.enums.DicDataEnum;
@@ -30,6 +32,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
+import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.*;
import java.util.stream.Collectors;
@@ -47,10 +50,18 @@ import java.util.stream.Collectors;
public class RStatHarmonicServiceImpl implements RStatHarmonicService {
private final RStatHarmonicDPOService rStatHarmonicDPOService;
+ private final RStatHarmonicMPOService rStatHarmonicMPOService;
+
private final RMpPartHarmonicDetailDMapper rMpPartHarmonicDetailDMapper;
private final RMpSurplusHarmonicDetailDMapper rMpSurplusHarmonicDetailDMapper;
private final RStatOrgDMapper rStatOrgDMapper;
+ private final RMpPartHarmonicDetailMMapper rMpPartHarmonicDetailMMapper;
+ private final RMpSurplusHarmonicDetailMMapper rMpSurplusHarmonicDetailMMapper;
+ private final RStatOrgMMapper rStatOrgMMapper;
+
+
+
private final
DicDataFeignClient dicDataFeignClient;
@@ -63,9 +74,9 @@ public class RStatHarmonicServiceImpl implements RStatHarmonicService {
// case 2:
// this.hanlderOracleQtr (lineParam);
// break;
-// case 3:
-// this.hanlderOracleMonth (lineParam);
-// break;
+ case 3:
+ this.hanlderOracleM ( data, dataDate, type);
+ break;
case 5:
this.hanlderDay ( data, dataDate, type);
break;
@@ -73,6 +84,222 @@ public class RStatHarmonicServiceImpl implements RStatHarmonicService {
break;
}
}
+ @Transactional
+ @Async("asyncExecutor")
+ @SneakyThrows
+ private void hanlderOracleM(List data, String dataDate, Integer type) {
+
+ List rStatHarmonicMPOList = new ArrayList<>();
+ Date date = DateUtil.parse(dataDate);
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ QueryWrapper rMpSurplusHarmonicDetailMQueryWrapper = new QueryWrapper<>();
+ QueryWrapper rStatOrgMPOQueryWrapper = new QueryWrapper<>();
+ QueryWrapper harmonicDPOQueryWrapper = new QueryWrapper<>();
+
+ DecimalFormat df = new DecimalFormat("0.00");
+
+ /*获取稳态统计指标*/
+ List steadyStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
+ /*获取数据类型*/
+
+ List dataTypeList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DATA_TYPE.getCode()).getData();
+ Map dataTypeMap = dataTypeList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
+ ;
+ /*获取监测点类型类型*/
+ List lineSortList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.LINE_SORT.getCode()).getData();
+ Map lineSortMap = lineSortList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
+
+
+ data.forEach(deptGetChildrenMoreDTO -> {
+
+ /*主网*/
+ if (!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getLineBaseList())) {
+ List lineBaseList = deptGetChildrenMoreDTO.getLineBaseList();
+ Map> collect = lineBaseList.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType));
+ collect.forEach((k, v) -> {
+ List collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
+
+ queryWrapper.clear();
+ queryWrapper.select("freq_over_day", "v_dev_over_day", "v_over_day", "i_over_day", "unbalance_over_day", "i_neg_over_day").
+ in("measurement_point_id", collect1).
+ eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
+ List rMpPartHarmonicDetailMS = rMpPartHarmonicDetailMMapper.selectList(queryWrapper);
+
+ rMpSurplusHarmonicDetailMQueryWrapper.clear();
+ rMpSurplusHarmonicDetailMQueryWrapper.select("flicker_over_day", "inuharm_over_day").
+ in("measurement_point_id", collect1).
+ eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
+ List rMpSurplusHarmonicDetailMS = rMpSurplusHarmonicDetailMMapper.selectList(rMpSurplusHarmonicDetailMQueryWrapper);
+
+ rStatOrgMPOQueryWrapper.clear();
+ rStatOrgMPOQueryWrapper.select("effective_measurement").
+ eq("org_no", deptGetChildrenMoreDTO.getUnitId()).
+ eq("measurement_type_class", getmeasurementType(k, lineSortMap)).
+ eq("data_type", dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()).
+ eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
+ RStatOrgMPO rStatOrgMPO = rStatOrgMMapper.selectOne(rStatOrgMPOQueryWrapper);
+
+
+
+ steadyStatis.forEach(dictData -> {
+ if (Objects.equals(dictData.getCode(), DicDataEnum.TOTAL_INDICATOR.getCode())) {
+ return;
+ }
+ RStatHarmonicMPO rStatHarmonicMPO = new RStatHarmonicMPO();
+ rStatHarmonicMPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
+ rStatHarmonicMPO.setDataDate(date);
+ rStatHarmonicMPO.setHarmonicType(dictData.getId());
+ rStatHarmonicMPO.setDataType(dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId());
+ rStatHarmonicMPO.setMeasurementTypeClass(getmeasurementType(k, lineSortMap));
+ /**4、累计超标监测点数*/
+ rStatHarmonicMPO.setOverLimitMeasurementAccrued(getOverLimitMeasurementAccruedTime(dictData, rMpPartHarmonicDetailMS, rMpSurplusHarmonicDetailMS));
+ /*3、日均超标监测点数,6、日均超标监测点数占比*/
+ harmonicDPOQueryWrapper.clear();
+ harmonicDPOQueryWrapper.eq("org_no", deptGetChildrenMoreDTO.getUnitId()).
+ eq("measurement_type_class", getmeasurementType(k, lineSortMap)).
+ eq("data_type", dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()).
+ eq("harmonic_type", dictData.getId()).
+ eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
+ List rStatHarmonicDPOList = rStatHarmonicDPOService.list(harmonicDPOQueryWrapper);
+ double asDouble = rStatHarmonicDPOList.stream().mapToDouble(RStatHarmonicDPO::getOverLimitMeasurement).average().getAsDouble();
+ asDouble = BigDecimal.valueOf(asDouble).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+ double asDouble1 = rStatHarmonicDPOList.stream().mapToDouble(RStatHarmonicDPO::getOverLimitMeasurementRatio).average().getAsDouble();
+ asDouble1 = BigDecimal.valueOf(asDouble1).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+ rStatHarmonicMPO.setOverLimitMeasurementAverage(asDouble);
+ double sum = rStatHarmonicDPOList.stream().mapToDouble(RStatHarmonicDPO::getOverLimitMeasurement).sum();
+ rStatHarmonicMPO.setOverLimitMeasurementRatioAverage(asDouble1);
+
+ int i = BigDecimal.valueOf(asDouble1).setScale(0, BigDecimal.ROUND_HALF_UP).intValue();
+
+ rStatHarmonicMPO.setOverDay(i);
+
+ if (rStatOrgMPO.getEffectiveMeasurementAccrued() == 0) {
+ //todo为0时如何设值
+ rStatHarmonicMPO.setOverLimitMeasurementRatioAccrued(0.00);
+
+ } else {
+ String value = df.format((float) rStatHarmonicMPO.getOverLimitMeasurementAccrued() / rStatOrgMPO.getEffectiveMeasurementAccrued());
+ rStatHarmonicMPO.setOverLimitMeasurementRatioAccrued(Double.parseDouble(value));
+ }
+ rStatHarmonicMPOList.add(rStatHarmonicMPO);
+ });
+
+ });
+
+ }
+ /*配网*/
+ if(CollectionUtil.isNotEmpty(deptGetChildrenMoreDTO.getPwMonitorIds())){
+ List pwMonitorIds = deptGetChildrenMoreDTO.getPwMonitorIds();
+ Map> collect = pwMonitorIds.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType));
+ collect.forEach((k, v) -> {
+ List collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
+
+ queryWrapper.clear();
+ queryWrapper.select("freq_over_day", "v_dev_over_day", "v_over_day", "i_over_day", "unbalance_over_day", "i_neg_over_day").
+ in("measurement_point_id", collect1).
+ eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
+ List rMpPartHarmonicDetailMS = rMpPartHarmonicDetailMMapper.selectList(queryWrapper);
+
+ rMpSurplusHarmonicDetailMQueryWrapper.clear();
+ rMpSurplusHarmonicDetailMQueryWrapper.select("flicker_over_day", "inuharm_over_day").
+ in("measurement_point_id", collect1).
+ eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
+ List rMpSurplusHarmonicDetailMS = rMpSurplusHarmonicDetailMMapper.selectList(rMpSurplusHarmonicDetailMQueryWrapper);
+
+ rStatOrgMPOQueryWrapper.clear();
+ rStatOrgMPOQueryWrapper.select("effective_measurement").
+ eq("org_no", deptGetChildrenMoreDTO.getUnitId()).
+ eq("measurement_type_class", getmeasurementType(k, lineSortMap)).
+ eq("data_type", dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()).
+ eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
+ RStatOrgMPO rStatOrgMPO = rStatOrgMMapper.selectOne(rStatOrgMPOQueryWrapper);
+
+
+
+ steadyStatis.forEach(dictData -> {
+ if (Objects.equals(dictData.getCode(), DicDataEnum.TOTAL_INDICATOR.getCode())) {
+ return;
+ }
+ RStatHarmonicMPO rStatHarmonicMPO = new RStatHarmonicMPO();
+ rStatHarmonicMPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
+ rStatHarmonicMPO.setDataDate(date);
+ rStatHarmonicMPO.setHarmonicType(dictData.getId());
+ rStatHarmonicMPO.setDataType(dataTypeMap.get(DicDataEnum.DISTRIBUTION_POINT.getCode()).getId());
+ rStatHarmonicMPO.setMeasurementTypeClass(getmeasurementType(k, lineSortMap));
+ /**4、累计超标监测点数*/
+ rStatHarmonicMPO.setOverLimitMeasurementAccrued(getOverLimitMeasurementAccruedTime(dictData, rMpPartHarmonicDetailMS, rMpSurplusHarmonicDetailMS));
+ /*3、日均超标监测点数,6、日均超标监测点数占比*/
+ harmonicDPOQueryWrapper.clear();
+ harmonicDPOQueryWrapper.eq("org_no", deptGetChildrenMoreDTO.getUnitId()).
+ eq("measurement_type_class", getmeasurementType(k, lineSortMap)).
+ eq("data_type", dataTypeMap.get(DicDataEnum.DISTRIBUTION_POINT.getCode()).getId()).
+ eq("harmonic_type", dictData.getId()).
+ eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
+ List rStatHarmonicDPOList = rStatHarmonicDPOService.list(harmonicDPOQueryWrapper);
+ double asDouble = rStatHarmonicDPOList.stream().mapToDouble(RStatHarmonicDPO::getOverLimitMeasurement).average().getAsDouble();
+ asDouble = BigDecimal.valueOf(asDouble).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+ double asDouble1 = rStatHarmonicDPOList.stream().mapToDouble(RStatHarmonicDPO::getOverLimitMeasurementRatio).average().getAsDouble();
+ asDouble1 = BigDecimal.valueOf(asDouble1).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
+ rStatHarmonicMPO.setOverLimitMeasurementAverage(asDouble);
+ double sum = rStatHarmonicDPOList.stream().mapToDouble(RStatHarmonicDPO::getOverLimitMeasurement).sum();
+ rStatHarmonicMPO.setOverLimitMeasurementRatioAverage(asDouble1);
+
+ int i = BigDecimal.valueOf(asDouble1).setScale(0, BigDecimal.ROUND_HALF_UP).intValue();
+
+ rStatHarmonicMPO.setOverDay(i);
+
+ if (rStatOrgMPO.getEffectiveMeasurementAccrued() == 0) {
+ //todo为0时如何设值
+ rStatHarmonicMPO.setOverLimitMeasurementRatioAccrued(0.00);
+
+ } else {
+ String value = df.format((float) rStatHarmonicMPO.getOverLimitMeasurementAccrued() / rStatOrgMPO.getEffectiveMeasurementAccrued());
+ rStatHarmonicMPO.setOverLimitMeasurementRatioAccrued(Double.parseDouble(value));
+ }
+ rStatHarmonicMPOList.add(rStatHarmonicMPO);
+ });
+
+ });
+
+ }
+ });
+ if(CollectionUtil.isNotEmpty(rStatHarmonicMPOList)){
+ rStatHarmonicMPOService.saveOrUpdateBatchByMultiId(rStatHarmonicMPOList,500);
+
+ }
+ }
+
+ private Integer getOverLimitMeasurementAccruedTime(DictData dictData, List rMpPartHarmonicDetailMS, List rMpSurplusHarmonicDetailMS) {
+ Integer value = 0;
+ if (Objects.equals(dictData.getCode(),DicDataEnum.VOLTAGE_DEV.getCode())) {
+ value = Integer.valueOf(rMpPartHarmonicDetailMS.stream().filter(temp ->temp.getVDevOverDay()>0).count()+"");
+ }
+ if (Objects.equals(dictData.getCode(),DicDataEnum.FLICKER.getCode())) {
+ value = Integer.valueOf(rMpSurplusHarmonicDetailMS.stream().filter(temp ->temp.getFlickerOverDay()>0).count()+"");
+ }
+ if (Objects.equals(dictData.getCode(),DicDataEnum.HARMONIC_VOLTAGE.getCode())) {
+ value = Integer.valueOf(rMpPartHarmonicDetailMS.stream().filter(temp ->temp.getVOverDay()>0).count()+"");
+ }
+ if (Objects.equals(dictData.getCode(),DicDataEnum.HARMONIC_CURRENT.getCode())) {
+ value = Integer.valueOf(rMpPartHarmonicDetailMS.stream().filter(temp ->temp.getIOverDay()>0).count()+"");
+ }
+ if (Objects.equals(dictData.getCode(),DicDataEnum.INTERHARMONIC_VOLTAGE.getCode())) {
+ value = Integer.valueOf(rMpSurplusHarmonicDetailMS.stream().filter(temp ->temp.getInuharmOverDay()>0).count()+"");
+ }
+ if (Objects.equals(dictData.getCode(),DicDataEnum.PHASE_VOLTAGE.getCode())) {
+ value = Integer.valueOf(rMpPartHarmonicDetailMS.stream().filter(temp ->temp.getUnbalanceOverDay()>0).count()+"");
+ }
+ if (Objects.equals(dictData.getCode(),DicDataEnum.FREQUENCY_DEV.getCode())) {
+ value = Integer.valueOf(rMpPartHarmonicDetailMS.stream().filter(temp ->temp.getFreqOverDay()>0).count()+"");
+
+ }
+ if (Objects.equals(dictData.getCode(),DicDataEnum.NEG_CURRENT.getCode())) {
+ value = Integer.valueOf(rMpPartHarmonicDetailMS.stream().filter(temp ->temp.getINegOverDay()>0).count()+"");
+ }
+
+ return value;
+ }
+
@Transactional(rollbackFor = {Exception.class})
@Async("asyncExecutor")
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicVoltageDPOServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicVoltageDPOServiceImpl.java
new file mode 100644
index 000000000..c228f0e32
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicVoltageDPOServiceImpl.java
@@ -0,0 +1,22 @@
+package com.njcn.prepare.harmonic.service.mysql.Impl.area;
+
+import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicVoltageDPO;
+import com.njcn.prepare.harmonic.mapper.mysql.area.RStatHarmonicVoltageDPOMapper;
+import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicVoltageDPOService;
+/**
+ *
+ * Description:
+ * Date: 2023/6/6 9:10【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+@Service
+public class RStatHarmonicVoltageDPOServiceImpl extends MppServiceImpl implements RStatHarmonicVoltageDPOService{
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicVoltageServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicVoltageServiceImpl.java
new file mode 100644
index 000000000..e6a37bcc5
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicVoltageServiceImpl.java
@@ -0,0 +1,267 @@
+package com.njcn.prepare.harmonic.service.mysql.Impl.area;
+
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
+import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
+import com.njcn.harmonic.pojo.po.RMpPartHarmonicDetailD;
+import com.njcn.harmonic.pojo.po.RMpSurplusHarmonicDetailD;
+import com.njcn.harmonic.pojo.po.RStatOrgDPO;
+import com.njcn.prepare.harmonic.mapper.mysql.area.RStatOrgDMapper;
+import com.njcn.prepare.harmonic.mapper.mysql.line.RMpPartHarmonicDetailDMapper;
+import com.njcn.prepare.harmonic.mapper.mysql.line.RMpSurplusHarmonicDetailDMapper;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicDPO;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicVoltageDPO;
+import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicVoltageDPOService;
+import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicVoltageService;
+import com.njcn.system.api.DicDataFeignClient;
+import com.njcn.system.enums.DicDataEnum;
+import com.njcn.system.enums.DicDataTypeEnum;
+import com.njcn.system.pojo.po.DictData;
+import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.text.DecimalFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * Description:
+ * Date: 2023/6/6 10:08【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+@Service
+@RequiredArgsConstructor
+public class RStatHarmonicVoltageServiceImpl implements RStatHarmonicVoltageService {
+
+ private final RMpPartHarmonicDetailDMapper rMpPartHarmonicDetailDMapper;
+ private final RMpSurplusHarmonicDetailDMapper rMpSurplusHarmonicDetailDMapper;
+ private final RStatOrgDMapper rStatOrgDMapper;
+ private final RStatHarmonicVoltageDPOService rStatHarmonicVoltageDPOService;
+
+ private final
+ DicDataFeignClient dicDataFeignClient;
+ @Override
+ public void handlerByPowerLevel(List data, String dataDate, Integer type) {
+ switch (type) {
+// case 1:
+// this.hanlderOracleYear (lineParam);
+// break;
+// case 2:
+// this.hanlderOracleQtr (lineParam);
+// break;
+// case 3:
+// this.hanlderOracleMonth (lineParam);
+// break;
+ case 5:
+ this.hanlderDayByPl ( data, dataDate, type);
+ break;
+ default:
+ break;
+ }
+
+ }
+
+ @Transactional(rollbackFor = {Exception.class})
+ @Async("asyncExecutor")
+ @SneakyThrows
+ private void hanlderDayByPl(List data, String dataDate, Integer type) {
+ List rStatHarmonicVoltageDPOList = new ArrayList<>();
+ Date date = DateUtil.parse(dataDate);
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ QueryWrapper rMpSurplusHarmonicDetailDQueryWrapper = new QueryWrapper<>();
+ QueryWrapper rStatOrgDPOQueryWrapper = new QueryWrapper<>();
+ DecimalFormat df = new DecimalFormat("0.00");
+
+ /*获取稳态统计指标*/
+ List steadyStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
+ /*获取数据类型*/
+
+ List dataTypeList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DATA_TYPE.getCode()).getData();
+ Map dataTypeMap = dataTypeList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
+ ;
+ /*获取监测点类型类型*/
+ List lineSortList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.LINE_SORT.getCode()).getData();
+ Map lineSortMap = lineSortList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
+
+
+ data.forEach(deptGetChildrenMoreDTO -> {
+
+ /*主网*/
+ if(!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getLineBaseList())){
+ List lineBaseList = deptGetChildrenMoreDTO.getLineBaseList();
+ Map> collect = lineBaseList.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType));
+ collect.forEach((k, v)->{
+ Map> collect2 = v.stream().collect(Collectors.groupingBy(LineDevGetDTO::getVoltageLevel));
+ collect2.forEach((k1, v1) -> {
+
+ List collect3 = v1.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
+
+
+ queryWrapper.clear();
+ queryWrapper.select("is_freq","is_v_dev","is_v","is_i","is_unbalance","is_i_neg").
+ in("measurement_point_id",collect3).
+ eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",dataDate);
+ List rMpPartHarmonicDetailDS = rMpPartHarmonicDetailDMapper.selectList(queryWrapper);
+
+ rMpSurplusHarmonicDetailDQueryWrapper.clear();
+ rMpSurplusHarmonicDetailDQueryWrapper.select("is_flicker","is_inuharm").
+ in("measurement_point_id",collect3).
+ eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",dataDate);
+ List rMpSurplusHarmonicDetailDS = rMpSurplusHarmonicDetailDMapper.selectList(rMpSurplusHarmonicDetailDQueryWrapper);
+
+ rStatOrgDPOQueryWrapper.clear();
+ rStatOrgDPOQueryWrapper.select("effective_measurement").
+ eq("org_no",deptGetChildrenMoreDTO.getUnitId()).
+ eq("measurement_type_class",getmeasurementType(k,lineSortMap)).
+ eq("data_type",dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()).
+ eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",dataDate);
+ RStatOrgDPO rStatOrgDPO = rStatOrgDMapper.selectOne(rStatOrgDPOQueryWrapper);
+ steadyStatis.forEach(dictData -> {
+ if(Objects.equals(dictData.getCode(),DicDataEnum.TOTAL_INDICATOR.getCode())){
+ return;
+ }
+ RStatHarmonicVoltageDPO rStatHarmonicVoltageDPO = new RStatHarmonicVoltageDPO();
+ rStatHarmonicVoltageDPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
+ rStatHarmonicVoltageDPO.setDataDate(date);
+ rStatHarmonicVoltageDPO.setHarmonicType(dictData.getId());
+ rStatHarmonicVoltageDPO.setDataType(dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId());
+ rStatHarmonicVoltageDPO.setMeasurementTypeClass(getmeasurementType(k,lineSortMap));
+ rStatHarmonicVoltageDPO.setVoltageType(k1);
+ rStatHarmonicVoltageDPO.setOverLimitMeasurementAverage(getSteadyStatisData(dictData,rMpPartHarmonicDetailDS,rMpSurplusHarmonicDetailDS));
+ if(rStatOrgDPO.getEffectiveMeasurement()==0){
+ rStatHarmonicVoltageDPO.setOverLimitMeasurementRatioAverage(1.00);
+
+ }else{
+ String value = df.format((float)rStatHarmonicVoltageDPO.getOverLimitMeasurementAverage()/ rStatOrgDPO.getEffectiveMeasurement());
+ rStatHarmonicVoltageDPO.setOverLimitMeasurementRatioAverage(Double.parseDouble(value));
+ }
+ rStatHarmonicVoltageDPOList.add(rStatHarmonicVoltageDPO);
+ })
+
+ ;}
+ );
+
+ });
+
+ }
+ /*配网*/
+ if(!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getPwMonitorIds())) {
+ List pwMonitorIds = deptGetChildrenMoreDTO.getPwMonitorIds();
+ Map> pwMonitorMap = pwMonitorIds.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType));
+ pwMonitorMap.forEach((k, v)->{
+ Map> collect2 = v.stream().collect(Collectors.groupingBy(LineDevGetDTO::getVoltageLevel));
+ collect2.forEach((k1, v1) -> {
+
+ List collect3 = v1.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
+
+
+ queryWrapper.clear();
+ queryWrapper.select("is_freq","is_v_dev","is_v","is_i","is_unbalance","is_i_neg").
+ in("measurement_point_id",collect3).
+ eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",dataDate);
+ List rMpPartHarmonicDetailDS = rMpPartHarmonicDetailDMapper.selectList(queryWrapper);
+
+ rMpSurplusHarmonicDetailDQueryWrapper.clear();
+ rMpSurplusHarmonicDetailDQueryWrapper.select("is_flicker","is_inuharm").
+ in("measurement_point_id",collect3).
+ eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",dataDate);
+ List rMpSurplusHarmonicDetailDS = rMpSurplusHarmonicDetailDMapper.selectList(rMpSurplusHarmonicDetailDQueryWrapper);
+
+ rStatOrgDPOQueryWrapper.clear();
+ rStatOrgDPOQueryWrapper.select("effective_measurement").
+ eq("org_no",deptGetChildrenMoreDTO.getUnitId()).
+ eq("measurement_type_class",getmeasurementType(k,lineSortMap)).
+ eq("data_type",dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()).
+ eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",dataDate);
+ RStatOrgDPO rStatOrgDPO = rStatOrgDMapper.selectOne(rStatOrgDPOQueryWrapper);
+ steadyStatis.forEach(dictData -> {
+ if(Objects.equals(dictData.getCode(),DicDataEnum.TOTAL_INDICATOR.getCode())){
+ return;
+ }
+ RStatHarmonicVoltageDPO rStatHarmonicVoltageDPO = new RStatHarmonicVoltageDPO();
+ rStatHarmonicVoltageDPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
+ rStatHarmonicVoltageDPO.setDataDate(date);
+ rStatHarmonicVoltageDPO.setHarmonicType(dictData.getId());
+ rStatHarmonicVoltageDPO.setDataType(dataTypeMap.get(DicDataEnum.DISTRIBUTION_POINT.getCode()).getId());
+ rStatHarmonicVoltageDPO.setMeasurementTypeClass(getmeasurementType(k,lineSortMap));
+ rStatHarmonicVoltageDPO.setVoltageType(k1);
+ rStatHarmonicVoltageDPO.setOverLimitMeasurementAverage(getSteadyStatisData(dictData,rMpPartHarmonicDetailDS,rMpSurplusHarmonicDetailDS));
+ if(rStatOrgDPO.getEffectiveMeasurement()==0){
+ rStatHarmonicVoltageDPO.setOverLimitMeasurementRatioAverage(1.00);
+
+ }else{
+ String value = df.format((float)rStatHarmonicVoltageDPO.getOverLimitMeasurementAverage()/ rStatOrgDPO.getEffectiveMeasurement());
+ rStatHarmonicVoltageDPO.setOverLimitMeasurementRatioAverage(Double.parseDouble(value));
+ }
+ rStatHarmonicVoltageDPOList.add(rStatHarmonicVoltageDPO);
+ })
+
+ ;}
+ );
+
+ });
+ }
+
+ });
+ if(!CollectionUtils.isEmpty(rStatHarmonicVoltageDPOList)){
+ rStatHarmonicVoltageDPOService.saveOrUpdateBatchByMultiId(rStatHarmonicVoltageDPOList,500);
+ }
+ }
+
+ private String getmeasurementType(Integer k, Map lineSortMap) {
+ String value ="";
+ switch (k) {
+ case 1:
+ value =lineSortMap.get(DicDataEnum.ONE_LINE.getCode()).getId();
+ break;
+ case 2:
+ value =lineSortMap.get(DicDataEnum.TWO_LINE.getCode()).getId();
+ break;
+ case 3:
+ value =lineSortMap.get(DicDataEnum.THREE_LINE.getCode()).getId();
+ break;
+ default:
+ break;
+ }
+ return value;
+ }
+
+ private Integer getSteadyStatisData(DictData dictData, List rMpPartHarmonicDetailDS, List rMpSurplusHarmonicDetailDS) {
+ Integer value = 0;
+ if (Objects.equals(dictData.getCode(),DicDataEnum.VOLTAGE_DEV.getCode())) {
+ value = Integer.valueOf(rMpPartHarmonicDetailDS.stream().filter(temp ->temp.getIsVDev()==1).count()+"");
+ }
+ if (Objects.equals(dictData.getCode(),DicDataEnum.FLICKER.getCode())) {
+ value = Integer.valueOf(rMpSurplusHarmonicDetailDS.stream().filter(temp ->temp.getIsFlicker()==1).count()+"");
+ }
+ if (Objects.equals(dictData.getCode(),DicDataEnum.HARMONIC_VOLTAGE.getCode())) {
+ value = Integer.valueOf(rMpPartHarmonicDetailDS.stream().filter(temp ->temp.getIsV()==1).count()+"");
+ }
+ if (Objects.equals(dictData.getCode(),DicDataEnum.HARMONIC_CURRENT.getCode())) {
+ value = Integer.valueOf(rMpPartHarmonicDetailDS.stream().filter(temp ->temp.getIsI()==1).count()+"");
+ }
+ if (Objects.equals(dictData.getCode(),DicDataEnum.INTERHARMONIC_VOLTAGE.getCode())) {
+ value = Integer.valueOf(rMpSurplusHarmonicDetailDS.stream().filter(temp ->temp.getIsInuharm()==1).count()+"");
+ }
+ if (Objects.equals(dictData.getCode(),DicDataEnum.PHASE_VOLTAGE.getCode())) {
+ value = Integer.valueOf(rMpPartHarmonicDetailDS.stream().filter(temp ->temp.getIsUnbalance()==1).count()+"");
+ }
+ if (Objects.equals(dictData.getCode(),DicDataEnum.FREQUENCY_DEV.getCode())) {
+ value = Integer.valueOf(rMpPartHarmonicDetailDS.stream().filter(temp ->temp.getIsFreq()==1).count()+"");
+
+ }
+ if (Objects.equals(dictData.getCode(),DicDataEnum.NEG_CURRENT.getCode())) {
+ value = Integer.valueOf(rMpPartHarmonicDetailDS.stream().filter(temp ->temp.getIsINeg()==1).count()+"");
+ }
+
+ return value;
+
+ }
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicYPOServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicYPOServiceImpl.java
new file mode 100644
index 000000000..dcc7a0dfa
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatHarmonicYPOServiceImpl.java
@@ -0,0 +1,22 @@
+package com.njcn.prepare.harmonic.service.mysql.Impl.area;
+
+import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicYPO;
+import com.njcn.prepare.harmonic.mapper.mysql.area.RStatHarmonicYPOMapper;
+import com.njcn.prepare.harmonic.service.mysql.area.RStatHarmonicYPOService;
+/**
+ *
+ * Description:
+ * Date: 2023/6/7 16:11【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+@Service
+public class RStatHarmonicYPOServiceImpl extends MppServiceImpl implements RStatHarmonicYPOService{
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatOrgQPOServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatOrgQPOServiceImpl.java
new file mode 100644
index 000000000..a778dc4a8
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatOrgQPOServiceImpl.java
@@ -0,0 +1,22 @@
+package com.njcn.prepare.harmonic.service.mysql.Impl.area;
+
+import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatOrgQPO;
+import com.njcn.prepare.harmonic.mapper.mysql.area.RStatOrgQPOMapper;
+import com.njcn.prepare.harmonic.service.mysql.area.RStatOrgQPOService;
+/**
+ *
+ * Description:
+ * Date: 2023/6/7 8:47【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+@Service
+public class RStatOrgQPOServiceImpl extends MppServiceImpl implements RStatOrgQPOService{
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatOrgServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatOrgServiceImpl.java
index baaee7a88..32dd3dfd8 100644
--- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatOrgServiceImpl.java
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatOrgServiceImpl.java
@@ -1,19 +1,25 @@
package com.njcn.prepare.harmonic.service.mysql.Impl.area;
import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.lang.Dict;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
-import com.njcn.harmonic.pojo.po.*;
+import com.njcn.harmonic.pojo.po.RMpEventDetailDPO;
+import com.njcn.harmonic.pojo.po.RMpTargetWarnDPO;
+import com.njcn.harmonic.pojo.po.RStatOrgDPO;
+import com.njcn.harmonic.pojo.po.RStatOrgMPO;
import com.njcn.prepare.harmonic.mapper.mysql.area.RMpTargetWarnDMapper;
-import com.njcn.prepare.harmonic.mapper.mysql.line.RMpEventDetailDMapper;
-import com.njcn.prepare.harmonic.mapper.mysql.line.ROperatingMonitorDMapper;
+import com.njcn.prepare.harmonic.mapper.mysql.line.*;
import com.njcn.prepare.harmonic.pojo.mysql.ROperatingMonitorDPO;
-import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicDPO;
-import com.njcn.prepare.harmonic.pojo.po.RStatDevSignalDPO;
-import com.njcn.prepare.harmonic.service.mysql.area.RStatOrgDService;
-import com.njcn.prepare.harmonic.service.mysql.area.RStatOrgService;
+
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatOrgQPO;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatOrgYPO;
+import com.njcn.prepare.harmonic.pojo.mysql.po.line.RMpPassRateMPO;
+import com.njcn.prepare.harmonic.pojo.mysql.po.line.RMpPassRateQPO;
+import com.njcn.prepare.harmonic.pojo.mysql.po.line.RMpPassRateYPO;
+
+import com.njcn.prepare.harmonic.service.mysql.area.*;
+import com.njcn.prepare.harmonic.utils.PublicUtil;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.enums.DicDataEnum;
import com.njcn.system.enums.DicDataTypeEnum;
@@ -25,6 +31,9 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
+import java.text.DecimalFormat;
+import java.time.LocalDate;
+import java.time.ZoneId;
import java.util.*;
import java.util.stream.Collectors;
@@ -40,25 +49,39 @@ import java.util.stream.Collectors;
public class RStatOrgServiceImpl implements RStatOrgService {
private final RStatOrgDService rStatOrgDService;
+ private final RStatOrgMService rStatOrgMService;
+ private final RStatOrgQPOService rStatOrgQService;
+ private final RStatOrgYPOService rStatOrgYService;
+
+
+
private final
DicDataFeignClient dicDataFeignClient;
private final ROperatingMonitorDMapper rOperatingMonitorDMapper;
private final RMpTargetWarnDMapper rMpTargetWarnDMapper;
private final RMpEventDetailDMapper rMpEventDetailDMapper;
+ private final RMpPassRateMMapper rMpPassRateMMapper;
+ private final RMpPassRateQMapper rMpPassRateQMapper;
+ private final RMpPassRateYMapper rMpPassRateYMapper;
+
+
+
+ DecimalFormat df = new DecimalFormat("0.00");
+
@Override
public void handler(List data, String dataDate, Integer type) {
switch (type) {
-// case 1:
-// this.hanlderOracleYear (lineParam);
-// break;
-// case 2:
-// this.hanlderOracleQtr (lineParam);
-// break;
-// case 3:
-// this.hanlderOracleMonth (lineParam);
-// break;
+ case 1:
+ this.hanlderYear (data, dataDate, type);
+ break;
+ case 2:
+ this.hanlderQtr (data, dataDate, type);
+ break;
+ case 3:
+ this.hanlderMonth (data, dataDate, type);
+ break;
case 5:
this.hanlderDay ( data, dataDate, type);
break;
@@ -67,6 +90,823 @@ public class RStatOrgServiceImpl implements RStatOrgService {
}
}
+ @Transactional(rollbackFor = {Exception.class})
+ @Async("asyncExecutor")
+ @SneakyThrows
+ private void hanlderYear(List data, String dataDate, Integer type) {
+ List rStatOrgYList = new ArrayList<>();
+ Date date = DateUtil.parse(dataDate);
+ /*获取当季天数求均值使用*/
+ LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); // 转换为LocalDate对象
+ int days = localDate.lengthOfYear();
+ /*获取数据类型*/
+
+ List dataTypeList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DATA_TYPE.getCode()).getData();
+ Map dataTypeMap = dataTypeList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
+ ;
+ /*获取监测点类型类型*/
+ List lineSortList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.LINE_SORT.getCode()).getData();
+ Map lineSortMap = lineSortList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
+
+ QueryWrapper rOperatingMonitorDPOQueryWrapper = new QueryWrapper<>();
+ QueryWrapper rmpTargetWarnDPOQueryWrapper = new QueryWrapper<>();
+ QueryWrapper rMpEventDetailDPOQueryWrapper = new QueryWrapper<>();
+ QueryWrapper rMpPassRateYPOQueryWrapper = new QueryWrapper<>();
+
+
+
+ data.forEach(deptGetChildrenMoreDTO -> {
+
+ /*主网*/
+ if(!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getLineBaseList())){
+ List lineBaseList = deptGetChildrenMoreDTO.getLineBaseList();
+ Map> collect = lineBaseList.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType));
+ collect.forEach((k, v)->{
+
+ List collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
+ RStatOrgYPO rStatOrgYPO = new RStatOrgYPO();
+ rStatOrgYPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
+ rStatOrgYPO.setDataDate(date);
+ rStatOrgYPO.setDataType(dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId());
+ rStatOrgYPO.setMeasurementTypeClass(getmeasurementType(k,lineSortMap));
+ rStatOrgYPO.setAllCount(v.size());
+ /*2、2、日均有效接入监测点数2、日均有效接入监测点数*/
+ rOperatingMonitorDPOQueryWrapper.clear();
+ rOperatingMonitorDPOQueryWrapper.select("measurement_point_id").
+ in("measurement_point_id",collect1).
+ gt("effective_minute_count",0).
+ eq("YEAR( data_date)", dataDate.substring(0,4));
+ List rOperatingMonitorDPOS = rOperatingMonitorDMapper.selectList(rOperatingMonitorDPOQueryWrapper);
+ String value = df.format((float)rOperatingMonitorDPOS.size()/ days);
+
+ rStatOrgYPO.setEffectiveMeasurementAverage(Double.valueOf(value));
+ /*3、3、累计有效接入监测点数*/
+ long count = rOperatingMonitorDPOS.stream().map(ROperatingMonitorDPO::getMeasurementPointId).distinct().count();
+ rStatOrgYPO.setEffectiveMeasurementAccrued(Integer.valueOf(count+""));
+
+ /*4、日均稳态超标监测点数*/
+ rmpTargetWarnDPOQueryWrapper.clear();
+ rmpTargetWarnDPOQueryWrapper.select("measurement_point_id").
+ in("measurement_point_id",collect1).
+ eq("is_harmonic",1).
+ eq("YEAR( data_date)", dataDate.substring(0,4));
+ List rMpTargetWarnDPOS = rMpTargetWarnDMapper.selectList(rmpTargetWarnDPOQueryWrapper);
+ String value1 = df.format((float)rMpTargetWarnDPOS.size()/ days);
+ rStatOrgYPO.setOverLimitMeasurementAverage(Double.parseDouble(value1));
+
+ /* 5、累计稳态超标监测点数*/
+ long count1 = rMpTargetWarnDPOS.stream().map(RMpTargetWarnDPO::getMeasurementPointId).distinct().count();
+
+ rStatOrgYPO.setOverLimitMeasurementAccrued(Integer.valueOf(count1+""));
+
+ /*6、日均稳态超标监测点数占比*/
+
+ String value2 = df.format(rStatOrgYPO.getOverLimitMeasurementAccrued() / rStatOrgYPO.getAllCount());
+ rStatOrgYPO.setHarmonicMeasurementRatioAverage(Double.parseDouble(value2));
+
+ /*7、稳态指标平均超标天数*/
+ if(count1==0){
+ rStatOrgYPO.setAverageOverDay(0.00);
+ }else{
+ String format = df.format((float)rMpTargetWarnDPOS.size()/ count1);
+ rStatOrgYPO.setAverageOverDay(Double.parseDouble(format));
+
+
+ }
+
+ /*8、频率偏差合格率,9、电压偏差合格率,10、闪变合格率*/
+ rMpPassRateYPOQueryWrapper.clear();
+ rMpPassRateYPOQueryWrapper.select("avg(freq_pass_rate) as freq_pass_rate","avg(v_dev_pass_rate) as v_dev_pass_rate","avg(flicker_pass_rate) as flicker_pass_rate").
+ in("measurement_point_id",collect1).
+ eq("YEAR( data_date)", dataDate.substring(0,4));
+ RMpPassRateYPO rMpPassRateYPO = rMpPassRateYMapper.selectOne(rMpPassRateYPOQueryWrapper);
+ rStatOrgYPO.setFreqPassRate(rMpPassRateYPO.getFreqPassRate());
+ rStatOrgYPO.setFlickerPassRate(rMpPassRateYPO.getFlickerPassRate());
+ rStatOrgYPO.setVDevPassRate(rMpPassRateYPO.getvDevPassRate());
+
+
+
+ /*11、日均监测到暂态指标的监测点数*/
+ rMpEventDetailDPOQueryWrapper.clear();
+ rMpEventDetailDPOQueryWrapper.
+ in("measurement_point_id", collect1).
+ and(i-> i.gt("swell_times",0).or().gt("sag_times",0).or().gt("interrupt_times",0)).
+ eq("YEAR( data_date)", dataDate.substring(0,4));
+ List rMpEventDetailDPOS = rMpEventDetailDMapper.selectList(rMpEventDetailDPOQueryWrapper);
+ Integer eventCount =0;
+ int sum = rMpEventDetailDPOS.stream().mapToInt(RMpEventDetailDPO::getInterruptTimes).sum();
+ int sum1 = rMpEventDetailDPOS.stream().mapToInt(RMpEventDetailDPO::getSagTimes).sum();
+ int sum2 = rMpEventDetailDPOS.stream().mapToInt(RMpEventDetailDPO::getSwellTimes).sum();
+ String value3 = df.format((float)rMpEventDetailDPOS.size()/ days);
+ rStatOrgYPO.setEventMeasurementAverage(Double.valueOf(value3));
+ /*12、累计监测到暂态指标的监测点数*/
+ long count2 = rMpEventDetailDPOS.stream().map(RMpEventDetailDPO::getMeasurementPointId).distinct().count();
+
+ rStatOrgYPO.setEventMeasurementAccrued(Integer.valueOf(count2+""));
+ /*13、日均暂态超标监测点数占比*/
+ String value4 = df.format(rStatOrgYPO.getEventMeasurementAverage() / rStatOrgYPO.getAllCount());
+ rStatOrgYPO.setEventMeasurementRatioAverage(Double.valueOf(value4));
+
+ /*15、暂态指标发生频次*/
+ rStatOrgYPO.setEventCount(sum+sum1+sum2);
+
+ /*14、暂态指标发生频次*/
+ long count3 = rMpEventDetailDPOS.stream().map(RMpEventDetailDPO::getMeasurementPointId).distinct().count();
+ if(count3==0){
+ rStatOrgYPO.setEventFreq(0.00);
+ }else{
+ String value5 = df.format((float)rStatOrgYPO.getEventCount() / count3);
+
+ rStatOrgYPO.setEventFreq(Double.valueOf(value5));
+ }
+
+
+
+
+ /*todo这个指标不重要,后续根据配置来*/
+ /*17、告警监测点数*/
+ rStatOrgYPO.setShouldCount(8);
+ rOperatingMonitorDPOQueryWrapper.clear();
+ rOperatingMonitorDPOQueryWrapper.select("distinct(measurement_point_id)").
+ in("measurement_point_id",collect1).
+ eq("is_unusual",1).
+ eq("YEAR( data_date)", dataDate.substring(0,4));
+ Integer integer2 = rOperatingMonitorDMapper.selectCount(rOperatingMonitorDPOQueryWrapper);
+ rStatOrgYPO.setWarnCount(integer2);
+
+ rStatOrgYList.add(rStatOrgYPO);
+ });
+
+ }
+ /*配网*/
+ if(!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getPwMonitorIds())){
+ List pwMonitorIds = deptGetChildrenMoreDTO.getPwMonitorIds();
+ Map> collect = pwMonitorIds.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType));
+ collect.forEach((k, v)->{
+
+ List collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
+ RStatOrgYPO rStatOrgYPO = new RStatOrgYPO();
+ rStatOrgYPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
+ rStatOrgYPO.setDataDate(date);
+ rStatOrgYPO.setDataType(dataTypeMap.get(DicDataEnum.DISTRIBUTION_POINT.getCode()).getId());
+ rStatOrgYPO.setMeasurementTypeClass(getmeasurementType(k,lineSortMap));
+ rStatOrgYPO.setAllCount(v.size());
+ /*2、2、日均有效接入监测点数2、日均有效接入监测点数*/
+ rOperatingMonitorDPOQueryWrapper.clear();
+ rOperatingMonitorDPOQueryWrapper.select("measurement_point_id").
+ in("measurement_point_id",collect1).
+ gt("effective_minute_count",0).
+ eq("YEAR( data_date)", dataDate.substring(0,4));
+ List rOperatingMonitorDPOS = rOperatingMonitorDMapper.selectList(rOperatingMonitorDPOQueryWrapper);
+ String value = df.format((float)rOperatingMonitorDPOS.size()/ days);
+
+ rStatOrgYPO.setEffectiveMeasurementAverage(Double.valueOf(value));
+ /*3、3、累计有效接入监测点数*/
+ long count = rOperatingMonitorDPOS.stream().map(ROperatingMonitorDPO::getMeasurementPointId).distinct().count();
+ rStatOrgYPO.setEffectiveMeasurementAccrued(Integer.valueOf(count+""));
+
+ /*4、日均稳态超标监测点数*/
+ rmpTargetWarnDPOQueryWrapper.clear();
+ rmpTargetWarnDPOQueryWrapper.select("measurement_point_id").
+ in("measurement_point_id",collect1).
+ eq("is_harmonic",1).
+ eq("YEAR( data_date)", dataDate.substring(0,4));
+ List rMpTargetWarnDPOS = rMpTargetWarnDMapper.selectList(rmpTargetWarnDPOQueryWrapper);
+ String value1 = df.format((float)rMpTargetWarnDPOS.size()/ days);
+ rStatOrgYPO.setOverLimitMeasurementAverage(Double.parseDouble(value1));
+
+ /* 5、累计稳态超标监测点数*/
+ long count1 = rMpTargetWarnDPOS.stream().map(RMpTargetWarnDPO::getMeasurementPointId).distinct().count();
+
+ rStatOrgYPO.setOverLimitMeasurementAccrued(Integer.valueOf(count1+""));
+
+ /*6、日均稳态超标监测点数占比*/
+ String value2 = df.format(rStatOrgYPO.getOverLimitMeasurementAccrued() / rStatOrgYPO.getAllCount());
+ rStatOrgYPO.setHarmonicMeasurementRatioAverage(Double.parseDouble(value2));
+
+ /*7、稳态指标平均超标天数*/
+ if(count1==0){
+ rStatOrgYPO.setAverageOverDay(0.00);
+
+ }else {
+ String format = df.format((float)rMpTargetWarnDPOS.size()/ count1);
+
+ rStatOrgYPO.setAverageOverDay(Double.parseDouble(format));
+ }
+
+ /*8、频率偏差合格率,9、电压偏差合格率,10、闪变合格率*/
+ rMpPassRateYPOQueryWrapper.clear();
+ rMpPassRateYPOQueryWrapper.select("avg(freq_pass_rate) as freq_pass_rate","avg(v_dev_pass_rate) as v_dev_pass_rate","avg(flicker_pass_rate) as flicker_pass_rate").
+ in("measurement_point_id",collect1).
+ eq("YEAR( data_date)", dataDate.substring(0,4));
+ RMpPassRateYPO rMpPassRateYPO = rMpPassRateYMapper.selectOne(rMpPassRateYPOQueryWrapper);
+ rStatOrgYPO.setFreqPassRate(rMpPassRateYPO.getFreqPassRate());
+ rStatOrgYPO.setFlickerPassRate(rMpPassRateYPO.getFlickerPassRate());
+ rStatOrgYPO.setVDevPassRate(rMpPassRateYPO.getvDevPassRate());
+
+
+
+ /*11、日均监测到暂态指标的监测点数*/
+ rMpEventDetailDPOQueryWrapper.clear();
+ rMpEventDetailDPOQueryWrapper.
+ in("measurement_point_id", collect1).
+ and(i-> i.gt("swell_times",0).or().gt("sag_times",0).or().gt("interrupt_times",0)).
+ eq("YEAR( data_date)", dataDate.substring(0,4));
+ List rMpEventDetailDPOS = rMpEventDetailDMapper.selectList(rMpEventDetailDPOQueryWrapper);
+ Integer eventCount =0;
+ int sum = rMpEventDetailDPOS.stream().mapToInt(RMpEventDetailDPO::getInterruptTimes).sum();
+ int sum1 = rMpEventDetailDPOS.stream().mapToInt(RMpEventDetailDPO::getSagTimes).sum();
+ int sum2 = rMpEventDetailDPOS.stream().mapToInt(RMpEventDetailDPO::getSwellTimes).sum();
+ String value3 = df.format((float)rMpEventDetailDPOS.size()/ days);
+ rStatOrgYPO.setEventMeasurementAverage(Double.valueOf(value3));
+ /*12、累计监测到暂态指标的监测点数*/
+ long count2 = rMpEventDetailDPOS.stream().map(RMpEventDetailDPO::getMeasurementPointId).distinct().count();
+
+ rStatOrgYPO.setEventMeasurementAccrued(Integer.valueOf(count2+""));
+ /*13、日均暂态超标监测点数占比*/
+ String value4 = df.format(rStatOrgYPO.getEventMeasurementAverage() / rStatOrgYPO.getAllCount());
+ rStatOrgYPO.setEventMeasurementRatioAverage(Double.valueOf(value4));
+
+ /*15、暂态指标发生频次*/
+ rStatOrgYPO.setEventCount(sum+sum1+sum2);
+
+ /*14、暂态指标发生频次*/
+
+ long count3 = rMpEventDetailDPOS.stream().map(RMpEventDetailDPO::getMeasurementPointId).distinct().count();
+ if(count3==0){
+ rStatOrgYPO.setEventFreq(0.00);
+
+ }else {
+ String value5 = df.format((float)rStatOrgYPO.getEventCount() / count3);
+
+ rStatOrgYPO.setEventFreq(Double.valueOf(value5));
+ }
+
+
+
+
+ /*todo这个指标不重要,后续根据配置来*/
+ /*17、告警监测点数*/
+ rStatOrgYPO.setShouldCount(8);
+ rOperatingMonitorDPOQueryWrapper.clear();
+ rOperatingMonitorDPOQueryWrapper.select("distinct(measurement_point_id)").
+ in("measurement_point_id",collect1).
+ eq("is_unusual",1).
+ eq("YEAR( data_date)", dataDate.substring(0,4));
+ Integer integer2 = rOperatingMonitorDMapper.selectCount(rOperatingMonitorDPOQueryWrapper);
+ rStatOrgYPO.setWarnCount(integer2);
+
+ rStatOrgYList.add(rStatOrgYPO);
+ });
+
+ }
+
+ });
+ if (!CollectionUtils.isEmpty(rStatOrgYList)){
+ rStatOrgYService.saveOrUpdateBatchByMultiId(rStatOrgYList,500);
+ }
+
+ }
+
+ @Transactional(rollbackFor = {Exception.class})
+ @Async("asyncExecutor")
+ @SneakyThrows
+ private void hanlderQtr(List data, String dataDate, Integer type) {
+ List rStatOrgQPOList = new ArrayList<>();
+ Date date = DateUtil.parse(dataDate);
+ /*获取当季天数求均值使用*/
+ LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); // 转换为LocalDate对象
+ int days = PublicUtil.getQtrDays(localDate);
+ /*获取数据类型*/
+
+ List dataTypeList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DATA_TYPE.getCode()).getData();
+ Map dataTypeMap = dataTypeList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
+ ;
+ /*获取监测点类型类型*/
+ List lineSortList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.LINE_SORT.getCode()).getData();
+ Map lineSortMap = lineSortList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
+
+ QueryWrapper rOperatingMonitorDPOQueryWrapper = new QueryWrapper<>();
+ QueryWrapper rmpTargetWarnDPOQueryWrapper = new QueryWrapper<>();
+ QueryWrapper rMpEventDetailDPOQueryWrapper = new QueryWrapper<>();
+ QueryWrapper rMpPassRateQPOQueryWrapper = new QueryWrapper<>();
+
+
+
+ data.forEach(deptGetChildrenMoreDTO -> {
+
+ /*主网*/
+ if(!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getLineBaseList())){
+ List lineBaseList = deptGetChildrenMoreDTO.getLineBaseList();
+ Map> collect = lineBaseList.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType));
+ collect.forEach((k, v)->{
+
+ List collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
+ RStatOrgQPO rStatOrgQPO = new RStatOrgQPO();
+ rStatOrgQPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
+ rStatOrgQPO.setDataDate(date);
+ rStatOrgQPO.setDataType(dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId());
+ rStatOrgQPO.setMeasurementTypeClass(getmeasurementType(k,lineSortMap));
+ rStatOrgQPO.setAllCount(v.size());
+ /*2、2、日均有效接入监测点数2、日均有效接入监测点数*/
+ rOperatingMonitorDPOQueryWrapper.clear();
+ rOperatingMonitorDPOQueryWrapper.select("measurement_point_id").
+ in("measurement_point_id",collect1).
+ gt("effective_minute_count",0).
+ eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
+ List rOperatingMonitorDPOS = rOperatingMonitorDMapper.selectList(rOperatingMonitorDPOQueryWrapper);
+ String value = df.format((float)rOperatingMonitorDPOS.size()/ days);
+
+ rStatOrgQPO.setEffectiveMeasurementAverage(Double.parseDouble(value));
+ /*3、3、累计有效接入监测点数*/
+ long count = rOperatingMonitorDPOS.stream().map(ROperatingMonitorDPO::getMeasurementPointId).distinct().count();
+ rStatOrgQPO.setEffectiveMeasurementAccrued(Integer.valueOf(count+""));
+
+ /*4、日均稳态超标监测点数*/
+ rmpTargetWarnDPOQueryWrapper.clear();
+ rmpTargetWarnDPOQueryWrapper.select("measurement_point_id").
+ in("measurement_point_id",collect1).
+ eq("is_harmonic",1).
+ eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
+ List rMpTargetWarnDPOS = rMpTargetWarnDMapper.selectList(rmpTargetWarnDPOQueryWrapper);
+ String value1 = df.format((float)rMpTargetWarnDPOS.size()/ days);
+ rStatOrgQPO.setHarmonicMeasurementAverage(Double.parseDouble(value1));
+
+ /* 5、累计稳态超标监测点数*/
+ long count1 = rMpTargetWarnDPOS.stream().map(RMpTargetWarnDPO::getMeasurementPointId).distinct().count();
+
+ rStatOrgQPO.setHarmonicMeasurementAccrued(Integer.valueOf(count1+""));
+
+ /*6、日均稳态超标监测点数占比*/
+ String value2 = df.format(rStatOrgQPO.getHarmonicMeasurementAccrued() / rStatOrgQPO.getAllCount());
+ rStatOrgQPO.setHarmonicMeasurementRatioAverage(Double.parseDouble(value2));
+
+ /*7、累计超标天数*/
+ if(count1==0){
+ rStatOrgQPO.setAverageOverDay(0.00);
+
+ }else {
+ String format = df.format((float)rMpTargetWarnDPOS.size()/ count1);
+
+ rStatOrgQPO.setAverageOverDay(Double.parseDouble(format));
+ }
+
+ /*8、频率偏差合格率,9、电压偏差合格率,10、闪变合格率*/
+ rMpPassRateQPOQueryWrapper.clear();
+ rMpPassRateQPOQueryWrapper.select("avg(freq_pass_rate) as freq_pass_rate","avg(v_dev_pass_rate) as v_dev_pass_rate","avg(flicker_pass_rate) as flicker_pass_rate").
+ in("measurement_point_id",collect1).
+ eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
+ RMpPassRateQPO rMpPassRateQPO = rMpPassRateQMapper.selectOne(rMpPassRateQPOQueryWrapper);
+ rStatOrgQPO.setFreqPassRate(rMpPassRateQPO.getFreqPassRate());
+ rStatOrgQPO.setFlickerPassRate(rMpPassRateQPO.getFlickerPassRate());
+ rStatOrgQPO.setVDevPassRate(rMpPassRateQPO.getvDevPassRate());
+
+
+
+ /*11、日均监测到暂态指标的监测点数*/
+ rMpEventDetailDPOQueryWrapper.clear();
+ rMpEventDetailDPOQueryWrapper.
+ in("measurement_point_id", collect1).
+ and(i-> i.gt("swell_times",0).or().gt("sag_times",0).or().gt("interrupt_times",0)).
+ eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
+ List rMpEventDetailDPOS = rMpEventDetailDMapper.selectList(rMpEventDetailDPOQueryWrapper);
+ Integer eventCount =0;
+ int sum = rMpEventDetailDPOS.stream().mapToInt(RMpEventDetailDPO::getInterruptTimes).sum();
+ int sum1 = rMpEventDetailDPOS.stream().mapToInt(RMpEventDetailDPO::getSagTimes).sum();
+ int sum2 = rMpEventDetailDPOS.stream().mapToInt(RMpEventDetailDPO::getSwellTimes).sum();
+ String value3 = df.format((float)rMpEventDetailDPOS.size()/ days);
+ rStatOrgQPO.setEventMeasurementAverage(Double.valueOf(value3));
+ /*12、累计监测到暂态指标的监测点数*/
+ long count2 = rMpEventDetailDPOS.stream().map(RMpEventDetailDPO::getMeasurementPointId).distinct().count();
+
+ rStatOrgQPO.setEventMeasurementAccrued(Integer.valueOf(count2+""));
+ /*13、日均暂态超标监测点数占比*/
+ String value4 = df.format(rStatOrgQPO.getEventMeasurementAverage() / rStatOrgQPO.getAllCount());
+ rStatOrgQPO.setEventMeasurementRatioAverage(Double.valueOf(value4));
+
+ /*15、暂态指标发生频次*/
+ rStatOrgQPO.setEventCount(sum+sum1+sum2);
+
+ /*14、暂态指标发生频次*/
+ long count3 = rMpEventDetailDPOS.stream().map(RMpEventDetailDPO::getMeasurementPointId).distinct().count();
+ if(count3==0){
+ rStatOrgQPO.setEventFreq(0.00);
+
+ }else {
+ String value5 = df.format((float)rStatOrgQPO.getEventCount() / count3);
+
+ rStatOrgQPO.setEventFreq(Double.valueOf(value5));
+ }
+
+
+
+
+ /*todo这个指标不重要,后续根据配置来*/
+ /*17、告警监测点数*/
+ rStatOrgQPO.setShouldCount(8);
+ rOperatingMonitorDPOQueryWrapper.clear();
+ rOperatingMonitorDPOQueryWrapper.select("distinct(measurement_point_id)").
+ in("measurement_point_id",collect1).
+ eq("is_unusual",1).
+ eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
+ Integer integer2 = rOperatingMonitorDMapper.selectCount(rOperatingMonitorDPOQueryWrapper);
+ rStatOrgQPO.setWarnCount(integer2);
+
+ rStatOrgQPOList.add(rStatOrgQPO);
+ });
+
+ }
+ /*配网*/
+ if(!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getPwMonitorIds())){
+ List pwMonitorIds = deptGetChildrenMoreDTO.getPwMonitorIds();
+ Map> collect = pwMonitorIds.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType));
+ collect.forEach((k, v)->{
+
+ List collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
+ RStatOrgQPO rStatOrgQPO = new RStatOrgQPO();
+ rStatOrgQPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
+ rStatOrgQPO.setDataDate(date);
+ rStatOrgQPO.setDataType(dataTypeMap.get(DicDataEnum.DISTRIBUTION_POINT.getCode()).getId());
+ rStatOrgQPO.setMeasurementTypeClass(getmeasurementType(k,lineSortMap));
+ rStatOrgQPO.setAllCount(v.size());
+ /*2、2、日均有效接入监测点数2、日均有效接入监测点数*/
+ rOperatingMonitorDPOQueryWrapper.clear();
+ rOperatingMonitorDPOQueryWrapper.select("measurement_point_id").
+ in("measurement_point_id",collect1).
+ gt("effective_minute_count",0).
+ eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
+ List rOperatingMonitorDPOS = rOperatingMonitorDMapper.selectList(rOperatingMonitorDPOQueryWrapper);
+ String value = df.format((float)rOperatingMonitorDPOS.size()/ days);
+
+ rStatOrgQPO.setEffectiveMeasurementAverage(Double.parseDouble(value));
+ /*3、3、累计有效接入监测点数*/
+ long count = rOperatingMonitorDPOS.stream().map(ROperatingMonitorDPO::getMeasurementPointId).distinct().count();
+ rStatOrgQPO.setEffectiveMeasurementAccrued(Integer.valueOf(count+""));
+
+ /*4、日均稳态超标监测点数*/
+ rmpTargetWarnDPOQueryWrapper.clear();
+ rmpTargetWarnDPOQueryWrapper.select("measurement_point_id").
+ in("measurement_point_id",collect1).
+ eq("is_harmonic",1).
+ eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
+ List rMpTargetWarnDPOS = rMpTargetWarnDMapper.selectList(rmpTargetWarnDPOQueryWrapper);
+ String value1 = df.format((float)rMpTargetWarnDPOS.size()/ days);
+ rStatOrgQPO.setHarmonicMeasurementAverage(Double.parseDouble(value1));
+
+ /* 5、累计稳态超标监测点数*/
+ long count1 = rMpTargetWarnDPOS.stream().map(RMpTargetWarnDPO::getMeasurementPointId).distinct().count();
+
+ rStatOrgQPO.setHarmonicMeasurementAccrued(Integer.valueOf(count1+""));
+
+ /*6、日均稳态超标监测点数占比*/
+ String value2 = df.format(rStatOrgQPO.getHarmonicMeasurementAccrued() / rStatOrgQPO.getAllCount());
+ rStatOrgQPO.setHarmonicMeasurementRatioAverage(Double.parseDouble(value2));
+
+ /*7、累计超标天数*/
+ if(count1==0) {
+ rStatOrgQPO.setAverageOverDay(0.00);
+
+ }else{
+ String format = df.format((float)rMpTargetWarnDPOS.size()/ count1);
+
+ rStatOrgQPO.setAverageOverDay(Double.parseDouble(format));
+ }
+
+ /*8、频率偏差合格率,9、电压偏差合格率,10、闪变合格率*/
+ rMpPassRateQPOQueryWrapper.clear();
+ rMpPassRateQPOQueryWrapper.select("avg(freq_pass_rate) as freq_pass_rate","avg(v_dev_pass_rate) as v_dev_pass_rate","avg(flicker_pass_rate) as flicker_pass_rate").
+ in("measurement_point_id",collect1).
+ eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
+ RMpPassRateQPO rMpPassRateQPO = rMpPassRateQMapper.selectOne(rMpPassRateQPOQueryWrapper);
+ rStatOrgQPO.setFreqPassRate(rMpPassRateQPO.getFreqPassRate());
+ rStatOrgQPO.setFlickerPassRate(rMpPassRateQPO.getFlickerPassRate());
+ rStatOrgQPO.setVDevPassRate(rMpPassRateQPO.getvDevPassRate());
+
+
+
+ /*11、日均监测到暂态指标的监测点数*/
+ rMpEventDetailDPOQueryWrapper.clear();
+ rMpEventDetailDPOQueryWrapper.
+ in("measurement_point_id", collect1).
+ and(i-> i.gt("swell_times",0).or().gt("sag_times",0).or().gt("interrupt_times",0)).
+ eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
+ List rMpEventDetailDPOS = rMpEventDetailDMapper.selectList(rMpEventDetailDPOQueryWrapper);
+ Integer eventCount =0;
+ int sum = rMpEventDetailDPOS.stream().mapToInt(RMpEventDetailDPO::getInterruptTimes).sum();
+ int sum1 = rMpEventDetailDPOS.stream().mapToInt(RMpEventDetailDPO::getSagTimes).sum();
+ int sum2 = rMpEventDetailDPOS.stream().mapToInt(RMpEventDetailDPO::getSwellTimes).sum();
+ String value3 = df.format((float)rMpEventDetailDPOS.size()/ days);
+ rStatOrgQPO.setEventMeasurementAverage(Double.valueOf(value3));
+ /*12、累计监测到暂态指标的监测点数*/
+ long count2 = rMpEventDetailDPOS.stream().map(RMpEventDetailDPO::getMeasurementPointId).distinct().count();
+
+ rStatOrgQPO.setEventMeasurementAccrued(Integer.valueOf(count2+""));
+ /*13、日均暂态超标监测点数占比*/
+ String value4 = df.format(rStatOrgQPO.getEventMeasurementAverage() / rStatOrgQPO.getAllCount());
+ rStatOrgQPO.setEventMeasurementRatioAverage(Double.valueOf(value4));
+
+ /*15、暂态指标发生频次*/
+ rStatOrgQPO.setEventCount(sum+sum1+sum2);
+
+ /*14、暂态指标发生频次*/
+ long count3 = rMpEventDetailDPOS.stream().map(RMpEventDetailDPO::getMeasurementPointId).distinct().count();
+
+ if(count3==0){
+ rStatOrgQPO.setEventFreq(0.00);
+
+ }else{
+ String value5 = df.format((float)rStatOrgQPO.getEventCount() / count3);
+
+ rStatOrgQPO.setEventFreq(Double.valueOf(value5));
+ }
+
+
+
+
+ /*todo这个指标不重要,后续根据配置来*/
+ /*17、告警监测点数*/
+ rStatOrgQPO.setShouldCount(8);
+ rOperatingMonitorDPOQueryWrapper.clear();
+ rOperatingMonitorDPOQueryWrapper.select("distinct(measurement_point_id)").
+ in("measurement_point_id",collect1).
+ eq("is_unusual",1).
+ eq("QUARTER( data_date)", PublicUtil.getNowQuarter (dataDate));
+ Integer integer2 = rOperatingMonitorDMapper.selectCount(rOperatingMonitorDPOQueryWrapper);
+ rStatOrgQPO.setWarnCount(integer2);
+
+ rStatOrgQPOList.add(rStatOrgQPO);
+ });
+
+ }
+
+ });
+ if (!CollectionUtils.isEmpty(rStatOrgQPOList)){
+ rStatOrgQService.saveOrUpdateBatchByMultiId(rStatOrgQPOList,500);
+ }
+
+ }
+
+
+ @Transactional(rollbackFor = {Exception.class})
+ @Async("asyncExecutor")
+ @SneakyThrows
+ private void hanlderMonth(List data, String dataDate, Integer type) {
+ List rStatOrgMPOList = new ArrayList<>();
+ Date date = DateUtil.parse(dataDate);
+ /*获取当月天数求均值使用*/
+ LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); // 转换为LocalDate对象
+ int days = localDate.lengthOfMonth();
+ /*获取数据类型*/
+
+ List dataTypeList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DATA_TYPE.getCode()).getData();
+ Map dataTypeMap = dataTypeList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
+ ;
+ /*获取监测点类型类型*/
+ List lineSortList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.LINE_SORT.getCode()).getData();
+ Map lineSortMap = lineSortList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
+
+ QueryWrapper rOperatingMonitorDPOQueryWrapper = new QueryWrapper<>();
+ QueryWrapper rmpTargetWarnDPOQueryWrapper = new QueryWrapper<>();
+ QueryWrapper rMpEventDetailDPOQueryWrapper = new QueryWrapper<>();
+ QueryWrapper rMpPassRateMPOQueryWrapper = new QueryWrapper<>();
+
+
+
+ data.forEach(deptGetChildrenMoreDTO -> {
+
+ /*主网*/
+ if(!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getLineBaseList())){
+ List lineBaseList = deptGetChildrenMoreDTO.getLineBaseList();
+ Map> collect = lineBaseList.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType));
+ collect.forEach((k, v)->{
+
+ List collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
+ RStatOrgMPO rStatOrgMPO = new RStatOrgMPO();
+ rStatOrgMPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
+ rStatOrgMPO.setDataDate(date);
+ rStatOrgMPO.setDataType(dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId());
+ rStatOrgMPO.setMeasurementTypeClass(getmeasurementType(k,lineSortMap));
+ rStatOrgMPO.setAllCount(v.size());
+ /*2、2、日均有效接入监测点数2、日均有效接入监测点数*/
+ rOperatingMonitorDPOQueryWrapper.clear();
+ rOperatingMonitorDPOQueryWrapper.select("measurement_point_id").
+ in("measurement_point_id",collect1).
+ gt("effective_minute_count",0).
+ eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
+ List rOperatingMonitorDPOS = rOperatingMonitorDMapper.selectList(rOperatingMonitorDPOQueryWrapper);
+ String value = df.format((float)rOperatingMonitorDPOS.size()/ days);
+
+ rStatOrgMPO.setEffectiveMeasurementAverage(Double.parseDouble(value));
+ /*3、3、累计有效接入监测点数*/
+ long count = rOperatingMonitorDPOS.stream().map(ROperatingMonitorDPO::getMeasurementPointId).distinct().count();
+ rStatOrgMPO.setEffectiveMeasurementAccrued(Integer.valueOf(count+""));
+
+ /*4、日均稳态超标监测点数*/
+ rmpTargetWarnDPOQueryWrapper.clear();
+ rmpTargetWarnDPOQueryWrapper.select("measurement_point_id").
+ in("measurement_point_id",collect1).
+ eq("is_harmonic",1).
+ eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
+ List rMpTargetWarnDPOS = rMpTargetWarnDMapper.selectList(rmpTargetWarnDPOQueryWrapper);
+ String value1 = df.format((float)rMpTargetWarnDPOS.size()/ days);
+ rStatOrgMPO.setHarmonicMeasurementAverage(Double.parseDouble(value1));
+
+ /* 5、累计稳态超标监测点数*/
+ long count1 = rMpTargetWarnDPOS.stream().map(RMpTargetWarnDPO::getMeasurementPointId).distinct().count();
+
+ rStatOrgMPO.setHarmonicMeasurementAccrued(Integer.valueOf(count1+""));
+
+ /*6、日均稳态超标监测点数占比*/
+ String value2 = df.format(rStatOrgMPO.getHarmonicMeasurementAccrued() / rStatOrgMPO.getAllCount());
+ rStatOrgMPO.setHarmonicMeasurementRatioAverage(Double.parseDouble(value2));
+
+ /*7、累计超标天数*/
+ rStatOrgMPO.setOverDayAccrued(rMpTargetWarnDPOS.size());
+ /*8、频率偏差合格率,9、电压偏差合格率,10、闪变合格率*/
+ rMpPassRateMPOQueryWrapper.clear();
+ rMpPassRateMPOQueryWrapper.select("avg(freq_pass_rate) as freq_pass_rate","avg(v_dev_pass_rate) as v_dev_pass_rate","avg(flicker_pass_rate) as flicker_pass_rate").
+ in("measurement_point_id",collect1).
+ eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
+ RMpPassRateMPO rMpPassRateMPO = rMpPassRateMMapper.selectOne(rMpPassRateMPOQueryWrapper);
+ rStatOrgMPO.setFreqPassRate(rMpPassRateMPO.getFreqPassRate());
+ rStatOrgMPO.setFlickerPassRate(rMpPassRateMPO.getFlickerPassRate());
+ rStatOrgMPO.setVDevPassRate(rMpPassRateMPO.getvDevPassRate());
+
+
+
+ /*11、日均监测到暂态指标的监测点数*/
+ rMpEventDetailDPOQueryWrapper.clear();
+ rMpEventDetailDPOQueryWrapper.
+ in("measurement_point_id", collect1).
+ and(i-> i.gt("swell_times",0).or().gt("sag_times",0).or().gt("interrupt_times",0)).
+ eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
+ List rMpEventDetailDPOS = rMpEventDetailDMapper.selectList(rMpEventDetailDPOQueryWrapper);
+ Integer eventCount =0;
+ int sum = rMpEventDetailDPOS.stream().mapToInt(RMpEventDetailDPO::getInterruptTimes).sum();
+ int sum1 = rMpEventDetailDPOS.stream().mapToInt(RMpEventDetailDPO::getSagTimes).sum();
+ int sum2 = rMpEventDetailDPOS.stream().mapToInt(RMpEventDetailDPO::getSwellTimes).sum();
+ String value3 = df.format((float)rMpEventDetailDPOS.size()/ days);
+ rStatOrgMPO.setEventMeasurementAverage(Double.valueOf(value3));
+ /*12、累计监测到暂态指标的监测点数*/
+ long count2 = rMpEventDetailDPOS.stream().map(RMpEventDetailDPO::getMeasurementPointId).distinct().count();
+
+ rStatOrgMPO.setEventMeasurementAccrued(Integer.valueOf(count2+""));
+ /*13、日均暂态超标监测点数占比*/
+ String value4 = df.format(rStatOrgMPO.getEventMeasurementAverage() / rStatOrgMPO.getAllCount());
+ rStatOrgMPO.setEventMeasurementRatioAverage(Double.valueOf(value4));
+
+ /*15、暂态指标发生频次*/
+ rStatOrgMPO.setEventCount(sum+sum1+sum2);
+
+ /*14、暂态指标发生频次*/
+ long count3 = rMpEventDetailDPOS.stream().map(RMpEventDetailDPO::getMeasurementPointId).distinct().count();
+ if(count3==0){
+ rStatOrgMPO.setEventFreq(0.00);
+
+ }else {
+ String value5 = df.format((float)rStatOrgMPO.getEventCount() / count3);
+
+ rStatOrgMPO.setEventFreq(Double.valueOf(value5));
+ }
+
+
+
+
+ /*todo这个指标不重要,后续根据配置来*/
+ /*17、告警监测点数*/
+ rStatOrgMPO.setShouldCount(8);
+ rOperatingMonitorDPOQueryWrapper.clear();
+ rOperatingMonitorDPOQueryWrapper.select("distinct(measurement_point_id)").
+ in("measurement_point_id",collect1).
+ eq("is_unusual",1).
+ eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
+ Integer integer2 = rOperatingMonitorDMapper.selectCount(rOperatingMonitorDPOQueryWrapper);
+ rStatOrgMPO.setWarnCount(integer2);
+ rStatOrgMPOList.add(rStatOrgMPO);
+ });
+
+ }
+ /*配网*/
+ if(!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getPwMonitorIds())){
+ List pwMonitorIds = deptGetChildrenMoreDTO.getPwMonitorIds();
+ Map> collect = pwMonitorIds.stream().collect(Collectors.groupingBy(LineDevGetDTO::getLineType));
+ collect.forEach((k, v)->{
+
+ List collect1 = v.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
+ RStatOrgMPO rStatOrgMPO = new RStatOrgMPO();
+ rStatOrgMPO.setOrgNo(deptGetChildrenMoreDTO.getUnitId());
+ rStatOrgMPO.setDataDate(date);
+ rStatOrgMPO.setDataType(dataTypeMap.get(DicDataEnum.DISTRIBUTION_POINT.getCode()).getId());
+ rStatOrgMPO.setMeasurementTypeClass(getmeasurementType(k,lineSortMap));
+ rStatOrgMPO.setAllCount(v.size());
+ /*2、2、日均有效接入监测点数2、日均有效接入监测点数*/
+ rOperatingMonitorDPOQueryWrapper.clear();
+ rOperatingMonitorDPOQueryWrapper.select("measurement_point_id").
+ in("measurement_point_id",collect1).
+ gt("effective_minute_count",0).
+ eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
+ List rOperatingMonitorDPOS = rOperatingMonitorDMapper.selectList(rOperatingMonitorDPOQueryWrapper);
+ String value = df.format((float)rOperatingMonitorDPOS.size()/ days);
+
+ rStatOrgMPO.setEffectiveMeasurementAverage(Double.parseDouble(value));
+ /*3、3、累计有效接入监测点数*/
+ long count = rOperatingMonitorDPOS.stream().map(ROperatingMonitorDPO::getMeasurementPointId).distinct().count();
+ rStatOrgMPO.setEffectiveMeasurementAccrued(Integer.valueOf(count+""));
+
+ /*4、日均稳态超标监测点数*/
+ rmpTargetWarnDPOQueryWrapper.clear();
+ rmpTargetWarnDPOQueryWrapper.select("measurement_point_id").
+ in("measurement_point_id",collect1).
+ eq("is_harmonic",1).
+ eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
+ List rMpTargetWarnDPOS = rMpTargetWarnDMapper.selectList(rmpTargetWarnDPOQueryWrapper);
+ String value1 = df.format((float)rMpTargetWarnDPOS.size()/ days);
+ rStatOrgMPO.setHarmonicMeasurementAverage(Double.parseDouble(value1));
+
+ /* 5、累计稳态超标监测点数*/
+ long count1 = rMpTargetWarnDPOS.stream().map(RMpTargetWarnDPO::getMeasurementPointId).distinct().count();
+
+ rStatOrgMPO.setHarmonicMeasurementAccrued(Integer.valueOf(count1+""));
+
+ /*6、日均稳态超标监测点数占比*/
+ String value2 = df.format(rStatOrgMPO.getHarmonicMeasurementAccrued() / rStatOrgMPO.getAllCount());
+ rStatOrgMPO.setHarmonicMeasurementRatioAverage(Double.parseDouble(value2));
+
+ /*7、累计超标天数*/
+ rStatOrgMPO.setOverDayAccrued(rMpTargetWarnDPOS.size());
+ /*8、频率偏差合格率,9、电压偏差合格率,10、闪变合格率*/
+ rMpPassRateMPOQueryWrapper.clear();
+ rMpPassRateMPOQueryWrapper.select("avg(freq_pass_rate) as freq_pass_rate","avg(v_dev_pass_rate) as v_dev_pass_rate","avg(flicker_pass_rate) as flicker_pass_rate").
+ in("measurement_point_id",collect1).
+ eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
+ RMpPassRateMPO rMpPassRateMPO = rMpPassRateMMapper.selectOne(rMpPassRateMPOQueryWrapper);
+ rStatOrgMPO.setFreqPassRate(rMpPassRateMPO.getFreqPassRate());
+ rStatOrgMPO.setFlickerPassRate(rMpPassRateMPO.getFlickerPassRate());
+ rStatOrgMPO.setVDevPassRate(rMpPassRateMPO.getvDevPassRate());
+
+
+
+ /*11、日均监测到暂态指标的监测点数*/
+ rMpEventDetailDPOQueryWrapper.clear();
+ rMpEventDetailDPOQueryWrapper.
+ in("measurement_point_id", collect1).
+ and(i-> i.gt("swell_times",0).or().gt("sag_times",0).or().gt("interrupt_times",0)).
+ eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
+ List rMpEventDetailDPOS = rMpEventDetailDMapper.selectList(rMpEventDetailDPOQueryWrapper);
+ Integer eventCount =0;
+ int sum = rMpEventDetailDPOS.stream().mapToInt(RMpEventDetailDPO::getInterruptTimes).sum();
+ int sum1 = rMpEventDetailDPOS.stream().mapToInt(RMpEventDetailDPO::getSagTimes).sum();
+ int sum2 = rMpEventDetailDPOS.stream().mapToInt(RMpEventDetailDPO::getSwellTimes).sum();
+ String value3 = df.format((float)rMpEventDetailDPOS.size()/ days);
+ rStatOrgMPO.setEventMeasurementAverage(Double.valueOf(value3));
+ /*12、累计监测到暂态指标的监测点数*/
+ long count2 = rMpEventDetailDPOS.stream().map(RMpEventDetailDPO::getMeasurementPointId).distinct().count();
+
+ rStatOrgMPO.setEventMeasurementAccrued(Integer.valueOf(count2+""));
+ /*13、日均暂态超标监测点数占比*/
+ String value4 = df.format(rStatOrgMPO.getEventMeasurementAverage() / rStatOrgMPO.getAllCount());
+ rStatOrgMPO.setEventMeasurementRatioAverage(Double.valueOf(value4));
+
+ /*15、暂态指标发生频次*/
+ rStatOrgMPO.setEventCount(sum+sum1+sum2);
+
+ /*14、暂态指标发生频次*/
+ long count3 = rMpEventDetailDPOS.stream().map(RMpEventDetailDPO::getMeasurementPointId).distinct().count();
+ if(count3==0){
+ rStatOrgMPO.setEventFreq(0.00);
+
+ }else{
+ String value5 = df.format((float)rStatOrgMPO.getEventCount() / count3);
+
+ rStatOrgMPO.setEventFreq(Double.valueOf(value5));
+
+ }
+
+
+
+ /*todo这个指标不重要,后续根据配置来*/
+ /*17、告警监测点数*/
+ rStatOrgMPO.setShouldCount(8);
+ rOperatingMonitorDPOQueryWrapper.clear();
+ rOperatingMonitorDPOQueryWrapper.select("distinct(measurement_point_id)").
+ in("measurement_point_id",collect1).
+ eq("is_unusual",1).
+ eq("DATE_FORMAT( data_date ,'%Y-%m')",dataDate.substring(0, 7));
+ Integer integer2 = rOperatingMonitorDMapper.selectCount(rOperatingMonitorDPOQueryWrapper);
+ rStatOrgMPO.setWarnCount(integer2);
+
+ rStatOrgMPOList.add(rStatOrgMPO);
+ });
+
+ }
+
+ });
+ if (!CollectionUtils.isEmpty(rStatOrgMPOList)){
+ rStatOrgMService.saveOrUpdateBatchByMultiId(rStatOrgMPOList,500);
+ }
+
+ }
+
@Transactional(rollbackFor = {Exception.class})
@Async("asyncExecutor")
@SneakyThrows
@@ -123,6 +963,7 @@ public class RStatOrgServiceImpl implements RStatOrgService {
rMpEventDetailDPOQueryWrapper.clear();
rMpEventDetailDPOQueryWrapper.
in("measurement_point_id", collect1).
+ and(i-> i.gt("swell_times",0).or().gt("sag_times",0).or().gt("interrupt_times",0)).
eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",dataDate);
List rMpEventDetailDPOS = rMpEventDetailDMapper.selectList(rMpEventDetailDPOQueryWrapper);
Integer eventCount =0;
@@ -177,15 +1018,18 @@ public class RStatOrgServiceImpl implements RStatOrgService {
rStatOrgDPO.setHarmonicMeasurement(integer1);
/*4、发生暂态的监测点数,5、暂态指标发生次数*/
rMpEventDetailDPOQueryWrapper.clear();
- rMpEventDetailDPOQueryWrapper.select("measurement_point_id").
+ rMpEventDetailDPOQueryWrapper.
in("measurement_point_id", collect1).
- in("measurement_point_id",collect1).
- eq("is_harmonic",1).
+ and(i-> i.gt("swell_times",0).or().gt("sag_times",0).or().gt("interrupt_times",0)).
eq("DATE_FORMAT( data_date ,'%Y-%m-%d')",dataDate);
List rMpEventDetailDPOS = rMpEventDetailDMapper.selectList(rMpEventDetailDPOQueryWrapper);
- rStatOrgDPO.setEventCount(rMpEventDetailDPOS.size());
- long count = rMpEventDetailDPOS.stream().distinct().count();
- rStatOrgDPO.setEventMeasurement(Integer.valueOf(count+""));
+ Integer eventCount =0;
+ int sum = rMpEventDetailDPOS.stream().mapToInt(RMpEventDetailDPO::getInterruptTimes).sum();
+ int sum1 = rMpEventDetailDPOS.stream().mapToInt(RMpEventDetailDPO::getSagTimes).sum();
+ int sum2 = rMpEventDetailDPOS.stream().mapToInt(RMpEventDetailDPO::getSwellTimes).sum();
+
+ rStatOrgDPO.setEventCount(sum+sum1+sum2);
+ rStatOrgDPO.setEventMeasurement(rMpEventDetailDPOS.size());
/*todo这个指标不重要,后续根据配置来*/
rStatOrgDPO.setShouldCount(8);
/*7、告警监测点数*/
@@ -208,6 +1052,7 @@ public class RStatOrgServiceImpl implements RStatOrgService {
}
+
private String getmeasurementType(Integer k, Map lineSortMap) {
String value ="";
switch (k) {
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatOrgYPOServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatOrgYPOServiceImpl.java
new file mode 100644
index 000000000..dcdd4e082
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/area/RStatOrgYPOServiceImpl.java
@@ -0,0 +1,22 @@
+package com.njcn.prepare.harmonic.service.mysql.Impl.area;
+
+import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.njcn.prepare.harmonic.mapper.mysql.area.RStatOrgYPOMapper;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatOrgYPO;
+import com.njcn.prepare.harmonic.service.mysql.area.RStatOrgYPOService;
+/**
+ *
+ * Description:
+ * Date: 2023/6/7 8:47【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+@Service
+public class RStatOrgYPOServiceImpl extends MppServiceImpl implements RStatOrgYPOService{
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatHarmonicMPOService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatHarmonicMPOService.java
new file mode 100644
index 000000000..51d9e18cc
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatHarmonicMPOService.java
@@ -0,0 +1,17 @@
+package com.njcn.prepare.harmonic.service.mysql.area;
+
+import com.github.jeffreyning.mybatisplus.service.IMppService;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicMPO;
+import com.baomidou.mybatisplus.extension.service.IService;
+ /**
+ *
+ * Description:
+ * Date: 2023/6/7 16:10【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+public interface RStatHarmonicMPOService extends IMppService {
+
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatHarmonicQPOService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatHarmonicQPOService.java
new file mode 100644
index 000000000..9ed7ebc3b
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatHarmonicQPOService.java
@@ -0,0 +1,17 @@
+package com.njcn.prepare.harmonic.service.mysql.area;
+
+import com.github.jeffreyning.mybatisplus.service.IMppService;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicQPO;
+import com.baomidou.mybatisplus.extension.service.IService;
+ /**
+ *
+ * Description:
+ * Date: 2023/6/7 16:11【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+public interface RStatHarmonicQPOService extends IMppService {
+
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatHarmonicService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatHarmonicService.java
index bd795fbec..9bfaab8db 100644
--- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatHarmonicService.java
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatHarmonicService.java
@@ -13,4 +13,5 @@ import java.util.List;
*/
public interface RStatHarmonicService {
void handler(List data, String dataDate, Integer type);
+
}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatHarmonicVoltageDPOService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatHarmonicVoltageDPOService.java
new file mode 100644
index 000000000..a7cf87647
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatHarmonicVoltageDPOService.java
@@ -0,0 +1,17 @@
+package com.njcn.prepare.harmonic.service.mysql.area;
+
+import com.github.jeffreyning.mybatisplus.service.IMppService;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicVoltageDPO;
+import com.baomidou.mybatisplus.extension.service.IService;
+ /**
+ *
+ * Description:
+ * Date: 2023/6/6 9:10【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+public interface RStatHarmonicVoltageDPOService extends IMppService {
+
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatHarmonicVoltageService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatHarmonicVoltageService.java
new file mode 100644
index 000000000..1f9775e4a
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatHarmonicVoltageService.java
@@ -0,0 +1,21 @@
+package com.njcn.prepare.harmonic.service.mysql.area;
+
+import com.github.jeffreyning.mybatisplus.service.IMppService;
+import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicVoltageDPO;
+
+import java.util.List;
+
+/**
+*
+* Description:
+* Date: 2023/6/6 9:10【需求编号】
+*
+* @author clam
+* @version V1.0.0
+*/
+public interface RStatHarmonicVoltageService {
+
+ void handlerByPowerLevel(List data, String dataDate, Integer type);
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatHarmonicYPOService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatHarmonicYPOService.java
new file mode 100644
index 000000000..277f708eb
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatHarmonicYPOService.java
@@ -0,0 +1,17 @@
+package com.njcn.prepare.harmonic.service.mysql.area;
+
+import com.github.jeffreyning.mybatisplus.service.IMppService;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatHarmonicYPO;
+import com.baomidou.mybatisplus.extension.service.IService;
+ /**
+ *
+ * Description:
+ * Date: 2023/6/7 16:11【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+public interface RStatHarmonicYPOService extends IMppService {
+
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatOrgQPOService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatOrgQPOService.java
new file mode 100644
index 000000000..c6e6cfab4
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatOrgQPOService.java
@@ -0,0 +1,18 @@
+package com.njcn.prepare.harmonic.service.mysql.area;
+
+import com.github.jeffreyning.mybatisplus.service.IMppService;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatOrgQPO;
+
+/**
+ *
+ * Description:
+ * Date: 2023/6/7 8:47【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+public interface RStatOrgQPOService extends IMppService {
+
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatOrgYPOService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatOrgYPOService.java
new file mode 100644
index 000000000..037c05134
--- /dev/null
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/area/RStatOrgYPOService.java
@@ -0,0 +1,18 @@
+package com.njcn.prepare.harmonic.service.mysql.area;
+
+import com.github.jeffreyning.mybatisplus.service.IMppService;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatOrgYPO;
+
+/**
+ *
+ * Description:
+ * Date: 2023/6/7 8:47【需求编号】
+ *
+ * @author clam
+ * @version V1.0.0
+ */
+public interface RStatOrgYPOService extends IMppService {
+
+
+}
diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RStatEventServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RStatEventServiceImpl.java
index 2b6d81dea..5ba00f37b 100644
--- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RStatEventServiceImpl.java
+++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/newalgorithm/impl/RStatEventServiceImpl.java
@@ -17,6 +17,8 @@ import com.njcn.prepare.harmonic.mapper.mysql.line.RMpEventDetailDMapper;
import com.njcn.prepare.harmonic.mapper.mysql.line.RMpEventDetailMMapper;
import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RStatEventDPOMapper;
import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RStatEventMPOMapper;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatOrgQPO;
+import com.njcn.prepare.harmonic.pojo.mysql.po.RStatOrgYPO;
import com.njcn.prepare.harmonic.pojo.po.*;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.*;
import com.njcn.system.api.DicDataFeignClient;