瀏覽代碼

Merge remote-tracking branch 'origin/feature/0529-live' into feature/0529-live

shangke 2 年之前
父節點
當前提交
7c891bcf3c
共有 45 個文件被更改,包括 476 次插入280 次删除
  1. 80 93
      .idea/httpRequests/http-requests-log.http
  2. 1 1
      audio-analysis/src/main/java/com/yonge/netty/dto/HardLevelEnum.java
  3. 2 1
      audio-analysis/src/main/java/com/yonge/netty/dto/UserChannelContext.java
  4. 1 1
      audio-analysis/src/main/resources/logback-spring.xml
  5. 18 18
      mec-biz/pom.xml
  6. 11 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseShareDao.java
  7. 0 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentAttendanceViewDto.java
  8. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SysUserDto.java
  9. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/ClassGroupQueryInfo.java
  10. 15 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/CourseShareQueryInfo.java
  11. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseShareService.java
  12. 9 9
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java
  13. 5 2
      mec-biz/src/main/java/com/ym/mec/biz/service/OrganizationService.java
  14. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentAttendanceService.java
  15. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java
  16. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CooperationOrganServiceImpl.java
  17. 24 55
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseShareServiceImpl.java
  18. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupServiceImpl.java
  19. 5 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java
  20. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImUserFriendServiceImpl.java
  21. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  22. 15 11
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  23. 83 0
      mec-biz/src/main/resources/config/mybatis/CourseShareMapper.xml
  24. 6 6
      mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesMapper.xml
  25. 13 13
      mec-biz/src/main/resources/config/mybatis/SubjectMapper.xml
  26. 1 1
      mec-client-api/src/main/java/com/ym/mec/oa/OaFeignService.java
  27. 5 5
      mec-common/audit-log/src/main/java/com/yonge/log/interceptor/AuditLogInterceptor.java
  28. 11 10
      mec-common/common-core/src/main/java/com/ym/mec/common/controller/BaseController.java
  29. 13 13
      mec-common/common-core/src/main/java/com/ym/mec/common/exception/BizException.java
  30. 2 0
      mec-im/src/main/java/com/ym/pojo/RoomResult.java
  31. 38 0
      mec-im/src/main/java/com/ym/service/Impl/RoomMemberServiceImpl.java
  32. 13 3
      mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java
  33. 15 0
      mec-im/src/main/java/com/ym/service/RoomMemberService.java
  34. 12 2
      mec-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java
  35. 26 7
      mec-student/src/main/java/com/ym/mec/student/controller/WechatController.java
  36. 1 1
      mec-student/src/main/resources/logback-spring.xml
  37. 0 1
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/ExtracurricularExercisesController.java
  38. 5 4
      mec-web/pom.xml
  39. 9 1
      mec-web/src/main/java/com/ym/mec/web/controller/CourseShareController.java
  40. 0 1
      mec-web/src/main/java/com/ym/mec/web/controller/OperatingReportController.java
  41. 10 2
      mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java
  42. 0 1
      mec-web/src/main/java/com/ym/mec/web/controller/student/StudentAttendanceController.java
  43. 9 4
      mec-websocket/src/main/java/com/ym/mec/web/handler/WhiteboardHandler.java
  44. 1 1
      mec-websocket/src/main/java/com/ym/mec/web/support/socket/ServerRunner.java
  45. 4 2
      pom.xml

+ 80 - 93
.idea/httpRequests/http-requests-log.http

@@ -1,3 +1,83 @@
+GET http://127.0.0.1:9001/studentVipGroup/joinLiveRoomByShare?courseScheduleId=2179
+Authorization: bearer 093517b0-c9a4-407b-b558-0d71bf157b16
+Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-06-12T095605.200.json
+
+###
+
+GET http://127.0.0.1:9001/studentVipGroup/joinLiveRoomByShare?courseScheduleId=2179
+Authorization: bearer 093517b0-c9a4-407b-b558-0d71bf157b16
+Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-06-12T095427.200.json
+
+###
+
+GET http://127.0.0.1:9001/studentVipGroup/joinLiveRoomByShare?courseScheduleId=2179
+Authorization: bearer 093517b0-c9a4-407b-b558-0d71bf157b16
+Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-06-12T095323.200.json
+
+###
+
+GET http://127.0.0.1:9001/studentVipGroup/joinLiveRoomByShare?courseScheduleId=2179
+Authorization: bearer 093517b0-c9a4-407b-b558-0d71bf157b16
+Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-06-12T095238.200.json
+
+###
+
+GET http://127.0.0.1:9001/studentVipGroup/joinLiveRoomByShare?courseScheduleId=2179
+Authorization: bearer 093517b0-c9a4-407b-b558-0d71bf157b16
+Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-06-12T095217.200.json
+
+###
+
+GET http://127.0.0.1:9001/studentVipGroup/joinLiveRoomByShare?courseScheduleId=2179
+Authorization: bearer 093517b0-c9a4-407b-b558-0d71bf157b16
+Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-06-12T095045.200.json
+
+###
+
+GET http://127.0.0.1:9001/studentVipGroup/joinLiveRoomByShare?courseScheduleId=2179
+Authorization: bearer 093517b0-c9a4-407b-b558-0d71bf157b16
+Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-06-12T094907.200.json
+
+###
+
+GET http://127.0.0.1:9001/studentVipGroup/joinLiveRoomByShare?courseScheduleId=2179
+Authorization: bearer 81d0c352-fcc8-4812-87f5-0f7a68d10451
+Connection: Keep-Alive
+User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
+Accept-Encoding: br,deflate,gzip,x-gzip
+
+<> 2023-06-12T094734.200.json
+
+###
+
 POST http://localhost:8005/imSendGroupMessage/send
 Content-Type: application/json
 tenantId: 1
@@ -653,96 +733,3 @@ Accept-Encoding: br,deflate,gzip,x-gzip
 
 ###
 
-GET http://127.0.0.1:9002/teacherCourseSchedule/liveCourseScheduleTime?courseScheduleId=1678
-Authorization: bearer 2cd308e9-0b8b-4b08-b3cd-f34dc50a8dfd
-Proxy-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-06-07T152014.200.json
-
-###
-
-GET http://127.0.0.1:8005/teacher/findTeacherByTenantId
-Authorization: bearer 7e4145d6-111d-429b-893a-4546df0f58ed
-tenantId: 1
-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-06-06T170540.200.json
-
-###
-
-GET http://127.0.0.1:9002/classGroup/findTeacherClassStudents?classGroupId=191
-Authorization: bearer 7957b8d7-63d0-43e1-9c06-8a36b2cc85a4
-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-06-05T193543.200.json
-
-###
-
-GET http://127.0.0.1:9002/classGroup/findTeacherClassStudents?classGroupId=197
-Authorization: bearer 7957b8d7-63d0-43e1-9c06-8a36b2cc85a4
-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-06-05T193534.200.json
-
-###
-
-GET http://127.0.0.1:9002/classGroup/findTeacherClassStudents?courseScheduleId=1819
-Authorization: bearer 7957b8d7-63d0-43e1-9c06-8a36b2cc85a4
-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-06-05T193400.200.json
-
-###
-
-GET http://127.0.0.1:9002/classGroup/findTeacherClassStudents?courseScheduleId=1270
-Authorization: bearer 7957b8d7-63d0-43e1-9c06-8a36b2cc85a4
-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-06-05T193335.200.json
-
-###
-
-GET http://127.0.0.1:9002/classGroup/findTeacherClassStudents
-Authorization: bearer 7957b8d7-63d0-43e1-9c06-8a36b2cc85a4
-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-<> 2023-06-05T193308.200.json
-
-###
-
-POST http://127.0.0.1:8005/studentManage/userPage
-Authorization: bearer b897da27-5a37-47df-8e76-54d80a61a55d
-Content-Type: application/json
-coopId: 25
-Content-Length: 137
-Connection: Keep-Alive
-User-Agent: Apache-HttpClient/4.5.14 (Java/17.0.6)
-Accept-Encoding: br,deflate,gzip,x-gzip
-
-{
-//  "keyword": "一",
-//    "musicGroupId": 23050516201200001,
-  //  "subjectId": 2,
-  //  "vipFlag": true,
-//  "studentId": 2248340
-
-}
-
-<> 2023-06-02T201036.200.json
-
-###
-

+ 1 - 1
audio-analysis/src/main/java/com/yonge/netty/dto/HardLevelEnum.java

@@ -9,7 +9,7 @@ public enum HardLevelEnum implements BaseEnum<String, HardLevelEnum> {
 	 * 完成度范围, 未演奏的范围
 	 */
 	//BEGINNER("入门级", 3, 5, 5, 5, 10, 10, 13, 15, 60, 10), 
-	BEGINNER("入门级", 3, 5, 10, 10, 15, 15, 22, 22, 75, 25), 
+	BEGINNER("入门级", 5, 5, 3, 3, 6, 8, 13, 15, 95, 10), 
 	/**
 	 * 进阶级, 振幅阈值, 频率阈值 <br>
 	 * 节奏有效范围(1分音符), 节奏有效范围(2分音符), 节奏有效范围(4分音符), 节奏有效范围(8分音符), 节奏有效范围(16分音符), 节奏有效范围(32分音符)<br>

+ 2 - 1
audio-analysis/src/main/java/com/yonge/netty/dto/UserChannelContext.java

@@ -890,7 +890,8 @@ public class UserChannelContext {
 			return chunkList.stream().filter(t -> t.getAmplitude() > hardLevel.getAmplitudeThreshold()).count() <= 0;
 		}
 		
-		Optional<ChunkAnalysis> chunkAnalysisOptional = totalChunkAnalysisList.stream().filter(t -> Double.doubleToLongBits(t.getEndTime()) < Double.doubleToLongBits(firstChunkAnalysis.getStartTime())).findFirst();
+		//Optional<ChunkAnalysis> chunkAnalysisOptional = totalChunkAnalysisList.stream().filter(t -> Double.doubleToLongBits(t.getEndTime()) < Double.doubleToLongBits(firstChunkAnalysis.getStartTime())).findFirst();
+		Optional<ChunkAnalysis> chunkAnalysisOptional = totalChunkAnalysisList.stream().filter(t -> Double.doubleToLongBits(t.getEndTime()) < Double.doubleToLongBits(firstChunkAnalysis.getStartTime())).reduce((first, second) -> second);
 
 		ChunkAnalysis lastChunkAnalysis = null;
 		if (chunkAnalysisOptional.isPresent()) {

+ 1 - 1
audio-analysis/src/main/resources/logback-spring.xml

@@ -27,7 +27,7 @@
 		</encoder>
 	</appender>
 
-	<logger name="com.yonge" level="info" />
+	<logger name="com.yonge" level="debug" />
 
 	<!--开发环境:打印控制台 -->
 	<springProfile name="dev">

+ 18 - 18
mec-biz/pom.xml

@@ -13,7 +13,7 @@
 	<url>http://maven.apache.org</url>
 	<properties>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <redisson.version>3.16.4</redisson.version>
+		<redisson.version>3.16.4</redisson.version>
 	</properties>
 
 	<dependencies>
@@ -26,31 +26,31 @@
 			<groupId>com.ym</groupId>
 			<artifactId>mec-auth-api</artifactId>
 		</dependency>
-        <dependency>
-            <groupId>com.ym</groupId>
-            <artifactId>mec-client-api</artifactId>
-        </dependency>
+		<dependency>
+			<groupId>com.ym</groupId>
+			<artifactId>mec-client-api</artifactId>
+		</dependency>
 
 		<dependency>
 			<groupId>com.ym</groupId>
 			<artifactId>mec-thirdparty</artifactId>
 		</dependency>
-		
+
 		<dependency>
 			<groupId>com.ym</groupId>
 			<artifactId>snakerflowy</artifactId>
 		</dependency>
 
-        <dependency>
-            <groupId>org.redisson</groupId>
-            <artifactId>redisson-spring-boot-starter</artifactId>
-            <version>${redisson.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>net.coobird</groupId>
-            <artifactId>thumbnailator</artifactId>
-            <version>0.4.11</version>
-        </dependency>
+		<dependency>
+			<groupId>org.redisson</groupId>
+			<artifactId>redisson-spring-boot-starter</artifactId>
+			<version>${redisson.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>net.coobird</groupId>
+			<artifactId>thumbnailator</artifactId>
+			<version>0.4.11</version>
+		</dependency>
 
 		<dependency>
 			<groupId>com.microsvc.toolkit.middleware</groupId>
@@ -84,5 +84,5 @@
             <version>1.0.0</version>
         </dependency>
 
-    </dependencies>
-</project>
+	</dependencies>
+</project>

+ 11 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseShareDao.java

@@ -1,10 +1,14 @@
 package com.ym.mec.biz.dal.dao;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ym.mec.biz.dal.dto.StudentManageListDto;
 import com.ym.mec.biz.dal.entity.CourseShare;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 public interface CourseShareDao extends BaseDAO<Integer, CourseShare> {
 
@@ -25,5 +29,11 @@ public interface CourseShareDao extends BaseDAO<Integer, CourseShare> {
      * @param studentId        用户id
      * @param courseScheduleId 课程id
      */
-    CourseShare getByUserIdAndCourseId(@Param("studentId") Integer studentId, @Param("courseScheduleId") Integer courseScheduleId);
+    CourseShare getByUserIdAndCourseId(@Param("studentId") Integer studentId,
+                                       @Param("courseScheduleId") Integer courseScheduleId);
+
+    <T> IPage<T> selectStudentByParam(Page<StudentManageListDto> page, @Param("param") Map<String, Object> param);
+
+    <T> List<T> selectStudentByParam(@Param("param") Map<String, Object> param);
+
 }

+ 0 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentAttendanceViewDto.java

@@ -4,7 +4,6 @@ import com.ym.mec.biz.dal.enums.JoinCourseType;
 import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.StringUtils;
-import sun.swing.StringUIClientPropertyKey;
 
 /**
  * @Author Joburgess

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SysUserDto.java

@@ -2,7 +2,7 @@ package com.ym.mec.biz.dal.dto;
 
 import io.swagger.annotations.ApiModelProperty;
 
-public class SysUserDto {
+public class    SysUserDto {
     @ApiModelProperty(value = "用户ID")
     private Long userId;
 

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/page/ClassGroupQueryInfo.java

@@ -28,7 +28,8 @@ public class ClassGroupQueryInfo extends EducationBaseQueryInfo {
     @ApiModelProperty(value = "少于3人的线上基础技能班,大于0。异常传true、提醒传false")
     private Boolean lessThenThreeHighOnline;
 
-	private Integer mainTeacherUserId;
+    @ApiModelProperty(value = "主教老师编号", required = false)
+    private Integer mainTeacherUserId;
 
 	@ApiModelProperty(value = "班级编号列表")
 	private List<Integer> classGroupIdList;

+ 15 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/CourseShareQueryInfo.java

@@ -21,4 +21,19 @@ public class CourseShareQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "课程编号")
     private Long courseId;
 
+    @ApiModelProperty(value = "查询条件")
+    private String search;
+
+    @ApiModelProperty(value = "声部ID")
+    private String subjectId;
+
+    @ApiModelProperty(value = "分部ID,多个逗号隔开")
+    private String organIds;
+
+    @ApiModelProperty(value = "群聊ID")
+    private String groupIds;
+
+    @ApiModelProperty(value = "学校ID")
+    private String schoolIds;
+
 }

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/CourseShareService.java

@@ -28,4 +28,6 @@ public interface CourseShareService extends BaseService<Integer, CourseShare> {
      * @return
      */
     CourseShare getByUserIdAndCourseId(Integer studentId, Integer courseScheduleId);
+
+    PageInfo<StudentManageListDto> queryAllCourseShareStudent(CourseShareQueryInfo shareQueryInfo);
 }

+ 9 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java

@@ -462,6 +462,15 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
     boolean confirmDelivery(Integer userId, MusicGroupDeliveryVo musicGroupDeliveryVo);
 
     /**
+     * @description: 缴费项目外部订单导入
+     * @param file
+     * @return java.util.List<java.lang.String>
+     * @author zx
+     * @date 2023/5/5 14:03
+     */
+    List<String> importMusicGroupPayment(MultipartFile file) throws Exception;
+
+    /**
      * 获取乐团信息
      */
     Map<String,MusicGroup> getMapByIds(List<String> musicGroupIds);
@@ -474,13 +483,4 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
      */
     List<Subject> getSubjectListByIdAndCoopId(String musicGroupId, Integer coopId);
 
-
-    /**
-     * @description: 缴费项目外部订单导入
-     * @param file
-     * @return java.util.List<java.lang.String>
-     * @author zx
-     * @date 2023/5/5 14:03
-     */
-    List<String> importMusicGroupPayment(MultipartFile file) throws Exception;
 }

+ 5 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/OrganizationService.java

@@ -1,9 +1,12 @@
 package com.ym.mec.biz.service;
 
-import java.util.*;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import com.ym.mec.biz.dal.entity.Organization;
-import com.ym.mec.biz.dal.enums.EGroupGradeType;
 import com.ym.mec.biz.dal.page.EducationBaseQueryInfo;
 import com.ym.mec.common.service.BaseService;
 

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentAttendanceService.java

@@ -111,6 +111,7 @@ public interface StudentAttendanceService extends BaseService<Long, StudentAtten
 	 */
 	void repairStudentAttendance(Integer month);
 
+
 	/**
 	 * 学员考勤导出列表
 	 * @author zouxuan

+ 3 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java

@@ -402,14 +402,14 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
     // IM服务方案(rongCloud,tencentCloud
     String IM_SERVICE_PROVIDER = "im_service_provider";
 
+    // 游客默认头像
+    String VISITOR_DEFAULT_AVATAR = "visitor_default_avatar";
+
     // 网络教室服务提供方配置
     String RTC_SERVICE_PROVIDER = "rtc_service_provider";
 
     // 按分部强制开始为腾讯服务提供
     String TENCENT_RTC_SERVICE_PROVIDER = "tencent_rtc_service_provider";
-    
-    // 游客默认头像
-    String VISITOR_DEFAULT_AVATAR = "visitor_default_avatar";
 
     // 微信公众号appid
     String WECHAT_APPID = "wechat_appid";

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CooperationOrganServiceImpl.java

@@ -243,4 +243,5 @@ public class CooperationOrganServiceImpl extends BaseServiceImpl<Integer, Cooper
         }
         return musicGroupList.stream().filter(o -> o.getStatus().equals(MusicGroupStatusEnum.PROGRESS)).collect(Collectors.toList());
     }
+
 }

+ 24 - 55
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseShareServiceImpl.java

@@ -1,23 +1,20 @@
 package com.ym.mec.biz.service.impl;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.common.collect.Lists;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.CourseScheduleDao;
 import com.ym.mec.biz.dal.dao.CourseScheduleStudentPaymentDao;
 import com.ym.mec.biz.dal.dao.CourseShareDao;
-import com.ym.mec.biz.dal.dao.ImLiveRoomPurviewDao;
 import com.ym.mec.biz.dal.dao.OrganizationDao;
 import com.ym.mec.biz.dal.dao.StudentManageDao;
-import com.ym.mec.biz.dal.dao.SubjectDao;
 import com.ym.mec.biz.dal.dto.CourseShareDto;
 import com.ym.mec.biz.dal.dto.StudentManageListDto;
-import com.ym.mec.biz.dal.dto.SysUserDto;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.CourseScheduleStudentPayment;
 import com.ym.mec.biz.dal.entity.CourseShare;
 import com.ym.mec.biz.dal.entity.Organization;
 import com.ym.mec.biz.dal.entity.Student;
-import com.ym.mec.biz.dal.entity.Subject;
 import com.ym.mec.biz.dal.enums.JoinCourseType;
 import com.ym.mec.biz.dal.page.CourseShareQueryInfo;
 import com.ym.mec.biz.service.CourseShareService;
@@ -26,11 +23,11 @@ import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.filters.TenantIdThreadLocal;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.PageUtil;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.excel.POIUtil;
 import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -83,12 +80,6 @@ public class CourseShareServiceImpl extends BaseServiceImpl<Integer, CourseShare
     @Autowired
     private OrganizationDao organizationDao;
 
-    @Autowired
-    private ImLiveRoomPurviewDao imLiveRoomPurviewDao;
-
-    @Autowired
-    private SubjectDao subjectDao;
-
     private static final List<String> STUDENT_TEMPLATE_FIELDS = Arrays.asList("分部", "学生姓名", "手机号");
 
     @Override
@@ -105,11 +96,11 @@ public class CourseShareServiceImpl extends BaseServiceImpl<Integer, CourseShare
         MapUtil.populateMap(params, courseShareDto);
         List<Integer> userIds = courseShareDto.getUserIds();
         if (params.keySet().isEmpty() && CollectionUtils.isEmpty(userIds)) {
-            throw new BizException("未选择参数");
+            throw new BizException("未选择搜索条件");
         }
-        List<SysUserDto> studentList = imLiveRoomPurviewDao.selectRoomPurviewStudent(params);
+        List<StudentManageListDto> studentList = courseShareDao.selectStudentByParam(params);
         List<Integer> userIdList = studentList.stream()
-                .map(SysUserDto::getUserId).map(Long::intValue).distinct().collect(Collectors.toList());
+                .map(StudentManageListDto::getUserId).distinct().collect(Collectors.toList());
         if (CollectionUtils.isNotEmpty(userIds)) {
             userIds.forEach(next -> {
                 if (!userIdList.contains(next)) {
@@ -150,46 +141,24 @@ public class CourseShareServiceImpl extends BaseServiceImpl<Integer, CourseShare
     @Override
     public PageInfo<StudentManageListDto> queryCourseSharedStudent(CourseShareQueryInfo shareQueryInfo) {
         CourseSchedule courseSchedule = getCourseScheduleById(shareQueryInfo.getCourseId());
-        PageInfo<StudentManageListDto> pageInfo = new PageInfo<>(shareQueryInfo.getPage(), shareQueryInfo.getRows());
         // 查询该课程已经分享的学生列表
-        Map<String, Object> courseParam = new HashMap<>(2);
-        courseParam.put("courseId", shareQueryInfo.getCourseId());
-        courseParam.put(TENANT_ID, courseSchedule.getTenantId());
-        List<CourseShare> courseShareRecords = courseShareDao.findAll(courseParam);
-        if (CollectionUtils.isEmpty(courseShareRecords)) {
-            pageInfo.setTotal(0);
-            pageInfo.setRows(new ArrayList<>());
-            return pageInfo;
-        }
-
-        // 查询学生列表
-        Map<String, Object> param = new HashMap<>(2);
+        Map<String, Object> param = new HashMap<>();
+        MapUtil.populateMap(param, shareQueryInfo);
         param.put(TENANT_ID, courseSchedule.getTenantId());
+        param.put("inExist", 1);
+        Page<StudentManageListDto> pageInfo = PageUtil.getPageInfo(param);
+        return PageUtil.pageInfo(courseShareDao.selectStudentByParam(pageInfo, param));
+    }
+
+    @Override
+    public PageInfo<StudentManageListDto> queryAllCourseShareStudent(CourseShareQueryInfo shareQueryInfo) {
+        CourseSchedule courseSchedule = getCourseScheduleById(shareQueryInfo.getCourseId());
+        // 查询所有未分享的学生
+        Map<String, Object> param = new HashMap<>();
         MapUtil.populateMap(param, shareQueryInfo);
-        param.put("userIds", courseShareRecords.stream().map(CourseShare::getUserId).toArray());
-        int count = studentManageDao.countStudentByOrganId(param);
-        pageInfo.setTotal(count);
-        if (count == 0) {
-            pageInfo.setRows(new ArrayList<>());
-            return pageInfo;
-        }
-        param.put("offset", pageInfo.getOffset());
-        List<StudentManageListDto> studentManageListDtos = studentManageDao.findStudentsByOrganId(param);
-        List<Subject> subjects = subjectDao.findAll(new HashMap<>());
-        Map<Integer, String> subjectIdNameMap = subjects.stream()
-                .collect(Collectors.toMap(Subject::getId, Subject::getName));
-        for (StudentManageListDto next : studentManageListDtos) {
-            String subjectIdList = next.getSubjectIdList();
-            if (StringUtils.isEmpty(subjectIdList)) {
-                continue;
-            }
-            List<String> subjectNames = Arrays.stream(subjectIdList.split(","))
-                    .map(id -> subjectIdNameMap.getOrDefault(Integer.valueOf(id), "")).distinct()
-                    .collect(Collectors.toList());
-            next.setSubjectName(String.join(",", subjectNames));
-        }
-        pageInfo.setRows(studentManageListDtos);
-        return pageInfo;
+        param.put(TENANT_ID, courseSchedule.getTenantId());
+        Page<StudentManageListDto> pageInfo = PageUtil.getPageInfo(param);
+        return PageUtil.pageInfo(courseShareDao.selectStudentByParam(pageInfo, param));
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -353,7 +322,7 @@ public class CourseShareServiceImpl extends BaseServiceImpl<Integer, CourseShare
         }
         Object orgName = row.get(STUDENT_TEMPLATE_FIELDS.get(0));
         if (Objects.isNull(orgName) || !orgNames.contains(orgName.toString().trim())) {
-            rowIndexMsg.put(currentRowIndex, String.format("第%s行分部数据格式错误或者所属分部不存在%n", currentRowIndex));
+            rowIndexMsg.put(currentRowIndex, String.format("第%s行分部数据格式错误或者所属分部不存在", currentRowIndex));
         } else {
             student.setOrganName(orgName.toString().trim());
         }
@@ -361,19 +330,19 @@ public class CourseShareServiceImpl extends BaseServiceImpl<Integer, CourseShare
         if (Objects.nonNull(studentName)) {
             student.setUsername(studentName.toString().trim());
         } else {
-            rowIndexMsg.put(currentRowIndex, String.format("第%s行学生姓名数据格式错误%n", currentRowIndex));
+            rowIndexMsg.put(currentRowIndex, String.format("第%s行学生姓名数据格式错误", currentRowIndex));
         }
         Object phoneNo = row.get(STUDENT_TEMPLATE_FIELDS.get(2));
         if (Objects.nonNull(phoneNo)) {
             String phone = phoneNo.toString().trim();
             if (phoneNos.contains(phone)) {
-                rowIndexMsg.put(currentRowIndex, String.format("第%s行手机号重复%n", currentRowIndex));
+                rowIndexMsg.put(currentRowIndex, String.format("第%s行手机号重复", currentRowIndex));
                 return null;
             }
             student.setPhone(phone);
             phoneNos.add(phone);
         } else {
-            rowIndexMsg.put(currentRowIndex, String.format("第%s行手机号数据格式错误%n", currentRowIndex));
+            rowIndexMsg.put(currentRowIndex, String.format("第%s行手机号数据格式错误", currentRowIndex));
         }
         return student;
     }

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

@@ -395,7 +395,7 @@ public class ImGroupServiceImpl extends BaseServiceImpl<String, ImGroup> impleme
             imGroup.setGroupType(ImGroup.GroupTypeEnum.SCHOOL);
             imGroup.setCreateTime(new Date());
             imGroup.setUpdateTime(new Date());
-            imGroup.setTenantId(TenantContextHolder.getTenantId());
+            imGroup.setTenantId(cooperationOrgan.getTenantId());
             imGroupDao.insert(imGroup);
             imPluginService.groupCreate(imGroup.getId(), imGroup.getName(), userId.toString());
 

+ 5 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -1901,7 +1901,11 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
             if (Objects.isNull(courseSchedule)) {
                 return userInfo;
             }
-            courseShareService.createPaymentRecord(courseSchedule.getId(),userId);
+            try {
+                courseShareService.createPaymentRecord(courseSchedule.getId(),userId);
+            } catch (Exception e) {
+                log.error("getLiveRoomUserInfo>>>> createPaymentRecord error", e);
+            }
         }
 
         return userInfo;

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

@@ -350,7 +350,7 @@ public class ImUserFriendServiceImpl extends BaseServiceImpl<Long, ImUserFriend>
                 studentSubjectName = MapUtil.convertMybatisMap(studentRegistrationDao.getStudentSubjectNameByStuIds(musicGroup.getId(),studentIds));
             }
 
-        }else if(groupType == VIP){
+        }else if(groupType == VIP || groupType == LIVE){
             VipGroup vipGroup = vipGroupDao.get(Long.parseLong(musicGroupId));
             educationIds.add(vipGroup.getEducationalTeacherId());
         }else if(groupType == PRACTICE){

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

@@ -352,7 +352,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
         OrderCancelModel  model = new OrderCancelModel();
 
         Map<String, Object> payment = Payment.queryPayment(payingOrder.getTransNo(), hfMerchantConfig.getMerKey());
-        LOGGER.info("订单[{}]交易主动查询接口返回:{}", payingOrder.getTransNo(), payment);
+        LOGGER.warn("订单[{}]交易主动查询接口返回:{}", payingOrder.getTransNo(), payment);
 
         Map<String, String> rpMap = new HashMap<>();
         rpMap.put("merOrderNo", payingOrder.getOrderNo());

+ 15 - 11
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -4507,7 +4507,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void createLiveCourse() {
-        List<VipGroup> vipGroups = vipGroupDao.findNoCreateSuccessVipGroup(null,"LIVE");
+        Integer tenantId = TenantContextHolder.getTenantId();
+        List<VipGroup> vipGroups = vipGroupDao.findNoCreateSuccessVipGroup(tenantId,"LIVE");
         if(!CollectionUtils.isEmpty(vipGroups)){
             //排课
             for (VipGroup vipGroup : vipGroups) {
@@ -4622,7 +4623,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
 
         imGroupService.create(classGroup.getId().toString(), null, classGroup.getName(), classGroup.getName(),
-                vipGroup.getName(), null, "https://gyt.ks3-cn-beijing.ksyuncs.com/icon_live_class_group_avatar.png", vipGroup.getGroupType(), ImGroup.GroupTypeEnum.valueOf(vipGroup.getGroupType()));
+                vipGroup.getName(), null, "https://gyt.ks3-cn-beijing.ksyuncs.com/icon_live_class_group_avatar.png",
+                vipGroup.getGroupType(), ImGroup.GroupTypeEnum.valueOf(vipGroup.getGroupType()));
         imGroupMemberService.join(classGroup.getId().toString(), userRoleMap);
         imUserFriendService.refreshGroupImUserFriend(classGroup.getMusicGroupId(), classGroup.getGroupType());
         classGroupDao.update(classGroup);
@@ -5187,15 +5189,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
             throw new BizException("课程不存在");
         }
 
-        // 课程是否开始
-        if(CourseStatusEnum.NOT_START.equals(courseSchedule.getStatus())) {
-            throw new BizException("课程未开始");
-        }
-
-        // 是否结束
-        if (CourseStatusEnum.OVER.equals(courseSchedule.getStatus())) {
-            throw new BizException("课程已结束");
-        }
 
         // 分享类型  是否能进入
         if (ShareModeEnum.NO_SHARE.equals(courseSchedule.getShareMode())) {
@@ -5209,6 +5202,17 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
             }
         }
 
+
+        // 课程是否开始
+        if(CourseStatusEnum.NOT_START.equals(courseSchedule.getStatus())) {
+            throw new BizException("课程未开始");
+        }
+
+        // 是否结束
+        if (CourseStatusEnum.OVER.equals(courseSchedule.getStatus())) {
+            throw new BizException("课程已结束");
+        }
+
         return LiveGroupWrapper.LiveCourseInfo.builder()
                 .studentId(studentId)
                 .canJoinShareRoom(true)

+ 83 - 0
mec-biz/src/main/resources/config/mybatis/CourseShareMapper.xml

@@ -81,6 +81,89 @@
         where course_id_ = #{courseId}
     </select>
 
+    <select id="selectStudentByParam"  parameterType="map" resultType="com.ym.mec.biz.dal.dto.StudentManageListDto">
+        SELECT distinct
+        s.user_id_ userId,
+        su.username_ username,
+        su.phone_ phone,
+        o.name_ organName,
+        co.name_ cooperationOrganName,
+        sb.name_ subjectName
+        FROM student s
+        <choose>
+            <when test="param.groupIds != null and param.groupIds.trim() != ''">
+                INNER JOIN
+            </when>
+            <otherwise>
+                LEFT JOIN
+            </otherwise>
+        </choose>
+        (select
+        b.user_id_,
+        replace(group_concat(a.name_,'|'),',','') imGroupName,
+        group_concat( a.id_ ) as im_group_id_
+        from im_group a
+        left join im_group_member b on a.id_ = b.im_group_id_
+        <where>
+            <if test="param.groupIds != null and param.groupIds.trim() != ''">
+                and find_in_set(a.id_, #{param.groupIds})
+            </if>
+        </where>
+        group by b.user_id_) gm on s.user_id_ = gm.user_id_
+        LEFT JOIN sys_user su ON su.id_ = s.user_id_
+        LEFT JOIN organization o ON o.id_ = su.organ_id_
+        LEFT JOIN `subject` sb ON sb.id_ = s.subject_id_list_
+        LEFT JOIN cooperation_organ co on co.id_ = s.cooperation_organ_id_
+        <choose>
+            <when test="param.teamIds != null and param.teamIds.trim != ''">
+                INNER JOIN
+            </when>
+            <otherwise>
+                LEFT JOIN
+            </otherwise>
+        </choose>
+        (select
+        user_id_,
+        replace(group_concat(a.name_,'|'),',','') musicGroupName
+        from
+        music_group a left join
+        student_registration b on a.id_ = b.music_group_id_
+        where b.music_group_status_ != 'QUIT'
+        <if test="param.teamIds != null and param.teamIds.trim() != ''">
+            and find_in_set(a.id_ ,#{param.teamIds})
+        </if>
+        group by b.user_id_) sr on sr.user_id_ = s.user_id_
+        <where>
+            <if test="param.tenantId != null ">
+                AND s.tenant_id_ = #{param.tenantId}
+            </if>
+            <choose>
+                <when test="param.inExist != null ">
+                    AND s.user_id_ in (select user_id_ from course_share where course_id_ = #{param.courseId})
+                </when>
+                <otherwise>
+                    AND s.user_id_ not in (select user_id_ from course_share where course_id_ = #{param.courseId})
+                </otherwise>
+            </choose>
+            <if test="param.organIds != null and param.organIds.trim() != ''">
+                AND FIND_IN_SET(su.organ_id_,#{param.organIds})
+            </if>
+            <if test="param.subjectId != null and param.subjectId.trim() != ''">
+                AND FIND_IN_SET(s.subject_id_list_,#{param.subjectId})
+            </if>
+            <if test="param.schoolIds != null and param.schoolIds.trim() != ''">
+                AND FIND_IN_SET(s.cooperation_organ_id_ ,#{param.schoolIds})
+            </if>
+            <if test="param.search != null and param.search.trim() != ''">
+                AND (
+                s.`user_id_` LIKE CONCAT('%', #{param.search},'%')
+                or su.phone_ like concat('%',#{param.search},'%')
+                or su.username_ like concat('%',#{param.search},'%')
+                )
+            </if>
+        </where>
+    </select>
+
     <insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
         INSERT INTO course_share (id_, course_id_, user_id_, create_time_, create_by_, tenant_id_)
         VALUES

+ 6 - 6
mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesMapper.xml

@@ -97,12 +97,12 @@
 	</select>
 	
 	<!-- 向数据库增加一条记录 -->
-    <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.ExtracurricularExercises" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-        INSERT INTO extracurricular_exercises (music_group_id_,teacher_id_,student_id_list_,batch_no_,
-        title_,attachments_,content_,expire_date_,completed_num_,expect_num_,create_time_,update_time_,tenant_id_,group_type_)
-        VALUES(#{musicGroupId},#{teacherId},#{studentIdList},#{batchNo},#{title},#{attachments},
-        #{content},#{expireDate},#{completedNum},#{expectNum},NOW(), NOW(),#{tenantId},#{groupType})
-    </insert>
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.ExtracurricularExercises" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		INSERT INTO extracurricular_exercises (music_group_id_,teacher_id_,student_id_list_,batch_no_,
+		                                       title_,attachments_,content_,expire_date_,completed_num_,expect_num_,create_time_,update_time_,tenant_id_,group_type_)
+		VALUES(#{musicGroupId},#{teacherId},#{studentIdList},#{batchNo},#{title},#{attachments},
+		       #{content},#{expireDate},#{completedNum},#{expectNum},NOW(), NOW(),#{tenantId},#{groupType})
+	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.ExtracurricularExercises">

+ 13 - 13
mec-biz/src/main/resources/config/mybatis/SubjectMapper.xml

@@ -272,6 +272,19 @@
         select * from subject where del_flag_ = 0 and parent_subject_id_ != 0
     </select>
 
+    <select id="getSubjectByStudentId" resultType="com.ym.mec.biz.dal.dto.StudentSubjectDto">
+        SELECT
+            sr.user_id_ AS studentId,
+            s.id_ AS subjectId,
+            s.name_ AS subjectName
+        FROM
+            student sr
+            LEFT JOIN `subject` s ON sr.subject_id_list_=s.id_
+        WHERE  sr.user_id_ IN
+        <foreach collection="studentIds" item="userId" open="(" close=")" separator=",">
+            #{userId}
+        </foreach>
+    </select>
     <select id="getSubjectListByIdAndCoopId" resultType="com.ym.mec.biz.dal.entity.Subject">
         SELECT
             distinct s.id_ as id
@@ -289,17 +302,4 @@
                 AND mg.cooperation_organ_id_ = #{coopId}
             </if>
     </select>
-    <select id="getSubjectByStudentId" resultType="com.ym.mec.biz.dal.dto.StudentSubjectDto">
-        SELECT
-            sr.user_id_ AS studentId,
-            s.id_ AS subjectId,
-            s.name_ AS subjectName
-        FROM
-            student sr
-            LEFT JOIN `subject` s ON sr.subject_id_list_=s.id_
-        WHERE  sr.user_id_ IN
-        <foreach collection="studentIds" item="userId" open="(" close=")" separator=",">
-            #{userId}
-        </foreach>
-    </select>
 </mapper>

+ 1 - 1
mec-client-api/src/main/java/com/ym/mec/oa/OaFeignService.java

@@ -28,7 +28,7 @@ public interface OaFeignService {
      * @return
      */
     @PostMapping(value = "/updateUser", consumes = MediaType.APPLICATION_JSON_VALUE)
-    Object updateUser(@RequestBody OAUser oaUser);
+    Object updateUser(OAUser oaUser);
 
     /**
      * 软删除

+ 5 - 5
mec-common/audit-log/src/main/java/com/yonge/log/interceptor/AuditLogInterceptor.java

@@ -72,11 +72,11 @@ public class AuditLogInterceptor extends HandlerInterceptorAdapter {
             String substring = servletPath.substring(servletPath.lastIndexOf("/") + 1).toLowerCase();
             if (ignoreLogUrl == null) {
                 ignoreLogUrl = new ArrayList<>();
-                ignoreLogUrl.add("query");
-                ignoreLogUrl.add("get");
-                ignoreLogUrl.add("find");
-                ignoreLogUrl.add("list");
-                ignoreLogUrl.add("detail");
+//                ignoreLogUrl.add("query");
+//                ignoreLogUrl.add("get");
+//                ignoreLogUrl.add("find");
+//                ignoreLogUrl.add("list");
+//                ignoreLogUrl.add("detail");
                 ignoreLogUrl.add("hasindexerrdata");
                 ignoreLogUrl.add("newindex");
             }

+ 11 - 10
mec-common/common-core/src/main/java/com/ym/mec/common/controller/BaseController.java

@@ -26,6 +26,7 @@ import javax.servlet.http.HttpServletRequest;
 import java.net.URLEncoder;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 @ControllerAdvice
@@ -109,14 +110,14 @@ public class BaseController {
 				return getResponseData(false, bizException.getCode(), null, bizException.getMessage());
 			}
 
-			// 默认返回错误码
-			return failed(e.getMessage());
-		} else if (e instanceof AccessDeniedException) {
-			return failed("禁止访问");
-		}else if(e instanceof BindException){
-			String errors = ((BindException) e).getFieldErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining("\n"));
-			return failed(errors);
-		} else if(e instanceof MethodArgumentNotValidException){
+            // 默认返回错误码
+            return failed(e.getMessage());
+        } else if (e instanceof AccessDeniedException) {
+            return failed("禁止访问");
+        }else if(e instanceof BindException){
+            String errors = ((BindException) e).getFieldErrors().stream().map(DefaultMessageSourceResolvable::getDefaultMessage).collect(Collectors.joining("\n"));
+            return failed(errors);
+        } else if(e instanceof MethodArgumentNotValidException){
             MethodArgumentNotValidException validException = (MethodArgumentNotValidException) ex;
             String errorMsg = validException.getBindingResult()
                     .getFieldErrors()
@@ -145,13 +146,13 @@ public class BaseController {
 
     public String dingTalkRobotsSecurityParam() throws Exception{
         Long timestamp = System.currentTimeMillis();
-        String secret = "SEC405b2e5f38aaae6472b242ee53607fb4a6549cf05a72bdf6482ec3799d5576ec";
+        String secret = "SEC5e3b73acccb12fc2a2a7d36d416c1967c66adb99a75dce24ecc324b50e528a29";
         String stringToSign = timestamp + "\n" + secret;
         Mac mac = Mac.getInstance("HmacSHA256");
         mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
         byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
         String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)),"UTF-8");
-        StringBuffer sb = new StringBuffer("https://oapi.dingtalk.com/robot/send?access_token=ffa98e1f0f5f4cff586a228699281a7955e305fd6f55145af8e8da5ea794d033&timestamp=");
+        StringBuffer sb = new StringBuffer("https://api.dingtalk.com/robot/send?access_token=22d7b3b54ea7f1633c640dfdf17083d0731c3757719a84bd333740a8b18eb035&timestamp=");
         sb.append(timestamp).append("&sign=").append(sign);
         return sb.toString();
     }

+ 13 - 13
mec-common/common-core/src/main/java/com/ym/mec/common/exception/BizException.java

@@ -4,11 +4,11 @@ import com.ym.mec.util.string.MessageFormatter;
 
 public class BizException extends RuntimeException {
 
-	private int code = 500;
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = -4562885563376566463L;
+    private int code = 500;
+    /**
+     *
+     */
+    private static final long serialVersionUID = -4562885563376566463L;
 
     public BizException() {
         super();
@@ -18,15 +18,15 @@ public class BizException extends RuntimeException {
         super(message);
     }
 
-	public BizException(Integer code, String message) {
-		super(message);
-		// 统一错误码
-		this.code = code;
-	}
+    public BizException(Integer code, String message) {
+        super(message);
+        // 统一错误码
+        this.code = code;
+    }
 
-	public BizException(Throwable cause) {
-		super(cause);
-	}
+    public BizException(Throwable cause) {
+        super(cause);
+    }
 
     public BizException(String message, Throwable cause) {
         super(message, cause);

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

@@ -56,6 +56,8 @@ public class RoomResult {
     @ApiModelProperty("声部编号")
     private String subjectId;
 
+    @ApiModelProperty("os")
+    private String os;
     public RoomResult rtcRoomConfig(RTCRoomConfig rtcRoomConfig) {
         this.rtcRoomConfig = rtcRoomConfig;
         return this;

+ 38 - 0
mec-im/src/main/java/com/ym/service/Impl/RoomMemberServiceImpl.java

@@ -0,0 +1,38 @@
+package com.ym.service.Impl;
+
+import com.ym.dao.RoomMemberDao;
+import com.ym.service.RoomMemberService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 房间用户
+ * Created by Eric.Shang on 2023/5/31.
+ */
+@Slf4j
+@Service
+public class RoomMemberServiceImpl implements RoomMemberService {
+
+    @Autowired
+    private RoomMemberDao roomMemberDao;
+
+    /**
+     * 删除房间用户
+     * @param roomId 房间编号
+     * @param userId 用户编号
+     */
+    @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
+    @Override
+    public void deleteRoomMember(String roomId, String userId) {
+
+        try {
+            // 删除房间用户信息
+            roomMemberDao.deleteUserByRidAndUid(roomId, userId);
+        } catch (Exception e) {
+            log.error("deleteRoomMember roomId={}, userId={}", roomId, userId, e);
+        }
+    }
+}

+ 13 - 3
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -44,6 +44,7 @@ import com.ym.mec.im.message.*;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.pojo.*;
+import com.ym.service.RoomMemberService;
 import com.ym.service.RoomService;
 import com.ym.utils.CheckUtils;
 import com.ym.utils.CodeUtil;
@@ -86,6 +87,8 @@ public class RoomServiceImpl implements RoomService {
     @Autowired
     private RoomMemberDao roomMemberDao;
     @Autowired
+    private RoomMemberService roomMemberService;
+    @Autowired
     private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
     @Autowired
     private WhiteBoardHelper whiteBoardHelper;
@@ -319,6 +322,7 @@ public class RoomServiceImpl implements RoomService {
             // 返回直播间配置参数
             roomResult.subjectId(liveRoom.getSubjectId()).setLiveRoomId(liveRoom.getRoomUid());
 
+            roomResult.setOs(liveRoom.getOs());
             // 主动触发用户加入直播间
             // imLiveBroadcastRoomService.joinRoom(liveRoom.getRoomUid(), sysUser.getId());
 
@@ -929,7 +933,7 @@ public class RoomServiceImpl implements RoomService {
         return courseSchedule.getServiceProvider();
     }
 
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     @Override
     public void leaveRoomSuccess(String roomId, String userId, String deviceNum) throws Exception {
 
@@ -991,9 +995,14 @@ public class RoomServiceImpl implements RoomService {
             updateDisplay(roomId, userId, "", 0);
         }
 
-        if (roomMemberDao.countByRid(roomId) <= 1) {
+        // 删除房间用户,事务单独提效
+        // roomMemberService.deleteRoomMember(roomId, userId);
+
+        int roomMembers = roomMemberDao.countByRid(roomId);
+        if (roomMembers <= 1) {
             // 删除群组用户信息
             roomMemberDao.deleteUserByRidAndUid(roomId, userId);
+
             // 删除群组信息
             roomDao.deleteByRid(roomId);
 
@@ -1006,6 +1015,7 @@ public class RoomServiceImpl implements RoomService {
                 courseScheduleStudentMusicScoreDao.closePlayStatus(courseSchedule.getId(), null, null);
             }
             log.info("leaveRoomSuccess dismiss the room: {}, userId: {}, role={}", roomId, userId, roleEnum.name());
+
         } else {
             roomMemberDao.deleteUserByRidAndUid(roomId, userId);
 
@@ -1046,7 +1056,7 @@ public class RoomServiceImpl implements RoomService {
                 }
             }
 
-            log.info("leaveRoomSuccess quit group: roomId={},userId: {}", roomId, userId);
+            log.info("leaveRoomSuccess quit group: roomId={}, userId: {}, roomMembers={}", roomId, userId, roomMembers);
         }
         userDao.deleteByUid(userId);
     }

+ 15 - 0
mec-im/src/main/java/com/ym/service/RoomMemberService.java

@@ -0,0 +1,15 @@
+package com.ym.service;
+
+/**
+ * 房间用户
+ * Created by Eric.Shang on 2023/5/31.
+ */
+public interface RoomMemberService {
+
+    /**
+     * 删除房间用户
+     * @param roomId 房间编号
+     * @param userId 用户编号
+     */
+    void deleteRoomMember(String roomId, String userId);
+}

+ 12 - 2
mec-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java

@@ -1286,8 +1286,18 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         BigDecimal reduce = orderItemList.stream()
                                          .map(omsOrderItem -> omsOrderItem.getCouponAmount().multiply(BigDecimal.valueOf(omsOrderItem.getProductQuantity())))
                                          .reduce(BigDecimal.ZERO, BigDecimal::add);
-        OmsOrderItem omsOrderItem = orderItemList.get(0);
-        omsOrderItem.setPrecisionAmount(coupon.subtract(reduce));
+        BigDecimal precisionAmount = coupon.subtract(reduce);
+        for (OmsOrderItem omsOrderItem : orderItemList) {
+            BigDecimal multiply = omsOrderItem.getProductPrice()
+                                              .multiply(BigDecimal.valueOf(omsOrderItem.getProductQuantity())).subtract(omsOrderItem.getCouponAmount().multiply(BigDecimal.valueOf(omsOrderItem.getProductQuantity())));
+            if (multiply.compareTo(precisionAmount) >=0) {
+                omsOrderItem.setPrecisionAmount(precisionAmount);
+                break;
+            } else {
+                omsOrderItem.setPrecisionAmount(multiply);
+                precisionAmount = precisionAmount.subtract(multiply);
+            }
+        }
 
     }
 

+ 26 - 7
mec-student/src/main/java/com/ym/mec/student/controller/WechatController.java

@@ -30,22 +30,28 @@ import com.ym.mec.util.string.ValueUtil;
 @RestController
 public class WechatController extends BaseController {
 
-	private String appId = "wx80f175c0eb6836e9";
-
-	private String secret = "a9d779747dba9f4e82f19882debe3e93";
+//	private String appId = "wx80f175c0eb6836e9";
+//
+//	private String secret = "a9d779747dba9f4e82f19882debe3e93";
 	
 	private final static String WX_ACCESS_TOKEN = "WX_ACCESS_TOKEN";
 
     @Autowired
     private RedisCache<String, Object> redisCache;
 
+	private static final Map<String,Map<String,String>> appidMap = createAppidMap();
+
 	@ApiOperation("获取签名")
 	@GetMapping(value = "/getSignature")
-	public Object getSignature(String url) throws Exception {
-		
-		url = URLDecoder.decode(url);
+	public Object getSignature(String url,String platForm) throws Exception {
+		if(StringUtils.isEmpty(platForm)){
+			platForm = "gym";
+		}
+		Map<String, String> appIdMap = appidMap.get(platForm);
 
-		String accessToken = getAccessToken(appId, secret);
+		url = URLDecoder.decode(url);
+		String appId = appIdMap.get("appId");
+		String accessToken = getAccessToken(appId, appIdMap.get("secret"));
 
 		String ticket = getTicket(accessToken);
 
@@ -71,6 +77,19 @@ public class WechatController extends BaseController {
 		return succeed(result);
 	}
 
+	private static Map<String,Map<String,String>> createAppidMap(){
+		Map<String,Map<String,String>> resultMap = new HashMap<>();
+		Map<String,String> map = new HashMap<>();
+		map.put("appId", "wx80f175c0eb6836e9");
+		map.put("secret", "a9d779747dba9f4e82f19882debe3e93");
+		Map<String,String> map1 = new HashMap<>();
+		map.put("appId", "wx751141096e75a4ee");
+		map.put("secret", "e882d76c95d1613607a85338b1bed3ff");
+		resultMap.put("gym",map);
+		resultMap.put("daya",map1);
+		return resultMap;
+	}
+
 	private String getAccessToken(String appid, String secret) throws IOException {
 
 		if (redisCache.exists(WX_ACCESS_TOKEN)) {

+ 1 - 1
mec-student/src/main/resources/logback-spring.xml

@@ -43,7 +43,7 @@
 		</encoder>
 	</appender>
 
-	<logger name="com.ym.mec" level="WARN" />
+	<logger name="com.ym.mec" level="INFO" />
 
 	<logger name="com.ym.mec.thirdparty" level="INFO"
 			additivity="false">

+ 0 - 1
mec-teacher/src/main/java/com/ym/mec/teacher/controller/ExtracurricularExercisesController.java

@@ -141,7 +141,6 @@ public class ExtracurricularExercisesController extends BaseController {
             exercises.setExpireDate(instance.getTime());
         }
 
-        exercises.setGroupType(ELessonTrainingType.EXTRA.getCode());
         exercises.setTeacherId(sysUser.getId());
         extracurricularExercisesService.createExtraExercises(exercises);
         return succeed();

+ 5 - 4
mec-web/pom.xml

@@ -70,10 +70,11 @@
 			<groupId>com.yonge.datasource</groupId>
 			<artifactId>dynamic-datasource</artifactId>
 		</dependency>
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>slf4j-api</artifactId>
-		</dependency>
+
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
 	</dependencies>
 	<build>
 		<plugins>

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

@@ -49,10 +49,18 @@ public class CourseShareController extends BaseController {
     @GetMapping("/queryCourseSharedStudent")
     @PreAuthorize("@pcs.hasPermissions('courseShare/queryCourseSharedStudent')")
     public HttpResponseResult<PageInfo<StudentManageListDto>> queryCourseSharedStudent(
-            CourseShareQueryInfo shareQueryInfo) {
+            @Validated CourseShareQueryInfo shareQueryInfo) {
         return succeed(courseShareService.queryCourseSharedStudent(shareQueryInfo));
     }
 
+    @ApiOperation(value = "查询可以分享的学生列表")
+    @GetMapping("/queryAllCourseShareStudent")
+    @PreAuthorize("@pcs.hasPermissions('courseShare/queryAllCourseShareStudent')")
+    public HttpResponseResult<PageInfo<StudentManageListDto>> queryAllCourseShareStudent(
+            @Validated CourseShareQueryInfo shareQueryInfo) {
+        return succeed(courseShareService.queryAllCourseShareStudent(shareQueryInfo));
+    }
+
     @ApiOperation(value = "导入学员")
     @PostMapping(value = "/importStudent")
     @PreAuthorize("@pcs.hasPermissions('courseShare/importStudent')")

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

@@ -71,7 +71,6 @@ public class OperatingReportController extends BaseController {
             String[] body = {"organName", "sellAmount", "serviceAmount","otherIncome", "refundAmount", "incomeTotal", "sellCost", "expensesAmount", "variableCost", "distributionAmount", "costAmount", "profit"};
             HSSFWorkbook workbook = POIUtil.multipleSheetExportExcel(header, body, pageList.getRows(), null);
 
-
             queryInfo.setType("school");
             pageList = operatingReportService.queryPage(queryInfo);
             String[] header2 = {"分部", "学校", "销售收入(元)", "服务收入(元)","其他收入(元)", "业务退费(元)", "收入合计(元)", "销售成本(元)", "固定支出(元)", "变动支出(元)", "分摊费用(元)", "成本费用合计(元)", "利润(元)"};

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

@@ -283,8 +283,14 @@ public class TaskController extends BaseController {
 	public void updateVipGroupToFinishedStatus() {
 		//更新vip课程状态
 		vipGroupService.updateVipGroupStatusToFinished();
-		//更新直播课状态
-		vipGroupService.createLiveCourse();
+		List<TenantInfo> tenantInfos = tenantInfoService.list(new QueryWrapper<TenantInfo>().eq("state_",1));
+		if(tenantInfos != null && tenantInfos.size() > 0){
+			for (TenantInfo tenantInfo : tenantInfos) {
+				TenantContextHolder.setTenantId(tenantInfo.getId());
+				vipGroupService.createLiveCourse();
+				TenantContextHolder.clearTenantId();
+			}
+		}
 	}
 
 	@GetMapping("/stopVipGroupWithNoCreate")
@@ -298,7 +304,9 @@ public class TaskController extends BaseController {
 		List<TenantInfo> tenantInfos = tenantInfoService.list(new QueryWrapper<TenantInfo>().eq("state_",1));
 		if(tenantInfos != null && tenantInfos.size() > 0){
 			for (TenantInfo tenantInfo : tenantInfos) {
+				TenantContextHolder.setTenantId(tenantInfo.getId());
 				teacherAttendanceService.pushNoSignOutMessage(tenantInfo.getId());
+				TenantContextHolder.clearTenantId();
 			}
 		}
 	}

+ 0 - 1
mec-web/src/main/java/com/ym/mec/web/controller/student/StudentAttendanceController.java

@@ -72,5 +72,4 @@ public class StudentAttendanceController extends BaseController {
         studentAttendanceService.updateStudentAttendances(studentAttendanceInfo);
         return succeed();
     }
-
 }

+ 9 - 4
mec-websocket/src/main/java/com/ym/mec/web/handler/WhiteboardHandler.java

@@ -96,6 +96,9 @@ public class WhiteboardHandler {
             packet.setData(data);
 
             pubSubStore.publish(PubSubType.DISPATCH, new DispatchMessage(roomId, packet, namespace));
+
+            log.info("dispatchMessage SYNC_MESSAGE roomId={}, sid={}, ns={}, eventName={}, addr={}", roomId, client.getSessionId(),
+                    client.getNamespace().getName(), eventName, client.getRemoteAddress());
         } catch (Exception e) {
             log.error("PubSubType.DISPATCH roomId={}, sid={}", roomId, client.getSessionId(), e);
         }
@@ -192,8 +195,8 @@ public class WhiteboardHandler {
         // 客户端类型
         String clientType = client.getHandshakeData().getSingleUrlParam(CLIENT_TYPE);
 
-        /*log.debug("onHeartbeatSync client={}, ns={}, roomId={}, userId={}, timestamp={}", client.getSessionId(),
-                client.getNamespace().getName(), roomId, userId, timestamp);*/
+        log.info("onHeartbeatSync EVENT_HEARTBEAT_SYNC sessionId={}, ns={}, roomId={}, userId={}, timestamp={}", client.getSessionId(),
+                client.getNamespace().getName(), roomId, userId, timestamp);
 
         if (StringUtils.isNoneBlank(roomId, userId, clientType)) {
 
@@ -245,7 +248,8 @@ public class WhiteboardHandler {
      */
     @OnEvent(value = EVENT_SERVER_BROADCAST)
     public void serverBroadcast(SocketIOClient client, String roomId, byte[] encryptedData, byte[] iv) {
-        //log.info("serverBroadcast roomId={}", roomId);
+        log.info("serverBroadcast SYNC_MESSAGE roomId={}, sessionId={}, ns={}, addr={}", roomId, client.getSessionId(),
+                client.getNamespace().getName(), client.getRemoteAddress());
 
         BroadcastOperations roomOperations = namespace.getRoomOperations(roomId);
         // 发送房间广播消息
@@ -264,7 +268,8 @@ public class WhiteboardHandler {
      */
     @OnEvent(value = EVENT_SERVER_VOLATILE_BROADCAST)
     public void serverVolatileBroadcast(SocketIOClient client, String roomId, byte[] encryptedData, byte[] iv) {
-        //log.info("serverVolatileBroadcast roomId={}", roomId);
+        log.info("serverVolatileBroadcast SYNC_MESSAGE roomId={}, sessionId={}, ns={}, addr={}", roomId, client.getSessionId(),
+                client.getNamespace().getName(), client.getRemoteAddress());
 
         BroadcastOperations roomOperations = namespace.getRoomOperations(roomId);
         // 发送房间广播消息

+ 1 - 1
mec-websocket/src/main/java/com/ym/mec/web/support/socket/ServerRunner.java

@@ -40,7 +40,7 @@ public class ServerRunner implements CommandLineRunner {
             // 分布式服务空间请求分发
             Namespace namespace = namespacesHub.get(message.getNamespace());
             if (Objects.nonNull(namespace)) {
-                log.info("PubSubType.DISPATCH room={}, package={}", message.getRoom(), message.getPacket());
+                log.info("PubSubType.DISPATCH SYNC_MESSAGE room={}, ns={}, nodeId={}", message.getRoom(), message.getNamespace(), message.getNodeId());
                 namespace.dispatch(message.getRoom(), message.getPacket());
             }
 

+ 4 - 2
pom.xml

@@ -20,6 +20,8 @@
 		<spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
 		<zipkin.version>2.12.2</zipkin.version>
 		<google.zxing.version>3.4.0</google.zxing.version>
+
+		<maven.test.skip>true</maven.test.skip>
 	</properties>
 
 	<dependencyManagement>
@@ -279,12 +281,12 @@
 		<pluginRepository>
 			<id>jcenter-snapshots</id>
 			<name>jcenter</name>
-			<url>http://oss.jfrog.org/artifactory/oss-snapshot-local/</url>
+			<url>https://oss.jfrog.org/artifactory/oss-snapshot-local/</url>
 		</pluginRepository>
 		<pluginRepository>
 			<id>jcenter-releases</id>
 			<name>jcenter</name>
-			<url>http://jcenter.bintray.com</url>
+			<url>https://jcenter.bintray.com</url>
 			<snapshots>
 				<enabled>false</enabled>
 			</snapshots>