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

This commit is contained in:
zhangbaojian
2023-06-16 16:14:44 +08:00
parent 4af8ba5f42
commit 3622696d04
11 changed files with 365 additions and 11 deletions

View File

@@ -18,9 +18,7 @@ import java.time.LocalDate;
*/ */
@Data @Data
@TableName("r_stat_event_org_q") @TableName("r_stat_event_org_q")
public class RStatEventOrgQPO implements Serializable { public class RStatEventOrgQPO {
private static final long serialVersionUID = 1L;
@MppMultiId(value = "org_no") @MppMultiId(value = "org_no")
private String orgNo; private String orgNo;

View File

@@ -0,0 +1,54 @@
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_y")
public class RStatEventOrgYPO {
@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

@@ -4,6 +4,9 @@ import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.prepare.harmonic.pojo.po.RStatOrgQPO; import com.njcn.prepare.harmonic.pojo.po.RStatOrgQPO;
import com.njcn.prepare.harmonic.pojo.po.RStatOrgYPO; import com.njcn.prepare.harmonic.pojo.po.RStatOrgYPO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.Map;
/** /**
* *
@@ -16,4 +19,10 @@ import org.apache.ibatis.annotations.Mapper;
*/ */
@Mapper @Mapper
public interface RStatOrgYMapper extends MppBaseMapper<RStatOrgYPO> { public interface RStatOrgYMapper extends MppBaseMapper<RStatOrgYPO> {
Map<String, Object> selectYlist(@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.RStatOrgYMapper">
<select id="selectYlist" resultType="java.util.Map">
SELECT sum(effective_measurement_accrued) "efSum"
FROM r_stat_org_y
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

@@ -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.RStatEventOrgYPO;
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 RStatEventOrgYPOMapper extends MppBaseMapper<RStatEventOrgYPO> {
}

View File

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

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.RStatEventYPOMapper">
<select id="selectYlist" resultType="java.util.Map">
SELECT event_type "eventType",
sum(event_measurement_accrued) "emaSum"
FROM r_stat_event_y
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.RStatEventOrgYPO;
/**
* @author zbj
* @since 2023-06-16
*/
public interface RStatEventOrgYPOService extends IMppService<RStatEventOrgYPO> {
}

View File

@@ -16,7 +16,7 @@ import org.springframework.stereotype.Service;
* </p> * </p>
* *
* @author zbj * @author zbj
* @since 2023-06-14 * @since 2023-06-16
*/ */
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor

View File

@@ -57,6 +57,8 @@ public class RStatEventOrgServiceImpl implements RStatEventOrgService {
private final RStatOrgQMapper rStatOrgQMapper; private final RStatOrgQMapper rStatOrgQMapper;
private final RStatOrgYMapper rStatOrgYMapper;
private final RStatEventOrgDPOMapper rStatEventOrgDPOMapper; private final RStatEventOrgDPOMapper rStatEventOrgDPOMapper;
private final RStatEventOrgMPOMapper rStatEventOrgMPOMapper; private final RStatEventOrgMPOMapper rStatEventOrgMPOMapper;
@@ -65,18 +67,22 @@ public class RStatEventOrgServiceImpl implements RStatEventOrgService {
private final RStatEventQPOMapper rStatEventQPOMapper; private final RStatEventQPOMapper rStatEventQPOMapper;
private final RStatEventYPOMapper rStatEventYPOMapper;
private final RStatEventOrgDPOService rStatEventOrgDPOService; private final RStatEventOrgDPOService rStatEventOrgDPOService;
private final RStatEventOrgMPOService rStatEventOrgMPOService; private final RStatEventOrgMPOService rStatEventOrgMPOService;
private final RStatEventOrgQPOService rStatEventOrgQPOService; private final RStatEventOrgQPOService rStatEventOrgQPOService;
private final RStatEventOrgYPOService rStatEventOrgYPOService;
@Override @Override
public void handler(List<DeptGetChildrenMoreDTO> data, String dataDate, Integer type) { public void handler(List<DeptGetChildrenMoreDTO> data, String dataDate, Integer type) {
switch (type) { switch (type) {
/* case 1: case 1:
this.rStartEventYHandler (data, dataDate, type); this.rStartEventOrgYHandler(data, dataDate, type);
break;*/ break;
case 2: case 2:
this.rStartEventOrgQHandler(data, dataDate, type); this.rStartEventOrgQHandler(data, dataDate, type);
break; break;
@@ -358,7 +364,7 @@ public class RStatEventOrgServiceImpl implements RStatEventOrgService {
//配网月表 //配网月表
List<RStatEventOrgDVO> pwMList = rStatEventOrgMPOMapper.selectQlist(startTime, endTime, List<RStatEventOrgDVO> pwMList = rStatEventOrgMPOMapper.selectQlist(startTime, endTime,
deptGetChildrenMoreDTO.getUnitId(), dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId()); deptGetChildrenMoreDTO.getUnitId(), dataTypeMap.get(DicDataEnum.DISTRIBUTION_POINT.getCode()).getId());
//主网天表 //主网天表
List<RStatEventOrgDVO> zwDList = rStatEventOrgDPOMapper.selectQlist(startTime, endTime, List<RStatEventOrgDVO> zwDList = rStatEventOrgDPOMapper.selectQlist(startTime, endTime,
@@ -384,7 +390,6 @@ public class RStatEventOrgServiceImpl implements RStatEventOrgService {
Map<String, Object> pwEfSum = rStatOrgQMapper.selectQlist(startTime, endTime, Map<String, Object> pwEfSum = rStatOrgQMapper.selectQlist(startTime, endTime,
deptGetChildrenMoreDTO.getUnitId(), dataTypeMap.get(DicDataEnum.DISTRIBUTION_POINT.getCode()).getId()); deptGetChildrenMoreDTO.getUnitId(), dataTypeMap.get(DicDataEnum.DISTRIBUTION_POINT.getCode()).getId());
//主网 //主网
if (!CollectionUtils.isEmpty(zwMList) && !CollectionUtils.isEmpty(zwDList)) { if (!CollectionUtils.isEmpty(zwMList) && !CollectionUtils.isEmpty(zwDList)) {
@@ -511,4 +516,198 @@ public class RStatEventOrgServiceImpl implements RStatEventOrgService {
} }
} }
//年表
public void rStartEventOrgYHandler(List<DeptGetChildrenMoreDTO> data, String dataDate, Integer type) {
List<RStatEventOrgYPO> rStatEventOrgYPOS = new ArrayList<>();
DecimalFormat df = new DecimalFormat("0.00");
Date date = DateUtil.parse(dataDate);
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
//计算年度的开始日期和结束日期
Calendar calendar = Calendar.getInstance(); // 获取Calendar实例
calendar.setTime(date); // 设置Calendar对象的时间为传入的时间
int year = calendar.get(Calendar.YEAR); // 获取本年度年份
// 获取本年度的第一天
Calendar firstDayOfYear = Calendar.getInstance();
firstDayOfYear.set(Calendar.YEAR, year);
firstDayOfYear.set(Calendar.MONTH, Calendar.JANUARY);
firstDayOfYear.set(Calendar.DAY_OF_MONTH, 1);
// 获取本年度的最后一天
Calendar lastDayOfYear = Calendar.getInstance();
lastDayOfYear.set(Calendar.YEAR, year);
lastDayOfYear.set(Calendar.MONTH, Calendar.DECEMBER);
lastDayOfYear.set(Calendar.DAY_OF_MONTH, 31);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String startTime = formatter.format(firstDayOfYear.getTime());
String endTime = formatter.format(lastDayOfYear.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.DISTRIBUTION_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_y
List<Map<String, Object>> zwEmaSum = rStatEventYPOMapper.selectYlist(startTime, endTime,
deptGetChildrenMoreDTO.getUnitId(), dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId());
//配网r_stat_event_y
List<Map<String, Object>> pwEmaSum = rStatEventYPOMapper.selectYlist(startTime, endTime,
deptGetChildrenMoreDTO.getUnitId(), dataTypeMap.get(DicDataEnum.DISTRIBUTION_POINT.getCode()).getId());
//主网r_stat_org_y
Map<String, Object> zwEfSum = rStatOrgYMapper.selectYlist(startTime, endTime,
deptGetChildrenMoreDTO.getUnitId(), dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId());
//配网r_stat_org_y
Map<String, Object> pwEfSum = rStatOrgYMapper.selectYlist(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 -> {
RStatEventOrgYPO rStatEventOrgYPO = new RStatEventOrgYPO();
rStatEventOrgYPO.setOrgNo(obj.getOrgNo());
rStatEventOrgYPO.setDataDate(localDate);
rStatEventOrgYPO.setEventType(obj.getEventType());
rStatEventOrgYPO.setEventMeasurementAverage(obj.getEmrAvg());
rStatEventOrgYPO.setEventCount(obj.getEcMSum());
rStatEventOrgYPO.setEventMeasurementRatioAverage(obj.getEmrAvg());
rStatEventOrgYPO.setDataType(dataTypeMap.get(DicDataEnum.MAINNET_POINT.getCode()).getId());
if (emaMap.get(obj.getEventType()) == 0) {
rStatEventOrgYPO.setEventMeasurementAccrued(0);
} else {
rStatEventOrgYPO.setEventMeasurementAccrued(emaMap.get(obj.getEventType()));
}
if (obj.getEmSum() == 0) {
rStatEventOrgYPO.setEventFreq(0.00f);
} else {
String value = df.format(obj.getEcSum().floatValue() / obj.getEmSum());
rStatEventOrgYPO.setEventFreq(Float.parseFloat(value));
}
if (!CollectionUtils.isEmpty(zwEfSum)) {
if (Integer.parseInt(zwEfSum.get("efSum").toString()) == 0) {
rStatEventOrgYPO.setEventMeasurementRatioAccrued(0.00f);
} else {
String value = df.format(rStatEventOrgYPO.getEventMeasurementAccrued() / Float.parseFloat(zwEfSum.get("efSum").toString()));
rStatEventOrgYPO.setEventMeasurementRatioAccrued(Float.parseFloat(value));
}
} else {
rStatEventOrgYPO.setEventMeasurementRatioAccrued(0.00f);
}
rStatEventOrgYPOS.add(rStatEventOrgYPO);
});
}
//配网
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 -> {
RStatEventOrgYPO rStatEventOrgYPO = new RStatEventOrgYPO();
rStatEventOrgYPO.setOrgNo(obj.getOrgNo());
rStatEventOrgYPO.setDataDate(localDate);
rStatEventOrgYPO.setEventType(obj.getEventType());
rStatEventOrgYPO.setEventMeasurementAverage(obj.getEmrAvg());
rStatEventOrgYPO.setEventCount(obj.getEcMSum());
rStatEventOrgYPO.setEventMeasurementRatioAverage(obj.getEmrAvg());
rStatEventOrgYPO.setDataType(dataTypeMap.get(DicDataEnum.DISTRIBUTION_POINT.getCode()).getId());
if (emaMap.get(obj.getEventType()) == 0) {
rStatEventOrgYPO.setEventMeasurementAccrued(0);
} else {
rStatEventOrgYPO.setEventMeasurementAccrued(emaMap.get(obj.getEventType()));
}
if (obj.getEmSum() == 0) {
rStatEventOrgYPO.setEventFreq(0.00f);
} else {
String value = df.format(obj.getEcSum() / obj.getEmSum().floatValue());
rStatEventOrgYPO.setEventFreq(Float.parseFloat(value));
}
if (!CollectionUtils.isEmpty(pwEfSum)) {
if (Integer.parseInt(pwEfSum.get("efSum").toString()) == 0) {
rStatEventOrgYPO.setEventMeasurementRatioAccrued(0.00f);
} else {
String value = df.format(rStatEventOrgYPO.getEventMeasurementAccrued() / Float.parseFloat(pwEfSum.get("efSum").toString()));
rStatEventOrgYPO.setEventMeasurementRatioAccrued(Float.parseFloat(value));
}
} else {
rStatEventOrgYPO.setEventMeasurementRatioAccrued(0.00f);
}
rStatEventOrgYPOS.add(rStatEventOrgYPO);
});
}
});
if (!CollectionUtils.isEmpty(rStatEventOrgYPOS)) {
rStatEventOrgYPOService.saveOrUpdateBatchByMultiId(rStatEventOrgYPOS, 500);
}
}
} }

View File

@@ -0,0 +1,21 @@
package com.njcn.prepare.harmonic.service.mysql.newalgorithm.impl;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.prepare.harmonic.mapper.mysql.newalgorithm.RStatEventOrgYPOMapper;
import com.njcn.prepare.harmonic.pojo.po.RStatEventOrgYPO;
import com.njcn.prepare.harmonic.service.mysql.newalgorithm.RStatEventOrgYPOService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
/**
* <p>
* 终端检测监督
* </p>
*
* @author zbj
* @since 2023-06-16
*/
@Service
@RequiredArgsConstructor
public class RStatEventOrgYPOServiceImpl extends MppServiceImpl<RStatEventOrgYPOMapper, RStatEventOrgYPO> implements RStatEventOrgYPOService {
}