CRM公海客戶自動分配功能的實現

Roy155發表於2021-01-29

實現目標:

1、市場部新增的公海客戶,自動輪巡分配給銷售員

2、可設定銷售人員自動分配公海客戶的客戶數上限


準備工作:

1、在白碼低程式碼開發平臺準備銷售員資料表,並準備幾個銷售員資料。

必須欄位說明:

自動分配客戶上限:數字型別,用於限制自動分配公海客戶的客戶數。

已分配客戶數:數字型別,記錄已被自動分配的客戶數。

輪序序號:數字型別,連續自增數字,輪巡分配順序,公海客戶將按照此順序從小到大進行輪巡分配。

2、客戶資料表

必須欄位說明:

銷售歸屬人:關聯型別,關聯銷售員表,標記客戶分配銷售。


3、輪巡配置資料表,建立並維持一條資料。

欄位說明:

下一輪巡序號:數字型別,標記下次應該分配的銷售員,對應銷售員表的“輪序序號”欄位。

末端序號:數字型別,標記銷售員表最大的“輪巡序號”,當輪巡到該序號時,下一次從頭開始輪巡。


功能實現:

1、新增客戶公海資料。


2、獲取輪巡配置,因為只有1條配置資料,無需篩選即可獲取到配置資料。


3、根據輪巡序號獲取銷售員


4、實現輪巡

程式碼:

async function runProcess($model = model, $plugin = plugin, $params) {
    let customer = $params.customer;//建立的客戶
    let config = $params.config;//配置表
    let config_next = parseInt($params.config_next);//配置表-下一輪巡序號
    let config_last = parseInt($params.config_last);//配置表-末端序號
    let endIndex = parseInt($params.config_next);//終止輪巡的序號,標記是否輪巡完所有銷售員
 
    //查詢所有銷售員
    let salerList = await $plugin.data.queryData("6013af3b2f9dc17c88f09ab9");
    //map {index:saler} 可根據輪巡序號獲取相應的銷售員
    let salerByIndex = {};
    salerList.forEach(s => {
        salerByIndex[s["6013afd92f9dc17c88f09ac8"]] = s;
    });
    //銷售員
    let saler = salerByIndex[config_next];
    //開始輪巡
    do {
        max = parseInt(saler["6013af76fe80417c83c0da6b"]);//銷售員分配客戶上限
        count = parseInt(saler["6013afbecdfeee7c7b37d9bf"]);//銷售員已分配的客戶數
        //下一輪巡序號,如果當前輪巡序號為末端序號,則重新從序號1開始,否則自增到下一序號
        if (config_next == config_last) {
            config_next = 1;
        } else {
            config_next += 1;
        }
        //該銷售員未達到上限
        if (count < max) {
            //將客戶分配給銷售員
            $plugin.data.updateData("6013b2902f9dc17c88f09aef", customer._id, {
                "6013b2de53eddf7c7c0a4bb7": saler._id,
            });
            //銷售員已分配客戶數+1
            $plugin.data.updateData("6013af3b2f9dc17c88f09ab9", saler._id, {
                "6013afbecdfeee7c7b37d9bf": parseInt(saler["6013afbecdfeee7c7b37d9bf"]) + 1,
            });
            //更新配置表的下一輪巡序號
            $plugin.data.updateData("6013b493cdfeee7c7b37d9fd", config._id, {
                "6013b4a82f9dc17c88f09b19": config_next
            });
            break;//輪巡結束
        }
        //巡完所有銷售員,未找到可分配的銷售員,輪巡結束
        if (config_next == endIndex) {
            break;
        }
        //輪巡下一銷售員
        saler = salerByIndex[config_next];
    } while (true);
}

效果:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69981626/viewspace-2754599/,如需轉載,請註明出處,否則將追究法律責任。

相關文章