liangxiaozhen
2023-08-06 8d9fdd2c68656e04ea4115e994f20051b2358c90
潜在客户lwc组件
6个文件已添加
453 ■■■■■ 已修改文件
force-app/main/default/classes/StartTradingController2.cls 321 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/StartTradingController2.cls-meta.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexStartTrading/lexStartTrading.css 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexStartTrading/lexStartTrading.html 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexStartTrading/lexStartTrading.js 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/lwc/lexStartTrading/lexStartTrading.js-meta.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
force-app/main/default/classes/StartTradingController2.cls
New file
@@ -0,0 +1,321 @@
public with sharing class StartTradingController2 {
    static final String RC_OPP = '引合';
    /**
     * 按钮初始化,通过LeadId获取判断需要使用的字段
     */
    @AuraEnabled
    public static Lead init(String Id){
        try {
            Lead leadobject = [select Id,
                                Hospital_Name__c,
                                Close_Forecasted_Date__c,
                                Opp_Name_Search__c,
                                begin_opp_name__c,
                                Status
                            from Lead
                            where Id = :Id];
            return leadobject;
        } catch (Exception ex) {
            throw new ControllerUtil.myException(ex.getMessage());
        }
    }
    /**
     * 开始询价
     */
    @AuraEnabled
    public static String start(String Id){
        try{
            // リード情報を取得
            Lead lead = [select id, SI_OppoLeadSec__c,owner_not_automatically_update__c, Hospital_Name__c, Contact_Name__c, Contact_Name__r.Name,
                    Opportunity_stage__c,Hospital_Name__r.RecordType.DeveloperName, Hospital_Name__r.Parent.RecordType.DeveloperName,
                    LastName, FirstName, LeadSource, Other_Society__c, Opp_Name__c, Purchase_Reason__c, Trade__c, Sales_Root__c, Campaign__c,
                    Close_Forecasted_Date__c, Competitor__c, Hospital_Budget__c, Promise_Class__c, Dicision_Maker__c, Purchase_Type__c,
                    Sales_Method__c, Fund_Basis__c, OwnerId, Wholesale_Price__c, Lead_No__c,Inquiry_Num__c,CreatedDate,CreatedById,
                    Tender_information__c, Agency_Opportunity__c, SI_PromoteInquiry__c
                    ,    Contact_Name__r.AccountId //2022-6-20 yjk 增加联系人的科室查询
                    ,ET_Check__c //SWAG-CKDATG fy 【委托】【OBSAP-报价委托】报价委托项目改善1
                    from Lead where id =: Id];
            Boolean SI_Flg = lead.SI_PromoteInquiry__c;
            Boolean isAgencyOpp = false;
            // 診療科選択リストの取得(条件:病院=リード情報の病院名称)
            List<Account> departmentList = new List<Account>();
            if (lead.Hospital_Name__r.RecordType.DeveloperName == 'HP') {
                departmentList = [select id, name from Account where Hospital__c =: lead.Hospital_Name__c];
            }
            else if (lead.Hospital_Name__r.Parent.RecordType.DeveloperName == 'HP') {
                departmentList = [select id, name from Account where ParentId =: lead.Hospital_Name__c];
            }
            /*
            // xudan 20140730 販売店を選択する場合、下の契約一覧を出す
            // TODO 契約状態を見る?
            else if (this.lead.Hospital_Name__r.RecordType.DeveloperName == 'Agency') {
            departmentList = [select id, name from Account where ParentId =: this.lead.Hospital_Name__c];
            isAgencyOpp = true;
            }
            */
            // xudan 20140730 契約を選択する場合、そのまま出す、フラグ設定
            else if (lead.Hospital_Name__r.Parent.RecordType.DeveloperName == 'Agency') {
                departmentList = [select id, name from Account where Id =: lead.Hospital_Name__c];
                isAgencyOpp = true;
            }
            else {
                departmentList = [select id, name from Account where Id =: lead.Hospital_Name__c];
            }
            // 診療科選択リストの設定
            List<SelectOption> depList = new List<SelectOption>();
            // 2022-04-13 ssm 紧急应对 科室和客户人员必填 start
            // this.depList.add(new SelectOption(NONE, NONE));
            // 2022-04-13 ssm 紧急应对 科室和客户人员必填 end
            Set<ID> depIdList = new Set<ID>();
            for(Account d : departmentList){
                depIdList.add(d.id);
                depList.add(new SelectOption(String.valueOf(d.get('id')),String.valueOf(d.get('name'))));
            }
            // 2022-04-13 ssm 紧急应对 科室和客户人员必填 start
            // this.sltDep = NONE;
            String sltDep = lead.Contact_Name__r.AccountId;  //  2022-6-20 yjk 改为从联系人的科室赋值   原逻辑:this.lead.Hospital_Name__c;
            String sltCon = lead.Contact_Name__c;
            // 2022-04-13 ssm 紧急应对 科室和客户人员必填 end
            // 担当者リスト(初期設定)
            Map<String,List<SelectOption>> conMap = new Map<String,List<SelectOption>>();
            List<SelectOption> sltOptNasi = new List<SelectOption>();
            // リード所有者の取得
            User leadOnwer = [select Province_Text__c from User where Id = :lead.OwnerId];
            String oppID = null;
            if (String.isBlank(sltDep)) {
                return null;
            }
            Account dept = null;
            if(String.isNotBlank(lead.Contact_Name__c)){
                dept = getDepartment(lead.Contact_Name__r.AccountId);
                updateContact(lead.Contact_Name__c, dept);
            }
            return updateOpportunity(getDepartment(lead.Hospital_Name__c), lead, SI_Flg, isAgencyOpp, leadOnwer);
        } catch(Exception ex) {
            throw new ControllerUtil.myException(ex.getMessage());
        }
    }
    /**
     *  選択した診療科を取得
     */
    public static Account getDepartment(String depId){
        List<Account> deptList = [select Id, Hospital__c, Department_Class__c, Department_Class_Wd__c from Account where id =: depId];
        // List<Account> deptList = [select Id, Hospital__c, Department_Class__c from Account where id =: this.sltDep];
        Account dept = deptList[0];
        return dept;
    }
    /** 取引先責任者の更新
     *  @param conID 取引先責任者ID
     *  @param dept  診療科
    */
    public static void updateContact(ID conID, Account dept){
        Contact cont = [select ID,Strategic_dept_Class__c from Contact where Id=:conID];
        cont.Strategic_dept_Class__c = dept.Department_Class__c;
        update cont;
    }
    /** 引合の更新
     *  @param dept 診療科
    */
    public static String updateOpportunity(Account dept, Lead lead, Boolean SI_Flg, Boolean isAgencyOpp, User leadOnwer){
        System.debug('dept:'+dept.Id + '|' + dept.Department_Class_Wd__c);
        //SWAG-CEY8GZ 20220620 lt update
        //Opportunity opp = [select ID, AccountId, Account.Department_Class_Wd__c, Opportunity_No__c, SAP_Province_CD__c, Opp_Number__c, Opp_Code__c from Opportunity where Id=:this.oppID];
        Opportunity opp = new Opportunity();
        opp.LeadSource = lead.LeadSource;
        opp.AccountId = dept.Id;
        //SWAG-CEY8GZ 20220620 lt update
        system.debug('cccccccccccccccccccc:'+opp.SAP_Province_CD__c);
        system.debug('cccccccccccccccccccc:'+opp.Opp_Number__c);
        system.debug('cccccccccccccccccccc:'+opp.Opp_Code__c);
        system.debug('cccccccccccccccccccc:'+opp.Opportunity_No__c);
        String Opptype = SI_Flg==true?'SI询价':RC_OPP;
        RecordType rect = [select id from RecordType where IsActive = true and SobjectType = 'Opportunity' and Name =: Opptype limit 1];
        opp.RecordTypeId = rect.id;
        // opp.Opportunity_Category__c = opp.Account.Department_Class_Wd__c;
        //SWAG-CKDATG fy 【委托】【OBSAP-报价委托】报价委托项目改善1 start
        // opp.Opportunity_Category__c = dept.Department_Class_Wd__c;
        opp.Opportunity_Category__c = lead.ET_Check__c ? 'ET' : dept.Department_Class_Wd__c;
        opp.Opp_order_Type__c = lead.ET_Check__c ? 'ET'  : null;
        //SWAG-CKDATG fy 【委托】【OBSAP-报价委托】报价委托项目改善1 end
        System.debug('this.lead.Hospital_Name__c:'+lead.Hospital_Name__c);
        System.debug('this.lead.LeadSource:'+lead.LeadSource);
        System.debug('this.lead.Other_Society__c:'+lead.Other_Society__c);
        System.debug('this.lead.Purchase_Reason__c:'+lead.Purchase_Reason__c);
        System.debug('this.lead.Trade__c:'+lead.Trade__c);
        System.debug('this.lead.Sales_Root__c:'+lead.Sales_Root__c);
        System.debug('this.lead.Close_Forecasted_Date__c:'+lead.Close_Forecasted_Date__c);
        System.debug('this.lead.Competitor__c:'+lead.Competitor__c);
        System.debug('this.lead.Hospital_Budget__c:'+lead.Hospital_Budget__c);
        System.debug('this.lead.Promise_Class__c:'+lead.Promise_Class__c);
        System.debug('this.lead.Dicision_Maker__c:'+lead.Dicision_Maker__c);
        System.debug('this.lead.Purchase_Type__c:'+lead.Purchase_Type__c);
        System.debug('this.lead.Sales_Method__c:'+lead.Sales_Method__c);
        System.debug('this.lead.Fund_Basis__c:'+lead.Fund_Basis__c);
        if(lead.Opp_Name__c != null && lead.Opp_Name__c != ''){
            opp.Name = lead.Opp_Name__c;
        }
        else{
            opp.Name = '*';
        }
        //20220412 SWAG-CBUB2W you start
        opp.Inquiry_Num__c = lead.Inquiry_Num__c;
        //20220412 SWAG-CBUB2W you end
        opp.From_Lead_TF__c = true;
        opp.Trade__c = (String.isBlank(lead.Trade__c)) ? '内貿' : lead.Trade__c;
        opp.StageName = '引合';
        opp.owner_not_automatically_update__c = lead.owner_not_automatically_update__c;
        opp.Lead_Num__c = lead.Lead_No__c;
        opp.Lead_CreateBy__c = lead.CreatedById;
        opp.Lead_CreateDate__c = lead.CreatedDate;
        opp.CurrencyIsoCode = 'CNY';
        opp.Purchase_Type__c = 'SI(手術室案件)';
        system.debug('dddddddddddddddddddddd:'+lead.owner_not_automatically_update__c);
        Integer year = date.today().year();
        Integer month = date.today().month();
        Date nextMonthEndDay = date.newInstance(year, month, 1);
        Date thisMonthEndDay = nextMonthEndDay.addMonths(1);
        thisMonthEndDay = thisMonthEndDay.addDays(-1);
        nextMonthEndDay = nextMonthEndDay.addMonths(2);
        nextMonthEndDay = nextMonthEndDay.addDays(-1);
        opp.Close_Forecasted_Date__c = lead.Close_Forecasted_Date__c;
        opp.Close_Forecasted_Date__c = opp.Close_Forecasted_Date__c == null ? thisMonthEndDay : opp.Close_Forecasted_Date__c;
        if (nextMonthEndDay > opp.Close_Forecasted_Date__c) {
            opp.CloseDate = nextMonthEndDay;
        } else {
            opp.CloseDate = opp.Close_Forecasted_Date__c.addDays(30);
        }
        // xudan 20140730 販売店から引合をConvertする場合、Hospital__cをAccountIdを同じにする
        if (isAgencyOpp) {
            opp.Hospital__c = opp.AccountId;
        } else {
            opp.Hospital__c = dept.Hospital__c;
            opp.Department_Class__c = dept.Department_Class__c;
        }
        //2021-07-08  mzy  SWAG-C4H99E 询价中的来源更改 start
        if('科室提案'.equals(lead.LeadSource) || 'OPD/SIS'.equals(lead.LeadSource)
            || '公共平台'.equals(lead.LeadSource)   //测试环境 加的  对应的是 医拓网
            || '电话'.equals(lead.LeadSource) || '医拓网'.equals(lead.LeadSource) ){
            opp.LeadSource = '直接拜访';
        }else {
            opp.LeadSource = lead.LeadSource;
        }
        //2021-07-08  mzy  SWAG-C4H99E 询价中的来源更改 end
        opp.Other_Society__c = lead.Other_Society__c;
        opp.Purchase_Reason__c = lead.Purchase_Reason__c;
        opp.Trade__c = (String.isBlank(lead.Trade__c)) ? '内貿' : lead.Trade__c;
        // 增加默认值
        opp.Sales_Root__c = String.isNotBlank(lead.Sales_Root__c) ? lead.Sales_Root__c : '販売店';
        if (lead.Competitor__c != null && lead.Competitor__c != '') {
            opp.Competitor__c = lead.Competitor__c;
        }
        if (lead.Opportunity_stage__c != null && lead.Opportunity_stage__c != '') {
            opp.Opportunity_stage__c = lead.Opportunity_stage__c;
        }
        opp.Hospital_Budget__c = lead.Hospital_Budget__c;
        // 增加默认值
        opp.Promise_Class__c = String.isNotBlank(lead.Promise_Class__c) ? lead.Promise_Class__c : '内貿';
        opp.Dicision_Maker__c = lead.Dicision_Maker__c;
        //**********************************************************************************
        opp.Purchase_Type__c = SI_Flg==true?'SI(手術室案件)':lead.Purchase_Type__c;
        opp.Opportunity_sub_owner__c = lead.SI_OppoLeadSec__c;
        //**********************************************************************************
        opp.Sales_Method__c = lead.Sales_Method__c;
        opp.Fund_Basis__c = lead.Fund_Basis__c;
        opp.SAP_Province__c = leadOnwer.Province_Text__c;
        opp.Owner_System__c = opp.OwnerId;
        if(lead.OwnerId != null ){
            opp.Ownerid = lead.OwnerId ;
        }
        opp.Wholesale_Price__c = lead.Wholesale_Price__c;
        List<Lead> leadcList = [Select (Select CampaignId From CampaignMembers order by CreatedDate desc) From Lead l where l.id =: lead.Id];
        for(Lead leadc : leadcList){
            List<CampaignMember> cmList = leadc.CampaignMembers;
            for (CampaignMember cm : cmList) {
                opp.CampaignId = cm.CampaignId;
                break;
            }
        }
        System.debug('opp.Hospital_Name__c:'+opp.Hospital__c);
        System.debug('dept12345:'+dept.Hospital__c);
        System.debug('opp.LeadSource:'+opp.LeadSource);
        System.debug('opp.Other_Society__c:'+opp.Other_Society__c);
        System.debug('opp.Purchase_Reason__c:'+opp.Purchase_Reason__c);
        System.debug('opp.Trade__c:'+opp.Trade__c);
        System.debug('opp.Sales_Root__c:'+opp.Sales_Root__c);
        System.debug('opp.Close_Forecasted_Date__c:'+opp.Close_Forecasted_Date__c);
        System.debug('opp.Competitor__c:'+opp.Competitor__c);
        System.debug('opp.Hospital_Budget__c:'+opp.Hospital_Budget__c);
        System.debug('opp.Promise_Class__c:'+opp.Promise_Class__c);
        System.debug('opp.Dicision_Maker__c:'+opp.Dicision_Maker__c);
        System.debug('opp.Purchase_Type__c:'+opp.Purchase_Type__c);
        System.debug('opp.Sales_Method__c:'+opp.Sales_Method__c);
        System.debug('opp.Fund_Basis__c:'+opp.Fund_Basis__c);
        System.debug('opp.SAP_Province__c:'+opp.SAP_Province__c);
        // 2022-04-15 OBSAP新增修改 start
        opp.CampaignId = lead.Campaign__c;
        System.debug('opp.CampaignId:'+opp.CampaignId);
        // 招标项目
        if (String.isNotBlank(lead.Tender_information__c)) {
            opp.Bidding_Project_Name_Bid__c = lead.Tender_information__c;
            //SWAG-CEY8GZ 20220620 lt update
            // 新建link
            // Tender_Opportunity_Link__c link = new Tender_Opportunity_Link__c();
            // link.Tender_information__c = this.lead.Tender_information__c;
            // link.Opportunity__c = opp.Id;
            // link.Tender_Opportunity_Uniq__c = String.valueOf(this.lead.Tender_information__c) + String.valueOf(opp.Id);
            // insert link;
            //SWAG-CEY8GZ 20220620 lt update
        }
        // 经销商询价
        // 2022-05-20 调整经销商询价的更新顺序 ssm start
        //SWAG-CEY8GZ 20220620 lt update
        // Agency_Opportunity__c ao = null;
        if (String.isNotBlank(lead.Agency_Opportunity__c)) {
            opp.Agency_Opportunity__c = lead.Agency_Opportunity__c;
            // 经销商询价绑定询价
            // ao = [select Id, Change_To_Opportunity__c from Agency_Opportunity__c where Id = :this.lead.Agency_Opportunity__c];
            // ao.Change_To_Opportunity__c = opp.Id;
        }
        // 2022-04-15 OBSAP新增修改 end
        //update opp;
        insert opp;
        lead.Status = System.Label.StateChanges;
        lead.begin_opp_name__c = opp.Id;
        lead.begin_opp_date__c = Date.today();
        update lead;
        //SWAG-CEY8GZ 20220620 lt update
        // 2022-05-20 调整经销商询价的更新顺序 ssm end
        // //SWAG-CF589P【委托】【P:OBSAP】报价委托相关新需求评估 fy start
        List<QuoteIrai__c> quoteir=[select id,Opportunity__c,Lead__c from QuoteIrai__c where Lead__c =:lead.Id];
        List<QuoteIrai__c> quoteirupdate = new List<QuoteIrai__c>();
        if(quoteir.size()>0){
            for(QuoteIrai__c quo : quoteir){
                if(quo.Opportunity__c==null||quo.Opportunity__c==''){
                    quo.Opportunity__c=opp.Id;
                    quoteirupdate.add(quo);
                }
            }
        }
        System.debug('leadId++'+lead.Id);
        System.debug('quoteir++'+quoteir);
        System.debug('quoteirupdate++'+quoteirupdate);
        if(quoteirupdate.size()>0){
            update quoteirupdate;
        }
        return opp.Id;
    }
}
force-app/main/default/classes/StartTradingController2.cls-meta.xml
New file
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>57.0</apiVersion>
    <status>Active</status>
</ApexClass>
force-app/main/default/lwc/lexStartTrading/lexStartTrading.css
New file
@@ -0,0 +1,11 @@
.StartTradingbtn{
    position: relative;
    display: inline-block;
    width: 80px;
    height: 80px;
    text-align: center;
}
.container .uiContainerManager{
    display : none !important;
}
force-app/main/default/lwc/lexStartTrading/lexStartTrading.html
New file
@@ -0,0 +1,5 @@
<template>
    <div class="StartTradingbtn" if:true={IsLoading}>
        <lightning-spinner alternative-text="Loading" size="medium"></lightning-spinner>
    </div>
</template>
force-app/main/default/lwc/lexStartTrading/lexStartTrading.js
New file
@@ -0,0 +1,100 @@
import { LightningElement,api, track, wire } from 'lwc';
import {CurrentPageReference} from 'lightning/navigation';
import { CloseActionScreenEvent } from 'lightning/actions';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';
import { NavigationMixin } from 'lightning/navigation';
import init  from '@salesforce/apex/StartTradingController2.init';
import start  from '@salesforce/apex/StartTradingController2.start';
export default class LexStartTrading extends LightningElement {
    @api recordId;
    IsLoading=true;
    Hospital_Name__c;
    Close_Forecasted_Date__c;
    Opp_Name_Search__c;
    begin_opp_name__c;
    Status;
    @wire(CurrentPageReference)
    getStateParameters(currentPageReference){
        console.log("进入页面");
        console.log(currentPageReference);
        if(currentPageReference){
            const urvalue=currentPageReference.state.recordId;
            if(urvalue){
                let str=`${urvalue}`;
                this.recordId=str;
            }
        }
    }
    connectedCallback(){
        init({Id:this.recordId}).then(result=>{
            console.log('init result==========',result);
            if(result!=null){
                // 给参数赋值
                this.Hospital_Name__c = result.Hospital_Name__c;
                this.Close_Forecasted_Date__c = result.Close_Forecasted_Date__c;
                this.Opp_Name_Search__c = result.Opp_Name_Search__c;
                this.begin_opp_name__c = result.begin_opp_name__c;
                this.Status = result.Status;
                // 执行判断
                this.InquiryJudgment();
            }
        });
        // .catch(err=>{
        //     console.log("init error:");
        //     console.log(err);
        // }).finally(()=>{});
    }
    InquiryJudgment(){
        console.log('InquiryJudgment check');
        let status_list = ['完毕','无需求','已有询价','確認済み','不要','开始询价'];
        let lead_status = this.Status;
        let that = this;
        if(this.Hospital_Name__c == ''){
            this.showToast('病院名称を設定してください','error');
        } else if (this.comparDate(this.Close_Forecasted_Date__c)) {
            this.showToast('预测OCSM签约日不能小于今天','error');
        } else if (this.Opp_Name_Search__c == '' || !this.begin_opp_name__c == '' || status_list.indexOf(lead_status) !== -1) {
            this.showToast('已存在转化的询价或不需要转化询价','error');
        } else{
            console.log('start at: ' + this.recordId);
            start({Id:this.recordId}).then(result=>{
                console.log('start result==========',result);
                if(result!=null){
                    this.showToast('已成功转化询价','success');
                    window.open('/lightning/r/Opportunity/'+result+'/view','_parent');
                    // this[NavigationMixin.GenerateUrl]({
                    //     type: "standard_recordPage",
                    //     attributes: {
                    //         recordId: result,
                    //         objectApiName:"Opportunity",
                    //         actionName:"edit"
                    //     }
                    // }).then(url => {
                    //     window.open(url,"_blank");
                    // });
                }
            });
            // .catch(err=>{
            //     console.log("start error:");
            //     console.log(err);
            // }).finally(()=>{});
        }
    }
    comparDate(dateValue) {
        return new Date().getTime() >= new Date(dateValue).getTime() + 3600 * 1000 * 24;
    }
    showToast(msg,type) {
        const event = new ShowToastEvent({
            title: '',
            message: msg,
            variant: type
        });
        this.IsLoading = false;
        this.dispatchEvent(event);
    }
}
force-app/main/default/lwc/lexStartTrading/lexStartTrading.js-meta.xml
New file
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
    <apiVersion>56.0</apiVersion>
    <isExposed>true</isExposed>
    <targets>
        <target>lightning__RecordPage</target>
        <target>lightning__AppPage</target>
        <target>lightning__HomePage</target>
        <target>lightning__RecordAction</target>
    </targets>
</LightningComponentBundle>