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 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 stationInfos = stationInfoDao.selectByExample(example); if (CollectionUtils.isEmpty(stationInfos)) { this.logger("没有充电站,不处理"); return ReturnT.SUCCESS; } List 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 stationIds,String operatorId) { QueryStationStatusPost query = new QueryStationStatusPost(); query.setStationIds(stationIds); QueryStationStatusResult queryStationStatusResult = callStationInfoSpi.queryStationStatus(operatorId, query); if (queryStationStatusResult == null) { return; } // 处理数据 List stationStatusInfos = queryStationStatusResult.getStationStatusInfos(); if (CollectionUtils.isEmpty(stationStatusInfos)) { return; } for (StationStatusInfoResult stationStatusInfo : stationStatusInfos) { List 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); } }