NewIncomeCalculationStatisticJob.java 4.03 KB
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<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;
        //统计昨天的数据
        Date date = DateUtil.offsetDay(new Date(), -1);

        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, plNos.size());
        CountDownLatch countDownLatch = new CountDownLatch(plNos.size());
        Map<String, String> 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));
        }

    }


}