新增 运营端小程序查询站点信息接口

This commit is contained in:
Lemon
2024-07-24 13:27:39 +08:00
parent 3b600494b5
commit 425de20eea
11 changed files with 332 additions and 937 deletions

View File

@@ -0,0 +1,24 @@
package com.jsowell.pile.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* TODO
*
* @author Lemon
* @Date 2024/7/23 15:52:34
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class StationStatisticsInfoDTO {
private String merchantId;
private String startTime;
private String endTime;
}

View File

@@ -118,4 +118,6 @@ public interface PileStationInfoMapper {
List<NXJTStationInfoVO> NXJTQueryStationsInfo(@Param("dto") NXJTQueryStationInfoDTO dto);
PileStationInfo queryInfoByDeptId(@Param("deptId") String deptId);
List<PileStationInfo> getStationInfosByMerchantIds(@Param("list") List<String> merchantIds);
}

View File

@@ -5,6 +5,7 @@ import com.jsowell.pile.domain.PileStationInfo;
import com.jsowell.pile.dto.FastCreateStationDTO;
import com.jsowell.pile.dto.QueryStationDTO;
import com.jsowell.pile.dto.QueryStationInfoDTO;
import com.jsowell.pile.dto.StationStatisticsInfoDTO;
import com.jsowell.pile.dto.amap.GetStationInfoDTO;
import com.jsowell.pile.dto.lutongyunting.BindParkingPlatformDTO;
import com.jsowell.pile.dto.ningxiajiaotou.NXJTQueryStationInfoDTO;
@@ -152,9 +153,11 @@ public interface PileStationInfoService {
//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 后管小程序 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓
public List<PileStationInfo> getStationInfosByMerchantIds(List<String> merchantIds);
/**
* 获取站点统计信息
* @param merchantId
* @param dto
*/
List<StationStatisticsInfosVO> getStationStatisticsInfos(String merchantId);
List<StationStatisticsInfosVO> getStationStatisticsInfos(StationStatisticsInfoDTO dto);
}

View File

@@ -10,29 +10,29 @@ import com.jsowell.common.core.domain.entity.SysUser;
import com.jsowell.common.core.domain.vo.AuthorizedDeptVO;
import com.jsowell.common.core.page.PageResponse;
import com.jsowell.common.core.redis.RedisCache;
import com.jsowell.common.enums.thirdparty.BusinessInformationExchangeEnum;
import com.jsowell.common.enums.ykc.PileConnectorDataBaseStatusEnum;
import com.jsowell.common.enums.ykc.ReturnCodeEnum;
import com.jsowell.common.exception.BusinessException;
import com.jsowell.common.util.*;
import com.jsowell.common.util.ip.AddressUtils;
import com.jsowell.pile.domain.PileBasicInfo;
import com.jsowell.pile.domain.PileStationInfo;
import com.jsowell.pile.domain.SettleOrderReport;
import com.jsowell.pile.domain.ThirdpartyParkingConfig;
import com.jsowell.pile.dto.FastCreateStationDTO;
import com.jsowell.pile.dto.QueryStationDTO;
import com.jsowell.pile.dto.QueryStationInfoDTO;
import com.jsowell.pile.dto.*;
import com.jsowell.pile.dto.amap.GetStationInfoDTO;
import com.jsowell.pile.dto.lutongyunting.BindParkingPlatformDTO;
import com.jsowell.pile.dto.ningxiajiaotou.NXJTQueryStationInfoDTO;
import com.jsowell.pile.mapper.PileStationInfoMapper;
import com.jsowell.pile.service.*;
import com.jsowell.pile.util.UserUtils;
import com.jsowell.pile.vo.base.MerchantInfoVO;
import com.jsowell.pile.vo.base.PileInfoVO;
import com.jsowell.pile.vo.base.StationInfoVO;
import com.jsowell.pile.vo.base.ThirdPartyStationInfoVO;
import com.jsowell.pile.vo.SupStationStatsVO;
import com.jsowell.pile.vo.base.*;
import com.jsowell.pile.vo.ningxiajiaotou.NXJTStationInfoVO;
import com.jsowell.pile.vo.uniapp.business.StationStatisticsInfosVO;
import com.jsowell.pile.vo.uniapp.customer.CurrentTimePriceDetails;
import com.jsowell.pile.vo.web.MerchantOrderReportVO;
import com.jsowell.pile.vo.web.PileStationVO;
import com.jsowell.system.service.SysDeptService;
import com.jsowell.system.service.SysUserService;
@@ -44,9 +44,13 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
@@ -88,6 +92,9 @@ public class PileStationInfoServiceImpl implements PileStationInfoService {
@Autowired
private OrderBasicInfoService orderBasicInfoService;
@Autowired
private SettleOrderReportService settleOrderReportService;
/**
* 查询充电站信息
@@ -623,16 +630,115 @@ public class PileStationInfoServiceImpl implements PileStationInfoService {
return pileStationInfoMapper.queryInfoByDeptId(deptId);
}
@Override
public List<PileStationInfo> getStationInfosByMerchantIds(List<String> merchantIds){
return pileStationInfoMapper.getStationInfosByMerchantIds(merchantIds);
}
/**
* 获取站点统计信息
* @param merchantId
* @param dto
*/
@Override
public List<StationStatisticsInfosVO> getStationStatisticsInfos(String merchantId) {
// 根据运营商id查出所有站点id
public List<StationStatisticsInfosVO> getStationStatisticsInfos(StationStatisticsInfoDTO dto) {
String merchantId = dto.getMerchantId();
// 获取当前登录账号的运营商权限
List<MerchantInfoVO> merchantInfoVOList = UserUtils.getMerchantInfoVOList();
List<String> merchantIds = new ArrayList<>();
List<StationStatisticsInfosVO> resultList = new ArrayList<>();
if (StringUtils.isBlank(merchantId)) {
merchantIds = merchantInfoVOList.stream()
.map(MerchantInfoVO::getMerchantId)
.collect(Collectors.toList());
}else {
merchantIds.add(merchantId);
}
// 根据运营商ids查出所有站点id
List<PileStationInfo> pileStationInfos = getStationInfosByMerchantIds(merchantIds);
if (CollectionUtils.isEmpty(pileStationInfos)) {
// 未查到该运营商下的站点
throw new BusinessException(ReturnCodeEnum.CODE_SELECT_INFO_IS_NULL);
}
List<String> stationIds = pileStationInfos.stream()
.map(x -> String.valueOf(x.getId()))
.collect(Collectors.toList());
// 创建DecimalFormat对象并设置格式
DecimalFormat df = new DecimalFormat("0.00%");
// 根据站点ids查询站点营收报表
List<SettleOrderReport> list = settleOrderReportService.queryOrderReport(stationIds, dto.getStartTime(), dto.getEndTime());
if (CollectionUtils.isEmpty(list)) {
throw new BusinessException(ReturnCodeEnum.CODE_SELECT_INFO_IS_NULL);
}
// 根据站点id分组将充电度数、充电金额、充电次数进行累加
Map<String, SettleOrderReport> collect = list.stream()
.sorted(Comparator.comparing(SettleOrderReport::getStationId))
// .filter(vo -> vo.getChargingTime() != null && vo.getTotalPower() != null)
.collect(Collectors.toMap(SettleOrderReport::getStationId, Function.identity(),
(a, b) -> {
a.setUseElectricity(a.getUseElectricity().add(b.getUseElectricity()));
a.setTotalAmount(a.getTotalAmount().add(b.getTotalAmount()));
a.setChargeNum(String.valueOf(Integer.parseInt(a.getChargeNum()) + Integer.parseInt(b.getChargeNum())));
return a;
}));
return null;
for (Map.Entry<String, SettleOrderReport> entry: collect.entrySet()) {
String stationId = entry.getKey();
SettleOrderReport report = entry.getValue();
// 查询枪口列表
List<ConnectorInfoVO> uniAppConnectorList = pileConnectorInfoService.getUniAppConnectorList(Long.parseLong(stationId));
int chargingConnectorNum = Constants.zero; // 充电中
int freeConnectorNum = Constants.zero; // 空闲
int occupiedConnectorNum = Constants.zero; // 占用
int hangingConnectorNum = Constants.zero; // 挂起
int offlineConnectorNum = Constants.zero; // 离线
int faultConnectorNum = Constants.zero; // 故障
for (ConnectorInfoVO connectorInfoVO : uniAppConnectorList) {
String connectorStatus = connectorInfoVO.getConnectorStatus();
if (StringUtils.equals(PileConnectorDataBaseStatusEnum.FREE.getValue(), connectorStatus)) {
// 空闲
freeConnectorNum += 1;
}else if (StringUtils.equals(PileConnectorDataBaseStatusEnum.OCCUPIED_NOT_CHARGED.getValue(), connectorStatus)) {
// 占用(未充电)
occupiedConnectorNum += 1;
}else if (StringUtils.equals(PileConnectorDataBaseStatusEnum.OCCUPIED_CHARGING.getValue(), connectorStatus)) {
// 充电中
chargingConnectorNum += 1;
}else if (StringUtils.equals(PileConnectorDataBaseStatusEnum.OFF_NETWORK.getValue(), connectorStatus)) {
// 离线
offlineConnectorNum += 1;
}else if(StringUtils.equals(PileConnectorDataBaseStatusEnum.FAULT.getValue(), connectorStatus)) {
// 故障
faultConnectorNum += 1;
}
}
// 计算枪口可使用率
int totalConnectorNum = uniAppConnectorList.size();
double connectorAvailability = (double) freeConnectorNum / totalConnectorNum;
String format = df.format(connectorAvailability);
StationStatisticsInfosVO vo = StationStatisticsInfosVO.builder()
.stationId(stationId)
// .stationName(pileStationInfo.getStationName())
.chargeDegree(report.getUseElectricity())
.chargeAmount(report.getTotalAmount())
.orderQuantity(Integer.parseInt(report.getChargeNum()))
.connectorAvailability(format)
.chargingConnectorNum(chargingConnectorNum)
.freeConnectorNum(freeConnectorNum)
.occupiedConnectorNum(occupiedConnectorNum)
.hangingConnectorNum(hangingConnectorNum)
.offlineConnectorNum(offlineConnectorNum)
.faultConnectorNum(faultConnectorNum)
.build();
resultList.add(vo);
}
return resultList;
}
}

View File

@@ -18,6 +18,17 @@ import java.math.BigDecimal;
@AllArgsConstructor
@Builder
public class StationStatisticsInfosVO {
/**
* 站点id
*/
private String stationId;
/**
* 站点名称
*/
private String stationName;
/**
* 充电度数
*/
@@ -41,30 +52,30 @@ public class StationStatisticsInfosVO {
/**
* 充电中的设备数量
*/
private Integer chargingPileNum;
private Integer chargingConnectorNum;
/**
* 空闲中的设备数量
*/
private Integer freePileNum;
private Integer freeConnectorNum;
/**
* 占用中的设备数量
*/
private Integer occupiedPileNum;
private Integer occupiedConnectorNum;
/**
* 挂起中的设备数量
*/
private Integer hangingPileNum;
private Integer hangingConnectorNum;
/**
* 离线设备数量
*/
private Integer offlinePileNum;
private Integer offlineConnectorNum;
/**
* 故障桩数量
*/
private Integer faultPileNum;
private Integer faultConnectorNum;
}