添加算法
This commit is contained in:
@@ -1,12 +1,13 @@
|
|||||||
package com.njcn.harmonic.pojo.po.dim;
|
package com.njcn.harmonic.pojo.po.dim;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
|
||||||
import com.njcn.db.bo.BaseEntity;
|
import com.njcn.db.bo.BaseEntity;
|
||||||
import java.io.Serializable;
|
|
||||||
import java.time.LocalDate;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
*
|
*
|
||||||
@@ -21,30 +22,29 @@ import lombok.Setter;
|
|||||||
public class RDimObjGlobalD extends BaseEntity {
|
public class RDimObjGlobalD extends BaseEntity {
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
@MppMultiId(value = "Org_Id")
|
||||||
private String orgId;
|
private String orgId;
|
||||||
|
@MppMultiId(value = "Statis_Date")
|
||||||
private LocalDate statisDate;
|
private LocalDate statisDate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 源荷对象类型
|
* 源荷对象类型
|
||||||
*/
|
*/
|
||||||
|
@MppMultiId(value = "Object_Type")
|
||||||
private String objectType;
|
private String objectType;
|
||||||
|
|
||||||
/**
|
|
||||||
* **源荷对象监测率(%)
|
|
||||||
*/
|
|
||||||
private Float monitorRate;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* **源荷对象超标占比(%)
|
* **源荷对象超标占比(%)
|
||||||
*/
|
*/
|
||||||
private Float limitRate;
|
private Double limitRate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* **源荷对象平均超标占比(%)
|
* **源荷对象平均超标占比(%)
|
||||||
*/
|
*/
|
||||||
private Float limitAvgRate;
|
private Double limitAvgRate;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
package com.njcn.harmonic.pojo.po.dim;
|
package com.njcn.harmonic.pojo.po.dim;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
|
||||||
import com.njcn.db.bo.BaseEntity;
|
import com.njcn.db.bo.BaseEntity;
|
||||||
import java.io.Serializable;
|
|
||||||
import java.time.LocalDate;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
*
|
*
|
||||||
@@ -22,29 +24,33 @@ public class RDimObjGlobalM extends BaseEntity {
|
|||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@MppMultiId(value = "Org_Id")
|
||||||
private String orgId;
|
private String orgId;
|
||||||
|
@MppMultiId(value = "Statis_Date")
|
||||||
private LocalDate statisDate;
|
private LocalDate statisDate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 源荷对象类型
|
* 源荷对象类型
|
||||||
*/
|
*/
|
||||||
|
@MppMultiId(value = "Object_Type")
|
||||||
private String objectType;
|
private String objectType;
|
||||||
|
|
||||||
/**
|
//
|
||||||
* **源荷对象监测率(%)
|
// /**
|
||||||
*/
|
// * **源荷对象监测率(%)
|
||||||
private Float monitorRate;
|
// */
|
||||||
|
// private Double monitorRate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* **源荷对象超标占比(%)
|
* **源荷对象超标占比(%)
|
||||||
*/
|
*/
|
||||||
private Float limitRate;
|
private Double limitRate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* **源荷对象平均超标占比(%)
|
* **源荷对象平均超标占比(%)
|
||||||
*/
|
*/
|
||||||
private Float limitAvgRate;
|
private Double limitAvgRate;
|
||||||
|
@TableField(value = "Limit_Avg_Day")
|
||||||
|
private Double limitAvgDay;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
package com.njcn.harmonic.pojo.po.dim;
|
package com.njcn.harmonic.pojo.po.dim;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableField;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
|
||||||
import com.njcn.db.bo.BaseEntity;
|
import com.njcn.db.bo.BaseEntity;
|
||||||
import java.io.Serializable;
|
|
||||||
import java.time.LocalDate;
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
*
|
*
|
||||||
@@ -22,29 +24,33 @@ public class RDimObjGlobalY extends BaseEntity {
|
|||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@MppMultiId(value = "Org_Id")
|
||||||
private String orgId;
|
private String orgId;
|
||||||
|
@MppMultiId(value = "Statis_Date")
|
||||||
private LocalDate statisDate;
|
private LocalDate statisDate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 源荷对象类型
|
* 源荷对象类型
|
||||||
*/
|
*/
|
||||||
|
@MppMultiId(value = "Object_Type")
|
||||||
private String objectType;
|
private String objectType;
|
||||||
|
|
||||||
/**
|
//
|
||||||
* **源荷对象监测率(%)
|
// /**
|
||||||
*/
|
// * **源荷对象监测率(%)
|
||||||
private Float monitorRate;
|
// */
|
||||||
|
// private Double monitorRate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* **源荷对象超标占比(%)
|
* **源荷对象超标占比(%)
|
||||||
*/
|
*/
|
||||||
private Float limitRate;
|
private Double limitRate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* **源荷对象平均超标占比(%)
|
* **源荷对象平均超标占比(%)
|
||||||
*/
|
*/
|
||||||
private Float limitAvgRate;
|
private Double limitAvgRate;
|
||||||
|
|
||||||
|
|
||||||
|
@TableField(value = "Limit_Avg_Day")
|
||||||
|
private Double limitAvgDay;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,17 +43,14 @@ public class RDimObjTargetM extends BaseEntity {
|
|||||||
/**
|
/**
|
||||||
* **源荷对象**指标超标占比(%)
|
* **源荷对象**指标超标占比(%)
|
||||||
*/
|
*/
|
||||||
private Float monitorRate;
|
private Double monitorRate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* **源荷对象**指标平均超标占比(%)
|
* **源荷对象**指标平均超标占比(%)
|
||||||
*/
|
*/
|
||||||
private Float limitRate;
|
private Double limitRate;
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* **源荷对象**指标平均超标天数(天)
|
|
||||||
*/
|
|
||||||
private Float limitAvgRate;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,17 +43,17 @@ public class RDimObjTargetY extends BaseEntity {
|
|||||||
/**
|
/**
|
||||||
* **源荷对象**指标超标占比(%)
|
* **源荷对象**指标超标占比(%)
|
||||||
*/
|
*/
|
||||||
private Float monitorRate;
|
private Double monitorRate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* **源荷对象**指标平均超标占比(%)
|
* **源荷对象**指标平均超标占比(%)
|
||||||
*/
|
*/
|
||||||
private Float limitRate;
|
private Double limitRate;
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* **源荷对象**指标平均超标天数(天)
|
// * **源荷对象**指标平均超标天数(天)
|
||||||
*/
|
// */
|
||||||
private Float limitAvgRate;
|
// private Float limitAvgRate;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package com.njcn.prepare.executor;
|
|||||||
|
|
||||||
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
|
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
|
||||||
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
|
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
|
||||||
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
|
|
||||||
import com.njcn.prepare.harmonic.service.mysql.RDimStationTargetDPOService;
|
import com.njcn.prepare.harmonic.service.mysql.RDimStationTargetDPOService;
|
||||||
import com.njcn.prepare.harmonic.service.mysql.RDimStationTargetMPOService;
|
import com.njcn.prepare.harmonic.service.mysql.RDimStationTargetMPOService;
|
||||||
import com.njcn.prepare.harmonic.service.mysql.RDimStationTargetYPOService;
|
import com.njcn.prepare.harmonic.service.mysql.RDimStationTargetYPOService;
|
||||||
@@ -61,6 +60,10 @@ public class OrgPointExecutor extends BaseExecutor{
|
|||||||
private final IRDimObjTargetMService irDimObjTargetMService;
|
private final IRDimObjTargetMService irDimObjTargetMService;
|
||||||
private final IRDimObjTargetYService irDimObjTargetYService;
|
private final IRDimObjTargetYService irDimObjTargetYService;
|
||||||
|
|
||||||
|
private final IRDimObjGlobalDService irDimObjGlobalDService;
|
||||||
|
private final IRDimObjGlobalMService irDimObjGlobalMService;
|
||||||
|
private final IRDimObjGlobalYService irDimObjGlobalYService;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -533,5 +536,34 @@ public class OrgPointExecutor extends BaseExecutor{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 河北主网新增算法表r_dim_obj_target_d/m/y
|
||||||
|
*/
|
||||||
|
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "rDimObjGlobal", nodeType = NodeTypeEnum.COMMON)
|
||||||
|
public boolean processRDimObjGlobalAccess(NodeComponent bindCmp) {
|
||||||
|
return isAccess(bindCmp);
|
||||||
|
}
|
||||||
|
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "rDimObjGlobal", nodeType = NodeTypeEnum.COMMON)
|
||||||
|
public void processRDimObjGlobalProcess(NodeComponent bindCmp) {
|
||||||
|
String tag = bindCmp.getTag();
|
||||||
|
CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam = bindCmp.getRequestData();
|
||||||
|
if (tag.equalsIgnoreCase("r_dim_obj_global_d")) {
|
||||||
|
//日表
|
||||||
|
irDimObjGlobalDService.handleDay(calculatedParam);
|
||||||
|
} else if (tag.equalsIgnoreCase("r_dim_obj_global_m")) {
|
||||||
|
//数据补招不执行非日表算法
|
||||||
|
if (!calculatedParam.isRepair()) {
|
||||||
|
//月表
|
||||||
|
irDimObjGlobalMService.handleMonth(calculatedParam);
|
||||||
|
}
|
||||||
|
}else if (tag.equalsIgnoreCase("r_dim_obj_global_y")) {
|
||||||
|
//数据补招不执行非日表算法
|
||||||
|
if (!calculatedParam.isRepair()) {
|
||||||
|
//年表
|
||||||
|
irDimObjGlobalYService.handleYear(calculatedParam);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.njcn.prepare.harmonic.mapper.mysql.dim;
|
package com.njcn.prepare.harmonic.mapper.mysql.dim;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
|
||||||
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalD;
|
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalD;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11,6 +12,6 @@ import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalD;
|
|||||||
* @author cdf
|
* @author cdf
|
||||||
* @since 2023-11-22
|
* @since 2023-11-22
|
||||||
*/
|
*/
|
||||||
public interface RDimObjGlobalDMapper extends BaseMapper<RDimObjGlobalD> {
|
public interface RDimObjGlobalDMapper extends MppBaseMapper<RDimObjGlobalD> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.njcn.prepare.harmonic.mapper.mysql.dim;
|
package com.njcn.prepare.harmonic.mapper.mysql.dim;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
|
||||||
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalM;
|
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalM;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11,6 +11,6 @@ import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalM;
|
|||||||
* @author cdf
|
* @author cdf
|
||||||
* @since 2023-11-22
|
* @since 2023-11-22
|
||||||
*/
|
*/
|
||||||
public interface RDimObjGlobalMMapper extends BaseMapper<RDimObjGlobalM> {
|
public interface RDimObjGlobalMMapper extends MppBaseMapper<RDimObjGlobalM> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.njcn.prepare.harmonic.mapper.mysql.dim;
|
package com.njcn.prepare.harmonic.mapper.mysql.dim;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
|
||||||
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalY;
|
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalY;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -11,6 +11,6 @@ import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalY;
|
|||||||
* @author cdf
|
* @author cdf
|
||||||
* @since 2023-11-22
|
* @since 2023-11-22
|
||||||
*/
|
*/
|
||||||
public interface RDimObjGlobalYMapper extends BaseMapper<RDimObjGlobalY> {
|
public interface RDimObjGlobalYMapper extends MppBaseMapper<RDimObjGlobalY> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.njcn.prepare.harmonic.service.mysql.dim;
|
package com.njcn.prepare.harmonic.service.mysql.dim;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.github.jeffreyning.mybatisplus.service.IMppService;
|
||||||
import com.njcn.device.biz.pojo.dto.DeptGetChildrenDTO;
|
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
|
||||||
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalD;
|
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalD;
|
||||||
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
|
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
|
||||||
|
|
||||||
@@ -13,6 +13,7 @@ import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
|
|||||||
* @author cdf
|
* @author cdf
|
||||||
* @since 2023-11-22
|
* @since 2023-11-22
|
||||||
*/
|
*/
|
||||||
public interface IRDimObjGlobalDService extends IService<RDimObjGlobalD> {
|
public interface IRDimObjGlobalDService extends IMppService<RDimObjGlobalD> {
|
||||||
|
|
||||||
|
void handleDay(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
package com.njcn.prepare.harmonic.service.mysql.dim;
|
package com.njcn.prepare.harmonic.service.mysql.dim;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.github.jeffreyning.mybatisplus.service.IMppService;
|
||||||
|
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
|
||||||
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalM;
|
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalM;
|
||||||
|
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -11,6 +13,7 @@ import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalM;
|
|||||||
* @author cdf
|
* @author cdf
|
||||||
* @since 2023-11-22
|
* @since 2023-11-22
|
||||||
*/
|
*/
|
||||||
public interface IRDimObjGlobalMService extends IService<RDimObjGlobalM> {
|
public interface IRDimObjGlobalMService extends IMppService<RDimObjGlobalM> {
|
||||||
|
|
||||||
|
void handleMonth(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
package com.njcn.prepare.harmonic.service.mysql.dim;
|
package com.njcn.prepare.harmonic.service.mysql.dim;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.github.jeffreyning.mybatisplus.service.IMppService;
|
||||||
|
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
|
||||||
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalY;
|
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalY;
|
||||||
|
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -11,6 +13,7 @@ import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalY;
|
|||||||
* @author cdf
|
* @author cdf
|
||||||
* @since 2023-11-22
|
* @since 2023-11-22
|
||||||
*/
|
*/
|
||||||
public interface IRDimObjGlobalYService extends IService<RDimObjGlobalY> {
|
public interface IRDimObjGlobalYService extends IMppService<RDimObjGlobalY> {
|
||||||
|
|
||||||
|
void handleYear(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,35 @@
|
|||||||
package com.njcn.prepare.harmonic.service.mysql.dim.impl;
|
package com.njcn.prepare.harmonic.service.mysql.dim.impl;
|
||||||
|
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import cn.hutool.core.date.DatePattern;
|
||||||
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||||
|
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
|
||||||
|
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
|
||||||
|
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
|
||||||
|
import com.njcn.device.pms.pojo.po.Monitor;
|
||||||
|
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
|
||||||
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalD;
|
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalD;
|
||||||
import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimObjGlobalDMapper;
|
import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimObjGlobalDMapper;
|
||||||
|
import com.njcn.prepare.harmonic.mapper.mysql.line.PmsMonitorMapper;
|
||||||
|
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
|
||||||
|
import com.njcn.prepare.harmonic.pojo.mysql.ROperatingMonitorDPO;
|
||||||
|
import com.njcn.prepare.harmonic.service.mysql.day.IRStatLimitRateDService;
|
||||||
import com.njcn.prepare.harmonic.service.mysql.dim.IRDimObjGlobalDService;
|
import com.njcn.prepare.harmonic.service.mysql.dim.IRDimObjGlobalDService;
|
||||||
|
import com.njcn.prepare.harmonic.service.mysql.line.ROperatingMonitorService;
|
||||||
|
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 org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -16,6 +40,120 @@ import org.springframework.stereotype.Service;
|
|||||||
* @since 2023-11-22
|
* @since 2023-11-22
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class RDimObjGlobalDServiceImpl extends ServiceImpl<RDimObjGlobalDMapper, RDimObjGlobalD> implements IRDimObjGlobalDService {
|
@RequiredArgsConstructor
|
||||||
|
public class RDimObjGlobalDServiceImpl extends MppServiceImpl<RDimObjGlobalDMapper, RDimObjGlobalD> implements IRDimObjGlobalDService {
|
||||||
|
|
||||||
|
private final DicDataFeignClient dicDataFeignClient;
|
||||||
|
private final ROperatingMonitorService rOperatingMonitorService;
|
||||||
|
private final IRStatLimitRateDService irStatLimitRateDService;
|
||||||
|
//咨询后直接用Mapper查询,这个算法只用pms补考虑pq,后续不知道要不要改
|
||||||
|
private final PmsMonitorMapper pmsMonitorMapper;
|
||||||
|
@Override
|
||||||
|
public void handleDay(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) {
|
||||||
|
List<RDimObjGlobalD> rDimObjGlobalDS = new ArrayList<>();
|
||||||
|
|
||||||
|
LocalDate localDate = LocalDateTimeUtil.parseDate(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN);
|
||||||
|
String beginDay = LocalDateTimeUtil.format(LocalDateTimeUtil.beginOfDay(LocalDateTimeUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)),DatePattern.NORM_DATETIME_PATTERN);
|
||||||
|
String endDay = LocalDateTimeUtil.format(LocalDateTimeUtil.endOfDay(LocalDateTimeUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)),DatePattern.NORM_DATETIME_PATTERN);
|
||||||
|
List<DictData> indicatorTypeDate = dicDataFeignClient.getDicDataByTypeCode(
|
||||||
|
DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
|
||||||
|
//过滤电压总谐波畸变率、2-50次谐波电流、三相不平衡、负序电流、闪变
|
||||||
|
List<DictData> finalIndicatorTypeDate = indicatorTypeDate.stream().filter(temp -> Objects.equals(temp.getCode(), DicDataEnum.VOLTAGE_DEV.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.FLICKER.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.PHASE_VOLTAGE.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.THD_V.getCode())||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.HARMONIC_CURRENT.getCode())).collect(Collectors.toList());
|
||||||
|
|
||||||
|
List<DictData> monitoringLabels = dicDataFeignClient.getDicDataByTypeCode(
|
||||||
|
DicDataTypeEnum.MONITORING_LABELS.getCode()).getData();
|
||||||
|
//过滤监测对象包括牵引站、风电场、光伏电站、重要,敏感用户
|
||||||
|
List<String> monitoringLabelIds = monitoringLabels.stream().filter(temp -> Objects.equals(
|
||||||
|
temp.getCode(), DicDataEnum.POWER_STATION.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.WIND_FARM.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.SENSITIVE_USERS.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.IMPORTANT_USERS.getCode())||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.TRACTION_STATION.getCode())).map(DictData::getId).collect(Collectors.toList());
|
||||||
|
|
||||||
|
for (DeptGetChildrenMoreDTO deptGetChildrenMoreDTO : calculatedParam.getIdList()) {
|
||||||
|
if (!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getLineBaseList())) {
|
||||||
|
List<LineDevGetDTO> lineBaseList = deptGetChildrenMoreDTO.getLineBaseList();
|
||||||
|
if (CollectionUtils.isEmpty(lineBaseList)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
List<String> collect2 = lineBaseList.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
|
||||||
|
List<ROperatingMonitorDPO> list = rOperatingMonitorService.lambdaQuery().
|
||||||
|
in(ROperatingMonitorDPO::getMeasurementPointId, collect2).
|
||||||
|
eq(ROperatingMonitorDPO::getDataDate, localDate).
|
||||||
|
ge(ROperatingMonitorDPO::getDataIntegrityRate, 0.95).
|
||||||
|
eq(ROperatingMonitorDPO::getIsUnusual, 1).list();
|
||||||
|
List<Monitor> monitorList = new ArrayList<>();
|
||||||
|
|
||||||
|
if(CollectionUtils.isEmpty(list)){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
List<String> collect = list.stream().map(ROperatingMonitorDPO::getMeasurementPointId).distinct().collect(Collectors.toList());
|
||||||
|
monitorList = pmsMonitorMapper.queryEffectiveBusbars(collect);
|
||||||
|
monitorList = monitorList.stream().filter(temp -> monitoringLabelIds.contains(temp.getMonitorTag())).collect(Collectors.toList());
|
||||||
|
Map<String, List<Monitor>> collect1 = monitorList.stream().
|
||||||
|
collect(Collectors.groupingBy(Monitor::getMonitorTag));
|
||||||
|
|
||||||
|
List<String> linids = monitorList.stream().map(Monitor::getId).collect(Collectors.toList());
|
||||||
|
List<RStatLimitRateDPO> rStatLimitRateDPOS = irStatLimitRateDService.findList(linids, beginDay, endDay);
|
||||||
|
if(CollectionUtils.isEmpty(rStatLimitRateDPOS)){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
collect1.forEach((tag, monitors)->{
|
||||||
|
|
||||||
|
RDimObjGlobalD rDimObjGlobalD = new RDimObjGlobalD();
|
||||||
|
rDimObjGlobalD.setOrgId(deptGetChildrenMoreDTO.getUnitId());
|
||||||
|
rDimObjGlobalD.setStatisDate(localDate);
|
||||||
|
rDimObjGlobalD.setObjectType(tag);
|
||||||
|
//有效接入监测点
|
||||||
|
int effectivePoint = monitors.size();
|
||||||
|
//对应指标的超表监测点
|
||||||
|
int overLimitsPoint = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->
|
||||||
|
po.getUaberranceOvertime()>0||
|
||||||
|
po.getUaberranceOvertime()>0||
|
||||||
|
po.getFlickerOvertime()>0 ||
|
||||||
|
po.getINegOvertime()>0||
|
||||||
|
po.getIharm2Overtime()>0||
|
||||||
|
po.getIharm3Overtime() >0||
|
||||||
|
po.getIharm4Overtime() >0||
|
||||||
|
po.getIharm5Overtime() >0||
|
||||||
|
po.getIharm6Overtime() >0||
|
||||||
|
po.getIharm7Overtime() >0||
|
||||||
|
po.getIharm8Overtime() >0||
|
||||||
|
po.getIharm9Overtime() >0||
|
||||||
|
po.getIharm10Overtime() >0||
|
||||||
|
po.getIharm11Overtime() >0||
|
||||||
|
po.getIharm12Overtime() >0||
|
||||||
|
po.getIharm13Overtime() >0||
|
||||||
|
po.getIharm14Overtime() >0||
|
||||||
|
po.getIharm15Overtime() >0||
|
||||||
|
po.getIharm16Overtime() >0||
|
||||||
|
po.getIharm17Overtime() >0||
|
||||||
|
po.getIharm18Overtime() >0||
|
||||||
|
po.getIharm19Overtime() >0||
|
||||||
|
po.getIharm20Overtime() >0||
|
||||||
|
po.getIharm21Overtime() >0||
|
||||||
|
po.getIharm22Overtime() >0||
|
||||||
|
po.getIharm23Overtime() >0||
|
||||||
|
po.getIharm24Overtime() >0||
|
||||||
|
po.getIharm25Overtime()>0).count()+"");
|
||||||
|
double v = Double.valueOf(overLimitsPoint) / effectivePoint;
|
||||||
|
rDimObjGlobalD.setLimitAvgRate(Math.round(v * 100.0) / 100.0);
|
||||||
|
rDimObjGlobalD.setLimitRate(Math.round(v * 100.0) / 100.0);
|
||||||
|
rDimObjGlobalDS.add(rDimObjGlobalD);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!CollectionUtils.isEmpty(rDimObjGlobalDS)) {
|
||||||
|
this.saveOrUpdateBatchByMultiId(rDimObjGlobalDS, 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,36 @@
|
|||||||
package com.njcn.prepare.harmonic.service.mysql.dim.impl;
|
package com.njcn.prepare.harmonic.service.mysql.dim.impl;
|
||||||
|
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import cn.hutool.core.date.DatePattern;
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||||
|
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
|
||||||
|
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
|
||||||
|
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
|
||||||
|
import com.njcn.device.pms.pojo.po.Monitor;
|
||||||
|
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
|
||||||
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalM;
|
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalM;
|
||||||
import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimObjGlobalMMapper;
|
import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimObjGlobalMMapper;
|
||||||
|
import com.njcn.prepare.harmonic.mapper.mysql.line.PmsMonitorMapper;
|
||||||
|
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
|
||||||
|
import com.njcn.prepare.harmonic.pojo.mysql.ROperatingMonitorDPO;
|
||||||
|
import com.njcn.prepare.harmonic.service.mysql.day.IRStatLimitRateDService;
|
||||||
import com.njcn.prepare.harmonic.service.mysql.dim.IRDimObjGlobalMService;
|
import com.njcn.prepare.harmonic.service.mysql.dim.IRDimObjGlobalMService;
|
||||||
|
import com.njcn.prepare.harmonic.service.mysql.line.ROperatingMonitorService;
|
||||||
|
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 org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -16,6 +41,152 @@ import org.springframework.stereotype.Service;
|
|||||||
* @since 2023-11-22
|
* @since 2023-11-22
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class RDimObjGlobalMServiceImpl extends ServiceImpl<RDimObjGlobalMMapper, RDimObjGlobalM> implements IRDimObjGlobalMService {
|
@RequiredArgsConstructor
|
||||||
|
public class RDimObjGlobalMServiceImpl extends MppServiceImpl<RDimObjGlobalMMapper, RDimObjGlobalM> implements IRDimObjGlobalMService {
|
||||||
|
private final DicDataFeignClient dicDataFeignClient;
|
||||||
|
private final ROperatingMonitorService rOperatingMonitorService;
|
||||||
|
private final IRStatLimitRateDService irStatLimitRateDService;
|
||||||
|
//咨询后直接用Mapper查询,这个算法只用pms补考虑pq,后续不知道要不要改
|
||||||
|
private final PmsMonitorMapper pmsMonitorMapper;
|
||||||
|
@Override
|
||||||
|
public void handleMonth(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) {
|
||||||
|
List<RDimObjGlobalM> rDimObjGlobalMS = new ArrayList<>();
|
||||||
|
|
||||||
|
LocalDate localDate = LocalDateTimeUtil.parseDate(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN);
|
||||||
|
String begin = LocalDateTimeUtil.format(DateUtil.beginOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)).toLocalDateTime(),DatePattern.NORM_DATETIME_PATTERN);
|
||||||
|
String end = LocalDateTimeUtil.format(DateUtil.endOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)).toLocalDateTime(),DatePattern.NORM_DATETIME_PATTERN);
|
||||||
|
List<DictData> indicatorTypeDate = dicDataFeignClient.getDicDataByTypeCode(
|
||||||
|
DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
|
||||||
|
//过滤电压总谐波畸变率、2-50次谐波电流、三相不平衡、负序电流、闪变
|
||||||
|
List<DictData> finalIndicatorTypeDate = indicatorTypeDate.stream().filter(temp -> Objects.equals(temp.getCode(), DicDataEnum.VOLTAGE_DEV.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.FLICKER.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.PHASE_VOLTAGE.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.THD_V.getCode())||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.HARMONIC_CURRENT.getCode())).collect(Collectors.toList());
|
||||||
|
|
||||||
|
List<DictData> monitoringLabels = dicDataFeignClient.getDicDataByTypeCode(
|
||||||
|
DicDataTypeEnum.MONITORING_LABELS.getCode()).getData();
|
||||||
|
//过滤监测对象包括牵引站、风电场、光伏电站、重要,敏感用户
|
||||||
|
List<String> monitoringLabelIds = monitoringLabels.stream().filter(temp -> Objects.equals(
|
||||||
|
temp.getCode(), DicDataEnum.POWER_STATION.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.WIND_FARM.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.SENSITIVE_USERS.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.IMPORTANT_USERS.getCode())||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.TRACTION_STATION.getCode())).map(DictData::getId).collect(Collectors.toList());
|
||||||
|
|
||||||
|
for (DeptGetChildrenMoreDTO deptGetChildrenMoreDTO : calculatedParam.getIdList()) {
|
||||||
|
if (!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getLineBaseList())) {
|
||||||
|
List<LineDevGetDTO> lineBaseList = deptGetChildrenMoreDTO.getLineBaseList();
|
||||||
|
if (CollectionUtils.isEmpty(lineBaseList)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
List<String> collect2 = lineBaseList.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
|
||||||
|
List<ROperatingMonitorDPO> list = rOperatingMonitorService.lambdaQuery().
|
||||||
|
in(ROperatingMonitorDPO::getMeasurementPointId, collect2).
|
||||||
|
eq(ROperatingMonitorDPO::getDataDate, localDate).
|
||||||
|
ge(ROperatingMonitorDPO::getDataIntegrityRate, 0.95).
|
||||||
|
eq(ROperatingMonitorDPO::getIsUnusual, 1).list();
|
||||||
|
List<Monitor> monitorList = new ArrayList<>();
|
||||||
|
|
||||||
|
if(CollectionUtils.isEmpty(list)){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
List<String> collect = list.stream().map(ROperatingMonitorDPO::getMeasurementPointId).distinct().collect(Collectors.toList());
|
||||||
|
monitorList = pmsMonitorMapper.queryEffectiveBusbars(collect);
|
||||||
|
monitorList = monitorList.stream().filter(temp -> monitoringLabelIds.contains(temp.getMonitorTag())).collect(Collectors.toList());
|
||||||
|
Map<String, List<Monitor>> collect1 = monitorList.stream().
|
||||||
|
collect(Collectors.groupingBy(Monitor::getMonitorTag));
|
||||||
|
|
||||||
|
List<String> linids = monitorList.stream().map(Monitor::getId).collect(Collectors.toList());
|
||||||
|
List<RStatLimitRateDPO> rStatLimitRateDPOS = irStatLimitRateDService.findList(linids, begin, end);
|
||||||
|
if(CollectionUtils.isEmpty(rStatLimitRateDPOS)){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
collect1.forEach((tag, monitors)->{
|
||||||
|
|
||||||
|
RDimObjGlobalM rDimObjGlobalM = new RDimObjGlobalM();
|
||||||
|
rDimObjGlobalM.setOrgId(deptGetChildrenMoreDTO.getUnitId());
|
||||||
|
rDimObjGlobalM.setStatisDate(localDate);
|
||||||
|
rDimObjGlobalM.setObjectType(tag);
|
||||||
|
//有效接入监测点
|
||||||
|
Long effectivePoint = monitors.stream().map(Monitor::getId).distinct().count();
|
||||||
|
//对应指标的超表监测点
|
||||||
|
int overLimitsPoint = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->
|
||||||
|
po.getUaberranceOvertime()>0||
|
||||||
|
po.getUaberranceOvertime()>0||
|
||||||
|
po.getFlickerOvertime()>0 ||
|
||||||
|
po.getINegOvertime()>0||
|
||||||
|
po.getIharm2Overtime()>0||
|
||||||
|
po.getIharm3Overtime() >0||
|
||||||
|
po.getIharm4Overtime() >0||
|
||||||
|
po.getIharm5Overtime() >0||
|
||||||
|
po.getIharm6Overtime() >0||
|
||||||
|
po.getIharm7Overtime() >0||
|
||||||
|
po.getIharm8Overtime() >0||
|
||||||
|
po.getIharm9Overtime() >0||
|
||||||
|
po.getIharm10Overtime() >0||
|
||||||
|
po.getIharm11Overtime() >0||
|
||||||
|
po.getIharm12Overtime() >0||
|
||||||
|
po.getIharm13Overtime() >0||
|
||||||
|
po.getIharm14Overtime() >0||
|
||||||
|
po.getIharm15Overtime() >0||
|
||||||
|
po.getIharm16Overtime() >0||
|
||||||
|
po.getIharm17Overtime() >0||
|
||||||
|
po.getIharm18Overtime() >0||
|
||||||
|
po.getIharm19Overtime() >0||
|
||||||
|
po.getIharm20Overtime() >0||
|
||||||
|
po.getIharm21Overtime() >0||
|
||||||
|
po.getIharm22Overtime() >0||
|
||||||
|
po.getIharm23Overtime() >0||
|
||||||
|
po.getIharm24Overtime() >0||
|
||||||
|
po.getIharm25Overtime()>0).map(RStatLimitRateDPO::getLineId).distinct().count()+"");
|
||||||
|
|
||||||
|
int overLimits = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->
|
||||||
|
po.getUaberranceOvertime()>0||
|
||||||
|
po.getUaberranceOvertime()>0||
|
||||||
|
po.getFlickerOvertime()>0 ||
|
||||||
|
po.getINegOvertime()>0||
|
||||||
|
po.getIharm2Overtime()>0||
|
||||||
|
po.getIharm3Overtime() >0||
|
||||||
|
po.getIharm4Overtime() >0||
|
||||||
|
po.getIharm5Overtime() >0||
|
||||||
|
po.getIharm6Overtime() >0||
|
||||||
|
po.getIharm7Overtime() >0||
|
||||||
|
po.getIharm8Overtime() >0||
|
||||||
|
po.getIharm9Overtime() >0||
|
||||||
|
po.getIharm10Overtime() >0||
|
||||||
|
po.getIharm11Overtime() >0||
|
||||||
|
po.getIharm12Overtime() >0||
|
||||||
|
po.getIharm13Overtime() >0||
|
||||||
|
po.getIharm14Overtime() >0||
|
||||||
|
po.getIharm15Overtime() >0||
|
||||||
|
po.getIharm16Overtime() >0||
|
||||||
|
po.getIharm17Overtime() >0||
|
||||||
|
po.getIharm18Overtime() >0||
|
||||||
|
po.getIharm19Overtime() >0||
|
||||||
|
po.getIharm20Overtime() >0||
|
||||||
|
po.getIharm21Overtime() >0||
|
||||||
|
po.getIharm22Overtime() >0||
|
||||||
|
po.getIharm23Overtime() >0||
|
||||||
|
po.getIharm24Overtime() >0||
|
||||||
|
po.getIharm25Overtime()>0).map(RStatLimitRateDPO::getLineId).count()+"");
|
||||||
|
|
||||||
|
double v1 = Double.valueOf(overLimits) / overLimitsPoint;
|
||||||
|
|
||||||
|
|
||||||
|
double v = Double.valueOf(overLimitsPoint) / effectivePoint;
|
||||||
|
rDimObjGlobalM.setLimitAvgRate(Math.round(v * 100.0) / 100.0);
|
||||||
|
rDimObjGlobalM.setLimitRate(Math.round(v * 100.0) / 100.0);
|
||||||
|
rDimObjGlobalM.setLimitAvgDay((Math.round(v1 * 100.0) / 100.0));
|
||||||
|
rDimObjGlobalMS.add(rDimObjGlobalM);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (!CollectionUtils.isEmpty(rDimObjGlobalMS)) {
|
||||||
|
this.saveOrUpdateBatchByMultiId(rDimObjGlobalMS, 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,11 +1,36 @@
|
|||||||
package com.njcn.prepare.harmonic.service.mysql.dim.impl;
|
package com.njcn.prepare.harmonic.service.mysql.dim.impl;
|
||||||
|
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import cn.hutool.core.date.DatePattern;
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||||
|
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
|
||||||
|
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
|
||||||
|
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
|
||||||
|
import com.njcn.device.pms.pojo.po.Monitor;
|
||||||
|
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
|
||||||
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalY;
|
import com.njcn.harmonic.pojo.po.dim.RDimObjGlobalY;
|
||||||
import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimObjGlobalYMapper;
|
import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimObjGlobalYMapper;
|
||||||
|
import com.njcn.prepare.harmonic.mapper.mysql.line.PmsMonitorMapper;
|
||||||
|
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
|
||||||
|
import com.njcn.prepare.harmonic.pojo.mysql.ROperatingMonitorDPO;
|
||||||
|
import com.njcn.prepare.harmonic.service.mysql.day.IRStatLimitRateDService;
|
||||||
import com.njcn.prepare.harmonic.service.mysql.dim.IRDimObjGlobalYService;
|
import com.njcn.prepare.harmonic.service.mysql.dim.IRDimObjGlobalYService;
|
||||||
|
import com.njcn.prepare.harmonic.service.mysql.line.ROperatingMonitorService;
|
||||||
|
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 org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -16,6 +41,155 @@ import org.springframework.stereotype.Service;
|
|||||||
* @since 2023-11-22
|
* @since 2023-11-22
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class RDimObjGlobalYServiceImpl extends ServiceImpl<RDimObjGlobalYMapper, RDimObjGlobalY> implements IRDimObjGlobalYService {
|
@RequiredArgsConstructor
|
||||||
|
public class RDimObjGlobalYServiceImpl extends MppServiceImpl<RDimObjGlobalYMapper, RDimObjGlobalY> implements IRDimObjGlobalYService {
|
||||||
|
private final DicDataFeignClient dicDataFeignClient;
|
||||||
|
private final ROperatingMonitorService rOperatingMonitorService;
|
||||||
|
private final IRStatLimitRateDService irStatLimitRateDService;
|
||||||
|
//咨询后直接用Mapper查询,这个算法只用pms补考虑pq,后续不知道要不要改
|
||||||
|
private final PmsMonitorMapper pmsMonitorMapper;
|
||||||
|
@Override
|
||||||
|
public void handleYear(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) {
|
||||||
|
List<RDimObjGlobalY> rDimObjGlobalYS = new ArrayList<>();
|
||||||
|
|
||||||
|
LocalDate localDate = LocalDateTimeUtil.parseDate(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN);
|
||||||
|
String begin = LocalDateTimeUtil.format(DateUtil.beginOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)).toLocalDateTime(),DatePattern.NORM_DATETIME_PATTERN);
|
||||||
|
String end = LocalDateTimeUtil.format(DateUtil.endOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)).toLocalDateTime(),DatePattern.NORM_DATETIME_PATTERN);
|
||||||
|
List<DictData> indicatorTypeDate = dicDataFeignClient.getDicDataByTypeCode(
|
||||||
|
DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
|
||||||
|
//过滤电压总谐波畸变率、2-50次谐波电流、三相不平衡、负序电流、闪变
|
||||||
|
List<DictData> finalIndicatorTypeDate = indicatorTypeDate.stream().filter(temp -> Objects.equals(temp.getCode(), DicDataEnum.VOLTAGE_DEV.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.FLICKER.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.PHASE_VOLTAGE.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.THD_V.getCode())||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.HARMONIC_CURRENT.getCode())).collect(Collectors.toList());
|
||||||
|
|
||||||
|
List<DictData> monitoringLabels = dicDataFeignClient.getDicDataByTypeCode(
|
||||||
|
DicDataTypeEnum.MONITORING_LABELS.getCode()).getData();
|
||||||
|
//过滤监测对象包括牵引站、风电场、光伏电站、重要,敏感用户
|
||||||
|
List<String> monitoringLabelIds = monitoringLabels.stream().filter(temp -> Objects.equals(
|
||||||
|
temp.getCode(), DicDataEnum.POWER_STATION.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.WIND_FARM.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.SENSITIVE_USERS.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.IMPORTANT_USERS.getCode())||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.TRACTION_STATION.getCode())).map(DictData::getId).collect(Collectors.toList());
|
||||||
|
|
||||||
|
for (DeptGetChildrenMoreDTO deptGetChildrenMoreDTO : calculatedParam.getIdList()) {
|
||||||
|
if (!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getLineBaseList())) {
|
||||||
|
List<LineDevGetDTO> lineBaseList = deptGetChildrenMoreDTO.getLineBaseList();
|
||||||
|
if (CollectionUtils.isEmpty(lineBaseList)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
List<String> collect2 = lineBaseList.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
|
||||||
|
List<ROperatingMonitorDPO> list = rOperatingMonitorService.lambdaQuery().
|
||||||
|
in(ROperatingMonitorDPO::getMeasurementPointId, collect2).
|
||||||
|
eq(ROperatingMonitorDPO::getDataDate, localDate).
|
||||||
|
ge(ROperatingMonitorDPO::getDataIntegrityRate, 0.95).
|
||||||
|
eq(ROperatingMonitorDPO::getIsUnusual, 1).list();
|
||||||
|
List<Monitor> monitorList = new ArrayList<>();
|
||||||
|
|
||||||
|
if(CollectionUtils.isEmpty(list)){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
List<String> collect = list.stream().map(ROperatingMonitorDPO::getMeasurementPointId).distinct().collect(Collectors.toList());
|
||||||
|
monitorList = pmsMonitorMapper.queryEffectiveBusbars(collect);
|
||||||
|
monitorList = monitorList.stream().filter(temp -> monitoringLabelIds.contains(temp.getMonitorTag())).collect(Collectors.toList());
|
||||||
|
Map<String, List<Monitor>> collect1 = monitorList.stream().
|
||||||
|
collect(Collectors.groupingBy(Monitor::getMonitorTag));
|
||||||
|
|
||||||
|
List<String> linids = monitorList.stream().map(Monitor::getId).collect(Collectors.toList());
|
||||||
|
List<RStatLimitRateDPO> rStatLimitRateDPOS = irStatLimitRateDService.findList(linids, begin, end);
|
||||||
|
if(CollectionUtils.isEmpty(rStatLimitRateDPOS)){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
collect1.forEach((tag, monitors)->{
|
||||||
|
|
||||||
|
RDimObjGlobalY rDimObjGlobalY = new RDimObjGlobalY();
|
||||||
|
rDimObjGlobalY.setOrgId(deptGetChildrenMoreDTO.getUnitId());
|
||||||
|
rDimObjGlobalY.setStatisDate(localDate);
|
||||||
|
rDimObjGlobalY.setObjectType(tag);
|
||||||
|
//有效接入监测点
|
||||||
|
Long effectivePoint = monitors.stream().map(Monitor::getId).distinct().count();
|
||||||
|
//对应指标的超表监测点
|
||||||
|
int overLimitsPoint = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->
|
||||||
|
po.getUaberranceOvertime()>0||
|
||||||
|
po.getUaberranceOvertime()>0||
|
||||||
|
po.getFlickerOvertime()>0 ||
|
||||||
|
po.getINegOvertime()>0||
|
||||||
|
po.getIharm2Overtime()>0||
|
||||||
|
po.getIharm3Overtime() >0||
|
||||||
|
po.getIharm4Overtime() >0||
|
||||||
|
po.getIharm5Overtime() >0||
|
||||||
|
po.getIharm6Overtime() >0||
|
||||||
|
po.getIharm7Overtime() >0||
|
||||||
|
po.getIharm8Overtime() >0||
|
||||||
|
po.getIharm9Overtime() >0||
|
||||||
|
po.getIharm10Overtime() >0||
|
||||||
|
po.getIharm11Overtime() >0||
|
||||||
|
po.getIharm12Overtime() >0||
|
||||||
|
po.getIharm13Overtime() >0||
|
||||||
|
po.getIharm14Overtime() >0||
|
||||||
|
po.getIharm15Overtime() >0||
|
||||||
|
po.getIharm16Overtime() >0||
|
||||||
|
po.getIharm17Overtime() >0||
|
||||||
|
po.getIharm18Overtime() >0||
|
||||||
|
po.getIharm19Overtime() >0||
|
||||||
|
po.getIharm20Overtime() >0||
|
||||||
|
po.getIharm21Overtime() >0||
|
||||||
|
po.getIharm22Overtime() >0||
|
||||||
|
po.getIharm23Overtime() >0||
|
||||||
|
po.getIharm24Overtime() >0||
|
||||||
|
po.getIharm25Overtime()>0).map(RStatLimitRateDPO::getLineId).distinct().count()+"");
|
||||||
|
|
||||||
|
int overLimits = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->
|
||||||
|
po.getUaberranceOvertime()>0||
|
||||||
|
po.getUaberranceOvertime()>0||
|
||||||
|
po.getFlickerOvertime()>0 ||
|
||||||
|
po.getINegOvertime()>0||
|
||||||
|
po.getIharm2Overtime()>0||
|
||||||
|
po.getIharm3Overtime() >0||
|
||||||
|
po.getIharm4Overtime() >0||
|
||||||
|
po.getIharm5Overtime() >0||
|
||||||
|
po.getIharm6Overtime() >0||
|
||||||
|
po.getIharm7Overtime() >0||
|
||||||
|
po.getIharm8Overtime() >0||
|
||||||
|
po.getIharm9Overtime() >0||
|
||||||
|
po.getIharm10Overtime() >0||
|
||||||
|
po.getIharm11Overtime() >0||
|
||||||
|
po.getIharm12Overtime() >0||
|
||||||
|
po.getIharm13Overtime() >0||
|
||||||
|
po.getIharm14Overtime() >0||
|
||||||
|
po.getIharm15Overtime() >0||
|
||||||
|
po.getIharm16Overtime() >0||
|
||||||
|
po.getIharm17Overtime() >0||
|
||||||
|
po.getIharm18Overtime() >0||
|
||||||
|
po.getIharm19Overtime() >0||
|
||||||
|
po.getIharm20Overtime() >0||
|
||||||
|
po.getIharm21Overtime() >0||
|
||||||
|
po.getIharm22Overtime() >0||
|
||||||
|
po.getIharm23Overtime() >0||
|
||||||
|
po.getIharm24Overtime() >0||
|
||||||
|
po.getIharm25Overtime()>0).map(RStatLimitRateDPO::getLineId).count()+"");
|
||||||
|
Double v1 = 0.00;
|
||||||
|
if(!(overLimitsPoint==0)){
|
||||||
|
v1 = Double.valueOf(overLimits) / overLimitsPoint;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double v = Double.valueOf(overLimitsPoint) / effectivePoint;
|
||||||
|
rDimObjGlobalY.setLimitAvgRate(Math.round(v * 100.0) / 100.0);
|
||||||
|
rDimObjGlobalY.setLimitRate(Math.round(v * 100.0) / 100.0);
|
||||||
|
rDimObjGlobalY.setLimitAvgDay((Math.round(v1 * 100.0) / 100.0));
|
||||||
|
|
||||||
|
rDimObjGlobalYS.add(rDimObjGlobalY);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!CollectionUtils.isEmpty(rDimObjGlobalYS)) {
|
||||||
|
this.saveOrUpdateBatchByMultiId(rDimObjGlobalYS, 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,14 +1,36 @@
|
|||||||
package com.njcn.prepare.harmonic.service.mysql.dim.impl;
|
package com.njcn.prepare.harmonic.service.mysql.dim.impl;
|
||||||
|
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import cn.hutool.core.date.DatePattern;
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||||
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
|
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
|
||||||
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
|
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
|
||||||
|
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
|
||||||
|
import com.njcn.device.pms.pojo.po.Monitor;
|
||||||
|
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
|
||||||
import com.njcn.harmonic.pojo.po.dim.RDimObjTargetM;
|
import com.njcn.harmonic.pojo.po.dim.RDimObjTargetM;
|
||||||
import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimObjTargetMMapper;
|
import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimObjTargetMMapper;
|
||||||
|
import com.njcn.prepare.harmonic.mapper.mysql.line.PmsMonitorMapper;
|
||||||
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
|
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
|
||||||
|
import com.njcn.prepare.harmonic.pojo.mysql.ROperatingMonitorDPO;
|
||||||
|
import com.njcn.prepare.harmonic.service.mysql.day.IRStatLimitRateDService;
|
||||||
import com.njcn.prepare.harmonic.service.mysql.dim.IRDimObjTargetMService;
|
import com.njcn.prepare.harmonic.service.mysql.dim.IRDimObjTargetMService;
|
||||||
|
import com.njcn.prepare.harmonic.service.mysql.line.ROperatingMonitorService;
|
||||||
|
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 org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -19,10 +41,132 @@ import org.springframework.stereotype.Service;
|
|||||||
* @since 2023-11-22
|
* @since 2023-11-22
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
public class RDimObjTargetMServiceImpl extends MppServiceImpl<RDimObjTargetMMapper, RDimObjTargetM> implements IRDimObjTargetMService {
|
public class RDimObjTargetMServiceImpl extends MppServiceImpl<RDimObjTargetMMapper, RDimObjTargetM> implements IRDimObjTargetMService {
|
||||||
|
private final DicDataFeignClient dicDataFeignClient;
|
||||||
|
private final ROperatingMonitorService rOperatingMonitorService;
|
||||||
|
private final IRStatLimitRateDService irStatLimitRateDService;
|
||||||
|
//咨询后直接用Mapper查询,这个算法只用pms补考虑pq,后续不知道要不要改
|
||||||
|
private final PmsMonitorMapper pmsMonitorMapper;
|
||||||
@Override
|
@Override
|
||||||
public void handleMonth(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) {
|
public void handleMonth(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) {
|
||||||
|
List<RDimObjTargetM> rdiObjTargetMs = new ArrayList<>();
|
||||||
|
|
||||||
|
LocalDate localDate = LocalDateTimeUtil.parseDate(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN);
|
||||||
|
String begin = LocalDateTimeUtil.format(DateUtil.beginOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)).toLocalDateTime(),DatePattern.NORM_DATETIME_PATTERN);
|
||||||
|
String end = LocalDateTimeUtil.format(DateUtil.endOfMonth(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)).toLocalDateTime(),DatePattern.NORM_DATETIME_PATTERN);
|
||||||
|
List<DictData> indicatorTypeDate = dicDataFeignClient.getDicDataByTypeCode(
|
||||||
|
DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
|
||||||
|
//过滤电压总谐波畸变率、2-50次谐波电流、三相不平衡、负序电流、闪变
|
||||||
|
List<DictData> finalIndicatorTypeDate = indicatorTypeDate.stream().filter(temp -> Objects.equals(temp.getCode(), DicDataEnum.VOLTAGE_DEV.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.FLICKER.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.PHASE_VOLTAGE.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.THD_V.getCode())||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.HARMONIC_CURRENT.getCode())).collect(Collectors.toList());
|
||||||
|
|
||||||
|
List<DictData> monitoringLabels = dicDataFeignClient.getDicDataByTypeCode(
|
||||||
|
DicDataTypeEnum.MONITORING_LABELS.getCode()).getData();
|
||||||
|
//过滤监测对象包括牵引站、风电场、光伏电站、重要,敏感用户
|
||||||
|
List<String> monitoringLabelIds = monitoringLabels.stream().filter(temp -> Objects.equals(
|
||||||
|
temp.getCode(), DicDataEnum.POWER_STATION.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.WIND_FARM.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.SENSITIVE_USERS.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.IMPORTANT_USERS.getCode())||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.TRACTION_STATION.getCode())).map(DictData::getId).collect(Collectors.toList());
|
||||||
|
|
||||||
|
for (DeptGetChildrenMoreDTO deptGetChildrenMoreDTO : calculatedParam.getIdList()) {
|
||||||
|
if (!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getLineBaseList())) {
|
||||||
|
List<LineDevGetDTO> lineBaseList = deptGetChildrenMoreDTO.getLineBaseList();
|
||||||
|
if (CollectionUtils.isEmpty(lineBaseList)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
List<String> collect2 = lineBaseList.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
|
||||||
|
List<ROperatingMonitorDPO> list = rOperatingMonitorService.lambdaQuery().
|
||||||
|
in(ROperatingMonitorDPO::getMeasurementPointId, collect2).
|
||||||
|
between(ROperatingMonitorDPO::getDataDate, begin,end).
|
||||||
|
ge(ROperatingMonitorDPO::getDataIntegrityRate, 0.95).
|
||||||
|
eq(ROperatingMonitorDPO::getIsUnusual, 1).list();
|
||||||
|
List<Monitor> monitorList = new ArrayList<>();
|
||||||
|
|
||||||
|
if(CollectionUtils.isEmpty(list)){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
List<String> collect = list.stream().map(ROperatingMonitorDPO::getMeasurementPointId).distinct().collect(Collectors.toList());
|
||||||
|
monitorList = pmsMonitorMapper.queryEffectiveBusbars(collect);
|
||||||
|
monitorList = monitorList.stream().filter(temp -> monitoringLabelIds.contains(temp.getMonitorTag())).collect(Collectors.toList());
|
||||||
|
Map<String, List<Monitor>> collect1 = monitorList.stream().
|
||||||
|
collect(Collectors.groupingBy(Monitor::getMonitorTag));
|
||||||
|
|
||||||
|
List<String> linids = monitorList.stream().map(Monitor::getId).collect(Collectors.toList());
|
||||||
|
List<RStatLimitRateDPO> rStatLimitRateDPOS = irStatLimitRateDService.findList(linids, begin, end);
|
||||||
|
if(CollectionUtils.isEmpty(rStatLimitRateDPOS)){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
collect1.forEach((tag, monitors)->{
|
||||||
|
finalIndicatorTypeDate.stream().forEach(temp->{
|
||||||
|
RDimObjTargetM rDimObjTargetM = new RDimObjTargetM();
|
||||||
|
rDimObjTargetM.setOrgId(deptGetChildrenMoreDTO.getUnitId());
|
||||||
|
rDimObjTargetM.setStatisDate(localDate);
|
||||||
|
rDimObjTargetM.setTargetType(temp.getId());
|
||||||
|
rDimObjTargetM.setObjectType(tag);
|
||||||
|
//有效接入监测点
|
||||||
|
long effectivePoint = monitors.stream().map(Monitor::getId).distinct().count();
|
||||||
|
//对应指标的超表监测点
|
||||||
|
int overLimitsPoint = overLimitsPointCount(temp,rStatLimitRateDPOS);
|
||||||
|
double v = Double.valueOf(overLimitsPoint) / effectivePoint;
|
||||||
|
rDimObjTargetM.setMonitorRate(Math.round(v * 100.0) / 100.0);
|
||||||
|
rDimObjTargetM.setLimitRate(Math.round(v * 100.0) / 100.0);
|
||||||
|
rdiObjTargetMs.add(rDimObjTargetM);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!CollectionUtils.isEmpty(rdiObjTargetMs)) {
|
||||||
|
this.saveOrUpdateBatchByMultiId(rdiObjTargetMs, 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int overLimitsPointCount(DictData temp, List<RStatLimitRateDPO> rStatLimitRateDPOS) {
|
||||||
|
Integer overLimiCount =0;
|
||||||
|
|
||||||
|
if (Objects.equals(temp.getCode(), DicDataEnum.THD_V.getCode())) {
|
||||||
|
overLimiCount = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->po.getUaberranceOvertime()>0).distinct().count()+"");
|
||||||
|
} else if ( Objects.equals(temp.getCode(), DicDataEnum.HARMONIC_CURRENT.getCode())) {
|
||||||
|
overLimiCount = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->
|
||||||
|
po.getIharm2Overtime()>0||
|
||||||
|
po.getIharm3Overtime() >0||
|
||||||
|
po.getIharm4Overtime() >0||
|
||||||
|
po.getIharm5Overtime() >0||
|
||||||
|
po.getIharm6Overtime() >0||
|
||||||
|
po.getIharm7Overtime() >0||
|
||||||
|
po.getIharm8Overtime() >0||
|
||||||
|
po.getIharm9Overtime() >0||
|
||||||
|
po.getIharm10Overtime() >0||
|
||||||
|
po.getIharm11Overtime() >0||
|
||||||
|
po.getIharm12Overtime() >0||
|
||||||
|
po.getIharm13Overtime() >0||
|
||||||
|
po.getIharm14Overtime() >0||
|
||||||
|
po.getIharm15Overtime() >0||
|
||||||
|
po.getIharm16Overtime() >0||
|
||||||
|
po.getIharm17Overtime() >0||
|
||||||
|
po.getIharm18Overtime() >0||
|
||||||
|
po.getIharm19Overtime() >0||
|
||||||
|
po.getIharm20Overtime() >0||
|
||||||
|
po.getIharm21Overtime() >0||
|
||||||
|
po.getIharm22Overtime() >0||
|
||||||
|
po.getIharm23Overtime() >0||
|
||||||
|
po.getIharm24Overtime() >0||
|
||||||
|
po.getIharm25Overtime()>0).distinct().count()+"");
|
||||||
|
|
||||||
|
} else if ( Objects.equals(temp.getCode(), DicDataEnum.PHASE_VOLTAGE.getCode())) {
|
||||||
|
overLimiCount = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->po.getUaberranceOvertime()>0).distinct().count()+"");
|
||||||
|
} else if ( Objects.equals(temp.getCode(), DicDataEnum.FLICKER.getCode())) {
|
||||||
|
overLimiCount = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->po.getFlickerOvertime()>0).distinct().count()+"");
|
||||||
|
} else if (Objects.equals(temp.getCode(), DicDataEnum.NEG_CURRENT.getCode())){
|
||||||
|
overLimiCount = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->po.getINegOvertime()>0).distinct().count()+"");
|
||||||
|
}
|
||||||
|
return overLimiCount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,14 +1,36 @@
|
|||||||
package com.njcn.prepare.harmonic.service.mysql.dim.impl;
|
package com.njcn.prepare.harmonic.service.mysql.dim.impl;
|
||||||
|
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import cn.hutool.core.date.DatePattern;
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
||||||
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
|
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
|
||||||
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
|
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
|
||||||
|
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
|
||||||
|
import com.njcn.device.pms.pojo.po.Monitor;
|
||||||
|
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
|
||||||
import com.njcn.harmonic.pojo.po.dim.RDimObjTargetY;
|
import com.njcn.harmonic.pojo.po.dim.RDimObjTargetY;
|
||||||
import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimObjTargetYMapper;
|
import com.njcn.prepare.harmonic.mapper.mysql.dim.RDimObjTargetYMapper;
|
||||||
|
import com.njcn.prepare.harmonic.mapper.mysql.line.PmsMonitorMapper;
|
||||||
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
|
import com.njcn.prepare.harmonic.pojo.bo.CalculatedParam;
|
||||||
|
import com.njcn.prepare.harmonic.pojo.mysql.ROperatingMonitorDPO;
|
||||||
|
import com.njcn.prepare.harmonic.service.mysql.day.IRStatLimitRateDService;
|
||||||
import com.njcn.prepare.harmonic.service.mysql.dim.IRDimObjTargetYService;
|
import com.njcn.prepare.harmonic.service.mysql.dim.IRDimObjTargetYService;
|
||||||
|
import com.njcn.prepare.harmonic.service.mysql.line.ROperatingMonitorService;
|
||||||
|
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 org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -19,10 +41,132 @@ import org.springframework.stereotype.Service;
|
|||||||
* @since 2023-11-22
|
* @since 2023-11-22
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
public class RDimObjTargetYServiceImpl extends MppServiceImpl<RDimObjTargetYMapper, RDimObjTargetY> implements IRDimObjTargetYService {
|
public class RDimObjTargetYServiceImpl extends MppServiceImpl<RDimObjTargetYMapper, RDimObjTargetY> implements IRDimObjTargetYService {
|
||||||
|
private final DicDataFeignClient dicDataFeignClient;
|
||||||
|
private final ROperatingMonitorService rOperatingMonitorService;
|
||||||
|
private final IRStatLimitRateDService irStatLimitRateDService;
|
||||||
|
//咨询后直接用Mapper查询,这个算法只用pms补考虑pq,后续不知道要不要改
|
||||||
|
private final PmsMonitorMapper pmsMonitorMapper;
|
||||||
@Override
|
@Override
|
||||||
public void handleYear(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) {
|
public void handleYear(CalculatedParam<DeptGetChildrenMoreDTO> calculatedParam) {
|
||||||
|
List<RDimObjTargetY> rdiObjTargetys = new ArrayList<>();
|
||||||
|
|
||||||
|
LocalDate localDate = LocalDateTimeUtil.parseDate(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN);
|
||||||
|
String begin = LocalDateTimeUtil.format(DateUtil.beginOfYear(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)).toLocalDateTime(),DatePattern.NORM_DATETIME_PATTERN);
|
||||||
|
String end = LocalDateTimeUtil.format(DateUtil.endOfYear(DateUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)).toLocalDateTime(),DatePattern.NORM_DATETIME_PATTERN);
|
||||||
|
List<DictData> indicatorTypeDate = dicDataFeignClient.getDicDataByTypeCode(
|
||||||
|
DicDataTypeEnum.STEADY_STATIS.getCode()).getData();
|
||||||
|
//过滤电压总谐波畸变率、2-50次谐波电流、三相不平衡、负序电流、闪变
|
||||||
|
List<DictData> finalIndicatorTypeDate = indicatorTypeDate.stream().filter(temp -> Objects.equals(temp.getCode(), DicDataEnum.VOLTAGE_DEV.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.FLICKER.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.PHASE_VOLTAGE.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.THD_V.getCode())||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.HARMONIC_CURRENT.getCode())).collect(Collectors.toList());
|
||||||
|
|
||||||
|
List<DictData> monitoringLabels = dicDataFeignClient.getDicDataByTypeCode(
|
||||||
|
DicDataTypeEnum.MONITORING_LABELS.getCode()).getData();
|
||||||
|
//过滤监测对象包括牵引站、风电场、光伏电站、重要,敏感用户
|
||||||
|
List<String> monitoringLabelIds = monitoringLabels.stream().filter(temp -> Objects.equals(
|
||||||
|
temp.getCode(), DicDataEnum.POWER_STATION.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.WIND_FARM.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.SENSITIVE_USERS.getCode()) ||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.IMPORTANT_USERS.getCode())||
|
||||||
|
Objects.equals(temp.getCode(), DicDataEnum.TRACTION_STATION.getCode())).map(DictData::getId).collect(Collectors.toList());
|
||||||
|
|
||||||
|
for (DeptGetChildrenMoreDTO deptGetChildrenMoreDTO : calculatedParam.getIdList()) {
|
||||||
|
if (!CollectionUtils.isEmpty(deptGetChildrenMoreDTO.getLineBaseList())) {
|
||||||
|
List<LineDevGetDTO> lineBaseList = deptGetChildrenMoreDTO.getLineBaseList();
|
||||||
|
if (CollectionUtils.isEmpty(lineBaseList)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
List<String> collect2 = lineBaseList.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
|
||||||
|
List<ROperatingMonitorDPO> list = rOperatingMonitorService.lambdaQuery().
|
||||||
|
in(ROperatingMonitorDPO::getMeasurementPointId, collect2).
|
||||||
|
between(ROperatingMonitorDPO::getDataDate, begin,end).
|
||||||
|
ge(ROperatingMonitorDPO::getDataIntegrityRate, 0.95).
|
||||||
|
eq(ROperatingMonitorDPO::getIsUnusual, 1).list();
|
||||||
|
List<Monitor> monitorList = new ArrayList<>();
|
||||||
|
|
||||||
|
if(CollectionUtils.isEmpty(list)){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
List<String> collect = list.stream().map(ROperatingMonitorDPO::getMeasurementPointId).distinct().collect(Collectors.toList());
|
||||||
|
monitorList = pmsMonitorMapper.queryEffectiveBusbars(collect);
|
||||||
|
monitorList = monitorList.stream().filter(temp -> monitoringLabelIds.contains(temp.getMonitorTag())).collect(Collectors.toList());
|
||||||
|
Map<String, List<Monitor>> collect1 = monitorList.stream().
|
||||||
|
collect(Collectors.groupingBy(Monitor::getMonitorTag));
|
||||||
|
|
||||||
|
List<String> linids = monitorList.stream().map(Monitor::getId).collect(Collectors.toList());
|
||||||
|
List<RStatLimitRateDPO> rStatLimitRateDPOS = irStatLimitRateDService.findList(linids, begin, end);
|
||||||
|
if(CollectionUtils.isEmpty(rStatLimitRateDPOS)){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
collect1.forEach((tag, monitors)->{
|
||||||
|
finalIndicatorTypeDate.stream().forEach(temp->{
|
||||||
|
RDimObjTargetY rDimObjTargetY = new RDimObjTargetY();
|
||||||
|
rDimObjTargetY.setOrgId(deptGetChildrenMoreDTO.getUnitId());
|
||||||
|
rDimObjTargetY.setStatisDate(localDate);
|
||||||
|
rDimObjTargetY.setTargetType(temp.getId());
|
||||||
|
rDimObjTargetY.setObjectType(tag);
|
||||||
|
//有效接入监测点
|
||||||
|
long effectivePoint = monitors.stream().map(Monitor::getId).distinct().count();
|
||||||
|
//对应指标的超表监测点
|
||||||
|
int overLimitsPoint = overLimitsPointCount(temp,rStatLimitRateDPOS);
|
||||||
|
double v = Double.valueOf(overLimitsPoint) / effectivePoint;
|
||||||
|
rDimObjTargetY.setMonitorRate(Math.round(v * 100.0) / 100.0);
|
||||||
|
rDimObjTargetY.setLimitRate(Math.round(v * 100.0) / 100.0);
|
||||||
|
rdiObjTargetys.add(rDimObjTargetY);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!CollectionUtils.isEmpty(rdiObjTargetys)) {
|
||||||
|
this.saveOrUpdateBatchByMultiId(rdiObjTargetys, 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int overLimitsPointCount(DictData temp, List<RStatLimitRateDPO> rStatLimitRateDPOS) {
|
||||||
|
Integer overLimiCount =0;
|
||||||
|
|
||||||
|
if (Objects.equals(temp.getCode(), DicDataEnum.THD_V.getCode())) {
|
||||||
|
overLimiCount = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->po.getUaberranceOvertime()>0).distinct().count()+"");
|
||||||
|
} else if ( Objects.equals(temp.getCode(), DicDataEnum.HARMONIC_CURRENT.getCode())) {
|
||||||
|
overLimiCount = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->
|
||||||
|
po.getIharm2Overtime()>0||
|
||||||
|
po.getIharm3Overtime() >0||
|
||||||
|
po.getIharm4Overtime() >0||
|
||||||
|
po.getIharm5Overtime() >0||
|
||||||
|
po.getIharm6Overtime() >0||
|
||||||
|
po.getIharm7Overtime() >0||
|
||||||
|
po.getIharm8Overtime() >0||
|
||||||
|
po.getIharm9Overtime() >0||
|
||||||
|
po.getIharm10Overtime() >0||
|
||||||
|
po.getIharm11Overtime() >0||
|
||||||
|
po.getIharm12Overtime() >0||
|
||||||
|
po.getIharm13Overtime() >0||
|
||||||
|
po.getIharm14Overtime() >0||
|
||||||
|
po.getIharm15Overtime() >0||
|
||||||
|
po.getIharm16Overtime() >0||
|
||||||
|
po.getIharm17Overtime() >0||
|
||||||
|
po.getIharm18Overtime() >0||
|
||||||
|
po.getIharm19Overtime() >0||
|
||||||
|
po.getIharm20Overtime() >0||
|
||||||
|
po.getIharm21Overtime() >0||
|
||||||
|
po.getIharm22Overtime() >0||
|
||||||
|
po.getIharm23Overtime() >0||
|
||||||
|
po.getIharm24Overtime() >0||
|
||||||
|
po.getIharm25Overtime() >0).distinct().count()+"");
|
||||||
|
|
||||||
|
} else if ( Objects.equals(temp.getCode(), DicDataEnum.PHASE_VOLTAGE.getCode())) {
|
||||||
|
overLimiCount = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->po.getUaberranceOvertime()>0).distinct().count()+"");
|
||||||
|
} else if ( Objects.equals(temp.getCode(), DicDataEnum.FLICKER.getCode())) {
|
||||||
|
overLimiCount = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->po.getFlickerOvertime()>0).distinct().count()+"");
|
||||||
|
} else if (Objects.equals(temp.getCode(), DicDataEnum.NEG_CURRENT.getCode())){
|
||||||
|
overLimiCount = Integer.valueOf(rStatLimitRateDPOS.stream().filter(po->po.getINegOvertime()>0).distinct().count()+"");
|
||||||
|
}
|
||||||
|
return overLimiCount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ import lombok.RequiredArgsConstructor;
|
|||||||
import org.springframework.scheduling.annotation.Async;
|
import org.springframework.scheduling.annotation.Async;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
Reference in New Issue
Block a user