优化批量获取桩状态

This commit is contained in:
Guoqs
2024-11-04 15:43:19 +08:00
parent 7cd98ba314
commit 5d3843bbdf
3 changed files with 83 additions and 1 deletions

View File

@@ -38,6 +38,8 @@ public interface PileConnectorInfoService {
List<PileConnectorInfo> selectPileConnectorInfoList(String pileSn);
Map<String, List<PileConnectorInfo>> selectPileConnectorInfoListByPileSnList(List<String> pileSnList);
int deletePileConnectorInfoByPileSnList(List<String> pileSnList);
int batchInsertConnectorInfo(List<PileConnectorInfo> pileConnectorInfoList);
@@ -85,6 +87,8 @@ public interface PileConnectorInfoService {
*/
Map<String, String> getPileStatus(List<String> pileSnList);
Map<String, String> getPileStatusV2(List<String> pileSnList);
/**
* 通过枪口编码查询枪口信息
*

View File

@@ -143,6 +143,29 @@ public class PileConnectorInfoServiceImpl implements PileConnectorInfoService {
return result;
}
/**
* 通过充电桩号列表查询枪口信息列表 加缓存
*
* @param pileSnList 桩编号列表
* @return 枪口信息列表
*/
@Override
public Map<String, List<PileConnectorInfo>> selectPileConnectorInfoListByPileSnList(List<String> pileSnList) {
Map<String, List<PileConnectorInfo>> resultMap = Maps.newHashMap();
if (CollectionUtils.isEmpty(pileSnList)) {
return resultMap;
}
List<String> redisKeys = pileSnList.stream()
.map(pileSn -> CacheConstants.SELECT_PILE_CONNECTOR_INFO_LIST + pileSn)
.collect(Collectors.toList());
List<PileConnectorInfo> redisResult = redisCache.multiGet(redisKeys);
// 分组
Map<String, List<PileConnectorInfo>> collect = redisResult.stream()
.filter(Objects::nonNull)
.collect(Collectors.groupingBy(PileConnectorInfo::getPileSn));
return null;
}
/**
* 公共方法 根据桩编号或者枪口号删除redis缓存
*/
@@ -586,6 +609,7 @@ public class PileConnectorInfoServiceImpl implements PileConnectorInfoService {
* @param pileSn 充电桩编号
* @param status 充电桩枪口状态
*/
@Override
public int updateConnectorStatusByPileSn(String pileSn, String status) {
if (StringUtils.isBlank(pileSn) || StringUtils.isBlank(status)) {
return 0;
@@ -699,8 +723,44 @@ public class PileConnectorInfoServiceImpl implements PileConnectorInfoService {
* @param pileSnList 桩编号列表
* @return key:桩编号; value:状态
*/
@Override
public Map<String, String> getPileStatusV2(List<String> pileSnList) {
return null;
Map<String, String> resultMap = Maps.newHashMap();
Map<String, List<PileConnectorInfo>> pileConnectorMap = selectPileConnectorInfoListByPileSnList(pileSnList);
for (String pileSn : pileSnList) {
String pileStatus = "";
// 标识桩故障或者离线
boolean flag = false;
// 判断故障状态
List<PileConnectorInfo> connectorList = pileConnectorMap.get(pileSn); // 获取枪口信息
List<String> connectorStatusList = connectorList.stream().map(PileConnectorInfo::getStatus).collect(Collectors.toList());
// 桩下面的枪口,任意一个故障,桩的状态就是故障
if (connectorStatusList.contains(PileConnectorDataBaseStatusEnum.FAULT.getValue())) {
pileStatus = PileStatusEnum.FAULT.getValue();
flag = true;
}
// 判断离线状态 显示优先级 离线>故障
// if (checkPileOffLine(pileSn)) {
// pileStatus = PileStatusEnum.OFF_LINE.getValue();
// flag = true;
// }
// 2023年1月10日11点32分 改成如果枪口离线,那么充电桩就是离线
if (connectorStatusList.contains(PileConnectorDataBaseStatusEnum.OFF_NETWORK.getValue())) {
pileStatus = PileStatusEnum.OFF_LINE.getValue();
flag = true;
// 异步将此桩正在进行充电的订单状态改为 异常
CompletableFuture.runAsync(() -> {
orderBasicInfoService.updateOrderStatusAsAbnormal(pileSn);
}, executor);
}
// 没有故障或者离线,就是在线状态
if (!flag) {
pileStatus = PileStatusEnum.ON_LINE.getValue();
}
resultMap.put(pileSn, pileStatus);
}
return resultMap;
}
@Override