ソースを参照

fix 并发创建微信会话

zoujiajian 1 年間 前
コミット
845ec354ce

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

@@ -854,6 +854,7 @@ public class RedisService {
         USER_MIRROR_SHOP_ADVERTISE_CACHE_KEY("user_mirror_shop_advertise_cache_key:", "用户镜像店铺广告缓存key", 60 * 60 * 12),
         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),
         ;
 
         private String name;

+ 13 - 0
netflix-service/src/main/java/com/cyksj/service/corp/impl/CorpServiceImpl.java

@@ -844,6 +844,19 @@ public class CorpServiceImpl implements CorpService {
 	private void transCorpKfSessionToServicer(String corpId, String openKfId, String oldServicerUserId, String userid, String externalUserId, Integer changeType, Integer serviceState, Date sendTime, String msgid) throws Exception {
 		//调用微信客服接口 变更会话状态
 		try {
+			//非转接会话
+			if (changeType == null) {
+				String sessionKey = RedisService.key.CORP_KF_SESSION_KEY.getNameFormat(openKfId, externalUserId);
+				if (!redisService.setNx(sessionKey, externalUserId, RedisService.key.CORP_KF_SESSION_KEY.getTimeout())) {
+					return;
+				}
+				ServiceStateResponse corpKfSessionStatus = wxCorpOps.getCorpKfSessionStatus(corpId, openKfId, externalUserId);
+				Integer state = corpKfSessionStatus.getService_state();
+				//serviceState 0未处理 1由智能助手接待 2待接入池排队中 3由人工接待 4 已结束/未开始
+				if (state != 0 && state != 1) {
+					return;
+				}
+			}
 			wxCorpOps.transCorpKfSessionToServicer(corpId, openKfId, userid, externalUserId, serviceState);
 			//记录接待人员会话
 			CorpKfServicerSessionRecord corpKfServicerSessionRecord = new CorpKfServicerSessionRecord();