稳态报告接口迁移(后续需要合并代码)

This commit is contained in:
cdf
2025-12-05 09:12:28 +08:00
parent 29681d200d
commit e6df543f1d
22 changed files with 3884 additions and 6 deletions

View File

@@ -9,6 +9,7 @@ import com.njcn.common.utils.HttpResultUtil;
import com.njcn.csdevice.api.fallback.CsLineClientFallbackFactory; import com.njcn.csdevice.api.fallback.CsLineClientFallbackFactory;
import com.njcn.csdevice.pojo.param.CsLineParam; import com.njcn.csdevice.pojo.param.CsLineParam;
import com.njcn.csdevice.pojo.po.CsLinePO; import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.csdevice.pojo.vo.LineDetailDataVO;
import com.njcn.device.biz.pojo.po.Overlimit; import com.njcn.device.biz.pojo.po.Overlimit;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
@@ -71,4 +72,7 @@ public interface CsLineFeignClient {
@PostMapping("/list") @PostMapping("/list")
HttpResult<List<CsLinePO>> list(@RequestBody CsLinePO param); HttpResult<List<CsLinePO>> list(@RequestBody CsLinePO param);
@PostMapping("/getLineDetailData")
HttpResult<LineDetailDataVO> getLineDetailData(@RequestParam("id") String id);
} }

View File

@@ -6,10 +6,12 @@ import com.njcn.common.pojo.response.HttpResult;
import com.njcn.csdevice.api.CsLineFeignClient; import com.njcn.csdevice.api.CsLineFeignClient;
import com.njcn.csdevice.pojo.param.CsLineParam; import com.njcn.csdevice.pojo.param.CsLineParam;
import com.njcn.csdevice.pojo.po.CsLinePO; import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.csdevice.pojo.vo.LineDetailDataVO;
import com.njcn.device.biz.pojo.po.Overlimit; import com.njcn.device.biz.pojo.po.Overlimit;
import feign.hystrix.FallbackFactory; import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List; import java.util.List;
@@ -116,6 +118,12 @@ public class CsLineClientFallbackFactory implements FallbackFactory<CsLineFeignC
log.error("{}异常,降级处理,异常为:{}","查询监测点列表异常",cause.toString()); log.error("{}异常,降级处理,异常为:{}","查询监测点列表异常",cause.toString());
throw new BusinessException(finalExceptionEnum); throw new BusinessException(finalExceptionEnum);
} }
@Override
public HttpResult<LineDetailDataVO> getLineDetailData(@RequestParam("id") String id) {
log.error("{}异常,降级处理,异常为:{}","查询监测点详情异常",cause.toString());
throw new BusinessException(finalExceptionEnum);
}
}; };
} }
} }

View File

@@ -0,0 +1,135 @@
package com.njcn.csdevice.pojo.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* @author denghuajun
* @date 2022/2/23
* 监测点信息
*/
@Data
@ApiModel
public class LineDetailDataVO {
private String lineId;
@ApiModelProperty(name = "id",value = "监测点序号")
private Integer id;
@ApiModelProperty(name = "lineName",value = "监测点名称")
private String lineName;
@ApiModelProperty(name = "areaName",value = "工程名称")
private String areaName;
@ApiModelProperty(name = "gdName",value = "单位")
private String gdName;
@ApiModelProperty(name = "bdName",value = "部门")
private String bdName;
@ApiModelProperty(name = "scale",value = "电压等级")
private String scale;
@ApiModelProperty(name = "manufacturer",value = "厂家")
private String manufacturer;
@ApiModelProperty(name = "devId",value = "终端Id")
private String devId;
@ApiModelProperty(name = "devName",value = "终端名称")
private String devName;
@ApiModelProperty(name = "ip",value = "网络参数")
private String ip;
@ApiModelProperty(name = "runFlag",value = "终端运行状态")
private String runFlag;
@ApiModelProperty(name = "comFlag",value = "通讯状态")
private String comFlag;
@ApiModelProperty(name = "loadType",value = "干扰源类型")
private String loadType;
@ApiModelProperty(name = "businessType",value = "行业类型")
private String businessType;
@ApiModelProperty(name = "objName",value = "监测点对象名称")
private String objName;
@ApiModelProperty(name = "ptType",value = "接线方式")
private String ptType;
@ApiModelProperty(name = "pt",value = "PT变比")
private String pt;
@ApiModelProperty(name = "ct",value = "CT变比")
private String ct;
@ApiModelProperty(name = "standardCapacity",value = "基准容量MVA")
private Float standardCapacity;
@ApiModelProperty(name = "shortCapacity",value = "最小短路容量MVA")
private Float shortCapacity;
@ApiModelProperty(name = "devCapacity",value = "供电设备容量MVA")
private Float devCapacity;
@ApiModelProperty(name = "dealCapacity",value = "用户协议容量MVA")
private Float dealCapacity;
@ApiModelProperty(name = "powerFlag",value = "电网标志0-电网侧1-非电网侧)")
private Integer powerFlag;
/**
* 测量间隔1-10分钟
*/
@ApiModelProperty(name = "timeInterval",value = "测量间隔1-10分钟")
private Integer timeInterval;
/**
* 监测点拥有者
*/
@ApiModelProperty(name = "owner",value = "监测点拥有者")
private String owner;
/**
* 拥有者职务
*/
@ApiModelProperty(name = "ownerDuty",value = "拥有者职务")
private String ownerDuty;
/**
* 拥有者联系方式
*/
@ApiModelProperty(name = "ownerTel",value = "拥有者联系方式")
private String ownerTel;
/**
* 接线图
*/
@ApiModelProperty(name = "wiringDiagram",value = "接线图")
private String wiringDiagram;
@ApiModelProperty(name = "ptPhaseType",value = "监测点接线相别0单相,1三相默认三相")
private Integer ptPhaseType;
@ApiModelProperty(name = "投运日期")
private LocalDate loginTime;
@ApiModelProperty(name = "最新数据时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;
@ApiModelProperty(name = "监测对象信息ID")
private String objId;
@ApiModelProperty(name = "对象类型大类")
private String bigObjType;
}

View File

@@ -11,6 +11,7 @@ import com.njcn.common.utils.HttpResultUtil;
import com.njcn.csdevice.mapper.OverlimitMapper; import com.njcn.csdevice.mapper.OverlimitMapper;
import com.njcn.csdevice.pojo.param.CsLineParam; import com.njcn.csdevice.pojo.param.CsLineParam;
import com.njcn.csdevice.pojo.po.CsLinePO; import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.csdevice.pojo.vo.LineDetailDataVO;
import com.njcn.csdevice.pojo.vo.PqSensitiveUserLineVO; import com.njcn.csdevice.pojo.vo.PqSensitiveUserLineVO;
import com.njcn.csdevice.service.CsLinePOService; import com.njcn.csdevice.service.CsLinePOService;
import com.njcn.device.biz.pojo.po.Overlimit; import com.njcn.device.biz.pojo.po.Overlimit;
@@ -302,4 +303,14 @@ public class CslineController extends BaseController {
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, url, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, url, methodDescribe);
} }
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getLineDetailData")
@ApiOperation("根据监测点id获取监测点详情")
@ApiImplicitParam(name = "id", value = "监测点id", required = true)
public HttpResult<LineDetailDataVO> getLineDetailData(@RequestParam("id") String id) {
String methodDescribe = getMethodDescribe("getLineDetailData");
LineDetailDataVO result = csLinePOService.getLineDetailData(id);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
}
} }

View File

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.csdevice.pojo.param.CsLineParam; import com.njcn.csdevice.pojo.param.CsLineParam;
import com.njcn.csdevice.pojo.po.CsLinePO; import com.njcn.csdevice.pojo.po.CsLinePO;
import com.njcn.csdevice.pojo.vo.LineDetailDataVO;
import com.njcn.csdevice.pojo.vo.PqSensitiveUserLineVO; import com.njcn.csdevice.pojo.vo.PqSensitiveUserLineVO;
import com.njcn.web.pojo.param.BaseParam; import com.njcn.web.pojo.param.BaseParam;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@@ -83,4 +84,11 @@ public interface CsLinePOService extends IService<CsLinePO>{
Page<PqSensitiveUserLineVO> getSensitiveUserLineList(BaseParam param); Page<PqSensitiveUserLineVO> getSensitiveUserLineList(BaseParam param);
boolean uploadReport(MultipartFile file, String lineId); boolean uploadReport(MultipartFile file, String lineId);
String getReportUrl(String lineId); String getReportUrl(String lineId);
/**
* 获取监测点详情
* @param id 监测点id
* @return 结果
*/
LineDetailDataVO getLineDetailData(String id);
} }

View File

@@ -14,9 +14,11 @@ import com.njcn.access.api.CsLineLatestDataFeignClient;
import com.njcn.access.pojo.po.CsLineLatestData; import com.njcn.access.pojo.po.CsLineLatestData;
import com.njcn.common.pojo.enums.common.DataStateEnum; import com.njcn.common.pojo.enums.common.DataStateEnum;
import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.utils.PubUtils;
import com.njcn.csdevice.mapper.*; import com.njcn.csdevice.mapper.*;
import com.njcn.csdevice.pojo.param.CsLineParam; import com.njcn.csdevice.pojo.param.CsLineParam;
import com.njcn.csdevice.pojo.po.*; import com.njcn.csdevice.pojo.po.*;
import com.njcn.csdevice.pojo.vo.LineDetailDataVO;
import com.njcn.csdevice.pojo.vo.PqSensitiveUserLineVO; import com.njcn.csdevice.pojo.vo.PqSensitiveUserLineVO;
import com.njcn.csdevice.service.CsDevModelService; import com.njcn.csdevice.service.CsDevModelService;
import com.njcn.csdevice.service.CsLinePOService; import com.njcn.csdevice.service.CsLinePOService;
@@ -32,18 +34,17 @@ import com.njcn.user.api.UserFeignClient;
import com.njcn.user.pojo.constant.UserType; import com.njcn.user.pojo.constant.UserType;
import com.njcn.user.pojo.vo.UserVO; import com.njcn.user.pojo.vo.UserVO;
import com.njcn.web.pojo.param.BaseParam; import com.njcn.web.pojo.param.BaseParam;
import com.njcn.web.pojo.vo.LineDataVO;
import com.njcn.web.utils.RequestUtil; import com.njcn.web.utils.RequestUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.*;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -386,6 +387,40 @@ public class CsLinePOServiceImpl extends ServiceImpl<CsLinePOMapper, CsLinePO> i
} }
@Override
public LineDetailDataVO getLineDetailData(String id) {
if (StringUtils.isEmpty(id)) {
return new LineDetailDataVO();
} else {
CsLinePO csLinePO = this.baseMapper.selectOne(new LambdaQueryWrapper<CsLinePO>().eq(CsLinePO::getLineId,id));
LineDetailDataVO lineDetailDataVO = new LineDetailDataVO();
//lineDetailDataVO.setScale(dicDataFeignClient.getDicDataById(voltageMapper.selectById(voId).getScale()).getData().getName());
//Device device = deviceMapper.selectById(devId);
//lineDetailDataVO.setComFlag(PubUtils.comFlag(device.getComFlag()));
//lineDetailDataVO.setRunFlag(PubUtils.lineRunFlag(lineDetail.getRunFlag()));
//lineDetailDataVO.setIp(device.getIp());
//lineDetailDataVO.setLoginTime(device.getLoginTime());
//lineDetailDataVO.setDevId(device.getId());
//lineDetailDataVO.setBusinessType(dicDataFeignClient.getDicDataById(lineDetail.getBusinessType()).getData().getName());
//lineDetailDataVO.setLoadType(dicDataFeignClient.getDicDataById(lineDetail.getLoadType()).getData().getName());
lineDetailDataVO.setObjName(csLinePO.getMonitorUser());
lineDetailDataVO.setLineId(csLinePO.getLineId());
lineDetailDataVO.setPtType(PubUtils.ptType(csLinePO.getConType()));
//lineDetailDataVO.setPt(lineDetail.getPt1() + "/" + lineDetail.getPt2());
//lineDetailDataVO.setCt(lineDetail.getCt1() + "/" + lineDetail.getCt2());
lineDetailDataVO.setDealCapacity(csLinePO.getProtocolCapacity().floatValue());
lineDetailDataVO.setDevCapacity(csLinePO.getDevCapacity().floatValue());
lineDetailDataVO.setShortCapacity(csLinePO.getShortCircuitCapacity().floatValue());
lineDetailDataVO.setStandardCapacity(csLinePO.getBasicCapacity().floatValue());
lineDetailDataVO.setTimeInterval(csLinePO.getLineInterval());
return lineDetailDataVO;
}
}
private String getRunStatusDescription(Integer runStatus) { private String getRunStatusDescription(Integer runStatus) {
// 0运行1检修2停运3调试4退运 // 0运行1检修2停运3调试4退运
switch (runStatus) { switch (runStatus) {

View File

@@ -0,0 +1,959 @@
<?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.csharmonic.mapper.report.ReportMapper">
<select id="getVirtualDataI" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
SELECT
phasic_type AS phaseType,
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
MAX( CASE WHEN rankSum = #{param.count} THEN rms END ) AS cp95Value
FROM
(
SELECT
phasic_type,
value_type,
rms,
rankSum
FROM
(
SELECT
phasic_type,
value_type,
rms,
@rankSum := IF( @CI := phasic_type, @rankSum + 1, 1 ) AS rankSum,
@CI := phasic_type
FROM
r_stat_data_i_d
<where>
phasic_type IN ( 'A', 'B', 'C' )
and quality_flag = 0
<if test="param.startTime != null and param.startTime != ''">
and time >= #{param.startTime}
</if>
<if test="param.endTime != null and param.endTime != ''">
and time &lt;= #{param.endTime}
</if>
<if test="param.lineId != null and param.lineId != ''">
and line_id = #{param.lineId}
</if>
</where>
ORDER BY
phasic_type,
(
CASE
WHEN value_type = 'CP95' THEN 1
WHEN value_type = 'MAX' THEN 2
WHEN value_type = 'MIN' THEN 3
WHEN value_type = 'AVG' THEN 4
ELSE 5
END
),
rms DESC
) AS t1
) a
GROUP BY
phasic_type;
</select>
<select id="getVirtualDataV" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
SELECT
phasic_type AS phaseType,
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
MAX( CASE WHEN rankSum = #{param.count} THEN rms END ) AS cp95Value
FROM
(
SELECT
phasic_type,
value_type,
rms,
rankSum
FROM
(
SELECT
phasic_type,
value_type,
rms,
@rankSum := IF( @CI = phasic_type, @rankSum + 1, 1 ) AS rankSum,
@CI := phasic_type
FROM
r_stat_data_v_d
<where>
phasic_type IN ( 'A', 'B', 'C' )
and quality_flag = 0
<if test="param.startTime != null and param.startTime != ''">
and time >= #{param.startTime}
</if>
<if test="param.endTime != null and param.endTime != ''">
and time &lt;= #{param.endTime}
</if>
<if test="param.lineId != null and param.lineId != ''">
and line_id = #{param.lineId}
</if>
</where>
ORDER BY
phasic_type,
(
CASE
WHEN value_type = 'CP95' THEN 1
WHEN value_type = 'MAX' THEN 2
WHEN value_type = 'MIN' THEN 3
WHEN value_type = 'AVG' THEN 4
ELSE 5
END
),
rms DESC
) AS t1
) a
GROUP BY
phasic_type
</select>
<select id="getTotalCP95Day" resultType="java.lang.Integer">
SELECT
count( rms ) total
FROM
r_stat_data_v_d
<where>
phasic_type IN ( 'A' )
AND value_type = "CP95"
and quality_flag = 0
<if test="param.startTime != null and param.startTime != ''">
and time >= #{param.startTime}
</if>
<if test="param.endTime != null and param.endTime != ''">
and time &lt;= #{param.endTime}
</if>
<if test="param.lineId != null and param.lineId != ''">
and line_id = #{param.lineId}
</if>
</where>
</select>
<select id="getTotalPltCP95Day" resultType="java.lang.Integer">
SELECT
count( plt ) total
FROM
r_stat_data_plt_d
<where>
phasic_type IN ( 'A' )
AND value_type = "CP95"
and quality_flag = 0
<if test="param.startTime != null and param.startTime != ''">
and time >= #{param.startTime}
</if>
<if test="param.endTime != null and param.endTime != ''">
and time &lt;= #{param.endTime}
</if>
<if test="param.lineId != null and param.lineId != ''">
and line_id = #{param.lineId}
</if>
</where>
</select>
<select id="getTotalPstCP95Day" resultType="java.lang.Integer">
SELECT
count( plt ) total
FROM
r_stat_data_flicker_d
<where>
phasic_type IN ( 'A' )
AND value_type = "CP95"
and quality_flag = 0
<if test="param.startTime != null and param.startTime != ''">
and time >= #{param.startTime}
</if>
<if test="param.endTime != null and param.endTime != ''">
and time &lt;= #{param.endTime}
</if>
<if test="param.lineId != null and param.lineId != ''">
and line_id = #{param.lineId}
</if>
</where>
</select>
<select id="getVVirtualData" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
SELECT
phasic_type AS phaseType,
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
MAX( CASE WHEN rankSum = #{param.count} THEN rms END ) AS cp95Value
FROM
(
SELECT
phasic_type,
value_type,
rms,
rankSum
FROM
(
SELECT
phasic_type,
value_type,
rms_lvr as rms,
@rankSum := IF( @CI = phasic_type, @rankSum + 1, 1 ) AS rankSum,
@CI := phasic_type
FROM
r_stat_data_v_d
<where>
phasic_type IN ( 'A', 'B', 'C' )
and quality_flag = 0
<if test="param.startTime != null and param.startTime != ''">
and time >= #{param.startTime}
</if>
<if test="param.endTime != null and param.endTime != ''">
and time &lt;= #{param.endTime}
</if>
<if test="param.lineId != null and param.lineId != ''">
and line_id = #{param.lineId}
</if>
</where>
ORDER BY
phasic_type,
(
CASE
WHEN value_type = 'CP95' THEN 1
WHEN value_type = 'MAX' THEN 2
WHEN value_type = 'MIN' THEN 3
WHEN value_type = 'AVG' THEN 4
ELSE 5
END
),
rms_lvr DESC
) AS t1
) a
GROUP BY
phasic_type
</select>
<select id="getPowerP" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
SELECT
phasic_type AS phaseType,
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
MAX( CASE WHEN rankSum = #{param.count} THEN rms END ) AS cp95Value
FROM
(
SELECT
phasic_type,
value_type,
rms,
rankSum
FROM
(
SELECT
phasic_type,
value_type,
p as rms,
@rankSum :=
IF
( @CI = phasic_type, @rankSum + 1, 1 ) AS rankSum,
@CI := phasic_type
FROM
r_stat_data_harmpower_p_d
<where>
phasic_type IN ( 'A', 'B', 'C' ,'T')
and quality_flag = 0
<if test="param.startTime != null and param.startTime != ''">
and time >= #{param.startTime}
</if>
<if test="param.endTime != null and param.endTime != ''">
and time &lt;= #{param.endTime}
</if>
<if test="param.lineId != null and param.lineId != ''">
and line_id = #{param.lineId}
</if>
</where>
ORDER BY
phasic_type,
(
CASE
WHEN value_type = 'CP95' THEN
1
WHEN value_type = 'MAX' THEN
2
WHEN value_type = 'MIN' THEN
3
WHEN value_type = 'AVG' THEN
4 ELSE 5
END
),
p DESC
) AS t1
) a
GROUP BY
phasic_type
</select>
<select id="getPF" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
SELECT
phasic_type AS phaseType,
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
MAX( CASE WHEN rankSum = #{param.count} THEN rms END ) AS cp95Value
FROM
(
SELECT
phasic_type,
value_type,
rms,
rankSum
FROM
(
SELECT
phasic_type,
value_type,
pf as rms,
@rankSum :=
IF
( @CI = phasic_type, @rankSum + 1, 1 ) AS rankSum,
@CI := phasic_type
FROM
r_stat_data_harmpower_p_d
<where>
phasic_type IN ( 'A', 'B', 'C' ,'T')
and quality_flag = 0
<if test="param.startTime != null and param.startTime != ''">
and time >= #{param.startTime}
</if>
<if test="param.endTime != null and param.endTime != ''">
and time &lt;= #{param.endTime}
</if>
<if test="param.lineId != null and param.lineId != ''">
and line_id = #{param.lineId}
</if>
</where>
ORDER BY
phasic_type,
(
CASE
WHEN value_type = 'CP95' THEN
1
WHEN value_type = 'MAX' THEN
2
WHEN value_type = 'MIN' THEN
3
WHEN value_type = 'AVG' THEN
4 ELSE 5
END
),
pf DESC
) AS t1
) a
GROUP BY
phasic_type
</select>
<select id="getPowerQ" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
SELECT
phasic_type AS phaseType,
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
MAX( CASE WHEN rankSum = #{param.count} THEN rms END ) AS cp95Value
FROM
(
SELECT
phasic_type,
value_type,
rms,
rankSum
FROM
(
SELECT
phasic_type,
value_type,
q as rms,
@rankSum :=
IF
( @CI = phasic_type, @rankSum + 1, 1 ) AS rankSum,
@CI := phasic_type
FROM
r_stat_data_harmpower_q_d
<where>
phasic_type IN ( 'A', 'B', 'C' ,'T')
and quality_flag = 0
<if test="param.startTime != null and param.startTime != ''">
and time >= #{param.startTime}
</if>
<if test="param.endTime != null and param.endTime != ''">
and time &lt;= #{param.endTime}
</if>
<if test="param.lineId != null and param.lineId != ''">
and line_id = #{param.lineId}
</if>
</where>
ORDER BY
phasic_type,
(
CASE
WHEN value_type = 'CP95' THEN
1
WHEN value_type = 'MAX' THEN
2
WHEN value_type = 'MIN' THEN
3
WHEN value_type = 'AVG' THEN
4 ELSE 5
END
),
q DESC
) AS t1
) a
GROUP BY
phasic_type
</select>
<select id="getPowerS" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
SELECT
phasic_type AS phaseType,
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
MAX( CASE WHEN rankSum = #{param.count} THEN rms END ) AS cp95Value
FROM
(
SELECT
phasic_type,
value_type,
rms,
rankSum
FROM
(
SELECT
phasic_type,
value_type,
s as rms,
@rankSum :=
IF
( @CI = phasic_type, @rankSum + 1, 1 ) AS rankSum,
@CI := phasic_type
FROM
r_stat_data_harmpower_s_d
<where>
phasic_type IN ( 'A', 'B', 'C' ,'T')
and quality_flag = 0
<if test="param.startTime != null and param.startTime != ''">
and time >= #{param.startTime}
</if>
<if test="param.endTime != null and param.endTime != ''">
and time &lt;= #{param.endTime}
</if>
<if test="param.lineId != null and param.lineId != ''">
and line_id = #{param.lineId}
</if>
</where>
ORDER BY
phasic_type,
(
CASE
WHEN value_type = 'CP95' THEN
1
WHEN value_type = 'MAX' THEN
2
WHEN value_type = 'MIN' THEN
3
WHEN value_type = 'AVG' THEN
4 ELSE 5
END
),
s DESC
) AS t1
) a
GROUP BY
phasic_type
</select>
<select id="getFlickerData" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
SELECT
phasic_type AS phaseType,
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
MAX( CASE WHEN rankSum = #{param.count} THEN rms END ) AS cp95Value
FROM
(
SELECT
phasic_type,
value_type,
rms,
rankSum
FROM
(
SELECT
phasic_type,
value_type,
plt as rms,
@rankSum :=
IF
( @CI = phasic_type, @rankSum + 1, 1 ) AS rankSum,
@CI := phasic_type
FROM
r_stat_data_flicker_d
<where>
phasic_type IN ( 'A', 'B', 'C' )
and quality_flag = 0
<if test="param.startTime != null and param.startTime != ''">
and time >= #{param.startTime}
</if>
<if test="param.endTime != null and param.endTime != ''">
and time &lt;= #{param.endTime}
</if>
<if test="param.lineId != null and param.lineId != ''">
and line_id = #{param.lineId}
</if>
</where>
ORDER BY
phasic_type,
(
CASE
WHEN value_type = 'CP95' THEN
1
WHEN value_type = 'MAX' THEN
2
WHEN value_type = 'MIN' THEN
3
WHEN value_type = 'AVG' THEN
4 ELSE 5
END
),
plt DESC
) AS t1
) a
GROUP BY
phasic_type
</select>
<select id="getLFlickerData" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
SELECT
phasic_type AS phaseType,
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
MAX( CASE WHEN rankSum = #{param.count} THEN rms END ) AS cp95Value
FROM
(
SELECT
phasic_type,
value_type,
rms,
rankSum
FROM
(
SELECT
phasic_type,
value_type,
pst as rms,
@rankSum :=
IF
( @CI = phasic_type, @rankSum + 1, 1 ) AS rankSum,
@CI := phasic_type
FROM
r_stat_data_flicker_d
<where>
phasic_type IN ( 'A', 'B', 'C')
and quality_flag = 0
<if test="param.startTime != null and param.startTime != ''">
and time >= #{param.startTime}
</if>
<if test="param.endTime != null and param.endTime != ''">
and time &lt;= #{param.endTime}
</if>
<if test="param.lineId != null and param.lineId != ''">
and line_id = #{param.lineId}
</if>
</where>
ORDER BY
phasic_type,
(
CASE
WHEN value_type = 'CP95' THEN
1
WHEN value_type = 'MAX' THEN
2
WHEN value_type = 'MIN' THEN
3
WHEN value_type = 'AVG' THEN
4 ELSE 5
END
),
pst DESC
) AS t1
) a
GROUP BY
phasic_type
</select>
<select id="getUVdeviationData" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
SELECT
phasic_type AS phaseType,
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
MAX( CASE WHEN rankSum = #{param.count} THEN rms END ) AS cp95Value
FROM
(
SELECT
phasic_type,
value_type,
rms,
rankSum
FROM
(
SELECT
phasic_type,
value_type,
vu_dev as rms,
@rankSum := IF( @CI := phasic_type, @rankSum + 1, 1 ) AS rankSum,
@CI := phasic_type
FROM
r_stat_data_v_d
<where>
phasic_type IN ( 'A', 'B', 'C' )
and quality_flag = 0
<if test="param.startTime != null and param.startTime != ''">
and time >= #{param.startTime}
</if>
<if test="param.endTime != null and param.endTime != ''">
and time &lt;= #{param.endTime}
</if>
<if test="param.lineId != null and param.lineId != ''">
and line_id = #{param.lineId}
</if>
</where>
ORDER BY
phasic_type,
(
CASE
WHEN value_type = 'CP95' THEN 1
WHEN value_type = 'MAX' THEN 2
WHEN value_type = 'MIN' THEN 3
WHEN value_type = 'AVG' THEN 4
ELSE 5
END
),
vu_dev DESC
) AS t1
) a
GROUP BY
phasic_type;
</select>
<select id="getLVdeviationData" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
SELECT
phasic_type AS phaseType,
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
MAX( CASE WHEN rankSum = #{param.count} THEN rms END ) AS cp95Value
FROM
(
SELECT
phasic_type,
value_type,
rms,
rankSum
FROM
(
SELECT
phasic_type,
value_type,
vl_dev as rms,
@rankSum := IF( @CI := phasic_type, @rankSum + 1, 1 ) AS rankSum,
@CI := phasic_type
FROM
r_stat_data_v_d
<where>
phasic_type IN ( 'A', 'B', 'C' )
and quality_flag = 0
<if test="param.startTime != null and param.startTime != ''">
and time >= #{param.startTime}
</if>
<if test="param.endTime != null and param.endTime != ''">
and time &lt;= #{param.endTime}
</if>
<if test="param.lineId != null and param.lineId != ''">
and line_id = #{param.lineId}
</if>
</where>
ORDER BY
phasic_type,
(
CASE
WHEN value_type = 'CP95' THEN 1
WHEN value_type = 'MAX' THEN 2
WHEN value_type = 'MIN' THEN 3
WHEN value_type = 'AVG' THEN 4
ELSE 5
END
),
vl_dev DESC
) AS t1
) a
GROUP BY
phasic_type;
</select>
<select id="getDistortionDataV" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
SELECT
phasic_type AS phaseType,
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
MAX( CASE WHEN rankSum = #{param.count} THEN rms END ) AS cp95Value
FROM
(
SELECT
phasic_type,
value_type,
rms,
rankSum
FROM
(
SELECT
phasic_type,
value_type,
v_thd as rms,
@rankSum := IF( @CI := phasic_type, @rankSum + 1, 1 ) AS rankSum,
@CI := phasic_type
FROM
r_stat_data_v_d
<where>
phasic_type IN ( 'A', 'B', 'C' )
and quality_flag = 0
<if test="param.startTime != null and param.startTime != ''">
and time >= #{param.startTime}
</if>
<if test="param.endTime != null and param.endTime != ''">
and time &lt;= #{param.endTime}
</if>
<if test="param.lineId != null and param.lineId != ''">
and line_id = #{param.lineId}
</if>
</where>
ORDER BY
phasic_type,
(
CASE
WHEN value_type = 'CP95' THEN 1
WHEN value_type = 'MAX' THEN 2
WHEN value_type = 'MIN' THEN 3
WHEN value_type = 'AVG' THEN 4
ELSE 5
END
),
v_thd DESC
) AS t1
) a
GROUP BY
phasic_type;
</select>
<select id="getDistortionDataI" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
SELECT
phasic_type AS phaseType,
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
MAX( CASE WHEN rankSum = #{param.count} THEN rms END ) AS cp95Value
FROM
(
SELECT
phasic_type,
value_type,
rms,
rankSum
FROM
(
SELECT
phasic_type,
value_type,
i_thd as rms,
@rankSum := IF( @CI := phasic_type, @rankSum + 1, 1 ) AS rankSum,
@CI := phasic_type
FROM
r_stat_data_i_d
<where>
phasic_type IN ( 'A', 'B', 'C' )
and quality_flag = 0
<if test="param.startTime != null and param.startTime != ''">
and time >= #{param.startTime}
</if>
<if test="param.endTime != null and param.endTime != ''">
and time &lt;= #{param.endTime}
</if>
<if test="param.lineId != null and param.lineId != ''">
and line_id = #{param.lineId}
</if>
</where>
ORDER BY
phasic_type,
(
CASE
WHEN value_type = 'CP95' THEN 1
WHEN value_type = 'MAX' THEN 2
WHEN value_type = 'MIN' THEN 3
WHEN value_type = 'AVG' THEN 4
ELSE 5
END
),
i_thd DESC
) AS t1
) a
GROUP BY
phasic_type;
</select>
<select id="getFrequencyData" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
SELECT
phasic_type AS phaseType,
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
MAX( CASE WHEN rankSum = #{param.count} THEN rms END ) AS cp95Value
FROM
(
SELECT
phasic_type,
value_type,
rms,
rankSum
FROM
(
SELECT
phasic_type,
value_type,
freq as rms,
@rankSum := IF( @CI := phasic_type, @rankSum + 1, 1 ) AS rankSum,
@CI := phasic_type
FROM
r_stat_data_v_d
<where>
phasic_type = 'T'
and quality_flag = 0
<if test="param.startTime != null and param.startTime != ''">
and time >= #{param.startTime}
</if>
<if test="param.endTime != null and param.endTime != ''">
and time &lt;= #{param.endTime}
</if>
<if test="param.lineId != null and param.lineId != ''">
and line_id = #{param.lineId}
</if>
</where>
ORDER BY
phasic_type,
(
CASE
WHEN value_type = 'CP95' THEN 1
WHEN value_type = 'MAX' THEN 2
WHEN value_type = 'MIN' THEN 3
WHEN value_type = 'AVG' THEN 4
ELSE 5
END
),
freq DESC
) AS t1
) a
GROUP BY
phasic_type;
</select>
<select id="getDEVFrequencyData" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
SELECT
phasic_type AS phaseType,
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
MAX( CASE WHEN rankSum = #{param.count} THEN rms END ) AS cp95Value
FROM
(
SELECT
phasic_type,
value_type,
rms,
rankSum
FROM
(
SELECT
phasic_type,
value_type,
freq_dev as rms,
@rankSum := IF( @CI := phasic_type, @rankSum + 1, 1 ) AS rankSum,
@CI := phasic_type
FROM
r_stat_data_v_d
<where>
phasic_type = 'T'
and quality_flag = 0
<if test="param.startTime != null and param.startTime != ''">
and time >= #{param.startTime}
</if>
<if test="param.endTime != null and param.endTime != ''">
and time &lt;= #{param.endTime}
</if>
<if test="param.lineId != null and param.lineId != ''">
and line_id = #{param.lineId}
</if>
</where>
ORDER BY
phasic_type,
(
CASE
WHEN value_type = 'CP95' THEN 1
WHEN value_type = 'MAX' THEN 2
WHEN value_type = 'MIN' THEN 3
WHEN value_type = 'AVG' THEN 4
ELSE 5
END
),
freq_dev DESC
) AS t1
) a
GROUP BY
phasic_type;
</select>
<select id="getINegData" resultType="com.njcn.harmonic.pojo.vo.ReportValue">
SELECT
phasic_type AS phaseType,
AVG( CASE WHEN value_type = 'AVG' THEN rms END ) AS meanValue,
MIN( CASE WHEN value_type = 'MIN' THEN rms END ) AS minValue,
MAX( CASE WHEN value_type = 'MAX' THEN rms END ) AS fmaxValue,
MAX( CASE WHEN rankSum = #{param.count} THEN rms END ) AS cp95Value
FROM
(
SELECT
phasic_type,
value_type,
rms,
rankSum
FROM
(
SELECT
phasic_type,
value_type,
i_neg as rms,
@rankSum := IF( @CI := phasic_type, @rankSum + 1, 1 ) AS rankSum,
@CI := phasic_type
FROM
r_stat_data_i_d
<where>
phasic_type IN ( 'A', 'B', 'C' )
and quality_flag = 0
<if test="param.startTime != null and param.startTime != ''">
and time >= #{param.startTime}
</if>
<if test="param.endTime != null and param.endTime != ''">
and time &lt;= #{param.endTime}
</if>
<if test="param.lineId != null and param.lineId != ''">
and line_id = #{param.lineId}
</if>
</where>
ORDER BY
phasic_type,
(
CASE
WHEN value_type = 'CP95' THEN 1
WHEN value_type = 'MAX' THEN 2
WHEN value_type = 'MIN' THEN 3
WHEN value_type = 'AVG' THEN 4
ELSE 5
END
),
rms DESC
) AS t1
) a
GROUP BY
phasic_type;
</select>
</mapper>

View File

@@ -0,0 +1,29 @@
package com.njcn.csharmonic.mapper.report;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.harmonic.pojo.po.day.RStatDataIDPO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author wr
* @since 2023-04-17
*/
public interface RStatDataIDMapper extends BaseMapper<RStatDataIDPO> {
/**
* 获取监测点负序电流
* @return
*/
List<RStatDataIDPO> getINeg(@Param("list") List<String> lineList, @Param("startTime") String startTime, @Param("endTime") String endTime);
/**
* 谐波电流
*/
List<RStatDataIDPO> getI(@Param("list") List<String> lineList, @Param("startTime") String startTime, @Param("endTime") String endTime);
}

View File

@@ -0,0 +1,17 @@
package com.njcn.csharmonic.mapper.report;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.harmonic.pojo.po.day.RStatDataInharmVDPO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @Description:
* @Author: wr
* @Date: 2024/7/31 9:24
*/
public interface RStatDataInharmVDMapper extends BaseMapper<RStatDataInharmVDPO> {
List<RStatDataInharmVDPO> getV(@Param("list") List<String> lineList, @Param("startTime") String startTime, @Param("endTime") String endTime);
}

View File

@@ -0,0 +1,43 @@
package com.njcn.csharmonic.mapper.report;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njcn.harmonic.pojo.po.RStatDataVD;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author wr
* @since 2023-03-31
*/
public interface RStatDataVDMapper extends BaseMapper<RStatDataVD> {
/**
* 获取频率偏差、三相电压不平衡度
*/
List<RStatDataVD> getFreqDev(@Param("list") List<String> lineList, @Param("startTime") String startTime, @Param("endTime") String endTime);
/**
* 获取电压偏差
*/
List<RStatDataVD> getVuDev(@Param("list") List<String> lineList, @Param("startTime") String startTime, @Param("endTime") String endTime);
/**
* 获取电压总谐波畸变率
*/
List<RStatDataVD> getVthd(@Param("list") List<String> lineList, @Param("startTime") String startTime, @Param("endTime") String endTime);
/**
* 获取三相电压不平衡度
*/
List<RStatDataVD> getUnbalance(@Param("list") List<String> lineList, @Param("startTime") String startTime, @Param("endTime") String endTime);
/**
* 获取谐波电压
*/
List<RStatDataVD> getV(@Param("list") List<String> lineList, @Param("startTime") String startTime, @Param("endTime") String endTime);
}

View File

@@ -0,0 +1,137 @@
package com.njcn.csharmonic.mapper.report;
import com.njcn.harmonic.pojo.param.ReportQueryParam;
import com.njcn.harmonic.pojo.vo.ReportValue;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 谐波报告查询
*/
public interface ReportMapper {
/**
* 获取电流有效值
* @return
*/
List<ReportValue> getVirtualDataI(@Param("param") ReportQueryParam param);
/**
* 获取电压有效值
* @return
*/
List<ReportValue> getVirtualDataV(@Param("param") ReportQueryParam param);
/**
* CP95条数
* @param param
* @return
*/
Integer getTotalCP95Day(@Param("param")ReportQueryParam param);
/**
* CP95条数
* @param param
* @return
*/
Integer getTotalPltCP95Day(@Param("param")ReportQueryParam param);
/**
* CP95条数
* @param param
* @return
*/
Integer getTotalPstCP95Day(@Param("param")ReportQueryParam param);
List<ReportValue> getVVirtualData(@Param("param")ReportQueryParam param);
/**
* 获取有功功率
* @param param
* @return
*/
List<ReportValue> getPowerP(@Param("param")ReportQueryParam param);
/**
* 无功功率
* @param param
* @return
*/
List<ReportValue> getPowerQ(@Param("param")ReportQueryParam param);
/**
* 视在功率
* @param param
* @return
*/
List<ReportValue> getPowerS(@Param("param")ReportQueryParam param);
/**
* 功率因数
* @param param
* @return
*/
List<ReportValue> getPF(@Param("param")ReportQueryParam param);
/**
* 短时闪变
* @param param
* @return
*/
List<ReportValue> getFlickerData(@Param("param")ReportQueryParam param);
/**
* 长时闪变
* @param param
* @return
*/
List<ReportValue> getLFlickerData(@Param("param")ReportQueryParam param);
/**
* 电压负偏差
* @param param
* @return
*/
List<ReportValue> getUVdeviationData(@Param("param")ReportQueryParam param);
/**
* 电压正偏差
* @param param
* @return
*/
List<ReportValue> getLVdeviationData(@Param("param")ReportQueryParam param);
/**
* 获取电压畸变率
* @param param
* @return
*/
List<ReportValue> getDistortionDataV(@Param("param")ReportQueryParam param);
/**
* 获取电流畸变率
* @param param
* @return
*/
List<ReportValue> getDistortionDataI(@Param("param")ReportQueryParam param);
/**
*频率
* @param param
* @return
*/
List<ReportValue> getFrequencyData(@Param("param")ReportQueryParam param);
/**
*频率
* @param param
* @return
*/
List<ReportValue> getDEVFrequencyData(@Param("param")ReportQueryParam param);
/**
* 负序电流
* @param param
* @return
*/
List<ReportValue> getINegData(@Param("param")ReportQueryParam param);
}

View File

@@ -0,0 +1,97 @@
package com.njcn.csharmonic.service;
import com.njcn.harmonic.pojo.param.ReportQueryParam;
import com.njcn.harmonic.pojo.po.report.OverLimitInfo;
import com.njcn.harmonic.pojo.vo.ReportValue;
import java.util.List;
/**
* 谐波报告
*/
public interface ReportService {
/**
* 限值
* @param param
* @return
*/
OverLimitInfo getOverLimitData(ReportQueryParam param);
/**
* 基波增幅
* @param param
* @return
*/
List<ReportValue> getVirtualData(ReportQueryParam param);
/**
* 功率
* @param param
* @return
*/
List<ReportValue> getPowerData(ReportQueryParam param);
/**
* 闪变
* @param param
* @return
*/
List<ReportValue> getFlickerData(ReportQueryParam param);
/**
* 电压偏差
* @param param
* @return
*/
List<ReportValue> getVdeviation(ReportQueryParam param);
/**
* 畸变率
* @param param
* @return
*/
List<ReportValue> getDistortionData(ReportQueryParam param);
/**
* 频率
* @param param
* @return
*/
List<ReportValue> getFrequencyData(ReportQueryParam param);
/**
* 三相不平衡
* @param param
* @return
*/
List<ReportValue> getThreephase(ReportQueryParam param);
/**
* 谐波电流
* @param param
* @return
*/
List<ReportValue> getICurrent(ReportQueryParam param);
/**
* 谐波电压
* @param param
* @return
*/
List<ReportValue> getVoltageRate(ReportQueryParam param);
/**
* 间谐波
* @param param
* @return
*/
List<ReportValue> getInharmVeRate(ReportQueryParam param);
/**
* 负序电流
* @param param
* @return
*/
List<ReportValue> getINegDataRate(ReportQueryParam param);
}

View File

@@ -0,0 +1,595 @@
package com.njcn.csharmonic.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.njcn.csharmonic.mapper.report.RStatDataIDMapper;
import com.njcn.csharmonic.mapper.report.RStatDataInharmVDMapper;
import com.njcn.csharmonic.mapper.report.RStatDataVDMapper;
import com.njcn.csharmonic.mapper.report.ReportMapper;
import com.njcn.csharmonic.service.ReportService;
import com.njcn.csharmonic.util.RegroupData;
import com.njcn.harmonic.pojo.param.ReportQueryParam;
import com.njcn.harmonic.pojo.po.RStatDataVD;
import com.njcn.harmonic.pojo.po.day.RStatDataIDPO;
import com.njcn.harmonic.pojo.po.day.RStatDataInharmVDPO;
import com.njcn.harmonic.pojo.po.report.OverLimitInfo;
import com.njcn.harmonic.pojo.vo.ReportValue;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author wr
*/
@Service
@RequiredArgsConstructor
@DS("sjzx")
public class ReportServiceImpl implements ReportService {
private final ReportMapper reportMapper;
private final RStatDataVDMapper rStatDataVDMapper;
private final RStatDataIDMapper rStatDataIDMapper;
private final RStatDataInharmVDMapper rStatDataInharmVDMapper;
@Override
public OverLimitInfo getOverLimitData(ReportQueryParam param) {
OverLimitInfo overLimitInfo = new OverLimitInfo();
//查询时间段内共有多少条记录,并*0.95取整处理用来计算CP95值 降序*0.05进一位计算
double count = 0;
double pstCount = 0;
double pltCount = 0;
if (param.getB()) {
count = Math.ceil(1);
pltCount = Math.ceil(1);
pstCount = Math.ceil(1);
} else {
count = Math.ceil(reportMapper.getTotalCP95Day(param).intValue() * 0.05);
pltCount = Math.ceil(reportMapper.getTotalPltCP95Day(param).intValue() * 0.05);
pstCount = Math.ceil(reportMapper.getTotalPstCP95Day(param).intValue() * 0.05);
}
overLimitInfo.setCount(count);
overLimitInfo.setPltCount(pltCount);
overLimitInfo.setPstCount(pstCount);
return overLimitInfo;
}
@Override
public List<ReportValue> getVirtualData(ReportQueryParam param) {
List<ReportValue> list = new ArrayList<>();
// 获取电流有效值
List<ReportValue> listI = reportMapper.getVirtualDataI(param);
//获取电压有效值
List<ReportValue> listV = reportMapper.getVirtualDataV(param);
//获取线电压有效值
List<ReportValue> listVV = reportMapper.getVVirtualData(param);
RegroupData.regroupData(listV, true);
RegroupData.regroupData(listI, true);
RegroupData.regroupData(listVV, true);
list.addAll(listV);
list.addAll(listI);
list.addAll(listVV);
return list;
}
@Override
public List<ReportValue> getPowerData(ReportQueryParam param) {
List<ReportValue> list = new ArrayList<>();
//获取有功功率
List<ReportValue> listP = reportMapper.getPowerP(param);
//获取无功功率
List<ReportValue> listQ = reportMapper.getPowerQ(param);
//获取视在功率
List<ReportValue> listS = reportMapper.getPowerS(param);
//获取功率因数
List<ReportValue> listF = reportMapper.getPF(param);
RegroupData.regroupData(listP, true, false);
RegroupData.regroupData(listQ, true, false);
RegroupData.regroupData(listS, true, false);
RegroupData.regroupData(listF, true, false);
list.addAll(listP);
list.addAll(listQ);
list.addAll(listS);
list.addAll(listF);
return list;
}
@Override
public List<ReportValue> getFlickerData(ReportQueryParam param) {
List<ReportValue> list = new ArrayList<>();
//短时闪变
List<ReportValue> listFlicker = reportMapper.getFlickerData(param);
//长时闪变
List<ReportValue> listLFlicker = reportMapper.getLFlickerData(param);
RegroupData.regroupData(listFlicker, true);
RegroupData.regroupData(listLFlicker, true);
list.addAll(listFlicker);
list.addAll(listLFlicker);
return list;
}
@Override
public List<ReportValue> getVdeviation(ReportQueryParam param) {
List<ReportValue> list = new ArrayList<>();
//获取电压偏差
List<ReportValue> listU = reportMapper.getUVdeviationData(param);
List<ReportValue> listL = reportMapper.getLVdeviationData(param);
RegroupData.regroupData(listU, true);
RegroupData.regroupData(listL, true);
list.addAll(listU);
list.addAll(listL);
return list;
}
@Override
public List<ReportValue> getDistortionData(ReportQueryParam param) {
List<ReportValue> list = new ArrayList<>();
//获取电压畸变率
List<ReportValue> listU = reportMapper.getDistortionDataV(param);
//获取电流畸变率
List<ReportValue> listI = reportMapper.getDistortionDataI(param);
//添加之前判断数据库是否有数据,如果没有数据模拟数据添加到集合中
RegroupData.regroupData(listU, true);
RegroupData.regroupData(listI, true);
list.addAll(listU);
list.addAll(listI);
return list;
}
@Override
public List<ReportValue> getFrequencyData(ReportQueryParam param) {
List<ReportValue> list = new ArrayList<>();
List<ReportValue> listFre = reportMapper.getFrequencyData(param);
List<ReportValue> listFreDEV = reportMapper.getDEVFrequencyData(param);
RegroupData.regroupData(listFre, true);
RegroupData.regroupData(listFreDEV, true);
list.addAll(listFre);
list.addAll(listFreDEV);
return list;
}
@Override
public List<ReportValue> getThreephase(ReportQueryParam param) {
List<ReportValue> list = new ArrayList<>();
//电压三相不平衡度
List<ReportValue> listV = dataV(param, Arrays.asList("T"), 1, 5, true, 0);
//电流三相不平衡度
List<ReportValue> listI = dataI(param, Arrays.asList("T"), 1, 5, true, 0);
if (CollUtil.isNotEmpty(listV)) {
list.addAll(listV);
} else {
regroupData(list);
}
if (CollUtil.isNotEmpty(listI)) {
list.addAll(listI);
} else {
regroupData(list);
}
return list;
}
@Override
public List<ReportValue> getICurrent(ReportQueryParam param) {
List<ReportValue> list = new ArrayList<>();
//获取电流幅值,包含基波
List<ReportValue> listI = dataI(param, Arrays.asList("A", "B", "C"), 1, 51, false, 0);
if (CollUtil.isEmpty(listI)) {
for (int i = 0; i < 50; i++) {
RegroupData.regroupData(list, true, true);
}
} else {
list.addAll(listI);
}
return list;
}
@Override
public List<ReportValue> getVoltageRate(ReportQueryParam param) {
List<ReportValue> list = new ArrayList<>();
//获取基波电压幅值单位kV
List<ReportValue> listV = dataV(param, Arrays.asList("A", "B", "C"), 0, 1, true, 5);
if (CollUtil.isEmpty(listV)) {
RegroupData.regroupData(list, true, true);
} else {
list.addAll(listV);
}
//获取电压含有率,不包含基波
List<ReportValue> listRate = dataV(param, Arrays.asList("A", "B", "C"), 2, 51, false, 1);
if (CollUtil.isEmpty(listRate)) {
for (int i = 0; i < 49; i++) {
RegroupData.regroupData(list, true, true);
}
} else {
list.addAll(listRate);
}
//获取电压畸变率
List<ReportValue> listU = reportMapper.getDistortionDataV(param);
RegroupData.regroupData(listU, true);
list.addAll(listU);
return list;
}
@Override
public List<ReportValue> getInharmVeRate(ReportQueryParam param) {
List<RStatDataInharmVDPO> inharm = rStatDataInharmVDMapper.selectList(new LambdaQueryWrapper<RStatDataInharmVDPO>()
.eq(RStatDataInharmVDPO::getLineId, param.getLineId())
.in(RStatDataInharmVDPO::getPhaseType, Arrays.asList("A", "B", "C"))
.ge(StrUtil.isNotBlank(param.getStartTime()), RStatDataInharmVDPO::getTime, DateUtil.beginOfDay(DateUtil.parse(param.getStartTime())))
.le(StrUtil.isNotBlank(param.getEndTime()), RStatDataInharmVDPO::getTime, DateUtil.endOfDay(DateUtil.parse(param.getEndTime())))
);
String max = "MAX";
String avg = "AVG";
String min = "MIN";
String cp95 = "CP95";
List<ReportValue> a = new ArrayList<>();
Map<String, List<RStatDataInharmVDPO>> collect = inharm.stream().collect(Collectors.groupingBy(RStatDataInharmVDPO::getPhaseType));
collect.forEach((key, value) -> {
Map<String, List<RStatDataInharmVDPO>> valueTypeMap = value.stream().collect(Collectors.groupingBy(RStatDataInharmVDPO::getValueType));
for (int i = 1; i < 17; i++) {
ReportValue reportValue = new ReportValue();
String attribute = "v" + i;
if (valueTypeMap.containsKey(max)) {
List<Float> aa = reflectDataInV(valueTypeMap.get(max), max, attribute);
reportValue.setPhaseType(key);
Float maxNum = aa.stream().distinct().max(Float::compareTo).get();
reportValue.setFmaxValue(maxNum);
}
if (valueTypeMap.containsKey(avg)) {
List<Float> aa = reflectDataInV(valueTypeMap.get(avg), avg, attribute);
reportValue.setPhaseType(key);
Double avgNum = aa.stream().distinct().collect(Collectors.averagingDouble(Float::doubleValue));
reportValue.setMeanValue(avgNum.floatValue());
}
if (valueTypeMap.containsKey(min)) {
List<Float> aa = reflectDataInV(valueTypeMap.get(min), min, attribute);
reportValue.setPhaseType(key);
double minNum = aa.stream().distinct().min(Float::compareTo).get();
reportValue.setMinValue((float) minNum);
}
if (valueTypeMap.containsKey(cp95)) {
List<Float> aa = reflectDataInV(valueTypeMap.get(cp95), cp95, attribute);
reportValue.setPhaseType(key);
List<Float> cp95Num = aa.stream().distinct().sorted(Comparator.comparing(Float::doubleValue).reversed()).collect(Collectors.toList());
reportValue.setCp95Value(cp95Num.get(0).floatValue());
}
a.add(reportValue);
}
});
if (CollUtil.isEmpty(a)) {
for (int i = 1; i < 17; i++) {
RegroupData.regroupData(a, true, true);
}
}
return a;
}
@Override
public List<ReportValue> getINegDataRate(ReportQueryParam param) {
List<ReportValue> list = new ArrayList<>();
//负序电流
List<ReportValue> iNegData = reportMapper.getINegData(param);
RegroupData.regroupData(iNegData, true);
list.addAll(iNegData);
return list;
}
//赋值默认值
private void regroupData(List<ReportValue> list) {
for (int i = 0; i < 4; i++) {
List<ReportValue> list1 = new ArrayList<>();
RegroupData.regroupData(list1, false);
list.addAll(list1);
}
}
/**
* 电压信息
*
* @param param 查询条件
* @param valueTypes 区分类别 例如"A","B","C"
* @param num 循环开始
* @param size 循环结束
* @param fly 否是启用获取属性电压
* @param index 获取属性位置名称
* @return
*/
private List<ReportValue> dataV(ReportQueryParam param, List<String> valueTypes, Integer num, Integer size, Boolean fly, Integer index) {
List<RStatDataVD> rStatDataVDS = rStatDataVDMapper.selectList(new LambdaQueryWrapper<RStatDataVD>()
.eq(RStatDataVD::getLineId, param.getLineId())
.in(CollUtil.isNotEmpty(valueTypes), RStatDataVD::getPhasicType, valueTypes)
.ge(StrUtil.isNotBlank(param.getStartTime()), RStatDataVD::getTime, DateUtil.beginOfDay(DateUtil.parse(param.getStartTime())))
.le(StrUtil.isNotBlank(param.getEndTime()), RStatDataVD::getTime, DateUtil.endOfDay(DateUtil.parse(param.getEndTime())))
);
String max = "MAX";
String avg = "AVG";
String min = "MIN";
String cp95 = "CP95";
List<ReportValue> a = new ArrayList<>();
Map<String, List<RStatDataVD>> collect = rStatDataVDS.stream().collect(Collectors.groupingBy(RStatDataVD::getPhasicType));
collect.forEach((key, value) -> {
Map<String, List<RStatDataVD>> valueTypeMap = value.stream().collect(Collectors.groupingBy(RStatDataVD::getValueType));
for (int i = num; i < size; i++) {
ReportValue reportValue = new ReportValue();
String attribute = "";
if (fly) {
if (index == 0) {
attribute = attributeV(i);
} else {
attribute = attributeV(index);
}
} else {
attribute = "v" + i;
}
if (valueTypeMap.containsKey(max)) {
List<Float> aa = reflectDataV(valueTypeMap.get(max), max, attribute);
reportValue.setPhaseType(key);
Float maxNum = aa.stream().distinct().max(Float::compareTo).get();
reportValue.setFmaxValue(maxNum);
}
if (valueTypeMap.containsKey(avg)) {
List<Float> aa = reflectDataV(valueTypeMap.get(avg), avg, attribute);
reportValue.setPhaseType(key);
Double avgNum = aa.stream().distinct().collect(Collectors.averagingDouble(Float::doubleValue));
reportValue.setMeanValue(avgNum.floatValue());
}
if (valueTypeMap.containsKey(min)) {
List<Float> aa = reflectDataV(valueTypeMap.get(min), min, attribute);
reportValue.setPhaseType(key);
double minNum = aa.stream().distinct().min(Float::compareTo).get();
reportValue.setMinValue((float) minNum);
}
if (valueTypeMap.containsKey(cp95)) {
List<Float> aa = reflectDataV(valueTypeMap.get(cp95), cp95, attribute);
reportValue.setPhaseType(key);
List<Float> cp95Num = aa.stream().distinct().sorted(Comparator.comparing(Float::doubleValue).reversed()).collect(Collectors.toList());
reportValue.setCp95Value(cp95Num.get(0).floatValue());
}
a.add(reportValue);
}
});
return a;
}
/**
* 电压反射取属性值
*
* @param value
* @param name
* @return
*/
private List<Float> reflectDataV(List<RStatDataVD> value, String name, String attribute) {
Field field = null;
try {
field = RStatDataVD.class.getDeclaredField(attribute);
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
}
field.setAccessible(true);
Field finalField = field;
return value.stream().filter(x -> x.getValueType().equals(name)).map(temp -> {
BigDecimal o = null;
try {
o = (BigDecimal) finalField.get(temp);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
return o.floatValue();
}).collect(Collectors.toList());
}
/**
* 电压反射取属性值
*
* @param value
* @param name
* @return
*/
private List<Float> reflectDataInV(List<RStatDataInharmVDPO> value, String name, String attribute) {
Field field;
try {
field = RStatDataInharmVDPO.class.getDeclaredField(attribute);
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
}
field.setAccessible(true);
Field finalField = field;
return value.stream().filter(x -> x.getValueType().equals(name)).map(temp -> {
Double o;
try {
o = (Double) finalField.get(temp);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
return o.floatValue();
}).collect(Collectors.toList());
}
/**
* 电流信息
*
* @param param
* @return
*/
private List<ReportValue> dataI(ReportQueryParam param, List<String> valueTypes, Integer num, Integer size, Boolean fly, Integer index) {
List<RStatDataIDPO> rStatDataVDS = rStatDataIDMapper.selectList(new LambdaQueryWrapper<RStatDataIDPO>()
.eq(RStatDataIDPO::getLineId, param.getLineId())
.in(CollUtil.isNotEmpty(valueTypes), RStatDataIDPO::getPhaseType, valueTypes)
.ge(StrUtil.isNotBlank(param.getStartTime()), RStatDataIDPO::getTime, DateUtil.beginOfDay(DateUtil.parse(param.getStartTime())))
.le(StrUtil.isNotBlank(param.getEndTime()), RStatDataIDPO::getTime, DateUtil.endOfDay(DateUtil.parse(param.getEndTime())))
);
String max = "MAX";
String avg = "AVG";
String min = "MIN";
String cp95 = "CP95";
List<ReportValue> a = new ArrayList<>();
Map<String, List<RStatDataIDPO>> collect = rStatDataVDS.stream().collect(Collectors.groupingBy(RStatDataIDPO::getPhaseType));
collect.forEach((key, value) -> {
Map<String, List<RStatDataIDPO>> valueTypeMap = value.stream().collect(Collectors.groupingBy(RStatDataIDPO::getValueType));
for (int i = num; i < size; i++) {
ReportValue reportValue = new ReportValue();
String attribute = "";
if (fly) {
if (index == 0) {
attribute = attributeI(i);
} else {
attribute = attributeI(index);
}
} else {
attribute = "i" + i;
}
if (valueTypeMap.containsKey(max)) {
List<Float> aa = reflectDataI(valueTypeMap.get(max), max, attribute);
reportValue.setPhaseType(key);
Float maxNum = aa.stream().distinct().max(Float::compareTo).get();
reportValue.setFmaxValue(maxNum);
}
if (valueTypeMap.containsKey(avg)) {
List<Float> aa = reflectDataI(valueTypeMap.get(avg), avg, attribute);
reportValue.setPhaseType(key);
Double avgNum = aa.stream().distinct().collect(Collectors.averagingDouble(Float::doubleValue));
reportValue.setMeanValue(avgNum.floatValue());
}
if (valueTypeMap.containsKey(min)) {
List<Float> aa = reflectDataI(valueTypeMap.get(min), min, attribute);
reportValue.setPhaseType(key);
double minNum = aa.stream().distinct().min(Float::compareTo).get();
reportValue.setMinValue((float) minNum);
}
if (valueTypeMap.containsKey(cp95)) {
List<Float> aa = reflectDataI(valueTypeMap.get(cp95), cp95, attribute);
reportValue.setPhaseType(key);
List<Float> cp95Num = aa.stream().distinct().sorted(Comparator.comparing(Float::doubleValue).reversed()).collect(Collectors.toList());
reportValue.setCp95Value(cp95Num.get(0).floatValue());
}
a.add(reportValue);
}
});
return a;
}
/**
* 电流反射取属性值
*
* @param value
* @param name
* @return
*/
private List<Float> reflectDataI(List<RStatDataIDPO> value, String name, String attribute) {
Field field = null;
try {
field = RStatDataIDPO.class.getDeclaredField(attribute);
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
}
field.setAccessible(true);
Field finalField = field;
return value.stream().filter(x -> x.getValueType().equals(name)).map(temp -> {
Double o = null;
try {
o = (Double) finalField.get(temp);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
return o.floatValue();
}).collect(Collectors.toList());
}
/**
* 获取属性电压
*
* @param i
* @return
*/
private String attributeV(Integer i) {
String str = null;
switch (i) {
case 1:
str = "vUnbalance";
break;
case 2:
str = "vPos";
break;
case 3:
str = "vNeg";
break;
case 4:
str = "vZero";
break;
case 5:
str = "v1";
break;
default:
break;
}
return str;
}
/**
* 获取属性电流
*
* @param i
* @return
*/
private String attributeI(Integer i) {
String str = null;
switch (i) {
case 1:
str = "iUnbalance";
break;
case 2:
str = "iPos";
break;
case 3:
str = "iNeg";
break;
case 4:
str = "iZero";
break;
default:
break;
}
return str;
}
}

View File

@@ -0,0 +1,44 @@
package com.njcn.csharmonic.util;
import com.njcn.harmonic.pojo.vo.ReportValue;
import java.util.List;
public class RegroupData {
public static void regroupData(List<ReportValue> list, boolean... b) {
if (1 == b.length || (2 == b.length && b[1] == false)) {
if (0 < list.size()) {
return;
}
}
Float value = null;
int length = b[0] ? 3 : 1;
length = (b.length == 2 && !b[1]) ? 4 : length;
for (int i = 0; i < length; i++) {
String str = null;
if (b[0]) {
switch (i) {
case 0:
str = "A";
break;
case 1:
str = "B";
break;
case 2:
str = "C";
break;
case 3:
str = "T";
break;
}
}
ReportValue reportValue = new ReportValue(str, value, value, value, value);
list.add(reportValue);
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB