添加电压含有率

This commit is contained in:
hzj
2025-02-21 15:34:50 +08:00
parent 92d540e497
commit fa09ac7a67
13 changed files with 666 additions and 3 deletions

View File

@@ -17,6 +17,7 @@ import java.util.List;
public class LnDataDTO {
private List<DataVDTO> dataVList;
private List<DataHarmphasicVDTO> dataHarmphasicVDTOList;
private List<DataHarmrateVDTO> dataHarmrateVDTOList;
private List<DataInharmVDTO> dataInharmVDTOList;
private List<DataIDTO> dataIDTOList;
private List<DataHarmphasicIDTO> dataHarmphasicIDTOList;

View File

@@ -44,6 +44,24 @@
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.njcn</groupId>
<artifactId>common-device-biz</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<artifactId>pqs-influx</artifactId>
<groupId>com.njcn</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.njcn.platform</groupId>
<artifactId>message-api</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>

View File

@@ -14,6 +14,7 @@ import org.springframework.context.annotation.DependsOn;
@Slf4j
@DependsOn("proxyMapperRegister")
@MapperScan("com.njcn.**.mapper")
@EnableFeignClients(basePackages = "com.njcn")
@SpringBootApplication(scanBasePackages = "com.njcn")
public class DataProcessBootApplication {

View File

@@ -0,0 +1,64 @@
package com.njcn.dataProcess.controller;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.constant.OperateType;
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.dataProcess.annotation.InsertBean;
import com.njcn.dataProcess.annotation.QueryBean;
import com.njcn.dataProcess.dto.DataHarmphasicIDTO;
import com.njcn.dataProcess.dto.DataHarmrateVDTO;
import com.njcn.dataProcess.po.influx.DataHarmrateV;
import com.njcn.dataProcess.service.IDataHarmphasicI;
import com.njcn.dataProcess.service.IDataHarmrateV;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
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 java.util.List;
/**
* @author hongawen
* @version 1.0
* @data 2024/11/6 19:48
*/
@Validated
@Slf4j
@Controller
@RestController
@RequestMapping("/dataHarmratev")
@Api(tags = "谐波电流角度数据")
public class DataHarmrateVController extends BaseController {
@QueryBean
private IDataHarmrateV dataHarmrateVQuery;
@InsertBean
private IDataHarmrateV dataHarmrateVInsert;
@OperateInfo(info = LogEnum.BUSINESS_COMMON,operateType = OperateType.ADD)
@PostMapping("/batchInsertion")
@ApiOperation("批量插入")
public HttpResult<String> batchInsertion(@RequestBody List<DataHarmrateVDTO> dataHarmrateVDTOList) {
String methodDescribe = getMethodDescribe("batchInsertion");
dataHarmrateVInsert.batchInsertion(dataHarmrateVDTOList);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
}

View File

@@ -0,0 +1,161 @@
package com.njcn.dataProcess.controller;//package com.njcn.message.websocket;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.LocalDateTimeUtil;
import com.alibaba.fastjson.JSONObject;
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.dataProcess.annotation.QueryBean;
import com.njcn.dataProcess.api.DataVFeignClient;
import com.njcn.dataProcess.service.IDataV;
import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
import com.njcn.message.api.ProduceFeignClient;
import com.njcn.message.message.RecallMessage;
import com.njcn.middle.rocket.domain.BaseMessage;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.util.CollectionUtils;
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 java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @author hongawen
*/
@RestController
@RequiredArgsConstructor
@Api(tags = "数据补招")
@RequestMapping("/data")
public class DataRecallController extends BaseController {
@QueryBean
private IDataV dataVQuery;
private final CommTerminalGeneralClient commTerminalGeneralClient;
private final ProduceFeignClient produceFeignClient;
/**
* 算法保存
*/
@PostMapping("/recall")
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@ApiOperation("数据补招")
@ApiImplicitParam(name = "param", value = "参数", required = true)
public HttpResult<Boolean> recall(@RequestBody List<RecallMessage.RecallDTO> param) {
String methodDescribe = getMethodDescribe("recall");
RecallMessage message = new RecallMessage();
BaseMessage baseMessage = new BaseMessage();
if(CollectionUtils.isEmpty(param)){
LocalDate localDate =LocalDate.now().plusDays(-1);
List<String> runMonitorIds = commTerminalGeneralClient.getRunMonitorIds().getData();
List<RecallMessage.RecallDTO> recallDTOList = new ArrayList<>();
runMonitorIds.forEach(temp->{
LineDevGetDTO data = commTerminalGeneralClient.getMonitorDetail(temp).getData();
Integer timeInterval = data.getTimeInterval();
List<LocalDateTime> localDateTimeList = generateTimeIntervals(localDate, timeInterval);
List<LocalDateTime> data1 = dataVQuery.monitoringTime(temp, LocalDateTimeUtil.format(localDate, DatePattern.NORM_DATE_PATTERN));
localDateTimeList.removeAll(data1);
if(!CollectionUtils.isEmpty(localDateTimeList)){
List<String> timePeriod = mergeTimeIntervals(localDateTimeList, timeInterval);
RecallMessage.RecallDTO recallDTO = new RecallMessage.RecallDTO();
recallDTO.setDataType("0");
recallDTO.setMonitorId(Stream.of(temp).collect(Collectors.toList()));
recallDTO.setTimeInterval(timePeriod);
recallDTOList.add(recallDTO);
}
});
if(!CollectionUtils.isEmpty(recallDTOList)){
message.setData(recallDTOList);
// baseMessage.setMessageBody(JSONObject.toJSONString(message));
produceFeignClient.recall(message);
}
}else {
message.setData(param);
// baseMessage.setMessageBody(JSONObject.toJSONString(message));
produceFeignClient.recall(message);
}
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
public List<LocalDateTime> generateTimeIntervals(LocalDate date, int intervalMinutes) {
List<LocalDateTime> dateTimeList = new ArrayList<>();
// Create the starting LocalDateTime
LocalDateTime startDateTime = LocalDateTime.of(date, LocalTime.MIDNIGHT);
// Create the ending LocalDateTime
LocalDateTime endDateTime = LocalDateTime.of(date, LocalTime.MAX);
// Generate LocalDateTime list with the given interval
LocalDateTime currentDateTime = startDateTime;
while (!currentDateTime.isAfter(endDateTime)) {
dateTimeList.add(currentDateTime);
currentDateTime = currentDateTime.plusMinutes(intervalMinutes);
}
return dateTimeList;
}
public static List<String> mergeTimeIntervals(List<LocalDateTime> times, int intervalMinutes) {
List<String> mergedIntervals = new ArrayList<>();
if (times == null || times.isEmpty()) {
return mergedIntervals;
}
// Sort the list to ensure the times are in order
times.sort(LocalDateTime::compareTo);
LocalDateTime start = times.get(0);
LocalDateTime end = start;
for (int i = 1; i < times.size(); i++) {
LocalDateTime current = times.get(i);
if (current.isAfter(end.plusMinutes(intervalMinutes))) {
// If the current time is more than interval minutes after the end, close the current interval
mergedIntervals.add(formatInterval(start, end));
start = current; // Start a new interval
}
end = current; // Update the end of the current interval
}
// Add the last interval
mergedIntervals.add(formatInterval(start, end));
return mergedIntervals;
}
private static String formatInterval(LocalDateTime start, LocalDateTime end) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
return start.format(formatter) + "~" + end.format(formatter);
}
}

View File

@@ -0,0 +1,18 @@
package com.njcn.dataProcess.dao.imapper;
import com.njcn.dataProcess.po.influx.DataHarmphasicV;
import com.njcn.dataProcess.po.influx.DataHarmrateV;
import com.njcn.influx.base.InfluxDbBaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author hongawen
* @since 2023-12-28
*/
public interface DataHarmrateVMapper extends InfluxDbBaseMapper<DataHarmrateV> {
}

View File

@@ -0,0 +1,17 @@
package com.njcn.dataProcess.service;
import com.njcn.dataProcess.dto.DataHarmphasicIDTO;
import com.njcn.dataProcess.dto.DataHarmrateVDTO;
import java.util.List;
/**
* Description:
* Date: 2024/11/18 11:17【需求编号】
*
* @author clam
* @version V1.0.0
*/
public interface IDataHarmrateV {
void batchInsertion(List<DataHarmrateVDTO> dataHarmrateVDTOList);
}

View File

@@ -22,6 +22,9 @@ public class LnDataDealServiceImpl implements LnDataDealService {
private IDataHarmphasicI dataHarmphasicIInsert;
@InsertBean
private IDataHarmphasicV dataHarmphasicVInsert;
@InsertBean
private IDataHarmrateV dataHarmrateVInsert;
@InsertBean
private IDataHarmpowerP dataHarmpowerPService;
@InsertBean
@@ -42,6 +45,7 @@ public class LnDataDealServiceImpl implements LnDataDealService {
@Override
public void batchInsertion(LnDataDTO lnDataDTO) {
dataVService.batchInsertion(lnDataDTO.getDataVList());
dataHarmrateVInsert.batchInsertion(lnDataDTO.getDataHarmrateVDTOList());
dataFlickerInsert.batchInsertion(lnDataDTO.getDataFlickerDTOList());
dataFlucInsert.batchInsertion(lnDataDTO.getDataFlucDTOList());
dataHarmphasicIInsert.batchInsertion(lnDataDTO.getDataHarmphasicIDTOList());

View File

@@ -0,0 +1,51 @@
package com.njcn.dataProcess.service.impl.influxdb;
import com.njcn.dataProcess.dao.imapper.DataHarmphasicVMapper;
import com.njcn.dataProcess.dao.imapper.DataHarmrateVMapper;
import com.njcn.dataProcess.dto.DataHarmphasicVDTO;
import com.njcn.dataProcess.dto.DataHarmrateVDTO;
import com.njcn.dataProcess.po.influx.DataHarmphasicV;
import com.njcn.dataProcess.po.influx.DataHarmrateV;
import com.njcn.dataProcess.service.IDataHarmphasicV;
import com.njcn.dataProcess.service.IDataHarmrateV;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.ListUtils;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* Description:
* Date: 2024/11/18 14:33【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service("InfluxdbDataHarmrateVImpl")
@RequiredArgsConstructor
public class InfluxdbDataHarmrateVImpl implements IDataHarmrateV {
private final DataHarmrateVMapper dataHarmrateVMapper;
@Override
public void batchInsertion(List<DataHarmrateVDTO> dataHarmrateVDTOList) {
int totalCount = dataHarmrateVDTOList.size();
if(totalCount<=0){
return;
}
List<DataHarmrateV> collect = dataHarmrateVDTOList.stream().flatMap(temp -> DataHarmrateV.relationToInfluxDB(temp).stream()).collect(Collectors.toList());
int minSize = Math.min(1200000, collect.size());
List<List<DataHarmrateV>> partition = ListUtils.partition(collect, minSize);
for (List<DataHarmrateV> dataHarmrateVList : partition) {
List<DataHarmrateV> sublistAsOriginalListType = new ArrayList<>(dataHarmrateVList);
dataHarmrateVMapper.insertBatch(sublistAsOriginalListType);
}
}
}

View File

@@ -0,0 +1,56 @@
package com.njcn.dataProcess.service.impl.relation;
import com.njcn.dataProcess.dao.relation.mapper.DataHarmphasicVRelationMapper;
import com.njcn.dataProcess.dao.relation.mapper.DataHarmrateVRelationMapper;
import com.njcn.dataProcess.dto.DataHarmrateVDTO;
import com.njcn.dataProcess.po.relation.DataHarmphasicV;
import com.njcn.dataProcess.po.relation.DataHarmrateV;
import com.njcn.dataProcess.service.IDataHarmrateV;
import com.njcn.dataProcess.util.BeanFeildUtils;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.ListUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* Description:
* Date: 2025/02/21 下午 3:15【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Service("RelationDataHarmrateVImpl")
@RequiredArgsConstructor
public class RelationDataHarmrateVImpl implements IDataHarmrateV {
private final DataHarmrateVRelationMapper dataHarmrateVRelationMapper;
@Override
public void batchInsertion(List<DataHarmrateVDTO> dataHarmrateVDTOList) {
int totalCount = dataHarmrateVDTOList.size();
int minSize = Math.min(120, totalCount);
if(totalCount<=0){
return;
}
List<DataHarmrateV> collect = dataHarmrateVDTOList.stream().map(temp -> {
DataHarmrateV dataHarmrateV = new DataHarmrateV();
BeanUtils.copyProperties(temp, dataHarmrateV, BeanFeildUtils.getNullPropertyNames(temp));
return dataHarmrateV;
}).collect(Collectors.toList());
collect = collect.stream().collect(Collectors.toMap(
temp -> temp.getTimeid() + temp.getLineid() + temp.getPhasicType(),
temp -> temp,
(exist, replace) -> exist
)).values().stream().collect(Collectors.toList());
List<List<DataHarmrateV>> partition = ListUtils.partition(collect, minSize);
for (List<DataHarmrateV> dataHarmphasicVList : partition) {
dataHarmrateVRelationMapper.insertBatchSomeColumn(dataHarmphasicVList);
}
}
}