public without sharing class ConInvoiceViewController {
    //经销商产品分类
    public String agencyProType {get;set;}
    //发票使用
    public Consumable_order__c coc { get; set; }
    //出库单使用
    public Consumable_order__c outbound { get; set; }
    //发票ID
    public String invoiceId {get;set;}
    public String orderRemind {get;set;}
    public String deliveryId {get;set;}
    public String reopen {get;set;}
    public Decimal sumPrice {get;set;}
    public Boolean isChange {get;set;}
    //用户信息
    private String accountid = null;
    private String userId = '';

    public Boolean getdone() {
        return (invoiceOrderdetail1Recoeds.size() > 0);
    }

    public Boolean getExistOutbound() {
        return (coc.Outbound_order__c != null);
    }

    public String getInvoiceName() {
        return (coc.Name);
    }
    // 精琢科技   zxk  2021-11-03  存放消耗品明细  end
    public List < Consumable_Orderdetails__c > conoList {
        get;
        set;
    }
    // 精琢科技   zxk  2021-11-03  存放消耗品明细  end

    public String shipmentAccount{
        get {
            return (coc.ShipmentAccount__c);
        }
    }
    //编辑状态
    public String statusEdit = '';
    public Boolean editAble {get;set;}

    public List<InvoiceOrderInfo> invoiceOrderRecoeds { get; set; }
    //出库单明细
    public List<InvoiceOrderInfo> invoiceOrderdetail1Recoeds { get; set; }
    //换货出库单list
    public List<InvoiceOrderInfo> invoiceOrderRecoedschange = new List<InvoiceOrderInfo>();
    //附件
    public List<InvoiceOrderInfo> attachmentRecoeds { get; set; }
    public List<Consumable_order__c> invoiceOrderList = new List<Consumable_order__c>();
    //发票明细1（出库单）
    private List<Consumable_order__c> invoiceOrderSelectedList = new List<Consumable_order__c>();

    

    Map<String,Decimal> ordermx1defaultMap = new Map<String,Decimal>();
    //出库单汇总金额 from 发票明细1
    Map<String,Decimal> outorderMoneytMap = new Map<String,Decimal>();
    //发票明细1关联产品数量
    Map<String,Consumable_Orderdetails__c> outordercountMap = new Map<String,Consumable_Orderdetails__c>();
    //发票关联出库单取得
    List<String> outOrderStringList = new List<String>();
    //二级经销商选择框
    public List<SelectOption> provinceOpts  { get; set; }
    public String SecondDealer {get;set;}
    //public List<SelectOption> orderForHospitalOpts { get; set; }
    public String HospitalInfo {get;set;}
    public String HospitalName {get;set;}

    //明细数量
    public Integer invoiceOrderRecoedsCount {
        get {
            return invoiceOrderRecoeds == null ? 0 : invoiceOrderRecoeds.size();
        }
    }

    list<Dealer_elationship__c> Dealerelationship = new list<Dealer_elationship__c>();
    //排序使用
    private String[] orderby = new String[]{ 'Outbound_Date__c','Name','ShipmentAccount__c'};
    public String sortKey { get; set; }
    public String preSortKey { get; private set; }
    public Boolean sortOrderAsc { get; private set; }
    public String[] sortOrder { get; private set; }
    // 登录者工作地
    private String userWorkLocation;

    public ConInvoiceViewController() {
        invoiceId = ApexPages.currentPage().getParameters().get('invoiceId');
        statusEdit = ApexPages.currentPage().getParameters().get('KeyWords');
        deliveryId = ApexPages.currentPage().getParameters().get('deliveryId');
        reopen = ApexPages.currentPage().getParameters().get('reopen');
        provinceOpts = new List<SelectOption>();
        //orderForHospitalOpts = new List<SelectOption>();
        invoiceOrderRecoeds = new List<InvoiceOrderInfo>();
        attachmentRecoeds = new List<InvoiceOrderInfo>();
        invoiceOrderdetail1Recoeds = new List<InvoiceOrderInfo>();
        invoiceOrderRecoedschange = new List<InvoiceOrderInfo>();
        orderRemind = '';
        isChange = false;
        conoList = new List < Consumable_Orderdetails__c > ();
    }
    //页面初始化
    public void init() {
        sumPrice = 0;
        this.sortKey = '1';
        this.preSortKey = '1';
        this.sortOrderAsc = false;
        this.sortOrder = new String[2];
        this.sortOrder = new String[]{' ',' ',' ',' '};

        if(invoiceId!=null && invoiceId!='' && (statusEdit==''|| statusEdit==null)){
            editAble = false;
        }else if((invoiceId == null||invoiceId=='') && (statusEdit==''||statusEdit==null)){
            editAble = true;
        }else if(invoiceId != null && invoiceId !='' && statusEdit !='' && statusEdit!=null){
            editAble = true;
        }
        userId = UserInfo.getUserId();
        //userId = '00510000005QQ35';
        List<user> Useracc = New List<user>();
        Useracc = [SELECT accountid, Work_Location__c,UserPro_Type__c FROM user WHERE id = :userId ];
        accountid = Useracc[0].accountid;
        userWorkLocation = Useracc[0].Work_Location__c;
        agencyProType = Useracc[0].UserPro_Type__c;
        if(String.isBlank(Useracc[0].UserPro_Type__c)){
            agencyProType = 'ET';
        }
        coc = new Consumable_order__c();

        Dealerelationship = [SELECT Dealer_subordinate__c,Dealer_subordinate__r.Name FROM Dealer_elationship__c WHERE Dealer_principal__c =:accountid ];
        List<Agency_Hospital_Link__c> AgencyHospitalLink = new List<Agency_Hospital_Link__c>();
        AgencyHospitalLink = [select Id, Name, Hospital__c, Hospital__r.Id, Hospital__r.Name, Agency__c
                                                from Agency_Hospital_Link__c
                                                WHERE Agency__c = :accountId];
         // 新規
        if (invoiceId== NULL || invoiceId=='') {
            if (deliveryId== NULL || deliveryId=='') {
                String msoql = makeSoql();
                invoiceOrderList = Database.query(msoql);
                for(Integer i = 0; i < invoiceOrderList.size(); i++){
                    invoiceOrderRecoeds.add(new InvoiceOrderInfo(invoiceOrderList[i]));
                }
            }else{
                if(statusEdit=='' || statusEdit==null){
                    EditAble = false;
                }else if(statusEdit!=''&&statusEdit!=null){
                    EditAble = true;
                }
                coc = [SELECT Id,Name,
                    Invoice_status__c,
                    Invoice_Date__c,
                    Order_ForDealerText__c,
                    Dealer_Info__c,
                    Order_ForDealer__c,
                    Order_ForDealer__r.Name,
                    Order_ForHospital__c,
                    Order_ForHospital__r.Name,
                    Order_date__c,
                    Billed_Status__c,
                    ShipmentAccount__c,
                    Order_Dealer_Info__c,
                    SummonsForDirction__c,
                    Order_ForCustomerText__c,
                    Invoice_Note__c,
                    Invoice_attachment__c,
                    Invoicedet_attachment__c,
                    Outbound_order__c
                FROM Consumable_order__c
                WHERE Id =:deliveryId];
                coc.Name = '';
                if(coc.Order_ForDealer__c != null){
                    SecondDealer = coc.Order_ForDealer__c;
                }

                if(coc.Order_ForHospital__c != null){
                    HospitalInfo = coc.Order_ForHospital__c;
                    HospitalName = coc.Order_ForHospital__r.Name;
                }

                //发票关联出库单取得（出库单）
                invoiceOrderSelectedList = [SELECT Id,
                                                    Order_ForDealer__r.Name,
                                                    Order_ForHospital__r.Name,
                                                    Order_ForDealerText__c,
                                                    Name,Outbound_Date__c,
                                                    ShipmentAccount__c,
                                                    Order_Dealer_Info__c,
                                                    SummonsForDirction__c,
                                                    Shipment_total_amount__c,
                                                    RrturnPro_total_amount__c,
                                                    Total_Invoiced_Procount__c,
                                                    InvoiceNotPro_total_amount__c,
                                                    InvoiceNotPro_money__c,
                                                    Invoice_total_amount__c,
                                                    Billed_Status__c
                                                    FROM Consumable_order__c
                                                    WHERE Id = :deliveryId
                                                    order by Name ];
                for(Integer i = 0; i < invoiceOrderSelectedList.size(); i++){
                    invoiceOrderRecoeds.add(new InvoiceOrderInfo(invoiceOrderSelectedList[i]));
                }
            }
        }else{
            coc = [SELECT Id,Name,
                        Invoice_status__c,
                        Invoice_Date__c,
                        Order_ForDealerText__c,
                        Dealer_Info__c,
                        Order_ForDealer__c,
                        Order_ForDealer__r.Name,
                        Order_ForHospital__c,
                        Order_ForHospital__r.Name,
                        Order_date__c,
                        Billed_Status__c,
                        ShipmentAccount__c,
                        Order_Dealer_Info__c,
                        SummonsForDirction__c,
                        Order_ForCustomerText__c,
                        Invoice_Note__c,
                        Invoice_attachment__c,
                        Invoicedet_attachment__c,
                        Outbound_order__c
                    FROM Consumable_order__c
                    WHERE Id =:invoiceId
                    AND Order_type__c = '发票'];
            if(coc.Order_ForDealer__c != null){
                SecondDealer = coc.Order_ForDealer__c;
            }
            if(coc.Order_ForHospital__c != null){
                HospitalInfo = coc.Order_ForHospital__c;
                HospitalName = coc.Order_ForHospital__r.Name;
            }
            //到链接表中查找关联出库单
            List<Consumable_order_LinkTable__c> outOrderList = [SELECT Outboundorder_Code_link__c
                                        FROM Consumable_order_LinkTable__c
                                        WHERE Invoice_Code_link__c = :invoiceId];
            for(Integer i = 0; i < outOrderList.size(); i++){
                outOrderStringList.add(outOrderList[i].Outboundorder_Code_link__c);
            }
            //取得出库单信息
            invoiceOrderSelectedList = [SELECT Id,
                                                    Order_ForDealer__r.Name,
                                                    Order_ForHospital__r.Name,
                                                    Order_ForDealerText__c,
                                                    Name,Outbound_Date__c,
                                                    ShipmentAccount__c,
                                                    Shipment_total_amount__c,
                                                    RrturnPro_total_amount__c,
                                                    Total_Invoiced_Procount__c,
                                                    InvoiceNotPro_total_amount__c,
                                                    InvoiceNotPro_money__c,
                                                    Invoice_total_amount__c,
                                                    Billed_Status__c
                                                FROM Consumable_order__c
                                                WHERE Id in :outOrderStringList
                                                AND Order_Owner_WorkLocal__c =: userWorkLocation
                                                order by Name ];
            for(Integer i = 0; i < invoiceOrderSelectedList.size(); i++){
                outorderMoneytMap.put(invoiceOrderSelectedList[i].id, 0);
                invoiceOrderRecoeds.add(new InvoiceOrderInfo(invoiceOrderSelectedList[i]));
            }
            if(String.isNotBlank(deliveryId)){
                //发票关联出库单取得（出库单）
                isChange = true;
                invoiceOrderSelectedList = [SELECT Id,
                                                    Order_ForDealer__r.Name,
                                                    Order_ForHospital__r.Name,
                                                    Order_ForDealerText__c,
                                                    Name,Outbound_Date__c,
                                                    ShipmentAccount__c,
                                                    Shipment_total_amount__c,
                                                    RrturnPro_total_amount__c,
                                                    Total_Invoiced_Procount__c,
                                                    InvoiceNotPro_total_amount__c,
                                                    InvoiceNotPro_money__c,
                                                    Invoice_total_amount__c,
                                                    Billed_Status__c
                                                    FROM Consumable_order__c
                                                    WHERE Id = :deliveryId
                                                    AND Order_Owner_WorkLocal__c =: userWorkLocation
                                                    order by Name ];
                for(Integer i = 0; i < invoiceOrderSelectedList.size(); i++){
                    if(!outorderMoneytMap.containsKey(invoiceOrderSelectedList[i].Id)){
                        invoiceOrderRecoeds.add(new InvoiceOrderInfo(invoiceOrderSelectedList[i]));
                        invoiceOrderRecoedschange.add(new InvoiceOrderInfo(invoiceOrderSelectedList[i]));
                    }
                }
            }
            //发票明细一览
            List<Consumable_Orderdetails__c> countDel = [SELECT Id,
                                                            Consumable_ZS_order__c,
                                                            Name,
                                                            Consumable_order__c,
                                                            Invoicedet1_OD_link__c,
                                                            Invoicedet1_OD_link__r.Name,
                                                            Consumable_order__r.Name,
                                                            Product_OutDate__c,
                                                            Asset_Model_No__c,
                                                            Invoice_Unitprice__c,
                                                            Delivery_List_RMB__c,
                                                            Invoiced_Procount__c,
                                                            Invoiced_Count__c,
                                                            InvoicedProCost_RMB__c,
                                                            Box_Piece__c,
                                                            Invoice_Unit__c,
                                                            ProductPacking_list_manual__c
                                                        FROM Consumable_Orderdetails__c
                                                        WHERE Consumable_order__c = :invoiceId
                                                        order by Invoicedet1_OD_link__c];
            if(countDel.size()>0){
                for (Integer i = 0; i < countDel.size(); i++) {
                    outordercountMap.put(countDel[i].Invoicedet1_OD_link__c + countDel[i].Asset_Model_No__c,countDel[i]);
                    if(outorderMoneytMap.containsKey(countDel[i].Invoicedet1_OD_link__c)){
                        outorderMoneytMap.put(countDel[i].Invoicedet1_OD_link__c,outorderMoneytMap.get(countDel[i].Invoicedet1_OD_link__c) + countDel[i].InvoicedProCost_RMB__c);
                    }
                    invoiceOrderdetail1Recoeds.add(new InvoiceOrderInfo(countDel[i]));
                }
            }
            for (InvoiceOrderInfo ass : invoiceOrderRecoeds)  {
                if(outorderMoneytMap.containsKey(ass.esd.id)){
                    ass.needInvoiceCount = outorderMoneytMap.get(ass.esd.id);
                }
                ass.check = true;
            }
        }
        //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, 'outordercountMap +++++' + outordercountMap.size() + outordercountMap));
        if(SecondDealer==null||SecondDealer==''){
            provinceOpts.add(new SelectOption('', '-无-'));
            for(Integer i = 0; i < Dealerelationship.size(); i++){
                provinceOpts.add(new SelectOption(Dealerelationship[i].Dealer_subordinate__c, Dealerelationship[i].Dealer_subordinate__r.Name));
            }
        }else{
            provinceOpts.add(new SelectOption('', '-无-'));
            for(Integer i = 0; i < Dealerelationship.size(); i++){
                if(Dealerelationship[i].Dealer_subordinate__r.Name == SecondDealer){
                    provinceOpts.add(new SelectOption(Dealerelationship[i].Dealer_subordinate__c, SecondDealer));
                }
            }
            for(Integer i = 0; i < Dealerelationship.size(); i++){
                if(Dealerelationship[i].Dealer_subordinate__r.Name != SecondDealer){
                    provinceOpts.add(new SelectOption(Dealerelationship[i].Dealer_subordinate__c, Dealerelationship[i].Dealer_subordinate__r.Name));
                }
            }
        }

        /*if(HospitalInfo==null||HospitalInfo==''){
            orderForHospitalOpts.add(new SelectOption('', '-无-'));
            for(Integer i = 0; i < AgencyHospitalLink.size(); i++){
                orderForHospitalOpts.add(new SelectOption(AgencyHospitalLink[i].Hospital__c, AgencyHospitalLink[i].Hospital__r.Name));
            }
        }else{
            orderForHospitalOpts.add(new SelectOption('', '-无-'));
            for(Integer i = 0; i < AgencyHospitalLink.size(); i++){
                if(AgencyHospitalLink[i].Hospital__c == HospitalInfo){
                    orderForHospitalOpts.add(new SelectOption(AgencyHospitalLink[i].Hospital__c, AgencyHospitalLink[i].Hospital__r.Name));
                }
            }
            for(Integer i = 0; i < AgencyHospitalLink.size(); i++){
                if(AgencyHospitalLink[i].Hospital__c != HospitalInfo){
                    orderForHospitalOpts.add(new SelectOption(AgencyHospitalLink[i].Hospital__c, AgencyHospitalLink[i].Hospital__r.Name));
                }
            }
        }*/



        Map<String,String> consumableaccessoriesMap = new Map<String,String>();
        Map<String,String> invorceOrderIdMap = new Map<String,String>();
        List<Consumable_accessories_invoice__c> consumableaccessories =[SELECT Id, Name,Attachment_ID__c,Accessories_type__c FROM Consumable_accessories_invoice__c WHERE  Invoice_code__c =:invoiceId  ];
        if(consumableaccessories.size()>0){
            for (Integer i = 0; i < consumableaccessories.size(); i++) {
                consumableaccessoriesMap.put(consumableaccessories[i].Attachment_ID__c,consumableaccessories[i].Accessories_type__c);
                invorceOrderIdMap.put(consumableaccessories[i].Attachment_ID__c,consumableaccessories[i].Id);
            }
        }

        List<Attachment> attachmentinfo =[SELECT Id, Name,OwnerId,CreatedDate FROM Attachment WHERE  parentid =:invoiceId  ];
        if(attachmentinfo.size()>0){
            for (Integer i = 0; i < attachmentinfo.size(); i++) {
                attachmentRecoeds.add(new InvoiceOrderInfo(attachmentinfo[i]));
            }
        }
        for (InvoiceOrderInfo ass : attachmentRecoeds)  {
            if(consumableaccessoriesMap.containsKey(ass.attach.Id)){
                ass.mailSelectOptsin = consumableaccessoriesMap.get(ass.attach.Id);
                ass.invoiceOrderId = invorceOrderIdMap.get(ass.attach.Id);
            }
        }
        //nvoiceorderremind();
        //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, shipmentAccount + '请先打印指示单！'));
    }

    // 检索(未开发票出库单)
    public void InvoiceorderSearch() {
        Map<String,String> invoiceOrderMap = new Map<String,String>();
        String msoql ='';
        List<InvoiceOrderInfo> invoiceOrderdetailMid = new List<InvoiceOrderInfo>();
        if(String.isBlank(invoiceId)){
            msoql = makeSoql();
        }else{
            msoql = makeSoqlInit();
        }
        //String msoql = makeSoql();
        invoiceOrderList = Database.query(msoql);
        for (InvoiceOrderInfo ass : invoiceOrderRecoeds)  {
            if(ass.check == true){
                invoiceOrderdetailMid.add(ass);
                invoiceOrderMap.put(ass.esd.Name,ass.esd.Name);
            }
        }
        invoiceOrderRecoeds = new List<InvoiceOrderInfo>();
        invoiceOrderRecoeds.addAll(invoiceOrderdetailMid);
        for(Integer i = 0; i < invoiceOrderList.size(); i++){
            if(invoiceOrderMap.containsKey(invoiceOrderList[i].Name)){
            }else{
                invoiceOrderRecoeds.add(new InvoiceOrderInfo(invoiceOrderList[i]));
                invoiceOrderMap.put(invoiceOrderList[i].Name, invoiceOrderList[i].Name);
            }
        }
    }

    public void nvoiceorderremind() {
        List<String> invoiceOrderAccountList = new List<String>();
        for (InvoiceOrderInfo ass : invoiceOrderRecoeds)  {
            if(ass.check == true && ass.esd.ShipmentAccount__c != shipmentAccount){
                invoiceOrderAccountList.add(ass.esd.Name);
            }
        }
        if(invoiceOrderAccountList.size() > 0 ){
            orderRemind = '出库单'+ invoiceOrderAccountList + '客户名与发票客户名不一致！';
            ApexPages.addmessage(new ApexPages.message(ApexPages.severity.WARNING, orderRemind));
        }else{
            orderRemind = '';
            //return '';
        }
    }
    // 保存附件
    public PageReference saveAttachment() {
        Consumable_accessories_invoice__c attachmentdetails = new Consumable_accessories_invoice__c();
        for (InvoiceOrderInfo ass : AttachmentRecoeds)  {
            if(!String.isBlank(ass.mailSelectOptsin)){
                attachmentdetails.Id = ass.invoiceOrderId;
                attachmentdetails.Attachment_ID__c = ass.attach.Id;
                attachmentdetails.Accessories_type__c = ass.mailSelectOptsin;
                if(String.isBlank(ass.invoiceOrderId)){
                    attachmentdetails.Invoice_code__c = invoiceId;
                }
                upsert attachmentdetails;
            }
        }
        return UnabletoEdit();
    }
    // 保存按钮
    public PageReference save() {
        List<String> chukudanID = new List<String>();
        //  画面录入项判断
        //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, 'HospitalInfo +++++' + HospitalInfo + '-----' + HospitalName));
        //return null;
        if(coc.Name  ==''||coc.Name  == null){
            coc.Name.addError('请录入发票号。');
            return null;
        }
        if(coc.Invoice_Date__c  == null){
            coc.Invoice_Date__c.addError('请录入发票日期。');
            return null;
        }
        //CHAN-BSS5SQ    update by rentongxiao 2020-08-26  start

        /*if(String.isBlank(HospitalInfo) && SecondDealer  == null && coc.Order_ForDealerText__c == null){
            coc.addError('必须输入客户名或者经销商。');
            return null;
        }*/
        if(String.isBlank(HospitalInfo) && SecondDealer  == null){
            coc.addError('必须输入客户名或者二级经销商。');
            return null;
        }
        /*if(String.isBlank(HospitalInfo) && SecondDealer  != null && coc.Order_ForDealerText__c != null){
            coc.Order_ForDealerText__c.addError('请输入二级经销商或者经销商（录入）。');
            return null;
        }*/
        //CHAN-BSS5SQ    update by rentongxiao 2020-08-26  start
/*        if(HospitalInfo  !=null && HospitalInfo  !='' && SecondDealer  != null && coc.Order_ForDealerText__c != null){
            coc.addError('请输入客户名、二级经销商和经销商（录入）只可输入一个。');
            return null;
        }
*/
        if (HospitalInfo != null && HospitalInfo != '' && SecondDealer != null) {
            coc.addError('请输入客户名、二级经销商只可输入一个。');
            
        }
/*        if(HospitalInfo  !=null && HospitalInfo  !='' && (SecondDealer  != null || coc.Order_ForDealerText__c != null)){
            coc.addError('请输入客户名、二级经销商和经销商（录入）只可输入一个。');
            return null;
        }*/
        //CHAN-BSS5SQ    update by rentongxiao 2020-08-26   end
        if(HospitalInfo  !=null && HospitalInfo  !=''){
            if(coc.Order_ForCustomerText__c ==null){
                coc.Order_ForCustomerText__c.addError('请输入科室。');
                return null;
            }
        }else{
            if(coc.Order_ForCustomerText__c !=null){
                coc.Order_ForCustomerText__c.addError('不需要输入科室。');
                return null;
            }
        }
        //update  by rentx 2021-02-24 CHAN-BYH9PK start
        //因为之前默认 医院 二级经销商 经销商录入只能出入一个值,所以不会出错,但是现在的情况是经销商有值 经销商录入也有值 所以会报错,因此修改 shipmentAccountString 只能存放一个值即可
        String shipmentAccountString ='';
        // String a = HospitalInfo == null? '' : HospitalInfo;
        // String b = SecondDealer == null? '' : SecondDealer;
        // String c = coc.Order_ForDealerText__c == null? '' : coc.Order_ForDealerText__c;
        // shipmentAccountString = a + b + c;
        if (HospitalInfo != null ) {
            shipmentAccountString = HospitalInfo;
        }else if (SecondDealer != null) {
            shipmentAccountString = SecondDealer;
        }else {
            shipmentAccountString = coc.Order_ForDealerText__c == null? '' : coc.Order_ForDealerText__c;
        }
        //update by rentx 2021-02-24 CHAN-BYH9PK end

        Integer x = 0;
        List<String> invoiceOrderAccountList = new List<String>();
        for (InvoiceOrderInfo ass : invoiceOrderRecoeds)  {
            if(String.isBlank(deliveryId)){
                if(ass.check == true){
                    x++;
                    System.debug(shipmentAccountString);
                    if(HospitalInfo != null && HospitalInfo  !=''){
                        if(ass.esd.Order_ForHospital__c != shipmentAccountString){
                            invoiceOrderAccountList.add(ass.esd.Name);
                        }
                    }
                    if(SecondDealer != null){
                        if(ass.esd.Order_ForDealer__c != shipmentAccountString && ass.esd.Order_ForDealerText__c != shipmentAccountString){
                            //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, shipmentAccountString  + ass.esd.Order_ForDealer__c + ass.esd.Order_ForDealerText__c));
                            invoiceOrderAccountList.add(ass.esd.Name);
                        }
                    }
                    //update by rentx 2021-2-24 CHAN-BYH9PK start
                    // if(coc.Order_ForDealerText__c != null){
                    if(coc.Order_ForDealerText__c != null && (HospitalInfo == null || HospitalInfo == '' )){
                    //update by rentx 2021-2-24 CHAN-BYH9PK end
                        if((ass.esd.Order_ForDealerText__c != null || ass.esd.Order_ForDealerText__c != '') && ass.esd.ShipmentAccount__c != shipmentAccountString){
                            invoiceOrderAccountList.add(ass.esd.Name);
                        }
                    }
                }
            }else{
                if(HospitalInfo != null && HospitalInfo  !=''){
                    System.debug('++++++++++++' + ass.esd.Order_ForHospital__c + '   '+shipmentAccountString);
                    if(ass.esd.Order_ForHospital__c != shipmentAccountString){
                        invoiceOrderAccountList.add(ass.esd.Name);
                    }
                }
                if(SecondDealer != null){
                    if(ass.esd.Order_ForDealer__c != shipmentAccountString){
                        invoiceOrderAccountList.add(ass.esd.Name);
                    }
                }
                //update by rentx 2021-2-24 CHAN-BYH9PK start
                // if(coc.Order_ForDealerText__c != null){
                if(coc.Order_ForDealerText__c != null && (HospitalInfo == null || HospitalInfo == '' )){
                //update by rentx 2021-2-24 CHAN-BYH9PK end
                    if((ass.esd.Order_ForDealerText__c != null || ass.esd.Order_ForDealerText__c != '') && ass.esd.ShipmentAccount__c != shipmentAccountString){
                        invoiceOrderAccountList.add(ass.esd.Name);
                    }
                }
            }
        }
        // invoiceOrderAccountList.add('12345');
        if(invoiceOrderAccountList.size() > 0 ){
            orderRemind = invoiceOrderAccountList + '出库单客户名与发票客户名不一致！';
            coc.addError(invoiceOrderAccountList + '出库单客户名与发票客户名不一致！');
            return null;
        }else{
            orderRemind = '';
            //return '';
        }
        if(String.isBlank(deliveryId)){
            if(x < 1){
                coc.addError('请选择需要开发票的出库单！');
                return null;
            }
        }
        Consumable_order__c invoiceHead = new Consumable_order__c();
        List<String> outOrderIdList = New List<String>();
        List<Consumable_order_LinkTable__c> invoiceLinkList = New List<Consumable_order_LinkTable__c>();
        Map<String,String> insertDetMap = new Map<String,String>();
        Map<String,String> deleteDetMap = new Map<String,String>();
        //新建发票时
        Savepoint sp = Database.setSavepoint();
        try{
            if(String.isBlank(invoiceId)){
                invoiceHead.Name = coc.Name;
                if(coc.Invoice_status__c ==null||String.isBlank(coc.Invoice_status__c))coc.Invoice_status__c ='草案中';
                invoiceHead.Order_type__c = '发票';
                invoiceHead.Invoice_Date__c = coc.Invoice_Date__c;
                invoiceHead.Dealer_Info__c = accountid;
                invoiceHead.Invoice_Note__c = coc.Invoice_Note__c;
                invoiceHead.Invoice_status__c = '草案中';
                invoiceHead.Order_ProType__c = agencyProType;
                invoiceHead.Order_ForCustomerText__c = coc.Order_ForCustomerText__c;
                if(deliveryId != null){
                    invoiceHead.Outbound_order__c = deliveryId;
                }
                invoiceHead.RecordTypeid = System.Label.RT_ConOrder_Invoice;
                if(SecondDealer==null){
                    if(HospitalInfo != null && HospitalInfo  !=''){
                        invoiceHead.Order_ForHospital__c = HospitalInfo;
                    }
                }else {
                    invoiceHead.Order_ForDealer__c = SecondDealer;
                }
                invoiceHead.Order_ForDealerText__c = coc.Order_ForDealerText__c;

                insert invoiceHead;

                invoiceId = invoiceHead.Id ;
                List<Consumable_order__c> cocinfo = New List<Consumable_order__c>();
                cocinfo = [SELECT Id,Name,
                                Invoice_status__c,
                                Invoice_Date__c,
                                Order_ForDealerText__c,
                                Dealer_Info__c,
                                Order_ForDealer__c,
                                Order_ForDealer__r.Name,
                                Order_ForHospital__c,
                                Order_date__c,
                                Billed_Status__c,
                                ShipmentAccount__c,
                                Order_Dealer_Info__c,
                                SummonsForDirction__c,
                                Order_ForCustomerText__c,
                                Invoice_Note__c,
                                Invoice_attachment__c,
                                Invoicedet_attachment__c,
                                Outbound_order__c
                            FROM Consumable_order__c
                            WHERE Id =:invoiceId];
                if (cocinfo.size()>0){
                    invoiceHead = cocinfo[0];
                }
                if(!String.isBlank(deliveryId)){
                    for (InvoiceOrderInfo ass : invoiceOrderRecoeds)  {
                        chukudanID.add(ass.esd.Id);
                        insertDetMap.put(ass.esd.Id,invoiceHead.Id);
                    }
                }else{
                    for (InvoiceOrderInfo ass : invoiceOrderRecoeds)  {
                        if(!String.isBlank(deliveryId)){
                            chukudanID.add(ass.esd.Id);
                            insertDetMap.put(ass.esd.Id,invoiceHead.Id);
                        }else {
                            if(ass.check == true){
                                chukudanID.add(ass.esd.Id);
                                insertDetMap.put(ass.esd.Id,invoiceHead.Id);
                            }else{
                                //deleteDetMap.put(ass.esd.Id,invoiceHead.Id);
                            }
                        }
                    }
                }
                //新建发票明细1
                if(chukudanID.size() > 0 ){
                    newinvoicedetails1(chukudanID);
                }
                //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, 'deleteDetMap +++++' + deleteDetMap.size()));
                //return null;
                if(insertDetMap.size() > 0 ){
                    for (String field : insertDetMap.keySet()) {
                        List<Consumable_order_LinkTable__c> existLinkinfo = [SELECT Id FROM Consumable_order_LinkTable__c
                                                               WHERE Outboundorder_Code_link__c = :field
                                                               AND Invoice_Code_link__c = :insertDetMap.get(field)];
                        if(existLinkinfo.size() < 1){
                            Consumable_order_LinkTable__c invoiceLink = new Consumable_order_LinkTable__c();
                            invoiceLink.Name = field + insertDetMap.get(field);
                            invoiceLink.Outboundorder_Code_link__c = field;
                            invoiceLink.Invoice_Code_link__c = insertDetMap.get(field);
                            invoiceLinkList.add(invoiceLink);
                        }
                    }
                    upsert invoiceLinkList;
                }
                /*if(deleteDetMap.size() > 0 ){
                    List<Consumable_order_LinkTable__c> invoiceLinkdetList = New List<Consumable_order_LinkTable__c>();
                    for (String field : deleteDetMap.keySet()) {
                        List<Consumable_order_LinkTable__c> existLinkinfo = [SELECT Id FROM Consumable_order_LinkTable__c
                                                               WHERE Outboundorder_Code_link__c = :field
                                                               AND Invoice_Code_link__c = :deleteDetMap.get(field)];
                        if(existLinkinfo.size() > 0){
                            Consumable_order_LinkTable__c invoiceLink = new Consumable_order_LinkTable__c();
                            invoiceLink.Id = existLinkinfo[0].Id;
                            invoiceLinkdetList.add(invoiceLink);
                        }
                    }
                    delete invoiceLinkdetList;
                }*/
            }
            //CHAN-BSS5SQ    update by rentongxiao 2020-09-04   start
            else if (String.isNotBlank(reopen) && reopen.equals('isreopen') && String.isNotBlank(invoiceId)) {
                //如果是 作废重开
                //1. 设置新发票信息
                invoiceHead.Name = coc.Name;
                invoiceHead.Order_type__c = '发票';
                invoiceHead.Invoice_Date__c = coc.Invoice_Date__c;
                invoiceHead.Dealer_Info__c = accountid;
                invoiceHead.Invoice_Note__c = coc.Invoice_Note__c;
                invoiceHead.Invoice_status__c = '草案中';
                invoiceHead.Order_ProType__c = agencyProType;
                invoiceHead.Order_ForCustomerText__c = coc.Order_ForCustomerText__c;
                if(deliveryId != null){
                    invoiceHead.Outbound_order__c = deliveryId;
                }
                invoiceHead.RecordTypeid = System.Label.RT_ConOrder_Invoice;
                if(SecondDealer==null){
                    if(HospitalInfo != null && HospitalInfo  !=''){
                        invoiceHead.Order_ForHospital__c = HospitalInfo;
                    }
                }else {
                    invoiceHead.Order_ForDealer__c = SecondDealer;
                }
                invoiceHead.Order_ForDealerText__c = coc.Order_ForDealerText__c;
                insert invoiceHead;

                List<String> updateChukudanId = new List<String>();
                //获取原发票相关联的链接表信息
                List<Consumable_order_LinkTable__c> tLinkList = [SELECT Outboundorder_Code_link__c
                                        FROM Consumable_order_LinkTable__c
                                        WHERE Invoice_Code_link__c = :invoiceId];

                for(Consumable_order_LinkTable__c colc : tLinkList){
                    colc.Invoice_Code_link__c = invoiceHead.Id;
                    updateChukudanId.add(colc.Outboundorder_Code_link__c);
                }
                update tLinkList;
                //更新发票明细信息
                //获取出库单,设置关联关系
                //获取出库单明细信息,因为出库单信息和出库单明细信息是关联的,所有只需要回滚出库单明细信息即可

                Map<String,Consumable_Orderdetails__c> tempCocMap = new Map<String,Consumable_Orderdetails__c>();
                List<Consumable_Orderdetails__c> tempCountList = [
                SELECT Id,Consumable_order__c,Asset_Model_No__c,InvoicedProCost_RMB__c, Invoicedet1_OD_link__c ,InvoicedProduct_RMB__c,Invoiced_Procount__c,Invoiced_BoxCount__c,Invoice_Unit__c 
                FROM Consumable_Orderdetails__c WHERE Consumable_order__c = :invoiceId];
                for(Consumable_Orderdetails__c cocTemp : tempCountList){
                    cocTemp.Consumable_order__c = invoiceHead.Id;
                    tempCocMap.put(cocTemp.Invoicedet1_OD_link__c +cocTemp.Asset_Model_No__c, cocTemp);
                }
                update tempCountList;
                List<Consumable_Orderdetails__c> updateFromList = [
                                    SELECT 
                                        Id,
                                        Consumable_order__c,
                                        RrturnPro_count__c,
                                        Delivery_List_RMB__c,
                                        InvoicedProCost_RMB__c,
                                        Invoiced_Procount__c,
                                        Invoice_Unitprice__c,
                                        Box_Piece__c,
                                        Invoice_Unit__c,
                                        Consumable_order__r.Invoice_total_amount__c,
                                        ProductPacking_list_manual__c,
                                        InvoicedProduct_RMB__c,
                                        Invoiced_BoxCount__c,
                                        Shipment_amount__c,
                                        Asset_Model_No__c 
                                    FROM Consumable_Orderdetails__c
                                    WHERE Consumable_order__c in : updateChukudanId
                ];
                for(Consumable_Orderdetails__c corderc : updateFromList){
                    String tempStr = corderc.Consumable_order__c + corderc.Asset_Model_No__c;
                    if (tempCocMap.get(tempStr) != null ) {
                        //设置已发票金额 出库单的已发票金额 - 发票的发票金额
                        corderc.InvoicedProCost_RMB__c = corderc.InvoicedProCost_RMB__c - tempCocMap.get(tempStr).InvoicedProduct_RMB__c;
                        //设置已发票数量  出库单的已发票数量 - 发票的发票数量(盒)
                        corderc.Invoiced_Procount__c = corderc.Invoiced_Procount__c - tempCocMap.get(tempStr).Invoiced_BoxCount__c;
                        //设置发票单价
                        if (corderc.Box_Piece__c == '盒' && corderc.Invoice_Unit__c == '个') {
                            corderc.Invoice_Unitprice__c = corderc.Delivery_List_RMB__c / corderc.ProductPacking_list_manual__c;
                        }else{
                            corderc.Invoice_Unitprice__c = corderc.Delivery_List_RMB__c;
                        }
                    }
                    
                }

                Consumable_order__c tempcoc = new Consumable_order__c();
                tempcoc.Id = invoiceId;
                delete tempcoc;
                invoiceId = invoiceHead.Id;
                update updateFromList;
                //--------------------------------------------------------------------------
                for (InvoiceOrderInfo ass : invoiceOrderRecoeds)  {
                        if(ass.check == true){
                            insertDetMap.put(ass.esd.Id,invoiceHead.Id);
                        }else{
                            outOrderIdList.add(ass.esd.Id);
                            deleteDetMap.put(ass.esd.Id,invoiceHead.Id);
                        }
                    }
                    if(outOrderIdList.size() > 0){
                        getdefaultMapinfo(outOrderIdList);
                    }
                    //被选中的出库单集合
                    if(insertDetMap.size() > 0 ){
                        List<Consumable_order_LinkTable__c> existLinkinfo = 
                        [SELECT Id,Invoice_Code_link__c,Outboundorder_Code_link__c 
                        FROM Consumable_order_LinkTable__c WHERE Outboundorder_Code_link__c in :insertDetMap.keySet()
                        AND Invoice_Code_link__c = :invoiceHead.Id];
                        //存在没有与发票建立关联关系的出库单
                            List<String> templist2 = new List<String>();
                            for(Consumable_order_LinkTable__c colc : existLinkinfo){
                                templist2.add(colc.Outboundorder_Code_link__c);
                            }
                            //获取该出库单
                            for(String field : insertDetMap.keySet()){
                                if (!templist2.contains(field)) {
                                    //该出库单不存在与链接表中,新建链接
                                    chukudanID.add(field);
                                    Consumable_order_LinkTable__c invoiceLink = new Consumable_order_LinkTable__c();
                                    invoiceLink.Name = field + insertDetMap.get(field);
                                    invoiceLink.Outboundorder_Code_link__c = field;
                                    invoiceLink.Invoice_Code_link__c = insertDetMap.get(field);
                                    invoiceLinkList.add(invoiceLink);
                                }
                            }
                            upsert invoiceLinkList;
                        
                    }
                    //删除出库单链接表
                    if(deleteDetMap.size() > 0 ){

                        List<Consumable_order_LinkTable__c> invoiceLinkdetList = New List<Consumable_order_LinkTable__c>();
                        deleteOutboundorder(deleteDetMap,invoiceHead.Id);
                        List<Consumable_order_LinkTable__c> existLinkinfo = [SELECT Id,Outboundorder_Code_link__c,Invoice_Code_link__c FROM Consumable_order_LinkTable__c
                                                                   WHERE Outboundorder_Code_link__c in :deleteDetMap.keySet()
                                                                   AND Invoice_Code_link__c = :invoiceHead.Id];
                        for(Consumable_order_LinkTable__c colctemp : existLinkinfo){
                            if (deleteDetMap.get(colctemp.Outboundorder_Code_link__c) == colctemp.Invoice_Code_link__c) {
                                //存在与该发票关联的出库单 
                                invoiceLinkdetList.add(colctemp);
                            }
                        }
                        delete invoiceLinkdetList;
                    }
                    //新建发票明细1
                    if(chukudanID.size() > 0 ){
                        newinvoicedetails1(chukudanID);
                    }
            }
            //CHAN-BSS5SQ    update by rentongxiao 2020-09-04   end
            //编辑后保存
            else{
                List<Consumable_order__c> cocinfo = New List<Consumable_order__c>();
                cocinfo = [SELECT Id,Name,
                                Invoice_status__c,
                                Invoice_Date__c,
                                Order_ForDealerText__c,
                                Dealer_Info__c,
                                Order_ForDealer__c,
                                Order_ForDealer__r.Name,
                                Order_ForHospital__c,
                                Order_date__c,
                                Billed_Status__c,
                                ShipmentAccount__c,
                                Order_Dealer_Info__c,
                                SummonsForDirction__c,
                                Order_ForCustomerText__c,
                                Invoice_Note__c,
                                Invoice_attachment__c,
                                Invoicedet_attachment__c,
                                Outbound_order__c
                            FROM Consumable_order__c
                            WHERE Id =:invoiceId];
                if (cocinfo.size()>0){
                    invoiceHead = cocinfo[0];
                }
                if(String.isNotBlank(deliveryId)){
                    for (InvoiceOrderInfo ass : invoiceOrderRecoedschange)  {
                        insertDetMap.put(ass.esd.Id,invoiceHead.Id);
                    }

                    //换货单产品数量
                    Map<String,Decimal> needchangeOrderProcountMap = new Map<String,Decimal>();
                    Map<String,Decimal> returnProcountMap = new Map<String,Decimal>();
                    Map<String,Decimal> changeOrderProcountMap = new Map<String,Decimal>();
                    List<Consumable_Orderdetails__c> detaliFromList = [
                                        SELECT Id,
                                            Name,
                                            Consumable_order__c,
                                            Asset_Model_No__c,
                                            Shipment_Count__c,
                                            RrturnPro_count__c,
                                            Delivery_List_RMB__c,
                                            InvoicedProCost_RMB__c,
                                            Invoiced_Procount__c,
                                            Invoiced_Count__c,
                                            Invoice_Unitprice__c,
                                            InvoiceProNot_count__c,
                                            Invoice_Unit__c,
                                            Box_Piece__c,
                                            Invoice_Cost_RMB__c
                                        FROM Consumable_Orderdetails__c
                                        WHERE Consumable_order__c = :deliveryId ];
                    for(Consumable_Orderdetails__c changeOD : detaliFromList){
                        needchangeOrderProcountMap.put(changeOD.Asset_Model_No__c, changeOD.Shipment_Count__c);
                    }
                    //发票返品信息
                    List<Consumable_Orderdetails__c> returnCountList = [
                                     SELECT Id,
                                            Name,
                                            Consumable_order__c,
                                            Asset_Model_No__c,
                                            Shipment_Count__c,
                                            RrturnPro_count__c,
                                            Delivery_List_RMB__c,
                                            InvoicedProCost_RMB__c,
                                            Invoiced_Procount__c,
                                            Invoiced_Count__c,
                                            Invoice_Unitprice__c,
                                            InvoiceProNot_count__c,
                                            Invoice_Cost_RMB__c,
                                            Invoice_Unit__c,
                                            Box_Piece__c
                                        FROM Consumable_Orderdetails__c
                                        where Consumable_order__c = :invoiceId];

                    for(Consumable_Orderdetails__c changeOD : returnCountList){
                        if(changeOD.RrturnPro_count__c > 0){
                            if(returnProcountMap.containsKey(changeOD.Asset_Model_No__c)){
                                returnProcountMap.put(changeOD.Asset_Model_No__c, returnProcountMap.get(changeOD.Asset_Model_No__c) + changeOD.RrturnPro_count__c);
                            }else{
                                returnProcountMap.put(changeOD.Asset_Model_No__c, changeOD.RrturnPro_count__c);
                            }
                        }
                    }

                    //已换货单出库数量信息
                    List<Consumable_Orderdetails__c> returnCount1List = [
                                     SELECT Id,
                                            Name,
                                            Consumable_order__c,
                                            Asset_Model_No__c,
                                            Shipment_Count__c,
                                            RrturnPro_count__c,
                                            Delivery_List_RMB__c,
                                            InvoicedProCost_RMB__c,
                                            Invoiced_Procount__c,
                                            Invoiced_Count__c,
                                            Invoice_Unitprice__c,
                                            InvoiceProNot_count__c,
                                            Invoice_Cost_RMB__c,
                                            Invoice_Unit__c,
                                            Box_Piece__c
                                        FROM Consumable_Orderdetails__c
                                        where Consumable_order__c in (SELECT Outboundorder_Code_link__c FROM Consumable_order_LinkTable__c
                                                                       WHERE Invoice_Code_link__c = :invoiceId)
                                        AND Consumable_order__r.Onchange_order__c = true
                                        AND Consumable_order__c != :deliveryId];
                    for(Consumable_Orderdetails__c changeOD : returnCount1List){
                        changeOrderProcountMap.put(changeOD.Asset_Model_No__c, changeOD.Shipment_Count__c);
                    }
                    outOrderchange(insertDetMap);
                }else{
                    invoiceHead.Name = coc.Name;
                    invoiceHead.Invoice_status__c = coc.Invoice_status__c;
                    invoiceHead.Invoice_Date__c = coc.Invoice_Date__c;
                    invoiceHead.Dealer_Info__c = accountid;
                    invoiceHead.Invoice_Note__c = coc.Invoice_Note__c;
                    invoiceHead.Invoice_status__c = '草案中';
                    invoiceHead.Order_ProType__c = agencyProType;
                    invoiceHead.Order_ForCustomerText__c = coc.Order_ForCustomerText__c;
                    //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, 'HospitalName +++++'   + HospitalName));
                    //return null;
                    if(HospitalName != null && HospitalName  !=''){
                        if(HospitalInfo != null && HospitalInfo  !=''){
                            invoiceHead.Order_ForHospital__c = HospitalInfo;
                        }
                    }else{
                        invoiceHead.Order_ForHospital__c = null;
                    }
                    invoiceHead.Order_ForDealer__c = SecondDealer;
                    invoiceHead.Order_ForDealerText__c = coc.Order_ForDealerText__c;
                    update invoiceHead;
                    for (InvoiceOrderInfo ass : invoiceOrderRecoeds)  {
                        if(ass.check == true){
                            insertDetMap.put(ass.esd.Id,invoiceHead.Id);
                        }else{
                            outOrderIdList.add(ass.esd.Id);
                            deleteDetMap.put(ass.esd.Id,invoiceHead.Id);
                        }
                    }
                    if(outOrderIdList.size() > 0){
                        getdefaultMapinfo(outOrderIdList);
                    }
                    //CHAN-BSS5SQ    update by rentongxiao 2020-09-08  start
                    //被选中的出库单集合
                    if(insertDetMap.size() > 0 ){
                        List<Consumable_order_LinkTable__c> existLinkinfo = 
                        [SELECT Id,Invoice_Code_link__c,Outboundorder_Code_link__c 
                        FROM Consumable_order_LinkTable__c WHERE Outboundorder_Code_link__c in :insertDetMap.keySet()
                        AND Invoice_Code_link__c = :invoiceHead.Id];
                        //存在没有与发票建立关联关系的出库单
                            List<String> templist2 = new List<String>();
                            for(Consumable_order_LinkTable__c colc : existLinkinfo){
                                templist2.add(colc.Outboundorder_Code_link__c);
                            }
                            //获取该出库单
                            for(String field : insertDetMap.keySet()){
                                if (!templist2.contains(field)) {
                                    //该出库单不存在与链接表中,新建链接
                                    chukudanID.add(field);
                                    Consumable_order_LinkTable__c invoiceLink = new Consumable_order_LinkTable__c();
                                    invoiceLink.Name = field + insertDetMap.get(field);
                                    invoiceLink.Outboundorder_Code_link__c = field;
                                    invoiceLink.Invoice_Code_link__c = insertDetMap.get(field);
                                    invoiceLinkList.add(invoiceLink);
                                }
                            }
                            upsert invoiceLinkList;
                        
                    }
                    /*if(insertDetMap.size() > 0 ){
                        for (String field : insertDetMap.keySet()) {
                            List<Consumable_order_LinkTable__c> existLinkinfo = [SELECT Id FROM Consumable_order_LinkTable__c
                                                                   WHERE Outboundorder_Code_link__c = :field
                                                                   AND Invoice_Code_link__c = :insertDetMap.get(field)];
                            if(existLinkinfo.size() < 1){
                                chukudanID.add(field);
                                Consumable_order_LinkTable__c invoiceLink = new Consumable_order_LinkTable__c();
                                invoiceLink.Name = field + insertDetMap.get(field);
                                invoiceLink.Outboundorder_Code_link__c = field;
                                invoiceLink.Invoice_Code_link__c = insertDetMap.get(field);
                                invoiceLinkList.add(invoiceLink);
                            }
                        }
                        upsert invoiceLinkList;
                    }*/
                    //删除出库单链接表
                    /*if(deleteDetMap.size() > 0 ){
                        List<Consumable_order_LinkTable__c> invoiceLinkdetList = New List<Consumable_order_LinkTable__c>();
                        deleteOutboundorder(deleteDetMap,invoiceHead.Id);
                        for (String field : deleteDetMap.keySet()) {
                            List<Consumable_order_LinkTable__c> existLinkinfo = [SELECT Id FROM Consumable_order_LinkTable__c
                                                                   WHERE Outboundorder_Code_link__c = :field
                                                                   AND Invoice_Code_link__c = :deleteDetMap.get(field)];
                            if(existLinkinfo.size() > 0){
                                Consumable_order_LinkTable__c invoiceLink = new Consumable_order_LinkTable__c();
                                invoiceLink.Id = existLinkinfo[0].Id;
                                invoiceLinkdetList.add(invoiceLink);
                            }
                        }
                        delete invoiceLinkdetList;
                    }*/
                    //删除出库单链接表
                    if(deleteDetMap.size() > 0 ){

                        List<Consumable_order_LinkTable__c> invoiceLinkdetList = New List<Consumable_order_LinkTable__c>();
                        deleteOutboundorder(deleteDetMap,invoiceHead.Id);
                        List<Consumable_order_LinkTable__c> existLinkinfo = [SELECT Id,Outboundorder_Code_link__c,Invoice_Code_link__c FROM Consumable_order_LinkTable__c
                                                                   WHERE Outboundorder_Code_link__c in :deleteDetMap.keySet()
                                                                   AND Invoice_Code_link__c = :invoiceHead.Id];
                        for(Consumable_order_LinkTable__c colctemp : existLinkinfo){
                            if (deleteDetMap.get(colctemp.Outboundorder_Code_link__c) == colctemp.Invoice_Code_link__c) {
                                //存在与该发票关联的出库单 
                                invoiceLinkdetList.add(colctemp);
                            }
                        }
                        delete invoiceLinkdetList;
                    }
                    //CHAN-BSS5SQ    update by rentongxiao 2020-09-08  end
                    //新建发票明细1
                    if(chukudanID.size() > 0 ){
                        newinvoicedetails1(chukudanID);
                    }
                }
            }
        }catch (Exception ex) {
            Database.rollback(sp);
            ApexPages.addMessages(ex);
            return null;
        }
        return UnabletoEdit();
    }

    //换货单链接表 发票明细2做成
    public void outOrderchange(Map<String,String> insertDetMap){
        List<string> chukudanID = new List<string>();
        List<Consumable_order_LinkTable__c> invoiceLinkList = New List<Consumable_order_LinkTable__c>();
        Consumable_order__c p = new Consumable_order__c();
        if(insertDetMap.size() > 0 ){
            for (String field : insertDetMap.keySet()) {
                List<Consumable_order_LinkTable__c> existLinkinfo = [SELECT Id FROM Consumable_order_LinkTable__c
                                                       WHERE Outboundorder_Code_link__c = :field];
                if(existLinkinfo.size() > 0){
                    delete existLinkinfo;
                }
                chukudanID.add(field);
                Consumable_order_LinkTable__c invoiceLink = new Consumable_order_LinkTable__c();
                invoiceLink.Name = field + insertDetMap.get(field);
                invoiceLink.Outboundorder_Code_link__c = field;
                invoiceLink.Invoice_Code_link__c = insertDetMap.get(field);
                invoiceLinkList.add(invoiceLink);
                p.Id = field;
                p.ConInvoice_Code__c = insertDetMap.get(field);
                p.Onchange_order__c = true;
                update p;
            }
            insert invoiceLinkList;
        }
        //换货出库单明细1更新
        List<Consumable_Orderdetails__c> detaliFrom1List = [
                            SELECT Id,
                                Name,
                                Consumable_order__c,
                                Asset_Model_No__c,
                                Consumable_Product__r.Asset_Model_No__c,
                                Shipment_Count__c,
                                RrturnPro_count__c,
                                Delivery_List_RMB__c,
                                InvoicedProCost_RMB__c,
                                Invoiced_Procount__c,
                                Invoiced_Count__c,
                                Invoice_Unitprice__c,
                                InvoiceProNot_count__c,
                                Invoice_Cost_RMB__c,
                                Invoice_No__c,
                                Invoice_Unit__c,
                                Box_Piece__c,
                                Consumable_Sale_order__r.Name,
                                Consumable_Shipment_order__r.Name
                            FROM Consumable_Orderdetails__c
                            WHERE Consumable_order__c in : chukudanID];
        for(Consumable_Orderdetails__c changeOD : detaliFrom1List){
            changeOD.Invoiced_Procount__c = changeOD.Shipment_Count__c;
        }
        update detaliFrom1List;

        //换货出库单明细2更新
        /*List<Consumable_order_details2__c> detaliFromList = [
                            SELECT Id,
                                Name,
                                Consumable_order_minor__c,
                                Asset_Model_No__c,
                                Sterilization_limit__c,
                                Consumable_Product__r.Asset_Model_No__c,
                                Consumable_Count__c,
                                RrturnPro_count__c,
                                Delivery_List_RMB__c,
                                Invoice_No__c,
                                Invoice_Date__c,
                                Consumable_Sale_order__r.Name,
                                Consumable_Shipment_order__r.Name
                            FROM Consumable_order_details2__c
                            WHERE (Consumable_Sale_order__c in : chukudanID
                            or Consumable_Shipment_order__c in : chukudanID)];
        for(Consumable_order_details2__c changeOD : detaliFromList){
            changeOD.Invoice_No__c = invoiceId;
            changeOD.Invoice_Date__c = Date.today();
        }
        update detaliFromList;*/

    }

    //取得更新map初始化数据
    //获取 订单中产品的初始化 Map
    public void getdefaultMapinfo(List<String> orderIdList){
        List<Consumable_Orderdetails__c> existLinkinfo = new List<Consumable_Orderdetails__c>();
        existLinkinfo = [SELECT Id,Consumable_order__c,Consumable_product__c,Asset_Model_No__c
                        FROM Consumable_Orderdetails__c
                        WHERE Consumable_order__c in:orderIdList];
        for(Integer i = 0; i < existLinkinfo.size(); i++){
            ordermx1defaultMap.put(existLinkinfo[i].Consumable_order__c + existLinkinfo[i].Asset_Model_No__c,0);
        }
    }
    //删除发票明细1
    //CHAN-BSS5SQ    update by rentongxiao 2020-09-08  start
    /*public void deleteOutboundorder(Map<String,String> deleteMap){
        //删除发票明细1
        List<Consumable_Orderdetails__c> detInvoicedet1List = new List<Consumable_Orderdetails__c>();
        //删除发票的明细1（与出库单关联）
        for (String field : deleteMap.keySet()) {
            detInvoicedet1List = [SELECT Id,Consumable_Shipment_order__c,Consumable_Sale_order__c,Consumable_product__c,Asset_Model_No__c
                            FROM Consumable_Orderdetails__c
                            WHERE Consumable_order__c = :deleteMap.get(field)
                            AND Invoicedet1_OD_link__c = :field];
            delete detInvoicedet1List;
        }
    }*/
    public void deleteOutboundorder(Map<String,String> deleteMap,String value){
        //删除发票明细1
        List<Consumable_Orderdetails__c> detInvoicedet1List = 
        [SELECT Id,Consumable_Shipment_order__c,Consumable_Sale_order__c,Consumable_product__c,Asset_Model_No__c
                            FROM Consumable_Orderdetails__c
                            WHERE Consumable_order__c = :value
                            AND Invoicedet1_OD_link__c = :deleteMap.keySet()];
            delete detInvoicedet1List;
    }
    //CHAN-BSS5SQ    update by rentongxiao 2020-09-08  end

    public void newinvoicedetails1(List<String> chukudanID){
        //新规发票明细1
        List<Consumable_Orderdetails__c> invoiceorderList1 = New List<Consumable_Orderdetails__c>();
        //出库单明细更新
        List<Consumable_Orderdetails__c> outOrderList1 = New List<Consumable_Orderdetails__c>();
        List<Consumable_Orderdetails__c> detaliFromList = [
                            SELECT Id,
                                Name,
                                Consumable_order__c,
                                Asset_Model_No__c,
                                Consumable_Product__r.Asset_Model_No__c,
                                Shipment_Count__c,
                                RrturnPro_count__c,
                                Delivery_List_RMB__c,
                                InvoicedProCost_RMB__c,
                                Invoiced_Procount__c,
                                Invoiced_Count__c,
                                Invoice_Unitprice__c,
                                InvoiceProNot_count__c,
                                Invoice_Cost_RMB__c,
                                Invoice_No__c,
                                Consumable_Product__c,
                                Intra_Trade_List_RMB__c,
                                Dealer_Custom_Price__c,
                                Sum_of_money__c,
                                Box_Piece__c,
                                Used_date__c,
                                Send_date__c,
                                Invoice_Unit__c,
                                ProductPacking_list_manual__c
                            FROM Consumable_Orderdetails__c
                            WHERE Consumable_order__c in : chukudanID
                            AND InvoiceProNot_count__c > 0
        ];

        for(Integer i = 0; i < detaliFromList.size(); i++){
            Consumable_Orderdetails__c invoiceInsert1 = new Consumable_Orderdetails__c();
            //Consumable_Orderdetails__c orderUpdate1 = new Consumable_Orderdetails__c();
            //orderUpdate1.id = detaliFromList[i].Id;
            invoiceInsert1.Used_date__c = detaliFromList[i].Used_date__c;
            //invoiceInsert1.Asset_Model_No__c = detaliFromList[i].Asset_Model_No__c;
            invoiceInsert1.Send_date__c = detaliFromList[i].Send_date__c;
            String str = string.valueOf(i + 1);
            if(str.length() == 1){
                str = '0' + str;
            }
            invoiceInsert1.Name = coc.Name + '-' + detaliFromList[i].Name.substring(detaliFromList[i].Name.length() - 7,detaliFromList[i].Name.length());
            invoiceInsert1.Shipment_Count__c = detaliFromList[i].InvoiceProNot_count__c;
            invoiceInsert1.Consumable_Product__c = detaliFromList[i].Consumable_Product__c;
            invoiceInsert1.Intra_Trade_List_RMB__c = detaliFromList[i].Intra_Trade_List_RMB__c;
            invoiceInsert1.Delivery_List_RMB__c = detaliFromList[i].Delivery_List_RMB__c;
            invoiceInsert1.Dealer_Custom_Price__c = detaliFromList[i].Dealer_Custom_Price__c;
            invoiceInsert1.RecordTypeId = System.Label.RT_ConOrderDetail1_Invoice;
            
            if(detaliFromList[i].Box_Piece__c == '盒' && detaliFromList[i].Invoice_Unit__c == '个'){
                invoiceInsert1.Invoice_Unitprice__c = detaliFromList[i].Delivery_List_RMB__c/detaliFromList[i].ProductPacking_list_manual__c;
            }else{
                invoiceInsert1.Invoice_Unitprice__c = detaliFromList[i].Delivery_List_RMB__c;
            }
            invoiceInsert1.Box_Piece__c = detaliFromList[i].Box_Piece__c;
            invoiceInsert1.Invoice_Unit__c = detaliFromList[i].Box_Piece__c;
            //orderUpdate1.Invoice_Unitprice__c = detaliFromList[i].Delivery_List_RMB__c;
            if (detaliFromList[i].Invoiced_Procount__c == null) detaliFromList[i].Invoiced_Procount__c = 0;
            if (detaliFromList[i].RrturnPro_count__c == null) detaliFromList[i].RrturnPro_count__c = 0;
            //invoiceInsert1.Invoiced_Procount__c = detaliFromList[i].Invoiced_Procount__c;
            invoiceInsert1.Invoiced_Count__c = detaliFromList[i].InvoiceProNot_count__c;
            if (detaliFromList[i].InvoicedProCost_RMB__c == null) detaliFromList[i].InvoicedProCost_RMB__c = 0;
            invoiceInsert1.InvoicedProCost_RMB__c = invoiceInsert1.Invoiced_Count__c * invoiceInsert1.Delivery_List_RMB__c;
            //invoiceInsert1.Sum_of_money__c = invoiceInsert1.InvoicedProCost_RMB__c;
            invoiceInsert1.Consumable_order__c = invoiceId;
            //invoiceInsert1.Consumable_principal__c = invoiceId;
            invoiceInsert1.Invoicedet1_OD_link__c = detaliFromList[i].Consumable_order__c;
            invoiceorderList1.add(invoiceInsert1);
            //outOrderList1.add(orderUpdate1);
        }
        System.debug('invoiceorderList1 +++++' + invoiceorderList1.size());
        //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, 'invoiceorderList1 +++++' + invoiceorderList1.size()));
        //return ;
        Savepoint sp = Database.setSavepoint();
        if(invoiceorderList1.size() > 0){
            try {
                insert invoiceorderList1;
            }catch (Exception ex) {
                Database.rollback(sp);
                ApexPages.addMessages(ex);
            }
        }
    }


    //上传附件
    public PageReference FilesUpload(){
        PageReference ref = new Pagereference('/p/attach/NoteAttach?pid='+invoiceId+'&retURL=%2F' + '/ConInvoiceView?invoiceId=' +invoiceId);
        ref.setRedirect(true);
        return ref;
    }

    //排序
    public void SortLimited(){
        List<Id> orderIdList = new List<Id>();
        for (InvoiceOrderInfo ass : invoiceOrderRecoeds)  {
            orderIdList.add(ass.esd.Id);
        }
        if (this.sortKey == this.preSortKey) {
            // 方向が変わるのみ
            this.sortOrderAsc = !this.sortOrderAsc;
            this.sortOrder[Integer.valueOf(this.sortKey)] = (this.sortOrderAsc == true ? '↑' : '↓');
        } else {
            this.sortOrderAsc = true;
            this.sortOrder[Integer.valueOf(this.preSortKey)] = ' ';
            this.sortOrder[Integer.valueOf(this.sortKey)] = (this.sortOrderAsc == true ? '↑' : '↓');
        }

        this.preSortKey = this.sortKey;
        // 画面记录取得
        String soql = 'SELECT Id, Name,Outbound_Date__c,ShipmentAccount__c,Shipment_total_amount__c,RrturnPro_total_amount__c,Total_Invoiced_Procount__c,InvoiceNotPro_total_amount__c,InvoiceNotPro_money__c,Invoice_total_amount__c,Billed_Status__c,Order_ForHospital__c  FROM Consumable_order__c ';
        soql += ' WHERE Id in :orderIdList';
        soql += ' order by ' + this.orderby[Integer.valueOf(this.sortKey)];
        soql += ' ' + (this.sortOrderAsc == true ? 'asc nulls first' : 'desc nulls last');
        List<Consumable_order__c> queryList = Database.query(soql);
        invoiceOrderRecoeds = new List<InvoiceOrderInfo>();
        for(Integer i = 0; i < queryList.size(); i++){
            invoiceOrderRecoeds.add(new InvoiceOrderInfo(queryList[i]));
        }
        for (InvoiceOrderInfo ass : invoiceOrderRecoeds)  {
            if(outorderMoneytMap.containsKey(ass.esd.id)){
                ass.needInvoiceCount = outorderMoneytMap.get(ass.esd.id);
            }
        }
    }

    // 编辑按钮
    public PageReference setEditAble(){
        statusEdit = 'Redirect';
        PageReference ref = new Pagereference('/ConInvoiceView?invoiceId='+ invoiceId +'&KeyWords='+statusEdit);
        ref.setRedirect(true);
        return ref;
    }

    // 返回不可编辑状态
    public PageReference UnabletoEdit(){
        PageReference ref = new Pagereference('/ConInvoiceView?invoiceId='+ invoiceId);
        ref.setRedirect(true);
        return ref;
    }
     // 精琢科技  zxk  2021-11-03  CHAN-C8D86K 添加删除按钮  start
    // 删除按钮
    public PageReference deleteButton() {
        system.debug('====invoiceId==========>' + invoiceId);
        List < Consumable_Orderdetails__c > consList = [select id, Consumable_order__c from Consumable_Orderdetails__c where Consumable_order__c = : invoiceId];
        // Consumable_order__c consumable = [select id from Consumable_order__c where id =: invoiceId AND Invoice_status__c = '草案中'];
        try {
            system.debug('====cons==========>' + consList);
            delete consList;
            if (coc.id == invoiceId && coc.Invoice_status__c == '草案中') {
                delete coc;
            }
            return returnOrderPage();
        } catch (Exception e) {
            ApexPages.addMessages(e);
            return null;
        }
    }
    // 返回 发票~消耗品页面
    public PageReference returnOrderPage() {
        PageReference ref = new Pagereference('/ConInvoiceList?sfdc.tabName='+System.label.tabName);//niwu -01r100000009ytS
        ref.setRedirect(true);
        return ref;
    }
    // 精琢科技  zxk  2021-11-03  CHAN-C8D86K 添加删除按钮  end

    
    // 作废重开按钮
    public PageReference setreopen(){
        statusEdit = 'Redirect';
        PageReference ref = new Pagereference('/ConInvoiceView?invoiceId='+ invoiceId + '&reopen=isreopen' +'&KeyWords='+statusEdit);
        ref.setRedirect(true);
        return ref;
    }

    public PageReference approval() {
        //更新发票明细2链接
        Consumable_order__c P = new Consumable_order__c();
        List<Consumable_order__c> cocinfo = New List<Consumable_order__c>();
        List<Consumable_order_details2__c> invoiceorderList2 = New List<Consumable_order_details2__c>();
        //更新出库单明细1
        List<Consumable_Orderdetails__c> outOrderdetUp1List = New List<Consumable_Orderdetails__c>();
         //需要更新出库单明细1
        List<Consumable_Orderdetails__c> outOrderdet1List = [
                            SELECT Id,
                                Name,
                                Consumable_order__c,
                                Consumable_order__r.Name,
                                Asset_Model_No__c,
                                Consumable_Product__r.Asset_Model_No__c,
                                Shipment_Count__c,
                                RrturnPro_count__c,
                                Delivery_List_RMB__c,
                                InvoicedProCost_RMB__c,
                                Invoiced_Procount__c,
                                Invoiced_Count__c,
                                Invoice_Unitprice__c,
                                InvoiceProNot_count__c,
                                Invoice_Cost_RMB__c,
                                Invoice_No__c,
                                Box_Piece__c,
                                Invoice_Unit__c
                            FROM Consumable_Orderdetails__c
                            WHERE Consumable_order__c in : outOrderStringList
        ];
        for(Integer i = 0; i < outOrderdet1List.size(); i++){
            if(outordercountMap.containsKey(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c)){
                Consumable_Orderdetails__c invoiceUpdte1 = new Consumable_Orderdetails__c();
                invoiceUpdte1.Id = outOrderdet1List[i].Id;
                invoiceUpdte1.Invoice_Unit__c = outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c).Invoice_Unit__c;
                if(outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c).Box_Piece__c == '盒' && outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c).Invoice_Unit__c == '个'){
                    Decimal OldinvoicedProcount = 0;
                    OldinvoicedProcount = (outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c).Invoiced_Count__c / outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c).ProductPacking_list_manual__c).setScale(2);
                    invoiceUpdte1.Invoiced_Procount__c = outOrderdet1List[i].Invoiced_Procount__c + OldinvoicedProcount ;
                }else{
                    invoiceUpdte1.Invoiced_Procount__c = outOrderdet1List[i].Invoiced_Procount__c + outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c).Invoiced_Count__c;
                }
                invoiceUpdte1.Invoice_Unitprice__c = outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c).Invoice_Unitprice__c;
                invoiceUpdte1.InvoicedProCost_RMB__c = invoiceUpdte1.Invoiced_Procount__c * outOrderdet1List[i].Delivery_List_RMB__c;
                
                Decimal invoicedProcount = 0;
                if(outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c).Box_Piece__c == '盒' && outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c).Invoice_Unit__c == '个'){
                    invoicedProcount = (outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c).Invoiced_Count__c / outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c).ProductPacking_list_manual__c).setScale(2);
                }else{
                    invoicedProcount = outordercountMap.get(outOrderdet1List[i].Consumable_order__c + outOrderdet1List[i].Asset_Model_No__c).Invoiced_Count__c;
                }

                if(outOrderdet1List[i].InvoiceProNot_count__c < invoicedProcount){
                    ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Error, '出库单' + outOrderdet1List[i].Consumable_order__r.Name + '中，' + outOrderdet1List[i].Asset_Model_No__c +'还没开票数量小于发票数量，请确认是否有返品。'));
                    return null;
                }

                outOrderdetUp1List.add(invoiceUpdte1);

            }
        }
        Savepoint sp = Database.setSavepoint();
        try {
            //出库单明细1更新
            if(outOrderdetUp1List.size() > 0){
                ControllerUtil.updateOrderDetails1Satus(outOrderdetUp1List);
            }
            //发票状态更新
            cocinfo = [SELECT Id,Name,Invoice_status__c,Dealer_Info__c,Order_ForHospital__c,SummonsForDirction__c FROM Consumable_order__c WHERE Id =:invoiceId];
            if (cocinfo.size()>0){
                p = cocinfo[0];
            }
            p.Invoice_status__c = '提交';
            update p;
        }catch (Exception ex) {
            Database.rollback(sp);
            ApexPages.addMessages(ex);
            return null;
        }
        return UnabletoEdit();
    }

    // 做成检索SQL文
    private String makeSoqlInit(){
        String soql = 'SELECT Id, Order_ForDealer__r.Name,Order_ForHospital__r.Name,Order_ForDealerText__c, Name,Outbound_Date__c,ShipmentAccount__c,Shipment_total_amount__c,RrturnPro_total_amount__c,Total_Invoiced_Procount__c,InvoiceNotPro_total_amount__c,InvoiceNotPro_money__c,Invoice_total_amount__c,Billed_Status__c  FROM Consumable_order__c  ';
        soql += ' WHERE Dealer_Info__c = \'' +  accountid + '\'';
        soql += ' AND (recordtypeid = \''+ System.Label.RT_ConOrder_Sale + '\'';
        soql += ' OR recordtypeid = \''+ System.Label.RT_ConOrder_Shipment + '\'';
        soql += ' ) ';
        soql += ' AND Order_Owner_WorkLocal__c = \'' + userWorkLocation + '\' ';
        soql += ' AND Order_ProType__c =\'' + agencyProType +'\'';
        soql += ' AND SummonsForDirction__c != \'互相调货\' ';
        if(HospitalInfo != null && HospitalInfo  !=''){
            soql += ' AND Order_ForHospital__c = \'' +  HospitalInfo + '\'';
        }
        if(SecondDealer != null){
            soql += ' AND Order_ForDealer__c = \'' +  SecondDealer + '\'';
        }
        if(coc.Order_ForDealerText__c != null){
            soql += ' AND ShipmentAccount__c = \'' +  coc.Order_ForDealerText__c + '\'';
        }
        soql += ' AND InvoiceNotPro_total_amount__c > 0';
        soql += ' AND Onchange_order__c = false limit 1000';
        return soql;
    }

    // 做成检索SQL文
    private String makeSoql(){
        String soql = 'SELECT Id, Order_ForDealer__r.Name,Order_ForHospital__r.Name,Order_ForDealerText__c, Name,Outbound_Date__c,ShipmentAccount__c,Shipment_total_amount__c,RrturnPro_total_amount__c,Total_Invoiced_Procount__c,InvoiceNotPro_total_amount__c,InvoiceNotPro_money__c,Invoice_total_amount__c,Billed_Status__c  FROM Consumable_order__c  ';
        soql += ' WHERE Dealer_Info__c = \'' +  accountid + '\'';
        soql += ' AND (recordtypeid = \''+ System.Label.RT_ConOrder_Sale + '\'';
        soql += ' OR recordtypeid = \''+ System.Label.RT_ConOrder_Shipment + '\'';
        soql += ' ) ';
        soql += ' AND Order_Owner_WorkLocal__c = \'' + userWorkLocation + '\' ';
        soql += ' AND Order_ProType__c =\'' + agencyProType +'\'';
        soql += ' AND Billed_Status__c != \'全部开票\'';
        soql += ' AND SummonsForDirction__c != \'互相调货\'';
        if(HospitalInfo != null && HospitalInfo  !=''){
            soql += ' AND Order_ForHospital__c = \'' +  HospitalInfo + '\'';
        }
        if(SecondDealer != null){
            soql += ' AND Order_ForDealer__c = \'' +  SecondDealer + '\'';
        }
        if(coc.Order_ForDealerText__c != null){
            soql += ' AND ShipmentAccount__c = \'' +  coc.Order_ForDealerText__c + '\'';
        }
        soql += ' AND InvoiceNotPro_total_amount__c > 0';
        soql += ' AND Onchange_order__c = false limit 1000';
        return soql;

    }

    // Data Bean
    class InvoiceOrderInfo implements Comparable {
        public Boolean check { get; set; }
        public Boolean oldCheck { get; set; }
        public Consumable_order__c esd { get; set; }
        public Consumable_Orderdetails__c esdet { get; set; }
        public Attachment attach { get; set; }
        public String mailSelectOptsin {get;set;}
        public List<SelectOption> mailSelectOpts  { get; set; }
        public String invoiceOrderId {get;set;}
        public Decimal needInvoiceCount { get; set; }

        // 出库订单
        public InvoiceOrderInfo(Consumable_order__c e) {
            check = false;
            oldCheck = false;
            esd = e;
            needInvoiceCount = 0;
        }
        // 出库订单明细1
        public InvoiceOrderInfo(Consumable_Orderdetails__c e) {
            esdet = e;
        }
        //附件
        public InvoiceOrderInfo(Attachment e) {
            attach = e;
            mailSelectOpts = new List<SelectOption>();
            mailSelectOpts.add(new SelectOption('发票和明细', '发票和明细'));
            mailSelectOpts.add(new SelectOption('发票', '发票'));
            mailSelectOpts.add(new SelectOption('明细', '明细'));
        }
        // 排序
        public Integer compareTo(Object compareTo) {
            return null;
        }
    }

    public void testMock(){ 
		Integer i = 0;
		i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
		i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
		i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
		i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
		i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
    }
    public void testMock2(){ 
		Integer i = 0;
		i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
		i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
		i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
		i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
    }
    public void testMock3(){ 
		Integer i = 0;
		i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
		i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
		i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
		i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
		i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
    }
    public void testMock4(){ 
		Integer i = 0;
		i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
		i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
		i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
		i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
    }
    public void testMock5(){ 
		Integer i = 0;
		i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
		i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
		i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
		i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
		i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
    }

}