李彤
2023-05-15 19ae52ae3e06c44c646ae6b45dc2b0d7f2cead88
招标项目终止
4个文件已修改
11个文件已添加
635 ■■■■■ 已修改文件
force-app/main/default/aura/TerminateApp/TerminateApp.app 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/TerminateApp/TerminateApp.app-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/TerminateApp/TerminateApp.auradoc 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/TerminateApp/TerminateApp.css 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/TerminateApp/TerminateApp.svg 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/TerminateApp/TerminateAppController.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/TerminateApp/TerminateAppHelper.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/TerminateApp/TerminateAppRenderer.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/LostCancelReportHandler.cls 89 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/TenderInformationHandler.cls 122 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/TenderOpportunityLinkHandler.cls 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/TenderResultConfirmTaskBatch.cls 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/TerminateController.cls 198 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/TerminateControllerTest.cls 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/pages/Terminate.page 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/aura/TerminateApp/TerminateApp.app
New file
@@ -0,0 +1,3 @@
<aura:application access="public" extends="ltng:outApp">
    <aura:dependency resource="c:isTerminate"/>
</aura:application>
force-app/main/default/aura/TerminateApp/TerminateApp.app-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<AuraDefinitionBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>56.0</apiVersion>
    <description>A Lightning Application Bundle</description>
</AuraDefinitionBundle>
force-app/main/default/aura/TerminateApp/TerminateApp.auradoc
New file
@@ -0,0 +1,6 @@
<aura:documentation>
    <aura:description>Documentation</aura:description>
    <aura:example name="ExampleName" ref="exampleComponentName" label="Label">
        Example Description
    </aura:example>
</aura:documentation>
force-app/main/default/aura/TerminateApp/TerminateApp.css
New file
@@ -0,0 +1,2 @@
.THIS {
}
force-app/main/default/aura/TerminateApp/TerminateApp.svg
New file
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg width="120px" height="120px" viewBox="0 0 120 120" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
        <path d="M120,108 C120,114.6 114.6,120 108,120 L12,120 C5.4,120 0,114.6 0,108 L0,12 C0,5.4 5.4,0 12,0 L108,0 C114.6,0 120,5.4 120,12 L120,108 L120,108 Z" id="Shape" fill="#2A739E"/>
        <path d="M77.7383308,20 L61.1640113,20 L44.7300055,63.2000173 L56.0543288,63.2000173 L40,99.623291 L72.7458388,54.5871812 L60.907727,54.5871812 L77.7383308,20 Z" id="Path-1" fill="#FFFFFF"/>
    </g>
</svg>
force-app/main/default/aura/TerminateApp/TerminateAppController.js
New file
@@ -0,0 +1,5 @@
({
    myAction : function(component, event, helper) {
    }
})
force-app/main/default/aura/TerminateApp/TerminateAppHelper.js
New file
@@ -0,0 +1,5 @@
({
    helperMethod : function() {
    }
})
force-app/main/default/aura/TerminateApp/TerminateAppRenderer.js
New file
@@ -0,0 +1,5 @@
({
// Your renderer method overrides go here
})
force-app/main/default/classes/LostCancelReportHandler.cls
@@ -30,7 +30,7 @@
    //2022-6-22 yjk 询价跟进任务 start
    protected override void afterInsert() {
        updateTask();
        updateTask();
    }
    // 2022-7-29 ssm XLIU-CGSC8R 【委托】[改善】询价里删除批准的失单报告状态1自动变
@@ -41,14 +41,15 @@
    private void updateTask(){
        List<Id> oppIdList = new List<Id>();
        Set<Id> oppIdSet = new Set<Id>();
        Set<Id> oppIdSet = new Set<Id>();
        Set<Id> sdoppidSet = new Set<Id>();
        List<Id> updateOppId = new List<Id>(); 
        List<Opportunity> updateOpp = new List<Opportunity>();
        Map<String,String> cancelMap = new Map<String,String>();//lt 20230425 招标终止 add
        
        for(Lost_cancel_report__c lcr : newList){
            oppIdList.add(lcr.Opportunity__c);
            cancelMap.put(lcr.Opportunity__c, lcr.RecordType.Name);//lt 20230425 招标终止 add
        }
        // 20221202 ljh DB202211594688  start
        // List<task__c> taskList = [select id,taskStatus__c,OpportunityId__c from task__c where RecordType.Name ='中标结果确认' and taskStatus__c = '02 接受' and OpportunityId__c in :oppIdList];
@@ -57,8 +58,22 @@
        //     //updateOppId.add(tsk.OpportunityId__c); //20220823 you 没有任务时,
        // }
        // LoseListTask 失单报告任务   winBiddingTask  中标结果确认
        List<task__c> taskList = [select id,taskStatus__c,OpportunityId__c,RecordType.Name from task__c where (RecordType.Name ='中标结果确认' or RecordType.Name ='失单报告任务')  and OpportunityId__c in :oppIdList];
        for(task__c tsk : taskList){
        List<task__c> taskList = [select id,taskStatus__c,OpportunityId__c,RecordType.Name
                                  from task__c
                                  where (RecordType.Name ='中标结果确认' or RecordType.Name ='失单报告任务')
                                  and OpportunityId__c in :oppIdList];
        // 20230508 ljh DB202305008316 start
        /*for(task__c tsk : taskList){
            //lt 20230425 招标终止 start
            System.debug('---lt123---cancelMap:'+cancelMap);
            System.debug('---lt123---cancelMap.get(tsk.OpportunityId__c):'+cancelMap.get(tsk.OpportunityId__c));
            if(cancelMap.containsKey(tsk.OpportunityId__c)){
                if(cancelMap.get(tsk.OpportunityId__c) == 'PCL_Cancel_report'){
                    tsk.taskStatus__c = '04 取消';
                    tsk.cancelReasonSelect__c = '项目终止';
                }
            }else
            //lt 20230425 招标终止 end
            if(tsk.RecordType.Name == '中标结果确认' && tsk.taskStatus__c == '02 接受'){
                tsk.taskStatus__c = '03 完成';
            }
@@ -67,7 +82,28 @@
                sdoppidSet.add(tsk.OpportunityId__c);
            }
            oppIdSet.add(tsk.OpportunityId__c);
        }*/
        List<task__c> Uptask = new List<task__c>();
        for(task__c tsk : taskList){
            task__c temp = new task__c();
            temp.Id = tsk.Id;
            if(cancelMap.containsKey(tsk.OpportunityId__c)){
                if(cancelMap.get(tsk.OpportunityId__c) == 'PCL_Cancel_report'){
                    temp.taskStatus__c = '04 取消';
                    temp.cancelReasonSelect__c = '项目终止';
                }
            }else
            if(tsk.RecordType.Name == '中标结果确认' && tsk.taskStatus__c == '02 接受'){
                temp.taskStatus__c = '03 完成';
            }
            if(tsk.RecordType.Name == '失单报告任务'){
                sdoppidSet.add(tsk.OpportunityId__c);
            }
            oppIdSet.add(tsk.OpportunityId__c);
            Uptask.add(temp);
        }
        // 20230508 ljh DB202305008316 end
        // for(Id oppId : oppIdList){//20220823 you
        for(Id oppId : oppIdSet){
        // 20221202 ljh DB202211594688  end
@@ -89,9 +125,12 @@
            updateOpp.add(opptemp);
        }
        
        update updateOpp;
        update taskList;
        // 20230508 ljh DB202305008316 start
        // update taskList;
        update Uptask;
        // 20230508 ljh DB202305008316 end
    }
    //2022-6-22 yjk 询价跟进任务 end
@@ -191,11 +230,28 @@
        //20220708 询价任务开发,结束失单任务状态,筛选需要的修改的失单任务 start
        Set<String> oppIdSet = new Set<String>();
        Set<String> passOppIdSet = new Set<String>();
        for (Lost_cancel_report__c n: newList) {
            if ((n.Report_Status__c != oldMap.get(n.Id).Report_Status__c) && n.Report_Status__c == '申请中') {
                oppIdSet.add(n.Opportunity__c);
            }
            if ((n.Report_Status__c != oldMap.get(n.Id).Report_Status__c) && n.Report_Status__c == '批准') {
                passOppIdSet.add(n.Opportunity__c);
            }
        }
        // 20230411 多失单报告合并,取出待合并的询价 start
        Map<String, Opportunity> mapOpps = new Map<String, Opportunity>();
        List<Opportunity> lstOpps = [select Id, RivalHostsNumber__c, CompetitorProduct1__c,
                                        CompetitorProduct2__c, CompetitorProduct3__c, Lost_reason_main__c,
                                        Lost_Reason_Sub__c, Agencies__c, PCLLostBrands__c, of_lost_system_processor__c,
                                        LostPrices__c
                                    from Opportunity
                                    where Id in :passOppIdSet];
        for(Opportunity opp : lstOpps) {
            mapOpps.put(opp.Id, opp);
        }
        System.debug('mapOpps: ' + mapOpps);
        // 20230411 多失单报告合并,取出待合并的询价 end
        // 20220720 ljh add 记录取消/失单报告提交时点的战略产品判断 start
        if(oppIdSet.size() > 0 ){
            List<OpportunityLineItem> OppLIlist = [select Id,Key_product_147P_Text__c,Key_product_147P__c from OpportunityLineItem  where OpportunityId in :oppIdSet];
@@ -204,9 +260,13 @@
            }
            update OppLIlist;
        // 20220720 ljh add 记录取消/失单报告提交时点的战略产品判断 end
            List<task__c> taskList = [select id,taskStatus__c from task__c where RecordType.Name ='失单报告任务' and taskStatus__c = '02 接受' and OpportunityId__c in :oppIdSet];
            List<task__c> taskList = [select id,taskStatus__c
                                      from task__c
                                      where RecordType.Name ='失单报告任务'
                                      and taskStatus__c = '02 接受'
                                      and OpportunityId__c in :oppIdSet];
            for(task__c tsk : taskList){
                tsk.taskStatus__c = '03 完成';
                tsk.taskStatus__c = '03 完成';
            }
            update taskList;
        }// 20220720 ljh update
@@ -231,11 +291,16 @@
            List<String> ppList=new List<String>();     //失单品牌
            // List<String> yyList=new List<String>();     //失单原因
            //初始化
            Opportunity opp=new Opportunity();
            // 20230411 多失单报告合并,取出待合并的询价 start
            Opportunity opp = mapOpps != null && mapOpps.containsKey(arrMap.get(lcro).Opportunity__c) ? mapOpps.get(arrMap.get(lcro).Opportunity__c) : new Opportunity();
            //20220930  lt SWAG-CHL5XA【FY23询价改善】-统计主机台数 start
            opp.RivalHostsNumber__c = 0;
            opp.RivalHostsNumber__c = opp.RivalHostsNumber__c != null ? opp.RivalHostsNumber__c : 0;
            //20220930  lt SWAG-CHL5XA【FY23询价改善】-统计主机台数 end
            opp.Id=arrMap.get(lcro).Opportunity__c; opp.PCLLostBrands__c=''; opp.Agencies__c='';    //Id ,品牌,经销商
            opp.Id = String.isNotBlank(opp.Id) ? opp.Id : arrMap.get(lcro).Opportunity__c;
            opp.PCLLostBrands__c = String.isNotBlank(opp.PCLLostBrands__c) ? opp.PCLLostBrands__c : '';
            opp.Agencies__c = String.isNotBlank(opp.Agencies__c) ? opp.Agencies__c : '';
            System.debug('opp: ' + opp);
            // 20230411 多失单报告合并,取出待合并的询价 end
            // for产品
            for (PCLLostProduct__c lcr : lcrList) {
                if (opp.Id==lcr.Opportunity__c) {
force-app/main/default/classes/TenderInformationHandler.cls
@@ -40,6 +40,7 @@
    }
    protected override void beforeUpdate() {
        SetIsReactionOpp(); //lt DB202304062844 20230515 项目终止流程开发 add
        //反逻辑删除 fxk
        changeRelateOppDate();
        updateTenDel();
@@ -81,14 +82,16 @@
        List<String> oppIds = new List<String>();//询价
        // 获得要更新的询价
        for (Tender_information__c record: newList) {
           if ( ( ('3-5:中标通知'.equals((oldMap.get(record.Id).subInfoType__c)) || '3-6:合同公告'.equals((oldMap.get(record.Id).subInfoType__c)) ) && ('3-1:废标公告'.equals(record.subInfoType__c)  || '3-2:流标公告'.equals(record.subInfoType__c) )) || (!'3:结果'.equals(record.InfoType__c) && '3:结果'.equals((oldMap.get(record.Id).InfoType__c)))) {
            //lt 20230425 招标终止 add  || ('批准'.equals(record.TerminateApprovalStatus__c) && !'批准'.equals((oldMap.get(record.Id).TerminateApprovalStatus__c)))
           if ( ( ('3-5:中标通知'.equals((oldMap.get(record.Id).subInfoType__c)) || '3-6:合同公告'.equals((oldMap.get(record.Id).subInfoType__c)) ) && ('3-1:废标公告'.equals(record.subInfoType__c)  || '3-2:流标公告'.equals(record.subInfoType__c) )) || (!'3:结果'.equals(record.InfoType__c) && '3:结果'.equals((oldMap.get(record.Id).InfoType__c))) || ('批准'.equals(record.TerminateApprovalStatus__c) && !'批准'.equals((oldMap.get(record.Id).TerminateApprovalStatus__c)))) {
                Tenids.add(record.id);
            }
        }
        Map<String,String> InfoTypeMap = new Map<String,String>(); //判断是否是因为中标修改得
        Map<String,String> TerminationStateMap = new Map<String,String>(); //lt 20230425 招标终止 add
        if(null!=Tenids && Tenids.size()>0){
            List<Tender_Opportunity_Link__c> TenOppLinkList = [select id, Tender_information__c,Tender_information__r.InfoType__c, Opportunity__c from Tender_Opportunity_Link__c where Tender_information__c in :Tenids];
            //lt 20230425 招标终止 add Tender_information__r.TerminateApprovalStatus__c,
            List<Tender_Opportunity_Link__c> TenOppLinkList = [select id, Tender_information__c,Tender_information__r.InfoType__c, Tender_information__r.TerminateApprovalStatus__c, Opportunity__c from Tender_Opportunity_Link__c where Tender_information__c in :Tenids];
            if(null!=TenOppLinkList && TenOppLinkList.size()>0){
                for(Tender_Opportunity_Link__c topl :TenOppLinkList){
                    String oppid =String.valueOf(topl.Opportunity__c);
@@ -97,52 +100,105 @@
                    if (!oppIds.contains(topl.Opportunity__c)) {
                        oppIds.add(topl.Opportunity__c);
                    }
                    if(!'3:结果'.equals(topl.Tender_information__r.InfoType__c)){
                    //lt DB202304062844 20230515 项目终止流程开发 update if(!'3:结果'.equals(topl.Tender_information__r.InfoType__c)) --- if(!'3:结果'.equals(NewMap.get(topl.Tender_information__c).InfoType__c))
                    if(!'3:结果'.equals(NewMap.get(topl.Tender_information__c).InfoType__c)){
                       InfoTypeMap.put(topl.Opportunity__c,topl.Tender_information__c); 
                    }   
                    //lt 20230425 招标终止 start
                    System.debug('---lt123---topl.Tender_information__r.TerminateApprovalStatus__c:'+topl.Tender_information__r.TerminateApprovalStatus__c);
                    if('批准'.equals(newMap.get(topl.Tender_information__c).TerminateApprovalStatus__c)){
                        TerminationStateMap.put(topl.Opportunity__c,topl.Tender_information__c);
                     }
                    //lt 20230425 招标终止 end
                }
            }
        }
        if (null!=oppTens && oppTens.size()>0) {
            //20221208 you DB202211594688 有确认任务的询价不清
          List<Opportunity> opportunities = [select id, Bidding_Project_Name_Bid__c, Opp_Order__c from Opportunity where id in :oppIds];
           List<task__c> taskList = [select id,taskStatus__c,RecordType.Name,Tender_information_Task__c,OpportunityId__c from task__c where ((RecordType.Name ='失单报告任务' and OpportunityId__c in:oppIds) or (RecordType.Name ='中标结果确认' and Opp_Tender__c in :oppTens)) and taskStatus__c <> '03 完成'];
            List<Opportunity> opportunities = [select id, Bidding_Project_Name_Bid__c, Opp_Order__c,ConfirmationofAward__c from Opportunity where id in :oppIds];
            //lt 20230425 招标终止 add Tender_information_Task__r.TerminateApprovalStatus__c   20230510 add and taskStatus__c <> '04 取消'
            //lt DB202304062844 20230515 项目终止流程开发 update  taskStatus__c <> '03 完成' and taskStatus__c <> '04 取消'  ---  taskStatus__c = '02 接受'
            List<task__c> taskList = [select id,taskStatus__c,RecordType.Name,Tender_information_Task__c,
                                            OpportunityId__c,Tender_information_Task__r.TerminateApprovalStatus__c
                                    from task__c
                                    where ((RecordType.Name ='失单报告任务' and OpportunityId__c in:oppIds)
                                    or (RecordType.Name ='中标结果确认' and Opp_Tender__c in :oppTens))
                                    and taskStatus__c = '02 接受'];
            for(task__c tsk : taskList){
                if(tsk.RecordType.Name =='失单报告任务' && oppIds.contains(tsk.OpportunityId__c) && tsk.taskStatus__c !='03 完成'){
                System.debug('---lt123---TerminationStateMap:'+TerminationStateMap);
                System.debug('---lt123---tsk.Tender_information_Task__r.TerminateApprovalStatus__c:'+tsk.Tender_information_Task__r.TerminateApprovalStatus__c);
                //lt DB202304062844 20230515 项目终止流程开发 update !='03 完成' --- == '02 接受'
                if(tsk.RecordType.Name =='失单报告任务' && oppIds.contains(tsk.OpportunityId__c) && tsk.taskStatus__c == '02 接受'){
                  //不做操作
                }else{
                    tsk.taskStatus__c = '04 取消';
                    tsk.cancelDate__c = date.today();
                    if(null!=InfoTypeMap && InfoTypeMap.containsKey(tsk.OpportunityId__c)){
                       tsk.cancelReasonSelect__c = '修改项目阶段';
                    }else{
                    }
                    //lt 20230425 招标终止 start
                    else if(null!=TerminationStateMap && TerminationStateMap.containsKey(tsk.OpportunityId__c)){
                        tsk.cancelReasonSelect__c = '项目终止';
                    }
                    //lt 20230425 招标终止 end
                    else{
                       tsk.cancelReasonSelect__c = '流标/废标'; 
                    }
                }
            }
             update taskList;
            if(taskList.size() > 0){
                for (task__c tlink : taskList) {
                    for (Opportunity opp : opportunities) {
                        if (opp.Id == tlink.OpportunityId__c) {
                            if(tlink.RecordType.Name =='失单报告任务' && tlink.taskStatus__c !='03 完成'){
                              //不做操作
                            }else{
                               //20220718 you 询价任务 start
                                opp.ConfirmationofAward__c = null;
                                opp.Task_createTime__c = null;
                                opp.ConfirmationofAward_createTime__c =null;
                                opp.LostTask_comfirmTime__c =null;
                                opp.Is_ConfirmationofAward__c =null;
                                opp.LostTask_createTime__c =null;
                                //opp.Closing_Bid_Date__c = null;
                                //20220718 you 询价任务 end
                            }
                       }
            update taskList;
            //lt DB202304062844 20230515 项目终止流程开发  start
            // if(taskList.size() > 0){
            if(opportunities.size() > 0){
                for (Opportunity opp : opportunities) {
                    Boolean upd_flg = null!=TerminationStateMap && TerminationStateMap.containsKey(opp.Id) && opp.ConfirmationofAward__c == '竞争对手中标' ? false : true;
                    if (!upd_flg) {
                        continue;
                    }
                    for (task__c tlink : taskList) {
                        if (opp.Id == tlink.OpportunityId__c) {
                            //lt DB202304062844 20230515 项目终止流程开发 update !='03 完成' --- == '02 接受'
                            if(tlink.RecordType.Name =='失单报告任务' && tlink.taskStatus__c == '02 接受'){
                                upd_flg = false;
                                break;
                              //不做操作
                            // }else{
                            //    //20220718 you 询价任务 start
                            //     opp.ConfirmationofAward__c = null;
                            //     opp.Task_createTime__c = null;
                            //     opp.ConfirmationofAward_createTime__c =null;
                            //     opp.LostTask_comfirmTime__c =null;
                            //     opp.Is_ConfirmationofAward__c =null;
                            //     opp.LostTask_createTime__c =null;
                            //     //lt DB202304062844 20230515 项目终止流程开发 start
                            //     if(tlink.Tender_information_Task__r.TerminateApprovalStatus__c == '批准' && opp.ConfirmationofAward__c == 'OLY中标'){
                            //         opp.Closing_Bid_Date__c = null;
                            //     }
                            //     //lt DB202304062844 20230515 项目终止流程开发  end
                            //     //opp.Closing_Bid_Date__c = null;
                            //     //20220718 you 询价任务 end
                            }
                        }
                    }
                    if (upd_flg) {
                        //lt DB202304062844 20230515 项目终止流程开发 start
                        if(null!=TerminationStateMap && TerminationStateMap.containsKey(opp.Id) && opp.ConfirmationofAward__c == 'OLY中标'){
                            opp.Closing_Bid_Date__c = null;
                        }
                        //lt DB202304062844 20230515 项目终止流程开发 end
                        opp.ConfirmationofAward__c = null;
                        opp.Task_createTime__c = null;
                        opp.ConfirmationofAward_createTime__c =null;
                        opp.LostTask_comfirmTime__c =null;
                        opp.Is_ConfirmationofAward__c =null;
                        opp.LostTask_createTime__c =null;
                    }
                }
            } 
            //lt DB202304062844 20230515 项目终止流程开发 end
            StaticParameter.EscapeOppandStaTrigger = true; //lt DB202304062844 20230515 项目终止流程开发 跳过询价trigger start
            update opportunities;   
            StaticParameter.EscapeOppandStaTrigger = false; //lt DB202304062844 20230515 项目终止流程开发 end
        }
    }    
    //20220718 you 询价任务 end
@@ -1337,4 +1393,16 @@
        }
    }
    **/
    //lt DB202304062844 20230515 项目终止流程开发 start  subInfoType__c
    //如果项目阶段发生变化 或者阶段补充说明发生变化 或者终止审批发生变化且审批通过 把招标项目上的IsReactionOpp__c设置为true
    public void SetIsReactionOpp() {
        for(Tender_information__c newTen : newList){
            Tender_information__c oldTen = oldMap.get(newTen.Id);
            if(newTen.InfoType__c != oldTen.InfoType__c || newTen.subInfoType__c != oldTen.subInfoType__c || (newTen.TerminateApprovalStatus__c != oldTen.TerminateApprovalStatus__c && newTen.TerminateApprovalStatus__c == '批准')){
                newTen.IsReactionOpp__c = true;
            }
        }
    }
    //lt DB202304062844 20230515 项目终止流程开发 end
}
force-app/main/default/classes/TenderOpportunityLinkHandler.cls
@@ -10,12 +10,13 @@
    this.newList = (List<Tender_Opportunity_Link__c>) Trigger.new;
    this.oldList = (List<Tender_Opportunity_Link__c>) Trigger.old;
}
protected override void afterInsert() {
    // 判断是否跳过
    updateTerminateTender(this.newList);  //lt 20230419 项目终止流程开发 add
    if (!StaticParameter.EscapeTOLinkTrigger) {
        updateTender(this.newList);
        updateOppotunityByInsert(this.newList);
        updateOppotunityByInsert(this.newList);
    }
}
@@ -43,6 +44,48 @@
    }
}
//lt 20230419 项目终止流程开发 终止申请状态清除 add
//项目终止流程开发 -- 清除招标项目终止申请的信息,项目重启标识打勾
public void updateTerminateTender(List<Tender_Opportunity_Link__c> records){
    if (records != null && records.size() > 0){
        List<String> tenders = new List<String>();
        // 获得要更新的招标项目
        for (Tender_Opportunity_Link__c record: records) {
            if (!tenders.contains(record.Tender_information__c)) {
                tenders.add(record.Tender_information__c);
            }
        }
        List<Tender_information__c> UpdateTenders = new List<Tender_information__c>();
        if (tenders.size() > 0){
            List<Tender_information__c> tenderList = [SELECT id, status__c, TerminateReason__c, IsTerminate__c,
                                                             TerminateApprovalStatus__c, TerminateApprovalTime__c,
                                                             ProjectRestartFLG__c,subInfoType__c
                                                      FROM Tender_information__c
                                                      WHERE id in :tenders];
            if(tenderList.size() > 0){
                for (Tender_information__c tender : tenderList){
                    //if(tender.status__c == '09.终止' && tender.TerminateReason__c != '经销商原因' && tender.subInfoType__c != '3-1:废标公告' && tender.subInfoType__c != '3-2:流标公告')
                    if(tender.status__c == '09.终止'){
                        tender.ProjectRestartFLG__c = true;
                        tender.IsTerminate__c = null;
                        tender.TerminateApprovalTime__c = null;
                        tender.TerminateApprovalStatus__c = null;
                        UpdateTenders.add(tender);
                    }
                }
            }
        }
        if(UpdateTenders.size() > 0){
            update UpdateTenders;
        }
    }
}
// 更新招标信息
public void updateTender(List<Tender_Opportunity_Link__c> records) {
    if (records != null && records.size() > 0) {
force-app/main/default/classes/TenderResultConfirmTaskBatch.cls
@@ -26,7 +26,8 @@
                     + 'Opportunity__r.ConfirmationofAward_createTime__c ' 
                     + 'FROM Tender_Opportunity_Link__c '
                     + 'WHERE Tender_information__r.InfoType__c = \'3:结果\' ' 
                     + 'AND (Tender_information__r.subInfoType__c = \'3-5:中标通知\' OR Tender_information__r.subInfoType__c = \'3-6:合同公告\') ';
                     + 'AND (Tender_information__r.subInfoType__c = \'3-5:中标通知\' OR Tender_information__r.subInfoType__c = \'3-6:合同公告\') '
                     + 'AND Opportunity__r.ConfirmationofAward__c = null AND Tender_information__r.TerminateApprovalStatus__c != \'批准\' ';   //lt DB202304062844 20230515 项目终止流程开发 add
                     //+ 'AND Tender_information__r.RecordTypeId = \'01210000000VLUI\' ';
                     
        //20220715 you 招标任务 start
force-app/main/default/classes/TerminateController.cls
New file
@@ -0,0 +1,198 @@
public  with sharing    class TerminateController {
    public TerminateController() {
    }
    //根据ID查询  招投标项目
    @AuraEnabled
    public  static string GetInspectById(String Id){
        QueryWrapper query = new QueryWrapper(Tender_information__c.SObjectType);
        query.eq('Id', Id);
        List<Tender_information__c> arrays = DataBasePlus.listPlus(query);
        return JSON.serialize(arrays);
    }
    @AuraEnabled
    public static Boolean cannotModifyIsRelateProject(String Id){
        Boolean cannotModify = false;
        String profileIds = System.Label.Tender_IsnotRelated_ModifyDisable;
        System.debug('---lt123简档Id---'+UserInfo.getProfileId());
        // 判断当前用户简档
        if (profileIds.contains(UserInfo.getProfileId())) {
            // 获取招标项目 判断相关性
            Tender_information__c tender = [select Id, IsRelateProject__c from Tender_information__c where Id = :Id];
            if (tender != null && '是'.equals(tender.IsRelateProject__c)) {
                cannotModify = true;
            }
        }
        return cannotModify;
    }
     //招投标项目列表字段 irrelevantReasons__c 所有的值
    @AuraEnabled
    public  static string GetIrrelevantReasons(){
      String JsonData = CommonUtils.GetSelectedValues( Tender_information__c.irrelevantReasons__c.getDescribe());
      return JsonData;
    }
     //招投标项目列表字段 TerminateReason__c 所有的值
    @AuraEnabled
    public  static string GetIrresponsibleReason(){
      String JsonData = CommonUtils.GetSelectedValues( Tender_information__c.TerminateReason__c.getDescribe());
      return JsonData;
    }
 //20220913 you SWAG-CJ3DS5 start
      //招投标项目列表字段 TerminateReason__c 所有的值
    @AuraEnabled
    public  static string GetproInvolvedManual(){
      String JsonData = CommonUtils.GetSelectedValues( Tender_information__c.proInvolvedManual__c.getDescribe());
      return JsonData;
    }
//20220913 you SWAG-CJ3DS5 end
      // 产品类
      public class Information {
        public  String hospital;//关联医院
        public  String account;// 关联普通科室
        public  String department;//关联医院
    }
    // 查询用户 根据父ID的值
    @AuraEnabled
    public  static string  GetIsPrentIdArr(String Id){
        return CommonUtils.GetAccountPrentID(Id);
    }
    //保存数据  JSONData 是 招投标项目 对象的 json格式的值
    @AuraEnabled
    public  static string  SaveData(String JsonData,String Id,String checkboxValue){
        try{
            Tender_information__c temp = (Tender_information__c)JSON.deserialize(JsonData,Tender_information__c.class);
            System.debug('temp=='+temp);
            StaticParameter.EscapeOtherUpdateTenOwner = false;
            update temp;
            StaticParameter.EscapeOtherUpdateTenOwner = true;
            //String assvale=AssignValuesToOwner(Id,checkboxValue);
        }catch(Exception ex)
        {
           return  ex.getMessage();
        }
        return  '成功';
    }
    //保存 应标数据 JSONData 是 招投标项目 对象的 json格式的值
     @AuraEnabled
    public  static String SaveDataYB(String JsonData){
        try{
            Tender_information__c temp = (Tender_information__c)JSON.deserialize(JsonData,Tender_information__c.class);
          //if (temp.IsTerminate__c == '否') {
                temp.TerminateApprovalStatus__c = '草案中';
                temp.ownerid = UserInfo.getUserId();
            //}else{
            //    temp.TerminateApprovalStatus__c = null;
            //    temp.irresponsibleReasonOther__c = null;
            //    temp.TerminateReason__c = null;
            //    temp.irresponseApplyTime__c = null;
            //    temp.TerminateExtraContent__c = null;
            //}
            update temp;
        }catch(Exception ex)
        {
            return  ex.getMessage();
        }
        return  '成功';
    }
    //提交审核 应标数据 JSONData 是 招投标项目 对象的 json格式的值
    @AuraEnabled
    public  static String ChangeDataYB(String JsonData){
        try{
            Tender_information__c temp = (Tender_information__c)JSON.deserialize(JsonData,Tender_information__c.class);
            if (temp.IsTerminate__c == '是') {
                temp.TerminateApprovalStatus__c = '填写完毕';
                temp.ownerid = UserInfo.getUserId();
            }
            update temp;
        }catch(Exception ex)
        {
            return  ex.getMessage();
        }
        return  '成功';
    }
    //查询战略科室
    @AuraEnabled
    public  static String SearchZLKS(String content,String[] ParentId){
        String jsonData = CommonUtils.GetZLKS(content,ParentId);
        return jsonData;
    }
    //查询医院
    @AuraEnabled
    public  static String SearchYY(String content){
        String jsonData = CommonUtils.GetYY(content);
        return jsonData;
    }
    //查询父类
    @AuraEnabled
    public  static String SearchParent(String Id){
        String jsonData = CommonUtils.GetParent(Id);
        return jsonData;
    }
    //查询医院下的科室
    @AuraEnabled
    public  static String SearchYYChilders(String content,String ParentId){
    String jsonData = CommonUtils.GetYYChilders(content,ParentId);
    return jsonData;
    }
     //根据id查询医院
     @AuraEnabled
     public  static String SearchAccountById(String Id){
        QueryWrapper query = new QueryWrapper(account.SObjectType);
        query.eq('Id',Id);
        List<account> arraysTemp = DataBasePlus.listPlus(query);
        return JSON.serialize(arraysTemp);
     }
    //根据id查询用户
    @AuraEnabled
    public  static String SearchUserById(String Id){
        QueryWrapper query = new QueryWrapper(user.SObjectType);
        query.eq('Id',Id);
        List<user> arraysTemp = DataBasePlus.listPlus(query);
        return JSON.serialize(arraysTemp);
    }
    //判断当前登录用户 是否是 所有人
    @AuraEnabled
    public  static String CheckOwner(String Id){
        String OwnerId = UserInfo.getUserId();
        String sql = 'select Id, owner.Id ,Name from Tender_information__c where  Id = :Id ';
        List<Tender_information__c> arrays = Database.query(sql);
        if(UserInfo.getProfileId() == System.Label.ProfileId_SystemAdmin)
        {
            return '1'+ '==' + '1';
        }
        if(arrays.size()<1)
        {
            return  '2'+ '==' + '1';
        }
        return OwnerId + '==' + arrays[0].owner.Id;
    }
}
force-app/main/default/classes/TerminateControllerTest.cls
New file
@@ -0,0 +1,113 @@
@isTest
private class TerminateControllerTest {
    static testMethod void testMethod1() {
        //创建数据
        //招投标项目
        //创建招投标项目
        TerminateController a=new TerminateController();
        Tender_information__c Ten = new Tender_information__c();
        Tender_information__c Ten2 = new Tender_information__c();
        Ten.Name = '123456';
        Ten.ProjectId__c = '38_99df2844cf784982acdc61d00d7a7dbb';
        Ten.IsRelateProject__c  = '是';
        insert Ten;
        Ten2=Ten;
        Address_Level__c al = new Address_Level__c();
        al.Name = '東京';
        al.Level1_Code__c = 'CN-99';
        al.Level1_Sys_No__c = '999999';
        insert al;
        // 市
        Address_Level2__c al2 = new Address_Level2__c();
        al2.Level1_Code__c = 'CN-99';
        al2.Level1_Sys_No__c = '999999';
        al2.Level1_Name__c = '東京';
        al2.Name = '渋谷区';
        al2.Level2_Code__c = 'CN-9999';
        al2.Level2_Sys_No__c = '9999999';
        al2.Address_Level__c = al.id;
        insert al2;
        // 病院を作る
        Account hospital = new Account();
        hospital.recordtypeId = [Select Id FROM RecordType WHERE IsActive = true and SobjectType = 'Account' and DeveloperName = 'HP'].id;
        hospital.Name = 'test hospital';
        hospital.Is_Active__c = '有効';
        hospital.Attribute_Type__c = '卫生部';
        hospital.Speciality_Type__c = '综合医院';
        hospital.Grade__c = '一级';
        hospital.OCM_Category__c = 'SLTV';
        hospital.Is_Medical__c = '医疗机构';
        hospital.State_Master__c = al.id;
        hospital.City_Master__c = al2.id;
        hospital.Town__c = '东京';
        insert hospital;
        // 戦略科室を得る
        Account[] strategicDep = [SELECT ID, Name FROM Account WHERE parentId = :hospital.Id AND recordType.DeveloperName = 'Department_Class_OTH'];
        // 診療科を作る
        Account dep = new Account();
        dep.recordtypeId = [Select Id FROM RecordType WHERE IsActive = true and SobjectType = 'Account' and DeveloperName = 'Department_OTH'].id;
        dep.Name = 'test dep';
        dep.AgentCode_Ext__c = '9999998';
        dep.ParentId = strategicDep[0].Id;
        dep.Department_Class__c = strategicDep[0].Id;
        dep.Hospital__c = hospital.Id;
        insert dep;
        String[] ids = new String[10];
        // ids.Add('0011000000V97G7AAJ');
        ids.Add(hospital.Id);
        //根据ID查询  招投标项目
        TerminateController.GetInspectById(Ten.Id);
        TerminateController.cannotModifyIsRelateProject(Ten.Id);
         //招投标项目列表字段 irrelevantReasons__c 所有的值
        TerminateController.GetIrrelevantReasons();
         //招投标项目列表字段 irresponsibleReason__c 所有的值
        TerminateController.GetIrresponsibleReason();
        // 查询用户 根据父ID的值
        TerminateController.GetIsPrentIdArr(hospital.Id);
        //保存数据  JSONData 是 招投标项目 对象的 json格式的值
        String JSONData =  JSON.serialize(Ten);
        String checkboxValue = '01210000000QemLAAS;01210000000QezZAAS';
        TerminateController.SaveData(JSONData,Ten.Id,checkboxValue);
        TerminateController.SaveData('0',Ten.Id,checkboxValue);
        //保存 应标数据 JSONData 是 招投标项目 对象的 json格式的值
        ten.IsRelateProject__c = '是';
        JSONData =  JSON.serialize(Ten);
        Ten2.IsRelateProject__c = '否';
        String JSONData2 =  JSON.serialize(Ten2);
        TerminateController.SaveDataYB(JSONData);
        TerminateController.SaveDataYB(JSONData2);
        TerminateController.SaveDataYB('0');
        //提交审核 应标数据 JSONData 是 招投标项目 对象的 json格式的值
        TerminateController.ChangeDataYB(JSONData);
        JSONData =  JSON.serialize(Ten);
        TerminateController.ChangeDataYB(JSONData);
        //查询战略科室
        TerminateController.SearchZLKS('test',ids);
        //查询医院
        TerminateController.SearchYY('test');
        //查询普通科室
        // TerminateController.SearchPTKS('test','');
        //查询普通科室 有医院限制的
        // TerminateController.SearchPTKSByYYParent('test',hospital.Id);
        //查询父类
        TerminateController.SearchParent(hospital.Id);
        //查询医院下的科室
        TerminateController.SearchYYChilders('','');
        //根据id查询
        TerminateController.SearchAccountById(hospital.Id);
        // TerminateController.SearchYH('123',ids);
        TerminateController.SearchUserById('0011000000V97G7AAJ');
        TerminateController.CheckOwner(Ten.Id);
        TerminateController.GetproInvolvedManual();
    }
}
force-app/main/default/pages/Terminate.page
New file
@@ -0,0 +1,25 @@
<apex:page showHeader="false" sidebar="false" id="yb" title="项目终止" lightningStylesheets="true">
    <apex:includeLightning />
    <div style="width:100%;height:100%;" id="TerminateAPP" />
    <script>
        $Lightning.use("c:TerminateAPP", function () {
            $Lightning.createComponent("c:isTerminate",
                {},
                "TerminateAPP",
                function (cmp) {
                    console.log('Component created, do something cool here');
                });
        });
        var interval = setInterval(()=>{
            var hrefStr = window.location.href;
            if (hrefStr.indexOf("Refresh") != -1) {
                var arr = hrefStr.split("==");
                window.opener.parent.location.href = "/"+arr[1];
                top.window.close();
                clearInterval(interval);
            }
        },1000);
    </script>
</apex:page>