1.增加配网用户侧算法适配

2.新增河北用户侧数据完整性接口
3.新增河北用户侧越限详情接口
This commit is contained in:
2024-09-04 16:47:08 +08:00
parent ed10b12e79
commit 9fca0e5714
29 changed files with 818 additions and 25 deletions

View File

@@ -146,6 +146,9 @@ public interface CommTerminalGeneralClient {
@PostMapping("/getAllLineOverLimit")
HttpResult<List<Overlimit>> getAllLineOverLimit();
@PostMapping("/getOverLimitDataByIds")
HttpResult<List<Overlimit>> getOverLimitDataByIds(@RequestBody List<String> ids);
/**
* @Description: 获取变电站下监测点信息
* @param devDataType

View File

@@ -15,6 +15,7 @@ import com.njcn.device.biz.utils.DeviceEnumUtil;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.Map;
@@ -109,6 +110,12 @@ public class CommTerminalGeneralClientFallbackFactory implements FallbackFactory
throw new BusinessException(finalExceptionEnum);
}
@Override
public HttpResult<List<Overlimit>> getOverLimitDataByIds(@RequestBody List<String> ids) {
log.error("{}异常,降级处理,异常为:{}", "通过监测点集合获取监测点限值", throwable.toString());
throw new BusinessException(finalExceptionEnum);
}
@Override
public HttpResult<Map<String, List<String>>> getLineBySubstationRelation(Integer devDataType) {
log.error("{}异常,降级处理,异常为:{}", "获取变电站下监测点信息", throwable.toString());

View File

@@ -4,9 +4,12 @@ import com.njcn.common.pojo.constant.ServerInfo;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.device.pms.api.fallback.DistributionMonitorClientFallbackFactory;
import com.njcn.device.pms.pojo.dto.PwPmsMonitorDTO;
import com.njcn.device.pms.pojo.param.pwUser.PwUserMonitorParam;
import com.njcn.device.pms.pojo.po.DistributionMonitor;
import com.njcn.device.pms.pojo.vo.DoubleUserVO;
import com.njcn.device.pms.pojo.vo.pwUser.PwUserMonitorDataVO;
import org.springframework.cloud.openfeign.FeignClient;
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.RequestParam;
@@ -52,4 +55,8 @@ public interface DistributionMonitorClient {
@PostMapping("pwMonitorAreaDetailInfo")
HttpResult<List<PwPmsMonitorDTO>> pwMonitorAreaDetailInfo(@RequestBody List<String> monitorIds);
@PostMapping("getPwUserIds")
HttpResult<List<PwUserMonitorDataVO>> getPwUserIds(@RequestBody @Validated PwUserMonitorParam pwUserMonitorParam);
}

View File

@@ -5,8 +5,10 @@ import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.device.pms.api.DistributionMonitorClient;
import com.njcn.device.pms.pojo.dto.PwPmsMonitorDTO;
import com.njcn.device.pms.pojo.param.pwUser.PwUserMonitorParam;
import com.njcn.device.pms.pojo.po.DistributionMonitor;
import com.njcn.device.pms.pojo.vo.DoubleUserVO;
import com.njcn.device.pms.pojo.vo.pwUser.PwUserMonitorDataVO;
import com.njcn.device.pms.utils.PmsDeviceEnumUtil;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
@@ -59,6 +61,12 @@ public class DistributionMonitorClientFallbackFactory implements FallbackFactory
throw new BusinessException(finalExceptionEnum);
}
@Override
public HttpResult<List<PwUserMonitorDataVO>> getPwUserIds(PwUserMonitorParam pwUserMonitorParam) {
log.error("{}异常,降级处理,异常为:{}", "根据部门获取配网用户信息", throwable.toString());
throw new BusinessException(finalExceptionEnum);
}
};
}

View File

@@ -0,0 +1,21 @@
package com.njcn.device.pms.pojo.param.pwUser;
import com.njcn.web.pojo.param.BaseParam;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
@Data
@EqualsAndHashCode(callSuper = true)
public class PwUserMonitorParam extends BaseParam {
@NotBlank(message = "单位id不可为空")
private String orgId;
private String userName;
private Double limitValue;
}

View File

@@ -0,0 +1,22 @@
package com.njcn.device.pms.pojo.vo.pwUser;
import lombok.Data;
@Data
public class PwUserMonitorDataVO {
private String id;
private String name;
private String orgName;
private String operationName;
private Integer ifSensitiveUser;
private String userType;
private Float integrityRate;
}

View File

@@ -1,7 +1,10 @@
package com.njcn.device.pms.controller.ledgerManger;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.TimeInterval;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.njcn.common.pojo.annotation.OperateInfo;
import com.njcn.common.pojo.enums.common.LogEnum;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
@@ -16,9 +19,11 @@ import com.njcn.device.biz.pojo.param.SubstationParam;
import com.njcn.device.biz.pojo.po.Overlimit;
import com.njcn.device.biz.pojo.po.PqsDeviceUnit;
import com.njcn.device.pms.mapper.majornetwork.PqsDeviceUnitMapper;
import com.njcn.device.pms.pojo.param.pwUser.PwUserMonitorParam;
import com.njcn.device.pms.pojo.po.DistributionMonitor;
import com.njcn.device.pms.pojo.po.Monitor;
import com.njcn.device.pms.pojo.po.PmsTerminal;
import com.njcn.device.pms.pojo.vo.pwUser.PwUserMonitorDataVO;
import com.njcn.device.pms.service.ledgerManger.CommTerminalService;
import com.njcn.device.pms.service.majornetwork.IDistributionMonitorService;
import com.njcn.device.pms.service.majornetwork.IMonitorService;
@@ -258,6 +263,16 @@ public class CommTerminalController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getOverLimitDataByIds")
@ApiOperation("根据监测点id集合获取越限数值")
@ApiImplicitParam(name = "ids", value = "监测点id集合", required = true)
public HttpResult<List<Overlimit>> getOverLimitDataByIds(@RequestBody List<String> ids) {
String methodDescribe = getMethodDescribe("getOverLimitDataByIds");
List<Overlimit> result = monitorService.getOverLimitDataByIds(ids);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getAllLineOverLimit")
@ApiOperation("获取投运在线的监测点的限值")
@@ -283,7 +298,7 @@ public class CommTerminalController extends BaseController {
@ApiOperation("获取投运谐波系统所有监测点")
public HttpResult<List<String>> getRunMonitorIds() {
String methodDescribe = getMethodDescribe("getRunMonitorIds");
List<String> result = commTerminalService.getOneMonitorIds();
List<String> result = commTerminalService.getRunMonitorList();
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
@@ -299,23 +314,17 @@ public class CommTerminalController extends BaseController {
@ApiImplicitParam(name = "list", value = "监测点集合")
public HttpResult<List<LineDevGetDTO>> getMonitorDetailList(@RequestBody List<String> list) {
String methodDescribe = getMethodDescribe("getMonitorDetailList");
List<LineDevGetDTO> result = new ArrayList<>();
List<Monitor> monitorList = monitorService.getMonitorList(list);
List<LineDevGetDTO> monitorList = monitorService.getPmsCalMonitorList(list);
//获取设备最新数据时间
List<String> devList = monitorList.stream().map(Monitor::getTerminalId).distinct().collect(Collectors.toList());
List<String> devList = monitorList.stream().map(LineDevGetDTO::getDevId).distinct().collect(Collectors.toList());
List<PmsTerminal> terminals = terminalService.getTerminalSelectByIds(devList);
Map<String,List<PmsTerminal>> map = terminals.stream().collect(Collectors.groupingBy(PmsTerminal::getId));
monitorList.forEach(item->{
LineDevGetDTO lineDevGetDTO = new LineDevGetDTO();
lineDevGetDTO.setPointId(item.getId());
lineDevGetDTO.setDevId(item.getTerminalId());
lineDevGetDTO.setInterval(item.getStatisticalInterval());
if (!Objects.isNull(map.get(item.getTerminalId()))){
lineDevGetDTO.setUpdateTime(map.get(item.getTerminalId()).get(0).getUpdateTime());
if (!Objects.isNull(map.get(item.getDevId()))){
item.setUpdateTime(map.get(item.getDevId()).get(0).getUpdateTime());
}
result.add(lineDevGetDTO);
});
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,result, methodDescribe);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,monitorList, methodDescribe);
}
/**
@@ -432,6 +441,8 @@ public class CommTerminalController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, subGetBases, methodDescribe);
}
/**
* 用于返回pq 还是pms系统
* @author cdf

View File

@@ -16,9 +16,11 @@ import com.njcn.device.pms.pojo.dto.PwPmsMonitorDTO;
import com.njcn.device.pms.pojo.param.DistributionMonitorParam;
import com.njcn.device.pms.pojo.param.MonitorStatus;
import com.njcn.device.pms.pojo.param.TaiZhangDelParam;
import com.njcn.device.pms.pojo.param.pwUser.PwUserMonitorParam;
import com.njcn.device.pms.pojo.po.DistributionMonitor;
import com.njcn.device.pms.pojo.po.TerminalLog;
import com.njcn.device.pms.pojo.vo.DoubleUserVO;
import com.njcn.device.pms.pojo.vo.pwUser.PwUserMonitorDataVO;
import com.njcn.device.pms.service.majornetwork.IDistributionMonitorService;
import com.njcn.device.pms.service.majornetwork.ITerminalLogService;
import com.njcn.system.api.DicDataFeignClient;
@@ -304,6 +306,19 @@ public class PmsDistributionMonitorController extends BaseController {
}
/**
* 获取配网用户数据
*/
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getPwUserIds")
@ApiOperation("获取配网用户数据")
public HttpResult<List<PwUserMonitorDataVO>> getPwUserIds(@RequestBody @Validated PwUserMonitorParam pwUserMonitorParam) {
String methodDescribe = getMethodDescribe("getPwUserIds");
List<PwUserMonitorDataVO> pwUserMonitorDataVOList = iDistributionMonitorService.getPwUserIds(pwUserMonitorParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, pwUserMonitorDataVOList, methodDescribe);
}
}

View File

@@ -0,0 +1,50 @@
package com.njcn.device.pms.controller.ledgerManger;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.common.utils.LogUtil;
import com.njcn.device.pms.pojo.param.TerminalQueryParam;
import com.njcn.device.pms.pojo.param.pwUser.PwUserMonitorParam;
import com.njcn.device.pms.pojo.po.PmsTerminal;
import com.njcn.device.pms.pojo.vo.pwUser.PwUserMonitorDataVO;
import com.njcn.device.pms.service.ledgerManger.PwUserMonitorDataService;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
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;
@Slf4j
@RestController
@RequestMapping("pwUser")
@Api(tags = "配网用户侧数据")
@RequiredArgsConstructor
public class PwUserMonitorDataController extends BaseController {
private final PwUserMonitorDataService pwUserMonitorDataService;
/**
* 获取配网用户侧监测点数据完整性
*/
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("getMonitorIntegrity")
@ApiOperation("获取配网用户侧监测点数据完整性")
@ApiImplicitParam(name = "pwUserMonitorParam",value = "请求头",required = true)
public HttpResult<Page<PwUserMonitorDataVO>> getMonitorIntegrity(@RequestBody @Validated PwUserMonitorParam pwUserMonitorParam){
String methodDescribe = getMethodDescribe("getMonitorIntegrity");
Page<PwUserMonitorDataVO> page = pwUserMonitorDataService.pageIntegrityData(pwUserMonitorParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,page,methodDescribe);
}
}

View File

@@ -1,5 +1,6 @@
package com.njcn.device.pms.mapper.majornetwork;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.jeffreyning.mybatisplus.base.MppBaseMapper;
import com.njcn.common.pojo.param.StatisticsBizBaseParam;
@@ -14,6 +15,7 @@ import com.njcn.device.pms.pojo.po.PowerDistributionarea;
import com.njcn.device.pms.pojo.vo.DoubleUserVO;
import com.njcn.device.pms.pojo.vo.PmsPowerTreeMonitorVO;
import com.njcn.device.pms.pojo.vo.PmsSummaryStatisticsVO;
import com.njcn.device.pms.pojo.vo.pwUser.PwUserMonitorDataVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -122,4 +124,7 @@ public interface DistributionMonitorMapper extends MppBaseMapper<DistributionMon
* @return
*/
Boolean insertPmsDistributionArea(@Param("dic") String dic);
List<PwUserMonitorDataVO> getDistributionPage(@Param("ew")QueryWrapper<PwUserMonitorDataVO> ew);
}

View File

@@ -506,5 +506,17 @@
</foreach>
AND STATUS = 1
</select>
<select id="getDistributionPage" resultType="com.njcn.device.pms.pojo.vo.pwUser.PwUserMonitorDataVO">
SELECT
pms_power_client.id,pms_power_client.name,pms_power_client.Org_Name,pms_power_client.Operation_Name,
pms_power_client.If_Sensitive_User,pms_power_client.User_Type
FROM
pms_distribution_monitor,
pms_power_client
WHERE pms_distribution_monitor.Monitor_Id = pms_power_client.id
and ${ew.sqlSegment}
</select>
</mapper>

View File

@@ -5,7 +5,7 @@
<select id="getMonitorIntegrityData" resultType="RStatIntegrityD">
select * from
(select round(sum(real_time)/sum(due_time),3) as integrityData,
(select round(sum(real_time)/sum(due_time),4) as integrityData,
line_index as lineIndex
from r_stat_integrity_d
where time_id between #{monitorIntegrityDataDTO.searchBeginTime} and #{monitorIntegrityDataDTO.searchEndTime}
@@ -19,7 +19,17 @@
where
integrityData &lt; #{monitorIntegrityDataDTO.limitValue}
</if>
<if test="monitorIntegrityDataDTO.sortBy!=null and monitorIntegrityDataDTO.sortBy!=''">
order by integrityData
<choose>
<when test="monitorIntegrityDataDTO.orderBy == 'asc'">
asc
</when>
<otherwise>
desc
</otherwise>
</choose>
</if>
</select>
<select id="getMonitorRealTimeBeZero" resultType="com.njcn.device.pq.pojo.vo.RStatIntegrityVO">
SELECT

View File

@@ -94,7 +94,7 @@ public interface CommTerminalService {
List<String> getOneMonitorIds();
List<CommLineDetailDTO> getRunMonitorList();
List<String> getRunMonitorList();
LineDevGetDTO getMonitorDetail(String monitorId);

View File

@@ -0,0 +1,17 @@
package com.njcn.device.pms.service.ledgerManger;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njcn.device.pms.pojo.param.pwUser.PwUserMonitorParam;
import com.njcn.device.pms.pojo.vo.pwUser.PwUserMonitorDataVO;
import java.util.List;
public interface PwUserMonitorDataService {
/**
* 获取监测点数据完整性
*/
Page<PwUserMonitorDataVO> pageIntegrityData(PwUserMonitorParam pwUserMonitorParam);
}

View File

@@ -575,12 +575,24 @@ public class CommTerminalServiceImpl implements CommTerminalService {
}
@Override
public List<CommLineDetailDTO> getRunMonitorList() {
public List<String> getRunMonitorList() {
List<String> result = new ArrayList<>();
DictData dictData = dicDataFeignClient.getDicDataByNameAndTypeName(DicDataTypeEnum.LINE_STATE.getName(), DicDataEnum.RUN.getName()).getData();
if (Objects.isNull(dictData)) {
throw new BusinessException("监测点状态字典为空");
}
return null;
LambdaQueryWrapper<Monitor> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.select(Monitor::getId).eq(Monitor::getMonitorState, dictData.getId());
List<Monitor> monitorList = monitorMapper.selectList(lambdaQueryWrapper);
result.addAll(monitorList.stream().map(Monitor::getId).collect(Collectors.toList()));
//加入无线用户测点
DictData three = dicDataFeignClient.getDicDataByCodeAndType(DicDataEnum.THREE_LINE.getCode(),DicDataTypeEnum.LINE_SORT.getCode()).getData();
List<DistributionMonitor> distributionMonitorList = distributionMonitorMapper.selectList(new LambdaQueryWrapper<DistributionMonitor>().eq(DistributionMonitor::getMonitorSort,three.getId()).eq(DistributionMonitor::getStatus,DataStateEnum.ENABLE.getCode()));
if(CollectionUtil.isNotEmpty(distributionMonitorList)){
result.addAll(distributionMonitorList.stream().map(DistributionMonitor::getMonitorId).collect(Collectors.toList()));
}
return result;
}
/**

View File

@@ -0,0 +1,83 @@
package com.njcn.device.pms.service.ledgerManger.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njcn.device.pms.mapper.majornetwork.DistributionMonitorMapper;
import com.njcn.device.pms.mapper.majornetwork.RStatIntegrityDMapper;
import com.njcn.device.pms.pojo.dto.MonitorIntegrityDataDTO;
import com.njcn.device.pms.pojo.param.pwUser.PwUserMonitorParam;
import com.njcn.device.pms.pojo.po.DistributionMonitor;
import com.njcn.device.pms.pojo.vo.pwUser.PwUserMonitorDataVO;
import com.njcn.device.pms.service.ledgerManger.PwUserMonitorDataService;
import com.njcn.device.pms.service.majornetwork.IDistributionMonitorService;
import com.njcn.device.pq.pojo.po.RStatIntegrityD;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.enums.DicDataEnum;
import com.njcn.system.enums.DicDataTypeEnum;
import com.njcn.system.pojo.po.DictData;
import com.njcn.user.api.DeptFeignClient;
import com.njcn.web.factory.PageFactory;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class PwUserMonitorDataServiceImpl implements PwUserMonitorDataService {
private final DeptFeignClient deptFeignClient;
private final IDistributionMonitorService iDistributionMonitorService;
private final DicDataFeignClient dicDataFeignClient;
private final RStatIntegrityDMapper rStatIntegrityDMapper;
@Override
public Page<PwUserMonitorDataVO> pageIntegrityData(PwUserMonitorParam pwUserMonitorParam) {
Page<PwUserMonitorDataVO> pageResult = new Page<>(PageFactory.getPageNum(pwUserMonitorParam),PageFactory.getPageSize(pwUserMonitorParam));
List<PwUserMonitorDataVO> pwUserMonitorDataVOList = iDistributionMonitorService.getPwUserIds(pwUserMonitorParam);
if(CollUtil.isEmpty(pwUserMonitorDataVOList)){
return pageResult;
}
List<String> ids = pwUserMonitorDataVOList.stream().map(PwUserMonitorDataVO::getId).collect(Collectors.toList());
MonitorIntegrityDataDTO monitorIntegrityDataDTO = new MonitorIntegrityDataDTO();
monitorIntegrityDataDTO.setSearchBeginTime(pwUserMonitorParam.getSearchBeginTime());
monitorIntegrityDataDTO.setSearchEndTime(pwUserMonitorParam.getSearchEndTime());
if(Objects.nonNull(pwUserMonitorParam.getLimitValue())){
monitorIntegrityDataDTO.setLimitValue(pwUserMonitorParam.getLimitValue());
}
if(StrUtil.isNotBlank(pwUserMonitorParam.getSortBy())){
monitorIntegrityDataDTO.setSortBy(pwUserMonitorParam.getSortBy());
monitorIntegrityDataDTO.setOrderBy(pwUserMonitorParam.getOrderBy());
}
Page<RStatIntegrityD> page = rStatIntegrityDMapper.getMonitorIntegrityData(new Page<>(PageFactory.getPageNum(pwUserMonitorParam),PageFactory.getPageSize(pwUserMonitorParam)),monitorIntegrityDataDTO,ids);
if(CollUtil.isNotEmpty(page.getRecords())){
Map<String,PwUserMonitorDataVO> map = pwUserMonitorDataVOList.stream().collect(Collectors.toMap(PwUserMonitorDataVO::getId,Function.identity()));
List<PwUserMonitorDataVO> voList = new ArrayList<>();
page.getRecords().forEach(item->{
if(map.containsKey(item.getLineIndex())){
PwUserMonitorDataVO pwUserMonitorDataVO = map.get(item.getLineIndex());
pwUserMonitorDataVO.setIntegrityRate(item.getIntegrityData());
voList.add(pwUserMonitorDataVO);
}
});
pageResult.setRecords(voList);
pageResult.setTotal(page.getTotal());
}
return pageResult;
}
/**
* 超标情况
*/
}

View File

@@ -9,9 +9,11 @@ import com.njcn.device.pms.pojo.param.DistributionMonitorParam;
import com.njcn.device.pms.pojo.param.MonitorStatus;
import com.njcn.device.pms.pojo.param.PmsDeviceInfoParam;
import com.njcn.device.pms.pojo.param.TaiZhangDelParam;
import com.njcn.device.pms.pojo.param.pwUser.PwUserMonitorParam;
import com.njcn.device.pms.pojo.po.DistributionMonitor;
import com.njcn.device.pms.pojo.vo.DoubleUserVO;
import com.njcn.device.pms.pojo.vo.PmsSummaryStatisticsVO;
import com.njcn.device.pms.pojo.vo.pwUser.PwUserMonitorDataVO;
import java.util.List;
@@ -116,6 +118,13 @@ public interface IDistributionMonitorService extends IMppService<DistributionMon
*/
List<String> getBaseDisMonitorIds(List<String> orgIds,List<String> monitorSortIds);
/**
* 获取配网用户信息
*
*/
List<PwUserMonitorDataVO> getPwUserIds(PwUserMonitorParam pwUserMonitorParam);
/**
* 批量同步发电用户到配网表
* @return

View File

@@ -6,6 +6,7 @@ import com.njcn.common.pojo.dto.SimpleDTO;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenDTO;
import com.njcn.device.biz.pojo.dto.LineALLInfoDTO;
import com.njcn.device.biz.pojo.dto.LineDTO;
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
import com.njcn.device.biz.pojo.param.DeptGetLineParam;
import com.njcn.device.pms.pojo.dto.PmsMonitorBaseDTO;
import com.njcn.device.pms.pojo.dto.PmsMonitorDTO;
@@ -79,12 +80,18 @@ public interface IMonitorService extends IService<Monitor> {
Overlimit getOverLimitData(String id);
List<Overlimit> getOverLimitDataByIds(List<String> ids);
Page<Monitor> getAllMonitorPageList(TerminalQueryParam baseParam);
List<Monitor> getMonitorList(List<String> monitorIds);
List<LineDevGetDTO> getPmsCalMonitorList(List<String> monitorIds);
Page<Monitor> getMonitorPage(TerminalQueryParam baseParam);
List<Monitor> getMonitorListByParam(MonitorParam monitorParam);

View File

@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.TimeInterval;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -22,9 +23,11 @@ import com.njcn.device.pms.pojo.param.DistributionMonitorParam;
import com.njcn.device.pms.pojo.param.MonitorStatus;
import com.njcn.device.pms.pojo.param.PmsDeviceInfoParam;
import com.njcn.device.pms.pojo.param.TaiZhangDelParam;
import com.njcn.device.pms.pojo.param.pwUser.PwUserMonitorParam;
import com.njcn.device.pms.pojo.po.*;
import com.njcn.device.pms.pojo.vo.DoubleUserVO;
import com.njcn.device.pms.pojo.vo.PmsSummaryStatisticsVO;
import com.njcn.device.pms.pojo.vo.pwUser.PwUserMonitorDataVO;
import com.njcn.device.pms.service.majornetwork.IDistributionMonitorService;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.system.enums.DicDataEnum;
@@ -38,10 +41,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -464,6 +464,18 @@ public class DistributionMonitorServiceImpl extends MppServiceImpl<DistributionM
return distributionMonitorMapper.getBaseDisMonitorIds(orgIds,monitorSortIds);
}
@Override
public List<PwUserMonitorDataVO> getPwUserIds(PwUserMonitorParam pwUserMonitorParam) {
List<String> deptIds = deptFeignClient.getDepSonSelfCodetByDeptId(pwUserMonitorParam.getOrgId()).getData();
QueryWrapper<PwUserMonitorDataVO> queryWrapper = new QueryWrapper<>();
queryWrapper.in("pms_power_client.org_id", deptIds);
if (StrUtil.isNotBlank(pwUserMonitorParam.getUserName())) {
queryWrapper.eq("pms_power_client.name", pwUserMonitorParam.getUserName());
}
List<PwUserMonitorDataVO> pwUserMonitorDataVOList = this.distributionMonitorMapper.getDistributionPage(queryWrapper);
return pwUserMonitorDataVOList;
}
@Override
@Transactional(rollbackFor = Exception.class)

View File

@@ -22,6 +22,7 @@ import com.njcn.device.biz.enums.DeviceResponseEnum;
import com.njcn.device.biz.pojo.dto.DeptGetChildrenDTO;
import com.njcn.device.biz.pojo.dto.LineALLInfoDTO;
import com.njcn.device.biz.pojo.dto.LineDTO;
import com.njcn.device.biz.pojo.dto.LineDevGetDTO;
import com.njcn.device.biz.pojo.param.DeptGetLineParam;
import com.njcn.device.biz.pojo.po.DeviceBak;
import com.njcn.device.biz.utils.COverlimit;
@@ -109,6 +110,8 @@ public class MonitorServiceImpl extends ServiceImpl<MonitorMapper, Monitor> impl
private final DictTreeFeignClient dictTreeFeignClient;
private final ITractionStationService tractionStationService;
private final PowerClientMapper powerClientMapper;
private final DistributionMonitorMapper distributionMonitorMapper;
@Override
public List<PmsMonitorBaseDTO> getMonitorByCondition(List<String> deptIdList, PmsDeviceInfoParam pmsDeviceInfoParam) {
@@ -184,6 +187,11 @@ public class MonitorServiceImpl extends ServiceImpl<MonitorMapper, Monitor> impl
return overlimitMapper.selectById(id);
}
@Override
public List<Overlimit> getOverLimitDataByIds(List<String> ids) {
return overlimitMapper.selectBatchIds(ids);
}
@Override
public Page<Monitor> getAllMonitorPageList(TerminalQueryParam baseParam) {
LambdaQueryWrapper<Monitor> lambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -294,6 +302,33 @@ public class MonitorServiceImpl extends ServiceImpl<MonitorMapper, Monitor> impl
return monitorList;
}
@Override
public List<LineDevGetDTO> getPmsCalMonitorList(List<String> monitorIds) {
List<LineDevGetDTO> monitorList = new ArrayList<>();
LambdaQueryWrapper<Monitor> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.select(Monitor::getId,Monitor::getStatisticalInterval,Monitor::getTerminalId).eq(Monitor::getStatus, DataStateEnum.ENABLE.getCode());
List<Monitor> monitors = monitorMapper.selectList(lambdaQueryWrapper);
for(Monitor monitor : monitors){
LineDevGetDTO lineDevGetDTO = new LineDevGetDTO();
lineDevGetDTO.setDevId(monitor.getTerminalId());
lineDevGetDTO.setPointId(monitor.getId());
lineDevGetDTO.setInterval(monitor.getStatisticalInterval());
monitorList.add(lineDevGetDTO);
}
DictData dictData = dicDataFeignClient.getDicDataByNameAndTypeName(DicDataTypeEnum.LINE_SORT.getName(), DicDataEnum.THREE_LINE.getName()).getData();
List<DistributionMonitor> distributionMonitorList = distributionMonitorMapper.selectList(new LambdaQueryWrapper<DistributionMonitor>().in(DistributionMonitor::getMonitorId,monitorIds).eq(DistributionMonitor::getMonitorSort,dictData.getId()).eq(DistributionMonitor::getStatus,DataStateEnum.ENABLE.getCode()));
for(DistributionMonitor distributionMonitor : distributionMonitorList){
LineDevGetDTO lineDevGetDTO = new LineDevGetDTO();
lineDevGetDTO.setDevId(distributionMonitor.getTerminalId());
lineDevGetDTO.setPointId(distributionMonitor.getMonitorId());
lineDevGetDTO.setInterval(distributionMonitor.getStatisticalInterval());
monitorList.add(lineDevGetDTO);
}
return monitorList;
}
@Override
public Page<Monitor> getMonitorPage(TerminalQueryParam baseParam) {

View File

@@ -16,6 +16,7 @@ import com.njcn.device.biz.pojo.po.PqsDeviceUnit;
import com.njcn.device.pq.mapper.LineDetailMapper;
import com.njcn.device.pq.mapper.LineMapper;
import com.njcn.device.pq.service.CommTerminalService;
import com.njcn.device.pq.service.IOverLimitService;
import com.njcn.device.pq.service.IPqsDeviceUnitService;
import com.njcn.device.pq.service.LineService;
import com.njcn.web.controller.BaseController;
@@ -56,6 +57,8 @@ public class CommTerminalController extends BaseController {
private final IPqsDeviceUnitService iPqsDeviceUnitService;
private final IOverLimitService iOverLimitService;
/**
@@ -267,6 +270,16 @@ public class CommTerminalController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getOverLimitDataByIds")
@ApiOperation("根据监测点id集合获取越限数值")
@ApiImplicitParam(name = "ids", value = "监测点id集合", required = true)
public HttpResult<List<Overlimit>> getOverLimitDataByIds(@RequestBody List<String> ids) {
String methodDescribe = getMethodDescribe("getOverLimitDataByIds");
List<Overlimit> result = iOverLimitService.listByIds(ids);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
@PostMapping("/getLineBySubstationRelation")
@ApiOperation("获取变电站和监测点的关系")
@ApiImplicitParam(name = "devDataType", value = "数据类型0暂态系统1稳态系统", required = true)

View File

@@ -10,6 +10,7 @@ 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.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;
@@ -50,6 +51,7 @@ public class CommTerminalServiceImpl implements CommTerminalService {
/**
* 基础获取单位信息
* @author cdf

View File

@@ -0,0 +1,195 @@
package com.njcn.harmonic.pojo.vo;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class MonitorLimitRateVO {
/**
* 监测点ID合格率的变电站/装置/母线/线路序号
*/
private String lineId;
/**
* 数据类型,A表示A相B表示B相,C表示C相,M表示ABC三项总和T表示总
*/
private String phasicType;
private String name;
private String orgName;
private String operationName;
private Integer ifSensitiveUser;
private String userType;
/**
* 总计算次数
*/
private Integer allTime;
/**
* 闪变越限次数
*/
private BigDecimal flickerOvertime;
/**
* 闪变总计算次数
*/
private BigDecimal flickerAllTime;
/**
* 频率偏差越限次数
*/
private BigDecimal freqDevOvertime;
/**
* 电压偏差越限次数
*/
private BigDecimal voltageDevOvertime;
/**
* 三相电压不平衡度越限次数
*/
private BigDecimal ubalanceOvertime;
/**
* 电压谐波畸变率越限次数
*/
private BigDecimal uaberranceOvertime;
/**
* 负序电流限值次数
*/
private BigDecimal iNegOvertime;
/**
* 2次电压谐波含有率越限次数
*/
private BigDecimal uharm2Overtime;
/**
* 3次电压谐波含有率越限次数
*/
private BigDecimal uharm3Overtime;
/**
* 4次电压谐波含有率越限次数
*/
private BigDecimal uharm4Overtime;
/**
* 5次电压谐波含有率越限次数
*/
private BigDecimal uharm5Overtime;
/**
* 6次电压谐波含有率越限次数
*/
private BigDecimal uharm6Overtime;
/**
* 7次电压谐波含有率越限次数
*/
private BigDecimal uharm7Overtime;
/**
* 8次电压谐波含有率越限次数
*/
private BigDecimal uharm8Overtime;
/**
* 9次电压谐波含有率越限次数
*/
private BigDecimal uharm9Overtime;
/**
* 10次电压谐波含有率越限次数
*/
private BigDecimal uharm10Overtime;
/**
* 11次电压谐波含有率越限次数
*/
private BigDecimal uharm11Overtime;
/**
* 12次电压谐波含有率越限次数
*/
private BigDecimal uharm12Overtime;
/**
* 13次电压谐波含有率越限次数
*/
private BigDecimal uharm13Overtime;
/**
* 14次电压谐波含有率越限次数
*/
private BigDecimal uharm14Overtime;
/**
* 15次电压谐波含有率越限次数
*/
private BigDecimal uharm15Overtime;
/**
* 16次电压谐波含有率越限次数
*/
private BigDecimal uharm16Overtime;
/**
* 17次电压谐波含有率越限次数
*/
private BigDecimal uharm17Overtime;
/**
* 18次电压谐波含有率越限次数
*/
private BigDecimal uharm18Overtime;
/**
* 19次电压谐波含有率越限次数
*/
private BigDecimal uharm19Overtime;
/**
* 20次电压谐波含有率越限次数
*/
private BigDecimal uharm20Overtime;
/**
* 21次电压谐波含有率越限次数
*/
private BigDecimal uharm21Overtime;
/**
* 22次电压谐波含有率越限次数
*/
private BigDecimal uharm22Overtime;
/**
* 23次电压谐波含有率越限次数
*/
private BigDecimal uharm23Overtime;
/**
* 24次电压谐波含有率越限次数
*/
private BigDecimal uharm24Overtime;
/**
* 25次电压谐波含有率越限次数
*/
private BigDecimal uharm25Overtime;
}

View File

@@ -0,0 +1,20 @@
package com.njcn.harmonic.controller.distribution;
import com.njcn.harmonic.service.majornetwork.RStatLimitService;
import io.swagger.annotations.Api;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 配网用户侧指标越限
*/
@RestController
@RequestMapping("/pwLimit")
@Slf4j
@Api(tags = "配网用户侧指标越限")
@RequiredArgsConstructor
public class PwUserLimitController {
private final RStatLimitService rStatLimitService;
}

View File

@@ -1,13 +1,16 @@
package com.njcn.harmonic.controller.majornetwork;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.pms.pojo.param.pwUser.PwUserMonitorParam;
import com.njcn.harmonic.pojo.param.RStatLimitQueryParam;
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
import com.njcn.harmonic.pojo.po.day.RStatLimitTargetDPO;
import com.njcn.harmonic.pojo.vo.MonitorLimitRateVO;
import com.njcn.harmonic.pojo.vo.RStatLimitTargetVO;
import com.njcn.harmonic.service.majornetwork.RStatLimitService;
import com.njcn.web.controller.BaseController;
@@ -16,6 +19,7 @@ import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@@ -78,4 +82,14 @@ public class RStatLimitController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
@PostMapping("/pwMonitorLimitData")
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@ApiOperation("获取配网指标超标详情")
public HttpResult<Page<MonitorLimitRateVO>> pwMonitorLimitData(@RequestBody @Validated PwUserMonitorParam pwUserMonitorParam){
String methodDescribe = getMethodDescribe("pwMonitorLimitData");
Page<MonitorLimitRateVO> page = rStatLimitService.pwMonitorLimitData(pwUserMonitorParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, page, methodDescribe);
}
}

View File

@@ -1,9 +1,13 @@
package com.njcn.harmonic.service.majornetwork;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njcn.device.pms.pojo.param.pwUser.PwUserMonitorParam;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.vo.GridDiagramVO;
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
import com.njcn.harmonic.pojo.po.day.RStatLimitTargetDPO;
import com.njcn.harmonic.pojo.vo.MonitorLimitRateVO;
import com.njcn.harmonic.pojo.vo.RStatLimitRateDVO;
import com.njcn.harmonic.pojo.vo.RStatLimitTargetVO;
import org.springframework.web.bind.annotation.RequestParam;
@@ -46,4 +50,8 @@ public interface RStatLimitService {
List<GridDiagramVO.RunData> getGridDiagramRunData(DeviceInfoParam.BusinessParam param);
List<RStatLimitRateDPO> getOverData(String lineId, String startTime, String endTime, Integer type);
Page<MonitorLimitRateVO> pwMonitorLimitData(PwUserMonitorParam pwUserMonitorParam);
}

View File

@@ -1,5 +1,6 @@
package com.njcn.harmonic.service.majornetwork.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.func.Func;
@@ -8,10 +9,14 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njcn.common.pojo.dto.SimpleDTO;
import com.njcn.device.biz.commApi.CommTerminalGeneralClient;
import com.njcn.device.biz.pojo.dto.DeptGetSubStationDTO;
import com.njcn.device.biz.pojo.param.DeptGetLineParam;
import com.njcn.device.pms.api.DistributionMonitorClient;
import com.njcn.device.pms.pojo.param.pwUser.PwUserMonitorParam;
import com.njcn.device.pms.pojo.vo.pwUser.PwUserMonitorDataVO;
import com.njcn.device.pq.api.GeneralDeviceInfoClient;
import com.njcn.device.pq.api.LineIntegrityClient;
import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO;
@@ -26,13 +31,20 @@ import com.njcn.harmonic.pojo.param.StatSubstationBizBaseParam;
import com.njcn.harmonic.pojo.po.RMpVThd;
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
import com.njcn.harmonic.pojo.po.day.RStatLimitTargetDPO;
import com.njcn.harmonic.pojo.vo.MonitorLimitRateVO;
import com.njcn.harmonic.pojo.vo.RStatLimitTargetVO;
import com.njcn.harmonic.service.IRStatLimitTargetDService;
import com.njcn.harmonic.service.majornetwork.RStatLimitService;
import com.njcn.prepare.harmonic.api.line.LimitrateFeignClient;
import com.njcn.system.pojo.enums.StatisticsEnum;
import com.njcn.web.factory.PageFactory;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.concurrent.atomic.AtomicLong;
import java.util.function.Function;
@@ -55,6 +67,8 @@ public class RStatLimitServiceImpl implements RStatLimitService {
private final IRStatLimitTargetDService targetDService;
private final CommTerminalGeneralClient commTerminalGeneralClient;
private final DistributionMonitorClient distributionMonitorClient;
private final LimitrateFeignClient limitrateFeignClient;
@Override
@@ -399,6 +413,150 @@ public class RStatLimitServiceImpl implements RStatLimitService {
return rStatLimitRateDMapper.selectList(queryWrapper);
}
@Override
public Page<MonitorLimitRateVO> pwMonitorLimitData(PwUserMonitorParam pwUserMonitorParam) {
Page<MonitorLimitRateVO> pageResult = new Page<>(PageFactory.getPageNum(pwUserMonitorParam),PageFactory.getPageSize(pwUserMonitorParam));
List<PwUserMonitorDataVO> pwUserMonitorDataVOList = distributionMonitorClient.getPwUserIds(pwUserMonitorParam).getData();
if(CollUtil.isEmpty(pwUserMonitorDataVOList)){
return pageResult;
}
List<String> ids = pwUserMonitorDataVOList.stream().map(PwUserMonitorDataVO::getId).collect(Collectors.toList());
QueryWrapper<RStatLimitRateDPO> queryWrapper = new QueryWrapper<>();
StringBuilder stringBuilder = new StringBuilder();
for(int i = 2;i<26;i++){
if(i == 25){
stringBuilder.append("sum(uharm_").append(i).append("_overtime) as uharm_").append(i).append("_overtime ");
}else {
stringBuilder.append("sum(uharm_").append(i).append("_overtime) as uharm_").append(i).append("_overtime").append(",");
}
}
queryWrapper.select("my_index lineId ,sum(all_time) all_time,sum(flicker_all_time) flicker_all_time,sum(freq_dev_overtime) freq_dev_overtime,sum(voltage_dev_overtime) voltage_dev_overtime,sum(ubalance_overtime) ubalance_overtime,sum(flicker_overtime) flicker_overtime,sum(uaberrance_overtime) uaberrance_overtime",stringBuilder.toString())
.in("my_index",ids).between("time_id",pwUserMonitorParam.getSearchBeginTime(),pwUserMonitorParam.getSearchEndTime()).eq("phasic_type","T").groupBy("my_index");
if(StrUtil.isNotBlank(pwUserMonitorParam.getOrderBy())){
String sortBy = strToSql(pwUserMonitorParam.getSortBy());
if(pwUserMonitorParam.getOrderBy().equals("asc")){
queryWrapper.orderBy(true,true,sortBy);
}else {
queryWrapper.orderBy(true,false,sortBy);
}
}
Page<RStatLimitRateDPO> temPage = rStatLimitRateDMapper.selectPage(new Page<>(PageFactory.getPageNum(pwUserMonitorParam),PageFactory.getPageSize(pwUserMonitorParam)),queryWrapper);
pageResult.setTotal(temPage.getTotal());
if(CollUtil.isNotEmpty(temPage.getRecords())){
Map<String,PwUserMonitorDataVO> map = pwUserMonitorDataVOList.stream().collect(Collectors.toMap(PwUserMonitorDataVO::getId,Function.identity()));
List<MonitorLimitRateVO> resultList = new ArrayList<>();
for(RStatLimitRateDPO item : temPage.getRecords()){
MonitorLimitRateVO monitorLimitRateVO = new MonitorLimitRateVO();
PwUserMonitorDataVO pwUserMonitorDataVO = map.get(item.getLineId());
BeanUtil.copyProperties(pwUserMonitorDataVO,monitorLimitRateVO);
if(item.getAllTime() == 0){
monitorLimitRateVO.setFlickerOvertime(BigDecimal.valueOf(3.14159));
monitorLimitRateVO.setFreqDevOvertime(BigDecimal.valueOf(3.14159));
monitorLimitRateVO.setUaberranceOvertime(BigDecimal.valueOf(3.14159));
monitorLimitRateVO.setUbalanceOvertime(BigDecimal.valueOf(3.14159));
monitorLimitRateVO.setVoltageDevOvertime(BigDecimal.valueOf(3.14159));
}else {
monitorLimitRateVO.setFlickerOvertime(BigDecimal.valueOf((double) item.getFlickerOvertime()/item.getFlickerAllTime()*100).setScale(2, RoundingMode.HALF_UP));
monitorLimitRateVO.setFreqDevOvertime(BigDecimal.valueOf((double) item.getFreqDevOvertime()/item.getAllTime()*100).setScale(2, RoundingMode.HALF_UP));
monitorLimitRateVO.setUaberranceOvertime(BigDecimal.valueOf((double) item.getUaberranceOvertime()/item.getAllTime()*100).setScale(2, RoundingMode.HALF_UP));
monitorLimitRateVO.setUbalanceOvertime(BigDecimal.valueOf((double) item.getUbalanceOvertime()/item.getAllTime()*100).setScale(2, RoundingMode.HALF_UP));
monitorLimitRateVO.setVoltageDevOvertime(BigDecimal.valueOf((double) item.getVoltageDevOvertime()/item.getAllTime()*100).setScale(2, RoundingMode.HALF_UP));
}
setUharmOvertimeRatios(item,monitorLimitRateVO);
resultList.add(monitorLimitRateVO);
}
pageResult.setRecords(resultList);
}
return pageResult;
}
public String strToSql(String originalString){
StringBuilder modifiedStringBuilder = new StringBuilder();
// 标记是否需要在下一个字符前添加下划线
boolean needUnderscore = false;
for (int i = 0; i < originalString.length(); i++) {
char currentChar = originalString.charAt(i);
// 检查当前字符是否为大写字母
if (Character.isUpperCase(currentChar)) {
// 如果不是字符串的第一个字符,或者即使是第一个字符但也需要下划线(实际上第一个大写不需要)
// 但由于逻辑简化我们只在需要时设置needUnderscore
needUnderscore = true;
} else if (Character.isDigit(currentChar)) {
// 如果当前字符是数字
// 检查下一个字符(如果存在)是否也是数字
if (i + 1 < originalString.length() && Character.isDigit(originalString.charAt(i + 1))) {
// 当前字符和下一个字符都是数字,但我们只在数字序列的开头添加下划线
// 如果这不是字符串的开头,并且之前没有添加过下划线(即不是在前一个数字后)
if (i > 0 && !Character.isDigit(originalString.charAt(i - 1))) {
needUnderscore = true;
}
// 对于数字序列的其余部分我们不需要再设置needUnderscore为true
} else {
// 当前字符是单个数字,且不是字符串的开头,则可能需要下划线
if (i > 0 && !Character.isDigit(originalString.charAt(i - 1))) {
needUnderscore = true;
}
}
} else {
// 重置needUnderscore因为当前字符既不是大写也不是数字
// 但注意如果当前字符后面紧跟大写或数字序列needUnderscore会在后续迭代中被设置
needUnderscore = false;
}
// 如果需要下划线且不是字符串的开头,则添加下划线
if (needUnderscore && i > 0) {
modifiedStringBuilder.append('_');
needUnderscore = false; // 重置标记,因为我们已经添加了下划线
}
// 将当前字符添加到StringBuilder中
modifiedStringBuilder.append(currentChar);
}
return modifiedStringBuilder.toString();
}
//赋值2到25次谐波
public void setUharmOvertimeRatios(final RStatLimitRateDPO item, final MonitorLimitRateVO monitorLimitRateVO) {
// 使用一个循环来避免重复代码
for (int i = 2; i <= 25; i++) {
// 使用反射来动态调用方法如果方法名遵循getUharmXOvertime()模式)
String methodName = "getUharm" + i + "Overtime";
String setterName = "setUharm" + i + "Overtime";
// 假设这些方法都存在且返回long或int类型
long uharmOvertime = 0;
try {
Method method = item.getClass().getMethod(methodName);
uharmOvertime = (int) method.invoke(item);
long allTime = item.getAllTime();
if (allTime == 0) {
// 防止除以0的错误
monitorLimitRateVO.getClass().getMethod(setterName, BigDecimal.class)
.invoke(monitorLimitRateVO, BigDecimal.valueOf(3.14159));
} else {
BigDecimal ratio = BigDecimal.valueOf((double) uharmOvertime / allTime*100)
.setScale(2, RoundingMode.HALF_UP);
monitorLimitRateVO.getClass().getMethod(setterName, BigDecimal.class)
.invoke(monitorLimitRateVO, ratio);
}
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
// 处理异常,例如记录日志或抛出运行时异常
throw new RuntimeException("Error setting UharmOvertime ratio", e);
}
}
}
private void onLineAndIntegrity(List<String> lineIds, List<RStatIntegrityD> onIntegrityByIds, List<String> devIds, List<RStatOnlinerateVO> onlineRateByDevIds,List<RStatLimitTargetDPO> limitTargetList, GridDiagramVO.LineData lineData) {
//监测完整率
List<RStatIntegrityD> integrityDS = onIntegrityByIds.stream().filter(x -> lineIds.contains(x.getLineIndex())).collect(Collectors.toList());

View File

@@ -73,11 +73,12 @@ public class LimitRateServiceImpl extends MppServiceImpl<LimitRatePOMapper, Limi
//获取时间
String startTime = this.getTime(calculatedParam.getDataDate(),step,true);
String endTime = this.getTime(calculatedParam.getDataDate(),step,false);
//获取所有监测点的限值
List<Overlimit> overLimitList = commTerminalGeneralClient.getAllLineOverLimit().getData();
Map<String,Overlimit> overLimitMap = overLimitList.stream().collect(Collectors.toMap(Overlimit::getId, Function.identity()));
//监测点集合
List<String> lineIds = calculatedParam.getIdList();
//获取所有监测点的限值
List<Overlimit> overLimitList = commTerminalGeneralClient.getOverLimitDataByIds(lineIds).getData();
Map<String,Overlimit> overLimitMap = overLimitList.stream().collect(Collectors.toMap(Overlimit::getId, Function.identity()));
//以尺寸100分片,查询数据
List<List<String>> pendingIds = ListUtils.partition(lineIds,100);
for (List<String> pendingId : pendingIds) {

View File

@@ -172,6 +172,42 @@ public class ConfigController extends BaseController {
@OperateInfo(info = LogEnum.SYSTEM_COMMON)
@GetMapping("/系统扩容操作")
@ApiOperation("系统扩容操作")
public HttpResult addMemory(@RequestParam("size")Integer sizeInMB) {
String methodDescribe = getMethodDescribe("addMemory");
try {
// 将MB转换为字节
long sizeInBytes = sizeInMB * 1024 * 1024;
// 分配一个足够大的byte数组
byte[] memory = new byte[(int) sizeInBytes];
// 为了确保JVM不会优化掉这个内存分配因为它可能认为这个变量未使用
// 我们可以对数组进行简单的操作,比如填充数据
for (int i = 0; i < memory.length; i++) {
memory[i] = (byte) (i % 256); // 简单的数据填充
}
// 实际上,你可能不需要对数组进行填充,因为仅仅是分配就足以占用内存。
// 但填充可以确保内存被实际使用而不是被JVM优化掉。
// 注意这里有一个int类型的限制因为数组长度是int类型。
// 如果你需要分配超过Integer.MAX_VALUE字节的内存你将需要找到其他方法比如使用多个数组
System.out.println("Allocated approximately " + sizeInMB + " MB of memory.");
// 为了让效果更明显,你可以尝试保持这个引用,或者让这个方法运行足够长的时间
// 以便你可以观察JVM的行为比如使用jconsole或jvisualvm等工具
// 注意:在实际应用中,你应该在不再需要时释放这个引用,以避免内存泄漏。
} catch (OutOfMemoryError e) {
System.err.println("Failed to allocate memory: " + e.getMessage());
}
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
}