Selaa lähdekoodia

Merge remote-tracking branch 'origin/master'

周箭河 5 vuotta sitten
vanhempi
commit
36668ac811

+ 61 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseSchedule.java

@@ -2,10 +2,7 @@ package com.ym.mec.biz.dal.entity;
 
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.enums.CourseStatusEnum;
-import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.enums.TeachModeEnum;
-import com.ym.mec.biz.dal.enums.YesOrNoEnum;
+import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.common.enums.BaseEnum;
 
 import io.swagger.annotations.ApiModelProperty;
@@ -149,6 +146,66 @@ public class CourseSchedule {
 
 	private String note;
 
+	private SignInStatusEnum signInStatusEnum;
+
+	private SignOutStatusEnum signOutStatusEnum;
+
+	private Date signInTime;
+
+	private Date signOutTime;
+
+	private int isSignIn = 3;
+
+	private int isSignOut = 3;
+
+	public int getIsSignIn() {
+		return isSignIn;
+	}
+
+	public void setIsSignIn(int isSignIn) {
+		this.isSignIn = isSignIn;
+	}
+
+	public int getIsSignOut() {
+		return isSignOut;
+	}
+
+	public void setIsSignOut(int isSignOut) {
+		this.isSignOut = isSignOut;
+	}
+
+	public SignInStatusEnum getSignInStatusEnum() {
+		return signInStatusEnum;
+	}
+
+	public void setSignInStatusEnum(SignInStatusEnum signInStatusEnum) {
+		this.signInStatusEnum = signInStatusEnum;
+	}
+
+	public SignOutStatusEnum getSignOutStatusEnum() {
+		return signOutStatusEnum;
+	}
+
+	public void setSignOutStatusEnum(SignOutStatusEnum signOutStatusEnum) {
+		this.signOutStatusEnum = signOutStatusEnum;
+	}
+
+	public Date getSignInTime() {
+		return signInTime;
+	}
+
+	public void setSignInTime(Date signInTime) {
+		this.signInTime = signInTime;
+	}
+
+	public Date getSignOutTime() {
+		return signOutTime;
+	}
+
+	public void setSignOutTime(Date signOutTime) {
+		this.signOutTime = signOutTime;
+	}
+
 	public String getTeachingContent() {
 		return teachingContent;
 	}

+ 4 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/StudentExtracurricularExercisesSituationService.java

@@ -1,13 +1,15 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.StudentExercisesSituationDto;
-import com.ym.mec.biz.dal.dto.StudentServiceDetailDto;
 import com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation;
 import com.ym.mec.biz.dal.page.StudentExercisesSituationQueryInfo;
 import com.ym.mec.biz.dal.page.StudentServiceDetailQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
+import java.util.List;
+import java.util.Map;
+
 public interface StudentExtracurricularExercisesSituationService extends BaseService<Long, StudentExtracurricularExercisesSituation> {
 
     PageInfo<StudentExercisesSituationDto> findStudentExtracurricularExercisesSituations(StudentExercisesSituationQueryInfo queryInfo);
@@ -28,6 +30,6 @@ public interface StudentExtracurricularExercisesSituationService extends BaseSer
      * @param queryInfo:
      * @return com.ym.mec.common.page.PageInfo<com.ym.mec.biz.dal.dto.StudentServiceDetailDto>
      */
-    PageInfo<StudentServiceDetailDto> findServiceStudentDetail(StudentServiceDetailQueryInfo queryInfo);
+    List<Map<String, Object>> findServiceStudentDetail(StudentServiceDetailQueryInfo queryInfo);
 
 }

+ 11 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -43,6 +43,8 @@ import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -4162,8 +4164,16 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			throw new BizException("课程组不存在");
 		}
 		if(practiceGroup.getCoursesStartDate().after(coursesExpireDate)){
-			throw new BizException("课程有效时间不能于开始时间");
+			throw new BizException("课程有效时间不能于开始时间");
 		}
+
+		LocalDate courseStartDay = LocalDateTime.ofInstant(practiceGroup.getCoursesStartDate().toInstant(), DateUtil.zoneId).toLocalDate();
+		LocalDate currentExpiredDay = courseStartDay.plusMonths(practiceGroup.getBuyMonths());
+		Date courseExpiredDateTemp=Date.from(currentExpiredDay.atStartOfDay(DateUtil.zoneId).toInstant());
+		if(coursesExpireDate.before(courseExpiredDateTemp)){
+			throw new BizException("课程结束时间不得早于,{}", DateUtil.dateToString(coursesExpireDate, "yyyy年MM月dd日"));
+		}
+
 		practiceGroup.setCoursesExpireDate(coursesExpireDate);
 		practiceGroup.setUpdateTime(new Date());
 		practiceGroupDao.update(practiceGroup);

+ 15 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -47,6 +47,8 @@ import java.time.temporal.WeekFields;
 import java.util.*;
 import java.util.stream.Collectors;
 
+import static com.ym.mec.biz.dal.enums.SignInStatusEnum.*;
+
 @Service
 public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGroup> implements PracticeGroupService {
 
@@ -2155,9 +2157,9 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         int count = dataList.size();
         if (count > 0) {
             pageInfo.setTotal(count);
-            List<Long> courseScheduleIds = dataList.stream()
-                    .map(courseSchedule -> courseSchedule.getId())
-                    .distinct().collect(Collectors.toList());
+            List<Long> courseScheduleIds = dataList.stream().map(courseSchedule -> courseSchedule.getId()).distinct().collect(Collectors.toList());
+            List<TeacherAttendance> teacherAttendances = teacherAttendanceDao.findTeacherIdByCourseSchedule(courseScheduleIds);
+            Map<Long, List<TeacherAttendance>> courseTeacherAttendanceMap = teacherAttendances.stream().collect(Collectors.groupingBy(TeacherAttendance::getCourseScheduleId));
             List<Map<Long, Integer>> courseSettlementMaps = courseScheduleTeacherSalaryDao.checkCoursesIsSettlement(courseScheduleIds);
             Map<Long, Long> courseSettlementMap = MapUtil.convertIntegerMap(courseSettlementMaps);
             Map<Integer, Long> studentNumCourseMap = MapUtil.convertIntegerMap(studentAttendanceDao.countStudentAttendancesByCourses(courseScheduleIds));
@@ -2178,6 +2180,16 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
                 } else {
                     e.setIsCallNames(YesOrNoEnum.NO);
                 }
+                List<TeacherAttendance> courseTeacherAttendances = courseTeacherAttendanceMap.get(e.getId());
+                if(!CollectionUtils.isEmpty(courseTeacherAttendances)){
+                    TeacherAttendance teacherAttendance=courseTeacherAttendances.get(0);
+                    e.setIsSignIn(Objects.isNull(teacherAttendance.getSignInStatus())?3:teacherAttendance.getSignInStatus().getCode());
+                    e.setIsSignOut(Objects.isNull(teacherAttendance.getSignOutStatus())?3:teacherAttendance.getSignOutStatus().getCode());
+                    e.setSignInStatusEnum(e.getIsSignIn() == 1?NORMAL:e.getIsSignIn() == 0?UNUSUAL:NO);
+                    e.setSignOutStatusEnum(e.getIsSignOut() == 1?SignOutStatusEnum.NORMAL:e.getIsSignOut() == 0? SignOutStatusEnum.UNUSUAL: SignOutStatusEnum.NO);
+                    e.setSignInTime(teacherAttendance.getSignInTime());
+                    e.setSignOutTime(teacherAttendance.getSignOutTime());
+                }
             });
         }
         pageInfo.setRows(dataList);

+ 11 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentExtracurricularExercisesSituationServiceImpl.java

@@ -116,7 +116,7 @@ public class StudentExtracurricularExercisesSituationServiceImpl extends BaseSer
 	}
 
 	@Override
-	public PageInfo<StudentServiceDetailDto> findServiceStudentDetail(StudentServiceDetailQueryInfo queryInfo) {
+	public List<Map<String, Object>> findServiceStudentDetail(StudentServiceDetailQueryInfo queryInfo) {
 		PageInfo<StudentServiceDetailDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
 		Map<String, Object> params = new HashMap<>();
 		MapUtil.populateMap(params, queryInfo);
@@ -136,11 +136,16 @@ public class StudentExtracurricularExercisesSituationServiceImpl extends BaseSer
 				}
 				weekHomeworks.get(mondayStr).add(studentServiceDetailDto);
 			}
+			List<Map<String, Object>> results=new ArrayList<>();
+			for (Map.Entry<String, List<StudentServiceDetailDto>> stringListEntry : weekHomeworks.entrySet()) {
+				Map<String, Object> result=new HashMap<>();
+				result.put("monday", stringListEntry.getKey());
+				result.put("data", stringListEntry.getValue());
+				results.add(result);
+			}
+			return results;
+		}else{
+			return null;
 		}
-		if (count == 0) {
-			dataList = new ArrayList<>();
-		}
-		pageInfo.setRows(dataList);
-		return pageInfo;
 	}
 }

+ 1 - 1
mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml

@@ -297,7 +297,7 @@
 		LEFT JOIN course_schedule cs ON cs.id_ = csts.course_schedule_id_
 		LEFT JOIN teacher_attendance ta ON ta.course_schedule_id_ = cs.id_
 		LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cs.id_
-		WHERE (ta.sign_in_status_ IS NOT NULL OR ta.sign_out_status_ IS NOT NULL) AND sa.id_ IS NOT NULL
+		WHERE (ta.sign_in_status_ IS NOT NULL OR ta.sign_out_status_ IS NOT NULL) AND sa.status_ = 'NORMAL'
 		<if test="days!=null">
 			AND cs.class_date_ &lt;= DATE_FORMAT(DATE_ADD( NOW( ), INTERVAL - #{days} DAY ),'%Y-%m-%d')
 		</if>

+ 3 - 3
mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml

@@ -125,7 +125,7 @@
 			MAX(sees.id_) id_,
 			student_id_,
 			stu.username_ student_name_,
-			tea.real_name_ teacher_name_,
+			GROUP_CONCAT(tea.real_name_) teacher_name_,
 			o.name_ organ_name_,
 			SUM( expect_exercises_num_ ) expect_exercises_num_,
 			SUM( actual_exercises_num_ ) actual_exercises_num_,
@@ -165,7 +165,7 @@
 				AND NOT EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_ LEFT JOIN practice_group pg ON pg.id_=cssp.music_group_id_ WHERE cssp.user_id_=sees.student_id_ AND cssp.group_type_='PRACTICE' AND pg.type_='CHARGE' AND class_date_ BETWEEN #{monday} AND #{sunday})
 			</if>
 			GROUP BY
-			student_id_,teacher_id_
+			student_id_
 			<trim prefix="HAVING" suffixOverrides="and">
 				<if test="expectExercisesNum!=null">  SUM( expect_exercises_num_ ) = #{expectExercisesNum}</if>
 				<if test="actualExercisesNumIsAchieve!=null and actualExercisesNumIsAchieve==0">
@@ -231,7 +231,7 @@
 				AND NOT EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_ LEFT JOIN practice_group pg ON pg.id_=cssp.music_group_id_ WHERE cssp.user_id_=sees.student_id_ AND cssp.group_type_='PRACTICE' AND pg.type_='CHARGE' AND class_date_ BETWEEN #{monday} AND #{sunday})
 			</if>
 			GROUP BY
-			student_id_,teacher_id_
+			student_id_
 			<trim prefix="HAVING" suffixOverrides="and">
 				<if test="expectExercisesNum!=null">  SUM( expect_exercises_num_ ) = #{expectExercisesNum}</if>
 				<if test="actualExercisesNumIsAchieve!=null and actualExercisesNumIsAchieve==0">

+ 12 - 2
mec-im/src/main/java/com/ym/controller/RoomController.java

@@ -9,7 +9,6 @@ import com.ym.service.RoomService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
-
 import java.util.List;
 
 /**
@@ -25,7 +24,7 @@ public class RoomController{
     @RequestMapping(value = "/join", method = RequestMethod.POST)
     public Object joinRoom(@RequestBody ReqUserData data)
             throws ApiException, Exception {
-        RoomResult roomResult = roomService.joinRoom(data.getUserName(), data.getRoomId(), data.isAudience(), data.isDisableCamera());
+        RoomResult roomResult = roomService.joinRoom(data.getUserName(), data.getRoomId(), data.isAudience(), data.isDisableCamera(),data.isMusicMode());
         return new BaseResponse<>(roomResult);
     }
 
@@ -130,12 +129,21 @@ public class RoomController{
             result = roomService.controlDevice(data.getRoomId(), data.getUserId(), DeviceTypeEnum.Camera, data.getCameraOn());
         } else if (data.getMicrophoneOn() != null) {
             result = roomService.controlDevice(data.getRoomId(), data.getUserId(), DeviceTypeEnum.Microphone, data.getMicrophoneOn());
+        } else if (data.getMusicModeOn() != null) {
+            result = roomService.controlDevice(data.getRoomId(), data.getUserId(), DeviceTypeEnum.MusicMode, data.getMusicModeOn());
         } else {
             throw new ApiException(ErrorEnum.ERR_REQUEST_PARA_ERR);
         }
         return new BaseResponse<>(result);
     }
 
+    @RequestMapping(value = "/device/batchControl", method = RequestMethod.POST)
+    public Object batchControlDevice(@RequestBody ReqDeviceControlData data)throws Exception {
+        log.info("batchControl: {}",JSONObject.toJSON(data));
+        boolean result = roomService.batchControlDevice(data);
+        return new BaseResponse<>(result);
+    }
+
     @RequestMapping(value = "/device/sync", method = RequestMethod.POST)
     public Object syncDeviceState(@RequestBody ReqDeviceControlData data)
             throws ApiException, Exception {
@@ -144,6 +152,8 @@ public class RoomController{
             result = roomService.syncDeviceState(data.getRoomId(), DeviceTypeEnum.Camera, data.getCameraOn());
         } else if (data.getMicrophoneOn() != null) {
             result = roomService.syncDeviceState(data.getRoomId(), DeviceTypeEnum.Microphone, data.getMicrophoneOn());
+        } else if (data.getMusicModeOn() != null) {
+            result = roomService.syncDeviceState(data.getRoomId(), DeviceTypeEnum.MusicMode, data.getMusicModeOn());
         } else {
             throw new ApiException(ErrorEnum.ERR_REQUEST_PARA_ERR);
         }

+ 5 - 0
mec-im/src/main/java/com/ym/dao/RoomMemberDao.java

@@ -62,6 +62,11 @@ public interface RoomMemberDao extends JpaRepository<RoomMember, Long> {
     @Query(value = "update rongyun_room_member set mic=?3 where rid=?1 and uid=?2", nativeQuery = true)
     public int updateMicByRidAndUid(String rid, String uid, boolean mic);
 
+    @Transactional
+    @Modifying
+    @Query(value = "update rongyun_room_member set music_mode=?3 where rid=?1 and uid=?2", nativeQuery = true)
+    public int updateMusicByRidAndUid(String rid, String uid, boolean musicMode);
+
     public boolean existsByRidAndUid(String rid, String uid);
 
     public boolean existsByRidAndRole(String rid, int role);

+ 1 - 0
mec-im/src/main/java/com/ym/pojo/DeviceTypeEnum.java

@@ -6,4 +6,5 @@ package com.ym.pojo;
 public enum DeviceTypeEnum {
     Microphone,
     Camera,
+    MusicMode,
 }

+ 10 - 0
mec-im/src/main/java/com/ym/pojo/ReqDeviceControlData.java

@@ -9,9 +9,19 @@ import lombok.Data;
 public class ReqDeviceControlData {
 	private Boolean cameraOn;
 	private Boolean microphoneOn;
+	private Boolean musicModeOn;
 	private String roomId;
 	private String userId;
 	private String ticket;
+
+	public Boolean getMusicModeOn() {
+		return musicModeOn;
+	}
+
+	public void setMusicModeOn(Boolean musicModeOn) {
+		this.musicModeOn = musicModeOn;
+	}
+
 	public Boolean getCameraOn() {
 		return cameraOn;
 	}

+ 7 - 0
mec-im/src/main/java/com/ym/pojo/ReqUserData.java

@@ -12,6 +12,13 @@ public class ReqUserData {
 	private String userId;
 	private boolean audience;
 	private boolean disableCamera;
+	private boolean musicMode;
+	public boolean isMusicMode() {
+		return musicMode;
+	}
+	public void setMusicMode(boolean musicMode) {
+		this.musicMode = musicMode;
+	}
 	public String getUserName() {
 		return userName;
 	}

+ 2 - 0
mec-im/src/main/java/com/ym/pojo/RoomMember.java

@@ -22,6 +22,7 @@ public class RoomMember {
     private @Getter @Setter Date joinDt;
     private @Getter @Setter String name;
     private @Getter @Setter boolean camera = true;
+    private @Getter @Setter boolean musicMode = true;
     private @Getter @Setter boolean mic = true;
 
     public RoomMember() {
@@ -41,6 +42,7 @@ public class RoomMember {
                 ", joinDt=" + joinDt +
                 ", name='" + name + '\'' +
                 ", camera=" + camera +
+                ", musicMode=" + musicMode +
                 ", mic=" + mic +
                 '}';
     }

+ 46 - 14
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -103,13 +103,13 @@ public class RoomServiceImpl implements RoomService {
     @Value("${auth.sysconfig.tenantId}")
     private Integer lesseeOrganId;
 
-    @Transactional(rollbackFor = Exception.class)
+    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     @Override
-    public RoomResult joinRoom(String userName, String roomId, boolean isAudience, boolean isDisableCamera) throws ApiException, Exception {
+    public RoomResult joinRoom(String userName, String roomId, boolean isAudience, boolean isDisableCamera,boolean isMusicMode) throws ApiException, Exception {
         CheckUtils.checkArgument(userName != null, "userName must't be null");
         CheckUtils.checkArgument(roomId != null, "roomId must't be null");
 
-        log.info("joinRoom: roomId={}, userName={}, isAudience={}, isDisableCamera={}", roomId, userName, isAudience, isDisableCamera);
+        log.info("joinRoom: roomId={}, userName={}, isAudience={}, isDisableCamera={},isMusicMode={}", roomId, userName, isAudience, isDisableCamera,isMusicMode);
 
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         String userId = sysUser.getId().toString();
@@ -178,7 +178,7 @@ public class RoomServiceImpl implements RoomService {
             }else {
                 roleEnum = RoleEnum.RoleStudent;
             }
-            saveRoomMember(userId, userName, roomId, roleEnum.getValue(), !isDisableCamera, curTime);
+            saveRoomMember(userId, userName, roomId, roleEnum.getValue(), !isDisableCamera,!isMusicMode, curTime);
             IMApiResultInfo resultInfo = imHelper.joinGroup(new String[]{userId}, roomId, roomId);
             if (!resultInfo.isSuccess()) {
                 throw new ApiException(ErrorEnum.ERR_CREATE_ROOM_ERROR, resultInfo.getErrorMessage());
@@ -338,7 +338,7 @@ public class RoomServiceImpl implements RoomService {
         }
     }
 
-    private void saveRoomMember(String userId, String userName, String roomId, int role, boolean cameraOn, Date joinTime) {
+    private void saveRoomMember(String userId, String userName, String roomId, int role, boolean cameraOn,boolean musicModeOn, Date joinTime) {
         RoomMember roomMember = new RoomMember();
         roomMember.setUid(userId);
         roomMember.setName(userName);
@@ -346,6 +346,7 @@ public class RoomServiceImpl implements RoomService {
         roomMember.setRole(role);
         roomMember.setCamera(cameraOn);
         roomMember.setJoinDt(joinTime);
+        roomMember.setMusicMode(musicModeOn);
         roomMemberDao.save(roomMember);
     }
 
@@ -744,7 +745,6 @@ public class RoomServiceImpl implements RoomService {
         CheckUtils.checkArgument(roomDao.existsByRid(roomId), "room not exist");
         CheckUtils.checkArgument(roomMemberDao.existsByRidAndUid(roomId, userId), "room member not exist");
         SysUser authUser = sysUserFeignService.queryUserInfo();
-
         log.info("controlDevice: userId={}, typeEnum={}, onOff={}", userId, typeEnum, enable);
 
         if (enable) {
@@ -753,21 +753,23 @@ public class RoomServiceImpl implements RoomService {
             taskInfo.setRoomId(roomId);
             taskInfo.setTypeEnum(typeEnum);
             taskInfo.setOnOff(true);
-            taskInfo.setApplyUserId(userId);
+            taskInfo.setApplyUserId(authUser.getId().toString());
             taskInfo.setTargetUserId(userId);
             taskInfo.setTicket(ticket);
             scheduleManager.addTask(taskInfo);
             ControlDeviceNotifyMessage msg = new ControlDeviceNotifyMessage(ActionEnum.Invite.ordinal());
             msg.setTicket(ticket);
             msg.setType(taskInfo.getTypeEnum().ordinal());
-            msg.setOpUserId(userId);
+            msg.setOpUserId(authUser.getId().toString());
             msg.setOpUserName(authUser.getUsername());
-            imHelper.publishMessage(userId, userId, roomId, msg);
+            imHelper.publishMessage(authUser.getId().toString(), userId, roomId, msg);
         } else {
             if (typeEnum.equals(DeviceTypeEnum.Camera)) {
                 roomMemberDao.updateCameraByRidAndUid(roomId, userId, false);
-            } else {
+            } else if (typeEnum.equals(DeviceTypeEnum.Microphone)){
                 roomMemberDao.updateMicByRidAndUid(roomId, userId, false);
+            }else {
+                roomMemberDao.updateMusicByRidAndUid(roomId, userId, false);
             }
             DeviceStateChangedMessage deviceResourceMessage = new DeviceStateChangedMessage(typeEnum.ordinal(), false);
             deviceResourceMessage.setUserId(userId);
@@ -775,12 +777,39 @@ public class RoomServiceImpl implements RoomService {
             if (!userInfoList.isEmpty()) {
                 deviceResourceMessage.setUserName(userInfoList.get(0).getName());
             }
-            imHelper.publishMessage(userId, roomId, deviceResourceMessage, 1);
+            imHelper.publishMessage(authUser.getId().toString(), roomId, deviceResourceMessage, 1);
         }
         return true;
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean batchControlDevice(ReqDeviceControlData data) throws Exception {
+        //获取所有的学员列表
+        List<RoomMember> roomMembers = roomMemberDao.findByRidAndRole(data.getRoomId(),RoleEnum.RoleStudent.getValue());
+        if(roomMembers.size() == 0){
+            return false;
+        }
+        boolean result = true;
+        if (data.getCameraOn() != null) {
+            for (RoomMember e:roomMembers) {
+                controlDevice(data.getRoomId(), e.getUid(), DeviceTypeEnum.Camera, data.getCameraOn());
+            }
+        } else if (data.getMicrophoneOn() != null) {
+            for (RoomMember e:roomMembers) {
+                controlDevice(data.getRoomId(), e.getUid(), DeviceTypeEnum.Microphone, data.getMicrophoneOn());
+            }
+        } else if (data.getMusicModeOn() != null) {
+            for (RoomMember e:roomMembers) {
+                controlDevice(data.getRoomId(), e.getUid(), DeviceTypeEnum.MusicMode, data.getMusicModeOn());
+            }
+        } else {
+            throw new ApiException(ErrorEnum.ERR_REQUEST_PARA_ERR);
+        }
+        return result;
+    }
+
+    @Override
     public Boolean approveControlDevice(String roomId, String ticket) throws ApiException, Exception {
         CheckUtils.checkArgument(ticket != null, "ticket must't be null");
         SysUser authUser = sysUserFeignService.queryUserInfo();
@@ -821,6 +850,7 @@ public class RoomServiceImpl implements RoomService {
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean syncDeviceState(String roomId, DeviceTypeEnum type, boolean enable) throws ApiException, Exception {
         CheckUtils.checkArgument(roomId != null, "roomId must't be null");
         CheckUtils.checkArgument(roomDao.existsByRid(roomId), "room not exist");
@@ -832,9 +862,12 @@ public class RoomServiceImpl implements RoomService {
         if (type.equals(DeviceTypeEnum.Camera)) {
             result = roomMemberDao.updateCameraByRidAndUid(roomId, userId, enable);
             deviceResourceMessage = new DeviceStateChangedMessage(type.ordinal(), enable);
-        } else {
+        } else if (type.equals(DeviceTypeEnum.Microphone)){
             result = roomMemberDao.updateMicByRidAndUid(roomId, userId, enable);
             deviceResourceMessage = new DeviceStateChangedMessage(type.ordinal(), enable);
+        }else {
+            result = roomMemberDao.updateMusicByRidAndUid(roomId, userId, enable);
+            deviceResourceMessage = new DeviceStateChangedMessage(type.ordinal(), enable);
         }
         deviceResourceMessage.setUserId(userId);
         imHelper.publishMessage(userId, roomId, deviceResourceMessage, 1);
@@ -1238,14 +1271,13 @@ public class RoomServiceImpl implements RoomService {
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
+    @Transactional(rollbackFor = Exception.class)
     public boolean statusSync(String roomId,String userId) throws Exception {
         log.info("statusSync: roomId={}, userId={}", roomId, userId);
         List<RoomMember> byRidAndUid = roomMemberDao.findByRidAndUid(roomId, userId);
         if(byRidAndUid.size() > 0){
 //            SysUser sysUser = sysUserFeignService.queryUserById(Integer.parseInt(userId));
             SysUser sysUser = teacherDao.getUser(Integer.parseInt(userId));
-            studentDao.lockUser(Integer.parseInt(userId));
             Teacher teacher = teacherDao.get(sysUser.getId());
             CourseSchedule courseSchedule = courseScheduleDao.get(Long.parseLong(roomId.substring(1)));
             log.info("statusSyncLevelRoom: roomId={}, userId={}", roomId, userId);

+ 4 - 6
mec-im/src/main/java/com/ym/service/RoomService.java

@@ -1,10 +1,7 @@
 package com.ym.service;
 
 import com.ym.common.ApiException;
-import com.ym.pojo.DeviceTypeEnum;
-import com.ym.pojo.ReqChangeUserRoleData;
-import com.ym.pojo.ReqMemberOnlineStatus;
-import com.ym.pojo.RoomResult;
+import com.ym.pojo.*;
 
 import java.util.List;
 
@@ -13,7 +10,7 @@ import java.util.List;
  */
 public interface RoomService {
     //everyone
-    public RoomResult joinRoom(String userName, String roomId, boolean isAudience, boolean isDisableCamera) throws ApiException, Exception;
+    public RoomResult joinRoom(String userName, String roomId, boolean isAudience, boolean isDisableCamera,boolean isMusicMode) throws ApiException, Exception;
 
     void signIn(Long roomId);
 
@@ -38,6 +35,8 @@ public interface RoomService {
 
     public Boolean controlDevice(String roomId, String userId, DeviceTypeEnum type, boolean enable) throws ApiException, Exception;
 
+    Boolean batchControlDevice(ReqDeviceControlData data) throws Exception;
+
     public Boolean approveControlDevice(String roomId, String ticket) throws ApiException, Exception;
 
     public Boolean rejectControlDevice(String roomId, String ticket) throws ApiException, Exception;
@@ -67,5 +66,4 @@ public interface RoomService {
     public void userIMOfflineKick(String userId);
 
     boolean statusSync(String roomId,String userId) throws Exception;
-
 }

+ 1 - 1
mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -214,7 +214,7 @@ public class TaskController extends BaseController {
 	//学生服务信息统计
 	@GetMapping("/exercisesSituationStatistics")
 	public void exercisesSituationStatistics(){
-		extracurricularExercisesReplyService.exercisesSituationStatistics();
+		extracurricularExercisesReplyService.exercisesSituationStatistics2();
 	}
 
 	//更新学生运营指标