Browse Source

Merge branch 'saas' of http://git.dayaedu.com/yonge/mec into zx_saas_goods

# Conflicts:
#	mec-biz/src/main/java/com/ym/mec/biz/service/CooperationOrganService.java
#	mec-biz/src/main/java/com/ym/mec/biz/service/SellOrderService.java
#	mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java
#	mec-biz/src/main/java/com/ym/mec/biz/service/impl/SellOrderServiceImpl.java
zouxuan 10 months ago
parent
commit
1e5a739cb5
100 changed files with 1895 additions and 487 deletions
  1. 6 1
      audio-analysis/pom.xml
  2. 2 2
      audio-analysis/src/main/java/com/yonge/netty/server/service/AudioCompareHandler.java
  3. 0 1
      cms/pom.xml
  4. 24 0
      mec-application/src/main/java/com/ym/mec/config/CachingContentFilter.java
  5. 106 0
      mec-application/src/main/java/com/ym/mec/config/MyServletRequestWrapper.java
  6. 2 8
      mec-application/src/main/java/com/ym/mec/student/controller/LessonCoursewareController.java
  7. 4 4
      mec-application/src/main/java/com/ym/mec/student/controller/SmsCodeController.java
  8. 1 1
      mec-application/src/main/java/com/ym/mec/student/controller/StudentManageController.java
  9. 3 3
      mec-application/src/main/java/com/ym/mec/student/controller/SysMusicCompareRecordController.java
  10. 18 24
      mec-application/src/main/java/com/ym/mec/student/controller/SysMusicScoreCategoriesController.java
  11. 3 3
      mec-application/src/main/java/com/ym/mec/student/controller/UserMusicController.java
  12. 12 2
      mec-application/src/main/java/com/ym/mec/teacher/controller/CloudStudyController.java
  13. 1 4
      mec-application/src/main/java/com/ym/mec/teacher/controller/CourseHomeworkController.java
  14. 1 2
      mec-application/src/main/java/com/ym/mec/teacher/controller/SmsCodeController.java
  15. 13 5
      mec-application/src/main/java/com/ym/mec/teacher/controller/StudentController.java
  16. 9 4
      mec-application/src/main/java/com/ym/mec/teacher/controller/SysMusicCompareRecordController.java
  17. 25 21
      mec-application/src/main/java/com/ym/mec/teacher/controller/SysMusicScoreCategoriesController.java
  18. 39 17
      mec-application/src/main/java/com/ym/mec/teacher/controller/TeacherController.java
  19. 6 0
      mec-application/src/main/java/com/ym/mec/teacher/controller/TeacherCourseScheduleController.java
  20. 8 6
      mec-application/src/main/java/com/ym/mec/teacher/controller/TeacherSubjectController.java
  21. 20 4
      mec-application/src/main/java/com/ym/mec/web/controller/AppVersionInfoController.java
  22. 13 1
      mec-application/src/main/java/com/ym/mec/web/controller/ClassGroupController.java
  23. 2 2
      mec-application/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java
  24. 4 4
      mec-application/src/main/java/com/ym/mec/web/controller/ExportController.java
  25. 1 2
      mec-application/src/main/java/com/ym/mec/web/controller/SmsCodeController.java
  26. 69 0
      mec-application/src/main/java/com/ym/mec/web/controller/education/EduCloudStudyController.java
  27. 59 0
      mec-application/src/main/java/com/ym/mec/web/controller/education/EduCooperationOrganController.java
  28. 15 28
      mec-application/src/main/java/com/ym/mec/web/controller/education/EduMusicScoreController.java
  29. 11 0
      mec-application/src/main/java/com/ym/mec/web/controller/education/EduSubjectController.java
  30. 67 0
      mec-application/src/main/java/com/ym/mec/web/controller/school/SchoolCloudStudyController.java
  31. 43 0
      mec-application/src/main/java/com/ym/mec/web/controller/school/SchoolCooperationOrganController.java
  32. 40 0
      mec-application/src/main/java/com/ym/mec/web/controller/school/SchoolMusicScoreController.java
  33. 156 8
      mec-application/src/main/java/com/ym/mec/web/controller/school/SchoolStudentHomeworkController.java
  34. 36 0
      mec-application/src/main/resources/exportColumnMapper.ini
  35. 3 0
      mec-application/src/main/resources/logback-spring.xml
  36. 20 7
      mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/client/SysUserFeignService.java
  37. 26 5
      mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/client/fallback/SysUserFeignServiceFallback.java
  38. 1 0
      mec-auth/mec-auth-server/pom.xml
  39. 2 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/config/ResourceServerConfig.java
  40. 2 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/config/WebMvcConfig.java
  41. 1 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/handler/BaseAuthenticationSuccessEventHandler.java
  42. 4 4
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/PhoneAuthenticationProvider.java
  43. 1 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/service/CustomAuthenticationKeyGenerator.java
  44. 16 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/service/CustomTokenServices.java
  45. 57 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/CbsQrCodeScanServiceImpl.java
  46. 1 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysUserServiceImpl.java
  47. 34 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/ExceptionLogController.java
  48. 25 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/OpenMutualTLSController.java
  49. 34 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/OpenQrLoginController.java
  50. 1 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/TokenController.java
  51. 2 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/UserController.java
  52. 2 2
      mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysUserMapper.xml
  53. 3 0
      mec-auth/mec-auth-server/src/main/resources/logback-spring.xml
  54. 5 0
      mec-auth/pom.xml
  55. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/AppVersionInfoDao.java
  56. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java
  57. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherOrderDao.java
  58. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  59. 0 5
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java
  60. 38 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ExportDao.java
  61. 3 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ExtracurricularExercisesReplyDao.java
  62. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java
  63. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentAttendanceDao.java
  64. 21 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java
  65. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentExtracurricularExercisesSituationDao.java
  66. 8 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java
  67. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SubjectDao.java
  68. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicCompareRecordDao.java
  69. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TempLittleArtistTrainingCampUserRelationDao.java
  70. 64 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseHomeworkWrapper.java
  71. 12 80
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseTimeDto.java
  72. 305 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ExportWrapper.java
  73. 15 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonTrainingDetailWrapper.java
  74. 10 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherAttendanceDto.java
  75. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupCourseAdjustInfoDto.java
  76. 16 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseSchedule.java
  77. 5 149
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Organization.java
  78. 24 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentAttendance.java
  79. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportEnum.java
  80. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportTypeEnum.java
  81. 91 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/CloudTeacherActiveWapper.java
  82. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/LessonExaminationQueryInfo.java
  83. 70 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicCompareRecordWapper.java
  84. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentAttendanceQueryInfo.java
  85. 2 40
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentCourseConsumerQueryInfo.java
  86. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentQueryInfo.java
  87. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/SysCouponQueryInfo.java
  88. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/SysMusicCompareRecordQueryInfo.java
  89. 15 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/TeachingPointWrapper.java
  90. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/AppVersionInfoService.java
  91. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java
  92. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CooperationOrganService.java
  93. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  94. 15 12
      mec-biz/src/main/java/com/ym/mec/biz/service/ExportService.java
  95. 3 5
      mec-biz/src/main/java/com/ym/mec/biz/service/ExtracurricularExercisesReplyService.java
  96. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderService.java
  97. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java
  98. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupSubjectGoodsGroupService.java
  99. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/OrganizationService.java
  100. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/PracticeGroupService.java

+ 6 - 1
audio-analysis/pom.xml

@@ -129,13 +129,18 @@
 			<version>4.1.68.Final</version>
 		</dependency>
 	</dependencies>
-	
+
 	<build>
 		<plugins>
 			<plugin>
 				<groupId>org.springframework.boot</groupId>
 				<artifactId>spring-boot-maven-plugin</artifactId>
 			</plugin>
+			<plugin>
+				<groupId>com.spotify</groupId>
+				<artifactId>docker-maven-plugin</artifactId>
+				<version>1.2.2</version>
+			</plugin>
 		</plugins>
 	</build>
 </project>

+ 2 - 2
audio-analysis/src/main/java/com/yonge/netty/server/service/AudioCompareHandler.java

@@ -147,7 +147,7 @@ public class AudioCompareHandler implements MessageHandler {
 				
 				MusicXmlNote musicXmlNote = musicXmlBasicInfo.getMusicXmlInfos().stream().max(Comparator.comparing(MusicXmlNote::getTimeStamp)).get();
 				sysMusicCompareRecord.setSourceTime((float) ((musicXmlNote.getTimeStamp()+musicXmlNote.getDuration())/1000));
-				sysMusicCompareRecordService.insert(sysMusicCompareRecord, null);
+				sysMusicCompareRecordService.insert(sysMusicCompareRecord);
 				channelContext.setRecordId(sysMusicCompareRecord.getId());
 			}
 			break;
@@ -218,7 +218,7 @@ public class AudioCompareHandler implements MessageHandler {
 					
 					sysMusicCompareRecord.setHeardLevel(HeardLevelEnum.valueOf(channelContext.getHardLevel().name()));
 					
-					sysMusicCompareRecordService.saveMusicCompareData(sysMusicCompareRecord, musicXmlBasicInfo.getCampId());
+					sysMusicCompareRecordService.saveMusicCompareData(sysMusicCompareRecord);
 				}
 				
 				int totalPlayTimeOfCurrentDate = sysMusicCompareRecordService.queryCurrentDatePlayTimeByUserId(sysMusicCompareRecord.getUserId());

+ 0 - 1
cms/pom.xml

@@ -79,7 +79,6 @@
 			<artifactId>dynamic-datasource</artifactId>
 		</dependency>
 	</dependencies>
-	
 	<build>
 		<plugins>
 			<plugin>

+ 24 - 0
mec-application/src/main/java/com/ym/mec/config/CachingContentFilter.java

@@ -0,0 +1,24 @@
+package com.ym.mec.config;
+
+import org.springframework.stereotype.Component;
+import org.springframework.web.filter.OncePerRequestFilter;
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * 替换Request对象
+ */
+@Component
+public class CachingContentFilter extends OncePerRequestFilter {
+
+    @Override
+    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
+        if (!(request instanceof MyServletRequestWrapper)) {
+            request = new MyServletRequestWrapper(request);
+        }
+        filterChain.doFilter(request, response);
+    }
+}

+ 106 - 0
mec-application/src/main/java/com/ym/mec/config/MyServletRequestWrapper.java

@@ -0,0 +1,106 @@
+package com.ym.mec.config;
+
+import org.apache.commons.io.IOUtils;
+import javax.servlet.ReadListener;
+import javax.servlet.ServletInputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+/**
+ * 包装HttpServletRequest
+ */
+public class MyServletRequestWrapper extends HttpServletRequestWrapper {
+
+    private final byte[] body;
+
+    public MyServletRequestWrapper(HttpServletRequest request) throws IOException {
+        super(request);
+        body = IOUtils.toByteArray(super.getInputStream());
+    }
+
+    @Override
+    public BufferedReader getReader() throws IOException {
+        return new BufferedReader(new InputStreamReader(getInputStream()));
+    }
+
+    @Override
+    public ServletInputStream getInputStream() throws IOException {
+        return new RequestBodyCachingInputStream(body);
+    }
+
+    private class RequestBodyCachingInputStream extends ServletInputStream {
+        private byte[] body;
+        private int lastIndexRetrieved = -1;
+        private ReadListener listener;
+
+        public RequestBodyCachingInputStream(byte[] body) {
+            this.body = body;
+        }
+
+        @Override
+        public int read() throws IOException {
+            if (isFinished()) {
+                return -1;
+            }
+            int i = body[lastIndexRetrieved + 1];
+            lastIndexRetrieved++;
+            if (isFinished() && listener != null) {
+                try {
+                    listener.onAllDataRead();
+                } catch (IOException e) {
+                    listener.onError(e);
+                    throw e;
+                }
+            }
+            return i;
+        }
+
+        @Override
+        public boolean isFinished() {
+            return lastIndexRetrieved == body.length - 1;
+        }
+
+        @Override
+        public boolean isReady() {
+            return isFinished();
+        }
+
+        @Override
+        public void setReadListener(ReadListener listener) {
+            if (listener == null) {
+                throw new IllegalArgumentException("listener cann not be null");
+            }
+            if (this.listener != null) {
+                throw new IllegalArgumentException("listener has been set");
+            }
+            this.listener = listener;
+            if (!isFinished()) {
+                try {
+                    listener.onAllDataRead();
+                } catch (IOException e) {
+                    listener.onError(e);
+                }
+            } else {
+                try {
+                    listener.onAllDataRead();
+                } catch (IOException e) {
+                    listener.onError(e);
+                }
+            }
+        }
+
+        @Override
+        public int available() throws IOException {
+            return body.length - lastIndexRetrieved - 1;
+        }
+
+        @Override
+        public void close() throws IOException {
+            lastIndexRetrieved = body.length - 1;
+            body = null;
+        }
+    }
+}

+ 2 - 8
mec-application/src/main/java/com/ym/mec/student/controller/LessonCoursewareController.java

@@ -16,13 +16,7 @@ import com.ym.mec.common.page.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.collections.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
@@ -33,7 +27,7 @@ import java.util.List;
 @RestController
 public class LessonCoursewareController extends BaseController {
 
-	@Autowired
+	@Resource
 	private CoursewareFeignService coursewareFeignService;
 	@Resource
 	private LessonCoursewareService lessonCoursewareService;

+ 4 - 4
mec-application/src/main/java/com/ym/mec/student/controller/SmsCodeController.java

@@ -38,15 +38,15 @@ public class SmsCodeController extends BaseController {
     @ApiImplicitParam(name = "mobile", value = "手机号", required = true, dataType = "String")
     @PostMapping(value = "/sendSms")
     public Object sendLoginVerifyCode(String mobile) throws Exception {
-        smsCodeService.sendValidCode(mobile);
-        return succeed();
+        throw new BizException("你所使用的不是最新版本,请更新后使用");
     }
 
     @ApiOperation(value = "发送登录短信验证码")
     @ApiImplicitParams({ @ApiImplicitParam(name = "mobile", value = "手机号", required = true, dataType = "String"),
-            @ApiImplicitParam(name = "code", value = "验证码", required = true, dataType = "String") })
+            @ApiImplicitParam(name = "code", value = "验证码", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "type", value = "验证码类型(register  login)", required = true, dataType = "String")})
     @PostMapping(value = "/sendSmsCode")
-    public HttpResponseResult<Object> sendLoginVerifyCode1(String mobile, String code) throws Exception {
+    public HttpResponseResult<Object> sendLoginVerifyCode1(String mobile, String code,String type) throws Exception {
         if(StringUtils.isEmpty(mobile) || StringUtils.isEmpty(code)){
             return failed(SecurityConstants.PARAM_VERIFY_EXCEPTION);
         }

+ 1 - 1
mec-application/src/main/java/com/ym/mec/student/controller/StudentManageController.java

@@ -349,7 +349,7 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "获取用户所在分部的年级列表)")
     @GetMapping("studentManage/getGradeList")
     public HttpResponseResult<Map<Integer,String>> getGradeList() {
-        return succeed(organizationService.getGradeList(sysUserService.getUserId()));
+        return succeed(organizationService.getGradeList(sysUserService.getUser().getOrganId()));
     }
 
     @ApiOperation(value = "url短链接")

+ 3 - 3
mec-application/src/main/java/com/ym/mec/student/controller/SysMusicCompareRecordController.java

@@ -37,7 +37,7 @@ public class SysMusicCompareRecordController extends BaseController {
 
     @ApiOperation(value = "添加记录")
     @PostMapping("add")
-    public HttpResponseResult add(SysMusicCompareRecord record,Integer campId){
+    public HttpResponseResult add(SysMusicCompareRecord record){
         if(Objects.isNull(record.getFeature())){
             return failed("请设置功能点");
         }
@@ -46,9 +46,9 @@ public class SysMusicCompareRecordController extends BaseController {
         record.setClientId("student");
         record.setCreateTime(new Date());
 
-        log.warn(" add record info; record:{},campId :{}",record,campId);
+        log.warn(" add record info; record:{}",record);
         
-        sysMusicCompareRecordService.insert(record,campId);
+        sysMusicCompareRecordService.insert(record);
         
         ModelMap model = new ModelMap();
         model.put("totalPlayTimeOfCurrentDate", sysMusicCompareRecordService.queryCurrentDatePlayTimeByUserId(userId));

+ 18 - 24
mec-application/src/main/java/com/ym/mec/student/controller/SysMusicScoreCategoriesController.java

@@ -1,35 +1,31 @@
 package com.ym.mec.student.controller;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.dto.MusicScoreQueryInfo;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.entity.TenantConfig;
 import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
+import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.biz.service.SysMusicScoreCategoriesService;
-import com.ym.mec.biz.service.TenantConfigService;
+import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.controller.BaseController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
+
 @RequestMapping("${app-config.url.student:}/sysMusicScoreCategories")
 @Api(tags = "曲库分类服务")
 @RestController
 public class SysMusicScoreCategoriesController extends BaseController {
 
-    @Autowired
+    @Resource
     private SysMusicScoreCategoriesService sysMusicScoreCategoriesService;
-    @Autowired
-    private SysUserFeignService sysUserFeignService;
-    
-    @Autowired
-    private TenantConfigService tenantConfigService;
+    @Resource
+    private SysUserService sysUserService;
+    @Resource
+    private OrganizationService organizationService;
 
 
     @ApiOperation(value = "分页查询")
@@ -41,23 +37,21 @@ public class SysMusicScoreCategoriesController extends BaseController {
     @ApiOperation(value = "树状列表")
     @GetMapping("/queryTree")
     public Object queryTree(MusicScoreQueryInfo queryInfo) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if(sysUser == null || sysUser.getId() == null){
-        	return failed(HttpStatus.FORBIDDEN, "请登录");
-        }
-        
-        TenantConfig tenantConfig = tenantConfigService.getOne(new QueryWrapper<TenantConfig>().eq("tenant_id_", sysUser.getTenantId()));
-        
-        return succeed(sysMusicScoreCategoriesService.queryCategoriesTreeList(tenantConfig.getTeachingMaterialId(), queryInfo.getEnable()));
+        SysUser sysUser = sysUserService.getUser();
+        String teachingMaterialIds = organizationService.getTeachingMaterialIds(sysUser.getOrganId().toString(),sysUser.getTenantId());
+        return succeed(sysMusicScoreCategoriesService.queryCategoriesTreeList(teachingMaterialIds, queryInfo.getEnable()));
     }
 
-
-
     @ApiOperation(value = "树状列表")
     @GetMapping("/queryTree1")
     public Object queryTree1(MusicScoreQueryInfo queryInfo) {
         queryInfo.setEnable(true);
-        return succeed(sysMusicScoreCategoriesService.queryTree(queryInfo));
+        SysUser sysUser = sysUserService.getUser();
+        String teachingMaterialIds = organizationService.getTeachingMaterialIds(sysUser.getOrganId().toString(),sysUser.getTenantId());
+        if(teachingMaterialIds.contains(queryInfo.getParentId().toString())){
+            return succeed(sysMusicScoreCategoriesService.queryTree(queryInfo));
+        }
+        return succeed();
     }
 
     @ApiOperation(value = "获取分类详情")

+ 3 - 3
mec-application/src/main/java/com/ym/mec/student/controller/UserMusicController.java

@@ -76,7 +76,7 @@ public class UserMusicController  extends BaseController {
 
     @ApiOperation(value = "保存草稿/发布作品", notes = "用户曲目作品- 传入 UserMusicWrapper.UserMusic")
     @PostMapping("/save")
-    public HttpResponseResult<JSONObject> add(@Validated @RequestBody UserMusicWrapper.AddUserMusic userMusic) {
+    public HttpResponseResult<String> add(@Validated @RequestBody UserMusicWrapper.AddUserMusic userMusic) {
         SysUser user = sysUserFeignService.queryUserInfo();
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
@@ -84,9 +84,9 @@ public class UserMusicController  extends BaseController {
         userMusic.setUserId(user.getId().longValue());
         userMusic.setClientType(ClientEnum.STUDENT);
         // 新增数据
-        userMusicService.save(userMusic);
+        ;
 
-        return succeed();
+        return succeed(userMusicService.save(userMusic).toString());
     }
 
     @ApiOperation(value = "删除", notes = "用户曲目作品- 传入id")

+ 12 - 2
mec-application/src/main/java/com/ym/mec/teacher/controller/CloudStudyController.java

@@ -1,5 +1,6 @@
 package com.ym.mec.teacher.controller;
 
+import com.ym.mec.biz.dal.dao.StudentTeacherMapperDao;
 import com.ym.mec.biz.dal.dto.CountStudentTrainDataDto;
 import com.ym.mec.biz.dal.dto.MusicCompareRankingDto;
 import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
@@ -12,10 +13,14 @@ import com.ym.mec.common.page.PageInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
+import java.util.List;
+
 import static com.ym.mec.biz.dal.enums.FeatureType.CLOUD_STUDY_EVALUATION;
 
 /**
@@ -27,10 +32,12 @@ import static com.ym.mec.biz.dal.enums.FeatureType.CLOUD_STUDY_EVALUATION;
 @RequestMapping("${app-config.url.teacher:}/cloudStudy")
 public class CloudStudyController extends BaseController {
 
-    @Autowired
+    @Resource
     private SysUserService sysUserService;
-    @Autowired
+    @Resource
     private SysMusicCompareRecordService sysMusicCompareRecordService;
+    @Resource
+    private StudentTeacherMapperDao studentTeacherMapperDao;
 
     @ApiOperation("查询乐团学员训练数据")
     @GetMapping("queryMusicGroupStudentTrainData")
@@ -48,6 +55,9 @@ public class CloudStudyController extends BaseController {
     @GetMapping("countStudentTrain")
     public HttpResponseResult<PageInfo<CountStudentTrainDataDto>> countStudentTrain(SysMusicCompareRecordQueryInfo queryInfo){
         queryInfo.setTeacherId(sysUserService.getUserId());
+        //获取老师关联的学员列表
+        List<Integer> studentIdList = studentTeacherMapperDao.queryStudentIds(queryInfo.getTeacherId(),null);
+        queryInfo.setStudentIdList(studentIdList);
         return succeed(sysMusicCompareRecordService.countStudentTrain(queryInfo));
     }
 

+ 1 - 4
mec-application/src/main/java/com/ym/mec/teacher/controller/CourseHomeworkController.java

@@ -1,7 +1,5 @@
 package com.ym.mec.teacher.controller;
 
-import com.ym.mec.auth.api.client.SysUserFeignService;
-import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.CourseHomeworkDao;
 import com.ym.mec.biz.dal.dto.CourseHomeworkStudentDetailDto;
 import com.ym.mec.biz.dal.dto.CourseHomeworkWrapper;
@@ -20,7 +18,6 @@ import com.yonge.log.model.AuditLogAnnotation;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
@@ -62,7 +59,7 @@ public class CourseHomeworkController extends BaseController {
 
     @ApiOperation(value = "根据班级获取教师布置的作业")
     @GetMapping("/findTeacherCourseHomeworkByClassGroup")
-    public Object findTeacherCourseHomeworkByClassGroup(CourseHomeworkQueryInfo queryInfo){
+    public HttpResponseResult<List<Map<String, Object>>> findTeacherCourseHomeworkByClassGroup(CourseHomeworkQueryInfo queryInfo){
         queryInfo.setUserId(sysUserService.getUserId().longValue());
         return succeed(courseHomeworkService.findTeacherCourseHomeworkByClassGroup(queryInfo));
     }

+ 1 - 2
mec-application/src/main/java/com/ym/mec/teacher/controller/SmsCodeController.java

@@ -38,8 +38,7 @@ public class SmsCodeController extends BaseController {
     @ApiImplicitParam(name = "mobile", value = "手机号", required = true, dataType = "String")
     @PostMapping(value = "/sendSms")
     public Object sendLoginVerifyCode(String mobile) throws Exception {
-        smsCodeService.sendValidCode(mobile);
-        return succeed();
+        throw new BizException("你所使用的不是最新版本,请更新后使用");
     }
 
     @ApiOperation(value = "发送登录短信验证码")

+ 13 - 5
mec-application/src/main/java/com/ym/mec/teacher/controller/StudentController.java

@@ -4,6 +4,7 @@ import com.ym.mec.biz.dal.dto.BaseMapDto;
 import com.ym.mec.biz.dal.entity.StudentAttendance;
 import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
+import com.ym.mec.biz.dal.page.CloudTeacherActiveWapper;
 import com.ym.mec.biz.dal.page.EndCourseScheduleQueryInfo;
 import com.ym.mec.biz.dal.page.StudentAttendanceQueryInfo;
 import com.ym.mec.biz.dal.page.StudentManageQueryInfo;
@@ -11,13 +12,13 @@ import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.apache.commons.collections.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -29,15 +30,15 @@ import java.util.stream.Collectors;
 @RestController
 public class StudentController extends BaseController {
 
-    @Autowired
+    @Resource
     private SysUserCashAccountService sysUserCashAccountService;
     @Resource
     private SysUserService sysUserService;
-    @Autowired
+    @Resource
     private StudentManageService studentManageService;
-    @Autowired
+    @Resource
     private CourseScheduleService courseScheduleService;
-    @Autowired
+    @Resource
     private StudentAttendanceService studentAttendanceService;
 
     @ApiOperation(value = "获取学员异常考勤列表")
@@ -75,6 +76,13 @@ public class StudentController extends BaseController {
         return succeed(sysUserCashAccountService.get(id));
     }
 
+    @ApiOperation(value = "云教练统计")
+    @PostMapping("/cloudTeacherActive")
+    public HttpResponseResult<CloudTeacherActiveWapper.ResultMap> cloudTeacherActive(@RequestBody CloudTeacherActiveWapper.Query queryInfo){
+        queryInfo.setTeacherId(sysUserService.getUserId());
+        return succeed(studentManageService.cloudTeacherActiveStatistics(queryInfo));
+    }
+
 
     @ApiOperation(value = "获取学生列表")
     @PostMapping("/queryStudentList")

+ 9 - 4
mec-application/src/main/java/com/ym/mec/teacher/controller/SysMusicCompareRecordController.java

@@ -3,17 +3,16 @@ package com.ym.mec.teacher.controller;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
+import com.ym.mec.biz.dal.page.MusicCompareRecordWapper;
 import com.ym.mec.biz.service.SysMusicCompareRecordService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.Objects;
 
@@ -46,6 +45,12 @@ public class SysMusicCompareRecordController extends BaseController {
         return succeed(sysMusicCompareRecordService.insert(record));
     }
 
+    @ApiOperation(value = "获取学员评测记录列表")
+    @PostMapping("queryPageByStudent")
+    public HttpResponseResult<PageInfo<MusicCompareRecordWapper.Result>> queryPageByStudent(@RequestBody MusicCompareRecordWapper.Query query){
+        return succeed(sysMusicCompareRecordService.queryPageByStudent(query));
+    }
+
     @ApiOperation(value = "用户最后一次评测数据")
     @GetMapping("getLastEvaluationMusicalNotesPlayStats")
     public HttpResponseResult getLastEvaluationMusicalNotesPlayStats(Long recordId){

+ 25 - 21
mec-application/src/main/java/com/ym/mec/teacher/controller/SysMusicScoreCategoriesController.java

@@ -1,37 +1,37 @@
 package com.ym.mec.teacher.controller;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.dto.MusicScoreQueryInfo;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.entity.TenantConfig;
+import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
+import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.biz.service.SysMusicScoreCategoriesService;
-import com.ym.mec.biz.service.TeacherService;
-import com.ym.mec.biz.service.TenantConfigService;
+import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.controller.BaseController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
+
 @RequestMapping("${app-config.url.teacher:}/sysMusicScoreCategories")
 @Api(tags = "曲库分类服务")
 @RestController
 public class SysMusicScoreCategoriesController extends BaseController {
 
-    @Autowired
+    @Resource
     private SysMusicScoreCategoriesService sysMusicScoreCategoriesService;
-    @Autowired
-    private SysUserFeignService sysUserFeignService;
-    @Autowired
-    private TeacherService teacherService;
-    
-    @Autowired
-    private TenantConfigService tenantConfigService;
+    @Resource
+    private SysUserService sysUserService;
+    @Resource
+    private OrganizationService organizationService;
+    @Resource
+    private TeacherDao teacherDao;
 
 
     @ApiOperation(value = "分页查询")
@@ -43,14 +43,18 @@ public class SysMusicScoreCategoriesController extends BaseController {
     @ApiOperation(value = "树状列表")
     @GetMapping("/queryTree")
     public Object queryTree(MusicScoreQueryInfo queryInfo) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed(HttpStatus.FORBIDDEN, "请登录");
+        SysUser sysUser = sysUserService.getUser();
+        //获取老师分部
+        Teacher teacher = teacherDao.get(sysUser.getId());
+        if (teacher == null) {
+            return failed(HttpStatus.BAD_REQUEST, "老师信息不存在");
+        }
+        String organId = teacher.getTeacherOrganId() + "";
+        if (StringUtils.isNotEmpty(teacher.getFlowOrganRange())){
+            organId = organId + "," + teacher.getFlowOrganRange();
         }
-        
-        TenantConfig tenantConfig = tenantConfigService.getOne(new QueryWrapper<TenantConfig>().eq("tenant_id_", sysUser.getTenantId()));
-        
-        return succeed(sysMusicScoreCategoriesService.queryCategoriesTreeList(tenantConfig.getTeachingMaterialId(), queryInfo.getEnable()));
+        String teachingMaterialIds = organizationService.getTeachingMaterialIds(organId,sysUser.getTenantId());
+        return succeed(sysMusicScoreCategoriesService.queryCategoriesTreeList(teachingMaterialIds, queryInfo.getEnable()));
     }
 
     @ApiOperation(value = "获取分类详情")

+ 39 - 17
mec-application/src/main/java/com/ym/mec/teacher/controller/TeacherController.java

@@ -1,11 +1,10 @@
 package com.ym.mec.teacher.controller;
 
+import com.ym.mec.biz.dal.dao.CourseScheduleDao;
 import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
 import com.ym.mec.biz.dal.dao.SubjectDao;
 import com.ym.mec.biz.dal.dto.*;
-import com.ym.mec.biz.dal.entity.StudentCourseHomework;
-import com.ym.mec.biz.dal.entity.Subject;
-import com.ym.mec.biz.dal.entity.Teacher;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.ELessonTrainingType;
 import com.ym.mec.biz.dal.enums.im.ClientEnum;
 import com.ym.mec.biz.dal.page.*;
@@ -14,6 +13,7 @@ import com.ym.mec.biz.service.*;
 import com.ym.mec.biz.service.im.ImGroupCoreService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.entity.ImGroupModel;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
@@ -25,6 +25,7 @@ import org.springframework.util.CollectionUtils;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -52,6 +53,8 @@ public class TeacherController extends BaseController {
     private StudentRegistrationService studentRegistrationService;
     @Autowired
     private ImGroupCoreService imGroupCoreService;
+    @Autowired
+    private CourseScheduleDao courseScheduleDao;
 
     @Autowired
     private StudentCourseHomeworkService studentCourseHomeworkService;
@@ -71,9 +74,16 @@ public class TeacherController extends BaseController {
         return succeed(teacherService.queryOrganList(sysUserService.getUserId()));
     }
 
+    @ApiOperation(value = "课程配置课件")
+    @GetMapping("/configCourseware")
+    public HttpResponseResult configCourseware(Long courseId,String coursewareDetailId) {
+        courseScheduleDao.configCourseware(courseId,coursewareDetailId);
+        return succeed();
+    }
+
     @ApiOperation(value = "根据教师编号查询教师基本信息")
     @GetMapping("/queryUserInfo")
-    public Object queryUserInfo() {
+    public HttpResponseResult<Teacher> queryUserInfo() {
 		Teacher teacher = Optional.ofNullable(teacherService.get(sysUserService.getUserId())).
                 orElseThrow(()->new BizException("老师信息不存在"));
 		//专业技能
@@ -100,76 +110,88 @@ public class TeacherController extends BaseController {
     @ApiOperation(value = "根据教师编号查询教师基本信息")
     @GetMapping("/get")
     @ApiParam(value = "教师编号", required = true)
-    public Object get(Integer id) {
+    public HttpResponseResult<Teacher> get(Integer id) {
         return succeed(teacherService.getDetail(id));
     }
 
     @ApiOperation(value = "根据教师编号查询教师课程班列表")
     @GetMapping("/getClass")
     @ApiParam(value = "教师编号", required = true)
-    public Object getClassGroup(Integer id) {
+    public HttpResponseResult<List<ClassGroup>> getClassGroup(Integer id) {
         return succeed(classGroupService.findClassGroup4Teacher(id));
     }
 
     @ApiOperation(value = "获取老师乐团课程信息列表")
     @GetMapping("/getTeacherMusicClass")
     @ApiParam(value = "教师编号", required = true)
-    public Object getTeacherMusicClass(TeacherMusicClassQueryInfo queryInfo){
+    public HttpResponseResult<PageInfo<TeacherMusicClassInfoDto>> getTeacherMusicClass(TeacherMusicClassQueryInfo queryInfo){
         return succeed(classGroupService.getTeacherMusicClass(queryInfo));
     }
 
+    @ApiOperation(value = "获取老师关联的乐团列表")
+    @GetMapping("/queryTeacherMusicGroup")
+    public HttpResponseResult<List<MusicGroup>> queryTeacherMusicGroup(){
+        return succeed(classGroupService.getDao().queryTeacherMusicGroup(sysUserService.getUserId()));
+    }
+
+    @ApiOperation(value = "获取老师所在乐团的班级列表")
+    @GetMapping("/queryTeacherMusicClass")
+    public HttpResponseResult<List<ClassGroup>> queryTeacherMusicClass(String musicGroupId){
+        return succeed(classGroupService.getDao().queryTeacherMusicClass(musicGroupId,sysUserService.getUserId()));
+    }
+
     @ApiOperation(value = "获取老师VIP课程信息列表")
     @GetMapping("/getTeacherVipClass")
-    public Object getTeacherVipClass(VipClassQueryInfo queryInfo){
+    public HttpResponseResult<PageInfo<TeacherVipClassInfoDto>> getTeacherVipClass(VipClassQueryInfo queryInfo){
         return succeed(classGroupService.getTeacherVipClass(queryInfo));
     }
 
     @ApiOperation(value = "获取教师所有聊天群组")
     @GetMapping("/queryTeacherGroups")
-    public Object queryTeacherGroups(String search){
+    public HttpResponseResult<List<ImGroupModel>> queryTeacherGroups(String search){
         return succeed(teacherService.queryTeacherGroups(sysUserService.getUserId(),search));
     }
 
     @ApiOperation(value = "获取当前教师通讯录列表")
     @GetMapping("/queryGroupStudents")
-    public Object queryGroupStudents(String search){
+    public HttpResponseResult<List<BasicUserDto>> queryGroupStudents(String search){
         return succeed(teacherService.queryGroupStudents(sysUserService.getUserId(),search));
     }
 
     @ApiOperation(value = "获取当前教师通讯录学员列表")
     @GetMapping("/queryGroupStudentList")
-    public Object queryGroupStudentList(String search){
+    public HttpResponseResult<List<BasicUserDto>> queryGroupStudentList(String search){
         return succeed(teacherService.queryGroupStudentList(sysUserService.getUserId(),search));
     }
 
     @ApiOperation(value = "分页查询群公告列表")
     @GetMapping(value = "/queryNoticePage")
-    public Object queryNoticePage(QueryInfo queryInfo){
+    public HttpResponseResult<PageInfo<ImGroupNotice>> queryNoticePage(QueryInfo queryInfo){
         return succeed(imGroupNoticeService.queryPage(queryInfo));
     }
 
     @ApiOperation(value = "获取教师上课结算列表")
     @GetMapping("/queryCloses")
-    public Object queryCloses(TeacherCloseQueryInfo queryInfo){
+    public HttpResponseResult<PageInfo<TeacherCloseDto>> queryCloses(TeacherCloseQueryInfo queryInfo){
         return succeed(teacherService.queryCloses(queryInfo));
     }
 
     @ApiOperation(value = "获取教师上课课酬未结算总额")
     @GetMapping("/sumTeacherNoPay")
-    public Object findTeacherNoPay(Integer teacherId){
+    public HttpResponseResult<BigDecimal> findTeacherNoPay(Integer teacherId){
         return succeed(teacherService.findTeacherNoPay(teacherId));
     }
 
     @ApiOperation(value = "获取乐团学院学员报名列表")
     @GetMapping("/queryStudentApply")
-    public Object queryMusicGroupStudentApply(queryMusicGroupStudentQueryInfo queryInfo) {
+    public HttpResponseResult<PageInfo<MusicGroupStudentApplyDto>> queryMusicGroupStudentApply(queryMusicGroupStudentQueryInfo queryInfo) {
         return succeed(teacherService.queryMusicGroupStudentApply(queryInfo));
     }
 
     @ApiOperation(value = "通过乐团编号查询乐团科目规划")
     @GetMapping("/querySubByMusicGroupId")
     @ApiImplicitParams({ @ApiImplicitParam(name = "musicGroupId", value = "乐团编号", required = true, dataType = "String")})
-    public Object findSubByMusicGroupId(String musicGroupId){
+    public HttpResponseResult<List<Subject>> findSubByMusicGroupId(String musicGroupId){
         return succeed(subjectService.findSubByMusicGroupId(musicGroupId));
     }
 
@@ -180,7 +202,7 @@ public class TeacherController extends BaseController {
 			@ApiImplicitParam(name = "idcardFrontImg", value = "身份证正面", required = true, dataType = "String"),
 			@ApiImplicitParam(name = "idcardBackImg", value = "身份证背面", required = true, dataType = "String"),
 			@ApiImplicitParam(name = "idcardHandImg", value = "手持身份证照", required = true, dataType = "String") })
-	public Object realNameAuthentication(String realName, String idcardNo, String idcardFrontImg, String idcardBackImg, String idcardHandImg) {
+	public HttpResponseResult<Object> realNameAuthentication(String realName, String idcardNo, String idcardFrontImg, String idcardBackImg, String idcardHandImg) {
 		teacherService.realNameAuthentication(sysUserService.getUserId(), realName, idcardNo, idcardFrontImg, idcardBackImg, idcardHandImg);
 		return succeed();
 	}

+ 6 - 0
mec-application/src/main/java/com/ym/mec/teacher/controller/TeacherCourseScheduleController.java

@@ -96,6 +96,12 @@ public class TeacherCourseScheduleController extends BaseController {
         return succeed(result);
     }
 
+    @ApiOperation(value = "获取最近的一节课")
+    @PostMapping("/getRecentCourseSchedule")
+    public HttpResponseResult<CourseScheduleDto> getRecentCourseSchedule(Long courseId){
+        return succeed(scheduleService.getRecentCourseSchedule(sysUserService.getUserId(),courseId));
+    }
+
     @ApiOperation(value = "根据月份获取该月历史有课的日期")
     @GetMapping("/getHistoryCourseScheduleDateByMonth")
     public Object getHistoryCourseScheduleDateByTeacher(@ApiParam(value = "月份", required = true) @RequestParam Date month) {

+ 8 - 6
mec-application/src/main/java/com/ym/mec/teacher/controller/TeacherSubjectController.java

@@ -2,16 +2,19 @@ package com.ym.mec.teacher.controller;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.Subject;
 import com.ym.mec.biz.service.SubjectService;
 import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -23,14 +26,14 @@ import java.util.Objects;
 @RestController
 public class TeacherSubjectController extends BaseController {
 
-    @Autowired
+    @Resource
     private SubjectService subjectService;
-    @Autowired
+    @Resource
     private SysUserFeignService sysUserFeignService;
 
     @ApiOperation(value = "获取教师所在科目列表")
     @GetMapping("/findTeacherSubjets")
-    public Object findTeacherSubjets(){
+    public HttpResponseResult<List<Subject>> findTeacherSubjets(){
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if(Objects.isNull(sysUser)){
             return failed(HttpStatus.FORBIDDEN,"请登录");
@@ -40,8 +43,7 @@ public class TeacherSubjectController extends BaseController {
 
     @ApiOperation(value = "获取子集科目列表")
     @GetMapping("/findSubSubjects")
-    public Object findSubSubjects(Integer tenantId){
+    public HttpResponseResult<List<Subject>> findSubSubjects(Integer tenantId){
         return succeed(subjectService.findSubSubjects(null));
     }
-
 }

+ 20 - 4
mec-application/src/main/java/com/ym/mec/web/controller/AppVersionInfoController.java

@@ -10,6 +10,8 @@ import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -38,16 +40,30 @@ public class AppVersionInfoController extends BaseController {
 	@ApiOperation("根据app客户端查询对象")
 	@ApiImplicitParam(name = "platform", value = "平台名称", required = true, dataType = "String", paramType = "path")
 	@GetMapping(value = "/queryByPlatform")
-	public Object queryByPlatform(String platform) {
+	public Object queryByPlatform(String platform,String localVersion) {
 		List<AppVersionInfo> list = appVersionInfoService.queryNewestByPlatform(platform);
-		if (list.size() > 0) {
+		if (CollectionUtils.isNotEmpty(list)) {
 			AppVersionInfo appVersionInfo = list.get(0);
-			if(appVersionInfo.getVersion().equals("2.0.9") && appVersionInfo.getPlatform().equals("android-education")){
+			if("2.0.9".equals(appVersionInfo.getVersion()) && "android-education".equals(appVersionInfo.getPlatform())){
 				AppVersionInfoBak appVersionInfoBak = JSONObject.parseObject(JSONObject.toJSONString(appVersionInfo),AppVersionInfoBak.class);
 				appVersionInfoBak.setDownloadUrl(new String(appVersionInfo.getDownloadUrl()));
+				/*if (StringUtils.isEmpty(localVersion)) {
+					appVersionInfoBak.setIsForceUpdate(true);
+				}*/
 				return succeed(appVersionInfoBak);
 			}
-			return succeed(list.get(0));
+			//如果应用版本跨多个版本时若其中任何一个版本有强制更新,返回字段标记为强制更新
+			if(!appVersionInfo.getIsForceUpdate() && StringUtils.isNotEmpty(localVersion)){
+				//是否需要强制更新
+				AppVersionInfo forceUpdate = appVersionInfoService.checkForceUpdate(platform,localVersion);
+				if(forceUpdate != null){
+					appVersionInfo.setIsForceUpdate(true);
+				}
+			}
+			/*if (StringUtils.isEmpty(localVersion)) {
+				appVersionInfo.setIsForceUpdate(true);
+			}*/
+			return succeed(appVersionInfo);
 		}
 		return failed();
 	}

+ 13 - 1
mec-application/src/main/java/com/ym/mec/web/controller/ClassGroupController.java

@@ -435,7 +435,8 @@ public class ClassGroupController extends BaseController {
 
     @ApiOperation(value = "学校端-场地管理列表")
     @PostMapping("/teachingPointCourse")
-    public HttpResponseResult<PageInfo<TeachingPointWrapper.CourseTeachingPoint>> teachingPoint(@RequestBody TeachingPointWrapper.TeachingPointQuery queryInfo,@RequestHeader Integer coopId) {
+    public HttpResponseResult<PageInfo<TeachingPointWrapper.CourseTeachingPoint>>
+    teachingPoint(@RequestBody TeachingPointWrapper.TeachingPointQuery queryInfo,@RequestHeader Integer coopId) {
         if (coopId == null) {
             return succeed(new PageInfo<>());
         }
@@ -449,6 +450,17 @@ public class ClassGroupController extends BaseController {
         return succeed(PageUtil.pageInfo(courseTeachingPointIPage));
     }
 
+    @ApiOperation(value = "管理端-场地管理列表")
+    @PostMapping("/eduTeachingPointCourse")
+    public HttpResponseResult<PageInfo<TeachingPointWrapper.CourseTeachingPoint>>
+    eduTeachingPointCourse(@RequestBody TeachingPointWrapper.TeachingPointQuery queryInfo) {
+        if (queryInfo.getCourseStatus() == null) {
+            queryInfo.setCourseStatus(CourseStatusEnum.OVER);
+        }
+        IPage<TeachingPointWrapper.CourseTeachingPoint> courseTeachingPointIPage = courseScheduleService.teachingPointCourse(queryInfo);
+        return succeed(PageUtil.pageInfo(courseTeachingPointIPage));
+    }
+
     @ApiOperation(value = "学校端-场地设置列表")
     @PostMapping("/teachingPointClass")
     public HttpResponseResult<PageInfo<TeachingPointWrapper.ClassTeachingPoint>> teachingPointClass(@RequestBody TeachingPointWrapper.TeachingPointQuery queryInfo,@RequestHeader Integer coopId) {

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

@@ -19,13 +19,13 @@ import com.ym.mec.common.exception.BizException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.ArrayUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.ui.ModelMap;
-import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
@@ -357,7 +357,7 @@ public class CourseScheduleController extends BaseController {
 				return failed("请指定班级");
 			}
     		List<ClassGroup> classGroupList = classGroupDao.findClassGroupByMusicGroupIdAndType(batchInsertCoursesDto.getMusicGroupId(), ClassGroupTypeEnum.valueOf(batchInsertCoursesDto.getType().getCode()));
-    		if(classGroupList == null || classGroupList.size() == 0){
+    		if(CollectionUtils.isEmpty(classGroupList)){
     			return failed("没有查询到班级信息");
     		}
     		batchInsertCoursesDto.setClassGroupId(classGroupList.get(0).getId());

+ 4 - 4
mec-application/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -2826,11 +2826,11 @@ public class ExportController extends BaseController {
         }
         OutputStream outputStream = response.getOutputStream();
         try {
-            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "学员姓名", "学员编号", "老师姓名", "老师编号",
-                    "课程组编号", "课程编号", "课程名称", "课程组类型", "课程类型", "上课时间","签到时间", "签退时间", "考勤状态","来源"}, new String[]{
-                    "courseSchedule.organization.name", "username", "userId", "courseSchedule.teacherName", "teacherId", "musicGroupId", "courseScheduleId",
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "学员姓名", "学员编号", "专业", "老师姓名", "老师编号",
+                    "课程组编号","课程组名称", "课程编号", "课程名称", "课程组类型", "课程类型", "上课时间","签到时间", "签退时间", "考勤状态","是否达标","来源"}, new String[]{
+                    "courseSchedule.organization.name", "username", "userId","subjectName", "courseSchedule.teacherName", "teacherId", "musicGroupId", "musicGroupName", "courseScheduleId",
                     "courseSchedule.name", "groupType.desc", "courseSchedule.type.msg", "classTimeStr", "signInTime",
-                    "signOutTime", "status.msg","joinCourseType.msg"}, rows);
+                    "signOutTime", "status.msg","qualifiedFlag == null || qualifiedFlag == 0? '未达标' : '已达标'","joinCourseType.msg"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attac:wq" +
                     "hment;filename=courseAttendance-" + DateUtil.getDate(new Date()) + ".xls");

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

@@ -38,8 +38,7 @@ public class SmsCodeController extends BaseController {
     @ApiImplicitParam(name = "mobile", value = "手机号", required = true, dataType = "String")
     @PostMapping(value = "/sendSms")
     public Object sendLoginVerifyCode(String mobile) throws Exception {
-        smsCodeService.sendValidCode(mobile);
-        return succeed();
+        throw new BizException("你所使用的不是最新版本,请更新后使用");
     }
 
     @ApiOperation(value = "发送登录短信验证码")

+ 69 - 0
mec-application/src/main/java/com/ym/mec/web/controller/education/EduCloudStudyController.java

@@ -0,0 +1,69 @@
+package com.ym.mec.web.controller.education;
+
+import com.ym.mec.biz.dal.dao.StudentDao;
+import com.ym.mec.biz.dal.dto.CountStudentTrainDataDto;
+import com.ym.mec.biz.dal.dto.MusicCompareRankingDto;
+import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
+import com.ym.mec.biz.dal.page.SysMusicCompareRecordQueryInfo;
+import com.ym.mec.biz.service.OrganizationService;
+import com.ym.mec.biz.service.SysMusicCompareRecordService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+import static com.ym.mec.biz.dal.enums.FeatureType.CLOUD_STUDY_EVALUATION;
+
+/**
+ * @author zx
+ */
+@Api("云教练")
+@RestController
+@RequestMapping("${app-config.url.web:}/eduCloudStudy")
+public class EduCloudStudyController extends BaseController {
+
+    @Resource
+    private SysMusicCompareRecordService sysMusicCompareRecordService;
+    @Resource
+    private StudentDao studentDao;
+    @Resource
+    private OrganizationService organizationService;
+
+    @ApiOperation("查询乐团学员训练数据")
+    @GetMapping("queryMusicGroupStudentTrainData")
+    public HttpResponseResult<PageInfo<MusicCompareRankingDto>> queryMusicGroupStudentTrainData(SysMusicCompareRecordQueryInfo queryInfo){
+        return succeed(sysMusicCompareRecordService.queryMusicGroupStudentTrainData(queryInfo));
+    }
+
+    @ApiOperation("学员训练数据")
+    @GetMapping("queryStudentTrainData")
+    public HttpResponseResult<PageInfo<SysMusicCompareRecord>> queryStudentTrainData(SysMusicCompareRecordQueryInfo queryInfo){
+        return succeed(sysMusicCompareRecordService.queryStudentTrainData(queryInfo));
+    }
+
+    @ApiOperation("学员训练统计")
+    @GetMapping("countStudentTrain")
+    public HttpResponseResult<PageInfo<CountStudentTrainDataDto>> countStudentTrain(SysMusicCompareRecordQueryInfo queryInfo){
+        //获取分部下学员列表
+        List<Integer> userIds = studentDao.queryByOrganIds(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
+        queryInfo.setStudentIdList(userIds);
+        return succeed(sysMusicCompareRecordService.countStudentTrain(queryInfo));
+    }
+
+    @ApiOperation("学员评测列表")
+    @GetMapping("queryMusicCompareRecord")
+    public HttpResponseResult<PageInfo<SysMusicCompareRecord>> queryMusicCompareRecord(SysMusicCompareRecordQueryInfo queryInfo){
+        if(queryInfo.getFeatureType() == null){
+            queryInfo.setFeatureType(CLOUD_STUDY_EVALUATION);
+        }
+        return succeed(sysMusicCompareRecordService.queryPage(queryInfo));
+    }
+
+}

+ 59 - 0
mec-application/src/main/java/com/ym/mec/web/controller/education/EduCooperationOrganController.java

@@ -0,0 +1,59 @@
+package com.ym.mec.web.controller.education;
+
+import com.ym.mec.biz.dal.dao.ClassGroupDao;
+import com.ym.mec.biz.dal.entity.ClassGroup;
+import com.ym.mec.biz.dal.entity.CooperationOrgan;
+import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.page.CooperationOrganQueryInfo;
+import com.ym.mec.biz.service.CooperationOrganService;
+import com.ym.mec.biz.service.OrganizationService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RequestMapping("${app-config.url.web:}/eduCooperationOrgan")
+@Api(tags = "合作单位(教学点)服务")
+@RestController
+public class EduCooperationOrganController extends BaseController {
+
+    @Resource
+    private CooperationOrganService cooperationOrganService;
+    @Resource
+    private OrganizationService organizationService;
+    @Resource
+    private ClassGroupDao classGroupDao;
+
+    @ApiOperation(value = "分页查询合作单位(教学点)列表")
+    @GetMapping("/queryPage")
+    public HttpResponseResult<PageInfo<CooperationOrgan>> queryPage(CooperationOrganQueryInfo queryInfo) {
+        queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
+        return succeed(cooperationOrganService.queryPage(queryInfo));
+    }
+
+    @ApiOperation(value = "根据分部获取合作单位(教学点)列表")
+    @GetMapping("/queryByOrganId")
+    public HttpResponseResult<List<CooperationOrgan>> queryByOrganId(String organId, Boolean enable) {
+        return succeed(cooperationOrganService.queryByOrganId(organizationService.getEmployeeOrgan(organId),enable));
+    }
+
+    @ApiOperation(value = "合作单位的乐团")
+    @GetMapping("/musicGroupPage")
+    public HttpResponseResult<List<MusicGroup>> musicGroupPage(String organId,String coopId) {
+        return succeed(cooperationOrganService.musicGroupPage(organizationService.getEmployeeOrgan(organId),coopId));
+    }
+
+    @ApiOperation(value = "获取乐团班级列表")
+    @GetMapping("/musicGroupClassPage")
+    public HttpResponseResult<List<ClassGroup>> musicGroupClassPage(String musicGroupId) {
+        return succeed(classGroupDao.findClassGroups(musicGroupId));
+    }
+}

+ 15 - 28
mec-application/src/main/java/com/ym/mec/web/controller/education/EduMusicScoreController.java

@@ -1,17 +1,15 @@
 package com.ym.mec.web.controller.education;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.dto.MusicScoreQueryInfo;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
 import com.ym.mec.biz.dal.entity.Employee;
-import com.ym.mec.biz.dal.entity.TenantConfig;
 import com.ym.mec.biz.dal.enums.ClientTypeEnum;
 import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
+import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.biz.service.SysMusicScoreAccompanimentService;
 import com.ym.mec.biz.service.SysMusicScoreCategoriesService;
-import com.ym.mec.biz.service.TenantConfigService;
+import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.controller.BaseController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -21,6 +19,7 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
 import java.util.Arrays;
 import java.util.List;
 
@@ -28,33 +27,24 @@ import java.util.List;
 @Api(tags = "智能陪练")
 @RestController
 public class EduMusicScoreController extends BaseController {
-    @Autowired
+    @Resource
     private SysMusicScoreCategoriesService sysMusicScoreCategoriesService;
-    @Autowired
+    @Resource
     private SysMusicScoreAccompanimentService sysMusicScoreAccompanimentService;
-    @Autowired
-    private SysUserFeignService sysUserFeignService;
-    @Autowired
+    @Resource
+    private SysUserService sysUserService;
+    @Resource
     private EmployeeDao employeeDao;
-    
-    @Autowired
-    private TenantConfigService tenantConfigService;
+    @Resource
+    private OrganizationService organizationService;
 
     @ApiOperation(value = "树状列表")
     @GetMapping("/queryTree")
     public Object queryTree(MusicScoreQueryInfo queryInfo) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed("用户信息获取失败");
-        }
-        
-        TenantConfig tenantConfig = tenantConfigService.getOne(new QueryWrapper<TenantConfig>().eq("tenant_id_", sysUser.getTenantId()));
-        
-        if(tenantConfig == null){
-        	return failed("当前用户所在机构信息查询失败");
-        }
-        
-        return succeed(sysMusicScoreCategoriesService.queryCategoriesTreeList(tenantConfig.getTeachingMaterialId(), queryInfo.getEnable()));
+        SysUser sysUser = sysUserService.getUser();
+        String organId = organizationService.getEmployeeOrgan(sysUser.getId(), null, sysUser.getIsSuperAdmin() && sysUser.getTenantId() == -1);
+        String teachingMaterialIds = organizationService.getTeachingMaterialIds(organId, sysUser.getTenantId());
+        return succeed(sysMusicScoreCategoriesService.queryCategoriesTreeList(teachingMaterialIds, queryInfo.getEnable()));
     }
 
     @ApiOperation(value = "分页查询")
@@ -67,10 +57,7 @@ public class EduMusicScoreController extends BaseController {
     @ApiOperation(value = "分页查询")
     @GetMapping("/queryPageLimit")
     public Object queryPageLimit(SysExamSongQueryInfo queryInfo) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
-            return failed("用户信息获取失败");
-        }
+        SysUser sysUser = sysUserService.getUser();
         String type = queryInfo.getType();
         if(StringUtils.isEmpty(type)){
             queryInfo.setType("ALL");

+ 11 - 0
mec-application/src/main/java/com/ym/mec/web/controller/education/EduSubjectController.java

@@ -1,7 +1,9 @@
 package com.ym.mec.web.controller.education;
 
+import com.ym.mec.biz.dal.entity.Subject;
 import com.ym.mec.biz.service.SubjectService;
 import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -9,6 +11,8 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.List;
+
 @RequestMapping("${app-config.url.web:}/eduSubject")
 @Api(tags = "教务端科目服务")
 @RestController
@@ -28,4 +32,11 @@ public class EduSubjectController extends BaseController {
     public Object get(String subjectIdList){
         return succeed(subjectService.findBySubjectByIdList(subjectIdList));
     }
+
+
+    @ApiOperation(value = "获取指定名称的科目列表")
+    @GetMapping("/findByNames")
+    public HttpResponseResult<List<Subject>> findByNames() {
+        return succeed(subjectService.getDao().findByNames());
+    }
 }

+ 67 - 0
mec-application/src/main/java/com/ym/mec/web/controller/school/SchoolCloudStudyController.java

@@ -0,0 +1,67 @@
+package com.ym.mec.web.controller.school;
+
+import com.ym.mec.biz.dal.dao.StudentDao;
+import com.ym.mec.biz.dal.dto.CountStudentTrainDataDto;
+import com.ym.mec.biz.dal.dto.MusicCompareRankingDto;
+import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
+import com.ym.mec.biz.dal.page.SysMusicCompareRecordQueryInfo;
+import com.ym.mec.biz.service.SysMusicCompareRecordService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+import static com.ym.mec.biz.dal.enums.FeatureType.CLOUD_STUDY_EVALUATION;
+
+/**
+ * @author zx
+ */
+@Api("云教练")
+@RestController
+@RequestMapping("${app-config.url.web:}/schoolCloudStudy")
+public class SchoolCloudStudyController extends BaseController {
+
+    @Resource
+    private SysMusicCompareRecordService sysMusicCompareRecordService;
+    @Resource
+    private StudentDao studentDao;
+
+    @ApiOperation("查询乐团学员训练数据")
+    @GetMapping("queryMusicGroupStudentTrainData")
+    public HttpResponseResult<PageInfo<MusicCompareRankingDto>> queryMusicGroupStudentTrainData(SysMusicCompareRecordQueryInfo queryInfo){
+        return succeed(sysMusicCompareRecordService.queryMusicGroupStudentTrainData(queryInfo));
+    }
+
+    @ApiOperation("学员训练数据")
+    @GetMapping("queryStudentTrainData")
+    public HttpResponseResult<PageInfo<SysMusicCompareRecord>> queryStudentTrainData(SysMusicCompareRecordQueryInfo queryInfo){
+        return succeed(sysMusicCompareRecordService.queryStudentTrainData(queryInfo));
+    }
+
+    @ApiOperation("学员训练统计")
+    @GetMapping("countStudentTrain")
+    public HttpResponseResult<PageInfo<CountStudentTrainDataDto>> countStudentTrain(SysMusicCompareRecordQueryInfo queryInfo,@RequestHeader Integer coopId){
+        //获取合作单位下学员列表
+        List<Integer> userIds = studentDao.queryByCoopIds(coopId);
+        queryInfo.setStudentIdList(userIds);
+        return succeed(sysMusicCompareRecordService.countStudentTrain(queryInfo));
+    }
+
+    @ApiOperation("学员评测列表")
+    @GetMapping("queryMusicCompareRecord")
+    public HttpResponseResult<PageInfo<SysMusicCompareRecord>> queryMusicCompareRecord(SysMusicCompareRecordQueryInfo queryInfo){
+        if(queryInfo.getFeatureType() == null){
+            queryInfo.setFeatureType(CLOUD_STUDY_EVALUATION);
+        }
+        return succeed(sysMusicCompareRecordService.queryPage(queryInfo));
+    }
+
+}

+ 43 - 0
mec-application/src/main/java/com/ym/mec/web/controller/school/SchoolCooperationOrganController.java

@@ -0,0 +1,43 @@
+package com.ym.mec.web.controller.school;
+
+import com.ym.mec.biz.dal.dao.ClassGroupDao;
+import com.ym.mec.biz.dal.entity.ClassGroup;
+import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.service.CooperationOrganService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RequestMapping("${app-config.url.web:}/schoolCooperationOrgan")
+@Api(tags = "合作单位(教学点)服务")
+@RestController
+public class SchoolCooperationOrganController extends BaseController {
+
+    @Resource
+    private CooperationOrganService cooperationOrganService;
+    @Resource
+    private ClassGroupDao classGroupDao;
+
+    @ApiOperation(value = "合作单位的乐团")
+    @GetMapping("/musicGroupPage")
+    public HttpResponseResult<List<MusicGroup>> musicGroupPage(@RequestHeader Integer coopId) {
+        if (coopId == null) {
+            return succeed();
+        }
+        return succeed(cooperationOrganService.musicGroupPage(coopId));
+    }
+
+    @ApiOperation(value = "获取乐团班级列表")
+    @GetMapping("/musicGroupClassPage")
+    public HttpResponseResult<List<ClassGroup>> musicGroupClassPage(String musicGroupId) {
+        return succeed(classGroupDao.findClassGroups(musicGroupId));
+    }
+}

+ 40 - 0
mec-application/src/main/java/com/ym/mec/web/controller/school/SchoolMusicScoreController.java

@@ -0,0 +1,40 @@
+package com.ym.mec.web.controller.school;
+
+import com.ym.mec.auth.api.dto.MusicScoreQueryInfo;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.SchoolStaff;
+import com.ym.mec.biz.service.OrganizationService;
+import com.ym.mec.biz.service.SchoolStaffService;
+import com.ym.mec.biz.service.SysMusicScoreCategoriesService;
+import com.ym.mec.biz.service.SysUserService;
+import com.ym.mec.common.controller.BaseController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RequestMapping("${app-config.url.web:}/schoolMusicScore")
+@Api(tags = "智能陪练")
+@RestController
+public class SchoolMusicScoreController extends BaseController {
+    @Resource
+    private SysMusicScoreCategoriesService sysMusicScoreCategoriesService;
+    @Resource
+    private SysUserService sysUserService;
+    @Resource
+    private SchoolStaffService schoolStaffService;
+    @Resource
+    private OrganizationService organizationService;
+
+    @ApiOperation(value = "树状列表")
+    @GetMapping("/queryTree")
+    public Object queryTree(MusicScoreQueryInfo queryInfo) {
+        SysUser sysUser = sysUserService.getUser();
+        SchoolStaff schoolStaff = schoolStaffService.getByUserId(sysUser.getId());
+        String teachingMaterialIds = organizationService.getTeachingMaterialIds(schoolStaff.getOrganIdList(), sysUser.getTenantId());
+        return succeed(sysMusicScoreCategoriesService.queryCategoriesTreeList(teachingMaterialIds, queryInfo.getEnable()));
+    }
+}

+ 156 - 8
mec-application/src/main/java/com/ym/mec/web/controller/school/SchoolStudentHomeworkController.java

@@ -1,29 +1,34 @@
 package com.ym.mec.web.controller.school;
 
 
-import com.ym.mec.biz.dal.dto.StudentLessonExaminationDetailDto;
-import com.ym.mec.biz.dal.dto.StudentLessonExaminationDto;
-import com.ym.mec.biz.dal.dto.StudentLessonTrainingDetailWrapper;
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
+import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.entity.StudentAttendance;
 import com.ym.mec.biz.dal.entity.StudentCourseHomework;
+import com.ym.mec.biz.dal.entity.Subject;
+import com.ym.mec.biz.dal.enums.EHomeWorkStatus;
 import com.ym.mec.biz.dal.enums.ELessonTrainingType;
+import com.ym.mec.biz.dal.page.LessonExaminationQueryInfo;
 import com.ym.mec.biz.dal.page.StudentLessonExaminationQueryDto;
 import com.ym.mec.biz.dal.page.StudentLessonExaminationQueryInfo;
-import com.ym.mec.biz.service.StudentCourseHomeworkService;
-import com.ym.mec.biz.service.StudentLessonExaminationDetailService;
-import com.ym.mec.biz.service.StudentLessonExaminationService;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 @Api(tags = "学校学员课后作业")
 @RestController
@@ -34,9 +39,96 @@ public class SchoolStudentHomeworkController extends BaseController {
     private StudentLessonExaminationService studentLessonExaminationService;
     @Resource
     private StudentLessonExaminationDetailService studentLessonExaminationDetailService;
-
-    @Autowired
+    @Resource
     private StudentCourseHomeworkService studentCourseHomeworkService;
+    @Resource
+    private StudentExtracurricularExercisesSituationService studentExtracurricularExercisesSituationService;
+    @Resource
+    private LessonExaminationService lessonExaminationService;
+    @Resource
+    private StudentAttendanceService studentAttendanceService;
+    @Resource
+    private MusicGroupDao musicGroupDao;
+    @Resource
+    private SubjectService subjectService;
+    @Resource
+    private CourseHomeworkService courseHomeworkService;
+    @ApiOperation(value = "获取教师有服务指标的课程列表")
+    @PostMapping("/queryHomework")
+    public HttpResponseResult<PageInfo<CourseHomeworkWrapper.CourseHomeworkList>>
+    queryHomework(@RequestBody CourseHomeworkWrapper.CourseHomeworkQuery queryInfo,@RequestHeader Integer coopId) {
+        //获取合作单位关联的所有乐团列表
+        List<String> musicGroupIds = musicGroupDao.findNormalByCooperationId(coopId);
+        if (CollectionUtils.isEmpty(musicGroupIds)) {
+            return succeed(new PageInfo<>());
+        }
+        queryInfo.setMusicGroupIds(musicGroupIds);
+        if(queryInfo.getHomeWorkStatus() == null){
+            queryInfo.setHomeWorkStatus(EHomeWorkStatus.ASSIGNED);
+        }
+        return succeed(studentExtracurricularExercisesSituationService.queryTeacherServeHomeworkDetailV2(queryInfo));
+    }
+
+    @ApiOperation(value = "获取课外作业列表")
+    @PostMapping("/queryExtraHomework")
+    public HttpResponseResult<PageInfo<CourseHomeworkWrapper.CourseHomeworkList>>
+    queryExtraHomework(@RequestBody CourseHomeworkWrapper.CourseHomeworkQuery queryInfo,@RequestHeader Integer coopId) {
+        //获取合作单位关联的所有乐团列表
+        List<String> musicGroupIds = musicGroupDao.findNormalByCooperationId(coopId);
+        if (CollectionUtils.isEmpty(musicGroupIds)) {
+            return succeed(new PageInfo<>());
+        }
+        queryInfo.setMusicGroupIds(musicGroupIds);
+        return succeed(studentExtracurricularExercisesSituationService.queryTeacherExtraHomeworkDetailV2(queryInfo));
+    }
+
+    @ApiOperation(value = "获取进度评测列表")
+    @PostMapping("queryLessonExamination")
+    public HttpResponseResult<PageInfo<LessonExaminationResultDto>>
+    queryLessonExamination(@RequestBody LessonExaminationQueryInfo queryInfo, @RequestHeader Integer coopId) {
+        //获取合作单位关联的所有乐团列表
+        List<String> musicGroupIds = musicGroupDao.findNormalByCooperationId(coopId);
+        if (CollectionUtils.isEmpty(musicGroupIds)) {
+            return succeed(new PageInfo<>());
+        }
+        queryInfo.setMusicGroupIds(musicGroupIds);
+        return succeed(lessonExaminationService.queryPage(queryInfo));
+    }
+
+    @ApiOperation(value = "获取单个进度评测")
+    @GetMapping("getOneLessonExamination")
+    public HttpResponseResult<LessonExaminationResultDto> queryPage(Long lessonExaminationId) {
+        LessonExaminationQueryInfo queryInfo = new LessonExaminationQueryInfo();
+        queryInfo.setLessonExaminationId(lessonExaminationId);
+        LessonExaminationResultDto resultDto = lessonExaminationService.queryPage(queryInfo).getRows().get(0);
+        return succeed(resultDto);
+    }
+
+    @ApiOperation(value = "获取进度评测学员列表")
+    @PostMapping("queryLessonExaminationPage")
+    public HttpResponseResult<PageInfo<StudentLessonExaminationDto>> queryLessonExaminationPage(@RequestBody StudentLessonExaminationQueryInfo queryInfo) {
+        return succeed(studentLessonExaminationService.queryPage(queryInfo));
+    }
+
+    @ApiOperation(value = "获取学员评测详情列表")
+    @PostMapping("queryStudentLessonExaminationDetail")
+    public HttpResponseResult<List<StudentLessonExaminationDetailDto>> queryStudentLessonExaminationDetail(@RequestBody StudentLessonExaminationQueryDto query) {
+        return succeed(studentLessonExaminationDetailService.queryAll(query));
+    }
+
+    @ApiOperation(value = "学员请假列表")
+    @PostMapping("queryStudentLeave")
+    public HttpResponseResult<PageInfo<CourseHomeworkWrapper.StudentLeaveResult>>
+    queryStudentLeave(@RequestBody CourseHomeworkWrapper.StudentLeaveQuery queryInfo, @RequestHeader Integer coopId) {
+        if(StringUtils.isEmpty(queryInfo.getMusicGroupIds())){
+            List<String> musicGroupIds = musicGroupDao.findNormalByCooperationId(coopId);
+            if (CollectionUtils.isEmpty(musicGroupIds)) {
+                return succeed(new PageInfo<>());
+            }
+            queryInfo.setMusicGroupIds(musicGroupIds.stream().collect(Collectors.joining(",")));
+        }
+        return succeed(studentAttendanceService.queryStudentLeave(queryInfo));
+    }
 
     @ApiOperation(value = "获取课后评测学员列表")
     @PostMapping("queryLessonStudent")
@@ -82,5 +174,61 @@ public class SchoolStudentHomeworkController extends BaseController {
             return succeed(studentCourseHomeworkService.findExtracurricularExercisesDetailPublicV2(courseScheduleId, userId, type));
         }
     }
+
+    @ApiOperation(value = "根据课程计划获取需要交作业的学生声部-公用")
+    @PostMapping("/findCourseStudentsSubjectPublic/v2")
+    public HttpResponseResult<List<Subject>> findCourseStudentsSubjectPublicV2(@Validated @RequestBody StudentLessonTrainingDetailWrapper.StudentLessonTrainingQuery query){
+        List<StudentCourseHomework> studentCourseHomeworkByCourseV2;
+        if(ELessonTrainingType.HOMEWORK.equals(query.getType())){
+            if (Objects.isNull(query.getCourseScheduleId())) {
+                throw new BizException("请指定课程");
+            }
+            studentCourseHomeworkByCourseV2 = studentCourseHomeworkService.findStudentCourseHomeworkByCourseV2(
+                    query);
+        }else{
+            studentCourseHomeworkByCourseV2 = studentCourseHomeworkService.findExtraExerciseStudentsV2(query);
+        }
+
+        if (org.springframework.util.CollectionUtils.isEmpty(studentCourseHomeworkByCourseV2)) {
+            return succeed(new ArrayList<>());
+        }
+        // 获取声部
+        List<Integer> collect = studentCourseHomeworkByCourseV2.stream().map(StudentCourseHomework::getSubjectId).collect(
+                Collectors.toList());
+
+        return succeed(subjectService.findBySubjectByIdList(collect));
+
+    }
+
+    @ApiOperation(value = "获取作业详情")
+    @GetMapping(value = "/findCourseHomeworkDetail")
+    public HttpResponseResult<CourseHomeworkWrapper.CourseHomeworkList> findCourseHomeworkDetail(Integer courseScheduleId,ELessonTrainingType type){
+        if (ELessonTrainingType.HOMEWORK.equals(type)) {
+            return succeed(courseHomeworkService.findCourseHomeworkDetail(courseScheduleId));
+        } else {
+            return succeed(courseHomeworkService.findCourseExtraHomeworkDetail(courseScheduleId));
+        }
+    }
+
+    @ApiOperation(value = "根据课程计划获取需要交作业的学生统计")
+    @PostMapping("/findCourseStudentsPublicSubject/v2")
+    public HttpResponseResult<CourseHomeworkWrapper.StudentHomeworkRecordStat> findCourseStudentsPublicSubjectV2(@Validated @RequestBody StudentLessonTrainingDetailWrapper.StudentLessonTrainingQuery query){
+        List<StudentCourseHomework> list;
+        if(ELessonTrainingType.HOMEWORK.equals(query.getType())){
+            if (Objects.isNull(query.getCourseScheduleId())) {
+                throw new BizException("请指定课程");
+            }
+            list =  (studentCourseHomeworkService.findStudentCourseHomeworkByCourseV2(query));
+        }else{
+            list =  (studentCourseHomeworkService.findExtraExerciseStudentsV2(query));
+        }
+
+        CourseHomeworkWrapper.StudentHomeworkRecordStat stat = new CourseHomeworkWrapper.StudentHomeworkRecordStat();
+        stat.setAllNum(list.size());
+        stat.setFinishNum((int) list.stream().filter(StudentCourseHomework::getFinishFlag).count());
+        stat.setUnFinishNum(stat.getAllNum()-stat.getFinishNum());
+        stat.setStudentCourseHomeworkList(list);
+        return succeed(stat);
+    }
 }
 

+ 36 - 0
mec-application/src/main/resources/exportColumnMapper.ini

@@ -365,3 +365,39 @@ fieldColumns = ["organName","studentId","studentName","createTime","time","amoun
 [乐团梯队数据导出]
 headColumns = ["乐团","长笛","单簧管","萨克斯","小号","圆号","长号","上低音号","大号","小军鼓","合计"]
 fieldColumns = ["musicGroupName","flute","clarinet","saxophone","trumpet","horn","trombone","euphonium","tuba","snareDrum","total"]
+
+[乐团未排课时长]
+headColumns = ["分部","乐团名称","乐团编号","学员编号","学员姓名","课堂课","综合课","基础技能课","基础技能课(线上)","合奏课","单技课","集训合奏课","集训单技课"]
+fieldColumns = ["organName","musicGroupName","musicGroupId","studentId","studentName","classroom","comprehensive","high","highOnline","mix","single","trainingMix","trainingSingle"]
+
+[云教练待激活明细]
+headColumns = ["分部","学员编号","学员姓名","手机号","学员声部","云教练类型","数量","缴费金额(元)","状态","取消原因","操作人","操作时间","获得资格时间"]
+fieldColumns = ["organName","studentId","name","phone","subjectName","type.msg","time","amount","status == 1 ? '待激活':'已取消'","cancelReason","operatorName","operateTime","createTime"]
+
+[平衡关系-乐团课]
+headColumns = ["分部","乐团名称","乐团编号","班级名称","班级类型","班级编号","课程类型","剩余课次","剩余课次课酬","剩余被合并课次","剩余被合并课次课酬","已上课次","已上课次课酬","已上被合并课次","已上被合并课次课酬","当月新增","当月新增课酬","当月被合并新增","当月被合并新增课酬","当月消耗","当月消耗课酬","当月被合并消耗","当月被合并消耗课酬"]
+fieldColumns = ["organName","musicGroupName","musicGroupId","className","classType","classId","courseType","surplusCourse","surplusCourseReward","surplusMergedCourse","surplusMergedCourseReward","alreadyCourse","alreadyCourseReward","alreadyMergedCourse","alreadyMergedCourseReward","currentMonthAdd","currentMonthAddReward","currentMonthMergedAdd","currentMonthMergedAddReward","currentMonthConsume","currentMonthConsumeReward","currentMonthMergedConsume","currentMonthMergedConsumeReward"]
+
+[平衡关系-VIP已排课]
+headColumns = ["分部","学员姓名","学员编号","课程类型","当月剩余课时","当月已上课时","当月消耗课时","当月新增课时"]
+fieldColumns = ["organName","studentName","studentId","courseType","surplusCourse","alreadyCourse","consumeCourse","addCourse"]
+
+[平衡关系-VIP未排课]
+headColumns = ["分部","学员姓名","学员编号","课程类型","未排课时","当月新增课时"]
+fieldColumns = ["organName","studentName","studentId","courseType","noCourse","addCourse"]
+
+[平衡关系-缴费项目课时明细]
+headColumns = ["分部","乐团名称","乐团编号","缴费批次号","缴费收费金额","学员编号","课堂课","综合课","基础技能课","线上基础技能课","合奏课","单技课","集训合奏课","集训单技课"]
+fieldColumns = ["organName","musicGroupName","musicGroupId","paymentBatchNo","paymentAmount","studentId","classroom","comprehensive","high","highOnline","mix","single","trainingMix","trainingSingle"]
+
+[平衡关系-学员情况总表]
+headColumns = ["分部","进行中乐团数","当月在读学员总数","当月新增学员","当月退团学员"]
+fieldColumns = ["organName","musicGroupCount","currentMonthStudentCount","currentMonthAddStudentCount","currentMonthQuitStudentCount"]
+
+[平衡关系(分表)-乐团在读学员]
+headColumns = ["分部","乐团编号","乐团名称","学员编号","学员名称","合作单位名称"]
+fieldColumns = ["organName","musicGroupId","musicGroupName","studentId","studentName","coopName"]
+
+[平衡关系(分表)-乐团退团学员]
+headColumns = ["分部","乐团编号","乐团名称","学员编号","学员名称"]
+fieldColumns = ["organName","musicGroupId","musicGroupName","studentId","studentName"]

+ 3 - 0
mec-application/src/main/resources/logback-spring.xml

@@ -117,6 +117,9 @@
             <appender-ref ref="file"/>
             <appender-ref ref="plumelog"/>
         </root>
+        <Logger name="org.redisson" level="INFO" additivity="false">
+            <appender-ref ref="file" level="INFO" />
+        </Logger>
     </springProfile>
     <!--生产环境:输出到文件 -->
     <springProfile name="pre">

+ 20 - 7
mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/client/SysUserFeignService.java

@@ -1,18 +1,19 @@
 package com.ym.mec.auth.api.client;
 
-import java.util.List;
-
+import com.dayaedu.cbs.openfeign.wrapper.qrcode.CbsQrCodeScanWrapper;
+import com.ym.mec.auth.api.client.fallback.SysUserFeignServiceFallback;
 import com.ym.mec.auth.api.dto.SysUserQueryInfo;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.common.config.FeignConfiguration;
+import com.ym.mec.common.entity.HttpResponseResult;
 import io.swagger.annotations.ApiOperation;
+import org.json.JSONObject;
 import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.context.annotation.Lazy;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
 
-import com.ym.mec.auth.api.client.fallback.SysUserFeignServiceFallback;
-import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.common.config.FeignConfiguration;
-import com.ym.mec.common.entity.HttpResponseResult;
+import java.util.List;
+import java.util.Map;
 
 @FeignClient(contextId = "sysUserFeignService", name = "auth-server", configuration = { FeignConfiguration.class }, fallback = SysUserFeignServiceFallback.class)
 public interface SysUserFeignService {
@@ -52,4 +53,16 @@ public interface SysUserFeignService {
 
 	@PostMapping(value = "user/list")
 	HttpResponseResult<List<SysUser>> page(@RequestBody SysUserQueryInfo queryInfo);
+
+	@PostMapping(value = "open/qrcode/userInfo")
+	CbsQrCodeScanWrapper.UserInfo userInfo(@RequestBody CbsQrCodeScanWrapper.QrCodeScanUserInfoReq req);
+
+	@PostMapping(value = "open/qrcode/login")
+	CbsQrCodeScanWrapper.QrCodeScanToken login(@RequestBody CbsQrCodeScanWrapper.QrCodeScanReq req);
+
+	@PostMapping(value = "smsLogin")
+	HttpResponseResult<Map<String,Object>> smsLogin(@RequestParam("phone")String phone,
+													@RequestParam("clientId")String clientId,
+													@RequestParam("clientType")String clientType,
+													@RequestParam("clientSecret")String clientSecret);
 }

+ 26 - 5
mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/client/fallback/SysUserFeignServiceFallback.java

@@ -1,13 +1,15 @@
 package com.ym.mec.auth.api.client.fallback;
 
-import java.util.List;
-
-import com.ym.mec.auth.api.dto.SysUserQueryInfo;
-import org.springframework.stereotype.Component;
-
+import com.dayaedu.cbs.openfeign.wrapper.qrcode.CbsQrCodeScanWrapper;
 import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.dto.SysUserQueryInfo;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.common.entity.HttpResponseResult;
+import org.json.JSONObject;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+import java.util.Map;
 
 //@Component
 public class SysUserFeignServiceFallback implements SysUserFeignService {
@@ -60,4 +62,23 @@ public class SysUserFeignServiceFallback implements SysUserFeignService {
 	public HttpResponseResult<List<SysUser>> page(SysUserQueryInfo queryInfo) {
 		return null;
 	}
+
+	@Override
+	public CbsQrCodeScanWrapper.UserInfo userInfo(CbsQrCodeScanWrapper.QrCodeScanUserInfoReq req) {
+		return null;
+	}
+
+	@Override
+	public CbsQrCodeScanWrapper.QrCodeScanToken login(CbsQrCodeScanWrapper.QrCodeScanReq req) {
+		return null;
+	}
+
+	@Override
+	public HttpResponseResult<Map<String,Object>> smsLogin(@RequestParam("phone")String phone,
+														   @RequestParam("clientId")String clientId,
+														   @RequestParam("clientType")String clientType,
+														   @RequestParam("clientSecret")String clientSecret) {
+		return null;
+	}
+
 }

+ 1 - 0
mec-auth/mec-auth-server/pom.xml

@@ -19,6 +19,7 @@
 	</properties>
 
 	<dependencies>
+
 		<dependency>
 			<groupId>org.springframework.cloud</groupId>
 			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>

+ 2 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/config/ResourceServerConfig.java

@@ -27,7 +27,8 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
         http.csrf().disable().exceptionHandling().accessDeniedHandler(baseAccessDeniedHandler).authenticationEntryPoint(baseAuthenticationEntryPoint).and()
                 .authorizeRequests().antMatchers(
                         "/task/**", "/user/updatePassword", "/user/noAuth/queryUserByPhone",
-                        "/user/queryUserByPhone", "/user/queryClient", "/user/add", "/user/queryUserById/*",
+                        "/user/queryUserByPhone", "/user/queryClient", "/user/add",
+                        "/user/queryUserById/*","/open/**",
                         "/queryUserInfo","/api/queryUserInfo").hasIpAddress("0.0.0.0/0")
                 .anyRequest().authenticated().and().httpBasic();
     }

+ 2 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/config/WebMvcConfig.java

@@ -38,7 +38,8 @@ public class WebMvcConfig implements WebMvcConfigurer {
 	public void addInterceptors(InterceptorRegistry registry) {
 		registry.addInterceptor(tenantInterceptor).addPathPatterns("/**").
 				excludePathPatterns("/queryUserInfo","/user/updatePassword","/user/queryUserByPhone","/user/add",
-						"user/queryUserById/*","/role/queryRoleCodeListByUserId","/user/updateSysUser","/user/open/*");
+						"user/queryUserById/*","/role/queryRoleCodeListByUserId",
+						"/user/updateSysUser","/user/open/*","/open/qrcode/*");
 		registry.addInterceptor(operationLogInterceptor).addPathPatterns("/userDevice/unbind").excludePathPatterns("/*");
 	}
 	

+ 1 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/handler/BaseAuthenticationSuccessEventHandler.java

@@ -128,7 +128,7 @@ public class BaseAuthenticationSuccessEventHandler extends SavedRequestAwareAuth
 		sysUserLoginLogService.insert(sysUserLoginLog);
 		
 		try {
-			String clientId = request.getParameter("clientId").replace("QR_", "");
+			String clientId = request.getParameter("clientId");
 			String clientSecret = request.getParameter("clientSecret");
 			if (clientId == null || clientSecret == null) {
 				throw new UnapprovedClientAuthenticationException("请求头中client信息为空");

+ 4 - 4
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/PhoneAuthenticationProvider.java

@@ -59,7 +59,7 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
         String clientId = loginEntity.getClientId();
 
         // 验证码验证
-        if (!clientId.startsWith("QR_") && !smsCodeService.verifyValidCode(phone, smsCode)) {
+        if (!loginEntity.getClientId().toLowerCase().startsWith("qr_") && !smsCodeService.verifyValidCode(phone, smsCode)) {
             throw new BadCredentialsException("验证码校验失败");
         }
 
@@ -71,7 +71,7 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
 
         SysUserInfo userInfo;
 
-        if (clientId.startsWith("QR_")) {
+        /*if (clientId.startsWith("QR_")) {
             Object data = redisCache.get(loginEntity.getPhone());
             if (data == null) {
                 throw new LockedException("用户不存在");
@@ -86,8 +86,8 @@ public class PhoneAuthenticationProvider extends AbstractAuthenticationProvider
                 }
             }
         } else {
-            userInfo = sysUserService.queryUserInfoByPhone(phone);
-        }
+        }*/
+        userInfo = sysUserService.queryUserInfoByPhone(phone);
 
 		if (userInfo == null) {
 

+ 1 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/service/CustomAuthenticationKeyGenerator.java

@@ -27,7 +27,7 @@ public class CustomAuthenticationKeyGenerator extends DefaultAuthenticationKeyGe
 			values.put(USERNAME, StringUtils.substringAfter(authentication.getName(), ":"));
 		}
 		String clientId = authorizationRequest.getClientId();
-		clientId = clientId.replace("QR_", "");
+//		clientId = clientId.replace("QR_", "");
 		values.put(CLIENT_ID, clientId);
 		if (authorizationRequest.getScope() != null) {
 			values.put(SCOPE, OAuth2Utils.formatParameterList(new TreeSet<String>(authorizationRequest.getScope())));

+ 16 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/service/CustomTokenServices.java

@@ -115,6 +115,20 @@ public class CustomTokenServices implements AuthorizationServerTokenServices, Re
 
 	}
 
+	@Transactional
+	public OAuth2AccessToken newAccessToken(OAuth2Authentication authentication) throws AuthenticationException {
+		OAuth2RefreshToken refreshToken = createRefreshToken(authentication);
+		OAuth2AccessToken accessToken = createAccessToken(authentication, refreshToken);
+		tokenStore.storeAccessToken(accessToken, authentication);
+		// In case it was modified
+		refreshToken = accessToken.getRefreshToken();
+		if (refreshToken != null) {
+			tokenStore.storeRefreshToken(refreshToken, authentication);
+		}
+		return accessToken;
+
+	}
+
 	@Transactional(noRollbackFor={InvalidTokenException.class, InvalidGrantException.class})
 	public OAuth2AccessToken refreshAccessToken(String refreshTokenValue, TokenRequest tokenRequest)
 			throws AuthenticationException {
@@ -220,7 +234,8 @@ public class CustomTokenServices implements AuthorizationServerTokenServices, Re
 
 		OAuth2Authentication authentication = tokenStore.readAuthentication(accessToken);
 
-		if (StringUtils.equalsIgnoreCase("system", authentication.getOAuth2Request().getClientId())) {
+		if (StringUtils.equalsIgnoreCase("system", authentication.getOAuth2Request().getClientId())
+		|| StringUtils.equalsIgnoreCase("qr_teacher", authentication.getOAuth2Request().getClientId())) {
 			int validitySeconds = getAccessTokenValiditySeconds(authentication.getOAuth2Request());
 			if (validitySeconds > 0) {
 				oAuth2AccessToken.setExpiration(new Date(System.currentTimeMillis() + (validitySeconds * 1000L)));

+ 57 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/CbsQrCodeScanServiceImpl.java

@@ -0,0 +1,57 @@
+package com.ym.mec.auth.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.dayaedu.cbs.openfeign.wrapper.qrcode.CbsQrCodeScanWrapper;
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.auth.core.service.CustomTokenServices;
+import com.ym.mec.auth.service.SysUserService;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.exception.BizException;
+import org.springframework.http.HttpStatus;
+import org.springframework.security.oauth2.provider.OAuth2Authentication;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Map;
+import java.util.UUID;
+
+@Service
+public class CbsQrCodeScanServiceImpl{
+
+    @Resource
+    private CustomTokenServices customTokenServices;
+    @Resource
+    private SysUserService sysUserService;
+    @Resource
+    private SysUserFeignService sysUserFeignService;
+
+    public CbsQrCodeScanWrapper.UserInfo userInfo(CbsQrCodeScanWrapper.QrCodeScanUserInfoReq req) {
+        CbsQrCodeScanWrapper.UserInfo userInfo = new CbsQrCodeScanWrapper.UserInfo();
+        userInfo.setUsername(customTokenServices.loadAuthentication(req.getToken()).getName().split(":")[1]);
+        userInfo.setClientTypes("TEACHER");
+        return userInfo;
+    }
+
+    public CbsQrCodeScanWrapper.QrCodeScanToken login(CbsQrCodeScanWrapper.QrCodeScanReq req) {
+        //校验是否过期
+        OAuth2Authentication auth2Authentication = customTokenServices.loadAuthentication(req.getPassword());
+        String phone = auth2Authentication.getName().split(":")[1];
+        SysUser sysUser = sysUserService.queryByPhone(phone);
+        if (sysUser == null) {
+            throw new BizException(HttpStatus.UNAUTHORIZED.value(), "用户不存在");
+        }
+        //调用登陆接口
+        HttpResponseResult<Map<String,Object>> result = sysUserFeignService.smsLogin(phone, "qr_teacher", UUID.randomUUID().toString(), "qr_teacher");
+        if (result != null){
+            if(result.getCode() != 200){
+                throw new BizException("扫码登陆失败", result.getMsg());
+            }
+            CbsQrCodeScanWrapper.QrCodeScanToken qrCodeScanToken = new CbsQrCodeScanWrapper.QrCodeScanToken();
+            JSONObject jsonObject = JSONObject.parseObject(JSONObject.toJSONString(result.getData().get("authentication")));
+            qrCodeScanToken.setTokenData(jsonObject.getString("access_token"));
+            return qrCodeScanToken;
+        }
+        throw new BizException("扫码登陆失败", "调用登陆接口失败");
+    }
+}

+ 1 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysUserServiceImpl.java

@@ -69,7 +69,7 @@ public class SysUserServiceImpl extends BaseServiceImpl<Integer, SysUser> implem
 
     @Override
     public SysUserInfo queryUserInfoByUsername(String username) {
-        return getSysUserInfo(queryByUsername(username));
+        return getSysUserInfo(queryByPhone(username));
     }
 
     @Override

+ 34 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/ExceptionLogController.java

@@ -0,0 +1,34 @@
+package com.ym.mec.auth.web.controller;
+
+import com.dayaedu.cbs.common.enums.EAppKey;
+import com.dayaedu.cbs.openfeign.client.SysExceptionLogFeignClientService;
+import com.dayaedu.cbs.openfeign.wrapper.courseware.SysExceptionLogVo;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import org.apache.commons.collections.CollectionUtils;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RestController
+public class ExceptionLogController extends BaseController {
+
+	@Resource
+	private SysExceptionLogFeignClientService sysExceptionLogFeignClientService;
+
+	@PostMapping("sysExceptionLog/save")
+	public HttpResponseResult save(@RequestBody List<SysExceptionLogVo.SysExceptionLog> sysExceptionLogVos) {
+		if(CollectionUtils.isEmpty(sysExceptionLogVos)){
+			return succeed();
+		}
+		sysExceptionLogVos.forEach(sysExceptionLogVo -> {
+			sysExceptionLogVo.setAppKey(EAppKey.GYM);
+		});
+		sysExceptionLogFeignClientService.add(sysExceptionLogVos).feignData();
+		return succeed();
+	}
+
+}

+ 25 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/OpenMutualTLSController.java

@@ -0,0 +1,25 @@
+package com.ym.mec.auth.web.controller;
+
+import com.microsvc.toolkit.common.response.template.R;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("/open/mutualTLS")
+@Api(tags = "HTTPS双向认证")
+public class OpenMutualTLSController {
+
+    @ApiOperation(value = "HTTPS双向认证查询")
+    @GetMapping(value = "query")
+    public R<Boolean> queryByParamNameList() {
+        return R.from(true);
+    }
+
+}

+ 34 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/OpenQrLoginController.java

@@ -0,0 +1,34 @@
+package com.ym.mec.auth.web.controller;
+
+import com.dayaedu.cbs.openfeign.wrapper.qrcode.CbsQrCodeScanWrapper;
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.service.impl.CbsQrCodeScanServiceImpl;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@Api(tags = "扫码登陆")
+@RequestMapping(value = "/open")
+public class OpenQrLoginController {
+
+	@Resource
+	private CbsQrCodeScanServiceImpl cbsQrCodeScanService;
+
+	@ApiOperation(value = "获取用户信息")
+	@PostMapping(value = "/qrcode/userInfo")
+	public CbsQrCodeScanWrapper.UserInfo userInfo(@RequestBody CbsQrCodeScanWrapper.QrCodeScanUserInfoReq req) {
+		return cbsQrCodeScanService.userInfo(req);
+	}
+
+	@ApiOperation(value = "生成token")
+	@PostMapping(value = "/qrcode/login")
+	public CbsQrCodeScanWrapper.QrCodeScanToken login(@RequestBody CbsQrCodeScanWrapper.QrCodeScanReq req) {
+		return cbsQrCodeScanService.login(req);
+	}
+}

+ 1 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/TokenController.java

@@ -261,7 +261,7 @@ public class TokenController extends BaseController {
 		return succeed("退出成功");
 	}
 
-	@GetMapping(value = "/checkToken",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
+	@GetMapping(value = "/checkToken")
 	@ApiOperation(value = "检查token")
 	public HttpResponseResult<Object> checkToken(HttpServletRequest request) throws IOException {
 

+ 2 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/UserController.java

@@ -1,6 +1,8 @@
 package com.ym.mec.auth.web.controller;
 
 import com.alibaba.fastjson.JSON;
+import com.dayaedu.cbs.openfeign.service.CbsQrCodeScanService;
+import com.dayaedu.cbs.openfeign.wrapper.qrcode.CbsQrCodeScanWrapper;
 import com.huifu.adapay.core.util.StringUtil;
 import com.ym.mec.auth.api.dto.SysUserInfo;
 import com.ym.mec.auth.api.dto.SysUserQueryInfo;
@@ -55,7 +57,6 @@ public class UserController extends BaseController {
 	private IdGeneratorService smsCodeService;
 	@Autowired
 	private TenantInfoService tenantInfoService;
-
 	@Autowired
 	private RedisCache<String,Object> redisCache;
 

+ 2 - 2
mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysUserMapper.xml

@@ -197,11 +197,11 @@
 	</select>
 
     <select id="queryByPhone" resultMap="SysUser">
-		select * from sys_user where phone_ = #{phone} OR username_ = #{phone} LIMIT 1
+		select * from sys_user where phone_ = #{phone} LIMIT 1
 	</select>
 
     <select id="queryLockByPhone" resultMap="SysUser">
-		select * from sys_user where phone_ = #{phone} OR username_ = #{phone} LIMIT 1 FOR UPDATE
+		select * from sys_user where phone_ = #{phone} LIMIT 1 FOR UPDATE
 	</select>
     <resultMap id="ImUserModel" type="com.ym.mec.common.entity.ImUserModel">
         <result column="id_" property="id"/>

+ 3 - 0
mec-auth/mec-auth-server/src/main/resources/logback-spring.xml

@@ -44,6 +44,9 @@
 			<appender-ref ref="plumelog" />
 			<appender-ref ref="file" />
 		</root>
+		<Logger name="org.redisson" level="INFO" additivity="false">
+			<appender-ref ref="file" level="INFO" />
+		</Logger>
 	</springProfile>
 	<!--生产环境:输出到文件 -->
 	<springProfile name="pre">

+ 5 - 0
mec-auth/pom.xml

@@ -15,6 +15,11 @@
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 	</properties>
 	<dependencies>
+		<dependency>
+			<groupId>com.dayaedu.cbs.openfeign</groupId>
+			<artifactId>dayaedu-openfeign-api</artifactId>
+			<version>1.0.2</version>
+		</dependency>
 		<!-- 引用Mybatis 和 Mysql驱动开始 -->
 		<dependency>
 			<groupId>org.mybatis.spring.boot</groupId>

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/AppVersionInfoDao.java

@@ -18,4 +18,5 @@ public interface AppVersionInfoDao extends BaseDAO<Integer, AppVersionInfo> {
 
 	List<AppVersionInfo> queryLatestByPlatform(@Param("platform") String platform, @Param("status") String status);
 
+    AppVersionInfo checkForceUpdate(@Param("platform") String platform, @Param("localVersion") String localVersion);
 }

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java

@@ -6,6 +6,7 @@ import java.util.Set;
 
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.CourseScheduleStatistics;
+import com.ym.mec.biz.dal.entity.MusicGroup;
 import org.apache.ibatis.annotations.Param;
 
 import com.ym.mec.biz.dal.entity.ClassGroup;
@@ -873,4 +874,10 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
     void modifyStudentNum(@Param("classGroupId") Integer classGroupId, @Param("num") int num);
 
     boolean checkStudentNum(@Param("classGroupId") Integer classGroupId);
+
+    //获取老师关联的乐团
+    List<MusicGroup> queryTeacherMusicGroup(@Param("teacherId") Integer teacherId);
+
+    //获取老师关联的乐团下的班级
+    List<ClassGroup> queryTeacherMusicClass(@Param("musicGroupId") String musicGroupId, @Param("teacherId") Integer teacherId);
 }

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherOrderDao.java

@@ -128,4 +128,6 @@ public interface CloudTeacherOrderDao extends BaseDAO<Long, CloudTeacherOrder> {
     List<CloudTeacherOrder> queryCloudTeacherOrderByIds(@Param("ids") List<Integer> ids);
 
     List<CloudCoachActivationDetailsDto> exportCloudCoachActivationDetails(@Param("month") String month, @Param("organId") String organId);
+
+    List<CloudCoachActivationDetailsDto> exportMusicGroupNoCourse(@Param("organId") String organId);
 }

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -2089,4 +2089,9 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
     List<CourseSchedule> getNotStartOnlineNoLive(@Param("beforeTime") Integer beforeTime, @Param("tenantInfoId") Integer tenantInfoId);
 
     List<CourseSchedule> getEndTimeBetweenYesterdayAndNow();
+
+    void configCourseware(@Param("courseId") Long courseId, @Param("coursewareDetailId") String coursewareDetailId);
+
+    //获取最近的一节线下课
+    CourseScheduleDto getRecentCourseSchedule(@Param("userId") Integer userId, @Param("courseId") Long courseId);
 }

+ 0 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java

@@ -6,7 +6,6 @@ import com.ym.mec.biz.dal.entity.CourseScheduleStudentPayment;
 import com.ym.mec.biz.dal.entity.CourseScheduleStudentPaymentDto;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.common.dal.BaseDAO;
-
 import org.apache.ibatis.annotations.Param;
 
 import java.math.BigDecimal;
@@ -585,10 +584,6 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
     List<Mapper> queryUserMusicGroupCourseNumByClassTime(@Param("groupType") GroupType groupType, @Param("musicGroupIds") Set<String> musicGroupIds,
 			@Param("userId") Integer userId, @Param("startDate") Date startDate, @Param("endDate") Date endDate);
 
-	Boolean hasStudentMusicTheoryCourseInfo(@Param("organId") String organId, @Param("tenantId") Integer tenantId, @Param("groupType") String groupType);
-
-    List<ExportStudentCourseInfoDto> queryStudentCourseInfo(@Param("organId") String organId, @Param("tenantId") Integer tenantId, @Param("groupType") String groupType);
-
     /**
     * @description: 获取学员第一个课程组编号
      * @param groupType

+ 38 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ExportDao.java

@@ -0,0 +1,38 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.dto.ExportStudentCourseInfoDto;
+import com.ym.mec.biz.dal.dto.ExportWrapper;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface ExportDao {
+
+    //平衡关系-乐团课
+    List<ExportWrapper.ExportBalancedRelationshipMusicCourse> exportBalancedRelationshipMusicCourse(@Param("month") String month, @Param("organIds") String organIds);
+
+    //平衡关系-VIP已排课
+    List<ExportWrapper.ExportBalancedRelationshipVipCourse> exportBalancedRelationshipVipCourse(@Param("month") String month, @Param("organIds") String organIds);
+
+    //平衡关系-VIP未排课
+    List<ExportWrapper.ExportBalancedRelationshipVipNoCourse> exportBalancedRelationshipVipNoCourse(@Param("month") String month, @Param("organIds") String organIds);
+
+    //平衡关系-乐团课剩余时长
+    List<ExportWrapper.ExportBalancedRelationshipMusicSubCourse> exportBalancedRelationshipMusicSubCourse(@Param("startMonth") String startMonth, @Param("endMonth") String endMonth, @Param("organIds") String organIds);
+
+    //平衡关系-学员情况总表
+    List<ExportWrapper.ExportBalancedRelationshipStudentInfo> exportBalancedRelationshipStudentInfo(@Param("month") String month, @Param("organIds") String organIds);
+
+    //平衡关系(分表)-乐团在读学员
+    List<ExportWrapper.ExportBalancedRelationshipStudentNormalDetail> exportBalancedRelationshipStudentNormalDetail( @Param("organIds") String organIds);
+
+    //平衡关系(分表)-乐团退团学员
+    List<ExportWrapper.ExportBalancedRelationshipStudentQuitDetail> exportBalancedRelationshipStudentQuitDetail(@Param("month") String month, @Param("organIds") String organIds);
+
+    //小组课学员课程导出
+    Boolean hasStudentMusicTheoryCourseInfo(@Param("organId") String organId, @Param("tenantId") Integer tenantId, @Param("groupType") String groupType);
+
+    //小组课学员课程导出
+    List<ExportStudentCourseInfoDto> queryStudentCourseInfo(@Param("organId") String organId, @Param("tenantId") Integer tenantId, @Param("groupType") String groupType);
+}

+ 3 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ExtracurricularExercisesReplyDao.java

@@ -1,11 +1,8 @@
 package com.ym.mec.biz.dal.dao;
 
-import com.ym.mec.biz.dal.dto.EduHomeworkCardDto;
-import com.ym.mec.biz.dal.dto.ExtraExerciseStudentsDto;
-import com.ym.mec.biz.dal.dto.StudentServiceDetailDto;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercises;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
-import com.ym.mec.biz.dal.dto.StudentServiceHomeworkDto;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
@@ -36,6 +33,8 @@ public interface ExtracurricularExercisesReplyDao extends BaseDAO<Long, Extracur
     List<ExtraExerciseStudentsDto> findExtraExerciseStudents(@Param("extraExerciseId") Long extraExerciseId,
                                                              @Param("studentName") String studentName);
 
+    List<ExtraExerciseStudentsDto> findExtraExerciseStudent(@Param("query") StudentLessonTrainingDetailWrapper.StudentLessonTrainingQuery query);
+
     /**
      * @describe 根据课外作业获取对应的学生列表
      * @author Joburgess

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java

@@ -412,6 +412,8 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
      */
     List<MusicGroup> findByCooperationId(@Param("cooperationId") Integer cooperationOrganId);
 
+    List<MusicGroup> findByCoopIdAndOrganId(@Param("organIds") String organIds, @Param("coopId") String coopId);
+
     /**
      * 批量修改乐团主管
      *

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentAttendanceDao.java

@@ -397,4 +397,8 @@ public interface StudentAttendanceDao extends BaseDAO<Long, StudentAttendance> {
     Integer getTruantStudentNum(Long courseScheduleId);
 
     Integer getStudentNumByStatus(@Param("courseScheduleId") Long courseScheduleId, @Param("status") StudentAttendanceStatusEnum studentAttendanceStatusEnum);
+
+    int countStudentLeave(Map<String, Object> params);
+
+    List<CourseHomeworkWrapper.StudentLeaveResult> queryStudentLeave(Map<String, Object> params);
 }

+ 21 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java

@@ -5,6 +5,7 @@ import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.entity.Subject;
+import com.ym.mec.biz.dal.page.CloudTeacherActiveWapper;
 import com.ym.mec.biz.dal.page.StudentCourseConsumerQueryInfo;
 import com.ym.mec.biz.dal.vo.TempCampUserTrainingSequenceVo;
 import com.ym.mec.biz.dal.wrapper.StudentWrapper;
@@ -352,6 +353,14 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
     List<CloudTeacherSumDto> queryCloudTeacherSumDetail(Map<String, Object> params);
 
     //统计训练时长
+    int countCloudTeacherSumDetail1(Map<String, Object> params);
+
+    //统计训练时长
+    List<CloudTeacherActiveWapper.Result> queryCloudTeacherSumDetail1(Map<String, Object> params);
+
+    CloudTeacherActiveWapper.Statistics cloudTeacherActiveStatistics(Map<String, Object> params);
+
+    //统计训练时长
     int countTeacherSum(@Param("queryInfo") StudentCourseConsumerQueryInfo queryInfo);
 
     //统计重复购买人数
@@ -388,4 +397,16 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
 
     //查询会员学员
     List<Integer> queryMemberStudent(@Param("memberFlag") Boolean memberFlag, @Param("studentIdList") List<Integer> studentIdList);
+
+    //指定学员中有已结束,且没有未开始的学员
+    List<Integer> queryHasEndVipStudent(@Param("studentIdList") List<Integer> studentIdList);
+
+    //指定学员中有未开始的学员
+    List<Integer> queryHasNotStartVipStudent(@Param("studentIdList") List<Integer> studentIdList);
+
+    //获取分部下学员列表
+    List<Integer> queryByOrganIds(@Param("organIds") String organIds);
+
+    //获取合作单位下学员列表
+    List<Integer> queryByCoopIds(@Param("coopId") Integer coopId);
 }

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentExtracurricularExercisesSituationDao.java

@@ -166,7 +166,8 @@ public interface StudentExtracurricularExercisesSituationDao extends BaseDAO<Lon
 
     List<Long> queryCourseIdByClassDate(@Param("firstDayOfMonth") Date firstDayOfMonth,
                                        @Param("lastDayOfMonth") Date lastDayOfMonth,
-                                       @Param("teacherId") Integer teacherId);
+                                       @Param("teacherId") Integer teacherId,
+                                        @Param("musicGroupIds") List<String> musicGroupIds);
 
     /**
      * 统计服务周期内可布置的作业和训练数量

+ 8 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java

@@ -288,12 +288,12 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
     List<Map<String, Integer>> countNormalNum(String musicGroupIds);
 
     /**
-     * 获取乐团在读人数
+     * 获取乐团在读学员列表
      *
      * @param musicGroupId
      * @return
      */
-    List<Integer> queryNormalUserList(String musicGroupId);
+    List<Integer> queryNormalUserList(@Param("musicGroupId") String musicGroupId);
 
     /**
      * 获取学员基本信息
@@ -771,4 +771,10 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
     void updateCourseFee(@Param("id") Long id, @Param("musicalFee") BigDecimal musicalFee);
 
     void batchUpdate(@Param("studentRegistrations") List<StudentRegistration> studentRegistrations);
+
+    //获取乐团在读学员列表
+    List<Integer> findNormalStu(@Param("musicGroupId") String musicGroupId, @Param("classGroupId") Integer classGroupId);
+
+    //获取指定学员中在读的学员
+    List<Integer> queryNormalUserByIds(@Param("studentIdList") List<Integer> studentIdList);
 }

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SubjectDao.java

@@ -173,4 +173,5 @@ public interface SubjectDao extends BaseDAO<Integer, Subject> {
 
     List<StudentSubjectDto> getSubjectByStudentId(@Param("studentIds") Set studentIds);
 
+    List<Subject> findByNames();
 }

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicCompareRecordDao.java

@@ -5,6 +5,7 @@ import com.ym.mec.biz.dal.entity.SysMusicCompareRecord;
 import com.ym.mec.biz.dal.entity.SysMusicCompareWeekData;
 import com.ym.mec.biz.dal.enums.HeardLevelEnum;
 import com.ym.mec.biz.dal.page.ExportCompareQueryInfo;
+import com.ym.mec.biz.dal.page.MusicCompareRecordWapper;
 import com.ym.mec.biz.dal.page.TeacherCloudTrainingQueryInfo;
 import com.ym.mec.common.dal.BaseDAO;
 
@@ -127,4 +128,8 @@ public interface SysMusicCompareRecordDao extends BaseDAO<Long, SysMusicCompareR
     Integer getUserTrainingTime(@Param("userId") Integer userId);
 
     List<SysMusicCompareRecord> getByIds(@Param("musicPracticeRecordIds") List<Long> musicPracticeRecordIds);
+
+    int countByStudent(Map<String, Object> params);
+
+    List<MusicCompareRecordWapper.Result> queryPageByStudent(Map<String, Object> params);
 }

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TempLittleArtistTrainingCampUserRelationDao.java

@@ -16,5 +16,7 @@ public interface TempLittleArtistTrainingCampUserRelationDao extends BaseMapper<
 
     int insertBatch(@Param("entities") List<TempLittleArtistTrainingCampUserRelation> entities);
 
+    //获取指定状态的训练营
+    List<TempLittleArtistTrainingCampUserRelation> queryByUserId(@Param("userId") Integer userId,@Param("state") String state);
 }
 

+ 64 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseHomeworkWrapper.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dto;
 
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.StudentCourseHomework;
 import com.ym.mec.biz.dal.enums.EHomeWorkStatus;
 import com.ym.mec.biz.dal.enums.ELessonTrainingType;
@@ -50,6 +51,9 @@ public class CourseHomeworkWrapper {
         @ApiModelProperty(value = "乐团id")
         private String musicGroupId;
 
+        @ApiModelProperty(value = "乐团id")
+        private List<String> musicGroupIds;
+
         @ApiModelProperty(value = "班级类型  SINGLE:声部班,MIX:合奏班")
         private String classType;
 
@@ -61,6 +65,66 @@ public class CourseHomeworkWrapper {
         private ELessonTrainingType type;
     }
 
+    @Data
+    @ApiModel(value = "学校端学员请假列表")
+    public static class StudentLeaveQuery extends QueryInfo {
+
+        @ApiModelProperty(value = "课程id")
+        private Integer courseScheduleId;
+
+        @ApiModelProperty(value = "班级id")
+        private Integer classGroupId;
+
+        @ApiModelProperty(value = "课程类型")
+        private String courseScheduleType;
+
+        @ApiModelProperty(value = "班级类型")
+        private String classGroupType;
+
+        @ApiModelProperty(value = "开始时间(年月日)",required = true)
+        private String startTime;
+
+        @ApiModelProperty(value = "结束时间(年月日)",required = true)
+        private String endTime;
+
+        @ApiModelProperty(value = "乐团id")
+        private String musicGroupIds;
+    }
+
+    @Data
+    @ApiModel(value = "学校端学员请假列表")
+    public static class StudentLeaveResult {
+        @ApiModelProperty(value = "上课时间")
+        private String classDate;
+
+        @ApiModelProperty(value = "上课开始时间")
+        private String startClassTime;
+
+        @ApiModelProperty(value = "上课结束时间")
+        private String endClassTime;
+
+        @ApiModelProperty(value = "请假时间")
+        private String leaveTime;
+
+        @ApiModelProperty(value = "班级名称")
+        private String classGroupName;
+
+        @ApiModelProperty(value = "课程类型")
+        private CourseSchedule.CourseScheduleType courseScheduleType;
+
+        @ApiModelProperty(value = "请假原因")
+        private String remark;
+
+        @ApiModelProperty(value = "学生姓名")
+        private String username;
+
+        @ApiModelProperty(value = "学生头像")
+        private String avatar;
+
+        @ApiModelProperty(value = "手机号")
+        private String phone;
+    }
+
 
 
     @Data

+ 12 - 80
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseTimeDto.java

@@ -3,18 +3,30 @@ package com.ym.mec.biz.dal.dto;
 import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
+import java.time.LocalDateTime;
+import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
 
+@Data
 public class CourseTimeDto {
 
 
     @ApiModelProperty(value = "课程类型", required = true)
     private CourseSchedule.CourseScheduleType courseType;
 
+    @ApiModelProperty(value = "开始排课时间(原来按周排课参数,从外层,提到内层)")
+    private Date courseCreateStartTime;
+
     @ApiModelProperty(value = "排课星期几")
     private Integer dayOfWeek;
+//    当前排课日期
+    private LocalDateTime calendar;
+
+    @ApiModelProperty(value = "间隔天数(默认7)")
+    private Integer intervalDays = 7;
 
     @ApiModelProperty(value = "开始排课日期,如果有值,则单独循环")
     private Date startDate;
@@ -43,22 +55,6 @@ public class CourseTimeDto {
     @ApiModelProperty(value = "课程老师设置", required = true)
     private List<ClassGroupTeacherMapper> classGroupTeacherMapperList;
 
-    public int getExpectCourseMinutes() {
-        return expectCourseMinutes;
-    }
-
-    public void setExpectCourseMinutes(int expectCourseMinutes) {
-        this.expectCourseMinutes = expectCourseMinutes;
-    }
-
-    public List<ClassGroupTeacherMapper> getClassGroupTeacherMapperList() {
-        return classGroupTeacherMapperList;
-    }
-
-    public void setClassGroupTeacherMapperList(List<ClassGroupTeacherMapper> classGroupTeacherMapperList) {
-        this.classGroupTeacherMapperList = classGroupTeacherMapperList;
-    }
-
     public Boolean getHoliday() {
         return isHoliday;
     }
@@ -66,68 +62,4 @@ public class CourseTimeDto {
     public void setHoliday(Boolean holiday) {
         isHoliday = holiday;
     }
-
-    public CourseSchedule.CourseScheduleType getCourseType() {
-        return courseType;
-    }
-
-    public void setCourseType(CourseSchedule.CourseScheduleType courseType) {
-        this.courseType = courseType;
-    }
-
-    public Date getStartDate() {
-        return startDate;
-    }
-
-    public void setStartDate(Date startDate) {
-        this.startDate = startDate;
-    }
-
-    public Date getEndDate() {
-        return endDate;
-    }
-
-    public void setEndDate(Date endDate) {
-        this.endDate = endDate;
-    }
-
-    public Integer getDayOfWeek() {
-        return dayOfWeek;
-    }
-
-    public void setDayOfWeek(Integer dayOfWeek) {
-        this.dayOfWeek = dayOfWeek;
-    }
-
-    public String getStartClassTime() {
-        return startClassTime;
-    }
-
-    public void setStartClassTime(String startClassTime) {
-        this.startClassTime = startClassTime;
-    }
-
-    public String getEndClassTime() {
-        return endClassTime;
-    }
-
-    public void setEndClassTime(String endClassTime) {
-        this.endClassTime = endClassTime;
-    }
-
-    public int getExpectCourseNum() {
-        return expectCourseNum;
-    }
-
-    public void setExpectCourseNum(int expectCourseNum) {
-        this.expectCourseNum = expectCourseNum;
-    }
-
-    public int getCourseNum() {
-        return courseNum;
-    }
-
-    public void setCourseNum(int courseNum) {
-        this.courseNum = courseNum;
-    }
 }

+ 305 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ExportWrapper.java

@@ -0,0 +1,305 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author zx
+ */
+@ApiModel(description = "导出对象")
+public class ExportWrapper {
+
+
+    @Data
+    @ApiModel(" AddStudentLessonTrainingDetail-练习内容")
+    public static class ExportMusicGroupNoCourseDto {
+        @ApiModelProperty("分部")
+        private String organName;
+
+        @ApiModelProperty("乐团名称")
+        private String musicGroupName;
+
+        @ApiModelProperty("乐团编号")
+        private String musicGroupId;
+
+        @ApiModelProperty("学员编号")
+        private String studentId;
+
+        @ApiModelProperty("学员姓名")
+        private String studentName;
+
+        @ApiModelProperty("课堂课")
+        private Integer classroom;
+
+        @ApiModelProperty("综合课")
+        private Integer comprehensive;
+
+        @ApiModelProperty("基础技能课")
+        private Integer high;
+
+        @ApiModelProperty("基础技能课(线上)")
+        private Integer highOnline;
+
+        @ApiModelProperty("合奏课")
+        private Integer mix;
+
+        @ApiModelProperty("单技课")
+        private Integer single;
+
+        @ApiModelProperty("集训合奏课")
+        private Integer trainingMix;
+
+        @ApiModelProperty("集训单技课")
+        private Integer trainingSingle;
+    }
+
+    @Data
+    @ApiModel("平衡关系(分表)-乐团退团")
+    public static class ExportBalancedRelationshipStudentQuitDetail {
+        @ApiModelProperty("分部")
+        private String organName;
+
+        @ApiModelProperty("乐团编号")
+        private String musicGroupId;
+
+        @ApiModelProperty("乐团名称")
+        private String musicGroupName;
+
+        @ApiModelProperty("学员编号")
+        private String studentId;
+
+        @ApiModelProperty("学员姓名")
+        private String studentName;
+    }
+
+    @Data
+    @ApiModel("平衡关系(分表)-乐团新增")
+    public static class ExportBalancedRelationshipStudentAddDetail {
+        @ApiModelProperty("分部")
+        private String organName;
+
+        @ApiModelProperty("乐团编号")
+        private String musicGroupId;
+
+        @ApiModelProperty("乐团名称")
+        private String musicGroupName;
+
+        @ApiModelProperty("学员编号")
+        private String studentId;
+
+        @ApiModelProperty("学员姓名")
+        private String studentName;
+    }
+
+    @Data
+    @ApiModel("平衡关系(分表)-乐团在读学员")
+    public static class ExportBalancedRelationshipStudentNormalDetail {
+        @ApiModelProperty("分部")
+        private String organName;
+
+        @ApiModelProperty("乐团编号")
+        private String musicGroupId;
+
+        @ApiModelProperty("乐团名称")
+        private String musicGroupName;
+
+        @ApiModelProperty("学员编号")
+        private String studentId;
+
+        @ApiModelProperty("学员名称")
+        private String studentName;
+
+        @ApiModelProperty("合作单位名称")
+        private String coopName;
+    }
+
+    @Data
+    @ApiModel("平衡关系-学员情况总表")
+    public static class ExportBalancedRelationshipStudentInfo {
+        @ApiModelProperty("分部")
+        private String organName;
+
+        @ApiModelProperty("进行中乐团数")
+        private Integer musicGroupCount;
+
+        @ApiModelProperty("当月在读学员总数")
+        private Integer currentMonthStudentCount;
+
+        @ApiModelProperty("当月新增学员")
+        private Integer currentMonthAddStudentCount;
+
+        @ApiModelProperty("当月退团学员")
+        private Integer currentMonthQuitStudentCount;
+    }
+
+    @Data
+    @ApiModel("平衡关系-缴费项目课时明细")
+    public static class ExportBalancedRelationshipMusicSubCourse {
+        @ApiModelProperty("分部")
+        private String organName;
+
+        @ApiModelProperty("乐团编号")
+        private String musicGroupId;
+
+        @ApiModelProperty("乐团名称")
+        private String musicGroupName;
+
+        @ApiModelProperty("缴费批次号")
+        private String paymentBatchNo;
+
+        @ApiModelProperty("缴费收费金额")
+        private String paymentAmount;
+
+        @ApiModelProperty("学员编号")
+        private String studentId;
+
+        @ApiModelProperty("课堂课")
+        private Integer classroom;
+
+        @ApiModelProperty("综合课")
+        private Integer comprehensive;
+
+        @ApiModelProperty("基础技能课")
+        private Integer high;
+
+        @ApiModelProperty("线上基础技能课")
+        private Integer highOnline;
+
+        @ApiModelProperty("合奏课")
+        private Integer mix;
+
+        @ApiModelProperty("单技课")
+        private Integer single;
+
+        @ApiModelProperty("集训合奏课")
+        private Integer trainingMix;
+
+        @ApiModelProperty("集训单技课")
+        private Integer trainingSingle;
+
+    }
+
+    @Data
+    @ApiModel("平衡关系-VIP未排课")
+    public static class ExportBalancedRelationshipVipNoCourse {
+        @ApiModelProperty("分部")
+        private String organName;
+
+        @ApiModelProperty("学员姓名")
+        private String studentName;
+
+        @ApiModelProperty("学员编号")
+        private String studentId;
+
+        @ApiModelProperty("课程类型")
+        private String courseType;
+
+        @ApiModelProperty("未排课时")
+        private Integer noCourse;
+
+        @ApiModelProperty("当月新增课时")
+        private Integer addCourse;
+    }
+
+    @Data
+    @ApiModel("平衡关系-VIP已排课")
+    public static class ExportBalancedRelationshipVipCourse {
+        @ApiModelProperty("分部")
+        private String organName;
+
+        @ApiModelProperty("学员姓名")
+        private String studentName;
+
+        @ApiModelProperty("学员编号")
+        private String studentId;
+
+        @ApiModelProperty("课程类型")
+        private String courseType;
+
+        @ApiModelProperty("当月剩余课时")
+        private Integer surplusCourse;
+
+        @ApiModelProperty("当月已上课时")
+        private Integer alreadyCourse;
+
+        @ApiModelProperty("当月消耗课时")
+        private Integer consumeCourse;
+
+        @ApiModelProperty("当月新增课时")
+        private Integer addCourse;
+    }
+
+    @Data
+    @ApiModel("平衡关系-乐团课")
+    public static class ExportBalancedRelationshipMusicCourse {
+        @ApiModelProperty("分部")
+        private String organName;
+
+        @ApiModelProperty("乐团名称")
+        private String musicGroupName;
+
+        @ApiModelProperty("乐团编号")
+        private String musicGroupId;
+
+        @ApiModelProperty("班级名称")
+        private String className;
+
+        @ApiModelProperty("班级类型")
+        private String classType;
+
+        @ApiModelProperty("班级编号")
+        private String classId;
+
+        @ApiModelProperty("课程类型")
+        private String courseType;
+
+        @ApiModelProperty("剩余课次")
+        private Integer surplusCourse;
+
+        @ApiModelProperty("剩余课次课酬")
+        private String surplusCourseReward;
+
+        @ApiModelProperty("剩余被合并课次")
+        private Integer surplusMergedCourse;
+
+        @ApiModelProperty("剩余被合并课次课酬")
+        private String surplusMergedCourseReward;
+
+        @ApiModelProperty("已上课次")
+        private Integer alreadyCourse;
+
+        @ApiModelProperty("已上课次课酬")
+        private String alreadyCourseReward;
+
+        @ApiModelProperty("已上被合并课次")
+        private Integer alreadyMergedCourse;
+
+        @ApiModelProperty("已上被合并课次课酬")
+        private String alreadyMergedCourseReward;
+
+        @ApiModelProperty("当月新增")
+        private Integer currentMonthAdd;
+
+        @ApiModelProperty("当月新增课酬")
+        private String currentMonthAddReward;
+
+        @ApiModelProperty("当月被合并新增")
+        private Integer currentMonthMergedAdd;
+
+        @ApiModelProperty("当月被合并新增课酬")
+        private String currentMonthMergedAddReward;
+
+        @ApiModelProperty("当月消耗")
+        private Integer currentMonthConsume;
+
+        @ApiModelProperty("当月消耗课酬")
+        private String currentMonthConsumeReward;
+
+        @ApiModelProperty("当月被合并消耗")
+        private Integer currentMonthMergedConsume;
+
+        @ApiModelProperty("当月被合并消耗课酬")
+        private String currentMonthMergedConsumeReward;
+    }
+}

+ 15 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonTrainingDetailWrapper.java

@@ -128,6 +128,21 @@ public class StudentLessonTrainingDetailWrapper {
         @ApiModelProperty(value = "true:完成 false未完成",hidden = true)
         private Boolean standardFlag;
 
+        @ApiModelProperty(value = "提交开始时间",required = true)
+        private String submitStartTime;
+
+        @ApiModelProperty(value = "提交结束时间",required = true)
+        private String submitEndTime;
+
+        @ApiModelProperty(value = "提交状态",required = true)
+        private Integer submitStatus;
+
+        @ApiModelProperty(value = "达标状态,'NOT_STANDARD(\"未达标\"), STANDARD(\"已达标\"), EXCELLENT(\"优秀\")")
+        private String standardStatus;
+
+        @ApiModelProperty(value = "模糊查询")
+        private String search;
+
 	}
 
 

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

@@ -1,6 +1,5 @@
 package com.ym.mec.biz.dal.dto;
 
-import com.ym.mec.biz.dal.entity.ClassGroup;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.enums.*;
 import io.swagger.annotations.ApiModelProperty;
@@ -110,6 +109,16 @@ public class TeacherAttendanceDto {
 
     @ApiModelProperty(value = "课程规划")
     private String coursePlan;
+    @ApiModelProperty(value = "关联课件编号")
+    private String coursewareDetailId;
+
+    public String getCoursewareDetailId() {
+        return coursewareDetailId;
+    }
+
+    public void setCoursewareDetailId(String coursewareDetailId) {
+        this.coursewareDetailId = coursewareDetailId;
+    }
 
     public TeachModeEnum getTeachMode() {
         return teachMode;

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

@@ -23,7 +23,7 @@ public class VipGroupCourseAdjustInfoDto {
     @ApiModelProperty(value = "需要调整的vip课排课计划的编号")
     private String courseScheduleIds;
 
-    @ApiModelProperty(value = "开始排课时间")
+    @ApiModelProperty(value = "开始排课时间(兼容历史版本)")
     private Date courseCreateStartTime;
 
     @ApiModelProperty(value = "教学形式")

+ 16 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseSchedule.java

@@ -78,6 +78,10 @@ public class CourseSchedule  extends BaseEntity{
 	@ApiModelProperty(value = "合并课标识,0未合并,1主课,2被合并课",required = false)
 	private Integer mergeFlag = 0;
 
+	@Getter
+	@ApiModelProperty(value = "课程合并时间",required = false)
+	private Date mergeTime;
+
 	private GroupType groupType;
 
 	/**  */
@@ -243,6 +247,18 @@ public class CourseSchedule  extends BaseEntity{
 	@ApiModelProperty("直播课分享模式,默认:NO_SHARE(未分享),OPEN(公开),PRIVATE(私密)")
 	private ShareModeEnum shareMode;
 
+	@Getter
+	@ApiModelProperty("课件编号")
+	private String coursewareDetailId;
+
+	public void setCoursewareDetailId(String coursewareDetailId) {
+		this.coursewareDetailId = coursewareDetailId;
+	}
+
+	public void setMergeTime(Date mergeTime) {
+		this.mergeTime = mergeTime;
+	}
+
 	public void setMergeFlag(Integer mergeFlag) {
 		this.mergeFlag = mergeFlag;
 	}

+ 5 - 149
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Organization.java

@@ -6,6 +6,7 @@ import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 
+import lombok.Data;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import com.ym.mec.biz.dal.enums.GradeTypeEnum;
@@ -15,11 +16,9 @@ import com.ym.mec.common.entity.BaseEntity;
 /**
  * 对应数据库表(organization):
  */
+@Data
 public class Organization extends BaseEntity {
 
-	/**
-	 * 
-	 */
 	private static final long serialVersionUID = -8979746516597046410L;
 
 	/**  */
@@ -69,159 +68,16 @@ public class Organization extends BaseEntity {
 	@ApiModelProperty(value = "地址",required = false)
 	private String address;
 
+	@ApiModelProperty(value = "可用教材编号,多个逗号分割",required = false)
+	private String teachingMaterialId;
+
 	@ApiModelProperty(value = "学年制",required = false)
 	private GradeTypeEnum gradeType;
 
 	@ApiModelProperty(value = "子节点列表",required = false)
 	private List<Organization> organizations;
-
-	public String getAreaName() {
-		return areaName;
-	}
-
-	public void setAreaName(String areaName) {
-		this.areaName = areaName;
-	}
-
-	public List<Organization> getOrganizations() {
-		return organizations;
-	}
-
-	public void setOrganizations(List<Organization> organizations) {
-		this.organizations = organizations;
-	}
-
-	public void setId(Integer id){
-		this.id = id;
-	}
-	
-	public Integer getId(){
-		return this.id;
-	}
-			
-	public void setName(String name){
-		this.name = name;
-	}
-	
-	public String getName(){
-		return this.name;
-	}
-			
-	public void setCreateTime(java.util.Date createTime){
-		this.createTime = createTime;
-	}
-	
-	public java.util.Date getCreateTime(){
-		return this.createTime;
-	}
-			
-	public void setUpdateTime(java.util.Date updateTime){
-		this.updateTime = updateTime;
-	}
-	
-	public java.util.Date getUpdateTime(){
-		return this.updateTime;
-	}
-
-	public YesOrNoEnum getDelFlag() {
-		return delFlag;
-	}
-
-	public void setDelFlag(YesOrNoEnum delFlag) {
-		this.delFlag = delFlag;
-	}
-
-	public Integer getAreaId() {
-		return areaId;
-	}
-
-	public void setAreaId(Integer areaId) {
-		this.areaId = areaId;
-	}
-
-	public Date getRegisterDate() {
-		return registerDate;
-	}
-
-	public void setRegisterDate(Date registerDate) {
-		this.registerDate = registerDate;
-	}
-
-	public String getLinkman() {
-		return linkman;
-	}
-
-	public void setLinkman(String linkman) {
-		this.linkman = linkman;
-	}
-
-	public String getMobile() {
-		return mobile;
-	}
-
-	public void setMobile(String mobile) {
-		this.mobile = mobile;
-	}
-
-	public String getAddress() {
-		return address;
-	}
-
-	public void setAddress(String address) {
-		this.address = address;
-	}
-
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);
 	}
-
-	public GradeTypeEnum getGradeType() {
-		return gradeType;
-	}
-
-	public void setGradeType(GradeTypeEnum gradeType) {
-		this.gradeType = gradeType;
-	}
-
-	public String getCorporateName() {
-		return corporateName;
-	}
-
-	public void setCorporateName(String corporateName) {
-		this.corporateName = corporateName;
-	}
-
-	public String getCorporateCode() {
-		return corporateCode;
-	}
-
-	public void setCorporateCode(String corporateCode) {
-		this.corporateCode = corporateCode;
-	}
-
-	public String getCorporateSeal() {
-		return corporateSeal;
-	}
-
-	public void setCorporateSeal(String corporateSeal) {
-		this.corporateSeal = corporateSeal;
-	}
-
-	public String getCorporateFinancialSeal() {
-		return corporateFinancialSeal;
-	}
-
-	public void setCorporateFinancialSeal(String corporateFinancialSeal) {
-		this.corporateFinancialSeal = corporateFinancialSeal;
-	}
-
-	public BigDecimal getMaxMusicalInstrumentsProfits() {
-		return maxMusicalInstrumentsProfits;
-	}
-
-	public void setMaxMusicalInstrumentsProfits(BigDecimal maxMusicalInstrumentsProfits) {
-		this.maxMusicalInstrumentsProfits = maxMusicalInstrumentsProfits;
-	}
-
 }

+ 24 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentAttendance.java

@@ -26,6 +26,9 @@ public class StudentAttendance extends BaseEntity {
 	/** 乐团 */
 	@ApiModelProperty(value = "乐团",required = false)
 	private String musicGroupId;
+
+	@ApiModelProperty(value = "乐团",required = false)
+	private String musicGroupName;
 	
 	/** 班级 */
 	@ApiModelProperty(value = "班级",required = false)
@@ -82,6 +85,9 @@ public class StudentAttendance extends BaseEntity {
 	@ApiModelProperty(value = "状态(正常、旷课、请假、休学)",required = false)
 	private StudentAttendanceStatusEnum status;
 
+	@ApiModelProperty(value = "请假时间",required = false)
+	private Date leaveTime;
+
 	@ApiModelProperty(value = "是否回访)",required = false)
 	private YesOrNoEnum visitFlag = YesOrNoEnum.NO;
 
@@ -111,7 +117,15 @@ public class StudentAttendance extends BaseEntity {
     @ApiModelProperty(value = "加入课程类型 PURCHASE:购买 SHARE:分享")
     private JoinCourseType joinCourseType;
 
-    public JoinCourseType getJoinCourseType() {
+	public String getMusicGroupName() {
+		return musicGroupName;
+	}
+
+	public void setMusicGroupName(String musicGroupName) {
+		this.musicGroupName = musicGroupName;
+	}
+
+	public JoinCourseType getJoinCourseType() {
         return joinCourseType;
     }
 
@@ -345,7 +359,15 @@ public class StudentAttendance extends BaseEntity {
 	public String getRemark(){
 		return this.remark;
 	}
-			
+
+	public Date getLeaveTime() {
+		return leaveTime;
+	}
+
+	public void setLeaveTime(Date leaveTime) {
+		this.leaveTime = leaveTime;
+	}
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportEnum.java

@@ -95,6 +95,14 @@ public enum ExportEnum implements BaseEnum<String, ExportEnum> {
     CLOUD_COACH_ACTIVATION_DETAILS("CLOUD_COACH_ACTIVATION_DETAILS","云教练激活明细"),
     EXPORT_MUSIC_GROUP_ECHELON_DATA("EXPORT_MUSIC_GROUP_ECHELON_DATA","乐团梯队数据导出"),
     EXPORT_CLOUD_TEACHER_ORDER_INACTIVE("EXPORT_CLOUD_TEACHER_ORDER_INACTIVE","云教练待激活明细"),
+    EXPORT_MUSIC_GROUP_NO_COURSE("EXPORT_MUSIC_GROUP_NO_COURSE","乐团未排课时长"),
+    EXPORT_BALANCED_RELATIONSHIP_MUSIC_COURSE("EXPORT_MUSIC_GROUP_NO_COURSE","平衡关系-乐团课"),
+    EXPORT_BALANCED_RELATIONSHIP_VIP_COURSE("EXPORT_BALANCED_RELATIONSHIP_VIP_COURSE","平衡关系-VIP已排课"),
+    EXPORT_BALANCED_RELATIONSHIP_VIP_NO_COURSE("EXPORT_BALANCED_RELATIONSHIP_VIP_NO_COURSE","平衡关系-VIP未排课"),
+    EXPORT_BALANCED_RELATIONSHIP_MUSIC_SUB_COURSE("EXPORT_BALANCED_RELATIONSHIP_MUSIC_SUB_COURSE","平衡关系-缴费项目课时明细"),
+    EXPORT_BALANCED_RELATIONSHIP_STUDENT_INFO("EXPORT_BALANCED_RELATIONSHIP_STUDENT_INFO","平衡关系-学员情况总表"),
+    EXPORT_BALANCED_RELATIONSHIP_STUDENT_NORMAL_DETAIL("EXPORT_BALANCED_RELATIONSHIP_STUDENT_NORMAL_DETAIL","平衡关系(分表)-乐团在读学员"),
+    EXPORT_BALANCED_RELATIONSHIP_STUDENT_QUIT_DETAIL("EXPORT_BALANCED_RELATIONSHIP_STUDENT_QUIT_DETAIL","平衡关系(分表)-乐团退团学员"),
     ;
 
     private String code;

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportTypeEnum.java

@@ -34,6 +34,13 @@ public enum ExportTypeEnum implements BaseEnum<Integer, ExportTypeEnum> {
 	CLOUD_COACH_ACTIVATION_DETAILS(27,"云教练激活明细"),
 	EXPORT_COURSE_INCOME(28,"课程收入明细导出"),
 	EXPORT_MUSIC_GROUP_ECHELON_DATA(29,"乐团梯队数据导出"),
+	EXPORT_BALANCED_RELATIONSHIP_MUSIC_COURSE(30,"平衡关系-乐团课"),
+	EXPORT_BALANCED_RELATIONSHIP_VIP_COURSE(31,"平衡关系-VIP已排课"),
+	EXPORT_BALANCED_RELATIONSHIP_VIP_NO_COURSE(32,"平衡关系-VIP未排课"),
+	EXPORT_BALANCED_RELATIONSHIP_MUSIC_SUB_COURSE(33,"平衡关系-缴费项目课时明细"),
+	EXPORT_BALANCED_RELATIONSHIP_STUDENT_INFO(34,"平衡关系-学员情况总表"),
+	EXPORT_BALANCED_RELATIONSHIP_STUDENT_NORMAL_DETAIL(35,"平衡关系(分表)-乐团在读学员"),
+	EXPORT_BALANCED_RELATIONSHIP_STUDENT_QUIT_DETAIL(36,"平衡关系(分表)-乐团退团学员"),
 	;
 
 	private Integer code;

+ 91 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/CloudTeacherActiveWapper.java

@@ -0,0 +1,91 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+public class CloudTeacherActiveWapper {
+
+    @Data
+    public static class Query extends QueryInfo {
+        @ApiModelProperty(value = "分部")
+        private String organId;
+
+        @ApiModelProperty(value = "开始时间")
+        private String startDate;
+
+        @ApiModelProperty(value = "结束时间")
+        private String endDate;
+
+        @ApiModelProperty(value = "声部")
+        private Integer subjectId;
+
+        @ApiModelProperty(value = "教师ID")
+        private Integer teacherId;
+
+        @ApiModelProperty(value = "是否会员")
+        private Boolean hasMember;
+    }
+
+    @Data
+    public static class Result {
+        @ApiModelProperty(value = "学员编号")
+        private Integer userId;
+
+        @ApiModelProperty(value = "学员姓名")
+        private String username;
+
+        @ApiModelProperty(value = "手机号")
+        private String phone;
+
+        @ApiModelProperty(value = "声部")
+        private Integer subjectId;
+
+        @ApiModelProperty(value = "声部")
+        private String subjectName;
+
+        @ApiModelProperty(value = "练习总时长")
+        private BigDecimal trainTotalTime = BigDecimal.ZERO;
+
+        @ApiModelProperty(value = "练习次数")
+        private BigDecimal trainNum = BigDecimal.ZERO;
+
+        @ApiModelProperty(value = "练习天数")
+        private BigDecimal trainDays = BigDecimal.ZERO;
+
+        @ApiModelProperty(value = "平均练习时长")
+        private BigDecimal avgTrainTime = BigDecimal.ZERO;
+
+        @ApiModelProperty(value = "评测次数")
+        private BigDecimal testNum = BigDecimal.ZERO;
+
+        @ApiModelProperty(value = "是否会员")
+        private Boolean memberFlag;
+    }
+
+    @Data
+    public static class Statistics {
+        @ApiModelProperty(value = "练习总时长")
+        private BigDecimal trainTotalTime = BigDecimal.ZERO;
+
+        @ApiModelProperty(value = "练习天数")
+        private BigDecimal trainDays = BigDecimal.ZERO;
+
+        @ApiModelProperty(value = "平均练习时长")
+        private BigDecimal avgTrainTime = BigDecimal.ZERO;
+    }
+
+    @Data
+    public static class ResultMap {
+        @ApiModelProperty(value = "列表")
+        private PageInfo<Result> result;
+
+        @ApiModelProperty(value = "汇总")
+        private Statistics statistics;
+    }
+
+}

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/LessonExaminationQueryInfo.java

@@ -4,6 +4,8 @@ import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.List;
+
 @Data
 public class LessonExaminationQueryInfo extends QueryInfo {
 
@@ -13,6 +15,9 @@ public class LessonExaminationQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "乐团编号")
     private String musicGroupId;
 
+    @ApiModelProperty(value = "乐团编号列表")
+    private List<String> musicGroupIds;
+
     @ApiModelProperty(value = "老师编号")
     private Integer teacherId;
 

+ 70 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicCompareRecordWapper.java

@@ -0,0 +1,70 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.biz.dal.enums.FeatureType;
+import com.ym.mec.biz.dal.enums.HeardLevelEnum;
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+public class MusicCompareRecordWapper {
+
+    @Data
+    public static class Query extends QueryInfo {
+        @ApiModelProperty(value = "评测难度")
+        private HeardLevelEnum heardLevel;
+
+        @ApiModelProperty(value = "开始时间")
+        private String startDate;
+
+        @ApiModelProperty(value = "结束时间")
+        private String endDate;
+
+        @ApiModelProperty(value = "功能点")
+        private FeatureType feature;
+
+        @ApiModelProperty(value = "学员编号")
+        private Integer studentId;
+    }
+
+    @Data
+    public static class Result {
+
+        @ApiModelProperty(value = "教程编号")
+        private Integer sysMusicScoreId;
+
+        @ApiModelProperty(value = "评测难度")
+        private HeardLevelEnum heardLevel;
+
+        @ApiModelProperty(value = "教程名称")
+        private String sysMusicScoreName;
+
+        @ApiModelProperty(value = "评分数据")
+        private String scoreData;
+
+        @ApiModelProperty(value = "总分")
+        private BigDecimal score;
+
+        @ApiModelProperty(value = "音准")
+        private BigDecimal intonation;
+
+        @ApiModelProperty(value = "节奏")
+        private BigDecimal cadence;
+
+        @ApiModelProperty(value = "完成度")
+        private BigDecimal integrity;
+
+        @ApiModelProperty(value = "录音文件地址")
+        private String recordFilePath;
+
+        @ApiModelProperty(value = "视频文件地址")
+        private String videoFilePath;
+
+        @ApiModelProperty(value = "功能点")
+        private FeatureType feature;
+
+        @ApiModelProperty(value = "创建时间")
+        private java.util.Date createTime;
+    }
+}

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

@@ -61,4 +61,7 @@ public class StudentAttendanceQueryInfo extends QueryInfo {
     private Boolean visitFlag;
 
     private Boolean orderFlag;
+
+    @ApiModelProperty(value = "是否达标1是0否")
+    private Boolean qualifiedFlag;
 }

+ 2 - 40
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentCourseConsumerQueryInfo.java

@@ -2,7 +2,9 @@ package com.ym.mec.biz.dal.page;
 
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
+@Data
 public class StudentCourseConsumerQueryInfo extends QueryInfo {
 
     @ApiModelProperty(value = "分部")
@@ -19,44 +21,4 @@ public class StudentCourseConsumerQueryInfo extends QueryInfo {
 
     @ApiModelProperty(value = "周数")
     private long weekBetween;
-
-    public long getWeekBetween() {
-        return weekBetween;
-    }
-
-    public void setWeekBetween(long weekBetween) {
-        this.weekBetween = weekBetween;
-    }
-
-    public String getOrganId() {
-        return organId;
-    }
-
-    public void setOrganId(String organId) {
-        this.organId = organId;
-    }
-
-    public String getMonth() {
-        return month;
-    }
-
-    public void setMonth(String month) {
-        this.month = month;
-    }
-
-    public String getStartDate() {
-        return startDate;
-    }
-
-    public void setStartDate(String startDate) {
-        this.startDate = startDate;
-    }
-
-    public String getEndDate() {
-        return endDate;
-    }
-
-    public void setEndDate(String endDate) {
-        this.endDate = endDate;
-    }
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentQueryInfo.java

@@ -19,6 +19,8 @@ public class StudentQueryInfo extends QueryInfo {
 
     private Integer organId;
 
+    private String organIds;
+
     private List<String> organIdList;
 
     private String cloudStudyUseTime;
@@ -29,6 +31,14 @@ public class StudentQueryInfo extends QueryInfo {
     
     private Date cloudTeacherTrainEndDate;
 
+    public String getOrganIds() {
+        return organIds;
+    }
+
+    public void setOrganIds(String organIds) {
+        this.organIds = organIds;
+    }
+
     public String getGroupType() {
         return groupType;
     }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/SysCouponQueryInfo.java

@@ -19,6 +19,17 @@ public class SysCouponQueryInfo extends QueryInfo {
     @ApiModelProperty("优惠券类型")
     private String typeDetail;
 
+    @ApiModelProperty(value = "0手动领取  1手动发放")
+    private Integer issuanceType;
+
+    public Integer getIssuanceType() {
+        return issuanceType;
+    }
+
+    public void setIssuanceType(Integer issuanceType) {
+        this.issuanceType = issuanceType;
+    }
+
     public String getTypeDetail() {
         return typeDetail;
     }

+ 19 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/SysMusicCompareRecordQueryInfo.java

@@ -7,6 +7,8 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * @Author Joburgess
  * @Date 2021/8/11 0011
@@ -22,12 +24,26 @@ public class SysMusicCompareRecordQueryInfo extends QueryInfo {
 
     private String endTime;
 
+    @ApiModelProperty("乐团")
     private String musicGroupId;
 
+    @ApiModelProperty("班级")
+    private Integer classGroupId;
+
     private int orderType;
 
+    @ApiModelProperty("是否是会员")
     private Boolean memberFlag;
 
+    @ApiModelProperty("是否乐团学员(进行中乐团在读学员)")
+    private Boolean musicFlag = false;
+
+    @ApiModelProperty("是否有已结束的小课(没有未开始)")
+    private Boolean hasEndVipFlag = false;
+
+    @ApiModelProperty("是否有未开始的小课")
+    private Boolean hasNotStartVipFlag = false;
+
     @ApiModelProperty("排序字段:TRAINDAYS(训练天数);TRAINTIME(训练时长);TRAINNUM(训练次数)")
     private String sortField = "TRAINDAYS";
 
@@ -38,4 +54,7 @@ public class SysMusicCompareRecordQueryInfo extends QueryInfo {
     private Boolean visitFlag;
 
     private Integer organId;
+
+    //基础数据
+    private List<Integer> studentIdList;
 }

+ 15 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/TeachingPointWrapper.java

@@ -24,6 +24,9 @@ public class TeachingPointWrapper {
         @ApiModelProperty("分页行数")
         private Integer rows;
 
+        @ApiModelProperty("分部")
+        private Integer organId;
+
         @ApiModelProperty("合作单位ID")
         private Integer cooperationOrganId;
 
@@ -71,9 +74,21 @@ public class TeachingPointWrapper {
         @ApiModelProperty("课程ID")
         private Long courseId;
 
+        @ApiModelProperty("合作单位")
+        private String coopName;
+
         @ApiModelProperty("课程名")
         private String courseName;
 
+        @ApiModelProperty("课程类型")
+        private CourseSchedule.CourseScheduleType courseType;
+
+        @ApiModelProperty("分部")
+        private Integer organId;
+
+        @ApiModelProperty("分部")
+        private String organName;
+
         @ApiModelProperty(value = "课程状态")
         private CourseStatusEnum courseStatus;
 
@@ -85,11 +100,9 @@ public class TeachingPointWrapper {
         @ApiModelProperty(value = "上课时间")
         private Date startClassTime;
 
-        /** 结束时间 */
         @ApiModelProperty(value = "结束时间")
         private Date endClassTime;
 
-
         @ApiModelProperty("乐团ID")
         private String musicGroupId;
 

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

@@ -18,4 +18,6 @@ public interface AppVersionInfoService extends BaseService<Integer, AppVersionIn
     List<AppVersionInfo> queryLatestByPlatform(String platform, String appStatus);
 
 	PageInfo<AppVersionInfo> queryPage(AppVersionInfoWrapper.AppVersionInfoQuery queryInfo);
+
+    AppVersionInfo checkForceUpdate(String platform, String localVersion);
 }

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

@@ -622,4 +622,5 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
     List<ClassGroup> getClassGroupByMusicIds(List<String> musicGroupIds);
 
     List<StudentAttendanceViewDto> getLiveCurrentCourseStudents(LiveGroupWrapper.LiveCourseStudentQuery query);
+
 }

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

@@ -46,4 +46,6 @@ public interface CooperationOrganService extends BaseService<Integer, Cooperatio
     List<MusicGroup> musicGroupPage(Integer id);
 
     List<SchoolDto> coopListByIds(List<Integer> coopIds);
+
+    List<MusicGroup> musicGroupPage(String organIds,String coopId);
 }

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java

@@ -169,6 +169,11 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	List<CourseScheduleDto> getTeacherCourseSchedulesWithDate(Integer userId, Date classDate, String type,Integer tenantId);
 
 	/**
+	 * 获取最近的一节课
+	 */
+	CourseScheduleDto getRecentCourseSchedule(Integer userId,Long courseId);
+
+	/**
 	 * @describe 根据日期获取
 	 * @author Joburgess
 	 * @date 2019/12/26

+ 15 - 12
mec-biz/src/main/java/com/ym/mec/biz/service/ExportService.java

@@ -19,6 +19,9 @@ import java.util.function.BiFunction;
 import java.util.function.Function;
 
 
+/**
+ * @author zx
+ */
 public interface ExportService {
 
     Map<String,String> getExportMap(ExportDto exportDto) throws IOException;
@@ -27,7 +30,7 @@ public interface ExportService {
 
     <T> void export(HttpServletResponse response, List<T> rows, ExportDto exportDto) throws IOException;
 
-    Map<ExportEnum, Function<Map<String, Object>, HttpResponseResult>> getExportManageFuncMap();
+    Map<ExportEnum, Function<Map<String, Object>, HttpResponseResult<String>>> getExportManageFuncMap();
 
     Map<ExportEnum, Function<Map<String, Object>, List>> getExportFuncMap();
 
@@ -234,31 +237,31 @@ public interface ExportService {
     void musicGroupRegister(HttpServletResponse response, ExportDto exportDto) throws IOException;
 
     //财务管理导出
-    HttpResponseResult routeOrderList(Map<String, Object> info);
-    HttpResponseResult routeMallOrderList(Map<String, Object> info);
+    HttpResponseResult<String> routeOrderList(Map<String, Object> info);
+    HttpResponseResult<String> routeMallOrderList(Map<String, Object> info);
 
     //学员小课记录导出
-    HttpResponseResult exportStudentVipPractice(Map<String, Object> info);
+    HttpResponseResult<String> exportStudentVipPractice(Map<String, Object> info);
 
     //学员小课记录导出
-    HttpResponseResult exportStudentVipCourseInfo(Map<String, Object> info);
+    HttpResponseResult<String> exportStudentVipCourseInfo(Map<String, Object> info);
 
     //vip学员课程管理
-    HttpResponseResult exportVipStudentCourseManage(Map<String, Object> info) throws Exception;
+    HttpResponseResult<String> exportVipStudentCourseManage(Map<String, Object> info) throws Exception;
 
     //导出活动资格
-    HttpResponseResult exportStudentSubCourse(Map<String, Object> info);
+    HttpResponseResult<String> exportStudentSubCourse(Map<String, Object> info);
 
     //学员小课记录导出
-    HttpResponseResult exportStudentMusicTheoryCourseInfo(Map<String, Object> info);
+    HttpResponseResult<String> exportStudentMusicTheoryCourseInfo(Map<String, Object> info);
 
     //订单列表导出
-    HttpResponseResult orderList(Map<String, Object> info);
+    HttpResponseResult<String> orderList(Map<String, Object> info);
 
-    HttpResponseResult mallOrderList(Map<String, Object> info);
+    HttpResponseResult<String> mallOrderList(Map<String, Object> info);
 
     //订单列表汇总导出
-    HttpResponseResult orderListSum(Map<String, Object> info);
+    HttpResponseResult<String> orderListSum(Map<String, Object> info);
 
     //保存下载记录
     ManagerDownload saveManagerDownload(ExportTypeEnum exportTypeEnum, Integer userId);
@@ -292,5 +295,5 @@ public interface ExportService {
 
     void exportMusicGroupCourseList(ManagerDownload managerDownload, ExportUserAccountQueryInfo queryInfo);
 
-    HttpResponseResult asyncExport(Runnable runnable,String excelName);
+    HttpResponseResult<String> asyncExport(Runnable runnable,String excelName);
 }

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

@@ -1,10 +1,6 @@
 package com.ym.mec.biz.service;
 
-import com.ym.mec.biz.dal.dto.CourseHomeworkStudentDetailDto;
-import com.ym.mec.biz.dal.dto.CourseHomeworkWrapper;
-import com.ym.mec.biz.dal.dto.EduHomeworkCardDto;
-import com.ym.mec.biz.dal.dto.ExtraExerciseStudentsDto;
-import com.ym.mec.biz.dal.dto.StudentHomeworkRecordDto;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
 import com.ym.mec.biz.dal.entity.StudentCourseHomework;
 import com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation;
@@ -19,6 +15,8 @@ import java.util.List;
 
 public interface ExtracurricularExercisesReplyService extends BaseService<Long, ExtracurricularExercisesReply> {
 
+    List<StudentCourseHomework> findExtraExerciseStudents(StudentLessonTrainingDetailWrapper.StudentLessonTrainingQuery query);
+
     /**
      * @describe
      * @author Joburgess

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
@@ -19,6 +20,8 @@ import java.util.Set;
 
 public interface MusicGroupPaymentCalenderService extends BaseService<Long, MusicGroupPaymentCalender> {
 
+	MusicGroupPaymentCalenderDao getDao();
+
 	/**
 	 * 创建缴费信息(目前只支持合班缴费)
 	 * @param musicGroupPaymentCalenderDto

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.SysUserRoleEnum;
@@ -21,6 +22,7 @@ import java.util.Map;
 import java.util.Set;
 
 public interface MusicGroupService extends BaseService<String, MusicGroup> {
+    MusicGroupDao getDao();
 	
 	/**
 	 * 将学生导入至乐团中

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

@@ -2,11 +2,14 @@ package com.ym.mec.biz.service;
 
 import java.util.List;
 
+import com.ym.mec.biz.dal.dao.MusicGroupSubjectGoodsGroupDao;
 import com.ym.mec.biz.dal.entity.MusicGroupSubjectGoodsGroup;
 import com.ym.mec.common.service.BaseService;
 
 public interface MusicGroupSubjectGoodsGroupService extends BaseService<Long, MusicGroupSubjectGoodsGroup> {
 
+    MusicGroupSubjectGoodsGroupDao getDao();
+
     /**
      * 获取乐团声部对应的商品
      * @param musicGroupId

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

@@ -104,4 +104,7 @@ public interface OrganizationService extends BaseService<Integer, Organization>
     Map<Integer, String> getGradeList(Integer organId, String gradeType);
 
     Map<Integer,Organization> getMapById(List<Integer> ids);
+
+    //获取分部关联的课件编号
+    String getTeachingMaterialIds(String organId, Integer tenantId);
 }

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dao.PracticeGroupDao;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.PracticeGroup;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
@@ -18,6 +19,8 @@ import java.util.Map;
 
 public interface PracticeGroupService extends BaseService<Long, PracticeGroup> {
 
+	PracticeGroupDao getDao();
+
 	/**
 	 * @describe 获取学生的陪练课
 	 * @author Joburgess

Some files were not shown because too many files changed in this diff