BillingInfoUtil.java 3.25 KB
package com.zteits.bill.util;

import java.util.Date;
import java.util.List;

import com.xiaoleilu.hutool.date.DateUnit;
import com.xiaoleilu.hutool.date.DateUtil;
import com.zteits.clouds.api.dto.bill.billing.param.BillingReq;
import com.zteits.clouds.api.dto.bill.billinglog.dto.BillingLogDTO;
import com.zteits.clouds.api.dto.bill.billinglog.dto.BillingLogDetailDTO;
import com.zteits.clouds.api.dto.bill.billinglog.dto.BillingLogOfDayDTO;

/**
 * Copyright: Copyright (c) 2017  zteits
 *
 * @ClassName: com.zteits.billing.util
 * @Description:
 * @version: v1.0.0
 * @author: atao
 * @date: 2017/11/7   下午2:37
 * Modification History:
 * Date         Author          Version      Description
 * ---------------------------------------------------------*
 * 2017/11/7      atao          v1.0.0          创建
 */
public class BillingInfoUtil {
    private static final ThreadLocal<BillingLogDTO> tl = new ThreadLocal<> ();

    private BillingInfoUtil(){

    }

    public static BillingLogDTO init(BillingReq req) {
        tl.remove();
        BillingLogDTO dto = new BillingLogDTO();
        dto.setPlNo(req.getPlNo());
        dto.setCarNo(req.getCarNo());
        dto.setCarType(req.getCarType());
        dto.setInTime(req.getInTime());
        dto.setOutTime(req.getOutTime());
        dto.setParkDuration(DateUtil.between(req.getInTime(), req.getOutTime(), DateUnit.SECOND));
        tl.set(dto);
        return dto;
    }

    /**
     * 生成新的一天计费日志对象
     *
     * @param date
     * @return
     */
    public static BillingLogOfDayDTO newDayLog(Date date) {

        List<BillingLogOfDayDTO> dayLogs = tl.get().getDayLogs();
        BillingLogOfDayDTO dto = new BillingLogOfDayDTO();
        dto.setDay(date);
        dayLogs.add(dto);
        return dto;
    }

    /**
     * 获取最后一天计费日志对象
     *
     * @return
     */
    public static BillingLogOfDayDTO getLastBillingLogDay() {

        List<BillingLogOfDayDTO> dayLogs = tl.get().getDayLogs();
        if (null == dayLogs || 0 == dayLogs.size()) {
            return null;
        }
        return dayLogs.get(dayLogs.size() - 1);
    }

    /**
     * @return
     */
    public static BillingLogDetailDTO newDayLogDetail() {
    	BillingLogDetailDTO billingLogDetailDTO = new BillingLogDetailDTO();
    	
    	BillingLogOfDayDTO billingLogOfDayDTO  = getLastBillingLogDay();
    	if (null != billingLogOfDayDTO) {
	        List<BillingLogDetailDTO> detailBillingLogs = billingLogOfDayDTO.getDetailBillingLogs();
	        detailBillingLogs.add(billingLogDetailDTO);
    	}
    	
        return billingLogDetailDTO;
    }

    /**
     * 获取最后一条计费规则明细
     *
     * @return
     */
    public static BillingLogDetailDTO getLastBillingLogDetail() {
    	BillingLogOfDayDTO billingLogOfDayDTO  = getLastBillingLogDay();
    	if (null != billingLogOfDayDTO) {
	        List<BillingLogDetailDTO> detailBillingLogs = billingLogOfDayDTO.getDetailBillingLogs();
	        return detailBillingLogs.get(detailBillingLogs.size() - 1);
    	} else {
    		return null;
    	}
    }

    /**
     * 获取计费日志对象
     *
     * @return
     */
    public static BillingLogDTO getBillingLog() {
        return tl.get();
    }

    public static void remove() {
        tl.remove();
    }
}