From 02ddc35714cbd1688b7cb057f770f1410de79dab Mon Sep 17 00:00:00 2001
From: buli <137736985@qq.com>
Date: 星期五, 11 三月 2022 12:19:33 +0800
Subject: [PATCH] PIPL Updated Code 20220311

---
 force-app/main/default/classes/UpdateContractAimAmountHandler.cls    |    7 
 force-app/main/default/pages/BMEWorkPage.page                        |  194 
 force-app/main/default/classes/FixtureRentalPDFController.cls        |   17 
 force-app/main/default/classes/WeeklyReportCmp.cls                   |  130 
 force-app/main/default/classes/NFM623Rest.cls                        |   49 
 force-app/main/default/pages/CampaignMemberService.page              |   48 
 force-app/main/default/pages/ConsumReassign.page                     |  110 
 force-app/main/default/pages/AssessmentReport.page                   |   62 
 force-app/main/default/pages/SearchVisitor.page                      |  266 +
 force-app/main/default/classes/AgencyContactHandler.cls              |   20 
 force-app/main/default/classes/ConsumTrialController.cls             |    9 
 force-app/main/default/classes/NFM612Rest.cls                        |   27 
 force-app/main/default/pages/FixtureRentalPDF.page                   |  792 ++--
 force-app/main/default/classes/LightningUtil.cls                     |   37 
 force-app/main/default/classes/NFM501FutureController.cls            |   51 
 force-app/main/default/classes/XinDailyReportController.cls          |   49 
 force-app/main/default/classes/CM_SearchContactServiceController.cls |   66 
 force-app/main/default/pages/LeadIntention.page                      | 1245 ++++---
 force-app/main/default/pages/SimpleEventRegister.page                |   57 
 force-app/main/default/classes/AgencyAccountCmp.cls                  |   48 
 force-app/main/default/classes/NewAndEditAddressController.cls       |  108 
 force-app/main/default/classes/ConsumFixtureSetSelectController.cls  |    4 
 force-app/main/default/pages/CM_SearchContact.page                   |  279 +
 force-app/main/default/classes/NFM501Controller.cls                  |   46 
 force-app/main/default/classes/NFM203Rest.cls                        |  119 
 force-app/main/default/classes/StraightBackAddressController.cls     |   58 
 force-app/main/default/aura/AgencyAccount/AgencyAccountHelper.js     |  132 
 force-app/main/default/classes/NFM503InfoFileBatch.cls               |  184 
 force-app/main/default/classes/SearchVisitorController.cls           |   60 
 force-app/main/default/aura/WeeklyReport/WeeklyReportHelper.js       |  366 ++
 force-app/main/default/classes/NFM702Controller.cls                  |   65 
 force-app/main/default/pages/ConsumTrialPDF.page                     |  168 +
 force-app/main/default/classes/CM_SearchContact.cls                  |   66 
 force-app/main/default/classes/NFM620Rest.cls                        |   54 
 force-app/main/default/pages/NewAndEditLead.page                     |  560 +-
 force-app/main/default/pages/CampaignMember.page                     |   46 
 force-app/main/default/aura/WeeklyReport/WeeklyReport.cmp            |   36 
 force-app/main/default/triggers/Repair.trigger                       |   12 
 force-app/main/default/classes/ConsumReassignController.cls          |    3 
 force-app/main/default/classes/NFM502Controller.cls                  |  195 
 force-app/main/default/classes/SimpleEventRegisterController.cls     |   27 
 force-app/main/default/classes/InstructReportController.cls          |   13 
 force-app/main/default/classes/NewAndEditLeadController.cls          |  123 
 force-app/main/default/pages/InsReportPDF.page                       |  125 
 force-app/main/default/pages/XinDailyReport.page                     |   80 
 force-app/main/default/classes/NFMUtil.cls                           |  184 
 force-app/main/default/classes/ConsumTrialPDFController.cls          |   18 
 force-app/main/default/classes/NFM607Rest.cls                        |   52 
 force-app/main/default/classes/StartTradingController.cls            |   10 
 force-app/main/default/aura/WeeklyReport/WeeklyReportController.js   |   34 
 force-app/main/default/classes/OFSInsReportLayoutController.cls      |   32 
 force-app/main/default/classes/QISPDFController.cls                  |    3 
 force-app/main/default/aura/AgencyAccount/AgencyAccount.css          |   18 
 force-app/main/default/classes/LeadIntentionController.cls           |   14 
 force-app/main/default/classes/BmeWorkController.cls                 |  255 
 force-app/main/default/classes/NFM624Rest.cls                        |   56 
 force-app/main/default/classes/SLAReportDetailsController.cls        |    5 
 force-app/main/default/classes/NFM103Controller.cls                  |   31 
 force-app/main/default/pages/SLAReportDetails.page                   |   84 
 force-app/main/default/classes/LayoutDescriberHelper.cls             |   76 
 force-app/main/default/classes/CampaignMemberController.cls          |    6 
 force-app/main/default/pages/CM_SearchContactService.page            |  199 +
 force-app/main/default/triggers/ContactHpDeptUpd.trigger             |   33 
 force-app/main/default/pages/StartTrading.page                       |  193 
 force-app/main/default/aura/AgencyAccount/AgencyAccount.cmp          |   32 
 force-app/main/default/classes/AssessmentReportController.cls        |   10 
 force-app/main/default/pages/InstructReport.page                     |   90 
 force-app/main/default/pages/StraightBackAddress.page                |  479 ++
 force-app/main/default/classes/InsReportPDFController.cls            |   10 
 force-app/main/default/classes/NFM606Controller.cls                  |   42 
 force-app/main/default/classes/AWSServiceTool.cls                    |   48 
 force-app/main/default/pages/OFSInsReportLayout.page                 |  169 +
 force-app/main/default/pages/ConsumTrial.page                        |  915 +++--
 force-app/main/default/aura/AgencyAccount/AgencyAccountController.js |    4 
 force-app/main/default/classes/CampaignMemberServiceController.cls   |    6 
 force-app/main/default/pages/QISPDF.page                             |  198 
 force-app/main/default/aura/WeeklyReport/WeeklyReport.css            |   12 
 77 files changed, 7,084 insertions(+), 2,447 deletions(-)

diff --git a/force-app/main/default/aura/AgencyAccount/AgencyAccount.cmp b/force-app/main/default/aura/AgencyAccount/AgencyAccount.cmp
index e3b28d8..cfef9b1 100644
--- a/force-app/main/default/aura/AgencyAccount/AgencyAccount.cmp
+++ b/force-app/main/default/aura/AgencyAccount/AgencyAccount.cmp
@@ -5,7 +5,12 @@
 	<aura:attribute name="hosStr" type="String"/>
 	<aura:attribute name="conStr" type="String"/>
 	<aura:attribute name="filedsmap" type="Map"/>
-
+	<aura:attribute name="awsdata" type="Map"/>
+	<aura:attribute name="temp_aws_id" type="String"/>
+	<aura:attribute name="staticResource" type="Map"/>
+	
+	
+	<ltng:require scripts="{! $Resource.AWSService+'/AWSService.js' }" afterScriptsLoaded="{!c.scriptsLoaded}" />
 	<aura:renderIf isTrue="{!v.login}">
         <div class="slds-spinner_container height100vh">
             <div class="slds-spinner--brand slds-spinner slds-spinner--medium" role="alert">
@@ -46,17 +51,17 @@
 	      <th scope="col" style = "width:5px;">
 	        <div class="slds-truncate" title="{!v.filedsmap.Hospital_Name__c}">{!v.filedsmap.Hospital_Name__c}</div>
 	      </th>
-	      <th scope="col">
+	      <th scope="col" style="width: 150px;">
 	        <div class="slds-truncate" title="{!v.filedsmap.Department_Cateogy_F__c}">{!v.filedsmap.Department_Cateogy_F__c}</div>
 	      </th>
 	      <!-- 绮剧悽绉戞妧  zxk  SWAG-C8F8TU end -->
 	      <!-- <th scope="col">
 	        <div class="slds-truncate" title="{!v.filedsmap.Hospital_DC_Name__c}">{!v.filedsmap.Hospital_DC_Name__c}</div>
 	      </th> -->
-	      <th scope="col">
+	      <th scope="col" style="width: 150px;">
 	        <div class="slds-truncate" title="{!v.filedsmap.Type__c}">{!v.filedsmap.Type__c}</div>
 	      </th>
-	      <th scope="col">
+	      <th scope="col" style="width: 150px;">
 	        <div class="slds-truncate" title="{!v.filedsmap.Doctor_Division1__c}">{!v.filedsmap.Doctor_Division1__c}</div>
 	      </th>
 	      <th scope="col">
@@ -68,7 +73,14 @@
 	  	<aura:iteration items="{!v.accounts}" var="item" indexVar="index">
 	    <tr>
 	      <th scope="row" data-label="Opportunity Name">
-	        <div class="slds-truncate" title="{!item.Name}"><a href="{!'/partner/s/agency-contact/' + item.Id}">{!item.Name}</a></div>
+			<aura:set attribute="temp_aws_id" value="{! item.AWS_Data_Id__c }" />
+			
+	        <div class="slds-truncate">
+				<a href="{!'/partner/s/agency-contact/' + item.Id}" style="position: relative;">
+					<span class="encrypt">{!item.Name}</span>
+					<span class="decrypt">{!item.awsdata.name}</span>
+				</a>
+			</div>
 	      </th>
             <!-- 绮剧悽绉戞妧  zxk  SWAG-C8F8TU start -->
              <td data-label="Account Name">
@@ -94,10 +106,16 @@
 	      </td> -->
 
 	      <td data-label="Close Date">
-	        <div class="slds-truncate" title="{!item.Type__c}">{!item.Type__c}</div>
+	        <div class="slds-truncate" title="{!item.Type__c}">
+				<span class="encrypt">{!item.Type__c}</span>
+				<span class="decrypt">{!item.awsdata.type}</span>
+			</div>
 	      </td>
 	      <td data-label="Stage">
-	        <div class="slds-truncate" title="{!item.Doctor_Division1__c}">{!item.Doctor_Division1__c}</div>
+	        <div class="slds-truncate" title="{!item.Doctor_Division1__c}">
+				<span class="encrypt">{!item.Doctor_Division1__c}</span>
+				<span class="decrypt">{!item.awsdata.doctorDivision1}</span>
+			</div>
 	      </td>
 	      <td data-label="IsOlympusContact__c">
 	        <ui:outputCheckbox value="{!item.IsOlympusContact__c}" />
diff --git a/force-app/main/default/aura/AgencyAccount/AgencyAccount.css b/force-app/main/default/aura/AgencyAccount/AgencyAccount.css
index 5e43c15..c5abf53 100644
--- a/force-app/main/default/aura/AgencyAccount/AgencyAccount.css
+++ b/force-app/main/default/aura/AgencyAccount/AgencyAccount.css
@@ -1,3 +1,21 @@
 .THIS.contents_wrapper {
     padding-top: 10px;
+}
+
+.THIS tr .decrypt{
+    /* position: absolute;
+    top: 0;
+    left: 100%;
+    display: none;
+    text-align: left;
+    padding-left: 5px; */
+    display: none;
+}
+
+.THIS tr:hover .decrypt{
+    display: unset;
+}
+
+.THIS tr:hover .encrypt{
+    display: none;
 }
\ No newline at end of file
diff --git a/force-app/main/default/aura/AgencyAccount/AgencyAccountController.js b/force-app/main/default/aura/AgencyAccount/AgencyAccountController.js
index cf34820..73c1a6c 100644
--- a/force-app/main/default/aura/AgencyAccount/AgencyAccountController.js
+++ b/force-app/main/default/aura/AgencyAccount/AgencyAccountController.js
@@ -10,4 +10,8 @@
     clearContact: function(component, event, helper) {
         helper.clearContact(component, event, helper);
     },
+    scriptsLoaded:function(component, event, helper) {
+        // AWSService.logFun = helper.saveLog;
+        // AWSService.component = component;
+    }
 })
\ No newline at end of file
diff --git a/force-app/main/default/aura/AgencyAccount/AgencyAccountHelper.js b/force-app/main/default/aura/AgencyAccount/AgencyAccountHelper.js
index e505988..0e1d348 100644
--- a/force-app/main/default/aura/AgencyAccount/AgencyAccountHelper.js
+++ b/force-app/main/default/aura/AgencyAccount/AgencyAccountHelper.js
@@ -1,12 +1,14 @@
 ({
 	doinit : function(component, event, helper) {
 		component.set('v.login',true);
-
+        component.set("v.awsdata",{});
+        
         var action = component.get("c.getfiledsmap");
         action.setCallback(this, function(response) {
             var state = response.getState();
             if(state === "SUCCESS") {
                 var res = response.getReturnValue();
+                
                 component.set("v.filedsmap", res);
             } else if (state === "ERROR") {
                 var errors = response.getError();
@@ -27,7 +29,11 @@
             if(state === "SUCCESS") {
                 var acList = response.getReturnValue();
                 component.set("v.accounts", acList);
-                component.set('v.login',false);
+                helper.Decrypt(component,helper,function(){
+                    component.set('v.login',false);
+                })
+                
+                
             } else if (state === "ERROR") {
                 var errors = response.getError();
                 var toastEvent = $A.get("e.force:showToast");
@@ -40,7 +46,31 @@
                 component.set('v.login',false);
             }
         });
-        $A.enqueueAction(action2);
+
+
+        var action3 = component.get("c.GetConfig");
+        action3.setCallback(this, function(response) {
+            var state = response.getState();
+            if(state === "SUCCESS") {
+                var res = response.getReturnValue();
+                //AWSService.sfSessionId = res.sessionId;
+                component.set("v.staticResource",JSON.parse(res.staticResource));
+                $A.enqueueAction(action2);
+                
+            } else if (state === "ERROR") {
+                var errors = response.getError();
+                var toastEvent = $A.get("e.force:showToast");
+                toastEvent.setParams({
+                    "title": "閿欒",
+                    "type":"error",
+                    "message": errors[0].message
+                });
+                toastEvent.fire();
+            }
+        });
+        $A.enqueueAction(action3);
+        
+        
 	},
 
 	clearContact: function(component, event, helper) {
@@ -53,15 +83,17 @@
 		component.set('v.login',true);
         var hosStr = component.get("v.hosStr");
         var conStr = component.get("v.conStr");
-        var action = component.get("c.searchAccounts");
-        action.setParams({"hosStr": hosStr, "conStr": conStr});
-
+        var action = component.get("c.searchAccounts2");
+        let awsdata = component.get("v.awsdata");
+        let staticResource = component.get("v.staticResource");
         action.setCallback(this, function(response) {
         	var state = response.getState();
             if(state === "SUCCESS") {
                 var acList = response.getReturnValue();
                 component.set("v.accounts", acList);
-                component.set('v.login',false);
+                helper.Decrypt(component,helper,function(){
+                    component.set('v.login',false);
+                })
             } else if (state === "ERROR") {
                 var errors = response.getError();
                 var toastEvent = $A.get("e.force:showToast");
@@ -74,6 +106,92 @@
                 component.set('v.login',false);
             }
         });
+
+        if (conStr) {
+            AWSService.search(staticResource.searchUrl,JSON.stringify({
+                "name":conStr
+            }),function(data){
+                $A.getCallback(function(){
+                    let dataIds = [];
+                    if(data.object && data.object.length > 0){
+                        for(let d of data.object){
+                            if(d.dataId){
+                                dataIds.push(d.dataId);
+                                awsdata[d.dataId] = d;
+                            }
+                        }
+                    }
+                    
+                    action.setParams({"hosStr": hosStr, awsids:dataIds});
+                    $A.enqueueAction(action);
+                })()
+                   
+           },staticResource.token);
+        }else{
+            action.setParams({"hosStr": hosStr});
+            $A.enqueueAction(action);
+        }
+
+        
+
+        
+
+        
+
+        
+    },
+    Decrypt :function(component, helper, callback){
+        let awsdata = component.get("v.awsdata");
+        let need_query = [];
+        let acList = component.get("v.accounts");
+        let staticResource = component.get("v.staticResource");
+        for (const acc of acList) {
+            if(acc.AWS_Data_Id__c &&
+                (!awsdata.hasOwnProperty(acc.AWS_Data_Id__c) || !awsdata[acc.AWS_Data_Id__c])
+                ){
+                need_query.push(acc.AWS_Data_Id__c);
+            }
+        }
+        let Foo = function(){
+            for (const acc of acList) {
+                if(acc.AWS_Data_Id__c && awsdata.hasOwnProperty(acc.AWS_Data_Id__c)){
+                    acc.awsdata = awsdata[acc.AWS_Data_Id__c];
+                }
+            }
+            component.set("v.accounts", acList);
+            if(callback)callback();
+        }
+
+        if(need_query.length>0){
+            AWSService.search(staticResource.searchUrl,JSON.stringify({
+                 "dataIds":need_query
+                }),function(data){
+                    $A.getCallback(function(){
+                        if(data.object && data.object.length > 0){
+                            for(let d of data.object){
+                                if(d.dataId){
+                                    awsdata[d.dataId] = d;
+                                }
+                            }
+                        }
+                        
+                        Foo();
+                    })()
+                    
+            },staticResource.token);
+        }else{
+            Foo();
+        }
+    },
+    saveLog:function(component,module,url,request,response,status){
+        var action = component.get("c.SaveLog");
+        action.setParams({
+            "module": hosStr,
+            "content": content,
+            "status": status,
+            "respMsg": respMsg
+            });
+            
         $A.enqueueAction(action);
     }
 })
\ No newline at end of file
diff --git a/force-app/main/default/aura/WeeklyReport/WeeklyReport.cmp b/force-app/main/default/aura/WeeklyReport/WeeklyReport.cmp
index 93fffdf..5865df2 100644
--- a/force-app/main/default/aura/WeeklyReport/WeeklyReport.cmp
+++ b/force-app/main/default/aura/WeeklyReport/WeeklyReport.cmp
@@ -71,6 +71,14 @@
     <!-- It will display 100 records . Change for your requirement-->
     <aura:attribute name="NumOfRecords" type="Integer" default="1000"/> 
     <aura:attribute name="showMain" type="Boolean" default="true"/>
+    <!-- PIPL update Yin Mingjie 21/02/2022 start -->
+    <aura:attribute name="AWStoken" type="String"/> 
+    <aura:attribute name="AWSsearch" type="String"/>
+    <aura:attribute name="AWSinsert" type="String"/>
+    <aura:attribute name="AWStransactionURL" type="String"/>
+    <aura:attribute name="AWSDoctor2Map" type="String"/>
+    <aura:attribute name="awsurl" type="Map"/>
+    <!-- PIPL update Yin Mingjie 21/02/2022 end -->
     <!-- 鎵归噺娣诲姞鍛ㄦ姤 end-->
 
     
@@ -135,7 +143,7 @@
                             <span class="slds-truncate" title="Name">{!v.fieldsmap.Department_Cateogy__c}</span>
                         </th>
                         <th class="table_header slds-text-title--caps">
-                            <span class="slds-truncate" title="Name">{!v.fieldsmap.doctor2__c}</span>
+                            <span class="slds-truncate" title="Name">{!v.fieldsmap.doctor2__r}</span>
                         </th>
                         <th class="table_header slds-text-title--caps">
                             <span class="slds-truncate" title="Name">{!v.fieldsmap.visitor_title__c}</span>
@@ -169,12 +177,18 @@
                             </td>
                             <td role="gridcell" class="slds-cell-edit">
                                 <span class="slds-grid slds-grid--align-spread">
-                                    <span class="slds-truncate" title="{!item.doctor2__r.Name}">{!item.doctor2__r.Name}</span>
+                                    <span class="slds-truncate" title="{!item.doctor2__r.Name}">
+                                        <span class="encrypt">{!item.doctor2__r.Name}</span>
+                                        <span class="decrypt">{!item.doctor2__r.awsdata.name}</span>
+                                    </span>
                                 </span>
                             </td>
                             <td role="gridcell" class="slds-cell-edit">
                                 <span class="slds-grid slds-grid--align-spread">
-                                    <span class="slds-truncate" title="{!item.visitor_title__c}">{!item.visitor_title__c}</span>
+                                    <span class="slds-truncate" title="{!item.visitor_title__c}">
+                                        <span class="encrypt">{!item.visitor_title__c}</span>
+                                        <span class="decrypt">{!item.doctor2__r.awsdata.doctorDivision1}</span>
+                                    </span>
                                 </span>
                             </td>
                             <td role="gridcell" class="slds-cell-edit">
@@ -342,7 +356,7 @@
                         <div class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-8">
                             {!v.fieldsmap.visitor_title__c}
                             <div>{!v.doctor_title}</div>
-                        </div>
+                        </div>       
                         <!-- 娲诲姩鍖哄垎 -->
                         <div class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-6">
                             {!v.fieldsmap.Purpose_Type__c}
@@ -409,7 +423,7 @@
                             <!-- <force:inputField value="{!v.data.Product_Category3__c}" aura:id="input-product-category3"/> -->
                             <ui:inputSelect aura:id="select_Product3" class="slds-select" change="{!c.productcategoryChange3}"/>
                         </div>
-                        <!--SWAG-CBX68C fy 銆愬鎵樸�慏AMS绯荤粺鍛ㄦ姤妯″潡鍐呭闇�姹傚鍔� start-->
+                         <!--SWAG-CBX68C fy 銆愬鎵樸�慏AMS绯荤粺鍛ㄦ姤妯″潡鍐呭闇�姹傚鍔� start-->
                         <!-- 鏀彺闇�姹� -->
                         <div class="slds-p-horizontal--small slds-size--1-of-1 slds-medium-size--1-of-5 slds-large-size--1-of-6">
                             {!v.fieldsmap.SupportNeeds__c}
@@ -473,12 +487,18 @@
                                             </td>
                                             <td role="gridcell" class="slds-cell-edit">
                                                 <span class="slds-grid slds-grid--align-spread">
-                                                    <span class="slds-truncate" title="{!item.doctor2__r.Name}">{!item.doctor2__r.Name}</span>
+                                                    <span class="slds-truncate" title="{!item.doctor2__r.Name}">
+                                                        <span class="encrypt">{!item.doctor2__r.Name}</span>
+                                                        <span class="decrypt">{!item.doctor2NameOrigin}</span>
+                                                    </span>
                                                 </span>
                                             </td>
                                             <td role="gridcell" class="slds-cell-edit">
                                                 <span class="slds-grid slds-grid--align-spread">
-                                                    <span class="slds-truncate" title="{!item.visitor_title__c}">{!item.visitor_title__c}</span>
+                                                    <span class="slds-truncate" title="{!item.visitor_title__c}">
+                                                        <span class="encrypt">{!item.visitor_title__c}</span>
+                                                        <span class="decrypt">{!item.visitorTitleOrigin}</span>
+                                                    </span>
                                                 </span>
                                             </td>
                                             <td role="gridcell" class="slds-cell-edit">
@@ -524,7 +544,7 @@
         			<lightning:messages aura:id="OppMessage" />
                     <!-- onload="{!c.showRequiredFields}" -->
                     <aura:renderIf isTrue="{!v.truthy}">
-                        <lightning:inputField fieldName="Name"/>
+                        <lightning:inputField fieldName="Name" aura:id="newOpportunityField" />
                         <lightning:inputField fieldName="Type__c" aura:id="newOpportunityField" />
                         <lightning:inputField fieldName="Doctor_Division1__c" aura:id="newOpportunityField" />
                         <!-- <lightning:inputField class="customRequired none" aura:id="Input_type__c" fieldName="Type__c"/>
diff --git a/force-app/main/default/aura/WeeklyReport/WeeklyReport.css b/force-app/main/default/aura/WeeklyReport/WeeklyReport.css
index 2c09747..2cf535d 100644
--- a/force-app/main/default/aura/WeeklyReport/WeeklyReport.css
+++ b/force-app/main/default/aura/WeeklyReport/WeeklyReport.css
@@ -126,4 +126,16 @@
 } 
 .THIS .none{
      display:none; 
+}
+
+.THIS tr .decrypt{
+    display: none;
+}
+
+.THIS tr:hover .decrypt{
+    display: unset;
+}
+
+.THIS tr:hover .encrypt{
+    display: none;
 }
\ No newline at end of file
diff --git a/force-app/main/default/aura/WeeklyReport/WeeklyReportController.js b/force-app/main/default/aura/WeeklyReport/WeeklyReportController.js
index 7117d9a..29c6056 100644
--- a/force-app/main/default/aura/WeeklyReport/WeeklyReportController.js
+++ b/force-app/main/default/aura/WeeklyReport/WeeklyReportController.js
@@ -63,7 +63,11 @@
         var vaildationFailReason = '';
         // var vaildationFailReason2 = '';
         // var currentDate = new Date().toJSON().slice(0,10);
- 
+        
+        // PIPL update Yin Mingjie 21/02/2022 start
+        let agencyReport = Object.create(null);
+        // PIPL update Yin Mingjie 21/02/2022 end
+
         fields.forEach(function (field) {
             if(field.get("v.fieldName") === 'Type__c' && $A.util.isEmpty(field.get("v.value"))){
                 showValidationError = true;
@@ -77,19 +81,45 @@
                 }
                 
             }
+            // PIPL update Yin Mingjie 21/02/2022 start
+            if(field.get("v.fieldName") === 'Name'){
+                agencyReport['name'] = field.get("v.value");
+            }else if(field.get("v.fieldName") === 'Type__c'){
+                agencyReport['type'] = field.get("v.value");
+            }else if(field.get("v.fieldName") === 'Doctor_Division1__c'){
+                agencyReport['doctorDivision1'] = field.get("v.value");
+            }
+            // PIPL update Yin Mingjie 21/02/2022 end
         });
          
         if (!showValidationError) {
+            // PIPL update Yin Mingjie 21/02/2022 start
+            /*
             var eventFields = event.getParam("fields");
             eventFields["Agency_Hospital__c"] = component.get('v.hospitalLinkId');
             component.find('recordEditForm').submit(eventFields);
+            */
+
+            var agencyHospitalid = component.get('v.hospitalLinkId');
+            var arr = new Array();
+            arr.push(agencyReport);
+            var data = JSON.stringify(arr);
+            // helper.set_aws_url(component,data,agencyHospitalid);
+
+            var token = component.get('v.AWStoken');
+            var newUrl = component.get('v.AWSinsert');
+            
+            component.set('v.login',true);
+            helper.insert_agencycontact(component,token,newUrl,data,agencyHospitalid,helper);
+
+            // PIPL update Yin Mingjie 21/02/2022 end
         }else{
             component.find('OppMessage').setError(vaildationFailReason);
         }
         // var eventFields = event.getParam("fields");
         // eventFields["Agency_Hospital__c"] = component.get('v.hospitalLinkId');
         // component.find('recordEditForm').submit(eventFields);
-         // vivek 娣诲姞楠岃瘉 end
+        // vivek 娣诲姞楠岃瘉 end
     },
     
     createCancel : function(component, event, helper) {
diff --git a/force-app/main/default/aura/WeeklyReport/WeeklyReportHelper.js b/force-app/main/default/aura/WeeklyReport/WeeklyReportHelper.js
index 1f84345..4fdf0b2 100644
--- a/force-app/main/default/aura/WeeklyReport/WeeklyReportHelper.js
+++ b/force-app/main/default/aura/WeeklyReport/WeeklyReportHelper.js
@@ -17,11 +17,12 @@
                 component.find('select_purpose_type').set('v.options', this.conv_selected(res.allselectlist.Purpose_Type__c));
                 component.find('select_result').set('v.options', this.conv_selected(res.allselectlist.Result__c));
                 component.find('select_stageName').set('v.options', this.conv_selected(res.allselectlist.StageName__c));
-                //SWAG-CBX68C fy 銆愬鎵樸�慏AMS绯荤粺鍛ㄦ姤妯″潡鍐呭闇�姹傚鍔� start
-                component.find('SupportNeeds__c').set('v.options', this.conv_selected(res.allselectlist.SupportNeeds__c));
-                //SWAG-CBX68C fy 銆愬鎵樸�慏AMS绯荤粺鍛ㄦ姤妯″潡鍐呭闇�姹傚鍔� end
+                 //SWAG-CBX68C fy 銆愬鎵樸�慏AMS绯荤粺鍛ㄦ姤妯″潡鍐呭闇�姹傚鍔� start
+                 component.find('SupportNeeds__c').set('v.options', this.conv_selected(res.allselectlist.SupportNeeds__c));
+                 //SWAG-CBX68C fy 銆愬鎵樸�慏AMS绯荤粺鍛ㄦ姤妯″潡鍐呭闇�姹傚鍔� end
                 component.set('v.selected_agency_person', res.allselectlist.AgencyPerson__c[0].label);
                 component.set('v.dialog_type', '鏂板缓');
+                component.set('v.awsurl', res.awsurl);// 20220222 PI鏀归�� by Bright
                 
                 this.get_reports(component, event, helper, component.find('select_date').get('v.value'), component.find('select_agency_person').get('v.value'));
 				
@@ -95,6 +96,38 @@
             if(state == 'SUCCESS'){
                 var res = response.getReturnValue();
 				component.set('v.reports', res.reports);
+                
+                // 20220222 PI鏀归�� by Bright--start
+                let dataIds = [];
+                for (const rep of res.reports) {
+                    if (rep.doctor2__r && rep.doctor2__r.AWS_Data_Id__c) {
+                        dataIds.push(rep.doctor2__r.AWS_Data_Id__c);
+                    }
+                }
+                
+                if(dataIds.length > 0){
+                    let awsurl = component.get('v.awsurl');
+                    helper.search_agency_contact_core(awsurl.token,awsurl.searchUrl,JSON.stringify({
+                        "dataIds":dataIds
+                    }),(result)=>{
+                        if(result.status == '0'){
+                            let mm = {};
+                            for (const m of result.object) {
+                                mm[m.dataId] = m;
+                            }
+                            for (const rep of res.reports) {
+                                if (rep.doctor2__r && rep.doctor2__r.AWS_Data_Id__c && mm.hasOwnProperty(rep.doctor2__r.AWS_Data_Id__c)) {
+                                    rep.doctor2__r.awsdata = mm[rep.doctor2__r.AWS_Data_Id__c];
+                                }
+                            }
+                            component.set('v.reports', res.reports);
+                        }else{
+                            this.error('AWS search status : ' + result.status);
+                        }
+                    },component);
+                }
+                // 20220222 PI鏀归�� by Bright--end
+
                 component.set('v.report_count', res.reports.length);
 
                 // 鏇存柊淇濆瓨寰屻伄select_data鐢�
@@ -276,9 +309,9 @@
                     if (reportDate != null) {
                         component.set('v.data.Report_Date__c', reportDate);
                     }
-                        
-                        component.set('v.edit_copy_select_report_id', "");
-                    }                
+                    
+                    component.set('v.edit_copy_select_report_id', "");
+                }                
             }
         } else {
             // CLOSE
@@ -422,6 +455,9 @@
         component.set('v.selected_date', select_date);
         var name = component.get('v.selected_agency_person');
         var ret = this.create_report_header(component, name, select_agency, select_date);
+        // PIPL update Yin Mingjie 21/02/2022 start
+        this.set_aws_url(component)
+        // PIPL update Yin Mingjie 21/02/2022 end
     },
     
     copy_button : function(component, event, helper) {
@@ -491,6 +527,19 @@
     },
     
     save_report : function(component, event, helper) {
+
+        // 20220222 PI鏀归��  by Bright--start
+        let doctor2Name = '';
+        let visitortitle = '';
+        for(let op of component.find('select_doctor').get('v.options')){
+            if (op.selected) {
+                doctor2Name = op.label;
+                visitortitle = op.Doctor_Division1__c;
+            }
+        }
+        // 20220222 PI鏀归��  by Bright--end
+
+
         component.find('save_button').set('v.disabled', true);
 
         var Report_Date__c = component.get('v.data.Report_Date__c');
@@ -527,7 +576,7 @@
         
         // 娲诲姩鍖哄垎 Purpose_Type__c
         var Purpose_Type__c = component.find('select_purpose_type').get('v.value');
-        //SWAG-CBX68C fy 銆愬鎵樸�慏AMS绯荤粺鍛ㄦ姤妯″潡鍐呭闇�姹傚鍔� start
+          //SWAG-CBX68C fy 銆愬鎵樸�慏AMS绯荤粺鍛ㄦ姤妯″潡鍐呭闇�姹傚鍔� start
         // 鏀彺闇�姹� SupportNeeds__c
         var SupportNeeds__c = component.find('SupportNeeds__c').get('v.value');
         //SWAG-CBX68C fy 銆愬鎵樸�慏AMS绯荤粺鍛ㄦ姤妯″潡鍐呭闇�姹傚鍔� end
@@ -604,9 +653,9 @@
                 "Agency_Report_Id" : Agency_Report__c,
                 "Department_Cateogy" : Department_Cateogy__c,
                 "Purpose_Type" : Purpose_Type__c,
-                //SWAG-CBX68C fy 銆愬鎵樸�慏AMS绯荤粺鍛ㄦ姤妯″潡鍐呭闇�姹傚鍔� start
-                "SupportNeedsc" : SupportNeeds__c,
-                //SWAG-CBX68C fy 銆愬鎵樸�慏AMS绯荤粺鍛ㄦ姤妯″潡鍐呭闇�姹傚鍔� end
+                 //SWAG-CBX68C fy 銆愬鎵樸�慏AMS绯荤粺鍛ㄦ姤妯″潡鍐呭闇�姹傚鍔� start
+                 "SupportNeedsc" : SupportNeeds__c,
+                 //SWAG-CBX68C fy 銆愬鎵樸�慏AMS绯荤粺鍛ㄦ姤妯″潡鍐呭闇�姹傚鍔� end
                 "Agency_Report_Header" : Agency_Report_Header__c,
                 "Agency_Hospital" : Agency_Hospital__c,
                 "Person_In_Charge2" : Person_In_Charge2__c,
@@ -716,6 +765,10 @@
 
                             // Save&New鏅傘伄銈︺偅銉炽儔銈﹀唴銉囥兗銈夸竴瑕�
                             if (res.length > 0) {
+                                // 20220222 PI鏀归��  by Bright--start
+                                res[0].doctor2NameOrigin = doctor2Name;
+                                res[0].visitorTitleOrigin = visitortitle;
+                                // 20220222 PI鏀归��  by Bright--end
 	                            reports_now[reports_now_count] = res[0];
                                 
                                 reports_now.sort(function(a,b) {
@@ -804,10 +857,10 @@
         var ret_obj = [];
 		var now = new Date();
         for (var i = 0; i < count; i++) {
-            
+
             var start_day = new Date(now.getFullYear(), now.getMonth(), (now.getDate() - now.getDay() + 1 - (i * 7)));
             var end_day = new Date(now.getFullYear(), now.getMonth(), now.getDate() + (7 - now.getDay()) - (i * 7));
-          
+
             var start_day_show = new Date(now.getFullYear(), now.getMonth(), (now.getDate() - now.getDay() - (i * 7)));
             var end_day_show = new Date(now.getFullYear(), now.getMonth(), now.getDate() + (6 - now.getDay()) - (i * 7));
             var date_text = start_day.getFullYear() + '/' + (start_day.getMonth() + 1) + '/' + start_day.getDate() + '~' + end_day.getFullYear() + '/' + (end_day.getMonth() + 1) + '/' + end_day.getDate();
@@ -1012,7 +1065,129 @@
             component.set('v.doctor_title', '');
         }
     },
-    
+    // PIPL update Yin Mingjie 21/02/2022 start
+    set_aws_url : function(component) {
+        var action = component.get('c.getAwsurl');
+        action.setParams({
+            "sobj" : "Agency_Contact__c",
+        });
+        action.setCallback(this,function(response){
+            var state = response.getState();
+            if(state == 'SUCCESS'){
+                var awsmap = this.conv_selected(response.getReturnValue());
+                component.set('v.AWStoken',awsmap.token);
+                component.set('v.AWSinsert',awsmap.newUrl);
+                component.set('v.AWStransactionURL',awsmap.transactionURL);
+            }
+            else{
+                this.error('AWS url/token error.');
+                component.set('v.login',false);
+            }
+        });
+        $A.enqueueAction(action);
+    },
+
+    insert_agencycontact : function(component,token,newUrl,payload,agencyHospitalid,helper) {
+        fetch(newUrl, {
+            method: 'POST',
+            body: payload,
+            headers: {
+                'Content-Type': 'application/json',
+                'pi-token': token
+            }
+        }).then((data) => {
+            return data.json();
+        }).then((result) => {
+            if(result.status == '0'){
+                $A.getCallback(function(){
+                    helper.to_agencycontact(component,result,agencyHospitalid);
+                })();
+
+            }else{
+                console.log('AWS status error:' + result)
+                component.set('v.login',false);
+                component.find('OppMessage').setError('AWS insert error.');
+            }
+        }).catch(error => {
+            console.log('AWS insert error:' + error)
+            component.set('v.login',false);
+            component.find('OppMessage').setError('AWS insert error.');
+        });
+        
+    },
+
+    to_agencycontact : function(component,result,agencyHospitalid) {
+        var action = component.get('c.saveAgencyContact');
+        action.setParams({
+            "name" : result.object[0].name,
+            "nameEncrypt" : result.object[0].nameEncrypt,
+            "type" : result.object[0].type,
+            "typeEncrypt" : result.object[0].typeEncrypt,
+            "doctorDivision1" : result.object[0].doctorDivision1,
+            "doctorDivision1Encrypt" : result.object[0].doctorDivision1Encrypt,
+            "agencyHospitalid" : agencyHospitalid,
+            "awsid" : result.object[0].dataId,
+        });
+        action.setCallback(this,function(response){
+            var state = response.getState();
+            if(state == 'SUCCESS'){
+                var acMap = this.conv_selected(response.getReturnValue());
+                console.log(acMap);
+                if(acMap.AgencyContactId != ''){
+                    //纭浜嬪姟 
+                    var token = component.get('v.AWStoken');
+                    var confirmUrl = component.get('v.AWStransactionURL');
+
+                    let data = Object.create(null);
+                    data['isSuccess'] = 1;
+                    data['sfRecordId'] = '';
+                    data['txId'] = result.txId;
+
+                    this.to_confirm(component,token,confirmUrl,JSON.stringify(data));
+                }else if(acMap.errormsg != ''){
+                    this.error(acMap.errormsg);
+                    component.set('v.login',false);
+                }else {
+                    this.error('agency contact insert id error.');
+                    component.set('v.login',false);
+                }
+            }
+            else{
+                this.error('agency contact insert error.');
+                component.set('v.login',false);
+            }
+        });
+        $A.enqueueAction(action);
+    },
+
+    to_confirm : function(component,token,confirmUrl,payload) {
+        fetch(confirmUrl, {
+            method: 'POST',
+            body: payload,
+            headers: {
+                'Content-Type': 'application/json',
+                'pi-token': token
+            }
+        }).then((data) => {
+            return data.json();
+        }).then((result) => {
+            if(result.status == '0' && result.hasOwnProperty('success') && result.success){
+                component.set('v.truthy', false);
+                var modal_newAC = component.find('modal_newAC')
+                $A.util.addClass(modal_newAC, 'disp_none');
+                this.success('.瀹㈡埛浜哄憳宸插垱寤恒��');
+                this.set_doctor_list(component);
+            }else {
+                this.error('AWS confirm error.');
+                component.set('v.login',false);
+            }
+        }).catch(error => {
+            this.error('AWS confirm error.');
+            component.set('v.login',false);
+        });
+    },
+    // PIPL update Yin Mingjie 21/02/2022 end
+
     set_doctor_list : function(component) {
         var hospital_id = component.get('v.hospitalLinkId');
         if (hospital_id) {
@@ -1024,8 +1199,10 @@
             action.setCallback(this,function(response){
                 var state = response.getState();
                 if(state == 'SUCCESS'){
-                    var res = this.conv_selected(response.getReturnValue());
-                    
+                    var retMap = this.conv_selected(response.getReturnValue());
+                    // PIPL update Yin Mingjie 21/02/2022 start
+                    this.AWS_search(retMap,component);
+                    /*
                     var default_doctor = component.get('v.default_select_doctor_id');
                     if (default_doctor != '' && res.length > 0) {
                         var doctor_title = '';
@@ -1050,6 +1227,8 @@
                     component.set('v.default_select_doctor_id', '');
                     component.set('v.doctor_list', res);
                     component.set('v.login',false);
+                    */
+                   // PIPL update Yin Mingjie 21/02/2022 end
                 }
                 else{
                     this.error('set_doctor_list failed.');
@@ -1059,6 +1238,111 @@
             $A.enqueueAction(action);
         }
     },
+
+    // PIPL update Yin Mingjie 21/02/2022 start
+    AWS_search : function(retMap,component) {
+        var token = retMap.sre.token;
+        var searchUrl = retMap.sre.searchUrl;
+
+        var dataArr = new Array();
+        for (const key in retMap) {
+            if (key == 'sre') {continue;}
+            dataArr.push(key);
+        }
+        let obj= Object.create(null);
+        obj['dataIds'] = dataArr;
+        var data = JSON.stringify(obj);
+        this.search_agency_contact(token,searchUrl,data,retMap,component);
+    },
+
+    search_agency_contact : function(token,searchUrl,payload,retMap,component) {
+        this.search_agency_contact_core(token,searchUrl,payload,(result)=>{
+            if(result.status == '0'){
+                this.to_doctor_list(result,retMap,component);
+            }else{
+                this.error('AWS search status : ' + result.status);
+                component.set('v.login',false);
+            }
+        },component);
+        // fetch(searchUrl, {
+        //     method: 'POST',
+        //     body: payload,
+        //     headers: {
+        //         'Content-Type': 'application/json',
+        //         'pi-token': token
+        //     }
+        // }).then((data) => {
+        //     return data.json();
+        // }).then((result) => {
+            
+        // }).catch(error => {
+        //     this.error('AWS search error.');
+        //     component.set('v.login',false);
+        // });
+    },
+    search_agency_contact_core : function(token,searchUrl,payload,callback,component) {
+        fetch(searchUrl, {
+            method: 'POST',
+            body: payload,
+            headers: {
+                'Content-Type': 'application/json',
+                'pi-token': token
+            }
+        }).then((data) => {
+            return data.json();
+        }).then((result) => {
+            component.set('v.login',false);
+            if(callback)callback(result);
+        }).catch(error => {
+            this.error('AWS search error.');
+            component.set('v.login',false);
+        });
+    },
+
+    to_doctor_list : function(result,retMap,component) {
+        var resls = result.object;
+        var res = [];
+        var space = {};
+        space['label'] = '';
+        space['selected'] = true;
+        space['value'] = '';
+        res.push(space);
+
+        for (var i = 0; i < resls.length; i++) {
+            var t = {};
+            t['label'] = resls[i].name;
+            t['selected'] = false;
+            t['Doctor_Division1__c'] = resls[i].doctorDivision1;
+            t['value'] = retMap[resls[i].dataId].value;
+            res.push(t);
+        }
+
+        var default_doctor = component.get('v.default_select_doctor_id');
+        if (default_doctor != '' && res.length > 0) {
+            var doctor_title = '';
+            for (var i = 0; i < res.length; i++) {
+                if (res[i].value == default_doctor) {
+                    res[i].selected = true;
+                    doctor_title = res[i].Doctor_Division1__c;
+                } else {
+                    res[i].selected = false;
+                }
+            }
+
+            component.find('select_doctor').set('v.options', res);
+            component.set('v.doctor_title', doctor_title);
+        } else {
+            component.find('select_doctor').set('v.options', res);
+            if (res.length > 0) {
+                component.set('v.doctor_title', res[0].Doctor_Division1__c);
+            }
+        }
+        
+        component.set('v.default_select_doctor_id', '');
+        component.set('v.doctor_list', res);
+        component.set('v.login',false);
+    },
+    // PIPL update Yin Mingjie 21/02/2022 end
 
     // stageNameChange : function(component, event, helper) {
     //     var options = component.find('input-oppstage').get("v.body")[0].get('v.options');
@@ -1332,8 +1616,8 @@
         this.set_doctor_list(component);
     },
     
-     createCancel : function(component, event, helper) {
-         component.set('v.truthy', false);
+    createCancel : function(component, event, helper) {
+        component.set('v.truthy', false);
         var modal_newAC = component.find('modal_newAC')
         $A.util.addClass(modal_newAC, 'disp_none');
     },
@@ -1448,13 +1732,13 @@
         var selectDate = component.find('select_date').get('v.value');
         var fieldsList=['Name','Phone','AccountNumber']; //Please write your code dynamic fields
         action.setParams({ 
-                          fileData : component.get("v.fileContentData"),
-                          //selectDateselectDate :component.find('select_date').get('v.value'),
-                          sobjectName:'Account', //Any object
-                          fields:fieldsList
-                          
+            fileData : component.get("v.fileContentData"),
+            //selectDateselectDate :component.find('select_date').get('v.value'),
+            sobjectName:'Account', //Any object
+            fields:fieldsList
+            
 
-                      });
+        });        
         action.setCallback(this, function(response) {
             var state = response.getState();
             if (state === "SUCCESS") {
@@ -1656,4 +1940,40 @@
         $A.util.addClass(modalimport, 'disp_none');
         $A.util.addClass(modalimportbg,'disp_none');
     }
+    
+    // searchAgencyContact : function(res) {
+    //     var agencyContacts = [];
+    //     for (let idx = 0; idx < res.length; idx++) {
+    //         agencyContacts.push(res[idx].awsid);
+    //     }
+    //     var action = component.get('c.getAWStoken');
+    //     action.setCallback(this,function(response){
+    //         var state = response.getState();
+    //         console.log('state : ' + state);
+    //         if(state === 'SUCCESS') {
+    //             console.log('get name : ' + action.getName());
+    //         }
+    //         else if(state === 'INCOMPLETE') {
+    //             console.log('incomplete state');
+    //         } else if(state === 'ERROR') {
+    //             if (errors) {
+    //                 if (errors[0] && errors[0].message) {
+    //                     console.log("Error message: " +
+    //                              errors[0].message);
+    //                 }
+    //             } else {
+    //                 console.log("Unknown error");
+    //             }
+    //         }
+    //     });
+    //     $A.enqueueAction(action);
+    //     // var requestSearchPayload = new Map();
+    //     // requestSearchPayload.set("dataIds",agencyContacts);
+    //     var data = '{"dataIds": ["944233643042144256", "943645353649897473"]}';
+    //     var token = 'eyJhbGciOiJIUzUxMiJ9.eyJjcmVhdGVkIjoxNjQ0NzY4MTIwNjc2LCJhcHBpZCI6IjZMeml6Y1JmN2g4eUx4MjgiLCJleHAiOjE2NDk5NTIxMjB9.6vORDP8BRaf_beCt4SEXrl3DEuYZ3owotkUqh27r8YhfmKDDWrv_NpVVpjTPeFjvzlQqaJMcFobZeAmPxpmq2A';
+    //     var searchUrl = 'https://52.83.101.205/api/agencycontact/search';
+    //     var data = this.search(searchUrl,data,token);
+    //     return data;searchUrl,requestSearchPayload,token
+    // },
+    
 })
\ No newline at end of file
diff --git a/force-app/main/default/classes/AWSServiceTool.cls b/force-app/main/default/classes/AWSServiceTool.cls
index 85eaf80..0c2e0ba 100644
--- a/force-app/main/default/classes/AWSServiceTool.cls
+++ b/force-app/main/default/classes/AWSServiceTool.cls
@@ -9,14 +9,44 @@
  * */
 public without sharing class AWSServiceTool {
     public static String getAWSToken(){
-        String app_id = '6LzizcRf7h8yLx28';
-        String app_secret = 'UkLohQcHNjg164SdRc7gnS4rgu4d7FjINM3mtzRbyTS6IrUP5V';
-        String url = 'https://52.83.101.205/api/token/getToken?app_id=' + app_id + '&app_secret=' + app_secret;
-        HttpRequest req = new HttpRequest();
-        req.setEndpoint(url);
-        req.setMethod('GET');
-        Http h = new Http();
-        HttpResponse res = h.send(req);
-        return res.getBody();
+        AWS_Integration_Info__mdt awsConfiguration = [SELECT App_Id__c,Token_URL__c,App_Secret__c,Host_URL__c FROM AWS_Integration_Info__mdt  WHERE DeveloperName = 'AWS_Default_Configuration'];
+        if (awsConfiguration == null) {
+            System.debug('AWS_Integration_Info__mdt娌¢厤缃�');
+            return null;
+        }
+        String awsAppId = awsConfiguration.App_Id__c;
+        String awsAppSecret = awsConfiguration.App_Secret__c;
+        Http http = new Http();
+        HttpRequest request = new HttpRequest();
+        String url = awsConfiguration.Token_URL__c;
+        request.setEndpoint(url);
+        request.setMethod('GET');
+        HttpResponse response = http.send(request);
+        Map<String, Object> results = (Map<String, Object>) JSON.deserializeUntyped(response.getBody());
+        String token = (String)results.get('object');
+        return token;
+    }
+    @future(callout=true)
+    public static void deleteFileAddress(Set<String> fileAddressIds){
+        //1. Get file address id
+        system.debug('fileAddressId = '+ JSON.serialize(fileAddressIds));
+        PIHelper.PIIntegration documentPI=PIHelper.getPIIntegrationInfo('Document');
+        //2. Delete aws file doucment and post aws service
+        Http http = new Http();
+        HttpRequest request = new HttpRequest();
+        String url = documentPI.deleteUrl;
+        request.setEndpoint(url);
+        request.setMethod('POST');
+        request.setHeader('pi-token',documentPI.token);
+        request.setHeader('Content-Type', 'application/json');
+        request.setBody(JSON.serialize(fileAddressIds));
+        HttpResponse response = http.send(request);
+        system.debug('response = ' + response);
+        if(response.getStatusCode() == 200){
+            Map<String, Object> results = (Map<String, Object>) JSON.deserializeUntyped(response.getBody());
+            if(results.get('status')=='0'){
+                System.debug('鎴愬姛鍒犻櫎');
+            }
+        }
     }
 }
\ No newline at end of file
diff --git a/force-app/main/default/classes/AgencyAccountCmp.cls b/force-app/main/default/classes/AgencyAccountCmp.cls
index 27094dd..2106592 100644
--- a/force-app/main/default/classes/AgencyAccountCmp.cls
+++ b/force-app/main/default/classes/AgencyAccountCmp.cls
@@ -75,4 +75,52 @@
 
         return acList1;
     }
+
+    @AuraEnabled
+    public static void SaveLog(String module,String content,String status,String respMsg){
+        string awsDataId = '';
+        string sfId = '';
+        string transId = '';
+        try {
+            Map<string,object> mso = (Map<string,object>)JSON.deserializeUntyped(respMsg);
+            awsDataId = String.valueOf(mso.get('AWS_Data_Id__c'));
+            transId = String.valueOf(mso.get('txId'));
+            
+        } catch (Exception e) {
+            
+        }
+
+        PIHelper.saveTransLog(module, awsDataId, sfId, transId, content, status, respMsg);
+    }
+
+    // 20220222 PI鏀归�� by Bright--start
+
+    @AuraEnabled
+    public static Map<string,string> GetConfig() {
+        Map<String,string> result = new Map<String,string>();
+        result.put('staticResource', JSON.serialize(PIHelper.getPIIntegrationInfo('Agency_Contact__c')));
+        //result.put('sessionId', UserInfo.getSessionId());
+        return result;
+    }
+
+    @AuraEnabled
+    public static List<Agency_Contact__c> searchAccounts2(String hosStr, List<string> awsids) {
+        System.debug('hosStr='+hosStr);
+        System.debug('awsids='+awsids);
+        String f1 = '%'+hosStr+'%';
+        
+        if (String.isBlank(hosStr)) f1 = '%';
+        Set<String> hospitalSet = new Set<String>();
+        Set<String> aHospitalSet = new Set<String>();
+        List<Agency_Hospital_Link__c> ahls = [select Id, Hospital__c from Agency_Hospital_Link__c];
+        for (Agency_Hospital_Link__c ahl : ahls) {
+            hospitalSet.add(ahl.Hospital__c);
+            aHospitalSet.add(ahl.Id);
+        }
+        List<Agency_Contact__c> acList1 = LightningUtil.searchOCMAgencyContact(hospitalSet, aHospitalSet, f1, awsids);
+
+
+        return acList1;
+    }
+    // 20220222 PI鏀归�� by Bright--end
 }
\ No newline at end of file
diff --git a/force-app/main/default/classes/AgencyContactHandler.cls b/force-app/main/default/classes/AgencyContactHandler.cls
index 000d772..169034d 100644
--- a/force-app/main/default/classes/AgencyContactHandler.cls
+++ b/force-app/main/default/classes/AgencyContactHandler.cls
@@ -47,15 +47,25 @@
                 }
                 nObj.Agency_ID__c = nObj.Agency_ID_F__c;
             }
-            nameSet.add(nObj.Name);
+            nameSet.add(nObj.Name_Encrypted__c);
             ahIdSet.add(nObj.Agency_Hospital__c);
-            keyMap.put(nObj.Agency_Hospital__c + nObj.Name, nObj);
+            // PIPL update Yin Mingjie 21/02/2022 start
+            // keyMap.put(nObj.Agency_Hospital__c + nObj.Name, nObj);
+            keyMap.put(nObj.Agency_Hospital__c + nObj.Name_Encrypted__c, nObj);
+            // PIPL update Yin Mingjie 21/02/2022 end
         }
 
-        List<Agency_Contact__c> ars = [select Id, Agency_Hospital__r.Name, Agency_Hospital__c, Name from Agency_Contact__c 
-            where Name in :nameSet and Agency_Hospital__c in :ahIdSet and Agency_Hospital__c != null];
+        // PIPL update Yin Mingjie 21/02/2022 start
+        // List<Agency_Contact__c> ars = [select Id, Agency_Hospital__r.Name, Agency_Hospital__c, Name from Agency_Contact__c 
+        //     where Name in :nameSet and Agency_Hospital__c in :ahIdSet and Agency_Hospital__c != null];
+        List<Agency_Contact__c> ars = [select Id, Agency_Hospital__r.Name, Agency_Hospital__c, Name, Name_Encrypted__c from Agency_Contact__c 
+            where Name_Encrypted__c in :nameSet and Agency_Hospital__c in :ahIdSet and Agency_Hospital__c != null];
+        // PIPL update Yin Mingjie 21/02/2022 end
         for (Agency_Contact__c ar : ars) {
-            String key = ar.Agency_Hospital__c + ar.Name;
+            // PIPL update Yin Mingjie 21/02/2022 start
+            // String key = ar.Agency_Hospital__c + ar.Name;
+            String key = ar.Agency_Hospital__c + ar.Name_Encrypted__c;
+            // PIPL update Yin Mingjie 21/02/2022 end
             //system.debug('========3333333key'+key);
             if (keyMap.containsKey(key)) {
                 Agency_Contact__c a = keyMap.get(key);
diff --git a/force-app/main/default/classes/AssessmentReportController.cls b/force-app/main/default/classes/AssessmentReportController.cls
index 929cb10..1e98ed4 100644
--- a/force-app/main/default/classes/AssessmentReportController.cls
+++ b/force-app/main/default/classes/AssessmentReportController.cls
@@ -7,6 +7,8 @@
     public integer ASRRecordsNumber;
     public boolean hasError;
     public String ErrorMessages;
+    public String awsString{get; set;}
+    public String staticResource {get; set;}
 
 
     public AssessmentReportController() {
@@ -71,6 +73,7 @@
                 return null;
             }
             setCurrentAssessmentReportStaff();
+            staticResource = JSON.serialize(PIHelper.getPIIntegrationInfo('Contact'));
         } catch (Exception ex) {
             ApexPages.addMessages(ex);
 
@@ -221,6 +224,7 @@
         list<CampaignMember__c> CMlist = [
                                              SELECT Id, Name, Department_ID__c,
                                              Contact_ID__c, Contact_ID__r.Name,
+                                             Contact_ID__r.AWS_Data_Id__c,
                                              dept__c, State__c, City__c
                                              FROM CampaignMember__c
                                              where Campaign__c = : AssessmentReport.Campaign__c
@@ -237,7 +241,7 @@
         for (AssessmentReportStaff__c tempARS : tempAmrsList) {
             ARSMap.put(tempARS.CampaignMember__c, tempARS);
         }
-
+        
         for (CampaignMember__c tempCM : CMlist) {
             if (ARSMap.containsKey(tempCM.id)) {
                 TempARSInfoList.add(
@@ -259,8 +263,8 @@
             }
         }
         ARSInfoList = TempARSInfoList.clone();
-
-
+        awsString = JSON.serialize(ARSInfoList);
+        
     }
     public PageReference Submit() {
         system.debug('Submit start:');
diff --git a/force-app/main/default/classes/BmeWorkController.cls b/force-app/main/default/classes/BmeWorkController.cls
index 77664b0..fa7a692 100644
--- a/force-app/main/default/classes/BmeWorkController.cls
+++ b/force-app/main/default/classes/BmeWorkController.cls
@@ -16,6 +16,17 @@
     public String numtextD2 { get; set; } //鏁版嵁瀛楁02
     public String numtextD { get; set; }//鏁版嵁瀛楁03
     public String limits { get; set; }//鏃ユ湡03
+
+    public String AwsDataIds { get; set; }//PI 鏀归��
+    public String[] AwsDataIdArr{
+        get{
+            if(String.isBlank(AwsDataIds)){
+                return new string[]{};
+            }
+            return AwsDataIds.split(';');
+        }
+    }
+
     //public List<SelectOption> dateOpts { get; private set; }
     public List<SelectOption> textOpts { get; private set; }
     public List<SelectOption> textOpts01 { get; private set; }
@@ -49,33 +60,41 @@
     private String strRtColumus;
     @TestVisible private String accTypeForSort = null;
     private static Integer oppLimit = 500;
+
+    // 20220222 PI鏀归�� by Bright--start
+    public List<SelectOption> equalOpts2 { get; private set; }
+    public string staticResource { get; private set; }
+    // 20220222 PI鏀归�� by Bright--end
+    
+
+
     public BmeWorkController() {
         oppRecords = new List<ConMeetInfo>();
         //鏁版嵁瀛楁涓嬫媺鍒楄〃
         textOpts = new List<SelectOption>();
         textOpts.add(new SelectOption('Account.Name', '鍖婚櫌绉戝'));
         textOpts.add(new SelectOption('CampaignName__c', '瀛︿細鍩硅鍚嶇О'));
-        textOpts.add(new SelectOption('MedicalStaff_Full_name__c', '鎷滆浜哄鍚�'));
+        // textOpts.add(new SelectOption('MedicalStaff_Full_name__c', '鎷滆浜哄鍚�'));
         textOpts.add(new SelectOption('CampaignOwnerName__c', '瀛︿細鍩硅涓绘媴褰�'));
         textOpts.add(new SelectOption('', '--鏃�--'));
 
         textOpts01 = new List<SelectOption>();
         textOpts01.add(new SelectOption('CampaignName__c', '瀛︿細鍩硅鍚嶇О'));
-        textOpts01.add(new SelectOption('MedicalStaff_Full_name__c', '鎷滆浜哄鍚�'));
+        // textOpts01.add(new SelectOption('MedicalStaff_Full_name__c', '鎷滆浜哄鍚�'));
         textOpts01.add(new SelectOption('CampaignOwnerName__c', '瀛︿細鍩硅涓绘媴褰�'));
         textOpts01.add(new SelectOption('Account.Name', '鍖婚櫌绉戝'));
         textOpts01.add(new SelectOption('', '--鏃�--'));
 
         textOpts02 = new List<SelectOption>();
         textOpts02.add(new SelectOption('MedicalStaff_Full_name__c', '鎷滆浜哄鍚�'));
-        textOpts02.add(new SelectOption('Account.Name', '鍖婚櫌绉戝'));
-        textOpts02.add(new SelectOption('CampaignName__c', '瀛︿細鍩硅鍚嶇О'));
-        textOpts02.add(new SelectOption('CampaignOwnerName__c', '瀛︿細鍩硅涓绘媴褰�'));
+        // textOpts02.add(new SelectOption('Account.Name', '鍖婚櫌绉戝'));
+        // textOpts02.add(new SelectOption('CampaignName__c', '瀛︿細鍩硅鍚嶇О'));
+        // textOpts02.add(new SelectOption('CampaignOwnerName__c', '瀛︿細鍩硅涓绘媴褰�'));
         textOpts02.add(new SelectOption('', '--鏃�--'));
 
         textOpts03 = new List<SelectOption>();
         textOpts03.add(new SelectOption('CampaignOwnerName__c', '瀛︿細鍩硅涓绘媴褰�'));
-        textOpts03.add(new SelectOption('MedicalStaff_Full_name__c', '鎷滆浜哄鍚�'));
+        // textOpts03.add(new SelectOption('MedicalStaff_Full_name__c', '鎷滆浜哄鍚�'));
         textOpts03.add(new SelectOption('Account.Name', '鍖婚櫌绉戝'));
         textOpts03.add(new SelectOption('CampaignName__c', '瀛︿細鍩硅鍚嶇О'));
         textOpts03.add(new SelectOption('', '--鏃�--'));
@@ -86,6 +105,10 @@
         equalOpts.add(new SelectOption('contains', '鍖呭惈'));
         equalOpts.add(new SelectOption('notcontains', '涓嶅寘鍚�'));
         equalOpts.add(new SelectOption('starts with', '璧峰瀛楃'));
+
+        equalOpts2 = new List<SelectOption>();
+        equalOpts2.add(new SelectOption('contains', '鍖呭惈'));
+
         //棣栬鏄剧ず鍖呭惈
         firstOpts = new List<SelectOption>();
         firstOpts.add(new SelectOption('contains', '鍖呭惈'));
@@ -104,11 +127,12 @@
         limitOpts.add(new SelectOption('1000', '鍏ㄩ儴'));
         //鏁版嵁鏄剧ず榛樿鏉℃暟
         limits = '50';
+        staticResource = JSON.serialize(PIHelper.getPIIntegrationInfo('Contact'));
     }
     //--------------------------------------init()--------------------------------------------------------------------------------
     public PageReference init() {
         setLayoutRWInfo();
-        searchOppInner();
+        //searchOppInner();
         system.debug(oppRecords);
         return null;
     }
@@ -192,117 +216,126 @@
     //----------------------------------SOQL(鎷兼帴)---------------------------------------------
     public void searchOppInner() {
         //try {
-            //SOQL:鎷兼帴妫�绱㈡潯浠朵互鍙婄粡閿�鍟嗚浠风殑SOQL璇彞
-            String soql = ' SELECT Campaign__c, CampaignOwnerID__c, Campaign__r.Ownerid, '+
-                                'CampaignOwnerName__c,MedicalStaff_Full_name__c,Accountid,' +
-                          strColumus +
-                          ' FROM Contact WHERE Campaign__c != \'\' and CampaignStatus__c = \'鍏紑涓璡'';
-            if (!String.isBlank(numtextA)) {
-                String newNumtext = numtextA.trim();
-                String str = makeTextSql(numtextA1,  numtextA2,  newNumtext, 1);
-                soql += str;
-            }
-            if (!String.isBlank(numtextB)) {
-                String newNumtext = numtextB.trim();
-                String str = makeTextSql(numtextB1,  numtextB2,  newNumtext, 1);
-                soql += str;
-            }
-            if (!String.isBlank(numtextC)) {
-                String newNumtext = numtextC.trim();
-                String str = makeTextSql(numtextC1,  numtextC2,  newNumtext, 1);
-                soql += str;
-            }
-            if (!String.isBlank(numtextD)) {
-                String newNumtext = numtextD.trim();
-                String str = makeTextSql(numtextD1,  numtextD2,  newNumtext, 1);
-                soql += str;
-            }
-            //鎺掑簭
-            if (String.isBlank(this.sortKey)) {
-                soql += ' order by LastModifiedDate desc limit ' + Integer.valueOf(limits);
-            } else {
-                if (Integer.valueOf(this.sortKey) != null) {
-                    soql += ' order by ' + this.selColumus[Integer.valueOf(this.sortKey)] + ' ' + (this.sortOrderAsc == true ? 'asc nulls first' : 'desc nulls last') + ' limit ' + Integer.valueOf(limits);
-                } else {
-                    soql += ' order by ' + this.selColumus[Integer.valueOf(this.sortKey)] + ' ' + (this.sortOrderAsc == true ? 'asc nulls first' : 'desc nulls last') + ' limit ' + Integer.valueOf(limits);
-                }
-            }
-            system.debug('鑱旂郴浜猴細' + soql);
-            List<Contact> InfoList = Database.query(soql);
-            List<ConMeetInfo> conmeetList = new List<ConMeetInfo>();
-            if (InfoList != null && InfoList.size() > 0) {
-                String str = '';
-                for (Contact agc : InfoList) {
-                    
-                    if (str == '' && agc.Id != null) {
-                        str = '\'' + agc.Id + '\'';
-                    } else if (agc.Id != null) {
-                        str += ',\'' + agc.Id + '\'';
-                    }
-                }
-                System.debug('-----Str-----锛�' + str );
-                //SOQL1锛氭嫾鎺ヨ浠稴OQL璇彞锛�
-                Date dateToday = Date.toDay();
-                Integer year = dateToday.year();
-                Integer month = dateToday.month();
-                Integer day = dateToday.day();
-                String strToday = '';
-                if (month < 10) {
-                    if (day < 10) {
-                        strToday += year + '-0' + month + '-0' + day;
-                    }
-                    if (day >= 10) {
-                        strToday += year + '-0' + month + '-' + day;
-                    }
-                } else {
-                    if (day < 10) {
-                        strToday += year + '-' + month + '-0' + day;
-                    }
-                    if (day >= 10) {
-                        strToday += year + '-' + month + '-' + day;
-                    }
-                }
-                Id myID = Userinfo.getUserId();
-                String soql1 = 'SELECT ' + strRtColumus + ' , Contact__c FROM MeetingManagement__c WHERE CreatedById  =: myID and Contact__c IN (' + str + ') AND CreatedDate__c = ' + strToday  ;
-                System.debug('-----鏈嶅姟鎶�甯堢鐞嗚〃-----锛�' + soql1);
-                List<MeetingManagement__c> OpportList = new List<MeetingManagement__c>();
-                //瀵瑰簲鍖归厤锛�
-                OpportList = Database.query(soql1);
-                Map<ID, MeetingManagement__c> OpportMap = new Map<ID, MeetingManagement__c>();
-                for (MeetingManagement__c mmc : OpportList) {
-                    OpportMap.put(mmc.Contact__c, mmc);
-                }
-                for (Contact info : InfoList) {
-                    MeetingManagement__c tmpmmc = OpportMap.get(info.Id);
+        //SOQL:鎷兼帴妫�绱㈡潯浠朵互鍙婄粡閿�鍟嗚浠风殑SOQL璇彞
+        String soql = ' SELECT AWS_Data_Id__c,Campaign__c, CampaignOwnerID__c, Campaign__r.Ownerid, '+
+                            'CampaignOwnerName__c,MedicalStaff_Full_name__c,Accountid,' +
+                        strColumus +
+                        ' FROM Contact WHERE Campaign__c != \'\' and CampaignStatus__c = \'鍏紑涓璡'';
+        if (!String.isBlank(numtextA)) {
+            String newNumtext = numtextA.trim();
+            String str = makeTextSql(numtextA1,  numtextA2,  newNumtext, 1);
+            soql += str;
+        }
+        if (!String.isBlank(numtextB)) {
+            String newNumtext = numtextB.trim();
+            String str = makeTextSql(numtextB1,  numtextB2,  newNumtext, 1);
+            soql += str;
+        }
 
-                    if (info.IsEndoscope__c == null) {
-                        info.IsEndoscope__c = '鏄�';
-                    }
-                    if (tmpmmc == null) {
-                        tmpmmc = new MeetingManagement__c();
-                        tmpmmc.Contact__c = info.Id;
-                        tmpmmc.Name  = info.MedicalStaff_Full_name__c + ':' + Date.today().format();
-                        tmpmmc.CreatedDate__c  = Date.today();
-                        //tmpmmc.Campaign__c = info.Campaign__c;
-                    }
-                    conmeetList.add(new ConMeetInfo(info, tmpmmc));
-                    conmeetList[conmeetList.size() - 1].lineNo = conmeetList.size() - 1;
+
+        // if (!String.isBlank(numtextC)) {
+        //     String newNumtext = numtextC.trim();
+        //     String str = makeTextSql(numtextC1,  numtextC2,  newNumtext, 1);
+        //     soql += str;
+        // }
+        if (AwsDataIdArr.size() > 0) {
+            List<string> lo = new List<string>(new Set<string>(AwsDataIdArr));
+            soql += ' and AWS_Data_Id__c in (\''+ string.join(lo, '\',\'')+'\') ';
+        }
+        if (!String.isBlank(numtextD)) {
+            String newNumtext = numtextD.trim();
+            String str = makeTextSql(numtextD1,  numtextD2,  newNumtext, 1);
+            soql += str;
+        }
+        //鎺掑簭
+        if (String.isBlank(this.sortKey)) {
+            soql += ' order by LastModifiedDate desc limit ' + Integer.valueOf(limits);
+        } else {
+            if (Integer.valueOf(this.sortKey) != null) {
+                soql += ' order by ' + this.selColumus[Integer.valueOf(this.sortKey)] + ' ' + (this.sortOrderAsc == true ? 'asc nulls first' : 'desc nulls last') + ' limit ' + Integer.valueOf(limits);
+            } else {
+                soql += ' order by ' + this.selColumus[Integer.valueOf(this.sortKey)] + ' ' + (this.sortOrderAsc == true ? 'asc nulls first' : 'desc nulls last') + ' limit ' + Integer.valueOf(limits);
+            }
+        }
+        system.debug('鑱旂郴浜猴細' + soql);
+        List<Contact> InfoList = Database.query(soql);
+        System.debug('soql瀹屼簡');
+        List<ConMeetInfo> conmeetList = new List<ConMeetInfo>();
+        if (InfoList != null && InfoList.size() > 0) {
+            String str = '';
+            for (Contact agc : InfoList) {
+                
+                if (str == '' && agc.Id != null) {
+                    str = '\'' + agc.Id + '\'';
+                } else if (agc.Id != null) {
+                    str += ',\'' + agc.Id + '\'';
                 }
             }
-            oppRecords = conmeetList.clone();
-            oppCount = oppRecords.size();
-            //鏄剧ず鎻愮ず鎿嶄綔淇℃伅
-            if (String.isBlank(this.saveType) && String.isBlank(this.sortKey)) {
-                ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO, '鍙栧緱鏈�杩戠殑 ' + oppCount + ' 鏉℃暟鎹�'));
-            } else if (!String.isBlank(this.sortKey)) {
-                if (oppCount > oppLimit) {
-                    ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO, '鏁版嵁瓒呰繃' + oppLimit + '浠讹紝鍙樉绀哄墠' + oppLimit + '浠�'));
-                } else {
-                    ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO, '鍏辨湁 ' + oppCount + ' 鏉℃暟鎹�'));
+            System.debug('-----Str-----锛�' + str );
+            //SOQL1锛氭嫾鎺ヨ浠稴OQL璇彞锛�
+            Date dateToday = Date.toDay();
+            Integer year = dateToday.year();
+            Integer month = dateToday.month();
+            Integer day = dateToday.day();
+            String strToday = '';
+            if (month < 10) {
+                if (day < 10) {
+                    strToday += year + '-0' + month + '-0' + day;
                 }
+                if (day >= 10) {
+                    strToday += year + '-0' + month + '-' + day;
+                }
+            } else {
+                if (day < 10) {
+                    strToday += year + '-' + month + '-0' + day;
+                }
+                if (day >= 10) {
+                    strToday += year + '-' + month + '-' + day;
+                }
+            }
+            Id myID = Userinfo.getUserId();
+            String soql1 = 'SELECT ' + strRtColumus + ' , Contact__c, Contact__r.Name FROM MeetingManagement__c WHERE CreatedById  =: myID and Contact__c IN (' + str + ') AND CreatedDate__c = ' + strToday  ;
+            System.debug('-----鏈嶅姟鎶�甯堢鐞嗚〃-----锛�' + soql1);
+            List<MeetingManagement__c> OpportList = new List<MeetingManagement__c>();
+            //瀵瑰簲鍖归厤锛�
+            OpportList = Database.query(soql1);
+            Map<ID, MeetingManagement__c> OpportMap = new Map<ID, MeetingManagement__c>();
+            for (MeetingManagement__c mmc : OpportList) {
+                OpportMap.put(mmc.Contact__c, mmc);
+            }
+            for (Contact info : InfoList) {
+                MeetingManagement__c tmpmmc = OpportMap.get(info.Id);
+
+                if (info.IsEndoscope__c == null) {
+                    info.IsEndoscope__c = '鏄�';
+                }
+                if (tmpmmc == null) {
+                    tmpmmc = new MeetingManagement__c();
+                    tmpmmc.Contact__c = info.Id;
+                    tmpmmc.Contact__r = info;
+                    tmpmmc.Name  = info.MedicalStaff_Full_name__c + ':' + Date.today().format();
+                    tmpmmc.CreatedDate__c  = Date.today();
+                    //tmpmmc.Campaign__c = info.Campaign__c;
+                }
+                conmeetList.add(new ConMeetInfo(info, tmpmmc));
+                conmeetList[conmeetList.size() - 1].lineNo = conmeetList.size() - 1;
+            }
+        }
+        oppRecords = conmeetList.clone();
+        oppCount = oppRecords.size();
+        System.debug('searchOppInner瀹屼簡'+oppRecords);
+        //鏄剧ず鎻愮ず鎿嶄綔淇℃伅
+        if (String.isBlank(this.saveType) && String.isBlank(this.sortKey)) {
+            ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO, '鍙栧緱鏈�杩戠殑 ' + oppCount + ' 鏉℃暟鎹�'));
+        } else if (!String.isBlank(this.sortKey)) {
+            if (oppCount > oppLimit) {
+                ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO, '鏁版嵁瓒呰繃' + oppLimit + '浠讹紝鍙樉绀哄墠' + oppLimit + '浠�'));
             } else {
                 ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO, '鍏辨湁 ' + oppCount + ' 鏉℃暟鎹�'));
             }
+        } else {
+            ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO, '鍏辨湁 ' + oppCount + ' 鏉℃暟鎹�'));
+        }
         //} catch (Exception e) {
         //    system.debug(e);
         //}
diff --git a/force-app/main/default/classes/CM_SearchContact.cls b/force-app/main/default/classes/CM_SearchContact.cls
index 850d3a2..7dfbdba 100644
--- a/force-app/main/default/classes/CM_SearchContact.cls
+++ b/force-app/main/default/classes/CM_SearchContact.cls
@@ -11,6 +11,10 @@
     private Integer i = 0;
     // SWAG-BB44G7  鎵�鍦ㄥ尰闄d end
     private String nowValue;
+    public String staticResource {get; set;}
+    public String contactAWSIds {set;get;}
+    public String contactsInfo {set;get;}
+    public String awsDataIdArray {set;get;}
 
     public CM_SearchContact() {
         openLine = Apexpages.currentPage().getParameters().get('line');
@@ -28,6 +32,26 @@
         }
         // SWAG-BB44G7  妫�绱㈡墍鍦ㄥ尰闄d end
         nowValue = Apexpages.currentPage().getParameters().get('now');
+
+        //2022/02/15 寮犲崕寤� PI PL start
+        //1. Query Contact by accountId
+        List<Contact> conList = new List<Contact>();
+        system.debug('Account Id from Front-end:'+accountId);
+        if(String.isNotBlank(accountId) && String.isNotEmpty(accountId)){
+            conList = new List<Contact>([select Id,AWS_Data_Id__c from Contact where AccountId=:accountId and AWS_Data_Id__c!='']);
+        }        
+        //2. Prepare the Contact Info
+        Map<String,Contact> awsIdToContactMap = new Map<String,Contact>();
+        List<String> conAWSIds = new List<String>();
+        for(Contact con:conList){
+            conAWSIds.add(con.AWS_Data_Id__c);
+            awsIdToContactMap.put(con.AWS_Data_Id__c,con);
+        }
+        //conAWSIds.add('943114607025717249');
+        contactsInfo = JSON.serialize(awsIdToContactMap);
+        contactAWSIds = JSON.serialize(conAWSIds);
+        staticResource = JSON.serialize(PIHelper.getPIIntegrationInfo('Contact')); 
+        //2022/02/15 寮犲崕寤� PI PL end
     }
 
     public void init() {
@@ -50,9 +74,9 @@
 
 
     public PageReference searchContact() {
-        String searchStr = 'select Id, Name, Department__c, Type__c, AccountName__c, Supplement__c, Phone,accountid ';
+        String searchStr = 'select Id, Name, Department__c, Type__c, AccountName__c, Supplement__c, Phone,accountid,AWS_Data_Id__c';
         searchStr += '        from Contact ';
-        searchStr += '       where Isactive__c = \'鏈夋晥\' ';
+        searchStr += '       where Isactive__c = \'鏈夋晥\' and AWS_Data_Id__c!=\'\' ';
         // SWAG-BB44G7  妫�绱㈡墍鍦ㄥ尰闄㈢殑瀹㈡埛浜哄憳 start
         if(i == 1 ){
             searchStr += '         and Account.parent.parentid = :HPId ';
@@ -60,14 +84,31 @@
         if(i == 2){
             searchStr += '         and AccountId = :HPId ';
         }
-        // searchStr += '         and Account.parent.parentid = :HPId ';
+        //searchStr += '         and Account.parent.parentid = :HPId ';
         // SWAG-BB44G7  妫�绱㈡墍鍦ㄥ尰闄㈢殑瀹㈡埛浜哄憳 end
-        if (searchCon.Search_LastName__c != null && searchCon.Search_LastName__c != '') {
-            searchStr += '     and LastName like \'%' + searchCon.Search_LastName__c + '%\'';
+
+        //2022/02/15 寮犲崕寤� 妫�绱� start
+        // if (searchCon.Search_LastName__c != null && searchCon.Search_LastName__c != '') {
+        //     searchStr += '     and LastName like \'%' + searchCon.Search_LastName__c + '%\'';
+        // }
+        // if (searchCon.Search_FirstName__c != null && searchCon.Search_FirstName__c != '') {
+        //     searchStr += '     and FirstName like \'%' + searchCon.Search_FirstName__c + '%\'';
+        // }
+        System.debug('awsDataIdArray = ' + awsDataIdArray);
+        if (awsDataIdArray != null && awsDataIdArray != '') {
+            String[] arr = awsDataIdArray.split(',');
+            System.debug('arr = ' + arr);
+            String awsDataIdSql = '';
+            for(String s : arr){
+                System.debug('s = ' + s);
+                awsDataIdSql = awsDataIdSql + ',' + '\'' + s+'\'';
+            }
+            awsDataIdSql = awsDataIdSql.substring(1);
+            System.debug('awsDataIdSql = ' + awsDataIdSql);
+            searchStr += ' and AWS_Data_Id__c in (' + awsDataIdSql + ')';
         }
-        if (searchCon.Search_FirstName__c != null && searchCon.Search_FirstName__c != '') {
-            searchStr += '     and FirstName like \'%' + searchCon.Search_FirstName__c + '%\'';
-        }
+        
+        //2022/02/15 寮犲崕寤� 妫�绱� end
         system.debug('=====searchStr:' + searchStr);
 
         List<Contact> searchResult = Database.query(searchStr);
@@ -87,8 +128,8 @@
 
     public PageReference editContact() {
         if (conId != null && conId != '') {
-            newCon = [select Id, Name, Department__c, Type__c, Search_LastName__c, Search_FirstName__c, Phone, Supplement__c,
-                      FirstName, LastName
+            newCon = [select Id, Name, Department__c, Type__c, Search_LastName__c, Search_FirstName__c, Phone, Supplement__c,LastName_Encrypted__c,Phone_Encrypted__c,
+                      FirstName, LastName,AWS_Data_Id__c
                       from Contact where Id = :conId];
             newCon.Search_LastName__c = newCon.LastName;
             newCon.Search_FirstName__c = newCon.FirstName;
@@ -120,6 +161,11 @@
         return null;
     }
 
+    public PageReference clearLineInfoList()  {
+        lineInfoList = new List<LineInfo>();
+        return null;
+    }
+
     class LineInfo {
         public Integer lineNo { get; set; }
         public Contact con { get; set; }
diff --git a/force-app/main/default/classes/CM_SearchContactServiceController.cls b/force-app/main/default/classes/CM_SearchContactServiceController.cls
index a2ccebe..cd53c9a 100644
--- a/force-app/main/default/classes/CM_SearchContactServiceController.cls
+++ b/force-app/main/default/classes/CM_SearchContactServiceController.cls
@@ -8,10 +8,35 @@
     private String accountId;
     private String nowValue;
 
+    public String staticResource {get; set;}
+    public String contactAWSIds {set;get;}
+    public String contactsInfo {set;get;}
+    public String awsDataIdArray {set;get;}
+
     public CM_SearchContactServiceController() {
         openLine = Apexpages.currentPage().getParameters().get('line');
         accountId = Apexpages.currentPage().getParameters().get('acc');
         nowValue = Apexpages.currentPage().getParameters().get('now');
+
+        //2022/02/15 寮犲崕寤� PI PL start
+        //1. Query Contact by accountId
+        List<Contact> conList = new List<Contact>();
+        system.debug('Account Id from Front-end:'+accountId);
+        if(String.isNotBlank(accountId) && String.isNotEmpty(accountId)){
+            conList = new List<Contact>([select Id,AWS_Data_Id__c from Contact where AccountId=:accountId and AWS_Data_Id__c!='']);
+        }        
+        //2. Prepare the Contact Info
+        Map<String,Contact> awsIdToContactMap = new Map<String,Contact>();
+        List<String> conAWSIds = new List<String>();
+        for(Contact con:conList){
+            conAWSIds.add(con.AWS_Data_Id__c);
+            awsIdToContactMap.put(con.AWS_Data_Id__c,con);
+        }
+        //conAWSIds.add('943114607025717249');
+        contactsInfo = JSON.serialize(awsIdToContactMap);
+        contactAWSIds = JSON.serialize(conAWSIds);
+        staticResource = JSON.serialize(PIHelper.getPIIntegrationInfo('Contact')); 
+        //2022/02/15 寮犲崕寤� PI PL end
     }
 
     public void init() {
@@ -34,17 +59,35 @@
 
 
     public PageReference searchContact() {
-        String searchStr = 'select Id, Name, Department__c, Type__c, AccountName__c, Supplement__c, Phone ';
+        String searchStr = 'select Id, Name, Department__c, Type__c, AccountName__c, Supplement__c, Phone,AWS_Data_Id__c ';
          searchStr += ', City__c , State__c '; //2018/11/19 HWAG-B399RW 璇诲彇鐪佸拰甯�
         searchStr += '        from Contact ';
-        searchStr += '       where Isactive__c = \'鏈夋晥\' ';
+        searchStr += '       where Isactive__c = \'鏈夋晥\' and AWS_Data_Id__c!=\'\' ';
         searchStr += '         and AccountId = :accountId ';
-        if (searchCon.Search_LastName__c != null && searchCon.Search_LastName__c != '') {
-            searchStr += '     and LastName like \'%' + searchCon.Search_LastName__c + '%\'';
+
+        //2022/02/15 寮犲崕寤� 妫�绱� start
+        // if (searchCon.Search_LastName__c != null && searchCon.Search_LastName__c != '') {
+        //     searchStr += '     and LastName like \'%' + searchCon.Search_LastName__c + '%\'';
+        // }
+        // if (searchCon.Search_FirstName__c != null && searchCon.Search_FirstName__c != '') {
+        //     searchStr += '     and FirstName like \'%' + searchCon.Search_FirstName__c + '%\'';
+        // }
+
+        System.debug('awsDataIdArray = ' + awsDataIdArray);
+        if (awsDataIdArray != null && awsDataIdArray != '') {
+            String[] arr = awsDataIdArray.split(',');
+            System.debug('arr = ' + arr);
+            String awsDataIdSql = '';
+            for(String s : arr){
+                System.debug('s = ' + s);
+                awsDataIdSql = awsDataIdSql + ',' + '\'' + s+'\'';
+            }
+            awsDataIdSql = awsDataIdSql.substring(1);
+            System.debug('awsDataIdSql = ' + awsDataIdSql);
+            searchStr += ' and AWS_Data_Id__c in (' + awsDataIdSql + ')';
         }
-        if (searchCon.Search_FirstName__c != null && searchCon.Search_FirstName__c != '') {
-            searchStr += '     and FirstName like \'%' + searchCon.Search_FirstName__c + '%\'';
-        }
+        //2022/02/15 寮犲崕寤� 妫�绱� end
+
         system.debug('=====searchStr:' + searchStr);
 
         List<Contact> searchResult = Database.query(searchStr);
@@ -64,8 +107,8 @@
 
     public PageReference editContact() {
         if (conId != null && conId != '') {
-            newCon = [select Id, Name, Department__c, Type__c, Search_LastName__c, Search_FirstName__c, Phone, Supplement__c,
-                             FirstName, LastName
+            newCon = [select Id, Name, Department__c, Type__c, Search_LastName__c, Search_FirstName__c, Phone, Supplement__c,LastName_Encrypted__c,Phone_Encrypted__c,
+                      FirstName, LastName,AWS_Data_Id__c
                         from Contact where Id = :conId];
             newCon.Search_LastName__c = newCon.LastName;
             newCon.Search_FirstName__c = newCon.FirstName;
@@ -97,6 +140,11 @@
         return null;
     }
 
+    public PageReference clearLineInfoList()  {
+        lineInfoList = new List<LineInfo>();
+        return null;
+    }
+
     class LineInfo {
         public Integer lineNo { get; set; }
         public Contact con { get; set; }
diff --git a/force-app/main/default/classes/CampaignMemberController.cls b/force-app/main/default/classes/CampaignMemberController.cls
index 2acd663..f872b60 100644
--- a/force-app/main/default/classes/CampaignMemberController.cls
+++ b/force-app/main/default/classes/CampaignMemberController.cls
@@ -10,9 +10,12 @@
     public String saveflg { get; set; }
 
     public String errorStr { get; set; }
+    // 20220216 PI鏀归�� by 寰愪寒
+    public String staticResource {get; set;}
 
     public CampaignMemberController() {
         campaignId = ApexPages.currentPage().getParameters().get('id');
+        staticResource = JSON.serialize(PIHelper.getPIIntegrationInfo('Contact')); // 20220216 PI鏀归�� by 寰愪寒
     }
 
     public Integer getLineInfoListSize() {
@@ -35,9 +38,10 @@
 
         localuser = [select id, State_Hospital__c from User where id = :UserInfo.getUserId()];
 
+        // 20220216 PI鏀归�� by 寰愪寒
         List<CampaignMember__c> cmList = [
                                              select id, Name, Campaign__c, Department__c, Department_ID__c, Opportunity__c, Opportunity_ID__c,
-                                             Contact__c, Contact_ID__c, Type__c, Contact_ID__r.Strategic_dept_Class__r.Name
+                                             Contact__c, Contact_ID__c, Type__c, Contact_ID__r.Strategic_dept_Class__r.Name, Contact_ID__r.AWS_Data_Id__c
                                              from CampaignMember__c
                                              where Campaign__c = :campaignId];
 
diff --git a/force-app/main/default/classes/CampaignMemberServiceController.cls b/force-app/main/default/classes/CampaignMemberServiceController.cls
index 97bd55b..5b9b5b4 100644
--- a/force-app/main/default/classes/CampaignMemberServiceController.cls
+++ b/force-app/main/default/classes/CampaignMemberServiceController.cls
@@ -10,9 +10,12 @@
     public String saveflg { get; set; }
 
     public String errorStr { get; set; }
+    // 20220216 PI鏀归�� by 寰愪寒
+    public String staticResource {get; set;}
 
     public CampaignMemberServiceController() {
         campaignId = ApexPages.currentPage().getParameters().get('id');
+        staticResource = JSON.serialize(PIHelper.getPIIntegrationInfo('Contact')); // 20220216 PI鏀归�� by 寰愪寒
     }
 
     public Integer getLineInfoListSize() {
@@ -35,9 +38,10 @@
 
         localuser = [select id, State_Hospital__c from User where id = :UserInfo.getUserId()];
 
+        // 20220216 PI鏀归�� by 寰愪寒
         List<CampaignMember__c> cmList = [
                                              select id, Name, Campaign__c, Department__c, Department_ID__c, Opportunity__c, Opportunity_ID__c,
-                                             Contact__c, Contact_ID__c, Type__c, Contact_ID__r.Strategic_dept_Class__r.Name
+                                             Contact__c, Contact_ID__c, Type__c, Contact_ID__r.Strategic_dept_Class__r.Name, Contact_ID__r.AWS_Data_Id__c
                                              , State__c, City__c // 2018/11/19 HWAG-B399RW 鑾峰彇鍙備細浜哄憳鎵�鍦ㄧ渷鍜屽競
                                              from CampaignMember__c
                                              where Campaign__c = :campaignId];
diff --git a/force-app/main/default/classes/ConsumFixtureSetSelectController.cls b/force-app/main/default/classes/ConsumFixtureSetSelectController.cls
index fc88a51..c67a0b0 100644
--- a/force-app/main/default/classes/ConsumFixtureSetSelectController.cls
+++ b/force-app/main/default/classes/ConsumFixtureSetSelectController.cls
@@ -166,7 +166,7 @@
             saveType = false;
         }
         system.debug('==zheli1=='+this.parentId);
-        
+
         caes = new Consum_Apply_Equipment_Set__c();
         caes.Consum_Start_Date__c = Date.today();
         //澶囧搧閰嶅涓嬬殑鎵�鏈夋槑缁�
@@ -190,7 +190,7 @@
                 parentObj = parentObjs.get(0);
             }
             //Integer aaa=Integer.valueof(parentObjs);
-            
+
         }
 
         if (parentObj == null) {
diff --git a/force-app/main/default/classes/ConsumReassignController.cls b/force-app/main/default/classes/ConsumReassignController.cls
index f87eab7..d7cb5a3 100644
--- a/force-app/main/default/classes/ConsumReassignController.cls
+++ b/force-app/main/default/classes/ConsumReassignController.cls
@@ -1,4 +1,5 @@
 public with sharing class ConsumReassignController {
+    public string staticResource { get; private set; }
     // 鏄庣粏琛岄」鐩�
     public List<LineInfo> lineInfoList { get; set; }
     //澶囧搧鐢宠涔D
@@ -12,6 +13,7 @@
     public ConsumReassignController() {
         //Apexpages.currentPage().getHeaders().put('X-UA-Compatible', 'IE=8');
         caId = ApexPages.currentPage().getParameters().get('caid');
+        staticResource = JSON.serialize(PIHelper.getPIIntegrationInfo('Consum_Apply_Equipment_Set_Detail__c'));
     }
 
     // 鐢婚潰鍒濆鍖�
@@ -24,6 +26,7 @@
             // 鑰楁潗鍊熷嚭鐢宠
             caesdList = [
                 SELECT Id
+                     , AWS_Data_Id__c
                      , Fixture_Model_No_F__c
                      , Asset__c
                      , Consum_Start_Date__c
diff --git a/force-app/main/default/classes/ConsumTrialController.cls b/force-app/main/default/classes/ConsumTrialController.cls
index 78558d6..04fa687 100644
--- a/force-app/main/default/classes/ConsumTrialController.cls
+++ b/force-app/main/default/classes/ConsumTrialController.cls
@@ -15,6 +15,8 @@
     public Boolean showEditButton{get;set;}
     private String case_OR_animal_organLabel{get;set;}
     private String saveType{get;set;}
+    public String staticResource {get; set;}
+    public String rowListString{set;get;}
 
     public ConsumTrialController(ApexPages.StandardController stdController) {
         parId = System.currentPageReference().getParameters().get('Id');
@@ -25,6 +27,8 @@
         if (String.isBlank(parId)) {
             parId = stdController.getId();
         }
+        PIHelper.PIIntegration piIntegration = PIHelper.getPIIntegrationInfo('Consum_Apply_Equipment_Set_Detail__c');
+        staticResource = JSON.serialize(piIntegration);
     }
 
     public void init() {
@@ -36,6 +40,7 @@
                         // , DateOfDelivery__c
                         // , ReceivingNoteNo__c
                         , Status__c
+                        ,AWS_Data_Id__c
                         // , Asset_loaner_category__c
                         , RA_Status__c
                         , demo_purpose2__c
@@ -63,6 +68,7 @@
             assetFieldApiList.addAll(assetFieldApiSet);
             receivingNoteFieldApiList.addAll(receivingNoteFieldApiSet);
             pageB = new PageBean(rnList[0], assetFieldApiList, receivingNoteFieldApiList);
+            rowListString = JSON.serialize(pageB.rowBList);
             showEditButton = (rnList[0].Status__c != '鐢宠涓�' && rnList[0].Status__c != '鍙栨秷');
         }
         catch (Exception e) {
@@ -408,6 +414,7 @@
                     + String.join(assetFieldApiList, ',')
                     + (assetFieldApiList.size() > 0 ? ',' : '')
                     + String.join(receivingNoteFieldApiList, ',')
+                    + ',AWS_Data_Id__c'
                  + ' FROM Consum_Apply_Equipment_Set_Detail__c '
                 + ' WHERE Consum_Apply_Equipment_Set__r.Consum_Apply__c = \'' + rn.Id + '\'' + wher
                   + ' AND (Cancel_Select__c = false OR NG_Select_Again__c = true)'
@@ -477,7 +484,7 @@
             // dataConfirmation = rnd1.DataConfirmation__c;
             lineNo = lineNo1 + 1;
             canChangeField = 'Show_demonstration__c, Operation_Type__c, Consum_Start_Date__c';
-            canChangeField += ', Case_OR_animal_organ__c, Trial_User__c, Follower_User__c, Spare__c, Comment__c, Degree_Of_Importance__c';
+            canChangeField += ',AWS_Data_Id__c, Case_OR_animal_organ__c, Trial_User__c, Follower_User__c, Spare__c, Comment__c, Degree_Of_Importance__c';
 
             haveAsset = String.isNotBlank(rnd1.Asset__c);
         }
diff --git a/force-app/main/default/classes/ConsumTrialPDFController.cls b/force-app/main/default/classes/ConsumTrialPDFController.cls
index 906ec62..265e304 100644
--- a/force-app/main/default/classes/ConsumTrialPDFController.cls
+++ b/force-app/main/default/classes/ConsumTrialPDFController.cls
@@ -21,12 +21,17 @@
     public Integer consumApplySetDetailListSize { get; set; }  // 鑰楁潗澶囧搧鎬绘暟閲�
     public String errorMsg { get; set; }  // 閿欒淇℃伅
 
+    public string staticResource { get; private set; }
+    public string BRSrc{get;private set;}
+    public string QRSrc{get;private set;}
+
     public ConsumTrialPDFController() {
         targetConsumApplyId = ApexPages.currentPage().getParameters().get('id');
         if (String.isBlank(targetConsumApplyId)) {
             throw new ControllerUtil.myException('鍙傛暟閿欒锛氳鎸囧畾Id銆�');
         }
         pdfPageList = new List<PdfPageClass>();
+        staticResource = JSON.serialize(PIHelper.getPIIntegrationInfo('Consum_Apply_Equipment_Set_Detail__c'));
     }
 
     /**
@@ -40,6 +45,10 @@
             ApexPages.addMessage(new ApexPages.Message(ApexPages.severity.ERROR, errorMsg));
             return;
         }
+
+        BRSrc = GetImageBase64(targetConsumApply.BRId__c);
+        QRSrc = GetImageBase64(targetConsumApply.QRId__c);
+        
 
         // 鑾峰彇鑰楁潗澶囧搧閰嶅涓�瑙堟槑缁�
         List<Consum_Apply_Equipment_Set_Detail__c> targetConsumSetDetailList = getTargetConsumSetDetailList();
@@ -139,6 +148,7 @@
                      , Follower_User__r.Name
                      , Spare__c  // 澶囩敤
                      , Comment__c  // 澶囨敞
+                     , AWS_Data_Id__c
                      , ManagementCode__c  // 绠$悊缂栫爜 yc 鑰楁潗杩芥函
                      , EquipmentManagementCode__c  // 澶囧搧绠$悊鐮� yc 鑰楁潗杩芥函
                   FROM Consum_Apply_Equipment_Set_Detail__c
@@ -207,4 +217,12 @@
             equipSetDetailList = new List<Consum_Apply_Equipment_Set_Detail__c>();
         }
     }
+
+    public static string GetImageBase64(string id){
+        List<Attachment> atts = [SELECT Id, IsDeleted, ParentId, Name, IsPrivate, ContentType, BodyLength, Body, OwnerId, CreatedDate, CreatedById, LastModifiedDate, LastModifiedById, SystemModstamp, Description FROM Attachment where id=:id];
+        if (atts.size()==0) {
+            return null;
+        }
+        return 'data:image/png;base64,' + EncodingUtil.base64Encode(atts[0].body);
+    }
 }
\ No newline at end of file
diff --git a/force-app/main/default/classes/FixtureRentalPDFController.cls b/force-app/main/default/classes/FixtureRentalPDFController.cls
index eeeb5c1..6c09c3b 100644
--- a/force-app/main/default/classes/FixtureRentalPDFController.cls
+++ b/force-app/main/default/classes/FixtureRentalPDFController.cls
@@ -30,12 +30,18 @@
     public String centreAddress { get; set; }
     public Boolean IsShowLU { get; set; } //鏄惁鏄剧ず绛炬敹鍗曞乏涓婅鏂囧瓧 true鏄剧ず 20201119 LJH OCSM_BP5-61 add
     public Boolean IsMain; //鏄惁鏄幇鍦板垎閰嶇殑涓诲崟 20201120 LJH OCSM_BP5-61 add
+    
+    public string staticResource { get; private set; }
+    public Boolean addFlag { get; private set; }//鏁忔劅鍦板潃浣跨敤鏍囪
+    public String qrcode { get; private set; }
     public FixtureRentalPDFController() {
         pageNum = Integer.valueOf(ApexPages.currentPage().getParameters().get('page'));
         rentalApplyIdIMG = ApexPages.currentPage().getParameters().get('raid');
         //Apexpages.currentPage().getHeaders().put('X-UA-Compatible', 'IE=8');
         // rentalApplyId = ApexPages.currentPage().getParameters().get('raid');//20201120 ljh 
         String tempStr = ApexPages.currentPage().getParameters().get('raid');
+        staticResource = JSON.serialize(PIHelper.getPIIntegrationInfo('Rental_Apply__c'));
+        addFlag = false;
         rentalApplyId = new List<String>();
         if(tempStr != null){
            rentalApplyId.add(tempStr); 
@@ -96,13 +102,17 @@
                                 Root_Rental_Apply__c,//20210617 ljh 1732 add
                                 BRId__c, // 20211209 ljh SFDC-C923SR add 
                                 QRImg__c,
-                                QRId__c
+                                QRId__c,
+                                AWS_Data_Id__c,//20220304 
+                                Direct_Shippment_Address_Encrypt__c,//20220304
+                                Phone_Number_Encrypt__c//20220304
                         from  Rental_Apply__c
                         where id = :rentalApplyId];
         }
 
         if(ApplyList.size()>0){
             ApplyHeadShow = ApplyList[0];
+            qrcode = ConsumTrialPDFController.GetImageBase64(ApplyHeadShow.QRId__c);
         }
         //澧炲姞鍊熷嚭澶囧搧SET涓�瑙圠ist锛屼负浜嗚幏鍙栧�熷嚭澶囧搧SET涓�瑙堟槑缁�
         List<String> RAESSearchList = New List<String>();
@@ -191,6 +201,7 @@
             ShippMentAdr = ApplyHeadShow.Shippment_adress_detail__c;
         } else {
             ShippMentAdr = ApplyHeadShow.Direct_shippment_address__c;
+            addFlag = true;
         }
 
         Integer ShipAdrSize = ShippMentAdr == null ? 0 : ShippMentAdr.length();
@@ -313,7 +324,6 @@
                         Rental_Apply_Equipment_Set__r.Name,
                         Rental_Apply_Equipment_Set__r.Fixture_Set__r.Name,
                         Rental_Apply_Equipment_Set__r.Loaner_code__c,
-                        // Rental_Apply_Equipment_Set__r.Received_ng_detail__c,// 20220124 ljh SFDC-C4U3PH add start
                         FSD_Name_CHN__c,
                         Fixture_Name_text__c,
                         Fixture_Model_No_F__c,
@@ -607,8 +617,6 @@
         public String dQRCode { get; private set; }  //  浜岀淮鐮�
         private Integer maxLineContact;
         public String wh_location { get; private set; }  //  璐т綅鍙�
-        // 20220124 ljh SFDC-C4U3PH add start
-        // public String Received_ng_detail { get; private set; }  //  鏀跺埌纭NG鍐呭
 
 
         public String name1 { get; private set; }
@@ -672,7 +680,6 @@
            //serialNumber2 = esd2.SerialNumber__c;
            height = height ==null ? MAXLINEHRIGHT: height;
            wh_location = raesd.Asset__r.WH_location__c;
-           // Received_ng_detail = raesd.Rental_Apply_Equipment_Set__r.Received_ng_detail__c; // 20220124 ljh SFDC-C4U3PH add start
         }
     }
     // Data Bean
diff --git a/force-app/main/default/classes/InsReportPDFController.cls b/force-app/main/default/classes/InsReportPDFController.cls
index 4d735eb..98f790c 100644
--- a/force-app/main/default/classes/InsReportPDFController.cls
+++ b/force-app/main/default/classes/InsReportPDFController.cls
@@ -11,6 +11,10 @@
     public String endfen {get;set;}
     //add by rentx 20210707 end
     
+    // 20220222 PI鏀归�� by Bright---start
+    public string staticResource { get; private set; }
+    // 20220222 PI鏀归�� by Bright---end
+
     public Integer getItemCount() {
         return itemList.size();
     }
@@ -27,6 +31,12 @@
     
     private static Integer commentMax = 15;
     
+    public InsReportPDFController(){
+        // 20220222 PI鏀归�� by Bright---start
+        staticResource = JSON.serialize(PIHelper.getPIIntegrationInfo('Inspection_Report__c'));
+        // 20220222 PI鏀归�� by Bright---end
+    }
+
     public void init() {
         //add by rentx 20210707 start
         startfen = '';
diff --git a/force-app/main/default/classes/InstructReportController.cls b/force-app/main/default/classes/InstructReportController.cls
index c4a3b44..a3d65cd 100644
--- a/force-app/main/default/classes/InstructReportController.cls
+++ b/force-app/main/default/classes/InstructReportController.cls
@@ -6,9 +6,14 @@
     public list<InstructedstaffInfo> checkedISList { get; private set; }
     public list<InstructedstaffInfo> uncheckedISList { get; private set; }
     public boolean ReadOnly { get; private set; }
+
+    // 20220222 PI鏀归�� by Bright--start
+    public string staticResource { get; private set; }
+    // 20220222 PI鏀归�� by Bright--end
+
     public InstructReportController() {
         this.ReadOnly = true;
-
+        staticResource = JSON.serialize(PIHelper.getPIIntegrationInfo('Contact'));// 20220222 PI鏀归�� by Bright
     }
     public InstructReportController(ApexPages.StandardController controller) {
         this();
@@ -102,6 +107,7 @@
                                              Is_Active_Formula__c
                                              //澧炲姞妫�绱� 鏈夋晥/鏃犳晥 绮剧悽鎶�鏈� wql 2021/02/04 end
                                              ,Contact_ID__c, Contact_ID__r.Name,
+                                             Contact_ID__r.AWS_Data_Id__c,// 20220222 PI鏀归�� by Bright
                                              // LJPH-BVNBMM start
                                              Contact_ID__r.AccountId,
                                              Department_Service__c,
@@ -123,6 +129,7 @@
              ,Is_Active_Formula__c
              //澧炲姞妫�绱� 鏈夋晥/鏃犳晥 绮剧悽鎶�鏈� wql 2021/02/04 end
              , ContactID__C
+             ,ContactID__r.AWS_Data_Id__c// 20220222 PI鏀归�� by Bright
              //甯︽暀鎶ュ憡 鏂板鏌ヨ瀛楁锛氬甫鏁欏湴鐐广�佸甫鏁欏湴鐐癸紙鍏朵粬锛夈�佽澶囩被鍒�佸叿浣撳瀷鍙枫�佸娉� 绮剧悽鎶�鏈� wql 2020/04/14 start
              , Instruct_place_other__c, Specific_model__c,
              Instruct_remarks__c, Equipment_category__c, Instruct_place__c, Instruct_content__c
@@ -169,12 +176,14 @@
         for (InstructedstaffInfo uncheckedIS : uncheckedISList) {
 
             if (uncheckedIS.rec_checkBox) {
+                System.debug('uncheckedIS.CamMem.Contact_ID__r='+uncheckedIS.CamMem.Contact_ID__r.AWS_Data_Id__c);
                 uncheckedIS.IS = new Instructed_staff__c(Name = uncheckedIS.CamMem.Contact_ID__r.Name,
                         // LJPH-BVNBMM 鏀逛负鍚屾褰撳墠鑱旂郴浜烘墍鍦ㄧ殑绉戝 start
                         Department__c = uncheckedIS.CamMem.Contact_ID__r.AccountId,
                         // LJPH-BVNBMM 鏀逛负鍚屾褰撳墠鑱旂郴浜烘墍鍦ㄧ殑绉戝 start
                         CampaignMember__c = uncheckedIS.CamMem.id,
-                        ContactID__c = uncheckedIS.CamMem.Contact_ID__c
+                        ContactID__c = uncheckedIS.CamMem.Contact_ID__c,
+                        ContactID__r = uncheckedIS.CamMem.Contact_ID__r // 20220222 PI鏀归�� by Bright
                          );
                 uncheckedIS.lineNo = temuncheckedISList.size();
                 temcheckedISList.add(uncheckedIS);
diff --git a/force-app/main/default/classes/LayoutDescriberHelper.cls b/force-app/main/default/classes/LayoutDescriberHelper.cls
index 8231dd8..94863c0 100644
--- a/force-app/main/default/classes/LayoutDescriberHelper.cls
+++ b/force-app/main/default/classes/LayoutDescriberHelper.cls
@@ -10,11 +10,29 @@
 
 public class LayoutDescriberHelper {
     public static String urlPrefixToUse {get;set;}
-    public static Set<String> ConcatenationNameSType = new Set<String>{'Lead','Contact'};  
+    public static List<String> requiredFieldAPIList{set;get;}
+    public static Map<String,String> fieldAPIToLabelMap{set;get;}
+    public static Set<String> CaseWebFields = new Set<String>{'SuppliedCompany','SuppliedName','SuppliedEmail','SuppliedPhone'};
+    public static Set<String> ConcatenationNameSType = new Set<String>{'Lead','Contact'};
+    public static LayoutWrapper describeSectionWithFieldsWrapper(Id recordTypeId, String objectType,String userMode){
+        if(String.isEmpty(recordTypeId)){
+            //Assign default record type for sobject
+            recordTypeId = getDefaultRecordType(objectType);
+        }
+        List<LayoutSection> layoutSections = describeSectionWithFields(recordTypeId,objectType,userMode);
+        LayoutWrapper layoutWrapperValue = new LayoutWrapper();
+        layoutWrapperValue.layoutSections = layoutSections;
+        layoutWrapperValue.requiredFieldAPIList = requiredFieldAPIList;
+        layoutWrapperValue.fieldAPIToLabelMap = fieldAPIToLabelMap;
+        system.debug('required API List:'+JSON.serialize(requiredFieldAPIList));
+        return layoutWrapperValue;
+    }
     public static List<LayoutSection> describeSectionWithFields(Id recordTypeId, String objectType,String userMode){
         system.debug('record type id ===>'+ recordTypeId+' object type===>'+objectType + ' userMode===>'+userMode);
         List<LayoutSection> layoutSections;
         Map<String,List<LayoutField>> layoutFields;
+        requiredFieldAPIList = new List<String>();
+        fieldAPIToLabelMap = new Map<String,String>();
         layoutSections = new List<LayoutSection>();
         String theRespBody = getLayoutSchema(recordTypeId, objectType,userMode);      
         Map<String, Object> layoutSection = (Map<String, Object>) JSON.deserializeUntyped(theRespBody);
@@ -87,18 +105,28 @@
                                     lf.isPlaceHolder = placeholderF;
                                     lf.editableField = isEditable;
                                     lf.fieldAPI = fieldLabelPrefix+addressType;
+                                    
                                     lf.fieldLabel = fieldLabelPrefix+' '+addressType;
-                                    lf.fieldType = 'string';
+                                    lf.fieldType = 'string';                                 
                                     if(ls.Name != '' || layoutSections.size() == 1){
                                         ls.layoutFields.add(lf);
                                     }else if(layoutSections.size() - 2 >= 0){
                                         layoutSections.get(layoutSections.size() - 2).layoutFields.add(lf); 
-                                    }                                                                  
+                                    }
+                                    if(lf.isRequired){
+                                        requiredFieldAPIList.add(lf.fieldAPI);
+                                    }
+                                    if(string.isBlank(lf.fieldAPI)){
+                                        system.debug('==================================2');
+                                        continue;
+                                    }else{
+                                        fieldAPIToLabelMap.put(lf.fieldAPI,lf.fieldLabel);
+                                    }
                                 }
                                 continue;
                             }
                             if(userMode == 'classic' && apiName == 'Name' && ConcatenationNameSType.contains(objectType)){
-                                List<String> nameDetail = new List<String>{'LastName'};
+                                List<String> nameDetail = new List<String>{'Salutation','LastName'};
                                 for(String nameField:nameDetail){
                                     LayoutField lf = new LayoutField();
                                     lf.isRequired = (Boolean)fields.get('required');
@@ -111,8 +139,20 @@
                                         ls.layoutFields.add(lf);
                                     }else if(layoutSections.size() - 2 >= 0){
                                         layoutSections.get(layoutSections.size() - 2).layoutFields.add(lf); 
-                                    }                                                                  
+                                    }
+                                    if(lf.isRequired){
+                                        requiredFieldAPIList.add(lf.fieldAPI);
+                                    }                                      
+                                    if(string.isBlank(lf.fieldAPI)){
+                                        system.debug('==================================3');
+                                        continue;
+                                    }else{
+                                        fieldAPIToLabelMap.put(lf.fieldAPI,lf.fieldLabel);
+                                    }
                                 }
+                                continue;
+                            }
+                            if(objectType == 'Case' && CaseWebFields.contains(apiName)){
                                 continue;
                             }
                             LayoutField lf = new LayoutField();
@@ -126,7 +166,17 @@
                                 ls.layoutFields.add(lf);
                             }else if(layoutSections.size() - 2 >= 0){
                                 layoutSections.get(layoutSections.size() - 2).layoutFields.add(lf);
-                            }                               
+                            }
+                            if(lf.isRequired){
+                                requiredFieldAPIList.add(lf.fieldAPI);
+                            }
+                            if(string.isBlank(lf.fieldAPI)){
+                                system.debug('==================================1');
+                                continue;
+                            }else{
+                                fieldAPIToLabelMap.put(lf.fieldAPI,lf.fieldLabel);
+                            }
+                            
                             priorFieldLayoutAdded = true;
 						}else
                             priorFieldLayoutAdded = false;
@@ -138,6 +188,7 @@
             }
         }
         System.debug('Layout Section Result:'+JSon.serialize(layoutSections));
+        system.debug('required API List:'+JSON.serialize(requiredFieldAPIList));
         return layoutSections;
     }
     public static String getUrlPrefix(){
@@ -159,6 +210,7 @@
         req.setMethod('GET');        
         if(userMode =='lightning'){
             req.setEndPoint('callout:SF_Rest_API'+urlPost);
+            system.debug('callout:SF_Rest_API'+urlPost);
         }else if(userMode == 'classic'){
             req.setEndpoint(urlForClassic); 
             req.setHeader('Authorization', 'Bearer ' + UserInfo.getsessionid());
@@ -169,8 +221,10 @@
         return resp.getBody();
     }
 
-    public static Id  getDefaultRecordType(SObject obj) {
-        Schema.DescribeSObjectResult describeResult = obj.getsObjectType().getDescribe();
+    public static Id  getDefaultRecordType(String ObjectName) {
+        Map<String, Schema.SObjectType> GlobalDescribeMap = Schema.getGlobalDescribe();
+        Schema.SObjectType obj = GlobalDescribeMap.get(ObjectName);
+        Schema.DescribeSObjectResult describeResult = obj.getDescribe();
         List<Schema.RecordTypeInfo> rtInfos = describeResult.getRecordTypeInfos();
         for(Schema.RecordTypeInfo rtInfo : rtInfos) {
             if(rtInfo.DefaultRecordTypeMapping) {              
@@ -179,7 +233,11 @@
         }
         return null;
     }
-    
+    public class LayoutWrapper{
+        @AuraEnabled public List<LayoutSection> layoutSections{set;get;}
+        @AuraEnabled public List<String> requiredFieldAPIList{set;get;}
+        @AuraEnabled public Map<String,String> fieldAPIToLabelMap{set;get;}
+    }
     public class LayoutSection{
         @AuraEnabled public boolean useHeader {get;set;}
         @AuraEnabled public String name {get;set;}
diff --git a/force-app/main/default/classes/LeadIntentionController.cls b/force-app/main/default/classes/LeadIntentionController.cls
index 55974e5..ec71404 100644
--- a/force-app/main/default/classes/LeadIntentionController.cls
+++ b/force-app/main/default/classes/LeadIntentionController.cls
@@ -1,4 +1,4 @@
-public with sharing class LeadIntentionController {
+public without sharing class LeadIntentionController {
 	    public List<PCLInfo> pclInfos { get; set; }
     
     /*****************妞滅储鐢�******************/
@@ -72,6 +72,8 @@
     private String soqlForMoneyWithoutSort = null;
 
     private static Integer searchLimit = 1000;
+    public String staticResource {get; set;}
+    public String awsDataIds {get; set;}
     public LeadIntentionController() {
 
         pclInfos = new List<PCLInfo>();
@@ -134,6 +136,7 @@
 
         isActiveFormula = '鏈夋晥';
 
+        staticResource = JSON.serialize(PIHelper.getPIIntegrationInfo('Inquiry_form__c')); 
     }
 
     public PageReference init() {
@@ -178,7 +181,12 @@
         System.debug('鏈�鍚庡彇寰�:'+pclInfos.size());
         pclCount = pclInfos.size();
         ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO, '鍙栧緱鏈�杩戠殑 ' + pclCount + ' 鏉℃暟鎹�'));
-        
+
+        List<String> a = new List<String>();
+        for(Inquiry_form__c ifc : queryList){
+            a.add(ifc.AWS_Data_Id__c);
+        }
+        awsDataIds = JSON.serialize(a);
         return null;
     }
 
@@ -355,7 +363,7 @@
                 + ' Opp_Name_Search__c, Opportunity_Division__c, LeadSource__c, Campaign__c,'
                 + ' Urgent__c, Request_Detail__c ,Contact_Id__c,Hospital_ID__c,Department_ID__c,Opp_Name_Search_ID__c,'
                 + 'Campaign_ID__c,Last_Name__c,Family_Name__c,Name,Reasons_options__c,'
-                + 'Product1__c,Confirmation_Date__c'
+                + 'Product1__c,Confirmation_Date__c,AWS_Data_Id__c'
                 //,Lead_link__c
                 + ' from Inquiry_form__c where Id != null ';
                 //2021-11-24  mzy  鍏遍�氬钩鍙伴」鐩�-棣栭〉淇敼  start
diff --git a/force-app/main/default/classes/LightningUtil.cls b/force-app/main/default/classes/LightningUtil.cls
index 8ee2953..3e4fdf3 100644
--- a/force-app/main/default/classes/LightningUtil.cls
+++ b/force-app/main/default/classes/LightningUtil.cls
@@ -16,6 +16,21 @@
         return [select Id, Agency_Hospital__c, IsOlympusContact__c, Name, Doctor_Division1__c, Type__c, Hospital_DC_Name__c,Department_Cateogy_F__c,Hospital_Name__c from Agency_Contact__c 
                     where (Department_Class__r.Hospital_Department_Class__c in :hospitalSet or (Department_Class__c = null and Agency_Hospital__c in :aHospitalSet)) and Name like :conStr and Hospital_DC_Name__c like :hosStr order by Name];
     }
+
+    // 20220222 PI鏀归�� by Bright--start
+    public static List<Agency_Contact__c> searchOCMAgencyContact(Set<String> hospitalSet, Set<String> aHospitalSet, String hosStr, List<string> awsids) {
+
+        string sql = 'select Id, Agency_Hospital__c, IsOlympusContact__c, Name, Doctor_Division1__c, Type__c, Hospital_DC_Name__c,Department_Cateogy_F__c,Hospital_Name__c,AWS_Data_Id__c from Agency_Contact__c';
+        sql += ' where (Department_Class__r.Hospital_Department_Class__c in :hospitalSet or (Department_Class__c = null and Agency_Hospital__c in :aHospitalSet)) and Hospital_DC_Name__c like :hosStr';
+ 
+        if (awsids!=null && awsids.size()>0) {
+            sql += ' and AWS_Data_Id__c in :awsids ';
+        }
+        sql += ' order by Hospital_DC_Name__c';
+        system.debug('sql='+sql);
+        return Database.query(sql);
+    }
+    // 20220222 PI鏀归�� by Bright--end
     public static List<Contact> selectContact(String cId) {
         return [select Id, AccountId, Name from Contact where id=:cId];
     }
@@ -67,6 +82,21 @@
         // return data;
     }
 
+    // PIPL update Yin Mingjie 21/02/2022 start
+    public static Map<String, String> insertAgencyContact(Agency_Contact__c data) {
+        Map<String, String> acmap = new Map<String, String>();
+        acmap.put('AgencyContactId', '');
+        acmap.put('errormsg', '');
+        try {
+            insert data;
+            acmap.put('AgencyContactId', data.Id);
+        } catch (Exception e) {
+            acmap.put('errormsg', e.getMessage());
+        }
+        return acmap;
+    }
+    // PIPL update Yin Mingjie 21/02/2022 end
+
     public static Agency_Report__c insertAgencyReport(Agency_Report__c data) {
         if (String.isBlank(data.Hospital__c)) {
             List<Agency_Hospital_Link__c> agency_hospital_link = [select Id, Hospital__c from Agency_Hospital_Link__c where Id=:data.Agency_Hospital__c];
@@ -117,6 +147,7 @@
             List<Contact> person_list = selectAgencyPerson();
             return [Select Id, Name, Report_Date__c, Product_Category1__r.Name, Product_Category2__r.Name, Product_Category3__r.Name, Product_Category1__c, Product_Category2__c, Product_Category3__c,ConsumptionOfConsumables__c, WorkMark__c,warlocksNumber__c,Department_Cateogy__c,ProductClassification__c,WarlockClassification__r.WarlockClassification__c,WarlockClassification__c,ProductCcategory__c, ProductCcategory__r.ProductCcategory__c,productCategories__c, productCategories__r.productCategories__c,DealerPersonnel__c,WorkRecord__c, Agency_Report_Header__c, Agency_Hospital__r.Name, Agency_Hospital__r.Hospital__c, OppName__c,
                             Person_In_Charge2__c,DealerPersonnel__r.Name, Person_In_Charge2__r.Name, doctor2__c, doctor2__r.Name, Submit_date__c,
+                            doctor2__r.AWS_Data_Id__c,// 20220222 PI鏀归�� by Bright
                             Product_Category__c, Product_Category__r.Name, Result__c, visitor_title__c, Opportunity__c, Opportunity__r.Name,EffectProgress__r.EffectProgress__c,EffectProgress__c,
                             UseProduct1__c,UseProduct2__c,UseProduct3__c,UseProduct1__r.Name,UseProduct2__r.Name,UseProduct3__r.Name    
                             From Agency_Report__c
@@ -124,6 +155,7 @@
         } else {
             return [Select Id, Name, Report_Date__c, Product_Category1__r.Name, Product_Category2__r.Name, Product_Category3__r.Name, Product_Category1__c, Product_Category2__c, Product_Category3__c,ConsumptionOfConsumables__c, WorkMark__c,warlocksNumber__c,Department_Cateogy__c,DealerPersonnel__c,ProductClassification__c,WarlockClassification__r.WarlockClassification__c,WarlockClassification__c,ProductCcategory__c,ProductCcategory__r.ProductCcategory__c, productCategories__c, productCategories__r.productCategories__c,WorkRecord__c, Agency_Report_Header__c, Agency_Hospital__r.Name, Agency_Hospital__r.Hospital__c, OppName__c,
                             Person_In_Charge2__c,DealerPersonnel__r.Name, Person_In_Charge2__r.Name, doctor2__c, doctor2__r.Name, Submit_date__c,
+                            doctor2__r.AWS_Data_Id__c,// 20220222 PI鏀归�� by Bright
                             Product_Category__c, Product_Category__r.Name, Result__c, visitor_title__c, Opportunity__c, Opportunity__r.Name,EffectProgress__r.EffectProgress__c,EffectProgress__c,
                             UseProduct1__c,UseProduct2__c,UseProduct3__c,UseProduct1__r.Name,UseProduct2__r.Name,UseProduct3__r.Name   
                             From Agency_Report__c
@@ -138,12 +170,14 @@
             return [Select Id, Name, Report_Date__c, Product_Category1__r.Name, Product_Category2__r.Name, Product_Category3__r.Name, Product_Category1__c, Product_Category2__c, Product_Category3__c,ConsumptionOfConsumables__c, WorkMark__c,warlocksNumber__c,Department_Cateogy__c,ProductClassification__c,WarlockClassification__r.WarlockClassification__c,WarlockClassification__c,ProductCcategory__c,ProductCcategory__r.ProductCcategory__c,productCategories__c, productCategories__r.productCategories__c, DealerPersonnel__c,WorkRecord__c, Agency_Report_Header__c, Agency_Hospital__r.Name, Agency_Hospital__r.Hospital__c, OppName__c,
                             Person_In_Charge2__c,DealerPersonnel__r.Name, Person_In_Charge2__r.Name, doctor2__c, doctor2__r.Name, Submit_date__c,
                             Product_Category__c, Product_Category__r.Name, Result__c, visitor_title__c, Opportunity__c, Opportunity__r.Name,EffectProgress__r.EffectProgress__c,EffectProgress__c,
+                            doctor2__r.AWS_Data_Id__c,// 20220222 PI鏀归�� by Bright
                             UseProduct1__c,UseProduct2__c,UseProduct3__c,UseProduct1__r.Name,UseProduct2__r.Name,UseProduct3__r.Name    
                             From Agency_Report__c
                             where Submit_date__c=:week and Person_In_Charge2__c in :person_list and WeeklyReportClassification__c != '' order by LastModifiedDate desc];
         } else {
             return [Select Id, Name, Report_Date__c, Product_Category1__r.Name, Product_Category2__r.Name, Product_Category3__r.Name, Product_Category1__c, Product_Category2__c, Product_Category3__c,ConsumptionOfConsumables__c, WorkMark__c,warlocksNumber__c,Department_Cateogy__c,DealerPersonnel__c,ProductClassification__c,WarlockClassification__r.WarlockClassification__c,WarlockClassification__c,ProductCcategory__c,ProductCcategory__r.ProductCcategory__c,productCategories__c, productCategories__r.productCategories__c, WorkRecord__c, Agency_Report_Header__c, Agency_Hospital__r.Name, Agency_Hospital__r.Hospital__c, OppName__c,
                             Person_In_Charge2__c,DealerPersonnel__r.Name, Person_In_Charge2__r.Name, doctor2__c, doctor2__r.Name, Submit_date__c,
+                            doctor2__r.AWS_Data_Id__c,// 20220222 PI鏀归�� by Bright
                             Product_Category__c, Product_Category__r.Name, Result__c, visitor_title__c, Opportunity__c, Opportunity__r.Name,EffectProgress__r.EffectProgress__c,EffectProgress__c,
                             UseProduct1__c,UseProduct2__c,UseProduct3__c,UseProduct1__r.Name,UseProduct2__r.Name,UseProduct3__r.Name   
                             From Agency_Report__c
@@ -164,6 +198,7 @@
     public static List<Agency_Report__c> selectMAgencyReport01(Date date1, Date date2 ,List<Contact> conMList) {
         List<Agency_Report__c> reportlist = [Select Id, Name, Report_Date__c, Product_Category1__r.Name, Product_Category2__r.Name, Product_Category3__r.Name, Product_Category1__c, Product_Category2__c, Product_Category3__c,ConsumptionOfConsumables__c,warlocksNumber__c,WorkMark__c,Department_Cateogy__c, DealerPersonnel__c,WorkRecord__c, ProductClassification__c,WarlockClassification__r.WarlockClassification__c,WarlockClassification__c,ProductCcategory__c,ProductCcategory__r.ProductCcategory__c,productCategories__c, productCategories__r.productCategories__c,Agency_Report_Header__c, Agency_Hospital__r.Name, Agency_Hospital__r.Hospital__c, OppName__c,
                             Person_In_Charge2__c,DealerPersonnel__r.Name,Person_In_Charge2__r.Name, doctor2__c, doctor2__r.Name, Submit_date__c,
+                            doctor2__r.AWS_Data_Id__c,// 20220222 PI鏀归�� by Bright
                             Product_Category__c, Product_Category__r.Name, Result__c, visitor_title__c, Opportunity__c, Opportunity__r.Name,EffectProgress__r.EffectProgress__c,EffectProgress__c,
                             UseProduct1__c,UseProduct2__c,UseProduct3__c,UseProduct1__r.Name,UseProduct2__r.Name,UseProduct3__r.Name  
                             From Agency_Report__c
@@ -174,6 +209,7 @@
     public static List<Agency_Report__c> selectAgencyReportById(String report_id) {
         return [Select Id, Name, Department_Cateogy__c, ConsumptionOfConsumables__c,warlocksNumber__c,WorkMark__c,WorkRecord__c,EffectProgress__c,ProductClassification__c,ProductCcategory__c,productCategories__c, Agency_Report_Header__c, Agency_Hospital__r.Name, Agency_Hospital__r.Hospital__c, OppName__c,
                             Person_In_Charge2__c,DealerPersonnel__c,DealerPersonnel__r.Name, Person_In_Charge2__r.Name, doctor2__c, doctor2__r.Name, Submit_date__c,
+                            doctor2__r.AWS_Data_Id__c,// 20220222 PI鏀归�� by Bright
                             Product_Category__c, Product_Category__r.Name, Result__c, visitor_title__c 
                             From Agency_Report__c
                             where id=:report_id ];
@@ -182,6 +218,7 @@
     public static List<Agency_Report__c> selectAgencyReportById01(String report_id) {
         return [Select Id, Name, Department_Cateogy__c, ConsumptionOfConsumables__c,warlocksNumber__c,WorkMark__c,WorkRecord__c,EffectProgress__c,ProductClassification__c,ProductCcategory__c,productCategories__c, Agency_Report_Header__c, Agency_Hospital__r.Name, Agency_Hospital__r.Hospital__c, OppName__c,
                             Person_In_Charge2__c,DealerPersonnel__c,DealerPersonnel__r.Name, Person_In_Charge2__r.Name, doctor2__c, doctor2__r.Name, Submit_date__c,
+                            doctor2__r.AWS_Data_Id__c,// 20220222 PI鏀归�� by Bright
                             Product_Category__c, Product_Category__r.Name, Result__c, visitor_title__c 
                             From Agency_Report__c
                             where id=:report_id ];
diff --git a/force-app/main/default/classes/NFM103Controller.cls b/force-app/main/default/classes/NFM103Controller.cls
index 2006145..0913c9f 100644
--- a/force-app/main/default/classes/NFM103Controller.cls
+++ b/force-app/main/default/classes/NFM103Controller.cls
@@ -103,6 +103,9 @@
         public String ReturnType;//杩斿搧鏂瑰紡
         public String UpdateStatus;//鐩磋繑淇敼鏍囪瘑
         //add by wangweipeng  2021/07/14   end
+        //add pi 鍔犲瘑 sushanhu 20220222 start
+        public String DataId;//AWS瀛樺偍鍑瘉
+        //add pi 鍔犲瘑 sushanhu 20220222 end
     }
     ////NFM103淇敼Rest end
 
@@ -327,7 +330,7 @@
                                          ,Returns_Product_way__c    //杩斿搧鏂瑰紡
                                          ,FSE_ApplyForRepair_time__c    //鐢宠淇悊鏃堕棿
                                          //add by wangweipeng  2021/07/14   start
-                                         
+                                         ,AWS_Data_Id__c //add by sushanhu AWSDateID for PIPL
                                          from Repair__c where Id IN :repairIds];          // 鍓婇櫎銉囥兗銈裤倰妞滅储銇椼仾銇勩伅銇氥�丄ll ROWS 銇勩倝銇亜銇仛
             System.debug(Logginglevel.DEBUG, 'NFM103_ recptList.size()=' + recptList.size());
 
@@ -472,7 +475,11 @@
                  element.Postal                     = rpr.address_ZipCode__c;    //閭紪
                  element.ReturnType                 = NFMUtil.getMapValue(ReturnsProductWayMap,'Returns_Product_way__c', rpr.Returns_Product_way__c, iflog);//杩斿搧鏂瑰紡
                  element.UpdateStatus               = rpr.Address_type__c;    //鐢宠淇悊鏃堕棿
-                 //add by wangweipeng  2021/07/14   start
+                 //add by wangweipeng  2021/07/14   end
+                 //add pi 瀵嗘枃 sushanhu 20220222 start
+                 element.DataId                     =rpr.AWS_Data_Id__c;//aws瀛樺偍鍑瘉
+                 //add pi 瀵嗘枃 sushanhu 20220222 end
+
             }
 
             if (repairRequest.GeneralData.size() > 0) {
@@ -571,10 +578,24 @@
             // NFM103淇敼Rest end
 
             // WLIG-BXQBH6 start
-            NFMUtil.response response =
-                NFMUtil.sendToSapStatusAndBody(rowDataStr, NFMUtil.NFM103_ENDPOINT);
-            status = response.status;
+            // NFMUtil.response response =
+            //     NFMUtil.sendToSapStatusAndBody(rowDataStr, NFMUtil.NFM103_ENDPOINT);
+                //update to aws 20220222 sushanhu start for PIPL
+                NFMUtil.response res = NFMUtil.getAwsToken();
+                String token=res.responseBody;
+                if(String.isBlank(token)){
+                    iflog.ErrorLog__c='NFM103'+'鑾峰彇aws token 澶辫触';
+                    
+                }
+                NFMUtil.response response =     NFMUtil.sendToPiAWS(rowDataStr, NFMUtil.NFM103_ENDPOINT,token);
+                //update to aws 20220222 sushanhu end for PIPL
+                status = response.status;
+                system.debug('AWS Response status:'+status);
             ResponseBody = response.responseBody;
+            //update to aws 20220302 sushanhu start for PIPL
+            Map<String, Object> results = (Map<String, Object>)JSON.deserializeUntyped(ResponseBody);
+            system.System.debug('NGM103 AWS result--'+ ResponseBody);
+            //update to aws 20220302 sushanhu end for PIPL
             NFM103Response NFM103Response = new NFM103Response();
             system.debug(ResponseBody);
             if (string.isNotEmpty(ResponseBody)) {
diff --git a/force-app/main/default/classes/NFM203Rest.cls b/force-app/main/default/classes/NFM203Rest.cls
index 9952989..098d9af 100644
--- a/force-app/main/default/classes/NFM203Rest.cls
+++ b/force-app/main/default/classes/NFM203Rest.cls
@@ -1,6 +1,9 @@
 @RestResource(urlMapping = '/NFM203/*')
 global with sharing class NFM203Rest {
-
+    //add Response to aws 20220221 add sushanhu
+   
+    static Boolean SFStatus=true;
+    static String SFMessage='';
     global class GeDatas {
         public NFMUtil.Monitoring Monitoring;
         public GeData[] Partners;
@@ -78,7 +81,7 @@
         public String BusinessAddress;          //缁忚惀鍦烘墍锛堢瓑鍚屽姙鍏湴鍧�锛�
         //WLIG-CA48WC pk start 2022-1-7
         public String RegisterAddress;          //浣忔墍鍦板潃
-        //WLIG-CA48WC pk end 2022-1-7
+        //WLIG-CA48WC pk end 2022-1-7       
         public String WarehouseAddress;         //搴撴埧鍦板潃
         public String BusinessScope;            //缁忚惀浜岀被鑼冨洿
         public String BusinessScope1;           //缁忚惀涓夌被鑼冨洿
@@ -93,10 +96,16 @@
     // 鏀惰揣浜哄眰绾�
     global class Consignee_Info {
         public String ContactName;
+        public String ContactNameEncrypted;//add 20220221
         public String ContactPhone;
+        public String ContactPhoneEncrypted;//add 20220221 
         public String PostalCode;
+        public String PostalCodeEncrypted;//add 20220221
         public String ContactAddress;
+        public String ContactAddressEncrypted;//add 20220221
         public String ContactCity; //鏈夋晥鏀惰揣浜哄煄甯�
+        public String ContactDataId;// add  20220221 CONTACT aws 瀛樺偍id
+        public String AddressDataId;// add 2020221 adress aws 瀛樺偍id
     }
 
     // 閿�鍞汉灞傜骇
@@ -154,13 +163,18 @@
         // 鍙栧緱鎺ュ彛浼犺緭鍐呭
         String strData = RestContext.request.requestBody.toString();
         GeDatas ges = (GeDatas) JSON.deserializeStrict(strData, GeDatas.class);
+        NFMUtil.NFMResponse result = NFMUtil.getNFMResponse();
 
         if (ges == null ) {
+            SFMessage+='鍙傛暟涓虹┖';
+            system.debug('SFMessage---'+SFMessage);
             return;
         }
 
         NFMUtil.Monitoring Monitoring = ges.Monitoring;
         if (Monitoring == null) {
+            SFMessage+='Monitoring涓虹┖';
+            system.debug('SFMessage---'+SFMessage);
             return;
         }
 
@@ -173,7 +187,12 @@
         res.addHeader('Content-Type', 'application/json');
         res.statusCode = 200;
         //String jsonResponse = '{"status": "Success", "Message":'  + gedata + '}';
-        String jsonResponse = '{"status": "Success", "Message":""}';
+        // String jsonResponse = '{"status": "Success", "Message":""}';
+        //updata response toAWS
+        result.SFStatus=SFStatus;
+        result.SFMessage=SFMessage;
+        String jsonResponse =JSON.serialize(result);
+        system.debug('result---'+jsonResponse);
         res.responseBody = blob.valueOf(jsonResponse);
         return;
     }
@@ -263,6 +282,11 @@
 
                     if (String.isNotBlank(result.split('/')[0])) {
                         iflog.ErrorLog__c += result.split('/')[0];
+                        //add response to aws 2022022 sushanhu start
+                        SFMessage=iflog.ErrorLog__c;
+                        system.debug('ErrorLog__c--'+iflog.ErrorLog__c);
+                        system.debug('SFMessage---'+SFMessage);
+                        //add response to aws 20220222 sushanhu end  
                     } else {
                         logstr += result.split('/')[1];
                     }
@@ -270,7 +294,13 @@
                 }
                 //WYAN-BS8B2A -XHL -20200925 -End
                 if (String.isBlank(gda.BPType)) {
+                    
+                  
                     iflog.ErrorLog__c += 'BPCode[ ' + gda.BPCode + ' ] of BPType is required,This data is skipped.\n';
+                    //add response to aws 20220221 sushanhu start
+                    SFMessage=iflog.ErrorLog__c;
+                    system.debug('SFMessage--'+SFMessage);
+                    //add response to aws 20220221 sushanhu end    
                     continue;
                 }
                 if (gda.BPType != '02' && gda.BPType != '03' && gda.BPType != '04' && gda.BPType != '05') {
@@ -278,16 +308,28 @@
                 }
                 if (String.isBlank(gda.BPCode)) {
                     iflog.ErrorLog__c += 'BPCode is required,This data is skipped.\n';
+                    //add response to aws 20220221 sushanhu start
+                    SFMessage=iflog.ErrorLog__c;
+                    system.debug('SFMessage---'+SFMessage);
+                    //add response to aws 20220221 sushanhu end  
                     continue;
                 }
                 if (gda.BPType == '02') {
                     // 缁忛攢鍟嗙殑鍦哄悎
                     if (String.isBlank(gda.CompanyName)) {
                         iflog.ErrorLog__c += 'BPCode[ ' + gda.BPCode + ' ] of CompanyName is required,This data is skipped.\n';
+                        //add response to aws 20220221 sushanhu start
+                        SFMessage=iflog.ErrorLog__c;
+                        system.debug('SFMessage---'+SFMessage);
+                        //add response to aws 20220221 sushanhu end  
                         continue;
                     }
                     if (String.isBlank(gda.AgentType)) {
                         iflog.ErrorLog__c += 'BPCode[ ' + gda.BPCode + ' ] of AgentType is required,This data is skipped.\n';
+                        //add response to aws 20220221 sushanhu start
+                        SFMessage=iflog.ErrorLog__c;
+                        system.debug('SFMessage---'+SFMessage);
+                        //add response to aws 20220221 sushanhu end  
                         continue;
                     }
                     //褰撶粡閿�鍟嗙殑鍒嗙被涓衡�滅壒绾︾粡閿�鍟嗭紙鍖哄煙锛夆�濄�佲�滅壒绾︾粡閿�鍟嗭紙浜у搧锛夆�濄��"鐗圭害缁忛攢鍟嗭紙鍖哄煙+浜у搧锛�"銆�"闆嗛噰缁忛攢鍟�"鏃讹紝楠岃瘉濂戠害鐨勫繀濉瓧娈�
@@ -298,6 +340,10 @@
                             //CHAN-BF8CCU ---XHL---updateEnd---20190821
                             if (String.isBlank(contractInfos.TermContractNo)) {
                                 iflog.ErrorLog__c += 'BPCode[ ' + gda.BPCode + ' ] of TermContractNo is required ,This data is skipped.\n';
+                               //add response to aws 20220221 sushanhu start
+                                SFMessage=iflog.ErrorLog__c;
+                                system.debug('SFMessage---'+SFMessage);
+                                //add response to aws 20220221 sushanhu end  
                                 flg = true;
                                 continue;
                             }
@@ -321,6 +367,10 @@
 
                     applyTypeMap.put(gda.BPCode, gda.ApplyType);
                 }
+                //add result message 20220222 sushanhu satrt
+                    SFMessage=iflog.ErrorLog__c;
+                    system.debug('SFMessage---'+SFMessage);
+                //add result message 20220222 sushanhu end
 
                 bPCodeList.add(gda.BPCode);
                 nfmgd.add(gda);
@@ -403,6 +453,10 @@
                     //鍒ゆ柇BPCode鏄惁宸茬粡瀛樺湪,涓嶅瓨鍦ㄧ殑璇濅細鎻愮ず涓嶅瓨鍦紝骞朵笖璺宠繃
                     if (!accsMap.containsKey(gda.BPCode)) {
                         iflog.ErrorLog__c += ' This BPCode[' + gda.BPCode + '] is not exist,This data is skipped .\n';
+                        //add response to aws 20220221 sushanhu start
+                        SFMessage=iflog.ErrorLog__c;
+                        system.debug('SFMessage---'+SFMessage);
+                        //add response to aws 20220221 sushanhu end  
                         continue;
                     }
                 }
@@ -497,6 +551,9 @@
                     accountInfo.SPO_ApplicationNo__c = GetApplicationNo(gda);
                 }
                 accountUpsertList.add(accountInfo);
+                // //add response to aws 20220221 sushanhu start
+                // SFMessage=iflog.ErrorLog__c;
+                // //add response to aws 20220221 sushanhu end
             }
             // 鏂板缓/鏇存柊瀹㈡埛涓绘暟鎹�
             if (accountUpsertList.size() > 0) {
@@ -580,6 +637,10 @@
                                     } 
                                 } else {
                                     iflog.ErrorLog__c += 'This Contract[ ' + contractInfos.TermContractNo + ' ] not exist,The Data Not  Cancel';
+                                     //add response to aws 20220221 sushanhu start
+                                    SFMessage=iflog.ErrorLog__c;
+                                    system.debug('SFMessage---'+SFMessage);
+                                    //add response to aws 20220221 sushanhu end
                                     continue ;
                                 }
 
@@ -640,6 +701,9 @@
 
                                 if (cdcErrorMap.size() > 0) {
                                     iflog.ErrorLog__c += ' This BPCode[' + gda.BPCode + '] of ContractDepartmentClass [' + cdcErrorMap.values() + '] noneffective, [' + cdcErrorMap.values() + '] skipped .\n';
+                                     //add response to aws 20220221 sushanhu start
+                                    SFMessage=iflog.ErrorLog__c;
+                                    //add response to aws 20220221 sushanhu end
                                 }
                                 contractInfoAcc.Contract_Start_Date__c = NFMUtil.parseStr2Date(contractInfos.ContractStartDate);
                                 contractInfoAcc.Contract_End_Date__c = NFMUtil.parseStr2Date(contractInfos.ContractEndDate);
@@ -805,6 +869,10 @@
 
                     if (String.isBlank(gdds.LicenseType)) {
                         iflog.ErrorLog__c += 'BPCode[ ' + gda.BPCode + ' ] of LicenseType is required ,This data is skipped.\n';
+                        //add response to aws 20220221 sushanhu start
+                        SFMessage=iflog.ErrorLog__c;
+                        system.debug('SFMessage---'+SFMessage);
+                        //add response to aws 20220221 sushanhu end
                         continue;
                     }
                     if (gdds.LicenseType == '23' || gdds.LicenseType == '24') { //3PL鐩稿叧璇�
@@ -812,6 +880,10 @@
                     }
                     if (String.isBlank(gdds.BusLicenseNo)) {
                         iflog.ErrorLog__c += 'BPCode[ ' + gda.BPCode + ' ] of BusLicenseNo is required,This data is skipped .\n';
+                        //add response to aws 20220221 sushanhu start
+                        SFMessage=iflog.ErrorLog__c;
+                        system.debug('SFMessage---'+SFMessage);
+                        //add response to aws 20220221 sushanhu end
                         continue;
                     }
                     geDataDetailsMap.put(gdds.LicenseType, gdds);
@@ -847,6 +919,7 @@
                     licenseInfo.IsFromSPO__c = true;
                     licenseInfo.Scope__c = gdds.BusinessScope;
                     licenseInfo.Scope3__c = gdds.BusinessScope1;
+
                     licenseInfoUpsertList.add(licenseInfo);
 
                     //瀵�"缁忛攢鍟�"涓绘暟鎹腑鐨�"钀ヤ笟璁稿彲璇佷功鐘跺喌"鐨勭浉鍏冲瓧娈佃繘琛岃祴鍊�
@@ -960,11 +1033,20 @@
             logstr += '\nend';
             rowData.retry_cnt__c = 0;
 
+            //add response to AWS 20220221 start
+            SFStatus =true;
+            SFMessage+=logstr;
+            system.debug('SFMessage---'+SFMessage);
+             //add response to AWS 20220221 end
         } catch (Exception ex) {
             Database.rollback(sp);
             System.debug(Logginglevel.ERROR, 'NFM203_' + rowData.MessageGroupNumber__c + ':' + ex.getMessage());
             System.debug(Logginglevel.ERROR, 'NFM203_' + rowData.MessageGroupNumber__c + ':' + ex.getStackTraceString());
             logstr += '\n' + ex.getMessage();
+            //add response to AWS 20220221 start
+            SFMessage+=ex.getMessage();
+            system.debug('SFMessage---'+SFMessage);
+            //add response to AWS 20220221 end
             iflog.ErrorLog__c = ex.getMessage() + '\n' + ex.getStackTraceString() + '\n' + iflog.ErrorLog__c;
 
             if (rowData.retry_cnt__c == null) rowData.retry_cnt__c = 0;
@@ -1148,10 +1230,14 @@
                 if (complianceDataMap.containsKey(accountCode)) {
                     // 鑾峰彇瀹㈡埛Id
                     for(Consignee_Info info:complianceDataMap.get(accountCode)){
-                        String accountId = tempAccountMap.get(accountCode).Id;
+                        // add  sushanhu for pi '000000'涓篊onsignee_Info婧愭暟鎹负绌�
+                        if (!'000000'.equals(info.ContactDataId)) {
+                            String accountId = tempAccountMap.get(accountCode).Id;
                         String contactPhone = info.ContactPhone;
                         String contactName = info.ContactName;
-                        String contactAllName = contactAllName(contactName);
+                        // String contactAllName = contactAllName(contactName);
+                        //update to aws contactName 20220221 sushanhu
+                        String contactAllName=info.contactName;
 
                         // 鑱旂郴浜哄瓧娈佃祴鍊�
                         Contact contact  = new Contact();
@@ -1160,30 +1246,47 @@
                         contact.Phone = contactPhone;
                         contact.MobilePhone = contactPhone;
                         contact.LastName = contactAllName.split('_')[0];
-                        contact.FirstName = contactAllName.split('_')[1];
+                        // contact.FirstName = contactAllName.split('_')[1];//delete for pi 20220304 
                         contact.IsFromSPO__c = true;
                         // SFDC鐢佃瘽閲嶅浜哄憳鍒涘缓淇℃伅纭  pk 2022-2-28 start
                         contact.RecordTypeId = '01210000000QfWi';
                         // SFDC鐢佃瘽閲嶅浜哄憳鍒涘缓淇℃伅纭  pk 2022-2-28 end
                         contact.Ignore_Same_Name__c = true;//涓嶆槸閲嶅鐨勫鎴峰悕 璺宠繃 瀹㈡埛浜哄憳鍚嶅瓧宸插瓨鍦� 楠岃瘉
+                        // add pi 瀵嗘枃 start 20220221 sushanhu
+                        contact.Phone_Encrypted__c = info.ContactPhoneEncrypted;
+                        contact.MobilePhone_Encrypted__c = info.ContactPhoneEncrypted;
+                        contact.LastName_Encrypted__c =info.ContactNameEncrypted;
+                        contact.AWS_Data_Id__c = info.ContactDataId;
+                        // add pi 瀵嗘枃 end 20220221 sushanhu
                         insertContactList.add(contact);
-                        
-                        // 鏀惰揣鍦板潃瀛楁璧嬪��
+                        if (!'000000'.equals(info.AddressDataId)) {
+                            // 鏀惰揣鍦板潃瀛楁璧嬪��
                         String contactCity = info.ContactCity;
 
                         Address__c addressData = new Address__c();
                         addressData.Customer__c = accountId;//瀹㈡埛
                         addressData.IsFromSPO__c = true;//鏄惁SPO鏉ユ簮
                         addressData.Telephone__c = contactPhone;//鐢佃瘽
+                        addressData.Telephone_Encrypted__c =info.ContactPhoneEncrypted;//鐢佃瘽瀵嗘枃 add sushanhu for pi 20220304
                         addressData.Address_Classification__c = '缁忛攢鍟�';//鍦板潃鍒嗙被
                         addressData.Detailed_Address__c = info.ContactAddress;//璇︾粏鍦板潃
                         // 鍥犳帴鍙d笉浼犺緭鐪侊紝瀵艰嚧淇濆瓨鏃舵姤閿欍�傚洜姝ゅ皢鍏舵敞鎺�,鍩庡競瀛楁涓嶈祴鍊� XHL 20210823
                         // if (cityMap.containsKey(contactCity)) {
                         //     addressData.City__c = cityMap.get(contactCity).Id;//甯�
                         // }
+                        // add pi 瀵嗘枃 start sushanhu 20220221
+                        addressData.AWS_Data_Id__c =info.AddressDataId;
+                        addressData.Detailed_Address_Encrypted__c =info.ContactAddressEncrypted;
+                        // add pi 瀵嗘枃 end sushanhu 20220221
+
                         String mapkey = accountCode + contactName;
                         insertAddressMap.put(mapkey,addressData);
                         accountCodeList.add(accountCode);
+                       }
+                       
+                        }
+                        
+                        
                     }
                     
                 }
diff --git a/force-app/main/default/classes/NFM501Controller.cls b/force-app/main/default/classes/NFM501Controller.cls
index 9e05b9c..b8ec71c 100644
--- a/force-app/main/default/classes/NFM501Controller.cls
+++ b/force-app/main/default/classes/NFM501Controller.cls
@@ -1,5 +1,6 @@
 public with sharing class NFM501Controller implements Queueable {
     //鍏堝畾涔�
+    //add aws response
     public class AllData {
         public String code;
         public QLMData data;
@@ -45,6 +46,17 @@
         public String[] ZhaoRelationName;
         public String[] ZhongRelationName;
         public String infoTypeSegment;
+        //add aws pi start sushanhu 20220223 start
+        public String[] AgentRelationWayEncrypted;//浠g悊鏈烘瀯鑱旂郴鏂瑰紡瀵嗘枃
+        public String[] AgentRelationNameEncrypted;//浠g悊鏈烘瀯鑱旂郴鏂瑰紡浜哄瘑鏂�
+        public String[] ZhongRelationWayEncrypted;//涓爣鍗曚綅鑱旂郴鏂瑰紡瀵嗘枃
+        public String[] ZhongRelationNameEncrypted;//涓爣鍗曚綅鑱旂郴浜哄瘑鏂�
+        public String[] ZhaoRelationNameEncrypted;//鎷涙爣鍗曚綅鑱旂郴浜哄瘑鏂�
+        public String[] ZhaoRelationWayEncrypted;//鎷涙爣鍗曚綅鑱旂郴鏂瑰紡瀵嗘枃
+        public String DataId;// AWS 瀛樺偍鍑嵁
+
+        //add aws pi start sushanhu 20220223 start
+
     }
     public class AmountItem {
         public String Amount;
@@ -166,7 +178,10 @@
             System.debug('++++1++++' + token + '  : ' + timeslot);
             if (string.isblank(token) || timeslot > 1800000) {
                 System.debug('++++2++++' + token + '  : ' + timeslot);
-                NFMUtil.response response = NFMUtil.receiveToken();
+                // NFMUtil.response response = NFMUtil.receiveToken();
+                //update to aws token sushanhu start 20220223
+                NFMUtil.response response=NFMUtil.getAwsToken();
+                //update to aws token sushanhu end 20220223
                 System.debug('++++response++++' + response);
                 //鍒ゆ柇rowdata涓暟鎹幏鍙栨垚鍔熶笌鍚︼紝濡傛灉澶辫触閲嶅彂涓夋锛屽鏋滃ぇ浜庝笁娆″垯鎵嬪姩鎿嶄綔
                 if (String.isBlank(response.responseBody)) {
@@ -188,11 +203,19 @@
                 oldTimeTran.NFM501_Gain_End_Time__c = oldTime;
 
             }
-            //鏇挎崲鑾峰彇鍒版暟鎹腑鐨勫叧閿瓧
-            NFMUtil.response response = NFMUtil.getQLMData(NFMUtil.NFM501_ENDPOINT
-                                        + oldMark.Internal_Value__c + '/10', token);
-            // aaaaaaaa 杩欓噷椤哄簭閿欎簡锛岃偗瀹氭槸搴旇鍏堝垽鏂槸涓嶆槸鍥犱负http 鎶ラ敊锛岀劧鍚庢墠鏄崈閲岄┈鐨刢ode瑙f瀽
+            
+
+            // //鏇挎崲鑾峰彇鍒版暟鎹腑鐨勫叧閿瓧
+            // NFMUtil.response response = NFMUtil.getQLMData(NFMUtil.NFM501_ENDPOINT
+            //                             + oldMark.Internal_Value__c + '/10', token);
+            // // aaaaaaaa 杩欓噷椤哄簭閿欎簡锛岃偗瀹氭槸搴旇鍏堝垽鏂槸涓嶆槸鍥犱负http 鎶ラ敊锛岀劧鍚庢墠鏄崈閲岄┈鐨刢ode瑙f瀽
+            //update to aws start sushanhu 20220223
+            PIHelper.PIIntegration NFM501AWS =PIHelper.getPIIntegrationInfo('QLMNFM501');
+            NFMUtil.response response = NFMUtil.getAWSQLMData(NFM501AWS.newUrl+'cursorMark='
+                                         + oldMark.Internal_Value__c + '&pageSize=10', token);
+            //update to aws  sushanhu end 20220223
             //http鐨勬姤閿欏鐞嗭紙閲嶅彂涓夐亶锛�
+            //
             if (String.isBlank(response.responseBody)) {
                 System.debug('-------7-------');
                 // aaaaaaaa 鎶ラ敊鍘熷洜鍐欑殑涓嶅
@@ -209,7 +232,14 @@
             // 瑙f瀽鍚庣殑code鎶ラ敊澶勭悊
             String NFM501responseBody = response.responseBody;
             System.debug('-------------NFM501responseBody------------' + NFM501responseBody);
-            NFM501responseBody = NFM501responseBody.replaceAll('"list"', '"list1"').replaceAll('"number":', '"number1":');
+            //update to aws response sushanhu 20220223 start
+            Map<String, Object> results = (Map<String, Object>) JSON.deserializeUntyped(NFM501responseBody);
+            //String qlmResult =(String)results.get('object');
+            String qlmResult =JSON.serialize(results.get('object'));
+            System.debug('-------------NFM501responseBody qlmResult------------' + qlmResult);
+            // NFM501responseBody = NFM501responseBody.replaceAll('"list"', '"list1"').replaceAll('"number":', '"number1":');
+            NFM501responseBody = qlmResult.replaceAll('"list"', '"list1"').replaceAll('"number":', '"number1":');
+            //update to aws response sushanhu 20220223 end
             AllData getQLMData =  (AllData) JSON.deserializeStrict(NFM501responseBody, AllData.class);
             System.debug('-------------8------------' + getQLMData);
             if (!getQLMData.code.equals('0')) {
@@ -223,6 +253,8 @@
                 return;
             }
             rowData = NFMUtil.QLMmakeRowData(NFM501responseBody, rowData);
+            rowData.AWS_Transaction_Id__c = (String)results.get('txId');// add for pi susanhu 20220310
+            system.debug('rowData---'+rowData);
             System.debug('======2221234======');
 
             update tokenTran;
@@ -244,7 +276,7 @@
                 // 12鐐硅嚜鍔ㄦ姄鍙栨嫑鎶曟爣鏁版嵁
                 // NFM501Controller.TwoMarkEqualAgainSend();
             }
-
+            
             rowData.retry_cnt__c = 0;
             if (System.Test.isRunningTest()) {
                 throw new ControllerUtil.myException('aaa');
diff --git a/force-app/main/default/classes/NFM501FutureController.cls b/force-app/main/default/classes/NFM501FutureController.cls
index fc47917..cd34a5f 100644
--- a/force-app/main/default/classes/NFM501FutureController.cls
+++ b/force-app/main/default/classes/NFM501FutureController.cls
@@ -3,6 +3,10 @@
     //鍏堝畾涔�
     // 	鎶曟爣鎴鏃堕棿
     // 2021/01/04 18:00
+    //add by sushanhu for pi 20220310 start
+    public static String txId;
+    
+    //add by sushanhu for pi 20220310 end
     public String rowData_id;
     public NFM501FutureController(String rowData_id) {
         this.rowData_id = rowData_id;
@@ -13,16 +17,20 @@
         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, NFM501Future_Count__c,
-            NFM501_Web_Annex_Count__c
+            NFM501_Web_Annex_Count__c,
+            AWS_Transaction_Id__c //ADD BY SUSHANHU for pi 20220310
             from BatchIF_Log__c where RowDataFlg__c = true and Id = : rowData_id
         ];
         //瀛樻斁鎶ラ敊淇℃伅
+        txId =rowData.AWS_Transaction_Id__c; //add by sushanhu for pipl 20220310
+        system.debug('nfm501future awsid'+txId);
         BatchIF_Log__c iflog501Future = new BatchIF_Log__c();
         iflog501Future.Type__c = 'NFM501';
         iflog501Future.MessageGroupNumber__c = rowData.MessageGroupNumber__c;
         iflog501Future.Log__c = ' ';
         iflog501Future.ErrorLog__c = ' ';
         iflog501Future.RowDataFlg__c = false;
+        iflog501Future.AWS_Transaction_Id__c=rowData.AWS_Transaction_Id__c;
         insert iflog501Future;
         NFM501FutureController.main(rowData.Id, iflog501Future.Id, false);
     }
@@ -49,9 +57,12 @@
         String QLMDataStr = NFMUtil.QLMgetRowDataStr(rowData);
         NFM501controller.AllData getQLMData1 = (NFM501controller.AllData)
         JSON.deserialize(QLMDataStr, NFM501controller.AllData.class);
+        
         if (getQLMData1 == null) {
             return;
         }
+        List<PIHelper.IdList> idList = new List<PIHelper.IdList>();//瀛樺偍鏇存柊鍚庡緱sfid鍜宎wsid add by sushanhu 20220310
+        PIHelper.PIIntegration NFM501AWS =PIHelper.getPIIntegrationInfo('QLMNFM501'); //add by sushanhu 20220310
         Savepoint sp = Database.setSavepoint();
         //IF杞崲琛紙涓哄疄鐜伴�夐」鍒楄〃鐨勪笅鎷夐�夐」锛�
         Map < String, String > transferMap = new Map < String, String > ();
@@ -122,15 +133,20 @@
             tempbidInfoFileURLList.add(bidInfoFile.infoAddress__c);
             SelectbidInfoFileMap.put(bidInfoFile.Tender_information__r.ProjectId__c, tempbidInfoFileURLList);
         }
+        
         try {
             // 鎷涙爣淇℃伅
             Map < string, List < bidInfoFile__c >> createbidInfoFileMap = new map < string, List < bidInfoFile__c >> ();
             Map < String, List < Tender_information_details__c >> tempList1 = new Map < String, List < Tender_information_details__c >> ();
             Map < string, Tender_information__c > updateTenderMap = new map < string, Tender_information__c > ();
             Set < String > TarDetailSet = new Set < String > ();
+            
             for (NFM501Controller.ListItem LI: getQLMData1.data.list1) {
                 // 闋呯洰杌㈤�併伄銈汇儍銉�
                 Tender_information__c te1 = new Tender_information__c();
+                //add aws dataid sushanhu 20220223 start
+                te1.AWS_Data_Id__c = LI.DataId;
+                //add aws dataid sushanhu 20220223 end
                 if (String.isBlank(LI.projectId)) {
                     iflog501Future.ErrorLog__c += 'Error! [' + LI.projectId + ']NotExist. This information is skipped.\n';
                     continue;
@@ -183,6 +199,9 @@
                 //鎷兼帴瀛楃涓�
                 if (LI.ZhaoRelationWay != null && LI.ZhaoRelationWay.size() > 0) {
                     te1.ZhaoRelationWay__c = String.join(LI.ZhaoRelationWay, '锛�');
+                     //add 瀵嗘枃 sushanhu 20220223 start
+                     te1.ZhaoRelationWay_Encrypted__c =String.join(LI.ZhaoRelationWayEncrypted,'锛�');
+                     //add 瀵嗘枃 sushanhu 20220223 end
                 }
                 //杞崲琛紙閫夐」鍒楄〃鐨勪笅鎷夐�夐」锛�
                 te1.IsElectronic__c = NFMUtil.getMapValue(transferMap, 'IsElectronic__c', LI.isElectronic, iflog501Future);
@@ -283,6 +302,9 @@
                 }
                 if (LI.AgentRelationWay != null && LI.AgentRelationWay.size() > 0) {
                     te1.AgentRelationWay__c = String.join(LI.AgentRelationWay, '锛�');
+                    //add 瀵嗘枃 sushanhu 20220223 start
+                    te1.AgentRelationWay_Encrypted__c =String.join(LI.AgentRelationWayEncrypted,'锛�');
+                    //add 瀵嗘枃 sushanhu 20220223 end
                 }
                 // 灏嗘敼闄勪欢瀛樺叆鎷涙姇鏍囬」鐩瓙瀵硅薄涓�
                 if (LI.InfoFile != null && LI.InfoFile.size() > 0) {
@@ -327,6 +349,9 @@
                 }
                 if (LI.AgentRelationName != null && LI.AgentRelationName.size() > 0) {
                     te1.AgentRelationName__c = String.join(LI.AgentRelationName, '锛�');
+                    //add 瀵嗘枃 sushanhu 20220223 start
+                    te1.AgentRelationName_Encrypted__c =String.join(LI.AgentRelationNameEncrypted,'锛�');
+                    //add 瀵嗘枃 sushanhu 20220223 end
                 }
                 if (String.isNotBlank(LI.bidingEndTime)) {
                     te1.BidingEndTime__c = Datetime.valueOf(LI.bidingEndTime);
@@ -355,6 +380,9 @@
                 }
                 if (LI.ZhongRelationWay != null && LI.ZhongRelationWay.size() > 0) {
                     te1.ZhongRelationWay__c = String.join(LI.ZhongRelationWay, '锛�');
+                    //add 瀵嗘枃 sushanhu 20220223 start
+                    te1.ZhongRelationWay_Encrypted__c =String.join(LI.ZhongRelationWayEncrypted,'锛�');
+                    //add 瀵嗘枃 sushanhu 20220223 end
                 }
                 if (String.isNotBlank(LI.bidingAcquireTime)) {
                     te1.BidingAcquireTime__c = Datetime.valueOf(LI.bidingAcquireTime);
@@ -462,10 +490,18 @@
                 }
                 if (LI.ZhaoRelationName != null && LI.ZhaoRelationName.size() > 0) {
                     te1.ZhaoRelationName__c = String.join(LI.ZhaoRelationName, '锛�');
+                    //add 瀵嗘枃 sushanhu 20220223 start
+                    te1.ZhaoRelationName_Encrypted__c =String.join(LI.ZhaoRelationNameEncrypted,'锛�');
+                    //add 瀵嗘枃 sushanhu 20220223 end
                 }
                 if (LI.ZhongRelationName != null && LI.ZhongRelationName.size() > 0) {
                     te1.ZhongRelationName__c = String.join(LI.ZhaoRelationName, '锛�');
+                     //add 瀵嗘枃 sushanhu 20220223 start
+                     te1.ZhongRelationName_Encrypted__c =String.join(LI.ZhongRelationNameEncrypted,'锛�');
+                     //add 瀵嗘枃 sushanhu 20220223 end
                 }
+                    
+
                 //绮剧悽绉戞妧   zxk   2021-11-11  SWAG-C637NF   start
                 // 濡傛灉绗竴娆¢」鐩樁娈靛氨浼犳潵鍙樻洿鐘舵�佺殑璇濓紝閭d箞灏变笉鐢熸垚鎷涙姇鏍囬」鐩紙鐢变簬鍙樻洿闃舵椤圭洰鍚嶇О浼犳潵涓虹┖锛屼负浜嗕笉璁╅」鐩悕鑷姩璧嬪�间负Id锛�
                 if (String.isNotBlank(te1.InfoType__c) && String.isNotBlank(LI.projectId)) {
@@ -499,8 +535,15 @@
             System.debug('123456789123456789:' + updateTenderMap);
             //灏嗘嫑鏍囦俊鎭拰鎷涙爣淇℃伅璇︽儏鍏宠仈璧锋潵锛堥�氳繃ProjectId杩欎竴鍞竴鏍囪瘑锛�
             Map < string, Tender_information__c > TenderMap = new map < string, Tender_information__c > ();
+            
             for (Tender_information__c TMap: updateTenderMap.values()) {
                 TenderMap.put(TMap.ProjectId__c, TMap);
+                PIHelper.IdList il= new PIHelper.IdList();
+                // add for pipl  sushanhu 20220310 start
+                il.awsId =TMap.AWS_Data_Id__c;
+                il.sfRecordId=TMap.Id;
+                idList.add(il);
+                // add for pipl  sushanhu 20220310 end
             }
             System.debug('12345678!!!!!' + TenderMap.values());
             List < Tender_information_details__c > TenList = new List < Tender_information_details__c > ();
@@ -537,9 +580,15 @@
             if (System.Test.isRunningTest()) {
                 throw new ControllerUtil.myException('aaa');
             }
+            //纭浜嬪姟 add for pi sushanhu 20220310 start
+            PIHelper.confirmTrans('NFM501',1,null,txId,NFM501AWS.token,NFM501AWS.transactionURL,idList);
+            //纭浜嬪姟 add for pi sushanhu 20220310 end
         } catch (Exception ex) {
             // 濡傛灉鏁版嵁鑾峰彇杩囩▼涓紝鏈夐敊璇紙鍚屼竴娓告爣锛屽鏋滄姤閿欙紝鏄粬閲嶆柊鑾峰彇涓�閬嶏紝濡傛灉涓夋閮芥病鑳借幏鍙栧埌锛屽氨鍙戦�侀偖浠舵姤閿欎俊鎭紝鐒跺悗鎵嬪姩杩涜鑾峰彇锛�
             Database.rollback(sp);
+            //纭浜嬪姟 add for pi sushanhu 20220310 start
+            PIHelper.confirmTrans('NFM501',0,null,txId,NFM501AWS.token,NFM501AWS.transactionURL,idList);
+            //纭浜嬪姟 add for pi sushanhu 20220310 end
             System.debug(Logginglevel.ERROR, 'QLMData_' + rowData.MessageGroupNumber__c + ':' + ex.getMessage());
             System.debug(Logginglevel.ERROR, 'QLMData_' + rowData.MessageGroupNumber__c + ':' + ex.getStackTraceString());
             // logstr += '\n' + ex.getMessage();
diff --git a/force-app/main/default/classes/NFM502Controller.cls b/force-app/main/default/classes/NFM502Controller.cls
index 47c0ebf..128ebe1 100644
--- a/force-app/main/default/classes/NFM502Controller.cls
+++ b/force-app/main/default/classes/NFM502Controller.cls
@@ -1,6 +1,10 @@
 public with sharing class NFM502Controller implements Queueable {
-
 	public String rowData_id;
+	//add staic sushanhu 20220302 start
+	public static String transUrl;
+	public static String transId;
+	public static String token;
+	//add staic sushanhu 20220302 end
 	public NFM502Controller(String rowData_id) {
 		this.rowData_id = rowData_id;
 	}
@@ -46,7 +50,9 @@
 
 		// Savepoint sp = Database.setSavepoint();
 		try {
-			String token;
+			//update 鍚宻taic 20220302 satrt
+			// String token;
+			//update 鍚宻taic 20220302 end
 			Datetime oldTime;
 			// 浠庤浆鎹㈣〃涓幏鍙杢oken
 			BatchIF_Transfer__c token502 = [Select ID, NFM501_Token__c
@@ -75,11 +81,13 @@
 			}
 			// System.debug('++++1++++' + token + '  : ' + timeslot);
 			if (string.isblank(token) || timeslot > 1800000) {
-				NFMUtil.response response = NFMUtil.receiveToken();
+				// NFMUtil.response response = NFMUtil.receiveToken();
+				//update to aws token sushanhu 20220301  start
+				NFMUtil.response response = NFMUtil.getAWSToken();
 				//鍒ゆ柇rowdata涓暟鎹幏鍙栨垚鍔熶笌鍚︼紝濡傛灉澶辫触閲嶅彂涓夋锛屽鏋滃ぇ浜庝笁娆″垯鎵嬪姩鎿嶄綔
 				if (String.isBlank(response.responseBody)) {
 					System.debug('response.responseBody:' + response.responseBody);
-					iflog502.ErrorLog__c = '502token:' + response.status;
+					iflog502.ErrorLog__c = '502token:' + response.responseBody;
 					// rowData.NFM501_Web_Annex_Count__c = 0;
 					if (!Manual_execution502) {
 						NFM501Controller.againSendRequest(iflog502, 'NFM501_Web_Annex_Count__c', rowData);
@@ -92,6 +100,7 @@
 				oldTime = Datetime.now();
 				token502.NFM501_Token__c = token;
 				oldTime502.NFM501_Gain_End_Time__c = oldTime;
+				//update to aws token sushanhu 20220301  end
 			}
 
 			//鍏宠仈闄勪欢涓庢嫑鎶曟爣椤圭洰锛堥�氳繃Id锛�
@@ -116,7 +125,12 @@
 			}
 
 			//寰幆URL
-			List<Attachment> TenAttList = new List<Attachment>();
+			// List<Attachment> TenAttList = new List<Attachment>();
+			//update to aws pi sushanhu 20220301 start
+			List<FileAddress__c> fileList = new List<FileAddress__c>();
+			List<String> queryUrlList = new List<String>();
+			Map<String, NFM501Controller.ListItem> queryMap = new Map<String, NFM501Controller.ListItem>();
+			//update to aws pi sushanhu 20220301 end
 			for (NFM501Controller.ListItem QLMWebAtt : getQLMData502.data.list1) {
 				if (QLMWebAtt.projectId == null) {
 					iflog502.ErrorLog__c += 'Error! [' + QLMWebAtt.projectId + ']NotExist. This information is skipped.\n';
@@ -129,54 +143,111 @@
 					                        ']Is 棣欐腐鐗瑰埆琛屾斂鍖�(婢抽棬鐗瑰埆琛屾斂鍖�,鍙版咕鐪�). This information is skipped.\n';
 					continue;
 				}
-				//璋冪敤鎺ュ彛3
-				NFMUtil.response response = NFMUtil.getQLMData(NFMUtil.NFM502_ENDPOINT + QLMWebAtt.infoQianlimaUrl, token);
-				if (String.isBlank(response.responseBody)) {
-					System.debug('response.responseBody:' + response.responseBody);
-					iflog502.ErrorLog__c = '502鎺ュ彛璋冪敤锛�' + response.status;
-					rowData.NFM501_Web_Annex_Count__c = 0;
-					if (!Manual_execution502) {
-						NFM501Controller.againSendRequest(iflog502, 'NFM501_Web_Annex_Count__c', rowData);
-					}
-					//鏇存柊鏃ュ織鏁版嵁
-					update token502;
-					update oldTime502;
-					return;
-				}
+				//update to aws pi sushanhu 20220301 start
+				queryUrlList.add(QLMWebAtt.infoQianlimaUrl);
+				queryMap.put(QLMWebAtt.infoQianlimaUrl,QLMWebAtt);
+				//update to aws pi sushanhu 20220301 start
+			// 	//璋冪敤鎺ュ彛3
+			// 	NFMUtil.response response = NFMUtil.getQLMData(NFMUtil.NFM502_ENDPOINT + QLMWebAtt.infoQianlimaUrl, token);
+			// 	if (String.isBlank(response.responseBody)) {
+			// 		System.debug('response.responseBody:' + response.responseBody);
+			// 		iflog502.ErrorLog__c = '502鎺ュ彛璋冪敤锛�' + response.status;
+			// 		rowData.NFM501_Web_Annex_Count__c = 0;
+			// 		if (!Manual_execution502) {
+			// 			NFM501Controller.againSendRequest(iflog502, 'NFM501_Web_Annex_Count__c', rowData);
+			// 		}
+			// 		//鏇存柊鏃ュ織鏁版嵁
+			// 		update token502;
+			// 		update oldTime502;
+			// 		return;
+			// 	}
 
-				//瑙f瀽鍚庣殑code鎶ラ敊澶勭悊
-				string NFM502responseBody = response.responseBody;
-				Map<String, Object> Body502 = (Map<String, Object>) JSON.deserializeUntyped(NFM502responseBody);
-				if (!Body502.get('code').equals('0')) {
-					System.debug('-------9-------');
-					iflog502.ErrorLog__c = '502瑙f瀽锛�' + Body502.get('msg').tostring() ;
-					if (!Manual_execution502) {
-						NFM501Controller.againSendRequest(iflog502, 'NFM501_Web_Annex_Count__c', rowData);
-					}
-					update token502;
-					update oldTime502;
-					return;
-				}
-				System.debug('Body502.data:' + Body502.get('data').tostring() + '---------'
-				             + Body502.get('msg').tostring() + '-------' + Body502.get('code').tostring());
+			// 	//瑙f瀽鍚庣殑code鎶ラ敊澶勭悊
+			// 	string NFM502responseBody = response.responseBody;
+			// 	Map<String, Object> Body502 = (Map<String, Object>) JSON.deserializeUntyped(NFM502responseBody);
+			// 	if (!Body502.get('code').equals('0')) {
+			// 		System.debug('-------9-------');
+			// 		iflog502.ErrorLog__c = '502瑙f瀽锛�' + Body502.get('msg').tostring() ;
+			// 		if (!Manual_execution502) {
+			// 			NFM501Controller.againSendRequest(iflog502, 'NFM501_Web_Annex_Count__c', rowData);
+			// 		}
+			// 		update token502;
+			// 		update oldTime502;
+			// 		return;
+			// 	}
+			// 	System.debug('Body502.data:' + Body502.get('data').tostring() + '---------'
+			// 	             + Body502.get('msg').tostring() + '-------' + Body502.get('code').tostring());
 
-				//鑾峰彇缃戦〉淇℃伅杞瓨涓洪檮浠�
-				//鎴垏鏁版嵁锛堜娇鏁版嵁鎴愪负瑙f瀽鐨勬牸寮忥級
-				Integer start = NFM502responseBody.indexOf('"infoHtml":"');
-				Integer theEnd = NFM502responseBody.lastIndexOf('"},"msg');
-				NFM502responseBody = NFM502responseBody.substring(start + 12, theEnd);
-				//灏嗗叾杞崲涓洪檮浠�
-				// System.debug('---------' + NFM502responseBody);
-				Attachment WebAtt = new Attachment();
-				// System.debug('projectId:' + QLMWebAtt.projectId);
-				if (TenMap.containskey(QLMWebAtt.projectId)) {
-					WebAtt.ParentId = TenMap.get(QLMWebAtt.projectId).Id;
-					WebAtt.Body = Blob.valueOf(NFM502responseBody);
-					WebAtt.Name = TenMap.get(QLMWebAtt.projectId).InfoType__c + ':' + QLMWebAtt.infoTitle + '.html';
-					TenAttList.add(WebAtt);
+			// 	//鑾峰彇缃戦〉淇℃伅杞瓨涓洪檮浠�
+			// 	//鎴垏鏁版嵁锛堜娇鏁版嵁鎴愪负瑙f瀽鐨勬牸寮忥級
+			// 	Integer start = NFM502responseBody.indexOf('"infoHtml":"');
+			// 	Integer theEnd = NFM502responseBody.lastIndexOf('"},"msg');
+			// 	NFM502responseBody = NFM502responseBody.substring(start + 12, theEnd);
+			// 	//灏嗗叾杞崲涓洪檮浠�
+			// 	// System.debug('---------' + NFM502responseBody);
+			// 	Attachment WebAtt = new Attachment();
+			// 	// System.debug('projectId:' + QLMWebAtt.projectId);
+				// if (TenMap.containskey(QLMWebAtt.projectId)) {
+				// 	WebAtt.ParentId = TenMap.get(QLMWebAtt.projectId).Id;
+				// 	WebAtt.Body = Blob.valueOf(NFM502responseBody);
+				// 	WebAtt.Name = TenMap.get(QLMWebAtt.projectId).InfoType__c + ':' + QLMWebAtt.infoTitle + '.html';
+				// 	TenAttList.add(WebAtt);
+				// }
+			 }
+			//update to aws pi  sushanhu 20220301 start
+			PIHelper.piIntegration pi =PIHelper.getPIIntegrationInfo('NFM502');
+			transUrl=pi.searchUrl;
+			//璋冪敤鎺ュ彛3
+			system.debug('Payload for NFM 520:'+JSON.serialize(queryUrlList));
+			NFMUtil.response response = NFMUtil.getAWSQLMData(pi.newUrl ,JSON.serialize(queryUrlList), token);
+			Map<String, Object> result = (Map<String, Object>)JSON.deserializeUntyped(response.responseBody);
+			String statusCode =(String)result.get('status');
+			transId =(String)result.get('txId');
+			if (!'0'.equals(statusCode)) {
+				System.debug('response.responseBody:' + response.responseBody);
+				iflog502.ErrorLog__c = '502鎺ュ彛璋冪敤锛�' + (String)result.get('message');
+				rowData.NFM501_Web_Annex_Count__c = 0;
+				if (!Manual_execution502) {
+					NFM501Controller.againSendRequest(iflog502, 'NFM501_Web_Annex_Count__c', rowData);
 				}
+				//鏇存柊鏃ュ織鏁版嵁
+				update token502;
+				update oldTime502;
+				return;
 			}
 
+			//瑙f瀽鍚庣殑code鎶ラ敊澶勭悊
+			string NFM502responseBody = response.responseBody;
+			Map<String, Object> Body502 = (Map<String, Object>) JSON.deserializeUntyped(NFM502responseBody);
+			if (!String.valueOf(Body502.get('status')).equals('0')) {
+				System.debug('-------9-------');
+				iflog502.ErrorLog__c = '502瑙f瀽锛�' + Body502.get('message').tostring() ;
+				if (!Manual_execution502) {
+					NFM501Controller.againSendRequest(iflog502, 'NFM501_Web_Annex_Count__c', rowData);
+				}
+				update token502;
+				update oldTime502;
+				return;
+			}
+			System.debug('Body502.data:' + Body502.get('object').tostring() + '---------'
+						 + Body502.get('message').tostring() + '-------' + Body502.get('status').tostring());
+
+			//鑾峰彇aws杩斿洖鐨勫湴鍧�骞跺瓨鍌�
+			
+			Map<String, Object> fileMap = (Map<String, Object >)result.get('object');
+			for(String url:queryUrlList){
+				NFM501Controller.ListItem QLMWebAtt = queryMap.get(url);
+				if (TenMap.containskey(QLMWebAtt.projectId)) {
+					FileAddress__c file =new FileAddress__c();
+					file.ParentRecordId__c = TenMap.get(QLMWebAtt.projectId).Id;
+					file.FileName__c = TenMap.get(QLMWebAtt.projectId).InfoType__c + ':' + QLMWebAtt.infoTitle + '.html';
+					file.DownloadLink__c =pi.undeleteUrl+(String)fileMap.get(url)+'&fileName='+file.FileName__c;
+					file.ViewLink__c = pi.queryUrl+(String)fileMap.get(url) ;
+					file.AWS_File_Key__c =(String)fileMap.get(url) ;
+					fileList.add(file);
+				}
+			}
+			
 			//鍒犻櫎鍚屽悕鐨勯檮浠�
 			List<String> UrlList = new List<String>();
 			for (NFM501Controller.ListItem UrlName : getQLMData502.data.list1) {
@@ -185,22 +256,34 @@
 				}
 			}
 
-			List<Attachment> DeleAttList = [select id, name, ParentId from Attachment
-			                                where name in :UrlList and ParentId in :TenIdSet];
-			if (DeleAttList.size() > 0) {
-				delete DeleAttList;
+			List<FileAddress__c> DeleFileList = [select id, FileName__c, ParentRecordId__c from FileAddress__c
+			                                where FileName__c in :UrlList and ParentRecordId__c in :TenIdSet];
+			if (DeleFileList.size() > 0) {
+				delete DeleFileList;
 			}
-			System.debug('----1----' + TenAttList);
-			if (TenAttList.size() > 0) {
-				upsert TenAttList;
+			System.debug('----1----' + fileList);
+			if (fileList.size() > 0) {
+				upsert fileList;
 			}
-
+			//纭浜嬪姟
+			List<String> sfRecordIds = new List<String>();
+			for (FileAddress__c file : fileList) {
+				sfRecordIds.add(file.Id);
+			}
+			//update to aws pi  sushanhu 20220301 end
+			 PIHelper.confirmFileTrans('NFM502',1,JSON.serialize(sfRecordIds),transId,token,transUrl);
+			// if (!confirm) {
+			// 	//鍥炴粴
+			// }
 			rowData.NFM501_Web_Annex_Count__c = 0;
 		} catch (Exception ex) {
 			// Database.rollback(sp);
 			// System.debug(Logginglevel.ERROR, 'QLMData_' + rowData.MessageGroupNumber__c + ':' + ex.getMessage());
 			// System.debug(Logginglevel.ERROR, 'QLMData_' + rowData.MessageGroupNumber__c + ':' + ex.getStackTraceString());
 			// logstr += '\n' + ex.getMessage();
+			//add 浜嬪姟纭 sushanhu 20220302 satrt
+			 PIHelper.confirmFileTrans('NFM502',0,'',transId,token,transUrl);
+			//add 浜嬪姟纭 sushanhu 20220302 end
 			iflog502.ErrorLog__c = '502鎶涘嚭寮傚父锛�' + ex.getMessage() + '\n'
 			                       + ex.getStackTraceString() + '\n' + iflog502.ErrorLog__c;
 			if (!Manual_execution502) {
diff --git a/force-app/main/default/classes/NFM503InfoFileBatch.cls b/force-app/main/default/classes/NFM503InfoFileBatch.cls
index 4ffb76d..d9199c8 100644
--- a/force-app/main/default/classes/NFM503InfoFileBatch.cls
+++ b/force-app/main/default/classes/NFM503InfoFileBatch.cls
@@ -1,8 +1,18 @@
 global class NFM503InfoFileBatch implements Database.Batchable<sObject>, Database.AllowsCallouts, Database.Stateful {
     public String TenId;
     public String bidInfoFileID;
+    //add staic sushanhu 20220302 start
+	public static String transUrl;
+	public static String transId;
+	public static String token;
+	//add staic sushanhu 20220302 end
     Boolean IsNeedExecute = false;  //2021-06-28 mzy  WLIG-BYHD79  SFDC鐜batch鍚堝苟璋冩煡  鏄惁绗﹀悎鎵ц鏉′欢
-
+    //add nfm 503 aws response start sushanhu 20220301
+    global class File{
+        public String key;
+        public String name;
+    }
+    //add nfm 503 aws response sushanhu 20220301 end
     //2021-06-28  mzy update  鍗冮噷椹�-Batch start
     global NFM503InfoFileBatch() {
         this.IsNeedExecute = true;
@@ -33,9 +43,12 @@
     global void execute(Database.BatchableContext BC, list<bidInfoFile__c> bidInfoFileList) {
         Savepoint sp;
         bidInfoFile__c bidInfoFile = bidInfoFileList[0];
-
+        List<String> queryfileList = new List<String>();
+        queryfileList.add(bidInfoFile.infoAddress__c);
         try {
-            String token;
+           //update 鍚宻taic 20220302 satrt
+			// String token;
+			//update 鍚宻taic 20220302 end
             Datetime oldTime;
             // 浠庤浆鎹㈣〃涓幏鍙杢oken
             BatchIF_Transfer__c token503 = [Select ID, NFM501_Token__c
@@ -56,7 +69,9 @@
             }
             // System.debug('++++1++++' + token + '  : ' + timeslot);
             if (string.isblank(token) || timeslot > 1800000) {
-                NFMUtil.response response = NFMUtil.receiveToken();
+                //UP TO AWAS TOKEN 20220225 SUSHANHU START
+                NFMUtil.response response = NFMUtil.getAWSToken();
+                //UP TO AWAS TOKEN 20220225 SUSHANHU END
                 if (String.isBlank(response.responseBody)) {
                     bidInfoFile.ErrorMessage__c = '503token:' + response.status;
                 }
@@ -65,53 +80,133 @@
                 token503.NFM501_Token__c = token;
                 oldTime503.NFM501_Gain_End_Time__c = oldTime;
             }
-            // 瀛樻斁瓒呰繃12M鐨勯檮浠�
-            List<Attachment> TenOtherAttList = new List<Attachment>();
-            // 瀛樻斁鎵�鏈夐檮浠�
-            List<String> FileList = new List<String>();
-            // 濡傛灉鏂囦欢澶у皬瓒呰繃12M鏇存柊
-            List< Tender_information__c> updateTenderList = new  List< Tender_information__c>();
-            // 鑾峰彇鎺ュ彛3涓暟鎹�
-            NFMUtil.response503 response = NFMUtil.getFileData(token, bidInfoFile.infoAddress__c);
-            // 鏂囦欢澶у皬瓒呰繃12M
-            if (response.Name.equals('鏂囦欢澶у皬瓒呰繃12M')) {
-                id tendID = bidInfoFile.Tender_information__c;
-                Tender_information__c tempTender = new Tender_information__c();
-                tempTender.id = tendID;
-                tempTender.File_Surpass_12M__c = true;
-                if (String.isBlank(tempTender.Overstep_12M_infofile__c)) {
-                    tempTender.Overstep_12M_infofile__c = bidInfoFile.infoAddress__c;
-                } else {
-                    if (!tempTender.Overstep_12M_infofile__c.contains(bidInfoFile.infoAddress__c)) {
-                        // List<String> urlList = singleFile.split(',');
-                        tempTender.Overstep_12M_infofile__c += bidInfoFile.infoAddress__c + ',';
-                    }
-                }
-                updateTenderList.add(tempTender);
+            // // 瀛樻斁瓒呰繃12M鐨勯檮浠�
+            // List<Attachment> TenOtherAttList = new List<Attachment>();
+            // // 瀛樻斁鎵�鏈夐檮浠�
+            // List<String> FileList = new List<String>();
+            // // 濡傛灉鏂囦欢澶у皬瓒呰繃12M鏇存柊
+            // List< Tender_information__c> updateTenderList = new  List< Tender_information__c>();
+            // // 鑾峰彇鎺ュ彛3涓暟鎹�
+            // NFMUtil.response503 response = NFMUtil.getFileData(token, bidInfoFile.infoAddress__c);
+            //UP TO NEW  AWS method sushanhu start 20220301
+            // List< Tender_information__c> updateTenderList = new  List< Tender_information__c>();
+            List<FileAddress__c> fileList = new List<FileAddress__c>();
+            PIHelper.piIntegration pi =PIHelper.getPIIntegrationInfo('NFM503');
+            transUrl =pi.searchUrl;
+            NFMUtil.response response = NFMUtil.getAWSQLMData(pi.newUrl ,JSON.serialize(queryfileList), token);
+            system.debug('aws result'+response.responseBody);
+        
+            Map<String, Object> result = (Map<String, Object>)JSON.deserializeUntyped(response.responseBody);
+            system.debug('NFM503 aws result--'+response.responseBody+'status'+response.status);
+            transId =(String)result.get('txId');
+            //UP TO NEW  AWS method sushanhu start 20220301 
+            // 鏂板緱瀛樺偍 涓嶉渶瑕佸垽鏂枃浠惰秴杩�12m
+            // // 鏂囦欢澶у皬瓒呰繃12M
+            // if (response.Name.equals('鏂囦欢澶у皬瓒呰繃12M')) {
+            //     id tendID = bidInfoFile.Tender_information__c;
+            //     Tender_information__c tempTender = new Tender_information__c();
+            //     tempTender.id = tendID;
+            //     tempTender.File_Surpass_12M__c = true;
+            //     if (String.isBlank(tempTender.Overstep_12M_infofile__c)) {
+            //         tempTender.Overstep_12M_infofile__c = bidInfoFile.infoAddress__c;
+            //     } else {
+            //         if (!tempTender.Overstep_12M_infofile__c.contains(bidInfoFile.infoAddress__c)) {
+            //             // List<String> urlList = singleFile.split(',');
+            //             tempTender.Overstep_12M_infofile__c += bidInfoFile.infoAddress__c + ',';
+            //         }
+            //     }
+            //     updateTenderList.add(tempTender);
+            // }
+            // // 灏嗚幏鍙栧埌鐨勬暟鎹瓨鎴愰檮浠�
+            // Attachment WebAtt = new Attachment();
+            // WebAtt.ParentId = bidInfoFile.Tender_information__c;
+            // WebAtt.Body = response.responseBody;
+            // WebAtt.Name = bidInfoFile.Tender_information__r.InfoType__c + ':' + response.Name;
+            // if (!response.Name.equals('鏂囦欢澶у皬瓒呰繃12M')) {
+            //     TenOtherAttList.add(WebAtt);
+            // }
+            // sp = Database.setSavepoint();
+
+            // if (updateTenderList.size() > 0) {
+            //     update updateTenderList;
+            // }
+
+            // System.debug('----1----' + TenOtherAttList);
+            // if (TenOtherAttList.size() > 0 ) {
+            //     upsert TenOtherAttList;
+            // }
+
+            // bidInfoFileList[0].isProcessed__c = true;
+            // bidInfoFileList[0].ErrorMessage__c = '';
+
+            // update bidInfoFileList;
+            // if (System.Test.isRunningTest()) {
+            //     throw new ControllerUtil.myException('aaa');
+            // }
+            // return;
+            String statusCode =String.valueOf(result.get('status')) ;
+            system.debug('statuscode aws-- '+statusCode);
+            if (!'0'.equals(statusCode)) {
+                System.debug('response.responseBody:' + response.responseBody);
+                return;
             }
-            // 灏嗚幏鍙栧埌鐨勬暟鎹瓨鎴愰檮浠�
-            Attachment WebAtt = new Attachment();
-            WebAtt.ParentId = bidInfoFile.Tender_information__c;
-            WebAtt.Body = response.responseBody;
-            WebAtt.Name = bidInfoFile.Tender_information__r.InfoType__c + ':' + response.Name;
-            if (!response.Name.equals('鏂囦欢澶у皬瓒呰繃12M')) {
-                TenOtherAttList.add(WebAtt);
-            }
+            Map<String, Object> fileMap = (Map<String, Object >)result.get('object');
+            system.debug('fileMap'+fileMap.toString());
+            Map<String, Object> fileVO =(Map<String, Object>)fileMap.get(bidInfoFile.infoAddress__c);
+
+            String Name =(String)fileVO.get('name');
+            // if (Name.equals('鏂囦欢澶у皬瓒呰繃12M')) {
+            //     id tendID = bidInfoFile.Tender_information__c;
+            //     Tender_information__c tempTender = new Tender_information__c();
+            //     tempTender.id = tendID;
+            //     tempTender.File_Surpass_12M__c = true;
+            //     if (String.isBlank(tempTender.Overstep_12M_infofile__c)) {
+            //         tempTender.Overstep_12M_infofile__c = bidInfoFile.infoAddress__c;
+            //     } else {
+            //         if (!tempTender.Overstep_12M_infofile__c.contains(bidInfoFile.infoAddress__c)) {
+            //             // List<String> urlList = singleFile.split(',');
+            //             tempTender.Overstep_12M_infofile__c += bidInfoFile.infoAddress__c + ',';
+            //         }
+            //     }
+            //     updateTenderList.add(tempTender);
+            // }
+           
+            //灏嗚幏鍙栫殑AWS鏂囦欢鍦板潃瀛樺偍
+            FileAddress__c file = new FileAddress__c();
+            file.ParentRecordId__c = bidInfoFile.Tender_information__c;
+            file.FileName__c = bidInfoFile.Tender_information__r.InfoType__c + ':' + Name;
+            file.DownloadLink__c =pi.undeleteUrl+(String)fileVO.get('key')+'&fileName='+file.FileName__c;
+            file.ViewLink__c = pi.queryUrl+(String)fileVO.get('key');
+            file.AWS_File_Key__c =(String)fileVO.get('key');
+            fileList.add(file);
             sp = Database.setSavepoint();
 
-            if (updateTenderList.size() > 0) {
-                update updateTenderList;
-            }
-
-            System.debug('----1----' + TenOtherAttList);
-            if (TenOtherAttList.size() > 0 ) {
-                upsert TenOtherAttList;
+            System.debug('----1----' + fileList);
+            if (fileList.size() > 0 ) {
+                upsert fileList;
             }
 
             bidInfoFileList[0].isProcessed__c = true;
             bidInfoFileList[0].ErrorMessage__c = '';
 
             update bidInfoFileList;
+            // add 纭浜嬪姟 sushanhu 20220302 start
+            List<String> sfRecordIds = new List<String>();
+			for (FileAddress__c fileAddress : fileList) {
+				sfRecordIds.add(fileAddress.Id);
+                system.debug('fileAddress.Id---'+fileAddress.Id);
+			}
+            system.debug('鎴愬姛鐨則oken'+token);
+            
+             PIHelper.confirmFileTrans('NFM503',1,JSON.serialize(sfRecordIds),transId,token,transUrl);
+			
+            // if (!confirm) {
+			// 	//鍥炴粴
+            //     if (sp != null) {
+            //         Database.rollback(sp);
+            //     }
+			// }
+            // add 纭浜嬪姟 sushanhu 20220302 end
             if (System.Test.isRunningTest()) {
                 throw new ControllerUtil.myException('aaa');
             }
@@ -120,7 +215,12 @@
             if (sp != null) {
                 Database.rollback(sp);
             }
+            //add 纭浜嬪姟 20220302 sushanhu start
+            system.debug('澶辫触鐨則oken'+token);
+             PIHelper.confirmFileTrans('NFM503',0,'',transId,token,transUrl);
+            //add 纭浜嬪姟 20220302 sushanhu end
             bidInfoFile.ErrorMessage__c = '503鎶涘嚭寮傚父锛�' + ex.getMessage() + '\n' + ex.getStackTraceString();
+            system.debug('ErrorMessage'+bidInfoFile.ErrorMessage__c);
         }
         update bidInfoFile;
     }
diff --git a/force-app/main/default/classes/NFM606Controller.cls b/force-app/main/default/classes/NFM606Controller.cls
index 25f5159..9f5cd05 100644
--- a/force-app/main/default/classes/NFM606Controller.cls
+++ b/force-app/main/default/classes/NFM606Controller.cls
@@ -5,7 +5,10 @@
 public without sharing class NFM606Controller {
 
     public static String logstr;
-    public static String status;      
+    public static String status;  
+    //add aws respnse sushanhu 20220228 start
+    public static String responseBody;  
+    //add aws respnse sushanhu 20220228 end
     private static final String LOG_TYPE = 'NFM606';
     private static final String API = '/admin/api/user/save';
     public class NFM606 {
@@ -33,6 +36,9 @@
         public String AgentCode; //缁忛攢鍟嗙紪鐮�
         public String AgentUserType; //浜哄憳绫诲瀷
         public String Email; //鐢靛瓙閭欢
+        //add aws pi start sushanhu 20220228
+        public String DataId;//aws 瀛樺偍鍑嵁
+        //add aws pi end sushanhu 20220228
 
     }
 
@@ -104,6 +110,7 @@
             Account.ParentId,
             Account.Parent.ParentId,
             UniqueNumber__c,
+            AWS_Data_Id__c,
             Name, Email from Contact where id in: conIdList AND RecordTypeId != '01210000000QtkyAAC'
         ];
         String logstr = iflog.Log__c + ' ' + 'NumberOfRecord=' + conList.size() + '\n';
@@ -112,6 +119,9 @@
                 String flag = '';
                 GeData ged = new GeData();
                 ged.ContactId = String.isBlank(con.UnifiedI_Contact_ID__c) ? '':con.UnifiedI_Contact_ID__c; //鏅烘収鍖荤枟ID
+                //update to AWS_UnifiedI_Contact_ID__c sushanhu 20220228 start
+                //ged.ContactId = String.isBlank(con.) ? '':con.AWS_UnifiedI_Contact_ID__c; //AWS 鏅烘収鍖荤枟ID
+                ////update to AWS_UnifiedI_Contact_ID__c sushanhu 20220228 end
                 ged.ServiceUserId = String.isBlank(con.ServicePlatformCode__c) ? '':con.ServicePlatformCode__c; //鏈嶅姟骞冲彴鐢ㄦ埛ID???
                 ged.Mobile = String.isNotBlank(con.UniqueNumber__c) ? con.UniqueNumber__c:con.MobilePhone;//鎵嬫満
                 ged.PersonManagementCode = con.CManageCode__c; //浜哄憳绠$悊缂栫爜
@@ -143,6 +153,7 @@
                     ged.AgentFlag = true;//缁忛攢鍟�
                     ged.Email = con.Email;
                 }
+                ged.DataId =con.AWS_Data_Id__c;//add aws 瀛樺偍鍑嵁
                 ged = getStateAndCity(ged,con);
                 gds.GeData.add(ged);
 
@@ -259,17 +270,32 @@
         try {
             
             
-            // 鍙戝線PO 
-            status = NFMUtil.sendToSapRet(rowDataStr, NFMUtil.NFM606_ENDPOINT);
-            System.debug('NFM606Log--status->'+ status);
-            // status = ''
-            if ('Accepted'.equals(status)) {
+            // // 鍙戝線PO 
+            // status = NFMUtil.sendToSapRet(rowDataStr, NFMUtil.NFM606_ENDPOINT);
+            // System.debug('NFM606Log--status->'+ status);
+            // // status = ''
+            // if ('Accepted'.equals(status)) {
+            //     logstr += status+'\n';
+            //     rowDataSFDC.retry_cnt__c = 0;
+            // } 
+            // else {
+            //     rowDataSFDC = NFMUtil.LogAutoSend(rowDataSFDC, null, status);
+            // }
+            //update to aws 20220228 sushanhu satrt 
+            PIHelper.PIIntegration pi =PIHelper.getPIIntegrationInfo('NFM606');
+            NFMUtil.response result =NFMUtil.sendToPiAWS(rowDataStr,pi.newUrl,pi.token);
+            system.debug('aws result---'+result);
+            responseBody=result.responseBody;
+            //Map<String, Object> res = (Map<String, Object>)JSON.deserializeUntyped(responseBody);
+            //status=(String)res.get(status);
+            if ('202'.equals(result.status)) {
                 logstr += status+'\n';
-                rowDataSFDC.retry_cnt__c = 0;
-            } 
+                     rowDataSFDC.retry_cnt__c = 0;
+            }
             else {
                 rowDataSFDC = NFMUtil.LogAutoSend(rowDataSFDC, null, status);
             }
+            //update to aws 20220228 sushanhu end
         } catch (Exception ex) {
             // TODO IOException
              // 寮傚父閲嶅彂
diff --git a/force-app/main/default/classes/NFM607Rest.cls b/force-app/main/default/classes/NFM607Rest.cls
index f75adf2..56ca865 100644
--- a/force-app/main/default/classes/NFM607Rest.cls
+++ b/force-app/main/default/classes/NFM607Rest.cls
@@ -3,7 +3,13 @@
  */
 @RestResource(urlMapping = '/NFM607/*')
 global with sharing class NFM607Rest {
+    //add to AWS 鍥炲 start sushanhu 20220225 
+    static Boolean SFStatus=true;
+    static String SFMessage='';
+   //add to AWS 鍥炲 end sushanhu 20220225 
     private static final String LOG_TYPE = 'NFM607';
+    //add Response to aws 20220221 add sushanhu
+    static NFMUtil.NFMResponse result = new NFMUtil.NFMResponse();
 
     global class GeData {
         public String mngCd; //  ASE绠$悊缂栫爜
@@ -21,10 +27,20 @@
         public String activityStartTime; //娲诲姩寮�濮嬫椂闂�
         public String activityEndTime; //娲诲姩缁撴潫鏃堕棿
         public String workDesc; //宸ヤ綔鎻忚堪
-        //add             wangweipeng         2022/02/14      start
+        // add 鍔犲瘑瀛楁绱㈠紩 add 20220210
+        public String DataId; //鍔犲瘑瀛楁绱㈠紩
+        //add 鍔犲瘑瀛楁瀵嗘枃 20220210
+        public String customerNmEncrypted; 
+           //add             wangweipeng         2022/02/14      start
         public String customerTel;//瀹㈡埛鎵嬫満鍙风爜
         public String workPlace;//宸ヤ綔鍦烘墍
-        //add             wangweipeng         2022/02/14      end
+           //add             wangweipeng         2022/02/14      end
+        //add 20220216 sushanhu start   
+        public String customerTelEncrypted;
+        public String workPlaceEncrypted;
+        // add 20220216 sushanhu end
+
+
     }
 
     @HttpPost
@@ -32,7 +48,7 @@
         // 鍙栧緱鎺ュ彛浼犺緭鍐呭
         String strData = RestContext.request.requestBody.toString();
         List < GeData > ges = (List < GeData > ) JSON.deserializeStrict(strData, List < GeData > .class);
-
+        system.debug('ges---'+ges);
         if (ges == null) {
             return;
         }
@@ -52,8 +68,16 @@
         RestResponse res = RestContext.response;
         res.addHeader('Content-Type', 'application/json');
         res.statusCode = 200;
-        String jsonResponse = '{"status": "Success", "Message":"鎴愬姛"}';
-        res.responseBody = Blob.valueOf(jsonResponse);
+        // String jsonResponse = '{"status": "Success", "Message":"鎴愬姛"}';
+        // res.responseBody = Blob.valueOf(jsonResponse);
+        //updata response toAWS 20220225 sushanhu start
+        NFMUtil.NFMResponse result = NFMUtil.getNFMResponse();
+        result.SFStatus=SFStatus;
+        result.SFMessage=SFMessage;
+        String jsonResponse =JSON.serialize(result);
+        system.debug('result---'+jsonResponse);
+        res.responseBody = blob.valueOf(jsonResponse);
+        //updata response toAWS 20220225 sushanhu end
         return;
 
     }
@@ -105,7 +129,7 @@
                 if (String.isNotBlank(ged.departmentCd)) {
                     accountCodeList.add(ged.departmentCd);
                 }
-                
+                system.debug('date---'+Date.valueOf(ged.activityDailyDate));
                 dateCalendarMap.put(Date.valueOf(ged.activityDailyDate), null);
 
             }
@@ -166,11 +190,17 @@
                     ASEAct.VisitStaff__c = ged.customerNm;
                     ASEAct.ReporterASE__c = contactId;//鎶ュ憡鑰�
                     ASEAct.DurationInMinutes__c =  getDurationInMinutes(ged);//鎸佺画鏃堕棿鍒嗛挓
+                    activityIDStr += ged.activityID +'\n';
                     //add             wangweipeng         2022/02/14      start
                     ASEAct.CustomerTel__c = ged.customerTel;//瀹㈡埛鎵嬫満鍙风爜
                     ASEAct.WorkPlace__c = ged.workPlace;//宸ヤ綔鍦烘墍
                     //add             wangweipeng         2022/02/14      end
-                    activityIDStr += ged.activityID +'\n';
+                    ASEAct.AWS_Data_Id__c =ged.DataId;//鍔犲瘑绱㈠紩 20220207
+                    ASEAct.VisitStaffEncrypt__c=ged.customerNmEncrypted;//瀵嗘枃 20220207
+                   //add sushanhu 2022/02/16 sart
+                   ASEAct.CustomerTel_Encrypted__c=ged.customerTelEncrypted;
+                   ASEAct.WorkPlace_Encrypted__c =ged.workPlaceEncrypted;
+                    //add sushanhu 2022/02/16 end
                     upsertASEList.add(ASEAct);
                 }
 
@@ -329,9 +359,17 @@
         if (String.isBlank(ged.visitDistinction) ) {
             result += 'DataError:  鎷滆鍖哄垎 [ visitDistinction ] is null!\n';
         }
+        // if (String.isBlank(ged.DataId) ) {
+        //     result += 'DataError:  鍔犲瘑绱㈠紩 [ DataId ] is null!\n';
+        // }
+        // if (String.isBlank(ged.customerNmEncrypted)) {
+        //     result += 'DataError:  瀹㈡埛濮撳悕瀵嗘枃 [ customerNmEncrypted ] is null!\n';
+        // }
+        
         if (String.isNotBlank(activityID) && String.isNotBlank(result)) {
             result = activityID + result;
         }
+        
         return result;
     }
 
diff --git a/force-app/main/default/classes/NFM612Rest.cls b/force-app/main/default/classes/NFM612Rest.cls
index 4690f58..2a76d75 100644
--- a/force-app/main/default/classes/NFM612Rest.cls
+++ b/force-app/main/default/classes/NFM612Rest.cls
@@ -1,5 +1,9 @@
 @RestResource(urlMapping = '/NFM612/*')
 global with sharing class NFM612Rest {
+    //add to AWS 鍥炲 start sushanhu 20220225 
+    static Boolean SFStatus=true;
+    static String SFMessage='';
+   //add to AWS 鍥炲 end sushanhu 20220225 
     public static final String LOG_TYPE = 'NFM612';
     global class GeData {
         public RepairOderInfo repairOderInfo;
@@ -14,7 +18,10 @@
         public String departmentCd; //鎶ヤ慨绉戝缂栫爜
         public String repairApplyPerson; //鎶ヤ慨浜虹敤鎴风紪鐮�
         public String repairApplicantName; //鎶ヤ慨浜哄鍚�
+        public String repairApplicantNameEncrypted; //鎶ヤ慨浜哄鍚嶅瘑鏂� add20220214
         public String repairApplyPersonTel; //鎶ヤ慨浜鸿仈绯讳汉鐢佃瘽
+        public String repairApplyPersonTelEncrypted;//淇濅慨浜鸿仈绯荤數璇� 瀵嗘枃 add 20220214
+        public String DataId;//aws 瀛樺偍鍑瘉 add 20220214 
         public String repairApplyType; // 鎶ヤ慨浜哄矖浣�
         public String equipmentCategory; //璁惧澶х被
         public String assetType; //璁惧绫诲瀷
@@ -88,8 +95,16 @@
         res.addHeader('Content-Type', 'application/json');
         res.statusCode = 200;
         //String jsonResponse = '{"status": "Success", "Message":'  + gedata + '}';
-        String jsonResponse = '{"status": "Success", "Message":"鎴愬姛"}';
-        res.responseBody = Blob.valueOf(jsonResponse);
+        // String jsonResponse = '{"status": "Success", "Message":"鎴愬姛"}';
+        // res.responseBody = Blob.valueOf(jsonResponse);
+         //updata response toAWS 20220225 sushanhu start
+         NFMUtil.NFMResponse result = NFMUtil.getNFMResponse();
+         result.SFStatus=SFStatus;
+         result.SFMessage=SFMessage;
+         String jsonResponse =JSON.serialize(result);
+         system.debug('result---'+jsonResponse);
+         res.responseBody = blob.valueOf(jsonResponse);
+         //updata response toAWS 20220225 sushanhu end
         return;
     }
     @future(callout = true)
@@ -220,7 +235,9 @@
                     repair.EndTimeThird__c = NFMUtil.parseStr2DateTime(ged.repairOderInfo.endTimeThird); //涓夋涓婇棬缁撴潫鏃堕棿
                     repair.FaultDescriptionThird__c = ged.repairOderInfo.faultDescriptionThird; //涓夋鏁呴殰鎻忚堪
                     repair.ApplicantType__c = ged.repairOderInfo.applicantType; //鐢宠淇悊浜虹被鍨�
-
+                    repair.RepairApplicantName_Encrypted__c =ged.repairOderInfo.repairApplicantNameEncrypted; //鎶ヤ慨浜哄鍚嶅瘑鏂� add 20220214
+                    repair.RepairApplicantTel_Encrypted__c = ged.repairOderInfo.repairApplyPersonTelEncrypted;//淇濅慨浜鸿仈绯荤數璇濆瘑鏂� add 20220214
+                    repair.AWS_Data_Id__c =ged.repairOderInfo.DataId;//AWS 瀛樺偍鍑瘉 add 20220214
                     // repair.Applicant__c = canidMap.get(ged.repairOderInfo.applicantId).Id; //鐢宠淇悊浜虹紪鍙�
                     repair.Applicanter__c = personMap.get(ged.repairOderInfo.applicantId);//鐢宠淇悊浜虹紪鍙�
                     repair.ApplicationTime__c = NFMUtil.parseStr2DateTime(ged.repairOderInfo.applyDate); //鐢宠鏃堕棿
@@ -230,6 +247,8 @@
                     repair.AirframeCodeEngineer__c = ged.applyRepairInfo.equipmentCd; //鏈鸿韩缂栫爜(宸ョ▼甯�)
                     repair.ResponseResultDesc__c = ged.applyRepairInfo.responseResultDesc; //搴斿鎻忚堪
                     repair.ProcessResult__c = ged.applyRepairInfo.processResult; //澶勭悊缁撴灉
+                    
+
                     if ('闂宸茶В鍐�'.equals(ged.applyRepairInfo.processResult)) {
                         repair.Status__c = '鍏抽棴';
                     } else {
@@ -308,7 +327,7 @@
                         SELECT id, CManageCode__c,Employee_No_manual__c 
                         FROM Contact 
                         WHERE CManageCode__c IN: rpersonList OR Employee_No_manual__c IN:rpersonList];
-        Map < String, Id > contactMap = new Map < String, Id > ();
+        Map < String, Id > contactMap = new Map < String, Id > ();        
         for (Contact con: couList) {
             contactMap.put(con.CManageCode__c, con.Id);
             if (String.isNotBlank(con.Employee_No_manual__c)) {
diff --git a/force-app/main/default/classes/NFM620Rest.cls b/force-app/main/default/classes/NFM620Rest.cls
index 022d46c..6c67bbd 100644
--- a/force-app/main/default/classes/NFM620Rest.cls
+++ b/force-app/main/default/classes/NFM620Rest.cls
@@ -10,7 +10,10 @@
 @RestResource(urlMapping = '/NFM620/*')
 global with sharing class NFM620Rest {
     //鏂板NFM620Rest 鍟嗗搧璇㈤棶鍗曟帴鏀舵暟鎹帴鍙� 绮剧悽鎶�鏈� start
-
+   //add to AWS 鍥炲 start sushanhu 20220225 
+   static Boolean SFStatus=true;
+   static String SFMessage='';
+  //add to AWS 鍥炲 end sushanhu 20220225 
     global class GeDatas {
         public NFMUtil.Monitoring Monitoring;
         public  GeData[] GeData;
@@ -26,6 +29,9 @@
         public String Request;                   // 濮旀墭浜嬮」
         public String RequestDetail;             // 濮旀墭浜嬮」璇︾粏
         public String ApproverID;                // 瀹℃牳浜哄憳鍛樺伐缂栫爜
+        public String ContactWayEncrypted;         //鑱旂郴鏂瑰紡瀵嗘枃 for pi
+        public String DataId;                      //AWS 鍔犲瘑鍑嵁
+        public Integer ContactType;                 //鑱旂郴鏂瑰紡 1涓洪偖绠� 2涓虹數璇�
     }
 
     @HttpPost
@@ -34,7 +40,7 @@
         // 鍙栧緱鎺ュ彛浼犺緭鍐呭
         String strData = RestContext.request.requestBody.toString();
         GeDatas ges = (GeDatas) JSON.deserializeStrict(strData, GeDatas.class);
-
+        system.debug('rquest----'+strData);
         if (ges == null ) {
             return;
         }
@@ -53,8 +59,16 @@
         RestResponse res = RestContext.response;
         res.addHeader('Content-Type', 'application/json');
         res.statusCode = 200;
-        String jsonResponse = '{"status": "Success", "Message":""}';
+        // String jsonResponse = '{"status": "Success", "Message":""}';
+        // res.responseBody = blob.valueOf(jsonResponse);
+        //updata response toAWS 20220225 sushanhu start
+        NFMUtil.NFMResponse result = NFMUtil.getNFMResponse();
+        result.SFStatus=SFStatus;
+        result.SFMessage=SFMessage;
+        String jsonResponse =JSON.serialize(result);
+        system.debug('result---'+jsonResponse);
         res.responseBody = blob.valueOf(jsonResponse);
+        //updata response toAWS 20220225 sushanhu end
         return;
     }
 
@@ -128,7 +142,7 @@
                 if (String.isNotBlank(geData.Campaign)) {
                     camNoList.add(geData.Campaign);
                 }
-
+                
                 geDataListNew.add(geData);
             }
             //浣跨敤缁熶竴鐢ㄦ埛ID鑾峰彇绉戝銆佹垬鐣ョ瀹ゅ垎绫汇�佺敤鎴峰鍚嶅苟瀛樺叆Map
@@ -177,12 +191,9 @@
                     }
                 }
             }
-            
-            
-
             // 灏哫ML鍚勬暟鎹」鏇存柊鍒板晢鍝佽闂崟瀵硅薄涓�
             for (GeData geData : geDataListNew) {
-
+                    
                 Inquiry_form__c inquiry = new Inquiry_form__c();
 
                 inquiry.ComPlat_Name__c = geData.Name;                                       //璇㈤棶鍗曞悕绉�
@@ -194,24 +205,26 @@
                 inquiry.ContactId__c = geData.ContactId;                          //缁熶竴鐢ㄦ埛ID
                 if (String.isNotBlank(ownerMap.get(geData.ApproverID))){
                     inquiry.OwnerId = ownerMap.get(geData.ApproverID);            //鎵�鏈変汉
-                }
+                }          
+                inquiry.AWS_Data_Id__c =geData.DataId;                              //AWS鍔犲瘑鍑嵁 add 200220214
                 
+
                 //濮旀墭浜嬮」鍙栧�煎悗鎷嗗垎
                 List<String> requestList = geData.Request.split(';');
                 String request1 = '';
                 for (String req11 : requestList) {
                     request1 += NFMUtil.getMapValue(transferMap, 'Request1__c', req11, iflog) + ';';
-                }
+                }                                   
                 inquiry.Request1__c = request1.substring(0, request1.length() - 1);  //濮旀墭浜嬮」
-
+                
                 //浣跨敤缁熶竴鐢ㄦ埛ID鑾峰彇绉戝銆佹垬鐣ョ瀹ゃ�佸鎴峰鍚�
                 if (conInfoMap.containsKey(geData.ContactId)) {
                     Contact contact = conInfoMap.get(geData.ContactId);
-                    inquiry.Hospital_Name__c = contact.Account.Id;                    //绉戝鍚�
-                    //inquiry.Department_Class__c = contact.Strategic_dept_Class__c;    //鎴樼暐绉戝鍒嗙被
+                    inquiry.Hospital_Name__c = contact.Account.Id;                    //绉戝鍚�    
+                    // inquiry.Department_Class__c = contact.Strategic_dept_Class__c;    //鎴樼暐绉戝鍒嗙被
                     inquiry.Contact_Name__c = contact.Id;                             //瀹㈡埛濮撳悕
-                    //inquiry.OwnerId = contact.Strategic_dept_Class__r.OwnerId;        //鎵�鏈変汉
-                }
+                    // inquiry.OwnerId = contact.Strategic_dept_Class__r.OwnerId;        //鎵�鏈変汉
+                } 
                 //浣跨敤甯傚満娲诲姩缂栫爜鑾峰彇甯傚満娲诲姩ID
                 if (String.isNotBlank(geData.Campaign)) {
                     if (String.isNotBlank(camInfoMap.get(geData.Campaign))) {
@@ -219,19 +232,24 @@
                         inquiry.LeadSource__c = '瀛︿細浼氳';                    //璇㈤棶鍗曟潵婧�
                     } else {
                         iflog.ErrorLog__c += geData.InquiryNo + '锛氬競鍦烘椿鍔ㄧ紪鐮佷笉瀛樺湪銆俓n';
-                        continue;
+                        continue;                              
                     }
                 } else {
                     inquiry.LeadSource__c = '鏅烘収鍖荤枟';                 //璇㈤棶鍗曟潵婧�
                 }
-                logstr += '鍜ㄨ鍗曟潵婧�:' + inquiry.LeadSource__c + '\n';
+                logstr += '鍜ㄨ鍗曟潵婧�:' + inquiry.LeadSource__c + '\n';                               
                 //鑱旂郴鏂瑰紡鐨勫�兼槸鍚﹀寘鍚獲鏉ュ垽鏂槸閭杩樻槸鐢佃瘽
-                if (geData.ContactWay.contains('@')) {
+                if (geData.ContactType==1) {
                     inquiry.Phone__c = '';                            //鐢佃瘽
+                    inquiry.Phone_Encrypted__c='';                     //鐢佃瘽瀵嗘枃 add 20220214
                     inquiry.Email__c = geData.ContactWay;             //閭
+                    inquiry.Email_Encrypted__c =geData.ContactWayEncrypted; //閭瀵嗘枃 add 20220214
+
                 } else {
                     inquiry.Phone__c = geData.ContactWay;
                     inquiry.Email__c = '';
+                    inquiry.Email_Encrypted__c = ''; //閭瀵嗘枃 add 20220214
+                    inquiry.Phone_Encrypted__c=geData.ContactWayEncrypted;    //鐢佃瘽瀵嗘枃 add 20220214
                 }
 
                 if (String.isNotBlank(inqInfoMap.get(geData.InquiryNo))) {
diff --git a/force-app/main/default/classes/NFM623Rest.cls b/force-app/main/default/classes/NFM623Rest.cls
index 5f627ff..09e050f 100644
--- a/force-app/main/default/classes/NFM623Rest.cls
+++ b/force-app/main/default/classes/NFM623Rest.cls
@@ -9,6 +9,10 @@
 *************************************************************************/
 @RestResource(urlMapping = '/NFM623/*')
 global with sharing class NFM623Rest {
+     //add to AWS 鍥炲 start sushanhu 20220225 
+     static Boolean SFStatus=true;
+     static String SFMessage='';
+    //add to AWS 鍥炲 end sushanhu 20220225 
     //鏂板NFM623Rest 瀛︿細路娲诲姩鍙傚姞浜哄憳鎺ユ敹鏁版嵁鎺ュ彛 绮剧悽鎶�鏈� start
 
     global class GeDatas {
@@ -19,14 +23,14 @@
     global class GeData {
         public String Num;                              // 娲诲姩缂栫爜
         public String Name;                             // 娲诲姩鍚嶇О
-        public ViewContactIdS[] ViewContactIdS;
+        public ViewContactIdS[] ViewContactIdS;      //鏇挎崲涓篴ws瀛樺偍鍑嵁ID 20220225 sushanhu
         public LabelTypeS[] LabelTypeS;
     }
 
     global class ViewContactIdS {
     	public String ViewContactId;                     // 鐩存挱瑙傜湅缁熶竴鐢ㄦ埛ID  
     }
-
+    
     global class LabelTypeS {
     	public String LabelType;                         // 鏍囩鍒嗙被
     	public String Label;                             // 鏍囩鍐呭 
@@ -34,7 +38,7 @@
 
     @HttpPost
     global static void execute() {
-
+       
         // 鍙栧緱鎺ュ彛浼犺緭鍐呭
         String strData = RestContext.request.requestBody.toString();
         GeDatas ges = (GeDatas) JSON.deserializeStrict(strData, GeDatas.class);
@@ -57,8 +61,16 @@
         RestResponse res = RestContext.response;
         res.addHeader('Content-Type', 'application/json');
         res.statusCode = 200;
-        String jsonResponse = '{"status": "Success", "Message":""}';
+        // String jsonResponse = '{"status": "Success", "Message":""}';
+        // res.responseBody = blob.valueOf(jsonResponse);
+        //updata response toAWS 20220225 sushanhu start
+        NFMUtil.NFMResponse result = NFMUtil.getNFMResponse();
+        result.SFStatus=SFStatus;
+        result.SFMessage=SFMessage;
+        String jsonResponse =JSON.serialize(result);
+        system.debug('result---'+jsonResponse);
         res.responseBody = blob.valueOf(jsonResponse);
+        //updata response toAWS 20220225 sushanhu end
         return;
     }
 
@@ -119,7 +131,7 @@
             //浣跨敤缁熶竴鐢ㄦ埛ID鑾峰彇瀹㈡埛浜哄憳ID銆佸鎴蜂汉鍛樺鍚嶃�佸尰闄㈢瀹ゅ瓨鍏ap
             Map<String, Contact> contactMap = new Map<String, Contact>();
             List<String> conIDList = new List<String>();
-            if (conIDMapNew.size() > 0) {
+            if (conIDMapNew.size() > 0) {	
                 List<Contact> contactList = [select Id,Name,UnifiedI_Contact_ID__c,
                                             AccountId,Account.Name 
                                             from Contact where UnifiedI_Contact_ID__c in :conIDListNew];
@@ -130,6 +142,18 @@
                         conIDList.add(conInfo.Id);
                     }
                 } 
+                //update to 閫氳繃aws瀛樺偍鐨剈nified鏌ヨ start 20220225
+                // List<Contact> contactList = [select Id,Name,AWS_UnifiedI_Contact_ID__c,
+                //                             AccountId,Account.Name 
+                //                             from Contact where AWS_UnifiedI_Contact_ID__c in :conIDListNew];	
+                // if (contactList.size() > 0) {
+                //     //瀹㈡埛浜哄憳ID鑾峰彇鎴愬姛
+                //     for (Contact conInfo : contactList) {
+                //         contactMap.put(conInfo.AWS_UnifiedI_Contact_ID__c, conInfo);
+                //         conIDList.add(conInfo.Id);
+                //     }
+                // } 
+                //update to 閫氳繃aws瀛樺偍鐨剈nified鏌ヨ 20220225 end
             }
             //浣跨敤甯傚満娲诲姩缂栫爜鑾峰彇甯傚満娲诲姩ID鍜屾椿鍔ㄥ悕绉板瓨鍏ap
             List<String> camIDList = new List<String>();
@@ -155,7 +179,20 @@
                     camViewContactMap.put(cm.ViewContactId__c, cm.Campaign__r.Num__c);
                 }
             }
-
+            
+            //update to 鑾峰彇aws 缁熶竴鍑嵁鍏宠仈 sushanhu 20220225 satrt
+            // List<CampaignMember__c>  camMemberList = [select Id,Contact_ID__c,AWS_ViewContact_Id__c,
+            //                                             Campaign__c,Campaign__r.Num__c 
+            //                                             from CampaignMember__c where Campaign__c in : camIDList];
+            // Map<String, String> camContactMap = new Map<String, String>();
+            // Map<String, String> camViewContactMap = new Map<String, String>();
+            // if (camMemberList.size() > 0 ) {
+            //     for (CampaignMember__c cm : camMemberList) {
+            //         camContactMap.put(cm.Contact_ID__c, cm.Campaign__r.Num__c);
+            //         camViewContactMap.put(cm.AWS_ViewContact_Id__c, cm.Campaign__r.Num__c);
+            //     }
+            // }
+             //update to 鑾峰彇aws 缁熶竴鍑嵁鍏宠仈 sushanhu 20220225 end
             //灏嗗師鏈夋椿鍔ㄦ爣绛惧璞′腑甯傚満娲诲姩ID鍜屾爣绛炬椿鍔ㄥ悕绉板瓨鍏ap涓�
             List<CampaignLable__c> camLabInfoList = [select id,name,Campaign__c,Lable__c,LableType__c from CampaignLable__c where  Campaign__c in : camIDList];
             Map<String, String> camLabInfoMap = new Map<String, String>();
diff --git a/force-app/main/default/classes/NFM624Rest.cls b/force-app/main/default/classes/NFM624Rest.cls
index ad8dc2e..369f114 100644
--- a/force-app/main/default/classes/NFM624Rest.cls
+++ b/force-app/main/default/classes/NFM624Rest.cls
@@ -10,6 +10,10 @@
 
 @RestResource(urlMapping = '/NFM624/*')
 global with sharing class NFM624Rest {
+    //add to AWS 鍥炲 start sushanhu 20220225 
+    static Boolean SFStatus=true;
+    static String SFMessage='';
+   //add to AWS 鍥炲 end sushanhu 20220225
     private static final String LOG_TYPE = 'NFM624';
     // global class GeDatasRest {
     //     public GeDatas GeDatas;
@@ -21,13 +25,15 @@
     }
 
     global class GeData {
-        public String ContactId; //缁熶竴骞冲彴ID
+        public String ContactId; //缁熶竴骞冲彴ID//Update to aws 瀛樺偍鐨凙WSContactId 20220225 SUSHANHU
         public String ServiceUserId; //鏈嶅姟骞冲彴鐢ㄦ埛ID
         public String PersonManagementCode; //浜哄憳绠$悊缂栫爜 
         public String HospitalManagementCode2; //鍖婚櫌骞冲彴缂栫爜  骞冲彴缂栫爜 PlatformCode__c
         public String DepartmentManagementCode2; //绉戝骞冲彴缂栫爜  骞冲彴缂栫爜 PlatformCode__c
         public String Name; //濮撳悕
+        public String NameEncrypted;//濮撳悕瀵嗘枃 add 20220215
         public String Mobile; //鎵嬫満鍙风爜
+        public String MobileEncrypted;//鎵嬫満鍙风爜瀵嗘枃 add 20220215
         public String State; //鍗曚綅鎵�鍦ㄧ渷浠�
         public String City; //甯�
         public String AccountName; //鍖婚櫌鍚�
@@ -37,10 +43,12 @@
         public String RelatedDepartment; //鍏宠仈SFDC绉戝 瀹㈡埛绠$悊缂栫爜(鎵嬪啓) AgentCode_Ext__c
         public String Type; //鑱岀
         public String ContactAddress; //鑱旂郴鍦板潃
-        public Boolean ForbiddenStatus; //骞冲彴鐢ㄦ埛绂佺敤鏍囪瘑
+        public String ContactAddressEncrypted;//鑱旂郴鍦板潃瀵嗘枃
+        public Boolean ForbiddenStatus; //骞冲彴鐢ㄦ埛绂佺敤鏍囪瘑 
         public String RegSource; //娉ㄥ唽骞冲彴鏉ユ簮
         public Boolean AgentFlag; //缁忛攢鍟嗘爣璇�
         public String ApproverID; //瀹℃牳浜哄憳鍛樺伐缂栫爜
+        public String DataId;//aws瀛樺偍鍑嵁
     }
 
     @HttpPost
@@ -49,7 +57,7 @@
         // 鍙栧緱鎺ュ彛浼犺緭鍐呭
         String strData = RestContext.request.requestBody.toString();
         GeDatas ges = (GeDatas) JSON.deserializeStrict(strData, GeDatas.class);
-
+        system.debug('ges---'+ges);
 
         if (ges == null) {
             return;
@@ -71,8 +79,16 @@
         RestResponse res = RestContext.response;
         res.addHeader('Content-Type', 'application/json');
         res.statusCode = 200;
-        String jsonResponse = '{"status": "Success", "Message":""}';
-        res.responseBody = blob.valueOf(jsonResponse);
+        // String jsonResponse = '{"status": "Success", "Message":""}';
+        // res.responseBody = blob.valueOf(jsonResponse);
+         //updata response toAWS 20220225 sushanhu start
+         NFMUtil.NFMResponse result = NFMUtil.getNFMResponse();
+         result.SFStatus=SFStatus;
+         result.SFMessage=SFMessage;
+         String jsonResponse =JSON.serialize(result);
+         system.debug('result---'+jsonResponse);
+         res.responseBody = blob.valueOf(jsonResponse);
+         //updata response toAWS 20220225 sushanhu end
         return;
     }
 
@@ -130,7 +146,11 @@
         try { //鏍规嵁浼犺繃鏉ョ殑绠$悊缂栫爜鏌ヨ濡傛灉鍙互鏌ヨ寰楀埌缁撴灉鍒欐洿鏂帮紝鏌ヨ涓嶅埌鍒欐柊澧�
             List < Gedata > newGeDataList = new List < Gedata > ();
             for (Gedata gedata: GeDataList) {
-                string dataComplete = verify(gedata);
+                //for test
+                gedata.AgentFlag=false;
+                // string dataComplete = verify(gedata);
+                string dataComplete =null;
+                // test  end  for pi
                 if (!String.isBlank(dataComplete)) {
                     logstr += dataComplete;
                     rowData.Is_Error__c = 1;
@@ -282,12 +302,18 @@
                     ct.MobilePhone = gedata.Mobile;
                     ct.RegSource__c = comefrom;
                     ct.UnifiedI_Contact_ID__c = gedata.ContactId; //缁熶竴骞冲彴Id
+                    // //UPDATE TO AWS 瀛樺偍鐨勭粺涓�骞冲彴id
+                    // ct.AWS_UnifiedI_Contact_ID__c=gedata.ContactId; //缁熶竴骞冲彴Id
                     ct.ServicePlatformCode__c = gedata.ServiceUserId; //鏈嶅姟骞冲彴鐢ㄦ埛Id
                     ct.Contact_address__c = gedata.ContactAddress;//鑱旂郴鍦板潃
+                    ct.Contact_address_Encrypted__c=gedata.ContactAddressEncrypted;//鑱旂郴鍦板潃瀵嗘枃 add 20220215
                     ct.Platform_disabled_representation__c = gedata.ForbiddenStatus;//骞冲彴绂佺敤鏍囪瘑
                     //ct.IsFromPlatform__c = true; //鏉ヨ嚜鏅烘収鍖荤枟鍒涘缓
                     ct.Ignore_Same_Name__c = true; //涓嶆槸閲嶅鐨勫鎴峰悕 
                     //ct.SendToComPlat__c = true;
+                    ct.AWS_Data_Id__c =gedata.DataId;//add 20220215 aws瀛樺偍鍑瘉
+                    ct.MobilePhone_Encrypted__c =gedata.MobileEncrypted;//add 20220215 鎵嬫満瀵嗘枃
+                    ct.LastName_Encrypted__c =gedata.NameEncrypted;//add 20220215 濮撳悕瀵嗘枃
 
                     String personCode = gedata.PersonManagementCode;
 
@@ -518,11 +544,19 @@
         if (string.isblank(gda.Name)) {
             result += 'DataError锛氬鍚嶄负绌篭n';
         }
+        if (string.isblank(gda.NameEncrypted)) {
+            result += 'DataError锛氬鍚嶅瘑鏂囦负绌篭n';
+        }
         if (string.isblank(gda.Mobile)) {
             result += 'DataError锛氭墜鏈哄彿涓虹┖\n';
         }
+        if (string.isblank(gda.MobileEncrypted)) {
+            result += 'DataError锛氭墜鏈哄彿瀵嗘枃涓虹┖\n';
+        }
         if (string.isblank(gda.RegSource)) {
             result += 'DataError锛氭敞鍐屽钩鍙版潵婧愪负绌篭n';
+        }if (string.isblank(gda.DataId)) {
+            result += 'DataError锛欰WS鍔犲瘑鍑嵁涓虹┖\n';
         }
         if (gda.AgentFlag) {
             if (string.isblank(gda.PersonManagementCode)) {
@@ -618,12 +652,11 @@
         List<Inquiry_form__c> InquiryList = [select Id,Inquiry_No__c,ContactId__c,Hospital_Name__c,Department_Class__c,Contact_Name__c from Inquiry_form__c where ContactId__c = :ContactId];
         system.debug('InquiryList'+InquiryList);
         //鏍规嵁缁熶竴鐢ㄦ埛Id鏌ヨ鑱旂郴浜�
-        //select Id,Name,UnifiedI_Contact_ID__c,AccountId,Account.Name from Contact
         List<Contact> contactList = [select Id,Name,UnifiedI_Contact_ID__c,Account.Id,Strategic_dept_Class__c,AccountId,Account.Name,Strategic_dept_Class__r.OwnerId from Contact where UnifiedI_Contact_ID__c = :ContactId];
-        system.debug('contactList' + contactList);  
-        
+        system.debug('contactList' + contactList);
+
         if(InquiryList.size()>0){
-             //缁熶竴鐢ㄦ埛ID瀛樺叆List銆佽闂崟ID瀛楳ap
+            //缁熶竴鐢ㄦ埛ID瀛樺叆List銆佽闂崟ID瀛楳ap
             Map<String, String> inquiryMap = new Map<String, String>();
             //List<String> contactIdList = new List<String>();
             for (Inquiry_form__c inquiryInfo : inquiryList) {
@@ -649,7 +682,8 @@
         //琛ュ厖璇㈤棶鍗曢儴鍒� end
         
         //琛ュ厖瀛︿細閮ㄥ垎 start
-        List<CampaignMember__c> capMemList = [select Id,Contact_ID__c,Campaign__c,Campaign__r.Num__c,ViewContactId__c from CampaignMember__c where ViewContactId__c = :ContactId];
+        List<CampaignMember__c> campaignMemberList = new List<CampaignMember__c>();
+        List<CampaignMember__c> capMemList = [select Id,Contact_ID__c,Campaign__c,Campaign__r.Num__c,ViewContactId__c from CampaignMember__c where Contact_ID__c = :ContactId];
         if(capMemList.size() > 0){
             system.debug('capMemList=================>'+capMemList);
             Map<String, String> capMemMap = new Map<String, String>(); 
diff --git a/force-app/main/default/classes/NFM702Controller.cls b/force-app/main/default/classes/NFM702Controller.cls
index b28b3b8..a4064d7 100644
--- a/force-app/main/default/classes/NFM702Controller.cls
+++ b/force-app/main/default/classes/NFM702Controller.cls
@@ -39,6 +39,9 @@
         public String HcpNo;    //HPC缂栫爜
         public Boolean IsActive;    //鏄惁鏈夋晥
         public String UpdateStatus;     //鎿嶄綔绫诲瀷
+        // add by sushanhu 20220304 for pi satrt
+        public String DataId;           //aws 瀛樺偍鍑嵁 
+        // add by sushanhu 20220304 for pi end
     }
 
     @future(callout = true)
@@ -72,7 +75,8 @@
                                         Phone,      //鐢佃瘽
                                         HcpNo__c,       //HCP缂栫爜
                                         Isactive__c,    //鏄惁鏈夋晥
-                                        UpdateStatus__c            //鎿嶄綔绫诲瀷
+                                        UpdateStatus__c,            //鎿嶄綔绫诲瀷
+                                        AWS_Data_Id__c              //aws 瀛樺偍鍑嵁 add bysushanhu 20220304 for Pi
                                         from Contact WHERE Id IN:accIdList order by Id];  //AccountId
         String logstr = iflog.Log__c + ' ' + 'NumberOfRecord=' + conList.size() + '\n';
 
@@ -98,6 +102,7 @@
                 ged.HcpNo = con.HcpNo__c;
                 ged.IsActive = '鏈夋晥'.equals(con.Isactive__c)? true:false;
                 ged.UpdateStatus = con.UpdateStatus__c;
+                ged.DataId  =   con.AWS_Data_Id__c;//add by sushanhu  for pi 20220304
                 gds.GeData.add(ged);
             }
 
@@ -178,26 +183,56 @@
         }
         try {
 
-            NFMUtil.response response = NFMUtil.sendToSapStatusAndBody(rowDataStr, NFMUtil.NFM702_ENDPOINT);
-            System.debug('NFM702Log--status->'+ status);
+            // NFMUtil.response response = NFMUtil.sendToSapStatusAndBody(rowDataStr, NFMUtil.NFM702_ENDPOINT);
+            // System.debug('NFM702Log--status->'+ status);
 
+            // status = response.status;
+            // ResponseBody = response.responseBody;
+            // Response resultList = ( Response ) JSON.deserializeStrict(ResponseBody, Response.class);
+            // System.debug('NFM702Log--status->'+ ResponseBody);
+
+            // Result = resultList.Result.Result;
+
+            // if ('00'.equals(Result)) {
+            //     logstr += ResponseBody+'\n';
+            //     rowDataSFDC.retry_cnt__c = 0;
+            //     //iflog.Log__c = 'ok';
+            // } 
+            // else {
+            //     //iflog.Log__c = 'ok2';
+            //     rowDataSFDC = NFMUtil.LogAutoSend(rowDataSFDC, null, status);
+            // }
+            //update to AWS sushanhu FOR PI start 20220304 
+            PIHelper.PIIntegration pi =PIHelper.getPIIntegrationInfo('NFM702');
+            NFMUtil.response response = NFMUtil.sendToPiAWS(rowDataStr, pi.newUrl,pi.token);
+            
             status = response.status;
+            System.debug('NFM702Log--status->'+ status);
+           
             ResponseBody = response.responseBody;
-            Response resultList = ( Response ) JSON.deserializeStrict(ResponseBody, Response.class);
-            System.debug('NFM702Log--status->'+ ResponseBody);
-
-            Result = resultList.Result.Result;
-
-            if ('00'.equals(Result)) {
-                logstr += ResponseBody+'\n';
-                rowDataSFDC.retry_cnt__c = 0;
-                //iflog.Log__c = 'ok';
-            } 
-            else {
-                //iflog.Log__c = 'ok2';
+            System.debug('NFM702Log--responsebody->'+ ResponseBody);
+            if ('200'.equals(status)) {
+                //aws 姝g‘鍝嶅簲
+                // Response resultList = ( Response ) JSON.deserializeStrict(ResponseBody, Response.class);
+                Map<String, Object> result = (Map<String, Object>)JSON.deserializeUntyped(ResponseBody);
+                String statusCode =(String)result.get('status');
+    
+                if ('0'.equals(statusCode)) {
+                    logstr += ResponseBody+'\n';
+                    rowDataSFDC.retry_cnt__c = 0;
+                    //iflog.Log__c = 'ok';
+                } else {
+                    //iflog.Log__c = 'ok2';
                 rowDataSFDC = NFMUtil.LogAutoSend(rowDataSFDC, null, status);
+                }
             }
 
+            else {
+                
+                logstr=ResponseBody;
+                iflog.ErrorLog__c=ResponseBody;
+            }
+            //update to AWS sushanhu FOR PI  20220304 end
         }catch ( Exception ex ) {
            //鎵撳嵃閿欒鏃ュ織
            System.debug(Logginglevel.ERROR, LOG_TYPE + iflog.Name + ':' + ex.getMessage());
diff --git a/force-app/main/default/classes/NFMUtil.cls b/force-app/main/default/classes/NFMUtil.cls
index 0a73bdc..75592b4 100644
--- a/force-app/main/default/classes/NFMUtil.cls
+++ b/force-app/main/default/classes/NFMUtil.cls
@@ -78,7 +78,8 @@
             //NFM007_ENDPOINT = 'http://wdp.olympus.com.cn:8089/RESTAdapter/NFM007';
             NFM007_ENDPOINT = 'https://wdp.olympus.com.cn:44301/RESTAdapter/NFM007';
             NFM008_ENDPOINT = 'https://owdc-test.olympus.co.jp/XISOAPAdapter/MessageServlet?senderParty=&senderService=OCM_SFDC_T&receiverParty=&receiverService=&interface=NFM008_Sync_BC2GPI&interfaceNamespace=http%3A%2F%2Folympus.co.jp%2Fgpi%2FNFM008';
-            NFM103_ENDPOINT = 'http://wdp.olympus.com.cn:8089/RESTAdapter/NFM103';
+            // NFM103_ENDPOINT = 'http://wdp.olympus.com.cn:8089/RESTAdapter/NFM103';
+            NFM103_ENDPOINT = 'https://sfpi-mebg-test.olympuschina.com/api/nfm/103';//aws 103鎺ュ彛
             // NFM106_ENDPOINT = 'https://owdc-test.olympus.co.jp/XISOAPAdapter/MessageServlet?senderParty=&senderService=OCM_SFDC_T&receiverParty=&receiverService=&interface=NFM106_Sync_BC2GPI&interfaceNamespace=http%3A%2F%2Folympus.co.jp%2Fgpi%2FNFM106';
             NFM106_ENDPOINT = 'http://wdp.olympus.com.cn:8089/RESTAdapter/NFM106';
             //NFM106_ENDPOINT = 'https://sfdc-ocm-test.olympus.co.jp/XISOAPAdapter/MessageServlet?senderParty=&senderService=OCM_SFDC_T&receiverParty=&receiverService=&interface=NFM106_Sync_BC2GPI&interfaceNamespace=http%3A%2F%2Folympus.co.jp%2Fgpi%2FNFM106';
@@ -100,16 +101,16 @@
             NFM401_ENDPOINT = 'http://ec2-161-189-3-104.cn-northwest-1.compute.amazonaws.com.cn:8088/dojtest/dojInfo/recevie';
             NFM402_ENDPOINT = 'http://ec2-161-189-3-104.cn-northwest-1.compute.amazonaws.com.cn:8088/dojtest/dojInfo/getDojInfoByRefNo';
 
-            NFM501_ENDPOINT = 'http://cusdata.qianlima.com/v1/info/page/';
-            NFM502_ENDPOINT = 'http://cusdata.qianlima.com/v1/info/detailHtml?url=';
-            NFM504_ENDPOINT = 'http://cusdata.qianlima.com/v1/customer/albs/feedback';
+            // NFM501_ENDPOINT = 'http://cusdata.qianlima.com/test/v1/info/page/';
+            NFM501_ENDPOINT = 'https://sfpi-mebg-test.olympuschina.com/api/nfm/501';
+            NFM502_ENDPOINT = 'http://cusdata.qianlima.com/test/v1/info/detailHtml?url=';
+            NFM504_ENDPOINT = 'http://cusdata.qianlima.com/test/v1/customer/albs/feedback';
             CBPR_Auth_Sap = 'Basic U0ZEQ19XU1VTRVI6cG9xMTIzNDU=';
             // LHJ 20180824 CBPR End
             //CBPR_Auth_Spo = 'http://cbpr.chinacloudsites.cn/sfdc/token';
             CBPR_Auth_Spo = 'http://cbpr.olympuschina.com/sfdc/token';
 
             QLM_Token = 'http://cusdata.qianlima.com/v1/token';
-            
 
             // 鏅烘収鍖荤枟&鏈嶅姟鏂扮郴缁熼�氫俊 瀹㈡埛鎺ュ彛
             NFM601_ENDPOINT = 'https://wdp.olympus.com.cn:44301/RESTAdapter/NFM601';
@@ -127,11 +128,11 @@
             NFM115_ENDPOINT = 'https://wdp.olympus.com.cn:44301/RESTAdapter/NFM115';
             // 鏂版湇鍔$郴缁� 娴嬭瘯鐜
             AWS_DOMAIN = 'https://olympus.bqbot.com';
-            // 鏂版湇鍔$郴缁� 鏈湴鐜锛堜复鏃讹級
+             // 鏂版湇鍔$郴缁� 鏈湴鐜锛堜复鏃讹級
             // AWS_DOMAIN = 'http://114.249.236.98:29990';
             // AWS_DOMAIN = 'http://jzbase.bqbot.com:29990';
             // AWS_DOMAIN = 'http://114.249.238.243:29990';
-            
+
 
             requestURILMS = '/v1/uc/user/syncOlympusUnit';
             appSecretLMS = 'CAE1D68BE3EB4F7AB5FE97EBDD11B83E';
@@ -143,7 +144,7 @@
             NFM007_ENDPOINT = 'https://wdp.olympus.com.cn:44302/RESTAdapter/NFM007';
             NFM008_ENDPOINT = 'https://owdc.olympus.co.jp/XISOAPAdapter/MessageServlet?senderParty=&senderService=OCM_SFDC_P&receiverParty=&receiverService=&interface=NFM008_Sync_BC2GPI&interfaceNamespace=http%3A%2F%2Folympus.co.jp%2Fgpi%2FNFM008';
             //NFM103_ENDPOINT = 'https://owdc.olympus.co.jp/XISOAPAdapter/MessageServlet?senderParty=&senderService=OCM_SFDC_P&receiverParty=&receiverService=&interface=NFM103_Sync_BC2GPI&interfaceNamespace=http%3A%2F%2Folympus.co.jp%2Fgpi%2FNFM103';
-            NFM103_ENDPOINT = 'https://wdp.olympus.com.cn:44302/RESTAdapter/NFM103';
+            NFM103_ENDPOINT = 'https://wdp.olympus.com.cn:44302/RESTAdapter/NFM103';// 鍘焥aphost
             //NFM106_ENDPOINT = 'https://owdc.olympus.co.jp/XISOAPAdapter/MessageServlet?senderParty=&senderService=OCM_SFDC_P&receiverParty=&receiverService=&interface=NFM106_Sync_BC2GPI&interfaceNamespace=http%3A%2F%2Folympus.co.jp%2Fgpi%2FNFM106';
             NFM106_ENDPOINT = 'https://wdp.olympus.com.cn:44302/RESTAdapter/NFM106';
             // LHJ 20180824 CBPR Start
@@ -158,7 +159,8 @@
             NFM401_ENDPOINT = 'http://ec2-161-189-3-104.cn-northwest-1.compute.amazonaws.com.cn:8082/doj/dojInfo/recevie';
             NFM402_ENDPOINT = 'http://ec2-161-189-3-104.cn-northwest-1.compute.amazonaws.com.cn:8082/doj/dojInfo/getDojInfoByRefNo';
 
-            NFM501_ENDPOINT = 'http://cusdata.qianlima.com/v1/info/page/';
+            // NFM501_ENDPOINT = 'http://cusdata.qianlima.com/v1/info/page/';
+            NFM501_ENDPOINT   ='https://sfpi-mebg-test.olympuschina.com/api/nfm/501';
             NFM502_ENDPOINT = 'http://cusdata.qianlima.com/v1/info/detailHtml?url=';
             NFM504_ENDPOINT = 'http://cusdata.qianlima.com/v1/customer/albs/feedback';
             CBPR_Auth_Sap = 'Basic U0ZEQ19XU1VTRVI6cG9wMTIzNDU=';
@@ -228,7 +230,25 @@
         webservice String timestamp;
         webservice String appKey;
     }
-
+    global class NFMResponse{
+        public Boolean SFStatus;
+        public String SFMessage;
+        public StaticResponse staticResponse;
+    }
+    global class StaticResponse{
+        public string status;
+        public String Message;
+        public StaticResponse(){
+            status='Success';
+            Message='';
+        }
+    }
+    public static NFMResponse getNFMResponse(){
+        NFMResponse  result=new NFMResponse();
+        result.staticResponse =new StaticResponse();
+        return result;
+        
+    }
     /**
      * @return yyyyMMdd 銇棩浠樻枃瀛楀垪
      */
@@ -341,7 +361,7 @@
         return rtn;
     }
 
-    /**
+     /**
      * add       wangweipeng       2022/02/11
      * [formatDateTime2StrDateTime description]
      * @param  dt [鏃ユ湡/鏃堕棿]
@@ -375,7 +395,7 @@
         return parseStr2Date(pDateTime.substring(0, 8));
     }
 
-    /**
+     /**
      * add    wangweipeng           2022/02/15
      * [parseStr2DateTime description]
      * @param  pDate [鏃ユ湡锛堜笉鍖呮嫭鏃堕棿锛塢
@@ -416,13 +436,13 @@
                 return null;
             }
             rtn = Datetime.newinstance(
-                Integer.valueOf(pDate.substring(0, 4)),
-                Integer.valueOf(pDate.substring(4, 6)),
-                Integer.valueOf(pDate.substring(6, 8)),
-                Integer.valueOf(pTime.substring(0, 2)),
-                Integer.valueOf(pTime.substring(2, 4)),
-                Integer.valueOf(pTime.substring(4, 6))
-            );
+                      Integer.valueOf(pDate.substring(0, 4)),
+                      Integer.valueOf(pDate.substring(4, 6)),
+                      Integer.valueOf(pDate.substring(6, 8)),
+                      Integer.valueOf(pTime.substring(0, 2)),
+                      Integer.valueOf(pTime.substring(2, 4)),
+                      Integer.valueOf(pTime.substring(4, 6))
+                  );
         } catch (Exception ex) {
             System.debug(Logginglevel.ERROR, 'NFMUtil#parseStr2DateTime(' + pDate + ', ' + pTime + ')' + ex.getMessage());
         }
@@ -452,10 +472,10 @@
                 return null;
             }
             rtn = Date.newinstance(
-                Integer.valueOf(pStr.substring(0, 4)),
-                Integer.valueOf(pStr.substring(4, 6)),
-                Integer.valueOf(pStr.substring(6, 8))
-            );
+                      Integer.valueOf(pStr.substring(0, 4)),
+                      Integer.valueOf(pStr.substring(4, 6)),
+                      Integer.valueOf(pStr.substring(6, 8))
+                  );
         } catch (Exception ex) {
             System.debug(Logginglevel.ERROR, 'NFMUtil#parseStr2Date(' + pStr + ')' + ex.getMessage());
         }
@@ -601,32 +621,6 @@
         return rowData;
     }
 
-    // public static BatchIF_Log__c makeRowDataToOnline(NFMUtil.MonitoringToOnline Monitoring, String NFMType, Object NFMData) {
-    //     BatchIF_Log__c rowData = new BatchIF_Log__c();
-    //     rowData.Type__c = NFMType;
-    //     rowData.MessageGroupNumber__c = Monitoring.MessageGroupNumber;
-    //     rowData.TransmissionDateTime__c = Monitoring.TransmissionDateTime;
-    //     rowData.RowDataFlg__c = true;
-    //     rowData.Log__c = '';
-    //     rowData.ErrorLog__c = '';
-    //     String rowDataStr = JSON.serialize(NFMData);
-    //     if (rowDataStr.length() > 0) {
-    //         Integer splitIdx = 1;
-    //         while (rowDataStr.length() > 0) {
-    //             if (splitIdx == 1) {
-    //                 rowData.put('Log__c', rowDataStr.substring(0, (rowDataStr.length() > MaxLogColumnLength ? MaxLogColumnLength : rowDataStr.length())));
-    //             } else if (splitIdx == 13) {
-    //                 rowData.ErrorLog__c = rowDataStr;
-    //                 break;
-    //             } else {
-    //                 rowData.put('Log' + splitIdx + '__c', rowDataStr.substring(0, (rowDataStr.length() > MaxLogColumnLength ? MaxLogColumnLength : rowDataStr.length())));
-    //             }
-    //             splitIdx++;
-    //             rowDataStr = rowDataStr.substring((rowDataStr.length() > MaxLogColumnLength ? MaxLogColumnLength : rowDataStr.length()));
-    //         }
-    //     }
-    //     return rowData;
-    // }
     public static BatchIF_Log__c makeRowData(BatchIF_Log__c iflog, String NFMType, Object NFMData) {
         // TransmissionDateTime銇ō瀹�
         Datetime nowDT = Datetime.now();
@@ -868,13 +862,36 @@
         system.debug('ress:' + ress);
         return new response(ress, resb);
     }
+    // send to aws to sap sushuanhu 20220222
+    public static response sendToPiAWS(String rowDataStr, String endpoint,String awsToken) {
 
+        Http http = new Http();
+        HttpRequest req = new HttpRequest();
+        HTTPResponse res;
+        String resb;       
+        req.setTimeout(120000);
+        req.setEndpoint(endpoint);
+        req.setMethod('POST');
+        req.setHeader('Content-Type', 'application/json');
+        req.setHeader('pi-token', awsToken);
+        req.setBody(rowDataStr);
+        res = http.send(req);
+        string ress =String.valueof(res.getStatusCode());
+        resb = res.getBody();
+        system.debug('ress:' + ress);
+        return new response(ress, resb);
+    }
+    // 鑾峰彇aws token sushanhu 20220222
+    public static response getAwsToken(){
+        String responseBody = AWSServiceTool.getAWSToken();
+        return new response('success', responseBody);
+    }
     public class response {
         public string status;
         public string responseBody;
-        public response(string status, string responseBody) {
-            this.status = status;
-            this.responseBody = responseBody;
+        public response(string status, string responseBody ) {
+            this.status         = status;
+            this.responseBody   = responseBody;
         }
     }
     // WLIG-BXQBH6 end
@@ -906,10 +923,10 @@
             return null;
         }
         return Time.newInstance(
-            Integer.valueOf(timeStr.substring(0, 2)),
-            Integer.valueOf(timeStr.substring(2, 4)),
-            Integer.valueOf(timeStr.substring(4, 6)),
-            0);
+                   Integer.valueOf(timeStr.substring(0, 2)),
+                   Integer.valueOf(timeStr.substring(2, 4)),
+                   Integer.valueOf(timeStr.substring(4, 6)),
+                   0);
     }
     //insert by rentongxiao 2020-10-12 end
 
@@ -930,8 +947,8 @@
         //1銆� 鑾峰彇token:
         Http http = new Http();
         HttpRequest req = new HttpRequest();
-        String content = 'appKey=' + EncodingUtil.urlEncode(appKey, 'UTF-8') +
-            '&appSecret=' + EncodingUtil.urlEncode(appSecret, 'UTF-8');
+        String content = 'appKey=' + EncodingUtil.urlEncode(appKey, 'UTF-8') + 
+                         '&appSecret=' + EncodingUtil.urlEncode(appSecret, 'UTF-8');
         //璇锋眰璺緞
         req.setEndpoint(QLM_Token);
         req.setHeader('Content-Type', QLM_NFM501_Point);
@@ -989,6 +1006,51 @@
         //姝e父鎵ц
         return new response(ress, response.getBody());
     }
+    // NEW QLM AWS 501  鎺ュ彛 sushanhu 20220223
+    public static response getAWSQLMData(String endpoint, String token) {
+        //2銆佽幏鍙栨嫑鏍囦俊鎭細璁板緱浣跨敤1涓幏鍙栫殑token
+        Http http = new Http();
+        HttpRequest req = new HttpRequest();
+        req.setHeader('Content-Type', 'application/json');
+        req.setHeader('pi-token',  token);
+        req.setTimeout(120000);
+        req.setEndpoint(endpoint);
+        req.setMethod('GET');
+        HTTPResponse response = http.send(req);
+        String statusCode = response.getStatus();
+        System.debug('response:' + response);
+        //http锛氱姸鎬佸拰code
+        //濡傛灉鐘舵�佷笉閫氳繃 锛� 鍒欏皢鐘舵�佸強绌虹殑鐨勬暟鎹� 锛� 杩斿洖
+        if (String.isNotBlank(statusCode)) {
+            return new response(statusCode, null);
+        }
+        System.debug('=====2======' + response.getBody());
+        //姝e父鎵ц
+        return new response(statusCode, response.getBody());
+    }
+    // NEW QLM AWS 502 503鎺ュ彛 sushanhu 20220223
+    public static response getAWSQLMData(String endpoint,String jsonStr,  String token) {
+        //2銆佽幏鍙栨嫑鏍囦俊鎭細璁板緱浣跨敤1涓幏鍙栫殑token
+        Http http = new Http();
+        HttpRequest req = new HttpRequest();
+        req.setHeader('Content-Type', 'application/json');
+        req.setHeader('pi-token',  token);
+        req.setTimeout(120000);
+        req.setEndpoint(endpoint);
+        req.setMethod('POST');
+        req.setBody(jsonStr);
+        HTTPResponse response = http.send(req);
+        String statusCode = response.getStatus();
+        System.debug('response:' + response);
+        //http锛氱姸鎬佸拰code
+        //濡傛灉鐘舵�佷笉閫氳繃 锛� 鍒欏皢鐘舵�佸強绌虹殑鐨勬暟鎹� 锛� 杩斿洖
+        if (String.isNotBlank(statusCode)) {
+            return new response(statusCode, null);
+        }
+        System.debug('=====2======' + response.getBody());
+        //姝e父鎵ц
+        return new response(statusCode, response.getBody());
+    }
 
     //鎺ュ彛3锛岃幏鍙栧叾浠栭檮浠�
     public static response503 getFileData(String token503, String endpoint) {
@@ -1035,7 +1097,7 @@
     public static String sendTenInfo(String token504, String jsonStr, String endpoint) {
         Http http = new Http();
         HttpRequest req = new HttpRequest();
-        req.setEndpoint('http://cusdata.qianlima.com/test/v1/customer/albs/feedback');
+        req.setEndpoint(endpoint);
         req.setHeader('open-authorization', 'Bearer' + token504);
         req.setHeader('Content-Type', 'application/x-www-form-urlencoded');
         req.setMethod('POST');
@@ -1153,8 +1215,10 @@
         system.debug('resb:' + resb);
         return resb;
     }
-    //鍙戦�佺粰鍏遍�氬钩鍙� 绮剧悽鎶�鏈� thh 2021-09-22 end
+
     
+    //鍙戦�佺粰鍏遍�氬钩鍙� 绮剧悽鎶�鏈� thh 2021-09-22 end
+
     public static Integer ControllerUtil() {
         Integer i = 0;
         i++;
diff --git a/force-app/main/default/classes/NewAndEditAddressController.cls b/force-app/main/default/classes/NewAndEditAddressController.cls
index f259e3d..7311d8f 100644
--- a/force-app/main/default/classes/NewAndEditAddressController.cls
+++ b/force-app/main/default/classes/NewAndEditAddressController.cls
@@ -1,13 +1,13 @@
 /*
- * Author: Bubba Li
+ * Author: Yanan Chen
  * Created Date: 02/08/2022
  * Purpose: Utility class for describe layouts
  * Test Class: NewAndEditAddressController
  * History: 
- *      02/08/2022 - Bubba Li - Initial Code.
+ *      02/08/2022 - Yanan Chen - Initial Code.
  * 
  * */
-public without sharing class NewAndEditAddressController {
+global without sharing class NewAndEditAddressController {
     public List <LayoutDescriberHelper.LayoutSection > layoutSections{set;get;}
     public String awsToken{set;get;}
     public static Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
@@ -15,50 +15,75 @@
     public Boolean isNewMode{set;get;}
     public String rtTypeId {get; set;}
     public String AWSDataId{set;get;}
-    //fieldLabel fieldAPI
-    public String fieldApiListStr {get; set;}
+    public String contactId{set;get;}//For Lookup field
+    public List<String> encryptedAPIList{set;get;}
+    public String staticResource {get; set;}
+    public String staticResourceContact {get; set;}
+    public String requiredFieldAPIListStr {get; set;}
+    public String fieldAPIToLabelMapStr {get; set;}
+    public String Input_Required_Field_Msg{set;get;}
+    public String PIPL_Name_Label{set;get;}
+    public String PIPL_Input_Account_Error_Msg{set;get;}
+    public String sobjectPrefix{set;get;}
+    public String sobjecttypeForFrontEnd{set;get;}
+    public String contactsInfo {set;get;}//key sfid;value awsid
     public NewAndEditAddressController(ApexPages.StandardController controller) {
         isNewMode = true;
+        Input_Required_Field_Msg = Label.Input_Required_Field_Msg;
+        PIPL_Name_Label = Label.PIPL_Name_Label;
+        PIPL_Input_Account_Error_Msg = label.PIPL_Input_Account_Error_Msg;
+        sobjecttypeForFrontEnd = sobjectTypeValue;
+        //鑾峰彇鎵�鏈夊瓧娈�
         List<String> fieldList = new List<String>(Schema.getGlobalDescribe().get('Address__c').getDescribe().fields.getMap().keyset());  
         // Add fields to controller. This is to avoid the SOQL error in visualforce page
         controller.addFields(fieldList);
-        SObject obj = controller.getRecord();
-        rtTypeId = ApexPages.currentPage().getParameters().get('RecordType');
-        rtTypeId = '0121m000000kiMxAAI';//For testing
-        layoutSections = LayoutDescriberHelper.describeSectionWithFields(rtTypeId, 'Address__c','classic');
+        SObject obj = controller.getRecord();        
         if(obj.Id != null){
+            //鏇存柊
             isNewMode = false;
-            Address__c addressData = [select Id, RecordTypeId, AWS_Data_Id__c from Address__c where id =: obj.Id];
+            Address__c addressData = [select Id, RecordTypeId, AWS_Data_Id__c, Contacts__r.Id, Contacts__r.AWS_Data_Id__c from Address__c where id =: obj.Id];
             rtTypeId = addressData.RecordTypeId;
             AWSDataId = addressData.AWS_Data_Id__c;
+            Map<String,String> sfIdToAWSIdMap = new Map<String,String>();
+            // if(addressData.Contacts__r.Id != null){
+            //     sfIdToAWSIdMap.put(String.valueof(addressData.Contacts__r.Id).subString(0,15),addressData.Contacts__r.AWS_Data_Id__c);
+            // }
+            sfIdToAWSIdMap.put(String.valueof(addressData.Contacts__r.Id).subString(0,15),addressData.Contacts__r.AWS_Data_Id__c);
+            contactsInfo = JSON.serialize(sfIdToAWSIdMap);
+        }else{
+            //鏂板缓
+            rtTypeId = ApexPages.currentPage().getParameters().get('RecordType');
         }
-        List<String> fieldApiList = new List<String>(); 
-        for (LayoutDescriberHelper.LayoutSection ls : layoutSections) {
-            for (LayoutDescriberHelper.LayoutField lf : ls.layoutFields) {
-                if (lf.fieldAPI != '') {
-                    fieldApiList.add(lf.fieldAPI);
-                }
-            }
-        }
-        fieldApiListStr = JSON.serialize(fieldApiList);
-        awsToken = AWSServiceTool.getAWSToken();
+        LayoutDescriberHelper.LayoutWrapper LayoutWrapperValue = LayoutDescriberHelper.describeSectionWithFieldsWrapper(rtTypeId, 'Address__c','classic');
+        layoutSections = LayoutWrapperValue.layoutSections;
+        List<String> requiredFieldAPIList = LayoutWrapperValue.requiredFieldAPIList;
+        Map<String,String> fieldAPIToLabelMap = LayoutWrapperValue.fieldAPIToLabelMap;
+        requiredFieldAPIListStr = JSON.serialize(requiredFieldAPIList);
+        fieldAPIToLabelMapStr = JSON.serialize(fieldAPIToLabelMap);
+        PIHelper.PIIntegration piIntegration = PIHelper.getPIIntegrationInfo('Address__c');
+        staticResource = JSON.serialize(piIntegration);
+        staticResourceContact = JSON.serialize(PIHelper.getPIIntegrationInfo('Contact'));
+        encryptedAPIList = piIntegration.PIFields;
+        sobjectPrefix = piIntegration.sobjectPrefix;
     }
-
-    public class Response{
+    
+    global class Response{
         public String recordId{set;get;}
         public String message{set;get;}
         public String status{set;get;}
     }
 
     @RemoteAction
-    public static Response saveAddress(String addressJson,String transId,Boolean isNew) {
+    global static Response saveAddress(String addressJson,String transId,Boolean isNew) {
         System.debug('Address Info:' + JSON.serialize(addressJson));
         //1. Prepare the payload for  Address
         Schema.SObjectType addressSchema = schemaMap.get(sobjectTypeValue);
         Map<String, Schema.SObjectField> fieldAPIToTypeMap = addressSchema.getDescribe().fields.getMap();
         Map<String,Object> fieldValueMap = (Map<String,Object>)JSON.deserializeUntyped(addressJson);
         Address__c addressInfo = new Address__c();
+        //鑷畾涔夋牸寮忚浆鎹�
         for (String fieldAPI: fieldValueMap.keySet()) {
+            system.debug('field API'+fieldAPI);
             Schema.DisplayType fielddataType = fieldAPIToTypeMap.get(fieldAPI).getDescribe().getType();  
             String fieldValue = String.valueOf(fieldValueMap.get(fieldAPI)); 
             if(String.isBlank(fieldValue)){
@@ -75,44 +100,45 @@
             }else if(String.valueOf(fielddataType)=='Number'||String.valueOf(fielddataType)=='DOUBLE' ){
                 addressInfo.put(fieldAPI, Decimal.valueOf(String.valueOf(fieldValueMap.get(fieldAPI))));
             } else if(String.valueof(fielddataType)=='BOOLEAN'){
-                addressInfo.put(fieldAPI, Boolean.valueOf(fieldValueMap.get(fieldAPI)));
+                addressInfo.put(fieldAPI, fieldValueMap.get(fieldAPI));
             }else {
                 addressInfo.put(fieldAPI, String.valueOf(fieldValueMap.get(fieldAPI)));
             }                  
         }
-        
+
         //2. Save Record Process
         String status = 'success';    
         Response resp = new Response();
         Savepoint sp = Database.setSavepoint();
+        String rid = '';
         try{
+            System.debug('abcde');
             if(isNew){
+                System.debug('addressInfoNancy = ' + addressInfo);
                 insert addressInfo;
             }else{
-                //Id addressIdValue = [select id from Address where AWS_Data_Id__c =:awsId];
-                addressInfo.put('Id','a4R1m000000KGxSEAW');//For testing;
+                System.debug('into update');
+                String awsDataId = (String)addressInfo.get('AWS_Data_Id__c');
+                System.debug('awsDataId = ' + awsDataId);
+                Address__c[] addresses = [select id from Address__c where AWS_Data_Id__c =:awsDataId];
+                System.debug('addresses[0].id = ' + addresses[0].id);
+                addressInfo.put('Id',addresses[0].id);//For testing;
                 update addressInfo;
             }
-            // //saveTransLog(transId, addressInfo.AWS_Data_Id__c, status, '');
-            // Transaction_Log__c traLog = new Transaction_Log__c();
-            // // AWS_Data_Id__c=AWSDataId,TransId__c=transId,JsonContent__c=addressJson,Status__c=status
-            // traLog.AWS_Data_Id__c = AWSDataId;
-            // traLog.TransId__c = transId;
-            // traLog.JsonContent__c = addressJson;
-            // traLog.Status__c = status;
-            // insert traLog;
+            rid=addressInfo.Id;
+            PIHelper.saveTransLog(sobjectTypeValue,(String)addressInfo.get('AWS_Data_Id__c'),rid,transId,addressJson ,status,'');
             resp.recordId = addressInfo.Id;
-            // resp.message = 'success saveAddress';
+            resp.message = '';
             resp.status = status;
+            System.debug('resp from sfdx back-end' + resp);
             return resp;
 
         } catch(Exception e) {
+            System.debug('into catch'+e.getMessage());
             Database.rollback(sp);
-            // status = 'fail';
-            // //saveTransLog(transId, addressInfo.AWS_Data_Id__c, status, '');
-            // system.System.debug(e.getMessage() + '-' + e.getStackTraceString() + '-' + e.getLineNumber()); 
-            // resp.message = e.getMessage();
-            // resp.recordId = 'fail saveAddress';
+            status = 'fail';
+            PIHelper.saveTransLog(sobjectTypeValue,(String)addressInfo.get('AWS_Data_Id__c'),rid,transId,addressJson,status,e.getMessage());
+            resp.message = e.getMessage();            
             resp.status = status;
             return resp;
         }
diff --git a/force-app/main/default/classes/NewAndEditLeadController.cls b/force-app/main/default/classes/NewAndEditLeadController.cls
index d7c8bf0..1ce6a1e 100644
--- a/force-app/main/default/classes/NewAndEditLeadController.cls
+++ b/force-app/main/default/classes/NewAndEditLeadController.cls
@@ -7,7 +7,7 @@
  *      01/19/2022 - Bubba Li - Initial Code.
  * 
  * */
-public without sharing class NewAndEditLeadController {
+global without sharing class NewAndEditLeadController {
     public List <LayoutDescriberHelper.LayoutSection > layoutSections{set;get;}
     public String awsToken{set;get;}
     public static Map<String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
@@ -15,69 +15,93 @@
     public Boolean isNewMode{set;get;}
     public String rtTypeId {get; set;}
     public String AWSDataId{set;get;}
-    //fieldLabel fieldAPI
-    public String fieldApiListStr {get; set;}
+    public String contactId{set;get;}//For Lookup field
+    public List<String> encryptedAPIList{set;get;}
+    public String staticResource {get; set;}
+    public String staticResourceContact {get; set;}
+    public String requiredFieldAPIListStr {get; set;}
+    public String fieldAPIToLabelMapStr {get; set;}
+    public String Input_Required_Field_Msg{set;get;}
+    public String PIPL_Name_Label{set;get;}
+    public String PIPL_Input_Account_Error_Msg{set;get;}
+    public String sobjectPrefix{set;get;}
+    public String sobjecttypeForFrontEnd{set;get;}
+    public String contactsInfo {set;get;}//key sfid;value awsid
     public NewAndEditLeadController(ApexPages.StandardController controller) {
         isNewMode = true;
+        Input_Required_Field_Msg = Label.Input_Required_Field_Msg;
+        PIPL_Name_Label = Label.PIPL_Name_Label;
+        PIPL_Input_Account_Error_Msg = label.PIPL_Input_Account_Error_Msg;
+        sobjecttypeForFrontEnd = sobjectTypeValue;
+        //鑾峰彇鎵�鏈夊瓧娈�
         List<String> fieldList = new List<String>(Schema.getGlobalDescribe().get('Lead').getDescribe().fields.getMap().keyset());  
         // Add fields to controller. This is to avoid the SOQL error in visualforce page
-        controller.addFields(fieldList);
-        SObject obj = controller.getRecord();
-        //rtTypeId = ApexPages.currentPage().getParameters().get('RecordType');
-        rtTypeId = '01210000000QiRa';//For testing
-        layoutSections = LayoutDescriberHelper.describeSectionWithFields(rtTypeId, 'Lead','classic');
+        controller.addFields(fieldList);        
+        SObject obj = controller.getRecord();        
         if(obj.Id != null){
+            //鏇存柊
             isNewMode = false;
-            Lead leadData = [select Id,RecordTypeId,AWS_Data_Id__c from Lead where id =: obj.Id];
+            Lead leadData = [select Id,RecordTypeId,AWS_Data_Id__c,Contact_Name__r.Id,Contact_Name__r.AWS_Data_Id__c from Lead where id =: obj.Id];
             rtTypeId = leadData.RecordTypeId;
             AWSDataId = leadData.AWS_Data_Id__c;
-        }
-        List<String> fieldApiList = new List<String>(); 
-        for (LayoutDescriberHelper.LayoutSection ls : layoutSections) {
-            for (LayoutDescriberHelper.LayoutField lf : ls.layoutFields) {
-                if (lf.fieldAPI != '') {
-                    fieldApiList.add(lf.fieldAPI);
-                }
+            Map<String,String> sfIdToAWSIdMap = new Map<String,String>();
+            if(leadData.Contact_Name__r.Id != null){
+                sfIdToAWSIdMap.put(String.valueof(leadData.Contact_Name__r.Id).subString(0,15),leadData.Contact_Name__r.AWS_Data_Id__c);
             }
+            contactsInfo = JSON.serialize(sfIdToAWSIdMap);
+        }else{
+            //鏂板缓
+            rtTypeId = ApexPages.currentPage().getParameters().get('RecordType');
+            obj.put('OwnerId',UserInfo.getUserId());
         }
-        fieldApiListStr = JSON.serialize(fieldApiList);
-        //awsToken = AWSServiceTool.getAWSToken();
+        LayoutDescriberHelper.LayoutWrapper LayoutWrapperValue = LayoutDescriberHelper.describeSectionWithFieldsWrapper(rtTypeId, 'Lead','classic');
+        layoutSections = LayoutWrapperValue.layoutSections;
+        List<String> requiredFieldAPIList = LayoutWrapperValue.requiredFieldAPIList;
+        Map<String,String> fieldAPIToLabelMap = LayoutWrapperValue.fieldAPIToLabelMap;
+        requiredFieldAPIListStr = JSON.serialize(requiredFieldAPIList);
+        fieldAPIToLabelMapStr = JSON.serialize(fieldAPIToLabelMap);
+        PIHelper.PIIntegration piIntegration = PIHelper.getPIIntegrationInfo('Lead');
+        staticResource = JSON.serialize(piIntegration);
+        staticResourceContact = JSON.serialize(PIHelper.getPIIntegrationInfo('Contact'));
+        encryptedAPIList = piIntegration.PIFields;
+        sobjectPrefix = piIntegration.sobjectPrefix;
     }
 
-    public class Response{
+    global class Response{
         public String recordId{set;get;}
         public String message{set;get;}
         public String status{set;get;}
     }
 
     @RemoteAction
-    public static Response saveLead(String leadJson,String transId,Boolean isNew) {
+    global static Response saveLead(String leadJson,String transId,Boolean isNew) {
         System.debug('Lead Info:' + JSON.serialize(leadJson));
         //1. Prepare the payload for  Lead
         Schema.SObjectType leadSchema = schemaMap.get(sobjectTypeValue);
         Map<String, Schema.SObjectField> fieldAPIToTypeMap = leadSchema.getDescribe().fields.getMap();
         Map<String,Object> fieldValueMap = (Map<String,Object>)JSON.deserializeUntyped(leadJson);
         Lead leadInfo = new Lead();
+        //鑷畾涔夋牸寮忚浆鎹�
         for (String fieldAPI: fieldValueMap.keySet()) {
+            system.debug('field API='+fieldAPI);
             Schema.DisplayType fielddataType = fieldAPIToTypeMap.get(fieldAPI).getDescribe().getType();  
             String fieldValue = String.valueOf(fieldValueMap.get(fieldAPI)); 
-            if(String.isBlank(fieldValue)){
-                continue;
-            }
+            system.debug('Field Type:'+fielddataType+' field Value='+fieldValue);
             if(String.valueOf(fielddataType)=='DATE'){
-                leadInfo.put(fieldAPI, Date.valueOf(String.valueOf(fieldValueMap.get(fieldAPI)).replace('/', '-')));
+                leadInfo.put(fieldAPI,(String.isBlank(fieldValue)||String.isEmpty(fieldValue))? null:Date.valueOf(fieldValue.replace('/', '-')));              
             }else if(String.valueOf(fielddataType)=='DATETIME'){
-                String dt = String.valueOf(fieldValueMap.get(fieldAPI));
-                if(String.isNotBlank(dt)&&dt.contains('T')){
-                    dt = dt.replace('T',' ');
-                    leadInfo.put(fieldAPI, Datetime.valueOfGmt(dt));
-                }             
-            }else if(String.valueOf(fielddataType)=='Number'||String.valueOf(fielddataType)=='DOUBLE' ){
-                leadInfo.put(fieldAPI, Decimal.valueOf(String.valueOf(fieldValueMap.get(fieldAPI))));
+                if(String.isNotBlank(fieldValue)&&fieldValue.contains('T')){
+                    fieldValue = fieldValue.replace('T',' ');
+                    leadInfo.put(fieldAPI, Datetime.valueOfGmt(fieldValue));
+                }else{
+                    leadInfo.put(fieldAPI, null);
+                }                    
+            }else if(String.valueof(fielddataType)=='CURRENCY'|| String.valueof(fielddataType)=='PERCENT'||String.valueOf(fielddataType)=='Number'||String.valueOf(fielddataType)=='DOUBLE' ){
+                leadInfo.put(fieldAPI, (String.isBlank(fieldValue)||String.isEmpty(fieldValue))?0:Decimal.valueOf(fieldValue)); 
             } else if(String.valueof(fielddataType)=='BOOLEAN'){
-                leadInfo.put(fieldAPI, Boolean.valueOf(fieldValueMap.get(fieldAPI)));
+                leadInfo.put(fieldAPI, fieldValueMap.get(fieldAPI));
             }else {
-                leadInfo.put(fieldAPI, String.valueOf(fieldValueMap.get(fieldAPI)));
+                leadInfo.put(fieldAPI,fieldValue);
             }                  
         }
         
@@ -85,34 +109,35 @@
         String status = 'success';    
         Response resp = new Response();
         Savepoint sp = Database.setSavepoint();
+        String rid = '';
         try{
+            System.debug('abcde');
             if(isNew){
+                System.debug('leadInfozhj = ' + leadInfo);
                 insert leadInfo;
             }else{
-                //Id leadIdValue = [select id from Lead where AWS_Data_Id__c =:awsId];
-                leadInfo.put('Id','00Q1m000001lVY8');//For testing;
+                System.debug('into update');
+                String awsDataId = (String)leadInfo.get('AWS_Data_Id__c');
+                System.debug('awsDataId = ' + awsDataId);
+                Lead[] leads = [select id from Lead where AWS_Data_Id__c =:awsDataId];
+                System.debug('leads[0].id = ' + leads[0].id);
+                leadInfo.put('Id',leads[0].id);//For testing;
                 update leadInfo;
             }
-            // //saveTransLog(transId, leadInfo.AWS_Data_Id__c, status, '');
-            // Transaction_Log__c traLog = new Transaction_Log__c();
-            // // AWS_Data_Id__c=AWSDataId,TransId__c=transId,JsonContent__c=leadJson,Status__c=status
-            // traLog.AWS_Data_Id__c = AWSDataId;
-            // traLog.TransId__c = transId;
-            // traLog.JsonContent__c = leadJson;
-            // traLog.Status__c = status;
-            // insert traLog;
+            rid=leadInfo.Id;
+            PIHelper.saveTransLog(sobjectTypeValue,(String)leadInfo.get('AWS_Data_Id__c'),rid,transId,leadJson ,status,'');
             resp.recordId = leadInfo.Id;
-            // resp.message = 'success saveLead';
+            resp.message = '';
             resp.status = status;
+            System.debug('resp from sfdx back-end' + resp);
             return resp;
 
         } catch(Exception e) {
+            System.debug('into catch'+e.getMessage());
             Database.rollback(sp);
-            // status = 'fail';
-            // //saveTransLog(transId, leadInfo.AWS_Data_Id__c, status, '');
-            // system.System.debug(e.getMessage() + '-' + e.getStackTraceString() + '-' + e.getLineNumber()); 
-            // resp.message = e.getMessage();
-            // resp.recordId = 'fail saveLead';
+            status = 'fail';
+            PIHelper.saveTransLog(sobjectTypeValue,(String)leadInfo.get('AWS_Data_Id__c'),rid,transId,leadJson,status,e.getMessage());
+            resp.message = e.getMessage();            
             resp.status = status;
             return resp;
         }
diff --git a/force-app/main/default/classes/OFSInsReportLayoutController.cls b/force-app/main/default/classes/OFSInsReportLayoutController.cls
index 7950992..8c0174a 100644
--- a/force-app/main/default/classes/OFSInsReportLayoutController.cls
+++ b/force-app/main/default/classes/OFSInsReportLayoutController.cls
@@ -28,7 +28,7 @@
 
     private String oldHospital;
     private String oldStatus;
-    private Boolean isPDF;
+    public Boolean isPDF{get;private set;}
     private Boolean isUpDown;
     private Boolean isSubmit;
     public String alertMessage {
@@ -247,18 +247,23 @@
             oirSettingMap.put(oir.recordType_devName__c, oir);
         }
     }
+
+
+    public string staticResource { get; private set; }
+    //public boolean IsAddmessage { get; private set; }
+    
     /**
     * Visaulforce銇嬨倝鍛笺伆銈屻倠銈炽兂銈广儓銉┿偗銈�
     */
     public OFSInsReportLayoutController(ApexPages.StandardController controller) {
-
+        staticResource = JSON.serialize(PIHelper.getPIIntegrationInfo('Inspection_Report__c'));
 }
     public OFSInsReportLayoutController() {
         countorder = 1;
         nowAssetcount = 1;
         runCount = 0;
         isUpDown = true;
-
+        staticResource = JSON.serialize(PIHelper.getPIIntegrationInfo('Inspection_Report__c'));
     }
 
     // TODO 鍏ㄩ儴鐢婚潰銉儠銉儍銈枫儱銇仚銈�
@@ -335,7 +340,7 @@
                 pReportId = iis[0].Inspection_ReportId__c;
             }
 
-            List < Inspection_Report__c > queryIrs = [select Id, RecordType.DeveloperName, RecordType.Name, Name, Status__c, Inspection_StartTime__c, Inspection_EndTime__c from Inspection_Report__c where Id = :pReportId];
+            List < Inspection_Report__c > queryIrs = [select Id, RecordType.DeveloperName, RecordType.Name, Name, Status__c, Inspection_StartTime__c, Inspection_EndTime__c,Responsible_Person_Encrypted__c,phone_Encrypted__c,AWS_Data_Id__c from Inspection_Report__c where Id = :pReportId];
             if (queryIrs.size() <= 0) {
                 initFlag = false;
                 ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR, '鏃犳硶鎵惧埌鐐规鎶ュ憡涔�'));
@@ -401,7 +406,7 @@
             }
         }
 
-        this.settingSoql = 'select Id, Name, Name_Manual__c, Next_StartHour_Page__c, Next_StartMinute_Page__c, Next_EndHour_Page__c, Next_EndMinute_Page__c '
+        this.settingSoql = 'select Id, Name, Name_Manual__c, Next_StartHour_Page__c, Next_StartMinute_Page__c, Next_EndHour_Page__c, Next_EndMinute_Page__c,Responsible_Person_Encrypted__c,phone_Encrypted__c,AWS_Data_Id__c '
         // fxk 2021/8/4 鏂板姞 Start
         + ' , Remarks__c, CleaningFluid__c,SterilizationMethod__c,Disinfectant__c,UsedMachine__c,Used_ET__c ,Mode__c';
         // fxk 2021/8/4 鏂板姞 End
@@ -785,14 +790,19 @@
             // }
 
         }
+        
         if (isError) {
+            system.debug('795'+ir.AWS_Data_Id__c);
             return null;
         }
+        system.debug('798'+ir.AWS_Data_Id__c);
         //add by rentx 20210630
         if (timeCheck() != true) {
+            system.debug('800');
             return null;
         }
 
+        system.debug('804');
         if (isPDF) {
             ir.Status__c = 'PDF';
         }
@@ -801,6 +811,7 @@
             ir.Status__c = '濉啓瀹屾瘯';
         }
 
+        system.debug('813');
         Savepoint sp = Database.setSavepoint();
         try {
             // 閮ㄩ暱缁忕悊鎬荤洃
@@ -815,9 +826,11 @@
             OFSInsReportAssetHistoryController.upsertInspection_Report(ir);
         } catch(Exception e) {
             clearIrId(sp, e, isIrNew);
+            system.debug('829');
             return null;
         }
 
+        system.debug('832');
         // 鏃ュ牨銇嬨倝銇忋倠鍫村悎銆佷繚瀛樻檪銆丒ventC銇浉銇嶆埢銇�
         if (String.isBlank(pEventCId) == false) {
             try {
@@ -825,10 +838,11 @@
                 update ec;
             } catch(Exception e) {
                 clearIrId(sp, e, isIrNew);
+                system.debug('840');
                 return null;
             }
         }
-
+        system.debug('844');
         //List<Inspection_Item__c> toUpsertAhs = new List<Inspection_Item__c>();
         List < Inspection_Item__c > toDeleteAhs = new List < Inspection_Item__c > ();
         List < Inspection_Item__c > manualDeleteAhs = new List < Inspection_Item__c > ();
@@ -868,14 +882,17 @@
         // SWAG-AREBA8 end
         toDeleteAhs = [select Id, AssetId__c from Inspection_Item__c where AssetId__c in :unCheckedAssetIds and Inspection_ReportId__c = :ir.Id];
 
+        system.debug('884');
         try {
             if (manualDeleteAhs.size() > 0) toDeleteAhs.addAll(manualDeleteAhs);
             OFSInsReportAssetHistoryController.deleteInspection_Item(ir, toDeleteAhs);
         } catch(Exception e) {
             clearIrId(sp, e, isIrNew);
+            system.debug('890');
             return null;
         }
 
+        system.debug('894');
         try {
             //OFSInsReportAssetHistoryController.upsertInspection_Item(ir, toUpsertAhs);
             OFSInsReportAssetHistoryController.upsertInspection_Item(ir, new List < Inspection_Item__c > (toUpsertAhsMap.keySet()));
@@ -884,9 +901,11 @@
             for (Inspection_Item__c ah: toUpsertAhsMap.keySet()) {
                 if (toUpsertAhsMap.get(ah).isNew == true) ah.Id = null;
             }
+            system.debug('903');
             return null;
         }
 
+        system.debug('905');
         saveOK = true;
         this.init();
         return null;
@@ -896,6 +915,7 @@
         if (isIrNew) ir.Id = null;
         Database.rollback(sp);
         ApexPages.addMessages(e);
+        //IsAddmessage = true;
     }
 
     private Boolean checkHpChange() {
diff --git a/force-app/main/default/classes/QISPDFController.cls b/force-app/main/default/classes/QISPDFController.cls
index 7182423..9ebe1a8 100644
--- a/force-app/main/default/classes/QISPDFController.cls
+++ b/force-app/main/default/classes/QISPDFController.cls
@@ -2,6 +2,7 @@
     public QIS_Report__c qr { get; private set; }
     public User usr { get; private set; }
     public Boolean inGuarantee { get; private set; }
+    public string staticResource { get; private set; }
     
     //  HWAG-BC68W3  鏁呴殰鍙戠敓鏃ヤ负绌烘椂锛� 瀹冧负鐪�  start
     public Boolean outOfGuarantee { get; private set; }
@@ -10,6 +11,8 @@
         qr = new QIS_Report__c();
         usr = new User();
         inGuarantee = false;
+        staticResource = JSON.serialize(PIHelper.getPIIntegrationInfo('QIS_Report__c'));
+        
     }
     
     public void init() {
diff --git a/force-app/main/default/classes/SLAReportDetailsController.cls b/force-app/main/default/classes/SLAReportDetailsController.cls
index 6d9a583..6e8b1f9 100644
--- a/force-app/main/default/classes/SLAReportDetailsController.cls
+++ b/force-app/main/default/classes/SLAReportDetailsController.cls
@@ -16,6 +16,8 @@
     public String visitor5;
     public String serviceId;
     public String accId;
+    public String slaInfoStr{get; set;}
+    public String staticResourceContact {get; set;}
     public SLAReportDetailsController(){
         eventcId = ApexPages.currentPage().getParameters().get('eventCId') == null ? '' : ApexPages.currentPage().getParameters().get('eventCId');
         visitor1 = ApexPages.currentPage().getParameters().get('visitor1') == null ? '' : ApexPages.currentPage().getParameters().get('visitor1');
@@ -111,7 +113,8 @@
         }else{
             slaInfo.Visitor5__c = null; 
         }
-
+        slaInfoStr = JSON.serialize(slaInfo);
+        staticResourceContact = JSON.serialize(PIHelper.getPIIntegrationInfo('Contact'));
     }
     public void save(){
         try {
diff --git a/force-app/main/default/classes/SearchVisitorController.cls b/force-app/main/default/classes/SearchVisitorController.cls
index f40ef4c..2a48b1b 100644
--- a/force-app/main/default/classes/SearchVisitorController.cls
+++ b/force-app/main/default/classes/SearchVisitorController.cls
@@ -5,6 +5,7 @@
     public List<Contact> cl {get;set;}
     public List<AddContactWrapper> acwl {get;set;}
     public String index {get; set;}
+    public String awsContactIds{set;get;}//Add By Li Jun 20220214 for PIPL
     public String id1 {get;set;}
     public String hId1 {get;set;}
     public String idVa1 {get;set;}
@@ -24,6 +25,14 @@
     
     public User u {get;set;}
     public Account a {get;set;}
+
+
+    //Add By Li Jun 20220217 Start
+    public String staticResource {get; set;}
+    public String contactAWSIds {set;get;}
+    public String contactsInfo {set;get;}
+    public String awsDataIdArray {set;get;}
+    //Add By Li Jun 20220217 End
     
     public SearchVisitorController(){
         this.id1 = Apexpages.currentPage().getParameters().get('id1');
@@ -161,10 +170,40 @@
         }*/
         
         serContact();
+
+        //Add By Li Jun for PIPL 20220217 Start
+        //1. Query Contact by accountId
+        List<Contact> conList = new List<Contact>();
+        system.debug('Account Id from Front-end:'+a.Id);
+        String accountId = a.Id;
+        if(String.isNotBlank(accountId) && String.isNotEmpty(accountId)){
+            conList = new List<Contact>([select Id,AWS_Data_Id__c from Contact where AccountId=:accountId and AWS_Data_Id__c!='']);
+        }        
+        //2. Prepare the Contact Info
+        List<String> conAWSIds = new List<String>();
+        for(Contact con:conList){
+            conAWSIds.add(con.AWS_Data_Id__c);
+        }
+        contactAWSIds = JSON.serialize(conAWSIds);
+        staticResource = JSON.serialize(PIHelper.getPIIntegrationInfo('Contact')); 
+        //Add By Li Jun for PIPL 20220217 End 
+     }
+    //Add by Li Jun for PIPL 202202117 Start
+    public PageReference clearLineInfoList()  {
+        scwl = new List<SltContactWrapper>();
+        return null;
     }
-    
+    //Add by Li Jun for PIPL 202202117 End
     public PageReference serContact(){
-        System.debug('===== serContact start =====');
+        System.debug('===== serContact start ====='+awsContactIds);
+        //Add By Li Jun for PIPL 20220218 Start
+        Set<String> awsContactSet = new Set<String>();
+        if(String.isNotBlank(awsContactIds)&&String.isNotEmpty(awsContactIds)){
+            List<String> awsDataIds = (List<String>) JSON.deserialize(awsContactIds, List<String>.class);
+            awsContactSet = new Set<String>(awsDataIds);
+        }        
+        System.debug('===== serContact start ====='+awsContactSet);
+         //Add By Li Jun for PIPL 20220218 End
         String searchHospital = 'Select Hospital__c, Department_Class__c,Is_Active__c From Account Where Id = \'' + vp + '\' ';
         Account a = Database.query(searchHospital);
         if(a.Is_Active__c == '鐒″姽'){
@@ -172,16 +211,20 @@
             return null;
         }
         
-        String searchSql = 'Select id, name,Ignore_Same_Name__c, Account.Name, Type__c, Doctor_Division1__c, MyDr_Flg__c, phone, Supplement__c, MyDr__c, Select_Flg__c,Delete_Reason__c, Please_Delete__c, Please_Delete_applier__c, FirstName, LastName, Search_LastName__c, Account_Visitor_Search__c  From Contact ';
+        String searchSql = 'Select id, name,Ignore_Same_Name__c,AWS_Data_Id__c, Account.Name, Type__c, Doctor_Division1__c, MyDr_Flg__c, phone, Supplement__c, MyDr__c, Select_Flg__c,Delete_Reason__c, Please_Delete__c, Please_Delete_applier__c, FirstName, LastName, Search_LastName__c, Account_Visitor_Search__c  From Contact ';
         String whereStr = 'Where Account.ParentId =\'' + a.Department_Class__c + '\' and Account.Is_Active__c != \'鐒″姽\' ' + ' and Isactive__c != \'鏃犳晥(閫�浼�)\' and Isactive__c != \'鏃犳晥(閲嶅)\'';
         String whereSql = '';
-        if(sc.Search_LastName__c != null && sc.Search_LastName__c != ''){
-            whereSql += 'and LastName like ' + '\'%' + sc.Search_LastName__c + '%\' ';
+        //Commented by Li Jun 20220214 for PIPL
+        if(awsContactSet.size()>0){
+            whereSql += 'and AWS_Data_Id__c in: awsContactSet ';
         }
+        // if(sc.Search_LastName__c != null && sc.Search_LastName__c != ''){
+        //     whereSql += 'and LastName like ' + '\'%' + sc.Search_LastName__c + '%\' ';
+        // }
         
-        if(sc.Search_FirstName__c != null && sc.Search_FirstName__c != ''){
-            whereSql += 'and FirstName like ' + '\'%' + sc.Search_FirstName__c + '%\' ';
-        }
+        // if(sc.Search_FirstName__c != null && sc.Search_FirstName__c != ''){
+        //     whereSql += 'and FirstName like ' + '\'%' + sc.Search_FirstName__c + '%\' ';
+        // }
         
         if(sc.Type__c != null && sc.Type__c != ''){
             whereSql += 'and Type__c = \'' + sc.Type__c + '\' ';
@@ -202,6 +245,7 @@
         
         System.debug('searchSql:'+searchSql);
         cl = Database.query(searchSql);
+        System.debug('Query Result from SF:'+JSON.serialize(cl));
         Integer i = 0;
         
         scwl = new List<SltContactWrapper>();
diff --git a/force-app/main/default/classes/SimpleEventRegisterController.cls b/force-app/main/default/classes/SimpleEventRegisterController.cls
index cd29d41..dff5a34 100644
--- a/force-app/main/default/classes/SimpleEventRegisterController.cls
+++ b/force-app/main/default/classes/SimpleEventRegisterController.cls
@@ -88,6 +88,12 @@
     //2021-10-20  mzy  浠诲姟绠$悊鏀瑰杽   start
     private Boolean IsGeneratePlan;  //鏄惁鐢熸垚璁″垝
     //2021-10-20  mzy  浠诲姟绠$悊鏀瑰杽   end
+    //Add By Li Jun 20220224 for PIPL start
+    public String idVisitor1PI{set;get;}
+    public String idVisitor2PI{set;get;}
+    public String staticResource {get; set;}
+    public String contactAWSIds{set;get;}
+    //Add By Li Jun 20220224 for PIPL end
     public SimpleEventRegisterController(ApexPages.StandardController controller) {
         this.isHospital = true;
         this.isAgent = false;
@@ -153,6 +159,11 @@
             System.debug('-----:inputDatetime=' + inputDatetime);
             this.targetEvent.StartDateTime = inputDatetime;
         }
+        //Add by Li Jun 20220303 for PIPL Start
+        PIHelper.PIIntegration piIntegration = PIHelper.getPIIntegrationInfo('Contact');
+        staticResource = JSON.serialize(piIntegration);
+        system.debug('static resource:'+JSON.serialize(staticResource));
+        //Add by Li Jun 20220303 for PIPL End
     }
 
     public void init() {
@@ -212,6 +223,22 @@
             //2021-07-28  mzy  SWAG-C4YB9J 浜嬩欢椤甸潰浼樺寲 浠婂ぉ鐨勪簨浠� 濡傛灉宸茬粡鐢熸垚鎶ュ憡涓�瑙�,鍒欎笉鍏佽杩涜鍙栨秷鍜屽欢鏈熸搷浣� end
                 allDisable = true;
             }
+            //Add By Li Jun for PIPL 20220303 Start
+            List<String> conAWSIds = new List<String>();
+            Set<String> contactIdsForReport = new Set<String>();
+            List<String> visitorList = new List<String>{'Visitor1_ID__c','Visitor2_ID__c','Visitor3_ID__c','Visitor4_ID__c','Visitor5_ID__c'};
+            for(String visitorValue:visitorList){
+                if(String.isNotEmpty((String)targetEvent.get(visitorValue))&&String.isNotBlank((String)targetEvent.get(visitorValue))){
+                    contactIdsForReport.add((String)targetEvent.get(visitorValue));
+                }
+            }
+            List<Contact> conListForReport = new List<Contact>([select id,AWS_Data_Id__c from Contact where id in:contactIdsForReport and AWS_Data_Id__c!='']);
+            for(Contact con:conListForReport){
+                conAWSIds.add(con.AWS_Data_Id__c);
+            }     
+            contactAWSIds = JSON.serialize(conAWSIds);
+            system.debug('Contact AWSIDs:'+contactAWSIds);
+            //Add By Li Jun for PIPL 20220303 End
         }
         //20210324 zh WLIG-BX3DQ5 銆愬鎵樸�慜utlook鏃ュ巻鍜孲FDC鏃ュ巻鍚屾 end
         if (targetEvent.OPDPlan_Flag__c) {
diff --git a/force-app/main/default/classes/StartTradingController.cls b/force-app/main/default/classes/StartTradingController.cls
index 7d11d89..feb1533 100644
--- a/force-app/main/default/classes/StartTradingController.cls
+++ b/force-app/main/default/classes/StartTradingController.cls
@@ -1,4 +1,4 @@
-public class StartTradingController {
+public without sharing class StartTradingController {
 
     /** 銉兗銉塈D */
     public String leadId{get;set;}
@@ -9,12 +9,15 @@
     /** 銉兗銉塐nwer */
     public User leadOnwer{get; set;}
 
+    public String staticResource {get; set;}
+
     /** 銈炽兂銈广儓銉┿偗銈� */
     public StartTradingController(ApexPages.StandardController controller){
         // 銉兗銉塈D瑷畾
         this.leadId = system.currentPageReference().getParameters().get('leadId');
         System.debug('this.leadId'+this.leadId);
         this.SI_Flg = false;
+        staticResource = JSON.serialize(PIHelper.getPIIntegrationInfo('Contact')); 
     }
     
     /** 寮曞悎ID */
@@ -66,6 +69,8 @@
     
     /** 璨╁2搴椼亱銈夊紩鍚堛倰Convert銇欍倠銉曘儵銈� **/
     private Boolean isAgencyOpp = false;
+
+
     
     /** 鍒濇湡鍑︾悊 */
     public void init(){
@@ -143,7 +148,7 @@
     /** 瑷虹檪绉戦伕鎶炪儶銈广儓澶夋洿銈ゃ儥銉炽儓 */
     public void depChange(){
         // 瑷虹檪绉戦伕鎶炲�ゃ伀銈堛仯銇︺�佹媴褰撹�呴伕鎶炪儶銈广儓銈掑叆銈屾浛銇堛倠
-        this.conList = this.conMap.get(sltDep);
+        this.conList = this.conMap.get(sltDep); 
     }
     
     /** 銈儯銉炽偦銉儨銈裤兂  **/
@@ -153,6 +158,7 @@
     
     /** 鍙栧紩銇枊濮嬨儨銈裤兂 **/
     public PageReference start(){
+        system.debug('杩涘叆start()');
         
         // LHJ 20181012 CHAN-B5G6EZ 璐拱鎰忓悜杞浠锋姤閿� Start
         try {
diff --git a/force-app/main/default/classes/StraightBackAddressController.cls b/force-app/main/default/classes/StraightBackAddressController.cls
index 452d4a3..e63368a 100644
--- a/force-app/main/default/classes/StraightBackAddressController.cls
+++ b/force-app/main/default/classes/StraightBackAddressController.cls
@@ -9,9 +9,14 @@
 
     /***************琛ㄦ牸鏁版嵁*********************/
     public List<AddressData> tableData { get; set; }
+    public String tableDataStr{ get; set; }
+    public String staticResource {get; set;}
+    public String staticResourceContact {get; set;}
+    public Contact newCon{get; set;}
 
     /***************搴曢儴 缂栬緫鍜屾柊澧炵殑 瀵硅薄*******************/
     public Address__c insUpdData{get;set;}
+    public String insUpdDataStr{get;set;}
 
     /***************琚紪杈戞暟鎹殑id********************/
     public String UpdId{get;set;}
@@ -55,6 +60,14 @@
     /***************鏄惁鍙戠敓鏁版嵁鎺ュ彛鐨勫簭鍙�*************/
     public Integer AddressTypeIndex{get;set;}
 
+    public String contactId{set;get;}//For Lookup field
+
+    // Add by Li Jun for PIPL 20220308 Start
+    public String contactNameValue{set;get;}
+    public String contactIdValue{set;get;}
+    public String addressDataIds{set;get;} 
+    // Add by Li Jun for PIPL 20220308 End
+
     public StraightBackAddressController() {
         //鑾峰彇url鏁版嵁
         RepairId = System.currentPageReference().getParameters().get('id');
@@ -77,6 +90,10 @@
         addContact = new Contact();
         //鏌ヨ鍒版墍鏈夌殑绉戝绫诲埆
         hospitalTypp = '瑷虹檪绉� 銇濄伄浠�,瑷虹檪绉� 鍛煎惛绉�,瑷虹檪绉� 濠︿汉绉�,瑷虹檪绉� 鏅绉�,瑷虹檪绉� 娉屽翱绉�,瑷虹檪绉� 娑堝寲绉�,瑷虹檪绉� 鑰抽蓟鍠夌,瑷虹檪绉戯紙鍏遍�氾級';
+
+
+        staticResource = JSON.serialize(PIHelper.getPIIntegrationInfo('Address__c'));
+        staticResourceContact = JSON.serialize(PIHelper.getPIIntegrationInfo('Contact'));
     }
 
     /**
@@ -86,6 +103,7 @@
         String RepairSql = makeTextRepairSql(RepairId);
         try{
             pc = Database.query(RepairSql);
+            system.debug('pc = ' + pc);
             //缁欎竴涓叏灞�鍙橀噺璧嬪�煎尰闄d
             if(!String.isBlank(pc.HP_ID__c)){
                 hospitalId = pc.HP_ID__c;
@@ -126,6 +144,7 @@
             ApexPages.addMessages(e);
         }
         insUpdData = new Address__c();
+        newCon = new Contact();
         return null;
     }
 
@@ -141,6 +160,7 @@
                         insUpdData = tableData[i].address;
                     }
                 }
+                insUpdDataStr = JSON.serialize(insUpdData);
             }
         }
         return null;
@@ -163,6 +183,7 @@
                         }
                     }
                 }
+                insUpdDataStr = JSON.serialize(insUpdData);
             }
         }
         return null;
@@ -196,8 +217,12 @@
                         }
                         //鑱旂郴浜�
                         String contactsName = '';
+                        String contactsNameEncrypt ='';
+                        String contactawsDataId = '';
                         if(!String.isBlank(tableData[i].address.Contacts__c)){
                             contactsName = tableData[i].address.Contacts__r.Name;
+                            contactsNameEncrypt = tableData[i].address.Contacts__r.LastName_Encrypted__c;
+                            contactawsDataId = tableData[i].address.Contacts__r.AWS_Data_Id__c;
                         }
                         //瀹㈡埛
                         String ContactPerson = '';
@@ -208,10 +233,18 @@
                             //淇濆瓨鏁版嵁鍒颁慨鐞嗚〃涓�
                             Repair__c rc = new Repair__c();
                             rc.id=RepairId;
-                            rc.address_Contacts__c=contactsName;
+                            rc.Address_AWS_Data_Id__c = tableData[i].address.AWS_Data_Id__c;
+                            rc.Contact_AWS_Data_Id__c = contactawsDataId;
+                            rc.address_Contacts__c = contactsName;
+                            rc.Address_Contacts_Encrypt__c = contactsNameEncrypt;
                             rc.address_ZipCode__c = tableData[i].address.ZipCode__c;
+                            rc.Address_ZipCode_Encrypt__c = tableData[i].address.ZipCode_Encrypted__c;
                             rc.address_City__c = cityName;
                             rc.address_Contacts_Name__c = ContactPerson;
+                            rc.Detailed_Address__c = tableData[i].address.Detailed_Address__c;
+                            rc.Detailed_Address_Encrypt__c = tableData[i].address.Detailed_Address_Encrypted__c;
+                            rc.address_Telephone__c = tableData[i].address.Telephone__c;
+                            rc.Address_Telephone_Encrypt__c = tableData[i].address.Telephone_Encrypted__c;
                             //isUpload锛氭槸鍚︿笂浼燬AP  FSEApplyForRepairTime锛歋AP淇悊鐢宠鏃堕棿
                             if(isUpload && (FSEApplyForRepairTime != null)){
                                 rc.Address_type__c = 'X';
@@ -343,6 +376,8 @@
                 }
             }
             ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO, '鍏辨湁 '+indexCou+' 鏉℃暟鎹�'));
+            tableDataStr = JSON.serialize(tableData);
+            system.debug('tableDataStr = ' + tableDataStr);
         }catch(Exception e){
             //澶辫触鎻愮ず
             ApexPages.addMessages(e);
@@ -354,6 +389,12 @@
      * 淇濆瓨鍜屼慨鏀圭殑鏂规硶
      */
     public PageReference save(){
+        system.debug('Address value:'+JSON.serialize(insUpdData));       
+        if(String.isNotBlank(contactIdValue)&&String.isNotEmpty(contactIdValue)){
+            system.debug('Contact Value:'+contactIdValue);
+            insUpdData.Contacts__c = contactIdValue;
+        }
+        system.debug('Address value:'+JSON.serialize(insUpdData));
         savepoint sp = Database.setsavepoint();
         if(insUpdData != null){
             boolean flag = true;
@@ -451,7 +492,8 @@
                             monicker = surname.substring(1,surname.length());
                             surname = surname.substring(0,1);
                         }
-                        addContact = new Contact(LastName=surname,FirstName=monicker,AccountId=insUpdData.Customer__c,RecordTypeId=typeL);
+                        System.debug('newCon = '+newCon);
+                        addContact = new Contact(LastName=surname,FirstName=monicker,AccountId=insUpdData.Customer__c,RecordTypeId=typeL,AWS_Data_Id__c = newCon.AWS_Data_Id__c,LastName_Encrypted__c=newCon.LastName_Encrypted__c);
                         try{
                             //鏂板涓�鏉¤仈绯讳汉鏁版嵁
                             insert addContact;
@@ -515,8 +557,8 @@
     }
     //鏌ヨ鍦板潃琛ㄦ暟鎹�
     private String makeTextAddressSql(String typeSearchId) {
-        String AddressSql = 'SELECT ID,Address_Classification__c,Customer__c,Customer__r.Name,Contacts__c,Contacts__r.Name,Telephone__c'
-                        +',Province__c,Province__r.Name,City__c,City__r.name,Detailed_Address__c,Create_Contacts__c,ZipCode__c,CreatedByid '
+        String AddressSql = 'SELECT AWS_Data_Id__c,ID,Address_Classification__c,Customer__c,Customer__r.Name,Contacts__c,Contacts__r.Name,Contacts__r.AWS_Data_Id__c,Telephone__c'
+                        +',Province__c,Province__r.Name,City__c,City__r.name,Detailed_Address__c,Create_Contacts__c,ZipCode__c,CreatedByid,Detailed_Address_Encrypted__c,Telephone_Encrypted__c,ZipCode_Encrypted__c,Contacts__r.LastName_Encrypted__c'
                         + ' FROM Address__c where id != null';
         //绫诲瀷绛涢��
         if(!String.isBlank(typeText)){
@@ -542,8 +584,11 @@
             AddressSql += ' and Customer__r.Name LIKE \'%' + txtName.trim() + '%\'' ;
         }
         //璇︾粏鍦板潃绛涢��
-        if(!String.isBlank(txtAddress)){
-            AddressSql += ' and Detailed_Address__c LIKE \'%' + txtAddress.trim() + '%\'' ;
+        // if(!String.isBlank(txtAddress)){
+        //     AddressSql += ' and Detailed_Address__c LIKE \'%' + txtAddress.trim() + '%\'' ;
+        // }
+        if(!String.isBlank(addressDataIds)){
+            AddressSql += ' and AWS_Data_Id__c in('+addressDataIds.trim()+')';
         }
         //鎺掑簭锛屾牴鎹笂娆′慨鏀规椂闂村拰閲囩敤鏃堕棿杩涜闄嶅簭鎺掑簭,鍊间负绌烘斁鍒板悗闈�
         AddressSql += ' order by LastModifiedDate desc,Using_Datetime__c desc NULLS LAST';
@@ -551,6 +596,7 @@
         if(String.isBlank(typeSearchId)){
             AddressSql += ' limit 1000 ';
         }
+        System.debug('AddressSql = '+AddressSql);
         return AddressSql;
     }
     //鏌ヨ鍖婚櫌瀹㈡埛浜哄憳淇℃伅
diff --git a/force-app/main/default/classes/UpdateContractAimAmountHandler.cls b/force-app/main/default/classes/UpdateContractAimAmountHandler.cls
index 0b103cf..bfbcf19 100644
--- a/force-app/main/default/classes/UpdateContractAimAmountHandler.cls
+++ b/force-app/main/default/classes/UpdateContractAimAmountHandler.cls
@@ -246,7 +246,12 @@
             }
     
         }
-        if(!System.Test.isRunningTest()){
+        //Before : 
+        //if(!System.Test.isRunningTest()){
+        //After : to avoid mutiple execute
+        //if(!(System.Test.isRunningTest()||System.isFuture()||System.isBatch())){
+        //Update by Li Jun for PIPL 20220304
+        if(!(System.Test.isRunningTest()||System.isFuture()||System.isBatch())){
 
             if (queueableAccountIdList.size() > 0) {
                 NFM601Controller.callout('', queueableAccountIdList);
diff --git a/force-app/main/default/classes/WeeklyReportCmp.cls b/force-app/main/default/classes/WeeklyReportCmp.cls
index f2e8ce8..c2caf98 100644
--- a/force-app/main/default/classes/WeeklyReportCmp.cls
+++ b/force-app/main/default/classes/WeeklyReportCmp.cls
@@ -4,10 +4,45 @@
     @AuraEnabled public Map<String,String> fieldsMap{get;set;}
     @AuraEnabled public Map<String,List<Map<String,String>>> docmap{get;set;}
     @AuraEnabled public List<Map<String,String>> doctorList{get;set;}
-    
+    // PIPL update Yin Mingjie 21/02/2022 start
+    @AuraEnabled public Map<String,String> awsurl{get;set;}
+    // PIPL update Yin Mingjie 21/02/2022 end
     public WeeklyReportCmp() {
     }
+    // PIPL update Yin Mingjie 21/02/2022 start
+    @RemoteAction
+    @AuraEnabled
+    public static Map<String,String> getAwsurl(String sobj){
+        PIHelper.PIIntegration piIntegration = PIHelper.getPIIntegrationInfo(sobj);
+        Map<String,String> awsmap = new Map<String,String>();
+        awsmap.put('token', piIntegration.token);
+        awsmap.put('newUrl', piIntegration.newUrl);
+        awsmap.put('searchUrl', piIntegration.searchUrl);
+        awsmap.put('transactionURL', piIntegration.transactionURL);
+        return awsmap;
+    }
+    
+    @RemoteAction
+    @AuraEnabled
+    public static Map<String, String> saveAgencyContact(String name, String nameEncrypt, String type, String typeEncrypt, String doctorDivision1, 
+        String doctorDivision1Encrypt, String agencyHospitalid, String awsid) {
+        Agency_Contact__c agency_contact = new Agency_Contact__c();
 
+        agency_contact.Name = name;
+        agency_contact.Name_Encrypted__c = nameEncrypt;
+        agency_contact.Type__c = type;
+        agency_contact.Type_Encrypted__c = typeEncrypt;
+        agency_contact.Doctor_Division1__c = doctorDivision1;
+        agency_contact.Doctor_Division1_Encrypted__c = doctorDivision1Encrypt;
+        agency_contact.Agency_Hospital__c = agencyHospitalid;
+        agency_contact.AWS_Data_Id__c = awsid;
+        
+        Map<String, String> acMap = new Map<String, String>();
+        
+        acMap = LightningUtil.insertAgencyContact(agency_contact);
+        return acMap;
+    }
+    // PIPL update Yin Mingjie 21/02/2022 end
     @RemoteAction
     @AuraEnabled
     public static List<Map<String,String>> getProductList(String dc, String opdsis){
@@ -112,6 +147,8 @@
         
         //System.debug('fieldsMap is ' + fieldsMap);
         //System.debug('allselectlist is ' + this.allselectlist);
+
+        this.awsurl = getAwsurl('Agency_Contact__c');// 20220222 PI鏀归�� by Bright
     }
     
     
@@ -218,6 +255,9 @@
     
     @RemoteAction
     @AuraEnabled
+    // PIPL update Yin Mingjie 21/02/2022 start
+    public static Map<String,Map<String,String>> getDoctorList(String hospital_id){
+    /*
     public static List<Map<String,String>> getDoctorList(String hospital_id){
         List<Map<String,String>> ret = new List<Map<String,String>>();
         Map<String,String> space = new Map<String,String>();
@@ -225,14 +265,18 @@
         space.put('value', '');
         space.put('selected', 'true');
         ret.add(space);
-        
+    */
+    // PIPL update Yin Mingjie 21/02/2022 end
+
         // 鎴︾暐绉戝ID銈掑彇寰椼仐銇︺�併仢銈屻倰銈傘仺銇¨瀹€倰SELECT
         Agency_Hospital_Link__c ahl = [select Hospital__c from Agency_Hospital_Link__c where id = :hospital_id];
 
+        // PIPL update Yin Mingjie 21/02/2022 start
+        /*
         List<Agency_Contact__c> doctor_list = [select id,Name,Doctor_Division1__c,Type__c,Agency_Hospital__c 
             FROM Agency_Contact__c WHERE Hospital_ID18__c=:ahl.Hospital__c order by Name];
 
-        
+
         for (Agency_Contact__c row : doctor_list)
         {
             Map<String,String> tmp = new Map<String,String>();
@@ -242,8 +286,32 @@
             tmp.put('Doctor_Division1__c', row.Doctor_Division1__c);
             ret.add(tmp);
         }
+        */
+        List<Agency_Contact__c> doctor_list = [select id,Name,AWS_Data_Id__c,Doctor_Division1__c,Type__c,Agency_Hospital__c 
+            FROM Agency_Contact__c WHERE Hospital_ID18__c=:ahl.Hospital__c order by Name];
+
+        Map<String,Map<String,String>> ret_test = new Map<String,Map<String,String>>();
+        for (Agency_Contact__c row : doctor_list)
+        {
+            if(row.AWS_Data_Id__c == '' || row.AWS_Data_Id__c == null){
+                continue;
+            }
+            Map<String,String> tmp = new Map<String,String>();
+            tmp.put('label', row.Name);
+            tmp.put('value', row.Id);
+            tmp.put('awsid', row.AWS_Data_Id__c);
+            tmp.put('selected', 'false');
+            tmp.put('Doctor_Division1__c', row.Doctor_Division1__c);
+            ret_test.put(row.AWS_Data_Id__c, tmp);
+        }
+        PIHelper.PIIntegration piIntegration = PIHelper.getPIIntegrationInfo('Agency_Contact__c');
+        Map<String, String> sre = new Map<String, String>();
+        sre.put('token', piIntegration.token);
+        sre.put('searchUrl', piIntegration.searchUrl);
+        ret_test.put('sre', sre);
         
-        
+        return ret_test;
+        // PIPL update Yin Mingjie 21/02/2022 end
         /*
         String record_type_id = LightningUtil.getRecordTypeId(department);
 
@@ -260,9 +328,13 @@
         }
         */
 
+        // PIPL update Yin Mingjie 21/02/2022 start
+        /*
         return ret;
+        */
+        // PIPL update Yin Mingjie 21/02/2022 end
     }
-
+    
     /*
     @RemoteAction
     @AuraEnabled
@@ -408,8 +480,8 @@
         if (doctor != '') { agency_report.doctor2__c = doctor; } else { agency_report.doctor2__c = null; }
         if (Department_Cateogy != '') { agency_report.Department_Cateogy__c = Department_Cateogy; } else { agency_report.Department_Cateogy__c = null; }
         if (Purpose_Type != '') { agency_report.Purpose_Type__c = Purpose_Type; } else { agency_report.Purpose_Type__c = null; }
-        //SWAG-CBX68C fy 銆愬鎵樸�慏AMS绯荤粺鍛ㄦ姤妯″潡鍐呭闇�姹傚鍔� start SupportNeeds__c
-        if (SupportNeedsc != '') { agency_report.SupportNeeds__c = SupportNeedsc; } else { agency_report.SupportNeeds__c = null; }
+         //SWAG-CBX68C fy 銆愬鎵樸�慏AMS绯荤粺鍛ㄦ姤妯″潡鍐呭闇�姹傚鍔� start SupportNeeds__c
+         if (SupportNeedsc != '') { agency_report.SupportNeeds__c = SupportNeedsc; } else { agency_report.SupportNeeds__c = null; }
         if (Agency_Hospital != '') { agency_report.Agency_Hospital__c = Agency_Hospital; } else { agency_report.Agency_Hospital__c = null; }
         if (Product_Category1 != '') { agency_report.Product_Category1__c = Product_Category1; } else { agency_report.Product_Category1__c = null; }
         if (Product_Category2 != '') { agency_report.Product_Category2__c = Product_Category2; } else { agency_report.Product_Category2__c = null; }
@@ -516,10 +588,10 @@
        System.debug('sobjectName:::'+sobjectName);
        System.debug('fields:::'+fields);
        String errorMag = '';
-       
+
        // 鍒涘缓鍛ㄦ姤
        try{
-          
+
             if(fileData!=null){ 
                 String[] fileLines = new String[]{};
                 fileLines = fileData.split('\n');
@@ -554,23 +626,23 @@
                             errorMag += 'error1 绗�'+i+'琛屾暟鎹椿鍔ㄦ棩涓嶈兘涓虹┖';
                             errorMag += '=';
                         }
-                        //SWAG-C7AASP 銆愬鎵樸�慏AMS绯荤粺鍛ㄦ姤琛ュ綍鏃堕棿璋冩暣  2022-1-10 pk start
-                        List<String> R = new List<String>();
-                        R = inputvalues[1].split('/');
-                        system.debug('R202216'+R);
-                        Date rDate = Date.newInstance(Integer.Valueof(R[0]),Integer.Valueof(R[1]),Integer.Valueof(R[2]));
-                        system.debug('rDate202216'+rDate);
-                        Date start = Date.today().addMonths(-1);
-                        Date startDay = start.toStartOfWeek();
-                        Date firstDayOfweek = System.today().toStartOfWeek();
-                        Date endDay = firstDayOfweek.addDays(6);
-                        if(rDate > endDay || rDate < startDay){
-                            system.debug('rDate >= ssDate');
-                            // return 'error1 绗�'+i+'琛屾暟鎹椿鍔ㄦ棩涓嶈兘涓虹┖';
-                            errorMag += 'error1 绗�'+i+'琛屾暟鎹�,瀵煎叆鍛ㄦ姤浠呭彲琛ユ姤鏈�杩戜竴鏈堝懆鎶�';
-                            errorMag += '=';
-                        }
-                        //SWAG-C7AASP 銆愬鎵樸�慏AMS绯荤粺鍛ㄦ姤琛ュ綍鏃堕棿璋冩暣  2022-1-10 pk end
+                         //SWAG-C7AASP 銆愬鎵樸�慏AMS绯荤粺鍛ㄦ姤琛ュ綍鏃堕棿璋冩暣  2022-1-10 pk start
+                         List<String> R = new List<String>();
+                         R = inputvalues[1].split('/');
+                         system.debug('R202216'+R);
+                         Date rDate = Date.newInstance(Integer.Valueof(R[0]),Integer.Valueof(R[1]),Integer.Valueof(R[2]));
+                         system.debug('rDate202216'+rDate);
+                         Date start = Date.today().addMonths(-1);
+                         Date startDay = start.toStartOfWeek();
+                         Date firstDayOfweek = System.today().toStartOfWeek();
+                         Date endDay = firstDayOfweek.addDays(6);
+                         if(rDate > endDay || rDate < startDay){
+                             system.debug('rDate >= ssDate');
+                             // return 'error1 绗�'+i+'琛屾暟鎹椿鍔ㄦ棩涓嶈兘涓虹┖';
+                             errorMag += 'error1 绗�'+i+'琛屾暟鎹�,瀵煎叆鍛ㄦ姤浠呭彲琛ユ姤鏈�杩戜竴鏈堝懆鎶�';
+                             errorMag += '=';
+                         }
+                         //SWAG-C7AASP 銆愬鎵樸�慏AMS绯荤粺鍛ㄦ姤琛ュ綍鏃堕棿璋冩暣  2022-1-10 pk end
                         if(inputvalues[2] == '' || inputvalues[2] == null){
                             // return 'error1 绗�'+i+'琛屾暟鎹尰闄笉鑳戒负绌�';
                             errorMag += 'error1 绗�'+i+'琛屾暟鎹尰闄笉鑳戒负绌�';
@@ -603,7 +675,7 @@
                             errorMag += '=';
                         }
                         if((inputvalues[7] != '' && inputvalues[7] != null)&& inputvalues[5] == inputvalues[7]){
-                           
+
 
                             // return 'error1 绗�'+i+'琛屾暟鎹骇鍝佸尯鍒�1鍜屼骇鍝佸尯鍒�3鐨勫�间笉鑳介噸澶�';
                             errorMag += 'error1 绗�'+i+'琛屾暟鎹骇鍝佸尯鍒�1鍜屼骇鍝佸尯鍒�3鐨勫�间笉鑳介噸澶�';
@@ -642,7 +714,7 @@
                             errorMag += 'error3 绗�'+i+'琛屾暟鎹粨鏋滈�夐」鍒楄〃鐨勫��'+inputvalues[9]+'涓嶅瓨鍦�';
                             errorMag += '=';
                         }
-                        system.debug('inputvalues[0]=================>'+inputvalues[0]);
+                       system.debug('inputvalues[0]=================>'+inputvalues[0]);
                         system.debug('inputvalues[1]=================>'+inputvalues[1]);
                         system.debug('inputvalues[2]=================>'+inputvalues[2]);
                         system.debug('inputvalues[3]=================>'+inputvalues[3]);
@@ -652,7 +724,7 @@
                         system.debug('inputvalues[7]=================>'+inputvalues[7]);
                         system.debug('inputvalues[8]=================>'+inputvalues[8]);
                         system.debug('inputvalues[9]=================>'+inputvalues[9]);
-                        
+
 
                         nameList.add(inputvalues[0]);
                         dateList.add(Date.valueOf(inputvalues[1].replace('/','-')));
diff --git a/force-app/main/default/classes/XinDailyReportController.cls b/force-app/main/default/classes/XinDailyReportController.cls
index dfc13f6..351fafb 100644
--- a/force-app/main/default/classes/XinDailyReportController.cls
+++ b/force-app/main/default/classes/XinDailyReportController.cls
@@ -78,7 +78,14 @@
     public String repoErrorMessage{get;set;}
     public String idParam{get;set;}
     public Integer activitiesSize {get;set;}
-
+    //Add By Li Jun 20220224 for PIPL start
+    public String idVisitor1PI{set;get;}
+    public String idVisitor2PI{set;get;}
+    public String idVisitor3PI{set;get;}
+    public String idVisitor4PI{set;get;}
+    public String idVisitor5PI{set;get;}
+    public String staticResource {get; set;}
+    //Add By Li Jun 20220224 for PIPL end
 //*************************Create 20160630 OCM-231 瓒欏境鑺� Start*************************//
     public String completionFlg{get;set;}
     public Daily_Report__c reportBak {get;set;}
@@ -91,8 +98,14 @@
     public String etAPPMsg1 {get;set;} // 20210603 zh ETAPP涓庢棩鎶ヨ仈鍔�
     public String etAPPMsg2 {get;set;} // 20210603 zh ETAPP涓庢棩鎶ヨ仈鍔�
     public String etAPPFlg {get;set;} // 20210603 zh ETAPP涓庢棩鎶ヨ仈鍔�
+    //Add By Li Jun for PIPL 20220225
+    public String contactAWSIds{set;get;}
+    public String acSize{set;get;}
     /**銆�銈炽兂銈广儓銉┿偗銈裤��*/
     public XinDailyReportController() {
+        PIHelper.PIIntegration piIntegration = PIHelper.getPIIntegrationInfo('Contact');
+        staticResource = JSON.serialize(piIntegration);
+        system.debug('static resource:'+JSON.serialize(staticResource));
         EsetId = ApexPages.currentPage().getParameters().get('id');
         completionFlg =  ApexPages.currentPage().getParameters().get('completion');
         eventFlg = ApexPages.currentPage().getParameters().get('event');
@@ -113,6 +126,9 @@
 
     /**銆�銈炽兂銈广儓銉┿偗銈裤��*/
     public XinDailyReportController(ApexPages.StandardController controller) {
+        PIHelper.PIIntegration piIntegration = PIHelper.getPIIntegrationInfo('Contact');
+        staticResource = JSON.serialize(piIntegration);
+        system.debug('static resource:'+JSON.serialize(staticResource));
         EsetId = ApexPages.currentPage().getParameters().get('id');
         completionFlg =  ApexPages.currentPage().getParameters().get('completion');
         eventFlg = ApexPages.currentPage().getParameters().get('event');
@@ -469,6 +485,35 @@
             managerCommentEditFlg = false;
         }
         reportBak = report;
+        //Add By Li Jun for PIPL 20220225 Start 
+
+        List<String> conAWSIds = new List<String>();
+        Set<String> contactIdsForReport = new Set<String>();
+        for(Activity a:activities){
+            if(String.isNotEmpty(a.act.Visitor1_ID__c)&&String.isNotBlank(a.act.Visitor1_ID__c)){
+                contactIdsForReport.add(a.act.Visitor1_ID__c);
+            }
+            if(String.isNotEmpty(a.act.Visitor2_ID__c)&&String.isNotBlank(a.act.Visitor2_ID__c)){
+                contactIdsForReport.add(a.act.Visitor2_ID__c);
+            }
+            if(String.isNotEmpty(a.act.Visitor3_ID__c)&&String.isNotBlank(a.act.Visitor3_ID__c)){
+                contactIdsForReport.add(a.act.Visitor3_ID__c);
+            }
+            if(String.isNotEmpty(a.act.Visitor4_ID__c)&&String.isNotBlank(a.act.Visitor4_ID__c)){
+                contactIdsForReport.add(a.act.Visitor4_ID__c);
+            }
+            if(String.isNotEmpty(a.act.Visitor5_ID__c)&&String.isNotBlank(a.act.Visitor5_ID__c)){
+                contactIdsForReport.add(a.act.Visitor5_ID__c);
+            }
+            system.debug('Activity:'+JSON.serialize(a.act.Visitor1_ID__c));
+        }
+        List<Contact> conListForReport = new List<Contact>([select id,AWS_Data_Id__c from Contact where id in:contactIdsForReport and AWS_Data_Id__c!='']);
+        for(Contact con:conListForReport){
+            conAWSIds.add(con.AWS_Data_Id__c);
+        }
+        contactAWSIds = JSON.serialize(conAWSIds);
+        system.debug('Contact AWSIDs:'+contactAWSIds);
+        //Add By Li Jun for PIPL 20220225 End
         return null;
     }
     
@@ -3549,7 +3594,7 @@
             if(insertCancelPostponePlan.size() > 0){
                 insert insertCancelPostponePlan;
             }
-            
+
         }catch(Exception ex){
             logstr += '\n' + ex.getMessage();
             //2022-02-07  mzy 鏃ュ織淇敼  start            
diff --git a/force-app/main/default/pages/AssessmentReport.page b/force-app/main/default/pages/AssessmentReport.page
index 8b7e9fc..1e298cb 100644
--- a/force-app/main/default/pages/AssessmentReport.page
+++ b/force-app/main/default/pages/AssessmentReport.page
@@ -4,6 +4,62 @@
     <apex:includeScript value="{!URLFOR($Resource.PleaseWaitDialog)}"/>
     <apex:includeScript value="/soap/ajax/29.0/connection.js"/>
     <apex:includeScript value="/soap/ajax/29.0/apex.js"/>
+	<apex:includeScript value="{!URLFOR($Resource.AWSService, 'AWSService.js') }" />
+
+	<script>
+		var aws = JSON.parse('{!awsString}');
+		var staticResources = JSON.parse('{!staticResource}');
+		var contactAwsDataIds = [];
+		var contact = {};
+		queryContact();
+
+		function preparePayloadForSearchContact(){
+            let searchPayload = new Object();
+            searchPayload.dataIds = contactAwsDataIds;
+            searchPayload.contactName = '';
+            return JSON.stringify(searchPayload);
+        }
+
+		function queryContact(){
+			for(var i = 0;i<aws.length;i++){
+				contactAwsDataIds.push(aws[i].CamMem.Contact_ID__r.AWS_Data_Id__c);
+			}
+			let data = preparePayloadForSearchContact();
+			let searchCallBack = function searchCallBack(result){
+				console.log(result);
+                let contacts = result.object;
+                if(contacts == null){
+                    return;
+                }
+                for(var i=0;i<contacts.length;i++){
+                    contact[contacts[i].dataId] = contacts[i].lastName.replace(/"/g,"");
+                }
+                console.log(JSON.stringify(contact));
+            };
+			AWSService.search(staticResources.searchUrl,data,searchCallBack,staticResources.token);
+		}
+
+		function showPIDiv(awsDataId){
+            console.log('awsDataId Value:'+awsDataId);
+            let parentNode = document.getElementById(awsDataId);
+            let createDiv = document.createElement("div");  
+            createDiv.id = awsDataId+"_PI";  
+            let piInformation = 'Name:'+contact[awsDataId]
+            //let piInformation = 'Name:'+contact['943114607025717249'].lastName +'\n' +'Phone:'+contact['943114607025717249'].phone
+            createDiv.innerText = piInformation;
+            let x=window.event.x;
+            let y=window.event.y; 
+            createDiv.style.left=x;  
+            createDiv.style.top=y;  
+            createDiv.style.background="#dddddd";
+            createDiv.style.position = "absolute";
+            parentNode.appendChild(createDiv);  
+        }
+
+        function hidePIDiv(awsDataId){
+            document.getElementById(awsDataId+'_PI').remove();
+        }
+	</script>
 
     <apex:form id="allForm">
 
@@ -86,8 +142,10 @@
 				            <apex:column style="width: 18%">
 			                   <apex:outputField style="resize:vertical;width: 95%" id="Department" value="{!al.CamMem.Department_ID__c}"/>
 			                </apex:column>
-				            <apex:column style="width: 8%">
-			                   <apex:outputField style="resize:vertical;width: 95%" id="Name" value="{!al.CamMem.Contact_ID__c}"/>
+							<!-- id="{!al.CamMem.Contact_ID__r.AWS_Data_Id__c}" onmouseover="showPIDiv('{!al.CamMem.Contact_ID__r.AWS_Data_Id__c}')" onmouseout="hidePIDiv('{!al.CamMem.Contact_ID__r.AWS_Data_Id__c}')" -->
+				            <apex:column style="width: 8%" >
+			                   <!-- <apex:outputField style="resize:vertical;width: 95%" id="Name" value="{!al.CamMem.Contact_ID__c}" /> -->
+							   <span id="{!al.CamMem.Contact_ID__r.AWS_Data_Id__c}" onmouseover="showPIDiv('{!al.CamMem.Contact_ID__r.AWS_Data_Id__c}')" onmouseout="hidePIDiv('{!al.CamMem.Contact_ID__r.AWS_Data_Id__c}')">{!al.ARS.Name}</span>
 			                </apex:column>
 				            <apex:column style="width: 14%">
 			                   <apex:outputText style="resize:vertical;width: 95%" id="dept" value="{!al.CamMem.dept__c}"/>
diff --git a/force-app/main/default/pages/BMEWorkPage.page b/force-app/main/default/pages/BMEWorkPage.page
index c602afe..0c53143 100644
--- a/force-app/main/default/pages/BMEWorkPage.page
+++ b/force-app/main/default/pages/BMEWorkPage.page
@@ -5,6 +5,12 @@
 <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}"/>
 <apex:includeScript value="{!URLFOR($Resource.PleaseWaitDialog)}"/>
 <apex:includeScript value="{!URLFOR($Resource.BmeWorkJs)}"/>
+
+<!-- 20220222 PI鏀归�� by Bright--start -->
+<apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
+<script src="../../soap/ajax/53.0/connection.js" type="text/javascript"></script>
+<!-- 20220222 PI鏀归�� by Bright--end -->
+
 <style>
     td .dateFormat  {
         display: none;
@@ -83,6 +89,11 @@
 }
 body .pbBody table.list tr.headerRow td.col_Scroll {width:0px; padding:0px; border-width:0px;}
 body .pbBody table.list tr.dataRow td.col_Scroll {width:0px; padding:0px; border-width:0px;}
+
+.decrypt{position: absolute;top: 0;left: 100%;display: none;text-align: left;
+    padding-left: 5px;}
+a:hover .decrypt{display: block;width: 100px}
+
 </style>
 <script type="text/javascript">
 var heightAjustment = 120;
@@ -96,14 +107,14 @@
 </script>
 </head>
     <apex:form id="allForm">
-        <apex:actionFunction name="saveAndSearch" action="{!save}" rerender="allPanel" oncomplete="unblockUI();">
+        <apex:actionFunction name="saveAndSearch" action="{!save}" rerender="allPanel" oncomplete="afterSaveAndSearch();">
              <apex:param name="firstParam" assignTo="{!saveType}" value="" />
         </apex:actionFunction>
          <apex:actionFunction name="saveAndSort" action="{!save}" rerender="allPanel" oncomplete="unblockUI();">
             <apex:param name="firstParam" assignTo="{!saveType}" value="" />
             <apex:param name="secondParam" assignTo="{!sortKey}" value="" />
         </apex:actionFunction>
-        <apex:actionFunction name="searchOpp" action="{!chick}" rerender="allPanel" oncomplete="unblockUI();"/>
+        <apex:actionFunction name="searchOpp" action="{!chick}" rerender="allPanel" oncomplete="afterSearchOpp();"/>
         <apex:actionFunction name="sortTable" action="{!sortTable}" rerender="allPanel" oncomplete="unblockUI();">
             <apex:param name="firstParam" assignTo="{!sortKey}" value="" />
         </apex:actionFunction>
@@ -113,7 +124,7 @@
                     <tr>
                         <td width="150px">
                             <apex:commandButton onclick="blockme()" oncomplete="unblockUI();" action="{!save}" value="淇濆瓨"  style="height:30px;width:50px;"/>&nbsp;&nbsp;
-                            <apex:commandButton value="妫�绱�" onclick="searchOppJs_Account_copy();return false;" style="height:30px;width:70px;"/>
+                            <apex:commandButton value="妫�绱�" onclick="NewSearch();return false;" style="height:30px;width:70px;"/>
                         </td>
                         <td width="1000px">
                             <apex:pageMessages />
@@ -149,10 +160,11 @@
                             <apex:selectList value="{!numtextC1}" size="1" style="width:110px"><apex:selectOptions value="{!textOpts02}"/></apex:selectList>
                         </td>
                         <td width="130px">  
-                            <apex:selectList value="{!numtextC2}" size="1" style="width:110px"><apex:selectOptions value="{!equalOpts}"/></apex:selectList>
+                            <apex:selectList value="{!numtextC2}" size="1" style="width:110px"><apex:selectOptions value="{!equalOpts2}"/></apex:selectList>
                         </td>
                          <td width="200px">
-                          <apex:inputText style="width:150px" value="{!numtextC}"/>
+                          <apex:inputHidden id="AwsDataIds" value="{!AwsDataIds}"/>
+                          <apex:inputText id="numtextC" style="width:150px" value="{!numtextC}"/>
                         </td>
                         <td width="200px">
                             <font>鏁�&nbsp;鎹�&nbsp;瀛�&nbsp;娈�&nbsp;</font>&nbsp;
@@ -165,7 +177,7 @@
                           <apex:inputText style="width:150px" value="{!numtextD}"/>
                         </td>
                         <td width="230px">鏄剧ず&nbsp;
-                          <apex:selectList value="{!limits}" size="1" onchange="searchOppJs_Account_copy();return false;">
+                          <apex:selectList value="{!limits}" size="1" onchange="NewSearch();return false;">
                           <apex:selectOptions value="{!limitOpts}"/></apex:selectList>銆�鏉℃暟鎹�
                         </td>
                     </tr>
@@ -245,8 +257,10 @@
                                     <apex:outputField value="{!or.con.CampaignOwnerName__c}" />
                                     </apex:outputLink>
                                   </td>
-                                  <td align="center">
-                                    <apex:outputField value="{!or.Agcmmc.Contact__c}"/>
+                                  <td align="center" >
+                                    
+                                    <a style="position: relative" href="/{!or.con.Id}" aws-data-id="{!or.con.AWS_Data_Id__c}" title=""><span>{!or.con.MedicalStaff_Full_name__c}</span><span class="decrypt"></span></a>
+                                    
                                   </td>
                                   <td>
                                     <apex:outputField value="{!or.con.Accountid}"/>
@@ -304,45 +318,131 @@
                     </div>
                 </apex:outputPanel>
             </apex:pageBlock>
-<script type="text/javascript">
-j$(function() {
-    var tableWidth = 0;
-    j$('body .pbBody table#tableHeader tr.headerRow td').each(function() {
-        var colClass = getColClassName(this);
-        if (colClass != 'col_Scroll') {
-            var headerCol = j$('body .pbBody table.list tr.headerRow td.' + colClass);
-            tableWidth += headerCol.width();
-        }
-    });
-    j$('table#tableData').css('width', (tableWidth + 2) + 'px');
-    j$('table#tableHeader').css('width', (tableWidth + 2) + 'px');
-    // list 銇� headerRow 銇� td銇� toggleWidth() 銈掕拷鍔�
-    bindTdToggleWidth();
-});
-var elements = document.getElementsByTagName("select");
-for (i = 0; i < elements.length; i++) {
-    var id = elements[i].id;
-    if (id.length > 5 && id.substring(id.length - 5, id.length) == 'mlktp') {
-        elements[i].style.display = "none";
-    }
-}
-var tbl_l = document.getElementById("tableData_L");
-var input_l = tbl_l.getElementsByTagName("input");
-for (i = 0; i < input_l.length; i++) {
-    var id = input_l[i].id + '_lkid';
-    if (document.getElementById(id) != null) {
-        input_l[i].style.width = "75%";
-    }
-}
-var tbl = document.getElementById("tableData");
-var input = tbl.getElementsByTagName("input");
-for (i = 0; i < input.length; i++) {
-    var id = input[i].id + '_lkid';
-    if (document.getElementById(id) != null) {
-        input[i].style.width = "75%";
-    }
-}
-</script>
+            <script type="text/javascript">
+              j$(function() {
+                  var tableWidth = 0;
+                  j$('body .pbBody table#tableHeader tr.headerRow td').each(function() {
+                      var colClass = getColClassName(this);
+                      if (colClass != 'col_Scroll') {
+                          var headerCol = j$('body .pbBody table.list tr.headerRow td.' + colClass);
+                          tableWidth += headerCol.width();
+                      }
+                  });
+                  j$('table#tableData').css('width', (tableWidth + 2) + 'px');
+                  j$('table#tableHeader').css('width', (tableWidth + 2) + 'px');
+                  // list 銇� headerRow 銇� td銇� toggleWidth() 銈掕拷鍔�
+                  bindTdToggleWidth();
+              });
+              var elements = document.getElementsByTagName("select");
+              for (i = 0; i < elements.length; i++) {
+                  var id = elements[i].id;
+                  if (id.length > 5 && id.substring(id.length - 5, id.length) == 'mlktp') {
+                      elements[i].style.display = "none";
+                  }
+              }
+              var tbl_l = document.getElementById("tableData_L");
+              var input_l = tbl_l.getElementsByTagName("input");
+              for (i = 0; i < input_l.length; i++) {
+                  var id = input_l[i].id + '_lkid';
+                  if (document.getElementById(id) != null) {
+                      input_l[i].style.width = "75%";
+                  }
+              }
+              var tbl = document.getElementById("tableData");
+              var input = tbl.getElementsByTagName("input");
+              for (i = 0; i < input.length; i++) {
+                  var id = input[i].id + '_lkid';
+                  if (document.getElementById(id) != null) {
+                      input[i].style.width = "75%";
+                  }
+              }
+
+              AWSService.sfSessionId = '{!GETSESSIONID()}';
+              var staticResource = JSON.parse('{!staticResource}');
+
+              document.body.onload = function(){
+                NewSearch();
+              }
+              var awsdata_map={};
+              function NewSearch(){
+
+                // 濡傛灉鏈夊~鍐欏鍚嶏紝鍏堝幓aws鏌ヨ锛屽啀鐢╝wsdataid鏌ヨ鍚庡彴锛屽鏋滄病鏈夊~鍐欑洿鎺ユ煡璇㈠悗鍙�
+                awsdata_map={};
+                let e = document.getElementById("allPage:allForm:searchBlock:numtextC");
+                if(e && e.value){
+                  blockme();
+                  AWSService.search(staticResource.searchUrl,JSON.stringify({
+                    "contactName":e.value
+                  }),function(data){
+                    unblockUI();
+                    if(data.object && data.object.length > 0){
+                      let aws_data_ids = [];
+                      for(let d of data.object){
+                        if(d.dataId){
+                          awsdata_map[d.dataId] = d;
+                          aws_data_ids.push(d.dataId);
+                        }
+                      }
+                      document.getElementById("allPage:allForm:searchBlock:AwsDataIds").value = aws_data_ids.join(";");
+                    }else{
+                      document.getElementById("allPage:allForm:searchBlock:AwsDataIds").value = new Date().getTime();
+                    }
+                    searchOppJs_Account_copy();
+                  },staticResource.token);
+                }else{
+                  searchOppJs_Account_copy();
+                }
+
+              }
+
+              function afterSearchOpp(){
+                DecryptContactName(()=>unblockUI());
+              }
+
+              function afterSaveAndSearch(){
+                DecryptContactName(()=>unblockUI());
+              }
+
+              function DecryptContactName(callback){
+              
+                let no_in_ids = [];
+                j$("[aws-data-id]").each(function(i,e){
+                  let id = e.getAttribute("aws-data-id");
+                  if(!(id && awsdata_map.hasOwnProperty(id))){
+                    no_in_ids.push(id);
+                  }
+                });
+                if(no_in_ids.length>0){
+                  AWSService.search(staticResource.searchUrl,JSON.stringify({
+                    "dataIds":no_in_ids
+                  }),function(data){
+                    if(data.object && data.object.length > 0){
+                      for(let d of data.object){
+                        if(d.dataId){
+                          awsdata_map[d.dataId] = d;
+                        }
+                      }
+                    }
+                    BindToTile();
+                    if(callback)callback();
+                  },staticResource.token);
+                }
+                else{
+                  BindToTile();
+                  if(callback)callback();
+                }
+              }
+
+              function BindToTile(){
+                j$("[aws-data-id]").each(function(i,e){
+                  let id = e.getAttribute("aws-data-id");
+                  if(id && awsdata_map.hasOwnProperty(id) && awsdata_map[id].medicalStaffFullName){
+                    j$(e).find(".decrypt").html(awsdata_map[id].medicalStaffFullName);
+                  }
+                });
+              }
+              
+            </script>
         </apex:outputPanel>
     </apex:form>
 </apex:page>
\ No newline at end of file
diff --git a/force-app/main/default/pages/CM_SearchContact.page b/force-app/main/default/pages/CM_SearchContact.page
index 3092cbb..afa740a 100644
--- a/force-app/main/default/pages/CM_SearchContact.page
+++ b/force-app/main/default/pages/CM_SearchContact.page
@@ -1,21 +1,83 @@
 <apex:page id="Page" controller="CM_SearchContact" sidebar="false" showHeader="false" action="{!init}">
     <apex:stylesheet value="{!URLFOR($Resource.blockUIcss)}"/>
+    <!-- 2022/02/15 寮犲崕寤� dependency start -->
+    <apex:includeScript value="{!URLFOR($Resource.AWSService, 'AWSService.js') }" />
+    <!-- 2022/02/15 寮犲崕寤� dependency end -->
     <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}"/>
     <apex:includeScript value="{!URLFOR($Resource.PleaseWaitDialog)}"/>
     <script type="text/javascript">
+        // 2022/02/15 寮犲崕寤� 鏀归�燩I start
+        var staticResources = JSON.parse('{!staticResource}');
+        var contactAWSIds = JSON.parse('{!contactAWSIds}');
+        var LastName = '';
+        var contact = {};
+        var now_edit_id = '';
+        var aws_result = {};
+        searchContactAll();
+
+        function preparePayloadForSearchContact(){
+            let searchPayload = new Object();
+            searchPayload.dataIds = contactAWSIds;
+            searchPayload.contactName = LastName;
+            return JSON.stringify(searchPayload);
+        }
+
+        function searchContactAll(){
+            let data = preparePayloadForSearchContact();
+            let searchCallBack = function searchCallBack(result){
+                let contacts = result.object;
+                if(contacts == null){
+                    return;
+                }
+                for(var i=0;i<contacts.length;i++){
+                    let temp = {}
+                    temp.lastName = contacts[i].lastName;
+                    temp.phone = contacts[i].phone;
+
+                    contact[contacts[i].dataId] = temp;
+                }
+                console.log(JSON.stringify(contact));
+            };
+            AWSService.search(staticResources.searchUrl,data,searchCallBack,staticResources.token);
+        }
+
+        
+
         function searchContactJs() {
             blockme();
-            searchContact();
+            LastName = document.getElementById('Page:allForm:searchBlock:LastName').value;
+            let awsDataIdArray = [];
+            for(var key in contact){
+                if(contact[key].lastName.includes(LastName)){
+                    awsDataIdArray.push(key);
+                }
+            }
+            console.log(awsDataIdArray)
+            if(awsDataIdArray.length == 0){
+                clearLineInfoList();
+                return;
+            }
+            searchContactAll();
+            searchContact(awsDataIdArray.toString());
         }
+        // 2022/02/15 寮犲崕寤� 鏀归�燩I end
 
         function editContactJs(conid) {
             blockme();
+            now_edit_id=conid;// 2022/02/15 寰愪寒 鏀归�燩I
             editContact(conid);
         }
 
         function editSaveJs() {
+
+            document.getElementById("errorMsg").innerHTML = '';
+            if(!document.getElementById("Page:allForm:editBlock:Search_LastName__c").value){
+                document.getElementById("errorMsg").innerHTML = '<strong>閿欒:</strong> 蹇呴』濉啓銆�';
+                return;
+            }
+
             blockme();
-            saveNew();
+            ProcessPI({},GetEditObj());
         }
 
         function editClearJs() {
@@ -23,14 +85,17 @@
             editClear();
         }
 
-        function setContact(line) {
+        function setContact(line,awsDataId) {
             var openLine = '{!openLine}';
             var cm = 'allPage:allForm:allBlock:records:'+ (openLine - 1) + ':contact';
             var cmid = 'allPage:allForm:allBlock:records:'+ (openLine - 1) + ':contactId';
 
 
             var conid = j$(escapeVfId('Page:allForm:listBlock:lineinfo:' + (line - 1) + ':conId')).value();
-            var conname = j$(escapeVfId('Page:allForm:listBlock:lineinfo:' + (line - 1) + ':conName')).value();
+            //var conname = j$(escapeVfId('Page:allForm:listBlock:lineinfo:' + (line - 1) + ':conName')).value();
+            //2022/02/15 寮犲崕寤� 璧嬪�兼垚鏄庢枃 start
+            var conname = contact[awsDataId].lastName;
+            //2022/02/15 寮犲崕寤� 璧嬪�兼垚鏄庢枃 end
 
             j$(escapeVfId(cmid),window.opener.document).val(conid);
             j$(escapeVfId(cm),window.opener.document).val(conname);
@@ -53,19 +118,136 @@
 
             window.close();
         }
+
+        function showPIDiv(awsDataId){
+            console.log('awsDataId Value:'+awsDataId);
+            let parentNode = document.getElementById(awsDataId);
+            let createDiv = document.createElement("div");  
+            createDiv.id = awsDataId+"_PI";  
+            let piInformation = 'Name:'+contact[awsDataId].lastName +'\n' +'Phone:'+contact[awsDataId].phone
+            //let piInformation = 'Name:'+contact['943114607025717249'].lastName +'\n' +'Phone:'+contact['943114607025717249'].phone
+            createDiv.innerText = piInformation;
+            let x=window.event.x;
+            let y=window.event.y; 
+            createDiv.style.left=x;  
+            createDiv.style.top=y;  
+            createDiv.style.background="#dddddd";
+            createDiv.style.position = "absolute";
+            parentNode.appendChild(createDiv);  
+        }
+
+        function hidePIDiv(awsDataId){
+            document.getElementById(awsDataId+'_PI').remove();
+        }
+
+        // 2022骞�2鏈�15鏃� PI鏀归�� 寰愪寒 start
+        function sobjectToAws(){
+            let aws_id = document.getElementById("Page:allForm:editBlock:AWS_Data_Id__c").value;
+            if(contact.hasOwnProperty(aws_id)){
+                return contact[aws_id];
+            }
+            else{
+                console.log('not found aws data in contact obj');
+                return {};
+            }
+        }
+
+        function GetAWSResultObj(){
+            if(aws_result && aws_result.object && aws_result.object.length > 0){
+                return aws_result.object[0];
+            }
+            return null;
+        }
+        function ProcessPI(sobjJson, payloadForNewPI) {
+            
+            let url = staticResources.newUrl
+            if (now_edit_id) {
+            	url = staticResources.updateUrl
+            }
+            AWSService.post(url, payloadForNewPI, function(result){
+                aws_result = result;
+                SetEditObj();
+                saveNew();
+            }, staticResources.token);
+        }
+
+        function Trans(){
+            /*
+            jQuery.ajax({
+                "type":"post",
+                "url":staticResources.transactionUrl,
+                "data":{
+                    "txId":aws_result.txId,
+                    "isSuccess":1
+                },
+                beforeSend: function(request) {
+                    request.setRequestHeader("pi-token",staticResources.token);
+                    request.setRequestHeader('Content-Type', 'application/json');
+                },
+                success:function(data){
+                    console.log(data);
+                },
+                error:function(jqXHR, textStatus, errorThrown) {
+                    console.log(jqXHR);
+                    console.log(textStatus);
+                    console.log(errorThrown);
+                }
+            });*/
+            
+            AWSService.post(staticResources.transactionUrl, JSON.stringify({
+                    "txId":aws_result.txId,
+                    "isSuccess":1
+                }), function(result){
+                    window.location.reload();
+                }, staticResources.token);
+        }
+
+        function assignUnencrypted(){
+            let obj = sobjectToAws();
+            document.getElementById("Page:allForm:editBlock:Search_LastName__c").value = obj.lastName;
+            document.getElementById("Page:allForm:editBlock:Phone").value = obj.phone;
+            unblockUI();
+        }
+
+        function GetEditObj(){
+            return JSON.stringify([{
+                lastName : document.getElementById("Page:allForm:editBlock:Search_LastName__c").value,
+                phone : document.getElementById("Page:allForm:editBlock:Phone").value,
+                dataId:document.getElementById("Page:allForm:editBlock:AWS_Data_Id__c").value,
+            }]);
+        }
+
+        function SetEditObj(){
+            let obj = GetAWSResultObj();
+            if(obj){
+                document.getElementById("Page:allForm:editBlock:AWS_Data_Id__c").value = obj.dataId;
+                document.getElementById("Page:allForm:editBlock:Search_LastName__c").value = obj.lastName;
+                document.getElementById("Page:allForm:editBlock:LastName_Encrypted__c").value = obj.lastNameEncrypt;
+                document.getElementById("Page:allForm:editBlock:Phone").value = obj.phone;
+                document.getElementById("Page:allForm:editBlock:Phone_Encrypted__c").value = obj.phoneEncrypt;
+            }
+            
+        }
+        
+        // 2022骞�2鏈�15鏃� PI鏀归�� 寰愪寒 end
+
     </script>
 
     <apex:form id="allForm">
         <apex:actionFunction name="searchContact" action="{!searchContact}" rerender="allForm" onComplete="unblockUI();">
+            <apex:param name="awsDataIdArray" assignTo="{!awsDataIdArray}" value="" />
         </apex:actionFunction>
-        <apex:actionFunction name="editContact" action="{!editContact}" rerender="allForm" onComplete="unblockUI();">
+        <apex:actionFunction name="editContact" action="{!editContact}" rerender="allForm" onComplete="assignUnencrypted();">
             <apex:param name="firstParam" assignTo="{!conId}" value="" />
         </apex:actionFunction>
-        <apex:actionFunction name="saveNew" action="{!saveNew}" rerender="allForm" onComplete="unblockUI();">
+        <apex:actionFunction name="saveNew" action="{!saveNew}" rerender="allForm" onComplete="Trans();">
         </apex:actionFunction>
         <apex:actionFunction name="editClear" action="{!editClear}" rerender="allForm" onComplete="unblockUI();">
         </apex:actionFunction>
-
+        <!-- 2022/02/15 寮犲崕寤� 娓呯┖LineInfoList start -->
+        <apex:actionFunction name="clearLineInfoList" action="{!clearLineInfoList}" rerender="allForm" onComplete="unblockUI();">
+        </apex:actionFunction>
+        <!-- 2022/02/15 寮犲崕寤� 娓呯┖LineInfoList end -->
         <apex:outputPanel id="allPanel">
             <apex:pageBlock id="searchBlock" title="妫�绱㈡潯浠�">
                 <table class="linetable" border="0" style="border-collapse: collapse;width:600px;table-layout:fixed;">
@@ -78,44 +260,49 @@
                     </colgroup>
                     <tr>
                         <td>{!$ObjectType.Contact.fields.LastName.Label}</td>
-                        <td><apex:inputField value="{!searchCon.Search_LastName__c}" style="width: 90%"/></td>
-                        <td>{!$ObjectType.Contact.fields.FirstName.Label}</td>
-                        <td><apex:inputField value="{!searchCon.Search_FirstName__c}" style="width: 90%"/></td>
+                        <td><apex:inputField id="LastName" value="{!searchCon.Search_LastName__c}" style="width: 90%"/></td>
+                        <!-- 2022/02/15 寮犲崕寤� 涓嶉渶瑕丗irstName start -->
+                        <!-- <td>{!$ObjectType.Contact.fields.FirstName.Label}</td>
+                        <td><apex:inputField id="FirstName" value="{!searchCon.Search_FirstName__c}" style="width: 90%"/></td> -->
+                        <!-- 2022/02/15 寮犲崕寤� 涓嶉渶瑕丗irstName end -->
                         <td><input type="button" value="妫�绱�" onclick="searchContactJs(); return null;" /></td>
                     </tr>
                 </table>
             </apex:pageBlock>
 
             <apex:pageBlock id="listBlock" title="妫�绱㈢粨鏋�">
-            <div style="height: 200px; overflow-y: auto; overflow-x: hidden;">
-                <table class="edittable" border="0" style="border-collapse: collapse;width:580px;table-layout:fixed;">
-                    <colgroup>
-                        <col width="50px" />
-                        <col width="100px" />
-                        <col width="380px" />
-                        <col width="50px" />
-                    </colgroup>
-                    <tr>
-                        <th>No.</th>
-                        <th>{!$ObjectType.Contact.fields.Name.Label}</th>
-                        <th>{!$ObjectType.Contact.fields.AccountName__c.Label}</th>
-                        <th>鎿嶄綔</th>
-                    </tr>
-                    <apex:repeat id="lineinfo" value="{!lineInfoList}" var="lineinfo">
-                    <tr>
-                        <td>{!lineinfo.lineNo}
-                            <apex:inputHidden id="conId" value="{!lineinfo.con.id}"/>
-                            <apex:inputHidden id="conName" value="{!lineinfo.con.name}"/>
-                            <apex:inputHidden id="accountName" value="{!lineinfo.con.AccountName__c}"/>
-                            <apex:inputHidden id="accountid" value="{!lineinfo.con.accountid}"/>
-                        </td>
-                        <td><a href="#" onclick="setContact('{!lineinfo.lineNo}');">{!lineinfo.con.Name}</a></td>
-                        <td>{!lineinfo.con.AccountName__c}</td>
-                        <td><input style="width:90%;" type="button" value="缂栬緫" onclick="editContactJs('{!lineinfo.con.Id}'); return null;" /></td>
-                    </tr>
-                    </apex:repeat>
-                </table>
-            </div>
+                <div style="height: 200px; overflow-y: auto; overflow-x: hidden;">
+                    <table class="edittable" border="0" style="border-collapse: collapse;width:580px;table-layout:fixed;">
+                        <colgroup>
+                            <col width="50px" />
+                            <col width="100px" />
+                            <col width="380px" />
+                            <col width="50px" />
+                        </colgroup>
+                        <tr>
+                            <th>No.</th>
+                            <th>{!$ObjectType.Contact.fields.Name.Label}</th>
+                            <th>{!$ObjectType.Contact.fields.AccountName__c.Label}</th>
+                            <th>鎿嶄綔</th>
+                        </tr>
+                        <apex:repeat id="lineinfo" value="{!lineInfoList}" var="lineinfo">
+                        <tr>
+                            <td>{!lineinfo.lineNo}
+                                <apex:inputHidden id="conId" value="{!lineinfo.con.id}"/>
+                                <apex:inputHidden id="conName" value="{!lineinfo.con.name}"/>
+                                <apex:inputHidden id="accountName" value="{!lineinfo.con.AccountName__c}"/>
+                                <apex:inputHidden id="accountid" value="{!lineinfo.con.accountid}"/>
+                            </td>
+                            <!-- <td><a href="#" onclick="setContact('{!lineinfo.lineNo}');" id="943114607025717249" onmouseover="showPIDiv('943114607025717249')" onmouseout="hidePIDiv('943114607025717249')">{!lineinfo.con.Name}</a></td> -->
+                            <!-- 2022/02/15 寮犲崕寤� 瑙e瘑淇℃伅 start -->
+                            <td><a href="#" onclick="setContact('{!lineinfo.lineNo}','{!lineinfo.con.AWS_Data_Id__c}');" id="{!lineinfo.con.AWS_Data_Id__c}" onmouseover="showPIDiv('{!lineinfo.con.AWS_Data_Id__c}')" onmouseout="hidePIDiv('{!lineinfo.con.AWS_Data_Id__c}')">{!lineinfo.con.Name}</a></td>
+                            <!-- 2022/02/15 寮犲崕寤� 瑙e瘑淇℃伅 end -->
+                            <td>{!lineinfo.con.AccountName__c}</td>
+                            <td><input style="width:90%;" type="button" value="缂栬緫" onclick="editContactJs('{!lineinfo.con.Id}'); return null;" /></td>
+                        </tr>
+                        </apex:repeat>
+                    </table>
+                </div>
             </apex:pageBlock>
 
             <apex:pageBlock id="editBlock" title="鑱旂郴浜虹紪杈�">
@@ -123,6 +310,11 @@
                     <apex:commandButton onclick="editClearJs();" value="娓呯┖" rerender="dummy"/>
                     <apex:commandButton onclick="editSaveJs();" value="淇濆瓨" rerender="dummy"/>
                 </apex:pageBlockButtons>
+
+                <apex:inputHidden id="LastName_Encrypted__c" value="{!newCon.LastName_Encrypted__c}"/>
+                <apex:inputHidden id="Phone_Encrypted__c" value="{!newCon.Phone_Encrypted__c}"/>
+                <apex:inputHidden id="AWS_Data_Id__c" value="{!newCon.AWS_Data_Id__c}"/>
+
                 <table class="edittable" border="0" style="border-collapse: collapse; width:600px; table-layout:fixed;">
                     <colgroup>
                         <col width="50px" />
@@ -135,12 +327,13 @@
                     <tr>
                         <td>{!$ObjectType.Contact.fields.LastName.Label}</td>
                         <td><span><div class="requiredInput"><div class="requiredBlock"></div>
-                            <apex:inputField value="{!newCon.Search_LastName__c}" style="width: 90%"/>
+                            <apex:inputField id="Search_LastName__c" value="{!newCon.Search_LastName__c}" style="width: 90%"/>
+                            <div id="errorMsg" class="errorMsg"></div>
                         </div></span></td>
-                        <td>{!$ObjectType.Contact.fields.FirstName.Label}</td>
-                        <td><apex:inputField value="{!newCon.Search_FirstName__c}" style="width: 90%"/></td>
+                        <!-- <td>{!$ObjectType.Contact.fields.FirstName.Label}</td>
+                        <td><apex:inputField value="{!newCon.Search_FirstName__c}" style="width: 90%"/></td> -->
                         <td>{!$ObjectType.Contact.fields.Phone.Label}</td>
-                        <td><apex:inputField value="{!newCon.Phone}" style="width: 90%"/></td>
+                        <td><apex:inputField id="Phone" value="{!newCon.Phone}" style="width: 90%"/></td>
                     </tr>
                     <tr>
                         <td>{!$ObjectType.Contact.fields.Supplement__c.Label}</td>
diff --git a/force-app/main/default/pages/CM_SearchContactService.page b/force-app/main/default/pages/CM_SearchContactService.page
index addd4de..b902684 100644
--- a/force-app/main/default/pages/CM_SearchContactService.page
+++ b/force-app/main/default/pages/CM_SearchContactService.page
@@ -1,21 +1,83 @@
 <apex:page id="Page" controller="CM_SearchContactServiceController" sidebar="false" showHeader="false" action="{!init}">
+
+    <!-- 2022/02/15 寮犲崕寤� dependency start -->
+    <apex:includeScript value="{!URLFOR($Resource.AWSService, 'AWSService.js') }" />
+    <!-- 2022/02/15 寮犲崕寤� dependency end -->
     <apex:stylesheet value="{!URLFOR($Resource.blockUIcss)}"/>
     <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}"/>
     <apex:includeScript value="{!URLFOR($Resource.PleaseWaitDialog)}"/>
     <script type="text/javascript">
+
+        // 2022/02/15 寮犲崕寤� 鏀归�燩I start
+        var staticResources = JSON.parse('{!staticResource}');
+        var contactAWSIds = JSON.parse('{!contactAWSIds}');
+        var LastName = '';
+        var contact = {};
+        var now_edit_id = '';
+        var aws_result = {};
+        searchContactAll();
+
+        function preparePayloadForSearchContact(){
+            let searchPayload = new Object();
+            searchPayload.dataIds = contactAWSIds;
+            searchPayload.contactName = LastName;
+            return JSON.stringify(searchPayload);
+        }
+
+        function searchContactAll(){
+            let data = preparePayloadForSearchContact();
+            let searchCallBack = function searchCallBack(result){
+                let contacts = result.object;
+                if(contacts == null){
+                    return;
+                }
+                for(var i=0;i<contacts.length;i++){
+                    let temp = {}
+                    temp.lastName = contacts[i].lastName;
+                    temp.phone = contacts[i].phone;
+
+                    contact[contacts[i].dataId] = temp;
+                }
+                console.log(JSON.stringify(contact));
+            };
+            AWSService.search(staticResources.searchUrl,data,searchCallBack,staticResources.token);
+        }
+
         function searchContactJs() {
             blockme();
-            searchContact();
+            LastName = document.getElementById('Page:allForm:searchBlock:LastName').value;
+            let awsDataIdArray = [];
+            for(var key in contact){
+                if(contact[key].lastName.includes(LastName)){
+                    awsDataIdArray.push(key);
+                }
+            }
+            console.log(awsDataIdArray)
+            if(awsDataIdArray.length == 0){
+                clearLineInfoList();
+                return;
+            }
+            searchContactAll();
+            searchContact(awsDataIdArray.toString());
         }
+        // 2022/02/15 寮犲崕寤� 鏀归�燩I end
 
         function editContactJs(conid) {
             blockme();
+            now_edit_id=conid;// 2022/02/15 寰愪寒 鏀归�燩I
             editContact(conid);
         }
 
         function editSaveJs() {
+
+            document.getElementById("errorMsg").innerHTML = '';
+            if(!document.getElementById("Page:allForm:editBlock:Search_LastName__c").value){
+                document.getElementById("errorMsg").innerHTML = '<strong>閿欒:</strong> 蹇呴』濉啓銆�';
+                return;
+            }
+
             blockme();
-            saveNew();
+            ProcessPI({},GetEditObj());
         }
 
         function editClearJs() {
@@ -23,12 +85,16 @@
             editClear();
         }
 
-        function setContact(line) {
+        function setContact(line,awsDataId) {
             var openLine = '{!openLine}';
             var cm = 'allPage:allForm:allBlock:records:'+ (openLine - 1) + ':contact';
             var cmid = 'allPage:allForm:allBlock:records:'+ (openLine - 1) + ':contactId';
             var conid = j$(escapeVfId('Page:allForm:listBlock:lineinfo:' + (line - 1) + ':conId')).value();
-            var conname = j$(escapeVfId('Page:allForm:listBlock:lineinfo:' + (line - 1) + ':conName')).value();
+            //var conname = j$(escapeVfId('Page:allForm:listBlock:lineinfo:' + (line - 1) + ':conName')).value();
+            //2022/02/15 寮犲崕寤� 璧嬪�兼垚鏄庢枃 start
+            var conname = contact[awsDataId].lastName;
+            //2022/02/15 寮犲崕寤� 璧嬪�兼垚鏄庢枃 end
+
             // 2018/11/19 HWAG-B399RW 鑷姩璁剧疆鐪佸拰甯� start
             var cityName = j$(escapeVfId('Page:allForm:listBlock:lineinfo:' + (line - 1) + ':City')).value();
             var StateName = j$(escapeVfId('Page:allForm:listBlock:lineinfo:' + (line - 1) + ':State')).value();
@@ -45,19 +111,115 @@
 
             window.close();
         }
+
+        function showPIDiv(awsDataId){
+            console.log('awsDataId Value:'+awsDataId);
+            let parentNode = document.getElementById(awsDataId);
+            let createDiv = document.createElement("div");  
+            createDiv.id = awsDataId+"_PI";  
+            let piInformation = 'Name:'+contact[awsDataId].lastName +'\n' +'Phone:'+contact[awsDataId].phone
+            //let piInformation = 'Name:'+contact['943114607025717249'].lastName +'\n' +'Phone:'+contact['943114607025717249'].phone
+            createDiv.innerText = piInformation;
+            let x=window.event.x;
+            let y=window.event.y; 
+            createDiv.style.left=x;  
+            createDiv.style.top=y;  
+            createDiv.style.background="#dddddd";
+            createDiv.style.position = "absolute";
+            parentNode.appendChild(createDiv);  
+        }
+
+        function hidePIDiv(awsDataId){
+            document.getElementById(awsDataId+'_PI').remove();
+        }
+
+        // 2022骞�2鏈�15鏃� PI鏀归�� 寰愪寒 start
+        function sobjectToAws(){
+            let aws_id = document.getElementById("Page:allForm:editBlock:AWS_Data_Id__c").value;
+            if(contact.hasOwnProperty(aws_id)){
+                return contact[aws_id];
+            }
+            else{
+                console.log('not found aws data in contact obj');
+                return {};
+            }
+        }
+
+        function GetAWSResultObj(){
+            if(aws_result && aws_result.object && aws_result.object.length > 0){
+                return aws_result.object[0];
+            }
+            return null;
+        }
+        function ProcessPI(sobjJson, payloadForNewPI) {
+            //blockme();
+            let url = staticResources.newUrl
+            if (now_edit_id) {
+            	url = staticResources.updateUrl
+            }
+            AWSService.post(url, payloadForNewPI, function(result){
+                aws_result = result;
+                SetEditObj();
+                saveNew();
+            }, staticResources.token);
+        }
+
+        function Trans(){
+            
+            AWSService.post(staticResources.transactionUrl, JSON.stringify({
+                "txId":aws_result.txId,
+                "isSuccess":1
+            }), function(result){
+                window.location.reload();
+            }, staticResources.token);
+        }
+
+        function assignUnencrypted(){
+            let obj = sobjectToAws();
+            document.getElementById("Page:allForm:editBlock:Search_LastName__c").value = obj.lastName;
+            //document.getElementById("Page:allForm:editBlock:Phone").value = obj.phone;
+            unblockUI();
+        }
+
+        function GetEditObj(){
+            return JSON.stringify([{
+                lastName : document.getElementById("Page:allForm:editBlock:Search_LastName__c").value,
+                //phone : document.getElementById("Page:allForm:editBlock:Phone").value,
+                dataId:document.getElementById("Page:allForm:editBlock:AWS_Data_Id__c").value,
+            }]);
+        }
+
+        function SetEditObj(){
+            let obj = GetAWSResultObj();
+            if(obj){
+                document.getElementById("Page:allForm:editBlock:AWS_Data_Id__c").value = obj.dataId;
+                document.getElementById("Page:allForm:editBlock:Search_LastName__c").value = obj.lastName;
+                document.getElementById("Page:allForm:editBlock:LastName_Encrypted__c").value = obj.lastNameEncrypt;
+                //document.getElementById("Page:allForm:editBlock:Phone").value = obj.phone;
+                document.getElementById("Page:allForm:editBlock:Phone_Encrypted__c").value = obj.phoneEncrypt;
+            }
+            
+        }
+        
+        // 2022骞�2鏈�15鏃� PI鏀归�� 寰愪寒 end
+
     </script>
 
     <apex:form id="allForm">
         <apex:actionFunction name="searchContact" action="{!searchContact}" rerender="allForm,allPanel" onComplete="unblockUI();">
+            <apex:param name="awsDataIdArray" assignTo="{!awsDataIdArray}" value="" />
         </apex:actionFunction>
-        <apex:actionFunction name="editContact" action="{!editContact}" rerender="allForm,allPanel" onComplete="unblockUI();">
+        <apex:actionFunction name="editContact" action="{!editContact}" rerender="allForm,allPanel" onComplete="assignUnencrypted();">
             <apex:param name="firstParam" assignTo="{!conId}" value="" />
         </apex:actionFunction>
-        <apex:actionFunction name="saveNew" action="{!saveNew}" rerender="allForm,allPanel" onComplete="unblockUI();">
+        <apex:actionFunction name="saveNew" action="{!saveNew}" rerender="allForm,allPanel" onComplete="Trans();">
         </apex:actionFunction>
         <apex:actionFunction name="editClear" action="{!editClear}" rerender="allForm,allPanel" onComplete="unblockUI();">
         </apex:actionFunction>
-
+        <!-- 2022/02/15 寮犲崕寤� 娓呯┖LineInfoList start -->
+        <apex:actionFunction name="clearLineInfoList" action="{!clearLineInfoList}" rerender="allForm" onComplete="unblockUI();">
+        </apex:actionFunction>
+        <!-- 2022/02/15 寮犲崕寤� 娓呯┖LineInfoList end -->
         <apex:outputPanel id="allPanel">
             <apex:pageBlock id="searchBlock" title="妫�绱㈡潯浠�">
                 <table class="linetable" border="0" style="border-collapse: collapse;width:600px;table-layout:fixed;">
@@ -70,9 +232,11 @@
                     </colgroup>
                     <tr>
                         <td>{!$ObjectType.Contact.fields.LastName.Label}</td>
-                        <td><apex:inputField value="{!searchCon.Search_LastName__c}" style="width: 90%"/></td>
-                        <td>{!$ObjectType.Contact.fields.FirstName.Label}</td>
-                        <td><apex:inputField value="{!searchCon.Search_FirstName__c}" style="width: 90%"/></td>
+                        <td><apex:inputField id="LastName" value="{!searchCon.Search_LastName__c}" style="width: 90%"/></td>
+                        <!-- 2022/02/15 寮犲崕寤� 涓嶉渶瑕丗irstName start -->
+                        <!-- <td>{!$ObjectType.Contact.fields.FirstName.Label}</td>
+                        <td><apex:inputField id="FirstName" value="{!searchCon.Search_FirstName__c}" style="width: 90%"/></td> -->
+                        <!-- 2022/02/15 寮犲崕寤� 涓嶉渶瑕丗irstName end -->
                         <td><input type="button" value="妫�绱�" onclick="searchContactJs(); return null;" /></td>
                     </tr>
                 </table>
@@ -104,7 +268,10 @@
                             <!--  2018/11/19 HWAG-B399RW  瀛樺彇瀹㈡埛浜哄憳鐪佸競鏁版嵁 end -->
 
                         </td>
-                        <td><a href="#" onclick="setContact('{!lineinfo.lineNo}');">{!lineinfo.con.Name}</a></td>
+                        <!-- <td><a href="#" onclick="setContact('{!lineinfo.lineNo}');" id="943114607025717249" onmouseover="showPIDiv('943114607025717249')" onmouseout="hidePIDiv('943114607025717249')">{!lineinfo.con.Name}</a></td> -->
+                        <!-- 2022/02/15 寮犲崕寤� 瑙e瘑淇℃伅 start -->
+                        <td><a href="#" onclick="setContact('{!lineinfo.lineNo}','{!lineinfo.con.AWS_Data_Id__c}');" id="{!lineinfo.con.AWS_Data_Id__c}" onmouseover="showPIDiv('{!lineinfo.con.AWS_Data_Id__c}')" onmouseout="hidePIDiv('{!lineinfo.con.AWS_Data_Id__c}')">{!lineinfo.con.Name}</a></td>
+                        <!-- 2022/02/15 寮犲崕寤� 瑙e瘑淇℃伅 end -->
                         <td>{!lineinfo.con.AccountName__c}</td>
                         <td><input style="width:90%;" type="button" value="缂栬緫" onclick="editContactJs('{!lineinfo.con.Id}'); return null;" /></td>
                     </tr>
@@ -118,6 +285,9 @@
                     <apex:commandButton onclick="editClearJs();" value="娓呯┖" rerender="dummy"/>
                     <apex:commandButton onclick="editSaveJs();" value="淇濆瓨" rerender="dummy"/>
                 </apex:pageBlockButtons>
+                <apex:inputHidden id="LastName_Encrypted__c" value="{!newCon.LastName_Encrypted__c}"/>
+                <apex:inputHidden id="Phone_Encrypted__c" value="{!newCon.Phone_Encrypted__c}"/>
+                <apex:inputHidden id="AWS_Data_Id__c" value="{!newCon.AWS_Data_Id__c}"/>
                 <table class="edittable" border="0" style="border-collapse: collapse; width:600px; table-layout:fixed;">
                     <colgroup>
                         <col width="50px" />
@@ -130,10 +300,11 @@
                     <tr>
                         <td>{!$ObjectType.Contact.fields.LastName.Label}</td>
                         <td><span><div class="requiredInput"><div class="requiredBlock"></div>
-                            <apex:inputField value="{!newCon.Search_LastName__c}" style="width: 90%"/>
+                            <apex:inputField id="Search_LastName__c" value="{!newCon.Search_LastName__c}" style="width: 90%"/>
+                            <div id="errorMsg" class="errorMsg"></div>
                         </div></span></td>
-                        <td>{!$ObjectType.Contact.fields.FirstName.Label}</td>
-                        <td><apex:inputField value="{!newCon.Search_FirstName__c}" style="width: 90%"/></td>
+                        <!-- <td>{!$ObjectType.Contact.fields.FirstName.Label}</td>
+                        <td><apex:inputField value="{!newCon.Search_FirstName__c}" style="width: 90%"/></td> -->
                     </tr>
                     <tr>
                         <td>{!$ObjectType.Contact.fields.Supplement__c.Label}</td>
diff --git a/force-app/main/default/pages/CampaignMember.page b/force-app/main/default/pages/CampaignMember.page
index ba54e2c..7da4f58 100644
--- a/force-app/main/default/pages/CampaignMember.page
+++ b/force-app/main/default/pages/CampaignMember.page
@@ -6,6 +6,9 @@
 <apex:includeScript value="{!URLFOR($Resource.jquerysuggestjs)}"/>
 <apex:includeScript value="{!URLFOR($Resource.connection20)}"/>
 <apex:includeScript value="{!URLFOR($Resource.apex20)}"/>
+<!-- 2022/02/15 寮犲崕寤� dependency start -->
+<apex:includeScript value="{!URLFOR($Resource.AWSService, 'AWSService.js') }" />
+<!-- 2022/02/15 寮犲崕寤� dependency end -->
 <style type="text/css">
     .visitorplace_results {
         border: 1px solid gray;
@@ -138,8 +141,49 @@
         }
     }
 
+    // 20220216 PI鏀归�� by 寰愪寒 start
+    var staticResource = JSON.parse('{!staticResource}');
+    
+    var awsids = [];
+    var aws_result={};
+
+    jQuery(function(){
+        var eles = document.getElementsByClassName("contact");
+        for(let e of eles){
+            let awsid = e.getAttribute('awsid');
+            if(awsid) awsids.push(awsid);
+        }
+
+        if(awsids.length > 0){
+            AWSService.search(staticResource.searchUrl,JSON.stringify({dataIds:awsids}),function(result){
+                if(result.status == '0' && result.object && result.object.length > 0){
+                    for(let obj of result.object){
+                        jQuery("[awsid='"+obj.dataId + "']").val(obj.lastName);
+                    }
+                }
+            },staticResource.token);
+        }
+    })
+
+    
+
+    
+
+    //jQuery(".contact").attr("awsid");
+
+    function encrypt(){
+        jQuery(".contact").each(function(i,e){
+            if(e.value){
+                e.value = '***';
+            }
+        });
+    }
+
+    // 20220216 PI鏀归�� by 寰愪寒 end
+
 function saveJs() {
     blockme();
+    encrypt() // 20220216 PI鏀归�� by 寰愪寒
     saveLine();
 }
 function addJs() {
@@ -349,7 +393,7 @@
                             <apex:inputHidden id="departmentHiddenId" value="{!lineInfo.cm.Department_ID__c}" />
                         </td>
                         <td align="center">
-                            <apex:inputField id="contact" value="{!lineInfo.cm.Contact__c}" onclick="openSearchContact({!lineInfo.line})" style="width: 95%"></apex:inputField>
+                            <apex:inputField styleClass="contact" html-awsid="{!lineInfo.cm.Contact_ID__r.AWS_Data_Id__c}" id="contact" value="{!lineInfo.cm.Contact__c}" onclick="openSearchContact({!lineInfo.line})" style="width: 95%"></apex:inputField>
                             <apex:inputHidden id="contactId" value="{!lineInfo.cm.Contact_ID__c}"></apex:inputHidden>
                             <apex:inputHidden id="contactSDCName" value="{!lineInfo.cm.Contact_ID__r.Strategic_dept_Class__r.Name}"></apex:inputHidden>
                         </td>
diff --git a/force-app/main/default/pages/CampaignMemberService.page b/force-app/main/default/pages/CampaignMemberService.page
index 27a5b34..a697d6b 100644
--- a/force-app/main/default/pages/CampaignMemberService.page
+++ b/force-app/main/default/pages/CampaignMemberService.page
@@ -6,6 +6,9 @@
 <apex:includeScript value="{!URLFOR($Resource.jquerysuggestjs)}"/>
 <apex:includeScript value="{!URLFOR($Resource.connection20)}"/>
 <apex:includeScript value="{!URLFOR($Resource.apex20)}"/>
+<!-- 2022/02/15 寮犲崕寤� dependency start -->
+<apex:includeScript value="{!URLFOR($Resource.AWSService, 'AWSService.js') }" />
+<!-- 2022/02/15 寮犲崕寤� dependency end -->
 <style type="text/css">
     .visitorplace_results {
         border: 1px solid gray;
@@ -136,10 +139,53 @@
         }
     }
 
+// 20220216 PI鏀归�� by 寰愪寒 start
+var staticResource = JSON.parse('{!staticResource}');
+    
+    var awsids = [];
+    var aws_result={};
+
+    jQuery(function(){
+        var eles = document.getElementsByClassName("contact");
+        for(let e of eles){
+            let awsid = e.getAttribute('awsid');
+            if(awsid) awsids.push(awsid);
+        }
+
+        if(awsids.length > 0){
+            AWSService.search(staticResource.searchUrl,JSON.stringify({dataIds:awsids}),function(result){
+                if(result.status == '0' && result.object && result.object.length > 0){
+                    for(let obj of result.object){
+                        jQuery("[awsid='"+obj.dataId + "']").val(obj.lastName);
+                    }
+                }
+            },staticResource.token);
+        }
+    })
+
+    
+
+    
+
+    //jQuery(".contact").attr("awsid");
+
+    function encrypt(){
+        jQuery(".contact").each(function(i,e){
+            if(e.value){
+                e.value = '***';
+            }
+        });
+    }
+
+    // 20220216 PI鏀归�� by 寰愪寒 end
+
 function saveJs() {
     blockme();
+    encrypt() // 20220216 PI鏀归�� by 寰愪寒
     saveLine();
 }
+
+
 function addJs() {
     blockme();
     addLine();
@@ -261,7 +307,7 @@
                             <apex:inputHidden id="departmentHiddenId" value="{!lineInfo.cm.Department_ID__c}" />
                         </td>
                         <td align="center">
-                            <apex:inputField id="contact" value="{!lineInfo.cm.Contact__c}" onclick="openSearchContact({!lineInfo.line})" style="width: 95%"></apex:inputField>
+                            <apex:inputField styleClass="contact" html-awsid="{!lineInfo.cm.Contact_ID__r.AWS_Data_Id__c}" id="contact" value="{!lineInfo.cm.Contact__c}" onclick="openSearchContact({!lineInfo.line})" style="width: 95%"></apex:inputField>
                             <apex:inputHidden id="contactId" value="{!lineInfo.cm.Contact_ID__c}"></apex:inputHidden>
                             <apex:inputHidden id="contactSDCName" value="{!lineInfo.cm.Contact_ID__r.Strategic_dept_Class__r.Name}"></apex:inputHidden>
                         </td>
diff --git a/force-app/main/default/pages/ConsumReassign.page b/force-app/main/default/pages/ConsumReassign.page
index 80e25f0..8a9319c 100644
--- a/force-app/main/default/pages/ConsumReassign.page
+++ b/force-app/main/default/pages/ConsumReassign.page
@@ -2,7 +2,23 @@
 <apex:stylesheet value="{!URLFOR($Resource.blockUIcss)}"/>
 <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}"/>
 <apex:includeScript value="{!URLFOR($Resource.PleaseWaitDialog)}"/>
+<apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
+<script src="../../soap/ajax/53.0/connection.js" type="text/javascript"></script>
+<style>
+    .decrypt {
+        position: absolute;
+        top: 0;
+        left: 100%;
+        display: none;
+        text-align: left;
+        padding-left: 5px;
+    }
 
+    a:hover .decrypt {
+        display: block;
+        width: 100px
+    }
+</style>
 <script type="text/javascript">
     function savejs() {
         if (confirm('鏄惁鎿嶄綔閲嶆柊鍒嗛厤锛�')) {
@@ -29,6 +45,54 @@
             returnjs();
         }
     }
+
+    AWSService.sfSessionId = '{!GETSESSIONID()}';
+    var staticResource = JSON.parse('{!staticResource}');
+
+    document.body.onload = function () {
+        blockme();
+        DecryptContactName(() => unblockUI());
+    }
+    var awsdata_map = {};
+
+    function DecryptContactName(callback) {
+
+        let no_in_ids = [];
+        j$("[aws-data-id]").each(function (i, e) {
+            let id = e.getAttribute("aws-data-id");
+            if (!(id && awsdata_map.hasOwnProperty(id))) {
+                no_in_ids.push(id);
+            }
+        });
+        if (no_in_ids.length > 0) {
+            AWSService.search(staticResource.searchUrl, JSON.stringify({
+                "dataIds": no_in_ids
+            }), function (data) {
+                if (data.object && data.object.length > 0) {
+                    for (let d of data.object) {
+                        if (d.dataId) {
+                            awsdata_map[d.dataId] = d;
+                        }
+                    }
+                }
+                BindToTile();
+                if (callback) callback();
+            }, staticResource.token);
+        }
+        else {
+            BindToTile();
+            if (callback) callback();
+        }
+    }
+
+    function BindToTile() {
+        j$("[aws-data-id]").each(function (i, e) {
+            let id = e.getAttribute("aws-data-id");
+            if (id && awsdata_map.hasOwnProperty(id) && awsdata_map[id].trialUser) {
+                j$(e).find(".decrypt").html(awsdata_map[id].trialUser);
+            }
+        });
+    }
 </script>
 
     <apex:form id="allForm">
@@ -37,7 +101,7 @@
         <apex:outputPanel id="allPanel">
             <apex:pageBlock title="閲嶆柊鍒嗛厤" id="allBlock">
                 <apex:pageBlockButtons >
-                    <apex:commandButton onclick="savejs(); return false;" value="淇濆瓨" disabled="{!saveBtn}" rerender="dummy"/>
+                    <apex:commandButton onclick="savejs(); return false;" value="淇濆瓨" disabled="{!saveBtn}" rerender="dummy" />
                     <apex:commandButton onclick="returnjs(); return false;" value="杩斿洖" rerender="dummy"/>
                 </apex:pageBlockButtons>
 
@@ -59,7 +123,9 @@
                         <col width="175"/>
                     </colgroup>
                     <tr style="background-color:#DCDCDC;">
-                        <th style="text-align:center">鍏ㄩ��<apex:inputCheckbox id="checkAll" value="{!checkAll}" onclick="checkAll(this);"/></th>
+                        <th style="text-align:center">鍏ㄩ��
+                            <apex:inputCheckbox id="checkAll" value="{!checkAll}" onclick="checkAll(this);" />
+                        </th>
                         <th style="text-align:center">{!$ObjectType.Consum_Apply_Equipment_Set_Detail__c.fields.Consum_Apply_Equipment_Set__c.label}</th>
                         <th style="text-align:center">{!$ObjectType.Consum_Apply_Equipment_Set_Detail__c.fields.Fixture_Model_No_F__c.label}</th>
                         <th style="text-align:center">鏁伴噺</th>
@@ -72,15 +138,37 @@
                     <apex:repeat value="{!lineInfoList}" var="info" id="records">
                         <tr>
                             <!--<td align="center"><apex:inputCheckbox value="{!info.isSelect}" id="rowCheck" disabled="{!IF(info.status=='cantCancel', true, false)}"/></td>-->
-                            <td align="center"><apex:inputCheckbox styleClass="checker" value="{!info.isSelect}" id="rowCheck"/></td>
-                            <td align="left"><apex:outputField value="{!info.caesd.Consum_Apply_Equipment_Set__c}"></apex:outputField></td>
-                            <td align="left"><apex:outputField value="{!info.caesd.Fixture_Model_No_F__c}"></apex:outputField></td>
-                            <td align="left"><apex:outputField value="{!info.caesd.Trial_Num__c}"></apex:outputField></td>
-                            <td align="left"><apex:outputField value="{!info.caesd.Asset__c}"></apex:outputField></td>
-                            <td align="left"><apex:outputField value="{!info.caesd.SerialNumber_F__c}"></apex:outputField></td>
-                            <td align="center"><apex:outputField value="{!info.caesd.RAESD_Status__c}"></apex:outputField></td>
-                            <td align="center"><apex:outputField value="{!info.caesd.Trial_User__c}"></apex:outputField></td>
-                            <td align="center"><apex:outputField value="{!info.caesd.Degree_Of_Importance__c}"></apex:outputField></td>
+                            <td align="center">
+                                <apex:inputCheckbox styleClass="checker" value="{!info.isSelect}" id="rowCheck" />
+                            </td>
+                            <td align="left">
+                                <apex:outputField value="{!info.caesd.Consum_Apply_Equipment_Set__c}"></apex:outputField>
+                            </td>
+                            <td align="left">
+                                <apex:outputField value="{!info.caesd.Fixture_Model_No_F__c}"></apex:outputField>
+                            </td>
+                            <td align="left">
+                                <apex:outputField value="{!info.caesd.Trial_Num__c}"></apex:outputField>
+                            </td>
+                            <td align="left">
+                                <apex:outputField value="{!info.caesd.Asset__c}"></apex:outputField>
+                            </td>
+                            <td align="left">
+                                <apex:outputField value="{!info.caesd.SerialNumber_F__c}"></apex:outputField>
+                            </td>
+                            <td align="center">
+                                <apex:outputField value="{!info.caesd.RAESD_Status__c}"></apex:outputField>
+                            </td>
+                            <td align="center">
+                                <a style="position: relative" href="/{!info.caesd.Id}" aws-data-id="{!info.caesd.AWS_Data_Id__c}" title="">
+                                    <span>{!info.caesd.Trial_User__c}</span>
+                                    <span class="decrypt"></span>
+                                </a>
+                                <!-- <apex:outputField value="{!info.caesd.Trial_User__c}"></apex:outputField> -->
+                            </td>
+                            <td align="center">
+                                <apex:outputField value="{!info.caesd.Degree_Of_Importance__c}"></apex:outputField>
+                            </td>
                         </tr>
                     </apex:repeat>
                 </table>
diff --git a/force-app/main/default/pages/ConsumTrial.page b/force-app/main/default/pages/ConsumTrial.page
index ef576a7..77fda6c 100644
--- a/force-app/main/default/pages/ConsumTrial.page
+++ b/force-app/main/default/pages/ConsumTrial.page
@@ -5,6 +5,7 @@
     <apex:stylesheet value="{!URLFOR($Resource.ConsumTrialPageCss)}"/>
     <apex:includeScript value="{!URLFOR($Resource.ReceivingNotePageJS)}"/>
     <apex:includeScript value="{!URLFOR($Resource.CommonUtilJs)}"/>
+    <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }"/>
     <apex:form id="allForm">
         <style>
             table.headTable td   {
@@ -23,287 +24,392 @@
               background-repeat:no-repeat;
             }
         </style>
-<script type="text/javascript">
-    var heightAjustment = 120;
-    var widthAjustment = 30;
+        <script type="text/javascript">
+            var heightAjustment = 120;
+            var widthAjustment = 30;
+            var staticResource = JSON.parse('{!staticResource}');
+            
 
-    // 閫傜敤鎸夐挳
-    function applyJs() {
-        var appliedFlag = true;
-        var selectFlag = true;
-        var isCheckFlag = false;
-        var ShowDemonstration = j$(escapeVfId('allPage:allForm:searchBlock:ShowDemonstration')).val();  // 灞曠ず/婕旂ず
-        var OperationType = j$(escapeVfId('allPage:allForm:searchBlock:OperationType')).val();  // 鏈紡绫诲埆
-        var ConsumStartDate = j$(escapeVfId('allPage:allForm:searchBlock:ConsumStartDate')).val();  // 棰勮浣跨敤鏃�
-        var CaseOrAnimalOrgan = j$(escapeVfId('allPage:allForm:searchBlock:CaseOrAnimalOrgan')).val();  // 鐥呬緥/鍔ㄧ墿鑴忓櫒
-        var TrialUser= j$(escapeVfId('allPage:allForm:searchBlock:TrialUser')).val();  // 璇曠敤鑰�
-        var FollowerUserid = j$(escapeVfId('allPage:allForm:searchBlock:FollowerUser_lkid')).val();  // 璺熷彴鑰匢d
-        var FollowerUsername = j$(escapeVfId('allPage:allForm:searchBlock:FollowerUser_lkold')).val();  // 璺熷彴鑰匩ame
+            // 閫傜敤鎸夐挳
+            function applyJs() {
+                var appliedFlag = true;
+                var selectFlag = true;
+                var isCheckFlag = false;
+                var ShowDemonstration = j$(escapeVfId('allPage:allForm:searchBlock:ShowDemonstration')).val();  // 灞曠ず/婕旂ず
+                var OperationType = j$(escapeVfId('allPage:allForm:searchBlock:OperationType')).val();  // 鏈紡绫诲埆
+                var ConsumStartDate = j$(escapeVfId('allPage:allForm:searchBlock:ConsumStartDate')).val();  // 棰勮浣跨敤鏃�
+                var CaseOrAnimalOrgan = j$(escapeVfId('allPage:allForm:searchBlock:CaseOrAnimalOrgan')).val();  // 鐥呬緥/鍔ㄧ墿鑴忓櫒
+                var TrialUser= j$(escapeVfId('allPage:allForm:searchBlock:TrialUser')).val();  // 璇曠敤鑰�
+                var FollowerUserid = j$(escapeVfId('allPage:allForm:searchBlock:FollowerUser_lkid')).val();  // 璺熷彴鑰匢d
+                var FollowerUsername = j$(escapeVfId('allPage:allForm:searchBlock:FollowerUser_lkold')).val();  // 璺熷彴鑰匩ame
 
-        var ShowDemonstrations = []; // 灞曠ず/婕旂ず
-        j$("td.intf.dataCellBorder1.Show_demonstration__c").each(function() {
-            ShowDemonstrations.push(j$(this));
-        });
-        var OperationTypes = [];  // 鏈紡绫诲埆
-        j$("td.intf.dataCellBorder1.Operation_Type__c").each(function() {
-            OperationTypes.push(j$(this));
-        });
-        var ConsumStartDates = [];  // 澶囧搧棰勮浣跨敤鏃�
-        j$("td.intf.dataCellBorder1.Consum_Start_Date__c").each(function() {
-            ConsumStartDates.push(j$(this));
-        });
-        var CaseOrAnimalOrgans = [];  // 鐥呬緥/鍔ㄧ墿鑴忓櫒
-        j$("td.intf.dataCellBorder1.Case_OR_animal_organ__c").each(function() {
-            CaseOrAnimalOrgans.push(j$(this));
-        });
+                var ShowDemonstrations = []; // 灞曠ず/婕旂ず
+                j$("td.intf.dataCellBorder1.Show_demonstration__c").each(function() {
+                    ShowDemonstrations.push(j$(this));
+                });
+                var OperationTypes = [];  // 鏈紡绫诲埆
+                j$("td.intf.dataCellBorder1.Operation_Type__c").each(function() {
+                    OperationTypes.push(j$(this));
+                });
+                var ConsumStartDates = [];  // 澶囧搧棰勮浣跨敤鏃�
+                j$("td.intf.dataCellBorder1.Consum_Start_Date__c").each(function() {
+                    ConsumStartDates.push(j$(this));
+                });
+                var CaseOrAnimalOrgans = [];  // 鐥呬緥/鍔ㄧ墿鑴忓櫒
+                j$("td.intf.dataCellBorder1.Case_OR_animal_organ__c").each(function() {
+                    CaseOrAnimalOrgans.push(j$(this));
+                });
 
-        var TrialUsers = [];  // 璇曠敤鑰�
-        j$("td.intf.dataCellBorder1.Trial_User__c").each(function() {
-            TrialUsers.push(j$(this));
-        });
+                var TrialUsers = [];  // 璇曠敤鑰�
+                j$("td.intf.dataCellBorder1.Trial_User__c").each(function() {
+                    TrialUsers.push(j$(this));
+                });
 
-        var FollowerUsers = [];  // 璺熷彴鑰�:
-        j$("td.intf.dataCellBorder1.Follower_User__c").each(function() {
-            FollowerUsers.push(j$(this));
-        });
+                var FollowerUsers = [];  // 璺熷彴鑰�:
+                j$("td.intf.dataCellBorder1.Follower_User__c").each(function() {
+                    FollowerUsers.push(j$(this));
+                });
 
-        var currentPageRecordCount = j$(escapeVfId('allPage:allForm:dataBlock:currentPageRecordCnt')).val();
-        for (var i = 0; i < currentPageRecordCount; i++) {
-            var checkBox = j$(escapeVfId('allPage:allForm:dataBlock:dataline_L:' + i + ':rowCheck'));
-            if (checkBox.prop('checked') == true) {
-                isCheckFlag = true;
-                // 'x'鏃朵笉閫傜敤
-                if (ShowDemonstration != 'x') {
-                    ShowDemonstrations[i].find("select").val(ShowDemonstration);
-                    appliedFlag = false;
-                }
-                if (OperationType != 'x') {
-                    OperationTypes[i].find("select").val(OperationType);
-                    appliedFlag = false;
-                }
-                if (ConsumStartDate != null && ConsumStartDate != '' && typeof(ConsumStartDate) != "undefined") {
-                    ConsumStartDates[i].find("input").val(ConsumStartDate);
-                    appliedFlag = false;
-                }
-                if (CaseOrAnimalOrgan != 'x') {
-                    CaseOrAnimalOrgans[i].find("select").val(CaseOrAnimalOrgan);
-                    appliedFlag = false;
-                }
-
-                if (TrialUser != null && TrialUser != '' && typeof(TrialUser) != "undefined") {
-                    TrialUsers[i].find("input").val(TrialUser);
-                    appliedFlag = false;
-                }
-
-                // if (equipmentTypes[i].find("select").val() != productCategory && productCategory != '') {
-                if (FollowerUserid != null && parseInt(FollowerUserid) != 0 && typeof(FollowerUserid) != "undefined"
-                    && FollowerUsername != null && FollowerUsername != 'null' && typeof(FollowerUsername) != "undefined") {
-                    // setChangeFlg();
-
-                    var inputs = FollowerUsers[i].find("input");
-                    for (var j = 0; j < inputs.length; j++) {
-                        if(inputs[j].name.endsWith('_lkid')) {
-                            inputs[j].value = FollowerUserid;
+                var currentPageRecordCount = j$(escapeVfId('allPage:allForm:dataBlock:currentPageRecordCnt')).val();
+                for (var i = 0; i < currentPageRecordCount; i++) {
+                    var checkBox = j$(escapeVfId('allPage:allForm:dataBlock:dataline_L:' + i + ':rowCheck'));
+                    if (checkBox.prop('checked') == true) {
+                        isCheckFlag = true;
+                        // 'x'鏃朵笉閫傜敤
+                        if (ShowDemonstration != 'x') {
+                            ShowDemonstrations[i].find("select").val(ShowDemonstration);
+                            appliedFlag = false;
                         }
-                        else if (inputs[j].name.endsWith('_lkold')
-                            || inputs[j].name.endsWith('inputField')) {
-                            inputs[j].value = FollowerUsername;
+                        if (OperationType != 'x') {
+                            OperationTypes[i].find("select").val(OperationType);
+                            appliedFlag = false;
+                        }
+                        if (ConsumStartDate != null && ConsumStartDate != '' && typeof(ConsumStartDate) != "undefined") {
+                            ConsumStartDates[i].find("input").val(ConsumStartDate);
+                            appliedFlag = false;
+                        }
+                        if (CaseOrAnimalOrgan != 'x') {
+                            CaseOrAnimalOrgans[i].find("select").val(CaseOrAnimalOrgan);
+                            appliedFlag = false;
+                        }
+
+                        if (TrialUser != null && TrialUser != '' && typeof(TrialUser) != "undefined") {
+                            TrialUsers[i].find("input").val(TrialUser);
+                            appliedFlag = false;
+                        }
+
+                        // if (equipmentTypes[i].find("select").val() != productCategory && productCategory != '') {
+                        if (FollowerUserid != null && parseInt(FollowerUserid) != 0 && typeof(FollowerUserid) != "undefined"
+                            && FollowerUsername != null && FollowerUsername != 'null' && typeof(FollowerUsername) != "undefined") {
+                            // setChangeFlg();
+
+                            var inputs = FollowerUsers[i].find("input");
+                            for (var j = 0; j < inputs.length; j++) {
+                                if(inputs[j].name.endsWith('_lkid')) {
+                                    inputs[j].value = FollowerUserid;
+                                }
+                                else if (inputs[j].name.endsWith('_lkold')
+                                    || inputs[j].name.endsWith('inputField')) {
+                                    inputs[j].value = FollowerUsername;
+                                }
+                            }
+                            appliedFlag = false;
                         }
                     }
-                    appliedFlag = false;
+                }
+                j$(escapeVfId('allPage:allForm:pageBlockButton1:clearApplyFlagId')).val(false);
+                // var clearApplyFlag = false;
+                window.setTimeout(function () {
+                    if (ConsumStartDate == null
+                        && TrialUser == null
+                        && (FollowerUserid== null || FollowerUsername == null)) {  // 閫傜敤鍏ュ姏妗嗗叏涓虹┖
+                        // alert('閫傜敤鍖鸿緭鍏ユ涓虹┖锛岃杈撳叆閫傜敤鍊笺��');
+                        var applyMsg = '閫傜敤鍖鸿緭鍏ユ涓虹┖锛岃杈撳叆閫傜敤鍊笺��';
+                        //passApplyMsgToController(applyMsg, 'Fail');
+                        return;
+                    }
+                    if (isCheckFlag == false) {
+                        // alert('鏈嬀閫変换浣曞緟閫傜敤鏁版嵁銆�');
+                        var applyMsg = '鏈嬀閫変换浣曞緟閫傜敤鏁版嵁銆�';
+                        //passApplyMsgToController(applyMsg, 'Fail');
+                        return;
+                    }
+
+                    if (selectFlag) {
+                        if (!appliedFlag) {
+                            var alertMsg = "閫傜敤瀹屼簡 \r\n";
+                            if (ConsumStartDate != null && typeof(ConsumStartDate) != "undefined") {
+                                var alertMsg1 = "宸插皢鎵撳嬀鏁版嵁涓殑 " + "澶囧搧棰勮浣跨敤鏃�" + " 閫傜敤涓� " + ConsumStartDate + " \r\n";
+                                alertMsg += alertMsg1;
+                            }
+                            if (TrialUser != null && typeof(TrialUser) != "undefined") {
+                                var alertMsg1 = "宸插皢鎵撳嬀鏁版嵁涓殑 " + "璇曠敤鑰�" + " 閫傜敤涓� " + TrialUser + " \r\n";
+                                alertMsg += alertMsg1;
+                            }
+                            if (FollowerUserid != null && typeof(FollowerUserid) != "undefined"
+                                && FollowerUsername != null && typeof(FollowerUsername) != "undefined") {
+                                var alertMsg2 = "宸插皢鎵撳嬀鏁版嵁涓殑 " + "璺熷彴鑰�:" + " 閫傜敤涓� " + FollowerUsername + " \r\n";
+                                alertMsg += alertMsg2;
+                            }
+                            // alert(alertMsg);
+                            // clearApplyFlag = true;
+                            j$(escapeVfId('allPage:allForm:pageBlockButton1:clearApplyFlagId')).val(true);
+                            //passApplyMsgToController(alertMsg, 'Success');
+                        }
+                    } else {
+                        if (!appliedFlag) {
+                            var alertMsg = "閫傜敤瀹屼簡 \r\n";
+                            if (ConsumStartDate != null && typeof(ConsumStartDate) != "undefined") {
+                                var alertMsg1 = "宸插皢鎵撳嬀鏁版嵁涓殑 " + "澶囧搧棰勮浣跨敤鏃�" + " 閫傜敤涓� " + ConsumStartDate + " \r\n";
+                                alertMsg += alertMsg1;
+                            }
+                            if (TrialUser != null && typeof(TrialUser) != "undefined") {
+                                var alertMsg1 = "宸插皢鎵撳嬀鏁版嵁涓殑 " + " 璇曠敤鑰�" + " 閫傜敤涓� " + TrialUser + " \r\n";
+                                alertMsg += alertMsg1;
+                            }
+                            if (FollowerUserid != null && typeof(FollowerUserid) != "undefined"
+                                && FollowerUsername != null && typeof(FollowerUsername) != "undefined") {
+                                var alertMsg2 = "宸插皢鎵撳嬀鏁版嵁涓殑 " + "璺熷彴鑰�:" + " 閫傜敤涓� " + FollowerUsername + " \r\n";
+                                alertMsg += alertMsg2;
+                            }
+                            //passApplyMsgToController(alertMsg, 'Success');
+                            j$(escapeVfId('allPage:allForm:pageBlockButton1:clearApplyFlagId')).val(true);
+                        } else {
+                            var alertMsg = "鍏朵粬閫夐」: " + otherSelectOptionText +"涓棤姝ら�夐」鍊�" + otherSelectOptionValue + "锛屾棤娉曟洿鏂般��";
+                            //passApplyMsgToController(alertMsg, 'Fail');
+                        }
+                    }
+                }, 5);
+            }
+
+            function clearApplyValue() {
+                var clearApplyValueFlag = j$(escapeVfId('allPage:allForm:pageBlockButton1:clearApplyFlagId')).val();
+                if(clearApplyValueFlag) {
+                    j$(escapeVfId('{!$Component.stockId}')).val('');
+                    j$(escapeVfId('{!$Component.applyEquipmentTypeId}')).val('');
+                    j$(escapeVfId('{!$Component.applyAssetTypeListId}')).val('');
+                    j$(escapeVfId('{!$Component.otherSelectionId}')).val('');
+                }
+                j$(escapeVfId('allPage:allForm:pageBlockButton1:clearApplyFlagId')).val(false);
+            }
+
+            function checkSavingJs() {
+                var isSavingSuccess = j$(escapeVfId('isSavingSuccessId')).val();
+                // alert(isSavingSuccess);
+                if (isSavingSuccess != 'false') {
+                    //setSaveSuccessMsg();
                 }
             }
-        }
-        j$(escapeVfId('allPage:allForm:pageBlockButton1:clearApplyFlagId')).val(false);
-        // var clearApplyFlag = false;
-        window.setTimeout(function () {
-            if (ConsumStartDate == null
-                    && TrialUser == null
-                    && (FollowerUserid== null || FollowerUsername == null)) {  // 閫傜敤鍏ュ姏妗嗗叏涓虹┖
-                // alert('閫傜敤鍖鸿緭鍏ユ涓虹┖锛岃杈撳叆閫傜敤鍊笺��');
-                var applyMsg = '閫傜敤鍖鸿緭鍏ユ涓虹┖锛岃杈撳叆閫傜敤鍊笺��';
-                //passApplyMsgToController(applyMsg, 'Fail');
-                return;
-            }
-            if (isCheckFlag == false) {
-                 // alert('鏈嬀閫変换浣曞緟閫傜敤鏁版嵁銆�');
-                var applyMsg = '鏈嬀閫変换浣曞緟閫傜敤鏁版嵁銆�';
-                //passApplyMsgToController(applyMsg, 'Fail');
-                return;
+
+            function resetMove(d, up, len) {
+                var line = j$(escapeVfId(d)).find('input')[0].value;
+                resetMoveUpDown(up, parseInt(line), len);
             }
 
-            if (selectFlag) {
-                if (!appliedFlag) {
-                    var alertMsg = "閫傜敤瀹屼簡 \r\n";
-                    if (ConsumStartDate != null && typeof(ConsumStartDate) != "undefined") {
-                        var alertMsg1 = "宸插皢鎵撳嬀鏁版嵁涓殑 " + "澶囧搧棰勮浣跨敤鏃�" + " 閫傜敤涓� " + ConsumStartDate + " \r\n";
-                        alertMsg += alertMsg1;
+            function moveToTop(d, up, len) {
+                var line = j$(escapeVfId(d)).find('input')[0].value;
+                console.log(line);
+                var isSuccessful = true;
+                if (up) {
+                    for(var i = parseInt(line) ; i > 1 && isSuccessful; i-- ) {
+                        isSuccessful = resetMoveUpDown(up, i, len);
                     }
-                    if (TrialUser != null && typeof(TrialUser) != "undefined") {
-                        var alertMsg1 = "宸插皢鎵撳嬀鏁版嵁涓殑 " + "璇曠敤鑰�" + " 閫傜敤涓� " + TrialUser + " \r\n";
-                        alertMsg += alertMsg1;
-                    }
-                    if (FollowerUserid != null && typeof(FollowerUserid) != "undefined"
-                    && FollowerUsername != null && typeof(FollowerUsername) != "undefined") {
-                        var alertMsg2 = "宸插皢鎵撳嬀鏁版嵁涓殑 " + "璺熷彴鑰�:" + " 閫傜敤涓� " + FollowerUsername + " \r\n";
-                        alertMsg += alertMsg2;
-                    }
-                    // alert(alertMsg);
-                    // clearApplyFlag = true;
-                    j$(escapeVfId('allPage:allForm:pageBlockButton1:clearApplyFlagId')).val(true);
-                    //passApplyMsgToController(alertMsg, 'Success');
                 }
-            } else {
-                if (!appliedFlag) {
-                    var alertMsg = "閫傜敤瀹屼簡 \r\n";
-                    if (ConsumStartDate != null && typeof(ConsumStartDate) != "undefined") {
-                        var alertMsg1 = "宸插皢鎵撳嬀鏁版嵁涓殑 " + "澶囧搧棰勮浣跨敤鏃�" + " 閫傜敤涓� " + ConsumStartDate + " \r\n";
-                        alertMsg += alertMsg1;
+                else {
+                    for(var i = parseInt(line) ; i < len && isSuccessful; i++ ) {
+                        isSuccessful = resetMoveUpDown(up, i, len);
                     }
-                    if (TrialUser != null && typeof(TrialUser) != "undefined") {
-                        var alertMsg1 = "宸插皢鎵撳嬀鏁版嵁涓殑 " + " 璇曠敤鑰�" + " 閫傜敤涓� " + TrialUser + " \r\n";
-                        alertMsg += alertMsg1;
-                    }
-                    if (FollowerUserid != null && typeof(FollowerUserid) != "undefined"
-                    && FollowerUsername != null && typeof(FollowerUsername) != "undefined") {
-                        var alertMsg2 = "宸插皢鎵撳嬀鏁版嵁涓殑 " + "璺熷彴鑰�:" + " 閫傜敤涓� " + FollowerUsername + " \r\n";
-                        alertMsg += alertMsg2;
-                    }
-                    //passApplyMsgToController(alertMsg, 'Success');
-                    j$(escapeVfId('allPage:allForm:pageBlockButton1:clearApplyFlagId')).val(true);
-                } else {
-                    var alertMsg = "鍏朵粬閫夐」: " + otherSelectOptionText +"涓棤姝ら�夐」鍊�" + otherSelectOptionValue + "锛屾棤娉曟洿鏂般��";
-                    //passApplyMsgToController(alertMsg, 'Fail');
                 }
+                unblockUI();
             }
-        }, 5);
-    }
 
-    function clearApplyValue() {
-        var clearApplyValueFlag = j$(escapeVfId('allPage:allForm:pageBlockButton1:clearApplyFlagId')).val();
-        if(clearApplyValueFlag) {
-            j$(escapeVfId('{!$Component.stockId}')).val('');
-            j$(escapeVfId('{!$Component.applyEquipmentTypeId}')).val('');
-            j$(escapeVfId('{!$Component.applyAssetTypeListId}')).val('');
-            j$(escapeVfId('{!$Component.otherSelectionId}')).val('');
-        }
-        j$(escapeVfId('allPage:allForm:pageBlockButton1:clearApplyFlagId')).val(false);
-    }
+            function resetMoveUpDown(up, line, len) {
 
-    function checkSavingJs() {
-        var isSavingSuccess = j$(escapeVfId('isSavingSuccessId')).val();
-        // alert(isSavingSuccess);
-        if (isSavingSuccess != 'false') {
-            //setSaveSuccessMsg();
-        }
-    }
+                var items = j$(".dataCellBorder2");
+                var item1 = j$("td.intf.dataCellBorder1.Degree_Of_Importance__c");
+                var item2 = j$("td.dataCellBorder1.col_Fixture_Model_No__c");
+                var currentPageRecordCount = j$(escapeVfId('allPage:allForm:dataBlock:currentPageRecordCnt')).val();
+                var isSuccessful = false;
+                // alert(item1);
+                var i = line - 1;
+                var i1 = line + 1;
+                // var tr = j$('#tableData').find('tbody').find('tr:eq(' + (i) + ')');
+                if (up == true){
+                    var tr = j$('#tableData').find('tbody').find('tr:eq(' + (i) + ')');
+                    var trL = j$('#tableData_L').find('tbody').find('tr:eq(' + (i) + ')');
+                    if(line != 1) {
+                        var model1 = j$(item2[i - 1]).find("span").text();
+                        var model2 = j$(item2[i]).find("span").text();
+                        if (model1 != model2) {
+                            unblockUI();
+                            return;
+                        }
 
-    function resetMove(d, up, len) {
-        var line = j$(escapeVfId(d)).find('input')[0].value;
-        resetMoveUpDown(up, parseInt(line), len);
-    }
+                        var v1 = j$(item1[i - 1]).find("input").val();
+                        var v2 = j$(item1[i]).find("input").val();
+                        setChangeFlg(i-1);
+                        setChangeFlg(i);
+                        j$(items[i - 1]).children('.ordernocls').val(line);
+                        j$(items[i]).children('.ordernocls').val(line - 1);
+                        j$(item1[i - 1]).find("input").val(v2);
+                        j$(item1[i]).find("input").val(v1);
 
-    function moveToTop(d, up, len) {
-        var line = j$(escapeVfId(d)).find('input')[0].value;
-        console.log(line);
-        var isSuccessful = true;
-        if (up) {
-            for(var i = parseInt(line) ; i > 1 && isSuccessful; i-- ) {
-                isSuccessful = resetMoveUpDown(up, i, len);
+                        isSuccessful = true;
+                        // j$(item1[i - 1]).children('.ordernocls').val('' + line);
+                        // j$(item1[i]).children('.ordernocls').val('' + i);
+                    }
+                    else {
+                        j$(items[i]).children('.ordernocls').val(line);
+                    }
+                    var tr1 = j$(items[i]).parents("tr");
+                    tr.prev().before(tr);
+                    trL.prev().before(trL);
+                }
+                else {
+                    if(line < currentPageRecordCount) {
+                        var model1 = j$(item2[i]).find("span").text();
+                        var model2 = j$(item2[line]).find("span").text();
+                        if (model1 != model2) {
+                            unblockUI();
+                            return;
+                        }
+                        var tr = j$('#tableData').find('tbody').find('tr:eq(' + (i) + ')');
+                        var trL = j$('#tableData_L').find('tbody').find('tr:eq(' + (i) + ')');
+                        var v1 = j$(item1[i]).find("input").val();
+                        var v2 = j$(item1[i + 1]).find("input").val();
+                        setChangeFlg(i);
+                        setChangeFlg(i + 1);
+                        j$(items[i]).children('.ordernocls').val(line + 1);
+                        j$(items[i + 1]).children('.ordernocls').val(line);
+                        j$(item1[i]).find("input").val(v2);
+                        j$(item1[line]).find("input").val(v1);
+                        var tr1 = j$(items[i]).parents("tr");
+                        tr.next().after(tr);
+                        trL.next().after(trL);
+                        isSuccessful = true;
+                    }
+                    else {
+                        j$(items[i]).children('.ordernocls').val(line);
+                    }
+                }
+                unblockUI();
+                return isSuccessful;
             }
-        }
-        else {
-            for(var i = parseInt(line) ; i < len && isSuccessful; i++ ) {
-                isSuccessful = resetMoveUpDown(up, i, len);
+
+            function refopener() {
+                window.opener.location.href = '/apex/ConsumTrial?id={!parId}';
             }
-        }
-        unblockUI();
-    }
 
-    function resetMoveUpDown(up, line, len) {
+            if (window.history.pushState) {
+                if (window.location.href.indexOf('&saveType=1') > -1) {
+                    refopener();
+                }
+                window.history.pushState({}, "", window.location.href.replace('&saveType=1', ''));
+            }
 
-        var items = j$(".dataCellBorder2");
-        var item1 = j$("td.intf.dataCellBorder1.Degree_Of_Importance__c");
-        var item2 = j$("td.dataCellBorder1.col_Fixture_Model_No__c");
-        var currentPageRecordCount = j$(escapeVfId('allPage:allForm:dataBlock:currentPageRecordCnt')).val();
-        var isSuccessful = false;
-        // alert(item1);
-        var i = line - 1;
-        var i1 = line + 1;
-        // var tr = j$('#tableData').find('tbody').find('tr:eq(' + (i) + ')');
-        if (up == true){
-            var tr = j$('#tableData').find('tbody').find('tr:eq(' + (i) + ')');
-            var trL = j$('#tableData_L').find('tbody').find('tr:eq(' + (i) + ')');
-            if(line != 1) {
-                var model1 = j$(item2[i - 1]).find("span").text();
-                var model2 = j$(item2[i]).find("span").text();
-                if (model1 != model2) {
+            //2022 02 24 寮犲崕寤� display PI Data start
+            var rowBList;
+            var TrialUser = {};
+            var ids = [];
+
+            queryUser();
+
+            function q1(){
+                var p = new Promise(function(resolve, reject){
+                    rowBList = JSON.parse('{!rowListString}')
+                    var x = 0;
+                    let searchCallBack = function searchCallBack(result){
+                        let contacts = result.object;
+                        if(contacts == null){
+                            return;
+                        }
+                        let temp = {}
+                        temp.trialUser = contacts.trialUser;
+                        TrialUser[contacts.dataId] = temp;
+                        x++;
+                    };
+                    for(var i=0;i<rowBList.length;i++){
+                        ids.push(rowBList[i].rnd.AWS_Data_Id__c + '_' + rowBList[i].rnd.Id);
+                        AWSService.query(staticResource.queryUrl,rowBList[i].rnd.AWS_Data_Id__c,searchCallBack,staticResource.token);
+                    }
+                    var id = setInterval(function(){
+                        if(x >= rowBList.length){
+                            console.log('success')
+                            resolve('success');
+                            clearInterval(id);
+                        }
+                    },1000);  
+                });
+                return p;
+            }
+
+            function q2(value){
+                var p = new Promise(function(resolve, reject){ 
+                    console.log('杩涘叆q2'+value)
+                    for(var i=0;i<ids.length;i++){
+                        console.log('i = '+i);
+                        document.getElementById(ids[i]).children[0].children[0].children[0].value = TrialUser[ids[i].substring(0,18)].trialUser;
+                        console.log('i = '+i);
+                    }
+                }); 
+            }
+            
+            function queryUser(){
+                rowBList = JSON.parse('{!rowListString}')
+                console.log('pageB.fixMode = '+'{!pageB.fixMode}')
+                if('{!pageB.fixMode}' == 'true'){
+                    q1().then(function(data){
+                        return q2(data);
+                    })
                     unblockUI();
-                    return;
-                }
-
-                var v1 = j$(item1[i - 1]).find("input").val();
-                var v2 = j$(item1[i]).find("input").val();
-                setChangeFlg(i-1);
-                setChangeFlg(i);
-                j$(items[i - 1]).children('.ordernocls').val(line);
-                j$(items[i]).children('.ordernocls').val(line - 1);
-                j$(item1[i - 1]).find("input").val(v2);
-                j$(item1[i]).find("input").val(v1);
-
-                isSuccessful = true;
-                // j$(item1[i - 1]).children('.ordernocls').val('' + line);
-                // j$(item1[i]).children('.ordernocls').val('' + i);
-            }
-            else {
-                j$(items[i]).children('.ordernocls').val(line);
-            }
-            var tr1 = j$(items[i]).parents("tr");
-            tr.prev().before(tr);
-            trL.prev().before(trL);
-        }
-        else {
-            if(line < currentPageRecordCount) {
-                var model1 = j$(item2[i]).find("span").text();
-                var model2 = j$(item2[line]).find("span").text();
-                if (model1 != model2) {
+                }else{
+                    blockme();
+                    console.log(rowBList)
+                    let searchCallBack = function searchCallBack(result){
+                        let contacts = result.object;
+                        if(contacts == null){
+                            return;
+                        }
+                        let temp = {}
+                        temp.trialUser = contacts.trialUser;
+                        TrialUser[contacts.dataId] = temp;
+                    };
+                    for(var i=0;i<rowBList.length;i++){
+                        ids.push(rowBList[i].rnd.AWS_Data_Id__c + '_' + rowBList[i].rnd.Id);
+                        AWSService.query(staticResource.queryUrl,rowBList[i].rnd.AWS_Data_Id__c,searchCallBack,staticResource.token);
+                    }
                     unblockUI();
-                    return;
                 }
-                var tr = j$('#tableData').find('tbody').find('tr:eq(' + (i) + ')');
-                var trL = j$('#tableData_L').find('tbody').find('tr:eq(' + (i) + ')');
-                var v1 = j$(item1[i]).find("input").val();
-                var v2 = j$(item1[i + 1]).find("input").val();
-                setChangeFlg(i);
-                setChangeFlg(i + 1);
-                j$(items[i]).children('.ordernocls').val(line + 1);
-                j$(items[i + 1]).children('.ordernocls').val(line);
-                j$(item1[i]).find("input").val(v2);
-                j$(item1[line]).find("input").val(v1);
-                var tr1 = j$(items[i]).parents("tr");
-                tr.next().after(tr);
-                trL.next().after(trL);
-                isSuccessful = true;
             }
-            else {
-                j$(items[i]).children('.ordernocls').val(line);
+
+            function showPIDiv(awsDataId){
+                if(awsDataId.length == 0){
+                    return
+                }
+                console.log('awsDataId Value:'+awsDataId);
+                let parentNode = document.getElementById(awsDataId);
+                let createDiv = document.createElement("div");  
+                createDiv.id = awsDataId+"_PI";  
+                let piInformation = 'trialUser:'+TrialUser[awsDataId.substring(0,18)].trialUser
+                //let piInformation = 'Name:'+contact['943114607025717249'].lastName +'\n' +'Phone:'+contact['943114607025717249'].phone
+                createDiv.innerText = piInformation;
+                let x=window.event.x;
+                let y=window.event.y; 
+                createDiv.style.left=x;  
+                createDiv.style.top=y;  
+                createDiv.style.background="#dddddd";
+                createDiv.style.position = "absolute";
+                parentNode.appendChild(createDiv);  
             }
-        }
-        unblockUI();
-        return isSuccessful;
-    }
 
-    function refopener() {
-        window.opener.location.href = '/apex/ConsumTrial?id={!parId}';
-    }
-
-    if (window.history.pushState) {
-        if (window.location.href.indexOf('&saveType=1') > -1) {
-            refopener();
-        }
-        window.history.pushState({},"", window.location.href.replace('&saveType=1',''));
-    }
-</script>
+            function hidePIDiv(awsDataId){
+                if(awsDataId.length == 0){
+                    return
+                }
+                document.getElementById(awsDataId+'_PI').remove();
+            }
+            //2022 02 24 寮犲崕寤� display PI Data end
+        </script>
         <apex:pageMessages />
         <!-- oncomplete="clearApplyValue(); return false;" -->
         <apex:actionFunction name="passApplyMsgToController" action="{!showApplyMsg}"  rerender="allForm">
@@ -352,6 +458,15 @@
                                     <!-- 璇曠敤鑰� -->
                                     {!$ObjectType.Consum_Apply_Equipment_Set_Detail__c.fields.Trial_User__c.label}
                                     <apex:inputField id="TrialUser" value="{!pageB.caesdInput.Trial_User__c}"/>
+                                    <!-- <script>
+                                           sfdcPage.appendToOnloadQueue(function () {
+                                            var queryBack = function queryBack(data) {
+                                                console.log('data = ' + data);
+                                                document.getElementById('{!pageB.caesdInput.AWS_Data_Id__c}') = data.object.trialUser;
+                                            };
+                                                AWSService.query(staticResources.queryUrl, '{!pageB.caesdInput.AWS_Data_Id__c}', queryBack, staticResources.token);
+                                            });
+                                    </script> -->
                                 </td>
                                 <td>
                                     <!-- 璺熷彴鑰� -->
@@ -359,11 +474,11 @@
                                     <apex:inputField id="FollowerUser" value="{!pageB.caesdInput.Follower_User__c}"/>
                                 </td>
                             </apex:outputPanel>
-                        <!-- </tr> -->
-                        <!-- <tr> -->
+                            <!-- </tr> -->
+                            <!-- <tr> -->
                             <td>
-                            <!-- </td> -->
-                            <!-- <td colspan="5"> -->
+                                <!-- </td> -->
+                                <!-- <td colspan="5"> -->
                                 <span style="margin-left: 10px;">
                                     <apex:commandButton value="缂栬緫" rendered="{!canEdit}" onclick="blockme();" action="{!changeFixModel}" reRender="allForm" oncomplete="unblockUI();windowResize();"/>
                                     <apex:commandButton value="缂栬緫" style="float: right; margin-right: 40px;" rendered="{!AND(canEdit == false, redOnly == false)}" onclick="var w = window.open('/apex/ConsumTrial?id={!parId}&canedit=true', '缂栬緫璇曠敤琛ㄧ敾闈�', 'width='+(window.screen.width-200)+',height='+(window.screen.height-200)+',left=100,top=100'); w.focus(); return false;"/>
@@ -378,10 +493,10 @@
                         </tr>
                     </table>
                 </apex:outputPanel>
-                </apex:pageBlock>
-                <apex:pageBlock id="dataBlock" tabStyle="Report">
+            </apex:pageBlock>
+            <apex:pageBlock id="dataBlock" tabStyle="Report">
                 <apex:inputHidden id="currentPageRecordCnt" value="{!pageB.currentPageRecordCnt}"/>
-<!--                     <table id="msgtable">
+                <!--                     <table id="msgtable">
                 <tr>
                     <td>
                         <apex:outputPanel id="message">
@@ -390,39 +505,39 @@
                     </td>
                 </tr>
             </table> -->
-            <div id="out_Div_L">
-                <table class="list" style="border-bottom-width: 0px; font-size:11px; border-spacing:0;" border="" id="tableHeader_L">
-                    <tr class="headerRow" height="30px">
-                        <apex:outputPanel layout="none" rendered="{!canEdit}">
-                            <td class="col_chk" align="center">
-                                <input type='checkbox' onClick='checkAll()' id="checker" />
-                            </td>
-                        </apex:outputPanel>
-                        <apex:repeat value="{!outputFieldList}" var="info">
-                            <td class="col_{!info.value}">
-                               {!info.label}
-                            </td>
-                        </apex:repeat>
-                    </tr>
-                </table>
-            </div>
-            <div id="out_Div" >
-                <table class="list" style="border-bottom-width: 0px; font-size:11px; border-spacing:0;" border="" id="tableHeader">
-                    <tr class="headerRow" height="30px">
-                         <apex:repeat value="{!inputFieldList}" var="info">
-                            <td class="col_{!info.value} colViewing" >
-                               {!info.label}
-                            </td>
-                        </apex:repeat>
-                        <td class="col_UpDown"> 鍚戜笂/鍚戜笅 </td>
-                        <td class="col_Scroll"></td>
-                    </tr>
-                </table>
-            </div>
-            <div style="clear:both;"/>
-            <div id="in_Div_L">
-                <table class="list" style="border-bottom-width: 0px; font-size:11px; border-spacing:0;" border="" id="tableData_L">
-                    <apex:variable value="{!0}" var="Cnt" />
+                <div id="out_Div_L">
+                    <table class="list" style="border-bottom-width: 0px; font-size:11px; border-spacing:0;" border="" id="tableHeader_L">
+                        <tr class="headerRow" height="30px">
+                            <apex:outputPanel layout="none" rendered="{!canEdit}">
+                                <td class="col_chk" align="center">
+                                    <input type='checkbox' onClick='checkAll()' id="checker" />
+                                </td>
+                            </apex:outputPanel>
+                            <apex:repeat value="{!outputFieldList}" var="info">
+                                <td class="col_{!info.value}">
+                                    {!info.label}
+                                </td>
+                            </apex:repeat>
+                        </tr>
+                    </table>
+                </div>
+                <div id="out_Div" >
+                    <table class="list" style="border-bottom-width: 0px; font-size:11px; border-spacing:0;" border="" id="tableHeader">
+                        <tr class="headerRow" height="30px">
+                            <apex:repeat value="{!inputFieldList}" var="info">
+                                <td class="col_{!info.value} colViewing" >
+                                    {!info.label}
+                                </td>
+                            </apex:repeat>
+                            <td class="col_UpDown"> 鍚戜笂/鍚戜笅 </td>
+                            <td class="col_Scroll"></td>
+                        </tr>
+                    </table>
+                </div>
+                <div style="clear:both;"/>
+                <div id="in_Div_L">
+                    <table class="list" style="border-bottom-width: 0px; font-size:11px; border-spacing:0;" border="" id="tableData_L">
+                        <apex:variable value="{!0}" var="Cnt" />
                         <apex:repeat id="dataline_L" value="{!pageB.rowBList}" var="var">
                             <tr class="dataRow" id="tableData_L_{!Cnt}" style="{!IF(var.isOddnumber, 'background-color : #EFF4FC;', '')}">
                                 <apex:outputPanel layout="none" rendered="{!canEdit}">
@@ -434,120 +549,120 @@
                                     <td class="dataCellBorder1 {!'col_' + info.value}"><apex:outputField value="{!var.rnd[info.value]}" /></td>
                                 </apex:repeat>
                             </tr>
-                        <apex:variable value="{!Cnt+1}" var="Cnt" />
-                    </apex:repeat>
-                </table>
-            </div>
-            <div id="in_Div" style="overflow:auto;">
-                <table class="list" style="border-bottom-width: 0px; font-size:11px; border-spacing:0;" border="" id="tableData">
-                    <apex:variable value="{!0}" var="Cnt_R" />
-                    <apex:repeat id="dataline_R" value="{!pageB.rowBList}" var="var">
-                    <tr id="tableData_R_{!Cnt_R}" class="dataRow" onmouseover="if (window.hiOn){hiOn(this);} " onmouseout="if (window.hiOff){hiOff(this);} " onblur="if (window.hiOff){hiOff(this);}" onfocus="if (window.hiOn){hiOn(this);}" style="{!IF(var.isOddnumber, 'background-color : #EFF4FC;', '')}">
-                        <apex:repeat value="{!inputFieldList}" var="info" id="inputField">
-                            <td class="dataCellBorder1 intf {!info.value} col_{!info.value}">
-                                <apex:outputPanel rendered="{!(contains(var.canChangeField, info.value) || var.canChangeField == '') && pageB.fixMode == true && var.canChange == true && info.value != 'Degree_Of_Importance__c'}">
-                                    <!-- onchange="setChangeFlg('{!var.lineNo}')" -->
-                                    <apex:outputPanel rendered="{!info.value != 'Case_OR_animal_organ__c'}">
-                                        <apex:inputField id="inputField" value="{!var.rnd[info.value]}" onchange="setChangeFlg('{!var.lineNo - 1}')" style="{!IF(info.value == 'Follower_User__c', 'width: 75%; ', '')}"/>
-                                        <script>
-                                            if( document.getElementById('{!$Component.inputField}' + ':inputField_mlktp')){
-                                                document.getElementById('{!$Component.inputField}' + ':inputField_mlktp').style.display="none" ;
-                                            }
-                                        </script>
-                                    </apex:outputPanel>
-                                    <apex:outputPanel rendered="{!info.value == 'Case_OR_animal_organ__c'}">
-                                    <apex:selectList value="{!var.rnd.Case_OR_animal_organ__c}" multiselect="false" size="1">
-                                            <apex:selectOptions value="{!Case_OR_animal_organOps}"/>
-                                        </apex:selectList>
-                                    </apex:outputPanel>
-                                </apex:outputPanel>
-                                <apex:outputPanel rendered="{!(contains(var.canChangeField, info.value) || var.canChangeField == '') && pageB.fixMode == true && var.canChange == true && info.value == 'Degree_Of_Importance__c'}">
-                                    <input id="Degree_Of_Importance__c" value="{!var.rnd[info.value]}" disabled="true"/>
-                                    <apex:inputHidden value="{!var.rnd[info.value]}"/>
-                                </apex:outputPanel>
-                                <apex:outputPanel rendered="{!((contains(var.canChangeField, info.value) || var.canChangeField == '') && pageB.fixMode == true && var.canChange == true) == false}">
-                                    <apex:outputField value="{!var.rnd[info.value]}"/>
-                                </apex:outputPanel>
-                            </td>
+                            <apex:variable value="{!Cnt+1}" var="Cnt" />
                         </apex:repeat>
-                        <td class="dataCellBorder2 col_UpDown" id="row{!Cnt_R}">
-                            <apex:outputPanel rendered="{!pageB.fixMode}">
-                                <button value="鈫戔啈" id="top" onclick="blockme(); moveToTop('row{!Cnt_R}', true, '{!var.maxDegree_Of_Importance}'); return false;">鈫戔啈</button>
-                                <button value="鈫�" id="up" onclick="blockme(); resetMove('row{!Cnt_R}', true, '{!var.maxDegree_Of_Importance}'); return false;">鈫�</button>|
-                                <button value="鈫�" id="down" onclick="blockme(); resetMove('row{!Cnt_R}', false, '{!var.maxDegree_Of_Importance}'); return false;">鈫�</button>
-                                <button value="鈫撯啌" id="bottom" onclick="blockme(); moveToTop('row{!Cnt_R}', false, '{!var.maxDegree_Of_Importance}'); return false;">鈫撯啌</button>
-                            </apex:outputPanel>
-                            <apex:inputText value="{!var.lineNo}" styleClass="ordernocls" style="display:none;"/>
-                            <!-- <apex:inputHidden value="{!var.rnd.Degree_Of_Importance__c}"/> -->
-                        </td>
-                        <td class="col_Scroll"></td>
-                    </tr>
-                    <apex:variable value="{!Cnt_R+1}" var="Cnt_R" />
-                    </apex:repeat>
-                </table>
-            </div>
+                    </table>
+                </div>
+                <div id="in_Div" style="overflow:auto;">
+                    <table class="list" style="border-bottom-width: 0px; font-size:11px; border-spacing:0;" border="" id="tableData">
+                        <apex:variable value="{!0}" var="Cnt_R" />
+                        <apex:repeat id="dataline_R" value="{!pageB.rowBList}" var="var">
+                            <tr id="tableData_R_{!Cnt_R}" class="dataRow" onmouseover="if (window.hiOn){hiOn(this);} " onmouseout="if (window.hiOff){hiOff(this);} " onblur="if (window.hiOff){hiOff(this);}" onfocus="if (window.hiOn){hiOn(this);}" style="{!IF(var.isOddnumber, 'background-color : #EFF4FC;', '')}">
+                                <apex:repeat value="{!inputFieldList}" var="info" id="inputField">
+                                    <td class="dataCellBorder1 intf {!info.value} col_{!info.value}" id="{! IF(info.value=='Trial_User__c',var.rnd.AWS_Data_Id__c+'_'+var.rnd.Id,info.value)}" onmouseover="showPIDiv('{! IF(info.value=='Trial_User__c',var.rnd.AWS_Data_Id__c+'_'+var.rnd.Id,'')}')" onmouseout="hidePIDiv('{! IF(info.value=='Trial_User__c',var.rnd.AWS_Data_Id__c+'_'+var.rnd.Id,'')}')">
+                                        <apex:outputPanel rendered="{!(contains(var.canChangeField, info.value) || var.canChangeField == '') && pageB.fixMode == true && var.canChange == true && info.value != 'Degree_Of_Importance__c'}">
+                                            <!-- onchange="setChangeFlg('{!var.lineNo}')" -->
+                                            <apex:outputPanel rendered="{!info.value != 'Case_OR_animal_organ__c'}">
+                                                <apex:inputField id="inputField" value="{!var.rnd[info.value]}" onchange="setChangeFlg('{!var.lineNo - 1}')" style="{!IF(info.value == 'Follower_User__c', 'width: 75%; ', '')}"/>
+                                                <script>
+                                                    if( document.getElementById('{!$Component.inputField}' + ':inputField_mlktp')){
+                                                        document.getElementById('{!$Component.inputField}' + ':inputField_mlktp').style.display="none" ;
+                                                    }
+                                                </script>
+                                            </apex:outputPanel>
+                                            <apex:outputPanel rendered="{!info.value == 'Case_OR_animal_organ__c'}">
+                                                <apex:selectList value="{!var.rnd.Case_OR_animal_organ__c}" multiselect="false" size="1">
+                                                    <apex:selectOptions value="{!Case_OR_animal_organOps}"/>
+                                                </apex:selectList>
+                                            </apex:outputPanel>
+                                        </apex:outputPanel>
+                                        <apex:outputPanel rendered="{!(contains(var.canChangeField, info.value) || var.canChangeField == '') && pageB.fixMode == true && var.canChange == true && info.value == 'Degree_Of_Importance__c'}">
+                                            <input id="Degree_Of_Importance__c" value="{!var.rnd[info.value]}" disabled="true"/>
+                                            <apex:inputHidden value="{!var.rnd[info.value]}"/>
+                                        </apex:outputPanel>
+                                        <apex:outputPanel rendered="{!((contains(var.canChangeField, info.value) || var.canChangeField == '') && pageB.fixMode == true && var.canChange == true) == false}">
+                                            <apex:outputField value="{!var.rnd[info.value]}"/>
+                                        </apex:outputPanel>
+                                    </td>
+                                </apex:repeat>
+                                <td class="dataCellBorder2 col_UpDown" id="row{!Cnt_R}">
+                                    <apex:outputPanel rendered="{!pageB.fixMode}">
+                                        <button value="鈫戔啈" id="top" onclick="blockme(); moveToTop('row{!Cnt_R}', true, '{!var.maxDegree_Of_Importance}'); return false;">鈫戔啈</button>
+                                        <button value="鈫�" id="up" onclick="blockme(); resetMove('row{!Cnt_R}', true, '{!var.maxDegree_Of_Importance}'); return false;">鈫�</button>|
+                                        <button value="鈫�" id="down" onclick="blockme(); resetMove('row{!Cnt_R}', false, '{!var.maxDegree_Of_Importance}'); return false;">鈫�</button>
+                                        <button value="鈫撯啌" id="bottom" onclick="blockme(); moveToTop('row{!Cnt_R}', false, '{!var.maxDegree_Of_Importance}'); return false;">鈫撯啌</button>
+                                    </apex:outputPanel>
+                                    <apex:inputText value="{!var.lineNo}" styleClass="ordernocls" style="display:none;"/>
+                                    <!-- <apex:inputHidden value="{!var.rnd.Degree_Of_Importance__c}"/> -->
+                                </td>
+                                <td class="col_Scroll"></td>
+                            </tr>
+                            <apex:variable value="{!Cnt_R+1}" var="Cnt_R" />
+                        </apex:repeat>
+                    </table>
+                </div>
             </apex:pageBlock>
-<script type="text/javascript">
-    function runSFDCAddRemote(MetadataConnectionWarning) {
-        if (MetadataConnectionWarning) SFDCAddRemote('{!$Api.Session_ID}');
-    }
-    function sortTableJs(key) {
-      // blockme();
-      sortTablefunc(key);
-    }
+            <script type="text/javascript">
+                function runSFDCAddRemote(MetadataConnectionWarning) {
+                    if (MetadataConnectionWarning) SFDCAddRemote('{!$Api.Session_ID}');
+                }
+                function sortTableJs(key) {
+                    // blockme();
+                    sortTablefunc(key);
+                }
 
-    j$(function() {
-        var tableWidth = 0;
-        j$('body .pbBody table#tableHeader tr.headerRow td').each(function() {
-            var colClass = getColClassName(this);
-            if (colClass != 'col_Scroll') {
-                var headerCol = j$('body .pbBody table.list tr.headerRow td.' + colClass);
-                tableWidth += headerCol.width();
-            }
-        });
-        j$('table#tableData').css('width', (1260 + 2) + 'px');
-        j$('table#tableHeader').css('width', (1260 + 2) + 'px');
+                j$(function() {
+                    var tableWidth = 0;
+                    j$('body .pbBody table#tableHeader tr.headerRow td').each(function() {
+                        var colClass = getColClassName(this);
+                        if (colClass != 'col_Scroll') {
+                            var headerCol = j$('body .pbBody table.list tr.headerRow td.' + colClass);
+                            tableWidth += headerCol.width();
+                        }
+                    });
+                    j$('table#tableData').css('width', (1260 + 2) + 'px');
+                    j$('table#tableHeader').css('width', (1260 + 2) + 'px');
 
-        // list 銇� headerRow 銇� td銇� toggleWidth() 銈掕拷鍔�
-        bindTdToggleWidth();
-        if( document.getElementById('allPage:allForm:searchBlock:FollowerUser_mlktp')){
-            document.getElementById('allPage:allForm:searchBlock:FollowerUser_mlktp').style.display="none" ;
-        }
-    });
-    // var elements = document.getElementsByTagName("select");
-    // for (i = 0; i < elements.length; i++) {
-    //     var id = elements[i].id;
-    //     if (id.length > 5 && id.substring(id.length - 5, id.length) == 'mlktp') {
-    //         elements[i].style.display = "none";
-    //     }
-    // }
-    // var tbl_l = document.getElementById("tableData_L");
-    // var input_l = tbl_l.getElementsByTagName("input");
-    // for (i = 0; i < input_l.length; i++) {
-    //     var id = input_l[i].id + '_lkid';
-    //     if (document.getElementById(id) != null) {
-    //         input_l[i].style.width = "75%";
-    //     }
-    // }
-    // var tbl = document.getElementById("tableData");
-    // var input = tbl.getElementsByTagName("input");
-    // for (i = 0; i < input.length; i++) {
-    //     var id = input[i].id + '_lkid';
-    //     if (document.getElementById(id) != null) {
-    //         input[i].style.width = "75%";
-    //     }
-    // }
-    //a銈掋偗銉儍銈仚銈嬮殯銇�乼d銈ゃ儥銉炽儓銈掑疅瑁呫仐銇亜
-    // j$("a[name='out_Div_a']").bind("click",function(event){
-    //     event.stopPropagation();
-    // });
-    windowResize();
-    j$("td.dataCellBorder1 input").change(function(){
-        var names = this.name.split(':');
-        var i = names[names.length - 4];
-        j$("input.rowchkcls")[i].checked = true;
-    })
-</script>
+                    // list 銇� headerRow 銇� td銇� toggleWidth() 銈掕拷鍔�
+                    bindTdToggleWidth();
+                    if( document.getElementById('allPage:allForm:searchBlock:FollowerUser_mlktp')){
+                        document.getElementById('allPage:allForm:searchBlock:FollowerUser_mlktp').style.display="none" ;
+                    }
+                });
+                // var elements = document.getElementsByTagName("select");
+                // for (i = 0; i < elements.length; i++) {
+                //     var id = elements[i].id;
+                //     if (id.length > 5 && id.substring(id.length - 5, id.length) == 'mlktp') {
+                //         elements[i].style.display = "none";
+                //     }
+                // }
+                // var tbl_l = document.getElementById("tableData_L");
+                // var input_l = tbl_l.getElementsByTagName("input");
+                // for (i = 0; i < input_l.length; i++) {
+                //     var id = input_l[i].id + '_lkid';
+                //     if (document.getElementById(id) != null) {
+                //         input_l[i].style.width = "75%";
+                //     }
+                // }
+                // var tbl = document.getElementById("tableData");
+                // var input = tbl.getElementsByTagName("input");
+                // for (i = 0; i < input.length; i++) {
+                //     var id = input[i].id + '_lkid';
+                //     if (document.getElementById(id) != null) {
+                //         input[i].style.width = "75%";
+                //     }
+                // }
+                //a銈掋偗銉儍銈仚銈嬮殯銇�乼d銈ゃ儥銉炽儓銈掑疅瑁呫仐銇亜
+                // j$("a[name='out_Div_a']").bind("click",function(event){
+                //     event.stopPropagation();
+                // });
+                windowResize();
+                j$("td.dataCellBorder1 input").change(function(){
+                    var names = this.name.split(':');
+                    var i = names[names.length - 4];
+                    j$("input.rowchkcls")[i].checked = true;
+                })
+            </script>
         </apex:outputPanel>
     </apex:form>
 </apex:page>
\ No newline at end of file
diff --git a/force-app/main/default/pages/ConsumTrialPDF.page b/force-app/main/default/pages/ConsumTrialPDF.page
index 89e1d83..aead67a 100644
--- a/force-app/main/default/pages/ConsumTrialPDF.page
+++ b/force-app/main/default/pages/ConsumTrialPDF.page
@@ -1,5 +1,5 @@
-<apex:page applyHtmlTag="false" Controller="ConsumTrialPDFController" showHeader="false" sidebar="false" id="allPage" action="{!init}" renderAs="pdf">
-<!-- renderAs="pdf" -->
+<apex:page applyHtmlTag="false" Controller="ConsumTrialPDFController" showHeader="false" sidebar="false" id="allPage" action="{!init}">
+<!-- renderAs="pdf" -->   
     <html>
         <head>
             <style type="text/css" media="print">
@@ -39,16 +39,66 @@
                 }
 
             </style>
+            <style>
+                /* 20220221 PI鏀归�� by 寰愪寒 start */
+                body {
+                    font-family: Arial Unicode MS;
+                    page-break-inside: auto;
+                    font-size: 14px;
+                }
+                table {
+                    border-collapse: collapse;
+                    width: 100%;
+                }
+                table, th, td {
+                    border: 1px solid black;
+                    text-align: left;
+                }
+                table.headTable tr td {
+                    font-size: 13px;
+                }
+                table.deliInfoTable tr td {
+                    font-size: 13px;
+                }
+                table.detailListTable tr td {
+                    font-size: 8px;
+                    text-align: left;
+                    box-sizing:border-box;
+                    padding: 1px;
+                }
+                table.tailTable tr td {
+                    font-size: 12px;
+                }
+                body{margin: 0 auto;width: 920px;font-size: 14px;}
+                #title1{height: 30px;}
+                #title2{height: 80px;}
+                #pdf-wrapper {position: relative;}
+                #pdf-wrapper table{width: 100%;border-spacing: 0px;border-collapse: collapse;    border: none;}
+                #pdf-wrapper table th,td{border-bottom: 1px #000 solid;}
+                /* 20220221 PI鏀归�� by 寰愪寒 end */
+            </style>
+            <!-- 20220221 PI鏀归�� by 寰愪寒 start  -->
+        <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
+        <script src="../../soap/ajax/53.0/connection.js" type="text/javascript"></script>
+        <apex:stylesheet value="{!URLFOR($Resource.blockUIcss)}"/>
+        <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}"/>
+        <apex:includeScript value="{!URLFOR($Resource.PleaseWaitDialog)}"/>
+        <apex:includeScript value="{!URLFOR($Resource.jspdf)}"/>
+        <apex:includeScript value="{!URLFOR($Resource.html2canvas)}"/>
+
+        <!-- 20220221 PI鏀归�� by 寰愪寒 end  -->
         </head>
         <body>
+            <div id="pdf-wrapper">
+                <div id="title1"></div>
             <!-- 椤电爜 -->
             <apex:variable value="{!1}" var="pageCnt" />
             <!-- 鍊熺敤鑰楁潗澶囧搧鍙戣揣娓呭崟 -->
             <!-- 搴忓彿 -->
             <apex:variable value="{!1}" var="lineCnt" />
             <apex:repeat value="{!pdfPageList}" var="eachPdfPage">
-                <img style="float:left;width:79px;height:79px;padding:0px;margin-top:1px;z-index:999;position:relative;" 
-                        src="{!'/servlet/servlet.FileDownload?file=' + targetConsumApply.QRId__c}" />
+                <img style="width:79px;height:79px;padding:0px;margin-top:1px;z-index:999;position:absolute;" 
+                        src="{!QRSrc}" />
                 <!-- 琛ㄥご -->
                 <table class="headTable" style="position:relative;">
                     <colgroup>
@@ -197,10 +247,10 @@
                     </colgroup>
                     <apex:outputPanel layout="none" rendered="{!eachPdfPage.equipSetDetailList.size > 0}">
                         <tr>
-                            <th style="text-align:center;" colspan="14" height="25">鍊熺敤鑰楁潗澶囧搧鍙戣揣娓呭崟</th>
+                            <th style="text-align:center;" colspan="12" height="25">鍊熺敤鑰楁潗澶囧搧鍙戣揣娓呭崟</th>
                         </tr>
                         <tr>
-                            <th style="text-align:center; font-size:10px;" colspan="14" height="25">鍏辫鑰楁潗澶囧搧锛坽!consumApplySetDetailListSize}锛変欢</th>
+                            <th style="text-align:center; font-size:10px;" colspan="12" height="25">鍏辫鑰楁潗澶囧搧锛坽!consumApplySetDetailListSize}锛変欢</th>
                         </tr>
                         <tr>
                             <td style="text-align: center;"><c:PDFWbr targetStr="搴忓彿"/></td>
@@ -254,7 +304,7 @@
                             <!-- 鐥呬緥/鍔ㄧ墿鑴忓櫒 -->
                             <td><c:PDFWbr targetStr="{!eachEquipSetDetail.Case_OR_animal_organ__c}"/></td>
                             <!-- 璇曠敤鑰呯洊绔� -->
-                            <td><c:PDFWbr targetStr="{!eachEquipSetDetail.Trial_User__c}"/></td>
+                            <td aws-data-id="{!eachEquipSetDetail.AWS_Data_Id__c}"><c:PDFWbr targetStr="{!eachEquipSetDetail.Trial_User__c}"/></td>
                             <!-- 璺熷彴鑰呯洊绔� -->
                             <td><c:PDFWbr targetStr="{!eachEquipSetDetail.Follower_User__r.Name}"/></td>
                             <!-- 澶囩敤 -->
@@ -283,8 +333,7 @@
                     <!-- 20211210 ljh SFDC-C923SR add -->
                     <tr>
                         <td colspan="2" style=" border: none;">
-                            <img align="left" src="{!'/servlet/servlet.FileDownload?file=' + targetConsumApply.BRId__c}" />
-                            
+                            <img align="left" src="{!BRSrc}" />
                         </td>
                     </tr>
                     <!-- 20211210 ljh SFDC-C923SR end -->
@@ -294,6 +343,107 @@
                 </apex:outputPanel>
                 <apex:variable value="{!pageCnt + 1}" var="pageCnt" />
             </apex:repeat>
+        </div>
         </body>
+        <!-- 20220221 PI鏀归�� by 寰愪寒 start  -->
+<script>
+    AWSService.sfSessionId = '{!GETSESSIONID()}';
+    var staticResource = JSON.parse('{!staticResource}');
+    function Fun(pdf){
+        var iframe = document.createElement('iframe');
+        iframe.setAttribute('style', 'position:absolute;right:0; top:0; bottom:0; height:100%; width:100%');
+        document.body.appendChild(iframe);
+        iframe.src = pdf.output('datauristring');
+        for(let e of document.body.childNodes){
+            if( e != iframe && e.style){
+                e.style.display = 'none';
+            }
+        }
+    }
+
+    let id = "pdf-wrapper";
+    var target = document.getElementById(id);
+    function jsPdfDownload(){
+        let pdfName = "娴嬭瘯";
+        let id = "pdf-wrapper";
+        var target = document.getElementById(id);
+        target.style.background = "#FFFFFF";
+        if(pdfName==''||pdfName==undefined) pdfName= getNowFormatDate();
+
+        html2canvas(target, {
+            scale: 2,
+            onrendered:function(canvas) {
+                var contentWidth = canvas.width;
+                var contentHeight = canvas.height;
+
+                //涓�椤祊df鏄剧ずhtml椤甸潰鐢熸垚鐨刢anvas楂樺害;
+                var pageHeight = contentWidth / 592.28 * 841.89;
+                //鏈敓鎴恜df鐨刪tml椤甸潰楂樺害
+                var leftHeight = contentHeight;
+                //椤甸潰鍋忕Щ
+                var position = 0;
+                //a4绾哥殑灏哄[595.28,841.89]锛宧tml椤甸潰鐢熸垚鐨刢anvas鍦╬df涓浘鐗囩殑瀹介珮
+                var imgWidth = 515.28;//595.28//宸﹀彸杈硅窛20
+                var imgHeight = 515.28/contentWidth * contentHeight;//宸﹀彸杈硅窛20
+
+                var pageData = canvas.toDataURL('image/jpeg', 1.0);
+
+                var pdf = new jsPDF('', 'pt', 'a4');
+
+                //鏈変袱涓珮搴﹂渶瑕佸尯鍒嗭紝涓�涓槸html椤甸潰鐨勫疄闄呴珮搴︼紝鍜岀敓鎴恜df鐨勯〉闈㈤珮搴�(841.89)
+                //褰撳唴瀹规湭瓒呰繃pdf涓�椤垫樉绀虹殑鑼冨洿锛屾棤闇�鍒嗛〉
+                if (leftHeight < pageHeight) {
+                    pdf.addImage(pageData, 'JPEG', 40, 0, imgWidth, imgHeight );//宸﹀彸杈硅窛20
+                } else {
+                    while(leftHeight > 0) {
+                        pdf.addImage(pageData, 'JPEG', 40, position, imgWidth, imgHeight)//宸﹀彸杈硅窛20
+                        leftHeight -= pageHeight;
+                        position -= 841.89;
+                        //閬垮厤娣诲姞绌虹櫧椤�
+                        if(leftHeight > 0) {
+                            pdf.addPage();
+                        }
+                    }
+                }
+                Fun(pdf);
+            }
+        })
+    }
+    
+    blockme();
+    document.body.onload = function(){
+        let aws_ids = [];
+        j$("[aws-data-id]").each(function(i,e){
+            let id = j$(e).attr('aws-data-id');
+            if (id) {
+                aws_ids.push(id); 
+            }
+            
+        })
+
+
+        AWSService.search(staticResource.searchUrl, JSON.stringify({
+            dataIds:aws_ids
+        }), function(data){
+            unblockUI();
+            if (data && data.object && data.object.length > 0) {
+                for (const d of data.object) {
+                    j$("[aws-data-id='"+d.dataId +"']").html(d.trialUser);
+                }
+            }
+            //document.getElementById("Responsible_Person_HP__c").innerHTML = data.object.responsiblePersonHP;
+            //document.getElementById("Caller_phone__c").innerHTML = data.object.callerPhone;
+            
+            setTimeout(() => {
+                jsPdfDownload(); 
+            }, 1500);
+        }, staticResource.token);
+        
+    }
+    document.body.onclick = function(){
+        //jsPdfDownload();
+    }
+</script>
+<!-- 20220221 PI鏀归�� by 寰愪寒 end  -->
     </html>
 </apex:page>
\ No newline at end of file
diff --git a/force-app/main/default/pages/FixtureRentalPDF.page b/force-app/main/default/pages/FixtureRentalPDF.page
index 3d72d9c..ff8c772 100644
--- a/force-app/main/default/pages/FixtureRentalPDF.page
+++ b/force-app/main/default/pages/FixtureRentalPDF.page
@@ -1,350 +1,446 @@
-<apex:page applyHtmlTag="false" Controller="FixtureRentalPDFController" showHeader="false" sidebar="false" id="allPage" action="{!init}" renderAs="pdf" ><!-- renderAs="pdf" -->
-<html>
-    <head>
-         <style type="text/css" media="print">
-            @page {
-                size: A4;
-                margin: 1mm 2.5mm 0mm 2.5mm;
+<apex:page applyHtmlTag="false" Controller="FixtureRentalPDFController" showHeader="false" sidebar="false" id="allPage" action="{!init}" ><!-- renderAs="pdf" -->
+    <html>
+        <head>
+            <style type="text/css" media="print">
+                @page {
+                    size: A4;
+                    margin: 1mm 2.5mm 0mm 2.5mm;
+                }
+
+                /*td{
+                    height: 23px;
+                }*/
+                
+            </style>
+            <style>
+                body{margin: 0 auto;
+                    width: 780px;}
+                    #title1{height: 30px;}
+                    #title2{height: 110px;}
+            </style>
+            <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
+            <script src="../../soap/ajax/53.0/connection.js" type="text/javascript"></script>
+            <apex:stylesheet value="{!URLFOR($Resource.blockUIcss)}"/>
+            <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}"/>
+            <apex:includeScript value="{!URLFOR($Resource.PleaseWaitDialog)}"/>
+            <apex:includeScript value="{!URLFOR($Resource.jspdf)}"/>
+            <apex:includeScript value="{!URLFOR($Resource.html2canvas)}"/>
+            
+        </head>
+        
+
+        <body style="font-family: Arial Unicode MS; page-break-inside: auto;font-size: 14px">
+            <div id="pdf-wrapper">
+                <apex:outputPanel id="showhidden" rendered="true">
+                    <!-- 20201119 LJH OCSM_BP5-61 update start 鐜板湴绠$悊鍜岀幇鍦扮鐞嗙殑涓诲崟涓嶆樉绀�-->
+                    <!-- <apex:outputText style="float:left;font-size:22px;margin-top: 25px;" value="{!centreAddress}" /> -->
+                    <apex:outputText style="float:left;font-size:22px;margin-top: 25px;" value="{!IF(IsShowLU,centreAddress,'')}" />
+                    <!-- 20201119 LJH OCSM_BP5-61 update end 鐜板湴绠$悊鍜岀幇鍦扮鐞嗙殑涓诲崟涓嶆樉绀�-->
+                    <img style="float: right; width: 55px; height: 55px;padding: 0px;margin-top: 12px;" src="{!qrcode}" />
+                    <table border="1" width="100%" style="border-collapse: collapse;margin-top: 18mm;">
+                        <colgroup>
+                            <col width="50%" />
+                            <col width="50%" />
+                        </colgroup>
+                        <tr>
+                            <th style="text-align:center;" colspan="2" height="38">濂ユ灄宸存柉澶囧搧绛炬敹鍗�
+                                <!-- <img style="float: right; width: 35px; height: 35px;padding: 0px;margin-top: -7px;" src="{!'/servlet/servlet.FileDownload?file=' + ApplyHeadShow.QRId__c}" /> -->
+                            </th>
+                        </tr>
+                        <tr>
+                            <td style="text-align:left;border-right-style: none;">鈽呭~鍐欏畬鏁村悗璇疯嚜鍙戣揣鏃ヨ捣10澶╁唴涓婁紶SFDC</td>
+                            <td style="text-align:right;border-left-style: none;">澶囧搧绠$悊涓績鐢宠鍗曞彿锛�<apex:outputText value="{!ApplyHeadShow.Name}" /></td>
+                        </tr>
+                        <!-- <tr style="background-color:#003399;color:white">
+                            <th style="text-align:center;" height="40">鍙戣揣淇℃伅</th>
+                        </tr> -->
+                        <!-- <tr>
+                            <td style="text-align:left;font-size:12px">
+                1銆佹湰鍙戣揣纭鍗曞叡涓ら〉銆傞椤典腑鍒拌揣纭閮ㄥ垎涓虹幇鍦哄繀濉」鐩紝濉啓瀹屾暣鍚庤鍥炰紶鑷冲鍝佷腑蹇冿紙浼犵湡鎴栨壂鎻忎欢鍗冲彲锛夛紱<br />
+                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;鏈〉涓竻娲楁秷姣掔伃鑿岀‘璁ゆ爮涓虹幇鍦哄繀濉」鐩紝澶囧搧鍥炲瘎鏃惰灏嗘椤甸殢澶囧搧涓�鍚屽瘎鍥炲鍝佷腑蹇冦��<br />
+                2銆佽瀵逛骇鍝佽繘琛屾竻娲楁秷姣掓垨鐏弻鍚庡啀浣跨敤銆�<br />
+                3銆佸湪浣跨敤澶囧搧鍓嶏紝鏁浠旂粏闃呰鑳岄潰鈥滃鍝佷娇鐢ㄩ』鐭モ�濓紝璇锋槑纭敵璇蜂汉鍙婄敵璇锋柟璐d换涓庝箟鍔°��
+                            </td>
+                        </tr> -->
+                    </table>
+                    <table border="1px" width="100%" style="border-collapse: collapse;">
+                        <colgroup>
+                            <col width="16%" />
+                            <col width="14%" />
+                            <col width="36%" />
+                            <col width="16%" />
+                            <col width="18%" />
+                        </colgroup>
+                        <tr>
+                            <th style="text-align:center;" colspan="5" height="25">鍙戣揣淇℃伅</th>
+                        </tr>
+                        <tr>
+                            <td style="text-align:left;">浣跨敤鐩殑</td> <td style="text-align:left;font-size: 13px" colspan="4"><apex:outputText value="{!ApplyHeadShow.Demo_purpose1__c}" /></td>
+                        </tr>
+                        <tr>
+                            <td style="text-align:left;" rowspan="2">鐢宠浜轰俊鎭�</td>
+                            <td style="text-align:left;">鎵�灞炴湰閮ㄥ悕</td> <td   style="text-align:left;font-size: 13px">     <apex:outputText value="{!ApplyHeadShow.Salesdept__c}" /></td>
+                            <td style="text-align:left;" >鎵�灞炲姙浜嬪鍚�</td> <td   style="text-align:left;font-size: 13px">        <apex:outputText value="{!ApplyHeadShow.WorkPlace__c}" /></td>
+                        </tr>
+                        <tr>
+                            <td style="text-align:left;" >濮撳悕 </td> <td  style="text-align:left;font-size: 13px">    <apex:outputText value="{!ApplyHeadShow.Person_In_Charge__r.name}" /></td>
+                            <td style="text-align:left;" colspan="1">鑱旂郴鐢佃瘽</td> <td  style="text-align:left;font-size: 13px">     <apex:outputText value="{!ApplyHeadShow.ApplyPerson_Phone__c}" /></td>
+                        </tr>
+                        <tr>
+                            <td style="text-align:left;" >鍖荤枟鏈烘瀯淇℃伅</td> 
+                            <td style="text-align:left;" >鍖荤枟鏈烘瀯鍚�</td> <td style="text-align:left;font-size: 13px"> <apex:outputText value="{!HospitalName}" /></td>
+                            <td style="text-align:left;" >绉戝鍚�</td> <td  style="text-align:left;font-size: 13px"><apex:outputText value="{!ApplyHeadShow.Account__r.Department_Name__c}" /></td>
+                        </tr>
+                        <tr>
+                            <td style="text-align:left;" rowspan="3" >鍙戣揣鍦板潃</td> <td colspan="2" rowspan="3" style="text-align:left;font-size: 13px"> <apex:outputText id="Shippmentadress" value="{!Shippmentadress}" /></td>
+                            <td style="text-align:left;" colspan="1">閭紪</td> <td  style="text-align:left;"> <apex:outputText value="{!IF(ApplyHeadShow.Shipment_address__r.Post_Code__c==null,ApplyHeadShow.Post_Code__c,ApplyHeadShow.Shipment_address__r.Post_Code__c)}" /></td>
+                        </tr>
+                        <tr>
+                            <td style="text-align:left;" colspan="1">鎺ユ敹浜哄鍚�</td> <td  style="text-align:left;font-size: 13px">  <apex:outputText value="{!ApplyHeadShow.Loaner_received_staff__c}" /></td>
+                        </tr>
+                        <tr>
+                            <td style="text-align:left;" colspan="1">鎺ユ敹浜虹數璇�</td> <td style="text-align:left;font-size: 13px">  <apex:outputText value="{!ApplyHeadShow.Loaner_received_staff_phone__c}" /></td>
+                        </tr>
+                    </table>
+                    <table border="1" width="100%" style="border-collapse: collapse;">
+                        <tr>
+                            <th style="text-align:center;" colspan="4" height="25">鍖婚櫌鍊熺敤鏈熼檺</th>
+                        </tr>
+                        <tr>
+                            <td style="text-align:left;"> {!IF(BorrowTimeString='null','',BorrowTimeString)}&nbsp;&nbsp;&nbsp;</td>
+                        </tr>
+                    </table>
+                    <table border="1" width="100%" style="border-collapse: collapse;">
+                        <colgroup>
+                            
+                            <col width="19%" />
+                            <col width="29%" />
+                            <col width="29%" />
+                            <col width="23%" />
+                        </colgroup>
+                        <tr>
+                            <th style="text-align:center;" colspan="4" height="40">銆�濂ユ灄宸存柉澶囧搧鍊熺敤鐢宠銉诲畨瑁呬汉濉啓鏍�<small>锛堝繀濉級</small><br/>鍒拌揣纭閮ㄥ垎涓哄ゥ鏋楀反鏂憳宸ュ繀濉」鐩�</th>
+                        </tr>
+                        <tr>
+                            <td style="text-align:left;" >绛炬敹鑰呭鍚�</td> <td style="text-align:left;"></td>
+                            <td style="text-align:left;">澶囧搧瀹夎鑰呭鍚�</td> <td  style="text-align:left;"></td>
+                        </tr>
+                        <tr>
+                            <td style="text-align:left;">绛炬敹鏃ユ湡</td> <td  style="text-align:left;"></td>
+                            <td style="text-align:left;">瀹夎鍙婂畨瑁呰鏄庢棩鏈�</td> <td  style="text-align:left;"> </td>
+                        </tr>
+                    </table>
+                    <table border="1" width="100%" style="border-collapse: collapse;">
+                        <colgroup>
+                            
+                            <col width="19%" />
+                            <col width="29%" />
+                            <col width="29%" />     
+                            <col width="23%" />
+                        </colgroup>
+                        <tr>
+                            <th style="text-align:center;" colspan="4" height="40">銆�鍖荤枟鏈烘瀯绛炬敹濉啓鏍�<small>锛堝繀濉級</small><br/>鏁浣跨敤澶囧搧鍓嶄粩缁嗛槄璇讳笅鏂光�滃ゥ鏋楀反鏂鍝佸�熺敤椤荤煡鈥濓紝浠ユ槑纭娇鐢ㄦ柟鐨勮矗浠讳笌涔夊姟</th>
+                            
+                        </tr>
+                        <!--鏍规嵁OLY_OCM-260璁拌浇,鍏堟敞閲婃帀(OLY_OCM-251鍙栨秷娉ㄩ噴) -->
+                        <tr><th style="text-align:center;" height="25" colspan="4">銆婂ゥ鏋楀反鏂鍝佸彂璐ф竻鍗曘�嬫墍鍒楀鍝佹倝鏁版敹鍒帮紝
+                        鍏辫涓绘満{!mainCnt}浠讹紝闄勫睘鍝亄!accessoryCnt}浠讹紱骞跺凡鎺ュ彈浜у搧浣跨敤璇存槑鍜屼簡瑙e�熺敤椤荤煡銆�</th></tr>
+                        <tr>
+                            <td style="text-align:left;" >绛炬敹鑰呭鍚�</td> <td style="text-align:left;"></td>
+                            <td style="text-align:left;" rowspan="2">鎺ユ敹鍗曚綅锛堢瀹わ級绔� </td>
+                            <td style="text-align:left;" rowspan="2"> </td>
+                        </tr>
+                        <tr>
+                            <td style="text-align:left;">绛炬敹鏃ユ湡</td> <td  style="text-align:left;"></td>
+                            
+                        </tr>
+                    </table>
+                    <table border="1" width="100%" style="border-collapse: collapse;">
+                        <colgroup>
+                            <col width="100%" />
+                        </colgroup>
+                        <tr>
+                            <th style="text-align:center;" height="25">鈥诲ゥ鏋楀反鏂鍝佸�熺敤椤荤煡</th>
+                        </tr>
+                        <tr>
+                            <td style="text-align:left;font-size: 12px">
+                1锛屽鍝侊細鏈』鐭ユ墍鎸囩殑澶囧搧锛屾槸鎸囨湰绛炬敹鍗曢檮浠躲�婂ゥ鏋楀反鏂鍝佸彂璐ф竻鍗曘�嬫墍鍒楃殑鐢卞ゥ鏋楀反鏂紙鍖椾含锛夐攢鍞湇鍔℃湁闄愬叕鍙革紙浠ヤ笅绠�绉板ゥ鏋�<br/>宸存柉锛夊湪瑙勫畾鏈熼檺鍐呭厤璐规彁渚涚粰鍊熺敤鍗曚綅涓哄疄鏂藉尰鐤楄涓烘垨鍩硅绛夋墍浣跨敤鐨勮澶囧寘鎷骇鍝佸強鐩稿叧闄勫睘鍝侊紝闄勪欢鏄湰椤荤煡鏈夋晥缁勬垚閮ㄥ垎锛屼笌鏈�<br/>椤荤煡鍏锋湁鍚岀瓑娉曞緥鏁堝姏銆�<br/>
+                2锛屽鍝佹墍鏈夋潈锛氬鍝佹墍鏈夋潈褰掑睘浜庡ゥ鏋楀反鏂叕鍙搞�傛湭缁忓ゥ鏋楀反鏂叕鍙镐功闈㈠悓鎰忥紝鍊熺敤鍗曚綅涓嶅緱浠ヤ换浣曠悊鐢卞悜浠讳綍绗笁鏂硅浆鍊熴�佽浆璁╅檮浠舵墍<br/>鍒楀鍝侊紝鎴栧皢闄勪欢鎵�鍒楀鍝佷綔涓烘媴淇濇姷鎶肩粰浠讳綍绗笁鏂广��<br/>
+                3锛屽鍝佷娇鐢ㄦ潈锛氬�熺敤鏈熼檺鍐咃紝鍊熺敤鍗曚綅瀵瑰嚭鍊熺殑澶囧搧浜湁鐙珛鍚堢悊鐨勪娇鐢ㄦ潈鍒┿�傝嫢鍦ㄤ娇鐢ㄨ繃绋嬩腑瀛樺湪涓嶇‘瀹氭儏鍐垫椂锛屽�熺敤鍗曚綅搴斿強鏃堕�氱煡<br/>濂ユ灄宸存柉鍏徃锛屽ゥ鏋楀反鏂叕鍙稿皢鍒板満缁欎簣鎸囧鍜屽崗鍔╋紝鍊熺敤鍗曚綅涓嶅簲鎿呰嚜澶勭悊銆�<br/>
+                4锛屽鍝佷箣鏃ュ父浣跨敤涓庣淮鎶わ細鍊熺敤鍗曚綅鍦ㄤ娇鐢ㄥ鍝佽繃绋嬩腑搴旀寜鐓уゥ鏋楀反鏂叕鍙哥殑瑕佹眰锛堚�滀骇鍝佷娇鐢ㄨ鏄庝功鈥濓級鍐呭灏藉鎱庝箟鍔℃纭搷浣滀娇鐢ㄣ��<br/>鐖辨姢浣跨敤銆傚鍝佷娇鐢ㄥ墠鍚庨兘搴旇繘琛屽繀瑕佺殑娓呮礂娑堟瘨锛堢伃鑿岋級鍙婃棩甯告娴嬪伐浣滐紝浠ョ‘淇濆鍝佺殑姝e父杩愪綔銆�<br/>
+                5锛屽鍝佹崯鍧忋�侀仐澶变箣璧斿伩璐d换锛氶檮浠舵墍鍒楀鍝佽嫢鍥犳甯告崯鑰楄�屼骇鐢熺殑缁翠慨鎴栫淮鎶よ垂鐢紝鐢卞ゥ鏋楀反鏂叕鍙告壙鎷咃紱鑻ュ洜鍊熺敤鍗曚綅浣跨敤涓嶅綋鎴栬秴<br/>鏈熷�熺敤绛夊師鍥犻�犳垚鐨勫鍝佹崯鍧忥紝鍊熺敤鍗曚綅搴旀壙鎷呯浉鍏崇淮淇垂鐢ㄣ�傚綋澶囧搧鍊熺敤涓彂鐢熸晠闅滈渶瑕佺淮淇椂锛屽簲鑱旂郴濂ユ灄宸存柉杩涜妫�娴嬪拰缁翠慨锛屼笉寰�<br/>鎿呰嚜灏嗙浉鍏冲鍝佷氦鐢变换浣曠涓夋柟缁翠慨銆傝嫢鍥犲�熺敤鍗曚綅鍘熷洜閫犳垚澶囧搧閬楀け鏃讹紝鍒欏�熺敤鍗曚綅搴旇礋璧斿伩璐d换銆�<br/>
+                6锛屽尰鐤楄矗浠讳簨鏁咃細澶囧搧鏄鍚堝浗瀹惰川閲忔爣鍑嗗苟缁忔楠屽悎鏍肩殑鍖荤枟鍣ㄦ浜у搧锛屽�熺敤鍗曚綅搴旂嫭绔嬩緷闈犲叾鍖荤枟涓撲笟姘村钩鍜岃兘鍔涘埄鐢ㄥ鍝佽繘琛屽尰鐤�<br/>娲诲姩鎴栧煿璁�傚�熺敤鍗曚綅浣跨敤澶囧搧鏃舵墍鍙戠敓鐨勪换浣曢棶棰樺潎鐢卞�熺敤鍗曚綅鑷璐熻矗銆佸鐞嗐��<br/>
+                7锛屽鍝佽繑杩橈細鍊熺敤鍗曚綅搴旀寜鐓ф湰鍗曟敞鏄庣殑浣跨敤鏈熼檺灞ヨ鎸夋椂杩旇繕澶囧搧鐨勬壙璇恒�傝繑鍥炲墠锛屽�熺敤鍗曚綅搴斿澶囧搧杩涜娓呮礂娑堟瘨鎴栫伃鑿岋紝浠ヤ繚璇佹墍<br/>鏈夊鍝佹帴瑙﹁�呯殑鍋ュ悍瀹夊叏锛屽悓鏃跺�熺敤鍗曚綅鏈変箟鍔′负濂ユ灄宸存柉鍏徃鍥炴敹澶囧搧鎻愪緵蹇呰鍗忓姪銆�<br/>
+                8锛屽�熺敤鍗曚綅鐭ユ倝涓斿悓鎰忥紝姝ゆ澶囧搧鍑哄�熷熀浜庢褰撳悎鐞嗙殑鐞嗙敱锛岃�岄潪閫氳繃鍑哄�熷鍝佸鍊熺敤鍗曚綅璐拱銆佹帹鑽愬ゥ鏋楀反鏂叕鍙镐骇鍝併�佹湇鍔$瓑浜х敓浠�<br/>浣曚笉姝e綋褰卞搷銆�<br/>
+                9锛屽�熺敤鍗曚綅搴斾弗鏍兼寜鏈崟鎵�杞戒娇鐢ㄧ洰鐨勪娇鐢ㄥ鍝侊紝绂佹灏嗗鍝佺敤浜庢湰鍗曟墍杞戒娇鐢ㄧ洰鐨勪互澶栫殑鍏朵粬鐢ㄩ�斻��<br/>
+                10锛岃嫢鍊熺敤鍗曚綅閫夋嫨浠ュ姞鐩栧疄闄呮帴鏀跺鍝佺殑鍊熺敤鍗曚綅鍐呴儴閮ㄩ棬绔犳垨绛炬敹鑰呯鍚嶆柟寮忕‘璁や互涓婂唴瀹癸紝瀹為檯鎺ユ敹澶囧搧鐨勫�熺敤鍗曚綅鍐呴儴閮ㄩ棬鎴栫<br/>鏀惰�呯‘璁ゅ叾鍏峰鐩稿簲璧勬牸浠h〃鍊熺敤鍗曚綅杩涜绛炬敹鍜岀‘璁ゃ��<br/>
+                11锛屽叾瀹冿細鍏跺畠鏈敖浜嬪疁锛屽弻鏂瑰簲鏈潃鍙嬪ソ鍚堜綔鐨勫師鍒欒繘琛屽崗鍟嗚В鍐炽��
+                            </td>
+                            <!-- 20211008 ljh SFDC-C7L4ED 澧炲姞8锛�9锛�10-->  
+                        </tr>
+                        <tr>
+                            <td style="text-align:left;font-size:12px;border-collapse: collapse;" colspan="2" height="80">
+                濂ユ灄宸存柉 鍖椾含澶囧搧涓績鍦板潃锛氬寳浜競鏈濋槼鍖洪厭浠欐ˉ璺�10鍙锋亽閫氬晢鍔″洯B12C搴цタ闂�1F<br />
+                閭紪锛�100015     TEL锛�010-59756006-1871    FAX: 010-59756534<br />
+                濂ユ灄宸存柉 骞垮窞澶囧搧涓績鍦板潃锛氬箍宸炲競鐣鍖轰笢鐜鐣澶ч亾鍖�537鍙风暘灞卞垱涓氫腑蹇�3鍙锋ゼ1F<br />
+                閭紪锛�511400     TEL锛�020-39198888-8876     FAX锛�020-39198848<br />
+                濂ユ灄宸存柉 涓婃捣澶囧搧涓績鍦板潃锛氫笂娴峰競娴︿笢鏂板尯閲戝悏璺�778鍙�3鍙锋ゼ1F<br />
+                閭紪锛�201206    TEL锛�021-60391318-8877    FAX锛�021-60391316<br />
+                            </td>
+                            <!-- 20210812 SFDC-C5CC5S 淇敼鍦板潃-->
+                        </tr>
+                    </table>
+                    <apex:outputPanel layout="none">
+                        <div style="page-break-after: always;"/>
+                    </apex:outputPanel>
+
+                <apex:variable value="{!1}" var="pNcnt" />
+                <apex:variable value="{!1}" var="pcnt" />
+                <apex:repeat value="{!records}" var="record">
+                    <div style="{position:absolute;width:100%;height:15px">&nbsp;</div> 
+                    <!-- 20201119 LJH OCSM_BP5-61 update start 涓诲崟鏄樉绀哄姙浜嬪鍜屽鍝佷腑蹇冨垎鏉ユ樉绀轰笖鍐呭涓嶅悓 -->
+                    <!-- <apex:outputText style="float:left;font-size:22px;margin-top: 15px;" value="{!centreAddress}"/> -->
+                    <!-- height: 15mm; -->
+                    <table border="0" width="100%" style="border-collapse: collapse;margin: 0;">
+                        <apex:outputPanel layout="none" rendered="{!IF(!IsShowLU , true, false)}">
+                        <tr>
+                            <td style="font-size:22px;"><apex:outputText value="{!IF(record.isAgencyOrCenter,record.AgencyAddressName,centreAddress)}"/></td>
+                            <td rowspan="2">
+                                <img style="float: right; width: 55px; height: 55px;padding: 0px;margin-top: 0mm;" src="{!'/servlet/servlet.FileDownload?file=' + ApplyHeadShow.QRId__c}" />
+                            </td>
+                        </tr>
+                        <tr>
+                            <td style="font-size:15px;"><c:PDFWbr targetStr="{!IF(record.AgencyOrCenterAddress=='BeiJingCenter','鍖椾含甯傛湞闃冲尯閰掍粰妗ヨ矾10鍙锋亽閫氬晢鍔″洯B12C搴цタ闂�1F 鐢佃瘽:010-59756006-1871',IF(record.AgencyOrCenterAddress=='ShangHaiCenter','涓婃捣甯傛郸涓滄柊鍖哄攼闀囧垱涓氳矾183鍙�2骞�1F 鐢佃瘽:021-60391318-8877',IF(record.AgencyOrCenterAddress=='GuangZhouCenter','骞垮窞甯傜暘绂哄尯涓滅幆琛楃暘绂哄ぇ閬撳寳537鍙风暘灞卞垱涓氫腑蹇�3鍙锋ゼ1F 鐢佃瘽:020-39198888-8876',record.AgencyOrCenterAddress)))}"/></td>
+                        </tr>
+                        </apex:outputPanel>
+                        <apex:outputPanel layout="none" rendered="{!IF(IsShowLU , true, false)}">
+                        <tr>
+                            <td style="font-size:22px;height: 55px;line-height: 55px;"><apex:outputText value="{!centreAddress}"/>
+                            </td>
+                            <td>
+                                <img style="float: right; width: 55px; height: 55px;padding: 0px;margin-top: 0mm;" src="{!'/servlet/servlet.FileDownload?file=' + ApplyHeadShow.QRId__c}" />
+                            </td>
+                        </tr>
+                        </apex:outputPanel>
+                    </table>
+                    <!-- 20201119 LJH OCSM_BP5-61 update end 涓诲崟鏄樉绀哄姙浜嬪鍜屽鍝佷腑蹇冨垎鏉ユ樉绀轰笖鍐呭涓嶅悓 -->
+                    <!-- margin-top: 15mm; -->
+                    <table border="1" width="100%" style="border-collapse: collapse;">
+                        <tr>
+                            <th style="box-sizing: border-box;text-align:center;font-size:24px;font-weight:900;" height="40">濂ユ灄宸存柉澶囧搧鍙戣揣娓呭崟
+                            <!-- <img style="float: right; width: 35px; height: 35px;padding: 0px;" src="{!'/servlet/servlet.FileDownload?file=' + ApplyHeadShow.QRId__c}" /> -->
+                            <!-- <td align="right" valign="top"><apex:outputField value="{!ApplyHeadShow.QRImg__c}" /></td>  -->
+                            </th>
+                        </tr>
+                        <tr>
+                            <td style="box-sizing: border-box;text-align:right;font-size:13px;" >澶囧搧绠$悊涓績鐢宠鍗曞彿锛�<apex:outputText value="{!ApplyHeadShow.Name}" /></td> <!-- {!RentalApplyName} 20201119 LJH OCSM_BP5-61  update-->
+                        </tr>
+                        <tr style="background-color:white;">
+                            <td style="box-sizing: border-box;text-align:right;font-size:13px;">鏈崟闄勪欢绗紙 {!pNcnt}锛夐〉/鍏憋紙 {!pageCnt}锛夐〉</td>
+                        </tr>
+                        <tr>
+                            <th style="box-sizing: border-box;text-align:center;font-size:16px;">
+                                鈥绘彁绀�
+                            </th>
+                        </tr>
+                        <tr>
+                            <td style="box-sizing: border-box;text-align:left;font-size:12.3px;">鏈�婂ゥ鏋楀反鏂鍝佸彂璐ф竻鍗曘�嬩竴寮忎袱浠斤紝鐢卞ゥ鏋楀反鏂鍝佸�熺敤鐢宠浜猴紙澶囧搧瀹夎浜猴級鍜屽尰鐤楁満鏋勫�熺敤鏂瑰悇鎵т竴浠斤紝浣滀负鍑哄�熷拰褰掕繕鏃跺弻鏂硅繘<br/>琛屾竻鐐圭‘璁ゅ嚟璇�
+                            </td>
+                        </tr>
+                    </table>
+
+                    <table border="1" width="100%" style="border-collapse: collapse;">
+                        <colgroup>
+                            <col width="4%" />
+                            <col width="8%" />
+                            <col width="20%" />
+                            <col width="11%" />
+                            <col width="29%" />
+                            <col width="9%" />
+                            <col width="9%" />
+                            <col width="7%" />
+                        </colgroup>
+                        <tr>
+                            <td style="box-sizing: border-box;text-align:center;font-size:13px;height: 16px;" colspan="2">鐢宠浜�</td>
+                            <td style="box-sizing: border-box;text-align:left;font-size: 13px">
+                                <apex:outputText value="{!ApplyHeadShow.Person_In_Charge__r.name}" />
+                            </td>
+                            <td style="box-sizing: border-box;text-align:center;font-size:13px;border-left: solid 1px;"  rowspan="2">鍖荤枟鏈烘瀯</td>
+                            <!-- 20220124 ljh SFDC-C4U3PH update colspan="4"  -->
+                            <td style="box-sizing: border-box;text-align:left;font-size: 13px;"  colspan="4"  rowspan="2">
+                                <apex:outputText value="{!HospitalName}" />
+                            </td>
+                        </tr>
+                        <tr>
+                            <td style="box-sizing: border-box;text-align:center;font-size:13px;" colspan="2">浣跨敤鐩殑</td>
+                            <td style="box-sizing: border-box;text-align:left;font-size: 13px;border-right: solid 1px">
+                                <apex:outputText value="{!ApplyHeadShow.Demo_purpose1__c}" />
+                            </td>
+                        </tr>
+                        <tr>
+                            <td style="box-sizing: border-box;text-align:center;font-size:13px;height: 16px;" colspan="2">鏀朵欢鑰呭鍚�</td>
+                            <td style="box-sizing: border-box;text-align:left;font-size: 13px">
+                                <apex:outputText value="{!ApplyHeadShow.Loaner_received_staff__c}" />
+                            </td>
+                            <td style="box-sizing: border-box;text-align:center;font-size:13px;border-left: solid 1px;"  rowspan="2">鍙戣揣鍦板潃</td>
+                             <!-- 20220124 ljh SFDC-C4U3PH update colspan="4"  -->
+                            <td style="box-sizing: border-box;text-align:left;font-size: 13px;"  colspan="4"  rowspan="2">
+                                <apex:outputText value="{!if(isblank(ApplyHeadShow.Shippment_adress_detail__c), ApplyHeadShow.direct_shippment_address__c, ApplyHeadShow.Shippment_adress_detail__c)}" />
+                            </td>
+                        </tr>
+                        <tr>
+                            <td style="box-sizing: border-box;text-align:center;font-size:13px;" colspan="2">鏀朵欢鑰呯數璇�</td>
+                            <td style="box-sizing: border-box;text-align:left;font-size: 13px;border-right: solid 1px">
+                                <apex:outputText value="{!ApplyHeadShow.Loaner_received_staff_phone__c}" />
+                            </td>
+                        </tr>
+                        <tr>
+                              <!-- 20220124 ljh SFDC-C4U3PH update colspan="8" -->
+                            <th style="text-align:center;font-size:13px;height: 7pt;" colspan="8" >鍊熺敤澶囧搧鍙戣揣娓呭崟</th>
+                        </tr>
+                        <tr>
+                            <td rowspan="2" style="box-sizing: border-box;text-align:center;font-size: 11px;">搴忓彿</td>
+                            <td rowspan="2" style="box-sizing: border-box;text-align:center;font-size: 11px;">绠$悊缂栧彿</td>
+                               <!-- 20220124 ljh SFDC-C4U3PH update colspan="6" -->
+                            <td colspan="6" style="box-sizing: border-box;text-align:center;font-size: 11px;">鏄庣粏</td>
+                        </tr>
+                        <tr>
+                            <!-- <td style="text-align:center;">搴忓彿</td>
+                            <td style="text-align:center;">澶囧搧set鍨嬪彿</td>
+                            <td style="text-align:center;">绠$悊缂栧彿</td>
+                            <td style="text-align:center;">浜у搧鍨嬪彿</td>
+                            <td style="text-align:center;">鏈鸿韩鍙�</td>
+                            <td style="text-align:center;">闄勫睘鍝佹槑缁�</td> -->
+                            <td style="box-sizing: border-box;text-align:center;font-size: 11px;">鏄庣粏鍨嬪彿</td>
+                            <td style="box-sizing: border-box;text-align:center;font-size: 11px;" colspan="2">涓枃鍚嶇О</td>
+                            <td style="box-sizing: border-box;text-align:center;font-size: 11px;">鏈鸿韩鍙�</td>
+                            <td style="text-align:center;font-size: 11px;">鍥哄畾璧勪骇鍙�</td>
+                            <td style="box-sizing: border-box;text-align:center;font-size: 11px;">璐т綅鍙�</td>
+                            <!-- 20220124 ljh SFDC-C4U3PH add start -->
+                            <td style="box-sizing: border-box;text-align:center;font-size: 11px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;澶囨敞&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+                            <!-- 20220124 ljh SFDC-C4U3PH add end -->
+                            <!-- <td style="text-align:center;">浜岀淮鐮�</td> -->
+                        </tr>
+                        <apex:repeat value="{!record.lineList}" var="line">
+                            <tr>
+                                <td style="box-sizing: border-box;text-align:center;font-size: 10px;height:30px;padding: 0px;"><c:PDFWbr targetStr="{!line.index}" /></td>
+                                <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;"><c:PDFWbr targetStr="{!line.dManagementnumber}" /></td>
+                                <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;"><c:PDFWbr targetStr="{!line.dModelNo}" /></td>
+                                <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;" colspan="2"><c:PDFWbr targetStr="{!line.dChinaName}" /></td>
+                                <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;"><c:PDFWbr targetStr="{!line.dSerialNumber}" /></td>
+                                <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;"><c:PDFWbr targetStr="{!line.dLoaner_asset_no}" /></td>
+                                <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;"><c:PDFWbr targetStr="{!line.wh_location}" /></td>
+                                <!-- 20220124 ljh SFDC-C4U3PH add start -->
+                                <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;"><c:PDFWbr targetStr="" /></td>
+                                <!-- {!line.Received_ng_detail} -->
+                                <!-- 20220124 ljh SFDC-C4U3PH add end -->
+                                <!-- <td style="text-align:center;font-size: 10px"><c:PDFWbr targetStr="{!line.dQRCode}" /></td> -->
+
+                                <!-- <td style="text-align:left;font-size: 13px"><apex:outputText value="{!IF(pcnt < AllSum +1,pcnt,'')}" /></td> -->
+                                <!-- <td style="text-align:left;font-size: 13px"><apex:outputText value="{!line.index}" /></td>
+                                <td style="text-align:left;font-size: 13px"><apex:outputText value="{!line.setName}" /></td>
+                                <td style="text-align:left;font-size: 13px"><apex:outputText value="{!line.name1}" /></td>
+                                <td style="text-align:left;font-size: 13px"><apex:outputText value="{!line.LoanerCode}" /></td>
+                                <td style="text-align:left;font-size: 13px"><apex:outputText value="{!line.serialNumber1}" /></td>
+                                <td style="text-align:left;font-size: 13px"><apex:outputText value="{!line.AssetModelNo}" /></td> -->
+                            </tr>
+                            <apex:variable value="{!pcnt + 1}" var="pcnt" />
+                        </apex:repeat> 
+                    </table> 
+                    <!-- 20211209 ljh SFDC-C923SR 鏉″舰鐮� -->
+                    <img style="float:left;position:absolute;z-index: 99;" src="{!'/servlet/servlet.FileDownload?file=' + ApplyHeadShow.BRId__c}" />
+                    <!-- 20211209 ljh SFDC-C923SR 鏉″舰鐮� -->
+                    <div style="{position:absolute;width:100%;height:20px">&nbsp;</div>
+                    <apex:outputPanel rendered="{!pNcnt < pageCnt}" layout="none">
+                        <!--  <div style="{position:absolute;width:100%;height:30px">&nbsp;</div> 
+                        <div style="{position:absolute;width:100%;height:30px">&nbsp;</div>--> 
+                    <div style="page-break-after: always;"/>
+                    </apex:outputPanel>
+                    <apex:variable value="{!pNcnt+1}" var="pNcnt" />
+                </apex:repeat>
+
+                </apex:outputPanel>
+            </div>
+        </body>
+        <script>
+            console.log('----start----')
+            console.log('----{!ApplyHeadShow.AWS_Data_Id__c}----')
+            AWSService.sfSessionId = '{!GETSESSIONID()}';
+            //sforce.connection.sessionId = '{!GETSESSIONID()}';
+            var staticResources = JSON.parse('{!staticResource}');
+            blockme();
+            document.body.onload = function(){
+                console.log('document.body.onload')
+                AWSService.query(staticResources.queryUrl, '{!ApplyHeadShow.AWS_Data_Id__c}', function(data){
+                    console.log('data----------')
+                    console.log(data);
+                    unblockUI();
+                    document.getElementById("allPage:Shippmentadress").innerHTML = data.object.directShippmentAddress;
+                    //document.getElementById("Caller_phone__c").innerHTML = data.object.callerPhone;
+                    
+                    setTimeout(() => {
+                        jsPdfDownload(); 
+                    }, 1500);
+                }, staticResources.token);
+                
             }
-
-            /*td{
-                height: 23px;
-            }*/
-
-        </style>
-    </head>
-    
-
-<body style="font-family: Arial Unicode MS; page-break-inside: auto;font-size: 14px">
-<apex:outputPanel id="showhidden" rendered="true">
-    <!-- 20201119 LJH OCSM_BP5-61 update start 鐜板湴绠$悊鍜岀幇鍦扮鐞嗙殑涓诲崟涓嶆樉绀�-->
-    <!-- <apex:outputText style="float:left;font-size:22px;margin-top: 25px;" value="{!centreAddress}" /> -->
-    <apex:outputText style="float:left;font-size:22px;margin-top: 25px;" value="{!IF(IsShowLU,centreAddress,'')}" />
-    <!-- 20201119 LJH OCSM_BP5-61 update end 鐜板湴绠$悊鍜岀幇鍦扮鐞嗙殑涓诲崟涓嶆樉绀�-->
-    <img style="float: right; width: 55px; height: 55px;padding: 0px;margin-top: 12px;" src="{!'/servlet/servlet.FileDownload?file=' + ApplyHeadShow.QRId__c}" />
-    <table border="1" width="100%" style="border-collapse: collapse;margin-top: 18mm;">
-        <colgroup>
-            <col width="50%" />
-            <col width="50%" />
-        </colgroup>
-        <tr>
-            <th style="text-align:center;" colspan="2" height="38">濂ユ灄宸存柉澶囧搧绛炬敹鍗�
-                <!-- <img style="float: right; width: 35px; height: 35px;padding: 0px;margin-top: -7px;" src="{!'/servlet/servlet.FileDownload?file=' + ApplyHeadShow.QRId__c}" /> -->
-            </th>
-        </tr>
-        <tr>
-            <td style="text-align:left;border-right-style: none;">鈽呭~鍐欏畬鏁村悗璇疯嚜鍙戣揣鏃ヨ捣10澶╁唴涓婁紶SFDC</td>
-            <td style="text-align:right;border-left-style: none;">澶囧搧绠$悊涓績鐢宠鍗曞彿锛�<apex:outputText value="{!ApplyHeadShow.Name}" /></td>
-        </tr>
-        <!-- <tr style="background-color:#003399;color:white">
-            <th style="text-align:center;" height="40">鍙戣揣淇℃伅</th>
-        </tr> -->
-        <!-- <tr>
-            <td style="text-align:left;font-size:12px">
-1銆佹湰鍙戣揣纭鍗曞叡涓ら〉銆傞椤典腑鍒拌揣纭閮ㄥ垎涓虹幇鍦哄繀濉」鐩紝濉啓瀹屾暣鍚庤鍥炰紶鑷冲鍝佷腑蹇冿紙浼犵湡鎴栨壂鎻忎欢鍗冲彲锛夛紱<br />
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;鏈〉涓竻娲楁秷姣掔伃鑿岀‘璁ゆ爮涓虹幇鍦哄繀濉」鐩紝澶囧搧鍥炲瘎鏃惰灏嗘椤甸殢澶囧搧涓�鍚屽瘎鍥炲鍝佷腑蹇冦��<br />
-2銆佽瀵逛骇鍝佽繘琛屾竻娲楁秷姣掓垨鐏弻鍚庡啀浣跨敤銆�<br />
-3銆佸湪浣跨敤澶囧搧鍓嶏紝鏁浠旂粏闃呰鑳岄潰鈥滃鍝佷娇鐢ㄩ』鐭モ�濓紝璇锋槑纭敵璇蜂汉鍙婄敵璇锋柟璐d换涓庝箟鍔°��
-            </td>
-        </tr> -->
-    </table>
-    <table border="1px" width="100%" style="border-collapse: collapse;">
-        <colgroup>
-            <col width="16%" />
-            <col width="14%" />
-            <col width="36%" />
-            <col width="16%" />
-            <col width="18%" />
-        </colgroup>
-        <tr>
-            <th style="text-align:center;" colspan="5" height="25">鍙戣揣淇℃伅</th>
-        </tr>
-        <tr>
-            <td style="text-align:left;">浣跨敤鐩殑</td> <td style="text-align:left;font-size: 13px" colspan="4"><apex:outputText value="{!ApplyHeadShow.Demo_purpose1__c}" /></td>
-        </tr>
-        <tr>
-            <td style="text-align:left;" rowspan="2">鐢宠浜轰俊鎭�</td>
-            <td style="text-align:left;">鎵�灞炴湰閮ㄥ悕</td> <td   style="text-align:left;font-size: 13px">     <apex:outputText value="{!ApplyHeadShow.Salesdept__c}" /></td>
-            <td style="text-align:left;" >鎵�灞炲姙浜嬪鍚�</td> <td   style="text-align:left;font-size: 13px">        <apex:outputText value="{!ApplyHeadShow.WorkPlace__c}" /></td>
-        </tr>
-        <tr>
-            <td style="text-align:left;" >濮撳悕 </td> <td  style="text-align:left;font-size: 13px">    <apex:outputText value="{!ApplyHeadShow.Person_In_Charge__r.name}" /></td>
-            <td style="text-align:left;" colspan="1">鑱旂郴鐢佃瘽</td> <td  style="text-align:left;font-size: 13px">     <apex:outputText value="{!ApplyHeadShow.ApplyPerson_Phone__c}" /></td>
-        </tr>
-        <tr>
-            <td style="text-align:left;" >鍖荤枟鏈烘瀯淇℃伅</td> 
-            <td style="text-align:left;" >鍖荤枟鏈烘瀯鍚�</td> <td style="text-align:left;font-size: 13px"> <apex:outputText value="{!HospitalName}" /></td>
-            <td style="text-align:left;" >绉戝鍚�</td> <td  style="text-align:left;font-size: 13px"><apex:outputText value="{!ApplyHeadShow.Account__r.Department_Name__c}" /></td>
-        </tr>
-        <tr>
-            <td style="text-align:left;" rowspan="3" >鍙戣揣鍦板潃</td> <td colspan="2" rowspan="3" style="text-align:left;font-size: 13px"> <apex:outputText value="{!Shippmentadress}" /></td>
-            <td style="text-align:left;" colspan="1">閭紪</td> <td  style="text-align:left;"> <apex:outputText value="{!IF(ApplyHeadShow.Shipment_address__r.Post_Code__c==null,ApplyHeadShow.Post_Code__c,ApplyHeadShow.Shipment_address__r.Post_Code__c)}" /></td>
-        </tr>
-        <tr>
-            <td style="text-align:left;" colspan="1">鎺ユ敹浜哄鍚�</td> <td  style="text-align:left;font-size: 13px">  <apex:outputText value="{!ApplyHeadShow.Loaner_received_staff__c}" /></td>
-        </tr>
-        <tr>
-            <td style="text-align:left;" colspan="1">鎺ユ敹浜虹數璇�</td> <td style="text-align:left;font-size: 13px">  <apex:outputText value="{!ApplyHeadShow.Loaner_received_staff_phone__c}" /></td>
-        </tr>
-    </table>
-    <table border="1" width="100%" style="border-collapse: collapse;">
-        <tr>
-            <th style="text-align:center;" colspan="4" height="25">鍖婚櫌鍊熺敤鏈熼檺</th>
-        </tr>
-        <tr>
-            <td style="text-align:left;"> {!IF(BorrowTimeString='null','',BorrowTimeString)}&nbsp;&nbsp;&nbsp;</td>
-        </tr>
-    </table>
-    <table border="1" width="100%" style="border-collapse: collapse;">
-        <colgroup>
-            
-            <col width="19%" />
-            <col width="29%" />
-            <col width="29%" />
-            <col width="23%" />
-        </colgroup>
-        <tr>
-            <th style="text-align:center;" colspan="4" height="40">銆�濂ユ灄宸存柉澶囧搧鍊熺敤鐢宠銉诲畨瑁呬汉濉啓鏍�<small>锛堝繀濉級</small><br/>鍒拌揣纭閮ㄥ垎涓哄ゥ鏋楀反鏂憳宸ュ繀濉」鐩�</th>
-        </tr>
-        <tr>
-            <td style="text-align:left;" >绛炬敹鑰呭鍚�</td> <td style="text-align:left;"></td>
-            <td style="text-align:left;">澶囧搧瀹夎鑰呭鍚�</td> <td  style="text-align:left;"></td>
-        </tr>
-        <tr>
-            <td style="text-align:left;">绛炬敹鏃ユ湡</td> <td  style="text-align:left;"></td>
-            <td style="text-align:left;">瀹夎鍙婂畨瑁呰鏄庢棩鏈�</td> <td  style="text-align:left;"> </td>
-        </tr>
-    </table>
-    <table border="1" width="100%" style="border-collapse: collapse;">
-        <colgroup>
-            
-            <col width="19%" />
-            <col width="29%" />
-            <col width="29%" />     
-            <col width="23%" />
-        </colgroup>
-        <tr>
-            <th style="text-align:center;" colspan="4" height="40">銆�鍖荤枟鏈烘瀯绛炬敹濉啓鏍�<small>锛堝繀濉級</small><br/>鏁浣跨敤澶囧搧鍓嶄粩缁嗛槄璇讳笅鏂光�滃ゥ鏋楀反鏂鍝佸�熺敤椤荤煡鈥濓紝浠ユ槑纭娇鐢ㄦ柟鐨勮矗浠讳笌涔夊姟</th>
-            
-        </tr>
-        <!--鏍规嵁OLY_OCM-260璁拌浇,鍏堟敞閲婃帀(OLY_OCM-251鍙栨秷娉ㄩ噴) -->
-        <tr><th style="text-align:center;" height="25" colspan="4">銆婂ゥ鏋楀反鏂鍝佸彂璐ф竻鍗曘�嬫墍鍒楀鍝佹倝鏁版敹鍒帮紝
-           鍏辫涓绘満{!mainCnt}浠讹紝闄勫睘鍝亄!accessoryCnt}浠讹紱骞跺凡鎺ュ彈浜у搧浣跨敤璇存槑鍜屼簡瑙e�熺敤椤荤煡銆�</th></tr>
-        <tr>
-            <td style="text-align:left;" >绛炬敹鑰呭鍚�</td> <td style="text-align:left;"></td>
-            <td style="text-align:left;" rowspan="2">鎺ユ敹鍗曚綅锛堢瀹わ級绔� </td>
-            <td style="text-align:left;" rowspan="2"> </td>
-        </tr>
-        <tr>
-            <td style="text-align:left;">绛炬敹鏃ユ湡</td> <td  style="text-align:left;"></td>
-            
-        </tr>
-    </table>
-    <table border="1" width="100%" style="border-collapse: collapse;">
-        <colgroup>
-            <col width="100%" />
-        </colgroup>
-        <tr>
-            <th style="text-align:center;" height="25">鈥诲ゥ鏋楀反鏂鍝佸�熺敤椤荤煡</th>
-        </tr>
-        <tr>
-            <td style="text-align:left;font-size: 12px">
-1锛屽鍝侊細鏈』鐭ユ墍鎸囩殑澶囧搧锛屾槸鎸囨湰绛炬敹鍗曢檮浠躲�婂ゥ鏋楀反鏂鍝佸彂璐ф竻鍗曘�嬫墍鍒楃殑鐢卞ゥ鏋楀反鏂紙鍖椾含锛夐攢鍞湇鍔℃湁闄愬叕鍙革紙浠ヤ笅绠�绉板ゥ鏋�<br/>宸存柉锛夊湪瑙勫畾鏈熼檺鍐呭厤璐规彁渚涚粰鍊熺敤鍗曚綅涓哄疄鏂藉尰鐤楄涓烘垨鍩硅绛夋墍浣跨敤鐨勮澶囧寘鎷骇鍝佸強鐩稿叧闄勫睘鍝侊紝闄勪欢鏄湰椤荤煡鏈夋晥缁勬垚閮ㄥ垎锛屼笌鏈�<br/>椤荤煡鍏锋湁鍚岀瓑娉曞緥鏁堝姏銆�<br/>
-2锛屽鍝佹墍鏈夋潈锛氬鍝佹墍鏈夋潈褰掑睘浜庡ゥ鏋楀反鏂叕鍙搞�傛湭缁忓ゥ鏋楀反鏂叕鍙镐功闈㈠悓鎰忥紝鍊熺敤鍗曚綅涓嶅緱浠ヤ换浣曠悊鐢卞悜浠讳綍绗笁鏂硅浆鍊熴�佽浆璁╅檮浠舵墍<br/>鍒楀鍝侊紝鎴栧皢闄勪欢鎵�鍒楀鍝佷綔涓烘媴淇濇姷鎶肩粰浠讳綍绗笁鏂广��<br/>
-3锛屽鍝佷娇鐢ㄦ潈锛氬�熺敤鏈熼檺鍐咃紝鍊熺敤鍗曚綅瀵瑰嚭鍊熺殑澶囧搧浜湁鐙珛鍚堢悊鐨勪娇鐢ㄦ潈鍒┿�傝嫢鍦ㄤ娇鐢ㄨ繃绋嬩腑瀛樺湪涓嶇‘瀹氭儏鍐垫椂锛屽�熺敤鍗曚綅搴斿強鏃堕�氱煡<br/>濂ユ灄宸存柉鍏徃锛屽ゥ鏋楀反鏂叕鍙稿皢鍒板満缁欎簣鎸囧鍜屽崗鍔╋紝鍊熺敤鍗曚綅涓嶅簲鎿呰嚜澶勭悊銆�<br/>
-4锛屽鍝佷箣鏃ュ父浣跨敤涓庣淮鎶わ細鍊熺敤鍗曚綅鍦ㄤ娇鐢ㄥ鍝佽繃绋嬩腑搴旀寜鐓уゥ鏋楀反鏂叕鍙哥殑瑕佹眰锛堚�滀骇鍝佷娇鐢ㄨ鏄庝功鈥濓級鍐呭灏藉鎱庝箟鍔℃纭搷浣滀娇鐢ㄣ��<br/>鐖辨姢浣跨敤銆傚鍝佷娇鐢ㄥ墠鍚庨兘搴旇繘琛屽繀瑕佺殑娓呮礂娑堟瘨锛堢伃鑿岋級鍙婃棩甯告娴嬪伐浣滐紝浠ョ‘淇濆鍝佺殑姝e父杩愪綔銆�<br/>
-5锛屽鍝佹崯鍧忋�侀仐澶变箣璧斿伩璐d换锛氶檮浠舵墍鍒楀鍝佽嫢鍥犳甯告崯鑰楄�屼骇鐢熺殑缁翠慨鎴栫淮鎶よ垂鐢紝鐢卞ゥ鏋楀反鏂叕鍙告壙鎷咃紱鑻ュ洜鍊熺敤鍗曚綅浣跨敤涓嶅綋鎴栬秴<br/>鏈熷�熺敤绛夊師鍥犻�犳垚鐨勫鍝佹崯鍧忥紝鍊熺敤鍗曚綅搴旀壙鎷呯浉鍏崇淮淇垂鐢ㄣ�傚綋澶囧搧鍊熺敤涓彂鐢熸晠闅滈渶瑕佺淮淇椂锛屽簲鑱旂郴濂ユ灄宸存柉杩涜妫�娴嬪拰缁翠慨锛屼笉寰�<br/>鎿呰嚜灏嗙浉鍏冲鍝佷氦鐢变换浣曠涓夋柟缁翠慨銆傝嫢鍥犲�熺敤鍗曚綅鍘熷洜閫犳垚澶囧搧閬楀け鏃讹紝鍒欏�熺敤鍗曚綅搴旇礋璧斿伩璐d换銆�<br/>
-6锛屽尰鐤楄矗浠讳簨鏁咃細澶囧搧鏄鍚堝浗瀹惰川閲忔爣鍑嗗苟缁忔楠屽悎鏍肩殑鍖荤枟鍣ㄦ浜у搧锛屽�熺敤鍗曚綅搴旂嫭绔嬩緷闈犲叾鍖荤枟涓撲笟姘村钩鍜岃兘鍔涘埄鐢ㄥ鍝佽繘琛屽尰鐤�<br/>娲诲姩鎴栧煿璁�傚�熺敤鍗曚綅浣跨敤澶囧搧鏃舵墍鍙戠敓鐨勪换浣曢棶棰樺潎鐢卞�熺敤鍗曚綅鑷璐熻矗銆佸鐞嗐��<br/>
-7锛屽鍝佽繑杩橈細鍊熺敤鍗曚綅搴旀寜鐓ф湰鍗曟敞鏄庣殑浣跨敤鏈熼檺灞ヨ鎸夋椂杩旇繕澶囧搧鐨勬壙璇恒�傝繑鍥炲墠锛屽�熺敤鍗曚綅搴斿澶囧搧杩涜娓呮礂娑堟瘨鎴栫伃鑿岋紝浠ヤ繚璇佹墍<br/>鏈夊鍝佹帴瑙﹁�呯殑鍋ュ悍瀹夊叏锛屽悓鏃跺�熺敤鍗曚綅鏈変箟鍔′负濂ユ灄宸存柉鍏徃鍥炴敹澶囧搧鎻愪緵蹇呰鍗忓姪銆�<br/>
-8锛屽�熺敤鍗曚綅鐭ユ倝涓斿悓鎰忥紝姝ゆ澶囧搧鍑哄�熷熀浜庢褰撳悎鐞嗙殑鐞嗙敱锛岃�岄潪閫氳繃鍑哄�熷鍝佸鍊熺敤鍗曚綅璐拱銆佹帹鑽愬ゥ鏋楀反鏂叕鍙镐骇鍝併�佹湇鍔$瓑浜х敓浠�<br/>浣曚笉姝e綋褰卞搷銆�<br/>
-9锛屽�熺敤鍗曚綅搴斾弗鏍兼寜鏈崟鎵�杞戒娇鐢ㄧ洰鐨勪娇鐢ㄥ鍝侊紝绂佹灏嗗鍝佺敤浜庢湰鍗曟墍杞戒娇鐢ㄧ洰鐨勪互澶栫殑鍏朵粬鐢ㄩ�斻��<br/>
-10锛岃嫢鍊熺敤鍗曚綅閫夋嫨浠ュ姞鐩栧疄闄呮帴鏀跺鍝佺殑鍊熺敤鍗曚綅鍐呴儴閮ㄩ棬绔犳垨绛炬敹鑰呯鍚嶆柟寮忕‘璁や互涓婂唴瀹癸紝瀹為檯鎺ユ敹澶囧搧鐨勫�熺敤鍗曚綅鍐呴儴閮ㄩ棬鎴栫<br/>鏀惰�呯‘璁ゅ叾鍏峰鐩稿簲璧勬牸浠h〃鍊熺敤鍗曚綅杩涜绛炬敹鍜岀‘璁ゃ��<br/>
-11锛屽叾瀹冿細鍏跺畠鏈敖浜嬪疁锛屽弻鏂瑰簲鏈潃鍙嬪ソ鍚堜綔鐨勫師鍒欒繘琛屽崗鍟嗚В鍐炽��
-            </td>
-            <!-- 20211008 ljh SFDC-C7L4ED 澧炲姞8锛�9锛�10-->  
-        </tr>
-        <tr>
-            <td style="text-align:left;font-size:12px;border-collapse: collapse;" colspan="2" height="80">
-濂ユ灄宸存柉 鍖椾含澶囧搧涓績鍦板潃锛氬寳浜競鏈濋槼鍖洪厭浠欐ˉ璺�10鍙锋亽閫氬晢鍔″洯B12C搴цタ闂�1F<br />
-閭紪锛�100015     TEL锛�010-59756006-1871    FAX: 010-59756534<br />
-濂ユ灄宸存柉 骞垮窞澶囧搧涓績鍦板潃锛氬箍宸炲競鐣鍖轰笢鐜鐣澶ч亾鍖�537鍙风暘灞卞垱涓氫腑蹇�3鍙锋ゼ1F<br />
-閭紪锛�511400     TEL锛�020-39198888-8876     FAX锛�020-39198848<br />
-濂ユ灄宸存柉 涓婃捣澶囧搧涓績鍦板潃锛氫笂娴峰競娴︿笢鏂板尯閲戝悏璺�778鍙�3鍙锋ゼ1F<br />
-閭紪锛�201206    TEL锛�021-60391318-8877    FAX锛�021-60391316<br />
-            </td>
-            <!-- 20210812 SFDC-C5CC5S 淇敼鍦板潃-->
-        </tr>
-    </table>
-    <apex:outputPanel layout="none">
-         <div style="page-break-after: always;"/>
-    </apex:outputPanel>
-
-<apex:variable value="{!1}" var="pNcnt" />
-<apex:variable value="{!1}" var="pcnt" />
-<apex:repeat value="{!records}" var="record">
-    <div style="{position:absolute;width:100%;height:15px">&nbsp;</div> 
-    <!-- 20201119 LJH OCSM_BP5-61 update start 涓诲崟鏄樉绀哄姙浜嬪鍜屽鍝佷腑蹇冨垎鏉ユ樉绀轰笖鍐呭涓嶅悓 -->
-    <!-- <apex:outputText style="float:left;font-size:22px;margin-top: 15px;" value="{!centreAddress}"/> -->
-    <!-- height: 15mm; -->
-    <table border="0" width="100%" style="border-collapse: collapse;margin: 0;">
-        <apex:outputPanel layout="none" rendered="{!IF(!IsShowLU , true, false)}">
-        <tr>
-            <td style="font-size:22px;"><apex:outputText value="{!IF(record.isAgencyOrCenter,record.AgencyAddressName,centreAddress)}"/></td>
-            <td rowspan="2">
-                <img style="float: right; width: 55px; height: 55px;padding: 0px;margin-top: 0mm;" src="{!'/servlet/servlet.FileDownload?file=' + ApplyHeadShow.QRId__c}" />
-            </td>
-        </tr>
-        <tr>
-            <td style="font-size:15px;"><c:PDFWbr targetStr="{!IF(record.AgencyOrCenterAddress=='BeiJingCenter','鍖椾含甯傛湞闃冲尯閰掍粰妗ヨ矾10鍙锋亽閫氬晢鍔″洯B12C搴цタ闂�1F 鐢佃瘽:010-59756006-1871',IF(record.AgencyOrCenterAddress=='ShangHaiCenter','涓婃捣甯傛郸涓滄柊鍖哄攼闀囧垱涓氳矾183鍙�2骞�1F 鐢佃瘽:021-60391318-8877',IF(record.AgencyOrCenterAddress=='GuangZhouCenter','骞垮窞甯傜暘绂哄尯涓滅幆琛楃暘绂哄ぇ閬撳寳537鍙风暘灞卞垱涓氫腑蹇�3鍙锋ゼ1F 鐢佃瘽:020-39198888-8876',record.AgencyOrCenterAddress)))}"/></td>
-        </tr>
-        </apex:outputPanel>
-        <apex:outputPanel layout="none" rendered="{!IF(IsShowLU , true, false)}">
-        <tr>
-            <td style="font-size:22px;height: 55px;line-height: 55px;"><apex:outputText value="{!centreAddress}"/>
-            </td>
-            <td>
-                <img style="float: right; width: 55px; height: 55px;padding: 0px;margin-top: 0mm;" src="{!'/servlet/servlet.FileDownload?file=' + ApplyHeadShow.QRId__c}" />
-            </td>
-        </tr>
-        </apex:outputPanel>
-    </table>
-    <!-- 20201119 LJH OCSM_BP5-61 update end 涓诲崟鏄樉绀哄姙浜嬪鍜屽鍝佷腑蹇冨垎鏉ユ樉绀轰笖鍐呭涓嶅悓 -->
-    <!-- margin-top: 15mm; -->
-    <table border="1" width="100%" style="border-collapse: collapse;">
-        <tr>
-            <th style="box-sizing: border-box;text-align:center;font-size:24px;font-weight:900;" height="40">濂ユ灄宸存柉澶囧搧鍙戣揣娓呭崟
-            <!-- <img style="float: right; width: 35px; height: 35px;padding: 0px;" src="{!'/servlet/servlet.FileDownload?file=' + ApplyHeadShow.QRId__c}" /> -->
-            <!-- <td align="right" valign="top"><apex:outputField value="{!ApplyHeadShow.QRImg__c}" /></td>  -->
-            </th>
-        </tr>
-        <tr>
-            <td style="box-sizing: border-box;text-align:right;font-size:13px;" >澶囧搧绠$悊涓績鐢宠鍗曞彿锛�<apex:outputText value="{!ApplyHeadShow.Name}" /></td> <!-- {!RentalApplyName} 20201119 LJH OCSM_BP5-61  update-->
-        </tr>
-        <tr style="background-color:white;">
-            <td style="box-sizing: border-box;text-align:right;font-size:13px;">鏈崟闄勪欢绗紙 {!pNcnt}锛夐〉/鍏憋紙 {!pageCnt}锛夐〉</td>
-        </tr>
-        <tr>
-            <th style="box-sizing: border-box;text-align:center;font-size:16px;">
-                鈥绘彁绀�
-            </th>
-        </tr>
-        <tr>
-            <td style="box-sizing: border-box;text-align:left;font-size:12.3px;">鏈�婂ゥ鏋楀反鏂鍝佸彂璐ф竻鍗曘�嬩竴寮忎袱浠斤紝鐢卞ゥ鏋楀反鏂鍝佸�熺敤鐢宠浜猴紙澶囧搧瀹夎浜猴級鍜屽尰鐤楁満鏋勫�熺敤鏂瑰悇鎵т竴浠斤紝浣滀负鍑哄�熷拰褰掕繕鏃跺弻鏂硅繘<br/>琛屾竻鐐圭‘璁ゅ嚟璇�
-            </td>
-        </tr>
-    </table>
-
-    <table border="1" width="100%" style="border-collapse: collapse;">
-        <colgroup>
-            <col width="4%" />
-            <col width="8%" />
-            <col width="20%" />
-            <col width="11%" />
-            <col width="29%" />
-            <col width="9%" />
-            <col width="9%" />
-            <col width="7%" />
-        </colgroup>
-        <tr>
-            <td style="box-sizing: border-box;text-align:center;font-size:13px;height: 16px;" colspan="2">鐢宠浜�</td>
-            <td style="box-sizing: border-box;text-align:left;font-size: 13px">
-                <apex:outputText value="{!ApplyHeadShow.Person_In_Charge__r.name}" />
-            </td>
-            <td style="box-sizing: border-box;text-align:center;font-size:13px;border-left: solid 1px;"  rowspan="2">鍖荤枟鏈烘瀯</td>
-            <!-- 20220124 ljh SFDC-C4U3PH update colspan="4"  -->
-            <td style="box-sizing: border-box;text-align:left;font-size: 13px;"  colspan="5"  rowspan="2">
-                <apex:outputText value="{!HospitalName}" />
-            </td>
-        </tr>
-        <tr>
-            <td style="box-sizing: border-box;text-align:center;font-size:13px;" colspan="2">浣跨敤鐩殑</td>
-            <td style="box-sizing: border-box;text-align:left;font-size: 13px;border-right: solid 1px">
-                <apex:outputText value="{!ApplyHeadShow.Demo_purpose1__c}" />
-            </td>
-        </tr>
-        <tr>
-            <td style="box-sizing: border-box;text-align:center;font-size:13px;height: 16px;" colspan="2">鏀朵欢鑰呭鍚�</td>
-            <td style="box-sizing: border-box;text-align:left;font-size: 13px">
-                <apex:outputText value="{!ApplyHeadShow.Loaner_received_staff__c}" />
-            </td>
-            <td style="box-sizing: border-box;text-align:center;font-size:13px;border-left: solid 1px;"  rowspan="2">鍙戣揣鍦板潃</td>
-            <!-- 20220124 ljh SFDC-C4U3PH update colspan="4"  -->
-            <td style="box-sizing: border-box;text-align:left;font-size: 13px;"  colspan="5"  rowspan="2">
-                <apex:outputText value="{!if(isblank(ApplyHeadShow.Shippment_adress_detail__c), ApplyHeadShow.direct_shippment_address__c, ApplyHeadShow.Shippment_adress_detail__c)}" />
-            </td>
-        </tr>
-        <tr>
-            <td style="box-sizing: border-box;text-align:center;font-size:13px;" colspan="2">鏀朵欢鑰呯數璇�</td>
-            <td style="box-sizing: border-box;text-align:left;font-size: 13px;border-right: solid 1px">
-                <apex:outputText value="{!ApplyHeadShow.Loaner_received_staff_phone__c}" />
-            </td>
-        </tr>
-        <tr>
-            <!-- 20220124 ljh SFDC-C4U3PH update colspan="8" -->
-            <th style="text-align:center;font-size:13px;height: 7pt;" colspan="9" >鍊熺敤澶囧搧鍙戣揣娓呭崟</th>
-        </tr>
-        <tr>
-            <td rowspan="2" style="box-sizing: border-box;text-align:center;font-size: 11px;">搴忓彿</td>
-            <td rowspan="2" style="box-sizing: border-box;text-align:center;font-size: 11px;">绠$悊缂栧彿</td>
-            <!-- 20220124 ljh SFDC-C4U3PH update colspan="6" -->
-            <td colspan="7" style="box-sizing: border-box;text-align:center;font-size: 11px;">鏄庣粏</td>
-        </tr>
-        <tr>
-            <!-- <td style="text-align:center;">搴忓彿</td>
-            <td style="text-align:center;">澶囧搧set鍨嬪彿</td>
-            <td style="text-align:center;">绠$悊缂栧彿</td>
-            <td style="text-align:center;">浜у搧鍨嬪彿</td>
-            <td style="text-align:center;">鏈鸿韩鍙�</td>
-            <td style="text-align:center;">闄勫睘鍝佹槑缁�</td> -->
-            <td style="box-sizing: border-box;text-align:center;font-size: 11px;">鏄庣粏鍨嬪彿</td>
-            <td style="box-sizing: border-box;text-align:center;font-size: 11px;" colspan="2">涓枃鍚嶇О</td>
-            <td style="box-sizing: border-box;text-align:center;font-size: 11px;">鏈鸿韩鍙�</td>
-            <td style="text-align:center;font-size: 11px;">鍥哄畾璧勪骇鍙�</td>
-            <td style="box-sizing: border-box;text-align:center;font-size: 11px;">璐т綅鍙�</td>
-            <!-- 20220124 ljh SFDC-C4U3PH add start -->
-            <td style="box-sizing: border-box;text-align:center;font-size: 11px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;澶囨敞&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
-            <!-- 20220124 ljh SFDC-C4U3PH add end -->
-            <!-- <td style="text-align:center;">浜岀淮鐮�</td> -->
-        </tr>
-        <apex:repeat value="{!record.lineList}" var="line">
-            <tr>
-                <td style="box-sizing: border-box;text-align:center;font-size: 10px;height:30px;padding: 0px;"><c:PDFWbr targetStr="{!line.index}" /></td>
-                <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;"><c:PDFWbr targetStr="{!line.dManagementnumber}" /></td>
-                <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;"><c:PDFWbr targetStr="{!line.dModelNo}" /></td>
-                <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;" colspan="2"><c:PDFWbr targetStr="{!line.dChinaName}" /></td>
-                <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;"><c:PDFWbr targetStr="{!line.dSerialNumber}" /></td>
-                <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;"><c:PDFWbr targetStr="{!line.dLoaner_asset_no}" /></td>
-                <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;"><c:PDFWbr targetStr="{!line.wh_location}" /></td>
-                <!-- 20220124 ljh SFDC-C4U3PH add start -->
-                <td style="box-sizing: border-box;text-align:left;font-size: 10px;padding: 0px;"><c:PDFWbr targetStr="" /></td>
-                <!-- {!line.Received_ng_detail} -->
-                <!-- 20220124 ljh SFDC-C4U3PH add end -->
-                <!-- <td style="text-align:center;font-size: 10px"><c:PDFWbr targetStr="{!line.dQRCode}" /></td> -->
-
-                <!-- <td style="text-align:left;font-size: 13px"><apex:outputText value="{!IF(pcnt < AllSum +1,pcnt,'')}" /></td> -->
-                <!-- <td style="text-align:left;font-size: 13px"><apex:outputText value="{!line.index}" /></td>
-                <td style="text-align:left;font-size: 13px"><apex:outputText value="{!line.setName}" /></td>
-                <td style="text-align:left;font-size: 13px"><apex:outputText value="{!line.name1}" /></td>
-                <td style="text-align:left;font-size: 13px"><apex:outputText value="{!line.LoanerCode}" /></td>
-                <td style="text-align:left;font-size: 13px"><apex:outputText value="{!line.serialNumber1}" /></td>
-                <td style="text-align:left;font-size: 13px"><apex:outputText value="{!line.AssetModelNo}" /></td> -->
-            </tr>
-            <apex:variable value="{!pcnt + 1}" var="pcnt" />
-        </apex:repeat> 
-    </table> 
-    <!-- 20211209 ljh SFDC-C923SR 鏉″舰鐮� -->
-    <img style="float:left;position:absolute;z-index: 99;" src="{!'/servlet/servlet.FileDownload?file=' + ApplyHeadShow.BRId__c}" />
-    <!-- 20211209 ljh SFDC-C923SR 鏉″舰鐮� -->
-     <div style="{position:absolute;width:100%;height:20px">&nbsp;</div>
-      <apex:outputPanel rendered="{!pNcnt < pageCnt}" layout="none">
-         <!--  <div style="{position:absolute;width:100%;height:30px">&nbsp;</div> 
-           <div style="{position:absolute;width:100%;height:30px">&nbsp;</div>--> 
-       <div style="page-break-after: always;"/>
-     </apex:outputPanel>
-    <apex:variable value="{!pNcnt+1}" var="pNcnt" />
-</apex:repeat>
-
-</apex:outputPanel>
-</body>
-</html>
+            function jsPdfDownload(){
+                let pdfName = "娴嬭瘯";
+                let id = "pdf-wrapper";
+                var target = document.getElementById(id);
+                target.style.background = "#FFFFFF";
+                if(pdfName==''||pdfName==undefined) pdfName= getNowFormatDate();
+        
+                html2canvas(target, {
+                    scale: 2,
+                    onrendered:function(canvas) {
+                        var contentWidth = canvas.width;
+                        var contentHeight = canvas.height;
+        
+                        //涓�椤祊df鏄剧ずhtml椤甸潰鐢熸垚鐨刢anvas楂樺害;
+                        var pageHeight = contentWidth / 592.28 * 841.89;
+                        //鏈敓鎴恜df鐨刪tml椤甸潰楂樺害
+                        var leftHeight = contentHeight;
+                        //椤甸潰鍋忕Щ
+                        var position = 0;
+                        //a4绾哥殑灏哄[595.28,841.89]锛宧tml椤甸潰鐢熸垚鐨刢anvas鍦╬df涓浘鐗囩殑瀹介珮
+                        var imgWidth = 565.28;//595.28//宸﹀彸杈硅窛20
+                        var imgHeight = 605.28/contentWidth * contentHeight;//宸﹀彸杈硅窛20
+        
+                        var pageData = canvas.toDataURL('image/jpeg', 1.0);
+        
+                        var pdf = new jsPDF('', 'pt', 'a4');
+        
+                        //鏈変袱涓珮搴﹂渶瑕佸尯鍒嗭紝涓�涓槸html椤甸潰鐨勫疄闄呴珮搴︼紝鍜岀敓鎴恜df鐨勯〉闈㈤珮搴�(841.89)
+                        //褰撳唴瀹规湭瓒呰繃pdf涓�椤垫樉绀虹殑鑼冨洿锛屾棤闇�鍒嗛〉
+                        if (leftHeight < pageHeight) {
+                            pdf.addImage(pageData, 'JPEG', 15, 0, imgWidth, imgHeight );//宸﹀彸杈硅窛7.5
+                        } else {
+                            while(leftHeight > 0) {
+                                pdf.addImage(pageData, 'JPEG', 15, position, imgWidth, imgHeight)//宸﹀彸杈硅窛7.5
+                                leftHeight -= pageHeight;
+                                position -= 841.89;
+                                //閬垮厤娣诲姞绌虹櫧椤�
+                                if(leftHeight > 0) {
+                                    pdf.addPage();
+                                }
+                            }
+                        }
+                        Fun(pdf);
+                    }
+                })
+            }
+            function Fun(pdf){
+                var iframe = document.createElement('iframe');
+                iframe.setAttribute('style', 'position:absolute;right:0; top:0; bottom:0; height:100%; width:100%');
+                document.body.appendChild(iframe);
+                iframe.src = pdf.output('datauristring');
+                for(let e of document.body.childNodes){
+                    if( e != iframe && e.style){
+                        e.style.display = 'none';
+                    }
+                }
+            }
+        </script>
+    </html>
 </apex:page>
\ No newline at end of file
diff --git a/force-app/main/default/pages/InsReportPDF.page b/force-app/main/default/pages/InsReportPDF.page
index 3dd8854..a58c973 100644
--- a/force-app/main/default/pages/InsReportPDF.page
+++ b/force-app/main/default/pages/InsReportPDF.page
@@ -1,4 +1,4 @@
-<apex:page controller="InsReportPDFController" showHeader="false" sidebar="false" renderAs="PDF" action="{!init}" applyHtmlTag="false">
+<apex:page controller="InsReportPDFController" showHeader="false" sidebar="false" action="{!init}" applyHtmlTag="false">
 <html>
 <apex:stylesheet value="{!URLFOR($Resource.BeforeOPDPDF)}"/>
 
@@ -14,18 +14,38 @@
             }
         }
         
-        table {border-collapse: collapse;}
+        table {border-collapse: collapse;border: 0px;}
         
         th {text-align: center;}
         th.border-thick-title { border-width: 1pt 0pt 1pt 0pt; border-style: solid; border-color: black; text-align: center;}
         td.middle {text-align: center;}
         td.topClear {border-top-color: white;}
+
+        /* 20220221 PI鏀归�� by 寰愪寒 start */
+        body{margin: 0 auto;
+        width: 780px;}
+        #title1{height: 30px;}
+        #title2{height: 80px;}
+        .dianjian td{border: 1px #000 solid}
+        /* 20220221 PI鏀归�� by 寰愪寒 end */
         </style>
+         <!-- 20220221 PI鏀归�� by 寰愪寒 start  -->
+         <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
+         <script src="../../soap/ajax/53.0/connection.js" type="text/javascript"></script>
+         <apex:stylesheet value="{!URLFOR($Resource.blockUIcss)}"/>
+         <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}"/>
+         <apex:includeScript value="{!URLFOR($Resource.PleaseWaitDialog)}"/>
+         <apex:includeScript value="{!URLFOR($Resource.jspdf)}"/>
+         <apex:includeScript value="{!URLFOR($Resource.html2canvas)}"/>
+ 
+         <!-- 20220221 PI鏀归�� by 寰愪寒 end  -->
         <script>
         </script>
     </head>
     
     <body style="font-family: Arial Unicode MS;">
+        <div id="pdf-wrapper">
+            <div id="title1"></div>
         <table border="0" style="width:100%;">
             <tr>
                 <!-- update by rentx 20210707 start -->
@@ -52,7 +72,7 @@
                     <td>鐐规浜�</td>
                 </tr>
                 <tr>
-                    <td width="70%">闄㈡柟璐熻矗浜� &nbsp;&nbsp;&nbsp;&nbsp;{!ir.Responsible_Person__c}</td>
+                    <td width="70%">闄㈡柟璐熻矗浜� &nbsp;&nbsp;&nbsp;&nbsp;<span id="Responsible_Person__c">{!ir.Responsible_Person__c}</span></td>
                     <td width="15%"><apex:outputField value="{!ir.Inspection_Date__c}" /></td>
                     <td width="15%">{!usr.Alias__c}</td>
                 </tr>
@@ -72,7 +92,7 @@
                     <td> 鏈鐐规瀵硅薄鏁� &nbsp;&nbsp;&nbsp;&nbsp; {!ir.Inspection_asset_number__c}</td>
                 </tr>
                 <tr>
-                    <td width="70%"> 闄㈡柟璐熻矗浜� &nbsp;&nbsp;&nbsp;&nbsp;{!ir.Responsible_Person__c}</td>
+                    <td width="70%"> 闄㈡柟璐熻矗浜� &nbsp;&nbsp;&nbsp;&nbsp;<span id="Responsible_Person__c">{!ir.Responsible_Person__c}</span></td>
                     <td > 鏈鐐规鏃ユ湡 &nbsp;&nbsp;&nbsp;&nbsp; <apex:outputField value="{!ir.Inspection_Date__c}" /></td>
                 </tr>
                 <tr>
@@ -82,7 +102,7 @@
             </apex:outputText>
         </table>
         <br/>
-        <table border="1" style="width:100%;">
+        <table class="dianjian" border="0" style="width:100%;border-collapse: collapse;border: 0px;">
             <!-- update by rentx 20210707 start -->
             <apex:outputText rendered="{!ir.Contract__c = null}">
                 <tr>
@@ -199,6 +219,101 @@
         <table border="0" width="100%">
             <tr><td style="text-align: right"><apex:image value="{!ir.SignUrl__c}" width="300px" height="150px" rendered="{!NOT(ISBLANK(ir.SignUrl__c))}" /></td></tr>
         </table>
+    </div>
     </body>
+    <!-- 20220221 PI鏀归�� by 寰愪寒 start  -->
+<script>
+    AWSService.sfSessionId = '{!GETSESSIONID()}';
+    var staticResources = JSON.parse('{!staticResource}');
+    function Fun(pdf){
+        var iframe = document.createElement('iframe');
+        iframe.setAttribute('style', 'position:absolute;right:0; top:0; bottom:0; height:100%; width:100%');
+        document.body.appendChild(iframe);
+        iframe.src = pdf.output('datauristring');
+        for(let e of document.body.childNodes){
+            if( e != iframe && e.style){
+                e.style.display = 'none';
+            }
+        }
+    }
+
+    let id = "pdf-wrapper";
+    var target = document.getElementById(id);
+    function jsPdfDownload(){
+        let pdfName = "娴嬭瘯";
+        let id = "pdf-wrapper";
+        var target = document.getElementById(id);
+        target.style.background = "#FFFFFF";
+        if(pdfName==''||pdfName==undefined) pdfName= getNowFormatDate();
+
+        html2canvas(target, {
+            scale: 2,
+            onrendered:function(canvas) {
+                let landscape = true;
+                let pw = 595.28;
+                let ph = 841.89;
+                const marginw = 40;
+
+                let orientation = '';
+                if (landscape) {
+                    let temp =ph;
+                    ph = pw;
+                    pw = temp;
+                    orientation = 'l';
+                }
+                
+                
+                var contentWidth = canvas.width;
+                var contentHeight = canvas.height;
+
+                //涓�椤祊df鏄剧ずhtml椤甸潰鐢熸垚鐨刢anvas楂樺害;
+                var pageHeight = contentWidth / pw * ph;
+                //鏈敓鎴恜df鐨刪tml椤甸潰楂樺害
+                var leftHeight = contentHeight;
+                //椤甸潰鍋忕Щ
+                var position = 0;
+                //a4绾哥殑灏哄[595.28,841.89]锛宧tml椤甸潰鐢熸垚鐨刢anvas鍦╬df涓浘鐗囩殑瀹介珮
+                var imgWidth = pw-2*marginw;//595.28//宸﹀彸杈硅窛20
+                var imgHeight = imgWidth/contentWidth * contentHeight;//宸﹀彸杈硅窛20
+
+                var pageData = canvas.toDataURL('image/jpeg', 1.0);
+
+                var pdf = new jsPDF(orientation, 'pt', 'a4');// 绗竴涓弬鏁板~瀛楁瘝l锛屾敞鎰忎笉鏄暟瀛�1锛屼负妯悜pdf
+
+                //鏈変袱涓珮搴﹂渶瑕佸尯鍒嗭紝涓�涓槸html椤甸潰鐨勫疄闄呴珮搴︼紝鍜岀敓鎴恜df鐨勯〉闈㈤珮搴�(841.89)
+                //褰撳唴瀹规湭瓒呰繃pdf涓�椤垫樉绀虹殑鑼冨洿锛屾棤闇�鍒嗛〉
+                if (leftHeight < pageHeight) {
+                    pdf.addImage(pageData, 'JPEG', marginw, 0, imgWidth, imgHeight );//宸﹀彸杈硅窛20
+                } else {
+                    while(leftHeight > 0) {
+                        pdf.addImage(pageData, 'JPEG', marginw, position, imgWidth, imgHeight)//宸﹀彸杈硅窛20
+                        leftHeight -= pageHeight;
+                        position -= ph;
+                        //閬垮厤娣诲姞绌虹櫧椤�
+                        if(leftHeight > 0) {
+                            pdf.addPage();
+                        }
+                    }
+                }
+                Fun(pdf);
+            }
+        })
+    }
+    
+    blockme();
+    document.body.onload = function(){
+        
+        AWSService.query(staticResources.queryUrl, '{!ir.AWS_Data_Id__c}', function(data){
+            unblockUI();
+            document.getElementById("Responsible_Person__c").innerHTML = data.object.responsiblePerson;
+            
+            setTimeout(() => {
+                jsPdfDownload(); 
+            }, 1500);
+        }, staticResources.token);
+        
+    }
+</script>
+<!-- 20220221 PI鏀归�� by 寰愪寒 end  -->
 </html>
 </apex:page>
\ No newline at end of file
diff --git a/force-app/main/default/pages/InstructReport.page b/force-app/main/default/pages/InstructReport.page
index 99d639a..706a682 100644
--- a/force-app/main/default/pages/InstructReport.page
+++ b/force-app/main/default/pages/InstructReport.page
@@ -6,14 +6,82 @@
     <apex:includeScript value="/soap/ajax/29.0/connection.js"/>
     <apex:includeScript value="/soap/ajax/29.0/apex.js"/>
     <!-- <apex:includeScript value="{!URLFOR($Resource.OpportunityPCLJs)}"/> -->
-
+    <!-- 20220222 PI鏀归�� by Bright--start -->
+    <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
+    <script src="../../soap/ajax/53.0/connection.js" type="text/javascript"></script>
+    <!-- 20220222 PI鏀归�� by Bright--end -->
+    
     <style type="text/css">
-
+        [aws-api] {
+            position: relative;
+        }
+        [aws-api] .decrypt{position: absolute;top: 0;left: 100%;display: none;text-align: left;
+            padding-left: 5px;}
+        [aws-api]:hover .decrypt{display: block;width: 100px}
     </style>
     <script type="text/javascript">
+        
         function init() {
-             
         }
+        // 20220222 PI鏀归�� by Bright--start
+        AWSService.sfSessionId = '{!GETSESSIONID()}';
+        var staticResource = JSON.parse('{!staticResource}');
+        var aws_data = {};
+
+        function Decrypt(dataIds){
+            let Foo = function(){
+                for (const id of dataIds) {
+                    if (aws_data.hasOwnProperty(id)) {
+                        let d = aws_data[id];
+                        let $e =j$("[aws-id='"+d.dataId+ "']");
+                        $e.find(".decrypt").html(d[$e.attr("aws-api")]);
+                    }
+                }
+            }
+            let ids = [];
+            for (const id of dataIds) {
+                if (!aws_data.hasOwnProperty(id)) {
+                    ids.push(id);
+                }
+            }
+            if (ids.length > 0) {
+                blockme();
+                AWSService.search(staticResource.searchUrl,JSON.stringify({
+                    "dataIds":ids
+                }),function(data){
+                    unblockUI();
+                    if(data.object && data.object.length > 0){
+                        
+                        for(let d of data.object){
+                            if(d.dataId){
+                                aws_data[d.dataId] = d;
+                            }
+                        }
+                        Foo();
+                    }
+                },staticResource.token);
+            }else{
+                Foo();
+            }
+        }
+
+        function DecryptAll(){
+            let dataIds = [];
+            j$("[aws-id]").each((i,e)=>{
+                let v = j$(e).attr('aws-id');
+                if (v) {
+                    dataIds.push(v);
+                }
+            });
+            Decrypt(dataIds);
+        }
+
+        j$(function(){
+            DecryptAll();
+            
+        })
+        // 20220222 PI鏀归�� by Bright--end
+
         function checkAll(checker) {
              var cnt = j$(escapeVfId('allPage:allForm:allBlock:'+checker.alt+':memberCnt')).val();
              for (var i = 0; i < cnt; i++) {
@@ -110,7 +178,12 @@
                         </apex:column>
                         <!-- 琚甫鏁欎汉 -->
                         <apex:column style="width: 2%">
-                        <apex:outputLink style="resize:vertical;width: 95%" id="Name" value="/{!checkedIS.CamMem.Contact_ID__c}" target="LINK_{!checkedIS.CamMem.Contact_ID__c}"><apex:outputField value="{!checkedIS.IS.Name}" /></apex:outputLink>
+                        <apex:outputLink html-aws-api="lastName" html-aws-id="{!checkedIS.IS.ContactID__r.AWS_Data_Id__c}" style="resize:vertical;width: 95%" id="Name" value="/{!checkedIS.CamMem.Contact_ID__c}" target="LINK_{!checkedIS.CamMem.Contact_ID__c}">
+                            <!-- 20220222 PI鏀归�� by Bright--start -->
+                            <span class="encrypt">{!checkedIS.IS.Name}</span>
+                            <span class="decrypt"></span>
+                            <!-- 20220222 PI鏀归�� by Bright--end -->
+                        </apex:outputLink>
                         </apex:column>
                         <!-- 瀹㈡埛鍚� -->
                         <!-- 澧炲姞鏃犳晥绉戝绾㈣壊鎻愰啋 绮剧悽鎶�鏈� wql 2021/02/04 start -->
@@ -203,7 +276,7 @@
                 <table style="width:100%;">
                     <tr>
                         <td>
-                            <apex:commandButton value="鍒锋柊閫変腑鐨勫弬浼氫汉鍛�"  action="{!exchangeInstructedstaff}" onclick="blockme();" oncomplete="unblockUI();" rerender="allPage:allForm:allBlock:InstructedStaff,allPage:allForm:allBlock:Campaign_members" />
+                            <apex:commandButton value="鍒锋柊閫変腑鐨勫弬浼氫汉鍛�"  action="{!exchangeInstructedstaff}" onclick="blockme();" oncomplete="unblockUI();DecryptAll();" rerender="allPage:allForm:allBlock:InstructedStaff,allPage:allForm:allBlock:Campaign_members" />
                         </td>
                     </tr>
                 </table>
@@ -237,7 +310,12 @@
                         </apex:column>
                         <apex:column style="width: 10%">
                         <!-- LJPH-BVNBMM 鏄剧ず褰撳墠鑱旂郴浜哄悕绉�- start -->
-                        <apex:outputLink style="resize:vertical;width: 95%" id="Name" value="/{!uncheckedIS.CamMem.Contact_ID__c}" target="LINK_{!uncheckedIS.CamMem.Contact_ID__c}"><apex:outputtext value="{!uncheckedIS.CamMem.ContactName__c}" /></apex:outputLink>
+                        <apex:outputLink html-aws-api="lastName" html-aws-id="{!uncheckedIS.CamMem.Contact_ID__r.AWS_Data_Id__c}" style="resize:vertical;width: 95%" id="Name" value="/{!uncheckedIS.CamMem.Contact_ID__c}" target="LINK_{!uncheckedIS.CamMem.Contact_ID__c}">
+                        <!-- 20220222 PI鏀归�� by Bright--start -->
+                        <span class="encrypt">{!uncheckedIS.CamMem.ContactName__c}</span>
+                        <span class="decrypt"></span>
+                        <!-- 20220222 PI鏀归�� by Bright--end -->
+                        </apex:outputLink>
                         </apex:column>
                         <!-- LJPH-BVNBMM end -->
                         <apex:column style="width: 10%">
diff --git a/force-app/main/default/pages/LeadIntention.page b/force-app/main/default/pages/LeadIntention.page
index 169cc8d..bdad545 100644
--- a/force-app/main/default/pages/LeadIntention.page
+++ b/force-app/main/default/pages/LeadIntention.page
@@ -1,162 +1,417 @@
 <apex:page controller="LeadIntentionController" showHeader="false" sidebar="false" id="allPage" action="{!init}">
-<head>
-<title>浼氳璇㈤棶鍗曠‘璁や竴瑙堣〃</title>
 
-<apex:stylesheet value="{!URLFOR($Resource.blockUIcss)}"/>
-<apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}"/>
-<apex:includeScript value="{!URLFOR($Resource.PleaseWaitDialog)}"/>
-<apex:includeScript value="{!URLFOR($Resource.OpportunityPCLJs)}"/>
+    <head>
+        <title>浼氳璇㈤棶鍗曠‘璁や竴瑙堣〃</title>
+        <!-- 2022/02/15 寮犲崕寤� dependency start -->
+        <apex:stylesheet value="{!URLFOR($Resource.blockUIcss)}"/>
+        <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
+        <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}"/>
+        <apex:includeScript value="{!URLFOR($Resource.PleaseWaitDialog)}"/>
+        <apex:includeScript value="{!URLFOR($Resource.OpportunityPCLJs)}" />
+        <!-- 2022/02/15 寮犲崕寤� dependency end -->
 
-<style>
-    td .dateFormat  {
-        display: none;
-    }
-    
-    div.inline { float:left; }
-    .clearBoth { clear:both; }
-div#out_Div {
-  position:relative;
-  overflow: hidden;
-  float:left;
-  width: 100px;
-}
-div#out_Div_L {
-  position:relative;
-  overflow: hidden;
-  float:left;
-  width: 1050px;
-}
-div#in_Div {
-  position:relative;
-  overflow: auto;
-  float:left;
-  width: 100px;
-  height: 100px;
-}
-div#in_Div_L {
-  position:relative;
-  overflow: hidden;
-  float:left;
-  width: 1050px;
-  height: 100px;
-}
+        <style>
+            td .dateFormat {
+                display: none;
+            }
 
-body .pbBody table.list tr.headerRow td {
-  text-align:center;font-weight:normal;
-  padding:0px 0px 0px 1px;
-}
-body .pbBody table.list tr.headerRow td.header1 {
-  text-align:center;font-weight:normal;
-  padding:0px 0px 0px 0px;
-}
-body .pbBody table.list tr.dataRow td {padding:0px 0px 0px 1px; border-width: 0px 0px 1px 0px; vertical-align: middle; word-break:break-all;}
-body .pbBody table.list tr.dataRow td.dataCellBorder  {
-  /* 銇勩倝銇亜銆佷娇銇c仸銇勩仾銇� */
-  padding:0px 0px 0px 1px; border-width: 0px 0px 1px 0px; vertical-align: middle; word-break:break-all;
-}
-body .pbBody table.list tr.dataRow td.dataCellBorder1 {
-  padding:0px 0px 0px 1px;
-  border-width: 0px 0px 1px 1px; vertical-align: middle; word-break:break-all;
-}
-@-moz-document url-prefix() {
-body .pbBody table.list tr.dataRow td.dataCellBorder1 {padding:0px 0px 0px 0px; border-width: 0px 0px 1px 1px; vertical-align: middle; word-break:break-all;}
-}
-table.list .col_Contract_NO {width:57px;}
-table.list .checkbox {width:30px;text-align:center;}
-table.list .col_HP_NAME {
-width:120px;
-}
-table.list .col_PCL_NAME {width:80px;}
-table.list .col_Agency1 {width:87px;}
-table.list .col_SalesDepartment {width:85px;}
-table.list .col_Province {width:20px;}
-table.list .col_Group {width:65px;}
-table.list .col_SalesIncharge {width:80px;}
-table.list .col_OrderNo {width:80px;}
-table.list .col_Status_1 {width:50px;}
-table.list .col_Status_2 {width:80px;}
-table.list .col_BookStock {width:50px;}
-table.list .col_OCM {width:80px;}
-table.list .col_DEPT {
-/*width:auto;*/
-width:230px;
-}
-table.list .col_Earch {
-/*width:auto;*/
-width:200px;
-}
-table.list .col_OpportunityCategory {width:50px;}
-table.list .col_QuotationCode {width:80px;}
-table.list .col_NOT_PaymentAmount {width:160px;text-align:right;}
-table.list .col_UnshippedAmount_wt {width:100px;text-align:left;}
-table.list .col_UnshippedAmount_bingo {width:216px;text-align:right;}
-table.list .col_UnshippedAmount_bingo1 {width:216px;text-align:center;}
-table.list .col_X5weeksAgo {width:80px;}
-table.list .col_X4weeksAgo {width:80px;}
-table.list .col_X3weeksAgo {width:80px;}
-table.list .col_X2weeksAgo {width:80px;}
-table.list .col_X1weeksAgo {width:80px;}
-table.list .col_CurrentStatus {width:87px;}
-table.list .col_OverviewStatus {width:80px;}
-table.list .col_EndUserContract {width:100px;}
-table.list .col_PaymentStatus {width:80px;}
-table.list .col_AssignmentStatus {width:80px;}
-table.list .col_DeliveryStatus {width:80px;}
-table.list .col_PacialShipment {width:50px;}
-table.list .col_SoLatestDeliveryDate {width:80px;}
-table.list .col_FirstDeliveryDate {width:80px;}
-table.list .col_CurrentShippingDate {width:80px;}
-table.list .col_EndUserContractSubmitDay {width:80px;}
-table.list .col_PaymentScheduledDate {width:80px;}
-table.list .col_PaymentAllScheduledDate {width:80px;}
-table.list .col_ShippingScheduledDate {width:80px;}
-table.list .col_MonthlyForecast {width:105px;}
-table.list .col_ForecastShipMonthlyMannual {width:75px;}
-table.list .col_FollowUpComment {width:100px;}
-table.list .col_FollowUpComment1 {width:100px;}
-table.list .col_ReasonNotCollectMoney {width:200px;}
-table.list .col_ReasonNotShip {width:200px;}
-table.list .col_ManagerFeedback {width:200px;}
-table.list .col_CreateActivity {width:80px;}
-table.list .col_CreateTask {width:80px;}
-table.list .col_Key_tipics {width:72px;}
-table.list .col_Update_situation {width:72px;}
-table.list .col_FirstApproveDate {width:72px;}
+            div.inline {
+                float: left;
+            }
 
-body .pbBody table.list tr.headerRow td.colViewing {
-  background-image:url('{!URLFOR($Resource.IconResizeMinus_5)}') ;
-  background-repeat:no-repeat;
-}
-body .pbBody table.list tr.headerRow td.colUnHideIcon {
-  background-image:url('{!URLFOR($Resource.IconResizePlus_5)}');
-  background-repeat:no-repeat;
-  width:7px;
-}
-body .pbBody table.list tr.headerRow td.col_Scroll {width:0px; padding:0px; border-width:0px;}
-body .pbBody table.list tr.dataRow td.col_Scroll {width:0px; padding:0px; border-width:0px;}
-</style>
-<script type="text/javascript">
+            .clearBoth {
+                clear: both;
+            }
 
-var heightAjustment = 120;
-var widthAjustment = 30;
-var keyArray = new Array({keyOfOpp:"id_Last_update_UnshippedAmount_without_tax", keyCol:"col_UnshippedAmount_wt"}
-                        ,{keyOfOpp:"id_Last_update_OverviewStatus", keyCol:"col_OverviewStatus"}
-                        ,{keyOfOpp:"id_Last_update_PaymentStatus", keyCol:"col_PaymentStatus"}
-                        ,{keyOfOpp:"id_Last_update_AssignmentStatus", keyCol:"col_AssignmentStatus"}
-                        ,{keyOfOpp:"id_Last_update_shipping_status", keyCol:"col_DeliveryStatus"}
-                        ,{keyOfOpp:"id_Last_update_EndUser_contract_submit_day", keyCol:"col_EndUserContractSubmitDay"}
-                        ,{keyOfOpp:"id_Last_update_Payment_Scheduled_Date", keyCol:"col_PaymentScheduledDate"}
-                        ,{keyOfOpp:"id_Last_update_Payment_All_Scheduled_Date", keyCol:"col_PaymentAllScheduledDate"}
-                        ,{keyOfOpp:"id_Last_update_forecast_shipping_date", keyCol:"col_ShippingScheduledDate"}
-                        ,{keyOfOpp:"id_Last_update_followup_situation", keyCol:"col_FollowUpComment"}
-                        ,{keyOfOpp:"id_Last_update_Reason_not_collect_money", keyCol:"col_ReasonNotCollectMoney"}
-                        ,{keyOfOpp:"id_Last_update_Reason_not_ship", keyCol:"col_ReasonNotShip"}
-                        ,{keyOfOpp:"id_Last_update_manager_feedback", keyCol:"col_ManagerFeedback"}
-                        );
-</script>
-</head>
-    <apex:form id="allForm">
+            div#out_Div {
+                position: relative;
+                overflow: hidden;
+                float: left;
+                width: 100px;
+            }
+
+            div#out_Div_L {
+                position: relative;
+                overflow: hidden;
+                float: left;
+                width: 1050px;
+            }
+
+            div#in_Div {
+                position: relative;
+                overflow: auto;
+                float: left;
+                width: 100px;
+                height: 100px;
+            }
+
+            div#in_Div_L {
+                position: relative;
+                overflow: hidden;
+                float: left;
+                width: 1050px;
+                height: 100px;
+            }
+
+            body .pbBody table.list tr.headerRow td {
+                text-align: center;
+                font-weight: normal;
+                padding: 0px 0px 0px 1px;
+            }
+
+            body .pbBody table.list tr.headerRow td.header1 {
+                text-align: center;
+                font-weight: normal;
+                padding: 0px 0px 0px 0px;
+            }
+
+            body .pbBody table.list tr.dataRow td {
+                padding: 0px 0px 0px 1px;
+                border-width: 0px 0px 1px 0px;
+                vertical-align: middle;
+                word-break: break-all;
+            }
+
+            body .pbBody table.list tr.dataRow td.dataCellBorder {
+                /* 銇勩倝銇亜銆佷娇銇c仸銇勩仾銇� */
+                padding: 0px 0px 0px 1px;
+                border-width: 0px 0px 1px 0px;
+                vertical-align: middle;
+                word-break: break-all;
+            }
+
+            body .pbBody table.list tr.dataRow td.dataCellBorder1 {
+                padding: 0px 0px 0px 1px;
+                border-width: 0px 0px 1px 1px;
+                vertical-align: middle;
+                word-break: break-all;
+            }
+
+            @-moz-document url-prefix() {
+                body .pbBody table.list tr.dataRow td.dataCellBorder1 {
+                    padding: 0px 0px 0px 0px;
+                    border-width: 0px 0px 1px 1px;
+                    vertical-align: middle;
+                    word-break: break-all;
+                }
+            }
+
+            table.list .col_Contract_NO {
+                width: 57px;
+            }
+
+            table.list .checkbox {
+                width: 30px;
+                text-align: center;
+            }
+
+            table.list .col_HP_NAME {
+                width: 120px;
+            }
+
+            table.list .col_PCL_NAME {
+                width: 80px;
+            }
+
+            table.list .col_Agency1 {
+                width: 87px;
+            }
+
+            table.list .col_SalesDepartment {
+                width: 85px;
+            }
+
+            table.list .col_Province {
+                width: 20px;
+            }
+
+            table.list .col_Group {
+                width: 65px;
+            }
+
+            table.list .col_SalesIncharge {
+                width: 80px;
+            }
+
+            table.list .col_OrderNo {
+                width: 80px;
+            }
+
+            table.list .col_Status_1 {
+                width: 50px;
+            }
+
+            table.list .col_Status_2 {
+                width: 80px;
+            }
+
+            table.list .col_BookStock {
+                width: 50px;
+            }
+
+            table.list .col_OCM {
+                width: 80px;
+            }
+
+            table.list .col_DEPT {
+                /*width:auto;*/
+                width: 230px;
+            }
+
+            table.list .col_Earch {
+                /*width:auto;*/
+                width: 200px;
+            }
+
+            table.list .col_OpportunityCategory {
+                width: 50px;
+            }
+
+            table.list .col_QuotationCode {
+                width: 80px;
+            }
+
+            table.list .col_NOT_PaymentAmount {
+                width: 160px;
+                text-align: right;
+            }
+
+            table.list .col_UnshippedAmount_wt {
+                width: 100px;
+                text-align: left;
+            }
+
+            table.list .col_UnshippedAmount_bingo {
+                width: 216px;
+                text-align: right;
+            }
+
+            table.list .col_UnshippedAmount_bingo1 {
+                width: 216px;
+                text-align: center;
+            }
+
+            table.list .col_X5weeksAgo {
+                width: 80px;
+            }
+
+            table.list .col_X4weeksAgo {
+                width: 80px;
+            }
+
+            table.list .col_X3weeksAgo {
+                width: 80px;
+            }
+
+            table.list .col_X2weeksAgo {
+                width: 80px;
+            }
+
+            table.list .col_X1weeksAgo {
+                width: 80px;
+            }
+
+            table.list .col_CurrentStatus {
+                width: 87px;
+            }
+
+            table.list .col_OverviewStatus {
+                width: 80px;
+            }
+
+            table.list .col_EndUserContract {
+                width: 100px;
+            }
+
+            table.list .col_PaymentStatus {
+                width: 80px;
+            }
+
+            table.list .col_AssignmentStatus {
+                width: 80px;
+            }
+
+            table.list .col_DeliveryStatus {
+                width: 80px;
+            }
+
+            table.list .col_PacialShipment {
+                width: 50px;
+            }
+
+            table.list .col_SoLatestDeliveryDate {
+                width: 80px;
+            }
+
+            table.list .col_FirstDeliveryDate {
+                width: 80px;
+            }
+
+            table.list .col_CurrentShippingDate {
+                width: 80px;
+            }
+
+            table.list .col_EndUserContractSubmitDay {
+                width: 80px;
+            }
+
+            table.list .col_PaymentScheduledDate {
+                width: 80px;
+            }
+
+            table.list .col_PaymentAllScheduledDate {
+                width: 80px;
+            }
+
+            table.list .col_ShippingScheduledDate {
+                width: 80px;
+            }
+
+            table.list .col_MonthlyForecast {
+                width: 105px;
+            }
+
+            table.list .col_ForecastShipMonthlyMannual {
+                width: 75px;
+            }
+
+            table.list .col_FollowUpComment {
+                width: 100px;
+            }
+
+            table.list .col_FollowUpComment1 {
+                width: 100px;
+            }
+
+            table.list .col_ReasonNotCollectMoney {
+                width: 200px;
+            }
+
+            table.list .col_ReasonNotShip {
+                width: 200px;
+            }
+
+            table.list .col_ManagerFeedback {
+                width: 200px;
+            }
+
+            table.list .col_CreateActivity {
+                width: 80px;
+            }
+
+            table.list .col_CreateTask {
+                width: 80px;
+            }
+
+            table.list .col_Key_tipics {
+                width: 72px;
+            }
+
+            table.list .col_Update_situation {
+                width: 72px;
+            }
+
+            table.list .col_FirstApproveDate {
+                width: 72px;
+            }
+
+            body .pbBody table.list tr.headerRow td.colViewing {
+                background-image:url('{!URLFOR($Resource.IconResizeMinus_5)}');
+                background-repeat: no-repeat;
+            }
+
+            body .pbBody table.list tr.headerRow td.colUnHideIcon {
+                background-image:url('{!URLFOR($Resource.IconResizePlus_5)}');
+                background-repeat: no-repeat;
+                width: 7px;
+            }
+
+            body .pbBody table.list tr.headerRow td.col_Scroll {
+                width: 0px;
+                padding: 0px;
+                border-width: 0px;
+            }
+
+            body .pbBody table.list tr.dataRow td.col_Scroll {
+                width: 0px;
+                padding: 0px;
+                border-width: 0px;
+            }
+        </style>
         
+        <script type="text/javascript">
+            //2022 02 25 寮犲崕寤� display PI Data start
+            var staticResource = JSON.parse('{!staticResource}');
+            var awsDataIds = JSON.parse('{!awsDataIds}');
+            var contact = {};
+            queryPIData();
+            
+            function queryPIData(){
+                blockme();
+                let searchCallBack = function searchCallBack(result){
+                    console.log('result = ' + JSON.stringify(result))
+                    let contacts = result.object;
+                    if(contacts == null){
+                        return;
+                    }
+                    let temp = {}
+                    temp.email = contacts.email;
+                    temp.phone = contacts.phone;
+                    if(contacts.lastName!=null){
+                        temp.lastName = contacts.lastName;
+                    }else{
+                        temp.lastName = '';
+                    }
+                    contact[contacts.dataId] = temp;
+                };
+                for(var i = 0;i < awsDataIds.length;i++){
+                    AWSService.query(staticResource.queryUrl,awsDataIds[i],searchCallBack,staticResource.token);
+                }
+                unblockUI();
+            }
+
+            function showPIDiv(awsDataId){
+                console.log('awsDataId Value:'+awsDataId);
+                let parentNode = document.getElementById(awsDataId);
+                let createDiv = document.createElement("div");  
+                createDiv.id = awsDataId+"_PI";  
+                let piInformation = 'eamil:'+contact[awsDataId].email +'\n' +'Phone:'+contact[awsDataId].phone+'\n' +'Name:'+contact[awsDataId].lastName
+                //let piInformation = 'Name:'+contact['943114607025717249'].lastName +'\n' +'Phone:'+contact['943114607025717249'].phone
+                createDiv.innerText = piInformation;
+                let x=window.event.x;
+                let y=window.event.y; 
+                createDiv.style.left=x;  
+                createDiv.style.top=y;  
+                createDiv.style.background="#dddddd";
+                createDiv.style.position = "absolute";
+                parentNode.appendChild(createDiv);  
+            }
+
+            function hidePIDiv(awsDataId){
+                document.getElementById(awsDataId+'_PI').remove();
+            }
+            //2022 02 25 寮犲崕寤� display PI Data end
+            
+            var heightAjustment = 120;
+            var widthAjustment = 30;
+            var keyArray = new Array({ keyOfOpp: "id_Last_update_UnshippedAmount_without_tax", keyCol: "col_UnshippedAmount_wt" }
+                , { keyOfOpp: "id_Last_update_OverviewStatus", keyCol: "col_OverviewStatus" }
+                , { keyOfOpp: "id_Last_update_PaymentStatus", keyCol: "col_PaymentStatus" }
+                , { keyOfOpp: "id_Last_update_AssignmentStatus", keyCol: "col_AssignmentStatus" }
+                , { keyOfOpp: "id_Last_update_shipping_status", keyCol: "col_DeliveryStatus" }
+                , { keyOfOpp: "id_Last_update_EndUser_contract_submit_day", keyCol: "col_EndUserContractSubmitDay" }
+                , { keyOfOpp: "id_Last_update_Payment_Scheduled_Date", keyCol: "col_PaymentScheduledDate" }
+                , { keyOfOpp: "id_Last_update_Payment_All_Scheduled_Date", keyCol: "col_PaymentAllScheduledDate" }
+                , { keyOfOpp: "id_Last_update_forecast_shipping_date", keyCol: "col_ShippingScheduledDate" }
+                , { keyOfOpp: "id_Last_update_followup_situation", keyCol: "col_FollowUpComment" }
+                , { keyOfOpp: "id_Last_update_Reason_not_collect_money", keyCol: "col_ReasonNotCollectMoney" }
+                , { keyOfOpp: "id_Last_update_Reason_not_ship", keyCol: "col_ReasonNotShip" }
+                , { keyOfOpp: "id_Last_update_manager_feedback", keyCol: "col_ManagerFeedback" }
+            );
+        </script>
+    </head>
+    <apex:form id="allForm">
+
         <!-- <apex:actionFunction name="saveAndSearch" action="{!save}" rerender="allPanel" oncomplete="unblockUI();">
             <apex:param name="firstParam" assignTo="{!saveType}" value="" />
         </apex:actionFunction> -->
@@ -166,8 +421,8 @@
             <apex:param name="thirdParam" assignTo="{!opp_ID}" value="" />
         </apex:actionFunction>
         <apex:actionFunction name="saveInquiryOpts" action="{!saveInquiryOpts}" rerender="allPanel" oncomplete="unblockUI();">
-    	<apex:param name="firstParam" assignTo="{!saveType}" value="" />
-        <apex:param name="secondParam" assignTo="{!batchReason}" value="" />
+            <apex:param name="firstParam" assignTo="{!saveType}" value="" />
+            <apex:param name="secondParam" assignTo="{!batchReason}" value="" />
         </apex:actionFunction>
         <!-- <apex:actionFunction name="saveAndSort" action="{!save}" rerender="allPanel" oncomplete="unblockUI();">
             <apex:param name="firstParam" assignTo="{!saveType}" value="" />
@@ -177,13 +432,13 @@
         <apex:actionFunction name="sortTable" action="{!sortTable}" rerender="allPanel" oncomplete="unblockUI();">
             <apex:param name="firstParam" assignTo="{!sortKey}" value="" />
         </apex:actionFunction>
-        
+
         <apex:outputPanel id="allPanel">
             <apex:pageBlock id="searchBlock" tabStyle="Report">
                 <table style="border-bottom-width: 0px; font-size:12px;">
                     <tr>
                         <td width="150px">
-                           <!--  <apex:commandButton action="{!save}" value="淇濆瓨" rerender="allPanel" onclick="blockme();" oncomplete="unblockUI();" style="height:30px;width:50px;"/>&nbsp;&nbsp; -->
+                            <!--  <apex:commandButton action="{!save}" value="淇濆瓨" rerender="allPanel" onclick="blockme();" oncomplete="unblockUI();" style="height:30px;width:50px;"/>&nbsp;&nbsp; -->
                             <apex:commandButton value="妫�绱�" onclick="searchOppJs();return false;" style="height:30px;width:70px;"/>
                         </td>
                         <td width="1000px">
@@ -193,12 +448,19 @@
                 </table>
                 <table style="border-bottom-width: 0px; font-size:12px;">
                     <tr>
-                        <td width="250px">绉戝&nbsp;<apex:inputText value="{!accSearch}" style="width:150px"/>銆�</td>
+                        <td width="250px">绉戝&nbsp;
+                            <apex:inputText value="{!accSearch}" style="width:150px" />銆�</td>
                         <td width="75px">璇㈤棶鍗曞悕绉�&nbsp;&nbsp;&nbsp;&nbsp;</td>
-                        <td width="150px"><span><apex:inputText value="{!ownerSearch}" style="width:100px;" /></span></td>
+                        <td width="150px">
+                            <span>
+                                <apex:inputText value="{!ownerSearch}" style="width:100px;" />
+                            </span>
+                        </td>
                         <td width="10px"></td>
                         <td width="10px"></td>
-                        <td>鏄剧ず銆�<apex:selectList id="limitNo" value="{!limits}" size="1" onchange="searchOppJs();return false;"><apex:selectOptions value="{!limitOpts}"/></apex:selectList>銆�鏉℃暟鎹�</td>
+                        <td>鏄剧ず
+                            <apex:selectList id="limitNo" value="{!limits}" size="1" onchange="searchOppJs();return false;">
+                                <apex:selectOptions value="{!limitOpts}" /></apex:selectList>銆�鏉℃暟鎹�</td>
                         <td width="10px"></td>
                         <!-- 鍏堥殣钘忔壒閲忓姛鑳� -->
                         <!-- <td>鍘熷洜閫夐」銆�&nbsp;<apex:selectList id="reasons" value="{!reasons}" size="1" onclick="setCheckValue();" ><apex:selectOptions value="{!reasonOpts}" /></apex:selectList>銆�</td>
@@ -212,37 +474,43 @@
                     <tr>
                         <td width="400px">
                             <font>鏁版嵁瀛楁</font>&nbsp;
-                            <apex:selectList value="{!text}" size="1" style="width:110px"><apex:selectOptions value="{!textOpts}"/></apex:selectList>銆�
-                            &nbsp;<apex:selectList value="{!condition}" size="1"><apex:selectOptions value="{!equalOpts}"/></apex:selectList>銆�
-                            &nbsp;<apex:inputText value="{!value}" style="width:100px"/>
+                            <apex:selectList value="{!text}" size="1" style="width:110px">
+                                <apex:selectOptions value="{!textOpts}" /></apex:selectList>銆� &nbsp;
+                            <apex:selectList value="{!condition}" size="1">
+                                <apex:selectOptions value="{!equalOpts}" /></apex:selectList>銆� &nbsp;
+                            <apex:inputText value="{!value}" style="width:100px" />
                         </td>
                         <td width="10px"></td>
                         <td width="400px">
                             <font>AND&nbsp;</font>&nbsp;
-                            <apex:selectList value="{!text2}" size="1" style="width:110px"><apex:selectOptions value="{!textOpts2}"/></apex:selectList>銆�
-                            &nbsp;<apex:selectList value="{!condition2}" size="1"><apex:selectOptions value="{!equalOpts2}"/></apex:selectList>銆�
-                            &nbsp;<apex:inputText value="{!value2}" style="width:100px"/>
+                            <apex:selectList value="{!text2}" size="1" style="width:110px">
+                                <apex:selectOptions value="{!textOpts2}" /></apex:selectList>銆� &nbsp;
+                            <apex:selectList value="{!condition2}" size="1">
+                                <apex:selectOptions value="{!equalOpts2}" /></apex:selectList>銆� &nbsp;
+                            <apex:inputText value="{!value2}" style="width:100px" />
                         </td>
                         <td width="10px"></td>
                         <td width="400px">
                             <font>AND&nbsp;</font>&nbsp;
-                            <apex:selectList value="{!text3}" size="1" style="width:110px"><apex:selectOptions value="{!textOpts3}"/></apex:selectList>銆�
-                            &nbsp;<apex:selectList value="{!condition3}" size="1"><apex:selectOptions value="{!equalOpts3}"/></apex:selectList>銆�
-                            &nbsp;<apex:inputText value="{!value3}" style="width:100px"/>
+                            <apex:selectList value="{!text3}" size="1" style="width:110px">
+                                <apex:selectOptions value="{!textOpts3}" /></apex:selectList>銆� &nbsp;
+                            <apex:selectList value="{!condition3}" size="1">
+                                <apex:selectOptions value="{!equalOpts3}" /></apex:selectList>銆� &nbsp;
+                            <apex:inputText value="{!value3}" style="width:100px" />
                         </td>
                         <td></td>
                     </tr>
                 </table>
             </apex:pageBlock>
-            
+
             <apex:pageBlock id="oppBlock" tabStyle="Report">
                 <apex:outputPanel >
-                    <apex:inputHidden id="oppCount" value="{!pclCount}"/>
+                    <apex:inputHidden id="oppCount" value="{!pclCount}" />
                     <div id="out_Div_L">
                         <table class="list" style="border-bottom-width: 0px; font-size:11px; border-spacing:0;" border="" id="tableHeader_L">
                             <tr class="headerRow" height="30px">
-                            	 <td class="checkbox">
-                                   <input type="checkbox" id="chk" onchange="updateCheckBox();" />
+                                <td class="checkbox">
+                                    <input type="checkbox" id="chk" onchange="updateCheckBox();" />
                                 </td>
                                 <td class="col_Contract_NO">
                                     <a href="#" onclick="sortTableJs('22');return false;" style="text-decoration: underline;">璇㈤棶鍗曞悕绉�</a>{!sortOrder[22]}
@@ -259,7 +527,7 @@
                                 <td class="col_UnshippedAmount_wt">
                                     浜у搧淇℃伅
                                 </td>
-                                
+
                                 <td class="col_EndUserContract">
                                     濮旀墭浜嬮」
                                 </td>
@@ -276,7 +544,7 @@
                     <div id="out_Div">
                         <table class="list" style="border-bottom-width: 0px; font-size:11px; border-spacing:0;width:707px;" border="" id="tableHeader">
                             <tr class="headerRow" height="30px">
-                            	<td class="col_NOT_PaymentAmount">
+                                <td class="col_NOT_PaymentAmount">
                                     <a href="#" onclick="sortTableJs('13');return false;" style="text-decoration: underline;">涓昏瀛︿細</a>{!sortOrder[13]}
                                 </td>
                                 <td class="col_DeliveryStatus">
@@ -302,59 +570,64 @@
                                     <a href="#" onclick="sortTableJs('15');return false;" style="text-decoration: underline;">濮旀墭浜嬮」璇︾粏</a>{!sortOrder[15]}
                                 </td>
                                 <td id="cell_Scroll" class="col_Scroll"></td>
-                                
-                               
+
+
                             </tr>
                         </table>
-                    </div> 
+                    </div>
                     <div style="clear:both;height:0px;"></div>
                     <div id="in_Div_L">
                         <table class="list" style="border-bottom-width: 0px; font-size:11px; border-spacing:0;" border="" id="tableData_L">
                             <apex:variable value="{!1}" var="cnt" />
                             <apex:repeat value="{!pclInfos}" var="or" id="oppTable_L">
-                                <tr class="dataRow {!IF(MOD(cnt, 2)==0, 'odd', 'even')} {!IF(cnt==1, 'first', '')}" onmouseover="if (window.hiOn){hiOn(this);} " onmouseout="if (window.hiOff){hiOff(this);} " onblur="if (window.hiOff){hiOff(this);}" onfocus="if (window.hiOn){hiOn(this);}">
-                                <td class="dataCellBorder1 checkbox">
-                                   <input type="checkbox" id="{!or.chk}" onchange="editCheckBox();"/>
-                                </td>
-                                    <td class="dataCellBorder1 col_Contract_NO">
-                                         <a href="https://ocsm.my.salesforce.com//{!or.rec.Id}"><apex:outputField id="Name" value="{!or.rec.Name}" /></a>
-                                         <apex:inputHidden id="Id" value="{!or.rec.Id}"/>
-                                         <apex:inputHidden id="Hospital_Name__c" value="{!or.rec.Hospital_Name__r.Name}"/>
-                                        <apex:inputHidden id="Hospital_ID__c" value="{!or.rec.Hospital_ID__c}"/>
-                                        <apex:inputHidden id="Contact_Id" value="{!or.rec.Contact_Id__c}"/>
+                                <tr class="dataRow {!IF(MOD(cnt, 2)==0, 'odd', 'even')} {!IF(cnt==1, 'first', '')}" onmouseover="if (window.hiOn){hiOn(this);} "
+                                    onmouseout="if (window.hiOff){hiOff(this);} " onblur="if (window.hiOff){hiOff(this);}" onfocus="if (window.hiOn){hiOn(this);}">
+                                    <td class="dataCellBorder1 checkbox">
+                                        <input type="checkbox" id="{!or.chk}" onchange="editCheckBox();" />
                                     </td>
-                                    
+                                    <td class="dataCellBorder1 col_Contract_NO" id="{!or.rec.AWS_Data_Id__c}" onmouseover="showPIDiv('{!or.rec.AWS_Data_Id__c}')" onmouseout="hidePIDiv('{!or.rec.AWS_Data_Id__c}')">
+                                        <a href="https://ocsm.my.salesforce.com//{!or.rec.Id}">
+                                            <apex:outputField id="Name" value="{!or.rec.Name}" />
+                                        </a>
+                                        <apex:inputHidden id="Id" value="{!or.rec.Id}" />
+                                        <apex:inputHidden id="Hospital_Name__c" value="{!or.rec.Hospital_Name__r.Name}" />
+                                        <apex:inputHidden id="Hospital_ID__c" value="{!or.rec.Hospital_ID__c}" />
+                                        <apex:inputHidden id="Contact_Id" value="{!or.rec.Contact_Id__c}" />
+                                    </td>
+
 
                                     <td class="dataCellBorder1 col_DEPT">
-                                        <apex:outputField id="Department_Class__c" value="{!or.rec.Department_Class__c}"/>
-                                        <apex:inputHidden id="Department_ID__c" value="{!or.rec.Department_ID__c}"/>
-                                   </td>
-                                   <td class="dataCellBorder1 col_CurrentStatus">
-                                        <apex:outputField id="Status__c" style="text-align:center;" value="{!or.rec.Status__c}"/>
+                                        <apex:outputField id="Department_Class__c" value="{!or.rec.Department_Class__c}" />
+                                        <apex:inputHidden id="Department_ID__c" value="{!or.rec.Department_ID__c}" />
                                     </td>
-                                    <td class="dataCellBorder1 col_UnshippedAmount_wt" id="{!cnt-1}:col_UnshippedAmount_wt" >
+                                    <td class="dataCellBorder1 col_CurrentStatus">
+                                        <apex:outputField id="Status__c" style="text-align:center;" value="{!or.rec.Status__c}" />
+                                    </td>
+                                    <td class="dataCellBorder1 col_UnshippedAmount_wt" id="{!cnt-1}:col_UnshippedAmount_wt">
                                         <apex:outputField value="{!or.rec.Product1__c}" id="company" />
                                     </td>
                                     <td class="dataCellBorder1 col_EndUserContract">
-                                    	<apex:outputField id="Request1__c" value="{!or.rec.Request1__c}"/>
-                                 	</td>
-                                    <td class="dataCellBorder1 col_Earch" >
-                                        <apex:inputField id="Opp_Name_Search__c" value="{!or.rec.Opp_Name_Search__c}"/>
-                                         <apex:inputHidden id="Opp_Name_Search_ID__c" value="{!or.rec.Opp_Name_Search_ID__c}"/>
+                                        <apex:outputField id="Request1__c" value="{!or.rec.Request1__c}" />
+                                    </td>
+                                    <td class="dataCellBorder1 col_Earch">
+                                        <apex:inputField id="Opp_Name_Search__c" value="{!or.rec.Opp_Name_Search__c}" />
+                                        <apex:inputHidden id="Opp_Name_Search_ID__c" value="{!or.rec.Opp_Name_Search_ID__c}" />
                                     </td>
                                     <td class="dataCellBorder1 col_UnshippedAmount_bingo1">
-                                    <span>
-                                    <apex:commandButton value="闇�瑕�" style="width: 40px;" onclick="openEdit('{!or.lineNo}');return false;" />
-                                    </span>
-                                    <span>
-                                    <apex:commandButton value="涓嶉渶瑕�" style="width: 50px;" onclick="updateStatus('{!or.rec.Id}','{!or.lineNo}');return false;" />
-                                    </span>
-                            		<span>
-                            	 
-                                    <apex:inputField id="Reasons_options__c"  value="{!or.rec.Reasons_options__c}" style="width: 90px;" onchange="setreasonFlg('{!or.lineNo}')" />
-                                	</span>                        
-                                 
-                            </td>
+                                        <span>
+                                            <apex:commandButton value="闇�瑕�" style="width: 40px;" onclick="openEdit('{!or.lineNo}');return false;" />
+                                        </span>
+                                        <span>
+                                            <apex:commandButton value="涓嶉渶瑕�" style="width: 50px;" onclick="updateStatus('{!or.rec.Id}','{!or.lineNo}');return false;"
+                                            />
+                                        </span>
+                                        <span>
+
+                                            <apex:inputField id="Reasons_options__c" value="{!or.rec.Reasons_options__c}" style="width: 90px;" onchange="setreasonFlg('{!or.lineNo}')"
+                                            />
+                                        </span>
+
+                                    </td>
                                 </tr>
                                 <apex:variable value="{!cnt + 1}" var="cnt" />
                             </apex:repeat>
@@ -364,332 +637,336 @@
                         <table class="list" style="border-bottom-width: 0px; font-size:11px; border-spacing:0;width:707px;" border="" id="tableData">
                             <apex:variable value="{!1}" var="cnt" />
                             <apex:repeat value="{!pclInfos}" var="or" id="oppTable">
-                                <tr class="dataRow {!IF(MOD(cnt, 2)==0, 'odd', 'even')} {!IF(cnt==1, 'first', '')}" onmouseover="if (window.hiOn){hiOn(this);} " onmouseout="if (window.hiOff){hiOff(this);} " onblur="if (window.hiOff){hiOff(this);}" onfocus="if (window.hiOn){hiOn(this);}">
-                                	
+                                <tr class="dataRow {!IF(MOD(cnt, 2)==0, 'odd', 'even')} {!IF(cnt==1, 'first', '')}" onmouseover="if (window.hiOn){hiOn(this);} "
+                                    onmouseout="if (window.hiOff){hiOff(this);} " onblur="if (window.hiOff){hiOff(this);}" onfocus="if (window.hiOn){hiOn(this);}">
+
                                     <td class="dataCellBorder1 col_NOT_PaymentAmount">
-                                        <apex:outputField id="Campaign__c" value="{!or.rec.Campaign__c}" style="width:90%;"/>
-                                        <apex:inputHidden id="Campaign_ID__c" value="{!or.rec.Campaign_ID__c}"/>
+                                        <apex:outputField id="Campaign__c" value="{!or.rec.Campaign__c}" style="width:90%;" />
+                                        <apex:inputHidden id="Campaign_ID__c" value="{!or.rec.Campaign_ID__c}" />
 
                                     </td>
+                                    <!-- <td class="dataCellBorder1 col_Name">
+                                        <apex:outputField id="Name" value="{!or.rec.Name}" style="width:90%;"/>
+                                    </td> -->
                                     <td class="dataCellBorder1 col_DeliveryStatus">
-                                        <apex:outputField id="Family_Name__c" value="{!or.rec.Family_Name__c}"/>
-                                        <apex:outputField id="Last_Name__c" value="{!or.rec.Last_Name__c}"/>
+                                        <!-- <apex:outputField id="Family_Name__c" value="{!or.rec.Family_Name__c}" /> -->
+                                        <apex:outputField id="Last_Name__c" value="{!or.rec.Last_Name__c}" />
                                     </td>
                                     <!-- <td class="dataCellBorder1 col_DeliveryStatus">
                                         <apex:outputField id="Phone__c" value="{!or.rec.Phone__c}"/>
                                     </td> -->
                                     <td class="dataCellBorder1 col_SoLatestDeliveryDate">
-                                        <apex:outputField id="Phone__c" value="{!or.rec.Phone__c}" style="width:90%;"/>
+                                        <apex:outputField id="Phone__c" value="{!or.rec.Phone__c}" style="width:90%;" />
                                     </td>
-                                    <td class="dataCellBorder1 col_ShippingScheduledDate"  style="padding:0;">
-                                        <apex:outputField value="{!or.rec.Email__c}" id="Email__c" style="width:90%;"/>
+                                    <td class="dataCellBorder1 col_ShippingScheduledDate" style="padding:0;">
+                                        <apex:outputField value="{!or.rec.Email__c}" id="Email__c" style="width:90%;" />
                                     </td>
                                     <td class="dataCellBorder1 col_Agency1">
-                                        <apex:outputField id="Cancel_Reason__c" value="{!or.rec.Cancel_Reason__c}" style="width:90%;"/>
+                                        <apex:outputField id="Cancel_Reason__c" value="{!or.rec.Cancel_Reason__c}" style="width:90%;" />
                                     </td>
-                                    
+
                                     <td class="dataCellBorder1 col_CreateActivity">
                                         <apex:outputField id="Opportunity_Division__c" value="{!or.rec.Opportunity_Division__c}" />
-                                    </td>                                
+                                    </td>
 
                                     <td class="dataCellBorder1 col_Province">
                                         <apex:outputField value="{!or.rec.Urgent__c}" id="Urgent__c" />
                                     </td>
-                            
-                                    
+
+
                                     <td class="dataCellBorder1 col_MonthlyForecast" id="{!cnt-1}:col_MonthlyForecast" style="padding:0;">
                                         <apex:outputField value="{!or.rec.Request_Detail__c}" id="Request_Detail__c" />
-                                        <apex:inputHidden id="Inquiry_No__c" value="{!or.rec.Inquiry_No__c}"/>
-                                        <apex:inputHidden id="LeadSource__c" value="{!or.rec.LeadSource__c}"/>
-                                       <!--  <apex:inputHidden id="Name" value="{!or.rec.Name}"/> -->
-                                        <apex:inputHidden id="Id" value="{!or.rec.Id}"/>
+                                        <apex:inputHidden id="Inquiry_No__c" value="{!or.rec.Inquiry_No__c}" />
+                                        <apex:inputHidden id="LeadSource__c" value="{!or.rec.LeadSource__c}" />
+                                        <!--  <apex:inputHidden id="Name" value="{!or.rec.Name}"/> -->
+                                        <apex:inputHidden id="Id" value="{!or.rec.Id}" />
                                     </td>
                                     <td id="cell_Scroll" class="col_Scroll">
-                                 <apex:inputHidden value="{!or.changeFlg}" id="changeFlg"/>
-                                 <apex:inputHidden value="{!or.reasonFlg}" id="reasonFlg"/>
-<script type="text/javascript">                                          
-//灏嗚闂崟涓婄殑鍊煎甫鍒� 鏂板缓鎰忓悜椤甸潰涓�                                   
-function openEdit(line) {
-	
-    //鍖婚櫌鍚�
-    var HospitalName = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:'+ (line) + ':Hospital_Name__c')).value();
+                                        <apex:inputHidden value="{!or.changeFlg}" id="changeFlg" />
+                                        <apex:inputHidden value="{!or.reasonFlg}" id="reasonFlg" />
+                                        <script type="text/javascript">                                          
+                                            //灏嗚闂崟涓婄殑鍊煎甫鍒� 鏂板缓鎰忓悜椤甸潰涓�                                   
+                                            function openEdit(line) {
 
-    var HospitalId = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:'+ (line) + ':Hospital_ID__c')).value();
-    //鎴樼暐绉戝鍒嗙被
-    var DepartmentClass = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:'+ (line) + ':Department_Class__c')).text();
+                                                //鍖婚櫌鍚�
+                                                var HospitalName = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:' + (line) + ':Hospital_Name__c')).value();
 
-    var DepartmentID = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:'+ (line) + ':Department_ID__c')).value();
+                                                var HospitalId = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:' + (line) + ':Hospital_ID__c')).value();
+                                                //鎴樼暐绉戝鍒嗙被
+                                                var DepartmentClass = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:' + (line) + ':Department_Class__c')).text();
 
-    //宸叉湁璇环鍚嶇О
-    var OppNameSearch = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:'+ (line) + ':Opp_Name_Search__c')).text();
+                                                var DepartmentID = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:' + (line) + ':Department_ID__c')).value();
 
-    var OppNameSearchID = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:'+ (line) + ':Opp_Name_Search_ID__c')).value();
+                                                //宸叉湁璇环鍚嶇О
+                                                var OppNameSearch = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:' + (line) + ':Opp_Name_Search__c')).text();
 
-    //涓昏瀛︿細
-    var Campaign = j$(escapeVfId('allPage:allForm:oppBlock:oppTable:'+ (line) + ':Campaign__c')).text();
+                                                var OppNameSearchID = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:' + (line) + ':Opp_Name_Search_ID__c')).value();
 
-    var CampaignId = j$(escapeVfId('allPage:allForm:oppBlock:oppTable:'+ (line) + ':Campaign_ID__c')).value();
-    //璇㈤棶鍗曞悕绉�
-    var Name = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:'+ (line) + ':Name')).value();
+                                                //涓昏瀛︿細
+                                                var Campaign = j$(escapeVfId('allPage:allForm:oppBlock:oppTable:' + (line) + ':Campaign__c')).text();
 
-    var Id = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:'+ (line) + ':Id')).value();
-    
-    //瀹㈡埛濮撳悕
-    var contactName = Name;
-    var contactId = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:'+ (line) + ':Contact_Id')).value();
+                                                var CampaignId = j$(escapeVfId('allPage:allForm:oppBlock:oppTable:' + (line) + ':Campaign_ID__c')).value();
+                                                //璇㈤棶鍗曞悕绉�
+                                                var Name = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:' + (line) + ':Name')).value();
 
-    // //璇㈤棶鍗曠紪鐮�
-    // var InquiryNo = j$(escapeVfId('allPage:allForm:oppBlock:oppTable:'+ (line) + ':Inquiry_No__c')).value();
-    //鍙栨秷鏂囨湰
-	var CancelReason =j$(escapeVfId('allPage:allForm:oppBlock:oppTable:'+ (line) + ':Cancel_Reason__c')).text();
+                                                var Id = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:' + (line) + ':Id')).value();
 
-	//濮旀墭浜嬮」璇︾粏
-	var RequestDetail =j$(escapeVfId('allPage:allForm:oppBlock:oppTable:'+ (line) + ':Request_Detail__c')).text();
+                                                //瀹㈡埛濮撳悕
+                                                var contactName = Name;
+                                                var contactId = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:' + (line) + ':Contact_Id')).value();
 
-	//璇㈤棶鍗曠姸鎬�
-	var Status = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:'+ (line) + ':Status__c')).text();
-	//鍏徃
-    var company = HospitalName;
+                                                // //璇㈤棶鍗曠紪鐮�
+                                                // var InquiryNo = j$(escapeVfId('allPage:allForm:oppBlock:oppTable:'+ (line) + ':Inquiry_No__c')).value();
+                                                //鍙栨秷鏂囨湰
+                                                var CancelReason = j$(escapeVfId('allPage:allForm:oppBlock:oppTable:' + (line) + ':Cancel_Reason__c')).text();
 
-    //鐢佃瘽
-    var Phone =j$(escapeVfId('allPage:allForm:oppBlock:oppTable:'+ (line) + ':Phone__c')).value();
-    //閭欢
-    var Email =j$(escapeVfId('allPage:allForm:oppBlock:oppTable:'+ (line) + ':Email__c')).value();
-    //濮�
-    var FamilyName=j$(escapeVfId('allPage:allForm:oppBlock:oppTable:'+ (line) + ':Family_Name__c')).text();
-    //鍚�
-    var LastName =j$(escapeVfId('allPage:allForm:oppBlock:oppTable:'+ (line) + ':Last_Name__c')).text();
-    //璇㈤棶鍗曟潵婧�
-    var LeadSource =j$(escapeVfId('allPage:allForm:oppBlock:oppTable:'+ (line) + ':LeadSource__c')).value();
-    //鎰忓悜鍖哄垎
-    var OpportunityDivision =j$(escapeVfId('allPage:allForm:oppBlock:oppTable:'+ (line) + ':Opportunity_Division__c')).text();
-    //濮旀墭浜嬮」
-    var Request =j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:'+ (line) + ':Request1__c')).text();
+                                                //濮旀墭浜嬮」璇︾粏
+                                                var RequestDetail = j$(escapeVfId('allPage:allForm:oppBlock:oppTable:' + (line) + ':Request_Detail__c')).text();
 
-    //绱ф��
-    var Urgent ='';
-    var title2 =j$(escapeVfId('allPage:allForm:oppBlock:oppTable:'+ (line) + ':Urgent__c')).find('img').attr("title");
-    if(title2 =='閫夊彇鐨�'){
-    	Urgent = '1';
-    }else{
-    	Urgent = '0';
-    }
+                                                //璇㈤棶鍗曠姸鎬�
+                                                var Status = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:' + (line) + ':Status__c')).text();
+                                                //鍏徃
+                                                var company = HospitalName;
 
-    // var Urgent =j$(escapeVfId('allPage:allForm:oppBlock:oppTable:'+ (line) + ':Urgent__c')).value();
-        //JZ-20191015 浼氳璇㈤棶鍗曠‘璁や竴瑙堣〃鐐瑰嚮闇�瑕佸甫鍊煎埌鏂板缓鎰忓悜椤甸潰
+                                                //鐢佃瘽
+                                                var Phone = j$(escapeVfId('allPage:allForm:oppBlock:oppTable:' + (line) + ':Phone__c')).value();
+                                                //閭欢
+                                                var Email = j$(escapeVfId('allPage:allForm:oppBlock:oppTable:' + (line) + ':Email__c')).value();
+                                                //濮�
+                                                var FamilyName = j$(escapeVfId('allPage:allForm:oppBlock:oppTable:' + (line) + ':Family_Name__c')).text();
+                                                //鍚�
+                                                var LastName = j$(escapeVfId('allPage:allForm:oppBlock:oppTable:' + (line) + ':Last_Name__c')).text();
+                                                //璇㈤棶鍗曟潵婧�
+                                                var LeadSource = j$(escapeVfId('allPage:allForm:oppBlock:oppTable:' + (line) + ':LeadSource__c')).value();
+                                                //鎰忓悜鍖哄垎
+                                                var OpportunityDivision = j$(escapeVfId('allPage:allForm:oppBlock:oppTable:' + (line) + ':Opportunity_Division__c')).text();
+                                                //濮旀墭浜嬮」
+                                                var Request = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:' + (line) + ':Request1__c')).text();
 
-         var urlStr =       '/00Q/e?RecordType=01210000000QiRa&ent=Lead'+
-                            '&CF00N10000006ps6f='+encodeURI(contactName)+
-							'&CF00N10000006ps6f_lkid='+encodeURI(contactId)+
-							'&CF00N10000002CvC5='+encodeURI(HospitalName)+
-							'&CF00N10000002CvC5_lkid='+encodeURI(HospitalId)+
-							'&CF00N10000006qNtt='+encodeURI(DepartmentClass)+
-							'&CF00N10000006qNtt_lkid='+encodeURI(DepartmentID)+
-							'&CF00N10000006qNty='+encodeURI(OppNameSearch)+
-							'&CF00N10000006qNty_lkid='+encodeURI(OppNameSearchID)+
-							'&CF00N10000004oN28='+encodeURI(Campaign)+
-							'&CF00N10000004oN28_lkid='+encodeURI(CampaignId)+
-							'&CF00N1000000962np='+encodeURI(Name)+
-							'&CF00N1000000962np_lkid='+encodeURI(Id)+
-							'&00N10000006qBYk='+encodeURI(CancelReason)+
-							'&00N10000002CvBM='+encodeURI(RequestDetail)+
-							'&lea13='+encodeURI(Status)+
-							'&lea3='+encodeURI(company)+
-							'&lea8='+encodeURI(Phone.trim())+
-							'&lea11='+encodeURI(Email.trim())+
-							'&name_lastlea2='+encodeURI(FamilyName)+
-							'&name_firstlea2='+encodeURI(LastName)+
-							'&lea5='+encodeURI(LeadSource)+
-							'&00N10000002CvBR='+encodeURI(Request)+
-                            '&00N10000002CvBC='+encodeURI(OpportunityDivision)+
-							'&00N10000002CvB7='+encodeURI(Urgent)
-                            ;
-        //JZ-20191015 浼氳璇㈤棶鍗曠‘璁や竴瑙堣〃鐐瑰嚮闇�瑕佸甫鍊煎埌鏂板缓鎰忓悜椤甸潰 END
+                                                //绱ф��
+                                                var Urgent = '';
+                                                var title2 = j$(escapeVfId('allPage:allForm:oppBlock:oppTable:' + (line) + ':Urgent__c')).find('img').attr("title");
+                                                if (title2 == '閫夊彇鐨�') {
+                                                    Urgent = '1';
+                                                } else {
+                                                    Urgent = '0';
+                                                }
 
-        window.open(urlStr);
-    
-}
-function setreasonFlg(line){
-	document.getElementById('allPage:allForm:oppBlock:oppTable:' + line + ':reasonFlg').value = 1;
-    var reason = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:'+line+':Reasons_options__c')).value();
-    var Opp_Name_Search = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:'+line+':Opp_Name_Search__c')).value();
+                                                // var Urgent =j$(escapeVfId('allPage:allForm:oppBlock:oppTable:'+ (line) + ':Urgent__c')).value();
+                                                //JZ-20191015 浼氳璇㈤棶鍗曠‘璁や竴瑙堣〃鐐瑰嚮闇�瑕佸甫鍊煎埌鏂板缓鎰忓悜椤甸潰
 
-    
-    if(Opp_Name_Search == ''){
-        if (reason == '宸茬粡鏈夎浠�') {
-            alert('璇锋偍濉啓宸叉湁璇环鍚嶇О鍚�,鍐嶇偣鍑讳笉闇�瑕佹寜閽繘琛屾洿鏂帮紒');
-             j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:'+line+':Opp_Name_Search__c_lkwgt')).show();
-             j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:'+line+':Opp_Name_Search__c')).attr('disabled',false);
-        }else{
-             j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:'+line+':Opp_Name_Search__c_lkwgt')).hide();
-             j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:'+line+':Opp_Name_Search__c')).attr('disabled',true);
-        }
-       
-    }
-}
-//鍏ㄩ�夋垨澶氶�夋椂灏嗚闂崟鐘舵�佹敼涓轰笉瑕� 锛堢偣鍑婚〉闈㈡渶涓婃柟鐨勪笉闇�瑕佹寜閽級
-function changeStatus(){
-	var cnt = document.getElementById('allPage:allForm:oppBlock:oppCount').value;
-	var arr = [];//灏嗗師鍥犲拰鐘舵�� 鍏ㄩ儴閬嶅巻鏀惧埌涓�涓暟缁勪腑
-	for(var i=0 ;i<cnt;i++){
-		if (j$(escapeVfId('chk'+i)).attr('checked')) {
-			var reason =j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:'+i+':Reasons_options__c')).value();
-			var status = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:'+i+':Status__c')).value();
-			arr.push(reason);
-			arr.push(status);
-		}
-	}
-	//瀹氫箟涓�涓姸鎬佺敤浜庡垽鏂� 鍘熷洜鏄惁鏈変负绌烘垨鑰� 璇㈤棶鍗曠姸鎬佹槸鍚︽湁涓嶈
-	var statusFlg = 0;
-	//褰撻〉闈㈡病鏈夊嬀閫夋暟鎹椂
-	if(arr.length == 0){
-		statusFlg =3;
-	}
-	for(var j=0;j<arr.length;j++){
+                                                var urlStr = '/00Q/e?RecordType=01210000000QiRa&ent=Lead' +
+                                                    '&CF00N10000006ps6f=' + encodeURI(contactName) +
+                                                    '&CF00N10000006ps6f_lkid=' + encodeURI(contactId) +
+                                                    '&CF00N10000002CvC5=' + encodeURI(HospitalName) +
+                                                    '&CF00N10000002CvC5_lkid=' + encodeURI(HospitalId) +
+                                                    '&CF00N10000006qNtt=' + encodeURI(DepartmentClass) +
+                                                    '&CF00N10000006qNtt_lkid=' + encodeURI(DepartmentID) +
+                                                    '&CF00N10000006qNty=' + encodeURI(OppNameSearch) +
+                                                    '&CF00N10000006qNty_lkid=' + encodeURI(OppNameSearchID) +
+                                                    '&CF00N10000004oN28=' + encodeURI(Campaign) +
+                                                    '&CF00N10000004oN28_lkid=' + encodeURI(CampaignId) +
+                                                    '&CF00N1000000962np=' + encodeURI(Name) +
+                                                    '&CF00N1000000962np_lkid=' + encodeURI(Id) +
+                                                    '&00N10000006qBYk=' + encodeURI(CancelReason) +
+                                                    '&00N10000002CvBM=' + encodeURI(RequestDetail) +
+                                                    '&lea13=' + encodeURI(Status) +
+                                                    '&lea3=' + encodeURI(company) +
+                                                    '&lea8=' + encodeURI(Phone.trim()) +
+                                                    '&lea11=' + encodeURI(Email.trim()) +
+                                                    '&name_lastlea2=' + encodeURI(FamilyName) +
+                                                    '&name_firstlea2=' + encodeURI(LastName) +
+                                                    '&lea5=' + encodeURI(LeadSource) +
+                                                    '&00N10000002CvBR=' + encodeURI(Request) +
+                                                    '&00N10000002CvBC=' + encodeURI(OpportunityDivision) +
+                                                    '&00N10000002CvB7=' + encodeURI(Urgent)
+                                                    ;
+                                                //JZ-20191015 浼氳璇㈤棶鍗曠‘璁や竴瑙堣〃鐐瑰嚮闇�瑕佸甫鍊煎埌鏂板缓鎰忓悜椤甸潰 END
 
-		if(arr[j] == '涓嶉渶瑕�'){
-			statusFlg =1;
-		}
-		if(!arr[j]){
-			statusFlg =2;
-		}
-	}
-//鏍规嵁鐘舵�佺殑涓嶅悓鍖哄垎鎵撳嵃鐨勫唴瀹� 鎴栬�� 瑕佹墽琛岀殑鏇存柊
-    if(statusFlg == 0){
-		var count = document.getElementById('allPage:allForm:oppBlock:oppCount').value;
-		for(var y=0 ;y<count;y++){
-			if (j$(escapeVfId('chk'+y)).attr('checked')) {
-				var inquiryformId =  j$(escapeVfId('allPage:allForm:oppBlock:oppTable:'+y+ ':Id')).value();
-				setreasonFlg(y);
-			}
-        }
-        var batchReason =j$(escapeVfId('allPage:allForm:searchBlock:reasons')).value();
-        saveInquiryOpts('',batchReason);
-	}else if(statusFlg == 1){
-			alert('鎮ㄥ嬀閫夌殑鏁版嵁涓湁璇㈤棶鍗曠姸鎬佷负鈥樹笉瑕佲�欑姸鎬�,璇锋偍鍕炬帀鍚庡啀杩涜鎵归噺涓嶉渶瑕併��');
-	}else if(statusFlg == 2){
-			alert('鎮ㄥ嬀閫夌殑鏁版嵁涓瓨鍦ㄦ病鏈夐�夋嫨鍘熷洜閫夐」鐨勬暟鎹�,璇锋偍閫夋嫨鍘熷洜閫夐」淇濆瓨鍚庡啀鎿嶄綔銆�');
-    }else if(statusFlg == 3){
-    		alert('璇锋偍鍏堝嬀閫夎鎵归噺淇敼鐨勬暟鎹紒');
-    }
+                                                window.open(urlStr);
+
+                                            }
+                                            function setreasonFlg(line) {
+                                                document.getElementById('allPage:allForm:oppBlock:oppTable:' + line + ':reasonFlg').value = 1;
+                                                var reason = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:' + line + ':Reasons_options__c')).value();
+                                                var Opp_Name_Search = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:' + line + ':Opp_Name_Search__c')).value();
 
 
-}
-//鍗曢�夋椂 灏嗚闂崟鐘舵�佹敼涓轰笉瑕� 锛堢偣鍑婚〉闈able涓婄殑涓嶉渶瑕佹寜閽級
-function updateStatus(id,lineNo) {
-	var inquiryformId = id;
-	//浼犲叆 id鍜屽師鍥犻�夐」涓や釜鍙傛暟  
-    var reason = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:'+lineNo+':Reasons_options__c')).value();
-    var opp_Name_Search = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:'+lineNo+':Opp_Name_Search__c')).value();
-    var opp_ID =j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:'+lineNo+':Opp_Name_Search__c_lkid')).value();
-	 if(!reason){
-		alert('璇锋偍鍏堥�夋嫨鍘熷洜閫夐」锛屽啀鐐瑰嚮鎸夐挳銆�');
-        return;
-	}else if(reason == '宸茬粡鏈夎浠�' && opp_Name_Search ==''){
-        alert('璇锋偍濉啓宸叉湁璇环鍚嶇О鍚�,鍐嶇偣鍑讳笉闇�瑕佹寜閽繘琛屾洿鏂帮紒');
-        return;
-    }else{
-	//2.淇敼璇㈤棶鍗曠姸鎬佷负鍏抽棴
-        saveInquiryform(inquiryformId,reason,opp_ID);
-     //鍒锋柊椤甸潰
-     // location.replace(location.href);
-	}
-    
-}
+                                                if (Opp_Name_Search == '') {
+                                                    if (reason == '宸茬粡鏈夎浠�') {
+                                                        alert('璇锋偍濉啓宸叉湁璇环鍚嶇О鍚�,鍐嶇偣鍑讳笉闇�瑕佹寜閽繘琛屾洿鏂帮紒');
+                                                        j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:' + line + ':Opp_Name_Search__c_lkwgt')).show();
+                                                        j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:' + line + ':Opp_Name_Search__c')).attr('disabled', false);
+                                                    } else {
+                                                        j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:' + line + ':Opp_Name_Search__c_lkwgt')).hide();
+                                                        j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:' + line + ':Opp_Name_Search__c')).attr('disabled', true);
+                                                    }
 
-//鍏ㄩ�� checkbox
-function updateCheckBox(){
-	var limit = j$(escapeVfId('allPage:allForm:searchBlock:limitNo')).value();
-	var cnt =document.getElementById('allPage:allForm:oppBlock:oppCount').value;
-	if(j$(escapeVfId('chk')).attr('checked')){
-		if(cnt >limit){
-			var limitno = limit;
-			for(var i=0;i<limitno;i++){
+                                                }
+                                            }
+                                            //鍏ㄩ�夋垨澶氶�夋椂灏嗚闂崟鐘舵�佹敼涓轰笉瑕� 锛堢偣鍑婚〉闈㈡渶涓婃柟鐨勪笉闇�瑕佹寜閽級
+                                            function changeStatus() {
+                                                var cnt = document.getElementById('allPage:allForm:oppBlock:oppCount').value;
+                                                var arr = [];//灏嗗師鍥犲拰鐘舵�� 鍏ㄩ儴閬嶅巻鏀惧埌涓�涓暟缁勪腑
+                                                for (var i = 0; i < cnt; i++) {
+                                                    if (j$(escapeVfId('chk' + i)).attr('checked')) {
+                                                        var reason = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:' + i + ':Reasons_options__c')).value();
+                                                        var status = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:' + i + ':Status__c')).value();
+                                                        arr.push(reason);
+                                                        arr.push(status);
+                                                    }
+                                                }
+                                                //瀹氫箟涓�涓姸鎬佺敤浜庡垽鏂� 鍘熷洜鏄惁鏈変负绌烘垨鑰� 璇㈤棶鍗曠姸鎬佹槸鍚︽湁涓嶈
+                                                var statusFlg = 0;
+                                                //褰撻〉闈㈡病鏈夊嬀閫夋暟鎹椂
+                                                if (arr.length == 0) {
+                                                    statusFlg = 3;
+                                                }
+                                                for (var j = 0; j < arr.length; j++) {
 
-				
-				j$(escapeVfId('chk'+i)).attr('checked',true);
-			}
-		}else{
-			var cntnumber = cnt;
-			for(var j =0 ;j<cntnumber;j++){
-			
+                                                    if (arr[j] == '涓嶉渶瑕�') {
+                                                        statusFlg = 1;
+                                                    }
+                                                    if (!arr[j]) {
+                                                        statusFlg = 2;
+                                                    }
+                                                }
+                                                //鏍规嵁鐘舵�佺殑涓嶅悓鍖哄垎鎵撳嵃鐨勫唴瀹� 鎴栬�� 瑕佹墽琛岀殑鏇存柊
+                                                if (statusFlg == 0) {
+                                                    var count = document.getElementById('allPage:allForm:oppBlock:oppCount').value;
+                                                    for (var y = 0; y < count; y++) {
+                                                        if (j$(escapeVfId('chk' + y)).attr('checked')) {
+                                                            var inquiryformId = j$(escapeVfId('allPage:allForm:oppBlock:oppTable:' + y + ':Id')).value();
+                                                            setreasonFlg(y);
+                                                        }
+                                                    }
+                                                    var batchReason = j$(escapeVfId('allPage:allForm:searchBlock:reasons')).value();
+                                                    saveInquiryOpts('', batchReason);
+                                                } else if (statusFlg == 1) {
+                                                    alert('鎮ㄥ嬀閫夌殑鏁版嵁涓湁璇㈤棶鍗曠姸鎬佷负鈥樹笉瑕佲�欑姸鎬�,璇锋偍鍕炬帀鍚庡啀杩涜鎵归噺涓嶉渶瑕併��');
+                                                } else if (statusFlg == 2) {
+                                                    alert('鎮ㄥ嬀閫夌殑鏁版嵁涓瓨鍦ㄦ病鏈夐�夋嫨鍘熷洜閫夐」鐨勬暟鎹�,璇锋偍閫夋嫨鍘熷洜閫夐」淇濆瓨鍚庡啀鎿嶄綔銆�');
+                                                } else if (statusFlg == 3) {
+                                                    alert('璇锋偍鍏堝嬀閫夎鎵归噺淇敼鐨勬暟鎹紒');
+                                                }
 
-				j$(escapeVfId('chk'+j)).attr('checked',true);
-			}
-		}
-	}else{
-		if(cnt >limit){
-			var limitno = limit;
-			for(var i=0;i<limitno;i++){
-				j$(escapeVfId('chk'+i)).attr('checked',false);
-			}
-		}else{
-			var cntnumber = cnt;
-			for(var j =0 ;j<cntnumber;j++){
-				j$(escapeVfId('chk'+j)).attr('checked',false);
-			}
-		}
-	}
-}
-//褰撻�夋嫨鍏ㄩ�夊悗 鍙栨秷鍕炬帀鍏朵腑涓�涓垨鑰呭涓椂 鍕炬帀鍏ㄩ��
-function editCheckBox (){
-    var limit = j$(escapeVfId('allPage:allForm:searchBlock:limitNo')).value();
-    var cnt =document.getElementById('allPage:allForm:oppBlock:oppCount').value;
-    
-    if(cnt >limit){
-        var limitno = limit;
-            for(var i=0;i<limitno;i++){ 
-                if(j$(escapeVfId('chk'+i)).attr('checked')){
-                    j$(escapeVfId('chk')).attr('checked',false);
-                }
-            }
-        }else{
-            var cntnumber = cnt;
-            for(var j =0 ;j<cntnumber;j++){
-                if(j$(escapeVfId('chk'+j)).attr('checked')){
-                        j$(escapeVfId('chk')).attr('checked',false);
-                    }
-            }
-        }
-}
-//鎵归噺閫夋嫨鍘熷洜 淇濆瓨
-function setCheckValue(){
-	var cnt = document.getElementById('allPage:allForm:oppBlock:oppCount').value;
-	for(var i=0 ;i<cnt;i++){
-		if (j$(escapeVfId('chk'+i)).attr('checked')) {
 
-			var reason =  j$(escapeVfId('allPage:allForm:searchBlock:reasons')).value();
+                                            }
+                                            //鍗曢�夋椂 灏嗚闂崟鐘舵�佹敼涓轰笉瑕� 锛堢偣鍑婚〉闈able涓婄殑涓嶉渶瑕佹寜閽級
+                                            function updateStatus(id, lineNo) {
+                                                var inquiryformId = id;
+                                                //浼犲叆 id鍜屽師鍥犻�夐」涓や釜鍙傛暟  
+                                                var reason = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:' + lineNo + ':Reasons_options__c')).value();
+                                                var opp_Name_Search = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:' + lineNo + ':Opp_Name_Search__c')).value();
+                                                var opp_ID = j$(escapeVfId('allPage:allForm:oppBlock:oppTable_L:' + lineNo + ':Opp_Name_Search__c_lkid')).value();
+                                                if (!reason) {
+                                                    alert('璇锋偍鍏堥�夋嫨鍘熷洜閫夐」锛屽啀鐐瑰嚮鎸夐挳銆�');
+                                                    return;
+                                                } else if (reason == '宸茬粡鏈夎浠�' && opp_Name_Search == '') {
+                                                    alert('璇锋偍濉啓宸叉湁璇环鍚嶇О鍚�,鍐嶇偣鍑讳笉闇�瑕佹寜閽繘琛屾洿鏂帮紒');
+                                                    return;
+                                                } else {
+                                                    //2.淇敼璇㈤棶鍗曠姸鎬佷负鍏抽棴
+                                                    saveInquiryform(inquiryformId, reason, opp_ID);
+                                                    //鍒锋柊椤甸潰
+                                                    // location.replace(location.href);
+                                                }
 
-			document.getElementById('allPage:allForm:oppBlock:oppTable_L:' + i + ':Reasons_options__c').value = reason;
-			
-			setChangeFlg(i);
-		}
+                                            }
 
-	}
+                                            //鍏ㄩ�� checkbox
+                                            function updateCheckBox() {
+                                                var limit = j$(escapeVfId('allPage:allForm:searchBlock:limitNo')).value();
+                                                var cnt = document.getElementById('allPage:allForm:oppBlock:oppCount').value;
+                                                if (j$(escapeVfId('chk')).attr('checked')) {
+                                                    if (cnt > limit) {
+                                                        var limitno = limit;
+                                                        for (var i = 0; i < limitno; i++) {
 
-}
-</script>
-            </td>
-         </tr> 
-            <apex:variable value="{!cnt + 1}" var="cnt" />
-            </apex:repeat> 
-        </table>
+
+                                                            j$(escapeVfId('chk' + i)).attr('checked', true);
+                                                        }
+                                                    } else {
+                                                        var cntnumber = cnt;
+                                                        for (var j = 0; j < cntnumber; j++) {
+
+
+                                                            j$(escapeVfId('chk' + j)).attr('checked', true);
+                                                        }
+                                                    }
+                                                } else {
+                                                    if (cnt > limit) {
+                                                        var limitno = limit;
+                                                        for (var i = 0; i < limitno; i++) {
+                                                            j$(escapeVfId('chk' + i)).attr('checked', false);
+                                                        }
+                                                    } else {
+                                                        var cntnumber = cnt;
+                                                        for (var j = 0; j < cntnumber; j++) {
+                                                            j$(escapeVfId('chk' + j)).attr('checked', false);
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                            //褰撻�夋嫨鍏ㄩ�夊悗 鍙栨秷鍕炬帀鍏朵腑涓�涓垨鑰呭涓椂 鍕炬帀鍏ㄩ��
+                                            function editCheckBox() {
+                                                var limit = j$(escapeVfId('allPage:allForm:searchBlock:limitNo')).value();
+                                                var cnt = document.getElementById('allPage:allForm:oppBlock:oppCount').value;
+
+                                                if (cnt > limit) {
+                                                    var limitno = limit;
+                                                    for (var i = 0; i < limitno; i++) {
+                                                        if (j$(escapeVfId('chk' + i)).attr('checked')) {
+                                                            j$(escapeVfId('chk')).attr('checked', false);
+                                                        }
+                                                    }
+                                                } else {
+                                                    var cntnumber = cnt;
+                                                    for (var j = 0; j < cntnumber; j++) {
+                                                        if (j$(escapeVfId('chk' + j)).attr('checked')) {
+                                                            j$(escapeVfId('chk')).attr('checked', false);
+                                                        }
+                                                    }
+                                                }
+                                            }
+                                            //鎵归噺閫夋嫨鍘熷洜 淇濆瓨
+                                            function setCheckValue() {
+                                                var cnt = document.getElementById('allPage:allForm:oppBlock:oppCount').value;
+                                                for (var i = 0; i < cnt; i++) {
+                                                    if (j$(escapeVfId('chk' + i)).attr('checked')) {
+
+                                                        var reason = j$(escapeVfId('allPage:allForm:searchBlock:reasons')).value();
+
+                                                        document.getElementById('allPage:allForm:oppBlock:oppTable_L:' + i + ':Reasons_options__c').value = reason;
+
+                                                        setChangeFlg(i);
+                                                    }
+
+                                                }
+
+                                            }
+                                        </script>
+                                    </td>
+                                </tr>
+                                <apex:variable value="{!cnt + 1}" var="cnt" />
+                            </apex:repeat>
+                        </table>
                     </div>
                 </apex:outputPanel>
             </apex:pageBlock>
-<script type="text/javascript">
-j$(function() {
-    bindTdToggleWidth();
-});
-var elements = document.getElementsByTagName("select");
-for (i = 0; i < elements.length; i++) {
-    var id = elements[i].id;
-    if (id.length > 5 && id.substring(id.length - 5, id.length) == 'mlktp') {
-        elements[i].style.display = "none";
-    }
-}
+            <script type="text/javascript">
+                j$(function() {
+                    bindTdToggleWidth();
+                });
+                var elements = document.getElementsByTagName("select");
+                for (i = 0; i < elements.length; i++) {
+                    var id = elements[i].id;
+                    if (id.length > 5 && id.substring(id.length - 5, id.length) == 'mlktp') {
+                        elements[i].style.display = "none";
+                    }
+                }
 
-</script>
+            </script>
         </apex:outputPanel>
     </apex:form>
 </apex:page>
\ No newline at end of file
diff --git a/force-app/main/default/pages/NewAndEditLead.page b/force-app/main/default/pages/NewAndEditLead.page
index 41e3771..a18feb9 100644
--- a/force-app/main/default/pages/NewAndEditLead.page
+++ b/force-app/main/default/pages/NewAndEditLead.page
@@ -1,49 +1,55 @@
-<apex:page standardController="Lead" extensions="NewAndEditLeadController">
+<apex:page standardController="Lead" extensions="NewAndEditLeadController" id="page">
+    <apex:stylesheet value="{!URLFOR($Resource.blockUIcss)}"/>
+    <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
+    <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}"/>
+    <apex:includeScript value="{!URLFOR($Resource.PleaseWaitDialog)}"/>
     <script src="../../soap/ajax/53.0/connection.js" type="text/javascript"></script>
+    <style>
+        .disabledbutton {
+            pointer-events: none;
+            opacity: 0.4;
+        }
+    </style>
     <script>
-        var TestToken = 'eyJhbGciOiJIUzUxMiJ9.eyJjcmVhdGVkIjoxNjQzMDk5NDgyNjA2LCJhcHBpZCI6IjZMeml6Y1JmN2g4eUx4MjgiLCJleHAiOjE2NDM3MDQyODJ9.V_94zxiDwEa1jZpOphw9W4QfjmqqKQcjCZ4z31KsDe7SjCF9sxKSKiZe6rp8ML6-namlVSyzqpTeZQ6NJi88Og';
-        var AWSAppId = '6LzizcRf7h8yLx28';
-        var AWSAppSecret = 'UkLohQcHNjg164SdRc7gnS4rgu4d7FjINM3mtzRbyTS6IrUP5V';
-        var NewLeadURL = 'https://52.83.101.205/api/lead/insert';
-        var UpdateLeadURL = '';
-        var QueryLeadURL = 'https://52.83.101.205/api/lead/query';
-        var TransactionURL = "https://52.83.101.205/api/tx/confirm";
+        AWSService.sfSessionId = '{!GETSESSIONID()}';
+        var staticResources = JSON.parse('{!staticResource}');
+        var staticResourcesContact = JSON.parse('{!staticResourceContact}');
+        var requiredFieldAPIList = JSON.parse('{!requiredFieldAPIListStr}');
+        var fieldAPIToLabelMap = JSON.parse('{!fieldAPIToLabelMapStr}');
+        var redirectMode = 'Save';//1. Save 2. SaveAndNew
+        var requiredAPIToChangedLabelMap = new Map();
+        requiredAPIToChangedLabelMap.set('LastName', '{!PIPL_Name_Label}');
+        console.log('{!contactsInfo}');
         var VLookUpFields = new Set(['Hospital_Name__c', 'Department_Class__c', 'Contact_Name__c', 'Campaign__c']);
-        var LeadIdPage = "https://ocsm--stagefull--c.visualforce.com/apex/NewAndEditLead?RecordType=01210000000QiRa";
-        // function ProcessPI(payloadForNewPI) {
-        //     let TokenURL = "https://52.83.101.205/api/token/getToken?app_id=" + AWSAppId + "&app_secret=" + AWSAppSecret;
-        //     console.log('Get Token Process');
-        //     fetch(TokenURL, {
-        //         method: 'GET',
-        //         mode: 'no-cors',
-        //         headers: {
-        //             'Content-Type': 'application/json'
-        //         }
-        //     }).then((data) => {
-        //         console.log(data.text())
-        //         return data.text()
-        //     }).then((awsToken) => {
-        //         if({!isNewMode}){
-        //             NewPIToAWS(awsToken, payloadForNewPI)
-        //         }else{
-        //             UpdatePIToAWS(awsToken, payloadForNewPI)
-        //         }              
-        //     });
-        // }
+        function ProcessPI(leadJson, payloadForNewPI) {
+            blockme();
+            if ({!isNewMode}) {
+            NewPIToAWS(leadJson, payloadForNewPI)
+        }else {
+            UpdatePIToAWS(leadJson, payloadForNewPI)
+        }
+        }
 
-        function loadAWSAuthentication() {
-            console.log('Get Sesion Session');
-            sforce.connection.sessionId = '{!GETSESSIONID()}';
-            let awsConfiguration = "SELECT App_Id__c,App_Secret__c,New_Lead_URL__c FROM AWS_Integration_Info__mdt  WHERE DeveloperName = 'AWS_Integration_Configuration'";
-            let awsConfigurationResult = sforce.connection.query(awsConfiguration);
-            let recordsAWSConfiguration = awsConfigurationResult.getArray("records");
-            if (recordsAWSConfiguration && recordsAWSConfiguration.length > 0) {
-                recordAWSConfiguration = recordsAWSConfiguration[0];
-                AWSAppId = recordAWSConfiguration.App_Id__c;
-                AWSAppSecret = recordAWSConfiguration.App_Secret__c;
-                NewLeadURL = recordAWSConfiguration.New_Lead_URL__c;
+        function enableButton(obj) {
+            obj.classList.remove("btnDisabled");
+        }
+
+        function disableButton(obj) {
+            obj.classList.add("btnDisabled");
+        }
+
+        function disableButtonStatus() {
+            let btnList = document.getElementsByClassName('btn');
+            for (let i = 0; i < btnList.length; i++) {
+                disableButton(btnList[i]);
             }
-            console.log('AWS Configuration:' + AWSAppId + '----- APP Secret:' + AWSAppSecret);
+        }
+
+        function enableButtonStatus() {
+            let btnList = document.getElementsByClassName('btn');
+            for (let i = 0; i < btnList.length; i++) {
+                enableButton(btnList[i]);
+            }
         }
 
         function getPIPayload(leadJson) {
@@ -63,44 +69,40 @@
         }
 
         function validateFieldValueFormate() {
+            let error_msg = '';
             let textEmail = "[data-id='Email']";
             let textPhone = "[data-id='Phone']";
             //Email
-            let email = document.querySelector(textEmail).value;
-            let phone = document.querySelector(textPhone).value;
+            let email = document.querySelector(textEmail);
+            if(email.value!='' && !/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/.test(email.value)){
+                error_msg += ';閭欢鏍煎紡閿欒';
+            }
+            let phone = document.querySelector(textPhone);
 
-            let regEmail = /^[\w-]{3,12}@[\da-zA-Z]{2,6}\.[a-zA-Z]+$/;
-            let regPhone = /^1[3|5|8|7][0-9]\d{4,8}$/;
+            if(phone.value!='' && !/^1[3|5|8|7][0-9]\d{4,8}$/.test(phone.value)){
+                error_msg += ';鐢佃瘽鍙风爜閿欒';
+            }
 
-            let emailFormate = regEmail.test(email);
-            let phoneFormate = regPhone.test(phone);
-
-            console.log(emailFormate);
-            console.log(phoneFormate);
-
-
-            email.oninput = function () {
-                //email
-                if (emailFormate) {
-                    //phone
-                    phone.oninput = function () {
-                        if (phoneFormate) {
-                            return true;
-                        } else {
-                            return false;
-                        }
+            for(let e of document.getElementsByTagName('select')){
+                for(let op of e.options){
+                    if(op.value == "*****" && op.selected){
+                        error_msg += ';涓嬫媺妗嗕笉鑳戒富鍔ㄩ�夋嫨瀵嗘枃閫夐」';
                     }
-                } else {
-                    return false;
                 }
             }
-            return true;
+
+            if(error_msg.length>0 && error_msg[0]== ';'){
+                error_msg = error_msg.substring(1);
+            }
+
+            return error_msg;
         }
 
         function getLeadInformation() {
 
             let nodelist = document.querySelectorAll("[data-id]");
             let result = {}
+            result.RecordTypeId = '{!rtTypeId}';
             for (let index = 0; index < nodelist.length; index++) {
                 if (VLookUpFields.has(nodelist[index].getAttribute("data-id"))) {
                     console.log(nodelist[index].id.indexOf('lkwgt'));
@@ -109,220 +111,214 @@
                         let vlookUpNodeValue = document.getElementById(vlookUpNodeId).value;
                         result[nodelist[index].getAttribute("data-id")] = vlookUpNodeValue;
                     }
+                } else if (nodelist[index].type == 'checkbox') {
+                    result[nodelist[index].getAttribute("data-id")] = nodelist[index].checked;
+                } else if (nodelist[index].type == 'select-multiple') {
+                    //nodelist[index].getAttribute("data-id")
+                    let multiple = nodelist[index].getAttribute("data-id");
+                    let targets = document.querySelector("[data-id=" + multiple + "]").parentNode.children[1].children[0].children[1].children[2].children[0].innerText;
+                    targets = targets.replace(/\n/g, ";");
+                    console.log('targets = ' + targets);
+                    result[nodelist[index].getAttribute("data-id")] = targets;
                 } else {
                     result[nodelist[index].getAttribute("data-id")] = nodelist[index].value;
                 }
+                let x = index + 1;
+                if (x <= nodelist.length - 1 && (nodelist[x].getAttribute("data-id") == nodelist[index].getAttribute("data-id"))) {
+                    index++;
+                }
             }
-            console.log(JSON.stringify(result));
-            console.log('lead Number:' + result.Lead_No__c);
-            let leadJson = JSON.stringify(result);
-            let transId = "11111";
-            let AWSDataId = "22222";
-
-            // Visualforce.remoting.Manager.invokeAction(
-            //     '{!$RemoteAction.NewAndEditLeadController.saveLead}',
-            //     leadJson, transId,{!isNewMode},
-            //     function (result, event) {
-            //         console.log("result: " + result);
-            //         window.open('/' + result.recordId, "_self");
-            //     },
-            //     { escape: true }
-            // );
             return result;
-
-
-            //绗簩绉�
-            // let leadJson = {};
-            // let fieldApiList = '{!fieldApiListStr}'.substring(1, '{!fieldApiListStr}'.length - 1).replace(/\"/g, "").split(',');
-            // for (var i in fieldApiList) {
-            //     if(document.querySelector("[data-id=\"" + fieldApiList[i] + "\"]") != null){
-            //         leadJson[fieldApiList[i]] = document.querySelector("[data-id=\"" + fieldApiList[i] + "\"]").value;
-            //     }else{
-            //         leadJson[fieldApiList[i]] = '';
-            //     }
-            // }
-            // return leadJson;
         }
-        function QueryLeadFromAWS(awsDataId) {
-            fetch(QueryLeadURL + '?dataId=' + awsDataId, {
-                method: 'GET',
-                headers: {
-                    'Content-Type': 'application/json',
-                    'pi_token': TestToken
-                }
-            }).then((data) => {
-                console.log('data = ' + data);
-                document.querySelector("[data-id='LastName']").value = data.object[0].lastName;
-                document.querySelector("[data-id='phone']").value = data.object[0].phone;
-                document.querySelector("[data-id='email']").value = data.object[0].email;
-            })
+        function QueryLeadFromAWS() {
+            AWSService.query(staticResources.queryUrl, '{!AWSDataId}', queryBack, staticResources.token);
         }
-        function UpdatePIToAWS(awsToken, payloadForNewPI) {
-            fetch(UpdateLeadURL, {
-                method: 'POST',
-                body: payloadForNewPI,
-                headers: {
-                    'Content-Type': 'application/json',
-                    //'token': awsToken
+        var queryBack = function queryBack(data) {
+            console.log('data = ' + data);
+            document.querySelector("[data-id='LastName']").value = data.object.lastName.replace(/"/g,"");
+            document.querySelector("[data-id='Phone']").value = data.object.phone.replace(/"/g,"");
+            document.querySelector("[data-id='Email']").value = data.object.email.replace(/"/g,"");
+            unblockUI();
+        };
+
+        var insertOrUpdateBack = function insertOrUpdateBack(payloadJson, result, isNewMode) {
+            console.log(result);
+            let r = result;
+            console.log('Result from AWS' + r);
+            console.log('payloadJson=' + payloadJson);
+            payloadJson.LastName = r.object[0].lastName;
+            payloadJson.Phone = r.object[0].phone;
+            payloadJson.Email = r.object[0].email;
+            payloadJson.Name_Encrypted__c = r.object[0].lastNameEncrypt;
+            payloadJson.Phone_Encrypted__c = r.object[0].phoneEncrypt;
+            payloadJson.Email_Encrypted__c = r.object[0].emailEncrypt;
+            //payloadJson.AWS_Data_Id__c = r.object[0].dataId;
+            payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
+            if (isNewMode) {
+                payloadJson.AWS_Data_Id__c = r.object[0].dataId;
+            } else {
+                payloadJson.AWS_Data_Id__c = '{!AWSDataId}';
+            }
+            return payloadJson;
+        }
+
+        var redirectCallBack = function redirectCallBack(sfId, errorMessage) {
+            if (sfId) {
+                if (redirectMode == 'Save') {
+                    window.open('/' + sfId, '_self');
+                } else if (redirectMode == 'SaveAndNew') {
+                    window.open('/setup/ui/recordtypeselect.jsp?ent=' + '{!sobjecttypeForFrontEnd}' + '&retURL=/' + '{!sobjectPrefix}' + '/o&save_new_url=/' + '{!sobjectPrefix}' + '/e?retURL=%2F' + '{!sobjectPrefix}' + '%2Fo', '_self');
                 }
-            }).then((data) => { return data.json() }).then((result) => {
-                let r = JSON.parse(result);
-                console.log('Result from AWS' + r);
-                leadJson.lastName = r.object[0].lastName;
-                leadJson.phone = r.object[0].phone;
-                leadJson.email = r.object[0].email;
-                leadJson.Name_Encrypted__c = r.object[0].lastNameEncrypt;
-                leadJson.Phone_Encrypted__c = r.object[0].phoneEncrypt;
-                leadJson.Email_Encrypted__c = r.object[0].emailEncrypt;
-                leadJson.AWS_Data_Id__c = '{!AWSDataId}';
-                let transId = result.txId;
-                let AWSDataId = r.object[0].dataId;
+            } else {
+                // alert(errorMessage);
+                alertErrorMessage(errorMessage);
+            }
+        }
 
-                // Assign the value to NonPII Data Payload
-                //7. New NonPII Data To Salesforce
-                Visualforce.remoting.Manager.invokeAction(
-                    '{!$RemoteAction.NewAndEditLeadController.saveLead}',
-                    leadJson, transId, {!isNewMode},
-                function (result, event) {
-                    if (event.status) {
-                        if (result.stauts == 'success') {
-                            //get Lead Id from sf backend
-                            let leadId = result.recordId;
 
-                            //8. Confirm Trans to AWS
-                            transParameters = {
-                                txId: transId,
-                                isSuccess: event.status
-                            };
-                            fetch(TransactionURL, {
-                                method: 'POST',
-                                body: JSON.stringify(transParameters),
-                                headers: {
-                                    'Content-Type': 'application/json',
-                                    // 'token': awsToken
-                                }
-                            }).then((result) => {
-                                if (JSON.parse(result).status == 0) {
-                                    //9. Redirect to lead Id page.
-                                    window.location.href = LeadIdPage;
-                                    // let data = {
-                                    //     transId:result.txId,
-                                    //     dataId:dataId,
-                                    //     status:result.status
-                                    // }
-                                    // return JSON.stringify(data);
-                                }
-                            })
-                            // window.open(LeadIdPage);
-                            // console.log(result);
-                            // window.location.href = LeadIdPage;
-                        } else {
-                            //result.stauts == 'fail'
-                        }
+        function UpdatePIToAWS(leadJson, payloadForNewPI) {
+            let controllerSaveMethod = '{!$RemoteAction.NewAndEditLeadController.saveLead}';
+            let obj = JSON.parse(payloadForNewPI);
+            obj[0].dataId = '{!AWSDataId}';
+            let payloadForNewPIJson = JSON.stringify(obj);
+            AWSService.update(staticResources.updateUrl, leadJson, payloadForNewPIJson, controllerSaveMethod, staticResources.token, staticResources.transactionUrl, false, insertOrUpdateBack, redirectCallBack);
+        }
+
+        function NewPIToAWS(leadJson, payloadForNewPI) {
+            let controllerSaveMethod = '{!$RemoteAction.NewAndEditLeadController.saveLead}';
+            AWSService.insert(staticResources.newUrl, leadJson, payloadForNewPI, controllerSaveMethod, staticResources.token, staticResources.transactionUrl, true, insertOrUpdateBack, redirectCallBack);
+        }
+
+        function checkRequiredFieldMsg(formData) {
+            let blankRequiredFields = '';
+            for (i = 0; i < requiredFieldAPIList.length; i++) {
+                if (formData[requiredFieldAPIList[i]]) {
+                    continue;
+                } else {
+                    let fieldAPIValue = requiredFieldAPIList[i]
+                    let fieldLabelValue = fieldAPIToLabelMap[fieldAPIValue];
+                    if (requiredAPIToChangedLabelMap.has(fieldAPIValue)) {
+                        fieldLabelValue = requiredAPIToChangedLabelMap.get(fieldAPIValue);
                     }
-                },
-                { escape: true }
-            );
-        }).catch (error => {
-            console.log(error);
-        });
-        }
-        function NewPIToAWS(leadJson,awsToken, payloadForNewPI) {
-            console.log('Process New PI Data');
-            console.log(JSON.stringify(payloadForNewPI));
-            fetch(NewLeadURL, {
-                method: 'POST',
-                body: payloadForNewPI,
-                headers: {
-                    'Content-Type': 'application/json',
-                    'pi_token': awsToken
-                }
-            }).then((data) => { console.log('data='+data);return data.json() }).then((result) => {
-                console.log(result);
-                let r = result;
-                console.log('Result from AWS' + r);
-                console.log('leadJson='+leadJson);
-                leadJson.lastName = r.object[0].lastName;
-                leadJson.phone = r.object[0].phone;
-                leadJson.email = r.object[0].email;
-                leadJson.Name_Encrypted__c = r.object[0].lastNameEncrypt;
-                leadJson.Phone_Encrypted__c = r.object[0].phoneEncrypt;
-                leadJson.Email_Encrypted__c = r.object[0].emailEncrypt;
-                leadJson.AWS_Data_Id__c = 'testAWSID';
-                let transId = result.txId + '';
-                let AWSDataId = r.object[0].dataId;
-
-                // Assign the value to NonPII Data Payload
-                //7. New NonPII Data To Salesforce
-                Visualforce.remoting.Manager.invokeAction(
-                    '{!$RemoteAction.NewAndEditLeadController.saveLead}',
-                    JSON.stringify(leadJson), transId, {!isNewMode},
-                function (result, event) {
-                    if (event.status) {
-                        console.log('Lead Id from SF Backend:'+JSON.stringify(result));
-                        if (result.status == 'success') {
-                            //get Lead Id from sf backend
-                            let leadId = result.recordId;                           
-                            window.open('/'+leadId,'_self');
-                            //8. Confirm Trans to AWS
-                            // transParameters = {
-                            //     txId: transId,
-                            //     isSuccess: result.status
-                            // };
-                            // fetch(TransactionURL, {
-                            //     method: 'POST',
-                            //     body: JSON.stringify(transParameters),
-                            //     headers: {
-                            //         'Content-Type': 'application/json',
-                            //         'pi_token': TestToken
-                            //     }
-                            // }).then((result) => {
-                            //     if (JSON.parse(result).status == 0) {
-                            //         //9. Redirect to lead Id page.
-                            //         window.location.href = LeadIdPage;
-                            //         // let data = {
-                            //         //     transId:result.txId,
-                            //         //     dataId:dataId,
-                            //         //     status:result.status
-                            //         // }
-                            //         // return JSON.stringify(data);
-                            //     }
-                            // })
-                            // window.open(LeadIdPage);
-                            // console.log(result);
-                            // window.location.href = LeadIdPage;
-                        } else {
-                            //result.stauts == 'fail'
-                        }
+                    if (blankRequiredFields == '') {
+                        blankRequiredFields = blankRequiredFields + fieldLabelValue;
+                    } else {
+                        blankRequiredFields = blankRequiredFields + ',' + fieldLabelValue;
                     }
-                },
-                { escape: true }
-            );
-        }).catch (error => {
-            console.log(error);
-        });
+
+                }
+            }
+            return blankRequiredFields;
         }
-        function saveLeadProcess() {
+        function saveLeadProcess(saveMode) {
+           
+            disableButtonStatus();
+            redirectMode = saveMode;
+            console.log('redirectMode' + redirectMode);
+            hiddenErrorMsgNode();
             //1. Get Lead Information from Form
             let leadJson = getLeadInformation();
             //2. Validate the Lead field value formate, for example the email formate or phone formate
-            // let validationResultMessage = validateFieldValueFormate();
-            // console.log(validationResultMessage);
-            // if (!validationResultMessage) {
-            //     //Popup error message.  - To Do After POC
-            //     alert('閭鎴栫數璇濆彿鐮佹牸寮忔湁璇�');
-            // }
-
-            // //3. Prepare the payload for New PI API To AWS - To Do
+            let validationResultMessage = validateFieldValueFormate();
+            console.log(validationResultMessage);
+            if (validationResultMessage) {
+                //Popup error message.  - To Do After POC
+                alertErrorMessage(validationResultMessage);
+                return
+            }
+            // Check Required Field
+            let checkRequiredFieldMsgResult = checkRequiredFieldMsg(leadJson);
+            if (checkRequiredFieldMsgResult) {
+                alertErrorMessage('{!Input_Required_Field_Msg}' + checkRequiredFieldMsgResult);
+                return
+            }
+            //3. Prepare the payload for New PI API To AWS - To Do
             let payloadForNewPI = getPIPayload(leadJson);
 
-            // //4. Get Authentication Information for AWS
-            // loadAWSAuthentication();
+            //4. lead to AWS 
+            ProcessPI(leadJson, payloadForNewPI);
+        }
 
-            // //5. lead to AWS 
-            //ProcessPI(payloadForNewPI);
-            awsToken = TestToken;
-            NewPIToAWS(leadJson,awsToken, payloadForNewPI)
+        function alertErrorMessage(errorMsg) {
+            enableButtonStatus();
+            let errorMsgNode = document.getElementById("page:form:block:msgContent");
+            errorMsg = '閿欒锛氭棤鏁堟暟鎹��' + '\n' + errorMsg;
+            errorMsgNode.innerText = errorMsg;
+            errorMsgNode.className = 'pbError';
+            unblockUI();
+        }
+        function hiddenErrorMsgNode() {
+            let errorMsgNode = document.getElementById("page:form:block:msgContent");
+            errorMsgNode.innerText = '';
+            errorMsgNode.className = '';
+        }
+        var newSearchContactWindow = null;
+        var contactHtmlString = '<img src="/img/s.gif" onclick="searchContact(\'page:form:contactId\')" alt="Reference Document Number Lookup" class="lookupIcon"  title="Reference Document Number Lookup (New Window)"/>';
+        function htmlToElement(html) {
+            var template = document.createElement('template');
+            html = html.trim(); // Never return a text node of whitespace as the result
+            template.innerHTML = html;
+            return template.content.firstChild;
+        }
+        function searchContact(contactNodeId) {
+            //1. Check account value
+            let accountNodeId = document.querySelector("[data-id='Hospital_Name__c']").id + '_lkid';
+            let accountValue = document.getElementById(accountNodeId).value;
+            console.log(accountValue);
+            if (accountValue != '000000000000000') {
+                let baseUrl = "/apex/SearchContactPage";
+                let suffixUrl = "?contactId=" + contactNodeId + "&accountId=" + accountValue;
+                let newSearchContactParam = 'height=600,width=800,left=100,top=100,dialogHide=true,resizable=no,scrollbars=yes,toolbar=no,status=no';
+                newSearchContactWindow = window.open(baseUrl + suffixUrl, 'Popup', newSearchContactParam);
+                if (window.focus) {
+                    newSearchContactWindow.focus();
+                }
+                return false;
+            } else {
+                //alertErrorMessage('{!PIPL_Input_Account_Error_Msg}');
+                alertErrorMessage('璇峰厛閫夋嫨鍖婚櫌鍚�');
+            }
+        }
+        function closePopupWindow() {
+            if (null != newSearchContactWindow) {
+                newSearchContactWindow.close();
+            }
+            let contactInfoStr = document.getElementById('page:form:contactId').value;
+            console.log('closePopup:' + contactInfoStr);
+            let contactInfo = JSON.parse(contactInfoStr);
+            let contactNodeId = document.querySelector("[data-id='Contact_Name__c']").id + '_lkid';
+            document.getElementById(contactNodeId).value = contactInfo.ContactId;
+            document.querySelector("[data-id='Contact_Name__c']").value = contactInfo.Name;
+        }
+        function replaceSearchContactLookup() {
+            let lookUpNode = htmlToElement(contactHtmlString);
+            console.log(lookUpNode);
+            if (!{!isNewMode}) {
+                //1. Query Contact from AWS by AWSDataId
+                queryContactName()
+                //document.querySelector("[data-id='Contact_Name__c']").value = '鐜嬪';
+            }
+            let parentNode = document.querySelector("[data-id='Contact_Name__c']").parentNode;
+            document.querySelector("[data-id='Contact_Name__c']").removeAttribute("onchange");
+            parentNode.replaceChild(lookUpNode, document.querySelector("[data-id='Contact_Name__c']").parentNode.children[2]);
+        }
+
+        function queryContactName() {
+            let sfId = document.getElementById(document.querySelector("[data-id='Contact_Name__c']").id + '_lkid').value;
+            let contactsInfo = JSON.parse('{!contactsInfo}');
+            let dataId = contactsInfo[sfId];
+            let url = staticResourcesContact.queryUrl + '?dataId=' + dataId;
+            fetch(url, {
+                method: 'GET',
+                headers: {
+                    'Content-Type': 'application/json',
+                    'pi-token': staticResources.token
+                }
+            }).then((data) => {
+                return data.json();
+            }).then((result) => {
+                document.querySelector("[data-id='Contact_Name__c']").value = result.object.lastName;
+            })
         }
     </script>
     <div class="bPageTitle">
@@ -345,10 +341,9 @@
         </div>
         <div class="ptBreadcrumb"></div>
     </div>
-    <apex:form >
-        <!-- Error Msg-->
-        <apex:pageMessages />
-        <apex:pageblock >
+    <apex:form id="form">
+        <apex:inputHidden value="{!contactId}" id="contactId" />
+        <apex:pageblock id="block">
             <div class="pbHeader">
                 <table cellspacing="0" cellpadding="0" border="0">
                     <tbody>
@@ -358,17 +353,25 @@
                                 <h2 class="mainTitle">鎰忓悜缂栬緫</h2>
                             </td>
                             <td class="pbButton" id="topButtonRow">
-                                <input class="btn" type="Button" value="淇濆瓨" onclick="saveLeadProcess()" />
-                                <input class="btn" type="Button" value="淇濆瓨骞舵柊寤�" onclick="saveLeadProcess()" />
+                                <input class="btn" type="Button" value="淇濆瓨" onclick="saveLeadProcess('Save')" />
+                                <input class="btn" type="Button" value="淇濆瓨骞舵柊寤�" onclick="saveLeadProcess('SaveAndNew')" />
                                 <apex:commandButton action="{!cancel}" value="鍙栨秷" />
                             </td>
                         </tr>
                     </tbody>
                 </table>
             </div>
+            <!-- Error Msg-->
+            <div style="text-align: center;">
+                <apex:outputPanel id="errorMsg">
+                    <apex:pageMessages id="msgContent" escape="false" />
+                </apex:outputPanel>
+            </div>
+            <br/>
             <!-- Iterate the layoutSections, which is a list of sections -->
             <apex:repeat value="{!layoutSections}" var="layoutSection">
-                <apex:pageBlockSection title="{!layoutSection.name}" collapsible="{!layoutSection.allowCollapse}" columns="{!layoutSection.columns}">
+                <apex:pageBlockSection title="{!layoutSection.name}" showHeader="{!layoutSection.useHeader}" collapsible="{!layoutSection.allowCollapse}"
+                    columns="{!layoutSection.columns}">
 
                     <!--Each section has layoutFields, let's iterate them as well-->
                     <apex:repeat value="{!layoutSection.layoutFields}" var="layoutField">
@@ -383,15 +386,18 @@
             <script>
                 sfdcPage.appendToOnloadQueue(function () {
                     //1. Set Last Name label
-                    document.querySelector("[data-id='LastName']").parentNode.parentNode.parentNode.children[2].children[0].innerText = '濮撳悕';
+                    console.log('NameLabel = ' + '{!PIPL_Name_Label}')
+                    document.querySelector("[data-id='LastName']").parentNode.parentNode.parentNode.children[0].children[0].innerText = '{!PIPL_Name_Label}';
                     //2. Query AWS Data by dataId 
                     console.log('Mode for Lead Page:' + {!isNewMode});
-                if (!{!isNewMode}) {
-                    //2.1. Query AWS Data by 
-                    let leadPIData = QueryLeadFromAWS({!awsDataId});
-                        //2.2. Update the value to Front-End
-                        //document.querySelector("[data-id='LastName']").value = '234234';
-                    }   
+                    if (!{!isNewMode}) {
+                        blockme();//for loading search by Li Jun 20220218
+                        QueryLeadFromAWS();
+                    }
+                    //Replace Vlookup Field
+                    replaceSearchContactLookup();
+                    //3. Set Readonly Attribute
+                    document.querySelector("[data-id='OwnerId']").classList.add("disabledbutton");
                 });
             </script>
             <div class="pbBottomButtons">
@@ -400,9 +406,9 @@
                         <tr>
                             <td class="pbTitle">
                                 <img src="/img/s.gif" alt="" class="minWidth" title="" width="1" height="1" />&nbsp;</td>
-                            <td class="pbButtonb" id="bottomButtonRow">
-                                <input class="btn" type="Button" value="淇濆瓨" onclick="saveLeadProcess()" />
-                                <input class="btn" type="Button" value="淇濆瓨骞舵柊寤�" onclick="saveLeadProcess()" />
+                            <td class="pbButton" id="bottomButtonRow">
+                                <input class="btn" type="Button" value="淇濆瓨" onclick="saveLeadProcess('Save')" />
+                                <input class="btn" type="Button" value="淇濆瓨骞舵柊寤�" onclick="saveLeadProcess('SaveAndNew')" />
                                 <apex:commandButton action="{!cancel}" value="鍙栨秷" />
                             </td>
                         </tr>
diff --git a/force-app/main/default/pages/OFSInsReportLayout.page b/force-app/main/default/pages/OFSInsReportLayout.page
index ba81af1..5167cdd 100644
--- a/force-app/main/default/pages/OFSInsReportLayout.page
+++ b/force-app/main/default/pages/OFSInsReportLayout.page
@@ -8,6 +8,7 @@
     <apex:includeScript value="{!URLFOR($Resource.connection20)}"/>
     <apex:includeScript value="{!URLFOR($Resource.apex20)}"/>
     <apex:stylesheet value="{!URLFOR($Resource.blockUIcss)}"/>
+    <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
     <style type="text/css">
         table#AssetTable select {
             width: 98%;
@@ -127,6 +128,147 @@
     
 }
 //add by rentx 20210809 鍏ㄩ�夊姛鑳� end
+
+
+AWSService.sfSessionId = '{!GETSESSIONID()}';
+var staticResource = JSON.parse('{!staticResource}');
+var aws_data = {};
+var txid = null;
+function Encrypt(callback){
+    blockme();
+    //callback();return;
+    //<input type="hidden" value="{!ir.Id}" id="IrId"/>
+
+    //<input type="hidden" value="{!ir.Responsible_Person_Encrypted__c}" id="Responsible_Person_Encrypted__c"/>
+    //<input type="hidden" value="{!ir.phone_Encrypted__c}" id="phone_Encrypted__c"/>
+    let e_id = document.getElementById("IrId");
+    let url = staticResource.newUrl;
+
+    aws_data = {
+        "phone":j$("[field-api='phone__c']").val(),
+        "responsiblePerson":j$("[field-api='Responsible_Person__c']").val(),
+    };
+
+    if(e_id && e_id.value){
+        url = staticResource.updateUrl;
+        aws_data.dataId = document.getElementById("Page:Form:Block:AWS_Data_Id__c").value;
+    }
+
+    
+
+    AWSService.post(url, JSON.stringify([aws_data]), function(data){
+        
+        if (!(data && data.object && data.object.length)) {
+            console.log('AWSService.post failed');
+            return;
+        }
+        let aws_data1 = data.object[0];
+        txid = data.txId;
+
+        document.getElementById("Page:Form:Block:AWS_Data_Id__c").value = aws_data1.dataId;
+        j$("[field-api='phone__c']").val(aws_data1.phone);
+        document.getElementById("Page:Form:Block:phone_Encrypted__c").value = aws_data1.phoneEncrypt;
+        j$("[field-api='Responsible_Person__c']").val(aws_data1.responsiblePerson);
+        document.getElementById("Page:Form:Block:Responsible_Person_Encrypted__c").value = aws_data1.responsiblePersonEncrypt;
+        
+        if (callback) {
+            callback();
+        }
+    }, staticResource.token);
+}
+
+function saveBtnJs(){
+    Encrypt(saveBtn);
+}
+function submitJs(){
+    Encrypt(submit);
+}
+function showPDFJs(){
+    Encrypt(showPDF);
+}
+
+function afterSaveBtnJs(){
+    Trans();
+}
+
+function afterSubmitJs(){
+    Trans();
+}
+
+function afterShowPDFJs(){
+    Trans(function(){
+        if (!HasError()) {
+            window.location.href = '/apex/InsReportPDFOuter?id=' + document.getElementById("IrId").value;
+        }
+        
+    });
+}
+
+function HasError(){
+    
+    // if (IsAddmessage) {
+    //     return true;
+    // }
+    let e = document.getElementById("Page:Form:MessageP");
+    if (!e) {
+        return false;
+    }
+
+    let divs = j$(e).find("div.message");
+    for (let i = 0; i < divs.length; i++) {
+        for (let j = 0; j < divs[i].classList.length; j++) {
+            for(let cls of divs[i].classList){
+                if (cls.indexOf('error')>-1) {
+                    return true;
+                }
+            }
+            
+        }
+        
+    }
+
+
+    return false;
+}
+
+function Decrypt(data){
+    
+    j$("[field-api='phone__c']").val(data.phone);
+    j$("[field-api='Responsible_Person__c']").val(data.responsiblePerson);
+    
+    
+}
+
+function Trans(callback){
+    let payload = {
+        "txId":txid,
+        "sfRecordId":document.getElementById("IrId").value,
+        "isSuccess":(txid && !HasError()) ? 1 : 0
+    };
+    AWSService.post(staticResource.transactionUrl, JSON.stringify(payload), function(result){
+        Decrypt(aws_data);
+        if(callback)callback();
+        unblockUI();
+    }, staticResource.token);
+}
+
+function Query(){
+    let ele = document.getElementById("Page:Form:Block:AWS_Data_Id__c");
+    if (ele && ele.value) {
+        blockme();
+        AWSService.query(staticResource.queryUrl, ele.value, function(data){
+            if (data && data.object) {
+                Decrypt(data.object);
+            }
+            unblockUI();
+        }, staticResource.token);
+    }
+}
+
+j$(function(){
+    Query();
+})
+
 </script>
 <title>{!ir.Name}</title>
 </head>
@@ -138,6 +280,9 @@
     // 淇濆瓨寰屻�佹柊瑕忋伄鍫卞憡鏇窱D銈掑彇寰�
     tmpinsid = '{!ir.Id}';
     tmpinsn = '{!JSENCODE(ir.Name)}';
+    //var IsAddmessage = {IsAddmessage};
+    var isPDF = {!isPDF};
+    
 </script>
 <apex:actionFunction name="searchfunc" action="{!searchBtn}" rerender="Form,Block,UnCheckSection" onComplete="unblockUI();"></apex:actionFunction>
 
@@ -149,9 +294,14 @@
 
 <apex:actionFunction name="saveByRepair" action="{!saveBtn}" rerender="Form" onComplete="unblockUI();openRepair();"/>
 
+<apex:actionFunction name="saveBtn" action="{!saveBtn}" rerender="Form" onComplete="afterSaveBtnJs();"/>
+<apex:actionFunction name="submit" action="{!submit}" rerender="Form" onComplete="afterSubmitJs();"/>
+<apex:actionFunction name="showPDF" action="{!showPDF}" rerender="Form" onComplete="afterShowPDFJs();"/>
+
 <apex:outputPanel id="MessageP">
 <apex:pageMessages />
 </apex:outputPanel>
+
 
 <div><apex:pageBlock mode="maindetail" Id="Block" rendered="{!initFlag}">
     <div style="position: relative;top:0;width:100%;">
@@ -162,10 +312,10 @@
                     <apex:outputLabel value="{!$ObjectType.Inspection_Report__c.fields.Name_Manual__c.Label}" for="Name_Manual"/>锛�
                     <apex:inputField value="{!ir.Name}" id="Ir_Name" html-disabled="disabled" style="border-width:0px;font-size:18px;font-weight:bold;padding-right:20px;-webkit-text-fill-color:black;"/>
                 </td>
-                <td style="text-align: center;padding-right: 100px;"><apex:commandButton style="width:80px;" value="淇濆瓨" action="{!saveBtn}" onclick="blockme();" rerender="Form" onComplete="unblockUI();"/></td>
-                <td style="text-align: center;padding-right: 100px;"><apex:commandButton value="鎻愪氦" action="{!submit}" onclick="blockme();" style="width:80px" rerender="Form" id="submitButton" onComplete="unblockUI();"/></td>
+                <td style="text-align: center;padding-right: 100px;"><input class="btn" type="Button" style="width:80px;" value="淇濆瓨" action="" onclick="saveBtnJs();" rerender="Form" onComplete="unblockUI();"/></td>
+                <td style="text-align: center;padding-right: 100px;"><input class="btn" type="Button" value="鎻愪氦" action="" onclick="submitJs();" style="width:80px" rerender="Form" id="submitButton" onComplete="unblockUI();"/></td>
                 <td style="text-align: center;padding-right: 100px;"><apex:commandButton style="width:80px;" value="鍏抽棴绐楀彛" onclick="location.href='/apex/OFSWindowClose';return false;" id="closeButton"/></td>
-                <td style="text-align: center;"><apex:commandButton style="width:80px;" value="PDF" action="{!showPDF}" onclick="blockme();" rerender="Form" onComplete="unblockUI();"/></td>
+                <td style="text-align: center;"><input class="btn" type="Button" style="width:80px;" value="PDF" action="" onclick="showPDFJs();" rerender="Form" onComplete="unblockUI();"/></td>
             </tr>
         </table>
         <apex:pageBlockSection title="{!sectionList[0].title}" columns="{!sectionList[0].column}" showHeader="{!sectionList[0].showHeader}" rendered="{!sectionList.size>0}">
@@ -207,11 +357,18 @@
 </div>
 <div style="position: relative;top:0;height:700px;overflow:hidden;overflow-y:auto;-webkit-overflow-scrolling: touch;">
     <input type="hidden" value="{!ir.Id}" id="IrId"/>
+    <apex:inputHidden value="{!ir.Responsible_Person_Encrypted__c}" id="Responsible_Person_Encrypted__c"/>
+    <apex:inputHidden value="{!ir.phone_Encrypted__c}" id="phone_Encrypted__c"/>
+    <apex:inputHidden value="{!ir.AWS_Data_Id__c}" id="AWS_Data_Id__c"/>
+    
+    
+
+
     <apex:repeat value="{!sectionList}" var="section" id="SectionList">
     <apex:pageBlockSection title="{!section.title}" columns="{!section.column}" showHeader="{!section.showHeader}" rendered="{!!section.isTop}">
     <apex:repeat value="{!section.sectionItemList}" var="sectionItem" id="SectionItemList">
     <apex:outputField value="{!ir[sectionItem.api]}" rendered="{!NOT(sectionItem.isDummy)&&NOT(sectionItem.isCustomize)&&NOT(sectionItem.isInput)}"/>
-    <apex:inputField style="width:{!sectionItem.width};height:{!sectionItem.height};" value="{!ir[sectionItem.api]}" rendered="{!NOT(sectionItem.isDummy)&&NOT(sectionItem.isCustomize)&&sectionItem.isInput}" required="{!sectionItem.isRequired}" html-tabindex="{!sectionItem.index}"/>
+    <apex:inputField html-field-api="{!sectionItem.api}" style="width:{!sectionItem.width};height:{!sectionItem.height};" value="{!ir[sectionItem.api]}" rendered="{!NOT(sectionItem.isDummy)&&NOT(sectionItem.isCustomize)&&sectionItem.isInput}" required="{!sectionItem.isRequired}" html-tabindex="{!sectionItem.index}"/>
     <apex:pageblockSectionItem rendered="{!NOT(sectionItem.isDummy)&&(sectionItem.isCustomize)&&Not(isNull(sectionItem.customizeLable))}">
     <apex:outputLabel value="{!sectionItem.customizeLable}"/>
     <apex:outputPanel layout="none">
@@ -222,7 +379,7 @@
 </apex:outputPanel>
 <apex:outputPanel layout="none" rendered="{!NOT(api == 'Hospital__c' && ir.Id != '')}">
 <apex:outputLabel style="font-weight: bold; padding-right: 5px;" value="{!sectionItem.apiLabelMap[api]}"/>
-<apex:inputField value="{!ir[api]}" style="{!sectionItem.apiStyleMap[api]}" rendered="{!NOT(api=='') && (sectionItem.isInput || sectionItem.apiInputMap[api])}" required="{!sectionItem.apiRequireMap[api]}" html-tabindex="{!sectionItem.index}"/>
+<apex:inputField html-field-api="{!api}" value="{!ir[api]}" style="{!sectionItem.apiStyleMap[api]}" rendered="{!NOT(api=='') && (sectionItem.isInput || sectionItem.apiInputMap[api])}" required="{!sectionItem.apiRequireMap[api]}" html-tabindex="{!sectionItem.index}"/>
 <apex:outputPanel style="display:inline-block;{!sectionItem.apiStyleMap[api]}" rendered="{!NOT(api=='') && NOT((sectionItem.isInput || sectionItem.apiInputMap[api]))}">
 <apex:outputField value="{!ir[api]}"/>
 </apex:outputPanel>
@@ -234,7 +391,7 @@
 <apex:outputPanel layout="none">
 <apex:repeat value="{!sectionItem.apiList}" var="api">
 <apex:outputLabel style="font-weight: bold; padding-right: 5px;" value="{!sectionItem.apiLabelMap[api]}"/>
-<apex:inputField value="{!ir[api]}" style="{!sectionItem.apiStyleMap[api]}" rendered="{!NOT(api=='') && (sectionItem.isInput || sectionItem.apiInputMap[api])}" required="{!sectionItem.apiRequireMap[api]}" html-tabindex="{!sectionItem.index}"/>
+<apex:inputField html-field-api="api" value="{!ir[api]}" style="{!sectionItem.apiStyleMap[api]}" rendered="{!NOT(api=='') && (sectionItem.isInput || sectionItem.apiInputMap[api])}" required="{!sectionItem.apiRequireMap[api]}" html-tabindex="{!sectionItem.index}"/>
 <apex:outputPanel style="display:inline-block;{!sectionItem.apiStyleMap[api]}" rendered="{!NOT(api=='') && NOT((sectionItem.isInput || sectionItem.apiInputMap[api]))}">
 <apex:outputField value="{!ir[api]}"/>
 </apex:outputPanel>
diff --git a/force-app/main/default/pages/QISPDF.page b/force-app/main/default/pages/QISPDF.page
index 789c796..40ebef3 100644
--- a/force-app/main/default/pages/QISPDF.page
+++ b/force-app/main/default/pages/QISPDF.page
@@ -1,31 +1,51 @@
-<apex:page controller="QISPDFController" showHeader="false" sidebar="false" renderAs="pdf" action="{!init}" applyHtmlTag="false">
-<!-- <apex:page controller="QISPDFController" showHeader="false" sidebar="false" action="{!init}" applyHtmlTag="false"> -->
+<!-- <apex:page controller="QISPDFController" showHeader="false" sidebar="false" renderAs="pdf" action="{!init}" applyHtmlTag="false"> -->
+<apex:page controller="QISPDFController" showHeader="false" sidebar="false" action="{!init}" applyHtmlTag="false">
 <html>
     <head>
         <style>
-        @page {
-            size: A4 portrait;
-            margin: 5mm 12mm 5mm 12mm;
+            @page {
+                size: A4 portrait;
+                margin: 5mm 12mm 5mm 12mm;
+                
+    /*             @bottom-center { */
+    /*                 content: counter(page) " / " counter(pages); */
+    /*             } */
+            }
             
-/*             @bottom-center { */
-/*                 content: counter(page) " / " counter(pages); */
-/*             } */
-        }
-        
-        table {border-collapse: collapse;}
-        
-/*         td {padding: 0px 0px 0px 0px;} */
-        td.title {text-align: center; font-weight: bold; background-color: #BDBDBD;}
-        td.middle {text-align: center; font-size:120%; font-weight: bold;}
-        td.label {padding-left: 10px;}
-        
+            table {border-collapse: collapse;}
+            
+    /*         td {padding: 0px 0px 0px 0px;} */
+            td.title {text-align: center; font-weight: bold; background-color: #BDBDBD;}
+            td.middle {text-align: center; font-size:120%; font-weight: bold;}
+            td.label {padding-left: 10px;}
+
+            /* 20220221 PI鏀归�� by 寰愪寒 start */
+            body{margin: 0 auto;
+            width: 780px;}
+            #title1{height: 30px;}
+            #title2{height: 110px;}
+            /* 20220221 PI鏀归�� by 寰愪寒 end */
+            
+
         </style>
+        <!-- 20220221 PI鏀归�� by 寰愪寒 start  -->
+        <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
+        <script src="../../soap/ajax/53.0/connection.js" type="text/javascript"></script>
+        <apex:stylesheet value="{!URLFOR($Resource.blockUIcss)}"/>
+        <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}"/>
+        <apex:includeScript value="{!URLFOR($Resource.PleaseWaitDialog)}"/>
+        <apex:includeScript value="{!URLFOR($Resource.jspdf)}"/>
+        <apex:includeScript value="{!URLFOR($Resource.html2canvas)}"/>
+
+        <!-- 20220221 PI鏀归�� by 寰愪寒 end  -->
     </head>
     
-    <body style="font-family: Arial Unicode MS;">
+<body style="font-family: MS Gothic;">
+    <div id="pdf-wrapper">
+        <div id="title1"></div>
         <table width="100%" border="0">
             <tr>
-                <td width="15%">
+                <td width="25%">
                     <!-- <apex:image value="{!$Resource.swmLOGO}" /> -->
                     <table width="100%" border="1" cellspacing="0" style="border-color: red;">
                         <tr><td colspan="2" style="font-size: 6px; font-weight: bold; color: red; text-align: center; padding: 0px 0px 0px 0px;">OLYMPUS</td></tr>
@@ -47,7 +67,7 @@
             </tr>
         </table>
         <div style="height:3px;"></div>
-        <table width="100%" border="1" cellspacing="2" style="font-size: 8pt;">
+        <table width="100%" border="0" cellspacing="2" style="font-size: 8pt;">
             <tr>
                 <td>
                     <table width="100%" border="1" cellspacing="0">
@@ -60,8 +80,8 @@
                         <tr>
                             <td class="label" height="23px">鏈哄櫒鍙�/鎵瑰彿</td>
                             <td class="middle">{!qr.lot_or_serial__c}</td>
-<!--                             <td class="label">OCM绠$悊鍙风爜</td> -->
-<!--                             <td class="middle">{!qr.OCM_control_no__c}</td> -->
+    <!--                             <td class="label">OCM绠$悊鍙风爜</td> -->
+    <!--                             <td class="middle">{!qr.OCM_control_no__c}</td> -->
                         </tr>
                         <tr >
                             <td class="label" height="23px">闂鐜拌薄</td>
@@ -102,13 +122,13 @@
                             <td width="25%" class="label" height="23px">鎻愪氦鑰呬笂鍙�</td>
                             <td width="25%" class="middle">{!usr.Manager.Name}</td>
                             <td width="10%" class="label">鐢佃瘽鍙风爜</td>
-                            <td colspan="2" class="middle">{!qr.Caller_phone__c}</td>
+                            <td colspan="2" class="middle" id="Caller_phone__c">{!qr.Caller_phone__c}</td>
                         </tr>
                         <tr>
                             <td width="25%" class="label" height="23px">鎻愪氦鏃ユ湡</td>
                             <td width="25%" class="middle"><apex:outputField value="{!qr.QIS_Submit_day__c}" /></td>
                             <td width="10%" class="label">鑱旂郴浜�</td>
-                            <td colspan="2" class="middle">{!qr.Responsible_Person_HP__c}</td>
+                            <td colspan="2" class="middle" id="Responsible_Person_HP__c">{!qr.Responsible_Person_HP__c}</td>
                         </tr>
                     </table>
                 </td>
@@ -161,10 +181,10 @@
                             </apex:outputPanel>鍐�
                                 &nbsp;&nbsp;&nbsp;&nbsp;
                                 <apex:outputPanel layout="none"
-                                 rendered="{!if(Not(inGuarantee) && Not(outOfGuarantee) , 'true', 'false')}"
-                                 >&#10004;</apex:outputPanel>
+                                    rendered="{!if(Not(inGuarantee) && Not(outOfGuarantee) , 'true', 'false')}"
+                                    >&#10004;</apex:outputPanel>
                                 <apex:outputPanel layout="none" 
-                               
+                                
                                 rendered="{!if(inGuarantee || outOfGuarantee , 'true', 'false')}"
                                 >&#9633;</apex:outputPanel>澶�
                             </td>
@@ -203,7 +223,7 @@
                             <td colspan="3" class="middle">{!qr.Set_usage_product__c}</td>
                         </tr>
                         <tr>
-                            <td colspan="4" style="height:18px; padding-top: 0px; padding-bottom: 0px; padding-left: 10px;">闂鍐呭鎻忚堪</td>
+                            <td colspan="4" style="height:18px; padding-top: 0px; padding-bottom: 0px; padding-left: 10px;border-bottom: none;border-bottom: none;">闂鍐呭鎻忚堪</td>
                         </tr>
                         <tr>
                             <td colspan="4" style="height:40px; border-top-color: white; font-size:120%; font-weight: bold; vertical-align: top;"><c:PDFWbr targetStr="{!qr.problem_detail__c}" /></td>
@@ -240,13 +260,13 @@
                             <td colspan="13" class="title">OCSM鏈嶅姟鏈儴</td>
                         </tr>
                         <tr>
-                            <td colspan="13" style="height:18px; padding-top: 0px; padding-bottom: 0px; padding-left: 10px;">妫�娴�/鍒嗘瀽鎯呭喌璇﹁堪</td>
+                            <td colspan="13" style="height:18px; padding-top: 0px; padding-bottom: 0px; padding-left: 10px;border-bottom: none;">妫�娴�/鍒嗘瀽鎯呭喌璇﹁堪</td>
                         </tr>
                         <tr>
                             <td colspan="13" style="height:42px; border-top-color: white; font-size:120%; font-weight: bold; vertical-align: top;"><c:PDFWbr targetStr="{!qr.QIS_Reply_Comment__c}" /></td>
                         </tr>
                         <tr>
-                            <td colspan="13" style="height:18px; padding-top: 0px; padding-bottom: 0px; padding-left: 10px;">鍘熷洜</td>
+                            <td colspan="13" style="height:18px; padding-top: 0px; padding-bottom: 0px; padding-left: 10px;border-bottom: none;">鍘熷洜</td>
                         </tr>
                         <tr>
                             <td colspan="13" style="height:42px; border-top-color: white; font-size:120%; font-weight: bold; vertical-align: top;"><c:PDFWbr targetStr="{!qr.Reason_bloken__c}" /></td>
@@ -279,28 +299,28 @@
                             </td>
                         </tr>
                         <tr>
-<!--                             <td colspan="4" style="text-align: center;" height="23px">鐜板搧鏀跺埌鏃�</td> -->
-<!--                             <td colspan="4" style="text-align: center;">纭鏃�</td> -->
+    <!--                             <td colspan="4" style="text-align: center;" height="23px">鐜板搧鏀跺埌鏃�</td> -->
+    <!--                             <td colspan="4" style="text-align: center;">纭鏃�</td> -->
                             <td colspan="3" style="text-align: center;" height="23px">鐜板搧鏀跺埌鏃�</td>
                             <td colspan="3" style="text-align: center;">CDS鏃�</td>
                             <td colspan="3" style="text-align: center;">妫�鏌ユ棩</td>
                             <td colspan="4" style="text-align: center;">纭鏃�</td>
                         </tr>
                         <tr>
-<!--                             <td colspan="4" class="middle" style="height:30px;"><apex:outputField value="{!qr.OCM_RC_RecievedDate__c}" /></td> -->
-<!--                             <td colspan="4" class="middle"><apex:outputField value="{!qr.QIS_Reply_day__c}" /></td> -->
+    <!--                             <td colspan="4" class="middle" style="height:30px;"><apex:outputField value="{!qr.OCM_RC_RecievedDate__c}" /></td> -->
+    <!--                             <td colspan="4" class="middle"><apex:outputField value="{!qr.QIS_Reply_day__c}" /></td> -->
                             <td colspan="3" class="middle" style="height:30px;"><apex:outputField value="{!qr.OCM_RC_RecievedDate__c}" /></td>
                             <td colspan="3" class="middle"><apex:outputField value="{!qr.CDS_date__c}" /></td>
                             <td colspan="3" class="middle"><apex:outputField value="{!qr.RC_inspection_date__c}" /></td>
                             <td colspan="4" class="middle"><apex:outputField value="{!qr.QIS_Reply_day__c}" /></td>
                         </tr>
                         <tr>
-<!--                             <td style="text-align: center; height:40px;">纭鑰�</td> -->
-<!--                             <td colspan="2" width="24%" class="middle">{!qr.RC__r.Alias__c}</td> -->
-<!--                             <td style="text-align: center; color: #D8D8D8">鐩栫珷</td> -->
-<!--                             <td style="text-align: center;">纭鑰�</td> -->
-<!--                             <td colspan="2" width="24%" class="middle">{!qr.RC_manager__r.Alias__c}</td> -->
-<!--                             <td style="text-align: center; color: #D8D8D8">鐩栫珷</td> -->
+    <!--                             <td style="text-align: center; height:40px;">纭鑰�</td> -->
+    <!--                             <td colspan="2" width="24%" class="middle">{!qr.RC__r.Alias__c}</td> -->
+    <!--                             <td style="text-align: center; color: #D8D8D8">鐩栫珷</td> -->
+    <!--                             <td style="text-align: center;">纭鑰�</td> -->
+    <!--                             <td colspan="2" width="24%" class="middle">{!qr.RC_manager__r.Alias__c}</td> -->
+    <!--                             <td style="text-align: center; color: #D8D8D8">鐩栫珷</td> -->
                             <td width="6%" style="height:40px;">纭鑰�</td>
                             <td width="13%" class="middle">{!qr.RC__r.Alias__c}</td>
                             <td width="6%" style="text-align: center; color: #D8D8D8">鐩栫珷</td>
@@ -324,7 +344,7 @@
                             <td colspan="10" class="title">OSH 鍖荤枟鍝佽川淇濋殰閮�</td>
                         </tr>
                         <tr>
-                            <td colspan="9" style="height:18px; padding-top: 0px; padding-bottom: 0px; padding-left: 10px;">妫�娴�/鍒嗘瀽鎯呭喌璇﹁堪<br/></td>
+                            <td colspan="9" style="height:18px; padding-top: 0px; padding-bottom: 0px; padding-left: 10px;border-bottom: none;">妫�娴�/鍒嗘瀽鎯呭喌璇﹁堪<br/></td>
                             <td style="text-align: center;">璐ㄩ噺鍒ゅ畾</td>
                         </tr>
                         <tr>
@@ -368,7 +388,7 @@
                             <td width="6%" style="text-align: center; color: #D8D8D8">鐩栫珷</td>
                             <td width="6%">璐熻矗浜�</td>
                             <td width="13%" class="middle">{!qr.OSH_Manager__r.Alias__c}
-<!--                                 {!IF(Isblank(qr.OSH_Manager__r.BuchangApprovalManager__c), qr.OSH_Manager__r.Alias__c, qr.OSH_Manager__r.BuchangApprovalManager__r.Alias__c)} -->
+    <!--                                 {!IF(Isblank(qr.OSH_Manager__r.BuchangApprovalManager__c), qr.OSH_Manager__r.Alias__c, qr.OSH_Manager__r.BuchangApprovalManager__r.Alias__c)} -->
                             </td>
                             <td width="6%" style="text-align: center; color: #D8D8D8">鐩栫珷</td>
                             <td width="25%" class="middle">{!qr.QIS_no_for_m_BC__c}</td>
@@ -380,9 +400,10 @@
         
         <div style="page-break-after: always;"></div>
         
+        <div id="title2"></div>
         <table width="100%" border="0">
             <tr>
-                <td width="15%">
+                <td width="25%">
                     <table width="100%" border="1" cellspacing="0" style="border-color: red;">
                         <tr><td colspan="2" style="font-size: 6px; font-weight: bold; color: red; text-align: center; padding: 0px 0px 0px 0px;">OLYMPUS</td></tr>
                         <tr>
@@ -403,7 +424,7 @@
             </tr>
         </table>
         <div style="height:3px;"></div>
-        <table width="100%" border="1" cellspacing="2" style="font-size: 8pt;">
+        <table width="100%" border="0" cellspacing="2" style="font-size: 8pt;">
             <tr>
                 <td>
                     <table width="100%" border="1" cellspacing="0">
@@ -416,8 +437,8 @@
                         <tr>
                             <td class="label" height="23px">鏈哄櫒鍙�/鎵瑰彿</td>
                             <td class="middle">{!qr.lot_or_serial__c}</td>
-<!--                             <td class="label">OCM绠$悊鍙风爜</td> -->
-<!--                             <td class="middle">{!qr.OCM_control_no__c}</td> -->
+    <!--                             <td class="label">OCM绠$悊鍙风爜</td> -->
+    <!--                             <td class="middle">{!qr.OCM_control_no__c}</td> -->
                         </tr>
                         <tr >
                             <td class="label" height="23px">闂鐜拌薄</td>
@@ -460,6 +481,89 @@
                 </td>
             </tr>
         </table>
-    </body>
+    </div>
+</body>
+
+<!-- 20220221 PI鏀归�� by 寰愪寒 start  -->
+<script>
+    AWSService.sfSessionId = '{!GETSESSIONID()}';
+    var staticResources = JSON.parse('{!staticResource}');
+    function Fun(pdf){
+        var iframe = document.createElement('iframe');
+        iframe.setAttribute('style', 'position:absolute;right:0; top:0; bottom:0; height:100%; width:100%');
+        document.body.appendChild(iframe);
+        iframe.src = pdf.output('datauristring');
+        for(let e of document.body.childNodes){
+            if( e != iframe && e.style){
+                e.style.display = 'none';
+            }
+        }
+    }
+
+    let id = "pdf-wrapper";
+    var target = document.getElementById(id);
+    function jsPdfDownload(){
+        let pdfName = "娴嬭瘯";
+        let id = "pdf-wrapper";
+        var target = document.getElementById(id);
+        target.style.background = "#FFFFFF";
+        if(pdfName==''||pdfName==undefined) pdfName= getNowFormatDate();
+
+        html2canvas(target, {
+            scale: 2,
+            onrendered:function(canvas) {
+                var contentWidth = canvas.width;
+                var contentHeight = canvas.height;
+
+                //涓�椤祊df鏄剧ずhtml椤甸潰鐢熸垚鐨刢anvas楂樺害;
+                var pageHeight = contentWidth / 592.28 * 841.89;
+                //鏈敓鎴恜df鐨刪tml椤甸潰楂樺害
+                var leftHeight = contentHeight;
+                //椤甸潰鍋忕Щ
+                var position = 0;
+                //a4绾哥殑灏哄[595.28,841.89]锛宧tml椤甸潰鐢熸垚鐨刢anvas鍦╬df涓浘鐗囩殑瀹介珮
+                var imgWidth = 515.28;//595.28//宸﹀彸杈硅窛20
+                var imgHeight = 515.28/contentWidth * contentHeight;//宸﹀彸杈硅窛20
+
+                var pageData = canvas.toDataURL('image/jpeg', 1.0);
+
+                var pdf = new jsPDF('', 'pt', 'a4');
+
+                //鏈変袱涓珮搴﹂渶瑕佸尯鍒嗭紝涓�涓槸html椤甸潰鐨勫疄闄呴珮搴︼紝鍜岀敓鎴恜df鐨勯〉闈㈤珮搴�(841.89)
+                //褰撳唴瀹规湭瓒呰繃pdf涓�椤垫樉绀虹殑鑼冨洿锛屾棤闇�鍒嗛〉
+                if (leftHeight < pageHeight) {
+                    pdf.addImage(pageData, 'JPEG', 40, 0, imgWidth, imgHeight );//宸﹀彸杈硅窛20
+                } else {
+                    while(leftHeight > 0) {
+                        pdf.addImage(pageData, 'JPEG', 40, position, imgWidth, imgHeight)//宸﹀彸杈硅窛20
+                        leftHeight -= pageHeight;
+                        position -= 841.89;
+                        //閬垮厤娣诲姞绌虹櫧椤�
+                        if(leftHeight > 0) {
+                            pdf.addPage();
+                        }
+                    }
+                }
+                Fun(pdf);
+            }
+        })
+    }
+    
+    blockme();
+    document.body.onload = function(){
+        
+        AWSService.query(staticResources.queryUrl, '{!qr.AWS_Data_Id__c}', function(data){
+            unblockUI();
+            document.getElementById("Responsible_Person_HP__c").innerHTML = data.object.responsiblePersonHP;
+            document.getElementById("Caller_phone__c").innerHTML = data.object.callerPhone;
+            
+            setTimeout(() => {
+                jsPdfDownload(); 
+            }, 1500);
+        }, staticResources.token);
+        
+    }
+</script>
+<!-- 20220221 PI鏀归�� by 寰愪寒 end  -->
 </html>
 </apex:page>
\ No newline at end of file
diff --git a/force-app/main/default/pages/SLAReportDetails.page b/force-app/main/default/pages/SLAReportDetails.page
index 160b7f8..d330911 100644
--- a/force-app/main/default/pages/SLAReportDetails.page
+++ b/force-app/main/default/pages/SLAReportDetails.page
@@ -1,4 +1,9 @@
 <apex:page Controller="SLAReportDetailsController" showHeader="false" sidebar="false" id="allPage" action="{!init}" title="淇℃伅鏇存柊">
+    <apex:stylesheet value="{!URLFOR($Resource.blockUIcss)}"/>
+    <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}"/>
+    <apex:includeScript value="{!URLFOR($Resource.PleaseWaitDialog)}"/>
+    <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
+    <apex:includeScript value="/soap/ajax/40.0/connection.js"/>
     <script>
         function cancelJs() {
             window.opener=null;
@@ -12,6 +17,67 @@
                 window.opener.document.getElementById('Page:mainForm:idDayEdit:idActivities:'+index+':EventCSLAInfoId').value = slaInfoId;
                 window.close();
             }
+        }
+
+        var slaInfoStr = JSON.parse('{!slaInfoStr}');
+        var staticResourceContact = JSON.parse('{!staticResourceContact}');
+        var ids = [];
+        var dataIds = [];
+        var condition = '';
+        var contact = {};
+        queryContact();
+        function q1(){
+            var p = new Promise(function(resolve, reject){
+                let queryBack = function queryBack(result) {
+                    let contacts = result.object;
+                    if(contacts == null){
+                        return;
+                    }
+                    for(var i=0;i<result.object.length;i++){
+                        if(result.object[i].sfRecordId != null){
+                            contact[result.object[i].sfRecordId] = result.object[i].lastName
+                        }
+                    }
+                    resolve('success');
+                }
+                let searchPayload = new Object();
+                searchPayload.dataIds = dataIds;
+                searchPayload.contactName = '';
+                AWSService.search(staticResourceContact.searchUrl, JSON.stringify(searchPayload), queryBack, staticResourceContact.token);
+            });
+            return p;
+        }
+        function q2(){
+            var p = new Promise(function(resolve, reject){
+                for(let key in contact){
+                    var k = ''+key;
+                    document.getElementById(k).innerText = contact[k];
+                }
+            });
+            return p;
+        }
+        function queryContact(){
+            blockme();
+            ids.push(slaInfoStr.Visitor1__c!=null?slaInfoStr.Visitor1__c:"")
+            ids.push(slaInfoStr.Visitor2__c!=null?slaInfoStr.Visitor2__c:"")
+            ids.push(slaInfoStr.Visitor3__c!=null?slaInfoStr.Visitor3__c:"")
+            ids.push(slaInfoStr.Visitor4__c!=null?slaInfoStr.Visitor4__c:"")
+            ids.push(slaInfoStr.Visitor5__c!=null?slaInfoStr.Visitor5__c:"")
+            sforce.connection.sessionId = '{!GETSESSIONID()}';
+            for(var i=0;i<ids.length;i++){
+                condition += "," + "\'"+ids[i]+"\'";
+            }
+            condition = condition.substr(1);
+            console.log('condition = ' + condition);
+            var record = sforce.connection.query("select AWS_Data_Id__c from Contact where id in("+condition+")");
+            var records = record.getArray("records");
+            for(var i =0;i<records.length;i++){
+                dataIds.push(records[i].AWS_Data_Id__c);
+            }
+            q1().then(function(data){
+                        return q2(data);
+                    });
+            unblockUI();
         }
     </script>
     <apex:form id="allForm">
@@ -39,27 +105,33 @@
                     </apex:pageBlockSectionItem>
                     <apex:pageBlockSectionItem labelStyle="text-align:left;">
                         <apex:outputLabel value="璁块棶瀵硅薄1"></apex:outputLabel>
-                        <apex:outputField id="Visitor1__c" value="{!slaInfo.Visitor1__c}" /> 
+                        <!-- <apex:outputField id="{!slaInfo.Visitor1__c}" value="{!slaInfo.Visitor1__c}" />  -->
+                        <span id="{!slaInfo.Visitor1__c}">{!slaInfo.Visitor1__c}</span>
                     </apex:pageBlockSectionItem>
                     <apex:pageBlockSectionItem labelStyle="text-align:left;">
                         <apex:outputLabel value="璁块棶瀵硅薄1鐢佃瘽"></apex:outputLabel>
-                        <apex:outputField id="Visitor1Phone" value="{!slaInfo.Visitor1__r.Phone}" /> 
+                        <!-- <apex:outputField id="{!slaInfo.Visitor1__c}_Phone" value="{!slaInfo.Visitor1__r.Phone}" />  -->
+                        <span id="{!slaInfo.Visitor1__c}_Phone">{!slaInfo.Visitor1__r.Phone}</span>
                     </apex:pageBlockSectionItem>
                     <apex:pageBlockSectionItem labelStyle="text-align:left;">
                         <apex:outputLabel value="璁块棶瀵硅薄2"></apex:outputLabel>
-                        <apex:outputField id="Visitor2__c" value="{!slaInfo.Visitor2__c}" /> 
+                        <!-- <apex:outputField id="{!slaInfo.Visitor2__c}" value="{!slaInfo.Visitor2__c}" />  -->
+                        <span id="{!slaInfo.Visitor2__c}">{!slaInfo.Visitor2__c}</span>
                     </apex:pageBlockSectionItem>
                     <apex:pageBlockSectionItem labelStyle="text-align:left;">
                         <apex:outputLabel value="璁块棶瀵硅薄3"></apex:outputLabel>
-                        <apex:outputField id="Visitor3__c" value="{!slaInfo.Visitor3__c}" /> 
+                        <!-- <apex:outputField id="{!slaInfo.Visitor3__c}" value="{!slaInfo.Visitor3__c}" />  -->
+                        <span id="{!slaInfo.Visitor3__c}">{!slaInfo.Visitor3__c}</span>
                     </apex:pageBlockSectionItem>
                     <apex:pageBlockSectionItem labelStyle="text-align:left;">
                         <apex:outputLabel value="璁块棶瀵硅薄4"></apex:outputLabel>
-                        <apex:outputField id="Visitor4__c" value="{!slaInfo.Visitor4__c}" /> 
+                        <!-- <apex:outputField id="{!slaInfo.Visitor4__c}" value="{!slaInfo.Visitor4__c}" />  -->
+                        <span id="{!slaInfo.Visitor4__c}">{!slaInfo.Visitor4__c}</span>
                     </apex:pageBlockSectionItem>
                     <apex:pageBlockSectionItem labelStyle="text-align:left;">
                         <apex:outputLabel value="璁块棶瀵硅薄5"></apex:outputLabel>
-                        <apex:outputField id="Visitor5__c" value="{!slaInfo.Visitor5__c}" />
+                        <!-- <apex:outputField id="{!slaInfo.Visitor5__c}" value="{!slaInfo.Visitor5__c}" /> -->
+                        <span id="{!slaInfo.Visitor5__c}">{!slaInfo.Visitor5__c}</span>
                     </apex:pageBlockSectionItem>
                 </apex:pageBlockSection>
                 <apex:commandButton onclick="save()" rerender="goOrNot,inList" value="淇濆瓨" style="width: 150px;margin-left: 50px;"/>
diff --git a/force-app/main/default/pages/SearchVisitor.page b/force-app/main/default/pages/SearchVisitor.page
index a032a0f..4798584 100644
--- a/force-app/main/default/pages/SearchVisitor.page
+++ b/force-app/main/default/pages/SearchVisitor.page
@@ -1,7 +1,13 @@
 <apex:page id="Page" controller="SearchVisitorController" sidebar="false" showHeader="false" >
     <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}"/>
     <apex:includeScript value="{!URLFOR($Resource.PleaseWaitDialog)}"/>
+    <apex:stylesheet value="{!URLFOR($Resource.blockUIcss)}"/>
+    <!-- 20220217 Li Jun for PIPL start -->
+    <apex:includeScript value="{!URLFOR($Resource.AWSService, 'AWSService.js') }" />
+    <script src="../../soap/ajax/53.0/connection.js" type="text/javascript"></script>
+    <!-- 20220217 Li Jun for PIPL End -->
     <script type="text/javascript">
+        AWSService.sfSessionId = '{!GETSESSIONID()}';
         function addContact(){
             window.opener.showModal();
             
@@ -33,8 +39,12 @@
             for(var i=0; i<5; i++){
                 if(j$(escapeVfId('Page:mainForm:idSearchVisitor:idAddVisitor:' + i + ':idAddHiddenId')).value() != ''){
                     sltList[j] = new Array();
-                    sltList[j][0] = document.getElementById('Page:mainForm:idSearchVisitor:idAddVisitor:' + i + ':idAddName').innerHTML;
-                    sltList[j][1] = j$(escapeVfId('Page:mainForm:idSearchVisitor:idAddVisitor:' + i + ':idAddHiddenId')).value();
+                    //Add by Li Jun for PIPL 20220218 Start
+                    let accountId = j$(escapeVfId('Page:mainForm:idSearchVisitor:idAddVisitor:' + i + ':idAddHiddenId')).value();
+                    sltList[j][0] = contactInfo[sfIdToAWSIdMapValue.get(accountId)].lastName;
+                    //Add by Li Jun for PIPL 20220218 End
+                    //sltList[j][0] = document.getElementById('Page:mainForm:idSearchVisitor:idAddVisitor:' + i + ':idAddName').innerHTML; // Commented by Li Jun for PIPL
+                    sltList[j][1] = accountId;
                     j++;
                 }
             }
@@ -47,8 +57,11 @@
             }
             
             for(var a=0; a<5; a++){
-                window.opener.document.getElementById(setVisitor[a][0]).value = sltList[a][0];
-                window.opener.document.getElementById(setVisitor[a][1]).value = sltList[a][1];
+                //Updated by Li Jun 20220228
+                if(window.opener.document.getElementById(setVisitor[a][0])&&window.opener.document.getElementById(setVisitor[a][1])){
+                    window.opener.document.getElementById(setVisitor[a][0]).value = sltList[a][0];
+                    window.opener.document.getElementById(setVisitor[a][1]).value = sltList[a][1];
+                }               
             }
 
             window.close();
@@ -61,7 +74,7 @@
             var addJob = document.getElementById('Page:mainForm:idSearchVisitor:idRezultVisitor:' + index + ':idJob').innerHTML;
             var addPhone = document.getElementById('Page:mainForm:idSearchVisitor:idRezultVisitor:' + index + ':idPhone').innerHTML;
             var addMyDr = document.getElementById('Page:mainForm:idSearchVisitor:idRezultVisitor:' + index + ':idMyDr').innerHTML;
-            var     addPlease_Delete = document.getElementById('Page:mainForm:idSearchVisitor:idRezultVisitor:' + index + ':idPlease_Delete').innerHTML;
+            var addPlease_Delete = document.getElementById('Page:mainForm:idSearchVisitor:idRezultVisitor:' + index + ':idPlease_Delete').innerHTML;
             
             for(var i=0; i<5; i++){
                 if(j$(escapeVfId('Page:mainForm:idSearchVisitor:idAddVisitor:' + i + ':idAddHiddenId')).value() == addId){
@@ -77,7 +90,7 @@
                     document.getElementById('Page:mainForm:idSearchVisitor:idAddVisitor:' + i + ':idAddDep').innerHTML = addDep;
                     document.getElementById('Page:mainForm:idSearchVisitor:idAddVisitor:' + i + ':idAddJob').innerHTML = addJob;
                     document.getElementById('Page:mainForm:idSearchVisitor:idAddVisitor:' + i + ':idAddPhone').innerHTML = addPhone;
-                    document.getElementById('Page:mainForm:idSearchVisitor:idAddVisitor:' + i + ':idAddMyDr').innerHTML = addMyDr;
+                    document.getElementById('Page:mainForm:idSearchVisitor:idAddVisitor:' + i + ':idAddMyDr').innerHTML = addMyDr;                  
                     break;
                 }
             }
@@ -92,7 +105,192 @@
             document.getElementById('Page:mainForm:idSearchVisitor:idAddVisitor:' + index + ':idAddPhone').innerHTML = '銆�';
             document.getElementById('Page:mainForm:idSearchVisitor:idAddVisitor:' + index + ':idAddMyDr').innerHTML = '<img src=\"/img/checkbox_unchecked.gif\" width=\"16\" height=\"16\" class=\"checkImg\" />';
         }
+
+        //Add By Li Jun 20220228 Start for PIPL
+        // var sfIdToAWSContact = new Object();
+        var staticResources = JSON.parse('{!staticResource}');
+        var contactAWSIds = JSON.parse('{!contactAWSIds}');
+        var searchByLastName = '';
+        var contactInfo = {};
+        var sfIdToAWSIdMapValue = new Map();
+        var aws_result = {};
+        var selectedEditIndex = 0;
+        var selectedAwsDataId = '';
+        searchContactAll();
+        function preparePayloadForSearchContact(){
+            let searchPayload = new Object();
+            searchPayload.dataIds = contactAWSIds;
+            searchPayload.contactName = searchByLastName;
+            return JSON.stringify(searchPayload);
+        }
+
+        //Search Contact From AWS
+        function searchContactAll(){
+            let data = preparePayloadForSearchContact();
+            let searchCallBack = function searchCallBack(result){
+                let contacts = result.object;
+                if(contacts == null){
+                    return;
+                }
+                for(var i=0;i<contacts.length;i++){
+                    let temp = {}
+                    temp.lastName = contacts[i].lastName?contacts[i].lastName:'';
+                    temp.phone = contacts[i].phone?contacts[i].phone:'';
+                    temp.doctorDivision1 = contacts[i].doctorDivision1? contacts[i].doctorDivision1:'';
+                    temp.type = contacts[i].type? contacts[i].type:'';
+                    contactInfo[contacts[i].dataId] = temp;
+                    if(contacts[i].sfRecordId){
+                        sfIdToAWSIdMapValue.put(contacts[i].sfRecordId,contacts[i].dataId);
+                    }                    
+                }
+                console.log('AWS Contact Result:'+JSON.stringify(contactInfo));
+            };
+            AWSService.search(staticResources.searchUrl,data,searchCallBack,staticResources.token);
+        }
+
+        function queryContactProcess(){
+            console.log('Query Contact process.');         
+            //1. get contact name from search box     
+            let searchByLastName = document.getElementById('Page:mainForm:idSearchVisitor:searchContactName').value; 
+            //2. inovke aws service
+            let contactAwsIds = new Set();
+            for(var key in contactInfo){
+                if(contactInfo[key].lastName.includes(searchByLastName)){
+                    contactAwsIds.add(key);
+                }
+            }
+            if(contactAwsIds.size == 0){
+                clearLineInfoList();
+                return;
+            }
+            searchContactAll();
+            //3. render the current page 
+            serContact(JSON.stringify(Array.from(contactAwsIds)));
+        }
+
+        function showPIDiv(dataId,obj){ 
+            console.log('Selected Record:'+dataId);
+            //check sf id
+            let awsDataId = dataId;
+            if(dataId.length == 1){
+                let sfId = j$(escapeVfId('Page:mainForm:idSearchVisitor:idAddVisitor:' + dataId + ':idAddHiddenId')).val()
+                awsDataId = sfIdToAWSIdMapValue.get(sfId);聽
+            }
+            if(awsDataId){               
+                console.log('AWS Data Id:'+ awsDataId);
+                console.log('AWS Data Info:'+ JSON.stringify(contactInfo));
+                let parentNode = document.getElementById(obj.id);
+                let createDiv = document.createElement("div");  
+                createDiv.id = parentNode.id+"_PI";  
+                let piInformation = '{!$Label.Visitor_Name}:'+contactInfo[awsDataId].lastName +'\n{!$ObjectType.Contact.fields.Doctor_Division1__c.Label}:'+contactInfo[awsDataId].doctorDivision1+'\n{!$ObjectType.Lead.fields.Phone.Label}:'+contactInfo[awsDataId].phone
+                createDiv.innerText = piInformation;
+                let x=window.event.x;
+                let y=window.event.y; 
+                createDiv.style.left=x;  
+                createDiv.style.top=y;  
+                createDiv.style.background = "#dddddd";
+                createDiv.style.position = "absolute";
+                parentNode.appendChild(createDiv);  
+            }            
+        }
+
+        function hidePIDiv(obj){
+            document.getElementById(obj.id+'_PI').remove();
+        }
+       
+        function setSelectedEditIndex(index){          
+            selectedEditIndex = index;
+            console.log('Selected edit index:'+selectedEditIndex);
+        }
+    
+        function assignDencrypted(){
+            let selectedEditSFId = j$(escapeVfId('Page:mainForm:idSearchVisitor:idAddVisitor:' + selectedEditIndex + ':idAddHiddenId')).val()
+            selectedAwsDataId = sfIdToAWSIdMapValue.get(selectedEditSFId);
+            console.log('edit awsId:'+selectedAwsDataId);
+            document.getElementById('Page:mainForm:AWS_Data_Id__c').value = selectedAwsDataId;         
+            if(contactInfo.hasOwnProperty(selectedAwsDataId)){
+                let selectedAWSData = contactInfo[selectedAwsDataId];
+                let contactTypeNode = document.getElementById("Page:mainForm:idSearchVisitor:updateContactType");
+                contactTypeNode.value = selectedAWSData.type;
+                if(contactTypeNode.value){
+                    jQuery(contactTypeNode).change();
+                }
+                document.getElementById("Page:mainForm:idSearchVisitor:updateContactLastName").value = selectedAWSData.lastName;
+                document.getElementById("Page:mainForm:idSearchVisitor:updateContactPhone").value = selectedAWSData.phone;
+                document.getElementById("Page:mainForm:idSearchVisitor:updateContactDoctorDivision").value = selectedAWSData.doctorDivision1;
+            }
+        }
+
+        function GetAWSResultObj(){
+            if(aws_result && aws_result.object && aws_result.object.length > 0){
+                return aws_result.object[0];
+            }
+            return null;
+        }
+
+        function SetEditObj(){
+            let obj = GetAWSResultObj();
+            if(obj){
+                console.log('Result from AWS:'+JSON.stringify(obj));
+                document.getElementById('Page:mainForm:AWS_Data_Id__c').value = obj.dataId;
+                
+                document.getElementById("Page:mainForm:idSearchVisitor:updateContactLastName").value = obj.lastName;
+                document.getElementById("Page:mainForm:LastName_Encrypted__c").value = obj.lastNameEncrypt;
+
+                document.getElementById("Page:mainForm:idSearchVisitor:updateContactPhone").value = obj.phone;
+                document.getElementById("Page:mainForm:Phone_Encrypted__c").value = obj.phoneEncrypt;
+
+                document.getElementById("Page:mainForm:idSearchVisitor:updateContactType").value = obj.type;
+                document.getElementById("Page:mainForm:Type_Encrypted__c").value = obj.typeEncrypt;
+
+                document.getElementById("Page:mainForm:idSearchVisitor:updateContactDoctorDivision").value = obj.doctorDivision1;
+                document.getElementById("Page:mainForm:Doctor_Division1_Encrypted__c").value = obj.doctorDivision1Encrypt;
+            }
+            
+        }
+
+        function ProcessPIForAWS(sobjJson, payloadForNewPI) {
+            let url = staticResources.newUrl
+            let moduleName = AWSService.insertModule;
+            if (selectedAwsDataId) {
+                moduleName = AWSService.updateModule;
+            	url = staticResources.updateUrl
+            }
+            console.log('Payload for AWS:'+payloadForNewPI + ' Module Name:'+moduleName);
+            AWSService.postAWS(url,moduleName, payloadForNewPI, function(result){
+                aws_result = result;
+                SetEditObj();
+                saveNew();
+            }, staticResources.token);
+        }
+
+        function GetEditObj(){
+            return JSON.stringify([{
+                lastName : document.getElementById("Page:mainForm:idSearchVisitor:updateContactLastName").value,
+                phone : document.getElementById("Page:mainForm:idSearchVisitor:updateContactPhone").value,
+                dataId:selectedAwsDataId
+            }]);
+        }
+
+        function saveContactForAWS(){
+            document.getElementById("errorMsg").innerHTML = '';
+            if(!document.getElementById("Page:mainForm:idSearchVisitor:updateContactLastName").value){
+                document.getElementById("errorMsg").innerHTML = '<strong>閿欒:</strong> 蹇呴』濉啓銆�';
+                return;
+            }
+            blockme();
+            ProcessPIForAWS({},GetEditObj());
+        }
+        function Trans(){
+            AWSService.postAWS(staticResources.transactionUrl,AWSService.confirmTrans, JSON.stringify({
+                    "txId":aws_result.txId,
+                    "isSuccess":1
+            }), function(result){
+                window.location.reload();
+            }, staticResources.token);
+        }
         
+        //Add By Li Jun 20220228 for PIPL End
     </script>
     <style type="text/css">
         div#iframelike {
@@ -111,15 +309,33 @@
     </style>
     <apex:outputPanel id="all">
         <apex:form id="mainForm">
+        <!-- Search Contact By Li Jun 20220214 Start-->
+        <apex:actionFunction name="serContact" action="{!serContact}" rerender="idRezultVisitor">
+            <apex:param name="awsContactIds" assignTo="{!awsContactIds}" value="" />
+        </apex:actionFunction>
+        <apex:actionFunction name="clearLineInfoList" action="{!clearLineInfoList}" rerender="mainForm" onComplete="unblockUI();">
+        </apex:actionFunction>
+        <!-- Search Contact By Li Jun 20220214 End-->
         <apex:actionFunction name="updContactP" action="{!updContactP}" rerender="idRezultVisitor,idRegistration">
         <apex:param name="index" assignTo="{!index}" value="" />
         </apex:actionFunction>
         <apex:actionFunction name="updContactM" action="{!updContactM}" rerender="idRezultVisitor">
         <apex:param name="index" assignTo="{!index}" value="" />
         </apex:actionFunction>
-        <apex:actionFunction name="editVistor" action="{!editVistor}" rerender="idRegistration" oncomplete="setButtonDisable(document.getElementById('Page:mainForm:idSearchVisitor:idRegSave'), false);">
-        <apex:param name="index" assignTo="{!index}" value=""/>
+        <apex:actionFunction name="editVistor" action="{!editVistor}" rerender="idRegistration" oncomplete="assignDencrypted();setButtonDisable(document.getElementById('Page:mainForm:idSearchVisitor:idRegSave'), false);">
+            <apex:param name="index" assignTo="{!index}" value=""/>
         </apex:actionFunction>
+        <apex:actionFunction name="saveNew" action="{!regContact}" rerender="idRegistration,idRezultVisitor,idAddVisitor,idMessage" onComplete="Trans();">
+        </apex:actionFunction>
+         <!-- Add By Li Jun for PIPL 20220228 Start -->
+         <apex:inputHidden id="LastName_Encrypted__c" value="{!rc.LastName_Encrypted__c}"/>
+         <apex:inputHidden id="Phone_Encrypted__c" value="{!rc.Phone_Encrypted__c}"/>
+
+         <apex:inputHidden id="Type_Encrypted__c" value="{!rc.Type_Encrypted__c}"/>
+         <apex:inputHidden id="Doctor_Division1_Encrypted__c" value="{!rc.Doctor_Division1_Encrypted__c}"/>
+
+         <apex:inputHidden id="AWS_Data_Id__c" value="{!rc.AWS_Data_Id__c}"/>
+         <!-- Add By Li Jun for PIPL 20220221 End -->
             <apex:pageBlock id="idSearchVisitor" >
                 <table width="1060" height="50" border="0">
                     <tr>
@@ -154,7 +370,7 @@
                         <th>{!$Label.Search_Condition}</th>
                         <td>&nbsp;</td>
                         <th>{!$Label.Last_Name}</th>
-                        <th>{!$Label.First_Name}</th>
+                        <!-- <th>{!$Label.First_Name}</th> -->
                         <td>&nbsp;</td>
                         <th>{!$Label.Attribute}</th>
                         <td>&nbsp;</td>
@@ -170,8 +386,9 @@
                         <td>&nbsp;</td>
                         <td>&nbsp;</td>
                         <td>&nbsp;</td>
-                        <td><apex:inputText value="{!sc.Search_LastName__c}" style="width:80px" required="false"/></td>
-                        <td><apex:inputText value="{!sc.Search_FirstName__c}" style="width:80px" required="false"/></td>
+                        <!-- Add Id for pipl by Li Jun 20220214 -->
+                        <td><apex:inputText id="searchContactName" value="{!sc.Search_LastName__c}" style="width:80px" required="false"/></td>
+                        <!-- <td><apex:inputText value="{!sc.Search_FirstName__c}" style="width:80px" required="false"/></td>  commented for pipl by Li Jun 20220214--> 
                         <td>&nbsp;</td>
                         <th><apex:inputField value="{!sc.Type__c}" /></th>
                         <td>&nbsp;</td>
@@ -181,7 +398,9 @@
                         <td>&nbsp;</td>
                         <th>&nbsp;</th>
                         <td>&nbsp;</td>
-                        <td><apex:commandButton value="{!$Label.Search}" action="{!serContact}" style="width:100px" rerender="idRezultVisitor" /></td>
+                        <!-- Updated By Li Jun for PIPL 20220214 -->
+                        <td><input class="btn" type="Button" value="{!$Label.Search}" onclick="queryContactProcess()" style="width:100px" /></td>
+                        <!-- <td><apex:commandButton value="{!$Label.Search}" action="{!serContact}" style="width:100px" rerender="idRezultVisitor" /></td> -->
                     </tr>
                     <tr>
                         <td style="border-bottom: 1px solid #888;" colspan="15">&nbsp;</td>
@@ -194,11 +413,11 @@
                         <apex:pageBlockTable id="idRezultVisitor" value="{!scwl}" var="scw" border="1" columns="8" columnsWidth="47px,90px,,90px,180x,90px,40px,200px">
                             <apex:column >
                                 <apex:facet name="header">{!$Label.Selected}</apex:facet>
-                                <input type="button" id="idSlt" value="{!$Label.Selected}" onclick="sltContact('{!scw.index}');" class="btn" style="width:40px"/>
+                                <input type="button" id="idSlt" value="{!$Label.Selected}" onclick="sltContact('{!scw.index}');"  class="btn" style="width:40px"/>
                             </apex:column>
                             <apex:column >
                                 <apex:facet name="header">{!$Label.Visitor_Name}</apex:facet>
-                                <apex:outputLink value="/{!scw.con.Id}" id="idName" target="_blank">{!scw.con.Name}</apex:outputLink>
+                                <apex:outputLink onmouseover="showPIDiv('{!scw.con.AWS_Data_Id__c}',this)"  onmouseout="hidePIDiv(this)" value="/{!scw.con.Id}" id="idName" target="_blank">{!scw.con.Name}</apex:outputLink>
                                 <apex:inputText id="idHiddenId" value="{!scw.conid}" style="display:none" />
                             </apex:column>
                             <apex:column >
@@ -247,7 +466,8 @@
                             </apex:column>
                             <apex:column >
                                 <apex:facet name="header">{!$Label.Visitor_Name}</apex:facet>
-                                <apex:outputText id="idAddName" value="{!IF(acw.con.Name==null,'銆�',acw.con.Name)}" />
+                                <!-- <apex:outputText id="idAddName" value="{!IF(acw.con.Name==null,'銆�',acw.con.Name)}" /> -->
+                                <apex:outputLink onmouseover="showPIDiv('{!acw.index}',this)"  onmouseout="hidePIDiv(this)" value="/{!acw.conid}" id="idAddName" target="_blank">{!IF(acw.con.Name==null,'銆�',acw.con.Name)}</apex:outputLink>
                                 <apex:inputText id="idAddHiddenId" value="{!acw.conid}" style="display:none" />
                             </apex:column>
                             <apex:column >
@@ -268,7 +488,7 @@
                             </apex:column>
                             <apex:column >
                                 <apex:facet name="header">{!$Label.Edit}</apex:facet>
-                                <input type="button" id="idEdit" value="{!$Label.Edit}" onclick="setButtonDisable(document.getElementById('Page:mainForm:idSearchVisitor:idRegSave'), true);editVistor('{!acw.index}');" class="btn" style="width:40px"/>
+                                <input type="button" id="idEdit" value="{!$Label.Edit}" onclick="setSelectedEditIndex('{!acw.index}');setButtonDisable(document.getElementById('Page:mainForm:idSearchVisitor:idRegSave'), true);editVistor('{!acw.index}');" class="btn" style="width:40px"/>
                             </apex:column>
                         </apex:pageBlockTable>
                         </div>
@@ -283,7 +503,7 @@
                                 <input type="button" value="{!$Label.Set}" onclick="addContact();" class="btn"/>
                             </td>
                             <td style="text-align:right">
-                                <apex:commandButton id="idRegSave" value="{!$Label.Registration}" action="{!regContact}" style="width:60px" rerender="idRegistration,idRezultVisitor,idAddVisitor,idMessage"/>
+                                <apex:commandButton id="idRegSave" value="{!$Label.Registration}" onclick="saveContactForAWS();" style="width:60px" rerender="dummy" />
                             </td>
                         </tr></table>
                     </td></tr>
@@ -298,13 +518,13 @@
                     <tr>
                         <td width= "20">&nbsp;</td>
                         <th width= "80">{!$Label.Attribute}</th>
-                        <th width= "80" ><apex:inputField value="{!rc.Type__c}" style="width:66px"/></th>
+                        <th width= "80" ><apex:inputField id="updateContactType" value="{!rc.Type__c}" style="width:66px"/></th>
                         <th width= "80" style="text-align:right">{!$Label.Last_Name}</th>
-                        <td width= "80" ><span><div class="requiredInput"><div class="requiredBlock"></div><apex:inputField value="{!rc.Search_LastName__c}" style="width:70px" /></div></span></td>
-                        <th width= "80" style="text-align:right">{!$Label.First_Name}</th>
-                        <td width= "160" colspan="2" rowspan="2"><apex:inputField value="{!rc.FirstName}" style="width:150px" /></td>
+                        <td width= "80" ><span><div class="requiredInput"><div class="requiredBlock"></div><apex:inputField id="updateContactLastName" value="{!rc.Search_LastName__c}" style="width:70px" /><div id="errorMsg" class="errorMsg"></div></div></span></td>
+                        <!-- <th width= "80" style="text-align:right">{!$Label.First_Name}</th>
+                        <td width= "160" colspan="2" rowspan="2"><apex:inputField value="{!rc.FirstName}" style="width:150px" /></td> -->
                         <th width= "80" style="text-align:right">{!$ObjectType.Lead.fields.Phone.Label}</th>
-                        <td width= "80"><apex:inputField value="{!rc.phone}" style="width:110px" /></td>
+                        <td width= "80"><apex:inputField id="updateContactPhone" value="{!rc.phone}" style="width:110px" /></td>
                         <th width= "80" style="text-align:right">{!$ObjectType.Contact.fields.Supplement__c.Label}</th>
                         <th width= "130" colspan="2" rowspan="3"><apex:inputField value="{!rc.Supplement__c}" style="width:130px" /></th>
                         
@@ -313,7 +533,7 @@
                     <tr>
                         <td>&nbsp;</td>
                         <th colspan="2">{!$ObjectType.Contact.fields.Doctor_Division1__c.Label}</th>
-                        <th colspan="2"><apex:inputField value="{!rc.Doctor_Division1__c}" style="width:150px"/></th>
+                        <th colspan="2"><apex:inputField id="updateContactDoctorDivision" value="{!rc.Doctor_Division1__c}" style="width:150px"/></th>
                         <th style="text-align:right">{!$Label.Department_Name}</th>
                         <th colspan="3"><apex:inputField value="{!rc.Account_Visitor_Search__c}" style="width:280px" /></th>
                         <th>{!$Label.MyDr}</th>
diff --git a/force-app/main/default/pages/SimpleEventRegister.page b/force-app/main/default/pages/SimpleEventRegister.page
index 37f50b1..864788a 100644
--- a/force-app/main/default/pages/SimpleEventRegister.page
+++ b/force-app/main/default/pages/SimpleEventRegister.page
@@ -6,6 +6,10 @@
 <apex:includeScript value="{!URLFOR($Resource.jquerysuggestjs)}"/>
 <apex:includeScript value="{!URLFOR($Resource.connection20)}"/>
 <apex:includeScript value="{!URLFOR($Resource.apex20)}"/>
+<!-- Add By Li Jun for PIPL 20220225 -->
+<apex:includeScript value="{!URLFOR($Resource.AWSService, 'AWSService.js') }" />
+<script src="../../soap/ajax/53.0/connection.js" type="text/javascript"></script>
+<!-- Add By Li Jun for PIPL 20220225 -->
 <script>
   var ros = '{!$User.State_Hospital__c}';
   var act = '鐥呴櫌';
@@ -282,6 +286,45 @@
     //2021-08-10  mzy  update  SWAG-C5R6GW   璇环浠诲姟鏂板瀛楁  end
   }
 
+  //Add By Li Jun 20220225 for PIPL Start
+  AWSService.sfSessionId = '{!GETSESSIONID()}';
+    var staticResources = JSON.parse('{!staticResource}');
+    var contactAWSIds = JSON.parse('{!contactAWSIds}');
+    console.log('contactAWSIds:'+JSON.stringify(contactAWSIds));
+    var sfIdToContactInfo = {};
+    function preparePayloadForSearchContact(){
+        let searchPayload = new Object();
+        searchPayload.dataIds = contactAWSIds;
+        searchPayload.contactName = '';
+        return JSON.stringify(searchPayload);
+    }
+    function searchContactAll(){
+        let data = preparePayloadForSearchContact();
+        let searchCallBack = function searchCallBack(result){
+            let contacts = result.object;
+            if(contacts == null){
+                return;
+            }
+            for(var i=0;i<contacts.length;i++){
+                let temp = {}
+                temp.lastName = contacts[i].lastName?contacts[i].lastName:'';                       
+                if(contacts[i].sfRecordId){
+                    sfIdToContactInfo[contacts[i].sfRecordId] = temp;
+                }                    
+            }
+            console.log('AWS Result:'+JSON.stringify(sfIdToContactInfo));
+            let v1Id = j$(escapeVfId('page:form:all:visitSettings:visitor1Id')).value();
+            if(sfIdToContactInfo.hasOwnProperty(v1Id)){
+                document.getElementById("page:form:all:visitSettings:visitor1").value = sfIdToContactInfo[v1Id].lastName;
+            }  
+            let v2Id = j$(escapeVfId('page:form:all:visitSettings:visitor2Id')).value();
+            if(sfIdToContactInfo.hasOwnProperty(v2Id)){
+                document.getElementById("page:form:all:visitSettings:visitor2").value = sfIdToContactInfo[v2Id].lastName;
+            }                        
+        };
+        AWSService.search(staticResources.searchUrl,data,searchCallBack,staticResources.token);
+    }
+    //Add By Li Jun 20220225 for PIPL End 
 </script>
 <style>
     .visitorplace_results {
@@ -388,10 +431,20 @@
         <!-- 20200922 zh SWAG-BS6BYA 鏍峰紡璋冩暣 start -->
 
         <!-- 璁块棶瀵硅薄1 -->
-              <apex:inputText label="璁块棶瀵硅薄" value="{!targetEvent.Visitor1__c}" rendered="{!isHospital}" id="visitor1" onchange="clearVisitorId('visitor1Id');" onClick="searchVisitor2(value);"/>
+              <!-- <apex:inputText label="璁块棶瀵硅薄" value="{!targetEvent.Visitor1__c}" rendered="{!isHospital}" id="visitor1" onchange="clearVisitorId('visitor1Id');" onClick="searchVisitor2(value);"/> -->
+              <!-- Add by Li Jun for PIPL 20220303 Start -->
+              <apex:inputText label="璁块棶瀵硅薄" value="{!idVisitor1PI}" rendered="{!isHospital}" id="visitor1" onchange="clearVisitorId('visitor1Id');" onClick="searchVisitor2(value);"/>
+              <!-- Add by Li Jun for PIPL 20220303 End -->
               <apex:pageblockSectionItem />
         <!-- 璁块棶瀵硅薄2 -->
-              <apex:inputText label=" " value="{!targetEvent.Visitor2__c}" rendered="{!isHospital}" id="visitor2" onchange="clearVisitorId('visitor2Id');" onClick="searchVisitor2(value);"/>
+              <!-- <apex:inputText label=" " value="{!targetEvent.Visitor2__c}" rendered="{!isHospital}" id="visitor2" onchange="clearVisitorId('visitor2Id');" onClick="searchVisitor2(value);"/> -->
+               <!-- Add by Li Jun for PIPL 20220303 Start -->
+              <apex:inputText label=" " value="{!idVisitor2PI}" rendered="{!isHospital}" id="visitor2" onchange="clearVisitorId('visitor2Id');" onClick="searchVisitor2(value);"/>
+              <!-- Add by Li Jun for PIPL 20220303 End -->
+              <script>
+                    console.log('Load AWS Data');
+                    searchContactAll();
+              </script>
               <apex:pageblockSectionItem rendered="{!isAgent}"/>
               <!-- <apex:pageblockSectionItem /> -->
         <!-- 璇环1 -->
diff --git a/force-app/main/default/pages/StartTrading.page b/force-app/main/default/pages/StartTrading.page
index c9806e8..25bea33 100644
--- a/force-app/main/default/pages/StartTrading.page
+++ b/force-app/main/default/pages/StartTrading.page
@@ -1,72 +1,137 @@
 <apex:page id="Page" standardController="Lead" extensions="StartTradingController" sidebar="false" action="{!init}">
-	<apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}"/>
-    <script type="text/javascript">
-		function requiredCheck(){
+	<apex:stylesheet value="{!URLFOR($Resource.blockUIcss)}" />
+	<apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
+	<apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}" />
+	<apex:includeScript value="{!URLFOR($Resource.PleaseWaitDialog)}" />
+	<script src="../../soap/ajax/53.0/connection.js" type="text/javascript"></script>
+
+	<script type="text/javascript">
+		var staticResources = JSON.parse('{!staticResource}');
+		var selectedIndexContact = 0;
+		function setSelectedIndex(){
+			var myselect=document.getElementById("Page:mainForm:idDayEdit:idCon")
+			selectedIndexContact=myselect.selectedIndex
+		}
+		function preparePayloadForSearchContact() {
+			let accountId = document.getElementById('Page:mainForm:idDayEdit:idDep').value;
+			if (accountId != '--鏃�--') {
+				blockme();
+				console.log('accountId:' + accountId);
+				//query contact
+				sforce.connection.sessionId = '{!GETSESSIONID()}';
+				let result = sforce.connection.query("SELECT Id,Name,AWS_Data_Id__c from Contact where AccountId='" + accountId + "'");//sfid,awsdataId
+				let dataIds = [];
+				let records = result.getArray("records");
+				for (let i = 0; i < records.length; i++) {
+					dataIds.push(records[i].AWS_Data_Id__c)
+				}
+				let searchPayload = new Object();
+				searchPayload.dataIds = dataIds;
+				searchPayload.contactName = '';
+				AWSService.search(staticResources.searchUrl, JSON.stringify(searchPayload), queryBack, staticResources.token);
+			}
+		}
+
+		var queryBack = function queryBack(result) {
+			let select = document.getElementById('Page:mainForm:idDayEdit:idCon');
+			//娓呴櫎select閲岄潰鐨勫��
+			for (var i = select.childNodes.length - 1; i >= 1; i--) {
+				select.removeChild(select.childNodes[i]);
+			}
+			if (select.options[0] == undefined) {
+				let blankValue = new Option();
+				blankValue.value = '--鏃�--';
+				blankValue.text = '--鏃�--';
+				select.options.add(blankValue);
+			}
+			for (var i = 0; i < result.object.length; i++) {
+				if (result.object[i].sfRecordId) {
+					let a = new Option();
+					a.value = result.object[i].sfRecordId;
+					a.text = result.object[i].lastName.replace(/"/g, "");
+					select.options.add(a);
+				}
+			}
+			if(selectedIndexContact !=0 ){
+				var myselect=document.getElementById("Page:mainForm:idDayEdit:idCon").options
+				myselect[selectedIndexContact].selected = true;
+			}
+			unblockUI();
+		}
+		//2021/02/21 寮犲崕寤� 鏌ユ壘瀹㈡埛浜哄憳 end
+
+		function requiredCheck() {
 			var val = document.getElementById('Page:mainForm:idDayEdit:idDep').selectedIndex;
 			if (val == 0) {
 				//銆岃ê鐧傜鍚嶃倰閬告姙銇椼仸銇忋仩銇曘亜銆傘��
 				alert('{!$Label.StartTrading_Alert}');
 			}
 		}
-    </script>
-    <style>
-    </style>
-    <!-- 銉兗銉� 鍙栧紩銇枊濮� -->
-    <apex:sectionHeader title="{!$ObjectType.Lead.Label}" subtitle="{!$Label.StartTrading_Subtitle}"/>
-	    <apex:form id="mainForm">
-	        <apex:pageMessages />
-	        <apex:pageBlock id="idDayEdit" title="" mode="edit" >
-		        <apex:pageBlockButtons >
-		        	<!-- 鍙栧紩銇枊濮� -->
-		            <apex:commandButton action="{!start}" value="{!$Label.StartTrading_Subtitle}" onclick="requiredCheck();" />
-		            <!-- 銈儯銉炽偦銉� -->
-		            <apex:commandButton action="{!cancel}" value="{!$Label.StartTrading_Cancel}"/>
-		        </apex:pageBlockButtons>
-		        <div class="pbSubheader first tertiaryPalette">
-                    <span class="pbSubExtra"><span class="requiredLegend"><span class="requiredExampleOuter"><span class="requiredExample">&nbsp;</span></span><span class="requiredText"> = 蹇呭~淇℃伅</span></span></span><!-- 蹇呴爤鎯呭牨 -->
-                    <!-- 鍩烘湰鎯呭牨 -->
-                    <h3>{!$Label.Basic_Information}</h3>
-                </div>
-                <table>
-                	<tr>
-                		<td width="100px"></td>
-                		<!-- 瑷虹檪绉戝悕 -->
-                		<td>{!$Label.Department_Name}</td>
-                		<td>
-                			<apex:selectList value="{!sltDep}" multiselect="false" size="1" id="idDep" style="width:400px;" >
-			                	<apex:selectOptions value="{!depList}" ></apex:selectOptions>
-				                <apex:actionSupport event="onchange" onsubmit="" onbeforedomupdate="" action="{!depChange}" rerender="idCon">
-				                    <apex:param name="sltD" value="{!sltDep}"/>
-				                </apex:actionSupport>
-				            </apex:selectList>
-		                </td>
-	                </tr>
-	                <tr>
-	                	<td width="100px"></td>
-	                	<!-- 鎷呭綋鑰� -->
-	                	<td>{!$ObjectType.Contact.Label}</td>
-	                	<td><apex:selectList value="{!sltCon}" multiselect="false" size="1" id="idCon" style="width:200px;">
-				                	<apex:selectOptions value="{!conList}" />
-				                </apex:selectList>
-				        </td>
-	                </tr>
-	                <tr>
-	                	<td width="100px"></td>
-	                	<td>
-	                	{!$ObjectType.lead.fields.SI_OppoLeadSec__c.label}
-	                	</td>
-	                	<td>
-	                		<apex:inputField value="{!lead.SI_OppoLeadSec__c}"/>
-	                	</td>
-	                </tr>
-	                 <tr>
-	                	<td width="100px"></td>
-	                	<!-- 鏄惁SI鏈儴鍏卞悓鎺ㄨ繘璇环 -->
-	                	<td>鏄惁SI鏈儴鍏卞悓鎺ㄨ繘璇环</td>
-	                	<td><apex:inputCheckbox value="{!SI_Flg}" id="SI_Flg" />
-				        </td>
-	                </tr>
-	            </table>
-	        </apex:pageBlock>
-	    </apex:form>
+	</script>
+	<style>
+	</style>
+	<!-- 銉兗銉� 鍙栧紩銇枊濮� -->
+	<apex:sectionHeader title="{!$ObjectType.Lead.Label}" subtitle="{!$Label.StartTrading_Subtitle}"/>
+	<apex:form id="mainForm">
+		<apex:pageMessages id="errorMsg" />
+		<apex:pageBlock id="idDayEdit" title="" mode="edit" >
+			<apex:pageBlockButtons >
+				<!-- 鍙栧紩銇枊濮� -->
+				<apex:commandButton action="{!start}" value="{!$Label.StartTrading_Subtitle}" onclick="requiredCheck();" reRender="mainForm"/>
+				<!-- 銈儯銉炽偦銉� -->
+				<apex:commandButton action="{!cancel}" value="{!$Label.StartTrading_Cancel}"/>
+			</apex:pageBlockButtons>
+			<div class="pbSubheader first tertiaryPalette">
+				<span class="pbSubExtra"><span class="requiredLegend"><span class="requiredExampleOuter"><span class="requiredExample">&nbsp;</span></span><span class="requiredText"> = 蹇呭~淇℃伅</span></span></span><!-- 蹇呴爤鎯呭牨 -->
+				<!-- 鍩烘湰鎯呭牨 -->
+				<h3>{!$Label.Basic_Information}</h3>
+			</div>
+			<table>
+				<tr>
+					<td width="100px"></td>
+					<!-- 瑷虹檪绉戝悕 -->
+					<td>{!$Label.Department_Name}</td>
+					<td>
+						<apex:selectList value="{!sltDep}" multiselect="false" size="1" id="idDep" style="width:400px;" >
+							<apex:selectOptions value="{!depList}" ></apex:selectOptions>
+							<apex:actionSupport event="onchange" onsubmit="" onbeforedomupdate="" action="{!depChange}" rerender="idCon" oncomplete="preparePayloadForSearchContact()">
+								<apex:param name="sltD" value="{!sltDep}" />
+							</apex:actionSupport>
+						</apex:selectList>
+					</td>
+				</tr>
+				<tr>
+					<td width="100px"></td>
+					<!-- 鎷呭綋鑰� -->
+					<td>{!$ObjectType.Contact.Label}</td>
+					<td>
+						<apex:selectList value="{!sltCon}" onchange="setSelectedIndex()" multiselect="false" size="1" id="idCon" style="width:200px;">
+							<apex:selectOptions value="{!conList}" />
+						</apex:selectList>
+						<script>
+							sfdcPage.appendToOnloadQueue(function () {
+								preparePayloadForSearchContact();
+							});
+						</script>
+					</td>
+				</tr>
+				<tr>
+					<td width="100px"></td>
+					<td>
+						{!$ObjectType.lead.fields.SI_OppoLeadSec__c.label}
+					</td>
+					<td>
+						<apex:inputField value="{!lead.SI_OppoLeadSec__c}" />
+					</td>
+				</tr>
+				<tr>
+					<td width="100px"></td>
+					<!-- 鏄惁SI鏈儴鍏卞悓鎺ㄨ繘璇环 -->
+					<td>鏄惁SI鏈儴鍏卞悓鎺ㄨ繘璇环</td>
+					<td><apex:inputCheckbox value="{!SI_Flg}" id="SI_Flg" />
+					</td>
+				</tr>
+			</table>
+		</apex:pageBlock>
+	</apex:form>
 </apex:page>
\ No newline at end of file
diff --git a/force-app/main/default/pages/StraightBackAddress.page b/force-app/main/default/pages/StraightBackAddress.page
index 8a6b4c6..89b7177 100644
--- a/force-app/main/default/pages/StraightBackAddress.page
+++ b/force-app/main/default/pages/StraightBackAddress.page
@@ -3,8 +3,24 @@
     <apex:includeScript value="{!URLFOR($Resource.jquery183minjs)}"/>
     <apex:includeScript value="{!URLFOR($Resource.PleaseWaitDialog)}"/>
     <apex:includeScript value="{!URLFOR($Resource.CommonUtilJs)}"/>
+    <apex:includeScript value="{! URLFOR($Resource.AWSService, 'AWSService.js') }" />
+    <apex:includeScript value="/soap/ajax/40.0/connection.js"/>
     <script type="text/javascript">
         var checkedTrue;
+        var tableDataStr = '';
+        var staticResource = JSON.parse('{!staticResource}');
+        var staticResourceContact = JSON.parse('{!staticResourceContact}');
+        var PIData = {};
+        var contactDataIds = [];
+        var ObjIdDecrypt = '';
+        var closeField = '';
+        var add_aws_result = '';
+        var con_aws_result = '';
+        var isAddCon = false;
+        var contactInfoStr = '';
+
+        //鏇挎崲vlookup
+        var newSearchContactWindow = null;
         window.onload = () => {
             document.getElementById("tab01").style.height  =  screen.availHeight*0.07+'px';
             document.getElementById("tab02").style.height  =  screen.availHeight*0.53+'px';
@@ -12,20 +28,210 @@
         }
          //缂栬緫鎸夐挳
          function onEditorJs(ObjId){
+            ObjIdDecrypt = ObjId;
             onEditor(ObjId); 
          }
         //澶嶅埗鎸夐挳
         function onCopyJs(ObjId){
+            ObjIdDecrypt = ObjId;
             if(ObjId == ''){
                 onCopy('绌�');//璁剧疆涓虹┖锛屼究浜庡悗绔仛鏁版嵁澶勭悊
             }else{
                 onCopy(ObjId);
             }
         }
+        //aws 纭
+        function Trans(){
+            let b = HasError();
+            if(b){
+                //娓呯┖鐢佃瘽鍦板潃閭紪
+                document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Telephone__c').value=''
+                document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:ZipCode__c').value=''
+                document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Detailed_Address__c').value=''
+            }
+            AWSService.post(staticResource.transactionUrl, JSON.stringify({
+                    "txId":add_aws_result.txId,
+                    "isSuccess":b ? 0 : 1
+                }), function(result){
+                    if(isAddCon){
+                        AWSService.post(staticResourceContact.transactionUrl, JSON.stringify({
+                            "txId":con_aws_result.txId,
+                            "isSuccess":b ? 0 : 1
+                        }), function(result){
+                            if(!b)
+                            window.location.reload();
+                        }, staticResourceContact.token);
+                    }else{
+                        if(!b)
+                        window.location.reload();
+                    }
+                }, staticResource.token);
+            
+        }
+
+        function HasError(){
+            // if (IsAddmessage) {
+            //     return true;
+            // }
+            let e = document.getElementById("allPage:allForm:message");
+            if (!e) {
+                return false;
+            }
+
+            let divs = j$(e).find("div.message");
+            for (let i = 0; i < divs.length; i++) {
+                for (let j = 0; j < divs[i].classList.length; j++) {
+                    for(let cls of divs[i].classList){
+                        if (cls.indexOf('error')>-1) {
+                            return true;
+                        }
+                    }
+                    
+                }
+                
+            }
+
+
+            return false;
+        }
+        //瑙e瘑
+        function decrypt(){
+            if(PIData[ObjIdDecrypt] == null){
+                document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Contacts__c').value = '';
+                //document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:contactIdValue').value = '000000000000000';
+                document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Telephone__c').value = '';
+                document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:ZipCode__c').value = '';
+                document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Detailed_Address__c').value = '';
+            }else{
+                document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Contacts__c').value = PIData[ObjIdDecrypt].lastName!=null?PIData[ObjIdDecrypt].lastName:'';
+                document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Telephone__c').value = PIData[ObjIdDecrypt].telephone;
+                document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:ZipCode__c').value = PIData[ObjIdDecrypt].zipCode;
+                document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Detailed_Address__c').value = PIData[ObjIdDecrypt].detailedAddress;
+            }
+        }
+        function getPIPayload() {
+            let leadPayloadList = [];
+            var telePhone = document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Telephone__c').value;
+            var zipCode = document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:ZipCode__c').value;
+            var detailedAddress = document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Detailed_Address__c').value;
+            let leadPIData = new Object();
+            leadPIData.telePhone = telePhone;
+            leadPIData.zipCode = zipCode;
+            leadPIData.detailedAddress = detailedAddress;
+            leadPIData.sfRecordId = '';
+            leadPayloadList.push(leadPIData);
+            console.log(JSON.stringify(leadPayloadList));
+            return JSON.stringify(leadPayloadList);
+        }
         //淇濆瓨鏂规硶
         function savaJs(){
+            //blockme();
+            if(document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Create_Contacts__c').value != ''){
+                isAddCon = true;
+            }
+            document.getElementById("errorMsg").innerHTML = '';
+            
+            if(!document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Contacts__c").value&&!document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Create_Contacts__c").value){
+                document.getElementById("errorMsg").innerHTML = '<strong>銆愯仈绯讳汉銆戝拰銆愯仈绯讳汉锛堟柊寤猴級銆戜笉鑳藉悓鏃朵负绌猴紒</strong> ';
+                return;
+            }else if(document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Contacts__c").value&&document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Create_Contacts__c").value){
+                document.getElementById("errorMsg").innerHTML = '<strong>銆愯仈绯讳汉銆戝拰銆愯仈绯讳汉锛堟柊寤猴級銆戜笉鑳藉悓鏃舵湁鍊硷紒</strong> ';
+                return;
+            }
             blockme();
-            save();
+            console.log('{!insUpdData}')
+            if(document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Create_Contacts__c").value){
+                //new contact
+                ProcessPI({},GetEditObj('contact'),'contact',function(){
+                    //new address
+                    ProcessPI({},
+                    GetEditObj('address'),'address',function(){
+                        save();
+                    });
+                });
+            }else{
+                //new address
+                ProcessPI({},GetEditObj('address'),'address',function(){
+                    save();
+                });
+            }
+        }
+
+        function ProcessPI(sobjJson, payloadForNewPI,type,callback) {
+            var sr = ''
+            if(type == 'contact'){
+                sr = staticResourceContact
+            }
+            if(type == 'address'){
+                sr = staticResource
+            }
+            let url = sr.newUrl
+            /*if (now_edit_id) {
+                url = sr.updateUrl
+            }*/
+            AWSService.post(url, payloadForNewPI, function(result){
+                if(type == 'contact'){
+                    con_aws_result = result
+                }if(type == 'address'){
+                    add_aws_result = result
+                }
+                SetEditObj(type);
+                if(callback){
+                    callback();
+                }
+            }, sr.token);
+        }
+        function SetEditObj(type){
+            let obj = GetAWSResultObj(type);
+            if(obj){
+                if(type=='contact'){
+                    document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Con_AWS_Data_Id__c").value      = obj.dataId;
+                    document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Create_Contacts__c").value      = obj.lastName;
+                    document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:LastName_Encrypted__c").value   = obj.lastNameEncrypt;
+                }
+                if(type=='address'){
+                    document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Add_AWS_Data_Id__c").value              = obj.dataId;
+                    document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Telephone__c").value                    = obj.telephone;
+                    document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Telephone_Encrypted__c").value          = obj.telephoneEncrypt;
+                    document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:ZipCode__c").value                      = obj.zipCode;
+                    document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:ZipCode_Encrypted__c").value            = obj.zipCodeEncrypt;
+                    document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Detailed_Address__c").value             = obj.detailedAddress;
+                    document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Detailed_Address_Encrypted__c").value   = obj.detailedAddressEncrypt;
+                }
+            }
+            
+        }
+        function GetAWSResultObj(type){
+            if(type == 'contact'){
+                if(con_aws_result && con_aws_result.object && con_aws_result.object.length > 0){
+                    return con_aws_result.object[0];
+                }
+            }
+            if(type == 'address'){
+                if(add_aws_result && add_aws_result.object && add_aws_result.object.length > 0){
+                    return add_aws_result.object[0];
+                }
+            }
+            return null;
+        }
+        function GetEditObj(type){
+            if(type=='contact'){
+                //new contact
+                return JSON.stringify([{
+                    lastName : document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Create_Contacts__c").value,
+                    dataId : document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Con_AWS_Data_Id__c").value,
+                }]);
+            }
+            if(type == 'address'){
+                //new address
+                return JSON.stringify([{
+                    dataId : document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Add_AWS_Data_Id__c").value,
+                    telephone : document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Telephone__c").value,
+                    zipCode : document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:ZipCode__c").value,
+                    detailedAddress : document.getElementById("allPage:allForm:oppBlock2:UpdAddressId:Detailed_Address__c").value,
+                }]);
+            }
+            
         }
 
         //澶嶉�夋閫変腑瑙﹀彂浜嬩欢
@@ -48,7 +254,33 @@
         }
         function searchBtnJs(){
             blockme();
-            searchBtn();
+            var addressDataIds = '';
+            //鏌ヨ鍦板潃
+            if(document.getElementById('allPage:allForm:searchBlock:txtAddressId').value != ''){
+                //鍙戦�乤ws璇锋眰锛岀劧鍚庡啀鍙戦�佺粰controller
+                new Promise(function(resolve, reject){
+                    let queryBack = function queryBack(result){
+                        if(result.object==null || result.object.length==0){
+                            searchBtn('\''+addressName+'\'');
+                            return
+                        }else{
+                            for(var i=0;i<result.object.length;i++){
+                                addressDataIds += ',\''+ result.object[i].dataId + '\'';
+                            }
+                            addressDataIds = addressDataIds.substring(1);
+                            resolve('success');
+                        }
+                    };
+                    var addressName = document.getElementById('allPage:allForm:searchBlock:txtAddressId').value;
+                    AWSService.queryAddress('https://sfpi-mebg-test.olympuschina.com/api/address/search',addressName.trim(),queryBack,staticResource.token);
+                }).then(function(data){
+                    console.log('data = '+data)
+                    console.log('addressDataIds = '+addressDataIds)
+                    searchBtn(addressDataIds);
+                });
+            }else{
+                searchBtn(addressDataIds);
+            }
         }
         //閲囩敤鎸夐挳
         function onAdoptJs(objId){
@@ -99,26 +331,223 @@
         function refreshJs(){
             window.location.reload();
         }
+
+        //2022 02 28 寮犲崕寤� display PI Data start
+        
+        //queryPI();
+        function q1(){
+            var index = 0;
+            var correct = 0;
+            var p = new Promise(function(resolve, reject){
+                //鏌ヨ鍦板潃鐨凱I鏁版嵁
+                let searchCallBack = function searchCallBack(result,Id,awsDataId){
+                    index++;
+                    let contacts = result.object;
+                    if(contacts == null){
+                        console.log('contacts == null')
+                        return;
+                    }
+                    let temp = {}
+                    temp.telephone = result.object.telephone;
+                    temp.zipCode = result.object.zipCode;
+                    temp.detailedAddress = result.object.detailedAddress;
+                    temp.awsDataId = awsDataId;
+                    PIData[Id] = temp;
+                };
+                for(var i=0;i<tableDataStr.length;i++){
+                    if(tableDataStr[i].address.Contacts__r){
+                        correct++;
+                        AWSService.queryRepair(staticResource.queryUrl,tableDataStr[i].address.AWS_Data_Id__c,tableDataStr[i].address.Id,tableDataStr[i].address.Contacts__r.AWS_Data_Id__c,searchCallBack,staticResource.token);
+                    } 
+                }
+                var interval=self.setInterval(function (){
+                    console.log('setInterval index= ' + index);
+                    if(index == correct){
+                        console.log('PIDATA = ' + JSON.stringify(PIData))
+                        resolve('success')
+                        clearInterval(interval)
+                    }
+                },1000);
+            });
+            return p;
+        }
+
+        function q2(){
+            sforce.connection.sessionId = '{!GETSESSIONID()}';
+            var p = new Promise(function(resolve, reject){
+                //鏌ヨ鑱旂郴浜虹殑鏁版嵁
+                let queryBack = function queryBack(result) {
+                    let contacts = result.object;
+                    if(contacts == null){
+                        return;
+                    }
+                    for(var i=0;i<result.object.length;i++){
+                        for(let key in PIData){
+                            if(result.object[i].dataId == PIData[key].awsDataId){
+                                PIData[key].lastName = result.object[i].lastName;
+                            }
+                        }
+                    }
+                }
+                var condition = ''
+                for(var i=0;i<tableDataStr.length;i++){
+                    if(tableDataStr[i].address.Contacts__c){
+                        condition += "," + "\'"+tableDataStr[i].address.Contacts__c+"\'";
+                    }
+                }
+                condition = condition.substr(1);
+                console.log('condition = ' + condition);
+                var record = sforce.connection.query("select AWS_Data_Id__c from Contact where id in("+condition+")");
+                var records = record.getArray("records");
+                for(var i =0;i<records.length;i++){
+                    if(records[i].AWS_Data_Id__c){
+                        contactDataIds.push(records[i].AWS_Data_Id__c);
+                    }
+                }
+                let searchPayload = new Object();
+                searchPayload.dataIds = contactDataIds;
+                searchPayload.contactName = '';
+                console.log('contactDataIds = ' + contactDataIds);
+                AWSService.search(staticResourceContact.searchUrl, JSON.stringify(searchPayload), queryBack, staticResourceContact.token);
+            });
+        }
+        //鏌ヨ鏁忔劅瀛楁
+        function queryPI(){
+            //blockme();
+            tableDataStr = JSON.parse(document.getElementById('allPage:allForm:tableValueFrontEnd').value);
+            PIData = {};
+            contactDataIds = [];
+            console.log(tableDataStr)
+            q1().then(function(data){
+                        return q2(data);
+                    })
+            //unblockUI();
+        }
+        
+
+        function showPIDiv(awsDataId){
+            if(awsDataId.length == 0 || PIData[awsDataId]==null){
+                return
+            }
+            console.log('awsDataId Value:'+awsDataId);
+            let parentNode = document.getElementById(awsDataId);
+            let createDiv = document.createElement("div");  
+            createDiv.id = awsDataId+"_PI";  
+            let piInformation = '';
+            
+            if(PIData[awsDataId].lastName){
+                piInformation = '鑱旂郴浜�: '+PIData[awsDataId].lastName+
+                '\n鐢佃瘽: '+PIData[awsDataId].telephone+
+                '\n閭紪: '+PIData[awsDataId].zipCode+
+                '\n璇︾粏鍦板潃: '+PIData[awsDataId].detailedAddress
+            }else{
+                piInformation = '鑱旂郴浜�: null'+
+                '\n鐢佃瘽: '+PIData[awsDataId].telephone+
+                '\n閭紪: '+PIData[awsDataId].zipCode+
+                '\n璇︾粏鍦板潃: '+PIData[awsDataId].detailedAddress
+            }
+            //let piInformation = 'Name:'+contact['943114607025717249'].lastName +'\n' +'Phone:'+contact['943114607025717249'].phone
+            createDiv.innerText = piInformation;
+            let x=window.event.x;
+            let y=window.event.y; 
+            createDiv.style.left=x;  
+            createDiv.style.top=y;  
+            createDiv.style.background="#dddddd";
+            createDiv.style.position = "absolute";
+            parentNode.appendChild(createDiv);  
+        }
+
+        function hidePIDiv(awsDataId){
+            if(awsDataId.length == 0 || PIData[awsDataId]==null){
+                return
+            }
+            document.getElementById(awsDataId+'_PI').remove();
+        }
+
+        function replaceSearchContactLookup() {
+            if(document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Contacts__c') != null){
+                let contactHtmlString = '<img src="/img/s.gif" onclick="searchContact(\'allPage:allForm:contactId\',\'allPage:allForm:oppBlock2:UpdAddressId:Contacts__c\')" alt="Reference Document Number Lookup" class="lookupIcon"  title="Reference Document Number Lookup (New Window)"/>';
+                let lookUpNode = htmlToElement(contactHtmlString);
+                console.log(lookUpNode);
+                let parentNode = document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Contacts__c').parentNode;
+                parentNode.appendChild(lookUpNode);
+                if(contactInfoStr){
+                    console.log('closePopup:'+contactInfoStr);
+                    let contactInfo = JSON.parse(contactInfoStr);
+                    let contactNodeId = 'allPage:allForm:oppBlock2:UpdAddressId:contactIdValue';
+                    document.getElementById(contactNodeId).value = contactInfo.ContactId;
+                    document.getElementById(closeField).value = contactInfo.Name; 
+                }                 
+            }
+        }
+
+        function htmlToElement(html) {
+            var template = document.createElement('template');
+            html = html.trim(); // Never return a text node of whitespace as the result
+            template.innerHTML = html;
+            return template.content.firstChild;
+        }
+
+        //鑷畾涔塴ookup鏌ヨ
+        function searchContact(contactNodeId,field){
+            closeField = field;
+            let accountValue = "";
+            if (document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Customer__r_Name')!=null) {
+                let accountNodeId = document.getElementById('allPage:allForm:oppBlock2:UpdAddressId:Customer__r_Name').id + '_lkid';
+                accountValue = document.getElementById(accountNodeId).value;   
+            } 
+            console.log(accountValue);
+            if(accountValue !='000000000000000'){
+                let baseUrl = "/apex/SearchContactPage";
+                let suffixUrl = "?contactId="+contactNodeId+"&accountId="+accountValue;
+                let newSearchContactParam = 'height=600,width=800,left=100,top=100,dialogHide=true,resizable=no,scrollbars=yes,toolbar=no,status=no';
+                newSearchContactWindow = window.open(baseUrl+suffixUrl, 'Popup', newSearchContactParam);
+                if (window.focus) {
+                    newSearchContactWindow.focus();
+                }
+                return false;
+            }else{
+                console.log('璇峰厛閫夋嫨瀹㈡埛鍐嶉�夋嫨鑱旂郴浜�')
+            }
+        }
+
+        function closePopupWindow() {
+            if (null != newSearchContactWindow) {
+                newSearchContactWindow.close();
+            }
+            contactInfoStr = document.getElementById('allPage:allForm:contactId').value;
+            console.log('closePopup:'+contactInfoStr);
+            let contactInfo = JSON.parse(contactInfoStr);
+            let contactNodeId = 'allPage:allForm:oppBlock2:UpdAddressId:contactIdValue';
+            document.getElementById(contactNodeId).value = contactInfo.ContactId;
+            document.getElementById(closeField).value = contactInfo.Name;     
+        }
+        //2022 02 28 寮犲崕寤� display PI Data end
     </script>
     <apex:form id="allForm">
-        <div id="tab01">
+        <apex:inputHidden id="tableValueFrontEnd" value="{!tableDataStr}"/>
+        <apex:inputHidden value="{!contactId}" id="contactId"/>
+        <apex:inputHidden value="{!insUpdDataStr}" id="insUpdDataStr"/>
+        <div id="tab01">            
             <!-- 椤甸潰鏁版嵁鍒濆鍖栨柟娉� -->
             <apex:actionFunction name="init" action="{!init}" rerender="oppBlock1,message,checEventFrame" onComplete="unblockUI();"></apex:actionFunction>
             <!-- 妫�绱㈡暟鎹煡璇㈡柟娉� -->
-            <apex:actionFunction name="searchBtn" action="{!searchBtn}" rerender="oppBlock1,message,checEventFrame" onComplete="unblockUI();"></apex:actionFunction>
+            <apex:actionFunction name="searchBtn" action="{!searchBtn}" rerender="oppBlock1,message,checEventFrame,tableValueFrontEnd" onComplete="unblockUI();">
+                <apex:param name="addressDataIds" assignTo="{!addressDataIds}" value=""></apex:param>
+            </apex:actionFunction>
             <!-- 閲囩敤鏂规硶 -->
             <apex:actionFunction name="adoptSave" action="{!adoptSave}" rerender="oppBlock2,message" onComplete="unblockUI();">
                 <apex:param name="adoptId" assignTo="{!adoptId}" value="" />
                 <apex:param name="isUpload" assignTo="{!isUpload}" value="" />
             </apex:actionFunction>
             <!-- 淇濆瓨鍜屼慨鏀规柟娉� -->
-            <apex:actionFunction name="save" action="{!save}" rerender="oppBlock2,message" onComplete="unblockUI();{!IF(isSearchBtn,'searchBtnJs()',false)}"></apex:actionFunction>
+            <apex:actionFunction name="save" action="{!save}" rerender="oppBlock2,message" onComplete="unblockUI();{!IF(isSearchBtn,'searchBtnJs()',false)};Trans()"></apex:actionFunction>
             <!-- 鐐瑰嚮淇敼鎸夐挳鑾峰彇淇敼鏁版嵁鏂规硶 -->
-            <apex:actionFunction name="onEditor" action="{!onEditor}" rerender="oppBlock2,checEventFrame" onComplete="unblockUI();">
+            <apex:actionFunction name="onEditor" action="{!onEditor}" rerender="oppBlock2,checEventFrame,insUpdDataStr" onComplete="decrypt();unblockUI();">
                 <apex:param name="UpdId" assignTo="{!UpdId}" value="" />
             </apex:actionFunction>
             <!-- 澶嶅埗鏂规硶 -->
-            <apex:actionFunction name="onCopy" action="{!onCopy}" rerender="oppBlock2,checEventFrame" onComplete="unblockUI();">
+            <apex:actionFunction name="onCopy" action="{!onCopy}" rerender="oppBlock2,checEventFrame," onComplete="decrypt();unblockUI();">
                 <apex:param name="UpdId" assignTo="{!UpdId}" value="" />
             </apex:actionFunction>
             <!-- 杩斿洖鐖堕〉闈� -->
@@ -148,7 +577,7 @@
                             </a>
                         </td>
                         <td style="width: 20%">
-                            <apex:commandButton onclick="searchBtnJs();return false;"  rendered="true" value="妫�绱�" style="width:60px;"/>
+                            <apex:commandButton onclick="searchBtnJs();return false;"  rendered="true" value="妫�绱�" style="width:60px;"  onComplete="unblockUI();"/>
                             &nbsp;&nbsp;
                             <!-- <apex:commandButton onclick="onAdoptJs();return false;"  rendered="true" value="閲囩敤" style="width:60px;background:#98c1fbf7"/>
                             &nbsp;&nbsp; -->
@@ -202,8 +631,9 @@
                                         <td align="left"  style="vertical-align: inherit;border-width: 0px 1px 1px 0px;">
                                             <apex:outputfield value="{!or.address.Customer__c}" />
                                         </td>
-                                        <td align="left"  style="vertical-align: inherit;border-width: 0px 1px 1px 0px;">
-                                            <apex:outputfield value="{!or.address.Contacts__c}" />
+                                        <td align="left"  style="vertical-align: inherit;border-width: 0px 1px 1px 0px;" aws-data-id="{!or.address.AWS_Data_Id__c}">
+                                            <!-- <apex:outputfield value="{!or.address.Contacts__c}" id="{!or.address.Contacts__c}_{!or.address.Id}"/> -->
+                                            <a href="#" id="{!or.address.Id}" onmouseover="showPIDiv('{!or.address.Id}')" onmouseout="hidePIDiv('{!or.address.Id}')"  aws-data-id="{!or.address.Contacts__r.AWS_Data_Id__c}">{!or.address.Contacts__r.Name}</a>
                                         </td>
                                         <td align="left" style="vertical-align: inherit;border-width: 0px 1px 1px 0px;">
                                             <apex:outputText value="{!or.address.Telephone__c}" />
@@ -233,6 +663,10 @@
                                     <apex:variable value="{!cnt + 1}" var="cnt" />
                                 </apex:repeat>
                             </tbody>
+                            <script>
+                                console.log('queryPI();')
+                                queryPI();
+                            </script>
                         </table>
                     </apex:outputPanel>
                 </apex:pageblocksection>
@@ -243,7 +677,13 @@
                 <apex:pageblocksection title="缂栬緫鍦板潃" id="UpdAddressId" rendered="true" columns="4">
                     <apex:inputfield value="{!insUpdData.Address_Classification__c}" id="Address_Classification__c" />
                     <apex:inputfield value="{!insUpdData.Customer__c}" id="Customer__r_Name" required="false" />
-                    <apex:inputfield value="{!insUpdData.Contacts__c}" id="Contacts__c" required="false"/>
+                    <!-- Before PIPL 20220308 -->
+                    <!-- <apex:inputfield value="{!insUpdData.Contacts__c}" id="Contacts__c" required="false"/> -->
+                    <!-- Add By Li Jun for PIPL 20220308 Start -->
+                    <apex:inputText label="鑱旂郴浜�" disabled="true" value="{!contactNameValue}" id="Contacts__c">                       
+                    </apex:inputText>
+                    <apex:inputHidden id="contactIdValue" value="{!contactIdValue}"/>
+                     <!-- Add By Li Jun for PIPL 20220308 End -->
                     <apex:inputfield value="{!insUpdData.Create_Contacts__c}" id="Create_Contacts__c" required="false"/>
 
                     <apex:inputfield value="{!insUpdData.Province__c}" id="Province__r_Name" style="" />
@@ -253,13 +693,26 @@
                     <!-- <apex:pageblockSectionItem /> -->
                     <!-- <apex:inputTextarea value="{!insUpdData.Detailed_Address__c}" id="Detailed_Address__c" style="resize:vertical;width: 90%" rows="3" cols="3"/> -->
                     <apex:inputfield value="{!insUpdData.Detailed_Address__c}" id="Detailed_Address__c" style="resize:vertical;width: 98%"/>
+
+                    <div id="errorMsg" class="errorMsg"></div>
+
+                    <apex:inputHidden id="LastName_Encrypted__c"         value="{!newCon.LastName_Encrypted__c}"/>
+                    <apex:inputHidden id="Con_AWS_Data_Id__c"            value="{!newCon.AWS_Data_Id__c}"/>
+
+                    <apex:inputHidden id="Add_AWS_Data_Id__c"            value="{!insUpdData.AWS_Data_Id__c}"/>
+                    <apex:inputHidden id="Telephone_Encrypted__c"        value="{!insUpdData.Telephone_Encrypted__c}"/>
+                    <apex:inputHidden id="ZipCode_Encrypted__c"          value="{!insUpdData.ZipCode_Encrypted__c}"/>
+                    <apex:inputHidden id="Detailed_Address_Encrypted__c" value="{!insUpdData.Detailed_Address_Encrypted__c}"/>
                 </apex:pageblocksection>
 
                 <div style="text-align: center;">
-                    <apex:commandButton value="淇濆瓨" onclick="savaJs();return false;" rendered="true" />
+                    <apex:commandButton immediate="true" value="淇濆瓨" onclick="savaJs();" rerender="dummy"  />
                 </div>
+                <script>
+                    replaceSearchContactLookup();
+                </script>
             </apex:pageBlock>
-        </div>
+        </div>        
     </apex:form>
     <apex:outputPanel id="checEventFrame">
       <script type="text/javascript">
diff --git a/force-app/main/default/pages/XinDailyReport.page b/force-app/main/default/pages/XinDailyReport.page
index b762bc6..04f2664 100644
--- a/force-app/main/default/pages/XinDailyReport.page
+++ b/force-app/main/default/pages/XinDailyReport.page
@@ -9,6 +9,10 @@
         <apex:includeScript value="{!URLFOR($Resource.CommonUtilJs)}"/>
         <apex:includeScript value="/soap/ajax/29.0/connection.js"/>
         <apex:includeScript value="/soap/ajax/29.0/apex.js"/>
+        <!-- Add By Li Jun for PIPL 20220225 -->
+        <apex:includeScript value="{!URLFOR($Resource.AWSService, 'AWSService.js') }" />
+        <script src="../../soap/ajax/53.0/connection.js" type="text/javascript"></script>
+        <!-- Add By Li Jun for PIPL 20220225 -->
         <!-- <apex:includeScript value="{!URLFOR($Resource.connection20)}"/>
         <apex:includeScript value="{!URLFOR($Resource.apex20)}"/> -->
         <apex:includeScript value="{!URLFOR($Resource.jquerydoubletapjs)}"/>
@@ -63,6 +67,51 @@
             var hiddenDivShowFlg = false;
             var StatusCheck = '{!report.Status_With_Check__c}'; //20210426 zh
             sforce.connection.sessionId = '{!$Api.Session_ID}';
+            
+            //Add By Li Jun 20220225 for PIPL Start
+            AWSService.sfSessionId = '{!GETSESSIONID()}';
+            var staticResources = JSON.parse('{!staticResource}');
+            var contactAWSIds = JSON.parse('{!contactAWSIds}');
+            console.log('contactAWSIds:'+JSON.stringify(contactAWSIds));
+            var sfIdToContactInfo = {};
+            function preparePayloadForSearchContact(){
+                let searchPayload = new Object();
+                searchPayload.dataIds = contactAWSIds;
+                searchPayload.contactName = '';
+                return JSON.stringify(searchPayload);
+            }
+            function searchContactAll(){
+                let data = preparePayloadForSearchContact();
+                let searchCallBack = function searchCallBack(result){
+                    let contacts = result.object;
+                    if(contacts == null){
+                        return;
+                    }
+                    for(var i=0;i<contacts.length;i++){
+                        let temp = {}
+                        temp.lastName = contacts[i].lastName?contacts[i].lastName:'';                       
+                        if(contacts[i].sfRecordId){
+                            sfIdToContactInfo[contacts[i].sfRecordId] = temp;
+                        }                    
+                    }
+                    console.log('AWS Result:'+JSON.stringify(sfIdToContactInfo));
+                    let allSizeForAct =document.getElementById('Page:mainForm:idDayEdit:AllSize').value;
+                    console.log('Act size:'+allSizeForAct);
+                    for(let i=0;i<allSizeForAct;i++){
+                        for(let j=1;j<6;j++){
+                            let contactIdForVis = document.getElementById("Page:mainForm:idDayEdit:idActivities:"+i+":idVisitor"+j+"_IdHidden").value;
+                            if(contactIdForVis){
+                                console.log('SFId for Contact:'+contactIdForVis);
+                                if(sfIdToContactInfo.hasOwnProperty(contactIdForVis)){
+                                    document.getElementById("Page:mainForm:idDayEdit:idActivities:"+i+":idVisitor"+j).value = sfIdToContactInfo[contactIdForVis].lastName;
+                                }   
+                            }                         
+                        }
+                    }                                       
+                };
+                AWSService.search(staticResources.searchUrl,data,searchCallBack,staticResources.token);
+            }
+            //Add By Li Jun 20220225 for PIPL End 
             //window.document.onkeydown= onKeyEvent;
             function initSetPage() {
                 // 2018/11/21 SWAG-B6Q8BS 鍒濆鍖栬缃鑹蹭娇鐢�
@@ -504,7 +553,7 @@
                     }else {
                         //浜嬩欢瀹屾垚
                         if(NewEventStatus == '03 瀹屾垚'){
-                           // j$(escapeVfId('Page:mainForm:idDayEdit:idActivities:' + j + ':idfieldset')).attr('disabled', 'disabled');
+                             // j$(escapeVfId('Page:mainForm:idDayEdit:idActivities:' + j + ':idfieldset')).attr('disabled', 'disabled');
                            //浜嬩欢瀹屾垚鍚庡欢鏈熷彇娑堜笉鍙慨鏀�
                             //鍙栨秷鎸夐挳
                             document.getElementById('Page:mainForm:idDayEdit:idActivities:'+j+':idCancel').disabled = true;
@@ -537,7 +586,7 @@
                             document.getElementById('Page:mainForm:idDayEdit:idActivities:'+j+':idDelayReason').disabled = true;
                             //鍙栨秷淇℃伅
                             //Page:mainForm:idDayEdit:idActivities:0:idCancelReasonRemark
-                            document.getElementById('Page:mainForm:idDayEdit:idActivities:'+j+':idCancelReasonRemark').disabled = true;
+                            document.getElementById('Page:mainForm:idDayEdit:idActivities:'+j+':idCancelReasonRemark').disabled = true;                       
                         }
                     }
                 }
@@ -1051,22 +1100,31 @@
                                     <tr>
                                         <th>{!$Label.Visitor}</th><!--璁块棶瀵硅薄-->
                                         <td>&nbsp;</td>
-                                        <td colspan="5"><span><div class="requiredInput"><div class="requiredBlock"></div><apex:inputField id="idVisitor1" value="{!a.act.Visitor1__c}" style="width:100px" onchange="clearVisitorId({!a.index},'idVisitor1_IdHidden');" onClick="searchVisitor2({!a.index},value);return false;" /></div></span><apex:inputText id="idVisitor1_IdHidden" value="{!a.act.Visitor1_ID__c}" style="display:none"/></td>
+                                        <td colspan="5"><span><div class="requiredInput"><div class="requiredBlock"></div>
+                                            <apex:inputText id="idVisitor1" value="{!idVisitor1PI}" style="width:100px" onchange="clearVisitorId({!a.index},'idVisitor1_IdHidden');" onClick="searchVisitor2({!a.index},value);return false;" /></div></span><apex:inputText id="idVisitor1_IdHidden" value="{!a.act.Visitor1_ID__c}" style="display:none"/></td>
                                         <td>&nbsp;</td>
-                                        <td colspan="2"><apex:inputField id="idVisitor2" value="{!a.act.Visitor2__c}" style="width:100px" onchange="clearVisitorId({!a.index},'idVisitor2_IdHidden');" onClick="searchVisitor2({!a.index},value);return false;" /><apex:inputText id="idVisitor2_IdHidden" value="{!a.act.Visitor2_ID__c}" style="display:none"/></td>
+                                        <td colspan="2">
+                                            <apex:inputText id="idVisitor2" value="{!idVisitor2PI}" style="width:100px" onchange="clearVisitorId({!a.index},'idVisitor2_IdHidden');" onClick="searchVisitor2({!a.index},value);return false;" /><apex:inputText id="idVisitor2_IdHidden" value="{!a.act.Visitor2_ID__c}" style="display:none"/></td>
+                                            <!-- <apex:inputField id="idVisitor2" value="{!a.act.Visitor2__c}" style="width:100px" onchange="clearVisitorId({!a.index},'idVisitor2_IdHidden');" onClick="searchVisitor2({!a.index},value);return false;" /><apex:inputText id="idVisitor2_IdHidden" value="{!a.act.Visitor2_ID__c}" style="display:none"/></td> -->
                                         <td>&nbsp;</td>
-                                        <td><apex:inputField id="idVisitor3" value="{!a.act.Visitor3__c}" style="width:100px" onchange="clearVisitorId({!a.index},'idVisitor3_IdHidden');" onClick="searchVisitor2({!a.index},value);return false;" /><apex:inputText id="idVisitor3_IdHidden" value="{!a.act.Visitor3_ID__c}" style="display:none"/></td>
+                                        <td>
+                                            <apex:inputText id="idVisitor3" value="{!idVisitor3PI}" style="width:100px" onchange="clearVisitorId({!a.index},'idVisitor3_IdHidden');" onClick="searchVisitor2({!a.index},value);return false;" /><apex:inputText id="idVisitor3_IdHidden" value="{!a.act.Visitor3_ID__c}" style="display:none"/></td>
+                                            <!-- <apex:inputField id="idVisitor3" value="{!a.act.Visitor3__c}" style="width:100px" onchange="clearVisitorId({!a.index},'idVisitor3_IdHidden');" onClick="searchVisitor2({!a.index},value);return false;" /><apex:inputText id="idVisitor3_IdHidden" value="{!a.act.Visitor3_ID__c}" style="display:none"/></td> -->
                                         <td>&nbsp;</td>
-                                        <td><apex:inputField id="idVisitor4" value="{!a.act.Visitor4__c}" style="width:100px" onchange="clearVisitorId({!a.index},'idVisitor4_IdHidden');" onClick="searchVisitor2({!a.index},value);return false;" /><apex:inputText id="idVisitor4_IdHidden" value="{!a.act.Visitor4_ID__c}" style="display:none"/></td>
+                                        <td>
+                                            <apex:inputText id="idVisitor4" value="{!idVisitor4PI}" style="width:100px" onchange="clearVisitorId({!a.index},'idVisitor4_IdHidden');" onClick="searchVisitor2({!a.index},value);return false;" /><apex:inputText id="idVisitor4_IdHidden" value="{!a.act.Visitor4_ID__c}" style="display:none"/></td>
+                                            <!-- <apex:inputField id="idVisitor4" value="{!a.act.Visitor4__c}" style="width:100px" onchange="clearVisitorId({!a.index},'idVisitor4_IdHidden');" onClick="searchVisitor2({!a.index},value);return false;" /><apex:inputText id="idVisitor4_IdHidden" value="{!a.act.Visitor4_ID__c}" style="display:none"/></td> -->
                                         <td>&nbsp;</td>
-                                        <td><apex:inputField id="idVisitor5" value="{!a.act.Visitor5__c}" style="width:100px" onchange="clearVisitorId({!a.index},'idVisitor5_IdHidden');" onClick="searchVisitor2({!a.index},value);return false;" /><apex:inputText id="idVisitor5_IdHidden" value="{!a.act.Visitor5_ID__c}" style="display:none"/></td>
+                                        <td>
+                                            <apex:inputText id="idVisitor5" value="{!idVisitor5PI}" style="width:100px" onchange="clearVisitorId({!a.index},'idVisitor5_IdHidden');" onClick="searchVisitor2({!a.index},value);return false;" /><apex:inputText id="idVisitor5_IdHidden" value="{!a.act.Visitor5_ID__c}" style="display:none"/></td>
+                                            <!-- <apex:inputField id="idVisitor5" value="{!a.act.Visitor5__c}" style="width:100px" onchange="clearVisitorId({!a.index},'idVisitor5_IdHidden');" onClick="searchVisitor2({!a.index},value);return false;" /><apex:inputText id="idVisitor5_IdHidden" value="{!a.act.Visitor5_ID__c}" style="display:none"/></td> -->
                                         <td>&nbsp;</td>
                                         <th>{!$Label.Main_Visit_Location}</th>
                                         <td>&nbsp;</td>
                                         <td><apex:inputField id="idMainPlace" value="{!a.act.Main_Visit_Location__c}" style="width:100px" /></td>
                                         <td>&nbsp;</td>
                                         <th>{!$Label.Free_Input}&nbsp;&nbsp;<apex:inputField id="idFree_Input__c" value="{!a.act.Free_Input__c}" onClick="if(vpChack({!a.index})) return false;setVisitorPlaceDisabled();"/>&nbsp;&nbsp;</th>
-                                    </tr>
+                                    </tr>                                   
                                     <tr>  
                                         <th>鎷滆鐩殑</th>
                                         <td></td>
@@ -1172,7 +1230,7 @@
                                         <td colspan="4"><input type="button"  id="{!a.index}:idRelOpp5Btn" class="btn" value="璇环鏇存柊" onclick="enquiryPage(this);" style="width: 63px; cursor: default; border-color: rgb(196, 196, 196); color: #909090; background-position: 0px -90px;"   disabled="disabled" />
                                         <input type="button"  id="{!a.index}:idRelOpp5LoseBtn" class="btn" value="澶卞崟" onclick="loseEnquiry(this);" style="width: 35px; cursor: default; border-color: rgb(196, 196, 196); color: #909090; background-position: 0px -90px;"   disabled="disabled"  />
                                         </td>
-    
+
                                         <td><input type="button"  id="{!a.index}:idRelService1Btn" class="btn" value="淇℃伅鏇存柊" onclick="slaInfoPage('{!a.act.Id}','{!a.index}')" style="width: 100px; cursor: default; border-color: rgb(196, 196, 196); color: #909090; background-position: 0px -90px;"   disabled="disabled" /></td>
                                     </tr>
                                 </table>
@@ -1535,6 +1593,10 @@
                             </fieldset>          
                              <!-- 20200420 浠诲姟鏃ユ姤绠$悊 add gzw end -->
                             </apex:repeat>
+                            <script>
+                                console.log('Load AWS Data');
+                                searchContactAll();
+                            </script>
                         </apex:outputPanel>
                         <apex:outputPanel id="idAddActPanel">
                         <table class="formtable" width="1200" border="0">
diff --git a/force-app/main/default/triggers/ContactHpDeptUpd.trigger b/force-app/main/default/triggers/ContactHpDeptUpd.trigger
index b420794..af14dde 100644
--- a/force-app/main/default/triggers/ContactHpDeptUpd.trigger
+++ b/force-app/main/default/triggers/ContactHpDeptUpd.trigger
@@ -3,12 +3,14 @@
     List<String> accIds = new List<String>();
     List<String> FirstNameList = new List<String>();
     List<String> LastnameList = new List<String>();
+    List<String> LastnameEncryptedList = new List<String>();
     List<id> Hospital_id_list = new List<id>();
     List<id> ACCOUNT_id_list = new List<id>();
     Map<String,Contact> mapCon = new Map<String,Contact>();
 //***************************************INSERT 2016-12-14 By ZDF START*************************************
 //          澧炲姞鈥滄柊澧炲鎴蜂汉鍛樺叆渚嬭鍒欌��
 //***************************************INSERT 2016-12-14 By ZDF START*************************************
+//2022-02-10    PI鏀归�狅紝鐢↙astName_Encrypted__c鏇夸唬鍘熸湁鐨凬ame浣滀负mapCon鏄犲皠鐨勯敭
     for(Contact a : Trigger.new) {
         if (Trigger.isInsert
                 || (Trigger.isUpdate
@@ -21,8 +23,9 @@
         if(Trigger.isInsert&&a.Ignore_Same_Name__c==false){
             FirstNameList.add(a.firstname);
             LastnameList.add(a.Lastname);
+            LastnameEncryptedList.add(a.LastName_Encrypted__c);
             ACCOUNT_id_list.add(a.Accountid);
-            mapCon.put((a.firstname+a.Lastname),a);
+            mapCon.put(a.LastName_Encrypted__c,a);
             system.debug('========1111111');
         }
 
@@ -59,9 +62,10 @@
                                         from 
                                                 Contact 
                                         where   
-                                                firstname  in:FirstNameList
-                                        and
-                                                Lastname   in:LastnameList
+                                        //         firstname  in:FirstNameList
+                                        // and
+                                        //         Lastname   in:LastnameList
+                                        LastName_Encrypted__c in : LastnameEncryptedList
                                         and     
                                             (   
                                                 Account.Parent.Parentid  in:Hospital_id_list
@@ -73,22 +77,25 @@
                                 ];
         system.debug('========1212121212'+FirstNameList);
         system.debug('========1212121212'+LastnameList);
+        system.debug('========1212121212'+LastnameEncryptedList);
         system.debug('========1212121212'+Hospital_id_list);
         if(CntingList.size()>0){
             system.debug('========2222222'+CntingList.size());
             Contact Cnting = CntingList[0];
             for(Contact a : Trigger.new) {
                 system.debug('========3333333');
-                if(mapCon.containsKey(a.firstname+a.Lastname)){
-                system.debug('========333333');
-                if( Cnting.Account.Parent.Parent.Name   !=  null    ){
-                        a.addError('璇ュ鎴蜂汉鍛樺悕瀛楀凡瀛樺湪锛屽湪'+Cnting.Account.Parent.Parent.Name+'鍖婚櫌涓嬪睘 '+Cnting.Account.Parent.Name+'鎴樼暐绉戝鐨� '+Cnting.Account.Name+'绉戝锛岃淇敼,鎴栬�呭嬀閫夆�滀笉鏄噸澶嶇殑瀹㈡埛鍚嶁�濆悗锛屽啀娆$偣鍑讳繚瀛�'+Cnting);
-                    }   else if (   Cnting.Account.Parent.Name  !=null  ){
-                        a.addError('璇ュ鎴蜂汉鍛樺悕瀛楀凡瀛樺湪锛屽湪'+Cnting.Account.Parent.Name+'鍖婚櫌鐨� '+Cnting.Account.Name+' 鎴樼暐绉戝涓嬶紝璇蜂慨鏀�,鎴栬�呭嬀閫夆�滀笉鏄噸澶嶇殑瀹㈡埛鍚嶁�濆悗锛屽啀娆$偣鍑讳繚瀛�'+Cnting);
-                    }   else if (   Cnting.Account.Name !=  null    ){
-                        a.addError('璇ュ鎴蜂汉鍛樺悕瀛楀凡瀛樺湪锛屽湪'+Cnting.Account.Name+'鍖婚櫌锛岃淇敼,鎴栬�呭嬀閫夆�滀笉鏄噸澶嶇殑瀹㈡埛鍚嶁�濆悗锛屽啀娆$偣鍑讳繚瀛�'+Cnting); 
+                if(mapCon.containsKey(a.LastName_Encrypted__c)){
+                    //For PIPL testing by Li Jun 20220308 Start
+                    // system.debug('========333333');
+                    // if( Cnting.Account.Parent.Parent.Name   !=  null    ){
+                    //         a.addError('璇ュ鎴蜂汉鍛樺悕瀛楀凡瀛樺湪锛屽湪'+Cnting.Account.Parent.Parent.Name+'鍖婚櫌涓嬪睘 '+Cnting.Account.Parent.Name+'鎴樼暐绉戝鐨� '+Cnting.Account.Name+'绉戝锛岃淇敼,鎴栬�呭嬀閫夆�滀笉鏄噸澶嶇殑瀹㈡埛鍚嶁�濆悗锛屽啀娆$偣鍑讳繚瀛�');
+                    //     }   else if (   Cnting.Account.Parent.Name  !=null  ){
+                    //         a.addError('璇ュ鎴蜂汉鍛樺悕瀛楀凡瀛樺湪锛屽湪'+Cnting.Account.Parent.Name+'鍖婚櫌鐨� '+Cnting.Account.Name+' 鎴樼暐绉戝涓嬶紝璇蜂慨鏀�,鎴栬�呭嬀閫夆�滀笉鏄噸澶嶇殑瀹㈡埛鍚嶁�濆悗锛屽啀娆$偣鍑讳繚瀛�');
+                    //     }   else if (   Cnting.Account.Name !=  null    ){
+                    //         a.addError('璇ュ鎴蜂汉鍛樺悕瀛楀凡瀛樺湪锛屽湪'+Cnting.Account.Name+'鍖婚櫌锛岃淇敼,鎴栬�呭嬀閫夆�滀笉鏄噸澶嶇殑瀹㈡埛鍚嶁�濆悗锛屽啀娆$偣鍑讳繚瀛�'); 
+                    //     }
+                    //For PIPL testing by Li Jun 20220308 End
                     }
-                }
             }   
         }
     }
diff --git a/force-app/main/default/triggers/Repair.trigger b/force-app/main/default/triggers/Repair.trigger
index 303efaa..3de4a47 100644
--- a/force-app/main/default/triggers/Repair.trigger
+++ b/force-app/main/default/triggers/Repair.trigger
@@ -18,9 +18,11 @@
     //wangweipeng  20210727   end
 
     if ((Trigger.isAfter && Trigger.isInsert) || (Trigger.isAfter && Trigger.isUpdate) || (Trigger.isAfter && Trigger.isDelete)) {
-        NFM103Controller.NFM103Trigger(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
-        NFM603Controller.NFM603Trigger(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
-        RepairTrigger.UpdateAssert(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
+        if(!(System.isFuture()||System.isBatch())){// Add By Lijun 20220303 to avoid mutiple execute
+            NFM103Controller.NFM103Trigger(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
+            NFM603Controller.NFM603Trigger(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
+            RepairTrigger.UpdateAssert(Trigger.new, Trigger.newMap, Trigger.old, Trigger.oldMap);
+        }       
     }
     // ----------------------------------------------------------------------
     // 銇撱亾銈堛倞銆佷慨鐞嗐伄銈点兗銉撱偣銈炽兂銉堛儵銈儓闋呯洰銈掕嚜鍕曠殑銇洿鏂般仚銈嬨儹銈搞儍銈�
@@ -66,7 +68,7 @@
             boolean defaultFlag = true;
             //add     wangweipeng               2021/12/09          end
             // 鑽夋涓慨鐞嗐仩銇戞洿鏂�
-            // GZW 鐗规畩澶勭悊 璺宠繃缁翠慨涓績鑷姩璧嬪�硷紝浠ユ墜閫変负鍑� start
+             // GZW 鐗规畩澶勭悊 璺宠繃缁翠慨涓績鑷姩璧嬪�硷紝浠ユ墜閫変负鍑� start
             // 鍒ゆ柇鏉′欢杩藉姞   && repair.Exc_work_location__c == false
             if(repair.Exc_work_location__c){
                 defaultFlag = false;
@@ -76,7 +78,7 @@
             if ((repair.Status__c == '鑽夋涓�' || String.isBlank(repair.Status__c)) == false) {
                 // if (Trigger.isUpdate && repair.SAP_Transfer_time__c == null) {
                 if (Trigger.isUpdate && repair.SAP_Transfer_time__c == null && repair.Exc_work_location__c == false) {
-                
+
                     repair = RepairTrigger.updateWorkLocationSelect(repair, null);
                     defaultFlag = false;
                 }

--
Gitblit v1.9.1