QueryStationsInfoJob.java
7.78 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
package com.zteits.charge.job.kelin;
import org.apache.commons.collections4.CollectionUtils;
import com.alibaba.fastjson.JSON;
import com.clouds.common.constants.RedisKeyEnum;
import com.clouds.common.redis.RedisCacheFactory;
import com.clouds.common.utils.DateUtil;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import com.zteits.charge.dao.ConnectorInfoDao;
import com.zteits.charge.dao.EquipmentInfoDao;
import com.zteits.charge.dao.StationInfoDao;
import com.zteits.charge.domain.ConnectorInfo;
import com.zteits.charge.domain.EquipmentInfo;
import com.zteits.charge.domain.StationInfo;
import com.zteits.charge.domain.kelin.result.ConnectorInfoResult;
import com.zteits.charge.domain.kelin.result.EquipmentInfoResult;
import com.zteits.charge.service.spi.CallStationInfoSpi;
import com.zteits.charge.domain.kelin.result.StationInfoResult;
import com.zteits.charge.domain.kelin.post.QueryStationsPost;
import com.zteits.charge.domain.kelin.result.QueryStationsResult;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* 查询科林充电站信息
* 如果是all 查询,则可以在一个长周期内查询,例如1天1次,每天0点跑
* 如果是date查询,则可以在一个短周期,增量查询,例如每30分钟一次
* @author sl
*/
@Slf4j
@Component
public class QueryStationsInfoJob {
@Autowired
private CallStationInfoSpi callStationInfoSpi;
@Autowired
private StationInfoDao stationInfoDao;
@Autowired
private EquipmentInfoDao equipmentInfoDao;
@Autowired
private ConnectorInfoDao connectorInfoDao;
// 充电站设备创建时默认的orgId,即创建到那个组织下面
@Value("${charge.orgId}")
private Long orgId;
private static Integer PAGE_SIZE = 50;
/**
*
* @param arg arg[0]=operatorId 运营商id;arg[1]=查询类型:all-全部重新查询,date-按查询时间查询;arg[2]:如果第二个类型为data,则该字段有效,如果有值,则取传递的值
* @return
* @throws Exception
*/
@XxlJob(value="QueryStationsInfoJob")
public ReturnT<String> execute(String... arg) throws Exception {
String param = XxlJobHelper.getJobParam();
if (null != param && arg==null) {
arg = param.split(",");
}
if (arg == null) {
this.logger("参数不能为空,请输入运营商ID");
return ReturnT.SUCCESS;
}
String operatorId = arg[0];
// 查询时间
String queryTime = "";
if ("all".equals(arg[1])) {
} else if ("date".equals(arg[1]) && arg.length ==3) {
// 使用指定的值查询
queryTime = arg[2];
} else {
// 读取缓存
String redisData = RedisCacheFactory.getRedisCacheUtil().get(RedisKeyEnum.QUERY_CHARGE_STATION_TIME.key());
if (StringUtils.isBlank(redisData)) {
this.logger("缓存中查询时间为空,不处理");
return ReturnT.SUCCESS;
} else {
queryTime = redisData;
}
}
queryStationsInfo(operatorId,queryTime,1);
// 设置缓存时间为当前时间
RedisCacheFactory.getRedisCacheUtil().put(RedisKeyEnum.QUERY_CHARGE_STATION_TIME.key(), DateUtil.getDateString(new Date(),DateUtil.DATETIME_FORMAT));
return ReturnT.SUCCESS;
}
/**
*
* @param operatorId
* @param queryTime
* @param pageNo
*/
private void queryStationsInfo(String operatorId,String queryTime,int pageNo) {
this.logger("开始查询运营商:"+operatorId+",查询时间:"+queryTime+",第"+pageNo+"页的充电站信息");
// 这里是查询全部的运营商
QueryStationsResult queryStationsResult = callStationInfoSpi.queryStationsInfo(operatorId, new QueryStationsPost().setPageNo(pageNo).setPageSize(PAGE_SIZE).setLastQueryTime(queryTime));
if (queryStationsResult == null || CollectionUtils.isEmpty(queryStationsResult.getStationInfos())) {
this.logger("查询第"+pageNo+"返回数据为空,处理结束");
return;
}
List<StationInfoResult> stationInfos = queryStationsResult.getStationInfos();
for (StationInfoResult infoResult : stationInfos) {
// 保存站点信息
StationInfo newStationInfo = new StationInfo();
BeanUtils.copyProperties(infoResult,newStationInfo);
newStationInfo.setStationLat(infoResult.getStationLat() == null ? null : BigDecimal.valueOf(infoResult.getStationLat()));
newStationInfo.setStationLng(infoResult.getStationLng() == null ? null : BigDecimal.valueOf(infoResult.getStationLng()));
newStationInfo.setPictures(JSON.toJSONString(infoResult.getPictures()));
if (StringUtils.isBlank(newStationInfo.getOperatorId())) {
newStationInfo.setOperatorId(operatorId);
}
newStationInfo.setOrgId(orgId);
stationInfoDao.saveStationInfo(newStationInfo);
// 保存设备信息
List<EquipmentInfoResult> equipmentInfos = infoResult.getEquipmentInfos();
if (CollectionUtils.isEmpty(equipmentInfos)) {
continue;
}
for (EquipmentInfoResult equipmentInfoResult : equipmentInfos) {
EquipmentInfo equipmentInfo = new EquipmentInfo();
BeanUtils.copyProperties(equipmentInfoResult,equipmentInfo);
equipmentInfo.setEquipmentLat(equipmentInfoResult.getEquipmentLat() == null ? null : BigDecimal.valueOf(equipmentInfoResult.getEquipmentLat()));
equipmentInfo.setEquipmentLng(equipmentInfoResult.getEquipmentLng() == null ? null : BigDecimal.valueOf(equipmentInfoResult.getEquipmentLng()));
equipmentInfo.setPower(equipmentInfoResult.getPower() == null ? null : BigDecimal.valueOf(equipmentInfoResult.getPower()));
equipmentInfo.setOperatorId(operatorId);
equipmentInfo.setStationId(newStationInfo.getStationId());
equipmentInfo.setOrgId(orgId);
equipmentInfoDao.saveEquipmentInfo(equipmentInfo);
// 保存设备接口信息
if (CollectionUtils.isEmpty(equipmentInfoResult.getConnectorInfos())) {
continue;
}
for (ConnectorInfoResult connectorInfoResult : equipmentInfoResult.getConnectorInfos()) {
ConnectorInfo connectorInfo = new ConnectorInfo();
BeanUtils.copyProperties(connectorInfoResult,connectorInfo);
connectorInfo.setPower(connectorInfoResult.getPower() == null ? null : BigDecimal.valueOf(connectorInfoResult.getPower()));
connectorInfo.setOperatorId(operatorId);
connectorInfo.setStationId(newStationInfo.getStationId());
connectorInfo.setEquipmentId(equipmentInfo.getEquipmentId());
connectorInfo.setOrgId(orgId);
connectorInfoDao.saveConnectorInfo(connectorInfo);
}
}
}
if (queryStationsResult.getPageCount() <= pageNo) {
this.logger("总页数"+queryStationsResult.getPageCount()+",当前页数"+pageNo+",处理结束");
return;
}
this.queryStationsInfo(operatorId,queryTime,pageNo+1);
}
private void logger(String msg){
XxlJobHelper.log(msg);
log.info(msg);
}
}