From 19ae52ae3e06c44c646ae6b45dc2b0d7f2cead88 Mon Sep 17 00:00:00 2001
From: 李彤 <litong@prec-tech.com>
Date: 星期一, 15 五月 2023 18:55:53 +0800
Subject: [PATCH] 招标项目终止

---
 force-app/main/default/classes/TenderResultConfirmTaskBatch.cls    |    3 
 force-app/main/default/aura/TerminateApp/TerminateAppController.js |    5 
 force-app/main/default/classes/TenderInformationHandler.cls        |  122 ++++++++--
 force-app/main/default/classes/TerminateController.cls             |  198 ++++++++++++++++++
 force-app/main/default/aura/TerminateApp/TerminateApp.auradoc      |    6 
 force-app/main/default/aura/TerminateApp/TerminateAppHelper.js     |    5 
 force-app/main/default/aura/TerminateApp/TerminateAppRenderer.js   |    5 
 force-app/main/default/aura/TerminateApp/TerminateApp.app-meta.xml |    5 
 force-app/main/default/pages/Terminate.page                        |   25 ++
 force-app/main/default/aura/TerminateApp/TerminateApp.app          |    3 
 force-app/main/default/aura/TerminateApp/TerminateApp.css          |    2 
 force-app/main/default/aura/TerminateApp/TerminateApp.svg          |    7 
 force-app/main/default/classes/LostCancelReportHandler.cls         |   89 +++++++-
 force-app/main/default/classes/TenderOpportunityLinkHandler.cls    |   47 ++++
 force-app/main/default/classes/TerminateControllerTest.cls         |  113 ++++++++++
 15 files changed, 593 insertions(+), 42 deletions(-)

diff --git a/force-app/main/default/aura/TerminateApp/TerminateApp.app b/force-app/main/default/aura/TerminateApp/TerminateApp.app
new file mode 100644
index 0000000..b6aff2f
--- /dev/null
+++ b/force-app/main/default/aura/TerminateApp/TerminateApp.app
@@ -0,0 +1,3 @@
+<aura:application access="public" extends="ltng:outApp">
+    <aura:dependency resource="c:isTerminate"/>
+</aura:application>
\ No newline at end of file
diff --git a/force-app/main/default/aura/TerminateApp/TerminateApp.app-meta.xml b/force-app/main/default/aura/TerminateApp/TerminateApp.app-meta.xml
new file mode 100644
index 0000000..4dd34b9
--- /dev/null
+++ b/force-app/main/default/aura/TerminateApp/TerminateApp.app-meta.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<AuraDefinitionBundle xmlns="http://soap.sforce.com/2006/04/metadata">
+    <apiVersion>56.0</apiVersion>
+    <description>A Lightning Application Bundle</description>
+</AuraDefinitionBundle>
\ No newline at end of file
diff --git a/force-app/main/default/aura/TerminateApp/TerminateApp.auradoc b/force-app/main/default/aura/TerminateApp/TerminateApp.auradoc
new file mode 100644
index 0000000..d0d6eb5
--- /dev/null
+++ b/force-app/main/default/aura/TerminateApp/TerminateApp.auradoc
@@ -0,0 +1,6 @@
+<aura:documentation>
+	<aura:description>Documentation</aura:description>
+	<aura:example name="ExampleName" ref="exampleComponentName" label="Label">
+		Example Description
+	</aura:example>
+</aura:documentation>
\ No newline at end of file
diff --git a/force-app/main/default/aura/TerminateApp/TerminateApp.css b/force-app/main/default/aura/TerminateApp/TerminateApp.css
new file mode 100644
index 0000000..f407185
--- /dev/null
+++ b/force-app/main/default/aura/TerminateApp/TerminateApp.css
@@ -0,0 +1,2 @@
+.THIS {
+}
diff --git a/force-app/main/default/aura/TerminateApp/TerminateApp.svg b/force-app/main/default/aura/TerminateApp/TerminateApp.svg
new file mode 100644
index 0000000..791b3c7
--- /dev/null
+++ b/force-app/main/default/aura/TerminateApp/TerminateApp.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg width="120px" height="120px" viewBox="0 0 120 120" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+	<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+		<path d="M120,108 C120,114.6 114.6,120 108,120 L12,120 C5.4,120 0,114.6 0,108 L0,12 C0,5.4 5.4,0 12,0 L108,0 C114.6,0 120,5.4 120,12 L120,108 L120,108 Z" id="Shape" fill="#2A739E"/>
+		<path d="M77.7383308,20 L61.1640113,20 L44.7300055,63.2000173 L56.0543288,63.2000173 L40,99.623291 L72.7458388,54.5871812 L60.907727,54.5871812 L77.7383308,20 Z" id="Path-1" fill="#FFFFFF"/>
+	</g>
+</svg>
\ No newline at end of file
diff --git a/force-app/main/default/aura/TerminateApp/TerminateAppController.js b/force-app/main/default/aura/TerminateApp/TerminateAppController.js
new file mode 100644
index 0000000..b235899
--- /dev/null
+++ b/force-app/main/default/aura/TerminateApp/TerminateAppController.js
@@ -0,0 +1,5 @@
+({
+    myAction : function(component, event, helper) {
+
+    }
+})
diff --git a/force-app/main/default/aura/TerminateApp/TerminateAppHelper.js b/force-app/main/default/aura/TerminateApp/TerminateAppHelper.js
new file mode 100644
index 0000000..f8a77e3
--- /dev/null
+++ b/force-app/main/default/aura/TerminateApp/TerminateAppHelper.js
@@ -0,0 +1,5 @@
+({
+    helperMethod : function() {
+
+    }
+})
diff --git a/force-app/main/default/aura/TerminateApp/TerminateAppRenderer.js b/force-app/main/default/aura/TerminateApp/TerminateAppRenderer.js
new file mode 100644
index 0000000..3a11ff5
--- /dev/null
+++ b/force-app/main/default/aura/TerminateApp/TerminateAppRenderer.js
@@ -0,0 +1,5 @@
+({
+
+// Your renderer method overrides go here
+
+})
diff --git a/force-app/main/default/classes/LostCancelReportHandler.cls b/force-app/main/default/classes/LostCancelReportHandler.cls
index ebce451..5044614 100644
--- a/force-app/main/default/classes/LostCancelReportHandler.cls
+++ b/force-app/main/default/classes/LostCancelReportHandler.cls
@@ -30,7 +30,7 @@
 
     //2022-6-22 yjk 璇环璺熻繘浠诲姟 start
     protected override void afterInsert() {
-        updateTask();    
+        updateTask();  
     }
 
     // 2022-7-29 ssm XLIU-CGSC8R 銆愬鎵樸�慬鏀瑰杽銆戣浠烽噷鍒犻櫎鎵瑰噯鐨勫け鍗曟姤鍛婄姸鎬�1鑷姩鍙�
@@ -41,14 +41,15 @@
 
     private void updateTask(){
         List<Id> oppIdList = new List<Id>();
-        Set<Id> oppIdSet = new Set<Id>();
+        Set<Id> oppIdSet = new Set<Id>(); 
         Set<Id> sdoppidSet = new Set<Id>();
         List<Id> updateOppId = new List<Id>(); 
         List<Opportunity> updateOpp = new List<Opportunity>();
+        Map<String,String> cancelMap = new Map<String,String>();//lt 20230425 鎷涙爣缁堟 add
         
         for(Lost_cancel_report__c lcr : newList){
             oppIdList.add(lcr.Opportunity__c);
-			
+            cancelMap.put(lcr.Opportunity__c, lcr.RecordType.Name);//lt 20230425 鎷涙爣缁堟 add
         }
         // 20221202 ljh DB202211594688  start
         // List<task__c> taskList = [select id,taskStatus__c,OpportunityId__c from task__c where RecordType.Name ='涓爣缁撴灉纭' and taskStatus__c = '02 鎺ュ彈' and OpportunityId__c in :oppIdList];
@@ -57,8 +58,22 @@
         //     //updateOppId.add(tsk.OpportunityId__c); //20220823 you 娌℃湁浠诲姟鏃讹紝
         // }
         // LoseListTask 澶卞崟鎶ュ憡浠诲姟   winBiddingTask  涓爣缁撴灉纭
-        List<task__c> taskList = [select id,taskStatus__c,OpportunityId__c,RecordType.Name from task__c where (RecordType.Name ='涓爣缁撴灉纭' or RecordType.Name ='澶卞崟鎶ュ憡浠诲姟')  and OpportunityId__c in :oppIdList];
-        for(task__c tsk : taskList){
+        List<task__c> taskList = [select id,taskStatus__c,OpportunityId__c,RecordType.Name
+                                  from task__c 
+                                  where (RecordType.Name ='涓爣缁撴灉纭' or RecordType.Name ='澶卞崟鎶ュ憡浠诲姟')  
+                                  and OpportunityId__c in :oppIdList];
+        // 20230508 ljh DB202305008316 start
+        /*for(task__c tsk : taskList){
+            //lt 20230425 鎷涙爣缁堟 start
+            System.debug('---lt123---cancelMap:'+cancelMap);
+            System.debug('---lt123---cancelMap.get(tsk.OpportunityId__c):'+cancelMap.get(tsk.OpportunityId__c));
+            if(cancelMap.containsKey(tsk.OpportunityId__c)){
+                if(cancelMap.get(tsk.OpportunityId__c) == 'PCL_Cancel_report'){
+                    tsk.taskStatus__c = '04 鍙栨秷';
+                    tsk.cancelReasonSelect__c = '椤圭洰缁堟';
+                }
+            }else
+            //lt 20230425 鎷涙爣缁堟 end
             if(tsk.RecordType.Name == '涓爣缁撴灉纭' && tsk.taskStatus__c == '02 鎺ュ彈'){
                 tsk.taskStatus__c = '03 瀹屾垚';
             }
@@ -67,7 +82,28 @@
                 sdoppidSet.add(tsk.OpportunityId__c);
             }
             oppIdSet.add(tsk.OpportunityId__c);
+        }*/
+        List<task__c> Uptask = new List<task__c>();
+        for(task__c tsk : taskList){
+            task__c temp = new task__c();
+            temp.Id = tsk.Id;
+            if(cancelMap.containsKey(tsk.OpportunityId__c)){
+                if(cancelMap.get(tsk.OpportunityId__c) == 'PCL_Cancel_report'){
+                    temp.taskStatus__c = '04 鍙栨秷';
+                    temp.cancelReasonSelect__c = '椤圭洰缁堟';
+                }
+            }else
+            if(tsk.RecordType.Name == '涓爣缁撴灉纭' && tsk.taskStatus__c == '02 鎺ュ彈'){
+                temp.taskStatus__c = '03 瀹屾垚';
+            }
+            if(tsk.RecordType.Name == '澶卞崟鎶ュ憡浠诲姟'){
+                sdoppidSet.add(tsk.OpportunityId__c);
+            }
+            oppIdSet.add(tsk.OpportunityId__c);
+            Uptask.add(temp);
         }
+        // 20230508 ljh DB202305008316 end
+
         // for(Id oppId : oppIdList){//20220823 you
         for(Id oppId : oppIdSet){
         // 20221202 ljh DB202211594688  end
@@ -89,9 +125,12 @@
             updateOpp.add(opptemp);
         }
         
-        
 		update updateOpp;
-        update taskList;
+        // 20230508 ljh DB202305008316 start
+        // update taskList;
+        update Uptask;
+        // 20230508 ljh DB202305008316 end
+        
     }
     //2022-6-22 yjk 璇环璺熻繘浠诲姟 end
 
@@ -191,11 +230,28 @@
 
         //20220708 璇环浠诲姟寮�鍙戯紝缁撴潫澶卞崟浠诲姟鐘舵�侊紝绛涢�夐渶瑕佺殑淇敼鐨勫け鍗曚换鍔� start
         Set<String> oppIdSet = new Set<String>();
+        Set<String> passOppIdSet = new Set<String>();
         for (Lost_cancel_report__c n: newList) {
             if ((n.Report_Status__c != oldMap.get(n.Id).Report_Status__c) && n.Report_Status__c == '鐢宠涓�') {
                 oppIdSet.add(n.Opportunity__c);
             }
+            if ((n.Report_Status__c != oldMap.get(n.Id).Report_Status__c) && n.Report_Status__c == '鎵瑰噯') {
+                passOppIdSet.add(n.Opportunity__c);
+            }
         }
+        // 20230411 澶氬け鍗曟姤鍛婂悎骞讹紝鍙栧嚭寰呭悎骞剁殑璇环 start
+        Map<String, Opportunity> mapOpps = new Map<String, Opportunity>();
+        List<Opportunity> lstOpps = [select Id, RivalHostsNumber__c, CompetitorProduct1__c, 
+                                        CompetitorProduct2__c, CompetitorProduct3__c, Lost_reason_main__c, 
+                                        Lost_Reason_Sub__c, Agencies__c, PCLLostBrands__c, of_lost_system_processor__c, 
+                                        LostPrices__c 
+                                    from Opportunity 
+                                    where Id in :passOppIdSet];
+        for(Opportunity opp : lstOpps) {
+            mapOpps.put(opp.Id, opp);
+        }
+        System.debug('mapOpps: ' + mapOpps);
+        // 20230411 澶氬け鍗曟姤鍛婂悎骞讹紝鍙栧嚭寰呭悎骞剁殑璇环 end
         // 20220720 ljh add 璁板綍鍙栨秷/澶卞崟鎶ュ憡鎻愪氦鏃剁偣鐨勬垬鐣ヤ骇鍝佸垽鏂� start
         if(oppIdSet.size() > 0 ){
             List<OpportunityLineItem> OppLIlist = [select Id,Key_product_147P_Text__c,Key_product_147P__c from OpportunityLineItem  where OpportunityId in :oppIdSet];
@@ -204,9 +260,13 @@
             }
             update OppLIlist;
         // 20220720 ljh add 璁板綍鍙栨秷/澶卞崟鎶ュ憡鎻愪氦鏃剁偣鐨勬垬鐣ヤ骇鍝佸垽鏂� end
-	        List<task__c> taskList = [select id,taskStatus__c from task__c where RecordType.Name ='澶卞崟鎶ュ憡浠诲姟' and taskStatus__c = '02 鎺ュ彈' and OpportunityId__c in :oppIdSet];
+	        List<task__c> taskList = [select id,taskStatus__c
+                                      from task__c 
+                                      where RecordType.Name ='澶卞崟鎶ュ憡浠诲姟' 
+                                      and taskStatus__c = '02 鎺ュ彈' 
+                                      and OpportunityId__c in :oppIdSet];
 	        for(task__c tsk : taskList){
-	            tsk.taskStatus__c = '03 瀹屾垚';
+                tsk.taskStatus__c = '03 瀹屾垚';
 	        }
 	        update taskList;
         }// 20220720 ljh update
@@ -231,11 +291,16 @@
             List<String> ppList=new List<String>();     //澶卞崟鍝佺墝
             // List<String> yyList=new List<String>();     //澶卞崟鍘熷洜
             //鍒濆鍖�
-            Opportunity opp=new Opportunity();
+            // 20230411 澶氬け鍗曟姤鍛婂悎骞讹紝鍙栧嚭寰呭悎骞剁殑璇环 start
+            Opportunity opp = mapOpps != null && mapOpps.containsKey(arrMap.get(lcro).Opportunity__c) ? mapOpps.get(arrMap.get(lcro).Opportunity__c) : new Opportunity();
             //20220930  lt SWAG-CHL5XA銆怓Y23璇环鏀瑰杽銆�-缁熻涓绘満鍙版暟 start
-            opp.RivalHostsNumber__c = 0;
+            opp.RivalHostsNumber__c = opp.RivalHostsNumber__c != null ? opp.RivalHostsNumber__c : 0;
             //20220930  lt SWAG-CHL5XA銆怓Y23璇环鏀瑰杽銆�-缁熻涓绘満鍙版暟 end
-            opp.Id=arrMap.get(lcro).Opportunity__c; opp.PCLLostBrands__c=''; opp.Agencies__c='';    //Id ,鍝佺墝,缁忛攢鍟�
+            opp.Id = String.isNotBlank(opp.Id) ? opp.Id : arrMap.get(lcro).Opportunity__c; 
+            opp.PCLLostBrands__c = String.isNotBlank(opp.PCLLostBrands__c) ? opp.PCLLostBrands__c : ''; 
+            opp.Agencies__c = String.isNotBlank(opp.Agencies__c) ? opp.Agencies__c : ''; 
+            System.debug('opp: ' + opp);
+            // 20230411 澶氬け鍗曟姤鍛婂悎骞讹紝鍙栧嚭寰呭悎骞剁殑璇环 end
             // for浜у搧
             for (PCLLostProduct__c lcr : lcrList) {
                 if (opp.Id==lcr.Opportunity__c) {
diff --git a/force-app/main/default/classes/TenderInformationHandler.cls b/force-app/main/default/classes/TenderInformationHandler.cls
index de9c2b1..1e4df89 100644
--- a/force-app/main/default/classes/TenderInformationHandler.cls
+++ b/force-app/main/default/classes/TenderInformationHandler.cls
@@ -40,6 +40,7 @@
     }
 
     protected override void beforeUpdate() {
+        SetIsReactionOpp(); //lt DB202304062844 20230515 椤圭洰缁堟娴佺▼寮�鍙� add
         //鍙嶉�昏緫鍒犻櫎 fxk
         changeRelateOppDate();
         updateTenDel();
@@ -81,14 +82,16 @@
         List<String> oppIds = new List<String>();//璇环
         // 鑾峰緱瑕佹洿鏂扮殑璇环
         for (Tender_information__c record: newList) {
-           if ( ( ('3-5锛氫腑鏍囬�氱煡'.equals((oldMap.get(record.Id).subInfoType__c)) || '3-6锛氬悎鍚屽叕鍛�'.equals((oldMap.get(record.Id).subInfoType__c)) ) && ('3-1锛氬簾鏍囧叕鍛�'.equals(record.subInfoType__c)  || '3-2锛氭祦鏍囧叕鍛�'.equals(record.subInfoType__c) )) || (!'3锛氱粨鏋�'.equals(record.InfoType__c) && '3锛氱粨鏋�'.equals((oldMap.get(record.Id).InfoType__c)))) {
+            //lt 20230425 鎷涙爣缁堟 add  || ('鎵瑰噯'.equals(record.TerminateApprovalStatus__c) && !'鎵瑰噯'.equals((oldMap.get(record.Id).TerminateApprovalStatus__c)))
+           if ( ( ('3-5锛氫腑鏍囬�氱煡'.equals((oldMap.get(record.Id).subInfoType__c)) || '3-6锛氬悎鍚屽叕鍛�'.equals((oldMap.get(record.Id).subInfoType__c)) ) && ('3-1锛氬簾鏍囧叕鍛�'.equals(record.subInfoType__c)  || '3-2锛氭祦鏍囧叕鍛�'.equals(record.subInfoType__c) )) || (!'3锛氱粨鏋�'.equals(record.InfoType__c) && '3锛氱粨鏋�'.equals((oldMap.get(record.Id).InfoType__c))) || ('鎵瑰噯'.equals(record.TerminateApprovalStatus__c) && !'鎵瑰噯'.equals((oldMap.get(record.Id).TerminateApprovalStatus__c)))) {
                 Tenids.add(record.id);
             }
         }
         Map<String,String> InfoTypeMap = new Map<String,String>(); //鍒ゆ柇鏄惁鏄洜涓轰腑鏍囦慨鏀瑰緱
+        Map<String,String> TerminationStateMap = new Map<String,String>(); //lt 20230425 鎷涙爣缁堟 add 
         if(null!=Tenids && Tenids.size()>0){
-            
-            List<Tender_Opportunity_Link__c> TenOppLinkList = [select id, Tender_information__c,Tender_information__r.InfoType__c, Opportunity__c from Tender_Opportunity_Link__c where Tender_information__c in :Tenids];
+            //lt 20230425 鎷涙爣缁堟 add Tender_information__r.TerminateApprovalStatus__c,
+            List<Tender_Opportunity_Link__c> TenOppLinkList = [select id, Tender_information__c,Tender_information__r.InfoType__c, Tender_information__r.TerminateApprovalStatus__c, Opportunity__c from Tender_Opportunity_Link__c where Tender_information__c in :Tenids];
             if(null!=TenOppLinkList && TenOppLinkList.size()>0){
                 for(Tender_Opportunity_Link__c topl :TenOppLinkList){
                     String oppid =String.valueOf(topl.Opportunity__c);
@@ -97,52 +100,105 @@
                     if (!oppIds.contains(topl.Opportunity__c)) {
                         oppIds.add(topl.Opportunity__c);
                     }
-                    if(!'3锛氱粨鏋�'.equals(topl.Tender_information__r.InfoType__c)){
+                    //lt DB202304062844 20230515 椤圭洰缁堟娴佺▼寮�鍙� update if(!'3锛氱粨鏋�'.equals(topl.Tender_information__r.InfoType__c)) --- if(!'3锛氱粨鏋�'.equals(NewMap.get(topl.Tender_information__c).InfoType__c))
+                    if(!'3锛氱粨鏋�'.equals(NewMap.get(topl.Tender_information__c).InfoType__c)){
                        InfoTypeMap.put(topl.Opportunity__c,topl.Tender_information__c); 
                     }   
+                    //lt 20230425 鎷涙爣缁堟 start
+                    System.debug('---lt123---topl.Tender_information__r.TerminateApprovalStatus__c:'+topl.Tender_information__r.TerminateApprovalStatus__c);
+                    if('鎵瑰噯'.equals(newMap.get(topl.Tender_information__c).TerminateApprovalStatus__c)){
+                        TerminationStateMap.put(topl.Opportunity__c,topl.Tender_information__c); 
+                     }
+                    //lt 20230425 鎷涙爣缁堟 end
                 }
             }
         }
         if (null!=oppTens && oppTens.size()>0) {
             //20221208 you DB202211594688 鏈夌‘璁や换鍔$殑璇环涓嶆竻
-          List<Opportunity> opportunities = [select id, Bidding_Project_Name_Bid__c, Opp_Order__c from Opportunity where id in :oppIds];
-           List<task__c> taskList = [select id,taskStatus__c,RecordType.Name,Tender_information_Task__c,OpportunityId__c from task__c where ((RecordType.Name ='澶卞崟鎶ュ憡浠诲姟' and OpportunityId__c in:oppIds) or (RecordType.Name ='涓爣缁撴灉纭' and Opp_Tender__c in :oppTens)) and taskStatus__c <> '03 瀹屾垚'];
+            List<Opportunity> opportunities = [select id, Bidding_Project_Name_Bid__c, Opp_Order__c,ConfirmationofAward__c from Opportunity where id in :oppIds];
+            //lt 20230425 鎷涙爣缁堟 add Tender_information_Task__r.TerminateApprovalStatus__c   20230510 add and taskStatus__c <> '04 鍙栨秷'
+            //lt DB202304062844 20230515 椤圭洰缁堟娴佺▼寮�鍙� update  taskStatus__c <> '03 瀹屾垚' and taskStatus__c <> '04 鍙栨秷'  ---  taskStatus__c = '02 鎺ュ彈'
+            List<task__c> taskList = [select id,taskStatus__c,RecordType.Name,Tender_information_Task__c,
+                                            OpportunityId__c,Tender_information_Task__r.TerminateApprovalStatus__c 
+                                    from task__c 
+                                    where ((RecordType.Name ='澶卞崟鎶ュ憡浠诲姟' and OpportunityId__c in:oppIds) 
+                                    or (RecordType.Name ='涓爣缁撴灉纭' and Opp_Tender__c in :oppTens)) 
+                                    and taskStatus__c = '02 鎺ュ彈'];
             for(task__c tsk : taskList){
-                if(tsk.RecordType.Name =='澶卞崟鎶ュ憡浠诲姟' && oppIds.contains(tsk.OpportunityId__c) && tsk.taskStatus__c !='03 瀹屾垚'){
+                System.debug('---lt123---TerminationStateMap:'+TerminationStateMap);
+                System.debug('---lt123---tsk.Tender_information_Task__r.TerminateApprovalStatus__c:'+tsk.Tender_information_Task__r.TerminateApprovalStatus__c);
+                //lt DB202304062844 20230515 椤圭洰缁堟娴佺▼寮�鍙� update !='03 瀹屾垚' --- == '02 鎺ュ彈'
+                if(tsk.RecordType.Name =='澶卞崟鎶ュ憡浠诲姟' && oppIds.contains(tsk.OpportunityId__c) && tsk.taskStatus__c == '02 鎺ュ彈'){
                   //涓嶅仛鎿嶄綔
                 }else{
                     tsk.taskStatus__c = '04 鍙栨秷';
                     tsk.cancelDate__c = date.today();
                     if(null!=InfoTypeMap && InfoTypeMap.containsKey(tsk.OpportunityId__c)){
                        tsk.cancelReasonSelect__c = '淇敼椤圭洰闃舵';
-                    }else{
+                    }
+                    //lt 20230425 鎷涙爣缁堟 start
+                    else if(null!=TerminationStateMap && TerminationStateMap.containsKey(tsk.OpportunityId__c)){
+                        tsk.cancelReasonSelect__c = '椤圭洰缁堟';
+                    }
+                    //lt 20230425 鎷涙爣缁堟 end
+                    else{
                        tsk.cancelReasonSelect__c = '娴佹爣/搴熸爣'; 
                     }
                 }
             }
-             update taskList;
-            if(taskList.size() > 0){
-                for (task__c tlink : taskList) {
-                    for (Opportunity opp : opportunities) {
-                        if (opp.Id == tlink.OpportunityId__c) {
-                            if(tlink.RecordType.Name =='澶卞崟鎶ュ憡浠诲姟' && tlink.taskStatus__c !='03 瀹屾垚'){
-                              //涓嶅仛鎿嶄綔
-                            }else{
-                               //20220718 you 璇环浠诲姟 start
-                                opp.ConfirmationofAward__c = null;
-                                opp.Task_createTime__c = null;
-                                opp.ConfirmationofAward_createTime__c =null;
-                                opp.LostTask_comfirmTime__c =null;
-                                opp.Is_ConfirmationofAward__c =null;
-                                opp.LostTask_createTime__c =null;
-                                //opp.Closing_Bid_Date__c = null;
-                                //20220718 you 璇环浠诲姟 end
-                            }
-                       }  
+            update taskList;
+            //lt DB202304062844 20230515 椤圭洰缁堟娴佺▼寮�鍙�  start
+            // if(taskList.size() > 0){
+            if(opportunities.size() > 0){
+                for (Opportunity opp : opportunities) {
+                    Boolean upd_flg = null!=TerminationStateMap && TerminationStateMap.containsKey(opp.Id) && opp.ConfirmationofAward__c == '绔炰簤瀵规墜涓爣' ? false : true;
+                    if (!upd_flg) {
+                        continue;
                     }
+                    for (task__c tlink : taskList) {
+                        if (opp.Id == tlink.OpportunityId__c) {
+                            //lt DB202304062844 20230515 椤圭洰缁堟娴佺▼寮�鍙� update !='03 瀹屾垚' --- == '02 鎺ュ彈'
+                            if(tlink.RecordType.Name =='澶卞崟鎶ュ憡浠诲姟' && tlink.taskStatus__c == '02 鎺ュ彈'){
+                                upd_flg = false;
+                                break;
+                              //涓嶅仛鎿嶄綔
+                            // }else{
+                            //    //20220718 you 璇环浠诲姟 start
+                            //     opp.ConfirmationofAward__c = null;
+                            //     opp.Task_createTime__c = null;
+                            //     opp.ConfirmationofAward_createTime__c =null;
+                            //     opp.LostTask_comfirmTime__c =null;
+                            //     opp.Is_ConfirmationofAward__c =null;
+                            //     opp.LostTask_createTime__c =null;
+                            //     //lt DB202304062844 20230515 椤圭洰缁堟娴佺▼寮�鍙� start
+                            //     if(tlink.Tender_information_Task__r.TerminateApprovalStatus__c == '鎵瑰噯' && opp.ConfirmationofAward__c == 'OLY涓爣'){
+                            //         opp.Closing_Bid_Date__c = null;
+                            //     }
+                            //     //lt DB202304062844 20230515 椤圭洰缁堟娴佺▼寮�鍙�  end
+                            //     //opp.Closing_Bid_Date__c = null;
+                            //     //20220718 you 璇环浠诲姟 end
+                            }
+                        }
+                    }
+                    if (upd_flg) {
+                        //lt DB202304062844 20230515 椤圭洰缁堟娴佺▼寮�鍙� start
+                        if(null!=TerminationStateMap && TerminationStateMap.containsKey(opp.Id) && opp.ConfirmationofAward__c == 'OLY涓爣'){
+                            opp.Closing_Bid_Date__c = null;
+                        } 
+                        //lt DB202304062844 20230515 椤圭洰缁堟娴佺▼寮�鍙� end
+                        opp.ConfirmationofAward__c = null;
+                        opp.Task_createTime__c = null;
+                        opp.ConfirmationofAward_createTime__c =null;
+                        opp.LostTask_comfirmTime__c =null;
+                        opp.Is_ConfirmationofAward__c =null;
+                        opp.LostTask_createTime__c =null;
+                    } 
                 }
             } 
+            //lt DB202304062844 20230515 椤圭洰缁堟娴佺▼寮�鍙� end
+            StaticParameter.EscapeOppandStaTrigger = true; //lt DB202304062844 20230515 椤圭洰缁堟娴佺▼寮�鍙� 璺宠繃璇环trigger start 
             update opportunities;   
+            StaticParameter.EscapeOppandStaTrigger = false; //lt DB202304062844 20230515 椤圭洰缁堟娴佺▼寮�鍙� end
         }
     }    
     //20220718 you 璇环浠诲姟 end
@@ -1337,4 +1393,16 @@
         }
     }
     **/
+
+    //lt DB202304062844 20230515 椤圭洰缁堟娴佺▼寮�鍙� start  subInfoType__c
+    //濡傛灉椤圭洰闃舵鍙戠敓鍙樺寲 鎴栬�呴樁娈佃ˉ鍏呰鏄庡彂鐢熷彉鍖� 鎴栬�呯粓姝㈠鎵瑰彂鐢熷彉鍖栦笖瀹℃壒閫氳繃 鎶婃嫑鏍囬」鐩笂鐨処sReactionOpp__c璁剧疆涓簍rue
+    public void SetIsReactionOpp() {
+        for(Tender_information__c newTen : newList){
+            Tender_information__c oldTen = oldMap.get(newTen.Id);
+            if(newTen.InfoType__c != oldTen.InfoType__c || newTen.subInfoType__c != oldTen.subInfoType__c || (newTen.TerminateApprovalStatus__c != oldTen.TerminateApprovalStatus__c && newTen.TerminateApprovalStatus__c == '鎵瑰噯')){
+                newTen.IsReactionOpp__c = true;
+            }
+        }
+    }
+    //lt DB202304062844 20230515 椤圭洰缁堟娴佺▼寮�鍙� end
 }
\ No newline at end of file
diff --git a/force-app/main/default/classes/TenderOpportunityLinkHandler.cls b/force-app/main/default/classes/TenderOpportunityLinkHandler.cls
index 197d4a5..128094a 100644
--- a/force-app/main/default/classes/TenderOpportunityLinkHandler.cls
+++ b/force-app/main/default/classes/TenderOpportunityLinkHandler.cls
@@ -10,12 +10,13 @@
     this.newList = (List<Tender_Opportunity_Link__c>) Trigger.new;
     this.oldList = (List<Tender_Opportunity_Link__c>) Trigger.old;
 }
-
+ 
 protected override void afterInsert() {
     // 鍒ゆ柇鏄惁璺宠繃
+    updateTerminateTender(this.newList);  //lt 20230419 椤圭洰缁堟娴佺▼寮�鍙� add
     if (!StaticParameter.EscapeTOLinkTrigger) {
         updateTender(this.newList);
-        updateOppotunityByInsert(this.newList);
+        updateOppotunityByInsert(this.newList);      
     }
 }
 
@@ -43,6 +44,48 @@
     }
 }
 
+//lt 20230419 椤圭洰缁堟娴佺▼寮�鍙� 缁堟鐢宠鐘舵�佹竻闄� add
+//椤圭洰缁堟娴佺▼寮�鍙� -- 娓呴櫎鎷涙爣椤圭洰缁堟鐢宠鐨勪俊鎭紝椤圭洰閲嶅惎鏍囪瘑鎵撳嬀
+public void updateTerminateTender(List<Tender_Opportunity_Link__c> records){
+
+    if (records != null && records.size() > 0){
+        List<String> tenders = new List<String>();
+        // 鑾峰緱瑕佹洿鏂扮殑鎷涙爣椤圭洰
+        for (Tender_Opportunity_Link__c record: records) {
+            if (!tenders.contains(record.Tender_information__c)) {
+                tenders.add(record.Tender_information__c);
+            }
+        }
+
+        List<Tender_information__c> UpdateTenders = new List<Tender_information__c>();
+
+        if (tenders.size() > 0){
+            List<Tender_information__c> tenderList = [SELECT id, status__c, TerminateReason__c, IsTerminate__c,
+                                                             TerminateApprovalStatus__c, TerminateApprovalTime__c,
+                                                             ProjectRestartFLG__c,subInfoType__c
+                                                      FROM Tender_information__c 
+                                                      WHERE id in :tenders];
+
+            if(tenderList.size() > 0){
+                for (Tender_information__c tender : tenderList){
+                    //if(tender.status__c == '09.缁堟' && tender.TerminateReason__c != '缁忛攢鍟嗗師鍥�' && tender.subInfoType__c != '3-1锛氬簾鏍囧叕鍛�' && tender.subInfoType__c != '3-2锛氭祦鏍囧叕鍛�')
+                    if(tender.status__c == '09.缁堟'){
+                        tender.ProjectRestartFLG__c = true;
+                        tender.IsTerminate__c = null;
+                        tender.TerminateApprovalTime__c = null;
+                        tender.TerminateApprovalStatus__c = null;
+    
+                        UpdateTenders.add(tender);
+                    }
+                }
+            }
+        }
+        if(UpdateTenders.size() > 0){
+            update UpdateTenders;
+        }
+    }
+}
+
 // 鏇存柊鎷涙爣淇℃伅
 public void updateTender(List<Tender_Opportunity_Link__c> records) {
     if (records != null && records.size() > 0) {
diff --git a/force-app/main/default/classes/TenderResultConfirmTaskBatch.cls b/force-app/main/default/classes/TenderResultConfirmTaskBatch.cls
index 4ea7996..6f2cf42 100644
--- a/force-app/main/default/classes/TenderResultConfirmTaskBatch.cls
+++ b/force-app/main/default/classes/TenderResultConfirmTaskBatch.cls
@@ -26,7 +26,8 @@
                      + 'Opportunity__r.ConfirmationofAward_createTime__c ' 
                      + 'FROM Tender_Opportunity_Link__c '
                      + 'WHERE Tender_information__r.InfoType__c = \'3锛氱粨鏋淺' ' 
-                     + 'AND (Tender_information__r.subInfoType__c = \'3-5锛氫腑鏍囬�氱煡\' OR Tender_information__r.subInfoType__c = \'3-6锛氬悎鍚屽叕鍛奬') ';
+                     + 'AND (Tender_information__r.subInfoType__c = \'3-5锛氫腑鏍囬�氱煡\' OR Tender_information__r.subInfoType__c = \'3-6锛氬悎鍚屽叕鍛奬') '
+                     + 'AND Opportunity__r.ConfirmationofAward__c = null AND Tender_information__r.TerminateApprovalStatus__c != \'鎵瑰噯\' ';   //lt DB202304062844 20230515 椤圭洰缁堟娴佺▼寮�鍙� add
                      //+ 'AND Tender_information__r.RecordTypeId = \'01210000000VLUI\' ';
                      
         //20220715 you 鎷涙爣浠诲姟 start
diff --git a/force-app/main/default/classes/TerminateController.cls b/force-app/main/default/classes/TerminateController.cls
new file mode 100644
index 0000000..72d28f1
--- /dev/null
+++ b/force-app/main/default/classes/TerminateController.cls
@@ -0,0 +1,198 @@
+public  with sharing    class TerminateController {
+    public TerminateController() {
+
+    }
+
+    //鏍规嵁ID鏌ヨ  鎷涙姇鏍囬」鐩�
+    @AuraEnabled
+    public  static string GetInspectById(String Id){
+        QueryWrapper query = new QueryWrapper(Tender_information__c.SObjectType);
+        query.eq('Id', Id);
+        List<Tender_information__c> arrays = DataBasePlus.listPlus(query);
+        return JSON.serialize(arrays); 
+    }
+
+    @AuraEnabled
+    public static Boolean cannotModifyIsRelateProject(String Id){
+        Boolean cannotModify = false;
+        String profileIds = System.Label.Tender_IsnotRelated_ModifyDisable;
+        System.debug('---lt123绠�妗d---'+UserInfo.getProfileId());
+        // 鍒ゆ柇褰撳墠鐢ㄦ埛绠�妗�
+        if (profileIds.contains(UserInfo.getProfileId())) {
+            // 鑾峰彇鎷涙爣椤圭洰 鍒ゆ柇鐩稿叧鎬�
+            Tender_information__c tender = [select Id, IsRelateProject__c from Tender_information__c where Id = :Id];
+            if (tender != null && '鏄�'.equals(tender.IsRelateProject__c)) {
+                cannotModify = true;
+            }
+        }
+        return cannotModify;
+    }
+
+
+     //鎷涙姇鏍囬」鐩垪琛ㄥ瓧娈� irrelevantReasons__c 鎵�鏈夌殑鍊�
+    @AuraEnabled
+    public  static string GetIrrelevantReasons(){
+      String JsonData = CommonUtils.GetSelectedValues( Tender_information__c.irrelevantReasons__c.getDescribe());
+      return JsonData;
+    }
+
+ 
+     //鎷涙姇鏍囬」鐩垪琛ㄥ瓧娈� TerminateReason__c 鎵�鏈夌殑鍊�
+    @AuraEnabled
+    public  static string GetIrresponsibleReason(){
+      String JsonData = CommonUtils.GetSelectedValues( Tender_information__c.TerminateReason__c.getDescribe());
+      return JsonData;
+    }
+
+ //20220913 you SWAG-CJ3DS5 start
+      //鎷涙姇鏍囬」鐩垪琛ㄥ瓧娈� TerminateReason__c 鎵�鏈夌殑鍊�
+    @AuraEnabled
+    public  static string GetproInvolvedManual(){
+      String JsonData = CommonUtils.GetSelectedValues( Tender_information__c.proInvolvedManual__c.getDescribe());
+      return JsonData;
+    }
+//20220913 you SWAG-CJ3DS5 end  
+  
+
+      // 浜у搧绫�
+      public class Information {
+        public  String hospital;//鍏宠仈鍖婚櫌
+        public  String account;// 鍏宠仈鏅�氱瀹�
+        public  String department;//鍏宠仈鍖婚櫌
+    }
+
+    // 鏌ヨ鐢ㄦ埛 鏍规嵁鐖禝D鐨勫��  
+    @AuraEnabled
+    public  static string  GetIsPrentIdArr(String Id){
+        return CommonUtils.GetAccountPrentID(Id);
+    }
+
+
+    //淇濆瓨鏁版嵁  JSONData 鏄� 鎷涙姇鏍囬」鐩� 瀵硅薄鐨� json鏍煎紡鐨勫�� 
+    @AuraEnabled
+    public  static string  SaveData(String JsonData,String Id,String checkboxValue){
+        try{
+            Tender_information__c temp = (Tender_information__c)JSON.deserialize(JsonData,Tender_information__c.class);
+            System.debug('temp=='+temp);
+            
+            StaticParameter.EscapeOtherUpdateTenOwner = false;
+            update temp;
+            StaticParameter.EscapeOtherUpdateTenOwner = true;
+            
+            //String assvale=AssignValuesToOwner(Id,checkboxValue);
+        }catch(Exception ex)
+        {
+           return  ex.getMessage();
+        }
+        return  '鎴愬姛';
+    }
+
+    //淇濆瓨 搴旀爣鏁版嵁 JSONData 鏄� 鎷涙姇鏍囬」鐩� 瀵硅薄鐨� json鏍煎紡鐨勫�� 
+     @AuraEnabled
+    public  static String SaveDataYB(String JsonData){
+        try{
+            Tender_information__c temp = (Tender_information__c)JSON.deserialize(JsonData,Tender_information__c.class);
+          //if (temp.IsTerminate__c == '鍚�') {
+                temp.TerminateApprovalStatus__c = '鑽夋涓�';
+                temp.ownerid = UserInfo.getUserId();
+            //}else{
+            //    temp.TerminateApprovalStatus__c = null;
+            //    temp.irresponsibleReasonOther__c = null;
+            //    temp.TerminateReason__c = null;
+            //    temp.irresponseApplyTime__c = null;
+            //    temp.TerminateExtraContent__c = null;
+            //}
+            update temp;
+        }catch(Exception ex)
+        {
+            return  ex.getMessage();
+        }
+        return  '鎴愬姛';
+    }
+
+    //鎻愪氦瀹℃牳 搴旀爣鏁版嵁 JSONData 鏄� 鎷涙姇鏍囬」鐩� 瀵硅薄鐨� json鏍煎紡鐨勫�� 
+    @AuraEnabled
+    public  static String ChangeDataYB(String JsonData){
+        try{
+            Tender_information__c temp = (Tender_information__c)JSON.deserialize(JsonData,Tender_information__c.class);
+            if (temp.IsTerminate__c == '鏄�') {
+                temp.TerminateApprovalStatus__c = '濉啓瀹屾瘯';
+                temp.ownerid = UserInfo.getUserId();
+            }
+            update temp;
+        }catch(Exception ex)
+        {
+            return  ex.getMessage();
+        }
+        return  '鎴愬姛';
+    }
+
+
+    //鏌ヨ鎴樼暐绉戝
+    @AuraEnabled
+    public  static String SearchZLKS(String content,String[] ParentId){
+        String jsonData = CommonUtils.GetZLKS(content,ParentId);
+        return jsonData;
+    }
+
+    //鏌ヨ鍖婚櫌
+    @AuraEnabled
+    public  static String SearchYY(String content){
+        String jsonData = CommonUtils.GetYY(content);
+        return jsonData;
+    }
+
+    //鏌ヨ鐖剁被
+    @AuraEnabled
+    public  static String SearchParent(String Id){
+        String jsonData = CommonUtils.GetParent(Id);
+        return jsonData;
+    }
+
+    //鏌ヨ鍖婚櫌涓嬬殑绉戝
+    @AuraEnabled
+    public  static String SearchYYChilders(String content,String ParentId){
+    String jsonData = CommonUtils.GetYYChilders(content,ParentId);
+    return jsonData;
+    }
+       
+
+     //鏍规嵁id鏌ヨ鍖婚櫌
+     @AuraEnabled
+     public  static String SearchAccountById(String Id){
+        QueryWrapper query = new QueryWrapper(account.SObjectType);
+        query.eq('Id',Id);
+        List<account> arraysTemp = DataBasePlus.listPlus(query);
+        return JSON.serialize(arraysTemp);  
+     }
+
+    //鏍规嵁id鏌ヨ鐢ㄦ埛
+    @AuraEnabled
+    public  static String SearchUserById(String Id){
+        QueryWrapper query = new QueryWrapper(user.SObjectType);
+        query.eq('Id',Id);
+        List<user> arraysTemp = DataBasePlus.listPlus(query);
+        return JSON.serialize(arraysTemp);  
+    }
+
+
+    //鍒ゆ柇褰撳墠鐧诲綍鐢ㄦ埛 鏄惁鏄� 鎵�鏈変汉
+    @AuraEnabled
+    public  static String CheckOwner(String Id){
+        String OwnerId = UserInfo.getUserId();
+        String sql = 'select Id, owner.Id ,Name from Tender_information__c where  Id = :Id ';
+        List<Tender_information__c> arrays = Database.query(sql);
+        
+        if(UserInfo.getProfileId() == System.Label.ProfileId_SystemAdmin)
+        {
+            return '1'+ '==' + '1';
+        }
+        if(arrays.size()<1)
+        {
+            return  '2'+ '==' + '1';
+        }
+        return OwnerId + '==' + arrays[0].owner.Id;
+    } 
+
+    
+}
\ No newline at end of file
diff --git a/force-app/main/default/classes/TerminateControllerTest.cls b/force-app/main/default/classes/TerminateControllerTest.cls
new file mode 100644
index 0000000..5bb5d79
--- /dev/null
+++ b/force-app/main/default/classes/TerminateControllerTest.cls
@@ -0,0 +1,113 @@
+@isTest
+private class TerminateControllerTest {
+    static testMethod void testMethod1() {
+        //鍒涘缓鏁版嵁
+        //鎷涙姇鏍囬」鐩�
+        //鍒涘缓鎷涙姇鏍囬」鐩�
+        TerminateController a=new TerminateController();
+    	Tender_information__c Ten = new Tender_information__c();
+        Tender_information__c Ten2 = new Tender_information__c();
+		Ten.Name = '123456';
+		Ten.ProjectId__c = '38_99df2844cf784982acdc61d00d7a7dbb';
+        Ten.IsRelateProject__c  = '鏄�';
+		insert Ten;
+        Ten2=Ten;
+        Address_Level__c al = new Address_Level__c();
+        al.Name = '鏉变含';
+        al.Level1_Code__c = 'CN-99';
+        al.Level1_Sys_No__c = '999999';
+        insert al;
+        // 甯�
+        Address_Level2__c al2 = new Address_Level2__c();
+        al2.Level1_Code__c = 'CN-99';
+        al2.Level1_Sys_No__c = '999999';
+        al2.Level1_Name__c = '鏉变含';
+        al2.Name = '娓嬭胺鍖�';
+        al2.Level2_Code__c = 'CN-9999';
+        al2.Level2_Sys_No__c = '9999999';
+        al2.Address_Level__c = al.id;
+        insert al2;
+
+        // 鐥呴櫌銈掍綔銈�
+        Account hospital = new Account();
+        hospital.recordtypeId = [Select Id FROM RecordType WHERE IsActive = true and SobjectType = 'Account' and DeveloperName = 'HP'].id;
+        hospital.Name = 'test hospital';
+        hospital.Is_Active__c = '鏈夊姽';
+        hospital.Attribute_Type__c = '鍗敓閮�';
+        hospital.Speciality_Type__c = '缁煎悎鍖婚櫌';
+        hospital.Grade__c = '涓�绾�';
+        hospital.OCM_Category__c = 'SLTV';
+        hospital.Is_Medical__c = '鍖荤枟鏈烘瀯';
+        hospital.State_Master__c = al.id;
+        hospital.City_Master__c = al2.id;
+        hospital.Town__c = '涓滀含';
+        insert hospital;
+
+		// 鎴︾暐绉戝銈掑緱銈�
+        Account[] strategicDep = [SELECT ID, Name FROM Account WHERE parentId = :hospital.Id AND recordType.DeveloperName = 'Department_Class_OTH'];
+        // 瑷虹檪绉戙倰浣溿倠
+        Account dep = new Account();
+        dep.recordtypeId = [Select Id FROM RecordType WHERE IsActive = true and SobjectType = 'Account' and DeveloperName = 'Department_OTH'].id;
+        dep.Name = 'test dep';
+        dep.AgentCode_Ext__c = '9999998';
+        dep.ParentId = strategicDep[0].Id;
+        dep.Department_Class__c = strategicDep[0].Id;
+        dep.Hospital__c = hospital.Id;
+        insert dep;
+
+        String[] ids = new String[10];
+        // ids.Add('0011000000V97G7AAJ');
+        ids.Add(hospital.Id);
+    	//鏍规嵁ID鏌ヨ  鎷涙姇鏍囬」鐩�
+		TerminateController.GetInspectById(Ten.Id);
+        TerminateController.cannotModifyIsRelateProject(Ten.Id);
+     	//鎷涙姇鏍囬」鐩垪琛ㄥ瓧娈� irrelevantReasons__c 鎵�鏈夌殑鍊�
+		TerminateController.GetIrrelevantReasons();
+     	//鎷涙姇鏍囬」鐩垪琛ㄥ瓧娈� irresponsibleReason__c 鎵�鏈夌殑鍊�
+		TerminateController.GetIrresponsibleReason();
+    	// 鏌ヨ鐢ㄦ埛 鏍规嵁鐖禝D鐨勫��  
+		TerminateController.GetIsPrentIdArr(hospital.Id);
+    	//淇濆瓨鏁版嵁  JSONData 鏄� 鎷涙姇鏍囬」鐩� 瀵硅薄鐨� json鏍煎紡鐨勫�� 
+        String JSONData =  JSON.serialize(Ten);
+        String checkboxValue = '01210000000QemLAAS;01210000000QezZAAS';
+		TerminateController.SaveData(JSONData,Ten.Id,checkboxValue);
+        TerminateController.SaveData('0',Ten.Id,checkboxValue);
+    	//淇濆瓨 搴旀爣鏁版嵁 JSONData 鏄� 鎷涙姇鏍囬」鐩� 瀵硅薄鐨� json鏍煎紡鐨勫�� 
+    	ten.IsRelateProject__c = '鏄�';
+        JSONData =  JSON.serialize(Ten);
+        Ten2.IsRelateProject__c = '鍚�';
+        String JSONData2 =  JSON.serialize(Ten2);
+		TerminateController.SaveDataYB(JSONData);
+        TerminateController.SaveDataYB(JSONData2);
+        TerminateController.SaveDataYB('0');
+	    //鎻愪氦瀹℃牳 搴旀爣鏁版嵁 JSONData 鏄� 鎷涙姇鏍囬」鐩� 瀵硅薄鐨� json鏍煎紡鐨勫�� 
+        TerminateController.ChangeDataYB(JSONData);
+        JSONData =  JSON.serialize(Ten);
+		TerminateController.ChangeDataYB(JSONData);
+    	//鏌ヨ鎴樼暐绉戝
+		TerminateController.SearchZLKS('test',ids);
+    	//鏌ヨ鍖婚櫌
+		TerminateController.SearchYY('test');
+		//鏌ヨ鏅�氱瀹�
+		// TerminateController.SearchPTKS('test','');
+
+    	//鏌ヨ鏅�氱瀹� 鏈夊尰闄㈤檺鍒剁殑
+		// TerminateController.SearchPTKSByYYParent('test',hospital.Id);
+    	//鏌ヨ鐖剁被
+		TerminateController.SearchParent(hospital.Id);
+
+		//鏌ヨ鍖婚櫌涓嬬殑绉戝
+		TerminateController.SearchYYChilders('','');
+		//鏍规嵁id鏌ヨ
+		TerminateController.SearchAccountById(hospital.Id);
+
+        // TerminateController.SearchYH('123',ids);
+        TerminateController.SearchUserById('0011000000V97G7AAJ');
+        TerminateController.CheckOwner(Ten.Id);
+
+        TerminateController.GetproInvolvedManual();
+
+
+    }
+    
+}
\ No newline at end of file
diff --git a/force-app/main/default/pages/Terminate.page b/force-app/main/default/pages/Terminate.page
new file mode 100644
index 0000000..cbc6072
--- /dev/null
+++ b/force-app/main/default/pages/Terminate.page
@@ -0,0 +1,25 @@
+<apex:page showHeader="false" sidebar="false" id="yb" title="椤圭洰缁堟" lightningStylesheets="true">
+    <apex:includeLightning />
+    <div style="width:100%;height:100%;" id="TerminateAPP" />
+    <script>
+        $Lightning.use("c:TerminateAPP", function () {
+            $Lightning.createComponent("c:isTerminate",
+                {},
+                "TerminateAPP",
+                function (cmp) {
+                    console.log('Component created, do something cool here');
+                });
+        });
+
+        var interval = setInterval(()=>{
+            var hrefStr = window.location.href;
+            if (hrefStr.indexOf("Refresh") != -1) {
+                var arr = hrefStr.split("==");
+                window.opener.parent.location.href = "/"+arr[1];
+                top.window.close();
+                clearInterval(interval);
+            }
+        },1000);
+    </script>
+
+</apex:page>
\ No newline at end of file

--
Gitblit v1.9.1