Procházet zdrojové kódy

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

# Conflicts:
#	mec-biz/src/main/resources/config/mybatis/SysMusicScoreMapper.xml
zouxuan před 5 měsíci
rodič
revize
1aa3f956ae
100 změnil soubory, kde provedl 3273 přidání a 2861 odebrání
  1. 3 0
      mec-application/src/main/java/com/ym/mec/config/WebMvcConfig.java
  2. 16 3
      mec-application/src/main/java/com/ym/mec/student/controller/ActivityController.java
  3. 2 2
      mec-application/src/main/java/com/ym/mec/student/controller/CloudCoachPaymentProgramController.java
  4. 106 9
      mec-application/src/main/java/com/ym/mec/student/controller/LessonCoursewareController.java
  5. 7 1
      mec-application/src/main/java/com/ym/mec/student/controller/LessonExaminationController.java
  6. 44 15
      mec-application/src/main/java/com/ym/mec/student/controller/MemberRankController.java
  7. 33 0
      mec-application/src/main/java/com/ym/mec/student/controller/MemberRankSettingController.java
  8. 139 0
      mec-application/src/main/java/com/ym/mec/student/controller/MusicPracticeRecordController.java
  9. 172 0
      mec-application/src/main/java/com/ym/mec/student/controller/MusicSheetController.java
  10. 17 1
      mec-application/src/main/java/com/ym/mec/student/controller/StudentController.java
  11. 11 1
      mec-application/src/main/java/com/ym/mec/student/controller/StudentCourseHomeworkController.java
  12. 20 53
      mec-application/src/main/java/com/ym/mec/student/controller/StudentManageController.java
  13. 32 11
      mec-application/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  14. 13 0
      mec-application/src/main/java/com/ym/mec/student/controller/SysConfigController.java
  15. 10 0
      mec-application/src/main/java/com/ym/mec/student/controller/SysMusicScoreAccompanimentController.java
  16. 21 0
      mec-application/src/main/java/com/ym/mec/student/controller/SysMusicScoreController.java
  17. 19 0
      mec-application/src/main/java/com/ym/mec/student/controller/UserMusicController.java
  18. 98 0
      mec-application/src/main/java/com/ym/mec/student/controller/open/OpenLessonExaminationController.java
  19. 95 0
      mec-application/src/main/java/com/ym/mec/student/controller/open/OpenMusicSheetController.java
  20. 1 1
      mec-application/src/main/java/com/ym/mec/teacher/controller/ClassGroupController.java
  21. 1 1
      mec-application/src/main/java/com/ym/mec/teacher/controller/ExtracurricularExercisesController.java
  22. 18 1
      mec-application/src/main/java/com/ym/mec/teacher/controller/LessonCoursewareController.java
  23. 140 0
      mec-application/src/main/java/com/ym/mec/teacher/controller/MusicPracticeRecordController.java
  24. 178 0
      mec-application/src/main/java/com/ym/mec/teacher/controller/MusicSheetController.java
  25. 16 0
      mec-application/src/main/java/com/ym/mec/teacher/controller/StudentController.java
  26. 16 0
      mec-application/src/main/java/com/ym/mec/teacher/controller/UserMusicController.java
  27. 95 0
      mec-application/src/main/java/com/ym/mec/teacher/controller/open/OpenMusicSheetController.java
  28. 107 0
      mec-application/src/main/java/com/ym/mec/vo/MusicSheetAccompanimentVo.java
  29. 713 0
      mec-application/src/main/java/com/ym/mec/vo/MusicSheetVo.java
  30. 23 0
      mec-application/src/main/java/com/ym/mec/vo/MusicalInstrumentWrapper.java
  31. 1 1
      mec-application/src/main/java/com/ym/mec/web/controller/CloudTeacherOrderController.java
  32. 50 17
      mec-application/src/main/java/com/ym/mec/web/controller/ExportController.java
  33. 7 0
      mec-application/src/main/java/com/ym/mec/web/controller/LessonExaminationController.java
  34. 28 0
      mec-application/src/main/java/com/ym/mec/web/controller/MemberRankOrganizationFeeMapperController.java
  35. 86 14
      mec-application/src/main/java/com/ym/mec/web/controller/MemberRankSettingController.java
  36. 3 3
      mec-application/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderController.java
  37. 138 0
      mec-application/src/main/java/com/ym/mec/web/controller/MusicPracticeRecordController.java
  38. 1 1
      mec-application/src/main/java/com/ym/mec/web/controller/MusicSheetApplicationExtendController.java
  39. 166 0
      mec-application/src/main/java/com/ym/mec/web/controller/MusicSheetController.java
  40. 37 28
      mec-application/src/main/java/com/ym/mec/web/controller/StudentManageController.java
  41. 49 0
      mec-application/src/main/java/com/ym/mec/web/controller/StudentMemberUpdateLogController.java
  42. 1 1
      mec-application/src/main/java/com/ym/mec/web/controller/StudentRegistrationController.java
  43. 1 1
      mec-application/src/main/java/com/ym/mec/web/controller/SysMusicScoreController.java
  44. 8 0
      mec-application/src/main/java/com/ym/mec/web/controller/TaskController.java
  45. 4 1
      mec-application/src/main/java/com/ym/mec/web/controller/TenantConfigController.java
  46. 1 1
      mec-application/src/main/java/com/ym/mec/web/controller/education/CourseHomeworkTemplateController.java
  47. 17 0
      mec-application/src/main/java/com/ym/mec/web/controller/education/EduStudentController.java
  48. 94 0
      mec-application/src/main/java/com/ym/mec/web/controller/open/OpenMusicSheetController.java
  49. 27 27
      mec-application/src/main/resources/exportColumnMapper.ini
  50. 7 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherOrderDao.java
  51. 0 12
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  52. 5 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImUserFriendDao.java
  53. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/InstrumentDao.java
  54. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MemberRankOrganizationFeeMapperDao.java
  55. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MemberRankPrivilegesDao.java
  56. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MemberRankSettingDao.java
  57. 7 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentCalenderMemberDao.java
  58. 6 12
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java
  59. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentLessonExaminationDao.java
  60. 4 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentLessonTrainingDetailMapper.java
  61. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentMemberTimeDao.java
  62. 7 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentMemberUpdateLogDao.java
  63. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicCompareRecordDao.java
  64. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicScoreDao.java
  65. 3 153
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/BasicUserDto.java
  66. 2 156
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseHomeworkListDto.java
  67. 37 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseHomeworkWrapper.java
  68. 4 119
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/EduHomeworkCardDto.java
  69. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/LessonExaminationDetailDto.java
  70. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/LessonExaminationResultDto.java
  71. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/LessonExaminationResultDto1.java
  72. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/LessonExaminationSubmitDto.java
  73. 6 48
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MemberPayParamDto.java
  74. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupPaymentBaseCalender.java
  75. 7 359
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupStudentsDto.java
  76. 5 52
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicScoreSubjectDto.java
  77. 11 16
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/RegisterPayDto.java
  78. 3 96
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentCourseHomeworkDto.java
  79. 2 160
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentHomeworkRecordDto.java
  80. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonExaminationDetailDto.java
  81. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonExaminationDetailDto1.java
  82. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonExaminationDto.java
  83. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonExaminationDto1.java
  84. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonExaminationSaveDto.java
  85. 32 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonTrainingDetailWrapper.java
  86. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageBaseInfoOfMusicGroupDto.java
  87. 7 428
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageListDto.java
  88. 3 152
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentServiceDetailDto.java
  89. 3 64
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentServiceHomeworkDto.java
  90. 2 88
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentVisitCourseHomeWorkDto.java
  91. 2 152
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherHomeworkListDto.java
  92. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TenantInfoDto.java
  93. 3 171
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/WebCourseHomeworkListDto.java
  94. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudTeacherOrder.java
  95. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudTeacherStudent.java
  96. 10 173
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseHomework.java
  97. 9 249
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ExtracurricularExercises.java
  98. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ExtracurricularExercisesReply.java
  99. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/LessonExamination.java
  100. 35 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MemberRankCategoryMapper.java

+ 3 - 0
mec-application/src/main/java/com/ym/mec/config/WebMvcConfig.java

@@ -11,6 +11,7 @@ import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
 import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
 import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
 import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
+import com.microsvc.toolkit.common.webportal.converter.EnumsConvertorFactory;
 import com.ym.mec.common.config.EnumConverterFactory;
 import com.ym.mec.common.config.LocalFastJsonHttpMessageConverter;
 import com.ym.mec.common.enums.BaseEnum;
@@ -52,6 +53,8 @@ public class WebMvcConfig implements WebMvcConfigurer {
 	@Override
 	public void addFormatters(FormatterRegistry registry) {
 		registry.addConverterFactory(new EnumConverterFactory());
+		// 枚举映射转换
+		registry.addConverterFactory(new EnumsConvertorFactory());
 	}
 
 	@Override

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

@@ -15,12 +15,11 @@ import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.MediaType;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -52,6 +51,8 @@ public class ActivityController extends BaseController {
     private MusicGroupPlanMakingService musicGroupPlanMakingService;
     @Autowired
     private SubjectService subjectService;
+    @Autowired
+    private MemberRankSettingService memberRankSettingService;
 
     @ApiOperation("活动购买")
     @PostMapping(value = "/buy")
@@ -194,11 +195,23 @@ public class ActivityController extends BaseController {
         Map<String, String> categoryMap = vipGroupCategoryDao.findConditionCategorys().stream().collect(Collectors.toMap(e-> e.getId().toString(), ConditionDto::getName));
         vipGroupActivity.setVipGroupCategoryNames(categoryMap.get(vipGroupActivity.getVipGroupCategoryIdList()));
         vipGroupActivity.setGiveCategoryName(categoryMap.get(vipGroupActivity.getGiveCategoryId()));
+        if (vipGroupActivity.getMemberRankId() != null) {
+            MemberRankSetting rankSetting = memberRankSettingService.get(vipGroupActivity.getMemberRankId());
+            if(rankSetting != null){
+                vipGroupActivity.setMemberRankName(rankSetting.getName());
+            }
+        }
+        if (vipGroupActivity.getGiveMemberRankId() != null) {
+            MemberRankSetting rankSetting = memberRankSettingService.get(vipGroupActivity.getGiveMemberRankId());
+            if(rankSetting != null){
+                vipGroupActivity.setGiveMemberRankName(rankSetting.getName());
+            }
+        }
         //如果是固定金额
         if(vipGroupActivity.getFixedCourseNumFlag()){
             vipGroupActivity.setDisplayPrice(vipGroupActivity.getMarketPrice());
         }else {
-            vipGroupActivity.setDisplayPrice(vipGroupActivity.getSinglePrice().multiply(vipGroupActivity.getDiscount()).divide(new BigDecimal(100), 0, ROUND_UP));
+            vipGroupActivity.setDisplayPrice(vipGroupActivity.getSinglePrice().multiply(vipGroupActivity.getDiscount()).divide(new BigDecimal(100), 0, RoundingMode.UP));
         }
         vipGroupActivityService.setActivityType(vipGroupActivity);
         return succeed(vipGroupActivity);

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

@@ -36,12 +36,12 @@ public class CloudCoachPaymentProgramController extends BaseController {
     public Object get(Long id){
         CloudCoachPaymentProgram cloudCoachPaymentProgram = cloudCoachPaymentProgramService.get(id);
         if(cloudCoachPaymentProgram == null){
-            throw new BizException("云教练缴费项目不存在,请联系指导老师");
+            throw new BizException("学练宝缴费项目不存在,请联系指导老师");
         }
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         StudentCloudCoachPaymentDetails studentCloudCoachPaymentDetails = studentCloudCoachPaymentDetailsService.findByUserId(id, sysUser.getId());
         if(studentCloudCoachPaymentDetails == null){
-            throw new BizException("您不在当前云教练缴费项目中,请联系指导老师");
+            throw new BizException("您不在当前学练宝缴费项目中,请联系指导老师");
         }
         MemberRankSetting memberRankSetting = memberRankSettingService.get(cloudCoachPaymentProgram.getMemberRankSettingId());
         cloudCoachPaymentProgram.setMemberIntro(memberRankSetting.getIntro());

+ 106 - 9
mec-application/src/main/java/com/ym/mec/student/controller/LessonCoursewareController.java

@@ -7,24 +7,29 @@ import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsLessonCoursewareDetailWra
 import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsLessonCoursewareWrapper;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.CloudTeacherOrderDao;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.ClientEnum;
 import com.ym.mec.biz.dal.entity.Subject;
+import com.ym.mec.biz.dal.enums.ClientEnum;
 import com.ym.mec.biz.dal.wrapper.LessonCoursewareWrapper;
-import com.ym.mec.biz.service.CbsMusicScoreCategoriesService;
-import com.ym.mec.biz.service.LessonCoursewareService;
-import com.ym.mec.biz.service.OrganizationService;
-import com.ym.mec.biz.service.SysUserService;
+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.common.page.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.collections.CollectionUtils;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @RequestMapping("${app-config.url.student:}/lessonCourseware")
 @Api(tags = "课件教材")
@@ -42,22 +47,87 @@ public class LessonCoursewareController extends BaseController {
 	@Resource
 	private CbsMusicScoreCategoriesService cbsMusicScoreCategoriesService;
 
+    @Autowired
+    private CloudTeacherOrderDao cloudTeacherOrderDao;
+
+    @Autowired
+    private MemberRankCourseTypeMapperService memberRankCourseTypeMapperService;
+
+    @Autowired
+    private MemberRankCategoryMapperService memberRankCategoryMapperService;
+
 	@ApiOperation(value = "分页查询已添加的课件")
 	@PostMapping("/queryLessonCourseware")
 	public HttpResponseResult<PageInfo<LessonCoursewareWrapper.LessonCoursewareDto>> queryLessonCourseware(@RequestBody LessonCoursewareWrapper.LessonCoursewareQuery query){
 		query.setEnable(true);
 		query.setStudentId(sysUserService.getUserId());
 		IPage<LessonCoursewareWrapper.LessonCoursewareDto> pages = lessonCoursewareService.selectPage(QueryInfo.getPage(query), query);
-		return succeed(PageUtil.pageInfo(pages));
+        List<LessonCoursewareWrapper.LessonCoursewareDto> records = pages.getRecords();
+        if (CollectionUtils.isNotEmpty(records)) {
+
+            // 根据用户会员判断是否锁定
+            // 查询有效的会员
+            List<Integer> courseIds = getCourseIds();
+
+            // 判断曲目是否在分类中
+            for (LessonCoursewareWrapper.LessonCoursewareDto row : records) {
+                if (courseIds.contains(row.getId())) {
+                    row.setUseStatus("UNLOCK");
+                } else  {
+                    row.setUseStatus("LOCK");
+                }
+            }
+        }
+
+        return succeed(PageUtil.pageInfo(pages));
 	}
 
 	@ApiOperation(value = "获取课件详情")
 	@GetMapping("/getLessonCoursewareDetail/{id}")
-	public HttpResponseResult<CbsLessonCoursewareWrapper.LessonCourseware> getLessonCoursewareDetail(@PathVariable("id") Long id){
-		return succeed(coursewareFeignService.lessonCoursewareDetail(id).feignData());
+	public HttpResponseResult<LessonCoursewareWrapper.LessonCoursewareExtend> getLessonCoursewareDetail(@PathVariable("id") Long id){
+        CbsLessonCoursewareWrapper.LessonCourseware lessonCourseware = coursewareFeignService.lessonCoursewareDetail(id).feignData();
+        if (lessonCourseware == null) {
+            return succeed();
+        }
+        //使用课件ID查询应用这边的ID
+        LessonCourseware lessonCourseware1 = lessonCoursewareService.getByLessonCoursewareId(id);
+        if (lessonCourseware1 == null) {
+            throw new BizException("课件不存在");
+        }
+
+        LessonCoursewareWrapper.LessonCoursewareExtend lessonCoursewareExtend = JSONObject
+            .parseObject(JSONObject.toJSONString(lessonCourseware), LessonCoursewareWrapper.LessonCoursewareExtend.class);
+        // 根据用户会员判断是否锁定
+        // 查询有效的会员
+        List<Integer> courseIds = getCourseIds();
+
+
+        // 判断曲目是否在分类中
+        if (courseIds.contains(lessonCourseware1.getId())) {
+            lessonCoursewareExtend.setUseStatus("UNLOCK");
+        } else {
+            lessonCoursewareExtend.setUseStatus("LOCK");
+        }
+
+        return succeed(lessonCoursewareExtend);
 	}
 
-	@ApiOperation(value = "获取课件关联的课程列表")
+    @NotNull
+    private List<Integer> getCourseIds() {
+        List<Integer> activationVipIds = cloudTeacherOrderDao.getActivationVipIds(sysUserService.getUserId());
+
+        // 获取会员的曲目分类
+
+        List<MemberRankCourseTypeMapper> courseTypeMapperList = memberRankCourseTypeMapperService.getByMemberRankId(activationVipIds);
+        if (CollectionUtils.isEmpty(courseTypeMapperList)) {
+            courseTypeMapperList = new ArrayList<>();
+        }
+        List<Integer> categoryIds = courseTypeMapperList.stream().map(MemberRankCourseTypeMapper::getCourseType)
+            .distinct().map(Integer::parseInt).collect(Collectors.toList());
+        return categoryIds;
+    }
+
+    @ApiOperation(value = "获取课件关联的课程列表")
 	@GetMapping("/getLessonCoursewareCourseList/{id}")
 	public HttpResponseResult<List<LessonCoursewareWrapper.CourseScheduleCoursewareDetail>> getLessonCoursewareCourseList(@PathVariable("id") Long id){
 		List<CbsLessonCoursewareWrapper.CourseScheduleCoursewareDetail> courseScheduleCoursewareDetails = coursewareFeignService.coursewareDetail(id).feignData();
@@ -73,9 +143,28 @@ public class LessonCoursewareController extends BaseController {
 	@GetMapping("/getLessonCourseDetail/{id}")
 	public HttpResponseResult<CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail> getLessonCourseDetail(@PathVariable("id") Long id){
 		SysUser sysUser = sysUserService.getUser();
+        // 机构可用曲目分类
 		String teachingMaterialIds = organizationService.getTeachingMaterialIds(sysUser.getOrganId().toString(),sysUser.getTenantId());
 		List<Integer> categoryIdList = cbsMusicScoreCategoriesService.getAllCategoryIdList(teachingMaterialIds);
-		return succeed(lessonCoursewareService.getLessonCourseDetail(id,categoryIdList));
+
+        // 学生会员可用曲目分类
+        Integer userId = sysUserService.getUserId();
+        List<Integer> activationVipIds = cloudTeacherOrderDao.getActivationVipIds(userId);
+
+        // 获取会员的曲目分类
+
+        List<MemberRankCategoryMapper> categoryMapperList = memberRankCategoryMapperService.getByMemberRankId(activationVipIds);
+        if (CollectionUtils.isEmpty(categoryMapperList)) {
+            categoryMapperList = new ArrayList<>();
+        }
+        List<Integer> categoryIds = categoryMapperList.stream().map(MemberRankCategoryMapper::getCategoryId)
+            .distinct().collect(Collectors.toList());
+        LessonCoursewareWrapper.LessonCoursewareDetailQuery query = new LessonCoursewareWrapper.LessonCoursewareDetailQuery();
+        query.setLessonCoursewareDetailId(id);
+        query.setUserType(ClientEnum.STUDENT);
+        query.setTenantCategoriesIdList(categoryIdList);
+        query.setStudentCategoriesIdList(categoryIds);
+		return succeed(lessonCoursewareService.getLessonCourseDetail(query));
 	}
 
 	@ApiOperation(value = "获取课件关联的声部列表")
@@ -83,4 +172,12 @@ public class LessonCoursewareController extends BaseController {
 	public HttpResponseResult<List<Subject>> getLessonCoursewareSubjectList(){
 		return succeed(lessonCoursewareService.getDao().getLessonCoursewareSubjectList());
 	}
+
+    @ApiOperation(value = "关联课程类型")
+    @PostMapping("/refLevel")
+    public HttpResponseResult<List<LessonCoursewareWrapper.RefLevelDetailInfo>> refLevel(@RequestBody LessonCoursewareWrapper.RefLevelQuery query) {
+        query.setTeacherId(sysUserService.getUserId());
+        query.setClient(ClientEnum.STUDENT);
+        return succeed(lessonCoursewareService.refLevel(query));
+    }
 }

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

@@ -16,6 +16,8 @@ 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.apache.commons.collections.CollectionUtils;
+import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -65,7 +67,11 @@ public class LessonExaminationController extends BaseController {
     @PostMapping("queryDetailAll")
     public HttpResponseResult<List<StudentLessonExaminationDetailDto>> queryAll(@RequestBody StudentLessonExaminationQueryDto query) {
         query.setUserId(sysUserService.getUserId());
-        return succeed(studentLessonExaminationDetailService.queryAll(query));
+        List<StudentLessonExaminationDetailDto> dtos = studentLessonExaminationDetailService.queryAll(query);
+        if(CollectionUtils.isEmpty(dtos)){
+            return failed(HttpStatus.NO_CONTENT,"作业不存在");
+        }
+        return succeed(dtos);
     }
 
     @ApiOperation(value = "获取学员单个作业详情")

+ 44 - 15
mec-application/src/main/java/com/ym/mec/student/controller/MemberRankController.java

@@ -1,45 +1,73 @@
 package com.ym.mec.student.controller;
 
+import com.google.common.collect.Lists;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.MemberRankOrganizationFeeMapperDao;
+import com.ym.mec.biz.dal.dao.SysMusicScoreDao;
 import com.ym.mec.biz.dal.dto.MemberPayParamDto;
-import com.ym.mec.biz.dal.entity.MemberRankSetting;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.page.CloudTeacherOrderQueryInfo;
 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.page.PageInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @RequestMapping("${app-config.url.student:}/memberRank")
 @Api(tags = "会员收费设置服务")
 @RestController
 public class MemberRankController extends BaseController {
 
-    @Autowired
+    @Resource
     private MemberFeeSettingService memberFeeSettingService;
-
-    @Autowired
+    @Resource
     private MemberRankSettingService memberRankSettingService;
-
-    @Autowired
+    @Resource
     private MemberRankPrivilegesService memberRankPrivilegesService;
-
-    @Autowired
+    @Resource
     private CloudTeacherOrderService cloudTeacherOrderService;
-
-    @Autowired
+    @Resource
     private SysUserService sysUserService;
+    @Resource
+    private MemberRankOrganizationFeeMapperDao memberRankOrganizationFeeMapperDao;
+
+    @Resource
+    private SysMusicScoreDao sysMusicScoreDao;
+
+    @Resource
+    private LessonCoursewareService lessonCoursewareService;
 
     @ApiOperation(value = "获取所有的收费标准")
     @GetMapping("/queryList")
-    public Object getMemberDefaultFee() {
+    public Object getMemberDefaultFee(String  type,Integer  typeId) {
         SysUser sysUser = sysUserService.getUser();
-        List<MemberRankSetting> result = memberRankSettingService.queryListByIsDefault(false);
-
+        List<MemberRankOrganizationFeeMapper> feeMappers = memberRankOrganizationFeeMapperDao.queryByOrganId(sysUser.getOrganId());
+        if (CollectionUtils.isEmpty(feeMappers)) {
+            return Lists.newArrayList();
+        }
+        if (StringUtils.isNotBlank(type)&& "MUSIC".equals(type) && typeId !=null) {
+            SysMusicScore sysMusicScore = sysMusicScoreDao.get(typeId);
+            if (sysMusicScore != null) {
+                typeId = sysMusicScore.getCbsMusicCategoriesId();
+            }
+        } else if (StringUtils.isNotBlank(type)&& "LESSON".equals(type) && typeId !=null) {
+            // 远程ID 换课件ID
+            LessonCourseware courseware = lessonCoursewareService.getByLessonCoursewareId(typeId.longValue());
+            if (courseware != null) {
+                typeId = courseware.getId();
+            }
+        }
+        List<Integer> memberIds = feeMappers.stream()
+                .map(MemberRankOrganizationFeeMapper::getMemberRankSettingId).distinct().collect(Collectors.toList());
+        List<MemberRankSetting> result = memberRankSettingService.getByIdsAndType(memberIds,type,typeId);
         for (MemberRankSetting mrs : result) {
             mrs.setMemberFeeSetting(memberFeeSettingService.findByRankIdAndOrganId(sysUser.getOrganId(), mrs.getId()));
             mrs.setMemberPrivilegesItemList(memberRankPrivilegesService.queryByMemberRankId(mrs.getId()));
@@ -116,8 +144,9 @@ public class MemberRankController extends BaseController {
 
     @ApiOperation(value = "查询订单列表")
     @GetMapping("/queryOrderPage")
-    public Object queryOrderPage(CloudTeacherOrderQueryInfo queryInfo) {
+    public HttpResponseResult<PageInfo<CloudTeacherOrder>> queryOrderPage(CloudTeacherOrderQueryInfo queryInfo) {
         queryInfo.setStudentId(sysUserService.getUserId());
+        queryInfo.setStatus("1,2");
         return succeed(cloudTeacherOrderService.queryPage(queryInfo));
     }
 

+ 33 - 0
mec-application/src/main/java/com/ym/mec/student/controller/MemberRankSettingController.java

@@ -0,0 +1,33 @@
+package com.ym.mec.student.controller;
+
+import com.ym.mec.biz.dal.wrapper.MemberRankSettingWrapper;
+import com.ym.mec.biz.service.MemberRankSettingService;
+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.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RequestMapping("${app-config.url.student:}/memberRankSetting")
+@Api(tags = "会员等级服务")
+@RestController
+public class MemberRankSettingController extends BaseController {
+
+    @Resource
+    private MemberRankSettingService memberRankSettingService;
+
+    @ApiOperation(value = "获取可用的会员树状列表")
+    @GetMapping("/queryTree")
+    public HttpResponseResult<List<MemberRankSettingWrapper.MemberRankSetting>> queryTree(String musicGroupId,Integer organId,Integer studentId) {
+        if (musicGroupId == null && organId == null && studentId == null) {
+            return failed("参数错误");
+        }
+        return succeed(memberRankSettingService.queryTree(musicGroupId,organId,studentId));
+    }
+
+}

+ 139 - 0
mec-application/src/main/java/com/ym/mec/student/controller/MusicPracticeRecordController.java

@@ -0,0 +1,139 @@
+package com.ym.mec.student.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.dayaedu.cbs.common.enums.music.EEvaluationStandard;
+import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
+import com.google.common.collect.Lists;
+import com.microsvc.toolkit.common.response.template.R;
+import com.microsvc.toolkit.common.webportal.exception.BizException;
+import com.microsvc.toolkit.config.validator.group.ValidGroups;
+import com.ym.mec.biz.dal.entity.UserMusic;
+import com.ym.mec.biz.dal.enums.ClientEnum;
+import com.ym.mec.biz.dal.wrapper.MusicPracticeRecordWrapper;
+import com.ym.mec.biz.service.MusicPracticeRecordService;
+import com.ym.mec.biz.service.SysMusicScoreService;
+import com.ym.mec.biz.service.SysUserService;
+import com.ym.mec.biz.service.UserMusicService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+import java.util.Objects;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("${app-config.url.student:}/musicPracticeRecord")
+@Api(tags = "曲目练习记录")
+public class MusicPracticeRecordController {
+
+    @Autowired
+    private MusicPracticeRecordService musicPracticeRecordService;
+
+    @Autowired
+    private UserMusicService userMusicService;
+
+    @Autowired
+    private SysMusicScoreService musicSheetService;
+
+    @Autowired
+    private SysUserService sysUserService;
+
+    /**
+     * 查询单条
+     * @param id 详情ID
+     * @return R<MusicPracticeRecordVo.MusicPracticeRecord>
+     */
+    @ApiOperation(value = "详情", notes = "曲目练习记录-根据详情ID查询单条, 传入id")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "id", dataType = "long")
+    })
+    @GetMapping("/detail/{id}")
+    public R<MusicPracticeRecordWrapper.MusicPracticeRecord> detail(@PathVariable("id") Long id) {
+
+        MusicPracticeRecordWrapper.Entity wrapper = musicPracticeRecordService.detail(id);
+
+        if (wrapper == null) {
+            throw new BizException("记录不存在");
+        }
+
+        // 上传过作品,用作品视频路径覆盖上传视频路径
+        // ID集合
+        Map<Long, UserMusic> userMusicMap = userMusicService.getMapByMusicPracticeRecordIds(Lists.newArrayList(Long.parseLong(wrapper.getId())));
+
+        UserMusic userMusic = userMusicMap.get(Long.parseLong(wrapper.getId()));
+        if (Objects.nonNull(userMusic)) {
+            wrapper.setVideoFilePath(userMusic.getVideoUrl());
+        }
+        MusicPracticeRecordWrapper.MusicPracticeRecord from = MusicPracticeRecordWrapper.MusicPracticeRecord.from(JSON.toJSONString(wrapper));
+
+        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(Integer.parseInt(wrapper.getMusicSheetId()));
+        if (musicSheet != null) {
+            from.setRhythmFlag(musicSheet.getEvaluationStandard() != EEvaluationStandard.FREQUENCY);
+        }
+
+        return R.from(from);
+    }
+
+
+    /**
+     * 新增
+     * @param record MusicPracticeRecordVo.MusicPracticeRecord
+     * @return R<Boolean>
+     */
+    @ApiOperation(value = "新增", notes = "曲目练习记录- 传入 MusicPracticeRecordVo.MusicPracticeRecord")
+    @PostMapping("/save")
+    public R<String> add(@Validated(ValidGroups.Add.class) @RequestBody MusicPracticeRecordWrapper.MusicPracticeRecord record) {
+
+        Integer userId = sysUserService.getUserId();
+        record.userId(String.valueOf(userId)).clientType(ClientEnum.STUDENT.getCode());
+
+        // 新增数据
+        MusicPracticeRecordWrapper.MusicPracticeRecord from = MusicPracticeRecordWrapper.MusicPracticeRecord.from(record.jsonString());
+        if (record.getDelFlag() !=null && record.getDelFlag()) {
+            from.setDelFlag(false);
+            from.setHiddenFlag(true);
+        }
+
+        return R.from(musicPracticeRecordService.add(from));
+    }
+
+    @ApiOperation(value = "用户最后一次评测数据")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "recordId", value = "曲目练习记录Id", dataType = "long")
+    })
+    @GetMapping("/getLastEvaluationMusicalNotesPlayStats")
+    public Object getLastEvaluationMusicalNotesPlayStats(Long recordId){
+        return R.from(musicPracticeRecordService.getLastEvaluationMusicalNotesPlayStats(recordId));
+    }
+
+    @ApiOperation(value = "上传音频文件")
+    @PostMapping("videoUpload")
+    public R<Boolean> videoUpload( @RequestBody MusicPracticeRecordWrapper.MusicPracticeRecord record){
+
+        if (Objects.isNull(record.getId())) {
+            throw BizException.from("recordId不能为空");
+        }
+        if (Objects.isNull(record.getVideoFilePath())) {
+            throw BizException.from("videoUrl不能为空");
+        }
+
+        MusicPracticeRecordWrapper.Entity practiceRecord = musicPracticeRecordService.getById(record.getId());
+        if (Objects.isNull(practiceRecord)) {
+            throw BizException.from("记录不存在");
+        }
+
+        practiceRecord.setVideoFilePath(record.getVideoFilePath());
+        musicPracticeRecordService.update(practiceRecord);
+
+        return R.from(true);
+    }
+
+}

+ 172 - 0
mec-application/src/main/java/com/ym/mec/student/controller/MusicSheetController.java

@@ -0,0 +1,172 @@
+package com.ym.mec.student.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.dayaedu.cbs.common.enums.school.EMusicSheetType;
+import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
+import com.microsvc.toolkit.common.response.template.R;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.ClientEnum;
+import com.ym.mec.biz.dal.enums.ClientTypeEnum;
+import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
+import com.ym.mec.biz.dal.wrapper.InstrumentWrapper;
+import com.ym.mec.biz.dal.wrapper.MusicSheetWrapper;
+import com.ym.mec.biz.service.InstrumentService;
+import com.ym.mec.biz.service.StudentService;
+import com.ym.mec.biz.service.SysMusicScoreService;
+import com.ym.mec.biz.service.SysUserService;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.vo.MusicSheetVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("${app-config.url.student:}/musicSheet")
+@Api(tags = "曲谱表")
+public class MusicSheetController {
+
+    @Autowired
+    private SysMusicScoreService musicSheetService;
+
+    @Autowired
+    private InstrumentService instrumentService;
+
+
+    @Resource
+    private SysUserService sysUserService;
+
+    @Autowired
+    private StudentService studentService;
+
+    /**
+     * 查询单条
+     *
+     * @param id 详情ID
+     * @return R<MusicSheetVo.MusicSheet>
+     */
+    @ApiOperation(value = "查询内容平台数据")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "id", value = "id", dataType = "long")
+    })
+    @GetMapping("/cbsDetail/{id}")
+    public R<MusicSheetVo.MusicSheetDetail> cbsDetail(@PathVariable("id") Integer id) {
+        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(id);
+        musicSheet.setBizId(Long.valueOf(id));
+
+        MusicSheetVo.MusicSheetDetail musicSheetDetail = JSON.parseObject(JSON.toJSONString(musicSheet), MusicSheetVo.MusicSheetDetail.class);
+        SysMusicScore detail = musicSheetService.get(id);
+        if (detail == null) {
+            musicSheetDetail.setBizMusicCategoryId(null);
+        } else {
+            // 设置曲目付费类型
+            musicSheetDetail.setPaymentType(StringUtils.isBlank(detail.getRankIds()) ? "FREE" : "VIP");
+            // 设置业务端曲目分类
+            musicSheetDetail.setBizMusicCategoryId(detail.getCategoriesId() == null ? null : detail.getCategoriesId().longValue());
+            musicSheetDetail.setScoreType(detail.getScoreType());
+            musicSheetDetail.setIsConvertibleScore(detail.getIsConvertibleScore());
+        }
+
+        // 如果是合奏 并且乐器ID = 2268
+        musicSheetDetail.setSpecialPercussionFlag(false);
+        if ("2268".equals(musicSheetDetail.getMusicalInstrumentIds()) && musicSheetDetail.getMusicSheetType() == EMusicSheetType.CONCERT) {
+            musicSheetDetail.setSpecialPercussionFlag(true);
+        }
+
+        // 设置乐器信息
+        if (StringUtils.isNotBlank(musicSheetDetail.getMusicalInstrumentIds())) {
+            List<Integer> instrumentIds = Arrays.stream(musicSheetDetail.getMusicalInstrumentIds().split(","))
+                .map(Integer::parseInt).collect(Collectors.toList());
+
+            if (CollectionUtils.isNotEmpty(instrumentIds) && CollectionUtils.isNotEmpty(musicSheetDetail.getMusicalInstruments())) {
+                Map<Integer, InstrumentWrapper.Instrument> instrumentMap = instrumentService.getMapByIds(instrumentIds);
+                for (CbsMusicSheetWrapper.MusicalInstrument musicalInstrument : musicSheetDetail.getMusicalInstruments()) {
+                    InstrumentWrapper.Instrument instrument = instrumentMap.get(musicalInstrument.getId());
+                    if (instrument != null) {
+                        musicalInstrument.setOrientation(instrument.getOrientation());
+                    }
+
+                }
+            }
+        }
+        MusicSheetWrapper.ClientMusicSheetInfoQuery query = new MusicSheetWrapper.ClientMusicSheetInfoQuery();
+        query.setUserType(ClientEnum.STUDENT);
+        query.setUserId(sysUserService.getUserId());
+        query.setMusicSheetId(id);
+        MusicSheetWrapper.ClientMusicSheetInfo clientMusicSheetInfo = musicSheetService.queryMusicScoreDetail(query);
+        if (clientMusicSheetInfo != null) {
+            musicSheetDetail.setUseStatus(clientMusicSheetInfo.getUseStatus());
+        } else {
+            musicSheetDetail.setUseStatus("LOCK");
+        }
+        return R.from(musicSheetDetail);
+    }
+
+    @ApiOperation(value = "查询分页", notes = "曲谱表- 传入 MusicSheetVo.MusicSheetQuery")
+    @PostMapping("/page")
+    public R<PageInfo<MusicSheetWrapper.MusicSheet>> page(@RequestBody MusicSheetVo.MusicSheetQuery query) {
+
+        SysExamSongQueryInfo queryInfo = new SysExamSongQueryInfo();
+
+        Integer userId = sysUserService.getUserId();
+        Student student = studentService.get(userId);
+        if(query.getMusicSheetCategoriesId() != null) {
+            queryInfo.setCategoriesId(query.getMusicSheetCategoriesId().toString());
+        }
+        if (query.getMusicalInstrumentId() != null) {
+            // 乐器转换为声部
+            Instrument instrument = instrumentService.getById(query.getMusicalInstrumentId());
+            if (instrument != null) {
+                queryInfo.setSubjectId(instrument.getSubjectId());
+            }
+        } else if (StringUtils.isNotBlank(student.getSubjectIdList())){
+//            queryInfo.setSubjectId(Integer.parseInt(student.getSubjectIdList()));
+        }
+        queryInfo.setPage(query.getPage());
+        queryInfo.setRows(query.getRows());
+        queryInfo.setName(query.getName());
+        queryInfo.setType("COMMON");
+        queryInfo.setClientFlag(true);
+        queryInfo.setClientType(ClientTypeEnum.SMART_PRACTICE);
+        queryInfo.setRecentFlag(query.getRecentFlag());
+        queryInfo.setUserId(userId);
+        queryInfo.setUserType(ClientEnum.STUDENT);
+        queryInfo.setClientId(ClientEnum.STUDENT.getCode().toLowerCase());
+        PageInfo<SysMusicScore> sysMusicScorePageInfo1 = musicSheetService.queryMusicScorePageInfo(queryInfo);
+        PageInfo<MusicSheetWrapper.MusicSheet> convert = sysMusicScorePageInfo1.convert(o -> {
+            MusicSheetWrapper.MusicSheet musicSheet = new MusicSheetWrapper.MusicSheet();
+            musicSheet.setId(o.getId().toString());
+            musicSheet.setMusicSheetCategoriesId(o.getCategoriesId());
+            musicSheet.setMusicSheetName(o.getName());
+            musicSheet.setTitleImg(o.getTitleImg());
+            musicSheet.setComposer(o.getComposer());
+            musicSheet.setCbsMusicSheetId(o.getCbsMusicSheetId());
+            musicSheet.setUsedNum(0L);
+            musicSheet.setPaymentType(StringUtils.isNotBlank(o.getRankIds()) && o.getRankIds().contains("1") ? "VIP" : "FREE");
+            musicSheet.setAudioPlayTypes(o.getAudioPlayTypes());
+            musicSheet.setUseStatus(o.getUseStatus());
+
+            return musicSheet;
+        });
+
+
+        return R.from(convert);
+    }
+}

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

@@ -5,9 +5,12 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.RegisterUserDto;
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.entity.StudentPreRegistration;
+import com.ym.mec.biz.dal.wrapper.CloudTeacherOrderWrapper;
+import com.ym.mec.biz.service.CloudTeacherOrderService;
 import com.ym.mec.biz.service.StudentService;
 import com.ym.mec.biz.service.SysUserService;
 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;
@@ -18,7 +21,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
 @RequestMapping("${app-config.url.student:}/student")
 @Api(tags = "学生服务")
@@ -29,8 +34,10 @@ public class StudentController extends BaseController {
     private SysUserFeignService sysUserFeignService;
 	@Resource
 	private SysUserService sysUserService;
-    @Autowired
+    @Resource
     private StudentService studentService;
+    @Resource
+    private CloudTeacherOrderService cloudTeacherOrderService;
 
     @ApiOperation("注册")
     @PostMapping(value = "/registering")
@@ -75,4 +82,13 @@ public class StudentController extends BaseController {
 		studentService.update(student);
 		return succeed();
 	}
+
+	@ApiOperation("获取学员生效中的会员")
+	@PostMapping(value = "/getEffectiveMember")
+	public HttpResponseResult<List<CloudTeacherOrderWrapper.StudentMemberDetail>> getEffectiveMember() {
+		Integer userId = sysUserService.getUserId();
+		List<Integer> userIds = new ArrayList<>();
+		userIds.add(userId);
+		return succeed(cloudTeacherOrderService.getEffectiveCloudTeacherOrder(userIds));
+	}
 }

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

@@ -118,7 +118,7 @@ public class StudentCourseHomeworkController extends BaseController {
     public HttpResponseResult<CourseHomeworkWrapper.CourseHomeworkList>
             findStudentHomeworkRecordDetail(CourseHomeworkWrapper.StudentCourseHomeworkQuery query){
         query.setUserId(sysUserService.getUserId().longValue());
-        return succeed(studentCourseHomeworkService.findStudentHomeworkRecordDetail(query));
+        return studentCourseHomeworkService.findStudentHomeworkRecordDetail(query);
     }
 
     @ApiOperation(value = "获取学生作业课件列表")
@@ -139,6 +139,16 @@ public class StudentCourseHomeworkController extends BaseController {
         return succeed(studentCourseHomeworkService.addStudentHomeworkRecord(query));
     }
 
+
+
+    @ApiOperation(value = "添加作业练习记录")
+    @PostMapping(value = "/addStudentHomeworkRecord")
+    public HttpResponseResult<Boolean>
+    addStudentHomeworkRecordPost(@RequestBody CourseHomeworkWrapper.AddStudentHomeworkRecord query){
+        query.setUserId(sysUserService.getUserId().longValue());
+        return succeed(studentCourseHomeworkService.addStudentHomeworkRecord(query));
+    }
+
     @ApiOperation(value = "分页查询作业列表")
     @PostMapping(value = "/queryPage")
     public Object queryPage(@RequestBody(required = false) CourseHomeworkQueryInfo queryInfo){

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

@@ -1,7 +1,8 @@
 package com.ym.mec.student.controller;
 
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
 import com.microsvc.toolkit.middleware.oss.wrapper.OssWrapper;
-import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.CloudTeacherOrderDao;
 import com.ym.mec.biz.dal.dto.CashAccountDetail;
@@ -20,14 +21,11 @@ import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
 import com.ym.mec.util.upload.UploadUtil;
 import io.swagger.annotations.*;
-import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -35,6 +33,8 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Api(tags = "学生管理")
@@ -82,6 +82,12 @@ public class StudentManageController extends BaseController {
     @Autowired
     private ImGroupCoreService imGroupCoreService;
 
+    @Autowired
+    private CloudTeacherOrderService cloudTeacherOrderService;
+
+    @Autowired
+    private InstrumentService instrumentService;
+
     private final static Logger LOGGER = LoggerFactory.getLogger(StudentManageController.class);
 
     @Autowired
@@ -161,20 +167,15 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "获取学员基本信息")
     @GetMapping("student/queryUserInfo")
 	public Object queryUserInfo(String platform) {
-		SysUser user = sysUserService.getUser();
-		Student student = studentService.get(user.getId());
-		student.setId(user.getId());
-		student.setUsername(user.getUsername());
-		student.setAvatar(user.getAvatar());
-		student.setPhone(user.getPhone());
-		student.setCurrentClass(user.getCurrentClass());
-		student.setCurrentGrade(user.getCurrentGrade());
-		student.setBirthdate(user.getBirthdate());
-		student.setGender(user.getGender());
-		student.setRealName(user.getRealName());
-		student.setIdCardNo(user.getIdCardNo());
-		student.setImToken(user.getImToken());
-		student.setOrganId(user.getOrganId());
+
+        SysUser user = sysUserService.getUser();
+        // 返回数据
+        Map<String, Object> datas = Maps.newHashMap();
+
+        // 查询学员基本信息
+        Student student = studentManageService.getStudentUserInfo(user.getId(), user, datas);
+        datas.put("student", student);
+
 
         // 注册IM用户Token
         try {
@@ -193,16 +194,6 @@ public class StudentManageController extends BaseController {
 			List<Subject> subjectList = subjectService.findBySubjectByIdList(student.getSubjectIdList());
 			student.setSubjectNames(subjectList.stream().map(t -> t.getName()).collect(Collectors.joining(",")));
 		}
-		
-		if(StringUtils.isNotBlank(student.getExtSubjectIds())){
-			List<Subject> subjectList = subjectService.findBySubjectByIdList(student.getExtSubjectIds());
-			
-			student.setExtSjectNamesMap(subjectList.stream().collect(Collectors.toMap(Subject :: getId, Subject :: getName)));
-		}
-
-		Map<String, Object> datas = new HashMap<String, Object>();
-		datas.put("student", student);
-		
         List<CloudTeacherOrder> dataList = cloudTeacherOrderDao.queryByUserIdAndStatus(user.getId(),1);
         if(dataList != null && dataList.size() > 0){
         	datas.put("isExistPendingMember", true);
@@ -228,31 +219,7 @@ public class StudentManageController extends BaseController {
 		} else {
 			datas.put("userPrivileges", memberRankPrivilegesService.queryByMemberRankId(student.getMemberRankSettingId()));
 		}
-		SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.HOMEWORK_OPEN_FLAG);
-		if (sysConfig == null) {
-			datas.put("homeworkOpenFlag", 0);
-		} else {
-			datas.put("homeworkOpenFlag", Integer.parseInt(sysConfig.getParanValue()));
-		}
-        // 获取会员等级图标
-        MemberRankSetting memberRankSetting = memberRankSettingService.get(student.getMemberRankSettingId());
-        if (memberRankSetting != null) {
-            student.setMemberRankImg(memberRankSetting.getIcon());
-        }
-        //是否是试用会员
-		if(student.getExperienceMemberRankSettingId() == null){
-            datas.put("isExperience", 0);
-        }else {
-            int i = DateUtil.daysBetween(student.getExperienceMembershipEndTime(),student.getMembershipEndTime());
-            if(i > 0){
-                datas.put("isExperience", 0);
-            }else {
-                datas.put("isExperience", 1);
-                if (memberRankSetting != null) {
-                    student.setMemberRankImg(memberRankSetting.getExperienceIcon());
-                }
-            }
-        }
+
 		return succeed(datas);
 	}
 

+ 32 - 11
mec-application/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -15,6 +15,8 @@ import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.StudentPaymentOrderQueryInfo;
+import com.ym.mec.biz.dal.vo.StudentPaymentOrderVo;
+import com.ym.mec.biz.dal.wrapper.CloudTeacherOrderWrapper;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -114,6 +116,8 @@ public class StudentOrderController extends BaseController {
     private HfMerchantConfigService hfMerchantConfigService;
     @Autowired
     private TempDirectorTrainingCampDetailService tempDirectorTrainingCampDetailService;
+    @Autowired
+    private MusicGroupPaymentCalenderMemberService musicGroupPaymentCalenderMemberService;
 
     @Value("${spring.profiles.active:dev}")
     private String profiles;
@@ -332,18 +336,32 @@ public class StudentOrderController extends BaseController {
                 musicGroupRegCalender.setMusicGroupPaymentCalenderCourseSettingsList(courseSettings);
                 //如果包含vip和网管,代表购买了活动包
                 List<Long> activityList = orderDetail1.stream().filter(e -> e.getType() == OrderDetailTypeEnum.VIP
-                        || e.getType() == OrderDetailTypeEnum.PRACTICE).map(e -> e.getStudentInstrumentId())
+                        || e.getType() == OrderDetailTypeEnum.PRACTICE).map(StudentPaymentOrderDetail::getStudentInstrumentId)
                         .collect(Collectors.toList());
-                if(activityList != null && activityList.size() > 0){
+                if(CollectionUtils.isNotEmpty(activityList)){
                     orderDetail.put("activity", musicGroupPaymentCalenderActivityService.findByActivityIds(activityList,musicGroupRegCalender.getId()));
                 }
             }
             orderDetail.put("calender", musicGroupRegCalender);
+            List<Long> ids = orderDetail1.stream().filter(e -> e.getType() == OrderDetailTypeEnum.CLOUD_TEACHER).map(StudentPaymentOrderDetail::getStudentInstrumentId).collect(Collectors.toList());
+            if(CollectionUtils.isNotEmpty(ids)){
+                List<MusicGroupPaymentCalenderMember> calenderMembers = musicGroupPaymentCalenderMemberService.findByIds(ids);
+                List<CloudTeacherOrderWrapper.StudentMemberOrderDetail> memberOrderDetails = new ArrayList<>();
+                for (MusicGroupPaymentCalenderMember calenderMember : calenderMembers) {
+                    CloudTeacherOrderWrapper.StudentMemberOrderDetail memberOrderDetail = new CloudTeacherOrderWrapper.StudentMemberOrderDetail();
+                    memberOrderDetail.setMemberRankId(calenderMember.getMemberRankSettingId());
+                    memberOrderDetail.setMemberRankName(calenderMember.getName());
+                    memberOrderDetail.setIntro(calenderMember.getIntro());
+                    memberOrderDetails.add(memberOrderDetail);
+                }
+                orderDetail.put("member", memberOrderDetails);
+            }
 
             //判断是否是系统收费
-            if (musicGroup.getCourseViewType() == CourseViewTypeEnum.MEMBER_FEE) {
+            /*if (musicGroup.getCourseViewType() == CourseViewTypeEnum.MEMBER_FEE) {
                 orderDetail.put("member", cloudTeacherOrderService.queryOrderInfoByOrderId(orderByOrderNo.getId()));
-            }
+            }else {
+            }*/
         } else if (orderByOrderNo.getGroupType().equals(GroupType.VIP) || orderByOrderNo.getGroupType().equals(GroupType.LIVE)) {
             if(orderByOrderNo.getType() == OrderTypeEnum.ACTIVITY){
                 orderDetail.put("activity", vipGroupActivityService.getDao().queryByIds(orderByOrderNo.getActivityId()));
@@ -415,12 +433,15 @@ public class StudentOrderController extends BaseController {
             }
             orderDetail.put("detail", vipGroupActivities);
         } else if (orderByOrderNo.getGroupType().equals(GroupType.MEMBER)) {
-            CloudTeacherOrderDto orderDto = cloudTeacherOrderService.queryOrderInfoByOrderId(orderByOrderNo.getId());
-            orderDetail.put("detail", orderDto);
-            if (orderDto != null) {
-                Map<String, Object> map = new HashMap<>(1);
-                map.put("paymentOrderId", orderDto.getCloudTeacherOrder().getOrderId());
-                orderDetail.put("couponList", sysCouponCodeDao.querySysCouponUseList(map));
+            List<CloudTeacherOrderDto> cloudTeacherOrderDtos = cloudTeacherOrderService.queryOrderInfoByOrderId(orderByOrderNo.getId());
+            if(CollectionUtils.isNotEmpty(cloudTeacherOrderDtos)){
+                CloudTeacherOrderDto orderDto = cloudTeacherOrderDtos.get(0);
+                orderDetail.put("detail", orderDto);
+                if (orderDto != null) {
+                    Map<String, Object> map = new HashMap<>(1);
+                    map.put("paymentOrderId", orderDto.getCloudTeacherOrder().getOrderId());
+                    orderDetail.put("couponList", sysCouponCodeDao.querySysCouponUseList(map));
+                }
             }
         } else if (orderByOrderNo.getGroupType().equals(GroupType.LIVE_BUY)) {
             orderDetail.put("detail", vipGroupActivityService.getDao().queryByIds(orderByOrderNo.getActivityId()));
@@ -911,7 +932,7 @@ public class StudentOrderController extends BaseController {
      * 学生端查询订单详情
      */
     @GetMapping("/queryOrderDetail")
-    public Object queryOrderDetail(String orderNo) {
+    public HttpResponseResult<StudentPaymentOrderVo> queryOrderDetail(String orderNo) {
         return succeed(studentPaymentOrderService.queryOrderDetail(orderNo));
     }
 }

+ 13 - 0
mec-application/src/main/java/com/ym/mec/student/controller/SysConfigController.java

@@ -3,11 +3,13 @@ package com.ym.mec.student.controller;
 import com.ym.mec.biz.dal.entity.SysConfig;
 import com.ym.mec.biz.service.SysConfigService;
 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.apache.commons.lang3.StringUtils;
 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;
 
@@ -43,4 +45,15 @@ public class SysConfigController extends BaseController {
 		}
 		return succeed(sysConfigService.findByParamName(paramName));
 	}
+
+
+
+    @ApiOperation(value = "查询参数(多个逗号分隔)")
+    @PostMapping(value = "queryByParamNames")
+    public HttpResponseResult<List<SysConfig>> queryByParamNames(String paramName) {
+        if(StringUtils.isBlank(paramName)){
+            return failed("参数不能为空");
+        }
+        return succeed(sysConfigService.findByParamNames(paramName));
+    }
 }

+ 10 - 0
mec-application/src/main/java/com/ym/mec/student/controller/SysMusicScoreAccompanimentController.java

@@ -2,9 +2,11 @@ package com.ym.mec.student.controller;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.enums.ClientEnum;
 import com.ym.mec.biz.dal.enums.ClientTypeEnum;
 import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
 import com.ym.mec.biz.service.SysMusicScoreAccompanimentService;
+import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.controller.BaseController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -13,6 +15,8 @@ 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:}/sysMusicScoreAccompaniment")
 @Api(tags = "曲库服务")
 @RestController
@@ -23,9 +27,15 @@ public class SysMusicScoreAccompanimentController extends BaseController {
     @Autowired
     private SysUserFeignService sysUserFeignService;
 
+    @Resource
+    private SysUserService sysUserService;
+
     @ApiOperation(value = "分页查询")
     @GetMapping("/queryPage")
     public Object queryPage(SysExamSongQueryInfo queryInfo) {
+        // 设置用户ID
+        queryInfo.setUserId(sysUserService.getUserId());
+        queryInfo.setUserType(ClientEnum.STUDENT);
         queryInfo.setType("COMMON");
         if(queryInfo.getClientType() == null){
             queryInfo.setClientType(ClientTypeEnum.SMART_PRACTICE);

+ 21 - 0
mec-application/src/main/java/com/ym/mec/student/controller/SysMusicScoreController.java

@@ -1,12 +1,16 @@
 package com.ym.mec.student.controller;
 
+import com.ym.mec.biz.dal.enums.ClientEnum;
 import com.ym.mec.biz.dal.enums.ClientTypeEnum;
 import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
+import com.ym.mec.biz.dal.wrapper.MusicSheetWrapper;
 import com.ym.mec.biz.service.SysMusicScoreService;
+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.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -20,12 +24,29 @@ public class SysMusicScoreController extends BaseController {
     @Resource
     private SysMusicScoreService sysMusicScoreService;
 
+    @Resource
+    private SysUserService sysUserService;
     @ApiOperation(value = "分页查询")
     @GetMapping("/queryPage2")
     public Object queryPage2(SysExamSongQueryInfo queryInfo) {
+        Integer userId = sysUserService.getUserId();
+        queryInfo.setUserId(userId);
+        queryInfo.setUserType(ClientEnum.STUDENT);
         queryInfo.setType("COMMON");
         queryInfo.setClientFlag(true);
         queryInfo.setClientType(ClientTypeEnum.SMART_PRACTICE);
         return succeed(sysMusicScoreService.queryMusicScorePageInfo(queryInfo));
     }
+
+
+    @ApiOperation(value = "分页查询")
+    @GetMapping("/detail/{id}")
+    public Object queryPage2(@PathVariable Integer id) {
+        MusicSheetWrapper.ClientMusicSheetInfoQuery query = new MusicSheetWrapper.ClientMusicSheetInfoQuery();
+        query.setMusicSheetId(id);
+        query.setUserId(sysUserService.getUserId());
+        query.setUserType(ClientEnum.STUDENT);
+
+        return succeed(sysMusicScoreService.queryMusicScoreDetail(query));
+    }
 }

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

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.microsvc.toolkit.common.response.paging.PageInfo;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.microsvc.toolkit.common.response.template.R;
 import com.microsvc.toolkit.config.jwt.utils.JwtUserInfo;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
@@ -20,8 +21,10 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
 
 import java.util.Arrays;
 import java.util.List;
@@ -59,6 +62,22 @@ public class UserMusicController  extends BaseController {
         return succeed(records.get(0));
     }
 
+
+
+    @ApiOperation(value = "详情")
+    @GetMapping("/musicPracticeRecord/{id}")
+    public R<UserMusicWrapper.UserMusic> musicPracticeRecord(@PathVariable("id") Long id) {
+
+        UserMusicWrapper.UserMusicQuery build = UserMusicWrapper.UserMusicQuery.builder().musicPracticeRecordId(id).build();
+        IPage<UserMusicWrapper.UserMusic> pages = userMusicService.selectPage(QueryInfo.getPage(build), build);
+        List<UserMusicWrapper.UserMusic> records = pages.getRecords();
+        if (records.isEmpty()) {
+            return R.from(new UserMusicWrapper.UserMusic()).data(null);
+        }
+
+        return R.from(records.get(0));
+    }
+
     @ApiOperation(value = "查询分页", notes = "用户曲目作品- 传入 UserMusicWrapper.UserMusicQuery")
     @PostMapping("/page")
     public HttpResponseResult<PageInfo<UserMusicWrapper.UserMusic>> page(@RequestBody UserMusicWrapper.UserMusicQuery query) {

+ 98 - 0
mec-application/src/main/java/com/ym/mec/student/controller/open/OpenLessonExaminationController.java

@@ -0,0 +1,98 @@
+package com.ym.mec.student.controller.open;
+
+
+import com.ym.mec.biz.dal.dto.CourseHomeworkWrapper;
+import com.ym.mec.biz.dal.dto.LessonExaminationResultDto;
+import com.ym.mec.biz.dal.dto.StudentLessonExaminationDto;
+import com.ym.mec.biz.dal.dto.StudentLessonTrainingDetailWrapper;
+import com.ym.mec.biz.dal.entity.StudentCourseHomework;
+import com.ym.mec.biz.dal.entity.Subject;
+import com.ym.mec.biz.dal.enums.ELessonTrainingType;
+import com.ym.mec.biz.dal.page.LessonExaminationQueryInfo;
+import com.ym.mec.biz.dal.page.StudentLessonExaminationQueryInfo;
+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.springframework.util.CollectionUtils;
+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
+@RequestMapping("${app-config.url.student:}/open/")
+public class OpenLessonExaminationController extends BaseController {
+
+    @Resource
+    private LessonExaminationService lessonExaminationService;
+    @Resource
+    private StudentLessonExaminationService studentLessonExaminationService;
+    @Resource
+    private CourseHomeworkService courseHomeworkService;
+    @Resource
+    private StudentCourseHomeworkService studentCourseHomeworkService;
+    @Resource
+    private SubjectService subjectService;
+
+    @ApiOperation(value = "获取学员列表")
+    @PostMapping("studentLessonExamination/queryPage")
+    public HttpResponseResult<PageInfo<StudentLessonExaminationDto>> queryPage(@RequestBody StudentLessonExaminationQueryInfo queryInfo) {
+        return succeed(studentLessonExaminationService.queryPage(queryInfo));
+    }
+
+    @ApiOperation(value = "获取单个作业")
+    @GetMapping("lessonExamination/getOne")
+    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 = "获取作业详情")
+    @GetMapping(value = "courseHomework/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("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 (CollectionUtils.isEmpty(studentCourseHomeworkByCourseV2)) {
+            return succeed(new ArrayList<>());
+        }
+        // 获取声部
+        List<Integer> collect = studentCourseHomeworkByCourseV2.stream().map(StudentCourseHomework::getSubjectId).collect(
+                Collectors.toList());
+
+        return succeed(subjectService.findBySubjectByIdList(collect));
+
+    }
+
+}
+

+ 95 - 0
mec-application/src/main/java/com/ym/mec/student/controller/open/OpenMusicSheetController.java

@@ -0,0 +1,95 @@
+package com.ym.mec.student.controller.open;
+
+import com.alibaba.fastjson.JSON;
+import com.dayaedu.cbs.common.enums.school.EMusicSheetType;
+import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
+import com.microsvc.toolkit.common.response.template.R;
+import com.ym.mec.biz.dal.entity.SysMusicScore;
+import com.ym.mec.biz.dal.wrapper.InstrumentWrapper;
+import com.ym.mec.biz.service.InstrumentService;
+import com.ym.mec.biz.service.SysMusicScoreService;
+import com.ym.mec.vo.MusicSheetVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+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.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("${app-config.url.student:}/open/musicSheet")
+@Api(tags = "曲谱表")
+public class OpenMusicSheetController {
+
+    @Autowired
+    private SysMusicScoreService musicSheetService;
+
+    @Autowired
+    private InstrumentService instrumentService;
+
+    /**
+     * 查询单条
+     *
+     * @param id 详情ID
+     * @return R<MusicSheetVo.MusicSheet>
+     */
+    @ApiOperation(value = "查询内容平台数据")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "id", value = "id", dataType = "long")
+    })
+    @GetMapping("/cbsDetail/{id}")
+    public R<MusicSheetVo.OpenMusicSheetDetail> cbsDetail(@PathVariable("id") Integer id) {
+        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(id);
+        musicSheet.setBizId(Long.valueOf(id));
+
+        MusicSheetVo.MusicSheetDetail musicSheetDetail = JSON.parseObject(JSON.toJSONString(musicSheet), MusicSheetVo.MusicSheetDetail.class);
+        SysMusicScore detail = musicSheetService.get(id);
+        if (detail == null) {
+            musicSheetDetail.setBizMusicCategoryId(null);
+        } else {
+            // 设置曲目付费类型
+            musicSheetDetail.setPaymentType(StringUtils.isBlank(detail.getRankIds()) ? "FREE" : "VIP");
+            // 设置业务端曲目分类
+            musicSheetDetail.setBizMusicCategoryId(detail.getCategoriesId() == null ? null : detail.getCategoriesId().longValue());
+        }
+
+        // 如果是合奏 并且乐器ID = 2268
+        musicSheetDetail.setSpecialPercussionFlag(false);
+        if ("2268".equals(musicSheetDetail.getMusicalInstrumentIds()) && musicSheetDetail.getMusicSheetType() == EMusicSheetType.CONCERT) {
+            musicSheetDetail.setSpecialPercussionFlag(true);
+        }
+
+        // 设置乐器信息
+        if (StringUtils.isNotBlank(musicSheetDetail.getMusicalInstrumentIds())) {
+            List<Integer> instrumentIds = Arrays.stream(musicSheetDetail.getMusicalInstrumentIds().split(","))
+                .map(Integer::parseInt).collect(Collectors.toList());
+
+            if (CollectionUtils.isNotEmpty(instrumentIds) && CollectionUtils.isNotEmpty(musicSheetDetail.getMusicalInstruments())) {
+                Map<Integer, InstrumentWrapper.Instrument> instrumentMap = instrumentService.getMapByIds(instrumentIds);
+                for (CbsMusicSheetWrapper.MusicalInstrument musicalInstrument : musicSheetDetail.getMusicalInstruments()) {
+                    InstrumentWrapper.Instrument instrument = instrumentMap.get(musicalInstrument.getId());
+                    if (instrument != null) {
+                        musicalInstrument.setOrientation(instrument.getOrientation());
+                    }
+
+                }
+            }
+        }
+        return R.from(MusicSheetVo.OpenMusicSheetDetail.from(musicSheetDetail.jsonString()));
+    }
+
+}

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

@@ -68,7 +68,7 @@ public class ClassGroupController extends BaseController {
 
         // 乐团声部为空,取student的声部
         if (!CollectionUtils.isEmpty(courseStudents)) {
-            Set<Long> collect = courseStudents.stream().map(o -> o.getUserId()).map(o -> o.longValue()).collect(Collectors.toSet());
+            Set<Long> collect = courseStudents.stream().map(BasicUserDto::getUserId).map(Integer::longValue).collect(Collectors.toSet());
 
             Map<Integer, StudentSubjectDto> subjectDtoMap = subjectService.getSubjectByStudentId(collect);
             courseStudents.forEach(studentAttendanceViewDto -> {

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

@@ -139,7 +139,7 @@ public class ExtracurricularExercisesController extends BaseController {
 
     @ApiOperation(value = "获取待布置学员列表")
     @GetMapping("/getDontServeStudents")
-    public HttpResponseResult getDontServeStudents(String search, String musicGroupId, Long classGroupId, Integer subjectId,Integer hasMember,String studentIds){
+    public HttpResponseResult<List<BasicUserDto>> getDontServeStudents(String search, String musicGroupId, Long classGroupId, Integer subjectId,Integer hasMember,String studentIds){
         return succeed(extracurricularExercisesService.getDontServeStudents(sysUserService.getUserId(), search, musicGroupId, classGroupId, subjectId,hasMember,studentIds));
     }
 

+ 18 - 1
mec-application/src/main/java/com/ym/mec/teacher/controller/LessonCoursewareController.java

@@ -6,10 +6,13 @@ import com.dayaedu.cbs.openfeign.client.CoursewareFeignService;
 import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsLessonCoursewareDetailWrapper;
 import com.dayaedu.cbs.openfeign.wrapper.courseware.CbsLessonCoursewareWrapper;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.microsvc.toolkit.common.response.template.R;
+import com.microsvc.toolkit.config.jwt.utils.JwtUserInfo;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.entity.Subject;
 import com.ym.mec.biz.dal.entity.Teacher;
+import com.ym.mec.biz.dal.enums.ClientEnum;
 import com.ym.mec.biz.dal.wrapper.LessonCoursewareWrapper;
 import com.ym.mec.biz.service.CbsMusicScoreCategoriesService;
 import com.ym.mec.biz.service.LessonCoursewareService;
@@ -23,7 +26,9 @@ 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.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
@@ -90,7 +95,11 @@ public class LessonCoursewareController extends BaseController {
 		SysUser sysUser = sysUserService.getUser();
 		String teachingMaterialIds = organizationService.getTeachingMaterialIds(sysUser.getOrganId().toString(),sysUser.getTenantId());
 		List<Integer> categoryIdList = cbsMusicScoreCategoriesService.getAllCategoryIdList(teachingMaterialIds);
-		return succeed(lessonCoursewareService.getLessonCourseDetail(id,categoryIdList));
+        LessonCoursewareWrapper.LessonCoursewareDetailQuery query = new LessonCoursewareWrapper.LessonCoursewareDetailQuery();
+        query.setLessonCoursewareDetailId(id);
+        query.setUserType(ClientEnum.TEACHER);
+        query.setTenantCategoriesIdList(categoryIdList);
+		return succeed(lessonCoursewareService.getLessonCourseDetail(query));
 	}
 
 	@ApiOperation(value = "获取课件关联的声部列表")
@@ -98,4 +107,12 @@ public class LessonCoursewareController extends BaseController {
 	public HttpResponseResult<List<Subject>> getLessonCoursewareSubjectList(){
 		return succeed(lessonCoursewareService.getDao().getLessonCoursewareSubjectList());
 	}
+
+	@ApiOperation(value = "关联课程类型")
+	@PostMapping("/refLevel")
+	public HttpResponseResult<List<LessonCoursewareWrapper.RefLevelDetailInfo>> refLevel(@RequestBody LessonCoursewareWrapper.RefLevelQuery query) {
+		query.setTeacherId(sysUserService.getUserId());
+        query.setClient(ClientEnum.TEACHER);
+		return succeed(lessonCoursewareService.refLevel(query));
+	}
 }

+ 140 - 0
mec-application/src/main/java/com/ym/mec/teacher/controller/MusicPracticeRecordController.java

@@ -0,0 +1,140 @@
+package com.ym.mec.teacher.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.dayaedu.cbs.common.enums.music.EEvaluationStandard;
+import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
+import com.google.common.collect.Lists;
+import com.microsvc.toolkit.common.response.template.R;
+import com.microsvc.toolkit.common.webportal.exception.BizException;
+import com.microsvc.toolkit.config.validator.group.ValidGroups;
+import com.ym.mec.biz.dal.entity.UserMusic;
+import com.ym.mec.biz.dal.enums.ClientEnum;
+import com.ym.mec.biz.dal.wrapper.MusicPracticeRecordWrapper;
+import com.ym.mec.biz.service.MusicPracticeRecordService;
+import com.ym.mec.biz.service.SysMusicScoreService;
+import com.ym.mec.biz.service.SysUserService;
+import com.ym.mec.biz.service.UserMusicService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.math.BigDecimal;
+import java.util.Map;
+import java.util.Objects;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("${app-config.url.teacher:}/musicPracticeRecord")
+@Api(tags = "曲目练习记录")
+public class MusicPracticeRecordController {
+
+    @Autowired
+    private MusicPracticeRecordService musicPracticeRecordService;
+
+    @Autowired
+    private UserMusicService userMusicService;
+
+    @Autowired
+    private SysMusicScoreService musicSheetService;
+
+    @Autowired
+    private SysUserService sysUserService;
+
+    /**
+     * 查询单条
+     * @param id 详情ID
+     * @return R<MusicPracticeRecordVo.MusicPracticeRecord>
+     */
+    @ApiOperation(value = "详情", notes = "曲目练习记录-根据详情ID查询单条, 传入id")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "id", dataType = "long")
+    })
+    @GetMapping("/detail/{id}")
+    public R<MusicPracticeRecordWrapper.MusicPracticeRecord> detail(@PathVariable("id") Long id) {
+
+        MusicPracticeRecordWrapper.Entity wrapper = musicPracticeRecordService.detail(id);
+
+        if (wrapper == null) {
+            throw new BizException("记录不存在");
+        }
+
+        // 上传过作品,用作品视频路径覆盖上传视频路径
+        // ID集合
+        Map<Long, UserMusic> userMusicMap = userMusicService.getMapByMusicPracticeRecordIds(Lists.newArrayList(Long.parseLong(wrapper.getId())));
+
+        UserMusic userMusic = userMusicMap.get(Long.parseLong(wrapper.getId()));
+        if (Objects.nonNull(userMusic)) {
+            wrapper.setVideoFilePath(userMusic.getVideoUrl());
+        }
+        MusicPracticeRecordWrapper.MusicPracticeRecord from = MusicPracticeRecordWrapper.MusicPracticeRecord.from(JSON.toJSONString(wrapper));
+
+        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(Integer.parseInt(wrapper.getMusicSheetId()));
+        if (musicSheet != null) {
+            from.setRhythmFlag(musicSheet.getEvaluationStandard() != EEvaluationStandard.FREQUENCY);
+        }
+
+        return R.from(from);
+    }
+
+
+    /**
+     * 新增
+     * @param record MusicPracticeRecordVo.MusicPracticeRecord
+     * @return R<Boolean>
+     */
+    @ApiOperation(value = "新增", notes = "曲目练习记录- 传入 MusicPracticeRecordVo.MusicPracticeRecord")
+    @PostMapping("/save")
+    public R<String> add(@Validated(ValidGroups.Add.class) @RequestBody MusicPracticeRecordWrapper.MusicPracticeRecord record) {
+
+        Integer userId = sysUserService.getUserId();
+        record.userId(String.valueOf(userId)).clientType(ClientEnum.TEACHER.getCode());
+
+        // 新增数据
+        MusicPracticeRecordWrapper.MusicPracticeRecord from = MusicPracticeRecordWrapper.MusicPracticeRecord.from(record.jsonString());
+        if (record.getDelFlag() !=null && record.getDelFlag()) {
+            from.setDelFlag(false);
+            from.setHiddenFlag(true);
+        }
+
+        return R.from(musicPracticeRecordService.add(from));
+    }
+
+    @ApiOperation(value = "用户最后一次评测数据")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "recordId", value = "曲目练习记录Id", dataType = "long")
+    })
+    @GetMapping("/getLastEvaluationMusicalNotesPlayStats")
+    public Object getLastEvaluationMusicalNotesPlayStats(Long recordId){
+        return R.from(musicPracticeRecordService.getLastEvaluationMusicalNotesPlayStats(recordId));
+    }
+
+    @ApiOperation(value = "上传音频文件")
+    @PostMapping("videoUpload")
+    public R<Boolean> videoUpload( @RequestBody MusicPracticeRecordWrapper.MusicPracticeRecord record){
+
+        if (Objects.isNull(record.getId())) {
+            throw BizException.from("recordId不能为空");
+        }
+        if (Objects.isNull(record.getVideoFilePath())) {
+            throw BizException.from("videoUrl不能为空");
+        }
+
+        MusicPracticeRecordWrapper.Entity practiceRecord = musicPracticeRecordService.getById(record.getId());
+        if (Objects.isNull(practiceRecord)) {
+            throw BizException.from("记录不存在");
+        }
+
+        practiceRecord.setVideoFilePath(record.getVideoFilePath());
+        musicPracticeRecordService.update(practiceRecord);
+
+        return R.from(true);
+    }
+
+}

+ 178 - 0
mec-application/src/main/java/com/ym/mec/teacher/controller/MusicSheetController.java

@@ -0,0 +1,178 @@
+package com.ym.mec.teacher.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.dayaedu.cbs.common.enums.school.EMusicSheetType;
+import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
+import com.microsvc.toolkit.common.response.template.R;
+import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.entity.Instrument;
+import com.ym.mec.biz.dal.entity.SysMusicScore;
+import com.ym.mec.biz.dal.entity.Teacher;
+import com.ym.mec.biz.dal.enums.ClientEnum;
+import com.ym.mec.biz.dal.enums.ClientTypeEnum;
+import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
+import com.ym.mec.biz.dal.wrapper.InstrumentWrapper;
+import com.ym.mec.biz.dal.wrapper.MusicSheetWrapper;
+import com.ym.mec.biz.service.InstrumentService;
+import com.ym.mec.biz.service.SysMusicScoreService;
+import com.ym.mec.biz.service.SysUserService;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.vo.MusicSheetVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+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.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("${app-config.url.teacher:}/musicSheet")
+@Api(tags = "曲谱表")
+public class MusicSheetController {
+
+    @Autowired
+    private SysMusicScoreService musicSheetService;
+
+    @Autowired
+    private InstrumentService instrumentService;
+
+    @Resource
+    private TeacherDao teacherDao;
+    @Resource
+    private SysUserService sysUserService;
+
+    /**
+     * 查询单条
+     *
+     * @param id 详情ID
+     * @return R<MusicSheetVo.MusicSheet>
+     */
+    @ApiOperation(value = "查询内容平台数据")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "id", value = "id", dataType = "long")
+    })
+    @GetMapping("/cbsDetail/{id}")
+    public R<MusicSheetVo.MusicSheetDetail> cbsDetail(@PathVariable("id") Integer id) {
+        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(id);
+        musicSheet.setBizId(Long.valueOf(id));
+
+        MusicSheetVo.MusicSheetDetail musicSheetDetail = JSON.parseObject(JSON.toJSONString(musicSheet), MusicSheetVo.MusicSheetDetail.class);
+        SysMusicScore detail = musicSheetService.get(id);
+        if (detail == null) {
+            musicSheetDetail.setBizMusicCategoryId(null);
+        } else {
+            // 设置曲目付费类型
+            musicSheetDetail.setPaymentType(StringUtils.isBlank(detail.getRankIds()) ? "FREE" : "VIP");
+            // 设置业务端曲目分类
+            musicSheetDetail.setBizMusicCategoryId(detail.getCategoriesId() == null ? null : detail.getCategoriesId().longValue());
+            musicSheetDetail.setScoreType(detail.getScoreType());
+            musicSheetDetail.setIsConvertibleScore(detail.getIsConvertibleScore());
+        }
+
+        // 如果是合奏 并且乐器ID = 2268
+        musicSheetDetail.setSpecialPercussionFlag(false);
+        if ("2268".equals(musicSheetDetail.getMusicalInstrumentIds()) && musicSheetDetail.getMusicSheetType() == EMusicSheetType.CONCERT) {
+            musicSheetDetail.setSpecialPercussionFlag(true);
+        }
+
+        // 设置乐器信息
+        if (StringUtils.isNotBlank(musicSheetDetail.getMusicalInstrumentIds())) {
+            List<Integer> instrumentIds = Arrays.stream(musicSheetDetail.getMusicalInstrumentIds().split(","))
+                .map(Integer::parseInt).collect(Collectors.toList());
+
+            if (CollectionUtils.isNotEmpty(instrumentIds) && CollectionUtils.isNotEmpty(musicSheetDetail.getMusicalInstruments())) {
+                Map<Integer, InstrumentWrapper.Instrument> instrumentMap = instrumentService.getMapByIds(instrumentIds);
+                for (CbsMusicSheetWrapper.MusicalInstrument musicalInstrument : musicSheetDetail.getMusicalInstruments()) {
+                    InstrumentWrapper.Instrument instrument = instrumentMap.get(musicalInstrument.getId());
+                    if (instrument != null) {
+                        musicalInstrument.setOrientation(instrument.getOrientation());
+                    }
+
+                }
+            }
+        }
+        MusicSheetWrapper.ClientMusicSheetInfoQuery query = new MusicSheetWrapper.ClientMusicSheetInfoQuery();
+        query.setUserType(ClientEnum.TEACHER);
+        query.setUserId(sysUserService.getUserId());
+        query.setMusicSheetId(id);
+        MusicSheetWrapper.ClientMusicSheetInfo clientMusicSheetInfo = musicSheetService.queryMusicScoreDetail(query);
+        if (clientMusicSheetInfo != null) {
+            musicSheetDetail.setUseStatus(clientMusicSheetInfo.getUseStatus());
+        } else {
+            musicSheetDetail.setUseStatus("LOCK");
+        }
+        return R.from(musicSheetDetail);
+    }
+
+
+    @ApiOperation(value = "查询分页", notes = "曲谱表- 传入 MusicSheetVo.MusicSheetQuery")
+    @PostMapping("/page")
+    public R<PageInfo<MusicSheetWrapper.MusicSheet>> page(@RequestBody MusicSheetVo.MusicSheetQuery query) {
+
+        //判断用户是否可以访问云练习
+        Integer userId = sysUserService.getUserId();
+        Teacher teacher = teacherDao.get(userId);
+        if (teacher == null) {
+            throw new BizException("老师信息不存在");
+        }
+        //是否限制用户使用云教练
+        if(teacher.getCoursewareLimit()){
+            throw new BizException("您没有权限使用云练习");
+        }
+        SysExamSongQueryInfo queryInfo = new SysExamSongQueryInfo();
+
+        if(query.getMusicSheetCategoriesId() != null) {
+            queryInfo.setCategoriesId(query.getMusicSheetCategoriesId().toString());
+        }
+        if (query.getMusicalInstrumentId() != null) {
+            // 乐器转换为声部
+            Instrument instrument = instrumentService.getById(query.getMusicalInstrumentId());
+            if (instrument != null) {
+                queryInfo.setSubjectId(instrument.getSubjectId());
+            }
+        }
+
+        queryInfo.setPage(query.getPage());
+        queryInfo.setRows(query.getRows());
+        queryInfo.setName(query.getName());
+        queryInfo.setType("COMMON");
+        queryInfo.setClientFlag(true);
+        queryInfo.setClientType(ClientTypeEnum.SMART_PRACTICE);
+        queryInfo.setUserId(userId);
+        queryInfo.setUserType(ClientEnum.TEACHER);
+        queryInfo.setRecentFlag(query.getRecentFlag());
+        queryInfo.setClientId(ClientEnum.TEACHER.getCode().toLowerCase());
+        PageInfo<SysMusicScore> sysMusicScorePageInfo1 = musicSheetService.queryMusicScorePageInfo(queryInfo);
+        PageInfo<MusicSheetWrapper.MusicSheet> convert = sysMusicScorePageInfo1.convert(o -> {
+            MusicSheetWrapper.MusicSheet musicSheet = new MusicSheetWrapper.MusicSheet();
+            musicSheet.setId(o.getId().toString());
+            musicSheet.setMusicSheetCategoriesId(o.getCategoriesId());
+            musicSheet.setMusicSheetName(o.getName());
+            musicSheet.setTitleImg(o.getTitleImg());
+            musicSheet.setComposer(o.getComposer());
+            musicSheet.setCbsMusicSheetId(o.getCbsMusicSheetId());
+            musicSheet.setUsedNum(0L);
+            musicSheet.setPaymentType(StringUtils.isNotBlank(o.getRankIds()) && o.getRankIds().contains("1") ? "VIP" : "FREE");
+            musicSheet.setAudioPlayTypes(o.getAudioPlayTypes());
+            musicSheet.setUseStatus(o.getUseStatus());
+
+            return musicSheet;
+        });
+
+
+        return R.from(convert);
+    }
+}

+ 16 - 0
mec-application/src/main/java/com/ym/mec/teacher/controller/StudentController.java

@@ -1,6 +1,8 @@
 package com.ym.mec.teacher.controller;
 
+import com.google.common.collect.Maps;
 import com.ym.mec.biz.dal.dto.BaseMapDto;
+import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.entity.StudentAttendance;
 import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
@@ -98,6 +100,20 @@ public class StudentController extends BaseController {
         return succeed(studentManageService.findStudentMusicGroupsByUserId(userId));
     }
 
+    @ApiOperation(value = "根据学生ID获取学生信息")
+    @GetMapping("/queryUserInfo")
+    public Object queryUserInfo(@ApiParam(value = "学生编号", required = true) Integer userId){
+
+        // 返回数据
+        Map<String, Object> dataMap = Maps.newHashMap();
+
+        // 查询学员基本信息
+        Student student = studentManageService.getStudentUserInfo(userId, null, dataMap);
+        dataMap.put("student", student);
+
+        return succeed(dataMap);
+    }
+
     @ApiOperation(value = "获取老师关联的学员声部列表")
     @GetMapping("/queryStuSubjectId")
     public HttpResponseResult<List<BaseMapDto>> queryStuSubjectId(){

+ 16 - 0
mec-application/src/main/java/com/ym/mec/teacher/controller/UserMusicController.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.microsvc.toolkit.common.response.paging.PageInfo;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.microsvc.toolkit.common.response.template.R;
 import com.microsvc.toolkit.config.jwt.utils.JwtUserInfo;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
@@ -57,6 +58,21 @@ public class UserMusicController  extends BaseController {
         return succeed(records.get(0));
     }
 
+    @ApiOperation(value = "详情")
+    @GetMapping("/musicPracticeRecord/{id}")
+    public R<UserMusicWrapper.UserMusic> musicPracticeRecord(@PathVariable("id") Long id) {
+
+        UserMusicWrapper.UserMusicQuery build = UserMusicWrapper.UserMusicQuery.builder().musicPracticeRecordId(id).build();
+        IPage<UserMusicWrapper.UserMusic> pages = userMusicService.selectPage(QueryInfo.getPage(build), build);
+        List<UserMusicWrapper.UserMusic> records = pages.getRecords();
+        if (records.isEmpty()) {
+            return R.from(new UserMusicWrapper.UserMusic()).data(null);
+        }
+
+        return R.from(records.get(0));
+    }
+
+
     @ApiOperation(value = "查询分页", notes = "用户曲目作品- 传入 UserMusicWrapper.UserMusicQuery")
     @PostMapping("/page")
     public HttpResponseResult<PageInfo<UserMusicWrapper.UserMusic>> page(@RequestBody UserMusicWrapper.UserMusicQuery query) {

+ 95 - 0
mec-application/src/main/java/com/ym/mec/teacher/controller/open/OpenMusicSheetController.java

@@ -0,0 +1,95 @@
+package com.ym.mec.teacher.controller.open;
+
+import com.alibaba.fastjson.JSON;
+import com.dayaedu.cbs.common.enums.school.EMusicSheetType;
+import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
+import com.microsvc.toolkit.common.response.template.R;
+import com.ym.mec.biz.dal.entity.SysMusicScore;
+import com.ym.mec.biz.dal.wrapper.InstrumentWrapper;
+import com.ym.mec.biz.service.InstrumentService;
+import com.ym.mec.biz.service.SysMusicScoreService;
+import com.ym.mec.vo.MusicSheetVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+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.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("${app-config.url.teacher:}/open/musicSheet")
+@Api(tags = "曲谱表")
+public class OpenMusicSheetController {
+
+    @Autowired
+    private SysMusicScoreService musicSheetService;
+
+    @Autowired
+    private InstrumentService instrumentService;
+
+    /**
+     * 查询单条
+     *
+     * @param id 详情ID
+     * @return R<MusicSheetVo.MusicSheet>
+     */
+    @ApiOperation(value = "查询内容平台数据")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "id", value = "id", dataType = "long")
+    })
+    @GetMapping("/cbsDetail/{id}")
+    public R<MusicSheetVo.OpenMusicSheetDetail> cbsDetail(@PathVariable("id") Integer id) {
+        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(id);
+        musicSheet.setBizId(Long.valueOf(id));
+
+        MusicSheetVo.MusicSheetDetail musicSheetDetail = JSON.parseObject(JSON.toJSONString(musicSheet), MusicSheetVo.MusicSheetDetail.class);
+        SysMusicScore detail = musicSheetService.get(id);
+        if (detail == null) {
+            musicSheetDetail.setBizMusicCategoryId(null);
+        } else {
+            // 设置曲目付费类型
+            musicSheetDetail.setPaymentType(StringUtils.isBlank(detail.getRankIds()) ? "FREE" : "VIP");
+            // 设置业务端曲目分类
+            musicSheetDetail.setBizMusicCategoryId(detail.getCategoriesId() == null ? null : detail.getCategoriesId().longValue());
+        }
+
+        // 如果是合奏 并且乐器ID = 2268
+        musicSheetDetail.setSpecialPercussionFlag(false);
+        if ("2268".equals(musicSheetDetail.getMusicalInstrumentIds()) && musicSheetDetail.getMusicSheetType() == EMusicSheetType.CONCERT) {
+            musicSheetDetail.setSpecialPercussionFlag(true);
+        }
+
+        // 设置乐器信息
+        if (StringUtils.isNotBlank(musicSheetDetail.getMusicalInstrumentIds())) {
+            List<Integer> instrumentIds = Arrays.stream(musicSheetDetail.getMusicalInstrumentIds().split(","))
+                .map(Integer::parseInt).collect(Collectors.toList());
+
+            if (CollectionUtils.isNotEmpty(instrumentIds) && CollectionUtils.isNotEmpty(musicSheetDetail.getMusicalInstruments())) {
+                Map<Integer, InstrumentWrapper.Instrument> instrumentMap = instrumentService.getMapByIds(instrumentIds);
+                for (CbsMusicSheetWrapper.MusicalInstrument musicalInstrument : musicSheetDetail.getMusicalInstruments()) {
+                    InstrumentWrapper.Instrument instrument = instrumentMap.get(musicalInstrument.getId());
+                    if (instrument != null) {
+                        musicalInstrument.setOrientation(instrument.getOrientation());
+                    }
+
+                }
+            }
+        }
+        return R.from(MusicSheetVo.OpenMusicSheetDetail.from(musicSheetDetail.jsonString()));
+    }
+
+}

+ 107 - 0
mec-application/src/main/java/com/ym/mec/vo/MusicSheetAccompanimentVo.java

@@ -0,0 +1,107 @@
+package com.ym.mec.vo;
+
+import com.alibaba.fastjson.JSON;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 曲谱伴奏表
+ * 2022-12-07 10:16:58
+ */
+@ApiModel(value = "MusicSheetAccompanimentVo对象", description = "曲谱伴奏表查询视图对象")
+public class MusicSheetAccompanimentVo {
+
+    @Data
+    @ApiModel(" MusicSheetAccompanimentQuery-曲谱伴奏表")
+    public static class MusicSheetAccompanimentQuery implements QueryInfo {
+
+        @ApiModelProperty("当前页")
+        private Integer page;
+
+        @ApiModelProperty("分页行数")
+        private Integer rows;
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static MusicSheetAccompanimentQuery from(String json) {
+            return JSON.parseObject(json, MusicSheetAccompanimentQuery.class);
+        }
+    }
+
+    @Data
+    @ApiModel(" MusicSheetAccompaniment-曲谱伴奏表")
+    public static class MusicSheetAccompaniment {
+
+
+		@ApiModelProperty("主键")
+        private Long id;
+
+
+		@ApiModelProperty("曲谱ID")
+        private Long musicId;
+
+
+		@ApiModelProperty("声部")
+        private String musicSubject;
+
+
+		@ApiModelProperty("MP3原声音频文件URL")
+        private String audioFileUrl;
+
+
+		@ApiModelProperty("map节拍器伴奏")
+        private String metronomeUrl;
+
+
+		@ApiModelProperty("伴奏轨迹")
+        private String track;
+
+
+		@ApiModelProperty("排序号")
+        private Boolean sortNumber;
+
+
+		@ApiModelProperty("速度")
+        private String speed;
+
+        @ApiModelProperty("曲目缓存")
+        private String musicSvg;
+
+		@ApiModelProperty("创建人(老师或者是后台平台用户)")
+        private Long createBy;
+
+
+		@ApiModelProperty("创建时间")
+        private Date createTime;
+
+
+        @ApiModelProperty("五线谱PDF文件")
+        private String musicPdfUrl;
+
+
+        @ApiModelProperty("首调PDF文件")
+        private String firstPdfUrl;
+
+
+        @ApiModelProperty("固定调PDF文件")
+        private String jianPdfUrl;
+
+
+        @ApiModelProperty("音频类型,SING:演唱,PLAY:演奏")
+        private String audioPlayType;
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static MusicSheetAccompaniment from(String json) {
+            return JSON.parseObject(json, MusicSheetAccompaniment.class);
+        }
+    }
+
+}

+ 713 - 0
mec-application/src/main/java/com/ym/mec/vo/MusicSheetVo.java

@@ -0,0 +1,713 @@
+package com.ym.mec.vo;
+
+import com.alibaba.fastjson.JSON;
+import com.dayaedu.cbs.common.enums.music.EAudioType;
+import com.dayaedu.cbs.common.enums.music.EEvaluationStandard;
+import com.dayaedu.cbs.common.enums.music.EMusicAvailableType;
+import com.dayaedu.cbs.common.enums.music.EMusicPlayMode;
+import com.dayaedu.cbs.common.enums.music.EMusicSourceType;
+import com.dayaedu.cbs.common.enums.school.EMusicSheetType;
+import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.ym.mec.biz.dal.wrapper.InstrumentWrapper;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 曲谱表
+ * 2022-12-07 10:16:58
+ */
+@ApiModel(value = "MusicSheetVo对象", description = "曲谱表查询视图对象")
+public class MusicSheetVo {
+
+    @Data
+    @ApiModel(" MusicSheetQuery-曲谱表")
+    public static class MusicSheetQuery implements QueryInfo {
+
+        @ApiModelProperty("当前页")
+        private Integer page;
+
+        @ApiModelProperty("分页行数")
+        private Integer rows;
+
+        @ApiModelProperty("关键字匹配")
+        private String keyword;
+
+        @ApiModelProperty("仅匹配资源名称")
+        private String name;
+
+        @ApiModelProperty("声部Id")
+        private String musicSubject;
+
+        @ApiModelProperty("曲目乐器Id")
+        private Long musicalInstrumentId;
+
+        @ApiModelProperty("曲谱分类编号")
+        private Integer musicSheetCategoriesId;
+
+        private List<Integer> musicSheetCategoriesIdList;
+
+        @ApiModelProperty(value = "删除标识", hidden = true)
+        private Boolean delFlag;
+
+        @ApiModelProperty(value = "启用停用标识,曲目状态(0:停用,1:启用)")
+        private Boolean status;
+
+        @ApiModelProperty(value = "排序 0:默认 1:首页热门,2热门列表")
+        private Integer sortType = 0;
+
+        @ApiModelProperty(value = "是否审核数据")
+        private Boolean versionFlag = false;
+
+        @ApiModelProperty(value = "用户ID",hidden = true)
+        private Long userId;
+
+        @ApiModelProperty(value = "用户类型",hidden = true)
+        private String clientType;
+
+        @ApiModelProperty("是否最近练习")
+        private Boolean recentFlag = false;
+
+        @ApiModelProperty("最近练习 当前曲目ID")
+        private Long excludeMusicId;
+
+        @ApiModelProperty("app版本")
+        private String version;
+
+        @ApiModelProperty("platform")
+        private String platform;
+
+        @ApiModelProperty("id集合")
+        private List<Long> ids;
+
+        @ApiModelProperty("曲目教程id集合")
+        private String musicTutorialIds;
+
+        @ApiModelProperty("曲目标签id集合")
+        private String musicTagIds;
+
+        @ApiModelProperty("内容平台ID为null")
+        private Boolean cbsIdIsNull;
+
+        @ApiModelProperty("是否转换")
+        private Boolean convertFlag;
+
+        @ApiModelProperty("教材版本ID/ 曲目标签ID")
+        private Long bookVersionId;
+
+        @ApiModelProperty("音频类型,SING:演唱,PLAY:演奏")
+        private List<String> audioPlayTypes;
+
+        @ApiModelProperty("标签分类搜索 HOT 热门,NEW 最新,RECOMMEND 推荐")
+        private String searchType;
+
+        @ApiModelProperty("是否只查询基础信息")
+        private Boolean basicFlag = false;
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static MusicSheetQuery from(String json) {
+            return JSON.parseObject(json, MusicSheetQuery.class);
+        }
+    }
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel(" MusicSheet-曲谱表")
+    public static class MusicSheet {
+
+		@ApiModelProperty("主键")
+        private Long id;
+
+        @ApiModelProperty("曲谱分类")
+        private Integer musicSheetCategoriesId;
+
+//        @ApiModelProperty(value = "曲谱类型(SINGLE:单曲,CONCERT:合奏)")
+//        private EMusicSheetType musicSheetType;
+
+        @ApiModelProperty("曲谱分类名称")
+        private String musicSheetCategoriesName;
+
+		@ApiModelProperty("曲谱名称")
+        private String musicSheetName;
+
+		@ApiModelProperty("封面图")
+        private String titleImg;
+
+		@ApiModelProperty("曲谱来源id")
+        private Long userId;
+
+//		@ApiModelProperty("曲目来源类型 TEACHER 老师 PLATFORM 平台")
+//        private ESourceFrom sourceType;
+
+        @ApiModelProperty("多声轨选择")
+        private String multiTracksSelection;
+
+        @ApiModelProperty("是否公开")
+        private Boolean openFlag;
+
+        @ApiModelProperty("作曲人")
+        private String composer;
+
+        @ApiModelProperty("上传人")
+        private String uploadUser;
+
+		@ApiModelProperty("曲谱声部(适用的乐器,可能是多个,用逗号分隔)")
+        private String musicSubject;
+
+		@ApiModelProperty("mp3曲谱类型  MP3;MP3_METRONOME")
+        private String mp3Type;
+
+		@ApiModelProperty("曲目图片")
+        private String musicImg;
+
+		@ApiModelProperty("曲谱音频文件类型(midi;mp3)")
+        private EAudioType audioType;
+
+		@ApiModelProperty("是否可以转简谱(0:否,1:是)")
+        private Integer notation;
+
+		@ApiModelProperty("曲谱标签(多个标签用逗号分隔)")
+        private String musicTag;
+
+		@ApiModelProperty("默认播放速度")
+        private String playSpeed;
+
+		@ApiModelProperty("是否可以评测(0:否;1:是)")
+        private Boolean canEvaluate;
+
+        @ApiModelProperty("是否支持混音节拍器")
+        private Boolean isMixBeat;
+
+		@ApiModelProperty("伴奏类型  HOMEMODE:自制 COMMON:普通")
+        private String accompanimentType;
+
+		@ApiModelProperty("是否展示指法(0:否;1:是)")
+        private Boolean showFingering;
+
+		@ApiModelProperty("曲目状态(0:停用,1:启用)")
+        private Boolean status;
+
+		@ApiModelProperty("曲目停用原因")
+        private String reason;
+
+		@ApiModelProperty("排序号")
+        private Integer sortNumber;
+
+		@ApiModelProperty("midi路径")
+        private String midiUrl;
+
+		@ApiModelProperty("伴奏含节拍器路径")
+        private String metronomeUrl;
+
+		@ApiModelProperty("伴奏(不含节拍器)路径")
+        private String url;
+
+		@ApiModelProperty("音频文件存储路径")
+        private String audioFileUrl;
+
+		@ApiModelProperty("XML文件存储路径")
+        private String xmlFileUrl;
+
+		@ApiModelProperty("是否自带节拍器(0:否;1:是)")
+        private Boolean hasBeat;
+
+		@ApiModelProperty("曲目配置")
+        private String extConfigJson;
+
+
+        @ApiModelProperty("是否节奏音乐")
+        private Boolean rhythmFlag;
+
+
+        @ApiModelProperty("创建时间")
+        private Date createTime;
+
+		@ApiModelProperty("创建人(老师或者是后台平台用户)")
+        private Long createBy;
+
+        @ApiModelProperty("创建用户")
+        private String createUser;
+
+		@ApiModelProperty("更新时间")
+        private Date updateTime;
+
+		@ApiModelProperty("更新人(老师或者是后台平台用户)")
+        private Long updateBy;
+
+        @ApiModelProperty("更新用户")
+        private String updateUser;
+
+		@ApiModelProperty("备注")
+        private String remark;
+
+		@ApiModelProperty("假删除标识 0:未删除 1:已删除")
+        private Boolean delFlag;
+
+        @ApiModelProperty("伴奏")
+        private List<MusicSheetAccompanimentVo.MusicSheetAccompaniment> background;
+
+        @ApiModelProperty("曲目缓存")
+        private String musicJSON;
+
+        @ApiModelProperty("曲目缓存svg")
+        private String musicSvg;
+
+        @ApiModelProperty("曲目缓存简谱svg")
+        private String musicJianSvg;
+
+        @ApiModelProperty("曲目缓存首调svg")
+        private String musicFirstSvg;
+
+
+        @ApiModelProperty("被使用次数")
+        private Long usedNum = 0L;
+
+        @ApiModelProperty("曲目赏析")
+        private String appreciationUrl;
+
+        @ApiModelProperty("曲目创作ID")
+        private Long musicSheetCreationId;
+
+        @ApiModelProperty(" 可用乐器(多个,用逗号分隔)")
+        private String cbsMusicalInstrumentIds;
+
+
+
+        @ApiModelProperty(" 可用乐器(多个,用逗号分隔)")
+        private String cbsMusicalInstrumentIdNames;
+
+        @ApiModelProperty("内容平台曲目ID")
+        private Long cbsMusicSheetId;
+
+        @ApiModelProperty("首调图片")
+        private String musicFirstImg;
+        @ApiModelProperty("固定调图片")
+        private String musicJianImg;
+
+
+        @ApiModelProperty("五线谱PDF文件")
+        private String musicPdfUrl;
+
+
+        @ApiModelProperty("首调PDF文件")
+        private String firstPdfUrl;
+
+
+        @ApiModelProperty("固定调PDF文件")
+        private String jianPdfUrl;
+
+
+
+        @ApiModelProperty("曲目类型(SINGLE:单曲 CONCERT:合奏)")
+        private String musicSheetType;
+
+        @ApiModelProperty("乐器信息")
+        private List<InstrumentWrapper.Instrument> musicalInstruments;
+
+        @ApiModelProperty("收费类型(FREE:免费;VIP:会员;CHARGE:单曲收费)")
+        private String paymentType;
+
+
+
+        @ApiModelProperty("是否可转谱(0:否; 1:是)")
+        private Boolean isConvertibleScore;
+
+        @ApiModelProperty("谱面类型")
+        private String scoreType;
+
+
+        @ApiModelProperty("音频类型,SING:演唱,PLAY:演奏")
+        private String audioPlayTypes;
+
+
+        @ApiModelProperty("是否总谱渲染")
+        private Boolean isScoreRender;
+
+        @ApiModelProperty("演奏是否默认展示总谱渲染")
+        private Boolean defaultScoreRender;
+
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public static MusicSheet from(String json) {
+            return JSON.parseObject(json, MusicSheet.class);
+        }
+
+
+        public MusicSheet createBy(String createBy) {
+            this.createBy = Long.parseLong(createBy);
+            return this;
+        }
+
+        public MusicSheet createUser(String createUser) {
+            this.createUser = createUser;
+            return this;
+        }
+
+        public MusicSheet updateBy(String updateBy) {
+            this.updateBy = Long.parseLong(updateBy);
+            return this;
+        }
+
+        public MusicSheet updateUser(String updateUser) {
+            this.updateUser = updateUser;
+            return this;
+        }
+
+        public MusicSheet notation(Integer notation) {
+            this.notation = notation;
+            return this;
+        }
+
+        public MusicSheet userId(String userId) {
+            this.userId = Long.valueOf(userId);
+            return this;
+        }
+    }
+
+
+    @Data
+    @EqualsAndHashCode(callSuper = true)
+    public static class MusicSheetDetail extends CbsMusicSheetWrapper.MusicSheet {
+        @ApiModelProperty
+        private Long bizMusicCategoryId;
+
+        @ApiModelProperty("收费类型(FREE:免费;VIP:会员;CHARGE:单曲收费)")
+        private String paymentType;
+
+        @ApiModelProperty("是否可转谱(0:否; 1:是)")
+        private Boolean isConvertibleScore;
+
+        @ApiModelProperty("谱面类型")
+        private String scoreType;
+
+
+        @ApiModelProperty("使用状态 试用: FREE 锁定: LOCK 解锁:UNLOCK")
+        private String useStatus;
+
+        @ApiModelProperty("是否是特殊打击乐")
+        private Boolean specialPercussionFlag;
+
+    }
+
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel(" MusicSheet-曲谱表")
+    public static class OpenMusicSheetDetail implements Serializable {
+
+        @ApiModelProperty("主键")
+        private Long id;
+
+        @ApiModelProperty("业务平台曲目ID")
+        private Long bizId;
+
+        @ApiModelProperty("曲目分类ID")
+        private Long musicCategoryId;
+
+        @ApiModelProperty("曲目分类名称")
+        private String musicCategoryName;
+
+        @ApiModelProperty("曲目标签")
+        private String musicTag;
+
+        @ApiModelProperty("曲目标签名称")
+        private String musicTagNames;
+
+        @ApiModelProperty("曲目封面图")
+        private String musicCover;
+
+        @ApiModelProperty("曲目名称")
+        private String name;
+
+        @ApiModelProperty("是否审核版本")
+        private Boolean appAuditFlag;
+
+        @ApiModelProperty("曲目声部(多个,用逗号分隔)")
+        private String subjectIds;
+
+        @ApiModelProperty("曲目声部code")
+        private String subjectCodes;
+
+        @ApiModelProperty("曲目声部名称")
+        private String subjectNames;
+
+        @ApiModelProperty("曲目乐器(多个,用逗号分隔)")
+        private String musicalInstrumentIds;
+
+        @ApiModelProperty("曲目乐器code")
+        private String musicalInstrumentIdCodes;
+
+        @ApiModelProperty("曲目乐器名称")
+        private String musicalInstrumentNames;
+
+        @ApiModelProperty("作曲人/音乐人")
+        private String composer;
+
+        @ApiModelProperty("曲目类型(SINGLE:单曲 CONCERT:合奏)")
+        private EMusicSheetType musicSheetType;
+
+        @ApiModelProperty("是否使用系统节拍器(0:否;1:是)")
+        private Boolean isUseSystemBeat;
+
+        @ApiModelProperty("是否可评测(0:否;1:是)")
+        private Boolean isEvaluated;
+
+        @ApiModelProperty("是否可转谱(0:否; 1:是)")
+        private Boolean isConvertibleScore;
+
+        @ApiModelProperty("是否展示指法(0:否;1:是)")
+        private Boolean isShowFingering;
+
+        @ApiModelProperty("是否播入节拍器(0: 否 1:是)")
+        private Boolean isPlayBeat;
+
+        @ApiModelProperty("多声轨选择")
+        private String multiTracksSelection;
+
+        @ApiModelProperty("播放速度")
+        private String playSpeed;
+
+        @ApiModelProperty("播放模式(MIDI;MP3)")
+        private EMusicPlayMode playMode;
+
+        @ApiModelProperty("XML文件")
+        private String xmlFileUrl;
+
+        @ApiModelProperty("MIDI文件(保留字段)")
+        private String midiFileUrl;
+
+        @ApiModelProperty("曲目JSON")
+        private String musicJson;
+
+        @ApiModelProperty("曲目缓存JSON(后续使用)")
+        private String musicSvgJson;
+
+        @ApiModelProperty("曲目缓存")
+        private String musicSvg;
+
+        @ApiModelProperty("评测标准 节奏 AMPLITUDE 音准 FREQUENCY 分贝 DECIBELS")
+        private EEvaluationStandard evaluationStandard;
+
+        @ApiModelProperty("简谱缓存")
+        private String musicJianSvg;
+
+        @ApiModelProperty("首调缓存")
+        private String musicFirstSvg;
+
+        @ApiModelProperty("谱面图片JSON(后续使用)")
+        private String musicImgJson;
+
+        @ApiModelProperty("五线谱图片")
+        private String musicImg;
+
+        @ApiModelProperty("首调图片")
+        private String musicFirstImg;
+
+        @ApiModelProperty("固定调图片")
+        private String musicJianImg;
+
+        @ApiModelProperty("谱面参数设置")
+        private String extConfigJson;
+
+        @ApiModelProperty("谱面样式参数设置")
+        private String extStyleConfigJson;
+
+        @ApiModelProperty("可用类型(PLATFORM: 平台; ORG: 机构; PERSON: 个人)")
+        private EMusicAvailableType availableType;
+
+        @ApiModelProperty("来源类型/作者属性(PLATFORM: 平台; ORG: 机构; PERSON: 个人)")
+        private EMusicSourceType sourceType;
+
+        @ApiModelProperty("音频类型(HOMEMODE: 自制 COMMON: 普通)")
+        private EAudioType audioType;
+
+        @ApiModelProperty("曲目状态(0:停用,1:启用)")
+        private Boolean status;
+
+        @ApiModelProperty("停用原因")
+        private String reason;
+
+        @ApiModelProperty("备注")
+        private String remark;
+
+        @ApiModelProperty("逻辑删除标识(0: 未删 1:已删)")
+        private Boolean delFlag;
+
+        @ApiModelProperty("评测频率,详情返回,指定应用端")
+        private String evaluationFrequency;
+
+        @ApiModelProperty("乐器信息")
+        private List<CbsMusicSheetWrapper.MusicalInstrument> musicalInstruments;
+
+        @ApiModelProperty
+        private Long bizMusicCategoryId;
+
+        @ApiModelProperty("收费类型(FREE:免费;VIP:会员;CHARGE:单曲收费)")
+        private String paymentType;
+
+        public static OpenMusicSheetDetail from(String json) {
+            return JSON.parseObject(json, OpenMusicSheetDetail.class);
+        }
+    }
+
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel(" MusicSheet-曲谱表")
+    public static class OpenMusicSheet implements Serializable {
+
+        @ApiModelProperty("主键")
+        private Long id;
+
+        @ApiModelProperty("曲谱分类")
+        private Integer musicSheetCategoriesId;
+
+        @ApiModelProperty("曲谱分类名称")
+        private String musicSheetCategoriesName;
+
+        @ApiModelProperty("曲谱名称")
+        private String musicSheetName;
+
+        @ApiModelProperty("封面图")
+        private String titleImg;
+
+//        @ApiModelProperty("曲目来源类型 TEACHER 老师 PLATFORM 平台")
+//        private ESourceFrom sourceType;
+
+        @ApiModelProperty("多声轨选择")
+        private String multiTracksSelection;
+
+        @ApiModelProperty("是否公开")
+        private Boolean openFlag;
+
+        @ApiModelProperty("作曲人")
+        private String composer;
+
+        @ApiModelProperty("曲谱声部(适用的乐器,可能是多个,用逗号分隔)")
+        private String musicSubject;
+
+        @ApiModelProperty("mp3曲谱类型  MP3;MP3_METRONOME")
+        private String mp3Type;
+
+        @ApiModelProperty("曲目图片")
+        private String musicImg;
+
+        @ApiModelProperty("曲谱音频文件类型(midi;mp3)")
+        private EAudioType audioType;
+
+        @ApiModelProperty("是否可以转简谱(0:否,1:是)")
+        private Integer notation;
+
+        @ApiModelProperty("曲谱标签(多个标签用逗号分隔)")
+        private String musicTag;
+
+        @ApiModelProperty("默认播放速度")
+        private String playSpeed;
+
+        @ApiModelProperty("是否可以评测(0:否;1:是)")
+        private Boolean canEvaluate;
+
+        @ApiModelProperty("伴奏类型  HOMEMODE:自制 COMMON:普通")
+        private String accompanimentType;
+
+        @ApiModelProperty("是否展示指法(0:否;1:是)")
+        private Boolean showFingering;
+
+        @ApiModelProperty("曲目状态(0:停用,1:启用)")
+        private Boolean status;
+
+        @ApiModelProperty("曲目停用原因")
+        private String reason;
+
+        @ApiModelProperty("排序号")
+        private Integer sortNumber;
+
+        @ApiModelProperty("midi路径")
+        private String midiUrl;
+
+        @ApiModelProperty("XML文件存储路径")
+        private String xmlFileUrl;
+
+        @ApiModelProperty("是否自带节拍器(0:否;1:是)")
+        private Boolean hasBeat;
+
+        @ApiModelProperty("曲目配置")
+        private String extConfigJson;
+
+        @ApiModelProperty("是否节奏音乐")
+        private Boolean rhythmFlag;
+
+        @ApiModelProperty("备注")
+        private String remark;
+
+        @ApiModelProperty("假删除标识 0:未删除 1:已删除")
+        private Boolean delFlag;
+
+        @ApiModelProperty("曲目缓存")
+        private String musicJSON;
+
+        @ApiModelProperty("曲目缓存svg")
+        private String musicSvg;
+
+        @ApiModelProperty("曲目缓存简谱svg")
+        private String musicJianSvg;
+
+        @ApiModelProperty("曲目缓存首调svg")
+        private String musicFirstSvg;
+
+        @ApiModelProperty("被使用次数")
+        private Long usedNum = 0L;
+
+        @ApiModelProperty("曲目赏析")
+        private String appreciationUrl;
+
+        @ApiModelProperty("曲目创作ID")
+        private Long musicSheetCreationId;
+
+        @ApiModelProperty(" 可用乐器(多个,用逗号分隔)")
+        private String cbsMusicalInstrumentIds;
+
+        @ApiModelProperty(" 可用乐器(多个,用逗号分隔)")
+        private String cbsMusicalInstrumentIdNames;
+
+        @ApiModelProperty("内容平台曲目ID")
+        private Long cbsMusicSheetId;
+
+        @ApiModelProperty("首调图片")
+        private String musicFirstImg;
+
+        @ApiModelProperty("固定调图片")
+        private String musicJianImg;
+
+        @ApiModelProperty("曲目类型(SINGLE:单曲 CONCERT:合奏)")
+        private String musicSheetType;
+
+        /*@ApiModelProperty("乐器信息")
+        private List<InstrumentWrapper.Instrument> musicalInstruments;*/
+
+        @ApiModelProperty("收费类型(FREE:免费;VIP:会员;CHARGE:单曲收费)")
+        private String paymentType;
+
+        public static OpenMusicSheet from(String json) {
+            return JSON.parseObject(json, OpenMusicSheet.class);
+        }
+
+    }
+}

+ 23 - 0
mec-application/src/main/java/com/ym/mec/vo/MusicalInstrumentWrapper.java

@@ -0,0 +1,23 @@
+package com.ym.mec.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+public class MusicalInstrumentWrapper {
+
+
+    @Data
+    @ApiModel(" MusicalInstrumentQuery-曲目乐器")
+    public static class MusicalInstrumentQuery  {
+
+        @ApiModelProperty("声部")
+        private Integer subjectId;
+        @ApiModelProperty("声部")
+        private List<Integer> subjectIds;
+        @ApiModelProperty("是否启用")
+        private Boolean enableFlag;
+    }
+}

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

@@ -46,7 +46,7 @@ public class CloudTeacherOrderController extends BaseController {
 
     @ApiOperation(value = "查询未激活团练宝用户")
     @PostMapping("/queryInactive")
-    @PreAuthorize("@pcs.hasPermissions('cloudTeacherOrder/queryInActive')")
+    @PreAuthorize("@pcs.hasPermissions('cloudTeacherOrder/queryInactive')")
     public HttpResponseResult<PageInfo<CloudTeacherStudent>> queryInactive(@RequestBody CloudTeacherOrderQueryInfo cloudTeacherOrderQueryInfo) throws Exception {
         Integer tenantId = TenantContextHolder.getTenantId();
         cloudTeacherOrderQueryInfo.setTenantId(tenantId);

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

@@ -9,6 +9,7 @@ import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.*;
 import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomMemberVo;
+import com.ym.mec.biz.dal.wrapper.CloudTeacherOrderWrapper;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.controller.BaseController;
@@ -229,7 +230,7 @@ public class ExportController extends BaseController {
         OutputStream outputStream = response.getOutputStream();
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "乐团编号", "乐团名称", "合作单位", "乐团状态",
-                    "收费模式", "收费类型", "乐团主管", "成团人数", "在读人数",  "会员人数",  "非会员人数", "申请时间", "成团时间", "清单状态", "收费标准"}, new String[]{
+                    "收费模式", "收费类型", "乐团主管", "成团人数", "在读人数",  "学练宝人数",  "非学练宝人数", "申请时间", "成团时间", "清单状态", "收费标准"}, new String[]{
                     "organName", "id", "name", "cooperationOrganName", "status.msg", "courseViewType.msg", "chargeTypeName",
                     "educationalTeacherName", "groupMemberNum", "payNum", "memberNum", "notMemberNum"
                     , "createTime", "billStartDate", "hasVerifyMusicalList?'已确认':'未确认'", "chargeStandard"}, rows);
@@ -340,7 +341,7 @@ public class ExportController extends BaseController {
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "总成交金额", "总购买人数", "人均购买金额",
                     "20节1v1成交金额", "20节1v1成交人数", "40节1v1成交金额", "40节1v1成交人数", "20节1v2成交金额", "20节1v2成交人数",
-                    "40节1v2成交金额", "40节1v2成交人数", "小组课成交金额", "小组课成交人数", "赠送会员人数"}, new String[]{
+                    "40节1v2成交金额", "40节1v2成交人数", "小组课成交金额", "小组课成交人数", "赠送学练宝人数"}, new String[]{
                     "organName", "totalBuyAmount", "totalBuyNum", "avgBuyAmount", "vip1V120Amount", "vip1V120Num", "vip1V140Amount",
                     "vip1V140Num", "vip1V220Amount", "vip1V220Num", "vip1V240Amount"
                     , "vip1V240Num", "musicTheoryAmount", "musicTheoryNum", "giveMemberNum"}, rows);
@@ -632,7 +633,7 @@ public class ExportController extends BaseController {
         OutputStream outputStream = response.getOutputStream();
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"学员编号", "学员姓名", "学员声部", "学员状态", "手机号",
-                    "缴费开始日期", "缴费截止日期", "是否开启缴费", "缴费状态", "支付时间", "会员金额", "乐器金额", "课程金额", "辅件金额", "乐保金额", "活动金额"}, new String[]{
+                    "缴费开始日期", "缴费截止日期", "是否开启缴费", "缴费状态", "支付时间", "学练宝金额", "乐器金额", "课程金额", "辅件金额", "乐保金额", "活动金额"}, new String[]{
                     "userId", "sysUser.username", "studentRegistration.subjectName", "studentRegistration.musicGroupStatus.msg", "sysUser.phone",
                     "startPaymentDateMgpc", "deadlinePaymentDateStr", "openFlag.msg", "paymentStatus.desc", "payTime",
                     "cloudAmount", "musicalAmount", "courseAmount", "accessoriesAmount", "maintenanceAmount", "activityAmount"}, rows);
@@ -912,16 +913,33 @@ public class ExportController extends BaseController {
         queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
         queryInfo.setIsExport(true);
         List<StudentManageListDto> rows = studentManageService.findStudentsByOrganId(queryInfo).getRows();
+        for (StudentManageListDto row : rows) {
+            row.setCourseTeacherName(null);
+            List<CloudTeacherOrderWrapper.StudentMemberDetail> orderList = row.getCloudTeacherOrderList();
+            if (!CollectionUtils.isEmpty(orderList)) {
+                StringBuffer remark = new StringBuffer();
+                for (CloudTeacherOrderWrapper.StudentMemberDetail studentMemberDetail : orderList) {
+                    if (StringUtils.isNotEmpty(remark)) {
+                        remark.append("\r\n");
+                    }
+                    remark.append(studentMemberDetail.getMemberRankName());
+                    remark.append(" ");
+                    remark.append(DateUtil.dateToString(studentMemberDetail.getEndTime(), DateUtil.DEFAULT_PATTERN));
+                    remark.append("(");
+                    remark.append(studentMemberDetail.getRemainingDays());
+                    remark.append("天)");
+                }
+                row.setCourseTeacherName(remark.toString());
+            }
+        }
         OutputStream outputStream = response.getOutputStream();
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "学员编号", "学员姓名", "性别", "家长姓名",
                     "家长联系电话", "VIP老师", "网管老师", "声部老师", "合奏老师", "是否激活", "是否有课", "是否有网管课", "网管课剩余课时", "VIP课剩余课时", "课程余额(元)", "账户余额(元)",
-                    "所在乐团", "乐团所属声部", "所在乐团状态", "所在vip课", "所在VIP状态", "服务标签", "运营标签", "指导老师", "是否签订协议", "是否使用云教练", "会员截止日期", "会员剩余天数", "会员试用结束日期", "会员试用剩余天数"}, new String[]{
+                    "所在乐团", "乐团所属声部", "所在乐团状态", "所在vip课", "所在VIP状态", "服务标签", "运营标签", "指导老师", "是否签订协议", "学练宝截止时间(剩余天数)"}, new String[]{
                     "organName", "userId", "username", "gender.description", "parentsName", "parentsPhone","vipTeacherName", "practiceTeacherName", "normalTeacherName", "mixTeacherName",
                     "isActive.msg", "hasCourse.msg", "hasPracticeCourse.msg", "noStartPracticeCourseNum", "noStartVipCourseNum", "courseBalance", "balance", "musicGroupName",
-                    "subjectName", "musicGroupStatus", "vipGroupName", "vipGroupStatus", "serviceTag.msg", "operatingTag.msg", "teacherName", "isSignedContract ? '是' : '否'", "recordUserId == null ? '否' : '是'",
-                    "membershipEndTime", "membershipEndTime == null ? hasNoStartCloudTeacher ? \"未生效\" : \"未购买\" : membershipDay >= 0 ? membershipDay : hasNoStartCloudTeacher ? \"未生效\" : \"会员已过期\"",
-                    "experienceMembershipEndTime", "membershipEndTime == null ? \"未试用\" : membershipDay >= 0 ? membershipDay : \"已失效\""}, rows);
+                    "subjectName", "musicGroupStatus", "vipGroupName", "vipGroupStatus", "serviceTag.msg", "operatingTag.msg", "teacherName", "isSignedContract ? '是' : '否'", "courseTeacherName"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
 
@@ -1113,7 +1131,7 @@ public class ExportController extends BaseController {
         }
         OutputStream outputStream = response.getOutputStream();
         try {
-            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "乐团", "学员编号", "学员姓名", "声部", "购买乐器", "乐器采购方式", "乐器金额", "购买教辅", "教辅金额", "课程金额", "云教练金额", "乐保金额", "订单总价"}, new String[]{
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "乐团", "学员编号", "学员姓名", "声部", "购买乐器", "乐器采购方式", "乐器金额", "购买教辅", "教辅金额", "课程金额", "学练宝金额", "乐保金额", "订单总价"}, new String[]{
                     "organName", "musicGroupName", "userId", "username", "subjectName", "musicalName", "kitGroupPurchaseTypeEnum.msg",
                     "musicalAmount", "accessoriesName", "accessoriesAmount", "courseAmount", "cloudTeacherAmount", "maintenanceAmount", "orderAmount"}, musicalList);
             response.setContentType("application/octet-stream");
@@ -1174,10 +1192,10 @@ public class ExportController extends BaseController {
         OutputStream outputStream = response.getOutputStream();
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"学生姓名", "家长姓名", "年级", "班级", "性别", "服从调剂", "报名专业",
-                    "实际专业", "联系电话", "学员缴费状态", "乐器购买方式", "缴费中/审核中", "是否购买云教练"}, new String[]{
+                    "实际专业", "联系电话", "学员缴费状态", "乐器购买方式", "缴费中/审核中", "是否购买学练宝"}, new String[]{
                     "studentName", "parentsName", "currentGrade", "currentClass", "gender.description",
                     "isAllowAdjust.msg", "subjectName", "actualSubjectName", "parentsPhone", "paymentStatus.desc",
-                    "kitGroupPurchaseTypeEnum.msg", "payingStatusStr", "hasCloudTeacher==1'有':'没有'"}, studentApplyDetail);
+                    "kitGroupPurchaseTypeEnum.msg", "payingStatusStr", "hasCloudTeacher==1?'有':'没有'"}, studentApplyDetail);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
 
@@ -1233,7 +1251,7 @@ public class ExportController extends BaseController {
     @RequestMapping("export/musicGroupStudent")
     @PreAuthorize("@pcs.hasPermissions('export/musicGroupStudent')")
     public void queryMusicGroupStudent(MusicGroupStudentQueryInfo queryInfo, HttpServletResponse response) throws IOException {
-        queryInfo.setIsExport(true);
+        queryInfo.setExport(true);
         queryInfo.setPage(1);
         queryInfo.setRows(49999);
         PageInfo<MusicGroupStudentsDto> musicGroupStudentsDtoPageInfo = studentManageService.queryMusicGroupStudent(queryInfo);
@@ -1243,6 +1261,22 @@ public class ExportController extends BaseController {
             MusicGroup musicGroup = musicGroupDao.get(queryInfo.getMusicGroupId());
             Map<Integer, String> gradeList = organizationService.getGradeList(musicGroup.getOrganId());
             for (MusicGroupStudentsDto row : musicGroupStudentsDtoPageInfo.getRows()) {
+                List<CloudTeacherOrderWrapper.StudentMemberDetail> orderList = row.getCloudTeacherOrderList();
+                if (!CollectionUtils.isEmpty(orderList)) {
+                    StringBuffer remark = new StringBuffer();
+                    for (CloudTeacherOrderWrapper.StudentMemberDetail studentMemberDetail : orderList) {
+                        if (StringUtils.isNotEmpty(remark)) {
+                            remark.append("\r\n");
+                        }
+                        remark.append(studentMemberDetail.getMemberRankName());
+                        remark.append(" ");
+                        remark.append(DateUtil.dateToString(studentMemberDetail.getEndTime(), DateUtil.DEFAULT_PATTERN));
+                        remark.append("(");
+                        remark.append(studentMemberDetail.getRemainingDays());
+                        remark.append("天)");
+                    }
+                    row.setRemark(remark.toString());
+                }
                 if (StringUtils.isNotEmpty(row.getCurrentGrade())) {
                     String grade = gradeList.get(Integer.parseInt(row.getCurrentGrade()));
                     if (StringUtils.isNotEmpty(grade)) {
@@ -1264,7 +1298,7 @@ public class ExportController extends BaseController {
                 } else if (row.getStudentStatus().equals("APPLY")) {
                     row.setStudentStatus("报名");
                 } else {
-                    row.setStudentStatus("" + row.getStudentStatus());
+                    row.setStudentStatus(row.getStudentStatus());
                 }
                 if (row.getIsActive()) {
                     row.setActiveName("是");
@@ -1279,13 +1313,12 @@ public class ExportController extends BaseController {
                 }
             }
             String[] header = {"学员编号", "学员姓名", "性别", "联系电话", "入团时间", "年级", "班级", "入团专业", "学员状态", "报名缴费", "缴费金额", "是否激活",
-                    "VIP/网管是否有课", "关心包", "加油包", "欠费金额(元)", "退团原因", "会员截止时间", "会员剩余天数"};
+                    "VIP/网管是否有课", "关心包", "加油包", "欠费金额(元)", "退团原因", "学练宝截止时间(剩余天数)"};
             String[] body = {"userId", "realName", "gender", "phone", "registerTime", "currentGrade", "currentClass", "subjectName", "studentStatus", "paymentStatus.desc"
                     , "courseFee", "activeName", "hasCourse ? '是' : '否'"
                     , "carePackage == null || carePackage == 0 ? '不可用' : carePackage == 1 ? '可用' : '已使用'"
                     , "comeOnPackage == null || comeOnPackage == 0 ? '不可用'' : comeOnPackage == 1 ? '可用' : '已使用'"
-                    , "noPaymentAmount == null ? 0 : noPaymentAmount", "quitReason",
-                    "membershipEndTime", "membershipEndTime == null ? hasNoStartCloudTeacher ? '未生效' : '未购买' : membershipDay >= 0 ? membershipDay : hasNoStartCloudTeacher ? '未生效' : '会员已过期'"};
+                    , "noPaymentAmount == null ? 0 : noPaymentAmount", "quitReason","remark"};
             HSSFWorkbook workbook = POIUtil.exportExcel(header, body, musicGroupStudentsDtoPageInfo.getRows());
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
@@ -1547,7 +1580,7 @@ public class ExportController extends BaseController {
         OutputStream ouputStream = null;
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(
-                    new String[]{"布置时间", "截至时间", "训练标题", "老师名字", "分部", "学生姓名", "学生编号", "提交训练", "提交训练时间", "是否评价", "是否有vip", "及时评价", "是否云教练布置"},
+                    new String[]{"布置时间", "截至时间", "训练标题", "老师名字", "分部", "学生姓名", "学生编号", "提交训练", "提交训练时间", "是否评价", "是否有vip", "及时评价", "是否学练宝布置"},
                     new String[]{"createTime", "expireDate", "title", "teacherName", "organName",
                             "user.username", "userId", "statusStr", "submitTime", "isRepliedStr", "existVipCourseStr", "isRepliedTimelyStr", "musicScoreId"}, rows);
             response.setContentType("application/octet-stream");
@@ -2118,7 +2151,7 @@ public class ExportController extends BaseController {
         }
 
         try {
-            String[] header = {"分部", "老师编号", "老师姓名", "服务周期", "课后训练(节)", "课后训练(人)", "课外训练(人)", "预计训练布置(人次)", "实际训练布置(人次)", "提交次数", "评价次数", "及时评价次数", "及时评价率", "作业点评率",
+            String[] header = {"分部", "老师编号", "老师姓名", "服务周期", "课后训练(节)", "课后训练(人)", "课外训练(人)", "预计训练布置(人次)", "实际训练布置(人次)", "提交次数", "评价次数", "及时评价次数", "及时评价率", "训练点评率",
                     "训练布置", "训练点评", "训练提交率",
                     "提醒时间", "操作人"};
             String[] body = {"organName", "teacherId", "teacherName", "dateRange", "homeworkNum", "homeworkStuNum", "exerciseNum", "expectExercisesNum", "actualExercisesNum", "exercisesReplyNum", "exercisesMessageNum", "exercisesMessageTimelyNum", "exercisesMessageTimelyRate", "exercisesMessageRate",

+ 7 - 0
mec-application/src/main/java/com/ym/mec/web/controller/LessonExaminationController.java

@@ -2,17 +2,21 @@ package com.ym.mec.web.controller;
 
 
 import com.ym.mec.biz.dal.dto.LessonExaminationResultDto;
+import com.ym.mec.biz.dal.dto.StudentLessonExaminationDetailDto;
 import com.ym.mec.biz.dal.dto.StudentLessonExaminationDto1;
 import com.ym.mec.biz.dal.entity.Subject;
 import com.ym.mec.biz.dal.page.LessonExaminationQueryInfo;
+import com.ym.mec.biz.dal.page.StudentLessonExaminationQueryDto;
 import com.ym.mec.biz.service.LessonExaminationService;
 import com.ym.mec.biz.service.OrganizationService;
+import com.ym.mec.biz.service.StudentLessonExaminationDetailService;
 import com.ym.mec.biz.service.StudentLessonExaminationService;
 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.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
@@ -37,6 +41,9 @@ public class LessonExaminationController extends BaseController {
     @Resource
     private StudentLessonExaminationService studentLessonExaminationService;
 
+    @Autowired
+    private StudentLessonExaminationDetailService studentLessonExaminationDetailService;
+
     @ApiOperation(value = "获取作业学员列表")
     @PostMapping("queryStudentPage")
     @PreAuthorize("@pcs.hasPermissions('lessonExamination/queryStudentPage')")

+ 28 - 0
mec-application/src/main/java/com/ym/mec/web/controller/MemberRankOrganizationFeeMapperController.java

@@ -2,19 +2,25 @@ package com.ym.mec.web.controller;
 
 import com.ym.mec.biz.dal.entity.MemberRankOrganizationFeeMapper;
 import com.ym.mec.biz.dal.page.MemberRankFeeQueryInfo;
+import com.ym.mec.biz.dal.wrapper.MemberRankOrganizationFeeMapperWrapper;
+import com.ym.mec.biz.dal.wrapper.MemberRankSettingWrapper;
 import com.ym.mec.biz.service.MemberRankOrganizationFeeMapperService;
 import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.util.collection.MapUtil;
 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.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 @RequestMapping("${app-config.url.web:}/memberRankOrganizationFeeMapper")
@@ -39,6 +45,28 @@ public class MemberRankOrganizationFeeMapperController extends BaseController {
         return succeed();
     }
 
+
+    @ApiOperation(value = "查询分部可配置的学练宝")
+    @PostMapping("/getMemberRankSetting")
+    @AuditLogAnnotation(operateName = "查询分部可配置的学练宝")
+    public HttpResponseResult<List<MemberRankSettingWrapper.MemberRankSetting>> getMemberRankSetting(
+        @RequestBody @Validated MemberRankOrganizationFeeMapperWrapper.MemberRankQuery query) {
+        query.setTenantId(TenantContextHolder.getTenantId());
+        return succeed(memberRankOrganizationFeeMapperService.getMemberRankSetting(query));
+
+    }
+
+
+    @ApiOperation(value = "新增")
+    @PostMapping("/addV2")
+    @PreAuthorize("@pcs.hasPermissions('memberRankOrganizationFeeMapper/addV2')")
+    @AuditLogAnnotation(operateName = "新增系统功能类型")
+    public Object addV2(@RequestBody @Validated MemberRankOrganizationFeeMapperWrapper.MemberRankOrganizationFeeMapperAdd memberRankOrganizationFeeMapper) {
+        memberRankOrganizationFeeMapper.setOperatorId(sysUserService.getUserId());
+        memberRankOrganizationFeeMapperService.addV2(memberRankOrganizationFeeMapper);
+        return succeed();
+    }
+
     @ApiOperation(value = "修改")
     @PostMapping("/update")
     @PreAuthorize("@pcs.hasPermissions('memberRankOrganizationFeeMapper/update')")

+ 86 - 14
mec-application/src/main/java/com/ym/mec/web/controller/MemberRankSettingController.java

@@ -1,18 +1,28 @@
 package com.ym.mec.web.controller;
 
+import com.ym.mec.biz.dal.entity.MemberFeeSetting;
+import com.ym.mec.biz.dal.entity.MemberRankOrganizationFeeMapper;
 import com.ym.mec.biz.dal.entity.MemberRankSetting;
+import com.ym.mec.biz.dal.page.MemberRankFeeQueryInfo;
+import com.ym.mec.biz.dal.wrapper.MemberRankSettingWrapper;
+import com.ym.mec.biz.service.MemberRankOrganizationFeeMapperService;
 import com.ym.mec.biz.service.MemberRankSettingService;
 import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.controller.BaseController;
-import com.ym.mec.common.page.QueryInfo;
+import com.ym.mec.common.entity.HttpResponseResult;
 import com.yonge.log.model.AuditLogAnnotation;
 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.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.HashMap;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 @RequestMapping("${app-config.url.web:}/memberRankSetting")
 @Api(tags = "会员等级服务")
@@ -24,12 +34,16 @@ public class MemberRankSettingController extends BaseController {
     @Autowired
     private SysUserService sysUserService;
 
+    @Autowired
+    private MemberRankOrganizationFeeMapperService memberRankOrganizationFeeMapperService;
+
     @ApiOperation(value = "新增")
     @PostMapping("/add")
     @PreAuthorize("@pcs.hasPermissions('memberRankSetting/add')")
     @AuditLogAnnotation(operateName = "新增会员等级")
-    public Object add(@RequestBody MemberRankSetting memberRankSetting) {
+    public HttpResponseResult<Object> add(@RequestBody MemberRankSettingWrapper.MemberRankSettingAdd memberRankSetting) {
         memberRankSetting.setOperator(sysUserService.getUserId());
+        memberRankSetting.setUpdateTime(new Date());
         memberRankSettingService.add(memberRankSetting);
         return succeed();
     }
@@ -38,32 +52,90 @@ public class MemberRankSettingController extends BaseController {
     @GetMapping("/get")
     @PreAuthorize("@pcs.hasPermissions('memberRankSetting/get')")
     @AuditLogAnnotation(operateName = "会员等级详情")
-    public Object get(Integer memberRankSettingId) {
+    public HttpResponseResult<MemberRankSettingWrapper.MemberRankSetting> get(Integer memberRankSettingId) {
         return succeed(memberRankSettingService.getDetail(memberRankSettingId));
     }
 
     @ApiOperation(value = "修改")
     @PostMapping("/update")
     @PreAuthorize("@pcs.hasPermissions('memberRankSetting/update')")
-    public Object update(@RequestBody MemberRankSetting memberRankSetting) {
+    @AuditLogAnnotation(operateName = "修改会员等级")
+    public HttpResponseResult<Object> update(@RequestBody MemberRankSettingWrapper.MemberRankSettingAdd memberRankSetting) {
         memberRankSetting.setOperator(sysUserService.getUserId());
         memberRankSettingService.updateSetting(memberRankSetting);
         return succeed();
     }
 
+
+
+    @ApiOperation(value = "删除")
+    @PostMapping("/del/{id}")
+    @PreAuthorize("@pcs.hasPermissions('memberRankSetting/del')")
+    @AuditLogAnnotation(operateName = "删除学练宝会员等级")
+    public HttpResponseResult<Object> update(@PathVariable Integer id) {
+        memberRankSettingService.del(id);
+        return succeed();
+    }
     @ApiOperation(value = "分页查询")
-    @GetMapping("/queryPage")
+    @PostMapping("/queryPage")
     @PreAuthorize("@pcs.hasPermissions('memberRankSetting/queryPage')")
-    public Object queryPage(QueryInfo queryInfo) {
-        return succeed(memberRankSettingService.queryPage(queryInfo));
+    public HttpResponseResult<List<MemberRankSettingWrapper.MemberRankSetting>> queryPage(@RequestBody MemberRankSettingWrapper.MemberRankSettingQuery queryInfo) {
+        return succeed(memberRankSettingService.queryPage2(queryInfo));
+    }
+
+    @ApiOperation(value = "树状列表")
+    @GetMapping("/categoryTree")
+    public HttpResponseResult<MemberRankSettingWrapper.Category> queryTree(@RequestParam(required = false) Integer parentMemberId) {
+
+        return succeed(memberRankSettingService.getTree(parentMemberId));
     }
 
     @ApiOperation(value = "获取所有会员列表")
-    @GetMapping("/findAll")
-    @PreAuthorize("@pcs.hasPermissions('memberRankSetting/findAll')")
-    public Object findAll(Boolean isDefault) {
-        HashMap<String, Object> map = new HashMap<>();
-        map.put("isDefault",isDefault);
-        return succeed(memberRankSettingService.findAll(map));
+    @PostMapping("/findByOrganIds")
+    @PreAuthorize("@pcs.hasPermissions('memberRankSetting/findByOrganIds')")
+    public HttpResponseResult<List<MemberRankSetting>> findAll(@RequestBody List<Integer> organIds,
+                                                               @RequestParam(required = false, defaultValue = "false") Boolean organFeeFlag) {
+
+        // 根据分部ID查询对应的会员等级
+        List<MemberRankSetting> memberRanks = memberRankSettingService.findByOrganIds(organIds);
+
+        // 根据分部ID查询对应价格
+        if (Boolean.TRUE.equals(organFeeFlag)) {
+            MemberRankFeeQueryInfo queryInfo = new MemberRankFeeQueryInfo();
+            queryInfo.setRows(1000);
+            queryInfo.setPage(1);
+            if (CollectionUtils.isNotEmpty(organIds)) {
+
+                queryInfo.setOrganId(StringUtils.join(organIds, ","));
+            }
+            List<MemberRankOrganizationFeeMapper> rows = memberRankOrganizationFeeMapperService.queryPage(queryInfo).getRows();
+            if (CollectionUtils.isNotEmpty(rows)) {
+                Map<Integer, MemberFeeSetting> collect = rows.stream()
+                    .collect(Collectors.toMap(MemberRankOrganizationFeeMapper::getMemberRankSettingId, MemberRankOrganizationFeeMapper::getMemberFeeSetting, (o, n) -> n));
+
+                // 已统一规定会员等级只有两级,暂不考虑多级
+                for (MemberRankSetting item : memberRanks) {
+                    if (CollectionUtils.isEmpty(item.getChildren())) {
+                        continue;
+                    }
+
+                    // 设置价格
+                    for (MemberRankSetting child : item.getChildren()) {
+                        child.setMemberFeeSetting(collect.get(child.getId()));
+                    }
+                }
+            }
+        }
+
+        return succeed(memberRanks);
+    }
+
+    @ApiOperation(value = "获取可用的会员树状列表")
+    @GetMapping("/queryTree")
+    public HttpResponseResult<List<MemberRankSettingWrapper.MemberRankSetting>> queryTree(String musicGroupId,Integer organId,Integer studentId) {
+        if (musicGroupId == null && organId == null && studentId == null) {
+            return failed("参数错误");
+        }
+        return succeed(memberRankSettingService.queryTree(musicGroupId,organId,studentId));
     }
 }

+ 3 - 3
mec-application/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderController.java

@@ -53,7 +53,7 @@ public class MusicGroupPaymentCalenderController extends BaseController {
 
     @ApiOperation(value = "查询审核人")
     @GetMapping(value = "/queryUser")
-    public Object queryUser(MusicGroupPaymentCalenderQueryInfo queryInfo) {
+    public HttpResponseResult<List<Map<String, String>>> queryUser(MusicGroupPaymentCalenderQueryInfo queryInfo) {
         queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
         return succeed(musicGroupPaymentCalenderService.queryUser(queryInfo));
     }
@@ -61,14 +61,14 @@ public class MusicGroupPaymentCalenderController extends BaseController {
     @ApiOperation(value = "获取缴费信息")
     @GetMapping("/getDetail")
     @PreAuthorize("@pcs.hasPermissions('musicGroupPaymentCalender/getDetail')")
-    public Object getDetail(Long id) {
+    public HttpResponseResult<Map<String, Object>> getDetail(Long id) {
         return succeed(musicGroupPaymentCalenderService.getDetail(id));
     }
 
     @ApiOperation(value = "新增乐团缴费日历")
     @PostMapping(value = "/add", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
     @PreAuthorize("@pcs.hasPermissions('musicGroupPaymentCalender/add')")
-    public HttpResponseResult add(@RequestBody MusicGroupPaymentCalenderDto musicGroupPaymentCalenderDto) {
+    public HttpResponseResult<ModelMap> add(@RequestBody MusicGroupPaymentCalenderDto musicGroupPaymentCalenderDto) {
     	String batchNo = musicGroupPaymentCalenderService.create(musicGroupPaymentCalenderDto);
         ModelMap map = new ModelMap(1);
         map.put("musicGroupPaymentCalenderBatchNo", batchNo);

+ 138 - 0
mec-application/src/main/java/com/ym/mec/web/controller/MusicPracticeRecordController.java

@@ -0,0 +1,138 @@
+package com.ym.mec.web.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.dayaedu.cbs.common.enums.music.EEvaluationStandard;
+import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
+import com.google.common.collect.Lists;
+import com.microsvc.toolkit.common.response.template.R;
+import com.microsvc.toolkit.common.webportal.exception.BizException;
+import com.microsvc.toolkit.config.validator.group.ValidGroups;
+import com.ym.mec.biz.dal.entity.UserMusic;
+import com.ym.mec.biz.dal.enums.ClientEnum;
+import com.ym.mec.biz.dal.wrapper.MusicPracticeRecordWrapper;
+import com.ym.mec.biz.service.MusicPracticeRecordService;
+import com.ym.mec.biz.service.SysMusicScoreService;
+import com.ym.mec.biz.service.SysUserService;
+import com.ym.mec.biz.service.UserMusicService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+import java.util.Objects;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("${app-config.url.web:}/musicPracticeRecord")
+@Api(tags = "曲目练习记录")
+public class MusicPracticeRecordController {
+
+    @Autowired
+    private MusicPracticeRecordService musicPracticeRecordService;
+
+    @Autowired
+    private UserMusicService userMusicService;
+
+    @Autowired
+    private SysMusicScoreService musicSheetService;
+
+    @Autowired
+    private SysUserService sysUserService;
+
+    /**
+     * 查询单条
+     * @param id 详情ID
+     * @return R<MusicPracticeRecordVo.MusicPracticeRecord>
+     */
+    @ApiOperation(value = "详情", notes = "曲目练习记录-根据详情ID查询单条, 传入id")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "id", dataType = "long")
+    })
+    @GetMapping("/detail/{id}")
+    public R<MusicPracticeRecordWrapper.MusicPracticeRecord> detail(@PathVariable("id") Long id) {
+
+        MusicPracticeRecordWrapper.Entity wrapper = musicPracticeRecordService.detail(id);
+
+        if (wrapper == null) {
+            throw new BizException("记录不存在");
+        }
+
+        // 上传过作品,用作品视频路径覆盖上传视频路径
+        // ID集合
+        Map<Long, UserMusic> userMusicMap = userMusicService.getMapByMusicPracticeRecordIds(Lists.newArrayList(Long.parseLong(wrapper.getId())));
+
+        UserMusic userMusic = userMusicMap.get(Long.parseLong(wrapper.getId()));
+        if (Objects.nonNull(userMusic)) {
+            wrapper.setVideoFilePath(userMusic.getVideoUrl());
+        }
+        MusicPracticeRecordWrapper.MusicPracticeRecord from = MusicPracticeRecordWrapper.MusicPracticeRecord.from(JSON.toJSONString(wrapper));
+
+        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(Integer.parseInt(wrapper.getMusicSheetId()));
+        if (musicSheet != null) {
+            from.setRhythmFlag(musicSheet.getEvaluationStandard() != EEvaluationStandard.FREQUENCY);
+        }
+
+        return R.from(from);
+    }
+
+
+    /**
+     * 新增
+     * @param record MusicPracticeRecordVo.MusicPracticeRecord
+     * @return R<Boolean>
+     */
+    @ApiOperation(value = "新增", notes = "曲目练习记录- 传入 MusicPracticeRecordVo.MusicPracticeRecord")
+    @PostMapping("/save")
+    public R<String> add(@Validated(ValidGroups.Add.class) @RequestBody MusicPracticeRecordWrapper.MusicPracticeRecord record) {
+
+        Integer userId = sysUserService.getUserId();
+        record.userId(String.valueOf(userId)).clientType("education");
+
+        // 新增数据
+        MusicPracticeRecordWrapper.MusicPracticeRecord from = MusicPracticeRecordWrapper.MusicPracticeRecord.from(record.jsonString());
+        if (record.getDelFlag() !=null && record.getDelFlag()) {
+            from.setDelFlag(false);
+            from.setHiddenFlag(true);
+        }
+
+        return R.from(musicPracticeRecordService.add(from));
+    }
+
+    @ApiOperation(value = "用户最后一次评测数据")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "recordId", value = "曲目练习记录Id", dataType = "long")
+    })
+    @GetMapping("/getLastEvaluationMusicalNotesPlayStats")
+    public Object getLastEvaluationMusicalNotesPlayStats(Long recordId){
+        return R.from(musicPracticeRecordService.getLastEvaluationMusicalNotesPlayStats(recordId));
+    }
+
+    @ApiOperation(value = "上传音频文件")
+    @PostMapping("videoUpload")
+    public R<Boolean> videoUpload( @RequestBody MusicPracticeRecordWrapper.MusicPracticeRecord record){
+
+        if (Objects.isNull(record.getId())) {
+            throw BizException.from("recordId不能为空");
+        }
+        if (Objects.isNull(record.getVideoFilePath())) {
+            throw BizException.from("videoUrl不能为空");
+        }
+
+        MusicPracticeRecordWrapper.Entity practiceRecord = musicPracticeRecordService.getById(record.getId());
+        if (Objects.isNull(practiceRecord)) {
+            throw BizException.from("记录不存在");
+        }
+
+        practiceRecord.setVideoFilePath(record.getVideoFilePath());
+        musicPracticeRecordService.update(practiceRecord);
+
+        return R.from(true);
+    }
+
+}

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

@@ -1,7 +1,6 @@
 package com.ym.mec.web.controller;
 
 import com.alibaba.fastjson.JSONObject;
-import com.dayaedu.cbs.domain.wrapper.MusicSheetWrapper;
 import com.dayaedu.cbs.openfeign.client.MusicFeignClientService;
 import com.dayaedu.cbs.openfeign.properties.OpenFeignClientConfigProperties;
 import com.dayaedu.cbs.openfeign.service.CbsMusicSheetService;
@@ -13,6 +12,7 @@ import com.microsvc.toolkit.common.response.paging.PageInfo;
 import com.microsvc.toolkit.common.response.template.R;
 import com.microsvc.toolkit.common.webportal.exception.BizException;
 import com.ym.mec.biz.dal.entity.SysMusicScore;
+import com.ym.mec.biz.dal.wrapper.MusicSheetWrapper;
 import com.ym.mec.biz.service.SysMusicScoreService;
 import com.ym.mec.vo.PageUtil;
 import io.swagger.annotations.Api;

+ 166 - 0
mec-application/src/main/java/com/ym/mec/web/controller/MusicSheetController.java

@@ -0,0 +1,166 @@
+package com.ym.mec.web.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.dayaedu.cbs.common.enums.school.EMusicSheetType;
+import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
+import com.microsvc.toolkit.common.response.template.R;
+import com.ym.mec.biz.dal.entity.Instrument;
+import com.ym.mec.biz.dal.entity.SysMusicScore;
+import com.ym.mec.biz.dal.enums.ClientEnum;
+import com.ym.mec.biz.dal.enums.ClientTypeEnum;
+import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
+import com.ym.mec.biz.dal.wrapper.InstrumentWrapper;
+import com.ym.mec.biz.dal.wrapper.MusicSheetWrapper;
+import com.ym.mec.biz.service.InstrumentService;
+import com.ym.mec.biz.service.SysMusicScoreService;
+import com.ym.mec.biz.service.SysUserService;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.vo.MusicSheetVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+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.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("${app-config.url.web:}/musicSheet")
+@Api(tags = "曲谱表")
+public class MusicSheetController {
+
+    @Autowired
+    private SysMusicScoreService musicSheetService;
+
+    @Autowired
+    private InstrumentService instrumentService;
+
+    @Resource
+    private SysUserService sysUserService;
+    /**
+     * 查询单条
+     *
+     * @param id 详情ID
+     * @return R<MusicSheetVo.MusicSheet>
+     */
+    @ApiOperation(value = "查询内容平台数据")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "id", value = "id", dataType = "long")
+    })
+    @GetMapping("/cbsDetail/{id}")
+    public R<MusicSheetVo.MusicSheetDetail> cbsDetail(@PathVariable("id") Integer id) {
+        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(id);
+        musicSheet.setBizId(Long.valueOf(id));
+
+        MusicSheetVo.MusicSheetDetail musicSheetDetail = JSON.parseObject(JSON.toJSONString(musicSheet), MusicSheetVo.MusicSheetDetail.class);
+        SysMusicScore detail = musicSheetService.get(id);
+        if (detail == null) {
+            musicSheetDetail.setBizMusicCategoryId(null);
+        } else {
+            // 设置曲目付费类型
+            musicSheetDetail.setPaymentType(StringUtils.isBlank(detail.getRankIds()) ? "FREE" : "VIP");
+            // 设置业务端曲目分类
+            musicSheetDetail.setBizMusicCategoryId(detail.getCategoriesId() == null ? null : detail.getCategoriesId().longValue());
+            musicSheetDetail.setScoreType(detail.getScoreType());
+            musicSheetDetail.setIsConvertibleScore(detail.getIsConvertibleScore());
+        }
+
+        // 如果是合奏 并且乐器ID = 2268
+        musicSheetDetail.setSpecialPercussionFlag(false);
+        if ("2268".equals(musicSheetDetail.getMusicalInstrumentIds()) && musicSheetDetail.getMusicSheetType() == EMusicSheetType.CONCERT) {
+            musicSheetDetail.setSpecialPercussionFlag(true);
+        }
+
+        // 设置乐器信息
+        if (StringUtils.isNotBlank(musicSheetDetail.getMusicalInstrumentIds())) {
+            List<Integer> instrumentIds = Arrays.stream(musicSheetDetail.getMusicalInstrumentIds().split(","))
+                .map(Integer::parseInt).collect(Collectors.toList());
+
+            if (CollectionUtils.isNotEmpty(instrumentIds) && CollectionUtils.isNotEmpty(musicSheetDetail.getMusicalInstruments())) {
+                Map<Integer, InstrumentWrapper.Instrument> instrumentMap = instrumentService.getMapByIds(instrumentIds);
+                for (CbsMusicSheetWrapper.MusicalInstrument musicalInstrument : musicSheetDetail.getMusicalInstruments()) {
+                    InstrumentWrapper.Instrument instrument = instrumentMap.get(musicalInstrument.getId());
+                    if (instrument != null) {
+                        musicalInstrument.setOrientation(instrument.getOrientation());
+                    }
+
+                }
+            }
+        }
+        MusicSheetWrapper.ClientMusicSheetInfoQuery query = new MusicSheetWrapper.ClientMusicSheetInfoQuery();
+        query.setUserType(ClientEnum.SCHOOL);
+        query.setUserId(sysUserService.getUserId());
+        query.setMusicSheetId(id);
+        MusicSheetWrapper.ClientMusicSheetInfo clientMusicSheetInfo = musicSheetService.queryMusicScoreDetail(query);
+        if (clientMusicSheetInfo != null) {
+            musicSheetDetail.setUseStatus(clientMusicSheetInfo.getUseStatus());
+        } else {
+            musicSheetDetail.setUseStatus("LOCK");
+        }
+        return R.from(musicSheetDetail);
+    }
+
+    @ApiOperation(value = "查询分页", notes = "曲谱表- 传入 MusicSheetVo.MusicSheetQuery")
+    @PostMapping("/page")
+    public R<PageInfo<MusicSheetWrapper.MusicSheet>> page(@RequestBody MusicSheetVo.MusicSheetQuery query) {
+
+        SysExamSongQueryInfo queryInfo = new SysExamSongQueryInfo();
+
+        Integer userId = sysUserService.getUserId();
+        if(query.getMusicSheetCategoriesId() != null) {
+            queryInfo.setCategoriesId(query.getMusicSheetCategoriesId().toString());
+        }
+        if (query.getMusicalInstrumentId() != null) {
+            // 乐器转换为声部
+            Instrument instrument = instrumentService.getById(query.getMusicalInstrumentId());
+            if (instrument != null) {
+                queryInfo.setSubjectId(instrument.getSubjectId());
+            } else {
+                queryInfo.setSubjectId(-1);
+            }
+        }
+
+        queryInfo.setPage(query.getPage());
+        queryInfo.setRows(query.getRows());
+        queryInfo.setName(query.getName());
+        queryInfo.setRecentFlag(query.getRecentFlag());
+        queryInfo.setExcludeMusicId(query.getExcludeMusicId());
+        queryInfo.setType("COMMON");
+        queryInfo.setClientFlag(true);
+        queryInfo.setClientType(ClientTypeEnum.SMART_PRACTICE);
+        queryInfo.setUserId(userId);
+        queryInfo.setRecentFlag(query.getRecentFlag());
+        queryInfo.setClientId("education");
+        queryInfo.setUserType(ClientEnum.SCHOOL);
+        PageInfo<SysMusicScore> sysMusicScorePageInfo = musicSheetService.queryMusicScorePage(queryInfo);
+        PageInfo<MusicSheetWrapper.MusicSheet> convert = sysMusicScorePageInfo.convert(o -> {
+            MusicSheetWrapper.MusicSheet musicSheet = new MusicSheetWrapper.MusicSheet();
+            musicSheet.setId(o.getId().toString());
+            musicSheet.setMusicSheetCategoriesId(o.getCategoriesId());
+            musicSheet.setMusicSheetName(o.getName());
+            musicSheet.setTitleImg(o.getTitleImg());
+            musicSheet.setComposer(o.getComposer());
+            musicSheet.setCbsMusicSheetId(o.getCbsMusicSheetId());
+            musicSheet.setUsedNum(0L);
+            musicSheet.setPaymentType(StringUtils.isNotBlank(o.getRankIds()) && o.getRankIds().contains("1") ? "VIP" : "FREE");
+            musicSheet.setAudioPlayTypes(o.getAudioPlayTypes());
+            musicSheet.setUseStatus(o.getUseStatus());
+
+            return musicSheet;
+        });
+
+
+        return R.from(convert);
+    }
+}

+ 37 - 28
mec-application/src/main/java/com/ym/mec/web/controller/StudentManageController.java

@@ -1,10 +1,12 @@
 package com.ym.mec.web.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.google.common.collect.Maps;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
 import com.ym.mec.biz.dal.page.*;
+import com.ym.mec.biz.dal.wrapper.CloudTeacherOrderWrapper;
 import com.ym.mec.biz.dal.wrapper.StudentWrapper;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
@@ -48,7 +50,7 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "获取学生请假异常列表")
     @GetMapping("/queryStudentErrorLeaveList")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryStudentErrorLeaveList')")
-    public Object queryStudentErrorLeaveList(StudentErrorLeaveQueryInfo queryInfo){
+    public HttpResponseResult<PageInfo<StudentErrorLeaveDto>> queryStudentErrorLeaveList(StudentErrorLeaveQueryInfo queryInfo){
         queryInfo.setOrganIds(organizationService.getEmployeeOrgan(queryInfo.getOrganIds()));
         return succeed(studentManageService.queryStudentErrorLeaveList(queryInfo));
     }
@@ -56,14 +58,14 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "获取学生请假课程列表")
     @GetMapping("/queryStudentLeaveCourseList")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryStudentLeaveCourseList')")
-    public Object queryStudentLeaveCourseList(StudentErrorLeaveQueryInfo queryInfo){
+    public HttpResponseResult<PageInfo<StudentLeaveCourseDto>> queryStudentLeaveCourseList(StudentErrorLeaveQueryInfo queryInfo){
         return succeed(studentManageService.queryStudentLeaveCourseList(queryInfo));
     }
 
     @ApiOperation(value = "获取学生列表")
     @PostMapping("/queryStudentList")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryStudentList')")
-    public Object queryStudentList(@RequestBody StudentManageQueryInfo queryInfo){
+    public HttpResponseResult<PageInfo<StudentManageListDto>> queryStudentList(@RequestBody StudentManageQueryInfo queryInfo){
         queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
         queryInfo.setIsExport(false);
         return succeed(studentManageService.findStudentsByOrganId(queryInfo));
@@ -72,7 +74,7 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "获取学生列表")
     @GetMapping("/queryStudent")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryStudent')")
-    public Object queryStudent(StudentActivityQueryInfo queryInfo){
+    public HttpResponseResult<PageInfo<Student>> queryStudent(StudentActivityQueryInfo queryInfo){
         queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
         return succeed(studentManageService.queryStudent(queryInfo));
     }
@@ -80,7 +82,7 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "获取学生列表(基本信息)")
     @GetMapping("/queryStudentBasicInfo")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryStudentBasicInfo')")
-    public Object queryStudentBasicInfo(UserBasicQueryInfo queryInfo){
+    public HttpResponseResult<PageInfo<SysUserDto>> queryStudentBasicInfo(UserBasicQueryInfo queryInfo){
         queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
         return succeed(studentService.queryStudentBasicInfo(queryInfo));
     }
@@ -88,7 +90,7 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "获取61活动学生列表")
     @GetMapping("/queryChildrenDayStudentList")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryChildrenDayStudentList')")
-    public Object queryChildrenDayStudentList(StudentManageQueryInfo queryInfo){
+    public HttpResponseResult<PageInfo<Student>> queryChildrenDayStudentList(StudentManageQueryInfo queryInfo){
         queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
         return succeed(studentService.queryPage(queryInfo));
     }
@@ -104,7 +106,7 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "获取指定分部学生列表")
     @GetMapping("/queryOrganStudentList")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryOrganStudentList')")
-    public Object queryOrganStudentList(StudentManageQueryInfo queryInfo){
+    public HttpResponseResult<PageInfo<StudentManageListDto>> queryOrganStudentList(StudentManageQueryInfo queryInfo){
         if(StringUtils.isBlank(queryInfo.getOrganId())){
             return failed("请指定分部");
         }
@@ -115,21 +117,21 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "学员注册")
     @PostMapping("/register")
     @PreAuthorize("@pcs.hasPermissions('studentManage/register')")
-    public Object studentRegister(Student student){
+    public HttpResponseResult<Integer> studentRegister(Student student){
         return succeed(studentManageService.studentRegister(student));
     }
 
     @ApiOperation(value = "修改学员信息")
     @PostMapping("/studentUpdate")
     @PreAuthorize("@pcs.hasPermissions('studentManage/studentUpdate')")
-    public Object studentUpdate(Student student){
+    public HttpResponseResult<Integer> studentUpdate(Student student){
         return succeed(studentManageService.studentUpdate(student));
     }
 
     @ApiOperation(value = "乐团管理--乐团详情--获取学员列表")
     @GetMapping("/queryMusicGroupStudent")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryMusicGroupStudent')")
-    public Object queryMusicGroupStudent(MusicGroupStudentQueryInfo queryInfo){
+    public HttpResponseResult<PageInfo<MusicGroupStudentsDto>> queryMusicGroupStudent(MusicGroupStudentQueryInfo queryInfo){
         return succeed(studentManageService.queryMusicGroupStudent(queryInfo));
     }
 
@@ -150,7 +152,7 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "乐团修改--学员缴费记录--可新增学员列表")
     @GetMapping("/queryCanAddStudent")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryCanAddStudent')")
-    public Object queryCanAddStudent(String musicGroupId,String batchNo,String search,Integer subjectId){
+    public HttpResponseResult<List<BasicUserDto>> queryCanAddStudent(String musicGroupId, String batchNo, String search, Integer subjectId){
         return succeed(studentManageService.queryCanAddStudent(musicGroupId,batchNo,search,subjectId));
     }
 
@@ -159,7 +161,7 @@ public class StudentManageController extends BaseController {
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryStudentClassGroup')")
     @ApiImplicitParams({@ApiImplicitParam(name = "teacherId", value = "学生编号", required = true, dataType = "Integer"),
             @ApiImplicitParam(name = "musicGroupId", value = "乐团编号", required = true, dataType = "String")})
-    public Object queryStudentClassGroup(String musicGroupId,Integer teacherId){
+    public HttpResponseResult<List<ConditionDto>> queryStudentClassGroup(String musicGroupId,Integer teacherId){
         if(StringUtils.isEmpty(musicGroupId) || teacherId == null){
             return failed("参数校验失败");
         }
@@ -169,42 +171,42 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "乐团管理--乐团详情--学员列表,汇总数据接口")
     @GetMapping("/musicGroupStudentsSum")
     @PreAuthorize("@pcs.hasPermissions('studentManage/musicGroupStudentsSum')")
-    public Object musicGroupStudentsSum(String musicGroupId){
+    public HttpResponseResult<Map<String, Object>> musicGroupStudentsSum(String musicGroupId){
         return succeed(studentManageService.musicGroupStudentsSum(musicGroupId));
     }
 
     @ApiOperation(value = "乐团管理--乐团详情--点名总览")
     @GetMapping("/queryMusicGroupStudentsSign")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryMusicGroupStudentsSign')")
-    public Object queryMusicGroupStudentsSign(StudentSignQueryInfo queryInfo){
+    public HttpResponseResult<PageInfo<MusicGroupStudentSignDto>> queryMusicGroupStudentsSign(StudentSignQueryInfo queryInfo){
         return succeed(studentManageService.queryMusicGroupStudentsSign(queryInfo));
     }
 
     @ApiOperation(value = "根据学生ID获取学生基本报名信息")
     @GetMapping("/findStudentBaseInfo")
     @PreAuthorize("@pcs.hasPermissions('studentManage/findStudentBaseInfo')")
-    public Object findStudentBaseInfo(@ApiParam(value = "学生编号", required = true) Integer userId){
+    public HttpResponseResult<StudentManageListDto> findStudentBaseInfo(@ApiParam(value = "学生编号", required = true) Integer userId){
         return succeed(studentManageService.findStudentManageBaseInfo(userId));
     }
 
     @ApiOperation(value = "根据学生ID获取其所在的乐团")
     @GetMapping("/findStudentMusicGroups")
     @PreAuthorize("@pcs.hasPermissions('studentManage/findStudentMusicGroups')")
-    public Object findStudentMusicGroups(@ApiParam(value = "学生编号", required = true) Integer userId){
+    public HttpResponseResult<List<StudentManageBaseInfoOfMusicGroupDto>> findStudentMusicGroups(@ApiParam(value = "学生编号", required = true) Integer userId){
         return succeed(studentManageService.findStudentMusicGroupsByUserId(userId));
     }
 
     @ApiOperation("获取学生所在乐团列表名称")
     @GetMapping(value = "/queryUserMusicInfos")
     @PreAuthorize("@pcs.hasPermissions('studentManage/queryUserMusicInfos')")
-    public Object queryUserMusicInfos(Integer userId) {
+    public HttpResponseResult<List<MusicCardDto>> queryUserMusicInfos(Integer userId) {
         return succeed(studentManageService.queryUserMusicInfos(userId));
     }
 
     @ApiOperation(value = "根据乐团获取排课列表")
     @GetMapping("/findStudentCourses")
     @PreAuthorize("@pcs.hasPermissions('studentManage/findStudentCourses')")
-    public Object findStudentCourses(StudentManageCourseQueryInfo queryInfo){
+    public HttpResponseResult<PageInfo> findStudentCourses(StudentManageCourseQueryInfo queryInfo){
         return succeed(studentManageService.findStudentCourseList(queryInfo));
     }
 
@@ -309,14 +311,6 @@ public class StudentManageController extends BaseController {
         return succeed(studentManageService.sumStudentAttendance(courseScheduleId));
     }
 
-    @ApiOperation(value = "新增会员试用")
-    @PostMapping("/updateMemberExperience")
-    @PreAuthorize("@pcs.hasPermissions('studentManage/updateMemberExperience')")
-    public HttpResponseResult updateMemberExperience(String studentIds, Integer rankId, Date endTime){
-        studentService.updateMemberExperience(studentIds,rankId,endTime);
-        return succeed();
-    }
-
     @ApiOperation(value = "初始化教师编号")
     @GetMapping("/initTeacherId")
     @PreAuthorize("@pcs.hasPermissions('studentManage/initTeacherId')")
@@ -520,8 +514,23 @@ public class StudentManageController extends BaseController {
     @ApiOperation(value = "修改学员会员时长")
     @PostMapping("/updateStudentMember")
     @PreAuthorize("@pcs.hasPermissions('studentManage/updateStudentMember')")
-    public HttpResponseResult updateStudentMember(Integer userId,Date endTime,String memo) throws Exception {
-        studentService.updateStudentMember(userId,endTime,memo,sysUserService.getUserId());
+    public HttpResponseResult updateStudentMember(@RequestBody CloudTeacherOrderWrapper.UpdateStudentMemberDto param) throws Exception {
+        param.setOperatorId(sysUserService.getUserId());
+        studentService.updateStudentMember(param);
         return succeed();
     }
+
+    @ApiOperation(value = "根据学生ID获取学生信息")
+    @GetMapping("/queryUserInfo")
+    public Object queryUserInfo(@ApiParam(value = "学生编号", required = true) Integer userId){
+
+        // 返回数据
+        Map<String, Object> dataMap = Maps.newHashMap();
+
+        // 查询学员基本信息
+        Student student = studentManageService.getStudentUserInfo(userId, null, dataMap);
+        dataMap.put("student", student);
+
+        return succeed(dataMap);
+    }
 }

+ 49 - 0
mec-application/src/main/java/com/ym/mec/web/controller/StudentMemberUpdateLogController.java

@@ -0,0 +1,49 @@
+package com.ym.mec.web.controller;
+
+
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.PageUtil;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+
+import com.alibaba.fastjson.JSONObject;
+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 lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+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.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import com.ym.mec.biz.service.StudentMemberUpdateLogService;
+import com.ym.mec.biz.dal.wrapper.StudentMemberUpdateLogWrapper;
+import com.ym.mec.biz.dal.entity.StudentMemberUpdateLog;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("${app-config.url.web:}/studentMemberUpdateLog")
+@Api(tags = "学员云教练时长修改记录")
+public class StudentMemberUpdateLogController extends BaseController {
+
+    @Autowired
+    private StudentMemberUpdateLogService studentMemberUpdateLogService;
+
+    @ApiOperation(value = "查询分页", notes = "学员云教练时长修改记录- 传入 StudentMemberUpdateLogWrapper.StudentMemberUpdateLogQuery") 
+    @PostMapping("/page")
+    public HttpResponseResult<PageInfo<StudentMemberUpdateLogWrapper.StudentMemberUpdateLog>> page(@RequestBody StudentMemberUpdateLogWrapper.StudentMemberUpdateLogQuery query) {
+        
+        IPage<StudentMemberUpdateLogWrapper.StudentMemberUpdateLog> pages = studentMemberUpdateLogService.selectPage(QueryInfo.getPage(query), query);
+        
+        return succeed(PageUtil.pageInfo(pages));
+	}
+
+}

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

@@ -107,7 +107,7 @@ public class StudentRegistrationController extends BaseController {
     @ApiOperation(value = "乐团【报名中、缴费中】 学生详情列表分页查询")
     @GetMapping("/queryStudentApplyDetail")
     @PreAuthorize("@pcs.hasPermissions('studentRegistration/queryStudentApplyDetail')")
-    public Object queryStudentApplyDetail(StudentRegistrationQueryInfo queryInfo) {
+    public HttpResponseResult<PageInfo<StudentApplyDetailDto>> queryStudentApplyDetail(StudentRegistrationQueryInfo queryInfo) {
         return succeed(studentRegistrationService.queryStudentDetailPage(queryInfo));
     }
 

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

@@ -1,11 +1,11 @@
 package com.ym.mec.web.controller;
 
-import com.dayaedu.cbs.domain.wrapper.MusicSheetWrapper;
 import com.ym.mec.biz.dal.dto.ReasonDto;
 import com.ym.mec.biz.dal.entity.SysMusicScore;
 import com.ym.mec.biz.dal.enums.ClientTypeEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
+import com.ym.mec.biz.dal.wrapper.MusicSheetWrapper;
 import com.ym.mec.biz.service.SysMusicScoreService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;

+ 8 - 0
mec-application/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -757,4 +757,12 @@ public class TaskController extends BaseController {
     public void workOverdue(){
         userMusicService.workOverdue();
     }
+
+    /**
+     * 删除过期作业
+     */
+    @GetMapping("/deleteOverdueHomework")
+    public void deleteOverdueHomework(){
+        studentCourseHomeworkService.deleteOverdueHomework();
+    }
 }

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

@@ -3,6 +3,7 @@ package com.ym.mec.web.controller;
 import com.ym.mec.biz.dal.entity.TenantConfig;
 import com.ym.mec.biz.service.TenantConfigService;
 import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.tenant.TenantContextHolder;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -12,6 +13,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.Map;
+
 @RequestMapping("${app-config.url.web:}/tenantConfig")
 @Api(tags = "机构配置管理")
 @RestController
@@ -32,7 +35,7 @@ public class TenantConfigController extends BaseController {
 	@ApiOperation("当前机构是否可以自动激活团练宝")
 	@GetMapping(value = "/autoActivationFlag")
 	@PreAuthorize("@pcs.hasPermissions('tenantConfig/autoActivationFlag')")
-	public Object autoActivationFlag() {
+	public HttpResponseResult<Map<Integer, Boolean>> autoActivationFlag() {
 		return succeed(tenantConfigService.autoActivationFlag(TenantContextHolder.getTenantId()));
 	}
 }

+ 1 - 1
mec-application/src/main/java/com/ym/mec/web/controller/education/CourseHomeworkTemplateController.java

@@ -45,7 +45,7 @@ public class CourseHomeworkTemplateController extends BaseController {
     @PostMapping("/update")
     public Object update(CourseHomeworkTemplate courseHomeworkTemplate){
         if(Objects.isNull(courseHomeworkTemplate.getId())){
-            return failed("请指定作业模板");
+            return failed("请指定训练模板");
         }
         courseHomeworkTemplateService.update(courseHomeworkTemplate);
         return succeed();

+ 17 - 0
mec-application/src/main/java/com/ym/mec/web/controller/education/EduStudentController.java

@@ -1,9 +1,11 @@
 package com.ym.mec.web.controller.education;
 
+import com.google.common.collect.Maps;
 import com.ym.mec.biz.dal.dto.BaseMapDto;
 import com.ym.mec.biz.dal.dto.EduOrganStudentDataDto;
 import com.ym.mec.biz.dal.dto.StatDto;
 import com.ym.mec.biz.dal.entity.Organization;
+import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.page.StudentQueryInfo;
 import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.biz.service.StudentManageService;
@@ -21,6 +23,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -51,6 +54,20 @@ public class EduStudentController extends BaseController {
         return succeed(studentManageService.findStudentMusicGroupsByUserId(userId));
     }
 
+    @ApiOperation(value = "根据学生ID获取学生信息")
+    @GetMapping("/queryUserInfo")
+    public Object queryUserInfo(@ApiParam(value = "学生编号", required = true) Integer userId){
+
+        // 返回数据
+        Map<String, Object> dataMap = Maps.newHashMap();
+
+        // 查询学员基本信息
+        Student student = studentManageService.getStudentUserInfo(userId, null, dataMap);
+        dataMap.put("student", student);
+
+        return succeed(dataMap);
+    }
+
     @ApiOperation(value = "分部云教练学员数据预览")
     @GetMapping("/organStudentOverView")
     public HttpResponseResult<List<EduOrganStudentDataDto>> organStudentOverView() throws Exception {

+ 94 - 0
mec-application/src/main/java/com/ym/mec/web/controller/open/OpenMusicSheetController.java

@@ -0,0 +1,94 @@
+package com.ym.mec.web.controller.open;
+
+import com.alibaba.fastjson.JSON;
+import com.dayaedu.cbs.common.enums.school.EMusicSheetType;
+import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
+import com.microsvc.toolkit.common.response.template.R;
+import com.ym.mec.biz.dal.entity.SysMusicScore;
+import com.ym.mec.biz.dal.wrapper.InstrumentWrapper;
+import com.ym.mec.biz.service.InstrumentService;
+import com.ym.mec.biz.service.SysMusicScoreService;
+import com.ym.mec.vo.MusicSheetVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+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.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Validated
+@RestController
+@RequestMapping("${app-config.url.web:}/open/musicSheet")
+@Api(tags = "曲谱表")
+public class OpenMusicSheetController {
+
+    @Autowired
+    private SysMusicScoreService musicSheetService;
+
+    @Autowired
+    private InstrumentService instrumentService;
+
+    /**
+     * 查询单条
+     *
+     * @param id 详情ID
+     * @return R<MusicSheetVo.MusicSheet>
+     */
+    @ApiOperation(value = "查询内容平台数据")
+    @ApiImplicitParams({
+        @ApiImplicitParam(name = "id", value = "id", dataType = "long")
+    })
+    @GetMapping("/cbsDetail/{id}")
+    public R<MusicSheetVo.OpenMusicSheetDetail> cbsDetail(@PathVariable("id") Integer id) {
+        CbsMusicSheetWrapper.MusicSheet musicSheet = musicSheetService.cbsDetail(id);
+        musicSheet.setBizId(Long.valueOf(id));
+
+        MusicSheetVo.MusicSheetDetail musicSheetDetail = JSON.parseObject(JSON.toJSONString(musicSheet), MusicSheetVo.MusicSheetDetail.class);
+        SysMusicScore detail = musicSheetService.get(id);
+        if (detail == null) {
+            musicSheetDetail.setBizMusicCategoryId(null);
+        } else {
+            // 设置曲目付费类型
+            musicSheetDetail.setPaymentType(StringUtils.isBlank(detail.getRankIds()) ? "FREE" : "VIP");
+            // 设置业务端曲目分类
+            musicSheetDetail.setBizMusicCategoryId(detail.getCategoriesId() == null ? null : detail.getCategoriesId().longValue());
+        }
+        // 如果是合奏 并且乐器ID = 2268
+        musicSheetDetail.setSpecialPercussionFlag(false);
+        if ("2268".equals(musicSheetDetail.getMusicalInstrumentIds()) && musicSheetDetail.getMusicSheetType() == EMusicSheetType.CONCERT) {
+            musicSheetDetail.setSpecialPercussionFlag(true);
+        }
+
+        // 设置乐器信息
+        if (StringUtils.isNotBlank(musicSheetDetail.getMusicalInstrumentIds())) {
+            List<Integer> instrumentIds = Arrays.stream(musicSheetDetail.getMusicalInstrumentIds().split(","))
+                .map(Integer::parseInt).collect(Collectors.toList());
+
+            if (CollectionUtils.isNotEmpty(instrumentIds) && CollectionUtils.isNotEmpty(musicSheetDetail.getMusicalInstruments())) {
+                Map<Integer, InstrumentWrapper.Instrument> instrumentMap = instrumentService.getMapByIds(instrumentIds);
+                for (CbsMusicSheetWrapper.MusicalInstrument musicalInstrument : musicSheetDetail.getMusicalInstruments()) {
+                    InstrumentWrapper.Instrument instrument = instrumentMap.get(musicalInstrument.getId());
+                    if (instrument != null) {
+                        musicalInstrument.setOrientation(instrument.getOrientation());
+                    }
+
+                }
+            }
+        }
+        return R.from(MusicSheetVo.OpenMusicSheetDetail.from(musicSheetDetail.jsonString()));
+    }
+
+}

+ 27 - 27
mec-application/src/main/resources/exportColumnMapper.ini

@@ -11,11 +11,11 @@ headColumns = ["分部", "合作单位", "乐团","学员编号", "学员姓名"
 fieldColumns = ["organName", "cooperationOrganName", "musicGroupName","userId", "username", "phone","subjectName","currentClass", "realName", "isReserve == true ?'是':'否'","gradeLeave","theoryLevel","buyVipFlag == true ?'是':'否'","buyTheoryCourseFlag == true ?'是':'否'"]
 
 [2021双十一学员购买详情]
-headColumns = ["学员编号", "学员姓名","订单号", "交易金额","交易时间", "订单创建时间", "购买课程", "赠送会员"]
+headColumns = ["学员编号", "学员姓名","订单号", "交易金额","交易时间", "订单创建时间", "购买课程", "赠送学练宝"]
 fieldColumns = ["userId", "username", "orderNo","amount", "payTime", "createTime","type","giveMember==0?'否':'是'"]
 
 [分部2021双11活动统计导出]
-headColumns = ["分部", "总成交金额","总购买人数", "人均购买金额","20节1v1成交金额", "20节1v1成交人数", "40节1v1成交金额", "40节1v1成交人数", "20节1v2成交金额", "20节1v2成交人数","40节1v2成交金额", "40节1v2成交人数", "小组课成交金额", "小组课成交人数", "赠送会员人数"]
+headColumns = ["分部", "总成交金额","总购买人数", "人均购买金额","20节1v1成交金额", "20节1v1成交人数", "40节1v1成交金额", "40节1v1成交人数", "20节1v2成交金额", "20节1v2成交人数","40节1v2成交金额", "40节1v2成交人数", "小组课成交金额", "小组课成交人数", "赠送学练宝人数"]
 fieldColumns = ["organName", "totalBuyAmount", "totalBuyNum","avgBuyAmount", "vip1V120Amount", "vip1V120Num","vip1V140Amount", "vip1V140Num", "vip1V220Amount", "vip1V220Num","vip1V240Amount" ,"vip1V240Num","musicTheoryAmount","musicTheoryNum","giveMemberNum"]
 
 [学生个人账户余额导出]
@@ -43,7 +43,7 @@ headColumns = ["分部编号", "分部名称", "课程组类型", "课程组编
 fieldColumns = ["organId", "organName", "groupType.desc", "groupId", "groupName", "username", "userId", "courseScheduleId", "courseScheduleName", "classDate", "startClassTime", "endClassTime", "guideTeacherName", "guideTeacherId" , "educationalTeacherName", "educationalTeacherId", "actualTeacherName", "actualTeacherId", "studentAttendanceStatus.msg"]
 
 [缴费记录导出]
-headColumns = ["学员编号", "学员姓名", "学员声部", "学员状态", "手机号","缴费开始日期", "缴费截止日期", "是否开启缴费", "缴费状态", "支付时间","会员金额", "乐器金额", "课程金额", "辅件金额", "乐保金额", "活动金额"]
+headColumns = ["学员编号", "学员姓名", "学员声部", "学员状态", "手机号","缴费开始日期", "缴费截止日期", "是否开启缴费", "缴费状态", "支付时间","学练宝金额", "乐器金额", "课程金额", "辅件金额", "乐保金额", "活动金额"]
 fieldColumns = ["userId", "sysUser.username", "studentRegistration.subjectName", "studentRegistration.musicGroupStatus.msg", "sysUser.phone", "startPaymentDateMgpc", "deadlinePaymentDateMgpc", "openFlag.msg", "paymentStatus.desc", "payTime", "cloudAmount", "musicalAmount", "courseAmount", "accessoriesAmount", "maintenanceAmount", "activityAmount"]
 
 [业务管理--审核列表导出]
@@ -75,8 +75,8 @@ headColumns = ["课程组编号", "课程组名称", "分部", "指导老师", "
 fieldColumns = ["musicGroupId", "courseGroupName", "organName", "teacherName", "settlementStatus.msg", "expectRewardAmount", "settlementDate", "memo"]
 
 [导出学员列表]
-headColumns = ["分部", "学员编号", "学员姓名", "性别", "家长姓名","家长联系电话", "是否激活", "是否有课", "是否有网管课","网管课剩余课时","VIP课剩余课时", "课程余额(元)", "账户余额(元)","所在乐团", "乐团所属声部", "所在乐团状态", "所在vip课", "所在VIP状态", "服务标签", "运营标签", "指导老师", "是否签订协议", "是否使用云教练", "会员截止日期", "会员剩余天数", "会员试用结束日期", "会员试用剩余天数"]
-fieldColumns = ["organName", "userId", "username", "gender.description", "parentsName", "parentsPhone", "isActive.msg", "hasCourse.msg", "hasPracticeCourse.msg","noStartPracticeCourseNum","noStartVipCourseNum", "courseBalance", "balance", "musicGroupName", "subjectName", "musicGroupStatus", "vipGroupName", "vipGroupStatus", "serviceTag.msg", "operatingTag.msg", "teacherName", "isSignedContract ? '是' : '否'", "recordUserId == null ? '否' : '是'", "membershipEndTime","membershipEndTime == null ? hasNoStartCloudTeacher ? '未生效' : '未购买' : membershipDay >= 0 ? membershipDay : hasNoStartCloudTeacher ? '未生效' : '会员已过期'", "experienceMembershipEndTime","membershipEndTime == null ? '未试用' : membershipDay >= 0 ? membershipDay : '已失效'"]
+headColumns = ["分部", "学员编号", "学员姓名", "性别", "家长姓名","家长联系电话", "是否激活", "是否有课", "是否有网管课","网管课剩余课时","VIP课剩余课时", "课程余额(元)", "账户余额(元)","所在乐团", "乐团所属声部", "所在乐团状态", "所在vip课", "所在VIP状态", "服务标签", "运营标签", "指导老师", "是否签订协议", "是否使用学练宝", "学练宝截止日期", "学练宝剩余天数", "学练宝试用结束日期", "学练宝试用剩余天数"]
+fieldColumns = ["organName", "userId", "username", "gender.description", "parentsName", "parentsPhone", "isActive.msg", "hasCourse.msg", "hasPracticeCourse.msg","noStartPracticeCourseNum","noStartVipCourseNum", "courseBalance", "balance", "musicGroupName", "subjectName", "musicGroupStatus", "vipGroupName", "vipGroupStatus", "serviceTag.msg", "operatingTag.msg", "teacherName", "isSignedContract ? '是' : '否'", "recordUserId == null ? '否' : '是'", "membershipEndTime","membershipEndTime == null ? hasNoStartCloudTeacher ? '未生效' : '未购买' : membershipDay >= 0 ? membershipDay : hasNoStartCloudTeacher ? '未生效' : '学练宝已过期'", "experienceMembershipEndTime","membershipEndTime == null ? '未试用' : membershipDay >= 0 ? membershipDay : '已失效'"]
 
 [导出陪练课列表]
 headColumns = ["课程组编号", "课程组名称", "课程组类型", "分部", "教务老师", "指导老师", "班级人数","当前课次", "总课次", "剩余课次", "开课时间", "结束时间", "课程组状态", "是否续费", "备注"]
@@ -99,11 +99,11 @@ headColumns = ["分部", "乐团", "商品类型", "商品名称", "型号", "
 fieldColumns = ["brief", "memo", "type.desc", "name", "specification", "sellCount"]
 
 [导出学员采购清单明细]
-headColumns = ["分部", "乐团", "学员编号", "学员姓名", "声部", "购买乐器", "乐器采购方式", "乐器金额", "购买教辅", "教辅金额", "课程金额", "云教练金额", "乐保金额", "订单总价"]
+headColumns = ["分部", "乐团", "学员编号", "学员姓名", "声部", "购买乐器", "乐器采购方式", "乐器金额", "购买教辅", "教辅金额", "课程金额", "学练宝金额", "乐保金额", "订单总价"]
 fieldColumns = ["organName", "musicGroupName", "userId", "username", "subjectName", "musicalName", "kitGroupPurchaseTypeEnum.msg", "musicalAmount", "accessoriesName", "accessoriesAmount", "courseAmount", "cloudTeacherAmount", "maintenanceAmount", "orderAmount"]
 
 [学生详情列表导出]
-headColumns = ["学生姓名", "家长姓名", "年级", "班级", "性别", "服从调剂", "报名专业","实际专业", "联系电话", "学员缴费状态", "乐器购买方式","缴费中/审核中","是否购买云教练"]
+headColumns = ["学生姓名", "家长姓名", "年级", "班级", "性别", "服从调剂", "报名专业","实际专业", "联系电话", "学员缴费状态", "乐器购买方式","缴费中/审核中","是否购买学练宝"]
 fieldColumns = ["studentName", "parentsName", "currentGrade", "currentClass", "gender.description", "isAllowAdjust.msg", "subjectName", "actualSubjectName", "parentsPhone", "paymentStatus.desc", "kitGroupPurchaseTypeEnum.msg","payingStatusStr","hasCloudTeacher==1?'有':'没有'"]
 
 [分页导出教师薪酬列表]
@@ -115,15 +115,15 @@ headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订
 fieldColumns = ["id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount","balancePaymentAmount","couponRemitFee", "transferFee", "platformFee", "payTime", "organName","memo"]
 
 [订单列表导出1]
-headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额", "课程家长采买","课程学校采买", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "云教练", "押金", "乐器", "教辅费用", "上门费","账户充值", "零售乐器","大件乐器", "其它", "汇付手续费","平台手续费", "到账时间","关联乐团ID/VIP课ID","课程形态","类型","收费乐团编号","收费乐团","零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
+headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额", "课程家长采买","课程学校采买", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "学练宝", "押金", "乐器", "教辅费用", "上门费","账户充值", "零售乐器","大件乐器", "其它", "汇付手续费","平台手续费", "到账时间","关联乐团ID/VIP课ID","课程形态","类型","收费乐团编号","收费乐团","零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
 fieldColumns = ["id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount","balancePaymentAmount","couponRemitFee","musicGroupCourseFee","courseSchoolBuyAmount", "vipCourseFee",  "liveCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee","leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee","retailGoodsFee","largeMusicalFee", "otherFee", "transferFee", "platformFee", "payTime", "musicGroupId","groupType.desc","typeDesc","feeMusicGroupId","feeMusicGroupName", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
 
 [订单列表导出2]
-headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额","课程家长采买","课程学校采买", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "云教练", "押金", "乐器", "教辅费用", "上门费","账户充值", "零售乐器","大件乐器", "其它","平台手续费", "到账时间",    "关联乐团ID/VIP课ID", "课程形态","类型","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
+headColumns = ["序号", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额","课程家长采买","课程学校采买", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "学练宝", "押金", "乐器", "教辅费用", "上门费","账户充值", "零售乐器","大件乐器", "其它","平台手续费", "到账时间",    "关联乐团ID/VIP课ID", "课程形态","类型","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
 fieldColumns = ["id", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount", "balancePaymentAmount",  "couponRemitFee",     "musicGroupCourseFee","courseSchoolBuyAmount", "vipCourseFee",  "liveCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee",     "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee","retailGoodsFee","largeMusicalFee", "otherFee", "platformFee", "payTime", "musicGroupId", "groupType.desc","typeDesc","feeMusicGroupId","feeMusicGroupName", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
 
 [订单列表汇总导出]
-headColumns = ["分部", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额","课程家长采买","课程学校采买", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "云教练", "押金", "乐器", "教辅费用", "上门费","账户充值", "零售乐器","大件乐器", "其它"]
+headColumns = ["分部", "订单金额", "应付金额", "现金支付", "余额支付", "优惠金额","课程家长采买","课程学校采买", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "学练宝", "押金", "乐器", "教辅费用", "上门费","账户充值", "零售乐器","大件乐器", "其它"]
 fieldColumns = ["organName", "orderAmount", "expectAmount", "actualAmount", "balancePaymentAmount",  "couponRemitFee","musicGroupCourseFee","courseSchoolBuyAmount", "vipCourseFee", "liveCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee","leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee","retailGoodsFee","largeMusicalFee", "otherFee"]
 
 [学员小课记录导出]
@@ -131,8 +131,8 @@ headColumns = ["分部", "学员编号", "学生姓名", "年级", "课程余额
 fieldColumns = ["organName","userId", "username", "grade","courseBalance", "subjectName", "normalClassTeacherId", "normalClassTeacherName", "beforeClassNum", "vipTotalNum", "vipOverNum", "vipNotStartNum", "vipOverTeacherId", "vipOverTeacherName", "vipNotStartTeacherId", "vipNotStartTeacherName" , "practiceOverNum", "practiceNotStartNum", "practiceOverTeacherId", "practiceOverTeacherName", "practiceNotStartTeacherId", "practiceNotStartTeacherName","teacherId","teacherName"]
 
 [乐团导出学员列表]
-headColumns = ["学员编号", "学员姓名", "性别", "联系电话","入团时间", "年级", "班级", "入团专业", "学员状态", "报名缴费", "缴费金额", "是否激活","VIP/网管是否有课","关心包","加油包", "欠费金额(元)", "退团原因", "会员截止时间", "会员剩余天数"]
-fieldColumns = ["userId", "realName", "gender", "phone","registerTime", "currentGrade", "currentClass", "subjectName", "studentStatus", "paymentStatus.desc" ,"courseFee", "activeName", "hasCourse ? '是' : '否'" ,"carePackage == null || carePackage == 0 ? '不可用' : carePackage == 1 ? '可用' : '已使用'" ,"comeOnPackage == null || comeOnPackage == 0 ? '不可用' : comeOnPackage == 1 ? '可用' : '已使用'" ,"noPaymentAmount == null ? 0 : noPaymentAmount", "quitReason", "membershipEndTime","membershipEndTime == null ? hasNoStartCloudTeacher ? '未生效' : '未购买' : membershipDay >= 0 ? membershipDay : hasNoStartCloudTeacher ? '未生效' : '会员已过期'"]
+headColumns = ["学员编号", "学员姓名", "性别", "联系电话","入团时间", "年级", "班级", "入团专业", "学员状态", "报名缴费", "缴费金额", "是否激活","VIP/网管是否有课","关心包","加油包", "欠费金额(元)", "退团原因", "学练宝截止时间", "学练宝剩余天数"]
+fieldColumns = ["userId", "realName", "gender", "phone","registerTime", "currentGrade", "currentClass", "subjectName", "studentStatus", "paymentStatus.desc" ,"courseFee", "activeName", "hasCourse ? '是' : '否'" ,"carePackage == null || carePackage == 0 ? '不可用' : carePackage == 1 ? '可用' : '已使用'" ,"comeOnPackage == null || comeOnPackage == 0 ? '不可用' : comeOnPackage == 1 ? '可用' : '已使用'" ,"noPaymentAmount == null ? 0 : noPaymentAmount", "quitReason", "membershipEndTime","membershipEndTime == null ? hasNoStartCloudTeacher ? '未生效' : '未购买' : membershipDay >= 0 ? membershipDay : hasNoStartCloudTeacher ? '未生效' : '学练宝已过期'"]
 
 [评论列表导出]
 headColumns = ["分部", "上课日期", "学生编号", "课程编号", "学员是否到课", "课程班名称", "老师", "教材内容", "发音", "节奏", "小组", "曲目", "评价备注", "回访日期(布置训练)", "完成app双向沟通", "学员评分", "是否布置训练", "是否提交训练", "是否回复训练", "教务老师", "教务评价"]
@@ -175,11 +175,11 @@ headColumns = ["序号", "业务分部",  "学生编号", "学生姓名", "交
 fieldColumns = ["id", "userOrganName", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance",  "couponRemitFee", "transferFee", "platformFee", "payTime", "organName", "memo"]
 
 [财务管理导出1]
-headColumns = ["序号", "业务分部",  "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "云教练", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "汇付手续费", "平台手续费", "到账时间", "关联乐团ID/VIP课ID", "课程形态","类型","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
+headColumns = ["序号", "业务分部",  "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "学练宝", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "汇付手续费", "平台手续费", "到账时间", "关联乐团ID/VIP课ID", "课程形态","类型","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
 fieldColumns = ["id", "userOrganName", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount", "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance",  "couponRemitFee","musicGroupCourseFee", "vipCourseFee",  "liveCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee", "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee", "otherFee", "transferFee", "platformFee", "payTime", "musicGroupId", "groupType.desc","typeDesc","feeMusicGroupId","feeMusicGroupName", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
 
 [财务管理导出2]
-headColumns = ["序号", "业务分部", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "云教练", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "平台手续费", "到账时间", "关联乐团ID/VIP课ID", "课程形态","类型","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
+headColumns = ["序号", "业务分部", "学生编号", "学生姓名", "交易流水号", "订单编号", "收款渠道", "收款账户", "订单金额", "应付金额", "现金支付", "余额支付", "分润账户", "分润金额", "分配余额", "优惠金额", "乐团课", "VIP课",  "直播课", "网管课", "小组课", "考级", "维修费用", "乐保费用", "学练宝", "押金", "乐器", "教辅费用", "上门费", "账户充值", "其它", "平台手续费", "到账时间", "关联乐团ID/VIP课ID", "课程形态","类型","收费乐团编号","收费乐团", "零星收款类别", "专业", "分部", "教学点", "合作单位", "乐团主管", "备注"]
 fieldColumns = ["id", "userOrganName", "userId", "user.username", "transNo", "orderNo", "paymentChannel", "merNos", "orderAmount" , "expectAmount", "actualAmount", "balancePaymentAmount", "routeMerNo", "routeAmount", "routeBalance",  "couponRemitFee","musicGroupCourseFee", "vipCourseFee",  "liveCourseFee", "practiceCourseFee", "theoryCourseFee", "degreeFee", "repairFee", "maintenanceFee", "cloudTeacherFee", "leaseFee", "musicalFee", "teachingFee", "visitFee", "rechargeFee", "otherFee", "platformFee", "payTime", "musicGroupId", "groupType.desc","typeDesc","feeMusicGroupId","feeMusicGroupName", "sporadicType", "subjectName", "organName", "schoolName", "cooperationOrganName", "eduTeacher", "memo"]
 
 [老师默认课酬导出]
@@ -215,7 +215,7 @@ headColumns = ["分部", "老师编号", "老师姓名", "服务周期", "课后
 fieldColumns = ["organName", "teacherId", "teacherName", "dateRange", "homeworkNum", "exerciseNum", "actualExercisesNum", "exercisesReplyNum", "expectExercisesNum>actualExercisesNum?'异常':'正常'", "exercisesReplyNum>exercisesMessageNum?'异常':'正常'", "submitRate", "remindDate", "operatorName"]
 
 [首页异常统计导出]
-headColumns = ["分部", "基础技能班学员数量异常", "乐团巡查事项异常", "未在班级学员数", "欠费学员数","申请退团学员数", "预计课酬较低", "课程时间安排异常", "乐团巡查未计划", "乐团巡查任务未提交","回访任务未完成", "课程考勤异常", "课程异常", "服务指标异常", "异常请假", "会员过期学员数", "总计"]
+headColumns = ["分部", "基础技能班学员数量异常", "乐团巡查事项异常", "未在班级学员数", "欠费学员数","申请退团学员数", "预计课酬较低", "课程时间安排异常", "乐团巡查未计划", "乐团巡查任务未提交","回访任务未完成", "课程考勤异常", "课程异常", "服务指标异常", "异常请假", "学练宝过期学员数", "总计"]
 fieldColumns = ["organName", "highClassStudentLessThanThreeNum", "musicPatrolItem", "noClassMusicGroupStudentInfo", "studentNotPayment", "studentApplyForQuitMusicGroup", "teacherExpectSalaryBeLow", "courseTimeError", "inspectionItem", "inspectionItemPlan", "studentVisit", "teacherExceptionAttendance", "teacherNotAClass", "teacherServeError", "studentErrorLeave", "noMemberStudentNum", "total"]
 
 [运营预警导出]
@@ -235,15 +235,15 @@ headColumns = ["编号", "姓名", "手机号", "微信","声部", "所在城市
 fieldColumns = ["id", "realName", "mobileNo", "wechatNo", "subjectName", "liveCity", "intentionCity", "sourceFrom", "nextVisitDateStr", "entryDateStr", "position.msg","organName","status.desc", "idCard", "age", "gender?'男':'女'", "bankCardNo","bankAddress","emergencyContactName", "emergencyContactRelation", "emergencyContactPhone", "updateTime", "hrbpName","resignationDateStr"]
 
 [分部云教练学员数据预览导出]
-headColumns = ["排名", "分部", "学员总数", "目标人数", "活跃人数", "使用人数", "新增使用人数", "使用比例", "付费会员数", "付费会员占比"]
+headColumns = ["排名", "分部", "学员总数", "目标人数", "活跃人数", "使用人数", "新增使用人数", "使用比例", "付费学练宝数", "付费学练宝占比"]
 fieldColumns = ["index","organName", "totalStudentNum", "targetNum", "cloudStudyLivelyStudentNum", "cloudStudyUseStudentNum", "newCloudStudyStudentNum", "cloudStudyUseStudentDuty+'%'", "vipStudentNum", "vipStudentDuty+'%'"]
 
 [分部云教练学员数据详情导出]
-headColumns = ["分部", "在读人数", "生效待激活总人数", "会员占比", "生效会员", "待激活", "覆盖率", "复购率","近一个月活跃人数", "今日使用人数"]
+headColumns = ["分部", "在读人数", "生效待激活总人数", "学练宝占比", "生效学练宝", "待激活", "覆盖率", "复购率","近一个月活跃人数", "今日使用人数"]
 fieldColumns = ["organName", "totalStudentNum", "vipStudentNum", "vipStudentRate+'%'", "effectiveVipStudentNum", "waitActivateVipStudentNum", "buyRate+'%'", "againBuyRate+'%'", "activeStudentNum", "cloudStudyTodayUseStudentNum"]
 
 [分部云教练学员训练数据导出]
-headColumns = ["分部", "学员编号", "学员","年级","班级", "手机号", "是否新用户", "是否激活", "是否会员", "训练总时长", "连续训练天数", "乐团", "乐团主管", "所属学校", "声部", "声部老师",  "是否有小课","训练次数", "训练天数", "训练平均时长", "会员有效期", "是否服务", "是否运营", "是否云教练活动目标学员", "活动消费金额", "关心包", "加油包", "未上课数", "vip课剩余课时", "网管课剩余课时"]
+headColumns = ["分部", "学员编号", "学员","年级","班级", "手机号", "是否新用户", "是否激活", "是否学练宝", "训练总时长", "连续训练天数", "乐团", "乐团主管", "所属学校", "声部", "声部老师",  "是否有小课","训练次数", "训练天数", "训练平均时长", "学练宝有效期", "是否服务", "是否运营", "是否学练宝活动目标学员", "活动消费金额", "关心包", "加油包", "未上课数", "vip课剩余课时", "网管课剩余课时"]
 fieldColumns = ["organName","studentId", "studentName","currentGradeNum","currentClass", "phone", "newUser?'是':'否'", "enable?'是':'否'", "memberFlag?'是':'否'", "cloudStudyUseTime+'分钟'", "cloudStudyRunningDays+'天'", "musicGroupNames", "educationName", "schoolNames","subjectName","subjectTeacherName",  "hasVipGroup>0?'是':'否'", "cloudStudyUseNum+'次'", "cloudStudyUseDays+'天'",         "cloudStudyUseAvgTime+'分钟'", "membershipEndTime", "serviceTag>0?'是':'否'", "operatingTag>0?'是':'否'","countFlag == null?'否':countFlag == 1?'是':'否'","activeAmount",         "carePackage>0?carePackage>1?'已使用':'可用':'不可用'", "comeOnPackage>0?comeOnPackage>1?'已使用':'可用':'不可用'",         "notStartCourseNum", "notStartVipCourseNum", "notStartPracticeCourseNum"]
 
 [分部云教练活动统计数据导出]
@@ -323,11 +323,11 @@ headColumns = ["分部", "在读人数", "应有课耗", "实际课耗","课耗
 fieldColumns = ["organName","normalNum","courseConsumerNum","courseSum","courseConsumerRate+'%'","num5","num4","num3","num2","num1","num0","standRate+'%'"]
 
 [云教练统计导出]
-headColumns = ["分部", "会员人数","练习人数","练习率","<10分钟","10~60分钟", "60~120分钟","120~240分钟",">=240分钟","平均练习时长(会员)","平均练习时长(练习)","练习达标占比"]
+headColumns = ["分部", "学练宝人数","练习人数","练习率","<10分钟","10~60分钟", "60~120分钟","120~240分钟",">=240分钟","平均练习时长(学练宝)","平均练习时长(练习)","练习达标占比"]
 fieldColumns = ["organName","normalNum","trainStudentNum","trainRate+'%'","train0","train1","train2","train3","train4","avgTrainTime","trainAvgTrainTime","trainStandRate+'%'"]
 
 [云教练统计详情导出]
-headColumns = ["声部老师", "会员人数","练习人数","练习率","<60分钟", "60~120分钟","120~240分钟",">=240分钟","平均练习时长(会员)","平均练习时长(练习)","练习达标占比"]
+headColumns = ["声部老师", "学练宝人数","练习人数","练习率","<60分钟", "60~120分钟","120~240分钟",">=240分钟","平均练习时长(学练宝)","平均练习时长(练习)","练习达标占比"]
 fieldColumns = ["teacherName","normalNum","trainStudentNum","trainRate+'%'","train1","train2","train3","train4","avgTrainTime","trainAvgTrainTime","trainStandRate+'%'"]
 
 [班级列表导出]
@@ -339,11 +339,11 @@ headColumns = ["合作单位", "总金额"]
 fieldColumns = ["name", "amount"]
 
 [老师云教练使用数据]
-headColumns = ["分部", "老师姓名", "声部", "课程时长(分)", "课程云教练使用时长(分)", "云教练使用总时长(分)"]
+headColumns = ["分部", "老师姓名", "声部", "课程时长(分)", "课程学练宝使用时长(分)", "学练宝使用总时长(分)"]
 fieldColumns = ["organName", "teacherName", "subjectName", "courseTime", "playTime", "totalPlayTime"]
 
 [oa费用汇总]
-headColumns = ["城市","固定人力成本","房屋","办公","水电物业","变动人力成本","差旅","外部服务","福利","活动","交通","考级","临时场地租赁","通讯","邮递运输","招待费","其他","学员管理费","云教练成本","网络教室成本","业务退费","内部结算","手续费","税费"]
+headColumns = ["城市","固定人力成本","房屋","办公","水电物业","变动人力成本","差旅","外部服务","福利","活动","交通","考级","临时场地租赁","通讯","邮递运输","招待费","其他","学员管理费","学练宝成本","网络教室成本","业务退费","内部结算","手续费","税费"]
 fieldColumns = ["organName", "fixedHumanCost", "house", "office", "mainsProperty","variableHumanCost", "travel","services", "welfare", "activities", "traffic", "certificates", "instrument","communications", "postalTransport", "hospitality", "other", "studentManagementFeeAdjustment","cloudCoachingCost", "network", "refund", "internalSettlement", "commission", "tax"]
 
 [oa费用明细]
@@ -351,7 +351,7 @@ headColumns = ["城市","钉钉流程编号","费用归属学校","申请人","
 fieldColumns = ["organName","batchNo","cooperationOrganName","applyUser","feeProject.desc","type.desc","amount","paymentTime","cause","studentId","currentAmount"]
 
 [经营报表收入汇总]
-headColumns = ["城市","学生指导费课耗收入","承担课程云教练收入","学校课程采买课耗收入","考级","维修费用","乐保费用","其他服务收入","不承担课程云教练收入","团购乐器","团购教辅","大件乐器","其他","服务收入","销售收入"]
+headColumns = ["城市","学生指导费课耗收入","承担课程学练宝收入","学校课程采买课耗收入","考级","维修费用","乐保费用","其他服务收入","不承担课程学练宝收入","团购乐器","团购教辅","大件乐器","其他","服务收入","销售收入"]
 fieldColumns = ["organName","studentGuidanceIncome","cloudCoachIncome","coursePurchaseIncome","examIncome","maintenanceCost","instrumentInsuranceCost","otherServiceIncome","saleCloudCoachIncome","groupPurchaseInstruments","groupPurchaseTeachingAids","largeInstruments","otherIncome","serviceIncome","salesIncome"]
 
 [课程收入明细导出]
@@ -371,8 +371,8 @@ 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","studentId","name","phone","subjectName","memberName","type.msg","time","amount","status == 1 ? '待激活':'已取消'","cancelReason","operatorName","operateTime","createTime"]
 
 [平衡关系-乐团课]
 headColumns = ["分部","乐团名称","乐团编号","班级名称","班级类型","班级编号","课程类型","剩余课次","剩余课次课酬","剩余被合并课次","剩余被合并课次课酬","已上课次","已上课次课酬","已上被合并课次","已上被合并课次课酬","当月新增","当月新增课酬","当月被合并新增","当月被合并新增课酬","当月消耗","当月消耗课酬","当月被合并消耗","当月被合并消耗课酬"]
@@ -403,9 +403,9 @@ headColumns = ["分部","乐团编号","乐团名称","学员编号","学员名
 fieldColumns = ["organName","musicGroupId","musicGroupName","studentId","studentName"]
 
 [云课堂统计导出]
-headColumns = ["分部名称","会员人数","无练习人数","0-10分钟","10-60分钟","60-120分钟","120-240分钟",">240分钟","平均时长(分钟)"]
+headColumns = ["分部名称","学练宝人数","无练习人数","0-10分钟","10-60分钟","60-120分钟","120-240分钟",">240分钟","平均时长(分钟)"]
 fieldColumns = ["organizationName","memberNum","noPlayNum","playTimeLess10","playTimeLess60","playTimeLess120","playTimeLess240","playTimeRather240","avgPlayTime"]
 
 [云课堂统计详情导出]
-headColumns = ["声部老师","会员人数","无练习人数","0-10分钟","10-60分钟","60-120分钟","120-240分钟",">240分钟","平均时长(分钟)"]
+headColumns = ["声部老师","学练宝人数","无练习人数","0-10分钟","10-60分钟","60-120分钟","120-240分钟",">240分钟","平均时长(分钟)"]
 fieldColumns = ["teacherName","memberNum","noPlayNum","playTimeLess10","playTimeLess60","playTimeLess120","playTimeLess240","playTimeRather240","avgPlayTime"]

+ 7 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CloudTeacherOrderDao.java

@@ -45,7 +45,7 @@ public interface CloudTeacherOrderDao extends BaseDAO<Long, CloudTeacherOrder> {
      * @param orderId
      * @return
      */
-    CloudTeacherOrderDto queryOrderInfoByOrderId(Long orderId);
+    List<CloudTeacherOrderDto> queryOrderInfoByOrderId(Long orderId);
 
     List<Map<Long, String>> queryNoStartByUserIds(@Param("userIds") Set<Integer> userIds, @Param("isMusicMember") Boolean isMusicMember);
 
@@ -130,4 +130,10 @@ public interface CloudTeacherOrderDao extends BaseDAO<Long, CloudTeacherOrder> {
     List<CloudCoachActivationDetailsDto> exportCloudCoachActivationDetails(@Param("month") String month, @Param("organId") String organId);
 
     List<CloudCoachActivationDetailsDto> exportMusicGroupNoCourse(@Param("organId") String organId);
+
+    int countByMemberRankSettingId(@Param("memberRankSettingId") List<Integer> memberRankSettingId);
+
+    List<Integer> getActivationVipIds(Integer userId);
+
+    List<CloudTeacherOrder> queryByUserIds(@Param("userIds") List<Integer> userIds, @Param("status") Integer status);
 }

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

@@ -71,12 +71,8 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
 
     int batchDeleteByCourseSchedules(@Param("courseScheduleIds") List<Long> courseScheduleIds);
 
-    int batchDelete(@Param("courseScheduleIds") List<Long> courseScheduleIds);
-
     int batchDeleteCourseSchedulesWithLogic(@Param("courseScheduleIds") List<Long> courseScheduleIds);
 
-    int batchDeleteAllCourseSchedules(@Param("courseScheduleIds") List<Long> courseScheduleIds);
-
     /**
      * @param courseScheduleIds: 课程计划编号
      * @return java.util.List<java.lang.Long>
@@ -867,14 +863,6 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
 
 
     /**
-     * 根据班级编号列表删除课程
-     *
-     * @param classGroupIds 班级编号列表
-     * @return
-     */
-    int deleteCourseSchedulesByClassGroupIds(@Param("courseScheduleIds") List<Long> courseScheduleIds);
-
-    /**
      * @param currentCourseDate: 班级编号
      * @return java.lang.Integer
      * @describe 统计已上的课时数

+ 5 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImUserFriendDao.java

@@ -43,7 +43,11 @@ public interface ImUserFriendDao extends BaseDAO<Long, ImUserFriend> {
 
     List<NameDto> queryNameByIds(@Param("ids") String ids, @Param("userId") Integer userId);
 
-    List<ImUserFriendDto> queryFriendListByUserIdV2(@Param("userId") Integer userId, @Param("search") String search, @Param("musicGroupId") String musicGroupId, @Param("subjectId") Integer subjectId, @Param("vipFlag") Boolean vipFlag);
+    List<ImUserFriendDto> queryFriendListByUserIdV2(@Param("userId") Integer userId,
+													@Param("search") String search,
+													@Param("musicGroupId") String musicGroupId,
+													@Param("subjectId") Integer subjectId,
+													@Param("vipFlag") Boolean vipFlag);
 
     /**
      *  删除好友关系

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

@@ -22,4 +22,5 @@ public interface InstrumentDao extends BaseMapper<Instrument> {
 	 */
 	List<InstrumentWrapper.Instrument> selectPage(@Param("page") IPage<InstrumentWrapper.Instrument> page, @Param("param") InstrumentWrapper.InstrumentQuery param);
 
+    List<Instrument> getBySubjectId(@Param("subjectId") String subjectId);
 }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MemberRankOrganizationFeeMapperDao.java

@@ -4,8 +4,17 @@ import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.biz.dal.entity.MemberRankOrganizationFeeMapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 public interface MemberRankOrganizationFeeMapperDao extends BaseDAO<Integer, MemberRankOrganizationFeeMapper> {
 
 
     MemberRankOrganizationFeeMapper findByOrganIdAndRankId(@Param("organId") Integer organId, @Param("memberRankSettingId") Integer memberRankSettingId);
+
+    List<MemberRankOrganizationFeeMapper> queryByOrganId(@Param("organId") Integer organId);
+
+    List<MemberRankOrganizationFeeMapper> queryByOrganIds(@Param("orgIds") List<Integer> orgIds);
+
+    //取交集
+    List<Integer> intersectOrganId(@Param("organIdList") List<Integer> organIdList, @Param("num") Integer num);
 }

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MemberRankPrivilegesDao.java

@@ -4,6 +4,7 @@ import com.ym.mec.biz.dal.entity.MemberRankPrivileges;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Arrays;
 import java.util.List;
 
 public interface MemberRankPrivilegesDao extends BaseDAO<Integer, MemberRankPrivileges>{
@@ -21,4 +22,6 @@ public interface MemberRankPrivilegesDao extends BaseDAO<Integer, MemberRankPriv
      * @return
      */
     boolean hasPrivileges(Integer parentId);
+
+    List<MemberRankPrivileges> findByRankSettingIds(@Param("memberRankIds") List<Integer> memberRankIds);
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MemberRankSettingDao.java

@@ -10,4 +10,14 @@ import com.ym.mec.common.dal.BaseDAO;
 public interface MemberRankSettingDao extends BaseDAO<Integer, MemberRankSetting> {
 
 	List<MemberRankSetting> queryListByIsDefault(@Param("isDefault") Boolean isDefault);
+
+    List<MemberRankSetting> selectBatchIds(@Param("ids") List<Integer> ids);
+
+    List<MemberRankSetting> getNotDelByParentIds(@Param("topIds") List<Integer> topIds);
+
+    void deleteById(@Param("id") Integer id);
+
+    List<MemberRankSetting> getNotDelByIds(@Param("ids") List<Integer> parentIds);
+
+    List<MemberRankSetting> getByIdsAndType(@Param("memberIds") List<Integer> memberIds, @Param("type") String type, @Param("typeId") Integer typeId);
 }

+ 7 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentCalenderMemberDao.java

@@ -11,5 +11,11 @@ public interface MusicGroupPaymentCalenderMemberDao extends BaseDAO<Long, MusicG
 
     void deleteByCalenderId(@Param("calenderId") Long calenderId);
 
-    MusicGroupPaymentCalenderMember findByCalenderId(@Param("calenderId") Long calenderId);
+    List<MusicGroupPaymentCalenderMember> findByCalenderId(@Param("calenderId") Long calenderId);
+
+    void batchInsert(@Param("beans") List<MusicGroupPaymentCalenderMember> calenderMemberList);
+
+    void batchUpdate(@Param("beans") List<MusicGroupPaymentCalenderMember> calenderMemberList);
+
+    List<MusicGroupPaymentCalenderMember> findByIds(@Param("calenderMemberIds") List<Long> calenderMemberIds);
 }

+ 6 - 12
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java

@@ -11,7 +11,10 @@ import com.ym.mec.biz.dal.vo.TempCampUserTrainingSequenceVo;
 import com.ym.mec.biz.dal.wrapper.StudentWrapper;
 import org.apache.ibatis.annotations.Param;
 
-import java.util.*;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Student> {
 
@@ -161,8 +164,6 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
      */
     void cleanExperienceStudentMember();
 
-    void cleanMember(Integer userId);
-
     /**
      * 修改学员会员试用
      * @param studentIds
@@ -318,15 +319,6 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
      */
     void remarkCountFlag();
 
-    /**
-    * @description: 更新会员信息
-     * @param student
-    * @return void
-    * @author zx
-    * @date 2021/10/13 13:34
-    */
-    void updateStudentMember(@Param("student") Student student);
-
     int countStudent(Map<String, Object> params);
 
     List<Student> queryStudent(Map<String, Object> params);
@@ -409,4 +401,6 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
 
     //获取合作单位下学员列表
     List<Integer> queryByCoopIds(@Param("coopId") Integer coopId);
+
+    void updateCloudTeacherEndTime(@Param("studentId") Integer studentId);
 }

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

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ym.mec.biz.dal.dto.StudentLessonExaminationDto;
 import com.ym.mec.biz.dal.dto.StudentLessonExaminationDto1;
 import com.ym.mec.biz.dal.entity.StudentLessonExamination;
+import com.ym.mec.biz.dal.entity.StudentLessonExaminationDetail;
+import com.ym.mec.biz.dal.entity.StudentLessonTrainingDetail;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -38,5 +40,8 @@ public interface StudentLessonExaminationDao extends BaseMapper<StudentLessonExa
     List<Map<Long, String>> getStudentName(@Param("examinationIds") List<Long> examinationIds);
 
     List<StudentLessonExamination> queryEndList(@Param("date") String date);
+
+    List<StudentLessonExaminationDetail> queryExpired();
+
 }
 

+ 4 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentLessonTrainingDetailMapper.java

@@ -4,11 +4,14 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ym.mec.biz.dal.entity.StudentLessonTrainingDetail;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 /**
  * 练习内容
  * 2023-03-31 14:18:47
  */
 @Repository
 public interface StudentLessonTrainingDetailMapper extends BaseMapper<StudentLessonTrainingDetail> {
-	
+
+    List<StudentLessonTrainingDetail> queryExpired();
 }

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentMemberTimeDao.java

@@ -0,0 +1,9 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ym.mec.biz.dal.entity.StudentMemberTime;
+
+public interface StudentMemberTimeDao extends BaseMapper<StudentMemberTime> {
+
+}
+

+ 7 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentMemberUpdateLogDao.java

@@ -1,9 +1,12 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.ym.mec.biz.dal.entity.StudentMemberUpdateLog;
+import com.ym.mec.biz.dal.wrapper.StudentMemberUpdateLogWrapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -15,6 +18,9 @@ import java.util.List;
 public interface StudentMemberUpdateLogDao extends BaseMapper<StudentMemberUpdateLog> {
 
    int insertBatch(@Param("entities") List<StudentMemberUpdateLog> entities);
-   
+
+    IPage<StudentMemberUpdateLogWrapper.StudentMemberUpdateLog> selectPage(@Param("page") IPage<StudentMemberUpdateLogWrapper.StudentMemberUpdateLog> page, @Param("param") StudentMemberUpdateLogWrapper.StudentMemberUpdateLogQuery query);
+
+    Date getActivationMaxTime(@Param("studentId") Integer studentId, @Param("level") Integer level);
 }
 

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

@@ -132,4 +132,6 @@ public interface SysMusicCompareRecordDao extends BaseDAO<Long, SysMusicCompareR
     int countByStudent(Map<String, Object> params);
 
     List<MusicCompareRecordWapper.Result> queryPageByStudent(Map<String, Object> params);
+
+    Long getLastData(@Param("clientId") String clientId, @Param("userId") Integer userId, @Param("feature") String feature, @Param("sysMusicScoreId") Integer sysMusicScoreId);
 }

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicScoreDao.java

@@ -4,6 +4,7 @@ package com.ym.mec.biz.dal.dao;
 import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetApiWrapper;
 import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetApplicationExtendWrapper;
 import com.ym.mec.biz.dal.entity.SysMusicScore;
+import com.ym.mec.biz.dal.wrapper.MusicSheetWrapper;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
@@ -32,4 +33,6 @@ public interface SysMusicScoreDao extends BaseDAO<Integer, SysMusicScore> {
     List<SysMusicScore> selectSyncPage();
 
     SysMusicScore getCbsId(@Param("cbsMusicSheetId") Long cbsMusicSheetId);
+
+    List<MusicSheetWrapper.CategoryMusicNumStat> getNumByCategoryIds(@Param("categoryIds") List<Integer> categoryIds);
 }

+ 3 - 153
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/BasicUserDto.java

@@ -1,9 +1,11 @@
 package com.ym.mec.biz.dal.dto;
 
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.util.Objects;
 
+@Data
 public class BasicUserDto {
 
     private Integer organId;
@@ -34,6 +36,7 @@ public class BasicUserDto {
     @ApiModelProperty(value = "加油包:0:默认不可用;1:可用;2:已使用;")
     private Integer comeOnPackage;
 
+    @ApiModelProperty(value = "是否会员")
     private Integer memberRankSettingId;
 
     private String subjectIdList;
@@ -49,143 +52,6 @@ public class BasicUserDto {
 
     @ApiModelProperty(value = "加入课程类型 PURCHASE:购买 SHARE:分享")
     private String joinCourseType;
-
-    public String getJoinCourseType() {
-        return joinCourseType;
-    }
-
-    public void setJoinCourseType(String joinCourseType) {
-        this.joinCourseType = joinCourseType;
-    }
-
-    public String getTeacherType() {
-        return teacherType;
-    }
-
-    public void setTeacherType(String teacherType) {
-        this.teacherType = teacherType;
-    }
-
-    public Boolean getRepairFlag() {
-        return repairFlag;
-    }
-
-    public void setRepairFlag(Boolean repairFlag) {
-        this.repairFlag = repairFlag;
-    }
-
-    public Integer getTenantId() {
-        return tenantId;
-    }
-
-    public void setTenantId(Integer tenantId) {
-        this.tenantId = tenantId;
-    }
-
-    public Integer getMemberRankSettingId() {
-        return memberRankSettingId;
-    }
-
-    public void setMemberRankSettingId(Integer memberRankSettingId) {
-        this.memberRankSettingId = memberRankSettingId;
-    }
-
-    public String getSubjectIdList() {
-        return subjectIdList;
-    }
-
-    public void setSubjectIdList(String subjectIdList) {
-        this.subjectIdList = subjectIdList;
-    }
-
-    public Integer getOrganId() {
-        return organId;
-    }
-
-    public void setOrganId(Integer organId) {
-        this.organId = organId;
-    }
-
-    public Integer getCarePackage() {
-        return carePackage;
-    }
-
-    public void setCarePackage(Integer carePackage) {
-        this.carePackage = carePackage;
-    }
-
-    public Integer getComeOnPackage() {
-        return comeOnPackage;
-    }
-
-    public void setComeOnPackage(Integer comeOnPackage) {
-        this.comeOnPackage = comeOnPackage;
-    }
-
-    public String getUserType() {
-        return userType;
-    }
-
-    public void setUserType(String userType) {
-        this.userType = userType;
-    }
-
-    public String getMusicGroupId() {
-        return musicGroupId;
-    }
-
-    public void setMusicGroupId(String musicGroupId) {
-        this.musicGroupId = musicGroupId;
-    }
-
-    public String getMusicGroupName() {
-        return musicGroupName;
-    }
-
-    public void setMusicGroupName(String musicGroupName) {
-        this.musicGroupName = musicGroupName;
-    }
-
-    public String getSubjectName() {
-        return subjectName;
-    }
-
-    public void setSubjectName(String subjectName) {
-        this.subjectName = subjectName;
-    }
-
-    public Integer getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Integer userId) {
-        this.userId = userId;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getHeadUrl() {
-        return headUrl;
-    }
-
-    public void setHeadUrl(String headUrl) {
-        this.headUrl = headUrl;
-    }
-
-    public Integer getGender() {
-        return gender;
-    }
-
-    public void setGender(Integer gender) {
-        this.gender = gender;
-    }
-
     @Override
     public boolean equals(Object o) {
         if (this == o) return true;
@@ -198,20 +64,4 @@ public class BasicUserDto {
     public int hashCode() {
         return Objects.hash(userId);
     }
-
-    public Integer getSubjectId() {
-        return subjectId;
-    }
-
-    public void setSubjectId(Integer subjectId) {
-        this.subjectId = subjectId;
-    }
-
-    public String getPhone() {
-        return phone;
-    }
-
-    public void setPhone(String phone) {
-        this.phone = phone;
-    }
 }

+ 2 - 156
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseHomeworkListDto.java

@@ -3,13 +3,11 @@ package com.ym.mec.biz.dal.dto;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.util.Date;
 
-/**
- * @Author Joburgess
- * @Date 2019/9/19
- */
+@Data
 public class CourseHomeworkListDto {
 
     /**  */
@@ -71,156 +69,4 @@ public class CourseHomeworkListDto {
 
     @ApiModelProperty(value = "实际上课老师头像",required = false)
     private String headUrl;
-
-    public Integer getTeacherId() {
-        return teacherId;
-    }
-
-    public void setTeacherId(Integer teacherId) {
-        this.teacherId = teacherId;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public String getTeacherName() {
-        return teacherName;
-    }
-
-    public void setTeacherName(String teacherName) {
-        this.teacherName = teacherName;
-    }
-
-    public String getHeadUrl() {
-        return headUrl;
-    }
-
-    public void setHeadUrl(String headUrl) {
-        this.headUrl = headUrl;
-    }
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Long getCourseScheduleId() {
-        return courseScheduleId;
-    }
-
-    public void setCourseScheduleId(Long courseScheduleId) {
-        this.courseScheduleId = courseScheduleId;
-    }
-
-    public String getContent() {
-        return content;
-    }
-
-    public void setContent(String content) {
-        this.content = content;
-    }
-
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    public Date getExpiryDate() {
-        return expiryDate;
-    }
-
-    public void setExpiryDate(Date expiryDate) {
-        this.expiryDate = expiryDate;
-    }
-
-    public Date getStartClassTime() {
-        return startClassTime;
-    }
-
-    public void setStartClassTime(Date startClassTime) {
-        this.startClassTime = startClassTime;
-    }
-
-    public String getMusicGroupId() {
-        return musicGroupId;
-    }
-
-    public void setMusicGroupId(String musicGroupId) {
-        this.musicGroupId = musicGroupId;
-    }
-
-    public String getMusicGroupName() {
-        return musicGroupName;
-    }
-
-    public void setMusicGroupName(String musicGroupName) {
-        this.musicGroupName = musicGroupName;
-    }
-
-    public Integer getClassGroupId() {
-        return classGroupId;
-    }
-
-    public void setClassGroupId(Integer classGroupId) {
-        this.classGroupId = classGroupId;
-    }
-
-    public String getClassGroupName() {
-        return classGroupName;
-    }
-
-    public void setClassGroupName(String classGroupName) {
-        this.classGroupName = classGroupName;
-    }
-
-    public Integer getCompletedNum() {
-        return completedNum;
-    }
-
-    public void setCompletedNum(Integer completedNum) {
-        this.completedNum = completedNum;
-    }
-
-    public Integer getExpectNum() {
-        return expectNum;
-    }
-
-    public void setExpectNum(Integer expectNum) {
-        this.expectNum = expectNum;
-    }
-
-    public String getRemark() {
-        return remark;
-    }
-
-    public void setRemark(String remark) {
-        this.remark = remark;
-    }
-
-    public YesOrNoEnum getStatus() {
-        return status;
-    }
-
-    public void setStatus(YesOrNoEnum status) {
-        this.status = status;
-    }
-
-    public YesOrNoEnum getIsReplied() {
-        return isReplied;
-    }
-
-    public void setIsReplied(YesOrNoEnum isReplied) {
-        this.isReplied = isReplied;
-    }
 }

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

@@ -1,15 +1,20 @@
 package com.ym.mec.biz.dal.dto;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 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;
 import com.ym.mec.biz.dal.enums.ImSendTypeEnum;
+import com.ym.mec.biz.dal.enums.StandardEnum;
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import javax.validation.constraints.NotNull;
 import java.util.Date;
@@ -211,6 +216,15 @@ public class CourseHomeworkWrapper {
 
         private String studentIdList;
 
+        @ApiModelProperty("训练说明")
+        private String memo;
+
+
+        @ApiModelProperty(value = "文件过期天数")
+        private Integer fileExpireDay;
+
+        @ApiModelProperty(value = "0未达标、1达标、2优秀",required = true)
+        private StandardEnum standardFlag;
 
         @ApiModelProperty("练习内容")
         private List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> trainingDetailList;
@@ -242,6 +256,7 @@ public class CourseHomeworkWrapper {
         @ApiModelProperty("达标人数")
         private Integer passNum;
 
+        private String memo;
 
         @ApiModelProperty("练习内容")
         private List<StudentLessonTrainingDetailWrapper.StudentLessonTrainingDetail> trainingDetailList;
@@ -277,10 +292,32 @@ public class CourseHomeworkWrapper {
         @NotNull(message = "作业详情id不能为空")
         private Long id;
 
+        @ApiModelProperty("上传文件JSON")
+        private List<FileJson> fileJson;
     }
 
 
     @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class FileJson {
+
+        @ApiModelProperty("文件路径,如果是评测则为评测记录ID")
+        private String filePath;
+
+        @ApiModelProperty("文件类型:评测:EVALUATION,IMG:图片,SOUND:音频,VIDEO:视频")
+        private String fileType;
+
+        @ApiModelProperty("文件过期标志")
+        private Boolean expireFlag = false;
+
+        @ApiModelProperty("文件内容")
+        private String content;
+
+    }
+
+    @Data
     @ApiModel(value = "StudentCourseHomeworkDetail-学生课程作业详情")
     public static class StudentCourseHomeworkDetail {
 

+ 4 - 119
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/EduHomeworkCardDto.java

@@ -1,11 +1,14 @@
 package com.ym.mec.biz.dal.dto;
 
+import lombok.Data;
+
 import java.util.Date;
 
 /**
  * @Author Joburgess
  * @Date 2021/5/24 0024
  */
+@Data
 public class EduHomeworkCardDto {
 
     private String groupId;
@@ -38,123 +41,5 @@ public class EduHomeworkCardDto {
 
     private String musicScoreId;
 
-    public String getMusicScoreId() {
-        return musicScoreId;
-    }
-
-    public void setMusicScoreId(String musicScoreId) {
-        this.musicScoreId = musicScoreId;
-    }
-
-    public String getTeacherAvatar() {
-        return teacherAvatar;
-    }
-
-    public void setTeacherAvatar(String teacherAvatar) {
-        this.teacherAvatar = teacherAvatar;
-    }
-
-    public String getContent() {
-        return content;
-    }
-
-    public void setContent(String content) {
-        this.content = content;
-    }
-
-    public Integer getSubjectId() {
-        return subjectId;
-    }
-
-    public void setSubjectId(Integer subjectId) {
-        this.subjectId = subjectId;
-    }
-
-    public String getGroupId() {
-        return groupId;
-    }
-
-    public void setGroupId(String groupId) {
-        this.groupId = groupId;
-    }
-
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    public Long getHomeworkId() {
-        return homeworkId;
-    }
-
-    public void setHomeworkId(Long homeworkId) {
-        this.homeworkId = homeworkId;
-    }
-
-    public Long getCourseId() {
-        return courseId;
-    }
-
-    public void setCourseId(Long courseId) {
-        this.courseId = courseId;
-    }
-
-    public String getCourseName() {
-        return courseName;
-    }
-
-    public void setCourseName(String courseName) {
-        this.courseName = courseName;
-    }
-
-    public Date getCourseStartTime() {
-        return courseStartTime;
-    }
-
-    public void setCourseStartTime(Date courseStartTime) {
-        this.courseStartTime = courseStartTime;
-    }
-
-    public Integer getTeacherId() {
-        return teacherId;
-    }
-
-    public void setTeacherId(Integer teacherId) {
-        this.teacherId = teacherId;
-    }
-
-    public String getTeacherName() {
-        return teacherName;
-    }
-
-    public void setTeacherName(String teacherName) {
-        this.teacherName = teacherName;
-    }
-
-    public Integer getExceptStudentNum() {
-        return exceptStudentNum;
-    }
-
-    public void setExceptStudentNum(Integer exceptStudentNum) {
-        this.exceptStudentNum = exceptStudentNum;
-    }
-
-    public Integer getSubmitStudentNum() {
-        return submitStudentNum;
-    }
-
-    public void setSubmitStudentNum(Integer submitStudentNum) {
-        this.submitStudentNum = submitStudentNum;
-    }
-
-    public Integer getRepliedStudentNum() {
-        return repliedStudentNum;
-    }
-
-    public void setRepliedStudentNum(Integer repliedStudentNum) {
-        this.repliedStudentNum = repliedStudentNum;
-    }
+    private String memo;
 }

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/LessonExaminationDetailDto.java

@@ -30,5 +30,11 @@ public class LessonExaminationDetailDto{
 
     @ApiModelProperty("结束小节")
     private Integer end;
+
+    @ApiModelProperty("作业类型,MUSIC_SCORE:曲目评测,DESCRIPTION:描述")
+    private String homeworkType;
+
+    @ApiModelProperty("作业描述")
+    private String desc;
 }
 

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/LessonExaminationResultDto.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dto;
 
 
+import com.ym.mec.biz.dal.entity.StudentLessonExaminationDetail;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -57,5 +58,11 @@ public class LessonExaminationResultDto{
 
     @ApiModelProperty(value = "学员姓名")
     private String studentNames;
+
+    @ApiModelProperty("作业分组")
+    private Integer group;
+
+    @ApiModelProperty(value = "文件过期天数")
+    private Integer fileExpireDay;
 }
 

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/LessonExaminationResultDto1.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dto;
 
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -54,5 +55,8 @@ public class LessonExaminationResultDto1 {
 
     @ApiModelProperty(value = "是否测评")
     private Boolean trainingFlag;
+
+    @TableField("memo_")
+    private String memo;
 }
 

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/LessonExaminationSubmitDto.java

@@ -4,6 +4,8 @@ package com.ym.mec.biz.dal.dto;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.List;
+
 /**
  *
  * @author zx
@@ -16,5 +18,11 @@ public class LessonExaminationSubmitDto {
 
     @ApiModelProperty(value = "测评分数")
     private Integer score;
+
+    @ApiModelProperty(value = "评测记录ID")
+    private Long recordId;
+
+    @ApiModelProperty("上传文件JSON")
+    private List<CourseHomeworkWrapper.FileJson> fileJson;
 }
 

+ 6 - 48
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MemberPayParamDto.java

@@ -2,9 +2,12 @@ package com.ym.mec.biz.dal.dto;
 
 import com.ym.mec.biz.dal.enums.PeriodEnum;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.io.Serializable;
 
+
+@Data
 public class MemberPayParamDto extends PayParamBasicDto implements Serializable {
 
     @ApiModelProperty(value = "用于后台创建的团练宝订单购买",required = false)
@@ -13,6 +16,9 @@ public class MemberPayParamDto extends PayParamBasicDto implements Serializable
     @ApiModelProperty(value = "购买数量",required = false)
     private Integer val;
 
+    @ApiModelProperty(value = "会员编号",required = false)
+    private Integer memberRankId;
+
     //如果isRepeatPay = true 则需要传入订单号
     private String orderNo;
 
@@ -26,52 +32,4 @@ public class MemberPayParamDto extends PayParamBasicDto implements Serializable
     //商品编号
     @ApiModelProperty(value = "直播间商品编号(用于直播间商品购买,目前只支持1和2,1代表免费的云课堂,2代表云教练(送网管课))",required = false)
     private Integer liveGoodsId;
-
-    public String getLiveId() {
-        return liveId;
-    }
-
-    public void setLiveId(String liveId) {
-        this.liveId = liveId;
-    }
-
-    public Integer getLiveGoodsId() {
-        return liveGoodsId;
-    }
-
-    public void setLiveGoodsId(Integer liveGoodsId) {
-        this.liveGoodsId = liveGoodsId;
-    }
-
-    public PeriodEnum getPeriodEnum() {
-        return periodEnum;
-    }
-
-    public void setPeriodEnum(PeriodEnum periodEnum) {
-        this.periodEnum = periodEnum;
-    }
-
-    public Long getPaymentId() {
-        return paymentId;
-    }
-
-    public void setPaymentId(Long paymentId) {
-        this.paymentId = paymentId;
-    }
-
-    public Integer getVal() {
-        return val;
-    }
-
-    public void setVal(Integer val) {
-        this.val = val;
-    }
-
-    public String getOrderNo() {
-        return orderNo;
-    }
-
-    public void setOrderNo(String orderNo) {
-        this.orderNo = orderNo;
-    }
 }

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

@@ -49,7 +49,7 @@ public class MusicGroupPaymentBaseCalender {
 	private MusicGroupPaymentCalenderAddress calenderAddress;
 
 	@ApiModelProperty(value = "会员相关缴费信息", required = false)
-	private MusicGroupPaymentCalenderMember calenderMember;
+	private List<MusicGroupPaymentCalenderMember> calenderMemberList;
 
 	@ApiModelProperty(value = "乐保信息", required = false)
 	private MusicGroupPaymentCalenderRepair musicRepair;

+ 7 - 359
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupStudentsDto.java

@@ -1,13 +1,18 @@
 package com.ym.mec.biz.dal.dto;
 
+import com.ym.mec.biz.dal.entity.CloudTeacherOrder;
 import com.ym.mec.biz.dal.entity.SubjectChange;
 import com.ym.mec.biz.dal.enums.PaymentFlagEnum;
 import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
+import com.ym.mec.biz.dal.wrapper.CloudTeacherOrderWrapper;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
+@Data
 public class MusicGroupStudentsDto{
 
     @ApiModelProperty(value = "学生乐团注册编号",required = false)
@@ -136,363 +141,6 @@ public class MusicGroupStudentsDto{
 
     private Integer memberRankSettingId;
 
-    public Integer getMusicMembershipDay1() {
-        return musicMembershipDay1;
-    }
-
-    public void setMusicMembershipDay1(Integer musicMembershipDay1) {
-        this.musicMembershipDay1 = musicMembershipDay1;
-    }
-
-    public Integer getMemberRankSettingId() {
-        return memberRankSettingId;
-    }
-
-    public void setMemberRankSettingId(Integer memberRankSettingId) {
-        this.memberRankSettingId = memberRankSettingId;
-    }
-
-    public Boolean getHasNoStartCloudTeacher() {
-        return hasNoStartCloudTeacher;
-    }
-
-    public void setHasNoStartCloudTeacher(Boolean hasNoStartCloudTeacher) {
-        this.hasNoStartCloudTeacher = hasNoStartCloudTeacher;
-    }
-
-    public Integer getExperienceMembershipDay() {
-        return experienceMembershipDay;
-    }
-
-    public void setExperienceMembershipDay(Integer experienceMembershipDay) {
-        this.experienceMembershipDay = experienceMembershipDay;
-    }
-
-    public Integer getMembershipDay() {
-        return membershipDay;
-    }
-
-    public void setMembershipDay(Integer membershipDay) {
-        this.membershipDay = membershipDay;
-    }
-
-    public Integer getMusicMembershipDay() {
-        return musicMembershipDay;
-    }
-
-    public void setMusicMembershipDay(Integer musicMembershipDay) {
-        this.musicMembershipDay = musicMembershipDay;
-    }
-
-    public Date getMusicMembershipEndTime() {
-        return musicMembershipEndTime;
-    }
-
-    public void setMusicMembershipEndTime(Date musicMembershipEndTime) {
-        this.musicMembershipEndTime = musicMembershipEndTime;
-    }
-
-    public Date getExperienceMembershipEndTime() {
-        return experienceMembershipEndTime;
-    }
-
-    public void setExperienceMembershipEndTime(Date experienceMembershipEndTime) {
-        this.experienceMembershipEndTime = experienceMembershipEndTime;
-    }
-
-    public Date getMembershipEndTime() {
-        return membershipEndTime;
-    }
-
-    public void setMembershipEndTime(Date membershipEndTime) {
-        this.membershipEndTime = membershipEndTime;
-    }
-
-    public String getCarePackageStr() {
-        return carePackageStr;
-    }
-
-    public void setCarePackageStr(String carePackageStr) {
-        this.carePackageStr = carePackageStr;
-    }
-
-    public String getComeOnPackageStr() {
-        return comeOnPackageStr;
-    }
-
-    public void setComeOnPackageStr(String comeOnPackageStr) {
-        this.comeOnPackageStr = comeOnPackageStr;
-    }
-
-    public Integer getCarePackage() {
-        return carePackage;
-    }
-
-    public void setCarePackage(Integer carePackage) {
-        this.carePackage = carePackage;
-    }
-
-    public Integer getComeOnPackage() {
-        return comeOnPackage;
-    }
-
-    public void setComeOnPackage(Integer comeOnPackage) {
-        this.comeOnPackage = comeOnPackage;
-    }
-
-    public Boolean getHasCourse() {
-        return hasCourse;
-    }
-
-    public void setHasCourse(Boolean hasCourse) {
-        this.hasCourse = hasCourse;
-    }
-
-    public BigDecimal getNoPaymentAmount() {
-        return noPaymentAmount;
-    }
-
-    public void setNoPaymentAmount(BigDecimal noPaymentAmount) {
-        this.noPaymentAmount = noPaymentAmount;
-    }
-
-    public BigDecimal getSubTotalCourseTime() {
-        return subTotalCourseTime;
-    }
-
-    public void setSubTotalCourseTime(BigDecimal subTotalCourseTime) {
-        this.subTotalCourseTime = subTotalCourseTime;
-    }
-
-    public String getPaymentPeriodList() {
-        return paymentPeriodList;
-    }
-
-    public void setPaymentPeriodList(String paymentPeriodList) {
-        this.paymentPeriodList = paymentPeriodList;
-    }
-
-    public Integer getIsLock() {
-        return isLock;
-    }
-
-    public void setIsLock(Integer isLock) {
-        this.isLock = isLock;
-    }
-
-    public Boolean getIsActive() {
-        return isActive;
-    }
-
-    public void setIsActive(Boolean active) {
-        isActive = active;
-    }
-
-    public Date getNextPaymentDate() {
-        return nextPaymentDate;
-    }
-
-    public void setNextPaymentDate(Date nextPaymentDate) {
-        this.nextPaymentDate = nextPaymentDate;
-    }
-
-    public BigDecimal getCourseFee() {
-        return courseFee;
-    }
-
-    public void setCourseFee(BigDecimal courseFee) {
-        this.courseFee = courseFee;
-    }
-
-    public Integer getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Integer userId) {
-        this.userId = userId;
-    }
-
-    public String getRealName() {
-        return realName;
-    }
-
-    public void setRealName(String realName) {
-        this.realName = realName;
-    }
-
-    public String getGender() {
-        return gender;
-    }
-
-    public void setGender(String gender) {
-        this.gender = gender;
-    }
-
-    public String getPhone() {
-        return phone;
-    }
-
-    public void setPhone(String phone) {
-        this.phone = phone;
-    }
-
-    public String getCurrentGrade() {
-        return currentGrade;
-    }
-
-    public void setCurrentGrade(String currentGrade) {
-        this.currentGrade = currentGrade;
-    }
-
-    public String getCurrentClass() {
-        return currentClass;
-    }
-
-    public void setCurrentClass(String currentClass) {
-        this.currentClass = currentClass;
-    }
-
-    public String getSubjectName() {
-        return subjectName;
-    }
-
-    public void setSubjectName(String subjectName) {
-        this.subjectName = subjectName;
-    }
-
-    public String getMusicGroupId() {
-        return musicGroupId;
-    }
-
-    public void setMusicGroupId(String musicGroupId) {
-        this.musicGroupId = musicGroupId;
-    }
-
-    public String getStudentStatus() {
-        return studentStatus;
-    }
-
-    public void setStudentStatus(String studentStatus) {
-        this.studentStatus = studentStatus;
-    }
-
-    public PaymentStatusEnum getPaymentStatus() {
-        return paymentStatus;
-    }
-
-    public void setPaymentStatus(PaymentStatusEnum paymentStatus) {
-        this.paymentStatus = paymentStatus;
-    }
-
-    public Integer getIsNewStudent() {
-        return isNewStudent;
-    }
-
-    public void setIsNewStudent(Integer isNewStudent) {
-        this.isNewStudent = isNewStudent;
-    }
-
-    public String getActiveName() {
-        return activeName;
-    }
-
-    public void setActiveName(String activeName) {
-        this.activeName = activeName;
-    }
-
-    public String getIsNewStudentStr() {
-        return isNewStudentStr;
-    }
-
-    public void setIsNewStudentStr(String isNewStudentStr) {
-        this.isNewStudentStr = isNewStudentStr;
-    }
-
-    public String getNextPaymentDateStr() {
-        return nextPaymentDateStr;
-    }
-
-    public void setNextPaymentDateStr(String nextPaymentDateStr) {
-        this.nextPaymentDateStr = nextPaymentDateStr;
-    }
-
-    public String getQuitReason() {
-        return quitReason;
-    }
-
-    public void setQuitReason(String quitReason) {
-        this.quitReason = quitReason;
-    }
-
-    public Date getCurrentGradeDate() {
-        return currentGradeDate;
-    }
-
-    public void setCurrentGradeDate(Date currentGradeDate) {
-        this.currentGradeDate = currentGradeDate;
-    }
-
-    public Date getRegisterTime() {
-        return registerTime;
-    }
-
-    public void setRegisterTime(Date registerTime) {
-        this.registerTime = registerTime;
-    }
-
-    public String getRegSubjectName() {
-        return regSubjectName;
-    }
-
-    public void setRegSubjectName(String regSubjectName) {
-        this.regSubjectName = regSubjectName;
-    }
-
-    public Integer getSubjectId() {
-        return subjectId;
-    }
-
-    public void setSubjectId(Integer subjectId) {
-        this.subjectId = subjectId;
-    }
-
-    public Integer getRegSubjectId() {
-        return regSubjectId;
-    }
-
-    public void setRegSubjectId(Integer regSubjectId) {
-        this.regSubjectId = regSubjectId;
-    }
-
-    public String getRemark() {
-        return remark;
-    }
-
-    public void setRemark(String remark) {
-        this.remark = remark;
-    }
-
-    public SubjectChange getSubjectChange() {
-        return subjectChange;
-    }
-
-    public void setSubjectChange(SubjectChange subjectChange) {
-        this.subjectChange = subjectChange;
-    }
-
-    public Boolean getHasMaintenance() {
-        return hasMaintenance;
-    }
-
-    public void setHasMaintenance(Boolean hasMaintenance) {
-        this.hasMaintenance = hasMaintenance;
-    }
-
-    public BigDecimal getCloudTeacherAmount() {
-        return cloudTeacherAmount;
-    }
-
-    public void setCloudTeacherAmount(BigDecimal cloudTeacherAmount) {
-        this.cloudTeacherAmount = cloudTeacherAmount;
-    }
+    @ApiModelProperty(value = "学员生效中的云教练",required = false)
+    private List<CloudTeacherOrderWrapper.StudentMemberDetail> cloudTeacherOrderList;
 }

+ 5 - 52
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicScoreSubjectDto.java

@@ -1,76 +1,29 @@
 package com.ym.mec.biz.dal.dto;
 
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.util.List;
 
+@Data
 public class MusicScoreSubjectDto {
 
-//    @ApiModelProperty(value = "声部",required = false)
-//    private Integer subjectId;
-
     @ApiModelProperty(value = "学员编号",required = false)
     private List<Integer> userIdList;
 
-
     @ApiModelProperty(value = "分组号")
     private Integer group;
 
+    @ApiModelProperty(value = "训练说明",required = false)
+    private String memo;
+
     @ApiModelProperty(value = "曲目编号(兼容旧数据)",required = false)
     private List<Integer> musicScoreIdList;
 
     @ApiModelProperty(value = "曲目编号、分谱(新版布置作业需要)",required = false)
     private List<MusicScoreHomeworkDto> musicScoreHomeworkDtoList;
 
-
     @ApiModelProperty("新版作业 time:2023-03-31")
     private List<StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail> studentLessonTrainingDetails;
 
-    public List<StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail> getStudentLessonTrainingDetails() {
-        return studentLessonTrainingDetails;
-    }
-
-    public void setStudentLessonTrainingDetails(List<StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail> studentLessonTrainingDetails) {
-        this.studentLessonTrainingDetails = studentLessonTrainingDetails;
-    }
-
-    public List<MusicScoreHomeworkDto> getMusicScoreHomeworkDtoList() {
-        return musicScoreHomeworkDtoList;
-    }
-
-    public void setMusicScoreHomeworkDtoList(List<MusicScoreHomeworkDto> musicScoreHomeworkDtoList) {
-        this.musicScoreHomeworkDtoList = musicScoreHomeworkDtoList;
-    }
-
-//    public Integer getSubjectId() {
-//        return subjectId;
-//    }
-//
-//    public void setSubjectId(Integer subjectId) {
-//        this.subjectId = subjectId;
-//    }
-
-    public List<Integer> getUserIdList() {
-        return userIdList;
-    }
-
-    public void setUserIdList(List<Integer> userIdList) {
-        this.userIdList = userIdList;
-    }
-
-    public List<Integer> getMusicScoreIdList() {
-        return musicScoreIdList;
-    }
-
-    public void setMusicScoreIdList(List<Integer> musicScoreIdList) {
-        this.musicScoreIdList = musicScoreIdList;
-    }
-
-    public Integer getGroup() {
-        return group;
-    }
-
-    public void setGroup(Integer group) {
-        this.group = group;
-    }
 }

+ 11 - 16
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/RegisterPayDto.java

@@ -34,11 +34,14 @@ public class RegisterPayDto extends PayParamBasicDto{
     @ApiModelProperty(value = "购买乐器保养",required = false)
     private Boolean buyMaintenance = false;
 
-    @ApiModelProperty(value = "购买云教练",required = false)
-    private Boolean buyCloudTeacher= false;
+    @ApiModelProperty(value = "缴费项目关联会员Id",required = false)
+    private List<Long> buyCalenderMemberId;
 
-    @ApiModelProperty(value = "购买云教练+",required = false)
-    private Boolean buyCloudTeacherPlus= false;
+//    @ApiModelProperty(value = "购买云教练",required = false)
+//    private Boolean buyCloudTeacher= false;
+//
+//    @ApiModelProperty(value = "购买云教练+",required = false)
+//    private Boolean buyCloudTeacherPlus= false;
 
     public String getBatchNo() {
         return batchNo;
@@ -120,19 +123,11 @@ public class RegisterPayDto extends PayParamBasicDto{
         this.buyMaintenance = buyMaintenance;
     }
 
-    public Boolean getBuyCloudTeacher() {
-        return buyCloudTeacher;
+    public List<Long> getBuyCalenderMemberId() {
+        return buyCalenderMemberId;
     }
 
-    public void setBuyCloudTeacher(Boolean buyCloudTeacher) {
-        this.buyCloudTeacher = buyCloudTeacher;
-    }
-
-    public Boolean getBuyCloudTeacherPlus() {
-        return buyCloudTeacherPlus;
-    }
-
-    public void setBuyCloudTeacherPlus(Boolean buyCloudTeacherPlus) {
-        this.buyCloudTeacherPlus = buyCloudTeacherPlus;
+    public void setBuyCalenderMemberId(List<Long> buyCalenderMemberId) {
+        this.buyCalenderMemberId = buyCalenderMemberId;
     }
 }

+ 3 - 96
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentCourseHomeworkDto.java

@@ -1,8 +1,11 @@
 package com.ym.mec.biz.dal.dto;
 
 
+import lombok.Data;
+
 import java.util.Date;
 
+@Data
 public class StudentCourseHomeworkDto {
 
     private Integer studentId;
@@ -28,100 +31,4 @@ public class StudentCourseHomeworkDto {
     private Integer isView;
 
     private Long studentCourseHomeworkId;
-
-    public Long getStudentCourseHomeworkId() {
-        return studentCourseHomeworkId;
-    }
-
-    public void setStudentCourseHomeworkId(Long studentCourseHomeworkId) {
-        this.studentCourseHomeworkId = studentCourseHomeworkId;
-    }
-
-    public String getPhone() {
-        return phone;
-    }
-
-    public void setPhone(String phone) {
-        this.phone = phone;
-    }
-
-    public Integer getStudentId() {
-        return studentId;
-    }
-
-    public void setStudentId(Integer studentId) {
-        this.studentId = studentId;
-    }
-
-    public String getAttachments() {
-        return attachments;
-    }
-
-    public void setAttachments(String attachments) {
-        this.attachments = attachments;
-    }
-
-    public Date getSubmitTime() {
-        return submitTime;
-    }
-
-    public void setSubmitTime(Date submitTime) {
-        this.submitTime = submitTime;
-    }
-
-    public String getStudentName() {
-        return studentName;
-    }
-
-    public void setStudentName(String studentName) {
-        this.studentName = studentName;
-    }
-
-    public String getUrl() {
-        return url;
-    }
-
-    public void setUrl(String url) {
-        this.url = url;
-    }
-
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    public Integer getIsReplied() {
-        return isReplied;
-    }
-
-    public void setIsReplied(Integer isReplied) {
-        this.isReplied = isReplied;
-    }
-
-    public String getSubjectIds() {
-        return subjectIds;
-    }
-
-    public void setSubjectIds(String subjectIds) {
-        this.subjectIds = subjectIds;
-    }
-
-    public String getSubjectNames() {
-        return subjectNames;
-    }
-
-    public void setSubjectNames(String subjectNames) {
-        this.subjectNames = subjectNames;
-    }
-
-    public Integer getIsView() {
-        return isView;
-    }
-
-    public void setIsView(Integer isView) {
-        this.isView = isView;
-    }
 }

+ 2 - 160
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentHomeworkRecordDto.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.dto;
 import com.ym.mec.biz.dal.enums.ELessonTrainingType;
 import com.ym.mec.biz.dal.enums.StandardEnum;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.util.Date;
 
@@ -10,6 +11,7 @@ import java.util.Date;
  * @Author Joburgess
  * @Date 2020/3/20
  */
+@Data
 public class StudentHomeworkRecordDto {
 
     @ApiModelProperty(value = "学生作业ID")
@@ -72,164 +74,4 @@ public class StudentHomeworkRecordDto {
 
     @ApiModelProperty("提交时间")
     private Date submitTime;
-
-    public Date getSubmitTime() {
-        return submitTime;
-    }
-
-    public void setSubmitTime(Date submitTime) {
-        this.submitTime = submitTime;
-    }
-
-    public StandardEnum getStandardFlag() {
-        return standardFlag;
-    }
-
-    public void setStandardFlag(StandardEnum standardFlag) {
-        this.standardFlag = standardFlag;
-    }
-
-    public ELessonTrainingType getType() {
-        return type;
-    }
-
-    public void setType(ELessonTrainingType type) {
-        this.type = type;
-    }
-
-    public Boolean getFinishStatus() {
-        return finishStatus;
-    }
-
-    public void setFinishStatus(Boolean finishStatus) {
-        this.finishStatus = finishStatus;
-    }
-
-    public Date getEndClassTime() {
-        return endClassTime;
-    }
-
-    public void setEndClassTime(Date endClassTime) {
-        this.endClassTime = endClassTime;
-    }
-
-    public String getMusicGroupId() {
-        return musicGroupId;
-    }
-
-    public void setMusicGroupId(String musicGroupId) {
-        this.musicGroupId = musicGroupId;
-    }
-
-    public String getMusicGroupName() {
-        return musicGroupName;
-    }
-
-    public void setMusicGroupName(String musicGroupName) {
-        this.musicGroupName = musicGroupName;
-    }
-
-    public String getMusicGroupImg() {
-        return musicGroupImg;
-    }
-
-    public void setMusicGroupImg(String musicGroupImg) {
-        this.musicGroupImg = musicGroupImg;
-    }
-
-    public Integer getClassGroupId() {
-        return classGroupId;
-    }
-
-    public void setClassGroupId(Integer classGroupId) {
-        this.classGroupId = classGroupId;
-    }
-
-    public String getClassGroupName() {
-        return classGroupName;
-    }
-
-    public void setClassGroupName(String classGroupName) {
-        this.classGroupName = classGroupName;
-    }
-
-    public String getTeachMode() {
-        return teachMode;
-    }
-
-    public void setTeachMode(String teachMode) {
-        this.teachMode = teachMode;
-    }
-
-    public String getHeadUrl() {
-        return headUrl;
-    }
-
-    public void setHeadUrl(String headUrl) {
-        this.headUrl = headUrl;
-    }
-
-    public Date getExpiryDate() {
-        return expiryDate;
-    }
-
-    public void setExpiryDate(Date expiryDate) {
-        this.expiryDate = expiryDate;
-    }
-
-    public Integer getStudentCourseHomeworkId() {
-        return studentCourseHomeworkId;
-    }
-
-    public void setStudentCourseHomeworkId(Integer studentCourseHomeworkId) {
-        this.studentCourseHomeworkId = studentCourseHomeworkId;
-    }
-
-    public Long getCourseScheduleId() {
-        return courseScheduleId;
-    }
-
-    public void setCourseScheduleId(Long courseScheduleId) {
-        this.courseScheduleId = courseScheduleId;
-    }
-
-    public String getCourseName() {
-        return courseName;
-    }
-
-    public void setCourseName(String courseName) {
-        this.courseName = courseName;
-    }
-
-    public Date getStartClassTime() {
-        return startClassTime;
-    }
-
-    public void setStartClassTime(Date startClassTime) {
-        this.startClassTime = startClassTime;
-    }
-
-    public Integer getTeacherId() {
-        return teacherId;
-    }
-
-    public void setTeacherId(Integer teacherId) {
-        this.teacherId = teacherId;
-    }
-
-    public String getTeacherName() {
-        return teacherName;
-    }
-
-    public void setTeacherName(String teacherName) {
-        this.teacherName = teacherName;
-    }
-
-    public int getStatus() {
-        return status;
-    }
-
-    public void setStatus(int status) {
-        this.status = status;
-    }
 }

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonExaminationDetailDto.java

@@ -5,6 +5,8 @@ import com.ym.mec.biz.dal.enums.HardLevelEnum;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.List;
+
 /**
  *
  * @author zx
@@ -57,5 +59,25 @@ public class StudentLessonExaminationDetailDto {
     @ApiModelProperty(value = "曲目是否有效")
     private Boolean validFlag;
 
+    private String memo;
+
+    @ApiModelProperty("作业分组")
+    private Integer group;
+
+    @ApiModelProperty("作业类型,MUSIC_SCORE:曲目评测,DESCRIPTION:描述")
+    private String homeworkType;
+
+
+
+    @ApiModelProperty("使用状态 锁定: LOCK 解锁:UNLOCK")
+    private String useStatus;
+
+    @ApiModelProperty("作业描述")
+    private String desc;
+
+    private String fileJsons;
+
+    @ApiModelProperty("上传文件JSON")
+    private List<CourseHomeworkWrapper.FileJson> fileJson;
 }
 

+ 19 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonExaminationDetailDto1.java

@@ -1,10 +1,13 @@
 package com.ym.mec.biz.dal.dto;
 
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.ym.mec.biz.dal.enums.HardLevelEnum;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.util.List;
+
 /**
  *
  * @author zx
@@ -30,5 +33,21 @@ public class StudentLessonExaminationDetailDto1 {
 
     @ApiModelProperty(value = "评测难度")
     private HardLevelEnum heardLevel;
+
+    @ApiModelProperty(value = "训练说明")
+    private String memo;
+
+    @ApiModelProperty("作业类型,MUSIC_SCORE:曲目评测,DESCRIPTION:描述")
+    private String homeworkType;
+
+    @ApiModelProperty("作业描述")
+    private String desc;
+
+    @ApiModelProperty("上传文件JSON")
+    private String fileJsons;
+
+
+    @ApiModelProperty("上传文件JSON")
+    private List<CourseHomeworkWrapper.FileJson> fileJson;
 }
 

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonExaminationDto.java

@@ -1,10 +1,12 @@
 package com.ym.mec.biz.dal.dto;
 
 
+import com.ym.mec.biz.dal.entity.StudentLessonExaminationDetail;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  *
@@ -40,5 +42,15 @@ public class StudentLessonExaminationDto {
 
     @ApiModelProperty(value = "声部")
     private String subjectName;
+
+    @ApiModelProperty("作业分组")
+    private Integer group;
+
+
+    @ApiModelProperty(value = "描述")
+    private String memo;
+
+    @ApiModelProperty("作业详情")
+    private List<StudentLessonExaminationDetailDto> studentLessonExaminationDetailList;
 }
 

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonExaminationDto1.java

@@ -33,6 +33,9 @@ public class StudentLessonExaminationDto1 {
     @ApiModelProperty(value = "训练时间")
     private Date trainingTime;
 
+    @ApiModelProperty("作业分组")
+    private Integer group;
+
     private List<StudentLessonExaminationDetailDto1> detailDtos;
 }
 

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentLessonExaminationSaveDto.java

@@ -21,6 +21,8 @@ public class StudentLessonExaminationSaveDto {
     @ApiModelProperty("作业分组")
     private Integer group;
 
+    private String memo;
+
     @ApiModelProperty(value = "作业内容")
     private List<LessonExaminationDetailDto> examinationDetailDtos;
 }

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

@@ -11,6 +11,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import javax.validation.constraints.NotNull;
+import java.io.File;
 import java.util.List;
 
 /**
@@ -28,6 +29,9 @@ public class StudentLessonTrainingDetailWrapper {
         @ApiModelProperty("曲目id")
         private Long musicScoreId;
 
+        @ApiModelProperty("课件ID 布置课件视频作业时")
+        private String lessonCoursewareId;
+
         @ApiModelProperty("曲目名称")
         private String musicScoreName;
 
@@ -49,8 +53,13 @@ public class StudentLessonTrainingDetailWrapper {
         @ApiModelProperty("结束小节")
         private Integer end;
 
-        @ApiModelProperty("作业类型,VIDEO,MUSIC_SCORE")
+        @ApiModelProperty("作业类型,VIDEO,MUSIC_SCORE,DESCRIPTION:描述")
         private String homeworkType = "MUSIC_SCORE";
+
+
+        @ApiModelProperty("作业描述")
+        private String desc;
+
     }
 
     @Data
@@ -70,6 +79,10 @@ public class StudentLessonTrainingDetailWrapper {
         @ApiModelProperty("曲目id")
         private Long musicScoreId;
 
+
+        @ApiModelProperty("课件ID 布置课件视频作业时")
+        private String lessonCoursewareId;
+
         @ApiModelProperty("曲目名称")
         private String  musicScoreName;
 
@@ -111,6 +124,24 @@ public class StudentLessonTrainingDetailWrapper {
 
         @ApiModelProperty("资源是否有效")
         private Boolean validFlag = false;
+
+        private String memo;
+
+        @ApiModelProperty("使用状态 锁定: LOCK 解锁:UNLOCK")
+        private String useStatus;
+
+
+
+        @ApiModelProperty("作业描述")
+        private String desc;
+
+        private String fileJsons;
+
+        @ApiModelProperty("上传文件JSON")
+        private List<CourseHomeworkWrapper.FileJson> fileJson;
+
+        @ApiModelProperty("上传作业文件失效删除标记")
+        private Boolean fileDelFlag;
         
         public String jsonString() {
             return JSON.toJSONString(this);

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageBaseInfoOfMusicGroupDto.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dto;
 
 import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
+import com.ym.mec.biz.dal.wrapper.CloudTeacherOrderWrapper;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.math.BigDecimal;
@@ -54,6 +55,17 @@ public class StudentManageBaseInfoOfMusicGroupDto {
     @JsonInclude(JsonInclude.Include.NON_NULL)
     private BigDecimal depositFee;
 
+    @ApiModelProperty("会员信息")
+    private List<CloudTeacherOrderWrapper.StudentMemberDetail> studentMemberDetails;
+
+    public List<CloudTeacherOrderWrapper.StudentMemberDetail> getStudentMemberDetails() {
+        return studentMemberDetails;
+    }
+
+    public void setStudentMemberDetails(List<CloudTeacherOrderWrapper.StudentMemberDetail> studentMemberDetails) {
+        this.studentMemberDetails = studentMemberDetails;
+    }
+
     public List<UserGoodsDto> getUserGoodsDtos() {
         return userGoodsDtos;
     }

+ 7 - 428
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageListDto.java

@@ -2,17 +2,17 @@ package com.ym.mec.biz.dal.dto;
 
 import com.ym.mec.biz.dal.enums.GradeTypeEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
+import com.ym.mec.biz.dal.wrapper.CloudTeacherOrderWrapper;
 import com.ym.mec.common.enums.UserGenderEnum;
 
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
-/**
- * @Author Joburgess
- * @Date 2019/9/19
- */
+@Data
 public class StudentManageListDto {
 
     @ApiModelProperty(value = "用户ID",required = false)
@@ -85,7 +85,7 @@ public class StudentManageListDto {
 
     private Integer isNewUser;
     
-    private boolean isSignedContract;
+    private Boolean isSignedContract;
 
     private String contractVersions;
 
@@ -135,433 +135,12 @@ public class StudentManageListDto {
 
     private String courseTeacherName;
 
-    public Integer getCourseTeacher() {
-        return courseTeacher;
-    }
-
-    public void setCourseTeacher(Integer courseTeacher) {
-        this.courseTeacher = courseTeacher;
-    }
-
-    public String getCourseTeacherName() {
-        return courseTeacherName;
-    }
-
-    public void setCourseTeacherName(String courseTeacherName) {
-        this.courseTeacherName = courseTeacherName;
-    }
-
-    public String getNormalTeacherName() {
-        return normalTeacherName;
-    }
-
-    public void setNormalTeacherName(String normalTeacherName) {
-        this.normalTeacherName = normalTeacherName;
-    }
-
-    public String getMixTeacherName() {
-        return mixTeacherName;
-    }
-
-    public void setMixTeacherName(String mixTeacherName) {
-        this.mixTeacherName = mixTeacherName;
-    }
-
-    public String getVipTeacherName() {
-        return vipTeacherName;
-    }
-
-    public void setVipTeacherName(String vipTeacherName) {
-        this.vipTeacherName = vipTeacherName;
-    }
-
-    public String getPracticeTeacherName() {
-        return practiceTeacherName;
-    }
-
-    public void setPracticeTeacherName(String practiceTeacherName) {
-        this.practiceTeacherName = practiceTeacherName;
-    }
-
-    public Boolean getRepairFlag() {
-        return repairFlag;
-    }
-
-    public void setRepairFlag(Boolean repairFlag) {
-        this.repairFlag = repairFlag;
-    }
-
-    public String getAvatar() {
-        return avatar;
-    }
-
-    public void setAvatar(String avatar) {
-        this.avatar = avatar;
-    }
-
-    public Integer getRecordUserId() {
-        return recordUserId;
-    }
-
-    public void setRecordUserId(Integer recordUserId) {
-        this.recordUserId = recordUserId;
-    }
-
-    public Boolean getHasNoStartCloudTeacher() {
-        return hasNoStartCloudTeacher;
-    }
-
-    public void setHasNoStartCloudTeacher(Boolean hasNoStartCloudTeacher) {
-        this.hasNoStartCloudTeacher = hasNoStartCloudTeacher;
-    }
-
-    public Integer getMembershipDay() {
-        return membershipDay;
-    }
-
-    public void setMembershipDay(Integer membershipDay) {
-        this.membershipDay = membershipDay;
-    }
-
-    public Integer getExperienceMembershipDay() {
-        return experienceMembershipDay;
-    }
-
-    public void setExperienceMembershipDay(Integer experienceMembershipDay) {
-        this.experienceMembershipDay = experienceMembershipDay;
-    }
-
-    public Date getExperienceMembershipEndTime() {
-        return experienceMembershipEndTime;
-    }
-
-    public void setExperienceMembershipEndTime(Date experienceMembershipEndTime) {
-        this.experienceMembershipEndTime = experienceMembershipEndTime;
-    }
-
-    public Integer getMemberRankSettingId() {
-        return memberRankSettingId;
-    }
-
-    public void setMemberRankSettingId(Integer memberRankSettingId) {
-        this.memberRankSettingId = memberRankSettingId;
-    }
-
-    public Integer getCooperationOrganId() {
-        return cooperationOrganId;
-    }
-
-    public void setCooperationOrganId(Integer cooperationOrganId) {
-        this.cooperationOrganId = cooperationOrganId;
-    }
-
-    public String getCooperationOrganName() {
-        return cooperationOrganName;
-    }
-
-    public void setCooperationOrganName(String cooperationOrganName) {
-        this.cooperationOrganName = cooperationOrganName;
-    }
-
     @ApiModelProperty(value = "剩余VIP课数")
     private Integer noStartVipCourseNum = 0;
 
     @ApiModelProperty(value = "剩余网管课数")
     private Integer noStartPracticeCourseNum = 0;
 
-    public String getActivityCourseDetail() {
-        return activityCourseDetail;
-    }
-
-    public void setActivityCourseDetail(String activityCourseDetail) {
-        this.activityCourseDetail = activityCourseDetail;
-    }
-
-    public String getContractVersions() {
-        return contractVersions;
-    }
-
-    public void setContractVersions(String contractVersions) {
-        this.contractVersions = contractVersions;
-    }
-
-    public Integer getCarePackage() {
-        return carePackage;
-    }
-
-    public void setCarePackage(Integer carePackage) {
-        this.carePackage = carePackage;
-    }
-
-    public Integer getComeOnPackage() {
-        return comeOnPackage;
-    }
-
-    public void setComeOnPackage(Integer comeOnPackage) {
-        this.comeOnPackage = comeOnPackage;
-    }
-
-    public Integer getIsNewUser() {
-        return isNewUser;
-    }
-
-    public void setIsNewUser(Integer isNewUser) {
-        this.isNewUser = isNewUser;
-    }
-
-    public BigDecimal getBalance() {
-        return balance;
-    }
-
-    public void setBalance(BigDecimal balance) {
-        this.balance = balance;
-    }
-
-    public YesOrNoEnum getServiceTag() {
-        return serviceTag;
-    }
-
-    public void setServiceTag(YesOrNoEnum serviceTag) {
-        this.serviceTag = serviceTag;
-    }
-
-    public YesOrNoEnum getOperatingTag() {
-        return operatingTag;
-    }
-
-    public void setOperatingTag(YesOrNoEnum operatingTag) {
-        this.operatingTag = operatingTag;
-    }
-
-    public Integer getOrganId() {
-        return organId;
-    }
-
-    public void setOrganId(Integer organId) {
-        this.organId = organId;
-    }
-
-    public String getMusicGroupName() {
-        return musicGroupName;
-    }
-
-    public void setMusicGroupName(String musicGroupName) {
-        this.musicGroupName = musicGroupName;
-    }
-
-    public String getOrganName() {
-        return organName;
-    }
-
-    public void setOrganName(String organName) {
-        this.organName = organName;
-    }
-
-    public String getSubjectName() {
-        return subjectName;
-    }
-
-    public void setSubjectName(String subjectName) {
-        this.subjectName = subjectName;
-    }
-
-    public String getMusicGroupStatus() {
-        return musicGroupStatus;
-    }
-
-    public void setMusicGroupStatus(String musicGroupStatus) {
-        this.musicGroupStatus = musicGroupStatus;
-    }
-
-    public String getVipGroupName() {
-        return vipGroupName;
-    }
-
-    public void setVipGroupName(String vipGroupName) {
-        this.vipGroupName = vipGroupName;
-    }
-
-    public String getVipGroupStatus() {
-        return vipGroupStatus;
-    }
-
-    public void setVipGroupStatus(String vipGroupStatus) {
-        this.vipGroupStatus = vipGroupStatus;
-    }
-
-    public YesOrNoEnum getHasPracticeCourse() {
-        return hasPracticeCourse;
-    }
-
-    public void setHasPracticeCourse(YesOrNoEnum hasPracticeCourse) {
-        this.hasPracticeCourse = hasPracticeCourse;
-    }
-
-    public YesOrNoEnum getHasCourse() {
-        return hasCourse;
-    }
-
-    public void setHasCourse(YesOrNoEnum hasCourse) {
-        this.hasCourse = hasCourse;
-    }
-
-    public String getNation() {
-        return nation;
-    }
-
-    public void setNation(String nation) {
-        this.nation = nation;
-    }
-
-    public String getUsername() {
-        return username;
-    }
-
-    public void setUsername(String username) {
-        this.username = username;
-    }
-
-    public BigDecimal getCourseBalance() {
-        return courseBalance;
-    }
-
-    public void setCourseBalance(BigDecimal courseBalance) {
-        this.courseBalance = courseBalance;
-    }
-
-    public String getCurrentClass() {
-        return currentClass;
-    }
-
-    public void setCurrentClass(String currentClass) {
-        this.currentClass = currentClass;
-    }
-
-    public String getCurrentGrade() {
-        return currentGrade;
-    }
-
-    public void setCurrentGrade(String currentGrade) {
-        this.currentGrade = currentGrade;
-    }
-
-    public Date getBirthdate() {
-        return birthdate;
-    }
-
-    public void setBirthdate(Date birthdate) {
-        this.birthdate = birthdate;
-    }
-
-    public UserGenderEnum getGender() {
-        return gender;
-    }
-
-    public void setGender(UserGenderEnum gender) {
-        this.gender = gender;
-    }
-
-    public Integer getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Integer userId) {
-        this.userId = userId;
-    }
-
-    public String getRealName() {
-        return realName;
-    }
-
-    public void setRealName(String realName) {
-        this.realName = realName;
-    }
-
-    public String getParentsPhone() {
-        return parentsPhone;
-    }
-
-    public void setParentsPhone(String parentsPhone) {
-        this.parentsPhone = parentsPhone;
-    }
-
-    public String getParentsName() {
-        return parentsName;
-    }
-
-    public void setParentsName(String parentsName) {
-        this.parentsName = parentsName;
-    }
-
-	public YesOrNoEnum getIsActive() {
-		return isActive;
-	}
-
-	public void setIsActive(YesOrNoEnum isActive) {
-		this.isActive = isActive;
-	}
-
-	public String getSubjectIdList() {
-		return subjectIdList;
-	}
-
-	public void setSubjectIdList(String subjectIdList) {
-		this.subjectIdList = subjectIdList;
-	}
-
-	public boolean getIsSignedContract() {
-		return isSignedContract;
-	}
-
-	public void setIsSignedContract(boolean isSignedContract) {
-		this.isSignedContract = isSignedContract;
-	}
-
-    public Integer getCurrentGradeNum() {
-        return currentGradeNum;
-    }
-
-    public void setCurrentGradeNum(Integer currentGradeNum) {
-        this.currentGradeNum = currentGradeNum;
-    }
-
-    public GradeTypeEnum getGradeType() {
-        return gradeType;
-    }
-
-    public void setGradeType(GradeTypeEnum gradeType) {
-        this.gradeType = gradeType;
-    }
-
-    public Integer getNoStartVipCourseNum() {
-        return noStartVipCourseNum;
-    }
-
-    public void setNoStartVipCourseNum(Integer noStartVipCourseNum) {
-        this.noStartVipCourseNum = noStartVipCourseNum;
-    }
-
-    public Integer getNoStartPracticeCourseNum() {
-        return noStartPracticeCourseNum;
-    }
-
-    public void setNoStartPracticeCourseNum(Integer noStartPracticeCourseNum) {
-        this.noStartPracticeCourseNum = noStartPracticeCourseNum;
-    }
-
-	public Date getMembershipEndTime() {
-		return membershipEndTime;
-	}
-
-	public void setMembershipEndTime(Date membershipEndTime) {
-		this.membershipEndTime = membershipEndTime;
-	}
-
-	public String getExtSubjectIds() {
-		return extSubjectIds;
-	}
-
-	public void setExtSubjectIds(String extSubjectIds) {
-		this.extSubjectIds = extSubjectIds;
-	}
+    @ApiModelProperty(value = "学员生效中的云教练",required = false)
+    private List<CloudTeacherOrderWrapper.StudentMemberDetail> cloudTeacherOrderList;
 }

+ 3 - 152
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentServiceDetailDto.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dto;
 
 import com.ym.mec.biz.dal.enums.GroupType;
+import lombok.Data;
 
 import java.util.Date;
 
@@ -8,6 +9,8 @@ import java.util.Date;
  * @Author Joburgess
  * @Date 2020.04.29
  */
+
+@Data
 public class StudentServiceDetailDto {
 
     private Long homeworkId;
@@ -47,156 +50,4 @@ public class StudentServiceDetailDto {
     private String attachments;
 
     private String musicScoreId;
-
-    public String getMusicScoreId() {
-        return musicScoreId;
-    }
-
-    public void setMusicScoreId(String musicScoreId) {
-        this.musicScoreId = musicScoreId;
-    }
-
-    public Date getCourseEndTime() {
-        return courseEndTime;
-    }
-
-    public void setCourseEndTime(Date courseEndTime) {
-        this.courseEndTime = courseEndTime;
-    }
-
-    public Long getStudentHomeworkId() {
-        return studentHomeworkId;
-    }
-
-    public void setStudentHomeworkId(Long studentHomeworkId) {
-        this.studentHomeworkId = studentHomeworkId;
-    }
-
-    public String getGroupId() {
-        return groupId;
-    }
-
-    public void setGroupId(String groupId) {
-        this.groupId = groupId;
-    }
-
-    public GroupType getGroupType() {
-        return groupType;
-    }
-
-    public void setGroupType(GroupType groupType) {
-        this.groupType = groupType;
-    }
-
-    public Integer getIsSubmit() {
-        return isSubmit;
-    }
-
-    public void setIsSubmit(Integer isSubmit) {
-        this.isSubmit = isSubmit;
-    }
-
-    public Long getHomeworkId() {
-        return homeworkId;
-    }
-
-    public void setHomeworkId(Long homeworkId) {
-        this.homeworkId = homeworkId;
-    }
-
-    public String getHomeworkType() {
-        return homeworkType;
-    }
-
-    public void setHomeworkType(String homeworkType) {
-        this.homeworkType = homeworkType;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public String getContent() {
-        return content;
-    }
-
-    public void setContent(String content) {
-        this.content = content;
-    }
-
-    public Long getCourseScheduleId() {
-        return courseScheduleId;
-    }
-
-    public void setCourseScheduleId(Long courseScheduleId) {
-        this.courseScheduleId = courseScheduleId;
-    }
-
-    public String getGroupName() {
-        return groupName;
-    }
-
-    public void setGroupName(String groupName) {
-        this.groupName = groupName;
-    }
-
-    public Date getCourseStartTime() {
-        return courseStartTime;
-    }
-
-    public void setCourseStartTime(Date courseStartTime) {
-        this.courseStartTime = courseStartTime;
-    }
-
-    public Integer getTeacherId() {
-        return teacherId;
-    }
-
-    public void setTeacherId(Integer teacherId) {
-        this.teacherId = teacherId;
-    }
-
-    public String getTeacherName() {
-        return teacherName;
-    }
-
-    public void setTeacherName(String teacherName) {
-        this.teacherName = teacherName;
-    }
-
-    public Date getHomeworkCreateTime() {
-        return homeworkCreateTime;
-    }
-
-    public void setHomeworkCreateTime(Date homeworkCreateTime) {
-        this.homeworkCreateTime = homeworkCreateTime;
-    }
-
-    public Date getSubmitTime() {
-        return submitTime;
-    }
-
-    public void setSubmitTime(Date submitTime) {
-        this.submitTime = submitTime;
-    }
-
-    public Integer getIsReplied() {
-        return isReplied;
-    }
-
-    public void setIsReplied(Integer isReplied) {
-        this.isReplied = isReplied;
-    }
-
-    public String getAttachments() {
-        return attachments;
-    }
-
-    public void setAttachments(String attachments) {
-        this.attachments = attachments;
-    }
 }

+ 3 - 64
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentServiceHomeworkDto.java

@@ -1,11 +1,14 @@
 package com.ym.mec.biz.dal.dto;
 
+import lombok.Data;
+
 import java.util.Date;
 
 /**
  * @Author Joburgess
  * @Date 2020.04.29
  */
+@Data
 public class StudentServiceHomeworkDto {
 
     private Integer id;
@@ -23,68 +26,4 @@ public class StudentServiceHomeworkDto {
     private Date submitTime;
 
     private String type;
-
-    public Integer getId() {
-        return id;
-    }
-
-    public void setId(Integer id) {
-        this.id = id;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public Integer getUserId() {
-        return userId;
-    }
-
-    public void setUserId(Integer userId) {
-        this.userId = userId;
-    }
-
-    public Integer getStatus() {
-        return status;
-    }
-
-    public void setStatus(Integer status) {
-        this.status = status;
-    }
-
-    public Integer getIsReplied() {
-        return isReplied;
-    }
-
-    public void setIsReplied(Integer isReplied) {
-        this.isReplied = isReplied;
-    }
-
-    public Integer getIsRepliedTimely() {
-        return isRepliedTimely;
-    }
-
-    public void setIsRepliedTimely(Integer isRepliedTimely) {
-        this.isRepliedTimely = isRepliedTimely;
-    }
-
-    public Integer getIsView() {
-        return isView;
-    }
-
-    public void setIsView(Integer isView) {
-        this.isView = isView;
-    }
-
-    public Date getSubmitTime() {
-        return submitTime;
-    }
-
-    public void setSubmitTime(Date submitTime) {
-        this.submitTime = submitTime;
-    }
 }

+ 2 - 88
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentVisitCourseHomeWorkDto.java

@@ -3,9 +3,11 @@ package com.ym.mec.biz.dal.dto;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.util.Date;
 
+@Data
 public class StudentVisitCourseHomeWorkDto {
     @ApiModelProperty(value = "课程id",required = false)
     private Long courseScheduleId;
@@ -39,92 +41,4 @@ public class StudentVisitCourseHomeWorkDto {
 
     @ApiModelProperty(value = "布置时间")
     private Date createTime;
-
-    public GroupType getGroupType() {
-        return groupType;
-    }
-
-    public void setGroupType(GroupType groupType) {
-        this.groupType = groupType;
-    }
-
-    public String getCourseName() {
-        return courseName;
-    }
-
-    public void setCourseName(String courseName) {
-        this.courseName = courseName;
-    }
-
-    public String getGroupName() {
-        return groupName;
-    }
-
-    public void setGroupName(String groupName) {
-        this.groupName = groupName;
-    }
-
-    public String getTeacherName() {
-        return teacherName;
-    }
-
-    public void setTeacherName(String teacherName) {
-        this.teacherName = teacherName;
-    }
-
-    public String getContent() {
-        return content;
-    }
-
-    public void setContent(String content) {
-        this.content = content;
-    }
-
-    public String getGroupId() {
-        return groupId;
-    }
-
-    public void setGroupId(String groupId) {
-        this.groupId = groupId;
-    }
-
-    public Long getCourseScheduleId() {
-        return courseScheduleId;
-    }
-
-    public void setCourseScheduleId(Long courseScheduleId) {
-        this.courseScheduleId = courseScheduleId;
-    }
-
-    public YesOrNoEnum getStatus() {
-        return status;
-    }
-
-    public void setStatus(YesOrNoEnum status) {
-        this.status = status;
-    }
-
-    public YesOrNoEnum getIsReplied() {
-        return isReplied;
-    }
-
-    public void setIsReplied(YesOrNoEnum isReplied) {
-        this.isReplied = isReplied;
-    }
-
-    public YesOrNoEnum getIsView() {
-        return isView;
-    }
-
-    public void setIsView(YesOrNoEnum isView) {
-        this.isView = isView;
-    }
-
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
 }

+ 2 - 152
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherHomeworkListDto.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dto;
 
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 import org.codehaus.jackson.annotate.JsonIgnore;
 
 import java.util.Date;
@@ -9,6 +10,7 @@ import java.util.Date;
  * @Author Joburgess
  * @Date 2019/10/20
  */
+@Data
 public class TeacherHomeworkListDto {
 
     @ApiModelProperty(value = "课程编号")
@@ -61,156 +63,4 @@ public class TeacherHomeworkListDto {
     private int isSubmit;
 
     private int status;
-
-    public Integer getHomeworkId() {
-        return homeworkId;
-    }
-
-    public void setHomeworkId(Integer homeworkId) {
-        this.homeworkId = homeworkId;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public Date getEndClassTime() {
-        return endClassTime;
-    }
-
-    public void setEndClassTime(Date endClassTime) {
-        this.endClassTime = endClassTime;
-    }
-
-    public Date getExpiryDate() {
-        return expiryDate;
-    }
-
-    public void setExpiryDate(Date expiryDate) {
-        this.expiryDate = expiryDate;
-    }
-
-    public int getStatus() {
-        return status;
-    }
-
-    public void setStatus(int status) {
-        this.status = status;
-    }
-
-    public Date getStartClassTime() {
-        return startClassTime;
-    }
-
-    public void setStartClassTime(Date startClassTime) {
-        this.startClassTime = startClassTime;
-    }
-
-    public int getIsSubmit() {
-        return isSubmit;
-    }
-
-    public void setIsSubmit(int isSubmit) {
-        this.isSubmit = isSubmit;
-    }
-
-    public int getIsReplied() {
-        return isReplied;
-    }
-
-    public void setIsReplied(int isReplied) {
-        this.isReplied = isReplied;
-    }
-
-    public String getDay() {
-        return day;
-    }
-
-    public void setDay(String day) {
-        this.day = day;
-    }
-
-    public Integer getCourseScheduleId() {
-        return courseScheduleId;
-    }
-
-    public void setCourseScheduleId(Integer courseScheduleId) {
-        this.courseScheduleId = courseScheduleId;
-    }
-
-    public String getContent() {
-        return content;
-    }
-
-    public void setContent(String content) {
-        this.content = content;
-    }
-
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    public Integer getExpectNum() {
-        return expectNum;
-    }
-
-    public void setExpectNum(Integer expectNum) {
-        this.expectNum = expectNum;
-    }
-
-    public Integer getCompletedNum() {
-        return completedNum;
-    }
-
-    public void setCompletedNum(Integer completedNum) {
-        this.completedNum = completedNum;
-    }
-
-    public String getCourseScheduleName() {
-        return courseScheduleName;
-    }
-
-    public void setCourseScheduleName(String courseScheduleName) {
-        this.courseScheduleName = courseScheduleName;
-    }
-
-    public Integer getTotalClassTimes() {
-        return totalClassTimes;
-    }
-
-    public void setTotalClassTimes(Integer totalClassTimes) {
-        this.totalClassTimes = totalClassTimes;
-    }
-
-    public Integer getCurrentClassTimes() {
-        return currentClassTimes;
-    }
-
-    public void setCurrentClassTimes(Integer currentClassTimes) {
-        this.currentClassTimes = currentClassTimes;
-    }
-
-    public String getMusicGroupId() {
-        return musicGroupId;
-    }
-
-    public void setMusicGroupId(String musicGroupId) {
-        this.musicGroupId = musicGroupId;
-    }
-
-    public String getMusicGroupName() {
-        return musicGroupName;
-    }
-
-    public void setMusicGroupName(String musicGroupName) {
-        this.musicGroupName = musicGroupName;
-    }
 }

+ 14 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TenantInfoDto.java

@@ -1,10 +1,12 @@
 package com.ym.mec.biz.dal.dto;
 
+import com.ym.mec.biz.dal.wrapper.TenantMemberRankSettingWrapper;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
 import javax.validation.constraints.*;
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * @author hgw
@@ -107,6 +109,10 @@ public class TenantInfoDto implements Serializable {
     @ApiModelProperty(value = "机构配置参数")
     private TenantConfigDto config;
 
+    @ApiModelProperty("机构会员信息设置")
+    @NotNull(message = "请填写机构会员信息设置!")
+    private List<TenantMemberRankSettingWrapper.TenantMemberRankSettingAdd> memberInfos;
+
     @ApiModelProperty(value = "购买的服务名称")
     private String platformServeName;
 
@@ -116,6 +122,14 @@ public class TenantInfoDto implements Serializable {
     @ApiModelProperty(value = "推荐人")
     private Integer recommender;
 
+    public List<TenantMemberRankSettingWrapper.TenantMemberRankSettingAdd> getMemberInfos() {
+        return memberInfos;
+    }
+
+    public void setMemberInfos(List<TenantMemberRankSettingWrapper.TenantMemberRankSettingAdd> memberInfos) {
+        this.memberInfos = memberInfos;
+    }
+
     public Integer getId() {
         return id;
     }

+ 3 - 171
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/WebCourseHomeworkListDto.java

@@ -2,13 +2,11 @@ package com.ym.mec.biz.dal.dto;
 
 import com.ym.mec.biz.dal.enums.GroupType;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.util.Date;
 
-/**
- * @Author Joburgess
- * @Date 2019/9/19
- */
+@Data
 public class WebCourseHomeworkListDto {
 
     @ApiModelProperty(value = "作业编号",required = false)
@@ -73,171 +71,5 @@ public class WebCourseHomeworkListDto {
 
     private String versionTag;
 
-    public String getVersionTag() {
-        return versionTag;
-    }
-
-    public void setVersionTag(String versionTag) {
-        this.versionTag = versionTag;
-    }
-
-    public Date getExpiryDate() {
-        return expiryDate;
-    }
-
-    public void setExpiryDate(Date expiryDate) {
-        this.expiryDate = expiryDate;
-    }
-
-    public String getMusicGroupName() {
-        return musicGroupName;
-    }
-
-    public void setMusicGroupName(String musicGroupName) {
-        this.musicGroupName = musicGroupName;
-    }
-
-    public String getMusicScoreId() {
-        return musicScoreId;
-    }
-
-    public void setMusicScoreId(String musicScoreId) {
-        this.musicScoreId = musicScoreId;
-    }
-
-    public String getClassDate() {
-        return classDate;
-    }
-
-    public void setClassDate(String classDate) {
-        this.classDate = classDate;
-    }
-
-    public String getClassStartDate() {
-        return classStartDate;
-    }
-
-    public void setClassStartDate(String classStartDate) {
-        this.classStartDate = classStartDate;
-    }
-
-    public String getClassEndDate() {
-        return classEndDate;
-    }
-
-    public void setClassEndDate(String classEndDate) {
-        this.classEndDate = classEndDate;
-    }
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Long getCourseScheduleId() {
-        return courseScheduleId;
-    }
-
-    public void setCourseScheduleId(Long courseScheduleId) {
-        this.courseScheduleId = courseScheduleId;
-    }
-
-    public String getCourseScheduleName() {
-        return courseScheduleName;
-    }
-
-    public void setCourseScheduleName(String courseScheduleName) {
-        this.courseScheduleName = courseScheduleName;
-    }
-
-    public Integer getOrganId() {
-        return organId;
-    }
-
-    public void setOrganId(Integer organId) {
-        this.organId = organId;
-    }
-
-    public String getOrganName() {
-        return organName;
-    }
-
-    public void setOrganName(String organName) {
-        this.organName = organName;
-    }
-
-    public String getGroupId() {
-        return groupId;
-    }
-
-    public void setGroupId(String groupId) {
-        this.groupId = groupId;
-    }
-
-    public String getGroupName() {
-        return groupName;
-    }
-
-    public void setGroupName(String groupName) {
-        this.groupName = groupName;
-    }
-
-    public GroupType getGroupType() {
-        return groupType;
-    }
-
-    public void setGroupType(GroupType groupType) {
-        this.groupType = groupType;
-    }
-
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    public Integer getActualTeacherId() {
-        return actualTeacherId;
-    }
-
-    public void setActualTeacherId(Integer actualTeacherId) {
-        this.actualTeacherId = actualTeacherId;
-    }
-
-    public String getActualTeacherName() {
-        return actualTeacherName;
-    }
-
-    public void setActualTeacherName(String actualTeacherName) {
-        this.actualTeacherName = actualTeacherName;
-    }
-
-    public Integer getCompletedNum() {
-        return completedNum;
-    }
-
-    public void setCompletedNum(Integer completedNum) {
-        this.completedNum = completedNum;
-    }
-
-    public Integer getExpectNum() {
-        return expectNum;
-    }
-
-    public void setExpectNum(Integer expectNum) {
-        this.expectNum = expectNum;
-    }
-
-    public Integer getRepliedNum() {
-        return repliedNum;
-    }
-
-    public void setRepliedNum(Integer repliedNum) {
-        this.repliedNum = repliedNum;
-    }
+    private String memo;
 }

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudTeacherOrder.java

@@ -23,6 +23,9 @@ public class CloudTeacherOrder {
     @ApiModelProperty(value = "学生id")
     private Integer studentId;
 
+    @ApiModelProperty(value = "会员卡ID")
+    private Integer memberRankSettingId;
+
     @ApiModelProperty(value = "时长类型 1-天 2-月 3-年")
     private PeriodEnum type;
 

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CloudTeacherStudent.java

@@ -19,6 +19,9 @@ public class CloudTeacherStudent {
     @ApiModelProperty(value = "团练宝订单Id")
     private Integer cloudTeacherOrderId;
 
+    @ApiModelProperty(value = "会员编号")
+    private Integer memberRankId;
+
     @ApiModelProperty(value = "姓名")
     private String name;
 
@@ -52,6 +55,9 @@ public class CloudTeacherStudent {
     @ApiModelProperty(value = "订单时间")
     private String orderTime;
 
+    @ApiModelProperty(value = "会员名称")
+    private String memberName;
+
     @ApiModelProperty(value = "金额")
     private BigDecimal amount;
 

+ 10 - 173
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseHomework.java

@@ -1,15 +1,14 @@
 package com.ym.mec.biz.dal.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.ym.mec.biz.dal.dto.LessonExaminationSaveDto;
 import com.ym.mec.biz.dal.dto.MusicScoreSubjectDto;
-
 import com.ym.mec.biz.dal.dto.StudentLessonTrainingDetailWrapper;
-import io.swagger.annotations.ApiModelProperty;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.common.entity.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import java.util.Date;
 import java.util.List;
@@ -17,6 +16,7 @@ import java.util.List;
 /**
  * 对应数据库表(course_homework):
  */
+@Data
 public class CourseHomework extends BaseEntity {
 
 	/**  */
@@ -37,6 +37,8 @@ public class CourseHomework extends BaseEntity {
 
 	/** 作业内容 */
 	private String title;
+
+	private String memo;
 	
 	/**  */
 	private java.util.Date createTime;
@@ -51,6 +53,9 @@ public class CourseHomework extends BaseEntity {
 	private String musicGroupId;
 
     private String versionTag;
+
+    @ApiModelProperty(value = "文件过期天数")
+    private Integer fileExpireDay;
 	
 	private MusicGroup musicGroup = new MusicGroup();
 	
@@ -76,174 +81,6 @@ public class CourseHomework extends BaseEntity {
 	@ApiModelProperty(value = "课后评测信息")
 	private LessonExaminationSaveDto lessonExaminationSaveDto;
 
-	public LessonExaminationSaveDto getLessonExaminationSaveDto() {
-		return lessonExaminationSaveDto;
-	}
-
-    public Boolean getPushFlag() {
-        return pushFlag;
-    }
-
-    public void setPushFlag(Boolean pushFlag) {
-        this.pushFlag = pushFlag;
-    }
-
-    public void setLessonExaminationSaveDto(LessonExaminationSaveDto lessonExaminationSaveDto) {
-		this.lessonExaminationSaveDto = lessonExaminationSaveDto;
-	}
-
-	public List<StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail> getStudentLessonTrainingDetails() {
-        return studentLessonTrainingDetails;
-    }
-
-    public void setStudentLessonTrainingDetails(List<StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail> studentLessonTrainingDetails) {
-        this.studentLessonTrainingDetails = studentLessonTrainingDetails;
-    }
-
-    public String getVersionTag() {
-        return versionTag;
-    }
-
-    public void setVersionTag(String versionTag) {
-        this.versionTag = versionTag;
-    }
-
-    public String getTitle() {
-		return title;
-	}
-
-	public void setTitle(String title) {
-		this.title = title;
-	}
-
-	public List<MusicScoreSubjectDto> getMusicScoreSubjectDto() {
-		return musicScoreSubjectDto;
-	}
-
-	public void setMusicScoreSubjectDto(List<MusicScoreSubjectDto> musicScoreSubjectDto) {
-		this.musicScoreSubjectDto = musicScoreSubjectDto;
-	}
-
-	public String getMusicScoreId() {
-		return musicScoreId;
-	}
-
-	public void setMusicScoreId(String musicScoreId) {
-		this.musicScoreId = musicScoreId;
-	}
-
-	public Date getExpiryDate() {
-		return expiryDate;
-	}
-
-	public void setExpiryDate(Date expiryDate) {
-		this.expiryDate = expiryDate;
-	}
-
-	public Integer getCompletedNum() {
-		return completedNum;
-	}
-
-	public void setCompletedNum(Integer completedNum) {
-		this.completedNum = completedNum;
-	}
-
-	public Integer getExpectNum() {
-		return expectNum;
-	}
-
-	public void setExpectNum(Integer expectNum) {
-		this.expectNum = expectNum;
-	}
-
-	public void setId(Long id){
-		this.id = id;
-	}
-	
-	public Long getId(){
-		return this.id;
-	}
-			
-	public GroupType getGroupType() {
-		return groupType;
-	}
-
-	public void setGroupType(GroupType groupType) {
-		this.groupType = groupType;
-	}
-
-	public void setCourseScheduleId(Long courseScheduleId){
-		this.courseScheduleId = courseScheduleId;
-	}
-	
-	public Long getCourseScheduleId(){
-		return this.courseScheduleId;
-	}
-
-	public String getAttachments() {
-		return attachments;
-	}
-
-	public void setAttachments(String attachments) {
-		this.attachments = attachments;
-	}
-
-	public void setContent(String content){
-		this.content = content;
-	}
-	
-	public String getContent(){
-		return this.content;
-	}
-			
-	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 void setMusicGroupId(String musicGroupId){
-		this.musicGroupId = musicGroupId;
-	}
-	
-	public String getMusicGroupId(){
-		return this.musicGroupId;
-	}
-			
-	public void setClassGroupId(Integer classGroupId){
-		this.classGroupId = classGroupId;
-	}
-	
-	public Integer getClassGroupId(){
-		return this.classGroupId;
-	}
-			
-	public MusicGroup getMusicGroup() {
-		return musicGroup;
-	}
-
-	public void setMusicGroup(MusicGroup musicGroup) {
-		this.musicGroup = musicGroup;
-	}
-
-	public ClassGroup getClassGroup() {
-		return classGroup;
-	}
-
-	public void setClassGroup(ClassGroup classGroup) {
-		this.classGroup = classGroup;
-	}
-
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

+ 9 - 249
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ExtracurricularExercises.java

@@ -8,6 +8,7 @@ import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.ImSendTypeEnum;
 import com.ym.mec.common.entity.BaseEntity;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import javax.validation.constraints.NotNull;
@@ -17,6 +18,7 @@ import java.util.List;
 /**
  * 对应数据库表(extracurricular_exercises):
  */
+@Data
 public class ExtracurricularExercises extends BaseEntity {
 
 	/**  */
@@ -49,6 +51,9 @@ public class ExtracurricularExercises extends BaseEntity {
 	/** 标题 */
 	@ApiModelProperty(value="标题")
 	private String title;
+
+	@ApiModelProperty(value = "训练说明",required = false)
+	private String memo;
 	
 	/** 附件地址(多个用逗号分隔) */
 	@ApiModelProperty(value="附件地址(多个用逗号分隔)")
@@ -87,8 +92,11 @@ public class ExtracurricularExercises extends BaseEntity {
 	private int status;
 	
 	private String organName;
+    @ApiModelProperty(value = "文件过期天数")
+    private Integer fileExpireDay;
+
 
-	private ImSendTypeEnum msgType = ImSendTypeEnum.TXT;
+    private ImSendTypeEnum msgType = ImSendTypeEnum.TXT;
 
 	/** 伴奏列表(多个用逗号分隔) */
 	@ApiModelProperty(value="伴奏列表(多个用逗号分隔)")
@@ -114,254 +122,6 @@ public class ExtracurricularExercises extends BaseEntity {
     @ApiModelProperty("新版作业 time:2023-03-31")
     private List<StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail> studentLessonTrainingDetails;
 
-    public Boolean getPushFlag() {
-        return pushFlag;
-    }
-
-    public void setPushFlag(Boolean pushFlag) {
-        this.pushFlag = pushFlag;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public String getVersionTag() {
-        return versionTag;
-    }
-
-    public void setVersionTag(String versionTag) {
-        this.versionTag = versionTag;
-    }
-
-    public String getMusicGroupName() {
-        return musicGroupName;
-    }
-
-    public void setMusicGroupName(String musicGroupName) {
-        this.musicGroupName = musicGroupName;
-    }
-
-    public String getClassGroupName() {
-        return classGroupName;
-    }
-
-    public void setClassGroupName(String classGroupName) {
-        this.classGroupName = classGroupName;
-    }
-
-    public Date getAssignTime() {
-        return assignTime;
-    }
-
-    public void setAssignTime(Date assignTime) {
-        this.assignTime = assignTime;
-    }
-
-    public Integer getClassGroupId() {
-        return classGroupId;
-    }
-
-    public void setClassGroupId(Integer classGroupId) {
-        this.classGroupId = classGroupId;
-    }
-
-    public String getGroupType() {
-        return groupType;
-    }
-
-    public void setGroupType(String groupType) {
-        this.groupType = groupType;
-    }
-
-    public List<StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail> getStudentLessonTrainingDetails() {
-        return studentLessonTrainingDetails;
-    }
-
-    public void setStudentLessonTrainingDetails(List<StudentLessonTrainingDetailWrapper.AddStudentLessonTrainingDetail> studentLessonTrainingDetails) {
-        this.studentLessonTrainingDetails = studentLessonTrainingDetails;
-    }
-
-	public List<MusicScoreSubjectDto> getMusicScoreSubjectDtos() {
-		return musicScoreSubjectDtos;
-	}
-
-	public void setMusicScoreSubjectDtos(List<MusicScoreSubjectDto> musicScoreSubjectDtos) {
-		this.musicScoreSubjectDtos = musicScoreSubjectDtos;
-	}
-
-	public String getMusicScoreName() {
-		return musicScoreName;
-	}
-
-	public void setMusicScoreName(String musicScoreName) {
-		this.musicScoreName = musicScoreName;
-	}
-
-	public String getMusicScoreId() {
-		return musicScoreId;
-	}
-
-	public void setMusicScoreId(String musicScoreId) {
-		this.musicScoreId = musicScoreId;
-	}
-
-	public ImSendTypeEnum getMsgType() {
-		return msgType;
-	}
-
-	public void setMsgType(ImSendTypeEnum msgType) {
-		this.msgType = msgType;
-	}
-
-	public int getStatus() {
-		return status;
-	}
-
-	public void setStatus(int status) {
-		this.status = status;
-	}
-
-	public int getIsReplied() {
-		return isReplied;
-	}
-
-	public void setIsReplied(int isReplied) {
-		this.isReplied = isReplied;
-	}
-
-	public int getIsSubmit() {
-		return isSubmit;
-	}
-
-	public void setIsSubmit(int isSubmit) {
-		this.isSubmit = isSubmit;
-	}
-
-	public void setId(Long id){
-		this.id = id;
-	}
-	
-	public Long getId(){
-		return this.id;
-	}
-			
-	public void setTeacherId(Integer teacherId){
-		this.teacherId = teacherId;
-	}
-	
-	public Integer getTeacherId(){
-		return this.teacherId;
-	}
-			
-	public void setStudentIdList(String studentIdList){
-		this.studentIdList = studentIdList;
-	}
-	
-	public String getStudentIdList(){
-		return this.studentIdList;
-	}
-			
-	public void setBatchNo(String batchNo){
-		this.batchNo = batchNo;
-	}
-	
-	public String getBatchNo(){
-		return this.batchNo;
-	}
-			
-	public void setTitle(String title){
-		this.title = title;
-	}
-	
-	public String getTitle(){
-		return this.title;
-	}
-			
-	public void setAttachments(String attachments){
-		this.attachments = attachments;
-	}
-	
-	public String getAttachments(){
-		return this.attachments;
-	}
-			
-	public void setContent(String content){
-		this.content = content;
-	}
-	
-	public String getContent(){
-		return this.content;
-	}
-			
-	public void setExpireDate(java.util.Date expireDate){
-		this.expireDate = expireDate;
-	}
-	
-	public java.util.Date getExpireDate(){
-		return this.expireDate;
-	}
-			
-	public void setCompletedNum(Integer completedNum){
-		this.completedNum = completedNum;
-	}
-	
-	public Integer getCompletedNum(){
-		return this.completedNum;
-	}
-			
-	public void setExpectNum(Integer expectNum){
-		this.expectNum = expectNum;
-	}
-	
-	public Integer getExpectNum(){
-		return this.expectNum;
-	}
-			
-	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 SysUser getTeacher() {
-		return teacher;
-	}
-
-	public void setTeacher(SysUser teacher) {
-		this.teacher = teacher;
-	}
-
-	public String getOrganName() {
-		return organName;
-	}
-
-	public void setOrganName(String organName) {
-		this.organName = organName;
-	}
-
-	public String getMusicGroupId() {
-		return musicGroupId;
-	}
-
-	public void setMusicGroupId(String musicGroupId) {
-		this.musicGroupId = musicGroupId;
-	}
-
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ExtracurricularExercisesReply.java

@@ -72,6 +72,7 @@ public class ExtracurricularExercisesReply extends BaseEntity {
 	@ApiModelProperty(value = "作业评级",required = true)
 	private StandardEnum standardFlag;
 
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

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

@@ -71,5 +71,9 @@ public class LessonExamination{
 
     @TableField("tenant_id_")
     private Integer tenantId = TenantContextHolder.getTenantId();
+
+    @TableField("file_expire_day_")
+    @ApiModelProperty(value = "文件过期天数")
+    private Integer fileExpireDay;
 }
 

+ 35 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MemberRankCategoryMapper.java

@@ -0,0 +1,35 @@
+package com.ym.mec.biz.dal.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import lombok.Data;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+
+/**
+ * 会员分类权限表
+ * 2024-10-22 14:51:51
+ */
+@Data
+@ApiModel(" MemberRankCategoryMapper-会员分类权限表")
+@TableName("member_rank_category_mapper")
+public class MemberRankCategoryMapper implements Serializable {
+
+	    @TableId(value = "id_", type = IdType.AUTO)
+        private Integer id;
+
+    @ApiModelProperty("分类编号") 
+	@TableField(value = "category_id_")
+    private Integer categoryId;
+
+    @ApiModelProperty("会员编号") 
+	@TableField(value = "rank_id_")
+    private Integer rankId;
+
+}

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů