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