public with sharing class OpportunityService{ public static Decimal selectcancelcount{get;set;}//选择的取消的询价个数 //DB202311699820 新需求:待关联询价页面里增加日期字段 fy start // private static String opp_search_field = ' Id, Name, Account_Name_F__c, OwnerId, Hospital__c, Opportunity_No__c, Opportunity_stage__c, StageName__c, stagename, Bidding_Project_Name_Bid__c, Department_Class__r.RecordTypeId '; private static String opp_search_field = ' Id, Name, Account_Name_F__c, OwnerId, Hospital__c, Opportunity_No__c, Opportunity_stage__c, StageName__c, stagename, Bidding_Project_Name_Bid__c, Department_Class__r.RecordTypeId ,order_Date_For_Report__c,SFDCLast_Process_Date__c'; //DB202311699820 新需求:待关联询价页面里增加日期字段 fy end // 查询已保存的数据 //noStr 询价的ID //daccountID 客户的ID 现在没用 // IdStr 招投标的ID //hospital 医院的ID @AuraEnabled public static string GetNormalProductDataSearch(String noStr,String accountId,String IdStr,String inputText,String hospital,String[] hospitalArr, String departments) { String sql = 'select '; // sql += CommonUtils.GetSqlToPorps(Opportunity.SObjectType); sql += opp_search_field; sql += ' from Opportunity'; // 多对多关系 去掉未关联的判断 start // sql += ' where Bidding_Project_Name_Bid__c = null '; sql += ' where id != null '; // 多对多关系 去掉未关联的判断 end if(noStr != null && noStr != '' && noStr != ' ') { sql += ' and Opportunity_No__c = :noStr'; } //liangxiaozhen 20231108 改模糊查询 start // if(hospitalArr!= null && hospitalArr.size() > 0) // { // sql += ' and Hospital__c in :hospitalArr'; // } if(inputText!= null && inputText!= '') { //DB202311699820 新需求:待关联询价页面里增加日期字段 fy start // sql += ' and Account_Name_F__c LIKE \'%' + inputText + '%\' '; sql += ' and (Account_Name_F__c LIKE \'%' + inputText + '%\' or Opportunity_No__c LIKE \'%' + inputText + '%\')'; //DB202311699820 新需求:待关联询价页面里增加日期字段 fy end } //liangxiaozhen 20231108 改模糊查询 end if(hospital != null && hospital != '' && hospital != ' ') { sql += ' and Hospital__c = :hospital'; } // String paremt1 = '012100000006KMe'; // String paremt2 = '01210000000QekK'; // String paremt3 = '引合'; // sql += ' and (recordtypeid = :paremt1 or recordtypeid = :paremt2) and stagename = :paremt3 '; sql += ' and recordtype.developername in (\'Opportunity\',\'SI_Oppor\') and Hospital__r.Is_Active__c = \'有効\' '; // 这里有修改,别给盖了 /** DB202305552102 you 202305230 除了目标的都看 ' and ( (SAP_Send_OK__c = true and SAP_Send_OK_Date__c = LAST_N_DAYS:183 ) '+ 'or( stagename = \'敗戦\' and Final_Contract_Proceeded_Date__c = LAST_N_DAYS:183 ) or stagename = \'引合\' ) '; **/ // 这里有修改,别给盖了 // 20210914 战略科室修改 //if (departments != null && String.isNotBlank(departments)) { // String[] depart_types = departments.split(';'); // if (depart_types != null && depart_types.size() > 0 && depart_types.size() < 6) { // sql += ' and Department_Class__r.RecordTypeId in :depart_types '; // } //} // 20210914 战略科室修改 // 去掉已经关联的招标 if(IdStr != null && String.isNotBlank(IdStr)) { sql += ' and id not in (select Opportunity__c from Tender_Opportunity_Link__c where Tender_information__c = :IdStr) '; } // 20221014 ljh SWAG-CK28WT add start String proId = UserInfo.getProfileId(); String p_2M4 = System.Label.ProfileId_2M4; if(proId.substring(0,15) == p_2M4.substring(0,15)){ sql += ' AND OwnerId =\''+UserInfo.getUserId()+'\''; } // 20221014 ljh SWAG-CK28WT add end //DB202305552102 you 202305230 除了目标的都看 sql += ' and stageName != \'目標\''; //DB202305552102 you 202305230 除了目标的都看 //DB202309608863 chenjingwu 2023/10/11 招标项目待关联询价中排除变更用户询价 sql += ' and If_Account_Change__c = false'; //DB202309608863 chenjingwu 2023/10/11 招标项目待关联询价中排除变更用户询价 sql += ' order by stageName limit 50'; System.debug('sql1:'+sql); List arrays = Database.query(sql); return JSON.serialize(arrays); } // 查询未保存的数据 // IdStr 招投标的ID //hospital 医院的ID @AuraEnabled public static string GetNormalProductDataNotSave(String IdStr,String[] hospital, String departments) { // QueryWrapper query = new QueryWrapper(Tender_information__c.SObjectType); // query.eq('Id',IdStr); // 招标-询价关联修改 20210813 start String sql = 'select '; // sql += CommonUtils.GetSqlToPorps(Opportunity.SObjectType); sql += opp_search_field; sql += ' from Opportunity'; // 多对多关系 去掉未关联的判断 start // sql += ' where Bidding_Project_Name_Bid__c = null '; // 多对多关系 去掉未关联的判断 end // String paremt1 = '012100000006KMe'; // String paremt2 = '01210000000QekK'; // String paremt3 = '引合'; // sql += ' and (recordtypeid = :paremt1 or recordtypeid = :paremt2) and stagename = \'引合\' '; // sql += ' and recordtype.developername in (\'Opportunity\',\'SI_Oppor\') and Hospital__r.Is_Active__c = \'有効\' '+ sql += ' where recordtype.developername in (\'Opportunity\',\'SI_Oppor\') and Hospital__r.Is_Active__c = \'有効\' '; // 这里有修改,别给盖了 /**DB202305552102 you 202305230 除了目标的都看 ' and ( (SAP_Send_OK__c = true and SAP_Send_OK_Date__c = LAST_N_DAYS:183 ) '+ 'or( stagename = \'敗戦\' and Final_Contract_Proceeded_Date__c = LAST_N_DAYS:183 ) or stagename = \'引合\' ) '; **/ // 这里有修改,别给盖了 // 去掉已经关联的招标 if(IdStr != null && String.isNotBlank(IdStr)) { sql += ' and id not in (select Opportunity__c from Tender_Opportunity_Link__c where Tender_information__c = :IdStr) '; } // 20210914 战略科室修改 //if (departments != null && String.isNotBlank(departments)) { // String[] depart_types = departments.split(';'); // if (depart_types != null && depart_types.size() > 0 && depart_types.size() < 6) { // sql += ' and Department_Class__r.RecordTypeId in :depart_types '; // } //} // 20210914 战略科室修改 if(hospital!= null && hospital.size() > 0) { sql += ' and Hospital__c in :hospital'; } // 20221014 ljh SWAG-CK28WT add start String proId = UserInfo.getProfileId(); String p_2M4 = System.Label.ProfileId_2M4; if(proId.substring(0,15) == p_2M4.substring(0,15)){ sql += ' AND OwnerId =\''+UserInfo.getUserId()+'\''; } // 20221014 ljh SWAG-CK28WT add end //DB202305552102 you 202305230 除了目标的都看 sql += ' and stageName != \'目標\''; //DB202305552102 you 202305230 除了目标的都看 //DB202309608863 chenjingwu 2023/10/11 招标项目待关联询价中排除变更用户询价 sql += ' and If_Account_Change__c = false'; sql += ' and ((SFDCLast_Process_Date__c = null and stageName not in (\'出荷\',\'完了\',\'削除\',\'敗戦\')) or SFDCLast_Process_Date__c >= LAST_N_DAYS:730)'; //DB202309608863 chenjingwu 2023/10/11 招标项目待关联询价中排除变更用户询价 sql += ' order by stageName limit 200'; System.debug('sql2:'+sql); List arrays = Database.query(sql); // Tender_information__c return JSON.serialize(arrays); // 招标-询价关联修改 20210813 end } //查询已保存 // 只有一个 当前招投标 //IdStr 招投标的ID @AuraEnabled public static string GetNormalProductDataIsSave(String IdStr) { // 招标-询价关联修改 20210817 start // 查询方式或许应该优化一下 // QueryWrapper query = new QueryWrapper(Opportunity.SObjectType); // query.eq('Bidding_Project_Name_Bid__c', IdStr); // List arrays = DataBasePlus.listPlus(query); List oppIds = new List(); List links = [select Opportunity__c from Tender_Opportunity_Link__c where Tender_information__c = :IdStr]; if (links != null && links.size() > 0) { for (Tender_Opportunity_Link__c link : links) { oppIds.add(link.Opportunity__c); } } // String sql = 'select ' + CommonUtils.GetSqlToPorps(Opportunity.SObjectType) + ' from Opportunity '; String sql = 'select ' + opp_search_field + ' from Opportunity '; sql += 'where Id in :oppIds'; List arrays = Database.query(sql); // 招标-询价关联修改 20210817 end return JSON.serialize(arrays); } //保存 //JsonSelected JSON格式的招投标的已选择数据集合 //JsonNotSelected JSON格式的招投标的未选择数据集合 // BiddingId 对应的招标项目名(招投标) // flag 修改 招投标项目 关联询价时间的一个标识 @AuraEnabled public static string SaveData(String JsonSelected,String JsonNotSelected,String BiddingId,Boolean flag) { selectcancelcount=0; try{ // 新增招标-询价关联关系表,去掉更新询价上的最新招标信息 20210813 start // if(JsonSelected != null && JsonSelected != '' && JsonSelected !='[]') // { // List SelectedList = (List)JSON.deserialize(JsonSelected,List.class); // for(Opportunity item :SelectedList){ // item.Bidding_Project_Name_Bid__c = null; // } // Database.update(SelectedList,false); // } // string OppOwnerId = ''; // if(JsonNotSelected != null && JsonNotSelected != '' && JsonNotSelected !='[]') // { // List NotSelectedList = (List)JSON.deserialize(JsonNotSelected,List.class); // for(Opportunity item :NotSelectedList){ // item.Bidding_Project_Name_Bid__c = BiddingId; // } // OppOwnerId = NotSelectedList[0].ownerId; // Database.update(NotSelectedList); // } // if(flag != null && flag == true) // { // string tenProp = CommonUtils.GetSqlToPorps(Tender_information__c.SObjectType); // String sql = 'select '+tenProp+' from Tender_information__c where Id = :BiddingId'; // List arrays = Database.query(sql); // arrays[0].RelateOppTime__c = datetime.now(); // //if( arrays[0].IsBid__c == null && OppOwnerId != '') // //{ // // arrays[0].ownerId = OppOwnerId; // //} // if (arrays != null && arrays.size() >0 && // (arrays[0].ownerId == '00510000005sEEM' || arrays[0].ownerId == '00510000000gmxH') // && OppOwnerId != '') // { // arrays[0].ownerId = OppOwnerId; // } // Database.update(arrays); // } // 新增招标-询价关联关系表,去掉更新询价上的最新招标信息 20210813 end // 招标-询价关联修改 20210813 start // 查询招标 // string tenProp = CommonUtils.GetSqlToPorps(Tender_information__c.SObjectType); // String sql = 'select '+tenProp+' from Tender_information__c where Id = :BiddingId'; String sql = 'SELECT '; sql += 'Id, '; sql += 'NotBidApprovalStatus__c, '; sql += 'IsBid__c, '; sql += 'TenderBeginTime__c, '; sql += 'InfoType__c, '; sql += 'OwnerId, '; sql += 'IsReactionOpp__c, '; sql += 'IsRelateProject__c, '; sql += 'RelateOppTime__c, '; sql += 'irrelevantReasons__c, '; sql += 'irrelevantReasonOther__c, '; sql += 'Hospital__c, '; sql += 'Hospital1__c, '; sql += 'Hospital2__c, '; sql += 'Hospital3__c, '; sql += 'Hospital4__c, '; sql += 'OpportunityNum__c, ';//20230714 you DB202306372336 sql += 'publicDate__c, ';// 20221114 ljh SWAG-CKL5UC sql += 'Tender_Order__c, '; //20220620 you SWAG-CFD4SU sql += 'subInfoType__c, '; //20220718 you 招标任务 sql += 'TenderDate__c, '; //20231218 lt lt DB202311665664 add sql += 'status__c, ProjectRestartFLG__c,IsTerminate__c,TerminateApprovalStatus__c, '; sql += 'TerminateApprovalTime__c ';//DB202305552102 增加项目终止时间 只有申请项目终止才允许关联取消的询价 sql += 'FROM Tender_information__c WHERE Id = :BiddingId order by Tender_Order__c desc,relativeTime_F__c desc'; //20220620 you SWAG-CFD4SU 增加 order by List arrays = Database.query(sql); Tender_information__c tender = arrays[0]; // 不应标申请中的时候 调回申请修改 20210907 start if (tender.NotBidApprovalStatus__c != null && tender.NotBidApprovalStatus__c == '申请中') { List requests = new List (); ProcessInstance pi = [Select Id, SubmittedById from ProcessInstance where TargetObjectId = :tender.Id and Status = 'Pending' order by CreatedDate desc limit 1]; if (pi != null) { for(ProcessInstanceWorkItem wi : [Select Id from ProcessInstanceWorkItem where ProcessInstanceId = :pi.Id]){ Approval.ProcessWorkitemRequest req2 = new Approval.ProcessWorkitemRequest(); if (pi.SubmittedById.equals(Userinfo.getUserId())) { req2.setAction('Removed'); tender.NotBidApprovalStatus__c = '草案中'; } else { req2.setAction('Reject'); tender.NotBidApprovalStatus__c = '驳回'; tender.IsBid__c = null; } req2.setWorkitemId(wi.Id); requests.add(req2); } system.debug('==requests.size()=='+requests.size()); if (requests.size() > 0) { Approval.ProcessResult[] processResults = null; processResults = Approval.process(requests, true); system.debug('==调回结果=='+processResults); } } } // 不应标申请中的时候 调回申请修改 20210907 end // 合并已关联和未关联列表 List all_selected_list = new List(); if (JsonSelected != null && JsonSelected != '' && JsonSelected !='[]') { all_selected_list.addAll((List)JSON.deserialize(JsonSelected,List.class)); } if (JsonNotSelected != null && JsonNotSelected != '' && JsonNotSelected !='[]') { all_selected_list.addAll((List)JSON.deserialize(JsonNotSelected,List.class)); } // 招标所有人是否要修改flag // boolean owner_change = false; // 先删除旧的link // 跳过trigger标记 // 没有删除逻辑 StaticParameter.EscapeTOLinkTrigger = true; // List del_links = [select Id from Tender_Opportunity_Link__c where Tender_information__c = :BiddingId]; // if (del_links != null && del_links.size() > 0) { // delete del_links; // } // 更新询价 List upd_opps = new List(); List upd_opps1 = new List(); List owners = new List(); Integer links=0; // 插入link if (all_selected_list.size() > 0) { //取消状态 询价判断 Map oppStagename= new Map(); for (Opportunity opp : all_selected_list) { //当前选择的询价 if(opp.stagename=='削除'){ oppStagename.put(opp.Id,opp.stagename); selectcancelcount +=1; } } system.debug(all_selected_list.size()+'==oppStagename=='+oppStagename +'==selectcancelcount=='+selectcancelcount); if(null!= oppStagename && oppStagename.size()>0 && tender.TerminateApprovalTime__c ==null){ return '只有申请项目终止才允许关联取消的询价'; /** List del_links = [select Id,Opportunity__c,Opportunity__r.Name,Opportunity__r.Opportunity_No__c,Tender_information__r.status__c from Tender_Opportunity_Link__c where Opportunity__c = :oppStagename.keySet() and Tender_information__r.status__c !='09.终止']; system.debug('==del_links=='+del_links); Map deldate= new Map(); if(del_links != null && del_links.size() > 0){ for(Tender_Opportunity_Link__c ten:del_links){ deldate.put(ten.Opportunity__c,ten.Opportunity__r.Name); } } if(null!=deldate&& deldate.size()>0){ for (String del : deldate.keySet()) { qxopp+=deldate.get(del)+','; } } **/ } // 设置招标所有人 // OppOwnerId = all_selected_list[0].ownerId; // 初始化参数 List add_list = new List(); // 当询价关联过结果阶段的招标项目,再被另一个结果阶段的招标项目关联时,会因为数据被锁定而报错 // 在此处重新检索询价 List oppIds = new List(); for (Opportunity opp : all_selected_list) { oppIds.add(opp.Id); owners.add(opp.ownerId); // 新建link Tender_Opportunity_Link__c link = new Tender_Opportunity_Link__c(); link.Tender_information__c = tender.Id; link.Opportunity__c = opp.Id; link.Tender_Opportunity_Uniq__c = String.valueOf(tender.Id) + String.valueOf(opp.Id); add_list.add(link); } // 插入link if (add_list.size() > 0) { links=add_list.size(); insert add_list; } // 恢复trigger标记 StaticParameter.EscapeTOLinkTrigger = false; //20220620 you SWAG-CFD4SU 改造 start 始终显示最新的 ① 3:结果,② 4:变更,③ 2:公告,④ 1:预告,⑤ 5:其他 List tenIds = new List();//20220718 you 招标任务 system.debug('opportunityservicetest'+oppIds); if (oppIds.size() > 0) { // 20221114 SWAG-CKL5UC ljh 增加 Created_Day__c,LeadSource,LeakageNumber__c //20231218 lt DB202311665664 add ,TenderBeginDate_New__c List wait_upd_opps = [select id,Opp_Order__c,Tender_Number__c, Bidding_Project_Name_Bid__c, Bidding_Project_Name_Bid__r.InfoType__c,Created_Day__c,LeadSource,LeakageNumber__c,TenderBeginDate_New__c from Opportunity where id in :oppIds ];//and Bidding_Project_Name_Bid__r.InfoType__c != '3:结果']; if (wait_upd_opps != null && wait_upd_opps.size() > 0) { for (Opportunity opp : wait_upd_opps) { /** if (opp.Bidding_Project_Name_Bid__c == null || String.isBlank(opp.Bidding_Project_Name_Bid__c)) { opp.Bidding_Project_Name_Bid__c = tender.Id; opp.TenderBeginDate_Text__c = tender.TenderBeginTime__c; upd_opps.add(opp); } else if (tender.InfoType__c == '3:结果' && opp.Bidding_Project_Name_Bid__r.InfoType__c != '3:结果') { opp.Bidding_Project_Name_Bid__c = tender.Id; upd_opps.add(opp); } **/ if(opp.Opp_Order__c <= tender.Tender_Order__c){ opp.Bidding_Project_Name_Bid__c =tender.Id; //opp.TenderBeginDate_Text__c = tender.TenderDate__c;//更改询价2时修改这个字段,引用超20,tender.TenderBeginTime__c; upd_opps.add(opp); //20220715 you 招标项目 start if(String.isNotBlank(tender.InfoType__c) && tender.InfoType__c=='3:结果' && String.isNotBlank(tender.subInfoType__c) && (tender.subInfoType__c=='3-5:中标通知' || tender.subInfoType__c=='3-6:合同公告')){ tenIds.add(opp.id); //符合条件生成任务 } //20220715 you 招标项目 end //break; //lt 20231113 DB202302080091【调查】询价页面显示招标项目信息有误 } } //20220829 you SWAG-CHL67J start for (Opportunity opp : wait_upd_opps) { Integer returncount =0; if(String.isNotBlank(tender.InfoType__c) && tender.InfoType__c!='1:预告' && String.isNotBlank(tender.subInfoType__c) && tender.subInfoType__c!='3-1:废标公告' && tender.subInfoType__c!='3-2:流标公告'){ returncount += 1; } opp.Tender_Number__c = returncount; //20231218 lt DB202311665664 【重要紧急课题】询价中的“项目:招标日”和漏单数修改 start System.debug('lt123---opp.TenderBeginDate_New__c'+String.valueOf(opp.TenderBeginDate_New__c)); if(String.isNotBlank(String.valueOf(opp.TenderBeginDate_New__c))){ if(opp.TenderBeginDate_New__c > tender.TenderDate__c){ opp.TenderBeginDate_New__c = tender.TenderDate__c; } }else{ opp.TenderBeginDate_New__c = tender.TenderDate__c; } System.debug('lt123---招标日:'+ opp.TenderBeginDate_New__c); //20231218 lt DB202311665664 【重要紧急课题】询价中的“项目:招标日”和漏单数修改 end // 20221114 ljh SWAG-CKL5UC start //20230727 lt DB202307367354 【招标项目】漏单计算逻辑修改 delete && String.isNotBlank(opp.LeadSource) && opp.LeadSource == '招标网' // add addDays(-60) //20231218 lt DB202311665664 update tender.publicDate__c ==> opp.TenderBeginDate_New__c if(opp.LeakageNumber__c != 1 && opp.TenderBeginDate_New__c != null && opp.Created_Day__c > opp.TenderBeginDate_New__c.addDays(-60)){ opp.LeakageNumber__c = 1; } // 20221114 ljh SWAG-CKL5UC start upd_opps1.add(opp); } //20220829 you SWAG-CHL67J end } } if (upd_opps1.size() > 0) { update upd_opps1; } //20220620 you SWAG-CFD4SU 改造 end // 更新询价上的招标项目 if (upd_opps.size() > 0) { update upd_opps; } //20220718 you 招标任务 start if (tenIds !=null && tenIds.size() > 0) { Database.executeBatch(new TenderResultConfirmTaskBatch(tenIds)); } //20220718 you 招标任务 end } // 查询招标数量并更新 List tenderLinks = [SELECT id, Tender_information__c, Opportunity__c, Opportunity__r.Hospital__c, Opportunity__r.OwnerId FROM Tender_Opportunity_Link__c WHERE Tender_information__c = :tender.Id]; List oppOwnerInLinks = new List(); for (Tender_Opportunity_Link__c link : tenderLinks) { oppOwnerInLinks.add(link.Opportunity__r.OwnerId); } // 更新招标上的所有人 if (tender.OwnerId == null || System.label.tender_3.equals(tender.OwnerId) || (oppOwnerInLinks.size() > 0 && !oppOwnerInLinks.contains(tender.OwnerId))) { tender.ownerId = owners.size() > 0 ? owners.get(0) : System.label.tender_3; } // 反映询价状态 tender.IsReactionOpp__c = true; // 查询招标数量并更新 //List tenderLinks = [SELECT id, Tender_information__c, Opportunity__c, Opportunity__r.Hospital__c FROM Tender_Opportunity_Link__c WHERE Tender_information__c = :tender.Id]; //tender.OpportunityNum__c = tenderLinks != null ? tenderLinks.size() : 0; //20230714 you DB202306372336 原因,当前担当只能看到自己得关联询价,看不到其他人得,所以询价数量也只能累计自己的 tender.OpportunityNum__c = tender.OpportunityNum__c != null ? tender.OpportunityNum__c + links :links ; // 关联询价时间和是否相关状态 if (tender.IsRelateProject__c != '是') { tender.IsRelateProject__c = '是'; tender.RelateOppTime__c = datetime.now(); tender.irrelevantReasons__c = null; tender.irrelevantReasonOther__c = null; } // 更新关联医院 if (tenderLinks != null && tenderLinks.size() > 0) { // 招标项目的医院 Map fiveHospitalMap = new Map(); fiveHospitalMap.put('Hospital__c', tender.Hospital__c); fiveHospitalMap.put('Hospital1__c', tender.Hospital1__c); fiveHospitalMap.put('Hospital2__c', tender.Hospital2__c); fiveHospitalMap.put('Hospital3__c', tender.Hospital3__c); fiveHospitalMap.put('Hospital4__c', tender.Hospital4__c); for(Integer i = 0; i