NewInComeNewJob.java 10.9 KB
package com.zteits.park.job;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import com.clouds.common.constants.CarTypeEnum;
import com.clouds.common.constants.ParkLotEnum;
import com.github.pagehelper.util.StringUtil;
import com.xiaoleilu.hutool.date.DateUtil;
import com.xiaoleilu.hutool.date.TimeInterval;
import com.xiaoleilu.hutool.util.CollectionUtil;
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.dto.order.parkorder.dto.IncomeForNumJobDTO;
import com.zteits.clouds.api.dto.order.parkorder.dto.IncomeForTimeJobDTO;
import com.zteits.clouds.api.dto.order.parkorder.param.QueryIncomeForNumJobRequest;
import com.zteits.clouds.api.service.order.income.query.IncomeCalculationQueryService;
import com.zteits.park.dao.InComeCalculationStaticDao;
import com.zteits.park.dao.ParkingLotDao;
import com.zteits.park.domain.ParkingLot;
import com.zteits.park.domain.TIncomeCalculationStaticNum;
import com.zteits.park.domain.TIncomeCalculationStaticTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 收益测算定时任务(新)
 * Copyright: Copyright (c) 2017  zteits
 *
 * @ClassName: NewInComeNewJob.java
 * @Description:
 * @version: v1.0.0
 * @author: wangfei
 * @date: 2018年3月1日   上午11:34:49
 * Modification History:
 * Date         Author          Version      Description
 * ---------------------------------------------------------*
 * 2018年3月1日      wangfei          v1.0.0          创建
 */
@Component
public class NewInComeNewJob {

    @Autowired
    private IncomeCalculationQueryService incomeCalculationQueryService;

    @Autowired
    private InComeCalculationStaticDao inComeCalculationStaticDao;

    @Autowired
    private ParkingLotDao parkingLotDao;

    @XxlJob("NewInComeNewJob")
    public ReturnT<String> execute(String... params) throws Exception {
        String param = XxlJobHelper.getJobParam();
        if (StringUtils.isNotEmpty(param) && params == null) {
            params = param.split(",");
        }
        //开启计时器
        TimeInterval timer = DateUtil.timer();
        XxlJobHelper.log("---收益测算统计定时任务---start--" + DateUtil.now() + "---");
        Date date = DateUtil.offsetDay(new Date(), -1);
        /**按次**/
        int numCount=staticOfNum(date);
        XxlJobHelper.log("----收益测算定时任务--统计按次数据结束,共" + numCount + "条数据,此时耗时:" + timer.intervalMinute() + "分钟");
        int timeCount=staticOfTime(date);
        XxlJobHelper.log("----收益测算定时任务--统计按时数据结束,共" + timeCount + "条数据,此时耗时:" + timer.intervalMinute() + "分钟");
        return ReturnT.SUCCESS;
    }

    /**
     * 按次任务统计
     *
     * @return
     */
    private int staticOfNum(Date date) {
        String dayTime = DateUtil.format(date,"yyyy-MM-dd");
        String beginTime=dayTime+" 00:00:00";
        String endTime=dayTime+" 23:59:59";
        QueryIncomeForNumJobRequest request=new QueryIncomeForNumJobRequest();
        request.setSysCode("1001");
        request.setBeginTime(beginTime);
        request.setEndTime(endTime);
        /**1、查询收益测算按次 调用order库 从订单表中 **/
        BizResult<List<IncomeForNumJobDTO>> result = incomeCalculationQueryService.queryIncomeForNumJob(request);

        List<TIncomeCalculationStaticNum> incomeNumList =new ArrayList<>();
        if(result ==null || null ==result.getData() || CollectionUtil.isEmpty(result.getData())){
            return 0;
        }
        List<IncomeForNumJobDTO> jobDTO=result.getData();
        for (IncomeForNumJobDTO dto:jobDTO) {
            if(dto==null || StringUtil.isEmpty(dto.getPlNo()) ){
                continue;
            }
            TIncomeCalculationStaticNum numDO=new TIncomeCalculationStaticNum();
            /***2、根据停车场编号查询停车场信息 **/
            ParkingLot parkingLot = parkingLotDao.queryParkingLotInfoByPlNo(dto.getPlNo());
            if(parkingLot !=null){
                Integer plType=parkingLot.getPlType();
                if(null == plType || ParkLotEnum.PL_TYPE_1.getValue()==plType || -1==plType){
                    continue;
                }
                numDO.setBerthNum(null==parkingLot.getPlBerthNum()?0:parkingLot.getPlBerthNum());
                numDO.setPlType(null==parkingLot.getPlType()? ParkLotEnum.PL_TYPE_2.getValue():parkingLot.getPlType());
                numDO.setPlName(StringUtil.isEmpty(parkingLot.getPlName())?"":parkingLot.getPlName());
                numDO.setPlAreaBlockId(null== parkingLot.getPlAreaBlockId()?null:parkingLot.getPlAreaBlockId());
                numDO.setPlAreaBlockName(StringUtil.isEmpty(parkingLot.getPlAreaBlockName())?"":parkingLot.getPlAreaBlockName());
            }
            numDO.setPlNo(dto.getPlNo());
            numDO.setStaticDate(StringUtil.isEmpty(dto.getStaticDate())?"":dto.getStaticDate());
            numDO.setAllNum(null==dto.getAllNum()?0L:dto.getAllNum());
            numDO.setCarType(null==dto.getCarType()? CarTypeEnum.SMALL_CAR.val():dto.getCarType());
            numDO.setDayNum(null == dto.getDayNum()?0:dto.getDayNum());
            numDO.setNightNum(null==dto.getNightNum()?0:dto.getNightNum());
            numDO.setFreeNum(null ==dto.getFreeNum()?0:dto.getFreeNum());
            incomeNumList.add(numDO);
        }
        /***3、批量保存 **/
        int batchCount = 0;
        if(CollectionUtils.isNotEmpty(incomeNumList)){
            batchCount=inComeCalculationStaticDao.batchSaveIncomeNum(incomeNumList);
        }
        XxlJobHelper.log("---批量保存---结果--" + batchCount + "---");

        return result.getData().size();
    }

    /**
     * 按时任务统计
     *
     * @return
     */
    private int staticOfTime(Date date) {
        String dayTime = DateUtil.format(date,"yyyy-MM-dd");
        String beginTime=dayTime+" 00:00:00";
        String endTime=dayTime+" 23:59:59";
        QueryIncomeForNumJobRequest request=new QueryIncomeForNumJobRequest();
        request.setSysCode("1001");
        request.setBeginTime(beginTime);
        request.setEndTime(endTime);
        /**1、查询收益测算按时 调用pay库 从订单和停车订单明细表中 **/
        BizResult<List<IncomeForTimeJobDTO>> result = incomeCalculationQueryService.queryIncomeForTimeJob(request);

        List<TIncomeCalculationStaticTime> incomeTimeList =new ArrayList<>();
        if(result ==null || null ==result.getData() || CollectionUtil.isEmpty(result.getData())){
            return 0;
        }
        List<IncomeForTimeJobDTO> jobDTO=result.getData();
        for (IncomeForTimeJobDTO dto:jobDTO) {
            if(dto==null || StringUtil.isEmpty(dto.getPlNo()) ){
                continue;
            }
            TIncomeCalculationStaticTime timeDO=new TIncomeCalculationStaticTime();
            /***2、根据停车场编号查询停车场信息 **/
            ParkingLot parkingLot = parkingLotDao.queryParkingLotInfoByPlNo(dto.getPlNo());
            if(parkingLot !=null){
                Integer plType=parkingLot.getPlType();
                if(null == plType || ParkLotEnum.PL_TYPE_1.getValue()==plType || -1==plType){
                    continue;
                }
                timeDO.setBerthNum(null==parkingLot.getPlBerthNum()?0:parkingLot.getPlBerthNum());
                timeDO.setPlType(null==parkingLot.getPlType()? ParkLotEnum.PL_TYPE_2.getValue():parkingLot.getPlType());
                timeDO.setPlName(StringUtil.isEmpty(parkingLot.getPlName())?"":parkingLot.getPlName());
                timeDO.setPlAreaBlockId(null== parkingLot.getPlAreaBlockId()?null:parkingLot.getPlAreaBlockId());
                timeDO.setPlAreaBlockName(StringUtil.isEmpty(parkingLot.getPlAreaBlockName())?"":parkingLot.getPlAreaBlockName());;
            }
            timeDO.setPlNo(dto.getPlNo());
            timeDO.setStaticDate(StringUtil.isEmpty(dto.getStaticDate())?"":dto.getStaticDate());
            timeDO.setAllNum(null==dto.getAllNum()?0L:dto.getAllNum());
            timeDO.setCarType(null==dto.getCarType()? CarTypeEnum.SMALL_CAR.val():dto.getCarType());
            timeDO.setFreeNum(null ==dto.getFreeNum()?new BigDecimal("0"):new BigDecimal(dto.getFreeNum()));
            timeDO.setDay1HourNum(null==dto.getDay1HourNum()?0:dto.getDay1HourNum());
            timeDO.setDay2HourNum(null==dto.getDay2HourNum()?0:dto.getDay2HourNum());
            timeDO.setDay3HourNum(null==dto.getDay3HourNum()?0:dto.getDay3HourNum());
            timeDO.setDay4HourNum(null==dto.getDay4HourNum()?0:dto.getDay4HourNum());
            timeDO.setDay5HourNum(null==dto.getDay5HourNum()?0:dto.getDay5HourNum());
            timeDO.setDay6HourNum(null==dto.getDay6HourNum()?0:dto.getDay6HourNum());
            timeDO.setDay7HourNum(null==dto.getDay7HourNum()?0:dto.getDay7HourNum());
            timeDO.setDay8HourNum(null==dto.getDay8HourNum()?0:dto.getDay8HourNum());
            timeDO.setDay9HourNum(null==dto.getDay9HourNum()?0:dto.getDay9HourNum());
            timeDO.setDay10HourNum(null==dto.getDay10HourNum()?0:dto.getDay10HourNum());
            timeDO.setDay11HourNum(null==dto.getDay11HourNum()?0:dto.getDay11HourNum());
            timeDO.setDay12HourNum(null==dto.getDay12HourNum()?0:dto.getDay12HourNum());
            timeDO.setNight1HourNum(null==dto.getNight1HourNum()?0:dto.getNight1HourNum());
            timeDO.setNight2HourNum(null==dto.getNight2HourNum()?0:dto.getNight2HourNum());
            timeDO.setNight3HourNum(null==dto.getNight3HourNum()?0:dto.getNight3HourNum());
            timeDO.setNight4HourNum(null==dto.getNight4HourNum()?0:dto.getNight4HourNum());
            timeDO.setNight5HourNum(null==dto.getNight5HourNum()?0:dto.getNight5HourNum());
            timeDO.setNight6HourNum(null==dto.getNight6HourNum()?0:dto.getNight6HourNum());
            timeDO.setNight7HourNum(null==dto.getNight7HourNum()?0:dto.getNight7HourNum());
            timeDO.setNight8HourNum(null==dto.getNight8HourNum()?0:dto.getNight8HourNum());
            timeDO.setNight9HourNum(null==dto.getNight9HourNum()?0:dto.getNight9HourNum());
            timeDO.setNight10HourNum(null==dto.getNight10HourNum()?0:dto.getNight10HourNum());
            timeDO.setNight11HourNum(null==dto.getNight11HourNum()?0:dto.getNight11HourNum());
            timeDO.setNight12HourNum(null==dto.getNight12HourNum()?0:dto.getNight12HourNum());

            incomeTimeList.add(timeDO);
        }
        /***3、批量保存 **/
        int batchCount = 0;
        if(CollectionUtils.isNotEmpty(incomeTimeList)){
            batchCount=inComeCalculationStaticDao.batchSaveIncomeTime(incomeTimeList);
        }
        XxlJobHelper.log("---批量保存---结果--" + batchCount + "---");

        return result.getData().size();
    }
}