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);
+ }
+ }
+}