diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/dim/IRDimBusGlobalDController.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/dim/IRDimBusGlobalDController.java index 8e8aed88e..2d17fbd36 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/dim/IRDimBusGlobalDController.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/dim/IRDimBusGlobalDController.java @@ -1,11 +1,13 @@ package com.njcn.prepare.harmonic.controller.dim; import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; 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.exception.BusinessException; import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.utils.HttpResultUtil; import com.njcn.common.utils.LogUtil; @@ -32,10 +34,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.time.LocalDate; -import java.util.HashSet; -import java.util.List; -import java.util.Objects; -import java.util.Set; +import java.util.*; /** * pqs @@ -212,4 +211,58 @@ public class IRDimBusGlobalDController extends BaseController { } + + /** + * 新增重算月数据 + * @author cdf + * @date 2024/3/22 + */ + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @GetMapping("/reCalMonthUploadAlgorithm") + @ApiOperation("重新计算四个算法") + @ApiImplicitParam(name = "statisticDate", value = "重新计算的月份", required = true) + public HttpResult reCalUploadAlgorithmAllMonth(@DateTimeStrValid(format = "yyyy-MM") @RequestParam("statisticDate") String statisticDate,@RequestParam("type") String type) { + String methodDescribe = getMethodDescribe("reCalUploadAlgorithmAllMonth"); + Set set = new HashSet<>(); + + String startDate = DateUtil.format(DateUtil.beginOfDay(DateUtil.parse(statisticDate,DatePattern.NORM_MONTH_PATTERN)),DatePattern.NORM_DATE_PATTERN); + String endDate = DateUtil.format(new Date(),DatePattern.NORM_DATE_PATTERN); + + BaseParam baseParam = new BaseParam(); + baseParam.setFullChain(false); + baseParam.setRepair(true); + baseParam.setBeginTime(startDate); + baseParam.setEndTime(endDate); + + if(StrUtil.isBlank(type)){ + throw new BusinessException("请选择需要重新计算的类型"); + }else if("0".equals(type)){ + //基准 + set.add("r_upload_evaluation_data_d"); + baseParam.setTagNames(set); + liteFlowFeignClient.uploadOrgExecutor(baseParam); + }else if("1".equals(type)){ + //主配网 + set.add("r_upload_point_statistical_data_d"); + baseParam.setTagNames(set); + liteFlowFeignClient.uploadOrgExecutor(baseParam); + }else if("2".equals(type)){ + //电站 + baseParam.setFullChain(false); + baseParam.setRepair(false); + baseParam.setDataDate(endDate); + set.add("r_upload_substation_statistical_data_m"); + baseParam.setTagNames(set); + liteFlowFeignClient.substationExecutor(baseParam); + }else if("3".equals(type)){ + //典型 + set.add("pq_typical_source_create_d"); + baseParam.setDataDate(statisticDate); + baseParam.setTagNames(set); + liteFlowFeignClient.uploadOrgExecutor(baseParam); + } + + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } + } diff --git a/pqs-process/process-boot/src/main/java/com/njcn/process/service/impl/ThsSuperviseServiceImpl.java b/pqs-process/process-boot/src/main/java/com/njcn/process/service/impl/ThsSuperviseServiceImpl.java index 731a88d9a..d0e9f9968 100644 --- a/pqs-process/process-boot/src/main/java/com/njcn/process/service/impl/ThsSuperviseServiceImpl.java +++ b/pqs-process/process-boot/src/main/java/com/njcn/process/service/impl/ThsSuperviseServiceImpl.java @@ -637,42 +637,26 @@ public class ThsSuperviseServiceImpl extends ServiceImpl threeLevel = thsStrategyList.stream().filter(r -> GradeEnum.THREE_LEVEL.getCode().equals(r.getGrade())).collect(Collectors.toList());//三级策略集合 //获取排他策略集合 - assBindList(threeLevel, thsStrategyBindDTOList); + if(CollectionUtil.isNotEmpty(threeLevel)){ + threeLevel.forEach(i->assBindList(i, thsStrategyBindDTOList)); + } Map deleteMap = thsStrategyBindDTOList.stream().collect(Collectors.toMap(ThsStrategyBindDTO::getKeyId, Function.identity())); - List oneLevel = thsStrategyList.stream().filter(r -> !GradeEnum.THREE_LEVEL.getCode().equals(r.getGrade())).collect(Collectors.toList());//一级或二级策略集合 - Map> deptMap = oneLevel.stream().collect(Collectors.groupingBy(ThsStrategyVo::getDeptId)); for (Map.Entry> entry : deptMap.entrySet()) { String depId = entry.getKey(); Dept dept = deptFeignClient.getDeptById(depId).getData(); List thsOverRunLogList = new ArrayList<>(); - ThsSupervise thsSupervise = null; List deptStrategyList = entry.getValue(); if (CollectionUtil.isNotEmpty(deptStrategyList)) { - //遍历当前部门下面的所有策略 for (ThsStrategyVo oneStrategyVo : deptStrategyList) { List useBindDTOList = new ArrayList<>(); - List oneInterferenceSourceAsses = this.queryWarnStrategyAss(oneStrategyVo.getId(), TypeEnum.SOURCE_TYPE);//干扰源列表 - List oneSteadyIndicatorAsses = this.queryWarnStrategyAss(oneStrategyVo.getId(), TypeEnum.INTERFERENCE_TYPE);//指标类型列表 - List oneMonitorAsses = this.queryWarnStrategyAss(oneStrategyVo.getId(), TypeEnum.MONITOR_TYPE);//监测点列表 - - List tagIds = oneInterferenceSourceAsses.stream().map(ThsWarnStrategyAss::getAssId).distinct().collect(Collectors.toList()); - List targetIds = oneSteadyIndicatorAsses.stream().map(ThsWarnStrategyAss::getAssId).distinct().collect(Collectors.toList()); - List monitorIds = oneMonitorAsses.stream().map(ThsWarnStrategyAss::getAssId).collect(Collectors.toList()); - for (String tagId : tagIds) { - ThsStrategyBindDTO strategyBindDTO = ThsStrategyBindDTO.builder().keyId(tagId).targetIds(targetIds).operation(oneStrategyVo.getOperation()).type(0).build(); - useBindDTOList.add(strategyBindDTO); - } - for (String monitorId : monitorIds) { - ThsStrategyBindDTO strategyBindDTO = ThsStrategyBindDTO.builder().keyId(monitorId).targetIds(targetIds).operation(oneStrategyVo.getOperation()).type(1).build(); - useBindDTOList.add(strategyBindDTO); - } + assBindList(oneStrategyVo,useBindDTOList); //根据排他策略过滤12级策略 Iterator iterator = useBindDTOList.iterator(); while (iterator.hasNext()) { @@ -694,7 +678,6 @@ public class ThsSuperviseServiceImpl extends ServiceImpl useMonitorIds = monitorObj.stream().map(ThsStrategyBindDTO::getKeyId).collect(Collectors.toList()); Map monitorMap = monitorObj.stream().collect(Collectors.toMap(ThsStrategyBindDTO::getKeyId, Function.identity())); - MonitorGetParam monitorGetParam = new MonitorGetParam(); monitorGetParam.setTagList(useTagIds); monitorGetParam.setMonitorIds(useMonitorIds); @@ -704,11 +687,9 @@ public class ThsSuperviseServiceImpl extends ServiceImpl monitorInfoDTOMap = commMonitorInfoDTOList.stream().collect(Collectors.toMap(CommMonitorInfoDTO::getId, Function.identity())); List temIds = commMonitorInfoDTOList.stream().map(CommMonitorInfoDTO::getId).distinct().collect(Collectors.toList()); - List rStatLimitRateDPOList = rStatLimitRateDClient.monitorIdsGetLimitInfo(RStatLimitQueryParam.builder().ids(temIds).date(yesterday).build()).getData(); //TODO 数据中心和pms这边稳态指标没用一个需要考虑兼容问题 - //判断指标是否在策略中 if (CollectionUtil.isNotEmpty(rStatLimitRateDPOList)) { for (RStatLimitRateDPO rStatLimitRateDPO : rStatLimitRateDPOList) { @@ -728,7 +709,6 @@ public class ThsSuperviseServiceImpl extends ServiceImpl limitBoolMap = verifyLimit(rStatLimitRateDPO, dictDataList, descriptionList, count); - boolean shouldContinue; if (oneStrategyVo.getOperation().equals(OperationEnum.AND.getCode())) { //与 @@ -772,10 +752,8 @@ public class ThsSuperviseServiceImpl extends ServiceImpl levelList, List thsStrategyBindDTOList) { - if (CollectionUtil.isNotEmpty(levelList)) { - for (ThsStrategyVo thsStrategyVo : levelList) { + private void assBindList(ThsStrategyVo thsStrategyVo, List thsStrategyBindDTOList) { + List tagIdsAss = this.queryWarnStrategyAss(thsStrategyVo.getId(), TypeEnum.SOURCE_TYPE);//干扰源列表 List targetIdsAss = this.queryWarnStrategyAss(thsStrategyVo.getId(), TypeEnum.INTERFERENCE_TYPE);//指标类型列表 List monitorIdsAss = this.queryWarnStrategyAss(thsStrategyVo.getId(), TypeEnum.MONITOR_TYPE);//监测点列表 @@ -852,8 +829,6 @@ public class ThsSuperviseServiceImpl extends ServiceImpl implements ThsWarnStrategyService { private final ThsWarnStrategyAssServiceImpl thsWarnStrategyAssService; + + private final ThsWarnStrategyMapper thsWarnStrategyMapper; private final MonitorClient monitorClient; private final DeptFeignClient deptFeignClient; private final ThsDeptAlarmService thsDeptAlarmService; @@ -107,6 +110,8 @@ public class ThsWarnStrategyServiceImpl extends ServiceImpl assList = new ArrayList<>(); ThsWarnStrategy thsWarnStrategy = new ThsWarnStrategy(); @@ -141,6 +146,38 @@ public class ThsWarnStrategyServiceImpl extends ServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.select(ThsWarnStrategy::getId).eq(ThsWarnStrategy::getDeptId,param.getDeptId()) + .eq(ThsWarnStrategy::getType,param.getStrategyType()).eq(ThsWarnStrategy::getGrade,param.getGrade()); + + if (StrUtil.isNotBlank(param.getId())) { + lambdaQueryWrapper.ne(ThsWarnStrategy::getId,param.getId()); + } + + List thsWarnStrategyList = thsWarnStrategyMapper.selectList(lambdaQueryWrapper); + List strategyIds = thsWarnStrategyList.stream().map(ThsWarnStrategy::getId).collect(Collectors.toList()); + if(CollectionUtil.isEmpty(strategyIds)){ + return true; + } + + //判断标签和监测点是否已经存在 + List thsWarnStrategyAssList = thsWarnStrategyAssService.lambdaQuery().select(ThsWarnStrategyAss::getAssId).in(ThsWarnStrategyAss::getWarnId,strategyIds).list(); + long tagCount = thsWarnStrategyAssList.stream().filter(item->param.getMonitorTag().contains(item.getAssId())).count(); + if(tagCount>0){ + throw new BusinessException("所选干扰源已经存在策略!"); + } + long monitorCount = thsWarnStrategyAssList.stream().filter(item->param.getMonitorIds().contains(item.getAssId())).count(); + if(monitorCount>0){ + throw new BusinessException("所选监测点已经存在策略!"); + } + return true; + } + @Override public StrategyParam.StrategyUpdateParam getUpdateStrategy(String id) { return this.baseMapper.selectUpdateStrategy(id);