沙世明
2023-03-22 e4185f503d973b28f95725908e3fad155cfbf088
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
/*
  20230302 ljh 测试类 ESignFormHandlerTest 可以 FrameNumUploadControllerTest 也可以
 */
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>();
        // 进口单证 增加发货日设置 start
        Set<Date> dateset = new Set<Date>();
        Map<Date, String> olycals = new Map<Date, String>();
        // 进口单证 增加发货日设置 end
        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 
                    // 进口单证 增加发货日设置 start
                    , Statu_Achievements_DN__r.DeliveryDate__c 
                    // 进口单证 增加发货日设置 end
                    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);
            // 取所有发货日
            dateset.add(dn.Statu_Achievements_DN__r.DeliveryDate__c);
        }
        for(FrameNumManage__c f:[SELECT Id,ManagementCode__c  FROM FrameNumManage__c WHERE ManagementCode__c in :sandMap.keySet()]){
            // 更新机身号管理
            UpdateSandMap.put(f.ManagementCode__c,sandMap.get(f.ManagementCode__c));
            UpdateFIdMap.put(f.ManagementCode__c, f.Id);
            sandMap.remove(f.ManagementCode__c);
        }
        for(eSignForm__c es: newList){
            for(String key:DNMap.keySet()){
                if(DNMap.get(key) == es.DNName__c){
                    eSignFormMap.put(key,es.Id);
                }
            } 
        }
        // 取发货日的奥林巴斯日历
        for (OlympusCalendar__c oc : [select Id, Date__c from OlympusCalendar__c where Date__c in :dateset]) {
            olycals.put(oc.Date__c, oc.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.DeliveryDate__c = s.Statu_Achievements_DN__r.DeliveryDate__c;
                temp.DeliveryDate_select__c = temp.DeliveryDate__c != null && olycals.size() > 0 && String.isNotBlank(olycals.get(temp.DeliveryDate__c)) ? olycals.get(temp.DeliveryDate__c) : null;
                
                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;
        }
    }
}