فهرست منبع

群聊人数限制

zouxuan 1 سال پیش
والد
کامیت
a3fbfbc83d
23فایلهای تغییر یافته به همراه410 افزوده شده و 199 حذف شده
  1. 36 28
      mec-application/src/main/java/com/ym/mec/student/controller/ImGroupController.java
  2. 14 3
      mec-application/src/main/java/com/ym/mec/teacher/controller/ImGroupController.java
  3. 2 0
      mec-application/src/main/java/com/ym/mec/teacher/controller/ImGroupMemberController.java
  4. 17 10
      mec-application/src/main/java/com/ym/mec/web/controller/ImGroupController.java
  5. 2 2
      mec-application/src/main/java/com/ym/mec/web/controller/ImGroupMemberController.java
  6. 62 53
      mec-application/src/main/java/com/ym/mec/web/controller/TaskController.java
  7. 14 3
      mec-application/src/main/java/com/ym/mec/web/controller/education/EduImGroupController.java
  8. 2 0
      mec-application/src/main/java/com/ym/mec/web/controller/education/EduImGroupMemberController.java
  9. 4 9
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImGroupDao.java
  10. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImGroup.java
  11. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImGroupMemberPlus.java
  12. 14 22
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImGroupPlus.java
  13. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/GroupMemberQueryInfo.java
  14. 36 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/ImGroupWrapper.java
  15. 4 10
      mec-biz/src/main/java/com/ym/mec/biz/service/ImGroupService.java
  16. 6 3
      mec-biz/src/main/java/com/ym/mec/biz/service/im/ImGroupCoreService.java
  17. 101 10
      mec-biz/src/main/java/com/ym/mec/biz/service/im/impl/ImGroupCoreServiceImpl.java
  18. 8 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupServiceImpl.java
  19. 37 27
      mec-biz/src/main/resources/config/mybatis/ImGroupMapper.xml
  20. 7 9
      mec-biz/src/main/resources/config/mybatis/ImGroupMemberMapper.xml
  21. 4 0
      mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java
  22. 5 0
      mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java
  23. 20 0
      mec-task/src/main/java/com/ym/mec/task/jobs/RetryCreateGroupTask.java

+ 36 - 28
mec-application/src/main/java/com/ym/mec/student/controller/ImGroupController.java

@@ -2,15 +2,19 @@ package com.ym.mec.student.controller;
 
 import com.google.common.collect.Lists;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
+import com.ym.mec.biz.dal.dto.ImGroupNoticeDto;
 import com.ym.mec.biz.dal.dto.ImUserFriendDto;
 import com.ym.mec.biz.dal.entity.ImGroup;
 import com.ym.mec.biz.dal.entity.ImGroupMemberPlus;
 import com.ym.mec.biz.dal.enums.im.ClientEnum;
 import com.ym.mec.biz.dal.page.ImGroupNoticeQueryInfo;
+import com.ym.mec.biz.dal.wrapper.ImGroupWrapper;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.biz.service.im.ImGroupCoreService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.vo.ImUserWrapper;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -18,11 +22,14 @@ import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.*;
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 @RequestMapping("${app-config.url.student:}/imGroup")
@@ -30,36 +37,35 @@ import java.util.stream.Collectors;
 @RestController
 public class ImGroupController extends BaseController {
 
-	@Autowired
+	@Resource
 	private ImGroupService imGroupService;
-
-	@Autowired
+	@Resource
 	private ImUserFriendService imUserFriendService;
-
-	@Autowired
+	@Resource
 	private ImGroupNoticeService imGroupNoticeService;
-
-	@Autowired
+	@Resource
 	private ImGroupMemberService imGroupMemberService;
-
-	@Autowired
+	@Resource
 	private SysUserService sysUserService;
-
-    @Autowired
+    @Resource
     private ImGroupCoreService imGroupCoreService;
-
-    @Autowired
+    @Resource
     private ImGroupMemberPlusService imGroupMemberPlusService;
 
 	@ApiOperation("查询群列表")
 	@GetMapping(value = "/queryGroupList")
-	public Object queryGroupList(String search,String groupType) {
-		return succeed(imGroupService.queryByUserId(sysUserService.getUserId(), search,groupType));
+	public HttpResponseResult<List<ImGroup>> queryGroupList(String search, String groupType) {
+		ImGroupWrapper.GroupListQuery query = new ImGroupWrapper.GroupListQuery();
+		query.setSearch(search);
+		query.setGroupType(groupType);
+		query.setUserId(sysUserService.getUserId());
+		query.setClientType(ClientEnum.STUDENT.getCode());
+		return succeed(imGroupService.queryByUserId(query));
 	}
 
 	@ApiOperation("查询群详情")
 	@GetMapping(value = "/queryGroupDetail")
-	public Object queryGroupDetail(String imGroupId) {
+	public HttpResponseResult<ImGroup> queryGroupDetail(String imGroupId) {
 		if (imGroupId.contains("S") || imGroupId.contains("I")){
 			imGroupId = imGroupId.substring(1);
 		}
@@ -110,21 +116,23 @@ public class ImGroupController extends BaseController {
 
 	@ApiOperation("查询群成员列表")
 	@GetMapping(value = "/queryGroupMemberList")
-	public Object queryGroupMemberList(String imGroupId) {
-
-		return succeed(imGroupService.queryMemberById(imGroupId));
+	public HttpResponseResult<List<ImGroupMemberDto>> queryGroupMemberList(String imGroupId) {
+		ImGroupWrapper.GroupMemberQuery query = new ImGroupWrapper.GroupMemberQuery();
+		query.setImGroupId(imGroupId);
+		query.setClientType(ClientEnum.STUDENT.getCode());
+		return succeed(imGroupService.queryMemberById(query));
 	}
 
 	@ApiOperation("查询群成员详情")
 	@GetMapping(value = "/queryGroupMemberDetail")
-	public Object queryGroupMemberDetail(String imGroupId, Integer userId) {
+	public HttpResponseResult<ImGroupMemberDto> queryGroupMemberDetail(String imGroupId, Integer userId) {
 
 		return succeed(imGroupService.queryMember(imGroupId, userId));
 	}
 
 	@ApiOperation("查询好友详情")
 	@GetMapping(value = "/queryFriendDetail")
-	public Object queryFriendDetail(Integer userId) {
+	public HttpResponseResult<ImUserFriendDto> queryFriendDetail(Integer userId) {
 		ImUserFriendDto dto = imUserFriendService.queryFriendDetail(sysUserService.getUserId(), userId);
 		if (dto == null) {
 			dto = new ImUserFriendDto();
@@ -184,7 +192,7 @@ public class ImGroupController extends BaseController {
 
 	@ApiOperation("查询好友列表")
 	@GetMapping(value = "/queryFriendList")
-	public Object queryFriendList(String search) {
+	public HttpResponseResult<List<ImUserFriendDto>> queryFriendList(String search) {
 		return succeed(imUserFriendService.queryFriendListByUserId(sysUserService.getUserId(), search));
 	}
 
@@ -221,27 +229,27 @@ public class ImGroupController extends BaseController {
 
 	@ApiOperation("查询群公告列表")
 	@GetMapping(value = "/queryNoticeList")
-	public Object queryNoticeList(ImGroupNoticeQueryInfo queryInfo) {
+	public HttpResponseResult<PageInfo<ImGroupNoticeDto>> queryNoticeList(ImGroupNoticeQueryInfo queryInfo) {
 		return succeed(imGroupNoticeService.queryPage(queryInfo));
 	}
 
 	@ApiOperation("入群")
 	@GetMapping(value = "/addGroupMember")
 	@ApiImplicitParam(name = "imGroupId", value = "群编号", required = true, dataType = "String")
-	public Object addGroupMember(String imGroupId) {
+	public HttpResponseResult<Boolean> addGroupMember(String imGroupId) {
 		return succeed(imGroupMemberService.join(imGroupId,sysUserService.getUserId(),"",false));
 	}
 
 
     @ApiOperation("注册im")
     @GetMapping(value = "/imRegister")
-    public Object imRegister(Integer userId) throws Exception {
+    public HttpResponseResult<ImGroupWrapper.ImUserInfo> imRegister(Integer userId) throws Exception {
         return succeed(imGroupCoreService.register(userId.toString(),"","测试",null));
     }
 
 	@ApiOperation("主动退群")
 	@PostMapping(value = "/quitGroup/v2")
-	public Object quitGroupV2(String imGroupId, String userId) {
+	public HttpResponseResult<Boolean> quitGroupV2(String imGroupId, String userId) {
 		List<Integer> userIds = Arrays.stream(userId.split(",")).mapToInt(Integer::valueOf).boxed().collect(Collectors.toList());
 		return succeed(imGroupMemberService.quit(imGroupId,userIds,false));
 	}

+ 14 - 3
mec-application/src/main/java/com/ym/mec/teacher/controller/ImGroupController.java

@@ -95,7 +95,12 @@ public class ImGroupController extends BaseController {
 	@ApiOperation("查询群列表")
 	@GetMapping(value = "/queryGroupList")
 	public HttpResponseResult<List<ImGroup>> queryGroupList(String search, String groupType) {
-		return succeed(imGroupService.queryByUserId(sysUserService.getUserId(), search,groupType));
+		ImGroupWrapper.GroupListQuery query = new ImGroupWrapper.GroupListQuery();
+		query.setSearch(search);
+		query.setGroupType(groupType);
+		query.setUserId(sysUserService.getUserId());
+		query.setClientType(ClientEnum.TEACHER.getCode());
+		return succeed(imGroupService.queryByUserId(query));
 	}
 
 
@@ -162,13 +167,19 @@ public class ImGroupController extends BaseController {
 	@ApiOperation("查询群成员列表")
 	@GetMapping(value = "/queryGroupMemberList")
 	public HttpResponseResult<List<ImGroupMemberDto>> queryGroupMemberList(String imGroupId) {
-		return succeed(imGroupService.queryMemberById(imGroupId));
+		ImGroupWrapper.GroupMemberQuery query = new ImGroupWrapper.GroupMemberQuery();
+		query.setImGroupId(imGroupId);
+		query.setClientType(ClientEnum.TEACHER.getCode());
+		return succeed(imGroupService.queryMemberById(query));
 	}
 
 	@ApiOperation("查询群学生列表")
 	@GetMapping(value = "/queryGroupStudentList")
 	public HttpResponseResult<List<ImGroupMemberDto>> queryGroupStudentList(String imGroupId) {
-		return succeed(imGroupService.queryMemberById(imGroupId).stream().filter(e -> StringUtils.isBlank(e.getRoleType())).collect(Collectors.toList()));
+		ImGroupWrapper.GroupMemberQuery query = new ImGroupWrapper.GroupMemberQuery();
+		query.setImGroupId(imGroupId);
+		query.setClientType(ClientEnum.TEACHER.getCode());
+		return succeed(imGroupService.queryMemberById(query).stream().filter(e -> StringUtils.isBlank(e.getRoleType())).collect(Collectors.toList()));
 	}
 
 

+ 2 - 0
mec-application/src/main/java/com/ym/mec/teacher/controller/ImGroupMemberController.java

@@ -2,6 +2,7 @@ package com.ym.mec.teacher.controller;
 
 import com.microsvc.toolkit.common.webportal.exception.BizException;
 import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
+import com.ym.mec.biz.dal.enums.ClientEnum;
 import com.ym.mec.biz.dal.page.GroupMemberQueryInfo;
 import com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper;
 import com.ym.mec.biz.service.ImGroupMemberService;
@@ -56,6 +57,7 @@ public class ImGroupMemberController extends BaseController {
 	@ApiOperation("分页查询群成员列表")
 	@PostMapping(value = "/queryGroupMemberPage")
 	public HttpResponseResult<PageInfo<ImGroupMemberDto>> queryGroupMemberPage(GroupMemberQueryInfo queryInfo) {
+		queryInfo.setClientType(ClientEnum.TEACHER.getCode());
 		return succeed(imGroupMemberService.queryGroupMemberPage(queryInfo));
 	}
 

+ 17 - 10
mec-application/src/main/java/com/ym/mec/web/controller/ImGroupController.java

@@ -38,19 +38,14 @@ public class ImGroupController extends BaseController {
 
 	@Resource
 	private ImGroupService imGroupService;
-
 	@Resource
 	private ImUserFriendService imUserFriendService;
-
 	@Resource
 	private ImGroupMemberService imGroupMemberService;
-
     @Resource
     private ImGroupMemberPlusService imGroupMemberPlusService;
-
 	@Resource
 	private ImGroupNoticeService imGroupNoticeService;
-
 	@Resource
 	private SysUserService sysUserService;
 
@@ -67,7 +62,12 @@ public class ImGroupController extends BaseController {
 	@ApiOperation("查询群列表")
 	@GetMapping(value = "/queryGroupList")
 	public HttpResponseResult<List<ImGroup>> queryGroupList(String search,String groupType) {
-		return succeed(imGroupService.queryByUserId(sysUserService.getUserId(), search,groupType));
+		ImGroupWrapper.GroupListQuery query = new ImGroupWrapper.GroupListQuery();
+		query.setSearch(search);
+		query.setGroupType(groupType);
+		query.setUserId(sysUserService.getUserId());
+		query.setClientType(ClientEnum.SYSTEM.getCode());
+		return succeed(imGroupService.queryByUserId(query));
 	}
 
 	@ApiOperation("创建群聊")
@@ -129,7 +129,7 @@ public class ImGroupController extends BaseController {
 
 	@ApiOperation("修改群信息")
 	@PostMapping(value = "/updateImGroup")
-	public HttpResponseResult updateImGroup(@RequestBody ImGroup imGroup) {
+	public HttpResponseResult<Object> updateImGroup(@RequestBody ImGroup imGroup) {
 		imGroup.setUpdateTime(new Date());
 		imGroupService.updateImGroup(imGroup);
 		return succeed();
@@ -137,7 +137,7 @@ public class ImGroupController extends BaseController {
 
 	@ApiOperation("修改群成员信息")
 	@PostMapping(value = "/updateNickName")
-	public HttpResponseResult updateNickName(Integer userId,String nickName) {
+	public HttpResponseResult<Object> updateNickName(Integer userId, String nickName) {
 		imGroupService.updateNickName1(userId,nickName);
 		return succeed();
 	}
@@ -145,13 +145,20 @@ public class ImGroupController extends BaseController {
 	@ApiOperation("查询群成员列表")
 	@GetMapping(value = "/queryGroupMemberList")
 	public HttpResponseResult<List<ImGroupMemberDto>> queryGroupMemberList(String imGroupId,String search) {
-		return succeed(imGroupService.queryMemberById(imGroupId,search));
+		ImGroupWrapper.GroupMemberQuery query = new ImGroupWrapper.GroupMemberQuery();
+		query.setImGroupId(imGroupId);
+		query.setSearch(search);
+		query.setClientType(ClientEnum.SYSTEM.getCode());
+		return succeed(imGroupService.queryMemberById(query));
 	}
 
 	@ApiOperation("查询群学生列表")
 	@GetMapping(value = "/queryGroupStudentList")
 	public HttpResponseResult<List<ImGroupMemberDto>> queryGroupStudentList(String imGroupId) {
-		return succeed(imGroupService.queryMemberById(imGroupId).stream().filter(e -> StringUtils.isBlank(e.getRoleType())).collect(Collectors.toList()));
+		ImGroupWrapper.GroupMemberQuery query = new ImGroupWrapper.GroupMemberQuery();
+		query.setImGroupId(imGroupId);
+		query.setClientType(ClientEnum.SYSTEM.getCode());
+		return succeed(imGroupService.queryMemberById(query).stream().filter(e -> StringUtils.isBlank(e.getRoleType())).collect(Collectors.toList()));
 	}
 
 	@ApiOperation("查询群成员详情")

+ 2 - 2
mec-application/src/main/java/com/ym/mec/web/controller/ImGroupMemberController.java

@@ -2,6 +2,7 @@ package com.ym.mec.web.controller;
 
 import com.microsvc.toolkit.common.webportal.exception.BizException;
 import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
+import com.ym.mec.biz.dal.enums.ClientEnum;
 import com.ym.mec.biz.dal.enums.im.EImGroupRoleType;
 import com.ym.mec.biz.dal.page.GroupMemberQueryInfo;
 import com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper;
@@ -20,9 +21,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
 import java.util.List;
-import java.util.Optional;
 import java.util.stream.Collectors;
 
 @RequestMapping("${app-config.url.web:}/imGroupMember")
@@ -77,6 +76,7 @@ public class ImGroupMemberController extends BaseController {
 	@ApiOperation("分页查询群成员列表")
 	@PostMapping(value = "/queryGroupMemberPage")
 	public HttpResponseResult<PageInfo<ImGroupMemberDto>> queryGroupMemberPage(GroupMemberQueryInfo queryInfo) {
+		queryInfo.setClientType(ClientEnum.SYSTEM.getCode());
 		return succeed(imGroupMemberService.queryGroupMemberPage(queryInfo));
 	}
 

+ 62 - 53
mec-application/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -12,6 +12,7 @@ import com.ym.mec.biz.dal.entity.MusicGroupSchoolTermCourseDetail;
 import com.ym.mec.biz.dal.entity.TenantInfo;
 import com.ym.mec.biz.event.source.CourseEventSource;
 import com.ym.mec.biz.service.*;
+import com.ym.mec.biz.service.im.ImGroupCoreService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.im.ImFeignService;
@@ -24,11 +25,11 @@ import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.redisson.api.RBucket;
 import org.redisson.api.RedissonClient;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
 import java.io.File;
 import java.net.URL;
 import java.util.Date;
@@ -40,110 +41,118 @@ import java.util.concurrent.TimeUnit;
 @Slf4j
 public class TaskController extends BaseController {
 
-	@Autowired
+	@Resource
 	private MusicGroupStudentFeeService musicGroupStudentFeeService;
-	@Autowired
+	@Resource
 	private VipGroupService vipGroupService;
-	@Autowired
+	@Resource
 	private CourseScheduleService courseScheduleService;
-	@Autowired
+	@Resource
 	private TeacherAttendanceService teacherAttendanceService;
-	@Autowired
+	@Resource
 	private CourseScheduleTeacherSalaryService courseScheduleTeacherSalaryService;
-	@Autowired
+	@Resource
 	private StudentCourseHomeworkService studentCourseHomeworkService;
-	@Autowired
+	@Resource
 	private CourseHomeworkService courseHomeworkService;
-	@Autowired
+	@Resource
 	private StudentPaymentOrderService studentPaymentOrderService;
-	@Autowired
+	@Resource
 	private TeacherCourseStatisticsService teacherCourseStatisticsService;
-	@Autowired
+	@Resource
 	private PracticeGroupService practiceGroupService;
-	@Autowired
+	@Resource
 	private CourseScheduleEvaluateService courseScheduleEvaluateService;
-	@Autowired
+	@Resource
 	private CourseReviewService courseReviewService;
-	@Autowired
+	@Resource
 	private CoursesGroupService coursesGroupService;
-	@Autowired
+	@Resource
 	private ExtracurricularExercisesService extracurricularExercisesService;
-	@Autowired
+	@Resource
 	private StudentService studentService;
-	@Autowired
+	@Resource
 	private MusicGroupPaymentCalenderService musicGroupPaymentCalenderService;
-	@Autowired
+	@Resource
 	private MusicGroupPaymentCalenderDetailService musicGroupPaymentCalenderDetailService;
-	@Autowired
+	@Resource
 	private StudentServeService studentServeService;
-	@Autowired
+	@Resource
 	private OperatingReportService operatingReportService;
-	@Autowired
+	@Resource
 	private GoodsService goodsService;
-	@Autowired
+	@Resource
 	private StudentGoodsSellService studentGoodsSellService;
-	@Autowired
+	@Resource
 	private SysMessageService sysMessageService;
-	@Autowired
+	@Resource
 	private CourseEventSource courseEventSource;
-	@Autowired
+	@Resource
 	private CourseScheduleStatisticsService courseScheduleStatisticsService;
-	@Autowired
+	@Resource
 	private RedissonClient redissonClient;
-	@Autowired
+	@Resource
 	private IndexBaseMonthDataService indexBaseMonthDataService;
-	@Autowired
+	@Resource
 	private InspectionItemPlanService inspectionItemPlanService;
-	@Autowired
+	@Resource
 	private StudentInstrumentService studentInstrumentService;
-	@Autowired
+	@Resource
 	private HistoryMessageService historyMessageService;
-	@Autowired
+	@Resource
 	private ImFeignService imFeignService;
-	@Autowired
+	@Resource
 	private IndexErrDataRecordService indexErrDataRecordService;
-	@Autowired
+	@Resource
 	private ClassGroupService classGroupService;
-	@Autowired
+	@Resource
 	private MusicGroupSchoolTermCourseDetailDao musicGroupSchoolTermCourseDetailDao;
-	@Autowired
+	@Resource
 	private MusicGroupSchoolTermCourseDetailService musicGroupSchoolTermCourseDetailService;
-	@Autowired
+	@Resource
 	private SysMusicCompareRecordService sysMusicCompareRecordService;
-	@Autowired
+	@Resource
 	private TenantInfoService tenantInfoService;
-    @Autowired
+    @Resource
     private TenantOrderRecordService tenantOrderRecordService;
-	@Autowired
+	@Resource
 	private AppRedemptionCodeService appRedemptionCodeService;
-	@Autowired
+	@Resource
 	private TeacherContractsService teacherContractsService;
-    @Autowired
+    @Resource
     private ImLiveBroadcastRoomService imLiveBroadcastRoomService;
-	@Autowired
+	@Resource
 	private StudentStatisticsService studentStatisticsService;
-	@Autowired
+	@Resource
 	private ImSendGroupMessageService imSendGroupMessageService;
-    @Autowired
+    @Resource
     private TempLittleArtistTrainingCampService tempLittleArtistTrainingCampService;
-    @Autowired
+    @Resource
     private OperatingReportNewService operatingReportNewService;
-    @Autowired
+    @Resource
     private CooperationShareProfitService cooperationShareProfitService;
-    @Autowired
+    @Resource
     private StudentTeacherMapperService studentTeacherMapperService;
-    @Autowired
+    @Resource
     private TeacherCloudCourseReportService teacherCloudCourseReportService;
-    @Autowired
+    @Resource
     private LessonExaminationService lessonExaminationService;
-    @Autowired
+    @Resource
     private DegreeService degreeService;
-	@Autowired
+	@Resource
 	private ImPluginContext imPluginContext;
-    @Autowired
+    @Resource
     private UserMusicService userMusicService;
-    @Autowired
+    @Resource
     private MusicGroupPaymentCalenderRepairService musicGroupPaymentCalenderRepairService;
+    @Resource
+    private ImGroupCoreService imGroupCoreService;
+
+	//每天早上6点,将历史创建失败的群聊重新创建、加入失败的群聊重新加入
+	@GetMapping(value = "/retryCreateGroup")
+	public void retryCreateGroup(){
+		imGroupCoreService.retryCreateGroup();
+	}
 
 	@GetMapping(value = "/initSysMusicCompareDayData")
 	public void initSysMusicCompareDayData(){

+ 14 - 3
mec-application/src/main/java/com/ym/mec/web/controller/education/EduImGroupController.java

@@ -94,7 +94,12 @@ public class EduImGroupController extends BaseController {
 	@ApiOperation("查询群列表")
 	@GetMapping(value = "/queryGroupList")
 	public HttpResponseResult<List<ImGroup>> queryGroupList(String search, String groupType) {
-		return succeed(imGroupService.queryByUserId(sysUserService.getUserId(), search,groupType));
+		ImGroupWrapper.GroupListQuery query = new ImGroupWrapper.GroupListQuery();
+		query.setSearch(search);
+		query.setGroupType(groupType);
+		query.setUserId(sysUserService.getUserId());
+		query.setClientType(ClientEnum.SCHOOL.getCode());
+		return succeed(imGroupService.queryByUserId(query));
 	}
 
 
@@ -161,13 +166,19 @@ public class EduImGroupController extends BaseController {
 	@ApiOperation("查询群成员列表")
 	@GetMapping(value = "/queryGroupMemberList")
 	public HttpResponseResult<List<ImGroupMemberDto>> queryGroupMemberList(String imGroupId) {
-		return succeed(imGroupService.queryMemberById(imGroupId));
+		ImGroupWrapper.GroupMemberQuery query = new ImGroupWrapper.GroupMemberQuery();
+		query.setImGroupId(imGroupId);
+		query.setClientType(ClientEnum.SCHOOL.getCode());
+		return succeed(imGroupService.queryMemberById(query));
 	}
 
 	@ApiOperation("查询群学生列表")
 	@GetMapping(value = "/queryGroupStudentList")
 	public HttpResponseResult<List<ImGroupMemberDto>> queryGroupStudentList(String imGroupId) {
-		return succeed(imGroupService.queryMemberById(imGroupId).stream().filter(e -> StringUtils.isBlank(e.getRoleType())).collect(Collectors.toList()));
+		ImGroupWrapper.GroupMemberQuery query = new ImGroupWrapper.GroupMemberQuery();
+		query.setImGroupId(imGroupId);
+		query.setClientType(ClientEnum.SCHOOL.getCode());
+		return succeed(imGroupService.queryMemberById(query).stream().filter(e -> StringUtils.isBlank(e.getRoleType())).collect(Collectors.toList()));
 	}
 
 

+ 2 - 0
mec-application/src/main/java/com/ym/mec/web/controller/education/EduImGroupMemberController.java

@@ -2,6 +2,7 @@ package com.ym.mec.web.controller.education;
 
 import com.microsvc.toolkit.common.webportal.exception.BizException;
 import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
+import com.ym.mec.biz.dal.enums.ClientEnum;
 import com.ym.mec.biz.dal.page.GroupMemberQueryInfo;
 import com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper;
 import com.ym.mec.biz.service.ImGroupMemberService;
@@ -56,6 +57,7 @@ public class EduImGroupMemberController extends BaseController {
 	@ApiOperation("分页查询群成员列表")
 	@PostMapping(value = "/queryGroupMemberPage")
 	public HttpResponseResult<PageInfo<ImGroupMemberDto>> queryGroupMemberPage(GroupMemberQueryInfo queryInfo) {
+		queryInfo.setClientType(ClientEnum.SCHOOL.getCode());
 		return succeed(imGroupMemberService.queryGroupMemberPage(queryInfo));
 	}
 

+ 4 - 9
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImGroupDao.java

@@ -10,7 +10,6 @@ import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImGroupModel;
 import org.apache.ibatis.annotations.Param;
 
-import java.util.Collection;
 import java.util.List;
 
 public interface ImGroupDao extends BaseDAO<String, ImGroup> {
@@ -20,22 +19,18 @@ public interface ImGroupDao extends BaseDAO<String, ImGroup> {
     /**
      * 查询用户所在的群列表
      *
-     * @param userId
-     * @param search
+     * @param query
      * @return
      */
-    List<ImGroup> queryByUserId(@Param("userId") Integer userId,
-                                @Param("search") String search,
-                                @Param("groupType") String groupType);
+    List<ImGroup> queryByUserId(@Param("query") ImGroupWrapper.GroupListQuery query);
 
     /**
      * 查询群成员列表
      *
-     * @param imGroupId
-     * @param search
+     * @param query
      * @return
      */
-    List<ImGroupMemberDto> queryMemberById(@Param("imGroupId") String imGroupId, @Param("search") String search);
+    List<ImGroupMemberDto> queryMemberById(@Param("query") ImGroupWrapper.GroupMemberQuery query);
 
     ImGroupMemberDto queryMember(@Param("imGroupId") String imGroupId, @Param("userId") Integer userId);
 

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImGroup.java

@@ -42,6 +42,10 @@ public class ImGroup extends BaseEntity {
 
 	private Boolean importFlag;
 
+	@Getter
+	@ApiModelProperty(value = "是否创建第三方群")
+	private Boolean createFlag = true;
+
 	public enum GroupTypeEnum implements BaseEnum<String,GroupTypeEnum> {
 		NORMAL("NORMAL", "普通班级", "https://oss.dayaedu.com/default-images/mec/NORMAL.png"),
 		MIX("MIX", "合奏班级", "https://oss.dayaedu.com/default-images/mec/NORMAL.png"),
@@ -97,6 +101,10 @@ public class ImGroup extends BaseEntity {
 		}
 	}
 
+	public void setCreateFlag(Boolean createFlag) {
+		this.createFlag = createFlag;
+	}
+
 	public String getConfigJson() {
 		if (StringUtils.isEmpty(configJson)){
 			return "{mute: false}";

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImGroupMemberPlus.java

@@ -66,4 +66,8 @@ public class ImGroupMemberPlus implements Serializable {
 
     @TableField(value = "tenant_id_")
     private Integer tenantId;
+
+    @ApiModelProperty(value = "是否加入第三方群")
+    @TableField(value = "join_group_")
+    private Boolean joinGroup = true;
 }

+ 14 - 22
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImGroupPlus.java

@@ -17,9 +17,6 @@ import java.io.Serializable;
 @TableName("im_group")
 public class ImGroupPlus implements Serializable {
 
-    /**
-     *
-     */
     @TableId(value = "id_")
     private String id;
 
@@ -27,56 +24,51 @@ public class ImGroupPlus implements Serializable {
     @TableField(value = "school_id_")
     private Long schoolId;
 
-    /**
-     * 群名称
-     */
+    @ApiModelProperty("群名称")
     @TableField(value = "name_")
     private String name;
 
-    /**
-     * 群介绍
-     */
+    @ApiModelProperty("群介绍")
     @TableField(value = "introduce_")
     private String introduce;
 
-    /**
-     * 群成员数
-     */
+    @ApiModelProperty("群成员数")
     @TableField(value = "member_num_")
     private Integer memberNum;
 
-    /**
-     * 群备注
-     */
+    @ApiModelProperty("群备注")
     @TableField(value = "memo_")
     private String memo;
 
-    /**
-     * 群标签
-     */
+    @ApiModelProperty("群标签")
     @TableField(value = "tags_")
     private String tags;
 
     @TableField(value = "img_")
     private String img;
 
-    /**
-     * 乐团群 MUSIC,班级群 CLASS,训练营 TRAINING 学校SCHOOL
-     */
+    @ApiModelProperty("乐团群 MUSIC,班级群 CLASS,训练营 TRAINING 学校SCHOOL")
     @TableField(value = "type_")
     private String type;
 
     @TableField(value = "tenant_id_")
     private Integer tenantId;
 
+    @ApiModelProperty(value = "是否创建第三方群")
+    @TableField(value = "crete_flag_")
+    private Boolean createFlag = true;
 
     @TableField(value = "import_flag_")
     private Boolean importFlag;
 
-    //群类型
+    @ApiModelProperty(value = "群类型")
     @TableField(value = "group_type_")
     private ImGroup.GroupTypeEnum groupType;
 
+    @ApiModelProperty(value = "创建人")
+    @TableField(value = "create_user_")
+    private String createUserId;
+
     public ImGroup.GroupTypeEnum getGroupType() {
         return groupType;
     }

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/GroupMemberQueryInfo.java

@@ -21,4 +21,7 @@ public class GroupMemberQueryInfo extends QueryInfo {
 
     @ApiModelProperty(value = "是否加入第三方群")
     private Boolean joinGroup;
+
+    @ApiModelProperty(value = "客户端类型")
+    private String clientType;
 }

+ 36 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/ImGroupWrapper.java

@@ -191,4 +191,40 @@ public class ImGroupWrapper {
         @ApiModelProperty("当前群主")
         private String currentOwner;
     }
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("查询群列表")
+    public static class GroupListQuery {
+        @ApiModelProperty(value = "用户编号",required = true)
+        private Integer userId;
+
+        @ApiModelProperty(value = "模糊匹配",required = true)
+        private String search;
+
+        @ApiModelProperty(value = "群类型",required = true)
+        private String groupType;
+
+        @ApiModelProperty(value = "客户端类型",required = true)
+        private String clientType;
+    }
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("查询群成员列表")
+    public static class GroupMemberQuery {
+
+        @ApiModelProperty(value = "模糊匹配",required = true)
+        private String search;
+
+        @ApiModelProperty(value = "群编号",required = true)
+        private String imGroupId;
+
+        @ApiModelProperty(value = "客户端类型",required = true)
+        private String clientType;
+    }
 }

+ 4 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/ImGroupService.java

@@ -51,19 +51,13 @@ public interface ImGroupService extends BaseService<String, ImGroup> {
 
     /**
      * 查询用户所在的群列表
-     * @param userId
-     * @param search
+     * @param query
      * @return
      */
-    List<ImGroup> queryByUserId(Integer userId, String search,String groupType);
+    List<ImGroup> queryByUserId(ImGroupWrapper.GroupListQuery query);
 
-    /**
-     * 查询群成员列表
-     * @param imGroupId
-     * @return
-     */
-    List<ImGroupMemberDto> queryMemberById(String imGroupId);
-    List<ImGroupMemberDto> queryMemberById(String imGroupId,String search);
+
+    List<ImGroupMemberDto> queryMemberById(ImGroupWrapper.GroupMemberQuery query);
 
     /**
      * 查询指定用户在群众的信息

+ 6 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/im/ImGroupCoreService.java

@@ -51,7 +51,7 @@ public interface ImGroupCoreService {
      * @return Boolean
      * @throws Exception Exception
      */
-    String groupCreate(ImGroupMemberWrapper.ImGroupMember groupMember, ImGroupWrapper.ImGroup imGroup) throws Exception;
+    String groupCreate(ImGroupMemberWrapper.ImGroupMember groupMember, ImGroupWrapper.ImGroup imGroup);
 
     /**
      * 群组解散
@@ -97,7 +97,7 @@ public interface ImGroupCoreService {
      * @param groupMembers List<ImGroupMemberWrapper.ImGroupMember>
      * @throws Exception Exception
      */
-    void saveImGroupMemberList(String groupId, List<ImGroupMemberWrapper.ImGroupMember> groupMembers) throws Exception;
+    void saveImGroupMemberList(String groupId, List<ImGroupMemberWrapper.ImGroupMember> groupMembers);
 
     /**
      * 群成员加入
@@ -105,7 +105,7 @@ public interface ImGroupCoreService {
      * @param groupMembers 群成员
      * @throws Exception Exception
      */
-    void groupMemberJoin(String imGroupId, List<ImGroupMemberWrapper.ImGroupMember> groupMembers) throws Exception;
+    void groupMemberJoin(String imGroupId, List<ImGroupMemberWrapper.ImGroupMember> groupMembers);
 
     /**
      * 转让群主
@@ -139,4 +139,7 @@ public interface ImGroupCoreService {
      * @return
      */
     boolean checkImUserId(String imUserId);
+
+    void retryCreateGroup();
+
 }

+ 101 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/im/impl/ImGroupCoreServiceImpl.java

@@ -50,8 +50,6 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
     private ImGroupMemberPlusService imGroupMemberPlusService;
     @Resource
     private ImGroupNoticeDao imGroupNoticeDao;
-    @Resource
-    private ImGroupMemberService imGroupMemberService;
 
     /**
      * IM 用户注册
@@ -143,7 +141,7 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
      */
     @Override
     @Transactional
-    public String groupCreate(ImGroupMemberWrapper.ImGroupMember userInfo, ImGroupWrapper.ImGroup imGroup) throws Exception {
+    public String groupCreate(ImGroupMemberWrapper.ImGroupMember userInfo, ImGroupWrapper.ImGroup imGroup){
 
         String id = Optional.ofNullable(imGroup.getId()).orElse(String.valueOf(IdWorker.getId()));
         // 生成群组ID
@@ -179,13 +177,38 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
         if (Objects.nonNull(imGroup.getGroupType())) {
             groupAvatar = imGroup.getGroupType().getAvatar();
         }
+        Boolean createFlag = true;
         // 创建IM群组
-        imPluginContext.getPluginService().groupCreate(imGroup.getGroupId(), imGroup.getName(), groupAvatar, imUserId);
+        try {
+            imPluginContext.getPluginService().groupCreate(imGroup.getGroupId(), imGroup.getName(), groupAvatar, imUserId);
+        } catch (Exception e) {
+            log.error("groupAdminCreate error", e);
+            createFlag = false;
+            //修改群状态
+            imGroupService.lambdaUpdate().eq(ImGroupPlus::getId, imGroup.getGroupId())
+                    .set(ImGroupPlus::getCreateUserId, imUserId)
+                    .set(ImGroupPlus::getCreateFlag, false).update();
+            //修改群成员状态
+            List<Long> userIds = groupMembers.stream().map(ImGroupMemberWrapper.ImGroupMember::getUserId).collect(Collectors.toList());
+            imGroupMemberPlusService.lambdaUpdate().in(ImGroupMemberPlus::getUserId, userIds)
+                    .eq(ImGroupMemberPlus::getImGroupId, imGroup.getGroupId())
+                    .set(ImGroupMemberPlus::getJoinGroup, false).update();
+        }
 
-        if (userInfo != null) {
+        //只有创建成功,才走下面的流程
+        if (createFlag && userInfo != null) {
             // 添加群成员到当前群组
             List<GroupMemberWrapper.ImGroupMember> imGroupMembers = getImGroupMembers(groupMembers);
-            imPluginContext.getPluginService().groupJoin(imGroup.getGroupId(), imGroup.getName(),imGroupMembers);
+            try {
+                imPluginContext.getPluginService().groupJoin(imGroup.getGroupId(), imGroup.getName(),imGroupMembers);
+            } catch (Exception e) {
+                log.error("groupJoin error", e);
+                //修改群成员状态
+                List<Long> userIds = groupMembers.stream().map(ImGroupMemberWrapper.ImGroupMember::getUserId).collect(Collectors.toList());
+                imGroupMemberPlusService.lambdaUpdate().in(ImGroupMemberPlus::getUserId, userIds)
+                        .eq(ImGroupMemberPlus::getImGroupId, imGroup.getGroupId())
+                        .set(ImGroupMemberPlus::getJoinGroup, false).update();
+            }
             //设置管理员
             groupMembers.stream().filter(o -> StringUtils.isNotEmpty(o.getGroupRoleType()) && !StringUtils.equals(o.getGroupRoleType(),"Member")).forEach(o -> {
                 try {
@@ -440,7 +463,7 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
      * @throws Exception Exception
      */
     @Override
-    public void saveImGroupMemberList(String imGroupId, List<ImGroupMemberWrapper.ImGroupMember> groupMembers) throws Exception {
+    public void saveImGroupMemberList(String imGroupId, List<ImGroupMemberWrapper.ImGroupMember> groupMembers) {
 
         if (CollectionUtils.isEmpty(groupMembers)) {
             // 群成员为空,直接忽略
@@ -466,7 +489,16 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
             groupMembers = groupMembers.stream().filter(ImGroupMemberWrapper.ImGroupMember::getGroupJoin).collect(Collectors.toList());
             // 添加群成员到当前群组
             List<GroupMemberWrapper.ImGroupMember> imGroupMembers = getImGroupMembers(groupMembers);
-            imPluginContext.getPluginService().groupJoin(imGroup.getId(), imGroup.getName(), imGroupMembers);
+            try {
+                imPluginContext.getPluginService().groupJoin(imGroup.getId(), imGroup.getName(), imGroupMembers);
+            } catch (Exception e) {
+                log.error("groupJoin error", e);
+                //修改群成员状态
+                List<Long> userIds = groupMembers.stream().map(ImGroupMemberWrapper.ImGroupMember::getUserId).collect(Collectors.toList());
+                imGroupMemberPlusService.lambdaUpdate().in(ImGroupMemberPlus::getUserId, userIds)
+                        .eq(ImGroupMemberPlus::getImGroupId, imGroup.getId())
+                        .set(ImGroupMemberPlus::getJoinGroup, false).update();
+            }
             //设置管理员
             groupMembers.stream().filter(o -> StringUtils.isNotEmpty(o.getGroupRoleType()) && !StringUtils.equals(o.getGroupRoleType(),"Member")).forEach(o -> {
                 try {
@@ -498,7 +530,7 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
      * @throws Exception Exception
      */
     @Override
-    public void groupMemberJoin(String imGroupId, List<ImGroupMemberWrapper.ImGroupMember> groupMembers) throws Exception {
+    public void groupMemberJoin(String imGroupId, List<ImGroupMemberWrapper.ImGroupMember> groupMembers) {
 
         // 群组信息
         ImGroupPlus imGroup = imGroupService.lambdaQuery().eq(ImGroupPlus::getId, imGroupId).last("LIMIT 1").one();
@@ -512,7 +544,16 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
         }
         // 添加群成员到当前群组
         List<GroupMemberWrapper.ImGroupMember> imGroupMembers = getImGroupMembers(groupMembers);
-        imPluginContext.getPluginService().groupJoin(imGroup.getId(), imGroup.getName(),imGroupMembers);
+        try {
+            imPluginContext.getPluginService().groupJoin(imGroup.getId(), imGroup.getName(),imGroupMembers);
+        } catch (Exception e) {
+            log.error("groupJoin error", e);
+            //修改群成员状态
+            List<Long> userIds = groupMembers.stream().map(ImGroupMemberWrapper.ImGroupMember::getUserId).collect(Collectors.toList());
+            imGroupMemberPlusService.lambdaUpdate().in(ImGroupMemberPlus::getUserId, userIds)
+                    .eq(ImGroupMemberPlus::getImGroupId, imGroup.getId())
+                    .set(ImGroupMemberPlus::getJoinGroup, false).update();
+        }
         //设置管理员
         groupMembers.stream().filter(o -> StringUtils.isNotEmpty(o.getGroupRoleType()) && !StringUtils.equals(o.getGroupRoleType(),"Member")).forEach(o -> {
             try {
@@ -627,4 +668,54 @@ public class ImGroupCoreServiceImpl implements ImGroupCoreService {
         }
     }
 
+    @Override
+    public void retryCreateGroup() {
+        // 查询未创建成功的群组
+        List<ImGroupPlus> imGroups = imGroupService.lambdaQuery()
+                .eq(ImGroupPlus::getCreateFlag, false)
+                .list();
+        List<String> groupIds = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(imGroups)) {
+            for (ImGroupPlus imGroup : imGroups) {
+                try {
+                    imPluginContext.getPluginService().groupCreate(imGroup.getId(), imGroup.getName(), imGroup.getCreateUserId());
+                    imGroupService.lambdaUpdate().eq(ImGroupPlus::getId, imGroup.getId())
+                            .set(ImGroupPlus::getCreateFlag, true).update();
+                } catch (Exception e) {
+                    groupIds.add(imGroup.getId());
+                    log.error("retryCreateGroup error", e);
+                }
+            }
+        }
+        // 查询未加入成功的群组
+        List<ImGroupMemberPlus> imGroupMembers = imGroupMemberPlusService.lambdaQuery()
+                .eq(ImGroupMemberPlus::getJoinGroup, false)
+                .list();
+        if (CollectionUtils.isNotEmpty(imGroupMembers)) {
+            //排除掉已经创建失败的群组
+            List<ImGroupMemberPlus> collect = imGroupMembers.stream().filter(o -> !groupIds.contains(o.getImGroupId())).collect(Collectors.toList());
+            //按照群组ID分组
+            collect.stream().collect(Collectors.groupingBy(ImGroupMemberPlus::getImGroupId)).forEach((k,v) -> {
+                try {
+                    List<GroupMemberWrapper.ImGroupMember> imGroupMembers1 = v.stream().map(o -> {
+                        return GroupMemberWrapper.ImGroupMember.builder()
+                                .userId(o.getUserId().longValue())
+                                .groupId(o.getImGroupId())
+                                .clientType(o.getRoleType())
+                                .imUserId(getImUserId(o.getUserId().toString(), o.getRoleType()))
+                                .build();
+                    }).collect(Collectors.toList());
+                    imPluginContext.getPluginService().groupJoin(k,k, imGroupMembers1);
+                    //修改群成员状态
+                    List<Long> userIds = imGroupMembers1.stream().map(GroupMemberWrapper.ImGroupMember::getUserId).collect(Collectors.toList());
+                    imGroupMemberPlusService.lambdaUpdate().in(ImGroupMemberPlus::getUserId, userIds)
+                            .eq(ImGroupMemberPlus::getImGroupId, k)
+                            .set(ImGroupMemberPlus::getJoinGroup, true).update();
+                } catch (Exception e) {
+                    log.error("retryCreateGroup error", e);
+                }
+            });
+        }
+    }
+
 }

+ 8 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupServiceImpl.java

@@ -292,8 +292,8 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
     }
 
     @Override
-    public List<ImGroup> queryByUserId(Integer userId, String search,String groupType) {
-        List<ImGroup> imGroups = imGroupDao.queryByUserId(userId, search, groupType).stream()
+    public List<ImGroup> queryByUserId(ImGroupWrapper.GroupListQuery query) {
+        List<ImGroup> imGroups = imGroupDao.queryByUserId(query).stream()
             .filter(Objects::nonNull).collect(Collectors.toList());
         for (ImGroup item : imGroups) {
             if (Objects.nonNull(item.getGroupType()) && StringUtils.isBlank(item.getImg())) {
@@ -303,15 +303,10 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
         return imGroups;
     }
 
-    @Override
-    public List<ImGroupMemberDto> queryMemberById(String imGroupId) {
-        return getGroupNickname(queryMemberById(imGroupId, null));
-    }
-
 
     @Override
-    public List<ImGroupMemberDto> queryMemberById(String imGroupId,String search) {
-        return getGroupNickname(imGroupDao.queryMemberById(imGroupId,search));
+    public List<ImGroupMemberDto> queryMemberById(ImGroupWrapper.GroupMemberQuery query) {
+        return getGroupNickname(imGroupDao.queryMemberById(query));
     }
 
     /**
@@ -503,7 +498,10 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
         }
         List<String> imGroupIds = imGroupMembers.stream().map(ImGroupMember::getImGroupId).collect(Collectors.toList());
         // 群组没人,删除群组
-        List<ImGroup> imGroups = imGroupDao.queryByUserId(userId.intValue(),null, ImGroup.GroupTypeEnum.SCHOOL.getCode()).stream()
+        ImGroupWrapper.GroupListQuery query = new ImGroupWrapper.GroupListQuery();
+        query.setGroupType(ImGroup.GroupTypeEnum.SCHOOL.getCode());
+        query.setUserId(userId.intValue());
+        List<ImGroup> imGroups = imGroupDao.queryByUserId(query).stream()
             .filter(Objects::nonNull).collect(Collectors.toList());
 
 

+ 37 - 27
mec-biz/src/main/resources/config/mybatis/ImGroupMapper.xml

@@ -20,6 +20,7 @@
 		<result column="update_time_" property="updateTime" />
         <result column="tenant_id_" property="tenantId"/>
         <result column="import_flag_" property="importFlag"/>
+        <result column="create_flag_" property="createFlag"/>
 	</resultMap>
 	
 	<resultMap type="com.ym.mec.biz.dal.dto.ImGroupMemberDto" id="ImGroupMemberDto">
@@ -59,8 +60,10 @@
 	
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.ImGroup" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO im_group (id_,name_,introduce_,member_num_,memo_,tags_,img_,type_,create_time_,update_time_,tenant_id_,group_type_,school_id_)
-		VALUES(#{id},#{name},#{introduce},#{memberNum},#{memo},#{tags},#{img},#{type},#{createTime},#{updateTime},#{tenantId},#{groupType},#{schoolId})
+		INSERT INTO im_group (id_,name_,introduce_,member_num_,memo_,tags_,img_,type_,
+		                      create_time_,update_time_,tenant_id_,group_type_,school_id_,create_flag_)
+		VALUES(#{id},#{name},#{introduce},#{memberNum},#{memo},#{tags},#{img},#{type},
+		       #{createTime},#{updateTime},#{tenantId},#{groupType},#{schoolId},#{createFlag})
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -76,25 +79,25 @@
 			member_num_ = member_num_ + #{memberNum},
 		</if>
 		<if test="tags != null">
-		tags_ = #{tags},
+			tags_ = #{tags},
 		</if>
 		<if test="introduce != null">
-		introduce_ = #{introduce},
+			introduce_ = #{introduce},
 		</if>
 		<if test="updateTime != null">
-		update_time_ = #{updateTime},
+			update_time_ = #{updateTime},
 		</if>
 		<if test="memo != null">
-		memo_ = #{memo},
+			memo_ = #{memo},
 		</if>
 		<if test="name != null">
-		name_ = #{name},
+			name_ = #{name},
 		</if>
 		<if test="img != null">
-		img_ = #{img},
+			img_ = #{img},
 		</if>
 		<if test="type != null">
-		type_ = #{type},
+			type_ = #{type},
 		</if>
 		</set> WHERE id_ = #{id} and tenant_id_ = #{tenantId}
 	</update>
@@ -106,9 +109,9 @@
 	</update>
 	<update id="updateMemberNum">
 		UPDATE im_group ig
-		LEFT JOIN (SELECT COUNT(id_) num_,im_group_id_ FROM im_group_member GROUP BY im_group_id_) igm ON ig.id_ = igm.im_group_id_
+		LEFT JOIN (SELECT COUNT(id_) num_,im_group_id_ FROM im_group_member where join_group_ = 1 GROUP BY im_group_id_) igm ON ig.id_ = igm.im_group_id_
 		SET member_num_ = igm.num_
-		WHERE ig.id_ = igm.im_group_id_
+		WHERE ig.id_ = igm.im_group_id_ AND ig.create_flag_ = 1
 	</update>
 
 	<!-- 根据主键删除一条记录 -->
@@ -158,16 +161,20 @@
 	<select id="queryByUserId" resultMap="ImGroup" parameterType="map">
 		SELECT ig.* FROM im_group_member igm
 		LEFT JOIN im_group ig ON igm.im_group_id_ = ig.id_
-		where 1 =1
-		<if test="userId != null">
-			AND igm.user_id_ = #{userId}
-		</if>
-		<if test="search != null and search != ''">
-			AND (ig.name_ like concat('%',#{search},'%') or ig.tags_ like concat('%',#{search},'%'))
-		</if>
-		<if test="groupType != null and groupType != ''">
-			AND ig.group_type_ = #{groupType}
-		</if>
+		<where>
+			<if test="query.clientType != null and query.clientType == 'SYSTEM'">
+				AND ig.create_flag_ = 1 AND jgm.join_group_ = 1
+			</if>
+			<if test="query.userId != null">
+				AND igm.user_id_ = #{query.userId}
+			</if>
+			<if test="query.search != null and query.search != ''">
+				AND (ig.name_ like concat('%',#{query.search},'%') or ig.tags_ like concat('%',#{query.search},'%'))
+			</if>
+			<if test="query.groupType != null and query.groupType != ''">
+				AND ig.group_type_ = #{query.groupType}
+			</if>
+		</where>
 	</select>
 	
 	<select id="queryMemberById" resultMap="ImGroupMemberDto">
@@ -182,10 +189,13 @@
 		LEFT JOIN sys_user u ON igm.user_id_ = u.id_
 		LEFT JOIN student st ON st.user_id_ = u.id_
 		LEFT JOIN `subject` s ON s.id_ = st.subject_id_list_
-		WHERE igm.im_group_id_ = #{imGroupId}
-        <if test="search != null and search != ''">
-            AND (u.username_ like concat('%',#{search},'%') or u.real_name_ like concat('%',#{search},'%'))
+		WHERE igm.im_group_id_ = #{query.imGroupId} AND igm.join_group_ = 1
+        <if test="query.search != null and query.search != ''">
+            AND (u.username_ like concat('%',#{query.search},'%') or u.real_name_ like concat('%',#{query.search},'%'))
         </if>
+		<if test="query.clientType != null and query.clientType == 'SYSTEM'">
+			AND igm.join_group_ = 1
+		</if>
 	</select>
 	
 	<select id="queryMember" resultMap="ImGroupMemberDto" parameterType="map">
@@ -214,7 +224,7 @@
         LEFT JOIN im_group ig ON igm.im_group_id_ = ig.id_
         left join class_group cg on cg.id_ = ig.id_
         left join music_group mg on mg.id_ = cg.music_group_id_
-        where 1 =1 and ig.group_type_ in ('NORMAL','MIX')
+        where ig.create_flag_ = 1 AND igm.join_group_ = 1 and ig.group_type_ in ('NORMAL','MIX')
         <if test="userId != null">
             AND igm.user_id_ = #{userId}
         </if>
@@ -240,7 +250,7 @@
         LEFT JOIN sys_user u ON igm.user_id_ = u.id_
         LEFT JOIN student st ON st.user_id_ = u.id_
         LEFT JOIN `subject` s ON s.id_ = st.subject_id_list_
-        WHERE igm.im_group_id_ = #{imGroupId} and st.user_id_ is not null
+        WHERE igm.im_group_id_ = #{imGroupId} and st.user_id_ is not null AND igm.join_group_ = 1
         <if test="search != null">
             and (u.real_name_ like concat('%',#{search},'%'))
         </if>
@@ -285,7 +295,7 @@
         SELECT distinct ig.* FROM im_group_member igm
         LEFT JOIN im_group ig ON igm.im_group_id_ = ig.id_
         left join class_group cg on ig.id_ = cg.id_
-        where 1 =1
+        where ig.create_flag_ = 1 AND igm.join_group_ = 1
         <if test="param.userId != null">
             AND igm.user_id_ = #{param.userId}
         </if>

+ 7 - 9
mec-biz/src/main/resources/config/mybatis/ImGroupMemberMapper.xml

@@ -77,9 +77,6 @@
         <if test="type != null">
             type_ = #{type},
         </if>
-        <if test="joinGroup != null">
-            join_group_ = #{joinGroup},
-        </if>
 		update_time_ = NOW()
 		</set> WHERE id_ = #{id} and tenant_id_ = #{tenantId}
 	</update>
@@ -112,9 +109,6 @@
                 <if test="item.type != null">
                     type_ = #{item.type},
                 </if>
-				<if test="item.joinGroup != null">
-					join_group_ = #{item.joinGroup},
-				</if>
 				update_time_ = NOW()
 			</set>
 			WHERE id_ = #{item.id} and tenant_id_ = #{item.tenantId}
@@ -157,10 +151,10 @@
 	</delete>
 
 	<select id="queryByImGroupIdAndUserId" resultMap="ImGroupMember" parameterType="map">
-		SELECT * FROM im_group_member where find_in_set(im_group_id_,#{imGroupIdList}) and find_in_set(user_id_,#{userIdList})
+		SELECT * FROM im_group_member where find_in_set(im_group_id_,#{imGroupIdList}) and find_in_set(user_id_,#{userIdList}) AND join_group_ = 1
 	</select>
 	<select id="isExit" resultType="java.lang.Boolean">
-		SELECT COUNT(DISTINCT userId) FROM im_group_member WHERE im_group_id_ = #{groupId} AND user_id_ = #{userId}
+		SELECT COUNT(DISTINCT userId) FROM im_group_member WHERE im_group_id_ = #{groupId} AND user_id_ = #{userId} AND join_group_ = 1
 	</select>
     <select id="queryMembers" resultMap="ImGroupMember">
 		SELECT #{groupId} im_group_id_,CASE WHEN su.username_ IS NULL OR su.username_ = '' THEN su.real_name_ ELSE su.username_ END nickname_,
@@ -173,6 +167,10 @@
 	</select>
 	<sql id="queryGroupMemberPageSql">
 		<where>
+			igm.join_group_ = 1
+			<if test="clientType != null and clientType == 'SYSTEM'">
+				AND jgm.join_group_ = 1
+			</if>
 			<if test="imGroupId != null and imGroupId != ''">
 				AND igm.im_group_id_ = #{imGroupId}
 			</if>
@@ -254,7 +252,7 @@
     </select>
     <select id="groupRoleInit" resultType="com.ym.mec.biz.dal.wrapper.ImGroupMemberWrapper$GroupMemberRole1">
 		select im_group_id_ groupId,group_role_type_ groupRoleType,user_id_ userId from im_group_member
-		where group_role_type_ = #{groupRoleType} AND init_flag_ = 0 order by id_ DESC
+		where group_role_type_ = #{groupRoleType} AND init_flag_ = 0 AND join_group_ = 1 order by id_ DESC
 	</select>
 
     <delete id="delByImGroupAndUserId">

+ 4 - 0
mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java

@@ -324,4 +324,8 @@ public interface TaskRemoteService {
     @GetMapping("/task/workOverdue")
     void workOverdue();
 
+    //将历史创建失败的群聊重新创建、加入失败的群聊重新加入
+    @GetMapping(value = "/task/retryCreateGroup")
+    void retryCreateGroup();
+
 }

+ 5 - 0
mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java

@@ -373,4 +373,9 @@ public class TaskRemoteServiceFallback implements TaskRemoteService {
     public void workOverdue() {
         logger.error("作品过期设置失败");
     }
+
+    @Override
+    public void retryCreateGroup() {
+        logger.error("重试创建群聊失败");
+    }
 }

+ 20 - 0
mec-task/src/main/java/com/ym/mec/task/jobs/RetryCreateGroupTask.java

@@ -0,0 +1,20 @@
+package com.ym.mec.task.jobs;
+
+import com.ym.mec.task.TaskRemoteService;
+import com.ym.mec.task.core.BaseTask;
+import com.ym.mec.task.core.TaskException;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+@Service
+public class RetryCreateGroupTask extends BaseTask {
+
+	@Resource
+	private TaskRemoteService taskRemoteService;
+
+	@Override
+	public void execute() throws TaskException {
+		taskRemoteService.retryCreateGroup();
+	}
+}