diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/domain/NRAlarmInfo.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/domain/NRAlarmInfo.java new file mode 100644 index 000000000..708cf8e03 --- /dev/null +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/domain/NRAlarmInfo.java @@ -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; +} diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/domain/NRConnectorStatusInfo.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/domain/NRConnectorStatusInfo.java index 58229c941..d75c185d1 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/domain/NRConnectorStatusInfo.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/domain/NRConnectorStatusInfo.java @@ -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 { /** diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/service/NRService.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/service/NRService.java index 34abd5790..6aa27b0e7 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/service/NRService.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/service/NRService.java @@ -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 query_stations_info(QueryStationInfoDTO dto); -} + + /** + * 推送告警信息 + * 当充电接口发生异常告警或故障时,运营商企业平台应立即主动推送信息到省、市两级监管平台 + * @param pileConnectorCode + * @param connectorStatus + * @return + */ + String notification_alarmInfo(String pileConnectorCode, String connectorStatus); + + + /** + * 设备状态变化推送 + * 当充电枪由 闲置 转为 充电 等状态发生变化时,运营商平台应立即推送当前状态到省、市两级监管平台。 + * 充电过程中运营商平台应 每分钟 上报充电包含电流、电压在内的监测数据。 + */ + String notification_stationStatus(RealTimeMonitorData realTimeMonitorData); +} \ No newline at end of file diff --git a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/service/impl/NRServiceImpl.java b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/service/impl/NRServiceImpl.java index fca98f912..c83b1367d 100644 --- a/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/service/impl/NRServiceImpl.java +++ b/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/nanrui/service/impl/NRServiceImpl.java @@ -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 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 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 map = new LinkedHashMap<>(); + map.put("ConnectorStatusInfo", nrConnectorStatusInfo); + + // TODO 发送请求 + + return null; + } + /** * 获取设备信息 * @param stationId