diff --git a/pqs-advance/advance-api/pom.xml b/pqs-advance/advance-api/pom.xml
index efcb1f2d2..eb06043eb 100644
--- a/pqs-advance/advance-api/pom.xml
+++ b/pqs-advance/advance-api/pom.xml
@@ -39,7 +39,20 @@
3.0.9
compile
-
-
+
+ com.njcn
+ common-poi
+ ${project.version}
+
+
+ com.njcn
+ common-oss
+ ${project.version}
+
+
+ com.njcn
+ harmonic-api
+ ${project.version}
+
diff --git a/pqs-advance/advance-api/src/main/java/com/njcn/advance/enums/AdvanceResponseEnum.java b/pqs-advance/advance-api/src/main/java/com/njcn/advance/enums/AdvanceResponseEnum.java
new file mode 100644
index 000000000..909f41a62
--- /dev/null
+++ b/pqs-advance/advance-api/src/main/java/com/njcn/advance/enums/AdvanceResponseEnum.java
@@ -0,0 +1,52 @@
+package com.njcn.advance.enums;
+
+import lombok.Getter;
+
+/**
+ * @author hongawen
+ * @version 1.0.0
+ * @date 2021年04月13日 10:50
+ */
+@Getter
+public enum AdvanceResponseEnum {
+
+ ANALYSIS_USER_DATA_ERROR("A0101","解析用采数据内容失败"),
+
+ INTERNAL_ERROR("A0101","系统内部异常"),
+
+ USER_DATA_EMPTY("A0101","用采数据内容为空"),
+
+ USER_DATA_NOT_FOUND("A0101","未找到用采数据"),
+
+ RESP_DATA_NOT_FOUND("A0101","未找到责任划分数据"),
+
+ WIN_TIME_ERROR("A0101","限值时间小于窗口"),
+
+ CALCULATE_INTERVAL_ERROR("A0101","对齐计算间隔值非法"),
+
+ RESP_RESULT_DATA_NOT_FOUND("A0101","未找到责任划分缓存数据"),
+
+ USER_DATA_P_NODE_PARAMETER_ERROR("A0101","无用采用户或所有用户的完整性均不满足条件"),
+
+ RESPONSIBILITY_PARAMETER_ERROR("A0101","调用接口程序计算失败,参数非法")
+ ;
+
+ private final String code;
+
+ private final String message;
+
+ AdvanceResponseEnum(String code, String message) {
+ this.code = code;
+ this.message = message;
+ }
+
+ public static String getCodeByMsg(String msg){
+ for (AdvanceResponseEnum userCodeEnum : AdvanceResponseEnum.values()) {
+ if (userCodeEnum.message.equalsIgnoreCase(msg)) {
+ return userCodeEnum.code;
+ }
+ }
+ return "";
+ }
+
+}
diff --git a/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/bo/responsibility/CacheQvvrData.java b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/bo/responsibility/CacheQvvrData.java
new file mode 100644
index 000000000..852412a36
--- /dev/null
+++ b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/bo/responsibility/CacheQvvrData.java
@@ -0,0 +1,48 @@
+package com.njcn.advance.pojo.bo.responsibility;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 当根据动态责任数据获取用户责任量化结果时,将需要的一些参数进行缓存
+ * 比如 harmNum,pNode,HKData,FKData,HarmData,监测点的测量间隔,win窗口,最小公倍数
+ * 以及FKData每个时间点的p对应的用户List
+ *
+ * @author hongawen
+ * @Date: 2019/4/29 16:06
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class CacheQvvrData implements Serializable {
+
+ private int pNode;
+
+ private int harmNum;
+
+ private float[] harmData;
+
+ private PDataStruct[] FKdata;
+
+ private HKDataStruct[] HKdata;
+
+ private List names;
+
+ private int lineInterval;
+
+ private int win;
+
+ //最小公倍数
+ private int minMultiple;
+
+ //横轴时间
+ private List times;
+
+
+
+}
diff --git a/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/bo/responsibility/DealDataResult.java b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/bo/responsibility/DealDataResult.java
new file mode 100644
index 000000000..d1d4a3ad2
--- /dev/null
+++ b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/bo/responsibility/DealDataResult.java
@@ -0,0 +1,37 @@
+package com.njcn.advance.pojo.bo.responsibility;
+
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.*;
+
+/**
+ * 处理用采原始数据得到的一个结果
+ *
+ * @author hongawen
+ * @Date: 2019/4/26 15:57
+ */
+@Data
+public class DealDataResult implements Serializable {
+
+ /***
+ * String 户号@监测点号@户名
+ * String yyyy-MM-dd
+ * Date 数据的详细日期
+ * UserDataExcel 数据详细信息
+ * 先以测量局号分组,再以该测量局号下每个日期分组
+ */
+ private Map>> totalData = new HashMap<>();
+
+ private List dates = new ArrayList<>();
+
+ /***
+ * String 户号@监测点号@户名
+ * String yyyy-MM-dd
+ * UserDataExcel 数据详细信息
+ * 先以测量局号分组,再以该测量局号下每个日期分组
+ */
+ private Map>> totalListData = new HashMap<>();
+
+}
diff --git a/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/bo/responsibility/DealUserDataResult.java b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/bo/responsibility/DealUserDataResult.java
new file mode 100644
index 000000000..365244dc8
--- /dev/null
+++ b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/bo/responsibility/DealUserDataResult.java
@@ -0,0 +1,31 @@
+package com.njcn.advance.pojo.bo.responsibility;
+
+
+import com.njcn.advance.pojo.po.responsibility.RespUserDataIntegrity;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 针对天处理用采数据的结果实体
+ * @author hongawen
+ * @Date: 2019/4/19 14:38
+ */
+@Data
+public class DealUserDataResult implements Serializable {
+
+ //处理好的数据
+ private List completed = new ArrayList<>();
+
+ //因当日完整性不足90,没有处理直接返回
+ private List lack = new ArrayList<>();
+
+ //完整性不足时,用户信息描述
+ private String detail;
+
+ //完整性不足的具体信息
+ private RespUserDataIntegrity respUserDataIntegrity;
+
+}
diff --git a/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/bo/responsibility/HKDataStruct.java b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/bo/responsibility/HKDataStruct.java
new file mode 100644
index 000000000..a4d7e74e2
--- /dev/null
+++ b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/bo/responsibility/HKDataStruct.java
@@ -0,0 +1,37 @@
+package com.njcn.advance.pojo.bo.responsibility;
+
+import com.sun.jna.Structure;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+public class HKDataStruct extends Structure implements Serializable {
+ public float hk[] = new float[QvvrStruct.MAX_P_NODE + 1];
+
+ @Override
+ protected List getFieldOrder() {
+ return null;
+ }
+
+ public HKDataStruct(double[] hk) {
+ for (int i = 0; i < hk.length; i++) {
+ this.hk[i] = (float) hk[i];
+ }
+ }
+
+ public static class ByReference extends HKDataStruct implements Structure.ByReference {
+ public ByReference(double[] p) {
+ super(p);
+ }
+ }
+
+ public static class ByValue extends HKDataStruct implements Structure.ByValue {
+ public ByValue(double[] p) {
+ super(p);
+ }
+ }
+}
diff --git a/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/bo/responsibility/PDataStruct.java b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/bo/responsibility/PDataStruct.java
new file mode 100644
index 000000000..d04f1cf89
--- /dev/null
+++ b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/bo/responsibility/PDataStruct.java
@@ -0,0 +1,41 @@
+package com.njcn.advance.pojo.bo.responsibility;
+
+import com.sun.jna.Structure;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+public class PDataStruct extends Structure implements Serializable {
+
+ public float p[] = new float[QvvrStruct.MAX_P_NODE];
+
+ @Override
+ protected List getFieldOrder() {
+ return null;
+ }
+
+ public PDataStruct(double[] p) {
+ for (int i = 0; i < p.length; i++) {
+ this.p[i] = (float) p[i];
+ }
+ }
+
+ public static class ByReference extends PDataStruct implements Structure.ByReference {
+ public ByReference(double[] p) {
+ super(p);
+ }
+ }
+
+ public static class ByValue extends PDataStruct implements Structure.ByValue {
+ public ByValue(double[] p) {
+ super(p);
+ }
+ }
+
+
+}
diff --git a/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/bo/responsibility/QvvrStruct.java b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/bo/responsibility/QvvrStruct.java
new file mode 100644
index 000000000..119e17cc1
--- /dev/null
+++ b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/bo/responsibility/QvvrStruct.java
@@ -0,0 +1,200 @@
+package com.njcn.advance.pojo.bo.responsibility;
+
+import com.sun.jna.Structure;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.List;
+
+public class QvvrStruct extends Structure implements Serializable {
+ public static final int MAX_P_NODE= 200; //功率节点个数限制,按200个限制
+ public static final int MAX_P_NUM= 96 * 100; //功率数据按15分钟间隔,100天处理
+ public static final int MAX_HARM_NUM= 1440 * 100; //谐波数据按一分钟间隔,100天处理
+ public static final int MAX_WIN_LEN=96 * 10; //按15分钟算10天
+ public static final int MIN_WIN_LEN = 4; //按15分钟算1小时
+
+
+ //输入参数
+ public int cal_flag; //计算标志,0默认用电压和功率数据计算相关系数和责任,1用代入的动态相关系数计算责任
+ public int harm_num; //谐波数据个数
+ public int p_num; //功率数据个数
+ public int p_node; //功率负荷节点数
+ public int win; //数据窗大小
+ public int res_num; //代入的责任数据个数
+ public float harm_mk; //谐波电压门槛
+ public float harm_data[]; //谐波数据序列
+ public PDataStruct p_data[]; //功率数据序列
+ public PDataStruct sim_data[]; //动态相关系数数据序列,可作为输入或者输出
+ public PDataStruct FKdata[]; //不包含背景动态谐波责任数据序列,可作为输入或者输出
+ public HKDataStruct HKdata[]; //包含背景动态谐波责任数据序列,可作为输入或者输出
+ public float Core[]; //典则相关系数
+ public float BjCore[]; //包含背景典则相关系数
+
+ //输出结果
+ public int cal_ok; //是否计算正确标志,置位0表示未计算,置位1表示计算完成
+ public float sumFKdata[];//不包含背景谐波责任
+ public float sumHKdata[];//包含背景谐波责任
+
+ public QvvrStruct() {
+ cal_flag = 0;
+ harm_data = new float[MAX_HARM_NUM];
+ p_data = new PDataStruct[MAX_P_NUM];
+ sim_data = new PDataStruct[MAX_P_NUM];
+ FKdata = new PDataStruct[MAX_P_NUM];
+ HKdata = new HKDataStruct[MAX_P_NUM];
+ Core = new float[MAX_P_NUM];
+ BjCore = new float[MAX_P_NUM];
+ sumFKdata = new float[MAX_P_NODE];
+ sumHKdata = new float[MAX_P_NODE + 1];
+ }
+
+ public static class ByReference extends QvvrStruct implements Structure.ByReference {
+
+ }
+
+ public static class ByValue extends QvvrStruct implements Structure.ByValue {
+
+ }
+
+
+ public PDataStruct[] getFKdata() {
+ return FKdata;
+ }
+
+ public void setFKdata(PDataStruct[] FKdata) {
+ this.FKdata = FKdata;
+ }
+
+ public HKDataStruct[] getHKdata() {
+ return HKdata;
+ }
+
+ public void setHKdata(HKDataStruct[] HKdata) {
+ this.HKdata = HKdata;
+ }
+
+ public float[] getSumFKdata() {
+ return sumFKdata;
+ }
+
+ public void setSumFKdata(float[] sumFKdata) {
+ this.sumFKdata = sumFKdata;
+ }
+
+ public float[] getSumHKdata() {
+ return sumHKdata;
+ }
+
+ public void setSumHKdata(float[] sumHKdata) {
+ this.sumHKdata = sumHKdata;
+ }
+
+ public int getCal_flag() {
+ return cal_flag;
+ }
+
+ public void setCal_flag(int cal_flag) {
+ this.cal_flag = cal_flag;
+ }
+
+ public int getHarm_num() {
+ return harm_num;
+ }
+
+ public void setHarm_num(int harm_num) {
+ this.harm_num = harm_num;
+ }
+
+ public float getHarm_mk() {
+ return harm_mk;
+ }
+
+ public void setHarm_mk(float harm_mk) {
+ this.harm_mk = harm_mk;
+ }
+
+ public float[] getHarm_data() {
+ return harm_data;
+ }
+
+ public void setHarm_data(float[] harm_data) {
+ this.harm_data = harm_data;
+ }
+
+ public float[] getCore() {
+ return Core;
+ }
+
+ public void setCore(float[] core) {
+ Core = core;
+ }
+
+ public float[] getBjCore() {
+ return BjCore;
+ }
+
+ public void setBjCore(float[] bjCore) {
+ BjCore = bjCore;
+ }
+
+ public int getCal_ok() {
+ return cal_ok;
+ }
+
+ public void setCal_ok(int cal_ok) {
+ this.cal_ok = cal_ok;
+ }
+
+ public int getP_num() {
+ return p_num;
+ }
+
+ public void setP_num(int p_num) {
+ this.p_num = p_num;
+ }
+
+ public int getP_node() {
+ return p_node;
+ }
+
+ public void setP_node(int p_node) {
+ this.p_node = p_node;
+ }
+
+ public int getWin() {
+ return win;
+ }
+
+ public void setWin(int win) {
+ this.win = win;
+ }
+
+ public int getRes_num() {
+ return res_num;
+ }
+
+ public void setRes_num(int res_num) {
+ this.res_num = res_num;
+ }
+
+ public PDataStruct[] getP_data() {
+ return p_data;
+ }
+
+ public void setP_data(PDataStruct[] p_data) {
+ this.p_data = p_data;
+ }
+
+ public PDataStruct[] getSim_data() {
+ return sim_data;
+ }
+
+ public void setSim_data(PDataStruct[] sim_data) {
+ this.sim_data = sim_data;
+ }
+
+ @Override
+ protected List getFieldOrder() {
+ return Arrays.asList(new String[]{"sumFKdata", "sumHKdata"});
+ }
+}
diff --git a/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/bo/responsibility/UserDataExcel.java b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/bo/responsibility/UserDataExcel.java
new file mode 100644
index 000000000..a6ea6a6fa
--- /dev/null
+++ b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/bo/responsibility/UserDataExcel.java
@@ -0,0 +1,47 @@
+package com.njcn.advance.pojo.bo.responsibility;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateUtil;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 提取用采数据或者将用采数据写进excel的实体类
+ *
+ * @author hongawen
+ * @date 2019/4/11 10:43
+ */
+@Data
+public class UserDataExcel implements Serializable, Comparable {
+
+ @Excel(name = "时间")
+ private String time;
+
+ @Excel(name = "瞬时功率")
+ private BigDecimal work;
+
+ @Excel(name = "户号")
+ private String userId;
+
+ @Excel(name = "测量点局号")
+ private String line;
+
+ @Excel(name = "户名")
+ private String userName;
+
+
+ @Override
+ public int compareTo(UserDataExcel o) {
+
+ if (DateUtil.parse(this.time, DatePattern.NORM_DATETIME_PATTERN).getTime() > DateUtil.parse(o.getTime(), DatePattern.NORM_DATETIME_PATTERN).getTime()) {
+ return 1;
+ } else if (DateUtil.parse(this.time, DatePattern.NORM_DATETIME_PATTERN).getTime() == DateUtil.parse(o.getTime(), DatePattern.NORM_DATETIME_PATTERN).getTime()) {
+ return 0;
+ }
+ return -1;
+ }
+}
diff --git a/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/dto/responsibility/CustomerData.java b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/dto/responsibility/CustomerData.java
new file mode 100644
index 000000000..0b3a4d3d2
--- /dev/null
+++ b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/dto/responsibility/CustomerData.java
@@ -0,0 +1,27 @@
+package com.njcn.advance.pojo.dto.responsibility;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author hongawen
+ * @Date: 2019/4/3 13:34
+ */
+@Data
+public class CustomerData implements Serializable {
+
+ /***
+ * 用户名称
+ */
+ private String customerName;
+
+
+ /***
+ * 每时刻的数据
+ */
+ private List valueDatas=new ArrayList<>();
+
+}
diff --git a/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/dto/responsibility/CustomerResponsibility.java b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/dto/responsibility/CustomerResponsibility.java
new file mode 100644
index 000000000..bb585e377
--- /dev/null
+++ b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/dto/responsibility/CustomerResponsibility.java
@@ -0,0 +1,28 @@
+package com.njcn.advance.pojo.dto.responsibility;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @author hongawen
+ * @Date: 2019/4/3 13:35
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class CustomerResponsibility implements Serializable {
+
+ /***
+ * 用户名
+ */
+ private String customerName;
+
+ /***
+ * 责任值
+ */
+ private float responsibilityData;
+
+}
diff --git a/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/dto/responsibility/RespDataDTO.java b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/dto/responsibility/RespDataDTO.java
new file mode 100644
index 000000000..a537d8c24
--- /dev/null
+++ b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/dto/responsibility/RespDataDTO.java
@@ -0,0 +1,29 @@
+package com.njcn.advance.pojo.dto.responsibility;
+
+import com.njcn.advance.pojo.po.responsibility.RespData;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author hongawen
+ * @version 1.0.0
+ * @date 2023年07月24日 17:49
+ */
+@Data
+public class RespDataDTO extends RespData implements Serializable {
+
+ private String userDataName;
+
+ private String gdName;
+
+ private String subName;
+
+ private String devName;
+
+ private String ip;
+
+ private String lineName;
+
+
+}
diff --git a/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/dto/responsibility/ResponsibilityResult.java b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/dto/responsibility/ResponsibilityResult.java
new file mode 100644
index 000000000..7d8f0a4a5
--- /dev/null
+++ b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/dto/responsibility/ResponsibilityResult.java
@@ -0,0 +1,53 @@
+package com.njcn.advance.pojo.dto.responsibility;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 谐波责任量化最终结果,包括动态数据和责任量化结果
+ *
+ * @author hongawen
+ * @Date: 2019/4/3 15:00
+ */
+@Data
+public class ResponsibilityResult implements Serializable {
+
+ /***
+ * 限值
+ */
+ private String limitValue;
+
+ /***
+ * 指定起始时间
+ */
+ private String limitSTime;
+
+ /***
+ * 指定结束时间
+ */
+ private String limitETime;
+
+ /***
+ * 责任划分结果存库数据
+ */
+ private String responsibilityDataIndex;
+
+ /***
+ * 每个用户的详细时刻的责任数据
+ */
+ private List datas;
+
+ /***
+ * 时间轴
+ */
+ private List timeDatas=new ArrayList<>();
+
+ /***
+ * 用户责任的表格数据
+ */
+ private List responsibilities;
+
+}
diff --git a/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/param/ResponsibilityCalculateParam.java b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/param/ResponsibilityCalculateParam.java
new file mode 100644
index 000000000..f624a72aa
--- /dev/null
+++ b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/param/ResponsibilityCalculateParam.java
@@ -0,0 +1,50 @@
+package com.njcn.advance.pojo.param;
+
+import com.njcn.common.pojo.constant.PatternRegex;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Pattern;
+import java.io.Serializable;
+
+/**
+ * @author hongawen
+ * @version 1.0.0
+ * @date 2023年07月21日 10:20
+ */
+@Data
+public class ResponsibilityCalculateParam implements Serializable {
+
+
+ @ApiModelProperty("开始时间")
+ @NotBlank(message = "参数不能为空")
+ @Pattern(regexp = PatternRegex.TIME_FORMAT, message = "时间格式错误")
+ private String searchBeginTime;
+
+ @ApiModelProperty("结束时间")
+ @NotBlank(message = "参数不能为空")
+ @Pattern(regexp = PatternRegex.TIME_FORMAT, message = "时间格式错误")
+ private String searchEndTime;
+
+ @NotBlank(message = "参数不能为空")
+ @ApiModelProperty("监测点索引")
+ private String lineId;
+
+ @NotBlank(message = "参数不能为空")
+ @ApiModelProperty("用采数据索引")
+ private String userDataId;
+
+ @Min(0)
+ @Max(1)
+ @ApiModelProperty("0-电流 1-电压")
+ private int type;
+
+ @Min(2)
+ @Max(50)
+ @ApiModelProperty("谐波次数")
+ private Integer time;
+
+}
diff --git a/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/param/ResponsibilitySecondCalParam.java b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/param/ResponsibilitySecondCalParam.java
new file mode 100644
index 000000000..35a762497
--- /dev/null
+++ b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/param/ResponsibilitySecondCalParam.java
@@ -0,0 +1,46 @@
+package com.njcn.advance.pojo.param;
+
+import com.njcn.common.pojo.constant.PatternRegex;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Pattern;
+import java.io.Serializable;
+
+/**
+ * @author hongawen
+ * @version 1.0.0
+ * @date 2023年07月24日 15:47
+ */
+@Data
+public class ResponsibilitySecondCalParam implements Serializable {
+
+ @NotBlank(message = "参数不能为空")
+ @ApiModelProperty("责任数据索引")
+ private String resDataId;
+
+ @Min(2)
+ @Max(50)
+ @ApiModelProperty("谐波次数")
+ private Integer time;
+
+ @Min(0)
+ @Max(1)
+ @ApiModelProperty("0-电流 1-电压")
+ private int type;
+
+ @ApiModelProperty("限值")
+ private float limitValue;
+
+ @ApiModelProperty("开始时间(yyyy-MM-dd HH:mm:ss)")
+ @NotBlank(message = "参数不能为空")
+ private String limitStartTime;
+
+ @ApiModelProperty("结束时间(yyyy-MM-dd HH:mm:ss)")
+ @NotBlank(message = "参数不能为空")
+ private String limitEndTime;
+
+}
diff --git a/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/param/UserDataIntegrityParam.java b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/param/UserDataIntegrityParam.java
new file mode 100644
index 000000000..cc8c03636
--- /dev/null
+++ b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/param/UserDataIntegrityParam.java
@@ -0,0 +1,19 @@
+package com.njcn.advance.pojo.param;
+
+import com.njcn.web.pojo.param.BaseParam;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author hongawen
+ * @version 1.0.0
+ * @date 2023年07月25日 14:14
+ */
+@Data
+public class UserDataIntegrityParam extends BaseParam implements Serializable {
+
+
+ private String userDataId;
+
+}
diff --git a/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/po/responsibility/RespData.java b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/po/responsibility/RespData.java
new file mode 100644
index 000000000..3ea329aa3
--- /dev/null
+++ b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/po/responsibility/RespData.java
@@ -0,0 +1,57 @@
+package com.njcn.advance.pojo.po.responsibility;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.njcn.db.bo.BaseEntity;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author hongawen
+ * @since 2023-07-21
+ */
+@Getter
+@Setter
+@TableName("pqs_resp_data")
+public class RespData extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 责任量化数据结果
+ */
+ private String id;
+
+ /**
+ * 监测点索引
+ */
+ private String lineId;
+
+ /**
+ * 用采数据索引
+ */
+ private String userDataId;
+
+ /**
+ * 谐波类型(谐波电压、谐波电流)
+ */
+ private String dataType;
+
+ /**
+ * 谐波次数
+ */
+ private String dataTimes;
+
+ /**
+ * 计算的时间窗口
+ */
+ private String timeWindow;
+
+ /**
+ * 状态(0 删除 1正常)
+ */
+ private Integer state;
+
+}
diff --git a/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/po/responsibility/RespDataResult.java b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/po/responsibility/RespDataResult.java
new file mode 100644
index 000000000..382145390
--- /dev/null
+++ b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/po/responsibility/RespDataResult.java
@@ -0,0 +1,82 @@
+package com.njcn.advance.pojo.po.responsibility;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.njcn.db.bo.BaseEntity;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ *
+ *
+ *
+ * @author hongawen
+ * @since 2023-07-24
+ */
+@Getter
+@Setter
+@TableName("pqs_resp_data_result")
+public class RespDataResult extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 责任划分结果数据文件保存记录表
+ */
+ private String id;
+
+ /**
+ * 责任划分结果表id
+ */
+ private String resDataId;
+
+ /**
+ * 限值
+ */
+ private Float limitValue;
+
+ /***
+ * 起始时间
+ */
+ private Date startTime;
+
+ /***
+ * 结束时间
+ */
+ private Date endTime;
+
+ /**
+ * 谐波次数
+ */
+ private Integer time;
+
+ /**
+ * 用户责任数据地址
+ */
+ private String userDetailData;
+
+ /**
+ * 用户责任时间数据地址
+ */
+ private String timeData;
+
+ /**
+ * 前10用户的每刻对应的责任数据地址
+ */
+ private String userResponsibility;
+
+ /**
+ * 调用高级算法后的数据结果地址,提供二次计算
+ */
+ private String qvvrData;
+
+ /**
+ * 状态(0 删除 1正常)
+ */
+ private Integer state;
+
+}
diff --git a/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/po/responsibility/RespUserData.java b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/po/responsibility/RespUserData.java
new file mode 100644
index 000000000..5d967f44b
--- /dev/null
+++ b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/po/responsibility/RespUserData.java
@@ -0,0 +1,60 @@
+package com.njcn.advance.pojo.po.responsibility;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.njcn.db.bo.BaseEntity;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author hongawen
+ * @since 2023-07-13
+ */
+@Getter
+@Setter
+@TableName("pqs_resp_user_data")
+public class RespUserData extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 用采数据表id
+ */
+ private String id;
+
+ /**
+ * 用采数据名称
+ */
+ private String name;
+
+ /**
+ * 起始日期
+ */
+ private LocalDate startTime;
+
+ /**
+ * 截止日期
+ */
+ private LocalDate endTime;
+
+ /**
+ * 0 存在数据不完整的;1 存在数据完整
+ */
+ private Integer integrity = 1;
+
+ /**
+ * 用采数据存放地址
+ */
+ private String dataPath;
+
+ /**
+ * 状态(0 删除 1正常)
+ */
+ private Integer state;
+
+}
diff --git a/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/po/responsibility/RespUserDataIntegrity.java b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/po/responsibility/RespUserDataIntegrity.java
new file mode 100644
index 000000000..d8a20195f
--- /dev/null
+++ b/pqs-advance/advance-api/src/main/java/com/njcn/advance/pojo/po/responsibility/RespUserDataIntegrity.java
@@ -0,0 +1,64 @@
+package com.njcn.advance.pojo.po.responsibility;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.njcn.db.bo.BaseEntity;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ *
+ * @author hongawen
+ * @since 2023-07-13
+ */
+@Getter
+@Setter
+@TableName("pqs_resp_user_data_integrity")
+public class RespUserDataIntegrity extends BaseEntity {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 用采数据完整不足表Id
+ */
+ private String id;
+
+ /**
+ * 用采数据表id
+ */
+ private String userDataId;
+
+ /**
+ * 用户名称
+ */
+ private String userName;
+
+ /**
+ * 用户户号
+ */
+ private String userNo;
+
+ /**
+ * 测量点局号
+ */
+ private String lineNo;
+
+ /**
+ * 数据不完整的日期
+ */
+ private LocalDate lackDate;
+
+ /**
+ * 完整率(低于90%会记录)
+ */
+ private BigDecimal integrity;
+
+ /**
+ * 状态(0 删除 1正常)
+ */
+ private Integer state;
+
+}
diff --git a/pqs-advance/advance-boot/src/main/java/com/njcn/advance/controller/responsibility/ResponsibilityController.java b/pqs-advance/advance-boot/src/main/java/com/njcn/advance/controller/responsibility/ResponsibilityController.java
new file mode 100644
index 000000000..9b9a754b5
--- /dev/null
+++ b/pqs-advance/advance-boot/src/main/java/com/njcn/advance/controller/responsibility/ResponsibilityController.java
@@ -0,0 +1,95 @@
+package com.njcn.advance.controller.responsibility;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.njcn.advance.pojo.dto.responsibility.RespDataDTO;
+import com.njcn.advance.pojo.dto.responsibility.ResponsibilityResult;
+import com.njcn.advance.pojo.param.ResponsibilityCalculateParam;
+import com.njcn.advance.pojo.param.ResponsibilitySecondCalParam;
+import com.njcn.advance.service.responsibility.IRespDataResultService;
+import com.njcn.advance.service.responsibility.IRespDataService;
+import com.njcn.common.pojo.annotation.OperateInfo;
+import com.njcn.common.pojo.enums.common.LogEnum;
+import com.njcn.common.pojo.enums.response.CommonResponseEnum;
+import com.njcn.common.pojo.response.HttpResult;
+import com.njcn.common.utils.HttpResultUtil;
+import com.njcn.web.controller.BaseController;
+import com.njcn.web.pojo.param.BaseParam;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+
+/**
+ * @author hongawen
+ * @version 1.0.0
+ * @date 2023年07月21日 10:06
+ */
+@RestController
+@RequestMapping("responsibility")
+@Api(tags = "谐波责任划分-谐波责任数据处理")
+@RequiredArgsConstructor
+public class ResponsibilityController extends BaseController {
+
+ private final IRespDataService respDataService;
+
+ private final IRespDataResultService respDataResultService;
+
+ @OperateInfo(info = LogEnum.BUSINESS_COMMON)
+ @PostMapping("/responsibilityList")
+ @ApiOperation("列表分页")
+ @ApiImplicitParam(name = "queryParam", value = "查询参数", required = true)
+ public HttpResult> responsibilityList(@RequestBody @Validated BaseParam queryParam) {
+ String methodDescribe = getMethodDescribe("responsibilityList");
+ Page list = respDataService.responsibilityList(queryParam);
+ return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
+ }
+
+ @OperateInfo(info = LogEnum.BUSINESS_COMMON)
+ @PostMapping("/deleteByIds")
+ @ApiOperation("删除责任划分数据")
+ @ApiImplicitParam(name = "ids", value = "待删除的责任id集合", required = true)
+ public HttpResult> deleteByIds(@RequestBody List ids) {
+ String methodDescribe = getMethodDescribe("deleteByIds");
+ respDataService.deleteByIds(ids);
+ return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
+ }
+
+
+
+ @PostMapping("getDynamicData")
+ @OperateInfo(info = LogEnum.BUSINESS_COMMON)
+ @ApiOperation("动态谐波责任划分")
+ @ApiImplicitParam(name = "responsibilityCalculateParam", value = "谐波责任动态划分参数", required = true)
+ public HttpResult getDynamicData(@RequestBody @Validated ResponsibilityCalculateParam responsibilityCalculateParam) {
+ String methodDescribe = getMethodDescribe("getDynamicData");
+ ResponsibilityResult datas = respDataService.getDynamicData(responsibilityCalculateParam);
+ return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, datas, methodDescribe);
+ }
+
+ @PostMapping("getResponsibilityData")
+ @OperateInfo(info = LogEnum.BUSINESS_COMMON)
+ @ApiOperation("二次计算责任划分")
+ @ApiImplicitParam(name = "responsibilitySecondCalParam", value = "二次计算责任划分参数", required = true)
+ public HttpResult getResponsibilityData(@RequestBody @Validated ResponsibilitySecondCalParam responsibilitySecondCalParam) {
+ String methodDescribe = getMethodDescribe("getResponsibilityData");
+ ResponsibilityResult datas = respDataService.getResponsibilityData(responsibilitySecondCalParam);
+ return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, datas, methodDescribe);
+ }
+
+
+ @GetMapping("displayHistoryData")
+ @OperateInfo(info = LogEnum.BUSINESS_COMMON)
+ @ApiOperation("回显历史责任划分结果")
+ @ApiImplicitParam(name = "id", value = "责任数据id", required = true)
+ public HttpResult> displayHistoryData(String id,Integer time) {
+ String methodDescribe = getMethodDescribe("displayHistoryData");
+ List datas = respDataResultService.displayHistoryData(id,time);
+ return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, datas, methodDescribe);
+ }
+
+}
diff --git a/pqs-advance/advance-boot/src/main/java/com/njcn/advance/controller/responsibility/UserDataController.java b/pqs-advance/advance-boot/src/main/java/com/njcn/advance/controller/responsibility/UserDataController.java
new file mode 100644
index 000000000..7c48cbeae
--- /dev/null
+++ b/pqs-advance/advance-boot/src/main/java/com/njcn/advance/controller/responsibility/UserDataController.java
@@ -0,0 +1,112 @@
+package com.njcn.advance.controller.responsibility;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.njcn.advance.pojo.dto.responsibility.RespDataDTO;
+import com.njcn.advance.pojo.param.UserDataIntegrityParam;
+import com.njcn.advance.pojo.po.responsibility.RespUserData;
+import com.njcn.advance.pojo.po.responsibility.RespUserDataIntegrity;
+import com.njcn.advance.service.responsibility.IRespUserDataIntegrityService;
+import com.njcn.advance.service.responsibility.IRespUserDataService;
+import com.njcn.common.pojo.annotation.OperateInfo;
+import com.njcn.common.pojo.dto.SelectOption;
+import com.njcn.common.pojo.enums.common.LogEnum;
+import com.njcn.common.pojo.enums.response.CommonResponseEnum;
+import com.njcn.common.pojo.exception.BusinessException;
+import com.njcn.common.pojo.response.HttpResult;
+import com.njcn.common.utils.HttpResultUtil;
+import com.njcn.web.controller.BaseController;
+import com.njcn.web.pojo.param.BaseParam;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.RequiredArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * @author hongawen
+ * @version 1.0.0
+ * @date 2023年07月13日 14:11
+ */
+@RestController
+@RequestMapping("responsibility")
+@Api(tags = "谐波责任划分-用采数据处理")
+@RequiredArgsConstructor
+public class UserDataController extends BaseController {
+
+
+ private final IRespUserDataService respUserDataService;
+
+ private final IRespUserDataIntegrityService respUserDataIntegrityService;
+
+
+ @OperateInfo(info = LogEnum.BUSINESS_COMMON)
+ @PostMapping("/userDataList")
+ @ApiOperation("列表分页")
+ @ApiImplicitParam(name = "queryParam", value = "查询参数", required = true)
+ public HttpResult> userDataList(@RequestBody @Validated BaseParam queryParam) {
+ String methodDescribe = getMethodDescribe("userDataList");
+ Page list = respUserDataService.userDataList(queryParam);
+ return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
+ }
+
+
+ @OperateInfo(info = LogEnum.BUSINESS_COMMON)
+ @GetMapping("/userDataIntegrityList")
+ @ApiOperation("用采完整性不足列表")
+ @ApiImplicitParam(name = "userDataIntegrityParam", value = "查询参数", required = true)
+ public HttpResult> userDataIntegrityList(@RequestBody @Validated UserDataIntegrityParam userDataIntegrityParam) {
+ String methodDescribe = getMethodDescribe("userDataIntegrityList");
+ Page list = respUserDataIntegrityService.userDataIntegrityList(userDataIntegrityParam);
+ return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe);
+ }
+
+ @OperateInfo(info = LogEnum.BUSINESS_COMMON)
+ @PostMapping("/deleteUserDataByIds")
+ @ApiOperation("删除用采数据")
+ @ApiImplicitParam(name = "ids", value = "待删除用采数据id集合", required = true)
+ public HttpResult> deleteUserDataByIds(@RequestBody List ids) {
+ String methodDescribe = getMethodDescribe("deleteUserDataByIds");
+ respUserDataService.deleteUserDataByIds(ids);
+ return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
+ }
+
+
+ @OperateInfo(info = LogEnum.BUSINESS_COMMON)
+ @GetMapping("/userDataSelect")
+ @ApiOperation("用采数据下拉")
+ public HttpResult> userDataSelect() {
+ String methodDescribe = getMethodDescribe("userDataSelect");
+ List listOption = respUserDataService.userDataSelect();
+ return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, listOption, methodDescribe);
+ }
+
+ /**
+ * 上传用采数据,并对用采数据进行数据分析并缓存
+ *
+ * @param file 上传的表格
+ */
+ @PostMapping("uploadUserData")
+ @OperateInfo(info = LogEnum.BUSINESS_COMMON)
+ @ApiOperation("上传用采数据")
+ public HttpResult