package com.zteits.park.biz; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.apache.commons.collections4.CollectionUtils; import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageInfo; import com.xiaoleilu.hutool.date.DateField; import com.xiaoleilu.hutool.date.DateTime; import com.xiaoleilu.hutool.date.DateUtil; import com.zteits.clouds.api.apibase.bean.BizResult; import com.zteits.clouds.api.apibase.bean.PageBean; import com.zteits.clouds.api.apibase.constants.ErrorType; import com.zteits.clouds.api.apibase.exception.BizException; import com.zteits.clouds.api.dto.clouds.dto.TurnoverRatioDTO; import com.zteits.clouds.api.dto.park.dto.ParkingRunningStatisticDTO; import com.zteits.clouds.api.dto.park.dto.TodayVehicleFlowOccupyRateAndTurnOverDTO; import com.zteits.clouds.api.dto.park.param.CommonPlnosQueryRequest; import com.zteits.clouds.api.dto.park.param.ParkingLotUseStatisticForPageRequest; import com.zteits.clouds.api.dto.park.param.ParkingRunningStatisticForPageRequest; import com.zteits.clouds.api.service.park.ParkingRunningStatisticService; import com.zteits.park.constant.ParkConstant.ParkingRunningStatistic.TimeCycle; import com.zteits.park.dao.ParkingRunningStatisticDao; import com.zteits.park.domain.ParkingRunningStatistic; import com.zteits.park.pagepager.PageBeanUtil; @Service("com.zteits.park.biz.ParkingRunningStatisticServiceImpl") public class ParkingRunningStatisticServiceImpl implements ParkingRunningStatisticService { private static final Logger logger=LoggerFactory.getLogger(ParkingRunningStatisticServiceImpl.class); @Autowired private ParkingRunningStatisticDao parkingRunningStatisticDao; @Override public BizResult> queryCarFlowChartByDayOrMonth( ParkingRunningStatisticForPageRequest request) { logger.info("开始调用按日/月查询车流量图表数据接口request={}",JSONObject.toJSONString(request)); List list = parkingRunningStatisticDao.queryCarFlowChartByDayOrMonth(request); logger.info("调用按日/月查询车流量图表数据接口返回result={}",JSONObject.toJSONString(list)); return new BizResult>(list); } @Override public BizResult> queryCarFlowByTimeTypeForList( ParkingRunningStatisticForPageRequest request) { logger.info("开始调用按天查询车流量列表详情接口request={}",JSONObject.toJSONString(request)); if (request.getBaseRequest() == null) { throw new BizException(ErrorType.PARAMM_NULL, "分页参数为空"); } if(request.getBeginTime() == null){ throw new BizException(ErrorType.PARAMM_NULL, "开始时间为空"); } if(request.getEndTime() == null){ throw new BizException(ErrorType.PARAMM_NULL, "结束时间为空"); } if(CollectionUtils.isEmpty(request.getPlNos())){ throw new BizException(ErrorType.PARAMM_NULL, "停车场编号为空"); } PageBean pageBean = new PageBean<>(); PageInfo pageInfo = parkingRunningStatisticDao.queryCarFlowByTimeTypeForList(request); if(null != pageInfo){ PageBeanUtil.copyProperties(pageInfo, pageBean, ParkingRunningStatisticDTO.class); } logger.info("调用按天查询车流量列表详情接口返回result={}",JSONObject.toJSONString(pageBean)); return new BizResult<>(pageBean); } @Override public BizResult> queryTurnoverRatioForTable(ParkingRunningStatisticForPageRequest request) { logger.info("开始调用查询周转率列表详情接口request={}",JSONObject.toJSONString(request)); if(request.getBeginTime() == null){ throw new BizException(ErrorType.PARAMM_NULL, "开始时间为空"); } if(request.getEndTime() == null){ throw new BizException(ErrorType.PARAMM_NULL, "结束时间为空"); } if(CollectionUtils.isEmpty(request.getPlNos())){ throw new BizException(ErrorType.PARAMM_NULL, "停车场编号为空"); } PageBean pageBean = new PageBean<>(); PageInfo pageInfo = parkingRunningStatisticDao.queryTurnoverRatioForTable(request); if(null != pageInfo){ PageBeanUtil.copyProperties(pageInfo, pageBean, TurnoverRatioDTO.class); } logger.info("调用查询周转率列表详情返回result={}",JSONObject.toJSONString(pageBean)); return new BizResult<>(pageBean); } @Override public BizResult> queryTurnoverRatioChart(ParkingRunningStatisticForPageRequest request) { logger.info("开始调用查询周转率图表接口request={}",JSONObject.toJSONString(request)); if(request.getBeginTime() == null){ throw new BizException(ErrorType.PARAMM_NULL, "开始时间为空"); } if(request.getEndTime() == null){ throw new BizException(ErrorType.PARAMM_NULL, "结束时间为空"); } if(CollectionUtils.isEmpty(request.getPlNos())){ throw new BizException(ErrorType.PARAMM_NULL, "停车场编号为空"); } PageBean pageBean = new PageBean<>(); PageInfo pageInfo = parkingRunningStatisticDao.queryTurnoverRatioChart(request); if(null != pageInfo){ PageBeanUtil.copyProperties(pageInfo, pageBean, TurnoverRatioDTO.class); } logger.info("调用查询周转率图表返回result={}",JSONObject.toJSONString(pageBean)); return new BizResult<>(pageBean); } @Override public BizResult> queryTodayVehicleFlowOccupyRateAndTurnOver( CommonPlnosQueryRequest request) { if(CollectionUtils.isEmpty(request.getPlNos())){ throw new BizException(ErrorType.PARAMM_NULL, "停车场编号为空"); } DateTime beginTime = null; DateTime endTime = null; //查询类型 1-当前时间往前推24小时;2-0点到当前时间 默认为0点到当前时间 if(StringUtils.isBlank(request.getQueryType()) || "2".equals(request.getQueryType())){ beginTime = new DateTime().setField(DateField.HOUR_OF_DAY, 0).setField(DateField.MINUTE, 0) .setField(DateField.SECOND, 0); endTime = new DateTime().setField(DateField.HOUR_OF_DAY, 23).setField(DateField.MINUTE, 59) .setField(DateField.SECOND, 59); } //当前时间往前推24小时 else{ endTime = new DateTime().setField(DateField.MINUTE, 0).setField(DateField.SECOND, 0); beginTime = new DateTime(endTime.getTime()-24*60*60*1000); } List result = parkingRunningStatisticDao .queryTodayVehicleFlowOccupyRateAndTurnOver(beginTime, endTime, TimeCycle.PER1HOUR, request.getPlNos()); result = fixTodayVehicleFlowOccupyRateAndTurnOverData(result); return new BizResult<>(result); } private List fixTodayVehicleFlowOccupyRateAndTurnOverData( List datas) { List realDatas = new ArrayList<>(); Map dataMap = initTodayVehicleFlowOccupyRateAndTurnOverDTOToMap( datas); for (int i = 0; i <= 23; i++) { TodayVehicleFlowOccupyRateAndTurnOverDTO realDTO = null; if (dataMap.containsKey(i)) { realDTO = dataMap.get(i); } else { realDTO = new TodayVehicleFlowOccupyRateAndTurnOverDTO(); realDTO.setHour(i); realDTO.setAvgOccupyRate(0.0); realDTO.setAvgTurnoverRate(0.0); realDTO.setInCount(0); realDTO.setOutCount(0); } realDatas.add(realDTO); } return realDatas; } private Map initTodayVehicleFlowOccupyRateAndTurnOverDTOToMap( List datas) { Map map = new HashMap<>(); for (TodayVehicleFlowOccupyRateAndTurnOverDTO dto : datas) { map.put(dto.getHour(), dto); } return map; } @Override public BizResult> queryCurrentOccupyRateAndTurnOver( CommonPlnosQueryRequest request) { if(CollectionUtils.isEmpty(request.getPlNos())){ throw new BizException(ErrorType.PARAMM_NULL, "停车场编号为空"); } //设置天开始、结束时间 Date beginTime =DateUtil.offsetMinute(new Date(),-10); Date endTime =new Date(); List result = parkingRunningStatisticDao .queryCurrentOccupyRateAndTurnOver(beginTime, endTime, TimeCycle.PER10MINUTE, request.getPlNos()); if(CollectionUtils.isEmpty(result)){//再往前推10分钟 beginTime =DateUtil.offsetMinute(new Date(),-20); endTime =DateUtil.offsetMinute(new Date(),-10); result = parkingRunningStatisticDao.queryCurrentOccupyRateAndTurnOver( beginTime, endTime, TimeCycle.PER10MINUTE,request.getPlNos()); } return new BizResult<>(result); } @Override public BizResult> queryParkingLotUseStatisticForPage( ParkingLotUseStatisticForPageRequest request) { if (request.getBaseRequest() == null) { throw new BizException(ErrorType.PARAMM_NULL, "分页参数为空"); } PageInfo pageInfo = parkingRunningStatisticDao.queryParkingLotUseStatisticForPage( request.getBeginTime(), request.getEndTime(), request.getQueryKind(), request.getPlNos(), request.getBaseRequest().getPageNum(), request.getBaseRequest().getPageSize()); PageBean pageBean = new PageBean(); if (pageInfo != null) { PageBeanUtil.copyProperties(pageInfo, pageBean, ParkingRunningStatisticDTO.class); } return new BizResult>(pageBean); } }