zbj//1.单位暂态指标数据统计_季统计 算法

This commit is contained in:
zhangbaojian
2023-06-16 11:16:38 +08:00
parent 4e28bb7401
commit 29d09b0bee
14 changed files with 411 additions and 6 deletions

View File

@@ -23,6 +23,8 @@ public class RStatEventOrgDVO {
private Integer ecSum;
private Integer ecMSum;
private Integer emSum;
private Float emrAvg;

View File

@@ -0,0 +1,56 @@
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.io.Serializable;
import java.time.LocalDate;
/**
* <p>
*
* </p>
*
* @author zbj
* @since 2023-06-16
*/
@Data
@TableName("r_stat_event_org_q")
public class RStatEventOrgQPO implements Serializable {
private static final long serialVersionUID = 1L;
@MppMultiId(value = "org_no")
private String orgNo;
@MppMultiId(value = "data_date")
private LocalDate dataDate;
@MppMultiId(value = "event_type")
private String eventType;
@TableField(value = "event_measurement_average")
private Float eventMeasurementAverage;
@TableField(value = "event_measurement_accrued")
private Integer eventMeasurementAccrued;
@TableField(value = "event_freq")
private Float eventFreq;
@TableField(value = "event_count")
private Integer eventCount;
@TableField(value = "event_measurement_ratio_average")
private Float eventMeasurementRatioAverage;
@TableField(value = "event_measurement_ratio_accrued")
private Float eventMeasurementRatioAccrued;
@MppMultiId(value = "data_type")
private String dataType;
}

View File

@@ -3,6 +3,9 @@ package com.njcn.prepare.harmonic.mapper.mysql.area;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.prepare.harmonic.pojo.po.RStatOrgQPO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Map;
/**
*
@@ -15,4 +18,10 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface RStatOrgQMapper extends MppBaseMapper<RStatOrgQPO> {
Map<String, Object> selectQlist(@Param("startTime") String startTime,
@Param("endTime") String endTime,
@Param("orgId") String orgId,
@Param("dataTypeId") String dataTypeId);
}

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njcn.prepare.harmonic.mapper.mysql.area.RStatOrgQMapper">
<select id="selectQlist" resultType="java.util.Map">
SELECT sum(effective_measurement_accrued) "efSum"
FROM r_stat_org_q
WHERE date_format(data_date, '%y%m%d') &gt;= date_format(#{startTime}, '%y%m%d')
AND date_format(data_date, '%y%m%d') &lt;= date_format(#{endTime}, '%y%m%d')
AND org_no = #{orgId}
AND data_type = #{dataTypeId}
GROUP BY org_no
</select>
</mapper>

View File

@@ -25,4 +25,8 @@ public interface RStatEventOrgDPOMapper extends MppBaseMapper<RStatEventOrgDPO>
@Param("orgId") String orgId,
@Param("dataTypeId") String dataTypeId);
List<RStatEventOrgDVO> selectQlist(@Param("startTime") String startTime,
@Param("endTime") String endTime,
@Param("orgId") String orgId,
@Param("dataTypeId") String dataTypeId);
}

View File

@@ -19,4 +19,10 @@ import java.util.List;
*/
@Mapper
public interface RStatEventOrgMPOMapper extends MppBaseMapper<RStatEventOrgMPO> {
List<RStatEventOrgDVO> selectQlist(@Param("startTime") String startTime,
@Param("endTime") String endTime,
@Param("orgId") String orgId,
@Param("dataTypeId") String dataTypeId);
}

View File

@@ -0,0 +1,17 @@
package com.njcn.prepare.harmonic.mapper.mysql.newalgorithm;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.prepare.harmonic.pojo.po.RStatEventOrgQPO;
import org.apache.ibatis.annotations.Mapper;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2022/12/13 15:39【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Mapper
public interface RStatEventOrgQPOMapper extends MppBaseMapper<RStatEventOrgQPO> {
}

View File

@@ -3,6 +3,10 @@ package com.njcn.prepare.harmonic.mapper.mysql.newalgorithm;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.prepare.harmonic.pojo.po.RStatEventQPO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* Description:
@@ -14,4 +18,10 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface RStatEventQPOMapper extends MppBaseMapper<RStatEventQPO> {
List<Map<String, Object>> selectQlist(@Param("startTime") String startTime,
@Param("endTime") String endTime,
@Param("orgId") String orgId,
@Param("dataTypeId") String dataTypeId);
}

View File

@@ -18,4 +18,20 @@
event_type
</select>
<select id="selectQlist" resultType="com.njcn.prepare.harmonic.pojo.po.RStatEventOrgDVO">
SELECT
org_no "orgNo",
event_type "eventType",
sum(event_measurement) "emSum",
sum(event_count) "ecSum"
FROM r_stat_event_org_d
WHERE date_format(data_date, '%y%m%d') &gt;= date_format(#{startTime}, '%y%m%d')
AND date_format(data_date, '%y%m%d') &lt;= date_format(#{endTime}, '%y%m%d')
AND org_no = #{orgId}
AND data_type = #{dataTypeId}
GROUP BY org_no,
event_type
</select>
</mapper>

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RStatEventOrgMPOMapper">
<select id="selectQlist" resultType="com.njcn.prepare.harmonic.pojo.po.RStatEventOrgDVO">
SELECT org_no "orgNo",
event_type "eventType",
round(avg(event_measurement_average), 2) "emAvg",
sum(event_count) "ecMSum",
round(avg(event_measurement_ratio_average), 2) "emrAvg"
FROM r_stat_event_org_m
WHERE date_format(data_date, '%y%m%d') &gt;= date_format(#{startTime}, '%y%m%d')
AND date_format(data_date, '%y%m%d') &lt;= date_format(#{endTime}, '%y%m%d')
AND org_no = #{orgId}
AND data_type = #{dataTypeId}
GROUP BY org_no,
event_type
</select>
</mapper>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RStatEventQPOMapper">
<select id="selectQlist" resultType="java.util.Map">
SELECT event_type "eventType",
sum(event_measurement_accrued) "emaSum"
FROM r_stat_event_q
WHERE date_format(data_date, '%y%m%d') &gt;= date_format(#{startTime}, '%y%m%d')
AND date_format(data_date, '%y%m%d') &lt;= date_format(#{endTime}, '%y%m%d')
AND org_no = #{orgId}
AND data_type = #{dataTypeId}
GROUP BY org_no,
event_type
</select>
</mapper>

View File

@@ -0,0 +1,14 @@
package com.njcn.prepare.harmonic.service.mysql.newalgorithm;
import com.github.jeffreyning.mybatisplus.service.IMppService;
import com.njcn.prepare.harmonic.pojo.po.RStatEventOrgQPO;
/**
* @author zbj
* @since 2023-06-16
*/
public interface RStatEventOrgQPOService extends IMppService<RStatEventOrgQPO> {
}

View File

@@ -0,0 +1,24 @@
package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RStatEventOrgMPOMapper;
import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RStatEventOrgQPOMapper;
import com.njcn.prepare.harmonic.pojo.po.RStatEventOrgMPO;
import com.njcn.prepare.harmonic.pojo.po.RStatEventOrgQPO;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatEventOrgMPOService;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatEventOrgQPOService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
/**
* <p>
* 终端检测监督
* </p>
*
* @author zbj
* @since 2023-06-14
*/
@Service
@RequiredArgsConstructor
public class RStatEventOrgQPOServiceImpl extends MppServiceImpl<RStatEventOrgQPOMapper, RStatEventOrgQPO> implements RStatEventOrgQPOService {
}

View File

@@ -14,9 +14,7 @@ import com.njcn.prepare.harmonic.mapper.mysql.area.RStatOrgQMapper;
import com.njcn.prepare.harmonic.mapper.mysql.area.RStatOrgYMapper;
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.mapper.mysql.newalgorithm.RStatEventOrgDPOMapper;
import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.*;
import com.njcn.prepare.harmonic.pojo.po.*;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.*;
import com.njcn.system.api.DicDataFeignClient;
@@ -24,6 +22,7 @@ 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.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@@ -56,23 +55,31 @@ public class RStatEventOrgServiceImpl implements RStatEventOrgService {
private final RStatOrgMMapper rStatOrgMMapper;
private final RStatOrgQMapper rStatOrgQMapper;
private final RStatEventOrgDPOMapper rStatEventOrgDPOMapper;
private final RStatEventOrgMPOMapper rStatEventOrgMPOMapper;
private final RStatEventMPOMapper rStatEventMPOMapper;
private final RStatEventQPOMapper rStatEventQPOMapper;
private final RStatEventOrgDPOService rStatEventOrgDPOService;
private final RStatEventOrgMPOService rStatEventOrgMPOService;
private final RStatEventOrgQPOService rStatEventOrgQPOService;
@Override
public void handler(List<DeptGetChildrenMoreDTO> data, String dataDate, Integer type) {
switch (type) {
/* case 1:
this.rStartEventYHandler (data, dataDate, type);
break;
case 2:
this.rStartEventQHandler(data, dataDate, type);
break;*/
case 2:
this.rStartEventOrgQHandler(data, dataDate, type);
break;
case 3:
this.rStartEventOrgMHandler(data, dataDate, type);
break;
@@ -316,4 +323,192 @@ public class RStatEventOrgServiceImpl implements RStatEventOrgService {
}
}
//季表
public void rStartEventOrgQHandler(List<DeptGetChildrenMoreDTO> data, String dataDate, Integer type) {
List<RStatEventOrgQPO> rStatEventOrgQPOS = new ArrayList<>();
DecimalFormat df = new DecimalFormat("0.00");
Date date = DateUtil.parse(dataDate);
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
//计算季度的开始日期和结束日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int quarter = (calendar.get(Calendar.MONTH) / 3) + 1; // 计算日期所在的季度
calendar.set(Calendar.MONTH, (quarter - 1) * 3); // 设置季度开始的月份
calendar.set(Calendar.DAY_OF_MONTH, 1); // 设置季度开始的日期
String startTime = sdf.format(calendar.getTime()); // 季度开始日期
calendar.add(Calendar.MONTH, 2); // 添加两个月,使其到季度结束的月份
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); // 设置季度结束的日期 - 月份最后一天
String endTime = sdf.format(calendar.getTime()); // 季度结束日期
/*获取暂态统计指标*/
List<DictData> eventStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.EVENT_STATIS.getCode()).getData();
Map<String, DictData> eventStatisMap = eventStatis.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
/*获取数据类型*/
List<DictData> dataTypeList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DATA_TYPE.getCode()).getData();
Map<String, DictData> dataTypeMap = dataTypeList.stream().collect(Collectors.toMap(DictData::getCode, dictData -> dictData));
data.forEach(deptGetChildrenMoreDTO -> {
//主网月表
List<RStatEventOrgDVO> zwMList = rStatEventOrgMPOMapper.selectQlist(startTime, endTime,
deptGetChildrenMoreDTO.getUnitId(), dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId());
//配网月表
List<RStatEventOrgDVO> pwMList = rStatEventOrgMPOMapper.selectQlist(startTime, endTime,
deptGetChildrenMoreDTO.getUnitId(), dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId());
//主网天表
List<RStatEventOrgDVO> zwDList = rStatEventOrgDPOMapper.selectQlist(startTime, endTime,
deptGetChildrenMoreDTO.getUnitId(), dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId());
//配网天表
List<RStatEventOrgDVO> pwDList = rStatEventOrgDPOMapper.selectQlist(startTime, endTime,
deptGetChildrenMoreDTO.getUnitId(), dataTypeMap.get(DicDataEnum.DISTRIBUTION_POINT.getCode()).getId());
//主网r_stat_event_q
List<Map<String, Object>> zwEmaSum = rStatEventQPOMapper.selectQlist(startTime, endTime,
deptGetChildrenMoreDTO.getUnitId(), dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId());
//配网r_stat_event_q
List<Map<String, Object>> pwEmaSum = rStatEventQPOMapper.selectQlist(startTime, endTime,
deptGetChildrenMoreDTO.getUnitId(), dataTypeMap.get(DicDataEnum.DISTRIBUTION_POINT.getCode()).getId());
//主网r_stat_org_q
Map<String, Object> zwEfSum = rStatOrgQMapper.selectQlist(startTime, endTime,
deptGetChildrenMoreDTO.getUnitId(), dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId());
//配网r_stat_org_q
Map<String, Object> pwEfSum = rStatOrgQMapper.selectQlist(startTime, endTime,
deptGetChildrenMoreDTO.getUnitId(), dataTypeMap.get(DicDataEnum.DISTRIBUTION_POINT.getCode()).getId());
//主网
if (!CollectionUtils.isEmpty(zwMList) && !CollectionUtils.isEmpty(zwDList)) {
for (RStatEventOrgDVO rStatEventOrgDVO : zwMList) {
for (RStatEventOrgDVO statEventOrgDVO : zwDList) {
if (Objects.equals(rStatEventOrgDVO.getEventType(),statEventOrgDVO.getEventType())){
rStatEventOrgDVO.setEcSum(statEventOrgDVO.getEcSum());
rStatEventOrgDVO.setEmSum(statEventOrgDVO.getEmSum());
}
}
}
//转map
Map<String, Integer> emaMap = new HashMap<>();
if (!CollectionUtils.isEmpty(zwEmaSum)) {
for (Map<String, Object> map : zwEmaSum) {
emaMap.put(map.get("eventType").toString(), Integer.valueOf(map.get("emaSum").toString()));
}
} else {
emaMap.put(eventStatisMap.get(DicDataEnum.VOLTAGE_DIP.getCode()).getId(), 0);
emaMap.put(eventStatisMap.get(DicDataEnum.VOLTAGE_RISE.getCode()).getId(), 0);
emaMap.put(eventStatisMap.get(DicDataEnum.SHORT_INTERRUPTIONS.getCode()).getId(), 0);
}
//循环
zwMList.forEach(obj -> {
RStatEventOrgQPO rStatEventOrgQPO = new RStatEventOrgQPO();
rStatEventOrgQPO.setOrgNo(obj.getOrgNo());
rStatEventOrgQPO.setDataDate(localDate);
rStatEventOrgQPO.setEventType(obj.getEventType());
rStatEventOrgQPO.setEventMeasurementAverage(obj.getEmrAvg());
rStatEventOrgQPO.setEventCount(obj.getEcMSum());
rStatEventOrgQPO.setEventMeasurementRatioAverage(obj.getEmrAvg());
rStatEventOrgQPO.setDataType(dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId());
if (emaMap.get(obj.getEventType()) == 0) {
rStatEventOrgQPO.setEventMeasurementAccrued(0);
} else {
rStatEventOrgQPO.setEventMeasurementAccrued(emaMap.get(obj.getEventType()));
}
if (obj.getEmSum() == 0) {
rStatEventOrgQPO.setEventFreq(0.00f);
} else {
String value = df.format(obj.getEcSum().floatValue() / obj.getEmSum());
rStatEventOrgQPO.setEventFreq(Float.parseFloat(value));
}
if (!CollectionUtils.isEmpty(zwEfSum)) {
if (Integer.parseInt(zwEfSum.get("efSum").toString()) == 0) {
rStatEventOrgQPO.setEventMeasurementRatioAccrued(0.00f);
} else {
String value = df.format(rStatEventOrgQPO.getEventMeasurementAccrued() / Float.parseFloat(zwEfSum.get("efSum").toString()));
rStatEventOrgQPO.setEventMeasurementRatioAccrued(Float.parseFloat(value));
}
} else {
rStatEventOrgQPO.setEventMeasurementRatioAccrued(0.00f);
}
rStatEventOrgQPOS.add(rStatEventOrgQPO);
});
}
//配网
if (!CollectionUtils.isEmpty(pwMList) && !CollectionUtils.isEmpty(pwDList)) {
for (RStatEventOrgDVO rStatEventOrgDVO : pwMList) {
for (RStatEventOrgDVO statEventOrgDVO : pwDList) {
if (Objects.equals(rStatEventOrgDVO.getEventType(),statEventOrgDVO.getEventType())){
rStatEventOrgDVO.setEcSum(statEventOrgDVO.getEcSum());
rStatEventOrgDVO.setEmSum(statEventOrgDVO.getEmSum());
}
}
}
//转map
Map<String, Integer> emaMap = new HashMap<>();
if (!CollectionUtils.isEmpty(pwEmaSum)) {
for (Map<String, Object> map : pwEmaSum) {
emaMap.put(map.get("eventType").toString(), Integer.valueOf(map.get("emaSum").toString()));
}
} else {
emaMap.put(eventStatisMap.get(DicDataEnum.VOLTAGE_DIP.getCode()).getId(), 0);
emaMap.put(eventStatisMap.get(DicDataEnum.VOLTAGE_RISE.getCode()).getId(), 0);
emaMap.put(eventStatisMap.get(DicDataEnum.SHORT_INTERRUPTIONS.getCode()).getId(), 0);
}
//循环
pwMList.forEach(obj -> {
RStatEventOrgQPO rStatEventOrgQPO = new RStatEventOrgQPO();
rStatEventOrgQPO.setOrgNo(obj.getOrgNo());
rStatEventOrgQPO.setDataDate(localDate);
rStatEventOrgQPO.setEventType(obj.getEventType());
rStatEventOrgQPO.setEventMeasurementAverage(obj.getEmrAvg());
rStatEventOrgQPO.setEventCount(obj.getEcMSum());
rStatEventOrgQPO.setEventMeasurementRatioAverage(obj.getEmrAvg());
rStatEventOrgQPO.setDataType(dataTypeMap.get(DicDataEnum.DISTRIBUTION_POINT.getCode()).getId());
if (emaMap.get(obj.getEventType()) == 0) {
rStatEventOrgQPO.setEventMeasurementAccrued(0);
} else {
rStatEventOrgQPO.setEventMeasurementAccrued(emaMap.get(obj.getEventType()));
}
if (obj.getEmSum() == 0) {
rStatEventOrgQPO.setEventFreq(0.00f);
} else {
String value = df.format(obj.getEcSum() / obj.getEmSum().floatValue());
rStatEventOrgQPO.setEventFreq(Float.parseFloat(value));
}
if (!CollectionUtils.isEmpty(pwEfSum)) {
if (Integer.parseInt(pwEfSum.get("efSum").toString()) == 0) {
rStatEventOrgQPO.setEventMeasurementRatioAccrued(0.00f);
} else {
String value = df.format(rStatEventOrgQPO.getEventMeasurementAccrued() / Float.parseFloat(pwEfSum.get("efSum").toString()));
rStatEventOrgQPO.setEventMeasurementRatioAccrued(Float.parseFloat(value));
}
} else {
rStatEventOrgQPO.setEventMeasurementRatioAccrued(0.00f);
}
rStatEventOrgQPOS.add(rStatEventOrgQPO);
});
}
});
if (!CollectionUtils.isEmpty(rStatEventOrgQPOS)) {
rStatEventOrgQPOService.saveOrUpdateBatchByMultiId(rStatEventOrgQPOS, 500);
}
}
}