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 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> queryParkRealTimeListByPlNos( RealTimeMonitorByPlNosRequest request) { List result = new ArrayList<>(); List 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); } }