彭锟
2022-04-01 216f61fcfdd0bc469cec809c31e4d49c1d86158e
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
@RestResource(urlMapping='/NFM113/*')
global with sharing class NFM113Rest {
    private static final String LOG_TYPE = 'NFM113';
    global class GeDatasRest {
        public GeDatas GeDatas;
    }
    
    global class GeDatas {
        public NFMUtil.Monitoring Monitoring;
        public ReceiveInfo[] ReceiveInfo;
    }
 
    global class ReceiveInfo{
        public String ReceiveNo;    //认款编号
        public String ItemNO;       //认款行项目
        public String CompanyCode;  //公司代码,根据此查找经销商
        public String ContractNo;    //维修合同号
        public String Amount;       //认款金额
        public String ReceiveDate;  //认款日期
        public String DeleteFlag;   //删除标识          删除状态打‘X’ 正常状态为空
        public String DeleteDate;   //认款删除日期      删除状态填写日期 正常状态为空
        public String Operator;     //认款人员
    }
    
    @HttpPost
    global static void execute() {
 
        // 取得接口传输内容
        String strData = RestContext.request.requestBody.toString();
        // GeDatasRest ges = (GeDatasRest) JSON.deserializeStrict(strData, GeDatasRest.class);
        GeDatas ges = (GeDatas) JSON.deserializeStrict(strData, GeDatas.class);
 
 
        if (ges == null ) {
            return;
        }
 
        NFMUtil.Monitoring Monitoring = ges.Monitoring;
        if (Monitoring == null) {
            return;
        }
 
        BatchIF_Log__c rowData = NFMUtil.saveRowData(Monitoring, LOG_TYPE, ges.ReceiveInfo);
        if (String.isBlank(rowData.Log__c) == false) {
            executefuture(rowData.Id);
        }
 
        // JSONを戻す
        RestResponse res = RestContext.response;
        res.addHeader('Content-Type', 'application/json');
        res.statusCode = 200;
        String jsonResponse = '{"status": "Success", "Message":""}';
        res.responseBody = blob.valueOf(jsonResponse);
        return;
    }
 
    
 
    @future
    global static void executefuture(String rowData_Id) {
        main(rowData_Id);
    }
 
    global static void main (String rowData_Id){
        Integer batch_retry_max_cnt = Integer.valueOf(System.Label.batch_retry_max_cnt);
        BatchIF_Log__c rowData = [Select Id, Name, Log__c, ErrorLog__c, Log2__c, Log3__c, Log4__c, Log5__c, Log6__c, Log7__c, Log8__c, Log9__c, Log10__c, Log11__c, Log12__c, MessageGroupNumber__c, retry_cnt__c from BatchIF_Log__c where RowDataFlg__c = true and Id = :rowData_Id];
        String logstr = rowData.MessageGroupNumber__c + ' start\n';
        BatchIF_Log__c iflog = new BatchIF_Log__c();
        iflog.Type__c = 'NFM113';
        iflog.MessageGroupNumber__c = rowData.MessageGroupNumber__c;
        iflog.Log__c = logstr;
        iflog.ErrorLog__c = '';
        insert iflog;
 
        String rowDataStr = NFMUtil.getRowDataStr(rowData);
        List<ReceiveInfo> GeDataList = (List<ReceiveInfo>) JSON.deserialize(rowDataStr, List<ReceiveInfo>.class);
        if (GeDataList == null || GeDataList.size() == 0) {
            return;
        }
 
        Savepoint sp = Database.setSavepoint();
        List<String> ReceiveNoList = new List<String>();//认款编号List
        List<String> CompanyCodeList = new List<String>();//公司编码List
        List<string> ContractNoList = new List<String>();//维修合同List
        //List<String> OperatorList = new List<String>();//认款人员List
        for(ReceiveInfo gedata : GeDataList){//判空    
            // //必填的验证
            // if(gedata.ReceiveNo = ''){
            //     iflog += '认款编号未填写无法保存该条数据';
            // }
            string key = gedata.ReceiveNo + gedata.ContractNo + gedata.ItemNO;
            ReceiveNoList.add(key);
            CompanyCodeList.add(gedata.CompanyCode);
            ContractNoList.add(gedata.ContractNo);
            //OperatorList.add(gedata.Operator);
        }
        Map<string,Id> ContractMap = new Map<string,Id>();
        Map<String,Payment_Maintenance_Contract__c> allMap = new Map<String,Payment_Maintenance_Contract__c>();
        List< Payment_Maintenance_Contract__c > allList =[select Id,ReceiveNoKey__c,ContractNo__c,ReceiveNo__c,ItemNO__c,Find_Dealers__c,Amount__c,Find_Contact__c,ReceiveDate__c,DeleteFlag__c,DeleteDate__c,Operator__c from Payment_Maintenance_Contract__c where ReceiveNoKey__c IN:ReceiveNoList];
        system.debug('allList'+allList);
        //增加一个用公司代码查找经销商SQL
        List<Account> dealersList = [select Id,Management_Code__c from account where Management_Code__c IN:CompanyCodeList AND RecordTypeId = '01210000000Qem1'];//
        List<Maintenance_Contract__c> ContractList = [select Id,Management_Code__c from Maintenance_Contract__c where Management_Code__c IN:ContractNoList];//查找维修合同
        //List<contact> conList = [select Id,Employee_No_manual__c from Contact where Employee_No_manual__c IN:OperatorList]; //联系人
        Map<string,Id> dealersMap = new Map<String,Id>();
        //Map<string,Id> ContractMap = new Map<String,Id>();
        //Map<string,Id> ConMap = new Map<String,Id>();
        for(Account temp : dealersList){//经销商Map
            dealersMap.put(temp.Management_Code__c,temp.Id);
        } 
        for(Maintenance_Contract__c temp : ContractList){//维修合同Map
            ContractMap.put(temp.Management_Code__c,temp.Id);
        }
        for(Payment_Maintenance_Contract__c temp : allList){//维修合同RC主数据Map,接收数据Map
            allMap.put(temp.ReceiveNoKey__c,temp);
        }
        // for(contact temp : conList){//联系人Map
        //     ConMap.put(temp.Employee_No_manual__c.repleace('o','O'),temp.Id);
        // }
        
        try{
            List<Payment_Maintenance_Contract__c> RMCList = new List<Payment_Maintenance_Contract__c>();//存放用于更新的数据
            // Map<String,Payment_Maintenance_Contract__c> RMCMap = new Map<String,Payment_Maintenance_Contract__c>();
            for(ReceiveInfo gedata : GeDataList){//遍历所有接口获取到的数据,判断该数据是否存在,因而进行更新或新增
                Payment_Maintenance_Contract__c RMC = new Payment_Maintenance_Contract__c();
                string key = gedata.ReceiveNo + gedata.ContractNo + gedata.ItemNO;
                system.debug('key2021/12/13              '+key);
                system.debug('key2021/12/13__2              '+allMap.get(key));
                system.debug('allMap.containsKey(key)       '+allMap.containsKey(key));
                if(allMap.containsKey(key)){//判断数据是否存在
                    RMC = allMap.get(key);
                }
                RMC.ContractNo__c = gedata.ContractNo;//维修合同号
                RMC.ReceiveNo__c = gedata.ReceiveNo;//认款编码
                RMC.ReceiveNoKey__c = key;    
                RMC.ItemNO__c = gedata.ItemNO;//认款行项目
                RMC.CompanyCode__c = gedata.CompanyCode;//公司代码 5111
                RMC.Operator__c = gedata.Operator;//认款人员
                RMC.Amount__c = Decimal.valueof(String.valueOf(gedata.Amount).trim());//认款金额
                RMC.ReceiveDate__c = NFMUtil.parseStr2Date(gedata.ReceiveDate);//认款日期
                RMC.DeleteFlag__c = gedata.DeleteFlag;//删除标识
                RMC.DeleteDate__c = NFMUtil.parseStr2Date(gedata.DeleteDate);//删除日期
                if(ContractMap.containsKey(gedata.ContractNo)){//维修合同
                    if(string.isBlank(RMC.Id)){
                        RMC.Find_Contact__c = ContractMap.get(gedata.ContractNo);
                    }
                }else{
                    iflog.ErrorLog__c += '输入的维修合同ID不存在';
                    continue;
                }
               
                // if(ConMap.containskey(gedata.Operator)){//认款人员
                //     RMC.Employees__c = ConMap.get(gedata.Operator);
                // }else{
                //     iflog.ErrorLog__c += '输入的认款人员不存在';
                //     continue;
                // }
                // RMCList.add(RMC);
                allMap.put(key,RMC);
            }
            system.debug('RMCList                 '+RMCList);
            // if(RMCList.size()>0){
            //     upsert RMCList; 
            // }
            if (allMap.size() >0) {
                upsert allMap.values();
            }
            rowData.retry_cnt__c = 0;
            logstr += '\nend';
 
            if (System.Test.isRunningTest()) {
                throw new ControllerUtil.myException('aaa');
            }
        }catch (Exception ex){
            // エラーが発生した場合1
            Database.rollback(sp);
            System.debug(Logginglevel.ERROR, LOG_TYPE+'_' + rowData.MessageGroupNumber__c + ':' + ex.getMessage());
            System.debug(Logginglevel.ERROR, LOG_TYPE+'_' + rowData.MessageGroupNumber__c + ':' + ex.getStackTraceString());
            logstr += '\n' + ex.getMessage();
            iflog.ErrorLog__c = ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + iflog.ErrorLog__c;
            // if (rowData.retry_cnt__c == null) rowData.retry_cnt__c = 0;
            // if (rowData.retry_cnt__c < batch_retry_max_cnt) {
            //     rowData.retry_cnt__c++;
            //     LogAutoSendSchedule.assignOneMinute();
            // }
            // if (rowData.retry_cnt__c >= batch_retry_max_cnt) {
            //     rowData.ErrorLog__c = ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + rowData.ErrorLog__c + '错误次数已经超过自动收信设定的最大次数,请手动收信';
            // }
            rowData = NFMUtil.LogAutoSend(rowData, ex, null);
        }
        update rowData;
        iflog.Log__c = logstr;
        if (iflog.Log__c.length() > 131072) {
            iflog.Log__c = iflog.Log__c.subString(0, 131065) + ' ...';
        }
        if (iflog.ErrorLog__c.length() > 32768) {
            iflog.ErrorLog__c = iflog.ErrorLog__c.subString(0, 32760) + ' ...';
        }
        update iflog;
       
    }
}