From 2594abca80fa4ffcc69f2efa4a6fdb675213299c Mon Sep 17 00:00:00 2001
From: zz <1842059105@qq.com>
Date: 星期二, 11 四月 2023 15:56:52 +0800
Subject: [PATCH] 提交招标项目 ‘新建意向’、‘不应标申请’、‘反应询价状态’

---
 force-app/main/default/lwc/lexTenderingEnquiryButton/lexTenderingEnquiryButton.js-meta.xml       |   11 
 force-app/main/default/lwc/lexTenderingNoStandardButton/lexTenderingNoStandardButton.html        |    5 
 force-app/main/default/lwc/lexTenderingNoStandardButton/lexTenderingNoStandardButton.js          |   49 +
 force-app/main/default/lwc/lexTenderingEnquiryButton/lexTenderingEnquiryButton.js                |   62 ++
 force-app/main/default/lwc/lexTenderingNoStandardButton/lexTenderingNoStandardButton.js-meta.xml |   11 
 force-app/main/default/lwc/lexTenderingEnquiryButton/lexTenderingEnquiryButton.html              |    5 
 force-app/main/default/lwc/lexTenderingIntentionButton/lexTenderingIntentionButton.js-meta.xml   |   11 
 force-app/main/default/classes/UpdateTenderInformationBatch.cls-meta.xml                         |    5 
 force-app/main/default/lwc/lexTenderingIntentionButton/lexTenderingIntentionButton.html          |    5 
 force-app/main/default/lwc/lexTenderingIntentionButton/lexTenderingIntentionButton.js            |   52 ++
 force-app/main/default/classes/UpdateTenderInformationBatch.cls                                  | 1310 ++++++++++++++++++++++++++++++++++++++++++++++++++
 11 files changed, 1,526 insertions(+), 0 deletions(-)

diff --git a/force-app/main/default/classes/UpdateTenderInformationBatch.cls b/force-app/main/default/classes/UpdateTenderInformationBatch.cls
new file mode 100644
index 0000000..5e34510
--- /dev/null
+++ b/force-app/main/default/classes/UpdateTenderInformationBatch.cls
@@ -0,0 +1,1310 @@
+/*2021-05-08  mzy
+* 鏇存柊鎷涙爣淇℃伅鐨勮浠风姸鎬佸拰璇环鐨勬暟閲�
+* 鏇存柊鎷涙爣淇℃伅鐨�5涓尰闄�
+* 褰撳尰闄㈠彂鐢熷彉鍖�/鎷涙姇鏍囬」鐩甇CSM鐪佸彂鐢熷彉鍖栨椂,绌烘洿鏂颁竴涓嬫嫑鎶曟爣
+*/
+global class UpdateTenderInformationBatch implements Database.Batchable<sObject>, Database.Stateful {
+
+    Boolean IsNeedExecute = false;
+    String tempTenderId ='';
+    Boolean IsOnlyTrue = true;
+    List<String> tempTenderList = new List<String>(); 
+
+    //閭欢淇℃伅
+    List<String> emailMessages = new List<String>();
+
+    //鎷涙姇鏍�: 鎶ラ敊鐨勬嫑鎶曟爣Id
+    String TenderlogStr = '鎷涙爣椤圭洰 : ';
+
+    //鎷涙姇鏍�: 鎶ラ敊淇℃伅
+    String TendererrorStr = '';
+
+    //鎷涙姇鏍�: 鎬讳欢鏁�
+    Integer TendertotalCount = 0;
+
+    //鎷涙姇鏍�: 澶辫触浠舵暟
+    Integer TenderfailedCount = 0; 
+
+    //鎵ц绗﹀悎鏉′欢鐨勬寚瀹氭嫑鎶曟爣椤圭洰
+    global UpdateTenderInformationBatch(String tempTenderId) {
+        this.tempTenderId = tempTenderId;
+    }
+    //鎵ц鎸囧畾鎷涙爣椤圭洰閲岀鍚堟潯浠剁殑鎷涙姇鏍囬」鐩�
+    global UpdateTenderInformationBatch(List<String> tempTenderList) {
+        this.tempTenderList = tempTenderList;
+    }
+    //澶勭悊鍘嗗彶鏁版嵁  IsOnlyTrue = false  鎵ц鎵�鏈夌殑鎷涙爣椤圭洰
+    global UpdateTenderInformationBatch(String tempOppId, Boolean IsOnlyTrue) {
+        this.IsOnlyTrue = IsOnlyTrue;
+    }
+    //  IsOnlyTrue = false 鍙互鎵嬪姩 鏃犳潯浠舵墽琛屽鏉℃嫑鎶曟爣椤圭洰
+    global UpdateTenderInformationBatch(String tempOppId, Boolean IsOnlyTrue,List<String> tempTenderList) {
+        this.IsOnlyTrue = IsOnlyTrue;
+        this.tempTenderList = tempTenderList;
+    }
+    
+    //Batch 閾� 鏃朵娇鐢�
+    global UpdateTenderInformationBatch(Boolean IsNeedExecute) {
+        this.IsNeedExecute = IsNeedExecute;
+    }
+
+    global UpdateTenderInformationBatch() {
+        
+    }
+
+    global Database.QueryLocator start(Database.BatchableContext bc) {
+        String query = 'SELECT Id,IsBid__c,NotBidApprovalStatus__c,IsReactionOpp__c,Hospital__c,Hospital1__c,Hospital2__c,Hospital3__c,Hospital4__c, ';
+               query += 'Hospital__r.Assume_Change__c,Hospital1__r.Assume_Change__c,Hospital2__r.Assume_Change__c,Hospital3__r.Assume_Change__c,Hospital4__r.Assume_Change__c ';
+               query += 'FROM Tender_information__c ';
+            if(IsOnlyTrue){               
+               query += 'WHERE  ((IsReactionOpp__c = true ) '; 
+               //2021-07-29 mzy  update 褰撳尰闄㈠彂鐢熷彉鍖�/鎷涙姇鏍囬」鐩甇CSM鐪佸彂鐢熷彉鍖栨椂,绌烘洿鏂颁竴涓嬫嫑鎶曟爣 start
+               // 2022-04-08 ssm SWAG-CC58ME 澧炲姞鎵�鏈変汉鏃犳晥鐨勫垽鏂� start 
+               query += 'OR (Owner.IsActive = false) ';
+               // 2022-04-08 ssm SWAG-CC58ME end
+               query += 'OR (BiddingOCSMAdministration__c = true) OR (Hospital__r.Assume_Change__c = true) '; 
+               query += 'OR (Hospital1__r.Assume_Change__c = true) OR (Hospital2__r.Assume_Change__c = true) '; 
+               query += 'OR (Hospital3__r.Assume_Change__c = true) OR (Hospital4__r.Assume_Change__c = true) )'; 
+               //2021-07-29  mzy update 褰撳尰闄㈠彂鐢熷彉鍖�/鎷涙姇鏍囬」鐩甇CSM鐪佸彂鐢熷彉鍖栨椂,绌烘洿鏂颁竴涓嬫嫑鎶曟爣 end
+               // DepartmentChanges__c 鍏ㄩ儴鎹㈡垚 Assume_Change__c 
+            }   
+            if(String.isNotBlank(this.tempTenderId)){
+                if(IsOnlyTrue){
+                    query += ' AND ';
+                }else {
+                    query += ' Where ';
+                }
+               query += 'Id = :tempTenderId ';
+            }
+            if(tempTenderList.size()>0){
+                if(IsOnlyTrue){
+                    query += ' AND ';
+                }else {
+                    query += ' Where ';
+                }
+
+               query += ' Id In :tempTenderList ';
+            }
+
+            System.debug('sql璇彞锛�'+query);
+        return Database.getQueryLocator(query);
+    }
+
+    global void execute(Database.BatchableContext BC, list<Tender_information__c> TenderList) {
+        //瀹氫箟List灏佽闇�瑕佺┖鏇存柊鐨勬嫑鎶曟爣椤圭洰
+        List<Tender_information__c> EmptyUpdateTenderList = new List<Tender_information__c>();
+        Map<String,Tender_information__c> EmptyUpdateTenderMap = new Map<String,Tender_information__c>();
+ 
+        //瀹氫箟List灏佽闇�瑕佹洿鏂扮殑鎷涙爣椤圭洰
+        List<Tender_information__c> updateTenderList = new List<Tender_information__c>();
+        //瀹氫箟Map淇濆瓨鎷涙姇鏍囦俊鎭� 
+        Map<String,Tender_information__c> tenderMap = new Map<String,Tender_information__c>();
+        //瀹氫箟List灏佽鎵�鏈夎浠风殑鎷涙爣椤圭洰Id
+        Set<String> BiddingProjectID = new Set<String>();
+        for(Tender_information__c tempTender : TenderList){
+            //2021-07-29   mzy  update  褰撳尰闄㈠彂鐢熷彉鍖�/鎷涙姇鏍囬」鐩甇CSM鐪佸彂鐢熷彉鍖栨椂,绌烘洿鏂颁竴涓嬫嫑鎶曟爣  start
+            if(tempTender.IsReactionOpp__c){
+                //濡傛灉鏄�  鏄惁鍙嶅簲璇环 涓� true 鍒欓渶瑕佽繘琛� 鍙嶅簲璇环 ,鍚﹀垯灏辩┖鏇存柊涓�涓�                
+                BiddingProjectID.add(tempTender.Id);
+                tenderMap.put( String.valueOf( tempTender.Id ).substring(0,15) ,tempTender);
+            }else {
+                //闇�瑕佺┖鏇存柊鐨勬嫑鎶曟爣
+                EmptyUpdateTenderList.add(tempTender);
+                EmptyUpdateTenderMap.put(String.valueOf( tempTender.Id ).substring(0,15) ,tempTender);
+            }
+            //2021-07-29  mzy  update  褰撳尰闄㈠彂鐢熷彉鍖�/鎷涙姇鏍囬」鐩甇CSM鐪佸彂鐢熷彉鍖栨椂,绌烘洿鏂颁竴涓嬫嫑鎶曟爣   end
+        }
+        //2021-07-29  mzy  update  绌烘洿鏂板け璐ョ殑璇濅笉娓呯┖鍖婚櫌鐨勬爣璇�  start
+        // System.debug('EmptyUpdateTenderList: ' + EmptyUpdateTenderList);
+        if(EmptyUpdateTenderList.size()>0){
+            //绌烘洿鏂版嫑鎶曟爣
+            // fxk 2021/9/28 Star
+            StaticParameter.EscapeOtherUpdateTenOwner = false;
+            Database.SaveResult[] EmptySaveTenderResult = Database.update(EmptyUpdateTenderList,false);
+            StaticParameter.EscapeOtherUpdateTenOwner = true;
+            // fxk 2021/9/28 End
+            //鏇存柊鎴愬姛鐨勬嫑鎶曟爣闇�瑕佸皢鍖婚櫌鐨勬爣璇嗘竻绌�
+            //淇濆瓨鏇存柊澶辫触鐨勫尰闄�
+            Set<String> faildHospIdSet = new Set<String>(); 
+            //鏌ョ湅澶辫触鐨勫尰闄�
+            for(Integer i = 0;i<EmptySaveTenderResult.size();i++){
+                if(!EmptySaveTenderResult.get(i).isSuccess()){
+                    String faildTenderId = String.valueOf(EmptyUpdateTenderList.get(i).id).substring(0,15);
+                    Tender_information__c  faildtender = EmptyUpdateTenderMap.get(faildTenderId);
+
+                    if(faildtender.Hospital__c != null && faildtender.Hospital__r.Assume_Change__c == true){                        
+                        faildHospIdSet.add(faildtender.Hospital__c);
+                    }
+                    if(faildtender.Hospital1__c != null && faildtender.Hospital1__r.Assume_Change__c == true){                        
+                        faildHospIdSet.add(faildtender.Hospital1__c);
+                    }
+                    if(faildtender.Hospital2__c != null&& faildtender.Hospital2__r.Assume_Change__c == true){                        
+                        faildHospIdSet.add(faildtender.Hospital2__c);
+                    }
+                    if(faildtender.Hospital3__c != null&& faildtender.Hospital3__r.Assume_Change__c == true){                        
+                        faildHospIdSet.add(faildtender.Hospital3__c);
+                    }
+                    if(faildtender.Hospital4__c != null&& faildtender.Hospital4__r.Assume_Change__c == true){                        
+                       faildHospIdSet.add(faildtender.Hospital4__c);
+                    }
+                }
+            }
+            //鏌ョ湅闇�瑕佹竻绌烘爣璇嗙殑鍖婚櫌id
+            Set<String> HospitalId = new Set<String>();
+            //闇�瑕佹竻绌烘爣璇嗙殑鍖婚櫌i
+            List<Account> needUpdateHPList = new  List<Account>();
+            for(Integer i = 0;i<EmptySaveTenderResult.size();i++){
+                String tenderId = String.valueOf(EmptyUpdateTenderList.get(i).id).substring(0,15);
+                Tender_information__c  tender = EmptyUpdateTenderMap.get(tenderId);
+
+                //濡傛灉澶辫触鐨凷et閲屾病鏈夎繖涓尰闄�,鍒欐竻绌鸿繖涓尰闄㈢殑鏍囪瘑
+                if(tender.Hospital__c != null && tender.Hospital__r.Assume_Change__c == true
+                    && (!faildHospIdSet.contains(tender.Hospital__c)) ){  
+                    HospitalId.add(tender.Hospital__c);
+                }
+                if(tender.Hospital1__c != null && tender.Hospital1__r.Assume_Change__c == true
+                    && (!faildHospIdSet.contains(tender.Hospital1__c)) ){  
+                    HospitalId.add(tender.Hospital1__c);
+                }
+                if(tender.Hospital2__c != null && tender.Hospital2__r.Assume_Change__c == true
+                    && (!faildHospIdSet.contains(tender.Hospital2__c)) ){
+                    HospitalId.add(tender.Hospital2__c); 
+                }
+                if(tender.Hospital3__c != null && tender.Hospital3__r.Assume_Change__c == true
+                    && (!faildHospIdSet.contains(tender.Hospital3__c)) ){
+                    HospitalId.add(tender.Hospital3__c);  
+                }
+                if(tender.Hospital4__c != null && tender.Hospital4__r.Assume_Change__c == true
+                    && (!faildHospIdSet.contains(tender.Hospital4__c)) ){
+                    HospitalId.add(tender.Hospital4__c);
+                }
+            }
+
+            Iterator<String> HospitalIds = HospitalId.iterator();
+
+            while(HospitalIds.hasNext()){
+                Account acc = new Account();
+                acc.id = HospitalIds.next();
+                acc.Assume_Change__c = false;
+                needUpdateHPList.add(acc);  
+            }
+
+            if(needUpdateHPList.size()>0){
+                 update needUpdateHPList;
+            }
+        }
+        //2021-07-29  mzy  update  绌烘洿鏂板け璐ョ殑璇濅笉娓呯┖鍖婚櫌鐨勬爣璇�  end
+  
+        //2021-07-29  mzy  update   濡傛灉鏈夐渶瑕佸弽搴旇浠风殑鍦ㄨ蛋涓嬮潰閫昏緫   start
+        if(BiddingProjectID.size()> 0){
+
+            //鏌ヨ鎷涙爣椤圭洰涓嬬殑鎵�鏈夎浠�
+            Map<String,List<Opportunity>> BiddingProjectOppMap = findTenderRelativeOpp(BiddingProjectID);
+
+            //璁$畻璇环鏁伴噺
+            List<Tender_information__c> updateTenderNumList = updateOpportunityNum(BiddingProjectOppMap);
+
+            //璁$畻璇环鐘舵��
+            List<Tender_information__c> updateTenderNumStatusList = updateOpportunityStatus(BiddingProjectOppMap,updateTenderNumList,tenderMap);
+
+
+            updateTenderList.addAll(updateTenderNumStatusList);
+
+        }
+
+        //鏇存柊鎷涙姇鏍� 璇环鏁伴噺鍜岀姸鎬�
+        if(updateTenderList.size()>0){
+            //涓�涓嫑鎶曟爣椤圭洰鏇存柊澶辫触
+            List<String> failedTenderList = new List<String>();
+            Database.SaveResult[] saveTenderResults = Database.update(updateTenderList,false);
+            //鎷涙姇鏍囬」鐩殑鎬绘暟
+            TendertotalCount += saveTenderResults.size();
+
+            for(Integer i = 0;i<saveTenderResults.size();i++) {
+                if(!saveTenderResults.get(i).isSuccess() ){ 
+                    /*if(TenderlogStr.equals('')){
+                        TenderlogStr = '' ;
+                    } */                    
+                    TenderlogStr += updateTenderList.get(i).id +' ,';
+                    //String statusCode = String.ValueOf(saveTenderResults.get(i).getErrors()[0]).split(';')[2].split('=')[1];
+                    //String errorMsg = String.ValueOf(saveTenderResults.get(i).getErrors()[0]).split(';')[1].split('=')[1];
+                    TendererrorStr += '澶辫触鎷涙爣椤圭洰 :'+updateTenderList.get(i).id+'  澶辫触鍘熷洜:'+ String.ValueOf(saveTenderResults.get(i).getErrors()[0]).split(';')[2].split('=')[1] 
+                    +' : '+String.ValueOf(saveTenderResults.get(i).getErrors()[0]).split(';')[1].split('=')[1] + '\r\n';
+                    TenderfailedCount++ ;
+                    //灏嗘洿鏂板け璐ョ殑鎷涙姇鏍囬」鐩坊鍔犳帀闆嗗悎涓�
+                    failedTenderList.add(String.valueOf( updateTenderList.get(i).id ).substring(0,15));
+                }
+            }
+            //鏇存柊鎴愬姛鍚�,娓呴櫎鎷涙姇鏍囩殑鍙嶅簲璇环鏍囪瘑
+            List<Tender_information__c> successTenderList = new List<Tender_information__c>();
+            for(Tender_information__c tempTender:TenderList){
+                if(failedTenderList.contains( String.valueOf( tempTender.id ).substring(0,15)  )){
+                    //鏇存柊澶辫触,鍒欎笉娓呴櫎鏍囪瘑
+                }else {
+                    //鏇存柊鎴愬姛,娓呴櫎鏍囪瘑
+                    tempTender.IsReactionOpp__c = false;
+                    successTenderList.add(tempTender);
+                }
+            }
+
+            //娓呴櫎鏍囪瘑
+            if(successTenderList.size()>0){
+                update successTenderList;
+            }
+        }
+        // 2021-07-29  mzy  update   濡傛灉鏈夐渶瑕佸弽搴旇浠风殑鍦ㄨ蛋涓嬮潰閫昏緫   end
+    }
+
+    global void finish(Database.BatchableContext BC) {
+
+        UpdateTenderInformationSchedule.assignOneHours();
+        BatchIF_Log__c TenderIfLog = new BatchIF_Log__c();
+        TenderIfLog.Type__c = 'UpdateTenderInformationBatchByTenderErrorLog';
+
+        if (TenderlogStr.length() > 60000) {
+            TenderlogStr = TenderlogStr.substring(0, 60000);
+        }
+        TenderIfLog.Log__c = TenderlogStr;
+        TenderIfLog.Log__c += '\n end';
+        if (TendererrorStr.length() > 60000) {
+            TenderIfLog.ErrorLog__c = TendererrorStr.substring(0, 60000);
+        } else {
+            TenderIfLog.ErrorLog__c = TendererrorStr.substring(0, TendererrorStr.length());
+        }
+
+        insert TenderIfLog;
+
+        emailMessages.add('澶辫触鏃ュ織ID涓猴細' + TenderIfLog.Id + '\r\n澶辫触淇℃伅:\r\n'+TendererrorStr);
+
+        //鍙戦�侀偖浠�
+        sendFieldEmail();
+
+    }
+    //鎵归噺鏇存柊鎷涙姇鏍囩殑璇环淇℃伅
+    @AuraEnabled
+    WebService static String updateOpportunityInformation(List<String> TenderIdList){
+        //瀛樺偍閿欒淇℃伅
+        String errorMessage = '';
+        //鐩殑 : 濡傛灉Batch鎵ц澶辫触,鍒欐暣浣搑ollback,鏍囪瘑涓嶈繘琛屾竻闄�
+        //瀹氫箟List灏佽闇�瑕佹洿鏂扮殑鎷涙爣椤圭洰
+        List<Tender_information__c> updateTenderList = new List<Tender_information__c>();
+        try{
+
+            Set<String> BiddingProjectID = new Set<String>();
+            for(String TenderId:TenderIdList){                  
+                BiddingProjectID.add(TenderId);
+            }
+            //鏌ヨ鎷涙姇鏍囦俊鎭�
+            List<Tender_information__c> tenderList = [SELECT Id,IsBid__c,NotBidApprovalStatus__c FROM Tender_information__c where id in :BiddingProjectID];
+            Map<String,Tender_information__c> tenderMap = new Map<String,Tender_information__c>();
+            for(Tender_information__c tempTender :tenderList){
+                tenderMap.put( String.valueOf( tempTender.Id ).substring(0,15) ,tempTender);
+            }
+
+            //鏌ヨ鎷涙爣椤圭洰涓嬬殑鎵�鏈夎浠�
+            Map<String,List<Opportunity>> BiddingProjectOppMap = findTenderRelativeOpp(BiddingProjectID);
+
+            //璁$畻璇环鏁伴噺
+            List<Tender_information__c> updateTenderNumList = updateOpportunityNum(BiddingProjectOppMap);
+
+            //璁$畻璇环鐘舵��
+            List<Tender_information__c> updateTenderNumStatusList = updateOpportunityStatus(BiddingProjectOppMap,updateTenderNumList,tenderMap);
+
+            updateTenderList.addAll(updateTenderNumStatusList);
+
+            //鏇存柊
+            if(updateTenderList.size()>0){
+                List<String> failedTenderList = new List<String>();
+                // add 鍙湁绌烘洿鏂版嫑鎶曟爣鐨勬椂鍊欒蛋鎷涙姇鏍囪Е鍙戝櫒 fxk 2021/9/28 Star
+                StaticParameter.EscapeOtherUpdateTenOwner = false;     
+                Database.SaveResult[] saveTenderResults = Database.update(updateTenderList,false);
+                StaticParameter.EscapeOtherUpdateTenOwner = true; 
+                // add 鍙湁绌烘洿鏂版嫑鎶曟爣鐨勬椂鍊欒蛋鎷涙姇鏍囪Е鍙戝櫒 fxk 2021/9/28 End
+
+                for(Integer i = 0;i<saveTenderResults.size();i++) {
+                    if(!saveTenderResults.get(i).isSuccess()){ 
+                        //String statusCode = String.ValueOf(saveTenderResults.get(i).getErrors()[0]).split(';')[2].split('=')[1];
+                        //String errorMsg = String.ValueOf(saveTenderResults.get(i).getErrors()[0]).split(';')[1].split('=')[1];
+                        errorMessage += '澶辫触鎷涙爣椤圭洰 :'+updateTenderList.get(i).id+'  澶辫触鍘熷洜:'
+                        + String.ValueOf(saveTenderResults.get(i).getErrors()[0]).split(';')[2].split('=')[1] 
+                        +' : '+String.ValueOf(saveTenderResults.get(i).getErrors()[0]).split(';')[1].split('=')[1] + '\r\n';
+                        //灏嗘洿鏂板け璐ョ殑鎷涙姇鏍囬」鐩坊鍔犳帀闆嗗悎涓�
+                        failedTenderList.add(String.valueOf( updateTenderList.get(i).id ).substring(0,15));
+                    }
+                }
+
+                //鏇存柊鎴愬姛鍚�,娓呴櫎鎷涙姇鏍囩殑鍙嶅簲璇环鏍囪瘑
+                List<Tender_information__c> successTenderList = new List<Tender_information__c>();
+                for(String tempTenderId:TenderIdList){
+                    if(failedTenderList.contains( String.valueOf( tempTenderId ).substring(0,15)  )){
+                        //鏇存柊澶辫触,鍒欎笉娓呴櫎鏍囪瘑
+                    }else {
+                        //鏇存柊鎴愬姛,娓呴櫎鏍囪瘑
+                        Tender_information__c tempTender = new Tender_information__c();
+                        tempTender.Id = String.valueOf( tempTenderId ).substring(0,15);
+                        tempTender.IsReactionOpp__c = false;
+                        successTenderList.add(tempTender);
+                    }
+                }
+
+                //娓呴櫎鏍囪瘑
+                if(successTenderList.size()>0){
+                    update successTenderList;
+                }
+
+            }
+            //璇环娴佺▼鏀瑰杽 fy start
+            System.debug('batch2寮�濮�');
+            Id execBTId = Database.executeBatch(new UpdateTenderInformationBatch2(TenderIdList),100);
+            System.debug('batch2缁撴潫');
+            //璇环娴佺▼鏀瑰杽 fy end
+
+        }catch(NullPointerException ex){         
+            system.debug('aa1:'+ex.getMessage());
+            return '绌烘寚閽� :'+ex.getLineNumber();
+        }catch(Exception ex2){          
+            system.debug('aa2:'+ex2.getMessage());
+            return '鍑洪敊浜�!'+ex2.getMessage();
+        }
+
+        if(String.isNotBlank(errorMessage)){
+            return errorMessage;
+        }
+
+        system.debug('aa');
+        return 'OK';
+
+    }
+
+
+
+    //0.璁$畻璇环鏁伴噺
+    public static List<Tender_information__c> updateOpportunityNum(Map<String,List<Opportunity>> tempMap){       
+        // 鎷涙爣-璇环鍏宠仈淇敼 鑾峰彇鎷涙爣淇℃伅淇敼 20210817 start
+        // List<Tender_information__c> updateTenderNumList = new List<Tender_information__c>();
+        // //閬嶅巻Map鐨刱ey
+        // for(String k : tempMap.keySet()){
+        //     Tender_information__c tempTender = new Tender_information__c();
+        //     tempTender.id = k;
+        //     String fifteenId = String.valueOf(tempTender.Id).subString(0,15);
+        //     tempTender.OpportunityNum__c = tempMap.get(fifteenId).size();
+        //     updateTenderNumList.add(tempTender);
+        // }
+        List<String> tenders = new List<String>();
+        //閬嶅巻Map鐨刱ey
+        for(String k : tempMap.keySet()){
+            tenders.add(k);
+        }
+        // 鑾峰緱鎷涙爣鏁版嵁 鎶婁粠璇环閲屾煡璇㈢殑鎷涙爣瀛楁鎸埌杩欓噷
+        List<Tender_information__c> updateTenderNumList = [SELECT Id, Hospital__c, Hospital1__c, 
+        Hospital2__c, Hospital3__c, Hospital4__c, OwnerId, IsRelateProject__c, IsBid__c, department__c, 
+        subDepartment1__c, subDepartment2__c, subDepartment3__c, subDepartment4__c, NotBidApprovalStatus__c, 
+        OpportunityNum__c, OpportunityStatus__c
+        //20221010  lt SWAG-CHL5XA銆怓Y23璇环鏀瑰杽銆�-缁熻涓绘満鍙版暟 start
+        ,OlyNumberHosts__c, RivalHostsNumber__c, TotalNumberHosts__c
+        //20221010  lt SWAG-CHL5XA銆怓Y23璇环鏀瑰杽銆�-缁熻涓绘満鍙版暟 end
+        FROM Tender_information__c WHERE Id IN :tenders];
+        // 鎷涙爣-璇环鍏宠仈淇敼 20210817 end
+
+        return updateTenderNumList;
+    }
+
+
+    //1.璁$畻璇环鐘舵��
+    //2.璧嬪�煎尰闄�
+    //3.璧嬪�兼垬鐣ョ瀹�
+    //  1)  濡傛灉鎷涙姇鏍囬」鐩殑鍏宠仈鍖婚櫌涓虹┖锛岄偅涔堝氨鏇存柊涓鸿浠风殑鍖婚櫌;
+    //  2)  濡傛灉鎷涙姇鏍囬」鐩殑鍏宠仈涓绘垬鐣ョ瀹や负绌猴紝閭d箞灏辨洿鏂颁负璇环鍒涘缓鏃堕棿鏈�鏃╃殑璇环鐨勬垬鐣ョ瀹わ紱
+    //  3)  濡傛灉鎷涙姇鏍囬」鐩殑鍏宠仈鍓垬鐣ョ瀹や负绌猴紝閭d箞灏辨洿鏂颁负鎺掑悕浼樺厛绾ч珮鐨勬垬鐣ョ瀹や箣澶栫殑鍏朵粬璇环鐨勬垬鐣ョ瀹わ紝涔熸槸浠ュ垱寤烘椂闂存洿鏃╀负鍏堝悗椤哄簭锛�
+    //  4锛� 濡傛灉鏇存柊婊′簡锛屽鐨勬垬鐣ョ瀹ゅ氨涓嶆洿鏂帮紱
+    public static List<Tender_information__c> updateOpportunityStatus(Map<String,List<Opportunity>> BiddingProjectOppMap,List<Tender_information__c> updateTenderNumList,Map<String,Tender_information__c> tenderMap){
+        //璇环鐘舵��
+        //瀹氫箟List灏佽闇�瑕佹洿鏂扮殑鎷涙爣椤圭洰
+        List<Tender_information__c> updateTenderList = new List<Tender_information__c>();
+
+        //閬嶅巻Map鐨刱ey
+        for(Tender_information__c tempTender : updateTenderNumList){
+
+            String fifteenId = String.valueOf(tempTender.Id).subString(0,15);
+            //鑾峰彇褰撳墠鎷涙姇鏍囦笅鐨勮浠�
+            List<Opportunity> BiddingDownOppList= BiddingProjectOppMap.get(fifteenId) == null ? new List<Opportunity>() : BiddingProjectOppMap.get(fifteenId);
+
+            //鑾峰彇褰撳墠鎷涙姇鏍囦笅鐨勮浠风殑鍖婚櫌
+            List<String> OppHospitalList = new List<String>();
+
+            //鍒ゆ柇鐘舵��
+            if(BiddingDownOppList.size() > 0){
+                //<!----  鎵�鏈変汉 ---->
+                //2021-08-09  mzy  濡傛灉鎷涙爣鐨刼wnerid鏄ゥ鏋楀反鏂郴缁熺敤鎴� 灏辨妸璇环鐨勬墍鏈変汉鍐欎笂鍘�
+                // 20210817 鏄笉鏄簲璇ョ洿鎺ュ垽鏂璽ender涓婄殑锛�
+                // if(BiddingDownOppList.get(0).Bidding_Project_Name_Bid__r.OwnerId == '00510000000gmxH'){
+                if(tempTender.OwnerId == '00510000000gmxH'){
+                    tempTender.OwnerId = BiddingDownOppList.get(0).ownerId;
+                }
+                //2021-08-09  mzy  濡傛灉鎷涙爣鐨刼wnerid鏄ゥ鏋楀反鏂郴缁熺敤鎴� 灏辨妸璇环鐨勬墍鏈変汉鍐欎笂鍘�
+                //<!----  鎵�鏈変汉 ---->
+                //<!---- 璇环鐘舵�� start --->
+                //<!--璇环鐘舵��-->
+                //WIN num
+                Integer WinNum = 0;
+                //澶卞崟 num
+                Integer SHDNum = 0;
+                //XLIU-CG98L5銆愬鎵樸�戙�愯瘎浼般�戞柊闇�姹�-鎷涙爣椤圭洰/璇环瀵瑰簲娴佹爣銆佸簾鏍囨敼鍠� fy start
+                //鍙栨秷 num
+                Integer QuxNum = 0;
+                //XLIU-CG98L5銆愬鎵樸�戙�愯瘎浼般�戞柊闇�姹�-鎷涙爣椤圭洰/璇环瀵瑰簲娴佹爣銆佸簾鏍囨敼鍠� fy end
+                //涓爣 2022-6-29 yjk
+                Integer bidNum = 0;
+                //瀵规墜涓爣 2022-6-29 yjk
+                Integer loseNum = 0;
+
+                //20221010  lt SWAG-CHL5XA銆怓Y23璇环鏀瑰杽銆�-缁熻涓绘満鍙版暟 start
+                tempTender.OlyNumberHosts__c = 0;
+                tempTender.RivalHostsNumber__c = 0;
+                tempTender.TotalNumberHosts__c = 0;
+
+                Decimal OlyNum = 0;
+                Decimal RivalNum = 0;
+                Decimal TotalNum = 0;
+                //20221010  lt SWAG-CHL5XA銆怓Y23璇环鏀瑰杽銆�-缁熻涓绘満鍙版暟 end
+
+                //鑾峰彇褰撳墠key鐨凩ist
+                for(Opportunity tempOp :BiddingDownOppList){
+
+                    //20221010  lt SWAG-CHL5XA銆怓Y23璇环鏀瑰杽銆�-缁熻涓绘満鍙版暟 start
+                    System.debug('lt123---------------------------------------');
+
+                    if(tempOp.OlyNumberHosts__c == null){
+                        tempOp.OlyNumberHosts__c = 0;
+                    }
+                    if(tempOp.RivalHostsNumber__c == null){
+                        tempOp.RivalHostsNumber__c = 0;
+                    }
+
+                    OlyNum += tempOp.OlyNumberHosts__c;
+                    RivalNum += tempOp.RivalHostsNumber__c;
+                    TotalNum += tempOp.InquireNumberHosts__c;
+                    //20221010  lt SWAG-CHL5XA銆怓Y23璇环鏀瑰杽銆�-缁熻涓绘満鍙版暟 end
+
+                // 鏉庢収濞熷娉� 锛� 杩欓噷璇锋浛鎹㈡垚<SAP涓婁紶(WIN)>鏍囪瘑鍒ゆ柇
+                    //<!--璇环鐘舵��-->
+                    if(tempOp.SAP_Send_OK__c || '瀹屾瘯'.equals(tempOp.StageName__c)){ // 2022-6-2 yjk SWAG-CEP9G8
+                      //win 
+                      WinNum += 1; 
+                    }
+                    //XLIU-CG98L5銆愬鎵樸�戙�愯瘎浼般�戞柊闇�姹�-鎷涙爣椤圭洰/璇环瀵瑰簲娴佹爣銆佸簾鏍囨敼鍠� fy start
+                    // else if(tempOp.StageName__c.equals('澶卞崟') || tempOp.StageName__c.equals('鍙栨秷')){ //2022-5-23 yjk SWAG-CEP9G8
+                    //   //澶卞崟  
+                    //   SHDNum += 1;
+                    // }
+                    else if(tempOp.StageName__c.equals('澶卞崟')){ //2022-5-23 yjk SWAG-CEP9G8
+                            //澶卞崟  
+                        SHDNum += 1;
+                    }
+                    else if(tempOp.StageName__c.equals('鍙栨秷')){ //2022-5-23 yjk SWAG-CEP9G8
+                            //澶卞崟  
+                            QuxNum += 1;
+                    }
+                    //XLIU-CG98L5銆愬鎵樸�戙�愯瘎浼般�戞柊闇�姹�-鎷涙爣椤圭洰/璇环瀵瑰簲娴佹爣銆佸簾鏍囨敼鍠� fy end
+                    //鑾峰彇璇环鐨勫尰闄�(鐩稿叧鎬ф椂鐢�)
+                    if(!OppHospitalList.contains(tempOp.Hospital__c)&&tempOp.Hospital__c!=null){
+                        OppHospitalList.add(tempOp.Hospital__c);
+                    }
+
+                    //2022-6-29 yjk 涓爣纭璧嬪�� start
+                    if('OLY涓爣'.equals(tempOp.ConfirmationofAward__c)){
+                        bidNum++;
+                    }else if('绔炰簤瀵规墜涓爣'.equals(tempOp.ConfirmationofAward__c)){
+                        loseNum++;
+                    }
+                    //2022-6-29 yjk 涓爣纭璧嬪�� end
+
+                }
+
+                //20221010  lt SWAG-CHL5XA銆怓Y23璇环鏀瑰杽銆�-缁熻涓绘満鍙版暟 start
+                tempTender.OlyNumberHosts__c = OlyNum;
+                tempTender.RivalHostsNumber__c = RivalNum;
+                tempTender.TotalNumberHosts__c = TotalNum;
+                //20221010  lt SWAG-CHL5XA銆怓Y23璇环鏀瑰杽銆�-缁熻涓绘満鍙版暟 end
+
+                //<!--璇环鐘舵��-->
+                if(WinNum == BiddingDownOppList.size()){
+                    //鍏ㄩ儴涓篧in,OLY纭鐘舵�� 涓� 鎴愪氦
+                    tempTender.OpportunityStatus__c = '鎴愪氦';
+                }else if(SHDNum == BiddingDownOppList.size()){
+                    //鍏ㄩ儴涓哄け鍗�.鐘舵�佷负 澶卞崟
+                    tempTender.OpportunityStatus__c = '澶卞崟';
+                }else if(WinNum>0&&SHDNum>0&&(WinNum + SHDNum) == BiddingDownOppList.size() ){
+                    //閮ㄥ垎Win,閮ㄥ垎澶卞崟鏃�, 鐘舵�佷负  閮ㄥ垎鎴愪氦
+                    tempTender.OpportunityStatus__c = '閮ㄥ垎鎴愪氦';
+                }
+                //XLIU-CG98L5銆愬鎵樸�戙�愯瘎浼般�戞柊闇�姹�-鎷涙爣椤圭洰/璇环瀵瑰簲娴佹爣銆佸簾鏍囨敼鍠� fy start
+                else if(QuxNum == BiddingDownOppList.size()){
+                        //鍏ㄩ儴涓哄彇娑�.鐘舵�佷负 鍙栨秷
+                    tempTender.OpportunityStatus__c = '鍙栨秷';
+                }
+                //XLIU-CG98L5銆愬鎵樸�戙�愯瘎浼般�戞柊闇�姹�-鎷涙爣椤圭洰/璇环瀵瑰簲娴佹爣銆佸簾鏍囨敼鍠� fy end
+                else if(tempTender.OpportunityNum__c > 0){
+                    //濡傛灉璇环鏁伴噺澶т簬0鐨勮瘽灏辨槸 璺熻繘涓�
+                    tempTender.OpportunityStatus__c = '璺熻繘涓�';
+                }else{
+                    //鍏朵粬閮芥槸 ''
+                    tempTender.OpportunityStatus__c = '';
+                }
+                //<!---- 璇环鐘舵��  end --->
+
+                //2022-6-29 yjk 涓爣纭璧嬪�� start
+                if(bidNum > 0 && loseNum == 0){
+                    tempTender.ConfirmationofAward__c = 'OLY涓爣';
+                }else if(loseNum > 0 && bidNum == 0){
+                    tempTender.ConfirmationofAward__c = '绔炰簤瀵规墜涓爣';
+                }else if(bidNum > 0 && loseNum > 0){
+                    tempTender.ConfirmationofAward__c = '閮ㄥ垎OLY涓爣';
+                }
+
+
+                //2022-6-29 yjk 涓爣纭璧嬪�� end
+
+                //<!------ 鐩稿叧鎬� 淇℃伅   start ----> 
+                //瀹氫箟Map瀛樻斁褰撳墠鎷涙姇鏍囬」鐩殑浜斾釜鍖婚櫌
+                Map<String,String> fiveHospitalMap = new Map<String,String>();
+                // 鎷涙爣-璇环鍏宠仈淇敼 杩欓噷鏄笉鏄彲浠ョ洿鎺ヤ粠褰撳墠鎷涙爣閲屽垵濮嬪寲锛熻浠蜂笂涓嶅啀鍏宠仈鍗曚竴鐨勬嫑鏍囬」鐩簡 20210818 start
+                // fiveHospitalMap.put('Hospital__c',BiddingDownOppList.get(0).Bidding_Project_Name_Bid__r.Hospital__c);
+                // fiveHospitalMap.put('Hospital1__c',BiddingDownOppList.get(0).Bidding_Project_Name_Bid__r.Hospital1__c);
+                // fiveHospitalMap.put('Hospital2__c',BiddingDownOppList.get(0).Bidding_Project_Name_Bid__r.Hospital2__c);
+                // fiveHospitalMap.put('Hospital3__c',BiddingDownOppList.get(0).Bidding_Project_Name_Bid__r.Hospital3__c);
+                // fiveHospitalMap.put('Hospital4__c',BiddingDownOppList.get(0).Bidding_Project_Name_Bid__r.Hospital4__c);
+                fiveHospitalMap.put('Hospital__c', tempTender.Hospital__c);
+                fiveHospitalMap.put('Hospital1__c', tempTender.Hospital1__c);
+                fiveHospitalMap.put('Hospital2__c', tempTender.Hospital2__c);
+                fiveHospitalMap.put('Hospital3__c', tempTender.Hospital3__c);
+                fiveHospitalMap.put('Hospital4__c', tempTender.Hospital4__c);
+                // 鎷涙爣-璇环鍏宠仈淇敼 20210818 end
+
+                //濡傛灉鎷涙姇鏍囬」鐩殑 鏄惁鐩稿叧 瀛楁涓嶄负鍚� , 骞朵笖 鐩稿叧鍖婚櫌 鐩稿叧鎴樼暐绉戝 鐩稿叧鏅�氱瀹� 涓虹┖鏃�,鍒欐洿鏂� 涓鸿浠风殑 鍖婚櫌 鎴樼暐绉戝 瀹㈡埛鍚�
+                // 鎷涙爣-璇环鍏宠仈淇敼 鍚屼笂淇敼 浠庡綋鍓嶆嫑鏍囩殑鏁版嵁閲岃幏寰楀垽鏂潯浠� 20210818 start
+                // if(!'鍚�'.equals(BiddingDownOppList.get(0).Bidding_Project_Name_Bid__r.IsRelateProject__c)){
+                if(!'鍚�'.equals(tempTender.IsRelateProject__c)){
+                // 鎷涙爣-璇环鍏宠仈淇敼 20210818 end
+                    //涓�.鍏宠仈鍖婚櫌
+                    //閬嶅巻鎷涙姇鏍囬」鐩笅鎵�鏈夎浠风殑鍖婚櫌,缁欐嫑鎶曟爣椤圭洰鐨�5涓尰闄㈣祴鍊� ---start
+                    //閬嶅巻鎷涙姇鏍囬」鐩笅鎵�鏈夎浠风殑鍖婚櫌
+                    if(OppHospitalList.size()>0){                        
+                        for(Integer i = 0; i<OppHospitalList.size();i++){
+                            //褰撴嫑鎶曟爣椤圭洰鐨勪簲涓尰闄㈣祴鍊煎畬鎴愬悗涓嶅啀璧嬪��
+                            Boolean HospitalIsNeedBreak = false;
+                            for(String ApiName :fiveHospitalMap.keySet()){
+                                HospitalIsNeedBreak = fiveHospitalMap.get(ApiName)==null?false:true;
+                            }
+                            
+                            if(HospitalIsNeedBreak){
+                                break;
+                            }
+
+                            //缁欐嫑鎶曟爣椤圭洰鐨�5涓尰闄㈣鍊�
+                            for(String ApiName : fiveHospitalMap.keySet()){
+                                String tempTenderHospId = fiveHospitalMap.get(ApiName)==null?'':fiveHospitalMap.get(ApiName);
+                                String oppHospId = OppHospitalList.get(i); 
+                                //濡傛灉鎷涙爣椤圭洰宸茬粡鏈夎鍖婚櫌灏卞垽鏂笅涓�涓浠风殑鍖婚櫌
+                                if(tempTenderHospId.contains(oppHospId)){
+                                    break;
+                                }
+
+                                //鍖婚櫌涓虹┖,璧嬪�煎尰闄�(璧嬪�间箣鍚庤繘琛岃祴鍊间笅涓�涓尰闄�)
+                                if(String.isBlank( fiveHospitalMap.get(ApiName) )){
+                                    fiveHospitalMap.put(ApiName,oppHospId);
+                                    break;
+                                }
+                            }
+
+                        }
+                    }
+
+                    //璧嬪�煎尰闄�
+                    tempTender.Hospital__c = fiveHospitalMap.get('Hospital__c');
+                    tempTender.Hospital1__c = fiveHospitalMap.get('Hospital1__c');
+                    tempTender.Hospital2__c = fiveHospitalMap.get('Hospital2__c');
+                    tempTender.Hospital3__c = fiveHospitalMap.get('Hospital3__c');
+                    tempTender.Hospital4__c = fiveHospitalMap.get('Hospital4__c');
+                    //閬嶅巻鎷涙姇鏍囬」鐩笅鎵�鏈夎浠风殑鍖婚櫌,缁欐嫑鎶曟爣椤圭洰鐨�5涓尰闄㈣祴鍊� ---end
+
+                }
+
+                //濡傛灉 鏄惁鐩稿叧 瀛楁宸茬粡閫夋嫨鍚�, 灏变笉搴旇鏇存柊鐩稿叧鍙婄浉鍏崇殑鐩稿叧淇℃伅
+                // 鎷涙爣-璇环鍏宠仈淇敼 鍚屼笂淇敼 浠庡綋鍓嶆嫑鏍囩殑鏁版嵁閲岃幏寰楀垽鏂潯浠� 20210818 start
+                // if(!'鍚�'.equals(BiddingDownOppList.get(0).Bidding_Project_Name_Bid__r.IsRelateProject__c)
+                //     &&!'鏄�'.equals(BiddingDownOppList.get(0).Bidding_Project_Name_Bid__r.IsRelateProject__c)){
+                //     tempTender.IsRelateProject__c = '鏄�';     
+                // }
+                if(!'鍚�'.equals(tempTender.IsRelateProject__c)
+                    &&!'鏄�'.equals(tempTender.IsRelateProject__c)){
+                    tempTender.IsRelateProject__c = '鏄�';     
+                }
+                // 鎷涙爣-璇环鍏宠仈淇敼 20210818 end
+                //<!------ 鐩稿叧鎬� 淇℃伅   end ---->
+
+                //<!------ 搴旀爣 淇℃伅    start---->
+                //2021-08-09   mzy   鍏宠仈璇环鎴愬姛鍚�,涓嶉渶瑕佽缃槸鍚﹀簲鏍� 涓� 鏄�
+                //濡傛灉 鏄惁搴旀爣 瀛楁宸茬粡閫夋嫨鍚�,灏变笉搴旇鏇存柊搴旀爣鍙婄浉鍏崇殑鐩稿叧淇℃伅
+                //if(!'鍚�'.equals(BiddingDownOppList.get(0).Bidding_Project_Name_Bid__r.IsBid__c)
+                //    &&!'鏄�'.equals(BiddingDownOppList.get(0).Bidding_Project_Name_Bid__r.IsBid__c)){
+                //    tempTender.IsBid__c = '鏄�';     
+                //}
+                //2021-08-09  mzy  鍏宠仈璇环鎴愬姛鍚�,涓嶉渶瑕佽缃槸鍚﹀簲鏍� 涓� 鏄�
+                //<!------ 搴旀爣 淇℃伅    end---->
+
+            }else {
+                //娓呯┖
+                tempTender.OpportunityStatus__c = '';
+            }
+            updateTenderList.add(tempTender);
+        }
+
+
+        return updateTenderList;
+
+    }
+
+
+    //鏌ヨ鎷涙爣椤圭洰涓嬬殑鎵�鏈夎浠�
+    //param : 闇�瑕佹煡璇㈢殑鎷涙爣椤圭洰Id
+    //return Map<鎷涙姇鏍囬」鐩甀d,List<璇环>>
+    public static Map<String,List<Opportunity>> findTenderRelativeOpp(Set<String>  BiddingProjectID){
+        //瀹氫箟Map灏佽鏁版嵁
+        Map<String,List<Opportunity>> BiddingProjectOppMap = new Map<String,List<Opportunity>>();
+        //鏌ヨ鎷涙爣椤圭洰涓嬬殑鎵�鏈夎浠�
+        // 鎷涙爣-璇环鍏宠仈淇敼 澶氬澶氬叧绯诲搴� 浠庡叧鑱旇〃涓幏鍙栬浠� 20210818 start
+        List<Tender_Opportunity_Link__c> links = [SELECT Id, Tender_information__c, Opportunity__c FROM Tender_Opportunity_Link__c WHERE Tender_information__c in :BiddingProjectID];
+        List<String> oppIds = new List<String>();
+        for (Tender_Opportunity_Link__c link : links) {
+            // 澶氬澶氬叧绯� 闇�瑕佸幓閲�
+            if (oppIds.contains(link.Opportunity__c)) {
+                continue;
+            }
+            oppIds.add(link.Opportunity__c);
+        }
+        List<Opportunity> allRelativeOppList = [SELECT Id ,AccountId,Hospital__c,Department_Class__c,SAP_Send_OK__c,CreatedDate, Whether_Bidding__c,
+        Old_BiddingProject_Bid__c, OwnerId, StageName__c, Bidding_Project_Name_Bid__c, ConfirmationofAward__c
+        //20221010  lt SWAG-CHL5XA銆怓Y23璇环鏀瑰杽銆�-缁熻涓绘満鍙版暟 start
+        ,OlyNumberHosts__c, RivalHostsNumber__c, InquireNumberHosts__c
+        //20221010  lt SWAG-CHL5XA銆怓Y23璇环鏀瑰杽銆�-缁熻涓绘満鍙版暟 end
+        FROM Opportunity WHERE Id in :oppIds ORDER By createdDate ASC];
+        // List<Opportunity> allRelativeOppList = [SELECT Id ,AccountId,Hospital__c,Department_Class__c,SAP_Send_OK__c,CreatedDate, Whether_Bidding__c,
+        // Old_BiddingProject_Bid__c,Bidding_Project_Name_Bid__c ,StageName__c ,Bidding_Project_Name_Bid__r.Hospital__c,Bidding_Project_Name_Bid__r.Hospital1__c,
+        // Bidding_Project_Name_Bid__r.Hospital2__c,Bidding_Project_Name_Bid__r.Hospital3__c,Bidding_Project_Name_Bid__r.Hospital4__c,
+        // Bidding_Project_Name_Bid__r.OwnerId,OwnerId,
+        // Bidding_Project_Name_Bid__r.IsRelateProject__c ,Bidding_Project_Name_Bid__r.IsBid__c ,Bidding_Project_Name_Bid__r.department__c,
+        // Bidding_Project_Name_Bid__r.subDepartment1__c,Bidding_Project_Name_Bid__r.subDepartment2__c,Bidding_Project_Name_Bid__r.subDepartment3__c,
+        // Bidding_Project_Name_Bid__r.subDepartment4__c FROM Opportunity WHERE Bidding_Project_Name_Bid__c in :BiddingProjectID ORDER By createdDate ASC];
+       
+        //閬嶅巻璇环闆嗗悎
+        //2.鎸夊垱寤烘椂闂存帓搴�(姝e簭),鍒涘缓map
+        for(Opportunity tempOp :allRelativeOppList){
+            // 寰幆link锛屾壘鍒拌浠峰搴旂殑鎷涙爣
+            for (Tender_Opportunity_Link__c link : links) {
+                if (link.Opportunity__c == tempOp.Id) {
+                    String fifteenTenderId = String.valueOf(link.Tender_information__c).subString(0,15);
+                    //Map閲岄潰娌℃湁淇濆瓨褰撳墠璇环鐨勬嫑鏍囬」鐩笅鐨勮浠�
+                    if(!BiddingProjectOppMap.containsKey(fifteenTenderId)){
+                        //绗竴娆″瓨鏀�
+                        List<Opportunity> tempOppList = new List<Opportunity>();
+                        tempOppList.add(tempOp);
+                        BiddingProjectOppMap.put(fifteenTenderId,tempOppList);
+                    }else {
+                        //浠ュ悗瀛樻斁
+                        List<Opportunity> tempOppListE = BiddingProjectOppMap.get(fifteenTenderId);
+                        tempOppListE.add(tempOp);
+                        BiddingProjectOppMap.put(fifteenTenderId,tempOppListE);
+                    }
+                }
+            }
+            //鍒ゆ柇褰撳墠璇环鏄惁鏈夋嫑鏍囬」鐩�
+            // if(tempOp.Bidding_Project_Name_Bid__c!=null){
+            //     String fifteenTenderId = String.valueOf(tempOp.Bidding_Project_Name_Bid__c).subString(0,15);
+            //     //Map閲岄潰娌℃湁淇濆瓨褰撳墠璇环鐨勬嫑鏍囬」鐩笅鐨勮浠�
+            //     if(!BiddingProjectOppMap.containsKey(fifteenTenderId)){
+            //         //绗竴娆″瓨鏀�
+            //         List<Opportunity> tempOppList = new List<Opportunity>();
+            //         tempOppList.add(tempOp);
+            //         BiddingProjectOppMap.put(fifteenTenderId,tempOppList);
+            //     }else {
+            //         //浠ュ悗瀛樻斁
+            //         List<Opportunity> tempOppListE =BiddingProjectOppMap.get(fifteenTenderId);
+            //         tempOppListE.add(tempOp);
+            //         BiddingProjectOppMap.put(fifteenTenderId,tempOppListE);
+            //     } 
+            // }
+        }
+        //瀹屽杽Map : 璇环涓�0鐨勬嫑鎶曟爣椤圭洰搴旇涔熸湁涓�鍒�
+        for(String TenderId : BiddingProjectID){
+            String fifteenTenderId = TenderId.subString(0,15);
+            if(!BiddingProjectOppMap.containsKey(fifteenTenderId)){
+                List<Opportunity> tempOppList = new List<Opportunity>();
+                BiddingProjectOppMap.put(fifteenTenderId,tempOppList);
+            }
+        }
+
+        return BiddingProjectOppMap;
+    }
+
+
+    // 鍙戦�佹彁閱掗偖浠�
+    private void sendFieldEmail() {
+        PretechBatchEmailUtil be = new PretechBatchEmailUtil();
+        String[] toList = new String[] {UserInfo.getUserEmail()};
+        String title = '鎷涙爣椤圭洰璇环鐘舵�佸拰璇环鏁伴噺鏇存柊澶辫触';
+        //String[] ccList = new String[] {'Xiaochen_You@olympus.com.cn'};
+        String[] ccList = new String[] {'miaoziyang@prec-tech.com'};
+        if (System.Test.isRunningTest()) {
+            be.successMail('', 1);
+        }
+        if (emailMessages.size() > 0 && TenderfailedCount > 0) {
+            be.failedMail(toList, ccList, title, this.emailMessages.get(0)+'\n',
+                            TendertotalCount, TendertotalCount - TenderfailedCount, TenderfailedCount,'',true);
+            if(!Test.isRunningTest()){
+                be.send();
+            }
+        }       
+    }
+    
+    public static void justForTest() {
+        Integer i = 0;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+             i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+             i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+        i++;
+    }
+}
\ No newline at end of file
diff --git a/force-app/main/default/classes/UpdateTenderInformationBatch.cls-meta.xml b/force-app/main/default/classes/UpdateTenderInformationBatch.cls-meta.xml
new file mode 100644
index 0000000..e3d1b51
--- /dev/null
+++ b/force-app/main/default/classes/UpdateTenderInformationBatch.cls-meta.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
+    <apiVersion>45.0</apiVersion>
+    <status>Active</status>
+</ApexClass>
diff --git a/force-app/main/default/lwc/lexTenderingEnquiryButton/lexTenderingEnquiryButton.html b/force-app/main/default/lwc/lexTenderingEnquiryButton/lexTenderingEnquiryButton.html
new file mode 100644
index 0000000..31d96b3
--- /dev/null
+++ b/force-app/main/default/lwc/lexTenderingEnquiryButton/lexTenderingEnquiryButton.html
@@ -0,0 +1,5 @@
+<template>
+    <div class="EnquiryButton" if:true={IsLoading}>
+        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
+    </div>
+</template>
\ No newline at end of file
diff --git a/force-app/main/default/lwc/lexTenderingEnquiryButton/lexTenderingEnquiryButton.js b/force-app/main/default/lwc/lexTenderingEnquiryButton/lexTenderingEnquiryButton.js
new file mode 100644
index 0000000..24650e9
--- /dev/null
+++ b/force-app/main/default/lwc/lexTenderingEnquiryButton/lexTenderingEnquiryButton.js
@@ -0,0 +1,62 @@
+import { LightningElement,wire,track,api} from 'lwc';
+import { CurrentPageReference } from "lightning/navigation";
+import { CloseActionScreenEvent } from 'lightning/actions';
+import  init  from '@salesforce/apex/TenderingButtonController.initTenderingController';
+import  updateOpportunityInformation  from '@salesforce/apex/UpdateTenderInformationBatch.updateOpportunityInformation';
+import { ShowToastEvent } from 'lightning/platformShowToastEvent';
+export default class lexTenderingEnquiryButton extends LightningElement {
+    @api recordId;//褰撳墠杩欐潯鏁版嵁鐨刬d
+    id;//杩斿洖鍊肩殑id  Tender_information__c鎷涙爣椤圭洰鐨刬d
+    IsLoading = true;
+    isRelateProject;//鍒ゆ柇鏄惁鍙嶅簲
+
+    @wire(CurrentPageReference)
+     getStateParameters(currentPageReference) {
+         if (currentPageReference) {
+           const urlValue = currentPageReference.state.recordId;
+           if (urlValue) {
+             let str = `${urlValue}`;
+             this.recordId = str;
+           }
+         }
+     }
+    
+    connectedCallback(){
+        init({
+            recordId: this.recordId
+        }).then(result => {
+            if (result != null) {
+                this.IsLoading = false;
+                this.id = result.Id;
+                this.isRelateProject = result.isRelateProject;
+                this.EnquiryButton();
+                this.dispatchEvent(new CloseActionScreenEvent());
+            }
+        })     
+    }
+    //鎷涙爣椤圭洰 鍙嶅簲璇环鐘舵��
+    EnquiryButton(){
+        if(this.isRelateProject == "鍚�"){
+            this.showToast('鎷涙姇鏍囬」鐩笉鐩稿叧鍚庝笉鑳藉弽搴旇浠风姸鎬�!','error');
+            return;
+        }
+        var listss = [];
+        listss.push(this.id);
+        updateOpportunityInformation({TenderIdList : listss}).then(result=>{
+            if(result != 'OK'){
+                this.showToast(result,'error');
+            }else {
+                this.showToast('鍙嶆槧瀹屼簡','success');
+            }
+        })
+    }
+
+    showToast(msg,type) {
+        const event = new ShowToastEvent({
+            message: msg,
+            variant: type
+        });
+        this.dispatchEvent(event);
+        this.dispatchEvent(new CloseActionScreenEvent());
+    }
+}
\ No newline at end of file
diff --git a/force-app/main/default/lwc/lexTenderingEnquiryButton/lexTenderingEnquiryButton.js-meta.xml b/force-app/main/default/lwc/lexTenderingEnquiryButton/lexTenderingEnquiryButton.js-meta.xml
new file mode 100644
index 0000000..2b7649d
--- /dev/null
+++ b/force-app/main/default/lwc/lexTenderingEnquiryButton/lexTenderingEnquiryButton.js-meta.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
+	<apiVersion>54.0</apiVersion>
+	<isExposed>true</isExposed>
+	<targets>
+		<target>lightning__RecordPage</target>
+		<target>lightning__AppPage</target>
+		<target>lightning__HomePage</target>
+		<target>lightning__RecordAction</target>
+	</targets>
+</LightningComponentBundle>
\ No newline at end of file
diff --git a/force-app/main/default/lwc/lexTenderingIntentionButton/lexTenderingIntentionButton.html b/force-app/main/default/lwc/lexTenderingIntentionButton/lexTenderingIntentionButton.html
new file mode 100644
index 0000000..8e46b4b
--- /dev/null
+++ b/force-app/main/default/lwc/lexTenderingIntentionButton/lexTenderingIntentionButton.html
@@ -0,0 +1,5 @@
+<template>
+    <div class="IntentionButton" if:true={IsLoading}>
+        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
+    </div>
+</template>
\ No newline at end of file
diff --git a/force-app/main/default/lwc/lexTenderingIntentionButton/lexTenderingIntentionButton.js b/force-app/main/default/lwc/lexTenderingIntentionButton/lexTenderingIntentionButton.js
new file mode 100644
index 0000000..f5f5d53
--- /dev/null
+++ b/force-app/main/default/lwc/lexTenderingIntentionButton/lexTenderingIntentionButton.js
@@ -0,0 +1,52 @@
+import { LightningElement,wire,track,api} from 'lwc';
+import { CurrentPageReference } from "lightning/navigation";
+import { CloseActionScreenEvent } from 'lightning/actions';
+import  init  from '@salesforce/apex/TenderingButtonController.initTenderingController';
+import { ShowToastEvent } from 'lightning/platformShowToastEvent';
+export default class lexTenderingIntentionButton extends LightningElement {
+    @api recordId;//褰撳墠杩欐潯鏁版嵁鐨刬d
+    id;//杩斿洖鍊肩殑id  Tender_information__c鎷涙爣椤圭洰鐨刬d
+    IsLoading = true;
+
+    @wire(CurrentPageReference)
+     getStateParameters(currentPageReference) {
+         if (currentPageReference) {
+           const urlValue = currentPageReference.state.recordId;
+           if (urlValue) {
+             let str = `${urlValue}`;
+             this.recordId = str;
+           }
+         }
+     }
+    
+    connectedCallback(){
+        init({
+            recordId: this.recordId
+        }).then(result => {
+            if (result != null) {
+                this.IsLoading = false;
+                this.id = result.Id;
+                this.IntentionButton();
+                this.dispatchEvent(new CloseActionScreenEvent());
+            }
+        })      
+    }
+
+    //鎷涙爣椤圭洰鏂板缓鎰忓悜
+    IntentionButton(){
+            // alert('濉啓澶卞崟鎶ュ憡璇风洿鎺ョ偣鍑绘嫑鏍囬〉闈€�愬け鍗曘�戞寜閽�');
+            this.showToast('濉啓澶卞崟鎶ュ憡璇风洿鎺ョ偣鍑绘嫑鏍囬〉闈€�愬け鍗曘�戞寜閽�','success');
+            var url = '/apex/NewAndEditLead?' + '00N10000009HKS5=' + this.id
+            + '&LeadSource=鎷涙爣缃�' + '&RecordTypeId=01210000000QiRf' + '&retURL=%2F' + this.id ;
+            window.open(url);
+    }
+
+    showToast(msg,type) {
+        const event = new ShowToastEvent({
+            message: msg,
+            variant: type
+        });
+        this.dispatchEvent(event);
+        this.dispatchEvent(new CloseActionScreenEvent());
+    }
+}
\ No newline at end of file
diff --git a/force-app/main/default/lwc/lexTenderingIntentionButton/lexTenderingIntentionButton.js-meta.xml b/force-app/main/default/lwc/lexTenderingIntentionButton/lexTenderingIntentionButton.js-meta.xml
new file mode 100644
index 0000000..2b7649d
--- /dev/null
+++ b/force-app/main/default/lwc/lexTenderingIntentionButton/lexTenderingIntentionButton.js-meta.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
+	<apiVersion>54.0</apiVersion>
+	<isExposed>true</isExposed>
+	<targets>
+		<target>lightning__RecordPage</target>
+		<target>lightning__AppPage</target>
+		<target>lightning__HomePage</target>
+		<target>lightning__RecordAction</target>
+	</targets>
+</LightningComponentBundle>
\ No newline at end of file
diff --git a/force-app/main/default/lwc/lexTenderingNoStandardButton/lexTenderingNoStandardButton.html b/force-app/main/default/lwc/lexTenderingNoStandardButton/lexTenderingNoStandardButton.html
new file mode 100644
index 0000000..0f47a3a
--- /dev/null
+++ b/force-app/main/default/lwc/lexTenderingNoStandardButton/lexTenderingNoStandardButton.html
@@ -0,0 +1,5 @@
+<template>
+    <div class="NoStandardButton" if:true={IsLoading}>
+        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
+    </div>
+</template>
\ No newline at end of file
diff --git a/force-app/main/default/lwc/lexTenderingNoStandardButton/lexTenderingNoStandardButton.js b/force-app/main/default/lwc/lexTenderingNoStandardButton/lexTenderingNoStandardButton.js
new file mode 100644
index 0000000..b071b10
--- /dev/null
+++ b/force-app/main/default/lwc/lexTenderingNoStandardButton/lexTenderingNoStandardButton.js
@@ -0,0 +1,49 @@
+import { LightningElement,wire,track,api} from 'lwc';
+import { CurrentPageReference } from "lightning/navigation";
+import { CloseActionScreenEvent } from 'lightning/actions';
+import  init  from '@salesforce/apex/TenderingButtonController.initTenderingController';
+import { ShowToastEvent } from 'lightning/platformShowToastEvent';
+export default class lexTenderingNoStandardButton extends LightningElement {
+    @api recordId;//褰撳墠杩欐潯鏁版嵁鐨刬d
+    id;//杩斿洖鍊肩殑id  Tender_information__c鎷涙爣椤圭洰鐨刬d
+    opportunityNum;
+    IsLoading = true;
+
+    @wire(CurrentPageReference)
+     getStateParameters(currentPageReference) {
+         if (currentPageReference) {
+           const urlValue = currentPageReference.state.recordId;
+           if (urlValue) {
+             let str = `${urlValue}`;
+             this.recordId = str;
+           }
+         }
+     }
+    connectedCallback(){
+        init({
+            recordId: this.recordId
+        }).then(result => {
+                this.IsLoading = false;
+                this.id = result.Id;
+                this.opportunityNum = result.opportunityNum;
+                this.NoStandardButton();
+                this.dispatchEvent(new CloseActionScreenEvent());
+        })        
+    }
+    //鎷涙爣椤圭洰涓嶅簲鏍囩敵璇�
+    NoStandardButton(){
+        if(Number(this.opportunityNum) > 0) {
+            this.showToast('椤圭洰宸插叧鑱旇繃璇环锛岃鍒拌浠烽噷鍋氫笉搴旀爣鐢宠','error');
+            return;
+        }
+        window.open ('/apex/Bidding?id='+this.id, '', 'height=350, width=600, top=200, left=350,location=no');
+    }
+    showToast(msg,type) {
+        const event = new ShowToastEvent({
+            message: msg,
+            variant: type
+        });
+        this.dispatchEvent(event);
+        this.dispatchEvent(new CloseActionScreenEvent());
+    }
+}
diff --git a/force-app/main/default/lwc/lexTenderingNoStandardButton/lexTenderingNoStandardButton.js-meta.xml b/force-app/main/default/lwc/lexTenderingNoStandardButton/lexTenderingNoStandardButton.js-meta.xml
new file mode 100644
index 0000000..2b7649d
--- /dev/null
+++ b/force-app/main/default/lwc/lexTenderingNoStandardButton/lexTenderingNoStandardButton.js-meta.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
+	<apiVersion>54.0</apiVersion>
+	<isExposed>true</isExposed>
+	<targets>
+		<target>lightning__RecordPage</target>
+		<target>lightning__AppPage</target>
+		<target>lightning__HomePage</target>
+		<target>lightning__RecordAction</target>
+	</targets>
+</LightningComponentBundle>
\ No newline at end of file

--
Gitblit v1.9.1