高章伟
2023-03-03 d8dc84a3d56df839895f1c417a4d9cbee763d262
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
191
192
193
194
/**
 * 招标项目-标的物更新规则修改
 * 历史数据处理用Batch
 * 
 * Created By ssm 2022-06-26
 */
global class NFM501TIDetailHistoryDataBatch implements Database.Batchable<sObject>, Database.Stateful {
    
    private String start_date;
 
    private String end_date;
 
    private String batch_if_log_id;
 
    private List<BatchIF_Log__c> batchlogs;
 
    global NFM501TIDetailHistoryDataBatch() {
        this.start_date = '2022-04-01';
    }
 
    global NFM501TIDetailHistoryDataBatch(String startat, String endat) {
        this.start_date = startat;
        this.end_date = endat;
    }
 
    global NFM501TIDetailHistoryDataBatch(String logid) {
        this.batch_if_log_id = logid;
    }
 
    global Database.QueryLocator start(Database.BatchableContext BC) {
        String query = 'Select Id, Name, Log__c, ErrorLog__c, Log2__c, Log3__c, ' + 
                        'Log4__c, Log5__c, Log6__c, Log7__c, Log8__c, Log9__c, Log10__c, Log11__c, ' +
                        'Log12__c, MessageGroupNumber__c, retry_cnt__c, NFM501Future_Count__c, ' +
                        'NFM501_Web_Annex_Count__c ' +
                        'from BatchIF_Log__c ' + 
                        'where Type__c = \'NFM501\' and RowDataFlg__c = true and OwnerId = \'00510000000fSYI\' ';
        if (String.isNotBlank(this.start_date)) {
            query += ' and CreatedDate >= ' + this.start_date + 'T00:00:00.000+0800'; 
        }
        if (String.isNotBlank(this.end_date)) {
            query += ' and CreatedDate <= ' + this.end_date + 'T00:00:00.000+0800'; 
        }
        if (String.isNotBlank(this.batch_if_log_id)) {
            query += ' and Id = \'' + this.batch_if_log_id + '\'';
        }
        query += ' order by CreatedDate';
        System.debug('query is [' + query + ']');
        return Database.getQueryLocator(query);
    }
 
    global void execute(Database.BatchableContext BC, List<BatchIF_Log__c> loglist){
        this.batchlogs = new List<BatchIF_Log__c>();
 
        // 循环log,获取中标通知的信息
        for (BatchIF_Log__c rowData : loglist) {
            // 创建一个新的日志
            BatchIF_Log__c batch_log = new BatchIF_Log__c();
            batch_log.Type__c = 'NFM501TIDetailHistory';
            batch_log.MessageGroupNumber__c = rowData.MessageGroupNumber__c;
            this.batchlogs.add(batch_log);
 
            // 处理千里马数据
            try {
                String QLMDataStr = NFMUtil.QLMgetRowDataStr(rowData);
                system.debug('QLMDataStr---'+QLMDataStr);
                NFM501controller.AllData getQLMData1 = (NFM501controller.AllData)
                JSON.deserialize(QLMDataStr, NFM501controller.AllData.class);
                system.debug('getQLMData1---'+json.serialize(getQLMData1));
                if (getQLMData1 == null) {
                    continue;
                }
                // 遍历
                List < String > projectIdList = new List <String>();
                for (NFM501Controller.ListItem project: getQLMData1.data.list1) {
                    if (String.isNotBlank(project.projectId) && '3'.equals(project.infoType) && '11'.equals(project.infoTypeSegment)) {
                        projectIdList.add(project.projectId);
                    }
                }
                // 记录项目Id信息
                batch_log.Log__c = 'get ' + projectIdList.size() + ' products.' + '\n';
                for (String projectId : projectIdList) {
                    batch_log.Log__c += projectId + '\n';
                }
                // 取招标信息
                List < Tender_information__c > TIList = [Select Id, OwnerId, CursorMark__c, ZhaoBiaoUnit1__c, ZhaoBiaoUnit2__c,
                    ZhaoBiaoUnit3__c, ZhaoBiaoUnit4__c, ZhaoBiaoUnit5__c, InfoId__c, Keywords__c, Domestic_Or_Import__c, 
                    BiddingType__c, InfoQianlimaUrl__c, ZhaoRelationWay__c, IsElectronic__c,
                    XmNumber__c, TenderEndTime__c, AreaProvince__c, ZhongBiaoUnit1__c,
                    ZhongBiaoUnit2__c, ZhongBiaoUnit3__c, ZhongBiaoUnit4__c, ZhongBiaoUnit5__c,
                    IsOther__c, OtherInfoTitle__c, otherInfo__c, InfoType__c, subInfoType__c,
                    InfoTitle__c, OpenBidingTime__c, AgentRelationWay__c,
                    InfoFile__c,
                    BudgetAmount1__c, BudgetAmount2__c, BudgetAmount3__c,
                    BudgetAmount4__c, BudgetAmount5__c,
                    BudgetUnit__c, Other_units__c,
                    InfoPublishTime__c, AgentRelationName__c, BidingEndTime__c,
                    WinnerAmount1__c, WinnerAmount2__c, WinnerAmount3__c, WinnerAmount4__c, WinnerAmount5__c,
                    WinnerUnit__c, ZhongRelationWay__c, BidingAcquireTime__c, TenderBeginTime__c,
                    ProjectId__c,
                    Sum__c, status__c,
                    SumUnit__c, AreaCity__c, AreaCountry__c, AgentUnit1__c,
                    AgentUnit2__c, AgentUnit3__c, AgentUnit4__c, AgentUnit5__c,
                    ZhaoRelationName__c, ZhongRelationName__c,
                    publicDate__c, noticeDate__c, ResultDate__c,
                    AWS_Data_Id__c //ADD FOR pi SUSHANHU 20220311
                    FROM Tender_information__c Where ProjectId__c in :projectIdList
                ];
                Map < String, Tender_information__c > TenMap = new Map < String, Tender_information__c > ();
                for (Tender_information__c Ten: TIList) {
                    TenMap.put(Ten.ProjectId__c, Ten);
                }
                System.debug('tenMap' + TenMap.keySet());
                List<Tender_information_details__c> newTempList = new List<Tender_information_details__c>();
                Map<String, String> updateProjects = new Map<String, String>();
                for (NFM501Controller.ListItem LI: getQLMData1.data.list1) {
                    Tender_information__c te1 = new Tender_information__c();
                    //确定每条数据对应的每个招投标(原来的数据)
                    if (TenMap.containsKey(LI.projectId)) {
                        te1 = TenMap.get(LI.projectId);
                    }
                    System.debug('projectId from log: ' + LI.projectId);
                    System.debug('tender from map: ' + te1);
                    if (String.isBlank(te1.Id)) {
                        continue;
                    }
                    NFM501Controller.Target TG = LI.Target;
                    if (LI.Target != null) {
                        if (TG.Sum != null && TG.Sum != '') {
                            te1.Sum__c = TG.Sum;
                        }
                        te1.SumUnit__c = TG.SumUnit;
                        //招标信息详情
                        if (TG.TargetDetails != null && TG.TargetDetails.size() > 0) {
                            updateProjects.put(LI.projectId, LI.projectId);
                            for (NFM501Controller.TargetDetailsItem TDI: TG.TargetDetails) {
                                Tender_information_details__c te = new Tender_information_details__c();
                                te.Tender_information__c = te1.ID;
                                te.Model__c = String.isBlank(TDI.model) ? te.Model__c : TDI.model;
                                te.NumberUnit__c = String.isBlank(TDI.number1) ? te.NumberUnit__c : TDI.number1;
                                te.Brand__c = String.isBlank(TDI.brand) ? te.Brand__c : TDI.brand;
                                if (String.isNotBlank(TDI.totalPrice)) {
                                    te.TotalPrice__c = TDI.totalPrice;
                                }
                                if (String.isNotBlank(TDI.price)) {
                                    te.Price__c = TDI.price;
                                }
                                te.PriceUnit__c = String.isBlank(TDI.priceUnit) ? te.PriceUnit__c : TDI.priceUnit;
                                te.TotalPriceUnit__c = String.isBlank(TDI.totalPriceUnit) ? te.TotalPriceUnit__c : TDI.totalPriceUnit;
                                if (String.isBlank(TDI.name)) {
                                    String brand = String.isBlank(TDI.brand) ? '' : TDI.brand;
                                    String model = String.isBlank(TDI.model) ? '' : TDI.model;
                                    te.Name__c = brand + ':' + model;
                                    te.Name = brand + ':' + model;
                                } else {
                                    te.Name__c = String.isBlank(TDI.name) ? te.Name__c : TDI.name;
                                }
                                if (String.isNotBlank(te.Name__c)) {
                                    if (te.Name__c.length() >= 80) {
                                        te.Name = te.Name__c.subString(0, 79);
                                    } else {
                                        te.Name = te.Name__c;
                                    }
                                }
                                te.Keywords__c = String.isBlank(TDI.tarKeyword) ? te.Keywords__c : TDI.tarKeyword;
                                te.ProjectId__c = te1.ProjectId__c;
                                te.Is_Final__c = true;
 
                                newTempList.add(te);
                            }
                        }
                    }
                }
                List < Tender_information_details__c > DetlList = [Select Id, Name, Name__c, ProjectId__c, Brand__c, Model__c, Keywords__c, 
                        NumberUnit__c, TotalPrice__c, Price__c, PriceUnit__c, TotalPriceUnit__c, Is_Final__c  
                    FROM Tender_information_details__c
                    Where ProjectId__c in :updateProjects.keySet()];
                if (DetlList.size() > 0) {
                    delete DetlList;
                }
                if (newTempList.size() > 0) {
                    insert newTempList;
                }
            } catch (Exception e) {
                batch_log.ErrorLog__c = e.getMessage();
            }   
        }
    }
 
    global void finish(Database.BatchableContext BC) {
        if (this.batchlogs != null && this.batchlogs.size() > 0) {
            insert this.batchlogs;
        }
    }
}