com.gps.rptbean.DataSourceFactory.java Source code

Java tutorial

Introduction

Here is the source code for com.gps.rptbean.DataSourceFactory.java

Source

/**
 * 
 */
package com.gps.rptbean;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;

import com.gps.bean.FRuningLogBean;
import com.gps.orm.FExpenseLog;
import com.gps.orm.FMaintain;
import com.gps.orm.FRuningLog;
import com.gps.orm.HibernateUtil;
import com.gps.orm.Vehicle;
import com.gps.service.ServiceLocator;

import net.sf.jasperreports.engine.JRDataSource;

/**
 * @author Ryan
 *
 */
public class DataSourceFactory {

    public static JRDataSource buildYearlyDataSource(Vehicle v, String year, String measureName) {

        assert (v != null);
        assert (year != null);

        Date startDate = null;
        try {
            startDate = (new SimpleDateFormat("yyyy")).parse(year);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Calendar cal = Calendar.getInstance();
        cal.setTime(startDate);
        cal.add(Calendar.YEAR, 1);
        Date endDate = cal.getTime();

        Session session = HibernateUtil.getSession();

        List results = session.createCriteria(FRuningLog.class)
                .setProjection(Projections.projectionList().add(Projections.rowCount(), "rowCount")
                        .add(Projections.sum(measureName), "total")
                        .add(Projections.groupProperty("yearMonth"), "yearMonth"))
                .add(Restrictions.eq("vehicle.vehicleId", v.getVehicleId()))
                .add(Restrictions.le("startDate", endDate)).add(Restrictions.ge("startDate", startDate))
                .addOrder(Order.asc("yearMonth")).list();

        //   
        //      FRuningLogBean fruningLogBean = new FRuningLogBean();
        //      
        //      fruningLogBean.setVehicleId(v.getVehicleId());
        //      fruningLogBean.setStartDateStart(startDate);
        //      fruningLogBean.setStartDateEnd(endDate);
        //      
        //      fruningLogBean.getList();
        YearlyDataSource ds = null;
        ds = new YearlyDataSource();

        Iterator iter = results.iterator();

        while (iter.hasNext()) {
            Object[] row = (Object[]) iter.next();
            Integer count = (Integer) row[0];
            Double total = (Double) row[1];
            String yearMonth = (String) row[2];

            int idx = getIndex(yearMonth);
            YearlyBean bean = new YearlyBean(idx);
            bean.setVehicleId(v.getVehicleId());
            bean.setLicensePad(v.getLicensPadNumber());
            bean.setMeasure1(total);
            ds.addRecord(idx, bean);
        }

        return ds;

    }

    private static int getIndex(String yearMonth) {

        String sub = yearMonth.substring(4, 6);

        return Integer.parseInt(sub);
    }

    public static ServiceLocator getServiceLocator() {

        return ServiceLocator.getInstance();
    }

    public static JRDataSource buildMonthlyCostDataSource(Vehicle v, Date start, Date end) {

        CostAnalysisDataSource result = new CostAnalysisDataSource();

        assert (v != null);
        assert (start != null);
        assert (end != null);
        int index = 1;

        Session session = HibernateUtil.getSession();

        List results = session.createCriteria(FRuningLog.class)
                .setProjection(Projections.projectionList().add(Projections.rowCount(), "runCount")
                        .add(Projections.sum("totalCost"), "total").add(Projections.sum("actualGas"), "totalGas")
                        .add(Projections.sum("gasByCashCost"), "totalGasCash")
                        .add(Projections.sum("gasByCardCost"), "totalGasCard")
                        .add(Projections.sum("actualDistance"), "totalDistance")
                        .add(Projections.sum("actualRoadFee"), "totalRoadFee")
                        .add(Projections.sum("overLimitFee"), "totalOverLimitFee")
                        .add(Projections.groupProperty("vehicle.vehicleId"), "vehicleId"))
                .add(Restrictions.eq("vehicle.vehicleId", v.getVehicleId())).add(Restrictions.le("startDate", end))
                .add(Restrictions.ge("startDate", start)).list();

        Double gas = (Double) ((Object[]) results.get(0))[2];
        Double gasByCash = (Double) ((Object[]) results.get(0))[3];
        Double gasByCard = (Double) ((Object[]) results.get(0))[4];

        Double gasFee = gasByCash + gasByCard;
        Double roadFee = (Double) ((Object[]) results.get(0))[6];
        Double limitFee = (Double) ((Object[]) results.get(0))[7];

        CostAnalysisBean bean1 = new CostAnalysisBean();
        bean1.setCategoryName("");
        bean1.setIndex(index);
        bean1.setLicensePad(v.getLicensPadNumber());
        bean1.setMeasure1(gasFee);
        bean1.setVehicleId(v.getVehicleId());
        result.addRecord(index - 1, bean1);
        index++;

        CostAnalysisBean bean2 = new CostAnalysisBean();
        bean2.setCategoryName("");
        bean2.setIndex(index);
        bean2.setLicensePad(v.getLicensPadNumber());
        bean2.setMeasure1(roadFee);
        bean2.setVehicleId(v.getVehicleId());
        result.addRecord(index - 1, bean2);
        index++;

        CostAnalysisBean bean3 = new CostAnalysisBean();
        bean3.setCategoryName("?");
        bean3.setIndex(index);
        bean3.setLicensePad(v.getLicensPadNumber());
        bean3.setMeasure1(limitFee);
        bean3.setVehicleId(v.getVehicleId());
        result.addRecord(index - 1, bean3);
        index++;

        results = null;
        results = session.createCriteria(FMaintain.class)
                .setProjection(Projections.projectionList().add(Projections.rowCount(), "runCount")
                        .add(Projections.sum("cost"), "total")
                        .add(Projections.groupProperty("vehicle.vehicleId"), "vehicleId"))
                .add(Restrictions.eq("vehicle.vehicleId", v.getVehicleId()))
                .add(Restrictions.le("maintainDate", end)).add(Restrictions.ge("maintainDate", start)).list();

        if (results.size() > 0) {
            Double maitainFee = (Double) ((Object[]) results.get(0))[1];

            CostAnalysisBean bean4 = new CostAnalysisBean();
            bean4.setCategoryName("?");
            bean4.setIndex(index);
            bean4.setLicensePad(v.getLicensPadNumber());
            bean4.setMeasure1(maitainFee);
            bean4.setVehicleId(v.getVehicleId());
            result.addRecord(index - 1, bean4);
            index++;
        }

        String yearMonth = new SimpleDateFormat("yyyyMM").format(start);
        results = null;
        results = session.createCriteria(FExpenseLog.class)
                .setProjection(Projections.projectionList().add(Projections.rowCount(), "runCount")
                        .add(Projections.sum("amount"), "total")
                        .add(Projections.groupProperty("category1"), "category1"))
                .add(Restrictions.eq("vehicle.vehicleId", v.getVehicleId()))
                .add(Restrictions.eq("yearMonth", yearMonth)).list();

        Iterator iter = results.iterator();

        while (iter.hasNext()) {
            Object[] row = (Object[]) iter.next();
            Integer count = (Integer) row[0];
            Double total = (Double) row[1];
            String category = (String) row[2];

            CostAnalysisBean bean = new CostAnalysisBean();
            bean.setIndex(index);
            bean.setCategoryName(category);
            bean.setVehicleId(v.getVehicleId());
            bean.setLicensePad(v.getLicensPadNumber());
            bean.setMeasure1(total);
            result.addRecord(index - 1, bean);
            index++;
        }

        return result;
    }

}