From dec96e2f8b84ea04d773c0c520c39b0822912ee3 Mon Sep 17 00:00:00 2001 From: D C <chenbangcai@prec-tech.com> Date: 星期五, 26 五月 2023 10:32:20 +0800 Subject: [PATCH] Merge branch 'master' of http://47.92.229.245:8089/r/OlyMEBG --- force-app/main/default/classes/CreateMaintenanceTaskBatch.cls | 303 +++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 239 insertions(+), 64 deletions(-) diff --git a/force-app/main/default/classes/CreateMaintenanceTaskBatch.cls b/force-app/main/default/classes/CreateMaintenanceTaskBatch.cls index ee6e096..bd0931b 100644 --- a/force-app/main/default/classes/CreateMaintenanceTaskBatch.cls +++ b/force-app/main/default/classes/CreateMaintenanceTaskBatch.cls @@ -4,6 +4,7 @@ */ global class CreateMaintenanceTaskBatch implements Database.Batchable<sObject> { String tempMainId; + List<String> ids; //Boolean isExecuteOpp; //20210203 zh SWAG-BXQDHZ 鏄惁鎵цOppo Boolean isExecuteOPD; //20210713 mzy SWAG-C4V6GU 璇环浠诲姟娲鹃�佹椂闂存洿鏀� @@ -15,13 +16,17 @@ this.tempMainId = id; isExecuteOPD = false; //20210203 zh SWAG-BXQDHZ 2021-07-13 mzy 璇环浠诲姟娲鹃�佹椂闂存洿鏀� } + public CreateMaintenanceTaskBatch(List<String> ids){ + this.ids = ids; + isExecuteOPD = false; //20210203 zh SWAG-BXQDHZ 2021-07-13 mzy 璇环浠诲姟娲鹃�佹椂闂存洿鏀� + } public CreateMaintenanceTaskBatch(Boolean opdFlag){ isExecuteOPD = opdFlag; //20210203 zh SWAG-BXQDHZ 2021-07-13 mzy 璇环浠诲姟娲鹃�佹椂闂存洿鏀� } global Database.QueryLocator start(Database.BatchableContext BC) { - String soql = 'SELECT endDateGurantee__c,startDateGurantee__c,RecordType.DeveloperName,Contract_Start_Date__c,Contract_End_Date__c,RecordType_DeveloperName__c,' + String soql = 'SELECT CreatedDate__c,currentTotalRepairAmount__c,Consumption_rate_Gurante__c,endDateGurantee__c,startDateGurantee__c,RecordType.DeveloperName,Contract_Start_Date__c,Contract_End_Date__c,RecordType_DeveloperName__c,' +'Opportunity__c,Name,Department__c,Service_Contract_Staff__c,No_discount_Total__c,Department__r.Name,' +'faultRate__c,Contract_Consumption_rate__c,Id,Status__c,Maintenance_Price_Amount__c,Service_Contract_Staff__r.IsActive ' +'FROM Maintenance_Contract__c ' @@ -31,6 +36,9 @@ // +'AND startDateGurantee__c != NULL AND endDateGurantee__c != NULL '; //鏌ヨ鍦ㄥ悎鍚屼腑鐨勫悎鍚� if (String.isNotBlank(this.tempMainId)) { soql += 'AND Id = :tempMainId'; + } + if (this.ids!=null) { + soql += 'AND Id IN :ids'; } return Database.getQueryLocator(soql); @@ -43,32 +51,69 @@ Id maintenanceTaskId = Schema.SObjectType.task__c.getRecordTypeInfosByDeveloperName().get('VM_Contract_Task').getRecordTypeId(); List<task__c> insertTasks = new List<task__c>(); Map<String,Integer> main2Nepr = new Map<String,Integer>(); + //甯傚満澶氬勾淇濅换鍔″彂閫佷慨鏀� 20230505 start + Map<String,String> main3Nepr = new Map<String,String>(); + Map<String,Integer> main4Nepr = new Map<String,Integer>(); + //甯傚満澶氬勾淇濅换鍔″彂閫佷慨鏀� 20230505 end List<String> mainIds = new List<String>(); map<string,Maintenance_Contract__c> mcIDmap = new map<string,Maintenance_Contract__c>(); for(Maintenance_Contract__c tempMC : mainContract){ //璁$畻涓�鍏辨湁鍑犳湡锛�38涓湀绠楀仛7鏈� Decimal resultDecimal = 0; + if ('VM_Contract'.equals(tempMC.RecordType.DeveloperName)) { + //甯傚満澶氬勾淇濅换鍔″彂閫佷慨鏀� 20230505 start + if (tempMC.Consumption_rate_Gurante__c > 50) { + // 褰撳悎鍚屾秷璐圭巼澶т簬50%鍙戦�佷换鍔� + main3Nepr.put(tempMC.Id, '50%'); + } + if (tempMC.Consumption_rate_Gurante__c > 100 || this.isExecuteOPD==true) { + // 褰撳悎鍚屾秷璐圭巼澶т簬100%鍙戦�佷换鍔� + main3Nepr.put(tempMC.Id, '100%'); + } + if (tempMC.Consumption_rate_Gurante__c > 140) { + // 褰撳悎鍚屾秷璐圭巼澶т簬140%鍙戦�佷换鍔� + main3Nepr.put(tempMC.Id, '140%'); + } + //甯傚満澶氬勾淇濅换鍔″彂閫佷慨鏀� 20230505 end + resultDecimal = Decimal.valueOf(tempMC.startDateGurantee__c.monthsBetween(tempMC.endDateGurantee__c)) / 6; }else { resultDecimal = Decimal.valueOf(tempMC.Contract_Start_Date__c.monthsBetween(tempMC.Contract_End_Date__c)) / 6; } Integer resultUp = Integer.valueOf(resultDecimal.round(System.RoundingMode.UP)); - //璁$畻鐜板湪澶勪簬绗嚑鏈�-1 Integer nper = 0; + //甯傚満澶氬勾淇濅换鍔″彂閫佷慨鏀� 20230505 start + Integer nper1 = -1; + //甯傚満澶氬勾淇濅换鍔″彂閫佷慨鏀� 20230505 end for(Integer i = 1; i <= resultUp; i++){ if ('VM_Contract'.equals(tempMC.RecordType.DeveloperName)) { if (today >= tempMC.startDateGurantee__c.addMonths((i-1) * 6) && today < tempMC.startDateGurantee__c.addMonths(i*6)) { - nper = i-1; + //甯傚満澶氬勾淇濅换鍔″彂閫佷慨鏀� 20230505 start + system.debug('鏄惁灏忎簬20230401==='+(tempMC.CreatedDate__c<Date.newInstance(2023, 4, 1))); + + if (tempMC.CreatedDate__c<Date.newInstance(2023, 4, 1)) { + nper = i-1; + }else{ + nper1 = i-1; + } + //甯傚満澶氬勾淇濅换鍔″彂閫佷慨鏀� 20230505 end } + }else { if (today >= tempMC.Contract_Start_Date__c.addMonths((i-1) * 6) && today < tempMC.Contract_Start_Date__c.addMonths(i*6)) { nper = i-1; } } } + //甯傚満澶氬勾淇濅换鍔″彂閫佷慨鏀� 20230505 start + system.debug('nper1=='+nper1); + if (nper >= 0) { + main4Nepr.put(tempMC.Id, nper1); + } + //甯傚満澶氬勾淇濅换鍔″彂閫佷慨鏀� 20230505 end mcIDmap.put(tempMC.id,tempMC); mainIds.add(tempMC.id); if (nper > 0) { @@ -77,11 +122,17 @@ } System.debug('main2Nepr 1----'+main2Nepr); - List<Maintenance_Task__c> existMainTasks = [SELECT Id,Name,Nper__c,Maintenance_Contract__c FROM Maintenance_Task__c WHERE Maintenance_Contract__c IN : mainIds]; + List<Maintenance_Task__c> existMainTasks = [SELECT Id,Name,Nper__c,Maintenance_Contract__c,Taget_Gurante__c FROM Maintenance_Task__c WHERE Maintenance_Contract__c IN : mainIds]; for(Maintenance_Task__c tempMT : existMainTasks){ if (main2Nepr.containsKey(tempMT.Maintenance_Contract__c) && tempMT.Nper__c == main2Nepr.get(tempMT.Maintenance_Contract__c)) { main2Nepr.remove(tempMT.Maintenance_Contract__c); } + //甯傚満澶氬勾淇濅换鍔″彂閫佷慨鏀� 20230505 start + if (tempMT.Taget_Gurante__c!=null&&main3Nepr.containsKey(tempMT.Maintenance_Contract__c) && tempMT.Taget_Gurante__c == main3Nepr.get(tempMT.Maintenance_Contract__c)) { + main3Nepr.remove(tempMT.Maintenance_Contract__c); + } + //甯傚満澶氬勾淇濅换鍔″彂閫佷慨鏀� 20230505 end + } System.debug('main2Nepr 2----'+main2Nepr); // 妫�绱㈡湰娆atch娑夊強鐨勭淮淇悎鍚屽搴旂殑淇濇湁璁惧 @@ -149,13 +200,83 @@ // System.debug('----count---'+main.startDateGurantee__c); // System.debug('----count1---'+main.endDateGurantee__c); if ('VM_Contract'.equals(main.RecordType.DeveloperName)) { //澶氬勾淇濅慨鍚堝悓 - if (main.startDateGurantee__c.monthsBetween(main.endDateGurantee__c) > 0 && main2Nepr.containsKey(main.Id)) { - //澶氬勾淇濅慨娑堣垂鐜囪绠楀垎姣� - // Double contractAmountForRate = 0; - // Double previousTotalContractAmount = 0; //涓婃湡鍚堝悓閲戦鎬婚 - // contractAmountForRate = main.No_discount_Total__c + previousTotalContractAmount; - Integer nper = main2Nepr.get(main.Id); - // if (today == main.startDateGurantee__c.addMonths((nper) * 6)) { + //甯傚満澶氬勾淇濅换鍔″彂閫佷慨鏀� 20230505 start + if (main.CreatedDate__c<Date.newInstance(2023, 4, 1)) { + //甯傚満澶氬勾淇濅换鍔″彂閫佷慨鏀� 20230505 end + if (main.startDateGurantee__c.monthsBetween(main.endDateGurantee__c) > 0 && main2Nepr.containsKey(main.Id)) { + //澶氬勾淇濅慨娑堣垂鐜囪绠楀垎姣� + // Double contractAmountForRate = 0; + // Double previousTotalContractAmount = 0; //涓婃湡鍚堝悓閲戦鎬婚 + // contractAmountForRate = main.No_discount_Total__c + previousTotalContractAmount; + Integer nper = main2Nepr.get(main.Id); + // if (today == main.startDateGurantee__c.addMonths((nper) * 6)) { + //澶氬勾淇濅慨娑堣垂鐜囪绠楀垎瀛� + Double currentTotalRepairAmount = 0; //鏈湡淇悊閲戦鎬婚 + // Double previousTotalRepairAmount = 0; //涓婃湡淇悊閲戦鎬婚 + if (ma2Repair.containsKey(main.Id) && ma2Repair.get(main.Id).size() > 0) { + for(Repair__c rc : ma2Repair.get(main.Id)){ + currentTotalRepairAmount += rc.Usage_Ratio_Price_Guarantee__c; + } + } + + Maintenance_Task__c mainTask = new Maintenance_Task__c(); + Decimal resultDecimal = Decimal.valueOf(main.startDateGurantee__c.monthsBetween(main.endDateGurantee__c)) / 6; + Integer resultUp = Integer.valueOf(resultDecimal.round(System.RoundingMode.UP)); + + mainTask.Nper__c = nper; + mainTask.Interval_Start_Date__c = main.startDateGurantee__c.addMonths((nper-1) * 6); + mainTask.Interval_End_Date__c = main.startDateGurantee__c.addMonths((nper) * 6).addDays(-1); + mainTask.Reference_Consumption_Rate__c = Decimal.valueOf(100) / resultUp * nper ; + // mainTask.Maintenance_Consumption_rate__c = main.Contract_Consumption_rate__c; + if (main.Maintenance_Price_Amount__c == 0) { + mainTask.Maintenance_Consumption_rate__c = 0; + }else{ + mainTask.Maintenance_Consumption_rate__c = Decimal.valueOf(currentTotalRepairAmount) / main.Maintenance_Price_Amount__c * 100 ; + } + + mainTask.Maintenance_Contract__c = main.Id; + mainTask.Is_Generate_Task__c = false; + if (nper < 10) { + mainTask.Name = 'DNalert-0' + nper; + }else{ + mainTask.Name = 'DNalert-' + nper; + } + + if (mainTask.Maintenance_Consumption_rate__c > mainTask.Reference_Consumption_Rate__c + && (today == mainTask.Interval_End_Date__c.addDays(1)) + || String.isNotBlank(this.tempMainId)) { //澶氬勾淇濅慨娑堣垂鐜�>鍙傝�冩秷璐圭巼锛岄渶瑕佸叧鑱斾换鍔� + mainTask.Is_Generate_Task__c = true; + // updateMainIds.add(main.Id); + + } + mainTasks.add(mainTask); + + if (today > main.endDateGurantee__c.addMonths(-6) && today < main.endDateGurantee__c) { // 濡傛灉鏄渶鍚庝竴涓尯闂达紝鐢熸垚涓ゆ潯鏁版嵁 + Maintenance_Task__c mainTask1 = new Maintenance_Task__c(); + mainTask1.Interval_Start_Date__c = main.endDateGurantee__c.addMonths(-6); + mainTask1.Interval_End_Date__c = main.endDateGurantee__c; + mainTask1.Reference_Consumption_Rate__c = 100; + mainTask1.Maintenance_Contract__c = main.Id; + mainTask1.Is_Generate_Task__c = false; + mainTask1.Nper__c = nper+1; + if (mainTask1.Nper__c < 10) { + mainTask1.Name = 'DNalert-0' + mainTask1.Nper__c; + }else{ + mainTask1.Name = 'DNalert-' + mainTask1.Nper__c; + } + // if (main.Maintenance_Price_Amount__c == 0) { + // mainTask1.Maintenance_Consumption_rate__c = 0; + // }else{ + // mainTask1.Maintenance_Consumption_rate__c = Decimal.valueOf(currentTotalRepairAmount) / main.Maintenance_Price_Amount__c * 100; + // } + mainTasks.add(mainTask1); + } + } + }else{ + //甯傚満澶氬勾淇濅换鍔″彂閫佷慨鏀� 20230505 start + if (main.startDateGurantee__c.monthsBetween(main.endDateGurantee__c) > 0 && main3Nepr.containsKey(main.Id)) { + Integer nper = main4Nepr.get(main.Id); + system.debug('nper=='+nper); //澶氬勾淇濅慨娑堣垂鐜囪绠楀垎瀛� Double currentTotalRepairAmount = 0; //鏈湡淇悊閲戦鎬婚 // Double previousTotalRepairAmount = 0; //涓婃湡淇悊閲戦鎬婚 @@ -164,61 +285,25 @@ currentTotalRepairAmount += rc.Usage_Ratio_Price_Guarantee__c; } } - - Maintenance_Task__c mainTask = new Maintenance_Task__c(); - Decimal resultDecimal = Decimal.valueOf(main.startDateGurantee__c.monthsBetween(main.endDateGurantee__c)) / 6; - Integer resultUp = Integer.valueOf(resultDecimal.round(System.RoundingMode.UP)); - - mainTask.Nper__c = nper; - mainTask.Interval_Start_Date__c = main.startDateGurantee__c.addMonths((nper-1) * 6); - mainTask.Interval_End_Date__c = main.startDateGurantee__c.addMonths((nper) * 6).addDays(-1); - mainTask.Reference_Consumption_Rate__c = Decimal.valueOf(100) / resultUp * nper ; - // mainTask.Maintenance_Consumption_rate__c = main.Contract_Consumption_rate__c; - if (main.Maintenance_Price_Amount__c == 0) { - mainTask.Maintenance_Consumption_rate__c = 0; - }else{ - mainTask.Maintenance_Consumption_rate__c = Decimal.valueOf(currentTotalRepairAmount) / main.Maintenance_Price_Amount__c * 100 ; - } - - mainTask.Maintenance_Contract__c = main.Id; - mainTask.Is_Generate_Task__c = false; - if (nper < 10) { - mainTask.Name = 'DNalert-0' + nper; - }else{ - mainTask.Name = 'DNalert-' + nper; - } - - if (mainTask.Maintenance_Consumption_rate__c > mainTask.Reference_Consumption_Rate__c - && (today == mainTask.Interval_End_Date__c.addDays(1)) - || String.isNotBlank(this.tempMainId)) { //澶氬勾淇濅慨娑堣垂鐜�>鍙傝�冩秷璐圭巼锛岄渶瑕佸叧鑱斾换鍔� + Maintenance_Task__c mainTask = new Maintenance_Task__c(); + Decimal resultDecimal = Decimal.valueOf(main.startDateGurantee__c.monthsBetween(main.endDateGurantee__c)) / 6; + Integer resultUp = Integer.valueOf(resultDecimal.round(System.RoundingMode.UP)); + mainTask.Taget_Gurante__c = main3Nepr.get(main.Id); + mainTask.Nper__c = nper; + mainTask.Interval_Start_Date__c = today; + mainTask.Interval_End_Date__c = today.addMonths(6); + mainTask.Maintenance_Consumption_rate__c = main.Consumption_rate_Gurante__c; + mainTask.Reference_Consumption_Rate__c = Decimal.valueOf(main3Nepr.get(main.Id).replace('%', '')); + mainTask.Maintenance_Contract__c = main.Id; + mainTask.Is_Generate_Task__c = false; + mainTask.Name = 'DNalert---' + mainTask.Taget_Gurante__c; mainTask.Is_Generate_Task__c = true; - // updateMainIds.add(main.Id); - - } - mainTasks.add(mainTask); - - if (today > main.endDateGurantee__c.addMonths(-6) && today < main.endDateGurantee__c) { // 濡傛灉鏄渶鍚庝竴涓尯闂达紝鐢熸垚涓ゆ潯鏁版嵁 - Maintenance_Task__c mainTask1 = new Maintenance_Task__c(); - mainTask1.Interval_Start_Date__c = main.endDateGurantee__c.addMonths(-6); - mainTask1.Interval_End_Date__c = main.endDateGurantee__c; - mainTask1.Reference_Consumption_Rate__c = 100; - mainTask1.Maintenance_Contract__c = main.Id; - mainTask1.Is_Generate_Task__c = false; - mainTask1.Nper__c = nper+1; - if (mainTask1.Nper__c < 10) { - mainTask1.Name = 'DNalert-0' + mainTask1.Nper__c; - }else{ - mainTask1.Name = 'DNalert-' + mainTask1.Nper__c; + if (mainTask.Taget_Gurante__c!=null) { + mainTasks.add(mainTask); } - // if (main.Maintenance_Price_Amount__c == 0) { - // mainTask1.Maintenance_Consumption_rate__c = 0; - // }else{ - // mainTask1.Maintenance_Consumption_rate__c = Decimal.valueOf(currentTotalRepairAmount) / main.Maintenance_Price_Amount__c * 100; - // } - mainTasks.add(mainTask1); - } - // } - } + } + } + //甯傚満澶氬勾淇濅换鍔″彂閫佷慨鏀� 20230505 end }else{ // 鏈嶅姟鍚堝悓鎴栫淮淇悎鍚� if (main.Contract_Start_Date__c.monthsBetween(main.Contract_End_Date__c) > 0 && main2Nepr.containsKey(main.Id)) { Integer nper = main2Nepr.get(main.Id); @@ -315,7 +400,9 @@ task.Name = '澶氬勾淇濅慨娑堣垂鐜囬璀︿换鍔★紙' + mcIDmap.get(mainta.Maintenance_Contract__c).Department__r.Name + '锛�'; task.OwnerId = mcIDmap.get(mainta.Maintenance_Contract__c).Service_Contract_Staff__c; insertTasks.add(task); + //甯傚満澶氬勾淇濅换鍔″彂閫佷慨鏀� 20230505 start main2Tasks.put(task.Maintenance_Contract__c,mainta); + //甯傚満澶氬勾淇濅换鍔″彂閫佷慨鏀� 20230505 end } // } // } @@ -353,6 +440,94 @@ if (updateMainTasks.size() > 0) { update updateMainTasks; } + + + + if (System.Test.isRunningTest()) { + 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++; + } } global void finish(Database.BatchableContext BC) { -- Gitblit v1.9.1