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
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
public without sharing class lexToMcpApprovalController {
     // 服务合同打包-跳转到提交待审批
    @AuraEnabled
    public static List<InitData> init(String recordId ,String mcpeId){
        List<InitData> initDataList  = new List<InitData>();
        String exitId = '';
        InitData initData = new InitData();
        List<Maintenance_Contract_Estimate__c> optionList = new List<Maintenance_Contract_Estimate__c>();
        List<Maintenance_Contract_Estimate__c> mceLists = [Select Id,Name,Maintenance_Price__c,Estimate_Asset_Cnt__c,CreatedDate,
                    Request_quotation_Amount__c,
                    Monthly_Repair_Cost_SUM__c,
                    Maintenance_Contract__r.Name,
                    Maintenance_Contract__r.Id 
                    from Maintenance_Contract_Estimate__c 
                    where Maintenance_Contract__c in (Select Id from Maintenance_Contract__c  where MaintanceContractPack__c = :recordId) order by Maintenance_Contract__r.Id];
 
         //编辑页面初始化
        List<MaintanceContractPackEstimate__c> mcpeList = [Select Id,Name,McpeReson__c,Consumption_Rate_Solution__c,Maintenance_Contract_Estimate__c,Decide__c,Process_Status__c from MaintanceContractPackEstimate__c where Id =:mcpeId];
        MaintanceContractPackEstimate__c mcpe = new MaintanceContractPackEstimate__c();
        if(mcpeList.size()>0) {
            mcpe = mcpeList[0];
        }
        for(Maintenance_Contract_Estimate__c mce : mceLists) {
            // Maintenance_Contract_Estimate__c mceObj = new Maintenance_Contract_Estimate__c();
            // mceObj.Id = mce.Id;
            // mceObj.Name = mce.Name;
            // mceObj.Maintenance_Price__c = mce.Maintenance_Price__c;
            // mceObj.Estimate_Asset_Cnt__c = mce.Estimate_Asset_Cnt__c;
            if(!exitId.equals(mce.Maintenance_Contract__r.Id) && exitId !='' ){
                initData.mceList = optionList;
                initDataList.add(initData);
                initData = new InitData();
                optionList = new List<Maintenance_Contract_Estimate__c>();
                exitId = mce.Maintenance_Contract__r.Id;
                initData.mcId = mce.Maintenance_Contract__r.Id;
                initData.mcName = mce.Maintenance_Contract__r.Name;
                if(String.isNotBlank(mcpe.Id)) {
                     initData.mcpeId = mcpe.Id;
                     initData.mcpeReson = mcpe.McpeReson__c;
                     initData.consumptionRateSolution = mcpe.Consumption_Rate_Solution__c;
                     initData.isMcpeDecide = mcpe.Decide__c;
                     initData.processStatus = mcpe.Process_Status__c;
                     initData.mceIds = mcpe.Maintenance_Contract_Estimate__c;
                }
                
                System.debug('---initData' +initData);
            } else if(exitId ==''){
                exitId = mce.Maintenance_Contract__r.Id;
                initData.mcId = mce.Maintenance_Contract__r.Id;
                initData.mcName = mce.Maintenance_Contract__r.Name;
                if(String.isNotBlank(mcpe.Id)) {
                    initData.mcpeId = mcpe.Id;
                    initData.mcpeReson = mcpe.McpeReson__c;
                    initData.consumptionRateSolution = mcpe.Consumption_Rate_Solution__c;
 
                    initData.isMcpeDecide = mcpe.Decide__c;
                    initData.processStatus = mcpe.Process_Status__c;
                    initData.mceIds = mcpe.Maintenance_Contract_Estimate__c;
                }
            } 
            optionList.add(mce);
        }
       
        initData.mceList = optionList;
        initDataList.add(initData);  
      
        System.debug('---initDataList' +initDataList); 
        return initDataList;
    }
 
 
    @AuraEnabled
    public static SaveReturnData save(String recordId, List<String> mceIds,String mcpeReson,String mcpeId,Boolean isDecide,String consumptionRateSolution) {
        Decimal contractAmount = 0;
        SaveReturnData returnData = new SaveReturnData();
        Savepoint sp = Database.setSavepoint();
        String contractType = '其它合同';
        Boolean isNewContractType = true;
        Decimal consumptionRateForecast;
        Decimal GuidePrice_DownF = 0;
        Decimal GuidePrice_UpF = 0;
        Decimal Request_quotation_Amount = 0;
        Decimal Limit_Price_Amount = 0;
        Decimal Asset_Repair_Sum_PriceF = 0;
        Decimal Contract_Amount = 0;
        Decimal Service_discount_Rate;
 
        Decimal totalPriceNumerator = 0;
        Decimal totalPriceDenominator = 0;
        Decimal monthlyRepairCostSUM = 0;
        Decimal contractRange = 0;
        Decimal costrateForecast = 0; 
        Decimal Total_Contract_Price = 0; 
        String estimatePriceRange;
        String contractPriceType; 
        Decimal Estimate_Asset_Cnt = 0; 
        Decimal Sum_repair_price = 0; 
        Decimal Repair_Cost_Sum = 0;  //    维修成本总金额
        Decimal Usage_ratio_New = 0;  //    合同消费率
        Decimal Contract_Consumption_rate = 0;  //    消费率(每月实时)
        String Dealer; //经销商名--取任意一条小合同的经销商名即可
        Boolean old_Is_RecognitionModel = false;
        //小合同有decide的情况下,报价组合不能进行取消decide操作
        List<Maintenance_Contract_Estimate__c> mceDecideLists = [Select Id,Name,Maintenance_Price__c,Estimate_Asset_Cnt__c,CreatedDate,
                    Request_quotation_Amount__c,
                    Monthly_Repair_Cost_SUM__c,
                    Maintenance_Contract__r.Name,
                    Maintenance_Contract__r.Id 
                    from Maintenance_Contract_Estimate__c 
                    where Estimation_Decision__c=true and Process_Status__c='批准' and Maintenance_Contract__c in (Select Id from Maintenance_Contract__c  where MaintanceContractPack__c = :recordId) order by Maintenance_Contract__r.Id];
 
        String errorMsg = '';
        System.debug('mceDecideLists.size:' + mceDecideLists.size());
        System.debug('isDecide:' + isDecide);
        System.debug('mcpeId:' + mcpeId);
        // if(!isDecide && String.isNotBlank(mcpeId) && mceDecideLists.size()>0 ) {
        if( String.isNotBlank(mcpeId) && mceDecideLists.size()>0 ) {
            List<MaintanceContractPackEstimate__c> mcpeDecide = [Select Id from MaintanceContractPackEstimate__c where Id = :mcpeId and Decide__c=true];
            System.debug('mcpeDecide.size:' + mcpeDecide.size());
 
            // if(mcpeDecide.size()>0) {
                for(Maintenance_Contract_Estimate__c mce:mceDecideLists) {
                    errorMsg += mce.Name;
                    errorMsg += ':小合同报价已经decide,请先对小合同报价取消decide后再操作 \n';
                }
                System.debug('errorMsg:' + errorMsg);
                returnData.result = errorMsg;
                return returnData;
            // }
        }
        try {
            String mceIdsString = String.join(mceIds, ',');
            MaintanceContractPack__c mcp = new MaintanceContractPack__c();
            //zzm 20240116  DB202401357055 打包报价15个合同超限问题 start
            
            // List<MaintanceContractPackEstimate__c> mcpeExists = [Select Id from MaintanceContractPackEstimate__c where Maintenance_Contract_Estimate__c = :mceIdsString];
            // if(mcpeExists.size()>0 && String.isBlank(mcpeId)) {
            //     returnData.result = '报价组合已存在';
 
            //     return returnData;
            // }
            List<MaintanceContractPackEstimate__c> mcpeExists = [Select Id ,Maintenance_Contract_Estimate__c from MaintanceContractPackEstimate__c where MaintanceContractPack__c = :recordId];
            for(MaintanceContractPackEstimate__c mcpeTemp:mcpeExists) {
                if(mcpeTemp.Maintenance_Contract_Estimate__c ==mceIdsString  && String.isBlank(mcpeId)) {
                    returnData.result = '报价组合已存在';
                    return returnData;
                }
            }
            //zzm 20240116  DB202401357055 打包报价15个合同超限问题 end
            List<Maintenance_Contract_Estimate__c> mceOther = new List<Maintenance_Contract_Estimate__c>();
            MaintanceContractPackEstimate__c mcpe = new MaintanceContractPackEstimate__c();
            mcpe.MaintanceContractPack__c = recordId;
            mcpe.McpeReson__c = mcpeReson;
            mcpe.Consumption_Rate_Solution__c = consumptionRateSolution;
            List<MaintanceContractPack__c> mcps = [Select Id ,Management_Code__c From MaintanceContractPack__c Where Id = :recordId ];
            Integer mcpeCode = [Select Count() from MaintanceContractPackEstimate__c Where MaintanceContractPack__c = :recordId];
            mcpeCode = mcpeCode +1;
            if(mcps.size()>0 ) {
                mcp.Id = mcps[0].Id;
            }
            if(String.isBlank(mcpeId)) {
                mcpe.Name = mcps[0].Management_Code__c+'-0' + mcpeCode.format();
            }
                
            
            mcpe.Maintenance_Contract_Estimate__c = String.join(mceIds, ',');
            mcpe.Maintenance_Contract_Estimate_TextArea__c = String.join(mceIds, '\n');
 
 
            List<Maintenance_Contract_Estimate__c> mceSelectList = [Select Id,Name
                ,SalesDepartment__c
                ,Asset_Repair_Sum_Price__c
                ,Limit_Price_Amount__c
                ,Maintenance_Contract__r.GuidePrice_UpF__c
                ,GuidePrice_Down__c
                ,GuidePrice_Up__c
                ,Maintenance_Contract__r.GuidePrice_DownF__c
                ,Contract_Range__c
                ,Request_quotation_Amount__c
                ,Monthly_Repair_Cost_SUM__c
                ,New_Contract_Type_TxT__c 
                ,Maintenance_Price__c
                ,Total_Contract_Price__c
                ,Maintenance_Contract__r.Contract_Amount__c 
                ,Maintenance_Contract__r.Estimate_Asset_Cnt__c  //报价资产件数
                ,Maintenance_Contract__r.Sum_repair_price_new__c  //合同期间修理金额
                ,Maintenance_Contract__r.Repair_Cost_Sum__c  // 维修成本总金额
                ,Maintenance_Contract__r.Dealer__c  // 经销商名
                ,Maintenance_Contract__r.old_Is_RecognitionModel__c  // 经销商名
                From Maintenance_Contract_Estimate__c Where Name in :mceIds];
            List<String> New_Contract_Type_TextAreas = new List<String>();
            for(Maintenance_Contract_Estimate__c mce : mceSelectList){
                New_Contract_Type_TextAreas.add(mce.New_Contract_Type_TxT__c);
                contractAmount += mce.Maintenance_Price__c;
                if(mce.New_Contract_Type_TxT__c == '首签合同') {
                    contractType = '首签合同';
                    isNewContractType = false;
                } else if(mce.New_Contract_Type_TxT__c != '新品合同') {
                    isNewContractType = false;
                }
                if (mce.Monthly_Repair_Cost_SUM__c !=null) {
                    monthlyRepairCostSUM = mce.Monthly_Repair_Cost_SUM__c;
                }
                if (mce.Contract_Range__c !=null) {
                    contractRange = mce.Contract_Range__c;
                }
                if (mce.Request_quotation_Amount__c !=null && mce.Request_quotation_Amount__c!=0) {
                   // 计算分子
                    totalPriceNumerator += (monthlyRepairCostSUM*contractRange*30);
                   // 计算分母
                    totalPriceDenominator += mce.Request_quotation_Amount__c;
                }
                if (mce.Limit_Price_Amount__c !=null) {
                    Limit_Price_Amount += mce.Limit_Price_Amount__c;
                }
                if (mce.Asset_Repair_Sum_Price__c !=null) {
                    Asset_Repair_Sum_PriceF += mce.Asset_Repair_Sum_Price__c;
                }
                // if (mce.Limit_Price_Amount__c !=null) {
                //     Contract_Amount += mce.Maintenance_Contract__r.Contract_Amount__c;
                // }
                // if (mce.Maintenance_Contract__r.GuidePrice_DownF__c !=null) {
                //     GuidePrice_DownF += mce.Maintenance_Contract__r.GuidePrice_DownF__c;
                // }
                // if (mce.Maintenance_Contract__r.GuidePrice_UpF__c !=null) {
                //     GuidePrice_UpF += mce.Maintenance_Contract__r.GuidePrice_UpF__c;
                // } 
                if (mce.Maintenance_Contract__r.Contract_Amount__c !=null) {
                    Contract_Amount += mce.Maintenance_Contract__r.Contract_Amount__c;
                }
                if (mce.GuidePrice_Down__c !=null) {
                    GuidePrice_DownF += mce.GuidePrice_Down__c;
                }
                if (mce.GuidePrice_Up__c !=null) {
                    GuidePrice_UpF += mce.GuidePrice_Up__c;
                } 
                //申请报价金额
                if (mce.Request_quotation_Amount__c!=null) {
                    Request_quotation_Amount += mce.Request_quotation_Amount__c; 
                }
                if (mce.Total_Contract_Price__c!=null) {
                    Total_Contract_Price += mce.Total_Contract_Price__c; 
                }
                //报价资产件数
                if (mce.Maintenance_Contract__r.Estimate_Asset_Cnt__c !=null) {
                    Estimate_Asset_Cnt += mce.Maintenance_Contract__r.Estimate_Asset_Cnt__c;
                }
                // 合同期间修理金额(大)
                // if (mce.Maintenance_Contract__r.Sum_repair_price_new__c !=null) {
                //     Sum_repair_price += mce.Maintenance_Contract__r.Sum_repair_price_new__c;
                // }
                //维修成本总金额
                if (mce.Maintenance_Contract__r.Repair_Cost_Sum__c !=null) {
                    Repair_Cost_Sum += mce.Maintenance_Contract__r.Repair_Cost_Sum__c;
                }
                //经销商名
                if (mce.Maintenance_Contract__r.Dealer__c !=null) {
                    Dealer = mce.Maintenance_Contract__r.Dealer__c;
                }
                 //先款经销商
                if (mce.Maintenance_Contract__r.old_Is_RecognitionModel__c !=null) {
                    old_Is_RecognitionModel = mce.Maintenance_Contract__r.old_Is_RecognitionModel__c;
                }
            }
 
            mcpe.New_Contract_Type_TextArea__c = String.join(New_Contract_Type_TextAreas, '\n');
            mcpe.Limit_Price_Amount__c = Limit_Price_Amount;
            mcpe.Asset_Repair_Sum_Price__c = Asset_Repair_Sum_PriceF;
            // mcpe.Contract_Amount__c = Contract_Amount;
            mcpe.GuidePrice_DownF__c = GuidePrice_DownF; 
            mcpe.GuidePrice_UpF__c = GuidePrice_UpF; 
            mcpe.Request_quotation_Amount__c = Request_quotation_Amount;
            mcpe.Maintenance_Price__c = contractAmount;
            mcpe.Total_Contract_Price__c = Total_Contract_Price;
                
            if(isNewContractType) {
                contractType = '新品合同';
            }
            if (totalPriceDenominator != 0) {
                // 预测消费率
                consumptionRateForecast = ((totalPriceNumerator/totalPriceDenominator)*100);
                mcpe.Consumption_rate_Forecast__c = consumptionRateForecast;
               
                // 预测成本率
                costrateForecast = (totalPriceNumerator/totalPriceDenominator)*0.75*100;
                mcpe.Cost_rate_Forecast__c = costrateForecast;
                
            }
            if(Request_quotation_Amount < GuidePrice_DownF){
                if(contractType == '新品合同') {
                    estimatePriceRange = '低于最低价格';
                } else if(contractType == '首签合同') {
                    if( consumptionRateForecast > 100) { //zzm 20240118 价格范围bug
                        estimatePriceRange = '低于最低价格,预测消费率在100%以上';
                    } else {
                        estimatePriceRange = '低于最低价格,预测消费率在100%以内';     
                    }
                } else {
                    if(costrateForecast>100) { //zzm 20240118 价格范围bug
                        estimatePriceRange = '低于最低价格,预测成本率在100%以上';
                    } else {
                        estimatePriceRange = '低于最低价格,预测成本率在100%以内';
                    }
                }
                
            } else {
                if( Request_quotation_Amount >= GuidePrice_DownF && Request_quotation_Amount <= GuidePrice_UpF){
                    estimatePriceRange = '标准价格的范围内';
                } else {
                    if(Request_quotation_Amount <= GuidePrice_UpF * 2){
                        estimatePriceRange = '最高价格的200%以内';
                    } else{
                        estimatePriceRange = '最高价格的200%以上';
                    }
 
                }
            } 
 
            if(estimatePriceRange == '标准价格的范围内') {
                contractPriceType = '标准价格范围内-终批人营业经理';
            } else {
                if(estimatePriceRange.contains('以内')) {
                    contractPriceType = '特价范围-终批人服务总监';
                } else {
                     contractPriceType = '特价范围-终批人总经理';
                }
            }
 
            //更新打包合同的cl3 4 5 6 
            User loginUser = [SELECT Id, Name, JingliApprovalManager__c, BuchangApprovalManager__c, ZongjianApprovalManager__c, TongkuoZongjian__c FROM User WHERE Id = :UserInfo.getUserId()];
            mcpe.JingliApprovalManager__c = loginUser.JingliApprovalManager__c == null ? loginUser.Id : loginUser.JingliApprovalManager__c;
            mcpe.BuchangApprovalManager__c = loginUser.BuchangApprovalManager__c == null ? loginUser.Id : loginUser.BuchangApprovalManager__c;
            mcpe.ZongjianApprovalManager__c = loginUser.ZongjianApprovalManager__c == null ? loginUser.Id : loginUser.ZongjianApprovalManager__c;
             if(mceSelectList.size()>0) {
                mcpe.SalesDepartment__c = mceSelectList[0].SalesDepartment__c;
            }
 
            mcpe.TKZongjianApprovalManager__c = loginUser.TongkuoZongjian__c == null ? loginUser.Id : loginUser.TongkuoZongjian__c;
            
            mcpe.Estimate_Price_range__c = estimatePriceRange;
            
            mcpe.ContractPriceType__c = contractPriceType;
            
 
 
            //用的报价上的合同总金额字段进行计算
            // mcpe.Contract_Amount__c = contractAmount;
            
            mcpe.New_Contract_Type_TxT__c = contractType;
            
 
            List<MaintanceContractPackEstimate__c> mcpeUpdateList = [Select Id,Decide__c,Maintenance_Contract_Estimate__c from MaintanceContractPackEstimate__c where MaintanceContractPack__c =:recordId];             
            List<MaintanceContractPackEstimate__c> IsSyncingList = [Select Id,Decide__c,Maintenance_Contract_Estimate__c from MaintanceContractPackEstimate__c where MaintanceContractPack__c =:recordId and Decide__c=true];             
 
            List<Maintenance_Contract_Estimate__c> mceAllLists = [Select Id
                    from Maintenance_Contract_Estimate__c 
                    where Maintenance_Contract__c in (Select Id from Maintenance_Contract__c  where MaintanceContractPack__c = :recordId) order by Maintenance_Contract__r.Id];
            
            if(isDecide) {
                //报价decide时,更新经销商
                mcp.old_Is_RecognitionModel__c = old_Is_RecognitionModel;
                mcp.Dealer__c = Dealer;
                //当前报价decide改为true,把其它组合的decide状态改为false;
                //只要有decide的组合,其它的报价组合同期都为false
                for(MaintanceContractPackEstimate__c mcpeOther : mcpeUpdateList) {
                    mcpeOther.Decide__c = false;
                    mcpeOther.IsSyncing__c = false;
                }
                mcpe.Decide__c =true;
                mcpe.IsSyncing__c =true;
 
                //当前报价组合选中的小合同报价decide状态改为true,其它合同报价状态的改为false
                for(Maintenance_Contract_Estimate__c mce : mceAllLists) {
                    mce.McpDecide__c = false;
                }
                //选中的报价组合里的报价为true;
                for(Maintenance_Contract_Estimate__c mce : mceSelectList){
                    mce.McpDecide__c =true;
                }
                //decide时,同步更新大合同相关的字段
                mcp.Limit_Price_Amount__c = Limit_Price_Amount;
                // mcp.Contract_Amount__c = Contract_Amount;
                mcp.GuidePrice_DownF__c = GuidePrice_DownF;
                mcp.GuidePrice_UpF__c = GuidePrice_UpF;  
                mcp.FieldRequest_quotation_Amount__c = Request_quotation_Amount;
                mcp.Consumption_rate_Forecast__c = consumptionRateForecast;
                mcp.Cost_rate_Forecast__c = costrateForecast;
                mcp.Estimate_Price_range__c = estimatePriceRange;
                mcp.ContractPriceType__c = contractPriceType;
                mcp.Contract_Amount__c = contractAmount;
                mcp.New_Contract_Type_TxT__c = contractType;
                mcp.Total_Contract_Price__c = Total_Contract_Price;
                //最新确认的报价组合
                mcp.Estimation_Id__c = mcpeId;
                mcp.Estimate_Asset_Cnt__c = Estimate_Asset_Cnt;
                mcp.Asset_Repair_Sum_PriceF__c = Asset_Repair_Sum_PriceF;
                // mcp.Sum_repair_price__C = Sum_repair_price; //Sum_repair_price__c合同期间修理金额--数据来源接口?
                mcp.Repair_Cost_Sum__c = Repair_Cost_Sum;
                //合同消费率的计算公式IF(Contract_Amount__c=0,0,Sum_repair_price_new__c / Contract_Amount__c)
                if(contractAmount==0) {
                    Usage_ratio_New = 0;
                } else {
                    Usage_ratio_New = (Sum_repair_price/contractAmount) * 100;
                }
                // mcp.Usage_ratio_New__c = Usage_ratio_New;
                //消费率(每月实时) 计算公式
                //IF(Management_Code__c = 'SH-RS-FJ0054009', 0.3535, 
                    //if(contractAmountForRate__c=0,0,
                        //if(RecordType.DeveloperName = 'VM_Contract',
                        //((currentTotalRepairAmount__c + previousTotalRepairAmount__c )/(GuaranteePrice_Amount__c*1.13)),
                        //(currentTotalRepairAmount__c + previousTotalRepairAmount__c )/contractAmountForRate__c)))
 
 
            } else {
                mcpe.Decide__c = false;
                //编辑decide状态为false时,需要把decide为true相关的合同报价状态改为true
                if(String.isNotBlank(mcpeId)) {
                    for(Maintenance_Contract_Estimate__c mce : mceAllLists) {
                        mce.McpDecide__c = false;
                    }
                    List<MaintanceContractPackEstimate__c> mcpeSelect = [Select Maintenance_Contract_Estimate__c from MaintanceContractPackEstimate__c where MaintanceContractPack__c = :recordId and id != :mcpeId and Decide__c=true limit 1];
                    if(mcpeSelect.size()>0) {
                        List<String> mceOtherIds = mcpeSelect[0].Maintenance_Contract_Estimate__c.split(',');
                        mceOther = [Select Id,name from Maintenance_Contract_Estimate__c where Name in :mceOtherIds];
                        for(Maintenance_Contract_Estimate__c mce : mceOther) {
                            mce.McpDecide__c = true;
                        }
                    }else {
                        mcp.Estimation_Id__c = null;
                    }
 
                }
 
                //如果没有decide的报价组合,当前编辑或新建的报价组合就为同期
                
                if(IsSyncingList.size()== 0) {
                    for(MaintanceContractPackEstimate__c mcpeOther : mcpeUpdateList) {
                        mcpeOther.IsSyncing__c = false;
                    }
                    mcpe.IsSyncing__c =true;
                }
            }
 
           
            //计算【相对标准价格范围的折扣率-Service_discount_Rate__c】
            // 1) 标准价格范围内时,结果为0;
            // 2) 比标准价格低时,结果是1-希望价格/标准价的最低价格
            // 3) 比标准价格高时,结果是1-希望价格/标准价的最高价格
            if(Request_quotation_Amount<GuidePrice_DownF) {
                Service_discount_Rate = (1-Request_quotation_Amount/GuidePrice_DownF)*100;
 
            }else if( Request_quotation_Amount >= GuidePrice_DownF && Request_quotation_Amount <= GuidePrice_UpF){
                Service_discount_Rate = 0;
            } else {
                Service_discount_Rate = (1-Request_quotation_Amount/GuidePrice_UpF)*100;
            }
            mcpe.Service_discount_Rate__c = Service_discount_Rate;
 
            if(mcpeUpdateList.size()>0) {
                update mcpeUpdateList;
            }
            if(mceAllLists.size()>0){
                update mceAllLists;
            }
            if(mceSelectList.size()>0) {
                update mceSelectList;
            }
            if(mceOther.size()>0) {
                update mceOther;
            }
            
            update mcp;
            System.debug(mcpeId);
            if(String.isNotBlank(mcpeId) && mcpeId!=null) {
                mcpe.Id = mcpeId;
                update mcpe;
            } else {
                INSERT mcpe;
            }
            returnData.mcpeId = mcpe.Id;
            returnData.result = '1';
 
            return returnData;
        }catch(Exception e){
            system.debug('Exception from update mcp:'+e.getMessage());
            returnData.result = e.getMessage();
            Database.rollback(sp);
            return returnData;
        }  
    }
    //服务合同打包-提交待审批
    @AuraEnabled
    public static String mcpAprroval(String recordId, List<String> mceIds,String mcpeReson,String mcpeId,Boolean isDecide,String consumptionRateSolution){
        SaveReturnData saveResult = save(recordId,mceIds,mcpeReson,mcpeId,isDecide,consumptionRateSolution);
 
        if(String.isBlank(mcpeId)) {
            if(saveResult.result == '1') {
                mcpeId = saveResult.mcpeId;
            } else {
                return saveResult.result;
            }
        }
 
        //当前服务合同(是否存在报价decide的情况)
        List<Maintenance_Contract__c> mcList = [Select Id,Name,Decided_Estimation__c from Maintenance_Contract__c 
                                                    where MaintanceContractPack__c = :recordId];
        for(Maintenance_Contract__c mc :mcList) {
            if(mc.Decided_Estimation__c !=null) {
                return mc.Name+':报价已经decide,请先取消decide,再提交审批! \n';
            }
        } 
        //提交审批时,提交时,更新 是否使用上一期维修合同首次报价日
        Date mon1stDate = Date.newInstance(Date.today().year(), Date.today().month(), 1);
        Map<id, Maintenance_Contract__c> mcUpdateList = new Map<id, Maintenance_Contract__c>();
        List<Maintenance_Contract_Asset_Estimate__c> mcaeList = [Select Id,
        Asset__r.Id,
        Asset__r.CurrentContract_F__r.Id,
        Asset__r.CurrentContract_F__r.Contract_End_Date__c,
        Asset__r.CurrentContract_F__r.First_Estimate_Date__c,
        Asset__r.CurrentContract_F__r.Contract_Consumption_rate__c,
        ifHaveleftInPrevious__c 
        from Maintenance_Contract_Asset_Estimate__c 
        where Maintenance_Contract_Estimate__r.Name in :mceIds and  Asset__r.CurrentContract_F__c !=null];
        for(Maintenance_Contract_Asset_Estimate__c mcae:mcaeList) {
            Maintenance_Contract__c mctemp = new Maintenance_Contract__c();
            if (mcae.Asset__r.CurrentContract_F__r.Contract_End_Date__c >= mon1stDate) {
                if (mcae.Asset__r.CurrentContract_F__r.First_Estimate_Date__c == null) {
                    mctemp.Id = mcae.Asset__r.CurrentContract_F__c;
                    mctemp.First_contract_usage_Rate__c = mcae.Asset__r.CurrentContract_F__r.Contract_Consumption_rate__c;
                    mctemp.First_Estimate_Date__c = Date.today();
                    mcUpdateList.put(mctemp.Id, mctemp);
                    mcae.ifHaveleftInPrevious__c = true;
                }
            }
        }
        if(mcaeList.size()>0) {
            update mcaeList;
        }
        if(mcUpdateList.size()>0) {
            update  mcUpdateList.values();
        }
        
        //小合同报价的原有逻辑
        // if (isApproval) {
        //                 Maintenance_Contract__c mctemp = new Maintenance_Contract__c();
        //                 //ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO , '+++++ ' + ass.rec.CurrentContract_F__r.Contract_End_Date__c + '   ' + mon1stDate));
        //                 // 因为月初计算消费率,所以结束日在上月或以前,可以取到完整消费率,否则保存首次报价日
        //                 if (input.rec.CurrentContract_F__r.Contract_End_Date__c >= mon1stDate) {
        //                     if (input.rec.CurrentContract_F__r.First_Estimate_Date__c == null) {
        //                         mctemp.Id = input.rec.CurrentContract_F__c;
        //                         mctemp.First_contract_usage_Rate__c = input.rec.CurrentContract_F__r.Contract_Consumption_rate__c;
        //                         mctemp.First_Estimate_Date__c = Date.today();
        //                         mcList.put(mctemp.Id, mctemp);
        //                         input.mcae.ifHaveleftInPrevious__c = true;
        //                     }
        //                 }
        //             }   
 
        try{
            Approval.ProcessSubmitRequest psr = new Approval.ProcessSubmitRequest();
            psr.setObjectId(mcpeId);
            Approval.ProcessResult submitResult = Approval.process(psr);
            return '1';
           
        }catch(exception e){
            return e.getMessage();
        } 
 
    }
    public class InitData {
        @AuraEnabled
        public String mcId ;
        @AuraEnabled
        public String mcName ;
        @AuraEnabled
        public String mcpeId ;
         @AuraEnabled
        public String mceIds ;
        @AuraEnabled
        public String mcpeReson ;
        @AuraEnabled
        public Boolean isMcpeDecide ;
        @AuraEnabled
        public String processStatus ;
         @AuraEnabled
        public String consumptionRateSolution ;
        @AuraEnabled
        public List<Maintenance_Contract_Estimate__c> mceList;
    }
    public class SaveReturnData {
        @AuraEnabled
        public String mcpeId ;
        @AuraEnabled
        public String result ;
    }
 
   
}