liuyn
2024-03-11 a87f1c3df03078814ee97ad0c8ac200a232419e9
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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
global class OCMTOTMSShareUserBatch  implements Database.Batchable<sObject> {
    String query;
    String targetId;
    private BatchIF_Log__c iflog;
    private String errStr;
    
    global OCMTOTMSShareUserBatch() {
        iflog = new BatchIF_Log__c();
        iflog.Type__c = 'OCMTOTMSShareUserBatch';
        iflog.Is_Error__c = 0;
        iflog.Log__c = 'OCMTOTMSShareUserBatch start1\n';
        iflog.ErrorLog__c = '';
        insert iflog;
    }
 
    global Database.QueryLocator start(Database.BatchableContext BC) {
        //共享给TMS对象 ET/ENG窗口 根据 省和 ET_ENG  
        query = 'select id,TMS_Province__c,Ownerid,ET_ENG__c from Dealer_ConsumableManage__c ';
        query += ' where ET_ENG__c !=null and TMS_Province__c!=null';
        // if (null!=mpMap) {
        //     query += ' and TMS_Province__c in :mpMap.keySet()';
        // }
        system.debug('=='+query);
        return Database.getQueryLocator(query);
 
    }
    global void execute(Database.BatchableContext BC, List<Dealer_ConsumableManage__c> tmsList) {
        String rowCause = Schema.Dealer_ConsumableManage__Share.RowCause.OCSMToTMSUser__c;
        List<Dealer_ConsumableManage__Share> temsharlist =new List<Dealer_ConsumableManage__Share>();
        Map<String, OCM_Management_Province__c> mpMap = new Map<String, OCM_Management_Province__c>();
        List<OCM_Management_Province__c> mpList = [select id, Name, GI_assistant__c, SP_assistant__c, Energy_assistant__c,Province__c,ET_DataWindow__c,ET_BusinessWindow__c,ET_Assistant1__c,ET_Assistant2__c,ENG_DataWindow__c,ENG_BusinessWindow__c,ENG_Assistant1__c,ENG_Assistant2__c,ENGShareOpp__c,ETShareOpp__c,ENG_Flag__c,ET_Flag__c,ET_DataWindow__r.IsActive,ET_BusinessWindow__r.IsActive,ET_Assistant1__r.IsActive,ET_Assistant2__r.IsActive,ENG_DataWindow__r.IsActive,ENG_BusinessWindow__r.IsActive,ENG_Assistant1__r.IsActive,ENG_Assistant2__r.IsActive from OCM_Management_Province__c];
        for (OCM_Management_Province__c mp : mpList) {
            mpMap.put(mp.Name, mp);
        }    
        List<Id> deletetemsharlist = new List<Id>();    
        for (Dealer_ConsumableManage__c nObj : tmsList) {
            if (mpMap.containsKey(nObj.TMS_Province__c)) {
                if(null!=nObj.ET_ENG__c && ''!= nObj.ET_ENG__c && null!=mpMap.get(nObj.TMS_Province__c)){
                    if(nObj.ET_ENG__c=='ET'){
                    if(mpMap.get(nObj.TMS_Province__c).ET_Flag__c==true){
                        if(null!=mpMap.get(nObj.TMS_Province__c).ET_DataWindow__c && !''.equals(mpMap.get(nObj.TMS_Province__c).ET_DataWindow__c) && nObj.Ownerid !=mpMap.get(nObj.TMS_Province__c).ET_DataWindow__c && mpMap.get(nObj.TMS_Province__c).ET_DataWindow__r.IsActive){
                            Dealer_ConsumableManage__Share tmsshare = new Dealer_ConsumableManage__Share(
                            ParentId = nObj.Id,
                            RowCause = rowCause,
                            UserOrGroupId = mpMap.get(nObj.TMS_Province__c).ET_DataWindow__c,
                            AccessLevel = 'read');
                            temsharlist.add(tmsshare);
                        }
                        if(null!=mpMap.get(nObj.TMS_Province__c).ET_BusinessWindow__c && !''.equals(mpMap.get(nObj.TMS_Province__c).ET_BusinessWindow__c) && nObj.Ownerid !=mpMap.get(nObj.TMS_Province__c).ET_BusinessWindow__c && mpMap.get(nObj.TMS_Province__c).ET_BusinessWindow__r.IsActive){
                            Dealer_ConsumableManage__Share tmsshare = new Dealer_ConsumableManage__Share(
                            ParentId = nObj.Id,
                            RowCause = rowCause,
                            UserOrGroupId = mpMap.get(nObj.TMS_Province__c).ET_BusinessWindow__c,
                            AccessLevel = 'read');
                            temsharlist.add(tmsshare);
                        }
                        if(null!=mpMap.get(nObj.TMS_Province__c).ET_Assistant1__c && !''.equals(mpMap.get(nObj.TMS_Province__c).ET_Assistant1__c) && nObj.Ownerid !=mpMap.get(nObj.TMS_Province__c).ET_Assistant1__c && mpMap.get(nObj.TMS_Province__c).ET_Assistant1__r.IsActive){
                            Dealer_ConsumableManage__Share tmsshare = new Dealer_ConsumableManage__Share(
                            ParentId = nObj.Id,
                            RowCause = rowCause,
                            UserOrGroupId = mpMap.get(nObj.TMS_Province__c).ET_Assistant1__c,
                            AccessLevel = 'read');
                            temsharlist.add(tmsshare);
                        }  
                        if(null!=mpMap.get(nObj.TMS_Province__c).ET_Assistant2__c && !''.equals(mpMap.get(nObj.TMS_Province__c).ET_Assistant2__c) && nObj.Ownerid !=mpMap.get(nObj.TMS_Province__c).ET_Assistant2__c && mpMap.get(nObj.TMS_Province__c).ET_Assistant2__r.IsActive){
                            Dealer_ConsumableManage__Share tmsshare = new Dealer_ConsumableManage__Share(
                            ParentId = nObj.Id,
                            RowCause = rowCause,
                            UserOrGroupId = mpMap.get(nObj.TMS_Province__c).ET_Assistant2__c,
                            AccessLevel = 'read');
                            temsharlist.add(tmsshare);     
                        }
                        deletetemsharlist.add(nObj.Id);    
                    }
                        
                    }else{//ENG 
                    if(mpMap.get(nObj.TMS_Province__c).ENG_Flag__c==true){
                        if(null!=mpMap.get(nObj.TMS_Province__c).ENG_DataWindow__c && !''.equals(mpMap.get(nObj.TMS_Province__c).ENG_DataWindow__c) && nObj.Ownerid !=mpMap.get(nObj.TMS_Province__c).ENG_DataWindow__c && mpMap.get(nObj.TMS_Province__c).ENG_DataWindow__r.IsActive){
                            Dealer_ConsumableManage__Share tmsshare = new Dealer_ConsumableManage__Share(
                            ParentId = nObj.Id,
                            RowCause = rowCause,
                            UserOrGroupId = mpMap.get(nObj.TMS_Province__c).ENG_DataWindow__c,
                            AccessLevel = 'read');
                            temsharlist.add(tmsshare);
                        }
                        if(null!=mpMap.get(nObj.TMS_Province__c).ENG_BusinessWindow__c && !''.equals(mpMap.get(nObj.TMS_Province__c).ENG_BusinessWindow__c) && nObj.Ownerid !=mpMap.get(nObj.TMS_Province__c).ENG_BusinessWindow__c && mpMap.get(nObj.TMS_Province__c).ENG_BusinessWindow__r.IsActive){
                            Dealer_ConsumableManage__Share tmsshare = new Dealer_ConsumableManage__Share(
                            ParentId = nObj.Id,
                            RowCause = rowCause,
                            UserOrGroupId = mpMap.get(nObj.TMS_Province__c).ENG_BusinessWindow__c,
                            AccessLevel = 'read');
                            temsharlist.add(tmsshare);
                        }
                        if(null!=mpMap.get(nObj.TMS_Province__c).ENG_Assistant1__c && !''.equals(mpMap.get(nObj.TMS_Province__c).ENG_Assistant1__c) && nObj.Ownerid !=mpMap.get(nObj.TMS_Province__c).ENG_Assistant1__c && mpMap.get(nObj.TMS_Province__c).ENG_Assistant1__r.IsActive){
                            Dealer_ConsumableManage__Share tmsshare = new Dealer_ConsumableManage__Share(
                            ParentId = nObj.Id,
                            RowCause = rowCause,
                            UserOrGroupId = mpMap.get(nObj.TMS_Province__c).ENG_Assistant1__c,
                            AccessLevel = 'read');
                            temsharlist.add(tmsshare);
                        }
                        if(null!=mpMap.get(nObj.TMS_Province__c).ENG_Assistant2__c && !''.equals(mpMap.get(nObj.TMS_Province__c).ENG_Assistant2__c) && nObj.Ownerid !=mpMap.get(nObj.TMS_Province__c).ENG_Assistant2__c && mpMap.get(nObj.TMS_Province__c).ENG_Assistant2__r.IsActive){
                            Dealer_ConsumableManage__Share tmsshare = new Dealer_ConsumableManage__Share(
                            ParentId = nObj.Id,
                            RowCause = rowCause,
                            UserOrGroupId = mpMap.get(nObj.TMS_Province__c).ENG_Assistant2__c,
                            AccessLevel = 'read');
                            temsharlist.add(tmsshare);
                        }
                        deletetemsharlist.add(nObj.Id);    
                    }
                    }
                    
                }
                
            }
        }  
        try{
            // 先 Delete 后 Insert
            if (null!=deletetemsharlist && deletetemsharlist.size() > 0) {
                List<Dealer_ConsumableManage__Share> deleteList = [SELECT Id
                    FROM Dealer_ConsumableManage__Share
                    WHERE RowCause = :rowCause
                    AND ParentId IN :deletetemsharlist
                ];
                if(null!=deleteList && deleteList.size()>0){
                    delete deleteList;
                }
                system.debug('删除得TMS共享数据'+deleteList.size());
            }
            system.debug('插入得TMS共享数据'+temsharlist.size());
            if(null!=temsharlist && temsharlist.size()>0){
                insert temsharlist;
            }
        }catch(Exception e){
            errStr += e.getMessage()+'\n';
            errStr += 'TMS插入的共享==='+temsharlist.size()+temsharlist+'\n';
            errStr += 'TMS需要删除的共享==='+deletetemsharlist.size()+'\n'+deletetemsharlist+'\n';
            errStr += e.getLineNumber()+'\n';
        }  
    }
    global void finish(Database.BatchableContext BC) {
        String tmp = '';
        if (String.isNotBlank(errStr)) {
            tmp = errStr;
        }
        iflog.Log__c += 'OCMTOTMSShareUserBatch finish()\n';
        iflog.Log__c += '\n OCMTOTMSShareUserBatch end';
 
        tmp += iflog.ErrorLog__c;
        if (tmp.length() > 60000) {
          tmp = tmp.substring(0, 60000);
          tmp += ' ...have more lines...';
          iflog.ErrorLog__c = tmp;
        }
        String tmp2 = iflog.Log__c;
        if (tmp2.length() > 60000) {
          tmp2 = tmp2.substring(0, 60000);
          tmp2 += ' ...have more lines...';
          iflog.Log__c = tmp2;
        }
        
        update iflog;
        Database.executeBatch(new OCMTOIMSShareUserBatch(),200);
    } 
     
}