pcs 支路

This commit is contained in:
2025-06-29 15:19:01 +08:00
parent 324beeaa69
commit 1225559c36
6 changed files with 374 additions and 42 deletions

View File

@ -1,23 +1,22 @@
package com.xzzn.web.controller.ems;
import com.alibaba.druid.support.json.JSONParser;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.TypeReference;
import com.fasterxml.jackson.databind.json.JsonMapper;
import com.xzzn.common.utils.DateUtils;
import com.xzzn.common.utils.StringUtils;
import com.xzzn.ems.domain.EmsBatteryData;
import com.xzzn.ems.domain.EmsMqttMessage;
import com.xzzn.ems.domain.EmsPcsBranchData;
import com.xzzn.ems.domain.EmsPcsData;
import com.xzzn.ems.service.IEmsBatteryDataService;
import com.xzzn.ems.service.IEmsMqttMessageService;
import com.xzzn.ems.service.IEmsPcsBranchDataService;
import com.xzzn.ems.service.IEmsPcsDataService;
import com.xzzn.framework.manager.MqttLifecycleManager;
import com.xzzn.framework.web.service.MqttPublisher;
import com.xzzn.framework.web.service.MqttSubscriber;
import org.apache.coyote.http11.Http11NioProtocol;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.eclipse.paho.client.mqttv3.IMqttMessageListener;
@ -48,6 +47,9 @@ public class MqttMessageController implements MqttPublisher, MqttSubscriber {
@Autowired
private IEmsPcsDataService emsPcsDataService;
@Autowired
private IEmsPcsBranchDataService emsPcsBranchDataService;
@Autowired
public MqttMessageController(MqttLifecycleManager mqttLifecycleManager) {
this.mqttLifecycleManager = mqttLifecycleManager;
@ -91,6 +93,7 @@ public class MqttMessageController implements MqttPublisher, MqttSubscriber {
// 业务处理逻辑
handleFxData(payload);
EmsMqttMessage mqttMessage = new EmsMqttMessage();
mqttMessage.setMqttTopic(topic);
mqttMessage.setMqttMessage(payload);
@ -146,7 +149,14 @@ public class MqttMessageController implements MqttPublisher, MqttSubscriber {
if (deviceId.contains("BMS")) {
log.info("====================");
log.info("BMS data:"+ jsonData);
//BMS 电池簇
//单体电池
Map<String, Map<String, Object>> records = processData(JSON.parseObject(jsonData, new TypeReference<Map<String, Object>>() {}));
List<EmsBatteryData> list = new ArrayList<>();
//单体电池
@ -182,49 +192,49 @@ public class MqttMessageController implements MqttPublisher, MqttSubscriber {
log.info("PCS data:"+ jsonData);
//pcs
EmsPcsData data = new EmsPcsData();
EmsPcsData pcsData = new EmsPcsData();
// 时间与状态类字段
data.setDataUpdateTime(new Date());
data.setWorkStatus("A");
data.setGridStatus("B");
data.setDeviceStatus("C");
data.setControlMode("D");
pcsData.setDataUpdateTime(new Date());
pcsData.setWorkStatus("A");
pcsData.setGridStatus("B");
pcsData.setDeviceStatus("C");
pcsData.setControlMode("D");
// 功率与能量类字段
data.setTotalActivePower(BigDecimal.ZERO);
data.setDailyAcChargeEnergy(BigDecimal.ZERO);
data.setTotalReactivePower(BigDecimal.ZERO);
data.setDailyAcDischargeEnergy(BigDecimal.ZERO);
data.setTotalApparentPower(BigDecimal.ZERO);
data.setTotalPowerFactor(BigDecimal.ZERO);
data.setDcPower(BigDecimal.ZERO);
data.setTotalAcChargeEnergy(BigDecimal.ZERO);
data.setTotalAcDischargeEnergy(BigDecimal.ZERO);
data.setAcChargeActivePower(BigDecimal.ZERO);
data.setAcCapacitiveReactivePower(BigDecimal.ZERO);
data.setAcDischargeActivePower(BigDecimal.ZERO);
data.setAcInductiveReactivePower(BigDecimal.ZERO);
data.setMaxCapacitivePowerCapacity(BigDecimal.ZERO);
data.setMaxInductivePowerCapacity(BigDecimal.ZERO);
data.setMaxChargePowerCapacity(BigDecimal.ZERO);
data.setMaxDischargePowerCapacity(BigDecimal.ZERO);
pcsData.setTotalActivePower(BigDecimal.ZERO);
pcsData.setDailyAcChargeEnergy(BigDecimal.ZERO);
pcsData.setTotalReactivePower(BigDecimal.ZERO);
pcsData.setDailyAcDischargeEnergy(BigDecimal.ZERO);
pcsData.setTotalApparentPower(BigDecimal.ZERO);
pcsData.setTotalPowerFactor(BigDecimal.ZERO);
pcsData.setDcPower(BigDecimal.ZERO);
pcsData.setTotalAcChargeEnergy(BigDecimal.ZERO);
pcsData.setTotalAcDischargeEnergy(BigDecimal.ZERO);
pcsData.setAcChargeActivePower(BigDecimal.ZERO);
pcsData.setAcCapacitiveReactivePower(BigDecimal.ZERO);
pcsData.setAcDischargeActivePower(BigDecimal.ZERO);
pcsData.setAcInductiveReactivePower(BigDecimal.ZERO);
pcsData.setMaxCapacitivePowerCapacity(BigDecimal.ZERO);
pcsData.setMaxInductivePowerCapacity(BigDecimal.ZERO);
pcsData.setMaxChargePowerCapacity(BigDecimal.ZERO);
pcsData.setMaxDischargePowerCapacity(BigDecimal.ZERO);
// 温度与环境参数
data.setPcsModuleTemperature(BigDecimal.ZERO);
data.setPcsEnvironmentTemperature(BigDecimal.ZERO);
data.setAcFrequency(BigDecimal.ZERO);
pcsData.setPcsModuleTemperature(BigDecimal.ZERO);
pcsData.setPcsEnvironmentTemperature(BigDecimal.ZERO);
pcsData.setAcFrequency(BigDecimal.ZERO);
// 状态指示类
data.setBranchStatus("A");
data.setDischargeStatus("A");
data.setAcSwitchStatus("A");
data.setDcSwitchStatus("A");
data.setRemoteControlStatus("A");
pcsData.setBranchStatus("A");
pcsData.setDischargeStatus("A");
pcsData.setAcSwitchStatus("A");
pcsData.setDcSwitchStatus("A");
pcsData.setRemoteControlStatus("A");
// 直流参数
data.setDcVoltage(BigDecimal.ZERO);
data.setDcCurrent(BigDecimal.ZERO);
pcsData.setDcVoltage(BigDecimal.ZERO);
pcsData.setDcCurrent(BigDecimal.ZERO);
// 系统管理字段
// data.setCreateBy(BigDecimal.ZERO);
@ -232,17 +242,57 @@ public class MqttMessageController implements MqttPublisher, MqttSubscriber {
// data.setUpdateBy(BigDecimal.ZERO);
// data.setUpdateTime(BigDecimal.ZERO);
// data.setRemark(BigDecimal.ZERO);
data.setSiteId(("021"));
data.setDeviceId(deviceId);
data.setDateMonth(Long.parseLong("6"));
data.setDateDay(Long.parseLong("28"));
pcsData.setSiteId("021_FXX_01");
pcsData.setDeviceId(deviceId);
pcsData.setDateMonth(DateUtils.getNowMonthLong());
pcsData.setDateDay(DateUtils.getNowDayLong());
data.setDeviceId(deviceId);
pcsData.setDeviceId(deviceId);
emsPcsDataService.insertEmsPcsData(data);
emsPcsDataService.insertEmsPcsData(pcsData);
Map<String, Map<String, Object>> records = processDataPrefix(JSON.parseObject(jsonData, new TypeReference<Map<String, Object>>() {}));
List<EmsPcsBranchData> list = new ArrayList<>();
//单体电池
for (Map.Entry<String, Map<String, Object>> record : records.entrySet()) {
String recordId = record.getKey();
Map<String, Object> fields = record.getValue();
EmsPcsBranchData data = new EmsPcsBranchData();
data.setDeviceId(recordId);
data.setDcPower(BigDecimal.ZERO);
data.setDcVoltage(BigDecimal.ZERO);
data.setDcCurrent(BigDecimal.ZERO);
data.setGridUVoltage(BigDecimal.ZERO);
data.setGridVVoltage(BigDecimal.ZERO);
data.setGridWVoltage(BigDecimal.ZERO);
data.setOutputUCurrent(BigDecimal.ZERO);
data.setOutputVCurrent(BigDecimal.ZERO);
data.setOutputWCurrent(BigDecimal.ZERO);
data.setApparentPower(BigDecimal.ZERO);
data.setActivePower(BigDecimal.ZERO);
data.setReactivePower(BigDecimal.ZERO);
data.setPowerFactor(BigDecimal.ZERO);
data.setFrequency(BigDecimal.ZERO);
data.setInternalTemp(BigDecimal.ZERO);
data.setuIgbtTemp(BigDecimal.ZERO);
data.setvIgbtTemp(BigDecimal.ZERO);
data.setwIgbtTemp(BigDecimal.ZERO);
data.setAvailablePower(BigDecimal.ZERO);
data.setTotalLoadRatio(BigDecimal.ZERO);
data.setAcLeakageCurrent(BigDecimal.ZERO);
data.setInsulationResistance(BigDecimal.ZERO);
list.add(data);
}
if (list.size() > 0 ) {
emsPcsBranchDataService.insertEmsPcsBranchDataList(list);
}
}
@ -275,4 +325,31 @@ public class MqttMessageController implements MqttPublisher, MqttSubscriber {
}
return records;
}
private static Map<String, Map<String, Object>> processDataPrefix(Map<String, Object> rawData) {
Map<String, Map<String, Object>> records = new HashMap<>();
for (Map.Entry<String, Object> entry : rawData.entrySet()) {
String key = entry.getKey();
// 确保键长度足够
if (key.length() < 3) {
continue;
}
// 提取记录ID前3位
String recordId = key.substring(0, 3);
if (!recordId.startsWith("DY")) {
continue;
}
// 提取字段类型(剩余部分)
String fieldType = key.substring(3);
// 初始化记录
records.putIfAbsent(recordId, new HashMap<>());
// 存入字段值
records.get(recordId).put(fieldType, entry.getValue());
}
return records;
}
}