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; package com.xzzn.web.controller.ems;
import com.alibaba.druid.support.json.JSONParser;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.TypeReference; import com.alibaba.fastjson2.TypeReference;
import com.fasterxml.jackson.databind.json.JsonMapper;
import com.xzzn.common.utils.DateUtils; import com.xzzn.common.utils.DateUtils;
import com.xzzn.common.utils.StringUtils; import com.xzzn.common.utils.StringUtils;
import com.xzzn.ems.domain.EmsBatteryData; import com.xzzn.ems.domain.EmsBatteryData;
import com.xzzn.ems.domain.EmsMqttMessage; import com.xzzn.ems.domain.EmsMqttMessage;
import com.xzzn.ems.domain.EmsPcsBranchData;
import com.xzzn.ems.domain.EmsPcsData; import com.xzzn.ems.domain.EmsPcsData;
import com.xzzn.ems.service.IEmsBatteryDataService; import com.xzzn.ems.service.IEmsBatteryDataService;
import com.xzzn.ems.service.IEmsMqttMessageService; import com.xzzn.ems.service.IEmsMqttMessageService;
import com.xzzn.ems.service.IEmsPcsBranchDataService;
import com.xzzn.ems.service.IEmsPcsDataService; import com.xzzn.ems.service.IEmsPcsDataService;
import com.xzzn.framework.manager.MqttLifecycleManager; import com.xzzn.framework.manager.MqttLifecycleManager;
import com.xzzn.framework.web.service.MqttPublisher; import com.xzzn.framework.web.service.MqttPublisher;
import com.xzzn.framework.web.service.MqttSubscriber; import com.xzzn.framework.web.service.MqttSubscriber;
import org.apache.coyote.http11.Http11NioProtocol;
import org.apache.juli.logging.Log; import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory; import org.apache.juli.logging.LogFactory;
import org.eclipse.paho.client.mqttv3.IMqttMessageListener; import org.eclipse.paho.client.mqttv3.IMqttMessageListener;
@ -48,6 +47,9 @@ public class MqttMessageController implements MqttPublisher, MqttSubscriber {
@Autowired @Autowired
private IEmsPcsDataService emsPcsDataService; private IEmsPcsDataService emsPcsDataService;
@Autowired
private IEmsPcsBranchDataService emsPcsBranchDataService;
@Autowired @Autowired
public MqttMessageController(MqttLifecycleManager mqttLifecycleManager) { public MqttMessageController(MqttLifecycleManager mqttLifecycleManager) {
this.mqttLifecycleManager = mqttLifecycleManager; this.mqttLifecycleManager = mqttLifecycleManager;
@ -91,6 +93,7 @@ public class MqttMessageController implements MqttPublisher, MqttSubscriber {
// 业务处理逻辑 // 业务处理逻辑
handleFxData(payload); handleFxData(payload);
EmsMqttMessage mqttMessage = new EmsMqttMessage(); EmsMqttMessage mqttMessage = new EmsMqttMessage();
mqttMessage.setMqttTopic(topic); mqttMessage.setMqttTopic(topic);
mqttMessage.setMqttMessage(payload); mqttMessage.setMqttMessage(payload);
@ -146,7 +149,14 @@ public class MqttMessageController implements MqttPublisher, MqttSubscriber {
if (deviceId.contains("BMS")) { if (deviceId.contains("BMS")) {
log.info("===================="); log.info("====================");
log.info("BMS data:"+ jsonData); log.info("BMS data:"+ jsonData);
//BMS 电池簇
//单体电池
Map<String, Map<String, Object>> records = processData(JSON.parseObject(jsonData, new TypeReference<Map<String, Object>>() {})); Map<String, Map<String, Object>> records = processData(JSON.parseObject(jsonData, new TypeReference<Map<String, Object>>() {}));
List<EmsBatteryData> list = new ArrayList<>(); List<EmsBatteryData> list = new ArrayList<>();
//单体电池 //单体电池
@ -182,49 +192,49 @@ public class MqttMessageController implements MqttPublisher, MqttSubscriber {
log.info("PCS data:"+ jsonData); log.info("PCS data:"+ jsonData);
//pcs //pcs
EmsPcsData data = new EmsPcsData(); EmsPcsData pcsData = new EmsPcsData();
// 时间与状态类字段 // 时间与状态类字段
data.setDataUpdateTime(new Date()); pcsData.setDataUpdateTime(new Date());
data.setWorkStatus("A"); pcsData.setWorkStatus("A");
data.setGridStatus("B"); pcsData.setGridStatus("B");
data.setDeviceStatus("C"); pcsData.setDeviceStatus("C");
data.setControlMode("D"); pcsData.setControlMode("D");
// 功率与能量类字段 // 功率与能量类字段
data.setTotalActivePower(BigDecimal.ZERO); pcsData.setTotalActivePower(BigDecimal.ZERO);
data.setDailyAcChargeEnergy(BigDecimal.ZERO); pcsData.setDailyAcChargeEnergy(BigDecimal.ZERO);
data.setTotalReactivePower(BigDecimal.ZERO); pcsData.setTotalReactivePower(BigDecimal.ZERO);
data.setDailyAcDischargeEnergy(BigDecimal.ZERO); pcsData.setDailyAcDischargeEnergy(BigDecimal.ZERO);
data.setTotalApparentPower(BigDecimal.ZERO); pcsData.setTotalApparentPower(BigDecimal.ZERO);
data.setTotalPowerFactor(BigDecimal.ZERO); pcsData.setTotalPowerFactor(BigDecimal.ZERO);
data.setDcPower(BigDecimal.ZERO); pcsData.setDcPower(BigDecimal.ZERO);
data.setTotalAcChargeEnergy(BigDecimal.ZERO); pcsData.setTotalAcChargeEnergy(BigDecimal.ZERO);
data.setTotalAcDischargeEnergy(BigDecimal.ZERO); pcsData.setTotalAcDischargeEnergy(BigDecimal.ZERO);
data.setAcChargeActivePower(BigDecimal.ZERO); pcsData.setAcChargeActivePower(BigDecimal.ZERO);
data.setAcCapacitiveReactivePower(BigDecimal.ZERO); pcsData.setAcCapacitiveReactivePower(BigDecimal.ZERO);
data.setAcDischargeActivePower(BigDecimal.ZERO); pcsData.setAcDischargeActivePower(BigDecimal.ZERO);
data.setAcInductiveReactivePower(BigDecimal.ZERO); pcsData.setAcInductiveReactivePower(BigDecimal.ZERO);
data.setMaxCapacitivePowerCapacity(BigDecimal.ZERO); pcsData.setMaxCapacitivePowerCapacity(BigDecimal.ZERO);
data.setMaxInductivePowerCapacity(BigDecimal.ZERO); pcsData.setMaxInductivePowerCapacity(BigDecimal.ZERO);
data.setMaxChargePowerCapacity(BigDecimal.ZERO); pcsData.setMaxChargePowerCapacity(BigDecimal.ZERO);
data.setMaxDischargePowerCapacity(BigDecimal.ZERO); pcsData.setMaxDischargePowerCapacity(BigDecimal.ZERO);
// 温度与环境参数 // 温度与环境参数
data.setPcsModuleTemperature(BigDecimal.ZERO); pcsData.setPcsModuleTemperature(BigDecimal.ZERO);
data.setPcsEnvironmentTemperature(BigDecimal.ZERO); pcsData.setPcsEnvironmentTemperature(BigDecimal.ZERO);
data.setAcFrequency(BigDecimal.ZERO); pcsData.setAcFrequency(BigDecimal.ZERO);
// 状态指示类 // 状态指示类
data.setBranchStatus("A"); pcsData.setBranchStatus("A");
data.setDischargeStatus("A"); pcsData.setDischargeStatus("A");
data.setAcSwitchStatus("A"); pcsData.setAcSwitchStatus("A");
data.setDcSwitchStatus("A"); pcsData.setDcSwitchStatus("A");
data.setRemoteControlStatus("A"); pcsData.setRemoteControlStatus("A");
// 直流参数 // 直流参数
data.setDcVoltage(BigDecimal.ZERO); pcsData.setDcVoltage(BigDecimal.ZERO);
data.setDcCurrent(BigDecimal.ZERO); pcsData.setDcCurrent(BigDecimal.ZERO);
// 系统管理字段 // 系统管理字段
// data.setCreateBy(BigDecimal.ZERO); // data.setCreateBy(BigDecimal.ZERO);
@ -232,17 +242,57 @@ public class MqttMessageController implements MqttPublisher, MqttSubscriber {
// data.setUpdateBy(BigDecimal.ZERO); // data.setUpdateBy(BigDecimal.ZERO);
// data.setUpdateTime(BigDecimal.ZERO); // data.setUpdateTime(BigDecimal.ZERO);
// data.setRemark(BigDecimal.ZERO); // data.setRemark(BigDecimal.ZERO);
data.setSiteId(("021")); pcsData.setSiteId("021_FXX_01");
data.setDeviceId(deviceId); pcsData.setDeviceId(deviceId);
data.setDateMonth(Long.parseLong("6")); pcsData.setDateMonth(DateUtils.getNowMonthLong());
data.setDateDay(Long.parseLong("28")); 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; 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;
}
} }

View File

@ -8,6 +8,7 @@ import java.time.LocalDateTime;
import java.time.LocalTime; import java.time.LocalTime;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.util.Calendar;
import java.util.Date; import java.util.Date;
import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.lang3.time.DateFormatUtils;
@ -188,4 +189,15 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault()); ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault());
return Date.from(zdt.toInstant()); return Date.from(zdt.toInstant());
} }
public static Long getNowMonthLong() {
Calendar calendar = Calendar.getInstance();
long month = (long) calendar.get(Calendar.MONTH) + 1; // 月份从0开始所以要加1
return month;
}
public static Long getNowDayLong() {
Calendar calendar = Calendar.getInstance();
long date = calendar.get(Calendar.DAY_OF_MONTH); // 月份从0开始所以要加1
return date;
}
} }

View File

@ -68,4 +68,6 @@ public interface EmsPcsBranchDataMapper
* @return * @return
*/ */
public List<PcsBranchInfo> getPcsBranchInfoList(@Param("siteId")String siteId, @Param("deviceId")String deviceId); public List<PcsBranchInfo> getPcsBranchInfoList(@Param("siteId")String siteId, @Param("deviceId")String deviceId);
int insertPcsBranchDataList(List<EmsPcsBranchData> list);
} }

View File

@ -0,0 +1,63 @@
package com.xzzn.ems.service;
import java.util.List;
import com.xzzn.ems.domain.EmsPcsBranchData;
/**
* pcs支路数据Service接口
*
* @author xzzn
* @date 2025-06-29
*/
public interface IEmsPcsBranchDataService
{
/**
* 查询pcs支路数据
*
* @param id pcs支路数据主键
* @return pcs支路数据
*/
public EmsPcsBranchData selectEmsPcsBranchDataById(Long id);
/**
* 查询pcs支路数据列表
*
* @param emsPcsBranchData pcs支路数据
* @return pcs支路数据集合
*/
public List<EmsPcsBranchData> selectEmsPcsBranchDataList(EmsPcsBranchData emsPcsBranchData);
/**
* 新增pcs支路数据
*
* @param emsPcsBranchData pcs支路数据
* @return 结果
*/
public int insertEmsPcsBranchData(EmsPcsBranchData emsPcsBranchData);
/**
* 修改pcs支路数据
*
* @param emsPcsBranchData pcs支路数据
* @return 结果
*/
public int updateEmsPcsBranchData(EmsPcsBranchData emsPcsBranchData);
/**
* 批量删除pcs支路数据
*
* @param ids 需要删除的pcs支路数据主键集合
* @return 结果
*/
public int deleteEmsPcsBranchDataByIds(Long[] ids);
/**
* 删除pcs支路数据信息
*
* @param id pcs支路数据主键
* @return 结果
*/
public int deleteEmsPcsBranchDataById(Long id);
int insertEmsPcsBranchDataList(List<EmsPcsBranchData> list);
}

View File

@ -0,0 +1,105 @@
package com.xzzn.ems.service.impl;
import java.util.List;
import com.xzzn.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.xzzn.ems.mapper.EmsPcsBranchDataMapper;
import com.xzzn.ems.domain.EmsPcsBranchData;
import com.xzzn.ems.service.IEmsPcsBranchDataService;
/**
* pcs支路数据Service业务层处理
*
* @author xzzn
* @date 2025-06-29
*/
@Service
public class EmsPcsBranchDataServiceImpl implements IEmsPcsBranchDataService
{
@Autowired
private EmsPcsBranchDataMapper emsPcsBranchDataMapper;
/**
* 查询pcs支路数据
*
* @param id pcs支路数据主键
* @return pcs支路数据
*/
@Override
public EmsPcsBranchData selectEmsPcsBranchDataById(Long id)
{
return emsPcsBranchDataMapper.selectEmsPcsBranchDataById(id);
}
/**
* 查询pcs支路数据列表
*
* @param emsPcsBranchData pcs支路数据
* @return pcs支路数据
*/
@Override
public List<EmsPcsBranchData> selectEmsPcsBranchDataList(EmsPcsBranchData emsPcsBranchData)
{
return emsPcsBranchDataMapper.selectEmsPcsBranchDataList(emsPcsBranchData);
}
/**
* 新增pcs支路数据
*
* @param emsPcsBranchData pcs支路数据
* @return 结果
*/
@Override
public int insertEmsPcsBranchData(EmsPcsBranchData emsPcsBranchData)
{
emsPcsBranchData.setCreateTime(DateUtils.getNowDate());
return emsPcsBranchDataMapper.insertEmsPcsBranchData(emsPcsBranchData);
}
/**
* 修改pcs支路数据
*
* @param emsPcsBranchData pcs支路数据
* @return 结果
*/
@Override
public int updateEmsPcsBranchData(EmsPcsBranchData emsPcsBranchData)
{
emsPcsBranchData.setUpdateTime(DateUtils.getNowDate());
return emsPcsBranchDataMapper.updateEmsPcsBranchData(emsPcsBranchData);
}
/**
* 批量删除pcs支路数据
*
* @param ids 需要删除的pcs支路数据主键
* @return 结果
*/
@Override
public int deleteEmsPcsBranchDataByIds(Long[] ids)
{
return emsPcsBranchDataMapper.deleteEmsPcsBranchDataByIds(ids);
}
/**
* 删除pcs支路数据信息
*
* @param id pcs支路数据主键
* @return 结果
*/
@Override
public int deleteEmsPcsBranchDataById(Long id)
{
return emsPcsBranchDataMapper.deleteEmsPcsBranchDataById(id);
}
@Override
public int insertEmsPcsBranchDataList(List<EmsPcsBranchData> list) {
for (EmsPcsBranchData item : list) {
item.setCreateTime(DateUtils.getNowDate());
}
return emsPcsBranchDataMapper.insertPcsBranchDataList(list);
}
}

View File

@ -216,4 +216,77 @@
WHERE rn = 1 WHERE rn = 1
ORDER BY tmp.branch_id; ORDER BY tmp.branch_id;
</select> </select>
<insert id="insertPcsBranchDataList" parameterType="java.util.List">
INSERT INTO ems_pcs_branch_data (
discharge_status,
dc_power,
dc_voltage,
dc_current,
site_id,
device_id,
branch_id,
grid_u_voltage,
grid_v_voltage,
grid_w_voltage,
output_u_current,
output_v_current,
output_w_current,
apparent_power,
active_power,
reactive_power,
power_factor,
frequency,
internal_temp,
u_igbt_temp,
v_igbt_temp,
w_igbt_temp,
grid_status,
available_power,
total_load_ratio,
ac_leakage_current,
insulation_resistance,
create_by,
create_time,
update_by,
update_time,
remark
) VALUES
<foreach collection="list" item="item" separator=",">
(
#{item.dischargeStatus},
#{item.dcPower},
#{item.dcVoltage},
#{item.dcCurrent},
#{item.siteId},
#{item.deviceId},
#{item.branchId},
#{item.gridUVoltage},
#{item.gridVVoltage},
#{item.gridWVoltage},
#{item.outputUCurrent},
#{item.outputVCurrent},
#{item.outputWCurrent},
#{item.apparentPower},
#{item.activePower},
#{item.reactivePower},
#{item.powerFactor},
#{item.frequency},
#{item.internalTemp},
#{item.uIgbtTemp},
#{item.vIgbtTemp},
#{item.wIgbtTemp},
#{item.gridStatus},
#{item.availablePower},
#{item.totalLoadRatio},
#{item.acLeakageCurrent},
#{item.insulationResistance},
#{item.createBy},
#{item.createTime},
#{item.updateBy},
#{item.updateTime},
#{item.remark}
)
</foreach>
</insert>
</mapper> </mapper>