高章伟
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
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
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
// RowDataを残すため、@future execute にします
global class NFM010WebService {
    // Integer batchsize = 200;  考量する必要がないと思います。
    global class Achievements {
        webservice NFMUtil.Monitoring Monitoring;
        webservice NFM010WebService.Achievement[] Achievement;
    }
    global class Achievement {
        webservice String SoNo;
        webservice String QuotationCode;
        webservice String ReturnFlag;
        webservice String OverviewStatus;
        webservice String ContractNO;
        webservice String ContractReceivedDate;
        webservice String FirstApproveDate;
        webservice String SecondApproveDate;
        webservice String SoLatestDeliveryDate;
        webservice String DeliveryDate;
        webservice String InstallDate;
        webservice String Currency_x;
        webservice Decimal ContractAmount;
        webservice Decimal PaymentAmount;
        webservice String PaymentRate;
        webservice String DeliveryStatus;
        webservice String AssignmentStatus;
        webservice String PaymentStatus;
        webservice String InstallStatus;
        webservice String AuthorizationNo;
        webservice String ContractApplicationNo;
        webservice String PaymentTerms;
        webservice Decimal TimeLimit;
        webservice Decimal SalesChannel;
    }
 
    // 非同期を見せかけ、常にreturn void
    webservice static void NFM010(NFM010WebService.Achievements Achievements) {
        if (Achievements == null) {
            return;
        }
        NFMUtil.Monitoring Monitoring = Achievements.Monitoring;
        if (Monitoring == null) {
            return;
        }
        BatchIF_Log__c rowData = NFMUtil.saveRowData(Monitoring, 'NFM010', Achievements.Achievement);
        if (String.isBlank(rowData.Log__c) == false) execute(rowData.Id);
    }
 
    // @future
    // global static void executefuture(String rowData_Id) {
    //     execute(rowData_Id);
    // }
    global static void execute(String rowData_Id) {
        // 20190424 CHAN-BBC75D NFM010Webservice停用,以后使用NFM010Rest
    //    Integer batch_retry_max_cnt = Integer.valueOf(System.Label.batch_retry_max_cnt);
    //    BatchIF_Log__c rowData = [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 from BatchIF_Log__c where RowDataFlg__c = true and Id = :rowData_Id];
    //    String logstr = rowData.MessageGroupNumber__c + ' start\n';
    //    BatchIF_Log__c iflog = new BatchIF_Log__c();
    //    iflog.Type__c = 'NFM010';
    //    iflog.MessageGroupNumber__c = rowData.MessageGroupNumber__c;
    //    iflog.Log__c = logstr;
    //    iflog.ErrorLog__c = '';
    //    insert iflog;
    //    String rowDataStr = NFMUtil.getRowDataStr(rowData);
    //    List<Achievement> achievementList = (List<Achievement>) JSON.deserialize(rowDataStr, List<Achievement>.class);
    //    if (achievementList == null || achievementList.size() == 0) {
    //        return;
    //    }
 
    //    // BatchIF転送表 から、コード変換のMapを作成
    //    Map<String, String> transferMap = new Map<String, String>();
    //    List<BatchIF_Transfer__c> transferList = [select Table__c,
    //                              Column__c,
    //                              External_value__c,
    //                              Internal_value__c
    //                              from BatchIF_Transfer__c
    //                              where Dropped_Flag__c = false
    //                                      and Table__c = 'Statu_Achievements__c'];
    //    for (BatchIF_Transfer__c t : transferList) {
    //        transferMap.put(t.Column__c + t.External_value__c, t.Internal_value__c);
    //    }
 
    //    Savepoint sp = Database.setSavepoint();
    //    try {
    //        // 更新対応配列とMapなどをセット
    //        List<String> oppNoList = new List<String>();
    //        List<String> statu_AchievementsList = new List<String>();
    //        for (NFM010WebService.Achievement Achievement : achievementList) {
    //            if (Achievement.SoNo == null || Achievement.SoNo == '' ||
    //                    Achievement.QuotationCode == null || Achievement.QuotationCode == '' ||
    //                    Achievement.TimeLimit == null
    //               ) {
    //                // 必須項目がない場合、処理と飛ばす
    //                continue;
    //            }
    //            oppNoList.add(Achievement.QuotationCode);
    //            statu_AchievementsList.add(Achievement.QuotationCode + ':' + Achievement.SoNo);
    //        }
    //        List<Opportunity> oppList = [select Id, Opportunity_No__c, Min_FirstApproveDate__c,
    //                                     Note_Residual_Result__c, IsImport__c
    //                                     from Opportunity
    //                                     where Opportunity_No__c in :oppNoList];
    //        Map<String, Opportunity> oppsMap = new Map<String, Opportunity>();
    //        for (Opportunity opp : oppList) {
    //            oppsMap.put(opp.Opportunity_No__c, opp);
    //        }
 
    //        // 更新対応配列をセット
    //        List<Statu_Achievements__c> staList = new List<Statu_Achievements__c>();
    //        Map<String, Statu_Achievements__c> staUpdateMap = new Map<String, Statu_Achievements__c>();
 
    //        staList = [select Id, Name, Opportunity__c,
    //                   Statu_Achievements_Ext__c,
    //                   ReturnFlag__c,
    //                   OverviewStatus__c,
    //                   ContractNO__c,
    //                   ContractReceivedDate__c,
    //                   FirstApproveDate__c,
    //                   LastApproveDate__c,
    //                   SoLatestDeliveryDate__c,
    //                   DeliveryDate__c,
    //                   InstallDate__c,
    //                   Collection_Day_Invoice__c,
    //                   CurrencyIsoCode,
    //                   ContractAmount__c,
    //                   PaymentAmount__c,
    //                   Paid_Amount_Rate__c,
    //                   X30_Deposit_Day__c,
    //                   Deposit_In_Full_Day__c,
    //                   PaymentRate__c,
    //                   DeliveryStatus__c,
    //                   AssignmentStatus__c,
    //                   PaymentStatus__c,
    //                   InstallStatus__c,
    //                   AuthorizationNo__c,
    //                   ContractApplicationNo__c,
    //                   PaymentTerms__c,
    //                   UnshippedAmount__c,
    //                   End_User_price__c
    //                   from Statu_Achievements__c
    //                   where Statu_Achievements_Ext__c in :statu_AchievementsList];
 
    //        for (Statu_Achievements__c statu_Achievements : staList) {
    //            staUpdateMap.put(statu_Achievements.Statu_Achievements_Ext__c, statu_Achievements);
    //        }
    //        Map<Id, Opportunity> oppUpdateMap = new Map<Id, Opportunity>();
    //        for (NFM010WebService.Achievement Achievement : achievementList) {
    //            if (Achievement.SoNo == null || Achievement.SoNo == '') {
    //                // 必須項目がない場合、処理と飛ばす
    //                iflog.ErrorLog__c += 'SoNo is required\n';
    //                continue;
    //            }
    //            if (Achievement.QuotationCode == null || Achievement.QuotationCode == '') {
    //                // 必須項目がない場合、処理と飛ばす
    //                iflog.ErrorLog__c += 'QuotationCode is required\n';
    //                continue;
    //            }
    //            if (Achievement.TimeLimit == null) {
    //                // 必須項目がない場合、処理と飛ばす
    //                iflog.ErrorLog__c += 'TimeLimit is required\n';
    //                continue;
    //            }
    //            //                Boolean returnFlag = (Achievement.ReturnFlag == null || Achievement.ReturnFlag == '') ? false : true;
    //            //                Date lastApproveDate = NFMUtil.parseStr2Date(Achievement.SecondApproveDate, true);
    //            //                if (returnFlag && lastApproveDate == null) {
    //            //                    iflog.ErrorLog__c += Achievement.SoNo + ' is (X), please set LastApproveDate\n';
    //            //                    continue;
    //            //                }
    //            Opportunity opp = oppsMap.get(Achievement.QuotationCode);
    //            if (opp == null) {
    //                // 更新対象商談がない場合
    //                iflog.ErrorLog__c += '[' + Achievement.SoNo + ']Opportunity[' + Achievement.QuotationCode + ']NotExist\n';
    //                continue;
    //            }
    //            // 項目転送のセット
    //            Statu_Achievements__c sta = new Statu_Achievements__c();
    //            sta.Statu_Achievements_Ext__c = Achievement.QuotationCode + ':' + Achievement.SoNo;
    //            if (staUpdateMap.get(sta.Statu_Achievements_Ext__c) == null) {
    //                staList.add(sta);
    //                staUpdateMap.put(sta.Statu_Achievements_Ext__c, sta);
    //                sta.Opportunity__c            = opp.Id;
    //                logstr += Achievement.QuotationCode + ':' + Achievement.SoNo + ' ';
    //            } else {
    //                sta = staUpdateMap.get(sta.Statu_Achievements_Ext__c);
    //            }
    //            sta.Name                      = Achievement.SoNo;
    //            sta.ReturnFlag__c             = (Achievement.ReturnFlag == null || Achievement.ReturnFlag == '') ? false : true;
    //            sta.OverviewStatus__c         = Achievement.OverviewStatus;
    //            sta.ContractNO__c             = Achievement.ContractNO;
    //            sta.ContractReceivedDate__c   = NFMUtil.parseStr2Date(Achievement.ContractReceivedDate, true);
    //            sta.FirstApproveDate__c       = NFMUtil.parseStr2Date(Achievement.FirstApproveDate, true);
    //            sta.LastApproveDate__c        = NFMUtil.parseStr2Date(Achievement.SecondApproveDate, true);
    //            sta.SoLatestDeliveryDate__c   = NFMUtil.parseStr2Date(Achievement.SoLatestDeliveryDate, true);
    //            sta.DeliveryDate__c           = NFMUtil.parseStr2Date(Achievement.DeliveryDate, true);
    //            sta.InstallDate__c            = NFMUtil.parseStr2Date(Achievement.InstallDate, true);
    //            sta.Collection_Day_Invoice__c = sta.InstallDate__c == null ? null : System.today();
    //            sta.CurrencyIsoCode           = Achievement.Currency_x == 'RMB' ? 'CNY' : Achievement.Currency_x;
    //            sta.ContractAmount__c         = Achievement.ContractAmount;
    //            sta.PaymentAmount__c          = Achievement.PaymentAmount;
    //            System.debug(Logginglevel.ERROR, 'Paid_Amount_Rate +++++' + sta.Paid_Amount_Rate__c);
    //            if (String.isNotEmpty(Achievement.PaymentRate)) {
    //                String payment_Rate = Achievement.PaymentRate.substring(0, Achievement.PaymentRate.lastIndexOf(','));
    //                String payment_Rate_Date = Achievement.PaymentRate.substring(Achievement.PaymentRate.lastIndexOf(',') + 1);
    //                System.debug(Logginglevel.ERROR, 'Paid_Amount_Rate _____' + Decimal.valueOf(payment_Rate.subString(0, payment_Rate.length() - 1)));
    //                if ((sta.Paid_Amount_Rate__c == null || sta.Paid_Amount_Rate__c < 30) && Decimal.valueOf(payment_Rate.subString(0, payment_Rate.length() - 1)) >= 30.00) {
    //                    sta.X30_Deposit_Day__c    = NFMUtil.parseStr2Date(payment_Rate_Date, true);
    //                }
    //                if (Decimal.valueOf(payment_Rate.subString(0, payment_Rate.length() - 1)) == 100.00) {
    //                    sta.Deposit_In_Full_Day__c    = NFMUtil.parseStr2Date(payment_Rate_Date, true);
    //                }
    //                sta.PaymentRate__c            = Achievement.PaymentRate.substring(0, Achievement.PaymentRate.lastIndexOf(','));
    //            }
    //            sta.DeliveryStatus__c         = Achievement.DeliveryStatus;
    //            sta.AssignmentStatus__c       = Achievement.AssignmentStatus;
    //            sta.PaymentStatus__c          = Achievement.PaymentStatus;
    //            sta.InstallStatus__c          = Achievement.InstallStatus;
    //            sta.AuthorizationNo__c        = Achievement.AuthorizationNo;
    //            sta.ContractApplicationNo__c  = Achievement.ContractApplicationNo;
    //            sta.PaymentTerms__c           = Achievement.PaymentTerms;
    //            sta.UnshippedAmount__c        = Achievement.TimeLimit;         // NFMUtil.parseStr2Date(Achievement.TimeLimit, true) #1189の対応、UnshippedAmount__c にセット
    //            sta.End_User_price__c         = Achievement.SalesChannel;      // NFMUtil.getMapValue(transferMap, 'SalesChannel__c', Achievement.SalesChannel, iflog);
 
    //            // 引合の更新、最初の注残
    //            if (opp.Note_Residual_Result__c == '4'       // SAP Winの後、ただし有効注残がない
    //                    && opp.IsImport__c == False          // 是否从SFA转移的已结束询价 のデータでなはい
    //                    && opp.Min_FirstApproveDate__c == null
    //               ) {
    //                // 有効な注残かどうかの判断 Valid_Statu_Achievements__c
    //                if ((sta.OverviewStatus__c == '冻结' || sta.OverviewStatus__c == '无效合同' || sta.ReturnFlag__c) == false) {
    //                    opp.Contract_Once_Recognize_Day__c = NFMUtil.parseStr2Date(Achievement.FirstApproveDate, true);
    //                    oppUpdateMap.put(opp.Id, opp);
    //                }
    //            }
    //        }
    //        if (staList.size() > 0) {
    //            StaticParameter.EscapeNFM001Trigger = true;
    //            StaticParameter.EscapeNFM001AgencyContractTrigger = true;
    //            StaticParameter.EscapeNFM007Trigger = true;
    //            StaticParameter.EscapeOpportunityBefUpdTrigger = true;
    //            upsert staList Statu_Achievements_Ext__c;
    //            if (oppUpdateMap.size() > 0) {
    //                update oppUpdateMap.values();
    //            }
    //        }
    //        logstr += '\nend';
    //        rowData.retry_cnt__c = 0;
    //    } catch (Exception ex) {
    //        // エラーが発生した場合
    //        Database.rollback(sp);
    //        System.debug(Logginglevel.ERROR, 'NFM010_' + rowData.MessageGroupNumber__c + ':' + ex.getMessage());
    //        System.debug(Logginglevel.ERROR, 'NFM010_' + rowData.MessageGroupNumber__c + ':' + ex.getStackTraceString());
    //        logstr += '\n' + ex.getMessage();
    //        iflog.ErrorLog__c = ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + iflog.ErrorLog__c;
    //        if (rowData.retry_cnt__c == null) rowData.retry_cnt__c = 0;
    //        if (rowData.retry_cnt__c < batch_retry_max_cnt) {
    //            rowData.retry_cnt__c++;
    //            LogAutoSendSchedule.assignOneMinute();
    //        }
    //        if (rowData.retry_cnt__c >= batch_retry_max_cnt) {
    //            rowData.ErrorLog__c = ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + rowData.ErrorLog__c + '错误次数已经超过自动收信设定的最大次数,请手动收信';
    //        }
    //    }
    //    update rowData;
    //    iflog.Log__c = logstr;
    //    if (iflog.Log__c.length() > 131072) {
    //        iflog.Log__c = iflog.Log__c.subString(0, 131065) + ' ...';
    //    }
    //    if (iflog.ErrorLog__c.length() > 32768) {
    //        iflog.ErrorLog__c = iflog.ErrorLog__c.subString(0, 32760) + ' ...';
    //    }
    //    update iflog;
    }
}