diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/ExecutionCenter.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/ExecutionCenter.java index 57163a3cf..7a9ff20d1 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/ExecutionCenter.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/ExecutionCenter.java @@ -15,10 +15,14 @@ import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.utils.HttpResultUtil; import com.njcn.device.biz.commApi.CommTerminalGeneralClient; +import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO; +import com.njcn.device.biz.pojo.param.DeptGetLineParam; import com.njcn.prepare.bo.BaseParam; import com.njcn.prepare.bo.CalculatedParam; import com.njcn.prepare.harmonic.enums.PrepareResponseEnum; import com.njcn.prepare.harmonic.pojo.param.LineParam; +import com.njcn.user.api.DeptFeignClient; +import com.njcn.user.pojo.po.Dept; import com.njcn.web.controller.BaseController; import com.yomahub.liteflow.annotation.LiteflowComponent; import com.yomahub.liteflow.core.FlowExecutor; @@ -58,6 +62,7 @@ import java.util.stream.Collectors; public class ExecutionCenter extends BaseController { private final CommTerminalGeneralClient commTerminalGeneralClient; + private final DeptFeignClient deptFeignClient; @Resource private FlowExecutor flowExecutor; @@ -145,9 +150,45 @@ public class ExecutionCenter extends BaseController { liteflowResponse = flowExecutor.execute2Resp("measurement_point", calculatedParam); dealResponse(calculatedParam,liteflowResponse,methodDescribe); } + + + } + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @ApiOperation("单位监测点算法执行链") + @PostMapping("/OrgPointExecutor") + public void OrgPointExecutor(@RequestBody BaseParam baseParam) { + String methodDescribe = getMethodDescribe("OrgPointExecutor"); + //手动判断参数是否合法, + CalculatedParam calculatedParam = judgeExecuteParam(baseParam); + // 测点索引 + DeptGetLineParam deptGetLineParam = new DeptGetLineParam(); + + if (CollectionUtils.isEmpty(calculatedParam.getIdList())) { + Dept data = deptFeignClient.getRootDept().getData(); + deptGetLineParam.setDeptId(data.getId()); + calculatedParam.setIdList(commTerminalGeneralClient.deptGetLine(deptGetLineParam).getData()); + } + LiteflowResponse liteflowResponse; + if (baseParam.isRepair()) { + //补招时,起始日期、截止日期必填 + DateTime startDate = DateUtil.parse(baseParam.getBeginTime(), DatePattern.NORM_DATE_FORMAT); + DateTime endDate = DateUtil.parse(baseParam.getEndTime(), DatePattern.NORM_DATE_FORMAT); + long betweenDay = DateUtil.betweenDay(startDate, endDate, true); + //递增日期执行算法链 + for (int i = 0; i < betweenDay; i++) { + if (i != 0) { + startDate = DateUtil.offsetDay(startDate, 1); + } + calculatedParam.setDataDate(DateUtil.format(startDate, DatePattern.NORM_DATE_PATTERN)); + liteflowResponse = flowExecutor.execute2Resp("measurement_point", calculatedParam); + dealResponse(calculatedParam, liteflowResponse, methodDescribe); + } + } else { + //非补招 + liteflowResponse = flowExecutor.execute2Resp("measurement_point", calculatedParam); + dealResponse(calculatedParam, liteflowResponse, methodDescribe); + } + } - - - } diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/bo/CalculatedParam.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/bo/CalculatedParam.java index a34fec577..6ffbbb35c 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/bo/CalculatedParam.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/bo/CalculatedParam.java @@ -14,7 +14,7 @@ import java.util.Set; * @date 2023年11月03日 09:21 */ @Data -public class CalculatedParam implements Serializable { +public class CalculatedParam implements Serializable { /*** * 是否全链路执行算法 @@ -42,8 +42,8 @@ public class CalculatedParam implements Serializable { private String dataDate; /** - * 待计算的对象索引集合,监测点、设备、母线、变电站、单位等等 + * 待计算的对象索引集合,监测点、设备、母线、变电站、单位下监测点等等 */ @ApiModelProperty(name = "idList",value = "索引集合") - private List idList; + private List idList; } diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/ROperatingMonitorMServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/ROperatingMonitorMServiceImpl.java index 9165e7d61..a23f5b1fb 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/ROperatingMonitorMServiceImpl.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/ROperatingMonitorMServiceImpl.java @@ -16,6 +16,7 @@ import com.njcn.prepare.harmonic.pojo.param.LineParam; import com.njcn.prepare.harmonic.service.mysql.line.ROperatingMonitorMService; import com.njcn.prepare.harmonic.service.mysql.line.ROperatingMonitorService; import lombok.RequiredArgsConstructor; +import org.apache.commons.collections4.ListUtils; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -26,6 +27,7 @@ import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -80,12 +82,14 @@ public class ROperatingMonitorMServiceImpl extends MppServiceImpl lineIds = calculatedParam.getIdList(); + //以尺寸1000分片 + List> pendingIds = ListUtils.partition(lineIds, 1000); List rOperatingMonitorMPOList = new ArrayList<>(); QueryWrapper queryWrapper = new QueryWrapper<>(); - calculatedParam.getIdList().forEach(temp -> { + pendingIds.forEach(temp -> { queryWrapper.clear(); - queryWrapper.eq("measurement_point_id", temp) + queryWrapper.in("measurement_point_id", temp) .between("data_date",beginMonth,endMonth); List list = rOperatingMonitorDMapper.selectList(queryWrapper); @@ -93,19 +97,23 @@ public class ROperatingMonitorMServiceImpl extends MppServiceImpl po.getDataIntegrityRate().doubleValue()).average().getAsDouble()); - BigDecimal dataRightRate = BigDecimal.valueOf(list.stream().mapToDouble(po -> po.getDataRightRate().doubleValue()).average().getAsDouble()); - BigDecimal indexIntegrityRate = BigDecimal.valueOf(list.stream().mapToDouble(po -> po.getIndexIntegrityRate().doubleValue()).average().getAsDouble()); - rOperatingMonitorMPO.setMeasurementPointId(temp); - rOperatingMonitorMPO.setDataDate(localDate); - rOperatingMonitorMPO.setDataIntegrityRate(dataIntegrityRate); - rOperatingMonitorMPO.setDataRightRate(dataRightRate); - rOperatingMonitorMPO.setIndexIntegrityRate(indexIntegrityRate); - rOperatingMonitorMPO.setDevId(list.get(0).getDevId()); - List collect = list.stream().map(ROperatingMonitorDPO::getIsUnusual).collect(Collectors.toList()); - rOperatingMonitorMPO.setIsUnusual(collect.contains(Integer.valueOf(0)) ? 0 : 1); - rOperatingMonitorMPOList.add(rOperatingMonitorMPO); + Map> collect1 = list.stream().collect(Collectors.groupingBy(ROperatingMonitorDPO::getMeasurementPointId)); + collect1.forEach((k,v)->{ + ROperatingMonitorMPO rOperatingMonitorMPO = new ROperatingMonitorMPO(); + BigDecimal dataIntegrityRate = BigDecimal.valueOf(v.stream().mapToDouble(po -> po.getDataIntegrityRate().doubleValue()).average().getAsDouble()); + BigDecimal dataRightRate = BigDecimal.valueOf(v.stream().mapToDouble(po -> po.getDataRightRate().doubleValue()).average().getAsDouble()); + BigDecimal indexIntegrityRate = BigDecimal.valueOf(v.stream().mapToDouble(po -> po.getIndexIntegrityRate().doubleValue()).average().getAsDouble()); + rOperatingMonitorMPO.setMeasurementPointId(k); + rOperatingMonitorMPO.setDataDate(localDate); + rOperatingMonitorMPO.setDataIntegrityRate(dataIntegrityRate); + rOperatingMonitorMPO.setDataRightRate(dataRightRate); + rOperatingMonitorMPO.setIndexIntegrityRate(indexIntegrityRate); + rOperatingMonitorMPO.setDevId(v.get(0).getDevId()); + List collect = v.stream().map(ROperatingMonitorDPO::getIsUnusual).collect(Collectors.toList()); + rOperatingMonitorMPO.setIsUnusual(collect.contains(Integer.valueOf(0)) ? 0 : 1); + rOperatingMonitorMPOList.add(rOperatingMonitorMPO); + }); + }); this.saveOrUpdateBatchByMultiId(rOperatingMonitorMPOList, 500); }