zouxuan před 5 roky
rodič
revize
85642b520f
22 změnil soubory, kde provedl 299 přidání a 52 odebrání
  1. 3 2
      edu-auth/edu-auth-server/src/main/java/com/keao/edu/auth/web/controller/UserController.java
  2. 1 1
      edu-auth/edu-auth-server/src/main/resources/config/mybatis/SysUserMapper.xml
  3. 26 0
      edu-im/edu-im-api/src/main/java/com/keao/edu/im/api/client/ImFeignService.java
  4. 15 0
      edu-im/edu-im-api/src/main/java/com/keao/edu/im/api/client/callback/ImFeignServiceFallback.java
  5. 14 5
      edu-im/edu-im-api/src/main/java/com/keao/edu/im/api/entity/MemberChangedMessage.java
  6. 18 0
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/controller/RoomController.java
  7. 29 2
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/service/Impl/RoomServiceImpl.java
  8. 22 0
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/service/RoomService.java
  9. 5 1
      edu-user/edu-user-client-api/pom.xml
  10. 9 0
      edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/client/EduUserFeignService.java
  11. 6 0
      edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/client/fallback/EduUserFeignServiceFallback.java
  12. 2 2
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamCertificationController.java
  13. 3 6
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamRoomController.java
  14. 7 2
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamRoomStudentRelationController.java
  15. 7 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamRoomStudentRelationDao.java
  16. 1 2
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamCertificationService.java
  17. 7 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamRoomService.java
  18. 11 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamRoomStudentRelationService.java
  19. 2 2
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamCertificationServiceImpl.java
  20. 51 3
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRoomServiceImpl.java
  21. 57 24
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRoomStudentRelationServiceImpl.java
  22. 3 0
      edu-user/edu-user-server/src/main/resources/config/mybatis/ExamRoomStudentRelationMapper.xml

+ 3 - 2
edu-auth/edu-auth-server/src/main/java/com/keao/edu/auth/web/controller/UserController.java

@@ -80,8 +80,9 @@ public class UserController extends BaseController {
 	}
 
 	@GetMapping(value = "/noAuth/queryUserByPhone")
-	public Object noAuthQueryUserByPhone(String mobile) {
-		SysUser sysUser = sysUserService.queryByPhone(mobile);
+	public Object noAuthQueryUserByPhone(String mobile,String clientId) {
+		String toUpperCase = clientId.toUpperCase();
+		SysUser sysUser = sysUserService.queryByPhoneAndClient(mobile,toUpperCase);
 		if(sysUser == null){
 			return succeed(0);
 		}

+ 1 - 1
edu-auth/edu-auth-server/src/main/resources/config/mybatis/SysUserMapper.xml

@@ -173,7 +173,7 @@
     </select>
 
     <select id="queryByPhoneAndClient" resultMap="SysUser">
-        select * from sys_user where (phone_ = #{phone} OR username_ = #{phone}) AND user_type_ LIKE CONCAT('%',#{client},'%') LIMIT 1 FOR UPDATE
+        select * from sys_user where phone_ = #{phone} AND user_type_ LIKE CONCAT('%',#{client},'%') LIMIT 1 FOR UPDATE
     </select>
     <resultMap id="ImUserModel" type="com.keao.edu.im.api.entity.ImUserModel">
         <result column="id_" property="id"/>

+ 26 - 0
edu-im/edu-im-api/src/main/java/com/keao/edu/im/api/client/ImFeignService.java

@@ -10,6 +10,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 
 import com.keao.edu.common.config.FeignConfiguration;
 import com.keao.edu.im.api.client.callback.ImFeignServiceFallback;
+import org.springframework.web.bind.annotation.RequestParam;
 
 @FeignClient(name = "im-server", configuration = FeignConfiguration.class, fallback = ImFeignServiceFallback.class)
 public interface ImFeignService {
@@ -103,6 +104,31 @@ public interface ImFeignService {
 	void leaveRoom(@RequestBody ReqUserData reqUserData);
 
 	/**
+	 * 加群
+	 * @param userIds
+	 * @param groupId
+	 * @param groupName
+	 */
+	@PostMapping(value = "room/joinGroup")
+	void joinGroup(@RequestParam("userIds") String userIds,@RequestParam("organId") String groupId,@RequestParam("groupName") String groupName);
+
+	/**
+	 * 退群
+	 * @param userIds
+	 * @param groupId
+	 */
+	@PostMapping(value = "room/quitGroup")
+	void quitGroup(@RequestParam("userIds") String userIds,@RequestParam("organId") String groupId);
+
+	/**
+	 * 解散群
+	 * @param userId
+	 * @param groupId
+	 */
+	@PostMapping(value = "room/dismissGroup")
+	void dismissGroup(@RequestParam("userId") String userId,@RequestParam("groupId") String groupId);
+
+	/**
 	 * 发送消息
 	 * @param publishMessageDto
 	 * @return

+ 15 - 0
edu-im/edu-im-api/src/main/java/com/keao/edu/im/api/client/callback/ImFeignServiceFallback.java

@@ -66,6 +66,21 @@ public class ImFeignServiceFallback implements ImFeignService {
     }
 
     @Override
+    public void joinGroup(String userIds, String groupId, String groupName) {
+
+    }
+
+    @Override
+    public void quitGroup(String userIds, String groupId) {
+
+    }
+
+    @Override
+    public void dismissGroup(String userId, String groupId) {
+
+    }
+
+    @Override
     public void publishMessage(PublishMessageDto publishMessageDto) {
 
     }

+ 14 - 5
edu-im/edu-im-api/src/main/java/com/keao/edu/im/api/entity/MemberChangedMessage.java

@@ -14,7 +14,8 @@ public class MemberChangedMessage extends BaseMessage {
     private String userId;
     private String userName;
     private String roomId;
-    private String paramJson;
+    private String appParamJson;
+    private String webParamJson;
     private boolean camera;
     private boolean microphone;
 
@@ -22,12 +23,20 @@ public class MemberChangedMessage extends BaseMessage {
 
     private Date timestamp;
 
-    public String getParamJson() {
-        return paramJson;
+    public String getAppParamJson() {
+        return appParamJson;
     }
 
-    public void setParamJson(String paramJson) {
-        this.paramJson = paramJson;
+    public void setAppParamJson(String appParamJson) {
+        this.appParamJson = appParamJson;
+    }
+
+    public String getWebParamJson() {
+        return webParamJson;
+    }
+
+    public void setWebParamJson(String webParamJson) {
+        this.webParamJson = webParamJson;
     }
 
     public String getRoomId() {

+ 18 - 0
edu-im/edu-im-server/src/main/java/com/keao/edu/im/controller/RoomController.java

@@ -61,6 +61,24 @@ public class RoomController{
         return new BaseResponse<>();
     }
 
+    @RequestMapping(value = "/joinGroup", method = RequestMethod.POST)
+    public Object joinGroup(String userIds, String groupId, String groupName) throws Exception {
+        roomService.joinGroup(userIds,groupId,groupName);
+        return new BaseResponse<>();
+    }
+
+    @RequestMapping(value = "/quitGroup", method = RequestMethod.POST)
+    public Object quitGroup(String userIds, String groupId) throws Exception{
+        roomService.quitGroup(userIds,groupId);
+        return new BaseResponse<>();
+    }
+
+    @RequestMapping(value = "/dismissGroup", method = RequestMethod.POST)
+    public Object dismissGroup(String userId, String groupId) throws Exception{
+        roomService.dismissGroup(userId,groupId);
+        return new BaseResponse<>();
+    }
+
     @RequestMapping(value = "/leave", method = RequestMethod.POST)
     public Object leaveRoom(@RequestBody ReqUserData data)
             throws ApiException, Exception {

+ 29 - 2
edu-im/edu-im-server/src/main/java/com/keao/edu/im/service/Impl/RoomServiceImpl.java

@@ -183,6 +183,9 @@ public class RoomServiceImpl implements RoomService {
         roomResult.setRegistrationId(examRegistrationId);
         roomResult.setMembers(roomMemberDao.findByRid(recordedRoomId));
         log.info("joinRecorded join success: roomId = {}, userId = {}, userName={}, role = {}", recordedRoomId, userId, Student);
+        if(examRegistrationId != null){
+            this.publishMessage(eduUserFeignService.getPublishMessage(examRegistrationId));
+        }
         return roomResult;
     }
 
@@ -317,6 +320,9 @@ public class RoomServiceImpl implements RoomService {
 //        List<Whiteboard> whiteboardList = whiteboardDao.findByRid(roomId);
 //        roomResult.setWhiteboards(whiteboardList);
         log.info("join success: roomId = {}, userId = {}, userName={}, role = {}", roomId, userId, roleEnum);
+        if(registrationId != null){
+            this.publishMessage(eduUserFeignService.getPublishMessage(registrationId));
+        }
         return roomResult;
     }
 
@@ -441,7 +447,7 @@ public class RoomServiceImpl implements RoomService {
 
     @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     @Override
-    public Boolean leaveRoom(Long registrationId,String userId,String roomId){
+    public Boolean leaveRoom(Long registrationId,String userId,String roomId) throws Exception {
         if(registrationId != null){
             StudentExamResultApiDto examResult = eduUserFeignService.getExamResult(registrationId);
             Integer recordFlag = examResult.getRecordFlag();
@@ -527,12 +533,15 @@ public class RoomServiceImpl implements RoomService {
         }
         userDao.deleteByUid(userId);
 //        this.signOut(Long.parseLong(roomId));
+        if(registrationId != null){
+            this.publishMessage(eduUserFeignService.getPublishMessage(registrationId));
+        }
         return true;
     }
 
     @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     @Override
-    public Boolean levelRecorded(Long registrationId){
+    public Boolean levelRecorded(Long registrationId) throws Exception {
         StudentExamResultApiDto examResult = eduUserFeignService.getExamResult(registrationId);
         String roomId = "recorded" + examResult.getRoomId();
         SysUser user = sysUserFeignService.queryUserInfo();
@@ -591,9 +600,27 @@ public class RoomServiceImpl implements RoomService {
             }
         }
         userDao.deleteByUid(userId);
+        if(registrationId != null){
+            this.publishMessage(eduUserFeignService.getPublishMessage(registrationId));
+        }
         return true;
     }
 
+    @Override
+    public void joinGroup(String userIds, String groupId, String groupName) throws Exception {
+        imHelper.joinGroup(userIds.split(","),groupId,groupName);
+    }
+
+    @Override
+    public void quitGroup(String userIds, String groupId) throws Exception {
+        imHelper.quit(userIds.split(","),groupId);
+    }
+
+    @Override
+    public void dismissGroup(String userId, String groupId) throws Exception {
+        imHelper.dismiss(userId,groupId);
+    }
+
     private void deleteWhiteboardByUser(String roomId, String userId) throws Exception {
         List<Whiteboard> whiteboardList = whiteboardDao.findByRidAndCreator(roomId, userId);
         if (!whiteboardList.isEmpty()) {

+ 22 - 0
edu-im/edu-im-server/src/main/java/com/keao/edu/im/service/RoomService.java

@@ -107,4 +107,26 @@ public interface RoomService {
      * @param examRegistrationId
      */
     Boolean levelRecorded(Long examRegistrationId) throws Exception;
+
+    /**
+     * 加入群组
+     * @param userIds
+     * @param groupId
+     * @param groupName
+     */
+    void joinGroup(String userIds, String groupId, String groupName) throws Exception;
+
+    /**
+     * 退群
+     * @param userIds
+     * @param groupId
+     */
+    void quitGroup(String userIds, String groupId) throws Exception;
+
+    /**
+     * 解散
+     * @param userId
+     * @param groupId
+     */
+    void dismissGroup(String userId, String groupId) throws Exception;
 }

+ 5 - 1
edu-user/edu-user-client-api/pom.xml

@@ -31,5 +31,9 @@
             <groupId>com.keao.edu</groupId>
             <artifactId>edu-auth-api</artifactId>
         </dependency>
-    </dependencies>
+		<dependency>
+			<groupId>com.keao.edu</groupId>
+			<artifactId>edu-im-api</artifactId>
+		</dependency>
+	</dependencies>
 </project>

+ 9 - 0
edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/client/EduUserFeignService.java

@@ -3,6 +3,7 @@ package com.keao.edu.user.api.client;
 
 import com.keao.edu.common.config.FeignConfiguration;
 import com.keao.edu.common.entity.SysConfig;
+import com.keao.edu.im.api.entity.PublishMessageDto;
 import com.keao.edu.user.api.client.fallback.EduUserFeignServiceFallback;
 import com.keao.edu.user.api.entity.ExamRoom;
 import com.keao.edu.user.api.entity.ExamRoomStudentRelation;
@@ -25,6 +26,14 @@ public interface EduUserFeignService {
 
 	/**
 	 * 获取考场信息
+	 * @param examRegistrationId
+	 * @return
+	 */
+	@PostMapping(value = "examRoomStudentRelation/api/getPublishMessage")
+	PublishMessageDto getPublishMessage(@RequestParam("examRegistrationId") Long examRegistrationId);
+
+	/**
+	 * 获取考场信息
 	 * @param id
 	 * @return
 	 */

+ 6 - 0
edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/client/fallback/EduUserFeignServiceFallback.java

@@ -1,5 +1,6 @@
 package com.keao.edu.user.api.client.fallback;
 
+import com.keao.edu.im.api.entity.PublishMessageDto;
 import com.keao.edu.user.api.client.EduUserFeignService;
 import com.keao.edu.user.api.entity.ExamRoom;
 import com.keao.edu.user.api.entity.ExamRoomStudentRelation;
@@ -15,6 +16,11 @@ public class EduUserFeignServiceFallback implements EduUserFeignService {
 	}
 
 	@Override
+	public PublishMessageDto getPublishMessage(Long examRegistrationId) {
+		return null;
+	}
+
+	@Override
 	public ExamRoom getExamRoom(Integer id){
 		return null;
 	}

+ 2 - 2
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamCertificationController.java

@@ -30,8 +30,8 @@ public class ExamCertificationController extends BaseController {
 
     @ApiOperation("后台获取学员准考证详情")
     @GetMapping(value = "findDetailByStudentId")
-    public HttpResponseResult<ExamCertificationDto> findDetailByStudentId(Integer studentId, Long examRegistrationId) {
-        return succeed(examCertificationService.findDetailByStudentId(studentId,examRegistrationId));
+    public HttpResponseResult<ExamCertificationDto> findDetailByStudentId(Long examRegistrationId) {
+        return succeed(examCertificationService.findDetailByStudentId(examRegistrationId));
     }
 
     @ApiOperation("学生端获取学员准考证列表")

+ 3 - 6
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamRoomController.java

@@ -115,12 +115,9 @@ public class ExamRoomController extends BaseController {
     }
 
     @ApiOperation("教室状态变更(关闭教室,开启教室)")
-    @PostMapping(value = "/openExamRoom")
-    public HttpResponseResult<ExamRoom> openExamRoom(Long examRoomId,Integer openFlag){
-        ExamRoom examRoom = new ExamRoom();
-        examRoom.setId(examRoomId);
-        examRoom.setOpenFlag(openFlag);
-        examRoomService.update(examRoom);
+    @PostMapping(value = "/changeExamRoom")
+    public HttpResponseResult changeExamRoom(Long examRoomId,Integer openFlag){
+        examRoomService.changeExamRoom(examRoomId,openFlag);
         return succeed();
     }
 

+ 7 - 2
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/ExamRoomStudentRelationController.java

@@ -5,10 +5,10 @@ import com.keao.edu.auth.api.entity.SysUser;
 import com.keao.edu.common.controller.BaseController;
 import com.keao.edu.common.entity.HttpResponseResult;
 import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.im.api.entity.PublishMessageDto;
 import com.keao.edu.user.api.entity.ExamRoomStudentRelation;
 import com.keao.edu.user.dto.ExamRoomStudentRelationDto;
 import com.keao.edu.user.dto.NeedCheckingDetailDto;
-import com.keao.edu.user.dto.RoomStudentListDto;
 import com.keao.edu.user.entity.Employee;
 import com.keao.edu.user.page.ExamRoomStudentRelationQueryInfo;
 import com.keao.edu.user.service.EmployeeService;
@@ -21,7 +21,6 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.List;
 import java.util.Objects;
 
 @RestController
@@ -82,6 +81,12 @@ public class ExamRoomStudentRelationController extends BaseController {
         return succeed(examRoomStudentRelationService.queryNeedCheckingList(roomId));
     }
 
+    @ApiOperation("获取推送消息内容")
+    @PostMapping(value = "api/getPublishMessage")
+    public PublishMessageDto getPublishMessage(Long examRegistrationId) {
+        return examRoomStudentRelationService.getPublishMessage(examRegistrationId);
+    }
+
     @ApiOperation("获取教室学员关联")
     @PostMapping(value = "api/getExamRoomStudentRelation")
     public ExamRoomStudentRelation getExamRoomStudentRelation(Long registrationId) {

+ 7 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/dao/ExamRoomStudentRelationDao.java

@@ -123,4 +123,11 @@ public interface ExamRoomStudentRelationDao extends BaseDAO<Long, ExamRoomStuden
      * @return
      */
     Integer sumWaitNum(@Param("examRegistrationId") Long examRegistrationId, @Param("signInTime") String signInTime, @Param("studentId") Integer studentId);
+
+    /**
+     * 获取所有参考学员编号
+     * @param examRoomId
+     * @return
+     */
+    String getStudentIds(Long examRoomId);
 }

+ 1 - 2
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamCertificationService.java

@@ -36,11 +36,10 @@ public interface ExamCertificationService extends BaseService<Long, ExamCertific
 
     /**
      * 获取后台准考证详情
-     * @param studentId
      * @param examRegistrationId
      * @return
      */
-    ExamCertificationDto findDetailByStudentId(Integer studentId, Long examRegistrationId);
+    ExamCertificationDto findDetailByStudentId(Long examRegistrationId);
 
     void batchInsert(List<ExamCertification> examCertifications);
 

+ 7 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamRoomService.java

@@ -89,4 +89,11 @@ public interface ExamRoomService extends BaseService<Long, ExamRoom> {
      * @return java.util.List<com.keao.edu.user.api.entity.ExamRoom>
      */
     List<ExamRoom> getStudentEnableJoinRoom(Long registId);
+
+    /**
+     * 开启(关闭)考场
+     * @param examRoomId
+     * @param openFlag
+     */
+    void changeExamRoom(Long examRoomId, Integer openFlag);
 }

+ 11 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/ExamRoomStudentRelationService.java

@@ -2,6 +2,7 @@ package com.keao.edu.user.service;
 
 import com.keao.edu.common.page.PageInfo;
 import com.keao.edu.common.service.BaseService;
+import com.keao.edu.im.api.entity.PublishMessageDto;
 import com.keao.edu.user.dto.ExamRoomStudentRelationDto;
 import com.keao.edu.user.api.entity.ExamRoomStudentRelation;
 import com.keao.edu.user.dto.NeedCheckingDetailDto;
@@ -75,6 +76,10 @@ public interface ExamRoomStudentRelationService extends BaseService<Long, ExamRo
      */
     void nextBit(Long nextExamRoomStudentRelationId, Long examRoomStudentRelationId, Integer examStatus,Long roomId);
 
+    public void publishMessage(ExamRoomStudentRelation examRoomStudentRelation);
+
+    public PublishMessageDto getPublishMessage(Long examRegistrationId);
+
     /**
      * 获取房间学员队列
      * @param roomId
@@ -114,4 +119,10 @@ public interface ExamRoomStudentRelationService extends BaseService<Long, ExamRo
      * @param examRegistrationId
      */
     NeedCheckingDetailDto againQueue(Long examRegistrationId);
+
+    List<ExamRoomStudentRelation> findStudentsWithExamRooms(List<Long> examRoomIds);
+
+    void deleteWithExamRooms(List<Long> examRoomIds);
+
+    String getStudentIds(Long examRoomId);
 }

+ 2 - 2
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamCertificationServiceImpl.java

@@ -77,11 +77,11 @@ public class ExamCertificationServiceImpl extends BaseServiceImpl<Long, ExamCert
 	}
 
 	@Override
-	public ExamCertificationDto findDetailByStudentId(Integer studentId, Long examRegistrationId) {
+	public ExamCertificationDto findDetailByStudentId(Long examRegistrationId) {
 		ExamCertificationDto examCertificationDto = examCertificationDao.getExamCertificationDto(examRegistrationId);
 		Subject subject = subjectDao.get(examCertificationDto.getSubjectId());
 		examCertificationDto.setSubjectName(subject.getName());
-		Student student = studentService.getStudent(studentId);
+		Student student = studentService.getStudent(examCertificationDto.getSubjectId());
 		examCertificationDto.setRealName(student.getRealName());
 		examCertificationDto.setGender(student.getGender());
 		examCertificationDto.setCertificatePhoto(student.getCertificatePhoto());

+ 51 - 3
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRoomServiceImpl.java

@@ -3,13 +3,18 @@ package com.keao.edu.user.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.keao.edu.auth.api.client.SysMessageFeignService;
+import com.keao.edu.auth.api.client.SysUserFeignService;
+import com.keao.edu.auth.api.entity.SysMessageParams;
 import com.keao.edu.auth.api.entity.SysUser;
 import com.keao.edu.common.dal.BaseDAO;
+import com.keao.edu.common.enums.MessageTypeEnum;
 import com.keao.edu.common.enums.YesOrNoEnum;
 import com.keao.edu.common.exception.BizException;
 import com.keao.edu.common.page.PageInfo;
 import com.keao.edu.common.service.impl.BaseServiceImpl;
 import com.keao.edu.common.tenant.TenantContextHolder;
+import com.keao.edu.im.api.client.ImFeignService;
 import com.keao.edu.user.api.entity.ExamRoom;
 import com.keao.edu.user.api.entity.ExamRoomStudentRelation;
 import com.keao.edu.user.api.enums.ExamModeEnum;
@@ -22,6 +27,7 @@ import com.keao.edu.user.entity.ExamRegistration;
 import com.keao.edu.user.entity.ExaminationBasic;
 import com.keao.edu.user.page.ExamRoomQueryInfo;
 import com.keao.edu.user.service.ExamRoomService;
+import com.keao.edu.user.service.ExamRoomStudentRelationService;
 import com.keao.edu.user.service.ExamTeacherSalaryService;
 import com.keao.edu.user.service.OrganizationService;
 import com.keao.edu.util.collection.MapUtil;
@@ -43,7 +49,7 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 	@Autowired
 	private ExamRoomDao examRoomDao;
 	@Autowired
-	private ExamRoomStudentRelationDao examRoomStudentRelationDao;
+	private ExamRoomStudentRelationService examRoomStudentRelationService;
 	@Autowired
 	private OrganizationService organizationService;
 	@Autowired
@@ -62,6 +68,12 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 	private ExamOrganizationRelationDao examOrganizationRelationDao;
 	@Autowired
 	private ExamLifecycleLogDao examLifecycleLogDao;
+	@Autowired
+	private ImFeignService imFeignService;
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+	@Autowired
+	private SysMessageFeignService sysMessageFeignService;
 
 	@Override
 	public BaseDAO<Long, ExamRoom> getDAO() {
@@ -254,10 +266,10 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 
 		ExamRoom examRoom = examRoomDao.get(examRoomIds.get(0));
 
-		List<ExamRoomStudentRelation> roomStudents = examRoomStudentRelationDao.findStudentsWithExamRooms(examRoomIds);
+		List<ExamRoomStudentRelation> roomStudents = examRoomStudentRelationService.findStudentsWithExamRooms(examRoomIds);
 		List<Long> registIds = roomStudents.stream().map(ExamRoomStudentRelation::getExamRegistrationId).collect(Collectors.toList());
 
-		examRoomStudentRelationDao.deleteWithExamRooms(examRoomIds);
+		examRoomStudentRelationService.deleteWithExamRooms(examRoomIds);
 
 		examCertificationDao.deleteWithRegist(registIds);
 
@@ -391,4 +403,40 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 		}
 		return examRoomDao.getWithExamAndSubject(examRegistration.getExaminationBasicId(), examRegistration.getSubjectId());
 	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void changeExamRoom(Long examRoomId, Integer openFlag) {
+		ExamRoom examRoom = new ExamRoom();
+		examRoom.setId(examRoomId);
+		examRoom.setOpenFlag(openFlag);
+		examRoomDao.update(examRoom);
+		//加群退群
+		if(openFlag == 1){
+			String studentIds = examRoomStudentRelationService.getStudentIds(examRoomId);
+			StringBuffer stringBuffer = new StringBuffer(examRoom.getMainTeacherUserId());
+			if(StringUtils.isNotEmpty(stringBuffer)){
+				stringBuffer.append(",").append(studentIds);
+			}
+			if(StringUtils.isNotEmpty(examRoom.getAssistantTeacherUserIdList())){
+				stringBuffer.append(",").append(examRoom.getAssistantTeacherUserIdList());
+			}
+			imFeignService.joinGroup(stringBuffer.toString(),examRoomId.toString(),examRoomId.toString());
+			//推送消息
+			if(StringUtils.isNotEmpty(studentIds)){
+
+				String[] split = studentIds.split(",");
+				Map<Integer, String> userPhoneMap = new HashMap<>(split.length);
+				for (String s : split) {
+					userPhoneMap.put(Integer.parseInt(s),s);
+				}
+				SysMessageParams sysMessageParams=new SysMessageParams(MessageTypeEnum.STUDENT_EXAM_START,
+						userPhoneMap, null, 0, null, null);
+				sysMessageFeignService.batchSendMessage(sysMessageParams);
+			}
+		}else {
+			SysUser sysUser = sysUserFeignService.queryUserInfo();
+			imFeignService.dismissGroup(sysUser.getId().toString(),examRoomId.toString());
+		}
+	}
 }

+ 57 - 24
edu-user/edu-user-server/src/main/java/com/keao/edu/user/service/impl/ExamRoomStudentRelationServiceImpl.java

@@ -1,12 +1,9 @@
 package com.keao.edu.user.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
-import com.keao.edu.auth.api.client.SysMessageFeignService;
 import com.keao.edu.auth.api.client.SysUserFeignService;
-import com.keao.edu.auth.api.entity.SysMessageParams;
 import com.keao.edu.auth.api.entity.SysUser;
 import com.keao.edu.common.dal.BaseDAO;
-import com.keao.edu.common.enums.MessageTypeEnum;
 import com.keao.edu.common.enums.YesOrNoEnum;
 import com.keao.edu.common.exception.BizException;
 import com.keao.edu.common.page.PageInfo;
@@ -20,7 +17,6 @@ import com.keao.edu.im.api.entity.ReqUserData;
 import com.keao.edu.user.api.entity.ExamRoom;
 import com.keao.edu.user.api.entity.ExamRoomStudentRelation;
 import com.keao.edu.user.api.enums.ExamModeEnum;
-import com.keao.edu.user.controller.WebSocketServer;
 import com.keao.edu.user.dao.*;
 import com.keao.edu.user.dto.ExamRoomStudentRelationDto;
 import com.keao.edu.user.dto.NeedCheckingDetailDto;
@@ -39,7 +35,6 @@ import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
-import java.io.IOException;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -68,8 +63,6 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 	private ImFeignService imFeignService;
 	@Autowired
 	private SysUserFeignService sysUserFeignService;
-	@Autowired
-	private SysMessageFeignService sysMessageFeignService;
 
 	@Override
 	public BaseDAO<Long, ExamRoomStudentRelation> getDAO() {
@@ -285,13 +278,7 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 			//关闭学员房间入口
 			examRoomStudentRelation.setClassroomSwitch(YesOrNoEnum.NO);
 			examRoomStudentRelationDao.update(examRoomStudentRelation);
-			PublishMessageDto publishMessageDto = new PublishMessageDto();
-			String userId = examRoomStudentRelation.getStudentId().toString();
-			publishMessageDto.setUserId(userId);
-			publishMessageDto.setRoomId(examRoomStudentRelation.getExamRoomId().toString());
-			MemberChangedMessage msg = new MemberChangedMessage(MemberChangedMessage.Action_Recorded, userId,3);
-			publishMessageDto.setMemberChangedMessage(msg);
-			imFeignService.publishMessage(publishMessageDto);
+			publishMessage(examRoomStudentRelation);
 		}
 		nextStudent(nextExamRoomStudentRelationId);
 	}
@@ -317,6 +304,21 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 	}
 
 	@Override
+	public List<ExamRoomStudentRelation> findStudentsWithExamRooms(List<Long> examRoomIds) {
+		return examRoomStudentRelationDao.findStudentsWithExamRooms(examRoomIds);
+	}
+
+	@Override
+	public void deleteWithExamRooms(List<Long> examRoomIds) {
+		examRoomStudentRelationDao.deleteWithExamRooms(examRoomIds);
+	}
+
+	@Override
+	public String getStudentIds(Long examRoomId) {
+		return examRoomStudentRelationDao.getStudentIds(examRoomId);
+	}
+
+	@Override
 	public void nextBit(Long nextExamRoomStudentRelationId, Long currentExamRoomStudentRelationId, Integer examStatus,Long examRoomId) {
 		if(currentExamRoomStudentRelationId != null){
 			ExamRoomStudentRelation examRoomStudentRelation = examRoomStudentRelationDao.get(currentExamRoomStudentRelationId);
@@ -332,16 +334,17 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 			//关闭学员房间入口
 			examRoomStudentRelation.setClassroomSwitch(YesOrNoEnum.NO);
 			examRoomStudentRelationDao.update(examRoomStudentRelation);
+			publishMessage(examRoomStudentRelation);
 		}
 		nextStudent(nextExamRoomStudentRelationId);
 
-		try {
+		/*try {
 			SysUser sysUser = sysUserFeignService.queryUserInfo();
 			String message = JSONObject.toJSONString(this.queryNeedCheckingList(examRoomId));
 			WebSocketServer.sendInfo(message,sysUser.getId().toString());
 		} catch (IOException e) {
 			e.printStackTrace();
-		}
+		}*/
 	}
 
 	private void nextStudent(Long nextExamRoomStudentRelationId){
@@ -350,17 +353,47 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 			//开启学员房间入口
 			examRoomStudentRelation.setClassroomSwitch(YesOrNoEnum.YES);
 			examRoomStudentRelationDao.update(examRoomStudentRelation);
-			Integer studentId = examRoomStudentRelation.getStudentId();
-			//推送消息
-			Map<Integer, String> userPhoneMap = new HashMap<>();
-			userPhoneMap.put(studentId, studentId.toString());
-			SysMessageParams sysMessageParams=new SysMessageParams(MessageTypeEnum.EXAM_REGISTRATION_URL_SMS,
-					userPhoneMap, null, 0, null, null);
-			sysMessageFeignService.batchSendMessage(sysMessageParams);
+			publishMessage(examRoomStudentRelation);
 		}
 	}
 
 	@Override
+	public void publishMessage(ExamRoomStudentRelation examRoomStudentRelation){
+		PublishMessageDto publishMessageDto = new PublishMessageDto();
+		String userId = examRoomStudentRelation.getStudentId().toString();
+		publishMessageDto.setUserId(userId);
+		publishMessageDto.setRoomId(examRoomStudentRelation.getExamRoomId().toString());
+		MemberChangedMessage msg = new MemberChangedMessage(MemberChangedMessage.Student_Queue, userId,3);
+		String jsonString = JSONObject.toJSONString(examCertificationService.needCheckingDetail(examRoomStudentRelation.getExamRegistrationId()));
+		msg.setAppParamJson(jsonString);
+		Map<String,Object> paramMap = new HashMap<>(2);
+		this.queryNeedCheckingList(examRoomStudentRelation.getExamRoomId());
+		paramMap.put("studentQueue",this.queryNeedCheckingList(examRoomStudentRelation.getExamRoomId()));
+		paramMap.put("examCertification",examCertificationService.findDetailByStudentId(examRoomStudentRelation.getExamRegistrationId()));
+		msg.setWebParamJson(JSONObject.toJSONString(paramMap));
+		publishMessageDto.setMemberChangedMessage(msg);
+		imFeignService.publishMessage(publishMessageDto);
+	}
+
+	public PublishMessageDto getPublishMessage(Long examRegistrationId){
+		ExamRoomStudentRelation examRoomStudentRelation = examRoomStudentRelationDao.getStudentExamRoom(examRegistrationId);
+		PublishMessageDto publishMessageDto = new PublishMessageDto();
+		String userId = examRoomStudentRelation.getStudentId().toString();
+		publishMessageDto.setUserId(userId);
+		publishMessageDto.setRoomId(examRoomStudentRelation.getExamRoomId().toString());
+		MemberChangedMessage msg = new MemberChangedMessage(MemberChangedMessage.Student_Queue, userId,3);
+		String jsonString = JSONObject.toJSONString(examCertificationService.needCheckingDetail(examRoomStudentRelation.getExamRegistrationId()));
+		msg.setAppParamJson(jsonString);
+		Map<String,Object> paramMap = new HashMap<>(2);
+		this.queryNeedCheckingList(examRoomStudentRelation.getExamRoomId());
+		paramMap.put("studentQueue",this.queryNeedCheckingList(examRoomStudentRelation.getExamRoomId()));
+		paramMap.put("examCertification",examCertificationService.findDetailByStudentId(examRoomStudentRelation.getExamRegistrationId()));
+		msg.setWebParamJson(JSONObject.toJSONString(paramMap));
+		publishMessageDto.setMemberChangedMessage(msg);
+		return publishMessageDto;
+	}
+
+	@Override
 	public List<RoomStudentListDto> queryStudentList(Long roomId) {
 		return examRoomStudentRelationDao.queryStudentList(roomId);
 	}
@@ -392,7 +425,7 @@ public class ExamRoomStudentRelationServiceImpl extends BaseServiceImpl<Long, Ex
 		publishMessageDto.setRoomId(studentExamRoom.getExamRoomId().toString());
 		MemberChangedMessage msg = new MemberChangedMessage(MemberChangedMessage.Student_Queue, userId,3);
 		String jsonString = JSONObject.toJSONString(examCertificationService.needCheckingDetail(examRegistrationId));
-		msg.setParamJson(jsonString);
+		msg.setAppParamJson(jsonString);
 		publishMessageDto.setMemberChangedMessage(msg);
 		imFeignService.publishMessage(publishMessageDto);
 	}

+ 3 - 0
edu-user/edu-user-server/src/main/resources/config/mybatis/ExamRoomStudentRelationMapper.xml

@@ -237,4 +237,7 @@
 			AND ersr.sign_in_time_ &lt; #{signInTime}
 		</if>
 	</select>
+    <select id="getStudentIds" resultType="java.lang.String">
+		SELECT GROUP_CONCAT(DISTINCT student_id_) FROM exam_room_student_relation WHERE exam_room_id_ = #{examRoomId}
+	</select>
 </mapper>