QueryStationsStatusJob.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
105
106
107
108
109
package com.zteits.charge.job.kelin;
import org.apache.commons.collections4.CollectionUtils;
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.StationInfoDao;
import com.zteits.charge.domain.StationInfo;
import com.zteits.charge.domain.StationInfoExample;
import com.zteits.charge.domain.kelin.post.QueryStationStatusPost;
import com.zteits.clouds.api.dto.charge.result.ConnectorStatusInfoResult;
import com.zteits.charge.domain.kelin.result.QueryStationStatusResult;
import com.zteits.charge.domain.kelin.result.StationStatusInfoResult;
import com.zteits.charge.service.spi.CallStationInfoSpi;
import com.zteits.clouds.api.apibase.constants.DataStatusEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/**
* 查询科林设备状态,应在每次系统初始化的时候调用一次,后续通过设备状态变更推送主动上报
* @author sl
*/
@Slf4j
@Component
public class QueryStationsStatusJob {
@Autowired
private CallStationInfoSpi callStationInfoSpi;
@Autowired
private StationInfoDao stationInfoDao;
@Autowired
private ConnectorInfoDao connectorInfoDao;
/**
*
* @return
* @throws Exception
*/
@XxlJob(value="QueryStationsStatusJob")
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];
// 查询充电站列表
StationInfoExample example = new StationInfoExample();
example.createCriteria().andDataStateEqualTo(DataStatusEnum.DATA_STATUS_VALID.value())
.andOperatorIdEqualTo(operatorId);
List<StationInfo> stationInfos = stationInfoDao.selectByExample(example);
if (CollectionUtils.isEmpty(stationInfos)) {
this.logger("没有充电站,不处理");
return ReturnT.SUCCESS;
}
List<String> stationIds = new ArrayList<>();
// 分批,每50个一批执行
for (StationInfo stationInfo : stationInfos) {
if (stationIds.size() == 50) {
// 查询
queryStationStatus(stationIds, operatorId);
stationIds = new ArrayList<>();
} else {
stationIds.add(stationInfo.getStationId());
}
}
// 防止遗漏,查询
if (CollectionUtils.isNotEmpty(stationIds)) {
queryStationStatus(stationIds, operatorId);
}
return ReturnT.SUCCESS;
}
private void queryStationStatus(List<String> stationIds,String operatorId) {
QueryStationStatusPost query = new QueryStationStatusPost();
query.setStationIds(stationIds);
QueryStationStatusResult queryStationStatusResult = callStationInfoSpi.queryStationStatus(operatorId, query);
if (queryStationStatusResult == null) {
return;
}
// 处理数据
List<StationStatusInfoResult> stationStatusInfos = queryStationStatusResult.getStationStatusInfos();
if (CollectionUtils.isEmpty(stationStatusInfos)) {
return;
}
for (StationStatusInfoResult stationStatusInfo : stationStatusInfos) {
List<ConnectorStatusInfoResult> connectorStatusInfos = stationStatusInfo.getConnectorStatusInfos();
if (CollectionUtils.isEmpty(connectorStatusInfos)) {
continue;
}
for (ConnectorStatusInfoResult connectorStatusInfo : connectorStatusInfos) {
connectorInfoDao.syncConnectorStatus(operatorId,connectorStatusInfo);
}
}
}
private void logger(String msg){
XxlJobHelper.log(msg);
log.info(msg);
}
}