package com.zteits.park.biz.closecarpark; import com.clouds.common.cache.park.CloudClosedParkChannelCacheUtil; import com.zteits.clouds.api.apibase.bean.BizResult; import com.zteits.clouds.api.dto.park.dto.closecarpark.ParkingLotAreasDTO; import com.zteits.clouds.api.dto.park.dto.closecarpark.ParkingLotChannelAreaDTO; import com.zteits.clouds.api.dto.park.param.closecarpark.QueryChannelInfoByNoRequest; import com.zteits.clouds.api.service.park.closecarpark.ParkingLotAreaQueryService; import com.zteits.park.domain.ParkingLotAreas; import com.zteits.park.service.closecarpark.query.ParkingLotAreasService; 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 java.util.List; import java.util.Optional; @Service public class ParkingLotAreaQueryServiceImpl implements ParkingLotAreaQueryService { private static final Logger logger = LoggerFactory.getLogger(ParkingLotAreaQueryServiceImpl.class); @Autowired private ParkingLotAreasService parkingLotAreasService; /** * 根据停车场编号以及通道号,获取对应的停车场区域信息 */ @Override public BizResult getParkingLotAreaByPlNoAndChannel(QueryChannelInfoByNoRequest request) { ParkingLotAreas parkingLotAreas = parkingLotAreasService.getParkingLotAreasByPlNoAndChannel(request); if (parkingLotAreas == null) { return null; } ParkingLotAreasDTO parkingLotAreasDTO = new ParkingLotAreasDTO(); BeanUtils.copyProperties(parkingLotAreas, parkingLotAreasDTO); return new BizResult<>(parkingLotAreasDTO); } /** * 通过停车场编号以及通道号,判断所属的区域是否是免费的子区域 * 注: 暂时只用于西城联通车场的逻辑 * by zengqc * * @return 是 返回true; 否 返回false */ @Override public BizResult checkIsFreeSubArea(QueryChannelInfoByNoRequest request) { List cacheList = getParkingLotChannelAreaDTOFromCache(request); ParkingLotChannelAreaDTO parkingLotChannelAreaDTO = null; // 获取对应停车场通道的数据 for (ParkingLotChannelAreaDTO dto : cacheList) { if (request.getPlNo().equals(dto.getPlNo()) && request.getChannelNumber().equals(dto.getChannelNumber())) { parkingLotChannelAreaDTO = dto; break; } } // 0 不收费 1 收费 String whetherCharge = Optional.ofNullable(parkingLotChannelAreaDTO) .map(ParkingLotChannelAreaDTO::getWhetherCharge).orElse("1"); return new BizResult<>("0".equals(whetherCharge)); } /** * 先从缓存获取,再去数据库获取 */ private List getParkingLotChannelAreaDTOFromCache(QueryChannelInfoByNoRequest request) { // 从缓存获取, 缓存不存key, 再去读取数据库 List cacheList = CloudClosedParkChannelCacheUtil.getFreeChanelList(); if (cacheList == null) { // 去数据库获取 cacheList = parkingLotAreasService.getAllFreeChargeAreas(); // 放入缓存 CloudClosedParkChannelCacheUtil.setFreeChanelList(cacheList); } return cacheList; } /** * 获取所有开启了内部区域免费的停车场。 * 这些停车场的数据计费的时候,要看下子订单表是否有数据 * 例如 西城-内部联通车场的逻辑 */ @Override public BizResult checkParkWithFreeArea(QueryChannelInfoByNoRequest request) { String plNo = request.getPlNo(); boolean resFlg = false; List cacheList = getParkingLotChannelAreaDTOFromCache(request); for (ParkingLotChannelAreaDTO dto : cacheList) { if (plNo.equals(dto.getPlNo())) { resFlg = true; break; } } return new BizResult<>(resFlg); } }