1.地市数据完整性

2.监测点稳态指标合格率
This commit is contained in:
wr
2025-03-13 20:07:40 +08:00
parent d94b4e6ac7
commit 127ad2e563
41 changed files with 832 additions and 115 deletions

View File

@@ -231,45 +231,45 @@ public class ExecutionCenter extends BaseController {
dealResponse(calculatedParam, liteflowResponse, methodDescribe);
}
}
//
// @OperateInfo(info = LogEnum.BUSINESS_COMMON)
// @ApiOperation("单位监测点算法执行链")
// @PostMapping("/orgPointExecutor")
// @Async("asyncExecutor")
// public void orgPointExecutor(@RequestBody BaseParam baseParam) {
// String methodDescribe = getMethodDescribe("OrgPointExecutor");
// //手动判断参数是否合法,
// CalculatedParam<DeptGetChildrenMoreDTO> 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("org_point", calculatedParam);
// dealResponse(calculatedParam, liteflowResponse, methodDescribe);
// }
// } else {
// //非补招
// liteflowResponse = flowExecutor.execute2Resp("org_point", calculatedParam);
// dealResponse(calculatedParam, liteflowResponse, methodDescribe);
// }
//
// }
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@ApiOperation("单位监测点算法执行链")
@PostMapping("/orgPointExecutor")
@Async("asyncExecutor")
public void orgPointExecutor(@RequestBody BaseParam baseParam) {
String methodDescribe = getMethodDescribe("OrgPointExecutor");
//手动判断参数是否合法,
CalculatedParam<DeptGetChildrenMoreDTO> 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("org_point", calculatedParam);
dealResponse(calculatedParam, liteflowResponse, methodDescribe);
}
} else {
//非补招
liteflowResponse = flowExecutor.execute2Resp("org_point", calculatedParam);
dealResponse(calculatedParam, liteflowResponse, methodDescribe);
}
}
//
// @OperateInfo(info = LogEnum.BUSINESS_COMMON)
// @ApiOperation("pms国网上送单位层级算法执行链")

View File

@@ -39,5 +39,13 @@ public class DeviceExecutor extends BaseExecutor {
onlineRateService.dataOnlineRate(bindCmp.getRequestData());
}
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "deviceOnlineRateMonth", nodeType = NodeTypeEnum.COMMON)
public boolean dataOnlineRateMonthAccess(NodeComponent bindCmp) {
return isAccess(bindCmp);
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "deviceOnlineRateMonth", nodeType = NodeTypeEnum.COMMON)
public void deviceOnlineRateMonthProcess(NodeComponent bindCmp) {
onlineRateService.dataOnlineRateMonth(bindCmp.getRequestData());
}
}

View File

@@ -2,6 +2,7 @@ package com.njcn.algorithm.executor;
import com.njcn.algorithm.service.line.IDataCleanService;
import com.njcn.algorithm.service.line.IDataCrossingService;
import com.njcn.algorithm.service.line.IDataIntegrityService;
import com.njcn.algorithm.service.line.IDayDataService;
import com.yomahub.liteflow.annotation.LiteflowComponent;
import com.yomahub.liteflow.annotation.LiteflowMethod;
@@ -28,9 +29,12 @@ public class MeasurementExecutor extends BaseExecutor {
private IDayDataService dayDataService;
@Resource
private IDataCleanService dataCleanService;
@Resource
private IDataCrossingService dataCrossingService;
@Resource
private IDataIntegrityService dataIntegrityService;
/**
* 数据清洗 电压表
* dataV表
@@ -307,4 +311,16 @@ public class MeasurementExecutor extends BaseExecutor {
public void dataLimitTargetProcess(NodeComponent bindCmp) {
dataCrossingService.limitTargetHandler(bindCmp.getRequestData());
}
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "dataIntegrity", nodeType = NodeTypeEnum.COMMON)
public boolean dataIntegrityAccess(NodeComponent bindCmp) {
return isAccess(bindCmp);
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "dataIntegrity", nodeType = NodeTypeEnum.COMMON)
public void dataIntegrityProcess(NodeComponent bindCmp) {
dataIntegrityService.dataIntegrity(bindCmp.getRequestData());
}
}

View File

@@ -0,0 +1,39 @@
package com.njcn.algorithm.executor;
import com.njcn.algorithm.service.line.IDataIntegrityService;
import com.njcn.algorithm.service.line.IDataOrgPointService;
import com.yomahub.liteflow.annotation.LiteflowComponent;
import com.yomahub.liteflow.annotation.LiteflowMethod;
import com.yomahub.liteflow.core.NodeComponent;
import com.yomahub.liteflow.enums.LiteFlowMethodEnum;
import com.yomahub.liteflow.enums.NodeTypeEnum;
import lombok.RequiredArgsConstructor;
import javax.annotation.Resource;
/**
* Description:
* Date: 2023/11/10 10:39【需求编号】
*
* @author clam
* @version V1.0.0
*/
@LiteflowComponent
@RequiredArgsConstructor
public class OrgPointExecutor extends BaseExecutor{
@Resource
private IDataOrgPointService dataOrgPointService;
@LiteflowMethod(value = LiteFlowMethodEnum.IS_ACCESS, nodeId = "dataOrgIntegrity", nodeType = NodeTypeEnum.COMMON)
public boolean dataOrgIntegrityAccess(NodeComponent bindCmp) {
return isAccess(bindCmp);
}
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS, nodeId = "dataOrgIntegrity", nodeType = NodeTypeEnum.COMMON)
public void dataOrgIntegrityProcess(NodeComponent bindCmp) {
dataOrgPointService.dataOrgIntegrity(bindCmp.getRequestData());
}
}

View File

@@ -34,4 +34,13 @@ public interface IDataCrossingService {
* @Date: 2025/3/12 16:03
*/
List<QualifiedDetail> limitQualifiedDayHandler(CalculatedParam calculatedParam);
/**
* 监测点稳态指标合格率(月)
* @param calculatedParam
* @Author: wr
* @Date: 2025/3/12 16:03
*/
List<QualifiedDetail> limitQualifiedMonthHandler(CalculatedParam calculatedParam);
}

View File

@@ -2,6 +2,9 @@ package com.njcn.algorithm.service.line;
import com.njcn.algorithm.pojo.bo.CalculatedParam;
import com.njcn.dataProcess.pojo.dto.DataIntegrityDto;
import java.util.List;
/**
* @author xiaoyao
@@ -17,4 +20,13 @@ public interface IDataIntegrityService {
* @param calculatedParam 查询条件
*/
void dataIntegrity(CalculatedParam<String> calculatedParam);
/***
* 监测点数据完整性_月表
* @author xuyang
* @date 2023/11/09 10:08
* @param calculatedParam 查询条件
*/
List<DataIntegrityDto> dataIntegrityMonth(CalculatedParam<String> calculatedParam);
}

View File

@@ -0,0 +1,32 @@
package com.njcn.algorithm.service.line;
import com.njcn.algorithm.pojo.bo.CalculatedParam;
import com.njcn.dataProcess.pojo.dto.DataOrgIntegrityDto;
import java.util.List;
/**
* @author xiaoyao
* @version 1.0.0
* @createTime 2022/10/24 20:06
*/
public interface IDataOrgPointService {
/***
* 地区数据完整性_日表
* @author xuyang
* @date 2023/11/09 10:08
* @param calculatedParam 查询条件
*/
void dataOrgIntegrity(CalculatedParam calculatedParam);
/***
* 地区点数据完整性_月表
* @author xuyang
* @date 2023/11/09 10:08
* @param calculatedParam 查询条件
*/
List<DataOrgIntegrityDto> dataOrgIntegrityMonth(CalculatedParam calculatedParam);
}

View File

@@ -24,6 +24,7 @@ import com.njcn.influx.pojo.constant.InfluxDBTableConstant;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.ListUtils;
import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@@ -260,13 +261,26 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
@Override
public List<QualifiedDetail> limitQualifiedDayHandler(CalculatedParam calculatedParam) {
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfDay(calculatedParam.getDataDate()));
List<String> lineIdList = calculatedParam.getIdList();
return getQualifiedDetails(calculatedParam, lineParam, lineIdList);
}
@Override
public List<QualifiedDetail> limitQualifiedMonthHandler(CalculatedParam calculatedParam) {
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfMonth(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfMonth(calculatedParam.getDataDate()));
List<String> devIdList = calculatedParam.getIdList();
List<String> lineIdList = calculatedParam.getIdList();
return getQualifiedDetails(calculatedParam, lineParam, lineIdList);
}
private List<QualifiedDetail> getQualifiedDetails(CalculatedParam calculatedParam, LineCountEvaluateParam lineParam, List<String> lineIdList) {
List<QualifiedDetail> info = new ArrayList<>();
List<List<String>> pendingIds = ListUtils.partition(devIdList, NUM);
List<List<String>> pendingIds = ListUtils.partition(lineIdList, NUM);
for (List<String> pendingId : pendingIds) {
lineParam.setLineId(pendingId);
List<DataLimitRateDto> data = dataLimitRateFeignClient.getRawData(lineParam).getData();
@@ -277,43 +291,52 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
qualified.setTime(calculatedParam.getDataDate());
int all = value.stream().mapToInt(DataLimitRateDto::getAllTime).sum();
if (all > 0) {
qualified.setFreqDevOvertime(PubUtils.doubleRound(2, 100.0 - (value.stream().mapToInt(DataLimitRateDto::getFreqDevOvertime).sum() * 100.0 / all)));
qualified.setVoltageDevOvertime(PubUtils.doubleRound(2, 100.0 - (value.stream().mapToInt(DataLimitRateDto::getVoltageDevOvertime).sum() * 100.0 / all)));
qualified.setUbalanceOvertime(PubUtils.doubleRound(2, 100.0 - (value.stream().mapToInt(DataLimitRateDto::getUbalanceOvertime).sum() * 100.0 / all)));
qualified.setUaberranceOvertime(PubUtils.doubleRound(2, 100.0 - (value.stream().mapToInt(DataLimitRateDto::getUaberranceOvertime).sum() * 100.0 / all)));
qualified.setINegOvertime(PubUtils.doubleRound(2, 100.0 - (value.stream().mapToInt(DataLimitRateDto::getINegOvertime).sum() * 100.0 / all)));
setOverTime(2,25,"getUharm",value, qualified, all);
setOverTime(2,25,"getIharm",value, qualified, all);
setOverTime(1,16,"getInuharm",value, qualified, all);
qualified.setFreqDevOvertime(PubUtils.doubleRound(2, 100.0 - getaDouble(value.stream().mapToInt(DataLimitRateDto::getFreqDevOvertime).sum() * 100.0, all)));
qualified.setVoltageDevOvertime(PubUtils.doubleRound(2, 100.0 - getaDouble(value.stream().mapToInt(DataLimitRateDto::getVoltageDevOvertime).sum() * 100.0, all)));
qualified.setUbalanceOvertime(PubUtils.doubleRound(2, 100.0 - getaDouble(value.stream().mapToInt(DataLimitRateDto::getUbalanceOvertime).sum() * 100.0, all)));
qualified.setUaberranceOvertime(PubUtils.doubleRound(2, 100.0 - getaDouble(value.stream().mapToInt(DataLimitRateDto::getUaberranceOvertime).sum() * 100.0, all)));
qualified.setINegOvertime(PubUtils.doubleRound(2, 100.0 - getaDouble(value.stream().mapToInt(DataLimitRateDto::getINegOvertime).sum() * 100.0, all)));
setOverTime(2, 25, "uharm", value, qualified, all);
setOverTime(2, 25, "iharm", value, qualified, all);
setOverTime(1, 16, "inuharm", value, qualified, all);
}
int flickerAll = value.stream().mapToInt(DataLimitRateDto::getFlickerAllTime).sum();
if (flickerAll > 0) {
qualified.setFlickerOvertime(PubUtils.doubleRound(2, 100.0 - (value.stream().mapToInt(DataLimitRateDto::getFlickerOvertime).sum() * 100.0 / flickerAll)));
qualified.setFlickerOvertime(PubUtils.doubleRound(2, 100.0 - getaDouble(value.stream().mapToInt(DataLimitRateDto::getFlickerOvertime).sum() * 100.0, flickerAll)));
}
info.add(qualified);
});
}
if (CollUtil.isNotEmpty(info)) {
}
return info;
}
private static void setOverTime(Integer start, Integer end, String targetName,List<DataLimitRateDto> value, QualifiedDetail qualified, int all) {
private double getaDouble(double value, int all) {
return value * 100.0 / all;
}
private void setOverTime(Integer start, Integer end, String targetName, List<DataLimitRateDto> value, QualifiedDetail qualified, int all) {
for (int i = start; i <= end; i++) {
// 构造方法名
String methodName = targetName + i + "Overtime";
try {
Field finalField = DataLimitRateDto.class.getDeclaredField(methodName);
finalField.setAccessible(true);
finalField.set(qualified, PubUtils.doubleRound(2, 100.0 - (value.stream().mapToInt(temp -> {
Integer o;
try {
o = (Integer) finalField.get(temp);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
return o.intValue();
}).sum() * 100.0 / all)));
double v = PubUtils.doubleRound(2, 100.0 - getaDouble(value.stream().mapToInt(temp -> {
Integer o;
try {
o = (Integer) finalField.get(temp);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
return o.intValue();
}).sum() * 100.0, all));
Field declared = QualifiedDetail.class.getDeclaredField(methodName);
declared.setAccessible(true);
declared.set(qualified, v);
} catch (NoSuchFieldException | IllegalAccessException e) {
throw new RuntimeException(e);
}

View File

@@ -8,14 +8,12 @@ import com.njcn.algorithm.service.line.IDataIntegrityService;
import com.njcn.dataProcess.api.DataIntegrityFeignClient;
import com.njcn.dataProcess.api.DataVFeignClient;
import com.njcn.dataProcess.dto.MeasurementCountDTO;
import com.njcn.dataProcess.pojo.po.RStatIntegrityD;
import com.njcn.dataProcess.param.LineCountEvaluateParam;
import com.njcn.dataProcess.pojo.dto.DataIntegrityDto;
import com.njcn.dataProcess.util.TimeUtils;
import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
import com.njcn.influx.constant.InfluxDbSqlConstant;
import com.njcn.influx.pojo.bo.MeasurementCount;
import com.njcn.influx.pojo.constant.InfluxDBTableConstant;
import com.njcn.influx.pojo.po.DataV;
import com.njcn.influx.query.InfluxQueryWrapper;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.ListUtils;
import org.springframework.stereotype.Service;
@@ -23,6 +21,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
@@ -36,15 +35,15 @@ import java.util.stream.Collectors;
public class IDataIntegrityServiceImpl implements IDataIntegrityService {
@Resource
private CommTerminalGeneralClient commTerminalGeneralClient;
private final DataVFeignClient dataVFeignClient;
private final DataIntegrityFeignClient dataIntegrityFeignClient;
@Resource
private DataVFeignClient dataVFeignClient;
@Resource
private DataIntegrityFeignClient dataIntegrityFeignClient;
@Override
public void dataIntegrity(CalculatedParam<String> calculatedParam) {
List<RStatIntegrityD> poList = new ArrayList<>();
List<DataIntegrityDto> poList = new ArrayList<>();
List<String> lineIds = calculatedParam.getIdList();
String beginDay = LocalDateTimeUtil.format(
LocalDateTimeUtil.beginOfDay(LocalDateTimeUtil.parse(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN)),
@@ -55,15 +54,15 @@ public class IDataIntegrityServiceImpl implements IDataIntegrityService {
DatePattern.NORM_DATETIME_PATTERN
);
//以尺寸100分片
List<List<String>> pendingIds = ListUtils.partition(lineIds,5);
List<List<String>> pendingIds = ListUtils.partition(lineIds, 5);
for (List<String> pendingId : pendingIds) {
List<LineDevGetDTO> lineDevGetDTOList = commTerminalGeneralClient.getMonitorDetailList(pendingId).getData();
List<MeasurementCountDTO> countList = dataVFeignClient.getMeasurementCount(pendingId,beginDay,endDay).getData();
List<MeasurementCountDTO> countList = dataVFeignClient.getMeasurementCount(pendingId, beginDay, endDay).getData();
poList.addAll(
lineDevGetDTOList.stream()
.map(item -> {
RStatIntegrityD integrityDpo = new RStatIntegrityD();
integrityDpo.setTimeId(LocalDateTimeUtil.parseDate(calculatedParam.getDataDate(), DatePattern.NORM_DATE_PATTERN));
DataIntegrityDto integrityDpo = new DataIntegrityDto();
integrityDpo.setTimeId(calculatedParam.getDataDate());
integrityDpo.setLineIndex(item.getPointId());
integrityDpo.setDueTime(InfluxDBTableConstant.DAY_MINUTE / item.getInterval());
integrityDpo.setRealTime(countList.stream()
@@ -76,12 +75,40 @@ public class IDataIntegrityServiceImpl implements IDataIntegrityService {
.collect(Collectors.toList())
);
}
if(CollUtil.isNotEmpty(poList)){
if (CollUtil.isNotEmpty(poList)) {
dataIntegrityFeignClient.batchInsertion(poList);
}
}
@Override
public List<DataIntegrityDto> dataIntegrityMonth(CalculatedParam<String> calculatedParam) {
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfMonth(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfMonth(calculatedParam.getDataDate()));
List<String> devIdList = calculatedParam.getIdList();
List<DataIntegrityDto> info = new ArrayList<>();
List<List<String>> pendingIds = ListUtils.partition(devIdList, 100);
for (List<String> pendingId : pendingIds) {
lineParam.setLineId(pendingId);
List<DataIntegrityDto> data = dataIntegrityFeignClient.getRawData(lineParam).getData();
Map<String, List<DataIntegrityDto>> collect = data.stream().collect(Collectors.groupingBy(DataIntegrityDto::getLineIndex));
collect.forEach((key, value) -> {
DataIntegrityDto integrity = new DataIntegrityDto();
integrity.setTimeId(calculatedParam.getDataDate());
integrity.setLineIndex(key);
integrity.setDueTime(value.stream().mapToInt(DataIntegrityDto::getDueTime).sum());
integrity.setRealTime(value.stream().mapToInt(DataIntegrityDto::getRealTime).sum());
info.add(integrity);
});
}
if (CollUtil.isNotEmpty(info)) {
}
return info;
}
}

View File

@@ -1,6 +1,7 @@
package com.njcn.algorithm.serviceimpl.line;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
@@ -22,7 +23,6 @@ import com.njcn.influx.deprecated.InfluxDBPublicParam;
import com.njcn.user.api.DeptFeignClient;
import com.njcn.user.pojo.po.Dept;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections4.ListUtils;
import org.springframework.stereotype.Service;
@@ -136,6 +136,10 @@ public class IDataOnlineRateServiceImpl implements IDataOnlineRateService {
onlineRateDto.setOfflineMin(value.stream().mapToInt(DataOnlineRateDto.Detail::getOfflineMin).sum());
info.add(onlineRateDto);
});
}
if(CollUtil.isNotEmpty(info)){
}
return info;
}

View File

@@ -0,0 +1,86 @@
package com.njcn.algorithm.serviceimpl.line;
import cn.hutool.core.collection.CollUtil;
import com.njcn.algorithm.pojo.bo.CalculatedParam;
import com.njcn.algorithm.service.line.IDataOrgPointService;
import com.njcn.dataProcess.api.DataIntegrityFeignClient;
import com.njcn.dataProcess.api.DataOrgIntegrityFeignClient;
import com.njcn.dataProcess.param.LineCountEvaluateParam;
import com.njcn.dataProcess.pojo.dto.DataIntegrityDto;
import com.njcn.dataProcess.pojo.dto.DataOrgIntegrityDto;
import com.njcn.dataProcess.util.TimeUtils;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.ListUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
/**
* @Author: cdf
* @CreateTime: 2025-02-28
* @Description: 数据完成性
*/
@Service
@RequiredArgsConstructor
public class IDataOrgPointServiceImpl implements IDataOrgPointService {
@Resource
private DataIntegrityFeignClient dataIntegrityFeignClient;
@Resource
private DataOrgIntegrityFeignClient dataOrgIntegrityFeignClient;
@Override
public void dataOrgIntegrity(CalculatedParam calculatedParam) {
List<DataOrgIntegrityDto> info=new ArrayList<>();
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfDay(calculatedParam.getDataDate()));
List<DeptGetChildrenMoreDTO> deptList = calculatedParam.getIdList();
for (DeptGetChildrenMoreDTO deptGetChildrenMoreDTO : deptList) {
List<LineDevGetDTO> lineBaseList = deptGetChildrenMoreDTO.getLineBaseList();
List<String> lineIds = lineBaseList.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList());
lineParam.setLineId(lineIds);
List<DataIntegrityDto> data = dataIntegrityFeignClient.getRawData(lineParam).getData();
DataOrgIntegrityDto integrity = new DataOrgIntegrityDto();
integrity.setTimeId(calculatedParam.getDataDate());
integrity.setOrgId(deptGetChildrenMoreDTO.getUnitId());
integrity.setDueTime(data.stream().mapToInt(DataIntegrityDto::getDueTime).sum());
integrity.setRealTime(data.stream().mapToInt(DataIntegrityDto::getRealTime).sum());
info.add(integrity);
}
if(CollUtil.isNotEmpty(info)){
dataOrgIntegrityFeignClient.batchInsertion(info);
}
}
@Override
public List<DataOrgIntegrityDto> dataOrgIntegrityMonth(CalculatedParam calculatedParam) {
List<DataOrgIntegrityDto> info=new ArrayList<>();
LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfMonth(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfMonth(calculatedParam.getDataDate()));
List<DeptGetChildrenMoreDTO> deptList = calculatedParam.getIdList();
for (DeptGetChildrenMoreDTO deptGetChildrenMoreDTO : deptList) {
lineParam.setLineId(Arrays.asList(deptGetChildrenMoreDTO.getUnitId()));
List<DataOrgIntegrityDto> data = dataOrgIntegrityFeignClient.getRawData(lineParam).getData();
Map<String, List<DataOrgIntegrityDto>> collect = data.stream().collect(Collectors.groupingBy(DataOrgIntegrityDto::getOrgId));
collect.forEach((key, value) -> {
DataOrgIntegrityDto integrity = new DataOrgIntegrityDto();
integrity.setTimeId(calculatedParam.getDataDate());
integrity.setOrgId(deptGetChildrenMoreDTO.getUnitId());
integrity.setDueTime(data.stream().mapToInt(DataOrgIntegrityDto::getDueTime).sum());
integrity.setRealTime(data.stream().mapToInt(DataOrgIntegrityDto::getRealTime).sum());
info.add(integrity);
});
}
if(CollUtil.isNotEmpty(info)){
}
return info;
}
}