package com.zteits.park.job; import org.apache.commons.lang3.StringUtils; import com.alibaba.fastjson.JSONObject; import com.clouds.common.utils.ResultUtils; 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.incomecal.IncomeCalculationService; 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) 2017 zteits * * @ClassName: NewIncomeCalculationStatisticJob.java * @Description: * @version: v1.0.0 * @author: wangfei * @date: 2018年12月13日 上午10:38:08 * Modification History: * Date Author Version Description * ---------------------------------------------------------* * 2018年12月13日 wangfei v1.0.0 创建 */ @Component public class NewIncomeCalculationStatisticJob{ private static final Logger logger = LoggerFactory.getLogger(NewIncomeCalculationStatisticJob.class); @Autowired private ParkingLotQueryService parkingLotQueryService; @Autowired private IncomeCalculationService incomeCalculationService; @XxlJob("NewIncomeCalculationStatisticJob") 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; //统计昨天的数据 Date date = DateUtil.offsetDay(new Date(), -1); 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, plNos.size()); CountDownLatch countDownLatch = new CountDownLatch(plNos.size()); Map failMap = new HashMap<>(); for (String plNo : plNos) { incomeCalculationService.statisticsCalculationOfDay(plNo, failMap, countDownLatch,date); } 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)); } } }