EqpBerthsServiceImpl.java
9.42 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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
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);
}
}