1.河北新增公共连接点预处理算法

This commit is contained in:
2024-08-16 09:30:15 +08:00
parent 813af67b9b
commit f22748ef8f
14 changed files with 639 additions and 418 deletions

View File

@@ -6,10 +6,7 @@ import com.njcn.common.pojo.response.HttpResult;
import com.njcn.device.pms.api.fallback.MonitorClientFallbackFactory; import com.njcn.device.pms.api.fallback.MonitorClientFallbackFactory;
import com.njcn.device.pms.pojo.dto.PmsMonitorDTO; import com.njcn.device.pms.pojo.dto.PmsMonitorDTO;
import com.njcn.device.pms.pojo.dto.PmsMonitorInfoDTO; import com.njcn.device.pms.pojo.dto.PmsMonitorInfoDTO;
import com.njcn.device.pms.pojo.param.MonitorTerminalParam; import com.njcn.device.pms.pojo.param.*;
import com.njcn.device.pms.pojo.param.PmsMonitorInfoParam;
import com.njcn.device.pms.pojo.param.PmsMonitorParam;
import com.njcn.device.pms.pojo.param.TerminalQueryParam;
import com.njcn.device.pms.pojo.param.gw.TypicalSourceParam; import com.njcn.device.pms.pojo.param.gw.TypicalSourceParam;
import com.njcn.device.pms.pojo.po.Monitor; import com.njcn.device.pms.pojo.po.Monitor;
import com.njcn.device.pms.pojo.vo.MonitorVO; import com.njcn.device.pms.pojo.vo.MonitorVO;
@@ -92,4 +89,7 @@ public interface MonitorClient {
*/ */
@PostMapping("/monitorTypicalList") @PostMapping("/monitorTypicalList")
HttpResult<Page<TypicalSourceOnLine>> monitorTypicalList(@RequestBody TypicalSourceParam param); HttpResult<Page<TypicalSourceOnLine>> monitorTypicalList(@RequestBody TypicalSourceParam param);
@PostMapping("/getMonitorListByParam")
HttpResult<List<Monitor>> getMonitorListByParam(@RequestBody MonitorParam monitorParam);
} }

View File

@@ -7,10 +7,7 @@ import com.njcn.common.pojo.response.HttpResult;
import com.njcn.device.pms.api.MonitorClient; import com.njcn.device.pms.api.MonitorClient;
import com.njcn.device.pms.pojo.dto.PmsMonitorDTO; import com.njcn.device.pms.pojo.dto.PmsMonitorDTO;
import com.njcn.device.pms.pojo.dto.PmsMonitorInfoDTO; import com.njcn.device.pms.pojo.dto.PmsMonitorInfoDTO;
import com.njcn.device.pms.pojo.param.MonitorTerminalParam; import com.njcn.device.pms.pojo.param.*;
import com.njcn.device.pms.pojo.param.PmsMonitorInfoParam;
import com.njcn.device.pms.pojo.param.PmsMonitorParam;
import com.njcn.device.pms.pojo.param.TerminalQueryParam;
import com.njcn.device.pms.pojo.param.gw.TypicalSourceParam; import com.njcn.device.pms.pojo.param.gw.TypicalSourceParam;
import com.njcn.device.pms.pojo.po.Monitor; import com.njcn.device.pms.pojo.po.Monitor;
import com.njcn.device.pms.pojo.vo.MonitorVO; import com.njcn.device.pms.pojo.vo.MonitorVO;
@@ -83,6 +80,12 @@ public class MonitorClientFallbackFactory implements FallbackFactory<MonitorClie
log.error("{}异常,降级处理,异常为:{}", "典型源荷下穿监测点信息接口 ", throwable.toString()); log.error("{}异常,降级处理,异常为:{}", "典型源荷下穿监测点信息接口 ", throwable.toString());
throw new BusinessException(finalExceptionEnum); throw new BusinessException(finalExceptionEnum);
} }
@Override
public HttpResult<List<Monitor>> getMonitorListByParam(MonitorParam monitorParam) {
log.error("{}异常,降级处理,异常为:{}", "根据条件查询监测点 ", throwable.toString());
throw new BusinessException(finalExceptionEnum);
}
}; };
} }
} }

View File

@@ -312,6 +312,14 @@ public class MonitorServiceImpl extends ServiceImpl<MonitorMapper, Monitor> impl
List<String> deptIds = deptFeignClient.getDepSonSelfCodetByDeptId(monitorParam.getOrgId()).getData(); List<String> deptIds = deptFeignClient.getDepSonSelfCodetByDeptId(monitorParam.getOrgId()).getData();
lambdaQueryWrapper.in(Monitor::getOrgId, deptIds).eq(Monitor::getStatus, DataStateEnum.ENABLE.getCode()); lambdaQueryWrapper.in(Monitor::getOrgId, deptIds).eq(Monitor::getStatus, DataStateEnum.ENABLE.getCode());
} }
//是否上送国网测点
if(Objects.nonNull(monitorParam.getIsUpToGrid())){
lambdaQueryWrapper.eq(Monitor::getIsUpToGrid, DataStateEnum.ENABLE.getCode());
}
//运行状态
if(StrUtil.isNotBlank(monitorParam.getMonitorState())){
lambdaQueryWrapper.eq(Monitor::getMonitorState,monitorParam.getMonitorState());
}
return this.list(lambdaQueryWrapper); return this.list(lambdaQueryWrapper);
} }
@@ -1242,7 +1250,7 @@ public class MonitorServiceImpl extends ServiceImpl<MonitorMapper, Monitor> impl
List<DictData> wireList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_CONNECT.getCode()).getData(); List<DictData> wireList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_CONNECT.getCode()).getData();
Map<String, DictData> wireListMap = wireList.stream().collect(Collectors.toMap(DictData::getName, Function.identity())); Map<String, DictData> wireListMap = wireList.stream().collect(Collectors.toMap(DictData::getName, Function.identity()));
DictData potentialDic = dicDataFeignClient.getDicDataByNameAndTypeName(DicDataTypeEnum.VOLTAGE_TRANSFORMER.getName(), DicDataEnum.Cap_V.getName()).getData(); DictData potentialDic = dicDataFeignClient.getDicDataByCodeAndType(DicDataEnum.Cap_V.getCode(),DicDataTypeEnum.VOLTAGE_TRANSFORMER.getCode()).getData();
DictData neutralDic = dicDataFeignClient.getDicDataByNameAndTypeName(DicDataTypeEnum.Neutral_Point.getName(), DicDataEnum.Ground_Res.getName()).getData(); DictData neutralDic = dicDataFeignClient.getDicDataByNameAndTypeName(DicDataTypeEnum.Neutral_Point.getName(), DicDataEnum.Ground_Res.getName()).getData();

View File

@@ -0,0 +1,166 @@
package com.njcn.harmonic.pojo.po.upload;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
import com.njcn.db.bo.BaseEntity;
import java.io.Serializable;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 公共连接点母线电能质量统计
* </p>
*
* @author xy
* @since 2024-08-15
*/
@Getter
@Setter
@TableName("r_upload_comm_point_bus")
public class RUploadCommPointBus implements Serializable {
private static final long serialVersionUID = 1L;
/**
* uuid
*/
private String objId;
/**
* 统计类型
*/
@MppMultiId
private String statisticalType;
/**
* 统计时间
*/
@MppMultiId
private String statisticalDate;
/**
* 母线id
*/
@MppMultiId
private String busId;
/**
* 母线名称
*/
private String busName;
/**
* 所属省份,取ISC平台上的组织id
*/
private String provinceOrg;
private String provinceOrgName;
/**
* 所属地市,取ISC平台上的组织id
*/
private String cityOrg;
private String cityOrgName;
/**
* 运维单位
*/
private String maintOrg;
private String maintOrgName;
/**
* 站房类型
*/
private String stationType;
/**
* 所属电站
*/
private String stationId;
/**
* 所属电站名称
*/
private String stationName;
private String stationVoltageLevel;
/**
* 母线电压等级
*/
private String busVoltageLevel;
/**
* 总超标天数
*/
private Integer ovDays;
/**
* 电压有效值-平均值
*/
private Double avgVrms;
/**
* 电压有效值-95%概率大值
*/
private Double gVrms;
/**
* 谐波电压-超标天数
*/
private Integer harmVOvDays;
/**
* 谐波电压-超标时长(分钟)
*/
private Integer harmVOvDuration;
/**
* 三相不平衡-超标天数
*/
private Integer vunbanOvDays;
/**
* 三相不平衡-超标时长(分钟)
*/
private Integer vunbanOvDuration;
/**
* 长时闪变-超标天数
*/
private Integer pltOvDays;
/**
* 长时闪变-超标时长(分钟)
*/
private Integer pltOvDuration;
/**
* 最优监测点编号
*/
private String monitorId;
/**
* 关联监测点集合数
*/
private String monitorIds;
/**
* 数据来源
*/
private String dataSource;
@TableField(exist = false)
private String cnMonitorId;
}

View File

@@ -0,0 +1,22 @@
package com.njcn.harmonic.controller.upload;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.njcn.web.controller.BaseController;
/**
* <p>
* 公共连接点母线电能质量统计 前端控制器
* </p>
*
* @author xy
* @since 2024-08-15
*/
@RestController
@RequestMapping("/upload/rUploadCommPointBus")
public class RUploadCommPointBusController extends BaseController {
}

View File

@@ -22,6 +22,7 @@ import com.njcn.web.factory.PageFactory;
import com.njcn.web.pojo.param.BaseParam; import com.njcn.web.pojo.param.BaseParam;
import com.njcn.web.pojo.param.SendParam; import com.njcn.web.pojo.param.SendParam;
import com.njcn.web.utils.GwSendUtil; import com.njcn.web.utils.GwSendUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@@ -45,6 +46,7 @@ import java.util.Optional;
@RestController @RestController
@RequestMapping("/rUploadReport") @RequestMapping("/rUploadReport")
@RequiredArgsConstructor @RequiredArgsConstructor
@Api(tags = "电能质量报表上送")
public class RUploadReportController extends BaseController { public class RUploadReportController extends BaseController {
private final IRUploadReportService irUploadReportService; private final IRUploadReportService irUploadReportService;

View File

@@ -0,0 +1,17 @@
package com.njcn.harmonic.mapper.upload;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.harmonic.pojo.po.upload.RUploadCommPointBus;
/**
* <p>
* 公共连接点母线电能质量统计 Mapper 接口
* </p>
*
* @author xy
* @since 2024-08-15
*/
public interface RUploadCommPointBusMapper extends BaseMapper<RUploadCommPointBus> {
}

View File

@@ -0,0 +1,14 @@
package com.njcn.harmonic.service.upload;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.harmonic.pojo.po.upload.RUploadCommPointBus;
/**
* <p>
* 公共连接点母线电能质量统计 服务类
* </p>
*/
public interface IRUploadCommPointBusService extends IService<RUploadCommPointBus> {
}

View File

@@ -0,0 +1,21 @@
package com.njcn.harmonic.service.upload.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.harmonic.mapper.upload.RUploadCommPointBusMapper;
import com.njcn.harmonic.pojo.po.upload.RUploadCommPointBus;
import com.njcn.harmonic.service.upload.IRUploadCommPointBusService;
import org.springframework.stereotype.Service;
/**
* <p>
* 公共连接点母线电能质量统计 服务实现类
* </p>
*
* @author xy
* @since 2024-08-15
*/
@Service
public class RUploadCommPointBusServiceImpl extends ServiceImpl<RUploadCommPointBusMapper, RUploadCommPointBus> implements IRUploadCommPointBusService {
}

View File

@@ -0,0 +1,27 @@
package com.njcn.prepare.harmonic.controller.upload;
import com.njcn.prepare.harmonic.service.mysql.upload.IRUploadCommPointBusService;
import io.swagger.annotations.Api;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* 公共连接点
*/
@RestController
@RequiredArgsConstructor
@Api(tags = "公共连接点")
public class CommPointController {
private final IRUploadCommPointBusService irUploadCommPointBusService;
@GetMapping("handlerDay")
public void handlerDay(@RequestParam String date){
irUploadCommPointBusService.handlerDay(date);
}
}

View File

@@ -0,0 +1,15 @@
package com.njcn.prepare.harmonic.mapper.mysql.upload;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.harmonic.pojo.po.upload.RUploadCommPointBus;
/**
* <p>
* 公共连接点母线电能质量统计 Mapper 接口
* </p>
*/
public interface RUploadCommPointBusMapper extends MppBaseMapper<RUploadCommPointBus> {
}

View File

@@ -0,0 +1,17 @@
package com.njcn.prepare.harmonic.service.mysql.upload;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.harmonic.pojo.po.upload.RUploadCommPointBus;
/**
* <p>
* 公共连接点母线电能质量统计 服务类
* </p>
*/
public interface IRUploadCommPointBusService extends IService<RUploadCommPointBus> {
void handlerDay(String date);
}

View File

@@ -0,0 +1,318 @@
package com.njcn.prepare.harmonic.service.mysql.upload.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.common.pojo.enums.common.DataStateEnum;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.device.biz.commApi.CommLineClient;
import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
import com.njcn.device.pms.api.MonitorClient;
import com.njcn.device.pms.pojo.param.MonitorParam;
import com.njcn.device.pms.pojo.po.GeneratrixWire;
import com.njcn.device.pms.pojo.po.Monitor;
import com.njcn.device.pms.pojo.po.PmsMidLedger;
import com.njcn.device.pms.pojo.po.StatationStat;
import com.njcn.device.pq.pojo.po.RStatIntegrityD;
import com.njcn.harmonic.annotaion.HarVoltage;
import com.njcn.harmonic.pojo.po.RStatDataVD;
import com.njcn.harmonic.pojo.po.day.RStatDataVDPO;
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
import com.njcn.harmonic.pojo.po.upload.RUploadCommPointBus;
import com.njcn.prepare.harmonic.mapper.mysql.day.RStatDataFlickerDMapper;
import com.njcn.prepare.harmonic.mapper.mysql.day.RStatDataVDMapper;
import com.njcn.prepare.harmonic.mapper.mysql.day.RStatIntegrityDMapper;
import com.njcn.prepare.harmonic.mapper.mysql.day.RStatLimitRateDMapper;
import com.njcn.prepare.harmonic.mapper.mysql.dim.GeneratrixWireMapper;
import com.njcn.prepare.harmonic.mapper.mysql.dim.PmsMidLedgerMapper;
import com.njcn.prepare.harmonic.mapper.mysql.upload.PmsStatationStatMapper;
import com.njcn.prepare.harmonic.mapper.mysql.upload.RUploadCommPointBusMapper;
import com.njcn.prepare.harmonic.service.mysql.upload.IRUploadCommPointBusService;
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 com.njcn.user.api.DeptFeignClient;
import com.njcn.user.pojo.po.Dept;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* <p>
* 公共连接点母线电能质量统计 服务实现类
* </p>
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class RUploadCommPointBusServiceImpl extends MppServiceImpl<RUploadCommPointBusMapper, RUploadCommPointBus> implements IRUploadCommPointBusService {
private final MonitorClient monitorClient;
private final DicDataFeignClient dicDataFeignClient;
private final DeptFeignClient deptFeignClient;
private final RStatIntegrityDMapper rStatIntegrityDMapper;
private final GeneratrixWireMapper generatrixWireMapper;
private final PmsMidLedgerMapper pmsMidLedgerMapper;
private final PmsStatationStatMapper pmsStatationStatMapper;
private final RStatDataVDMapper rStatDataVDMapper;
private final RStatDataFlickerDMapper rStatDataFlickerDMapper;
private final RStatLimitRateDMapper rStatLimitRateDMapper;
@Override
@Async("asyncExecutor")
public void handlerDay(String date){
List<RUploadCommPointBus> poLIst = new ArrayList<>();
DictData dictDataStatus = dicDataFeignClient.getDicDataByCodeAndType(DicDataEnum.RUN.getCode(), DicDataTypeEnum.LINE_STATE.getCode()).getData();
DictData dictDataType = dicDataFeignClient.getDicDataByCodeAndType(DicDataEnum.Pub_Connect_Point.getCode(), DicDataTypeEnum.LINE_TYPE.getCode()).getData();
//电压
List<DictData> dictDataList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_VOLTAGE.getCode()).getData();
Map<String,DictData> voltageMap = dictDataList.stream().collect(Collectors.toMap(DictData::getId,Function.identity()));
String rootDeptId = deptFeignClient.getRootDept().getData().getId();
List<Dept> deptList = deptFeignClient.getDirectSonSelf(rootDeptId).getData();
Optional<Dept> optional = deptList.stream().filter(item->!item.getId().equals(rootDeptId)).findFirst();
Dept provinceOrg;
if(optional.isPresent()){
provinceOrg = optional.get();
}else {
log.error("公共连接点算法执行异常,获取部门异常,请联系管理员排查");
return;
}
List<Dept> deptL = deptFeignClient.getAllDept().getData();
Map<String,Dept> deptIdMap = deptL.stream().collect(Collectors.toMap(Dept::getId,Function.identity()));
Map<String,Dept> deptCodeMap = deptL.stream().collect(Collectors.toMap(Dept::getCode,Function.identity()));
MonitorParam monitorParam = new MonitorParam();
monitorParam.setIsUpToGrid(DataStateEnum.ENABLE.getCode());
monitorParam.setMonitorState(dictDataStatus.getId());
monitorParam.setMonitorType(dictDataType.getId());
List<Monitor> monitorList = monitorClient.getMonitorListByParam(monitorParam).getData();
if(CollUtil.isNotEmpty(monitorList)){
//筛选所有测点
List<String> monitorIds = monitorList.stream().map(Monitor::getId).distinct().collect(Collectors.toList());
//获取灿能母线
List<String> lineIds = monitorList.stream().map(Monitor::getLineId).distinct().collect(Collectors.toList());
List<GeneratrixWire> generatrixWireList = generatrixWireMapper.selectBatchIds(lineIds);
Map<String,GeneratrixWire> cnBusMap = generatrixWireList.stream().collect(Collectors.toMap(GeneratrixWire::getId,Function.identity()));
//获取同源母线
List<String> midBusIds = generatrixWireList.stream().map(GeneratrixWire::getMidBusId).distinct().collect(Collectors.toList());
Map<String,PmsMidLedger> midMap = pmsMidLedgerMapper.selectBatchIds(midBusIds).stream().collect(Collectors.toMap(PmsMidLedger::getId,Function.identity()));
//灿能电站
List<String> stationIds = monitorList.stream().map(Monitor::getPowerrId).distinct().collect(Collectors.toList());
List<StatationStat> stationList = pmsStatationStatMapper.selectBatchIds(stationIds);
Map<String,StatationStat> cnStatMap = stationList.stream().collect(Collectors.toMap(StatationStat::getPowerId,Function.identity()));
List<String> midStationIds = stationList.stream().map(StatationStat::getMidStationId).distinct().collect(Collectors.toList());
Map<String,PmsMidLedger> midStationMap = pmsMidLedgerMapper.selectBatchIds(midStationIds).stream().collect(Collectors.toMap(PmsMidLedger::getId,Function.identity()));
//监测点完整率
List<RStatIntegrityD> rStatIntegrityDList = rStatIntegrityDMapper.selectList(new LambdaQueryWrapper<RStatIntegrityD>().eq(RStatIntegrityD::getTimeId,date).in(RStatIntegrityD::getLineIndex,monitorIds));
Map<String,RStatIntegrityD> inteMap = rStatIntegrityDList.stream().collect(Collectors.toMap(RStatIntegrityD::getLineIndex, Function.identity()));
//循环母线
Map<String,List<Monitor>> mapMonitor = monitorList.stream().collect(Collectors.groupingBy(Monitor::getLineId));
mapMonitor.forEach((busId,pointList)->{
RUploadCommPointBus rUploadCommPointBus = new RUploadCommPointBus();
GeneratrixWire generatrixWire = cnBusMap.get(busId);
rUploadCommPointBus.setBusId(generatrixWire.getMidBusId());
PmsMidLedger busMid = midMap.get(generatrixWire.getMidBusId());
rUploadCommPointBus.setBusName(busMid.getName());
rUploadCommPointBus.setBusVoltageLevel(String.format("%02d",voltageMap.get(busMid.getVoltageLevel()).getAlgoDescribe()));
rUploadCommPointBus.setStatisticalType(DicDataEnum.STATISTICAL_TYPE_D.getCode());
rUploadCommPointBus.setStatisticalDate(date);
Monitor point;
//rUploadCommPointBus.setCityOrg();
if(pointList.size()>1){
//筛选最优测点进行数据统计
point = goodMonitor(pointList,inteMap);
}else {
point = pointList.get(0);
}
rUploadCommPointBus.setProvinceOrg(provinceOrg.getCode());
rUploadCommPointBus.setProvinceOrgName(provinceOrg.getName());
Dept deptTem = deptIdMap.get(deptCodeMap.get(point.getOrgId()).getPid());
rUploadCommPointBus.setCityOrg(deptTem.getCode());
rUploadCommPointBus.setCityOrgName(deptTem.getName());
rUploadCommPointBus.setMaintOrg(point.getOperationId());
rUploadCommPointBus.setMaintOrgName(point.getOperationName());
rUploadCommPointBus.setStationType("zf01");
rUploadCommPointBus.setStationId(cnStatMap.get(point.getPowerrId()).getMidStationId());
PmsMidLedger midStation = midStationMap.get(cnStatMap.get(point.getPowerrId()).getMidStationId());
rUploadCommPointBus.setStationName(midStation.getName());
rUploadCommPointBus.setStationVoltageLevel(String.format("%02d",voltageMap.get(midStation.getVoltageLevel()).getAlgoDescribe()));
rUploadCommPointBus.setMonitorId(point.getMonitorId());
rUploadCommPointBus.setDataSource("01");
rUploadCommPointBus.setCnMonitorId(point.getId());
poLIst.add(rUploadCommPointBus);
});
List<String> cnIds = poLIst.stream().map(RUploadCommPointBus::getCnMonitorId).distinct().collect(Collectors.toList());
QueryWrapper<RStatDataVDPO> queryWrapper = new QueryWrapper<>();
queryWrapper.select("avg(rms) as rms,line_id").eq("time",date).in("line_id",cnIds).eq("value_type","AVG").groupBy("line_id");
List<RStatDataVDPO> rStatDataVDList = rStatDataVDMapper.selectList(queryWrapper);
Map<String,RStatDataVDPO> avgMap = rStatDataVDList.stream().collect(Collectors.toMap(RStatDataVDPO::getLineId,Function.identity()));
queryWrapper.clear();
queryWrapper.select("max(rms) as rms,line_id").eq("time",date).in("line_id",cnIds).eq("value_type","CP95").groupBy("line_id");
List<RStatDataVDPO> cpList = rStatDataVDMapper.selectList(queryWrapper);
Map<String,RStatDataVDPO> cpMap = cpList.stream().collect(Collectors.toMap(RStatDataVDPO::getLineId,Function.identity()));
List<RStatLimitRateDPO> rStatLimitRateDPOS = rStatLimitRateDMapper.selectList(new LambdaQueryWrapper<RStatLimitRateDPO>().in(RStatLimitRateDPO::getLineId,cnIds).eq(RStatLimitRateDPO::getTime,date).eq(RStatLimitRateDPO::getPhasicType,"T"));
Map<String,RStatLimitRateDPO> rStatLimitRateDPOMap = rStatLimitRateDPOS.stream().collect(Collectors.toMap(RStatLimitRateDPO::getLineId,Function.identity()));
for(RUploadCommPointBus item: poLIst){
item.setObjId(IdUtil.simpleUUID());
if(avgMap.containsKey(item.getCnMonitorId())){
RStatDataVDPO rStatDataVDPO = avgMap.get(item.getCnMonitorId());
item.setAvgVrms(rStatDataVDPO.getRms());
}
if(cpMap.containsKey(item.getCnMonitorId())){
RStatDataVDPO rStatDataVDPO = cpMap.get(item.getCnMonitorId());
item.setGVrms(rStatDataVDPO.getRms());
}
Integer limitDay = 0;
if(rStatLimitRateDPOMap.containsKey(item.getCnMonitorId())){
RStatLimitRateDPO r = rStatLimitRateDPOMap.get(item.getCnMonitorId());
int limit = maxOverTime(r, HarVoltage.class);
if(r.getAllTime()>0){
int i= 1440/r.getAllTime();
if(limit>0){
item.setHarmVOvDuration(limit*i);
item.setHarmVOvDays(1);
limitDay = 1;
}else {
item.setHarmVOvDuration(0);
item.setHarmVOvDays(0);
}
//三相不平衡
if(r.getUbalanceOvertime()>0){
item.setVunbanOvDuration(r.getUbalanceOvertime()*i);
item.setVunbanOvDays(1);
limitDay = 1;
}else {
item.setVunbanOvDuration(0);
item.setVunbanOvDays(0);
}
}
if(r.getFlickerAllTime() > 0){
int i= 1440/r.getFlickerAllTime();
//
if(r.getFlickerOvertime()>0){
item.setPltOvDuration(r.getFlickerOvertime()*i);
item.setPltOvDays(1);
limitDay = 1;
}else {
item.setPltOvDuration(0);
item.setPltOvDays(0);
}
}
item.setOvDays(limitDay);
}
}
if(CollUtil.isNotEmpty(poLIst)){
this.saveOrUpdateBatchByMultiId(poLIst);
}
}
}
/***
* 获取越限最大值
* @param object
* @param annotation
* @return
*/
private Integer maxOverTime(Object object, Class annotation) {
Integer maxValue = 0;
try {
Class objClass = object.getClass();
Field[] fields = objClass.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
boolean isAnon = field.isAnnotationPresent(annotation);
if (isAnon) {
Object objValue = field.get(object);
if (objValue instanceof Integer) {
if ((Integer) objValue > maxValue) {
maxValue = (Integer) objValue;
}
}
}
}
} catch (Exception e) {
log.error("获取越限最大值异常:{}", e.toString());
}
return maxValue;
}
/**
* 选择最优测点,数据完整性最高
* @param monitorList
* @param inteMap
* @return
*/
private Monitor goodMonitor(List<Monitor> monitorList,Map<String,RStatIntegrityD> inteMap){
Float val = 0.00f;
Monitor monitorRes = monitorList.get(0);
for(Monitor monitor:monitorList){
if(inteMap.containsKey(monitor.getId())){
RStatIntegrityD rStatIntegrityD = inteMap.get(monitor.getId());
float tem = (float)rStatIntegrityD.getRealTime()/rStatIntegrityD.getDueTime();
if(tem>val){
val = tem;
monitorRes = monitor;
}
}
}
return monitorRes;
}
public void handlerMonth(String date){
}
public void handlerYear(String date){
}
}

View File

@@ -1,409 +0,0 @@
//package com.njcn.process.pojo.po;
//
//import com.baomidou.mybatisplus.annotation.TableField;
//import com.baomidou.mybatisplus.annotation.TableName;
//import com.njcn.process.annotaion.HarCurrent;
//import com.njcn.process.annotaion.HarVoltage;
//import com.njcn.process.annotaion.InterharVoltage;
//import lombok.Data;
//import lombok.ToString;
//
//import java.util.Date;
//
///**
// * <p>
// *
// * </p>
// *
// * @author lxp
// * @since 2023-03-16
// */
//@Data
//@TableName("limit_rate")
//@ToString
//public class LimitRate {
//
// private static final long serialVersionUID = 1L;
//
// /**
// * 创建时间
// */
// @TableField(value = "creat_time")
// private Date creatTime;
//
// /**
// * 数据类型,A表示A相B表示B相,C表示C相,M表示A
// */
// @TableField(value = "phasic_type")
// private String phasicType;
//
// /**
// * 监测点ID合格率的变电站/装置/母线/线路序号
// */
// @TableField(value = "line_id")
// private String lineId;
//
// /**
// * 总计算次数
// */
// @TableField(value = "alltime")
// private Integer alltime;
//
// /**
// * 闪变总计算次数
// */
// @TableField(value = "flicket_alltime")
// private Integer flicketAlltime;
//
// /**
// * 频率偏差越限次数
// */
// private Integer freqDevOvertime;
//
// /**
// * 电压偏差越限次数
// */
// private Integer voltageDevOvertime;
//
// /**
// * 电压不平衡度越限次数
// */
// private Integer ubalanceOvertime;
//
// /**
// * 闪变越限次数
// */
// private Integer flickerOvertime;
//
// /**
// * 电压谐波畸变率越限次数
// */
// private Integer uaberranceOvertime;
// /**
// * 负序电流限值次数
// */
// private Integer iNegOvertime;
//
// /**
// * 2次电压谐波含有率越限次数
// */
// @HarVoltage
// @TableField(value = "uharm_2_overtime")
// private Integer uharm2Overtime;
//
// /**
// * 3次电压谐波含有率越限次数
// */
// @HarVoltage
// @TableField(value = "uharm_3_overtime")
// private Integer uharm3Overtime;
//
// /**
// * 4次电压谐波含有率越限次数
// */
// @HarVoltage
// @TableField(value = "uharm_4_overtime")
// private Integer uharm4Overtime;
//
// /**
// * 5次电压谐波含有率越限次数
// */
// @HarVoltage
// @TableField(value = "uharm_5_overtime")
// private Integer uharm5Overtime;
//
// /**
// * 6次电压谐波含有率越限次数
// */
// @HarVoltage
// @TableField(value = "uharm_6_overtime")
// private Integer uharm6Overtime;
//
// /**
// * 7次电压谐波含有率越限次数
// */
// @HarVoltage
// @TableField(value = "uharm_7_overtime")
// private Integer uharm7Overtime;
//
// /**
// * 8次电压谐波含有率越限次数
// */
// @HarVoltage
// @TableField(value = "uharm_8_overtime")
// private Integer uharm8Overtime;
//
// /**
// * 9次电压谐波含有率越限次数
// */
// @HarVoltage
// @TableField(value = "uharm_9_overtime")
// private Integer uharm9Overtime;
//
// /**
// * 10次电压谐波含有率越限次数
// */
// @HarVoltage
// @TableField(value = "uharm_10_overtime")
// private Integer uharm10Overtime;
//
// /**
// * 11次电压谐波含有率越限次数
// */
// @HarVoltage
// @TableField(value = "uharm_11_overtime")
// private Integer uharm11Overtime;
//
// /**
// * 12次电压谐波含有率越限次数
// */
// @HarVoltage
// @TableField(value = "uharm_12_overtime")
// private Integer uharm12Overtime;
//
// /**
// * 13次电压谐波含有率越限次数
// */
// @HarVoltage
// @TableField(value = "uharm_13_overtime")
// private Integer uharm13Overtime;
//
// /**
// * 14次电压谐波含有率越限次数
// */
// @HarVoltage
// @TableField(value = "uharm_14_overtime")
// private Integer uharm14Overtime;
//
// /**
// * 15次电压谐波含有率越限次数
// */
// @HarVoltage
// @TableField(value = "uharm_15_overtime")
// private Integer uharm15Overtime;
//
// /**
// * 16次电压谐波含有率越限次数
// */
// @HarVoltage
// @TableField(value = "uharm_16_overtime")
// private Integer uharm16Overtime;
//
// /**
// * 17次电压谐波含有率越限次数
// */
// @HarVoltage
// @TableField(value = "uharm_17_overtime")
// private Integer uharm17Overtime;
//
// /**
// * 18次电压谐波含有率越限次数
// */
// @HarVoltage
// @TableField(value = "uharm_18_overtime")
// private Integer uharm18Overtime;
//
// /**
// * 19次电压谐波含有率越限次数
// */
// @HarVoltage
// @TableField(value = "uharm_19_overtime")
// private Integer uharm19Overtime;
//
// /**
// * 20次电压谐波含有率越限次数
// */
// @HarVoltage
// @TableField(value = "uharm_20_overtime")
// private Integer uharm20Overtime;
//
// /**
// * 21次电压谐波含有率越限次数
// */
// @HarVoltage
// @TableField(value = "uharm_21_overtime")
// private Integer uharm21Overtime;
//
// /**
// * 22次电压谐波含有率越限次数
// */
// @HarVoltage
// @TableField(value = "uharm_22_overtime")
// private Integer uharm22Overtime;
//
// /**
// * 23次电压谐波含有率越限次数
// */
// @HarVoltage
// @TableField(value = "uharm_23_overtime")
// private Integer uharm23Overtime;
//
// /**
// * 24次电压谐波含有率越限次数
// */
// @HarVoltage
// @TableField(value = "uharm_24_overtime")
// private Integer uharm24Overtime;
//
// /**
// * 25次电压谐波含有率越限次数
// */
// @HarVoltage
// @TableField(value = "uharm_25_overtime")
// private Integer uharm25Overtime;
//
// /**
// * 2次电流谐波幅值越限次数
// */
// @HarCurrent
// @TableField(value = "iharm_2_overtime")
// private Integer iharm2Overtime;
//
// /**
// * 3次电流谐波幅值越限次数
// */
// @HarCurrent
// @TableField(value = "iharm_3_overtime")
// private Integer iharm3Overtime;
//
// /**
// * 4次电流谐波幅值越限次数
// */
// @HarCurrent
// @TableField(value = "iharm_4_overtime")
// private Integer iharm4Overtime;
//
// /**
// * 5次电流谐波幅值越限次数
// */
// @HarCurrent
// @TableField(value = "iharm_5_overtime")
// private Integer iharm5Overtime;
//
// /**
// * 6次电流谐波幅值越限次数
// */
// @HarCurrent
// @TableField(value = "iharm_6_overtime")
// private Integer iharm6Overtime;
//
// /**
// * 7次电流谐波幅值越限次数
// */
// @HarCurrent
// @TableField(value = "iharm_7_overtime")
// private Integer iharm7Overtime;
//
// /**
// * 8次电流谐波幅值越限次数
// */
// @HarCurrent
// @TableField(value = "iharm_8_overtime")
// private Integer iharm8Overtime;
// @HarCurrent
// @TableField(value = "iharm_9_overtime")
// private Integer iharm9Overtime;
// @HarCurrent
// @TableField(value = "iharm_10_overtime")
// private Integer iharm10Overtime;
// @HarCurrent
// @TableField(value = "iharm_11_overtime")
// private Integer iharm11Overtime;
// @HarCurrent
// @TableField(value = "iharm_12_overtime")
// private Integer iharm12Overtime;
// @HarCurrent
// @TableField(value = "iharm_13_overtime")
// private Integer iharm13Overtime;
// @HarCurrent
// @TableField(value = "iharm_14_overtime")
// private Integer iharm14Overtime;
// @HarCurrent
// @TableField(value = "iharm_15_overtime")
// private Integer iharm15Overtime;
// @HarCurrent
// @TableField(value = "iharm_16_overtime")
// private Integer iharm16Overtime;
// @HarCurrent
// @TableField(value = "iharm_17_overtime")
// private Integer iharm17Overtime;
// @HarCurrent
// @TableField(value = "iharm_18_overtime")
// private Integer iharm18Overtime;
// @HarCurrent
// @TableField(value = "iharm_19_overtime")
// private Integer iharm19Overtime;
// @HarCurrent
// @TableField(value = "iharm_20_overtime")
// private Integer iharm20Overtime;
// @HarCurrent
// @TableField(value = "iharm_21_overtime")
// private Integer iharm21Overtime;
// @HarCurrent
// @TableField(value = "iharm_22_overtime")
// private Integer iharm22Overtime;
// @HarCurrent
// @TableField(value = "iharm_23_overtime")
// private Integer iharm23Overtime;
// @HarCurrent
// @TableField(value = "iharm_24_overtime")
// private Integer iharm24Overtime;
// @HarCurrent
// @TableField(value = "iharm_25_overtime")
// private Integer iharm25Overtime;
// /**
// * 0.5次间谐波电压限值次数
// */
// @InterharVoltage
// @TableField(value = "inuharm_1_overtime")
// private Integer inuharm1Overtime;
// @InterharVoltage
// @TableField(value = "inuharm_2_overtime")
// private Integer inuharm2Overtime;
// @InterharVoltage
// @TableField(value = "inuharm_3_overtime")
// private Integer inuharm3Overtime;
// @InterharVoltage
// @TableField(value = "inuharm_4_overtime")
// private Integer inuharm4Overtime;
// @InterharVoltage
// @TableField(value = "inuharm_5_overtime")
// private Integer inuharm5Overtime;
// @InterharVoltage
// @TableField(value = "inuharm_6_overtime")
// private Integer inuharm6Overtime;
// @InterharVoltage
// @TableField(value = "inuharm_7_overtime")
// private Integer inuharm7Overtime;
// @InterharVoltage
// @TableField(value = "inuharm_8_overtime")
// private Integer inuharm8Overtime;
// @InterharVoltage
// @TableField(value = "inuharm_9_overtime")
// private Integer inuharm9Overtime;
// @InterharVoltage
// @TableField(value = "inuharm_10_overtime")
// private Integer inuharm10Overtime;
// @InterharVoltage
// @TableField(value = "inuharm_11_overtime")
// private Integer inuharm11Overtime;
// @InterharVoltage
// @TableField(value = "inuharm_12_overtime")
// private Integer inuharm12Overtime;
// @InterharVoltage
// @TableField(value = "inuharm_13_overtime")
// private Integer inuharm13Overtime;
// @InterharVoltage
// @TableField(value = "inuharm_14_overtime")
// private Integer inuharm14Overtime;
// @InterharVoltage
// @TableField(value = "inuharm_15_overtime")
// private Integer inuharm15Overtime;
// /**
// * 15.5次间谐波电压限值次数
// */
// @InterharVoltage
// @TableField(value = "inuharm_16_overtime")
// private Integer inuharm16Overtime;
//
//}