zhoufan %!s(int64=11) %!d(string=před) měsíci
rodič
revize
4bbf9ddbfe

+ 22 - 8
midware-service/src/main/java/midware/service/eslclient/EslEventListenerEvent.java

@@ -95,6 +95,8 @@ public class EslEventListenerEvent implements IEslEventListener {
95 95
                             session.setVideo(isVideo);
96 96
                             session.setCreateTime(new Date());
97 97
                             EslCommon.sessions.add(session);
98
+                        }else {
99
+                            session.setActionId(session.getActionId() + 1);
98 100
                         }
99 101
 
100 102
                         if (chan == null) {
@@ -107,8 +109,7 @@ public class EslEventListenerEvent implements IEslEventListener {
107 109
                         chan.setSessionId(session.getSessionId());
108 110
                         chan.setCallType(session.getType());
109 111
                         chan.setCreateTime(new Date());
110
-                        String finalCallId = callId;
111
-                        chan.setSessionSort(EslCommon.channels.stream().filter(p -> p.getSessionId().equals(finalCallId)).count());
112
+                        chan.setSessionSort(session.getActionId());
112 113
                         //更新坐席状态
113 114
                         if (agent != null) {
114 115
                             if (callType == 2) eslClientService.setWork(agent.getAgent(), false, "");
@@ -164,7 +165,6 @@ public class EslEventListenerEvent implements IEslEventListener {
164 165
                                     if (!(isAdd && opType.equals("MakeCall"))) callerAgent.setOpType("");
165 166
                                     //过滤分机呼出/坐席呼出
166 167
                                     if (!(opType.equals("") || opType.equals("MakeCall"))) {
167
-                                        session.setActionId(session.getActionId() + 1);
168 168
                                         if (!isAdd) isAdd = true;
169 169
                                     }
170 170
                                 }
@@ -180,7 +180,7 @@ public class EslEventListenerEvent implements IEslEventListener {
180 180
                                     if (calleeAgent1 != null) record.setCalleeAgent(calleeAgent1.getAgent());
181 181
                                     record.setCallType(2);
182 182
                                     record.setUuid(callId);
183
-                                    record.setActionId(session.getActionId());
183
+                                    record.setActionId(session.getActionId()>1?session.getActionId()-1:1);
184 184
                                     record.setIsAnswer(0);
185 185
                                     record.setIsVideo(session.isVideo() ? 1 : 0);
186 186
                                     record.setCreateTime(new Date());
@@ -260,10 +260,24 @@ public class EslEventListenerEvent implements IEslEventListener {
260 260
                                     if (callerAgent != null) {
261 261
                                         if (!opType.equals("MakeCall") || calleeNum.equals(chanNames[2])) {
262 262
                                             actionNotice(opType, callerAgent.getAgent(), callId, true);
263
-                                            if (opType.equals("Meeting") && chan.getSessionSort() == 3) {
264
-                                                eslClientService.talkJoinMeeting(callId);
265
-                                                eslClientService.setConferenceExitSound(callId, true);
266
-                                                if (session != null) session.setMeeting(true);
263
+                                            if (opType.equals("Meeting")) {
264
+                                                if (chan.getSessionSort() == 3) {
265
+                                                    if (eslClientService.talkJoinMeeting(callId)) {
266
+                                                        if (session != null) {
267
+                                                            session.setMeeting(true);
268
+                                                            try {
269
+                                                                Thread.sleep(500);
270
+                                                            } catch (InterruptedException e) {
271
+                                                                throw new RuntimeException(e);
272
+                                                            }
273
+                                                            eslClientService.setConferenceExitSound(callId, true);
274
+                                                        }
275
+                                                    }
276
+                                                }
277
+                                                //第一个人静音和禁听
278
+                                                if (session != null && session.isMeetingMute()) {
279
+                                                    eslClientService.setConferenceIsMute(callId, callId, true, "");
280
+                                                }
267 281
                                             }
268 282
                                         }
269 283
                                     }

+ 2 - 0
midware-service/src/main/java/midware/service/eslclient/entity/Session.java

@@ -16,6 +16,8 @@ public class Session {
16 16
     private boolean isAnswer = false;
17 17
     //是否会议
18 18
     private boolean isMeeting = false;
19
+    //是否会议静音
20
+    private boolean isMeetingMute = false;
19 21
     //是否视频
20 22
     private boolean isVideo = false;
21 23
     //视频路径

+ 23 - 5
midware-service/src/main/java/midware/service/init/EslClientService.java

@@ -723,6 +723,23 @@ public class EslClientService {
723 723
         return !result.equals("");
724 724
     }
725 725
 
726
+    //获取会议人员id
727
+    public String getConferenceMemberId(String meetingId, String chanId) {
728
+        String memberId = "";
729
+        try {
730
+            //获取会议所有人员
731
+            EslMessage message = client.sendSyncApiCommand("conference", meetingId + " list");
732
+            if (message != null && message.getBodyLines().size() > 0) {
733
+                for (String line : message.getBodyLines()) {
734
+                    if (line.contains(chanId)) memberId = line.split(";")[0];
735
+                }
736
+            }
737
+        } catch (Exception e) {
738
+            log.error("获取会议人员id失败", e);
739
+        }
740
+        return memberId;
741
+    }
742
+
726 743
     //设置会议人员离开是否播放声音
727 744
     public boolean setConferenceExitSound(String meetingId, boolean isplay) {
728 745
         String result = "";
@@ -738,15 +755,16 @@ public class EslClientService {
738 755
     }
739 756
 
740 757
     //设置会议人员是否静音
741
-    public boolean setConferenceIsMute(String meetingId, String memberId, boolean isMute,String action) {
758
+    public boolean setConferenceIsMute(String meetingId, String chanId, boolean isMute,String action) {
742 759
         String result = "";
743 760
         try {
761
+            String memberId = getConferenceMemberId(meetingId, chanId);
744 762
             String command = EslCommandEnum.conference.name();
745 763
             if (isMute) {
746 764
                 String arg = meetingId + " deaf " + memberId;
747 765
                 client.sendAsyncApiCommand(command, arg);
748 766
                 arg = meetingId + " mute " + memberId
749
-                        +"\r\nJob-UUID: " + action + "|" + System.currentTimeMillis();
767
+                        + "\r\nJob-UUID: " + action + "|" + System.currentTimeMillis();
750 768
                 result = client.sendAsyncApiCommand(command, arg);
751 769
             } else {
752 770
                 String arg = meetingId + " undeaf " + memberId;
@@ -754,12 +772,12 @@ public class EslClientService {
754 772
                 arg = meetingId + " stop all " + memberId;
755 773
                 client.sendAsyncApiCommand(command, arg);
756 774
                 arg = meetingId + " unmute " + memberId
757
-                        +"\r\nJob-UUID: " + action + "|" + System.currentTimeMillis();
775
+                        + "\r\nJob-UUID: " + action + "|" + System.currentTimeMillis();
758 776
                 result = client.sendAsyncApiCommand(command, arg);
759 777
             }
760
-            
778
+
761 779
         } catch (Exception e) {
762
-            log.error(meetingId + "|" + memberId + "|" + isMute + " 设置会议静音失败", e);
780
+            log.error(meetingId + "|" + chanId + "|" + isMute + " 设置会议静音失败", e);
763 781
         }
764 782
         return !result.equals("");
765 783
     }

+ 22 - 0
midware-service/src/main/java/midware/service/init/WebSocketService.java

@@ -283,12 +283,34 @@ public class WebSocketService {
283 283
                                     result.put("Result", "目标号码忙碌中");
284 284
                                 } else {
285 285
                                     agent.setOpType(type);
286
+                                    String mute = map.get("Mute") != null ? map.get("Mute").toString() : "";
287
+                                    EslCommon.getSessionById(chan.getSessionId()).setMeetingMute(mute.equals("true"));
286 288
                                     isExec = eslClientService.callJoinMeeting(agent.getExten(), DestinationNumber, chan.getSessionId(), type + "|" + agentId + "|" + DestinationNumber+ "|" + Fix);
287 289
                                 }
288 290
                             }
289 291
                         }
290 292
                     }
291 293
                     break;
294
+                case "MeetingMuteOn"://会议开启静音
295
+                    //通话中  可以会议开启静音
296
+                    if (Objects.equals(state, EslAgentEnum.talking)) {
297
+                        String mid = chan.getSessionId();
298
+                        String Number = map.get("Number") != null ? map.get("Number").toString() : "";
299
+                        Channel cl = EslCommon.getChanByNumber(Number);
300
+                        if (cl != null) mid = cl.getChanId();
301
+                        isExec = eslClientService.setConferenceIsMute(chan.getSessionId(), mid, true, type + "|" + agentId);
302
+                    }
303
+                    break;
304
+                case "MeetingMuteOff"://会议取消静音
305
+                    //通话中  可以会议取消静音
306
+                    if (Objects.equals(state, EslAgentEnum.talking)) {
307
+                        String mid = chan.getSessionId();
308
+                        String Number = map.get("Number") != null ? map.get("Number").toString() : "";
309
+                        Channel cl = EslCommon.getChanByNumber(Number);
310
+                        if (cl != null) mid = cl.getChanId();
311
+                        isExec = eslClientService.setConferenceIsMute(chan.getSessionId(),mid, false,type + "|" + agentId);
312
+                    }
313
+                    break;
292 314
                 case "TurnMyd"://转满意度
293 315
                     //通话中  可以转满意度
294 316
                     if (Objects.equals(state, EslAgentEnum.talking)) {