EqpBerthsServiceImpl.java 9.42 KB
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<List<BerthTurnOverCountDTO>> 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<BerthTurnOverCountDTO> dtoList = new ArrayList<>();
		List<BerthTurnOverCountDO> 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<PageBean<BerthTurnOverCountDTO>> queryBerthTurnOverDetail(BerthTurnOverQueryRequest request) {
		request.setEventType(EqpReportEventTypeEnum.OUT_PARK.value());//车辆离开
		request.setEqpType(EqpConstant.EQP_TYPE.GEO);//地磁
		logger.info("泊位周转率详细-入参:" +JSON.toJSONString(request));
		PageBean<BerthTurnOverCountDTO> dtoPage = new PageBean<BerthTurnOverCountDTO>();
		List<BerthTurnOverCountDTO> dtoList = new ArrayList<>();
		PageInfo<BerthTurnOverCountDO> doPage = new PageInfo<BerthTurnOverCountDO>();
		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<PageBean<BerthTurnOverCountDTO>>(dtoPage);

	}

	@Override
	public BizResult<PageBean<BerthTurnOverCountDTO>> queryBerthTurnOverDetailForHour(BerthTurnOverQueryRequest request) {
		request.setEventType(EqpReportEventTypeEnum.OUT_PARK.value());//车辆离开
		request.setEqpType(EqpConstant.EQP_TYPE.GEO);//地磁
		logger.info("泊位周转率详情导出入参:" +JSON.toJSONString(request));
		PageBean<BerthTurnOverCountDTO> dtoPage = new PageBean<BerthTurnOverCountDTO>();
		List<BerthTurnOverCountDTO> dtoList = new ArrayList<>();
		PageInfo<BerthTurnOverCountDO> doPage = new PageInfo<BerthTurnOverCountDO>();
		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<PageBean<BerthTurnOverCountDTO>>(dtoPage);

	}



	@Override
	public BizResult<List<ParkOccupancyRateDTO>> 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<ParkOccupancyRateDTO> 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<ParkingLotDTO> 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<ParkOccupancyRateDTO>>(list);
	}

	@Override
	public BizResult<PageBean<TpPEqpLogDTO>> 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<TpPEqpLogDTO> pageInfo = eqpLogDao.queryParkEqpForPageByPlNo(request);
		PageBean<TpPEqpLogDTO> pageBean = new PageBean<TpPEqpLogDTO>();
		if (pageInfo != null) {
			PageBeanUtil.copyProperties(pageInfo, pageBean, TpPEqpLogDTO.class);
		}
		return new BizResult<PageBean<TpPEqpLogDTO>>(pageBean);
	}




}