package com.yutu.base.service;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.yutu.base.entity.NoteResult;
import com.yutu.base.entity.Response;
import com.yutu.base.entity.SaleDetail;
import com.yutu.base.entity.SaleRules;
import com.yutu.base.utils.HttpsSendData;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;

@Service
public class DownLoadService {

    private Logger logger = Logger.getLogger("download");

    @Value("${spring.urlConfig.overseasAirTicketUrl}")
    private String overseasAirTicketUrl;
    @Value("${spring.urlConfig.productServiceUrl}")
    private String productServiceUrl;
    @Value("${spring.pathConfig.saleReportExcelPath}")
    private String  saleReportExcelPath;
    @Value("${spring.pathConfig.saleDetailReportExcelPath}")
    private String  saleDetailReportExcelPath;

    @Autowired
    private SaleDetailReportService saleDetailReportService;
    @Autowired
    private ParseToSaleDetail parseToSaleDetail;

    /**
     * 获取销售数据
     * @param requestBody
     * @return
     */
    public Response getSaleDetailReportData(String requestBody){
        if(StringUtils.isBlank(requestBody)){
            return Response.error("参数不能为空 [requestBody]");
        }
        logger.info("开始获取数据,参数:" + requestBody);
        long beginTime = System.currentTimeMillis();
        String result = HttpsSendData.getPost(overseasAirTicketUrl+"orderInfo/getReportExcelData.do",requestBody);
        if(StringUtils.isBlank(result)){
            return Response.error("获取数据失败");
        }
        JSONObject resultObj = JSONObject.parseObject(result);
        if(resultObj.getInteger("status") != 0){
            return Response.error("获取数据失败");
        }
        logger.info("获取数据成功,共用时:" + (System.currentTimeMillis()-beginTime));
        Map<String,String> resultMap = resultObj.getObject("data",Map.class);
        Response response = new Response();
        response.setStatus(Response.Status.SUCCEED);
        response.setData(resultMap);
        response.setErrorMessage("获取成功");
        return response;
    }

    /**
     * 下载销售报表
     * @param requestBody
     * @return
     */
    public Response downLoadSaleDetailReport(String requestBody){
        if(StringUtils.isBlank(requestBody)){
            return Response.error("参数不能为空 [requestBody]");
        }
        String customerId = JSONObject.parseObject(requestBody).getString("customerId");

        logger.info("开始获取数据,参数:" + requestBody);
        long beginTime = System.currentTimeMillis();
        String result = HttpsSendData.getPost(overseasAirTicketUrl+"orderInfo/getReportExcelData.do",requestBody);
        if(StringUtils.isBlank(result)){
            return Response.error("获取数据失败");
        }
        JSONObject resultObj = JSONObject.parseObject(result);
        if(resultObj.getInteger("status") != 0){
            return Response.error("获取数据失败");
        }
        logger.info("获取数据成功,共用时:" + (System.currentTimeMillis()-beginTime));
        logger.info("开始解析数据生成报表 ...");
        Map<String,String> resultMap = resultObj.getObject("data",Map.class);
        Response response = new Response();
        try{
            final String filePath =  saleDetailReportExcelPath + customerId + "/SalesDetailReport/";//指定文件保存路径
            String path = saleDetailReportService.createExcel(resultMap, filePath, "");
            response.setStatus(Response.Status.SUCCEED);
            response.setData(path);
            response.setErrorMessage("生成成功,总用时:"+(System.currentTimeMillis()-beginTime)+"ms");
            logger.info("生成销售明细报表,总用时:"+(System.currentTimeMillis()-beginTime)+"ms");
            return response;
        }catch (Exception e){
            logger.error("生成报表发生异常",e);
            return Response.error("生成报表发生异常");
        }
    }

    /**
     * 下载加价规则
     * @param requestBody
     * @return
     */
    public Response downLoadSaleRules(String requestBody){
        JSONObject requestObj = JSONObject.parseObject(requestBody);
        String customerId = requestObj.getString("customerId");
        long beginTime = System.currentTimeMillis();
        //请求运价直连工程获取源数据
        String result=HttpsSendData.getPost(productServiceUrl+"SaleRules/findByCustomerId.do", requestBody);
        if(StringUtils.isBlank(result)){
            return Response.error("获取加价规则源数据异常");
        }
        JSONObject resultObj = JSONObject.parseObject(result);
        if(resultObj.getInteger("status") != 0){
            return Response.error("获取加价规则源数据失败");
        }
        JSONArray dataArr = resultObj.getJSONArray("data");
        if(dataArr.size() == 0){
            return Response.error("加价规则源数据共 0 条");
        }
        List<SaleRules> saleRules = new ArrayList<>();
        for(int i=0;i<dataArr.size();i++){
            JSONObject data = dataArr.getJSONObject(i);
            SaleRules saleRule = new SaleRules(data.getString("id"),data.getString("customerId"),data.getString("channelId"),
                    data.getString("store"),data.getString("ruleCode"),data.getString("carrier"),data.getString("org"),
                    data.getString("dst"),data.getInteger("routeType"),data.getInteger("policyType"),data.getString("policyDesc"),
                    data.getInteger("point"),data.getInteger("costPrice"),data.getString("saleSdate"),data.getString("saleEdate"),
                    data.getString("ticketDays"),data.getString("tripSdate"),data.getString("tripEdate"),data.getInteger("status"),
                    data.getInteger("maxPrice"),data.getInteger("minPrice"),data.getInteger("minProfit"),
                    data.getBigDecimal("adultPricePoint"),data.getInteger("adultAddPrice"),data.getInteger("adultAddTax"),data.getBigDecimal("adultTaxPoint"),
                    data.getBigDecimal("childPricePoint"),data.getInteger("childAddPrice"),data.getInteger("childAddTax"),data.getBigDecimal("childTaxPoint"),
                    data.getString("operator"),data.getDate("createTime"),data.getDate("updateTime"),data.getInteger("deleted"),
                    data.getString("notApplicableFlightNum"),data.getString("applyFlightNum"),data.getInteger("remainCabinNum"),data.getString("cabinCode"),
                    data.getString("flightCycle"),data.getDouble("floorPrice"),data.getDouble("floorTax"),data.getInteger("fitShare"),data.getString("fitNationality"),
                    data.getString("disFitNationality"),data.getString("ageRange"),data.getString("attention"));
            saleRules.add(saleRule);
        }
        String filePath = saleReportExcelPath+customerId+"/SaleRulesExcel\\";
        File temp = new File(filePath);
        if (!temp.exists()) {  temp.mkdir();  }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
        String date = sdf.format(new Date());
        File file = new File(date+"~销售规则.xls");
        FileOutputStream os = null;
        HSSFWorkbook book = null;
        try {

            //创建工作薄
            book = new HSSFWorkbook();
            HSSFSheet sheet = book.createSheet("销售规则");

            sheet.setColumnWidth(31, 7500);

            // 创建单元格样式
            HSSFCellStyle cellStyleTitle = book.createCellStyle();
            // 指定单元格居中对齐
            cellStyleTitle.setAlignment(HorizontalAlignment.CENTER);
            // 指定单元格垂直居中对齐
            cellStyleTitle.setVerticalAlignment(VerticalAlignment.CENTER);
            // 指定当单元格内容显示不下时自动换行
            cellStyleTitle.setWrapText(false);
            // ------------------------------------------------------------------
            HSSFCellStyle cellStyle = book.createCellStyle();
            // 指定单元格居中对齐
            cellStyle.setAlignment(HorizontalAlignment.CENTER);
            // 指定单元格垂直居中对齐
            cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
            // 指定当单元格内容显示不下时自动换行
            cellStyle.setWrapText(false);
            // ------------------------------------------------------------------
            // 设置单元格字体
            HSSFFont font = book.createFont();
            font.setBold(true);
            font.setFontName("宋体");
            font.setColor(new Short("255"));
            font.setFontHeight((short) 200);
            cellStyleTitle.setFont(font);
            //创建标题行
            Row title =  sheet.createRow(0);
            title.setRowStyle(cellStyleTitle);
            title.createCell(0).setCellValue("渠道");
            title.createCell(1).setCellValue("店铺编码");
            title.createCell(2).setCellValue("规则编号");
            title.createCell(3).setCellValue("航司两字代码");
            title.createCell(4).setCellValue("出港");
            title.createCell(5).setCellValue("到港");
            title.createCell(6).setCellValue("适用航班号");
            title.createCell(7).setCellValue("不适用航班号");
            title.createCell(8).setCellValue("行程类型");
            title.createCell(9).setCellValue("政策类型");
            title.createCell(10).setCellValue("政策描述");
            title.createCell(11).setCellValue("积分值");
            title.createCell(12).setCellValue("底价");
            title.createCell(13).setCellValue("销售开始日期");
            title.createCell(14).setCellValue("销售结束日期");
            title.createCell(15).setCellValue("提前出票天数");
            title.createCell(16).setCellValue("旅行开始日期");
            title.createCell(17).setCellValue("旅行结束日期");
            title.createCell(18).setCellValue("状态");
            title.createCell(19).setCellValue("最小金额");
            title.createCell(20).setCellValue("最大金额");
            title.createCell(21).setCellValue("最低利润值");
            title.createCell(22).setCellValue("成人加点");
            title.createCell(23).setCellValue("成人留钱");
            title.createCell(24).setCellValue("成人加税");
            title.createCell(25).setCellValue("成人加税点");
            title.createCell(26).setCellValue("儿童加点");
            title.createCell(27).setCellValue("儿童留钱");
            title.createCell(28).setCellValue("儿童加税");
            title.createCell(29).setCellValue("儿童加税点");
            title.createCell(30).setCellValue("舱位代码");
            title.createCell(31).setCellValue("销售规则Id");
            title.createCell(32).setCellValue("航班周期");
            title.createCell(33).setCellValue("底价票");
            title.createCell(34).setCellValue("底价税");
            title.createCell(35).setCellValue("适用共享");
            title.createCell(36).setCellValue("适用国籍");
            title.createCell(37).setCellValue("不适用国籍");
            title.createCell(38).setCellValue("年龄范围");
            title.createCell(39).setCellValue("购票需知");
            //遍历销售规则数据列表
            for (int i = 0; i < saleRules.size(); i++) {
                Row r = sheet.createRow(i+1);

                Cell channelIdCell = r.createCell(0);
                channelIdCell.setCellStyle(cellStyle);
                if (saleRules.get(i).getChannelId()==null) {
                    channelIdCell.setCellValue("*");
                }else{
                    channelIdCell.setCellValue(saleRules.get(i).getChannelId());
                }

                Cell store = r.createCell(1);
                store.setCellStyle(cellStyle);
                if (saleRules.get(i).getStore()==null) {
                    store.setCellValue("*");
                }else{
                    store.setCellValue(saleRules.get(i).getStore());
                }

                Cell ruleCode = r.createCell(2);
                ruleCode.setCellStyle(cellStyle);
                if (saleRules.get(i).getRuleCode()==null) {
                    ruleCode.setCellValue("");
                }else{
                    ruleCode.setCellValue(saleRules.get(i).getRuleCode());
                }

                Cell carrierCell = r.createCell(3);
                carrierCell.setCellStyle(cellStyle);
                if (saleRules.get(i).getCarrier()==null) {
                    carrierCell.setCellValue("");
                }else{
                    carrierCell.setCellValue(saleRules.get(i).getCarrier());
                }

                Cell orgCell = r.createCell(4);
                orgCell.setCellStyle(cellStyle);
                if (saleRules.get(i).getOrg()==null) {
                    orgCell.setCellValue("*");
                }else{
                    orgCell.setCellValue(saleRules.get(i).getOrg());
                }

                Cell dstCell = r.createCell(5);
                dstCell.setCellStyle(cellStyle);
                if (saleRules.get(i).getDst()==null) {
                    dstCell.setCellValue("*");
                }else{
                    dstCell.setCellValue(saleRules.get(i).getDst());
                }
                Cell applyFlightNumCell = r.createCell(6);
                applyFlightNumCell.setCellStyle(cellStyle);
                if (StringUtils.isBlank(saleRules.get(i).getApplyFlightNum())) {
                    applyFlightNumCell.setCellValue("");
                }else{
                    applyFlightNumCell.setCellValue(saleRules.get(i).getApplyFlightNum());
                }
                Cell notApplicableFlightNumCell = r.createCell(7);
                notApplicableFlightNumCell.setCellStyle(cellStyle);
                if (StringUtils.isBlank(saleRules.get(i).getNotApplicableFlightNum())) {
                    notApplicableFlightNumCell.setCellValue("");
                }else{
                    notApplicableFlightNumCell.setCellValue(saleRules.get(i).getNotApplicableFlightNum());
                }


                Cell routeTypeCell = r.createCell(8);
                routeTypeCell.setCellStyle(cellStyle);
                if (saleRules.get(i).getRouteType()==null) {
                    routeTypeCell.setCellValue("不限");
                }else if (saleRules.get(i).getRouteType()==0) {
                    routeTypeCell.setCellValue("不限");
                }else if (saleRules.get(i).getRouteType()==1) {
                    routeTypeCell.setCellValue("单程");
                }else if (saleRules.get(i).getRouteType()==2) {
                    routeTypeCell.setCellValue("往返");
                }else{
                    routeTypeCell.setCellValue("不限");
                }

                Cell policyType = r.createCell(9);
                policyType.setCellStyle(cellStyle);
                if (saleRules.get(i).getPolicyType()==null) {
                    policyType.setCellValue("普通");
                }else if (saleRules.get(i).getPolicyType()==1) {
                    policyType.setCellValue("普通");
                }else if (saleRules.get(i).getPolicyType()==2) {
                    policyType.setCellValue("积分");
                }else if (saleRules.get(i).getPolicyType()==3) {
                    policyType.setCellValue("普通促销");
                }else if (saleRules.get(i).getPolicyType()==4) {
                    policyType.setCellValue("扣位");
                }else if (saleRules.get(i).getPolicyType()==5) {
                    policyType.setCellValue("促销积分");
                }else if (saleRules.get(i).getPolicyType()==6) {
                    policyType.setCellValue("AG");
                }else if (saleRules.get(i).getPolicyType()==7) {
                    policyType.setCellValue("私有运价");
                }else{
                    policyType.setCellValue("普通");
                }

                Cell policyDesc = r.createCell(10);
                policyDesc.setCellStyle(cellStyle);
                if (saleRules.get(i).getPolicyDesc()==null) {
                    policyDesc.setCellValue("");
                }else{
                    policyDesc.setCellValue(saleRules.get(i).getPolicyDesc());
                }

                Cell point = r.createCell(11);
                point.setCellStyle(cellStyle);
                if (saleRules.get(i).getPoint()==null) {
                    point.setCellValue("");
                }else{
                    point.setCellValue(saleRules.get(i).getPoint());
                }

                Cell costPrice = r.createCell(12);
                costPrice.setCellStyle(cellStyle);
                if (saleRules.get(i).getCostPrice()==null) {
                    costPrice.setCellValue("");
                }else{
                    costPrice.setCellValue(saleRules.get(i).getCostPrice());
                }

                Cell saleSdate = r.createCell(13);
                saleSdate.setCellStyle(cellStyle);
                if (saleRules.get(i).getSaleSdate()==null) {
                    saleSdate.setCellValue("");
                }else{
                    saleSdate.setCellValue(saleRules.get(i).getSaleSdate());
                }

                Cell saleEdate = r.createCell(14);
                saleEdate.setCellStyle(cellStyle);
                if (saleRules.get(i).getSaleEdate()==null) {
                    saleEdate.setCellValue("");
                }else{
                    saleEdate.setCellValue(saleRules.get(i).getSaleEdate());
                }

                Cell ticketDays = r.createCell(15);
                ticketDays.setCellStyle(cellStyle);
                if (saleRules.get(i).getTicketDays()==null) {
                    ticketDays.setCellValue("");
                }else{
                    ticketDays.setCellValue(saleRules.get(i).getTicketDays());
                }


                Cell tripSdate = r.createCell(16);
                tripSdate.setCellStyle(cellStyle);
                if (saleRules.get(i).getTripSdate()==null) {
                    tripSdate.setCellValue("");
                }else{
                    tripSdate.setCellValue(saleRules.get(i).getTripSdate());
                }

                Cell tripEdate = r.createCell(17);
                tripEdate.setCellStyle(cellStyle);
                if (saleRules.get(i).getTripEdate()==null) {
                    tripEdate.setCellValue("");
                }else{
                    tripEdate.setCellValue(saleRules.get(i).getTripEdate());
                }


                Cell statusCell = r.createCell(18);
                statusCell.setCellStyle(cellStyle);
                if (saleRules.get(i).getStatus()==null) {
                    statusCell.setCellValue("禁用");
                }else if (saleRules.get(i).getStatus()==0) {
                    statusCell.setCellValue("禁用");
                }else if (saleRules.get(i).getStatus()==1) {
                    statusCell.setCellValue("启用");
                }else{
                    statusCell.setCellValue("禁用");
                }


                Cell minPrice = r.createCell(19);
                minPrice.setCellStyle(cellStyle);
                if (saleRules.get(i).getMinPrice()==null) {
                    minPrice.setCellValue("");
                }else{
                    minPrice.setCellValue(saleRules.get(i).getMinPrice());
                }

                Cell maxPrice = r.createCell(20);
                maxPrice.setCellStyle(cellStyle);
                if (saleRules.get(i).getMaxPrice()==null) {
                    maxPrice.setCellValue("");
                }else{
                    maxPrice.setCellValue(saleRules.get(i).getMaxPrice());
                }

                Cell minProfit = r.createCell(21);
                minProfit.setCellStyle(cellStyle);
                if (saleRules.get(i).getMinProfit()==null) {
                    minProfit.setCellValue("");
                }else{
                    minProfit.setCellValue(saleRules.get(i).getMinProfit());
                }

                Cell adultPricePoint = r.createCell(22);
                adultPricePoint.setCellStyle(cellStyle);
                if (saleRules.get(i).getAdultPricePoint()==null) {
                    adultPricePoint.setCellValue(0.0);
                }else{
                    adultPricePoint.setCellValue(saleRules.get(i).getAdultPricePoint().toString());
                }

                Cell adultAddPrice = r.createCell(23);
                adultAddPrice.setCellStyle(cellStyle);
                if (saleRules.get(i).getAdultAddPrice()==null) {
                    adultAddPrice.setCellValue(0);
                }else{
                    adultAddPrice.setCellValue(saleRules.get(i).getAdultAddPrice());
                }

                Cell adultAddTax = r.createCell(24);
                adultAddTax.setCellStyle(cellStyle);
                if (saleRules.get(i).getAdultAddTax()==null) {
                    adultAddTax.setCellValue(0);
                }else{
                    adultAddTax.setCellValue(saleRules.get(i).getAdultAddTax());
                }

//				Cell adultTaxPoint = r.createCell(23);
//				adultTaxPoint.setCellStyle(cellStyle);
//				if (saleRules.get(i).getAdultPricePoint()==null) {
//					adultTaxPoint.setCellValue(0.0);
//				}else{
//					adultTaxPoint.setCellValue(saleRules.get(i).getAdultPricePoint().toString());
//				}

                Cell adultTaxPoint = r.createCell(25);
                adultTaxPoint.setCellStyle(cellStyle);
                if (saleRules.get(i).getAdultTaxPoint()==null) {
                    adultTaxPoint.setCellValue(0.0);
                }else{
                    adultTaxPoint.setCellValue(saleRules.get(i).getAdultTaxPoint().toString());
                }

                Cell childPricePoint = r.createCell(26);
                childPricePoint.setCellStyle(cellStyle);
                if (saleRules.get(i).getChildPricePoint()==null) {
                    childPricePoint.setCellValue(0.0);
                }else{
                    childPricePoint.setCellValue(saleRules.get(i).getChildPricePoint().toString());
                }

                Cell childAddPrice = r.createCell(27);
                childAddPrice.setCellStyle(cellStyle);
                if (saleRules.get(i).getChildAddPrice()==null) {
                    childAddPrice.setCellValue(0);
                }else{
                    childAddPrice.setCellValue(saleRules.get(i).getChildAddPrice());
                }

                Cell childAddTax = r.createCell(28);
                childAddTax.setCellStyle(cellStyle);
                if (saleRules.get(i).getChildAddTax()==null) {
                    childAddTax.setCellValue(0);
                }else{
                    childAddTax.setCellValue(saleRules.get(i).getChildAddTax());
                }

                Cell childTaxPoint = r.createCell(29);
                childTaxPoint.setCellStyle(cellStyle);
                if (saleRules.get(i).getChildTaxPoint()==null) {
                    childTaxPoint.setCellValue(0.0);
                }else{
                    childTaxPoint.setCellValue(saleRules.get(i).getChildTaxPoint().toString());
                }
                Cell cabinCode = r.createCell(30);
                cabinCode.setCellStyle(cellStyle);
                cabinCode.setCellValue(saleRules.get(i).getCabinCode());

                Cell saleRuleId = r.createCell(31);
                saleRuleId.setCellStyle(cellStyle);
                if (saleRuleId!=null) {
                    saleRuleId.setCellValue(saleRules.get(i).getId());
                }

                Cell flightCycle = r.createCell(32);
                flightCycle.setCellStyle(cellStyle);
                if (StringUtils.isBlank(saleRules.get(i).getFlightCycle())) {
                    flightCycle.setCellValue("");
                }else{
                    flightCycle.setCellValue(saleRules.get(i).getFlightCycle());
                }

                Cell floorPrice = r.createCell(33);
                floorPrice.setCellStyle(cellStyle);
                if (saleRules.get(i).getFloorPrice() == null) {
                    floorPrice.setCellValue("");
                }else{
                    floorPrice.setCellValue(saleRules.get(i).getFloorPrice());
                }

                Cell floorTax = r.createCell(34);
                floorTax.setCellStyle(cellStyle);
                if (saleRules.get(i).getFloorTax() == null) {
                    floorTax.setCellValue("");
                }else{
                    floorTax.setCellValue(saleRules.get(i).getFloorTax());
                }

                Cell fitShare = r.createCell(35);
                fitShare.setCellStyle(cellStyle);
                if (saleRules.get(i).getFitShare() == null) {
                    fitShare.setCellValue("");
                }else{
                    if(saleRules.get(i).getFitShare() == 1){
                        fitShare.setCellValue("适用");
                    }else if(saleRules.get(i).getFitShare() == 0){
                        fitShare.setCellValue("不适用");
                    }else {
                        fitShare.setCellValue(saleRules.get(i).getFitShare());
                    }
                }

                Cell fitNationality = r.createCell(36);
                fitNationality.setCellStyle(cellStyle);
                if (saleRules.get(i).getFitNationality() == null) {
                    fitNationality.setCellValue("");
                }else{
                    fitNationality.setCellValue(saleRules.get(i).getFitNationality());
                }

                Cell disFitNationality = r.createCell(37);
                fitNationality.setCellStyle(cellStyle);
                if (saleRules.get(i).getDisFitNationality() == null) {
                    disFitNationality.setCellValue("");
                }else{
                    disFitNationality.setCellValue(saleRules.get(i).getDisFitNationality());
                }

                Cell ageRange = r.createCell(38);
                ageRange.setCellStyle(cellStyle);
                if (saleRules.get(i).getAgeRange() == null) {
                    ageRange.setCellValue("");
                }else{
                    ageRange.setCellValue(saleRules.get(i).getAgeRange());
                }

                Cell attention = r.createCell(39);
                attention.setCellStyle(cellStyle);
                if (saleRules.get(i).getAttention() == null) {
                    attention.setCellValue("");
                }else{
                    attention.setCellValue(saleRules.get(i).getAttention());
                }

            }
            //创建输出流
            os = new FileOutputStream(filePath+file);
            //将book中的数据写出
            book.write(os);
        }catch (Exception e) {
            logger.error("fail:",e);
        }finally {
            try {
                if(book!=null){
                    book.close();
                }
                if(os!=null){
                    os.close();
                }
            }catch (Exception e){
                logger.error("关闭流异常",e);
            }

        }
        Response response = new Response();
        response.setStatus(Response.Status.SUCCEED);
        response.setData(filePath+file);
        return response;
    }

    public static HSSFWorkbook getBook(File file) {
        HSSFWorkbook book = null ;
        try {
            book = new HSSFWorkbook(new FileInputStream(file));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return book;
    }


    protected static Object getCellString(HSSFCell cell) {
        Object result = null;
        if (cell != null) {
            int cellType = cell.getCellType();
            switch (cellType) {

                case HSSFCell.CELL_TYPE_STRING:
                    result = cell.getStringCellValue();
                    break;
                case HSSFCell.CELL_TYPE_NUMERIC:
                    result = cell.getNumericCellValue();
                    break;
                case HSSFCell.CELL_TYPE_FORMULA:
                    result = cell.getNumericCellValue();
                    break;
                case HSSFCell.CELL_TYPE_ERROR:
                    result = null;
                    break;
                case HSSFCell.CELL_TYPE_BOOLEAN:
                    result = cell.getBooleanCellValue();
                    break;
                case HSSFCell.CELL_TYPE_BLANK:
                    result = null;
                    break;
            }
        }
        return result;
    }

    public Response parseToSaleDetail(String requestBody){
        logger.info("自动报表任务请求解析报表。。。");
        if(StringUtils.isBlank(requestBody)){
            return Response.error("参数为空");
        }
        JSONObject obj = JSONObject.parseObject(requestBody);
        Map<String, String> params = JSONObject.parseObject(obj.getString("data"), new TypeReference<Map<String, String>>(){});
        String key = obj.getString("info");
        //将Map解析为报表内容对象
        List<SaleDetail> saleDetailList = new ArrayList<>();
        try{
            //解析主逻辑
            saleDetailList = parseToSaleDetail.parseToSaleDetailMain(params,key);
        }catch (Exception e){
            logger.error("[自动报表] 解析Map到SaleDetail List 出现异常",e);
        }
        logger.info("自动报表任务解析数据完成,解析结果:saleDetailList.size() = " + saleDetailList.size());
        return Response.success(saleDetailList);
    }

    public Response downLoadSaleDetailFromAutoSource(String requestBody){
        String keyList = JSONObject.parseObject(requestBody).getString("keyList");
        logger.info("[AutoSource] 从saleDetail表数据中直接下载报表,keyList="+keyList);
        long beginTime = System.currentTimeMillis();
        Map<String,String> params = new HashMap<>();
        params.put("keyList",keyList);
        String result = HttpsSendData.send(overseasAirTicketUrl + "autoSaleDetai/findByKeyList.do",params);
        NoteResult noteResult = JSONObject.parseObject(result, NoteResult.class);
        if(noteResult.getStatus() != 0){
            logger.error("[AutoSource] 从saleDetail表中查询报表数据失败,keyList="+keyList);
            return Response.error("[AutoSource] 从saleDetail表中查询报表数据失败,key="+keyList);
        }
        List<SaleDetail> saleDetails = JSONArray.parseArray(JSONArray.toJSONString(noteResult.getData()),SaleDetail.class);
        Response response = new Response();
        logger.info("[AutoSource] 获取数据库表数据,总用时:"+(System.currentTimeMillis()-beginTime)+"ms");
        try{
            String customerId = keyList.substring(0,keyList.indexOf("_"));
            final String filePath =  saleDetailReportExcelPath + customerId + "/SalesDetailReport/";//指定文件保存路径
            String path = parseToSaleDetail.createSaleDetailReport(saleDetails,filePath);
            response.setStatus(Response.Status.SUCCEED);
            response.setData(path);
            response.setErrorMessage("[AutoSource] 生成报表成功,总用时:"+(System.currentTimeMillis()-beginTime)+"ms");
            logger.info("[AutoSource] 生成销售明细报表,总用时:"+(System.currentTimeMillis()-beginTime)+"ms");
            return response;
        }catch (Exception e){
            logger.error("[AutoSource] 生成报表发生异常",e);
            return Response.error("[AutoSource] 生成报表发生异常");
        }
    }

}