1.台账接口调整
2.数据清洗相关功能
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
package com.njcn.device.pq.controller;
|
||||
|
||||
/**
|
||||
* @Author: cdf
|
||||
* @CreateTime: 2025-03-26
|
||||
* @Description: 异常数据清洗
|
||||
*/
|
||||
public class AbnormalDataController {
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
package com.njcn.device.pq.controller;
|
||||
|
||||
|
||||
import com.njcn.common.pojo.annotation.OperateInfo;
|
||||
import com.njcn.common.pojo.enums.common.LogEnum;
|
||||
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
|
||||
import com.njcn.common.pojo.response.HttpResult;
|
||||
import com.njcn.common.utils.HttpResultUtil;
|
||||
import com.njcn.device.pq.pojo.param.dataClean.MonitorBaseParam;
|
||||
import com.njcn.device.pq.pojo.vo.AlarmStrategyVO;
|
||||
import com.njcn.device.pq.pojo.vo.dataClean.VerifyMonitorVO;
|
||||
import com.njcn.device.pq.service.IDataVerifyService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
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 com.njcn.web.controller.BaseController;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 异常数据功能
|
||||
* </p>
|
||||
*
|
||||
* @author cdf
|
||||
* @since 2025-03-26
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/dataVerify")
|
||||
@RequiredArgsConstructor
|
||||
@Api(tags = "异常数据功能")
|
||||
public class DataVerifyController extends BaseController {
|
||||
|
||||
private final IDataVerifyService iDataVerifyService;
|
||||
|
||||
|
||||
/**
|
||||
* 获取异常监测点相关信息
|
||||
*/
|
||||
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
|
||||
@PostMapping("/getMonitorVerifyData")
|
||||
@ApiOperation("获取异常监测点相关信息")
|
||||
public HttpResult<VerifyMonitorVO> getMonitorVerifyData(@RequestBody MonitorBaseParam monitorBaseParam){
|
||||
String methodDescribe = getMethodDescribe("getMonitorVerifyData");
|
||||
VerifyMonitorVO verifyMonitorVO = iDataVerifyService.getMonitorVerifyData(monitorBaseParam);
|
||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, verifyMonitorVO, methodDescribe);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取时间范围异常测点数量
|
||||
*/
|
||||
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
|
||||
@PostMapping("/getRangeAbnormalMonitor")
|
||||
@ApiOperation("获取异常监测点相关信息")
|
||||
public HttpResult<List<Map<String,Object>>> getRangeAbnormalMonitor(@RequestBody MonitorBaseParam monitorBaseParam){
|
||||
String methodDescribe = getMethodDescribe("getRangeAbnormalMonitor");
|
||||
List<Map<String,Object>> verifyMonitorVO = iDataVerifyService.getRangeAbnormalMonitor(monitorBaseParam);
|
||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, verifyMonitorVO, methodDescribe);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
package com.njcn.device.pq.mapper;
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.njcn.device.pq.pojo.po.DataVerify;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Mapper 接口
|
||||
* </p>
|
||||
*
|
||||
* @author cdf
|
||||
* @since 2025-03-26
|
||||
*/
|
||||
public interface DataVerifyMapper extends BaseMapper<DataVerify> {
|
||||
|
||||
}
|
||||
@@ -86,4 +86,9 @@ public interface CommTerminalService {
|
||||
List<DeptGetSubStationDTO.Info> deptSubStationInfo(DeptGetLineParam deptGetLineParam);
|
||||
|
||||
List<SubGetBase> tagOrIdGetSub(SubstationParam substationParam);
|
||||
|
||||
/**
|
||||
* 通过部门id获取在运测点
|
||||
*/
|
||||
List<String> getRunMonitorByDept(String deptId);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.njcn.device.pq.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.njcn.device.pq.pojo.param.dataClean.MonitorBaseParam;
|
||||
import com.njcn.device.pq.pojo.po.DataVerify;
|
||||
import com.njcn.device.pq.pojo.vo.dataClean.VerifyMonitorVO;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 服务类
|
||||
* </p>
|
||||
*
|
||||
* @author cdf
|
||||
* @since 2025-03-26
|
||||
*/
|
||||
public interface IDataVerifyService extends IService<DataVerify> {
|
||||
|
||||
|
||||
VerifyMonitorVO getMonitorVerifyData(MonitorBaseParam monitorBaseParam);
|
||||
|
||||
|
||||
List<Map<String,Object>> getRangeAbnormalMonitor(MonitorBaseParam monitorBaseParam);
|
||||
|
||||
}
|
||||
@@ -9,11 +9,13 @@ import com.njcn.common.utils.EnumUtils;
|
||||
import com.njcn.device.biz.pojo.dto.*;
|
||||
import com.njcn.device.biz.pojo.param.DeptGetLineParam;
|
||||
import com.njcn.device.biz.pojo.param.SubstationParam;
|
||||
import com.njcn.device.pq.enums.LineBaseEnum;
|
||||
import com.njcn.device.pq.mapper.LineMapper;
|
||||
import com.njcn.device.pq.mapper.OverlimitMapper;
|
||||
import com.njcn.device.pq.service.CommTerminalService;
|
||||
import com.njcn.device.pq.service.DeptLineService;
|
||||
import com.njcn.redis.utils.RedisUtil;
|
||||
import com.njcn.system.enums.DicDataEnum;
|
||||
import com.njcn.user.api.DeptFeignClient;
|
||||
import com.njcn.user.pojo.dto.DeptDTO;
|
||||
import com.njcn.user.pojo.po.Dept;
|
||||
@@ -289,6 +291,13 @@ public class CommTerminalServiceImpl implements CommTerminalService {
|
||||
return subStationList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getRunMonitorByDept(String deptId) {
|
||||
List<String> ids = deptFeignClient.getDepSonIdtByDeptId(deptId).getData();
|
||||
List<String> monitorIds = deptLineService.getLineByDeptIds(ids,Stream.of(LineBaseEnum.RUN.getCode()).collect(Collectors.toList()),Stream.of(0,1,2).collect(Collectors.toList()));
|
||||
return monitorIds;
|
||||
}
|
||||
|
||||
|
||||
private List<Integer> filterDataTypeNew(String serverName) {
|
||||
List<Integer> devType = new ArrayList<>();
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
package com.njcn.device.pq.service.impl;
|
||||
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.date.*;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.njcn.device.pq.mapper.DataVerifyMapper;
|
||||
import com.njcn.device.pq.mapper.LineMapper;
|
||||
import com.njcn.device.pq.pojo.param.dataClean.MonitorBaseParam;
|
||||
import com.njcn.device.pq.pojo.po.DataVerify;
|
||||
import com.njcn.device.pq.pojo.vo.dataClean.VerifyMonitorVO;
|
||||
import com.njcn.device.pq.service.CommTerminalService;
|
||||
import com.njcn.device.pq.service.IDataVerifyService;
|
||||
import com.njcn.device.pq.service.LineService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 服务实现类
|
||||
* </p>
|
||||
*
|
||||
* @author cdf
|
||||
* @since 2025-03-26
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class DataVerifyServiceImpl extends ServiceImpl<DataVerifyMapper, DataVerify> implements IDataVerifyService {
|
||||
|
||||
private final CommTerminalService commTerminalService;
|
||||
|
||||
@Override
|
||||
public VerifyMonitorVO getMonitorVerifyData(MonitorBaseParam monitorBaseParam) {
|
||||
List<String> monitorIds = commTerminalService.getRunMonitorByDept(monitorBaseParam.getDeptId());
|
||||
LambdaQueryWrapper<DataVerify> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.select(DataVerify::getLineId).between(DataVerify::getTime, DateUtil.beginOfDay(DateUtil.parse(monitorBaseParam.getSearchBeginTime())),DateUtil.endOfDay(DateUtil.parse(monitorBaseParam.getSearchEndTime())))
|
||||
.in(DataVerify::getLineId,monitorIds).groupBy(DataVerify::getLineId);
|
||||
List<DataVerify> list = this.list(lambdaQueryWrapper);
|
||||
VerifyMonitorVO verifyMonitorVO = new VerifyMonitorVO();
|
||||
verifyMonitorVO.setRunNum(monitorIds.size());
|
||||
verifyMonitorVO.setAbnormalNum(list.size());
|
||||
return verifyMonitorVO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Map<String, Object>> getRangeAbnormalMonitor(MonitorBaseParam monitorBaseParam) {
|
||||
List<Map<String, Object>> result = new ArrayList<>();
|
||||
|
||||
List<String> monitorIds = commTerminalService.getRunMonitorByDept(monitorBaseParam.getDeptId());
|
||||
LambdaQueryWrapper<DataVerify> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.between(DataVerify::getTime, DateUtil.beginOfDay(DateUtil.parse(monitorBaseParam.getSearchBeginTime())),DateUtil.endOfDay(DateUtil.parse(monitorBaseParam.getSearchEndTime())))
|
||||
.in(DataVerify::getLineId,monitorIds);
|
||||
List<DataVerify> dataVerifyList = this.list(lambdaQueryWrapper);
|
||||
|
||||
DateTime startTime = DateUtil.parse(monitorBaseParam.getSearchBeginTime());
|
||||
DateTime endTime = DateUtil.parse(monitorBaseParam.getSearchEndTime());
|
||||
if(startTime.year() == endTime.year() && startTime.month() == endTime.month()){
|
||||
DateRange ranged = DateUtil.range(DateUtil.parse(monitorBaseParam.getSearchBeginTime()),DateUtil.parse(monitorBaseParam.getSearchEndTime()), DateField.DAY_OF_MONTH);
|
||||
|
||||
Map<String,Integer> map = dataVerifyList.stream().collect(Collectors.groupingBy(it->it.getTime().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)),
|
||||
Collectors.mapping(DataVerify::getLineId, Collectors.collectingAndThen(Collectors.toSet(), Set::size))));
|
||||
for (DateTime dateTime : ranged) {
|
||||
Map<String, Object> rangeMap = new HashMap<>();
|
||||
String time = DateUtil.format(dateTime, DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN));
|
||||
rangeMap.put("time", time);
|
||||
rangeMap.put("val", map.getOrDefault(time, 0));
|
||||
result.add(rangeMap);
|
||||
}
|
||||
|
||||
}else {
|
||||
//不在一个月则展示月数据
|
||||
DateRange ranged = DateUtil.range(DateUtil.parse(monitorBaseParam.getSearchBeginTime()),DateUtil.parse(monitorBaseParam.getSearchEndTime()), DateField.MONTH);
|
||||
if(CollUtil.isNotEmpty(dataVerifyList)){
|
||||
Map<String,Integer> map = dataVerifyList.stream().collect(Collectors.groupingBy(it->it.getTime().format(DateTimeFormatter.ofPattern(DatePattern.NORM_MONTH_PATTERN)),
|
||||
Collectors.mapping(DataVerify::getLineId, Collectors.collectingAndThen(Collectors.toSet(), Set::size))));
|
||||
for (DateTime dateTime : ranged) {
|
||||
Map<String, Object> rangeMap = new HashMap<>();
|
||||
String time = DateUtil.format(dateTime, DateTimeFormatter.ofPattern(DatePattern.NORM_MONTH_PATTERN));
|
||||
rangeMap.put("time", time);
|
||||
rangeMap.put("val", map.getOrDefault(time, 0));
|
||||
result.add(rangeMap);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -479,6 +479,17 @@ public class TerminalBaseServiceImpl extends ServiceImpl<LineMapper, Line> imple
|
||||
lineDetail.setMonitorFlag(0);
|
||||
}
|
||||
|
||||
if(lineDetail.getPowerFlag() == 1){
|
||||
//用户侧,objId不可为空
|
||||
if(StrUtil.isBlank(lineDetail.getObjId())){
|
||||
throw new BusinessException(DeviceResponseEnum.LINE_USER_EMPTY);
|
||||
}
|
||||
}else {
|
||||
if(StrUtil.isNotBlank(lineDetail.getObjId())){
|
||||
throw new BusinessException(DeviceResponseEnum.LINE_NO_USER_EMPTY);
|
||||
}
|
||||
}
|
||||
|
||||
lineDetailMapper.insert(lineDetail);
|
||||
if(StrUtil.isNotBlank(lineDetail.getObjId())){
|
||||
userLedgerFeignClient.bindUserStation(lineDetail.getObjId(),subIndex);
|
||||
@@ -802,6 +813,17 @@ public class TerminalBaseServiceImpl extends ServiceImpl<LineMapper, Line> imple
|
||||
} else {
|
||||
lineDetail.setMonitorFlag(0);
|
||||
}
|
||||
if(lineDetail.getPowerFlag() == 1){
|
||||
//用户侧,objId不可为空
|
||||
if(StrUtil.isBlank(lineDetail.getObjId())){
|
||||
throw new BusinessException(DeviceResponseEnum.LINE_USER_EMPTY);
|
||||
}
|
||||
}else {
|
||||
if(StrUtil.isNotBlank(lineDetail.getObjId())){
|
||||
throw new BusinessException(DeviceResponseEnum.LINE_NO_USER_EMPTY);
|
||||
}
|
||||
}
|
||||
|
||||
lineDetailMapper.updateById(lineDetail);
|
||||
|
||||
if(StrUtil.isNotBlank(lineDetail.getObjId())){
|
||||
|
||||
@@ -76,7 +76,6 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
|
||||
*/
|
||||
@Override
|
||||
public List<TerminalTree> getTerminalTree() {
|
||||
List<TerminalTree> taiZhang = new ArrayList<>();
|
||||
List<TerminalTree> allList = lineMapper.getAllList();
|
||||
List<TerminalTree> projectList = allList.stream().filter(item -> item.getLevel().equals(LineBaseEnum.PROJECT_LEVEL.getCode())).sorted(Comparator.comparing(TerminalTree::getSort)).collect(Collectors.toList());
|
||||
List<TerminalTree> provinceList = lineMapper.getProvinceList(null, 0);
|
||||
@@ -88,22 +87,33 @@ public class TerminalTreeServiceImpl implements TerminalTreeService {
|
||||
|
||||
//处理存在用户的台账
|
||||
List<TerminalTree> newLineList = lineMapper.getLineAndLineDetail();
|
||||
//用户侧测点
|
||||
List<TerminalTree> userLineList = newLineList.stream().filter(it->StrUtil.isNotBlank(it.getObjId())).collect(Collectors.toList());
|
||||
List<TerminalTree> otherLineList = newLineList.stream().filter(it->StrUtil.isBlank(it.getObjId())).collect(Collectors.toList());
|
||||
|
||||
//用户侧装置
|
||||
List<String> devIds = userLineList.stream().map(it->it.getPids().split(StrUtil.COMMA)[LineBaseEnum.DEVICE_LEVEL.getCode()]).distinct().collect(Collectors.toList());
|
||||
|
||||
|
||||
List<TerminalTree> subvUserList = subvList.stream().filter(it->devIds.contains(it.getPid())).collect(Collectors.toList());
|
||||
List<String> busBarIds = subvUserList.stream().map(TerminalTree::getId).distinct().collect(Collectors.toList());
|
||||
|
||||
List<TerminalTree> devUserList = devList.stream().filter(it->devIds.contains(it.getId())).collect(Collectors.toList());
|
||||
|
||||
//用户侧线路
|
||||
List<TerminalTree> subvUserList = subvList.stream().filter(it->devIds.contains(it.getPid())).collect(Collectors.toList());
|
||||
|
||||
|
||||
//电网侧测点
|
||||
List<TerminalTree> otherLineList = newLineList.stream().filter(it->StrUtil.isBlank(it.getObjId())).collect(Collectors.toList());
|
||||
|
||||
//电网侧装置
|
||||
List<String> devOtherIds = otherLineList.stream().map(it->it.getPids().split(StrUtil.COMMA)[LineBaseEnum.DEVICE_LEVEL.getCode()]).distinct().collect(Collectors.toList());
|
||||
List<TerminalTree> devOtherList = devList.stream().filter(it->devOtherIds.contains(it.getId())).collect(Collectors.toList());
|
||||
|
||||
//电网侧线路
|
||||
List<TerminalTree> subvOtherList = subvList.stream().filter(it->devOtherIds.contains(it.getPid())).collect(Collectors.toList());
|
||||
|
||||
|
||||
//其他的台账默认时电网侧台账
|
||||
List<TerminalTree> subvOtherList = subvList.stream().filter(it->!busBarIds.contains(it.getId())).collect(Collectors.toList());
|
||||
/* List<TerminalTree> subvOtherList = subvList.stream().filter(it->!busBarIds.contains(it.getId())).collect(Collectors.toList());
|
||||
List<TerminalTree> devOtherList = devList.stream().filter(it->!devIds.contains(it.getId())).collect(Collectors.toList());
|
||||
|
||||
|
||||
*/
|
||||
UserReportParam userReportParam = new UserReportParam();
|
||||
List<UserLedgerVO> userReportPOList = userLedgerFeignClient.selectUserList(userReportParam).getData();
|
||||
userReportPOList = userReportPOList.stream().filter(it->StrUtil.isNotBlank(it.getStationId())).collect(Collectors.toList());
|
||||
|
||||
Reference in New Issue
Block a user