diff --git a/ems-admin/src/main/java/com/xzzn/web/controller/ems/MqttMessageController.java b/ems-admin/src/main/java/com/xzzn/web/controller/ems/MqttMessageController.java index 9f78a6a..15d9d9a 100644 --- a/ems-admin/src/main/java/com/xzzn/web/controller/ems/MqttMessageController.java +++ b/ems-admin/src/main/java/com/xzzn/web/controller/ems/MqttMessageController.java @@ -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> records = processData(JSON.parseObject(jsonData, new TypeReference>() {})); List 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> records = processDataPrefix(JSON.parseObject(jsonData, new TypeReference>() {})); + List list = new ArrayList<>(); + +//单体电池 + for (Map.Entry> record : records.entrySet()) { + String recordId = record.getKey(); + Map 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> processDataPrefix(Map rawData) { + Map> records = new HashMap<>(); + + for (Map.Entry 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; + } } \ No newline at end of file diff --git a/ems-common/src/main/java/com/xzzn/common/utils/DateUtils.java b/ems-common/src/main/java/com/xzzn/common/utils/DateUtils.java index 7e04abb..786575b 100644 --- a/ems-common/src/main/java/com/xzzn/common/utils/DateUtils.java +++ b/ems-common/src/main/java/com/xzzn/common/utils/DateUtils.java @@ -8,6 +8,7 @@ import java.time.LocalDateTime; import java.time.LocalTime; import java.time.ZoneId; import java.time.ZonedDateTime; +import java.util.Calendar; import java.util.Date; 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()); 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; + } } diff --git a/ems-system/src/main/java/com/xzzn/ems/mapper/EmsPcsBranchDataMapper.java b/ems-system/src/main/java/com/xzzn/ems/mapper/EmsPcsBranchDataMapper.java index 96cc5ff..ade3ca4 100644 --- a/ems-system/src/main/java/com/xzzn/ems/mapper/EmsPcsBranchDataMapper.java +++ b/ems-system/src/main/java/com/xzzn/ems/mapper/EmsPcsBranchDataMapper.java @@ -68,4 +68,6 @@ public interface EmsPcsBranchDataMapper * @return */ public List getPcsBranchInfoList(@Param("siteId")String siteId, @Param("deviceId")String deviceId); + + int insertPcsBranchDataList(List list); } diff --git a/ems-system/src/main/java/com/xzzn/ems/service/IEmsPcsBranchDataService.java b/ems-system/src/main/java/com/xzzn/ems/service/IEmsPcsBranchDataService.java new file mode 100644 index 0000000..8929301 --- /dev/null +++ b/ems-system/src/main/java/com/xzzn/ems/service/IEmsPcsBranchDataService.java @@ -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 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 list); +} diff --git a/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsPcsBranchDataServiceImpl.java b/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsPcsBranchDataServiceImpl.java new file mode 100644 index 0000000..111533b --- /dev/null +++ b/ems-system/src/main/java/com/xzzn/ems/service/impl/EmsPcsBranchDataServiceImpl.java @@ -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 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 list) { + for (EmsPcsBranchData item : list) { + item.setCreateTime(DateUtils.getNowDate()); + } + return emsPcsBranchDataMapper.insertPcsBranchDataList(list); + + } +} diff --git a/ems-system/src/main/resources/mapper/ems/EmsPcsBranchDataMapper.xml b/ems-system/src/main/resources/mapper/ems/EmsPcsBranchDataMapper.xml index 79890d1..f9ec33c 100644 --- a/ems-system/src/main/resources/mapper/ems/EmsPcsBranchDataMapper.xml +++ b/ems-system/src/main/resources/mapper/ems/EmsPcsBranchDataMapper.xml @@ -216,4 +216,77 @@ WHERE rn = 1 ORDER BY tmp.branch_id; + + + 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 + + ( + #{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} + ) + + \ No newline at end of file