EqpOnlineRateStatisticJob.java 5.46 KB
package com.zteits.park.job;

import org.apache.commons.lang3.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.clouds.common.constants.statistictime.StatisticTimeTypeEnum;
import com.clouds.common.utils.ResultUtils;
import com.xiaoleilu.hutool.date.DateTime;
import com.xiaoleilu.hutool.date.DateUtil;
import com.xiaoleilu.hutool.date.TimeInterval;
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.clouds.api.apibase.bean.BizResult;
import com.zteits.clouds.api.apibase.constants.BasicEnum;
import com.zteits.clouds.api.dto.clouds.param.QueryParkListAllRequest;
import com.zteits.clouds.api.dto.park.dto.ParkingLotDTO;
import com.zteits.clouds.api.service.park.ParkingLotQueryService;
import com.zteits.park.service.eqponlineratestatistic.oper.EqpOnlineRateJobService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.stream.Collectors;

/**
 * 设备在线率统计
 * Copyright: Copyright (c) 2018  zteits
 *
 * @Description:
 * @version: v1.0.0
 * @author: xiejianpeng
 * @date: 2018/5/17 17:45
 * Modification History:
 * Date             Author          Version            Description
 *---------------------------------------------------------*
 * 2018/5/17     xiejianpeng         v1.0.0               创建
 */
@Component
public class EqpOnlineRateStatisticJob{
    private static final Logger logger = LoggerFactory.getLogger(EqpOnlineRateStatisticJob.class);
    @Autowired
    private ParkingLotQueryService parkingLotQueryService;

    @Autowired
    private EqpOnlineRateJobService eqpOnlineRateJobService;

    @XxlJob("eqpOnlineRateStatisticJob")
    public ReturnT<String> execute(String... params) throws Exception {
        String param = XxlJobHelper.getJobParam();
        if (StringUtils.isNotEmpty(param) && params == null) {
            params = param.split(",");
        }

        String uuid = UUID.randomUUID().toString();
        logger.info("{},设备在线率统计开始====start====={}", uuid, DateUtil.now());
        TimeInterval timer = DateUtil.timer();
        timer.start();
        List<String> plNos = null;
        if (null == params || params.length == 0) {
            logger.info("{},设备在线率,统计参数类型为空,无法统计!", uuid);
            return new ReturnT<>(ReturnT.FAIL_CODE, "统计参数为空为空,无法统计");
        }

        List<String> paramList = new ArrayList<>(Arrays.asList(params));
        Integer statisticType = Integer.valueOf(paramList.get(0));
        DateTime staDate = DateUtil.date() ;
        //DateUtil.parse(paramList.get(1), "yyyy-MM-dd HH:mm:ss");
        //paramList.remove(1);

        paramList.remove(0);
        if (!CollectionUtils.isEmpty(paramList)) {
            plNos = paramList;
        } else {
            QueryParkListAllRequest request = new QueryParkListAllRequest();
            request.setSysCode(BasicEnum.SYS_CODE.getValue());
            BizResult<List<ParkingLotDTO>> parkingLotList = parkingLotQueryService.queryParkListAll(request);
            List<ParkingLotDTO> dtos = ResultUtils.getBizResultData(parkingLotList);
            plNos = dtos.stream().map(ParkingLotDTO::getPlNo).collect(Collectors.toList());
        }

        if (CollectionUtils.isEmpty(plNos)) {
            logger.info("{},设备在线率统计,待统计停车场列表为空!", uuid);
            return ReturnT.FAIL;
        }
        logger.info("{},设备在线率统计类型为:", uuid, statisticType);

        logger.info("{},设备在线率统计,待统计停车场个数为:{}", uuid, plNos.size());
        CountDownLatch countDownLatch = new CountDownLatch(plNos.size());
        Map<String, String> failMap = new HashMap<>();
        for (String plNo : plNos) {
                if (StatisticTimeTypeEnum.BY_1_DAY.getVal().equals(statisticType)) {
                    logger.info("{},设备在线率统计类型为:", uuid, "按天");
                    eqpOnlineRateJobService.statisticsEqpOnlineRateOfDay(plNo, failMap, countDownLatch,staDate);
                }

                if (StatisticTimeTypeEnum.BY_1_MONTH.getVal().equals(statisticType)) {
                    logger.info("{},设备在线率统计类型为:", uuid, "按月");
                    eqpOnlineRateJobService.statisticsEqpOnlineRateOfMonth(plNo, failMap, countDownLatch,staDate);
                }

                if (StatisticTimeTypeEnum.BY_1_WEEK.getVal().equals(statisticType)) {
                    logger.info("{},设备在线率统计类型为:", uuid, "按周");
                    eqpOnlineRateJobService.statisticsEqpOnlineRateOfWeek(plNo, failMap, countDownLatch,staDate);
                }
        }



        countDownLatch.await();
        logger.info("{},设备在线率统计结束,总计停车场为{},统计失败个数为{},总耗时{}分钟{}秒", uuid, plNos.size(), failMap.size(),
            timer.intervalMinute(),
            timer.intervalSecond());
        logger.info("{},设备在线率统计结束====end====={}", uuid, DateUtil.now());
        if (CollectionUtils.isEmpty(failMap)) {
            return ReturnT.SUCCESS;
        } else {
            return new ReturnT<>(ReturnT.FAIL_CODE, uuid + ",设备在线率统计失败:" + JSONObject.toJSONString(failMap));
        }

    }
}