global class SubAuthorizedBatch implements Database.Batchable { String testID; Boolean IsNeedExecute = false; // 2021-03-03 mzy WLIG-BYHD79 SFDC环境batch合并调查 是否符合执行条件 public SubAuthorizedBatch(string testID) { this.testID = testID; } public SubAuthorizedBatch() { } // 2021-03-03 mzy WLIG-BYHD79 SFDC环境batch合并调查 start public SubAuthorizedBatch(Boolean NeedExecute) { this.IsNeedExecute = NeedExecute; } // 2021-03-03 mzy WLIG-BYHD79 SFDC环境batch合并调查 end global Database.QueryLocator start(Database.BatchableContext BC) { Date today = Date.today(); Date tomorrow = today.addDays(1); Date twoDayLater = today.addDays(2); //Date twoDayAgo = today.addDays(-2); //Date yesterday = today.addDays(-1); if (!String.isBlank(this.testID)) { return Database.getQueryLocator( [select Id, Status__c, IsAuthorize__c, Authorizer__c, AuthorizedStartDate__c, AuthorizedEndDate__c, Authorizee__c from SubAuthorized__c where id = :testID] ); } return Database.getQueryLocator( [select Id, Status__c, IsAuthorize__c, Authorizer__c, AuthorizedStartDate__c, AuthorizedEndDate__c, Authorizee__c from SubAuthorized__c where (Status__c = '已批准' and IsAuthorize__c = false and AuthorizedStartDate__c <= : tomorrow and AuthorizedEndDate__c >= : twoDayLater) or (Status__c = '已批准' and IsAuthorize__c = true and AuthorizedEndDate__c <= : tomorrow) or (Status__c = '已取消' and IsAuthorize__c = true ) ] ); } global void execute(Database.BatchableContext BC, List SubAuthorizedList) { system.debug('---------1-------------SubAuthorizedList:' + SubAuthorizedList); Map SubAuthorizedMap = new Map (); Set UpdateUserSet = new Set(); List UpdateUserList = new List(); // 获取所有提交人的id for ( SubAuthorized__c SubAuthor : SubAuthorizedList) { SubAuthorizedMap.put(SubAuthor.Authorizer__c, SubAuthor); } system.debug('---------2-------------SubAuthorizedMap:' + SubAuthorizedMap); // 检索出提交人为经理部长总监的用户数据(包括作为备份的) list allUserList = [select id, ZongjianApprovalManager_copy__c, TongkuoZongjian_copy__c, BuchangApprovalManager_copy__c, BuchangApprovalManagerSales_copy__c, JingliApprovalManager_copy__c, SalesManager_copy__c, ZongjianApprovalManager__c, TongkuoZongjian__c, BuchangApprovalManager__c, BuchangApprovalManagerSales__c, JingliApprovalManager__c, SalesManager__c, ManagerId , ManagerId_copy__c // SWAG-BEM9EP start ,JingliEquipmentManager__c, JingliEquipmentManager_copy__c ,Buzhang_Equipment_Manager__c, Buzhang_Equipment_Manager_copy__c // SWAG-BEM9EP end from user where ZongjianApprovalManager_copy__c in: SubAuthorizedMap.keyset() or TongkuoZongjian_copy__c in: SubAuthorizedMap.keyset() or BuchangApprovalManager_copy__c in: SubAuthorizedMap.keyset() or BuchangApprovalManagerSales_copy__c in: SubAuthorizedMap.keyset() or JingliApprovalManager_copy__c in: SubAuthorizedMap.keyset() or SalesManager_copy__c in: SubAuthorizedMap.keyset() or ZongjianApprovalManager__c in: SubAuthorizedMap.keyset() or TongkuoZongjian__c in: SubAuthorizedMap.keyset() or BuchangApprovalManager__c in: SubAuthorizedMap.keyset() or BuchangApprovalManagerSales__c in: SubAuthorizedMap.keyset() or JingliApprovalManager__c in: SubAuthorizedMap.keyset() or SalesManager__c in: SubAuthorizedMap.keyset() or ManagerId in : SubAuthorizedMap.keyset() or ManagerId_copy__c in : SubAuthorizedMap.keyset() //SWAG-BEM9EP start or JingliEquipmentManager__c in : SubAuthorizedMap.keyset() or JingliEquipmentManager_copy__c in : SubAuthorizedMap.keyset() or Buzhang_Equipment_Manager__c in : SubAuthorizedMap.keyset() or Buzhang_Equipment_Manager_copy__c in : SubAuthorizedMap.keyset() // SWAG-BEM9EP end ]; // 设置更新用户数据 for (User tempUser : allUserList) { boolean IsUpdate = false; // 从备份赋值到总监部长经理回来,备份置空 if (tempUser.ZongjianApprovalManager_copy__c != null && SubAuthorizedMap.containsKey(tempUser.ZongjianApprovalManager_copy__c) && !checkSubAuthorized(SubAuthorizedMap.get(tempUser.ZongjianApprovalManager_copy__c)) ) { tempUser.ZongjianApprovalManager__c = tempUser.ZongjianApprovalManager_copy__c; tempUser.ZongjianApprovalManager_copy__c = null; IsUpdate = true; } if (tempUser.TongkuoZongjian_copy__c != null && SubAuthorizedMap.containsKey(tempUser.TongkuoZongjian_copy__c) && !checkSubAuthorized(SubAuthorizedMap.get(tempUser.TongkuoZongjian_copy__c)) ) { tempUser.TongkuoZongjian__c = tempUser.TongkuoZongjian_copy__c; tempUser.TongkuoZongjian_copy__c = null; IsUpdate = true; } if (tempUser.BuchangApprovalManager_copy__c != null && SubAuthorizedMap.containsKey(tempUser.BuchangApprovalManager_copy__c) && !checkSubAuthorized(SubAuthorizedMap.get(tempUser.BuchangApprovalManager_copy__c)) ) { tempUser.BuchangApprovalManager__c = tempUser.BuchangApprovalManager_copy__c; tempUser.BuchangApprovalManager_copy__c = null; IsUpdate = true; } if (tempUser.BuchangApprovalManagerSales_copy__c != null && SubAuthorizedMap.containsKey(tempUser.BuchangApprovalManagerSales_copy__c) && !checkSubAuthorized(SubAuthorizedMap.get(tempUser.BuchangApprovalManagerSales_copy__c)) ) { tempUser.BuchangApprovalManagerSales__c = tempUser.BuchangApprovalManagerSales_copy__c; tempUser.BuchangApprovalManagerSales_copy__c = null; IsUpdate = true; } if (tempUser.JingliApprovalManager_copy__c != null && SubAuthorizedMap.containsKey(tempUser.JingliApprovalManager_copy__c) && !checkSubAuthorized(SubAuthorizedMap.get(tempUser.JingliApprovalManager_copy__c)) ) { tempUser.JingliApprovalManager__c = tempUser.JingliApprovalManager_copy__c; tempUser.JingliApprovalManager_copy__c = null; IsUpdate = true; } if (tempUser.SalesManager_copy__c != null && SubAuthorizedMap.containsKey(tempUser.SalesManager_copy__c) && !checkSubAuthorized(SubAuthorizedMap.get(tempUser.SalesManager_copy__c)) ) { tempUser.SalesManager__c = tempUser.SalesManager_copy__c; tempUser.SalesManager_copy__c = null; IsUpdate = true; } if (tempUser.ManagerId_copy__c != null && SubAuthorizedMap.containsKey(tempUser.ManagerId_copy__c ) && !checkSubAuthorized(SubAuthorizedMap.get(tempUser.ManagerId_copy__c )) ) { tempUser.ManagerId = tempUser.ManagerId_copy__c; tempUser.ManagerId_copy__c = null; IsUpdate = true; } //SWAG-BEM9EP start if (tempUser.JingliEquipmentManager_copy__c != null && SubAuthorizedMap.containsKey(tempUser.JingliEquipmentManager_copy__c ) && !checkSubAuthorized(SubAuthorizedMap.get(tempUser.JingliEquipmentManager_copy__c )) ) { tempUser.JingliEquipmentManager__c = tempUser.JingliEquipmentManager_copy__c; tempUser.JingliEquipmentManager_copy__c = null; IsUpdate = true; } if (tempUser.Buzhang_Equipment_Manager_copy__c != null && SubAuthorizedMap.containsKey(tempUser.Buzhang_Equipment_Manager_copy__c ) && !checkSubAuthorized(SubAuthorizedMap.get(tempUser.Buzhang_Equipment_Manager_copy__c)) ) { tempUser.Buzhang_Equipment_Manager__c = tempUser.Buzhang_Equipment_Manager_copy__c; tempUser.Buzhang_Equipment_Manager_copy__c = null; IsUpdate = true; } //SWAG-BEM9EP end // 从总监部长经理赋值到备份,总监部长经理设置为转授权人 if (tempUser.ZongjianApprovalManager__c != null && SubAuthorizedMap.containsKey(tempUser.ZongjianApprovalManager__c) && checkSubAuthorized(SubAuthorizedMap.get(tempUser.ZongjianApprovalManager__c)) ) { tempUser.ZongjianApprovalManager_copy__c = tempUser.ZongjianApprovalManager__c; tempUser.ZongjianApprovalManager__c = SubAuthorizedMap.get(tempUser.ZongjianApprovalManager__c).Authorizee__c ; IsUpdate = true; } if (tempUser.TongkuoZongjian__c != null && SubAuthorizedMap.containsKey(tempUser.TongkuoZongjian__c) && checkSubAuthorized(SubAuthorizedMap.get(tempUser.TongkuoZongjian__c)) ) { tempUser.TongkuoZongjian_copy__c = tempUser.TongkuoZongjian__c; tempUser.TongkuoZongjian__c = SubAuthorizedMap.get(tempUser.TongkuoZongjian__c).Authorizee__c ; IsUpdate = true; } if (tempUser.BuchangApprovalManager__c != null && SubAuthorizedMap.containsKey(tempUser.BuchangApprovalManager__c) && checkSubAuthorized(SubAuthorizedMap.get(tempUser.BuchangApprovalManager__c)) ) { tempUser.BuchangApprovalManager_copy__c = tempUser.BuchangApprovalManager__c; tempUser.BuchangApprovalManager__c = SubAuthorizedMap.get(tempUser.BuchangApprovalManager__c).Authorizee__c ; IsUpdate = true; } if (tempUser.BuchangApprovalManagerSales__c != null && SubAuthorizedMap.containsKey(tempUser.BuchangApprovalManagerSales__c) && checkSubAuthorized(SubAuthorizedMap.get(tempUser.BuchangApprovalManagerSales__c)) ) { tempUser.BuchangApprovalManagerSales_copy__c = tempUser.BuchangApprovalManagerSales__c; tempUser.BuchangApprovalManagerSales__c = SubAuthorizedMap.get(tempUser.BuchangApprovalManagerSales__c).Authorizee__c ; IsUpdate = true; } if (tempUser.JingliApprovalManager__c != null && SubAuthorizedMap.containsKey(tempUser.JingliApprovalManager__c) && checkSubAuthorized(SubAuthorizedMap.get(tempUser.JingliApprovalManager__c)) ) { tempUser.JingliApprovalManager_copy__c = tempUser.JingliApprovalManager__c; tempUser.JingliApprovalManager__c = SubAuthorizedMap.get(tempUser.JingliApprovalManager__c).Authorizee__c ; IsUpdate = true; } if (tempUser.SalesManager__c != null && SubAuthorizedMap.containsKey(tempUser.SalesManager__c) && checkSubAuthorized(SubAuthorizedMap.get(tempUser.SalesManager__c)) ) { tempUser.SalesManager_copy__c = tempUser.SalesManager__c; tempUser.SalesManager__c = SubAuthorizedMap.get(tempUser.SalesManager__c).Authorizee__c ; IsUpdate = true; } if (tempUser.ManagerId != null && SubAuthorizedMap.containsKey(tempUser.ManagerId ) && checkSubAuthorized(SubAuthorizedMap.get(tempUser.ManagerId )) ) { tempUser.ManagerId_copy__c = tempUser.ManagerId ; tempUser.ManagerId = SubAuthorizedMap.get(tempUser.ManagerId ).Authorizee__c ; IsUpdate = true; } //SWAG-BEM9EP start if (tempUser.JingliEquipmentManager__c != null && SubAuthorizedMap.containsKey(tempUser.JingliEquipmentManager__c ) && checkSubAuthorized(SubAuthorizedMap.get(tempUser.JingliEquipmentManager__c )) ) { tempUser.JingliEquipmentManager_copy__c = tempUser.JingliEquipmentManager__c ; tempUser.JingliEquipmentManager__c = SubAuthorizedMap.get(tempUser.JingliEquipmentManager__c ).Authorizee__c ; IsUpdate = true; } if (tempUser.Buzhang_Equipment_Manager__c != null && SubAuthorizedMap.containsKey(tempUser.Buzhang_Equipment_Manager__c ) && checkSubAuthorized(SubAuthorizedMap.get(tempUser.Buzhang_Equipment_Manager__c )) ) { tempUser.Buzhang_Equipment_Manager_copy__c = tempUser.Buzhang_Equipment_Manager__c ; tempUser.Buzhang_Equipment_Manager__c = SubAuthorizedMap.get(tempUser.Buzhang_Equipment_Manager__c ).Authorizee__c ; IsUpdate = true; } //SWAG-BEM9EP end if (IsUpdate) { UpdateUserList.add(tempUser); } } // 先更新经理部长总监改了的用户 if (UpdateUserList.size() > 0) { update UpdateUserList; } // 设置转授权功能是否授权数据 updateSubAuthorizedList(SubAuthorizedList); } global void finish(Database.BatchableContext BC) { // 2021-09-17 mzy WLIG-BYHD79 SFDC环境batch合并调查 start if(!System.Test.isRunningTest() &&IsNeedExecute==true){ //batch里调用下一个batch时,希望跟原有的Schedule里面传的条数保持一致 Id execBTId = Database.executebatch(new UpdateOPDStatusAndReasonBatch(),100); } // 2021-09-17 mzy WLIG-BYHD79 SFDC环境batch合并调查 end } // 设置转授权功能是否授权数据 private static void updateSubAuthorizedList(list SubAuthorizedList) { List updateSubAuthorizedList = new List(); for ( SubAuthorized__c SubAuthor : SubAuthorizedList) { if (checkSubAuthorized(SubAuthor) && !SubAuthor.IsAuthorize__c) { SubAuthor.IsAuthorize__c = true; updateSubAuthorizedList.add(SubAuthor); } else if (SubAuthor.IsAuthorize__c) { SubAuthor.IsAuthorize__c = false; updateSubAuthorizedList.add(SubAuthor); } } system.debug('---------4-------------updateSubAuthorizedList:' + updateSubAuthorizedList); // 后更新是否授权 ,如果用户更新失败,那么就不会更新是否授权 if (updateSubAuthorizedList.size() > 0) { update updateSubAuthorizedList; } } // 判断这个转授权是需要转审批还是需要取消转审批 public static boolean checkSubAuthorized(SubAuthorized__c SubAuthorized) { if (SubAuthorized == null) { return false; } Date today = Date.today(); Date tomorrow = today.addDays(1); Date twoDayLater = today.addDays(2); if (SubAuthorized.Status__c != null && SubAuthorized.Status__c.equals('已批准') && SubAuthorized.IsAuthorize__c == false && SubAuthorized.AuthorizedStartDate__c <= tomorrow && SubAuthorized.AuthorizedEndDate__c >= twoDayLater ) { return true; } return false; } }