This commit is contained in:
2023-10-09 12:00:32 +08:00
4 changed files with 163 additions and 9 deletions

View File

@@ -0,0 +1,53 @@
package com.jsowell.thirdparty.nanrui.domain;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 告警信息
*
* @author Lemon
* @Date 2023/10/8 9:09
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class NRAlarmInfo {
/**
* 枪口编号
*/
@JSONField(name = "ConnectorID")
private String connectorId;
/**
* 告警时间
* 格 式 为 yyyy-MM-dd HH:mm:ss
*/
@JSONField(name = "Alert_time")
private String alertTime;
/**
* 告警代码
*/
@JSONField(name = "Alert_code")
private Integer alertCode;
/**
* 描述
* 文字描述,最大长度 256 字符
*/
@JSONField(name = "Describe")
private String describe;
/**
* 状态
* 告警发生0告警恢复1
* 默认为 0
*/
@JSONField(name = "Status")
private Integer status;
}

View File

@@ -1,7 +1,10 @@
package com.jsowell.thirdparty.nanrui.domain;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
@@ -12,6 +15,9 @@ import java.math.BigDecimal;
* @Date 2023/9/25 14:05
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class NRConnectorStatusInfo {
/**

View File

@@ -1,5 +1,6 @@
package com.jsowell.thirdparty.nanrui.service;
import com.jsowell.common.core.domain.ykc.RealTimeMonitorData;
import com.jsowell.pile.dto.QueryStationInfoDTO;
import java.text.ParseException;
@@ -23,9 +24,26 @@ public interface NRService {
/**
* 联联平台获取充电站信息
* 获取充电站信息
* @param dto
* @return
*/
Map<String, String> query_stations_info(QueryStationInfoDTO dto);
}
/**
* 推送告警信息
* 当充电接口发生异常告警或故障时,运营商企业平台应立即主动推送信息到省、市两级监管平台
* @param pileConnectorCode
* @param connectorStatus
* @return
*/
String notification_alarmInfo(String pileConnectorCode, String connectorStatus);
/**
* 设备状态变化推送
* 当充电枪由 闲置 转为 充电 等状态发生变化时,运营商平台应立即推送当前状态到省、市两级监管平台。
* 充电过程中运营商平台应 每分钟 上报充电包含电流、电压在内的监测数据。
*/
String notification_stationStatus(RealTimeMonitorData realTimeMonitorData);
}

View File

@@ -2,15 +2,15 @@ package com.jsowell.thirdparty.nanrui.service.impl;
import com.github.pagehelper.PageInfo;
import com.google.common.collect.Lists;
import com.jsowell.common.constant.CacheConstants;
import com.jsowell.common.constant.Constants;
import com.jsowell.common.core.domain.ykc.RealTimeMonitorData;
import com.jsowell.common.core.redis.RedisCache;
import com.jsowell.common.enums.ykc.PileStatusEnum;
import com.jsowell.common.util.DateUtils;
import com.jsowell.common.util.PageUtils;
import com.jsowell.common.util.StringUtils;
import com.jsowell.pile.domain.PileBasicInfo;
import com.jsowell.pile.domain.PileConnectorInfo;
import com.jsowell.pile.domain.PileStationInfo;
import com.jsowell.pile.domain.ThirdPartyPlatformConfig;
import com.jsowell.pile.domain.*;
import com.jsowell.pile.dto.QueryStationInfoDTO;
import com.jsowell.pile.service.*;
import com.jsowell.pile.vo.uniapp.CurrentTimePriceDetails;
@@ -18,9 +18,7 @@ import com.jsowell.pile.vo.web.PileModelInfoVO;
import com.jsowell.pile.vo.web.PileStationVO;
import com.jsowell.thirdparty.lianlian.domain.ConnectorInfo;
import com.jsowell.thirdparty.lianlian.domain.StationInfo;
import com.jsowell.thirdparty.nanrui.domain.NRConnectorInfo;
import com.jsowell.thirdparty.nanrui.domain.NREquipmentInfo;
import com.jsowell.thirdparty.nanrui.domain.NRStationInfo;
import com.jsowell.thirdparty.nanrui.domain.*;
import com.jsowell.thirdparty.nanrui.service.NRService;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -52,6 +50,12 @@ public class NRServiceImpl implements NRService {
@Autowired
private IPileBillingTemplateService pileBillingTemplateService;
@Autowired
private IOrderBasicInfoService orderBasicInfoService;
@Autowired
private RedisCache redisCache;
/**
* 充电站信息变化推送
* @param stationId
@@ -184,6 +188,79 @@ public class NRServiceImpl implements NRService {
return null;
}
/**
* 推送告警信息
* @param pileConnectorCode
* @param connectorStatus
* @return
*/
@Override
public String notification_alarmInfo(String pileConnectorCode, String connectorStatus) {
List<NRAlarmInfo> nrAlarmInfos = new ArrayList<>();
// 从缓存中获取故障原因
String redisKey = CacheConstants.PILE_HARDWARE_FAULT + pileConnectorCode;
String faultReason = redisCache.getCacheObject(redisKey);
int status = 0;
if (StringUtils.equals(connectorStatus, "01")) {
// 故障
status = 1;
}
// 封装对象
NRAlarmInfo alarmInfo = NRAlarmInfo.builder()
.connectorId(pileConnectorCode)
.alertTime(DateUtils.dateTimeNow(DateUtils.YYYY_MM_DD_HH_MM_SS))
.alertCode(120) // 120-预留
.describe(faultReason)
.status(status)
.build();
nrAlarmInfos.add(alarmInfo);
Map<String, Object> map = new LinkedHashMap<>();
map.put("AlarmInfos", nrAlarmInfos);
// TODO 发送请求
return null;
}
/**
* 设备状态变化推送
* @param realTimeMonitorData
* @return
*/
@Override
public String notification_stationStatus(RealTimeMonitorData realTimeMonitorData) {
String pileConnectorCode = realTimeMonitorData.getPileSn() + realTimeMonitorData.getConnectorCode();
String connectorStatus = realTimeMonitorData.getConnectorStatus();
String transactionCode = realTimeMonitorData.getTransactionCode();
// 根据交易流水号查询订单信息
OrderBasicInfo orderBasicInfo = orderBasicInfoService.getOrderInfoByTransactionCode(transactionCode);
// 封装对象
NRConnectorStatusInfo nrConnectorStatusInfo = NRConnectorStatusInfo.builder()
.connectorID(pileConnectorCode)
.status(Integer.parseInt(connectorStatus))
.currentA(Integer.parseInt(realTimeMonitorData.getOutputCurrent()))
.voltageA(Integer.parseInt(realTimeMonitorData.getOutputVoltage()))
.soc(BigDecimal.ZERO)
.beginTime(DateUtils.formatDateTime(orderBasicInfo.getChargeStartTime()))
.currentKwh(new BigDecimal(realTimeMonitorData.getChargingDegree()).setScale(3, BigDecimal.ROUND_HALF_UP))
.timeStamp((int) (System.currentTimeMillis() / 1000))
.build();
if (StringUtils.isNotBlank(realTimeMonitorData.getSOC())) {
nrConnectorStatusInfo.setSoc(new BigDecimal(realTimeMonitorData.getSOC()).setScale(1, BigDecimal.ROUND_HALF_UP));
}
Map<String, Object> map = new LinkedHashMap<>();
map.put("ConnectorStatusInfo", nrConnectorStatusInfo);
// TODO 发送请求
return null;
}
/**
* 获取设备信息
* @param stationId