权重轮询算法,生成加权随机数nodejs

/**

* 获取最适合的客户的需求 负载均衡轮询

*/

async getBestCus_group(list) {

if (list.length > 0) {

 

// 1、cus_group_name 去重

let cus_hash=[];

for (let i = 0; i < list.length; i++) {

if(cus_hash.indexOf(list[i].cus_group_name) == -1){

cus_hash.push(list[i].cus_group_name);

}

}

console.log("去重cus_hash=="+cus_hash);

 

// 获取优先级权重

// const cus_priorityData = require('../../config/json_data/cus_priority.json');

const cus_priorityData = await this.groupService.getGroupList(this.app.config('industry'), false);

// console.log("cus_priorityData=="+JSON.stringify(cus_priorityData));

let cus_priorityRes = [];

for (let i = 0; i < cus_hash.length; i++) {

for(let item in cus_priorityData){

console.log("item=="+JSON.stringify(cus_priorityData[item]));

if(cus_priorityData[item].name == cus_hash[i]){

cus_priorityRes.push({"cus" :cus_priorityData[item].name, "priority": cus_priorityData[item].score || 0});

break;

}

}

}

 

console.log("获取优先级权重=="+JSON.stringify(cus_priorityRes));

 

// 2、选择最优客户 负载均衡轮询

let sum = 0;

let bestCus = 0;

 

for(let i = 0; i < cus_priorityRes.length; i++){

sum += cus_priorityRes[i].priority;

}

 

let rand = Math.random() * sum;

for (let i = 0; i < cus_priorityRes.length; i++) {

rand -= cus_priorityRes[i].priority;

if (rand <= 0) {

bestCus = cus_priorityRes[i].cus;

break;

}

}

if(bestCus == 0){

let maxi = cus_priorityRes[0];

for (let i = 0; i < cus_priorityRes.length; i++){

if (maxi.priority <= cus_priorityRes[i].priority){

maxi.cus = cus_priorityRes[i].cus;

}

}

bestCus = maxi.cus;

}

console.log("获取优先级bestCus=="+bestCus);

// 3、选择该客户对应需求

for (let i = 0; i < list.length; i++) {

if(list[i].cus_group_name == bestCus){

console.log("获取list[i]=="+JSON.stringify(list[i]));

return list[i];

}

}

}else{

return {};

}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值