高章伟
2022-02-24 2aa8da8af66aa8ae00f25831aed6bb0364176e7b
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
//拆分选项列表的共通方法
public without sharing class SplitOptionListUtil {
    public SplitOptionListUtil() {
        
    }
 
    //传递一个map进来  key是sobj对象 value是拼接好的选项列表api
    //1.根据sobj的id获取对象名 -> Id.getSObjectType().getDescribe().getName()
    //2.根据value获取选项列表对应的lable名 -> map<sobj,map<api,lable>>
    //3.查询当前的"报告书状况统计"表中是否存在对应的值 如果有全删除再添加
    //4.获取对象上的字段值并创建map <sobj对象,map<lable名称,内容集合>>
    ////key -> sobj对象  value: -> key :api对应的lable名称 value:内容集合
    public void makeObject(Map<Sobject,List<String>> data){
        System.debug('14:::data::'+data);
        //1.获取对象名
        String objName = data.keySet().iterator().next().Id.getSObjectType().getDescribe().getName();
        //2.获取对象上的 api->lable标签名的对应关系
        Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
        Schema.SObjectType leadSchema = schemaMap.get(objName);
        Map<String, Schema.SObjectField> apiLableMap = leadSchema.getDescribe().fields.getMap();
        //3.全删全加
        List<Id> soIds = new List<Id>();
        Set<String> columns = new Set<String>();
        for (SObject sobj : data.keySet()) {
            soIds.add(sobj.Id);
            for (String str : data.get(sobj)) {
                columns.add(str);
            }
        }
        //拼接待查询的字段
        String columnStr = '';
        if (columns.size()>0) {
            for (String str : columns) {
                columnStr += str +',';
            }
        }
        if (columnStr != '') {
            columnStr = columnStr.substring(0,columnStr.length() - 1);    
        }
 
        //取得查找字段名
        objName = objName.endsWith('__c')? objName : objName+'__c';
        //3.1 获取所有存在的报告书状况统计对象
        List<Sobject> delRpmObjList = new List<SObject>();
        String soql ='select id,Category__c,'+objName+' from ReportMemo__c where ' +objName + ' in :soIds';
        List<SObject> rmList = Database.query(soql);
        if (rmList != null && rmList.size() > 0) {
            for (SObject rep : rmList) {
                for (Sobject sobj : data.keySet()) {
                    if (rep.get(objName) == sobj.Id) {
                        for (String str : data.get(sobj)) {
                            if (rep.get('Category__c') == apiLableMap.get(str).getDescribe().getLabel()) {
                                delRpmObjList.add(rep);
                            }
                        }
                    }
                }
            }
        }
        List<ReportMemo__c> delrpmList = (List<ReportMemo__c>)delRpmObjList;
        System.debug('delrpmList::'+delrpmList);
        if (delrpmList != null && delrpmList.size() > 0) {
            delete delrpmList;
        }
 
        //4.获取对象上的字段值
        //创建集合
        //key -> sobj对象  value: -> key :api对应的lable名称 value:内容集合
        Map<SObject,Map<String,List<String>>> fieldMap = new Map<SObject,Map<String,List<String>>>();
        for (SObject sobj : data.keySet()) {
            String key = '';
            String value = '';
            Map<String,Object> fieldsToValue = sobj.getPopulatedFieldsAsMap();
            Map<String,List<String>> sobjFieldMap = new Map<String,List<String>>();
 
            for (String fieldName : fieldsToValue.keySet()){
                for (String apiName : data.get(sobj)) {
                    if (fieldName == apiName) {
                        System.debug('79::::apiName:'+apiName);
                        value = (String) fieldsToValue.get(fieldName);
                        key = apiLableMap.get(fieldName).getDescribe().getLabel();
                        sobjFieldMap.put(key, value.split(';'));
                    }
                }
            }
            fieldMap.put(sobj, sobjFieldMap);
        }
 
        System.debug('fieldMap::'+fieldMap);
        
        //添加
        List<SObject> insrpmObjList = new List<SObject>();
 
        //key -> sobj对象 value: -> key :api对应的lable名称 value:内容集合
        for (SObject sobj : fieldMap.keySet()) {
            Map<String,List<String>> apiValMap = fieldMap.get(sobj);
            for (String category : apiValMap.keySet()) {
                for (String str : apiValMap.get(category)) {
                    SObject rmc = new ReportMemo__c();
                    rmc.put('Category__c', category);
                    rmc.put('Memo__c', str);
                    rmc.put(objName, sobj.Id);
                    insrpmObjList.add(rmc);
                    
                }
            }
        }
 
        List<ReportMemo__c> insrpmList = (List<ReportMemo__c>)insrpmObjList;
        if (insrpmList != null && insrpmList.size() > 0) {
            insert insrpmList;
        }
    }
 
}