|
|
|
|
@ -9,6 +9,7 @@ import com.mh.common.core.domain.entity.CollectionParamsManage;
|
|
|
|
|
import com.mh.common.model.request.AdvantechDatas; |
|
|
|
|
import com.mh.common.model.request.AdvantechReceiver; |
|
|
|
|
import com.mh.common.utils.DateUtils; |
|
|
|
|
import com.mh.common.utils.StringUtils; |
|
|
|
|
import com.mh.common.utils.http.HttpUtils; |
|
|
|
|
import com.mh.framework.rabbitmq.producer.SendMsgByTopic; |
|
|
|
|
import com.mh.system.service.device.ICollectionParamsManageService; |
|
|
|
|
@ -88,6 +89,16 @@ public class GetOtherSysDataJob {
|
|
|
|
|
public void getBSDData(String realUrl, String realValuesUrl) { |
|
|
|
|
log.info("获取BSD数据"); |
|
|
|
|
try { |
|
|
|
|
if (StringUtils.isEmpty(realUrl)) { |
|
|
|
|
realUrl = "http://192.168.1.80:5002/data/get_real"; |
|
|
|
|
} else { |
|
|
|
|
realUrl = "http://" + realUrl; |
|
|
|
|
} |
|
|
|
|
if (StringUtils.isEmpty(realValuesUrl)) { |
|
|
|
|
realValuesUrl = "http://192.168.1.80:5002/data/get_real_values"; |
|
|
|
|
} else { |
|
|
|
|
realValuesUrl = "http://" + realValuesUrl; |
|
|
|
|
} |
|
|
|
|
// 获取实时读数\累计读数的所有点位
|
|
|
|
|
HashMap<String, Object> params = new HashMap<>(); |
|
|
|
|
params.put("systemType", "0"); |
|
|
|
|
@ -122,20 +133,21 @@ public class GetOtherSysDataJob {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
List<AdvantechDatas> allAdvantechDatas = new ArrayList<>(); |
|
|
|
|
List<AdvantechDatas<BigDecimal>> allAdvantechDatas = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
CompletableFuture<List<AdvantechDatas<BigDecimal>>> cumulativeFuture = null; |
|
|
|
|
CompletableFuture<List<AdvantechDatas<BigDecimal>>> powerFuture = null; |
|
|
|
|
|
|
|
|
|
// 使用CompletableFuture并发请求累计读数和功率读数
|
|
|
|
|
CompletableFuture<List<AdvantechDatas>> cumulativeFuture = null; |
|
|
|
|
CompletableFuture<List<AdvantechDatas>> powerFuture = null; |
|
|
|
|
|
|
|
|
|
// 并发请求累计读数 (grade=40)
|
|
|
|
|
if (!cumulativeMtCodes.isEmpty()) { |
|
|
|
|
final List<String> finalCumulativeMtCodes = new ArrayList<>(cumulativeMtCodes); |
|
|
|
|
final HashMap<String, String> finalMtCodeToOtherNameMap = new HashMap<>(mtCodeToOtherNameMap); |
|
|
|
|
String finalRealUrl = realUrl; |
|
|
|
|
cumulativeFuture = CompletableFuture.supplyAsync(() -> { |
|
|
|
|
log.info("[线程-{}] 请求累计读数,点位数量: {}", Thread.currentThread().getName(), finalCumulativeMtCodes.size()); |
|
|
|
|
// http://192.168.1.80:5002/data/get_real
|
|
|
|
|
return fetchCumulativeData(finalCumulativeMtCodes, finalMtCodeToOtherNameMap, realUrl); |
|
|
|
|
return fetchCumulativeData(finalCumulativeMtCodes, finalMtCodeToOtherNameMap, finalRealUrl); |
|
|
|
|
}, executor); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -143,50 +155,49 @@ public class GetOtherSysDataJob {
|
|
|
|
|
if (!powerMtCodes.isEmpty()) { |
|
|
|
|
final List<String> finalPowerMtCodes = new ArrayList<>(powerMtCodes); |
|
|
|
|
final HashMap<String, String> finalMtCodeToOtherNameMap = new HashMap<>(mtCodeToOtherNameMap); |
|
|
|
|
String finalRealValuesUrl = realValuesUrl; |
|
|
|
|
powerFuture = CompletableFuture.supplyAsync(() -> { |
|
|
|
|
log.info("[线程-{}] 请求功率读数,点位数量: {}", Thread.currentThread().getName(), finalPowerMtCodes.size()); |
|
|
|
|
// http://192.168.1.80:5002/data/get_real_values
|
|
|
|
|
return fetchPowerData(finalPowerMtCodes, finalMtCodeToOtherNameMap, realValuesUrl); |
|
|
|
|
return fetchPowerData(finalPowerMtCodes, finalMtCodeToOtherNameMap, finalRealValuesUrl); |
|
|
|
|
}, executor); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 等待两个任务完成并合并结果
|
|
|
|
|
try { |
|
|
|
|
List<AdvantechDatas<BigDecimal>> cumulativeDatas = null; |
|
|
|
|
List<AdvantechDatas<BigDecimal>> powerDatas = null; |
|
|
|
|
|
|
|
|
|
if (cumulativeFuture != null) { |
|
|
|
|
List<AdvantechDatas> cumulativeDatas = cumulativeFuture.get(30, TimeUnit.SECONDS); |
|
|
|
|
// 累计读数
|
|
|
|
|
// cumulativeDatas.遍历计算得出机房总累计读数、主机总累计读数、冷冻泵总累计读数、冷却泵总累计读数、冷却塔总累计读数
|
|
|
|
|
// 新建一个主机总电表的AdvantechDatas对象,tag为mtCodeToOtherNameMap,key值为"PowerTotal_CH"的value值,quality为0,value为cumulativeDatas中tag包含"主机*累计读数"的value和值
|
|
|
|
|
// 新建一个冷冻泵总电表的AdvantechDatas对象,tag为mtCodeToOtherNameMap,key值为"PowerTotal_ChWPump"的value值,quality为0,value为cumulativeDatas中tag包含"冷冻泵*累计读数"的value和值
|
|
|
|
|
// 新建一个冷却泵总电表的AdvantechDatas对象,tag为mtCodeToOtherNameMap,key值为"PowerTotal_CWPump"的value值,quality为0,value为cumulativeDatas中tag包含"冷却泵*累计读数"的value和值
|
|
|
|
|
// 新建一个冷却塔总电表的AdvantechDatas对象,tag为mtCodeToOtherNameMap,key值为"PowerTotal_CT"的value值,quality为0,value为cumulativeDatas中tag包含"冷却塔*累计读数"的value和值
|
|
|
|
|
// 新建一个机房总电表的AdvantechDatas对象,tag为mtCodeToOtherNameMap,key值为"PowerTotal"的value值,quality为0,value为cumulativeDatas中tag包含"累计读数"的value和值
|
|
|
|
|
// 瞬时功率
|
|
|
|
|
// cumulativeDatas.遍历计算得出机房总瞬时功率、主机总瞬时功率、冷冻泵总瞬时功率、冷却泵总瞬时功率、冷却塔总瞬时功率
|
|
|
|
|
// 新建一个主机总电表的AdvantechDatas对象,tag为mtCodeToOtherNameMap,key值为"ChPower"的value值,quality为0,value为cumulativeDatas中tag包含"主机*瞬时功率"的value和值
|
|
|
|
|
// 新建一个冷冻泵总电表的AdvantechDatas对象,tag为mtCodeToOtherNameMap,key值为"PriChWPPower"的value值,quality为0,value为cumulativeDatas中tag包含"冷冻泵*瞬时功率"的value和值
|
|
|
|
|
// 新建一个冷却泵总电表的AdvantechDatas对象,tag为mtCodeToOtherNameMap,key值为"CWPPower"的value值,quality为0,value为cumulativeDatas中tag包含"冷却泵*瞬时功率"的value和值
|
|
|
|
|
// 新建一个冷却塔总电表的AdvantechDatas对象,tag为mtCodeToOtherNameMap,key值为"CTPower"的value值,quality为0,value为cumulativeDatas中tag包含"冷却塔*瞬时功率"的value和值
|
|
|
|
|
// 新建一个机房总电表的AdvantechDatas对象,tag为mtCodeToOtherNameMap,key值为"Power"的value值,quality为0,value为cumulativeDatas中tag包含"瞬时功率"的value和值
|
|
|
|
|
// 再插入到cumulativeDatas中
|
|
|
|
|
cumulativeDatas = cumulativeFuture.get(30, TimeUnit.SECONDS); |
|
|
|
|
log.info("累计读数获取完成,数据点数: {}", cumulativeDatas.size()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (powerFuture != null) { |
|
|
|
|
powerDatas = powerFuture.get(30, TimeUnit.SECONDS); |
|
|
|
|
log.info("功率读数获取完成,数据点数: {}", powerDatas.size()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 合并累计读数和功率读数后进行汇总计算
|
|
|
|
|
if (cumulativeDatas != null && !cumulativeDatas.isEmpty()) { |
|
|
|
|
// 将功率读数添加到累计读数列表中,以便一起进行汇总计算
|
|
|
|
|
if (powerDatas != null && !powerDatas.isEmpty()) { |
|
|
|
|
cumulativeDatas.addAll(powerDatas); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 计算汇总数据并添加到cumulativeDatas(包括累计读数和瞬时功率的汇总)
|
|
|
|
|
try { |
|
|
|
|
// 计算汇总数据并添加到cumulativeDatas
|
|
|
|
|
calculateAndAddSummaryData(cumulativeDatas, mtCodeToOtherNameMap); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
log.error("累计读数汇总计算异常,但不影响后续流程", e); |
|
|
|
|
log.error("数据汇总计算异常,但不影响后续流程", e); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
allAdvantechDatas.addAll(cumulativeDatas); |
|
|
|
|
log.info("累计读数获取完成,数据点数: {}", cumulativeDatas.size()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (powerFuture != null) { |
|
|
|
|
List<AdvantechDatas> powerDatas = powerFuture.get(30, TimeUnit.SECONDS); |
|
|
|
|
} else if (powerDatas != null && !powerDatas.isEmpty()) { |
|
|
|
|
// 如果只有功率读数,直接添加
|
|
|
|
|
allAdvantechDatas.addAll(powerDatas); |
|
|
|
|
// 实时功率
|
|
|
|
|
log.info("功率读数获取完成,数据点数: {}", powerDatas.size()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
log.error("等待异步任务完成时异常", e); |
|
|
|
|
} |
|
|
|
|
@ -215,7 +226,8 @@ public class GetOtherSysDataJob {
|
|
|
|
|
* @param cumulativeDatas 累计读数数据列表 |
|
|
|
|
* @param mtCodeToOtherNameMap mtCode到otherName的映射关系 |
|
|
|
|
*/ |
|
|
|
|
private void calculateAndAddSummaryData(List<AdvantechDatas> cumulativeDatas, HashMap<String, String> mtCodeToOtherNameMap) { |
|
|
|
|
private void calculateAndAddSummaryData(List<AdvantechDatas<BigDecimal>> cumulativeDatas, HashMap<String, String> mtCodeToOtherNameMap) { |
|
|
|
|
|
|
|
|
|
// 定义汇总类型枚举
|
|
|
|
|
enum SummaryType { |
|
|
|
|
CH_CUMULATIVE("主机", "累计读数", "PowerTotal_CH", "主机总累计读数"), |
|
|
|
|
@ -286,7 +298,7 @@ public class GetOtherSysDataJob {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
log.info("累计读数汇总完成,成功添加{}/{}个汇总数据点", successCount, SummaryType.values().length); |
|
|
|
|
log.info("数据汇总完成,成功添加{}/{}个汇总数据点", successCount, SummaryType.values().length); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
@ -296,8 +308,8 @@ public class GetOtherSysDataJob {
|
|
|
|
|
* @param realUrl 请求URL |
|
|
|
|
* @return 解析后的数据列表 |
|
|
|
|
*/ |
|
|
|
|
private List<AdvantechDatas> fetchCumulativeData(List<String> mtCodes, HashMap<String, String> mtCodeToOtherNameMap, String realUrl) { |
|
|
|
|
List<AdvantechDatas> dataList = new ArrayList<>(); |
|
|
|
|
private List<AdvantechDatas<BigDecimal>> fetchCumulativeData(List<String> mtCodes, HashMap<String, String> mtCodeToOtherNameMap, String realUrl) { |
|
|
|
|
List<AdvantechDatas<BigDecimal>> dataList = new ArrayList<>(); |
|
|
|
|
try { |
|
|
|
|
JSONObject cumulativeRequest = new JSONObject(); |
|
|
|
|
cumulativeRequest.put("names", mtCodes); |
|
|
|
|
@ -321,12 +333,11 @@ public class GetOtherSysDataJob {
|
|
|
|
|
String valueStr = valueArray.getString(0); |
|
|
|
|
try { |
|
|
|
|
BigDecimal value = new BigDecimal(valueStr); |
|
|
|
|
AdvantechDatas datas = new AdvantechDatas(); |
|
|
|
|
// 使用otherName作为tag,如果不存在则使用mtCode
|
|
|
|
|
AdvantechDatas<BigDecimal> datas = new AdvantechDatas<>(); |
|
|
|
|
String tag = mtCodeToOtherNameMap.getOrDefault(mtCode, mtCode); |
|
|
|
|
datas.setTag(tag); |
|
|
|
|
datas.setValue(value); |
|
|
|
|
datas.setQuality(0); |
|
|
|
|
datas.setQuality(BigDecimal.valueOf(0)); |
|
|
|
|
dataList.add(datas); |
|
|
|
|
} catch (NumberFormatException e) { |
|
|
|
|
log.error("解析累计读数失败,mtCode: {}, value: {}", mtCode, valueStr, e); |
|
|
|
|
@ -342,6 +353,7 @@ public class GetOtherSysDataJob {
|
|
|
|
|
return dataList; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 获取功率读数数据 |
|
|
|
|
* |
|
|
|
|
@ -350,8 +362,8 @@ public class GetOtherSysDataJob {
|
|
|
|
|
* @param realValuesUrl 请求URL |
|
|
|
|
* @return 解析后的数据列表 |
|
|
|
|
*/ |
|
|
|
|
private List<AdvantechDatas> fetchPowerData(List<String> mtCodes, HashMap<String, String> mtCodeToOtherNameMap, String realValuesUrl) { |
|
|
|
|
List<AdvantechDatas> dataList = new ArrayList<>(); |
|
|
|
|
private List<AdvantechDatas<BigDecimal>> fetchPowerData(List<String> mtCodes, HashMap<String, String> mtCodeToOtherNameMap, String realValuesUrl) { |
|
|
|
|
List<AdvantechDatas<BigDecimal>> dataList = new ArrayList<>(); |
|
|
|
|
try { |
|
|
|
|
JSONObject powerRequest = new JSONObject(); |
|
|
|
|
powerRequest.put("expresss", mtCodes); |
|
|
|
|
@ -370,12 +382,11 @@ public class GetOtherSysDataJob {
|
|
|
|
|
String valueStr = dataObj.getString(mtCode); |
|
|
|
|
try { |
|
|
|
|
BigDecimal value = new BigDecimal(valueStr); |
|
|
|
|
AdvantechDatas datas = new AdvantechDatas(); |
|
|
|
|
// 使用otherName作为tag,如果不存在则使用mtCode
|
|
|
|
|
AdvantechDatas<BigDecimal> datas = new AdvantechDatas<>(); |
|
|
|
|
String tag = mtCodeToOtherNameMap.getOrDefault(mtCode, mtCode); |
|
|
|
|
datas.setTag(tag); |
|
|
|
|
datas.setValue(value); |
|
|
|
|
datas.setQuality(0); |
|
|
|
|
datas.setQuality(BigDecimal.valueOf(0)); |
|
|
|
|
dataList.add(datas); |
|
|
|
|
} catch (NumberFormatException e) { |
|
|
|
|
log.error("解析功率读数失败,mtCode: {}, value: {}", mtCode, valueStr, e); |
|
|
|
|
@ -389,4 +400,5 @@ public class GetOtherSysDataJob {
|
|
|
|
|
} |
|
|
|
|
return dataList; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|