update 对接联联平台

This commit is contained in:
2024-03-26 15:26:34 +08:00
parent 91f2d22583
commit cc98d768e0
14 changed files with 888 additions and 84 deletions

View File

@@ -1,7 +1,10 @@
package com.jsowell.pile.service;
import com.jsowell.pile.thirdparty.ConnectorInfo;
import com.jsowell.pile.thirdparty.EquipmentInfo;
import com.jsowell.common.core.domain.ykc.RealTimeMonitorData;
import com.jsowell.pile.domain.PileBasicInfo;
import com.jsowell.pile.domain.PileStationInfo;
import com.jsowell.pile.dto.IndexQueryDTO;
import com.jsowell.pile.dto.QueryPileDTO;
import com.jsowell.pile.dto.ReplaceMerchantStationDTO;
@@ -190,4 +193,8 @@ public interface PileBasicInfoService {
* 获取最新建一条桩的信息
*/
PileBasicInfo getMaxNumPileInfo();
List<EquipmentInfo> getPileList(PileStationInfo pileStationInfo);
List<ConnectorInfo> getConnectorList(PileBasicInfo pileBasicInfo);
}

View File

@@ -12,6 +12,8 @@ import java.util.List;
* @date 2023-06-06
*/
public interface ThirdPartyStationRelationService {
// 保存到数据库
int insertInfo2DataBase(String thirdPartyType, String stationId);
/**
* 查询站点、第三方推送平台配置对应
*

View File

@@ -4,21 +4,22 @@ import com.alibaba.fastjson2.JSON;
import com.google.common.collect.Lists;
import com.jsowell.common.constant.CacheConstants;
import com.jsowell.common.constant.Constants;
import com.jsowell.pile.thirdparty.ConnectorInfo;
import com.jsowell.pile.thirdparty.EquipmentInfo;
import com.jsowell.common.core.domain.vo.AuthorizedDeptVO;
import com.jsowell.common.core.domain.ykc.GroundLockData;
import com.jsowell.common.core.domain.ykc.RealTimeMonitorData;
import com.jsowell.common.core.domain.ykc.YKCFrameTypeCode;
import com.jsowell.common.core.redis.RedisCache;
import com.jsowell.common.enums.DelFlagEnum;
import com.jsowell.common.enums.lianlian.LianLianPileStatusEnum;
import com.jsowell.common.enums.ykc.PileConnectorDataBaseStatusEnum;
import com.jsowell.common.enums.ykc.PileConnectorStatusEnum;
import com.jsowell.common.enums.ykc.PileStatusEnum;
import com.jsowell.common.enums.ykc.ReturnCodeEnum;
import com.jsowell.common.exception.BusinessException;
import com.jsowell.common.util.*;
import com.jsowell.pile.domain.PileBasicInfo;
import com.jsowell.pile.domain.PileConnectorInfo;
import com.jsowell.pile.domain.PileModelInfo;
import com.jsowell.pile.domain.PileSimInfo;
import com.jsowell.pile.domain.*;
import com.jsowell.pile.dto.IndexQueryDTO;
import com.jsowell.pile.dto.QueryPileDTO;
import com.jsowell.pile.dto.ReplaceMerchantStationDTO;
@@ -927,4 +928,97 @@ public class PileBasicInfoServiceImpl implements PileBasicInfoService {
public PileBasicInfo getMaxNumPileInfo() {
return pileBasicInfoMapper.getMaxNumPileInfo();
}
/**
* 获取桩列表信息
*
* @param pileStationInfo
* @return
*/
@Override
public List<EquipmentInfo> getPileList(PileStationInfo pileStationInfo) {
List<EquipmentInfo> resultList = new ArrayList<>();
// 通过站点id查询桩基本信息
List<PileBasicInfo> list = this.getPileListByStationId(String.valueOf(pileStationInfo.getId()));
// MerchantInfoVO merchantInfo = pileMerchantInfoService.getMerchantInfo(String.valueOf(pileStationInfo.getMerchantId()));
// 封装成联联平台对象
for (PileBasicInfo pileBasicInfo : list) {
EquipmentInfo equipmentInfo = new EquipmentInfo();
String pileSn = pileBasicInfo.getSn();
equipmentInfo.setEquipmentID(pileSn);
equipmentInfo.setManufacturerID(Constants.OPERATORID_LIANLIAN);
equipmentInfo.setConstructionTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, pileBasicInfo.getCreateTime()));
PileModelInfoVO modelInfo = pileModelInfoService.getPileModelInfoByPileSn(pileSn);
equipmentInfo.setEquipmentType(Integer.valueOf(modelInfo.getSpeedType()));
// Map<String, String> pileStatus = pileConnectorInfoService.getPileStatus(Lists.newArrayList(pileBasicInfo.getSn()));
Map<String, String> pileStatusMap = pileConnectorInfoService.getPileStatus(Lists.newArrayList(pileSn));
String pileStatus = pileStatusMap.get(pileSn);
if (StringUtils.equals(PileStatusEnum.ON_LINE.getValue(), pileStatus)) {
// 1-在线
pileStatus = LianLianPileStatusEnum.NORMAL.getCode();
} else if (StringUtils.equals(PileStatusEnum.OFF_LINE.getValue(), pileStatus)) {
// 2-离线
pileStatus = LianLianPileStatusEnum.CLOSE_OFFLINE.getCode();
} else if (StringUtils.equals(PileStatusEnum.FAULT.getValue(), pileStatus)) {
// 3-故障
pileStatus = LianLianPileStatusEnum.UNDER_MAINTENANCE.getCode();
}
equipmentInfo.setEquipmentStatus(Integer.valueOf(pileStatus));
equipmentInfo.setEquipmentPower(new BigDecimal(modelInfo.getRatedPower()).setScale(1, BigDecimal.ROUND_HALF_UP));
equipmentInfo.setNewNationalStandard(1);
equipmentInfo.setVinFlag(1);
List<ConnectorInfo> connectorList = getConnectorList(pileBasicInfo);
equipmentInfo.setConnectorInfos(connectorList);
resultList.add(equipmentInfo);
}
return resultList;
}
/**
* 获取枪口列表
*
* @param pileBasicInfo
* @return
*/
@Override
public List<ConnectorInfo> getConnectorList(PileBasicInfo pileBasicInfo) {
List<ConnectorInfo> resultList = new ArrayList<>();
List<PileConnectorInfo> list = pileConnectorInfoService.selectPileConnectorInfoList(pileBasicInfo.getSn());
for (PileConnectorInfo pileConnectorInfo : list) {
ConnectorInfo connectorInfo = new ConnectorInfo();
connectorInfo.setConnectorID(pileConnectorInfo.getPileConnectorCode());
String pileSn = pileConnectorInfo.getPileSn();
PileModelInfoVO modelInfo = pileModelInfoService.getPileModelInfoByPileSn(pileSn);
int connectorType = StringUtils.equals("1", modelInfo.getSpeedType()) ? 4 : 3;
connectorInfo.setConnectorType(connectorType);
// 车位号
if (StringUtils.isNotBlank(pileConnectorInfo.getParkNo())) {
connectorInfo.setParkNo(pileConnectorInfo.getParkNo());
}
connectorInfo.setVoltageUpperLimits(Integer.valueOf(modelInfo.getRatedVoltage()));
connectorInfo.setVoltageLowerLimits(Integer.valueOf(modelInfo.getRatedVoltage()));
connectorInfo.setCurrent(Integer.valueOf(modelInfo.getRatedCurrent()));
if (!StringUtils.equals(modelInfo.getConnectorNum(), "1")) {
// 如果不是单枪,则枪口功率需要除以枪口数量
String ratedPowerStr = modelInfo.getRatedPower();
BigDecimal ratedPower = new BigDecimal(ratedPowerStr);
connectorInfo.setPower(ratedPower.divide(new BigDecimal(modelInfo.getConnectorNum()), 1, BigDecimal.ROUND_HALF_UP));
}else {
connectorInfo.setPower(new BigDecimal(modelInfo.getRatedPower()).setScale(1, BigDecimal.ROUND_HALF_UP));
}
resultList.add(connectorInfo);
}
return resultList;
}
}

View File

@@ -26,7 +26,6 @@ import com.jsowell.pile.mapper.PileBasicInfoMapper;
import com.jsowell.pile.mapper.PileConnectorInfoMapper;
import com.jsowell.pile.service.*;
import com.jsowell.pile.vo.base.ConnectorInfoVO;
import com.jsowell.pile.vo.base.ThirdPartyStationRelationVO;
import com.jsowell.pile.vo.web.PileConnectorInfoVO;
import com.jsowell.pile.vo.web.PileDetailVO;
import com.jsowell.pile.vo.web.PileModelInfoVO;
@@ -145,8 +144,7 @@ public class PileConnectorInfoServiceImpl implements PileConnectorInfoService {
}
if (StringUtils.isNotBlank(pileConnectorCode)) {
// 删除充电桩枪口状态缓存
keys.add(CacheConstants.PILE_CONNECTOR_STATUS_KEY + pileConnectorCode);
keys.add(CacheConstants.PILE_CONNECTOR_STATUS_KEY + pileConnectorCode); // 删除充电桩枪口状态缓存
}
// 批量删除
@@ -584,7 +582,7 @@ public class PileConnectorInfoServiceImpl implements PileConnectorInfoService {
if (StringUtils.isBlank(pileConnectorCode) || StringUtils.isBlank(status)) {
return num;
}
String redisKey = CacheConstants.PILE_CONNECTOR_STATUS_KEY + pileConnectorCode;
String redisKey = CacheConstants.PILE_CONNECTOR_STATUS_KEY + pileConnectorCode; // 获取缓存
String redisStatus = redisCache.getCacheObject(redisKey);
// log.info("更新枪口状态-枪口编号:{}, redisKey:{}, 缓存状态:{}, 传来的状态:{}, 状态描述:{}", pileConnectorCode, redisKey,
// redisStatus, status, PileConnectorDataBaseStatusEnum.getStatusDescription(status));
@@ -706,10 +704,10 @@ public class PileConnectorInfoServiceImpl implements PileConnectorInfoService {
if (CollectionUtils.isNotEmpty(connectorList)) {
// 批量查询redis中的枪口状态
List<String> redisKeyList = connectorList.stream()
.map(x -> CacheConstants.PILE_CONNECTOR_STATUS_KEY + x.getPileConnectorCode())
.collect(Collectors.toList());
List<String> statusList = redisCache.multiGet(redisKeyList);
// List<String> redisKeyList = connectorList.stream()
// .map(x -> CacheConstants.PILE_CONNECTOR_STATUS_KEY + x.getPileConnectorCode())
// .collect(Collectors.toList());
// List<String> statusList = redisCache.multiGet(redisKeyList);
for (ConnectorInfoVO connectorVO : connectorList) {
String redisKey = CacheConstants.PILE_CONNECTOR_STATUS_KEY + connectorVO.getPileConnectorCode();

View File

@@ -1,6 +1,9 @@
package com.jsowell.pile.service.impl;
import com.jsowell.common.constant.Constants;
import com.jsowell.common.enums.thirdparty.ThirdPlatformTypeEnum;
import com.jsowell.common.util.SecurityUtils;
import com.jsowell.common.util.StringUtils;
import com.jsowell.pile.domain.ThirdPartyStationRelation;
import com.jsowell.pile.mapper.ThirdPartyStationRelationMapper;
import com.jsowell.pile.service.ThirdPartyStationRelationService;
@@ -21,6 +24,25 @@ public class ThirdPartyStationRelationServiceImpl implements ThirdPartyStationRe
@Autowired
private ThirdPartyStationRelationMapper thirdPartyStationRelationMapper;
@Override
public int insertInfo2DataBase(String thirdPartyType, String stationId) {
if (StringUtils.isBlank(thirdPartyType) || StringUtils.isBlank(stationId)) {
return 0;
}
ThirdPartyStationRelation relation = new ThirdPartyStationRelation();
relation.setStationId(Long.parseLong(stationId));
relation.setThirdPartyType(thirdPartyType);
if (StringUtils.equals(thirdPartyType, ThirdPlatformTypeEnum.HUA_WEI.getCode())) {
relation.setStartMode(Constants.ONE);
}
ThirdPartyStationRelationVO vo = this.selectRelationInfo(relation);
if (vo != null) {
return 0;
}
// 新增数据库
return this.insertThirdPartyStationRelation(relation);
}
/**
* 查询站点、第三方推送平台配置对应
*

View File

@@ -0,0 +1,72 @@
package com.jsowell.pile.thirdparty;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
/**
* 充电设备接口信息
*/
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
public class ConnectorInfo {
/**
* 充电设备接口编码 Y
* 充电设备接口编码,同一对接平台内唯一
*/
@JSONField(name = "ConnectorID")
private String connectorID;
/**
* 充电设备接口名称 N
*/
// private String ConnectorName;
/**
* 充电设备接口类型 Y
* 1家用插座模式2
* 2交流接口插座模式3连接方式B
* 3交流接口插头带枪线模式3连接方式C
* 4直流接口枪头带枪线模式4
*/
@JSONField(name = "ConnectorType")
private Integer connectorType;
/**
* 额定电压上限(单位V) Y
*/
@JSONField(name = "VoltageUpperLimits")
private Integer voltageUpperLimits;
/**
* 额定电压下限(单位V) Y
*/
@JSONField(name = "VoltageLowerLimits")
private Integer voltageLowerLimits;
/**
* 额定电流(单位A) Y
*/
@JSONField(name = "Current")
private Integer current;
/**
* 额定功率(单位kW) Y
*/
@JSONField(name = "Power")
private BigDecimal power;
/**
* 车位号 N
* 停车场车位编号
*/
@JSONField(name = "ParkNo")
private String parkNo;
}

View File

@@ -0,0 +1,112 @@
package com.jsowell.pile.thirdparty;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.List;
/**
* 充电设备信息
*/
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
public class EquipmentInfo {
/**
* 设备编码 Y
* 设备唯一编码,对同一对接平台,保证唯一
*/
@JSONField(name = "EquipmentID")
private String equipmentID;
/**
* 设备生产商组织机构代码 Y
*/
@JSONField(name = "ManufacturerID")
private String manufacturerID;
/**
* 设备型号 N
* 由设备生厂商定义的设备型号
*/
// private String EquipmentModel;
/**
* 设备名称 N
*/
// private String EquipmentName;
/**
* 设备生产日期 N
* YYYY-MM-DD
*/
// private String ProductionDate;
/**
* 建设时间 Y
* YYYY-MM-DD
*/
@JSONField(name = "ConstructionTime")
private String constructionTime;
/**
* 设备类型(1-直流设备2-交流设备3-交直流一体设备) Y
*/
@JSONField(name = "EquipmentType")
private Integer equipmentType;
/**
* 设备状态 Y
* 0未知
* 1建设中
* 5关闭下线
* 6维护中
* 50正常使用
*/
@JSONField(name = "EquipmentStatus")
private Integer equipmentStatus;
/**
* 额定功率(单位kW) Y
*/
@JSONField(name = "EquipmentPower")
private BigDecimal equipmentPower;
/**
* 新国标(0-否1-是) Y
* 是否新国标
*/
@JSONField(name = "NewNationalStandard")
private Integer newNationalStandard;
/**
* 充电设备接口列表 Y
* 该充电设备所有的充电设备接口的信息对象集合
*/
@JSONField(name = "ConnectorInfos")
private List<ConnectorInfo> connectorInfos;
/**
* 充电设备经度 N
* GCJ-02坐标系
*/
// private BigDecimal EquipmentLng;
/**
* 充电设备纬度 N
* GCJ-02坐标系
*/
// private BigDecimal EquipmentLat;
/**
* 是否支持VIN码识别(0-否1-是) Y
*/
@JSONField(name = "VinFlag")
private Integer vinFlag;
}