高章伟
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
public without sharing class ESignFormHandler extends Oly_TriggerHandler {
    private Map<Id, eSignForm__c> newMap;
        private Map<Id, eSignForm__c> oldMap;
        private List<eSignForm__c> newList;
        private List<eSignForm__c> oldList;
 
    public ESignFormHandler() {
 
        this.newMap = (Map<Id, eSignForm__c>) Trigger.newMap;
        this.oldMap = (Map<Id, eSignForm__c>) Trigger.oldMap;
        this.newList = (List<eSignForm__c>) Trigger.new;
        this.oldList = (List<eSignForm__c>) Trigger.old;
    }
 
    protected override void beforeInsert() {
        beforeExecute();
    }
 
    protected override void beforeUpdate() {
        beforeExecute();
    }
    protected override void afterInsert() {
        afterExecute();
        // 进口单证 start
        // 签收单生成后插入进口单证对应的数据
        insertFrameNumManage();
        // 进口单证 end
    }
 
     protected override void afterUpdate() {
        afterExecute();
    }
 
    private void beforeExecute() {
        Map<Id,eSignForm__c> accMap = new Map<Id,eSignForm__c>();
        for(eSignForm__c nObj : newList) {
            //DN号不为空
            if(String.isNotBlank(nObj.DNNameNo0__c)){
                Blob bodyBlob=Blob.valueOf(nObj.DNNameNo0__c);
                nObj.DNName0_base64__c =String.valueOf(EncodingUtil.base64Encode(bodyBlob));
            }
            //经销商管理编码不为空
            if(String.isNotBlank(nObj.AgencyNum__c)){
                Blob bodyBlob=Blob.valueOf(nObj.AgencyNum__c);
                nObj.AgencyNum_base64__c = String.valueOf(EncodingUtil.base64Encode(bodyBlob));
            }
        }
    }
 
    private void afterExecute() {
        List<eSignFormEntry__c>  eSignFormEntryList = new List<eSignFormEntry__c>();
 
        for (eSignForm__c eSignForm : newList) {
 
                if(eSignForm.finalUpadteFrom__c != null){
                    eSignFormEntry__c es = new eSignFormEntry__c();
                    es.id = eSignForm.finalUpadteFrom__c;
                    es.IsHandled__c = true;
                    eSignFormEntryList.add(es);
                }
 
            
            }
        if(eSignFormEntryList.size() > 0){
            update eSignFormEntryList;
        }        
    }
 
    private void insertFrameNumManage() {
        Set<String> IdSet = new Set<String>();
        Map<String,Id> eSignFormMap = new Map<String,Id>();
        Map<String,String> DNMap  = new Map<String,String>();
        for (eSignForm__c nObj : newList) {
            IdSet.add(nObj.Statu_Achievements_DN__c);
        }
        Map<String,Statu_Achievements_DN_details__c> sandMap = new Map<String,Statu_Achievements_DN_details__c>();
        Map<String,Statu_Achievements_DN_details__c> UpdateSandMap = new Map<String,Statu_Achievements_DN_details__c>();
        Map<String,String> UpdateFIdMap = new Map<String,String>();
        // 查询明细 在机身号管理中有没,没有生成,有更新 签收单、发货DN明细、保有设备
        for(Statu_Achievements_DN_details__c dn:[SELECT Id,SerialNumber__c,asset__c,
                    Statu_Achievements_DN__c,SerialNoorLotNo_Raw__c,TracingCode_Raw__c,
                    OTCode_Raw__c,asset__r.Name,QTY__c,Statu_Achievements_DN__r.Name
                    FROM Statu_Achievements_DN_details__c
                    WHERE Statu_Achievements_DN__c =:IdSet ]){
            sandMap.put(dn.TracingCode_Raw__c,dn);
            DNMap.put(dn.TracingCode_Raw__c,dn.Statu_Achievements_DN__r.Name);
        }
        for(FrameNumManage__c f:[SELECT Id,ManagementCode__c  FROM FrameNumManage__c WHERE ManagementCode__c in :sandMap.keySet()]){
            sandMap.remove(f.ManagementCode__c);
            // 更新机身号管理
            UpdateSandMap.put(f.ManagementCode__c,sandMap.get(f.ManagementCode__c));
            UpdateFIdMap.put(f.ManagementCode__c, f.Id);
        }
        for(eSignForm__c es: newList){
            for(String key:DNMap.keySet()){
                if(DNMap.get(key) == es.DNName__c){
                    eSignFormMap.put(key,es.Id);
                }
            } 
        }
        if(sandMap.size() > 0){
            List<FrameNumManage__c> infnmList = new List<FrameNumManage__c>();
            for (Statu_Achievements_DN_details__c s:sandMap.values()) {
                FrameNumManage__c temp = new FrameNumManage__c();
                temp.Name = s.TracingCode_Raw__c;
                temp.ManagementCode__c = s.TracingCode_Raw__c;
                temp.SerialNumberS__c = s.SerialNoorLotNo_Raw__c+'('+s.TracingCode_Raw__c+')';
                temp.SerialNumber__c = s.SerialNoorLotNo_Raw__c;
                temp.Num__c = s.QTY__c;
                temp.CheckOutNo__c  = s.Statu_Achievements_DN__r.Name.subString(2);//发货DN 的name去掉前两位的 00
 
                temp.Statu_Achievements_DN_details__c = s.Id;
                temp.Asset__c = s.asset__c;
                temp.signInForm__c = eSignFormMap.get(s.TracingCode_Raw__c);
                
                temp.Material__c = s.OTCode_Raw__c;
                temp.MaterialDepict__c = s.asset__r.Name;
                infnmList.add(temp);
            }
            if(infnmList.size() > 0){
                insert infnmList;
                // Database.executeBatch(new SetFrameNumManageBatch(), 100);
            }    
        }
        if(UpdateSandMap.size() > 0){
            List<FrameNumManage__c> upfnmList = new List<FrameNumManage__c>();
            for (Statu_Achievements_DN_details__c s:UpdateSandMap.values()) {
                FrameNumManage__c temp = new FrameNumManage__c();
                temp.id = UpdateFIdMap.get(s.TracingCode_Raw__c);
                temp.Statu_Achievements_DN_details__c = s.Id;
                temp.Asset__c = s.asset__c;
                temp.signInForm__c = eSignFormMap.get(s.TracingCode_Raw__c);
                upfnmList.add(temp);
            }
            update upfnmList;
        }
    }
}