/**
 * SFDC系统案件（修理/QIS）中新建附件或备注时，
 * 系统自动通知到相关业务人员
 * 其中备注会自动生成PDF附件
 */
public without sharing class AttachmentReQisHandler extends Oly_TriggerHandler{
    @TestVisible
    private Map<Id, Attachment> newMap;
    @TestVisible
    private Map<Id, Attachment> oldMap;
    @TestVisible
    private List<Attachment> newList;
    @TestVisible
    private List<Attachment> oldList;
    public AttachmentReQisHandler() {
        this.newMap = (Map<Id, Attachment>) Trigger.newMap;
        this.oldMap = (Map<Id, Attachment>) Trigger.oldMap;
        this.newList = (List<Attachment>) Trigger.new;
        this.oldList = (List<Attachment>) Trigger.old;
    }
    @TestVisible
    protected override void afterInsert() {
        // 修理ID
        NoteMail();
    }
    private void NoteMail() {
        String baseUrl = URL.getSalesforceBaseUrl().toExternalForm();
        List<Messaging.SingleEmailMessage> sendMails = new List<Messaging.SingleEmailMessage>();
        List<String> Rlist = new List<String>();
        List<String> ParentIdList = new List<String>();
        // QisID
        for (Attachment att : newList) {
            if(String.valueOf(att.ParentId).startsWith('a0J') 
                || String.valueOf(att.ParentId).startsWith('a0f')){
                Rlist.add(att.Id);
                ParentIdList.add(att.ParentId);
            }
        }
        List<Attachment> NtList = [Select id,ParentId,Name,Body FROM Attachment where Id in : Rlist];
        Map<Id,Repair__c> updateRprMap = new Map<Id,Repair__c>();
        Map<Id,QIS_Report__c> updateQisMap = new Map<Id,QIS_Report__c>();
        //DB202308180733 P-新投诉系统GCHS项目--SQL中加入新字段-刘川-Latest_upload_time_attachments__c
        for (Repair__c re :[select id,Name,SerialNumber__c,Delivered_Product__r.Name,HP_Name__c,Latest_upload_time_attachments__c
                                        from Repair__c where id in : ParentIdList]) {
            //DB202308180733 P-新投诉系统GCHS项目-刘川-新字段赋值 
            re.Latest_upload_time_attachments__c = DateTime.now();
            updateRprMap.put(re.id, re);
        }
        // 	DB202308180733 P-新投诉系统GCHS项目-刘川-更新字段
        if (updateRprMap != null && updateRprMap.size() > 0) {
            update updateRprMap.values();
        }
        for (QIS_Report__c qi :[select id,Name,lot_or_serial__c,nonyushohin__r.Name,Hospital__r.Name,Latest_upload_time_attachments__c
                                        from QIS_Report__c where id in : ParentIdList] ) {
            qi.Latest_upload_time_attachments__c = DateTime.now();
            updateQisMap.put(qi.id, qi);
        }
        //DB202308180733 P-新投诉系统GCHS项目-刘川-更新字段
        if (updateQisMap != null && updateQisMap.size() > 0) {
            update updateQisMap.values();
        }
        // Map<Id,Repair__c> updateRprMap = [select id,Name,SerialNumber__c,Delivered_Product__r.Name
        //                              from Repair__c where id in : ParentIdList];
        // Map<Id,QIS_Report__c>updateQisMap = [select id,Name,lot_or_serial__c,nonyushohin__r.Name 
        //                              from QIS_Report__c where id in : ParentIdList];
        List<group> gList = [SELECT (select userOrGroupId from groupMembers) FROM group WHERE name = '附件上传通知小组'];
        List<String> IdList = new List<String>();
        if (gList != null && gList.size() > 0) {
            for (Group g : gList) {
                for (GroupMember gm : g.groupMembers) {
                    IdList.add(gm.userOrGroupId);
                }
            }
        }
        List<User> userList = [select Id, Name, Email, Manager.Email from User where id IN :IdList];
        for (Attachment nt : NtList) {
            String titName = updateRprMap.containsKey(nt.ParentId)? updateRprMap.get(nt.ParentId).Name : updateQisMap.get(nt.ParentId).Name;
            String prname = updateRprMap.containsKey(nt.ParentId)? updateRprMap.get(nt.ParentId).Delivered_Product__r.Name : updateQisMap.get(nt.ParentId).nonyushohin__r.Name;
            String Serial = updateRprMap.containsKey(nt.ParentId)? updateRprMap.get(nt.ParentId).SerialNumber__c : updateQisMap.get(nt.ParentId).lot_or_serial__c;
            String accountname = updateRprMap.containsKey(nt.ParentId)? updateRprMap.get(nt.ParentId).HP_Name__c : updateQisMap.get(nt.ParentId).Hospital__r.Name;
            String title = '';
            String body = '';
            title = '【修理/QIS】：' + titName + '已新增附件，请查看';
            body += '用户名：' + accountname;
            body += '<br/>';
            body += '产品名称/型号 ：' + prname;
            body += '<br/>';
            body += '机身号/批号 ：' + Serial;
            body += '<br/>';
            body += '附件名称/备注名称：' + nt.Name;
            body += '<br/>';
            body += '操作担当：' + UserInfo.getName();
            body += '<br/>';
            body += '<br/>';
            body += '链接：' + baseUrl + '/' + nt.ParentId +' ';
            //收件邮箱
            List<String> toMailList = new List<String>();
            String uId = UserInfo.getUserId();
            for (User u : userList) {
                if (u.Id != uId) {
                    toMailList.add(u.Email);
                }
            }
            //抄送的邮箱
            List<String> ccMailList = new List<String>();
            ccMailList.add('gaozhangwei@prec-tech.com');
            ccMailList.add('wei_liang@olympus.com.cn');
            Messaging.SingleEmailMessage messageNEW = new Messaging.SingleEmailMessage();
            messageNEW.subject = title;
            messageNEW.htmlBody = body;
            messageNEW.setCharset('UTF-8');
            messageNEW.toAddresses = toMailList;
            if(ccMailList.size() > 0){
                messageNEW.ccAddresses = ccMailList;
            }
            sendMails.add(messageNEW);
        }
        //在单个事务中，只能调用send方法 10 次。
        Messaging.SendEmailResult[] results = messaging.sendEmail(sendMails);
    }
}