// RowDataを残すため、@future execute にします
global class NFM105WebService {
    // Integer batchsize = 200;  考量する必要がないと思います。
    global class RepairStatusUpdate {
        webservice NFMUtil.Monitoring Monitoring;
        webservice NFM105WebService.GeneralData[] GeneralData;
    }
    global class GeneralData {
        webservice String SFDCRepairNo;
        webservice String SAPRepairNo;
        webservice String SAPQuotationNo;
        webservice String ReRepairObject;
        webservice String RepairOrderStatusCode;
        webservice String RepairOrderStatusName;
        webservice String StatusUpdateDate;
        webservice String StatusUpdateTime;
        webservice String PlannedRepairFinishDate;
        webservice String StatusUpdatePersonName;
        webservice String CancellationReason;
        webservice String IncorrectDataComment;
        webservice String ReturnType;
        webservice String InspectType;
        webservice NFM105WebService.InspectionResultInformation[] InspectionResultInformation;
        webservice NFM105WebService.FailureInformation[] FailureInformation;
    }
    global class InspectionResultInformation {
        webservice String InspectionResultFlag;
        webservice String InspectionComment;
        webservice String FailureCause;
    }
    global class FailureInformation {
        webservice String LocationGroupName;
        webservice String LocationName;
        webservice String PhenomenonName;
        webservice String CauseName;
        webservice String DescriptionName;
    }

    // 非同期を見せかけ、常にreturn void
    webservice static void NFM105(NFM105WebService.RepairStatusUpdate RepairStatusUpdate) {
        if (RepairStatusUpdate == null) {
            return;
        }
        NFMUtil.Monitoring Monitoring = RepairStatusUpdate.Monitoring;
        if (Monitoring == null) {
            return;
        }
        BatchIF_Log__c rowData = NFMUtil.saveRowData(Monitoring, 'NFM105', RepairStatusUpdate.GeneralData);
        if (String.isBlank(rowData.Log__c) == false) executefuture(rowData.Id);
    }

    @future
    global static void executefuture(String rowData_Id) {
        execute(rowData_Id);
    }
    global static void execute(String rowData_Id) {
    	// CHAN-BAW99B 20190410 NFM105Webservice停用，以后使用NFM105Rest
//        Integer batch_retry_max_cnt = Integer.valueOf(System.Label.batch_retry_max_cnt);
//        BatchIF_Log__c rowData = [Select Id, Name, Log__c, ErrorLog__c, Log2__c, Log3__c, Log4__c, Log5__c, Log6__c, Log7__c, Log8__c, Log9__c, Log10__c, Log11__c, Log12__c, MessageGroupNumber__c, TransmissionDateTime__c,retry_cnt__c from BatchIF_Log__c where RowDataFlg__c = true and Id = :rowData_Id];
//        String logstr = rowData.MessageGroupNumber__c + ' start\n';
//        BatchIF_Log__c iflog = new BatchIF_Log__c();
//        iflog.Type__c = 'NFM105';
//        iflog.MessageGroupNumber__c = rowData.MessageGroupNumber__c;
//        iflog.Log__c = logstr;
//        iflog.ErrorLog__c = '';
//        insert iflog;
//        String rowDataStr = NFMUtil.getRowDataStr(rowData);
//        List<GeneralData> generalDataList = (List<GeneralData>) JSON.deserialize(rowDataStr, List<GeneralData>.class);
//        if (generalDataList == null || generalDataList.size() == 0) {
//            return;
//        }

//        Savepoint sp = Database.setSavepoint();
//        try {
//            //repairNo list
//            List<String> sapRepairNoList  = new List<String>();
//            List<String> sfdcRepairNoList = new List<String>();
//            List<String> quotationNoList  = new List<String>();
//            for (NFM105WebService.GeneralData quoteInfo : generalDataList) {
//                // 必須項目がない場合、処理と飛ばす
//                if (quoteInfo.SAPRepairNo == null || quoteInfo.SAPRepairNo == '') {
//                    iflog.ErrorLog__c += 'SAPRepairNo is required\n';
//System.debug(Logginglevel.ERROR, 'NFM105_continue');
//                    continue;
//                } else {
//                    sapRepairNoList.add(quoteInfo.SAPRepairNo);
//                }
//                if (quoteInfo.SAPQuotationNo != null && quoteInfo.SAPQuotationNo != '') {
//                    quotationNoList.add(quoteInfo.SAPQuotationNo);
//                }
//                if (quoteInfo.SFDCRepairNo != null && quoteInfo.SFDCRepairNo != '') {
//                    sfdcRepairNoList.add(quoteInfo.SFDCRepairNo.toUpperCase());
//                }
//            }
//            //sapの外部keyで検索
//            List<Repair__c> sapRpairList = [select Id, Name, SAPRepairNo__c, Delivered_Product__c
//                                                , RepairOrderStatusName__c, RepairOrderStatusCode__c
//                                                , CancellationReason__c, IncorrectDataComment__c
//                                                , Repair_Rank__c, Repair_Ordered_Date__c
//                                                , Invalid_check__c, Delete_Flag__c
//                                                , Facility_Return_Receipt_Collection_Date__c, Receipt_received_date__c
//                                                , Return_Without_Repair_IF__c, Return_Without_Repair_Reason__c
//                                                , Repair_Quotation_Id__c, NFM105_MessageGroupNumber__c, Repair_List_Price_formula__c
//                                                , ReturnType__c, InspectType__c
//                                           from Repair__c
//                                          where SAPRepairNo__c in :sapRepairNoList];
//            Map<String, Repair__c> sapRepairsMap = new Map<String, Repair__c>();
//            for (Repair__c rpair : sapRpairList) {
//                sapRepairsMap.put(rpair.SAPRepairNo__c, rpair);
//            }
//            //sfdcのnameで検索
//            List<Repair__c> sfdcRpairList = [select Id, Name, SAPRepairNo__c, Delivered_Product__c
//                                                , RepairOrderStatusName__c, RepairOrderStatusCode__c
//                                                , CancellationReason__c, IncorrectDataComment__c
//                                                , Repair_Rank__c, Repair_Ordered_Date__c
//                                                , Invalid_check__c, Delete_Flag__c
//                                                , Facility_Return_Receipt_Collection_Date__c, Receipt_received_date__c
//                                                , Return_Without_Repair_IF__c, Return_Without_Repair_Reason__c
//                                                , Repair_Quotation_Id__c, NFM105_MessageGroupNumber__c, Repair_List_Price_formula__c
//                                                , ReturnType__c, InspectType__c
//                                           from Repair__c
//                                          where Name in :sfdcRepairNoList];
//            Map<String, Repair__c> sfdcRepairsMap = new Map<String, Repair__c>();
//            for (Repair__c rpair : sfdcRpairList) {
//                sfdcRepairsMap.put(rpair.Name, rpair);
//            }
//            List<Repair_Quotation__c> quotationList = [select Id, Name, Repair_Rank__c, Repair__c, ListPrice__c
//                                                              , InspectionComment__c, InspectionResultFlag__c
//                                                              , InspectionFailureCause__c
//                                                              , LatestQuotationDate__c
//                                                              , FirstQuotationDate__c, TotalPrice__c
//                                                              , DiscountType__c, DiscountAmount__c, Repair_Discount_Date__c
//                                                              , CafeteriaFlag__c, MessageGroupNumber__c
//                                                         from Repair_Quotation__c
//                                                        where Name in :quotationNoList
//                                                      ];
//            Map<String, Repair_Quotation__c> quotationMap = new Map<String, Repair_Quotation__c>();
//            for (Repair_Quotation__c quotation : quotationList) {
//                quotationMap.put(quotation.Name, quotation);
//            }
//            // 更新対応配列をセット
//            Map<String, Repair__c> rprUpdateMap = new Map<String, Repair__c>();                 // SAPRepairNo__c:Repair__c
//            Map<String, Asset> astUpdateMap = new Map<String, Asset>();                         // SAPRepairNo__c:Asset   TODO goto 修理のなかAssetに反映しないフラグはいりますか？超古い修理対応？
//            Map<Id, Repair_Quotation__c> rqUpdateMap = new Map<Id, Repair_Quotation__c>();      // keyも修理の Id にします。複数Quotation_agreement__cの場合後優先にする
//            Map<String, List<Repair_Quotation_reason__c>> quotationReasonsMap = new Map<String, List<Repair_Quotation_reason__c>>();
//            Map<Id, List<Repair_reason__c>> repairReasonsMap = new Map<Id, List<Repair_reason__c>>();
//            for (NFM105WebService.GeneralData quoteInfo : generalDataList) {
//                Repair__c rpr = null;
//                if (quoteInfo.SFDCRepairNo == null || quoteInfo.SFDCRepairNo == '') {
//                    rpr = sapRepairsMap.get(quoteInfo.SAPRepairNo);
//                    if (rpr == null) {
//                        // SAPRepairNo を受信したけど、SFDC側レコードがない
//                        iflog.ErrorLog__c += 'SAPRepairNo[' + quoteInfo.SAPRepairNo + ']NotExist\n';
//                        continue;
//                    }
//                } else {
//System.debug('quoteInfo.SFDCRepairNo=' + quoteInfo.SFDCRepairNo);
//                    rpr = sfdcRepairsMap.get(quoteInfo.SFDCRepairNo.toUpperCase());
//                    if (rpr == null) {
//                        // 修理受付番号 を受信したけど、SFDC側レコードがない
//                        iflog.ErrorLog__c += 'SFDCRepairNo[' + quoteInfo.SFDCRepairNo + ']NotExist(' + quoteInfo.SAPRepairNo + ')';
//                        rpr = sapRepairsMap.get(quoteInfo.SAPRepairNo);
//                        if (rpr == null) {
//                            iflog.ErrorLog__c += 'NotExist\n';
//                        }
//                        continue;
//                    }
//                }
//                // 項目転送のセット
//                rpr.SAPRepairNo__c = quoteInfo.SAPRepairNo;
//                if (rprUpdateMap.get(rpr.SAPRepairNo__c) == null) {
//                    logstr += quoteInfo.SAPRepairNo + ':' + quoteInfo.RepairOrderStatusCode + '(' + quoteInfo.SAPQuotationNo + ')';
//// B95の場合、見積り と 同期取るが、その ステータスの更新は、基本順番を厳密守る必要がない、ステータス更新日をいつでも連携できるようにします。
////                    if (rpr.NFM105_MessageGroupNumber__c > rowData.MessageGroupNumber__c) {
////                        iflog.ErrorLog__c += rpr.NFM105_MessageGroupNumber__c + ' done ';
////                        continue;
////                    }
//                    logstr += ' ';
//                    rprUpdateMap.put(rpr.SAPRepairNo__c, rpr);
//                } else {
//                    logstr += quoteInfo.SAPRepairNo + ':' + quoteInfo.RepairOrderStatusCode + '(' + quoteInfo.SAPQuotationNo + ') ';
//                    rpr = rprUpdateMap.get(rpr.SAPRepairNo__c);
//                }
//                if (String.isBlank(rpr.NFM105_MessageGroupNumber__c) || Integer.valueOf(rpr.NFM105_MessageGroupNumber__c) <= Integer.valueOf(rowData.MessageGroupNumber__c) ){
//                    // 各ステータスが専用項目に保存してますけど、ここ１つ項目に保存して、履歴を取れるようにします
//                    rpr.RepairOrderStatusName__c  = quoteInfo.RepairOrderStatusName;
//                    rpr.RepairOrderStatusCode__c  = quoteInfo.RepairOrderStatusCode;
//                    if (quoteInfo.RepairOrderStatusCode == 'A95' || quoteInfo.RepairOrderStatusCode == 'A96') {
//                        rpr.Return_Without_Repair_IF__c = true;
//                        if (rpr.Return_Without_Repair_IF__c == true) {
//                            // TODO katsu いる？未修理返却申請 対応時対応するかも。
//                            rpr.Return_Without_Repair_Reason__c = (rpr.Return_Without_Repair_Reason__c == null || rpr.Return_Without_Repair_Reason__c == '') ? 'I/F理由、確認': rpr.Return_Without_Repair_Reason__c;
//                        }
//                    }
//                    if (quoteInfo.RepairOrderStatusCode == 'A99') {
//                        rpr.Delete_Flag__c = true;
//                        rpr.Return_Without_Repair_IF__c = false;
//                    } else {
//                        rpr.Delete_Flag__c = false;
//                    }
//                    if (quoteInfo.RepairOrderStatusCode == 'B95') {
//                        rpr.Return_Without_Repair_IF__c = false;
//                    }

//                    if (rpr.CancellationReason__c != null && !String.isBlank(rpr.CancellationReason__c)) {
//                        if (rpr.Repair_Start_Date__c == null) {
//                            rpr.Return_Without_Repair_IF__c = true;
//                        }
//                    }
//                }
//                // B95の場合、Repair_Quotation__c も更新
//                if (quoteInfo.RepairOrderStatusCode == 'B95') {
//                    Repair_Quotation__c rq = quotationMap.get(quoteInfo.SAPQuotationNo);
//                    if (rq == null) {
//                        iflog.ErrorLog__c += 'SAPQuotationNo[' + quoteInfo.SAPQuotationNo + ']NotExist(B95:' + quoteInfo.SAPRepairNo + ')';
//                        rpr = sapRepairsMap.get(quoteInfo.SAPRepairNo);
//                        if (rpr == null) {
//                            iflog.ErrorLog__c += 'NotExist\n';
//                        }
//                        continue;
//                    }
//                    rqUpdateMap.put(rpr.Id, rq);        // keyも修理の Id にします。複数Quotation_agreement__cの場合後優先にする
//                    rpr.Repair_List_Price__c = rq.ListPrice__c;

//                    if (String.isBlank(rpr.NFM105_MessageGroupNumber__c) || Integer.valueOf(rpr.NFM105_MessageGroupNumber__c) <= Integer.valueOf(rowData.MessageGroupNumber__c)) {
//                        rpr.Repair_Quotation_Id__c = rq.Id;
//                    }
//                    if (String.isBlank(rq.MessageGroupNumber__c) || Integer.valueOf(rq.MessageGroupNumber__c) <= Integer.valueOf(rowData.MessageGroupNumber__c)) {
//                        rq.Quotation_agreement__c = true;
//                        if (quoteInfo.InspectionResultInformation != null && quoteInfo.InspectionResultInformation.size() != 0) {
//                            if (quoteInfo.InspectionResultInformation.size() > 1) {
//                                iflog.ErrorLog__c += 'RepairQuotation[' + quoteInfo.SAPQuotationNo + ']SFDCRepairNo[' + quoteInfo.SFDCRepairNo + '] InspectionResultInformation count is ' + quoteInfo.InspectionResultInformation.size() + '\n';
//                            }
//                            rq.InspectionResultFlag__c    = quoteInfo.InspectionResultInformation[0].InspectionResultFlag == 'X' ? 'OK' : 'NG';
//                            rq.InspectionComment__c       = quoteInfo.InspectionResultInformation[0].InspectionComment;
//                            rq.InspectionFailureCause__c  = quoteInfo.InspectionResultInformation[0].FailureCause;
//                            if (String.isBlank(rpr.NFM105_MessageGroupNumber__c) ||Integer.valueOf( rpr.NFM105_MessageGroupNumber__c) <= Integer.valueOf(rowData.MessageGroupNumber__c)) {
//                                rpr.InspectionResultFlag__c   = rq.InspectionResultFlag__c;
//                                rpr.InspectionComment__c      = rq.InspectionComment__c;
//                                rpr.InspectionFailureCause__c = rq.InspectionFailureCause__c;
//                            }
//                        }
//System.debug('quotationReasonsMap.put(rq.Name):' + rq.Name);
//                        List<Repair_Quotation_reason__c> quotationReasons = new List<Repair_Quotation_reason__c>();
//                        quotationReasonsMap.put(rq.Name, quotationReasons);
//                        List<Repair_reason__c> repairReasons = new List<Repair_reason__c>();
//                        repairReasonsMap.put(rpr.Id, repairReasons);            // 複数見積りの場合後優先にする
//                        if (quoteInfo.FailureInformation != null && quoteInfo.FailureInformation.size() != 0) {
//                            for (NFM105WebService.FailureInformation fi : quoteInfo.FailureInformation) {
//                                Repair_Quotation_reason__c qrsn = new Repair_Quotation_reason__c();
//                                quotationReasons.add(qrsn);
//                                qrsn.LocationGroupName__c    = fi.LocationGroupName;
//                                qrsn.LocationName__c         = fi.LocationName;
//                                qrsn.PhenomenonName__c       = fi.PhenomenonName;
//                                qrsn.CauseName__c            = fi.CauseName;
//                                qrsn.DescriptionName__c      = fi.DescriptionName;
//                                Repair_reason__c rrsn = new Repair_reason__c(Repair__c = rpr.Id);
//                                repairReasons.add(rrsn);
//                                rrsn.LocationGroupName__c    = fi.LocationGroupName;
//                                rrsn.LocationName__c         = fi.LocationName;
//                                rrsn.PhenomenonName__c       = fi.PhenomenonName;
//                                rrsn.CauseName__c            = fi.CauseName;
//                                rrsn.DescriptionName__c      = fi.DescriptionName;
//                            }
//                        }
//                    }
//                    if (String.isBlank(rq.MessageGroupNumber__c) || Integer.valueOf(rq.MessageGroupNumber__c)<= Integer.valueOf(rowData.MessageGroupNumber__c)) {
//                        rq.MessageGroupNumber__c   = rowData.MessageGroupNumber__c;
//                    }
//                }

//                // 各状態の更新者、NFM105_MessageGroupNumber__c を見ないこと
//                Datetime statusUpdateDateTime = NFMUtil.parseStr2DateTime(quoteInfo.StatusUpdateDate, quoteInfo.StatusUpdateTime);
//                if (statusUpdateDateTime == null) {
//                    statusUpdateDateTime = NFMUtil.parseStr2DateTimeDate(rowData.TransmissionDateTime__c + '00');
//                }
////                if (quoteInfo.RepairOrderStatusCode == 'A10') {
////                    // A10-分公司受理完成  ==> NFM103にて値を設定
////                    rpr.BranchOfficeRecievedDate__c = statusUpdateDateTime.date();
////                }
//                if (quoteInfo.RepairOrderStatusCode == 'A20') {
//                    // A20-RC受理完成
//                    rpr.Repair_Ordered_Date__c = statusUpdateDateTime.date();
//                    rpr.Repair_Ordered_Date_PersonName__c = quoteInfo.StatusUpdatePersonName;
//                }
//                else if (quoteInfo.RepairOrderStatusCode == 'A30') {
//                    // A30-受理检查完成
//                    rpr.Repair_Inspection_Date__c = statusUpdateDateTime.date();
//                    rpr.ReRepairObject_result__c = quoteInfo.ReRepairObject == 'X' ? true : false;
//                }
//                else if (quoteInfo.RepairOrderStatusCode == 'A95' || quoteInfo.RepairOrderStatusCode == 'A96') {
//                    // A95-取消修理受理　　因没有零件等原因，RC同事不受理修理 （RC为主）
//                    // A96-取消修理　　　　因报价金额高等原因，销售本部申请未修理 （销售本部申请为主）
//                    rpr.Invalid_check__c = true;
//                    rpr.repair_cancel_date__c = statusUpdateDateTime.date();
//                    rpr.CancellationReason__c = quoteInfo.CancellationReason;
//                }
//                else if (quoteInfo.RepairOrderStatusCode == 'A99') {
//                    // A99-修理单关闭　　　因申请内容和实际实物信息由差异，RC驳回此次申请的修理
//                    rpr.SAP_not_accept_repair_result__c = statusUpdateDateTime.date();
//                    rpr.IncorrectDataComment__c = quoteInfo.IncorrectDataComment;
//                }
//                else if (quoteInfo.RepairOrderStatusCode == 'B95') {
//                    Asset ast = getAstUpdate(astUpdateMap, rpr);
//                    ast.Agreed_Repair__c = rpr.Id;
//                    // B95-报价同意确认
//                    rpr.Agreed_Date__c = statusUpdateDateTime.date();
//                    rpr.Agreed_Date2__c = statusUpdateDateTime.date();
//                    // rpr.Agreed_Date__c <== TODO goto OFSにて設定するでしょうか？
//                }
//                else if (quoteInfo.RepairOrderStatusCode == 'B99') {
//                    // B99-报价同意确认取消
//                    // Agreed_Date2__c は クリアしないで、２回目再度同意されたら、同意日付は上書き。
//                    // Agreed_Date__c は クリアする
//                    Asset ast = getAstUpdate(astUpdateMap, rpr);
//                    ast.Agreed_Repair__c = null;
//                    rpr.Agreed_Date__c = null;
//                    rpr.Agreed_Date_Cancel__c = statusUpdateDateTime.date();
//                }
//                else if (quoteInfo.RepairOrderStatusCode == 'X30') {
//                    // X30-全部分配
//                    rpr.part_arrangement_complete__c = statusUpdateDateTime.date();
//                }
//                else if (quoteInfo.RepairOrderStatusCode == 'C50') {
//                    // C50-开始修理 
//                    rpr.Repair_Start_Date__c = statusUpdateDateTime.date();
//                    rpr.Planned_Repair_Completed_Date__c = NFMUtil.parseStr2Date(quoteInfo.PlannedRepairFinishDate);
//                }
//                else if (quoteInfo.RepairOrderStatusCode == 'C70') {
//                    // C70-修理完成
//                    rpr.Repair_Completed_Date__c = statusUpdateDateTime.date();
//                }
//                else if (quoteInfo.RepairOrderStatusCode == 'C90') {
//                    // C90-最终检查
//                    rpr.Repair_Final_Inspection_Date__c = statusUpdateDateTime.date();
//                    Asset ast = getAstUpdate(astUpdateMap, rpr);
//                    ast.LastSFDCRepairReturn_day__c = statusUpdateDateTime.date();
//                    ast.LastSFDCRepairNo__c = rpr.Name;
//                    if (System.Label.Large_Repair_Rank.indexOf(rpr.Repair_Rank__c + ',') >= 0) {
//                        ast.LastSFDCRepairNo_rankA__c = rpr.Name;
//                        ast.LastSFDCArankRepairReturn_day__c = statusUpdateDateTime.date();
//                    }
//                }
//                else if (quoteInfo.RepairOrderStatusCode == 'L99') {
//                    // L99-验收单签收复核通过
//                    rpr.InspectType__c = quoteInfo.InspectType;
//                    // 1-验收单
//                    if (quoteInfo.InspectType == '1') {
//                        // 一回目のみ設定
//                        if (rpr.Receipt_received_date__c == null) {
//                            rpr.Receipt_received_date__c = statusUpdateDateTime.date();
//                        }
//                        if (rpr.Facility_Return_Receipt_Collection_Date__c == null) {
//                            rpr.Facility_Return_Receipt_Collection_Date__c = statusUpdateDateTime.date();
//                        }
//                    }
//                    // 2-收款单
//                    if (rpr.Facility_Return_Receipt_Collection_Date__c == null && quoteInfo.InspectType == '2') {
//                        // 一回目のみ設定
//                        rpr.Facility_Return_Receipt_Collection_Date__c = statusUpdateDateTime.date();
//                    }
//                }
//                else if (quoteInfo.RepairOrderStatusCode == 'L60' || quoteInfo.RepairOrderStatusCode == 'L65' || quoteInfo.RepairOrderStatusCode == 'L80') {
//                    // L60-SORC修理品出库
//                    // L65-OGZ修理品出库
//                    // L80-RC修理品出库
//                    Asset ast = getAstUpdate(astUpdateMap, rpr);
//                    if (rpr.Return_Without_Repair_IF__c == true) {
//                        rpr.Return_Without_Repair_Date__c = statusUpdateDateTime.date();
//                        ast.Return_Without_Repair__c = rpr.Id;
//                    } else {
//                        ast.Return_Without_Repair__c = null;
//                    }
//                    ast.Agreed_Repair__c = null;
//                    if (quoteInfo.RepairOrderStatusCode == 'L80') {
//                        rpr.Repair_Shipped_Date__c = statusUpdateDateTime.date();
//                        rpr.ReturnType__c = quoteInfo.ReturnType;
//                        if (quoteInfo.ReturnType == 'A20' || quoteInfo.ReturnType == 'B30') {
//                            // A20-RC/FSE直返医院
//                            // B30-SORC直返医院
//                            rpr.Repair_Returned_To_HP_Date__c = statusUpdateDateTime.date();
//                        }
//                    }
//                }
////                else if (quoteInfo.RepairOrderStatusCode == 'D10') {
////                    // D10-返品
////                    rpr.Return_Without_Repair_Date__c = statusUpdateDateTime.date();
////                    Asset ast = getAstUpdate(astUpdateMap, rpr);
////                    ast.Return_Without_Repair__c = rpr.Id;
////                }
//                else if (quoteInfo.RepairOrderStatusCode == 'E10') {
//                    // E10-修理单完成
//                    rpr.RepairOrder_Complete_Day__c = statusUpdateDateTime.date();
//                }
//                if (String.isBlank(rpr.NFM105_MessageGroupNumber__c) || Integer.valueOf(rpr.NFM105_MessageGroupNumber__c) <= Integer.valueOf(rowData.MessageGroupNumber__c)) {
//                    rpr.NFM105_MessageGroupNumber__c = rowData.MessageGroupNumber__c;
//                }
//            }
            
//            // その他のQuoteationのQuotation_agreement__cをfalseにする
//System.debug(Logginglevel.ERROR, 'rqUpdateMap.keySet=' + rqUpdateMap.keySet());
//            List<Repair_Quotation__c> rqList = [Select Id from Repair_Quotation__c where Quotation_agreement__c = true and Repair__c IN :rqUpdateMap.keySet() and Id Not IN :rqUpdateMap.values()];
//            for (Repair_Quotation__c rqfalse : rqList) {
//                rqfalse.Quotation_agreement__c = false;
//            }
//            rqList.addAll(rqUpdateMap.values());
//            if (rqList.size() > 0) {
//                // TODO update false;
//                upsert rqList;
//            }
//            if (rqUpdateMap.size() > 0) {
//                Map<String, Repair_Quotation__c> rqNameMap = new Map<String, Repair_Quotation__c>();
//                for (Repair_Quotation__c rq : rqUpdateMap.values()) {
//                    rqNameMap.put(rq.Name, rq);
//System.debug('rq.Name=' + rq.Name + ', rq.Repair__c=' + rq.Repair__c);
//                }
//                for (Repair_quotation_reason__c qrsn : [Select ActivityDescription__c, Repair_quotation__r.Name, Repair_quotation__r.Repair__c from Repair_quotation_reason__c
//                        where Repair_quotation__r.Name IN: quotationReasonsMap.keySet() and ActivityDescription__c != null]
//                ) {
//                    List<Repair_reason__c> repairReasons = repairReasonsMap.get(qrsn.Repair_quotation__r.Repair__c);
//                    if (repairReasons == null) {
//                        repairReasons = new List<Repair_reason__c>();
//                        repairReasonsMap.put(qrsn.Repair_quotation__r.Repair__c, repairReasons);
//                    }
//                    repairReasons.add(new Repair_reason__c(Repair__c = qrsn.Repair_quotation__r.Repair__c,
//                        ActivityDescription__c = qrsn.ActivityDescription__c
//                    ));
//                }
//                // CHAN-BAF2VC 20190327 LHJ Start
//                //NFM104WebService.deleteInsertReasons(rqNameMap, quotationReasonsMap, repairReasonsMap);
//                NFM104Rest.deleteInsertReasons(rqNameMap, quotationReasonsMap, repairReasonsMap);
//                // CHAN-BAF2VC 20190327 LHJ End
//            }
//            list<Repair__c> rprList = rprUpdateMap.values();
//            if (rprList.size() > 0) {
//                update rprList;
//            }
//            if (astUpdateMap.size() > 0) {
//                update astUpdateMap.values();
//            }
//            //gzozw-add
//            logstr += '\nend';
//            rowData.retry_cnt__c=0;
//        } catch (Exception ex) {
//            // エラーが発生した場合
//            Database.rollback(sp);
//            System.debug(Logginglevel.ERROR, 'NFM105_' + rowData.MessageGroupNumber__c + ':' + ex.getMessage());
//            System.debug(Logginglevel.ERROR, 'NFM105_' + rowData.MessageGroupNumber__c + ':' + ex.getStackTraceString());
//            logstr += '\n' + ex.getMessage();
//            iflog.ErrorLog__c = ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + iflog.ErrorLog__c;
//            /*if (rowData.retry_cnt__c == null) rowData.retry_cnt__c = 0;
//            if (rowData.retry_cnt__c < batch_retry_max_cnt){
//                rowData.retry_cnt__c++;
//                LogAutoSendSchedule.assignOneMinute();
//            }*/
//            if (rowData.retry_cnt__c >= batch_retry_max_cnt){
//                rowData.ErrorLog__c = ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + rowData.ErrorLog__c+'错误次数已经超过自动收信设定的最大次数，请手动收信';
//            }
//        }
//        update rowData;
//        iflog.Log__c = logstr;
//        if (iflog.Log__c.length() > 131072) {
//            iflog.Log__c = iflog.Log__c.subString(0, 131065) + ' ...';
//        }
//        if (iflog.ErrorLog__c.length() > 32768) {
//            iflog.ErrorLog__c = iflog.ErrorLog__c.subString(0, 32760) + ' ...';
//        }
//        update iflog;
    }
    
    //private static Asset getAstUpdate(Map<String, Asset> astUpdateMap, Repair__c rpr) {
    //    Asset ast = astUpdateMap.get(rpr.Delivered_Product__c);
    //    if (ast == null) {
    //        ast = new Asset(Id = rpr.Delivered_Product__c);
    //        astUpdateMap.put(rpr.Delivered_Product__c, ast);
    //    }
    //    return ast;
    //}
}