优化批量获取桩状态

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

@@ -267,6 +267,24 @@ public class SpringBootTestController {
@Autowired @Autowired
private CarCouponRecordService carCouponRecordService; private CarCouponRecordService carCouponRecordService;
@Test
public void selectPileConnectorInfoListByPileSnListTest() {
List<String> pileSnList = Lists.newArrayList();
pileSnList.add("");
pileSnList.add("");
pileSnList.add("");
pileSnList.add("");
pileSnList.add("");
pileSnList.add("");
pileSnList.add("");
pileSnList.add("");
pileSnList.add("");
pileSnList.add("");
// pileConnectorInfoService.getPileStatus(pileSnList);
pileConnectorInfoService.getPileStatusV2(pileSnList);
}
@Test @Test
public void getEBikePileSnTest() { public void getEBikePileSnTest() {
List<String> strings = pileSnGenerateService.generateEBikeSN(8); List<String> strings = pileSnGenerateService.generateEBikeSN(8);

View File

@@ -38,6 +38,8 @@ public interface PileConnectorInfoService {
List<PileConnectorInfo> selectPileConnectorInfoList(String pileSn); List<PileConnectorInfo> selectPileConnectorInfoList(String pileSn);
Map<String, List<PileConnectorInfo>> selectPileConnectorInfoListByPileSnList(List<String> pileSnList);
int deletePileConnectorInfoByPileSnList(List<String> pileSnList); int deletePileConnectorInfoByPileSnList(List<String> pileSnList);
int batchInsertConnectorInfo(List<PileConnectorInfo> pileConnectorInfoList); int batchInsertConnectorInfo(List<PileConnectorInfo> pileConnectorInfoList);
@@ -85,6 +87,8 @@ public interface PileConnectorInfoService {
*/ */
Map<String, String> getPileStatus(List<String> pileSnList); 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; 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缓存 * 公共方法 根据桩编号或者枪口号删除redis缓存
*/ */
@@ -586,6 +609,7 @@ public class PileConnectorInfoServiceImpl implements PileConnectorInfoService {
* @param pileSn 充电桩编号 * @param pileSn 充电桩编号
* @param status 充电桩枪口状态 * @param status 充电桩枪口状态
*/ */
@Override
public int updateConnectorStatusByPileSn(String pileSn, String status) { public int updateConnectorStatusByPileSn(String pileSn, String status) {
if (StringUtils.isBlank(pileSn) || StringUtils.isBlank(status)) { if (StringUtils.isBlank(pileSn) || StringUtils.isBlank(status)) {
return 0; return 0;
@@ -699,8 +723,44 @@ public class PileConnectorInfoServiceImpl implements PileConnectorInfoService {
* @param pileSnList 桩编号列表 * @param pileSnList 桩编号列表
* @return key:桩编号; value:状态 * @return key:桩编号; value:状态
*/ */
@Override
public Map<String, String> getPileStatusV2(List<String> pileSnList) { 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 @Override