设备在线状态和工作状态取值调整

This commit is contained in:
zq
2026-01-07 11:27:02 +08:00
parent a4ac11e7d9
commit 77a3b6e855
15 changed files with 147 additions and 98 deletions

View File

@ -1,14 +1,15 @@
package com.xzzn.ems.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xzzn.common.annotation.Excel;
import com.xzzn.common.core.domain.BaseEntity;
import com.xzzn.common.utils.StringUtils;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xzzn.common.core.domain.BaseEntity;
import com.xzzn.common.utils.StringUtils;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.xzzn.common.annotation.Excel;
/**
* 电池簇数据对象 ems_battery_cluster
@ -28,8 +29,8 @@ public class EmsBatteryCluster extends BaseEntity
@Excel(name = "数据更新时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date dataUpdateTime;
/** 工作状态0-正常 1-异常 2-停止 */
@Excel(name = "工作状态0-正常 1-异常 2-停止")
/** 工作状态0-运行 1-停机 2-故障 */
@Excel(name = "工作状态0-运行 1-停机 2-故障")
private String workStatus;
/** 与PCS通信状态0-正常 1-通信中断 2-异常 */

View File

@ -1,13 +1,14 @@
package com.xzzn.ems.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xzzn.common.annotation.Excel;
import com.xzzn.common.core.domain.BaseEntity;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xzzn.common.core.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.xzzn.common.annotation.Excel;
/**
* 电池堆数据对象 ems_battery_stack
@ -27,8 +28,8 @@ public class EmsBatteryStack extends BaseEntity
@Excel(name = "数据更新时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date dataUpdateTime;
/** 工作状态0-正常 1-异常 2-停止 */
@Excel(name = "工作状态0-正常 1-异常 2-停止")
/** 工作状态0-运行 1-停机 2-故障 */
@Excel(name = "工作状态0-运行 1-停机 2-故障")
private String workStatus;
/** 与PCS通信状态0-正常 1-通信中断 2-异常 */

View File

@ -1,11 +1,13 @@
package com.xzzn.ems.domain;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xzzn.common.annotation.Excel;
import com.xzzn.common.core.domain.BaseEntity;
import java.util.Date;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.xzzn.common.annotation.Excel;
/**
* Modbus设备配置对象 ems_devices_setting
@ -102,8 +104,8 @@ public class EmsDevicesSetting extends BaseEntity
@Excel(name = "设备类别例如“STACK/CLUSTER/PCS等”")
private String deviceCategory;
/** 设备运行状态0-离线、1-待机、2-运行、3-故障、4-停机 */
@Excel(name = "设备运行状态0-离线、1-待机、2-运行、3-故障、4-停机")
/** 设备运行状态0-离线、1-在线 */
@Excel(name = "设备运行状态0-离线、1-在线")
private String deviceStatus;
/** 设备图像地址 */

View File

@ -28,16 +28,16 @@ public class EmsPcsData extends BaseEntity
@Excel(name = "数据更新时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date dataUpdateTime;
/** 工作状态0-正常 1-异常 2-停止 */
@Excel(name = "工作状态0-正常 1-异常 2-停止")
/** 工作状态0-运行 1-停机 2-故障 */
@Excel(name = "工作状态0-运行 1-停机 2-故障")
private String workStatus;
/** 并网状态0-并网 1-未并网 */
@Excel(name = "并网状态0-并网 1-未并网")
private String gridStatus;
/** 设备运行状态0-离线、1-待机、2-运行、3-故障、4-停机 */
@Excel(name = "设备运行状态0-离线、1-待机、2-运行、3-故障、4-停机")
/** 设备运行状态0-离线、1-在线 */
@Excel(name = "设备运行状态0-离线、1-在线")
private String deviceStatus;
/** 控制模式0-远程 1-本地 */

View File

@ -16,8 +16,9 @@ public class DeviceUpdateRequest {
@NotBlank(message = "设备ID不能为空")
private String deviceId;
/** 设备状态0-离线、1-待机、2-运行、3-故障、4-停机 */
private String deviceStatus;
/** 工作状态0-运行 1-停机 2-故障 */
@NotBlank(message = "工作状态状态不能为空")
private String workStatus;
/** 设备类型 */
private String deviceCategory;
@ -38,12 +39,12 @@ public class DeviceUpdateRequest {
this.deviceId = deviceId;
}
public String getDeviceStatus() {
return deviceStatus;
public String getWorkStatus() {
return workStatus;
}
public void setDeviceStatus(String deviceStatus) {
this.deviceStatus = deviceStatus;
public void setWorkStatus(String workStatus) {
this.workStatus = workStatus;
}
public String getDeviceCategory() {

View File

@ -9,33 +9,70 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.xzzn.common.constant.Constants;
import com.xzzn.common.constant.RedisKeyConstants;
import com.xzzn.common.core.redis.RedisCache;
import com.xzzn.common.enums.*;
import com.xzzn.common.enums.BranchStatus;
import com.xzzn.common.enums.ChargeStatus;
import com.xzzn.common.enums.CommunicationStatus;
import com.xzzn.common.enums.ControlModeStatus;
import com.xzzn.common.enums.DeviceRunningStatus;
import com.xzzn.common.enums.GridStatus;
import com.xzzn.common.enums.SwitchStatus;
import com.xzzn.common.enums.WorkStatus;
import com.xzzn.common.utils.DateUtils;
import com.xzzn.common.utils.StringUtils;
import com.xzzn.ems.domain.*;
import com.xzzn.ems.domain.EmsAmmeterData;
import com.xzzn.ems.domain.EmsBatteryCluster;
import com.xzzn.ems.domain.EmsBatteryData;
import com.xzzn.ems.domain.EmsBatteryDataDailyLatest;
import com.xzzn.ems.domain.EmsBatteryDataMinutes;
import com.xzzn.ems.domain.EmsBatteryGroup;
import com.xzzn.ems.domain.EmsBatteryStack;
import com.xzzn.ems.domain.EmsDailyChargeData;
import com.xzzn.ems.domain.EmsDailyEnergyData;
import com.xzzn.ems.domain.EmsDevicesSetting;
import com.xzzn.ems.domain.EmsDhData;
import com.xzzn.ems.domain.EmsPcsBranchData;
import com.xzzn.ems.domain.EmsPcsData;
import com.xzzn.ems.domain.EmsXfData;
import com.xzzn.ems.domain.vo.EnergyPriceVo;
import com.xzzn.ems.mapper.*;
import com.xzzn.ems.mapper.EmsAmmeterDataMapper;
import com.xzzn.ems.mapper.EmsBatteryClusterMapper;
import com.xzzn.ems.mapper.EmsBatteryDataMapper;
import com.xzzn.ems.mapper.EmsBatteryDataMinutesMapper;
import com.xzzn.ems.mapper.EmsBatteryGroupMapper;
import com.xzzn.ems.mapper.EmsBatteryStackMapper;
import com.xzzn.ems.mapper.EmsDailyChargeDataMapper;
import com.xzzn.ems.mapper.EmsDailyEnergyDataMapper;
import com.xzzn.ems.mapper.EmsDevicesSettingMapper;
import com.xzzn.ems.mapper.EmsDhDataMapper;
import com.xzzn.ems.mapper.EmsPcsBranchDataMapper;
import com.xzzn.ems.mapper.EmsPcsDataMapper;
import com.xzzn.ems.mapper.EmsXfDataMapper;
import com.xzzn.ems.service.IDDSDataProcessService;
import com.xzzn.ems.service.IEmsAlarmRecordsService;
import com.xzzn.ems.service.IEmsDeviceSettingService;
import com.xzzn.ems.utils.AbstractBatteryDataProcessor;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@Service
public class DDSDataProcessServiceImpl extends AbstractBatteryDataProcessor implements IDDSDataProcessService {
private static final Log log = LogFactory.getLog(DDSDataProcessServiceImpl.class);
@ -633,7 +670,7 @@ public class DDSDataProcessServiceImpl extends AbstractBatteryDataProcessor impl
pcsData.setDataUpdateTime(new Date());
pcsData.setWorkStatus(WorkStatus.NORMAL.getCode());
pcsData.setGridStatus(GridStatus.GRID.getCode());
pcsData.setDeviceStatus(DeviceRunningStatus.RUNNING.getCode());
pcsData.setDeviceStatus(DeviceRunningStatus.ONLINE.getCode());
pcsData.setControlMode(ControlModeStatus.REMOTE.getCode());
// 电流

View File

@ -23,7 +23,6 @@ import com.xzzn.common.enums.GridStatus;
import com.xzzn.common.enums.SiteDevice;
import com.xzzn.common.enums.SiteEnum;
import com.xzzn.common.enums.SwitchStatus;
import com.xzzn.common.enums.WorkStatus;
import com.xzzn.common.utils.DateUtils;
import com.xzzn.common.utils.MapUtils;
import com.xzzn.common.utils.StringUtils;
@ -379,7 +378,7 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
// 其他非 BigDecimal 字段
dataStack.setDataUpdateTime(dataUpdateTime);
dataStack.setWorkStatus(WorkStatus.NORMAL.getCode()); // 或其他默认值
// dataStack.setWorkStatus(WorkStatus.NORMAL.getCode()); // 或其他默认值
dataStack.setPcsCommunicationStatus(CommunicationStatus.OK.getCode());
dataStack.setEmsCommunicationStatus(CommunicationStatus.OK.getCode());
@ -669,7 +668,7 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
saveDeviceData(pointMatchList, obj, data, pointEnumMatchMap);
data.setDataUpdateTime(dataUpdateTime);
data.setWorkStatus(WorkStatus.NORMAL.getCode()); // 或其他默认值
// data.setWorkStatus(WorkStatus.NORMAL.getCode()); // 或其他默认值
data.setPcsCommunicationStatus(CommunicationStatus.OK.getCode());
data.setEmsCommunicationStatus(CommunicationStatus.OK.getCode());
data.setCreateBy("system");
@ -812,9 +811,9 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
// 时间与状态类字段
pcsData.setDataUpdateTime(dataUpdateTime);
pcsData.setWorkStatus(WorkStatus.NORMAL.getCode());
// pcsData.setWorkStatus(WorkStatus.NORMAL.getCode());
pcsData.setGridStatus(GridStatus.GRID.getCode());
pcsData.setDeviceStatus(DeviceRunningStatus.RUNNING.getCode());
pcsData.setDeviceStatus(DeviceRunningStatus.ONLINE.getCode());
pcsData.setControlMode(ControlModeStatus.REMOTE.getCode());
// 系统管理字段
@ -936,7 +935,7 @@ public class DeviceDataProcessServiceImpl extends AbstractBatteryDataProcessor i
EmsBatteryCluster data = new EmsBatteryCluster();
// 其他非 BigDecimal 字段
data.setDataUpdateTime(dataUpdateTime);
data.setWorkStatus(WorkStatus.NORMAL.getCode()); // 或其他默认值
// data.setWorkStatus(WorkStatus.NORMAL.getCode()); // 或其他默认值
data.setPcsCommunicationStatus(CommunicationStatus.OK.getCode());
data.setEmsCommunicationStatus(CommunicationStatus.OK.getCode());
data.setCreateBy("system");

View File

@ -10,9 +10,9 @@ import com.xzzn.common.core.modbus.domain.DeviceConfig;
import com.xzzn.common.core.modbus.domain.WriteTagConfig;
import com.xzzn.common.core.redis.RedisCache;
import com.xzzn.common.enums.DeviceCategory;
import com.xzzn.common.enums.DeviceRunningStatus;
import com.xzzn.common.enums.PointType;
import com.xzzn.common.enums.SiteEnum;
import com.xzzn.common.enums.WorkStatus;
import com.xzzn.common.exception.ServiceException;
import com.xzzn.common.utils.DateUtils;
import com.xzzn.common.utils.StringUtils;
@ -528,25 +528,14 @@ public class EmsDeviceSettingServiceImpl implements IEmsDeviceSettingService
if (pcsSetting == null) {
throw new ServiceException("未找到对应PCS配置信息");
}
if (DeviceRunningStatus.getShutdownCodeList().contains(request.getDeviceStatus())) {
// 开机逻辑
device.setDeviceStatus(DeviceRunningStatus.RUNNING.getCode());
} else if (DeviceRunningStatus.getRunningCodeList().contains(request.getDeviceStatus())) {
// 关机逻辑
device.setDeviceStatus(DeviceRunningStatus.SHUTDOWN.getCode());
} else {
return false;
}
// 调用Modbus向设备发送指令
DeviceConfig deviceConfig = getDeviceConfig(device);
deviceConfig.setWriteTags(getWriteTags(device.getDeviceStatus(), pcsSetting));
deviceConfig.setWriteTags(getWriteTags(request.getWorkStatus(), pcsSetting));
log.info("设备控制指令发送数据: {}", JSON.toJSONString(deviceConfig));
boolean result = modbusProcessor.writeDataToDevice(deviceConfig);
if (!result) {
throw new ServiceException("设备控制指令发送失败");
}
device.setUpdatedAt(DateUtils.getNowDate());
emsDevicesMapper.updateEmsDevicesSetting(device);
return true;
}
@ -563,19 +552,21 @@ public class EmsDeviceSettingServiceImpl implements IEmsDeviceSettingService
return deviceConfig;
}
public List<WriteTagConfig> getWriteTags(String deviceStatus, EmsPcsSetting pcsSetting) {
public List<WriteTagConfig> getWriteTags(String workStatus, EmsPcsSetting pcsSetting) {
List<WriteTagConfig> writeTags = new ArrayList<>();
BigDecimal power;
WriteTagConfig writeTag = new WriteTagConfig();
writeTag.setAddress(pcsSetting.getPointAddress());
if (DeviceRunningStatus.RUNNING.getCode().equals(deviceStatus)) {
if (WorkStatus.NORMAL.getCode().equals(workStatus)) {
// 开机
writeTag.setValue(pcsSetting.getStartCommand());
power = pcsSetting.getStartPower();
} else {
} else if (WorkStatus.STOP.getCode().equals(workStatus)) {
// 关机
writeTag.setValue(pcsSetting.getStopCommand());
power = pcsSetting.getStopPower();
} else {
throw new ServiceException("工作状态不合法");
}
writeTags.add(writeTag);
JSONArray array = JSON.parseArray(pcsSetting.getClusterPointAddress());

View File

@ -173,8 +173,7 @@ public class EmsStrategyTempServiceImpl implements IEmsStrategyTempService
}
private void convertStringToDate(String content, SyncStrategyTempVo syncVo) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree(content);
JsonNode rootNode = objectMapper.readTree(content);
String startTime = rootNode.path("startTime").asText();
String endTime = rootNode.path("endTime").asText();
if (startTime != null && !"null".equals(startTime)) {

View File

@ -9,42 +9,73 @@ import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.xzzn.common.constant.RedisKeyConstants;
import com.xzzn.common.core.redis.RedisCache;
import com.xzzn.common.enums.*;
import com.xzzn.common.enums.BranchStatus;
import com.xzzn.common.enums.ChargeStatus;
import com.xzzn.common.enums.CommunicationStatus;
import com.xzzn.common.enums.ControlModeStatus;
import com.xzzn.common.enums.DeviceRunningStatus;
import com.xzzn.common.enums.GridStatus;
import com.xzzn.common.enums.SwitchStatus;
import com.xzzn.common.enums.WorkStatus;
import com.xzzn.common.utils.DateUtils;
import com.xzzn.common.utils.StringUtils;
import com.xzzn.ems.domain.*;
import com.xzzn.ems.domain.EmsAmmeterData;
import com.xzzn.ems.domain.EmsBatteryCluster;
import com.xzzn.ems.domain.EmsBatteryData;
import com.xzzn.ems.domain.EmsBatteryDataDailyLatest;
import com.xzzn.ems.domain.EmsBatteryDataMinutes;
import com.xzzn.ems.domain.EmsBatteryStack;
import com.xzzn.ems.domain.EmsCoolingData;
import com.xzzn.ems.domain.EmsDailyChargeData;
import com.xzzn.ems.domain.EmsDailyEnergyData;
import com.xzzn.ems.domain.EmsDevicesSetting;
import com.xzzn.ems.domain.EmsDhData;
import com.xzzn.ems.domain.EmsPcsBranchData;
import com.xzzn.ems.domain.EmsPcsData;
import com.xzzn.ems.domain.EmsPointMatch;
import com.xzzn.ems.domain.vo.EnergyPriceTimeRange;
import com.xzzn.ems.domain.vo.EnergyPriceVo;
import com.xzzn.ems.enums.DeviceMatchTable;
import com.xzzn.ems.mapper.*;
import com.xzzn.ems.mapper.EmsAmmeterDataMapper;
import com.xzzn.ems.mapper.EmsBatteryClusterMapper;
import com.xzzn.ems.mapper.EmsBatteryDataMapper;
import com.xzzn.ems.mapper.EmsBatteryDataMinutesMapper;
import com.xzzn.ems.mapper.EmsBatteryStackMapper;
import com.xzzn.ems.mapper.EmsCoolingDataMapper;
import com.xzzn.ems.mapper.EmsDailyChargeDataMapper;
import com.xzzn.ems.mapper.EmsDailyEnergyDataMapper;
import com.xzzn.ems.mapper.EmsDevicesSettingMapper;
import com.xzzn.ems.mapper.EmsDhDataMapper;
import com.xzzn.ems.mapper.EmsEnergyPriceConfigMapper;
import com.xzzn.ems.mapper.EmsPcsBranchDataMapper;
import com.xzzn.ems.mapper.EmsPcsDataMapper;
import com.xzzn.ems.service.IEmsAlarmRecordsService;
import com.xzzn.ems.service.IEmsEnergyPriceConfigService;
import com.xzzn.ems.service.IFXXDataProcessService;
import com.xzzn.ems.utils.AbstractBatteryDataProcessor;
import com.xzzn.ems.utils.DevicePointMatchDataProcessor;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.yaml.snakeyaml.introspector.PropertyUtils;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class FXXDataProcessServiceImpl extends AbstractBatteryDataProcessor implements IFXXDataProcessService {
private static final Log log = LogFactory.getLog(FXXDataProcessServiceImpl.class);
@ -539,7 +570,7 @@ public class FXXDataProcessServiceImpl extends AbstractBatteryDataProcessor impl
pcsData.setDataUpdateTime(dataUpdateTime);
pcsData.setWorkStatus(WorkStatus.NORMAL.getCode());
pcsData.setGridStatus(GridStatus.GRID.getCode());
pcsData.setDeviceStatus(DeviceRunningStatus.RUNNING.getCode());
pcsData.setDeviceStatus(DeviceRunningStatus.ONLINE.getCode());
pcsData.setControlMode(ControlModeStatus.REMOTE.getCode());
// 系统管理字段