Browse Source

微信客服轮流接待方式

zoujiajian 1 năm trước cách đây
mục cha
commit
fb99b50c57

+ 1 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/CorpKfAccountSessionConfig.java

@@ -16,6 +16,7 @@ public class CorpKfAccountSessionConfig extends BaseEntity{
 
 	/**
 	 * 默认0分配接待人员最少值班客服
+	 * 1.轮流分配
 	 */
 	private Integer assignType;
 

+ 1 - 0
netflix-service/src/main/java/com/cyksj/redis/RedisService.java

@@ -855,6 +855,7 @@ public class RedisService {
         NETFLIX_CHANGE_TICKET_KEY("netflix_change_ticket_key:", "奈飞更换车票key", 60l),
         CORP_KF_ACCOUNT_URL("corp_kf_account_url:", "微信客服url:", 60 * 60 * 6),
         CORP_KF_SESSION_KEY("corp_kf_session_key:%s:%s", "微信会话key", 3l),
+        CORP_KF_SEESION_ASSIGN_KEY("corp_kf_seesion_assign_key", "微信会话分配key", 60 * 60 * 24l)
         ;
 
         private String name;

+ 24 - 2
netflix-service/src/main/java/com/cyksj/service/corp/impl/CorpServiceImpl.java

@@ -938,6 +938,9 @@ public class CorpServiceImpl implements CorpService {
 			//发送进入等待池消息
 			sendCorpKfTextTips(corpId, externalUserid, openKfId, corpKfAccountSessionConfig.getNoDutyTips());
 			moveWaitingQueue(corpId, openKfId, externalUserid);
+			if (redisService.hasKey(RedisService.key.CORP_KF_SEESION_ASSIGN_KEY.getName())) {
+				redisService.del(RedisService.key.CORP_KF_SEESION_ASSIGN_KEY.getName());
+			}
 			return;
 		}
 		//获取接待人员列表
@@ -958,6 +961,9 @@ public class CorpServiceImpl implements CorpService {
 			sendCorpKfTextTips(corpId, externalUserid, openKfId, dynamicQueueTipsGroupsMsg);
 			//接入等待池
 			moveWaitingQueue(corpId, openKfId, externalUserid);
+			if (redisService.hasKey(RedisService.key.CORP_KF_SEESION_ASSIGN_KEY.getName())) {
+				redisService.del(RedisService.key.CORP_KF_SEESION_ASSIGN_KEY.getName());
+			}
 			return;
 		}
 		//如果目前有排队的用户 后续进入会话的用户排队
@@ -1013,8 +1019,24 @@ public class CorpServiceImpl implements CorpService {
 			moveWaitingQueue(corpId, openKfId, externalUserid);
 			return;
 		}
-		//选择第一个分配接待
-		CorpKfServicerDto corpKfServicerDto = filterKfCs.get(0);
+		//接待客服
+		CorpKfServicerDto corpKfServicerDto = null;
+		Integer assignType = corpKfAccountSessionConfig.getAssignType();
+		if (assignType != null && assignType == 1) {
+			//轮流分配
+			Long incr = redisService.incr(RedisService.key.CORP_KF_SEESION_ASSIGN_KEY.getName(), 1l);
+			int index = incr.intValue() % corpKfServiceIds.size();
+			Optional<CorpKfServicerDto> first = filterKfCs.stream().filter(f -> f.getServicerUserid().equals(corpKfServiceIds.get(index))).findFirst();
+			if (first.isPresent()) {
+				corpKfServicerDto = first.get();
+				log.info("目前轮流接待的客服为:{}", corpKfServicerDto.getServicerUserid());
+			}
+		}
+		//未找到可轮流接待的客服
+		if (corpKfServicerDto == null) {
+			//选择第一个分配接待
+			corpKfServicerDto = filterKfCs.get(0);
+		}
 		//变更会话状态
 		transCorpKfSessionToServicer(corpId, openKfId, null, corpKfServicerDto.getServicerUserid(), externalUserid, null, 3, sendDate, msgid);
 	}