16 Commits

Author SHA1 Message Date
wr
054d5534a8 微调 2025-12-10 16:25:04 +08:00
wr
c03a516931 Merge remote-tracking branch 'origin/main' 2025-12-10 16:22:42 +08:00
wr
0fdc3edb89 1.解决变电站数量不统一问题
2.替换最新污染值
3.解决终端数量不一致问题
2025-12-10 16:19:35 +08:00
a730ad61b1 调整白名单 2025-12-10 15:32:32 +08:00
9b758dc7c9 增加swagger配置 2025-12-10 14:56:01 +08:00
a74dd460d1 Merge remote-tracking branch 'origin/main' 2025-12-10 14:55:48 +08:00
2708aa8b81 增加swagger配置 2025-12-10 14:55:31 +08:00
wr
6d833678a6 微调 2025-12-08 15:08:21 +08:00
xy
be264acd79 功能优化 2025-12-08 15:07:48 +08:00
wr
186d46752c Merge remote-tracking branch 'origin/main' 2025-12-05 15:34:12 +08:00
wr
e03478eeec 终端运行评价,异常数据率 2025-12-05 15:25:10 +08:00
贾同学
0c1bb606d6 feat(user): 支持组件时间标识集合字段 2025-12-03 15:16:31 +08:00
wr
42b619fa56 微调 2025-12-02 16:42:46 +08:00
wr
f0894ca0ed 微调 2025-12-02 16:05:13 +08:00
wr
8a958fa34c Merge remote-tracking branch 'origin/main' 2025-12-02 12:32:21 +08:00
wr
b4e5d0c638 微调 2025-12-01 09:12:29 +08:00
74 changed files with 1818 additions and 591 deletions

View File

@@ -45,6 +45,9 @@ public class Knife4jSwaggerConfig {
@Value("${microservice.gateway.url}")
private String gatewayUrl;
@Value("${swagger.enable:true}")
private Boolean swaggerEnable;
/**
* swagger通用配置
*/
@@ -96,7 +99,7 @@ public class Knife4jSwaggerConfig {
//securyContext
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.enable(true)
.enable(swaggerEnable)
.select()
// 指定添加swagger注解的方法
// .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))

View File

@@ -13,6 +13,8 @@ public class PollutionLineInfoDTO {
/**
* 所属变电站
*/
private String subStationId;
private String subStationName;
/**

View File

@@ -32,7 +32,6 @@ public class DeptGetLineParam {
private Boolean monitorStateRunning=true;
@ApiModelProperty(name = "isUpToGrid",value = "0.非送国网 1.需要送国网的")
private Integer isUpToGrid;
/**
* 0-电网侧

View File

@@ -9,7 +9,7 @@ import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.device.pq.pojo.po.TopMsgPO;
import com.njcn.device.pq.pojo.vo.DevDetail;
import com.njcn.device.pq.pojo.vo.RStatOnlinerateVO;
import com.njcn.device.pq.pojo.vo.RStatOnlineRateVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@@ -70,6 +70,16 @@ public interface GeneralDeviceInfoClient {
HttpResult<List<GeneralDeviceDTO>> getPracticalRunDeviceInfoAsSubstation(@RequestBody DeviceInfoParam deviceInfoParam);
/**
* 获取变电站分类的所有终端综合信息
*
* @param deviceInfoParam 查询终端条件
* @return 获取变电站分类的所有终端综合信息
*/
@PostMapping("/getPracticalAllDeviceInfoAsSubstation")
HttpResult<List<GeneralDeviceDTO>> getPracticalAllDeviceInfoAsSubstation(@RequestBody DeviceInfoParam deviceInfoParam);
/**
* 获取实际运行终端综合信息
*
@@ -111,7 +121,7 @@ public interface GeneralDeviceInfoClient {
* @return
*/
@PostMapping("/getOnlineRateByDevIds")
HttpResult<List<RStatOnlinerateVO>> getOnlineRateByDevIds(@RequestBody OnlineRateParam param);
HttpResult<List<RStatOnlineRateVO>> getOnlineRateByDevIds(@RequestBody OnlineRateParam param);
/**
*根据单位获取投运监测点(双系统)

View File

@@ -10,7 +10,7 @@ import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.device.pq.pojo.po.TopMsgPO;
import com.njcn.device.pq.pojo.vo.DevDetail;
import com.njcn.device.pq.pojo.vo.RStatOnlinerateVO;
import com.njcn.device.pq.pojo.vo.RStatOnlineRateVO;
import com.njcn.device.biz.utils.DeviceEnumUtil;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
@@ -59,6 +59,12 @@ public class GeneralDeviceInfoClientFallbackFactory implements FallbackFactory<G
throw new BusinessException(finalExceptionEnum);
}
@Override
public HttpResult<List<GeneralDeviceDTO>> getPracticalAllDeviceInfoAsSubstation(DeviceInfoParam deviceInfoParam) {
log.error("{}异常,降级处理,异常为:{}", "获取变电站分类的所有终端综合信息", throwable.toString());
throw new BusinessException(finalExceptionEnum);
}
@Override
public HttpResult<List<GeneralDeviceDTO>> getPracticalRunDeviceInfo(DeviceInfoParam deviceInfoParam) {
log.error("{}异常,降级处理,异常为:{}", "获取实际运行终端综合信息", throwable.toString());
@@ -84,7 +90,7 @@ public class GeneralDeviceInfoClientFallbackFactory implements FallbackFactory<G
}
@Override
public HttpResult<List<RStatOnlinerateVO>> getOnlineRateByDevIds(OnlineRateParam param) {
public HttpResult<List<RStatOnlineRateVO>> getOnlineRateByDevIds(OnlineRateParam param) {
log.error("{}异常,降级处理,异常为:{}", "获取终端在线率(谐波专用)", throwable.toString());
throw new BusinessException(finalExceptionEnum);
}

View File

@@ -105,6 +105,14 @@ public class DeviceInfoParam implements Serializable {
@Range(min = 0, max = 2, message = "监测点运行状态" + ValidMessage.PARAM_FORMAT_ERROR)
private Integer lineRunFlag;
@ApiModelProperty("0按照监测点搜索 1按照装置搜索")
private Integer lineOrDevice;
/**
* 搜索值
*/
@ApiModelProperty("搜索值")
private String searchValue;
/**
* 默认全部监测点
*
@@ -207,6 +215,9 @@ public class DeviceInfoParam implements Serializable {
@ApiModelProperty("是否是冀北电网一张图树 0:否 1:是")
private Integer type = 0;
@ApiModelProperty("指标")
private List<String> dicData;
}
public Boolean isUserLedger() {

View File

@@ -13,7 +13,6 @@ import java.util.List;
* @createTime: 2023-04-03
*/
@Data
@ApiModel
public class OnlineRateParam {
@ApiModelProperty(name = "ids", value = "设备id")
@@ -27,4 +26,10 @@ public class OnlineRateParam {
@ApiModelProperty(name = "type", value = "区分类型0topid搜索 1devid搜索")
private Integer type;
@Data
public static class Info extends OnlineRateParam {
@ApiModelProperty(name = "dicData", value = "字典id")
private List<String> dicData;
}
}

View File

@@ -0,0 +1,68 @@
package com.njcn.device.pq.pojo.po;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDate;
/**
* <p>
*
* </p>
*
* @author xy
* @since 2025-02-17
*/
@Getter
@Setter
@TableName("pq_data_verify_count")
public class PqDataVerifyCount implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 监测点id
*/
@MppMultiId
@TableField(value = "line_id")
private String lineId;
/**
* 数据时间
*/
@MppMultiId
@TableField(value = "time_id")
@JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8")
private LocalDate time;
/**
* 异常指标数量
*/
@TableField(value = "total")
private Integer total ;
/**
* 总指标数量
*/
@TableField(value = "total_all")
private Integer totalAll ;
/**
* 异常短时闪变数量
*/
@TableField(value = "flicker")
private Integer flicker ;
/**
* 短时闪变总数量
*/
@TableField(value = "flicker_all")
private Integer flickerAll;
}

View File

@@ -0,0 +1,165 @@
package com.njcn.device.pq.pojo.po.jb;
import com.baomidou.mybatisplus.annotation.TableName;
import com.njcn.db.bo.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
*
* </p>
*
* @author hongawen
* @since 2022-10-14
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("distribution_area")
public class DistributionArea extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 台区编号
*/
private String id;
/**
* 台区名称
*/
private String name;
/**
* 组织机构名称
*/
private String orgName;
/**
* 组织机构ID(外键)
*/
private String orgId;
/**
* 运维单位名称
*/
private String operationName;
/**
* 运维单位ID(外键)
*/
private String operationId;
/**
* 变电站名称
*/
private String powerrName;
/**
* 电站ID(外键)
*/
private String powerStationId;
/**
* 监测线路名称
*/
private String lineName;
/**
* 所属线路ID(外键)
*/
private String lineId;
/**
* 电压等级
*/
private String voltageLevel;
/**
* 配变容量
*/
private Float pCapacity;
/**
* 地区特征(字典)
*/
private String regionalism;
/**
* 设备地区特征(字典)
*/
private String devRegionalism;
/**
* 是否农网0-否1
*/
private Integer ifRuralPowerGrid;
/**
* 使用性质
*/
private String natureOfUse;
/**
* 供电半径
*/
private Float powerSupplyRadius;
/**
* 供电线路总长度
*/
private Float lineLength;
/**
* 运行状态(字典)
*/
private String state;
/**
* 分布式光伏用户数
*/
private Integer distributedPhotovoltaicNum;
/**
* 分布式光伏总装机容量
*/
private Float photovoltaicCapacity;
/**
* 是否有电动汽车接入0-否1
*/
private Integer ifBevAp;
/**
* 接入负荷类型(字典)
*/
private String apLoadType;
/**
* 是否是上送国网监测点,0-否 1-是
*/
private Integer isUpToGrid;
/**
* 经度
*/
private Double longitude;
/**
* 维度
*/
private Double latitude;
/**
* 数据状态0-删除1-正常;
*/
private Integer status;
/**
* 数据状态0-手动录入1-gw台账录入
*/
private Integer inputStatus;
}

View File

@@ -0,0 +1,128 @@
package com.njcn.device.pq.pojo.po.jb;
import com.baomidou.mybatisplus.annotation.TableName;
import com.njcn.db.bo.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDate;
/**
* <p>
* 发电用户
* </p>
*
* @author hongawen
* @since 2022-10-14
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("power_generation_user")
public class GenerationUser extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 用户编号
*/
private String id;
/**
* 用户名称
*/
private String name;
/**
* 组织机构名称
*/
private String orgName;
/**
* 组织机构ID(外键)
*/
private String orgId;
/**
* 运维单位名称
*/
private String operationName;
/**
* 运维单位ID(外键)
*/
private String operationId;
/**
* 电源类别(字典)
*/
private String powerCategory;
/**
* 电站类型(字典)
*/
private String powerStationType;
/**
* 发电方式(字典)
*/
private String powerGenerationMode;
/**
* 并网电压等级(字典)
*/
private String voltageLevel;
/**
* 总装机容量
*/
private Float sourceCapacity;
/**
* 并网日期
*/
private LocalDate connectionDate;
/**
* 能源消纳方式(字典)
*/
private String connectionMode;
/**
* 客户状态(字典)
*/
private String gcStat;
/**
* 供电变电站(外键)
*/
private String powerStationId;
/**
* 供电线路(外键)
*/
private String lineId;
/**
* 供电台区(外键)
*/
private String platformId;
/**
* 用户标签
*/
private String userTag;
/**
* 是否是上送国网监测点,0-否 1-是
*/
private Integer isUpToGrid;
/**
* 数据状态0-删除1-正常;
*/
private Integer status;
}

View File

@@ -5,6 +5,7 @@ import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
/**
* 监测点详细信息
@@ -131,4 +132,17 @@ public class AreaLineInfoVO implements Serializable {
@ApiModelProperty(name = "objId",value = "对象id")
private String objId;
private Double vHarmonicValue; ;
private List<User> userList;
@Data
public static class User{
private String id;
private String projectName;
private String stationId;
private String lineId;
private String city;
}
}

View File

@@ -1,8 +1,8 @@
package com.njcn.device.pq.pojo.vo;
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
@@ -26,6 +26,6 @@ public class RStatIntegrityVO {
private Integer realTime;
private Double integrityRate;
private BigDecimal integrityRate;
}

View File

@@ -2,6 +2,7 @@ package com.njcn.device.pq.pojo.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
@@ -11,7 +12,7 @@ import java.time.LocalDateTime;
* @createTime: 2023-04-03
*/
@Data
public class RStatOnlinerateVO {
public class RStatOnlineRateVO {
private static final long serialVersionUID = 1L;
private LocalDateTime timeId;
@@ -22,5 +23,5 @@ public class RStatOnlinerateVO {
private Integer offlineMin;
private Float onlineRate;
private BigDecimal onlineRate;
}

View File

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@@ -23,7 +24,7 @@ public class DeviceOnlineRate {
private Integer belowNum;
@ApiModelProperty("总终端在线率")
private String totalOnlineRate;
private BigDecimal totalOnlineRate;
@ApiModelProperty("统计信息")
List<CitDetail> citDetailList;
@@ -41,7 +42,7 @@ public class DeviceOnlineRate {
private Integer citBelowNum;
@ApiModelProperty("总终端在线率")
private String citTotalOnlineRate;
private BigDecimal citTotalOnlineRate;
@ApiModelProperty("统计信息")
List<?> detailList;
@@ -82,7 +83,7 @@ public class DeviceOnlineRate {
private LocalDateTime timeID;
@ApiModelProperty("在线率")
private String onlineRate;
private BigDecimal onlineRate;
}
@Data
@@ -123,7 +124,7 @@ public class DeviceOnlineRate {
private LocalDateTime latestTime;
@ApiModelProperty("数据完整性")
private Double integrity;
private BigDecimal integrity;
}
}

View File

@@ -81,6 +81,7 @@ public class DeviceRunEvaluateController extends BaseController {
@ApiOperation("终端评价列表(冀北)")
public HttpResult<List<DeviceRunEvaluateVO.Detail>> getRunEvaluateInfo(@RequestBody DeviceInfoParam.BusinessParam businessParam) {
String methodDescribe = getMethodDescribe("getRunEvaluateInfo");
businessParam.setLineOrDevice(1);
List<DeviceRunEvaluateVO.Detail> runEvaluate = deviceRunEvaluateService.getRunEvaluate(businessParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, runEvaluate, methodDescribe);
}

View File

@@ -136,6 +136,22 @@ public class GeneralDeviceInfoController extends BaseController {
}
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getPracticalAllDeviceInfoAsSubstation")
@ApiOperation("获取按变电站分类的所有终端综合信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "deviceInfoParam", value = "查询终端条件", required = true)
})
public HttpResult<List<GeneralDeviceDTO>> getPracticalAllDeviceInfoAsSubstation(@RequestBody @Validated DeviceInfoParam deviceInfoParam) {
String methodDescribe = getMethodDescribe("getPracticalAllDeviceInfoAsSubstation");
List<GeneralDeviceDTO> substationDeviceInfos = generalDeviceService.getDeviceInfoAsSubstation(deviceInfoParam, null, Stream.of(1).collect(Collectors.toList()));
if (CollectionUtil.isEmpty(substationDeviceInfos)) {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, new ArrayList<>(), methodDescribe);
} else {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, substationDeviceInfos, methodDescribe);
}
}
/**
* 获取实际运行终端综合信息
*/
@@ -269,9 +285,9 @@ public class GeneralDeviceInfoController extends BaseController {
@PostMapping("/getOnlineRateByDevIds")
@ApiOperation("终端在线率(谐波专用)")
@ApiImplicitParam(name = "param", value = "参数实体", required = true)
public HttpResult<List<RStatOnlinerateVO>> getOnlineRateByDevIds(@RequestBody OnlineRateParam param) {
public HttpResult<List<RStatOnlineRateVO>> getOnlineRateByDevIds(@RequestBody OnlineRateParam param) {
String methodDescribe = getMethodDescribe("getOnlineRateByDevIds");
List<RStatOnlinerateVO> onlineRateByDevIds = onlineRateMapper.getOnlineRateByDevIds(param);
List<RStatOnlineRateVO> onlineRateByDevIds = onlineRateMapper.getOnlineRateByDevIds(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,onlineRateByDevIds,methodDescribe);
}

View File

@@ -56,7 +56,6 @@ public class GridDiagramController extends BaseController {
@ApiOperation("变电站趋势分析")
public HttpResult<Map<String, Long>> getGridDiagramSubTendency(@RequestBody GridDiagramParam param){
String methodDescribe = getMethodDescribe("getGridDiagramSubTendency");
param.getDeviceInfoParam().setPowerFlag(0);
Map<String, Long> gridDiagramDevTendency = gridDiagramService.getGridDiagramDevTendency(param,3);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, gridDiagramDevTendency, methodDescribe);
}
@@ -91,6 +90,7 @@ public class GridDiagramController extends BaseController {
@ApiOperation("监测点趋势分析")
public HttpResult<Map<String, Long>> getGridDiagramLineTendency(@RequestBody GridDiagramParam param){
String methodDescribe = getMethodDescribe("getGridDiagramLineTendency");
param.getDeviceInfoParam().setLineRunFlag(0);
Map<String, Long> gridDiagramDevTendency = gridDiagramService.getGridDiagramDevTendency(param,6);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, gridDiagramDevTendency, methodDescribe);
}

View File

@@ -153,6 +153,7 @@ public class LineIntegrityDataController extends BaseController {
@ApiOperation("监测点数据完整性(冀北)")
@ApiImplicitParam(name = "param", value = "参数实体", required = true)
public HttpResult<DeviceOnlineRate> getData(@RequestBody DeviceInfoParam.BusinessParam param) {
param.setLineOrDevice(0);
String methodDescribe = getMethodDescribe("getData");
DeviceOnlineRate rate = irStatIntegrityDService.getData(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, rate, methodDescribe);

View File

@@ -6,13 +6,11 @@ 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.mapper.RStatOnlinerateDMapper;
import com.njcn.device.pq.pojo.dto.LineDataQualityDTO;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.LineDataQualityParam;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.device.pq.pojo.param.TerminalOnlineRateDataParam;
import com.njcn.device.pq.pojo.vo.OnlineRateCensusVO;
import com.njcn.device.pq.pojo.vo.RStatOnlinerateVO;
import com.njcn.device.pq.pojo.vo.RStatOnlineRateVO;
import com.njcn.device.pq.pojo.vo.TerminalOnlineRateDataVO;
import com.njcn.device.pq.service.TerminalOnlineRateDataService;
import com.njcn.web.controller.BaseController;
@@ -80,9 +78,9 @@ public class TerminalOnlineRateDataController extends BaseController {
@PostMapping("/getOnlineRateByDevIds")
@ApiOperation("终端在线率(谐波专用)")
@ApiImplicitParam(name = "param", value = "参数实体", required = true)
public HttpResult<List<RStatOnlinerateVO>> getOnlineRateByDevIds(@RequestBody OnlineRateParam param) {
public HttpResult<List<RStatOnlineRateVO>> getOnlineRateByDevIds(@RequestBody OnlineRateParam param) {
String methodDescribe = getMethodDescribe("getOnlineRateByDevIds");
List<RStatOnlinerateVO> onlineRateByDevIds = onlineRateMapper.getOnlineRateByDevIds(param);
List<RStatOnlineRateVO> onlineRateByDevIds = onlineRateMapper.getOnlineRateByDevIds(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,onlineRateByDevIds,methodDescribe);
}

View File

@@ -0,0 +1,121 @@
package com.njcn.device.pq.controller.jb;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.common.utils.LogUtil;
import com.njcn.device.pms.annotation.TerminalOperationLogDesc;
import com.njcn.device.pms.pojo.param.PowerDistributionareaParam;
import com.njcn.device.pms.pojo.param.TaiZhangParam;
import com.njcn.device.pq.pojo.po.jb.DistributionArea;
import com.njcn.device.pq.service.IPowerDistributionAreaService;
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.*;
import java.util.List;
/**
* <p>
* 台区信息增删改查
* </p>
*
* @author hongawen
* @since 2022-10-14
*/
@Slf4j
@RestController
@RequestMapping("/distributionArea")
@Api(tags = "台账-台区信息")
@RequiredArgsConstructor
@Validated
public class PmsPowerDistributionAreaController extends BaseController {
private final IPowerDistributionAreaService powerDistributionAreaService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("getPowerDistributionAreaList")
@ApiOperation("分页查询台区所有信息")
@ApiImplicitParam(name = "baseParam",value = "查询台区信息",required = true)
public HttpResult<Page<DistributionArea>> getList(@RequestBody TaiZhangParam baseParam){
String methodDescribe = getMethodDescribe("getList");
LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, baseParam);
Page<DistributionArea> res = powerDistributionAreaService.getList(baseParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS,res,methodDescribe);
}
/**
* 新增台区信息
* @author hany
* @date 2022/10/26
*/
@PostMapping("/addPowerDistributionArea")
@OperateInfo(info = LogEnum.SYSTEM_COMMON,operateType=OperateType.ADD)
@ApiOperation("新增台区信息")
@ApiImplicitParam(name = "newParam", value = "模板实体", required = true)
@TerminalOperationLogDesc(value = "新增台区信息",module = 3)
public HttpResult<Object> add(@RequestBody @Validated PowerDistributionareaParam newParam){
String methodDescribe = getMethodDescribe("add");
boolean result = powerDistributionAreaService.add(newParam);
if (result) {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
} else {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe);
}
}
/**
* 修改台区信息
* @author hany
* @date 2022/10/26
*/
@PostMapping("/updatePowerDistributionArea")
@OperateInfo(info = LogEnum.SYSTEM_COMMON,operateType = OperateType.UPDATE)
@ApiOperation("修改台区信息")
@ApiImplicitParam(name = "UpdateParam", value = "更新实体", required = true)
@TerminalOperationLogDesc(value = "修改台区信息",module = 3)
public HttpResult<Object> update(@RequestBody @Validated PowerDistributionareaParam UpdateParam){
String methodDescribe = getMethodDescribe("update");
boolean result = powerDistributionAreaService.update(UpdateParam);
if (result) {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
} else {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe);
}
}
/**
* 删除台区信息
* @param ids id
* @author hany
* @date 2022/10/26
*/
@PostMapping("/deletePowerDistributionArea")
@OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.DELETE)
@ApiOperation("删除台区信息")
@ApiImplicitParam(name = "ids", value = "ID索引", required = true)
@TerminalOperationLogDesc(value = "删除台区信息",module = 3)
public HttpResult<Object> delete(@RequestBody List<String> ids){
String methodDescribe = getMethodDescribe("delete");
boolean result = powerDistributionAreaService.delete(ids);
if(result){
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}else {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe);
}
}
}

View File

@@ -0,0 +1,100 @@
package com.njcn.device.pq.controller.jb;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.device.pms.annotation.TerminalOperationLogDesc;
import com.njcn.device.pms.pojo.param.PowerGenerationUserParam;
import com.njcn.device.pq.pojo.po.jb.GenerationUser;
import com.njcn.device.pq.service.IPowerGenerationUserService;
import com.njcn.web.controller.BaseController;
import com.njcn.web.pojo.param.BaseParam;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotEmpty;
import java.util.List;
/**
* <p>
* 前端控制器
* </p>
*
* @author hongawen
* @since 2022-10-14
*/
@RestController
@RequestMapping("/generationUser")
@Api(tags = "台账-发电用户")
@RequiredArgsConstructor
public class PmsPowerGenerationUserController extends BaseController {
private final IPowerGenerationUserService iPowerGenerationUserService;
@OperateInfo(info = LogEnum.BUSINESS_COMMON,operateType = OperateType.ADD)
@PostMapping("/addPowerGenerationUser")
@ApiOperation("新增发电用户")
@ApiImplicitParam(name = "powerGenerationUserParam", value = "发电用户实体", required = true)
@TerminalOperationLogDesc(value = "新增发电用户",module = 4)
public HttpResult<Boolean> addPowerGenerationUser(@RequestBody @Validated PowerGenerationUserParam powerGenerationUserParam) {
String methodDescribe = getMethodDescribe("addPowerGenerationUser");
boolean result = iPowerGenerationUserService.addPowerGenerationUser(powerGenerationUserParam);
if(result){
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON,operateType = OperateType.UPDATE)
@PostMapping("/updatePowerGenerationUser")
@ApiOperation("修改发电用户")
@ApiImplicitParam(name = "powerGenerationUserParam", value = "发电用户实体", required = true)
@TerminalOperationLogDesc(value = "修改发电用户",module = 4)
public HttpResult<Boolean> updatePowerGenerationUser(@RequestBody @Validated PowerGenerationUserParam powerGenerationUserParam) {
String methodDescribe = getMethodDescribe("updatePowerGenerationUser");
boolean result = iPowerGenerationUserService.updatePowerGenerationUser(powerGenerationUserParam);
if(result){
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON,operateType = OperateType.DELETE)
@DeleteMapping("/delPowerGenerationUser")
@ApiOperation("删除发电用户")
@ApiImplicitParam(name = "powerGenerationUserIds", value = "发电用户ids", required = true)
@TerminalOperationLogDesc(value = "删除发电用户",module = 4)
public HttpResult<Boolean> delPowerGenerationUser(@RequestBody @NotEmpty(message = "发电用户id不可为空") List<String> powerGenerationUserIds) {
String methodDescribe = getMethodDescribe("delPowerGenerationUser");
boolean result = iPowerGenerationUserService.delPowerGenerationUser(powerGenerationUserIds);
if(result){
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getPowerGenerationUserPageList")
@ApiOperation("分页获取发电用户列表")
@ApiImplicitParam(name = "baseParam", value = "基本查询体", required = true)
public HttpResult<Page<GenerationUser>> getPowerGenerationUserPageList(@RequestBody BaseParam baseParam) {
String methodDescribe = getMethodDescribe("getPowerGenerationUserPageList");
Page<GenerationUser> result = iPowerGenerationUserService.getPowerGenerationUserPageList(baseParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
}

View File

@@ -0,0 +1,19 @@
package com.njcn.device.pq.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.device.pq.pojo.po.jb.DistributionArea;
/**
* <p>
* Mapper 台区
* </p>
*
* @author hongawen
* @since 2022-10-14
*/
public interface PowerDistributionAreaMapper extends BaseMapper<DistributionArea> {
}

View File

@@ -0,0 +1,19 @@
package com.njcn.device.pq.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.device.pq.pojo.po.jb.GenerationUser;
/**
* <p>
* Mapper 台区
* </p>
*
* @author hongawen
* @since 2022-10-14
*/
public interface PowerGenerationUserMapper extends BaseMapper<GenerationUser> {
}

View File

@@ -0,0 +1,22 @@
package com.njcn.device.pq.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.device.pq.pojo.po.PqDataVerifyCount;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author cdf
* @since 2025-06-10
*/
public interface PqDataVerifyCountMapper extends BaseMapper<PqDataVerifyCount> {
List<PqDataVerifyCount> selectSumVerify(@Param("param") OnlineRateParam param);
}

View File

@@ -4,7 +4,7 @@ package com.njcn.device.pq.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.device.pq.pojo.po.RStatOnlinerateD;
import com.njcn.device.pq.pojo.vo.RStatOnlinerateVO;
import com.njcn.device.pq.pojo.vo.RStatOnlineRateVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -26,7 +26,7 @@ public interface RStatOnlinerateDMapper extends BaseMapper<RStatOnlinerateD> {
* @param param
* @return List<OnlineRate>
*/
List<RStatOnlinerateVO> getOnlineRateByDevIds(@Param("param") OnlineRateParam param);
List<RStatOnlineRateVO> getOnlineRateByDevIds(@Param("param") OnlineRateParam param);
/**
* @Description: 根据终端id集合获取总终端在线lv

View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njcn.device.pq.mapper.PqDataVerifyCountMapper">
<select id="selectSumVerify" resultType="com.njcn.device.pq.pojo.po.PqDataVerifyCount">
SELECT
line_id AS lineId,
SUM(total) AS total,
SUM(total_all) AS totalAll,
SUM(flicker) AS flicker,
SUM(flicker_all) AS flickerAll
FROM
pq_data_verify_count
<where>
<if test="param!=null and param.ids != null and param.ids.size > 0">
AND line_id IN
<foreach collection='param.ids' item='item' index="index" open='(' separator=',' close=')'>
#{item}
</foreach>
</if>
<if test=" param.startTime != null and param.startTime !=''">
AND time_id >= #{param.startTime}
</if>
<if test="param.endTime != null and param.endTime != ''">
AND time_id &lt;= #{param.endTime}
</if>
</where>
group by line_id ;
</select>
</mapper>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njcn.device.pq.mapper.RStatOnlinerateDMapper">
<select id="getOnlineRateByDevIds" resultType="com.njcn.device.pq.pojo.vo.RStatOnlinerateVO">
<select id="getOnlineRateByDevIds" resultType="com.njcn.device.pq.pojo.vo.RStatOnlineRateVO">
select
dev_index,
sum(online_min) as onlineMin,

View File

@@ -0,0 +1,46 @@
package com.njcn.device.pq.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.device.pms.pojo.param.PowerDistributionareaParam;
import com.njcn.device.pms.pojo.param.TaiZhangParam;
import com.njcn.device.pq.pojo.po.jb.DistributionArea;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author hongawen
* @since 2022-10-14
*/
public interface IPowerDistributionAreaService extends IService<DistributionArea> {
/**
* 分页查询所有
* @return
*/
Page<DistributionArea> getList(TaiZhangParam baseParam);
/**
* 新增
*/
boolean add(PowerDistributionareaParam newParam);
/**
* 修改
* @param
*/
boolean update(PowerDistributionareaParam updateParam);
/**
* 删除
* @param ids ids
*/
boolean delete(List<String> ids);
}

View File

@@ -0,0 +1,63 @@
package com.njcn.device.pq.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.device.pms.pojo.param.PowerDistributionareaParam;
import com.njcn.device.pms.pojo.param.PowerGenerationUserParam;
import com.njcn.device.pms.pojo.param.TaiZhangParam;
import com.njcn.device.pms.pojo.po.PowerGenerationUser;
import com.njcn.device.pms.pojo.vo.PowerGenerationUserVO;
import com.njcn.device.pq.pojo.po.jb.DistributionArea;
import com.njcn.device.pq.pojo.po.jb.GenerationUser;
import com.njcn.web.pojo.param.BaseParam;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author hongawen
* @since 2022-10-14
*/
public interface IPowerGenerationUserService extends IService<GenerationUser> {
/**
* 新增发电用户
* @author cdf
* @date 2022/10/25
* @param powerGenerationUserParam 发电用户
* @return boolean
*/
boolean addPowerGenerationUser(PowerGenerationUserParam powerGenerationUserParam);
/**
* 修改发电用户
* @author cdf
* @date 2022/10/25
* @param powerGenerationUserParam 发电用户
* @return boolean
*/
boolean updatePowerGenerationUser(PowerGenerationUserParam powerGenerationUserParam);
/**
* 删除发电用户
* @author cdf
* @date 2022/10/25
* @param powerGenerationUserIds 发电用户
* @return boolean
*/
boolean delPowerGenerationUser(List<String> powerGenerationUserIds);
/**
* 分页查询发电用户列表
* @author cdf
* @date 2022/10/25
* @param baseParam 基础参数
* @return boolean
*/
Page<GenerationUser> getPowerGenerationUserPageList(BaseParam baseParam);
}

View File

@@ -0,0 +1,24 @@
package com.njcn.device.pq.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.device.pq.pojo.po.PqDataVerifyCount;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author cdf
* @since 2025-06-10
*/
public interface IPqDataVerifyCountService extends IService<PqDataVerifyCount> {
List<PqDataVerifyCount> getSumVerify( OnlineRateParam param);
}

View File

@@ -227,7 +227,7 @@ public class CommTerminalServiceImpl implements CommTerminalService {
public List<DeptGetSubStationDTO.Info> deptSubStationInfo(DeptGetLineParam deptGetLineParam) {
List<DeptGetSubStationDTO.Info> result = new ArrayList<>();
List<DeptGetBase> temDept = getDeptChildrenByParent(deptGetLineParam);
List<TerminalGetBase.Extend> anExtends = deptLineService.orgSubStationInfoGet(filterDataTypeNew(deptGetLineParam.getServerName()),deptGetLineParam.getPowerFlag(),deptGetLineParam.getLineRunFlag());
List<TerminalGetBase.Extend> anExtends = deptLineService.orgSubStationInfoGet(filterDataTypeNew(deptGetLineParam.getServerName()),deptGetLineParam.getPowerFlag(),deptGetLineParam.getLineRunFlag(),deptGetLineParam.getIsUpToGrid());
Map<String, List<TerminalGetBase.Extend>> orgSub = anExtends.stream().collect(Collectors.groupingBy(TerminalGetBase::getUnitId));
Map<String, String> deptNameMap = temDept.stream().collect(Collectors.toMap(DeptGetBase::getUnitId, DeptGetBase::getUnitName));
temDept.forEach(item -> {
@@ -295,7 +295,7 @@ public class CommTerminalServiceImpl implements CommTerminalService {
@Override
public List<String> getRunMonitorByDept(MonitorBaseParam monitorBaseParam) {
List<String> ids = deptFeignClient.getDepSonIdtByDeptId(monitorBaseParam.getDeptId()).getData();
List<String> monitorIds = deptLineService.getLineByDeptIds(ids,monitorBaseParam.getManufacturer(),Stream.of(RunFlagEnum.RUNNING.getStatus()).collect(Collectors.toList()),Stream.of(0,1,2).collect(Collectors.toList()),monitorBaseParam.getObjType());
List<String> monitorIds = deptLineService.getLineByDeptIds(ids,monitorBaseParam.getManufacturer(),null,Stream.of(0,1,2).collect(Collectors.toList()),monitorBaseParam.getObjType());
return monitorIds;
}

View File

@@ -128,7 +128,7 @@ public class CommunicateServiceImpl implements CommunicateService {
param.setEndTime(DateUtil.endOfDay(DateUtil.parse(endTime)).toString());
if (state == 1) {
//在线率
List<RStatOnlinerateVO> onlineRateByDevIds = onlinerateDMapper.getOnlineRateByDevIds(param);
List<RStatOnlineRateVO> onlineRateByDevIds = onlinerateDMapper.getOnlineRateByDevIds(param);
if (CollUtil.isNotEmpty(onlineRateByDevIds)) {
onlineRateByDevIds.forEach(po -> {
//数据完整性 保留四位小数

View File

@@ -1,6 +1,7 @@
package com.njcn.device.pq.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
@@ -14,22 +15,19 @@ import com.njcn.device.common.mapper.onlinerate.OnLineRateMapper;
import com.njcn.device.common.service.GeneralDeviceService;
import com.njcn.device.line.mapper.LineMapper;
import com.njcn.device.line.service.DeptLineService;
import com.njcn.device.line.service.LineService;
import com.njcn.device.pq.mapper.RStatOnlinerateDMapper;
import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pq.pojo.param.DevRunEvaluateParam;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.device.pq.pojo.po.Line;
import com.njcn.device.pq.pojo.po.RStatIntegrityD;
import com.njcn.device.pq.pojo.po.RStatOnlinerateD;
import com.njcn.device.pq.pojo.vo.*;
import cn.hutool.core.collection.CollectionUtil;
import com.njcn.device.pq.enums.LineBaseEnum;
import com.njcn.device.pq.enums.PowerFlagEnum;
import com.njcn.device.pq.enums.RunFlagEnum;
import com.njcn.device.pq.mapper.RStatOnlinerateDMapper;
import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pq.pojo.dto.MonitorInfoDTO;
import com.njcn.device.pq.pojo.param.DevRunEvaluateParam;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.device.pq.pojo.po.*;
import com.njcn.device.pq.pojo.vo.*;
import com.njcn.device.pq.service.DeviceRunEvaluateService;
import com.njcn.device.pq.service.IPqDataVerifyCountService;
import com.njcn.device.rstatintegrity.mapper.RStatIntegrityDMapper;
import com.njcn.harmonic.api.RStatLimitRateDClient;
import com.njcn.harmonic.pojo.param.RStatLimitQueryParam;
@@ -48,9 +46,8 @@ import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
@@ -73,6 +70,7 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService {
private final OnLineRateMapper onLineRateMapper;
private final DicDataFeignClient dicDataFeignClient;
private final DeptFeignClient deptFeignClient;
private final IPqDataVerifyCountService pqDataVerifyCountService;
/**
* 数据完整性:50%
*/
@@ -378,10 +376,14 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService {
DeviceRunEvaluateVO.Detail detail;
//完整率
List<RStatIntegrityVO> integrityList = integrityDMapper.getLineIntegrityRateInfo(lineIds, param.getSearchBeginTime(), param.getSearchEndTime());
//超标率
List<RStatLimitRateDPO> limitRatePOList = rStatLimitRateDClient.monitorIdsGetLimitInfo(rStatLimitQueryParam).getData();
//获取所有终端在线率
List<RStatOnlinerateVO> onlineRateByDev = onLineRateMapper.getOnlineRateByDevIds(onlineRateParam);
List<RStatOnlineRateVO> onlineRateByDev = onLineRateMapper.getOnlineRateByDevIds(onlineRateParam);
//异常信息
onlineRateParam.setIds(lineIds);
List<PqDataVerifyCount> sumVerify = pqDataVerifyCountService.getSumVerify(onlineRateParam);
//超标率
// List<RStatLimitRateDPO> limitRatePOList = rStatLimitRateDClient.monitorIdsGetLimitInfo(rStatLimitQueryParam).getData();
for (GeneralDeviceDTO dto : deviceInfo) {
detail = new DeviceRunEvaluateVO.Detail();
@@ -389,10 +391,10 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService {
detail.setCount(dto.getDeviceIndexes().size());
detail.setOnline(onLineRate(onlineRateByDev, dto.getDeviceIndexes()));
detail.setIntegrity(integrity(integrityList, dto.getLineIndexes()));
detail.setQualified(limitRate(limitRatePOList, dto.getLineIndexes()));
detail.setQualified(verify(sumVerify, dto.getLineIndexes()));
detail.setScore(ONINTEGRITY.multiply(detail.getIntegrity())
.add(ONLINERATE.multiply(detail.getOnline())
.add(LIMITRATE.multiply(detail.getQualified()))).stripTrailingZeros());
.add(LIMITRATE.multiply(detail.getQualified()))).stripTrailingZeros().setScale(2, RoundingMode.HALF_UP));
Map<String, List<DevDetailVO>> dev = lineDeviceByDevIds
.stream()
.filter(x -> dto.getDeviceIndexes().contains(x.getDevId()))
@@ -406,6 +408,8 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService {
evaluateVO.setName(value.get(0).getDevName());
evaluateVO.setSubName(value.get(0).getSubName());
evaluateVO.setIp(value.get(0).getIp());
evaluateVO.setCompany(value.get(0).getCompany());
evaluateVO.setRunFlag(RunFlagEnum.getRunFlagRemarkByStatus(value.get(0).getRunFlag()));
//部门
if (deptMap.containsKey(value.get(0).getCit())) {
evaluateVO.setCit(deptMap.get(value.get(0).getCit()));
@@ -416,10 +420,10 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService {
}
evaluateVO.setOnLineRate(onLineRate(onlineRateByDev, Arrays.asList(key)));
evaluateVO.setIntegrityRate(integrity(integrityList, ids));
evaluateVO.setPassRate(limitRate(limitRatePOList, ids));
evaluateVO.setPassRate(verify(sumVerify, ids));
evaluateVO.setEvaluate(ONINTEGRITY.multiply(evaluateVO.getIntegrityRate())
.add(ONLINERATE.multiply(evaluateVO.getOnLineRate())
.add(LIMITRATE.multiply(evaluateVO.getPassRate()))).stripTrailingZeros());
.add(LIMITRATE.multiply(evaluateVO.getPassRate()))).stripTrailingZeros().setScale(2, RoundingMode.HALF_UP));
deviceDetail.add(evaluateVO);
});
}
@@ -430,24 +434,47 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService {
return info;
}
private BigDecimal verify(List<PqDataVerifyCount> sumVerify, List<String> lineIds) {
//异常率
List<PqDataVerifyCount> verifyList = sumVerify.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(verifyList)) {
double total = verifyList.stream().mapToDouble(PqDataVerifyCount::getTotal).sum();
double totalAll = verifyList.stream().mapToDouble(PqDataVerifyCount::getTotalAll).sum();
double flicker = verifyList.stream().mapToDouble(PqDataVerifyCount::getFlicker).sum();
double flickerAll = verifyList.stream().mapToDouble(PqDataVerifyCount::getFlickerAll).sum();
if (totalAll + flickerAll == 0) {
return new BigDecimal(0);
}
return NumberUtil.round(Math.min((total + flicker) * 100 / (totalAll + flickerAll), 100), 2);
} else {
return new BigDecimal(0);
}
}
private BigDecimal integrity(List<RStatIntegrityVO> integrityList, List<String> lineIds) {
//监测完整率
List<RStatIntegrityVO> integrityDS = integrityList.stream().filter(x -> lineIds.contains(x.getLineIndex())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(integrityDS)) {
double realTime = integrityDS.stream().mapToDouble(RStatIntegrityVO::getRealTime).sum();
double dueTime = integrityDS.stream().mapToDouble(RStatIntegrityVO::getDueTime).sum();
if (dueTime == 0) {
return new BigDecimal(0);
}
return NumberUtil.round(Math.min(realTime * 100 / dueTime, 100), 2);
} else {
return new BigDecimal(0);
}
}
private BigDecimal onLineRate(List<RStatOnlinerateVO> onlineRateByDev, List<String> devIds) {
private BigDecimal onLineRate(List<RStatOnlineRateVO> onlineRateByDev, List<String> devIds) {
//终端在线率
List<RStatOnlinerateVO> onlineRateDS = onlineRateByDev.stream().filter(x -> devIds.contains(x.getDevIndex())).collect(Collectors.toList());
List<RStatOnlineRateVO> onlineRateDS = onlineRateByDev.stream().filter(x -> devIds.contains(x.getDevIndex())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(onlineRateDS)) {
double onlineTime = onlineRateDS.stream().mapToDouble(RStatOnlinerateVO::getOnlineMin).sum();
double offlineTime = onlineRateDS.stream().mapToDouble(RStatOnlinerateVO::getOfflineMin).sum();
double onlineTime = onlineRateDS.stream().mapToDouble(RStatOnlineRateVO::getOnlineMin).sum();
double offlineTime = onlineRateDS.stream().mapToDouble(RStatOnlineRateVO::getOfflineMin).sum();
if (offlineTime == 0) {
return new BigDecimal(0);
}
return NumberUtil.round(Math.min(onlineTime * 100.0 / (onlineTime + offlineTime), 100), 2);
} else {
return new BigDecimal(0);
@@ -455,6 +482,9 @@ public class DeviceRunEvaluateServiceImpl implements DeviceRunEvaluateService {
}
private BigDecimal limitRate(List<RStatLimitRateDPO> limitRatePOList, List<String> lineIds) {
if (CollUtil.isEmpty(limitRatePOList)) {
return new BigDecimal(0);
}
//超标信息
List<RStatLimitRateDPO> limitRateDPOS = limitRatePOList.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(limitRateDPOS)) {

View File

@@ -74,15 +74,14 @@ public class GridDiagramServiceImpl implements GridDiagramService {
List<DictData> v = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.PANORAMIC_VOLTAGE.getCode()).getData();
List<String> voltageIds;
//获取电压等级550 220 110 35
if(CollUtil.isNotEmpty(v)){
if (CollUtil.isNotEmpty(v)) {
List<String> vName = v.stream().map(DictData::getName).collect(Collectors.toList());
voltageIds = dictDataList.stream().filter(item -> vName.contains(item.getName())).sorted(Comparator.comparing(DictData::getSort).reversed()).map(DictData::getId).collect(Collectors.toList());
}else{
} else {
voltageIds = dictDataList.stream().filter(item -> Objects.equals(DicDataEnum.DY_500KV.getCode(), item.getCode()) || Objects.equals(DicDataEnum.DY_220KV.getCode(), item.getCode()) || Objects.equals(DicDataEnum.DY_110KV.getCode(), item.getCode()) || Objects.equals(DicDataEnum.DY_35KV.getCode(), item.getCode())).sorted(Comparator.comparing(DictData::getSort).reversed()).map(DictData::getId).collect(Collectors.toList());
}
GridDiagramVO gridDiagramVO = new GridDiagramVO();
List<GridDiagramVO.LineStatistics> info = new ArrayList<>();
List<GridDiagramVO.LineStatistics> gwInfo = new ArrayList<>();
@@ -295,11 +294,11 @@ public class GridDiagramServiceImpl implements GridDiagramService {
@Override
public Map<String, Long> getGridDiagramDevTendency(GridDiagramParam param, Integer type) {
param.getDeviceInfoParam().setLineRunFlag(0);
if (type == 3) {
param.getDeviceInfoParam().setPowerFlag(0);
List<Integer> runFlag = new ArrayList<>();
if (3 != type) {
runFlag.add(0);
}
List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceService.getDeviceInfo(param.getDeviceInfoParam(), Stream.of(0).collect(Collectors.toList()), Stream.of(1).collect(Collectors.toList()));
List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceService.getDeviceInfo(param.getDeviceInfoParam(), runFlag, Stream.of(1).collect(Collectors.toList()));
Map<String, Long> map = new LinkedHashMap<>();
DateField dateField;
DateTime parse;
@@ -359,7 +358,6 @@ public class GridDiagramServiceImpl implements GridDiagramService {
@Override
public List<GridDiagramVO.DeviceData> getGridDiagramDevData(GridDiagramParam param) {
param.getDeviceInfoParam().setLineRunFlag(0);
// 获取所有数据
List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceService.getDeviceInfo(param.getDeviceInfoParam(), Stream.of(0).collect(Collectors.toList()), Stream.of(1).collect(Collectors.toList()));
List<String> devIDs = generalDeviceDTOList.stream().flatMap(x -> x.getDeviceIndexes().stream()).distinct().collect(Collectors.toList());
@@ -399,9 +397,8 @@ public class GridDiagramServiceImpl implements GridDiagramService {
@Override
public List<GridDiagramVO.DevData> getGridDiagramDevDataList(GridDiagramParam param) {
param.getDeviceInfoParam().setLineRunFlag(0);
List<GridDiagramVO.DevData> info = new ArrayList<>();
List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceService.getDeviceInfoAsDept(param.getDeviceInfoParam(), null, Stream.of(1).collect(Collectors.toList()));
List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceService.getDeviceInfoAsDept(param.getDeviceInfoParam(), Arrays.asList(0), Stream.of(1).collect(Collectors.toList()));
List<String> devIds = generalDeviceDTOList.stream().flatMap(x -> x.getDeviceIndexes().stream()).collect(Collectors.toList());
//终端信息
List<Device> devList = new ArrayList<>();

View File

@@ -0,0 +1,104 @@
package com.njcn.device.pq.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.common.pojo.enums.common.DataStateEnum;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.device.pms.enums.PmsDeviceResponseEnum;
import com.njcn.device.pms.pojo.param.PowerDistributionareaParam;
import com.njcn.device.pms.pojo.param.TaiZhangParam;
import com.njcn.device.pq.mapper.PowerDistributionAreaMapper;
import com.njcn.device.pq.pojo.po.jb.DistributionArea;
import com.njcn.device.pq.service.IPowerDistributionAreaService;
import com.njcn.system.api.DicDataFeignClient;
import com.njcn.user.api.DeptFeignClient;
import com.njcn.web.factory.PageFactory;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
/**
* <p>
* 台区信息
* </p>
*
* @author hongawen
* @since 2022-10-14
*/
@Service
@RequiredArgsConstructor
public class PowerDistributionAreaServiceImpl extends ServiceImpl<PowerDistributionAreaMapper, DistributionArea> implements IPowerDistributionAreaService {
@Override
public Page<DistributionArea> getList(TaiZhangParam baseParam) {
LambdaQueryWrapper<DistributionArea> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(DistributionArea::getStatus,DataStateEnum.ENABLE.getCode())
.and(StrUtil.isNotBlank(baseParam.getSearchValue()),
i->i.like(DistributionArea::getName,baseParam.getSearchValue())
.or()
.like(DistributionArea::getPowerrName,baseParam.getSearchValue())
.or()
.like(DistributionArea::getLineName,baseParam.getSearchValue())
.or()
.like(DistributionArea::getOrgName,baseParam.getSearchValue())).orderByDesc(DistributionArea::getCreateTime);
//初始化分页数据
return this.page(new Page<>(PageFactory.getPageNum(baseParam), PageFactory.getPageSize(baseParam)), lambdaQueryWrapper);
}
/**
* 新增台区信息
* @author hany
* @date 2022/10/26
*/
@Override
public boolean add(PowerDistributionareaParam newParam) {
LambdaQueryWrapper<DistributionArea> che = new LambdaQueryWrapper<>();
che.eq(DistributionArea::getId,newParam.getId());
int count = this.count(che);
if(count>0){
throw new BusinessException(PmsDeviceResponseEnum.POWER_CODE_SAME);
}
DistributionArea powerDistributionarea = new DistributionArea();
BeanUtils.copyProperties(newParam,powerDistributionarea);
//设为正常状态
powerDistributionarea.setStatus(DataStateEnum.ENABLE.getCode());
return this.save(powerDistributionarea);
}
/**
* 修改台区信息
* @author hany
* @date 2022/10/26
*/
@Override
public boolean update(PowerDistributionareaParam updateParam) {
DistributionArea powerDistributionarea = this.getById(updateParam.getId());
if(Objects.isNull(powerDistributionarea)){
throw new BusinessException(PmsDeviceResponseEnum.POWER_DIS_NOT_FIND);
}
BeanUtils.copyProperties(updateParam,powerDistributionarea);
return this.updateById(powerDistributionarea);
}
/**
* 删除
* @param ids
*/
@Override
@Transactional(rollbackFor=RuntimeException.class)
public boolean delete(List<String> ids) {
return this.removeByIds(ids);
}
}

View File

@@ -0,0 +1,78 @@
package com.njcn.device.pq.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.common.pojo.enums.common.DataStateEnum;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.device.pms.enums.PmsDeviceResponseEnum;
import com.njcn.device.pms.pojo.param.PowerGenerationUserParam;
import com.njcn.device.pq.mapper.PowerGenerationUserMapper;
import com.njcn.device.pq.pojo.po.jb.GenerationUser;
import com.njcn.device.pq.service.IPowerGenerationUserService;
import com.njcn.web.factory.PageFactory;
import com.njcn.web.pojo.param.BaseParam;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
/**
* <p>
* 台区信息
* </p>
*
* @author hongawen
* @since 2022-10-14
*/
@Service
@RequiredArgsConstructor
public class PowerGenerationUserServiceImpl extends ServiceImpl<PowerGenerationUserMapper, GenerationUser> implements IPowerGenerationUserService {
@Override
public boolean addPowerGenerationUser(PowerGenerationUserParam powerGenerationUserParam) {
LambdaQueryWrapper<GenerationUser> che = new LambdaQueryWrapper<>();
che.eq(GenerationUser::getId,powerGenerationUserParam.getId());
int count = this.count(che);
if(count>0){
throw new BusinessException(PmsDeviceResponseEnum.POWER_CODE_SAME);
}
GenerationUser powerDistributionarea = new GenerationUser();
BeanUtils.copyProperties(powerGenerationUserParam,powerDistributionarea);
//设为正常状态
powerDistributionarea.setStatus(DataStateEnum.ENABLE.getCode());
return this.save(powerDistributionarea);
}
@Override
public boolean updatePowerGenerationUser(PowerGenerationUserParam powerGenerationUserParam) {
GenerationUser powerDistributionarea = this.getById(powerGenerationUserParam.getId());
if(Objects.isNull(powerDistributionarea)){
throw new BusinessException(PmsDeviceResponseEnum.POWER_DIS_NOT_FIND);
}
BeanUtils.copyProperties(powerGenerationUserParam,powerDistributionarea);
return this.updateById(powerDistributionarea);
}
@Override
public boolean delPowerGenerationUser(List<String> powerGenerationUserIds) {
return this.removeByIds(powerGenerationUserIds);
}
@Override
public Page<GenerationUser> getPowerGenerationUserPageList(BaseParam baseParam) {
LambdaQueryWrapper<GenerationUser> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(GenerationUser::getStatus, DataStateEnum.ENABLE.getCode())
.and(StrUtil.isNotBlank(baseParam.getSearchValue()),
i->i.like(GenerationUser::getName,baseParam.getSearchValue())
.or()
.like(GenerationUser::getOrgName,baseParam.getSearchValue())).orderByDesc(GenerationUser::getCreateTime);
//初始化分页数据
return this.page(new Page<>(PageFactory.getPageNum(baseParam), PageFactory.getPageSize(baseParam)), lambdaQueryWrapper);
}
}

View File

@@ -0,0 +1,34 @@
package com.njcn.device.pq.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.device.pq.mapper.PqDataVerifyCountMapper;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.device.pq.pojo.po.PqDataVerifyCount;
import com.njcn.device.pq.service.IPqDataVerifyCountService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 服务实现类
* </p>
*
* @author cdf
* @since 2025-06-10
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class PqDataVerifyCountServiceImpl extends ServiceImpl<PqDataVerifyCountMapper, PqDataVerifyCount> implements IPqDataVerifyCountService {
@Override
public List<PqDataVerifyCount> getSumVerify(OnlineRateParam param) {
return this.baseMapper.selectSumVerify(param);
}
}

View File

@@ -4,6 +4,7 @@ package com.njcn.device.pq.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -34,6 +35,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -69,9 +71,9 @@ public class RStatIntegrityDServiceImpl extends MppServiceImpl<RStatIntegrityDMa
@Override
public List<LineDataQualityDTO> getLineDataQuality(LineDataQualityParam lineDataQualityParam) {
List<String> lineIds = lineDataQualityParam.getLineIds();
List<Line> lineList = lineMapper.selectList(new LambdaQueryWrapper<Line>().in(Line::getId,lineIds));
List<Line> lineList = lineMapper.selectList(new LambdaQueryWrapper<Line>().in(Line::getId, lineIds));
lineList = lineList.stream().peek(item->{
lineList = lineList.stream().peek(item -> {
String devId = item.getPids().split(StrUtil.COMMA)[4];
item.setPid(devId);
}).collect(Collectors.toList());
@@ -81,35 +83,35 @@ public class RStatIntegrityDServiceImpl extends MppServiceImpl<RStatIntegrityDMa
QueryWrapper<RStatOnlinerateD> onlineQuery = new QueryWrapper<>();
onlineQuery.select("dev_index,avg(online_min/offline_min+online_min) as onlineRate")
.lambda()
.in(RStatOnlinerateD::getDevIndex,devIds)
.between(RStatOnlinerateD::getTimeId, DateUtil.parse(lineDataQualityParam.getBeginTime(), DatePattern.NORM_DATE_PATTERN),DateUtil.parse(lineDataQualityParam.getEndTime(), DatePattern.NORM_DATE_PATTERN))
.in(RStatOnlinerateD::getDevIndex, devIds)
.between(RStatOnlinerateD::getTimeId, DateUtil.parse(lineDataQualityParam.getBeginTime(), DatePattern.NORM_DATE_PATTERN), DateUtil.parse(lineDataQualityParam.getEndTime(), DatePattern.NORM_DATE_PATTERN))
.groupBy(RStatOnlinerateD::getDevIndex);
List<RStatOnlinerateD> rStatOnlinerateDList = onlineRateMapper.selectList(onlineQuery);
Map<String,RStatOnlinerateD> onlineMap = rStatOnlinerateDList.stream().collect(Collectors.toMap(RStatOnlinerateD::getDevIndex, Function.identity()));
Map<String, RStatOnlinerateD> onlineMap = rStatOnlinerateDList.stream().collect(Collectors.toMap(RStatOnlinerateD::getDevIndex, Function.identity()));
QueryWrapper<RStatIntegrityD> integrityQuery = new QueryWrapper<>();
integrityQuery.select("line_index,avg(real_time/due_time) as integrityData")
.lambda()
.in(RStatIntegrityD::getLineIndex,lineIds)
.between(RStatIntegrityD::getTimeId, DateUtil.parse(lineDataQualityParam.getBeginTime(), DatePattern.NORM_DATE_PATTERN),DateUtil.parse(lineDataQualityParam.getEndTime(), DatePattern.NORM_DATE_PATTERN))
.in(RStatIntegrityD::getLineIndex, lineIds)
.between(RStatIntegrityD::getTimeId, DateUtil.parse(lineDataQualityParam.getBeginTime(), DatePattern.NORM_DATE_PATTERN), DateUtil.parse(lineDataQualityParam.getEndTime(), DatePattern.NORM_DATE_PATTERN))
.groupBy(RStatIntegrityD::getLineIndex);
List<RStatIntegrityD> rStatIntegrityDList = rStatIntegrityDMapper.selectList(integrityQuery);
Map<String,RStatIntegrityD> integrityMap = rStatIntegrityDList.stream().collect(Collectors.toMap(RStatIntegrityD::getLineIndex,Function.identity()));
Map<String, RStatIntegrityD> integrityMap = rStatIntegrityDList.stream().collect(Collectors.toMap(RStatIntegrityD::getLineIndex, Function.identity()));
List<LineDataQualityDTO> result = new ArrayList<>();
for(Line item : lineList){
for (Line item : lineList) {
LineDataQualityDTO lineDataQualityDTO = new LineDataQualityDTO();
lineDataQualityDTO.setLineId(item.getId());
lineDataQualityDTO.setLineName(item.getName());
if(onlineMap.containsKey(item.getPid())){
if (onlineMap.containsKey(item.getPid())) {
lineDataQualityDTO.setOnlineRate(Double.valueOf(onlineMap.get(item.getPid()).getOnlineRate()));
}else {
} else {
lineDataQualityDTO.setOnlineRate(0.00);
}
if(integrityMap.containsKey(item.getId())){
if (integrityMap.containsKey(item.getId())) {
lineDataQualityDTO.setIntegrityRate(Double.valueOf(integrityMap.get(item.getId()).getIntegrityData()));
}else {
} else {
lineDataQualityDTO.setIntegrityRate(0.00);
}
result.add(lineDataQualityDTO);
@@ -132,7 +134,7 @@ public class RStatIntegrityDServiceImpl extends MppServiceImpl<RStatIntegrityDMa
return rStatIntegrityD;
}).collect(Collectors.toList());
this.saveOrUpdateBatchByMultiId(collect1,200);
this.saveOrUpdateBatchByMultiId(collect1, 200);
return true;
}
@@ -149,25 +151,25 @@ public class RStatIntegrityDServiceImpl extends MppServiceImpl<RStatIntegrityDMa
.collect(Collectors.toList());
rate.setTotalNum(lineIds.size());
//获取所有监测点的数据完整性
List<RStatIntegrityVO> lineIntegrityRateInfo = rStatIntegrityDMapper.getLineIntegrityRateInfo(lineIds,param.getSearchBeginTime(),param.getSearchEndTime());
List<RStatIntegrityVO> lineIntegrityRateInfo = rStatIntegrityDMapper.getLineIntegrityRateInfo(lineIds, param.getSearchBeginTime(), param.getSearchEndTime());
//获取所有监测点信息信息
List<LineDetailVO.Detail> LineInfoByIds = lineService.getLineDetailByIds(lineIds);
rate.setBelowNum(CollUtil.isNotEmpty(lineIntegrityRateInfo)?calculateIntegrityRate(lineIntegrityRateInfo,90):lineIds.size());
rate.setTotalOnlineRate(calculateIntegrityRate(lineIntegrityRateInfo,lineIds).toString());
List<DeviceOnlineRate.CitDetail> citDetailList=new ArrayList<>();
rate.setBelowNum(CollUtil.isNotEmpty(lineIntegrityRateInfo) ? calculateIntegrityRate(lineIntegrityRateInfo, 90, lineIds.size()) : lineIds.size());
rate.setTotalOnlineRate(calculateIntegrityRate(lineIntegrityRateInfo, lineIds));
List<DeviceOnlineRate.CitDetail> citDetailList = new ArrayList<>();
DeviceOnlineRate.CitDetail citDetail;
DeviceOnlineRate.LineDetail detail;
for (GeneralDeviceDTO dto : deviceInfo) {
//获取部门终端集合
List<RStatIntegrityVO> citDevOnRate = lineIntegrityRateInfo.stream().filter(x -> dto.getLineIndexes().contains(x.getLineIndex())).collect(Collectors.toList());
Map<String, Double> onlineRateByDevMap = citDevOnRate.stream()
Map<String, BigDecimal> onlineRateByDevMap = citDevOnRate.stream()
.collect(Collectors.toMap(RStatIntegrityVO::getLineIndex, RStatIntegrityVO::getIntegrityRate));
citDetail=new DeviceOnlineRate.CitDetail();
citDetail = new DeviceOnlineRate.CitDetail();
citDetail.setCitName(dto.getName());
citDetail.setCitTotalNum(dto.getLineIndexes().size());
citDetail.setCitBelowNum(CollUtil.isNotEmpty(citDevOnRate)?calculateIntegrityRate(lineIntegrityRateInfo,90):dto.getLineIndexes().size());
citDetail.setCitTotalOnlineRate(calculateIntegrityRate(lineIntegrityRateInfo,dto.getLineIndexes()).toString());
citDetail.setCitBelowNum(CollUtil.isNotEmpty(citDevOnRate) ? calculateIntegrityRate(citDevOnRate, 90, dto.getLineIndexes().size()) : dto.getLineIndexes().size());
citDetail.setCitTotalOnlineRate(calculateIntegrityRate(lineIntegrityRateInfo, dto.getLineIndexes()));
List<DeviceOnlineRate.LineDetail> detailList = new ArrayList<>();
List<LineDetailVO.Detail> lineDetail = LineInfoByIds.stream().filter(x -> dto.getLineIndexes().contains(x.getLineId())).collect(Collectors.toList());
for (LineDetailVO.Detail line : lineDetail) {
@@ -183,7 +185,7 @@ public class RStatIntegrityDServiceImpl extends MppServiceImpl<RStatIntegrityDMa
detail.setLineId(line.getLineId());
detail.setLineName(line.getLineName());
detail.setLatestTime(line.getTimeID());
detail.setIntegrity(onlineRateByDevMap.getOrDefault(line.getLineId(), 0.0));
detail.setIntegrity(onlineRateByDevMap.getOrDefault(line.getLineId(), BigDecimal.valueOf(0)));
detailList.add(detail);
}
citDetail.setDetailList(detailList);
@@ -194,19 +196,21 @@ public class RStatIntegrityDServiceImpl extends MppServiceImpl<RStatIntegrityDMa
return rate;
}
private Double calculateIntegrityRate(List<RStatIntegrityVO> lineIntegrityRateInfo ,List<String> deviceIds){
private BigDecimal calculateIntegrityRate(List<RStatIntegrityVO> lineIntegrityRateInfo, List<String> deviceIds) {
List<RStatIntegrityVO> list = lineIntegrityRateInfo.stream().filter(x -> deviceIds.contains(x.getLineIndex())).collect(Collectors.toList());
if(CollUtil.isNotEmpty(list)){
BigDecimal onlineMin = BigDecimal.valueOf(list.stream().mapToLong(RStatIntegrityVO::getDueTime).sum());
BigDecimal offlineMin =BigDecimal.valueOf( list.stream().mapToLong(RStatIntegrityVO::getRealTime).sum());
BigDecimal sumMin= onlineMin.add(offlineMin);
return sumMin.doubleValue();
if (CollUtil.isNotEmpty(list)) {
BigDecimal dueTime = BigDecimal.valueOf(list.stream().mapToLong(RStatIntegrityVO::getDueTime).sum());
BigDecimal realTime = BigDecimal.valueOf(list.stream().mapToLong(RStatIntegrityVO::getRealTime).sum());
if (BigDecimal.ZERO.compareTo(dueTime) == 0) {
BigDecimal.valueOf(0);
}
return realTime.multiply(BigDecimal.valueOf(100.0)).divide(dueTime, 2, RoundingMode.HALF_UP);
}
return 0.0;
return BigDecimal.valueOf(0);
}
private Integer calculateIntegrityRate(List<RStatIntegrityVO> onlineRateByDev,Integer limit){
return (int) onlineRateByDev.stream().filter(x -> x.getIntegrityRate() < limit).count();
private Integer calculateIntegrityRate(List<RStatIntegrityVO> onlineRateByDev, Integer limit, Integer count) {
return count - onlineRateByDev.stream().filter(x -> x.getIntegrityRate().doubleValue() >= limit).collect(Collectors.toList()).size();
}

View File

@@ -2,12 +2,8 @@ package com.njcn.device.pq.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
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.config.GeneralInfo;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.device.common.service.GeneralDeviceService;
@@ -16,20 +12,15 @@ import com.njcn.device.biz.enums.DeviceResponseEnum;
import com.njcn.device.pq.enums.LineBaseEnum;
import com.njcn.device.pq.mapper.*;
import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pq.pojo.dto.LineDataQualityDTO;
import com.njcn.device.pq.pojo.dto.PublicDTO;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.LineDataQualityParam;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.device.pq.pojo.param.TerminalOnlineRateDataParam;
import com.njcn.device.pq.pojo.po.Line;
import com.njcn.device.pq.pojo.po.RStatIntegrityD;
import com.njcn.device.pq.pojo.po.RStatOnlinerateD;
import com.njcn.device.pq.pojo.po.TerminalOnlineRateData;
import com.njcn.device.pq.pojo.vo.AlarmStrategyVO;
import com.njcn.device.pq.pojo.vo.OnlineRateCensusVO;
import com.njcn.device.pq.pojo.vo.RStatOnlinerateVO;
import com.njcn.device.pq.pojo.vo.RStatOnlineRateVO;
import com.njcn.device.pq.pojo.vo.TerminalOnlineRateDataVO;
import com.njcn.device.pq.service.TerminalOnlineRateDataService;
import com.njcn.device.pq.utils.DataStatisticsUtil;
@@ -215,7 +206,7 @@ public class TerminalOnlineRateDataServiceImpl implements TerminalOnlineRateData
param.setIds(deviceIndexes);
param.setStartTime( DateUtil.beginOfDay(DateUtil.parse(searchBeginTime)).toString());
param.setEndTime( DateUtil.endOfDay(DateUtil.parse(searchEndTime)).toString());
List<RStatOnlinerateVO> data = onlineRateMapper.getOnlineRateByDevIds(param);
List<RStatOnlineRateVO> data = onlineRateMapper.getOnlineRateByDevIds(param);
if (CollUtil.isNotEmpty(data)) {
data.forEach(po -> {
PublicDTO publicDTO = new PublicDTO();

View File

@@ -4,7 +4,7 @@ package com.njcn.device.common.mapper.onlinerate;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.device.pq.pojo.po.RStatOnlinerateD;
import com.njcn.device.pq.pojo.vo.RStatOnlinerateVO;
import com.njcn.device.pq.pojo.vo.RStatOnlineRateVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -26,6 +26,6 @@ public interface OnLineRateMapper extends BaseMapper<RStatOnlinerateD> {
* @param param
* @return List<OnlineRate>
*/
List<RStatOnlinerateVO> getOnlineRateByDevIds(@Param("param") OnlineRateParam param);
List<RStatOnlineRateVO> getOnlineRateByDevIds(@Param("param") OnlineRateParam param);
}

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.njcn.device.common.mapper.onlinerate.OnLineRateMapper">
<select id="getOnlineRateByDevIds" resultType="com.njcn.device.pq.pojo.vo.RStatOnlinerateVO">
<select id="getOnlineRateByDevIds" resultType="com.njcn.device.pq.pojo.vo.RStatOnlineRateVO">
select
dev_index,
sum(online_min) as onlineMin,

View File

@@ -428,7 +428,7 @@ public class GeneralDeviceService {
//2.筛选出终端id理论上监测点的pids中第五个id为终端id
List<String> devIds = voltages.stream().map(Line::getPid).distinct().collect(Collectors.toList());
// 再根据终端条件筛选合法终端信息 联查pq_line t1,pq_device t2
List<Line> devices = terminalBaseService.getDeviceByCondition(devIds, deviceType, deviceInfoParam.getManufacturer());
List<Line> devices = terminalBaseService.getDeviceByCondition(devIds, deviceType, deviceInfoParam);
//3.筛选出变电站id理论上监测点的pids中第四个id为变电站id 联查: pq_line t1 ,pq_substation t2
List<String> subIds = devices.stream().map(Line::getPid).distinct().collect(Collectors.toList());

View File

@@ -129,7 +129,7 @@ public interface TerminalBaseService {
* @param deviceType 终端筛选条件
* @param manufacturer 终端厂家
*/
List<Line> getDeviceByCondition(List<String> devIds, DeviceType deviceType, List<SimpleDTO> manufacturer);
List<Line> getDeviceByCondition(List<String> devIds, DeviceType deviceType, DeviceInfoParam manufacturer);
/**
* 查询母线信息

View File

@@ -9,7 +9,7 @@ import com.njcn.common.utils.HttpResultUtil;
import com.njcn.device.device.service.OnLineRateService;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.device.pq.pojo.vo.RStatOnlinerateVO;
import com.njcn.device.pq.pojo.vo.RStatOnlineRateVO;
import com.njcn.device.pq.pojo.vo.common.DeviceOnlineRate;
import com.njcn.web.controller.BaseController;
import io.swagger.annotations.Api;
@@ -41,6 +41,7 @@ public class OnLineRateController extends BaseController {
@ApiOperation("终端在线率列表(冀北)")
public HttpResult<DeviceOnlineRate> deviceOnlineRateInfo(@RequestBody DeviceInfoParam.BusinessParam deviceInfoParam) {
String methodDescribe = getMethodDescribe("deviceOnlineRateInfo");
deviceInfoParam.setLineOrDevice(1);
DeviceOnlineRate rate = onLineRateService.deviceOnlineRateInfo(deviceInfoParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, rate, methodDescribe);
}
@@ -48,9 +49,9 @@ public class OnLineRateController extends BaseController {
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getOnlineRateByDevIds")
@ApiOperation("通用终端在线率(冀北)")
public HttpResult<List<RStatOnlinerateVO>> getOnlineRateByDevIds(@RequestBody OnlineRateParam deviceInfoParam) {
public HttpResult<List<RStatOnlineRateVO>> getOnlineRateByDevIds(@RequestBody OnlineRateParam deviceInfoParam) {
String methodDescribe = getMethodDescribe("deviceOnlineRateInfo");
List<RStatOnlinerateVO> rate = onLineRateService.getOnlineRateByDevIds(deviceInfoParam);
List<RStatOnlineRateVO> rate = onLineRateService.getOnlineRateByDevIds(deviceInfoParam);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, rate, methodDescribe);
}

View File

@@ -355,6 +355,7 @@
line.id lineId,
line.name lineName,
gdinfo.NAME AS gdName,
substation.id AS subStationId,
substation.NAME AS subStationName,
device.NAME AS devName,
deviceDetail.Com_Flag AS comFlag,

View File

@@ -3,7 +3,7 @@ package com.njcn.device.device.service;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.device.pq.pojo.vo.RStatOnlinerateVO;
import com.njcn.device.pq.pojo.vo.RStatOnlineRateVO;
import com.njcn.device.pq.pojo.vo.common.DeviceOnlineRate;
import java.util.List;
@@ -31,5 +31,5 @@ public interface OnLineRateService {
* @param
* @return
*/
List<RStatOnlinerateVO> getOnlineRateByDevIds(OnlineRateParam onlineRateParam);
List<RStatOnlineRateVO> getOnlineRateByDevIds(OnlineRateParam onlineRateParam);
}

View File

@@ -12,12 +12,13 @@ import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.device.pq.pojo.po.RStatOnlinerateD;
import com.njcn.device.pq.pojo.vo.DevDetail;
import com.njcn.device.pq.pojo.vo.RStatOnlinerateVO;
import com.njcn.device.pq.pojo.vo.RStatOnlineRateVO;
import com.njcn.device.pq.pojo.vo.common.DeviceOnlineRate;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
@@ -49,24 +50,24 @@ public class OnLineRateServiceImpl extends ServiceImpl<OnLineRateMapper, RStatOn
onlineRateParam.setStartTime(param.getSearchBeginTime());
onlineRateParam.setEndTime(param.getSearchEndTime());
//获取所有终端在线率
List<RStatOnlinerateVO> onlineRateByDev = this.baseMapper.getOnlineRateByDevIds(onlineRateParam);
List<RStatOnlineRateVO> onlineRateByDev = this.baseMapper.getOnlineRateByDevIds(onlineRateParam);
//获取所有终端信息
List<DevDetail> devInfoByIds = deviceService.getDevInfoByIds(deviceIds);
rate.setBelowNum(CollUtil.isNotEmpty(onlineRateByDev) ? calculateOnLineRate(onlineRateByDev, 90) : deviceIds.size());
rate.setBelowNum(CollUtil.isNotEmpty(onlineRateByDev) ? calculateOnLineRate(onlineRateByDev, 90, deviceIds.size()) : deviceIds.size());
rate.setTotalOnlineRate(calculateOnLineRate(onlineRateByDev, deviceIds));
List<DeviceOnlineRate.CitDetail> citDetailList = new ArrayList<>();
DeviceOnlineRate.CitDetail citDetail;
DeviceOnlineRate.Detail detail;
for (GeneralDeviceDTO dto : deviceInfo) {
//获取部门终端集合
List<RStatOnlinerateVO> citDevOnRate = onlineRateByDev.stream().filter(x -> dto.getDeviceIndexes().contains(x.getDevIndex())).collect(Collectors.toList());
Map<String, Float> onlineRateByDevMap = citDevOnRate.stream()
.collect(Collectors.toMap(RStatOnlinerateVO::getDevIndex, RStatOnlinerateVO::getOnlineRate));
List<RStatOnlineRateVO> citDevOnRate = onlineRateByDev.stream().filter(x -> dto.getDeviceIndexes().contains(x.getDevIndex())).collect(Collectors.toList());
Map<String, BigDecimal> onlineRateByDevMap = citDevOnRate.stream()
.collect(Collectors.toMap(x -> x.getDevIndex(), x -> x.getOnlineRate()));
citDetail = new DeviceOnlineRate.CitDetail();
citDetail.setCitName(dto.getName());
citDetail.setCitTotalNum(dto.getDeviceIndexes().size());
citDetail.setCitBelowNum(CollUtil.isNotEmpty(citDevOnRate) ? calculateOnLineRate(onlineRateByDev, 90) : dto.getDeviceIndexes().size());
citDetail.setCitBelowNum(CollUtil.isNotEmpty(citDevOnRate) ? calculateOnLineRate(citDevOnRate, 90, dto.getDeviceIndexes().size()) : dto.getDeviceIndexes().size());
citDetail.setCitTotalOnlineRate(calculateOnLineRate(onlineRateByDev, dto.getDeviceIndexes()));
List<DeviceOnlineRate.Detail> detailList = new ArrayList<>();
List<DevDetail> details = devInfoByIds.stream().filter(x -> dto.getDeviceIndexes().contains(x.getDevIndex())).collect(Collectors.toList());
@@ -82,7 +83,7 @@ public class OnLineRateServiceImpl extends ServiceImpl<OnLineRateMapper, RStatOn
detail.setRunFlag(RunFlagEnum.getRunFlagRemarkByStatus(dev.getRunFlag()));
detail.setComFlag(dev.getComFlag() == 0 ? "中断" : "正常");
detail.setTimeID(dev.getTimeID());
detail.setOnlineRate(onlineRateByDevMap.containsKey(dev.getDevIndex()) ? onlineRateByDevMap.get(dev.getDevIndex()).toString() : "0");
detail.setOnlineRate(onlineRateByDevMap.containsKey(dev.getDevIndex()) ? onlineRateByDevMap.get(dev.getDevIndex()) : BigDecimal.valueOf(0));
detailList.add(detail);
}
citDetail.setDetailList(detailList);
@@ -94,23 +95,26 @@ public class OnLineRateServiceImpl extends ServiceImpl<OnLineRateMapper, RStatOn
}
@Override
public List<RStatOnlinerateVO> getOnlineRateByDevIds(OnlineRateParam onlineRateParam) {
public List<RStatOnlineRateVO> getOnlineRateByDevIds(OnlineRateParam onlineRateParam) {
return this.baseMapper.getOnlineRateByDevIds(onlineRateParam);
}
private String calculateOnLineRate(List<RStatOnlinerateVO> onlineRateByDev, List<String> deviceIds) {
List<RStatOnlinerateVO> list = onlineRateByDev.stream().filter(x -> deviceIds.contains(x.getDevIndex())).collect(Collectors.toList());
private BigDecimal calculateOnLineRate(List<RStatOnlineRateVO> onlineRateByDev, List<String> deviceIds) {
List<RStatOnlineRateVO> list = onlineRateByDev.stream().filter(x -> deviceIds.contains(x.getDevIndex())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(list)) {
BigDecimal onlineMin = BigDecimal.valueOf(list.stream().mapToLong(RStatOnlinerateVO::getOnlineMin).sum());
BigDecimal offlineMin = BigDecimal.valueOf(list.stream().mapToLong(RStatOnlinerateVO::getOfflineMin).sum());
BigDecimal onlineMin = BigDecimal.valueOf(list.stream().mapToLong(RStatOnlineRateVO::getOnlineMin).sum());
BigDecimal offlineMin = BigDecimal.valueOf(list.stream().mapToLong(RStatOnlineRateVO::getOfflineMin).sum());
BigDecimal sumMin = onlineMin.add(offlineMin);
return onlineMin.divide(sumMin, 2).toString();
if (BigDecimal.ZERO.compareTo(sumMin) == 0) {
BigDecimal.valueOf(0);
}
return onlineMin.multiply(BigDecimal.valueOf(100.0)).divide(sumMin, 2, RoundingMode.HALF_UP);
}
return "0";
return BigDecimal.valueOf(0);
}
private Integer calculateOnLineRate(List<RStatOnlinerateVO> onlineRateByDev, Integer limit) {
return onlineRateByDev.stream().filter(x -> x.getOnlineRate() < limit).collect(Collectors.toList()).size();
private Integer calculateOnLineRate(List<RStatOnlineRateVO> onlineRateByDev, Integer limit, Integer count) {
return count - onlineRateByDev.stream().filter(x -> x.getOnlineRate().doubleValue() >= limit).collect(Collectors.toList()).size();
}

View File

@@ -76,9 +76,17 @@ public interface DeptLineMapper extends BaseMapper<DeptLine> {
List<TerminalGetBase> orgSubStationGet(@Param("list")List<Integer> devType);
List<TerminalGetBase.Extend> orgSubStationInfoGet(@Param("list")List<Integer> devType,@Param("powerFlag")Integer powerFlag,@Param("lineRunFlag") Integer lineRunFlag);
List<TerminalGetBase.Extend> orgSubStationInfoGet(@Param("list")List<Integer> devType,
@Param("powerFlag")Integer powerFlag,
@Param("lineRunFlag") Integer lineRunFlag,
@Param("monitorFlag") Integer monitorFlag
);
List<String> getLineIdByDeptIds(@Param("deptIds")List<String> deptIds,@Param("manufacturer")String manufacturer,@Param("runFlag")List<Integer> runFlag,@Param("dataType")List<Integer> dataType,@Param("objType")String objType);
List<String> getLineIdByDeptIds(@Param("deptIds")List<String> deptIds,
@Param("manufacturer")String manufacturer,
@Param("runFlag")List<Integer> runFlag,
@Param("dataType")List<Integer> dataType,
@Param("objType")String objType);
List<SubGetBase> selectSubStationList(@Param("param") SubstationParam substationParam);

View File

@@ -155,7 +155,7 @@ public interface LineMapper extends BaseMapper<Line> {
* @param deviceType 终端筛选条件
* @param manufacturer 终端厂家
*/
List<Line> getDeviceByCondition(@Param("devIds") List<String> devIds, @Param("deviceType") DeviceType deviceType, @Param("manufacturer") List<SimpleDTO> manufacturer);
List<Line> getDeviceByCondition(@Param("devIds") List<String> devIds, @Param("deviceType") DeviceType deviceType, @Param("deviceInfoParam") DeviceInfoParam manufacturer);
/**
* 查询母线信息

View File

@@ -124,7 +124,10 @@
and lineDetail.Power_Flag = #{powerFlag}
</if>
<if test="lineRunFlag!=null ">
and device.Run_Flag = 0 and lineDetail.Run_Flag = #{lineRunFlag}
and lineDetail.Run_Flag = #{lineRunFlag}
</if>
<if test="monitorFlag!=null ">
and lineDetail.Monitor_Flag = #{monitorFlag}
</if>
</select>
<select id="getLineIdByDeptIds" resultType="string">
@@ -142,10 +145,12 @@
<foreach collection="dataType" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
and device.run_flag in
<foreach collection="runFlag" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
<if test="runFlag!=null and runFlag.size() > 0">
and lineDetail.run_flag in
<foreach collection="runFlag" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
<if test="objType!=null and objType!=''">
and lineDetail.big_obj_type = #{objType}
</if>

View File

@@ -294,6 +294,9 @@
#{item.id}
</foreach>
</if>
<if test="deviceInfoParam.searchValue!=null and deviceInfoParam.lineOrDevice==0">
AND t1.name like CONCAT(CONCAT('%', #{deviceInfoParam.searchValue}), '%')
</if>
<!-- xy -->
<choose>
<when test="deviceInfoParam.statFlag">
@@ -335,12 +338,15 @@
#{item}
</foreach>
</if>
<if test="manufacturer!=null and manufacturer.size()!=0">
<if test="deviceInfoParam.manufacturer!=null and deviceInfoParam.manufacturer.size()!=0">
AND t2.manufacturer in
<foreach collection="manufacturer" open="(" close=")" item="item" separator=",">
<foreach collection="deviceInfoParam.manufacturer" open="(" close=")" item="item" separator=",">
#{item.id}
</foreach>
</if>
<if test="deviceInfoParam.searchValue!=null and deviceInfoParam.lineOrDevice==1">
AND t1.name like CONCAT(CONCAT('%', #{deviceInfoParam.searchValue}), '%')
</if>
<if test="devIds!=null and devIds.size()!=0">
AND t1.id IN
<foreach collection="devIds" open="(" close=")" item="item" separator=",">

View File

@@ -115,7 +115,7 @@ public interface DeptLineService extends IService<DeptLine> {
Map<String, List<TerminalGetBase>> orgSubStationGet(List<Integer> devType);
List<TerminalGetBase.Extend> orgSubStationInfoGet(List<Integer> devType,Integer powerFlag,Integer lineRunFlag);
List<TerminalGetBase.Extend> orgSubStationInfoGet(List<Integer> devType,Integer powerFlag,Integer lineRunFlag,Integer monitorFlag);
List<SubGetBase> getSubStationList(SubstationParam substationParam);

View File

@@ -176,8 +176,8 @@ public class DeptLineServiceImpl extends ServiceImpl<DeptLineMapper, DeptLine> i
}
@Override
public List<TerminalGetBase.Extend> orgSubStationInfoGet(List<Integer> devType, Integer powerFlag, Integer lineRunFlag) {
return deptLineMapper.orgSubStationInfoGet(devType, powerFlag, lineRunFlag);
public List<TerminalGetBase.Extend> orgSubStationInfoGet(List<Integer> devType, Integer powerFlag, Integer lineRunFlag,Integer monitorFlag) {
return deptLineMapper.orgSubStationInfoGet(devType, powerFlag, lineRunFlag,monitorFlag);
}
@Override

View File

@@ -8,18 +8,22 @@ import com.njcn.device.pq.api.GeneralDeviceInfoClient;
import com.njcn.device.pq.api.LineFeignClient;
import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.device.pq.pojo.vo.AreaLineInfoVO;
import com.njcn.event.pojo.po.EventDetailNew;
import com.njcn.event.pojo.po.RmpEventDetailPO;
import com.njcn.event.pojo.vo.AreaSubLineVO;
import com.njcn.event.service.majornetwork.AreaInfoService;
import com.njcn.event.service.majornetwork.EventDetailService;
import com.njcn.harmonic.api.PollutionSubstationClient;
import com.njcn.harmonic.pojo.excel.pollution.UserLinePollution;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
@@ -41,11 +45,12 @@ public class AreaInfoServiceImpl implements AreaInfoService {
private final GeneralDeviceInfoClient generalDeviceInfoClient;
private final LineFeignClient lineFeignClient;
private final EventDetailService eventDetailService;
private final PollutionSubstationClient pollutionSubstationClient;
@Override
public List<AreaSubLineVO> getAreaLineInfo(DeviceInfoParam.GridDiagram deviceInfoParam) {
List<AreaSubLineVO> resultVOList = new ArrayList<>();
List<String> lineIds =new ArrayList<>();
Map<String, UserLinePollution> userMap = new HashMap<>();
if(1==deviceInfoParam.getType()){
if(CollectionUtil.isNotEmpty(deviceInfoParam.getCoutList())){
lineIds.addAll(deviceInfoParam.getCoutList());
@@ -61,6 +66,15 @@ public class AreaInfoServiceImpl implements AreaInfoService {
if (CollectionUtil.isNotEmpty(lineIds)) {
List<AreaLineInfoVO> resList = lineFeignClient.getBaseLineAreaInfo(lineIds).getData();
if(1==deviceInfoParam.getType()){
OnlineRateParam.Info param=new OnlineRateParam.Info();
param.setIds(resList.stream().map(AreaLineInfoVO::getLineId).distinct().collect(Collectors.toList()));
param.setDicData(deviceInfoParam.getDicData());
param.setStartTime(deviceInfoParam.getSearchBeginTime());
param.setEndTime(deviceInfoParam.getSearchEndTime());
userMap = pollutionSubstationClient.getSumList(param).getData();
}
//设置冀北告警监测点类型
if(CollectionUtil.isNotEmpty(deviceInfoParam.getCoutList())){
resList.stream().filter(x->deviceInfoParam.getCoutList().contains(x.getLineId())).forEach(x->x.setType(0));
@@ -86,6 +100,11 @@ public class AreaInfoServiceImpl implements AreaInfoService {
areaLineInfoVO.setNoDealCount(Math.toIntExact(aLong));
}
}
if(userMap.containsKey(areaLineInfoVO.getLineId())){
UserLinePollution userLinePollution = userMap.get(areaLineInfoVO.getLineId());
areaLineInfoVO.setVHarmonicValue(userLinePollution.getVHarmonicValue());
areaLineInfoVO.setUserList(BeanUtil.copyToList(userLinePollution.getUserList(),AreaLineInfoVO.User.class));
}
}
//组装成变电站

View File

@@ -458,13 +458,11 @@ public class RmpEventDetailServiceImpl extends ServiceImpl<RmpEventDetailMapper,
long count90 = list.stream()
.filter(x -> ObjectUtil.isNotNull(x.getSeverity()))
.filter(x -> gwLineAllIds.contains(x.getMeasurementPointId()))
.filter(x -> 0.9 > x.getFeatureAmplitude())
.map(RmpEventDetailPO::getFeatureAmplitude).count();
.filter(x -> 0.9 > x.getSeverity()).count();
long count50 = list.stream()
.filter(x -> ObjectUtil.isNotNull(x.getSeverity()))
.filter(x -> gwLineAllIds.contains(x.getMeasurementPointId()))
.filter(x -> 0.5 > x.getFeatureAmplitude())
.map(RmpEventDetailPO::getFeatureAmplitude).count();
.filter(x -> 0.5 > x.getSeverity()).count();
if(count90>0){
info.add(NumberUtil.round(count90*100.0/list.size(),2).doubleValue());
}else {

View File

@@ -217,6 +217,7 @@ whitelist:
- /pqs-auth/judgeToken/guangZhou
- /webjars/**
- /actuator/**
- /doc.html
- /swagger-resources/**
- /*/v2/api-docs

View File

@@ -0,0 +1,24 @@
package com.njcn.harmonic.api;
import com.njcn.common.pojo.constant.ServerInfo;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.harmonic.api.fallback.RStatLimitRateDFeignClientFallbackFactory;
import com.njcn.harmonic.pojo.excel.pollution.UserLinePollution;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.Map;
@FeignClient(
value = ServerInfo.HARMONIC,
path = "/PollutionSubstation",
fallbackFactory = RStatLimitRateDFeignClientFallbackFactory.class,
contextId = "PollutionSubstation")
public interface PollutionSubstationClient {
@PostMapping(value ="/getSumList")
HttpResult<Map<String, UserLinePollution>> getSumList(@RequestBody OnlineRateParam.Info param);
}

View File

@@ -0,0 +1,43 @@
package com.njcn.harmonic.api.fallback;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.pojo.response.HttpResult;
import com.njcn.device.biz.utils.DeviceEnumUtil;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.harmonic.api.PollutionSubstationClient;
import com.njcn.harmonic.pojo.excel.pollution.UserLinePollution;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* @author hongawen
* @version 1.0.0
* @date 2023年07月21日 14:31
*/
@Slf4j
@Component
public class PollutionSubstationClientFactory implements FallbackFactory<PollutionSubstationClient> {
@Override
public PollutionSubstationClient create(Throwable throwable) {
//判断抛出异常是否为解码器抛出的业务异常
Enum<?> exceptionEnum = CommonResponseEnum.SERVICE_FALLBACK;
if (throwable.getCause() instanceof BusinessException) {
BusinessException businessException = (BusinessException) throwable.getCause();
exceptionEnum = DeviceEnumUtil.getExceptionEnum(businessException.getResult());
}
Enum<?> finalExceptionEnum = exceptionEnum;
return new PollutionSubstationClient() {
@Override
public HttpResult<Map<String, UserLinePollution>> getSumList(OnlineRateParam.Info param) {
log.error("{}异常,降级处理,异常为:{}", "国网上送-典型源荷指标统计数据", throwable.toString());
return new HttpResult<>(CommonResponseEnum.FAIL.getCode(),CommonResponseEnum.FAIL.getMessage());
}
};
}
}

View File

@@ -24,6 +24,8 @@ public class LinePollution implements Serializable {
@ApiModelProperty("变电站")
private String subStationName;
private String subStationId;
/**
* 终端名称
*/

View File

@@ -0,0 +1,27 @@
package com.njcn.harmonic.pojo.excel.pollution;
import lombok.Data;
import java.util.List;
/**
* @author wr
* @description
* @date 2025/12/9 21:12
*/
@Data
public class UserLinePollution {
private String lineId;
private Double vHarmonicValue;
private List<User> userList;
@Data
public static class User{
private String id;
private String projectName;
private String stationId;
private String lineId;
private String city;
}
}

View File

@@ -9,8 +9,10 @@ import com.njcn.common.utils.HttpResultUtil;
import com.njcn.common.utils.LogUtil;
import com.njcn.device.biz.pojo.dto.PollutionLineDTO;
import com.njcn.device.pq.pojo.dto.PollutionSubstationDTO;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.harmonic.pojo.excel.pollution.LinePollution;
import com.njcn.harmonic.pojo.excel.pollution.SubstationPollution;
import com.njcn.harmonic.pojo.excel.pollution.UserLinePollution;
import com.njcn.harmonic.pojo.param.HarmonicPublicParam;
import com.njcn.harmonic.pojo.param.PollutionSubstationQuryParam;
import com.njcn.harmonic.pojo.param.StatSubstationBizBaseParam;
@@ -30,6 +32,9 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* Description:
@@ -157,4 +162,16 @@ public class PollutionSubstationController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, gdPollutions, methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@ApiOperation(value = "监测点和敏感用户谐波污染值列表")
@PostMapping(value = "/getSumList")
public HttpResult<Map<String, UserLinePollution>> getSumList(@RequestBody OnlineRateParam.Info param) {
String methodDescribe = getMethodDescribe("getSumList");
param.setStartTime(DateUtil.beginOfDay(DateUtil.parse(param.getStartTime())).toString());
param.setEndTime(DateUtil.endOfDay(DateUtil.parse(param.getEndTime())).toString());
List<UserLinePollution> sumList = pollutionSubstationService.getSumList(param);
Map<String, UserLinePollution> sumMap = sumList.stream().collect(Collectors.toMap(UserLinePollution::getLineId, Function.identity()));
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, sumMap, methodDescribe);
}
}

View File

@@ -6,9 +6,11 @@ import com.njcn.device.pq.pojo.dto.PollutionGridDiagramDTO;
import com.njcn.device.biz.pojo.dto.PollutionLineDTO;
import com.njcn.device.pq.pojo.dto.PollutionSubstationDTO;
import com.njcn.device.pq.pojo.param.GridDiagramParam;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.device.pq.pojo.vo.GridDiagramVO;
import com.njcn.harmonic.pojo.excel.pollution.LinePollution;
import com.njcn.harmonic.pojo.excel.pollution.SubstationPollution;
import com.njcn.harmonic.pojo.excel.pollution.UserLinePollution;
import com.njcn.harmonic.pojo.param.HarmonicPublicParam;
import com.njcn.harmonic.pojo.param.PollutionSubstationQuryParam;
import com.njcn.harmonic.pojo.param.StatSubstationBizBaseParam;
@@ -110,4 +112,7 @@ public interface PollutionSubstationService extends IService<RStatPollutionSubst
* @param param
*/
List<SubstationPollution> downPollutionSubCalc(StatSubstationBizBaseParam param);
List<UserLinePollution> getSumList(OnlineRateParam.Info param);
}

View File

@@ -8,7 +8,7 @@ import com.njcn.device.pq.api.GeneralDeviceInfoClient;
import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.device.pq.pojo.vo.RStatOnlinerateVO;
import com.njcn.device.pq.pojo.vo.RStatOnlineRateVO;
import com.njcn.harmonic.mapper.OnlineRateDataMapper;
import com.njcn.harmonic.pojo.dto.PublicDTO;
import com.njcn.harmonic.pojo.vo.OnlineRateCensusVO;
@@ -143,7 +143,7 @@ public class OnlineRateDataServiceImpl implements OnlineRateDataService {
param.setIds(deviceIndexes);
param.setStartTime(DateUtil.beginOfDay(DateUtil.parse(startTime)).toString());
param.setEndTime( DateUtil.endOfDay(DateUtil.parse(endTime)).toString());
List<RStatOnlinerateVO> data = generalDeviceInfoClient.getOnlineRateByDevIds(param).getData();
List<RStatOnlineRateVO> data = generalDeviceInfoClient.getOnlineRateByDevIds(param).getData();
if (CollUtil.isNotEmpty(data)) {
data.forEach(po -> {
PublicDTO publicDTO = new PublicDTO();

View File

@@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.common.config.GeneralInfo;
import com.njcn.common.pojo.constant.BizParamConstant;
import com.njcn.common.pojo.dto.SimpleDTO;
import com.njcn.common.pojo.enums.response.CommonResponseEnum;
import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.utils.PubUtils;
@@ -34,6 +35,7 @@ import com.njcn.device.pq.api.SubstationFeignClient;
import com.njcn.device.pq.enums.LineBaseEnum;
import com.njcn.device.pq.enums.PowerFlagEnum;
import com.njcn.device.pq.pojo.dto.*;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.GridDiagramParam;
import com.njcn.device.pq.pojo.param.LineBaseQueryParam;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
@@ -41,7 +43,7 @@ import com.njcn.device.pq.pojo.po.Line;
import com.njcn.device.pq.pojo.po.LineDetail;
import com.njcn.device.pq.pojo.vo.GridDiagramVO;
import com.njcn.device.pq.pojo.vo.RStatIntegrityVO;
import com.njcn.device.pq.pojo.vo.RStatOnlinerateVO;
import com.njcn.device.pq.pojo.vo.RStatOnlineRateVO;
import com.njcn.event.api.RmpEventDetailFeignClient;
import com.njcn.event.pojo.dto.EventCount;
import com.njcn.harmonic.mapper.*;
@@ -128,7 +130,6 @@ public class PollutionSubstationServiceImpl extends ServiceImpl<RStatPollutionSu
private final RmpEventDetailFeignClient detailFeignClient;
private final CommLineClient commLineClient;
/**
* @param pollutionSubstationQuryParam
* @Description: getPollutionSubstationData
@@ -758,8 +759,7 @@ public class PollutionSubstationServiceImpl extends ServiceImpl<RStatPollutionSu
public GridDiagramVO getPollutionAlarmData(StatSubstationBizBaseParam param) {
DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
deptGetLineParam.setDeptId(param.getId());
deptGetLineParam.setPowerFlag(0);
deptGetLineParam.setLineRunFlag(0);
deptGetLineParam.setIsUpToGrid(param.getIsUpToGrid());
List<DeptGetSubStationDTO.Info> deptGetChildrenMoreDTOS = commTerminalGeneralClient.deptGetSubStationInfo(deptGetLineParam).getData();
//获取全部变电站信息
List<SubGetBase> collect = deptGetChildrenMoreDTOS.stream().flatMap(x -> x.getStationIds().stream()).collect(Collectors.toList());
@@ -880,25 +880,27 @@ public class PollutionSubstationServiceImpl extends ServiceImpl<RStatPollutionSu
@Override
public List<List<String>> getPollutionAlarmList(GridDiagramParam param) {
List<List<String>> info = new ArrayList<>();
param.getDeviceInfoParam().setPowerFlag(0);
param.getDeviceInfoParam().setLineRunFlag(0);
List<GeneralDeviceDTO> data = generalDeviceInfoClient.getPracticalRunDeviceInfo(param.getDeviceInfoParam()).getData();
List<String> subIds = data.stream().flatMap(x -> x.getSubIndexes().stream()).collect(Collectors.toList());
List<RStatPollutionSubstationM> substationMlist = pollutionSubstationMMapper.selectList(new LambdaQueryWrapper<RStatPollutionSubstationM>()
.select(RStatPollutionSubstationM::getSubstationId, RStatPollutionSubstationM::getValue)
.in(CollUtil.isNotEmpty(subIds), RStatPollutionSubstationM::getSubstationId, subIds)
.in(CollUtil.isNotEmpty(param.getIds()), RStatPollutionSubstationM::getPollutionType, param.getIds())
.ge(StrUtil.isNotBlank(param.getSearchBeginTime()), RStatPollutionSubstationM::getDataDate, DateUtil.beginOfDay(DateUtil.parse(param.getSearchBeginTime())))
.le(StrUtil.isNotBlank(param.getSearchEndTime()), RStatPollutionSubstationM::getDataDate, DateUtil.endOfDay(DateUtil.parse(param.getSearchEndTime())))
);
DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
deptGetLineParam.setDeptId(param.getOrgId());
deptGetLineParam.setIsUpToGrid(param.getDeviceInfoParam().getMonitorFlag());
List<DeptGetSubStationDTO.Info> deptSub = commTerminalGeneralClient.deptGetSubStationInfo(deptGetLineParam).getData();
List<String> lineIdList = deptSub.stream()
.flatMap(x -> x.getStationIds().stream().flatMap(d -> d.getUnitChildrenList().stream()))
.distinct()
.collect(Collectors.toList());
List<RMpPollutionDPO> rMpPollutionDPOS = rMpPollutionDPOMapper.selectSumList(lineIdList,
Arrays.asList("b33a2946cb2d4f2641f485cf7720ecc7"),
DateUtil.beginOfDay(DateUtil.parse(param.getSearchBeginTime())).toString(),
DateUtil.endOfDay(DateUtil.parse(param.getSearchEndTime())).toString());
List<String> dept;
for (GeneralDeviceDTO datum : data) {
List<RStatPollutionSubstationM> collect = substationMlist.stream().filter(x -> datum.getSubIndexes().contains(x.getSubstationId())).collect(Collectors.toList());
dept = new ArrayList<>();
dept.add(datum.getName());
dept.add(String.valueOf(datum.getSubIndexes().size()));
dept.addAll(addList(collect));
info.add(dept);
for (DeptGetSubStationDTO.Info datum : deptSub) {
if(!datum.getUnitId().equals(param.getOrgId())){
dept = new ArrayList<>();
dept.add(datum.getUnitName());
dept.add(String.valueOf(datum.getStationIds().size()));
dept.addAll(addList(rMpPollutionDPOS, datum.getStationIds()));
info.add(dept);
}
}
return info;
}
@@ -966,23 +968,26 @@ public class PollutionSubstationServiceImpl extends ServiceImpl<RStatPollutionSu
@Override
public List<LinePollution> downPollutionLineCalc(StatSubstationBizBaseParam param) {
List<LinePollution> finalLinePollutionList = pollutionCalcList(param);
DeviceInfoParam deviceInfoParam=new DeviceInfoParam();
deviceInfoParam.setLineRunFlag(0);
deviceInfoParam.setDeptIndex(param.getId());
deviceInfoParam.setStatisticalType(new SimpleDTO());
List<GeneralDeviceDTO> data1 = generalDeviceInfoClient.getPracticalRunDeviceInfo(deviceInfoParam).getData();
List<String> lineIdList = data1.stream().flatMap(x -> x.getLineIndexes().stream()).distinct().collect(Collectors.toList());
List<LinePollution> finalLinePollutionList = pollutionCalcList(param,lineIdList);
// 全部监测点计算完毕后根据污染值从大到小进行排序
finalLinePollutionList = finalLinePollutionList.stream()
finalLinePollutionList = finalLinePollutionList.stream()
.sorted(Comparator.comparing(LinePollution::getHarmonicValue).reversed())
.collect(Collectors.toList());
return finalLinePollutionList;
return finalLinePollutionList;
}
private List<LinePollution> pollutionCalcList(StatSubstationBizBaseParam param) {
private List<LinePollution> pollutionCalcList(StatSubstationBizBaseParam param,List<String> lineIdList) {
String startDate = param.getStartTime();
String endDate = param.getEndTime();
List<LinePollution> linePollutionList = new ArrayList<>();
GridDiagramParam eventParam = new GridDiagramParam();
List<String> lineIdList = generalDeviceInfoClient.deptGetRunLine(param.getId()).getData();
eventParam.setIds(lineIdList);
eventParam.setSearchBeginTime(param.getStartTime());
@@ -1001,11 +1006,11 @@ public class PollutionSubstationServiceImpl extends ServiceImpl<RStatPollutionSu
onlineRateParam.setStartTime(startDate);
onlineRateParam.setEndTime(endDate);
List<RStatIntegrityVO> integrityVOS = lineFeignClient.getOnIntegrityByIds(onlineRateParam).getData();
Map<String, Double> integrityMap = integrityVOS.stream().collect(Collectors.toMap(RStatIntegrityVO::getLineIndex, RStatIntegrityVO::getIntegrityRate));
Map<String, BigDecimal> integrityMap = integrityVOS.stream().collect(Collectors.toMap(RStatIntegrityVO::getLineIndex, RStatIntegrityVO::getIntegrityRate));
//获取装置在线率
List<RStatOnlinerateVO> onLineRateVOS = generalDeviceInfoClient.getOnlineRateByDevIds(onlineRateParam).getData();
Map<String, Float> onlineRateMap = onLineRateVOS.stream().collect(Collectors.toMap(RStatOnlinerateVO::getDevIndex, RStatOnlinerateVO::getOnlineRate));
List<RStatOnlineRateVO> onLineRateVOS = generalDeviceInfoClient.getOnlineRateByDevIds(onlineRateParam).getData();
Map<String, BigDecimal> onlineRateMap = onLineRateVOS.stream().collect(Collectors.toMap(RStatOnlineRateVO::getDevIndex, RStatOnlineRateVO::getOnlineRate));
List<RMpPollutionDPO> rMpPollutionDPOS = rMpPollutionDPOMapper.selectSumList(lineIdList, param.getIds(), startDate, endDate);
Map<String, Double> calcMap = new HashMap<>();
@@ -1015,20 +1020,20 @@ public class PollutionSubstationServiceImpl extends ServiceImpl<RStatPollutionSu
}
if (CollUtil.isNotEmpty(lineIdList)) {
// 获取谐波电压数据&总畸变率&越限限值计算基础污染值
for (String lineId: lineIdList) {
if(lineMap.containsKey(lineId)){
for (String lineId : lineIdList) {
if (lineMap.containsKey(lineId)) {
PollutionLineInfoDTO data = lineMap.get(lineId);
LinePollution linePollution = new LinePollution();
// 获取暂态数据
BeanUtil.copyProperties(eventMap.get(lineId), linePollution);
BeanUtil.copyProperties(data, linePollution, true);
//监测点在线率
Float vo2 = onlineRateMap.get(data.getDeviceId());
linePollution.setOnlineRate(Objects.isNull(vo2) ? 0.0f : vo2);
BigDecimal vo2 = onlineRateMap.get(data.getDeviceId());
linePollution.setOnlineRate(Objects.isNull(vo2) ? 0.0f : vo2.floatValue());
//获取监测点数据完整性
linePollution.setIntegrity(Objects.isNull(integrityMap.get(lineId)) ? 0.0 : integrityMap.get(lineId)>100?100.0:integrityMap.get(lineId));
linePollution.setIntegrity(Objects.isNull(integrityMap.get(lineId)) ? 0.0 : integrityMap.get(lineId).doubleValue() > 100 ? 100.0 : integrityMap.get(lineId).doubleValue());
// 计算谐波的污染值
linePollution.setHarmonicValue(calcMap.containsKey(lineId)?calcMap.get(lineId)>100?100.0:integrityMap.get(lineId):0.0);
linePollution.setHarmonicValue(calcMap.containsKey(lineId) ? calcMap.get(lineId).doubleValue() : 0.0);
linePollution.setInterval(data.getTimeInterval());
linePollutionList.add(linePollution);
}
@@ -1040,7 +1045,7 @@ public class PollutionSubstationServiceImpl extends ServiceImpl<RStatPollutionSu
@Override
public void downPollutionUserCalc(StatSubstationBizBaseParam param) {
// 处理干扰源用户的报告
List<LinePollution> loadTypeLineList = pollutionCalcList(param);
List<LinePollution> loadTypeLineList = pollutionCalcList(param,null);
/**
* 1、首先过滤重要变电站、一类变电站、跨省计量关点 todo...待优化
* 2、过滤后以监测对象分组统计数据有多个测点的需要出结果
@@ -1064,7 +1069,6 @@ public class PollutionSubstationServiceImpl extends ServiceImpl<RStatPollutionSu
objPollution.setObjVValue(PubUtils.doubleRound(2, objVValue) + "");
// 处理该监测对象下面监测点的信息
List<LoadTypeLineItemPollution> loadTypeLineItemPollutions = new ArrayList<>();
for (LinePollution linePollution : linePollutions) {
@@ -1076,7 +1080,7 @@ public class PollutionSubstationServiceImpl extends ServiceImpl<RStatPollutionSu
objPollutions.add(objPollution);
}
// 排序
objPollutions= objPollutions.stream()
objPollutions = objPollutions.stream()
.sorted(Comparator.comparing(ObjPollution::getObjVValue).reversed())
.collect(Collectors.toList());
ExcelUtil.exportExcel("用户谐波电压污染值" + param.getEndTime() + ".xlsx", ObjPollution.class, objPollutions);
@@ -1084,27 +1088,33 @@ public class PollutionSubstationServiceImpl extends ServiceImpl<RStatPollutionSu
@Override
public List<SubstationPollution> downPollutionSubCalc(StatSubstationBizBaseParam param) {
DeviceInfoParam deviceInfoParam=new DeviceInfoParam();
deviceInfoParam.setDeptIndex(param.getId());
deviceInfoParam.setStatisticalType(new SimpleDTO());
List<GeneralDeviceDTO> data1 = generalDeviceInfoClient.getPracticalAllDeviceInfoAsSubstation(deviceInfoParam).getData();
List<String> lineIdList = data1.stream().flatMap(x -> x.getLineIndexes().stream()).distinct().collect(Collectors.toList());
List<SubstationPollution> substationPollutions = new ArrayList<>();
// 处理干扰源用户的报告
List<LinePollution> linePollutionList = pollutionCalcList(param);
List<LinePollution> linePollutionList = pollutionCalcList(param,lineIdList);
// 以变电站分组
Map<String, List<LinePollution>> subMap = linePollutionList.stream()
.collect(Collectors.groupingBy(x->x.getGdName()+"_"+x.getSubStationName()+"_"+x.getSubVoltage()));
subMap.forEach((key,value)->{
.collect(Collectors.groupingBy(x -> x.getSubStationId()+"_"+ x.getGdName() + "_" +x.getSubStationName() + "_" + x.getSubVoltage()));
subMap.forEach((key, value) -> {
String[] name = key.split("_");
SubstationPollution substationPollution = new SubstationPollution();
substationPollution.setGdName(name[0]);
substationPollution.setSubStationName(name[1]);
substationPollution.setSubVoltage(name[2]);
substationPollution.setGdName(name[1]);
substationPollution.setSubStationName(name[2]);
substationPollution.setSubVoltage(name[3]);
double subVValue = value.stream()
.mapToDouble(o -> o.getHarmonicValue())
.average()
.orElse(0.0);
.sum();
substationPollution.setSubVStationValue(PubUtils.doubleRound(2, subVValue) + "");
List<PowerFlagPollution> lineItemPollutionList = new ArrayList<>();
for (LinePollution linePollution : value) {
PowerFlagPollution lineItemPollution = new PowerFlagPollution();
BeanUtil.copyProperties(linePollution, lineItemPollution, true);
lineItemPollution.setVHarmonicValue(linePollution.getHarmonicValue());
lineItemPollutionList.add(lineItemPollution);
}
substationPollution.setPowerFlagPollutionList(lineItemPollutionList);
@@ -1112,30 +1122,65 @@ public class PollutionSubstationServiceImpl extends ServiceImpl<RStatPollutionSu
});
substationPollutions.sort(Comparator.comparingDouble(o -> Double.parseDouble(o.getSubVStationValue())));
Collections.reverse(substationPollutions);
return substationPollutions;
return substationPollutions;
}
@Override
public List<UserLinePollution> getSumList(OnlineRateParam.Info param) {
List<UserLinePollution> info = new ArrayList<>();
UserReportParam userReportParam = new UserReportParam();
userReportParam.setUserType(6);
List<UserLedgerVO> userLedgerVOList = userLedgerFeignClient.selectUserList(userReportParam).getData();
Map<String, List<UserLedgerVO>> userMap = userLedgerVOList.stream().filter(x -> StrUtil.isNotBlank(x.getLineId())).collect(Collectors.groupingBy(UserLedgerVO::getLineId));
List<RMpPollutionDPO> rMpPollutionDPOS = rMpPollutionDPOMapper.selectSumList(param.getIds(), param.getDicData(), param.getStartTime(), param.getEndTime());
Map<String, Double> pollutionMap = rMpPollutionDPOS.stream().collect(Collectors.toMap(RMpPollutionDPO::getLineId, RMpPollutionDPO::getValue));
UserLinePollution user;
for (String id : param.getIds()) {
user = new UserLinePollution();
user.setLineId(id);
if (pollutionMap.containsKey(id)) {
user.setVHarmonicValue(pollutionMap.get(id));
} else {
user.setVHarmonicValue(0.0);
}
List<UserLinePollution.User> userList = new ArrayList<>();
if (userMap.containsKey(id)) {
List<UserLedgerVO> userLedgerVOS = userMap.get(id);
userList.addAll(BeanUtil.copyToList(userLedgerVOS, UserLinePollution.User.class));
}
user.setUserList(userList);
info.add(user);
}
return info;
}
private List<String> addList(List<RStatPollutionSubstationM> substationMlist) {
private List<String> addList(List<RMpPollutionDPO> pollLinelist, List<SubGetBase> notNum) {
List<String> info = new ArrayList<>();
Integer num1 = 0;
Integer num2 = 0;
Integer num3 = 0;
Integer num4 = 0;
Integer num5 = 0;
for (RStatPollutionSubstationM x : substationMlist) {
Double value = x.getValue();
//无污染 轻微污染 轻度污染 中度污染 重度污染
if (0 <= value && value < 1) {
num1++;
} else if (1 <= value && value < 1.2) {
num2++;
} else if (1.2 <= value && value < 1.6) {
num3++;
} else if (1.6 <= value && value < 2) {
num4++;
} else if (2 <= value) {
num5++;
Integer num6 = 0;
for (SubGetBase subGetBase : notNum) {
List<RMpPollutionDPO> linePoll = pollLinelist.stream().filter(x -> subGetBase.getUnitChildrenList().contains(x.getLineId())).collect(Collectors.toList());
if(CollUtil.isNotEmpty(linePoll)){
Double value = linePoll.stream().mapToDouble(RMpPollutionDPO::getValue).sum();
//无污染 轻微污染0-100 轻度污染100-1000 中度污染1000-10000 重度污染10000
if (0 == value) {
num1++;
} else if (0 < value && value < 100) {
num2++;
} else if (100 <= value && value < 1000) {
num3++;
} else if (1000 <= value && value < 10000) {
num4++;
} else if (10000 <= value) {
num5++;
}
}else{
num6++;
}
}
info.add(String.valueOf(num1));
@@ -1143,6 +1188,7 @@ public class PollutionSubstationServiceImpl extends ServiceImpl<RStatPollutionSu
info.add(String.valueOf(num3));
info.add(String.valueOf(num4));
info.add(String.valueOf(num5));
info.add(String.valueOf(num6));
return info;
}
}

View File

@@ -72,8 +72,6 @@ public class RMpTargetWarnDServiceImpl extends ServiceImpl<RMpTargetWarnDMapper,
List<Dept> data = deptFeignClient.getDirectSonSelf(param.getId()).getData();
DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
deptGetLineParam.setDeptId(param.getId());
deptGetLineParam.setPowerFlag(0);
deptGetLineParam.setLineRunFlag(0);
List<DeptGetSubStationDTO.Info> deptGetChildrenMoreDTOS = commTerminalGeneralClient.deptGetSubStationInfo(deptGetLineParam).getData();
List<String> lineIDS = deptGetChildrenMoreDTOS.stream()

View File

@@ -7,7 +7,7 @@ import com.njcn.device.pq.api.GeneralDeviceInfoClient;
import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO;
import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.device.pq.pojo.vo.RStatOnlinerateVO;
import com.njcn.device.pq.pojo.vo.RStatOnlineRateVO;
import com.njcn.harmonic.mapper.TerminalDataMapper;
import com.njcn.harmonic.pojo.dto.PublicDTO;
import com.njcn.harmonic.pojo.vo.TerminalCensusVO;
@@ -211,7 +211,7 @@ public class TerminalServiceImpl implements TerminalService {
param.setIds(deviceIndexes);
param.setStartTime( DateUtil.beginOfDay(DateUtil.parse(startTime)).toString());
param.setEndTime( DateUtil.endOfDay(DateUtil.parse(endTime)).toString());
List<RStatOnlinerateVO> data = generalDeviceInfoClient.getOnlineRateByDevIds(param).getData();
List<RStatOnlineRateVO> data = generalDeviceInfoClient.getOnlineRateByDevIds(param).getData();
if (CollUtil.isNotEmpty(data)) {
data.forEach(po -> {
PublicDTO publicDTO = new PublicDTO();

View File

@@ -25,7 +25,7 @@ import com.njcn.device.pq.pojo.param.DeviceInfoParam;
import com.njcn.device.pq.pojo.param.OnlineRateParam;
import com.njcn.device.pq.pojo.po.RStatIntegrityD;
import com.njcn.device.pq.pojo.vo.GridDiagramVO;
import com.njcn.device.pq.pojo.vo.RStatOnlinerateVO;
import com.njcn.device.pq.pojo.vo.RStatOnlineRateVO;
import com.njcn.harmonic.mapper.RStatLimitTargetDMapper;
import com.njcn.harmonic.pojo.param.StatSubstationBizBaseParam;
import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO;
@@ -103,7 +103,7 @@ public class RStatLimitServiceImpl implements RStatLimitService {
integrityList = lineIntegrityClient.getIntegrityByLineIds(lineIds, deviceInfoParam.getSearchBeginTime(), deviceInfoParam.getSearchEndTime()).getData();
}
//终端在线率
List<RStatOnlinerateVO> onlineRateList =new ArrayList<>();
List<RStatOnlineRateVO> onlineRateList =new ArrayList<>();
if(CollUtil.isNotEmpty(devIds)){
OnlineRateParam param=new OnlineRateParam();
param.setIds(devIds);
@@ -580,7 +580,7 @@ public class RStatLimitServiceImpl implements RStatLimitService {
}
private void onLineAndIntegrity(List<String> lineIds, List<RStatIntegrityD> onIntegrityByIds, List<String> devIds, List<RStatOnlinerateVO> onlineRateByDevIds,List<RStatLimitTargetVO> limitTargetList, GridDiagramVO.LineData lineData) {
private void onLineAndIntegrity(List<String> lineIds, List<RStatIntegrityD> onIntegrityByIds, List<String> devIds, List<RStatOnlineRateVO> onlineRateByDevIds, List<RStatLimitTargetVO> limitTargetList, GridDiagramVO.LineData lineData) {
//监测完整率
List<RStatIntegrityD> integrityDS = onIntegrityByIds.stream().filter(x -> lineIds.contains(x.getLineIndex())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(integrityDS)) {
@@ -591,10 +591,10 @@ public class RStatLimitServiceImpl implements RStatLimitService {
lineData.setIntegrityRate(0.0f);
}
//终端在线率
List<RStatOnlinerateVO> onlineRateDS = onlineRateByDevIds.stream().filter(x -> devIds.contains(x.getDevIndex())).collect(Collectors.toList());
List<RStatOnlineRateVO> onlineRateDS = onlineRateByDevIds.stream().filter(x -> devIds.contains(x.getDevIndex())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(onlineRateDS)) {
double onlineTime = onlineRateDS.stream().mapToDouble(RStatOnlinerateVO::getOnlineMin).sum();
double offlineTime = onlineRateDS.stream().mapToDouble(RStatOnlinerateVO::getOfflineMin).sum();
double onlineTime = onlineRateDS.stream().mapToDouble(RStatOnlineRateVO::getOnlineMin).sum();
double offlineTime = onlineRateDS.stream().mapToDouble(RStatOnlineRateVO::getOfflineMin).sum();
lineData.setOnLineRate(Math.min(NumberUtil.round(onlineTime * 100.0 / (onlineTime + offlineTime), 2).floatValue(),100));
} else {
lineData.setOnLineRate(0.0f);

View File

@@ -19,6 +19,8 @@ public class UserLedgerVO implements Serializable {
private String stationId;
private String lineId;
private String city;
}

View File

@@ -1165,6 +1165,9 @@ public class UserReportPOServiceImpl extends ServiceImpl<UserReportPOMapper, Use
if(StrUtil.isNotBlank(userReportParam.getStationId())){
lambdaQueryWrapper.eq(UserReportPO::getStationId,userReportParam.getStationId());
}
if (ObjectUtil.isNotNull(userReportParam.getUserType())) {
lambdaQueryWrapper.eq(UserReportPO::getUserType, userReportParam.getUserType());
}
lambdaQueryWrapper.eq(UserReportPO::getState,DataStateEnum.ENABLE.getCode());

View File

@@ -9,7 +9,6 @@ import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.util.List;
@@ -60,9 +59,7 @@ public class ComponentParam {
private String image;
@ApiModelProperty("时间标识")
private String timeKey;
private List<String> timeKeys;
@ApiModelProperty("系统类型")
@NotBlank(message = "系统类型不为空")
@@ -84,6 +81,4 @@ public class ComponentParam {
}
}

View File

@@ -1,14 +1,15 @@
package com.njcn.user.pojo.po;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.njcn.db.bo.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
*
* @author xuyang
* @since 2021-12-13
*/
@@ -80,5 +81,13 @@ public class Component extends BaseEntity {
private String timeKey;
@TableField(exist = false)
private List<String> timeKeys;
public String getTimeKey() {
if (timeKeys != null) {
timeKey = String.join(",", timeKeys);
}
return timeKey;
}
}

View File

@@ -52,6 +52,9 @@ public class ComponentVO implements Serializable {
@ApiModelProperty("时间标识")
private String timeKey;
@ApiModelProperty("时间标识集合")
private List<String> timeKeys;
@ApiModelProperty("子级")
List<ComponentVO> children;

View File

@@ -2,6 +2,7 @@ package com.njcn.user.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.common.pojo.exception.BusinessException;
@@ -25,7 +26,10 @@ import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
@@ -89,17 +93,18 @@ public class ComponentServiceImpl extends ServiceImpl<ComponentMapper, Component
List<ComponentVO> list = new ArrayList<>();
List<ComponentVO> result = new ArrayList<>();
List<ComponentDTO> componentList = componentMapper.getAllComponent();
if (!CollectionUtils.isEmpty(componentList)){
if (!CollectionUtils.isEmpty(componentList)) {
componentList.forEach(item -> {
ComponentVO componentVO = new ComponentVO();
BeanUtil.copyProperties(item, componentVO);
componentVO.setTimeKeys(StrUtil.split(item.getTimeKey(), ","));
// componentVO.setFunctionGroup(Arrays.stream(item.getFunctionGroup().split(",")).map(s -> Integer.valueOf(s.trim())).collect(Collectors.toList()));
list.add(componentVO);
});
Map<String,List<ComponentVO>> map = list.stream().filter(m->!Objects.isNull(m.getSystemType())).collect(Collectors.groupingBy(ComponentVO::getSystemType));
map.forEach((k,v)->{
Map<String, List<ComponentVO>> map = list.stream().filter(m -> !Objects.isNull(m.getSystemType())).collect(Collectors.groupingBy(ComponentVO::getSystemType));
map.forEach((k, v) -> {
DictData dictData = dicDataFeignClient.getDicDataById(k).getData();
if (Objects.isNull(dictData)){
if (Objects.isNull(dictData)) {
throw new BusinessException(SystemResponseEnum.SYSTEM_TYPE_EMPTY);
}
ComponentVO componentVO = new ComponentVO();
@@ -107,9 +112,9 @@ public class ComponentServiceImpl extends ServiceImpl<ComponentMapper, Component
componentVO.setName(dictData.getName());
componentVO.setChildren(
v.stream()
.filter(fun -> Objects.equals(ComponentState.FATHER_PID, fun.getPid()))
.peek(funS -> funS.setChildren(getChildCategoryList(funS, v)))
.collect(Collectors.toList()));
.filter(fun -> Objects.equals(ComponentState.FATHER_PID, fun.getPid()))
.peek(funS -> funS.setChildren(getChildCategoryList(funS, v)))
.collect(Collectors.toList()));
result.add(componentVO);
});
}
@@ -132,19 +137,20 @@ public class ComponentServiceImpl extends ServiceImpl<ComponentMapper, Component
}
list = componentMapper.getComponentByList(componentList);
}
if (CollectionUtil.isEmpty(list)){
if (CollectionUtil.isEmpty(list)) {
return result;
}
list.forEach(item -> {
ComponentVO componentVO = new ComponentVO();
BeanUtil.copyProperties(item, componentVO);
componentVO.setTimeKeys(StrUtil.split(item.getTimeKey(), ","));
// componentVO.setFunctionGroup(Arrays.stream(item.getFunctionGroup().split(",")).map(s -> Integer.valueOf(s.trim())).collect(Collectors.toList()));
componentVOList.add(componentVO);
});
Map<String,List<ComponentVO>> map = componentVOList.stream().collect(Collectors.groupingBy(ComponentVO::getSystemType));
map.forEach((k, v)->{
Map<String, List<ComponentVO>> map = componentVOList.stream().collect(Collectors.groupingBy(ComponentVO::getSystemType));
map.forEach((k, v) -> {
DictData dictData = dicDataFeignClient.getDicDataById(k).getData();
if (Objects.isNull(dictData)){
if (Objects.isNull(dictData)) {
throw new BusinessException(SystemResponseEnum.SYSTEM_TYPE_EMPTY);
}
ComponentVO componentVO = new ComponentVO();
@@ -167,7 +173,7 @@ public class ComponentServiceImpl extends ServiceImpl<ComponentMapper, Component
component.setId("0");
component.setName("");
list.add(component);
list.addAll(this.lambdaQuery().eq(Component::getSystemType, systemType).eq(Component::getPid,ComponentState.FATHER_PID).eq(Component::getState, ComponentState.ENABLE).list());
list.addAll(this.lambdaQuery().eq(Component::getSystemType, systemType).eq(Component::getPid, ComponentState.FATHER_PID).eq(Component::getState, ComponentState.ENABLE).list());
return list;
}