package com.jeeplus.modules.sg.financial.erpcredit.util;

import com.jeeplus.modules.sg.financial.erpcredit.entity.ErpAccount;
import com.jeeplus.modules.sg.financial.erpcredit.entity.ErpCredit;
import com.jeeplus.modules.sg.financial.erpcredit.entity.ErpCreditEquipment;
import com.jeeplus.modules.sg.financial.erpcredit.entity.ErpCreditMaterial;
import com.jeeplus.modules.sys.entity.DictValue;
import com.jeeplus.modules.sys.utils.DictUtils;
import groovy.util.IFileNameFinder;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Row;

import java.text.DecimalFormat;
import java.util.*;

/**
 * 明细账处理类
 */

public  class ErpInfo {
    public final static String CON_PROJECT = "工程成本";

    public final static String CON_IPE = "安装工程支出";

    public final static String CON_PES= "待摊支出";

    public final static String CON_PLPM = "项目法人管理费";

    public final static String CON_PLPM1="法人管理费";

    public final static String CON_PMF= "项目管理经费";

    public final static String CON_OTR ="其他";

    public final static String CON_METF= "会议费";

    public final static String CON_PSF="工程监理费";

    public final static String CON_EDF="工程设计费";

    public final static String CON_OBL="建设期贷款利息";

    public final static String CON_OLD="线路施工赔偿费";

    public final static String CON_TSF="变压器";

    public final static String CON_RNB="环网";


    public final static String CON_BST="箱式变电站";

    public final static String CON_HVS="高压开关柜";

    public final static String CON_OIC="架空绝缘导线";

    public final static String CON_OICAC10="架空绝缘导线,AC10kV";
    public final static String CON_OICAC20="架空绝缘导线,AC20kV";

    public final static String CON_PRC="电缆电力";

    public final static String CON_PRCAC10="电力电缆,AC10kV";
    public final static String CON_PRCAC20="电力电缆,AC20kV";

    public final static String CON_OICAC1="架空绝缘导线,AC1kV";
    public final static String CON_PRCAC1="电力电缆,AC1kV";

    public final static String CON_OICAC="架空绝缘导线";
    public final static String CON_PRCAC="电力电缆";

    public final static String CON_CABLE="电缆保护管";

    public final static String  CON_lINE = "-";

    public final static String CON_JSQDK = "工程成本-待摊支出-建设期贷款利息";
    public final static String CON_JSQDK1="工程成本-待摊支出-项目法人管理费-差旅";

    public final static String CON_PlPlQ=CON_PROJECT+CON_lINE+CON_PES+CON_lINE+CON_OTR;//工程成本-待摊支出-其他

    public final static String CON_PLPLPLQ=CON_PlPlQ+CON_lINE+CON_PES+CON_lINE+CON_PLPM+CON_lINE+CON_OTR;//工程成本-待摊支出-项目法人管理费-其他
    public final static String CON_PLPLPLQ1 = "工程成本-待摊支出-法人管理费-其他";//工程成本-待摊支出-法人管理费-其他
    public final static String CON_PLPLPLQ2 = "工程成本-待摊支出-项目法人管理费-其他";//工程成本-待摊支出-法人管理费-其他
    public final static String CON_PLM=CON_PMF+CON_lINE+CON_METF;//项目管理经费 - 会议费

    public static Boolean getContains(Object object,Object object1){
        return true;
    }

    public final static String CON_PLMDESIGN = "设计文件评审费";


    /**
     * 获取erp明细账数据列表
     * @param importUtil
     * @return List<ErpAccount> 导入表格数据
     */
    public static List<ErpAccount> getErpAccount(ImportUtil importUtil)  {
        int lastRow = importUtil.getLastDataRowNum();
        List<ErpAccount> list = new ArrayList<ErpAccount>();
        ErpAccount erpAccount = null;
        for(int i=1; i<=lastRow;i++){
            erpAccount = new ErpAccount();
            Row row = importUtil.getRow(i);
            String erpCode = (String) importUtil.getCellValue(row,10);
            if(StringUtils.isNotBlank(erpCode)) {
                erpAccount.setProjectDefinitionCode(erpCode);
                erpAccount.setProjectDefinitionDetails((String)importUtil.getCellValue(row,11));
                erpAccount.setSubjectName((String)importUtil.getCellValue(row,13));
                erpAccount.setLineItemAmount(Double.parseDouble((String) importUtil.getCellValue(row,19)));
                erpAccount.setTheNumber((String)importUtil.getCellValue(row,20));
                erpAccount.setMaterialCode((String)importUtil.getCellValue(row,22));
                erpAccount.setMaterialDetails((String)importUtil.getCellValue(row,23));
                erpAccount.setUnit((String)importUtil.getCellValue(row,24));
                erpAccount.setWbsDetails((String)importUtil.getCellValue(row,9));
                erpAccount.setTheInputTax(Double.parseDouble((String) importUtil.getCellValue(row,25)));
                erpAccount.setSupplierName((String)importUtil.getCellValue(row,30));
                list.add(erpAccount);
            }
        }
        return list;
    }

    /**
     * 验证erp明细账数据，验证方式：第十一列表头含“编码”，第十六列表头含“金额”
     * @param importUtil
     * @return
     */
    public static Boolean getErpJugde(ImportUtil importUtil){
        Boolean flag = false;
        Row row = importUtil.getRow(0);
        String erpCode = (String) importUtil.getCellValue(row,10);
        if (!erpCode.contains("项目定义编码")){
            flag = true;
        }
        String lineItem = (String)importUtil.getCellValue(row,11);
        if (!lineItem.contains("项目定义描述")){
            flag = true;
        }
        return  flag;
    }

    /**
     * 传入表的数据集合，获取设备费/材料费/10kV线路信息 集合
     * 分别获取List<ErpCreditChild1>（设备费）<ErpCreditChild2>（材料费)
     * 与List<ErpCredit>项目定义编号对应的对象
     * 添加到List<ErpCredit>集合中的erpCreditChild1s,erpCreditChild2s,erpCreditChild3s.
     * @param list 表格对象
     * @return 返回List<ErpCredit>
     */
//    public static List<ErpCredit> getAllErpCreditList(List<ErpAccount> list){
//        double tenKvLineLength=0.0;
//        boolean flag; //设备费开关：施工费中 建筑费 安装判断 true-建筑费 false-安装费
//        //获取erpCredit对象 list集合
//        List<ErpCredit> erpCredits = getListErpCredit(list);
//        //获取ErpCreditChild1对象 list集合 （设备费）
//        List<ErpCreditEquipment> erpCreditChild1s = getListErpCreditChild1(list);
//        //获取ErpCreditChild2对象 list集合  （材料费）
//        List<ErpCreditMaterial> erpCreditChild2s = getListErpCreditChild2(list);
//        //循环erpCredit对象 list集合
//        for (ErpCredit erpCredit:erpCredits){
//            //赋值线路长度
//            if (null!=erpCredit.getTenKvItesFhvFollow()&&null!=erpCredit.getTenKvItsLine()){
//                tenKvLineLength=erpCredit.getTenKvItesFhvFollow()+erpCredit.getTenKvItsLine();
//                erpCredit.setTenKvLineLength(tenKvLineLength);
//            }
//            //设备费 集合 循环
//            for (ErpCreditEquipment erpCreditEquipment:erpCreditChild1s){
//                //判断 erpCredit对象项目定义编号  与  ErpCreditChild1对象项目定义编号
//                if (erpCredit.getItemId().equals(erpCreditEquipment.getErpCredit().getItemId())){
//                    //把erpCreditChild1对象 添加到 List<ErpCredit>的List<ErpCreditChild1>中
//                    erpCredit.getErpCreditChild1s().add(erpCreditEquipment);
//                }
//            }
//            //材料费 集合 循环
//            for (ErpCreditMaterial erpCreditChild2:erpCreditChild2s){
//                //判断 erpCredit对象项目定义编号  与  ErpCreditChild2对象项目定义编号
//                if (erpCreditChild2.getErpCredit().getItemId().equals(erpCredit.getItemId())){
//                    //把erpCreditChild1对象 添加到 List<ErpCredit>的List<ErpCreditChild2>中
//                    erpCredit.getErpCreditChild2s().add(erpCreditChild2);
//                }
//            }
//        }
//        getInstallBuild(erpCredits);
//        return erpCredits;
//    }

    /**
     * 传入明细账列表，根据规则获取转化后中间数据列表，注意：其中设备，材料为子列表
     * @param list 表格对象
     * @return 返回List<ErpCredit>
     */
    public static List<ErpCredit> getAllErpCreditList(List<ErpAccount> list){
        //key为项目定义号
        Map<String,ErpCredit> map = new HashMap<>();
        for(int i=0;i<list.size();i++){
            ErpAccount erpAccount = list.get(i);
            String projectId = erpAccount.getProjectDefinitionCode();//项目定义号
            String materialDetail = erpAccount.getMaterialDetails();//物料描述
            String materialCode = erpAccount.getMaterialCode();//物料编码
            String subjectName = erpAccount.getSubjectName();//科目名称
            String wbsDetail = erpAccount.getWbsDetails();//wbs描述
            Double lineItemAmount = erpAccount.getLineItemAmount();//行项目金额
            Double inputTax = erpAccount.getTheInputTax();//进项税额
            Double theNumber = null; //数量
            if (!erpAccount.getTheNumber().isEmpty()){
                theNumber= Double.parseDouble(erpAccount.getTheNumber());
            }
            String unit = erpAccount.getUnit();
            String supplierName = erpAccount.getSupplierName();

            ErpCredit erpCredit = map.get(projectId);
            if(erpCredit == null){
                erpCredit = new ErpCredit();
                map.put(projectId,erpCredit);
                erpCredit.setItemId(erpAccount.getProjectDefinitionCode());//添加项目定义编号
                erpCredit.setItemName(erpAccount.getProjectDefinitionDetails());//项目名称
            }

            //处理进项税额
            erpCredit.setTheInputTax(DoubleUtil.add(erpCredit.getTheInputTax(),inputTax));

            //实际投资、移交生产的资产总值，明细账判断条件：科目名称中包含“工程成本”
            if (subjectName.contains("工程成本")){
                erpCredit.setActualInvestment(DoubleUtil.add(erpCredit.getActualInvestment(),lineItemAmount));
                erpCredit.setTransferAssets(DoubleUtil.add(erpCredit.getTransferAssets(),lineItemAmount));
            }

            if (subjectName.contains("工程成本-")||subjectName.contains("项目建设成本-成本")) {
                erpCredit.setListDeduction(DoubleUtil.add(erpCredit.getListDeduction(), inputTax));
            }

            if(materialDetail.isEmpty()){
                //施工费合计，明细账判断条件：物料描述为空且科目名称包含“工程成本-安装工程支出”  或 物料描述为空且科目名称包含“项目建设成本-成本”且wbs编码包括“10kV（20kV）配电装置”
                //2021/06/17修改：wbs描述为“10kV（20kV）配电装置”或“安装工程”或“变压器安装”
                if(subjectName.contains("工程成本-安装工程支出")||
                        (subjectName.contains("项目建设成本-成本")&&(wbsDetail.contains("10kV（20kV）配电装置")||wbsDetail.contains("安装工程")||wbsDetail.contains("变压器安装")))){
                    erpCredit.setConsTotalFee(DoubleUtil.add(erpCredit.getConsTotalFee(),erpAccount.getLineItemAmount()));
                }

                //其他费用
                if(subjectName.contains("工程成本-待摊支出-其他")||subjectName.contains("工程成本-待摊支出-项目法人管理费-其他")||
                        subjectName.contains("工程成本-待摊支出-项目法人管理费-差旅")||subjectName.contains("工程成本-待摊支出-建设期贷款利息")||
                        subjectName.contains("工程成本-待摊支出-法人管理费-其他")||subjectName.contains("项目管理经费-会议费")){
                    if(wbsDetail.contains("工程监理费")){
                        erpCredit.setOtherSupervisorFee(DoubleUtil.add(erpCredit.getOtherSupervisorFee(),lineItemAmount));
                    }else if(wbsDetail.contains("工程设计费")||wbsDetail.contains("设计文件评审费")){
                        erpCredit.setOtherDesignFee(DoubleUtil.add(erpCredit.getOtherDesignFee(),lineItemAmount));
                    }else if(wbsDetail.contains("建设期贷款利息")){
                        erpCredit.setOtherBuildLoan(DoubleUtil.add(erpCredit.getOtherBuildLoan(),lineItemAmount));
                    }else if (wbsDetail.contains("线路施工赔偿费")){
                        erpCredit.setOtherLineDamages(DoubleUtil.add(erpCredit.getOtherLineDamages(),lineItemAmount));
                    }else{
                        //法人管理费= 合计- 前面
                        erpCredit.setOtherLegalManage(DoubleUtil.add(erpCredit.getOtherLegalManage(),lineItemAmount));
                    }
                    //只要满足一二条件都属于合计
                    erpCredit.setOtherTotalFee(DoubleUtil.add(erpCredit.getOtherTotalFee(),lineItemAmount));
                    erpCredit.setDeduction(DoubleUtil.add(erpCredit.getDeduction(),inputTax));
                    //这里是后期规则的兼容  项目建设成-成本下这三项都归到合计中，前两项分别属于监理费和设计费，因此第三项归于法人管理费
                }else if(subjectName.contains("项目建设成本-成本")){
                    if(wbsDetail.contains("工程监理费")){
                        erpCredit.setOtherSupervisorFee(DoubleUtil.add(erpCredit.getOtherSupervisorFee(),lineItemAmount));
                        erpCredit.setOtherTotalFee(DoubleUtil.add(erpCredit.getOtherTotalFee(),lineItemAmount));
                    }else if(wbsDetail.contains("工程设计费")||wbsDetail.contains("设计文件评审费")){
                        erpCredit.setOtherDesignFee(DoubleUtil.add(erpCredit.getOtherDesignFee(),lineItemAmount));
                        erpCredit.setOtherTotalFee(DoubleUtil.add(erpCredit.getOtherTotalFee(),lineItemAmount));
                    }else if(wbsDetail.contains("项目管理经费 - 会议费")||wbsDetail.contains("项目管理经费 -其它")){
                        erpCredit.setOtherTotalFee(DoubleUtil.add(erpCredit.getOtherTotalFee(),lineItemAmount));
                        erpCredit.setOtherLegalManage(DoubleUtil.add(erpCredit.getOtherLegalManage(),lineItemAmount));
                        erpCredit.setDeduction(DoubleUtil.add(erpCredit.getDeduction(),inputTax));
                    }
                }
            }else{ //这里是物料描述不为空的情况
                //            10Kv线路
                if (materialDetail.contains(ErpInfo.CON_OICAC10)||materialDetail.contains(ErpInfo.CON_OICAC20)||
                        materialDetail.contains(ErpInfo.CON_PRCAC10)||materialDetail.contains(ErpInfo.CON_PRCAC20)){
                    erpCredit.setTenKvModel(materialDetail);
                    erpCredit.setTenKvUnit(erpAccount.getUnit());//单位
                    erpCredit.setSupplierName(erpAccount.getSupplierName());//公司
                    erpCredit.setTenKvLineLength(DoubleUtil.add(erpCredit.getTenKvLength(),theNumber));//10kv长度
                    erpCredit.setTenKvItsLine(DoubleUtil.add(erpCredit.getTenKvItsLine(),theNumber));//10kv长度 值一样
                }

                //400v线路
                if (materialDetail.contains(ErpInfo.CON_OICAC1)||
                        materialDetail.contains(ErpInfo.CON_PRCAC1)){
                    erpCredit.setTenKvItesFhvFollow(DoubleUtil.add(erpCredit.getTenKvItesFhvFollow(),theNumber));
                    //400v也计入 10kv的长度
                    erpCredit.setTenKvLineLength(DoubleUtil.add(erpCredit.getTenKvLength(),theNumber));
                    erpCredit.setTenKvItsLine(DoubleUtil.add(erpCredit.getTenKvItsLine(),theNumber));
                }

                //电缆管
                if (materialDetail.contains(CON_CABLE)){
                    erpCredit.setCableTube(materialDetail);
                }

                //处理设备和材料
                //筛选物料描述包含（变压器、环网柜（无“”有“无”字样）、箱式变电站、高压开关柜）为设备， 其余为材料
                if (materialDetail.contains(ErpInfo.CON_TSF)||materialDetail.contains(ErpInfo.CON_RNB)||
                        materialDetail.contains(ErpInfo.CON_BST)||materialDetail.contains(ErpInfo.CON_HVS)){
                    Map<String,ErpCreditEquipment> equipmentMap = erpCredit.getEquipmentMap();
                    ErpCreditEquipment equipment = equipmentMap.get(materialDetail);
                    if(equipment==null){
                        equipment = new ErpCreditEquipment();
                        equipment.setErpCredit(erpCredit);
                        equipment.setEqmMaterialDetails1(materialDetail);//添加物料描述
                        equipment.setEqmUnit(unit);//添加的单位
                        equipment.setEqmMaterialCode(materialCode);//添加物料编码
                        equipment.setEqmSupplierName(supplierName);//添加供应商
                        //截取总容量kVA前数字
                        if (materialDetail.toLowerCase().contains("kva")){
                            String str[] =  materialDetail.split(",");
                            for (int k = 0; k < str.length; k++) {
                                if (str[k].toLowerCase().contains("kva")){
                                    equipment.setEqmTotalCapacity(str[k].substring(0,str[k].toLowerCase().indexOf("kva")));//添加总容量
                                    break;
                                }
                            }
                        }
                        equipmentMap.put(materialDetail,equipment);
                    }
                    equipment.setEqmNumbers(DoubleUtil.add(equipment.getEqmNumbers(),theNumber));//添加数量
                    equipment.setEqmBookedFee1(DoubleUtil.add(equipment.getEqmBookedFee1(),lineItemAmount));//添加入账金额

                }else{
                    Map<String,ErpCreditMaterial> materialMap = erpCredit.getMaterialMap();
                    ErpCreditMaterial material = materialMap.get(materialDetail);
                    if(material==null){
                        material = new ErpCreditMaterial();
                        material.setEqmMaterialDetails2(materialDetail);//添加物料描述
                        material.setMtlUnit(unit);//添加设备单位
                        material.setMtlSupplierName(supplierName);//添加供应商
                        material.setEqmMaterialCode(materialCode);//添加物料编码
                        material.setErpCredit(erpCredit);
                        materialMap.put(materialDetail,material);
                    }
                    material.setMtlNumbers(DoubleUtil.add(material.getMtlNumbers(),theNumber));
                    material.setMtlBookedFee2(DoubleUtil.add(material.getMtlBookedFee2(),lineItemAmount));
                }
            }

        }

        //获取erpCredit列表 同时区分安装建筑费
        List<ErpCredit> creditList = new ArrayList<>(map.values());
        for(ErpCredit credit:creditList){
            credit.setErpCreditChild1s(new ArrayList<>(credit.getEquipmentMap().values()));
            credit.setErpCreditChild2s(new ArrayList<>(credit.getMaterialMap().values()));
            //导入：安装费，建筑费判断，如果无线路，无设备为建筑费，否则为安装费
            if(credit.getEquipmentMap().size()>0 || StringUtils.isNotBlank(credit.getTenKvModel())){
                //安装费不设置电缆管信息
                credit.setCableTube("");
                //施工费合计 赋值为安装费（有 设备费入账金额 或者 材料费入账金额）
                credit.setConsInstallFee(credit.getConsTotalFee());
            }else{
                credit.setConsBuildingFee(credit.getConsTotalFee());
            }
        }

        return creditList;
    }


    public static List<ErpCredit> getCostErpList(List<ErpAccount> list){
        //key为项目定义号
        Map<String,ErpCredit> map = new HashMap<>();
        for(int i=0;i<list.size();i++){
            ErpAccount erpAccount = list.get(i);
            String projectId = erpAccount.getProjectDefinitionCode();//项目定义号
            String materialDetail = erpAccount.getMaterialDetails();//物料描述
            String subjectName = erpAccount.getSubjectName();//科目名称
            String wbsDetail = erpAccount.getWbsDetails();//wbs描述
            String materialCode = erpAccount.getMaterialCode();//物料编码
            Double lineItemAmount = erpAccount.getLineItemAmount();//行项目金额
            Double inputTax = erpAccount.getTheInputTax();//进项税额
            Double theNumber = null; //数量
            if (!erpAccount.getTheNumber().isEmpty()){
                theNumber= Double.parseDouble(erpAccount.getTheNumber());
            }
            String unit = erpAccount.getUnit();
            String supplierName = erpAccount.getSupplierName();



            ErpCredit erpCredit = map.get(projectId);
            if(erpCredit == null){
                erpCredit = new ErpCredit();
                map.put(projectId,erpCredit);
                erpCredit.setItemId(erpAccount.getProjectDefinitionCode());//添加项目定义编号
                erpCredit.setItemName(erpAccount.getProjectDefinitionDetails());//项目名称
            }

            //成本项目施工费对应供应商
            List<DictValue> supCost = DictUtils.getDictList("finance_cost_construction");
            for (DictValue a :
                    supCost) {
                String label = a.getLabel();
                if (supplierName.equals(label)) {
                    erpCredit.setConsTotalFee(DoubleUtil.add(erpCredit.getConsTotalFee(),erpAccount.getLineItemAmount()));
                }
            }
            //成本项目设计费对应供应商
            List<DictValue> desCost = DictUtils.getDictList("finance_cost_design");
            for (DictValue a :
                    desCost) {
                String label = a.getLabel();
                if (supplierName.equals(label)) {
                    erpCredit.setOtherDesignFee(DoubleUtil.add(erpCredit.getOtherDesignFee(),lineItemAmount));
                }
            }
            //成本项目监理费对应供应商
            List<DictValue> conCOst = DictUtils.getDictList("finance_cost_supervisor");
            for (DictValue a :
                    conCOst) {
                String label = a.getLabel();
                if (supplierName.equals(label)) {
                    erpCredit.setOtherSupervisorFee(DoubleUtil.add(erpCredit.getOtherSupervisorFee(),lineItemAmount));
                }
            }

            //处理进项税额
            erpCredit.setTheInputTax(DoubleUtil.add(erpCredit.getTheInputTax(),inputTax));

            //实际投资、移交生产的资产总值，明细账判断条件：科目名称中包含“工程成本”
            if (subjectName.contains("工程成本")){
                erpCredit.setActualInvestment(DoubleUtil.add(erpCredit.getActualInvestment(),lineItemAmount));
                erpCredit.setTransferAssets(DoubleUtil.add(erpCredit.getTransferAssets(),lineItemAmount));
            }


            if(materialDetail.isEmpty()){
            }else{ //这里是物料描述不为空的情况
                //            10Kv线路
                if (materialDetail.contains(ErpInfo.CON_OICAC10)||materialDetail.contains(ErpInfo.CON_OICAC20)||
                        materialDetail.contains(ErpInfo.CON_PRCAC10)||materialDetail.contains(ErpInfo.CON_PRCAC20)){
                    erpCredit.setTenKvModel(materialDetail);
                    erpCredit.setTenKvUnit(erpAccount.getUnit());//单位
                    erpCredit.setSupplierName(erpAccount.getSupplierName());//公司
                    erpCredit.setTenKvLineLength(DoubleUtil.add(erpCredit.getTenKvLength(),theNumber));//10kv长度
                    erpCredit.setTenKvItsLine(DoubleUtil.add(erpCredit.getTenKvItsLine(),theNumber));//10kv长度 值一样
                }

                //400v线路
                if (materialDetail.contains(ErpInfo.CON_OICAC1)||
                        materialDetail.contains(ErpInfo.CON_PRCAC1)){
                    erpCredit.setTenKvItesFhvFollow(DoubleUtil.add(erpCredit.getTenKvItesFhvFollow(),theNumber));
                    //400v也计入 10kv的长度
                    erpCredit.setTenKvLineLength(DoubleUtil.add(erpCredit.getTenKvLength(),theNumber));
                    erpCredit.setTenKvItsLine(DoubleUtil.add(erpCredit.getTenKvItsLine(),theNumber));
                }

                //电缆管
                if (materialDetail.contains(CON_CABLE)){
                    erpCredit.setCableTube(materialDetail);
                }

                //处理设备和材料
                //筛选物料描述包含（变压器、环网柜（无“”有“无”字样）、箱式变电站、高压开关柜）为设备， 其余为材料
                if (materialDetail.contains(ErpInfo.CON_TSF)||materialDetail.contains(ErpInfo.CON_RNB)||
                        materialDetail.contains(ErpInfo.CON_BST)||materialDetail.contains(ErpInfo.CON_HVS)){
                    Map<String,ErpCreditEquipment> equipmentMap = erpCredit.getEquipmentMap();
                    ErpCreditEquipment equipment = equipmentMap.get(materialDetail);
                    if(equipment==null){
                        equipment = new ErpCreditEquipment();
                        equipment.setErpCredit(erpCredit);
                        equipment.setEqmMaterialDetails1(materialDetail);//添加物料描述
                        equipment.setEqmUnit(unit);//添加的单位
                        equipment.setEqmMaterialCode(materialCode);//添加物料编码
                        equipment.setEqmSupplierName(supplierName);//添加供应商
                        //截取总容量kVA前数字
                        if (materialDetail.toLowerCase().contains("kva")){
                            String str[] =  materialDetail.split(",");
                            for (int k = 0; k < str.length; k++) {
                                if (str[k].toLowerCase().contains("kva")){
                                    equipment.setEqmTotalCapacity(str[k].substring(0,str[k].toLowerCase().indexOf("kva")));//添加总容量
                                    break;
                                }
                            }
                        }
                        equipmentMap.put(materialDetail,equipment);
                    }
                    equipment.setEqmNumbers(DoubleUtil.add(equipment.getEqmNumbers(),theNumber));//添加数量
                    equipment.setEqmBookedFee1(DoubleUtil.add(equipment.getEqmBookedFee1(),lineItemAmount));//添加入账金额

                }else{
                    Map<String,ErpCreditMaterial> materialMap = erpCredit.getMaterialMap();
                    ErpCreditMaterial material = materialMap.get(materialDetail);
                    if(material==null){
                        material = new ErpCreditMaterial();
                        material.setEqmMaterialDetails2(materialDetail);//添加物料描述
                        material.setMtlUnit(unit);//添加设备单位
                        material.setMtlSupplierName(supplierName);//添加供应商
                        material.setEqmMaterialCode(materialCode);//添加物料编码
                        material.setErpCredit(erpCredit);
                        materialMap.put(materialDetail,material);
                    }
                    material.setMtlNumbers(DoubleUtil.add(material.getMtlNumbers(),theNumber));
                    material.setMtlBookedFee2(DoubleUtil.add(material.getMtlBookedFee2(),lineItemAmount));
                }
            }
        }

        //获取erpCredit列表 同时区分安装建筑费
        List<ErpCredit> creditList = new ArrayList<>(map.values());
        for(ErpCredit credit:creditList){
            credit.setErpCreditChild1s(new ArrayList<>(credit.getEquipmentMap().values()));
            credit.setErpCreditChild2s(new ArrayList<>(credit.getMaterialMap().values()));
        }

        return creditList;
    }


    /**
     * 获取单独 唯一 的 数据集合（项目定义编号——其他费用合计）
     * @param list 读取表格获得的列表
     * @return List<ErpCredit> 主类 集合（单独唯一的数据集合）
     */
//    public static List<ErpCredit> getListErpCredit(List<ErpAccount> list){
//        List<ErpCredit> erpCredits = new ArrayList<ErpCredit>();//定义集合
//        ErpCredit erpCredit=null;//要获取集合对象
//        ErpAccount erpAccount=null;//导入表格对象
//        boolean flag;//判断 项目定义编号是否相同 true-不相同 false-相同
//        //循环导入表格对象
//        for (int i = 0; i < list.size(); i++) {
//            flag = true;//默认值为true （默认项目定义编号不相同）
//            erpAccount=list.get(i);//获取erpAccount对象
//            //判断当前 集合有数据
//            if (null!=erpCredits&&erpCredits.size()>0){
//                //循环 当前得到的ErpCredits对象
//                for (int j = 0; j < erpCredits.size(); j++) {
//                    erpCredit = erpCredits.get(j);//获取 erpCredit对象
//                    //判断项目定义号相同
//                    if (erpAccount.getProjectDefinitionCode().equals(erpCredit.getItemId())){
//                        flag = false;
//                        erpCredit = getActualAndConstruction(erpCredit,erpAccount,flag);
//                        erpCredit=getOtherFee(erpCredit,erpAccount,flag);
//                        erpCredit=getTenKvLineInformation(erpCredit,erpAccount,flag);
//                        erpCredit = getFourHundredInformation(erpCredit,erpAccount,flag);
//                        erpCredit = getcableTube(erpCredit,erpAccount,flag);
//                        break;
//                    }
//                }
//            }
//            //第一次，或者项目定义编码不同 进行如下方法计算
//            if (flag){
//                erpCredit = new ErpCredit();//获取ErpCredit对象
//                erpCredit.setItemId(erpAccount.getProjectDefinitionCode());//添加项目定义编号
//                erpCredit.setItemName(erpAccount.getProjectDefinitionDetails());//项目名称
//                erpCredit = getActualAndConstruction(erpCredit,erpAccount,flag);
//                erpCredit = getOtherFee(erpCredit,erpAccount,flag);
//                erpCredit = getTenKvLineInformation(erpCredit,erpAccount,flag);
//                erpCredit = getcableTube(erpCredit,erpAccount,flag);
//                erpCredits.add(erpCredit);
//            }
//            if (null!=erpCredit.getTenKvItesFhvFollow()&&null!=erpCredit.getTenKvItsLine()){
//                erpCredit.setTenKvLineLength(erpCredit.getTenKvItesFhvFollow()+erpCredit.getTenKvItsLine());
//            }else {
//                if (null!=erpCredit.getTenKvItesFhvFollow()){
//                    erpCredit.setTenKvLineLength(erpCredit.getTenKvItesFhvFollow());
//                }
//                if (null!=erpCredit.getTenKvItsLine()){
//                    erpCredit.setTenKvLineLength(erpCredit.getTenKvItsLine());
//                }
//            }
//        }
//        List<ErpCredit> otherManageFee = getOtherManageFee(erpCredits);//计算其他费用法人管理费
//
//        return otherManageFee;
//    }



    /**
     * 电缆保护管读取
     * @param erpCredit
     * @param erpAccount
     * @param flag
     * @return
     */
//    public static ErpCredit getcableTube(ErpCredit erpCredit, ErpAccount erpAccount, boolean flag){
//        if (erpAccount.getMaterialDetails().contains(CON_CABLE)){
//            erpCredit.setCableTube(erpAccount.getMaterialDetails());
//        }
//         return erpCredit;
//    }


    /**
     * 400
     * @param erpCredit
     * @param erpAccount
     * @param flag
     * @return
     */
//    public static ErpCredit getFourHundredInformation(ErpCredit erpCredit, ErpAccount erpAccount, boolean flag){
//        double fourHundredKvLength=0.0;//10kv线路信息长度
//        //400
//        if (!erpAccount.getTheNumber().isEmpty()){
//            fourHundredKvLength = Double.parseDouble(erpAccount.getTheNumber());
//        }
//        if (flag){
//            //架空绝缘导线AC1V 电力电缆AC1V
//            if (erpAccount.getMaterialDetails().contains(ErpInfo.CON_OICAC1)||
//                    erpAccount.getMaterialDetails().contains(ErpInfo.CON_PRCAC1)){
//                erpCredit.setTenKvItesFhvFollow(fourHundredKvLength);
//            }
//            return erpCredit;
//        }
//        //得到400
//        if (erpAccount.getMaterialDetails().contains(ErpInfo.CON_OICAC1)||
//                erpAccount.getMaterialDetails().contains(ErpInfo.CON_PRCAC1)){
//            if (null!=erpCredit.getTenKvItesFhvFollow()){//如果值不存在则赋值为0.0
//                fourHundredKvLength = erpCredit.getTenKvItesFhvFollow()+fourHundredKvLength;
//            }
//            erpCredit.setTenKvItesFhvFollow(fourHundredKvLength);
//        }
//        return erpCredit;
//    }


    /**
     * 10kv线路信息
     * @param erpCredit
     * @param erpAccount
     * @param flag
     * @return
     */
//    public static ErpCredit getTenKvLineInformation(ErpCredit erpCredit, ErpAccount erpAccount, boolean flag){
//        String materialDetails = erpAccount.getMaterialDetails();//物料描述
//        double tenKvLength=0.0;//长度
//        double tenKvItsLine=0.0;//10kv线路
//        String[] split;
//        String[] split1;
//        if (!erpAccount.getTheNumber().isEmpty()){
//            tenKvLength = Double.parseDouble(erpAccount.getTheNumber());
//            tenKvItsLine= Double.parseDouble(erpAccount.getTheNumber());
//        }
//        if (flag){
//            if (materialDetails.contains(ErpInfo.CON_OICAC10)||
//                    materialDetails.contains(ErpInfo.CON_OICAC20)||
//                    materialDetails.contains(ErpInfo.CON_PRCAC10)||
//                    materialDetails.contains(ErpInfo.CON_PRCAC20)){
//                erpCredit.setTenKvModel(materialDetails);//架空导线型号
//                erpCredit.setTenKvUnit(erpAccount.getUnit());//单位
//                erpCredit.setTenKvLength(tenKvLength);//长度
//                erpCredit.setTenKvItsLine(tenKvItsLine);//10kv线路
//                erpCredit.setSupplierName(erpAccount.getSupplierName());
//            }
//            return erpCredit;
//        }
//        //得到10
//        if (materialDetails.contains(ErpInfo.CON_OICAC10)||
//                materialDetails.contains(ErpInfo.CON_OICAC20)||
//                materialDetails.contains(ErpInfo.CON_PRCAC10)||
//                materialDetails.contains(ErpInfo.CON_PRCAC20)){
//            //判断型号 显示
////            if (null!=erpCredit.getTenKvModel()&& erpCredit.getTenKvModel().length() != 0){
////                split = materialDetails.split(",");
////                split1 = erpCredit.getTenKvModel().split(",");
////                if (materialDetails.contains(ErpInfo.CON_OICAC)){
////                    if (Double.parseDouble(split[split.length-1]) >= Double.parseDouble(split1[split1.length-1])){
////                        erpCredit.setTenKvModel(materialDetails);
////                        erpCredit.setTenKvUnit(erpAccount.getUnit());//单位
////                        erpCredit.setSupplierName(erpAccount.getSupplierName());//公司
////                    }else {
////                        if (!erpCredit.getTenKvModel().contains(ErpInfo.CON_OICAC)){
////                            erpCredit.setTenKvModel(materialDetails);
////                            erpCredit.setTenKvUnit(erpAccount.getUnit());//单位
////                            erpCredit.setSupplierName(erpAccount.getSupplierName());//公司
////                        }
////                    }
////                }else {
////                    if (!erpCredit.getTenKvModel().contains(ErpInfo.CON_OICAC)){
////                        if (Double.parseDouble(split[split.length-1]) >= Double.parseDouble(split1[split1.length-1])){
////                            erpCredit.setTenKvModel(materialDetails);
////                            erpCredit.setTenKvUnit(erpAccount.getUnit());//单位
////                            erpCredit.setSupplierName(erpAccount.getSupplierName());//公司
////                        }
////                    }
////                }
////            }else {
////                erpCredit.setTenKvModel(materialDetails);
////                erpCredit.setTenKvUnit(erpAccount.getUnit());//单位
////                erpCredit.setSupplierName(erpAccount.getSupplierName());//公司
////            }
//            erpCredit.setTenKvModel(materialDetails);//10kv电缆架空型号
//            erpCredit.setTenKvUnit(erpAccount.getUnit());//单位
//            erpCredit.setSupplierName(erpAccount.getSupplierName());//公司
//            if (null!=erpCredit.getTenKvLength()){//10kv线路信息长度
//                tenKvLength=erpCredit.getTenKvLength()+tenKvLength;
//            }
//            if (null!=erpCredit.getTenKvItsLine()){////10kv线路
//                tenKvItsLine=erpCredit.getTenKvItsLine()+tenKvItsLine;
//            }
//            //添加长度
//            erpCredit.setTenKvLength(tenKvLength);
//            //添加10kv线路
//            erpCredit.setTenKvItsLine(tenKvItsLine);
//        }
//        return erpCredit;
//    }


    /**
     * 获取实际金额，进项税额，施工费合计
     * @param erpCredit
     * @param erpAccount
     * @param flag
     * @return
     */
//    public static ErpCredit getActualAndConstruction(ErpCredit erpCredit, ErpAccount erpAccount, boolean flag){
//        double actualInvestment = 0.0;//实际投资
//        double consTotalFee=0.0;//施工费：合计
//        double theInputNumer=0.0;//进项税额
//        //判断 导入表格 对象 的行项目金额是否为空
//        if(null!=erpAccount.getLineItemAmount()){
//            actualInvestment = erpAccount.getLineItemAmount();
//            consTotalFee = erpAccount.getLineItemAmount();
//        }
//        //判断进项税额是否为空值
//        if (null!=erpAccount.getTheInputTax()){
//            theInputNumer=erpAccount.getTheInputTax();
//        }
//        if (flag){
//            erpCredit.setTheInputTax(theInputNumer);//添加进项税额
//            //筛选（科目名称）中包含（工程成本-）的所有内容，统计行项目金额合计
//            if (erpAccount.getSubjectName().contains(ErpInfo.CON_PROJECT)){
//                //添加行项目金额 到 ErpCredit对象中的实际投资金额
//                erpCredit.setActualInvestment(actualInvestment);
//                erpCredit.setTransferAssets(actualInvestment);
//            }
//            //施工费：合计：入账金额 判断物料描述是否为空
//            if (erpAccount.getMaterialDetails().isEmpty()) {
//                //筛选物料描述为空的（科目名称）中包含（工程成本-安装工程支出）的所有内容，统计行项目金额合计
//                if (erpAccount.getSubjectName().contains(ErpInfo.CON_PROJECT + ErpInfo.CON_lINE + ErpInfo.CON_IPE)) {
//                    //得到施工费
//                    erpCredit.setConsTotalFee(consTotalFee);
//                }
//            }
//            return erpCredit;
//        }
//        //添加进项税额
//        if (null!=erpCredit.getTheInputTax()){
//            theInputNumer=erpCredit.getTheInputTax()+theInputNumer;
//        }
//        erpCredit.setTheInputTax(theInputNumer);
//        //筛选（科目名称）中包含（工程成本-）的所有内容，统计行项目金额合计
//        if (erpAccount.getSubjectName().contains(ErpInfo.CON_PROJECT)){
//            //当前实际投资+获取到的行项目金额
//            if (null!=erpCredit.getActualInvestment()){
//                actualInvestment=erpCredit.getActualInvestment()+actualInvestment;
//            }
//            //替换 实际投资金额
//            erpCredit.setActualInvestment(actualInvestment);
//            erpCredit.setTransferAssets(actualInvestment);
//        }
//        //施工费：合计：入账金额 判断物料描述是否为空
//        if (erpAccount.getMaterialDetails().isEmpty()) {
//            //筛选物料描述为空的（科目名称）中包含（工程成本-安装工程支出）的所有内容，统计行项目金额合计
//            if (erpAccount.getSubjectName().contains(ErpInfo.CON_PROJECT + ErpInfo.CON_lINE + ErpInfo.CON_IPE)) {
//                //当前施工费：合计+获取到的行项目金额
//                if (null!=erpCredit.getConsTotalFee()){
//                    consTotalFee = erpCredit.getConsTotalFee()+ consTotalFee;
//                }
//                //替换 施工费：合计金额
//                erpCredit.setConsTotalFee(consTotalFee);
//            }
//        }
//        return erpCredit;
//    }


    /**
     * 其他费用
     * @param erpCredit
     * @param erpAccount
     * @param flag
     * @return
     */
//    public static ErpCredit getOtherFee(ErpCredit erpCredit, ErpAccount erpAccount, boolean flag){
//        double otherSupervisorFee=0.0;//其他费用:监理费:入账金额
//        double otherDesignFee = 0.0;//其他费用：设计费：入账金额
//        double otherBuildLoan=0.0;//其他费用:建设期贷款利息
//        double otherLineDamages=0.0;//线路施工赔偿费
//        double otherLegalManage=0.0;//法人管理费
//        double otherTotalFee=0.0;//其他费用合计
//        double lineItemAmount=0.0;//行项目金额合计
//        //判断 导入表格 对象 的行项目金额是否为空
//        if(null!=erpAccount.getLineItemAmount()){
//            lineItemAmount = erpAccount.getLineItemAmount();
//        }
//        if (flag){
//            erpCredit.setOtherSupervisorFee(0.0);//添加其他：监理费
//            erpCredit.setOtherDesignFee(0.0);//添加 其他设计费
//            erpCredit.setOtherBuildLoan(0.0);//添加 建设期贷款利息
//            erpCredit.setOtherLineDamages(0.0);//添加 线路施工赔偿费
//            erpCredit.setOtherLegalManage(0.0);//添加 法人管理费
//            //其他费用：合计
//            erpCredit.setOtherTotalFee(0.0);
//            //判断物料描述是否为空
//            if (erpAccount.getMaterialDetails().isEmpty()) {
//                //筛选物料描述为空的先筛选（科目名称）中包含（工程成本-待摊支出-其他/工程成本-待摊支出-项目法人管理费-其他/项目管理经费 - 会议费）
//                if (erpAccount.getSubjectName().contains(ErpInfo.CON_PlPlQ)||
//                        erpAccount.getSubjectName().contains(ErpInfo.CON_PLPLPLQ)||
//                        erpAccount.getSubjectName().contains(ErpInfo.CON_PLM)||
//                        erpAccount.getSubjectName().contains(ErpInfo.CON_PLPLPLQ2)||
//                        erpAccount.getSubjectName().contains(ErpInfo.CON_PLPLPLQ1)||
//                        erpAccount.getSubjectName().contains(CON_JSQDK)||
//                        erpAccount.getSubjectName().contains(CON_JSQDK1)){
//                    //判断WBS描述为工程监理费
//                    if (erpAccount.getWbsDetails().contains(ErpInfo.CON_PSF)){
//                        erpCredit.setOtherSupervisorFee(lineItemAmount);
//                    }
//                    //判断WBS描述为工程设计费
//                    if (erpAccount.getWbsDetails().contains(ErpInfo.CON_EDF)||erpAccount.getWbsDetails().contains(ErpInfo.CON_PLMDESIGN)){
//                        erpCredit.setOtherDesignFee(lineItemAmount);
//                    }
//                    //判断WBS描述为建设期贷款利息
//                    if (erpAccount.getWbsDetails().contains(ErpInfo.CON_OBL)){
//                        erpCredit.setOtherBuildLoan(lineItemAmount);
//                    }
//                    //判断WBS描述为线路施工赔偿费
//                    if (erpAccount.getWbsDetails().contains(ErpInfo.CON_OLD)){
//                        erpCredit.setOtherLineDamages(lineItemAmount);
//                    }
//                    //其他费用：法人管理费
//                    erpCredit.setOtherLegalManage(lineItemAmount);
//                    //其他费用：合计
//                    erpCredit.setOtherTotalFee(lineItemAmount);
//                }
//            }
//        }else {
//            if (erpAccount.getMaterialDetails().isEmpty()) {
//                //筛选物料描述为空的先筛选（科目名称）中包含（工程成本-待摊支出-其他/工程成本-待摊支出-项目法人管理费-其他/项目管理经费 - 会议费）
//                if (erpAccount.getSubjectName().contains(ErpInfo.CON_PlPlQ)||
//                        erpAccount.getSubjectName().contains(ErpInfo.CON_PLPLPLQ)||
//                        erpAccount.getSubjectName().contains(ErpInfo.CON_PLM)||
//                        erpAccount.getSubjectName().contains(ErpInfo.CON_PLPLPLQ2)||
//                        erpAccount.getSubjectName().contains(ErpInfo.CON_PLPLPLQ1)||
//                        erpAccount.getSubjectName().contains(CON_JSQDK)||
//                        erpAccount.getSubjectName().contains(CON_JSQDK1)){
//                    //筛选（WBS描述）为工程监理费的行项目金额合计
//                    if (erpAccount.getWbsDetails().equals(ErpInfo.CON_PSF)){
//                        otherSupervisorFee = erpCredit.getOtherSupervisorFee()+lineItemAmount;//监理费
//                        erpCredit.setOtherSupervisorFee(otherSupervisorFee);
//                    }
//                    //判断WBS描述为工程设计费
//                    if (erpAccount.getWbsDetails().equals(ErpInfo.CON_EDF)||erpAccount.getWbsDetails().contains(ErpInfo.CON_PLMDESIGN)){
//                        otherDesignFee = erpCredit.getOtherDesignFee() + lineItemAmount;//设计费
//                        erpCredit.setOtherDesignFee(otherDesignFee);
//                    }
//                    //判断WBS描述为建设期贷款利息
//                    if (erpAccount.getWbsDetails().equals(ErpInfo.CON_OBL)){
//                        otherBuildLoan =erpCredit.getOtherBuildLoan()+lineItemAmount;//建设期贷款利息
//                        erpCredit.setOtherBuildLoan(otherBuildLoan);
//                    }
//                    //判断WBS描述为线路施工赔偿费
//                    if (erpAccount.getWbsDetails().equals(ErpInfo.CON_OLD)){
//                        otherLineDamages = erpCredit.getOtherLineDamages()+lineItemAmount;//建设期贷款利息
//                        erpCredit.setOtherLineDamages(otherLineDamages);
//                    }
//                    //其他费用：法人管理费
//                    otherLegalManage=erpCredit.getOtherLegalManage()+lineItemAmount;
//                    erpCredit.setOtherLegalManage(otherLegalManage);
//                    //其他费用：合计
//                    otherTotalFee = erpCredit.getOtherTotalFee()+ lineItemAmount;
//                    erpCredit.setOtherTotalFee(otherTotalFee);
//                }
//            }
//        }
//        return erpCredit;
//    }


    /**
     * 法人管理费计算
     * @param erpCredits
     * @return
     */
//    public static List<ErpCredit> getOtherManageFee(List<ErpCredit> erpCredits){
//        Double total=0.0;//其他：监理费
//        Double otherLegalManage = 0.0;//法人管理费
//        for (ErpCredit erpCredit1:erpCredits){
//            total = 0.0;//合计
//            if (null!=erpCredit1.getOtherSupervisorFee()){
//                total  += erpCredit1.getOtherSupervisorFee();//监理费
//            }
//            if (null!=erpCredit1.getOtherDesignFee()){
//                total += erpCredit1.getOtherDesignFee();//设计费
//            }
//            if (null!=erpCredit1.getOtherBeWorkFee()){
//                total += erpCredit1.getOtherBeWorkFee();//项目前期工作费
//            }
//            if (null!=erpCredit1.getOtherBuildLoan()){
//                total += erpCredit1.getOtherBuildLoan();//建设期贷款利息
//            }
//            if (null!=erpCredit1.getOtherLineDamages()){
//                total += erpCredit1.getOtherLineDamages();//线路施工赔偿费
//            }
//            if (null!=erpCredit1.getOtherLegalManage()){
//                otherLegalManage = erpCredit1.getOtherLegalManage();
//            }
//            erpCredit1.setOtherLegalManage(otherLegalManage-total);
//        }
//        return erpCredits;
//    }
    /**
     * 获取设备的list集合
     * @param list 导入的表格 bean对象
     * @return 设备的list集合
     */
//    public static List<ErpCreditEquipment> getListErpCreditChild1(List<ErpAccount> list){
//        Double eqmNumbers=0.0;//设备台数
//        Double eqmBookedFee=0.0;//设备入账金额
//        String materialDetails="";//筛选kva
//        boolean flag = true;//开关：判断集合是否重复 true-物料描述不同 false-项目定义编号相同且物料描述相同
//        ErpCreditEquipment equipment;//设备对象
//        ErpCredit erpCredit;//设备父类
//        ErpAccount erpAccount;//数据集合
//        List<ErpCreditEquipment> creditListEquipments = new ArrayList<ErpCreditEquipment>();
//        for (int i = 0; i < list.size(); i++) {
//            flag=true;
//            erpAccount=list.get(i);
//            //判断设备台数是否为空
//            if (!erpAccount.getTheNumber().isEmpty()){//设备台数
//                eqmNumbers = Double.parseDouble(erpAccount.getTheNumber()); //否则 获取设备台数 信息
//            }
//            //判断如行项目金额是否为空
//            if (null!=erpAccount.getLineItemAmount()){
//                eqmBookedFee = erpAccount.getLineItemAmount();//行项目金额赋值费入账金额
//            }
//            //判断当前 设备费 集合是否存在
//            if (null!=creditListEquipments&&creditListEquipments.size()>0){
//                for (int j = 0; j < creditListEquipments.size(); j++) {
//                    equipment = creditListEquipments.get(j);//获取设备对象
//                    //判断项目定义号是否相同
//                    if (equipment.getErpCredit().getItemId().equals(erpAccount.getProjectDefinitionCode())) {
//                        //判断物料描述是否相同
//                        if (erpAccount.getMaterialDetails().equals(equipment.getEqmMaterialDetails1())) {
//                            eqmBookedFee = equipment.getEqmBookedFee1()+eqmBookedFee;//累加 入账金额
//                            equipment.setEqmBookedFee1(eqmBookedFee);//替换
//                            eqmNumbers = equipment.getEqmNumbers()+eqmNumbers;//累计 数量
//                            equipment.setEqmNumbers(eqmNumbers);//替换
//                            flag = false;// 项目定义编号相同且物料描述相同（当前ErpAccount对象在ErpCreditChild1对象中存在且相同 跳过下面方法）
//                            break;
//                        }
//                    }
//                }
//            }
//            if (flag){
//                //筛选物料描述包含（变压器、环网柜（无“”有“无”字样）、箱式变电站、高压开关柜），分别显示筛选出的物料描述
//                if (erpAccount.getMaterialDetails().contains(ErpInfo.CON_TSF)||
//                        erpAccount.getMaterialDetails().contains(ErpInfo.CON_RNB)||
//                        erpAccount.getMaterialDetails().contains(ErpInfo.CON_BST)||
//                        erpAccount.getMaterialDetails().contains(ErpInfo.CON_HVS)){
//                    equipment = new ErpCreditEquipment();//获取设备对象
//                    erpCredit=new ErpCredit();//获取设备 父类 主类
//                    materialDetails = erpAccount.getMaterialDetails();//获取物料描述
//                    //截取总容量kVA前数字
//                    if (materialDetails.contains("kVA")){
//                        String str[] =  materialDetails.split(",");
//                        for (int k = 0; k < str.length; k++) {
//                            if (str[k].toLowerCase().contains("kva")){
//                                materialDetails = str[k].substring(0,str[k].toLowerCase().indexOf("kva"));
//                                break;
//                            }
//                        }
//                        equipment.setEqmTotalCapacity(materialDetails);//添加总容量
//                    }
//                    erpCredit.setItemId(erpAccount.getProjectDefinitionCode());//添加项目定义编码
//                    equipment.setEqmMaterialDetails1(erpAccount.getMaterialDetails());//添加物料描述
//                    equipment.setEqmUnit(erpAccount.getUnit());//添加的单位
//                    equipment.setEqmNumbers(eqmNumbers);//添加数量
//                    equipment.setEqmBookedFee1(eqmBookedFee);//添加入账金额
//                    equipment.setEqmSupplierName(erpAccount.getSupplierName());//添加供应商
//                    equipment.setErpCredit(erpCredit);
//                    creditListEquipments.add(equipment);
//                }
//            }
//        }
//        return creditListEquipments;
//    }
    /*
        总的设备费合计：对特殊情况处理方法：（配电数量为0的设备费）
     */
//    public static List<ErpCreditEquipment> getListErpCreditEquipments(List<ErpAccount> list){
//        Double eqmBookedFeel = 0.0;
//        boolean flag = false;
//        List<ErpCreditEquipment> listErpCreditEquipments = getListErpCreditChild1(list);
//        List<ErpCreditEquipment> erpCreditEquipmentList = new ArrayList<ErpCreditEquipment>();
//        for (ErpCreditEquipment equ:listErpCreditEquipments){
//            erpCreditEquipmentList.add(equ);
//        }
//        for (ErpCreditEquipment erpCreditEquipment:listErpCreditEquipments){
//            eqmBookedFeel = 0.0;//设备费
//            flag = false;
//            //如果台数不等于0
//            if (erpCreditEquipment.getEqmNumbers().equals("0")){
//                //循环
//                for (ErpCreditEquipment erpEqm:erpCreditEquipmentList){
//                    //如果项目定义号相同
//                    if (erpCreditEquipment.getErpCredit().getItemId().equals(erpEqm.getErpCredit().getItemId())){
//                        if (!erpEqm.getEqmNumbers().equals("0")){//如果台数不为0
//                            eqmBookedFeel = erpCreditEquipment.getEqmBookedFee1();
//                            flag = true;
//                            break;
//                        }
//                    }
//                }
//            }
//            if (flag){
//
//            }
//        }
//        for (ErpCreditEquipment erpCreditEquipment:listErpCreditEquipments){
//            for (ErpCreditEquipment erpEqm:erpCreditEquipmentList){
//                equipments = new ArrayList<ErpCreditEquipment>();
//                if (erpCreditEquipment.getErpCredit().getItemId().equals(erpEqm.getErpCredit().getItemId())){
//                    equipments.add(erpEqm);
//                }
//            }
//        }
//        return listErpCreditEquipments;
//    }
    /**
     * 获取材料的list集合
     * @param
     * @return 材料 list金额
     */
//    public static List<ErpCreditMaterial> getListErpCreditChild2(List<ErpAccount> erpAccounts){
//        List<ErpCreditMaterial> creditListChild2 = new ArrayList<ErpCreditMaterial>();
//        boolean flag = true;//判断 材料费 true-物料描述不同或者项目定义编号不同 false-仙姑定义编号物料描述相同
//        double eqmBookedFee2=0.0;//材料入账金额
//        double eqmNumber2=0.0;//设备台数
//        ErpCreditMaterial erpCreditChild2=null;
//        ErpCredit erpCredit = null;
//        ErpAccount erpAccount=null;
//        for (int i = 0; i < erpAccounts.size(); i++) {
//            flag=true;//默认初始值 项目定义编号不同
//            erpAccount = erpAccounts.get(i);
//            //判断行项目金额是否为空
//            if (null!=erpAccount.getLineItemAmount()){
//                //赋值材料入账金额为行项目金额
//                eqmBookedFee2 = erpAccount.getLineItemAmount();
//            }
//            if (!erpAccount.getTheNumber().isEmpty()){//判断设备材料
//                eqmNumber2=Double.parseDouble(erpAccount.getTheNumber());
//            }
//            //判断creditListChild2对象集合 是否存在
//            if (null!=creditListChild2&&creditListChild2.size()>0){
//                for (int j = 0; j < creditListChild2.size(); j++) {
//                    erpCreditChild2 = creditListChild2.get(j);
//                    //判断项目定义号是否相同
//                    if (erpCreditChild2.getErpCredit().getItemId().equals(erpAccount.getProjectDefinitionCode())) {
//                        //判断物料描述是否相同
//                        if (erpAccount.getMaterialDetails().equals(erpCreditChild2.getEqmMaterialDetails2())) {
//                            eqmBookedFee2 += erpCreditChild2.getMtlBookedFee2();//入账金额累加
//                            erpCreditChild2.setMtlBookedFee2(eqmBookedFee2);
//                            eqmNumber2 = erpCreditChild2.getMtlNumbers()+eqmNumber2;//台数累加
//                            erpCreditChild2.setMtlNumbers(eqmNumber2);//添加设备台数
//                            flag=false;
//                            break;
//                        }
//                    }
//                }
//            }
//            if (flag){
//                //排除 物料描述为空的内容
//                if (!erpAccount.getMaterialDetails().isEmpty()) {
//                    //筛选物料描述不包含（变压器、环网柜（无“”有“无”字样）、箱式变电站、高压开关柜）的行项目金额合计
//                    if (!erpAccount.getMaterialDetails().contains(ErpInfo.CON_TSF) &&
//                            !erpAccount.getMaterialDetails().contains(ErpInfo.CON_RNB) &&
//                            !erpAccount.getMaterialDetails().contains(ErpInfo.CON_BST) &&
//                            !erpAccount.getMaterialDetails().contains(ErpInfo.CON_HVS)) {
//                        erpCreditChild2 = new ErpCreditMaterial();//获取材料费对象
//                        erpCredit = new ErpCredit();//获取材料 父类 对象
//                        erpCredit.setItemId(erpAccount.getProjectDefinitionCode());//添加项目id
//                        erpCreditChild2.setEqmMaterialDetails2(erpAccount.getMaterialDetails());//添加物料描述
//                        erpCreditChild2.setMtlBookedFee2(eqmBookedFee2);//添加项目材料费
//                        erpCreditChild2.setMtlNumbers(eqmNumber2);//添加设备台数
//                        erpCreditChild2.setMtlUnit(erpAccount.getUnit());//添加设备单位
//                        erpCreditChild2.setMtlSupplierName(erpAccount.getSupplierName());//添加供应商
//                        erpCreditChild2.setErpCredit(erpCredit);
//                        creditListChild2.add(erpCreditChild2);
//                    }
//                }
//            }
//        }
//        return creditListChild2;
//    }
    public static String getStatus(){
        int machineId = 1;
        int hashCodeV = UUID.randomUUID().toString().hashCode();
        if (hashCodeV<0){
            hashCodeV=-hashCodeV;
        }
        return  (machineId+String.format("%015d",hashCodeV));
    }
    /*
        特殊情况处理
     */
    public static List<ErpCreditEquipment> getEquNumbers(List<ErpCreditEquipment> equipments){
        Double eqmBooksFee = 0.0;
        for (ErpCreditEquipment erpCreditEquipment:equipments){
            if (erpCreditEquipment.getEqmNumbers()==0.00){
                eqmBooksFee += erpCreditEquipment.getEqmBookedFee1();//入账金额
            }
        }
        for (ErpCreditEquipment erpCreditEquipment:equipments){
            if (erpCreditEquipment.getEqmNumbers()!=0.00){
                eqmBooksFee=eqmBooksFee+erpCreditEquipment.getEqmBookedFee1();
                erpCreditEquipment.setEqmBookedFee1(eqmBooksFee);
            }
        }
        for (int i = 0; i < equipments.size(); i++) {
            if (equipments.get(i).getEqmNumbers()==0.00){
                equipments.remove(i);
                i--;
            }
        }
        return equipments;
    }
    //导入：安装费，建筑费判断，如果无线路，无设备为建筑费，否则为安装费
//    public static void getInstallBuild(List<ErpCredit> erpCredits){
//        Boolean flag = false;
//        List<ErpCreditEquipment> erpCreditEquipmentList = new ArrayList<ErpCreditEquipment>();
//        for (ErpCredit erpCredit:erpCredits){
//            flag = false;
//            erpCreditEquipmentList = ExportUtilCalculate.getEquNumbers(erpCredit.getErpCreditChild1s());
//            //判断线路信息是否为空
//            if (null!=erpCredit.getTenKvModel()&&erpCredit.getTenKvModel().length()!=0){
//                flag=true;
//            }
//            //设备费 集合 循环
//            for (ErpCreditEquipment erpCreditEquipment:erpCreditEquipmentList){
//                //判断 erpCredit对象项目定义编号  与  ErpCreditChild1对象项目定义编号
//                if (erpCredit.getItemId().equals(erpCreditEquipment.getErpCredit().getItemId())){
//                    flag =true;
//                }
//            }
//            if (flag){//如果为true
//                erpCredit.setCableTube("");
//                //施工费合计 赋值为安装费（有 设备费入账金额 或者 材料费入账金额）
//                erpCredit.setConsInstallFee(erpCredit.getConsTotalFee());
//            }else {
//                //施工费合计 赋值为 建筑费（无 设备费入账金额 以及 材料费入账金额）
//                erpCredit.setConsBuildingFee(erpCredit.getConsTotalFee());
//            }
//        }
//    }
}
