@@ -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.MerchantInfo VO ;
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.SupStationStats VO ;
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 ;
}
}