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
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
global class OCMTOIMSShareUserBatch  implements Database.Batchable<sObject>{
    String query;
    String targetId;
    private BatchIF_Log__c iflog;
    private String errStr;
    
    global OCMTOIMSShareUserBatch() {
        iflog = new BatchIF_Log__c();
        iflog.Type__c = 'OCMTOIMSShareUserBatch';
        iflog.Is_Error__c = 0;
        iflog.Log__c = 'OCMTOIMSShareUserBatch start1\n';
        iflog.ErrorLog__c = '';
        insert iflog;
    }
    
    global Database.QueryLocator start(Database.BatchableContext BC) {
        //共享给IMS对象 ET/ENG窗口  根据省(医院)和 产品类型
        query = 'select id,H_OCM_man_province_HP__c,Ownerid,productType__c from ConsumableTargetManage__c ';
        query += ' where productType__c !=null and H_OCM_man_province_HP__c !=null ';
        return Database.getQueryLocator(query);
 
    }
    global void execute(Database.BatchableContext BC, List<ConsumableTargetManage__c> imsList) {
        String imsrowCause = Schema.ConsumableTargetManage__Share.RowCause.OCSMToIMSUser__c;
        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<ConsumableTargetManage__Share> imssharlist =new List<ConsumableTargetManage__Share>();
        List<Id> deleteimssharlist = new List<Id>();  
        for (ConsumableTargetManage__c nObj : imsList) {
            if (mpMap.containsKey(nObj.H_OCM_man_province_HP__c)) {
                if(null!=nObj.productType__c && ''!= nObj.productType__c && null!=mpMap.get(nObj.H_OCM_man_province_HP__c)){
                    if(nObj.productType__c=='ET耗材'){
                    if(mpMap.get(nObj.H_OCM_man_province_HP__c).ET_Flag__c==true){
                            if(null!=mpMap.get(nObj.H_OCM_man_province_HP__c).ET_DataWindow__c && !''.equals(mpMap.get(nObj.H_OCM_man_province_HP__c).ET_DataWindow__c) && nObj.Ownerid !=mpMap.get(nObj.H_OCM_man_province_HP__c).ET_DataWindow__c && mpMap.get(nObj.H_OCM_man_province_HP__c).ET_DataWindow__r.IsActive){
                            ConsumableTargetManage__Share imsshare = new ConsumableTargetManage__Share(
                            ParentId = nObj.Id,
                            RowCause = imsrowCause,
                            UserOrGroupId = mpMap.get(nObj.H_OCM_man_province_HP__c).ET_DataWindow__c,
                            AccessLevel = 'read');
                            imssharlist.add(imsshare);
                        }
                        if(null!=mpMap.get(nObj.H_OCM_man_province_HP__c).ET_BusinessWindow__c && !''.equals(mpMap.get(nObj.H_OCM_man_province_HP__c).ET_BusinessWindow__c) && nObj.Ownerid !=mpMap.get(nObj.H_OCM_man_province_HP__c).ET_BusinessWindow__c && mpMap.get(nObj.H_OCM_man_province_HP__c).ET_BusinessWindow__r.IsActive){
                            ConsumableTargetManage__Share imsshare = new ConsumableTargetManage__Share(
                            ParentId = nObj.Id,
                            RowCause = imsrowCause,
                            UserOrGroupId = mpMap.get(nObj.H_OCM_man_province_HP__c).ET_BusinessWindow__c,
                            AccessLevel = 'read');
                            imssharlist.add(imsshare);
                        }
                        if(null!=mpMap.get(nObj.H_OCM_man_province_HP__c).ET_Assistant1__c && !''.equals(mpMap.get(nObj.H_OCM_man_province_HP__c).ET_Assistant1__c) && nObj.Ownerid !=mpMap.get(nObj.H_OCM_man_province_HP__c).ET_Assistant1__c && mpMap.get(nObj.H_OCM_man_province_HP__c).ET_Assistant1__r.IsActive){
                            ConsumableTargetManage__Share imsshare = new ConsumableTargetManage__Share(
                            ParentId = nObj.Id,
                            RowCause = imsrowCause,
                            UserOrGroupId = mpMap.get(nObj.H_OCM_man_province_HP__c).ET_Assistant1__c,
                            AccessLevel = 'read');
                            imssharlist.add(imsshare);
                        }  
                        if(null!=mpMap.get(nObj.H_OCM_man_province_HP__c).ET_Assistant2__c && !''.equals(mpMap.get(nObj.H_OCM_man_province_HP__c).ET_Assistant2__c) && nObj.Ownerid !=mpMap.get(nObj.H_OCM_man_province_HP__c).ET_Assistant2__c && mpMap.get(nObj.H_OCM_man_province_HP__c).ET_Assistant2__r.IsActive){
                            ConsumableTargetManage__Share imsshare = new ConsumableTargetManage__Share(
                            ParentId = nObj.Id,
                            RowCause = imsrowCause,
                            UserOrGroupId = mpMap.get(nObj.H_OCM_man_province_HP__c).ET_Assistant2__c,
                            AccessLevel = 'read');
                            imssharlist.add(imsshare);     
                        }
                        deleteimssharlist.add(nObj.Id);
                    }
                        
                    }else{//ENG 
                    if(mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_Flag__c==true){
                        if(null!=mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_DataWindow__c && !''.equals(mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_DataWindow__c) && nObj.Ownerid !=mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_DataWindow__c && mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_DataWindow__r.IsActive){
                            ConsumableTargetManage__Share imsshare = new ConsumableTargetManage__Share(
                            ParentId = nObj.Id,
                            RowCause = imsrowCause,
                            UserOrGroupId = mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_DataWindow__c,
                            AccessLevel = 'read');
                            imssharlist.add(imsshare);
                        }
                        if(null!=mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_BusinessWindow__c && !''.equals(mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_BusinessWindow__c) && nObj.Ownerid !=mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_BusinessWindow__c && mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_BusinessWindow__r.IsActive){
                            ConsumableTargetManage__Share imsshare = new ConsumableTargetManage__Share(
                            ParentId = nObj.Id,
                            RowCause = imsrowCause,
                            UserOrGroupId = mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_BusinessWindow__c,
                            AccessLevel = 'read');
                            imssharlist.add(imsshare);
                        }
                        if(null!=mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_Assistant1__c && !''.equals(mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_Assistant1__c) && nObj.Ownerid !=mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_Assistant1__c && mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_Assistant1__r.IsActive){
                            ConsumableTargetManage__Share imsshare = new ConsumableTargetManage__Share(
                            ParentId = nObj.Id,
                            RowCause = imsrowCause,
                            UserOrGroupId = mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_Assistant1__c,
                            AccessLevel = 'read');
                            imssharlist.add(imsshare);
                        }
                        if(null!=mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_Assistant2__c && !''.equals(mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_Assistant2__c) && nObj.Ownerid !=mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_Assistant2__c && mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_Assistant2__r.IsActive){
                            ConsumableTargetManage__Share imsshare = new ConsumableTargetManage__Share(
                            ParentId = nObj.Id,
                            RowCause = imsrowCause,
                            UserOrGroupId = mpMap.get(nObj.H_OCM_man_province_HP__c).ENG_Assistant2__c,
                            AccessLevel = 'read');
                            imssharlist.add(imsshare);
                        }
                        deleteimssharlist.add(nObj.Id);
                    }
                    
                    
                    }
                    
                }
                
            }
        }    
        try{
            // 先 Delete 后 Insert
            if (null!=deleteimssharlist && deleteimssharlist.size() > 0) {
                List<ConsumableTargetManage__Share> deleteList = [SELECT Id
                    FROM ConsumableTargetManage__Share
                    WHERE RowCause = :imsrowCause
                    AND ParentId IN :deleteimssharlist
                ];
                if(null!=deleteList && deleteList.size()>0){
                    delete deleteList;
                }
                system.debug('删除得ims共享数据'+deleteList.size());
            }
            system.debug('插入得IMS共享数据'+imssharlist.size());
            if(null!=imssharlist && imssharlist.size()>0){
                insert imssharlist;
            }
        }catch(Exception e){
            errStr += e.getMessage()+'\n';
            errStr += 'IMS插入的共享==='+imssharlist.size()+imssharlist+'\n';
            errStr += 'IMS需要删除的共享==='+deleteimssharlist.size()+'\n'+deleteimssharlist+'\n';
            errStr += e.getLineNumber()+'\n';
        }
    }
    global void finish(Database.BatchableContext BC) {
        String tmp = '';
        if (String.isNotBlank(errStr)) {
            tmp = errStr;
        }
        iflog.Log__c += 'OCMTOIMSShareUserBatch finish()\n';
        iflog.Log__c += '\n OCMTOIMSShareUserBatch 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;
        }
        
        
        List<OCM_Management_Province__c> mpList1 = [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,ET_Flag__c,ENG_Flag__c from OCM_Management_Province__c where ENG_Flag__c=true or ET_Flag__c=true];
        List<OCM_Management_Province__c> updList = new List<OCM_Management_Province__c>();
        iflog.Log2__c ='开始\n';
        iflog.Log3__c ='开始\n';
        for (OCM_Management_Province__c mp : mpList1) {
            if(mp.ET_Flag__c == true){
                iflog.Log2__c += '办事处名称:'+mp.Name+'====='+mp.id +'\n';
                iflog.Log2__c += 'ET更新前人员担当'+mp.ETShareOpp__c +'\n';
                mp.ETShareOpp__c=(mp.ET_DataWindow__c == null? '' : String.valueOf(mp.ET_DataWindow__c).substring(0, 15))+','+(mp.ET_BusinessWindow__c == null? '' : String.valueOf(mp.ET_BusinessWindow__c).substring(0, 15))+','+(mp.ET_Assistant1__c == null? '' : String.valueOf(mp.ET_Assistant1__c).substring(0, 15))+','+(mp.ET_Assistant2__c == null? '' : String.valueOf(mp.ET_Assistant2__c).substring(0, 15));
                iflog.Log2__c += 'ET更新后人员担当'+mp.ETShareOpp__c +'\n';
            } 
            if(mp.ENG_Flag__c == true){
                iflog.Log3__c += '办事处名称:'+mp.Name+'====='+mp.id +'\n';
                iflog.Log3__c += 'ENG更新前人员担当'+mp.ENGShareOpp__c +'\n';
                mp.ENGShareOpp__c=(mp.ENG_DataWindow__c == null? '' : String.valueOf(mp.ENG_DataWindow__c).substring(0, 15))+','+(mp.ENG_BusinessWindow__c == null? '' : String.valueOf(mp.ENG_BusinessWindow__c).substring(0, 15))+','+(mp.ENG_Assistant1__c == null? '' : String.valueOf(mp.ENG_Assistant1__c).substring(0, 15))+','+(mp.ENG_Assistant2__c == null? '' : String.valueOf(mp.ENG_Assistant2__c).substring(0, 15));
                iflog.Log3__c += 'ENG更新前人员担当'+mp.ENGShareOpp__c +'\n';
            }
            if(mp.ET_Flag__c == true || mp.ENG_Flag__c == true){
                updList.add(mp);
            }
            
        }
        if (updList.size() > 0) {
            update updList;
        }
 
        update iflog;
    }    
}