高章伟
2022-02-18 8b5f4c6c281cfa548f92de52c8021e37aa81901e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
public without sharing class OpportunityBiddingHandler extends Oly_TriggerHandler {
    private Map<Id, Enquiry_No_Bidding_Apply__c> newMap;
    private Map<Id, Enquiry_No_Bidding_Apply__c> oldMap;
    private List<Enquiry_No_Bidding_Apply__c> newList;
    private List<Enquiry_No_Bidding_Apply__c> oldList;
    public OpportunityBiddingHandler() {
        this.newMap = (Map<Id, Enquiry_No_Bidding_Apply__c>) Trigger.newMap;
        this.oldMap = (Map<Id, Enquiry_No_Bidding_Apply__c>) Trigger.oldMap;
        this.newList = (List<Enquiry_No_Bidding_Apply__c>) Trigger.new;
        this.oldList = (List<Enquiry_No_Bidding_Apply__c>) Trigger.old;
    }
    // protected override void beforeUpdate() {
    //  ();
    // }
    // @override
    //根据ocsm管理省的Gi助理为询价不应标申请中的主负责人(助理)赋值
    protected override void beforeInsert() {
        AssignValueToAssistant();
    }
 
    protected override void beforeUpdate() {
        AssignValueToAssistant();
    }
    protected override void afterUpdate() {
        addOpp();
        //add by rentx 20210726 start
        addShare();
        //add by rentx 20210726 end
    }
    protected override void afterInsert() {
        
        //add by rentx 20210726 start
        addShare();
        //add by rentx 20210726 end
    }
 
    //当审批流程走完时 更新 询价相关字段
    private void addOpp() {
        // List<Tender_information__c> TenInfoList = [select Id, IsReactionOpp__c from Tender_information__c];
        List<Opportunity> OppIdList = new List<Opportunity>();
        Map<Id, Opportunity> updateOppMap = new Map<Id, Opportunity>();
        List<Tender_information__c> updateTenList = new List<Tender_information__c>();
        // 遍历询价
        for (Enquiry_No_Bidding_Apply__c Enbas : newList) {
            // 如果新的状态!=更新之前的状态,现在的状态=批准 (将给询价中的是否应标赋值为否)
            if ((Enbas.NotBidApprovalStatus__c != oldMap.get(Enbas.Id).NotBidApprovalStatus__c) && Enbas.NotBidApprovalStatus__c == '批准') {
 
                String oppId = Enbas.Opportunity__c;
                if (String.isNotBlank(oppId)) {
                    Opportunity opp = new Opportunity();
                    opp.Id = oppId;
                    // System.debug('----1----' + opp.Bidding_Project_Name_Bid__c);
                    opp.Whether_Bidding__c = '否';
                    updateOppMap.put(oppId, opp);
                }
            }
        }
 
        if (updateOppMap.values().size() > 0) {
            update updateOppMap.values();
            List<Opportunity> oppInfoList = [select Id, Bidding_Project_Name_Bid__c from Opportunity where Id in :updateOppMap.keySet() and Bidding_Project_Name_Bid__c != null];
            for (Opportunity opp : oppInfoList) {
                Tender_information__c TenInfo = new Tender_information__c();
                TenInfo.Id = opp.Bidding_Project_Name_Bid__c;
                TenInfo.IsReactionOpp__c = true;
                updateTenList.add(TenInfo);
            }
        }
        if (updateTenList.size() > 0) {
            System.debug('----3----' + updateTenList.size());
            update updateTenList;
        }
    }
    //根据ocsm管理省的Gi助理为询价不应标申请中的主负责人(助理)赋值
    private void AssignValueToAssistant() {
        // 通过OCSM管理省,关联招投标 与 管理省
        Map<String, OCM_Management_Province__c> mpMap = new Map<String, OCM_Management_Province__c>();
        // 关联询价与询价不应标申请
        Map<Id, Enquiry_No_Bidding_Apply__c > oppMap = new Map<Id, Enquiry_No_Bidding_Apply__c >();
        // 查 询价不应标申请数据
        List<OCM_Management_Province__c> OCMinfoList = [SELECT id, Name, GI_assistant__c, GI_assistant__r.IsActive FROM OCM_Management_Province__c];
 
        for (OCM_Management_Province__c mp : OCMinfoList) {
            mpMap.put(mp.Name, mp);
        }
 
        //直接设置 信息负责人(助理) 为GI助理
        for (Enquiry_No_Bidding_Apply__c Enbainfos : newList) {
            oppMap.put(Enbainfos.Opportunity__c, Enbainfos);
        }
        // 关联 招投标 与 询价
        Map<Enquiry_No_Bidding_Apply__c, String> EnquiryMap = new Map<Enquiry_No_Bidding_Apply__c, String>();
        // 通过 与 询价 关联的 询价不应标申请 查对应的询价(多此一举,易理解)
        List<Opportunity> oppinfoList = [SELECT id, OCM_man_province__c, Bidding_Project_Name_Bid__c, Bidding_Project_Name_Bid__r.OCSMProvince__c FROM Opportunity Where Id In: oppMap.keySet()];
        for (Opportunity Oppinfos : oppinfoList) {
            EnquiryMap.put(oppMap.get(Oppinfos.Id), Oppinfos.OCM_man_province__c );
        }
        List<Enquiry_No_Bidding_Apply__c> EnquiryList = new List<Enquiry_No_Bidding_Apply__c>();
        for (Enquiry_No_Bidding_Apply__c Enbainfo : newList) {
            if (EnquiryMap.get(Enbainfo) != null && oppMap.keySet() != null) {
               // Enbainfo.leading_Cadre_Assistant__c = mpMap.get(EnquiryMap.get(Enbainfo)).GI_assistant__c;
                EnquiryList.add(Enbainfo);
            }
 
        }
        // if (EnquiryList.size() > 0) {
        //  upsert EnquiryList;
        // }
    }
 
    //add by rentx 20210726 start
    public void addShare(){
        //获取共享原因
        String rowCauseXinxi = Schema.Enquiry_No_Bidding_Apply__Share.RowCause.Xinxi__c;
        
        List<String> rowCauseList = new List<String>();
        rowCauseList.add(rowCauseXinxi);
 
        //设置共享
        Map<Id,Enquiry_No_Bidding_Apply__Share> sharemap = new Map<Id,Enquiry_No_Bidding_Apply__Share>();
 
        List<Enquiry_No_Bidding_Apply__Share> enqShareList = new List<Enquiry_No_Bidding_Apply__Share>();
        for (Enquiry_No_Bidding_Apply__c enq : newList) {
            //判断 如果信息负责人不是owner 则设置共享
            if (enq.leading_Cadre_Assistant__c != enq.OwnerId && enq.leading_Cadre_Assistant__c != null) {
                Enquiry_No_Bidding_Apply__Share aos = new Enquiry_No_Bidding_Apply__Share(
                    RowCause = rowCauseXinxi,
                    ParentId = enq.Id,
                    UserOrGroupId = enq.leading_Cadre_Assistant__c,
                    AccessLevel = 'Edit');
                sharemap.put(enq.leading_Cadre_Assistant__c, aos);
            }
        }
 
        //先删再加
        List<Enquiry_No_Bidding_Apply__Share> beforeShareList = 
            [select id from Enquiry_No_Bidding_Apply__Share 
             where ParentId in :newMap.keySet() 
             and RowCause in :rowCauseList];
        if (beforeShareList != null && beforeShareList.size() > 0) {
            delete beforeShareList;
        }
 
        if (sharemap != null && sharemap.size() > 0) {
            insert sharemap.values();
        }
    }
    //add by rentx 20210726 end
}