添加谐波报告功能
This commit is contained in:
@@ -27,4 +27,10 @@ public class ReportQueryParam {
|
|||||||
@NotBlank(message = "结束时间不可为空")
|
@NotBlank(message = "结束时间不可为空")
|
||||||
private String endTime;
|
private String endTime;
|
||||||
|
|
||||||
|
@ApiModelProperty(name = "b",value = "判断时间是否是当天(true 当天 false不是当天)")
|
||||||
|
private Boolean b ;
|
||||||
|
|
||||||
|
@ApiModelProperty(name = "lineId",value = "95条数取值")
|
||||||
|
private double count;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,81 @@
|
|||||||
|
package com.njcn.harmonic.pojo.po.report;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import org.influxdb.annotation.Column;
|
||||||
|
import org.influxdb.annotation.Measurement;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* data_v influxDB别名映射表
|
||||||
|
*
|
||||||
|
* @author qijian
|
||||||
|
* @version 1.0.0
|
||||||
|
* @createTime 2022/10/27 15:27
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Measurement(name = "data_i")
|
||||||
|
public class DataI {
|
||||||
|
|
||||||
|
@Column(name = "time")
|
||||||
|
private Instant time;
|
||||||
|
|
||||||
|
@Column(name = "phasic_type")
|
||||||
|
private String phaseType;
|
||||||
|
|
||||||
|
@Column(name = "value_type")
|
||||||
|
private String valueType;
|
||||||
|
|
||||||
|
@Column(name = "rms")
|
||||||
|
private Double rms;
|
||||||
|
|
||||||
|
@Column(name = "line_id")
|
||||||
|
private String lineId;
|
||||||
|
|
||||||
|
@Column(name = "freq_max")
|
||||||
|
private Double frepMAX;
|
||||||
|
|
||||||
|
@Column(name = "freq_min")
|
||||||
|
private Double frepMIN;
|
||||||
|
|
||||||
|
@Column(name = "rms_max")
|
||||||
|
private Double rmsMAX;
|
||||||
|
|
||||||
|
@Column(name = "rms_min")
|
||||||
|
private Double rmsMIN;
|
||||||
|
|
||||||
|
@Column(name = "rms_lvr_max")
|
||||||
|
private Double rmsLvrMAX;
|
||||||
|
|
||||||
|
@Column(name = "rms_lvr_min")
|
||||||
|
private Double rmsLvrMIN;
|
||||||
|
|
||||||
|
@Column(name = "v_thd_max")
|
||||||
|
private Double vThdMAX;
|
||||||
|
|
||||||
|
@Column(name = "v_thd_min")
|
||||||
|
private Double vThdMIN;
|
||||||
|
|
||||||
|
@Column(name = "v_unbalance_max")
|
||||||
|
private Double vUnbalanceMAX;
|
||||||
|
|
||||||
|
@Column(name = "v_unbalance_min")
|
||||||
|
private Double vUnbalanceMIN;
|
||||||
|
|
||||||
|
@Column(name = "freq_count")
|
||||||
|
private Integer freqCount;
|
||||||
|
|
||||||
|
@Column(name = "rms_count")
|
||||||
|
private Integer rmsCount;
|
||||||
|
|
||||||
|
@Column(name = "rms_lvr_count")
|
||||||
|
private Integer rmsLvrCount;
|
||||||
|
|
||||||
|
@Column(name = "v_thd_count")
|
||||||
|
private Integer vThdCount;
|
||||||
|
|
||||||
|
@Column(name = "v_unbalance_count")
|
||||||
|
private Integer vUnbalanceCount;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package com.njcn.harmonic.pojo.po.report;
|
||||||
|
|
||||||
|
public enum EnumPass {
|
||||||
|
MAX(1, "使用最大值与国标限值比较,判断指标是否合格"),
|
||||||
|
MIN(2, "使用最小值与国标限值比较,判断指标是否合格"),
|
||||||
|
MEAN(3, "使用平均值与国标限值比较,判断指标是否合格"),
|
||||||
|
CP95(4, "使用CP95值与国标限值比较,判断指标是否合格"),
|
||||||
|
DEFAULT(5, "不作比较"),
|
||||||
|
PASS(0, "合格"),
|
||||||
|
FPYVALUE(98, "合格率限值"),
|
||||||
|
FPYV(1, "UHARM_0_OVERTIME"),
|
||||||
|
FPYI(2, "IHARM_0_OVERTIME"),
|
||||||
|
FPYVOLTAGE(3, "VOLTAGE_DEV_OVERTIME"),
|
||||||
|
FPYTHREE(4, "UBALANCE_OVERTIME"),
|
||||||
|
FPYTHDV(5, "UABERRANCE_OVERTIME"),
|
||||||
|
FPYRATE(6, "FREQ_DEV_OVERTIME"),
|
||||||
|
FPYFLICKER(7, "FLICKER_OVERTIME"),
|
||||||
|
NOPASS(-1, "不合格");
|
||||||
|
|
||||||
|
private Integer code;
|
||||||
|
private String describe;
|
||||||
|
|
||||||
|
EnumPass(Integer code, String describe) {
|
||||||
|
this.code = code;
|
||||||
|
this.describe = describe;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getCode() {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescribe() {
|
||||||
|
return describe;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package com.njcn.harmonic.pojo.po.report;
|
||||||
|
|
||||||
|
|
||||||
|
import com.njcn.device.pq.pojo.po.Overlimit;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class OverLimitInfo implements Serializable {
|
||||||
|
private static final long serialVersionUID = 7466469972886414616L;
|
||||||
|
private List<Overlimit> overLimitRate;
|
||||||
|
private Double count;
|
||||||
|
private Double pltCount;
|
||||||
|
private Double pstCount;
|
||||||
|
private List<String> list;
|
||||||
|
private String mode;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package com.njcn.harmonic.pojo.po.report;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wr
|
||||||
|
* @description
|
||||||
|
* @date 2023/4/12 11:40
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class Pass {
|
||||||
|
private Float overLimit;
|
||||||
|
private Integer code;
|
||||||
|
|
||||||
|
public Pass(Float overLimit) {
|
||||||
|
this.code = EnumPass.DEFAULT.getCode();
|
||||||
|
this.overLimit = overLimit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Pass(Float overLimit, Integer code) {
|
||||||
|
this.overLimit = overLimit;
|
||||||
|
this.code = code;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.njcn.harmonic.pojo.po.report;
|
||||||
|
|
||||||
|
import com.njcn.harmonic.pojo.vo.ReportValue;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
@Data
|
||||||
|
public class ReportTarget implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = -6931764660060228127L;
|
||||||
|
private List<ReportValue> list;
|
||||||
|
private Float overLimit; //指标的国标限值
|
||||||
|
private Integer pass;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
package com.njcn.harmonic.pojo.vo;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wr
|
||||||
|
* @description
|
||||||
|
* @date 2023/4/10 15:36
|
||||||
|
*/
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class ReportValue implements Serializable {
|
||||||
|
|
||||||
|
private String phaseType; //A(AB)相,B(BC)相,C(CA)相,T总功
|
||||||
|
private Float fmaxValue; //最大值
|
||||||
|
private Float minValue; //最小值
|
||||||
|
private Float meanValue; //平均值
|
||||||
|
private Float cp95Value; //CP95值
|
||||||
|
|
||||||
|
public String getPhaseType() {
|
||||||
|
return phaseType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Float getFmaxValue() {
|
||||||
|
return fmaxValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Float getMinValue() {
|
||||||
|
return minValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Float getMeanValue() {
|
||||||
|
return meanValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Float getCp95Value() {
|
||||||
|
return cp95Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPhaseType(String phaseType) {
|
||||||
|
this.phaseType = phaseType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFmaxValue(Float fmaxValue) {
|
||||||
|
this.fmaxValue = transData(fmaxValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMinValue(Float minValue) {
|
||||||
|
this.minValue = transData(minValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMeanValue(Float meanValue) {
|
||||||
|
this.meanValue = transData(meanValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCp95Value(Float cp95Value) {
|
||||||
|
this.cp95Value = transData(cp95Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ReportValue(String phaseType, Float maxValue, Float minValue, Float meanValue, Float cp95Value) {
|
||||||
|
this.phaseType = phaseType;
|
||||||
|
this.fmaxValue = transData(maxValue);
|
||||||
|
this.minValue = transData(minValue);
|
||||||
|
this.meanValue = transData(meanValue);
|
||||||
|
this.cp95Value = transData(cp95Value);
|
||||||
|
}
|
||||||
|
private Float transData(Float f) {
|
||||||
|
if (f == null) {
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
float f1 = (float) (Math.round(f.floatValue() * 100)) / 100;
|
||||||
|
return new Float(f1);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,141 @@
|
|||||||
|
package com.njcn.harmonic.utils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author hongawen
|
||||||
|
* @date: 2020/8/20 13:36
|
||||||
|
*/
|
||||||
|
public class ClearPathUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 针对漏洞,新增的特殊字符替换的扫描方法
|
||||||
|
*/
|
||||||
|
public static String cleanString(String str) {
|
||||||
|
if (str == null){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
for (int i = 0; i < str.length(); ++i) {
|
||||||
|
sb.append(cleanChar(str.charAt(i)));
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static char cleanChar(char ch) {
|
||||||
|
|
||||||
|
// 0 - 9
|
||||||
|
for (int i = 48; i < 58; ++i) {
|
||||||
|
if (ch == i) {
|
||||||
|
return (char) i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 'A' - 'Z'
|
||||||
|
for (int i = 65; i < 91; ++i) {
|
||||||
|
if (ch == i) {
|
||||||
|
return (char) i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 'a' - 'z'
|
||||||
|
for (int i = 97; i < 123; ++i) {
|
||||||
|
if (ch == i) {
|
||||||
|
return (char) i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// other valid characters
|
||||||
|
switch (ch) {
|
||||||
|
case '/':
|
||||||
|
return '/';
|
||||||
|
case '.':
|
||||||
|
return '.';
|
||||||
|
case '-':
|
||||||
|
return '-';
|
||||||
|
case '_':
|
||||||
|
return '_';
|
||||||
|
case ',':
|
||||||
|
return ',';
|
||||||
|
case ' ':
|
||||||
|
return ' ';
|
||||||
|
case '!':
|
||||||
|
return '!';
|
||||||
|
case '@':
|
||||||
|
return '@';
|
||||||
|
case '#':
|
||||||
|
return '#';
|
||||||
|
case '$':
|
||||||
|
return '$';
|
||||||
|
case '%':
|
||||||
|
return '%';
|
||||||
|
case '^':
|
||||||
|
return '^';
|
||||||
|
case '&':
|
||||||
|
return '&';
|
||||||
|
case '*':
|
||||||
|
return '*';
|
||||||
|
case '(':
|
||||||
|
return '(';
|
||||||
|
case ')':
|
||||||
|
return ')';
|
||||||
|
case '+':
|
||||||
|
return '+';
|
||||||
|
case '=':
|
||||||
|
return '=';
|
||||||
|
case ':':
|
||||||
|
return ':';
|
||||||
|
case ';':
|
||||||
|
return ';';
|
||||||
|
case '?':
|
||||||
|
return '?';
|
||||||
|
case '"':
|
||||||
|
return '"';
|
||||||
|
case '<':
|
||||||
|
return '<';
|
||||||
|
case '>':
|
||||||
|
return '>';
|
||||||
|
case '`':
|
||||||
|
return '`';
|
||||||
|
case '\\':
|
||||||
|
return '/';
|
||||||
|
case 'I':
|
||||||
|
return 'I';
|
||||||
|
case 'Ⅱ':
|
||||||
|
return 'Ⅱ';
|
||||||
|
case 'Ⅲ':
|
||||||
|
return 'Ⅲ';
|
||||||
|
case 'Ⅳ':
|
||||||
|
return 'Ⅳ';
|
||||||
|
case 'Ⅴ':
|
||||||
|
return 'Ⅴ';
|
||||||
|
case 'Ⅵ':
|
||||||
|
return 'Ⅵ';
|
||||||
|
case 'Ⅶ':
|
||||||
|
return 'Ⅶ';
|
||||||
|
case 'Ⅷ':
|
||||||
|
return 'Ⅷ';
|
||||||
|
case 'Ⅸ':
|
||||||
|
return 'Ⅸ';
|
||||||
|
|
||||||
|
case 'V':
|
||||||
|
return 'V';
|
||||||
|
case 'X':
|
||||||
|
return 'X';
|
||||||
|
case 'Ⅹ':
|
||||||
|
return 'Ⅹ';
|
||||||
|
}
|
||||||
|
if (isChineseChar(ch)){
|
||||||
|
return ch;
|
||||||
|
}
|
||||||
|
return '%';
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据Unicode编码判断中文汉字和符号
|
||||||
|
private static boolean isChineseChar(char c) {
|
||||||
|
Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
|
||||||
|
return ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
|
||||||
|
|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B
|
||||||
|
|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
|
||||||
|
|| ub == Character.UnicodeBlock.GENERAL_PUNCTUATION;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
package com.njcn.harmonic.utils;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.poi.openxml4j.opc.OPCPackage;
|
||||||
|
import org.apache.poi.xwpf.usermodel.XWPFDocument;
|
||||||
|
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
|
||||||
|
import org.apache.xmlbeans.XmlException;
|
||||||
|
import org.apache.xmlbeans.XmlToken;
|
||||||
|
import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps;
|
||||||
|
import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D;
|
||||||
|
import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTInline;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
public class CustomXWPFDocument extends XWPFDocument {
|
||||||
|
// 日志记录
|
||||||
|
public CustomXWPFDocument(InputStream in) throws IOException {
|
||||||
|
super(in);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CustomXWPFDocument() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public CustomXWPFDocument(OPCPackage pkg) throws IOException {
|
||||||
|
super(pkg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param id
|
||||||
|
* @param width
|
||||||
|
* 宽
|
||||||
|
* @param height
|
||||||
|
* 高
|
||||||
|
* @param paragraph
|
||||||
|
* 段落
|
||||||
|
*/
|
||||||
|
public void createPicture(int id, int width, int height,String blipId, XWPFParagraph paragraph) {
|
||||||
|
final int EMU = 9525;
|
||||||
|
width *= EMU;
|
||||||
|
height *= EMU;
|
||||||
|
// String blipId = getAllPictures().get(id).getPackageRelationship().getId();
|
||||||
|
CTInline inline = paragraph.createRun().getCTR().addNewDrawing().addNewInline();
|
||||||
|
String picXml = "" + "<a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">"
|
||||||
|
+ " <a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">"
|
||||||
|
+ " <pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">"
|
||||||
|
+ " <pic:nvPicPr>" + " <pic:cNvPr id=\"" + id + "\" name=\"Generated\"/>"
|
||||||
|
+ " <pic:cNvPicPr/>" + " </pic:nvPicPr>" + " <pic:blipFill>"
|
||||||
|
+ " <a:blip r:embed=\"" + blipId
|
||||||
|
+ "\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"/>"
|
||||||
|
+ " <a:stretch>" + " <a:fillRect/>" + " </a:stretch>"
|
||||||
|
+ " </pic:blipFill>" + " <pic:spPr>" + " <a:xfrm>"
|
||||||
|
+ " <a:off x=\"0\" y=\"0\"/>" + " <a:ext cx=\"" + width + "\" cy=\""
|
||||||
|
+ height + "\"/>" + " </a:xfrm>" + " <a:prstGeom prst=\"rect\">"
|
||||||
|
+ " <a:avLst/>" + " </a:prstGeom>" + " </pic:spPr>"
|
||||||
|
+ " </pic:pic>" + " </a:graphicData>" + "</a:graphic>";
|
||||||
|
|
||||||
|
inline.addNewGraphic().addNewGraphicData();
|
||||||
|
XmlToken xmlToken = null;
|
||||||
|
try {
|
||||||
|
xmlToken = XmlToken.Factory.parse(picXml);
|
||||||
|
} catch (XmlException xe) {
|
||||||
|
log.error("生成报表发生异常,异常是"+xe.getMessage());
|
||||||
|
}
|
||||||
|
inline.set(xmlToken);
|
||||||
|
|
||||||
|
inline.setDistT(0);
|
||||||
|
inline.setDistB(0);
|
||||||
|
inline.setDistL(0);
|
||||||
|
inline.setDistR(0);
|
||||||
|
|
||||||
|
CTPositiveSize2D extent = inline.addNewExtent();
|
||||||
|
extent.setCx(width);
|
||||||
|
extent.setCy(height);
|
||||||
|
|
||||||
|
CTNonVisualDrawingProps docPr = inline.addNewDocPr();
|
||||||
|
docPr.setId(id);
|
||||||
|
docPr.setName("图片" + id);
|
||||||
|
docPr.setDescr("测试");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
package com.njcn.harmonic.utils;
|
||||||
|
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.net.Socket;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author wr
|
||||||
|
* @description
|
||||||
|
* @date 2023/4/10 17:39
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class PubUtils {
|
||||||
|
public static boolean createFile(String destFileName) {
|
||||||
|
File file = new File(destFileName);
|
||||||
|
if (file.exists()) {
|
||||||
|
log.warn("创建单个文件" + destFileName + "失败,目标文件已存在!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (destFileName.endsWith(File.separator)) {
|
||||||
|
log.warn("创建单个文件" + destFileName + "失败,目标文件不能为目录!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
//判断目标文件所在的目录是否存在
|
||||||
|
if (!file.getParentFile().exists()) {
|
||||||
|
//如果目标文件所在的目录不存在,则创建父目录
|
||||||
|
log.warn("目标文件所在目录不存在,准备创建它!");
|
||||||
|
if (!file.getParentFile().mkdirs()) {
|
||||||
|
log.warn("创建目标文件所在目录失败!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//创建目标文件
|
||||||
|
try {
|
||||||
|
if (file.createNewFile()) {
|
||||||
|
log.warn("创建单个文件" + destFileName + "成功!");
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
log.warn("创建单个文件" + destFileName + "失败!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.warn("创建单个文件" + destFileName + "失败!" + e.getMessage());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 读取配置文件
|
||||||
|
*
|
||||||
|
* @param cl 类名字
|
||||||
|
* @param strPropertiesName 配置文件名称
|
||||||
|
*/
|
||||||
|
public static Properties readProperties(ClassLoader cl, String strPropertiesName) {
|
||||||
|
Properties pros = new Properties();
|
||||||
|
InputStream in = null;
|
||||||
|
try {
|
||||||
|
in = cl.getResourceAsStream(strPropertiesName);
|
||||||
|
pros.load(in);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("读取配置文件失败失败:" + e.getMessage());
|
||||||
|
} finally {
|
||||||
|
if (in != null) {
|
||||||
|
PubUtils.safeClose(in, "安全关闭读取配置文件失败,异常为:");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return pros;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 安全关闭InputStream
|
||||||
|
*
|
||||||
|
* @param s
|
||||||
|
*/
|
||||||
|
public static void safeClose(InputStream s, String strError) {
|
||||||
|
if (s != null) {
|
||||||
|
try {
|
||||||
|
s.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error(strError + e.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,360 @@
|
|||||||
|
package com.njcn.harmonic.utils;
|
||||||
|
|
||||||
|
import org.apache.poi.xwpf.usermodel.*;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import javax.servlet.ServletOutputStream;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.servlet.http.HttpSession;
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.URLEncoder;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
|
||||||
|
public class WordUtil2 {
|
||||||
|
// 日志记录
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(WordUtil2.class);
|
||||||
|
|
||||||
|
public void getWord(String path, Map<String, Object> params, String fileName, HttpServletResponse response, HttpSession session)
|
||||||
|
throws Exception {
|
||||||
|
path = ClearPathUtil.cleanString(path);
|
||||||
|
File file = new File(path);
|
||||||
|
InputStream inStream = null;
|
||||||
|
CustomXWPFDocument doc = null;
|
||||||
|
//读取报告模板
|
||||||
|
try {
|
||||||
|
inStream = new FileInputStream(file);
|
||||||
|
doc = new CustomXWPFDocument(inStream);
|
||||||
|
this.replaceInTable(doc, params); // 替换表格里面的变量
|
||||||
|
this.replaceInPara(doc, params); // 替换文本里面的变量
|
||||||
|
} catch (IOException e) {
|
||||||
|
logger.error("获取报告模板异常,原因为:" + e.toString());
|
||||||
|
} finally {
|
||||||
|
if (null != inStream) {
|
||||||
|
inStream.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// //读取配置文件
|
||||||
|
// Properties pros = PubUtils.readProperties(getClass().getClassLoader(), "java.properties");
|
||||||
|
// String tmpPath = pros.get("TMP_PATH").toString() +File.separator+ "offlinereoprt";
|
||||||
|
// tmpPath= ClearPathUtil.cleanString(tmpPath);
|
||||||
|
// OutputStream os = null;
|
||||||
|
// File tmpfile = new File(tmpPath);
|
||||||
|
// if(!tmpfile.exists()){
|
||||||
|
// tmpfile.mkdir();
|
||||||
|
// }
|
||||||
|
// tmpPath = tmpPath +File.separator+ fileName;
|
||||||
|
// tmpPath= ClearPathUtil.cleanString(tmpPath);
|
||||||
|
// File tmp = new File(tmpPath);
|
||||||
|
// if(tmp.exists()){
|
||||||
|
// tmp.delete();
|
||||||
|
// }
|
||||||
|
// PubUtils.createFile(tmpPath);
|
||||||
|
try {
|
||||||
|
// os = new FileOutputStream(tmpPath);
|
||||||
|
// if (doc != null) {
|
||||||
|
// doc.write(os);
|
||||||
|
// }
|
||||||
|
ServletOutputStream outputStream = response.getOutputStream();
|
||||||
|
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
|
||||||
|
response.setContentType("application/octet-stream;charset=UTF-8");
|
||||||
|
doc.write(outputStream);
|
||||||
|
outputStream.close();
|
||||||
|
|
||||||
|
// session.setAttribute("tmpPath", tmpPath);
|
||||||
|
// session.setAttribute("fileName", fileName);
|
||||||
|
} catch (Exception e) {
|
||||||
|
session.setAttribute("tmpPath", "");
|
||||||
|
session.setAttribute("fileName", "");
|
||||||
|
logger.error("输出稳态报告异常,原因为:" + e.toString());
|
||||||
|
} finally {
|
||||||
|
// if (os != null) {
|
||||||
|
// os.close();
|
||||||
|
// }
|
||||||
|
if (doc != null) {
|
||||||
|
doc.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 替换段落里面的变量
|
||||||
|
*
|
||||||
|
* @param doc 要替换的文档
|
||||||
|
* @param params 参数
|
||||||
|
*/
|
||||||
|
private void replaceInPara(CustomXWPFDocument doc, Map<String, Object> params) {
|
||||||
|
Iterator<XWPFParagraph> iterator = doc.getParagraphsIterator();
|
||||||
|
List<XWPFParagraph> paragraphList = new ArrayList<>();
|
||||||
|
XWPFParagraph para;
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
para = iterator.next();
|
||||||
|
paragraphList.add(para);
|
||||||
|
}
|
||||||
|
processParagraphs(paragraphList, params, doc);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void replaceInTable(CustomXWPFDocument doc, Map<String, Object> params) {
|
||||||
|
Iterator<XWPFTable> it = doc.getTablesIterator();
|
||||||
|
while (it.hasNext()) {
|
||||||
|
XWPFTable table = it.next();
|
||||||
|
List<XWPFTableRow> rows = table.getRows();
|
||||||
|
for (XWPFTableRow row : rows) {
|
||||||
|
List<XWPFTableCell> cells = row.getTableCells();
|
||||||
|
for (XWPFTableCell cell : cells) {
|
||||||
|
List<XWPFParagraph> paragraphListTable = cell.getParagraphs();
|
||||||
|
processParagraphs(paragraphListTable, params, doc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void processParagraphs(List<XWPFParagraph> paragraphList, Map<String, Object> param,
|
||||||
|
CustomXWPFDocument doc) {
|
||||||
|
if (paragraphList != null && paragraphList.size() > 0) {
|
||||||
|
for (XWPFParagraph paragraph : paragraphList) {
|
||||||
|
List<XWPFRun> runs = paragraph.getRuns();
|
||||||
|
if (runs.size() > 0) {
|
||||||
|
for (XWPFRun run : runs) {
|
||||||
|
String bflag = "";
|
||||||
|
String text = run.getText(0);
|
||||||
|
if (text != null) {
|
||||||
|
boolean isSetText = false;
|
||||||
|
for (Entry<String, Object> entry : param.entrySet()) {
|
||||||
|
String key = entry.getKey();
|
||||||
|
if (text.indexOf(key) != -1) {
|
||||||
|
isSetText = true;
|
||||||
|
Object value = entry.getValue();
|
||||||
|
if (value instanceof String) {// 文本替换
|
||||||
|
text = text.replace(key, value.toString());
|
||||||
|
} else if (value instanceof Map) {// 图片替换
|
||||||
|
text = text.replace(key, "");
|
||||||
|
Map pic = (Map) value;
|
||||||
|
int width = Integer.parseInt(pic.get("width").toString());
|
||||||
|
int height = Integer.parseInt(pic.get("height").toString());
|
||||||
|
int picType = getPictureType(pic.get("type").toString());
|
||||||
|
byte[] byteArray = (byte[]) pic.get("content");
|
||||||
|
ByteArrayInputStream byteInputStream = new ByteArrayInputStream(byteArray);
|
||||||
|
try {
|
||||||
|
String s = doc.addPictureData(byteInputStream, picType);
|
||||||
|
|
||||||
|
doc.createPicture(doc.getAllPictures().size() - 1, width, height,
|
||||||
|
s,paragraph);
|
||||||
|
bflag = "break";
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error("文本替换发生异常,异常是" + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isSetText) {
|
||||||
|
run.setText(text, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (bflag == "break") {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 替换段落里面的变量
|
||||||
|
*
|
||||||
|
* @param para 要替换的段落
|
||||||
|
* @param params 参数
|
||||||
|
*/
|
||||||
|
private void replaceInPara(XWPFParagraph para, Map<String, Object> params, CustomXWPFDocument doc) {
|
||||||
|
List<XWPFRun> runs;
|
||||||
|
Matcher matcher;
|
||||||
|
// if (this.matcher(para.getParagraphText()).find()) {
|
||||||
|
runs = para.getRuns();
|
||||||
|
int start = -1;
|
||||||
|
int end = -1;
|
||||||
|
String str = "";
|
||||||
|
for (int i = 0; i < runs.size(); i++) {
|
||||||
|
XWPFRun run = runs.get(i);
|
||||||
|
String runText = run.toString();
|
||||||
|
if ('$' == runText.charAt(0) && '{' == runText.charAt(1)) {
|
||||||
|
start = i;
|
||||||
|
}
|
||||||
|
if ((start != -1)) {
|
||||||
|
str += runText;
|
||||||
|
}
|
||||||
|
if ('}' == runText.charAt(runText.length() - 1)) {
|
||||||
|
if (start != -1) {
|
||||||
|
end = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = start; i <= end; i++) {
|
||||||
|
para.removeRun(i);
|
||||||
|
i--;
|
||||||
|
end--;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Entry<String, Object> entry : params.entrySet()) {
|
||||||
|
String key = entry.getKey();
|
||||||
|
if (str.indexOf(key) != -1) {
|
||||||
|
Object value = entry.getValue();
|
||||||
|
if (value instanceof String) {
|
||||||
|
str = str.replace(key, value.toString());
|
||||||
|
para.createRun().setText(str, 0);
|
||||||
|
break;
|
||||||
|
} else if (value instanceof Map) {
|
||||||
|
str = str.replace(key, "");
|
||||||
|
Map pic = (Map) value;
|
||||||
|
int width = Integer.parseInt(pic.get("width").toString());
|
||||||
|
int height = Integer.parseInt(pic.get("height").toString());
|
||||||
|
int picType = getPictureType(pic.get("type").toString());
|
||||||
|
byte[] byteArray = (byte[]) pic.get("content");
|
||||||
|
ByteArrayInputStream byteInputStream = new ByteArrayInputStream(byteArray);
|
||||||
|
try {
|
||||||
|
// int ind = doc.addPicture(byteInputStream,picType);
|
||||||
|
// doc.createPicture(ind, width , height,para);
|
||||||
|
String s = doc.addPictureData(byteInputStream, picType);
|
||||||
|
doc.createPicture(doc.getAllPictures().size() - 1, width, height,s, para);
|
||||||
|
para.createRun().setText(str, 0);
|
||||||
|
break;
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error("文件替换发生异常,异常是" + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 为表格插入数据,行数不够添加新行
|
||||||
|
*
|
||||||
|
* @param table 需要插入数据的表格
|
||||||
|
* @param tableList 插入数据集合
|
||||||
|
*/
|
||||||
|
private static void insertTable(XWPFTable table, List<String[]> tableList) {
|
||||||
|
// 创建行,根据需要插入的数据添加新行,不处理表头
|
||||||
|
for (int i = 0; i < tableList.size(); i++) {
|
||||||
|
XWPFTableRow row = table.createRow();
|
||||||
|
}
|
||||||
|
// 遍历表格插入数据
|
||||||
|
List<XWPFTableRow> rows = table.getRows();
|
||||||
|
int length = table.getRows().size();
|
||||||
|
for (int i = 1; i < length - 1; i++) {
|
||||||
|
XWPFTableRow newRow = table.getRow(i);
|
||||||
|
List<XWPFTableCell> cells = newRow.getTableCells();
|
||||||
|
for (int j = 0; j < cells.size(); j++) {
|
||||||
|
XWPFTableCell cell = cells.get(j);
|
||||||
|
String s = tableList.get(i - 1)[j];
|
||||||
|
cell.setText(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 替换表格里面的变量
|
||||||
|
*
|
||||||
|
* @param doc 要替换的文档
|
||||||
|
* @param params 参数
|
||||||
|
*/
|
||||||
|
private void replaceInTable(CustomXWPFDocument doc, Map<String, Object> params, List<String[]> tableList) {
|
||||||
|
Iterator<XWPFTable> iterator = doc.getTablesIterator();
|
||||||
|
XWPFTable table;
|
||||||
|
List<XWPFTableRow> rows;
|
||||||
|
List<XWPFTableCell> cells;
|
||||||
|
List<XWPFParagraph> paras;
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
table = iterator.next();
|
||||||
|
if (table.getRows().size() > 1) {
|
||||||
|
// 判断表格是需要替换还是需要插入,判断逻辑有$为替换,表格无$为插入
|
||||||
|
if (this.matcher(table.getText()).find()) {
|
||||||
|
rows = table.getRows();
|
||||||
|
for (XWPFTableRow row : rows) {
|
||||||
|
cells = row.getTableCells();
|
||||||
|
for (XWPFTableCell cell : cells) {
|
||||||
|
paras = cell.getParagraphs();
|
||||||
|
for (XWPFParagraph para : paras) {
|
||||||
|
this.replaceInPara(para, params, doc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
insertTable(table, tableList); // 插入数据
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 正则匹配字符串
|
||||||
|
*
|
||||||
|
* @param str
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private Matcher matcher(String str) {
|
||||||
|
Pattern pattern = Pattern.compile("\\$\\{(.+?)\\}", Pattern.CASE_INSENSITIVE);
|
||||||
|
Matcher matcher = pattern.matcher(str);
|
||||||
|
return matcher;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据图片类型,取得对应的图片类型代码
|
||||||
|
*
|
||||||
|
* @param picType
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
private static int getPictureType(String picType) {
|
||||||
|
int res = CustomXWPFDocument.PICTURE_TYPE_PICT;
|
||||||
|
if (picType != null) {
|
||||||
|
if (picType.equalsIgnoreCase("image/png")) {
|
||||||
|
res = CustomXWPFDocument.PICTURE_TYPE_PNG;
|
||||||
|
} else if (picType.equalsIgnoreCase("image/dib")) {
|
||||||
|
res = CustomXWPFDocument.PICTURE_TYPE_DIB;
|
||||||
|
} else if (picType.equalsIgnoreCase("image/emf")) {
|
||||||
|
res = CustomXWPFDocument.PICTURE_TYPE_EMF;
|
||||||
|
} else if (picType.equalsIgnoreCase("image/jpg") || picType.equalsIgnoreCase("image/jpeg")) {
|
||||||
|
res = CustomXWPFDocument.PICTURE_TYPE_JPEG;
|
||||||
|
} else if (picType.equalsIgnoreCase("image/wmf")) {
|
||||||
|
res = CustomXWPFDocument.PICTURE_TYPE_WMF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 关闭输入流
|
||||||
|
*
|
||||||
|
* @param is
|
||||||
|
*/
|
||||||
|
private void close(InputStream is) {
|
||||||
|
if (is != null) {
|
||||||
|
try {
|
||||||
|
is.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
logger.error("关闭输入流发生异常,异常是" + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 关闭输出流
|
||||||
|
*
|
||||||
|
* @param os
|
||||||
|
*/
|
||||||
|
private void close(OutputStream os) {
|
||||||
|
if (os != null) {
|
||||||
|
try {
|
||||||
|
os.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
logger.error("关闭输出流发生异常,异常是" + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -95,6 +95,16 @@
|
|||||||
<build>
|
<build>
|
||||||
<finalName>harmonicboot</finalName>
|
<finalName>harmonicboot</finalName>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-resources-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<encoding>UTF-8</encoding>
|
||||||
|
<nonFilteredFileExtensions>
|
||||||
|
<nonFilteredFileExtension>docx</nonFilteredFileExtension>
|
||||||
|
</nonFilteredFileExtensions>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,16 @@
|
|||||||
|
package com.njcn.harmonic.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.njcn.harmonic.pojo.po.day.RStatDataIDPO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>
|
||||||
|
* Mapper 接口
|
||||||
|
* </p>
|
||||||
|
*
|
||||||
|
* @author wr
|
||||||
|
* @since 2023-04-17
|
||||||
|
*/
|
||||||
|
public interface RStatDataIDMapper extends BaseMapper<RStatDataIDPO> {
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,130 @@
|
|||||||
|
package com.njcn.harmonic.mapper;
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<?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.harmonic.mapper.RStatDataIDMapper">
|
||||||
|
|
||||||
|
</mapper>
|
||||||
@@ -0,0 +1,905 @@
|
|||||||
|
<?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.harmonic.mapper.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 rank = #{param.count} THEN rms END ) AS cp95Value
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
rms,
|
||||||
|
rank
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
rms,
|
||||||
|
@rank := IF( @CI := phasic_type, @rank + 1, 1 ) AS rank,
|
||||||
|
@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` <= #{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 rank = #{param.count} THEN rms END ) AS cp95Value
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
rms,
|
||||||
|
rank
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
rms,
|
||||||
|
@rank := IF( @CI = phasic_type, @rank + 1, 1 ) AS rank,
|
||||||
|
@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` <= #{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` <= #{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` <= #{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` <= #{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 rank = #{param.count} THEN rms END ) AS cp95Value
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
rms,
|
||||||
|
rank
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
rms_lvr as rms,
|
||||||
|
@rank := IF( @CI = phasic_type, @rank + 1, 1 ) AS rank,
|
||||||
|
@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` <= #{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 rank = #{param.count} THEN rms END ) AS cp95Value
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
rms,
|
||||||
|
rank
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
p as rms,
|
||||||
|
@rank :=
|
||||||
|
IF
|
||||||
|
( @CI = phasic_type, @rank + 1, 1 ) AS rank,
|
||||||
|
@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` <= #{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 rank = #{param.count} THEN rms END ) AS cp95Value
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
rms,
|
||||||
|
rank
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
pf as rms,
|
||||||
|
@rank :=
|
||||||
|
IF
|
||||||
|
( @CI = phasic_type, @rank + 1, 1 ) AS rank,
|
||||||
|
@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` <= #{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 rank = #{param.count} THEN rms END ) AS cp95Value
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
rms,
|
||||||
|
rank
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
q as rms,
|
||||||
|
@rank :=
|
||||||
|
IF
|
||||||
|
( @CI = phasic_type, @rank + 1, 1 ) AS rank,
|
||||||
|
@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` <= #{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 rank = #{param.count} THEN rms END ) AS cp95Value
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
rms,
|
||||||
|
rank
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
s as rms,
|
||||||
|
@rank :=
|
||||||
|
IF
|
||||||
|
( @CI = phasic_type, @rank + 1, 1 ) AS rank,
|
||||||
|
@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` <= #{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 rank = #{param.count} THEN rms END ) AS cp95Value
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
rms,
|
||||||
|
rank
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
plt as rms,
|
||||||
|
@rank :=
|
||||||
|
IF
|
||||||
|
( @CI = phasic_type, @rank + 1, 1 ) AS rank,
|
||||||
|
@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` <= #{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 rank = #{param.count} THEN rms END ) AS cp95Value
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
rms,
|
||||||
|
rank
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
pst as rms,
|
||||||
|
@rank :=
|
||||||
|
IF
|
||||||
|
( @CI = phasic_type, @rank + 1, 1 ) AS rank,
|
||||||
|
@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` <= #{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 rank = #{param.count} THEN rms END ) AS cp95Value
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
rms,
|
||||||
|
rank
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
vu_dev as rms,
|
||||||
|
@rank := IF( @CI := phasic_type, @rank + 1, 1 ) AS rank,
|
||||||
|
@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` <= #{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 rank = #{param.count} THEN rms END ) AS cp95Value
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
rms,
|
||||||
|
rank
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
vl_dev as rms,
|
||||||
|
@rank := IF( @CI := phasic_type, @rank + 1, 1 ) AS rank,
|
||||||
|
@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` <= #{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 rank = #{param.count} THEN rms END ) AS cp95Value
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
rms,
|
||||||
|
rank
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
v_thd as rms,
|
||||||
|
@rank := IF( @CI := phasic_type, @rank + 1, 1 ) AS rank,
|
||||||
|
@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` <= #{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 rank = #{param.count} THEN rms END ) AS cp95Value
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
rms,
|
||||||
|
rank
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
i_thd as rms,
|
||||||
|
@rank := IF( @CI := phasic_type, @rank + 1, 1 ) AS rank,
|
||||||
|
@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` <= #{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 rank = #{param.count} THEN rms END ) AS cp95Value
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
rms,
|
||||||
|
rank
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
freq as rms,
|
||||||
|
@rank := IF( @CI := phasic_type, @rank + 1, 1 ) AS rank,
|
||||||
|
@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` <= #{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 rank = #{param.count} THEN rms END ) AS cp95Value
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
rms,
|
||||||
|
rank
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT
|
||||||
|
phasic_type,
|
||||||
|
value_type,
|
||||||
|
freq_dev as rms,
|
||||||
|
@rank := IF( @CI := phasic_type, @rank + 1, 1 ) AS rank,
|
||||||
|
@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` <= #{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>
|
||||||
|
|
||||||
|
</mapper>
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
package com.njcn.harmonic.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);
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
package com.njcn.harmonic.service.impl;
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,484 @@
|
|||||||
|
package com.njcn.harmonic.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.njcn.harmonic.mapper.RStatDataIDMapper;
|
||||||
|
import com.njcn.harmonic.mapper.ReportMapper;
|
||||||
|
import com.njcn.harmonic.pojo.po.RStatDataVD;
|
||||||
|
import com.njcn.harmonic.pojo.po.day.RStatDataIDPO;
|
||||||
|
import com.njcn.harmonic.pojo.param.ReportQueryParam;
|
||||||
|
import com.njcn.harmonic.pojo.po.report.OverLimitInfo;
|
||||||
|
import com.njcn.harmonic.pojo.vo.ReportValue;
|
||||||
|
import com.njcn.harmonic.service.IRStatDataVDService;
|
||||||
|
import com.njcn.harmonic.service.ReportService;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class ReportServiceImpl implements ReportService {
|
||||||
|
|
||||||
|
private final ReportMapper reportMapper;
|
||||||
|
private final IRStatDataVDService statDataVDService;
|
||||||
|
private final RStatDataIDMapper rStatDataIDMapper;
|
||||||
|
|
||||||
|
@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;
|
||||||
|
}
|
||||||
|
|
||||||
|
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 = statDataVDService.list(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 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
pqs-harmonic/harmonic-boot/src/main/resources/file/default.jpg
Normal file
BIN
pqs-harmonic/harmonic-boot/src/main/resources/file/default.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 76 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user