QueryStationsStatusJob.java 4.13 KB
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);
    }
}