浏览代码

Merge branch 'feature/0721-tenant'

# Conflicts:
#	cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherServiceImpl.java
yuanliang 1 年之前
父节点
当前提交
f82889538a

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ImUserFriendDao.java

@@ -18,6 +18,7 @@ public interface ImUserFriendDao extends BaseMapper<ImUserFriend> {
 
     ImUserFriend findByUserIdAndFriendId(@Param("userId") Long userId, @Param("friendId") Long friendId);
 
-    void delFriendByTenantId(@Param("tenantId") Long tenantId,@Param("userId") Long userId);
+    void delFriendByTenantId(@Param("tenantId") Long tenantId,@Param("userId") Long userId ,
+                             @Param("clientType") String clientType);
 }
 

+ 4 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImUserFriendService.java

@@ -6,6 +6,7 @@ import com.yonge.cooleshow.biz.dal.entity.ImUserFriend;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.wrapper.im.CustomerService;
 import com.yonge.cooleshow.biz.dal.wrapper.im.ImUserWrapper;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 import java.util.Map;
@@ -31,6 +32,8 @@ public interface ImUserFriendService extends IService<ImUserFriend> {
     */
     void saveUserFriend(Long teacherId, Set<Long> studentIds);
 
+    void saveUserTeacherFriend(Long teacherId, Set<Long> teacherIds);
+
     /**
     * @description: 获取用户详情
      * @param userId
@@ -65,6 +68,6 @@ public interface ImUserFriendService extends IService<ImUserFriend> {
      */
     List<ImUserWrapper.ImUserFriend> findUserAllImFriendInfo(ClientEnum clientType, Long userId, Map<String, Object> paramMap);
 
-    void delFriendByTenantId(Long tenantId, Long userId);
+    void delFriendByTenantId(Long tenantId, Long userId, String clientType);
 }
 

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

@@ -127,6 +127,53 @@ public class ImUserFriendServiceImpl extends ServiceImpl<ImUserFriendDao, ImUser
 
     @Override
     @Transactional(rollbackFor = Exception.class)
+    public void saveUserTeacherFriend(Long teacherId, Set<Long> teacherIds) {
+        if (CollectionUtils.isEmpty(teacherIds)) {
+            return;
+        }
+        Date now = new Date();
+        //老师添加学员联系人
+        List<ImUserFriend> imUserFriends = new ArrayList<>();
+        BasicUserInfo teacherInfo = teacherDao.getBasicUserInfo(teacherId);
+        List<BasicUserInfo> studentInfos = teacherDao.findBasicUserInfo(teacherIds);
+        studentInfos.add(teacherInfo);
+        Map<Long, List<BasicUserInfo>> basicUserInfoMap =
+                studentInfos.stream().collect(Collectors.groupingBy(BasicUserInfo::getUserId));
+        for (Long studentId : teacherIds) {
+            //老师关联学员
+            ImUserFriend teacherFriend = new ImUserFriend();
+            //学员关联老师
+            ImUserFriend studentFriend = new ImUserFriend();
+            List<BasicUserInfo> basicUserInfos = basicUserInfoMap.get(studentId);
+            if (CollectionUtils.isNotEmpty(basicUserInfos)) {
+                BasicUserInfo info = basicUserInfos.get(0);
+                teacherFriend.setFriendAvatar(info.getAvatar());
+                teacherFriend.setFriendNickname(info.getUsername());
+
+                studentFriend.setFriendAvatar(teacherInfo.getAvatar());
+                studentFriend.setFriendNickname(teacherInfo.getUsername());
+            }
+            teacherFriend.setClientType(ClientEnum.TEACHER);
+            teacherFriend.setFriendId(studentId);
+            teacherFriend.setFriendType(ClientEnum.TEACHER);
+            teacherFriend.setUserId(teacherId);
+            teacherFriend.setCreateTime(now);
+            teacherFriend.setUpdateTime(now);
+
+            studentFriend.setClientType(ClientEnum.TEACHER);
+            studentFriend.setFriendId(teacherId);
+            studentFriend.setFriendType(ClientEnum.TEACHER);
+            studentFriend.setUserId(studentId);
+            studentFriend.setCreateTime(now);
+            studentFriend.setUpdateTime(now);
+            imUserFriends.add(teacherFriend);
+            imUserFriends.add(studentFriend);
+        }
+        baseMapper.insertBatch(imUserFriends);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
     public ImUserFriend getDetail(String imUserId, ClientEnum clientType) {
 
         // 用户ID
@@ -414,10 +461,11 @@ public class ImUserFriendServiceImpl extends ServiceImpl<ImUserFriendDao, ImUser
      *
      * @param tenantId   机构ID
      * @param userId     用户ID
+     * @param clientType 用户类型,处理同账号多角色问题
      */
     @Override
-    public void delFriendByTenantId(Long tenantId, Long userId) {
-        this.baseMapper.delFriendByTenantId(tenantId, userId);
+    public void delFriendByTenantId(Long tenantId, Long userId, String clientType) {
+        this.baseMapper.delFriendByTenantId(tenantId, userId, clientType);
     }
 }
 

+ 21 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java

@@ -11,6 +11,7 @@ import com.google.common.collect.Lists;
 import com.microsvc.toolkit.common.webportal.exception.BizException;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.auth.config.CustomerServiceConfig;
 import com.yonge.cooleshow.biz.dal.dao.EmployeeDao;
 import com.yonge.cooleshow.biz.dal.dao.StudentDao;
 import com.yonge.cooleshow.biz.dal.dao.SubjectDao;
@@ -123,6 +124,9 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
     @Autowired
     private SysUserFeignService sysUserFeignService;
 
+    @Autowired
+    private CustomerServiceConfig customerServiceConfig;
+
     @Override
     public StudentDao getDao() {
         return baseMapper;
@@ -545,7 +549,7 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
                 }
             }
             // 删除机构好友关系
-            imUserFriendService.delFriendByTenantId(tenantId, student.getUserId());
+            imUserFriendService.delFriendByTenantId(tenantId, student.getUserId(),ClientEnum.STUDENT.getCode());
         }
         if (toTenantId != null && toTenantId != -1L) {
             // 加好友
@@ -697,6 +701,22 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
                     new HashSet<>(ImmutableList.of(sysUser.getId()))));
         }
 
+        //  与客服建立好友
+        String customerService = customerServiceConfig.getCustomerService();
+        if(StringUtils.isNotBlank(customerService)){
+            List<String> phones = Arrays.stream(customerService.split(",")).collect(Collectors.toList());
+            // 通过手机号获取用户ID
+            QueryWrapper<com.yonge.cooleshow.biz.dal.entity.SysUser> queryWrapper = new QueryWrapper<>();
+            queryWrapper.lambda().in(com.yonge.cooleshow.biz.dal.entity.SysUser::getPhone,phones);
+            List<com.yonge.cooleshow.biz.dal.entity.SysUser> sysUsers = sysUserMapper.selectList(queryWrapper);
+            Set<Long> userIds = sysUsers.stream().map(com.yonge.cooleshow.biz.dal.entity.SysUser::getId).collect(Collectors.toSet());
+            for (Long teacherId : userIds) {
+                HashSet<Long> studentIds = new HashSet<>();
+                studentIds.add(student.getUserId());
+                imUserFriendService.saveUserFriend(teacherId, studentIds);
+            }
+        }
+
         return true;
     }
 

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

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -9,6 +10,7 @@ import com.google.common.collect.Lists;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.dto.RealnameAuthReq;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.auth.config.CustomerServiceConfig;
 import com.yonge.cooleshow.biz.dal.dao.EmployeeDao;
 import com.yonge.cooleshow.biz.dal.dao.StudentStarDao;
 import com.yonge.cooleshow.biz.dal.dao.TeacherDao;
@@ -22,6 +24,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.mapper.SysUserMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantAlbumRefMapper;
 import com.yonge.cooleshow.biz.dal.mapper.TenantUnbindHistoryMapper;
@@ -155,6 +158,12 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
     private RealnameAuthenticationPlugin realnameAuthenticationPlugin;
 
     @Autowired
+    private CustomerServiceConfig customerServiceConfig;
+
+    @Autowired
+    private SysUserMapper sysUserMapper;
+
+    @Autowired
     private ImGroupCoreService imGroupCoreService;
 
 
@@ -416,10 +425,23 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
             // 自动与机构老师成为好友
             Set<Long> collect = studentService.lambdaQuery()
                     .eq(Student::getTenantId, teacher.getTenantId()).list().stream()
-                    .map(Student::getUserId).collect(Collectors.toSet());
+                    .map(Student::getUserId).filter(next->next.equals(teacher.getUserId())).collect(Collectors.toSet());
 
             imUserFriendService.saveUserFriend(teacher.getUserId(), collect);
         }
+        //  与客服建立好友
+        String customerService = customerServiceConfig.getCustomerService();
+        if(StringUtils.isNotBlank(customerService)){
+            List<String> phones = Arrays.stream(customerService.split(",")).collect(Collectors.toList());
+            // 通过手机号获取用户ID
+            QueryWrapper<com.yonge.cooleshow.biz.dal.entity.SysUser> queryWrapper = new QueryWrapper<>();
+            queryWrapper.lambda().in(com.yonge.cooleshow.biz.dal.entity.SysUser::getPhone,phones);
+            List<com.yonge.cooleshow.biz.dal.entity.SysUser> sysUsers = sysUserMapper.selectList(queryWrapper);
+            Set<Long> userIds = sysUsers.stream().map(com.yonge.cooleshow.biz.dal.entity.SysUser::getId).collect(Collectors.toSet());
+            if (userIds.isEmpty()) {
+                imUserFriendService.saveUserTeacherFriend(teacher.getUserId(), userIds);
+            }
+        }
 
         return HttpResponseResult.succeed(true);
     }
@@ -999,7 +1021,7 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
                 }
             });
             // 删除好友关系
-            imUserFriendService.delFriendByTenantId(teacher.getTenantId(), teacher.getUserId());
+            imUserFriendService.delFriendByTenantId(teacher.getTenantId(), teacher.getUserId(),ClientEnum.TEACHER.getCode());
 
         }
 
@@ -1017,9 +1039,12 @@ public class TeacherServiceImpl extends ServiceImpl<TeacherDao, Teacher> impleme
             // 自动与机构老师成为好友
             Set<Long> collect = studentService.lambdaQuery()
                     .eq(Student::getTenantId, updateTenant.getTenantId()).list().stream()
-                    .map(Student::getUserId).collect(Collectors.toSet());
+                    .map(Student::getUserId).filter(next -> next.equals(teacher.getUserId()))
+                    .collect(Collectors.toSet());
 
-            imUserFriendService.saveUserFriend(teacher.getUserId(), collect);
+            if (!collect.isEmpty()) {
+                imUserFriendService.saveUserFriend(teacher.getUserId(), collect);
+            }
         }
 
         teacher.setTenantId(updateTenant.getTenantId());

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

@@ -236,7 +236,8 @@ public class TenantUnbindRecordServiceImpl extends ServiceImpl<TenantUnbindRecor
                         log.error("老师解绑审核成功,解散机构群失败:{}", e.getMessage());
                     }
                 }
-                imUserFriendService.delFriendByTenantId(unbindRecord.getUserId(), unbindRecord.getUserId());
+                imUserFriendService.delFriendByTenantId(unbindRecord.getUserId(), unbindRecord.getUserId(),
+                        ClientEnum.TEACHER.getCode());
             }
             teacherDao.update(null, Wrappers.<Teacher>lambdaUpdate()
                     .eq(Teacher::getUserId, unbindRecord.getUserId())

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

@@ -35,7 +35,7 @@
                     t2.tenant_id_ = #{tenantId} AND
                     (t1.user_id_ = t2.user_id_ OR t1.friend_id_ = t2.user_id_)
             )
-        WHERE t1.user_id_ = #{userId}
+        WHERE (t1.user_id_ = #{userId} and t1.client_type_ = #{clientType})
         OR t1.friend_id_ = #{userId}
     </delete>
 </mapper>

+ 1 - 1
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/open/OpenStudentController.java

@@ -131,7 +131,7 @@ public class OpenStudentController extends BaseController {
                             }
                         });
                         // 删除好友
-                        imUserFriendService.delFriendByTenantId(tenantId, one.getUserId());
+                        imUserFriendService.delFriendByTenantId(tenantId, one.getUserId(),ClientEnum.TEACHER.getCode());
                     }
                 }