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 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 plNos = null; if (null == params || params.length == 0) { logger.info("{},设备在线率,统计参数类型为空,无法统计!", uuid); return new ReturnT<>(ReturnT.FAIL_CODE, "统计参数为空为空,无法统计"); } List 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> parkingLotList = parkingLotQueryService.queryParkListAll(request); List 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 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)); } } }