public without sharing class UserFaultInfoHandler { public static void UserFaultInfoWorkingHoursAssignment(List newList, Map newMap, List oldList, Map oldMap, String type) { // 获取用户/故障信息下的业务活动 List selectUserFaultInfoIdList = new List(); for (User_FaultInfo__c uf : newList) { selectUserFaultInfoIdList.add(uf.Id); } // 查找用户故障信息下所有的业务活动 List businessActivityList = TSRepairUtil.GetBusinessActivityList(null, selectUserFaultInfoIdList, null, null, null, ''); // 用户/故障信息 根据 审批意见 类型与 工时组成的Map Map OpinionMap = new Map(); // 用户/故障信息 Id与工时组成的Map Map> WorkingHourMap = new Map>(); if (businessActivityList != null && businessActivityList.size() > 0) { for (BusinessActivity__c getba : businessActivityList) { String ufId = getba.User_FaultInfo__c; String opinion = getba.BusinessAApprovalOpinion__c; Decimal workingHours = 0; Map ufOpinionMap = new Map(); if (WorkingHourMap.containsKey(ufId)) { ufOpinionMap = WorkingHourMap.get(ufId); if (ufOpinionMap.containsKey(opinion)) { workingHours = ufOpinionMap.get(opinion); workingHours += getba.workingHours__c; ufOpinionMap.put(opinion, workingHours); } else { workingHours += getba.workingHours__c; ufOpinionMap.put(opinion, workingHours); } } else { workingHours += getba.workingHours__c; ufOpinionMap.put(opinion, workingHours); } WorkingHourMap.put(ufId, ufOpinionMap); } List updateUserFaultInfoList = new List(); for (User_FaultInfo__c uf : newList) { for (String ufId : WorkingHourMap.keySet() ) { if (uf.Id.equals(ufId)) { Map ufOpinionMap = WorkingHourMap.get(ufId); uf.UserFaultInfoWorkingHours__c = 0; uf.UserFaultInfoUnconfirmedTime__c = 0; for (String opinion : ufOpinionMap.keySet()) { if ('同意'.equals(opinion)) { uf.UserFaultInfoWorkingHours__c = ufOpinionMap.get(opinion); } else { uf.UserFaultInfoUnconfirmedTime__c = ufOpinionMap.get(opinion); } } } } if ('insert'.equals(type)) { updateUserFaultInfoList.add(uf); } } if (updateUserFaultInfoList.size() > 0) { update updateUserFaultInfoList; } } } public static void BeforeSendEmail(List newList, Map newMap, List oldList, Map oldMap) { for (User_FaultInfo__c newUf : newList) { newUf.IsSendEmail__c = true; } } // Case 上 ASSIGNED TO 变更 发送邮件 public static void ASSIGNEDTOChange(List newList, Map newMap, List oldList, Map oldMap) { List insertShareList = new List(); List deleteShareList = new List(); for (User_FaultInfo__c newUf : newList) { Boolean beforUpdate = false; Boolean isSendEmail = false; Boolean afterInsert = false; Boolean changeASSIGNED_TO = false; Boolean changeCONTACT = false; if (Trigger.isBefore && Trigger.isUpdate) { isSendEmail = true; User_FaultInfo__c oldUf = oldMap.get(newUf.Id); // ASSIGNED TO 变更时发送邮件 if (String.isNotBlank(newUf.ASSIGNED_TO__c) && oldUf.ASSIGNED_TO__c != newUf.ASSIGNED_TO__c) { //变更时发送邮件 beforUpdate = true; changeASSIGNED_TO = true; insertShareList.add(ShareToUser(newUf.Id, newUf.ASSIGNED_TO__c)); deleteShareList.add(newUf.Id); } // CONTACT 变更时发送邮件 if (String.isNotBlank(newUf.CONTACT__c) && oldUf.CONTACT__c != newUf.CONTACT__c) { beforUpdate = true; changeCONTACT = true; } if (oldUf.INTERNAL_ONLY__c != newUf.INTERNAL_ONLY__c && newUf.INTERNAL_ONLY__c) { beforUpdate = true; changeASSIGNED_TO = true; } if (oldUf.SEND_TO_CUSTOMER__c != newUf.SEND_TO_CUSTOMER__c && newUf.SEND_TO_CUSTOMER__c) { beforUpdate = true; changeCONTACT = true; } } else if (Trigger.isAfter && Trigger.isInsert) { if (String.isNotBlank(newUf.ASSIGNED_TO__c)) { insertShareList.add(ShareToUser(newUf.Id, newUf.ASSIGNED_TO__c)); //新增时发送邮件 afterInsert = true; } } String userId = ''; String contactId = ''; String subjectStr = ''; String messageStr = newUf.Interactions__c == null ? '' : newUf.Interactions__c + '\n'; messageStr += 'Case Details Link:\n'; messageStr += System.Label.EnvironmentLink + newUf.Id; if (newUf.INTERNAL_ONLY__c || changeASSIGNED_TO) { userId = newUf.ASSIGNED_TO__c; } if (newUf.SEND_TO_CUSTOMER__c || changeCONTACT) { contactId = newUf.CONTACT__c; } if (newUf.Interactions__c != null) { if (afterInsert) { } else { newUf.interactionsHistory__c = interactionsHistory(newUf); newUf.Interactions__c = null; beforUpdate = true; if (newUf.IsSendEmail__c) { beforUpdate = false; newUf.IsSendEmail__c = false; } } } else { if (isSendEmail) { if (newUf.IsSendEmail__c) { newUf.IsSendEmail__c = false; } } } if (beforUpdate) { subjectStr = 'You have connected a new case, please follow up in time.'; SendEmail(userId, contactId, newUf.Id, subjectStr, messageStr, 'update'); } if (afterInsert) { subjectStr = 'A case has been created, please follow up in time.'; SendEmail(userId, contactId , newUf.Id, subjectStr, messageStr, 'insert'); } } // 删除数据共享 if (deleteShareList.size() > 0) { String rowCause = Schema.User_FaultInfo__Share.RowCause.shareToUser__c; List deleteList = [SELECT Id FROM User_FaultInfo__Share WHERE RowCause = :rowCause AND ParentId IN :deleteShareList]; if (deleteList.size() > 0) { delete deleteList; } } // 新增数据共享 if (insertShareList.size() > 0) { insert insertShareList; } } public static void SendEmail(String userId, String contactId, String ufId, String subjectStr, String messageStr, String type) { User_FaultInfo__c getCase = [ SELECT Id, Name, NUMBER__c, SUBJECT__c, COMPANY__r.Name FROM User_FaultInfo__c WHERE Id = :ufId]; String caseName = getCase.Name; // 保存之后要拼接 Case 的Name if ('insert'.equals(type)) { caseName = getCase.NUMBER__c + '-' + getCase.SUBJECT__c + '-' + getCase.COMPANY__r.Name; if (caseName.length() > 80) { caseName = caseName.substring(0, 80); } } List toAddresses = new List(); if (String.isNotBlank(userId)) { User user = [select Name, Email from User where id = :userId limit 1]; if (user != null && String.isNotBlank(user.Email)) { toAddresses.add(user.Email); } } if (String.isNotBlank(contactId)) { List contactList = [SELECT Id, Name, AccountId__c, EmailD__c FROM Contact WHERE Id = :contactId limit 1]; if (contactList.size() > 0 && String.isNotBlank(contactList[0].EmailD__c)) { toAddresses.add(contactList[0].EmailD__c); } } if (toAddresses.size() > 0) { String subject = subjectStr + ' ~Case:' + caseName; String message = messageStr; List ccAddresses = new List(); Messaging.SingleEmailMessage sendMail = new Messaging.SingleEmailMessage(); sendMail.setToAddresses(toAddresses); sendMail.setSubject(subject); sendMail.setPlainTextBody(message); sendMail.setBccSender(false); sendMail.setUseSignature(false); ccAddresses.add(System.label.EmailComeBackListen); ccAddresses.add('Dai_Prectech@olympus.com.cn'); // ccAddresses.add('xinhonglu@prec-tech.com'); ccAddresses.add('Xin_Prectech@olympus.com.cn'); sendMail.setCcAddresses(ccAddresses); Messaging.SendEmailResult[] result_list = Messaging.sendEmail(new Messaging.SingleEmailMessage[] { sendMail }); } } /* parentId:数据Id userOrGroupId:待分享的用户Id 创建数据共享 */ public static User_FaultInfo__Share ShareToUser (String parentId, String userOrGroupId) { String rowCause = Schema.User_FaultInfo__Share.RowCause.shareToUser__c; User_FaultInfo__Share apexShare = new User_FaultInfo__Share( RowCause = rowCause, ParentId = parentId, UserOrGroupId = userOrGroupId, AccessLevel = 'Edit'); return apexShare; } public static String interactionsHistory(User_FaultInfo__c uf) { // 送信者 String username = UserInfo.getName(); // 发送时间 Datetime dt = Datetime.now(); // 现留言 String temp = ''; temp += '****** ' + username + ' ' + dt.format() + ' ******\n'; temp += uf.Interactions__c; String oldResponse = uf.interactionsHistory__c; if (oldResponse != null && oldResponse.trim().length() > 0) { temp += '\n\n' + oldResponse; } // uf.Interactions__c = null; // uf.interactionsHistory__c = temp; return temp; } }