package com.sunda.spmsorder.service.impl;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sunda.spmscommon.ResponseResult;
import com.sunda.spmsorder.entity.MaterialApplication;
import com.sunda.spmsorder.entity.MaterialApplicationDtl;
import com.sunda.spmsorder.entity.OrderKeyValueConfig;
import com.sunda.spmsorder.entity.OrderWerks;
import com.sunda.spmsorder.entity.ShoppingScenario;
import com.sunda.spmsorder.entity.vo.*;
import com.sunda.spmsorder.enums.OperateLogTypeEnum;
import com.sunda.spmsorder.service.IFileOperationService;
import com.sunda.spmsorder.service.IOrderKeyValueConfigService;
import com.sunda.spmsorder.util.ExcelUtils;
import com.sunda.spmsuser.entity.SpmsUser;
import com.sunda.spmsuser.service.ISpmsUserService;
import com.sunda.spmswms.entity.Werks;
import com.sunda.spmswms.entity.Workshop;
import com.sunda.spmswms.service.IWerksService;
import com.sunda.spmswms.service.IWorkshopService;
import io.minio.MinioClient;
import io.minio.ObjectStat;
import io.minio.errors.MinioException;

import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.DefaultIndexedColorMap;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;
import org.xmlpull.v1.XmlPullParserException;

import java.awt.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.List;
import java.util.stream.Collectors;

@Service
public class FileOperationServiceImpl implements IFileOperationService {
    @Autowired
    ISpmsUserService iSpmsUserService;
    @Autowired
    IWerksService iWerksService;
    @Autowired
    IWorkshopService iWorkshopService;
    @Autowired
    IOrderKeyValueConfigService iOrderKeyValueConfigService;

    @Value("${template.file.path}")
    String templateFilePath;
    @Value("${excelCache.file.path}")
    String excelCacheFilePath;

    @Override
    public String saveMaterialApplicationExcel(MaterialApplication materialApplication, List<MaterialApplicationDtl> materialApplicationDtlList, String filename) {
        List<Map<Integer, Object>> dataList = new ArrayList<>();
        if (materialApplicationDtlList.isEmpty()){
            return null;
        }
        // String filePath = ExcelUtils.class.getClassLoader().getResource("").getPath() + "exceltemplates/" + filename;
        String filePath = "ExcelCache/" + filename;
        File file = new File(filePath);
        // 获取用户信息
        SpmsUser spmsUser = iSpmsUserService.getByUserId(materialApplication.getUserId());
        // 获取工厂信息
        Werks werks = iWerksService.getWerkInfo(materialApplication.getWerks());
        // 获取车间信息
        Workshop workshop = iWorkshopService.getWorkshopInfo(materialApplication.getWerks(), materialApplication.getWorkshopCode());
        String worksshopNameZh = workshop == null ? materialApplication.getWorkshopCode() : workshop.getWorkshopNameZh();
        // 整理待导出数据
        for (MaterialApplicationDtl item : materialApplicationDtlList){
            Map<Integer, Object> dataMap = new HashMap<>();
            dataMap.put(0, werks.getWerksNameZh() + "-" + worksshopNameZh); // 来源：工厂中文+车间中文
            dataMap.put(1, "备品备件");
            dataMap.put(2, "所有工厂");
            dataMap.put(3, "=G4&\"_\"&H4");
            dataMap.put(4, item.getMaterialEnDesc() == null ? "" : item.getMaterialEnDesc());
            dataMap.put(5, item.getSpecs() == null ? "" : item.getSpecs());
            dataMap.put(6, item.getBasicUnit() == null ? "" : item.getBasicUnit().toUpperCase());
            dataMap.put(7, "");
            dataMap.put(8, "100");
            dataMap.put(9, "KG");
            dataMap.put(10, "CCM");
            dataMap.put(11, "L"); // 轻重货标识
            dataMap.put(12, "CN01");// 采购工厂
            dataMap.put(13, "R24");// MRP控制者
            dataMap.put(14, "F"); // 采购类型
            dataMap.put(15, spmsUser.getLastName() == null ? "" : spmsUser.getLastName());
            dataMap.put(16, item.getMaterialModel() == null ? "" : item.getMaterialModel());
            dataMap.put(17, item.getSupplierMaterialNo() == null ? "" : item.getSupplierMaterialNo());
            dataMap.put(18, item.getSupplyDesc() == null ? "" : item.getSupplyDesc());
            dataMap.put(19, item.getRelateEquipment() == null ? "" : item.getRelateEquipment());
//            dataMap.put(17, item.getEquipmentBrand() == null ? "" : item.getEquipmentBrand());
            dataMap.put(20, item.getEquipmentBrand() == null ? "" : item.getEquipmentBrand());
            dataMap.put(21, item.getEquipmentSpec() == null ? "" : item.getEquipmentSpec());
            dataMap.put(22, item.getEquipmentSupplier() == null ? "" : item.getEquipmentSupplier());
            dataMap.put(23, item.getThirdPartyPlatform() == null ? "" : item.getThirdPartyPlatform());
            dataMap.put(24, item.getLink() == null ? "" : item.getLink());
            dataMap.put(25, item.getSku() == null ? "" : item.getSku());
            dataList.add(dataMap);
        }
        // 使用ClassLoader加载properties配置文件生成对应的输入流
        InputStream in = ExcelUtils.class.getClassLoader().getResourceAsStream("exceltemplates/MaterialApplicationTemplate.xlsx");
        FileOutputStream fos = null;
        try {
            final XSSFWorkbook tpWorkbook = new XSSFWorkbook(in);
            // 新建一个Excel的工作空间
            Workbook workbook = new SXSSFWorkbook(100);
            // 把模板复制到新建的Excel
            workbook = tpWorkbook;
            // 填充数据，生成Excel
            fillExcelSheetDataMaterailApplication(dataList, workbook, "需填写", dataList.get(0).size());
            // 输出到服务器本地
            if (file.getParentFile().exists()){
                file.delete();
            }
            file.getParentFile().mkdir();
            file.createNewFile();
            fos = new FileOutputStream(file);
            workbook.write(fos);
        } catch (final IOException e) {
            e.printStackTrace();
        } catch (final IllegalArgumentException e) {
            e.printStackTrace();
        } catch (final Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != fos){
                    fos.flush();
                    fos.close();
                }
            } catch (final IOException e) {
                e.printStackTrace();
            }
        }
        return file.getAbsolutePath();
    }


    @SuppressWarnings({ "unchecked", "rawtypes" })
	@Override
    public String saveOrderWerksExcel(OrderWerks orderWerks, List<Map<String, Object>> orderWerksDtlArr, String filename) {
        List<OrderWerksDtlQueryResultVo> dataList = new ArrayList<OrderWerksDtlQueryResultVo>();
        if (orderWerksDtlArr.isEmpty()){
            return null;
        }
        //String filePath = ExcelUtils.class.getClassLoader().getResource("").getPath() + "ExcelCache/" + filename;
        String filePath = excelCacheFilePath+"/"+filename;
        // 整理待导出数据
        /*for (Map<String, Object> item : orderWerksDtlArr){
            Map<Integer, Object> dataMap = new HashMap<>();
            dataMap.put(0, item.get("materialNo")); // 物料编码
            dataMap.put(1, item.get("materialZhDesc"));//物料描述
            dataMap.put(2, item.get("orderWorkshopUsername"));//申请人
            //dataMap.put(3, item.get("requestTotal"));//申请数量
            //dataMap.put(4, item.get("approvalTotal"));//批准数量
            dataMap.put(3, item.get("requestQty"));//申请数量
            dataMap.put(4, item.get("approvalQty"));//批准数量
            dataMap.put(5, item.get("spmsWsId"));//请购单号
            dataMap.put(6, item.get("workshopNameZh"));//申请车间
            dataMap.put(7, item.get("basicUnit"));//单位
            dataMap.put(8, item.get("rowComment"));//备注
            dataList.add(dataMap);
        }*/

        for (Map<String, Object> item : orderWerksDtlArr){
            OrderWerksDtlQueryResultVo dataMap = new OrderWerksDtlQueryResultVo();
            dataMap.setRowId(item.get("rowIdWerks")==null?"":item.get("rowIdWerks").toString());//行号
            dataMap.setWorkshopNameZh(item.get("workshopNameZh")==null?"":item.get("workshopNameZh").toString());//申请车间
            dataMap.setOrderWorkshopUsername(item.get("orderWorkshopUsername")==null?"":item.get("orderWorkshopUsername").toString());//申请人
            dataMap.setMaterialNo(item.get("materialNo")==null?"":item.get("materialNo").toString()); // 物料编码
            dataMap.setMaterialZhDesc(item.get("materialZhDesc")==null?"":item.get("materialZhDesc").toString());//物料描述
            dataMap.setMaterialPrice(item.get("materialPrice")==null?"":item.get("materialPrice").toString());//含税单价
            if(item.get("materialPrice")!=null && item.get("requestQty")!=null){
                BigDecimal materialTotalPrice = new BigDecimal(item.get("materialPrice").toString()).multiply(new BigDecimal(item.get("requestQty").toString()));
                dataMap.setMaterialTotalPrice(materialTotalPrice.toEngineeringString());//含税总额
            }else{
                dataMap.setMaterialTotalPrice("");//含税总额
            }
            dataMap.setRequestQty(item.get("requestQty")==null?"0":item.get("requestQty").toString());//申请数量
            dataMap.setApprovalQty(item.get("approvalQty")==null?"0":item.get("approvalQty").toString());//批准数量
            dataMap.setInventoryQuantity(item.get("inventoryQuantity")==null?"0":item.get("inventoryQuantity").toString()); // 库存数量
            dataMap.setWayQuantity(item.get("wayQuantity")==null?"0":item.get("wayQuantity").toString()); // 在途数量
            dataMap.setSafetyQtyBasicUnit(item.get("safetyQtyBasicUnit")==null?"0":item.get("safetyQtyBasicUnit").toString()); // 安全库存
            dataMap.setBasicUnit(item.get("basicUnit")==null?"":item.get("basicUnit").toString());//单位
            dataMap.setSupplementOrNot(
                    item.get("supplementOrNot") == null ? "" : item.get("supplementOrNot").equals("1") ? "否" : "是"
            );
            dataMap.setRowComment(item.get("rowComment")==null?"":item.get("rowComment").toString());//备注


            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        data.put("title", orderWerks.getSubject());//标题
        data.put("spmsId", orderWerks.getSpmsId());//工厂请购单ID
        data.put("lastName", orderWerks.getLastName());//申请人
        data.put("werks", orderWerks.getWerks());//工厂
        data.put("purchaseLocation", "0".equals(orderWerks.getPurchaseLocation())?"中国":"其他");//采购地点,0国内，1海外
        data.put("justification", orderWerks.getJustification());//申请原因
        data.put("applicationDate", orderWerks.getApplicationDate());//申请日期
        data.put("dateRequired", orderWerks.getDateRequired());//需求日期
        String urgency = "正常";
        if("1".equals(orderWerks.getUrgency())){
            urgency = "重要";
        }else if("2".equals(orderWerks.getUrgency())){
            urgency = "紧急";
        }
        data.put("urgency", urgency);//紧急程度 0正常；1重要；2紧急

        String shippingFangshi = "海运";
        if("1".equals(orderWerks.getShippingFangshi())){
            shippingFangshi = "空运";
        }else if("2".equals(orderWerks.getShippingFangshi())){
            shippingFangshi = "人带";
        }
        if("1201".equals(orderWerks.getOaProcessId())){//1201没有运输方式，只有是否
            if("0".equals(orderWerks.getShippingType())){
                shippingFangshi = "非海运";
            }
        }
        data.put("shippingFangshi", shippingFangshi);//运输方式, 0海运；1空运；2人带


        // 基于模板导出Excel
        try {
            //filePath = "D:\\fileImport\\" + filename;
            //String templete = "D:\\fileImport\\OrderWerksDtlTemplate.xlsx";
            /*String templete = "exceltemplates/OrderWerksDtlTemplate.xlsx";
            File file = ResourceUtils.getFile("classpath:"+templete);
            templete = file.getAbsolutePath();*/
            String templete = templateFilePath+"/OrderWerksDtlTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, OrderWerksDtlQueryResultVo.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            System.out.println("Excel4J请购单文件生成失败："+e.getMessage());
            e.printStackTrace();
        }

       // File file = new File(filePath);
        // 使用ClassLoader加载properties配置文件生成对应的输入流
        /*InputStream in = ExcelUtils.class.getClassLoader().getResourceAsStream("exceltemplates/OrderWerksDtlTemplate.xlsx");
        FileOutputStream fos = null;
        try {
            final XSSFWorkbook tpWorkbook = new XSSFWorkbook(in);
            // 新建一个Excel的工作空间
            Workbook workbook = new SXSSFWorkbook(100);
            // 把模板复制到新建的Excel
            workbook = tpWorkbook;
            // 填充数据，生成Excel
            fillExcelSheetDataOrderWerlsDtel(dataList, workbook, "请购单", dataList.get(0).size());
            // 输出到服务器本地
            if (file.getParentFile().exists()){
                file.delete();
            }
            file.getParentFile().mkdir();
            file.createNewFile();
            fos = new FileOutputStream(file);
            workbook.write(fos);
        } catch (final IOException e) {
            e.printStackTrace();
        } catch (final IllegalArgumentException e) {
            e.printStackTrace();
        } catch (final Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != fos){
                    fos.flush();
                    fos.close();
                }
            } catch (final IOException e) {
                e.printStackTrace();
            }
        }*/
        return filePath;
    }



    @SuppressWarnings({ "unchecked", "rawtypes" })
	@Override
    public String saveShoppingScenarioExcel(ShoppingScenario head, List<Map<String, Object>> dtl, String filename) {
        List<ShoppingScenarioResultVo> dataList = new ArrayList<ShoppingScenarioResultVo>();
        if (dtl.isEmpty()){
            return null;
        }
        String filePath = excelCacheFilePath+"/"+filename;
        // 整理待导出数据
        for (Map<String, Object> item : dtl){
            ShoppingScenarioResultVo dataMap = new ShoppingScenarioResultVo();
            dataMap.setSsdRowId(item.get("ssdRowId")==null?"":item.get("ssdRowId").toString());//行号
            dataMap.setMaterialNo(item.get("materialNo")==null?"":item.get("materialNo").toString()); // 物料编码
            dataMap.setMaterialZhDesc(item.get("materialZhDesc")==null?"":item.get("materialZhDesc").toString());//物料描述
            dataMap.setBasicUnit(item.get("basicUnit")==null?"":item.get("basicUnit").toString());//单位
            dataMap.setSafetyQtyBasicUnit(item.get("safetyQtyBasicUnit")==null?"":item.get("safetyQtyBasicUnit").toString());//安全库存数量
            dataMap.setSafetyInventoryYear(item.get("safetyInventoryYear")==null?"":item.get("safetyInventoryYear").toString());//安全库存年数
            dataMap.setStandardConsumptionLastYear(item.get("standardConsumptionLastYear")==null?"":item.get("standardConsumptionLastYear").toString());//上年度标准耗用量
            dataMap.setInventoryQuantity(item.get("inventoryQuantity")==null?"":item.get("inventoryQuantity").toString());//库存数量
            dataMap.setWayQuantity(item.get("wayQuantity")==null?"":item.get("wayQuantity").toString());//在途库存
            dataMap.setLabst366(item.get("labst366")==null?"":item.get("labst366").toString());//呆滞库存
            dataMap.setSupplementQuantity(item.get("supplementQuantity")==null?"":item.get("supplementQuantity").toString());//补充数量
            dataMap.setStrategicGoods(item.get("strategicGoods")==null?"":item.get("strategicGoods").toString());//分类
            dataMap.setCentralizedProcurement(item.get("centralizedProcurement")==null?"":item.get("centralizedProcurement").toString());//集中采购
            dataMap.setRowComment(item.get("rowComment")==null?"":item.get("rowComment").toString());//行备注
            dataList.add(dataMap);
        }

        Map data = new HashMap<>();
        data.put("scenarioId", head.getScenarioId());//场景单号
        data.put("createUserName", head.getCreateUserid());//创建用户
        data.put("werks", head.getWerks());//工厂
        data.put("machineDesc", head.getMachineDesc());//设备描述
        data.put("machineNo", head.getMachineNo());//设备ID
        data.put("scenarioDesc", head.getScenarioDesc());//场景描述
        data.put("title", head.getScenarioName());//场景描述

        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/ShoppingScenarioTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, ShoppingScenarioResultVo.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            System.out.println("Excel4J请购单文件生成失败："+e.getMessage());
            e.printStackTrace();
        }

        return filePath;
    }


    @SuppressWarnings({ "rawtypes", "unchecked" })
	@Override
    public String exportWhsDeskAccount(List<Map<String, Object>> dtl, String filename) {
        List<WhsInOutDtlResultVo> dataList = new ArrayList<WhsInOutDtlResultVo>();
        if (dtl.isEmpty()){
            return null;
        }
        String filePath = excelCacheFilePath+"/"+filename;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 整理待导出数据
        for (Map<String, Object> item : dtl){
            WhsInOutDtlResultVo dataMap = new WhsInOutDtlResultVo();
            dataMap.setWerks(item.get("werks")==null?"":item.get("werks").toString());
            dataMap.setWhsLocationCode(item.get("whsLocationCode")==null?"":item.get("whsLocationCode").toString());
            dataMap.setStorageNo(item.get("storageNo")==null?"":item.get("storageNo").toString());
            dataMap.setDeliveryNoteSap(item.get("deliveryNoteSap")==null?"":item.get("deliveryNoteSap").toString());
            dataMap.setPackageList(item.get("packageList")==null?"":item.get("packageList").toString());
            dataMap.setBoxNote(item.get("boxNote")==null?"":item.get("boxNote").toString());
            dataMap.setMaterialNo(item.get("materialNo")==null?"":item.get("materialNo").toString());
            dataMap.setMaterialZhDesc(item.get("materialZhDesc")==null?"":item.get("materialZhDesc").toString());
            dataMap.setQuantity(item.get("quantity")==null?"":item.get("quantity").toString());
            //dataMap.setActualUnitSalesQty(item.get("actualUnitSalesQty")==null?"":item.get("actualUnitSalesQty").toString());
            dataMap.setUnitSales(item.get("unitSales")==null?"":item.get("unitSales").toString());
            dataMap.setOperationType(item.get("operationType")==null?"":item.get("operationType").toString());
            dataMap.setUserId(item.get("userId")==null?"":item.get("userId").toString());
            dataMap.setUserName(item.get("userName")==null?"":item.get("userName").toString());
            dataMap.setComments(item.get("comments")==null?"":item.get("comments").toString());
            dataMap.setBoxGrossWeight(item.get("boxGrossWeight")==null?"":item.get("boxGrossWeight").toString());
            dataMap.setBoxVolume(item.get("boxVolume")==null?"":item.get("boxVolume").toString());
            dataMap.setBoxLength(item.get("boxLength")==null?"":item.get("boxLength").toString());
            dataMap.setBoxWidth(item.get("boxWidth")==null?"":item.get("boxWidth").toString());
            dataMap.setBoxHeight(item.get("boxHeight")==null?"":item.get("boxHeight").toString());
            dataMap.setBoxMaterialName(item.get("boxMaterialName")==null?"":item.get("boxMaterialName").toString());
            dataMap.setNetWeight(item.get("netWeight")==null?"":item.get("netWeight").toString());
            dataMap.setGrossWeight(item.get("grossWeight")==null?"":item.get("grossWeight").toString());
            dataMap.setWeightUnit(item.get("weightUnit")==null?"":item.get("weightUnit").toString());
            dataMap.setVolumeQty(item.get("volumeQty")==null?"":item.get("volumeQty").toString());
            dataMap.setVolumeUnit(item.get("volumeUnit")==null?"":item.get("volumeUnit").toString());
            dataMap.setRemarks(item.get("remarks")==null?"":item.get("remarks").toString());

            try {
                if(item.get("createTime")!=null){
                    Date createTime = sdf.parse(item.get("createTime").toString() );
                    Calendar calendar = Calendar.getInstance();
                    calendar.setTime(createTime);
                    calendar.add(Calendar.HOUR_OF_DAY, 8);
                    Date newDate = calendar.getTime();
                    dataMap.setCreateTime(sdf.format(newDate));
                }

            }catch (Exception e){

            }

            //件数=quantity* denominator/ numerator
            BigDecimal actualUnitSalesQty = new BigDecimal("1");
            if(item.get("quantity")!=null && item.get("denominator")!=null && item.get("numerator")!=null ){
                actualUnitSalesQty = new BigDecimal(item.get("quantity").toString()).multiply(new BigDecimal(item.get("denominator").toString()));
                actualUnitSalesQty = actualUnitSalesQty.divide(new BigDecimal(item.get("numerator").toString()), 3, BigDecimal.ROUND_HALF_UP);
            }
            dataMap.setActualUnitSalesQty(actualUnitSalesQty.toEngineeringString());
            dataList.add(dataMap);
        }

        Map data = new HashMap<>();

        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/WhsInOutDtlTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, WhsInOutDtlResultVo.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            System.out.println("Excel4J请购单文件生成失败："+e.getMessage());
            e.printStackTrace();
        }

        return filePath;
    }

    @SuppressWarnings({ "rawtypes", "unchecked" })
	@Override
    public String saveOverseaRequisitionExcel(List<Map<String, Object>> dtl, String filename) {
        List<OverseaRequisitionReportVo> dataList = new ArrayList<OverseaRequisitionReportVo>();
        if (dtl.isEmpty()){
            return null;
        }
        String filePath = excelCacheFilePath+"/"+filename;
        List<OrderKeyValueConfig> orderKeyValueConfigs = iOrderKeyValueConfigService.getByFieldKey("mobileType");
        Map<String, String> valueMaps = null;
        if (!CollectionUtils.isEmpty(orderKeyValueConfigs)) {
        	valueMaps = orderKeyValueConfigs.stream().collect(Collectors.toMap(OrderKeyValueConfig::getKeyCode, OrderKeyValueConfig::getKeyCodeDesc));
        }
        // 整理待导出数据
        for (Map<String, Object> item : dtl){
            OverseaRequisitionReportVo dataMap = new OverseaRequisitionReportVo();
            dataMap.setWerks(item.get("werks")==null?"":item.get("werks").toString());//
            dataMap.setWorkshopCode(item.get("workshopCode")==null?"":item.get("workshopCode").toString());//
            dataMap.setCreateUsername(item.get("createUsername")==null?"":item.get("createUsername").toString());//
            dataMap.setMaterialNo(item.get("materialNo")==null?"":item.get("materialNo").toString()); //
            dataMap.setMaterialZhDesc(item.get("materialZhDesc")==null?"":item.get("materialZhDesc").toString());//
            dataMap.setCreateTime(item.get("createTime")==null?"0":item.get("createTime").toString());//
            dataMap.setRelateDocument(item.get("relateDocument")==null?"0":item.get("relateDocument").toString());//
            dataMap.setMaterialNo(item.get("materialNo")==null?"0":item.get("materialNo").toString()); //
            dataMap.setMaterialZhDesc(item.get("materialZhDesc")==null?"0":item.get("materialZhDesc").toString()); //
            dataMap.setActualQtyBasicUnit(item.get("actualQtyBasicUnit")==null?"0":item.get("actualQtyBasicUnit").toString()); //
            dataMap.setBasicUnit(item.get("basicUnit")==null?"":item.get("basicUnit").toString());//单位
            dataMap.setOutTime(item.get("outTime")==null?"":item.get("outTime").toString());//
            dataMap.setSpmsId(item.get("spmsId")==null?"":item.get("spmsId").toString());//
            dataMap.setProjectOaNumber(item.get("projectOaNumber")==null?"":item.get("projectOaNumber").toString());//
            dataMap.setSapVoucherNumber(item.get("sapVoucherNumber")==null?"":item.get("sapVoucherNumber").toString());//
            if(item.get("movementType") != null && item.get("movementType").toString().length()>0){
                if(valueMaps != null){
                    dataMap.setMovementType(item.get("movementType").toString()+"-"+valueMaps.get(item.get("movementType").toString()));//
                }else{
                    dataMap.setMovementType(item.get("movementType").toString());
                }
            }else{
                dataMap.setMovementType("");//
            }
            String costCenter = item.get("costCenter")==null?"":item.get("costCenter").toString();
            String costCenterName = item.get("costCenterName")==null?"":item.get("costCenterName").toString();
            dataMap.setCostCenter(costCenter+"-"+costCenterName);//
            dataMap.setLicenseNo(item.get("licenseNo")==null?"":item.get("licenseNo").toString());//
            dataMap.setComments(item.get("comments")==null?"":item.get("comments").toString());//
            dataMap.setCancelReason(item.get("cancelReason")==null?"":item.get("cancelReason").toString());
            dataMap.setProjectOaNumber(item.get("projectOaNumber")==null?"":item.get("projectOaNumber").toString());
            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/OverseaRequisitionTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, OverseaRequisitionReportVo.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            System.out.println("Excel4J请购单文件生成失败："+e.getMessage());
            e.printStackTrace();
        }

        return filePath;
    }


    @SuppressWarnings({ "rawtypes", "unchecked" })
	@Override
    public String saveOverseaDeliveryNoteExcel(List<Map<String, Object>> dtl, String filename) {
        List<OverseaDeliveryNoteDtlReportVo> dataList = new ArrayList<OverseaDeliveryNoteDtlReportVo>();
        if (dtl.isEmpty()){
            return null;
        }
        String filePath = excelCacheFilePath+"/"+filename;
        // 整理待导出数据
        for (Map<String, Object> item : dtl){
            OverseaDeliveryNoteDtlReportVo dataMap = new OverseaDeliveryNoteDtlReportVo();
            dataMap.setActualQtyBasicUnit("0");//包装数量
            dataMap.setBasicUnit(item.get("basicUnit")==null?"":item.get("basicUnit").toString());//基本单位
            dataMap.setActualQtyUnitSales("0");//应收件数
            dataMap.setReceivableQtyBasicUnit(item.get("receivableQtyBasicUnit")==null?"":item.get("receivableQtyBasicUnit").toString());//应收数量
            dataMap.setMaterialZhDesc(item.get("materialZhDesc")==null?"":item.get("materialZhDesc").toString());//物料描述
            dataMap.setMaterialNo(item.get("materialNo")==null?"":item.get("materialNo").toString());//物料编码
            dataMap.setBoxNote(item.get("boxNote")==null?"":item.get("boxNote").toString());//箱码
            dataMap.setWerksReceive("");//车间名称
            dataMap.setUnitSales(item.get("unitSales")==null?"":item.get("unitSales").toString());//销售单位
            dataMap.setDemandNo(item.get("demandNo")==null?"":item.get("demandNo").toString());//需求单号
            dataMap.setDemandItem(item.get("demandItem")==null?"":item.get("demandItem").toString());//需求单行号
            dataMap.setDemander(item.get("demander")==null?"":item.get("demander").toString());//需求申请人
            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/OverseaDeliveryNoteTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, OverseaDeliveryNoteDtlReportVo.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            System.out.println("Excel4J海运收货明细文件生成失败："+e.getMessage());
            e.printStackTrace();
        }

        return filePath;
    }

    @Override
    public String saveMaterialApplicationPic(MultipartFile multipartFile, String filename) {
        String filePath = "PicCache/" + filename;
        File file = new File(filePath);
        FileOutputStream fos = null;
        InputStream stream = null;
        try {
            // 输出到服务器本地
            if (file.getParentFile().exists()){
                file.delete();
            }
            file.getParentFile().mkdir();
            file.createNewFile();
            fos = new FileOutputStream(file);
            stream = multipartFile.getInputStream();
            //写入目标文件
            byte[] buffer = new byte[1024*1024];
            int byteRead;
            try {
                while((byteRead=stream.read(buffer))!=-1){
                    fos.write(buffer, 0, byteRead);
                    fos.flush();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (final IOException e) {
            e.printStackTrace();
        } catch (final IllegalArgumentException e) {
            e.printStackTrace();
        } catch (final Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != fos){
                    fos.close();
                }
                if (null != stream){
                    stream.close();
                }
            } catch (final IOException e) {
                e.printStackTrace();
            }
        }
        return file.getAbsolutePath();
    }

    @Override
    public String fileUploader(String filename, String localFilePath) {
        String fileUrl = "";
        try {
            // Minio文件服务器参数为：IP，账号，密码
            MinioClient minioClient = new MinioClient("http://minio-prd.sunda.com", "79BbrobisTlpb1DKxLXO", "ePJ9xSVBUaskFf6VQOBGQZOYXDlON7X26sgbsxIq");
            String bucketName = "spms";
            // 检查文件夹是否已经存在
            boolean isExist = minioClient.bucketExists(bucketName);
            if(isExist) {
                System.out.println("文件夹已经存在了");
            }
            else {
                // 创建一个名为managertest的文件夹
                System.out.println("文件夹还没存在");
                minioClient.makeBucket(bucketName);
            }
            // 使用putObject上传一个文件到文件夹中。
            //参数为：文件夹，要存成的名字，要存的文件
            minioClient.putObject(bucketName, filename, localFilePath);
            System.out.println("成功了");

            //使用getObject获取一个文件
            // 调用statObject()来判断对象是否存在。
            ObjectStat objectStat = minioClient.statObject(bucketName, filename);
            // 获取1.png的流并保存到photo.png文件中。
            // 参数为：文件夹，要获得的文件，要写入的文件
            fileUrl = minioClient.getObjectUrl(bucketName, filename);
            fileUrl = fileUrl.replace("http://", "https://");

            System.out.println("文件上传路径:" + fileUrl);
        }catch(MinioException e) {
            System.out.println("错误: " + e);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return fileUrl;
    }

    private void fillExcelSheetDataMaterailApplication(List<Map<Integer, Object>> dataList,Workbook wb,String sheetName, int lineLen){
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyy-MM-dd");  //日期格式化
        Sheet sheet = wb.getSheetAt(0);
        // 单元格样式
        XSSFCellStyle cellStyle = (XSSFCellStyle) wb.createCellStyle();
        cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        XSSFColor color = new XSSFColor(new Color(255,255,0), new DefaultIndexedColorMap()); //accepts a short value
        cellStyle.setFillForegroundColor(color.getIndexed());
        // TODO: 每行数据对应的列位置
        Map<Integer, Integer> colIndex = new HashMap<>();
        colIndex.put(0, 0);
        colIndex.put(1, 1);
        colIndex.put(2, 2);
        colIndex.put(3, 5);
        colIndex.put(4, 6);
        colIndex.put(5, 7);
        colIndex.put(6, 16);
        colIndex.put(7, 17);
        colIndex.put(8, 19);
        colIndex.put(9, 28);
        colIndex.put(10, 30);
        colIndex.put(11, 35);
        colIndex.put(12, 41);
        colIndex.put(13, 42);
        colIndex.put(14, 50);
        colIndex.put(15, 64);
        colIndex.put(16, 65);
        colIndex.put(17, 66);
        colIndex.put(18, 67);
        colIndex.put(19, 68);
//        colIndex.put(17, 69);
        colIndex.put(20, 69);
        colIndex.put(21, 70);
        colIndex.put(22, 71);
        colIndex.put(23, 72);
        colIndex.put(24, 73);
        colIndex.put(25, 74);
        //TODO：从第n行开始塞入真正的数据列表
        int rowIndex=3;
        Row row;
        Object obj;
        for(Map<Integer, Object> rowMap:dataList){
            try {
                row=sheet.getRow(rowIndex);
                if (row == null){
                    row=sheet.createRow(rowIndex);
                }
                rowIndex++;
                for(int i=0;i< lineLen;i++){
                    obj=rowMap.get(i);
                    if (obj==null) {
                        row.getCell(colIndex.get(i)).setCellValue("");
                    }else if (obj instanceof Date) {
                        String tempDate=simpleDateFormat.format((Date)obj);
                        row.getCell(colIndex.get(i)).setCellValue((tempDate==null)?"":tempDate);
                    }else {
                        if (row.getCell(colIndex.get(i)) == null) {
                            row.createCell(colIndex.get(i)).setCellValue(String.valueOf(obj));
                        }else{
                            row.getCell(colIndex.get(i)).setCellValue(String.valueOf(obj));
                        }
                    }
                    // 设置公式
                    if (i == 3){
//                        row.getCell(colIndex.get(i)).setCellType(CellType.FORMULA);
//                        row.getCell(colIndex.get(i)).setCellFormula(String.valueOf(obj));
//                        eval.evaluateFormulaCell(row.getCell(colIndex.get(i)));
                    }
                    // row.getCell(colIndex.get(i)).setCellStyle(cellStyle);
                }
            } catch (Exception e) {
                System.out.println("excel sheet填充数据 发生异常： " + e.fillInStackTrace());
            }
        }
    }



    private void fillExcelSheetDataOrderWerlsDtel(List<Map<Integer, Object>> dataList,Workbook wb,String sheetName, int lineLen){
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyy-MM-dd");  //日期格式化
        Sheet sheet = wb.getSheetAt(0);
        // 单元格样式
        XSSFCellStyle cellStyle = (XSSFCellStyle) wb.createCellStyle();
        cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        XSSFColor color = new XSSFColor(new Color(255,255,0), new DefaultIndexedColorMap()); //accepts a short value
        cellStyle.setFillForegroundColor(color.getIndexed());
        // TODO: 每行数据对应的列位置
        //TODO：从第n行开始塞入真正的数据列表
        int rowIndex=1;
        Row row;
        Object obj;
        for(Map<Integer, Object> rowMap:dataList){
            try {
                row=sheet.getRow(rowIndex);
                if (row == null){
                    row=sheet.createRow(rowIndex);
                }
                rowIndex++;
                for(int i=0;i< lineLen;i++){
                    obj=rowMap.get(i);
                    if (obj==null) {
                        row.getCell(i).setCellValue("");
                    }else if (obj instanceof Date) {
                        String tempDate=simpleDateFormat.format((Date)obj);
                        row.getCell(i).setCellValue((tempDate==null)?"":tempDate);
                    }else {
                        if (row.getCell(i) == null) {
                            row.createCell(i).setCellValue(String.valueOf(obj));
                        }else{
                            row.getCell(i).setCellValue(String.valueOf(obj));
                        }
                    }
                }
            } catch (Exception e) {
                System.out.println("excel sheet填充数据 发生异常： " + e.fillInStackTrace());
            }
        }
    }


	@SuppressWarnings({ "rawtypes", "unchecked" })
	@Override
	public String saveSendSapFailedExcel(List<Map<String, Object>> dtl, String filename) {
		List<OverseaSendSapFailedReportVO> dataList = new ArrayList<OverseaSendSapFailedReportVO>();
        if (dtl.isEmpty()){
            return null;
        }
        String filePath = excelCacheFilePath+"/"+filename;
        // 整理待导出数据
        for (Map<String, Object> item : dtl){
        	OverseaSendSapFailedReportVO dataMap = new OverseaSendSapFailedReportVO();
        	// 工厂
            dataMap.setWerks(item.get("werks") == null ? "" : item.get("werks").toString());
            // 仓库
            dataMap.setLocationCode(item.get("locationCode") == null ? "" : item.get("locationCode").toString());
            // 作业类型
//            dataMap.setOrderType(item.get("orderType") == null ? "" : item.get("orderType").toString());
            if (item.get("orderType") == null) {
            	dataMap.setOrderType("");
            } else if ("OWI".equals(item.get("orderType").toString())) {
            	dataMap.setOrderType("海运入库");
            } else if ("OICA".equals(item.get("orderType").toString())) {
            	dataMap.setOrderType("海外盘盈亏");
            } else if ("OOT".equals(item.get("orderType").toString())) {
            	dataMap.setOrderType("其他出入库");
            } else if ("OWD".equals(item.get("orderType").toString())) {
            	dataMap.setOrderType("海外转储");
            } else if ("OWO".equals(item.get("orderType").toString())) {
            	dataMap.setOrderType("领用出库");
            } else if ("OD".equals(item.get("orderType").toString())) {
            	dataMap.setOrderType("其他收货");
            } else if ("OWM".equals(item.get("orderType").toString())) {
            	dataMap.setOrderType("移仓");
            }
            // 单据号
            dataMap.setSpmsId(item.get("spmsId") == null ? "" : item.get("spmsId").toString());
            // 状态
            dataMap.setSpmsStatus(item.get("spmsStatusDesc") == null ? "提交SAP失败" : item.get("spmsStatusDesc").toString());
            // 创建日期
            dataMap.setCreateDate(item.get("createDate") == null ? "" : item.get("createDate").toString());
            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/SendSapFailedTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, OverseaSendSapFailedReportVO.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            e.printStackTrace();
        }

        return filePath;
	}

    @SuppressWarnings({ "rawtypes", "unchecked" })
	@Override
    public String saveOrderKeyDatesExcel(List<Map<String, Object>> dtl, String filename) {
        List<OrderKeyDatesReportVO> dataList = new ArrayList<OrderKeyDatesReportVO>();
        if (dtl.isEmpty()){
            return null;
        }
        String filePath = excelCacheFilePath+"/"+filename;
        // 整理待导出数据
        for (Map<String, Object> item : dtl){
            OrderKeyDatesReportVO dataMap = new OrderKeyDatesReportVO();
            //工厂名称(中文)	工厂  车间名称(CN)	车间代码	车需求申请人	车间请购单创建日期	内部订单号	车间请购单号	车间请购单标题	车间请购单行号	工厂请购单创建日期	工厂需求申请人	工厂请购单号	工厂请购单行号	物料编码	物料描述	单位	申请数量	批准数量	安全库存数量	工厂下物料总库存	在途库存	紧急程度	运输方式	OA流程Id	国内交货单号	箱码	箱码明细行号	国内收货数量	装箱单号	是否海运	箱码状态	箱状态	OA审批日期	国内到货日期	国内出库日期	海外到货日期	耗费时间

            //工厂名称(中文)
            dataMap.setWerksNameZh(item.get("werksNameZh") == null ? "" : item.get("werksNameZh").toString());
            //工厂
            dataMap.setWerks(item.get("werks") == null ? "" : item.get("werks").toString());

            //(value = "车间名称(CN)")
            dataMap.setWorkshopNameZh(item.get("workshopNameZh") == null ? "" : item.get("workshopNameZh").toString());

            //(value = "车间代码")
            dataMap.setWorkshopCode(item.get("workshopCode") == null ? "" : item.get("workshopCode").toString());

            //(value = "车需求申请人")
            dataMap.setOrderWorkshopUsername(item.get("orderWorkshopUsername") == null ? "" : item.get("orderWorkshopUsername").toString());

            //(value = "车间请购单创建日期")
            dataMap.setOrderWorkshopApplicationDate(item.get("orderWorkshopApplicationDate") == null ? "" : item.get("orderWorkshopApplicationDate").toString());

            //(value = "内部订单号")
            dataMap.setOrderWerksFieldForOa(item.get("orderWerksFieldForOa") == null ? "" : item.get("orderWerksFieldForOa").toString());

            //(value = "车间请购单号")
            dataMap.setOrderWorkshopId(item.get("orderWorkshopId") == null ? "" : item.get("orderWorkshopId").toString());

            //(value = "车间请购单标题")
            dataMap.setOrderWorkshopSubject(item.get("orderWorkshopSubject") == null ? "" : item.get("orderWorkshopSubject").toString());

            //(value = "车间请购单行号")
            dataMap.setOrderWorkshopRowId(item.get("orderWorkshopRowId") == null ? "" : item.get("orderWorkshopRowId").toString());

            //(value = "工厂请购单创建日期")
            dataMap.setOrderWerksApplicationDate(item.get("orderWerksApplicationDate") == null ? "" : item.get("orderWerksApplicationDate").toString());

            //(value = "工厂需求申请人")
            dataMap.setOrderWerksUsername(item.get("orderWerksUsername") == null ? "" : item.get("orderWerksUsername").toString());

            //(value = "工厂请购单号")
            dataMap.setOrderWerksId(item.get("orderWerksId") == null ? "" : item.get("orderWerksId").toString());

            //(value = "工厂请购单行号")
            dataMap.setOrderWerksRowId(item.get("orderWerksRowId") == null ? "" : item.get("orderWerksRowId").toString());

            //(value = "物料编码")
            dataMap.setMaterialNo(item.get("materialNo") == null ? "" : item.get("materialNo").toString());

            //(value = "物料描述")
            dataMap.setMaterialZhDesc(item.get("materialZhDesc") == null ? "" : item.get("materialZhDesc").toString());

            //(value = "单位")
            dataMap.setBasicUnit(item.get("basicUnit") == null ? "" : item.get("basicUnit").toString());

            //(value = "申请数量")
            dataMap.setRequestQty(item.get("requestQty") == null ? "" : item.get("requestQty").toString());

            //(value = "批准数量")
            dataMap.setApprovalQty(item.get("approvalQty") == null ? "" : item.get("approvalQty").toString());

            //(value = "安全库存数量")
            dataMap.setSafetyQtyBasicUnit(item.get("safetyQtyBasicUnit") == null ? "" : item.get("safetyQtyBasicUnit").toString());

            //(value = "工厂下物料总库存")
            dataMap.setWerksInventory(item.get("werksInventory") == null ? "" : item.get("werksInventory").toString());

            //(value = "在途库存")
            dataMap.setWayQuantity(item.get("wayQuantity") == null ? "" : item.get("wayQuantity").toString());

            //(value = "紧急程度")  0 正常；1 重 要；2 紧急
            if(item.get("urgency")!=null){
                String urgency = item.get("urgency").toString();
                dataMap.setUrgency("0".equals(urgency)?"正常":"1".equals(urgency)?"重要":"2".equals(urgency)?"紧急":"");
            }else{
                dataMap.setUrgency("");
            }
            //dataMap.setUrgency(item.get("urgency") == null ? "" : item.get("urgency").toString());

            //(value = "运输方式")0 海运；1 空 运；2 人带
            if(item.get("orderWerksShippingFangshi")!=null){
                String orderWerksShippingFangshi = item.get("orderWerksShippingFangshi").toString();
                dataMap.setOrderWerksShippingFangshi("0".equals(orderWerksShippingFangshi)?"海运":"1".equals(orderWerksShippingFangshi)?"空运":"2".equals(orderWerksShippingFangshi)?"人带":"");
            }else{
                dataMap.setOrderWerksShippingFangshi("");
            }
            //dataMap.setOrderWerksShippingFangshi(item.get("orderWerksShippingFangshi") == null ? "" : item.get("orderWerksShippingFangshi").toString());

            //(value = "OA流程Id")
            dataMap.setOaProcessId(item.get("oaProcessId") == null ? "" : item.get("oaProcessId").toString());

            //(value = "国内交货单号")
            dataMap.setDeliveryNote(item.get("deliveryNote") == null ? "" : item.get("deliveryNote").toString());

            //(value = "箱码")
            dataMap.setBoxNote(item.get("boxNote") == null ? "" : item.get("boxNote").toString());

            //(value = "箱码明细行号")
            dataMap.setBoxNoteItem(item.get("boxNoteItem") == null ? "" : item.get("boxNoteItem").toString());

            //(value = "国内收货数量")
            dataMap.setDomesticQtyReceived(item.get("domesticQtyReceived") == null ? "" : item.get("domesticQtyReceived").toString());

            //(value = "装箱单号")
            dataMap.setPackageList(item.get("packageList") == null ? "" : item.get("packageList").toString());
            //(value = "装箱单行号")
            dataMap.setPackageListItem(item.get("zposnr") == null ? "" : item.get("zposnr").toString());

            //(value = "国内拆箱数量")
            dataMap.setGnsjsl(item.get("gnsjsl") == null ? "" : item.get("gnsjsl").toString());

            dataMap.setZaituCabno(item.get("zaituCabno") == null ? "" : item.get("zaituCabno").toString());//柜号
            dataMap.setZaituEbeln(item.get("zaituEbeln") == null ? "" : item.get("zaituEbeln").toString());//海外采购订单
            dataMap.setZaituEbelp(item.get("zaituEbelp") == null ? "" : item.get("zaituEbelp").toString());//采购订单行号
            dataMap.setZaituDgdat(item.get("zaituDgdat") == null ? "" : item.get("zaituDgdat").toString());//预计到港日期
            dataMap.setZaituVbeln(item.get("zaituVbeln") == null ? "" : item.get("zaituVbeln").toString());//海外交货单
            dataMap.setZaituPosnr(item.get("zaituPosnr") == null ? "" : item.get("zaituPosnr").toString());//海外交货单行号
            dataMap.setZaituMenge(item.get("zaituMenge") == null ? "" : item.get("zaituMenge").toString());//国内发货数量
            dataMap.setZaituWamng(item.get("zaituWamng") == null ? "" : item.get("zaituWamng").toString());//海外收货数量

            //(value = "是否海运")
            if(item.get("orderWerksShippingType")!=null){
                String orderWerksShippingType = item.get("orderWerksShippingType").toString();
                dataMap.setShippingType("0".equals(orderWerksShippingType)?"否":"1".equals(orderWerksShippingType)?"是":"");
            }else{
                dataMap.setShippingType("");
            }
            //dataMap.setShippingType(item.get("orderWerksShippingType") == null ? "" : item.get("orderWerksShippingType").toString());

            //(value = "箱码状态")
            dataMap.setBoxStatus(item.get("boxStatus") == null ? "" : item.get("boxStatus").toString());

            //(value = "箱状态")
            dataMap.setBoxStatusDesc(item.get("boxStatusDesc") == null ? "" : item.get("boxStatusDesc").toString());

            //(value = "OA审批日期")
            dataMap.setOaApprovalDate(item.get("oaApprovalDate") == null ? "" : item.get("oaApprovalDate").toString());

            //(value = "国内到货日期")
            dataMap.setDomesticArrivalDate(item.get("domesticArrivalDate") == null ? "" : item.get("domesticArrivalDate").toString());

            //(value = "国内出库日期")
            dataMap.setDomesticDeliveryDate(item.get("domesticDeliveryDate") == null ? "" : item.get("domesticDeliveryDate").toString());

            //(value = "海外到货日期")
            dataMap.setOverseaArrivalDate(item.get("overseaArrivalDate") == null ? "" : item.get("overseaArrivalDate").toString());

            //(value = "耗费时间")
            dataMap.setDaysSpent(item.get("daysSpent") == null ? "" : item.get("daysSpent").toString());

//            prStatus：需求状态
            dataMap.setPrStatus(item.get("prStatus") == null ? "" : item.get("prStatus").toString());

//            internalOrderNo：线下合同号
            dataMap.setInternalOrderNo(item.get("internalOrderNo") == null ? "" : item.get("internalOrderNo").toString());
//            fbk32：采购专员
            dataMap.setFbk32(item.get("fbk32") == null ? "" : item.get("fbk32").toString());
//            fbk29：采购工程师
            dataMap.setFbk29(item.get("fbk29") == null ? "" : item.get("fbk29").toString());
//            srmOrderNo：SRM采购订单号
            dataMap.setSrmOrderNo(item.get("srmOrderNo") == null ? "" : item.get("srmOrderNo").toString());
//            sapOrderNo：SAP采购订单号
            dataMap.setSapOrderNo(item.get("sapOrderNo") == null ? "" : item.get("sapOrderNo").toString());
//            poCreateDate：采购订单创建时间
            dataMap.setPoCreateDate(item.get("poCreateDate") == null ? "" : item.get("poCreateDate").toString());
//            priceReviewTime：定商定价时间
            dataMap.setPriceReviewTime(item.get("priceReviewTime") == null ? "" : item.get("priceReviewTime").toString());
//            unlockReason：解锁原因
            dataMap.setUnlockReason(item.get("unlockReason") == null ? "" : item.get("unlockReason").toString());
//
//            orderWerksShippingFangshi：运输方式, 0 海运；1 空 运；2 人带
//            urgency：紧急程度，0 正常；1 重 要；2 紧急

            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/OrderKeyDatesTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, OrderKeyDatesReportVO.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            e.printStackTrace();
        }

        return filePath;
    }

    @SuppressWarnings({ "rawtypes", "unchecked" })
	@Override
    public String saveWhsDumpDtlsExcel(List<Map<String, Object>> dtl, String filename) {
        List<OverseaWhsDumpDtlsReportVO> dataList = new ArrayList<OverseaWhsDumpDtlsReportVO>();
        if (dtl.isEmpty()){
            return null;
        }
        String filePath = excelCacheFilePath+"/"+filename;
        // 整理待导出数据
        for (Map<String, Object> item : dtl){
            OverseaWhsDumpDtlsReportVO dataMap = new OverseaWhsDumpDtlsReportVO();
            //转储申请单号	行号	任务状态	转出工厂	转出仓库	转入工厂	转入仓库	物料编码	物料描述
            // 申请数量	实出数量	基本单位	申请备注	申请日期	OA编号	审批日期	实出数量	实出件数
            // 销售单位	出库储位	出库备注	出库日期	创建用户

            //@ApiModelProperty(value = "转储申请单号")
            dataMap.setWhsDumpNo(item.get("whsDumpNo") == null ? "" : item.get("whsDumpNo").toString());

            //@ApiModelProperty(value = "行号")
            dataMap.setItem(item.get("item") == null ? "" : item.get("item").toString());

            //@ApiModelProperty(value = "任务状态")
            String spmsStatus = item.get("spmsStatus") == null ? "" : item.get("spmsStatus").toString();
            if("0".equals(spmsStatus)){
                spmsStatus = "删除";
            }else if("1".equals(spmsStatus)){
                spmsStatus = "草稿";
            }else if("2".equals(spmsStatus)){
                spmsStatus = "待审批";
            }else if("3".equals(spmsStatus)){
                spmsStatus = "OA审批中";
            }else if("4".equals(spmsStatus)){
                spmsStatus = "OA驳回";
            }else if("5".equals(spmsStatus)){
                spmsStatus = "出库中";
            }else if("6".equals(spmsStatus)){
                spmsStatus = "待获取 SAP PO";
            }else if("7".equals(spmsStatus)){
                spmsStatus = "获取 SAP PO失败";
            }else if("8".equals(spmsStatus)){
                spmsStatus = "待获取 SAP DN";
            }else if("9".equals(spmsStatus)){
                spmsStatus = "获取 SAP DN失败";
            }else if("10".equals(spmsStatus)){
                spmsStatus = "完成(SAP DN 成功)";
            }else if("11".equals(spmsStatus)){
                spmsStatus = "撤回出库中";
            }
            dataMap.setSpmsStatus(spmsStatus);

            //@ApiModelProperty(value = "转出工厂")
            dataMap.setWerksDumpOut(item.get("werksDumpOut") == null ? "" : item.get("werksDumpOut").toString());

            //@ApiModelProperty(value = "转出仓库")
            dataMap.setWhsLocationCodeDumpOut(item.get("whsLocationCodeDumpOut") == null ? "" : item.get("whsLocationCodeDumpOut").toString());

            //@ApiModelProperty(value = "转入工厂")
            dataMap.setWerksDumpIn(item.get("werksDumpIn") == null ? "" : item.get("werksDumpIn").toString());

            //@ApiModelProperty(value = "转入仓库")
            dataMap.setWhsLocationCodeDumpIn(item.get("whsLocationCodeDumpIn") == null ? "" : item.get("whsLocationCodeDumpIn").toString());

            //@ApiModelProperty(value = "物料编码")
            dataMap.setMaterialNo(item.get("materialNo") == null ? "" : item.get("materialNo").toString());

            //@ApiModelProperty(value = "物料描述")
            dataMap.setMaterialZhDesc(item.get("materialZhDesc") == null ? "" : item.get("materialZhDesc").toString());

            //@ApiModelProperty(value = "申请数量")
            dataMap.setApplyQtyBasicUnit(item.get("applyQtyBasicUnit") == null ? "" : item.get("applyQtyBasicUnit").toString());

            //@ApiModelProperty(value = "实出数量")
            dataMap.setApplyQtyUnitSales(item.get("applyQtyUnitSales") == null ? "" : item.get("applyQtyUnitSales").toString());

            //@ApiModelProperty(value = "基本单位")
            dataMap.setBasicUnit(item.get("basicUnit") == null ? "" : item.get("basicUnit").toString());

            //@ApiModelProperty(value = "申请备注")
            dataMap.setApplyRemark(item.get("applyRemark") == null ? "" : item.get("applyRemark").toString());

            //@ApiModelProperty(value = "申请日期")
            dataMap.setCreateDate(item.get("createDate") == null ? "" : item.get("createDate").toString());

            //@ApiModelProperty(value = "OA编号")
            dataMap.setOaBianhao(item.get("oaBianhao") == null ? "" : item.get("oaBianhao").toString());

            //@ApiModelProperty(value = "审批日期")
            dataMap.setOaApprovalDate(item.get("oaApprovalDate") == null ? "" : item.get("oaApprovalDate").toString());

            //@ApiModelProperty(value = "实出数量")
            dataMap.setActualQtyBasicUnit(item.get("actualQtyBasicUnit") == null ? "" : item.get("actualQtyBasicUnit").toString());

            //@ApiModelProperty(value = "实出件数")
            dataMap.setActualQtyUnitSales(item.get("actualQtyUnitSales") == null ? "" : item.get("actualQtyUnitSales").toString());

            //@ApiModelProperty(value = "销售单位")
            dataMap.setUnitSales(item.get("unitSales") == null ? "" : item.get("unitSales").toString());

            //@ApiModelProperty(value = "出库储位")
            String actualStorageInfo = item.get("actualStorageInfo") == null ? "" : item.get("actualStorageInfo").toString();
            if(actualStorageInfo!=null && actualStorageInfo.length()>0){
                JSONArray actualStorageInfoS = JSON.parseArray(actualStorageInfo);
                actualStorageInfo = actualStorageInfoS.getJSONObject(0).getString("storageNo");
            }
            dataMap.setActualStorageInfo(actualStorageInfo);

            //@ApiModelProperty(value = "出库备注")
            dataMap.setActualRemark(item.get("actualRemark") == null ? "" : item.get("actualRemark").toString());

            //@ApiModelProperty(value = "出库日期")
            dataMap.setDumpOutDate(item.get("dumpOutDate") == null ? "" : item.get("dumpOutDate").toString());

            //@ApiModelProperty(value = "创建用户")
            dataMap.setCreateUserid(item.get("createUserid") == null ? "" : item.get("createUserid").toString());

            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/overseaWhsDumpDtls.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, OverseaWhsDumpDtlsReportVO.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            e.printStackTrace();
        }

        return filePath;
    }



    @SuppressWarnings({ "rawtypes", "unchecked" })
	@Override
	public String saveMaterialPhotosExcel(ResponseResult materialPhotosList, String filename) {
		List<MaterialPhotosReportVO> dataList = new ArrayList<MaterialPhotosReportVO>();
		IPage ipage = (IPage) materialPhotosList.getData().get("materialPhotosList");
		List<Map<String, Object>> records = ipage.getRecords();
        if (CollectionUtils.isEmpty(records)){
            return null;
        }
        String filePath = excelCacheFilePath+"/"+filename;
        // 整理待导出数据
        for (Map<String, Object> item : records){
        	MaterialPhotosReportVO dataMap = new MaterialPhotosReportVO();
        	// 工厂
            dataMap.setMaterialNo(item.get("materialNo") == null ? "" : item.get("materialNo").toString());
            // 仓库
            dataMap.setPhNum(item.get("phNum") == null ? "" : item.get("phNum").toString());
            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/MaterialPhotosTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, MaterialPhotosReportVO.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            e.printStackTrace();
        }

        return filePath;
	}


	@SuppressWarnings({ "unchecked", "rawtypes" })
	@Override
	public String saveMaterialStockQtyDifferExcel(ResponseResult materialStockQtyDifferList, String filename) {
		List<MaterialStockQtyDifferReportVO> dataList = new ArrayList<MaterialStockQtyDifferReportVO>();
		List<Map<String, Object>> records = (List<Map<String, Object>>) materialStockQtyDifferList.getData().get("returnList");
        if (CollectionUtils.isEmpty(records)){
            return null;
        }
        String filePath = excelCacheFilePath+"/"+filename;
        // 整理待导出数据
        for (Map<String, Object> item : records){
        	MaterialStockQtyDifferReportVO dataMap = new MaterialStockQtyDifferReportVO();
        	// 工厂
            dataMap.setWerks(item.get("werks") == null ? "" : item.get("werks").toString());
            // 仓库
            dataMap.setWhsLocationCode(item.get("whsLocationCode") == null ? "" : item.get("whsLocationCode").toString());
            // 物料编码
            dataMap.setMaterialNo(item.get("materialNo") == null ? "" : item.get("materialNo").toString());
            // 物料描述
            dataMap.setMaterialZhDesc(item.get("materialZhDesc") == null ? "" : item.get("materialZhDesc").toString());
            // 基本单位
            dataMap.setBasicUnit(item.get("basicUnit") == null ? "" : item.get("basicUnit").toString());
            // SPMS现存量
            dataMap.setAvailableQty(item.get("availableQty") == null ? "" : item.get("availableQty").toString());
            // SAP库存量
            dataMap.setLabst(item.get("labst") == null ? "" : item.get("labst").toString());
            // SPMS&SAP库存差异
            dataMap.setDiffQty(item.get("diffQty") == null ? "" : item.get("diffQty").toString());
            // 未提交SAP库存量
            dataMap.setNoPushQty(item.get("noPushQty") == null ? "" : item.get("noPushQty").toString());
            // 待复查库存差异
            dataMap.setDiffReviewQty(item.get("diffReviewQty") == null ? "" : item.get("diffReviewQty").toString());
            // 查询日期
            dataMap.setNowDate(item.get("nowDate") == null ? "" : item.get("nowDate").toString());
            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/MaterialStockQtyDifferTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, MaterialStockQtyDifferReportVO.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            e.printStackTrace();
        }

        return filePath;
	}


    @SuppressWarnings({ "unchecked", "rawtypes" })
    @Override
    public String saveIntransitDataExcel(ResponseResult intransitDataList, String filename) {
        List<IntransitDataReportVO> dataList = new ArrayList<IntransitDataReportVO>();
        List<Map<String, Object>> records = (List<Map<String, Object>>) intransitDataList.getData().get("receiptAndDeliveryReports");
        if (CollectionUtils.isEmpty(records)){
            return null;
        }
        String filePath = excelCacheFilePath+"/"+filename;
        //String nowDate = DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss");
        // 整理待导出数据
        for (Map<String, Object> item : records){
//            {"TBZHUANGCHU":[
//                {"VBELN":"700559734","LOEKZ":"","IMONTH":0.67,"MENGE":0.000,"ZWEMNG_XS":0.000,"LIFEX":"","FHWERKS":"GF03","ZHYF":0.00,"WEMNG":0.000,"WAMNG":2.000,
//                        "WAERS":"","ZZKWERT":0.00,"BEDAT":1667232000000,"ERDAT":1667232000000,"VTWEG":"","SHWERKS":"CM01","ZKWERT":0.00,"REMARK":"","ZWAERS":"",
//                        "MATNR":"160012657","MAKTX":"YM33064G 300喷墨陶瓷仿古釉面砖 17PCS G2","VTEXT":"","EBELN":"4481030912","ZVRKME_XS":"CTN","BOLNR":"",
//                        "ZWAMNG_XS":2.000,"EBELP":"00010","ZCABNO":"","MEINS":"CTN","MAGRV":"","BORGR_GRP":"","SHKZG":"","SPART":"10",
//                        "VKORG":"","POSNR":"000000","VERUR":"","ZNLYF":0.00,"ZBXF":0.00}]}
            IntransitDataReportVO dataMap = new IntransitDataReportVO();
            dataMap.setWerks(item.get("werks") == null ? "" : item.get("werks").toString());//发货工厂
            dataMap.setReceiveWerks(item.get("receiveWerks") == null ? "" : item.get("receiveWerks").toString());//收货工厂
            dataMap.setPoDate(item.get("poDate") == null ? "" : item.get("poDate").toString());//采购订单日期
            dataMap.setPurchaseNo(item.get("purchaseNo") == null ? "" : item.get("purchaseNo").toString());//采购订单
            dataMap.setPoItemNo(item.get("poItemNo") == null ? "" : item.get("poItemNo").toString());//采购订单行号
            dataMap.setArrivalDate(item.get("arrivalDate") == null ? "" : item.get("arrivalDate").toString());//预计到港日期-
            dataMap.setPackageNo(item.get("packageNo") == null ? "" : item.get("packageNo").toString());//装箱单号-
            dataMap.setCabNo(item.get("cabNo") == null ? "" : item.get("cabNo").toString());//柜号
            dataMap.setSysCode(item.get("sysCode") == null ? "" : item.get("sysCode").toString());//收货系统
            dataMap.setSapDeliveryNote(item.get("sapDeliveryNote") == null ? "" : item.get("sapDeliveryNote").toString());//交货单
            dataMap.setSapDevItem(item.get("sapDevItem") == null ? "" : item.get("sapDevItem").toString());//交货单行号
            dataMap.setBoxNote(item.get("boxNote") == null ? "" : item.get("boxNote").toString());//箱码
            dataMap.setProductLine(item.get("productLine") == null ? "" : item.get("productLine").toString());//产品线
            dataMap.setMaterialNo(item.get("materialNo") == null ? "" : item.get("materialNo").toString());//物料编码
            dataMap.setMaterialName(item.get("materialName") == null ? "" : item.get("materialName").toString());//物料描述
            dataMap.setShippedQty(item.get("shippedQty") == null ? "" : item.get("shippedQty").toString());//发货数量
            dataMap.setReceivedQty(item.get("receivedQty") == null ? "" : item.get("receivedQty").toString());//收货数量
            dataMap.setBaseUnit(item.get("baseUnit") == null ? "" : item.get("baseUnit").toString());//基本单位
            dataMap.setShippedNumber(item.get("shippedNumber") == null ? "" : item.get("shippedNumber").toString());//发货件数
            dataMap.setReceivedNumber(item.get("receivedNumber") == null ? "" : item.get("receivedNumber").toString());//收货件数
            dataMap.setSaleUnit(item.get("saleUnit") == null ? "" : item.get("saleUnit").toString());//销售单位
            dataMap.setNowDate(item.get("nowDate") == null ? "" : item.get("nowDate").toString());//查询日期

//            String werks;//发货工厂
//            String receiveWerks;//收货工厂
//            String poDate;//采购订单日期
//            String purchaseNo;//采购订单
//            String poItemNo;//采购订单行号
//            String arrivalDate;//预计到港日期
//            String packageNo;//装箱单号
//            String cabNo;//柜号
//            String sysCode;//收货系统
//            String sapDeliveryNote;//交货单
//            String sapDevItem;//交货单行号
//            String boxNote;//箱码
//            String productLine;//产品线
//            String materialNo;//物料编码
//            String materialName;//物料描述
//            String shippedQty;//发货数量
//            String receivedQty;//收货数量
//            String baseUnit;//基本单位
//            String shippedNumber;//发货件数
//            String receivedNumber;//收货件数
//            String saleUnit;//销售单位
//            String nowDate;//查询日期

            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/IntransitDataTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, IntransitDataReportVO.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            e.printStackTrace();
        }

        return filePath;
    }



    @SuppressWarnings({ "unchecked", "rawtypes" })
    @Override
    public String saveWhsOperateLogExcel(ResponseResult intransitDataList, String filename) {
        List<WhsOperateLogReportVO> dataList = new ArrayList<WhsOperateLogReportVO>();
        List<Map<String, Object>> records = (List<Map<String, Object>>) intransitDataList.getData().get("whsOperateLogList");
        if (CollectionUtils.isEmpty(records)){
            return null;
        }
        String filePath = excelCacheFilePath+"/"+filename;
        //String nowDate = DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss");
        // 整理待导出数据
        for (Map<String, Object> item : records){
            WhsOperateLogReportVO dataMap = new WhsOperateLogReportVO();

            //SAP交货单	仓库编号	储位区号	储位编号	入库单号	其它出入库单号	出库单号	创建日期	备注	工厂	工号	成本中心	操作类型	数量
            // 日志类型	柜号	物料描述	物料编码	用户名	移动类型	箱码	行ID	装箱单号	调拨单号	销售单位	领用人	领用单号

            dataMap.setSapDeliveryNote(item.get("sapDeliveryNote") == null ? "" : item.get("sapDeliveryNote").toString());//SAP交货单
            dataMap.setWhsLocationCode(item.get("whsLocationCode") == null ? "" : item.get("whsLocationCode").toString());//仓库编号
            dataMap.setStorageArea(item.get("storageArea") == null ? "" : item.get("storageArea").toString());//储位区号
            dataMap.setStorageNo(item.get("storageNo") == null ? "" : item.get("storageNo").toString());//储位编号
            dataMap.setOverseaWhsInNo(item.get("overseaWhsInNo") == null ? "" : item.get("overseaWhsInNo").toString());//入库单号
            dataMap.setOverseaOtherTaskNo(item.get("overseaOtherTaskNo") == null ? "" : item.get("overseaOtherTaskNo").toString());//其它出入库单号
            dataMap.setOverseaWhsOutNo(item.get("overseaWhsOutNo") == null ? "" : item.get("overseaWhsOutNo").toString());//出库单号
            dataMap.setCreateTime(item.get("createTime") == null ? "" : item.get("createTime").toString());//创建日期
            dataMap.setPostingDate(item.get("postingDate") == null ? "" : item.get("postingDate").toString());//过账日期
            dataMap.setComments(item.get("comments") == null ? "" : item.get("comments").toString());//备注
            dataMap.setWerks(item.get("werks") == null ? "" : item.get("werks").toString());//工厂
            dataMap.setUserId(item.get("userId") == null ? "" : item.get("userId").toString());//工号
            dataMap.setLicenseNo(item.get("licenseNo") == null ? "" : item.get("licenseNo").toString());//车牌号
            dataMap.setCostCenter(item.get("costCenter") == null ? "" : item.get("costCenter").toString());//成本中心

            //操作类型:1入库(加仓库库存);2上架(加储位库存);3下架(减储位库存);4出库(减仓库库存);5移位(出储位);6移位(进储位);7盘点(盘盈入储位);
            // 8盘点(盘亏出储位);9盘点(盘盈入仓库);10盘点(盘亏出仓库);11移仓(出储位);12移仓(入储位);13移仓(出仓库);14移仓(入仓库);15转储(出仓库);
            // 16转储(出储位);17转储(入仓库);18转储(入储位);19撤销(入储位);20撤销(出储位);21海外箱码收货;22海外撤销箱码收货;
            String operateType = item.get("operateType") == null ? "" : item.get("operateType").toString();
            if("1".equals(operateType)){
                operateType = OperateLogTypeEnum.OPERATE_1.getDescZh();
            }else if("2".equals(operateType)){
                operateType = OperateLogTypeEnum.OPERATE_2.getDescZh();
            }else if("3".equals(operateType)){
                operateType = OperateLogTypeEnum.OPERATE_3.getDescZh();
            }else if("4".equals(operateType)){
                operateType = OperateLogTypeEnum.OPERATE_4.getDescZh();
            }else if("5".equals(operateType)){
                operateType = OperateLogTypeEnum.OPERATE_5.getDescZh();
            }else if("6".equals(operateType)){
                operateType = OperateLogTypeEnum.OPERATE_6.getDescZh();
            }else if("7".equals(operateType)){
                operateType = OperateLogTypeEnum.OPERATE_7.getDescZh();
            }else if("8".equals(operateType)){
                operateType = OperateLogTypeEnum.OPERATE_8.getDescZh();
            }else if("9".equals(operateType)){
                operateType = OperateLogTypeEnum.OPERATE_9.getDescZh();
            }else if("10".equals(operateType)){
                operateType = OperateLogTypeEnum.OPERATE_10.getDescZh();
            }else if("11".equals(operateType)){
                operateType = OperateLogTypeEnum.OPERATE_11.getDescZh();
            }else if("12".equals(operateType)){
                operateType = OperateLogTypeEnum.OPERATE_12.getDescZh();
            }else if("13".equals(operateType)){
                operateType = OperateLogTypeEnum.OPERATE_13.getDescZh();
            }else if("14".equals(operateType)){
                operateType = OperateLogTypeEnum.OPERATE_14.getDescZh();
            }else if("15".equals(operateType)){
                operateType = OperateLogTypeEnum.OPERATE_15.getDescZh();
            }else if("16".equals(operateType)){
                operateType = OperateLogTypeEnum.OPERATE_16.getDescZh();
            }else if("17".equals(operateType)){
                operateType = OperateLogTypeEnum.OPERATE_17.getDescZh();
            }else if("18".equals(operateType)){
                operateType = OperateLogTypeEnum.OPERATE_18.getDescZh();
            }else if("19".equals(operateType)){
                operateType = OperateLogTypeEnum.OPERATE_19.getDescZh();
            }else if("20".equals(operateType)){
                operateType = OperateLogTypeEnum.OPERATE_20.getDescZh();
            }else if("21".equals(operateType)){
                operateType = OperateLogTypeEnum.OPERATE_21.getDescZh();
            }else if("22".equals(operateType)){
                operateType = OperateLogTypeEnum.OPERATE_22.getDescZh();
            }
            dataMap.setOperateType(operateType);//操作类型
            dataMap.setQuantity(item.get("quantity") == null ? "" : item.get("quantity").toString());//数量

            //日志单据类型：1自管仓仓库库存日志；2自管仓储位库存日志；3海外仓仓库库存日志；4海外仓储位库存日志；
            String documentType = item.get("documentType") == null ? "" : item.get("documentType").toString();
            if("1".equals(documentType)){
                documentType = "自管仓仓库库存日志";
            }else if("2".equals(documentType)){
                documentType = "自管仓储位库存日志";
            }else if("3".equals(documentType)){
                documentType = "海外仓仓库库存日志";
            }else if("4".equals(documentType)){
                documentType = "海外仓储位库存日志";
            }
            dataMap.setDocumentType(documentType);//日志类型
            dataMap.setPack(item.get("pack") == null ? "" : item.get("pack").toString());//柜号
            dataMap.setMaterialZhDesc(item.get("materialZhDesc") == null ? "" : item.get("materialZhDesc").toString());//物料描述
            dataMap.setMaterialNo(item.get("materialNo") == null ? "" : item.get("materialNo").toString());//物料编码
            dataMap.setUsername(item.get("username") == null ? "" : item.get("username").toString());//用户名
            dataMap.setMovementType(item.get("movementType") == null ? "" : item.get("movementType").toString());//移动类型
            dataMap.setPackbox(item.get("packbox") == null ? "" : item.get("packbox").toString());//箱码
            dataMap.setLogAutoId(item.get("logAutoId") == null ? "" : item.get("logAutoId").toString());//行ID
            dataMap.setPackboxNum(item.get("packboxNum") == null ? "" : item.get("packboxNum").toString());//装箱单号
            dataMap.setOverseaWhsMoveNo(item.get("overseaWhsMoveNo") == null ? "" : item.get("overseaWhsMoveNo").toString());//调拨单号
            dataMap.setUnitSales(item.get("unitSales") == null ? "" : item.get("unitSales").toString());//销售单位
            dataMap.setLastName(item.get("username") == null ? "" : item.get("username").toString());//领用人
            dataMap.setRequisitionNo(item.get("requisitionNo") == null ? "" : item.get("requisitionNo").toString());//领用单号
            dataMap.setRemarks(item.get("remarks") == null ? "" : item.get("remarks").toString());//备注
            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/WhsOperateLogTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, WhsOperateLogReportVO.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            e.printStackTrace();
        }

        return filePath;
    }


    @SuppressWarnings({ "unchecked", "rawtypes" })
	@Override
	public String saveWhsMaterialStockQtyDifferExcel(ResponseResult materialStockQtyDifferList, String filename) {
		List<WhsMaterialStockQtyDifferReportVO> dataList = new ArrayList<WhsMaterialStockQtyDifferReportVO>();
		List<Map<String, Object>> records = (List<Map<String, Object>>) materialStockQtyDifferList.getData().get("returnList");
        if (CollectionUtils.isEmpty(records)){
            return null;
        }
        String filePath = excelCacheFilePath+"/"+filename;
        // 整理待导出数据
        for (Map<String, Object> item : records){
        	WhsMaterialStockQtyDifferReportVO dataMap = new WhsMaterialStockQtyDifferReportVO();
        	// 工厂
            dataMap.setWerks(item.get("werks") == null ? "" : item.get("werks").toString());
            // 仓库
            dataMap.setWhsLocationCode(item.get("whsLocationCode") == null ? "" : item.get("whsLocationCode").toString());
            // 库存类别
            dataMap.setGoodsType(item.get("goodsType") == null ? "" : item.get("goodsType").toString());
            // 物料编码
            dataMap.setMaterialNo(item.get("materialNo") == null ? "" : item.get("materialNo").toString());
            // 物料描述
            dataMap.setMaterialZhDesc(item.get("materialZhDesc") == null ? "" : item.get("materialZhDesc").toString());
            // 基本单位
            dataMap.setBasicUnit(item.get("basicUnit") == null ? "" : item.get("basicUnit").toString());
            // SPMS现存量
            dataMap.setAvailableQty(item.get("availableQty") == null ? "" : item.get("availableQty").toString());
            // SPMS修正量
            dataMap.setCorrqty(item.get("corrqty") == null ? "" : item.get("corrqty").toString());
            // SAP库存量
            dataMap.setLabst(item.get("labst") == null ? "" : item.get("labst").toString());
            // SPMS&SAP库存差异
            dataMap.setDiffQty(item.get("diffQty") == null ? "" : item.get("diffQty").toString());
            // 未提交SAP库存量
            dataMap.setNoPushQty(item.get("noPushQty") == null ? "" : item.get("noPushQty").toString());
            // 待复查库存差异
            dataMap.setDiffReviewQty(item.get("diffReviewQty") == null ? "" : item.get("diffReviewQty").toString());
            // 查询日期
            dataMap.setNowDate(item.get("nowDate") == null ? "" : item.get("nowDate").toString());
            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/WhsMaterialStockQtyDifferTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, WhsMaterialStockQtyDifferReportVO.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            e.printStackTrace();
        }

        return filePath;
	}


	@SuppressWarnings({ "unchecked", "rawtypes" })
	@Override
	public String saveWhsStockQtyExcel(ResponseResult whsStockList, String filename) {
		List<WhsStockQtyReportVO> dataList = new ArrayList<WhsStockQtyReportVO>();
		IPage page = (IPage) whsStockList.getData().get("storageInventory");
		List<Map<String, Object>> records = page.getRecords();
        if (CollectionUtils.isEmpty(records)){
            return null;
        }
        String filePath = excelCacheFilePath+"/"+filename;
        // 整理待导出数据
        for (Map<String, Object> item : records){
        	WhsStockQtyReportVO dataMap = new WhsStockQtyReportVO();
        	// 工厂
            dataMap.setWerks(item.get("werks") == null ? "" : item.get("werks").toString());
            // 仓库
            dataMap.setWhsLocationCode(item.get("whsLocationCode") == null ? "" : item.get("whsLocationCode").toString());
            // 储位编号
            dataMap.setStorageNo(item.get("storageNo") == null ? "" : item.get("storageNo").toString());
            // 包装单号
            dataMap.setPackageNote(item.get("packageNote") == null ? "" : item.get("packageNote").toString());
            // 序号
            dataMap.setItem(item.get("item") == null ? "" : item.get("item").toString());
            // 箱码
            dataMap.setBoxNote(item.get("boxNote") == null ? "" : item.get("boxNote").toString());
            // 物料编码
            dataMap.setMaterialNo(item.get("materialNo") == null ? "" : item.get("materialNo").toString());
            // 物料描述
            dataMap.setMaterialZhDesc(item.get("materialZhDesc") == null ? "" : item.get("materialZhDesc").toString());
            // 库存数量
            dataMap.setAvailableQty(item.get("availableQty") == null ? "" : item.get("availableQty").toString());
            // 基本单位
            dataMap.setBasicUnit(item.get("basicUnit") == null ? "" : item.get("basicUnit").toString());
            // 库存件数
            dataMap.setPieceQty(item.get("pieceQty") == null ? "" : item.get("pieceQty").toString());
            // 销售单位
            dataMap.setUnitSales(item.get("unitSales") == null ? "" : item.get("unitSales").toString());
            // 查询日期
            dataMap.setNowDate(item.get("nowDate") == null ? "" : item.get("nowDate").toString());
            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/WhsStockQtyTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, WhsStockQtyReportVO.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            e.printStackTrace();
        }

        return filePath;
	}


	@SuppressWarnings({ "rawtypes", "unchecked" })
	@Override
	public String saveWhsBoxInfoExcel(ResponseResult boxInfoList, String filename) {
		List<WhsBoxInfoReportVO> dataList = new ArrayList<WhsBoxInfoReportVO>();
		IPage ipage = (IPage) boxInfoList.getData().get("boxInfo");
		List<Map<String, Object>> records = ipage.getRecords();
        if (CollectionUtils.isEmpty(records)){
            return null;
        }
        String filePath = excelCacheFilePath+"/"+filename;
        // 整理待导出数据
        for (Map<String, Object> item : records){
        	WhsBoxInfoReportVO dataMap = new WhsBoxInfoReportVO();
        	// 工厂
            dataMap.setWerks(item.get("werks") == null ? "" : item.get("werks").toString());
            // 仓库
            dataMap.setWhsLocationCode(item.get("whsLocationCode") == null ? "" : item.get("whsLocationCode").toString());
            // 储位编号
            dataMap.setStorageNo(item.get("storageNo") == null ? "" : item.get("storageNo").toString());
            // 包装单号
            dataMap.setPackageNote(item.get("packageNote") == null ? "" : item.get("packageNote").toString());
            // 序号
            dataMap.setItem(item.get("item") == null ? "" : item.get("item").toString());
            // 箱码
            dataMap.setBoxNote(item.get("boxNote") == null ? "" : item.get("boxNote").toString());
            // 采购订单
            dataMap.setPurchaseNo(item.get("purchaseNo") == null ? "" : item.get("purchaseNo").toString());
            // 交货单
            dataMap.setDeliveryNoteSap(item.get("deliveryNoteSap") == null ? "" : item.get("deliveryNoteSap").toString());
            // SRM合同号
            dataMap.setSrmContractNo(item.get("srmContractNo") == null ? "" : item.get("srmContractNo").toString());
            // 查询日期
            dataMap.setNowDate(item.get("nowDate") == null ? "" : item.get("nowDate").toString());
            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/WhsBoxInfoTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, WhsBoxInfoReportVO.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            e.printStackTrace();
        }

        return filePath;
	}


	@SuppressWarnings({ "unchecked", "rawtypes" })
	@Override
	public String saveSapDeliveryNoteAndOtherTaskExcel(ResponseResult sapDeliveryNoteAndOtherTask, String filename) {
		List<WhsDeliveryAndOtherTaskReportVO> dataList = new ArrayList<WhsDeliveryAndOtherTaskReportVO>();
		IPage ipage = (IPage) sapDeliveryNoteAndOtherTask.getData().get("dataList");
		List<Map<String, Object>> records = ipage.getRecords();
        if (CollectionUtils.isEmpty(records)){
            return null;
        }
        String filePath = excelCacheFilePath+"/"+filename;
        // 整理待导出数据
        for (Map<String, Object> item : records){
        	WhsDeliveryAndOtherTaskReportVO dataMap = new WhsDeliveryAndOtherTaskReportVO();
        	// 日期
            dataMap.setWarehousDate(item.get("warehousDate") == null ? "" : item.get("warehousDate").toString());
            // 入库类型
            dataMap.setWarehousType(item.get("warehousType") == null ? "" : item.get("warehousType").toString());
            // 入库单号
            dataMap.setWarehousNo(item.get("warehousNo") == null ? "" : item.get("warehousNo").toString());
            // 货物编码
            dataMap.setMaterialNumber(item.get("materialNumber") == null ? "" : item.get("materialNumber").toString());
            // 储位
            dataMap.setStorageCode(item.get("storageCode") == null ? "" : item.get("storageCode").toString());
            // 数量
            dataMap.setQuantity(item.get("quantity") == null ? "" : item.get("quantity").toString());
            // 单位
            dataMap.setUnit(item.get("unit") == null ? "" : item.get("unit").toString());
            // 货物名称
            dataMap.setMaterialName(item.get("materialName") == null ? "" : item.get("materialName").toString());
            // 货物体积
            dataMap.setVolume(item.get("volume") == null ? "" : item.get("volume").toString());
            // 破损数及批次号
            dataMap.setBatchNo(item.get("batchNo") == null ? "" : item.get("batchNo").toString());
            // 备注
            dataMap.setOneRemark("");
            // 作业仓管
            dataMap.setWarehouseKeeper(item.get("warehouseKeeper") == null ? "" : item.get("warehouseKeeper").toString());
            // 到库时间
            dataMap.setToWarehouseTime(item.get("toWarehouseTime") == null ? "" : item.get("toWarehouseTime").toString());
            // 开始作业时间
            dataMap.setStartOperationTime(item.get("startOperationTime") == null ? "" : item.get("startOperationTime").toString());
            // 结束作业时间
            dataMap.setEndOperationTime(item.get("endOperationTime") == null ? "" : item.get("endOperationTime").toString());
            // 类型
            dataMap.setMaterialType(item.get("materialType") == null ? "" : item.get("materialType").toString());
            // 搬运组
            dataMap.setHandlingGroup(item.get("handlingGroup") == null ? "" : item.get("handlingGroup").toString());
            // 备注
            dataMap.setTwoRemark("");
            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/WhsDeliveryAndOtherTaskTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, WhsDeliveryAndOtherTaskReportVO.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            e.printStackTrace();
        }

        return filePath;
	}


	@SuppressWarnings({ "rawtypes", "unchecked" })
	@Override
	public String saveMaterialAndDeliveryBoardsExcel(ResponseResult materialDeliveryBoardsList, String filename) {
		List<MaterialAndDeliveryBoardsVO> dataList = new ArrayList<MaterialAndDeliveryBoardsVO>();
		IPage ipage = (IPage) materialDeliveryBoardsList.getData().get("list");
		List<Map<String, Object>> records = ipage.getRecords();
        if (CollectionUtils.isEmpty(records)){
            return null;
        }
        String filePath = excelCacheFilePath+"/"+filename;
        // 整理待导出数据
        for (Map<String, Object> item : records){
        	MaterialAndDeliveryBoardsVO dataMap = new MaterialAndDeliveryBoardsVO();
        	// 物料号
            dataMap.setMaterialNo(item.get("materialNo") == null ? "" : item.get("materialNo").toString());
            // 交货单号
            dataMap.setDeliveryNoteSap(item.get("deliveryNoteSap") == null ? "" : item.get("deliveryNoteSap").toString());
            // 单位
            dataMap.setUnit(item.get("unit") == null ? "" : item.get("unit").toString());
            // 仓租计费板位数
            dataMap.setBoards(item.get("boards") == null ? "" : item.get("boards").toString());
            // 物料类型
            dataMap.setMaterialType(item.get("materialType") == null ? "" : item.get("materialType").toString());
            // 物料名称
            dataMap.setMaterialName(item.get("materialZhDesc") == null ? "" : item.get("materialZhDesc").toString());
            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/MaterialAndDeliveryBoardsTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, MaterialAndDeliveryBoardsVO.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            e.printStackTrace();
        }

        return filePath;
	}


	@SuppressWarnings({ "rawtypes", "unchecked" })
	@Override
	public String saveReconciliationReportExcel(ResponseResult reconciliationReport, String filename) {
		List<WhsReconciliationReportVO> dataList = new ArrayList<WhsReconciliationReportVO>();
		IPage ipage = (IPage) reconciliationReport.getData().get("dataList");
		List<Map<String, Object>> records = ipage.getRecords();
        if (CollectionUtils.isEmpty(records)){
            return null;
        }
        String filePath = excelCacheFilePath+"/"+filename;
        // 整理待导出数据
        for (Map<String, Object> item : records){
        	WhsReconciliationReportVO dataMap = new WhsReconciliationReportVO();
        	// 入库日期
            dataMap.setWarehousDate(item.get("warehousDate") == null ? "" : item.get("warehousDate").toString());
            // 在库天数
            dataMap.setInhouseDay(item.get("inhouseDay") == null ? "" : item.get("inhouseDay").toString());
            // 是否含税
            dataMap.setIsTax(item.get("isTax") == null ? "" : item.get("isTax").toString());
            // 物料编码/非生产送货单
            dataMap.setMaterialNo(item.get("materialNo") == null ? "" : item.get("materialNo").toString());
            // 物料名称
            dataMap.setMaterialDesc(item.get("materialDesc") == null ? "" : item.get("materialDesc").toString());
            // 单位
            dataMap.setSalesUnit(item.get("salesUnit") == null ? "" : item.get("salesUnit").toString());
            // 上月结存
            dataMap.setBeforMouthNum(item.get("beforMouthNum") == null ? "" : item.get("beforMouthNum").toString());
            // 本月入库
            dataMap.setReceivedQty(item.get("receivedQty") == null ? "" : item.get("receivedQty").toString());
            // 本月出库
            dataMap.setThisMouthOutHouseNum(item.get("thisMouthOutHouseNum") == null ? "" : item.get("thisMouthOutHouseNum").toString());
            // 当前结存
            dataMap.setThisMouthInNum(item.get("thisMouthInNum") == null ? "" : item.get("thisMouthInNum").toString());
            // 仓租计费板位数
            dataMap.setBoards(item.get("boards") == null ? "" : item.get("boards").toString());
            // 当前占用板位数
            dataMap.setNowBorads(item.get("nowBorads") == null ? "" : item.get("nowBorads").toString());
            // 内向交货单
            dataMap.setVoucherNumber(item.get("voucherNumber") == null ? "" : item.get("voucherNumber").toString());
            // 备注
            dataMap.setRemark("");
            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/WhsReconciliationReportTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, WhsReconciliationReportVO.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            e.printStackTrace();
        }

        return filePath;
	}


	@SuppressWarnings({ "rawtypes", "unchecked" })
	@Override
	public String saveOverseaReceiptDtlExcel(List<Map<String, Object>> records, String filename) {
		List<OverseaOtherBatchReceiptReportVO> dataList = new ArrayList<OverseaOtherBatchReceiptReportVO>();
        if (CollectionUtils.isEmpty(records)){
            return null;
        }
        String filePath = excelCacheFilePath+"/"+filename;
        // 整理待导出数据
        for (Map<String, Object> item : records){
        	OverseaOtherBatchReceiptReportVO dataMap = new OverseaOtherBatchReceiptReportVO();
        	// 行号
        	dataMap.setItemNumber(item.get("itemNumber") == null ? "" : item.get("itemNumber").toString());
        	// SPMS单据号
        	dataMap.setSpmsId(item.get("spmsId") == null ? "" : item.get("spmsId").toString());
        	// 交货单号
        	dataMap.setSapDeliveryNoteRelation(item.get("sapDeliveryNoteRelation") == null ? "" : item.get("sapDeliveryNoteRelation").toString());
        	// 交货单行号
        	dataMap.setItemRelation(item.get("itemRelation") == null ? "" : item.get("itemRelation").toString());
        	// 物料编号
        	dataMap.setMaterialNo(item.get("materialNo") == null ? "" : item.get("materialNo").toString());
        	// 物料名称
        	dataMap.setMaterialZhDesc(item.get("materialZhDesc") == null ? "" : item.get("materialZhDesc").toString());
        	// 应收数量
        	dataMap.setQuantity(item.get("quantity") == null ? "" : item.get("quantity").toString());
        	// 实收数量
        	dataMap.setActualQuantity(item.get("actualQuantity") == null ? "" : item.get("actualQuantity").toString());
        	// 单位
        	dataMap.setBasicUnit(item.get("basicUnit") == null ? "" : item.get("basicUnit").toString());
            // 备注
            dataMap.setRemark(item.get("remark") == null ? "" : item.get("remark").toString());
            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/OverseaOtherBatchReceiptTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, OverseaOtherBatchReceiptReportVO.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            e.printStackTrace();
        }

        return filePath;
	}


	@SuppressWarnings({ "unchecked", "rawtypes" })
	@Override
	public String saveDeliveryReportExcel(ResponseResult dtl, String filename) {
		List<OverseaDeliveryReportVO> dataList = new ArrayList<OverseaDeliveryReportVO>();
		Page<Map<String, Object>> pages = (Page<Map<String, Object>>) dtl.getData().get("list");
		List<Map<String, Object>> records = pages.getRecords();
        if (CollectionUtils.isEmpty(records)){
            return null;
        }
        String filePath = excelCacheFilePath+"/"+filename;
        //String nowDate = DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss");
        // 整理待导出数据
        for (Map<String, Object> item : records){
        	OverseaDeliveryReportVO dataMap = new OverseaDeliveryReportVO();
        	dataMap.setWerks(item.get("werks").toString());
        	dataMap.setWhsLocationCode(item.get("whsLocationCode").toString());
        	dataMap.setOrderType(item.get("orderType").toString());
        	dataMap.setSpmsId(item.get("spmsId").toString());
        	dataMap.setEamNumber(item.get("eamNumber") != null ? item.get("eamNumber").toString() : "");
        	dataMap.setSpmsStatus(item.get("spmsStatus") != null ? item.get("spmsStatus").toString() : "");
        	dataMap.setWorkshopName(item.get("workshopName") != null ? item.get("workshopName").toString() : "");
        	dataMap.setCreateUser(item.get("createUser") != null ? item.get("createUser").toString() : "");
        	dataMap.setMaterialNo(item.get("materialNo") != null ? item.get("materialNo").toString() : "");
        	dataMap.setMaterialZhDesc(item.get("materialZhDesc") != null ? item.get("materialZhDesc").toString() : "");
        	dataMap.setApplyQty(item.get("applyQty") != null ? item.get("applyQty").toString() : "");
        	dataMap.setActualQty(item.get("actualQty") != null ? item.get("actualQty").toString() : "");
        	dataMap.setOutboundQty(item.get("outboundQty") != null ? item.get("outboundQty").toString() : "");
        	dataMap.setBasicUnit(item.get("basicUnit") != null ? item.get("basicUnit").toString() : "");
        	dataMap.setUnitSale(item.get("unitSale") != null ? item.get("unitSale").toString() : "");
        	dataMap.setOutSpmsId(item.get("outSpmsId") != null ? item.get("outSpmsId").toString() : "");
        	dataMap.setOutSpmsStatus(item.get("outSpmsStatus") != null ? item.get("outSpmsStatus").toString() : "");
        	dataMap.setOutCreateUser(item.get("outCreateUser") != null ? item.get("outCreateUser").toString() : "");
        	dataMap.setOaNumber(item.get("oaNumber") != null ? item.get("oaNumber").toString() : "");
        	dataMap.setLicenseNo(item.get("licenseNo") != null ? item.get("licenseNo").toString() : "");
        	dataMap.setSapVoucherNumber(item.get("sapVoucherNumber") != null ? item.get("sapVoucherNumber").toString() : "");
        	dataMap.setCostCenter(item.get("costCenter") != null ? item.get("costCenter").toString() : "");
        	dataMap.setMovementType(item.get("movementType") != null ? item.get("movementType").toString() : "");
        	dataMap.setProjectOaNumber(item.get("projectOaNumber") != null ? item.get("projectOaNumber").toString() : "");
        	dataMap.setCancelReason(item.get("cancelReason") != null ? item.get("cancelReason").toString() : "");
        	dataMap.setCreateDate(item.get("createDate") != null ? item.get("createDate").toString() : "");
        	dataMap.setApprovalDate(item.get("approvalDate") != null ? item.get("approvalDate").toString() : "");
        	dataMap.setOutboundDate(item.get("outboundDate") != null ? item.get("outboundDate").toString() : "");
        	dataMap.setPostingDate(item.get("postingDate") != null ? item.get("postingDate").toString() : "");
        	dataMap.setClosedDate(item.get("closedDate") != null ? item.get("closedDate").toString() : "");
        	dataMap.setTimeConsuming(item.get("timeConsuming") != null ? item.get("timeConsuming").toString() : "");
        	dataMap.setNowDate(item.get("nowDate") != null ? item.get("nowDate").toString() : "");
            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/DeliveryReportExcelTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, OverseaDeliveryReportVO.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            e.printStackTrace();
        }

        return filePath;
	}


	@SuppressWarnings({ "unchecked", "rawtypes" })
	@Override
	public String saveDeliveryTargetReportExcel(ResponseResult dtl, String filename) {
		List<OverseaDeliveryTargetReportVO> dataList = new ArrayList<OverseaDeliveryTargetReportVO>();
        List<Map<String, Object>> records = (List<Map<String, Object>>) dtl.getData().get("targetList");
        if (CollectionUtils.isEmpty(records)){
            return null;
        }
        String filePath = excelCacheFilePath+"/"+filename;
        //String nowDate = DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss");
        // 整理待导出数据
        for (Map<String, Object> item : records){
        	OverseaDeliveryTargetReportVO dataMap = new OverseaDeliveryTargetReportVO();
        	dataMap.setWerks(item.get("werks").toString());
        	dataMap.setWhsLocationCode(item.get("whsLocationCode").toString());
        	dataMap.setOrderType(item.get("orderType").toString());
        	dataMap.setAllTimeConsuming(item.get("allTimeConsuming") != null ? item.get("allTimeConsuming").toString() : "");
        	dataMap.setAllOrderNum(item.get("allOrderNum") != null ? item.get("allOrderNum").toString() : "");
        	dataMap.setAllOutOrderNum(item.get("allOutOrderNum") != null ? item.get("allOutOrderNum").toString() : "");
        	dataMap.setAllOutOrderCloseNum(item.get("allOutOrderCloseNum") != null ? item.get("allOutOrderCloseNum").toString() : "");
        	dataMap.setAllItemNum(item.get("allItemNum") != null ? item.get("allItemNum").toString() : "");
        	dataMap.setAllOutItemNum(item.get("allOutItemNum") != null ? item.get("allOutItemNum").toString() : "");
        	dataMap.setTimelinessRate(item.get("timelinessRate") != null ? item.get("timelinessRate").toString() : "");
        	dataMap.setTimeEfficiencyRate(item.get("timeEfficiencyRate") != null ? item.get("timeEfficiencyRate").toString() : "");
        	dataMap.setAccuracyRate(item.get("accuracyRate") != null ? item.get("accuracyRate").toString() : "");
        	dataMap.setNowDate(item.get("nowDate") != null ? item.get("nowDate").toString() : "");
            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/DeliveryReportTargetExcelTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, OverseaDeliveryTargetReportVO.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            e.printStackTrace();
        }

        return filePath;
	}


	@SuppressWarnings({ "unchecked", "rawtypes" })
	@Override
	public String savePdaCoverageRateExcel(ResponseResult dtl, String filename) {
		List<PdaCoverageRateReportVO> dataList = new ArrayList<PdaCoverageRateReportVO>();
		Page<Map<String, Object>> pages = (Page<Map<String, Object>>) dtl.getData().get("list");
		List<Map<String, Object>> records = pages.getRecords();
        if (CollectionUtils.isEmpty(records)){
            return null;
        }
        String filePath = excelCacheFilePath+"/"+filename;
        // 整理待导出数据
        for (Map<String, Object> item : records){
        	PdaCoverageRateReportVO dataMap = new PdaCoverageRateReportVO();
        	dataMap.setWerks(item.get("werks").toString());
        	dataMap.setWhsLocationCode(item.get("whsLocationCode").toString());
        	dataMap.setOrderType(item.get("orderType").toString());
        	dataMap.setSpmsId(item.get("spmsId").toString());
        	dataMap.setPdaSN(item.get("pdaSN") != null ? item.get("pdaSN").toString() : "");
        	dataMap.setPdaTime(item.get("pdaTime") != null ? item.get("pdaTime").toString() : "");
        	dataMap.setSpmsStatus(item.get("spmsStatus") != null ? item.get("spmsStatus").toString() : "");
        	dataMap.setNowDate(item.get("nowDate") != null ? item.get("nowDate").toString() : "");
            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/PdaCoverageRateExcelTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, PdaCoverageRateReportVO.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            e.printStackTrace();
        }

        return filePath;
	}


	@SuppressWarnings({ "unchecked", "rawtypes" })
	@Override
	public String savePdaCoverageRateTargetExcel(ResponseResult dtl, String filename) {
		List<PdaCoverageRateTargetReportVO> dataList = new ArrayList<PdaCoverageRateTargetReportVO>();
        List<Map<String, Object>> records = (List<Map<String, Object>>) dtl.getData().get("targetList");
        if (CollectionUtils.isEmpty(records)){
            return null;
        }
        String filePath = excelCacheFilePath+"/"+filename;
        //String nowDate = DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss");
        // 整理待导出数据
        for (Map<String, Object> item : records){
        	PdaCoverageRateTargetReportVO dataMap = new PdaCoverageRateTargetReportVO();
        	dataMap.setWerks(item.get("werks").toString());
        	dataMap.setWhsLocationCode(item.get("whsLocationCode").toString());
        	dataMap.setOrderType(item.get("orderType").toString());
        	dataMap.setAllCount(item.get("allCount") != null ? item.get("allCount").toString() : "");
        	dataMap.setPdaCount(item.get("pdaCount") != null ? item.get("pdaCount").toString() : "");
        	dataMap.setCoverageRate(item.get("coverageRate") != null ? item.get("coverageRate").toString() : "");
        	dataMap.setNowDate(item.get("nowDate") != null ? item.get("nowDate").toString() : "");
            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/PdaCoverageRateTargetTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, PdaCoverageRateTargetReportVO.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            e.printStackTrace();
        }

        return filePath;
	}


	@SuppressWarnings({ "unchecked", "rawtypes" })
	@Override
	public String saveReceivingGoodsReportExcel(ResponseResult dtl, String filename) {
		List<ReceivingGoodsReportVO> dataList = new ArrayList<ReceivingGoodsReportVO>();
		Page<Map<String, Object>> pages = (Page<Map<String, Object>>) dtl.getData().get("list");
		List<Map<String, Object>> records = pages.getRecords();
        if (CollectionUtils.isEmpty(records)){
            return null;
        }
        String filePath = excelCacheFilePath+"/"+filename;
        // 整理待导出数据
        for (Map<String, Object> item : records){
        	ReceivingGoodsReportVO dataMap = new ReceivingGoodsReportVO();
        	dataMap.setWerks(item.get("werks").toString());
        	dataMap.setWhsLocationCode(item.get("whsLocationCode").toString());
        	dataMap.setOrderType(item.get("orderType").toString());
        	dataMap.setSapDeliveyNote(item.get("sapDeliveyNote") != null ? item.get("sapDeliveyNote").toString() : "");
        	dataMap.setSapDeliveyNoteItem(item.get("sapDeliveyNoteItem") != null ? item.get("sapDeliveyNoteItem").toString() : "");
        	dataMap.setSpmsStatus(item.get("spmsStatus") != null ? item.get("spmsStatus").toString() : "");
        	dataMap.setPurchaseNo(item.get("purchaseNo") != null ? item.get("purchaseNo").toString() : "");
        	dataMap.setPurchaseNoItem(item.get("purchaseNoItem") != null ? item.get("purchaseNoItem").toString() : "");
        	dataMap.setSapPackageList(item.get("sapPackageList") != null ? item.get("sapPackageList").toString() : "");
        	dataMap.setCabinetNumber(item.get("cabinetNumber") != null ? item.get("cabinetNumber").toString() : "");
        	dataMap.setSpmsId(item.get("spmsId") != null ? item.get("spmsId").toString() : "");
        	dataMap.setInSpmsStatus(item.get("inSpmsStatus") != null ? item.get("inSpmsStatus").toString() : "");
        	dataMap.setRequirementNo(item.get("requirementNo") != null ? item.get("requirementNo").toString() : "");
        	dataMap.setDemander(item.get("demander") != null ? item.get("demander").toString() : "");
        	dataMap.setBoxNote(item.get("boxNote") != null ? item.get("boxNote").toString() : "");
        	dataMap.setMaterialNo(item.get("materialNo") != null ? item.get("materialNo").toString() : "");
        	dataMap.setMaterialZhDesc(item.get("materialZhDesc") != null ? item.get("materialZhDesc").toString() : "");
        	dataMap.setReceivableQtyBasicUnit(item.get("receivableQtyBasicUnit") != null ? item.get("receivableQtyBasicUnit").toString() : "");
        	dataMap.setActualQtyBasicUnit(item.get("actualQtyBasicUnit") != null ? item.get("actualQtyBasicUnit").toString() : "");
        	dataMap.setBasicUnit(item.get("basicUnit") != null ? item.get("basicUnit").toString() : "");
        	dataMap.setReceivableQtyUnitSales(item.get("receivableQtyUnitSales") != null ? item.get("receivableQtyUnitSales").toString() : "");
        	dataMap.setActualQtyUnitSales(item.get("actualQtyUnitSales") != null ? item.get("actualQtyUnitSales").toString() : "");
        	dataMap.setUnitSale(item.get("unitSale") != null ? item.get("unitSale").toString() : "");
        	dataMap.setDeliveryDate(item.get("deliveryDate") != null ? item.get("deliveryDate").toString() : "");
        	dataMap.setArrivalTime(item.get("arrivalTime") != null ? item.get("arrivalTime").toString() : "");
        	dataMap.setInWhsCreateTime(item.get("inWhsCreateTime") != null ? item.get("inWhsCreateTime").toString() : "");
        	dataMap.setApprovalDate(item.get("approvalDate") != null ? item.get("approvalDate").toString() : "");
        	dataMap.setInWhsEndTime(item.get("inWhsEndTime") != null ? item.get("inWhsEndTime").toString() : "");
        	dataMap.setOaApprovalDate(item.get("oaApprovalDate") != null ? item.get("oaApprovalDate").toString() : "");
        	dataMap.setUnderchargePostingDate(item.get("underchargePostingDate") != null ? item.get("underchargePostingDate").toString() : "");
        	dataMap.setOverchargePostingDate(item.get("overchargePostingDate") != null ? item.get("overchargePostingDate").toString() : "");
        	dataMap.setReceivingDate(item.get("receivingDate") != null ? item.get("receivingDate").toString() : "");
        	dataMap.setSapVoucherNumber(item.get("sapVoucherNumber") != null ? item.get("sapVoucherNumber").toString() : "");
        	dataMap.setUnderVoucherNumber(item.get("underVoucherNumber") != null ? item.get("underVoucherNumber").toString() : "");
        	dataMap.setOverVoucherNumber(item.get("overVoucherNumber") != null ? item.get("overVoucherNumber").toString() : "");
        	dataMap.setCreateUser(item.get("createUser") != null ? item.get("createUser").toString() : "");
        	dataMap.setTimeWarehousing(item.get("timeWarehousing") != null ? item.get("timeWarehousing").toString() : "");
        	dataMap.setTimeDelivery(item.get("timeDelivery") != null ? item.get("timeDelivery").toString() : "");
        	dataMap.setNowDate(item.get("nowDate") != null ? item.get("nowDate").toString() : "");
            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/ReceivingGoodsReportExcelTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, ReceivingGoodsReportVO.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            e.printStackTrace();
        }

        return filePath;
	}


	@SuppressWarnings({ "unchecked", "rawtypes" })
	@Override
	public String saveReceivingGoodsTargetReportExcel(ResponseResult dtl, String filename) {
		List<ReceivingGoodsTargetReportVO> dataList = new ArrayList<ReceivingGoodsTargetReportVO>();
        List<Map<String, Object>> records = (List<Map<String, Object>>) dtl.getData().get("targetList");
        if (CollectionUtils.isEmpty(records)){
            return null;
        }
        String filePath = excelCacheFilePath+"/"+filename;
        // 整理待导出数据
        for (Map<String, Object> item : records){
        	ReceivingGoodsTargetReportVO dataMap = new ReceivingGoodsTargetReportVO();
        	dataMap.setWerks(item.get("werks").toString());
        	dataMap.setWhsLocationCode(item.get("whsLocationCode").toString());
        	dataMap.setOrderType(item.get("orderType").toString());
        	dataMap.setAllTimeWarehousing(item.get("allTimeWarehousing") != null ? item.get("allTimeWarehousing").toString() : "");
        	dataMap.setAllInWhsNum(item.get("allInWhsNum") != null ? item.get("allInWhsNum").toString() : "");
        	dataMap.setAllInWhsSkuNum(item.get("allInWhsSkuNum") != null ? item.get("allInWhsSkuNum").toString() : "");
        	dataMap.setAllUnOverSkuNum(item.get("allUnOverSkuNum") != null ? item.get("allUnOverSkuNum").toString() : "");
        	dataMap.setAllDeliveryNoteNum(item.get("allDeliveryNoteNum") != null ? item.get("allDeliveryNoteNum").toString() : "");
        	dataMap.setTimelinessRate(item.get("timelinessRate") != null ? item.get("timelinessRate").toString() : "");
        	dataMap.setTimeEfficiencyRate(item.get("timeEfficiencyRate") != null ? item.get("timeEfficiencyRate").toString() : "");
        	dataMap.setAccuracyRate(item.get("accuracyRate") != null ? item.get("accuracyRate").toString() : "");
        	dataMap.setNowDate(item.get("nowDate") != null ? item.get("nowDate").toString() : "");
            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/ReceivingGoodsTargetTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, ReceivingGoodsTargetReportVO.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            e.printStackTrace();
        }

        return filePath;
	}


	@SuppressWarnings({ "rawtypes", "unchecked" })
	@Override
	public String saveAnomaliesRateExcel(List<Map<String, Object>> list, String filename) {
		List<AnomaliesReportVO> dataList = new ArrayList<AnomaliesReportVO>();
        if (CollectionUtils.isEmpty(list)){
            return null;
        }
        String filePath = excelCacheFilePath+"/"+filename;
        // 整理待导出数据
        for (Map<String, Object> item : list){
        	AnomaliesReportVO dataMap = new AnomaliesReportVO();
        	dataMap.setWerks(item.get("werks").toString());
        	dataMap.setWhsLocationCode(item.get("whsLocationCode").toString());
        	dataMap.setOrderType(item.get("orderType").toString());
        	dataMap.setSpmsId(item.get("spmsId") != null ? item.get("spmsId").toString() : "");
        	dataMap.setSpmsStatus(item.get("spmsStatus") != null ? item.get("spmsStatus").toString() : "");
        	dataMap.setCreateTime(item.get("createTime") != null ? item.get("createTime").toString() : "");
        	dataMap.setNowDate(item.get("nowDate") != null ? item.get("nowDate").toString() : "");
            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/AnomaliesReportExcelTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, AnomaliesReportVO.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            e.printStackTrace();
        }
        return filePath;
	}


	@SuppressWarnings({ "rawtypes", "unchecked" })
	@Override
	public String saveAnomaliesTargetExcel(List<Map<String, Object>> list, String filename) {
		List<AnomaliesTargetReportVO> dataList = new ArrayList<AnomaliesTargetReportVO>();
        if (CollectionUtils.isEmpty(list)){
            return null;
        }
        String nowDate = DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss");
        String filePath = excelCacheFilePath+"/"+filename;
        // 整理待导出数据
        for (Map<String, Object> item : list){
        	AnomaliesTargetReportVO dataMap = new AnomaliesTargetReportVO();
        	dataMap.setWerks(item.get("werks").toString());
        	dataMap.setWhsLocationCode(item.get("whsLocationCode").toString());
        	dataMap.setOrderType(item.get("orderType").toString());
        	dataMap.setAllCount(item.get("allCount") != null ? item.get("allCount").toString() : "");
        	dataMap.setFailCount(item.get("failCount") != null ? item.get("failCount").toString() : "");
        	dataMap.setFailRate(item.get("failRate") != null ? item.get("failRate").toString() : "");
        	dataMap.setNowDate(nowDate);
            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/AnomaliesTargetTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, AnomaliesTargetReportVO.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            e.printStackTrace();
        }

        return filePath;
	}


	@SuppressWarnings({ "unchecked", "rawtypes" })
	@Override
	public String saveOnwayRateExcel(List<Map<String, Object>> list, String filename) {
		List<OnwayOverdueReportVO> dataList = new ArrayList<OnwayOverdueReportVO>();
        if (CollectionUtils.isEmpty(list)){
            return null;
        }
        String nowDate = DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss");
        String filePath = excelCacheFilePath+"/"+filename;
        // 整理待导出数据
        for (Map<String, Object> item : list){
        	OnwayOverdueReportVO dataMap = new OnwayOverdueReportVO();
        	dataMap.setFhWerks(item.get("fhWerks") != null ? item.get("fhWerks").toString() : "");
        	dataMap.setShWerks(item.get("shWerks") != null ? item.get("shWerks").toString() : "");
        	dataMap.setOrderDate(item.get("orderDate") != null ? item.get("orderDate").toString() : "");
        	dataMap.setOrderNumber(item.get("orderNumber") != null ? item.get("orderNumber").toString() : "");
        	dataMap.setOrderItemNumber(item.get("orderItemNumber") != null ? item.get("orderItemNumber").toString() : "");
        	dataMap.setDkDate(item.get("dkDate") != null ? item.get("dkDate").toString() : "");
        	dataMap.setDgdat(item.get("dgdat") != null ? item.get("dgdat").toString() : "");
        	dataMap.setPackageList(item.get("packageList") != null ? item.get("packageList").toString() : "");
        	dataMap.setCabinetNumber(item.get("cabinetNumber") != null ? item.get("cabinetNumber").toString() : "");
        	dataMap.setOrderType(item.get("orderType") != null ? item.get("orderType").toString() : "");
        	dataMap.setVbeln(item.get("vbeln") != null ? item.get("vbeln").toString() : "");
        	dataMap.setNumc(item.get("numc") != null ? item.get("numc").toString() : "");
        	dataMap.setPackageCode(item.get("packageCode") != null ? item.get("packageCode").toString() : "");
        	dataMap.setMatnr(item.get("matnr") != null ? item.get("matnr").toString() : "");
        	dataMap.setMaktx(item.get("maktx") != null ? item.get("maktx").toString() : "");
        	dataMap.setWamng(item.get("wamng") != null ? item.get("wamng").toString() : "");
        	dataMap.setWemng(item.get("wemng") != null ? item.get("wemng").toString() : "");
        	dataMap.setMeins(item.get("meins") != null ? item.get("meins").toString() : "");
        	dataMap.setZwamngxs(item.get("zwamngxs") != null ? item.get("zwamngxs").toString() : "");
        	dataMap.setZwemngxs(item.get("zwemngxs") != null ? item.get("zwemngxs").toString() : "");
        	dataMap.setZvrkmexs(item.get("zvrkmexs") != null ? item.get("zvrkmexs").toString() : "");
        	dataMap.setNowDate(nowDate);
            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/OnwayRateTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, OnwayOverdueReportVO.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            e.printStackTrace();
        }

        return filePath;
	}


	@SuppressWarnings({ "unchecked", "rawtypes" })
	@Override
	public String saveOnwayRateTargetExcel(List<Map<String, Object>> list, String filename) {
		List<OnwayOverdueTargetReportVO> dataList = new ArrayList<OnwayOverdueTargetReportVO>();
        if (CollectionUtils.isEmpty(list)){
            return null;
        }
        String nowDate = DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss");
        String filePath = excelCacheFilePath+"/"+filename;
        // 整理待导出数据
        for (Map<String, Object> item : list){
        	OnwayOverdueTargetReportVO dataMap = new OnwayOverdueTargetReportVO();
        	dataMap.setWerks(item.get("werks") != null ? item.get("werks").toString() : "");
        	dataMap.setAllCount(item.get("allCount") != null ? item.get("allCount").toString() : "");
        	dataMap.setThreeDaysCount(item.get("threeDaysCount") != null ? item.get("threeDaysCount").toString() : "");
        	dataMap.setSevenDaysCount(item.get("sevenDaysCount") != null ? item.get("sevenDaysCount").toString() : "");
        	dataMap.setFourteenDaysCount(item.get("fourteenDaysCount") != null ? item.get("fourteenDaysCount").toString() : "");
        	dataMap.setTwentyoneDaysCount(item.get("twentyoneDaysCount") != null ? item.get("twentyoneDaysCount").toString() : "");
        	dataMap.setTwentyeightDaysCount(item.get("twentyeightDaysCount") != null ? item.get("twentyeightDaysCount").toString() : "");
        	dataMap.setTwentynineDaysCount(item.get("twentynineDaysCount") != null ? item.get("twentynineDaysCount").toString() : "");
        	dataMap.setOverdueRate(item.get("overdueRate") != null ? item.get("overdueRate").toString() : "");
        	dataMap.setNowDate(nowDate);
            dataList.add(dataMap);
        }
        Map data = new HashMap<>();
        // 基于模板导出Excel
        try {
            String templete = templateFilePath+"/OnwayTargetRateTemplate.xlsx";
            com.github.crab2died.ExcelUtils.getInstance()
                    .exportObjects2Excel(templete, 0,
                            dataList, data, OnwayOverdueTargetReportVO.class, false, filePath);
        }catch (Exception e) {
            filePath = null;
            e.printStackTrace();
        }

        return filePath;
	}
}
