com.carfinance.module.common.controller.DocumentDownloadController.java Source code

Java tutorial

Introduction

Here is the source code for com.carfinance.module.common.controller.DocumentDownloadController.java

Source

package com.carfinance.module.common.controller;

import com.carfinance.core.handler.DocumentHandler;
import com.carfinance.module.vehiclemanage.domain.VehicleInfo;
import com.carfinance.module.vehiclemanage.service.VehicleManageService;
import com.carfinance.module.vehicleservicemanage.domain.PropertyContraceInfo;
import com.carfinance.module.vehicleservicemanage.domain.VehicleContraceInfo;
import com.carfinance.module.vehicleservicemanage.domain.VehicleContraceVehsInfo;
import com.carfinance.module.vehicleservicemanage.service.VehicleServiceManageService;
import com.itextpdf.text.*;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import org.apache.poi.hssf.usermodel.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.List;

@Controller
@RequestMapping("/downloaddocument")
public class DocumentDownloadController {
    final Logger logger = LoggerFactory.getLogger(DocumentDownloadController.class);

    @Autowired
    private Properties appProps;
    @Autowired
    private VehicleServiceManageService vehicleServiceManageService;
    @Autowired
    private VehicleManageService vehicleManageService;

    //    @RequestMapping(value = "/getcontrace" , method = RequestMethod.GET)
    //    public void allVehicles(Model model , HttpServletRequest request , HttpServletResponse response) {
    //        String contrace_id_str = request.getParameter("contrace_id");
    //        long contrace_type = Long.valueOf(request.getParameter("contrace_type"));//??1-2-?
    //        response.setContentType("application/doc;charset=UTF-8");
    //        byte b[] = new byte[1024];
    //        //?startDate?
    //        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    //
    //        String org_id = "";
    //        if(contrace_type == 1) {
    //            VehicleContraceInfo vehicleContraceInfo = this.vehicleServiceManageService.getVehicleContraceInfoById(Long.valueOf(contrace_id_str));
    //            if(vehicleContraceInfo != null) {
    //                org_id = String.valueOf(vehicleContraceInfo.getOrg_id());
    //            }
    //        } else if(contrace_type == 2) {
    //            PropertyContraceInfo propertyContraceInfo = this.vehicleServiceManageService.getPropertyContraceInfoById(Long.valueOf(contrace_id_str));
    //            if(propertyContraceInfo != null) {
    //                org_id = String.valueOf(propertyContraceInfo.getOrg_id());
    //            }
    //        }
    //
    //        //word??
    //        Map<String , Object> dataMap = new HashMap<String , Object>();
    ////        dataMap.put("departName","aaaa");
    //        dataMap.put("author", "");
    //        dataMap.put("remark", "?");
    //
    //
    //
    //        //?word
    //        DocumentHandler handler = new DocumentHandler();
    //        String file_upload_path = appProps.get("conrace.download.path").toString().replace("${org_id}", org_id).replace("${contrace_id}",contrace_id_str);
    //        File outFile = handler.createDoc("/com/carfinance/template", "test.ftl", dataMap , file_upload_path , "text");
    //
    //        //??word
    //        FileInputStream in = null;
    //        OutputStream o = null;
    //
    //        try {
    //            in = new FileInputStream(outFile);
    //            o = response.getOutputStream();
    //            response.setContentType("application/x-tar");
    //            response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode("text.doc", "UTF-8"));// ??
    //            response.setHeader("Content_Length",String.valueOf( outFile.length()));       // download the file.
    //            int n = 0;
    //            while ((n = in.read (b))!= -1) {
    //                o.write(b, 0, n);
    //            }
    //        } catch (Exception e) {
    //            e.printStackTrace();
    //        } finally {
    //            try {
    //                in.close();
    //                o.flush();
    //                o.close();
    //            } catch (IOException e) {
    //                e.printStackTrace();
    //            }
    //        }
    //    }

    @RequestMapping(value = "/getcontrace", method = RequestMethod.GET)
    public void allVehicles(Model model, HttpServletRequest request, HttpServletResponse response) {
        String contrace_id_str = request.getParameter("contrace_id");
        long contrace_type = Long.valueOf(request.getParameter("contrace_type"));//??1-2-?
        response.setContentType("application/doc;charset=UTF-8");
        byte b[] = new byte[1024];
        //?startDate?
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        String org_id = "";
        if (contrace_type == 1) {
            VehicleContraceInfo vehicleContraceInfo = this.vehicleServiceManageService
                    .getVehicleContraceInfoById(Long.valueOf(contrace_id_str));
            if (vehicleContraceInfo != null) {
                org_id = String.valueOf(vehicleContraceInfo.getOrg_id());
            }
        } else if (contrace_type == 2) {
            PropertyContraceInfo propertyContraceInfo = this.vehicleServiceManageService
                    .getPropertyContraceInfoById(Long.valueOf(contrace_id_str));
            if (propertyContraceInfo != null) {
                org_id = String.valueOf(propertyContraceInfo.getOrg_id());
            }
        }

        //word??
        Map<String, Object> dataMap = new HashMap<String, Object>();
        //        dataMap.put("departName","aaaa");
        dataMap.put("author", "");
        dataMap.put("remark", "?");

        //?word
        DocumentHandler handler = new DocumentHandler();
        String file_upload_path = appProps.get("conrace.download.path").toString().replace("${org_id}", org_id)
                .replace("${contrace_id}", contrace_id_str);
        File outFile = handler.createDoc("/com/carfinance/template", "test.ftl", dataMap, file_upload_path, "text");

        //??word
        FileInputStream in = null;
        OutputStream o = null;

        try {
            in = new FileInputStream(outFile);
            o = response.getOutputStream();
            response.setContentType("application/x-tar");
            response.setHeader("Content-disposition",
                    "attachment; filename=" + URLEncoder.encode("text.doc", "UTF-8"));// ??
            response.setHeader("Content_Length", String.valueOf(outFile.length())); // download the file.
            int n = 0;
            while ((n = in.read(b)) != -1) {
                o.write(b, 0, n);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                in.close();
                o.flush();
                o.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * ???PDF
     * @param model
     * @param request
     * @param response
     */
    @RequestMapping(value = "/pdfcontrace", method = RequestMethod.GET)
    public void pdfContrace(Model model, HttpServletRequest request, HttpServletResponse response) {
        String contrace_id_str = request.getParameter("contrace_id");
        long contrace_type = Long.valueOf(request.getParameter("contrace_type"));//??1-2-?
        long vehicle_contrace_id = Long.valueOf(request.getParameter("vehicle_contrace_id"));

        String org_id = "";
        String contrace_no = "";
        String customer_name = "";
        String license_plate = "";
        String vehicle_model = "";
        String engine_no = "";
        String carframe_no = "";
        double guide_price = 0;
        String color = "";
        String begin_time = "";
        String end_time = "";
        String driving_user_name = "";
        String driving_user_license_no = "";
        String daily_price = "";
        String daily_available_km = "";
        String over_km_price = "";
        String over_hour_price = "";
        String month_price = "";
        String month_available_km = "";
        String pre_payment = "";
        String deposit = "";
        String monthly_day = "";
        String vehicle_id = "";

        if (contrace_type == 1) {
            VehicleContraceInfo vehicleContraceInfo = this.vehicleServiceManageService
                    .getVehicleContraceInfoById(Long.valueOf(contrace_id_str));
            if (vehicleContraceInfo != null) {
                org_id = String.valueOf(vehicleContraceInfo.getOrg_id());
                contrace_no = vehicleContraceInfo.getContrace_no();
                customer_name = vehicleContraceInfo.getCustomer_name();

                //                List<VehicleContraceVehsInfo> vehsList = this.vehicleServiceManageService.getVehicleContraceVehsListByContraceId(vehicleContraceInfo.getId());
                //                if(vehsList != null) {
                //                    VehicleContraceVehsInfo vehsInfo = vehsList.get(0);
                VehicleContraceVehsInfo vehsInfo = this.vehicleServiceManageService
                        .getContraceVehicleByid(vehicle_contrace_id);
                VehicleInfo vehicleInfo = this.vehicleManageService.getVehicleInfoByid(vehsInfo.getVehicle_id());

                license_plate = vehicleInfo.getLicense_plate();
                vehicle_model = vehicleInfo.getModel();
                engine_no = vehicleInfo.getEngine_no();
                carframe_no = vehicleInfo.getCarframe_no();
                guide_price = vehicleInfo.getGuide_price();
                color = vehicleInfo.getColor();

                driving_user_name = vehsInfo.getDriving_user_name();
                driving_user_license_no = vehsInfo.getDriving_user_license_no();

                daily_price = vehicleInfo.getDaily_price() + "";
                vehicle_id = vehicleInfo.getId() + "";
                //                }

                begin_time = vehicleContraceInfo.getUse_begin();
                end_time = vehicleContraceInfo.getUse_end();

                daily_available_km = vehicleContraceInfo.getDaily_available_km() + "";
                over_km_price = vehicleContraceInfo.getOver_km_price() + "";
                over_hour_price = vehicleContraceInfo.getOver_hour_price() + "";
                month_price = vehicleContraceInfo.getMonth_price() + "";
                month_available_km = vehicleContraceInfo.getMonth_available_km() + "";
                pre_payment = vehicleContraceInfo.getPre_payment() + "";
                deposit = vehicleContraceInfo.getDeposit() + "";
                monthly_day = vehicleContraceInfo.getMonthly_day() + "";
            }
        } else if (contrace_type == 2) {
            PropertyContraceInfo propertyContraceInfo = this.vehicleServiceManageService
                    .getPropertyContraceInfoById(Long.valueOf(contrace_id_str));
            if (propertyContraceInfo != null) {
                org_id = String.valueOf(propertyContraceInfo.getOrg_id());
                contrace_no = propertyContraceInfo.getContrace_no();
                customer_name = propertyContraceInfo.getCustomer_name();
            }
        }
        //1.ContentType
        response.setContentType("multipart/form-data");
        //2.????(??a.pdf)
        response.setHeader("Content-Disposition", "attachment;fileName=" + contrace_no + "_" + vehicle_id + ".pdf");

        Document pdfDoc = new Document(PageSize.A4, 50, 50, 50, 50);
        // ?? pdf ?
        try {
            BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", false);

            Font bold_fontChinese = new Font(bfChinese, 18, Font.BOLD, BaseColor.BLACK);
            Font normal_fontChinese = new Font(bfChinese, 12, Font.NORMAL, BaseColor.BLACK);
            Font normal_desc_fontChinese = new Font(bfChinese, 6, Font.NORMAL, BaseColor.BLACK);

            FileOutputStream pdfFile = new FileOutputStream(new File(
                    appProps.get("normal.contrace.download.path") + contrace_no + "_" + vehicle_id + ".pdf"));
            // pdf ?
            Paragraph paragraph1 = new Paragraph("???", bold_fontChinese);
            paragraph1.setAlignment(Element.ALIGN_CENTER);

            Chunk customer_name_underline = new Chunk(customer_name);
            customer_name_underline.setUnderline(1f, 3f);

            Chunk license_plate_underline = new Chunk(license_plate);
            license_plate_underline.setUnderline(1f, 3f);

            Chunk vehicle_model_underline = new Chunk(vehicle_model);
            vehicle_model_underline.setUnderline(1f, 3f);

            Chunk engine_no_underline = new Chunk(engine_no);
            engine_no_underline.setUnderline(1f, 3f);

            Chunk carframe_no_underline = new Chunk(carframe_no);
            carframe_no_underline.setUnderline(1f, 3f);

            Chunk guide_price_underline = new Chunk(guide_price / 10000 + "");
            guide_price_underline.setUnderline(1f, 3f);

            Chunk color_underline = new Chunk(color);
            color_underline.setUnderline(1f, 3f);

            Chunk begin_time_underline = new Chunk(begin_time);
            begin_time_underline.setUnderline(1f, 3f);

            Chunk end_time_underline = new Chunk(end_time);
            end_time_underline.setUnderline(1f, 3f);

            Chunk driving_user_name_underline = new Chunk(
                    driving_user_name == null ? "___/___" : driving_user_name);
            driving_user_name_underline.setUnderline(1f, 3f);

            Chunk driving_user_license_no_underline = new Chunk(
                    driving_user_license_no == null ? "_____/_____" : driving_user_license_no);
            driving_user_license_no_underline.setUnderline(1f, 3f);

            Chunk daily_price_underline = new Chunk(daily_price);
            daily_price_underline.setUnderline(1f, 3f);

            Chunk daily_available_km_underline = new Chunk(daily_available_km);
            daily_available_km_underline.setUnderline(1f, 3f);

            Chunk over_km_price_underline = new Chunk(over_km_price);
            over_km_price_underline.setUnderline(1f, 3f);

            Chunk over_hour_price_underline = new Chunk(over_hour_price);
            over_hour_price_underline.setUnderline(1f, 3f);

            Chunk month_price_underline = new Chunk(month_price == null ? "_____/_____" : month_price);
            month_price_underline.setUnderline(1f, 3f);

            Chunk month_available_km_underline = new Chunk(
                    month_available_km == null ? "_____/_____" : month_available_km);
            month_available_km_underline.setUnderline(1f, 3f);

            Chunk pre_payment_underline = new Chunk(pre_payment);
            pre_payment_underline.setUnderline(1f, 3f);

            Chunk deposit_underline = new Chunk(deposit);
            deposit_underline.setUnderline(1f, 3f);

            Chunk monthly_day_underline = new Chunk(monthly_day == null ? "___/___" : monthly_day);
            monthly_day_underline.setUnderline(1f, 3f);

            Paragraph paragraph2 = new Paragraph(
                    "???    ???"
                            + contrace_no,
                    normal_fontChinese);
            Paragraph paragraph3 = new Paragraph("" + customer_name_underline
                    + " (    20____________", normal_fontChinese);
            Paragraph paragraph4 = new Paragraph(
                    "??? ??????????",
                    normal_fontChinese);
            Paragraph paragraph5 = new Paragraph("???____"
                    + license_plate_underline + "____?____" + vehicle_model_underline
                    + "________" + color_underline + "____??____" + engine_no_underline
                    + "____?____" + carframe_no_underline + "____??____"
                    + guide_price_underline + "____", normal_fontChinese);
            Paragraph paragraph6 = new Paragraph("?____" + begin_time_underline
                    + "____?____" + end_time_underline + "____",
                    normal_fontChinese);
            Paragraph paragraph7 = new Paragraph("??____"
                    + driving_user_name_underline + "____??____" + driving_user_license_no_underline
                    + "____?", normal_fontChinese);
            Paragraph paragraph8 = new Paragraph("????", normal_fontChinese);
            Paragraph paragraph9 = new Paragraph("1????____" + daily_price_underline
                    + "____??____" + daily_available_km_underline
                    + "____??____" + over_km_price_underline
                    + "____??____" + over_hour_price_underline
                    + "____??30????____"
                    + month_price_underline + "____??____" + month_available_km_underline
                    + "____30",
                    normal_fontChinese);
            Paragraph paragraph10 = new Paragraph(
                    "2??????8:00---20:00",
                    normal_fontChinese);
            Paragraph paragraph11 = new Paragraph(
                    "3??????",
                    normal_fontChinese);
            Paragraph paragraph12 = new Paragraph(
                    "4????____" + pre_payment_underline
                            + "____??____"
                            + monthly_day_underline + "____?",
                    normal_fontChinese);
            Paragraph paragraph13 = new Paragraph("5???____"
                    + deposit_underline
                    + "____(???)???????",
                    normal_fontChinese);
            Paragraph paragraph14 = new Paragraph(
                    "6????1%????????",
                    normal_fontChinese);
            Image image = Image.getInstance(appProps.get("normal.contrace.download.path") + "chekuang.jpg");

            Paragraph paragraph15 = new Paragraph("?", normal_desc_fontChinese);
            Paragraph paragraph16 = new Paragraph(
                    "1?????????",
                    normal_desc_fontChinese);
            Paragraph paragraph17 = new Paragraph(
                    "2????5000?200",
                    normal_desc_fontChinese);
            Paragraph paragraph18 = new Paragraph(
                    "3????",
                    normal_desc_fontChinese);
            Paragraph paragraph19 = new Paragraph(
                    "4???????????????",
                    normal_desc_fontChinese);
            Paragraph paragraph20 = new Paragraph(
                    "5?????????",
                    normal_desc_fontChinese);
            Paragraph paragraph21 = new Paragraph(
                    "6????????????",
                    normal_desc_fontChinese);
            Paragraph paragraph22 = new Paragraph("?", normal_desc_fontChinese);
            Paragraph paragraph23 = new Paragraph(
                    "1???????",
                    normal_desc_fontChinese);
            Paragraph paragraph24 = new Paragraph(
                    "2?????????????????????????",
                    normal_desc_fontChinese);
            Paragraph paragraph25 = new Paragraph(
                    "3????????????????????????",
                    normal_desc_fontChinese);
            Paragraph paragraph26 = new Paragraph(
                    "4?????????????????",
                    normal_desc_fontChinese);
            Paragraph paragraph27 = new Paragraph(
                    "5????????????????????",
                    normal_desc_fontChinese);
            Paragraph paragraph28 = new Paragraph(
                    "6?????????????????????620%?30%??????????????????????",
                    normal_desc_fontChinese);
            Paragraph paragraph29 = new Paragraph(
                    "7???????????",
                    normal_desc_fontChinese);
            Paragraph paragraph30 = new Paragraph(
                    "8????????",
                    normal_desc_fontChinese);

            Paragraph paragraph31 = new Paragraph(
                    "9??????????????????????",
                    normal_desc_fontChinese);
            Paragraph paragraph32 = new Paragraph(
                    "10????????????",
                    normal_desc_fontChinese);
            Paragraph paragraph33 = new Paragraph(
                    "11???????????500-1000",
                    normal_desc_fontChinese);
            Paragraph paragraph34 = new Paragraph(
                    "12??????????",
                    normal_desc_fontChinese);
            Paragraph paragraph35 = new Paragraph(
                    "13?????_________________________________7??????????\n",
                    normal_desc_fontChinese);
            Paragraph paragraph36 = new Paragraph(
                    "14?????????????????",
                    normal_desc_fontChinese);
            Paragraph paragraph37 = new Paragraph(
                    "15?????????5000????????????????400?500100????",
                    normal_desc_fontChinese);
            Paragraph paragraph38 = new Paragraph(
                    "16???????????????????????????",
                    normal_desc_fontChinese);
            Paragraph paragraph39 = new Paragraph("?", normal_desc_fontChinese);
            Paragraph paragraph40 = new Paragraph(
                    "1??????????????",
                    normal_desc_fontChinese);
            Paragraph paragraph41 = new Paragraph(
                    "2????????????",
                    normal_desc_fontChinese);
            Paragraph paragraph42 = new Paragraph(
                    "3????",
                    normal_desc_fontChinese);
            Paragraph paragraph43 = new Paragraph(
                    "4??????????50%?????????",
                    normal_desc_fontChinese);
            Paragraph paragraph44 = new Paragraph(
                    "5???????????????????",
                    normal_desc_fontChinese);
            Paragraph paragraph45 = new Paragraph(
                    "6???????????????",
                    normal_desc_fontChinese);
            Paragraph paragraph46 = new Paragraph(
                    "7?????????50%",
                    normal_desc_fontChinese);
            Paragraph paragraph47 = new Paragraph(
                    "8???7????????????",
                    normal_desc_fontChinese);
            Paragraph paragraph48 = new Paragraph(
                    "9???_____/?40??8????_____??",
                    normal_desc_fontChinese);
            Paragraph paragraph49 = new Paragraph(
                    "10?????___?????",
                    normal_desc_fontChinese);
            Paragraph paragraph50 = new Paragraph(
                    "11????",
                    normal_desc_fontChinese);
            Paragraph paragraph51 = new Paragraph("??", normal_desc_fontChinese);
            Paragraph paragraph52 = new Paragraph(
                    "1?????????20%????",
                    normal_desc_fontChinese);
            Paragraph paragraph53 = new Paragraph(
                    "2???????????????????",
                    normal_desc_fontChinese);
            Paragraph paragraph54 = new Paragraph(
                    "?????___________________\n",
                    normal_desc_fontChinese);
            Paragraph paragraph55 = new Paragraph(
                    "???????????????",
                    normal_desc_fontChinese);
            Paragraph paragraph56 = new Paragraph(
                    "???????",
                    normal_desc_fontChinese);
            Paragraph paragraph57 = new Paragraph("?????????",
                    normal_desc_fontChinese);
            Paragraph paragraph58 = new Paragraph(
                    "???                     ?",
                    normal_desc_fontChinese);
            Paragraph paragraph59 = new Paragraph(
                    "                                           ???                            ??",
                    normal_desc_fontChinese);

            //  Document ?File  PdfWriter ?
            PdfWriter.getInstance(pdfDoc, pdfFile);
            pdfDoc.open(); //  Document 

            // ??
            pdfDoc.add(paragraph1);
            pdfDoc.add(new Chunk("\n\n"));
            pdfDoc.add(paragraph2);
            pdfDoc.add(paragraph3);
            pdfDoc.add(paragraph4);
            pdfDoc.add(paragraph5);
            pdfDoc.add(paragraph6);
            pdfDoc.add(paragraph7);
            pdfDoc.add(paragraph8);
            pdfDoc.add(paragraph9);
            pdfDoc.add(paragraph10);
            pdfDoc.add(paragraph11);
            pdfDoc.add(paragraph12);
            pdfDoc.add(paragraph13);
            pdfDoc.add(paragraph14);
            pdfDoc.add(image);

            pdfDoc.newPage();
            pdfDoc.add(paragraph15);
            pdfDoc.add(paragraph16);
            pdfDoc.add(paragraph17);
            pdfDoc.add(paragraph18);
            pdfDoc.add(paragraph19);
            pdfDoc.add(paragraph20);
            pdfDoc.add(paragraph21);
            pdfDoc.add(paragraph22);
            pdfDoc.add(paragraph23);
            pdfDoc.add(paragraph24);
            pdfDoc.add(paragraph25);
            pdfDoc.add(paragraph26);
            pdfDoc.add(paragraph27);
            pdfDoc.add(paragraph28);
            pdfDoc.add(paragraph29);
            pdfDoc.add(paragraph30);
            pdfDoc.add(paragraph31);
            pdfDoc.add(paragraph32);
            pdfDoc.add(paragraph33);
            pdfDoc.add(paragraph34);
            pdfDoc.add(paragraph35);
            pdfDoc.add(paragraph36);
            pdfDoc.add(paragraph37);
            pdfDoc.add(paragraph38);
            pdfDoc.add(paragraph39);
            pdfDoc.add(paragraph40);
            pdfDoc.add(paragraph41);
            pdfDoc.add(paragraph42);
            pdfDoc.add(paragraph43);
            pdfDoc.add(paragraph44);
            pdfDoc.add(paragraph45);
            pdfDoc.add(paragraph46);
            pdfDoc.add(paragraph47);
            pdfDoc.add(paragraph48);
            pdfDoc.add(paragraph49);
            pdfDoc.add(paragraph50);
            pdfDoc.add(paragraph51);
            pdfDoc.add(paragraph52);
            pdfDoc.add(paragraph53);
            pdfDoc.add(paragraph54);
            pdfDoc.add(paragraph55);
            pdfDoc.add(paragraph56);
            pdfDoc.add(paragraph57);
            pdfDoc.add(paragraph58);
            pdfDoc.add(paragraph59);

            pdfDoc.close();

            ServletOutputStream out;
            //File(?download.pdf)
            File file = new File(
                    appProps.get("normal.contrace.download.path") + contrace_no + "_" + vehicle_id + ".pdf");

            try {
                FileInputStream inputStream = new FileInputStream(file);
                //3.response?ServletOutputStream(out)
                out = response.getOutputStream();
                int b = 0;
                byte[] buffer = new byte[512];
                while (b != -1) {
                    b = inputStream.read(buffer);
                    //4.?(out)
                    out.write(buffer, 0, b);
                }
                inputStream.close();
                out.close();
                out.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * ??
     * @param model
     * @param request
     * @param response
     */
    @RequestMapping(value = "/pdfhunchecontrace", method = RequestMethod.GET)
    public void pdfHuncheContrace(Model model, HttpServletRequest request, HttpServletResponse response) {
        String contrace_id_str = request.getParameter("contrace_id");

        String org_id = "";
        String contrace_no = "";
        String customer_name = "";
        String vehicle_id = "";
        String daily_available_km = "";

        VehicleContraceInfo vehicleContraceInfo = this.vehicleServiceManageService
                .getVehicleContraceInfoById(Long.valueOf(contrace_id_str));
        if (vehicleContraceInfo != null) {
            org_id = String.valueOf(vehicleContraceInfo.getOrg_id());
            contrace_no = vehicleContraceInfo.getContrace_no();
            customer_name = vehicleContraceInfo.getCustomer_name();
            daily_available_km = vehicleContraceInfo.getDaily_available_km() + "";
        } else {
            PropertyContraceInfo propertyContraceInfo = this.vehicleServiceManageService
                    .getPropertyContraceInfoById(Long.valueOf(contrace_id_str));
            if (propertyContraceInfo != null) {
                org_id = String.valueOf(propertyContraceInfo.getOrg_id());
                contrace_no = propertyContraceInfo.getContrace_no();
                customer_name = propertyContraceInfo.getCustomer_name();
            }
        }

        List<VehicleContraceVehsInfo> vehicleContraceVehsInfoList = this.vehicleServiceManageService
                .getVehicleContraceVehsListByContraceId(Long.valueOf(contrace_id_str));

        //1.ContentType
        response.setContentType("multipart/form-data");
        //2.????(??a.pdf)
        response.setHeader("Content-Disposition", "attachment;fileName=" + contrace_no + ".pdf");

        Document pdfDoc = new Document(PageSize.A4, 50, 50, 50, 50);
        // ?? pdf ?
        try {
            BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", false);

            Font bold_fontChinese = new Font(bfChinese, 18, Font.BOLD, BaseColor.BLACK);
            Font normal_fontChinese = new Font(bfChinese, 12, Font.NORMAL, BaseColor.BLACK);
            Font normal_desc_fontChinese = new Font(bfChinese, 6, Font.NORMAL, BaseColor.BLACK);

            FileOutputStream pdfFile = new FileOutputStream(
                    new File(appProps.get("hunche.contrace.download.path") + contrace_no + ".pdf"));
            // pdf ?
            Paragraph paragraph1 = new Paragraph("???", bold_fontChinese);
            paragraph1.setAlignment(Element.ALIGN_CENTER);

            Paragraph paragraph2 = new Paragraph(
                    "???", normal_fontChinese);
            Paragraph paragraph3 = new Paragraph("" + customer_name + " (",
                    normal_fontChinese);
            Paragraph paragraph4 = new Paragraph(
                    "?????________________???",
                    normal_fontChinese);
            Paragraph paragraph5 = new Paragraph("??????",
                    normal_fontChinese);
            // table
            PdfPTable table = new PdfPTable(4);
            table.setWidthPercentage(100);
            table.setHorizontalAlignment(PdfPTable.ALIGN_LEFT);
            PdfPCell cell = new PdfPCell();
            cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
            // 
            cell.setPhrase(new Paragraph("?", normal_fontChinese));
            table.addCell(cell);
            cell.setPhrase(new Paragraph("", normal_fontChinese));
            table.addCell(cell);
            cell.setPhrase(new Paragraph("?/", normal_fontChinese));
            table.addCell(cell);
            cell.setPhrase(new Paragraph("?", normal_fontChinese));
            table.addCell(cell);
            // ?
            for (VehicleContraceVehsInfo v : vehicleContraceVehsInfoList) {

                PdfPCell newcell = new PdfPCell();
                newcell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
                newcell.setPhrase(new Paragraph("1", normal_fontChinese));
                table.addCell(newcell);
                newcell.setPhrase(new Paragraph(v.getModel(), normal_fontChinese));
                table.addCell(newcell);
                newcell.setPhrase(new Paragraph(v.getDaily_price() + "", normal_fontChinese));
                table.addCell(newcell);
                newcell.setPhrase(new Paragraph(daily_available_km, normal_fontChinese));
                table.addCell(newcell);
            }

            Paragraph paragraph6 = new Paragraph(
                    "??_________________________________________________________________",
                    normal_fontChinese);
            Paragraph paragraph7 = new Paragraph(
                    "____________________________?______",
                    normal_fontChinese);
            Paragraph paragraph8 = new Paragraph("????", normal_fontChinese);
            Paragraph paragraph9 = new Paragraph(
                    "???________________________???________________________",
                    normal_fontChinese);
            Paragraph paragraph10 = new Paragraph("?", normal_fontChinese);
            Paragraph paragraph11 = new Paragraph(
                    "???????????????",
                    normal_fontChinese);
            Paragraph paragraph12 = new Paragraph("?", normal_fontChinese);
            Paragraph paragraph13 = new Paragraph(
                    "??????????????",
                    normal_fontChinese);
            Paragraph paragraph14 = new Paragraph(
                    "?????????",
                    normal_fontChinese);
            Paragraph paragraph15 = new Paragraph("?????",
                    normal_fontChinese);
            Paragraph paragraph16 = new Paragraph(
                    "(/)                                       (/)",
                    normal_fontChinese);
            Paragraph paragraph17 = new Paragraph(
                    "                                                      ??", normal_fontChinese);
            Paragraph paragraph18 = new Paragraph(
                    "??                                               ??  ",
                    normal_fontChinese);
            Paragraph paragraph19 = new Paragraph(
                    "                                                      201          ",
                    normal_fontChinese);

            //  Document ?File  PdfWriter ?
            PdfWriter.getInstance(pdfDoc, pdfFile);
            pdfDoc.open(); //  Document 

            // ??
            pdfDoc.add(paragraph1);
            pdfDoc.add(new Chunk("\n\n"));
            pdfDoc.add(paragraph2);
            pdfDoc.add(paragraph3);
            pdfDoc.add(paragraph4);
            pdfDoc.add(paragraph5);
            pdfDoc.add(table);
            pdfDoc.add(paragraph6);
            pdfDoc.add(paragraph7);
            pdfDoc.add(paragraph8);
            pdfDoc.add(paragraph9);
            pdfDoc.add(paragraph10);
            pdfDoc.add(paragraph11);
            pdfDoc.add(paragraph12);
            pdfDoc.add(paragraph13);
            pdfDoc.add(paragraph14);
            pdfDoc.add(paragraph15);
            pdfDoc.add(paragraph16);
            pdfDoc.add(paragraph17);
            pdfDoc.add(paragraph18);
            pdfDoc.add(paragraph19);

            pdfDoc.close();

            ServletOutputStream out;
            //File(?download.pdf)
            File file = new File(appProps.get("hunche.contrace.download.path") + contrace_no + ".pdf");

            try {
                FileInputStream inputStream = new FileInputStream(file);
                //3.response?ServletOutputStream(out)
                out = response.getOutputStream();
                int b = 0;
                byte[] buffer = new byte[512];
                while (b != -1) {
                    b = inputStream.read(buffer);
                    //4.?(out)
                    out.write(buffer, 0, b);
                }
                inputStream.close();
                out.close();
                out.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * ????Excel
     * @param model
     * @param request
     * @param response
     */
    @RequestMapping(value = "/cashierstatement", method = RequestMethod.GET)
    public void cashierStatement(Model model, HttpServletRequest request, HttpServletResponse response) {
        String contrace_id_str = request.getParameter("contrace_id");

        String contrace_no = "";
        String customer_name = "";
        String customer_no = "";
        String daily_available_km = "";
        String contrace_type = "";

        VehicleContraceInfo vehicleContraceInfo = this.vehicleServiceManageService
                .getVehicleContraceInfoById(Long.valueOf(contrace_id_str));
        if (vehicleContraceInfo != null) {
            contrace_no = vehicleContraceInfo.getContrace_no();
            customer_name = vehicleContraceInfo.getCustomer_name();
            daily_available_km = vehicleContraceInfo.getDaily_available_km() + "";
        } else {
            PropertyContraceInfo propertyContraceInfo = this.vehicleServiceManageService
                    .getPropertyContraceInfoById(Long.valueOf(contrace_id_str));
            if (propertyContraceInfo != null) {
                contrace_no = propertyContraceInfo.getContrace_no();
                customer_name = propertyContraceInfo.getCustomer_name();
                contrace_type = "?";
            }
        }

        List<VehicleContraceVehsInfo> vehicleContraceVehsInfoList = this.vehicleServiceManageService
                .getVehicleContraceVehsListByContraceId(Long.valueOf(contrace_id_str));

        //1.ContentType
        response.setContentType("multipart/form-data");
        //2.????(??a.pdf)
        response.setHeader("Content-Disposition", "attachment;fileName=" + contrace_no + ".xls");

        // webbookExcel
        HSSFWorkbook wb = new HSSFWorkbook();

        for (VehicleContraceVehsInfo v : vehicleContraceVehsInfoList) {
            // webbooksheet,Excelsheet
            HSSFSheet sheet = wb.createSheet(v.getLicense_plate());
            // sheet0,??poiExcel?short
            HSSFRow row = sheet.createRow((int) 0);
            // ? 
            HSSFCellStyle style = wb.createCellStyle();
            style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // ?

            HSSFCell cell = row.createCell((short) 0);
            cell.setCellValue("??");
            cell.setCellStyle(style);
            cell = row.createCell((short) 1);
            cell.setCellValue("?");
            cell.setCellStyle(style);
            cell = row.createCell((short) 2);
            cell.setCellValue("");
            cell.setCellStyle(style);
            cell = row.createCell((short) 3);
            cell.setCellValue("?");
            cell.setCellStyle(style);
            cell = row.createCell((short) 4);
            cell.setCellValue("");
            cell.setCellStyle(style);

            row = sheet.createRow(1);
            row.createCell((short) 0).setCellValue(customer_name);
            row.createCell((short) 1).setCellValue(customer_no);
            row.createCell((short) 2).setCellValue(contrace_type);
            row.createCell((short) 3).setCellValue("");
            row.createCell((short) 4).setCellValue("");

            row = sheet.createRow(2);
            HSSFCell cell2 = row.createCell((short) 0);
            cell2.setCellValue("?");
            cell2.setCellStyle(style);
            cell2 = row.createCell((short) 1);
            cell2.setCellValue("??");
            cell2.setCellStyle(style);
            cell2 = row.createCell((short) 2);
            cell2.setCellValue("");
            cell2.setCellStyle(style);
            cell2 = row.createCell((short) 3);
            cell2.setCellValue("");
            cell2.setCellStyle(style);
            cell2 = row.createCell((short) 4);
            cell2.setCellValue("??");
            cell2.setCellStyle(style);

            row = sheet.createRow(3);
            row.createCell((short) 0).setCellValue(v.getKm());
            row.createCell((short) 1).setCellValue(v.getOil_percent());
            long over_km = (v.getReturn_km() - v.getKm()) > 0 ? (v.getReturn_km() - v.getKm()) : 0;
            row.createCell((short) 2).setCellValue(over_km);
            row.createCell((short) 3).setCellValue("");
            row.createCell((short) 4).setCellValue("");

            row = sheet.createRow(4);
            HSSFCell cell4 = row.createCell((short) 0);
            cell4.setCellValue("");
            cell4.setCellStyle(style);
            cell4 = row.createCell((short) 1);
            cell4.setCellValue("?");
            cell4.setCellStyle(style);
            cell4 = row.createCell((short) 2);
            cell4.setCellValue("");
            cell4.setCellStyle(style);
            cell4 = row.createCell((short) 3);
            cell4.setCellValue("");
            cell4.setCellStyle(style);
            cell4 = row.createCell((short) 4);
            cell4.setCellValue("");
            cell4.setCellStyle(style);

            row = sheet.createRow(5);
            row.createCell((short) 0).setCellValue(v.getReturn_km());
            row.createCell((short) 1).setCellValue(v.getRevert_oil_percent());
            long over_oil = (v.getOil_percent() - v.getRevert_oil_percent()) > 0
                    ? (v.getOil_percent() - v.getRevert_oil_percent())
                    : 0;
            row.createCell((short) 2).setCellValue(over_oil);
            row.createCell((short) 3).setCellValue("");
            row.createCell((short) 4).setCellValue(v.getActually_price());
        }

        // ?
        try {

            String path = appProps.get("contrace.over.download.path") + contrace_no + ".xls";
            FileOutputStream fout = new FileOutputStream(path);
            wb.write(fout);
            fout.close();

            ServletOutputStream out;
            //File(?download.pdf)
            File file = new File(path);

            try {
                FileInputStream inputStream = new FileInputStream(file);
                //3.response?ServletOutputStream(out)
                out = response.getOutputStream();
                int b = 0;
                byte[] buffer = new byte[512];
                while (b != -1) {
                    b = inputStream.read(buffer);
                    //4.?(out)
                    out.write(buffer, 0, b);
                }
                inputStream.close();
                out.close();
                out.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}