高章伟
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
public with sharing class MCAEHandler extends Oly_TriggerHandler{
 
    private Map<Id, Maintenance_Contract_Asset_Estimate__c> newMap;
    private Map<Id, Maintenance_Contract_Asset_Estimate__c> oldMap;
    private List<Maintenance_Contract_Asset_Estimate__c> newList;
    private List<Maintenance_Contract_Asset_Estimate__c> oldList;
 
 
    public MCAEHandler () {
        this.newMap = (Map<Id, Maintenance_Contract_Asset_Estimate__c>) Trigger.newMap;
        this.oldMap = (Map<Id, Maintenance_Contract_Asset_Estimate__c>) Trigger.oldMap;
        this.newList = (List<Maintenance_Contract_Asset_Estimate__c>) Trigger.new;
        this.oldList = (List<Maintenance_Contract_Asset_Estimate__c>) Trigger.old;
    }
 
    protected override void afterUpdate() {
        // updateMainContract();
    }
 
    public void updateMainContract(){
        System.debug(LoggingLevel.INFO, '*** in update: ');
        Map<String,List<Maintenance_Contract_Asset_Estimate__c>> mcaMap = new Map<String,List<Maintenance_Contract_Asset_Estimate__c>>();
        Map<String,Maintenance_Contract_Asset_Estimate__c> assetIds = new Map<String,Maintenance_Contract_Asset_Estimate__c>();
        for (Maintenance_Contract_Asset_Estimate__c  mca: newList) {
            System.debug(LoggingLevel.INFO, '***test mca.Asset__c: '+ mca.Asset__c);
            //保有设备
            if(String.isNotBlank(mca.Asset__c)){
                assetIds.put(mca.Asset__c,mca);
            System.debug(LoggingLevel.INFO, '***test mca.Asset__c: '+ mca.Asset__c);
 
            }
            //报价
            if(mca.Repair_Price__c!=0 && mca.Repair_Price__c!=null){
            // if(mca.Maintenance_Contract_Estimate__c!='' && mca.Maintenance_Contract_Estimate__c!=null){
                List<Maintenance_Contract_Asset_Estimate__c> mcaList = new List<Maintenance_Contract_Asset_Estimate__c>();
                mcaList.add(mca);
                if(mcaMap.containsKey(mca.Maintenance_Contract_Estimate__c)){
                    List <Maintenance_Contract_Asset_Estimate__c> mlist = mcaMap.get(mca.Maintenance_Contract_Estimate__c);
                    mlist.add(mca);
                    mcaMap.put(mca.Maintenance_Contract_Estimate__c,mlist);
                }else{
                    mcaMap.put(mca.Maintenance_Contract_Estimate__c,mcaList);
                }
            }
            
        }
        //合同设备 
        List<Maintenance_Contract_Asset__c> upMcAssetList = new List<Maintenance_Contract_Asset__c>();
        for (Maintenance_Contract_Asset__c mcasset : [SELECT Id,Maintenance_Contract_Asset_Estimate__c FROM Maintenance_Contract_Asset__c WHERE Asset__c IN:assetIds.keySet()]) {
            Maintenance_Contract_Asset_Estimate__c mca= assetIds.get(mcasset.Maintenance_Contract_Asset_Estimate__c); 
            mcasset.Third_Party_Return__c = mca.Third_Party_Return__c;
            mcasset.Surcharge_Defective_Contract__c = mca.Surcharge_Defective_Contract__c;
            upMcAssetList.add(mcasset);
        }
 
 
        //报价
        List<Maintenance_Contract_Estimate__c> upMEstimateList = new List<Maintenance_Contract_Estimate__c>();
        //维修合同
        List<Maintenance_Contract__c> upMContractList = new List<Maintenance_Contract__c>();
        for (Maintenance_Contract_Estimate__c mc : [SELECT Id, Maintenance_Contract__c,IsSyncing__c FROM Maintenance_Contract_Estimate__c WHERE Id IN:mcaMap.keySet()]) {
            Boolean hasThirdPartyReturnc = false;
            Boolean hasSurchargeDefective = false;
 
            for (Maintenance_Contract_Asset_Estimate__c mca: mcaMap.get(mc.Id)) {
                    if(mca.Third_Party_Return__c == true){
                        hasThirdPartyReturnc = true;
                    }
                    if(mca.Surcharge_Defective_Contract__c == true){
                        hasSurchargeDefective = true;
                    }
                System.debug(LoggingLevel.INFO, '*** boolean: ' + hasThirdPartyReturnc);
                System.debug(LoggingLevel.INFO, '*** boolean: ' + hasSurchargeDefective);
            }
            if(hasThirdPartyReturnc == true){
                mc.Third_Party_Return__c = true;
                mc.Surcharge_Defective_Contract__c = false;
            }else if(hasThirdPartyReturnc == false && hasSurchargeDefective == true){
                mc.Surcharge_Defective_Contract__c = true;
                mc.Third_Party_Return__c = false;
            }else if(hasThirdPartyReturnc == false && hasSurchargeDefective == false){
                mc.Surcharge_Defective_Contract__c = false;
                mc.Third_Party_Return__c = false;
            }
 
            if(mc.IsSyncing__c == true){           
                if(mc.Maintenance_Contract__c != null){
                    Maintenance_Contract__c mContract = new Maintenance_Contract__c();
                    mContract.Id = mc.Maintenance_Contract__c;
                    mContract.Third_Party_Return_Contract__c = mc.Third_Party_Return__c;
                    mContract.Surcharge_Defective_Contract__c = mc.Surcharge_Defective_Contract__c;
                    // if(hasThirdPartyReturnc == true){
                    //     mContract.Third_Party_Return_Contract__c = true;
                    //     mContract.Surcharge_Defective_Contract__c = false;
                    // }else{
                    //     mContract.Surcharge_Defective_Contract__c = true;
                    //     mContract.Third_Party_Return_Contract__c = false;
                    // }
 
                    System.debug(LoggingLevel.INFO, '*** upMContractList: ' + upMContractList);
                    upMContractList.add(mContract);
                }
            }
            upMEstimateList.add(mc);
 
        }
        if(upMEstimateList.size()>0){
            update upMEstimateList;
        }
        System.debug(LoggingLevel.INFO, '*** 报价: ' + upMEstimateList);
        System.debug(LoggingLevel.INFO, '*** 维修合同: ' + upMContractList);
        System.debug(LoggingLevel.INFO, '*** 合同设备: ' + upMcAssetList);
 
        if(upMContractList.size()>0){
            update upMContractList;
        }
 
        if(upMcAssetList.size()>0){
            update upMcAssetList;
        }
 
    }
 
    protected override void beforeUpdate() {
        
    }
}