Every time you register a new member, a customer service representative will be automatically assigned
There are 3 customer service staff in total (more customer service will be added in the future). How to deal with it?
The first new member, customer service 1
The second new member, customer service 2
The third new member, customer service 3
The fourth new member, customer service 1
...
I first query all customer service in the customer service table, and then update the customer service field in the newly registered member table.
How to make one-to-one correspondence between them now?
Every time you register a new member, a customer service representative will be automatically assigned
There are 3 customer service staff in total (more customer service will be added in the future). How to deal with it?
The first new member, customer service 1
The second new member, customer service 2
The third new member, customer service 3
The fourth new member, customer service 1
...
I first query all customer service in the customer service table, and then update the customer service field in the newly registered member table.
How to make one-to-one correspondence between them now?
Excuse me, do you want to consider the idle status of customer service
For example, customer service a b c
At this time, 3 people came and divided it with a b c
At this time, c has already helped handle his own affairs
At this time, a fourth person came and divided it with who
If this situation does not exist
<code>$number = file_get_contents("log.txt"); file_put_contents("log.txt", ($number +1)%3);</code>
Let’s do it with redis.
Use the List structure, first build the customer service list, when a new user comes in, RPOP a customer service at the end of the team, and then LPUSH this customer service to the head of the team
When adding a new customer service, if you want the sequence of serial numbers to remain unchanged, for example, it is currently 2 3 1, and the list after the newly added 4 will become 2 3 4 1, then you need to remove the queue and make a logical judgment. If not needed, just LPUSH directly to the head of the queue.
If you don’t use redis, just write the file. Each customer uses "rn"
. The rules for separated retrieval are the same as above
Thanks for the invitation, I simply wrote a function. Is this what you want?
<code><?php function distribution_cs($user_id,$cs_total=3){ if($user_id%$cs_total==0){ return $cs_total; } return $user_id%$cs_total; } echo distribution_cs(1).","; echo distribution_cs(2).","; echo distribution_cs(3).","; echo distribution_cs(4).","; echo distribution_cs(5).","; echo distribution_cs(6).","; echo distribution_cs(7).","; echo distribution_cs(8).","; echo distribution_cs(9).","; echo distribution_cs(10).","; echo distribution_cs(11).","; echo distribution_cs(12).","; echo distribution_cs(13).","; echo distribution_cs(14,4).","; echo distribution_cs(15,4).","; echo distribution_cs(16,4).","; echo distribution_cs(17,4).","; echo distribution_cs(18,4).","; echo distribution_cs(19,4).","; echo distribution_cs(20,4).","; echo distribution_cs(21,5).",";</code>
Output results
1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,4,1,2,3,4,1,
<code><?php class serviceFactory{ private $num; private $count = 0; function __construct($num){ $this->setNum($num); } function getService(){ if($this->count >= $this->num){ $this->count = 0; } $this->count ++; return $this->count; } function setNum($num){ $this->num = $num; } } $factory = new serviceFactory(3); echo $factory->getService(),","; echo $factory->getService(),","; echo $factory->getService(),","; echo $factory->getService(),","; echo $factory->getService(),","; echo $factory->getService(),","; echo $factory->getService(),","; echo $factory->getService(),","; echo $factory->getService(),","; $factory->setNum(4); echo $factory->getService(),","; echo $factory->getService(),","; echo $factory->getService(),","; echo $factory->getService(),","; echo $factory->getService(),",";</code>
A super simple hash algorithm is used, the number of customer service is n, the new registered user id is m, and then the assigned customer service is m % n + 1
I have written a similar one before, but it is not a customer service, so I won’t post the code here. I will talk about my personal approach:
The ultimate goal is to keep every customer service busy without keeping users waiting for a long time.
So, for a new user, assign him one:
<code>if ( 空闲状态的客服数 >= 0 ){ // 分配给最先进入空闲状态的那个客服 }else{ // 说明现在每个客服都有用户在咨询 // 并且可能某些客服下还有在排队等待的用户 获取每个客服 **当前咨询任务** 的开始时间 将这个用户分配给 当前资讯任务 的开始时间最早的 并且 后面排队人数最少的哪个客服 // 其实上面还有一个权重的问题,比如 A 客服 当前客户资讯任务开始时间比 B 早 2分钟,但是 A 后面排队的人数比 B 客服多 1个,这就要靠 权重值 来计算是分配给 A 还是 B。 } </code>
Personally, I think you can assign virtual customer service At the same time, it is easy to make every customer service busy.
I am also new to this knowledge. Please correct me if my answer is not good. Thank you