谐波溯源翻译成java 第一版本,写完技术监督再回来优化
This commit is contained in:
@@ -18,10 +18,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.njcn.advance.enums.AdvanceResponseEnum;
|
||||
import com.njcn.advance.mapper.responsibility.RespDataMapper;
|
||||
import com.njcn.advance.model.responsibility.CacheQvvrData;
|
||||
import com.njcn.advance.model.responsibility.HKDataStruct;
|
||||
import com.njcn.advance.model.responsibility.PDataStruct;
|
||||
import com.njcn.advance.model.responsibility.QvvrStruct;
|
||||
import com.njcn.advance.model.responsibility.*;
|
||||
import com.njcn.advance.pojo.bo.responsibility.*;
|
||||
import com.njcn.advance.pojo.dto.responsibility.CustomerData;
|
||||
import com.njcn.advance.pojo.dto.responsibility.CustomerResponsibility;
|
||||
@@ -31,10 +28,10 @@ import com.njcn.advance.pojo.param.ResponsibilityCalculateParam;
|
||||
import com.njcn.advance.pojo.param.ResponsibilitySecondCalParam;
|
||||
import com.njcn.advance.pojo.po.responsibility.RespData;
|
||||
import com.njcn.advance.pojo.po.responsibility.RespDataResult;
|
||||
import com.njcn.advance.pojo.po.responsibility.RespUserData;
|
||||
import com.njcn.advance.service.responsibility.IRespDataResultService;
|
||||
import com.njcn.advance.service.responsibility.IRespDataService;
|
||||
import com.njcn.advance.service.responsibility.IRespUserDataService;
|
||||
import com.njcn.advance.utils.ResponsibilityAlgorithm;
|
||||
import com.njcn.advance.utils.ResponsibilityCallDllOrSo;
|
||||
import com.njcn.common.pojo.enums.common.DataStateEnum;
|
||||
import com.njcn.common.pojo.exception.BusinessException;
|
||||
@@ -104,7 +101,7 @@ public class RespDataServiceImpl extends ServiceImpl<RespDataMapper, RespData> i
|
||||
//没有排序参数,默认根据sort字段排序,没有排序字段的,根据updateTime更新时间排序
|
||||
queryWrapper.orderBy(true, false, "pqs_resp_data.create_time");
|
||||
}
|
||||
queryWrapper.between("pqs_resp_data.create_time", queryParam.getSearchBeginTime(), queryParam.getSearchEndTime());
|
||||
queryWrapper.between("pqs_resp_data.create_time",DateUtil.beginOfDay(DateUtil.parse(queryParam.getSearchBeginTime())), DateUtil.endOfDay(DateUtil.parse(queryParam.getSearchEndTime())));
|
||||
}
|
||||
queryWrapper.eq("pqs_resp_data.state", DataStateEnum.ENABLE.getCode());
|
||||
Page<RespDataDTO> page = this.baseMapper.page(new Page<>(PageFactory.getPageNum(queryParam), PageFactory.getPageSize(queryParam)), queryWrapper);
|
||||
@@ -185,69 +182,67 @@ public class RespDataServiceImpl extends ServiceImpl<RespDataMapper, RespData> i
|
||||
names.add(userName);
|
||||
}
|
||||
//然后开始组装数据
|
||||
PDataStruct[] pData = new PDataStruct[QvvrStruct.MAX_P_NUM];
|
||||
float[][] pData = new float[QvvrDataEntity.MAX_P_NUM][QvvrDataEntity.MAX_P_NODE];
|
||||
for (int i = 0; i < names.size(); i++) {
|
||||
//当前某用户测量节点的所有数据
|
||||
List<UserDataExcel> userDataExcelBodies1 = originalPData.get(names.get(i));
|
||||
for (int k = 0; k < userDataExcelBodies1.size(); k++) {
|
||||
PDataStruct pDataStruct = pData[k];
|
||||
float[] pDataStruct = pData[k];
|
||||
if (pDataStruct == null) {
|
||||
pDataStruct = new PDataStruct();
|
||||
pDataStruct = new float[QvvrDataEntity.MAX_P_NODE];
|
||||
}
|
||||
float[] p = pDataStruct.getP();
|
||||
float[] p = pDataStruct;
|
||||
p[i] = userDataExcelBodies1.get(k).getWork().floatValue();
|
||||
pData[k] = pDataStruct;
|
||||
}
|
||||
}
|
||||
//至此功率数据也组装完毕,调用友谊提供的接口
|
||||
QvvrStruct qvvrStruct = null;
|
||||
try {
|
||||
qvvrStruct = new QvvrStruct();
|
||||
} catch (Exception exception) {
|
||||
exception.printStackTrace();
|
||||
}
|
||||
qvvrStruct.cal_flag = 0;
|
||||
qvvrStruct.p_node = pNode;
|
||||
qvvrStruct.p_num = pNum;
|
||||
qvvrStruct.win = win;
|
||||
qvvrStruct.harm_num = harmNum;
|
||||
qvvrStruct.harm_mk = harmMk;
|
||||
qvvrStruct.p_data = pData;
|
||||
qvvrStruct.harm_data = respHarmData.getHarmData();
|
||||
ResponsibilityCallDllOrSo responsibilityCallDllOrSo = new ResponsibilityCallDllOrSo("harm_response");
|
||||
responsibilityCallDllOrSo.setPath();
|
||||
ResponsibilityCallDllOrSo.ResponsibilityLibrary responsibilityLibrary = ResponsibilityCallDllOrSo.ResponsibilityLibrary.INSTANTCE;
|
||||
try {
|
||||
responsibilityLibrary.harm_response(qvvrStruct);
|
||||
} catch (Exception exception) {
|
||||
exception.printStackTrace();
|
||||
}
|
||||
QvvrDataEntity qvvrDataEntity = new QvvrDataEntity();
|
||||
qvvrDataEntity.calFlag = 0;
|
||||
qvvrDataEntity.pNode = pNode;
|
||||
qvvrDataEntity.pNum = pNum;
|
||||
qvvrDataEntity.win = win;
|
||||
qvvrDataEntity.harmNum = harmNum;
|
||||
qvvrDataEntity.harmMk = harmMk;
|
||||
qvvrDataEntity.pData = pData;
|
||||
qvvrDataEntity.harmData = respHarmData.getHarmData();
|
||||
// ResponsibilityCallDllOrSo responsibilityCallDllOrSo = new ResponsibilityCallDllOrSo("harm_response");
|
||||
// responsibilityCallDllOrSo.setPath();
|
||||
// ResponsibilityCallDllOrSo.ResponsibilityLibrary responsibilityLibrary = ResponsibilityCallDllOrSo.ResponsibilityLibrary.INSTANTCE;
|
||||
// try {
|
||||
// responsibilityLibrary.harm_response(qvvrStruct);
|
||||
// } catch (Exception exception) {
|
||||
// exception.printStackTrace();
|
||||
// }
|
||||
|
||||
ResponsibilityAlgorithm responsibilityAlgorithm = new ResponsibilityAlgorithm();
|
||||
qvvrDataEntity = responsibilityAlgorithm.getResponsibilityResult(qvvrDataEntity);
|
||||
//至此接口调用结束,开始组装动态责任数据和用户责任量化结果
|
||||
//首先判断cal_ok的标识位是否为1,为0表示程序没有计算出结果
|
||||
if (qvvrStruct.cal_ok == 0) {
|
||||
if (qvvrDataEntity.calOk == 0) {
|
||||
throw new BusinessException(AdvanceResponseEnum.RESPONSIBILITY_PARAMETER_ERROR);
|
||||
}
|
||||
//没问题后,先玩动态责任数据
|
||||
CustomerData[] customerDatas = new CustomerData[qvvrStruct.p_node];
|
||||
PDataStruct[] fKdata/*无背景的动态责任数据*/ = qvvrStruct.getFKdata();
|
||||
CustomerData[] customerDatas = new CustomerData[qvvrDataEntity.pNode];
|
||||
float[][] fKdata/*无背景的动态责任数据*/ = qvvrDataEntity.getFKData();
|
||||
//第一个时间节点是起始时间+win窗口得到的时间
|
||||
Date sTime = DateUtil.parse(dateStr.get(0).concat(" 00:00:00"), DatePattern.NORM_DATETIME_PATTERN);
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTime(sTime);
|
||||
calendar.add(Calendar.MINUTE, (win - 1) * userIntervalTime);
|
||||
List<Long> timeDatas = new ArrayList<>();
|
||||
for (int i = 0; i < qvvrStruct.p_num - qvvrStruct.win; i++) {
|
||||
for (int i = 0; i < qvvrDataEntity.pNum - qvvrDataEntity.win; i++) {
|
||||
calendar.add(Calendar.MINUTE, userIntervalTime);
|
||||
//一个时间点所有的用户数据
|
||||
PDataStruct fKdatum = fKdata[i];
|
||||
for (int k = 0; k < qvvrStruct.p_node; k++) {
|
||||
float[] fKdatum = fKdata[i];
|
||||
for (int k = 0; k < qvvrDataEntity.pNode; k++) {
|
||||
CustomerData customerData = customerDatas[k];
|
||||
if (null == customerData) {
|
||||
customerData = new CustomerData();
|
||||
customerData.setCustomerName(names.get(k));
|
||||
}
|
||||
List<Float> valueDatas = customerData.getValueDatas();
|
||||
Float valueTemp = fKdatum.getP()[k];
|
||||
Float valueTemp = fKdatum[k];
|
||||
if (valueTemp.isNaN()) {
|
||||
valueTemp = 0.0f;
|
||||
}
|
||||
@@ -273,7 +268,7 @@ public class RespDataServiceImpl extends ServiceImpl<RespDataMapper, RespData> i
|
||||
customerDataTemp.put(name, customerData);
|
||||
}
|
||||
//动态数据组装完成后,开始组装责任数据
|
||||
List<CustomerResponsibility> customerResponsibilities = getCustomerResponsibilityData(names, qvvrStruct.sumFKdata, qvvrStruct.p_node);
|
||||
List<CustomerResponsibility> customerResponsibilities = getCustomerResponsibilityData(names, qvvrDataEntity.sumFKdata, qvvrDataEntity.pNode);
|
||||
//根据前十的用户数据,获取这些用户的动态责任数据
|
||||
List<CustomerData> customerData = new ArrayList<>();
|
||||
for (CustomerResponsibility customerResponsibility : customerResponsibilities) {
|
||||
@@ -378,9 +373,10 @@ public class RespDataServiceImpl extends ServiceImpl<RespDataMapper, RespData> i
|
||||
String customerPath = fileStorageUtil.uploadStream(customerStream, OssPath.RESPONSIBILITY_USER_RESULT_DATA, FileUtil.generateFileName("json"));
|
||||
respDataResult.setUserDetailData(customerPath);
|
||||
//调用qvvr生成的中间数据
|
||||
CacheQvvrData cacheQvvrData = new CacheQvvrData(qvvrStruct.getP_node(), qvvrStruct.getHarm_num(), qvvrStruct.getHarm_data(), qvvrStruct.FKdata, qvvrStruct.HKdata, names, userIntervalTime, qvvrStruct.win, userIntervalTime, respHarmData.getHarmTime());
|
||||
JSONObject cacheQvvrDataDataJson = (JSONObject) JSONObject.toJSON(cacheQvvrData);
|
||||
InputStream cacheQvvrDataStream = IoUtil.toStream(cacheQvvrDataDataJson.toString(), CharsetUtil.UTF_8);
|
||||
CacheQvvrData cacheQvvrData = new CacheQvvrData(qvvrDataEntity.getPNode(), qvvrDataEntity.getHarmNum(), qvvrDataEntity.getHarmData(), qvvrDataEntity.fKData, qvvrDataEntity.hKData, names, userIntervalTime, qvvrDataEntity.win, userIntervalTime, respHarmData.getHarmTime());
|
||||
// JSONObject cacheQvvrDataDataJson = (JSONObject) JSONObject.toJSON(cacheQvvrData);
|
||||
String cacheJson = PubUtils.obj2json(cacheQvvrData);
|
||||
InputStream cacheQvvrDataStream = IoUtil.toStream(cacheJson, CharsetUtil.UTF_8);
|
||||
String cacheQvvrDataPath = fileStorageUtil.uploadStream(cacheQvvrDataStream, OssPath.RESPONSIBILITY_USER_RESULT_DATA, FileUtil.generateFileName("json"));
|
||||
respDataResult.setQvvrData(cacheQvvrDataPath);
|
||||
//用户前10数据存储
|
||||
@@ -422,7 +418,9 @@ public class RespDataServiceImpl extends ServiceImpl<RespDataMapper, RespData> i
|
||||
try {
|
||||
InputStream fileStream = fileStorageUtil.getFileStream(respDataResultTemp.getQvvrData());
|
||||
String qvvrDataStr = IoUtil.read(fileStream, CharsetUtil.UTF_8);
|
||||
cacheQvvrData = JSONObject.parseObject(qvvrDataStr, CacheQvvrData.class);
|
||||
// cacheQvvrData = JSONObject.parseObject(qvvrDataStr, CacheQvvrData.class);
|
||||
cacheQvvrData = PubUtils.json2obj(qvvrDataStr,CacheQvvrData.class);
|
||||
|
||||
} catch (Exception exception) {
|
||||
throw new BusinessException(AdvanceResponseEnum.RESP_RESULT_DATA_NOT_FOUND);
|
||||
}
|
||||
@@ -443,25 +441,25 @@ public class RespDataServiceImpl extends ServiceImpl<RespDataMapper, RespData> i
|
||||
//间隔中的时间长度
|
||||
int minus = timeEndIndex - timeStartIndex + 1;
|
||||
//组装参数
|
||||
QvvrStruct qvvrStruct = new QvvrStruct();
|
||||
qvvrStruct.cal_flag = 1;
|
||||
qvvrStruct.p_node = cacheQvvrData.getPNode();
|
||||
qvvrStruct.harm_mk = responsibilitySecondCalParam.getLimitValue();
|
||||
qvvrStruct.win = win;
|
||||
QvvrDataEntity qvvrDataEntity = new QvvrDataEntity();
|
||||
qvvrDataEntity.calFlag = 1;
|
||||
qvvrDataEntity.pNode = cacheQvvrData.getPNode();
|
||||
qvvrDataEntity.harmMk = responsibilitySecondCalParam.getLimitValue();
|
||||
qvvrDataEntity.win = win;
|
||||
int resNum;
|
||||
PDataStruct[] FKdata = new PDataStruct[9600];
|
||||
HKDataStruct[] HKdata = new HKDataStruct[9600];
|
||||
float[][] FKdata = new float[9600][QvvrDataEntity.MAX_P_NODE];
|
||||
float[][] HKdata = new float[9600][QvvrDataEntity.MAX_P_NODE + 1];
|
||||
float[] harmData = new float[1440 * 100];
|
||||
PDataStruct[] fKdataOriginal = cacheQvvrData.getFKdata();
|
||||
HKDataStruct[] hKdataOriginal = cacheQvvrData.getHKdata();
|
||||
float[][] fKdataOriginal = cacheQvvrData.getFKData();
|
||||
float[][] hKdataOriginal = cacheQvvrData.getHKData();
|
||||
float[] harmDataOriginal = cacheQvvrData.getHarmData();
|
||||
//如果起始索引与截止索引的差值等于时间轴的长度,则说明用户没有选择限值时间,直接带入全部的原始数据,参与计算即可
|
||||
if (minus == times.size()) {
|
||||
qvvrStruct.harm_num = cacheQvvrData.getHarmNum();
|
||||
qvvrStruct.res_num = cacheQvvrData.getHarmNum() - cacheQvvrData.getWin();
|
||||
qvvrStruct.setFKdata(cacheQvvrData.getFKdata());
|
||||
qvvrStruct.setHKdata(cacheQvvrData.getHKdata());
|
||||
qvvrStruct.harm_data = cacheQvvrData.getHarmData();
|
||||
qvvrDataEntity.harmNum = cacheQvvrData.getHarmNum();
|
||||
qvvrDataEntity.resNum = cacheQvvrData.getHarmNum() - cacheQvvrData.getWin();
|
||||
qvvrDataEntity.setFKData(cacheQvvrData.getFKData());
|
||||
qvvrDataEntity.setHKData(cacheQvvrData.getHKData());
|
||||
qvvrDataEntity.harmData = cacheQvvrData.getHarmData();
|
||||
} else {
|
||||
if (win == 4) {
|
||||
//当窗口为4时,两个时间限制范围在最小公倍数为15时,最起码有5个有效时间点,在最小公倍数为30时,最起码有3个有效时间点
|
||||
@@ -497,33 +495,39 @@ public class RespDataServiceImpl extends ServiceImpl<RespDataMapper, RespData> i
|
||||
} else {
|
||||
throw new BusinessException(AdvanceResponseEnum.CALCULATE_INTERVAL_ERROR);
|
||||
}
|
||||
qvvrStruct.res_num = resNum;
|
||||
qvvrStruct.harm_num = minus;
|
||||
qvvrDataEntity.resNum = resNum;
|
||||
qvvrDataEntity.harmNum = minus;
|
||||
//因为限值时间实际是含头含尾的,所以harmNum需要索引差值+1
|
||||
for (int i = timeStartIndex; i <= timeEndIndex; i++) {
|
||||
harmData[i - timeStartIndex] = harmDataOriginal[i];
|
||||
}
|
||||
qvvrStruct.harm_data = harmData;
|
||||
qvvrDataEntity.harmData = harmData;
|
||||
//FKData与HKData的值则等于resNum
|
||||
for (int i = timeStartIndex; i < timeStartIndex + resNum; i++) {
|
||||
FKdata[i - timeStartIndex] = fKdataOriginal[i];
|
||||
HKdata[i - timeStartIndex] = hKdataOriginal[i];
|
||||
}
|
||||
|
||||
qvvrStruct.setFKdata(FKdata);
|
||||
qvvrStruct.setHKdata(HKdata);
|
||||
qvvrDataEntity.setFKData(FKdata);
|
||||
qvvrDataEntity.setHKData(HKdata);
|
||||
}
|
||||
ResponsibilityCallDllOrSo responsibilityCallDllOrSo = new ResponsibilityCallDllOrSo("harm_response");
|
||||
responsibilityCallDllOrSo.setPath();
|
||||
ResponsibilityCallDllOrSo.ResponsibilityLibrary responsibilityLibrary = ResponsibilityCallDllOrSo.ResponsibilityLibrary.INSTANTCE;
|
||||
responsibilityLibrary.harm_response(qvvrStruct);
|
||||
if (qvvrStruct.cal_ok == 0) {
|
||||
// ResponsibilityCallDllOrSo responsibilityCallDllOrSo = new ResponsibilityCallDllOrSo("harm_response");
|
||||
// responsibilityCallDllOrSo.setPath();
|
||||
// ResponsibilityCallDllOrSo.ResponsibilityLibrary responsibilityLibrary = ResponsibilityCallDllOrSo.ResponsibilityLibrary.INSTANTCE;
|
||||
// responsibilityLibrary.harm_response(qvvrStruct);
|
||||
// if (qvvrStruct.cal_ok == 0) {
|
||||
// throw new BusinessException(AdvanceResponseEnum.RESPONSIBILITY_PARAMETER_ERROR);
|
||||
// }
|
||||
ResponsibilityAlgorithm responsibilityAlgorithm = new ResponsibilityAlgorithm();
|
||||
qvvrDataEntity = responsibilityAlgorithm.getResponsibilityResult(qvvrDataEntity);
|
||||
if (qvvrDataEntity.calOk == 0) {
|
||||
throw new BusinessException(AdvanceResponseEnum.RESPONSIBILITY_PARAMETER_ERROR);
|
||||
}
|
||||
|
||||
//没问题后,先玩动态责任数据
|
||||
List<String> names = cacheQvvrData.getNames();
|
||||
CustomerData[] customerDatas = new CustomerData[qvvrStruct.p_node];
|
||||
PDataStruct[] fKdata/*无背景的动态责任数据*/ = qvvrStruct.getFKdata();
|
||||
CustomerData[] customerDatas = new CustomerData[qvvrDataEntity.pNode];
|
||||
float[][] fKdata/*无背景的动态责任数据*/ = qvvrDataEntity.getFKData();
|
||||
//第一个时间节点是起始时间+win窗口得到的时间
|
||||
Date sTime = new Date();
|
||||
sTime.setTime(times.get(timeStartIndex));
|
||||
@@ -531,18 +535,18 @@ public class RespDataServiceImpl extends ServiceImpl<RespDataMapper, RespData> i
|
||||
calendar.setTime(sTime);
|
||||
calendar.add(Calendar.MINUTE, (win - 1) * minMultiple);
|
||||
List<Long> timeDatas = new ArrayList<>();
|
||||
for (int i = 0; i < qvvrStruct.harm_num - qvvrStruct.win; i++) {
|
||||
for (int i = 0; i < qvvrDataEntity.harmNum - qvvrDataEntity.win; i++) {
|
||||
calendar.add(Calendar.MINUTE, minMultiple);
|
||||
//一个时间点所有的用户数据
|
||||
PDataStruct fKdatum = fKdata[i];
|
||||
for (int k = 0; k < qvvrStruct.p_node; k++) {
|
||||
float[] fKdatum = fKdata[i];
|
||||
for (int k = 0; k < qvvrDataEntity.pNode; k++) {
|
||||
CustomerData customerData = customerDatas[k];
|
||||
if (null == customerData) {
|
||||
customerData = new CustomerData();
|
||||
customerData.setCustomerName(names.get(k));
|
||||
}
|
||||
List<Float> valueDatas = customerData.getValueDatas();
|
||||
Float valueTemp = fKdatum.getP()[k];
|
||||
Float valueTemp = fKdatum[k];
|
||||
if (valueTemp.isNaN()) {
|
||||
valueTemp = 0.0f;
|
||||
}
|
||||
@@ -568,8 +572,8 @@ public class RespDataServiceImpl extends ServiceImpl<RespDataMapper, RespData> i
|
||||
customerDataTemp.put(name, customerData);
|
||||
}
|
||||
//调用程序接口后,首先组装责任量化结果
|
||||
float[] sumFKdata = qvvrStruct.sumFKdata;
|
||||
List<CustomerResponsibility> customerResponsibilities = getCustomerResponsibilityData(names, sumFKdata, qvvrStruct.p_node);
|
||||
float[] sumFKdata = qvvrDataEntity.sumFKdata;
|
||||
List<CustomerResponsibility> customerResponsibilities = getCustomerResponsibilityData(names, sumFKdata, qvvrDataEntity.pNode);
|
||||
//根据前十的用户数据,获取这些用户的动态责任数据
|
||||
List<CustomerData> customerData = new ArrayList<>();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user