ParkRealTimeQueryServiceImpl.java 4.01 KB
package com.zteits.park.biz.parkrealtime;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.CountDownLatch;

import org.apache.commons.collections4.CollectionUtils;
import com.alibaba.fastjson.JSONObject;

import com.clouds.common.cache.park.PLRealTimeStatusCacheUtil;
import com.clouds.common.entity.PLRealTimeStatusBean;
import com.clouds.common.utils.ListCopyUtil;
import com.zteits.clouds.api.apibase.bean.BizResult;
import com.zteits.clouds.api.apibase.constants.ErrorType;
import com.zteits.clouds.api.apibase.exception.BizException;
import com.zteits.clouds.api.dto.clouds.dto.PLRealTimeStatusBeanDTO;
import com.zteits.clouds.api.dto.clouds.param.RealTimeMonitorByPlNosRequest;
import com.zteits.clouds.api.service.park.parkrealtime.ParkRealTimeQueryService;
import com.zteits.park.job.PLRealTimeStatusCacheJob;
import com.zteits.park.service.parkrealtimecache.oper.PLRealTimeStatusCacheOperService;
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;

/**
 * 停车场实时运行数据查询(新版首页)
 * Copyright: Copyright (c) 2017  zteits
 *
 * @ClassName: ParkRealTimeQueryServiceImpl.java
 * @Description:
 * @version: v1.0.0
 * @author: wangfei
 * @date: 2018年4月11日   下午12:01:17
 * Modification History:
 * Date         Author          Version      Description
 * ---------------------------------------------------------*
 * 2018年4月11日      wangfei          v1.0.0          创建
 */
@Service("com.zteits.park.biz.parkrealtime.ParkRealTimeQueryServiceImpl")
public class ParkRealTimeQueryServiceImpl implements ParkRealTimeQueryService {

    private static final Logger logger = LoggerFactory.getLogger(ParkRealTimeQueryServiceImpl.class);
    @Autowired
    private PLRealTimeStatusCacheOperService plRealTimeStatusCacheOperService;
    @Override
    public BizResult<PLRealTimeStatusBeanDTO> queryParkRealTimeDatasByPlNos(RealTimeMonitorByPlNosRequest request) {
        PLRealTimeStatusBeanDTO result = new PLRealTimeStatusBeanDTO();
        logger.info("首页查询实时收入情况/占有率情况,入参={}",JSONObject.toJSONString(request));
        if(CollectionUtils.isEmpty(request.getPlNos())){
            throw new BizException(ErrorType.PARAMM_NULL, "停车场编号");
        }
        PLRealTimeStatusBean bean  = PLRealTimeStatusCacheUtil.getPLRealTimeStatusTotal(request.getPlNos());
        BeanUtils.copyProperties(bean, result);

        logger.info("首页查询实时收入情况/占有率情况,返回={}",JSONObject.toJSONString(result));
        return new BizResult<>(result);
    }

    @Override
    public BizResult<List<PLRealTimeStatusBeanDTO>> queryParkRealTimeListByPlNos(
            RealTimeMonitorByPlNosRequest request)  {

        List<PLRealTimeStatusBeanDTO> result = new ArrayList<>();
        List<PLRealTimeStatusBean> list = new ArrayList<>();
        logger.info("根据停车场编号查询停车场实时运行情况数据,入参={}",JSONObject.toJSONString(request));
        if(CollectionUtils.isEmpty(request.getPlNos())){
            throw new BizException(ErrorType.PARAMM_NULL, "停车场编号");
        }


        for (String plNo : request.getPlNos()) {
            PLRealTimeStatusBean bean ;
            bean = PLRealTimeStatusCacheUtil.getPLRealTimeStatus(plNo);
            if(bean!=null){
                list.add(bean);
            }else{
                //未找到的停车场,异步添加到缓存中
                plRealTimeStatusCacheOperService.checkPlRealTimeStatusCache(plNo,new HashMap<>(),new CountDownLatch(1));
            }
        }



        if(CollectionUtils.isNotEmpty(list)){
            ListCopyUtil.listCopyProperties(list, result,PLRealTimeStatusBeanDTO.class);
        }
        logger.info("根据停车场编号查询停车场实时运行情况数据,返回={}",JSONObject.toJSONString(result));
        return new BizResult<>(result);
    }

    
}