package com.zteits.park.biz; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.apache.commons.collections4.CollectionUtils; import com.alibaba.fastjson.JSON; import com.clouds.common.constants.TableNameEnum; import com.github.pagehelper.PageInfo; import com.github.pagehelper.util.StringUtil; import com.zteits.clouds.api.apibase.bean.BizResult; import com.zteits.clouds.api.apibase.bean.PageBean; import com.zteits.clouds.api.apibase.constants.EqpReportEventTypeEnum; import com.zteits.clouds.api.apibase.constants.ErrorType; import com.zteits.clouds.api.apibase.exception.BizException; import com.zteits.clouds.api.dto.clouds.param.BerthTurnOverQueryRequest; import com.zteits.clouds.api.dto.clouds.param.EqpLogQueryRequest; import com.zteits.clouds.api.dto.clouds.param.RealTimeMonitoringRequest; import com.zteits.clouds.api.dto.park.dto.BerthTurnOverCountDTO; import com.zteits.clouds.api.dto.park.dto.ParkOccupancyRateDTO; import com.zteits.clouds.api.dto.park.dto.ParkingLotDTO; import com.zteits.clouds.api.dto.park.dto.TpPEqpLogDTO; import com.zteits.clouds.api.dto.park.param.QueryParkLotInfoByPkNoRequest; import com.zteits.clouds.api.service.park.EqpBerthsService; import com.zteits.clouds.api.service.park.ParkingLotQueryService; import com.zteits.park.constant.EqpConstant; import com.zteits.park.constant.ParkConstant; import com.zteits.park.dao.EqpLogDao; import com.zteits.park.domain.BerthTurnOverCountDO; import com.zteits.park.pagepager.PageBeanUtil; @Service("com.zteits.park.biz.EqpBerthsServiceImpl") public class EqpBerthsServiceImpl implements EqpBerthsService { private static final Logger logger = LoggerFactory.getLogger(EqpBerthsServiceImpl.class); @Autowired private EqpLogDao eqpLogDao; @Autowired private ParkingLotQueryService parkingLotQueryService; @Override public BizResult> queryBerthTurnOverForMap(BerthTurnOverQueryRequest request) { DecimalFormat df=new DecimalFormat("#.##"); request.setEventType(EqpReportEventTypeEnum.OUT_PARK.value());//车辆离开 request.setEqpType(EqpConstant.EQP_TYPE.GEO);//地磁 logger.info("泊位周转率统计入参:" +JSON.toJSONString(request)); List dtoList = new ArrayList<>(); List doList = new ArrayList<>(); ParkingLotDTO parklotDto = new ParkingLotDTO(); if(request.getTimeType() == ParkConstant.ParkingLotUseStatistic.StatisticType.PER1HOUR){ doList = eqpLogDao.queryBerthTurnOverByHour(request); } else if(request.getTimeType() == ParkConstant.ParkingLotUseStatistic.StatisticType.PER1DAY){ doList = eqpLogDao.queryBerthTurnOverByDay(request); } int allBerth = 0; for (String plno : request.getPlNos()) { QueryParkLotInfoByPkNoRequest qu = new QueryParkLotInfoByPkNoRequest(); BeanUtils.copyProperties(request, qu); qu.setPklNo(plno); parklotDto = parkingLotQueryService.QueryParkingLotByPkNo(qu).getData(); if(parklotDto.getPlId() == null){ logger.info("根据停车场编号["+plno+"]没有查询到停车场信息"); throw new BizException(ErrorType.RESOURCE_NOT_EXISTS); } allBerth += parklotDto.getPlBerthNum(); } for (BerthTurnOverCountDO bdo:doList) { //装入泊位数量 bdo.setBerthCount(allBerth); BerthTurnOverCountDTO dto = new BerthTurnOverCountDTO(); BeanUtils.copyProperties(bdo, dto); Double to = new BigDecimal(dto.getTurnCount()).divide(new BigDecimal(dto.getBerthCount()),4 , RoundingMode.HALF_UP).doubleValue()*100; dto.setTurnOver(Double.valueOf(df.format(to))); dtoList.add(dto); } return new BizResult<>(dtoList); } @Override public BizResult> queryBerthTurnOverDetail(BerthTurnOverQueryRequest request) { request.setEventType(EqpReportEventTypeEnum.OUT_PARK.value());//车辆离开 request.setEqpType(EqpConstant.EQP_TYPE.GEO);//地磁 logger.info("泊位周转率详细-入参:" +JSON.toJSONString(request)); PageBean dtoPage = new PageBean(); List dtoList = new ArrayList<>(); PageInfo doPage = new PageInfo(); ParkingLotDTO parklotDto = new ParkingLotDTO(); doPage = eqpLogDao.queryBerthTurnOverDetail(request); for (BerthTurnOverCountDO bdo : doPage.getList()) { BerthTurnOverCountDTO dto = new BerthTurnOverCountDTO(); QueryParkLotInfoByPkNoRequest qu = new QueryParkLotInfoByPkNoRequest(); BeanUtils.copyProperties(bdo, qu); qu.setPklNo(bdo.getPlNo()); parklotDto = parkingLotQueryService.QueryParkingLotByPkNo(qu).getData(); if(parklotDto.getPlId() == null){ logger.info("根据停车场编号["+bdo.getPlNo()+"]没有查询到停车场信息"); throw new BizException(ErrorType.RESOURCE_NOT_EXISTS); } BeanUtils.copyProperties(bdo, dto); //装入泊位数量和停车场名字 dto.setBerthCount(parklotDto.getPlBerthNum()); dto.setParkName(parklotDto.getPlName()); dto.setTurnOver(new BigDecimal(dto.getTurnCount()).divide(new BigDecimal(dto.getBerthCount()),4 , RoundingMode.HALF_UP).doubleValue()*100); dtoList.add(dto); } PageBeanUtil.copyProperties(doPage, dtoPage, BerthTurnOverCountDTO.class); dtoPage.setDataList(dtoList); return new BizResult>(dtoPage); } @Override public BizResult> queryBerthTurnOverDetailForHour(BerthTurnOverQueryRequest request) { request.setEventType(EqpReportEventTypeEnum.OUT_PARK.value());//车辆离开 request.setEqpType(EqpConstant.EQP_TYPE.GEO);//地磁 logger.info("泊位周转率详情导出入参:" +JSON.toJSONString(request)); PageBean dtoPage = new PageBean(); List dtoList = new ArrayList<>(); PageInfo doPage = new PageInfo(); ParkingLotDTO parklotDto = new ParkingLotDTO(); doPage = eqpLogDao.queryBerthTurnOverDetailForHour(request); for (BerthTurnOverCountDO bdo : doPage.getList()) { BerthTurnOverCountDTO dto = new BerthTurnOverCountDTO(); QueryParkLotInfoByPkNoRequest qu = new QueryParkLotInfoByPkNoRequest(); BeanUtils.copyProperties(bdo, qu); qu.setPklNo(bdo.getPlNo()); parklotDto = parkingLotQueryService.QueryParkingLotByPkNo(qu).getData(); if(parklotDto.getPlId() == null){ logger.info("根据停车场编号["+bdo.getPlNo()+"]没有查询到停车场信息"); throw new BizException(ErrorType.RESOURCE_NOT_EXISTS); } BeanUtils.copyProperties(bdo, dto); //装入泊位数量和停车场名字 dto.setBerthCount(parklotDto.getPlBerthNum()); dto.setParkName(parklotDto.getPlName()); dto.setTurnOver(new BigDecimal(dto.getTurnCount()).divide(new BigDecimal(dto.getBerthCount()),4 , RoundingMode.HALF_UP).doubleValue()*100); dtoList.add(dto); } PageBeanUtil.copyProperties(doPage, dtoPage, BerthTurnOverCountDTO.class); dtoPage.setDataList(dtoList); return new BizResult>(dtoPage); } @Override public BizResult> queryParkOccupancyRate(RealTimeMonitoringRequest request) { logger.info("实时监控泊位占用率入参:" +JSON.toJSONString(request)); if(null == request.getTime()){ throw new BizException(ErrorType.PARAMM_NULL); } SimpleDateFormat df=new SimpleDateFormat("yyyyMM"); String dateTime=df.format(request.getTime()); List list = eqpLogDao.queryParkOccupancyRate(TableNameEnum.TP_P_EQP_LOG.getValue()+dateTime, request.getPlNos()); if(!CollectionUtils.isEmpty(list)){ for (ParkOccupancyRateDTO dto : list) { QueryParkLotInfoByPkNoRequest parkrequest=new QueryParkLotInfoByPkNoRequest(); parkrequest.setSysCode(request.getSysCode()); parkrequest.setPklNo(dto.getPlNo()); BizResult park = parkingLotQueryService.QueryParkingLotByPkNo(parkrequest); if(null !=park.getData()){ dto.setPlName(StringUtil.isEmpty(park.getData().getPlName())? "" : park.getData().getPlName()); dto.setLatId(null==park.getData().getLatId()? new BigDecimal(0):park.getData().getLatId()); dto.setLonId(null==park.getData().getLonId()? new BigDecimal(0):park.getData().getLonId()); } } } return new BizResult>(list); } @Override public BizResult> queryParkEqpForPageByPlNo(EqpLogQueryRequest request) { logger.info("实时监控分页查询停车场设备日志入参:" +JSON.toJSONString(request)); if(null == request.getCreateTimeStart() && null == request.getCreateTimeEnd() && request.getCreateTime()== null){ throw new BizException(ErrorType.PARAMM_NULL,"时间入参不能为空"); } SimpleDateFormat df=new SimpleDateFormat("yyyyMM"); String dateTime=df.format(request.getCreateTimeStart()); String tableName = TableNameEnum.TP_P_EQP_LOG.getValue()+dateTime; request.setTableName(tableName); PageInfo pageInfo = eqpLogDao.queryParkEqpForPageByPlNo(request); PageBean pageBean = new PageBean(); if (pageInfo != null) { PageBeanUtil.copyProperties(pageInfo, pageBean, TpPEqpLogDTO.class); } return new BizResult>(pageBean); } }