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