From 9518d7d3173b233f45dcbe58ab5ae2fca143dfd8 Mon Sep 17 00:00:00 2001
From: 涂煌豪 <tuhuanghao@prec-tech.com>
Date: 星期一, 16 五月 2022 10:41:51 +0800
Subject: [PATCH] 【委托】电子签收单RPA系统迁移

---
 force-app/main/default/classes/NFM116BatchTest.cls-meta.xml         |    5 
 force-app/main/default/classes/NFM116BatchSchedule.cls              |    6 
 force-app/main/default/classes/NFMUtil.cls                          |   12 +
 force-app/main/default/classes/NFM116Controller.cls-meta.xml        |    5 
 force-app/main/default/classes/NFM116BatchScheduleTest.cls-meta.xml |    5 
 force-app/main/default/classes/NFM116ControllerTest.cls-meta.xml    |    5 
 force-app/main/default/classes/NFM116Batch.cls                      |   69 +++++++++
 force-app/main/default/classes/NFM116ControllerTest.cls             |   58 ++++++++
 force-app/main/default/classes/NFM116Controller.cls                 |  150 +++++++++++++++++++++
 force-app/main/default/classes/NFM116Batch.cls-meta.xml             |    5 
 force-app/main/default/classes/NFM116BatchSchedule.cls-meta.xml     |    5 
 force-app/main/default/classes/NFM116BatchTest.cls                  |   72 ++++++++++
 force-app/main/default/classes/NFM116BatchScheduleTest.cls          |   20 ++
 13 files changed, 417 insertions(+), 0 deletions(-)

diff --git a/force-app/main/default/classes/NFM116Batch.cls b/force-app/main/default/classes/NFM116Batch.cls
new file mode 100644
index 0000000..b19d9d4
--- /dev/null
+++ b/force-app/main/default/classes/NFM116Batch.cls
@@ -0,0 +1,69 @@
+global class NFM116Batch implements Database.Batchable<sObject>, Database.AllowsCallouts {
+    // 璁惧畾鍙戦�佹寚瀹氱鏀跺崟鐨処D
+    public String setId;
+    // 璁惧畾鎵ц鏃ユ湡
+    public Date setDate;
+    // 鏄惁鍙戦�佹寚瀹氭棩鏈�30澶╀箣鍚庣殑绛炬敹鍗�
+    public Boolean isAfterDate = false;
+    // 鏄惁鍙戦�佹寚瀹氱殑绛炬敹鍗�
+    public Boolean isAppoint = false;
+    // 璁惧畾鍙戦�佺殑绛炬敹鍗曠殑IdList
+    public List<String> setIdList;
+
+    // Default 鍙戦�佸綋鏃ョ鍚堟潯浠剁殑绛炬敹鍗�
+    global NFM116Batch() {
+        this.setDate = Date.today();
+    }
+    // 鍙戦�佹寚瀹氭棩鏈熺鍚堟潯浠剁殑绛炬敹鍗�, eg: testDate = Date.newInstance(2022, 05, 02),鍙戦��20220501瀹屾垚绛炬敹鐨勭鏀跺崟
+    global NFM116Batch(Date testDate) {
+        this.setDate = testDate;
+    }
+    // 鍙戦�佸湪鎸囧畾鏃ユ湡30澶╀箣鍚庣殑鎵�鏈夌鍚堟潯浠剁殑绛炬敹鍗�(isAfterDate涓簍rue鐨勬椂鍊�)
+    global NFM116Batch(Date testDate, Boolean isAfterDate) {
+        this.setDate = testDate;
+        this.isAppoint = true;
+        this.isAfterDate = isAfterDate;
+    }
+    // 鍙戦�佹寚瀹欼d鐨勭鏀跺崟
+    global NFM116Batch(String setId) {
+        this.setId = setId;
+        this.isAppoint = true;
+    }
+    // 鍙戦�佹寚瀹欼dList鐨勭鏀跺崟
+    global NFM116Batch(List<String> setIdList) {
+        this.setIdList = setIdList;
+        this.isAppoint = true;
+    }
+
+    global Database.QueryLocator start(Database.BatchableContext bc) {
+        String query = 'select Id from eSignForm__c where agencyAcceptSAPResult__c != null and HPAcceptSAPResult__c != null ';
+        if(String.isNotBlank(setId)){
+            query += ' and Id =: setId ';
+        } else if (setIdList != null && setIdList.size() > 0) {
+            query += ' and Id IN: setIdList ';
+        } else if(!isAppoint){
+            query += ' and SAPReportDate__c = ' + setDate.addDays(-1).format().replace('/', '-') ;
+        } else if(isAfterDate){
+            query += ' and SAPReportDate__c > ' + setDate.addDays(-30).format().replace('/', '-') ;
+        }
+        System.debug('thhquery:' + query);
+        return Database.getQueryLocator(query);
+    }
+
+    global void execute(Database.BatchableContext BC, List<eSignForm__c> eSignFormList) {
+        List<String> eSignFormIdList = new List<String>();
+        if(eSignFormList.size() > 0){
+            for(eSignForm__c es : eSignFormList){
+                eSignFormIdList.add(es.Id);
+            }
+        }
+        System.debug('eSignFormIdList1:' + eSignFormIdList);
+        if(eSignFormIdList.size() > 0){
+            NFM116Controller.executeNotFuture(null, eSignFormIdList);
+        }
+    }
+
+    global void finish(Database.BatchableContext BC) {
+        
+    }
+}
\ No newline at end of file
diff --git a/force-app/main/default/classes/NFM116Batch.cls-meta.xml b/force-app/main/default/classes/NFM116Batch.cls-meta.xml
new file mode 100644
index 0000000..40d6793
--- /dev/null
+++ b/force-app/main/default/classes/NFM116Batch.cls-meta.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
+    <apiVersion>54.0</apiVersion>
+    <status>Active</status>
+</ApexClass>
diff --git a/force-app/main/default/classes/NFM116BatchSchedule.cls b/force-app/main/default/classes/NFM116BatchSchedule.cls
new file mode 100644
index 0000000..8245183
--- /dev/null
+++ b/force-app/main/default/classes/NFM116BatchSchedule.cls
@@ -0,0 +1,6 @@
+global class NFM116BatchSchedule implements Schedulable {
+
+    global void execute(SchedulableContext SC) {
+        Id execBTId = Database.executeBatch(new NFM116Batch(), 200);
+    }
+}
\ No newline at end of file
diff --git a/force-app/main/default/classes/NFM116BatchSchedule.cls-meta.xml b/force-app/main/default/classes/NFM116BatchSchedule.cls-meta.xml
new file mode 100644
index 0000000..40d6793
--- /dev/null
+++ b/force-app/main/default/classes/NFM116BatchSchedule.cls-meta.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
+    <apiVersion>54.0</apiVersion>
+    <status>Active</status>
+</ApexClass>
diff --git a/force-app/main/default/classes/NFM116BatchScheduleTest.cls b/force-app/main/default/classes/NFM116BatchScheduleTest.cls
new file mode 100644
index 0000000..0dd8a5e
--- /dev/null
+++ b/force-app/main/default/classes/NFM116BatchScheduleTest.cls
@@ -0,0 +1,20 @@
+@isTest
+private class NFM116BatchScheduleTest {
+    static testMethod void testExecute() {
+        // This test runs a scheduled job at midnight Sept. 3rd. 2022
+        String CRON_EXP = '0 0 0 3 9 ? 2022';
+
+        System.Test.startTest();
+        // Schedule the test job
+        String jobId = System.schedule('NFM116BatchScheduleTest', CRON_EXP, new NFM116BatchSchedule());
+        // Get the information from the CronTrigger API object
+        CronTrigger ct = [SELECT Id, CronExpression, TimesTriggered, NextFireTime FROM CronTrigger WHERE id = :jobId];
+        // Verify the expressions are the same
+        System.assertEquals(CRON_EXP, ct.CronExpression);
+        // Verify the job has not run
+        System.assertEquals(0, ct.TimesTriggered);
+        // Verify the next time the job will run
+        System.assertEquals('2022-09-03 00:00:00', String.valueOf(ct.NextFireTime));
+        System.Test.StopTest();
+    }
+}
\ No newline at end of file
diff --git a/force-app/main/default/classes/NFM116BatchScheduleTest.cls-meta.xml b/force-app/main/default/classes/NFM116BatchScheduleTest.cls-meta.xml
new file mode 100644
index 0000000..40d6793
--- /dev/null
+++ b/force-app/main/default/classes/NFM116BatchScheduleTest.cls-meta.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
+    <apiVersion>54.0</apiVersion>
+    <status>Active</status>
+</ApexClass>
diff --git a/force-app/main/default/classes/NFM116BatchTest.cls b/force-app/main/default/classes/NFM116BatchTest.cls
new file mode 100644
index 0000000..fa0efc4
--- /dev/null
+++ b/force-app/main/default/classes/NFM116BatchTest.cls
@@ -0,0 +1,72 @@
+@isTest
+private class NFM116BatchTest {
+    @TestSetup
+    static void makeData(){
+        Opportunity opp = new Opportunity();
+        opp.Opportunity_No__c = 'XB-153P-06-S151289';
+        opp.Opportunity_Category__c = 'ET';
+        opp.StageName = '鐩';
+        opp.Authorized_DB_No__c = 'XB-153P-06-S151289';
+        opp.Name = '::XB-153P-06-S151289';
+        opp.Close_Forecasted_Date__c = Date.today();
+        opp.CloseDate = Date.today();
+        opp.Opp_Confirmation_Day__c = Date.today();
+        insert opp;
+        
+        Statu_Achievements__c Statu1 = new Statu_Achievements__c();
+        Statu1.ContractNO__c = 'SH-ET-191025';
+        Statu1.Opportunity__c = opp.Id;
+        Statu1.ContractAmount__c = 100;
+        insert Statu1;
+
+        eSignForm__c es = new eSignForm__c();
+        es.Statu_Achievements__c = Statu1.Id;
+        es.DNName__c = '11223344';
+        es.agencyAutoSignUpStatus__c = '宸叉壒鍑�';
+        es.agencySignUpDate__c = Date.today().addDays(-1);
+        es.salesManageConfirmDate__c  = Date.today().addDays(-1);
+        es.HPSignUpStatus__c = '宸叉壒鍑�';
+        es.HPSignUpDate__c = Date.today().addDays(-1);
+        es.HPConfirmDate__c = Date.today().addDays(-1);
+        es.end_User__c = '濂戠磩';
+        insert es;
+
+        eSignFormLineItem__c esi = new eSignFormLineItem__c();
+        esi.Count__c = 2;
+        esi.agencyGoodStatus__c = '瀹屽ソ';
+        esi.eSignForm__c = es.Id;
+        insert esi;
+        eSignFormLineItem__c esi2 = new eSignFormLineItem__c();
+        esi2.Count__c = 2;
+        esi2.agencyGoodStatus__c = '瀹屽ソ';
+        esi2.eSignForm__c = es.Id;
+        insert esi2;
+    }
+    static testMethod void testMethod1(){
+        Test.startTest();
+        Database.executeBatch(new NFM116Batch(), 200);
+        Test.stopTest();
+    }
+    static testMethod void testMethod2(){
+        Test.startTest();
+        Database.executeBatch(new NFM116Batch(Date.today()), 200);
+        Test.stopTest();
+    }
+    static testMethod void testMethod3(){
+        Test.startTest();
+        Database.executeBatch(new NFM116Batch(Date.today().addDays(-30), true), 200);
+        Test.stopTest();
+    }
+    static testMethod void testMethod4(){
+        Test.startTest();
+        eSignForm__c es = [select Id from eSignForm__c];
+        Database.executeBatch(new NFM116Batch(es.Id), 200);
+        Test.stopTest();
+    }
+    static testMethod void testMethod5(){
+        Test.startTest();
+        eSignForm__c es = [select Id from eSignForm__c];
+        Database.executeBatch(new NFM116Batch(new List<String>{es.id}), 200);
+        Test.stopTest();
+    }
+}
\ No newline at end of file
diff --git a/force-app/main/default/classes/NFM116BatchTest.cls-meta.xml b/force-app/main/default/classes/NFM116BatchTest.cls-meta.xml
new file mode 100644
index 0000000..40d6793
--- /dev/null
+++ b/force-app/main/default/classes/NFM116BatchTest.cls-meta.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
+    <apiVersion>54.0</apiVersion>
+    <status>Active</status>
+</ApexClass>
diff --git a/force-app/main/default/classes/NFM116Controller.cls b/force-app/main/default/classes/NFM116Controller.cls
new file mode 100644
index 0000000..5f18438
--- /dev/null
+++ b/force-app/main/default/classes/NFM116Controller.cls
@@ -0,0 +1,150 @@
+public with sharing class NFM116Controller {
+    public static String status;
+    public class OnlineSigns {
+        public NFMUtil.Monitoring Monitoring;
+        public OnlineSign[] OnlineSign;
+    }
+    public class OnlineSign {
+        public String SoNo;
+        public String DeliveryNote;
+        public String DealerResult;
+        public String DealerDate;
+        public String HospitalResult;
+        public String HospitalDate;
+    }
+
+     /**
+     * NFM116銇�佷俊鍑︾悊
+     * 
+     * @param iflog_Id          //鏃ュ織琛ㄧ殑ID
+     * @param OnlineSignIdList  //瑕佸彂閫佺殑绛炬敹鍗曠殑ID
+     */
+    @future (callout=true)
+    public static void callout(String iflog_Id, List<String> OnlineSignIdList) {
+        executeNotFuture(iflog_Id, OnlineSignIdList);
+    }
+
+    public static void executeNotFuture(String iflog_Id, List<String> OnlineSignIdList) {
+        if (OnlineSignIdList == null || OnlineSignIdList.size() == 0) {
+            return;
+        }
+        //MessageGroupNumber鐨勮幏鍙�
+        Datetime nowDT = Datetime.now();
+        String nowStr = nowDT.format('yyyyMMddHHmm');
+        BatchIF_Log__c iflog = new BatchIF_Log__c();
+        if(String.isNotBlank(iflog_Id)){
+            iflog = [Select Id, Name, Log__c, ErrorLog__c, MessageGroupNumber__c from BatchIF_Log__c where Id = :iflog_Id];
+        } else{
+            iflog.MessageGroupNumber__c = nowStr;
+        }
+        iflog.Log__c = 'callout start\n';
+        iflog.Type__c = 'NFM116';
+        iflog.ErrorLog__c = '';
+        String logstr = iflog.Log__c + '\nNumberOfRecord=' + OnlineSignIdList.size();
+
+        //Monitoring鐨勮瀹�
+        OnlineSigns onlineSigns = new OnlineSigns();
+        onlineSigns.Monitoring = new NFMUtil.Monitoring();
+        onlineSigns.Monitoring.TransmissionDateTime = nowStr;
+        onlineSigns.Monitoring.Text                 = ''; 
+        onlineSigns.Monitoring.Tag                  = 'MSGH';
+        onlineSigns.Monitoring.Sender               = 'SFDC';
+        onlineSigns.Monitoring.Receiver             = 'SAP';
+        onlineSigns.Monitoring.NumberOfRecord       = '' + OnlineSignIdList.size();
+        onlineSigns.Monitoring.MessageType          = 'NFM116';
+        onlineSigns.Monitoring.MessageGroupNumber   = iflog.Name;
+
+        BatchIF_Log__c rowData = new BatchIF_Log__c();
+        try {
+            List<eSignForm__c> eSignFormList = [select Id, SANumber__c, DNName__c, agencyAcceptSAPResult__c, HPAcceptSAPResult__c, agencyAccOrSAPConfirmDate__c, 
+                                                    hpAccOrSAPConfirmDate__c from eSignForm__c where Id IN :OnlineSignIdList];
+            System.debug('eSignFormList1:' + eSignFormList);
+            onlineSigns.OnlineSign = new List<OnlineSign>();
+            for(eSignForm__c eSignForm : eSignFormList){
+                OnlineSign onlineSign = new OnlineSign();
+                onlineSign.SoNo           = eSignForm.SANumber__c;
+                onlineSign.DeliveryNote   = eSignForm.DNName__c;
+                onlineSign.DealerResult   = eSignForm.agencyAcceptSAPResult__c;
+                onlineSign.DealerDate     = NFMUtil.formatDate2Str(eSignForm.agencyAccOrSAPConfirmDate__c);
+                onlineSign.HospitalResult = eSignForm.HPAcceptSAPResult__c;
+                onlineSign.HospitalDate   = NFMUtil.formatDate2Str(eSignForm.hpAccOrSAPConfirmDate__c);
+                onlineSigns.OnlineSign.add(onlineSign);
+            }
+            if(onlineSigns.OnlineSign.size() > 0){
+                NFMUtil.Monitoring Monitoring   = new NFMUtil.Monitoring();
+                Monitoring.Tag                  = onlineSigns.Monitoring.Tag;
+                Monitoring.Sender               = onlineSigns.Monitoring.Sender;
+                Monitoring.Receiver             = onlineSigns.Monitoring.Receiver;
+                Monitoring.MessageType          = onlineSigns.Monitoring.MessageType;
+                Monitoring.MessageGroupNumber   = onlineSigns.Monitoring.MessageGroupNumber;
+                Monitoring.NumberOfRecord       = onlineSigns.Monitoring.NumberOfRecord;
+                Monitoring.TransmissionDateTime = onlineSigns.Monitoring.TransmissionDateTime;
+                Monitoring.Text                 = '';
+                rowData = NFMUtil.makeRowData(Monitoring, 'NFM116', onlineSigns);
+                execute(rowData, iflog);
+            }
+            logstr += '\nend';
+        } catch(Exception ex) {
+            System.debug(Logginglevel.ERROR, 'NFM116_' + iflog.Name + ':' + ex.getMessage());
+            System.debug(Logginglevel.ERROR, 'NFM116_' + iflog.Name + ':' + ex.getStackTraceString());
+            logstr += ex.getMessage();
+            iflog.ErrorLog__c += ex.getMessage() + '\n';
+            iflog.ErrorLog__c += ex.getStackTraceString() + '\n';
+        }
+        System.debug('thhrowData--->'+rowData);
+        if (rowData != null) {
+            upsert rowData;
+        }
+        iflog.Log__c = logstr;
+        upsert iflog;
+    }
+
+    public static void execute(BatchIF_Log__c rowData, BatchIF_Log__c iflog) {
+        Integer batch_retry_max_cnt = Integer.valueOf(System.Label.batch_retry_max_cnt);
+        String rowDataStr = NFMUtil.getRowDataStr(rowData);
+        OnlineSigns onlineSigns = (OnlineSigns) JSON.deserialize(rowDataStr, OnlineSigns.class);
+        String logstr = onlineSigns.Monitoring.MessageGroupNumber + ' start\n';
+        Boolean needUpdateIflog = false;
+        if (iflog == null) {
+            needUpdateIflog = true;
+            iflog = new BatchIF_Log__c();      
+            iflog.Log__c = logstr;
+            iflog.ErrorLog__c = '';
+        } else {
+            logstr = iflog.Log__c;
+        }
+        iflog.Type__c = 'NFM116';
+        iflog.MessageGroupNumber__c = onlineSigns.Monitoring.MessageGroupNumber;
+
+        try{
+            //鍙戦�佹帴鍙�
+            status = NFMUtil.sendToSapRet(rowDataStr, NFMUtil.NFM116_ENDPOINT);
+            System.debug('NFM116Log--status->' + status);
+            if ('Accepted'.equals(status)) {
+                logstr += 'status:' + status + '\n';
+                rowData.retry_cnt__c = 0;
+            }
+        } catch (Exception ex) {
+            System.debug(Logginglevel.ERROR, 'NFM116_' + iflog.Name + ':' + ex.getMessage());
+            System.debug(Logginglevel.ERROR, 'NFM116_' + iflog.Name + ':' + ex.getStackTraceString());
+            logstr += ex.getMessage();
+            iflog.ErrorLog__c += ex.getMessage() + '\n';
+            iflog.ErrorLog__c += ex.getStackTraceString() + '\n';
+
+            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+'閿欒娆℃暟宸茬粡瓒呰繃鑷姩閫佷俊璁惧畾鐨勬渶澶ф鏁帮紝璇锋墜鍔ㄩ�佷俊';
+            }
+        }
+        iflog.Log__c = logstr;
+
+        if (needUpdateIflog) {
+            upsert iflog;
+            upsert rowData;
+        }
+    }
+}
\ No newline at end of file
diff --git a/force-app/main/default/classes/NFM116Controller.cls-meta.xml b/force-app/main/default/classes/NFM116Controller.cls-meta.xml
new file mode 100644
index 0000000..40d6793
--- /dev/null
+++ b/force-app/main/default/classes/NFM116Controller.cls-meta.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
+    <apiVersion>54.0</apiVersion>
+    <status>Active</status>
+</ApexClass>
diff --git a/force-app/main/default/classes/NFM116ControllerTest.cls b/force-app/main/default/classes/NFM116ControllerTest.cls
new file mode 100644
index 0000000..5c8883d
--- /dev/null
+++ b/force-app/main/default/classes/NFM116ControllerTest.cls
@@ -0,0 +1,58 @@
+@isTest
+private class NFM116ControllerTest {
+    @TestSetup
+    static void makeData(){
+        Opportunity opp = new Opportunity();
+        opp.Opportunity_No__c = 'XB-153P-06-S151289';
+        opp.Opportunity_Category__c = 'ET';
+        opp.StageName = '鐩';
+        opp.Authorized_DB_No__c = 'XB-153P-06-S151289';
+        opp.Name = '::XB-153P-06-S151289';
+        opp.Close_Forecasted_Date__c = Date.today();
+        opp.CloseDate = Date.today();
+        opp.Opp_Confirmation_Day__c = Date.today();
+        insert opp;
+        
+        Statu_Achievements__c Statu1 = new Statu_Achievements__c();
+        Statu1.ContractNO__c = 'SH-ET-191025';
+        Statu1.Opportunity__c = opp.Id;
+        Statu1.ContractAmount__c = 100;
+        insert Statu1;
+
+        eSignForm__c es = new eSignForm__c();
+        es.Statu_Achievements__c = Statu1.Id;
+        es.DNName__c = '11223344';
+        es.agencyAutoSignUpStatus__c = '宸叉壒鍑�';
+        es.agencySignUpDate__c = Date.today().addDays(-1);
+        es.agencyConfirmDate__c = Date.today().addDays(-1);
+        es.HPSignUpStatus__c = '宸叉壒鍑�';
+        es.HPSignUpDate__c = Date.today().addDays(-1);
+        es.HPConfirmDate__c = Date.today().addDays(-1);
+        insert es;
+
+        eSignFormLineItem__c esi = new eSignFormLineItem__c();
+        esi.Count__c = 2;
+        esi.agencyGoodStatus__c = '瀹屽ソ';
+        esi.eSignForm__c = es.Id;
+        insert esi;
+        eSignFormLineItem__c esi2 = new eSignFormLineItem__c();
+        esi2.Count__c = 2;
+        esi2.agencyGoodStatus__c = '瀹屽ソ';
+        esi2.eSignForm__c = es.Id;
+        insert esi2;
+    }
+
+    static testMethod void testMethod1() {
+        List<eSignForm__c> eSignFormList = [select id from eSignForm__c];
+        List<String> eSignFormIdList = new List<String>();
+        for(eSignForm__c es : eSignFormList){
+            eSignFormIdList.add(es.Id);
+        }
+        BatchIF_Log__c iflog = new BatchIF_Log__c();
+        iflog.Log__c = 'test start \n';
+        insert iflog;
+        Test.startTest();
+        NFM116Controller.callout(iflog.Id, eSignFormIdList);
+        Test.stopTest();
+    }
+}
\ No newline at end of file
diff --git a/force-app/main/default/classes/NFM116ControllerTest.cls-meta.xml b/force-app/main/default/classes/NFM116ControllerTest.cls-meta.xml
new file mode 100644
index 0000000..40d6793
--- /dev/null
+++ b/force-app/main/default/classes/NFM116ControllerTest.cls-meta.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
+    <apiVersion>54.0</apiVersion>
+    <status>Active</status>
+</ApexClass>
diff --git a/force-app/main/default/classes/NFMUtil.cls b/force-app/main/default/classes/NFMUtil.cls
index 22e8c7e..eca54fb 100644
--- a/force-app/main/default/classes/NFMUtil.cls
+++ b/force-app/main/default/classes/NFMUtil.cls
@@ -63,6 +63,9 @@
     public static String NFM703_ENDPOINT = null;
 
     public static String NFM115_ENDPOINT = null;
+    // 鐢靛瓙绛炬敹鍗昐FDC2SAP thh 20220427 start
+    public static String NFM116_ENDPOINT = null;
+    // 鐢靛瓙绛炬敹鍗昐FDC2SAP thh 20220427 end
 
     public static String NFM112_ENDPOINT = null;
 
@@ -126,6 +129,11 @@
             NFM112_ENDPOINT = 'http://wdp.olympus.com.cn:8089/RESTAdapter/NFM112';
 
             NFM115_ENDPOINT = 'https://wdp.olympus.com.cn:44301/RESTAdapter/NFM115';
+
+            // sanbox鐢靛瓙绛炬敹鍗昐FDC2SAP thh 20220427 start
+            NFM116_ENDPOINT = 'https://wdp.olympus.com.cn:44301/RESTAdapter/NFM116';
+            // sanbox鐢靛瓙绛炬敹鍗昐FDC2SAP thh 20220427 end
+
             // 鏂版湇鍔$郴缁� 娴嬭瘯鐜
             AWS_DOMAIN = 'https://olympus.bqbot.com';
               // 鏂版湇鍔$郴缁� 鏈湴鐜锛堜复鏃讹級
@@ -185,6 +193,10 @@
             //鏍锋湰绠$悊
             NFM115_ENDPOINT = 'https://wdp.olympus.com.cn:44302/RESTAdapter/NFM115';
 
+            // 鐢靛瓙绛炬敹鍗昐FDC2SAP thh 20220427 start
+            NFM116_ENDPOINT = 'https://wdp.olympus.com.cn:44302/RESTAdapter/NFM116';
+            // 鐢靛瓙绛炬敹鍗昐FDC2SAP thh 20220427 end
+
  // 鏂版湇鍔$郴缁�
             AWS_DOMAIN = 'https://svc-elb.olympuschina.com';
 

--
Gitblit v1.9.1