yuanliang 1 rok pred
rodič
commit
78737c6760

+ 10 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/constant/SysConfigConstant.java

@@ -430,4 +430,14 @@ public interface SysConfigConstant {
      * 草稿保存时长
      */
     String USER_MUSIC_DRAFT_TIME = "user_music_draft_time";
+
+    /**
+     * 添加客服好友时,客服发送消息
+     */
+    String CUSTOMER_SERVICE_ADD_MSG = "customer_service_add_msg";
+
+    /**
+     * 添加客服好友时,客服发送消息标题
+     */
+    String CUSTOMER_SERVICE_ADD_MSG_TITLE = "customer_service_add_msg_title";
 }

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherDao.java

@@ -16,6 +16,7 @@ import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
 
 import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantInfoWrapper;
+import com.yonge.cooleshow.biz.dal.wrapper.teacher.TeacherWrapper;
 import org.apache.ibatis.annotations.Param;
 
 public interface TeacherDao extends BaseMapper<Teacher> {
@@ -117,4 +118,6 @@ public interface TeacherDao extends BaseMapper<Teacher> {
     Integer queryTeacherCounts(@Param("id") Long id);
 
     Teacher getCustomerServiceByFriendLeast();
+
+    List<TeacherWrapper.TeacherFriend> getCustomerServiceFriendNums();
 }

+ 7 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImUserFriendServiceImpl.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alipay.api.domain.SystemParam;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -28,6 +29,7 @@ import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
 import com.yonge.cooleshow.biz.dal.service.ImGroupService;
 import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
 import com.yonge.cooleshow.biz.dal.service.SubjectService;
+import com.yonge.cooleshow.biz.dal.service.SysConfigService;
 import com.yonge.cooleshow.biz.dal.service.VipCardRecordService;
 import com.yonge.cooleshow.biz.dal.vo.StudentVo;
 import com.yonge.cooleshow.biz.dal.vo.TeacherVo;
@@ -35,6 +37,7 @@ import com.yonge.cooleshow.biz.dal.vo.im.ImUserFriendVO;
 import com.yonge.cooleshow.biz.dal.wrapper.VipCardRecordWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.im.CustomerService;
 import com.yonge.cooleshow.biz.dal.wrapper.im.ImUserWrapper;
+import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.util.ImUtil;
 import io.rong.messages.BaseMessage;
@@ -94,6 +97,8 @@ public class ImUserFriendServiceImpl extends ServiceImpl<ImUserFriendDao, ImUser
     private SubjectService subjectService;
     @Autowired
     private VipCardRecordService vipCardRecordService;
+    @Autowired
+    private SysConfigService sysConfigService;
     @Override
     public ImUserFriendDao getDao() {
         return this.baseMapper;
@@ -322,12 +327,12 @@ public class ImUserFriendServiceImpl extends ServiceImpl<ImUserFriendDao, ImUser
         try {
 
             // 设置默认值
-            String customerMessage = customerServiceConfig.getCustomerMessage();
+            String customerMessage = sysConfigService.findConfigValue(SysConfigConstant.CUSTOMER_SERVICE_ADD_MSG);
             if (StringUtils.isEmpty(customerMessage)) {
                 customerMessage = MK.IM_SYS_FRIEND;
             }
 
-            String customerTitle = customerServiceConfig.getCustomerTitle();
+            String customerTitle = sysConfigService.findConfigValue(SysConfigConstant.CUSTOMER_SERVICE_ADD_MSG_TITLE);
             if (StringUtils.isEmpty(customerTitle)) {
                 customerTitle = MK.IM_SYS_TITLE;
             }

+ 81 - 10
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java

@@ -26,6 +26,7 @@ import com.yonge.cooleshow.biz.dal.enums.ImGroupType;
 import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.TeacherTagEnum;
 import com.yonge.cooleshow.biz.dal.enums.TeacherTypeEnum;
+import com.yonge.cooleshow.biz.dal.enums.im.EImGroupMemberRoleType;
 import com.yonge.cooleshow.biz.dal.mapper.TenantGroupMapper;
 import com.yonge.cooleshow.biz.dal.mapper.UserTenantBindRecordMapper;
 import com.yonge.cooleshow.biz.dal.queryInfo.TeacherQueryInfo;
@@ -674,29 +675,99 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
 
     // 客服好友移交给其他客服
     private void transferFriend(Long userId) {
+        // 群里的好友保留
+        List<String> groupIdList = imGroupMemberService.lambdaQuery()
+                .eq(ImGroupMember::getUserId, userId)
+                .eq(ImGroupMember::getIsAdmin, true)
+                .eq(ImGroupMember::getGroupRoleType, EImGroupMemberRoleType.Owner)
+                .list()
+                .stream()
+                .map(ImGroupMember::getGroupId).collect(Collectors.toList());
+
+        List<Long> savedTeacherIdList = new ArrayList<>();
+        List<Long> savedStudentIdList = new ArrayList<>();
+
+        if (!groupIdList.isEmpty()) {
+            List<ImGroupMember> savedMemberList = imGroupMemberService.lambdaQuery()
+                    .in(ImGroupMember::getGroupId, groupIdList)
+                    .eq(ImGroupMember::getIsAdmin, false)
+                    .eq(ImGroupMember::getGroupRoleType, EImGroupMemberRoleType.Member)
+                    .list();
+
+            savedTeacherIdList.addAll(savedMemberList.stream()
+                    .filter(n -> ImGroupMemberRoleType.TEACHER.equals(n.getRoleType()))
+                    .map(ImGroupMember::getUserId)
+                    .collect(Collectors.toList()));
+
+            savedStudentIdList.addAll(savedMemberList.stream()
+                    .filter(n -> ImGroupMemberRoleType.STUDENT.equals(n.getRoleType()))
+                    .map(ImGroupMember::getUserId)
+                    .collect(Collectors.toList()));
+        }
+
         List<ImUserFriend> friendList = imUserFriendService.lambdaQuery()
                 .eq(ImUserFriend::getUserId, userId)
                 .eq(ImUserFriend::getClientType, ClientEnum.TEACHER)
                 .list();
+
+        friendList.removeIf(n -> {
+            if (ClientEnum.STUDENT.equals(n.getClientType())) {
+                return savedStudentIdList.contains(n.getFriendId());
+            }
+            if (ClientEnum.TEACHER.equals(n.getClientType())) {
+                return savedTeacherIdList.contains(n.getFriendId());
+            }
+            return false;
+        });
         if (friendList.isEmpty()) { // 没有好友
             return;
         }
-        List<Teacher> customerService = getCustomerService();
-        List<Long> teacherIdList = customerService.stream().map(Teacher::getUserId).collect(Collectors.toList());
-        teacherIdList.removeIf(n->n.equals(userId));
-        if (teacherIdList.isEmpty()) { // 没有客服
+        List<Long> customerIdList = getCustomerService().stream().map(Teacher::getUserId).collect(Collectors.toList());
+        customerIdList.removeIf(n -> n.equals(userId));
+        if (customerIdList.isEmpty()) { // 没有客服
             return;
         }
-        List<Long> friendIdList = friendList.stream().map(ImUserFriend::getFriendId).collect(Collectors.toList());
-        friendIdList.removeIf(teacherIdList::contains);
-        if (friendIdList.isEmpty()) { // 有一个客服好友
+        List<ImUserFriend> userFriendList = friendList.stream()
+                .filter(n -> !ClientEnum.TEACHER.equals(n.getFriendType()) || !customerIdList.contains(n.getFriendId()))
+                .collect(Collectors.toList());
+        if (userFriendList.isEmpty()) { // 除去客服好友,没有其他好友
             return;
         }
 
-        //todo
-
-
+        // 好友交接
+        List<TeacherWrapper.TeacherFriend> customerServiceFriendNums = this.getBaseMapper().getCustomerServiceFriendNums();
+        if (customerServiceFriendNums.size() == 1) { // 只有一个客服
+            List<ImUserFriend> teacherFriends = userFriendList.stream().filter(n -> ClientEnum.TEACHER.equals(n.getClientType())).collect(Collectors.toList());
+            if (!teacherFriends.isEmpty()) {
+                List<Long> friendIds = teacherFriends.stream().map(ImUserFriend::getFriendId).collect(Collectors.toList());
+                imUserFriendService.saveUserTeacherFriend(customerServiceFriendNums.get(0).getTeacherId(), new HashSet<>(friendIds));
+            }
+            List<ImUserFriend> studentFriends = userFriendList.stream().filter(n -> ClientEnum.STUDENT.equals(n.getClientType())).collect(Collectors.toList());
+            if (!studentFriends.isEmpty()) {
+                List<Long> friendIds = studentFriends.stream().map(ImUserFriend::getFriendId).collect(Collectors.toList());
+                imUserFriendService.saveUserFriend(customerServiceFriendNums.get(0).getTeacherId(), new HashSet<>(friendIds));
+            }
+        } else {
+            Map<Long, Set<Long>> teacherFriends = new LinkedHashMap<>();
+            Map<Long, Set<Long>> studentFriends = new LinkedHashMap<>();
+            for (ImUserFriend imUserFriend : userFriendList) {
+                TeacherWrapper.TeacherFriend teacherFriend = customerServiceFriendNums.get(0);
+                if (ClientEnum.TEACHER.equals(imUserFriend.getClientType())) {
+                    Set<Long> set = teacherFriends.getOrDefault(teacherFriend.getTeacherId(), new HashSet<>());
+                    set.add(imUserFriend.getFriendId());
+                    teacherFriends.put(teacherFriend.getTeacherId(), set);
+                } else if (ClientEnum.STUDENT.equals(imUserFriend.getClientType())) {
+                    Set<Long> set = studentFriends.getOrDefault(teacherFriend.getTeacherId(), new HashSet<>());
+                    set.add(imUserFriend.getFriendId());
+                    studentFriends.put(teacherFriend.getTeacherId(), set);
+                }
+                teacherFriend.setFriendNums(teacherFriend.getFriendNums() + 1);
+                Collections.sort(customerServiceFriendNums);
+            }
 
+            teacherFriends.forEach((key, value) -> imUserFriendService.saveUserTeacherFriend(key, value));
+            studentFriends.forEach((key, value) -> imUserFriendService.saveUserFriend(key, value));
+        }
     }
 
     /***

+ 6 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/teacher/TeacherWrapper.java

@@ -161,10 +161,15 @@ public class TeacherWrapper {
 
 
     @Data
-    public static class TeacherFriend {
+    public static class TeacherFriend implements Comparable<TeacherFriend> {
 
         private Long teacherId;
 
         private Integer friendNums;
+
+        @Override
+        public int compareTo(TeacherFriend o) {
+            return friendNums.compareTo(o.getFriendNums());
+        }
     }
 }

+ 1 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -461,5 +461,6 @@
           and su.del_flag_ = 0
           and su.lock_flag_ = 0
         group by te.user_id_
+        order by friendNums
     </select>
 </mapper>