diff --git a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/param/device/OnlineParam.java b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/param/device/OnlineParam.java new file mode 100644 index 000000000..1d96a4ee0 --- /dev/null +++ b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/param/device/OnlineParam.java @@ -0,0 +1,54 @@ +package com.njcn.supervision.pojo.param.device; + +import com.njcn.web.pojo.param.BaseParam; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2024/6/18 15:53 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class OnlineParam extends BaseParam implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "id") + private String id; + + @ApiModelProperty(value = "部门id") + private String deptId; + + @ApiModelProperty(value = "指标") + private String targetId; + + @ApiModelProperty(value = "预警阈值") + private Integer alertThreshold; + + @ApiModelProperty(value = "告警阈值") + private Integer alarmThreshold; + + @Data + public static class ReportParam extends OnlineParam { + + @ApiModelProperty(name = "type", value = "0:预警单 1:告警单") + private Integer type; + + @ApiModelProperty(name = "issueDetail", value = "问题描述") + private String issueDetail; + } + + +} diff --git a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/po/device/LineWarning.java b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/po/device/LineWarning.java new file mode 100644 index 000000000..9fbb202cb --- /dev/null +++ b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/po/device/LineWarning.java @@ -0,0 +1,76 @@ +package com.njcn.supervision.pojo.po.device; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.db.bo.BaseEntity; +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 监测点每日稳态指标超标天数统计表 + *

+ * + * @author xy + * @since 2024-06-17 + */ +@Getter +@Setter +@TableName("supervision_line_warning") +public class LineWarning extends BaseEntity implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + private String id; + + /** + * 告警时间 + */ + private LocalDate alarmTime; + + /** + * 监测点id + */ + private String lineId; + + /** + * 指标类型(字典id) + */ + private String targetType; + + /** + * 越限天数 + */ + private Integer overLimitDay; + + /** + * 是否发送单子(0:未发 1:已发) + */ + private Integer initiateWarningFlag; + + /** + * 当前流程(0:无告警 1:预警 2:告警) + */ + private Integer step; + + /** + * 预警阈值 + */ + private Integer alertThreshold; + + /** + * 告警阈值 + */ + private Integer alarmThreshold; + + /** + * 阈值来源(0:系统生成 1:界面) + */ + private Integer thresholdResource; + +} diff --git a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/vo/device/OnlineVo.java b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/vo/device/OnlineVo.java new file mode 100644 index 000000000..8cbb389f8 --- /dev/null +++ b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/vo/device/OnlineVo.java @@ -0,0 +1,52 @@ +package com.njcn.supervision.pojo.vo.device; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2024/6/18 16:44 + */ +@Data +public class OnlineVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("id") + private String id; + + @ApiModelProperty("责任单位") + private String dept; + + @ApiModelProperty("变电站") + private String substation; + + @ApiModelProperty("装置名称") + private String deviceName; + + @ApiModelProperty("监测点id") + private String lineId; + + @ApiModelProperty("监测点名称") + private String lineName; + + @ApiModelProperty("监测对象类型") + private String businessType; + + @ApiModelProperty("监测对象名称") + private String objectName; + + @ApiModelProperty("指标id") + private String targetType; + + @ApiModelProperty("累计超标天数") + private Integer overLimitDay; + + @ApiModelProperty("数据来源 0:系统默认 1:自定义") + private Integer dataResource; +} diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/controller/device/LineWarningController.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/controller/device/LineWarningController.java new file mode 100644 index 000000000..1043b3639 --- /dev/null +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/controller/device/LineWarningController.java @@ -0,0 +1,74 @@ +package com.njcn.supervision.controller.device; + + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +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.supervision.pojo.param.device.OnlineParam; +import com.njcn.supervision.pojo.po.device.LineWarning; +import com.njcn.supervision.pojo.vo.device.OnlineVo; +import com.njcn.supervision.service.device.ILineWarningService; +import com.njcn.supervision.service.leaflet.IWarningLeafletService; +import com.njcn.web.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +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; + +/** + *

+ * 监测点每日稳态指标超标天数统计表 前端控制器 + *

+ * + * @author xy + * @since 2024-06-17 + */ +@Slf4j +@RestController +@RequestMapping("/onlineMonitor") +@Api(tags = "在线监测") +@AllArgsConstructor +public class LineWarningController extends BaseController { + + private final ILineWarningService lineWarningService; + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/add") + @ApiOperation("新增在线监测数据") + public HttpResult add() { + String methodDescribe = getMethodDescribe("add"); + lineWarningService.addLineWarning(); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/list") + @ApiOperation("分页查询在线监测数据") + @ApiImplicitParam(name = "param", value = "参数", required = true) + public HttpResult> lineWarningList(@RequestBody @Validated OnlineParam param) { + String methodDescribe = getMethodDescribe("lineWarningList"); + Page list = lineWarningService.getLineWarningList(param); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/report") + @ApiOperation("发起预告警单") + @ApiImplicitParam(name = "param", value = "参数", required = true) + public HttpResult startReport(@RequestBody @Validated OnlineParam.ReportParam param) { + String methodDescribe = getMethodDescribe("startReport"); + lineWarningService.startReport(param); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, "success", methodDescribe); + } + +} + diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/CheckDeviceMapper.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/CheckDeviceMapper.java index 4438b29a4..88da39a2c 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/CheckDeviceMapper.java +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/CheckDeviceMapper.java @@ -1,12 +1,10 @@ package com.njcn.supervision.mapper.device; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.jeffreyning.mybatisplus.base.MppBaseMapper; import com.njcn.supervision.pojo.po.device.CheckDevice; import com.njcn.supervision.pojo.vo.device.CheckDeviceVo; -import com.njcn.user.pojo.vo.UserVO; import org.apache.ibatis.annotations.Param; /** @@ -19,7 +17,7 @@ import org.apache.ibatis.annotations.Param; */ public interface CheckDeviceMapper extends MppBaseMapper { - Page page(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + Page page(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); CheckDeviceVo getInfo(@Param("id") String id); diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/LineWarningMapper.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/LineWarningMapper.java new file mode 100644 index 000000000..39e079cc9 --- /dev/null +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/LineWarningMapper.java @@ -0,0 +1,22 @@ +package com.njcn.supervision.mapper.device; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.jeffreyning.mybatisplus.base.MppBaseMapper; +import com.njcn.supervision.pojo.po.device.LineWarning; +import com.njcn.supervision.pojo.vo.device.OnlineVo; +import org.apache.ibatis.annotations.Param; + +/** + *

+ * 监测点每日稳态指标超标天数统计表 Mapper 接口 + *

+ * + * @author xy + * @since 2024-06-17 + */ +public interface LineWarningMapper extends MppBaseMapper { + + Page page(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); + +} diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/mapping/LineWarningMapper.xml b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/mapping/LineWarningMapper.xml new file mode 100644 index 000000000..12f7ddbc8 --- /dev/null +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/mapping/LineWarningMapper.xml @@ -0,0 +1,33 @@ + + + + + + + diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/ILineWarningService.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/ILineWarningService.java new file mode 100644 index 000000000..7428212d9 --- /dev/null +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/ILineWarningService.java @@ -0,0 +1,38 @@ +package com.njcn.supervision.service.device; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.supervision.pojo.param.device.OnlineParam; +import com.njcn.supervision.pojo.po.device.LineWarning; +import com.njcn.supervision.pojo.vo.device.OnlineVo; + +/** + *

+ * 监测点每日稳态指标超标天数统计表 服务类 + *

+ * + * @author xy + * @since 2024-06-17 + */ +public interface ILineWarningService extends IService { + + /** + * 每天定时计算各监测点各个指标超标情况 + */ + void addLineWarning(); + + /** + * 获取在线监测的数据列表 + * @param param + * @return + */ + Page getLineWarningList(OnlineParam param); + + /** + * 发起预告警单 + * @param param + * @return + */ + void startReport(OnlineParam.ReportParam param); + +} diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/CheckDeviceServiceImpl.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/CheckDeviceServiceImpl.java index 5319afbb9..2d243418d 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/CheckDeviceServiceImpl.java +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/CheckDeviceServiceImpl.java @@ -101,7 +101,7 @@ public class CheckDeviceServiceImpl extends MppServiceImpl par.like("B.Name", param.getSearchValue())); + .and(par -> par.like("B.Name", param.getSearchValue()).or().like("B1.Name", param.getSearchValue())); } //排序 if (ObjectUtil.isAllNotEmpty(param.getSortBy(), param.getOrderBy())) { diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/LineWarningServiceImpl.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/LineWarningServiceImpl.java new file mode 100644 index 000000000..5f8c10496 --- /dev/null +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/LineWarningServiceImpl.java @@ -0,0 +1,328 @@ +package com.njcn.supervision.service.device.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import com.alibaba.nacos.common.utils.UuidUtils; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; +import com.njcn.device.biz.commApi.CommTerminalGeneralClient; +import com.njcn.device.biz.pojo.param.DeptGetLineParam; +import com.njcn.harmonic.api.RStatLimitRateDClient; +import com.njcn.harmonic.pojo.param.RStatLimitQueryParam; +import com.njcn.harmonic.pojo.po.day.RStatLimitTargetDPO; +import com.njcn.supervision.enums.ProblemTypeEnum; +import com.njcn.supervision.mapper.device.LineWarningMapper; +import com.njcn.supervision.pojo.param.device.OnlineParam; +import com.njcn.supervision.pojo.po.device.LineWarning; +import com.njcn.supervision.pojo.vo.device.OnlineVo; +import com.njcn.supervision.service.device.ILineWarningService; +import com.njcn.supervision.service.leaflet.IWarningLeafletService; +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.web.factory.PageFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.lang.reflect.Method; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + *

+ * 监测点每日稳态指标超标天数统计表 服务实现类 + *

+ * + * @author xy + * @since 2024-06-17 + */ +@Service +@RequiredArgsConstructor +public class LineWarningServiceImpl extends MppServiceImpl implements ILineWarningService { + + private final DicDataFeignClient dicDataFeignClient; + private final RStatLimitRateDClient limitRateDClient; + private final CommTerminalGeneralClient commTerminalGeneralClient; + private final IWarningLeafletService warningLeafletService; + + @Override + @Transactional(rollbackFor = Exception.class) + public void addLineWarning() { + List addList = new ArrayList<>(); + List updateList = new ArrayList<>(); + //获取指标集合(10个指标,包含总指标) + List dataList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.STEADY_STATIS.getCode()).getData(); + Map targetMap = dataList.stream().collect(Collectors.toMap(DictData::getCode, Function.identity())); + //获取当前表的数据 + List lineWarningList = this.baseMapper.selectList(null); + Map> lineWarningMap = lineWarningList.stream().collect(Collectors.groupingBy(LineWarning::getLineId)); + //获取所有监测点id + List lineList = commTerminalGeneralClient.getRunMonitorIds().getData(); + RStatLimitQueryParam param = new RStatLimitQueryParam(); + String date = DateUtil.format(LocalDateTime.now().minusDays(1), DatePattern.NORM_DATE_PATTERN); + param.setDate(date); + param.setIds(lineList); + //获取监测点越限信息 + List limitTarget = limitRateDClient.monitorIdsGetLimitTargetInfo(param).getData(); + Map limitMap = limitTarget.stream().collect(Collectors.toMap(RStatLimitTargetDPO::getLineId, Function.identity())); + + for (RStatLimitTargetDPO item : limitTarget) { + List lineWarnings = lineWarningMap.get(item.getLineId()); + if (CollUtil.isEmpty(lineWarnings)) { + addList.addAll(getTargetInfo(item.getLineId(),targetMap,limitMap)); + } else { + //1.查询各指标越限时间不超过10天,超标则每天递增,不超标则清零 + //2.越限时间超过10天未超过15天,超标则每天递增,不超标保存当前记录,新增一条记录 + //3.越限时间超过15天,超标则每天递增,不超标保存当前记录,新增一条记录 + //4.发过告警单,则重新生成一条数据 + RStatLimitTargetDPO dpo = limitMap.get(item.getLineId()); + //频率偏差 + targetInfo(lineWarnings,targetMap,DicDataEnum.FREQUENCY_DEV.getCode(),dpo,item.getLineId(),addList,updateList); + //电压偏差 + targetInfo(lineWarnings,targetMap,DicDataEnum.VOLTAGE_DEV.getCode(),dpo,item.getLineId(),addList,updateList); + //长时闪变 + targetInfo(lineWarnings,targetMap,DicDataEnum.FLICKER.getCode(),dpo,item.getLineId(),addList,updateList); + //谐波电压 + targetInfo(lineWarnings,targetMap,DicDataEnum.HARMONIC_VOLTAGE.getCode(),dpo,item.getLineId(),addList,updateList); + //谐波电流 + targetInfo(lineWarnings,targetMap,DicDataEnum.HARMONIC_CURRENT.getCode(),dpo,item.getLineId(),addList,updateList); + //间谐波电压 + targetInfo(lineWarnings,targetMap,DicDataEnum.INTERHARMONIC_VOLTAGE.getCode(),dpo,item.getLineId(),addList,updateList); + //负序电压不平衡度 + targetInfo(lineWarnings,targetMap,DicDataEnum.phase_Voltage.getCode(),dpo,item.getLineId(),addList,updateList); + //负序电流 + targetInfo(lineWarnings,targetMap,DicDataEnum.NEG_CURRENT.getCode(),dpo,item.getLineId(),addList,updateList); + //电压总谐波畸变率 + targetInfo(lineWarnings,targetMap,DicDataEnum.THD_V.getCode(),dpo,item.getLineId(),addList,updateList); + //总稳态指标 + targetInfo(lineWarnings,targetMap,DicDataEnum.TOTAL_INDICATOR.getCode(),dpo,item.getLineId(),addList,updateList); + } + } + this.saveBatch(addList); + this.updateBatchById(updateList); + } + + @Override + public Page getLineWarningList(OnlineParam param) { + DeptGetLineParam deptGetLineParam = new DeptGetLineParam(); + deptGetLineParam.setDeptId(param.getDeptId()); + List lineList = commTerminalGeneralClient.deptGetLineList(deptGetLineParam) + .getData() + .stream() + .flatMap(item -> item.getLineIds().stream()) + .distinct() + .collect(Collectors.toList());; + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.between("A.alarm_time", param.getSearchBeginTime(),param.getSearchEndTime()); + queryWrapper.le("A.alert_threshold", param.getAlertThreshold()); + if (CollUtil.isNotEmpty(lineList)) { + queryWrapper.in("A.line_id",lineList); + } + if (!Objects.isNull(param.getTargetId())) { + queryWrapper.eq("A.target_type", param.getTargetId()); + } + return this.baseMapper.page(new Page<>(PageFactory.getPageNum(param), PageFactory.getPageSize(param)), queryWrapper); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void startReport(OnlineParam.ReportParam param) { + //下发预告警单 + warningLeafletService.createLeaflet(ProblemTypeEnum.ONLINE.getName(), IdUtil.fastSimpleUUID(), param.getId(), ProblemTypeEnum.ONLINE.getCode(),param.getType(),param.getIssueDetail()); + //更新supervision_line_warning表字段信 + LineWarning lineWarning = this.baseMapper.selectById(param.getId()); + if (lineWarning.getThresholdResource() == 0) { + lineWarning.setInitiateWarningFlag(1); + lineWarning.setAlertThreshold(10); + lineWarning.setAlarmThreshold(15); + } else { + lineWarning.setInitiateWarningFlag(1); + lineWarning.setThresholdResource(1); + lineWarning.setAlertThreshold(param.getAlertThreshold()); + lineWarning.setAlarmThreshold(param.getAlarmThreshold()); + } + this.baseMapper.updateById(lineWarning); + } + + /** + * 获取监测点各指标的超标天数 + */ + public List getTargetInfo(String lineId, Map map, Map limitMap) { + List result = new ArrayList<>(); + map.forEach((k,v)->{ + LineWarning lineWarning = new LineWarning(); + lineWarning.setAlarmTime(LocalDate.now().minusDays(1)); + lineWarning.setLineId(lineId); + lineWarning.setTargetType(v.getId()); + lineWarning.setOverLimitDay(overDay(k,limitMap.get(lineId))); + lineWarning.setInitiateWarningFlag(0); + lineWarning.setStep(0); + result.add(lineWarning); + }); + return result; + } + + public int overDay(String code, RStatLimitTargetDPO limitTarget) { + int result = 0; + try { + //频率偏差 + if (Objects.equals(code,DicDataEnum.FREQUENCY_DEV.getCode())) { + result = limitTarget.getFreqDevOvertime(); + } + //电压偏差 + else if (Objects.equals(code,DicDataEnum.VOLTAGE_DEV.getCode())) { + result = limitTarget.getVoltageDevOvertime(); + } + //长时闪变 + else if (Objects.equals(code,DicDataEnum.FLICKER.getCode())) { + result = limitTarget.getFlickerOvertime(); + } + //谐波电压 + else if (Objects.equals(code,DicDataEnum.HARMONIC_VOLTAGE.getCode())) { + int sum = 0; + Class clazz = limitTarget.getClass(); + for (int i = 2; i <= 25; i++) { + String methodName = "getUharm" + i + "Overtime"; + Method method = clazz.getMethod(methodName); + int value = (int) method.invoke(limitTarget); + sum += value; + } + result = limitTarget.getUaberranceOvertime() + sum; + } + //谐波电流 + else if (Objects.equals(code,DicDataEnum.HARMONIC_CURRENT.getCode())) { + int sum = 0; + Class clazz = limitTarget.getClass(); + for (int i = 2; i <= 25; i++) { + String methodName = "getIharm" + i + "Overtime"; + Method method = clazz.getMethod(methodName); + int value = (int) method.invoke(limitTarget); + sum += value; + } + result = sum; + } + //间谐波电压 + else if (Objects.equals(code,DicDataEnum.INTERHARMONIC_VOLTAGE.getCode())) { + int sum = 0; + Class clazz = limitTarget.getClass(); + for (int i = 1; i <= 16; i++) { + String methodName = "getInuharm" + i + "Overtime"; + Method method = clazz.getMethod(methodName); + int value = (int) method.invoke(limitTarget); + sum += value; + } + result = sum; + } + //负序电压不平衡度 + else if (Objects.equals(code,DicDataEnum.PHASE_VOLTAGE.getCode())) { + result = limitTarget.getUbalanceOvertime(); + } + //负序电流 + else if (Objects.equals(code,DicDataEnum.NEG_CURRENT.getCode())) { + result = limitTarget.getINegOvertime(); + } + //电压总谐波畸变率 + else if (Objects.equals(code,DicDataEnum.THD_V.getCode())) { + result = limitTarget.getUaberranceOvertime(); + } + //总稳态指标 + else if (Objects.equals(code,DicDataEnum.TOTAL_INDICATOR.getCode())) { + int sum1 = 0,sum2 = 0,sum3 = 0; + Class clazz = limitTarget.getClass(); + for (int i = 2; i <= 25; i++) { + String methodName1 = "getUharm" + i + "Overtime"; + Method method1 = clazz.getMethod(methodName1); + int value1 = (int) method1.invoke(limitTarget); + sum1 += value1; + + String methodName2 = "getIharm" + i + "Overtime"; + Method method2 = clazz.getMethod(methodName2); + int value2 = (int) method2.invoke(limitTarget); + sum2 += value2; + } + for (int i = 1; i <= 16; i++) { + String methodName = "getInuharm" + i + "Overtime"; + Method method = clazz.getMethod(methodName); + int value = (int) method.invoke(limitTarget); + sum3 += value; + } + result = limitTarget.getFreqDevOvertime() + + limitTarget.getVoltageDevOvertime() + + limitTarget.getFlickerOvertime() + + sum1 + + sum2 + + sum3 + + limitTarget.getUbalanceOvertime() + + limitTarget.getINegOvertime() + + limitTarget.getUaberranceOvertime(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return result > 0 ? 1:0; + } + + /** + * 各指标计算 系统默认阈值:预警单10天 告警单15天 + */ + public void targetInfo(List lineWarnings, Map targetMap, String target, RStatLimitTargetDPO dpo, String item, List addList, List updateList) { + List l1 = lineWarnings.stream().filter(o->Objects.equals(o.getTargetType(),targetMap.get(target).getId())).collect(Collectors.toList()); + //获取最新的一条记录 + LineWarning line = l1.stream().max(Comparator.comparing(LineWarning::getAlarmTime)).orElse(null); + //当前监测点连续越限天数 + int day = line.getOverLimitDay(); + //当天是否越限 0:未越限 1:越限 + int result = overDay(target,dpo); + if (result == 0) { + if (day < 10) { + line.setOverLimitDay(0); + updateList.add(line); + } else { + LineWarning lineWarning = new LineWarning(); + lineWarning.setAlarmTime(LocalDate.now().minusDays(1)); + lineWarning.setLineId(item); + lineWarning.setTargetType(targetMap.get(target).getId()); + lineWarning.setOverLimitDay(0); + lineWarning.setInitiateWarningFlag(0); + lineWarning.setStep(0); + addList.add(lineWarning); + } + } else { + if (day < 9) { + line.setOverLimitDay(day + 1); + } else if (day < 14) { + line.setOverLimitDay(day + 1); + line.setStep(1); + line.setAlertThreshold(10); + line.setAlarmThreshold(15); + line.setThresholdResource(0); + } else { + //已发告警单,重新生成记录 + if (line.getInitiateWarningFlag() == 1 && line.getStep() == 2) { + LineWarning lineWarning = new LineWarning(); + lineWarning.setAlarmTime(LocalDate.now().minusDays(1)); + lineWarning.setLineId(item); + lineWarning.setTargetType(targetMap.get(target).getId()); + lineWarning.setOverLimitDay(result); + lineWarning.setInitiateWarningFlag(0); + lineWarning.setStep(0); + addList.add(lineWarning); + } + //未发告警单,继续添加越限天数 + else { + line.setOverLimitDay(day + 1); + line.setStep(2); + } + } + updateList.add(line); + } + } +}