Browse Source

Merge branch 'dev_v1.3.5_20220927'

Eric 2 năm trước cách đây
mục cha
commit
711b0b7b2f
13 tập tin đã thay đổi với 229 bổ sung18 xóa
  1. 3 0
      cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/dto/UserFriendInfoVO.java
  2. 1 1
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/PhoneAuthenticationProvider.java
  3. 2 1
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/SysUserService.java
  4. 2 1
      cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysUserServiceImpl.java
  5. 3 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/open/ImUserFriendController.java
  6. 3 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/io/request/im/UserFriendInfoVO.java
  7. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImUserFriend.java
  8. 14 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImUserFriendService.java
  9. 72 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImUserFriendServiceImpl.java
  10. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/im/ImUserFriendVO.java
  11. 73 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/im/ImUserWrapper.java
  12. 17 3
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/ImUserFriendController.java
  13. 16 4
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImUserFriendController.java

+ 3 - 0
cooleshow-api/src/main/java/com/yonge/cooleshow/api/feign/dto/UserFriendInfoVO.java

@@ -21,6 +21,9 @@ public class UserFriendInfoVO implements Serializable {
     // 新用户ID
     private Long userId;
 
+    // 客户端类型
+    private String clientType;
+
     // 好友ID
     private List<Long> friendIds;
 

+ 1 - 1
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/core/provider/PhoneAuthenticationProvider.java

@@ -80,7 +80,7 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
 
             if (Objects.nonNull(userInfo.getSysUser())) {
                 // 自动添加系统默认IM帐号为好友,并自动发送通知消息
-                sysUserService.sendSysCustomerServiceFriendMessage(userInfo.getSysUser());
+                sysUserService.sendSysCustomerServiceFriendMessage(userInfo.getSysUser(), clientId.toUpperCase());
             }
 
             if (StringUtils.isNotBlank(deviceNum)) {

+ 2 - 1
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/SysUserService.java

@@ -124,8 +124,9 @@ public interface SysUserService extends BaseService<Long, SysUser> {
     /**
      * 添加系统客服好友消息
      * @param sysUser SysUser
+     * @param clientType 客户端类型
      */
-    void sendSysCustomerServiceFriendMessage(SysUser sysUser);
+    void sendSysCustomerServiceFriendMessage(SysUser sysUser, String clientType);
 
     /**
      * 刷新token

+ 2 - 1
cooleshow-auth/auth-server/src/main/java/com/yonge/cooleshow/auth/service/impl/SysUserServiceImpl.java

@@ -211,7 +211,7 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
      * 添加系统客服好友消息
      * @param sysUser SysUser
      */
-    public void sendSysCustomerServiceFriendMessage(SysUser sysUser) {
+    public void sendSysCustomerServiceFriendMessage(SysUser sysUser, String clientType) {
 
         try {
 
@@ -231,6 +231,7 @@ public class SysUserServiceImpl extends BaseServiceImpl<Long, SysUser> implement
                     // 发送添加系统客服好友消息
                     HttpResponseResult<Boolean> result = adminFeignService.customerService(UserFriendInfoVO.builder()
                             .userId(sysUser.getId())
+                            .clientType(clientType)
                             .friendIds(Lists.newArrayList(friend.getId()))
                             .build());
                     log.info("sendSysCustomerServiceFriendMessage mobile={}, ret={}", mobile, JSON.toJSONString(result));

+ 3 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/open/ImUserFriendController.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.admin.controller.open;
 
 import com.yonge.cooleshow.admin.io.request.im.IMNotifyMessageVO;
 import com.yonge.cooleshow.admin.io.request.im.UserFriendInfoVO;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
 import com.yonge.cooleshow.biz.dal.wrapper.im.CustomerService;
 import com.yonge.cooleshow.common.controller.BaseController;
@@ -42,7 +43,8 @@ public class ImUserFriendController extends BaseController {
         }
 
         // 新用户自动绑定系统客服
-        int ret = imUserFriendService.registerUserBindCustomerService(info.getUserId(), info.getFriendIds());
+        int ret = imUserFriendService.registerUserBindCustomerService(info.getUserId(),
+                info.getFriendIds(), ClientEnum.valueOf(info.getClientType()));
 
         return succeed(ret > 0);
     }

+ 3 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/io/request/im/UserFriendInfoVO.java

@@ -22,6 +22,9 @@ public class UserFriendInfoVO implements Serializable {
     @ApiModelProperty(value = "新用户ID")
     private Long userId;
 
+    @ApiModelProperty("客户端类型")
+    private String clientType;
+
     @ApiModelProperty(value = "好友ID")
     private List<Long> friendIds;
 

+ 12 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImUserFriend.java

@@ -32,6 +32,10 @@ public class ImUserFriend implements Serializable {
     @ApiModelProperty(value = "好友编号")
     private Long friendId;
 
+    @TableField("friend_type_")
+    @ApiModelProperty(value = "好友身份")
+    private ClientEnum friendType;
+
     @TableField(exist = false)
     @ApiModelProperty(value = "融云好友编号")
     private String imFriendId;
@@ -145,5 +149,13 @@ public class ImUserFriend implements Serializable {
         this.clientType = clientType;
         return this;
     }
+
+    public ClientEnum getFriendType() {
+        return friendType;
+    }
+
+    public void setFriendType(ClientEnum friendType) {
+        this.friendType = friendType;
+    }
 }
 

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

@@ -3,9 +3,12 @@ package com.yonge.cooleshow.biz.dal.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.dao.ImUserFriendDao;
 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 java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -41,9 +44,10 @@ public interface ImUserFriendService extends IService<ImUserFriend> {
      * 新用户自动添加客服
      * @param userId 新用户ID
      * @param friendIds 好友ID
+     * @param clientType 客户端类型
      * @return Integer
      */
-    Integer registerUserBindCustomerService(Long userId, List<Long> friendIds);
+    Integer registerUserBindCustomerService(Long userId, List<Long> friendIds, ClientEnum clientType);
 
     /**
      * 发送系统客服消息
@@ -51,5 +55,14 @@ public interface ImUserFriendService extends IService<ImUserFriend> {
      * @param info CustomerService.NotifyMessage
      */
     void sendCustomerServiceNotifyMessage(String sender, CustomerService.NotifyMessage info);
+
+    /**
+     * 用户IM好友列表
+     * @param clientType 客户端类型
+     * @param userId 用户ID
+     * @param paramMap Map<String, Object>
+     * @return List<ImUserWrapper.ImUserFriend>
+     */
+    List<ImUserWrapper.ImUserFriend> findUserAllImFriendInfo(ClientEnum clientType, Long userId, Map<String, Object> paramMap);
 }
 

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

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -13,15 +14,15 @@ import com.yonge.cooleshow.biz.dal.dao.ImUserFriendDao;
 import com.yonge.cooleshow.biz.dal.dao.TeacherDao;
 import com.yonge.cooleshow.biz.dal.dto.BasicUserInfo;
 import com.yonge.cooleshow.biz.dal.entity.ImUserFriend;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.MK;
 import com.yonge.cooleshow.biz.dal.mapper.SysUserMapper;
 import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
 import com.yonge.cooleshow.biz.dal.wrapper.im.CustomerService;
+import com.yonge.cooleshow.biz.dal.wrapper.im.ImUserWrapper;
 import com.yonge.toolset.base.exception.BizException;
 import io.rong.messages.BaseMessage;
-import io.rong.messages.FileMessage;
 import io.rong.messages.ImgMessage;
-import io.rong.messages.ImgTextMessage;
 import io.rong.messages.TxtMessage;
 import io.rong.models.message.PrivateMessage;
 import io.rong.models.message.PushExt;
@@ -41,11 +42,13 @@ import java.awt.image.BufferedImage;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.net.URL;
+import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -67,6 +70,8 @@ public class ImUserFriendServiceImpl extends ServiceImpl<ImUserFriendDao, ImUser
     private CustomerServiceConfig customerServiceConfig;
     @Autowired
     private SysUserMapper sysUserMapper;
+    @Autowired
+    private ImUserFriendService imUserFriendService;
 
     @Override
     public ImUserFriendDao getDao() {
@@ -97,11 +102,13 @@ public class ImUserFriendServiceImpl extends ServiceImpl<ImUserFriendDao, ImUser
                 studentFriend.setFriendNickname(basicUserInfo.getUsername());
             }
             teacherFriend.setFriendId(studentId);
+            teacherFriend.setFriendType(ClientEnum.STUDENT);
             teacherFriend.setUserId(teacherId);
             teacherFriend.setCreateTime(now);
             teacherFriend.setUpdateTime(now);
 
             studentFriend.setFriendId(teacherId);
+            studentFriend.setFriendType(ClientEnum.TEACHER);
             studentFriend.setUserId(studentId);
             studentFriend.setCreateTime(now);
             studentFriend.setUpdateTime(now);
@@ -149,13 +156,27 @@ public class ImUserFriendServiceImpl extends ServiceImpl<ImUserFriendDao, ImUser
      *
      * @param userId    新用户ID
      * @param friendIds 好友ID
+     * @param clientType 客户端类型
      * @return Integer
      */
     @Override
-    public Integer registerUserBindCustomerService(Long userId, List<Long> friendIds) {
+    public Integer registerUserBindCustomerService(Long userId, List<Long> friendIds, ClientEnum clientType) {
+
+        // 添加新用户好友,客服默认为老师身份
+        for (Long teacherId : friendIds) {
 
-        // 添加新用户好友
-        saveUserFriend(userId, Sets.newHashSet(friendIds));
+            saveUserFriend(teacherId, Sets.newHashSet(userId));
+
+            // 新注册用户为老师身份时,更新好友关系为老师身份
+            if (ClientEnum.TEACHER == clientType) {
+
+                imUserFriendService.lambdaUpdate()
+                        .eq(ImUserFriend::getUserId, teacherId)
+                        .eq(ImUserFriend::getFriendId, userId)
+                        .eq(ImUserFriend::getFriendType, ClientEnum.STUDENT)
+                        .set(ImUserFriend::getFriendType, ClientEnum.TEACHER);
+            }
+        }
 
         try {
 
@@ -298,7 +319,52 @@ public class ImUserFriendServiceImpl extends ServiceImpl<ImUserFriendDao, ImUser
         return new String(encoder.encode((baos.toByteArray())));
     }
 
+    /**
+     * 用户IM好友列表
+     *
+     * @param clientType 客户端类型
+     * @param userId 用户ID
+     * @param paramMap   Map<String, Object>
+     * @return List<ImUserWrapper.ImUserFriend>
+     */
+    @Override
+    public List<ImUserWrapper.ImUserFriend> findUserAllImFriendInfo(ClientEnum clientType, Long userId, Map<String, Object> paramMap) {
+
+        // 用户好友匹配条件
+        Object search = paramMap.get("search");
+
+        // 查询用户好友列表
+        List<ImUserFriend> records = lambdaQuery()
+                .eq(ImUserFriend::getUserId, userId)
+                .and(Objects.nonNull(search) && StringUtils.isNotEmpty(search.toString()),
+                        e -> e.eq(ImUserFriend::getFriendId, search).or().like(ImUserFriend::getFriendNickname, search))
+                .orderByDesc(ImUserFriend::getId).list();
+
+        List<ImUserWrapper.ImUserFriend> userFriends = JSON.parseArray(JSON.toJSONString(records), ImUserWrapper.ImUserFriend.class);
+
+        for (ImUserWrapper.ImUserFriend item : userFriends) {
+
+            switch (clientType) {
+                case TEACHER:
+                    {
+                        // 老师查询学生好友
+                        item.friendType(Optional.ofNullable(item.getFriendType()).orElse(ClientEnum.STUDENT))
+                                .setImFriendId(MessageFormat.format("{0}:{1}", String.valueOf(item.getFriendId()), ClientEnum.STUDENT.name()));
+                    }
+                    break;
+                case STUDENT:
+                    {
+                        // 查询学生老师好友
+                        item.friendType(Optional.ofNullable(item.getFriendType()).orElse(ClientEnum.TEACHER))
+                                .setImFriendId(MessageFormat.format("{0}", String.valueOf(item.getFriendId())));
+                    }
+                    break;
+                default:
+                    break;
+            }
+        }
 
-
+        return userFriends;
+    }
 }
 

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/im/ImUserFriendVO.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.vo.im;
 
 import com.alibaba.fastjson.JSON;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.ImGroupMemberRoleType;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -36,6 +37,12 @@ public class ImUserFriendVO {
         @ApiModelProperty(value = "融云好友编号")
         private String imFriendId;
 
+        @ApiModelProperty(value = "好友身份")
+        private ClientEnum friendType;
+
+        @ApiModelProperty(value = "好友身份")
+        private ClientEnum roleType;
+
         @ApiModelProperty(value = "好友头像")
         private String friendAvatar;
 
@@ -60,6 +67,10 @@ public class ImUserFriendVO {
 
             return Optional.ofNullable(getImFriendId()).orElse(friendId);
         }
+
+        public ClientEnum getRoleType() {
+            return getFriendType();
+        }
     }
 
     /**

+ 73 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/im/ImUserWrapper.java

@@ -0,0 +1,73 @@
+package com.yonge.cooleshow.biz.dal.wrapper.im;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.MK;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * Created by Eric.Shang on 2022/10/17.
+ */
+public class ImUserWrapper {
+
+    /**
+     * IM好友用户列表
+     */
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class ImUserFriend implements Serializable {
+
+        @ApiModelProperty(value = "主键;")
+        private Long id;
+
+        @ApiModelProperty(value = "当前用户编号")
+        private Long userId;
+
+        @ApiModelProperty(value = "好友编号")
+        private Long friendId;
+
+        @ApiModelProperty(value = "IM用户ID")
+        private String imFriendId;
+
+        @ApiModelProperty(value = "好友头像")
+        private String friendAvatar;
+
+        @ApiModelProperty(value = "好友昵称")
+        private String friendNickname;
+
+        @ApiModelProperty(value = "备注")
+        private String memo;
+
+        @ApiModelProperty(value = "创建时间;")
+        @JsonFormat(pattern = MK.TIME_PATTERN, timezone = MK.TIME_ZONE)
+        private Date createTime;
+
+        @ApiModelProperty(value = "修改时间;")
+        @JsonFormat(pattern = MK.TIME_PATTERN, timezone = MK.TIME_ZONE)
+        private Date updateTime;
+
+        @ApiModelProperty("好友身份")
+        private ClientEnum roleType;
+
+        @ApiModelProperty(value = "好友身份")
+        private ClientEnum friendType;
+
+        public ClientEnum getRoleType() {
+            return getFriendType();
+        }
+
+
+        public ImUserFriend friendType(ClientEnum friendType) {
+            this.friendType = friendType;
+            return this;
+        }
+    }
+
+}

+ 17 - 3
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/ImUserFriendController.java

@@ -11,6 +11,7 @@ import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.MK;
 import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
 import com.yonge.cooleshow.biz.dal.vo.im.ImUserFriendVO;
+import com.yonge.cooleshow.biz.dal.wrapper.im.ImUserWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import io.swagger.annotations.*;
@@ -45,9 +46,18 @@ public class ImUserFriendController extends BaseController {
     })
     @ApiOperation("获取通讯录成员列表")
     @PostMapping(value = "/queryAll")
-    public HttpResponseResult<List<ImUserFriend>> queryAll(@RequestBody Map<String,Object> params) throws Exception {
+    public HttpResponseResult<List<ImUserWrapper.ImUserFriend>> queryAll(@RequestBody Map<String,Object> params) throws Exception {
+
+        // 用户ID
         SysUser sysUser = sysUserFeignService.queryUserInfo();
-        Object search = params.get("search");
+        if (Objects.isNull(sysUser)) {
+            return failed("请登录");
+        }
+
+        // 学生好友列表
+        List<ImUserWrapper.ImUserFriend> userFriends = imUserFriendService.findUserAllImFriendInfo(ClientEnum.STUDENT, sysUser.getId(), params);
+
+        /*Object search = params.get("search");
         List<ImUserFriend> userFriends = imUserFriendService.getBaseMapper().selectList(Wrappers.<ImUserFriend>query().lambda()
                 .and(Objects.nonNull(search) && StringUtils.isNotEmpty(search.toString()),
                         e->e.eq(ImUserFriend::getFriendId, search).or()
@@ -58,7 +68,7 @@ public class ImUserFriendController extends BaseController {
             // 学生目前添加好友都为老师
             item.clientType(ClientEnum.TEACHER)
                     .setImFriendId(MessageFormat.format("{0}", String.valueOf(item.getFriendId())));
-        }
+        }*/
 
         return succeed(userFriends);
     }
@@ -77,6 +87,10 @@ public class ImUserFriendController extends BaseController {
             return failed("当前好友不存在");
         }
 
+        if (Objects.isNull(userFriend.getFriendType())) {
+            userFriend.setFriendType(ClientEnum.TEACHER);
+        }
+
         return succeed(ImUserFriendVO.ImUserFriend.from(JSON.toJSONString(userFriend)));
     }
 }

+ 16 - 4
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImUserFriendController.java

@@ -10,6 +10,7 @@ import com.yonge.cooleshow.biz.dal.enums.MK;
 import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
 import com.yonge.cooleshow.biz.dal.service.SysUserService;
 import com.yonge.cooleshow.biz.dal.vo.im.ImUserFriendVO;
+import com.yonge.cooleshow.biz.dal.wrapper.im.ImUserWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import io.swagger.annotations.*;
@@ -45,8 +46,15 @@ public class ImUserFriendController extends BaseController {
     })
     @ApiOperation("获取通讯录成员列表")
     @PostMapping(value = "/queryAll")
-    public HttpResponseResult<List<ImUserFriend>> queryAll(@RequestBody Map<String, Object> params) {
-        Object search = params.get("search");
+    public HttpResponseResult<List<ImUserWrapper.ImUserFriend>> queryAll(@RequestBody Map<String, Object> params) {
+
+        // 用户ID
+        Long userId = sysUserService.getUserId();
+
+        // 学生好友列表
+        List<ImUserWrapper.ImUserFriend> userFriends = imUserFriendService.findUserAllImFriendInfo(ClientEnum.TEACHER, userId, params);
+
+        /*Object search = params.get("search");
         List<ImUserFriend> record = imUserFriendService.list(Wrappers.<ImUserFriend>query().lambda()
                 .eq(ImUserFriend::getUserId, sysUserService.getUserId())
                 .and(Objects.nonNull(search) && StringUtils.isNotEmpty(search.toString()),
@@ -59,9 +67,9 @@ public class ImUserFriendController extends BaseController {
             // 老师端添加好友,可能为老师客服或者学生
             item.clientType(ClientEnum.STUDENT)
                     .setImFriendId(MessageFormat.format("{0}:{1}", String.valueOf(item.getFriendId()), ClientEnum.STUDENT.name()));
-        }
+        }*/
 
-        return succeed(record);
+        return succeed(userFriends);
     }
 
     @ApiOperation("获取好友详情")
@@ -78,6 +86,10 @@ public class ImUserFriendController extends BaseController {
             return failed("当前好友不存在");
         }
 
+        if (Objects.isNull(userFriend.getFriendType())) {
+            userFriend.setFriendType(ClientEnum.STUDENT);
+        }
+
         return succeed(ImUserFriendVO.ImUserFriend.from(JSON.toJSONString(userFriend)));
     }