ParkingLotAreaQueryServiceImpl.java
4.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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<ParkingLotAreasDTO> 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<Boolean> checkIsFreeSubArea(QueryChannelInfoByNoRequest request) {
List<ParkingLotChannelAreaDTO> 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<ParkingLotChannelAreaDTO> getParkingLotChannelAreaDTOFromCache(QueryChannelInfoByNoRequest request) {
// 从缓存获取, 缓存不存key, 再去读取数据库
List<ParkingLotChannelAreaDTO> cacheList = CloudClosedParkChannelCacheUtil.getFreeChanelList();
if (cacheList == null) {
// 去数据库获取
cacheList = parkingLotAreasService.getAllFreeChargeAreas();
// 放入缓存
CloudClosedParkChannelCacheUtil.setFreeChanelList(cacheList);
}
return cacheList;
}
/**
* 获取所有开启了内部区域免费的停车场。
* 这些停车场的数据计费的时候,要看下子订单表是否有数据
* 例如 西城-内部联通车场的逻辑
*/
@Override
public BizResult<Boolean> checkParkWithFreeArea(QueryChannelInfoByNoRequest request) {
String plNo = request.getPlNo();
boolean resFlg = false;
List<ParkingLotChannelAreaDTO> cacheList = getParkingLotChannelAreaDTOFromCache(request);
for (ParkingLotChannelAreaDTO dto : cacheList) {
if (plNo.equals(dto.getPlNo())) {
resFlg = true;
break;
}
}
return new BizResult<>(resFlg);
}
}