Explorar o código

feat:获取用户加入的群组、会员课程一键发群

caoliqin hai 1 mes
pai
achega
455231a931

+ 18 - 0
fs-company-app/src/main/java/com/fs/app/controller/FsUserCourseVideoController.java

@@ -22,6 +22,7 @@ import com.fs.course.dto.BatchUrgeCourseDTO;
 import com.fs.course.param.FsCourseLinkCreateParam;
 import com.fs.course.param.FsCourseWatchLogListParam;
 import com.fs.course.param.FsWatchCourseTimeParam;
+import com.fs.course.param.SendCourseRequestParam;
 import com.fs.course.param.newfs.FsCourseSortLinkParam;
 import com.fs.course.param.newfs.FsCourseWatchAppParam;
 import com.fs.course.param.newfs.FsUserCourseListParam;
@@ -410,4 +411,21 @@ public class FsUserCourseVideoController extends AppBaseController {
         return imMsgSendLogService.deleteFsImMsgSendLogAndDetail(logId);
     }
 
+    @ApiOperation("会员课程一键发群")
+    @PostMapping("/sendCourseToGroup")
+    public OpenImResponseDTO sendCourseToGroup(@RequestBody SendCourseRequestParam sendCourseRequestParam) {
+        // 生成看课短链
+        FsCourseLinkCreateParam fsCourseLinkCreateParam = new FsCourseLinkCreateParam();
+        BeanUtils.copyProperties(sendCourseRequestParam, fsCourseLinkCreateParam);
+        R courseSortLink = fsUserCourseService.createAppCourseSortLink(fsCourseLinkCreateParam);
+        String url = courseSortLink.get("url").toString();
+        sendCourseRequestParam.setUrl(url);
+        try {
+            return openIMService.sendCourseToGroup(sendCourseRequestParam);
+        } catch (Exception e) {
+            log.error("会员课程一键发群异常:", e);
+        }
+        return null;
+    }
+
 }

+ 41 - 0
fs-service/src/main/java/com/fs/course/param/SendCourseRequestParam.java

@@ -0,0 +1,41 @@
+package com.fs.course.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author caoliqin
+ * 一键发课到群里-前端入参
+ */
+@Data
+public class SendCourseRequestParam {
+    @ApiModelProperty(value = "销售id(发送人id)", required = true)
+    private Long companyUserId;
+
+    @ApiModelProperty(value = "群id(接收人id)", required = true)
+    private Long groupId;
+
+    @ApiModelProperty(value = "标题", required = true)
+    private String title;
+
+    @ApiModelProperty(value = "公司id,生成短链需要", required = true)
+    private Long companyId;
+
+    @ApiModelProperty(value = "营期id,生成短链需要", required = true)
+    private Long periodId;
+
+    @ApiModelProperty(value = "课程id,生成短链需要", required = true)
+    private Long courseId;
+
+    @ApiModelProperty(value = "视频id,生成短链需要", required = true)
+    private Long videoId;
+
+    @ApiModelProperty(value = "项目id,生成短链需要", required = true)
+    private Long projectId;
+
+    /**
+     *  看课短链
+     */
+    private String url;
+
+}

+ 18 - 0
fs-service/src/main/java/com/fs/im/service/OpenIMService.java

@@ -5,6 +5,7 @@ import com.fs.common.core.domain.R;
 import com.fs.company.domain.CompanyUser;
 import com.fs.course.dto.BatchSendCourseDTO;
 import com.fs.course.dto.BatchUrgeCourseDTO;
+import com.fs.course.param.SendCourseRequestParam;
 import com.fs.im.domain.FsImMsgSendDetail;
 import com.fs.im.domain.FsImMsgSendLog;
 import com.fs.im.dto.OpenImBatchMsgDTO;
@@ -91,4 +92,21 @@ public interface OpenIMService {
 
     OpenImResponseDTO getFriendList(String userID, int pageNumber, int showNumber,Integer applyType);
 
+    /**
+     * 获取指定用户已加入的群组
+     * @param userID 	用户ID
+     * @param pageNumber 当前页码,从1开始
+     * @param showNumber 当前页请求数量
+     * @return
+     */
+    OpenImResponseDTO getJoinedGroupList(String userID, int pageNumber, int showNumber);
+
+    /**
+     * 发送课程到群
+     * @param sendCourseRequestParam 参数
+     * @return
+     * @throws JsonProcessingException
+     */
+    OpenImResponseDTO sendCourseToGroup(SendCourseRequestParam sendCourseRequestParam) throws JsonProcessingException;
+
 }

+ 71 - 1
fs-service/src/main/java/com/fs/im/service/impl/OpenIMServiceImpl.java

@@ -27,6 +27,7 @@ import com.fs.course.dto.BatchUrgeCourseDTO;
 import com.fs.course.mapper.FsCourseWatchLogMapper;
 import com.fs.course.mapper.FsUserCompanyUserMapper;
 import com.fs.course.mapper.FsUserCourseMapper;
+import com.fs.course.param.SendCourseRequestParam;
 import com.fs.fastGpt.service.AiHookService;
 import com.fs.his.domain.FsDoctor;
 import com.fs.his.domain.FsFollow;
@@ -1173,7 +1174,7 @@ public class OpenIMServiceImpl implements OpenIMService {
             extension.setAppRealLink(batchSendCourseDTO.getUrl());
             extension.setCourseUrl(courseUrl);
             extension.setSendTime(new Date(planSendTimeStamp));
-            openImBatchMsgDTO.setSendTime(planSendTimeStamp);
+//            openImBatchMsgDTO.setSendTime(planSendTimeStamp);
 
             PayloadDTO payload = new PayloadDTO();
             payload.setData("course");
@@ -1669,4 +1670,73 @@ public class OpenIMServiceImpl implements OpenIMService {
         return null;
     }
 
+    @Override
+    public OpenImResponseDTO getJoinedGroupList(String userID, int pageNumber, int showNumber) {
+        String adminToken = getAdminToken();
+        log.info("已获取到管理token:{}", adminToken);
+        JSONObject jsonObject = new JSONObject();
+        Map<String,Object> map = new HashMap<>();
+        map.put("pageNumber", pageNumber);
+        map.put("showNumber", showNumber);
+        jsonObject.set("fromUserID",userID);
+        jsonObject.set("pagination", map);
+        String body = HttpRequest.post(IMConfig.URL+"/group/get_joined_group_list")
+                .header("operationID", String.valueOf(System.currentTimeMillis()))
+                .header("token", adminToken)
+                .body(jsonObject.toString())
+                .execute()
+                .body();
+        OpenImResponseDTO responseDTO= JSONUtil.toBean(body,OpenImResponseDTO.class);
+
+        return responseDTO;
+    }
+
+    @Override
+    public OpenImResponseDTO sendCourseToGroup(SendCourseRequestParam sendCourseRequestParam) throws JsonProcessingException {
+        ObjectMapper objectMapper = new ObjectMapper();
+        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+        try {
+            // 注册销售账号,主要是防止没有自动创建销售账号的情况
+            accountCheck("C" + sendCourseRequestParam.getCompanyUserId(), "2");
+        } catch (Exception e) {
+            log.error("异步执行IM注册/添加好友失败:", e);
+        }
+
+        FsUserCourse fsUserCourse = fsUserCourseMapper.selectFsUserCourseByCourseId(sendCourseRequestParam.getCourseId());
+        String courseUrl = fsUserCourse != null ? fsUserCourse.getImgUrl() : null;
+
+        OpenImMsgDTO.Content content = new OpenImMsgDTO.Content();
+        OpenImMsgDTO.ImData imData = new OpenImMsgDTO.ImData();
+        PayloadDTO.Extension extension = new PayloadDTO.Extension();
+        extension.setTitle(sendCourseRequestParam.getTitle());
+        extension.setAppRealLink(sendCourseRequestParam.getUrl());
+        extension.setSendTime(new Date());
+        extension.setCourseUrl(courseUrl);
+        PayloadDTO payload = new PayloadDTO();
+        payload.setData("course");
+        payload.setExtension(extension);
+        imData.setPayload(payload);
+        String imJson = objectMapper.writeValueAsString(imData);
+        content.setData(imJson);
+
+        OpenImMsgDTO.OfflinePushInfo offlinePushInfo = new OpenImMsgDTO.OfflinePushInfo();
+        offlinePushInfo.setDesc(sendCourseRequestParam.getTitle());
+        CompanyUser companyUser = companyUserMapper.selectCompanyUserById(sendCourseRequestParam.getCompanyUserId());
+        offlinePushInfo.setTitle(companyUser != null ? companyUser.getNickName(): null);
+        offlinePushInfo.setIOSBadgeCount(true);
+        offlinePushInfo.setIOSPushSound("");
+
+        OpenImMsgDTO openImMsgDTO = new OpenImMsgDTO();
+        openImMsgDTO.setOfflinePushInfo(offlinePushInfo);
+        openImMsgDTO.setContent(content);
+
+        openImMsgDTO.setSendID("C"+sendCourseRequestParam.getCompanyUserId());
+        openImMsgDTO.setGroupID(String.valueOf(sendCourseRequestParam.getGroupId()));
+        openImMsgDTO.setContentType(110);
+        openImMsgDTO.setSessionType(3); //群聊
+
+        log.info("发课程到群,参数: {}", JSON.toJSONString(openImMsgDTO));
+        return openIMSendMsg(openImMsgDTO);
+    }
+
 }

+ 26 - 8
fs-user-app/src/main/java/com/fs/app/controller/AppLoginController.java

@@ -26,6 +26,7 @@ import com.fs.his.service.IFsUserNewTaskService;
 import com.fs.his.service.IFsUserService;
 import com.fs.his.utils.ConfigUtil;
 import com.fs.his.vo.FsUserRegisterParam;
+import com.fs.im.service.OpenIMService;
 import com.fs.watch.domain.WatchDeviceSetup;
 import com.fs.watch.domain.WatchUser;
 import com.fs.watch.service.WatchUserService;
@@ -72,6 +73,10 @@ public class AppLoginController extends AppBaseController{
 
     @Autowired
     private ISmsService smsService;
+
+    @Autowired
+    private OpenIMService openIMService;
+
     @ApiOperation("注册app用户")
     @PostMapping("/register")
     @RepeatSubmit
@@ -434,10 +439,10 @@ public class AppLoginController extends AppBaseController{
             return R.error("验证码错误");
         }
         updateExistingUserJpushId(user.get(0), map.get("jpushId"));
-        
+
         // 更新登录设备信息
         updateLoginDevice(user.get(0).getUserId(), map.get("loginDevice"), map.get("source"));
-        
+
         return generateTokenAndReturn(user.get(0));
     }
 
@@ -702,10 +707,10 @@ public class AppLoginController extends AppBaseController{
             if (!Md5Utils.hash(param.getPassword()).equals(user.getPassword())) {
                 return R.error("密码不正确");
             }
-            
+
             // 更新登录设备信息
             updateLoginDevice(user.getUserId(), param.getLoginDevice(), param.getSource());
-            
+
             //登录成功以后写入达人表
             //fsUserTalentService.addFsUserTalent(fsUser.getUserId());
             return generateTokenAndReturn(user);
@@ -839,10 +844,10 @@ public class AppLoginController extends AppBaseController{
         }else {
             return R.ok().put("users",usersByPhone);
         }
-        
+
         // 更新登录设备信息
         updateLoginDevice(user.getUserId(), param.getLoginDevice(), param.getSource());
-        
+
         return generateTokenAndReturn(user);
     }
 
@@ -855,10 +860,10 @@ public class AppLoginController extends AppBaseController{
         if (StringUtils.isNotEmpty(param.getJpushId())){
             updateExistingUserJpushId(user, param.getJpushId());
         }
-        
+
         // 更新登录设备信息
         updateLoginDevice(user.getUserId(), param.getLoginDevice(), param.getSource());
-        
+
         return generateTokenAndReturn(user);
     }
 
@@ -987,4 +992,17 @@ public class AppLoginController extends AppBaseController{
         // 不存在,追加到末尾
         return currentAppIds + "," + newAppId;
     }
+
+    /**
+     * 获取好友申请列表
+     *
+     * @param userRequestParam
+     * @return
+     */
+    @PostMapping("/getFriendList")
+    public R getFriendList(@RequestBody UserRequestParam userRequestParam)
+    {
+        return R.ok().put("data",openIMService.getFriendList(userRequestParam.getUserID(),userRequestParam.getPagination().getPageNumber(),userRequestParam.getPagination().getShowNumber(),userRequestParam.getApplyType()));
+    }
+
 }

+ 14 - 0
fs-user-app/src/main/java/com/fs/app/controller/CompanyUserController.java

@@ -14,6 +14,7 @@ import com.fs.aiSoundReplication.service.impl.TtsServiceImpl;
 import com.fs.aiSoundReplication.util.FileToMultipartConverterUtil;
 import com.fs.app.annotation.Login;
 import com.fs.app.param.FsBindCompanyUserParam;
+import com.fs.app.param.UserRequestParam;
 import com.fs.common.annotation.Log;
 import com.fs.common.config.FSConfig;
 import com.fs.common.core.domain.AjaxResult;
@@ -49,6 +50,8 @@ import com.fs.his.service.*;
 import com.fs.his.utils.ConfigUtil;
 import com.fs.his.vo.*;
 import com.fs.hisStore.enums.SysConfigEnum;
+import com.fs.im.dto.OpenImResponseDTO;
+import com.fs.im.service.OpenIMService;
 import com.fs.qw.domain.QwUser;
 import com.fs.qw.mapper.QwUserMapper;
 import com.fs.sop.domain.QwSopTempVoice;
@@ -131,6 +134,9 @@ public class CompanyUserController extends AppBaseController {
     @Autowired
     private QwUserMapper qwUserMapper;
 
+    @Autowired
+    private OpenIMService openIMService;
+
     @PostMapping("/login")
     public R Login(@RequestBody CompanyUserLoginParam param, HttpServletRequest request) {
         try {
@@ -833,4 +839,12 @@ public class CompanyUserController extends AppBaseController {
         return voiceCloneController.getTrainingStatus(speakerId);
     }
 
+    @ApiOperation("获取指定用户已加入的群组列表")
+    @PostMapping("/getJoinedGroupList")
+    public R getJoinedGroupList(@RequestBody UserRequestParam userRequestParam)
+    {
+        OpenImResponseDTO joinedGroupList = openIMService.getJoinedGroupList(userRequestParam.getUserID(), userRequestParam.getPagination().getPageNumber(), userRequestParam.getPagination().getShowNumber());
+        return R.ok().put("data", joinedGroupList);
+    }
+
 }

+ 19 - 16
fs-user-app/src/main/java/com/fs/app/param/Pagination.java

@@ -1,5 +1,8 @@
 package com.fs.app.param;
 
+import lombok.Data;
+
+@Data
 public class Pagination {
     private int pageNumber;
     private int showNumber;
@@ -9,20 +12,20 @@ public class Pagination {
         this.showNumber = showNumber;
     }
 
-    // Getters and Setters
-    public int getPageNumber() {
-        return pageNumber;
-    }
-
-    public void setPageNumber(int pageNumber) {
-        this.pageNumber = pageNumber;
-    }
-
-    public int getShowNumber() {
-        return showNumber;
-    }
-
-    public void setShowNumber(int showNumber) {
-        this.showNumber = showNumber;
-    }
+//    // Getters and Setters
+//    public int getPageNumber() {
+//        return pageNumber;
+//    }
+//
+//    public void setPageNumber(int pageNumber) {
+//        this.pageNumber = pageNumber;
+//    }
+//
+//    public int getShowNumber() {
+//        return showNumber;
+//    }
+//
+//    public void setShowNumber(int showNumber) {
+//        this.showNumber = showNumber;
+//    }
 }