update 运营端小程序查询枪口列表页

This commit is contained in:
Lemon
2026-01-05 16:38:22 +08:00
parent c2e5e900b0
commit 96725e53e5
9 changed files with 281 additions and 39 deletions

View File

@@ -450,4 +450,11 @@ public interface OrderBasicInfoMapper {
* @return
*/
List<IndexPlatformProfitVO> getInsuranceAmount(@Param("dto") IndexQueryDTO dto);
/**
* 批量查询充电枪信息
* @param chargingConnectorCodeList
* @return
*/
List<BusinessOrderDetailInfoVO> batchQueryChargingConnectorInfo(@Param("pileConnectorCodes") List<String> chargingConnectorCodeList);
}

View File

@@ -136,6 +136,14 @@ public interface PileConnectorInfoMapper {
*/
List<ConnectorInfoVO> batchSelectConnectorList(@Param("stationIds") List<String> stationIds);
/**
* 此方法与上面方法一样只是多加了status字段
* @param stationIds
* @param status
* @return
*/
List<ConnectorInfoVO> batchSelectConnectorListByStatus(@Param("stationIds") List<String> stationIds, @Param("status") String status);
/**
* 查询异常设备数量
* @param stationId

View File

@@ -652,4 +652,18 @@ public interface OrderBasicInfoService{
* @return
*/
List<IndexPlatformProfitVO> getInsuranceAmount(IndexQueryDTO dto);
/**
* 批量查询充电枪信息
* @param chargingConnectorCodeList
* @return
*/
List<BusinessOrderDetailInfoVO> batchQueryChargingConnectorInfo(List<String> chargingConnectorCodeList);
/**
* 批量查询充电枪实时数据
* @param transactionCodeList
* @return
*/
List<RealTimeMonitorData> getRealTimeMonitorDataList(List<String> transactionCodeList);
}

View File

@@ -6245,5 +6245,64 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
public List<IndexPlatformProfitVO> getInsuranceAmount(IndexQueryDTO dto) {
return orderBasicInfoMapper.getInsuranceAmount(dto);
}
/**
* 批量查询充电枪口信息
* @param chargingConnectorCodeList
* @return
*/
@Override
public List<BusinessOrderDetailInfoVO> batchQueryChargingConnectorInfo(List<String> chargingConnectorCodeList) {
// 这个infoVOs只有简单数据没有充电中数据
List<BusinessOrderDetailInfoVO> infoVOS = orderBasicInfoMapper.batchQueryChargingConnectorInfo(chargingConnectorCodeList);
List<String> transactionCodes = infoVOS.stream()
.map(BusinessOrderDetailInfoVO::getTransactionCode)
.collect(Collectors.toList());
List<RealTimeMonitorData> list = getRealTimeMonitorDataList(transactionCodes);
Map<String, RealTimeMonitorData> bMap = list.stream()
.collect(Collectors.toMap(
RealTimeMonitorData::getPileConnectorCode,
x -> x,
(existing, replacement) -> existing // 如果有重复key保留第一个
));
for (BusinessOrderDetailInfoVO infoVO : infoVOS) {
String pileConnectorCode = infoVO.getPileConnectorCode();
if (pileConnectorCode != null && bMap.containsKey(pileConnectorCode)) {
RealTimeMonitorData realTimeMonitorData = bMap.get(pileConnectorCode);
infoVO.setChargeDegree(realTimeMonitorData.getChargingDegree());
infoVO.setChargeTime(realTimeMonitorData.getSumChargingTime());
infoVO.setEndSOC(realTimeMonitorData.getSOC());
infoVO.setTimeRemaining(realTimeMonitorData.getTimeRemaining());
}
}
return infoVOS;
}
/**
* 批量查询实时监控数据
* @param transactionCodeList
* @return
*/
@Override
public List<RealTimeMonitorData> getRealTimeMonitorDataList(List<String> transactionCodeList) {
List<RealTimeMonitorData> resultList = new ArrayList<>();
List<String> redisKeys = new ArrayList<>();
for (String transactionCode : transactionCodeList) {
// 截取枪口编号
String pileConnectorCode = transactionCode.substring(0, 16);
redisKeys.add(CacheConstants.PILE_REAL_TIME_MONITOR_DATA + pileConnectorCode + "_" + transactionCode);
}
// 批量查询多个key值的数据 key: redisKey, value: 最后一条实时数据
Map<String, RealTimeMonitorData> map = redisCache.multiGetLastListValue(redisKeys);
// 循环该map
for (Map.Entry<String, RealTimeMonitorData> entry : map.entrySet()) {
resultList.add(entry.getValue());
}
return resultList;
}
}

View File

@@ -20,6 +20,7 @@ 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.DateUtils;
import com.jsowell.common.util.PageUtils;
import com.jsowell.common.util.SecurityUtils;
import com.jsowell.common.util.StringUtils;
import com.jsowell.common.util.spring.SpringUtils;
@@ -34,9 +35,12 @@ import com.jsowell.pile.dto.business.QueryConnectorInfoDTO;
import com.jsowell.pile.mapper.PileBasicInfoMapper;
import com.jsowell.pile.mapper.PileConnectorInfoMapper;
import com.jsowell.pile.service.*;
import com.jsowell.pile.util.UserUtils;
import com.jsowell.pile.vo.base.ConnectorInfoVO;
import com.jsowell.pile.vo.base.LoginUserDetailVO;
import com.jsowell.pile.vo.uniapp.business.BusinessConnectorDetailVO;
import com.jsowell.pile.vo.uniapp.business.BusinessConnectorInfoVO;
import com.jsowell.pile.vo.uniapp.business.BusinessOrderDetailInfoVO;
import com.jsowell.pile.vo.web.PileConnectorInfoVO;
import com.jsowell.pile.vo.web.PileDetailVO;
import com.jsowell.pile.vo.web.PileModelInfoVO;
@@ -1053,57 +1057,120 @@ public class PileConnectorInfoServiceImpl implements PileConnectorInfoService {
/**
* 查询站点枪口列表
*
* @param dto
* @return
*/
@Override
public BusinessConnectorInfoVO getConnectorListByStationAndStatus(QueryConnectorInfoDTO dto) {
List<PileConnectorInfoVO> list = new ArrayList<>();
PileConnectorInfoVO info = null;
int pageNum = dto.getPageNum() == 0 ? 1 : dto.getPageNum();
int pageSize = dto.getPageSize() == 0 ? 10 : dto.getPageSize();
// 获取登录账号信息
Long deptId = SecurityUtils.getDeptId();
List<String> stationIds = pileMerchantInfoService.queryByMerchantDeptIds(Lists.newArrayList(String.valueOf(deptId)));
LoginUserDetailVO loginUserDetail = UserUtils.getLoginUserDetail();
List<String> merchantIdList = loginUserDetail.getFirstMerchantIdList();
List<PileStationInfo> stationInfos = pileStationInfoService.getStationInfosByMerchantIds(merchantIdList);
// 获取站点ids
List<Long> longStationIds = stationInfos.stream()
.map(PileStationInfo::getId)
.collect(Collectors.toList());
List<String> stationIds = longStationIds.stream()
.map(String::valueOf) // 或 s -> Long.parseLong(s)
.collect(Collectors.toList());
String connectorStatus = dto.getConnectorStatus();
int pageNum = dto.getPageNum();
int pageSize = dto.getPageSize();
BusinessConnectorInfoVO vo = new BusinessConnectorInfoVO();
// 根据站点ids查询枪口列表(有缓存)
List<ConnectorInfoVO> connectorInfoVOS = batchSelectConnectorList(stationIds);
// 筛选出枪口编号
List<String> pileConnectorCodeList = connectorInfoVOS.stream()
.map(ConnectorInfoVO::getPileConnectorCode)
.collect(Collectors.toList());
// 批量获取某状态的枪口数量
Map<String, Integer> connectorStatusNumMap = getConnectorStatus(pileConnectorCodeList);
Integer offlineNum = connectorStatusNumMap.get("offlineNum");
Integer freeNum = connectorStatusNumMap.get("freeNum");
Integer occupiedNum = connectorStatusNumMap.get("occupiedNum");
Integer chargingNum = connectorStatusNumMap.get("chargingNum");
Integer faultNum = connectorStatusNumMap.get("faultNum");
// 根据站点ids、枪口状态查询枪口列表(有缓存)
PageUtils.startPage(pageNum, pageSize);
// List<ConnectorInfoVO> connectorInfoVOS = batchSelectConnectorList(stationIds);
List<ConnectorInfoVO> connectorInfoVOS = pileConnectorInfoMapper.batchSelectConnectorListByStatus(stationIds, connectorStatus);
vo.setConnectorNum(pileConnectorCodeList.size());
vo.setOfflineConnectorNum(offlineNum);
vo.setFreeConnectorNum(freeNum);
vo.setOccupiedConnectorNum(occupiedNum);
vo.setChargingConnectorNum(chargingNum);
vo.setFaultConnectorNum(faultNum);
// 初始化对象
List<String> chargingConnectorCodeList = new ArrayList<>(); // 充电中枪口 pileConnectorCodeList
int offlineNum = 0;
int freeNum = 0;
int occupiedNum = 0;
int chargingNum = 0;
int faultNum = 0;
List<Long> longStationIds = stationIds.stream()
.map(Long::parseLong) // 或 s -> Long.parseLong(s)
.collect(Collectors.toList());
for (ConnectorInfoVO connectorInfoVO : connectorInfoVOS) {
String pileConnectorCode = connectorInfoVO.getPileConnectorCode();
String status = connectorInfoVO.getConnectorStatus();
info = new PileConnectorInfoVO();
if (StringUtils.equals(status, PileConnectorDataBaseStatusEnum.OFF_NETWORK.getValue())) {
// 离网
offlineNum += 1;
info.setPileConnectorCode(pileConnectorCode);
info.setStatus(Integer.parseInt(PileConnectorDataBaseStatusEnum.OFF_NETWORK.getValue()));
list.add(info);
}
if (StringUtils.equals(status, PileConnectorDataBaseStatusEnum.FREE.getValue())) {
// 空闲
freeNum += 1;
info.setPileConnectorCode(pileConnectorCode);
info.setStatus(Integer.parseInt(PileConnectorDataBaseStatusEnum.FREE.getValue()));
list.add(info);
}
if (StringUtils.equals(status, PileConnectorDataBaseStatusEnum.OCCUPIED_NOT_CHARGED.getValue())) {
// 占用未充电
occupiedNum += 1;
info.setPileConnectorCode(pileConnectorCode);
info.setStatus(Integer.parseInt(PileConnectorDataBaseStatusEnum.OCCUPIED_NOT_CHARGED.getValue()));
list.add(info);
}
if (StringUtils.equals(status, PileConnectorDataBaseStatusEnum.OCCUPIED_CHARGING.getValue())) {
// 充电中
chargingNum += 1;
chargingConnectorCodeList.add(pileConnectorCode);
}
if (StringUtils.equals(status, PileConnectorDataBaseStatusEnum.FAULT.getValue())) {
// 故障
faultNum += 1;
info.setPileConnectorCode(pileConnectorCode);
info.setStatus(Integer.parseInt(PileConnectorDataBaseStatusEnum.FAULT.getValue()));
list.add(info);
}
vo.setConnectorNum(connectorInfoVOS.size());
vo.setOfflineConnectorNum(offlineNum);
vo.setFreeConnectorNum(freeNum);
vo.setOccupiedConnectorNum(occupiedNum);
vo.setChargingConnectorNum(chargingNum);
vo.setFaultConnectorNum(faultNum);
// 根据站点id和枪口状态查询枪口列表
QueryConnectorListDTO queryConnectorListDTO = QueryConnectorListDTO.builder()
.pageNum(pageNum)
.pageSize(pageSize)
.stationIdList(longStationIds)
.build();
List<PileConnectorInfoVO> pileConnectorInfoVOList = getConnectorInfoListByParams(queryConnectorListDTO);
if (connectorStatus != null) {
// 筛选出符合状态的数据
pileConnectorInfoVOList = pileConnectorInfoVOList.stream()
.filter(x -> x.getStatus() == Integer.parseInt(connectorStatus))
.collect(Collectors.toList());
}
vo.setPileConnectorInfoVOList(pileConnectorInfoVOList);
// 如果充电中的枪列表不为空
if (CollectionUtils.isNotEmpty(chargingConnectorCodeList)) {
// 根据充电中的枪口List批量获取充电中的枪口信息
List<BusinessOrderDetailInfoVO> infoVOS = orderBasicInfoService.batchQueryChargingConnectorInfo(chargingConnectorCodeList);
Map<String, BusinessOrderDetailInfoVO> bMap = infoVOS.stream()
.collect(Collectors.toMap(
BusinessOrderDetailInfoVO::getPileConnectorCode,
x -> x,
(existing, replacement) -> existing // 如果有重复key保留第一个
));
for (PileConnectorInfoVO pileConnectorInfoVO : list) {
String pileConnectorCode = pileConnectorInfoVO.getPileConnectorCode();
if (pileConnectorCode != null && bMap.containsKey(pileConnectorCode)) {
BusinessOrderDetailInfoVO businessOrderDetailInfoVO = bMap.get(pileConnectorCode);
pileConnectorInfoVO.setStatus(Integer.parseInt(PileConnectorDataBaseStatusEnum.OCCUPIED_CHARGING.getValue()));
pileConnectorInfoVO.setChargingDegree(new BigDecimal(businessOrderDetailInfoVO.getChargeDegree()));
pileConnectorInfoVO.setChargingTime(businessOrderDetailInfoVO.getChargeTime());
pileConnectorInfoVO.setSOC(businessOrderDetailInfoVO.getEndSOC());
pileConnectorInfoVO.setTimeRemaining(businessOrderDetailInfoVO.getTimeRemaining());
}
}
}
vo.setPileConnectorInfoVOList(list);
return vo;
}

View File

@@ -25,6 +25,11 @@ public class BusinessOrderDetailInfoVO {
private String pileConnectorCode;
/**
* 交易流水号
*/
private String transactionCode;
/**
* 充电次数
*/
@@ -185,4 +190,9 @@ public class BusinessOrderDetailInfoVO {
*/
private String memberId;
/**
* 剩余时间
*/
private String timeRemaining;
}