24 Commits

Author SHA1 Message Date
xy
274d787b04 refactor(data): 统一数据库字段命名规范并更新查询逻辑
- 将DataHarmpowerP类中的totPf、totDf、totP等字段的@Column注解名称规范化为下划线格式
- 将DataHarmpowerP类中的totP1-totP50字段名统一调整为tot_tp_1-tot_tp_50格式
- 将DataHarmpowerQ类中的totQ字段名调整为tot_q,totQ1-totQ50调整为tot_tq_1-tot_tq_50格式
- 将DataHarmpowerS类中的totS字段名调整为tot_s,totS1-totS50调整为tot_ts_1-tot_ts_50格式
- 在InfluxdbDataHarmpowerPImpl服务中添加tot_tp_1-tot_tp_50字段的查询条件配置
- 在InfluxdbDataHarmpowerPImpl服务中增加TotP、TotDf、TotPf字段的选择查询
- 在InfluxdbDataHarmpowerQImpl服务中添加tot_tq_1-tot_tq_50字段的查询条件配置
- 在InfluxdbDataHarmpowerQImpl服务中增加TotQ字段的选择查询
- 在InfluxdbDataHarmpowerSImpl服务中添加tot_ts_1-tot_ts_50字段的查询条件配置
- 在InfluxdbDataHarmpowerSImpl服务中增加TotS字段的选择查询
2026-07-01 17:16:21 +08:00
ac40e92c79 专项分析调整,综合评估调整 2026-06-30 18:21:53 +08:00
88cd32dd10 专项分析调整,综合评估调整 2026-06-30 15:57:50 +08:00
c5c4f6e31b Merge: mq-starter Phase2 message 切片接入(方案A)
Task9 切片(FrontDataMqListener LN_Topic 上行 / RecallMqSender Recall 下行, legacy 按 mq.type 互斥, rocketmq 缺省不变不双消费) + 真实 autoconfig 顺序 wiring 测试; 配套 mq-starter 装配顺序修复(@AutoConfigureBefore)+护栏已推 Gitea(9f6ffad..e599171); 最终全分支 review(opus) 无 Critical.
2026-06-29 14:11:40 +08:00
79374ea6ec test(message): 切片 wiring 测试改用真实 autoconfig 顺序
MqSliceWiringTest 从 withUserConfiguration 手动排序改为 AutoConfigurations.of
(等价真实 boot 的 AutoConfigurationSorter),并断言 MqTemplate / MqListenerRegistry
在真实顺序下装配,防止 core 装配顺序回归;配合 mq-starter driver autoconfig 的
@AutoConfigureBefore 修复。同时去掉 driver 选择用例多余的 Redis 守卫。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-29 12:01:49 +08:00
0b950b3c35 feat(message-boot): 接入 mq-starter 通用 MQ 抽象层(Task 9)
- 新增 FrontDataMqListener:@MqListener(LN_Topic),仅 redis-stream 模式激活
- 新增 RecallMqSender:MqTemplate.send 下行下发 Recall 消息
- FrontDataConsumer 加 @ConditionalOnProperty(mq.type=rocketmq, matchIfMissing=true) 互斥保护
- 新增 MqSliceWiringTest:4 个 ApplicationContextRunner 切片测试,全部通过
  - 关键修复:用 withUserConfiguration(依赖顺序列举) 替代 AutoConfigurations.of(),
    避免字母序排序导致 MqCoreAutoConfiguration 在 driver autoconfig 前处理,
    @ConditionalOnBean(MqDriver.class) 因此失败

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-29 11:16:02 +08:00
xy
587e936554 fix(influxdb): 恢复功率数据提取中的相位类型判断逻辑
- 在 InfluxdbDataHarmpowerPImpl 中启用相位类型条件判断
- 在 InfluxdbDataHarmpowerQImpl 中启用相位类型条件判断
- 在 InfluxdbDataHarmpowerSImpl 中启用相位类型条件判断
- 恢复了被注释掉的 Tot 参数提取逻辑
- 确保三相类型且线路参数为2时正确提取总量数据
2026-06-26 18:01:04 +08:00
xy
69df89f2e8 feat(algorithm): 添加监测点接线方式缓存优化数据处理逻辑
- 在ExecutionCenter中引入CsLineDTO和RedisUtil依赖
- 实现监测点、接线方式数据缓存到Redis功能,设置3小时过期时间
- 修改wlMeasurementPointExecutor方法使用缓存的线路ID列表
- 在数据处理服务中添加Gson和TypeToken用于JSON序列化
- 实现根据接线方式过滤电压类型数据的功能
- 添加线电压和相电压类型常量定义
- 优化数据查询逻辑,按监测点分组后根据接线方式过滤多余数据
- 实现线电压数据向相电压数据的特殊处理逻辑
- 统一返回经过接线方式过滤后的数据结果
2026-06-24 14:47:05 +08:00
wr
aa9dc1b00a Merge remote-tracking branch 'origin/master' 2026-06-23 15:01:56 +08:00
wr
e56dc8c4be 1.优化数据清洗文件上传目录结构,结构导致因目录过多导致阿里云文件服务器卡顿问题;
2.优化算法执行目录删除多余日志输出;
2026-06-23 15:01:40 +08:00
xy
7bf8b9d393 refactor(influxdb): 移除冗余的相位类型判断逻辑
- 注释掉 InfluxdbDataHarmpowerPImpl 中 phasicType 和 lineParam.type 的条件判断
- 注释掉 InfluxdbDataHarmpowerQImpl 中 phasicType 和 lineParam.type 的条件判断
- 注释掉 InfluxdbDataHarmpowerSImpl 中 phasicType 和 lineParam.type 的条件判断
- 统一使用 extractDataLists(valueTypeList, "") 进行数据提取
- 简化代码逻辑,提高可读性
2026-06-22 19:29:39 +08:00
hzj
5090e023b1 修改最新数据来了不更新通讯表数据,通讯表由前置状态维护 2026-06-10 10:05:57 +08:00
hzj
5cb4ab0e8f 将入库改成多线程添加日志,排查耗时情况 2026-06-10 09:03:00 +08:00
hzj
fce3f74da1 将入库改成多线程添加日志,排查耗时情况 2026-06-10 08:44:16 +08:00
hzj
cf0c0085e9 将入库改成多线程添加日志 2026-06-09 16:43:33 +08:00
hzj
ff0cbc7151 将入库改成多线程 2026-06-09 16:28:04 +08:00
cdf
761fbc73f2 bug修改 2026-06-01 16:51:51 +08:00
hzj
f1eb4515da 在线率算法修改 2026-05-27 16:27:02 +08:00
xy
c02acfca4f fix(data): 修复数据清理参数系统类型为空时的查询异常
- 添加系统类型参数非空校验
- 避免空值导致数据库查询错误
- 保持原有数据源条件判断逻辑
2026-05-21 19:48:08 +08:00
hzj
221007b367 移动文件 2026-05-21 14:55:11 +08:00
xy
7f6172d0ad refactor(data-process): 重构数据处理服务依赖注入和数据获取逻辑
- 将 PqReasonableRangeFeignClient 替换为 IPqReasonableRangeService 接口
- 统一使用本地服务接口替代远程调用,优化性能
- 移除废弃的 WlMinuteData 方法和相关设备线路查询逻辑
- 标准化时间相关的导入包,只保留必要的类
- 清理未使用的资源注入和函数式编程相关导入
- 简化数据获取流程,统一使用 getMinuteData 方法
2026-05-20 14:08:49 +08:00
5d4e461ef0 Merge pull request '装置文件系统管理' (#1) from master-temp into master
Reviewed-on: #1
2026-05-15 09:17:30 +08:00
hzj
0c8b17d336 装置文件系统管理 2026-05-15 09:12:46 +08:00
hzj
88e0d71718 修改装置最新时间逻辑 2026-05-11 08:46:43 +08:00
60 changed files with 1470 additions and 1392 deletions

View File

@@ -1,10 +1,18 @@
package com.njcn.dataProcess.api; package com.njcn.algorithm.pojo.api;
/**
* Description:
* Date: 2026/05/21 下午 2:41需求编号
*
* @author clam
* @version V1.0.0
*/
import com.njcn.algorithm.pojo.api.fallback.PqReasonableRangeFeignClientFallbackFactory;
import com.njcn.algorithm.pojo.dto.PqReasonableRangeDto;
import com.njcn.algorithm.pojo.param.DataCleanParam;
import com.njcn.common.pojo.constant.ServerInfo; import com.njcn.common.pojo.constant.ServerInfo;
import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.pojo.response.HttpResult;
import com.njcn.dataProcess.api.fallback.PqReasonableRangeFeignClientFallbackFactory;
import com.njcn.dataProcess.param.DataCleanParam;
import com.njcn.dataProcess.pojo.dto.PqReasonableRangeDto;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
@@ -17,7 +25,7 @@ import java.util.List;
* @version 1.0.0 * @version 1.0.0
* @date 2025年02月13日 20:11 * @date 2025年02月13日 20:11
*/ */
@FeignClient(value = ServerInfo.PLATFORM_DATA_PROCESSING_BOOT, path = "/pqReasonableRange", fallbackFactory = PqReasonableRangeFeignClientFallbackFactory.class, contextId = "pqReasonableRange") @FeignClient(value = ServerInfo.ALGORITHM_BOOT, path = "/pqReasonableRange", fallbackFactory = PqReasonableRangeFeignClientFallbackFactory.class, contextId = "pqReasonableRange")
public interface PqReasonableRangeFeignClient { public interface PqReasonableRangeFeignClient {
@PostMapping("/getData") @PostMapping("/getData")
@@ -25,3 +33,4 @@ public interface PqReasonableRangeFeignClient {
HttpResult<List<PqReasonableRangeDto>> getData(@RequestBody DataCleanParam param); HttpResult<List<PqReasonableRangeDto>> getData(@RequestBody DataCleanParam param);
} }

View File

@@ -1,12 +1,12 @@
package com.njcn.dataProcess.api.fallback; package com.njcn.algorithm.pojo.api.fallback;
import com.njcn.algorithm.pojo.api.PqReasonableRangeFeignClient;
import com.njcn.algorithm.pojo.dto.PqReasonableRangeDto;
import com.njcn.algorithm.pojo.param.DataCleanParam;
import com.njcn.algorithm.pojo.util.PrepareEnumUtil;
import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.pojo.response.HttpResult;
import com.njcn.dataProcess.api.PqReasonableRangeFeignClient;
import com.njcn.dataProcess.param.DataCleanParam;
import com.njcn.dataProcess.pojo.dto.PqReasonableRangeDto;
import com.njcn.dataProcess.util.DataProcessingEnumUtil;
import feign.hystrix.FallbackFactory; import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -14,9 +14,11 @@ import org.springframework.stereotype.Component;
import java.util.List; import java.util.List;
/** /**
* @author xy * Description:
* @version 1.0.0 * Date: 2026/05/21 下午 2:42需求编号
* @date 2025年02月13日 20:13 *
* @author clam
* @version V1.0.0
*/ */
@Slf4j @Slf4j
@Component @Component
@@ -32,7 +34,7 @@ public class PqReasonableRangeFeignClientFallbackFactory implements FallbackFact
Enum<?> exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK; Enum<?> exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK;
if(cause.getCause() instanceof BusinessException){ if(cause.getCause() instanceof BusinessException){
BusinessException businessException = (BusinessException) cause.getCause(); BusinessException businessException = (BusinessException) cause.getCause();
exceptionEnum = DataProcessingEnumUtil.getExceptionEnum(businessException.getResult()); exceptionEnum = PrepareEnumUtil.getExceptionEnum(businessException.getResult());
} }
Enum<?> finalExceptionEnum = exceptionEnum; Enum<?> finalExceptionEnum = exceptionEnum;
return new PqReasonableRangeFeignClient() { return new PqReasonableRangeFeignClient() {
@@ -45,3 +47,4 @@ public class PqReasonableRangeFeignClientFallbackFactory implements FallbackFact
}; };
} }
} }

View File

@@ -1,4 +1,4 @@
package com.njcn.dataProcess.pojo.dto; package com.njcn.algorithm.pojo.dto;
import lombok.Data; import lombok.Data;

View File

@@ -1,4 +1,4 @@
package com.njcn.dataProcess.param; package com.njcn.algorithm.pojo.param;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;

View File

@@ -1,4 +1,4 @@
package com.njcn.dataProcess.pojo.po; package com.njcn.algorithm.pojo.po;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.njcn.db.bo.BaseEntity; import com.njcn.db.bo.BaseEntity;

View File

@@ -16,6 +16,7 @@ import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.enums.common.LogEnum; import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.csdevice.api.CsLineFeignClient; import com.njcn.csdevice.api.CsLineFeignClient;
import com.njcn.csdevice.pojo.dto.CsLineDTO;
import com.njcn.device.biz.commApi.CommTerminalGeneralClient; import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO; import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO;
import com.njcn.device.biz.pojo.dto.DeptGetDeviceDTO; import com.njcn.device.biz.pojo.dto.DeptGetDeviceDTO;
@@ -23,6 +24,7 @@ import com.njcn.device.biz.pojo.dto.DeptGetSubStationDTO;
import com.njcn.device.biz.pojo.dto.LineDevGetDTO; import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
import com.njcn.device.biz.pojo.param.DeptGetLineParam; import com.njcn.device.biz.pojo.param.DeptGetLineParam;
import com.njcn.device.pq.api.DeptLineFeignClient; import com.njcn.device.pq.api.DeptLineFeignClient;
import com.njcn.redis.utils.RedisUtil;
import com.njcn.user.api.DeptFeignClient; import com.njcn.user.api.DeptFeignClient;
import com.njcn.user.pojo.po.Dept; import com.njcn.user.pojo.po.Dept;
import com.njcn.web.controller.BaseController; import com.njcn.web.controller.BaseController;
@@ -73,6 +75,8 @@ public class ExecutionCenter extends BaseController {
private CsLineFeignClient csLineFeignClient; private CsLineFeignClient csLineFeignClient;
@Resource @Resource
private FlowAsyncService flowService; private FlowAsyncService flowService;
@Resource
private RedisUtil redisUtil;
/*** /***
* 1、校验非全链执行时tagNames节点标签集合必须为非空否则提示---无可执行节点 * 1、校验非全链执行时tagNames节点标签集合必须为非空否则提示---无可执行节点
@@ -143,9 +147,27 @@ public class ExecutionCenter extends BaseController {
String methodDescribe = getMethodDescribe("wlMeasurementPointExecutor"); String methodDescribe = getMethodDescribe("wlMeasurementPointExecutor");
//手动判断参数是否合法, //手动判断参数是否合法,
CalculatedParam calculatedParam = judgeExecuteParam(baseParam); CalculatedParam calculatedParam = judgeExecuteParam(baseParam);
//缓存监测点、接线方式数据
List<CsLineDTO> csLineDTOList = csLineFeignClient.getAllLineDetail().getData();
List<String> lineIdList = new ArrayList<>();
Map<String, Integer> lineConTypeMap = new HashMap<>();
if (CollectionUtils.isNotEmpty(csLineDTOList)) {
lineIdList = csLineDTOList.stream().map(CsLineDTO::getLineId).collect(Collectors.toList());
//接线方式(0-星型 1-角型 2-V型)
lineConTypeMap = csLineDTOList.stream()
.filter(dto -> dto.getLineId() != null)
.collect(Collectors.toMap(
CsLineDTO::getLineId,
dto -> dto.getConType() != null ? dto.getConType() : 0,
(v1, v2) -> v1
));
redisUtil.saveByKeyWithExpire("wlLineDetail", lineConTypeMap, 3600L*3);
}
// 测点索引 // 测点索引
if (CollectionUtils.isEmpty(calculatedParam.getIdList())) { if (CollectionUtils.isEmpty(calculatedParam.getIdList())) {
calculatedParam.setIdList(csLineFeignClient.getAllLine().getData()); calculatedParam.setIdList(lineIdList);
} else {
calculatedParam.setIdList(calculatedParam.getIdList());
} }
LiteflowResponse liteflowResponse; LiteflowResponse liteflowResponse;
if (baseParam.isRepair()) { if (baseParam.isRepair()) {

View File

@@ -0,0 +1,91 @@
package com.njcn.algorithm.controller;
import com.njcn.algorithm.pojo.dto.PqReasonableRangeDto;
import com.njcn.algorithm.pojo.param.DataCleanParam;
import com.njcn.algorithm.service.line.IPqReasonableRangeService;
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.csdevice.enums.DeviceOperate;
import com.njcn.web.advice.DeviceLog;
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.*;
import javax.annotation.Resource;
import java.util.List;
/**
* <p>
* 前端控制器
* </p>
*
* @author xy
* @since 2025-02-13
*/
@Validated
@Slf4j
@Controller
@RestController
@RequestMapping("/pqReasonableRange")
@Api(tags = "数据清洗标准库")
public class PqReasonableRangeController extends BaseController {
@Resource
private IPqReasonableRangeService pqReasonableRangeService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON,operateType = OperateType.QUERY)
@PostMapping("/getData")
@ApiOperation("按条件获取数据合理范围")
public HttpResult<List<PqReasonableRangeDto>> getData(@RequestBody DataCleanParam param) {
String methodDescribe = getMethodDescribe("getData");
List<PqReasonableRangeDto> list = pqReasonableRangeService.getReasonableRangeList(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON,operateType = OperateType.ADD)
@PostMapping("/save")
@ApiOperation("新增数据合理范围")
public HttpResult<String> save(@RequestBody @Validated PqReasonableRangeDto dto) {
String methodDescribe = getMethodDescribe("save");
boolean result = pqReasonableRangeService.savePqReasonableRange(dto);
if (result) {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, "新增成功", methodDescribe);
}
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, "新增失败", methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON,operateType = OperateType.UPDATE)
@PostMapping("/update")
@ApiOperation("更新数据合理范围")
public HttpResult<String> update(@RequestBody @Validated PqReasonableRangeDto dto) {
String methodDescribe = getMethodDescribe("update");
boolean result = pqReasonableRangeService.updatePqReasonableRange(dto);
if (result) {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, "更新成功", methodDescribe);
}
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, "更新失败", methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/delete")
@ApiOperation("删除数据合理范围")
@DeviceLog(operateType = DeviceOperate.DELETE)
public HttpResult<String> delete(@RequestParam("id") String id) {
String methodDescribe = getMethodDescribe("delete");
boolean result = pqReasonableRangeService.deletePqReasonableRange(id);
if (result) {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, "删除成功", methodDescribe);
}
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, "删除失败", methodDescribe);
}
}

View File

@@ -1,10 +1,7 @@
package com.njcn.dataProcess.dao.relation.mapper; package com.njcn.algorithm.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.dataProcess.pojo.dto.PqReasonableRangeDto; import com.njcn.algorithm.pojo.po.PqReasonableRange;
import com.njcn.dataProcess.pojo.po.PqReasonableRange;
import java.util.List;
/** /**
* <p> * <p>

View File

@@ -1,7 +1,7 @@
package com.njcn.algorithm.service.line; package com.njcn.algorithm.service.line;
import com.njcn.algorithm.pojo.bo.CalculatedParam; import com.njcn.algorithm.pojo.bo.CalculatedParam;
import com.njcn.dataProcess.pojo.dto.PqReasonableRangeDto; import com.njcn.algorithm.pojo.dto.PqReasonableRangeDto;
import com.njcn.device.pq.pojo.vo.LineDetailVO; import com.njcn.device.pq.pojo.vo.LineDetailVO;
import com.njcn.system.pojo.po.DictData; import com.njcn.system.pojo.po.DictData;

View File

@@ -2,7 +2,6 @@ package com.njcn.algorithm.service.line;
import com.njcn.algorithm.pojo.bo.CalculatedParam; import com.njcn.algorithm.pojo.bo.CalculatedParam;
import java.util.concurrent.CompletableFuture;
/** /**
* @author xy * @author xy

View File

@@ -1,9 +1,9 @@
package com.njcn.dataProcess.service; package com.njcn.algorithm.service.line;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.dataProcess.param.DataCleanParam; import com.njcn.algorithm.pojo.dto.PqReasonableRangeDto;
import com.njcn.dataProcess.pojo.dto.PqReasonableRangeDto; import com.njcn.algorithm.pojo.param.DataCleanParam;
import com.njcn.dataProcess.pojo.po.PqReasonableRange; import com.njcn.algorithm.pojo.po.PqReasonableRange;
import java.util.List; import java.util.List;
@@ -24,4 +24,10 @@ public interface IPqReasonableRangeService extends IService<PqReasonableRange> {
*/ */
List<PqReasonableRangeDto> getReasonableRangeList(DataCleanParam param); List<PqReasonableRangeDto> getReasonableRangeList(DataCleanParam param);
boolean savePqReasonableRange(PqReasonableRangeDto dto);
boolean updatePqReasonableRange(PqReasonableRangeDto dto);
boolean deletePqReasonableRange(String id);
} }

View File

@@ -3,13 +3,15 @@ package com.njcn.algorithm.serviceimpl.line;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.njcn.algorithm.pojo.bo.CalculatedParam; import com.njcn.algorithm.pojo.bo.CalculatedParam;
import com.njcn.algorithm.pojo.dto.PqReasonableRangeDto;
import com.njcn.algorithm.pojo.param.DataCleanParam;
import com.njcn.algorithm.service.line.FlowAsyncService; import com.njcn.algorithm.service.line.FlowAsyncService;
import com.njcn.algorithm.service.line.IDataCleanService; import com.njcn.algorithm.service.line.IDataCleanService;
import com.njcn.algorithm.service.line.IPqReasonableRangeService;
import com.njcn.algorithm.utils.MemorySizeUtil; import com.njcn.algorithm.utils.MemorySizeUtil;
import com.njcn.dataProcess.api.*; import com.njcn.dataProcess.api.*;
import com.njcn.dataProcess.dto.RmpEventDetailDTO; import com.njcn.dataProcess.dto.RmpEventDetailDTO;
import com.njcn.dataProcess.enums.DataCleanEnum; import com.njcn.dataProcess.enums.DataCleanEnum;
import com.njcn.dataProcess.param.DataCleanParam;
import com.njcn.dataProcess.param.LineCountEvaluateParam; import com.njcn.dataProcess.param.LineCountEvaluateParam;
import com.njcn.dataProcess.pojo.dto.*; import com.njcn.dataProcess.pojo.dto.*;
import com.njcn.dataProcess.pojo.po.PqDataVerify; import com.njcn.dataProcess.pojo.po.PqDataVerify;
@@ -33,7 +35,9 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.time.*; import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.function.Function; import java.util.function.Function;
@@ -48,8 +52,8 @@ public class DataCleanServiceImpl implements IDataCleanService {
private static final Logger logger = LoggerFactory.getLogger(DataCleanServiceImpl.class); private static final Logger logger = LoggerFactory.getLogger(DataCleanServiceImpl.class);
@Value("${line.num}") @Value("${line.num:10}")
private Integer NUM = 100; private Integer NUM;
@Resource @Resource
private DataVFeignClient dataVFeignClient; private DataVFeignClient dataVFeignClient;
@@ -80,7 +84,7 @@ public class DataCleanServiceImpl implements IDataCleanService {
@Resource @Resource
private PqDataVerifyFeignClient pqDataVerifyFeignClient; private PqDataVerifyFeignClient pqDataVerifyFeignClient;
@Resource @Resource
private PqReasonableRangeFeignClient pqReasonableRangeFeignClient; private IPqReasonableRangeService pqReasonableRangeService;
@Resource @Resource
private LineFeignClient lineFeignClient; private LineFeignClient lineFeignClient;
@Resource @Resource
@@ -97,7 +101,7 @@ public class DataCleanServiceImpl implements IDataCleanService {
public void dataQualityCleanHandler(CalculatedParam calculatedParam) { public void dataQualityCleanHandler(CalculatedParam calculatedParam) {
MemorySizeUtil.getNowMemory(); MemorySizeUtil.getNowMemory();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
logger.info("{},数据质量清洗算法执行=====》", LocalDateTime.now()); logger.info("{},{}数据质量清洗算法执行=====》", LocalDateTime.now(),calculatedParam.getDataDate());
//获取监测点的统计间隔 //获取监测点的统计间隔
List<String> listOfString = (List<String>) (List<?>) calculatedParam.getIdList(); List<String> listOfString = (List<String>) (List<?>) calculatedParam.getIdList();
List<LineDetailDataVO> lineDetailDataVOS = lineFeignClient.getLineDetailList(listOfString).getData(); List<LineDetailDataVO> lineDetailDataVOS = lineFeignClient.getLineDetailList(listOfString).getData();
@@ -286,7 +290,7 @@ public class DataCleanServiceImpl implements IDataCleanService {
DictData dip = dicDataFeignClient.getDicDataByCodeAndType(DicDataEnum.VOLTAGE_DIP.getCode(), DicDataTypeEnum.EVENT_STATIS.getCode()).getData(); DictData dip = dicDataFeignClient.getDicDataByCodeAndType(DicDataEnum.VOLTAGE_DIP.getCode(), DicDataTypeEnum.EVENT_STATIS.getCode()).getData();
DictData rise = dicDataFeignClient.getDicDataByCodeAndType(DicDataEnum.VOLTAGE_RISE.getCode(), DicDataTypeEnum.EVENT_STATIS.getCode()).getData(); DictData rise = dicDataFeignClient.getDicDataByCodeAndType(DicDataEnum.VOLTAGE_RISE.getCode(), DicDataTypeEnum.EVENT_STATIS.getCode()).getData();
MemorySizeUtil.getNowMemory(); MemorySizeUtil.getNowMemory();
logger.info("{},原始表数据清洗=====》", LocalDateTime.now()); logger.info("{},{}原始表数据清洗=====》", LocalDateTime.now(),calculatedParam.getDataDate());
//获取标准 //获取标准
Map<String, List<PqReasonableRangeDto>> map = getStandardData(); Map<String, List<PqReasonableRangeDto>> map = getStandardData();
//获取监测点台账信息 //获取监测点台账信息
@@ -300,7 +304,7 @@ public class DataCleanServiceImpl implements IDataCleanService {
lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate())); lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfDay(calculatedParam.getDataDate())); lineParam.setEndTime(TimeUtils.getEndOfDay(calculatedParam.getDataDate()));
for (int i = 0; i < lineDetail.size(); i++) { for (int i = 0; i < lineDetail.size(); i++) {
logger.info( calculatedParam.getDataDate()+"总数据:" + lineDetail.size() + "=====》当前第" + (i + 1)); // logger.info( calculatedParam.getDataDate()+"总数据:" + lineDetail.size() + "=====》当前第" + (i + 1));
LineDetailVO.Detail item = lineDetail.get(i); LineDetailVO.Detail item = lineDetail.get(i);
flowService.lineDataClean(item, map, calculatedParam.getDataDate(), dip, rise,lineDetail.size(),(i + 1)); flowService.lineDataClean(item, map, calculatedParam.getDataDate(), dip, rise,lineDetail.size(),(i + 1));
} }
@@ -644,7 +648,7 @@ public class DataCleanServiceImpl implements IDataCleanService {
DataCleanParam param = new DataCleanParam(); DataCleanParam param = new DataCleanParam();
param.setSystemType(DataCleanEnum.Pqs.getCode()); param.setSystemType(DataCleanEnum.Pqs.getCode());
// param.setDataSource(DataCleanEnum.InfluxDB.getCode()); // param.setDataSource(DataCleanEnum.InfluxDB.getCode());
List<PqReasonableRangeDto> list = pqReasonableRangeFeignClient.getData(param).getData(); List<PqReasonableRangeDto> list = pqReasonableRangeService.getReasonableRangeList(param);
if (CollUtil.isNotEmpty(list)) { if (CollUtil.isNotEmpty(list)) {
pqReasonableRangeDtoMap = list.stream().collect(Collectors.groupingBy(PqReasonableRangeDto::getInfluxdbTableName)); pqReasonableRangeDtoMap = list.stream().collect(Collectors.groupingBy(PqReasonableRangeDto::getInfluxdbTableName));
} }
@@ -662,7 +666,7 @@ public class DataCleanServiceImpl implements IDataCleanService {
if (ObjectUtil.isNotNull(tableName)) { if (ObjectUtil.isNotNull(tableName)) {
param.setTableName(tableName); param.setTableName(tableName);
} }
List<PqReasonableRangeDto> list = pqReasonableRangeFeignClient.getData(param).getData(); List<PqReasonableRangeDto> list = pqReasonableRangeService.getReasonableRangeList(param);
if (CollUtil.isNotEmpty(list)) { if (CollUtil.isNotEmpty(list)) {
pqReasonableRangeDtoMap = list.stream().collect(Collectors.toMap(PqReasonableRangeDto::getIndexCode, Function.identity())); pqReasonableRangeDtoMap = list.stream().collect(Collectors.toMap(PqReasonableRangeDto::getIndexCode, Function.identity()));
} }

View File

@@ -3,6 +3,7 @@ package com.njcn.algorithm.serviceimpl.line;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import com.njcn.algorithm.pojo.bo.CalculatedParam; import com.njcn.algorithm.pojo.bo.CalculatedParam;
import com.njcn.algorithm.service.line.IDataComAssService; import com.njcn.algorithm.service.line.IDataComAssService;
import com.njcn.algorithm.utils.MemorySizeUtil;
import com.njcn.dataProcess.api.DataComAssFeignClient; import com.njcn.dataProcess.api.DataComAssFeignClient;
import com.njcn.dataProcess.api.DataFlickerFeignClient; import com.njcn.dataProcess.api.DataFlickerFeignClient;
import com.njcn.dataProcess.api.DataVFeignClient; import com.njcn.dataProcess.api.DataVFeignClient;
@@ -38,8 +39,8 @@ import java.util.stream.Collectors;
public class DataComAssServiceImpl implements IDataComAssService { public class DataComAssServiceImpl implements IDataComAssService {
private static final Logger logger = LoggerFactory.getLogger(DayDataServiceImpl.class); private static final Logger logger = LoggerFactory.getLogger(DayDataServiceImpl.class);
@Value("${line.num}")
private Integer NUM = 100;
@Resource @Resource
private DataVFeignClient dataVFeignClient; private DataVFeignClient dataVFeignClient;
@@ -50,10 +51,17 @@ public class DataComAssServiceImpl implements IDataComAssService {
@Resource @Resource
private PqDataVerifyFeignClient pqDataVerifyFeignClient; private PqDataVerifyFeignClient pqDataVerifyFeignClient;
/**
* 查询配置 辽宁版本比较特殊没有CP95值采用平均值进行判断
*/
@Value("${version.used:master}")
private String versionUsed;
@Override @Override
public void dataComAssHandler(CalculatedParam calculatedParam) { public void dataComAssHandler(CalculatedParam calculatedParam) {
List<DataComassesDPO> list = new ArrayList<>(); List<DataComassesDPO> list = new ArrayList<>();
logger.info("{},r_stat_comasses_d算法开始=====》", LocalDateTime.now()); MemorySizeUtil.getNowMemory();
logger.info("{},{}r_stat_comasses_d算法开始=====》", LocalDateTime.now(),calculatedParam.getDataDate());
LineCountEvaluateParam lineParam = new LineCountEvaluateParam(); LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate())); lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfDay(calculatedParam.getDataDate())); lineParam.setEndTime(TimeUtils.getEndOfDay(calculatedParam.getDataDate()));
@@ -136,7 +144,7 @@ public class DataComAssServiceImpl implements IDataComAssService {
BigDecimal hundred = BigDecimal.valueOf(100); BigDecimal hundred = BigDecimal.valueOf(100);
//************************************电压偏差******************************************** //************************************电压偏差********************************************
lineParam.setPhasicType(Arrays.asList("A", "B", "C")); lineParam.setPhasicType(Arrays.asList("A", "B", "C"));
lineParam.setValueType(Arrays.asList("AVG")); lineParam.setValueType(Collections.singletonList("AVG"));
lineParam.setColumnName("vu_dev"); lineParam.setColumnName("vu_dev");
lineParam.setGe("10"); lineParam.setGe("10");
Integer vuDev1 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData(); Integer vuDev1 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData();
@@ -167,6 +175,7 @@ public class DataComAssServiceImpl implements IDataComAssService {
//************************************频率偏差******************************************** //************************************频率偏差********************************************
lineParam.setColumnName("freq_dev"); lineParam.setColumnName("freq_dev");
lineParam.setGe("0.3"); lineParam.setGe("0.3");
lineParam.setGe(null);
Integer freqDev1 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData(); Integer freqDev1 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData();
lineParam.setGe("0.2"); lineParam.setGe("0.2");
@@ -194,8 +203,15 @@ public class DataComAssServiceImpl implements IDataComAssService {
} }
//************************************谐波畸变率******************************************** //************************************谐波畸变率********************************************
lineParam.setColumnName("v_thd"); lineParam.setColumnName("v_thd");
lineParam.setValueType(Arrays.asList("CP95"));
if("liaoning".equals(versionUsed)){
lineParam.setValueType(Collections.singletonList("AVG"));
}else {
lineParam.setValueType(Collections.singletonList("CP95"));
}
lineParam.setGe("6"); lineParam.setGe("6");
lineParam.setLt(null);
Integer vThd1 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData(); Integer vThd1 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData();
lineParam.setGe("4"); lineParam.setGe("4");
@@ -224,7 +240,12 @@ public class DataComAssServiceImpl implements IDataComAssService {
//************************************三相电压不平衡度******************************************** //************************************三相电压不平衡度********************************************
lineParam.setColumnName("v_unbalance"); lineParam.setColumnName("v_unbalance");
if("liaoning".equals(versionUsed)){
lineParam.setValueType(Collections.singletonList("MAX"));
}
lineParam.setPhasicType(Collections.singletonList("T"));
lineParam.setGe("4"); lineParam.setGe("4");
lineParam.setLt(null);
Integer vUnbalance1 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData(); Integer vUnbalance1 = dataVFeignClient.getColumnNameCountRawData(lineParam).getData();
lineParam.setGe("2"); lineParam.setGe("2");
@@ -253,7 +274,9 @@ public class DataComAssServiceImpl implements IDataComAssService {
//************************************电压波动(短时闪变)******************************************** //************************************电压波动(短时闪变)********************************************
lineParam.setColumnName("pst"); lineParam.setColumnName("pst");
lineParam.setValueType(null); lineParam.setValueType(null);
lineParam.setPhasicType(Arrays.asList("A", "B", "C"));
lineParam.setGe("0.8"); lineParam.setGe("0.8");
lineParam.setLt("1");
Integer plt1 = dataFlickerFeignClient.getColumnNameCountRawData(lineParam).getData(); Integer plt1 = dataFlickerFeignClient.getColumnNameCountRawData(lineParam).getData();
lineParam.setGe("0.6"); lineParam.setGe("0.6");
@@ -273,11 +296,11 @@ public class DataComAssServiceImpl implements IDataComAssService {
Integer plt5 = dataFlickerFeignClient.getColumnNameCountRawData(lineParam).getData(); Integer plt5 = dataFlickerFeignClient.getColumnNameCountRawData(lineParam).getData();
BigDecimal pltAll = BigDecimal.valueOf(plt1 + plt2 + plt3 + plt4 + plt5); BigDecimal pltAll = BigDecimal.valueOf(plt1 + plt2 + plt3 + plt4 + plt5);
if (pltAll.compareTo(BigDecimal.ZERO) != 0) { if (pltAll.compareTo(BigDecimal.ZERO) != 0) {
outMap.put("data_plt1", BigDecimal.valueOf(plt1).multiply(hundred).divide(pltAll, 3, RoundingMode.HALF_UP)); outMap.put("data_pst1", BigDecimal.valueOf(plt1).multiply(hundred).divide(pltAll, 3, RoundingMode.HALF_UP));
outMap.put("data_plt2", BigDecimal.valueOf(plt2).multiply(hundred).divide(pltAll, 3, RoundingMode.HALF_UP)); outMap.put("data_pst2", BigDecimal.valueOf(plt2).multiply(hundred).divide(pltAll, 3, RoundingMode.HALF_UP));
outMap.put("data_plt3", BigDecimal.valueOf(plt3).multiply(hundred).divide(pltAll, 3, RoundingMode.HALF_UP)); outMap.put("data_pst3", BigDecimal.valueOf(plt3).multiply(hundred).divide(pltAll, 3, RoundingMode.HALF_UP));
outMap.put("data_plt4", BigDecimal.valueOf(plt4).multiply(hundred).divide(pltAll, 3, RoundingMode.HALF_UP)); outMap.put("data_pst4", BigDecimal.valueOf(plt4).multiply(hundred).divide(pltAll, 3, RoundingMode.HALF_UP));
outMap.put("data_plt5", BigDecimal.valueOf(plt5).multiply(hundred).divide(pltAll, 3, RoundingMode.HALF_UP)); outMap.put("data_pst5", BigDecimal.valueOf(plt5).multiply(hundred).divide(pltAll, 3, RoundingMode.HALF_UP));
} }
if (!CollUtil.isEmpty(outMap)) { if (!CollUtil.isEmpty(outMap)) {

View File

@@ -35,8 +35,9 @@ public class DayDataServiceImpl implements IDayDataService {
private static final Logger logger = LoggerFactory.getLogger(DayDataServiceImpl.class); private static final Logger logger = LoggerFactory.getLogger(DayDataServiceImpl.class);
@Value("${line.num}") @Value("${line.num:10}")
private Integer NUM = 100; private Integer NUM;
@Resource @Resource
private DataVFeignClient dataVFeignClient; private DataVFeignClient dataVFeignClient;
@Resource @Resource
@@ -75,7 +76,8 @@ public class DayDataServiceImpl implements IDayDataService {
@Override @Override
public void dataVHandler(CalculatedParam calculatedParam) { public void dataVHandler(CalculatedParam calculatedParam) {
logger.info("{},dataV表转r_stat_data_v_d算法开始=====》", LocalDateTime.now()); MemorySizeUtil.getNowMemory();
logger.info("{},{}dataV表转r_stat_data_v_d算法开始=====》", LocalDateTime.now(),calculatedParam.getDataDate());
List<DataVDto> result = new ArrayList<>(); List<DataVDto> result = new ArrayList<>();
//远程接口获取分钟数据 //远程接口获取分钟数据
LineCountEvaluateParam lineParam = new LineCountEvaluateParam(); LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
@@ -91,7 +93,6 @@ public class DayDataServiceImpl implements IDayDataService {
//获取原始数据 //获取原始数据
List<CommonMinuteDto> partList = dataVFeignClient.getBaseData(lineParam).getData(); List<CommonMinuteDto> partList = dataVFeignClient.getBaseData(lineParam).getData();
if (CollUtil.isNotEmpty(partList)) { if (CollUtil.isNotEmpty(partList)) {
logger.info("{}dataV集合大小为>>>>>>>>>>>>{}",lineParam.getStartTime(),MemorySizeUtil.getObjectSize(partList));
partList.forEach(item->{ partList.forEach(item->{
//相别 //相别
List<CommonMinuteDto.PhasicType> phasicTypeList = item.getPhasicTypeList(); List<CommonMinuteDto.PhasicType> phasicTypeList = item.getPhasicTypeList();
@@ -125,7 +126,8 @@ public class DayDataServiceImpl implements IDayDataService {
@Override @Override
public void dataIHandler(CalculatedParam calculatedParam) { public void dataIHandler(CalculatedParam calculatedParam) {
logger.info("{},dataI表转r_stat_data_i_d算法开始=====》", LocalDateTime.now()); MemorySizeUtil.getNowMemory();
logger.info("{},{}dataI表转r_stat_data_i_d算法开始=====》", LocalDateTime.now(),calculatedParam.getDataDate());
List<DataIDto> result = new ArrayList<>(); List<DataIDto> result = new ArrayList<>();
//远程接口获取分钟数据 //远程接口获取分钟数据
LineCountEvaluateParam lineParam = new LineCountEvaluateParam(); LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
@@ -173,7 +175,8 @@ public class DayDataServiceImpl implements IDayDataService {
@Override @Override
public void dataFlickerHandler(CalculatedParam calculatedParam) { public void dataFlickerHandler(CalculatedParam calculatedParam) {
logger.info("{},dataFlicker表转r_stat_data_flicker_d算法开始=====》", LocalDateTime.now()); MemorySizeUtil.getNowMemory();
logger.info("{},{}dataFlicker表转r_stat_data_flicker_d算法开始=====》", LocalDateTime.now(),calculatedParam.getDataDate());
List<String> valueList = Arrays.asList("AVG","MAX","MIN","CP95"); List<String> valueList = Arrays.asList("AVG","MAX","MIN","CP95");
List<DataFlickerDto> result = new ArrayList<>(); List<DataFlickerDto> result = new ArrayList<>();
//远程接口获取分钟数据 //远程接口获取分钟数据
@@ -222,7 +225,8 @@ public class DayDataServiceImpl implements IDayDataService {
@Override @Override
public void dataFlucHandler(CalculatedParam calculatedParam) { public void dataFlucHandler(CalculatedParam calculatedParam) {
logger.info("{},dataFluc表转r_stat_data_fluc_d算法开始=====》", LocalDateTime.now()); MemorySizeUtil.getNowMemory();
logger.info("{},{}dataFluc表转r_stat_data_fluc_d算法开始=====》", LocalDateTime.now(),calculatedParam.getDataDate());
List<String> valueList = Arrays.asList("AVG","MAX","MIN","CP95"); List<String> valueList = Arrays.asList("AVG","MAX","MIN","CP95");
List<DataFlucDto> result = new ArrayList<>(); List<DataFlucDto> result = new ArrayList<>();
//远程接口获取分钟数据 //远程接口获取分钟数据
@@ -271,7 +275,8 @@ public class DayDataServiceImpl implements IDayDataService {
@Override @Override
public void dataHarmPhasicIHandler(CalculatedParam calculatedParam) { public void dataHarmPhasicIHandler(CalculatedParam calculatedParam) {
logger.info("{},dataHarmPhasicI表转r_stat_data_harmphasic_i_d算法开始=====》", LocalDateTime.now()); MemorySizeUtil.getNowMemory();
logger.info("{},{}dataHarmPhasicI表转r_stat_data_harmphasic_i_d算法开始=====》", LocalDateTime.now(),calculatedParam.getDataDate());
List<DataHarmPhasicIDto> result = new ArrayList<>(); List<DataHarmPhasicIDto> result = new ArrayList<>();
//远程接口获取分钟数据 //远程接口获取分钟数据
LineCountEvaluateParam lineParam = new LineCountEvaluateParam(); LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
@@ -319,7 +324,8 @@ public class DayDataServiceImpl implements IDayDataService {
@Override @Override
public void dataHarmPhasicVHandler(CalculatedParam calculatedParam) { public void dataHarmPhasicVHandler(CalculatedParam calculatedParam) {
logger.info("{},dataHarmPhasicV表转r_stat_data_harmphasic_v_d算法开始=====》", LocalDateTime.now()); MemorySizeUtil.getNowMemory();
logger.info("{},{}dataHarmPhasicV表转r_stat_data_harmphasic_v_d算法开始=====》", LocalDateTime.now(),calculatedParam.getDataDate());
List<DataHarmPhasicVDto> result = new ArrayList<>(); List<DataHarmPhasicVDto> result = new ArrayList<>();
//远程接口获取分钟数据 //远程接口获取分钟数据
LineCountEvaluateParam lineParam = new LineCountEvaluateParam(); LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
@@ -367,7 +373,8 @@ public class DayDataServiceImpl implements IDayDataService {
@Override @Override
public void dataHarmPowerPHandler(CalculatedParam calculatedParam) { public void dataHarmPowerPHandler(CalculatedParam calculatedParam) {
logger.info("{},dataHarmPowerP表转r_stat_data_harmpower_p_d算法开始=====》", LocalDateTime.now()); MemorySizeUtil.getNowMemory();
logger.info("{},{}dataHarmPowerP表转r_stat_data_harmpower_p_d算法开始=====》", LocalDateTime.now(),calculatedParam.getDataDate());
List<DataHarmPowerPDto> result = new ArrayList<>(); List<DataHarmPowerPDto> result = new ArrayList<>();
//远程接口获取分钟数据 //远程接口获取分钟数据
LineCountEvaluateParam lineParam = new LineCountEvaluateParam(); LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
@@ -415,7 +422,8 @@ public class DayDataServiceImpl implements IDayDataService {
@Override @Override
public void dataHarmPowerQHandler(CalculatedParam calculatedParam) { public void dataHarmPowerQHandler(CalculatedParam calculatedParam) {
logger.info("{},dataHarmPowerQ表转r_stat_data_harmpower_q_d算法开始=====》", LocalDateTime.now()); MemorySizeUtil.getNowMemory();
logger.info("{},{}dataHarmPowerQ表转r_stat_data_harmpower_q_d算法开始=====》", LocalDateTime.now(),calculatedParam.getDataDate());
List<DataHarmPowerQDto> result = new ArrayList<>(); List<DataHarmPowerQDto> result = new ArrayList<>();
//远程接口获取分钟数据 //远程接口获取分钟数据
LineCountEvaluateParam lineParam = new LineCountEvaluateParam(); LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
@@ -463,7 +471,8 @@ public class DayDataServiceImpl implements IDayDataService {
@Override @Override
public void dataHarmPowerSHandler(CalculatedParam calculatedParam) { public void dataHarmPowerSHandler(CalculatedParam calculatedParam) {
logger.info("{},dataHarmPowerS表转r_stat_data_harmpower_s_d算法开始=====》", LocalDateTime.now()); MemorySizeUtil.getNowMemory();
logger.info("{},{}dataHarmPowerS表转r_stat_data_harmpower_s_d算法开始=====》", LocalDateTime.now(),calculatedParam.getDataDate());
List<DataHarmPowerSDto> result = new ArrayList<>(); List<DataHarmPowerSDto> result = new ArrayList<>();
//远程接口获取分钟数据 //远程接口获取分钟数据
LineCountEvaluateParam lineParam = new LineCountEvaluateParam(); LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
@@ -511,7 +520,8 @@ public class DayDataServiceImpl implements IDayDataService {
@Override @Override
public void dataHarmRateIHandler(CalculatedParam calculatedParam) { public void dataHarmRateIHandler(CalculatedParam calculatedParam) {
logger.info("{},dataHarmRateI表转r_stat_data_harmRate_i_d算法开始=====》", LocalDateTime.now()); MemorySizeUtil.getNowMemory();
logger.info("{},{}dataHarmRateI表转r_stat_data_harmRate_i_d算法开始=====》", LocalDateTime.now(),calculatedParam.getDataDate());
List<DataHarmRateIDto> result = new ArrayList<>(); List<DataHarmRateIDto> result = new ArrayList<>();
//远程接口获取分钟数据 //远程接口获取分钟数据
LineCountEvaluateParam lineParam = new LineCountEvaluateParam(); LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
@@ -559,7 +569,8 @@ public class DayDataServiceImpl implements IDayDataService {
@Override @Override
public void dataHarmRateVHandler(CalculatedParam calculatedParam) { public void dataHarmRateVHandler(CalculatedParam calculatedParam) {
logger.info("{},dataHarmRateV表转r_stat_data_harmRate_v_d算法开始=====》", LocalDateTime.now()); MemorySizeUtil.getNowMemory();
logger.info("{},{}dataHarmRateV表转r_stat_data_harmRate_v_d算法开始=====》", LocalDateTime.now(),calculatedParam.getDataDate());
List<DataHarmRateVDto> result = new ArrayList<>(); List<DataHarmRateVDto> result = new ArrayList<>();
//远程接口获取分钟数据 //远程接口获取分钟数据
LineCountEvaluateParam lineParam = new LineCountEvaluateParam(); LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
@@ -607,7 +618,8 @@ public class DayDataServiceImpl implements IDayDataService {
@Override @Override
public void dataInHarmIHandler(CalculatedParam calculatedParam) { public void dataInHarmIHandler(CalculatedParam calculatedParam) {
logger.info("{},dataInHarmI表转r_stat_data_inharm_i_d算法开始=====》", LocalDateTime.now()); MemorySizeUtil.getNowMemory();
logger.info("{},{}dataInHarmI表转r_stat_data_inharm_i_d算法开始=====》", LocalDateTime.now(),calculatedParam.getDataDate());
List<DataInHarmIDto> result = new ArrayList<>(); List<DataInHarmIDto> result = new ArrayList<>();
//远程接口获取分钟数据 //远程接口获取分钟数据
LineCountEvaluateParam lineParam = new LineCountEvaluateParam(); LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
@@ -655,7 +667,8 @@ public class DayDataServiceImpl implements IDayDataService {
@Override @Override
public void dataInHarmVHandler(CalculatedParam calculatedParam) { public void dataInHarmVHandler(CalculatedParam calculatedParam) {
logger.info("{},dataInHarmV表转r_stat_data_inharm_v_d算法开始=====》", LocalDateTime.now()); MemorySizeUtil.getNowMemory();
logger.info("{},{}dataInHarmV表转r_stat_data_inharm_v_d算法开始=====》", LocalDateTime.now(),calculatedParam.getDataDate());
List<DataInHarmVDto> result = new ArrayList<>(); List<DataInHarmVDto> result = new ArrayList<>();
//远程接口获取分钟数据 //远程接口获取分钟数据
LineCountEvaluateParam lineParam = new LineCountEvaluateParam(); LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
@@ -703,7 +716,8 @@ public class DayDataServiceImpl implements IDayDataService {
@Override @Override
public void dataPltHandler(CalculatedParam calculatedParam) { public void dataPltHandler(CalculatedParam calculatedParam) {
logger.info("{},dataPlt表转r_stat_data_plt_d算法开始=====》", LocalDateTime.now()); MemorySizeUtil.getNowMemory();
logger.info("{},{}dataPlt表转r_stat_data_plt_d算法开始=====》", LocalDateTime.now(),calculatedParam.getDataDate());
List<DataPltDto> result = new ArrayList<>(); List<DataPltDto> result = new ArrayList<>();
List<String> valueList = Arrays.asList("AVG","MAX","MIN","CP95"); List<String> valueList = Arrays.asList("AVG","MAX","MIN","CP95");
//远程接口获取分钟数据 //远程接口获取分钟数据

View File

@@ -7,6 +7,7 @@ import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.nacos.shaded.com.google.gson.Gson; import com.alibaba.nacos.shaded.com.google.gson.Gson;
import com.njcn.algorithm.pojo.bo.CalculatedParam; import com.njcn.algorithm.pojo.bo.CalculatedParam;
import com.njcn.algorithm.pojo.dto.PqReasonableRangeDto;
import com.njcn.algorithm.service.line.FlowAsyncService; import com.njcn.algorithm.service.line.FlowAsyncService;
import com.njcn.dataProcess.api.*; import com.njcn.dataProcess.api.*;
import com.njcn.dataProcess.dto.DataCleanJsonDTO; import com.njcn.dataProcess.dto.DataCleanJsonDTO;
@@ -92,7 +93,7 @@ public class FlowAsyncServiceImpl implements FlowAsyncService {
@Override @Override
@Async("asyncExecutor") @Async("asyncExecutor")
public void lineDataClean(LineDetailVO.Detail line, Map<String, List<PqReasonableRangeDto>> map, String dataDate,DictData dip,DictData rise,int size,int i) { public void lineDataClean(LineDetailVO.Detail line, Map<String, List<PqReasonableRangeDto>> map, String dataDate, DictData dip, DictData rise, int size, int i) {
LineDetailVO.Detail item = line; LineDetailVO.Detail item = line;
List<Map<String, Object>> resultData = new ArrayList<>(); List<Map<String, Object>> resultData = new ArrayList<>();
Set<String> allTimeSet = new HashSet<>(); Set<String> allTimeSet = new HashSet<>();
@@ -389,16 +390,16 @@ public class FlowAsyncServiceImpl implements FlowAsyncService {
bak.setState(1); bak.setState(1);
//存储文件 //存储文件
InputStream reportStream = IoUtil.toStream(new Gson().toJson(resultData), CharsetUtil.UTF_8); InputStream reportStream = IoUtil.toStream(new Gson().toJson(resultData), CharsetUtil.UTF_8);
String[] date = dataDate.split("-");
String fileName = fileStorageUtil.uploadStreamSpecifyName( String fileName = fileStorageUtil.uploadStreamSpecifyName(
reportStream reportStream
, OssPath.DATA_CLEAN + dataDate + "/" , OssPath.DATA_CLEAN + date[0] + "/"+ date[1] + "/"+ date[2] + "/"
, item.getLineId() + ".txt"); , item.getLineId() + ".txt");
//存储数据 //存储数据
bak.setFilePath(fileName); bak.setFilePath(fileName);
} }
pqDataVerifyNewFeignClient.insertData(bak); pqDataVerifyNewFeignClient.insertData(bak);
resultData=null; resultData=null;
logger.info( dataDate+"总数据:" + size + "=====》当前第" + i+"已完成!");
System.gc(); System.gc();
} }

View File

@@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.ListUtil; import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.njcn.algorithm.pojo.bo.CalculatedParam; import com.njcn.algorithm.pojo.bo.CalculatedParam;
import com.njcn.algorithm.service.line.IDataCrossingService; import com.njcn.algorithm.service.line.IDataCrossingService;
@@ -42,10 +43,7 @@ import java.lang.reflect.Method;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -61,7 +59,7 @@ import java.util.stream.Collectors;
public class IDataCrossingServiceImpl implements IDataCrossingService { public class IDataCrossingServiceImpl implements IDataCrossingService {
private static final Logger logger = LoggerFactory.getLogger(DayDataServiceImpl.class); private static final Logger logger = LoggerFactory.getLogger(DayDataServiceImpl.class);
@Value("${line.num}") @Value("${line.num:10}")
private Integer NUM; private Integer NUM;
@Resource @Resource
@@ -106,29 +104,28 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
} }
Map<String, Overlimit> overLimitMap = overLimitList.stream().collect(Collectors.toMap(Overlimit::getId, Function.identity())); Map<String, Overlimit> overLimitMap = overLimitList.stream().collect(Collectors.toMap(Overlimit::getId, Function.identity()));
//以100个监测点分片处理 //以100个监测点分片处理
List<List<String>> pendingIds = ListUtils.partition(lineIds, 1);
ArrayList<String> phase = ListUtil.toList(PhaseType.PHASE_A, PhaseType.PHASE_B, PhaseType.PHASE_C);
MemorySizeUtil.getNowMemory(); MemorySizeUtil.getNowMemory();
List<List<String>> pendingIds = ListUtils.partition(lineIds, 20);
ArrayList<String> phase = ListUtil.toList(PhaseType.PHASE_A, PhaseType.PHASE_B, PhaseType.PHASE_C);
List<CompletableFuture<Void>> futures = new ArrayList<>(); for (List<String> pendingId : pendingIds) {
for (int i = 0; i < pendingIds.size(); i++) { List<CompletableFuture<Void>> futures = new ArrayList<>();
logger.info(calculatedParam.getDataDate()+" 总分区数据:" + pendingIds.size() + "=====》当前第"+(i + 1)+"小分区"); for (String s : pendingId) {
List<String> list = pendingIds.get(i); CompletableFuture<Void> future = dataLimitRateAsync.lineDataRate(
// 获取Future calculatedParam.getDataDate(),
CompletableFuture<Void> future = dataLimitRateAsync.lineDataRate( Arrays.asList(s),
calculatedParam.getDataDate(), phase,
list, overLimitMap,
phase, pendingId.size(),
overLimitMap, pendingId.size(),
pendingIds.size(), lineParam.getType()
(i + 1), );
lineParam.getType() futures.add(future);
); }
CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();
futures.add(future);
} }
// 等待所有任务完成 // 等待所有任务完成
CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join(); System.err.println("limitRate表转r_stat_limit_rate_d算法开始执行日期为{},执行完成=====》"+calculatedParam.getDataDate());
System.gc(); System.gc();
} }
@@ -169,7 +166,8 @@ public class IDataCrossingServiceImpl implements IDataCrossingService {
@Override @Override
public void limitQualifiedDayHandler(CalculatedParam calculatedParam) { public void limitQualifiedDayHandler(CalculatedParam calculatedParam) {
logger.info("{},r_stat_limit_qualified_d算法开始=====》", LocalDateTime.now()); MemorySizeUtil.getNowMemory();
logger.info("{},{}r_stat_limit_qualified_d算法开始=====》", LocalDateTime.now(),calculatedParam.getDataDate());
LineCountEvaluateParam lineParam = new LineCountEvaluateParam(); LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate())); lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfDay(calculatedParam.getDataDate())); lineParam.setEndTime(TimeUtils.getEndOfDay(calculatedParam.getDataDate()));

View File

@@ -5,6 +5,7 @@ import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.date.LocalDateTimeUtil;
import com.njcn.algorithm.pojo.bo.CalculatedParam; import com.njcn.algorithm.pojo.bo.CalculatedParam;
import com.njcn.algorithm.service.line.IDataIntegrityService; import com.njcn.algorithm.service.line.IDataIntegrityService;
import com.njcn.algorithm.utils.MemorySizeUtil;
import com.njcn.dataProcess.api.DataIntegrityFeignClient; import com.njcn.dataProcess.api.DataIntegrityFeignClient;
import com.njcn.dataProcess.api.DataVFeignClient; import com.njcn.dataProcess.api.DataVFeignClient;
import com.njcn.dataProcess.dto.MeasurementCountDTO; import com.njcn.dataProcess.dto.MeasurementCountDTO;
@@ -42,8 +43,8 @@ public class IDataIntegrityServiceImpl implements IDataIntegrityService {
private static final Logger logger = LoggerFactory.getLogger(IDataIntegrityServiceImpl.class); private static final Logger logger = LoggerFactory.getLogger(IDataIntegrityServiceImpl.class);
@Value("${line.num}") @Value("${line.num:10}")
private Integer NUM = 100; private Integer NUM;
@Resource @Resource
private CommTerminalGeneralClient commTerminalGeneralClient; private CommTerminalGeneralClient commTerminalGeneralClient;
@Resource @Resource
@@ -54,7 +55,8 @@ public class IDataIntegrityServiceImpl implements IDataIntegrityService {
@Override @Override
public void dataIntegrity(CalculatedParam<String> calculatedParam) { public void dataIntegrity(CalculatedParam<String> calculatedParam) {
logger.info("{},integrity表转r_stat_integrity_d算法开始=====》", LocalDateTime.now()); MemorySizeUtil.getNowMemory();
logger.info("{},{}integrity表转r_stat_integrity_d算法开始=====》", LocalDateTime.now(),calculatedParam.getDataDate());
List<DataIntegrityDto> poList = new ArrayList<>(); List<DataIntegrityDto> poList = new ArrayList<>();
List<String> lineIds = calculatedParam.getIdList(); List<String> lineIds = calculatedParam.getIdList();
String beginDay = LocalDateTimeUtil.format( String beginDay = LocalDateTimeUtil.format(

View File

@@ -294,11 +294,11 @@ public class IDataLimitRateAsyncImpl implements IDataLimitRateAsync {
dataLimitRateDetailFeignClient.batchInsertion(detail); dataLimitRateDetailFeignClient.batchInsertion(detail);
} }
} }
logger.info(dataDate + " 总分区数据:" + size + "=====》当前第" + i + "小分区已完成!"); // logger.info(dataDate + " 总分区数据:" + size + "=====》当前第" + i + "小分区已完成!");
result = null; result = null;
if(i==size){ // if(i==size){
MemorySizeUtil.getNowMemory(); // MemorySizeUtil.getNowMemory();
} // }
System.gc(); System.gc();
return CompletableFuture.completedFuture(null); return CompletableFuture.completedFuture(null);

View File

@@ -9,6 +9,7 @@ import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.njcn.algorithm.pojo.bo.CalculatedParam; import com.njcn.algorithm.pojo.bo.CalculatedParam;
import com.njcn.algorithm.service.line.IDataOnlineRateService; import com.njcn.algorithm.service.line.IDataOnlineRateService;
import com.njcn.algorithm.utils.MemorySizeUtil;
import com.njcn.dataProcess.api.DataIntegrityFeignClient; import com.njcn.dataProcess.api.DataIntegrityFeignClient;
import com.njcn.dataProcess.api.DataOnlineRateFeignClient; import com.njcn.dataProcess.api.DataOnlineRateFeignClient;
import com.njcn.dataProcess.api.DataVFeignClient; import com.njcn.dataProcess.api.DataVFeignClient;
@@ -48,8 +49,8 @@ public class IDataOnlineRateServiceImpl implements IDataOnlineRateService {
private static final Logger logger = LoggerFactory.getLogger(IDataOnlineRateServiceImpl.class); private static final Logger logger = LoggerFactory.getLogger(IDataOnlineRateServiceImpl.class);
@Value("${line.num}") @Value("${line.num:10}")
private Integer NUM = 100; private Integer NUM;
private final Integer online = 1; private final Integer online = 1;
private final Integer offline = 0; private final Integer offline = 0;
@@ -69,7 +70,8 @@ public class IDataOnlineRateServiceImpl implements IDataOnlineRateService {
@Override @Override
public void dataOnlineRate(CalculatedParam calculatedParam) { public void dataOnlineRate(CalculatedParam calculatedParam) {
logger.info("{},onlineRate表转r_stat_onlinerate_d算法开始=====》", LocalDateTime.now()); MemorySizeUtil.getNowMemory();
logger.info("{},{}onlineRate表转r_stat_onlinerate_d算法开始=====》", LocalDateTime.now(),calculatedParam.getDataDate());
LineCountEvaluateParam lineParam = new LineCountEvaluateParam(); LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate())); lineParam.setStartTime(TimeUtils.getBeginOfDay(calculatedParam.getDataDate()));
lineParam.setEndTime(TimeUtils.getEndOfDay(calculatedParam.getDataDate())); lineParam.setEndTime(TimeUtils.getEndOfDay(calculatedParam.getDataDate()));
@@ -247,6 +249,8 @@ public class IDataOnlineRateServiceImpl implements IDataOnlineRateService {
long differ = DateUtil.between(date, newDate, DateUnit.MINUTE); long differ = DateUtil.between(date, newDate, DateUnit.MINUTE);
if (online.equals(type)) { if (online.equals(type)) {
minute = InfluxDBPublicParam.DAY_MINUTE - (int) differ; minute = InfluxDBPublicParam.DAY_MINUTE - (int) differ;
}else{
minute = (int) differ;
} }
} else { } else {
List<PqsCommunicateDto> communicateDataOld = communicateFeignClient.getRawDataEnd(lineParam).getData(); List<PqsCommunicateDto> communicateDataOld = communicateFeignClient.getRawDataEnd(lineParam).getData();

View File

@@ -7,6 +7,7 @@ import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.njcn.algorithm.pojo.bo.CalculatedParam; import com.njcn.algorithm.pojo.bo.CalculatedParam;
import com.njcn.algorithm.service.line.IEventDetailService; import com.njcn.algorithm.service.line.IEventDetailService;
import com.njcn.algorithm.utils.MemorySizeUtil;
import com.njcn.dataProcess.api.EventDetailFeignClient; import com.njcn.dataProcess.api.EventDetailFeignClient;
import com.njcn.dataProcess.api.RmpEventDetailFeignClient; import com.njcn.dataProcess.api.RmpEventDetailFeignClient;
import com.njcn.dataProcess.dto.RmpEventDetailDTO; import com.njcn.dataProcess.dto.RmpEventDetailDTO;
@@ -44,8 +45,8 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor @RequiredArgsConstructor
public class IEventDetailServiceImpl implements IEventDetailService { public class IEventDetailServiceImpl implements IEventDetailService {
private static final Logger logger = LoggerFactory.getLogger(IDataOnlineRateServiceImpl.class); private static final Logger logger = LoggerFactory.getLogger(IDataOnlineRateServiceImpl.class);
@Value("${line.num}") @Value("${line.num:10}")
private Integer NUM = 10; private Integer NUM;
@Resource @Resource
private RmpEventDetailFeignClient eventDetailFeignClient; private RmpEventDetailFeignClient eventDetailFeignClient;
@Resource @Resource
@@ -55,7 +56,8 @@ public class IEventDetailServiceImpl implements IEventDetailService {
@Override @Override
public void dataDayHandle(CalculatedParam<String> calculatedParam) { public void dataDayHandle(CalculatedParam<String> calculatedParam) {
logger.info("{},r_mp_event_detail_d算法开始=====》", LocalDateTime.now()); MemorySizeUtil.getNowMemory();
logger.info("{},{}r_mp_event_detail_d算法开始=====》", LocalDateTime.now(),calculatedParam.getDataDate());
List<DataEventDetailDto> result = new ArrayList<>(); List<DataEventDetailDto> result = new ArrayList<>();
//远程接口获取分钟数据 //远程接口获取分钟数据
LineCountEvaluateParam lineParam = new LineCountEvaluateParam(); LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
@@ -106,7 +108,8 @@ public class IEventDetailServiceImpl implements IEventDetailService {
@Override @Override
public void dataMonthHandle(CalculatedParam<String> calculatedParam) { public void dataMonthHandle(CalculatedParam<String> calculatedParam) {
logger.info("{},r_mp_event_detail_m算法开始=====》", LocalDateTime.now()); MemorySizeUtil.getNowMemory();
logger.info("{},{}r_mp_event_detail_m算法开始=====》", LocalDateTime.now(),calculatedParam.getDataDate());
List<DataEventDetailDto> result = new ArrayList<>(); List<DataEventDetailDto> result = new ArrayList<>();
//远程接口获取分钟数据 //远程接口获取分钟数据
LineCountEvaluateParam lineParam = new LineCountEvaluateParam(); LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
@@ -139,7 +142,8 @@ public class IEventDetailServiceImpl implements IEventDetailService {
@Override @Override
public void dataQuarterHandle(CalculatedParam<String> calculatedParam) { public void dataQuarterHandle(CalculatedParam<String> calculatedParam) {
logger.info("{},r_mp_event_detail_q算法开始=====》", LocalDateTime.now()); MemorySizeUtil.getNowMemory();
logger.info("{},{}r_mp_event_detail_q算法开始=====》", LocalDateTime.now(),calculatedParam.getDataDate());
List<DataEventDetailDto> result = new ArrayList<>(); List<DataEventDetailDto> result = new ArrayList<>();
//远程接口获取分钟数据 //远程接口获取分钟数据
LineCountEvaluateParam lineParam = new LineCountEvaluateParam(); LineCountEvaluateParam lineParam = new LineCountEvaluateParam();
@@ -172,7 +176,8 @@ public class IEventDetailServiceImpl implements IEventDetailService {
@Override @Override
public void dataYearHandle(CalculatedParam<String> calculatedParam) { public void dataYearHandle(CalculatedParam<String> calculatedParam) {
logger.info("{},r_mp_event_detail_y算法开始=====》", LocalDateTime.now()); MemorySizeUtil.getNowMemory();
logger.info("{},{}r_mp_event_detail_y算法开始=====》", LocalDateTime.now(),calculatedParam.getDataDate());
List<DataEventDetailDto> result = new ArrayList<>(); List<DataEventDetailDto> result = new ArrayList<>();
//远程接口获取分钟数据 //远程接口获取分钟数据
LineCountEvaluateParam lineParam = new LineCountEvaluateParam(); LineCountEvaluateParam lineParam = new LineCountEvaluateParam();

View File

@@ -49,8 +49,8 @@ import java.util.stream.Stream;
@RequiredArgsConstructor @RequiredArgsConstructor
public class PollutionServiceImpl implements IPollutionService { public class PollutionServiceImpl implements IPollutionService {
@Value("${line.num}") @Value("${line.num:10}")
private Integer NUM = 100; private Integer NUM;
@Resource @Resource
private PqDataVerifyFeignClient pqDataVerifyFeignClient; private PqDataVerifyFeignClient pqDataVerifyFeignClient;
@@ -101,7 +101,7 @@ public class PollutionServiceImpl implements IPollutionService {
Map<String, DataPollutionD> interHarmonicVoltageList = getInterharmonicVoltage(lineCountEvaluateParam, limitMap); Map<String, DataPollutionD> interHarmonicVoltageList = getInterharmonicVoltage(lineCountEvaluateParam, limitMap);
Map<String, DataPollutionD> voltageFlickerList = getVoltageFlicker(lineCountEvaluateParam, limitMap); Map<String, DataPollutionD> voltageFlickerList = getVoltageFlicker(lineCountEvaluateParam, limitMap);
List<DataPollutionD> pollutionList = processPollutionList(local, idList, dictData, harmonicVoltageList, harmonicCurrentList, frequencyDeviationList, voltageDeviationList, List<DataPollutionD> pollutionList = processPollutionList(local, list, dictData, harmonicVoltageList, harmonicCurrentList, frequencyDeviationList, voltageDeviationList,
threePhaseVoltageList, negativeSequenceList, interHarmonicVoltageList, voltageFlickerList); threePhaseVoltageList, negativeSequenceList, interHarmonicVoltageList, voltageFlickerList);
if (CollUtil.isNotEmpty(pollutionList)) { if (CollUtil.isNotEmpty(pollutionList)) {

View File

@@ -1,14 +1,16 @@
package com.njcn.dataProcess.service.impl.relation; package com.njcn.algorithm.serviceimpl.line;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.dataProcess.dao.relation.mapper.PqReasonableRangeMapper; import com.njcn.algorithm.mapper.PqReasonableRangeMapper;
import com.njcn.dataProcess.param.DataCleanParam; import com.njcn.algorithm.pojo.dto.PqReasonableRangeDto;
import com.njcn.dataProcess.pojo.dto.PqReasonableRangeDto; import com.njcn.algorithm.pojo.param.DataCleanParam;
import com.njcn.dataProcess.pojo.po.PqReasonableRange; import com.njcn.algorithm.pojo.po.PqReasonableRange;
import com.njcn.dataProcess.service.IPqReasonableRangeService; import com.njcn.algorithm.service.line.IPqReasonableRangeService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -23,14 +25,18 @@ import java.util.List;
* @author xy * @author xy
* @since 2025-02-13 * @since 2025-02-13
*/ */
@Slf4j
@Service @Service
@RequiredArgsConstructor
public class PqReasonableRangeServiceImpl extends ServiceImpl<PqReasonableRangeMapper, PqReasonableRange> implements IPqReasonableRangeService { public class PqReasonableRangeServiceImpl extends ServiceImpl<PqReasonableRangeMapper, PqReasonableRange> implements IPqReasonableRangeService {
@Override @Override
public List<PqReasonableRangeDto> getReasonableRangeList(DataCleanParam param) { public List<PqReasonableRangeDto> getReasonableRangeList(DataCleanParam param) {
List<PqReasonableRangeDto> result = new ArrayList<>(); List<PqReasonableRangeDto> result = new ArrayList<>();
LambdaQueryWrapper<PqReasonableRange> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<PqReasonableRange> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PqReasonableRange::getBelongingSystem,param.getSystemType()); if (StrUtil.isNotBlank(param.getSystemType())) {
queryWrapper.eq(PqReasonableRange::getBelongingSystem,param.getSystemType());
}
if(StrUtil.isNotBlank(param.getDataSource())){ if(StrUtil.isNotBlank(param.getDataSource())){
queryWrapper.eq(PqReasonableRange::getDataSource,param.getDataSource()); queryWrapper.eq(PqReasonableRange::getDataSource,param.getDataSource());
} }
@@ -48,4 +54,29 @@ public class PqReasonableRangeServiceImpl extends ServiceImpl<PqReasonableRangeM
} }
return result; return result;
} }
@Override
public boolean savePqReasonableRange(PqReasonableRangeDto dto) {
PqReasonableRange entity = new PqReasonableRange();
BeanUtils.copyProperties(dto, entity);
entity.setState(1);
return this.save(entity);
}
@Override
public boolean updatePqReasonableRange(PqReasonableRangeDto dto) {
PqReasonableRange entity = new PqReasonableRange();
BeanUtils.copyProperties(dto, entity);
return this.updateById(entity);
}
@Override
public boolean deletePqReasonableRange(String id) {
PqReasonableRange entity = this.getById(id);
if (entity != null) {
entity.setState(0);
return this.updateById(entity);
}
return false;
}
} }

View File

@@ -21,6 +21,7 @@ import com.njcn.device.biz.commApi.CommLineClient;
import com.njcn.device.biz.pojo.dto.LineDTO; import com.njcn.device.biz.pojo.dto.LineDTO;
import com.njcn.device.pms.pojo.param.MonitorTerminalParam; import com.njcn.device.pms.pojo.param.MonitorTerminalParam;
import com.njcn.device.pq.api.LineFeignClient; import com.njcn.device.pq.api.LineFeignClient;
import com.njcn.device.pq.api.UserLedgerFeignClient;
import com.njcn.device.pq.pojo.vo.LineDetailDataVO; import com.njcn.device.pq.pojo.vo.LineDetailDataVO;
import com.njcn.event.api.EventDetailFeignClient; import com.njcn.event.api.EventDetailFeignClient;
import com.njcn.event.api.TransientFeignClient; import com.njcn.event.api.TransientFeignClient;
@@ -65,8 +66,8 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor @RequiredArgsConstructor
public class SpecialAnalysisServiceImpl implements ISpecialAnalysisService { public class SpecialAnalysisServiceImpl implements ISpecialAnalysisService {
@Value("${line.num:10}")
private Integer NUM=10; private Integer NUM;
@Resource @Resource
private EventDetailFeignClient eventDetailFeignClient; private EventDetailFeignClient eventDetailFeignClient;
@Resource @Resource
@@ -84,7 +85,7 @@ public class SpecialAnalysisServiceImpl implements ISpecialAnalysisService {
@Resource @Resource
private CommLineClient commLineClient; private CommLineClient commLineClient;
@Resource @Resource
private UserLedgerOldFeignClient userLedgerFeignClient; private UserLedgerFeignClient userLedgerFeignClient;
@Resource @Resource
private DataLimitRateDetailFeignClient dataLimitRateDetailFeignClient; private DataLimitRateDetailFeignClient dataLimitRateDetailFeignClient;

View File

@@ -2,10 +2,7 @@ package com.njcn.dataProcess.api;
import com.njcn.common.pojo.constant.ServerInfo; import com.njcn.common.pojo.constant.ServerInfo;
import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.pojo.response.HttpResult;
import com.njcn.dataProcess.api.fallback.RmpEventFeignClientFallbackFactory;
import com.njcn.dataProcess.api.fallback.SpThroughFeignClientFallbackFactory; import com.njcn.dataProcess.api.fallback.SpThroughFeignClientFallbackFactory;
import com.njcn.dataProcess.dto.RmpEventDetailDTO;
import com.njcn.dataProcess.param.LineCountEvaluateParam;
import com.njcn.dataProcess.pojo.dto.RActivePowerRangeDto; import com.njcn.dataProcess.pojo.dto.RActivePowerRangeDto;
import com.njcn.dataProcess.pojo.dto.SpThroughDto; import com.njcn.dataProcess.pojo.dto.SpThroughDto;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;

View File

@@ -196,5 +196,8 @@ public interface InfluxDBTableConstant {
String NORMAL = "0"; String NORMAL = "0";
String UN_NORMAL = "1"; String UN_NORMAL = "1";
/**
* 数据清洗标志 0:正常 1:异常
*/
String ABNORMAL_FLAG = "abnormal_flag";
} }

View File

@@ -23,6 +23,7 @@ public class DataVDTO {
@JsonDeserialize(using = LocalDateTimeDeserializer.class) @JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class) @JsonSerialize(using = LocalDateTimeSerializer.class)
private LocalDateTime timeid; private LocalDateTime timeid;
private String devId;
private String lineid; private String lineid;
private String phasicType; private String phasicType;
private Double rms; private Double rms;

View File

@@ -214,111 +214,111 @@ public class DataHarmpowerP {
private Double p50; private Double p50;
//在线监测添加的字段 //在线监测添加的字段
@Column(name = "totPf") @Column(name = "tot_p")
private Double totPf;
@Column(name = "totDf")
private Double totDf;
@Column(name = "totP")
private Double totP; private Double totP;
@Column(name = "totP1") @Column(name = "tot_df")
private Double totDf;
@Column(name = "tot_pf")
private Double totPf;
@Column(name = "tot_tp_1")
private Double totP1; private Double totP1;
@Column(name = "totP2") @Column(name = "tot_tp_2")
private Double totP2; private Double totP2;
@Column(name = "totP3") @Column(name = "tot_tp_3")
private Double totP3; private Double totP3;
@Column(name = "totP4") @Column(name = "tot_tp_4")
private Double totP4; private Double totP4;
@Column(name = "totP5") @Column(name = "tot_tp_5")
private Double totP5; private Double totP5;
@Column(name = "totP6") @Column(name = "tot_tp_6")
private Double totP6; private Double totP6;
@Column(name = "totP7") @Column(name = "tot_tp_7")
private Double totP7; private Double totP7;
@Column(name = "totP8") @Column(name = "tot_tp_8")
private Double totP8; private Double totP8;
@Column(name = "totP9") @Column(name = "tot_tp_9")
private Double totP9; private Double totP9;
@Column(name = "totP10") @Column(name = "tot_tp_10")
private Double totP10; private Double totP10;
@Column(name = "totP11") @Column(name = "tot_tp_11")
private Double totP11; private Double totP11;
@Column(name = "totP12") @Column(name = "tot_tp_12")
private Double totP12; private Double totP12;
@Column(name = "totP13") @Column(name = "tot_tp_13")
private Double totP13; private Double totP13;
@Column(name = "totP14") @Column(name = "tot_tp_14")
private Double totP14; private Double totP14;
@Column(name = "totP15") @Column(name = "tot_tp_15")
private Double totP15; private Double totP15;
@Column(name = "totP16") @Column(name = "tot_tp_16")
private Double totP16; private Double totP16;
@Column(name = "totP17") @Column(name = "tot_tp_17")
private Double totP17; private Double totP17;
@Column(name = "totP18") @Column(name = "tot_tp_18")
private Double totP18; private Double totP18;
@Column(name = "totP19") @Column(name = "tot_tp_19")
private Double totP19; private Double totP19;
@Column(name = "totP20") @Column(name = "tot_tp_20")
private Double totP20; private Double totP20;
@Column(name = "totP21") @Column(name = "tot_tp_21")
private Double totP21; private Double totP21;
@Column(name = "totP22") @Column(name = "tot_tp_22")
private Double totP22; private Double totP22;
@Column(name = "totP23") @Column(name = "tot_tp_23")
private Double totP23; private Double totP23;
@Column(name = "totP24") @Column(name = "tot_tp_24")
private Double totP24; private Double totP24;
@Column(name = "totP25") @Column(name = "tot_tp_25")
private Double totP25; private Double totP25;
@Column(name = "totP26") @Column(name = "tot_tp_26")
private Double totP26; private Double totP26;
@Column(name = "totP27") @Column(name = "tot_tp_27")
private Double totP27; private Double totP27;
@Column(name = "totP28") @Column(name = "tot_tp_28")
private Double totP28; private Double totP28;
@Column(name = "totP29") @Column(name = "tot_tp_29")
private Double totP29; private Double totP29;
@Column(name = "totP30") @Column(name = "tot_tp_30")
private Double totP30; private Double totP30;
@Column(name = "totP31") @Column(name = "tot_tp_31")
private Double totP31; private Double totP31;
@Column(name = "totP32") @Column(name = "tot_tp_32")
private Double totP32; private Double totP32;
@Column(name = "totP33") @Column(name = "tot_tp_33")
private Double totP33; private Double totP33;
@Column(name = "totP34") @Column(name = "tot_tp_34")
private Double totP34; private Double totP34;
@Column(name = "totP35") @Column(name = "tot_tp_35")
private Double totP35; private Double totP35;
@Column(name = "totP36") @Column(name = "tot_tp_36")
private Double totP36; private Double totP36;
@Column(name = "totP37") @Column(name = "tot_tp_37")
private Double totP37; private Double totP37;
@Column(name = "totP38") @Column(name = "tot_tp_38")
private Double totP38; private Double totP38;
@Column(name = "totP39") @Column(name = "tot_tp_39")
private Double totP39; private Double totP39;
@Column(name = "totP40") @Column(name = "tot_tp_40")
private Double totP40; private Double totP40;
@Column(name = "totP41") @Column(name = "tot_tp_41")
private Double totP41; private Double totP41;
@Column(name = "totP42") @Column(name = "tot_tp_42")
private Double totP42; private Double totP42;
@Column(name = "totP43") @Column(name = "tot_tp_43")
private Double totP43; private Double totP43;
@Column(name = "totP44") @Column(name = "tot_tp_44")
private Double totP44; private Double totP44;
@Column(name = "totP45") @Column(name = "tot_tp_45")
private Double totP45; private Double totP45;
@Column(name = "totP46") @Column(name = "tot_tp_46")
private Double totP46; private Double totP46;
@Column(name = "totP47") @Column(name = "tot_tp_47")
private Double totP47; private Double totP47;
@Column(name = "totP49") @Column(name = "tot_tp_49")
private Double totP48; private Double totP48;
@Column(name = "totP49") @Column(name = "tot_tp_49")
private Double totP49; private Double totP49;
@Column(name = "totP50") @Column(name = "tot_tp_50")
private Double totP50; private Double totP50;

View File

@@ -208,107 +208,107 @@ public class DataHarmpowerQ {
private Double q50; private Double q50;
//在线监测添加的字段 //在线监测添加的字段
@Column(name = "totQ") @Column(name = "tot_q")
private Double totQ; private Double totQ;
@Column(name = "totQ1") @Column(name = "tot_tq_1")
private Double totQ1; private Double totQ1;
@Column(name = "totQ2") @Column(name = "tot_tq_2")
private Double totQ2; private Double totQ2;
@Column(name = "totQ3") @Column(name = "tot_tq_3")
private Double totQ3; private Double totQ3;
@Column(name = "totQ4") @Column(name = "tot_tq_4")
private Double totQ4; private Double totQ4;
@Column(name = "totQ5") @Column(name = "tot_tq_5")
private Double totQ5; private Double totQ5;
@Column(name = "totQ6") @Column(name = "tot_tq_6")
private Double totQ6; private Double totQ6;
@Column(name = "totQ7") @Column(name = "tot_tq_7")
private Double totQ7; private Double totQ7;
@Column(name = "totQ8") @Column(name = "tot_tq_8")
private Double totQ8; private Double totQ8;
@Column(name = "totQ9") @Column(name = "tot_tq_9")
private Double totQ9; private Double totQ9;
@Column(name = "totQ10") @Column(name = "tot_tq_10")
private Double totQ10; private Double totQ10;
@Column(name = "totQ11") @Column(name = "tot_tq_11")
private Double totQ11; private Double totQ11;
@Column(name = "totQ12") @Column(name = "tot_tq_12")
private Double totQ12; private Double totQ12;
@Column(name = "totQ13") @Column(name = "tot_tq_13")
private Double totQ13; private Double totQ13;
@Column(name = "totQ14") @Column(name = "tot_tq_14")
private Double totQ14; private Double totQ14;
@Column(name = "totQ15") @Column(name = "tot_tq_15")
private Double totQ15; private Double totQ15;
@Column(name = "totQ16") @Column(name = "tot_tq_16")
private Double totQ16; private Double totQ16;
@Column(name = "totQ17") @Column(name = "tot_tq_17")
private Double totQ17; private Double totQ17;
@Column(name = "totQ18") @Column(name = "tot_tq_18")
private Double totQ18; private Double totQ18;
@Column(name = "totQ19") @Column(name = "tot_tq_19")
private Double totQ19; private Double totQ19;
@Column(name = "totQ20") @Column(name = "tot_tq_20")
private Double totQ20; private Double totQ20;
@Column(name = "totQ21") @Column(name = "tot_tq_21")
private Double totQ21; private Double totQ21;
@Column(name = "totQ22") @Column(name = "tot_tq_22")
private Double totQ22; private Double totQ22;
@Column(name = "totQ23") @Column(name = "tot_tq_23")
private Double totQ23; private Double totQ23;
@Column(name = "totQ24") @Column(name = "tot_tq_24")
private Double totQ24; private Double totQ24;
@Column(name = "totQ25") @Column(name = "tot_tq_25")
private Double totQ25; private Double totQ25;
@Column(name = "totQ26") @Column(name = "tot_tq_26")
private Double totQ26; private Double totQ26;
@Column(name = "totQ27") @Column(name = "tot_tq_27")
private Double totQ27; private Double totQ27;
@Column(name = "totQ28") @Column(name = "tot_tq_28")
private Double totQ28; private Double totQ28;
@Column(name = "totQ29") @Column(name = "tot_tq_29")
private Double totQ29; private Double totQ29;
@Column(name = "totQ30") @Column(name = "tot_tq_30")
private Double totQ30; private Double totQ30;
@Column(name = "totQ31") @Column(name = "tot_tq_31")
private Double totQ31; private Double totQ31;
@Column(name = "totQ32") @Column(name = "tot_tq_32")
private Double totQ32; private Double totQ32;
@Column(name = "totQ33") @Column(name = "tot_tq_33")
private Double totQ33; private Double totQ33;
@Column(name = "totQ34") @Column(name = "tot_tq_34")
private Double totQ34; private Double totQ34;
@Column(name = "totQ35") @Column(name = "tot_tq_35")
private Double totQ35; private Double totQ35;
@Column(name = "totQ36") @Column(name = "tot_tq_36")
private Double totQ36; private Double totQ36;
@Column(name = "totQ37") @Column(name = "tot_tq_37")
private Double totQ37; private Double totQ37;
@Column(name = "totQ38") @Column(name = "tot_tq_38")
private Double totQ38; private Double totQ38;
@Column(name = "totQ39") @Column(name = "tot_tq_39")
private Double totQ39; private Double totQ39;
@Column(name = "totQ40") @Column(name = "tot_tq_40")
private Double totQ40; private Double totQ40;
@Column(name = "totQ41") @Column(name = "tot_tq_41")
private Double totQ41; private Double totQ41;
@Column(name = "totQ42") @Column(name = "tot_tq_42")
private Double totQ42; private Double totQ42;
@Column(name = "totQ43") @Column(name = "tot_tq_43")
private Double totQ43; private Double totQ43;
@Column(name = "totQ44") @Column(name = "tot_tq_44")
private Double totQ44; private Double totQ44;
@Column(name = "totQ45") @Column(name = "tot_tq_45")
private Double totQ45; private Double totQ45;
@Column(name = "totQ46") @Column(name = "tot_tq_46")
private Double totQ46; private Double totQ46;
@Column(name = "totQ47") @Column(name = "tot_tq_47")
private Double totQ47; private Double totQ47;
@Column(name = "totQ49") @Column(name = "tot_tq_49")
private Double totQ48; private Double totQ48;
@Column(name = "totQ49") @Column(name = "tot_tq_49")
private Double totQ49; private Double totQ49;
@Column(name = "totQ50") @Column(name = "tot_tq_50")
private Double totQ50; private Double totQ50;

View File

@@ -208,107 +208,107 @@ public class DataHarmpowerS {
private Double s50; private Double s50;
//在线监测添加的字段 //在线监测添加的字段
@Column(name = "totS") @Column(name = "tot_s")
private Double totS; private Double totS;
@Column(name = "totS1") @Column(name = "tot_ts_1")
private Double totS1; private Double totS1;
@Column(name = "totS2") @Column(name = "tot_ts_2")
private Double totS2; private Double totS2;
@Column(name = "totS3") @Column(name = "tot_ts_3")
private Double totS3; private Double totS3;
@Column(name = "totS4") @Column(name = "tot_ts_4")
private Double totS4; private Double totS4;
@Column(name = "totS5") @Column(name = "tot_ts_5")
private Double totS5; private Double totS5;
@Column(name = "totS6") @Column(name = "tot_ts_6")
private Double totS6; private Double totS6;
@Column(name = "totS7") @Column(name = "tot_ts_7")
private Double totS7; private Double totS7;
@Column(name = "totS8") @Column(name = "tot_ts_8")
private Double totS8; private Double totS8;
@Column(name = "totS9") @Column(name = "tot_ts_9")
private Double totS9; private Double totS9;
@Column(name = "totS10") @Column(name = "tot_ts_10")
private Double totS10; private Double totS10;
@Column(name = "totS11") @Column(name = "tot_ts_11")
private Double totS11; private Double totS11;
@Column(name = "totS12") @Column(name = "tot_ts_12")
private Double totS12; private Double totS12;
@Column(name = "totS13") @Column(name = "tot_ts_13")
private Double totS13; private Double totS13;
@Column(name = "totS14") @Column(name = "tot_ts_14")
private Double totS14; private Double totS14;
@Column(name = "totS15") @Column(name = "tot_ts_15")
private Double totS15; private Double totS15;
@Column(name = "totS16") @Column(name = "tot_ts_16")
private Double totS16; private Double totS16;
@Column(name = "totS17") @Column(name = "tot_ts_17")
private Double totS17; private Double totS17;
@Column(name = "totS18") @Column(name = "tot_ts_18")
private Double totS18; private Double totS18;
@Column(name = "totS19") @Column(name = "tot_ts_19")
private Double totS19; private Double totS19;
@Column(name = "totS20") @Column(name = "tot_ts_20")
private Double totS20; private Double totS20;
@Column(name = "totS21") @Column(name = "tot_ts_21")
private Double totS21; private Double totS21;
@Column(name = "totS22") @Column(name = "tot_ts_22")
private Double totS22; private Double totS22;
@Column(name = "totS23") @Column(name = "tot_ts_23")
private Double totS23; private Double totS23;
@Column(name = "totS24") @Column(name = "tot_ts_24")
private Double totS24; private Double totS24;
@Column(name = "totS25") @Column(name = "tot_ts_25")
private Double totS25; private Double totS25;
@Column(name = "totS26") @Column(name = "tot_ts_26")
private Double totS26; private Double totS26;
@Column(name = "totS27") @Column(name = "tot_ts_27")
private Double totS27; private Double totS27;
@Column(name = "totS28") @Column(name = "tot_ts_28")
private Double totS28; private Double totS28;
@Column(name = "totS29") @Column(name = "tot_ts_29")
private Double totS29; private Double totS29;
@Column(name = "totS30") @Column(name = "tot_ts_30")
private Double totS30; private Double totS30;
@Column(name = "totS31") @Column(name = "tot_ts_31")
private Double totS31; private Double totS31;
@Column(name = "totS32") @Column(name = "tot_ts_32")
private Double totS32; private Double totS32;
@Column(name = "totS33") @Column(name = "tot_ts_33")
private Double totS33; private Double totS33;
@Column(name = "totS34") @Column(name = "tot_ts_34")
private Double totS34; private Double totS34;
@Column(name = "totS35") @Column(name = "tot_ts_35")
private Double totS35; private Double totS35;
@Column(name = "totS36") @Column(name = "tot_ts_36")
private Double totS36; private Double totS36;
@Column(name = "totS37") @Column(name = "tot_ts_37")
private Double totS37; private Double totS37;
@Column(name = "totS38") @Column(name = "tot_ts_38")
private Double totS38; private Double totS38;
@Column(name = "totS39") @Column(name = "tot_ts_39")
private Double totS39; private Double totS39;
@Column(name = "totS40") @Column(name = "tot_ts_40")
private Double totS40; private Double totS40;
@Column(name = "totS41") @Column(name = "tot_ts_41")
private Double totS41; private Double totS41;
@Column(name = "totS42") @Column(name = "tot_ts_42")
private Double totS42; private Double totS42;
@Column(name = "totS43") @Column(name = "tot_ts_43")
private Double totS43; private Double totS43;
@Column(name = "totS44") @Column(name = "tot_ts_44")
private Double totS44; private Double totS44;
@Column(name = "totS45") @Column(name = "tot_ts_45")
private Double totS45; private Double totS45;
@Column(name = "totS46") @Column(name = "tot_ts_46")
private Double totS46; private Double totS46;
@Column(name = "totS47") @Column(name = "tot_ts_47")
private Double totS47; private Double totS47;
@Column(name = "totS49") @Column(name = "tot_ts_49")
private Double totS48; private Double totS48;
@Column(name = "totS49") @Column(name = "tot_ts_49")
private Double totS49; private Double totS49;
@Column(name = "totS50") @Column(name = "tot_ts_50")
private Double totS50; private Double totS50;

View File

@@ -20,6 +20,9 @@ public class PqsCommunicateDto {
private Integer type; private Integer type;
//是否更新updateTime标志数据上送更新1状态翻转不更新0 //是否更新updateTime标志数据上送更新1状态翻转不更新0
private Integer flag=0; private Integer flag=0;
//是否更新、pqs_communicate标志0更新1不更新
private Integer updateCommunicateFlag=0;
} }

View File

@@ -1,56 +0,0 @@
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.param.DataCleanParam;
import com.njcn.dataProcess.pojo.dto.PqReasonableRangeDto;
import com.njcn.dataProcess.service.IPqReasonableRangeService;
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 javax.annotation.Resource;
import java.util.List;
/**
* <p>
* 前端控制器
* </p>
*
* @author xy
* @since 2025-02-13
*/
@Validated
@Slf4j
@Controller
@RestController
@RequestMapping("/pqReasonableRange")
@Api(tags = "数据清洗标准库")
public class PqReasonableRangeController extends BaseController {
@Resource
private IPqReasonableRangeService pqReasonableRangeService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON,operateType = OperateType.QUERY)
@PostMapping("/getData")
@ApiOperation("按条件获取数据合理范围")
public HttpResult<List<PqReasonableRangeDto>> getData(@RequestBody DataCleanParam param) {
String methodDescribe = getMethodDescribe("getData");
List<PqReasonableRangeDto> list = pqReasonableRangeService.getReasonableRangeList(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
}
}

View File

@@ -12,13 +12,16 @@ import com.njcn.device.pq.api.DeviceFeignClient;
import com.njcn.device.pq.api.LineFeignClient; import com.njcn.device.pq.api.LineFeignClient;
import com.njcn.device.pq.pojo.dto.DevComFlagDTO; import com.njcn.device.pq.pojo.dto.DevComFlagDTO;
import com.njcn.device.pq.pojo.vo.LineDeviceStateVO; import com.njcn.device.pq.pojo.vo.LineDeviceStateVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Comparator; import java.util.*;
import java.util.List; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -29,6 +32,7 @@ import java.util.stream.Collectors;
* @version V1.0.0 * @version V1.0.0
*/ */
@Service("RelationLnDataDealServiceImpl") @Service("RelationLnDataDealServiceImpl")
@Slf4j
public class LnDataDealServiceImpl implements LnDataDealService { public class LnDataDealServiceImpl implements LnDataDealService {
@QueryBean @QueryBean
private IDataFlicker dataFlickerQuery; private IDataFlicker dataFlickerQuery;
@@ -65,43 +69,75 @@ public class LnDataDealServiceImpl implements LnDataDealService {
private LineFeignClient lineFeignClient; private LineFeignClient lineFeignClient;
@QueryBean @QueryBean
private IPqsCommunicate iPqsCommunicate; private IPqsCommunicate iPqsCommunicate;
@Resource(name="asyncExecutor")
private Executor executor;
@Override @Override
public void batchInsertion(LnDataDTO lnDataDTO) { public void batchInsertion(LnDataDTO lnDataDTO) {
dataVService.batchInsertion(lnDataDTO.getDataVList());
dataHarmrateVQuery.batchInsertion(lnDataDTO.getDataHarmrateVDTOList());
dataFlickerQuery.batchInsertion(lnDataDTO.getDataFlickerDTOList()); List<CompletableFuture<Void>> futures = new ArrayList<>();
dataFlucQuery.batchInsertion(lnDataDTO.getDataFlucDTOList()); // 提交每个批量插入任务
dataHarmphasicIQuery.batchInsertion(lnDataDTO.getDataHarmphasicIDTOList()); futures.add(CompletableFuture.runAsync(() -> dataVService.batchInsertion(lnDataDTO.getDataVList()), executor));
dataHarmphasicVQuery.batchInsertion(lnDataDTO.getDataHarmphasicVDTOList()); futures.add(CompletableFuture.runAsync(() -> dataHarmrateVQuery.batchInsertion(lnDataDTO.getDataHarmrateVDTOList()), executor));
dataHarmpowerPService.batchInsertion(lnDataDTO.getDataHarmpowerPDTOList()); futures.add(CompletableFuture.runAsync(() -> dataFlickerQuery.batchInsertion(lnDataDTO.getDataFlickerDTOList()), executor));
dataHarmpowerQService.batchInsertion(lnDataDTO.getDataHarmpowerQDTOList()); futures.add(CompletableFuture.runAsync(() -> dataFlucQuery.batchInsertion(lnDataDTO.getDataFlucDTOList()), executor));
dataHarmpowerSService.batchInsertion(lnDataDTO.getDataHarmpowerSDTOList()); futures.add(CompletableFuture.runAsync(() -> dataHarmphasicIQuery.batchInsertion(lnDataDTO.getDataHarmphasicIDTOList()), executor));
dataIService.batchInsertion(lnDataDTO.getDataIDTOList()); futures.add(CompletableFuture.runAsync(() -> dataHarmphasicVQuery.batchInsertion(lnDataDTO.getDataHarmphasicVDTOList()), executor));
dataInharmIService.batchInsertion(lnDataDTO.getDataInharmIDTOList()); futures.add(CompletableFuture.runAsync(() -> dataHarmpowerPService.batchInsertion(lnDataDTO.getDataHarmpowerPDTOList()), executor));
dataInharmVService.batchInsertion(lnDataDTO.getDataInharmVDTOList()); futures.add(CompletableFuture.runAsync(() -> dataHarmpowerQService.batchInsertion(lnDataDTO.getDataHarmpowerQDTOList()), executor));
dataPltService.batchInsertion(lnDataDTO.getDataPltDTOList()); futures.add(CompletableFuture.runAsync(() -> dataHarmpowerSService.batchInsertion(lnDataDTO.getDataHarmpowerSDTOList()), executor));
futures.add(CompletableFuture.runAsync(() -> dataIService.batchInsertion(lnDataDTO.getDataIDTOList()), executor));
futures.add(CompletableFuture.runAsync(() -> dataInharmIService.batchInsertion(lnDataDTO.getDataInharmIDTOList()), executor));
futures.add(CompletableFuture.runAsync(() -> dataInharmVService.batchInsertion(lnDataDTO.getDataInharmVDTOList()), executor));
futures.add(CompletableFuture.runAsync(() -> dataPltService.batchInsertion(lnDataDTO.getDataPltDTOList()), executor));
// 等待所有任务完成,如果任一任务抛出异常,这里会重新抛出
CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();
// dataVService.batchInsertion(lnDataDTO.getDataVList());
// dataHarmrateVQuery.batchInsertion(lnDataDTO.getDataHarmrateVDTOList());
// dataFlickerQuery.batchInsertion(lnDataDTO.getDataFlickerDTOList());
// dataFlucQuery.batchInsertion(lnDataDTO.getDataFlucDTOList());
// dataHarmphasicIQuery.batchInsertion(lnDataDTO.getDataHarmphasicIDTOList());
// dataHarmphasicVQuery.batchInsertion(lnDataDTO.getDataHarmphasicVDTOList());
// dataHarmpowerPService.batchInsertion(lnDataDTO.getDataHarmpowerPDTOList());
// dataHarmpowerQService.batchInsertion(lnDataDTO.getDataHarmpowerQDTOList());
// dataHarmpowerSService.batchInsertion(lnDataDTO.getDataHarmpowerSDTOList());
// dataIService.batchInsertion(lnDataDTO.getDataIDTOList());
// dataInharmIService.batchInsertion(lnDataDTO.getDataInharmIDTOList());
// dataInharmVService.batchInsertion(lnDataDTO.getDataInharmVDTOList());
// dataPltService.batchInsertion(lnDataDTO.getDataPltDTOList());
//更新mysqldevice表最新数据时间 //更新mysqldevice表最新数据时间
if(!CollectionUtils.isEmpty(lnDataDTO.getDataVList())){ if(!CollectionUtils.isEmpty(lnDataDTO.getDataVList())){
DataVDTO dataVDTO =lnDataDTO.getDataVList().stream().max(Comparator.comparing(DataVDTO::getTimeid)).get();
List<String> lineIdList = lnDataDTO.getDataVList().stream().map(DataVDTO::getLineid).distinct().collect(Collectors.toList()); List<String> lineIdList = lnDataDTO.getDataVList().stream().map(DataVDTO::getLineid).distinct().collect(Collectors.toList());
List<LineDeviceStateVO> data = lineFeignClient.getAllLine(lineIdList).getData(); List<LineDeviceStateVO> data = lineFeignClient.getAllLine(lineIdList).getData();
//获取所有设备id并去重
List<String> devIds = data.stream().map(temp -> {
return temp.getPids().split(",")[4];
}).distinct().collect(Collectors.toList());
devIds.forEach(temp->{
Map<String, String> map = data.stream().collect(Collectors.toMap(LineDeviceStateVO::getId, temp -> temp.getPids().split(",")[4]));
lnDataDTO.getDataVList().forEach(temp->{
temp.setDevId(map.get(temp.getLineid()));
});
Map<String, List<DataVDTO>> collect = lnDataDTO.getDataVList().stream().collect(Collectors.groupingBy(DataVDTO::getDevId));
List<CompletableFuture<Void>> updatefutures = new ArrayList<>();
collect.forEach((temp,dataVDTOList)->{
PqsCommunicateDto pqsCommunicateDto = new PqsCommunicateDto(); PqsCommunicateDto pqsCommunicateDto = new PqsCommunicateDto();
DataVDTO dataVDTO =dataVDTOList.stream().max(Comparator.comparing(DataVDTO::getTimeid)).get();
pqsCommunicateDto.setTime(LocalDateTimeUtil.format(dataVDTO.getTimeid(), DatePattern.NORM_DATETIME_PATTERN)); pqsCommunicateDto.setTime(LocalDateTimeUtil.format(dataVDTO.getTimeid(), DatePattern.NORM_DATETIME_PATTERN));
pqsCommunicateDto.setDevId(temp); pqsCommunicateDto.setDevId(temp);
pqsCommunicateDto.setType(1); pqsCommunicateDto.setType(1);
pqsCommunicateDto.setFlag(1); pqsCommunicateDto.setFlag(1);
pqsCommunicateDto.setUpdateCommunicateFlag(1);
updatefutures.add(CompletableFuture.runAsync(() -> iPqsCommunicate.insertion(pqsCommunicateDto), executor));
iPqsCommunicate.insertion(pqsCommunicateDto);
}); });
CompletableFuture.allOf(updatefutures.toArray(new CompletableFuture[0])).join();
} }

View File

@@ -3,11 +3,9 @@ package com.njcn.dataProcess.service.impl.influxdb;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.nacos.shaded.com.google.common.reflect.TypeToken;
import com.alibaba.nacos.shaded.com.google.gson.Gson;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.csdevice.api.CsLineFeignClient;
import com.njcn.csdevice.api.EquipmentFeignClient;
import com.njcn.csdevice.pojo.dto.CsEquipmentDeliveryDTO;
import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.dataProcess.dao.imapper.DataFlickerMapper; import com.njcn.dataProcess.dao.imapper.DataFlickerMapper;
import com.njcn.dataProcess.dao.relation.mapper.RStatDataFlickerRelationMapper; import com.njcn.dataProcess.dao.relation.mapper.RStatDataFlickerRelationMapper;
import com.njcn.dataProcess.dto.DataFlickerDTO; import com.njcn.dataProcess.dto.DataFlickerDTO;
@@ -19,17 +17,18 @@ import com.njcn.dataProcess.pojo.po.RStatDataFlickerD;
import com.njcn.dataProcess.service.IDataFlicker; import com.njcn.dataProcess.service.IDataFlicker;
import com.njcn.dataProcess.util.TimeUtils; import com.njcn.dataProcess.util.TimeUtils;
import com.njcn.influx.query.InfluxQueryWrapper; import com.njcn.influx.query.InfluxQueryWrapper;
import com.njcn.redis.utils.RedisUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.ListUtils; import org.apache.commons.collections4.ListUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.lang.reflect.Type;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -44,19 +43,19 @@ import java.util.stream.Collectors;
public class InfluxdbDataFlickerImpl extends MppServiceImpl<RStatDataFlickerRelationMapper, RStatDataFlickerD> implements IDataFlicker { public class InfluxdbDataFlickerImpl extends MppServiceImpl<RStatDataFlickerRelationMapper, RStatDataFlickerD> implements IDataFlicker {
private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault()); private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault());
private final DataFlickerMapper dataFlickerMapper; private final DataFlickerMapper dataFlickerMapper;
@Resource
private CsLineFeignClient csLineFeignClient;
@Resource
private EquipmentFeignClient equipmentFeignClient;
private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{ private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{
put("AB", "A"); put("AB", "A");
put("BC", "B"); put("BC", "B");
put("CA", "C"); put("CA", "C");
put("M", "T"); put("M", "T");
}}; }};
@Resource
private RedisUtil redisUtil;
private static final Set<String> LINE_VOLTAGE_TYPES =
Collections.unmodifiableSet(new HashSet<>(Arrays.asList("AB", "BC", "CA", "T")));
private static final Set<String> PHASE_VOLTAGE_TYPES =
Collections.unmodifiableSet(new HashSet<>(Arrays.asList("A", "B", "C", "T")));
@Override @Override
@@ -80,12 +79,7 @@ public class InfluxdbDataFlickerImpl extends MppServiceImpl<RStatDataFlickerRela
@Override @Override
public List<DataFlickerDto> getRawData(LineCountEvaluateParam lineParam) { public List<DataFlickerDto> getRawData(LineCountEvaluateParam lineParam) {
List<DataFlickerDto> result = new ArrayList<>(); List<DataFlickerDto> result = new ArrayList<>();
List<DataFlicker> list; List<DataFlicker> list = getMinuteData(lineParam);
if (Objects.equals(lineParam.getType(), 2)) {
list = getWlMinuteData(lineParam);
} else {
list = getMinuteData(lineParam);
}
list.forEach(item -> { list.forEach(item -> {
DataFlickerDto dto = new DataFlickerDto(); DataFlickerDto dto = new DataFlickerDto();
BeanUtils.copyProperties(item, dto); BeanUtils.copyProperties(item, dto);
@@ -98,12 +92,7 @@ public class InfluxdbDataFlickerImpl extends MppServiceImpl<RStatDataFlickerRela
@Override @Override
public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) { public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) {
List<CommonMinuteDto> result = new ArrayList<>(); List<CommonMinuteDto> result = new ArrayList<>();
List<DataFlicker> dataIList; List<DataFlicker> dataIList = getMinuteData(lineParam);
if (Objects.equals(lineParam.getType(), 2)) {
dataIList = getWlMinuteData(lineParam);
} else {
dataIList = getMinuteData(lineParam);
}
if (CollectionUtil.isNotEmpty(dataIList)) { if (CollectionUtil.isNotEmpty(dataIList)) {
String time = TimeUtils.StringTimeToString(lineParam.getStartTime()); String time = TimeUtils.StringTimeToString(lineParam.getStartTime());
//以监测点分组 //以监测点分组
@@ -249,6 +238,13 @@ public class InfluxdbDataFlickerImpl extends MppServiceImpl<RStatDataFlickerRela
*/ */
public List<DataFlicker> getMinuteData(LineCountEvaluateParam lineParam) { public List<DataFlicker> getMinuteData(LineCountEvaluateParam lineParam) {
List<DataFlicker> result = new ArrayList<>(); List<DataFlicker> result = new ArrayList<>();
List<DataFlicker> data = new ArrayList<>();
//获取监测点、接线方式数据
Type type = new TypeToken<Map<String, Integer>>(){}.getType();
Map<String, Integer> map = new Gson().fromJson(
String.valueOf(redisUtil.getObjectByKey("wlLineDetail")),
type
);
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataFlicker.class); InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataFlicker.class);
influxQueryWrapper.regular(DataFlicker::getLineId, lineParam.getLineId()) influxQueryWrapper.regular(DataFlicker::getLineId, lineParam.getLineId())
.select(DataFlicker::getLineId) .select(DataFlicker::getLineId)
@@ -261,58 +257,24 @@ public class InfluxdbDataFlickerImpl extends MppServiceImpl<RStatDataFlickerRela
.between(DataFlicker::getTime, lineParam.getStartTime(), lineParam.getEndTime()) .between(DataFlicker::getTime, lineParam.getStartTime(), lineParam.getEndTime())
.eq(DataFlicker::getQualityFlag, "0"); .eq(DataFlicker::getQualityFlag, "0");
quality(result, influxQueryWrapper, lineParam); quality(result, influxQueryWrapper, lineParam);
return result; if (CollectionUtil.isNotEmpty(result)) {
} if (!Objects.isNull(map)) {
//现根据监测点分组,然后根据接线方式排除多于数据,在修改相别
public List<DataFlicker> getWlMinuteData(LineCountEvaluateParam lineParam) { Map<String, List<DataFlicker>> lineMap = result.stream().collect(Collectors.groupingBy(DataFlicker::getLineId));
List<DataFlicker> result = new ArrayList<>(); lineMap.forEach((k,v)->{
if (CollectionUtil.isNotEmpty(lineParam.getLineId())) { if (Objects.isNull(map.get(k))) {
//获取监测点信息 return;
List<CsLinePO> line = csLineFeignClient.queryLineById(lineParam.getLineId()).getData(); }
Map<String, CsLinePO> lineMap = line.stream().collect(Collectors.toMap(CsLinePO::getLineId, Function.identity())); Integer conType = map.get(k);
//获取设备信息 Set<String> validPhasicTypes = (conType != 0) ? LINE_VOLTAGE_TYPES : PHASE_VOLTAGE_TYPES;
List<String> devList = line.stream().map(CsLinePO::getDeviceId).distinct().collect(Collectors.toList()); List<DataFlicker> result2 = v.stream().filter(item -> validPhasicTypes.contains(item.getPhasicType())).collect(Collectors.toList());
List<CsEquipmentDeliveryDTO> dev = equipmentFeignClient.queryDeviceById(devList).getData(); data.addAll(result2);
Map<String, CsEquipmentDeliveryDTO> devsMap = dev.stream().collect(Collectors.toMap(CsEquipmentDeliveryDTO::getId, Function.identity())); });
} else {
lineParam.getLineId().forEach(lineId -> { data.addAll(result);
String devId = lineMap.get(lineId).getDeviceId(); }
CsLinePO po = lineMap.get(lineId); if (CollectionUtil.isNotEmpty(data)) {
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataFlicker.class); data.forEach(item -> {
influxQueryWrapper.eq(DataFlicker::getLineId, lineId)
.eq(DataFlicker::getProcess,Integer.toString(devsMap.get(devId).getProcess()))
.select(DataFlicker::getLineId)
.select(DataFlicker::getPhasicType)
.between(DataFlicker::getTime, lineParam.getStartTime(), lineParam.getEndTime())
.eq(DataFlicker::getQualityFlag, "0");
if (CollUtil.isNotEmpty(lineParam.getPhasicType())) {
influxQueryWrapper.regular(DataFlicker::getPhasicType, lineParam.getPhasicType());
}
if (Objects.isNull(po.getLineNo())) {
influxQueryWrapper.eq(DataFlicker::getCldid,Integer.toString(po.getClDid()));
} else {
influxQueryWrapper.eq(DataFlicker::getCldid,Integer.toString(po.getLineNo()));
}
//判断接线方式 (0-星型 1-角型 2-V型) 星型是相电压 角型或者v型是线电压
if (Objects.equals(po.getConType(),0)) {
//相电压电压变动幅度
influxQueryWrapper.select("Pq_Fluct","fluc");
//相电压长时闪变
influxQueryWrapper.select("Pq_Plt","plt");
//相电压短时闪变
influxQueryWrapper.select("Pq_Pst","pst");
} else {
//线电压电压变动幅度
influxQueryWrapper.select("Pq_LFluct","fluc");
//相电压长时闪变
influxQueryWrapper.select("Pq_LPlt","plt");
//相电压短时闪变
influxQueryWrapper.select("Pq_LPst","pst");
}
result.addAll(dataFlickerMapper.selectByQueryWrapper(influxQueryWrapper));
});
if (CollectionUtil.isNotEmpty(result)) {
result.forEach(item -> {
String newType = PHASE_MAPPING.get(item.getPhasicType()); String newType = PHASE_MAPPING.get(item.getPhasicType());
if (newType != null) { if (newType != null) {
item.setPhasicType(newType); item.setPhasicType(newType);
@@ -320,6 +282,6 @@ public class InfluxdbDataFlickerImpl extends MppServiceImpl<RStatDataFlickerRela
}); });
} }
} }
return result; return data;
} }
} }

View File

@@ -1,11 +1,9 @@
package com.njcn.dataProcess.service.impl.influxdb; package com.njcn.dataProcess.service.impl.influxdb;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.nacos.shaded.com.google.common.reflect.TypeToken;
import com.alibaba.nacos.shaded.com.google.gson.Gson;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.csdevice.api.CsLineFeignClient;
import com.njcn.csdevice.api.EquipmentFeignClient;
import com.njcn.csdevice.pojo.dto.CsEquipmentDeliveryDTO;
import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.dataProcess.dao.imapper.DataFlucMapper; import com.njcn.dataProcess.dao.imapper.DataFlucMapper;
import com.njcn.dataProcess.dao.relation.mapper.RStatDataFlucRelationMapper; import com.njcn.dataProcess.dao.relation.mapper.RStatDataFlucRelationMapper;
import com.njcn.dataProcess.dto.DataFlucDTO; import com.njcn.dataProcess.dto.DataFlucDTO;
@@ -17,17 +15,18 @@ import com.njcn.dataProcess.pojo.po.RStatDataFlucD;
import com.njcn.dataProcess.service.IDataFluc; import com.njcn.dataProcess.service.IDataFluc;
import com.njcn.dataProcess.util.TimeUtils; import com.njcn.dataProcess.util.TimeUtils;
import com.njcn.influx.query.InfluxQueryWrapper; import com.njcn.influx.query.InfluxQueryWrapper;
import com.njcn.redis.utils.RedisUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.ListUtils; import org.apache.commons.collections4.ListUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.lang.reflect.Type;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -42,20 +41,19 @@ import java.util.stream.Collectors;
public class InfluxdbDataFlucImpl extends MppServiceImpl<RStatDataFlucRelationMapper, RStatDataFlucD> implements IDataFluc { public class InfluxdbDataFlucImpl extends MppServiceImpl<RStatDataFlucRelationMapper, RStatDataFlucD> implements IDataFluc {
private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault()); private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault());
private final DataFlucMapper dataFlucMapper; private final DataFlucMapper dataFlucMapper;
@Resource
private CsLineFeignClient csLineFeignClient;
@Resource
private EquipmentFeignClient equipmentFeignClient;
private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{ private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{
put("AB", "A"); put("AB", "A");
put("BC", "B"); put("BC", "B");
put("CA", "C"); put("CA", "C");
put("M", "T"); put("M", "T");
}}; }};
@Resource
private RedisUtil redisUtil;
private static final Set<String> LINE_VOLTAGE_TYPES =
Collections.unmodifiableSet(new HashSet<>(Arrays.asList("AB", "BC", "CA", "T")));
private static final Set<String> PHASE_VOLTAGE_TYPES =
Collections.unmodifiableSet(new HashSet<>(Arrays.asList("A", "B", "C", "T")));
@Override @Override
public void batchInsertion(List<DataFlucDTO> dataFlucDTOList) { public void batchInsertion(List<DataFlucDTO> dataFlucDTOList) {
@@ -78,12 +76,7 @@ public class InfluxdbDataFlucImpl extends MppServiceImpl<RStatDataFlucRelationMa
@Override @Override
public List<DataFlucDto> getRawData(LineCountEvaluateParam lineParam) { public List<DataFlucDto> getRawData(LineCountEvaluateParam lineParam) {
List<DataFlucDto> result = new ArrayList<>(); List<DataFlucDto> result = new ArrayList<>();
List<DataFluc> list; List<DataFluc> list = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
if (Objects.equals(lineParam.getType(), 2)) {
list = getWlMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
} else {
list = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
}
list.forEach(item->{ list.forEach(item->{
DataFlucDto dto = new DataFlucDto(); DataFlucDto dto = new DataFlucDto();
BeanUtils.copyProperties(item,dto); BeanUtils.copyProperties(item,dto);
@@ -96,12 +89,7 @@ public class InfluxdbDataFlucImpl extends MppServiceImpl<RStatDataFlucRelationMa
@Override @Override
public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) { public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) {
List<CommonMinuteDto> result = new ArrayList<>(); List<CommonMinuteDto> result = new ArrayList<>();
List<DataFluc> dataIList; List<DataFluc> dataIList = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
if (Objects.equals(lineParam.getType(), 2)) {
dataIList = getWlMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
} else {
dataIList = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
}
if (CollectionUtil.isNotEmpty(dataIList)) { if (CollectionUtil.isNotEmpty(dataIList)) {
String time = TimeUtils.StringTimeToString(lineParam.getStartTime()); String time = TimeUtils.StringTimeToString(lineParam.getStartTime());
//以监测点分组 //以监测点分组
@@ -168,6 +156,13 @@ public class InfluxdbDataFlucImpl extends MppServiceImpl<RStatDataFlucRelationMa
public List<DataFluc> getMinuteData(List<String> lineList, String startTime, String endTime, Map<String,List<String>> timeMap, Boolean dataType) { public List<DataFluc> getMinuteData(List<String> lineList, String startTime, String endTime, Map<String,List<String>> timeMap, Boolean dataType) {
List<DataFluc> dataList; List<DataFluc> dataList;
List<DataFluc> result = new ArrayList<>(); List<DataFluc> result = new ArrayList<>();
List<DataFluc> data = new ArrayList<>();
//获取监测点、接线方式数据
Type type = new TypeToken<Map<String, Integer>>(){}.getType();
Map<String, Integer> map = new Gson().fromJson(
String.valueOf(redisUtil.getObjectByKey("wlLineDetail")),
type
);
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataFluc.class); InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataFluc.class);
influxQueryWrapper.regular(DataFluc::getLineId, lineList) influxQueryWrapper.regular(DataFluc::getLineId, lineList)
.select(DataFluc::getLineId) .select(DataFluc::getLineId)
@@ -215,47 +210,24 @@ public class InfluxdbDataFlucImpl extends MppServiceImpl<RStatDataFlucRelationMa
result.addAll(dataList); result.addAll(dataList);
} }
} }
return result; if (CollectionUtil.isNotEmpty(result)) {
} if (!Objects.isNull(map)) {
//现根据监测点分组,然后根据接线方式排除多于数据,在修改相别
public List<DataFluc> getWlMinuteData(List<String> lineList, String startTime, String endTime, Map<String,List<String>> timeMap, Boolean dataType) { Map<String, List<DataFluc>> lineMap = result.stream().collect(Collectors.groupingBy(DataFluc::getLineId));
//todo FLUCCF电压波动频度原先oracle表存储的是0写死的这边暂不取值 lineMap.forEach((k,v)->{
List<DataFluc> result = new ArrayList<>(); if (Objects.isNull(map.get(k))) {
if (CollectionUtil.isNotEmpty(lineList)) { return;
//获取监测点信息 }
List<CsLinePO> line = csLineFeignClient.queryLineById(lineList).getData(); Integer conType = map.get(k);
Map<String, CsLinePO> lineMap = line.stream().collect(Collectors.toMap(CsLinePO::getLineId, Function.identity())); Set<String> validPhasicTypes = (conType != 0) ? LINE_VOLTAGE_TYPES : PHASE_VOLTAGE_TYPES;
//获取设备信息 List<DataFluc> result2 = v.stream().filter(item -> validPhasicTypes.contains(item.getPhasicType())).collect(Collectors.toList());
List<String> devList = line.stream().map(CsLinePO::getDeviceId).distinct().collect(Collectors.toList()); data.addAll(result2);
List<CsEquipmentDeliveryDTO> dev = equipmentFeignClient.queryDeviceById(devList).getData(); });
Map<String, CsEquipmentDeliveryDTO> devsMap = dev.stream().collect(Collectors.toMap(CsEquipmentDeliveryDTO::getId, Function.identity())); } else {
lineList.forEach(lineId -> { data.addAll(result);
String devId = lineMap.get(lineId).getDeviceId(); }
CsLinePO po = lineMap.get(lineId); if (CollectionUtil.isNotEmpty(data)) {
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataFluc.class); data.forEach(item -> {
influxQueryWrapper.eq(DataFluc::getLineId, lineId)
.eq(DataFluc::getProcess,Integer.toString(devsMap.get(devId).getProcess()))
.select(DataFluc::getLineId)
.select(DataFluc::getPhasicType)
.between(DataFluc::getTime, startTime, endTime)
.eq(DataFluc::getQualityFlag, "0");
if (Objects.isNull(po.getLineNo())) {
influxQueryWrapper.eq(DataFluc::getCldid,Integer.toString(po.getClDid()));
} else {
influxQueryWrapper.eq(DataFluc::getCldid,Integer.toString(po.getLineNo()));
}
//判断接线方式 (0-星型 1-角型 2-V型) 星型是相电压 角型或者v型是线电压
if (Objects.equals(po.getConType(),0)) {
//相电压电压变动幅度
influxQueryWrapper.select("Pq_Fluct","fluc");
} else {
//线电压电压变动幅度
influxQueryWrapper.select("Pq_LFluct","fluc");
}
result.addAll(dataFlucMapper.selectByQueryWrapper(influxQueryWrapper));
});
if (CollectionUtil.isNotEmpty(result)) {
result.forEach(item -> {
String newType = PHASE_MAPPING.get(item.getPhasicType()); String newType = PHASE_MAPPING.get(item.getPhasicType());
if (newType != null) { if (newType != null) {
item.setPhasicType(newType); item.setPhasicType(newType);
@@ -263,7 +235,7 @@ public class InfluxdbDataFlucImpl extends MppServiceImpl<RStatDataFlucRelationMa
}); });
} }
} }
return result; return data;
} }
} }

View File

@@ -4,10 +4,6 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.common.utils.HarmonicTimesUtil; import com.njcn.common.utils.HarmonicTimesUtil;
import com.njcn.csdevice.api.CsLineFeignClient;
import com.njcn.csdevice.api.EquipmentFeignClient;
import com.njcn.csdevice.pojo.dto.CsEquipmentDeliveryDTO;
import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.dataProcess.dao.imapper.DataHarmRateIMapper; import com.njcn.dataProcess.dao.imapper.DataHarmRateIMapper;
import com.njcn.dataProcess.dao.relation.mapper.RStatDataHarmRateIRelationMapper; import com.njcn.dataProcess.dao.relation.mapper.RStatDataHarmRateIRelationMapper;
import com.njcn.dataProcess.param.LineCountEvaluateParam; import com.njcn.dataProcess.param.LineCountEvaluateParam;
@@ -28,7 +24,6 @@ import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -40,10 +35,6 @@ public class InfluxdbDataHarmRateIImpl extends MppServiceImpl<RStatDataHarmRateI
private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault()); private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault());
@Resource @Resource
private DataHarmRateIMapper dataHarmRateIMapper; private DataHarmRateIMapper dataHarmRateIMapper;
@Resource
private CsLineFeignClient csLineFeignClient;
@Resource
private EquipmentFeignClient equipmentFeignClient;
private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{ private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{
put("AB", "A"); put("AB", "A");
@@ -55,12 +46,7 @@ public class InfluxdbDataHarmRateIImpl extends MppServiceImpl<RStatDataHarmRateI
@Override @Override
public List<DataHarmRateIDto> getRawData(LineCountEvaluateParam lineParam) { public List<DataHarmRateIDto> getRawData(LineCountEvaluateParam lineParam) {
List<DataHarmRateIDto> result = new ArrayList<>(); List<DataHarmRateIDto> result = new ArrayList<>();
List<DataHarmrateI> list; List<DataHarmrateI> list = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
if (Objects.equals(lineParam.getType(), 2)) {
list = getWlMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
} else {
list = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
}
list.forEach(item->{ list.forEach(item->{
DataHarmRateIDto dto = new DataHarmRateIDto(); DataHarmRateIDto dto = new DataHarmRateIDto();
BeanUtils.copyProperties(item,dto); BeanUtils.copyProperties(item,dto);
@@ -73,12 +59,7 @@ public class InfluxdbDataHarmRateIImpl extends MppServiceImpl<RStatDataHarmRateI
@Override @Override
public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) { public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) {
List<CommonMinuteDto> result = new ArrayList<>(); List<CommonMinuteDto> result = new ArrayList<>();
List<DataHarmrateI> data; List<DataHarmrateI> data = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
if (Objects.equals(lineParam.getType(), 2)) {
data = getWlMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
} else {
data = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
}
if (CollectionUtil.isNotEmpty(data)) { if (CollectionUtil.isNotEmpty(data)) {
String time = TimeUtils.StringTimeToString(lineParam.getStartTime()); String time = TimeUtils.StringTimeToString(lineParam.getStartTime());
//以监测点分组 //以监测点分组
@@ -246,48 +227,13 @@ public class InfluxdbDataHarmRateIImpl extends MppServiceImpl<RStatDataHarmRateI
result.addAll(dataList); result.addAll(dataList);
} }
} }
return result; if (CollectionUtil.isNotEmpty(result)) {
} result.forEach(item -> {
String newType = PHASE_MAPPING.get(item.getPhasicType());
public List<DataHarmrateI> getWlMinuteData(List<String> lineList, String startTime, String endTime, Map<String,List<String>> timeMap, Boolean dataType) { if (newType != null) {
List<DataHarmrateI> result = new ArrayList<>(); item.setPhasicType(newType);
if (CollectionUtil.isNotEmpty(lineList)) {
//获取监测点信息
List<CsLinePO> line = csLineFeignClient.queryLineById(lineList).getData();
Map<String, CsLinePO> lineMap = line.stream().collect(Collectors.toMap(CsLinePO::getLineId, Function.identity()));
//获取设备信息
List<String> devList = line.stream().map(CsLinePO::getDeviceId).distinct().collect(Collectors.toList());
List<CsEquipmentDeliveryDTO> dev = equipmentFeignClient.queryDeviceById(devList).getData();
Map<String, CsEquipmentDeliveryDTO> devsMap = dev.stream().collect(Collectors.toMap(CsEquipmentDeliveryDTO::getId, Function.identity()));
lineList.forEach(lineId -> {
String devId = lineMap.get(lineId).getDeviceId();
CsLinePO po = lineMap.get(lineId);
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataHarmrateI.class);
influxQueryWrapper.samePrefixAndSuffix("Pq_HarmRI_", "i_", HarmonicTimesUtil.harmonicTimesList(2, 50, 1));
influxQueryWrapper.eq(DataHarmrateI::getLineId, lineId)
.eq(DataHarmrateI::getProcess,Integer.toString(devsMap.get(devId).getProcess()))
.select(DataHarmrateI::getLineId)
.select(DataHarmrateI::getPhasicType)
.select(DataHarmrateI::getValueType)
//电流基波有效值
.select("Pq_RmsFundI_","i_1")
.between(DataHarmrateI::getTime, startTime, endTime)
.eq(DataHarmrateI::getQualityFlag, "0");
if (Objects.isNull(po.getLineNo())) {
influxQueryWrapper.eq(DataHarmrateI::getCldid,Integer.toString(po.getClDid()));
} else {
influxQueryWrapper.eq(DataHarmrateI::getCldid,Integer.toString(po.getLineNo()));
} }
result.addAll(dataHarmRateIMapper.selectByQueryWrapper(influxQueryWrapper));
}); });
if (CollectionUtil.isNotEmpty(result)) {
result.forEach(item -> {
String newType = PHASE_MAPPING.get(item.getPhasicType());
if (newType != null) {
item.setPhasicType(newType);
}
});
}
} }
return result; return result;
} }

View File

@@ -2,17 +2,16 @@ package com.njcn.dataProcess.service.impl.influxdb;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.nacos.shaded.com.google.common.reflect.TypeToken;
import com.alibaba.nacos.shaded.com.google.gson.Gson;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.common.utils.HarmonicTimesUtil; import com.njcn.common.utils.HarmonicTimesUtil;
import com.njcn.csdevice.api.CsLineFeignClient;
import com.njcn.csdevice.api.EquipmentFeignClient;
import com.njcn.csdevice.pojo.dto.CsEquipmentDeliveryDTO;
import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.dataProcess.constant.InfluxDBTableConstant; import com.njcn.dataProcess.constant.InfluxDBTableConstant;
import com.njcn.dataProcess.dao.imapper.DataHarmRateVMapper; import com.njcn.dataProcess.dao.imapper.DataHarmRateVMapper;
import com.njcn.dataProcess.dao.relation.mapper.RStatDataHarmRateVRelationMapper; import com.njcn.dataProcess.dao.relation.mapper.RStatDataHarmRateVRelationMapper;
import com.njcn.dataProcess.dto.DataHarmrateVDTO; import com.njcn.dataProcess.dto.DataHarmrateVDTO;
import com.njcn.dataProcess.param.LineCountEvaluateParam; import com.njcn.dataProcess.param.LineCountEvaluateParam;
import com.njcn.dataProcess.po.influx.DataFlicker;
import com.njcn.dataProcess.po.influx.DataHarmrateV; import com.njcn.dataProcess.po.influx.DataHarmrateV;
import com.njcn.dataProcess.po.influx.DataV; import com.njcn.dataProcess.po.influx.DataV;
import com.njcn.dataProcess.pojo.dto.CommonMinuteDto; import com.njcn.dataProcess.pojo.dto.CommonMinuteDto;
@@ -23,17 +22,18 @@ import com.njcn.dataProcess.service.IDataHarmRateV;
import com.njcn.dataProcess.util.TimeUtils; import com.njcn.dataProcess.util.TimeUtils;
import com.njcn.influx.constant.InfluxDbSqlConstant; import com.njcn.influx.constant.InfluxDbSqlConstant;
import com.njcn.influx.query.InfluxQueryWrapper; import com.njcn.influx.query.InfluxQueryWrapper;
import com.njcn.redis.utils.RedisUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.ListUtils; import org.apache.commons.collections4.ListUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.lang.reflect.Type;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -42,31 +42,25 @@ import java.util.stream.Collectors;
@Service("InfluxdbDataHarmRateVImpl") @Service("InfluxdbDataHarmRateVImpl")
@RequiredArgsConstructor @RequiredArgsConstructor
public class InfluxdbDataHarmRateVImpl extends MppServiceImpl<RStatDataHarmRateVRelationMapper, RStatDataHarmRateVD> implements IDataHarmRateV { public class InfluxdbDataHarmRateVImpl extends MppServiceImpl<RStatDataHarmRateVRelationMapper, RStatDataHarmRateVD> implements IDataHarmRateV {
private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault()); private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault());
private final DataHarmRateVMapper dataHarmRateVMapper; private final DataHarmRateVMapper dataHarmRateVMapper;
@Resource
private CsLineFeignClient csLineFeignClient;
@Resource
private EquipmentFeignClient equipmentFeignClient;
private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{ private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{
put("AB", "A"); put("AB", "A");
put("BC", "B"); put("BC", "B");
put("CA", "C"); put("CA", "C");
put("M", "T"); put("M", "T");
}}; }};
@Resource
private RedisUtil redisUtil;
private static final Set<String> LINE_VOLTAGE_TYPES =
Collections.unmodifiableSet(new HashSet<>(Arrays.asList("AB", "BC", "CA", "T")));
private static final Set<String> PHASE_VOLTAGE_TYPES =
Collections.unmodifiableSet(new HashSet<>(Arrays.asList("A", "B", "C", "T")));
@Override @Override
public List<DataHarmDto> getRawData(LineCountEvaluateParam lineParam) { public List<DataHarmDto> getRawData(LineCountEvaluateParam lineParam) {
List<DataHarmDto> result = new ArrayList<>(); List<DataHarmDto> result = new ArrayList<>();
List<DataHarmrateV> list; List<DataHarmrateV> list = getMinuteData(lineParam);
if (Objects.equals(lineParam.getType(), 2)) {
list = getWlMinuteData(lineParam);
} else {
list = getMinuteData(lineParam);;
}
list.forEach(item->{ list.forEach(item->{
DataHarmDto dto = new DataHarmDto(); DataHarmDto dto = new DataHarmDto();
BeanUtils.copyProperties(item,dto); BeanUtils.copyProperties(item,dto);
@@ -97,12 +91,7 @@ public class InfluxdbDataHarmRateVImpl extends MppServiceImpl<RStatDataHarmRateV
@Override @Override
public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) { public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) {
List<CommonMinuteDto> result = new ArrayList<>(); List<CommonMinuteDto> result = new ArrayList<>();
List<DataHarmrateV> data; List<DataHarmrateV> data = getMinuteData(lineParam);
if (Objects.equals(lineParam.getType(), 2)) {
data = getWlMinuteData(lineParam);
} else {
data = getMinuteData(lineParam);;
}
if (CollectionUtil.isNotEmpty(data)) { if (CollectionUtil.isNotEmpty(data)) {
String time = TimeUtils.StringTimeToString(lineParam.getStartTime()); String time = TimeUtils.StringTimeToString(lineParam.getStartTime());
//以监测点分组 //以监测点分组
@@ -264,6 +253,13 @@ public class InfluxdbDataHarmRateVImpl extends MppServiceImpl<RStatDataHarmRateV
public List<DataHarmrateV> getMinuteData(LineCountEvaluateParam lineParam) { public List<DataHarmrateV> getMinuteData(LineCountEvaluateParam lineParam) {
List<DataHarmrateV> dataList; List<DataHarmrateV> dataList;
List<DataHarmrateV> result = new ArrayList<>(); List<DataHarmrateV> result = new ArrayList<>();
List<DataHarmrateV> data = new ArrayList<>();
//获取监测点、接线方式数据
Type type = new TypeToken<Map<String, Integer>>(){}.getType();
Map<String, Integer> map = new Gson().fromJson(
String.valueOf(redisUtil.getObjectByKey("wlLineDetail")),
type
);
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataHarmrateV.class); InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataHarmrateV.class);
influxQueryWrapper.samePrefixAndSuffix(InfluxDbSqlConstant.V, InfluxDbSqlConstant.V, HarmonicTimesUtil.harmonicTimesList(1, 50, 1)); influxQueryWrapper.samePrefixAndSuffix(InfluxDbSqlConstant.V, InfluxDbSqlConstant.V, HarmonicTimesUtil.harmonicTimesList(1, 50, 1));
influxQueryWrapper.regular(DataHarmrateV::getLineId, lineParam.getLineId()) influxQueryWrapper.regular(DataHarmrateV::getLineId, lineParam.getLineId())
@@ -314,51 +310,24 @@ public class InfluxdbDataHarmRateVImpl extends MppServiceImpl<RStatDataHarmRateV
result.addAll(dataList); result.addAll(dataList);
} }
} }
return result; if (CollectionUtil.isNotEmpty(result)) {
} if (!Objects.isNull(map)) {
//现根据监测点分组,然后根据接线方式排除多于数据,在修改相别
public List<DataHarmrateV> getWlMinuteData(LineCountEvaluateParam lineParam) { Map<String, List<DataHarmrateV>> lineMap = result.stream().collect(Collectors.groupingBy(DataHarmrateV::getLineId));
List<DataHarmrateV> result = new ArrayList<>(); lineMap.forEach((k,v)->{
if (CollectionUtil.isNotEmpty(lineParam.getLineId())) { if (Objects.isNull(map.get(k))) {
//获取监测点信息 return;
List<CsLinePO> line = csLineFeignClient.queryLineById(lineParam.getLineId()).getData(); }
Map<String, CsLinePO> lineMap = line.stream().collect(Collectors.toMap(CsLinePO::getLineId, Function.identity())); Integer conType = map.get(k);
//获取设备信息 Set<String> validPhasicTypes = (conType != 0) ? LINE_VOLTAGE_TYPES : PHASE_VOLTAGE_TYPES;
List<String> devList = line.stream().map(CsLinePO::getDeviceId).distinct().collect(Collectors.toList()); List<DataHarmrateV> result2 = v.stream().filter(item -> validPhasicTypes.contains(item.getPhasicType())).collect(Collectors.toList());
List<CsEquipmentDeliveryDTO> dev = equipmentFeignClient.queryDeviceById(devList).getData(); data.addAll(result2);
Map<String, CsEquipmentDeliveryDTO> devsMap = dev.stream().collect(Collectors.toMap(CsEquipmentDeliveryDTO::getId, Function.identity())); });
lineParam.getLineId().forEach(lineId -> { } else {
String devId = lineMap.get(lineId).getDeviceId(); data.addAll(result);
CsLinePO po = lineMap.get(lineId); }
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataHarmrateV.class); if (CollectionUtil.isNotEmpty(data)) {
influxQueryWrapper.eq(DataHarmrateV::getLineId, lineId) data.forEach(item -> {
.eq(DataHarmrateV::getProcess,Integer.toString(devsMap.get(devId).getProcess()))
.select(DataHarmrateV::getLineId)
.select(DataHarmrateV::getPhasicType)
.select(DataHarmrateV::getValueType)
.between(DataHarmrateV::getTime, lineParam.getStartTime(), lineParam.getEndTime())
.eq(DataHarmrateV::getQualityFlag, "0");
if (Objects.isNull(po.getLineNo())) {
influxQueryWrapper.eq(DataHarmrateV::getCldid,Integer.toString(po.getClDid()));
} else {
influxQueryWrapper.eq(DataHarmrateV::getCldid,Integer.toString(po.getLineNo()));
}
//判断接线方式 (0-星型 1-角型 2-V型) 星型是相电压 角型或者v型是线电压
if (Objects.equals(po.getConType(),0)) {
//相电压基波有效值
influxQueryWrapper.select("Pq_RmsFundU_","v_1");
//2-50次 相电压谐波含有率
influxQueryWrapper.samePrefixAndSuffix("Pq_HarmU_", "v_", HarmonicTimesUtil.harmonicTimesList(2, 50, 1));
} else {
//线电压基波有效值
influxQueryWrapper.select("Pq_RmsFundLU_","v_1");
//2-50次 线电压谐波含有率
influxQueryWrapper.samePrefixAndSuffix("Pq_HarmLU_", "v_", HarmonicTimesUtil.harmonicTimesList(2, 50, 1));
}
result.addAll(dataHarmRateVMapper.selectByQueryWrapper(influxQueryWrapper));
});
if (CollectionUtil.isNotEmpty(result)) {
result.forEach(item -> {
String newType = PHASE_MAPPING.get(item.getPhasicType()); String newType = PHASE_MAPPING.get(item.getPhasicType());
if (newType != null) { if (newType != null) {
item.setPhasicType(newType); item.setPhasicType(newType);
@@ -366,7 +335,6 @@ public class InfluxdbDataHarmRateVImpl extends MppServiceImpl<RStatDataHarmRateV
}); });
} }
} }
return result; return data;
} }
} }

View File

@@ -4,10 +4,6 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.common.utils.HarmonicTimesUtil; import com.njcn.common.utils.HarmonicTimesUtil;
import com.njcn.csdevice.api.CsLineFeignClient;
import com.njcn.csdevice.api.EquipmentFeignClient;
import com.njcn.csdevice.pojo.dto.CsEquipmentDeliveryDTO;
import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.dataProcess.dao.imapper.DataHarmphasicIMapper; import com.njcn.dataProcess.dao.imapper.DataHarmphasicIMapper;
import com.njcn.dataProcess.dao.relation.mapper.RStatDataHarmPhasicIRelationMapper; import com.njcn.dataProcess.dao.relation.mapper.RStatDataHarmPhasicIRelationMapper;
import com.njcn.dataProcess.dto.DataHarmphasicIDTO; import com.njcn.dataProcess.dto.DataHarmphasicIDTO;
@@ -25,12 +21,10 @@ import org.apache.commons.collections4.ListUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -46,10 +40,6 @@ public class InfluxdbDataHarmphasicIImpl extends MppServiceImpl<RStatDataHarmPha
private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault()); private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault());
private final DataHarmphasicIMapper dataHarmphasicIMapper; private final DataHarmphasicIMapper dataHarmphasicIMapper;
@Resource
private CsLineFeignClient csLineFeignClient;
@Resource
private EquipmentFeignClient equipmentFeignClient;
private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{ private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{
put("AB", "A"); put("AB", "A");
@@ -78,12 +68,7 @@ public class InfluxdbDataHarmphasicIImpl extends MppServiceImpl<RStatDataHarmPha
@Override @Override
public List<DataHarmPhasicIDto> getRawData(LineCountEvaluateParam lineParam) { public List<DataHarmPhasicIDto> getRawData(LineCountEvaluateParam lineParam) {
List<DataHarmPhasicIDto> result = new ArrayList<>(); List<DataHarmPhasicIDto> result = new ArrayList<>();
List<DataHarmphasicI> list; List<DataHarmphasicI> list = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
if (Objects.equals(lineParam.getType(), 2)) {
list = getWlMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
} else {
list = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
}
list.forEach(item->{ list.forEach(item->{
DataHarmPhasicIDto dto = new DataHarmPhasicIDto(); DataHarmPhasicIDto dto = new DataHarmPhasicIDto();
BeanUtils.copyProperties(item,dto); BeanUtils.copyProperties(item,dto);
@@ -96,12 +81,7 @@ public class InfluxdbDataHarmphasicIImpl extends MppServiceImpl<RStatDataHarmPha
@Override @Override
public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) { public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) {
List<CommonMinuteDto> result = new ArrayList<>(); List<CommonMinuteDto> result = new ArrayList<>();
List<DataHarmphasicI> data; List<DataHarmphasicI> data = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
if (Objects.equals(lineParam.getType(), 2)) {
data = getWlMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
} else {
data = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
}
if (CollectionUtil.isNotEmpty(data)) { if (CollectionUtil.isNotEmpty(data)) {
String time = TimeUtils.StringTimeToString(lineParam.getStartTime()); String time = TimeUtils.StringTimeToString(lineParam.getStartTime());
//以监测点分组 //以监测点分组
@@ -269,50 +249,15 @@ public class InfluxdbDataHarmphasicIImpl extends MppServiceImpl<RStatDataHarmPha
result.addAll(dataList); result.addAll(dataList);
} }
} }
return result; if (CollectionUtil.isNotEmpty(result)) {
} result.forEach(item -> {
String newType = PHASE_MAPPING.get(item.getPhasicType());
public List<DataHarmphasicI> getWlMinuteData(List<String> lineList, String startTime, String endTime, Map<String,List<String>> timeMap,Boolean dataType) { if (newType != null) {
List<DataHarmphasicI> result = new ArrayList<>(); item.setPhasicType(newType);
if (CollectionUtil.isNotEmpty(lineList)) {
//获取监测点信息
List<CsLinePO> line = csLineFeignClient.queryLineById(lineList).getData();
Map<String, CsLinePO> lineMap = line.stream().collect(Collectors.toMap(CsLinePO::getLineId, Function.identity()));
//获取设备信息
List<String> devList = line.stream().map(CsLinePO::getDeviceId).distinct().collect(Collectors.toList());
List<CsEquipmentDeliveryDTO> dev = equipmentFeignClient.queryDeviceById(devList).getData();
Map<String, CsEquipmentDeliveryDTO> devsMap = dev.stream().collect(Collectors.toMap(CsEquipmentDeliveryDTO::getId, Function.identity()));
lineList.forEach(lineId -> {
String devId = lineMap.get(lineId).getDeviceId();
CsLinePO po = lineMap.get(lineId);
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataHarmphasicI.class);
//谐波电流幅值相角
influxQueryWrapper.samePrefixAndSuffix("Pq_HarmIAng_", "i_", HarmonicTimesUtil.harmonicTimesList(2, 50, 1));
influxQueryWrapper.eq(DataHarmphasicI::getLineId, lineId)
.eq(DataHarmphasicI::getProcess,Integer.toString(devsMap.get(devId).getProcess()))
.select(DataHarmphasicI::getLineId)
.select(DataHarmphasicI::getPhasicType)
.select(DataHarmphasicI::getValueType)
//基波电流相角
.select("Pq_FundIAng","i_1")
.between(DataHarmphasicI::getTime, startTime, endTime)
.eq(DataHarmphasicI::getQualityFlag, "0");
if (Objects.isNull(po.getLineNo())) {
influxQueryWrapper.eq(DataHarmphasicI::getCldid,Integer.toString(po.getClDid()));
} else {
influxQueryWrapper.eq(DataHarmphasicI::getCldid,Integer.toString(po.getLineNo()));
} }
result.addAll(dataHarmphasicIMapper.selectByQueryWrapper(influxQueryWrapper));
}); });
if (CollectionUtil.isNotEmpty(result)) {
result.forEach(item -> {
String newType = PHASE_MAPPING.get(item.getPhasicType());
if (newType != null) {
item.setPhasicType(newType);
}
});
}
} }
return result; return result;
} }
} }

View File

@@ -2,17 +2,14 @@ package com.njcn.dataProcess.service.impl.influxdb;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.nacos.shaded.com.google.common.reflect.TypeToken;
import com.alibaba.nacos.shaded.com.google.gson.Gson;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.common.utils.HarmonicTimesUtil; import com.njcn.common.utils.HarmonicTimesUtil;
import com.njcn.csdevice.api.CsLineFeignClient;
import com.njcn.csdevice.api.EquipmentFeignClient;
import com.njcn.csdevice.pojo.dto.CsEquipmentDeliveryDTO;
import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.dataProcess.dao.imapper.DataHarmphasicVMapper; import com.njcn.dataProcess.dao.imapper.DataHarmphasicVMapper;
import com.njcn.dataProcess.dao.relation.mapper.RStatDataHarmPhasicVRelationMapper; import com.njcn.dataProcess.dao.relation.mapper.RStatDataHarmPhasicVRelationMapper;
import com.njcn.dataProcess.dto.DataHarmphasicVDTO; import com.njcn.dataProcess.dto.DataHarmphasicVDTO;
import com.njcn.dataProcess.param.LineCountEvaluateParam; import com.njcn.dataProcess.param.LineCountEvaluateParam;
import com.njcn.dataProcess.po.influx.DataHarmphasicI;
import com.njcn.dataProcess.po.influx.DataHarmphasicV; import com.njcn.dataProcess.po.influx.DataHarmphasicV;
import com.njcn.dataProcess.pojo.dto.CommonMinuteDto; import com.njcn.dataProcess.pojo.dto.CommonMinuteDto;
import com.njcn.dataProcess.pojo.dto.DataHarmDto; import com.njcn.dataProcess.pojo.dto.DataHarmDto;
@@ -22,17 +19,18 @@ import com.njcn.dataProcess.service.IDataHarmphasicV;
import com.njcn.dataProcess.util.TimeUtils; import com.njcn.dataProcess.util.TimeUtils;
import com.njcn.influx.constant.InfluxDbSqlConstant; import com.njcn.influx.constant.InfluxDbSqlConstant;
import com.njcn.influx.query.InfluxQueryWrapper; import com.njcn.influx.query.InfluxQueryWrapper;
import com.njcn.redis.utils.RedisUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.ListUtils; import org.apache.commons.collections4.ListUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.lang.reflect.Type;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -47,19 +45,19 @@ import java.util.stream.Collectors;
public class InfluxdbDataHarmphasicVImpl extends MppServiceImpl<RStatDataHarmPhasicVRelationMapper, RStatDataHarmPhasicVD> implements IDataHarmphasicV { public class InfluxdbDataHarmphasicVImpl extends MppServiceImpl<RStatDataHarmPhasicVRelationMapper, RStatDataHarmPhasicVD> implements IDataHarmphasicV {
private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault()); private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault());
private final DataHarmphasicVMapper dataHarmphasicVMapper; private final DataHarmphasicVMapper dataHarmphasicVMapper;
@Resource
private CsLineFeignClient csLineFeignClient;
@Resource
private EquipmentFeignClient equipmentFeignClient;
private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{ private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{
put("AB", "A"); put("AB", "A");
put("BC", "B"); put("BC", "B");
put("CA", "C"); put("CA", "C");
put("M", "T"); put("M", "T");
}}; }};
@Resource
private RedisUtil redisUtil;
private static final Set<String> LINE_VOLTAGE_TYPES =
Collections.unmodifiableSet(new HashSet<>(Arrays.asList("AB", "BC", "CA", "T")));
private static final Set<String> PHASE_VOLTAGE_TYPES =
Collections.unmodifiableSet(new HashSet<>(Arrays.asList("A", "B", "C", "T")));
@Override @Override
@@ -83,12 +81,7 @@ public class InfluxdbDataHarmphasicVImpl extends MppServiceImpl<RStatDataHarmPha
@Override @Override
public List<DataHarmDto> getRawData(LineCountEvaluateParam lineParam) { public List<DataHarmDto> getRawData(LineCountEvaluateParam lineParam) {
List<DataHarmDto> result = new ArrayList<>(); List<DataHarmDto> result = new ArrayList<>();
List<DataHarmphasicV> list; List<DataHarmphasicV> list = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
if (Objects.equals(lineParam.getType(), 2)) {
list = getWlMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
} else {
list = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
}
list.forEach(item->{ list.forEach(item->{
DataHarmDto dto = new DataHarmDto(); DataHarmDto dto = new DataHarmDto();
BeanUtils.copyProperties(item,dto); BeanUtils.copyProperties(item,dto);
@@ -101,12 +94,7 @@ public class InfluxdbDataHarmphasicVImpl extends MppServiceImpl<RStatDataHarmPha
@Override @Override
public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) { public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) {
List<CommonMinuteDto> result = new ArrayList<>(); List<CommonMinuteDto> result = new ArrayList<>();
List<DataHarmphasicV> data; List<DataHarmphasicV> data = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
if (Objects.equals(lineParam.getType(), 2)) {
data = getWlMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
} else {
data = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
}
if (CollectionUtil.isNotEmpty(data)) { if (CollectionUtil.isNotEmpty(data)) {
String time = TimeUtils.StringTimeToString(lineParam.getStartTime()); String time = TimeUtils.StringTimeToString(lineParam.getStartTime());
//以监测点分组 //以监测点分组
@@ -227,6 +215,13 @@ public class InfluxdbDataHarmphasicVImpl extends MppServiceImpl<RStatDataHarmPha
public List<DataHarmphasicV> getMinuteData(List<String> lineList, String startTime, String endTime, Map<String,List<String>> timeMap, Boolean dataType) { public List<DataHarmphasicV> getMinuteData(List<String> lineList, String startTime, String endTime, Map<String,List<String>> timeMap, Boolean dataType) {
List<DataHarmphasicV> dataList; List<DataHarmphasicV> dataList;
List<DataHarmphasicV> result = new ArrayList<>(); List<DataHarmphasicV> result = new ArrayList<>();
List<DataHarmphasicV> data = new ArrayList<>();
//获取监测点、接线方式数据
Type type = new TypeToken<Map<String, Integer>>(){}.getType();
Map<String, Integer> map = new Gson().fromJson(
String.valueOf(redisUtil.getObjectByKey("wlLineDetail")),
type
);
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataHarmphasicV.class); InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataHarmphasicV.class);
influxQueryWrapper.samePrefixAndSuffix(InfluxDbSqlConstant.V, InfluxDbSqlConstant.V, HarmonicTimesUtil.harmonicTimesList(1, 50, 1)); influxQueryWrapper.samePrefixAndSuffix(InfluxDbSqlConstant.V, InfluxDbSqlConstant.V, HarmonicTimesUtil.harmonicTimesList(1, 50, 1));
influxQueryWrapper.regular(DataHarmphasicV::getLineId, lineList) influxQueryWrapper.regular(DataHarmphasicV::getLineId, lineList)
@@ -274,52 +269,24 @@ public class InfluxdbDataHarmphasicVImpl extends MppServiceImpl<RStatDataHarmPha
result.addAll(dataList); result.addAll(dataList);
} }
} }
return result; if (CollectionUtil.isNotEmpty(result)) {
} if (!Objects.isNull(map)) {
//现根据监测点分组,然后根据接线方式排除多于数据,在修改相别
Map<String, List<DataHarmphasicV>> lineMap = result.stream().collect(Collectors.groupingBy(DataHarmphasicV::getLineId));
public List<DataHarmphasicV> getWlMinuteData(List<String> lineList, String startTime, String endTime, Map<String,List<String>> timeMap, Boolean dataType) { lineMap.forEach((k,v)->{
List<DataHarmphasicV> result = new ArrayList<>(); if (Objects.isNull(map.get(k))) {
if (CollectionUtil.isNotEmpty(lineList)) { return;
//获取监测点信息 }
List<CsLinePO> line = csLineFeignClient.queryLineById(lineList).getData(); Integer conType = map.get(k);
Map<String, CsLinePO> lineMap = line.stream().collect(Collectors.toMap(CsLinePO::getLineId, Function.identity())); Set<String> validPhasicTypes = (conType != 0) ? LINE_VOLTAGE_TYPES : PHASE_VOLTAGE_TYPES;
//获取设备信息 List<DataHarmphasicV> result2 = v.stream().filter(item -> validPhasicTypes.contains(item.getPhasicType())).collect(Collectors.toList());
List<String> devList = line.stream().map(CsLinePO::getDeviceId).distinct().collect(Collectors.toList()); data.addAll(result2);
List<CsEquipmentDeliveryDTO> dev = equipmentFeignClient.queryDeviceById(devList).getData(); });
Map<String, CsEquipmentDeliveryDTO> devsMap = dev.stream().collect(Collectors.toMap(CsEquipmentDeliveryDTO::getId, Function.identity())); } else {
lineList.forEach(lineId -> { data.addAll(result);
String devId = lineMap.get(lineId).getDeviceId(); }
CsLinePO po = lineMap.get(lineId); if (CollectionUtil.isNotEmpty(data)) {
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataHarmphasicV.class); data.forEach(item -> {
influxQueryWrapper.eq(DataHarmphasicV::getLineId, lineId)
.eq(DataHarmphasicV::getProcess,Integer.toString(devsMap.get(devId).getProcess()))
.select(DataHarmphasicV::getLineId)
.select(DataHarmphasicV::getPhasicType)
.select(DataHarmphasicV::getValueType)
.between(DataHarmphasicV::getTime, startTime, endTime)
.eq(DataHarmphasicV::getQualityFlag, "0");
if (Objects.isNull(po.getLineNo())) {
influxQueryWrapper.eq(DataHarmphasicV::getCldid,Integer.toString(po.getClDid()));
} else {
influxQueryWrapper.eq(DataHarmphasicV::getCldid,Integer.toString(po.getLineNo()));
}
//判断接线方式 (0-星型 1-角型 2-V型) 星型是相电压 角型或者v型是线电压
if (Objects.equals(po.getConType(),0)) {
//相电压基波有效值相角
influxQueryWrapper.select("Pq_FundUAng","v_1");
//2-50次 相电压谐波相角
influxQueryWrapper.samePrefixAndSuffix("Pq_HarmUAng_", "v_", HarmonicTimesUtil.harmonicTimesList(2, 50, 1));
} else {
//线电压基波有效值相角
influxQueryWrapper.select("Pq_FundLUAng","v_1");
//2-50次 线电压谐波相角
influxQueryWrapper.samePrefixAndSuffix("Pq_HarmLUAng_", "v_", HarmonicTimesUtil.harmonicTimesList(2, 50, 1));
}
result.addAll(dataHarmphasicVMapper.selectByQueryWrapper(influxQueryWrapper));
});
if (CollectionUtil.isNotEmpty(result)) {
result.forEach(item -> {
String newType = PHASE_MAPPING.get(item.getPhasicType()); String newType = PHASE_MAPPING.get(item.getPhasicType());
if (newType != null) { if (newType != null) {
item.setPhasicType(newType); item.setPhasicType(newType);
@@ -327,6 +294,6 @@ public class InfluxdbDataHarmphasicVImpl extends MppServiceImpl<RStatDataHarmPha
}); });
} }
} }
return result; return data;
} }
} }

View File

@@ -4,10 +4,6 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.common.utils.HarmonicTimesUtil; import com.njcn.common.utils.HarmonicTimesUtil;
import com.njcn.csdevice.api.CsLineFeignClient;
import com.njcn.csdevice.api.EquipmentFeignClient;
import com.njcn.csdevice.pojo.dto.CsEquipmentDeliveryDTO;
import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.dataProcess.dao.imapper.DataHarmpowerPMapper; import com.njcn.dataProcess.dao.imapper.DataHarmpowerPMapper;
import com.njcn.dataProcess.dao.relation.mapper.RStatDataHarmPowerPRelationMapper; import com.njcn.dataProcess.dao.relation.mapper.RStatDataHarmPowerPRelationMapper;
import com.njcn.dataProcess.dto.DataHarmpowerPDTO; import com.njcn.dataProcess.dto.DataHarmpowerPDTO;
@@ -26,13 +22,11 @@ import org.apache.commons.collections4.ListUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -47,12 +41,7 @@ import java.util.stream.Collectors;
public class InfluxdbDataHarmpowerPImpl extends MppServiceImpl<RStatDataHarmPowerPRelationMapper, RStatDataHarmPowerPD> implements IDataHarmpowerP { public class InfluxdbDataHarmpowerPImpl extends MppServiceImpl<RStatDataHarmPowerPRelationMapper, RStatDataHarmPowerPD> implements IDataHarmpowerP {
private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault()); private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault());
private final DataHarmpowerPMapper dataHarmpowerPMapper; private final DataHarmpowerPMapper dataHarmpowerPMapper;
@Resource
private CsLineFeignClient csLineFeignClient;
@Resource
private EquipmentFeignClient equipmentFeignClient;
private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{ private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{
put("AB", "A"); put("AB", "A");
@@ -82,12 +71,7 @@ public class InfluxdbDataHarmpowerPImpl extends MppServiceImpl<RStatDataHarmPowe
@Override @Override
public List<DataPowerPDto> getRawData(LineCountEvaluateParam lineParam) { public List<DataPowerPDto> getRawData(LineCountEvaluateParam lineParam) {
List<DataPowerPDto> result = new ArrayList<>(); List<DataPowerPDto> result = new ArrayList<>();
List<DataHarmpowerP> list; List<DataHarmpowerP> list = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
if (Objects.equals(lineParam.getType(), 2)) {
list = getWlMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
} else {
list = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
}
list.forEach(item->{ list.forEach(item->{
DataPowerPDto dto = new DataPowerPDto(); DataPowerPDto dto = new DataPowerPDto();
BeanUtils.copyProperties(item,dto); BeanUtils.copyProperties(item,dto);
@@ -100,12 +84,7 @@ public class InfluxdbDataHarmpowerPImpl extends MppServiceImpl<RStatDataHarmPowe
@Override @Override
public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) { public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) {
List<CommonMinuteDto> result = new ArrayList<>(); List<CommonMinuteDto> result = new ArrayList<>();
List<DataHarmpowerP> data; List<DataHarmpowerP> data = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
if (Objects.equals(lineParam.getType(), 2)) {
data = getWlMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
} else {
data = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
}
if (CollectionUtil.isNotEmpty(data)) { if (CollectionUtil.isNotEmpty(data)) {
String time = TimeUtils.StringTimeToString(lineParam.getStartTime()); String time = TimeUtils.StringTimeToString(lineParam.getStartTime());
//以监测点分组 //以监测点分组
@@ -213,6 +192,7 @@ public class InfluxdbDataHarmpowerPImpl extends MppServiceImpl<RStatDataHarmPowe
List<DataHarmpowerP> result = new ArrayList<>(); List<DataHarmpowerP> result = new ArrayList<>();
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataHarmpowerP.class); InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataHarmpowerP.class);
influxQueryWrapper.samePrefixAndSuffix(InfluxDbSqlConstant.P, InfluxDbSqlConstant.P, HarmonicTimesUtil.harmonicTimesList(1, 50, 1)); influxQueryWrapper.samePrefixAndSuffix(InfluxDbSqlConstant.P, InfluxDbSqlConstant.P, HarmonicTimesUtil.harmonicTimesList(1, 50, 1));
influxQueryWrapper.samePrefixAndSuffix("tot_tp_", "tot_tp_", HarmonicTimesUtil.harmonicTimesList(1, 50, 1));
influxQueryWrapper.regular(DataHarmpowerP::getLineId, lineList) influxQueryWrapper.regular(DataHarmpowerP::getLineId, lineList)
.select(DataHarmpowerP::getLineId) .select(DataHarmpowerP::getLineId)
.select(DataHarmpowerP::getPhasicType) .select(DataHarmpowerP::getPhasicType)
@@ -220,6 +200,9 @@ public class InfluxdbDataHarmpowerPImpl extends MppServiceImpl<RStatDataHarmPowe
.select(DataHarmpowerP::getP) .select(DataHarmpowerP::getP)
.select(DataHarmpowerP::getDf) .select(DataHarmpowerP::getDf)
.select(DataHarmpowerP::getPf) .select(DataHarmpowerP::getPf)
.select(DataHarmpowerP::getTotP)
.select(DataHarmpowerP::getTotDf)
.select(DataHarmpowerP::getTotPf)
.select(DataHarmpowerP::getQualityFlag) .select(DataHarmpowerP::getQualityFlag)
.select(DataHarmpowerP::getAbnormalFlag) .select(DataHarmpowerP::getAbnormalFlag)
.between(DataHarmpowerP::getTime, startTime, endTime) .between(DataHarmpowerP::getTime, startTime, endTime)
@@ -261,65 +244,13 @@ public class InfluxdbDataHarmpowerPImpl extends MppServiceImpl<RStatDataHarmPowe
result.addAll(dataList); result.addAll(dataList);
} }
} }
return result; if (CollectionUtil.isNotEmpty(result)) {
} result.forEach(item -> {
String newType = PHASE_MAPPING.get(item.getPhasicType());
public List<DataHarmpowerP> getWlMinuteData(List<String> lineList, String startTime, String endTime, Map<String,List<String>> timeMap, Boolean dataType) { if (newType != null) {
List<DataHarmpowerP> result = new ArrayList<>(); item.setPhasicType(newType);
if (CollectionUtil.isNotEmpty(lineList)) {
//获取监测点信息
List<CsLinePO> line = csLineFeignClient.queryLineById(lineList).getData();
Map<String, CsLinePO> lineMap = line.stream().collect(Collectors.toMap(CsLinePO::getLineId, Function.identity()));
//获取设备信息
List<String> devList = line.stream().map(CsLinePO::getDeviceId).distinct().collect(Collectors.toList());
List<CsEquipmentDeliveryDTO> dev = equipmentFeignClient.queryDeviceById(devList).getData();
Map<String, CsEquipmentDeliveryDTO> devsMap = dev.stream().collect(Collectors.toMap(CsEquipmentDeliveryDTO::getId, Function.identity()));
lineList.forEach(lineId -> {
String devId = lineMap.get(lineId).getDeviceId();
CsLinePO po = lineMap.get(lineId);
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataHarmpowerP.class);
//A、B、C谐波有功功率有效值
influxQueryWrapper.samePrefixAndSuffix("Pq_HarmP_", "p_", HarmonicTimesUtil.harmonicTimesList(2, 50, 1));
//三相总 谐波有功功率有效值
influxQueryWrapper.samePrefixAndSuffix("Pq_HarmTP_", "totP_", HarmonicTimesUtil.harmonicTimesList(2, 50, 1));
InfluxQueryWrapper eq = influxQueryWrapper.eq(DataHarmpowerP::getLineId, lineId)
.eq(DataHarmpowerP::getProcess, Integer.toString(devsMap.get(devId).getProcess()))
.select(DataHarmpowerP::getLineId)
.select(DataHarmpowerP::getPhasicType)
.select(DataHarmpowerP::getValueType)
//位移功率因数
.select("Pq_DF", "df")
//视在功率因素
.select("Pq_PF", "pf")
//A、B、C三相有功功率
.select("Pq_P", "p")
//基波有功功率
.select("Pq_FundP", "p_1")
//三相总视在功率因数
.select("Pq_TotPF", "totPf")
//三相总位移功率因数
.select("Pq_TotDF", "totDf")
//三相总功率因数
.select("Pq_TotP", "totP")
//三相总基波有功功率
.select("Pq_TotHarmP", "totP1")
.between(DataHarmpowerP::getTime, startTime, endTime)
.eq(DataHarmpowerP::getQualityFlag, "0");
if (Objects.isNull(po.getLineNo())) {
influxQueryWrapper.eq(DataHarmpowerP::getCldid,Integer.toString(po.getClDid()));
} else {
influxQueryWrapper.eq(DataHarmpowerP::getCldid,Integer.toString(po.getLineNo()));
} }
result.addAll(dataHarmpowerPMapper.selectByQueryWrapper(influxQueryWrapper));
}); });
if (CollectionUtil.isNotEmpty(result)) {
result.forEach(item -> {
String newType = PHASE_MAPPING.get(item.getPhasicType());
if (newType != null) {
item.setPhasicType(newType);
}
});
}
} }
return result; return result;
} }

View File

@@ -4,10 +4,6 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.common.utils.HarmonicTimesUtil; import com.njcn.common.utils.HarmonicTimesUtil;
import com.njcn.csdevice.api.CsLineFeignClient;
import com.njcn.csdevice.api.EquipmentFeignClient;
import com.njcn.csdevice.pojo.dto.CsEquipmentDeliveryDTO;
import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.dataProcess.dao.imapper.DataHarmpowerQMapper; import com.njcn.dataProcess.dao.imapper.DataHarmpowerQMapper;
import com.njcn.dataProcess.dao.relation.mapper.RStatDataHarmPowerQRelationMapper; import com.njcn.dataProcess.dao.relation.mapper.RStatDataHarmPowerQRelationMapper;
import com.njcn.dataProcess.dto.DataHarmpowerQDTO; import com.njcn.dataProcess.dto.DataHarmpowerQDTO;
@@ -25,13 +21,11 @@ import org.apache.commons.collections4.ListUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -47,10 +41,6 @@ public class InfluxdbDataHarmpowerQImpl extends MppServiceImpl<RStatDataHarmPowe
private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault()); private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault());
private final DataHarmpowerQMapper dataHarmpowerQMapper; private final DataHarmpowerQMapper dataHarmpowerQMapper;
@Resource
private CsLineFeignClient csLineFeignClient;
@Resource
private EquipmentFeignClient equipmentFeignClient;
private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{ private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{
put("AB", "A"); put("AB", "A");
@@ -80,12 +70,7 @@ public class InfluxdbDataHarmpowerQImpl extends MppServiceImpl<RStatDataHarmPowe
@Override @Override
public List<DataHarmPowerQDto> getRawData(LineCountEvaluateParam lineParam) { public List<DataHarmPowerQDto> getRawData(LineCountEvaluateParam lineParam) {
List<DataHarmPowerQDto> result = new ArrayList<>(); List<DataHarmPowerQDto> result = new ArrayList<>();
List<DataHarmpowerQ> list; List<DataHarmpowerQ> list = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
if (Objects.equals(lineParam.getType(), 2)) {
list = getWlMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
} else {
list = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
}
list.forEach(item->{ list.forEach(item->{
DataHarmPowerQDto dto = new DataHarmPowerQDto(); DataHarmPowerQDto dto = new DataHarmPowerQDto();
BeanUtils.copyProperties(item,dto); BeanUtils.copyProperties(item,dto);
@@ -98,12 +83,7 @@ public class InfluxdbDataHarmpowerQImpl extends MppServiceImpl<RStatDataHarmPowe
@Override @Override
public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) { public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) {
List<CommonMinuteDto> result = new ArrayList<>(); List<CommonMinuteDto> result = new ArrayList<>();
List<DataHarmpowerQ> data; List<DataHarmpowerQ> data = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
if (Objects.equals(lineParam.getType(), 2)) {
data = getWlMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
} else {
data = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
}
if (CollectionUtil.isNotEmpty(data)) { if (CollectionUtil.isNotEmpty(data)) {
String time = TimeUtils.StringTimeToString(lineParam.getStartTime()); String time = TimeUtils.StringTimeToString(lineParam.getStartTime());
//以监测点分组 //以监测点分组
@@ -125,7 +105,6 @@ public class InfluxdbDataHarmpowerQImpl extends MppServiceImpl<RStatDataHarmPowe
valueTypeMap.forEach((valueType,valueTypeList)->{ valueTypeMap.forEach((valueType,valueTypeList)->{
CommonMinuteDto.ValueType value = new CommonMinuteDto.ValueType(); CommonMinuteDto.ValueType value = new CommonMinuteDto.ValueType();
value.setValueType(valueType); value.setValueType(valueType);
List<List<Double>> lists; List<List<Double>> lists;
if (Objects.equals(phasicType, "T") && Objects.equals(lineParam.getType(), 2)) { if (Objects.equals(phasicType, "T") && Objects.equals(lineParam.getType(), 2)) {
lists = extractDataLists(valueTypeList, "Tot"); lists = extractDataLists(valueTypeList, "Tot");
@@ -208,11 +187,13 @@ public class InfluxdbDataHarmpowerQImpl extends MppServiceImpl<RStatDataHarmPowe
List<DataHarmpowerQ> result = new ArrayList<>(); List<DataHarmpowerQ> result = new ArrayList<>();
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataHarmpowerQ.class); InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataHarmpowerQ.class);
influxQueryWrapper.samePrefixAndSuffix(InfluxDbSqlConstant.Q, InfluxDbSqlConstant.Q, HarmonicTimesUtil.harmonicTimesList(1, 50, 1)); influxQueryWrapper.samePrefixAndSuffix(InfluxDbSqlConstant.Q, InfluxDbSqlConstant.Q, HarmonicTimesUtil.harmonicTimesList(1, 50, 1));
influxQueryWrapper.samePrefixAndSuffix("tot_tq_", "tot_tq_", HarmonicTimesUtil.harmonicTimesList(1, 50, 1));
influxQueryWrapper.regular(DataHarmpowerQ::getLineId, lineList) influxQueryWrapper.regular(DataHarmpowerQ::getLineId, lineList)
.select(DataHarmpowerQ::getLineId) .select(DataHarmpowerQ::getLineId)
.select(DataHarmpowerQ::getPhasicType) .select(DataHarmpowerQ::getPhasicType)
.select(DataHarmpowerQ::getValueType) .select(DataHarmpowerQ::getValueType)
.select(DataHarmpowerQ::getQ) .select(DataHarmpowerQ::getQ)
.select(DataHarmpowerQ::getTotQ)
.select(DataHarmpowerQ::getQualityFlag) .select(DataHarmpowerQ::getQualityFlag)
.select(DataHarmpowerQ::getAbnormalFlag) .select(DataHarmpowerQ::getAbnormalFlag)
.between(DataHarmpowerQ::getTime, startTime, endTime) .between(DataHarmpowerQ::getTime, startTime, endTime)
@@ -254,57 +235,13 @@ public class InfluxdbDataHarmpowerQImpl extends MppServiceImpl<RStatDataHarmPowe
result.addAll(dataList); result.addAll(dataList);
} }
} }
return result; if (CollectionUtil.isNotEmpty(result)) {
} result.forEach(item -> {
String newType = PHASE_MAPPING.get(item.getPhasicType());
public List<DataHarmpowerQ> getWlMinuteData(List<String> lineList, String startTime, String endTime, Map<String,List<String>> timeMap, Boolean dataType) { if (newType != null) {
List<DataHarmpowerQ> result = new ArrayList<>(); item.setPhasicType(newType);
if (CollectionUtil.isNotEmpty(lineList)) {
//获取监测点信息
List<CsLinePO> line = csLineFeignClient.queryLineById(lineList).getData();
Map<String, CsLinePO> lineMap = line.stream().collect(Collectors.toMap(CsLinePO::getLineId, Function.identity()));
//获取设备信息
List<String> devList = line.stream().map(CsLinePO::getDeviceId).distinct().collect(Collectors.toList());
List<CsEquipmentDeliveryDTO> dev = equipmentFeignClient.queryDeviceById(devList).getData();
Map<String, CsEquipmentDeliveryDTO> devsMap = dev.stream().collect(Collectors.toMap(CsEquipmentDeliveryDTO::getId, Function.identity()));
lineList.forEach(lineId -> {
String devId = lineMap.get(lineId).getDeviceId();
CsLinePO po = lineMap.get(lineId);
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataHarmpowerQ.class);
//A、B、C谐波无功功率有效值
influxQueryWrapper.samePrefixAndSuffix("Pq_HarmQ_", "q_", HarmonicTimesUtil.harmonicTimesList(2, 50, 1));
//三相总 谐波有功功率有效值
influxQueryWrapper.samePrefixAndSuffix("Pq_HarmTQ_", "totQ_", HarmonicTimesUtil.harmonicTimesList(2, 50, 1));
influxQueryWrapper.eq(DataHarmpowerQ::getLineId, lineId)
.eq(DataHarmpowerQ::getProcess,Integer.toString(devsMap.get(devId).getProcess()))
.select(DataHarmpowerQ::getLineId)
.select(DataHarmpowerQ::getPhasicType)
.select(DataHarmpowerQ::getValueType)
//A、B、C三相无功功率
.select("Pq_Q", "q")
//基波无功功率
.select("Pq_FundQ","q_1")
//总无功功率
.select("Pq_TotQ","totQ")
//基波无功功率(T)
.select("Pq_TotHarmQ","totQ1")
.between(DataHarmpowerQ::getTime, startTime, endTime)
.eq(DataHarmpowerQ::getQualityFlag, "0");
if (Objects.isNull(po.getLineNo())) {
influxQueryWrapper.eq(DataHarmpowerQ::getCldid,Integer.toString(po.getClDid()));
} else {
influxQueryWrapper.eq(DataHarmpowerQ::getCldid,Integer.toString(po.getLineNo()));
} }
result.addAll(dataHarmpowerQMapper.selectByQueryWrapper(influxQueryWrapper));
}); });
if (CollectionUtil.isNotEmpty(result)) {
result.forEach(item -> {
String newType = PHASE_MAPPING.get(item.getPhasicType());
if (newType != null) {
item.setPhasicType(newType);
}
});
}
} }
return result; return result;
} }

View File

@@ -4,10 +4,6 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.common.utils.HarmonicTimesUtil; import com.njcn.common.utils.HarmonicTimesUtil;
import com.njcn.csdevice.api.CsLineFeignClient;
import com.njcn.csdevice.api.EquipmentFeignClient;
import com.njcn.csdevice.pojo.dto.CsEquipmentDeliveryDTO;
import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.dataProcess.dao.imapper.DataHarmpowerSMapper; import com.njcn.dataProcess.dao.imapper.DataHarmpowerSMapper;
import com.njcn.dataProcess.dao.relation.mapper.RStatDataHarmPowerSRelationMapper; import com.njcn.dataProcess.dao.relation.mapper.RStatDataHarmPowerSRelationMapper;
import com.njcn.dataProcess.dto.DataHarmpowerSDTO; import com.njcn.dataProcess.dto.DataHarmpowerSDTO;
@@ -25,13 +21,11 @@ import org.apache.commons.collections4.ListUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -47,10 +41,6 @@ public class InfluxdbDataHarmpowerSImpl extends MppServiceImpl<RStatDataHarmPowe
private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault()); private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault());
private final DataHarmpowerSMapper dataHarmpowerSMapper; private final DataHarmpowerSMapper dataHarmpowerSMapper;
@Resource
private CsLineFeignClient csLineFeignClient;
@Resource
private EquipmentFeignClient equipmentFeignClient;
private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{ private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{
put("AB", "A"); put("AB", "A");
@@ -80,12 +70,7 @@ public class InfluxdbDataHarmpowerSImpl extends MppServiceImpl<RStatDataHarmPowe
@Override @Override
public List<DataHarmPowerSDto> getRawData(LineCountEvaluateParam lineParam) { public List<DataHarmPowerSDto> getRawData(LineCountEvaluateParam lineParam) {
List<DataHarmPowerSDto> result = new ArrayList<>(); List<DataHarmPowerSDto> result = new ArrayList<>();
List<DataHarmpowerS> list; List<DataHarmpowerS> list = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
if (Objects.equals(lineParam.getType(), 2)) {
list = getWlMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
} else {
list = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
}
list.forEach(item->{ list.forEach(item->{
DataHarmPowerSDto dto = new DataHarmPowerSDto(); DataHarmPowerSDto dto = new DataHarmPowerSDto();
BeanUtils.copyProperties(item,dto); BeanUtils.copyProperties(item,dto);
@@ -98,12 +83,7 @@ public class InfluxdbDataHarmpowerSImpl extends MppServiceImpl<RStatDataHarmPowe
@Override @Override
public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) { public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) {
List<CommonMinuteDto> result = new ArrayList<>(); List<CommonMinuteDto> result = new ArrayList<>();
List<DataHarmpowerS> data; List<DataHarmpowerS> data = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
if (Objects.equals(lineParam.getType(), 2)) {
data = getWlMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
} else {
data = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(), lineParam.getAbnormalTime(),lineParam.getDataType());
}
if (CollectionUtil.isNotEmpty(data)) { if (CollectionUtil.isNotEmpty(data)) {
String time = TimeUtils.StringTimeToString(lineParam.getStartTime()); String time = TimeUtils.StringTimeToString(lineParam.getStartTime());
//以监测点分组 //以监测点分组
@@ -207,11 +187,13 @@ public class InfluxdbDataHarmpowerSImpl extends MppServiceImpl<RStatDataHarmPowe
List<DataHarmpowerS> result = new ArrayList<>(); List<DataHarmpowerS> result = new ArrayList<>();
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataHarmpowerS.class); InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataHarmpowerS.class);
influxQueryWrapper.samePrefixAndSuffix(InfluxDbSqlConstant.S, InfluxDbSqlConstant.S, HarmonicTimesUtil.harmonicTimesList(1, 50, 1)); influxQueryWrapper.samePrefixAndSuffix(InfluxDbSqlConstant.S, InfluxDbSqlConstant.S, HarmonicTimesUtil.harmonicTimesList(1, 50, 1));
influxQueryWrapper.samePrefixAndSuffix("tot_ts_", "tot_ts_", HarmonicTimesUtil.harmonicTimesList(1, 50, 1));
influxQueryWrapper.regular(DataHarmpowerS::getLineId, lineList) influxQueryWrapper.regular(DataHarmpowerS::getLineId, lineList)
.select(DataHarmpowerS::getLineId) .select(DataHarmpowerS::getLineId)
.select(DataHarmpowerS::getPhasicType) .select(DataHarmpowerS::getPhasicType)
.select(DataHarmpowerS::getValueType) .select(DataHarmpowerS::getValueType)
.select(DataHarmpowerS::getS) .select(DataHarmpowerS::getS)
.select(DataHarmpowerS::getTotS)
.select(DataHarmpowerS::getQualityFlag) .select(DataHarmpowerS::getQualityFlag)
.select(DataHarmpowerS::getAbnormalFlag) .select(DataHarmpowerS::getAbnormalFlag)
.between(DataHarmpowerS::getTime, startTime, endTime) .between(DataHarmpowerS::getTime, startTime, endTime)
@@ -253,59 +235,14 @@ public class InfluxdbDataHarmpowerSImpl extends MppServiceImpl<RStatDataHarmPowe
result.addAll(dataList); result.addAll(dataList);
} }
} }
return result; if (CollectionUtil.isNotEmpty(result)) {
} result.forEach(item -> {
String newType = PHASE_MAPPING.get(item.getPhasicType());
public List<DataHarmpowerS> getWlMinuteData(List<String> lineList, String startTime, String endTime, Map<String,List<String>> timeMap,Boolean dataType) { if (newType != null) {
List<DataHarmpowerS> result = new ArrayList<>(); item.setPhasicType(newType);
if (CollectionUtil.isNotEmpty(lineList)) {
//获取监测点信息
List<CsLinePO> line = csLineFeignClient.queryLineById(lineList).getData();
Map<String, CsLinePO> lineMap = line.stream().collect(Collectors.toMap(CsLinePO::getLineId, Function.identity()));
//获取设备信息
List<String> devList = line.stream().map(CsLinePO::getDeviceId).distinct().collect(Collectors.toList());
List<CsEquipmentDeliveryDTO> dev = equipmentFeignClient.queryDeviceById(devList).getData();
Map<String, CsEquipmentDeliveryDTO> devsMap = dev.stream().collect(Collectors.toMap(CsEquipmentDeliveryDTO::getId, Function.identity()));
lineList.forEach(lineId -> {
String devId = lineMap.get(lineId).getDeviceId();
CsLinePO po = lineMap.get(lineId);
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataHarmpowerS.class);
//A、B、C谐波视在功率有效值
influxQueryWrapper.samePrefixAndSuffix("Pq_HarmS_", "s_", HarmonicTimesUtil.harmonicTimesList(2, 50, 1));
//三相总 谐波视在功率有效值
influxQueryWrapper.samePrefixAndSuffix("Pq_HarmTS_", "totS_", HarmonicTimesUtil.harmonicTimesList(2, 50, 1));
influxQueryWrapper.eq(DataHarmpowerS::getLineId, lineId)
.eq(DataHarmpowerS::getProcess,Integer.toString(devsMap.get(devId).getProcess()))
.select(DataHarmpowerS::getLineId)
.select(DataHarmpowerS::getPhasicType)
.select(DataHarmpowerS::getValueType)
//A、B、C视在功率
.select("Pq_S","s")
//基波视在功率
.select("Pq_FundS","s_1")
//总视在功率
.select("Pq_TotS","totS")
//基波视在功率T
.select("Pq_TotHarmS","totS1")
.between(DataHarmpowerS::getTime, startTime, endTime)
.eq(DataHarmpowerS::getQualityFlag, "0");
if (Objects.isNull(po.getLineNo())) {
influxQueryWrapper.eq(DataHarmpowerS::getCldid,Integer.toString(po.getClDid()));
} else {
influxQueryWrapper.eq(DataHarmpowerS::getCldid,Integer.toString(po.getLineNo()));
} }
result.addAll(dataHarmpowerSMapper.selectByQueryWrapper(influxQueryWrapper));
}); });
if (CollectionUtil.isNotEmpty(result)) {
result.forEach(item -> {
String newType = PHASE_MAPPING.get(item.getPhasicType());
if (newType != null) {
item.setPhasicType(newType);
}
});
}
} }
return result; return result;
} }
} }

View File

@@ -4,10 +4,6 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.common.utils.HarmonicTimesUtil; import com.njcn.common.utils.HarmonicTimesUtil;
import com.njcn.csdevice.api.CsLineFeignClient;
import com.njcn.csdevice.api.EquipmentFeignClient;
import com.njcn.csdevice.pojo.dto.CsEquipmentDeliveryDTO;
import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.dataProcess.constant.InfluxDBTableConstant; import com.njcn.dataProcess.constant.InfluxDBTableConstant;
import com.njcn.dataProcess.dao.imapper.DataIMapper; import com.njcn.dataProcess.dao.imapper.DataIMapper;
import com.njcn.dataProcess.dao.relation.mapper.RStatDataIRelationMapper; import com.njcn.dataProcess.dao.relation.mapper.RStatDataIRelationMapper;
@@ -26,12 +22,10 @@ import org.apache.commons.collections4.ListUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -49,11 +43,6 @@ public class InfluxdbDataIImpl extends MppServiceImpl<RStatDataIRelationMapper,
private final DataIMapper dataIMapper; private final DataIMapper dataIMapper;
@Resource
private CsLineFeignClient csLineFeignClient;
@Resource
private EquipmentFeignClient equipmentFeignClient;
private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{ private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{
put("AB", "A"); put("AB", "A");
put("BC", "B"); put("BC", "B");
@@ -82,12 +71,7 @@ public class InfluxdbDataIImpl extends MppServiceImpl<RStatDataIRelationMapper,
@Override @Override
public List<DataIDto> getRawData(LineCountEvaluateParam lineParam) { public List<DataIDto> getRawData(LineCountEvaluateParam lineParam) {
List<DataIDto> result = new ArrayList<>(); List<DataIDto> result = new ArrayList<>();
List<DataI> list; List<DataI> list = getMinuteDataI(lineParam);;
if (Objects.equals(lineParam.getType(), 2)) {
list = getWlMinuteDataI(lineParam);
} else {
list = getMinuteDataI(lineParam);
}
list.forEach(item->{ list.forEach(item->{
DataIDto dto = new DataIDto(); DataIDto dto = new DataIDto();
BeanUtils.copyProperties(item,dto); BeanUtils.copyProperties(item,dto);
@@ -100,12 +84,7 @@ public class InfluxdbDataIImpl extends MppServiceImpl<RStatDataIRelationMapper,
@Override @Override
public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) { public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) {
List<CommonMinuteDto> result = new ArrayList<>(); List<CommonMinuteDto> result = new ArrayList<>();
List<DataI> dataIList; List<DataI> dataIList = getMinuteDataI(lineParam);
if (Objects.equals(lineParam.getType(), 2)) {
dataIList = getWlMinuteDataI(lineParam);
} else {
dataIList = getMinuteDataI(lineParam);
}
if (CollectionUtil.isNotEmpty(dataIList)) { if (CollectionUtil.isNotEmpty(dataIList)) {
String time = TimeUtils.StringTimeToString(lineParam.getStartTime()); String time = TimeUtils.StringTimeToString(lineParam.getStartTime());
//以监测点分组 //以监测点分组
@@ -314,65 +293,13 @@ public class InfluxdbDataIImpl extends MppServiceImpl<RStatDataIRelationMapper,
result.addAll(dataList); result.addAll(dataList);
} }
} }
return result; if (CollectionUtil.isNotEmpty(result)) {
} result.forEach(item -> {
String newType = PHASE_MAPPING.get(item.getPhasicType());
public List<DataI> getWlMinuteDataI(LineCountEvaluateParam lineParam) { if (newType != null) {
List<DataI> result = new ArrayList<>(); item.setPhasicType(newType);
if (CollectionUtil.isNotEmpty(lineParam.getLineId())) {
//获取监测点信息
List<CsLinePO> line = csLineFeignClient.queryLineById(lineParam.getLineId()).getData();
Map<String, CsLinePO> lineMap = line.stream().collect(Collectors.toMap(CsLinePO::getLineId, Function.identity()));
//获取设备信息
List<String> devList = line.stream().map(CsLinePO::getDeviceId).distinct().collect(Collectors.toList());
List<CsEquipmentDeliveryDTO> dev = equipmentFeignClient.queryDeviceById(devList).getData();
Map<String, CsEquipmentDeliveryDTO> devsMap = dev.stream().collect(Collectors.toMap(CsEquipmentDeliveryDTO::getId, Function.identity()));
lineParam.getLineId().forEach(lineId -> {
String devId = lineMap.get(lineId).getDeviceId();
CsLinePO po = lineMap.get(lineId);
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataI.class);
//2-50次 谐波电流有效值
influxQueryWrapper.samePrefixAndSuffix("Pq_HarmI_", "i_", HarmonicTimesUtil.harmonicTimesList(2, 50, 1));
influxQueryWrapper.eq(DataI::getLineId, lineId)
.eq(DataI::getProcess,Integer.toString(devsMap.get(devId).getProcess()))
.select(DataI::getLineId)
.select(DataI::getPhasicType)
.select(DataI::getValueType)
//电流负序
.select("Pq_SeqNegI","i_neg")
//电流正序
.select("Pq_SeqPosI","i_pos")
//电流总谐波畸变率
.select("Pq_ThdI","i_thd")
//电流负序不平衡度
.select("Pq_UnbalNegI","i_unbalance")
//电流零序
.select("Pq_SeqZeroI","i_zero")
//电流总有效值
.select("Pq_RmsI","rms")
//电流基波有效值
.select("Pq_RmsFundI","i_1")
.between(DataI::getTime, lineParam.getStartTime(), lineParam.getEndTime())
.eq(DataI::getQualityFlag, "0");
if (CollUtil.isNotEmpty(lineParam.getPhasicType())) {
influxQueryWrapper.regular(DataI::getPhasicType, lineParam.getPhasicType());
} }
if (Objects.isNull(po.getLineNo())) {
influxQueryWrapper.eq(DataI::getCldid,Integer.toString(po.getClDid()));
} else {
influxQueryWrapper.eq(DataI::getCldid,Integer.toString(po.getLineNo()));
}
result.addAll(dataIMapper.selectByQueryWrapper(influxQueryWrapper));
}); });
if (CollectionUtil.isNotEmpty(result)) {
result.forEach(item -> {
String newType = PHASE_MAPPING.get(item.getPhasicType());
if (newType != null) {
item.setPhasicType(newType);
}
});
}
} }
return result; return result;
} }

View File

@@ -4,10 +4,6 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.common.utils.HarmonicTimesUtil; import com.njcn.common.utils.HarmonicTimesUtil;
import com.njcn.csdevice.api.CsLineFeignClient;
import com.njcn.csdevice.api.EquipmentFeignClient;
import com.njcn.csdevice.pojo.dto.CsEquipmentDeliveryDTO;
import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.dataProcess.dao.imapper.DataInharmIMapper; import com.njcn.dataProcess.dao.imapper.DataInharmIMapper;
import com.njcn.dataProcess.dao.relation.mapper.RStatDataInHarmIRelationMapper; import com.njcn.dataProcess.dao.relation.mapper.RStatDataInHarmIRelationMapper;
import com.njcn.dataProcess.dto.DataInharmIDTO; import com.njcn.dataProcess.dto.DataInharmIDTO;
@@ -25,12 +21,10 @@ import org.apache.commons.collections4.ListUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -46,10 +40,6 @@ public class InfluxdbDataInharmIImpl extends MppServiceImpl<RStatDataInHarmIRela
private final DataInharmIMapper dataInharmIMapper; private final DataInharmIMapper dataInharmIMapper;
private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault()); private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault());
@Resource
private CsLineFeignClient csLineFeignClient;
@Resource
private EquipmentFeignClient equipmentFeignClient;
private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{ private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{
put("AB", "A"); put("AB", "A");
@@ -79,12 +69,7 @@ public class InfluxdbDataInharmIImpl extends MppServiceImpl<RStatDataInHarmIRela
@Override @Override
public List<DataInHarmIDto> getRawData(LineCountEvaluateParam lineParam) { public List<DataInHarmIDto> getRawData(LineCountEvaluateParam lineParam) {
List<DataInHarmIDto> result = new ArrayList<>(); List<DataInHarmIDto> result = new ArrayList<>();
List<DataInharmI> list; List<DataInharmI> list = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(),lineParam.getAbnormalTime(),lineParam.getDataType());
if (Objects.equals(lineParam.getType(), 2)) {
list = getWlMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(),lineParam.getAbnormalTime(),lineParam.getDataType());
} else {
list = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(),lineParam.getAbnormalTime(),lineParam.getDataType());
}
list.forEach(item->{ list.forEach(item->{
DataInHarmIDto dto = new DataInHarmIDto(); DataInHarmIDto dto = new DataInHarmIDto();
BeanUtils.copyProperties(item,dto); BeanUtils.copyProperties(item,dto);
@@ -97,12 +82,7 @@ public class InfluxdbDataInharmIImpl extends MppServiceImpl<RStatDataInHarmIRela
@Override @Override
public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) { public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) {
List<CommonMinuteDto> result = new ArrayList<>(); List<CommonMinuteDto> result = new ArrayList<>();
List<DataInharmI> data; List<DataInharmI> data = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(),lineParam.getAbnormalTime(),lineParam.getDataType());
if (Objects.equals(lineParam.getType(), 2)) {
data = getWlMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(),lineParam.getAbnormalTime(),lineParam.getDataType());
} else {
data = getMinuteData(lineParam.getLineId(), lineParam.getStartTime(), lineParam.getEndTime(),lineParam.getAbnormalTime(),lineParam.getDataType());
}
if (CollectionUtil.isNotEmpty(data)) { if (CollectionUtil.isNotEmpty(data)) {
String time = TimeUtils.StringTimeToString(lineParam.getStartTime()); String time = TimeUtils.StringTimeToString(lineParam.getStartTime());
//以监测点分组 //以监测点分组
@@ -270,49 +250,14 @@ public class InfluxdbDataInharmIImpl extends MppServiceImpl<RStatDataInHarmIRela
result.addAll(dataList); result.addAll(dataList);
} }
} }
return result; if (CollectionUtil.isNotEmpty(result)) {
} result.forEach(item -> {
String newType = PHASE_MAPPING.get(item.getPhasicType());
public List<DataInharmI> getWlMinuteData(List<String> lineList, String startTime, String endTime, Map<String,List<String>> timeMap, Boolean dataType) { if (newType != null) {
List<DataInharmI> result = new ArrayList<>(); item.setPhasicType(newType);
if (CollectionUtil.isNotEmpty(lineList)) {
//获取监测点信息
List<CsLinePO> line = csLineFeignClient.queryLineById(lineList).getData();
Map<String, CsLinePO> lineMap = line.stream().collect(Collectors.toMap(CsLinePO::getLineId, Function.identity()));
//获取设备信息
List<String> devList = line.stream().map(CsLinePO::getDeviceId).distinct().collect(Collectors.toList());
List<CsEquipmentDeliveryDTO> dev = equipmentFeignClient.queryDeviceById(devList).getData();
Map<String, CsEquipmentDeliveryDTO> devsMap = dev.stream().collect(Collectors.toMap(CsEquipmentDeliveryDTO::getId, Function.identity()));
lineList.forEach(lineId -> {
String devId = lineMap.get(lineId).getDeviceId();
CsLinePO po = lineMap.get(lineId);
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataInharmI.class);
//2-50次 间谐波电流有效值
influxQueryWrapper.samePrefixAndSuffix("Pq_InHarmIAmp_", "i_", HarmonicTimesUtil.harmonicTimesList(1, 50, 1));
influxQueryWrapper.eq(DataInharmI::getLineId, lineId)
.eq(DataInharmI::getProcess,Integer.toString(devsMap.get(devId).getProcess()))
.select(DataInharmI::getLineId)
.select(DataInharmI::getPhasicType)
.select(DataInharmI::getValueType)
.between(DataInharmI::getTime, startTime, endTime)
.eq(DataInharmI::getQualityFlag, "0");
if (Objects.isNull(po.getLineNo())) {
influxQueryWrapper.eq(DataInharmI::getCldid,Integer.toString(po.getClDid()));
} else {
influxQueryWrapper.eq(DataInharmI::getCldid,Integer.toString(po.getLineNo()));
} }
result.addAll(dataInharmIMapper.selectByQueryWrapper(influxQueryWrapper));
}); });
if (CollectionUtil.isNotEmpty(result)) {
result.forEach(item -> {
String newType = PHASE_MAPPING.get(item.getPhasicType());
if (newType != null) {
item.setPhasicType(newType);
}
});
}
} }
return result; return result;
} }
} }

View File

@@ -4,10 +4,6 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.common.utils.HarmonicTimesUtil; import com.njcn.common.utils.HarmonicTimesUtil;
import com.njcn.csdevice.api.CsLineFeignClient;
import com.njcn.csdevice.api.EquipmentFeignClient;
import com.njcn.csdevice.pojo.dto.CsEquipmentDeliveryDTO;
import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.dataProcess.dao.imapper.DataInharmVMapper; import com.njcn.dataProcess.dao.imapper.DataInharmVMapper;
import com.njcn.dataProcess.dao.relation.mapper.RStatDataInHarmVRelationMapper; import com.njcn.dataProcess.dao.relation.mapper.RStatDataInHarmVRelationMapper;
import com.njcn.dataProcess.dto.DataInharmVDTO; import com.njcn.dataProcess.dto.DataInharmVDTO;
@@ -26,12 +22,10 @@ import org.apache.commons.collections4.ListUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -47,12 +41,7 @@ import java.util.stream.Collectors;
public class InfluxdbDataInharmVImpl extends MppServiceImpl<RStatDataInHarmVRelationMapper, RStatDataInHarmVD> implements IDataInharmV { public class InfluxdbDataInharmVImpl extends MppServiceImpl<RStatDataInHarmVRelationMapper, RStatDataInHarmVD> implements IDataInharmV {
private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault()); private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault());
private final DataInharmVMapper dataInharmVMapper; private final DataInharmVMapper dataInharmVMapper;
@Resource
private CsLineFeignClient csLineFeignClient;
@Resource
private EquipmentFeignClient equipmentFeignClient;
private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{ private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{
put("AB", "A"); put("AB", "A");
@@ -81,12 +70,7 @@ public class InfluxdbDataInharmVImpl extends MppServiceImpl<RStatDataInHarmVRela
@Override @Override
public List<DataHarmDto> getRawData(LineCountEvaluateParam lineParam) { public List<DataHarmDto> getRawData(LineCountEvaluateParam lineParam) {
List<DataHarmDto> result = new ArrayList<>(); List<DataHarmDto> result = new ArrayList<>();
List<DataInharmV> list; List<DataInharmV> list = getMinuteData(lineParam);
if (Objects.equals(lineParam.getType(), 2)) {
list = getWlMinuteData(lineParam);
} else {
list = getMinuteData(lineParam);
}
list.forEach(item->{ list.forEach(item->{
DataHarmDto dto = new DataHarmDto(); DataHarmDto dto = new DataHarmDto();
BeanUtils.copyProperties(item,dto); BeanUtils.copyProperties(item,dto);
@@ -99,12 +83,7 @@ public class InfluxdbDataInharmVImpl extends MppServiceImpl<RStatDataInHarmVRela
@Override @Override
public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) { public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) {
List<CommonMinuteDto> result = new ArrayList<>(); List<CommonMinuteDto> result = new ArrayList<>();
List<DataInharmV> data; List<DataInharmV> data = getMinuteData(lineParam);
if (Objects.equals(lineParam.getType(), 2)) {
data = getWlMinuteData(lineParam);
} else {
data = getMinuteData(lineParam);
}
if (CollectionUtil.isNotEmpty(data)) { if (CollectionUtil.isNotEmpty(data)) {
String time = TimeUtils.StringTimeToString(lineParam.getStartTime()); String time = TimeUtils.StringTimeToString(lineParam.getStartTime());
//以监测点分组 //以监测点分组
@@ -275,56 +254,14 @@ public class InfluxdbDataInharmVImpl extends MppServiceImpl<RStatDataInHarmVRela
result.addAll(dataList); result.addAll(dataList);
} }
} }
return result; if (CollectionUtil.isNotEmpty(result)) {
} result.forEach(item -> {
String newType = PHASE_MAPPING.get(item.getPhasicType());
public List<DataInharmV> getWlMinuteData(LineCountEvaluateParam lineParam) { if (newType != null) {
List<DataInharmV> result = new ArrayList<>(); item.setPhasicType(newType);
if (CollectionUtil.isNotEmpty(lineParam.getLineId())) {
//获取监测点信息
List<CsLinePO> line = csLineFeignClient.queryLineById(lineParam.getLineId()).getData();
Map<String, CsLinePO> lineMap = line.stream().collect(Collectors.toMap(CsLinePO::getLineId, Function.identity()));
//获取设备信息
List<String> devList = line.stream().map(CsLinePO::getDeviceId).distinct().collect(Collectors.toList());
List<CsEquipmentDeliveryDTO> dev = equipmentFeignClient.queryDeviceById(devList).getData();
Map<String, CsEquipmentDeliveryDTO> devsMap = dev.stream().collect(Collectors.toMap(CsEquipmentDeliveryDTO::getId, Function.identity()));
lineParam.getLineId().forEach(lineId -> {
String devId = lineMap.get(lineId).getDeviceId();
CsLinePO po = lineMap.get(lineId);
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataInharmV.class);
//2-50次 间谐波电流有效值
influxQueryWrapper.eq(DataInharmV::getLineId, lineId)
.eq(DataInharmV::getProcess,Integer.toString(devsMap.get(devId).getProcess()))
.select(DataInharmV::getLineId)
.select(DataInharmV::getPhasicType)
.select(DataInharmV::getValueType)
.between(DataInharmV::getTime, lineParam.getStartTime(), lineParam.getEndTime())
.eq(DataInharmV::getQualityFlag, "0");
if (Objects.isNull(po.getLineNo())) {
influxQueryWrapper.eq(DataInharmV::getCldid,Integer.toString(po.getClDid()));
} else {
influxQueryWrapper.eq(DataInharmV::getCldid,Integer.toString(po.getLineNo()));
} }
//判断接线方式 (0-星型 1-角型 2-V型) 星型是相电压 角型或者v型是线电压
if (Objects.equals(po.getConType(),0)) {
//0.5-49.5次 间谐波相电压有效值
influxQueryWrapper.samePrefixAndSuffix("Pq_InHarmURV_", "v_", HarmonicTimesUtil.harmonicTimesList(1, 50, 1));
} else {
//0.5-49.5次 间谐波线电压有效值
influxQueryWrapper.samePrefixAndSuffix("Pq_InHarmLURV_", "v_", HarmonicTimesUtil.harmonicTimesList(1, 50, 1));
}
result.addAll(dataInharmVMapper.selectByQueryWrapper(influxQueryWrapper));
}); });
if (CollectionUtil.isNotEmpty(result)) {
result.forEach(item -> {
String newType = PHASE_MAPPING.get(item.getPhasicType());
if (newType != null) {
item.setPhasicType(newType);
}
});
}
} }
return result; return result;
} }
} }

View File

@@ -2,11 +2,9 @@ package com.njcn.dataProcess.service.impl.influxdb;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.nacos.shaded.com.google.common.reflect.TypeToken;
import com.alibaba.nacos.shaded.com.google.gson.Gson;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.csdevice.api.CsLineFeignClient;
import com.njcn.csdevice.api.EquipmentFeignClient;
import com.njcn.csdevice.pojo.dto.CsEquipmentDeliveryDTO;
import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.dataProcess.dao.imapper.DataPltMapper; import com.njcn.dataProcess.dao.imapper.DataPltMapper;
import com.njcn.dataProcess.dao.relation.mapper.RStatDataPltRelationMapper; import com.njcn.dataProcess.dao.relation.mapper.RStatDataPltRelationMapper;
import com.njcn.dataProcess.dto.DataPltDTO; import com.njcn.dataProcess.dto.DataPltDTO;
@@ -19,17 +17,18 @@ import com.njcn.dataProcess.pojo.po.RStatDataPltD;
import com.njcn.dataProcess.service.IDataPlt; import com.njcn.dataProcess.service.IDataPlt;
import com.njcn.dataProcess.util.TimeUtils; import com.njcn.dataProcess.util.TimeUtils;
import com.njcn.influx.query.InfluxQueryWrapper; import com.njcn.influx.query.InfluxQueryWrapper;
import com.njcn.redis.utils.RedisUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.ListUtils; import org.apache.commons.collections4.ListUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.lang.reflect.Type;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -44,19 +43,19 @@ import java.util.stream.Collectors;
public class InfluxdbDataPltImpl extends MppServiceImpl<RStatDataPltRelationMapper, RStatDataPltD> implements IDataPlt { public class InfluxdbDataPltImpl extends MppServiceImpl<RStatDataPltRelationMapper, RStatDataPltD> implements IDataPlt {
private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault()); private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault());
private final DataPltMapper dataPltMapper; private final DataPltMapper dataPltMapper;
@Resource
private CsLineFeignClient csLineFeignClient;
@Resource
private EquipmentFeignClient equipmentFeignClient;
private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{ private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{
put("AB", "A"); put("AB", "A");
put("BC", "B"); put("BC", "B");
put("CA", "C"); put("CA", "C");
put("M", "T"); put("M", "T");
}}; }};
@Resource
private RedisUtil redisUtil;
private static final Set<String> LINE_VOLTAGE_TYPES =
Collections.unmodifiableSet(new HashSet<>(Arrays.asList("AB", "BC", "CA", "T")));
private static final Set<String> PHASE_VOLTAGE_TYPES =
Collections.unmodifiableSet(new HashSet<>(Arrays.asList("A", "B", "C", "T")));
@Override @Override
public void batchInsertion(List<DataPltDTO> dataPltDTOList) { public void batchInsertion(List<DataPltDTO> dataPltDTOList) {
@@ -79,12 +78,7 @@ public class InfluxdbDataPltImpl extends MppServiceImpl<RStatDataPltRelationMapp
@Override @Override
public List<DataPltDto> getRawData(LineCountEvaluateParam lineParam) { public List<DataPltDto> getRawData(LineCountEvaluateParam lineParam) {
List<DataPltDto> result = new ArrayList<>(); List<DataPltDto> result = new ArrayList<>();
List<DataPlt> list; List<DataPlt> list = getMinuteDataPlt(lineParam);
if (Objects.equals(lineParam.getType(), 2)) {
list = getWlMinuteDataPlt(lineParam);
} else {
list = getMinuteDataPlt(lineParam);
}
list.forEach(item->{ list.forEach(item->{
DataPltDto dto = new DataPltDto(); DataPltDto dto = new DataPltDto();
BeanUtils.copyProperties(item,dto); BeanUtils.copyProperties(item,dto);
@@ -97,12 +91,7 @@ public class InfluxdbDataPltImpl extends MppServiceImpl<RStatDataPltRelationMapp
@Override @Override
public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) { public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) {
List<CommonMinuteDto> result = new ArrayList<>(); List<CommonMinuteDto> result = new ArrayList<>();
List<DataPlt> data; List<DataPlt> data = getMinuteDataPlt(lineParam);
if (Objects.equals(lineParam.getType(), 2)) {
data = getWlMinuteDataPlt(lineParam);
} else {
data = getMinuteDataPlt(lineParam);
}
if (CollectionUtil.isNotEmpty(data)) { if (CollectionUtil.isNotEmpty(data)) {
String time = TimeUtils.StringTimeToString(lineParam.getStartTime()); String time = TimeUtils.StringTimeToString(lineParam.getStartTime());
//以监测点分组 //以监测点分组
@@ -173,6 +162,13 @@ public class InfluxdbDataPltImpl extends MppServiceImpl<RStatDataPltRelationMapp
public List<DataPlt> getMinuteDataPlt(LineCountEvaluateParam lineParam) { public List<DataPlt> getMinuteDataPlt(LineCountEvaluateParam lineParam) {
List<DataPlt> dataList; List<DataPlt> dataList;
List<DataPlt> result = new ArrayList<>(); List<DataPlt> result = new ArrayList<>();
List<DataPlt> data = new ArrayList<>();
//获取监测点、接线方式数据
Type type = new TypeToken<Map<String, Integer>>(){}.getType();
Map<String, Integer> map = new Gson().fromJson(
String.valueOf(redisUtil.getObjectByKey("wlLineDetail")),
type
);
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataPlt.class); InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataPlt.class);
influxQueryWrapper.regular(DataPlt::getLineId, lineParam.getLineId()) influxQueryWrapper.regular(DataPlt::getLineId, lineParam.getLineId())
.select(DataPlt::getLineId) .select(DataPlt::getLineId)
@@ -222,51 +218,24 @@ public class InfluxdbDataPltImpl extends MppServiceImpl<RStatDataPltRelationMapp
result.addAll(dataList); result.addAll(dataList);
} }
} }
return result; if (CollectionUtil.isNotEmpty(result)) {
} if (!Objects.isNull(map)) {
//现根据监测点分组,然后根据接线方式排除多于数据,在修改相别
public List<DataPlt> getWlMinuteDataPlt(LineCountEvaluateParam lineParam) { Map<String, List<DataPlt>> lineMap = result.stream().collect(Collectors.groupingBy(DataPlt::getLineId));
List<DataPlt> result = new ArrayList<>(); lineMap.forEach((k,v)->{
if (CollectionUtil.isNotEmpty(lineParam.getLineId())) { if (Objects.isNull(map.get(k))) {
//获取监测点信息 return;
List<CsLinePO> line = csLineFeignClient.queryLineById(lineParam.getLineId()).getData(); }
Map<String, CsLinePO> lineMap = line.stream().collect(Collectors.toMap(CsLinePO::getLineId, Function.identity())); Integer conType = map.get(k);
//获取设备信息 Set<String> validPhasicTypes = (conType != 0) ? LINE_VOLTAGE_TYPES : PHASE_VOLTAGE_TYPES;
List<String> devList = line.stream().map(CsLinePO::getDeviceId).distinct().collect(Collectors.toList()); List<DataPlt> result2 = v.stream().filter(item -> validPhasicTypes.contains(item.getPhasicType())).collect(Collectors.toList());
List<CsEquipmentDeliveryDTO> dev = equipmentFeignClient.queryDeviceById(devList).getData(); data.addAll(result2);
Map<String, CsEquipmentDeliveryDTO> devsMap = dev.stream().collect(Collectors.toMap(CsEquipmentDeliveryDTO::getId, Function.identity())); });
} else {
lineParam.getLineId().forEach(lineId -> { data.addAll(result);
String devId = lineMap.get(lineId).getDeviceId(); }
CsLinePO po = lineMap.get(lineId); if (CollectionUtil.isNotEmpty(data)) {
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataPlt.class); data.forEach(item -> {
influxQueryWrapper.eq(DataPlt::getLineId, lineId)
.eq(DataPlt::getProcess,Integer.toString(devsMap.get(devId).getProcess()))
.select(DataPlt::getLineId)
.select(DataPlt::getPhasicType)
.select(DataPlt::getValueType)
.between(DataPlt::getTime, lineParam.getStartTime(), lineParam.getEndTime())
.eq(DataPlt::getQualityFlag, "0");
if (CollUtil.isNotEmpty(lineParam.getPhasicType())) {
influxQueryWrapper.regular(DataPlt::getPhasicType, lineParam.getPhasicType());
}
if (Objects.isNull(po.getLineNo())) {
influxQueryWrapper.eq(DataPlt::getCldid,Integer.toString(po.getClDid()));
} else {
influxQueryWrapper.eq(DataPlt::getCldid,Integer.toString(po.getLineNo()));
}
//判断接线方式 (0-星型 1-角型 2-V型) 星型是相电压 角型或者v型是线电压
if (Objects.equals(po.getConType(),0)) {
//相电压长时闪变
influxQueryWrapper.select("Pq_Plt","plt");
} else {
//线电压长时闪变
influxQueryWrapper.select("Pq_LPlt","plt");
}
result.addAll(dataPltMapper.selectByQueryWrapper(influxQueryWrapper));
});
if (CollectionUtil.isNotEmpty(result)) {
result.forEach(item -> {
String newType = PHASE_MAPPING.get(item.getPhasicType()); String newType = PHASE_MAPPING.get(item.getPhasicType());
if (newType != null) { if (newType != null) {
item.setPhasicType(newType); item.setPhasicType(newType);
@@ -274,7 +243,6 @@ public class InfluxdbDataPltImpl extends MppServiceImpl<RStatDataPltRelationMapp
}); });
} }
} }
return result; return data;
} }
} }

View File

@@ -4,12 +4,10 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.collection.ListUtil; import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.nacos.shaded.com.google.common.reflect.TypeToken;
import com.alibaba.nacos.shaded.com.google.gson.Gson;
import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
import com.njcn.common.utils.HarmonicTimesUtil; import com.njcn.common.utils.HarmonicTimesUtil;
import com.njcn.csdevice.api.CsLineFeignClient;
import com.njcn.csdevice.api.EquipmentFeignClient;
import com.njcn.csdevice.pojo.dto.CsEquipmentDeliveryDTO;
import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.dataProcess.constant.InfluxDBTableConstant; import com.njcn.dataProcess.constant.InfluxDBTableConstant;
import com.njcn.dataProcess.constant.PhaseType; import com.njcn.dataProcess.constant.PhaseType;
import com.njcn.dataProcess.dao.imapper.DataVMapper; import com.njcn.dataProcess.dao.imapper.DataVMapper;
@@ -28,12 +26,14 @@ import com.njcn.dataProcess.service.IDataV;
import com.njcn.dataProcess.util.TimeUtils; import com.njcn.dataProcess.util.TimeUtils;
import com.njcn.influx.constant.InfluxDbSqlConstant; import com.njcn.influx.constant.InfluxDbSqlConstant;
import com.njcn.influx.query.InfluxQueryWrapper; import com.njcn.influx.query.InfluxQueryWrapper;
import com.njcn.redis.utils.RedisUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.ListUtils; import org.apache.commons.collections4.ListUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.lang.reflect.Type;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
@@ -51,20 +51,20 @@ import java.util.stream.Collectors;
public class InfluxdbDataVImpl extends MppServiceImpl<RStatDataVRelationMapper, RStatDataVD> implements IDataV { public class InfluxdbDataVImpl extends MppServiceImpl<RStatDataVRelationMapper, RStatDataVD> implements IDataV {
private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault()); private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault());
@Resource
private CsLineFeignClient csLineFeignClient;
@Resource
private EquipmentFeignClient equipmentFeignClient;
private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{ private static final Map<String, String> PHASE_MAPPING = new HashMap<String, String>() {{
put("AB", "A"); put("AB", "A");
put("BC", "B"); put("BC", "B");
put("CA", "C"); put("CA", "C");
put("M", "T"); put("M", "T");
}}; }};
@Resource @Resource
private DataVMapper dataVMapper; private DataVMapper dataVMapper;
@Resource
private RedisUtil redisUtil;
private static final Set<String> LINE_VOLTAGE_TYPES =
Collections.unmodifiableSet(new HashSet<>(Arrays.asList("AB", "BC", "CA", "T")));
private static final Set<String> PHASE_VOLTAGE_TYPES =
Collections.unmodifiableSet(new HashSet<>(Arrays.asList("A", "B", "C", "T")));
/** /**
* 注意influxdb不推荐采用in函数的方式批量查询监测点的数据效率很低容易造成崩溃故每次单测点查询 * 注意influxdb不推荐采用in函数的方式批量查询监测点的数据效率很低容易造成崩溃故每次单测点查询
@@ -137,12 +137,7 @@ public class InfluxdbDataVImpl extends MppServiceImpl<RStatDataVRelationMapper,
@Override @Override
public List<DataVDto> getRawData(LineCountEvaluateParam lineParam) { public List<DataVDto> getRawData(LineCountEvaluateParam lineParam) {
List<DataVDto> result = new ArrayList<>(); List<DataVDto> result = new ArrayList<>();
List<DataV> list; List<DataV> list = getMinuteDataV(lineParam);
if (Objects.equals(lineParam.getType(), 2)) {
list = getWlMinuteDataV(lineParam);
} else {
list = getMinuteDataV(lineParam);
}
if (CollectionUtil.isNotEmpty(list)) { if (CollectionUtil.isNotEmpty(list)) {
list.forEach(item -> { list.forEach(item -> {
DataVDto dto = new DataVDto(); DataVDto dto = new DataVDto();
@@ -226,12 +221,7 @@ public class InfluxdbDataVImpl extends MppServiceImpl<RStatDataVRelationMapper,
@Override @Override
public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) { public List<CommonMinuteDto> getBaseData(LineCountEvaluateParam lineParam) {
List<CommonMinuteDto> result = new ArrayList<>(); List<CommonMinuteDto> result = new ArrayList<>();
List<DataV> dataVList; List<DataV> dataVList = getMinuteDataV(lineParam);
if (Objects.equals(lineParam.getType(), 2)) {
dataVList = getWlMinuteDataV(lineParam);
} else {
dataVList = getMinuteDataV(lineParam);
}
if (CollectionUtil.isNotEmpty(dataVList)) { if (CollectionUtil.isNotEmpty(dataVList)) {
String time = TimeUtils.StringTimeToString(lineParam.getStartTime()); String time = TimeUtils.StringTimeToString(lineParam.getStartTime());
//以监测点分组 //以监测点分组
@@ -456,6 +446,13 @@ public class InfluxdbDataVImpl extends MppServiceImpl<RStatDataVRelationMapper,
*/ */
public List<DataV> getMinuteDataV(LineCountEvaluateParam lineParam) { public List<DataV> getMinuteDataV(LineCountEvaluateParam lineParam) {
List<DataV> result = new ArrayList<>(); List<DataV> result = new ArrayList<>();
List<DataV> data = new ArrayList<>();
//获取监测点、接线方式数据
Type type = new TypeToken<Map<String, Integer>>(){}.getType();
Map<String, Integer> map = new Gson().fromJson(
String.valueOf(redisUtil.getObjectByKey("wlLineDetail")),
type
);
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class); InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class);
influxQueryWrapper.samePrefixAndSuffix(InfluxDbSqlConstant.V, InfluxDbSqlConstant.V, HarmonicTimesUtil.harmonicTimesList(1, 50, 1)); influxQueryWrapper.samePrefixAndSuffix(InfluxDbSqlConstant.V, InfluxDbSqlConstant.V, HarmonicTimesUtil.harmonicTimesList(1, 50, 1));
influxQueryWrapper.regular(DataV::getLineId, lineParam.getLineId()) influxQueryWrapper.regular(DataV::getLineId, lineParam.getLineId())
@@ -481,83 +478,47 @@ public class InfluxdbDataVImpl extends MppServiceImpl<RStatDataVRelationMapper,
influxQueryWrapper.regular(DataV::getPhasicType, lineParam.getPhasicType()); influxQueryWrapper.regular(DataV::getPhasicType, lineParam.getPhasicType());
} }
quality(result, influxQueryWrapper, lineParam); quality(result, influxQueryWrapper, lineParam);
return result; if (CollectionUtil.isNotEmpty(result)) {
} if (!Objects.isNull(map)) {
//现根据监测点分组,然后根据接线方式排除多于数据,在修改相别
/** Map<String, List<DataV>> lineMap = result.stream().collect(Collectors.groupingBy(DataV::getLineId));
* 按监测点集合、时间条件获取dataV分钟数据 lineMap.forEach((k,v)->{
* timeMap参数来判断是否进行数据处理 timeMap为空则不进行数据处理 if (Objects.isNull(map.get(k))) {
*/ return;
public List<DataV> getWlMinuteDataV(LineCountEvaluateParam lineParam) { }
List<DataV> result = new ArrayList<>(); //这边需要特殊处理下,将线电压数据赋值
if (CollectionUtil.isNotEmpty(lineParam.getLineId())) { Map<String, DataV> lineVoltageIndex = v.stream()
//fixme 这边查询的数据可以缓存起来,因为日表计算时可以使用 .filter(d -> PHASE_MAPPING.containsKey(d.getPhasicType()))
//获取监测点信息 .filter(d -> d.getRmsLvr() != null)
List<CsLinePO> line = csLineFeignClient.queryLineById(lineParam.getLineId()).getData(); .collect(Collectors.toMap(
Map<String, CsLinePO> lineMap = line.stream().collect(Collectors.toMap(CsLinePO::getLineId, Function.identity())); d -> buildKey(d.getTime(), d.getValueType(), d.getPhasicType()),
//获取设备信息 Function.identity(),
List<String> devList = line.stream().map(CsLinePO::getDeviceId).distinct().collect(Collectors.toList()); (existing, replacement) -> existing
List<CsEquipmentDeliveryDTO> dev = equipmentFeignClient.queryDeviceById(devList).getData(); ));
Map<String, CsEquipmentDeliveryDTO> devsMap = dev.stream().collect(Collectors.toMap(CsEquipmentDeliveryDTO::getId, Function.identity())); v.stream()
lineParam.getLineId().forEach(lineId -> { .filter(d -> PHASE_VOLTAGE_TYPES.contains(d.getPhasicType()))
String devId = lineMap.get(lineId).getDeviceId(); .forEach(phaseData -> {
CsLinePO po = lineMap.get(lineId); // 根据当前相电压反查对应的线电压相别
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataV.class); String targetLinePhasic = getReverseLinePhasic(phaseData.getPhasicType());
influxQueryWrapper.eq(DataV::getLineId, lineId) if (targetLinePhasic == null) {
.eq(DataV::getProcess, Integer.toString(devsMap.get(devId).getProcess())) return;
.select(DataV::getLineId) }
.select(DataV::getPhasicType) String key = buildKey(phaseData.getTime(), phaseData.getValueType(), targetLinePhasic);
.select(DataV::getValueType) DataV matchedLineData = lineVoltageIndex.get(key);
//频率 if (matchedLineData != null && matchedLineData.getRmsLvr() != null) {
.select("Pq_Freq", "freq") phaseData.setRmsLvr(matchedLineData.getRmsLvr());
//频率偏差 }
.select("Pq_FreqDev", "freq_dev") });
//相电压有效值 Integer conType = map.get(k);
.select("Pq_RmsU", "rms") Set<String> validPhasicTypes = (conType != 0) ? LINE_VOLTAGE_TYPES : PHASE_VOLTAGE_TYPES;
//线电压有效值 List<DataV> result2 = v.stream().filter(item -> validPhasicTypes.contains(item.getPhasicType())).collect(Collectors.toList());
.select("Pq_RmsLU", "rms_lvr") data.addAll(result2);
//电压负序 });
.select("Pq_SeqNegU", "v_neg") } else {
//电压正序 data.addAll(result);
.select("Pq_SeqPosU", "v_pos") }
//电压零序 if (CollectionUtil.isNotEmpty(data)) {
.select("Pq_SeqZeroU", "v_zero") data.forEach(item -> {
//电压负序不平衡度
.select("Pq_UnbalNegU", "v_unbalance")
.between(DataV::getTime, lineParam.getStartTime(), lineParam.getEndTime())
.eq(DataV::getQualityFlag, "0");
if (CollUtil.isNotEmpty(lineParam.getPhasicType())) {
influxQueryWrapper.regular(DataV::getPhasicType, lineParam.getPhasicType());
}
if (Objects.isNull(po.getLineNo())) {
influxQueryWrapper.eq(DataV::getCldid, Integer.toString(po.getClDid()));
} else {
influxQueryWrapper.eq(DataV::getCldid, Integer.toString(po.getLineNo()));
}
//判断接线方式 (0-星型 1-角型 2-V型) 星型是相电压 角型或者v型是线电压
if (Objects.equals(po.getConType(), 0)) {
//相电压偏差
influxQueryWrapper.select("Pq_UDev", "vu_dev");
//相电压谐波总畸变率
influxQueryWrapper.select("Pq_ThdU", "v_thd");
//相电压基波有效值
influxQueryWrapper.select("Pq_RmsFundU", "v_1");
//2-50次 相电压谐波有效值
influxQueryWrapper.samePrefixAndSuffix("Pq_HarmUV_", "v_", HarmonicTimesUtil.harmonicTimesList(2, 50, 1));
} else {
//线电压偏差
influxQueryWrapper.select("Pq_LUDev", "vu_dev");
//线电压谐波总畸变率
influxQueryWrapper.select("Pq_ThdLU", "v_thd");
//线电压基波有效值
influxQueryWrapper.select("Pq_RmsFundLU", "v_1");
//2-50次 线电压谐波有效值
influxQueryWrapper.samePrefixAndSuffix("Pq_HarmLUV_", "v_", HarmonicTimesUtil.harmonicTimesList(2, 50, 1));
}
result.addAll(dataVMapper.selectByQueryWrapper(influxQueryWrapper));
});
if (CollectionUtil.isNotEmpty(result)) {
result.forEach(item -> {
String newType = PHASE_MAPPING.get(item.getPhasicType()); String newType = PHASE_MAPPING.get(item.getPhasicType());
if (newType != null) { if (newType != null) {
item.setPhasicType(newType); item.setPhasicType(newType);
@@ -565,7 +526,27 @@ public class InfluxdbDataVImpl extends MppServiceImpl<RStatDataVRelationMapper,
}); });
} }
} }
return result; return data;
}
private static String buildKey(Object time, Object valueType, Object phasicType) {
return time + "|" + valueType + "|" + phasicType;
}
private static String getReverseLinePhasic(String phaseType) {
if (phaseType == null) {
return null;
}
switch (phaseType) {
case "A":
return "AB";
case "B":
return "BC";
case "C":
return "CA";
default:
return null;
}
} }
private void quality(List<DataV> result, InfluxQueryWrapper influxQueryWrapper, LineCountEvaluateParam lineParam) { private void quality(List<DataV> result, InfluxQueryWrapper influxQueryWrapper, LineCountEvaluateParam lineParam) {

View File

@@ -110,23 +110,32 @@ public class InfluxdbPqsCommunicateImpl implements IPqsCommunicate {
@Override @Override
public void insertion(PqsCommunicateDto pqsCommunicateDto) { public void insertion(PqsCommunicateDto pqsCommunicateDto) {
// log.info("进出Influxdb实现类");
//获取最新一条数据 //获取最新一条数据
PqsCommunicate dto = new PqsCommunicate(); if(Objects.equals(pqsCommunicateDto.getUpdateCommunicateFlag(),0)){
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(PqsCommunicate.class);
influxQueryWrapper.eq(PqsCommunicate::getDevId,pqsCommunicateDto.getDevId()).timeDesc().limit(1);
List<PqsCommunicate> pqsCommunicates = pqsCommunicateMapper.selectByQueryWrapper(influxQueryWrapper); PqsCommunicate dto = new PqsCommunicate();
InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(PqsCommunicate.class);
influxQueryWrapper.eq(PqsCommunicate::getDevId,pqsCommunicateDto.getDevId()).timeDesc().limit(1);
List<PqsCommunicate> pqsCommunicates = pqsCommunicateMapper.selectByQueryWrapper(influxQueryWrapper);
PqsCommunicate pqsCommunicate = new PqsCommunicate();
pqsCommunicate.setTime(LocalDateTime.parse(pqsCommunicateDto.getTime(), DATE_TIME_FORMATTER).atZone(ZoneId.systemDefault()).toInstant());
pqsCommunicate.setDevId(pqsCommunicateDto.getDevId());
pqsCommunicate.setType(pqsCommunicateDto.getType());
//如果不存数据或者状态不一样则插入数据
//可能存在掉线后最后一组数据还未入库,添加时间判断
if(CollectionUtils.isEmpty(pqsCommunicates)|| (!Objects.equals( pqsCommunicates.get(0).getType(),pqsCommunicateDto.getType())&&pqsCommunicates.get(0).getTime().isBefore(pqsCommunicate.getTime()))){
pqsCommunicateMapper.insertOne(pqsCommunicate);
}
}
PqsCommunicate pqsCommunicate = new PqsCommunicate();
pqsCommunicate.setTime(LocalDateTime.parse(pqsCommunicateDto.getTime(), DATE_TIME_FORMATTER).atZone(ZoneId.systemDefault()).toInstant());
pqsCommunicate.setDevId(pqsCommunicateDto.getDevId());
pqsCommunicate.setType(pqsCommunicateDto.getType());
//如果不存数据或者状态不一样则插入数据
//可能存在掉线后最后一组数据还未入库,添加时间判断
if(CollectionUtils.isEmpty(pqsCommunicates)|| (!Objects.equals( pqsCommunicates.get(0).getType(),pqsCommunicateDto.getType())&&pqsCommunicates.get(0).getTime().isBefore(pqsCommunicate.getTime()))){
pqsCommunicateMapper.insertOne(pqsCommunicate);
}
//更新mysql数据 //更新mysql数据
DevComFlagDTO devComFlagDTO = new DevComFlagDTO(); DevComFlagDTO devComFlagDTO = new DevComFlagDTO();
devComFlagDTO.setId(pqsCommunicateDto.getDevId()); devComFlagDTO.setId(pqsCommunicateDto.getDevId());
@@ -136,6 +145,8 @@ public class InfluxdbPqsCommunicateImpl implements IPqsCommunicate {
devComFlagDTO.setStatus(pqsCommunicateDto.getType()); devComFlagDTO.setStatus(pqsCommunicateDto.getType());
deviceFeignClient.updateDevComFlag(devComFlagDTO); deviceFeignClient.updateDevComFlag(devComFlagDTO);
} }

View File

@@ -6,6 +6,7 @@ import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.pojo.response.HttpResult;
import com.njcn.message.api.fallback.ProduceFeignClientFallbackFactory; import com.njcn.message.api.fallback.ProduceFeignClientFallbackFactory;
import com.njcn.message.message.AskFileSysMessage;
import com.njcn.message.message.DeviceRebootMessage; import com.njcn.message.message.DeviceRebootMessage;
import com.njcn.message.message.ProcessRebootMessage; import com.njcn.message.message.ProcessRebootMessage;
import com.njcn.message.message.RecallMessage; import com.njcn.message.message.RecallMessage;
@@ -38,4 +39,7 @@ public interface ProduceFeignClient {
public HttpResult<Boolean> askRestartProcess(@RequestBody ProcessRebootMessage message); public HttpResult<Boolean> askRestartProcess(@RequestBody ProcessRebootMessage message);
@PostMapping("/askFileSys")
public HttpResult<String> askFileSys(@RequestBody AskFileSysMessage message);
} }

View File

@@ -5,6 +5,7 @@ import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.pojo.response.HttpResult;
import com.njcn.message.api.ProduceFeignClient; import com.njcn.message.api.ProduceFeignClient;
import com.njcn.message.message.AskFileSysMessage;
import com.njcn.message.message.DeviceRebootMessage; import com.njcn.message.message.DeviceRebootMessage;
import com.njcn.message.message.ProcessRebootMessage; import com.njcn.message.message.ProcessRebootMessage;
import com.njcn.message.message.RecallMessage; import com.njcn.message.message.RecallMessage;
@@ -53,6 +54,12 @@ public class ProduceFeignClientFallbackFactory implements FallbackFactory<Produc
log.error("{}异常,降级处理,异常为:{}", "进程重启", throwable.toString()); log.error("{}异常,降级处理,异常为:{}", "进程重启", throwable.toString());
throw new BusinessException(finalExceptionEnum); throw new BusinessException(finalExceptionEnum);
} }
@Override
public HttpResult<String> askFileSys(AskFileSysMessage message) {
log.error("{}异常,降级处理,异常为:{}", "请求装置文件系统", throwable.toString());
throw new BusinessException(finalExceptionEnum);
}
}; };
} }
} }

View File

@@ -37,6 +37,9 @@ public interface BusinessTopic {
String ASK_REAL_DATA_TOPIC = "ask_real_data_topic"; String ASK_REAL_DATA_TOPIC = "ask_real_data_topic";
String RECALL_TOPIC = "recall_Topic"; String RECALL_TOPIC = "recall_Topic";
String FILE_TOPIC = "File_Topic";
/********************************数据中心*********************************/ /********************************数据中心*********************************/

View File

@@ -0,0 +1,36 @@
package com.njcn.message.message;
import lombok.Data;
/**
* Description:
* Date: 2024/12/13 10:15【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
public class AskFileSysMessage {
/**
* guid : sdghsfdhfdhdfhdfghd234234534534
* frontid : dhdfhdfghd2342
* ProcessNo : 1
* devid : 167456737637374567
* type : 2
* Path : /remote/vol1_stat.txt
* DevPath : /etc/vol1_stat.txt
*/
private String guid;
private String nodeId;
private int processNo;
private String devId;
private int type;
private String path;
private String remotePath;
}

View File

@@ -0,0 +1,26 @@
package com.njcn.message.messagedto;
import com.njcn.middle.rocket.domain.BaseMessage;
import lombok.Data;
import java.io.Serializable;
/**
* Description:
* Date: 2026/04/29 下午 3:16【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Data
public class FileSysDTO<T> extends BaseMessage implements Serializable {
private String guid;
private String nodeId;
private int processNo;
private String devId;
private int type;
private String path;
private String devPath;
private int result;
private T detail;
}

View File

@@ -100,12 +100,34 @@
<artifactId>spring-boot-starter-websocket</artifactId> <artifactId>spring-boot-starter-websocket</artifactId>
<version>2.7.12</version> <version>2.7.12</version>
</dependency> </dependency>
<dependency>
<groupId>com.njcn</groupId>
<artifactId>mq-spring-boot-starter</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.7.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>
<finalName>messageboot</finalName> <finalName>messageboot</finalName>
<plugins> <plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
</plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>

View File

@@ -0,0 +1,151 @@
package com.njcn.message.consumer;
import com.alibaba.fastjson.JSONObject;
import com.njcn.message.constant.MessageStatus;
import com.njcn.message.constant.RedisKeyPrefix;
import com.njcn.message.messagedto.FileSysDTO;
import com.njcn.message.messagedto.MessageDataDTO;
import com.njcn.message.websocket.WebSocketServer;
import com.njcn.middle.rocket.constant.EnhanceMessageConstant;
import com.njcn.middle.rocket.handler.EnhanceConsumerMessageHandler;
import com.njcn.redis.pojo.enums.RedisKeyEnum;
import com.njcn.redis.utils.RedisUtil;
import com.njcn.system.api.RocketMqLogFeignClient;
import com.njcn.system.pojo.po.RocketmqMsgErrorLog;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
/**
* Description:
* Date: 2024/12/13 10:06【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Component
@RocketMQMessageListener(
topic = "File_Reply_Topic",
consumerGroup = "file_sys_consumer",
consumeThreadNumber = 10,
enableMsgTrace = true
)
@Slf4j
public class FileSysDataConsumer extends EnhanceConsumerMessageHandler<FileSysDTO> implements RocketMQListener<String> {
@Resource
private RedisUtil redisUtil;
@Resource
private StringRedisTemplate stringRedisTemplate;
@Resource
private RocketMqLogFeignClient rocketMqLogFeignClient;
@Override
public void onMessage(String message) {
FileSysDTO messageDataDTO = JSONObject.parseObject(message, FileSysDTO.class);
super.dispatchMessage(messageDataDTO);
}
/***
* 通过redis分布式锁判断当前消息所处状态
* 1、null 查不到该key的数据属于第一次消费放行
* 2、fail 上次消息消费时发生异常,放行
* 3、being processed 正在处理,打回去
* 4、success 最近72小时消费成功避免重复消费打回去
*/
@Override
public boolean filter(FileSysDTO message) {
String keyStatus = redisUtil.getStringByKey(RedisKeyPrefix.REAL_TIME_DATA.concat(message.getKey()));
if (Objects.isNull(keyStatus) || keyStatus.equalsIgnoreCase(MessageStatus.FAIL)) {
redisUtil.saveByKeyWithExpire(RedisKeyPrefix.REAL_TIME_DATA.concat(message.getKey()), MessageStatus.BEING_PROCESSED, 30L);
return false;
}
return true;
}
/**
* 消费成功缓存到redis5分钟避免重复消费
*/
@Override
protected void consumeSuccess(FileSysDTO message) {
// redisUtil.saveByKeyWithExpire(RedisKeyPrefix.REAL_TIME_DATA.concat(message.getKey()), MessageStatus.SUCCESS, 5*60L);
}
@Override
protected void handleMessage(FileSysDTO message) {
String msgId = message.getGuid();
// 1. 将结果存入 Redis过期时间 60 秒(足够完成请求)
String key = "pending:" + msgId;
redisUtil.saveByKeyWithExpire(key, message, 60L);
// 2. 发布 Redis 通知,让等待的实例知道结果已就绪
stringRedisTemplate.convertAndSend("result_ready_channel", msgId);
}
/**
* 发生异常时,进行错误信息入库保存
* 默认没有实现类子类可以实现该方法调用feign接口进行入库保存
*/
@Override
protected void saveExceptionMsgLog(FileSysDTO message, String identity, Exception exception) {
redisUtil.saveByKeyWithExpire(RedisKeyPrefix.REAL_TIME_DATA.concat(message.getKey()), MessageStatus.FAIL, RedisKeyEnum.ROCKET_MQ_KEY.getTime());
RocketmqMsgErrorLog rocketmqMsgErrorLog = new RocketmqMsgErrorLog();
rocketmqMsgErrorLog.setMsgKey(message.getKey());
rocketmqMsgErrorLog.setResource(message.getSource());
if (identity.equalsIgnoreCase(EnhanceMessageConstant.IDENTITY_SINGLE)) {
//数据库字段配置长度200避免插入失败大致分析异常原因
String exceptionMsg = exception.getMessage();
if(exceptionMsg.length() > 200){
exceptionMsg = exceptionMsg.substring(0,180);
}
rocketmqMsgErrorLog.setRecord(exceptionMsg);
//如果是当前消息重试的则略过
if(!message.getSource().startsWith(EnhanceMessageConstant.RETRY_PREFIX)){
//单次消费异常
rocketMqLogFeignClient.add(rocketmqMsgErrorLog);
}
} else {
rocketmqMsgErrorLog.setRecord("重试消费" + super.getMaxRetryTimes() + "次,依旧消费失败。");
//重试N次后依然消费异常
rocketMqLogFeignClient.add(rocketmqMsgErrorLog);
}
}
/***
* 处理失败后,是否重试
* 一般开启
*/
@Override
protected boolean isRetry() {
return true;
}
/***
* 消费失败是否抛出异常,抛出异常后就不再消费了
*/
@Override
protected boolean throwException() {
return false;
}
}

View File

@@ -39,6 +39,8 @@ import java.util.concurrent.TimeUnit;
* @createTime 2023/8/11 15:32 * @createTime 2023/8/11 15:32
*/ */
@Component @Component
@org.springframework.boot.autoconfigure.condition.ConditionalOnProperty(
name = "mq.type", havingValue = "rocketmq", matchIfMissing = true)
@RocketMQMessageListener( @RocketMQMessageListener(
topic = "LN_Topic", topic = "LN_Topic",
consumerGroup = "ln_consumer", consumerGroup = "ln_consumer",

View File

@@ -0,0 +1,23 @@
package com.njcn.message.mq;
import com.njcn.message.messagedto.MessageDataDTO;
import com.njcn.mq.annotation.MqListener;
import com.njcn.stat.api.MessAnalysisFeignClient;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Collections;
@Component
@ConditionalOnProperty(name = "mq.type", havingValue = "redis-stream")
public class FrontDataMqListener {
@Resource
private MessAnalysisFeignClient messAnalysisFeignClient;
@MqListener(topic = "LN_Topic", group = "ln_consumer")
public void onFrontData(MessageDataDTO msg) {
messAnalysisFeignClient.analysis(Collections.singletonList(msg));
}
}

View File

@@ -0,0 +1,19 @@
package com.njcn.message.mq;
import com.njcn.message.constant.BusinessTopic;
import com.njcn.message.message.RecallMessage;
import com.njcn.mq.core.MqTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
public class RecallMqSender {
@Resource
private MqTemplate mqTemplate;
public void send(RecallMessage message, String nodeId) {
mqTemplate.send(nodeId + "_" + BusinessTopic.RECALL_TOPIC, message);
}
}

View File

@@ -7,9 +7,11 @@ import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.pojo.response.HttpResult;
import com.njcn.common.utils.HttpResultUtil; import com.njcn.common.utils.HttpResultUtil;
import com.njcn.message.message.AskFileSysMessage;
import com.njcn.message.message.DeviceRebootMessage; import com.njcn.message.message.DeviceRebootMessage;
import com.njcn.message.message.ProcessRebootMessage; import com.njcn.message.message.ProcessRebootMessage;
import com.njcn.message.message.RecallMessage; import com.njcn.message.message.RecallMessage;
import com.njcn.message.produce.template.AskFileSysMessaggeTemplate;
import com.njcn.message.produce.template.DeviceRebootMessageTemplate; import com.njcn.message.produce.template.DeviceRebootMessageTemplate;
import com.njcn.message.produce.template.ProcessRebootMessageTemplate; import com.njcn.message.produce.template.ProcessRebootMessageTemplate;
import com.njcn.message.produce.template.RecallMessaggeTemplate; import com.njcn.message.produce.template.RecallMessaggeTemplate;
@@ -40,6 +42,7 @@ public class ProduceController extends BaseController {
private final ProcessRebootMessageTemplate processRebootMessageTemplate; private final ProcessRebootMessageTemplate processRebootMessageTemplate;
private final AskFileSysMessaggeTemplate askFileSysMessaggeTemplate;
@PostMapping("/recall") @PostMapping("/recall")
@OperateInfo(info = LogEnum.BUSINESS_COMMON) @OperateInfo(info = LogEnum.BUSINESS_COMMON)
@@ -76,4 +79,14 @@ public class ProduceController extends BaseController {
processRebootMessageTemplate.sendMember(baseMessage,message.getNodeId()); processRebootMessageTemplate.sendMember(baseMessage,message.getNodeId());
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
} }
@PostMapping("/askFileSys")
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@ApiOperation("请求文件系统")
@ApiImplicitParam(name = "message", value = "参数", required = true)
public HttpResult<String> askFileSys(@RequestBody AskFileSysMessage message){
String methodDescribe = getMethodDescribe("askFileSys");
SendResult sendResult = askFileSysMessaggeTemplate.sendMember(message);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,message.getGuid() , methodDescribe);
}
} }

View File

@@ -0,0 +1,34 @@
package com.njcn.message.produce.template;
import com.alibaba.fastjson.JSONObject;
import com.njcn.message.constant.BusinessResource;
import com.njcn.message.constant.BusinessTopic;
import com.njcn.message.message.AskFileSysMessage;
import com.njcn.middle.rocket.domain.BaseMessage;
import com.njcn.middle.rocket.template.RocketMQEnhanceTemplate;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.stereotype.Component;
/**
* Description:
* Date: 2024/12/13 15:15【需求编号】
*
* @author clam
* @version V1.0.0
*/
@Component
public class AskFileSysMessaggeTemplate extends RocketMQEnhanceTemplate {
public AskFileSysMessaggeTemplate(RocketMQTemplate template) {
super(template);
}
public SendResult sendMember(AskFileSysMessage askRealDataMessage) {
BaseMessage baseMessage = new BaseMessage();
baseMessage.setMessageBody(JSONObject.toJSONString(askRealDataMessage));
baseMessage.setSource(BusinessResource.WEB_RESOURCE);
baseMessage.setKey(askRealDataMessage.getGuid());
return send(BusinessTopic.FILE_TOPIC,askRealDataMessage.getNodeId() , baseMessage);
}
}

View File

@@ -0,0 +1,210 @@
package com.njcn.message.mq;
import com.alibaba.fastjson.JSON;
import com.njcn.message.message.RecallMessage;
import com.njcn.message.messagedto.MessageDataDTO;
import com.njcn.middle.stream.autoconfig.RedisStreamAutoConfiguration;
import com.njcn.mq.autoconfig.MqCoreAutoConfiguration;
import com.njcn.mq.container.MqListenerRegistry;
import com.njcn.mq.core.MqTemplate;
import com.njcn.mq.driver.redis.RedisStreamMqDriver;
import com.njcn.mq.driver.redis.RedisStreamMqDriverAutoConfiguration;
import com.njcn.mq.driver.rocketmq.RocketMqDriver;
import com.njcn.mq.driver.rocketmq.RocketMqDriverAutoConfiguration;
import com.njcn.mq.spi.MqDriver;
import com.njcn.stat.api.MessAnalysisFeignClient;
import org.apache.rocketmq.spring.autoconfigure.RocketMQProperties;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.junit.jupiter.api.Assumptions;
import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.data.redis.connection.stream.MapRecord;
import org.springframework.data.redis.connection.stream.ReadOffset;
import org.springframework.data.redis.connection.stream.StreamOffset;
import org.springframework.data.redis.connection.stream.StreamReadOptions;
import org.springframework.data.redis.connection.stream.StreamRecords;
import org.springframework.data.redis.core.StringRedisTemplate;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.anyList;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.timeout;
import static org.mockito.Mockito.verify;
/**
* MQ starter 切片接入验证测试ApplicationContextRunner不启动全应用
* 真实 Redis 要求localhost:6379docker redis-stream-it仅上/下行收发用例需要,
* 纯装配用例不需要Lettuce 懒连接,不触发实际连接)。
*
* <p>装配一律用 {@code withConfiguration(AutoConfigurations.of(...))},让 Spring 按
* <b>真实 autoconfig 顺序</b>AutoConfigurationSorter处理与生产环境一致。以此
* 验证 {@link MqCoreAutoConfiguration} 的 {@code @ConditionalOnBean(MqDriver)} 能在
* 真实顺序下拿到 driver bean —— 这依赖 driver autoconfig 上的
* {@code @AutoConfigureBefore(MqCoreAutoConfiguration.class)}。若缺该保障,按类名字母序
* {@code com.njcn.mq.autoconfig.*} 先于 {@code com.njcn.mq.driver.*}core 会在 driver
* bean 注册前求值条件失败,导致 MqTemplate / MqListenerRegistry 不装配。
*/
public class MqSliceWiringTest {
private static boolean redisAvailable() {
try {
Socket s = new Socket();
s.connect(new InetSocketAddress("localhost", 6379), 500);
s.close();
return true;
} catch (Exception e) {
return false;
}
}
/** redis-stream 模式:真实 autoconfig 顺序装 5 个 autoconfig + 业务 bean上/下行用)。 */
private ApplicationContextRunner redisStreamRunner() {
return new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(
RedisAutoConfiguration.class,
RedisStreamAutoConfiguration.class,
RedisStreamMqDriverAutoConfiguration.class,
RocketMqDriverAutoConfiguration.class,
MqCoreAutoConfiguration.class))
.withUserConfiguration(FrontDataMqListener.class, RecallMqSender.class)
.withBean(MessAnalysisFeignClient.class,
() -> mock(MessAnalysisFeignClient.class))
.withPropertyValues(
"mq.type=redis-stream",
"spring.redis.host=localhost",
"spring.redis.port=6379");
}
// ------------------------------------------------------------------
// 1. 装配mq.type 二选一 + core bean 在真实 autoconfig 顺序下装配
// ------------------------------------------------------------------
@Test
void testRedisStreamDriverSelected() {
// 纯装配检查,不依赖真实 RedisLettuce 懒连接)。
new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(
RedisAutoConfiguration.class,
RedisStreamAutoConfiguration.class,
RedisStreamMqDriverAutoConfiguration.class,
RocketMqDriverAutoConfiguration.class,
MqCoreAutoConfiguration.class))
.withPropertyValues(
"mq.type=redis-stream",
"spring.redis.host=localhost",
"spring.redis.port=6379")
.run(ctx -> {
assertThat(ctx).hasSingleBean(MqDriver.class);
assertThat(ctx.getBean(MqDriver.class)).isInstanceOf(RedisStreamMqDriver.class);
// 真实顺序下 core 的 @ConditionalOnBean(MqDriver) 必须命中
assertThat(ctx).hasSingleBean(MqTemplate.class);
assertThat(ctx).hasSingleBean(MqListenerRegistry.class);
});
}
@Test
void testRocketMqDriverSelected() {
// rocket 测试不依赖真实 Redis不装 RedisAutoConfigurationredis driver 因 mq.type 不匹配而 inactive。
new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(
RedisStreamMqDriverAutoConfiguration.class,
RocketMqDriverAutoConfiguration.class,
MqCoreAutoConfiguration.class))
.withBean(RocketMQTemplate.class, () -> mock(RocketMQTemplate.class))
.withBean(RocketMQProperties.class, RocketMQProperties::new)
.withPropertyValues("mq.type=rocketmq")
.run(ctx -> {
assertThat(ctx).hasSingleBean(MqDriver.class);
assertThat(ctx.getBean(MqDriver.class)).isInstanceOf(RocketMqDriver.class);
assertThat(ctx).hasSingleBean(MqTemplate.class);
assertThat(ctx).hasSingleBean(MqListenerRegistry.class);
});
}
// ------------------------------------------------------------------
// 2. 上行(需要真实 Redis
// 向 LN_Topic stream XADD 一条消息,验证 FrontDataMqListener 触发了
// messAnalysisFeignClient.analysis(...)
// ------------------------------------------------------------------
@Test
void testUpstreamFrontData() {
Assumptions.assumeTrue(redisAvailable(), "Redis not available at localhost:6379, skipping");
redisStreamRunner().run(ctx -> {
StringRedisTemplate redis = ctx.getBean(StringRedisTemplate.class);
MessAnalysisFeignClient mockClient = ctx.getBean(MessAnalysisFeignClient.class);
// 构造 RedisStreamMqDriver 消费时期望的字段格式
// enc=plain → body 即为原始 JSON参见 MessageCodec.encodeBody(json, false)
// stream key = StreamKeyBuilder.buildStream("LN_Topic") = "LN_Topic"
// (默认 envIsolation=false无 env 前缀)
MessageDataDTO dto = new MessageDataDTO();
dto.setDataType(1);
String json = JSON.toJSONString(dto);
Map<String, String> fields = new HashMap<String, String>();
fields.put("key", "test-key-upstream-1");
fields.put("tag", "");
fields.put("enc", "plain");
fields.put("body", json);
fields.put("ts", String.valueOf(System.currentTimeMillis()));
// XADD 到 LN_TopicMqListenerRegistry.start() 已在 context 启动时订阅该 stream
redis.opsForStream().add(
StreamRecords.newRecord().in("LN_Topic").ofMap(fields)
);
// 等待消费线程处理blockMs 默认 2000mstimeout=5000ms 足够)
verify(mockClient, timeout(5000)).analysis(anyList());
});
}
// ------------------------------------------------------------------
// 3. 下行(需要真实 Redis
// 通过 RecallMqSender 发送 RecallMessage验证 stream 内容正确
// ------------------------------------------------------------------
@Test
void testDownstreamRecall() {
Assumptions.assumeTrue(redisAvailable(), "Redis not available at localhost:6379, skipping");
redisStreamRunner().run(ctx -> {
StringRedisTemplate redis = ctx.getBean(StringRedisTemplate.class);
RecallMqSender sender = ctx.getBean(RecallMqSender.class);
// 清理,确保只有本次发送的消息
redis.delete("n1_recall_Topic");
RecallMessage msg = new RecallMessage();
msg.setGuid("g1");
// MqTemplate.send("n1_recall_Topic", msg) → RedisStreamMqDriver XADD
// stream key = StreamKeyBuilder.buildStream("n1_recall_Topic") = "n1_recall_Topic"
sender.send(msg, "n1");
Long size = redis.opsForStream().size("n1_recall_Topic");
assertThat(size).isGreaterThanOrEqualTo(1L);
@SuppressWarnings("unchecked")
List<MapRecord<String, Object, Object>> records =
redis.opsForStream().read(
StreamReadOptions.empty().count(1L),
StreamOffset.create("n1_recall_Topic", ReadOffset.from("0-0"))
);
assertThat(records).isNotEmpty();
Map<Object, Object> firstFields = records.get(0).getValue();
// DefaultMqTemplate.send(topic, payload) 使用 encodeBody(json, false) → enc="plain"
// 因此 body 即为原始 JSON无需 gzip 解压
String body = (String) firstFields.get("body");
RecallMessage result = JSON.parseObject(body, RecallMessage.class);
assertThat(result.getGuid()).isEqualTo("g1");
});
}
}