预处理模块:工单问题生成,主网有效监测时长计算,

过程监督模块:工单模块功能,其他模块的审核
This commit is contained in:
huangzj
2023-02-27 11:24:58 +08:00
parent 5915ed87ac
commit 338b659d94
58 changed files with 2932 additions and 57 deletions

View File

@@ -35,6 +35,12 @@
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.njcn</groupId>
<artifactId>process-api</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.njcn</groupId>
<artifactId>common-influxDB</artifactId>

View File

@@ -58,7 +58,6 @@ public class AreaCountController extends BaseController {
Boolean result = true;
List<String> orgIdList = new ArrayList<> ();
if(CollectionUtils.isEmpty (primaryGridParam.getOrgIdList ())){
/*todo 不知道是否需要补招*/
List<PvTerminalTreeVO> dept = deptFeignClient.allDeptList().getData();
orgIdList = dept.stream ( ).map (PvTerminalTreeVO::getId).collect (Collectors.toList ( ));
}else{

View File

@@ -0,0 +1,75 @@
package com.njcn.prepare.harmonic.controller.area;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.prepare.harmonic.pojo.param.PrimaryGridParam;
import com.njcn.prepare.harmonic.service.mysql.area.EffectiveMinuteCountService;
import com.njcn.user.api.DeptFeignClient;
import com.njcn.user.pojo.vo.PvTerminalTreeVO;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2023/2/23 14:18【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Slf4j
@Api(tags = "主网有效监测时长)")
@RestController
@RequestMapping("EffectiveCount")
@RequiredArgsConstructor
public class EffectiveMinuteCountController extends BaseController {
private final
DeptFeignClient deptFeignClient;
private final
EffectiveMinuteCountService effectiveMinuteCount;
@ApiOperation("主网有效监测时长")
@ApiImplicitParam(value = "primaryGridParam",name = "primaryGridParam",required = true)
@PostMapping("effectiveMinuteCount")
@OperateInfo(info = LogEnum.BUSINESS_MEDIUM)
public HttpResult<Boolean> effectiveMinuteCount(@RequestBody PrimaryGridParam primaryGridParam ){
log.info(LocalDateTime.now()+"effectiveMinuteCount开始执行");
String methodDescribe = getMethodDescribe("effectiveMinuteCount");
Boolean result = true;
List<String> orgIdList = new ArrayList<> ();
if(CollectionUtils.isEmpty (primaryGridParam.getOrgIdList ())){
List<PvTerminalTreeVO> dept = deptFeignClient.allDeptList().getData();
orgIdList = dept.stream ( ).map (PvTerminalTreeVO::getId).collect (Collectors.toList ( ));
}else{
orgIdList = primaryGridParam.getOrgIdList ();
}
primaryGridParam.setOrgIdList (orgIdList);
effectiveMinuteCount.effectiveMinuteCount (primaryGridParam);
if (result){
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe);
} else {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe);
}
}
}

View File

@@ -0,0 +1,79 @@
package com.njcn.prepare.harmonic.controller.area;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil;
import com.njcn.device.pms.api.PmsPowerDistributionareaClient;
import com.njcn.device.pms.pojo.param.PowerDistributionareaParam;
import com.njcn.device.pms.pojo.po.PowerDistributionarea;
import com.njcn.prepare.harmonic.pojo.param.LineParam;
import com.njcn.prepare.harmonic.service.influxdb.RStatWorkOrderCreateService;
import com.njcn.redis.utils.RedisUtil;
import com.njcn.user.api.DeptFeignClient;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2023/2/9 9:16【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Slf4j
@Api(tags = "工单生成批处理逻辑")
@RestController
@RequestMapping("RStatWorkOrderCreate")
@RequiredArgsConstructor
public class RStatWorkOrderCreateController extends BaseController {
private final PmsPowerDistributionareaClient pmsPowerDistributionareaClient;
private final RStatWorkOrderCreateService rStatWorkOrderCreateService;
private final DeptFeignClient deptFeignClient;
private final RedisUtil redisUtil;
@ApiOperation("工单生成批处理逻辑(台区测点)")
@ApiImplicitParam(value = "lineParam",name = "lineParam",required = true)
@PostMapping("workOrderCreate")
@OperateInfo(info = LogEnum.BUSINESS_MEDIUM)
public HttpResult<Boolean> workOrderCreate(@RequestBody LineParam lineParam ){
log.info(LocalDateTime.now()+"workOrderCreate开始执行");
String methodDescribe = getMethodDescribe("workOrderCreate");
Boolean result = true;
List<String> lineIds= new ArrayList<> ();
if(CollectionUtils.isEmpty (lineParam.getLineIds ())){
PowerDistributionareaParam powerDistributionareaParam = new PowerDistributionareaParam();
List<PowerDistributionarea> data = pmsPowerDistributionareaClient.getPowerDistributionList (powerDistributionareaParam).getData ( );
lineIds = data.stream ().map (PowerDistributionarea::getId).collect(Collectors.toList());
}else{
lineIds = lineParam.getLineIds ( );
}
lineParam.setLineIds (lineIds);
rStatWorkOrderCreateService.workOrderCreate(lineParam);
if (result){
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, methodDescribe);
} else {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, false, methodDescribe);
}
}
}

View File

@@ -2,11 +2,14 @@ package com.njcn.prepare.harmonic.mapper.oracle;
import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.prepare.harmonic.pojo.dto.DataVFiveItemDTO;
import com.njcn.prepare.harmonic.pojo.oracle.DataVOraclePO;
import com.njcn.prepare.harmonic.pojo.vo.DataVOracleVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
@@ -21,4 +24,6 @@ public interface DataVOraclePOMapper extends BaseMapper<DataVOraclePO> {
DataVOracleVO getFiveItemsForDataException(@Param("lineId") Integer lineId, @Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime);
DataVOracleVO getFiveCountForDataIntegrityRate(@Param("lineId") Integer lineId, @Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime);
List<DataVFiveItemDTO> getFiveItems(@Param("lineId") Integer lineId, @Param("date") String date);
}

View File

@@ -63,4 +63,33 @@
GROUP BY
LINEID
</select>
<select id="getFiveItems" resultType="com.njcn.prepare.harmonic.pojo.dto.DataVFiveItemDTO">
select a.lineid,a.timeid,a.rmsMax,a.rmsMin,a.vThdMax,a.vThdMin,
b.freqMax,b.freqMin,b.rmsLvrMax,b.rmsLvrMin,b.vUnbalanceMax,b.vUnbalanceMin from
(SELECT lineid,
timeid,
Max(RMS_MAX) AS rmsMax,
Min(RMS_MIN) AS rmsMin,
Max(V_THD_MAX) AS vThdMax,
Min(V_THD_MIN) AS vThdMin
FROM DATA_V
WHERE lineid = #{lineId}
and TO_CHAR(TIMEID, 'yyyy-mm-dd') = #{date}
AND PHASIC_TYPE IN ('A', 'B', 'C')
group by lineid, TIMEID) a left join
(SELECT lineid,
timeid,
Max(FREQ_MAX) AS freqMax,
Min(FREQ_MIN) AS freqMin,
GREATEST(MaX(RMSAB_MAX), MaX(RMSBC_MAX), MAX(RMSCA_MAX)) AS rmsLvrMax,
least(MIN(RMSAB_MIN), MIN(RMSBC_MIN), MIN(RMSCA_MIN)) AS rmsLvrMin,
Max(V_UNBALANCE_MAX) AS vUnbalanceMax,
Min(V_UNBALANCE_MIN) AS vUnbalanceMin
FROM DATA_V
WHERE lineid = #{lineId}
and TO_CHAR(TIMEID, 'yyyy-mm-dd') = #{date}
AND PHASIC_TYPE = 'T'
group by lineid, TIMEID) b
on a.LINEID = b.LINEID and a.timeid =b.timeid
</select>
</mapper>

View File

@@ -0,0 +1,35 @@
package com.njcn.prepare.harmonic.service.influxdb;
import com.njcn.prepare.harmonic.pojo.dto.DataVFiveItemDTO;
import java.util.List;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2023/2/23 10:31【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface DataVInfluxdbService
{
/**
* @Description: 1.1.1.2.1. 主网单位在线监测点数日统计 :data_v表中查询phasic_type = A当天RMS数据数量数量大于1则该监测点为在线监测点
* @Param:
* @return:
* @Author: clam
* @Date: 2023/2/23
*/
Integer queryTransitMeasurementPoints(List<String> lineIds, String date, String type);
/**
* @Description: 获取监测点当天数据
* @Param: [lineId, date]
* @return: java.util.List<com.njcn.prepare.harmonic.pojo.vo.DataVOracleVO>
* @Author: clam
* @Date: 2023/2/23
*/
List<DataVFiveItemDTO> getFiveItems(String lineId, String date, Integer statisticalInterval);
}

View File

@@ -0,0 +1,15 @@
package com.njcn.prepare.harmonic.service.influxdb;
import com.njcn.prepare.harmonic.pojo.param.LineParam;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2023/2/10 15:42【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface RStatWorkOrderCreateService {
void workOrderCreate(LineParam lineParam);
}

View File

@@ -0,0 +1,108 @@
package com.njcn.prepare.harmonic.service.influxdb.impl;
import cn.hutool.core.collection.CollUtil;
import com.google.common.base.Objects;
import com.njcn.device.pq.pojo.po.DataV;
import com.njcn.influxdb.param.InfluxDBPublicParam;
import com.njcn.influxdb.utils.InfluxDbUtils;
import com.njcn.prepare.harmonic.pojo.dto.DataVFiveItemDTO;
import com.njcn.prepare.harmonic.service.influxdb.DataVInfluxdbService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.influxdb.dto.QueryResult;
import org.influxdb.impl.InfluxDBResultMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2023/2/23 10:32【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class DataVInfluxdbServiceImpl implements DataVInfluxdbService {
private final InfluxDbUtils influxDbUtils;
/**
* @param lineIds
* @param date
* @param type
* @Description: 1.1.1.2.1. 主网单位在线监测点数日统计 :data_v表中查询phasic_type = A当天RMS数据数量数量大于1则该监测点为在线监测点
* @Param:
* @return:
* @Author: clam
* @Date: 2023/2/23
*/
@Override
public Integer queryTransitMeasurementPoints(List<String> lineIds, String date, String type) {
String startTime = date+" "+"00:00:00";
String endTime = date+" "+"23:59:59";
Integer i =0;
for (String temp:lineIds){
String Sql = "SELECT count(rms) FROM \"data_v\" where line_id='"+temp+
"'and "+ InfluxDBPublicParam.TIME+">='"+startTime+"'and "+ InfluxDBPublicParam.TIME+"<='"+endTime+"' and phasic_type ='A' and rms>1 "+ InfluxDBPublicParam.TIME_ZONE;
QueryResult sqlResult4 = influxDbUtils.query(Sql);
List<QueryResult.Series> series = sqlResult4.getResults().get(0).getSeries();
Double tem =0.0;
if(CollUtil.isNotEmpty(series)){
tem =(Double)series.get(0).getValues().get(0).get(1);
}
if(tem>0){
i++;
}
}
return i;
}
/**
* @param lineId
* @param date
* @Description: 获取监测点当天数据
* @Param: [lineId, date]
* @return: java.util.List<com.njcn.prepare.harmonic.pojo.vo.DataVOracleVO>
* @Author: clam
* @Date: 2023/2/23
*/
@Override
public List<DataVFiveItemDTO> getFiveItems(String lineId, String date, Integer statisticalInterval) {
/*按时间分组每组16条*/
/*freq,v_thd,v_unbalance 取T项数据*/
String startTime = date+" "+"00:00:00";
String endTime = date+" "+"23:59:59";
String Sql = "SELECT time, MAX(freq) as freq_max,MIN(freq) as freq_min,MAX(v_thd) as v_thd_max,MIN(v_thd) as v_thd_min,MAX(v_unbalance) as v_unbalance_max,MIN(v_unbalance) as v_unbalance_min from data_v where line_id='"+lineId+
"'and "+ InfluxDBPublicParam.TIME+">='"+startTime+"'and "+ InfluxDBPublicParam.TIME+"<='"+endTime+"' and phasic_type ='T' group by time("+statisticalInterval+"m ) fill(none) "+InfluxDBPublicParam.TIME_ZONE;
QueryResult query = influxDbUtils.query(Sql);
InfluxDBResultMapper resultMapper = new InfluxDBResultMapper();
List<DataV> dataVS = resultMapper.toPOJO(query, DataV.class);
/*rms,rms_lvr 取ABC项数据任意一个数据*/
String Sql2 = "SELECT time, MAX(rms) as rms_max,MIN(rms) as rms_min,MAX(rms_lvr) as rms_lvr_max,MIN(rms_lvr) as rms_lvr_min from data_v where line_id='"+lineId+
"'and "+ InfluxDBPublicParam.TIME+">='"+startTime+"'and "+ InfluxDBPublicParam.TIME+"<='"+endTime+"' and phasic_type ='A' group by time("+statisticalInterval+"m ) fill(none) "+InfluxDBPublicParam.TIME_ZONE;
QueryResult query2 = influxDbUtils.query(Sql2);
InfluxDBResultMapper resultMapper2 = new InfluxDBResultMapper();
List<DataV> dataVS2 = resultMapper2.toPOJO(query2, DataV.class);
List<DataVFiveItemDTO> collect = dataVS.stream ( ).map (temp -> {
DataVFiveItemDTO dataVFiveItemDTO = new DataVFiveItemDTO ( );
BeanUtils.copyProperties (temp, dataVFiveItemDTO);
DataV dataV = dataVS2.stream ( ).filter (temp2 -> Objects.equal (temp.getTime ( ), temp2.getTime ( ))).
collect (Collectors.toList ( )).get (0);
dataVFiveItemDTO.setRmsMax (dataV.getRmsMAX ());
dataVFiveItemDTO.setRmsMin (dataV.getRmsMIN ( ));
dataVFiveItemDTO.setRmsLvrMax (dataV.getRmsLvrMAX ());
dataVFiveItemDTO.setRmsLvrMin (dataV.getRmsLvrMIN ());
return dataVFiveItemDTO;
}).collect (Collectors.toList ( ));
return collect;
}
}

View File

@@ -0,0 +1,265 @@
package com.njcn.prepare.harmonic.service.influxdb.impl;
import com.njcn.device.pms.api.MonitorClient;
import com.njcn.device.pq.pojo.po.Overlimit;
import com.njcn.influxdb.param.InfluxDBPublicParam;
import com.njcn.influxdb.utils.InfluxDbUtils;
import com.njcn.prepare.harmonic.pojo.dto.OverLimitFlagDTO;
import com.njcn.prepare.harmonic.pojo.influxdb.po.DataIPO;
import com.njcn.prepare.harmonic.pojo.influxdb.po.DataVPO;
import com.njcn.prepare.harmonic.pojo.param.LineParam;
import com.njcn.prepare.harmonic.service.influxdb.RStatWorkOrderCreateService;
import com.njcn.process.api.RStatWorkOrderFeignClient;
import com.njcn.system.enums.DicDataEnum;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.influxdb.dto.QueryResult;
import org.influxdb.impl.InfluxDBResultMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2023/2/10 15:43【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class RStatWorkOrderCreateServiceImpl implements RStatWorkOrderCreateService {
private final InfluxDbUtils influxDbUtils;
private final MonitorClient monitorClient;
private final RStatWorkOrderFeignClient rStatWorkOrderFeignClient;
@Override
public void workOrderCreate(LineParam lineParam) {
List<String> lineIds = lineParam.getLineIds ( );
List<OverLimitFlagDTO> overLimitFlagDTOList = new ArrayList();
String startTime = lineParam.getDataDate ()+" "+"00:00:00";
String endTime = lineParam.getDataDate ()+" "+"23:59:59";
lineIds.stream ().forEach (lineId->{
Overlimit overlimit = monitorClient.getOverLimitData(lineId).getData ();
List<DataVPO> dataV = getDataV(lineId,startTime,endTime);
List<OverLimitFlagDTO> checkResultV = checkOverLimitV(dataV,overlimit);
/*Datav3分钟一条数据连续4个小时越限说明OverLimitFlagDTO.overLimtFlag要连续80个是1才生成工单*/
List<OverLimitFlagDTO> workOrderV = checkOverLimitFlag (checkResultV);
for (OverLimitFlagDTO overLimitFlagDTO : workOrderV) {
OverLimitFlagDTO result = new OverLimitFlagDTO ();
BeanUtils.copyProperties (overLimitFlagDTO, result);
result.setLineId (lineId);
result.setOverLimtType (DicDataEnum.VOLTAGE_LIMIT.getCode ());
overLimitFlagDTOList.add (result);
}
List<DataIPO> dataI = getDataI(lineId,startTime,endTime);
List<OverLimitFlagDTO> checkResultI = checkOverLimitI(dataI,overlimit);
List<OverLimitFlagDTO> workOrderI= checkOverLimitFlag (checkResultI);
for (OverLimitFlagDTO overLimitFlagDTO : workOrderI) {
OverLimitFlagDTO result = new OverLimitFlagDTO ();
BeanUtils.copyProperties (overLimitFlagDTO, result);
result.setLineId (lineId);
result.setOverLimtType (DicDataEnum.CURRENT_LIMIT.getCode ());
overLimitFlagDTOList.add (result);
}
});
rStatWorkOrderFeignClient.createProblem (overLimitFlagDTOList);
}
/**
* @Description: 对比监测一天的电流是否越限越限返回1未越限返回0
* @Param: [dataI, overlimit]
* @return: java.util.List<com.njcn.prepare.harmonic.pojo.dto.OverLimitFlagDTO>
* @Author: clam
* @Date: 2023/2/13
*/
private List<OverLimitFlagDTO> checkOverLimitI(List<DataIPO> dataI, Overlimit overlimit) {
List<OverLimitFlagDTO> result = new ArrayList<> ();
dataI.stream ().forEach (datai ->{
Integer temp = 0;
for(int i=2 ;i<26;i++){
String vi = getFieldValueByFieldName("v"+i,datai);
String overLimiti= getFieldValueByFieldName("uharm"+i,overlimit);
if(Double.valueOf (vi)>Double.valueOf (overLimiti)){
temp = 1;
break;
}
}
OverLimitFlagDTO overLimitFlagDTO = new OverLimitFlagDTO();
overLimitFlagDTO.setOverLimtFlag (temp);
overLimitFlagDTO.setStartTime (LocalDateTime.ofInstant(datai.getTime (), ZoneId.systemDefault()));
result.add (overLimitFlagDTO);
});
return result;
}
/** Datav3分钟一条数据,每天480条数据连续4个小时越限说明OverLimitFlagDTO.overLimtFlag要连续80个是1才生成工单
* @Description: checkOverLimitFlag
* @Param: [checkResult]
* @return: java.util.List<com.njcn.prepare.harmonic.pojo.dto.OverLimitFlagDTO>
* @Author: clam
* @Date: 2023/2/13
*/
private List<OverLimitFlagDTO> checkOverLimitFlag(List<OverLimitFlagDTO> checkResult) {
List<OverLimitFlagDTO> result = new ArrayList<> ();
int temp = checkResult.size ()-40;
for (int i=0;i<temp;i++){
List<OverLimitFlagDTO> collect = checkResult.stream ( ).skip (i).limit (80).collect (Collectors.toList ( ));
int sum = collect.stream ( ).mapToInt (OverLimitFlagDTO::getOverLimtFlag).sum ( );
if(sum==80){
/*sum==80连续4个小时越限生成工单统计越限时间*/
OverLimitFlagDTO overLimitFlagDTO = new OverLimitFlagDTO();
overLimitFlagDTO.setStartTime (checkResult.get (i).getStartTime ());
Integer temp2 =i+80;
while(checkResult.get (temp2).getOverLimtFlag ()==1){
temp2++ ;
if(temp2==checkResult.size ()-1){
break;
}
}
overLimitFlagDTO.setEndTime (checkResult.get (temp2-1).getStartTime ());
i=temp2;
result.add (overLimitFlagDTO);
}
}
return result;
}
/**
* @Description: 对比监测一天的电压是否越限越限返回1未越限返回0
* @Param: [dataV, overlimit]
* @return: java.lang.String[]
* @Author: clam
* @Date: 2023/2/13
*/
private List<OverLimitFlagDTO> checkOverLimitV(List<DataVPO> dataV, Overlimit overlimit) {
List<OverLimitFlagDTO> result = new ArrayList<> ();
dataV.stream ().forEach (datav ->{
Integer temp = 0;
for(int i=1 ;i<26;i++){
if(i==1){
if(datav.getVThd ()>overlimit.getUaberrance ()){
temp = 1;
break;
}
}else {
String vi = getFieldValueByFieldName("v"+i,datav);
String overLimiti= getFieldValueByFieldName("uharm"+i,overlimit);
if(Double.valueOf (vi)>Double.valueOf (overLimiti)){
temp = 1;
break;
}
}
}
OverLimitFlagDTO overLimitFlagDTO = new OverLimitFlagDTO();
overLimitFlagDTO.setOverLimtFlag (temp);
overLimitFlagDTO.setStartTime (LocalDateTime.ofInstant(datav.getTime (), ZoneId.systemDefault()));
result.add (overLimitFlagDTO);
});
return result;
}
/**
* 功能描述:获取dataVCP95值数据
* @author xy
* @param lineIndex 监测点集ID
* @param startTime 起始时间
* @param endTime 结束时间
* @date 2022/5/10 14:56
* @return List<DataV>
*/
public List<DataVPO> getDataV(String lineIndex, String startTime, String endTime){
List<DataVPO> result = new ArrayList<> ();
//CP95值
StringBuilder stringBuilder7 = new StringBuilder();
StringBuilder stringBuilder8 = new StringBuilder();
stringBuilder7.append("MAX(v_thd) AS v_thd,");
for (int i = 2; i <=25 ; i++) {
if (i==25){
stringBuilder7.append("MAX(v_").append(i).append(") AS v_").append(i);
} else {
stringBuilder7.append("MAX(v_").append(i).append(") AS v_").append(i).append(",");
}
}
stringBuilder8.append ("line_id='").append (lineIndex).append ("' and ").append(InfluxDBPublicParam.TIME + " >= '").append(startTime).append("' and ").append(InfluxDBPublicParam.TIME).append(" <= '").append(endTime).append("' and value_type = 'CP95' group by time(3m) fill(0)").append(InfluxDBPublicParam.TIME_ZONE);
String sql4 = "select "+stringBuilder7+" from "+ InfluxDBPublicParam.DATA_V+" where "+stringBuilder8;
QueryResult sqlResult4 = influxDbUtils.query(sql4);
InfluxDBResultMapper resultMapper4 = new InfluxDBResultMapper();
List<DataVPO> list4 = resultMapper4.toPOJO(sqlResult4, DataVPO.class);
list4.forEach(item->{
item.setValueType("CP95");
});
result.addAll(list4);
return result;
}
/**
* 功能描述:获取dataI CP95数据
* @author xy
* @param lineIndex 监测点ID
* @param startTime 起始时间
* @param endTime 结束时间
* @date 2022/5/10 14:56
* @return List<DataIPO>
*/
public List<DataIPO> getDataI(String lineIndex, String startTime, String endTime){
List<DataIPO> result = new ArrayList<>();
//CP95值
StringBuilder stringBuilder7 = new StringBuilder();
StringBuilder stringBuilder8 = new StringBuilder();
for (int i = 2; i <=25 ; i++) {
if (i==25){
stringBuilder7.append("MAX(i_").append(i).append(") AS i_").append(i);
} else {
stringBuilder7.append("MAX(i_").append(i).append(") AS i_").append(i).append(",");
}
}
stringBuilder8.append ("line_id='").append (lineIndex).append ("' and ").append(InfluxDBPublicParam.TIME + " >= '").append(startTime).append("' and ").append(InfluxDBPublicParam.TIME).append(" <= '").append(endTime).append("' and value_type = 'CP95' group by time(3m) fill(0)").append(InfluxDBPublicParam.TIME_ZONE);
String sql4 = "select "+stringBuilder7+" from "+ InfluxDBPublicParam.DATA_I+" where "+stringBuilder8;
QueryResult sqlResult4 = influxDbUtils.query(sql4);
InfluxDBResultMapper resultMapper4 = new InfluxDBResultMapper();
List<DataIPO> list4 = resultMapper4.toPOJO(sqlResult4, DataIPO.class);
list4.forEach(item->{
item.setValueType("CP95");
});
result.addAll(list4);
return result;
}
/**
* 根据属性名获取属性值
*
* @param fieldName
* @param object
* @return
*/
private String getFieldValueByFieldName(String fieldName, Object object) {
try {
Field field = object.getClass().getDeclaredField(fieldName);
//设置对象的访问权限保证对private的属性的访问
field.setAccessible(true);
return field.get(object)+"";
} catch (Exception e) {
return null;
}
}
}

View File

@@ -0,0 +1,327 @@
package com.njcn.prepare.harmonic.service.mysql.Impl.area;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.njcn.device.pq.constant.Param;
import com.njcn.device.pq.pojo.po.PmsAbnormalRules;
import com.njcn.harmonic.pojo.po.PmsMonitorPO;
import com.njcn.harmonic.pojo.po.RMpIntegrityDPO;
import com.njcn.harmonic.pojo.po.RStatAbnormalDPO;
import com.njcn.prepare.harmonic.constant.AlgorithmParam;
import com.njcn.prepare.harmonic.mapper.mysql.area.RStatAbnormalDPOMapper;
import com.njcn.prepare.harmonic.mapper.mysql.line.PmsAbnormalRulesMapper;
import com.njcn.prepare.harmonic.pojo.dto.DataVFiveItemDTO;
import com.njcn.prepare.harmonic.pojo.oracle.PqLinedetailPO;
import com.njcn.prepare.harmonic.pojo.param.PrimaryGridParam;
import com.njcn.prepare.harmonic.service.influxdb.DataVInfluxdbService;
import com.njcn.prepare.harmonic.service.mysql.area.EffectiveMinuteCountService;
import com.njcn.prepare.harmonic.service.mysql.area.PmsMonitorPOService;
import com.njcn.prepare.harmonic.service.mysql.area.RMpIntegrityDPOService;
import com.njcn.prepare.harmonic.service.oracle.DataVOraclePOService;
import com.njcn.prepare.harmonic.service.oracle.PqLinedetailPOService;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.enums.DicDataTypeEnum;
import com.njcn.system.pojo.po.DictData;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2023/2/23 16:04【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service
@RequiredArgsConstructor
public class EffectiveMinuteCountServiceImpl implements EffectiveMinuteCountService {
private final
PmsMonitorPOService pmsMonitorPOService;
private final
RStatAbnormalDPOMapper rStatAbnormalDPOMapper;
private final
PmsAbnormalRulesMapper pmsAbnormalRulesMapper;
private final
PqLinedetailPOService pqLinedetailPOService;
private final
DataVOraclePOService dataVOraclePOService;
private final
RMpIntegrityDPOService rMpIntegrityDPOService;
private final
DicDataFeignClient dicDataFeignClient;
private final
DataVInfluxdbService dataVInfluxdbService;
/**
* @param primaryGridParam
* @Description: 主网有效监测时长计算
* @Param: [primaryGridParam]
* @return: void
* @Author: clam
* @Date: 2023/2/23
*/
@Override
@Async("asyncExecutor")
public void effectiveMinuteCount(PrimaryGridParam primaryGridParam) {
if (Objects.equals (primaryGridParam.getDataSource ( ), AlgorithmParam.ORACLE_DATA)) {
this.hanlderOracleData (primaryGridParam);
} else if (Objects.equals (primaryGridParam.getDataSource ( ), AlgorithmParam.INFLUX_DATA)) {
this.hanlderInfludxbData (primaryGridParam);
}
}
private void hanlderInfludxbData(PrimaryGridParam primaryGridParam) {
Integer type = primaryGridParam.getType ( );
switch (type) {
// case 1:
// this.hanlderInfludxdbYear (primaryGridParam);
// break;
// case 2:
// this.hanlderInfludxdbQtr (primaryGridParam);
// break;
// case 3:
// this.hanlderInfludxdbMonth (primaryGridParam);
// break;
case 5:
this.hanlderInfludxdbDay (primaryGridParam);
break;
default:
break;
}
}
@SneakyThrows
private void hanlderInfludxdbDay(PrimaryGridParam primaryGridParam) {
List<String> orgIdList = primaryGridParam.getOrgIdList ( );
String dataDate = primaryGridParam.getDataDate ( );
List<RMpIntegrityDPO> rMpIntegrityDPOS = new ArrayList<> ( );
//1、取出规则
List<PmsAbnormalRules> pmsAbnormalRules = pmsAbnormalRulesMapper.selectList (null);
//2、取出电压字典
List<DictData> dictDataList = dicDataFeignClient.getDicDataByTypeName (DicDataTypeEnum.DEV_VOLTAGE.getName ( )).getData ( );
final Date tempDate = new SimpleDateFormat ("yyyy-MM-dd").parse (dataDate);
orgIdList.forEach (orgid -> {
/*主网在运监测点*/
List<PmsMonitorPO> pmsMonitorPOS = pmsMonitorPOService.qurymeasurementRunPoints (orgid);
List<String> mysqlIndexList = pmsMonitorPOS.stream ( ).map (PmsMonitorPO::getId).collect (Collectors.toList ( ));
if (CollectionUtil.isEmpty (mysqlIndexList)) {
return;
}
/*过滤掉异常监测点*/
QueryWrapper<RStatAbnormalDPO> rStatAbnormalDPOLambdaQueryWrapper = new QueryWrapper ( );
rStatAbnormalDPOLambdaQueryWrapper.select ("measurementPointId").
in ("measurement_point_id", mysqlIndexList).
eq ("value_alarm", 1).
eq ("DATE_FORMAT( data_date ,'%Y-%m-%d')", dataDate);
List<RStatAbnormalDPO> rStatAbnormalDPOS = rStatAbnormalDPOMapper.selectList (rStatAbnormalDPOLambdaQueryWrapper);
List<String> collect = rStatAbnormalDPOS.stream ( ).map (RStatAbnormalDPO::getMeasurementPointId).collect (Collectors.toList ( ));
List<PmsMonitorPO> collect1 = pmsMonitorPOS.stream ( ).filter (temp -> collect.contains (temp.getId ( ))).collect (Collectors.toList ( ));
// /*测试造的数据*/
// List<PmsMonitorPO> collect1 = new ArrayList<> ();
// PmsMonitorPO pmsMonitorPO = new PmsMonitorPO();
// pmsMonitorPO.setVoltageLevel ("e3da890104e3c4ae1f005021411a1fd7");
// pmsMonitorPO.setStatisticalInterval (3);
// pmsMonitorPO.setId ("8696be1d170e05b7d848accc059f4558");
// collect1.add (pmsMonitorPO);
collect1.forEach (temp -> {
Double voltage = getVoltage (temp.getVoltageLevel ( ), dictDataList);
/*2.查询DataV
measurement_point_id 监测点编号
data_date 时间
phasic_type = A 相别
value_type = AVG 数据类型
*/
/*统计间隔*/
Integer statisticalInterval = temp.getStatisticalInterval ( );
/*获取监测点当天的所有数据*/
List<DataVFiveItemDTO> fiveItems = dataVInfluxdbService.getFiveItems (temp.getId (), dataDate,statisticalInterval);
/*过滤出有效接入分钟数量*/
Integer count = calculateEffectiveMinute (fiveItems, pmsAbnormalRules, voltage);
RMpIntegrityDPO rMpIntegrityDPO = new RMpIntegrityDPO ( );
rMpIntegrityDPO.setEffectiveMinuteCount (count * statisticalInterval);
rMpIntegrityDPO.setDataDate (tempDate);
rMpIntegrityDPOS.add (rMpIntegrityDPO);
});
});
rMpIntegrityDPOService.saveOrUpdateBatch (rMpIntegrityDPOS, 500);
}
/**
* @Description: 目前只计算日表
* @Param: [primaryGridParam]
* @return: void
* @Author: clam
* @Date: 2023/2/23
*/
private void hanlderOracleData(PrimaryGridParam primaryGridParam) {
Integer type = primaryGridParam.getType ( );
switch (type) {
// case 1:
// this.hanlderOracleYear (primaryGridParam);
// break;
// case 2:
// this.hanlderOracleQtr (primaryGridParam);
// break;
// case 3:
// this.hanlderOracleMonth (primaryGridParam);
// break;
case 5:
this.hanlderOracleDay (primaryGridParam);
break;
default:
break;
}
}
@SneakyThrows
private void hanlderOracleDay(PrimaryGridParam primaryGridParam) {
List<String> orgIdList = primaryGridParam.getOrgIdList ( );
String dataDate = primaryGridParam.getDataDate ( );
List<RMpIntegrityDPO> rMpIntegrityDPOS = new ArrayList<> ( );
//1、取出规则
List<PmsAbnormalRules> pmsAbnormalRules = pmsAbnormalRulesMapper.selectList (null);
//2、取出电压字典
List<DictData> dictDataList = dicDataFeignClient.getDicDataByTypeName (DicDataTypeEnum.DEV_VOLTAGE.getName ( )).getData ( );
final Date tempDate = new SimpleDateFormat ("yyyy-MM-dd").parse (dataDate);
orgIdList.forEach (orgid -> {
/*主网在运监测点*/
List<PmsMonitorPO> pmsMonitorPOS = pmsMonitorPOService.qurymeasurementRunPoints (orgid);
List<String> mysqlIndexList = pmsMonitorPOS.stream ( ).map (PmsMonitorPO::getId).collect (Collectors.toList ( ));
if (CollectionUtil.isEmpty (mysqlIndexList)) {
return;
}
/*过滤掉异常监测点*/
QueryWrapper<RStatAbnormalDPO> rStatAbnormalDPOLambdaQueryWrapper = new QueryWrapper ( );
rStatAbnormalDPOLambdaQueryWrapper.select ("measurementPointId").
in ("measurement_point_id", mysqlIndexList).
eq ("value_alarm", 1).
eq ("DATE_FORMAT( data_date ,'%Y-%m-%d')", dataDate);
List<RStatAbnormalDPO> rStatAbnormalDPOS = rStatAbnormalDPOMapper.selectList (rStatAbnormalDPOLambdaQueryWrapper);
List<String> collect = rStatAbnormalDPOS.stream ( ).map (RStatAbnormalDPO::getMeasurementPointId).collect (Collectors.toList ( ));
List<PmsMonitorPO> collect1 = pmsMonitorPOS.stream ( ).filter (temp -> collect.contains (temp.getId ( ))).collect (Collectors.toList ( ));
/*测试造的数据*/
// List<PmsMonitorPO> collect1 = new ArrayList<> ();
// PmsMonitorPO pmsMonitorPO = new PmsMonitorPO();
// pmsMonitorPO.setVoltageLevel ("e3da890104e3c4ae1f005021411a1fd7");
// pmsMonitorPO.setId ("666f03ed54f2288090f06d957d2d7b07");
// pmsMonitorPO.setStatisticalInterval (3);
// collect1.add (pmsMonitorPO);
collect1.forEach (temp -> {
Double voltage = getVoltage (temp.getVoltageLevel ( ), dictDataList);
/*2.查询DataV
measurement_point_id 监测点编号
data_date 时间
phasic_type = A 相别
value_type = AVG 数据类型
*/
/*获取mysql与Oracle监测点id对应关系*/
PqLinedetailPO pqLinedetailPO = pqLinedetailPOService.getOracleIndexIdByMonitorId (temp.getId ( ));
/*获取监测点当天的所有数据*/
List<DataVFiveItemDTO> fiveItems = dataVOraclePOService.getFiveItems (pqLinedetailPO.getLineIndex ( ), dataDate);
/*过滤出有效接入分钟数量*/
Integer count = calculateEffectiveMinute (fiveItems, pmsAbnormalRules, voltage);
/*统计间隔*/
Integer statisticalInterval = temp.getStatisticalInterval ( );
RMpIntegrityDPO rMpIntegrityDPO = new RMpIntegrityDPO ( );
rMpIntegrityDPO.setEffectiveMinuteCount (count * statisticalInterval);
rMpIntegrityDPO.setDataDate (tempDate);
rMpIntegrityDPOS.add (rMpIntegrityDPO);
});
});
rMpIntegrityDPOService.saveOrUpdateBatch (rMpIntegrityDPOS, 500);
}
/**
* @Description: 3、频率在【4555】之间
* 4、相电压有效值在【0.85p.u.1.2p.u.】之间p.u=电压等级/1.732
* 5、线电压有效值在【0.85p.u.1.2p.u.】之间p.u=电压等级
* 6、电压总谐波畸变率在【0.1%20%】之间;
* 7、负序电压不平衡度在【020%】。满足以上条件则是一条有效数据
* @Param: [fiveItems, pmsAbnormalRules, voltage]
* @return: java.lang.Integer
* @Author: clam
* @Date: 2023/2/23
*/
private Integer calculateEffectiveMinute(List<DataVFiveItemDTO> fiveItems, List<PmsAbnormalRules> pmsAbnormalRules, Double voltage) {
Integer result = 0;
for (DataVFiveItemDTO fiveItem : fiveItems) {
Double freqMax = fiveItem.getFreqMax ();
Double freqMin = fiveItem.getFreqMin ();
Double rmsMax = fiveItem.getRmsMax ();
Double rmsMin = fiveItem.getRmsMin ();
Double vThdMax = fiveItem.getVThdMax ();
Double vThdMin = fiveItem.getVThdMin ();
Double vUnbalanceMax = fiveItem.getVUnbalanceMax ();
Double vUnbalanceMin = fiveItem.getVUnbalanceMin ();
Double rmsLvrMax = fiveItem.getRmsLvrMax ();
Double rmsLvrMin = fiveItem.getRmsLvrMin ();
PmsAbnormalRules freqLimit = pmsAbnormalRules.stream ( ).filter (temp -> Objects.equals (temp.getTarget ( ), Param.TARGET_FREQ)).collect (Collectors.toList ( )).get (0);
PmsAbnormalRules rmsLimit = pmsAbnormalRules.stream ( ).filter (temp -> Objects.equals (temp.getTarget ( ), Param.TARGET_RMS)).collect (Collectors.toList ( )).get (0);
PmsAbnormalRules rms_lvrLimit = pmsAbnormalRules.stream ( ).filter (temp -> Objects.equals (temp.getTarget ( ), Param.TARGET_RMS_LVR)).collect (Collectors.toList ( )).get (0);
PmsAbnormalRules v_thdLimit = pmsAbnormalRules.stream ( ).filter (temp -> Objects.equals (temp.getTarget ( ), Param.TARGET_V_THD)).collect (Collectors.toList ( )).get (0);
PmsAbnormalRules v_unbalanceLimit = pmsAbnormalRules.stream ( ).filter (temp -> Objects.equals (temp.getTarget ( ), Param.TARGET_V_UNBALANCE)).collect (Collectors.toList ( )).get (0);
if (freqLimit.getLowerLimit ( ) <= freqMin&&freqMax <= freqLimit.getUpperLimit ( ) &&
rmsLimit.getLowerLimit ( ) * (voltage / rmsMin) <= rmsMax&&rmsMax <= rmsLimit.getUpperLimit ( ) * (voltage / 1.732) &&
rms_lvrLimit.getLowerLimit ( )*voltage <= rmsLvrMin&&rmsLvrMax <= rms_lvrLimit.getUpperLimit ( )*voltage &&
v_thdLimit.getLowerLimit ( ) <= vThdMin&&vThdMax <= v_thdLimit.getUpperLimit ( ) &&
v_unbalanceLimit.getLowerLimit ( ) <= vUnbalanceMin&&vUnbalanceMax <= v_unbalanceLimit.getUpperLimit ( )
) {
result++;
}
}
return result;
}
/**
* @Description: 根据电压字典获取电压等级
* @Param: [id, dictDataList]
* @return: java.lang.Double
* @Author: clam
* @Date: 2023/2/23
*/
private Double getVoltage(String id, List<DictData> dictDataList) {
for (DictData dictData : dictDataList) {
if (dictData.getId ( ).equals (id)) {
Double result = Double.valueOf (dictData.getValue ( ));
return result;
}
}
return null;
}
}

View File

@@ -10,6 +10,7 @@ import com.njcn.prepare.harmonic.pojo.dto.MonitorDataIntegrityDTO;
import com.njcn.prepare.harmonic.pojo.oracle.PqLinedetailPO;
import com.njcn.prepare.harmonic.pojo.param.PrimaryGridDataIntegrityParam;
import com.njcn.prepare.harmonic.pojo.param.PrimaryGridParam;
import com.njcn.prepare.harmonic.service.influxdb.DataVInfluxdbService;
import com.njcn.prepare.harmonic.service.mysql.area.*;
import com.njcn.prepare.harmonic.service.oracle.DataVOraclePOService;
import com.njcn.prepare.harmonic.service.oracle.PqLinedetailPOService;
@@ -51,7 +52,8 @@ public class PrimaryGridDataServiceImpl implements PrimaryGridDataService {
private @Autowired
PmsTerminalPOService pmsTerminalPOService;
private @Autowired
DataVInfluxdbService dataVInfluxdbService;
private @Autowired
PqLinedetailPOService pqLinedetailPOService;
@@ -159,7 +161,88 @@ public class PrimaryGridDataServiceImpl implements PrimaryGridDataService {
* @Date: 2022/11/25
*/
private void hanlderInfludxbData(PrimaryGridParam primaryGridParam) {
Integer type = primaryGridParam.getType ( );
/*月表季表年表都是重日表生成不区分oralceinfluxdb*/
switch (type) {
case 1:
this.hanlderOracleYear (primaryGridParam);
break;
case 2:
this.hanlderOracleQtr (primaryGridParam);
break;
case 3:
this.hanlderOracleMonth (primaryGridParam);
break;
case 5:
this.hanlderInfluxdbDay (primaryGridParam);
break;
default:
break;
}
}
@SneakyThrows
private void hanlderInfluxdbDay(PrimaryGridParam primaryGridParam) {
List<String> orgIdList = primaryGridParam.getOrgIdList ( );
String dataDate = primaryGridParam.getDataDate ( );
List<ROperatingIndexDPO> rOperatingIndexDPOList = new ArrayList<> ( );
final Date tempDate = new SimpleDateFormat ("yyyy-MM-dd").parse(dataDate);
orgIdList.forEach (orgid -> {
/*measurement_run_points:在运监测点个数*/
List<PmsMonitorPO> pmsMonitorPOS = pmsMonitorPOService.qurymeasurementRunPoints (orgid);
Integer measurement_run_points = pmsMonitorPOS.size ( );
List<String> mysqlIndexList = pmsMonitorPOS.stream ( ).map (PmsMonitorPO::getId).collect (Collectors.toList ( ));
/*主网单位在线监测点数 transit_measurement_points*/
Integer transit_measurement_points = dataVInfluxdbService.queryTransitMeasurementPoints(mysqlIndexList,primaryGridParam.getDataDate (),"A");
/*主网单位有效接入监测点个数 effective_access_measurement_count*/
Integer effective_access_measurement_count = this.queryEffectiveAccessMeasurementCount(mysqlIndexList,primaryGridParam.getDataDate ());
/*监测终端数量 online_measurement_points*/
List<PmsTerminalPO> pmsTerminalPOS = pmsTerminalPOService.queryOnlineMeasurementPoints(orgid);
Integer online_measurement_points = pmsTerminalPOS.size ();
/*在运监测终端个数 online_measurement_count*/
String state = redisUtil.getStringByKey (NAME_KEY+
SPLIT_SIGN+ DicDataTypeEnum.DEV_STATUS.getCode ( )+
SPLIT_SIGN+ DicDataEnum.RUNNING.getCode ( ));
Integer online_measurement_count = Integer.valueOf (pmsTerminalPOS.stream ( ).filter (temp -> Objects.equals (temp.getTerminalState ( ),state)).count ( )+"");
/*主网单位数据完整率 data_integrity_rate*/
double data_integrity_rate=0.00;
List<MonitorDataIntegrityDTO> monitorDataIntegrityDTOList = rMpIntegrityDPOService.calculateDataIntegrity (mysqlIndexList, dataDate);
/*求平均值*/
if(!CollectionUtils.isEmpty (monitorDataIntegrityDTOList)){
data_integrity_rate = monitorDataIntegrityDTOList.stream ( ).mapToDouble (temp -> {
return temp.getDataIntegrity ( ).doubleValue ( );
}).average ( ).getAsDouble ( );
}
/*主网单位数据异常监测点数日统计 is_unusual*/
Integer is_unusual =this.queryIsUnusualCount(mysqlIndexList,primaryGridParam.getDataDate ());
ROperatingIndexDPO rOperatingIndexDPO = new ROperatingIndexDPO( );
rOperatingIndexDPO.setOrgNo (orgid);
rOperatingIndexDPO.setDataDate (tempDate);
rOperatingIndexDPO.setMeasurementRunPoints (measurement_run_points);
rOperatingIndexDPO.setTransitMeasurementPoints (transit_measurement_points);
rOperatingIndexDPO.setEffectiveAccessMeasurementCount (effective_access_measurement_count);
rOperatingIndexDPO.setOnlineMeasurementPoints (online_measurement_points);
rOperatingIndexDPO.setOnlineMeasurementCount (online_measurement_count);
rOperatingIndexDPO.setDataIntegrityRate (data_integrity_rate);
rOperatingIndexDPO.setIsUnusual (is_unusual>0?1:0);
rOperatingIndexDPOList.add (rOperatingIndexDPO);
});
if(!CollectionUtils.isEmpty (rOperatingIndexDPOList)){
rOperatingIndexDPOService.saveOrUpdateBatchByMultiId (rOperatingIndexDPOList,30);
}
}
/**
* @Description: 处理Oracle数据

View File

@@ -0,0 +1,22 @@
package com.njcn.prepare.harmonic.service.mysql.area;
import com.njcn.prepare.harmonic.pojo.param.PrimaryGridParam;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2023/2/23 16:04【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface EffectiveMinuteCountService {
/**
* @Description: 主网有效监测时长计算
* @Param: [primaryGridParam]
* @return: void
* @Author: clam
* @Date: 2023/2/23
*/
void effectiveMinuteCount(PrimaryGridParam primaryGridParam);
}

View File

@@ -1,6 +1,7 @@
package com.njcn.prepare.harmonic.service.oracle;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.prepare.harmonic.pojo.dto.DataVFiveItemDTO;
import com.njcn.prepare.harmonic.pojo.oracle.DataVOraclePO;
import com.njcn.prepare.harmonic.pojo.vo.DataVOracleVO;
@@ -40,4 +41,13 @@ public interface DataVOraclePOService extends IService<DataVOraclePO>{
* @return
*/
Double queryVThdMax(Integer lineId,String datadate);
/**
* @Description: 获取监测点当天数据根据
* @Param: [lineId, date]
* @return: java.util.List<com.njcn.prepare.harmonic.pojo.vo.DataVOracleVO>
* @Author: clam
* @Date: 2023/2/23
*/
List<DataVFiveItemDTO> getFiveItems(Integer lineId, String date);
}

View File

@@ -5,6 +5,7 @@ import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.prepare.harmonic.mapper.oracle.DataVOraclePOMapper;
import com.njcn.prepare.harmonic.pojo.dto.DataVFiveItemDTO;
import com.njcn.prepare.harmonic.pojo.oracle.DataVOraclePO;
import com.njcn.prepare.harmonic.pojo.vo.DataVOracleVO;
import com.njcn.prepare.harmonic.service.oracle.DataVOraclePOService;
@@ -109,4 +110,21 @@ public class DataVOraclePOServiceImpl extends ServiceImpl<DataVOraclePOMapper, D
Double vThdMax = dataVOraclePO.getVThdMax ( );
return vThdMax;
}
/**
* @param lineId
* @param date
* @Description: 获取监测点当天数据
* @Param: [lineId, date]
* @return: java.util.List<com.njcn.prepare.harmonic.pojo.vo.DataVOracleVO>
* @Author: clam
* @Date: 2023/2/23
*/
@Override
public List<DataVFiveItemDTO> getFiveItems(Integer lineId, String date) {
List<DataVFiveItemDTO> collect = dataVOraclePOMapper.getFiveItems(lineId,date);
return collect;
}
}

View File

@@ -47,7 +47,6 @@ public class PqsEventdetailServiceImpl extends MppServiceImpl<PqsEventdetailMapp
Integer integer = pqsEventdetailMapper.selectCount (queryWrapper);
return integer;
}
}

View File

@@ -0,0 +1,65 @@
package com.njcn.prepare.harmonic.pojo.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
@Data
public class DataVFiveItemDTO {
@ApiModelProperty("监测点ID")
private Integer lineid;
@ApiModelProperty("时间")
private Date timeid;
@ApiModelProperty("相别")
private String phasicType;
@ApiModelProperty("频率平均值实时量测值MAX")
private Double freqMax;
@ApiModelProperty("频率平均值实时量测值MIN")
private Double freqMin;
@ApiModelProperty("相电压有效值平均值实时量测值MAX")
private Double rmsMax;
@ApiModelProperty("相电压有效值平均值实时量测值MIN")
private Double rmsMin;
@ApiModelProperty("线电压有效值平均值实时量测值MAX")
private Double rmsLvrMax;
@ApiModelProperty("线电压有效值平均值实时量测值MIN")
private Double rmsLvrMin;
@ApiModelProperty("电压总谐波畸变率平均值实时量测值量MAX")
private Double vThdMax;
@ApiModelProperty("电压总谐波畸变率平均值实时量测值量MIN")
private Double vThdMin;
@ApiModelProperty("三相电压负序不平衡度平均值实时量测值MAX")
private Double vUnbalanceMax;
@ApiModelProperty("三相电压负序不平衡度平均值实时量测值MIN")
private Double vUnbalanceMin;
@ApiModelProperty("频率平均值数量")
private Integer freqCount;
@ApiModelProperty("相电压有效值平均值数量")
private Integer rmsCount;
@ApiModelProperty("线电压有效值平均值数量")
private Integer rmsLvrCount;
@ApiModelProperty("电压总谐波畸变率平均值数量")
private Integer vThdCount;
@ApiModelProperty("三相电压负序不平衡度平均值数量")
private Integer vUnbalanceCount;
}

View File

@@ -0,0 +1,29 @@
package com.njcn.prepare.harmonic.pojo.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
* Description:
* 接口文档访问地址http://serverIP:port/swagger-ui.html
* Date: 2023/2/13 10:58【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
public class OverLimitFlagDTO {
@ApiModelProperty("监测点ID(台区id)")
private String lineId;
@ApiModelProperty("越限开始时间")
private LocalDateTime startTime;
@ApiModelProperty("越限结束时间")
private LocalDateTime endTime ;
@ApiModelProperty("越限类型")
private String overLimtType;
@ApiModelProperty("越限标志")
private Integer overLimtFlag;
}

View File

@@ -0,0 +1,33 @@
package com.njcn.prepare.harmonic.pojo.param;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @author clam
* Date: 2022/10/20 11:41
* @version V1.0.0
*/
@Data
public class WorkOrderCreateParam {
@ApiModelProperty(name = "orgIdList",value = "单位Id")
private List<String> orgIdList;
@ApiModelProperty(name = "type",value = "报表类型,1,年2季3月4周5日")
@NotNull(message = "报表类型不可为空")
private Integer type;
@ApiModelProperty(name = "dataDate",value = "时间")
@NotBlank(message = "报表时间不可为空")
private String dataDate;
@ApiModelProperty(name = "dataSource",value = "数据源 0:oracle;1:influxdb")
@NotBlank(message = "数据源")
private Integer dataSource;
}