This commit is contained in:
guosongrui
2024-05-22 16:08:44 +08:00
12 changed files with 231 additions and 18 deletions

View File

@@ -0,0 +1,27 @@
package com.njcn.bpm.listener.business;
import com.njcn.bpm.listener.BpmProcessInstanceStatusEvent;
import com.njcn.bpm.listener.BpmProcessInstanceStatusEventListener;
import com.njcn.supervision.api.SupervisionPlanFeignClient;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
public class BpmSupervisionPlanStatusListener extends BpmProcessInstanceStatusEventListener {
@Resource
private SupervisionPlanFeignClient supervisionPlanFeignClient;
@Override
protected String getProcessDefinitionKey() {
return "sup_plan_add";
}
@Override
protected void onEvent(BpmProcessInstanceStatusEvent event) {
supervisionPlanFeignClient.updateStatus(event.getBusinessKey(), event.getStatus());
}
}

View File

@@ -27,6 +27,9 @@ public class RMpPartHarmonicDetailDTO {
//告警指标
private String harmonicType;
private List<String> harmonicTypes;
//母线id
private String barId;
@@ -45,8 +48,16 @@ public class RMpPartHarmonicDetailDTO {
@ApiModelProperty(name = "voltageLevel",value = "电压等级")
private String voltageLevel;
//超标天数
//超标天数占比
private Double overLimitrate;
//超标天数
private Integer overLimitDay;
//连续超标天数
private Integer overLimitContinuous;
//预警标志
private Integer warningFlag;
//告警标志
private Integer alarmFlag;
/*当月超标日期

View File

@@ -18,13 +18,13 @@ import com.njcn.system.enums.DicDataEnum;
import com.njcn.system.enums.DicDataTypeEnum;
import com.njcn.system.pojo.po.DictData;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.time.YearMonth;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -87,9 +87,41 @@ public class RMpPartHarmonicDetailDServiceImpl extends ServiceImpl<RMpPartHarmon
List<RMpPartHarmonicDetailDTO> result = rMpPartHarmonicDetailDTOS.stream().
filter(temp -> CollectionUtil.isEmpty(param.getHarmonicTypes()) ||param.getHarmonicTypes().contains(temp.getHarmonicType())).
filter(temp -> temp.getOverLimitrate() > param.getRate()).collect(Collectors.toList());
collect(Collectors.toList());
return result;
//合并指标天数计算连续超标天数,及总超标天数
Map<String, List<RMpPartHarmonicDetailDTO>> map = result.stream().collect(Collectors.groupingBy(RMpPartHarmonicDetailDTO::getMeasurementPointId));
List<RMpPartHarmonicDetailDTO> rMpPartHarmonicDetailDTOList = new ArrayList<>();
//获取所有指标类型如何前端为空则将所有子表类型塞入HarmonicTypes
List<String> collect = steadyStatis.stream().map(DictData::getId).collect(Collectors.toList());
map.forEach((k,v)->{
RMpPartHarmonicDetailDTO rMpPartHarmonicDetailDTO = new RMpPartHarmonicDetailDTO();
RMpPartHarmonicDetailDTO rMpPartHarmonicDetailDTO1 = v.get(0);
BeanUtils.copyProperties(rMpPartHarmonicDetailDTO1,rMpPartHarmonicDetailDTO);
rMpPartHarmonicDetailDTO.setHarmonicTypes( CollectionUtil.isEmpty(param.getHarmonicTypes())?collect:param.getHarmonicTypes());
List<List<LocalDate>> collect1 = v.stream().map(RMpPartHarmonicDetailDTO::getDateList).collect(Collectors.toList());
List<LocalDate> union = collect1.stream()
.flatMap(List::stream)
.distinct()
.collect(Collectors.toList());
rMpPartHarmonicDetailDTO.setDateList(union);
rMpPartHarmonicDetailDTO.setOverLimitDay(union.size());
rMpPartHarmonicDetailDTO.setOverLimitrate(Double.parseDouble(union.size()+"")/daysInMonth);
int i = maxConsecutiveDays(union);
rMpPartHarmonicDetailDTO.setOverLimitContinuous(i);
//监测点连续越限10天的为
//预警测点连续越限15天的为告警监测点
if(i<10){
return;
}else if(i>=10&&i<15) {
rMpPartHarmonicDetailDTO.setWarningFlag(1);
}else{
rMpPartHarmonicDetailDTO.setAlarmFlag(1);
}
rMpPartHarmonicDetailDTOList.add(rMpPartHarmonicDetailDTO);
});
return rMpPartHarmonicDetailDTOList;
}
@@ -200,4 +232,65 @@ public class RMpPartHarmonicDetailDServiceImpl extends ServiceImpl<RMpPartHarmon
}
return localDetails.stream().distinct().collect(Collectors.toList());
}
/**
* @Description: maxConsecutiveDays 一组List<LocalDate> 为超标天数,判断连续超标天数
* @Param:
* @return: int
* @Author: clam
* @Date: 2024/5/21
*/
public static int maxConsecutiveDays(List<LocalDate> signInDays) {
Collections.sort(signInDays);
int maxConsecutiveDays = 0;
int currentConsecutiveDays = 1;
for (int i = 1; i < signInDays.size(); i++) {
long daysBetween = ChronoUnit.DAYS.between(signInDays.get(i - 1), signInDays.get(i));
if (daysBetween == 1) {
currentConsecutiveDays++;
} else {
currentConsecutiveDays = 1;
}
maxConsecutiveDays = Math.max(maxConsecutiveDays, currentConsecutiveDays);
}
return maxConsecutiveDays;
}
public static void main(String[] args) {
List<LocalDate> signInDays = new ArrayList<>();
signInDays.add(LocalDate.of(2022, 1, 1));
signInDays.add(LocalDate.of(2022, 1, 2));
signInDays.add(LocalDate.of(2022, 1, 3));
signInDays.add(LocalDate.of(2022, 1, 5));
signInDays.add(LocalDate.of(2022, 1, 6));
signInDays.add(LocalDate.of(2022, 1, 7));
signInDays.add(LocalDate.of(2022, 1, 8));
signInDays.add(LocalDate.of(2022, 1, 9));
// signInDays.add(LocalDate.of(2022, 1, 10));
// signInDays.add(LocalDate.of(2022, 1, 11));
// signInDays.add(LocalDate.of(2022, 1, 12));
// signInDays.add(LocalDate.of(2022, 1, 14));
// signInDays.add(LocalDate.of(2022, 1, 15));
// signInDays.add(LocalDate.of(2022, 1, 16));
// signInDays.add(LocalDate.of(2022, 1, 18));
// signInDays.add(LocalDate.of(2022, 1, 19));
// signInDays.add(LocalDate.of(2022, 1, 20));
// signInDays.add(LocalDate.of(2022, 1, 21));
// signInDays.add(LocalDate.of(2022, 1, 22));
// signInDays.add(LocalDate.of(2022, 1, 23));
// signInDays.add(LocalDate.of(2022, 1, 24));
// signInDays.add(LocalDate.of(2022, 1, 25));
// signInDays.add(LocalDate.of(2022, 1, 26));
// signInDays.add(LocalDate.of(2022, 1, 27));
// signInDays.add(LocalDate.of(2022, 1, 28));
// signInDays.add(LocalDate.of(2022, 1, 29));
// signInDays.add(LocalDate.of(2022, 1, 30));
// signInDays.add(LocalDate.of(2022, 1, 31));
int maxConsecutiveDays = maxConsecutiveDays(signInDays);
System.out.println(maxConsecutiveDays);
}
}

View File

@@ -72,7 +72,7 @@ public class SupervisionProblemPO extends BaseEntity {
* 是否发布预告警
*/
@TableField(value = "if_Release_Warning")
private Boolean ifReleaseWarning;
private String ifReleaseWarning;
@TableField(value = "problem_Desc")
private String problemDesc;
@@ -138,7 +138,7 @@ public class SupervisionProblemPO extends BaseEntity {
* 是否上送国网 0.未上送 1.上送
*/
@TableField(value = "is_Upload_Head")
private Boolean isUploadHead;
private String isUploadHead;
/**
* 问题发现时间

View File

@@ -66,8 +66,7 @@ public class SupervisionPlanVO {
* 计划监督时间
*/
@ApiModelProperty(value = "计划监督时间",required = true)
@JsonFormat(pattern = "yyyy-MM")
private String planSupvDate;
private LocalDateTime planSupvDate;
/**
* 监督对象名称
@@ -180,4 +179,17 @@ public class SupervisionPlanVO {
@ApiModelProperty(value = "计划状态")
private String planStatus;
/**
* 1:审批中2审批通过3审批不通过4已取消
*/
@ApiModelProperty(value = "审批状态")
private Integer status;
/**
* 流程实例的编号
*/
@ApiModelProperty(value = "流程实例的编号")
private String processInstanceId;
}

View File

@@ -52,6 +52,12 @@
<artifactId>common-web</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.njcn</groupId>
<artifactId>harmonic-api</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>

View File

@@ -7,9 +7,11 @@ 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.vo.leaflet.WarningLeafletVO;
import com.njcn.harmonic.pojo.dto.RMpPartHarmonicDetailDTO;
import com.njcn.supervision.pojo.param.leaflet.WarningLeafletParam;
import com.njcn.supervision.pojo.vo.leaflet.WarningLeafletVO;
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;
@@ -19,9 +21,7 @@ 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;
import com.njcn.web.controller.BaseController;
/**
* <p>
@@ -61,5 +61,15 @@ public class WarningLeafletController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, out, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/addLineOverLimitData")
@ApiOperation("监测点超标预警单/告警单新增")
@ApiImplicitParam(name = "rMpPartHarmonicDetailDTO", value = "参数", required = true)
public HttpResult<String> addLineOverLimitData(@RequestBody @Validated RMpPartHarmonicDetailDTO rMpPartHarmonicDetailDTO) {
String methodDescribe = getMethodDescribe("addLineOverLimitData");
String out = warningLeafletService.addLineOverLimitData(rMpPartHarmonicDetailDTO);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, out, methodDescribe);
}
}

View File

@@ -20,6 +20,7 @@ import com.njcn.supervision.pojo.param.device.SupervisionTempLineReportParam;
import com.njcn.supervision.pojo.po.device.SupervisionTempLineReport;
import com.njcn.supervision.pojo.vo.device.SupervisionTempLineReportVO;
import com.njcn.supervision.service.device.SupervisionTempLineReportService;
import com.njcn.system.api.DictTreeFeignClient;
import com.njcn.user.api.DeptFeignClient;
import com.njcn.user.api.UserFeignClient;
import com.njcn.user.pojo.vo.UserVO;
@@ -56,7 +57,7 @@ public class SupervisionTempLineReportServiceImpl extends ServiceImpl<Supervisio
private final BpmProcessFeignClient bpmProcessFeignClient;
private final DeptFeignClient deptFeignClient;
private final UserFeignClient userFeignClient;
private final DictTreeFeignClient dictTreeFeignClient;
@Override
@Transactional(rollbackFor = Exception.class)
public String addTempLineReport(SupervisionTempLineReportParam supervisionTempLineReportParam) {
@@ -146,7 +147,8 @@ public class SupervisionTempLineReportServiceImpl extends ServiceImpl<Supervisio
UserVO userVO = userFeignClient.getUserById(vo.getReporter()).getData();
vo.setReporter(userVO.getName());
vo.setOrgName(deptFeignClient.getDeptById(vo.getOrgId()).getData().getName());
vo.setLoadType(dictTreeFeignClient.queryById(vo.getLoadType()).getData().getName());
vo.setBusinessType(dictTreeFeignClient.queryById(vo.getBusinessType()).getData().getName());
return vo;
}

View File

@@ -2,6 +2,7 @@ package com.njcn.supervision.service.leaflet;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.harmonic.pojo.dto.RMpPartHarmonicDetailDTO;
import com.njcn.supervision.pojo.param.leaflet.WarningLeafletParam;
import com.njcn.supervision.pojo.po.leaflet.WarningLeaflet;
import com.njcn.supervision.pojo.vo.leaflet.WarningLeafletVO;
@@ -30,4 +31,6 @@ public interface IWarningLeafletService extends IService<WarningLeaflet> {
Page<WarningLeafletVO> alarmPageData(WarningLeafletParam.WarningLeafletQueryParam warningLeafletQueryParam);
Page<WarningLeafletVO> warningPageData(WarningLeafletParam.WarningLeafletQueryParam warningLeafletQueryParam);
String addLineOverLimitData(RMpPartHarmonicDetailDTO rMpPartHarmonicDetailDTO);
}

View File

@@ -1,25 +1,35 @@
package com.njcn.supervision.service.leaflet.impl;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.common.pojo.enums.common.DataStateEnum;
import com.njcn.harmonic.pojo.dto.RMpPartHarmonicDetailDTO;
import com.njcn.supervision.enums.FlowStatusEnum;
import com.njcn.supervision.enums.LeafletTypeEnum;
import com.njcn.supervision.enums.ProblemTypeEnum;
import com.njcn.supervision.mapper.leaflet.WarningLeafletMapper;
import com.njcn.supervision.pojo.param.leaflet.WarningLeafletParam;
import com.njcn.supervision.pojo.po.leaflet.WarningLeaflet;
import com.njcn.supervision.pojo.vo.leaflet.WarningLeafletVO;
import com.njcn.supervision.service.leaflet.IWarningLeafletService;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.enums.DicDataTypeEnum;
import com.njcn.system.pojo.po.DictData;
import com.njcn.user.api.UserFeignClient;
import com.njcn.web.factory.PageFactory;
import com.njcn.web.utils.RequestUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* <p>
@@ -34,6 +44,7 @@ import java.util.Objects;
public class WarningLeafletServiceImpl extends ServiceImpl<WarningLeafletMapper, WarningLeaflet> implements IWarningLeafletService {
private final UserFeignClient userFeignClient;
private final DicDataFeignClient dicDataFeignClient;
/**
* 不创建工作流,只是创建一个告警单,需要待用户反馈后才会进入流程
@@ -88,4 +99,39 @@ public class WarningLeafletServiceImpl extends ServiceImpl<WarningLeafletMapper,
return this.baseMapper.alarmPageData(new Page<>(PageFactory.getPageNum(warningLeafletQueryParam), PageFactory.getPageSize(warningLeafletQueryParam)), warningLeafletVOQueryWrapper);
}
@Override
public String addLineOverLimitData(RMpPartHarmonicDetailDTO rMpPartHarmonicDetailDTO) {
//组装预警告警信息
String info = assembleOverLimitInfo(rMpPartHarmonicDetailDTO);
// checkInfo(info);
this.createLeaflet(
rMpPartHarmonicDetailDTO.getMeasurementPointName(),
IdWorker.get32UUID(),
rMpPartHarmonicDetailDTO.getMeasurementPointId(),
ProblemTypeEnum.ONLINE.getCode(),
Objects.equals(rMpPartHarmonicDetailDTO.getAlarmFlag(),1) ? LeafletTypeEnum.ALARM.getCode(): LeafletTypeEnum.WARNING.getCode(),
assembleOverLimitInfo(rMpPartHarmonicDetailDTO)
);
return null;
}
private String assembleOverLimitInfo(RMpPartHarmonicDetailDTO rMpPartHarmonicDetailDTO) {
String info ="";
String leafletType = Objects.equals(rMpPartHarmonicDetailDTO.getAlarmFlag(),1) ? "告警单" : "预警单";
/*获取稳态统计指标*/
List<DictData> steadyStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.INDICATOR_TYPE.getCode()).getData();
List<String> harmonicTypes = steadyStatis.stream().filter(temp -> rMpPartHarmonicDetailDTO.getHarmonicTypes().contains(temp.getId())).map(DictData::getName).collect(Collectors.toList());
info= "预警/告警单类型:"+ "监测点超标"+leafletType+" "+
"预警/告警单生成时间:"+ LocalDateTimeUtil.format(LocalDate.now(), DatePattern.CHINESE_DATE_PATTERN)+"\n"+
"超标电站名称:" +rMpPartHarmonicDetailDTO.getSustationName()+" "+"超标母线名称:" +rMpPartHarmonicDetailDTO.getBarName()+" "+"超标监测点名称:" +rMpPartHarmonicDetailDTO.getMeasurementPointName()+"\n"+
"统计超标指标:" +String.join(",",harmonicTypes)+"\n"+
"当月累计超标天数:" +rMpPartHarmonicDetailDTO.getOverLimitDay()+""+" "+ "当月累计连续天数:" +rMpPartHarmonicDetailDTO.getOverLimitContinuous()+""+"\n"+
"超标天数详情:"+rMpPartHarmonicDetailDTO.getDateList();
log.warn(info);
return info;
}
}

View File

@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.bpm.api.BpmProcessFeignClient;
import com.njcn.bpm.enums.BpmTaskStatusEnum;
import com.njcn.bpm.pojo.dto.BpmProcessInstanceCreateReqDTO;
import com.njcn.common.pojo.enums.common.DataStateEnum;
import com.njcn.common.pojo.exception.BusinessException;
@@ -101,6 +102,7 @@ public class SupervisionPlanPOServiceImpl extends ServiceImpl<SupervisionPlanPOM
}
}
supvPlan.setState(DataStateEnum.ENABLE.getCode());
supvPlan.setStatus(BpmTaskStatusEnum.RUNNING.getStatus());
this.save(supvPlan);
return supvPlan.getPlanId();
}

View File

@@ -1,15 +1,16 @@
package com.njcn.supervision.service.plan.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.utils.PubUtils;
import com.njcn.supervision.mapper.plan.SupervisionPlanPOMapper;
import com.njcn.supervision.mapper.plan.SupervisionProblemPOMapper;
import com.njcn.supervision.pojo.param.plan.SupervisopnProblemParam;
@@ -53,9 +54,9 @@ public class SupervisionProblemPOServiceImpl extends ServiceImpl<SupervisionProb
checkParam(supvProblemParam.getPlanId(),supvProblemParam.getDiscoveryTime());
SupervisionProblemPO supvProblem = new SupervisionProblemPO();
BeanUtil.copyProperties(supvProblemParam, supvProblem);
supvProblem.setPlanRectificationTime(PubUtils.beginTimeToLocalDateTime(supvProblemParam.getPlanRectificationTime()));
supvProblem.setPlanRectificationTime(LocalDateTimeUtil.parse(supvProblemParam.getPlanRectificationTime(), DatePattern.NORM_DATETIME_PATTERN));
if(StrUtil.isNotBlank(supvProblemParam.getRectificationTime())) {
supvProblem.setRectificationTime(PubUtils.beginTimeToLocalDateTime(supvProblemParam.getRectificationTime()));
supvProblem.setRectificationTime(LocalDateTimeUtil.parse(supvProblemParam.getRectificationTime(), DatePattern.NORM_DATETIME_PATTERN));
}
this.save(supvProblem);
}