public without sharing class InquiryFormHandler extends Oly_TriggerHandler {
		private Map<Id, Inquiry_form__c> newMap;
	    private Map<Id, Inquiry_form__c> oldMap;
	    private List<Inquiry_form__c> newList;
	    private List<Inquiry_form__c> oldList;

    public InquiryFormHandler(){

 		this.newMap = (Map<Id, Inquiry_form__c>) Trigger.newMap;
        this.oldMap = (Map<Id, Inquiry_form__c>) Trigger.oldMap;
        this.newList = (List<Inquiry_form__c>) Trigger.new;
        this.oldList = (List<Inquiry_form__c>) Trigger.old;
        
    }

    protected override void beforeInsert() {
        beforeExecute();
    }
    protected override void beforeUpdate() {
        beforeExecute();
    }

    protected override void afterInsert() {
        shareToOSCM();
    }

     protected override void afterUpdate() {
        shareToOSCM();
    }
     //Before処理
    private void beforeExecute() {
        Map<Id,Inquiry_form__c> accMap = new Map<Id,Inquiry_form__c>();
        for(Inquiry_form__c nObj : newList) {
        	List<Account> accList  = [Select Id,OwnerId from Account where Id =: nObj.Department_ID__c];
        	for(Account acc : accList){
        		nObj.Depart_Owner__c = acc.OwnerId;
        	}
        }
    }
    
     // 战略科室的主担当 を取得、Inquiry_form__Shareに設定(Read)
    private void shareToOSCM() {
        //存放用于新增的共享数据
        List<Inquiry_form__Share> insertList = new List<Inquiry_form__Share>();
        //存放(会议询问单id,共享对象)
        Map<Id,Inquiry_form__Share> insertMap = new Map<Id,Inquiry_form__Share>();
        //存放最后需要新增的共享数据
        List<Inquiry_form__Share> lastInsertList = new List<Inquiry_form__Share>();
        //存放已有的相同的共享原因的数据
        List<Id> deleteTargetAOIdList = new List<Id>();
        //存放用于的id
        List<Id> userIdList = new List<Id>();
        // String rowCause = 'Manual';
        //新增一个共享原因
        String rowCause = Schema.Inquiry_form__Share.RowCause.OCSM_Owner_c_User__c;
        System.debug('rowCause:'+rowCause);
        String ownerCause = 'Owner';
        //Apex共有の理由名OCSM_Owner_c_User
        for(Inquiry_form__c nObj : newList) {
            Inquiry_form__c oObj = null;
            System.debug('战略科室担当：'+nObj.Depart_Owner__c);
            if (oldMap != null && oldMap.containsKey(nObj.Id)) {
                oObj = oldMap.get(nObj.Id);
            }
            

            if ( nObj.Depart_Owner__c != null && (oObj == null || oObj.Depart_Owner__c != nObj.Depart_Owner__c)) {
                Inquiry_form__Share aos = new Inquiry_form__Share(
                        RowCause = rowCause,
                        ParentId = nObj.Id,
                        UserOrGroupId = nObj.Depart_Owner__c,
                        AccessLevel = 'Edit');
                //存放要新增的共享数据
                insertList.add(aos);
                System.debug('key:'+nObj.Id);
                //存放（会议询问单id,共享对象）;
                insertMap.put(nObj.Id,aos);
                //存放用户id 用作检索条件
                userIdList.add(nObj.Depart_Owner__c);
                if (oObj != null && oObj.Depart_Owner__c != nObj.Depart_Owner__c) {
                    deleteTargetAOIdList.add(nObj.Id);
                }
            }
        }
        System.debug('insertList:'+insertList);
        System.debug('insertMap1:'+insertMap);
        System.debug('IDlIST:'+deleteTargetAOIdList);
        // 先 Delete 后 Insert
        if (deleteTargetAOIdList.size() > 0) {
            List<Inquiry_form__Share> deleteList = [SELECT Id
                FROM Inquiry_form__Share
                WHERE RowCause = :rowCause
                  AND ParentId IN :deleteTargetAOIdList
            ];
            delete deleteList;
        }
        //判断需要共享的人  是不是创建人 如果是则说明有一条这个人的owner数据 则不新增
        if (insertMap!= null) {
            List<Inquiry_form__Share> ownerList = [SELECT Id,ParentId,UserOrGroupId
                FROM Inquiry_form__Share
                WHERE RowCause = :ownerCause
                  AND ParentId IN :insertMap.keySet()
                  AND UserOrGroupId IN :userIdList
            ];
            System.debug('ownerList:'+ownerList);
            if(ownerList.size() > 0){
                for( Inquiry_form__Share  inq:ownerList){
                    String id = String.valueOf(inq.ParentId);
                    System.debug('id:'+id);
                    if(insertMap.containsKey(id)){
                        insertMap.remove(inq.ParentId);
                    }
                }
            }
            
        }
        System.debug('insertMap2:'+insertMap);
        
        if(insertMap != null){
                for(Inquiry_form__Share inquiry : insertMap.values()){
                    lastInsertList.add(inquiry);
                }
        }
        

        System.debug('共享内容:' +lastInsertList);
        if(lastInsertList.size() > 0){
            insert lastInsertList;
        }
        
    }
}