binxie
2024-01-18 0e0dd1e20e7211f3c3c11d77a41090d998dfd06c
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
/**
 * Maintenance_Contract_Asset__c と Reapire__c(Account経由)は主従関係、そのままupdate OK
 */
trigger MaintenanceContractAssetTrigger on Maintenance_Contract_Asset__c ( before insert, before update ) {
 
 
    //deloitte-zhj 20231124 本地化导入 start
    if((!Test.isRunningTest())&&System.Label.ByPassTrigger.contains(UserInfo.getUserId())){
        return;
    }
    //deloitte-zhj 20231124 本地化导入 end
    
    System.debug( '-----+MaintenanceContractAssetTrigger start');
 
    // ----------------------------------------------------------------------
    // ここより、修理のサービスコントラクト項目を自動的に更新するロジック
    // ----------------------------------------------------------------------
 
    // 前処理
    // Set<Id> assetIds = new Set<Id>();
//    Set<Id> serviceIds = new Set<Id>();
    if (StaticParameter.MaintenanceContractAssetTrigger) {
        List<String> locallastList = new List<String>();
        List<String> locallist = new List<String>();
        
        for ( Maintenance_Contract_Asset__c local : Trigger.New) {
            locallastList.add(local.LastMContract__c);
            locallist.add(local.Maintenance_Contract__c);
        }
        List<Maintenance_Contract__c> llmc = [select id,contractNextYear_new__c,serviceContractNextYear_new__c
                                                 from Maintenance_Contract__c
                                                where Id in :locallastList];
        List<Maintenance_Contract__c> lmc = [select id,RecordType.name from Maintenance_Contract__c where Id in :locallist];                                  
        
        Map<Id, Maintenance_Contract__c> map1 = new Map<Id, Maintenance_Contract__c>();
        Map<Id, Maintenance_Contract__c> map2 = new Map<Id, Maintenance_Contract__c>();
 
             for (Maintenance_Contract__c mc:llmc ) {
                if (!map1.containsKey(mc.id)) {
                    map1.put(mc.id,mc);
                }
            }
            for (Maintenance_Contract__c mc:lmc ) {
                if (!map2.containsKey(mc.id)) {
                    map2.put(mc.id,mc);
                } 
            }
        List<Maintenance_Contract__c> mcList = new List<Maintenance_Contract__c>();
        for ( Maintenance_Contract_Asset__c local : Trigger.New) {
             // 2000/07/19 进程生成器 - 来年合同设置
                Maintenance_Contract__c mc1 = new Maintenance_Contract__c();
                Maintenance_Contract__c mc2 = new Maintenance_Contract__c();
                if (map1.containsKey(local.LastMContract__c)) {
                    mc1 = map1.get(local.LastMContract__c);
                    if (local.LastMContract_Gap__c <= 365 && mc1.contractNextYear_new__c == null) {
                     //更新上一期维修合同的来年维修合同
                        mc1.contractNextYear_new__c = local.Maintenance_Contract__c;
                     }
                }
                if (map2.containsKey(local.Maintenance_Contract__c)&&map1.containsKey(local.LastMContract__c)) {
                    mc2 = map2.get(local.Maintenance_Contract__c);
                    if (local.LastMContract_Gap__c <= 365 && mc1.serviceContractNextYear_new__c == null && mc2.RecordType.name == '服务合同') {
                         //更新上一期维修合同的来年服务合同
                     mc1.serviceContractNextYear_new__c = local.Maintenance_Contract__c;
                    }
                }
                System.debug( '添加mc1='+mc1);
                // System.debug( 'mc1.length='+mc1.length());
                // system.assertEquals(mc1,null);
                if (mc1.id!=null && !mcList.contains(mc1)){
 
                     mcList.add(mc1);
                }
        }
        System.debug( '开始更新'+mcList);
        if (mcList!=null&&mcList.size()!=0) {
            update mcList;
        }
 
        
    }
    
    
 
    // 処理対象となる修理一覧を得る
//    List<Repair__c> repairList = [SELECT Id, SERVICE_CONTRACT_JUDEGE_DAY__C, Maintenance_Contract__c FROM Repair__C WHERE Delivered_Product__c IN :assetIds];
    // 修理を更新すれば、修理のTriggerによって、修理のサービスコントラクト項目に値がセットされる
//    update repairList;
 
//    // 処理対象となる、サービス契約の一覧を得る
//    List<Maintenance_Contract__c> serviceList = [SELECT Id, Contract_Start_Date__c, Contract_End_Date__c FROM Maintenance_Contract__c WHERE Id IN :serviceIds];
 
    // ----------------------------------------------------------------------
    // ここまで、サービスコントラクト項目を自動的に更新するロジック
    // ----------------------------------------------------------------------
     
 
 
 
 
System.debug( '-----+MaintenanceContractAssetTrigger end');
 
}