代码冲突补充1
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
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.DataHarmrateVDTO;
|
||||
import com.njcn.dataProcess.param.LineCountEvaluateParam;
|
||||
import com.njcn.dataProcess.pojo.dto.DataHarmDto;
|
||||
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.QUERY)
|
||||
@PostMapping("/getRawData")
|
||||
@ApiOperation("获取原始数据")
|
||||
public HttpResult<List<DataHarmDto>> getRawData(@RequestBody LineCountEvaluateParam lineParam) {
|
||||
String methodDescribe = getMethodDescribe("getRawData");
|
||||
List<DataHarmDto> data = dataHarmRateVQuery.getRawData(lineParam);
|
||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, data, methodDescribe);
|
||||
}
|
||||
|
||||
@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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.njcn.dataProcess.service;
|
||||
|
||||
import com.njcn.dataProcess.dto.DataHarmrateVDTO;
|
||||
import com.njcn.dataProcess.param.LineCountEvaluateParam;
|
||||
import com.njcn.dataProcess.pojo.dto.DataHarmDto;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author xy
|
||||
*/
|
||||
public interface
|
||||
IDataHarmRateV {
|
||||
|
||||
/**
|
||||
* 获取原始数据
|
||||
* @param lineParam
|
||||
* @return
|
||||
*/
|
||||
List<DataHarmDto> getRawData(LineCountEvaluateParam lineParam);
|
||||
|
||||
void batchInsertion (List<DataHarmrateVDTO> dataHarmrateVDTOList);
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
package com.njcn.dataProcess.service.impl.influxdb;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.njcn.common.utils.HarmonicTimesUtil;
|
||||
import com.njcn.dataProcess.dao.imapper.DataHarmRateVMapper;
|
||||
import com.njcn.dataProcess.dto.DataHarmrateVDTO;
|
||||
import com.njcn.dataProcess.param.LineCountEvaluateParam;
|
||||
import com.njcn.dataProcess.po.influx.DataHarmrateV;
|
||||
import com.njcn.dataProcess.pojo.dto.DataHarmDto;
|
||||
import com.njcn.dataProcess.service.IDataHarmRateV;
|
||||
import com.njcn.dataProcess.util.BeanFeildUtils;
|
||||
import com.njcn.influx.constant.InfluxDbSqlConstant;
|
||||
import com.njcn.influx.query.InfluxQueryWrapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.collections4.ListUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.ZoneId;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author xy
|
||||
*/
|
||||
@Service("InfluxdbDataHarmRateVImpl")
|
||||
@RequiredArgsConstructor
|
||||
public class InfluxdbDataHarmRateVImpl implements IDataHarmRateV {
|
||||
|
||||
private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault());
|
||||
|
||||
private final DataHarmRateVMapper dataHarmRateVMapper;
|
||||
|
||||
@Override
|
||||
public List<DataHarmDto> getRawData(LineCountEvaluateParam lineParam) {
|
||||
List<DataHarmDto> result = new ArrayList<>();
|
||||
List<DataHarmrateV> list = getMinuteDataI(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime());
|
||||
list.forEach(item->{
|
||||
DataHarmDto dto = new DataHarmDto();
|
||||
BeanUtils.copyProperties(item,dto);
|
||||
dto.setMinTime(DATE_TIME_FORMATTER.format(item.getTime()));
|
||||
result.add(dto);
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 按监测点集合、时间条件获取dataI分钟数据
|
||||
* timeMap参数来判断是否进行数据处理 timeMap为空则不进行数据处理
|
||||
* 需要进行剔除异常数据时,这里会有三种情况判断
|
||||
* 1.无异常数据,则直接返回集合;
|
||||
* 2.异常数据和无异常数据参杂,剔除异常数据,只计算正常数据;
|
||||
* 3.全是异常数据,则使用异常数据进行计算,但是日表中需要标记出来,此数据有异常
|
||||
*/
|
||||
public List<DataHarmrateV> getMinuteDataI(List<String> lineList, String startTime, String endTime, Map<String,List<String>> timeMap) {
|
||||
List<DataHarmrateV> result = new ArrayList<>();
|
||||
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataHarmrateV.class);
|
||||
influxQueryWrapper.samePrefixAndSuffix(InfluxDbSqlConstant.V, "", HarmonicTimesUtil.harmonicTimesList(2, 50, 1));
|
||||
influxQueryWrapper.regular(DataHarmrateV::getLineId, lineList)
|
||||
.select(DataHarmrateV::getLineId)
|
||||
.select(DataHarmrateV::getPhasicType)
|
||||
.select(DataHarmrateV::getValueType)
|
||||
.select(DataHarmrateV::getQualityFlag)
|
||||
.between(DataHarmrateV::getTime, startTime, endTime)
|
||||
.eq(DataHarmrateV::getQualityFlag,"0");
|
||||
List<DataHarmrateV> list = dataHarmRateVMapper.selectByQueryWrapper(influxQueryWrapper);
|
||||
Map<String,List<DataHarmrateV>> lineMap = list.stream().collect(Collectors.groupingBy(DataHarmrateV::getLineId));
|
||||
//有异常数据
|
||||
if (CollectionUtil.isNotEmpty(timeMap)) {
|
||||
lineMap.forEach((k,v)->{
|
||||
List<String> timeList = timeMap.get(k);
|
||||
//有异常数据,当前监测点自身的异常数据
|
||||
if (CollectionUtil.isNotEmpty(timeList)) {
|
||||
List<DataHarmrateV> filterList = v.stream().filter(item -> !timeList.contains(DATE_TIME_FORMATTER.format(item.getTime()))).collect(Collectors.toList());
|
||||
//1.过滤掉异常数据后还有正常数据,则用正常数据计算
|
||||
if (CollectionUtil.isNotEmpty(filterList)) {
|
||||
result.addAll(filterList);
|
||||
}
|
||||
//2.过滤掉异常数据后没有正常数据,则用所有异常数据计算,但是需要标记数据为异常的
|
||||
else {
|
||||
v.parallelStream().forEach(item -> item.setQualityFlag("1"));
|
||||
result.addAll(v);
|
||||
}
|
||||
}
|
||||
//没有异常数据,则使用原数据
|
||||
else {
|
||||
result.addAll(v);
|
||||
}
|
||||
});
|
||||
}
|
||||
//没有异常数据,则使用原数据
|
||||
else {
|
||||
result.addAll(list);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@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);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
package com.njcn.dataProcess.service.impl.relation;
|
||||
|
||||
import com.njcn.dataProcess.dao.relation.mapper.DataHarmrateVRelationMapper;
|
||||
import com.njcn.dataProcess.dao.relation.mapper.DataIRelationMapper;
|
||||
import com.njcn.dataProcess.dto.DataHarmrateVDTO;
|
||||
import com.njcn.dataProcess.param.LineCountEvaluateParam;
|
||||
import com.njcn.dataProcess.po.relation.DataHarmrateV;
|
||||
import com.njcn.dataProcess.pojo.dto.DataHarmDto;
|
||||
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 javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author xy
|
||||
*/
|
||||
@Service("RelationDataHarmRateVImpl")
|
||||
@RequiredArgsConstructor
|
||||
public class RelationDataHarmRateVImpl implements IDataHarmRateV {
|
||||
|
||||
@Resource
|
||||
private DataIRelationMapper dataIRelationMapper;
|
||||
private final DataHarmrateVRelationMapper dataHarmrateVRelationMapper;
|
||||
|
||||
@Override
|
||||
public List<DataHarmDto> getRawData(LineCountEvaluateParam lineParam) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@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);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user