global class UpdateGastroscopyBatch implements Database.Batchable { public String query; public String conId; public List conIds; global UpdateGastroscopyBatch(){ this.query = query; } global UpdateGastroscopyBatch(List conIds){ this.query = query; //this.conId = conId; this.conIds = conIds; } global Database.QueryLocator start(Database.BatchableContext bc) { // query = 'select Id,Maintenance_Contract__c,IS_GASTROSCOPY__c,IF_URF__c,IF_BRONCHOSCOPE__c,IF_PERIPHERAL__c,IF_OTHERTUBE__c,First_Month_RepairAmount__c,Second_Month_RepairAmount__c,Third_Month_RepairAmount__c,Maintenance_Contract__r.RecordType_DeveloperName__c,Asset__r.Maintenance_Price_Month__c from Maintenance_Contract_Asset__c '; query = 'select Id,Estimate_Asset_Cnt__c,Contract_mirror_type__c,GastroscopyRepairCost__c,'; query += ' BronchoscopeRepairCost__c,PreipheralRepairCost__c,keepRepairInContractMoney__c,keepRepairInContract__c,Contract_Conclusion_Date__c from Maintenance_Contract__c '; query += ' where (Status__c = \'契約\' or Status__c = \'契約満了\') and Contract_mirror_type__c = null'; // if (conId != null && conId != '') { // query += ' where Maintenance_Contract__c = :conId '; // } if(conIds != null && conIds.size() != 0) { query += ' and id in :conIds'; } return Database.getQueryLocator(query); } global void execute(Database.BatchableContext BC, list scope) { //上传对象 Map MCMap = new Map(); // Set contactidList = new Set(); for (Maintenance_Contract__c mc : scope) { MCMap.put(mc.Id,mc); } List McaList = [select Id,Maintenance_Contract__c,Asset_Type__c, Maintenance_Contract__r.Estimate_Asset_Cnt__c,IF_OTHERTUBE__c, First_Month_RepairAmount__c,Second_Month_RepairAmount__c,Third_Month_RepairAmount__c, Maintenance_Contract__r.RecordType_DeveloperName__c,Asset__r.Maintenance_Price_Month__c from Maintenance_Contract_Asset__c where (Maintenance_Contract__r.Status__c = '契約' or Maintenance_Contract__r.Status__c = '契約満了') and Maintenance_Contract__c in :MCMap.keyset()]; //统计肠胃镜个数 Map gastroscopyMap = new Map(); //胃肠镜定价金额 Map gastroscopyDepositMap = new Map(); //统计URF个数 Map URFMap = new Map(); //统计支气管镜个数 Map bronchoscopeMap = new Map(); //支气管镜定价金额 Map bronchoscopeDepositMap = new Map(); // gzw 20210926 追加'电子腹腔镜、附属品、光学视管、气管镜 合同类型 start //统计电子腹腔镜个数 Map dzcountMap = new Map(); //统计附属品个数 Map fscountMap = new Map(); //统计光学视管个数 Map gxcountMap = new Map(); //统计气管镜个数 Map qgcountMap = new Map(); // gzw 20210926 追加'电子腹腔镜、附属品、光学视管、气管镜 合同类型 end //统计周边设备个数 Map preipheralMap = new Map(); //统计其他镜种个数 Map othertubeMap = new Map(); //计算合同报价资产件数 Map totalMap = new Map(); //肠胃镜第4分类的几种情况 List gastroscopyForthType = new List(); gastroscopyForthType.add('GF'); gastroscopyForthType.add('GIF'); gastroscopyForthType.add('CF'); gastroscopyForthType.add('JF'); gastroscopyForthType.add('SIF'); //支气管镜第四分类几种情况 List bronchoscopeForthType = new List(); bronchoscopeForthType.add('BF'); //周边设备第四分类几种情况 List preipheralForthType = new List(); preipheralForthType.add('CV'); preipheralForthType.add('CLV'); preipheralForthType.add('双极电切镜工作把手'); preipheralForthType.add('其他'); //修理报价等级 List repairRank = new List(); repairRank.add('A'); repairRank.add('AW'); repairRank.add('B'); repairRank.add('BW'); repairRank.add('C'); repairRank.add('CW'); for (Maintenance_Contract_Asset__c mca : McaList) { if (mca.Asset_Type__c == '胃肠镜') { //存在了就累加 if(gastroscopyMap.containsKey(mca.Maintenance_Contract__c)) { gastroscopyMap.put(mca.Maintenance_Contract__c,gastroscopyMap.get(mca.Maintenance_Contract__c)+1); if(mca.Asset__r.Maintenance_Price_Month__c!=null) { gastroscopyDepositMap.put(mca.Maintenance_Contract__c,gastroscopyDepositMap.get(mca.Maintenance_Contract__c) + mca.Asset__r.Maintenance_Price_Month__c); } }else{ //如果没有就初始化一个 gastroscopyMap.put(mca.Maintenance_Contract__c,1); if(mca.Asset__r.Maintenance_Price_Month__c!=null) { gastroscopyDepositMap.put(mca.Maintenance_Contract__c,mca.Asset__r.Maintenance_Price_Month__c); }else{ gastroscopyDepositMap.put(mca.Maintenance_Contract__c,0.00); } } } if(mca.Asset_Type__c == 'URF') { if(URFMap.containsKey(mca.Maintenance_Contract__c)) { URFMap.put(mca.Maintenance_Contract__c,URFMap.get(mca.Maintenance_Contract__c)+1); }else{ URFMap.put(mca.Maintenance_Contract__c,1); } } // gzw 20210926 追加镜种 start if(mca.Asset_Type__c == '电子腹腔镜') { if(dzcountMap.containsKey(mca.Maintenance_Contract__c)) { dzcountMap.put(mca.Maintenance_Contract__c,dzcountMap.get(mca.Maintenance_Contract__c)+1); }else{ dzcountMap.put(mca.Maintenance_Contract__c,1); } } if(mca.Asset_Type__c == '附属品') { if(fscountMap.containsKey(mca.Maintenance_Contract__c)) { fscountMap.put(mca.Maintenance_Contract__c,fscountMap.get(mca.Maintenance_Contract__c)+1); }else{ fscountMap.put(mca.Maintenance_Contract__c,1); } } if(mca.Asset_Type__c == '光学视管') { if(gxcountMap.containsKey(mca.Maintenance_Contract__c)) { gxcountMap.put(mca.Maintenance_Contract__c,gxcountMap.get(mca.Maintenance_Contract__c)+1); }else{ gxcountMap.put(mca.Maintenance_Contract__c,1); } } if(mca.Asset_Type__c == '气管镜') { if(qgcountMap.containsKey(mca.Maintenance_Contract__c)) { qgcountMap.put(mca.Maintenance_Contract__c,qgcountMap.get(mca.Maintenance_Contract__c)+1); }else{ qgcountMap.put(mca.Maintenance_Contract__c,1); } } // gzw 20210926 追加镜种 end if(mca.Asset_Type__c == '支气管镜') { if(bronchoscopeMap.containsKey(mca.Maintenance_Contract__c)) { bronchoscopeMap.put(mca.Maintenance_Contract__c,bronchoscopeMap.get(mca.Maintenance_Contract__c)+1); if(mca.Asset__r.Maintenance_Price_Month__c!=null) { bronchoscopeDepositMap.put(mca.Maintenance_Contract__c,bronchoscopeDepositMap.get(mca.Maintenance_Contract__c) + mca.Asset__r.Maintenance_Price_Month__c); } }else{ bronchoscopeMap.put(mca.Maintenance_Contract__c,1); if(mca.Asset__r.Maintenance_Price_Month__c != null) { bronchoscopeDepositMap.put(mca.Maintenance_Contract__c,mca.Asset__r.Maintenance_Price_Month__c); }else{ bronchoscopeDepositMap.put(mca.Maintenance_Contract__c,0.00); } } } if(mca.Asset_Type__c == '周边设备') { if(preipheralMap.containsKey(mca.Maintenance_Contract__c)) { preipheralMap.put(mca.Maintenance_Contract__c,preipheralMap.get(mca.Maintenance_Contract__c)+1); }else{ preipheralMap.put(mca.Maintenance_Contract__c,1); } } if(mca.IF_OTHERTUBE__c == true) { if(othertubeMap.containsKey(mca.Maintenance_Contract__c)) { othertubeMap.put(mca.Maintenance_Contract__c,othertubeMap.get(mca.Maintenance_Contract__c)); }else{ othertubeMap.put(mca.Maintenance_Contract__c,1); } } } // for (String key : MCMap.keyset()) { Maintenance_Contract__c mc = MCMap.get(key); // Maintenance_Contract__c mc : MCMap) { // 1.胃肠镜 if (gastroscopyMap.containsKey(mc.Id)) { mc.GastroscopySize__c = gastroscopyMap.get(mc.Id); } // 肠胃镜金额 if (gastroscopyDepositMap.containsKey(mc.Id)) { mc.GastroscopyCoast__c = gastroscopyDepositMap.get(mc.Id); } // 2.支气管镜 if (bronchoscopeMap.containsKey(mc.Id)) { mc.BronchoscopeSize__c = bronchoscopeMap.get(mc.Id); } // 支气管镜金额 if (bronchoscopeDepositMap.containsKey(mc.Id)) { mc.BronchoscopeCost__c = bronchoscopeDepositMap.get(mc.Id); } // 3.URF if (URFMap.containsKey(mc.Id)) { mc.URFSize__c = URFMap.get(mc.Id); } // 4.电子腹腔镜 // 5.附属品 // 6.光学视镜 // 7.气管镜 // 周边设备 if (preipheralMap.containsKey(mc.Id)) { mc.PreipheralSize__c = preipheralMap.get(mc.Id); } // 合同镜种类型计算 if( gastroscopyMap.containsKey(mc.Id) && gastroscopyMap.get(mc.Id) > mc.Estimate_Asset_Cnt__c/2 ) { mc.Contract_mirror_type__c = '肠胃镜为主合同'; } if( bronchoscopeMap.containsKey(mc.Id) && bronchoscopeMap.get(mc.Id) > mc.Estimate_Asset_Cnt__c/2) { mc.Contract_mirror_type__c = '支气管镜为主合同'; } if( URFMap.containsKey(mc.Id) && URFMap.get(mc.Id) > mc.Estimate_Asset_Cnt__c/2 ) { mc.Contract_mirror_type__c = 'URF为主合同'; } if( URFMap.containsKey(mc.Id) && URFMap.get(mc.Id) == mc.Estimate_Asset_Cnt__c ) { mc.Contract_mirror_type__c = 'URF单镜种合同'; } if( dzcountMap.containsKey(mc.Id) && dzcountMap.get(mc.Id) > mc.Estimate_Asset_Cnt__c/2 ) { mc.Contract_mirror_type__c = '电子腹腔镜为主合同'; } if( fscountMap.containsKey(mc.Id) && fscountMap.get(mc.Id) > mc.Estimate_Asset_Cnt__c/2 ) { mc.Contract_mirror_type__c = '附属品为主合同'; } if( gxcountMap.containsKey(mc.Id) && gxcountMap.get(mc.Id) > mc.Estimate_Asset_Cnt__c/2 ) { mc.Contract_mirror_type__c = '光学视镜为主合同'; } if( qgcountMap.containsKey(mc.Id) && qgcountMap.get(mc.Id) > mc.Estimate_Asset_Cnt__c/2 ) { mc.Contract_mirror_type__c = '气管镜为主合同'; } if(String.isBlank(mc.Contract_mirror_type__c)) { mc.Contract_mirror_type__c = '其他'; } } // // //将各个镜种存到对应的Map当中 // for(String key : gastroscopyMap.keySet()){ // Maintenance_Contract__c mc = new Maintenance_Contract__c(); // mc.Id = key; // mc.GastroscopySize__c = gastroscopyMap.get(key); // MCMap.put(key,mc); // } // //存入肠胃镜定价金额 // if(gastroscopyDepositMap.size()>0){ // for(String gac : gastroscopyDepositMap.keySet()){ // if(MCMap.containsKey(gac)){ // MCMap.get(gac).GastroscopyCoast__c = gastroscopyDepositMap.get(gac); // } // } // } // for(String key : URFMap.keySet()){ // if(MCMap.containsKey(key)){ // MCMap.get(key).URFSize__c = URFMap.get(key); // }else{ // Maintenance_Contract__c mc = new Maintenance_Contract__c(); // mc.Id = key; // mc.URFSize__c = URFMap.get(key); // MCMap.put(key,mc); // } // } // for(String key : bronchoscopeMap.keySet()){ // if(MCMap.containsKey(key)){ // MCMap.get(key).BronchoscopeSize__c = bronchoscopeMap.get(key); // }else{ // Maintenance_Contract__c mc = new Maintenance_Contract__c(); // mc.Id = key; // mc.BronchoscopeSize__c = bronchoscopeMap.get(key); // MCMap.put(key,mc); // } // } // //存入支气管的定价金额 // if(bronchoscopeDepositMap.size()>0){ // for(String bcc : bronchoscopeDepositMap.keySet()){ // if(MCMap.containsKey(bcc)){ // MCMap.get(bcc).BronchoscopeCost__c = bronchoscopeDepositMap.get(bcc); // } // } // } // for(String key : preipheralMap.keySet()){ // if(MCMap.containsKey(key)){ // MCMap.get(key).PreipheralSize__c = preipheralMap.get(key); // }else{ // Maintenance_Contract__c mc = new Maintenance_Contract__c(); // mc.Id = key; // mc.PreipheralSize__c = preipheralMap.get(key); // MCMap.put(key,mc); // } // } // for(String key : othertubeMap.keySet()){ // if(MCMap.containsKey(key)){ // MCMap.get(key).OthertubeSize__c = othertubeMap.get(key); // }else{ // Maintenance_Contract__c mc = new Maintenance_Contract__c(); // mc.Id = key; // mc.OthertubeSize__c = othertubeMap.get(key); // MCMap.put(key,mc); // } // } // //统计总和 // for(String key : MCMap.keySet()){ // if(totalMap.containsKey(key)){ // if(MCMap.get(key).GastroscopySize__c != null){ // totalMap.put(key,totalMap.get(key)+ MCMap.get(key).GastroscopySize__c.intValue()); // }else if(MCMap.get(key).URFSize__c != null){ // totalMap.put(key,totalMap.get(key)+ MCMap.get(key).URFSize__c.intValue()); // }else if(MCMap.get(key).BronchoscopeSize__c != null){ // totalMap.put(key,totalMap.get(key)+ MCMap.get(key).BronchoscopeSize__c.intValue()); // }else if(MCMap.get(key).PreipheralSize__c != null){ // totalMap.put(key,totalMap.get(key)+ MCMap.get(key).PreipheralSize__c.intValue()); // }else if(MCMap.get(key).OthertubeSize__c != null){ // totalMap.put(key,totalMap.get(key)+ MCMap.get(key).OthertubeSize__c.intValue()); // } // }else{ // if(MCMap.get(key).GastroscopySize__c != null){ // totalMap.put(key,MCMap.get(key).GastroscopySize__c.intValue()); // }else if(MCMap.get(key).URFSize__c != null){ // totalMap.put(key,MCMap.get(key).URFSize__c.intValue()); // }else if(MCMap.get(key).BronchoscopeSize__c != null){ // totalMap.put(key,MCMap.get(key).BronchoscopeSize__c.intValue()); // }else if(MCMap.get(key).PreipheralSize__c != null){ // totalMap.put(key,MCMap.get(key).PreipheralSize__c.intValue()); // }else if(MCMap.get(key).OthertubeSize__c != null){ // totalMap.put(key,MCMap.get(key).OthertubeSize__c.intValue()); // } // } // } //对比规则 /** * * 1.当该合同内肠胃镜条数多于合同报价资产件数的一半------【肠胃镜为主合同】 * 2.当该合同内支气管镜条数多于合同报价资产件数的一半------【支气管镜为主合同】 * 3.当该合同内URF条数多于合同报价资产件数的一半------【URF为主合同】 * 4.当该合同内URF条数等于合同报价资产件数-----【URF单镜种合同】 * 5.当该合同内的CHF、CYF、ENF、HD EndoEYE、HYF、LTF、泌尿科用硬性镜、腹腔镜/胸腔镜多于报价资产件数的一半时,取最多的镜种作为【该镜种为主的合同】 * 6.以上情况均不符合-----其他 * */ // for(String key : MCMap.keySet()){ // if( MCMap.get(key).GastroscopySize__c > totalMap.get(key)/2 ){ // MCMap.get(key).Contract_mirror_type__c = '肠胃镜为主合同'; // }else if( MCMap.get(key).BronchoscopeSize__c > totalMap.get(key)/2){ // MCMap.get(key).Contract_mirror_type__c = '支气管镜为主合同'; // }else if( MCMap.get(key).URFSize__c > totalMap.get(key)/2 ){ // MCMap.get(key).Contract_mirror_type__c = 'URF为主合同'; // }else if( MCMap.get(key).URFSize__c == totalMap.get(key)/2 ){ // MCMap.get(key).Contract_mirror_type__c = 'URF单镜种合同'; // } // // else if( MCMap.get(key).OthertubeSize__c > totalMap.get(key)/2){ // // MCMap.get(key).Contract_mirror_type__c = '其他镜种合同'; // // } // else{ // MCMap.get(key).Contract_mirror_type__c = '其他'; // } // } //计算设备生效后的第1.2.3个月修理金额 // //拿出所有的维修合同 // Set weixiuContractId = new Set(); // for(Maintenance_Contract_Asset__c mca :scope){ // weixiuContractId.add(mca.Maintenance_Contract__c); // } //检索所有合同保有设备的修理 list newRepiarList = new list(); // if(weixiuContractId.size()>0){ newRepiarList = [select Id, Usage_Ratio_Price_Contract__c, Usage_Ratio_Price_Guarantee__c,Usage_Ratio_Price_Service__c, Delivered_Product__c, Repair_cost__c, Maintenance_Contract__c, Maintenance_Contract__r.Contract_Start_Date__c, Maintenance_Contract__r.Contract_End_Date__c, // tcm 20211011 生效后第N个月的区间都改为 合同日+N个月 end Maintenance_Contract__r.Contract_Conclusion_Date__c, // tcm 20211011 生效后第N个月的区间都改为 合同日+N个月 end Failure_Occurrence_Date__c, Repair_Quotation_Id__c, VM_Maintenance_Contract__c, Delivered_Product__r.Category4__c, Repair_Rank__c from Repair__c where (Maintenance_Contract__c != null or VM_Maintenance_Contract__c != null) and (Maintenance_Contract__c in: MCMap.keyset() or VM_Maintenance_Contract__c in: MCMap.keyset()) and Status2__c != '00.删除' and Status2__c != '00.取消' order by Maintenance_Contract__c ]; // } //找到对应维修合同/保有设备底下的合同 if(newRepiarList != null && newRepiarList.size()>0) { //初始化清空维修合同/保有设备的第一二三月的维修金额 for(Maintenance_Contract_Asset__c mca : McaList) { mca.First_Month_RepairAmount__c = 0.00; mca.Second_Month_RepairAmount__c = 0.00; mca.Third_Month_RepairAmount__c = 0.00; } } //置空肠胃镜 支气管镜 周边设备的修理金额 for(String key : MCMap.keySet()) { MCMap.get(key).GastroscopyRepairCost__c = 0.00; MCMap.get(key).BronchoscopeRepairCost__c = 0.00; MCMap.get(key).PreipheralRepairCost__c = 0.00; } // tcm 20211011 修复大修次数和大修修理金额的数字对不上 start // 初始化大修次数和大修金额 for (Maintenance_Contract_Asset__c mca : McaList) { MCMap.get(mca.Maintenance_Contract__c).keepRepairInContract__c = 0; MCMap.get(mca.Maintenance_Contract__c).keepRepairInContractMoney__c = 0.00; } // tcm 20211011 修复大修次数和大修修理金额的数字对不上 end //各种镜种的修理金额 for (Maintenance_Contract_Asset__c mca : McaList) { for(Repair__c rc : newRepiarList) { if(mca.Maintenance_Contract__c == rc.Maintenance_Contract__c && mca.Asset_Type__c == '胃肠镜' && gastroscopyForthType.contains(rc.Delivered_Product__r.Category4__c) && mca.Asset__c == rc.Delivered_Product__c ) { //肠胃镜修理金额 if(MCMap.containsKey(mca.Maintenance_Contract__c)) { if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('Maintenance_Contract')) { MCMap.get(mca.Maintenance_Contract__c).GastroscopyRepairCost__c += rc.Usage_Ratio_Price_Contract__c; }else if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('NewMaintenance_Contract')) { MCMap.get(mca.Maintenance_Contract__c).GastroscopyRepairCost__c += rc.Usage_Ratio_Price_Service__c; }else if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('VM_Contract')) { MCMap.get(mca.Maintenance_Contract__c).GastroscopyRepairCost__c += rc.Usage_Ratio_Price_Guarantee__c; } } // tcm 20211011 start // else{ // Maintenance_Contract__c mc = new Maintenance_Contract__c(); // mc.Id = mca.Maintenance_Contract__c; // if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('Maintenance_Contract')) { // mc.GastroscopyRepairCost__c = rc.Usage_Ratio_Price_Contract__c; // }else if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('NewMaintenance_Contract')) { // mc.GastroscopyRepairCost__c = rc.Usage_Ratio_Price_Service__c; // }else if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('VM_Contract')) { // mc.GastroscopyRepairCost__c = rc.Usage_Ratio_Price_Guarantee__c; // } // MCMap.put(mca.Maintenance_Contract__c,mc); // } // tcm 20211011 end //支气管镜维修金额 }else if(mca.Maintenance_Contract__c == rc.Maintenance_Contract__c && mca.Asset_Type__c == '支气管镜' && bronchoscopeForthType.contains(rc.Delivered_Product__r.Category4__c) && mca.Asset__c == rc.Delivered_Product__c) { if(MCMap.containsKey(mca.Maintenance_Contract__c)) { if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('Maintenance_Contract')) { MCMap.get(mca.Maintenance_Contract__c).BronchoscopeRepairCost__c += rc.Usage_Ratio_Price_Contract__c; }else if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('NewMaintenance_Contract')) { MCMap.get(mca.Maintenance_Contract__c).BronchoscopeRepairCost__c += rc.Usage_Ratio_Price_Service__c; }else if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('VM_Contract')) { MCMap.get(mca.Maintenance_Contract__c).BronchoscopeRepairCost__c += rc.Usage_Ratio_Price_Guarantee__c; } } // tcm 20211011 start // else{ // Maintenance_Contract__c mc = new Maintenance_Contract__c(); // mc.Id = mca.Maintenance_Contract__c; // if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('Maintenance_Contract')) { // mc.BronchoscopeRepairCost__c = rc.Usage_Ratio_Price_Contract__c; // }else if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('NewMaintenance_Contract')) { // mc.BronchoscopeRepairCost__c = rc.Usage_Ratio_Price_Service__c; // }else if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('VM_Contract')) { // mc.BronchoscopeRepairCost__c = rc.Usage_Ratio_Price_Guarantee__c; // } // MCMap.put(mca.Maintenance_Contract__c,mc); // } // tcm 20211011 end } //周边设备的修理金额 else if(mca.Maintenance_Contract__c == rc.Maintenance_Contract__c && mca.Asset_Type__c == '周边设备' && preipheralForthType.contains(rc.Delivered_Product__r.Category4__c) && mca.Asset__c == rc.Delivered_Product__c) { if(MCMap.containsKey(mca.Maintenance_Contract__c)) { if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('Maintenance_Contract')) { MCMap.get(mca.Maintenance_Contract__c).PreipheralRepairCost__c += rc.Usage_Ratio_Price_Contract__c; System.debug('IF_PERIPHERAL__c === Maintenance_Contract'+rc.Usage_Ratio_Price_Contract__c+'==='+mca.Maintenance_Contract__c); }else if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('NewMaintenance_Contract')) { MCMap.get(mca.Maintenance_Contract__c).PreipheralRepairCost__c += rc.Usage_Ratio_Price_Service__c; System.debug('IF_PERIPHERAL__c === Maintenance_Contract'+rc.Usage_Ratio_Price_Service__c+'==='+mca.Maintenance_Contract__c); }else if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('VM_Contract')) { MCMap.get(mca.Maintenance_Contract__c).PreipheralRepairCost__c += rc.Usage_Ratio_Price_Guarantee__c; System.debug('IF_PERIPHERAL__c === Maintenance_Contract'+rc.Usage_Ratio_Price_Guarantee__c+'==='+mca.Maintenance_Contract__c); } } // tcm 20211011 start // else{ // Maintenance_Contract__c mc = new Maintenance_Contract__c(); // mc.Id = mca.Maintenance_Contract__c; // if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('Maintenance_Contract')) { // System.debug('IF_PERIPHERAL__c === Maintenance_Contract'+rc.Usage_Ratio_Price_Contract__c+'==='+mca.Maintenance_Contract__c); // mc.PreipheralRepairCost__c = rc.Usage_Ratio_Price_Contract__c; // }else if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('NewMaintenance_Contract')) { // System.debug('IF_PERIPHERAL__c === Maintenance_Contract'+rc.Usage_Ratio_Price_Service__c+'==='+mca.Maintenance_Contract__c); // mc.PreipheralRepairCost__c = rc.Usage_Ratio_Price_Service__c; // }else if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('VM_Contract')) { // System.debug('IF_PERIPHERAL__c === Maintenance_Contract'+rc.Usage_Ratio_Price_Guarantee__c+'==='+mca.Maintenance_Contract__c); // mc.PreipheralRepairCost__c = rc.Usage_Ratio_Price_Guarantee__c; // } // MCMap.put(mca.Maintenance_Contract__c,mc); // } // tcm 20211011 end } //存在修理 且修理等级为A/AW/B/BW/C/CW if(mca.Maintenance_Contract__c == rc.Maintenance_Contract__c && repairRank.contains(rc.Repair_Rank__c) && mca.Asset__c == rc.Delivered_Product__c) { //查找是否在MCMap里 if(MCMap.containsKey(mca.Maintenance_Contract__c)) { // tcm 20211011 修复大修次数和大修修理金额的数字对不上 start // if(MCMap.get(mca.Maintenance_Contract__c).keepRepairInContract__c == null) { // //计算修理次数 // MCMap.get(mca.Maintenance_Contract__c).keepRepairInContract__c = 1; // MCMap.get(mca.Maintenance_Contract__c).keepRepairInContractMoney__c = 0.00; // //计算修理金额 // if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('Maintenance_Contract')) { // MCMap.get(mca.Maintenance_Contract__c).keepRepairInContractMoney__c += rc.Usage_Ratio_Price_Contract__c; // }else if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('NewMaintenance_Contract')) { // MCMap.get(mca.Maintenance_Contract__c).keepRepairInContractMoney__c += rc.Usage_Ratio_Price_Service__c; // }else if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('VM_Contract')) { // MCMap.get(mca.Maintenance_Contract__c).keepRepairInContractMoney__c += rc.Usage_Ratio_Price_Guarantee__c; // } // }else{ // tcm 20211011 修复大修次数和大修修理金额的数字对不上 end //已经存在的值 MCMap.get(mca.Maintenance_Contract__c).keepRepairInContract__c = MCMap.get(mca.Maintenance_Contract__c).keepRepairInContract__c + 1; if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('Maintenance_Contract')) { MCMap.get(mca.Maintenance_Contract__c).keepRepairInContractMoney__c += rc.Usage_Ratio_Price_Contract__c; }else if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('NewMaintenance_Contract')) { MCMap.get(mca.Maintenance_Contract__c).keepRepairInContractMoney__c += rc.Usage_Ratio_Price_Service__c; }else if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('VM_Contract')) { MCMap.get(mca.Maintenance_Contract__c).keepRepairInContractMoney__c += rc.Usage_Ratio_Price_Guarantee__c; } // tcm 20211011 修复大修次数和大修修理金额的数字对不上 start // } } // else{ // //不在就新建一个对象 // Maintenance_Contract__c mc = new Maintenance_Contract__c(); // mc.Id = mca.Maintenance_Contract__c; // mc.keepRepairInContract__c = 1; // if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('Maintenance_Contract')) { // mc.keepRepairInContractMoney__c = rc.Usage_Ratio_Price_Contract__c; // }else if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('NewMaintenance_Contract')) { // mc.keepRepairInContractMoney__c = rc.Usage_Ratio_Price_Service__c; // }else if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('VM_Contract')) { // mc.keepRepairInContractMoney__c = rc.Usage_Ratio_Price_Guarantee__c; // } // MCMap.put(mca.Maintenance_Contract__c,mc); // } // tcm 20211011 修复大修次数和大修修理金额的数字对不上 end } //第一二三月修理金额 if(mca.Maintenance_Contract__c == rc.Maintenance_Contract__c) { // tcm 20211011 生效后第N个月的区间都改为 合同日+N个月 start //判断 故障发生日 Failure_Occurrence_Date__c 是否在第一个月内 if(rc.Failure_Occurrence_Date__c <= rc.Maintenance_Contract__r.Contract_Conclusion_Date__c.addMonths(1)) { // tcm 20211011 生效后第N个月的区间都改为 合同日+N个月 end //按照维修合同的RecordType_DeveloperName__c 计算维修金额 //不同种类维修金额不同 if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('Maintenance_Contract')) { mca.First_Month_RepairAmount__c += rc.Usage_Ratio_Price_Contract__c; }else if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('NewMaintenance_Contract')) { mca.First_Month_RepairAmount__c += rc.Usage_Ratio_Price_Service__c; }else if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('VM_Contract')) { mca.First_Month_RepairAmount__c += rc.Usage_Ratio_Price_Guarantee__c; } } // tcm 20211011 生效后第N个月的区间都改为 合同日+N个月 start //判断是否在第二个月内 if(rc.Failure_Occurrence_Date__c <= rc.Maintenance_Contract__r.Contract_Conclusion_Date__c.addMonths(2)) { system.debug('进入第二个月判断,记录类型名等于'+mca.Maintenance_Contract__r.RecordType_DeveloperName__c); // tcm 20211011 生效后第N个月的区间都改为 合同日+N个月 end if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('Maintenance_Contract')) { mca.Second_Month_RepairAmount__c += rc.Usage_Ratio_Price_Contract__c; }else if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('NewMaintenance_Contract')) { mca.Second_Month_RepairAmount__c += rc.Usage_Ratio_Price_Service__c; }else if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('VM_Contract')) { mca.Second_Month_RepairAmount__c += rc.Usage_Ratio_Price_Guarantee__c; } system.debug('第二个月维修价格等于'+mca.First_Month_RepairAmount__c); } // tcm 20211011 生效后第N个月的区间都改为 合同日+N个月 start //判断是否在第三个月内 if(rc.Failure_Occurrence_Date__c <= rc.Maintenance_Contract__r.Contract_Conclusion_Date__c.addMonths(3)) { system.debug('进入第三个月判断,记录类型名等于'+mca.Maintenance_Contract__r.RecordType_DeveloperName__c); // tcm 20211011 生效后第N个月的区间都改为 合同日+N个月 end if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('Maintenance_Contract')) { mca.Third_Month_RepairAmount__c += rc.Usage_Ratio_Price_Contract__c; }else if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('NewMaintenance_Contract')) { mca.Third_Month_RepairAmount__c += rc.Usage_Ratio_Price_Service__c; }else if(mca.Maintenance_Contract__r.RecordType_DeveloperName__c.equals('VM_Contract')) { mca.Third_Month_RepairAmount__c += rc.Usage_Ratio_Price_Guarantee__c; } system.debug('第三个月维修价格等于'+mca.First_Month_RepairAmount__c); } } } } update McaList; update MCMap.values(); } global void finish(Database.BatchableContext BC) { } global void calculateSum (Maintenance_Contract_Asset__c mca, Repair__c rc ){ } // @TestVisible private void test() { // 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++; // } }