Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
nizhengjia888
cskefu
提交
4f509eb4
C
cskefu
项目概览
nizhengjia888
/
cskefu
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
cskefu
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
4f509eb4
编写于
8月 10, 2021
作者:
Chatopera 研发团队
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
https://github.com/chatopera/cskefu/issues/440
enhance agent filter
上级
b94e6814
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
62 addition
and
29 deletion
+62
-29
contact-center/app/src/main/java/com/chatopera/cc/acd/ACDPolicyService.java
.../src/main/java/com/chatopera/cc/acd/ACDPolicyService.java
+58
-27
contact-center/app/src/main/java/com/chatopera/cc/persistence/repository/UserRepository.java
...m/chatopera/cc/persistence/repository/UserRepository.java
+2
-0
contact-center/app/src/main/java/com/chatopera/cc/proxy/OnlineUserProxy.java
...src/main/java/com/chatopera/cc/proxy/OnlineUserProxy.java
+2
-2
未找到文件。
contact-center/app/src/main/java/com/chatopera/cc/acd/ACDPolicyService.java
浏览文件 @
4f509eb4
...
...
@@ -20,14 +20,8 @@ import com.chatopera.cc.basic.Constants;
import
com.chatopera.cc.basic.MainContext
;
import
com.chatopera.cc.basic.MainUtils
;
import
com.chatopera.cc.cache.Cache
;
import
com.chatopera.cc.model.AgentStatus
;
import
com.chatopera.cc.model.AgentUser
;
import
com.chatopera.cc.model.SNSAccount
;
import
com.chatopera.cc.model.SessionConfig
;
import
com.chatopera.cc.persistence.repository.AgentUserRepository
;
import
com.chatopera.cc.persistence.repository.OnlineUserRepository
;
import
com.chatopera.cc.persistence.repository.SNSAccountRepository
;
import
com.chatopera.cc.persistence.repository.SessionConfigRepository
;
import
com.chatopera.cc.model.*
;
import
com.chatopera.cc.persistence.repository.*
;
import
com.chatopera.cc.util.HashMapUtils
;
import
com.chatopera.cc.util.WebIMReport
;
import
org.apache.commons.lang.StringUtils
;
...
...
@@ -36,10 +30,7 @@ import org.slf4j.LoggerFactory;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.ArrayList
;
import
java.util.Comparator
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.*
;
/**
* 坐席自动分配策略集
...
...
@@ -51,6 +42,9 @@ public class ACDPolicyService {
@Autowired
private
Cache
cache
;
@Autowired
private
UserRepository
userRes
;
@Autowired
private
SessionConfigRepository
sessionConfigRes
;
...
...
@@ -170,18 +164,22 @@ public class ACDPolicyService {
}
if
(
agentUser
!=
null
&&
StringUtils
.
isNotBlank
(
agentUser
.
getAgentno
()))
{
// 指定坐席
for
(
final
Map
.
Entry
<
String
,
AgentStatus
>
entry
:
map
.
entrySet
())
{
// 被指定的坐席,不检查是否忙,是否达到最大接待数量
if
(
StringUtils
.
equals
(
entry
.
getValue
().
getAgentno
(),
agentUser
.
getAgentno
()))
{
agentStatuses
.
add
(
entry
.
getValue
());
logger
.
info
(
"[filterOutAvailableAgentStatus] <Agent> find ready agent {}, name {}, status {}, service {}/{}"
,
entry
.
getValue
().
getAgentno
(),
entry
.
getValue
().
getUsername
(),
entry
.
getValue
().
getStatus
(),
entry
.
getValue
().
getUsers
(),
entry
.
getValue
().
getMaxusers
());
break
;
User
user
=
userRes
.
findById
(
agentUser
.
getUserid
());
if
(
user
!=
null
&&
!
user
.
isSuperadmin
())
{
// 用户不为空,并且不是超级管理员
// 指定坐席
for
(
final
Map
.
Entry
<
String
,
AgentStatus
>
entry
:
map
.
entrySet
())
{
// 被指定的坐席,不检查是否忙,是否达到最大接待数量
if
(
StringUtils
.
equals
(
entry
.
getValue
().
getAgentno
(),
agentUser
.
getAgentno
()))
{
agentStatuses
.
add
(
entry
.
getValue
());
logger
.
info
(
"[filterOutAvailableAgentStatus] <Agent> find ready agent {}, name {}, status {}, service {}/{}"
,
entry
.
getValue
().
getAgentno
(),
entry
.
getValue
().
getUsername
(),
entry
.
getValue
().
getStatus
(),
entry
.
getValue
().
getUsers
(),
entry
.
getValue
().
getMaxusers
());
break
;
}
}
}
}
...
...
@@ -190,7 +188,7 @@ public class ACDPolicyService {
if
(
agentStatuses
.
size
()
==
1
)
{
logger
.
info
(
"[filterOutAvailableAgentStatus] agent status list size: {}"
,
agentStatuses
.
size
());
// 得到指定的坐席
return
agentStatuses
;
return
filterOutAgentStatusBySkipSuperAdmin
(
agentStatuses
)
;
}
// Note 如果指定了坐席,但是该坐席却不是就绪的,那么就根据技能组或其它条件查找
...
...
@@ -226,7 +224,7 @@ public class ACDPolicyService {
// 如果绑定了技能组,立即返回该技能组的人
// 这时候,如果该技能组没有人,也不按照其它条件查找
logger
.
info
(
"[filterOutAvailableAgentStatus] agent status list size: {}"
,
agentStatuses
.
size
());
return
agentStatuses
;
return
filterOutAgentStatusBySkipSuperAdmin
(
agentStatuses
)
;
}
else
{
/**
* 在指定的坐席和技能组中未查到坐席
...
...
@@ -259,7 +257,40 @@ public class ACDPolicyService {
}
logger
.
info
(
"[filterOutAvailableAgentStatus] agent status list size: {}"
,
agentStatuses
.
size
());
return
agentStatuses
;
return
filterOutAgentStatusBySkipSuperAdmin
(
agentStatuses
);
}
/**
* 过滤超级管理员
*
* @param agentStatuses
* @return
*/
private
List
<
AgentStatus
>
filterOutAgentStatusBySkipSuperAdmin
(
final
List
<
AgentStatus
>
agentStatuses
)
{
List
<
AgentStatus
>
result
=
new
ArrayList
<>();
List
<
String
>
uids
=
new
ArrayList
<>();
HashMap
<
String
,
User
>
userMap
=
new
HashMap
<>();
for
(
final
AgentStatus
as
:
agentStatuses
)
{
if
(
StringUtils
.
isNotBlank
(
as
.
getUserid
()))
uids
.
add
(
as
.
getUserid
());
}
List
<
User
>
users
=
userRes
.
findByIdIn
(
uids
);
for
(
final
User
u
:
users
)
{
userMap
.
put
(
u
.
getId
(),
u
);
}
for
(
final
AgentStatus
as
:
agentStatuses
)
{
if
(
userMap
.
containsKey
(
as
.
getUserid
()))
{
if
(!
userMap
.
get
(
as
.
getUserid
()).
isSuperadmin
())
result
.
add
(
as
);
}
}
logger
.
info
(
"[filterOutAgentStatusBySkipSuperAdmin] agent status list size: {}"
,
agentStatuses
.
size
());
return
result
;
}
...
...
contact-center/app/src/main/java/com/chatopera/cc/persistence/repository/UserRepository.java
浏览文件 @
4f509eb4
...
...
@@ -96,4 +96,6 @@ public interface UserRepository extends JpaRepository<User, String> {
List
<
User
>
findByOrgiAndAgentAndDatastatusAndIdIsNot
(
final
String
orgi
,
boolean
agent
,
boolean
datastatus
,
final
String
id
);
Page
<
User
>
findByIdIn
(
Iterable
<
String
>
ids
,
Pageable
pageRequest
);
List
<
User
>
findByIdIn
(
List
<
String
>
ids
);
}
contact-center/app/src/main/java/com/chatopera/cc/proxy/OnlineUserProxy.java
浏览文件 @
4f509eb4
...
...
@@ -225,8 +225,8 @@ public class OnlineUserProxy {
if
(!
skillOrgansByOrgi
.
isEmpty
())
{
for
(
User
user
:
agentList
)
{
// 跳过管理员角色用户,不显示在技能组列表
if
(
user
.
is
Admin
()
||
user
.
is
Superadmin
())
continue
;
// 跳过
超级
管理员角色用户,不显示在技能组列表
if
(
user
.
isSuperadmin
())
continue
;
// 只显示在线的客服,跳过离线的客服
if
(
getCache
().
findOneAgentStatusByAgentnoAndOrig
(
user
.
getId
(),
origOrig
)
==
null
)
continue
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录