pcs 支路
This commit is contained in:
@ -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;
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -68,4 +68,6 @@ public interface EmsPcsBranchDataMapper
|
||||
* @return
|
||||
*/
|
||||
public List<PcsBranchInfo> getPcsBranchInfoList(@Param("siteId")String siteId, @Param("deviceId")String deviceId);
|
||||
|
||||
int insertPcsBranchDataList(List<EmsPcsBranchData> list);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
@ -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);
|
||||
|
||||
}
|
||||
}
|
@ -216,4 +216,77 @@
|
||||
WHERE rn = 1
|
||||
ORDER BY tmp.branch_id;
|
||||
</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>
|
Reference in New Issue
Block a user