From a99f696b093d91349524d1e0b750beeabb9c415e Mon Sep 17 00:00:00 2001
From: Li Jun <buli@deloitte.com.cn>
Date: 星期日, 24 四月 2022 09:45:12 +0800
Subject: [PATCH] Merge branch 'PIPLFunctionFixIssue0422'

---
 force-app/main/default/classes/SyncAccountContactToAWS.cls          |   39 +++++++
 force-app/main/default/classes/AWSServiceTool2.cls-meta.xml         |    5 +
 force-app/main/default/classes/AWSServiceTool2.cls                  |  190 ++++++++++++++++++++++++++++++++++++++
 force-app/main/default/classes/ConsumTrialPDFControllerTest.cls     |    1 
 force-app/main/default/classes/SyncAccountContactToAWS.cls-meta.xml |    5 +
 force-app/main/default/classes/ConsumTrialPDFController.cls         |    2 
 6 files changed, 241 insertions(+), 1 deletions(-)

diff --git a/force-app/main/default/classes/AWSServiceTool2.cls b/force-app/main/default/classes/AWSServiceTool2.cls
new file mode 100644
index 0000000..066235c
--- /dev/null
+++ b/force-app/main/default/classes/AWSServiceTool2.cls
@@ -0,0 +1,190 @@
+public without sharing class AWSServiceTool2 {
+
+    static Map<string,PIHelper.PIIntegration> staticResourceBuffer = new Map<string,PIHelper.PIIntegration>();
+    static PIHelper.PIIntegration getPIIntegration(string sobject_name){
+        system.debug('sobject_name='+sobject_name);
+        if(!staticResourceBuffer.containsKey(sobject_name)){
+            PIHelper.PIIntegration staticResource =  PIHelper.getPIIntegrationInfo(sobject_name);
+            staticResourceBuffer.put(sobject_name,staticResource);
+        }
+        return staticResourceBuffer.get(sobject_name);
+    }
+    
+    public static boolean EncryptPushData(List<string> Ids){
+        if(ids == null || ids.size() == 0){
+            return false;
+        }
+        
+        Id rid = Ids[0];
+        string sobject_name = rid.getSobjectType().getDescribe().getName();
+        string sql = 'select id ';
+        
+        PIHelper.PIIntegration staticResource = getPIIntegration(sobject_name);
+        for(PI_Field_Policy_Detail__c detail :staticResource.PIDetails){
+            sql += ',' + detail.SF_Field_API_Name__c+',' + detail.SF_Field_Encrypted_API__c;
+        }
+        sql += ' ,AWS_Data_Id__c from ' + sobject_name + ' where id in :Ids';
+        system.debug('sql='+sql);
+        List<Sobject> lso = Database.query(sql);
+        system.debug('lso.size()='+lso.size());
+        if(lso.size()==0){
+            return false;
+        }
+        return EncryptPushCore(Json.serialize(lso),sobject_name);
+    }
+    
+    @future(callout=true)
+    public static void EncryptPushFuture(string json_list,string sobject_name){
+        EncryptPushCore(json_list,sobject_name);
+    }
+    
+    // List<Rental_Apply__c> temps = [select id,AWS_Data_Id__c,name, direct_shippment_address__c,  Direct_Shippment_Address_Encrypt__c, Phone_number__c,  Phone_Number_Encrypt__c,CreatedDate   from Rental_Apply__c where AWS_Data_Id__c != null order by CreatedDate desc limit 2];
+    public static boolean EncryptPushCore(string json_list,string sobject_name){
+        system.debug('enter EncryptPushCore');
+        if(string.isBlank(json_list) || string.isBlank(sobject_name)){
+            
+            system.debug('json_list or sobject_name is null');
+            return false;
+        }
+        
+        //璋冪敤婊ㄧ挏鎺ュ彛鏇存柊
+        PIHelper.PIIntegration staticResource =  getPIIntegration(sobject_name);
+        system.debug('staticResource.token='+staticResource.token);
+        if(String.isBlank(staticResource.token)){
+            System.debug('鑾峰彇aws token 澶辫触');
+            return false;
+        }
+        List<object> newobjectList = (List<object>)Json.deserializeUntyped(json_list);
+        Map<Id,Sobject> newMap = new Map<Id,Sobject>();
+        
+        for(object obj : newobjectList){
+            Map<string,object> mobj = (Map<string,object>)obj;
+            if(mobj.containsKey('Id')){
+                Sobject sobj_temp = (Sobject)Json.deserialize(Json.serialize(obj), Type.forName(sobject_name));
+                newMap.put(sobj_temp.Id,sobj_temp);
+            }
+        }
+        List<Map<string,object>> insert_list = new List<Map<string,object>>();
+        List<Map<string,object>> update_list = new List<Map<string,object>>();
+        List<sobject> newList = newMap.values();
+        for(Sobject ra : newList){
+            Map<string,object> mso = new Map<string,object>();
+            
+            
+            for(PI_Field_Policy_Detail__c detail : staticResource.PIDetails){
+                if(ra.isSet(detail.SF_Field_API_Name__c)){
+                    mso.put(detail.AWS_Field_API__c,ra.get(detail.SF_Field_API_Name__c));
+                    mso.put(detail.AWS_Encrypted_Field_API__c,ra.get(detail.SF_Field_Encrypted_API__c));
+                }
+            }
+            mso.put('sfRecordId',ra.Id);
+            string aws_id = string.valueOf(ra.get('AWS_Data_Id__c'));
+            system.debug('aws_id='+aws_id);
+            if(string.isBlank(aws_id)){
+                insert_list.add(mso);
+            }else{
+                system.debug('aws_id.lenth='+aws_id.length());
+                mso.put('dataId',aws_id);
+                update_list.add(mso);
+            }
+            
+        }
+        List<object> objList = new List<object>();
+         List<Sobject> updateList = new List<Sobject>();
+        List<object> temp = null;
+        system.debug('insert_list.size()='+insert_list.size());
+        system.debug('update_list.size()='+update_list.size());
+        //if(true)return;
+        if(insert_list.size() > 0){
+            system.debug('url='+staticResource.newEncryptUrl);
+            temp = PostAws(Json.serialize(insert_list),staticResource.newEncryptUrl,staticResource.token);
+            if(temp != null){
+                objList.addAll(temp);
+            }
+        }
+        
+        
+        if(update_list.size() > 0){
+            system.debug('url='+staticResource.updateEncryptUrl);
+			temp = PostAws(Json.serialize(update_list),staticResource.updateEncryptUrl,staticResource.token);
+            if(temp != null){
+                objList.addAll(temp);
+            }            
+        }
+        
+        system.debug('objList.size()='+objList.size());
+        if(objList.size()==0){
+            return false;
+        }
+        
+       
+        for(object obj : objList){
+            Map<string,object> obj_map = (Map<string,object>)obj;
+            string sfRecordId = null;
+            string dataId = null;
+            if(obj_map.containsKey('sfRecordId')){
+                sfRecordId = string.valueOf(obj_map.get('sfRecordId'));
+            }else{
+                system.debug('obj_map.containsKey(\'sfRecordId\')='+obj_map.containsKey('sfRecordId'));
+                continue;
+            }
+            
+            if(obj_map.containsKey('dataId')){
+                dataId = string.valueOf(obj_map.get('dataId'));
+            }else{
+                system.debug('obj_map.containsKey(\'dataId\')='+obj_map.containsKey('dataId'));
+                continue;
+            }
+            
+            
+            if(newMap.containsKey(sfRecordId)){
+                Sobject ra = newMap.get(sfRecordId);
+                for(PI_Field_Policy_Detail__c detail : staticResource.PIDetails){
+                    if(obj_map.containsKey(detail.AWS_Field_API__c)){
+                        ra.put(detail.SF_Field_API_Name__c,obj_map.get(detail.AWS_Field_API__c));
+                    }else{
+                        system.debug('detail.AWS_Field_API__c='+detail.AWS_Field_API__c+' not in obj_map');
+                    }
+                    
+                    if(obj_map.containsKey(detail.AWS_Encrypted_Field_API__c)){
+                        ra.put(detail.SF_Field_Encrypted_API__c,obj_map.get(detail.AWS_Encrypted_Field_API__c));
+                    }else{
+                        system.debug('detail.AWS_Encrypted_Field_API__c='+detail.AWS_Encrypted_Field_API__c+' not in obj_map');
+                    }
+                }
+                ra.put('AWS_Data_Id__c',dataId);
+                
+                updateList.add(ra);
+            }else{
+                system.debug('newMap.containsKey('+sfRecordId+')='+newMap.containsKey(sfRecordId));
+                continue;
+            }
+        }
+        
+        system.debug('updateList.size='+updateList.size());
+        if(updateList.size()>0){
+            update updateList;
+        }
+        
+        return true;
+    }
+    
+    static List<object> PostAws(string payload,string url,string token){
+        system.debug('payload='+payload);
+        NFMUtil.response response = NFMUtil.sendToPiAWS(payload, url,token);
+        system.debug(response);
+        Map<string,object> res_obj = (Map<string,object>)Json.deserializeUntyped(response.responseBody);
+        if(res_obj == null || !res_obj.containsKey('object') ){
+            System.debug('res_obj == null || !res_obj.containsKey(\'object\')');
+            return null;
+        }
+        
+        List<object> objList = (List<object>)res_obj.get('object');
+        if(objList == null){
+            System.debug('objList == null');
+            return null;
+        }
+        return objList;
+    }
+
+}
\ No newline at end of file
diff --git a/force-app/main/default/classes/AWSServiceTool2.cls-meta.xml b/force-app/main/default/classes/AWSServiceTool2.cls-meta.xml
new file mode 100644
index 0000000..40d6793
--- /dev/null
+++ b/force-app/main/default/classes/AWSServiceTool2.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/ConsumTrialPDFController.cls b/force-app/main/default/classes/ConsumTrialPDFController.cls
index 5b6ddee..7c8c801 100644
--- a/force-app/main/default/classes/ConsumTrialPDFController.cls
+++ b/force-app/main/default/classes/ConsumTrialPDFController.cls
@@ -159,7 +159,7 @@
                   FROM Consum_Apply_Equipment_Set_Detail__c
                  WHERE Consum_Apply_Equipment_Set__r.Consum_Apply__c = :targetConsumApplyId  // 鑰楁潗澶囧搧閰嶅涓�瑙�.鑰楁潗澶囧搧鐢宠
                    AND (Cancel_Select__c = false OR NG_Select_Again__c = true)
-                   //AND Shipment_request_time2__c != null
+                //    AND Shipment_request_time2__c != null //Commented By Li Jun 20220422 for PIPL
               ORDER BY Consum_Apply_Equipment_Set__r.Consum_Apply__c, Consum_Apply_Equipment_Set__c, Fixture_Model_No_F__c, Degree_Of_Importance__c
         ];
         if (consumApplySetDetailList.size() > 0) {
diff --git a/force-app/main/default/classes/ConsumTrialPDFControllerTest.cls b/force-app/main/default/classes/ConsumTrialPDFControllerTest.cls
index d883890..0e8c407 100644
--- a/force-app/main/default/classes/ConsumTrialPDFControllerTest.cls
+++ b/force-app/main/default/classes/ConsumTrialPDFControllerTest.cls
@@ -7,6 +7,7 @@
         strList.add('Consum_Apply_Equipment_Set_Detail__c');
         strList.add('Consum_Apply__c');
         strList.add('Document');
+        strList.add('Agency_Contact__c');
         TestDataUtility.CreatePIPolicyConfigurations(strList);
         
         // 鐢ㄦ埛
diff --git a/force-app/main/default/classes/SyncAccountContactToAWS.cls b/force-app/main/default/classes/SyncAccountContactToAWS.cls
new file mode 100644
index 0000000..476cdba
--- /dev/null
+++ b/force-app/main/default/classes/SyncAccountContactToAWS.cls
@@ -0,0 +1,39 @@
+/*
+ * Author: Bubba Li
+ * Created Date: 04/22/2022
+ * Purpose: sync agency contact to aws
+ * Test Class: SyncAccountContactToAWS_Test
+ * History: 
+ * 		04/22/2022 - Bubba Li - Initial Code.
+ * 
+ * */
+global class  SyncAccountContactToAWS implements Database.Batchable<SObject>,Database.AllowsCallouts{
+    global String query;
+    
+    global SyncAccountContactToAWS(String query) {
+        this.query = query;
+    }
+    global SyncAccountContactToAWS() {
+        this.query = 'SELECT id,Doctor_Division1__c,Doctor_Division1_Encrypted__c,Name,Name_Encrypted__c,Type__c,Type_Encrypted__c,AWS_Data_Id__c,Contact__c, Contact__r.Doctor_Division1_Encrypted__c,Contact__r.LastName_Encrypted__c, Contact__r.Type_Encrypted__c FROM Agency_Contact__c WHERE AWS_Data_Id__c =\'\' And Contact__c != null';
+    }
+    global Database.QueryLocator start(Database.BatchableContext bc) {
+        system.debug('Query by custom soql:'+this.query);
+        return Database.getQueryLocator(this.query);
+    }
+    global void execute(Database.BatchableContext BC, list<Agency_Contact__c> scope) {
+        if(scope!=null && scope.size()>0){
+            for(Agency_Contact__c  aContact:scope){
+                aContact.Doctor_Division1_Encrypted__c = aContact.Contact__r.Doctor_Division1_Encrypted__c;
+                aContact.Name_Encrypted__c =  aContact.Contact__r.LastName_Encrypted__c;
+                aContact.Type_Encrypted__c =  aContact.Contact__r.Type_Encrypted__c;
+                aContact.AWS_Data_Id__c = '';
+            }
+            system.debug('Agency Contact Info to AWS:'+JSON.serialize(scope));
+            AWSServiceTool2.EncryptPushCore(JSON.serialize(scope),'Agency_Contact__c');
+        }      
+    }
+
+    global void finish(Database.BatchableContext BC) {
+     
+    }
+}
\ No newline at end of file
diff --git a/force-app/main/default/classes/SyncAccountContactToAWS.cls-meta.xml b/force-app/main/default/classes/SyncAccountContactToAWS.cls-meta.xml
new file mode 100644
index 0000000..40d6793
--- /dev/null
+++ b/force-app/main/default/classes/SyncAccountContactToAWS.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>

--
Gitblit v1.9.1