Browse Source

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

zouxuan 10 months ago
parent
commit
ba54dfe135
93 changed files with 3494 additions and 439 deletions
  1. 10 0
      cms/src/main/java/com/ym/mec/cms/dal/dao/SysUserDao.java
  2. 133 0
      cms/src/main/java/com/ym/mec/cms/dal/entity/Teacher.java
  3. 26 3
      cms/src/main/java/com/ym/mec/cms/service/impl/SysNewsTypeServiceImpl.java
  4. 43 0
      cms/src/main/resources/config/mybatis/SysUserMapper.xml
  5. 1 1
      mec-application/src/main/java/com/ym/mec/config/ResourceServerConfig.java
  6. 28 0
      mec-application/src/main/java/com/ym/mec/student/controller/ImGroupNoticeController.java
  7. 11 1
      mec-application/src/main/java/com/ym/mec/student/controller/LessonCoursewareController.java
  8. 2 2
      mec-application/src/main/java/com/ym/mec/student/controller/SmsCodeController.java
  9. 8 2
      mec-application/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  10. 5 2
      mec-application/src/main/java/com/ym/mec/student/controller/SysMusicScoreCategoriesController.java
  11. 1 2
      mec-application/src/main/java/com/ym/mec/student/controller/SysMusicScoreController.java
  12. 87 0
      mec-application/src/main/java/com/ym/mec/student/controller/TempDirectorTrainingCampController.java
  13. 28 0
      mec-application/src/main/java/com/ym/mec/teacher/controller/ImGroupNoticeController.java
  14. 27 2
      mec-application/src/main/java/com/ym/mec/teacher/controller/LessonCoursewareController.java
  15. 4 1
      mec-application/src/main/java/com/ym/mec/teacher/controller/SysMusicScoreCategoriesController.java
  16. 24 2
      mec-application/src/main/java/com/ym/mec/teacher/controller/SysMusicScoreController.java
  17. 1 1
      mec-application/src/main/java/com/ym/mec/teacher/controller/TeacherCourseScheduleController.java
  18. 12 16
      mec-application/src/main/java/com/ym/mec/web/controller/ClassGroupStudentController.java
  19. 4 26
      mec-application/src/main/java/com/ym/mec/web/controller/MusicSheetApplicationExtendController.java
  20. 45 15
      mec-application/src/main/java/com/ym/mec/web/controller/SysMusicScoreCategoriesController.java
  21. 1 4
      mec-application/src/main/java/com/ym/mec/web/controller/SysMusicScoreController.java
  22. 71 0
      mec-application/src/main/java/com/ym/mec/web/controller/TempDirectorTrainingCampController.java
  23. 138 0
      mec-application/src/main/java/com/ym/mec/web/controller/TempDirectorTrainingCampDetailController.java
  24. 3 4
      mec-application/src/main/java/com/ym/mec/web/controller/education/EduMusicScoreController.java
  25. 8 6
      mec-application/src/main/java/com/ym/mec/web/controller/education/ImGroupNoticeController.java
  26. 3 3
      mec-application/src/main/java/com/ym/mec/web/controller/school/SchoolMusicScoreController.java
  27. 6 6
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/CbsQrCodeScanServiceImpl.java
  28. 5 0
      mec-biz/pom.xml
  29. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupStudentMapperDao.java
  30. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentStudentCourseDetailDao.java
  31. 9 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java
  32. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicScoreAccompanimentDao.java
  33. 0 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicScoreDao.java
  34. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TempDirectorTrainingCampDao.java
  35. 21 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TempDirectorTrainingCampDetailDao.java
  36. 6 33
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ImGroupNoticeDto.java
  37. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PayParamBasicDto.java
  38. 23 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImGroupNotice.java
  39. 43 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysMusicScore.java
  40. 37 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysMusicScoreAccompaniment.java
  41. 10 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Teacher.java
  42. 67 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TempDirectorTrainingCamp.java
  43. 111 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TempDirectorTrainingCampDetail.java
  44. 1 10
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java
  45. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderDetailTypeEnum.java
  46. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderTypeEnum.java
  47. 34 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/im/CK.java
  48. 107 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/im/EClientType.java
  49. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/SysExamSongQueryInfo.java
  50. 137 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/ImGroupNoticeWrapper.java
  51. 11 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/MusicSheetWrapper.java
  52. 73 5
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/StudentWrapper.java
  53. 302 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/TempDirectorTrainingCampDetailWrapper.java
  54. 136 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/TempDirectorTrainingCampWrapper.java
  55. 29 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CbsMusicScoreCategoriesService.java
  56. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupStudentMapperService.java
  57. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ImGroupNoticeService.java
  58. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/service/LessonCoursewareService.java
  59. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SmsCodeService.java
  60. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicScoreAccompanimentService.java
  61. 29 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TempDirectorTrainingCampDetailService.java
  62. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TempDirectorTrainingCampService.java
  63. 200 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CbsMusicScoreCategoriesServiceImpl.java
  64. 6 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CbsMusicSheetServiceImpl.java
  65. 67 22
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java
  66. 180 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupNoticeServiceImpl.java
  67. 14 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/LessonCoursewareServiceImpl.java
  68. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderRepairServiceImpl.java
  69. 4 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrganizationServiceImpl.java
  70. 41 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java
  71. 6 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SmsCodeServiceImpl.java
  72. 7 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java
  73. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  74. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMessageServiceImpl.java
  75. 151 64
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreAccompanimentServiceImpl.java
  76. 9 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreCategoriesServiceImpl.java
  77. 61 78
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreServiceImpl.java
  78. 366 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TempDirectorTrainingCampDetailServiceImpl.java
  79. 144 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TempDirectorTrainingCampServiceImpl.java
  80. 16 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupStudentMapperMapper.xml
  81. 2 2
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  82. 11 6
      mec-biz/src/main/resources/config/mybatis/ImGroupNoticeMapper.xml
  83. 32 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentStudentCourseDetailMapper.xml
  84. 24 25
      mec-biz/src/main/resources/config/mybatis/SysMusicScoreAccompanimentMapper.xml
  85. 38 26
      mec-biz/src/main/resources/config/mybatis/SysMusicScoreMapper.xml
  86. 5 1
      mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  87. 64 0
      mec-biz/src/main/resources/config/mybatis/TempDirectorTrainingCampDetailMapper.xml
  88. 39 0
      mec-biz/src/main/resources/config/mybatis/TempDirectorTrainingCampMapper.xml
  89. 2 2
      mec-im/src/main/java/com/ym/controller/GroupController.java
  90. 1 1
      mec-im/src/main/java/com/ym/controller/PrivateController.java
  91. 1 1
      mec-im/src/main/java/com/ym/pojo/MusicScoreMessage.java
  92. 1 1
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/YeepayPaymentService.java
  93. 2 2
      pom.xml

+ 10 - 0
cms/src/main/java/com/ym/mec/cms/dal/dao/SysUserDao.java

@@ -0,0 +1,10 @@
+package com.ym.mec.cms.dal.dao;
+
+import com.ym.mec.cms.dal.entity.Teacher;
+import org.apache.ibatis.annotations.Param;
+
+public interface SysUserDao {
+
+
+    Teacher getTeacherById(@Param("userId") Integer userId);
+}

+ 133 - 0
cms/src/main/java/com/ym/mec/cms/dal/entity/Teacher.java

@@ -0,0 +1,133 @@
+package com.ym.mec.cms.dal.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 对应数据库表(teacher):
+ */
+@Data
+public class Teacher {
+
+	private Integer id;
+
+	/** 职务类型(指导老师、教务老师、教学主管) */
+	@ApiModelProperty(value = "职务类型(指导老师 ADVISER、教务老师 ACADEMIC、教学主管 TEACHING)", required = false)
+	private String jobType;
+
+	/** 工作性质(兼职、全职) */
+	@ApiModelProperty(value = "工作性质(兼职 PART_JOB、全职FULL_JOB)", required = false)
+	private String jobNature;
+
+	/** 是否试用期 */
+	@ApiModelProperty(value = "是否试用期1是,0否", required = false)
+	private String isProbationPeriod;
+
+	/** 学历 */
+	@ApiModelProperty(value = "学历", required = false)
+	private String educationBackground;
+
+	/** 毕业学校 */
+	@ApiModelProperty(value = "毕业学校", required = false)
+	private String graduateSchool;
+
+	/** 技术职称 */
+	@ApiModelProperty(value = "技术职称", required = false)
+	private String technicalTitles;
+
+
+	/** 所属分部名称 */
+	@ApiModelProperty(value = "教师所属分部编号", required = false)
+	private Integer teacherOrganId;
+
+	/** 工作单位 */
+	@ApiModelProperty(value = "工作单位", required = false)
+	private String workUnit;
+
+	/** 专业技能(支持多个,用|分隔),对应科目表编号 */
+	@ApiModelProperty(value = "专业技能(支持多个,用逗号分隔),对应科目表编号", required = false)
+	private String subjectId;
+
+	/** 入职时间 */
+	@ApiModelProperty(value = "入职时间", required = false)
+	private Date entryDate;
+
+	/** 证件类型 */
+	@ApiModelProperty(value = "证件类型", required = false)
+	private String certificateType;
+
+	/** 证件号码 */
+	@ApiModelProperty(value = "证件号码", required = false)
+	private String certificateNum;
+
+	/** 流动范围(多个用|分开) */
+	@ApiModelProperty(value = "流动范围(多个用逗号分开)", required = false)
+	private String flowOrganRange;
+
+	/** 流动范围(多个用|分开) */
+	@ApiModelProperty(value = "流动范围编号", required = false)
+	private String flowOrganRangeId;
+
+	@ApiModelProperty(value = "老师介绍", required = false)
+	private String introduction;
+
+	@ApiModelProperty(value = "VIP课数量", required = false)
+	private Integer vipNum;
+
+	@ApiModelProperty(value = "试听课数量", required = false)
+	private Integer demoNum;
+	
+	@ApiModelProperty(value = "离职时间", required = false)
+	private Date demissionDate;
+	
+	@ApiModelProperty(value = "转正时间", required = false)
+	private Date formalStaffDate;
+	
+	@ApiModelProperty(value = "是否支持课程奖励规则活动", required = false)
+	private Boolean isSupportCourseScheduleRewardsRules;
+	
+	@ApiModelProperty(value = "是否支持额外的网管课", required = false)
+	private Boolean isSupportExtraPracticeLesson;
+	
+	@ApiModelProperty(value = "身份证正面照", required = false)
+	private String idcardFrontImg;
+	
+	@ApiModelProperty(value = "身份证反面照", required = false)
+	private String idcardBackImg;
+	
+	@ApiModelProperty(value = "手持身份证照", required = false)
+	private String idcardHandImg;
+
+	private Integer lectureNum;
+	
+	private String memo;
+	
+	private String contractUrl;
+
+	private BigDecimal serviceIndex;
+
+	@ApiModelProperty(value = "是否结算课酬")
+	private Boolean isSettlementSalary = true;
+
+	@ApiModelProperty(value = "社保部门id",required = false)
+	private Integer deptId;
+
+	@ApiModelProperty(value = "部门ids",required = false)
+	private String deptIds;
+
+	@ApiModelProperty(value = "岗位管理部门",required = false)
+	private String postDeptIds;
+
+	@ApiModelProperty(value = "云教练限制")
+	private Boolean coursewareLimit;
+
+    @ApiModelProperty("IM绑定设备")
+    private String imDeviceId;
+
+	@ApiModelProperty(value = "是否可以查看云课堂", required = false)
+	private Boolean coursewareFlag = true;
+
+}

+ 26 - 3
cms/src/main/java/com/ym/mec/cms/service/impl/SysNewsTypeServiceImpl.java

@@ -1,11 +1,14 @@
 package com.ym.mec.cms.service.impl;
 
+import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.cms.dal.dao.SysConfigDao;
 import com.ym.mec.cms.dal.dao.SysNewsInformationDao;
 import com.ym.mec.cms.dal.dao.SysNewsTypeDao;
+import com.ym.mec.cms.dal.dao.SysUserDao;
 import com.ym.mec.cms.dal.entity.SysNewsInformation;
 import com.ym.mec.cms.dal.entity.SysNewsType;
 import com.ym.mec.cms.dal.entity.SysNewsTypeTree;
+import com.ym.mec.cms.dal.entity.Teacher;
 import com.ym.mec.cms.service.SysNewsTypeService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
@@ -34,6 +37,8 @@ public class SysNewsTypeServiceImpl extends BaseServiceImpl<Integer, SysNewsType
     private WebFeignService webFeignService;
     @Resource
     private SysConfigDao sysConfigDao;
+    @Resource
+    private SysUserDao sysUserDao;
 
     @Override
     public BaseDAO<Integer, SysNewsType> getDAO() {
@@ -65,13 +70,31 @@ public class SysNewsTypeServiceImpl extends BaseServiceImpl<Integer, SysNewsType
 
     public List<SysNewsType> listWithTree(Integer id, String memo,Integer userId,String organIds) {
         SysNewsType newsType = sysNewsTypeDao.get(id);
-        //获取需要排除的用户编号
-        String excludeUserIds = sysConfigDao.findConfigValue("exclude_user_ids");
+        //老师端,按钮配置
         String excludeFunctionIds = null;
+        if(id == 23){
+            Teacher teacher = sysUserDao.getTeacherById(userId);
+            if(teacher != null){
+                //是否禁用云课堂
+                if(teacher.getCoursewareFlag()){
+                    excludeFunctionIds = "1925";
+                }
+                //是否禁用云教练
+                if(teacher.getCoursewareLimit()){
+                    if(StringUtils.isNotEmpty(excludeFunctionIds)){
+                        excludeFunctionIds += ",1374";
+                    }else {
+                        excludeFunctionIds = "1374";
+                    }
+                }
+            }
+        }
+        /*//获取需要排除的用户编号
+        String excludeUserIds = sysConfigDao.findConfigValue("exclude_user_ids");
         if(StringUtils.isNotEmpty(excludeUserIds) && excludeUserIds.contains(userId.toString())){
             //获取需要排除的功能点编号
             excludeFunctionIds = sysConfigDao.findConfigValue("exclude_function_ids");
-        }
+        }*/
         List<SysNewsType> all = sysNewsTypeDao.findAll(null);
         String startTime = DateUtil.format(DateUtil.getFirstDayOfMonth(DateUtil.addMonths(new Date(), -1)),DateUtil.ISO_EXPANDED_DATE_FORMAT);
         for (SysNewsType e : all) {

+ 43 - 0
cms/src/main/resources/config/mybatis/SysUserMapper.xml

@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!-- 这个文件是自动生成的。 不要修改此文件。所有改动将在下次重新自动生成时丢失。 -->
+<mapper namespace="com.ym.mec.cms.dal.dao.SysUserDao">
+
+    <resultMap type="com.ym.mec.cms.dal.entity.Teacher" id="Teacher">
+        <result column="id_" property="id"/>
+        <result column="teacher_organ_id_" property="teacherOrganId"/>
+        <result column="job_type_" property="jobType"/>
+        <result column="job_nature_" property="jobNature"/>
+        <result column="is_probation_period_" property="isProbationPeriod"/>
+        <result column="education_background_" property="educationBackground"/>
+        <result column="graduate_school_" property="graduateSchool"/>
+        <result column="technical_titles_" property="technicalTitles"/>
+        <result column="work_unit_" property="workUnit"/>
+        <result column="subject_id_" property="subjectId"/>
+        <result column="entry_date_" property="entryDate"/>
+        <result column="demission_date_" property="demissionDate"/>
+        <result column="formal_staff_date_" property="formalStaffDate"/>
+        <result column="certificate_type_" property="certificateType"/>
+        <result column="certificate_num_" property="certificateNum"/>
+        <result column="flow_organ_range_" property="flowOrganRange"/>
+        <result column="introduction_" property="introduction"/>
+        <result column="is_support_extra_practice_lesson_" property="isSupportExtraPracticeLesson"/>
+        <result column="is_support_course_schedule_rewards_rules_" property="isSupportCourseScheduleRewardsRules"/>
+        <result column="idcard_front_img_" property="idcardFrontImg"/>
+        <result column="idcard_back_img_" property="idcardBackImg"/>
+        <result column="idcard_hand_img_" property="idcardHandImg"/>
+        <result column="memo_" property="memo"/>
+        <result column="lecture_num_" property="lectureNum"/>
+        <result column="dept_id_" property="deptId"/>
+        <result column="dept_ids_" property="deptIds"/>
+        <result column="post_dept_ids_" property="postDeptIds"/>
+        <result column="is_settlement_salary_" property="isSettlementSalary"/>
+        <result column="contract_url_" property="contractUrl"/>
+        <result column="courseware_limit_" property="coursewareLimit"/>
+        <result column="courseware_flag_" property="coursewareFlag"/>
+    </resultMap>
+
+    <select id="getTeacherById" resultMap="Teacher">
+        SELECT * FROM teacher WHERE id_ = #{userId}
+    </select>
+</mapper>

+ 1 - 1
mec-application/src/main/java/com/ym/mec/config/ResourceServerConfig.java

@@ -37,7 +37,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
                         "/*/v2/api-docs", "/*/code/*",
 
                 //student
-                        "/api-student/wechat/*", "/api-student/student/registering", "/api-student/register/*", "/api-student/studentOrder/**", "/api-student/musicGroup/getSubjectGoodsAndInfo",
+                        "/api-student/wechat/*","/api-student/tempDirectorTrainingCamp/*", "/api-student/student/registering", "/api-student/register/*", "/api-student/studentOrder/**", "/api-student/musicGroup/getSubjectGoodsAndInfo",
                         "/api-student/musicGroup/getMusicGroupStatus", "/api-student/musicGroup/getOrderStatus","/api-student/sysCouponCode/queryPage",
                         "/api-student/musicGroup/pay", "/api-student/musicGroup/rePay", "/api-student/studentManage/queryStudentPer",
                         "/api-student/sporadicChargeInfo/get", "/api-student/sporadicChargeInfo/sporadicPay", "/api-student/repair/getRepairInfo", "/api-student/repair/payRepair",

+ 28 - 0
mec-application/src/main/java/com/ym/mec/student/controller/ImGroupNoticeController.java

@@ -0,0 +1,28 @@
+package com.ym.mec.student.controller;
+
+import com.ym.mec.biz.dal.dto.ImGroupNoticeDto;
+import com.ym.mec.biz.service.ImGroupNoticeService;
+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.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RequestMapping("${app-config.url.student:}/imGroupNotice")
+@Api(tags = "即时通讯群公告")
+@RestController
+public class ImGroupNoticeController extends BaseController {
+
+    @Resource
+    private ImGroupNoticeService imGroupNoticeService;
+
+    @ApiOperation(value = "获取群公告")
+    @RequestMapping("/getNotice")
+    public HttpResponseResult<ImGroupNoticeDto> getNotice(Long id) {
+        return succeed(imGroupNoticeService.getNotice(id));
+    }
+
+}

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

@@ -6,9 +6,12 @@ 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.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.entity.Subject;
 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.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -34,6 +37,10 @@ public class LessonCoursewareController extends BaseController {
 	private LessonCoursewareService lessonCoursewareService;
 	@Resource
 	private SysUserService sysUserService;
+	@Resource
+	private OrganizationService organizationService;
+	@Resource
+	private CbsMusicScoreCategoriesService cbsMusicScoreCategoriesService;
 
 	@ApiOperation(value = "分页查询已添加的课件")
 	@PostMapping("/queryLessonCourseware")
@@ -65,7 +72,10 @@ public class LessonCoursewareController extends BaseController {
 	@ApiOperation(value = "获取课程详情")
 	@GetMapping("/getLessonCourseDetail/{id}")
 	public HttpResponseResult<CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail> getLessonCourseDetail(@PathVariable("id") Long id){
-		return succeed(lessonCoursewareService.getLessonCourseDetail(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));
 	}
 
 	@ApiOperation(value = "获取课件关联的声部列表")

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

@@ -44,7 +44,7 @@ public class SmsCodeController extends BaseController {
     @ApiOperation(value = "发送登录短信验证码")
     @ApiImplicitParams({ @ApiImplicitParam(name = "mobile", value = "手机号", required = true, dataType = "String"),
             @ApiImplicitParam(name = "code", value = "验证码", required = true, dataType = "String"),
-            @ApiImplicitParam(name = "type", value = "验证码类型(register  login)", required = true, dataType = "String")})
+            @ApiImplicitParam(name = "type", value = "验证码类型(register  login  director)", required = true, dataType = "String")})
     @PostMapping(value = "/sendSmsCode")
     public HttpResponseResult<Object> sendLoginVerifyCode1(String mobile, String code,String type) throws Exception {
         if(StringUtils.isEmpty(mobile) || StringUtils.isEmpty(code)){
@@ -54,7 +54,7 @@ public class SmsCodeController extends BaseController {
         RBucket<String> bucket = redissonClient.getBucket(redisKey);
         if(bucket.isExists()){
             if(StringUtils.equalsIgnoreCase(bucket.get(),code)){
-                smsCodeService.sendValidCode(mobile,"STUDENT");
+                smsCodeService.sendValidCode(mobile,"STUDENT",StringUtils.isEmpty(type) ? MessageTypeEnum.SMS_VERIFY_CODE_LOGIN.name() : type);
                 return succeed();
             }
         }

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

@@ -112,6 +112,8 @@ public class StudentOrderController extends BaseController {
     private TempBuyDoubleElevenUserLogDao tempBuyDoubleElevenUserLogDao;
     @Autowired
     private HfMerchantConfigService hfMerchantConfigService;
+    @Autowired
+    private TempDirectorTrainingCampDetailService tempDirectorTrainingCampDetailService;
 
     @Value("${spring.profiles.active:dev}")
     private String profiles;
@@ -351,8 +353,12 @@ public class StudentOrderController extends BaseController {
             }
         } else if (orderByOrderNo.getGroupType().equals(GroupType.SPORADIC)) {
             if (Objects.nonNull(orderByOrderNo.getMusicGroupId())) {
-                List<SporadicChargeInfo> info = sporadicChargeInfoService.findByIds(orderByOrderNo.getMusicGroupId());
-                orderDetail.put("detail", info);
+                if(orderByOrderNo.getType().equals(OrderTypeEnum.DIRECTOR_TRAINING_CAMP)){
+                    orderDetail.put("detail", tempDirectorTrainingCampDetailService.detail(Integer.parseInt(orderByOrderNo.getMusicGroupId())));
+                }else {
+                    List<SporadicChargeInfo> info = sporadicChargeInfoService.findByIds(orderByOrderNo.getMusicGroupId());
+                    orderDetail.put("detail", info);
+                }
             }
             if (orderByOrderNo.getType().equals(OrderTypeEnum.DOUBLE_ELEVEN2020)) {
                 LuckDrawCount luckDrawCount = luckDrawCountService.get(orderByOrderNo.getUserId().longValue());

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

@@ -3,6 +3,7 @@ package com.ym.mec.student.controller;
 import com.ym.mec.auth.api.dto.MusicScoreQueryInfo;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
+import com.ym.mec.biz.service.CbsMusicScoreCategoriesService;
 import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.biz.service.SysMusicScoreCategoriesService;
 import com.ym.mec.biz.service.SysUserService;
@@ -21,6 +22,8 @@ import javax.annotation.Resource;
 public class SysMusicScoreCategoriesController extends BaseController {
 
     @Resource
+    private CbsMusicScoreCategoriesService cbsMusicScoreCategoriesService;
+    @Resource
     private SysMusicScoreCategoriesService sysMusicScoreCategoriesService;
     @Resource
     private SysUserService sysUserService;
@@ -39,7 +42,7 @@ public class SysMusicScoreCategoriesController extends BaseController {
     public Object queryTree(MusicScoreQueryInfo queryInfo) {
         SysUser sysUser = sysUserService.getUser();
         String teachingMaterialIds = organizationService.getTeachingMaterialIds(sysUser.getOrganId().toString(),sysUser.getTenantId());
-        return succeed(sysMusicScoreCategoriesService.queryCategoriesTreeList(teachingMaterialIds, queryInfo.getEnable()));
+        return succeed(cbsMusicScoreCategoriesService.queryCategoriesTreeList(teachingMaterialIds, queryInfo.getEnable()));
     }
 
     @ApiOperation(value = "树状列表")
@@ -49,7 +52,7 @@ public class SysMusicScoreCategoriesController extends BaseController {
         SysUser sysUser = sysUserService.getUser();
         String teachingMaterialIds = organizationService.getTeachingMaterialIds(sysUser.getOrganId().toString(),sysUser.getTenantId());
         if(teachingMaterialIds.contains(queryInfo.getParentId().toString())){
-            return succeed(sysMusicScoreCategoriesService.queryTree(queryInfo));
+            return succeed(cbsMusicScoreCategoriesService.queryTree(queryInfo));
         }
         return succeed();
     }

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

@@ -6,7 +6,6 @@ import com.ym.mec.biz.service.SysMusicScoreService;
 import com.ym.mec.common.controller.BaseController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -25,7 +24,7 @@ public class SysMusicScoreController extends BaseController {
     @GetMapping("/queryPage2")
     public Object queryPage2(SysExamSongQueryInfo queryInfo) {
         queryInfo.setType("COMMON");
-        queryInfo.setShowFlag(1);
+        queryInfo.setClientFlag(true);
         queryInfo.setClientType(ClientTypeEnum.SMART_PRACTICE);
         return succeed(sysMusicScoreService.queryMusicScorePageInfo(queryInfo));
     }

+ 87 - 0
mec-application/src/main/java/com/ym/mec/student/controller/TempDirectorTrainingCampController.java

@@ -0,0 +1,87 @@
+package com.ym.mec.student.controller;
+
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.entity.TempDirectorTrainingCamp;
+import com.ym.mec.biz.dal.entity.TempDirectorTrainingCampDetail;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.OrderTypeEnum;
+import com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampDetailWrapper;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
+import com.ym.mec.biz.service.TempDirectorTrainingCampDetailService;
+import com.ym.mec.biz.service.TempDirectorTrainingCampService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.exception.BizException;
+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.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import java.util.List;
+
+@Api(tags = "乐队指导训练营活动")
+@RestController
+@RequestMapping("${app-config.url.student:}/tempDirectorTrainingCamp")
+public class TempDirectorTrainingCampController extends BaseController {
+
+    @Resource
+    private TempDirectorTrainingCampService tempDirectorTrainingCampService;
+    @Resource
+    private TempDirectorTrainingCampDetailService tempDirectorTrainingCampDetailService;
+    @Resource
+    private StudentPaymentOrderService studentPaymentOrderService;
+
+    @ApiOperation(value="获取训练营详情")
+    @GetMapping(value = "/getDetail")
+    public HttpResponseResult<TempDirectorTrainingCamp> getDetail(Integer campId){
+        return succeed(tempDirectorTrainingCampService.getById(campId));
+    }
+
+    @ApiOperation(value="根据身份证号、手机号获取用户基本信息")
+    @PostMapping(value = "/getUserDetail")
+    public HttpResponseResult<TempDirectorTrainingCampDetail> getUserDetail(@RequestBody TempDirectorTrainingCampDetailWrapper.UserDetail userDetail){
+        if(userDetail.getTempDirectorTrainingCampId() == null || (StringUtils.isEmpty(userDetail.getCardNo()) && StringUtils.isEmpty(userDetail.getMobile()))){
+            throw new BizException("参数校验失败");
+        }
+        TempDirectorTrainingCampDetail one = tempDirectorTrainingCampDetailService.lambdaQuery()
+                .eq(TempDirectorTrainingCampDetail::getTempDirectorTrainingCampId,userDetail.getTempDirectorTrainingCampId())
+                .eq(StringUtils.isNotEmpty(userDetail.getCardNo()), TempDirectorTrainingCampDetail::getCardNo, userDetail.getCardNo())
+                .eq(StringUtils.isNotEmpty(userDetail.getMobile()), TempDirectorTrainingCampDetail::getMobile, userDetail.getMobile()).last("LIMIT 1").one();
+        return succeed(one);
+    }
+
+    @ApiOperation(value="训练营报名")
+    @PostMapping(value = "/applyCamp")
+    public HttpResponseResult<TempDirectorTrainingCampDetailWrapper.ApplyCampResult> applyCamp(@Valid @RequestBody TempDirectorTrainingCampDetailWrapper.ApplyCamp applyCamp){
+        return succeed(tempDirectorTrainingCampDetailService.applyCamp(applyCamp));
+    }
+
+    @ApiOperation(value = "训练营报名支付")
+    @PostMapping("/pay")
+    public HttpResponseResult pay(@RequestBody TempDirectorTrainingCampDetailWrapper.PayDto payDto) throws Exception {
+        return tempDirectorTrainingCampDetailService.pay(payDto);
+    }
+
+    @ApiOperation(value="获取支付详情")
+    @GetMapping(value = "/getPayDetail")
+    public HttpResponseResult<TempDirectorTrainingCampDetailWrapper.UserPayDetail> getPayDetail(Integer campId){
+        return succeed(tempDirectorTrainingCampDetailService.detail(campId));
+    }
+
+    @ApiOperation(value="是否有待支付的订单")
+    @GetMapping(value = "/hasUnpaidOrder")
+    public HttpResponseResult<Boolean> hasUnpaidOrder(Integer campId){
+        TempDirectorTrainingCampDetail campDetail = tempDirectorTrainingCampDetailService.getById(campId);
+        List<StudentPaymentOrder> studentPaymentOrders = studentPaymentOrderService.queryByCondition(GroupType.SPORADIC,
+                campId.toString(),
+                campDetail.getUserId(),
+                DealStatusEnum.ING,
+                OrderTypeEnum.DIRECTOR_TRAINING_CAMP);
+        return succeed(CollectionUtils.isNotEmpty(studentPaymentOrders));
+    }
+}
+

+ 28 - 0
mec-application/src/main/java/com/ym/mec/teacher/controller/ImGroupNoticeController.java

@@ -0,0 +1,28 @@
+package com.ym.mec.teacher.controller;
+
+import com.ym.mec.biz.dal.dto.ImGroupNoticeDto;
+import com.ym.mec.biz.service.ImGroupNoticeService;
+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.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RequestMapping("${app-config.url.teacher:}/imGroupNotice")
+@Api(tags = "即时通讯群公告")
+@RestController
+public class ImGroupNoticeController extends BaseController {
+
+    @Resource
+    private ImGroupNoticeService imGroupNoticeService;
+
+    @ApiOperation(value = "获取群公告")
+    @RequestMapping("/getNotice")
+    public HttpResponseResult<ImGroupNoticeDto> getNotice(Long id) {
+        return succeed(imGroupNoticeService.getNotice(id));
+    }
+
+}

+ 27 - 2
mec-application/src/main/java/com/ym/mec/teacher/controller/LessonCoursewareController.java

@@ -6,12 +6,18 @@ 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.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.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.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;
@@ -34,12 +40,28 @@ public class LessonCoursewareController extends BaseController {
 	private SysUserService sysUserService;
 	@Resource
 	private LessonCoursewareService lessonCoursewareService;
+	@Resource
+	private OrganizationService organizationService;
+	@Resource
+	private CbsMusicScoreCategoriesService cbsMusicScoreCategoriesService;
+	@Resource
+	private TeacherDao teacherDao;
 
 	@ApiOperation(value = "分页查询已添加的课件")
 	@PostMapping("/queryLessonCourseware")
 	public HttpResponseResult<PageInfo<LessonCoursewareWrapper.LessonCoursewareDto>> queryLessonCourseware(@RequestBody LessonCoursewareWrapper.LessonCoursewareQuery query){
+		//判断用户是否可以访问云练习
+		Integer userId = sysUserService.getUserId();
+		Teacher teacher = teacherDao.get(userId);
+		if (teacher == null) {
+			throw new BizException("老师信息不存在");
+		}
+		//用户是否可以使用云课堂
+		if(teacher.getCoursewareFlag()){
+			throw new BizException("您没有权限使用云课堂");
+		}
 		query.setEnable(true);
-		query.setTeacherId(sysUserService.getUserId());
+		query.setTeacherId(userId);
 		IPage<LessonCoursewareWrapper.LessonCoursewareDto> pages = lessonCoursewareService.selectPage(QueryInfo.getPage(query), query);
 		return succeed(PageUtil.pageInfo(pages));
 	}
@@ -65,7 +87,10 @@ public class LessonCoursewareController extends BaseController {
 	@ApiOperation(value = "获取课程详情")
 	@GetMapping("/getLessonCourseDetail/{id}")
 	public HttpResponseResult<CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail> getLessonCourseDetail(@PathVariable("id") Long id){
-		return succeed(lessonCoursewareService.getLessonCourseDetail(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));
 	}
 
 	@ApiOperation(value = "获取课件关联的声部列表")

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

@@ -5,6 +5,7 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
+import com.ym.mec.biz.service.CbsMusicScoreCategoriesService;
 import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.biz.service.SysMusicScoreCategoriesService;
 import com.ym.mec.biz.service.SysUserService;
@@ -27,6 +28,8 @@ public class SysMusicScoreCategoriesController extends BaseController {
     @Resource
     private SysMusicScoreCategoriesService sysMusicScoreCategoriesService;
     @Resource
+    private CbsMusicScoreCategoriesService cbsMusicScoreCategoriesService;
+    @Resource
     private SysUserService sysUserService;
     @Resource
     private OrganizationService organizationService;
@@ -54,7 +57,7 @@ public class SysMusicScoreCategoriesController extends BaseController {
             organId = organId + "," + teacher.getFlowOrganRange();
         }
         String teachingMaterialIds = organizationService.getTeachingMaterialIds(organId,sysUser.getTenantId());
-        return succeed(sysMusicScoreCategoriesService.queryCategoriesTreeList(teachingMaterialIds, queryInfo.getEnable()));
+        return succeed(cbsMusicScoreCategoriesService.queryCategoriesTreeList(teachingMaterialIds, queryInfo.getEnable()));
     }
 
     @ApiOperation(value = "获取分类详情")

+ 24 - 2
mec-application/src/main/java/com/ym/mec/teacher/controller/SysMusicScoreController.java

@@ -1,9 +1,17 @@
 package com.ym.mec.teacher.controller;
 
+import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.entity.SysMusicScore;
+import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.enums.ClientTypeEnum;
 import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
 import com.ym.mec.biz.service.SysMusicScoreService;
+import com.ym.mec.biz.service.SysUserService;
+import com.ym.mec.biz.service.TeacherService;
 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.web.bind.annotation.GetMapping;
@@ -19,12 +27,26 @@ public class SysMusicScoreController extends BaseController {
 
     @Resource
     private SysMusicScoreService sysMusicScoreService;
+    @Resource
+    private TeacherDao teacherDao;
+    @Resource
+    private SysUserService sysUserService;
 
     @ApiOperation(value = "分页查询")
     @GetMapping("/queryPage2")
-    public Object queryPage2(SysExamSongQueryInfo queryInfo) {
+    public HttpResponseResult<PageInfo<SysMusicScore>> queryPage2(SysExamSongQueryInfo queryInfo) {
+        //判断用户是否可以访问云练习
+        Integer userId = sysUserService.getUserId();
+        Teacher teacher = teacherDao.get(userId);
+        if (teacher == null) {
+            throw new BizException("老师信息不存在");
+        }
+        //是否限制用户使用云教练
+        if(teacher.getCoursewareLimit()){
+            throw new BizException("您没有权限使用云练习");
+        }
         queryInfo.setType("COMMON");
-        queryInfo.setShowFlag(1);
+        queryInfo.setClientFlag(true);
         queryInfo.setClientType(ClientTypeEnum.SMART_PRACTICE);
         return succeed(sysMusicScoreService.queryMusicScorePageInfo(queryInfo));
     }

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

@@ -137,7 +137,7 @@ public class TeacherCourseScheduleController extends BaseController {
     @PostMapping("/getRecentCourseSchedule")
     public HttpResponseResult<CourseScheduleDto> getRecentCourseSchedule(Long courseId){
         CourseScheduleDto courseScheduleDto = scheduleService.getRecentCourseSchedule(sysUserService.getUserId(), courseId);
-        if(courseScheduleDto.getTeachMode() == TeachModeEnum.OFFLINE && courseScheduleDto.getStatus() != CourseStatusEnum.UNDERWAY
+        if(courseScheduleDto != null && courseScheduleDto.getTeachMode() == TeachModeEnum.OFFLINE && courseScheduleDto.getStatus() != CourseStatusEnum.UNDERWAY
                 && StringUtils.isNotEmpty(courseScheduleDto.getCoursewareDetailId())){
             //获取课件详情列表
             R<CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail> voR = coursewareFeignService.lessonCoursewareDetailDetail(Long.parseLong(courseScheduleDto.getCoursewareDetailId()));

+ 12 - 16
mec-application/src/main/java/com/ym/mec/web/controller/ClassGroupStudentController.java

@@ -1,7 +1,9 @@
 package com.ym.mec.web.controller;
 
+import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
 import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.wrapper.StudentWrapper;
 import com.ym.mec.biz.service.ClassGroupStudentMapperService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -10,18 +12,12 @@ import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 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.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
 import java.io.IOException;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Objects;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @RequestMapping("${app-config.url.web:}/classGroupStudent")
@@ -29,7 +25,7 @@ import java.util.stream.Collectors;
 @RestController
 public class ClassGroupStudentController extends BaseController {
 
-    @Autowired
+    @Resource
     private ClassGroupStudentMapperService classGroupStudentMapperService;
 
 
@@ -38,7 +34,7 @@ public class ClassGroupStudentController extends BaseController {
     @PreAuthorize("@pcs.hasPermissions('classGroupStudent/del')")
     @ApiImplicitParams({@ApiImplicitParam(name = "userId", value = "用户id", required = true, dataType = "int"),
             @ApiImplicitParam(name = "classGroupId", value = "班级id", required = true, dataType = "int")})
-    public HttpResponseResult del(Integer userId, Integer classGroupId) throws Exception {
+    public HttpResponseResult<Boolean> del(Integer userId, Integer classGroupId) throws Exception {
         return succeed(classGroupStudentMapperService.delClassGroupStudent(userId, classGroupId,false));
     }
 
@@ -46,8 +42,8 @@ public class ClassGroupStudentController extends BaseController {
     @PostMapping("/findAllStudent")
     @PreAuthorize("@pcs.hasPermissions('classGroupStudent/findAllStudent')")
     @ApiImplicitParams({@ApiImplicitParam(name = "classGroupId", value = "班级id", required = true, dataType = "int")})
-    public HttpResponseResult findAllStudent(Integer classGroupId) throws Exception {
-        return succeed(classGroupStudentMapperService.findClassStudentList(classGroupId, ClassGroupStudentStatusEnum.NORMAL));
+    public HttpResponseResult<List<StudentWrapper.ClassStudentDto>> findAllStudent(@RequestBody StudentWrapper.ClassStudentQuery query) throws Exception {
+        return succeed(classGroupStudentMapperService.findAllStudent(query));
     }
 
     @ApiOperation(value = "调整班级(小班课)")
@@ -58,7 +54,7 @@ public class ClassGroupStudentController extends BaseController {
             @ApiImplicitParam(name = "oldClassGroupId", value = "原班级id", required = true, dataType = "int"),
             @ApiImplicitParam(name = "classGroupId", value = "新班级id", required = true, dataType = "int")
     })
-    public HttpResponseResult adjustClassGroup(Integer userId, Integer oldClassGroupId, Integer classGroupId) throws Exception {
+    public HttpResponseResult<Boolean> adjustClassGroup(Integer userId, Integer oldClassGroupId, Integer classGroupId) throws Exception {
         return succeed(classGroupStudentMapperService.adjustClassGroup(userId, oldClassGroupId, classGroupId));
     }
 
@@ -70,7 +66,7 @@ public class ClassGroupStudentController extends BaseController {
             @ApiImplicitParam(name = "classGroupId", value = "小课班班级id", required = true, dataType = "int"),
             @ApiImplicitParam(name = "userIdsStr", value = "学生UserId,逗号分隔", required = true, dataType = "String")
     })
-    public HttpResponseResult addStudents(Integer classGroupId, String userIdsStr) throws Exception {
+    public HttpResponseResult<Boolean> addStudents(Integer classGroupId, String userIdsStr) throws Exception {
         return succeed(classGroupStudentMapperService.addStudents(classGroupId, userIdsStr, GroupType.MUSIC));
     }
 
@@ -89,7 +85,7 @@ public class ClassGroupStudentController extends BaseController {
     @ApiOperation(value = "修改班级学员")
     @PostMapping("/updateClassGroupStudents")
     @PreAuthorize("@pcs.hasPermissions('classGroupStudent/updateClassGroupStudents')")
-    public HttpResponseResult updateClassGroupStudents(Long classGroupId, String studentIds){
+    public HttpResponseResult<Object> updateClassGroupStudents(Long classGroupId, String studentIds){
         if(Objects.isNull(classGroupId)){
             return failed("请指定班级");
         }

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

@@ -9,7 +9,6 @@ import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetApplicationExtendCli
 import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetCategoryWrapper;
 import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetExtendWrapper;
 import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
-import com.dayaedu.cbs.openfeign.wrapper.musicInstrument.CbsMusicalInstrumentWrapper;
 import com.microsvc.toolkit.common.response.paging.PageInfo;
 import com.microsvc.toolkit.common.response.template.R;
 import com.microsvc.toolkit.common.webportal.exception.BizException;
@@ -20,7 +19,6 @@ import io.swagger.annotations.Api;
 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.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -29,7 +27,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -62,15 +63,6 @@ public class MusicSheetApplicationExtendController {
             if (CollectionUtils.isEmpty(rows)) {
                 return R.from(PageUtil.pageInfo(info, new ArrayList<>()));
             }
-            /*String instrumentIds = rows.stream().map(CbsMusicSheetWrapper.MusicSheet::getMusicalInstrumentIds).filter(StringUtils::isNotEmpty).collect(Collectors.joining(","));
-            //获取乐器名称
-            Map<Integer,CbsMusicalInstrumentWrapper.MusicalInstrumentQueryDto> musicalInstrumentQueryMap = new HashMap<>();
-            if(StringUtils.isNotEmpty(instrumentIds)){
-                List<CbsMusicalInstrumentWrapper.MusicalInstrumentQueryDto> musicalInstrumentQueryDtos =
-                        sysMusicScoreService.queryMusicalInstrument(Arrays.stream(instrumentIds.split(",")).map(Integer::parseInt).distinct().collect(Collectors.toList()));
-                musicalInstrumentQueryMap = musicalInstrumentQueryDtos.stream()
-                        .collect(Collectors.toMap(CbsMusicalInstrumentWrapper.MusicalInstrumentQueryDto::getId, o -> o, (o1, o2) -> o1));
-            }*/
             List<Long> cbsMusicIds = rows.stream().map(CbsMusicSheetWrapper.MusicSheet::getId).collect(Collectors.toList());
             List<SysMusicScore> musicSheetList = sysMusicScoreService.getDao().findByCbsId(cbsMusicIds,false);
             Map<String, SysMusicScore> map = musicSheetList.stream().collect(Collectors.toMap(SysMusicScore::getCbsMusicSheetId, o -> o, (o1, o2) -> o1));
@@ -83,20 +75,6 @@ public class MusicSheetApplicationExtendController {
                 if (Objects.nonNull(musicSheet)) {
                     musicSheetApplication.setBizId(musicSheet.getId().toString());
                 }
-                /*if(StringUtils.isNotEmpty(musicSheetApplication.getMusicalInstrumentIds())){
-                    String[] split = musicSheetApplication.getMusicalInstrumentIds().split(",");
-                    for (String s : split) {
-                        StringBuffer sb = new StringBuffer();
-                        CbsMusicalInstrumentWrapper.MusicalInstrumentQueryDto musicalInstrumentQueryDto = musicalInstrumentQueryMap.get(Integer.parseInt(s));
-                        if(Objects.nonNull(musicalInstrumentQueryDto)){
-                            if(sb.length() > 0){
-                                sb.append(",");
-                            }
-                            sb.append(musicalInstrumentQueryDto.getName());
-                        }
-                        musicSheetApplication.setSubjectNames(sb.toString());
-                    }
-                }*/
                 musicSheetApplications.add(musicSheetApplication);
             }
             return R.from(PageUtil.pageInfo(info, musicSheetApplications));

+ 45 - 15
mec-application/src/main/java/com/ym/mec/web/controller/SysMusicScoreCategoriesController.java

@@ -1,27 +1,44 @@
 package com.ym.mec.web.controller;
 
-import com.ym.mec.auth.api.dto.MusicScoreQueryInfo;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.entity.SysMusicScoreCategories;
-import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
+import com.ym.mec.biz.dal.entity.TenantConfig;
+import com.ym.mec.biz.service.CbsMusicScoreCategoriesService;
 import com.ym.mec.biz.service.OrganizationService;
-import com.ym.mec.biz.service.SysMusicScoreCategoriesService;
+import com.ym.mec.biz.service.SysUserService;
+import com.ym.mec.biz.service.TenantConfigService;
 import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
+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.web:}/sysMusicScoreCategories")
 @Api(tags = "曲库分类服务")
 @RestController
 public class SysMusicScoreCategoriesController extends BaseController {
 
-    @Autowired
-    private SysMusicScoreCategoriesService sysMusicScoreCategoriesService;
-    @Autowired
+    @Resource
+    private CbsMusicScoreCategoriesService cbsMusicScoreCategoriesService;
+    @Resource
+    private SysUserService sysUserService;
+//    @Resource
+//    private SysMusicScoreCategoriesService sysMusicScoreCategoriesService;
+    @Resource
     private OrganizationService organizationService;
-
+    @Resource
+    private TenantConfigService tenantConfigService;
+//    @Autowired
+//    private OrganizationService organizationService;
+/*
     @ApiOperation(value = "分页查询")
     @GetMapping("/queryPage")
     @PreAuthorize("@pcs.hasPermissions('sysMusicScoreCategories/queryPage')")
@@ -61,20 +78,33 @@ public class SysMusicScoreCategoriesController extends BaseController {
     public Object delete(Integer id) {
         sysMusicScoreCategoriesService.del(id);
         return succeed();
-    }
+    }*/
 
     @ApiOperation(value = "树状列表")
     @GetMapping("/queryTree")
     @PreAuthorize("@pcs.hasPermissions('sysMusicScoreCategories/queryTree')")
-    public Object queryTree(MusicScoreQueryInfo queryInfo) {
-        //queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
-        return succeed(sysMusicScoreCategoriesService.queryTree(queryInfo));
+    public HttpResponseResult<List<SysMusicScoreCategories>> queryTree(String queryType) {
+        //queryType  ALL  代表查询所有分类,不传代表按分部和机构配置的来筛选,TENANT 表示查询机构配置的分类
+        if ("ALL".equals(queryType)) {
+            return succeed(cbsMusicScoreCategoriesService.queryTreeByAppId());
+        }else if ("TENANT".equals(queryType)) {
+            SysUser user = sysUserService.getUser();
+            TenantConfig tenantConfig = tenantConfigService.getOne(new QueryWrapper<TenantConfig>().eq("tenant_id_", user.getTenantId()));
+            if(tenantConfig == null){
+                return succeed(cbsMusicScoreCategoriesService.queryTreeByAppId());
+            }
+            return succeed(cbsMusicScoreCategoriesService.queryCategoriesTreeList(tenantConfig.getTeachingMaterialId(),false));
+        }
+        SysUser user = sysUserService.getUser();
+        String teachingMaterialIds = organizationService.getTeachingMaterialIds(organizationService.getEmployeeOrgan(null),user.getTenantId());
+        return succeed(cbsMusicScoreCategoriesService.queryCategoriesTreeList(teachingMaterialIds,true));
     }
 
-    @ApiOperation(value = "获取分类详情")
+/*    @ApiOperation(value = "获取分类详情")
     @GetMapping("/get")
     @PreAuthorize("@pcs.hasPermissions('sysMusicScoreCategories/get')")
     public Object get(Integer id) {
+        cbsMusicScoreCategoriesService.queryByIds(id.toString());
         return succeed(sysMusicScoreCategoriesService.getDetail(id));
-    }
+    }*/
 }

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

@@ -47,7 +47,7 @@ public class SysMusicScoreController extends BaseController {
     @GetMapping("/queryPage2")
     public Object queryPage2(SysExamSongQueryInfo queryInfo) {
         queryInfo.setType("COMMON");
-        queryInfo.setShowFlag(1);
+        queryInfo.setClientFlag(true);
         queryInfo.setClientType(ClientTypeEnum.SMART_PRACTICE);
         return succeed(sysMusicScoreService.queryMusicScorePage(queryInfo));
     }
@@ -72,9 +72,6 @@ public class SysMusicScoreController extends BaseController {
         if (reasonDto.getState() == null) {
             return failed("启用/禁用状态不能为空");
         }
-        if (reasonDto.getState().equals(YesOrNoEnum.NO) && StringUtils.isEmpty(reasonDto.getReason())) {
-            return failed("停用原因不能为空");
-        }
         return succeed(sysMusicScoreService.stateList(reasonDto));
     }
 

+ 71 - 0
mec-application/src/main/java/com/ym/mec/web/controller/TempDirectorTrainingCampController.java

@@ -0,0 +1,71 @@
+package com.ym.mec.web.controller;
+
+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.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampWrapper;
+import com.ym.mec.biz.service.TempDirectorTrainingCampService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+@Api(tags = "乐队指导训练营活动")
+@RestController
+@RequestMapping("${app-config.url.web:}/tempDirectorTrainingCamp")
+public class TempDirectorTrainingCampController extends BaseController {
+
+    @Resource
+    private TempDirectorTrainingCampService tempDirectorTrainingCampService;
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @ApiOperation("创建训练营")
+    @PostMapping(value = "/add")
+    public HttpResponseResult<Object> add(@Valid @RequestBody TempDirectorTrainingCampWrapper.AddCamp dto) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        dto.setUpdateBy(sysUser.getId());
+        tempDirectorTrainingCampService.add(dto);
+        return succeed();
+    }
+
+    @ApiOperation("修改训练营")
+    @PostMapping(value = "/modify")
+    public HttpResponseResult<Object> modify(@Valid @RequestBody TempDirectorTrainingCampWrapper.AddCamp dto) {
+        if (dto.getId() == null) {
+            return failed("训练营id不能为空");
+        }
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        dto.setUpdateBy(sysUser.getId());
+        tempDirectorTrainingCampService.modify(dto);
+        return succeed();
+    }
+
+
+    @ApiOperation(value = "分页获取")
+    @PostMapping("/queryPage")
+    public HttpResponseResult<PageInfo<TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp>> queryPage(@RequestBody TempDirectorTrainingCampWrapper.TempDirectorTrainingCampQueryInfo queryInfo){
+        IPage<TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp> tempDirectorTrainingCampIPage = tempDirectorTrainingCampService.queryPage(QueryInfo.getPage(queryInfo), queryInfo);
+
+        return succeed(QueryInfo.pageInfo(tempDirectorTrainingCampIPage));
+    }
+}
+

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

@@ -0,0 +1,138 @@
+package com.ym.mec.web.controller;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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.common.tools.DownloadManager;
+import com.microsvc.toolkit.middleware.oss.OssPluginContext;
+import com.microsvc.toolkit.middleware.oss.impl.TencentOssPlugin;
+import com.ym.mec.biz.dal.entity.TempDirectorTrainingCamp;
+import com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampDetailWrapper;
+import com.ym.mec.biz.service.TempDirectorTrainingCampDetailService;
+import com.ym.mec.biz.service.TempDirectorTrainingCampService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.util.date.DateUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.joda.time.DateTime;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.io.File;
+import java.text.MessageFormat;
+import java.util.Date;
+import java.util.List;
+
+@Api(tags = "乐队指导训练营活动")
+@RestController
+@Slf4j
+@RequestMapping("${app-config.url.web:}/tempDirectorTrainingDetailCamp")
+public class TempDirectorTrainingCampDetailController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private TempDirectorTrainingCampDetailService tempDirectorTrainingCampDetailService;
+
+    @Autowired
+    private OssPluginContext ossPluginContext;
+
+
+    @Autowired
+    private TempDirectorTrainingCampService tempDirectorTrainingCampService;
+
+
+    @ApiOperation(value = "分页获取")
+    @PostMapping("/queryPage")
+    public HttpResponseResult<PageInfo<TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetail>> queryPage(@RequestBody TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailQuery queryInfo){
+        if (queryInfo.getTempDirectorTrainingCampId()==null) {
+            return failed("训练营编号不能为空");
+        }
+        IPage<TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetail> tempDirectorTrainingCampIPage = tempDirectorTrainingCampDetailService.queryPage(QueryInfo.getPage(queryInfo), queryInfo);
+
+        return succeed(QueryInfo.pageInfo(tempDirectorTrainingCampIPage));
+    }
+
+
+
+    @ApiOperation(value = "导出")
+    @PostMapping("/export")
+    public HttpResponseResult<TempDirectorTrainingCampDetailWrapper.DownloadInfo> export(@RequestBody TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailQuery queryInfo){
+        if (queryInfo.getTempDirectorTrainingCampId()==null) {
+            return failed("训练营编号不能为空");
+        }
+
+
+        IPage<TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetail> tempDirectorTrainingCampIPage = tempDirectorTrainingCampDetailService.queryPage(new Page<>(1,-1), queryInfo);
+        List<TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetail> records = tempDirectorTrainingCampIPage.getRecords();
+        if (records.size()==0) {
+            return failed("没有可导出数据");
+        }
+        TempDirectorTrainingCamp trainingCamp = tempDirectorTrainingCampService.getById(queryInfo.getTempDirectorTrainingCampId());
+
+
+        TempDirectorTrainingCampDetailWrapper.DownloadInfo downloadInfo = generateExportExcelFile(records, TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetail.class, trainingCamp.getName()+"导出", trainingCamp.getName()+"导出");
+        return succeed(downloadInfo);
+    }
+
+    @ApiOperation(value = "统计")
+    @PostMapping("/queryPageStat")
+    public HttpResponseResult<TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailStat> queryPageStat(@RequestBody TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailQuery queryInfo){
+        if (queryInfo.getTempDirectorTrainingCampId()==null) {
+            return failed("训练营编号不能为空");
+        }
+        return succeed(tempDirectorTrainingCampDetailService.queryPageStat(queryInfo));
+    }
+
+
+    private TempDirectorTrainingCampDetailWrapper.DownloadInfo generateExportExcelFile(List<?> orderExports, Class<?> clazz, String fileName, String sheetName) {
+
+        // OSS上传文件目录
+        String uploadOssPath = MessageFormat.format("excel-download/{0}", DateTime.now().toString("yyyy-MM"));
+
+        // 文件上传下载地址
+        String uploadPath = MessageFormat.format("{0}/{1}-{2}.xlsx", uploadOssPath, fileName, DateTime.now().toString("MMddHHmmss"));
+
+        // 本地文件地址
+        String localPath = DownloadManager.getInstance().path(uploadPath);
+//        log.debug("pageExport localPath={}", localPath);
+
+        // 模板文件保存在springboot项目的resources/static下
+        // Resource resource = new ClassPathResource("static/预报名模板导出.xlsx");
+
+        EasyExcel
+            .write(localPath, clazz)
+            .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
+            //.withTemplate(resource.getStream()) // 利用模板的输出流
+            .sheet(0, sheetName)
+            .doWrite(orderExports);
+
+        // 上传本地文件到OSS服务器
+        String downloadPath = ossPluginContext.getPluginService(TencentOssPlugin.PLUGIN_NAME)
+            .uploadFile(uploadOssPath, new File(localPath));
+        log.debug("pageExport downloadPath={}", downloadPath);
+
+        // 删除本地缓存文件
+        DownloadManager.getInstance().deleteOnExit(localPath);
+
+        // 学生统计下载
+        return TempDirectorTrainingCampDetailWrapper.DownloadInfo
+            .builder()
+            .fileName(MessageFormat.format("{0}.xlsx", fileName))
+            .downloadPath(downloadPath)
+            .build();
+    }
+
+}
+

+ 3 - 4
mec-application/src/main/java/com/ym/mec/web/controller/education/EduMusicScoreController.java

@@ -7,16 +7,15 @@ import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.biz.dal.entity.SysMusicScoreAccompaniment;
 import com.ym.mec.biz.dal.enums.ClientTypeEnum;
 import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
+import com.ym.mec.biz.service.CbsMusicScoreCategoriesService;
 import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.biz.service.SysMusicScoreAccompanimentService;
-import com.ym.mec.biz.service.SysMusicScoreCategoriesService;
 import com.ym.mec.biz.service.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.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -30,7 +29,7 @@ import java.util.List;
 @RestController
 public class EduMusicScoreController extends BaseController {
     @Resource
-    private SysMusicScoreCategoriesService sysMusicScoreCategoriesService;
+    private CbsMusicScoreCategoriesService cbsMusicScoreCategoriesService;
     @Resource
     private SysMusicScoreAccompanimentService sysMusicScoreAccompanimentService;
     @Resource
@@ -46,7 +45,7 @@ public class EduMusicScoreController extends BaseController {
         SysUser sysUser = sysUserService.getUser();
         String organId = organizationService.getEmployeeOrgan(sysUser.getId(), null, sysUser.getIsSuperAdmin() && sysUser.getTenantId() == -1);
         String teachingMaterialIds = organizationService.getTeachingMaterialIds(organId, sysUser.getTenantId());
-        return succeed(sysMusicScoreCategoriesService.queryCategoriesTreeList(teachingMaterialIds, queryInfo.getEnable()));
+        return succeed(cbsMusicScoreCategoriesService.queryCategoriesTreeList(teachingMaterialIds, queryInfo.getEnable()));
     }
 
     @ApiOperation(value = "分页查询")

+ 8 - 6
mec-application/src/main/java/com/ym/mec/web/controller/education/ImGroupNoticeController.java

@@ -34,11 +34,7 @@ public class ImGroupNoticeController extends BaseController {
     @RequestMapping("/add")
     public HttpResponseResult<Long> add(ImGroupNotice imGroupNotice ) {
         imGroupNotice.setOperatorId(sysUserService.getUserId().longValue());
-        if(imGroupNotice.isIsTop()){
-            //置顶取消
-            imGroupNoticeService.getDao().updateTop(imGroupNotice.getImGroupId(),false);
-        }
-        return succeed(imGroupNoticeService.insert(imGroupNotice));
+        return succeed(imGroupNoticeService.add(imGroupNotice));
     }
 
     @ApiOperation(value = "修改")
@@ -56,6 +52,12 @@ public class ImGroupNoticeController extends BaseController {
         return succeed(imGroupNoticeService.queryLatestNotice(groupId));
     }
 
+    @ApiOperation(value = "获取群公告")
+    @RequestMapping("/getNotice")
+    public HttpResponseResult<ImGroupNoticeDto> getNotice(Long id) {
+        return succeed(imGroupNoticeService.getNotice(id));
+    }
+
     @ApiOperation(value = "获取群公告列表")
     @RequestMapping("/queryNoticePage")
     public HttpResponseResult<PageInfo<ImGroupNoticeDto>> queryPage(ImGroupNoticeQueryInfo queryInfo) {
@@ -65,7 +67,7 @@ public class ImGroupNoticeController extends BaseController {
     @ApiOperation(value = "删除")
     @RequestMapping("/del")
     public HttpResponseResult<Object> del(Long id) {
-        imGroupNoticeService.delete(id);
+        imGroupNoticeService.del(id);
         return succeed();
     }
 }

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

@@ -3,9 +3,9 @@ package com.ym.mec.web.controller.school;
 import com.ym.mec.auth.api.dto.MusicScoreQueryInfo;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.entity.SchoolStaff;
+import com.ym.mec.biz.service.CbsMusicScoreCategoriesService;
 import com.ym.mec.biz.service.OrganizationService;
 import com.ym.mec.biz.service.SchoolStaffService;
-import com.ym.mec.biz.service.SysMusicScoreCategoriesService;
 import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.controller.BaseController;
 import io.swagger.annotations.Api;
@@ -21,7 +21,7 @@ import javax.annotation.Resource;
 @RestController
 public class SchoolMusicScoreController extends BaseController {
     @Resource
-    private SysMusicScoreCategoriesService sysMusicScoreCategoriesService;
+    private CbsMusicScoreCategoriesService cbsMusicScoreCategoriesService;
     @Resource
     private SysUserService sysUserService;
     @Resource
@@ -35,6 +35,6 @@ public class SchoolMusicScoreController extends BaseController {
         SysUser sysUser = sysUserService.getUser();
         SchoolStaff schoolStaff = schoolStaffService.getByUserId(sysUser.getId());
         String teachingMaterialIds = organizationService.getTeachingMaterialIds(schoolStaff.getOrganIdList(), sysUser.getTenantId());
-        return succeed(sysMusicScoreCategoriesService.queryCategoriesTreeList(teachingMaterialIds, queryInfo.getEnable()));
+        return succeed(cbsMusicScoreCategoriesService.queryCategoriesTreeList(teachingMaterialIds, queryInfo.getEnable()));
     }
 }

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

@@ -27,8 +27,8 @@ public class CbsQrCodeScanServiceImpl{
     private SysUserService sysUserService;
     @Resource
     private SysUserFeignService sysUserFeignService;
-    @Resource
-    private SysConfigDao sysConfigDao;
+//    @Resource
+//    private SysConfigDao sysConfigDao;
 
     public CbsQrCodeScanWrapper.UserInfo userInfo(CbsQrCodeScanWrapper.QrCodeScanUserInfoReq req) {
         CbsQrCodeScanWrapper.UserInfo userInfo = new CbsQrCodeScanWrapper.UserInfo();
@@ -46,10 +46,10 @@ public class CbsQrCodeScanServiceImpl{
             throw new BizException(HttpStatus.UNAUTHORIZED.value(), "用户不存在");
         }
         //获取需要排除的用户编号
-        String excludeUserIds = sysConfigDao.findConfigValue("exclude_user_ids");
-        if(StringUtils.isNotEmpty(excludeUserIds) && excludeUserIds.contains(sysUser.getId().toString())){
-            throw new BizException("扫码登陆失败: 用户已锁定");
-        }
+//        String excludeUserIds = sysConfigDao.findConfigValue("exclude_user_ids");
+//        if(StringUtils.isNotEmpty(excludeUserIds) && excludeUserIds.contains(sysUser.getId().toString())){
+//            throw new BizException("扫码登陆失败: 用户已锁定");
+//        }
         //调用登陆接口
         HttpResponseResult<Map<String,Object>> result = sysUserFeignService.smsLogin(phone, "qr_teacher", UUID.randomUUID().toString(), "qr_teacher");
         if (result != null){

+ 5 - 0
mec-biz/pom.xml

@@ -35,6 +35,11 @@
 			<artifactId>mec-thirdparty</artifactId>
 		</dependency>
 
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>easyexcel</artifactId>
+            <version>3.2.1</version>
+        </dependency>
 		<dependency>
 			<groupId>com.ym</groupId>
 			<artifactId>snakerflowy</artifactId>

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

@@ -6,6 +6,7 @@ import java.util.Map;
 import java.util.Set;
 
 import com.ym.mec.biz.dal.wrapper.LiveGroupWrapper;
+import com.ym.mec.biz.dal.wrapper.StudentWrapper;
 import org.apache.ibatis.annotations.Param;
 
 import com.ym.mec.biz.dal.dto.BaseMapDto;
@@ -230,6 +231,8 @@ public interface ClassGroupStudentMapperDao extends BaseDAO<Long, ClassGroupStud
      */
     List<StudentRegistration> findClassStudentList(@Param("classGroupId") Integer classGroupId, @Param("status") ClassGroupStudentStatusEnum status);
 
+    List<StudentWrapper.ClassStudentDto> findAllStudent(@Param("query") StudentWrapper.ClassStudentQuery query);
+
     /**
      * 查询学生是否已报小班课
      *

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

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.dao;
 import com.ym.mec.biz.dal.dto.StudentSubTotalCourseTimesDto;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentStudentCourseDetail;
+import com.ym.mec.biz.dal.wrapper.StudentWrapper;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
@@ -102,4 +103,8 @@ public interface MusicGroupPaymentStudentCourseDetailDao extends BaseDAO<Long, M
     void delByIds(@Param("courseDetailIds") List<Long> courseDetailIds);
 
     List<MusicGroupPaymentStudentCourseDetail> findByUserIdAndMusicGroupId(@Param("userId") Integer userId, @Param("musicGroupId") String musicGroupId);
+
+    List<StudentWrapper.ClassStudentDto> findStudentCourseDetail(@Param("musicGroupId") String musicGroupId,
+                                                                 @Param("studentIds") List<Integer> studentIds,
+                                                                 @Param("query") StudentWrapper.ClassStudentQuery query);
 }

+ 9 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java

@@ -24,8 +24,11 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
 
     StudentPaymentOrder lockOrder(@Param("id") Long id);
 
-    List<StudentPaymentOrder> queryByCondition(@Param("groupType") GroupType groupType, @Param("musicGroupId") String musicGroupId,
-                                               @Param("userId") Integer userId, @Param("status") DealStatusEnum status, @Param("type") OrderTypeEnum type);
+    List<StudentPaymentOrder> queryByCondition(@Param("groupType") GroupType groupType,
+                                               @Param("musicGroupId") String musicGroupId,
+                                               @Param("userId") Integer userId,
+                                               @Param("status") DealStatusEnum status,
+                                               @Param("type") OrderTypeEnum type);
 
     /**
      * @Author: Joburgess
@@ -167,7 +170,10 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
      * @author qnc99
      * @date 2020/12/5 0005
      */
-    List<StudentPaymentOrder> findPaymentOrderByGroupType(@Param("userId") Integer userId, @Param("sporadicId") Integer sporadicId, @Param("groupType") String groupType, @Param("status") DealStatusEnum status);
+    List<StudentPaymentOrder> findPaymentOrderByGroupType(@Param("userId") Integer userId,
+                                                          @Param("sporadicId") Integer sporadicId,
+                                                          @Param("groupType") String groupType,
+                                                          @Param("status") DealStatusEnum status);
 
     List<StudentPaymentOrder> findOrderByGroup(@Param("groupId") String groupId,
                                                @Param("groupType") GroupType groupType,

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

@@ -16,6 +16,8 @@ public interface SysMusicScoreAccompanimentDao extends BaseDAO<String, SysMusicS
 
     List<SysMusicScoreAccompaniment> queryAccPage(Map<String, Object> params);
 
+    List<SysMusicScoreAccompaniment> queryAccPage1(@Param("musicScoreIds") List<Integer> musicScoreIds);
+
     int findAccCount(Map<String, Object> params);
 
     /**

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

@@ -4,7 +4,6 @@ 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.entity.SysMusicScoreAccompaniment;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 

+ 14 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TempDirectorTrainingCampDao.java

@@ -0,0 +1,14 @@
+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.TempDirectorTrainingCamp;
+import com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampWrapper;
+import org.apache.ibatis.annotations.Param;
+
+public interface TempDirectorTrainingCampDao extends BaseMapper<TempDirectorTrainingCamp> {
+
+    IPage<TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp> queryPage(@Param("page") IPage<TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp> page,
+                                                                              @Param("param") TempDirectorTrainingCampWrapper.TempDirectorTrainingCampQueryInfo queryInfo);
+}
+

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

@@ -0,0 +1,21 @@
+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.TempDirectorTrainingCampDetail;
+import com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampDetailWrapper;
+import com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampWrapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface TempDirectorTrainingCampDetailDao extends BaseMapper<TempDirectorTrainingCampDetail> {
+
+    List<TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp> getStat(@Param("ids") List<Integer> tempDirectorTrainingCampIds);
+
+    IPage<TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetail> queryPage(@Param("page") IPage<Object> page,
+                                                                                          @Param("param") TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailQuery queryInfo);
+
+    TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailStat queryPageStat(@Param("param") TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailQuery queryInfo);
+}
+

+ 6 - 33
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ImGroupNoticeDto.java

@@ -1,52 +1,25 @@
 package com.ym.mec.biz.dal.dto;
 
-import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.entity.ImGroupNotice;
 import io.swagger.annotations.ApiModelProperty;
 
-import java.util.Objects;
-
 public class ImGroupNoticeDto extends ImGroupNotice {
 
-	private SysUser user = new SysUser();
-
-	// 拓展字段
-	@ApiModelProperty(value = "群编号;")
-	private String groupId;
-
-	@ApiModelProperty(value = "是否置顶")
-	private Boolean topFlag;
-
-	@ApiModelProperty(value = "是否发送给新人")
-	private Boolean sentToNewMemberFlag;
+	@ApiModelProperty(value = "头像")
+	private String avatar;
 
 	@ApiModelProperty("用户名称")
 	private String username;
 
-	public SysUser getUser() {
-		return user;
-	}
-
-	public void setUser(SysUser user) {
-		this.user = user;
-	}
-
-	public String getGroupId() {
-		return getImGroupId();
-	}
-
-	public Boolean getTopFlag() {
-		return isIsTop();
+	public String getAvatar() {
+		return avatar;
 	}
 
-	public Boolean getSentToNewMemberFlag() {
-		return isIsSentToNewMember();
+	public void setAvatar(String avatar) {
+		this.avatar = avatar;
 	}
 
 	public String getUsername() {
-		if (Objects.nonNull(getUser())) {
-			return getUser().getRealName();
-		}
 		return username;
 	}
 

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

@@ -8,6 +8,7 @@ import java.util.List;
 
 import com.ym.mec.common.entity.BaseEntity;
 
+
 public class PayParamBasicDto extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "是否使用余额", required = false)
     private Boolean isUseBalancePayment = false;

+ 23 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImGroupNotice.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import com.ym.mec.common.entity.BaseEntity;
@@ -38,7 +39,28 @@ public class ImGroupNotice extends BaseEntity {
 	
 	/** 操作人 */
 	private Long operatorId;
-	
+
+	// IM消息ID
+	private String messageSeqId;
+
+	private String clientType;
+
+	public String getClientType() {
+		return clientType;
+	}
+
+	public void setClientType(String clientType) {
+		this.clientType = clientType;
+	}
+
+	public String getMessageSeqId() {
+		return messageSeqId;
+	}
+
+	public void setMessageSeqId(String messageSeqId) {
+		this.messageSeqId = messageSeqId;
+	}
+
 	public void setId(Long id){
 		this.id = id;
 	}

+ 43 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysMusicScore.java

@@ -7,6 +7,8 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
+import java.util.List;
+
 /**
  * 对应数据库表(sys_music_score):
  */
@@ -55,6 +57,9 @@ public class SysMusicScore {
 
 	/** 名称 */
 	private Integer categoriesId;
+
+	/** 内容平台曲目分类编号 */
+	private Integer cbsMusicCategoriesId;
 	
 	/** 类型PERSON 个人,COMMON公用 */
 	private ExamSongTypeEnum type;
@@ -115,6 +120,8 @@ public class SysMusicScore {
 
 	private Integer showFlag = 0;
 
+	private Integer clientShowFlag = 0;
+
 	private String showName;
 
 	private Boolean isOpenMetronome;
@@ -137,6 +144,42 @@ public class SysMusicScore {
 
 	@ApiModelProperty("谱面类型")
 	private String scoreType;
+
+	@ApiModelProperty("是否节奏练习")
+	private Boolean isAllSubject;
+
+	@ApiModelProperty("是否支持混音节拍器")
+	private Boolean isMixBeat;
+
+	@ApiModelProperty("总谱五线谱PDF文件")
+	private String musicPdfUrl;
+
+	@ApiModelProperty("总谱首调PDF文件")
+	private String firstPdfUrl;
+
+	@ApiModelProperty("总谱固定调PDF文件")
+	private String jianPdfUrl;
+
+	@ApiModelProperty("原音五线谱PDF文件")
+	private String soundMusicPdfUrl;
+
+	@ApiModelProperty("原音首调PDF文件")
+	private String soundFirstPdfUrl;
+
+	@ApiModelProperty("原音固定调PDF文件")
+	private String soundJianPdfUrl;
+
+	@ApiModelProperty("伴奏五线谱PDF文件")
+	private String accMusicPdfUrl;
+
+	@ApiModelProperty("伴奏首调PDF文件")
+	private String accFirstPdfUrl;
+
+	@ApiModelProperty("伴奏固定调PDF文件")
+	private String accJianPdfUrl;
+
+	private List<SysMusicScoreAccompaniment> background;
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

+ 37 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysMusicScoreAccompaniment.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.entity;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.dayaedu.cbs.common.enums.school.EMusicSheetType;
 import com.ym.mec.biz.dal.entity.SysMusicScore.PlayMode;
 import com.ym.mec.biz.dal.enums.ClientTypeEnum;
@@ -106,6 +107,42 @@ public class SysMusicScoreAccompaniment {
 	@ApiModelProperty("谱面类型")
 	private String scoreType;
 
+	@ApiModelProperty("是否总谱渲染")
+	private Boolean isScoreRender;
+
+	@ApiModelProperty("演奏是否默认展示总谱渲染")
+	private Boolean defaultScoreRender;
+
+	@ApiModelProperty("是否支持混音节拍器")
+	private Boolean isMixBeat;
+
+	@ApiModelProperty("总谱五线谱PDF文件")
+	private String musicPdfUrl;
+
+	@ApiModelProperty("总谱首调PDF文件")
+	private String firstPdfUrl;
+
+	@ApiModelProperty("总谱固定调PDF文件")
+	private String jianPdfUrl;
+
+	@ApiModelProperty("原音五线谱PDF文件")
+	private String soundMusicPdfUrl;
+
+	@ApiModelProperty("原音首调PDF文件")
+	private String soundFirstPdfUrl;
+
+	@ApiModelProperty("原音固定调PDF文件")
+	private String soundJianPdfUrl;
+
+	@ApiModelProperty("伴奏五线谱PDF文件")
+	private String accMusicPdfUrl;
+
+	@ApiModelProperty("伴奏首调PDF文件")
+	private String accFirstPdfUrl;
+
+	@ApiModelProperty("伴奏固定调PDF文件")
+	private String accJianPdfUrl;
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

+ 10 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Teacher.java

@@ -137,12 +137,21 @@ public class Teacher extends SysUser {
 	@ApiModelProperty(value = "云教练限制")
 	private Boolean coursewareLimit;
 
+	@ApiModelProperty(value = "是否禁用云课堂", required = false)
+	private Boolean coursewareFlag = true;
 
     @ApiModelProperty("IM绑定设备")
     private String imDeviceId;
 
+	public Boolean getCoursewareFlag() {
+		return coursewareFlag;
+	}
+
+	public void setCoursewareFlag(Boolean coursewareFlag) {
+		this.coursewareFlag = coursewareFlag;
+	}
 
-    public String getImDeviceId() {
+	public String getImDeviceId() {
         return imDeviceId;
     }
 

+ 67 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TempDirectorTrainingCamp.java

@@ -0,0 +1,67 @@
+package com.ym.mec.biz.dal.entity;
+
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@ApiModel(value = "temp_director_training_camp-乐队指导训练营活动")
+@Data
+public class TempDirectorTrainingCamp implements Serializable {
+
+    @TableId(value = "id_", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @TableField("name_")
+    @ApiModelProperty(value = "活动名称")
+    private String name;
+
+    @TableField("apply_start_date_")
+    @ApiModelProperty(value = "报名开始日期")
+    private Date applyStartDate;
+
+    @TableField("apply_end_date_")
+    @ApiModelProperty(value = "报名结束日期")
+    private Date applyEndDate;
+
+    @TableField("bird_price_end_date_")
+    @ApiModelProperty(value = "早鸟价截止日期")
+    private Date birdPriceEndDate;
+
+    @TableField("bird_price_")
+    @ApiModelProperty(value = "早鸟价")
+    private BigDecimal birdPrice;
+
+    @TableField("current_price_")
+    @ApiModelProperty(value = "优惠价")
+    private BigDecimal currentPrice;
+
+    @TableField("original_price_")
+    @ApiModelProperty(value = "原价")
+    private BigDecimal originalPrice;
+
+    @TableField("status_")
+    @ApiModelProperty(value = "未开始 NOT_START,报名中 APPLY,已结束 END ,不用,直接使用时间判断")
+    private String status;
+
+    @TableField("update_by_")
+    @ApiModelProperty(value = "修改人")
+    private Integer updateBy;
+
+    @TableField("create_time_")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @TableField("update_time_")
+    @ApiModelProperty(value = "修改时间")
+    private Date updateTime;
+}
+

+ 111 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TempDirectorTrainingCampDetail.java

@@ -0,0 +1,111 @@
+package com.ym.mec.biz.dal.entity;
+
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@ApiModel(value = "temp_director_training_camp_detail-乐队指导训练营活动")
+@Data
+public class TempDirectorTrainingCampDetail implements Serializable {
+
+    @TableId(value = "id_", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @ApiModelProperty(value = "用户编号")
+    @TableField("user_id_")
+    private Integer userId;
+
+    @ApiModelProperty(value = "训练营编号")
+    @TableField("temp_director_training_camp_id_")
+    private Integer tempDirectorTrainingCampId;
+
+    @TableField("username_")
+    @ApiModelProperty(value = "姓名")
+    private String username;
+
+    @TableField("mobile_")
+    @ApiModelProperty(value = "手机号")
+    private String mobile;
+
+    @TableField("card_no_")
+    @ApiModelProperty(value = "身份证号")
+    private String cardNo;
+
+    @ApiModelProperty(value = "省份")
+    @TableField("province_")
+    private String province;
+
+    @ApiModelProperty(value = "省份")
+    @TableField("province_code_")
+    private String provinceCode;
+
+    @ApiModelProperty(value = "城市")
+    @TableField("city_code_")
+    private String cityCode;
+
+    @ApiModelProperty(value = "城市")
+    @TableField("city_")
+    private String city;
+
+    @ApiModelProperty(value = "区县")
+    @TableField("region_code_")
+    private String regionCode;
+
+    @ApiModelProperty(value = "区县")
+    @TableField("region_")
+    private String region;
+
+    @TableField("payment_status_")
+    @ApiModelProperty(value = "已缴费 PAID,未缴费 NO,已退费 REFUND")
+    private String paymentStatus;
+
+    @TableField("payment_amount_")
+    @ApiModelProperty(value = "缴费金额")
+    private BigDecimal paymentAmount;
+
+    @TableField("bird_flag_")
+    @ApiModelProperty(value = "是否早鸟报名")
+    private Boolean birdFlag;
+
+    @TableField("payment_date_")
+    @ApiModelProperty(value = "缴费时间")
+    private Date paymentDate;
+
+    @TableField("job_")
+    @ApiModelProperty(value = "职业")
+    private String job;
+
+    @TableField("subject_name_")
+    @ApiModelProperty(value = "声部")
+    private String subjectName;
+
+    @TableField("study_")
+    @ApiModelProperty(value = "之前乐队指导学习基础")
+    private String study;
+
+    @TableField("study_target_")
+    @ApiModelProperty(value = "目标效果")
+    private String studyTarget;
+
+    @TableField("suggestion_")
+    @ApiModelProperty(value = "需求或建议")
+    private String suggestion;
+
+    @TableField("create_time_")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+
+    @TableField("update_time_")
+    @ApiModelProperty(value = "修改时间")
+    private Date updateTime;
+}
+

+ 1 - 10
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java

@@ -15,20 +15,11 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     PUSH_AUTO_STUDENT_MEMBER_RENEW_MESSAGE("PUSH_AUTO_STUDENT_MEMBER_RENEW_MESSAGE", "会员续费提醒"),
 //    STUDENT_MEMBER_RENEW_QUIT_MESSAGE("STUDENT_MEMBER_RENEW_QUIT_MESSAGE", "会员续费提醒"),
     SMS_VERIFY_CODE_LOGIN("SMS_VERIFY_CODE_LOGIN", "验证码登录"),
+    SMS_VERIFY_CODE_DIRECTOR("SMS_VERIFY_CODE_DIRECTOR", "乐队指导特训营验证码"),
     KAPTCHA_SESSION_KEY("KAPTCHA_SESSION_KEY", "登录图形验证码"),
     SMS_PAYMENT_MESSAGE("SMS_PAYMENT_MESSAGE", "缴费通知"),
     SMS_STANDARD_NO_QUALIFIED("SMS_STANDARD_NO_QUALIFIED", "学习未达标"),
     SMS_STANDARD_QUALIFIED("SMS_STANDARD_QUALIFIED", "学习已达标"),
-//    SMS_PAYMENT_SUCCESS("SMS_PAYMENT_SUCCESS", "缴费成功"),
-//    SMS_RENEW_SUCCESS("SMS_RENEW_SUCCESS", "续费成功"),
-//    SMS_BALANCE_PAY("SMS_BALANCE_PAY", "余额充值"),
-//    SMS_BASICS_SKILL_APPLY_MESSAGE("SMS_BASICS_SKILL_APPLY_MESSAGE", "基础技能训练报名通知"),
-//    SMS_VIP_COURSE_BUY_SUCCESS("SMS_VIP_COURSE_BUY_SUCCESS", "VIP课购买成功"),
-//    SMS_VIP_COURSE_SIGN("SMS_VIP_COURSE_SIGN", "VIP课签到"),
-//    SMS_QUIT_COURSE_SUCCESS("SMS_QUIT_COURSE_SUCCESS", "退课成功"),
-//    SMS_WITHDRAW_SUCCESS("SMS_WITHDRAW_SUCCESS", "提现成功"),
-//    SMS_MUSIC_GROUP_CLOSE("SMS_MUSIC_GROUP_CLOSE", "乐团关闭(关闭后)"),
-
     PUSH_STUDENT_BUY_MEMBER_ACTIVITY("PUSH_STUDENT_BUY_MEMBER_ACTIVITY", "活动购买成功"),
     PUSH_SYSTEM_ACTIVITY_MEMBER("PUSH_SYSTEM_ACTIVITY_MEMBER", "待激活通知"),
     PUSH_STUDENT_BUY_ACTIVITY("PUSH_STUDENT_BUY_ACTIVITY", "活动购买成功"),

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderDetailTypeEnum.java

@@ -32,6 +32,7 @@ public enum OrderDetailTypeEnum implements BaseEnum<String, OrderDetailTypeEnum>
     CLOUD_TEACHER_PLUS("CLOUD_TEACHER_PLUS","云教练"),
     THEORY_COURSE("THEORY_COURSE", "小组课"),
     REPAIR("REPAIR", "乐器维修"),
+    DIRECTOR_TRAINING_CAMP("DIRECTOR_TRAINING_CAMP", "乐队指导训练营报名"),
     ORGAN_SHARE_PROFIT("ORGAN_SHARE_PROFIT", "分部分润");
 
     private String code;

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderTypeEnum.java

@@ -39,7 +39,8 @@ public enum OrderTypeEnum implements BaseEnum<String, OrderTypeEnum> {
     MEMBER("MEMBER", "会员购买"),
     LIVE_BUY("LIVE_BUY", "直播购物"),
     SCHOOL_GOODS_PURCHASE("SCHOOL_GOODS_PURCHASE","学校商品采购"),
-    MALL_BUY("MALL_BUY", "商城购物");
+    MALL_BUY("MALL_BUY", "商城购物"),
+    DIRECTOR_TRAINING_CAMP("DIRECTOR_TRAINING_CAMP", "乐队指导训练营报名");
 
 
     private String code;

+ 34 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/im/CK.java

@@ -0,0 +1,34 @@
+package com.ym.mec.biz.dal.enums.im;
+
+/**
+ * 常用定义
+ * Created by Eric.Shang on 2022/11/4.
+ */
+public interface CK {
+
+    // 手机号
+    String EXP_MOBILE_NUMBER = "^((13[0-9])|(14(0|[5-7]|9))|(15([0-3]|[5-9]))|(16(2|[5-8]))|(17[0-8])|(18[0-9])|(19([0-3]|[5-9])))\\d{8}$";
+    // 邮箱
+    String EXP_EMAIL = "^(\\w+([-.][A-Za-z0-9]+)*){3,18}@\\w+([-.][A-Za-z0-9]+)*\\.\\w+([-.][A-Za-z0-9]+)*$\n";
+    // 正型
+    String EXP_INT = "^\\d+$";
+    String EXP_JSON_A = "^\\[.?|.+\\]$";
+    String EXP_JSON_O = "^\\{.?|.+\\}$";
+
+    // 参数配置
+    String PARAM_SMS_MAX_TIMES = "sms_max_times";
+    // 参数配置
+    String PARAM_SMS_RECENT_MINUTES = "sms_recent_minutes";
+    // 密码前缀
+    String PASSWORD_PREFIX = "yyszkt";
+
+    // 时间格式化
+    String FORMAT_YYYY_MM_DD = "yyyyMMdd";
+
+    // IM用户ID格式
+    String IM_USER_ID_FORMAT = "{0}_{1}";
+    String IM_USER_LONG_ID_FORMAT = "{0}_{1}_{2}";
+    // 用户ID分隔符
+    String IM_USER_ID_SPLIT = "_";
+
+}

+ 107 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/im/EClientType.java

@@ -0,0 +1,107 @@
+package com.ym.mec.biz.dal.enums.im;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.google.common.collect.Lists;
+import com.microsvc.toolkit.common.enums.ConverterEnum;
+import lombok.Getter;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.List;
+
+/**
+ * 客户端类型
+ * Created by Eric.Shang on 2022/11/4.
+ */
+@Getter
+public enum EClientType implements ConverterEnum<String> {
+
+    BACKEND(1, "后端", "cooleshow-backend", "", "backend_login_locked"),
+    SCHOOL(2, "教务端", "cooleshow-school", "school_device_num", "school_login_locked"),
+    TEACHER(3, "老师端", "cooleshow-teacher", "teacher_device_num", "teacher_login_locked"),
+    STUDENT(4, "学生端", "cooleshow-student", "student_device_num", "student_login_locked"),
+    ;
+
+    private final int value;
+    private final String name;
+    private final String clientId;
+    private final String deviceParam;
+    private final String lockedParam;
+
+    @EnumValue
+    private final String code;
+
+    EClientType(int value, String name, String clientId, String param, String lockParam) {
+        this.value = value;
+        this.name = name;
+        this.clientId = clientId;
+        this.deviceParam = param;
+        this.lockedParam = lockParam;
+
+        this.code = this.name();
+    }
+
+    /**
+     * 客户端类型
+     * @param clientId 授权client_id
+     * @return EClientType
+     */
+    public static EClientType clientType(String clientId) {
+
+        if (StringUtils.isNoneBlank(clientId)) {
+
+            for (EClientType item : EClientType.values()) {
+
+                if (Lists.newArrayList(item.getClientId().split(",")).contains(clientId)) {
+
+                    return item;
+                }
+            }
+        }
+
+        return BACKEND;
+    }
+
+    public static EClientType clientName(String name) {
+
+        if (StringUtils.isNoneBlank(name)) {
+
+            for (EClientType item : EClientType.values()) {
+
+                if (Lists.newArrayList(item.name()).contains(name)) {
+
+                    return item;
+                }
+            }
+        }
+
+        return BACKEND;
+    }
+
+
+    /**
+     * 客户端对象比较
+     * @param code 客户端类型
+     * @return boolean
+     */
+    public boolean match(String code) {
+        return getCode().equals(code.toUpperCase());
+    }
+
+    /**
+     * jwtToken失效时间
+     * @param clientType 客户端类型
+     * @return boolean
+     */
+    public static boolean jwtTokenExpire(String clientType) {
+
+        List<EClientType> clientTypes = Lists.newArrayList(BACKEND, TEACHER);
+        for (EClientType item : clientTypes) {
+
+            // 需要设置token失效时间
+            if (item.getCode().equals(clientType)) {
+                return true;
+            }
+        }
+        return false;
+    }
+}

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/SysExamSongQueryInfo.java

@@ -44,6 +44,10 @@ public class SysExamSongQueryInfo extends QueryInfo {
 
     private Integer showFlag;
 
+    private Integer clientShowFlag;
+
+    private Boolean clientFlag;
+
     private Boolean enable;
 
     private String organId;

+ 137 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/ImGroupNoticeWrapper.java

@@ -0,0 +1,137 @@
+package com.ym.mec.biz.dal.wrapper;
+
+import com.alibaba.fastjson.JSON;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.ym.mec.biz.dal.enums.im.EClientType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Optional;
+
+/**
+ * 群公告
+ * 2022-11-26 10:55:18
+ */
+@ApiModel(value = "ImGroupNoticeWrapper对象", description = "群公告查询对象")
+public class ImGroupNoticeWrapper {
+
+    @Data
+	@Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel(" ImGroupNoticeQuery-群公告")
+    public static class ImGroupNoticeQuery implements QueryInfo {
+
+    	@ApiModelProperty("当前页")
+        private Integer page;
+
+        @ApiModelProperty("分页行数")
+        private Integer rows;
+
+        @ApiModelProperty("关键字匹配")
+		private String keyword;
+
+        @ApiModelProperty("群组ID")
+        private String groupId;
+
+        @ApiModelProperty("删除标记")
+        private Boolean delFlag;
+
+        public static ImGroupNoticeQuery from(String json) {
+            return JSON.parseObject(json, ImGroupNoticeQuery.class);
+        }
+
+        public Boolean getDelFlag() {
+            return Optional.ofNullable(delFlag).orElse(false);
+        }
+
+        public String getKeyword() {
+            return Optional.ofNullable(keyword).filter(StringUtils::isNotBlank).orElse(null);
+        }
+    }
+
+    @Data
+	@Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+	@ApiModel(" ImGroupNotice-群公告")
+    public static class ImGroupNotice {
+
+
+		@ApiModelProperty("主键")
+		private Long id;
+
+		@ApiModelProperty("群组ID")
+		private String groupId;
+
+		@ApiModelProperty("标题")
+		private String title;
+
+		@ApiModelProperty("内容")
+		private String content;
+
+		@ApiModelProperty("是否置顶")
+		private Boolean topFlag;
+
+		@ApiModelProperty("是否发送给新人")
+		private Boolean sentToNewMemberFlag;
+
+		@ApiModelProperty("操作人")
+		private Long operatorId;
+
+        @ApiModelProperty("操作用户身份")
+        private EClientType clientType;
+
+		@ApiModelProperty("是否删除1是0否;")
+		private Boolean delFlag;
+
+        @ApiModelProperty("IM消息ID")
+        private String messageSeqId;
+
+		@ApiModelProperty("修改时间")
+		private Date updateTime;
+
+		@ApiModelProperty("创建时间")
+		private Date createTime;
+
+        public static ImGroupNotice from(String json) {
+            return JSON.parseObject(json, ImGroupNotice.class);
+        }
+
+	}
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel(" 自定义群公告")
+    public static class CustomGroupNotice implements Serializable {
+
+        @ApiModelProperty("业务ID")
+        private String businessID;
+
+        @ApiModelProperty("群公告ID")
+        private String msgId;
+
+        @ApiModelProperty("群公告标题")
+        private String msgTitle;
+
+        @ApiModelProperty("群公告内容")
+        private String msgContent;
+
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
+
+        public String getBusinessID() {
+            return Optional.ofNullable(businessID).orElse("TC_GROUP_NOTICE");
+        }
+    }
+}

+ 11 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/MusicSheetWrapper.java

@@ -353,7 +353,6 @@ public class MusicSheetWrapper {
         @ApiModelProperty("曲目缓存")
         private String musicSvg;
 
-
         @ApiModelProperty("评测标准 节奏 AMPLITUDE 音准 FREQUENCY 分贝 DECIBELS")
         private EEvaluationStandard evaluationStandard;
 
@@ -420,6 +419,17 @@ public class MusicSheetWrapper {
         @ApiModelProperty("评测频率,详情返回,指定应用端")
         private String evaluationFrequency;
 
+        @ApiModelProperty("是否支持混音节拍器")
+        private Boolean isMixBeat;
+
+        @ApiModelProperty("总谱五线谱PDF文件")
+        private String musicPdfUrl;
+
+        @ApiModelProperty("总谱首调PDF文件")
+        private String firstPdfUrl;
+
+        @ApiModelProperty("总谱固定调PDF文件")
+        private String jianPdfUrl;
 
         @ApiModelProperty("曲目伴奏")
         private List<CbsMusicSheetWrapper.MusicSheetAccompaniment> musicSheetAccompanimentList;

+ 73 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/StudentWrapper.java

@@ -2,17 +2,15 @@ package com.ym.mec.biz.dal.wrapper;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
-import com.ym.mec.biz.dal.enums.EInGroupStatus;
-import com.ym.mec.biz.dal.enums.ELessonTrainingType;
-import com.ym.mec.biz.dal.enums.StandardEnum;
-import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
+import com.ym.mec.biz.dal.entity.CooperationOrgan;
+import com.ym.mec.biz.dal.enums.*;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import io.swagger.annotations.ApiOperation;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 
@@ -228,6 +226,76 @@ public class StudentWrapper {
 
         @ApiModelProperty(value = "合作机构ID")
         private Integer cooperationOrganId;
+    }
+
+    @Data
+    @ApiModel("班级在读学员列表")
+    public static class ClassStudentQuery {
+
+        @ApiModelProperty(value = "班级编号", required = false)
+        private Integer classGroupId;
+
+        @ApiModelProperty(value = "模糊匹配", required = false)
+        private String search;
+
+        @ApiModelProperty(value = "声部", required = false)
+        private Integer subjectId;
+
+        @ApiModelProperty(value = "有剩余时长的课程类型,(classroom,comprehensive,high,high_online,mix,single,training_mix,training_single,no_course)", required = false)
+        private String courseType;
+
+        @ApiModelProperty(value = "排序字段", required = false)
+        private String sortField;
+
+        @ApiModelProperty(value = "排序方式,ASC,DESC", required = false)
+        private String sortType;
+
+    }
+
+    @Data
+    @ApiModel("班级在读学员列表")
+    public static class ClassStudentDto {
+
+        @ApiModelProperty(value = "学生编号", required = false)
+        private Integer userId;
+
+        @ApiModelProperty(value = "学生姓名", required = false)
+        private String name;
+
+        @ApiModelProperty(value = "性别(0,女  1,男", required = false)
+        private Integer gender;
+
+        @ApiModelProperty(value = "实际科目名称", required = false)
+        private String subjectName;
+
+        @ApiModelProperty(value = "家长电话", required = false)
+        private String parentsPhone;
+
+        @ApiModelProperty(value = "乐团编号", required = false)
+        private String musicGroupId;
+
+        @ApiModelProperty(value = "声部课剩余时长", required = false)
+        private Integer single;
+
+        @ApiModelProperty(value = "合奏课剩余时长", required = false)
+        private Integer mix;
+
+        @ApiModelProperty(value = "课堂课剩余时长", required = false)
+        private Integer classroom;
+
+        @ApiModelProperty(value = "综合课剩余时长", required = false)
+        private Integer comprehensive;
+
+        @ApiModelProperty(value = "基础技能课剩余时长", required = false)
+        private Integer high;
+
+        @ApiModelProperty(value = "线上基础技能课剩余时长", required = false)
+        private Integer highOnline;
+
+        @ApiModelProperty(value = "集训声部课剩余时长", required = false)
+        private Integer trainingSingle;
 
+        @ApiModelProperty(value = "集训合奏课剩余时长", required = false)
+        private Integer trainingMix;
     }
 }

+ 302 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/TempDirectorTrainingCampDetailWrapper.java

@@ -0,0 +1,302 @@
+package com.ym.mec.biz.dal.wrapper;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import com.ym.mec.biz.dal.dto.PayParamBasicDto;
+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.NotEmpty;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@ApiModel(value = "TempDirectorTrainingCampDetailWrapper对象")
+public class TempDirectorTrainingCampDetailWrapper {
+
+
+    @Data
+    @ApiModel("PayDto")
+    public static class PayDto extends PayParamBasicDto {
+
+        @ApiModelProperty(value = "训练营详情编号",required = false)
+        private Integer tempDirectorTrainingCampDetailId;
+    }
+
+    @Data
+    @ApiModel("UserDetail")
+    public static class UserDetail {
+
+        @ApiModelProperty(value = "身份证号")
+        private String cardNo;
+
+        @ApiModelProperty(value = "手机号")
+        private String mobile;
+
+        @ApiModelProperty(value = "训练营编号")
+        private Integer tempDirectorTrainingCampId;
+    }
+
+    @Data
+    @ApiModel("UserPayDetail")
+    public static class UserPayDetail {
+
+        @ApiModelProperty(value = "用户名")
+        private String username;
+
+        @ApiModelProperty(value = "训练营名称")
+        private String campName;
+
+        @ApiModelProperty(value = "训练营详情编号")
+        private Integer campDetailId;
+    }
+
+    @Data
+    @ApiModel("ApplyCampResult")
+    public static class ApplyCampResult {
+        @ApiModelProperty(value = "支付状态")
+        private String paymentStatus;
+
+        @ApiModelProperty(value = "训练营详情编号")
+        private Integer campDetailId;
+    }
+
+    @Data
+    @ApiModel(" applyCamp-新增/修改")
+    public static class ApplyCamp {
+
+        @ApiModelProperty(value = "训练营编号")
+        @NotNull(message = "训练营编号不能为空")
+        private Integer tempDirectorTrainingCampId;
+
+        @ApiModelProperty(value = "姓名")
+        @NotEmpty(message = "请输入您的真实姓名")
+        @Pattern(regexp = "^[\\u4e00-\\u9fa5]{2,10}$", message = "姓名必须是2到10个中文字符")
+        private String username;
+
+        @ApiModelProperty(value = "手机号")
+        @NotEmpty(message = "手机号不能为空")
+        @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
+        private String mobile;
+
+        @ApiModelProperty(value = "身份证号")
+        @NotEmpty(message = "身份证号不能为空")
+        @Pattern(regexp = "(^\\d{6}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}(\\d|X|x)$)|(^\\d{6}\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}$)", message = "身份证号格式不正确")
+        private String cardNo;
+
+        @ApiModelProperty(value = "省份")
+        @NotEmpty(message = "请选择您所在的城市")
+        @Pattern(regexp = "^[\\u4e00-\\u9fa5]{2,20}$", message = "省份名称必须是2到20个中文字符")
+        private String province;
+
+        @ApiModelProperty(value = "省份")
+        private String provinceCode;
+
+        @ApiModelProperty(value = "城市")
+        private String cityCode;
+
+        @ApiModelProperty(value = "城市")
+        private String city;
+
+        @ApiModelProperty(value = "区县")
+        private String regionCode;
+
+        @ApiModelProperty(value = "区县")
+        private String region;
+
+        @ApiModelProperty(value = "职业")
+        @NotEmpty(message = "请选择目前从事的职业")
+        private String job;
+
+        @ApiModelProperty(value = "声部")
+        @NotEmpty(message = "请选择您的专业")
+        private String subjectName;
+
+        @ApiModelProperty(value = "之前乐队指导学习基础")
+        @NotEmpty(message = "请选择学习基础")
+        private String study;
+
+        @ApiModelProperty(value = "目标效果")
+        private String studyTarget;
+
+        @ApiModelProperty(value = "需求或建议")
+        private String suggestion;
+
+        @ApiModelProperty(value = "验证码")
+        private String authCode;
+    }
+
+    @Data
+    public static class TempDirectorTrainingCampDetailQuery implements QueryInfo {
+        /**
+         * 默认当前页码
+         */
+        private Integer page = 1;
+        /**
+         * 默认页码大小
+         */
+        private Integer rows = 20;
+
+        @ApiModelProperty(value = "用户姓名/手机号")
+        private String search;
+
+        @ApiModelProperty(value = "训练营编号")
+        private Integer tempDirectorTrainingCampId;
+
+        @ApiModelProperty(value = "省份")
+        private String provinceCode;
+
+        @ApiModelProperty(value = "城市")
+        private String cityCode;
+
+
+        @ApiModelProperty(value = "区县")
+        private String regionCode;
+
+
+        @ApiModelProperty(value = "已缴费 PAID,未缴费 NO,已退费 REFUND")
+        private String paymentStatus;
+    }
+
+    @Data
+    public static class TempDirectorTrainingCampDetail {
+
+
+        @ApiModelProperty(value = "主键")
+        @ExcelIgnore
+        private Integer id;
+
+        @ApiModelProperty(value = "训练营编号")
+        @ExcelIgnore
+        private Integer tempDirectorTrainingCampId;
+
+        @ApiModelProperty(value = "姓名")
+        @ExcelProperty(value = "姓名",order = 1)
+        private String username;
+
+        @ApiModelProperty(value = "手机号")
+        @ExcelProperty(value = "联系电话",order = 2)
+        private String mobile;
+
+        @ApiModelProperty(value = "身份证号")
+        @ExcelProperty(value = "身份证号",order = 3)
+        private String cardNo;
+
+        @ApiModelProperty(value = "省份")
+        @ExcelIgnore
+        private String province;
+
+        @ApiModelProperty(value = "省份")
+        @ExcelIgnore
+        private String provinceCode;
+
+        @ApiModelProperty(value = "城市")
+        @ExcelIgnore
+        private String cityCode;
+
+        @ApiModelProperty(value = "城市")
+        @ExcelIgnore
+        private String city;
+
+        @ApiModelProperty(value = "区县")
+        @ExcelIgnore
+        private String regionCode;
+
+        @ApiModelProperty(value = "区县")
+        @ExcelIgnore
+        private String region;
+
+        @ExcelProperty(value = "所在城市",order = 4)
+        private String cityInfo;
+
+        @ApiModelProperty(value = "已缴费 PAID,未缴费 NO,已退费 REFUND")
+        @ExcelIgnore
+        private String paymentStatus = "NO";
+
+        @ExcelProperty(value = "缴费状态",order = 10)
+        private String paymentStatusName;
+
+        @ApiModelProperty(value = "缴费金额")
+        @ExcelProperty(value = "缴费金额",order = 11)
+        private String paymentAmount;
+
+        @ApiModelProperty(value = "是否早鸟报名")
+        @ExcelIgnore
+        private Boolean birdFlag = false;
+
+        @ApiModelProperty(value = "缴费时间")
+        @ExcelIgnore
+        private Date paymentDate;
+
+        @ApiModelProperty(value = "缴费时间")
+        @ExcelProperty(value = "缴费时间",order = 12)
+        private String paymentDateStr;
+
+        @ApiModelProperty(value = "职业")
+        @ExcelProperty(value = "目前从事职业",order = 5)
+        private String job;
+
+        @ApiModelProperty(value = "声部")
+        @ExcelProperty(value = "第一主专业",order = 6)
+        private String subjectName;
+
+        @ApiModelProperty(value = "之前乐队指导学习基础")
+        @ExcelProperty(value = "之前乐队指导学习基础",order = 7)
+        private String study;
+
+        @ApiModelProperty(value = "目标效果")
+        @ExcelProperty(value = "目标效果",order = 8)
+        private String studyTarget;
+
+        @ApiModelProperty(value = "需求或建议")
+        @ExcelProperty(value = "需求或建议",order = 9)
+        private String suggestion;
+
+        @ApiModelProperty(value = "创建时间")
+        @ExcelIgnore
+        private Date createTime;
+
+        @ApiModelProperty(value = "修改时间")
+        @ExcelIgnore
+        private Date updateTime;
+    }
+
+
+    @Data
+    public static class TempDirectorTrainingCampDetailStat {
+
+        @ApiModelProperty("报名人数")
+        private Integer applyCount;
+
+        @ApiModelProperty("缴费人数")
+        private Integer payCount;
+
+        @ApiModelProperty("早鸟人数")
+        private Integer birdCount;
+
+        @ApiModelProperty("收款金额")
+        private BigDecimal payAmount;
+
+    }
+
+
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class DownloadInfo {
+
+        @ApiModelProperty("文件名称")
+        private String fileName;
+
+        @ApiModelProperty("下载地址")
+        private String downloadPath;
+
+    }
+}

+ 136 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/TempDirectorTrainingCampWrapper.java

@@ -0,0 +1,136 @@
+package com.ym.mec.biz.dal.wrapper;
+
+import com.microsvc.toolkit.common.response.paging.QueryInfo;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+@ApiModel(value = "TempDirectorTrainingCampWrapper对象")
+public class TempDirectorTrainingCampWrapper {
+
+
+    @Data
+    @ApiModel(" AddCamp-新增/修改")
+    public static class AddCamp {
+
+        @ApiModelProperty(value = "主键")
+        private Integer id;
+
+        @ApiModelProperty(value = "特训营名称")
+        @NotNull(message = "特训营名称不能为空")
+        private String name;
+
+        @ApiModelProperty(value = "报名开始时间")
+        @NotNull(message = "报名开始时间不能为空")
+        private Date applyStartDate;
+
+        @ApiModelProperty(value = "报名截止时间")
+        @NotNull(message = "报名截止时间不能为空")
+        private Date applyEndDate;
+
+        @ApiModelProperty(value = "是否配置早鸟价")
+        @NotNull(message = "是否配置早鸟价不能为空")
+        private Boolean hasBirdPrice;
+
+        @ApiModelProperty(value = "早鸟价截止日期")
+        private Date birdPriceEndDate;
+
+        @ApiModelProperty(value = "早鸟价")
+        private BigDecimal birdPrice;
+
+        @ApiModelProperty(value = "优惠价")
+        @NotNull(message = "优惠价不能为空")
+        private BigDecimal currentPrice;
+
+        @ApiModelProperty(value = "原价")
+        @NotNull(message = "原价不能为空")
+        private BigDecimal originalPrice;
+
+        @ApiModelProperty(value = "修改人")
+        private Integer updateBy;
+    }
+
+
+    @Data
+    public static class TempDirectorTrainingCampQueryInfo implements QueryInfo {
+
+
+        /**
+         * 默认当前页码
+         */
+        private Integer page = 1;
+        /**
+         * 默认页码大小
+         */
+        private Integer rows = 20;
+
+        @ApiModelProperty(value = "特训营名称")
+        private String search;
+
+
+        @ApiModelProperty(value = "未开始 NOT_START,报名中 APPLY,已结束 END ")
+        private String status;
+
+    }
+
+    @Data
+    public static class TempDirectorTrainingCamp{
+
+        @ApiModelProperty(value = "主键")
+        private Integer id;
+
+        @ApiModelProperty(value = "活动名称")
+        private String name;
+
+        @ApiModelProperty(value = "报名开始日期")
+        private Date applyStartDate;
+
+        @ApiModelProperty(value = "报名结束日期")
+        private Date applyEndDate;
+
+
+        @ApiModelProperty(value = "是否配置早鸟价")
+        private Boolean hasBirdPrice;
+
+        @ApiModelProperty(value = "早鸟价截止日期")
+        private Date birdPriceEndDate;
+
+        @ApiModelProperty(value = "早鸟价")
+        private BigDecimal birdPrice;
+
+        @ApiModelProperty(value = "优惠价")
+        private BigDecimal currentPrice;
+
+        @ApiModelProperty(value = "原价")
+        private BigDecimal originalPrice;
+
+        @ApiModelProperty(value = "未开始 NOT_START,报名中 APPLY,已结束 END ")
+        private String status;
+
+        @ApiModelProperty("报名人数")
+        private Integer applyCount;
+
+        @ApiModelProperty("缴费人数")
+        private Integer payCount;
+
+        @ApiModelProperty("收款金额")
+        private BigDecimal payAmount;
+
+        @ApiModelProperty(value = "修改人")
+        private Integer updateBy;
+
+        @ApiModelProperty(value = "修改人名称")
+        private String updateByName;
+
+        @ApiModelProperty(value = "创建时间")
+        private Date createTime;
+
+        @ApiModelProperty(value = "修改时间")
+        private Date updateTime;
+
+    }
+}

+ 29 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/CbsMusicScoreCategoriesService.java

@@ -0,0 +1,29 @@
+package com.ym.mec.biz.service;
+
+
+import com.dayaedu.cbs.openfeign.wrapper.music.MusicSheetCategoriesWrapper;
+import com.ym.mec.auth.api.dto.MusicScoreQueryInfo;
+import com.ym.mec.biz.dal.entity.SysMusicScoreCategories;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+import java.util.Map;
+
+public interface CbsMusicScoreCategoriesService {
+
+    List<SysMusicScoreCategories> queryTree(MusicScoreQueryInfo menuQueryInfo);
+
+    SysMusicScoreCategories getChildTree(SysMusicScoreCategories sysMusicScoreCategories);
+
+    List<Integer> getAllCategoryIdList(String categoriesIds);
+
+    List<SysMusicScoreCategories> queryByIds(String ids);
+
+    List<SysMusicScoreCategories> queryCategoriesTreeList(String categoryIdList, Boolean isQueryEnable);
+
+    Map<Integer,String> getCategoriesNameMap(List<Integer> categoriesIds);
+
+    List<SysMusicScoreCategories> queryTreeByAppId();
+
+    SysMusicScoreCategories getChildTreeById(Long var1);
+}

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupStudentMapperService.java

@@ -8,6 +8,7 @@ import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
 import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.wrapper.StudentWrapper;
 import com.ym.mec.common.service.BaseService;
 
 import java.io.IOException;
@@ -42,7 +43,7 @@ public interface ClassGroupStudentMapperService extends BaseService<Long, ClassG
      * @param status
      * @return
      */
-    List<StudentRegistration> findClassStudentList(Integer classGroupId, ClassGroupStudentStatusEnum status);
+    List<StudentWrapper.ClassStudentDto> findAllStudent(StudentWrapper.ClassStudentQuery query);
 
     /**
      * 调整班级

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ImGroupNoticeService.java

@@ -21,4 +21,10 @@ public interface ImGroupNoticeService extends BaseService<Long, ImGroupNotice> {
 	void modify(ImGroupNotice imGroupNotice);
 
 	ImGroupNoticeDao getDao();
+
+    Long add(ImGroupNotice imGroupNotice);
+
+	void del(Long id);
+
+	ImGroupNoticeDto getNotice(Long id);
 }

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

@@ -7,6 +7,8 @@ import com.ym.mec.biz.dal.mapper.LessonCoursewareMapper;
 import com.ym.mec.biz.dal.entity.LessonCourseware;
 import com.ym.mec.biz.dal.wrapper.LessonCoursewareWrapper;
 
+import java.util.List;
+
 public interface LessonCoursewareService extends IService<LessonCourseware> {
 
     LessonCoursewareMapper getDao();
@@ -20,6 +22,6 @@ public interface LessonCoursewareService extends IService<LessonCourseware> {
     //获取课件适用范围
     LessonCoursewareWrapper.UpdateRangeDetail getRangeType(Integer lessonCoursewareId);
 
-    CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail getLessonCourseDetail(Long id);
+    CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail getLessonCourseDetail(Long id,List<Integer> categoryIdList);
 }
 

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

@@ -17,4 +17,6 @@ public interface SmsCodeService {
 	 * @return
 	 */
 	boolean sendValidCode(String mobile,String jpushType) throws Exception;
+
+	boolean sendValidCode(String mobile, String jpushType, String type);
 }

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

@@ -10,6 +10,7 @@ import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
 import java.util.List;
+import java.util.Map;
 
 public interface SysMusicScoreAccompanimentService extends BaseService<String, SysMusicScoreAccompaniment> {
 
@@ -19,6 +20,10 @@ public interface SysMusicScoreAccompanimentService extends BaseService<String, S
 
     List<SysMusicScoreAccompaniment> queryAccPage(SysExamSongQueryInfo queryInfo);
 
+    List<SysMusicScoreAccompaniment> queryAccPage(List<Integer> musicSheetIds,List<CbsMusicSheetWrapper.MusicSheetApplication> applications);
+
+    List<SysMusicScoreAccompaniment> queryAccPage(Map<String, Object> params);
+
     List<Subject> querySubjectIds(Integer categoriesId);
 
     PageInfo<SysMusicScoreAccompaniment> queryScorePage(SysExamSongQueryInfo queryInfo);

+ 29 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TempDirectorTrainingCampDetailService.java

@@ -0,0 +1,29 @@
+package com.ym.mec.biz.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.microsvc.toolkit.common.response.paging.PageInfo;
+import com.ym.mec.biz.dal.dao.TempDirectorTrainingCampDetailDao;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.entity.TempDirectorTrainingCampDetail;
+import com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampDetailWrapper;
+import com.ym.mec.common.entity.HttpResponseResult;
+
+public interface TempDirectorTrainingCampDetailService extends IService<TempDirectorTrainingCampDetail> {
+
+    TempDirectorTrainingCampDetailDao getDao();
+
+    TempDirectorTrainingCampDetailWrapper.ApplyCampResult applyCamp(TempDirectorTrainingCampDetailWrapper.ApplyCamp applyCamp);
+
+    TempDirectorTrainingCampDetailWrapper.UserPayDetail detail(Integer campId);
+
+    HttpResponseResult pay(TempDirectorTrainingCampDetailWrapper.PayDto payDto) throws Exception;
+
+    Boolean orderCallback(StudentPaymentOrder order);
+
+    IPage<TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetail> queryPage(IPage<Object> page, TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailQuery queryInfo);
+
+    TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailStat queryPageStat(TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailQuery queryInfo);
+}
+
+

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TempDirectorTrainingCampService.java

@@ -0,0 +1,20 @@
+package com.ym.mec.biz.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ym.mec.biz.dal.dao.TempDirectorTrainingCampDao;
+import com.ym.mec.biz.dal.entity.TempDirectorTrainingCamp;
+import com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampWrapper;
+
+public interface TempDirectorTrainingCampService extends IService<TempDirectorTrainingCamp> {
+
+    TempDirectorTrainingCampDao getDao();
+
+    void add(TempDirectorTrainingCampWrapper.AddCamp dto);
+
+    void modify(TempDirectorTrainingCampWrapper.AddCamp dto);
+
+    IPage<TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp> queryPage(IPage<TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp> page, TempDirectorTrainingCampWrapper.TempDirectorTrainingCampQueryInfo queryInfo);
+}
+
+

+ 200 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CbsMusicScoreCategoriesServiceImpl.java

@@ -0,0 +1,200 @@
+package com.ym.mec.biz.service.impl;
+
+
+import com.dayaedu.cbs.openfeign.client.MusicFeignClientService;
+import com.dayaedu.cbs.openfeign.wrapper.music.MusicSheetCategoriesWrapper;
+import com.microsvc.toolkit.common.response.template.R;
+import com.ym.mec.auth.api.dto.MusicScoreQueryInfo;
+import com.ym.mec.biz.dal.entity.SysMusicScoreCategories;
+import com.ym.mec.biz.service.CbsMusicScoreCategoriesService;
+import com.ym.mec.common.exception.BizException;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Service
+public class CbsMusicScoreCategoriesServiceImpl implements CbsMusicScoreCategoriesService {
+
+	@Resource
+	private MusicFeignClientService musicFeignClientService;
+	@Value("${openfeign-client.app-id:1745637981387108354}")
+	public Long applicationId;
+
+	@Override
+	public List<SysMusicScoreCategories> queryTree(MusicScoreQueryInfo menuQueryInfo) {
+		MusicSheetCategoriesWrapper.MusicSheetCategoriesQuery query = new MusicSheetCategoriesWrapper.MusicSheetCategoriesQuery();
+		query.setPage(menuQueryInfo.getPage());
+		query.setRows(menuQueryInfo.getRows());
+		query.setKeyword(menuQueryInfo.getSearch());
+		query.setParentId(menuQueryInfo.getParentId().longValue());
+		query.setEnable(menuQueryInfo.getEnable());
+		R<List<MusicSheetCategoriesWrapper.MusicSheetCategories>> listR = musicFeignClientService.queryTree(query);
+		if (listR.getCode() != 200) {
+			throw new BizException("查询曲目分类失败,{}", listR.getMessage());
+		}
+		List<MusicSheetCategoriesWrapper.MusicSheetCategories> musicSheetCategories = listR.feignData();
+		return musicSheetCategories.stream().map(this::convertMusicSheetCategoryToSysMusicScoreCategory).collect(Collectors.toList());
+	}
+
+	@Override
+	public SysMusicScoreCategories getChildTree(SysMusicScoreCategories sysMusicScoreCategories) {
+		R<MusicSheetCategoriesWrapper.MusicSheetCategories> childTree = musicFeignClientService.getChildTree(convertSysMusicScoreCategoryToMusicSheetCategory(sysMusicScoreCategories));
+		if (childTree.getCode() != 200) {
+			throw new BizException("查询曲目分类失败,{}", childTree.getMessage());
+		}
+		MusicSheetCategoriesWrapper.MusicSheetCategories musicSheetCategories = childTree.feignData();
+		if (musicSheetCategories != null) {
+			return convertMusicSheetCategoryToSysMusicScoreCategory(musicSheetCategories);
+		}
+		return sysMusicScoreCategories;
+	}
+
+	@Override
+	public List<Integer> getAllCategoryIdList(String categoriesIds) {
+		R<List<Integer>> allCategoryIdList = musicFeignClientService.getAllCategoryIdList(categoriesIds);
+		if (allCategoryIdList.getCode() != 200) {
+			throw new BizException("查询曲目分类失败,{}", allCategoryIdList.getMessage());
+		}
+		return allCategoryIdList.feignData();
+	}
+
+	@Override
+	public List<SysMusicScoreCategories> queryByIds(String ids) {
+		if (StringUtils.isEmpty(ids)) {
+			return new ArrayList<>();
+		}
+		R<List<MusicSheetCategoriesWrapper.MusicSheetCategories>> listR = musicFeignClientService.findByIds(ids);
+		if (listR.getCode() != 200) {
+			throw new BizException("查询曲目分类失败,{}", listR.getMessage());
+		}
+		List<MusicSheetCategoriesWrapper.MusicSheetCategories> musicSheetCategories = listR.feignData();
+		return musicSheetCategories.stream().map(this::convertMusicSheetCategoryToSysMusicScoreCategory).collect(Collectors.toList());
+	}
+
+	@Override
+	public List<SysMusicScoreCategories> queryCategoriesTreeList(String categoryIds, Boolean isQueryEnable) {
+		categoryIds = categoryIds.endsWith(",") ? categoryIds.substring(0, categoryIds.length() - 1) : categoryIds;
+		List<SysMusicScoreCategories> categoryList = this.queryByIds(categoryIds);
+		if(CollectionUtils.isNotEmpty(categoryList)){
+			String collect = categoryList.stream().map(SysMusicScoreCategories::getParentId).distinct().map(Object::toString).collect(Collectors.joining(","));
+			List<Integer> categoryListIds = categoryList.stream().map(SysMusicScoreCategories::getId).collect(Collectors.toList());
+			List<SysMusicScoreCategories> sysMusicScoreCategories = this.queryByIds(collect);
+			List<SysMusicScoreCategories> rows = new ArrayList<SysMusicScoreCategories>();
+			for (SysMusicScoreCategories musicScoreCategories : sysMusicScoreCategories) {
+				rows.add(this.getChildTree(musicScoreCategories));
+			}
+			for (SysMusicScoreCategories row : rows) {
+				//剔除子集不包含在categoryListIds中的数据
+				List<SysMusicScoreCategories> sysMusicScoreCategoriesList = row.getSysMusicScoreCategoriesList();
+				if(CollectionUtils.isNotEmpty(sysMusicScoreCategoriesList)){
+					sysMusicScoreCategoriesList.removeIf(e -> !categoryListIds.contains(e.getId()));
+				}
+			}
+			return rows;
+		}
+		return new ArrayList<>();
+	}
+
+	@Override
+	public Map<Integer, String> getCategoriesNameMap(List<Integer> categoriesIds) {
+		R<Map<Integer, String>> mapR = musicFeignClientService.getCategoryNames(categoriesIds);
+		if (mapR.getCode() != 200) {
+			throw new BizException("查询曲目分类失败,{}", mapR.getMessage());
+		}
+		return mapR.feignData();
+	}
+
+	@Override
+	public List<SysMusicScoreCategories> queryTreeByAppId() {
+		R<List<MusicSheetCategoriesWrapper.MusicSheetCategories>> listR = musicFeignClientService.queryTreeByAppId(applicationId);
+		if (listR.getCode() != 200) {
+			throw new BizException("查询曲目分类失败,{}", listR.getMessage());
+		}
+		List<MusicSheetCategoriesWrapper.MusicSheetCategories> musicSheetCategories = listR.feignData();
+		return musicSheetCategories.stream().map(this::convertMusicSheetCategoryToSysMusicScoreCategory).collect(Collectors.toList());
+	}
+
+	@Override
+	public SysMusicScoreCategories getChildTreeById(Long var1) {
+		R<MusicSheetCategoriesWrapper.MusicSheetCategories> childTreeById = musicFeignClientService.getChildTreeById(var1);
+		if (childTreeById.getCode() != 200) {
+			throw new BizException("查询曲目分类失败,{}", childTreeById.getMessage());
+		}
+		MusicSheetCategoriesWrapper.MusicSheetCategories musicSheetCategories = childTreeById.feignData();
+		if (musicSheetCategories != null) {
+			return convertMusicSheetCategoryToSysMusicScoreCategory(musicSheetCategories);
+		}
+		return null;
+	}
+
+	public SysMusicScoreCategories getParentTree(SysMusicScoreCategories sysMusicScoreCategories) {
+		if (sysMusicScoreCategories != null && sysMusicScoreCategories.getParentId() > 0) {
+			List<SysMusicScoreCategories> categories = this.queryByIds(sysMusicScoreCategories.getParentId().toString());
+			if (CollectionUtils.isNotEmpty(categories)) {
+				SysMusicScoreCategories parentCategories = categories.get(0);
+				if (parentCategories != null) {
+					if(parentCategories.getParentId() > 0){
+						return getParentTree(parentCategories);
+					}
+					return parentCategories;
+				}
+			}
+		}
+		return null;
+	}
+
+
+	private void insertSubToParent(List<SysMusicScoreCategories> parentTree, SysMusicScoreCategories targetCategory) {
+		for (SysMusicScoreCategories target : parentTree) {
+			if (CollectionUtils.isEmpty(targetCategory.getSysMusicScoreCategoriesList())) {
+				return;
+			}
+			if (targetCategory.getId().intValue() == target.getId()) {
+				insertSubToParent(target.getSysMusicScoreCategoriesList(),targetCategory.getSysMusicScoreCategoriesList().get(0));
+				return;
+			}
+		}
+		parentTree.add(targetCategory);
+	}
+
+	private MusicSheetCategoriesWrapper.MusicSheetCategories convertSysMusicScoreCategoryToMusicSheetCategory(SysMusicScoreCategories sysMusicScoreCategory) {
+		MusicSheetCategoriesWrapper.MusicSheetCategories musicSheetCategory = new MusicSheetCategoriesWrapper.MusicSheetCategories();
+		musicSheetCategory.setId(Long.valueOf(sysMusicScoreCategory.getId()));
+		musicSheetCategory.setName(sysMusicScoreCategory.getName());
+		musicSheetCategory.setParentId(Long.valueOf(sysMusicScoreCategory.getParentId()));
+		musicSheetCategory.setEnable(sysMusicScoreCategory.getEnable());
+		musicSheetCategory.setCoverImg(sysMusicScoreCategory.getCoverImg());
+		musicSheetCategory.setMusicSheetNum(sysMusicScoreCategory.getMusicScoreNum());
+		List<SysMusicScoreCategories> sysMusicScoreCategoriesList = sysMusicScoreCategory.getSysMusicScoreCategoriesList();
+		if(CollectionUtils.isNotEmpty(sysMusicScoreCategoriesList)){
+			List<MusicSheetCategoriesWrapper.MusicSheetCategories> categoriesList = sysMusicScoreCategoriesList.stream()
+					.map(this::convertSysMusicScoreCategoryToMusicSheetCategory).collect(Collectors.toList());
+			musicSheetCategory.setMusicSheetCategoriesList(categoriesList);
+		}
+		return musicSheetCategory;
+	}
+
+	private SysMusicScoreCategories convertMusicSheetCategoryToSysMusicScoreCategory(MusicSheetCategoriesWrapper.MusicSheetCategories musicSheetCategory) {
+		SysMusicScoreCategories sysMusicScoreCategory = new SysMusicScoreCategories();
+		sysMusicScoreCategory.setId(musicSheetCategory.getId().intValue());
+		sysMusicScoreCategory.setName(musicSheetCategory.getName());
+		sysMusicScoreCategory.setParentId(musicSheetCategory.getParentId().intValue());
+		sysMusicScoreCategory.setEnable(musicSheetCategory.getEnable());
+		sysMusicScoreCategory.setCoverImg(musicSheetCategory.getCoverImg());
+		sysMusicScoreCategory.setMusicScoreNum(musicSheetCategory.getMusicSheetNum());
+		List<MusicSheetCategoriesWrapper.MusicSheetCategories> categoriesList = musicSheetCategory.getMusicSheetCategoriesList();
+		if(CollectionUtils.isNotEmpty(categoriesList)){
+			List<SysMusicScoreCategories> sysMusicScoreCategoriesList = categoriesList.stream()
+					.map(this::convertMusicSheetCategoryToSysMusicScoreCategory).collect(Collectors.toList());
+			sysMusicScoreCategory.setSysMusicScoreCategoriesList(sysMusicScoreCategoriesList);
+		}
+		return sysMusicScoreCategory;
+	}
+}

+ 6 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CbsMusicSheetServiceImpl.java

@@ -3,17 +3,14 @@ package com.ym.mec.biz.service.impl;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.dayaedu.cbs.common.enums.music.EMusicSourceType;
-import com.dayaedu.cbs.common.enums.school.EMusicSheetType;
 import com.dayaedu.cbs.openfeign.service.CbsMusicSheetService;
 import com.dayaedu.cbs.openfeign.wrapper.music.*;
 import com.microsvc.toolkit.common.response.paging.PageInfo;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
 import com.ym.mec.biz.dal.dao.SysUserTenantDao;
 import com.ym.mec.biz.dal.entity.Instrument;
-import com.ym.mec.biz.dal.entity.Subject;
 import com.ym.mec.biz.dal.entity.SysMusicScore;
 import com.ym.mec.biz.service.InstrumentService;
-import com.ym.mec.biz.service.SubjectService;
 import com.ym.mec.biz.service.SysMusicScoreCategoriesService;
 import com.ym.mec.biz.service.SysMusicScoreService;
 import com.ym.mec.common.exception.BizException;
@@ -38,8 +35,6 @@ public class CbsMusicSheetServiceImpl implements CbsMusicSheetService {
     @Resource
     private SysMusicScoreCategoriesService sysMusicScoreCategoriesService;
     @Resource
-    private SubjectService subjectService;
-    @Resource
     private SysUserTenantDao sysUserTenantDao;
     @Resource
     private InstrumentService instrumentService;
@@ -53,11 +48,12 @@ public class CbsMusicSheetServiceImpl implements CbsMusicSheetService {
         List<Long> cbsMusicSheetIds = addMusicSheet.stream().map(CbsMusicSheetApplicationExtendWrapper.MusicSheetApplicationExtend::getMusicSheetId).collect(Collectors.toList());
         for (CbsMusicSheetApplicationExtendWrapper.MusicSheetApplicationExtend extend : addMusicSheet) {
             CbsMusicSheetApiWrapper.MusicSheetUpdate musicSheetUpdate = extend.getMusicSheetUpdate();
-            if(StringUtils.isNotBlank(musicSheetUpdate.getSubjectIds())) {
-                List<Long> cbsSubjectIds = Arrays.stream(musicSheetUpdate.getSubjectIds().split(",")).map(Long::parseLong).collect(Collectors.toList());
-                List<Subject> subjectIds = subjectService.getDao().queryCbsList(cbsSubjectIds);
-                if (CollectionUtils.isNotEmpty(subjectIds)) {
-                    musicSheetUpdate.setSubjectIds(subjectIds.stream().map(e -> e.getId().toString()).collect(Collectors.joining(",")));
+            if(StringUtils.isNotBlank(musicSheetUpdate.getMusicalInstrumentIds())) {
+                List<Instrument> instruments = instrumentService.lambdaQuery()
+                        .in(Instrument::getId, Arrays.stream(musicSheetUpdate.getMusicalInstrumentIds().split(","))
+                                .map(Integer::parseInt).collect(Collectors.toList())).list();
+                if (CollectionUtils.isNotEmpty(instruments)) {
+                    musicSheetUpdate.setSubjectIds(instruments.stream().map(e -> e.getSubjectId().toString()).distinct().collect(Collectors.joining(",")));
                 }
             }
         }

+ 67 - 22
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java

@@ -5,17 +5,19 @@ import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.ClassGroupStudentInfoDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
+import com.ym.mec.biz.dal.wrapper.StudentWrapper;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.http.HttpUtil;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import javax.annotation.Resource;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.util.*;
@@ -24,42 +26,42 @@ import java.util.stream.Collectors;
 @Service
 public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, ClassGroupStudentMapper> implements ClassGroupStudentMapperService {
 
-    @Autowired
+    @Resource
     private ClassGroupStudentMapperDao classGroupStudentMapperDao;
-    @Autowired
+    @Resource
     private CourseScheduleService courseScheduleService;
-    @Autowired
+    @Resource
     private StudentRegistrationService studentRegistrationService;
-    @Autowired
+    @Resource
     private CourseScheduleStudentPaymentService courseScheduleStudentPaymentService;
-    @Autowired
+    @Resource
     private ClassGroupService classGroupService;
-    @Autowired
+    @Resource
     private ClassGroupRelationService classGroupRelationService;
-    @Autowired
+    @Resource
     private ImGroupMemberService imGroupMemberService;
-    @Autowired
+    @Resource
     private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
-    @Autowired
+    @Resource
     private ClassGroupTeacherMapperService classGroupTeacherMapperService;
-    @Autowired
+    @Resource
     private CourseScheduleTeacherSalaryService courseScheduleTeacherSalaryService;
-    @Autowired
+    @Resource
     private TeacherDefaultMusicGroupSalaryService teacherDefaultMusicGroupSalaryService;
-    @Autowired
+    @Resource
     private StudentDao studentDao;
-    @Autowired
+    @Resource
     private CourseScheduleDao courseScheduleDao;
-    @Autowired
+    @Resource
     private ClassGroupDao classGroupDao;
-    @Autowired
+    @Resource
     private MusicGroupDao musicGroupDao;
-
-    @Autowired
+    @Resource
     private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
-
-    @Autowired
+    @Resource
     private ImUserFriendService imUserFriendService;
+    @Resource
+    private MusicGroupPaymentStudentCourseDetailDao musicGroupPaymentStudentCourseDetailDao;
 
     private static String holidayUrl = "http://tool.bitefu.net/jiari/?d=";
 
@@ -197,8 +199,51 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
     }
 
     @Override
-    public List<StudentRegistration> findClassStudentList(Integer classGroupId, ClassGroupStudentStatusEnum status) {
-        return classGroupStudentMapperDao.findClassStudentList(classGroupId, status);
+    public List<StudentWrapper.ClassStudentDto> findAllStudent(StudentWrapper.ClassStudentQuery query) {
+        List<StudentWrapper.ClassStudentDto> studentDtos = classGroupStudentMapperDao.findAllStudent(query);
+        if(CollectionUtils.isEmpty(studentDtos)){
+            return studentDtos;
+        }
+        //获取乐团学员剩余排课时长
+        String musicGroupId = studentDtos.get(0).getMusicGroupId();
+        List<Integer> studentIds = studentDtos.stream().map(StudentWrapper.ClassStudentDto::getUserId).collect(Collectors.toList());
+        List<StudentWrapper.ClassStudentDto> studentCourseDetails =
+                musicGroupPaymentStudentCourseDetailDao.findStudentCourseDetail(musicGroupId, studentIds,query);
+        if(StringUtils.isNotEmpty(query.getCourseType()) || StringUtils.isNotEmpty(query.getSortType()) || StringUtils.isNotEmpty(query.getSortField())){
+            if (CollectionUtils.isEmpty(studentCourseDetails)){
+                return new ArrayList<>();
+            }
+            Map<Integer,StudentWrapper.ClassStudentDto> studentDtoMap = studentDtos.stream()
+                    .collect(Collectors.toMap(StudentWrapper.ClassStudentDto::getUserId, s -> s, (s1, s2) -> s1));
+            for (StudentWrapper.ClassStudentDto studentCourseDetail : studentCourseDetails) {
+                StudentWrapper.ClassStudentDto classStudentDto = studentDtoMap.get(studentCourseDetail.getUserId());
+                studentCourseDetail.setName(classStudentDto.getName());
+                studentCourseDetail.setGender(classStudentDto.getGender());
+                studentCourseDetail.setSubjectName(classStudentDto.getSubjectName());
+                studentCourseDetail.setParentsPhone(classStudentDto.getParentsPhone());
+            }
+            return studentCourseDetails;
+        }else {
+            if (CollectionUtils.isEmpty(studentCourseDetails)){
+                return studentDtos;
+            }
+            Map<Integer,StudentWrapper.ClassStudentDto> studentDtoMap = studentCourseDetails.stream()
+                    .collect(Collectors.toMap(StudentWrapper.ClassStudentDto::getUserId, s -> s, (s1, s2) -> s1));
+            for (StudentWrapper.ClassStudentDto studentDto : studentDtos) {
+                StudentWrapper.ClassStudentDto studentCourseDetail = studentDtoMap.get(studentDto.getUserId());
+                if (studentCourseDetail != null){
+                    studentDto.setClassroom(studentCourseDetail.getClassroom());
+                    studentDto.setComprehensive(studentCourseDetail.getComprehensive());
+                    studentDto.setHigh(studentCourseDetail.getHigh());
+                    studentDto.setHighOnline(studentCourseDetail.getHighOnline());
+                    studentDto.setMix(studentCourseDetail.getMix());
+                    studentDto.setSingle(studentCourseDetail.getSingle());
+                    studentDto.setTrainingMix(studentCourseDetail.getTrainingMix());
+                    studentDto.setTrainingSingle(studentCourseDetail.getTrainingSingle());
+                }
+            }
+            return studentDtos;
+        }
     }
 
     @Override

+ 180 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupNoticeServiceImpl.java

@@ -1,29 +1,47 @@
 package com.ym.mec.biz.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.google.common.collect.Lists;
+import com.microsvc.toolkit.middleware.im.ImPluginContext;
+import com.microsvc.toolkit.middleware.im.message.ETencentMessage;
+import com.microsvc.toolkit.middleware.im.message.MessageWrapper;
+import com.microsvc.toolkit.middleware.im.message.TencentRequest;
+import com.microsvc.toolkit.middleware.im.properties.ImConfigProperties;
+import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.ImGroupNoticeDao;
 import com.ym.mec.biz.dal.dto.ImGroupNoticeDto;
 import com.ym.mec.biz.dal.entity.ImGroupNotice;
+import com.ym.mec.biz.dal.entity.SysConfig;
 import com.ym.mec.biz.dal.page.ImGroupNoticeQueryInfo;
+import com.ym.mec.biz.dal.wrapper.ImGroupNoticeWrapper;
 import com.ym.mec.biz.service.ImGroupNoticeService;
+import com.ym.mec.biz.service.SysConfigService;
+import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
-import org.springframework.beans.factory.annotation.Autowired;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import javax.annotation.Resource;
+import java.util.*;
 
 @Service
+@Slf4j
 public class ImGroupNoticeServiceImpl extends BaseServiceImpl<Long, ImGroupNotice>  implements ImGroupNoticeService {
 	
-	@Autowired
+	@Resource
 	private ImGroupNoticeDao imGroupNoticeDao;
+	@Resource
+	private ImPluginContext imPluginContext;
+	@Resource
+	private SysUserService sysUserService;
+	@Resource
+	private SysConfigService sysConfigService;
 
 	@Override
 	public BaseDAO<Long, ImGroupNotice> getDAO() {
@@ -42,6 +60,14 @@ public class ImGroupNoticeServiceImpl extends BaseServiceImpl<Long, ImGroupNotic
 			pageInfo.setTotal(count);
 			params.put("offset", pageInfo.getOffset());
 			dataList = imGroupNoticeDao.queryForPage(params);
+			// 查询用户默认头象
+			String defaultAvatar = Optional.ofNullable(sysConfigService.findByParamName(SysConfigService.USER_DEFAULT_AVATAR))
+					.map(SysConfig::getParanValue).orElse("");
+			for (ImGroupNoticeDto imGroupNoticeDto : dataList) {
+				if(StringUtils.isEmpty(imGroupNoticeDto.getAvatar())){
+					imGroupNoticeDto.setAvatar(defaultAvatar);
+				}
+			}
 		}
 		if (count == 0) {
 			dataList = new ArrayList<ImGroupNoticeDto>();
@@ -52,7 +78,17 @@ public class ImGroupNoticeServiceImpl extends BaseServiceImpl<Long, ImGroupNotic
 
 	@Override
 	public ImGroupNoticeDto queryLatestNotice(String imGroupId) {
-		return imGroupNoticeDao.queryLatestNotice(imGroupId);
+		ImGroupNoticeDto imGroupNoticeDto = imGroupNoticeDao.queryLatestNotice(imGroupId);
+		SysUser sysUser = sysUserService.queryUserById(imGroupNoticeDto.getOperatorId().intValue());
+		imGroupNoticeDto.setUsername(StringUtils.isEmpty(sysUser.getRealName())?sysUser.getUsername():sysUser.getRealName());
+		imGroupNoticeDto.setAvatar(sysUser.getAvatar());
+		if(StringUtils.isEmpty(imGroupNoticeDto.getAvatar())){
+			// 查询用户默认头象
+			String defaultAvatar = Optional.ofNullable(sysConfigService.findByParamName(SysConfigService.USER_DEFAULT_AVATAR))
+					.map(SysConfig::getParanValue).orElse("");
+			imGroupNoticeDto.setAvatar(defaultAvatar);
+		}
+		return imGroupNoticeDto;
 	}
 
     @Override
@@ -66,6 +102,18 @@ public class ImGroupNoticeServiceImpl extends BaseServiceImpl<Long, ImGroupNotic
 			imGroupNoticeDao.updateTop(imGroupNotice.getImGroupId(),false);
 		}
 		imGroupNoticeDao.update(imGroupNotice);
+		// 撤销群公告消息
+		ImGroupNotice notice = imGroupNoticeDao.get(imGroupNotice.getId());
+		revokeImGroupNoticeMessage(notice);
+
+		// 发送群公告消息
+		String messageSeqId = sendGroupCustomNoticeMessage(convertToImGroupNotice(notice));
+
+		// 更新群公告消息ID
+		if (StringUtils.isNotBlank(messageSeqId)) {
+			notice.setMessageSeqId(messageSeqId);
+			imGroupNoticeDao.update(notice);
+		}
 	}
 
 	@Override
@@ -73,4 +121,129 @@ public class ImGroupNoticeServiceImpl extends BaseServiceImpl<Long, ImGroupNotic
 		return imGroupNoticeDao;
 	}
 
+    @Override
+	@Transactional(rollbackFor = Exception.class)
+    public Long add(ImGroupNotice imGroupNotice) {
+		if(imGroupNotice.isIsTop()){
+			//置顶取消
+			imGroupNoticeDao.updateTop(imGroupNotice.getImGroupId(),false);
+		}
+		imGroupNoticeDao.insert(imGroupNotice);
+		// 发送群公告消息
+		String messageSeqId = sendGroupCustomNoticeMessage(convertToImGroupNotice(imGroupNotice));
+		// 更新群公告消息ID
+		if (StringUtils.isNotBlank(messageSeqId)) {
+			imGroupNotice.setMessageSeqId(messageSeqId);
+			imGroupNoticeDao.update(imGroupNotice);
+		}
+		return imGroupNotice.getId();
+    }
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void del(Long id) {
+		ImGroupNotice notice = imGroupNoticeDao.get(id);
+		if (notice == null) {
+			throw new BizException("该群公告已被删除");
+		}
+		imGroupNoticeDao.delete(id);
+		// 撤销群公告消息
+		revokeImGroupNoticeMessage(notice);
+	}
+
+	@Override
+	public ImGroupNoticeDto getNotice(Long id) {
+		ImGroupNotice notice = imGroupNoticeDao.get(id);
+		if (notice == null) {
+			throw new BizException("该群公告已被删除");
+		}
+		ImGroupNoticeDto noticeDto = JSON.parseObject(JSON.toJSONString(notice), ImGroupNoticeDto.class);
+		SysUser sysUser = sysUserService.queryUserById(noticeDto.getOperatorId().intValue());
+		noticeDto.setUsername(StringUtils.isEmpty(sysUser.getRealName())?sysUser.getUsername():sysUser.getRealName());
+		noticeDto.setAvatar(sysUser.getAvatar());
+		if(StringUtils.isEmpty(noticeDto.getAvatar())){
+			// 查询用户默认头象
+			String defaultAvatar = Optional.ofNullable(sysConfigService.findByParamName(SysConfigService.USER_DEFAULT_AVATAR))
+					.map(SysConfig::getParanValue).orElse("");
+			noticeDto.setAvatar(defaultAvatar);
+		}
+		return noticeDto;
+	}
+
+	public ImGroupNoticeWrapper.ImGroupNotice convertToImGroupNotice(ImGroupNotice imGroupNotice) {
+		ImGroupNoticeWrapper.ImGroupNotice notice = ImGroupNoticeWrapper.ImGroupNotice.builder()
+				.id(imGroupNotice.getId())
+				.groupId(imGroupNotice.getImGroupId())
+				.title(imGroupNotice.getTitle())
+				.content(imGroupNotice.getContent())
+				.topFlag(imGroupNotice.isIsTop())
+				.sentToNewMemberFlag(true)
+				.operatorId(imGroupNotice.getOperatorId())
+				.delFlag(imGroupNotice.isDelFlag())
+				.build();
+		return notice;
+	}
+
+
+	/**
+	 * 发送群公告消息
+	 *
+	 * @param notice   ImGroupNoticeWrapper.ImGroupNotice
+	 * @return 消息ID
+	 */
+	private String sendGroupCustomNoticeMessage(ImGroupNoticeWrapper.ImGroupNotice notice) {
+		String messageSeqId;
+		// 发送群公告消息
+		ImGroupNoticeWrapper.CustomGroupNotice customGroupNotice = ImGroupNoticeWrapper.CustomGroupNotice.builder()
+				.businessID("TC_GROUP_NOTICE")
+				.msgId(String.valueOf(notice.getId()))
+				.msgTitle(notice.getTitle())
+				.msgContent(notice.getContent())
+				.build();
+
+		TencentRequest.MessageBody messageBody = TencentRequest.MessageBody.builder()
+				.msgType(ETencentMessage.TIMCustomElem.name())
+				.msgContent(TencentRequest.CustomMessageBody.builder()
+						.data(customGroupNotice.jsonString())
+						.desc("群公告")
+						.build())
+				.build();
+
+		try {
+			// 发送群公告消息
+			messageSeqId = imPluginContext.getPluginService().sendGroupMessage(MessageWrapper.GroupMessage.builder()
+					.senderId(notice.getOperatorId().toString())
+					.groupId(notice.getGroupId())
+					.tencentMessage(messageBody)
+					.build());
+		} catch (Exception e) {
+			log.error("群公告消息发送失败, messageId={}, groupId={}, title={}, ", notice.getId(), notice.getGroupId(),
+					notice.getTitle(), e);
+			throw com.microsvc.toolkit.common.webportal.exception.BizException.from("群公告消息发送失败");
+		}
+		return messageSeqId;
+	}
+
+
+	/**
+	 * 撤销群公告消息
+	 * @param imGroupNotice ImGroupNotice
+	 */
+	private void revokeImGroupNoticeMessage(ImGroupNotice imGroupNotice) {
+		try {
+			if (StringUtils.isNotBlank(imGroupNotice.getMessageSeqId())) {
+				imPluginContext.getPluginService().recallGroupMessage(MessageWrapper.RecallGroupMessage.builder()
+						.groupId(imGroupNotice.getImGroupId())
+						.reason("群公告消息撤销")
+						.messageSeqs(Lists.newArrayList(
+								TencentRequest.GroupMessageSeq.builder().messageSeq(Integer.parseInt(imGroupNotice.getMessageSeqId())).build()
+						))
+						.build());
+			}
+		} catch (Exception e) {
+			log.error("撤销群公告消息失败, messageId={}, groupId={}, title={}, ", imGroupNotice.getId(), imGroupNotice.getImGroupId(),
+					imGroupNotice.getTitle(), e);
+		}
+	}
+
 }

+ 14 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/LessonCoursewareServiceImpl.java

@@ -191,42 +191,44 @@ public class LessonCoursewareServiceImpl extends ServiceImpl<LessonCoursewareMap
     }
 
     @Override
-    public CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail getLessonCourseDetail(Long id) {
+    public CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail getLessonCourseDetail(Long id,List<Integer> categoryIdList) {
         CbsLessonCoursewareDetailWrapper.LessonCoursewareDetail detail = coursewareFeignService.lessonCoursewareDetailDetail(id).feignData();
         if (detail == null) {
             return null;
         }
         //获取知识点下的素材列表、下面关联的资源列表,如果applicationIdList是空的,那么把他剔除掉
-        this.setTreeResourceId(detail.getKnowledgePointList());
+        this.setTreeResourceId(detail.getKnowledgePointList(),categoryIdList);
         return detail;
     }
 
     //递归处理CbsLessonCoursewareDetailWrapper.KnowledgePointSmall
-    private void setTreeResourceId(List<CbsLessonCoursewareDetailWrapper.KnowledgePointSmall> knowledgePointList){
+    private void setTreeResourceId(List<CbsLessonCoursewareDetailWrapper.KnowledgePointSmall> knowledgePointList,List<Integer> categoryIdList){
         if(CollectionUtils.isNotEmpty(knowledgePointList)){
             knowledgePointList.forEach(knowledgePointSmall -> {
-                this.setResourceId(knowledgePointSmall);
+                this.setResourceId(knowledgePointSmall,categoryIdList);
                 List<CbsLessonCoursewareDetailWrapper.KnowledgePointSmall> children = knowledgePointSmall.getChildren();
                 if(CollectionUtils.isNotEmpty(children)){
-                    this.setTreeResourceId(children);
+                    this.setTreeResourceId(children,categoryIdList);
                 }
             });
         }
     }
 
 
-    private void setResourceId(CbsLessonCoursewareDetailWrapper.KnowledgePointSmall knowledgePointSmall){
+    private void setResourceId(CbsLessonCoursewareDetailWrapper.KnowledgePointSmall knowledgePointSmall,List<Integer> categoryIdList){
         List<CbsLessonCoursewareDetailWrapper.MaterialSmall> materialList = knowledgePointSmall.getMaterialList();
         if(CollectionUtils.isNotEmpty(materialList)){
             for (CbsLessonCoursewareDetailWrapper.MaterialSmall materialSmall : materialList) {
                 if(materialSmall.getType() == EMaterialType.SONG){
                     SysMusicScore musicScore = sysMusicScoreService.getDao().getCbsId(Long.parseLong(materialSmall.getContent()));
-                    if(musicScore != null && musicScore.getShowFlag() == 1) {
+                    //没有启用的曲目不显示
+                    if(musicScore != null && musicScore.getShowFlag() == 1 && musicScore.getClientShowFlag() == 1) {
                         materialSmall.setContent(musicScore.getId().toString());
                     }else {
                         materialSmall.setContent(null);
                     }
                 }
+                //
                 List<CbsMaterialRefWrapper.AddMaterialRef> materialRefs = materialSmall.getMaterialRefs();
                 if (CollectionUtils.isNotEmpty(materialRefs)){
                     for (CbsMaterialRefWrapper.AddMaterialRef materialRef : materialRefs) {
@@ -234,15 +236,17 @@ public class LessonCoursewareServiceImpl extends ServiceImpl<LessonCoursewareMap
                         if(relateMaterialInfo != null && StringUtils.equals(relateMaterialInfo.getType(),"SONG")
                                 && CollectionUtils.isNotEmpty(relateMaterialInfo.getApplicationIdList())){
                             SysMusicScore musicScore = sysMusicScoreService.getDao().getCbsId(relateMaterialInfo.getId());
-                            if(musicScore != null && musicScore.getShowFlag() == 1) {
+                            if(musicScore != null && musicScore.getShowFlag() == 1 && musicScore.getClientShowFlag() == 1
+                                    && categoryIdList.contains(musicScore.getCbsMusicCategoriesId())) {
                                 materialRef.setResourceIdStr(musicScore.getId().toString());
                             }
                         }
                     }
                 }
             }
-            //剔除掉视频素材,且没有content的数据
-            materialList.removeIf(materialSmall -> materialSmall.getType() == EMaterialType.SONG && StringUtils.isEmpty(materialSmall.getContent()));
+            //剔除掉视频素材,且没有content的数据,且不在可见分类内的数据
+            materialList.removeIf(materialSmall -> materialSmall.getType() == EMaterialType.SONG
+                    && StringUtils.isEmpty(materialSmall.getContent()));
         }
     }
 }

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderRepairServiceImpl.java

@@ -112,8 +112,8 @@ public class MusicGroupPaymentCalenderRepairServiceImpl extends BaseServiceImpl<
                 sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS,
                         MessageTypeEnum.SMS_WAIT_REMINDER_PAYMENT, receivers, null, 0, null, null,messageDto.getSchoolName(),messageDto.getBatchNo());
             }
-            List<Integer> ids = messageDtos.stream().map(e -> e.getId()).collect(Collectors.toList());
-            musicGroupPaymentCalenderRepairDao.updateSendRemind(ids);
+//            List<Integer> ids = messageDtos.stream().map(e -> e.getId()).collect(Collectors.toList());
+//            musicGroupPaymentCalenderRepairDao.updateSendRemind(ids);
         }
     }
 

+ 4 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OrganizationServiceImpl.java

@@ -113,7 +113,7 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 			Integer tenantId = TenantContextHolder.getTenantId();
 			TenantInfo tenantInfo = tenantInfoService.get(tenantId);
 			//如果是超管,或者是机构管理员,可以查看当前机构所有分部数据
-			if(isSuper || (tenantInfo.getUserId() != null && tenantInfo.getUserId().equals(userId))){
+			if(isSuper || (tenantInfo != null && tenantInfo.getUserId() != null && tenantInfo.getUserId().equals(userId))){
 				Map<String,Object> param = new HashMap<>();
 				param.put("tenantId",tenantId);
 				List<Organization> all = this.findAll(param);
@@ -235,8 +235,8 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 		//获取分部关联的课件
 		List<Organization> organizations = organizationDao.queryEmployeeOrgan(organId);
 		if(CollectionUtils.isNotEmpty(organizations)){
-			teachingMaterialIds = organizations.stream().filter(e -> StringUtils.isNotEmpty(e.getTeachingMaterialId())).
-					map(e -> e.getTeachingMaterialId()).collect(Collectors.joining(","));
+			teachingMaterialIds = organizations.stream().map(Organization::getTeachingMaterialId).
+                    filter(StringUtils::isNotEmpty).collect(Collectors.joining(","));
 		}
 		if (StringUtil.isEmpty(teachingMaterialIds)){
 			TenantConfig tenantConfig = tenantConfigService.getOne(new QueryWrapper<TenantConfig>().eq("tenant_id_", tenantId));
@@ -245,6 +245,7 @@ public class OrganizationServiceImpl extends BaseServiceImpl<Integer, Organizati
 		return teachingMaterialIds;
     }
 
+
     /**
      * 获取分部信息
      *

+ 41 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PayServiceImpl.java

@@ -188,6 +188,47 @@ public class PayServiceImpl implements PayService {
 			}
 			
 		}
+		
+		//如果是乐队指导培训的订单,由武汉学校收款
+		if(studentPaymentOrder != null && studentPaymentOrder.getType() == OrderTypeEnum.DIRECTOR_TRAINING_CAMP) {
+			
+			Integer routeOrganId = 50;
+			HfMember receiverMember = hfMemberDao.getByOrganId(routeOrganId, paymentChannelStr);
+			
+			if(receiverMember == null) {
+        		throw new BizException("分部[{}]收款账户查询失败", routeOrganId);
+			}
+			
+			String merNo = receiverMember.getMemberId();
+        	if(StringUtils.isBlank(merNo)){
+        		throw new BizException("平台收款账户查询失败");
+        	}
+			
+			StudentPaymentRouteOrder studentPaymentRouteOrder = new StudentPaymentRouteOrder();
+            studentPaymentRouteOrder.setOrderNo(orderNo);
+            studentPaymentRouteOrder.setRouteOrganId(routeOrganId);
+            studentPaymentRouteOrder.setFeeFlag("Y");
+            studentPaymentRouteOrder.setRouteAmount(amount);
+            studentPaymentRouteOrder.setRouteBalanceAmount(balanceAmount);
+            studentPaymentRouteOrder.setMerNo(merNo);
+            studentPaymentRouteOrder.setSaleAmount(BigDecimal.ZERO);
+            studentPaymentRouteOrder.setServiceAmount(amount);
+            studentPaymentRouteOrder.setTenantId(tenantId);
+            studentPaymentRouteOrder.setCreateTime(date);
+            studentPaymentRouteOrder.setUpdateTime(date);
+            studentPaymentRouteOrderDao.insert(studentPaymentRouteOrder);
+            
+            Map<String, Object> unionPay = new HashMap<>();
+            Map<String, Object> payMap = null;
+
+        	payMap = Payment.getPayMap(hfMerchantConfig, amount, orderNo, returnUrl, orderSubject, orderBody);
+
+            unionPay.put("orderNo", orderNo);
+            unionPay.put("type", paymentChannel.getCode());
+            unionPay.put("payMap", payMap);
+            unionPay.put("routingMerNos", merNo);
+            return unionPay;
+		}
 
 		BigDecimal subBalance = BigDecimal.ZERO;
 		

+ 6 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SmsCodeServiceImpl.java

@@ -11,7 +11,6 @@ import org.springframework.stereotype.Service;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.entity.SysConfig;
-import com.ym.mec.biz.dal.entity.SysMessage;
 import com.ym.mec.biz.dal.enums.MessageSendMode;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.service.SmsCodeService;
@@ -41,6 +40,11 @@ public class SmsCodeServiceImpl implements SmsCodeService {
 
 	@Override
 	public boolean sendValidCode(String mobile,String jpushType) {
+		return this.sendValidCode(mobile,jpushType,MessageTypeEnum.SMS_VERIFY_CODE_LOGIN.name());
+	}
+
+	@Override
+	public boolean sendValidCode(String mobile, String jpushType, String type) {
 		SysUser sysUser = sysUserFeignService.queryUserByMobile(mobile);
 		Integer userId = -1;
 		if (sysUser != null) {
@@ -59,7 +63,7 @@ public class SmsCodeServiceImpl implements SmsCodeService {
 		if (list != null && list.size() >= times) {
 			throw new BizException("对不起,您发送太频繁请稍后重试!");
 		}
-		sysMessageService.sendSecurityCode(MessageSenderPluginContext.MessageSender.AWSMS, userId, MessageTypeEnum.SMS_VERIFY_CODE_LOGIN, mobile,jpushType);
+		sysMessageService.sendSecurityCode(MessageSenderPluginContext.MessageSender.AWSMS, userId, MessageTypeEnum.valueOf(type), mobile,jpushType);
 		return true;
 	}
 

+ 7 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java

@@ -237,11 +237,13 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
         courseHomeworkStudentDetail.setHomeworkOpenFlag(Integer.parseInt(configValue));
         if(StringUtils.isNotEmpty(courseHomeworkStudentDetail.getMusicScoreId())){
             List<SysMusicScore> sysMusicScoreList = sysMusicScoreDao.findByIds(courseHomeworkStudentDetail.getMusicScoreId());
-            courseHomeworkStudentDetail.setSysMusicScoreList(sysMusicScoreList);
-            SysMusicScore sysMusicScore = sysMusicScoreList.get(0);
-            courseHomeworkStudentDetail.setSysMusicScore(sysMusicScore);
-            courseHomeworkStudentDetail.setMusicScoreId(sysMusicScore.getId().toString());
-            courseHomeworkStudentDetail.setMusicScoreName(sysMusicScore.getName());
+            if(CollectionUtils.isNotEmpty(sysMusicScoreList)){
+                courseHomeworkStudentDetail.setSysMusicScoreList(sysMusicScoreList);
+                SysMusicScore sysMusicScore = sysMusicScoreList.get(0);
+                courseHomeworkStudentDetail.setSysMusicScore(sysMusicScore);
+                courseHomeworkStudentDetail.setMusicScoreId(sysMusicScore.getId().toString());
+                courseHomeworkStudentDetail.setMusicScoreName(sysMusicScore.getName());
+            }
         }
         Student student = studentDao.get(userId.intValue());
         courseHomeworkStudentDetail.setHasMember(student.getMemberRankSettingId()==null?0:1);

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

@@ -145,6 +145,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     @Resource
     private StudentPaymentOrderService studentPaymentOrderService;
     @Resource
+    private TempDirectorTrainingCampDetailService tempDirectorTrainingCampDetailService;
+    @Resource
     private MusicGroupPaymentCalenderAddressService musicGroupPaymentCalenderAddressService;
 
     private final Logger logger = LoggerFactory.getLogger(this.getClass());
@@ -644,6 +646,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             } else if (order.getType().equals(OrderTypeEnum.MALL_BUY)) {
                 // 商城购买订单回调
                 studentPaymentOrderService.mallBuyOrderCallback(order);
+            }else if (order.getType().equals(OrderTypeEnum.DIRECTOR_TRAINING_CAMP)) {
+                tempDirectorTrainingCampDetailService.orderCallback(order);
             }
         }
     }

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

@@ -667,15 +667,15 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 
 	@Override
 	public boolean sendSecurityCode(MessageSender messageSender, Integer userId, MessageTypeEnum messageType, String receiver,String jpushType) {
-		String key1 = getVerificationCode1CacheKey(messageType, receiver);
+		String key1 = getVerificationCode1CacheKey(MessageTypeEnum.SMS_VERIFY_CODE_LOGIN, receiver);
 		if (redisCache.get(key1) != null) {
 			throw new BizException("请勿频繁操作,获取验证码间隔时间为60秒");
 		}
 
-		String key = getVerificationCodeCacheKey(messageType, receiver);
+		String key = getVerificationCodeCacheKey(MessageTypeEnum.SMS_VERIFY_CODE_LOGIN, receiver);
 		int code = DEFAULT_CODE;
 		if (!debugMode) {
-			code = getRandomCode(messageType, receiver);
+			code = getRandomCode(MessageTypeEnum.SMS_VERIFY_CODE_LOGIN, receiver);
 		}
 		Map<Integer, String> receivers = new HashMap<>(1);
 		receivers.put(userId, receiver);

+ 151 - 64
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreAccompanimentServiceImpl.java

@@ -1,15 +1,14 @@
 package com.ym.mec.biz.service.impl;
 
 
-import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetCategoryWrapper;
 import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
 import com.ym.mec.auth.api.dto.MusicScoreQueryInfo;
 import com.ym.mec.biz.dal.dao.SysMusicScoreAccompanimentDao;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
+import com.ym.mec.biz.service.CbsMusicScoreCategoriesService;
 import com.ym.mec.biz.service.InstrumentService;
 import com.ym.mec.biz.service.SysMusicScoreAccompanimentService;
-import com.ym.mec.biz.service.SysMusicScoreCategoriesService;
 import com.ym.mec.biz.service.SysMusicScoreService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
@@ -32,7 +31,7 @@ public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Strin
 	@Resource
 	private SysMusicScoreAccompanimentDao sysMusicScoreAccompanimentDao;
 	@Resource
-	private SysMusicScoreCategoriesService sysMusicScoreCategoriesService;
+	private CbsMusicScoreCategoriesService cbsMusicScoreCategoriesService;
 	@Resource
 	private SysMusicScoreService sysMusicScoreService;
 	@Resource
@@ -47,7 +46,91 @@ public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Strin
 	public List<SysMusicScoreAccompaniment> queryAll(SysExamSongQueryInfo queryInfo) {
 		Map<String, Object> params = new HashMap<>();
 		MapUtil.populateMap(params, queryInfo);
-		return this.initAccompaniment(sysMusicScoreAccompanimentDao.queryPage(params));
+		List<SysMusicScoreAccompaniment> sysMusicScoreAccompaniments = sysMusicScoreAccompanimentDao.queryPage(params);
+		Map<Integer, SysMusicScoreCategories> categoriesMap = new HashMap<>();
+		if(CollectionUtils.isNotEmpty(sysMusicScoreAccompaniments)){
+			List<Integer> categoryIds = sysMusicScoreAccompaniments.stream()
+					.map(SysMusicScoreAccompaniment::getCategoriesId).distinct().collect(Collectors.toList());
+			List<SysMusicScoreCategories> categories = cbsMusicScoreCategoriesService.queryByIds(categoryIds.stream()
+					.map(String::valueOf).collect(Collectors.joining(",")));
+			categoriesMap = categories.stream().collect(Collectors.toMap(SysMusicScoreCategories::getId, Function.identity()));
+		}
+		for (SysMusicScoreAccompaniment sysMusicScoreAccompaniment : sysMusicScoreAccompaniments) {
+			SysMusicScoreCategories categories = categoriesMap.get(sysMusicScoreAccompaniment.getCategoriesId());
+			if(categories != null){
+				sysMusicScoreAccompaniment.setCategoriesName(categories.getName());
+				sysMusicScoreAccompaniment.setParentCategoriesId(categories.getParentId());
+			}
+			if (sysMusicScoreAccompaniment.getIsOpenMetronome() ==null || sysMusicScoreAccompaniment.getIsOpenMetronome()) {
+				if (StringUtils.isNotBlank(sysMusicScoreAccompaniment.getUrl())) {
+					sysMusicScoreAccompaniment.setMetronomeUrl(sysMusicScoreAccompaniment.getUrl());
+				}
+			}
+		}
+		return this.initAccompaniment(sysMusicScoreAccompaniments);
+	}
+
+
+	public List<SysMusicScoreAccompaniment> initAccompaniment(List<SysMusicScoreAccompaniment> accompaniments,List<CbsMusicSheetWrapper.MusicSheetApplication> applications){
+		List<SysMusicScoreAccompaniment> result = new ArrayList<>();
+		if(CollectionUtils.isEmpty(accompaniments)){
+			return result;
+		}
+		long count = accompaniments.stream().filter(e -> e.getCbsMusicSheetId() != null).count();
+		if(count == 0){
+			return result;
+		}
+		Map<String, CbsMusicSheetWrapper.MusicSheetApplication> applicationMap = applications.stream().collect(Collectors.toMap(e->e.getId().toString(), Function.identity()));
+		for (SysMusicScoreAccompaniment accompaniment : accompaniments) {
+			if(accompaniment.getCbsMusicSheetId() == null){
+				result.add(accompaniment);
+				continue;
+			}
+			CbsMusicSheetWrapper.MusicSheetApplication musicSheetApplication = applicationMap.get(accompaniment.getCbsMusicSheetId());
+			if (musicSheetApplication == null) {
+				throw new BizException("曲目信息不存在,曲目ID:" + accompaniment.getCbsMusicSheetId());
+			}
+			if(CollectionUtils.isEmpty(musicSheetApplication.getMusicSheetSoundList())){
+				throw new BizException("曲目原音信息不存在,曲目ID:" + accompaniment.getCbsMusicSheetId());
+			}
+			if (accompaniment.getIsOpenMetronome() ==null || accompaniment.getIsOpenMetronome()) {
+				if (StringUtils.isNotBlank(accompaniment.getUrl())) {
+					accompaniment.setMetronomeUrl(accompaniment.getUrl());
+				}
+			}
+			List<SysMusicScoreAccompaniment> childAccompaniments = new ArrayList<>();
+			for (int i = 0; i < musicSheetApplication.getMusicSheetSoundList().size(); i++) {
+				SysMusicScoreAccompaniment record = new SysMusicScoreAccompaniment();
+				record.setMusicPdfUrl(musicSheetApplication.getMusicPdfUrl());
+				record.setFirstPdfUrl(musicSheetApplication.getFirstPdfUrl());
+				record.setJianPdfUrl(musicSheetApplication.getJianPdfUrl());
+				record.setIsMixBeat(musicSheetApplication.getIsMixBeat());
+				record.setId(accompaniment.getExamSongId().toString());
+				record.setExamSongId(accompaniment.getExamSongId());
+				record.setMusicSheetType(musicSheetApplication.getMusicSheetType().getCode());
+				record.setExamSongName(musicSheetApplication.getName());
+				CbsMusicSheetWrapper.MusicSheetSound sound = musicSheetApplication.getMusicSheetSoundList().get(i);
+				record.setMetronomeMp3Url(sound.getAudioFileUrl());
+				record.setTrack(sound.getTrack());
+				record.setXmlUrl(musicSheetApplication.getXmlFileUrl());
+				record.setSoundMusicPdfUrl(sound.getMusicPdfUrl());
+				record.setSoundFirstPdfUrl(sound.getFirstPdfUrl());
+				record.setSoundJianPdfUrl(sound.getJianPdfUrl());
+				List<CbsMusicSheetWrapper.MusicSheetAccompaniment> accompanimentList = musicSheetApplication.getMusicSheetAccompanimentList();
+				if (CollectionUtils.isNotEmpty(accompanimentList)) {
+					CbsMusicSheetWrapper.MusicSheetAccompaniment accompaniment1 = accompanimentList.get(0);
+					record.setMetronomeUrl(accompaniment1.getAudioFileUrl());
+					record.setAccMusicPdfUrl(accompaniment1.getMusicPdfUrl());
+					record.setAccFirstPdfUrl(accompaniment1.getFirstPdfUrl());
+					record.setAccJianPdfUrl(accompaniment1.getJianPdfUrl());
+				}
+				record.setMp3Url(sound.getAudioFileUrl());
+				record.setIsScoreRender(musicSheetApplication.getIsScoreRender());
+				childAccompaniments.add(record);
+			}
+			result.addAll(childAccompaniments);
+		}
+		return result;
 	}
 
 	public List<SysMusicScoreAccompaniment> initAccompaniment(List<SysMusicScoreAccompaniment> accompaniments){
@@ -81,10 +164,15 @@ public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Strin
 			List<SysMusicScoreAccompaniment> childAccompaniments = new ArrayList<>();
 			for (int i = 0; i < musicSheetApplication.getMusicSheetSoundList().size(); i++) {
 				SysMusicScoreAccompaniment record = new SysMusicScoreAccompaniment();
+				record.setMusicPdfUrl(musicSheetApplication.getMusicPdfUrl());
+				record.setFirstPdfUrl(musicSheetApplication.getFirstPdfUrl());
+				record.setJianPdfUrl(musicSheetApplication.getJianPdfUrl());
+				record.setIsMixBeat(musicSheetApplication.getIsMixBeat());
 				record.setIsConvertibleScore(musicSheetApplication.getIsConvertibleScore());
 				if(musicSheetApplication.getScoreType() != null){
 					record.setScoreType(musicSheetApplication.getScoreType().getCode());
 				}
+
 				record.setId(accompaniment.getExamSongId().toString());
 				record.setType(accompaniment.getType());
 				record.setRankIds("FREE".equals(musicSheetApplication.getPaymentType()) ? null : "1");
@@ -104,6 +192,9 @@ public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Strin
 				record.setCategoriesName(musicSheetApplication.getMusicSheetCategoryName());
 				record.setSpeed(musicSheetApplication.getPlaySpeed());
 				CbsMusicSheetWrapper.MusicSheetSound sound = musicSheetApplication.getMusicSheetSoundList().get(i);
+				record.setSoundMusicPdfUrl(sound.getMusicPdfUrl());
+				record.setSoundFirstPdfUrl(sound.getFirstPdfUrl());
+				record.setSoundJianPdfUrl(sound.getJianPdfUrl());
 				record.setMetronomeMp3Url(sound.getAudioFileUrl());
 				record.setTrack(sound.getTrack());
 				record.setSubjectName(sound.getTrack());
@@ -113,12 +204,18 @@ public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Strin
 				record.setIsOpenMetronome(musicSheetApplication.getIsUseSystemBeat());
 				List<CbsMusicSheetWrapper.MusicSheetAccompaniment> accompanimentList = musicSheetApplication.getMusicSheetAccompanimentList();
 				if (CollectionUtils.isNotEmpty(accompanimentList)) {
-					record.setMetronomeUrl(accompanimentList.get(0).getAudioFileUrl());
-					record.setUrl(accompanimentList.get(0).getAudioFileUrl());
+					CbsMusicSheetWrapper.MusicSheetAccompaniment accompaniment1 = accompanimentList.get(0);
+					record.setMetronomeUrl(accompaniment1.getAudioFileUrl());
+					record.setUrl(accompaniment1.getAudioFileUrl());
+					record.setAccMusicPdfUrl(accompaniment1.getMusicPdfUrl());
+					record.setAccFirstPdfUrl(accompaniment1.getFirstPdfUrl());
+					record.setAccJianPdfUrl(accompaniment1.getJianPdfUrl());
 				}
 				record.setMetronomeMp3Url(sound.getAudioFileUrl());
 				record.setMp3Url(sound.getAudioFileUrl());
 				record.setIsShowFingering(musicSheetApplication.getIsShowFingering());
+				record.setIsScoreRender(musicSheetApplication.getIsScoreRender());
+				record.setDefaultScoreRender(musicSheetApplication.getDefaultScoreRender());
 				childAccompaniments.add(record);
 			}
 			result.addAll(childAccompaniments);
@@ -131,13 +228,11 @@ public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Strin
 		if(CollectionUtils.isEmpty(applications)){
 			return result;
 		}
-		List<Long> musicSheetCategoryIds = applications.stream().map(e -> e.getMusicSheetCategoryId())
-				.filter(Objects::isNull).distinct().collect(Collectors.toList());
-		CbsMusicSheetCategoryWrapper.MusicSheetCategoryQuery categoryQuery = new CbsMusicSheetCategoryWrapper.MusicSheetCategoryQuery();
-		categoryQuery.setIds(musicSheetCategoryIds);
-		List<CbsMusicSheetCategoryWrapper.MusicSheetCategory> musicSheetCategories = sysMusicScoreCategoriesService.getDao().categoryList(categoryQuery);
-		Map<Long, CbsMusicSheetCategoryWrapper.MusicSheetCategory> categoryMap = musicSheetCategories.stream().
-				collect(Collectors.toMap(CbsMusicSheetCategoryWrapper.MusicSheetCategory::getId, Function.identity()));
+		String musicSheetCategoryIds = applications.stream().map(CbsMusicSheetWrapper.MusicSheetAccApplication::getMusicSheetCategoryId)
+				.filter(Objects::isNull).distinct().map(String::valueOf).collect(Collectors.joining(","));
+		List<SysMusicScoreCategories> musicSheetCategories = cbsMusicScoreCategoriesService.queryByIds(musicSheetCategoryIds);
+		Map<Integer, SysMusicScoreCategories> categoryMap = musicSheetCategories.stream().
+				collect(Collectors.toMap(SysMusicScoreCategories::getId, Function.identity()));
 		for (CbsMusicSheetWrapper.MusicSheetAccApplication musicSheetApplication : applications) {
 			SysMusicScoreAccompaniment record = new SysMusicScoreAccompaniment();
 			record.setIsConvertibleScore(musicSheetApplication.getIsConvertibleScore());
@@ -154,9 +249,9 @@ public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Strin
 			record.setExtStyleConfigJson(musicSheetApplication.getExtStyleConfigJson());
 			if(musicSheetApplication.getMusicSheetCategoryId() != null){
 				record.setCategoriesId(musicSheetApplication.getMusicSheetCategoryId().intValue());
-				CbsMusicSheetCategoryWrapper.MusicSheetCategory musicSheetCategory = categoryMap.get(record.getCategoriesId().longValue());
+				SysMusicScoreCategories musicSheetCategory = categoryMap.get(record.getCategoriesId());
 				if(musicSheetCategory != null){
-					record.setParentCategoriesId(musicSheetCategory.getParentId().intValue());
+					record.setParentCategoriesId(musicSheetCategory.getParentId());
 				}
 			}
 			record.setMusicSheetType(musicSheetApplication.getMusicSheetType().getCode());
@@ -176,6 +271,8 @@ public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Strin
 			record.setMetronomeUrl(musicSheetApplication.getUrl());
 			record.setUrl(musicSheetApplication.getUrl());
 			record.setIsShowFingering(musicSheetApplication.getIsShowFingering());
+			record.setIsScoreRender(musicSheetApplication.getIsScoreRender());
+			record.setDefaultScoreRender(musicSheetApplication.getDefaultScoreRender());
 			result.add(record);
 		}
 		return result;
@@ -216,6 +313,8 @@ public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Strin
 		record.setMetronomeMp3Url(musicSheetApplication.getMp3Url());
 		record.setMp3Url(musicSheetApplication.getMp3Url());
 		record.setIsShowFingering(musicSheetApplication.getIsShowFingering());
+		record.setIsScoreRender(musicSheetApplication.getIsScoreRender());
+		record.setDefaultScoreRender(musicSheetApplication.getDefaultScoreRender());
 		return record;
 	}
 
@@ -231,7 +330,7 @@ public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Strin
 			musicScoreQueryInfo.setParentId(categoriesId);
 			musicScoreQueryInfo.setEnable(queryInfo.getEnable());
 			musicScoreQueryInfo.setOrganId(queryInfo.getOrganId());
-			List<SysMusicScoreCategories> scoreCategories = sysMusicScoreCategoriesService.queryTree(musicScoreQueryInfo);
+			List<SysMusicScoreCategories> scoreCategories = cbsMusicScoreCategoriesService.queryTree(musicScoreQueryInfo);
 			if(CollectionUtils.isNotEmpty(scoreCategories)){
 				categoriesIdList = scoreCategories.stream().map(SysMusicScoreCategories::getId).collect(Collectors.toList());
 			}else {
@@ -241,24 +340,48 @@ public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Strin
 		}
 		Map<String, Object> params = new HashMap<>();
 		MapUtil.populateMap(params, queryInfo);
-        List<SysMusicScoreAccompaniment> sysMusicScoreAccompaniments = sysMusicScoreAccompanimentDao.queryAccPage(params);
-        for (SysMusicScoreAccompaniment sysMusicScoreAccompaniment : sysMusicScoreAccompaniments) {
-            if (sysMusicScoreAccompaniment.getIsOpenMetronome() ==null || sysMusicScoreAccompaniment.getIsOpenMetronome()) {
-                if (StringUtils.isNotBlank(sysMusicScoreAccompaniment.getUrl())) {
-                    sysMusicScoreAccompaniment.setMetronomeUrl(sysMusicScoreAccompaniment.getUrl());
-                }
-            }
-        }
-        return this.initAccompaniment(sysMusicScoreAccompaniments);
+        return this.queryAccPage(params);
     }
 
 	@Override
+	public List<SysMusicScoreAccompaniment> queryAccPage(Map<String, Object> params) {
+		List<SysMusicScoreAccompaniment> sysMusicScoreAccompaniments = sysMusicScoreAccompanimentDao.queryAccPage(params);
+		Map<Integer, SysMusicScoreCategories> categoriesMap = new HashMap<>();
+		if(CollectionUtils.isNotEmpty(sysMusicScoreAccompaniments)){
+			List<Integer> categoryIds = sysMusicScoreAccompaniments.stream()
+					.map(SysMusicScoreAccompaniment::getCategoriesId).distinct().collect(Collectors.toList());
+			List<SysMusicScoreCategories> categories = cbsMusicScoreCategoriesService.queryByIds(categoryIds.stream()
+					.map(String::valueOf).collect(Collectors.joining(",")));
+			categoriesMap = categories.stream().collect(Collectors.toMap(SysMusicScoreCategories::getId, Function.identity()));
+		}
+		for (SysMusicScoreAccompaniment sysMusicScoreAccompaniment : sysMusicScoreAccompaniments) {
+			SysMusicScoreCategories categories = categoriesMap.get(sysMusicScoreAccompaniment.getCategoriesId());
+			if(categories != null){
+				sysMusicScoreAccompaniment.setCategoriesName(categories.getName());
+				sysMusicScoreAccompaniment.setParentCategoriesId(categories.getParentId());
+			}
+			if (sysMusicScoreAccompaniment.getIsOpenMetronome() ==null || sysMusicScoreAccompaniment.getIsOpenMetronome()) {
+				if (StringUtils.isNotBlank(sysMusicScoreAccompaniment.getUrl())) {
+					sysMusicScoreAccompaniment.setMetronomeUrl(sysMusicScoreAccompaniment.getUrl());
+				}
+			}
+		}
+		return this.initAccompaniment(sysMusicScoreAccompaniments);
+	}
+
+	@Override
+	public List<SysMusicScoreAccompaniment> queryAccPage(List<Integer> musicSheetIds,List<CbsMusicSheetWrapper.MusicSheetApplication> applications) {
+		return this.initAccompaniment(sysMusicScoreAccompanimentDao.queryAccPage1(musicSheetIds),applications);
+	}
+
+
+	@Override
 	public List<Subject> querySubjectIds(Integer categoriesId) {
 		List<Integer> categoriesIdList = new ArrayList<>();
 		if(categoriesId != null){
 			MusicScoreQueryInfo musicScoreQueryInfo = new MusicScoreQueryInfo();
 			musicScoreQueryInfo.setParentId(categoriesId);
-			List<SysMusicScoreCategories> scoreCategories = sysMusicScoreCategoriesService.queryTree(musicScoreQueryInfo);
+			List<SysMusicScoreCategories> scoreCategories = cbsMusicScoreCategoriesService.queryTree(musicScoreQueryInfo);
 			if(CollectionUtils.isNotEmpty(scoreCategories)){
                 List<SysMusicScoreCategories> allScoreCategories = new ArrayList<>(scoreCategories);
 				for (SysMusicScoreCategories scoreCategory : scoreCategories) {
@@ -277,36 +400,11 @@ public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Strin
     @Override
     public PageInfo<SysMusicScoreAccompaniment> queryScorePage(SysExamSongQueryInfo queryInfo) {
 		if(queryInfo.getCategoriesIds() != null){
-			List<Integer> categoriesIdList = new ArrayList<>();
-			String[] categoriesIds = queryInfo.getCategoriesIds().split(",");
-
-			for(String fc : categoriesIds){
-				SysMusicScoreCategories sysMusicScoreCategories = sysMusicScoreCategoriesService.get(Integer.parseInt(fc));
-				
-				if(sysMusicScoreCategories == null){
-					throw new BizException("分类找不到");
-				}
-				categoriesIdList.add(Integer.parseInt(fc));
-				sysMusicScoreCategories = sysMusicScoreCategoriesService.getChildTree(sysMusicScoreCategories);
-				getAllCategoryIdList(categoriesIdList, sysMusicScoreCategories.getSysMusicScoreCategoriesList());
-			}
+			List<Integer> categoriesIdList = cbsMusicScoreCategoriesService.getAllCategoryIdList(queryInfo.getCategoriesIds());
 			queryInfo.setCategoriesIds(categoriesIdList.stream().map(String :: valueOf).collect(Collectors.joining(",")));
 		}
 		if(StringUtils.isNotBlank(queryInfo.getFilterCategoriesIds())){
-			String[] filterCategoriesIds = queryInfo.getFilterCategoriesIds().split(",");
-
-			List<Integer> filterCategoriesIdList = new ArrayList<>();
-			
-			for(String fc : filterCategoriesIds){
-				SysMusicScoreCategories sysMusicScoreCategories = sysMusicScoreCategoriesService.get(Integer.parseInt(fc));
-				
-				if(sysMusicScoreCategories == null){
-					throw new BizException("分类找不到");
-				}
-				filterCategoriesIdList.add(Integer.parseInt(fc));
-				sysMusicScoreCategories = sysMusicScoreCategoriesService.getChildTree(sysMusicScoreCategories);
-				getAllCategoryIdList(filterCategoriesIdList, sysMusicScoreCategories.getSysMusicScoreCategoriesList());
-			}
+			List<Integer> filterCategoriesIdList = cbsMusicScoreCategoriesService.getAllCategoryIdList(queryInfo.getFilterCategoriesIds());
 			queryInfo.setFilterCategoriesIds(filterCategoriesIdList.stream().map(String :: valueOf).collect(Collectors.joining(",")));
 		}
 		//如果声部不为空,关联声部挂的乐器
@@ -331,15 +429,4 @@ public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Strin
 		List<SysMusicScoreAccompaniment> accompaniments = this.initAccompaniments(musicSheetAccApplicationPageInfo.getRows());
 		return PageUtil.transPageInfo(musicSheetAccApplicationPageInfo,accompaniments);
 	}
-    
-    private void getAllCategoryIdList(List<Integer> categoryIdList, List<SysMusicScoreCategories> sysMusicScoreCategoriesList){
-    	
-    	if(CollectionUtils.isNotEmpty(sysMusicScoreCategoriesList)){
-    		for(SysMusicScoreCategories sysMusicScoreCategories : sysMusicScoreCategoriesList){
-    			categoryIdList.add(sysMusicScoreCategories.getId());
-    			getAllCategoryIdList(categoryIdList, sysMusicScoreCategories.getSysMusicScoreCategoriesList());
-    		}
-    	}
-    	
-    }
 }

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

@@ -52,39 +52,39 @@ public class SysMusicScoreCategoriesServiceImpl extends BaseServiceImpl<Integer,
 
 	@Override
 	public List<SysMusicScoreCategories> queryCategoriesTreeList(String categoryIds, Boolean isQueryEnable) {
-		
+
 		categoryIds = categoryIds.endsWith(",") ? categoryIds.substring(0, categoryIds.length() - 1) : categoryIds;
 
 		List<SysMusicScoreCategories> rows = new ArrayList<SysMusicScoreCategories>();
-		
+
 		List<SysMusicScoreCategories> categoryList = sysMusicScoreCategoriesDao.queryByIds(categoryIds);
-		
+
 		SysMusicScoreCategories parentCategory = null;
 		SysMusicScoreCategories subCategory = null;
 		for(SysMusicScoreCategories smsc : categoryList){
-			
+
 			if(smsc == null){
 				continue;
 			}
 			if(isQueryEnable == null){
 				isQueryEnable = true;
 			}
-			if(isQueryEnable == true && smsc.getEnable() != true){
+			if(isQueryEnable && !smsc.getEnable()){
 				continue;
 			}
 			parentCategory = getParentTree(smsc);
 			subCategory = getChildTree(smsc);
-			
+
 			if(parentCategory == null){
 				insertSubToParent(rows, subCategory);
 			}else{
 				parentCategory.getSysMusicScoreCategoriesList().add(subCategory);
 				insertSubToParent(rows, parentCategory);
 			}
-			
-			
+
+
 		}
-		
+
 		return rows;
 	}
 

+ 61 - 78
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreServiceImpl.java

@@ -1,7 +1,6 @@
 package com.ym.mec.biz.service.impl;
 
 
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.beust.jcommander.internal.Lists;
 import com.dayaedu.cbs.common.enums.EClientType;
@@ -15,7 +14,6 @@ import com.dayaedu.cbs.openfeign.client.MusicFeignClientService;
 import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetApplicationExtendClientWrapper;
 import com.dayaedu.cbs.openfeign.wrapper.music.CbsMusicSheetWrapper;
 import com.dayaedu.cbs.openfeign.wrapper.musicInstrument.CbsMusicalInstrumentWrapper;
-import com.google.common.collect.Maps;
 import com.microsvc.toolkit.common.response.template.R;
 import com.ym.mec.biz.dal.dao.SysMusicScoreAccompanimentDao;
 import com.ym.mec.biz.dal.dao.SysMusicScoreCategoriesDao;
@@ -36,7 +34,6 @@ import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
@@ -56,14 +53,14 @@ public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicS
     @Resource
     private SysMusicScoreCategoriesDao sysMusicScoreCategoriesDao;
     @Resource
-    private SysMusicScoreCategoriesService sysMusicScoreCategoriesService;
-    @Resource
-    private OrganizationService organizationService;
+    private CbsMusicScoreCategoriesService cbsMusicScoreCategoriesService;
     @Resource
     private SubjectService subjectService;
     @Resource
     private SysMusicScoreAccompanimentDao sysMusicScoreAccompanimentDao;
     @Resource
+    private SysMusicScoreAccompanimentService sysMusicScoreAccompanimentService;
+    @Resource
     private MusicFeignClientService musicFeignClientService;
     @Resource
     private InstrumentService instrumentService;
@@ -104,6 +101,7 @@ public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicS
         query.setDetailFlag(true);
         query.setDelFlag(true);
         query.setPage(1);
+        query.setAudioPlayTypeFlag(false);
         query.setApplicationId(applicationId);
         return query;
     }
@@ -162,15 +160,10 @@ public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicS
             List<String> cbsMusicSheetIds = records.stream().map(SysMusicScore::getCbsMusicSheetId).collect(Collectors.toList());
             List<CbsMusicSheetWrapper.MusicSheetApplication> applications = this.queryCbsMusicSheetApplication(cbsMusicSheetIds);
             if(CollectionUtils.isNotEmpty(applications)){
-                Set<Integer> categoriesIds = records.stream().map(SysMusicScore::getMusicScoreCategoriesId).collect(Collectors.toSet());
-                //获取分部列表
-                Map<Integer, String> organMap = MapUtil.convertMybatisMap(sysMusicScoreCategoriesDao.queryOrganByIds(categoriesIds));
-                Map<Integer, String> map = new HashMap<>(categoriesIds.size());
-                for (Integer categoriesId : categoriesIds) {
-                    if(null != categoriesId){
-                        map.put(categoriesId, getParentTreeName(categoriesId));
-                    }
-                }
+                //获取原音
+                List<Integer> musicSheetIds = records.stream().map(SysMusicScore::getId).collect(Collectors.toList());
+                List<SysMusicScoreAccompaniment> accompaniments = sysMusicScoreAccompanimentService.queryAccPage(musicSheetIds,applications);
+
                 Map<Long, CbsMusicSheetWrapper.MusicSheetApplication> musicSheetApplicationMap = applications
                         .stream().collect(Collectors.toMap(CbsMusicSheetWrapper.MusicSheetApplication::getId, Function.identity()));
 
@@ -183,22 +176,21 @@ public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicS
                             this.queryMusicalInstrument(Arrays.stream(instrumentIds.split(",")).map(Integer::parseInt).distinct().collect(Collectors.toList()));
                     musicalInstrumentQueryMap = musicalInstrumentQueryDtos.stream().collect(Collectors.toMap(CbsMusicalInstrumentWrapper.MusicalInstrumentQueryDto::getId, o -> o, (o1, o2) -> o1));
                 }
-                //获取分类名称
-                Map<Integer, String> categoriesMap = new HashMap<>(categoriesIds.size());
-                for (Integer categoriesId : categoriesIds) {
-                    if(null != categoriesId){
-                        categoriesMap.put(categoriesId, getParentTreeName(categoriesId));
-                    }
+                Map<Integer, List<SysMusicScoreAccompaniment>> accompanimentMap = new HashMap<>();
+                if(CollectionUtils.isNotEmpty(accompaniments)){
+                    accompanimentMap = accompaniments.stream().collect(Collectors.groupingBy(SysMusicScoreAccompaniment::getExamSongId));
                 }
                 //获取声部乐器关联
                 List<Instrument> list = instrumentService.lambdaQuery().list();
                 Map<Integer, Instrument> instrumentMap = list.stream().collect(Collectors.toMap(Instrument::getSubjectId, o -> o));
                 for (SysMusicScore record : records) {
-                    record.setCategoriesName(map.get(record.getMusicScoreCategoriesId()));
-                    record.setOrganName(organMap.get(record.getMusicScoreCategoriesId()));
                     CbsMusicSheetWrapper.MusicSheetApplication musicSheetApplication = musicSheetApplicationMap.get(Long.parseLong(record.getCbsMusicSheetId()));
                     if(musicSheetApplication != null){
-                        this.initMusicSheetVo(record,musicSheetApplication,musicalInstrumentQueryMap,categoriesMap,instrumentMap);
+                        this.initMusicSheetVo(record,musicSheetApplication,musicalInstrumentQueryMap,instrumentMap);
+                    }
+                    List<SysMusicScoreAccompaniment> accompanimentList = accompanimentMap.get(record.getId());
+                    if(CollectionUtils.isNotEmpty(accompanimentList)){
+                        record.setBackground(accompanimentList);
                     }
                 }
             }
@@ -207,31 +199,42 @@ public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicS
 
     public void initMusicSheetVo(SysMusicScore record,CbsMusicSheetWrapper.MusicSheetApplication musicSheetApplication
             ,Map<Integer,CbsMusicalInstrumentWrapper.MusicalInstrumentQueryDto> musicalInstrumentQueryMap,
-                                 Map<Integer, String> categoriesMap,Map<Integer, Instrument> instrumentMap){
+                                 Map<Integer, Instrument> instrumentMap){
         record.setRankIds(StringUtils.equals("FREE",musicSheetApplication.getPaymentType()) ? "" : "1");
         record.setCbsMusicSheetId(musicSheetApplication.getId().toString());
         record.setPlayMode(SysMusicScore.PlayMode.valueOf(musicSheetApplication.getPlayMode().getCode()));
         record.setExtConfigJson(musicSheetApplication.getExtConfigJson());
         record.setExtStyleConfigJson(musicSheetApplication.getExtStyleConfigJson());
-        if(musicSheetApplication.getMusicSheetCategoryId() != null){
-            record.setMusicScoreCategoriesId(musicSheetApplication.getMusicSheetCategoryId().intValue());
-            record.setCategoriesId(musicSheetApplication.getMusicSheetCategoryId().intValue());
-        }
+        record.setShowFlag(musicSheetApplication.getStatus()?1:0);
+//        if(musicSheetApplication.getMusicSheetCategoryId() != null){
+//            record.setMusicScoreCategoriesId(musicSheetApplication.getMusicSheetCategoryId().intValue());
+//            record.setCategoriesId(musicSheetApplication.getMusicSheetCategoryId().intValue());
+//        }
         record.setName(musicSheetApplication.getName());
-        if(musicSheetApplication.getMusicSheetCategoryId() != null){
-            record.setCategoriesName(categoriesMap.get(musicSheetApplication.getMusicSheetCategoryId().intValue()));
-        }
+        record.setCategoriesName(musicSheetApplication.getMusicSheetCategoryName());
         record.setSpeed(musicSheetApplication.getPlaySpeed());
         record.setIsOpenMetronome(musicSheetApplication.getIsUseSystemBeat());
+        record.setIsMixBeat(musicSheetApplication.getIsMixBeat());
+        record.setMusicPdfUrl(musicSheetApplication.getMusicPdfUrl());
+        record.setFirstPdfUrl(musicSheetApplication.getFirstPdfUrl());
+        record.setJianPdfUrl(musicSheetApplication.getJianPdfUrl());
         List<CbsMusicSheetWrapper.MusicSheetAccompaniment> accompanimentList = musicSheetApplication.getMusicSheetAccompanimentList();
         if (CollectionUtils.isNotEmpty(accompanimentList)) {
-            record.setMetronomeUrl(accompanimentList.get(0).getAudioFileUrl());
-            record.setUrl(accompanimentList.get(0).getAudioFileUrl());
+            CbsMusicSheetWrapper.MusicSheetAccompaniment accompaniment = accompanimentList.get(0);
+            record.setMetronomeUrl(accompaniment.getAudioFileUrl());
+            record.setUrl(accompaniment.getAudioFileUrl());
+            record.setAccMusicPdfUrl(accompaniment.getMusicPdfUrl());
+            record.setAccFirstPdfUrl(accompaniment.getFirstPdfUrl());
+            record.setAccJianPdfUrl(accompaniment.getJianPdfUrl());
         }
         List<CbsMusicSheetWrapper.MusicSheetSound> soundList = musicSheetApplication.getMusicSheetSoundList();
         if (CollectionUtils.isNotEmpty(soundList)) {
-            record.setAccompanimentMetronomeUrl(soundList.get(0).getAudioFileUrl());
-            record.setAccompanimentUrl(soundList.get(0).getAudioFileUrl());
+            CbsMusicSheetWrapper.MusicSheetSound sheetSound = soundList.get(0);
+            record.setAccompanimentMetronomeUrl(sheetSound.getAudioFileUrl());
+            record.setAccompanimentUrl(sheetSound.getAudioFileUrl());
+            record.setSoundMusicPdfUrl(sheetSound.getMusicPdfUrl());
+            record.setSoundFirstPdfUrl(sheetSound.getFirstPdfUrl());
+            record.setSoundJianPdfUrl(sheetSound.getJianPdfUrl());
         }
         record.setXmlUrl(musicSheetApplication.getXmlFileUrl());
         record.setMidiUrl(musicSheetApplication.getMidiFileUrl());
@@ -239,23 +242,19 @@ public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicS
         record.setEnableEvaluation(musicSheetApplication.getIsEvaluated());
         record.setIsConvertibleScore(musicSheetApplication.getIsConvertibleScore());
         record.setScoreType(musicSheetApplication.getScoreType().getCode());
-        if(musicSheetApplication.getMusicSheetType() == EMusicSheetType.CONCERT){
-            record.setSubjectName("");
-        }else {
-            if(StringUtils.isNotEmpty(musicSheetApplication.getMusicalInstrumentIds())){
-                if(StringUtils.isNotEmpty(record.getSubjectIds())){
-                    Set<String> subjectNames = new HashSet<>();
-                    for (String subjectId : record.getSubjectIds().split(",")) {
-                        Instrument instrument = instrumentMap.get(Integer.parseInt(subjectId));
-                        if(instrument != null){
-                            CbsMusicalInstrumentWrapper.MusicalInstrumentQueryDto musicalInstrumentQueryDto = musicalInstrumentQueryMap.get(instrument.getId());
-                            if(Objects.nonNull(musicalInstrumentQueryDto)) {
-                                subjectNames.add(musicalInstrumentQueryDto.getName());
-                            }
+        if(StringUtils.isNotEmpty(musicSheetApplication.getMusicalInstrumentIds())){
+            if(StringUtils.isNotEmpty(record.getSubjectIds())){
+                Set<String> subjectNames = new HashSet<>();
+                for (String subjectId : record.getSubjectIds().split(",")) {
+                    Instrument instrument = instrumentMap.get(Integer.parseInt(subjectId));
+                    if(instrument != null){
+                        CbsMusicalInstrumentWrapper.MusicalInstrumentQueryDto musicalInstrumentQueryDto = musicalInstrumentQueryMap.get(instrument.getId());
+                        if(Objects.nonNull(musicalInstrumentQueryDto)) {
+                            subjectNames.add(musicalInstrumentQueryDto.getName());
                         }
                     }
-                    record.setSubjectName(String.join(",",subjectNames));
                 }
+                record.setSubjectName(String.join(",",subjectNames));
             }
         }
     }
@@ -263,7 +262,7 @@ public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicS
     @Override
     public List<SysMusicScore> queryMusicScoreAll(SysExamSongQueryInfo queryInfo) {
         //封装查询参数
-        queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
+//        queryInfo.setOrganId(organizationService.getEmployeeOrgan(queryInfo.getOrganId()));
         if(queryInfo.getSubjectId() != null){
             queryInfo.setSubjectIds(queryInfo.getSubjectId().toString());
         }
@@ -295,18 +294,7 @@ public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicS
 
     private void initCategoryIds(SysExamSongQueryInfo queryInfo){
         if(StringUtils.isNotEmpty(queryInfo.getCategoriesId())){
-            List<Integer> categoriesIdList = new ArrayList<>();
-            Integer categoriesId = Integer.parseInt(queryInfo.getCategoriesId());
-
-            SysMusicScoreCategories sysMusicScoreCategories = sysMusicScoreCategoriesService.get(categoriesId);
-
-            if(sysMusicScoreCategories == null){
-                throw new BizException("分类找不到");
-            }
-            categoriesIdList.add(categoriesId);
-            sysMusicScoreCategories = sysMusicScoreCategoriesService.getChildTree(sysMusicScoreCategories);
-            getAllCategoryIdList(categoriesIdList, sysMusicScoreCategories.getSysMusicScoreCategoriesList());
-
+            List<Integer> categoriesIdList = cbsMusicScoreCategoriesService.getAllCategoryIdList(queryInfo.getCategoriesId());
             queryInfo.setCategoriesIdList(categoriesIdList);
         }
     }
@@ -316,9 +304,11 @@ public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicS
     public PageInfo<SysMusicScore> queryMusicScorePageInfo(SysExamSongQueryInfo queryInfo) {
         this.initCategoryIds(queryInfo);
         if(queryInfo.getSubjectId() != null){
-            queryInfo.setSubjectIds(queryInfo.getSubjectId().toString());
             if(queryInfo.getSubjectId() == 5){
-                queryInfo.setSubjectIds(queryInfo.getSubjectIds() + ",6");
+                queryInfo.setSubjectId(6);
+                queryInfo.setSubjectIds("6");
+            }else {
+                queryInfo.setSubjectIds(queryInfo.getSubjectId().toString());
             }
         }
         if(CollectionUtils.isEmpty(queryInfo.getCategoriesIdList())){
@@ -372,7 +362,7 @@ public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicS
         String applicationExtendIds = rows.stream().map(e -> e.getApplicationExtendId().toString()).collect(Collectors.joining(","));
         CbsMusicSheetApplicationExtendClientWrapper.MusicSheetApplicationExtendStatus extendStatus = new CbsMusicSheetApplicationExtendClientWrapper.MusicSheetApplicationExtendStatus();
         extendStatus.setIds(applicationExtendIds);
-        extendStatus.setStatus(musicScore.getShowFlag() != 1);
+        extendStatus.setStatus(musicScore.getClientShowFlag() != 1);
         R<JSONObject> jsonObjectR = musicFeignClientService.musicSheetApplicationExtendStatus(extendStatus);
         if (jsonObjectR.getCode() != 200) {
             throw new BizException("修改曲目状态失败,{}", jsonObjectR.getMessage());
@@ -430,17 +420,10 @@ public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicS
         if (musicSheet == null) {
             throw new BizException("曲目不存在");
         }
-        CbsMusicSheetWrapper.MusicSheetApplicationQuery query = new CbsMusicSheetWrapper.MusicSheetApplicationQuery();
-        query.setApplicationId(applicationId);
+        CbsMusicSheetWrapper.MusicSheetApplicationQuery query = this.getMusicSheetApplicationQuery();
         query.setMusicSheetIds(Collections.singletonList(Long.parseLong(musicSheet.getCbsMusicSheetId())));
-        query.setDelFlag(true);
-        query.setPage(1);
         query.setRows(1);
-        R<com.microsvc.toolkit.common.response.paging.PageInfo<CbsMusicSheetWrapper.MusicSheetApplication>> pageInfoR = musicFeignClientService.musicSheetPageByApplication(query);
-        if (pageInfoR.getCode() != 200) {
-            throw new BizException("获取曲目信息异常,{}", pageInfoR.getMessage());
-        }
-        List<CbsMusicSheetWrapper.MusicSheetApplication> rows = pageInfoR.feignData().getRows();
+        List<CbsMusicSheetWrapper.MusicSheetApplication> rows = this.queryCbsMusicSheetApplication(query);
         if (CollectionUtils.isEmpty(rows)) {
             throw new BizException("获取曲目信息失败");
         }
@@ -503,7 +486,7 @@ public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicS
             }
         }
         if(addMusicSheet.getMusicSheetType() == null){
-            if(Arrays.stream(prodCategoryIds.split(",")).anyMatch(e->e.equals(from.getMusicScoreCategoriesId().toString()))){
+            if(Arrays.stream(prodCategoryIds.split(",")).anyMatch(e->e.equals(from.getCbsMusicCategoriesId().toString()))){
                 addMusicSheet.setMusicSheetType(EMusicSheetType.CONCERT);
             }else {
                 addMusicSheet.setMusicSheetType(EMusicSheetType.SINGLE);
@@ -583,8 +566,8 @@ public class SysMusicScoreServiceImpl extends BaseServiceImpl<Integer, SysMusicS
         addMusicSheetApplicationExtend.setSortNo(from.getOrder());
         addMusicSheetApplicationExtend.setPaymentType(StringUtils.isNotEmpty(from.getRankIds()) ? "VIP" : "FREE");
         addMusicSheetApplicationExtend.setAvailableType(EMusicAvailableType.ORG);
-        addMusicSheetApplicationExtend.setMusicSheetCategoryId(from.getMusicScoreCategoriesId().longValue());
-        addMusicSheet.setMusicCategoryId(from.getMusicScoreCategoriesId().longValue());
+        addMusicSheetApplicationExtend.setMusicSheetCategoryId(from.getCbsMusicCategoriesId().longValue());
+        addMusicSheet.setMusicCategoryId(from.getCbsMusicCategoriesId().longValue());
         addMusicSheet.setAddMusicSheetApplicationExtend(Lists.newArrayList(addMusicSheetApplicationExtend));
         addMusicSheet.setIsConvertibleScore(true);
         return addMusicSheet;

+ 366 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TempDirectorTrainingCampDetailServiceImpl.java

@@ -0,0 +1,366 @@
+package com.ym.mec.biz.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.auth.api.enums.YesOrNoEnum;
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDetailDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dao.TempDirectorTrainingCampDetailDao;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.*;
+import com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampDetailWrapper;
+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.service.IdGeneratorService;
+import com.ym.mec.common.tenant.TenantContextHolder;
+import com.ym.mec.util.date.DateUtil;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.redisson.api.RBucket;
+import org.redisson.api.RedissonClient;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpStatus;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.text.MessageFormat;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+
+@Service("tempDirectorTrainingCampDetailService")
+public class TempDirectorTrainingCampDetailServiceImpl extends ServiceImpl<TempDirectorTrainingCampDetailDao, TempDirectorTrainingCampDetail> implements TempDirectorTrainingCampDetailService {
+
+    private final static Logger log = LoggerFactory.getLogger(TempDirectorTrainingCampDetailServiceImpl.class);
+
+    @Resource
+    private SmsCodeService smsCodeService;
+    @Resource
+    private TempDirectorTrainingCampService tempDirectorTrainingCampService;
+    @Resource
+    private RedissonClient redissonClient;
+    @Resource
+    private StudentPaymentOrderService studentPaymentOrderService;
+    @Resource
+    private StudentPaymentOrderDetailDao studentPaymentOrderDetailDao;
+    @Resource
+    private IdGeneratorService idGeneratorService;
+    @Resource
+    private TeacherDao teacherDao;
+    @Resource
+    private SysUserFeignService sysUserFeignService;
+    @Resource
+    private SysConfigDao sysConfigDao;
+    @Resource
+    private PayService payService;
+    @Resource
+    private SysUserCashAccountService sysUserCashAccountService;
+
+    @Override
+    public TempDirectorTrainingCampDetailDao getDao() {
+        return this.baseMapper;
+    }
+
+    private void checkTraining(Date now,TempDirectorTrainingCamp trainingCamp){
+        if(Objects.isNull(trainingCamp)){
+            throw new BizException("训练营信息不存在");
+        }
+        //校验训练营时间
+        if(now.after(trainingCamp.getApplyEndDate())){
+            throw new BizException("报名已截止");
+        }
+        if(now.before(trainingCamp.getApplyStartDate())){
+            String dateToString = DateUtil.dateToString(trainingCamp.getApplyStartDate(), DateUtil.DATE_FORMAT_MIN);
+            throw new BizException(dateToString + "开启报名,感谢您的关注");
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public TempDirectorTrainingCampDetailWrapper.ApplyCampResult applyCamp(TempDirectorTrainingCampDetailWrapper.ApplyCamp applyCamp) {
+        Date now = new Date();
+        TempDirectorTrainingCamp trainingCamp = tempDirectorTrainingCampService.getById(applyCamp.getTempDirectorTrainingCampId());
+        this.checkTraining(now,trainingCamp);
+        if(!smsCodeService.verifyValidCode(applyCamp.getMobile(), applyCamp.getAuthCode())){
+            throw new BizException("验证码校验失败");
+        }
+        String lockKey = applyCamp.getTempDirectorTrainingCampId() + applyCamp.getMobile() + applyCamp.getCardNo();
+        String submitLockKey = MessageFormat.format("apply_director_camp_lock:{0}", lockKey);
+        // 数据重复提交校验
+        RBucket<Object> bucket = redissonClient.getBucket(submitLockKey);
+        if (!bucket.trySet(lockKey, 5L, TimeUnit.SECONDS)) {
+            throw new BizException("请勿重复提交");
+        }
+        //根据身份证号获取信息
+        TempDirectorTrainingCampDetail byCardNo = this.lambdaQuery().eq(TempDirectorTrainingCampDetail::getCardNo, applyCamp.getCardNo())
+                .eq(TempDirectorTrainingCampDetail::getTempDirectorTrainingCampId, applyCamp.getTempDirectorTrainingCampId())
+                .last("LIMIT 1").one();
+        if(Objects.nonNull(byCardNo) && !StringUtils.equals(byCardNo.getMobile(),applyCamp.getMobile())){
+            redissonClient.getBucket(submitLockKey).delete();
+            throw new BizException("该身份证已报名");
+        }
+        //根据手机号获取信息
+        TempDirectorTrainingCampDetail byMobile = this.lambdaQuery().eq(TempDirectorTrainingCampDetail::getMobile, applyCamp.getMobile())
+                .eq(TempDirectorTrainingCampDetail::getTempDirectorTrainingCampId, applyCamp.getTempDirectorTrainingCampId())
+                .last("LIMIT 1").one();
+        if(Objects.nonNull(byMobile) && !StringUtils.equals(byMobile.getCardNo(),applyCamp.getCardNo())){
+            // 删除缓存锁
+            redissonClient.getBucket(submitLockKey).delete();
+            throw new BizException("该手机号已报名");
+        }
+        TempDirectorTrainingCampDetail entity = JSONObject.parseObject(JSONObject.toJSONString(applyCamp),TempDirectorTrainingCampDetail.class);
+        if(Objects.nonNull(byCardNo)){
+            entity.setId(byCardNo.getId());
+        }else if (Objects.nonNull(byMobile)){
+            entity.setId(byMobile.getId());
+        }
+        //获取老师信息
+        SysUser sysUser = sysUserFeignService.queryUserByMobile(entity.getMobile());
+        if(Objects.isNull(sysUser) || sysUser.getId() == null){
+            //注册用户信息
+            sysUser = new SysUser();
+            sysUser.setUserType("TEACHER");
+            sysUser.setRealName(applyCamp.getUsername());
+            sysUser.setPhone(applyCamp.getMobile());
+            sysUser.setOrganId(43);
+            sysUser.setTenantId(1);
+            sysUser.setIdCardNo(applyCamp.getCardNo());
+            int phoneStrLen = sysUser.getPhone().length();
+            sysUser.setPassword(new BCryptPasswordEncoder().encode("gym" + sysUser.getPhone().substring(phoneStrLen - 4, phoneStrLen)));
+            teacherDao.addSysUser(sysUser);
+            //添加用户现金账户
+            sysUserCashAccountService.insert(new SysUserCashAccount(sysUser.getId(), "CNY"));
+            //注册老师信息
+            Teacher teacher = new Teacher();
+            teacher.setId(sysUser.getId());
+            teacher.setOrganId(43);
+            teacher.setTenantId(1);
+            teacher.setDelFlag(YesOrNoEnum.NO);
+            teacherDao.insert(teacher);
+        }else {
+            if (sysUser.getUserType().contains("SCHOOL")) {
+                // 删除缓存锁
+                redissonClient.getBucket(submitLockKey).delete();
+                throw new BizException("已注册学校账号,请联系客服");
+            }
+            Teacher teacher = teacherDao.get(sysUser.getId());
+            if(Objects.isNull(teacher)){
+                //注册老师信息
+                teacher = new Teacher();
+                teacher.setId(sysUser.getId());
+                teacher.setOrganId(43);
+                teacher.setTenantId(1);
+                teacher.setDelFlag(YesOrNoEnum.NO);
+                teacherDao.insert(teacher);
+                sysUser.setRealName(applyCamp.getUsername());
+                sysUser.setUserType(sysUser.getUserType() + ",TEACHER");
+                teacherDao.updateUser(sysUser);
+            }
+        }
+        entity.setUserId(sysUser.getId());
+        this.saveOrUpdate(entity);
+        TempDirectorTrainingCampDetail campDetail = this.getById(entity.getId());
+        TempDirectorTrainingCampDetailWrapper.ApplyCampResult applyCampResult = new TempDirectorTrainingCampDetailWrapper.ApplyCampResult();
+        applyCampResult.setCampDetailId(campDetail.getId());
+        applyCampResult.setPaymentStatus(campDetail.getPaymentStatus());
+        // 删除缓存锁
+        redissonClient.getBucket(submitLockKey).delete();
+        return applyCampResult;
+    }
+
+    @Override
+    public TempDirectorTrainingCampDetailWrapper.UserPayDetail detail(Integer campId) {
+        TempDirectorTrainingCampDetail campDetail = this.lambdaQuery().eq(TempDirectorTrainingCampDetail::getId, campId).one();
+        if(Objects.isNull(campDetail)){
+            throw new BizException("报名信息不存在");
+        }
+        TempDirectorTrainingCamp trainingCamp = tempDirectorTrainingCampService.getById(campDetail.getTempDirectorTrainingCampId());
+        TempDirectorTrainingCampDetailWrapper.UserPayDetail userPayDetail = new TempDirectorTrainingCampDetailWrapper.UserPayDetail();
+        userPayDetail.setCampName(trainingCamp.getName());
+        userPayDetail.setUsername(campDetail.getUsername());
+        userPayDetail.setCampDetailId(campDetail.getId());
+        return userPayDetail;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResponseResult pay(TempDirectorTrainingCampDetailWrapper.PayDto payDto) throws Exception {
+        Integer tempDirectorTrainingCampDetailId = payDto.getTempDirectorTrainingCampDetailId();
+        TempDirectorTrainingCampDetail campDetail = this.lambdaQuery().eq(TempDirectorTrainingCampDetail::getId, tempDirectorTrainingCampDetailId)
+                .last("LIMIT 1 FOR UPDATE").one();
+        if(Objects.isNull(campDetail)){
+            throw new BizException("报名信息不存在");
+        }
+        if(StringUtils.equals(campDetail.getPaymentStatus(),"PAID")){
+            throw new BizException("您已缴费请勿重复支付");
+        }
+        Integer userId = campDetail.getUserId();
+        Teacher teacher = teacherDao.get(userId);
+        TenantContextHolder.setTenantId(teacher.getTenantId());
+        Date now = new Date();
+        TempDirectorTrainingCamp trainingCamp = tempDirectorTrainingCampService.getById(campDetail.getTempDirectorTrainingCampId());
+        this.checkTraining(now,trainingCamp);
+        List<StudentPaymentOrder> studentPaymentOrders = studentPaymentOrderService.queryByCondition(GroupType.SPORADIC,
+                tempDirectorTrainingCampDetailId.toString(),
+                campDetail.getUserId(),
+                DealStatusEnum.ING,
+                OrderTypeEnum.DIRECTOR_TRAINING_CAMP);
+        if(CollectionUtils.isNotEmpty(studentPaymentOrders)){
+            HttpResponseResult result = studentPaymentOrderService.checkRepeatPay(studentPaymentOrders.get(0), payDto.getRepeatPay());
+            if (result.getCode() != 200) {
+                return result;
+            }
+        }
+        Date nowDate = new Date();
+        String orderNo = idGeneratorService.generatorId("payment") + "";
+        //获取收费项价格
+        BigDecimal money;
+        if(trainingCamp.getBirdPrice() != null && trainingCamp.getBirdPriceEndDate() != null && trainingCamp.getBirdPriceEndDate().after(now)){
+            money = trainingCamp.getBirdPrice();
+        }else {
+            money = trainingCamp.getCurrentPrice();
+        }
+        if(money.compareTo(payDto.getAmount()) != 0){
+            return BaseController.failed(HttpStatus.CHECKPOINT, "活动信息变更,请重新下单");
+        }
+        String channelType = "";
+        StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
+        studentPaymentOrder.setUserId(userId);
+        studentPaymentOrder.setGroupType(GroupType.SPORADIC);
+        studentPaymentOrder.setOrderNo(orderNo);
+        studentPaymentOrder.setType(OrderTypeEnum.DIRECTOR_TRAINING_CAMP);
+        studentPaymentOrder.setExpectAmount(money);
+        studentPaymentOrder.setActualAmount(money);
+        studentPaymentOrder.setBalancePaymentAmount(BigDecimal.ZERO);
+        studentPaymentOrder.setStatus(DealStatusEnum.ING);
+        studentPaymentOrder.setMusicGroupId(payDto.getTempDirectorTrainingCampDetailId().toString());
+        studentPaymentOrder.setOrganId(teacher.getOrganId());
+        studentPaymentOrder.setRoutingOrganId(teacher.getOrganId());
+        studentPaymentOrder.setVersion(0);
+        studentPaymentOrderService.insert(studentPaymentOrder);
+
+        StudentPaymentOrderDetail studentPaymentOrderDetail = new StudentPaymentOrderDetail();
+        studentPaymentOrderDetail.setType(OrderDetailTypeEnum.DIRECTOR_TRAINING_CAMP);
+        studentPaymentOrderDetail.setPrice(studentPaymentOrder.getExpectAmount());
+        studentPaymentOrderDetail.setRemitFee(BigDecimal.ZERO);
+        studentPaymentOrderDetail.setPaymentOrderId(studentPaymentOrder.getId());
+        studentPaymentOrderDetail.setCreateTime(nowDate);
+        studentPaymentOrderDetail.setUpdateTime(nowDate);
+        studentPaymentOrderDetailDao.insert(studentPaymentOrderDetail);
+
+        if (money.compareTo(BigDecimal.ZERO) == 0) {
+            Map<String, String> notifyMap = new HashMap<>();
+            notifyMap.put("tradeState", "1");
+            notifyMap.put("merOrderNo", studentPaymentOrder.getOrderNo());
+            notifyMap.put("channelType", channelType);
+            notifyMap.put("orderNo", "");
+            studentPaymentOrderService.updateOrder(notifyMap);
+            return BaseController.failed(HttpStatus.CREATED, notifyMap,"恭喜您,支付成功!");
+        }
+
+        String baseApiUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
+
+        Map payMap = payService.getPayMap(
+                money,
+                BigDecimal.ZERO,
+                orderNo,
+                baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
+                "乐队指导训练营报名",
+                "乐队指导训练营报名",
+                teacher.getOrganId(),
+                "directorTrainingCamp"
+        );
+
+        studentPaymentOrder.setOrganId(teacher.getOrganId());
+        studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
+        studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
+        studentPaymentOrder.setUpdateTime(nowDate);
+        studentPaymentOrderService.update(studentPaymentOrder);
+        TenantContextHolder.clearTenantId();
+        return BaseController.succeed(payMap);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean orderCallback(StudentPaymentOrder studentPaymentOrder) {
+        int updateCount = studentPaymentOrderService.update(studentPaymentOrder);
+        if (updateCount <= 0) {
+            throw new BizException("订单更新失败");
+        }
+        if(DealStatusEnum.SUCCESS.equals(studentPaymentOrder.getStatus())){
+            List<StudentPaymentOrderDetail> orderDetails = studentPaymentOrderDetailDao.getOrderDetail(studentPaymentOrder.getId());
+            BigDecimal additionCoursePrice = BigDecimal.ZERO;
+            if(!org.springframework.util.CollectionUtils.isEmpty(orderDetails)){
+                additionCoursePrice = orderDetails.stream().map(StudentPaymentOrderDetail::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+            }
+            if(additionCoursePrice.compareTo(BigDecimal.ZERO)>0){
+                sysUserCashAccountService.appendCourseBalance(studentPaymentOrder.getUserId(), additionCoursePrice, PlatformCashAccountDetailTypeEnum.RECHARGE, "2020考级报名");
+            }
+        }
+
+        if (studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED) {
+            if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
+                sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "支付失败-退回");
+            }
+        }
+        TempDirectorTrainingCampDetail campDetail = this.getById(studentPaymentOrder.getMusicGroupId());
+        switch (studentPaymentOrder.getStatus()){
+            case SUCCESS:
+                campDetail.setPaymentAmount(studentPaymentOrder.getActualAmount());
+                campDetail.setPaymentDate(studentPaymentOrder.getPayTime());
+                campDetail.setPaymentStatus("PAID");
+                TempDirectorTrainingCamp trainingCamp = tempDirectorTrainingCampService.getById(campDetail.getTempDirectorTrainingCampId());
+                if(trainingCamp.getBirdPrice() != null && trainingCamp.getBirdPriceEndDate() != null && trainingCamp.getBirdPriceEndDate().after(studentPaymentOrder.getCreateTime())){
+                    campDetail.setBirdFlag(true);
+                }
+                break;
+            case FAILED:
+            case CLOSE:
+                campDetail.setPaymentStatus("NO");
+                break;
+        }
+        this.updateById(campDetail);
+        return true;
+    }
+
+    @Override
+    public IPage<TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetail> queryPage(IPage<Object> page, TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailQuery queryInfo) {
+        IPage<TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetail> tempDirectorTrainingCampDetailIPage = baseMapper.queryPage(page, queryInfo);
+        List<TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetail> records = tempDirectorTrainingCampDetailIPage.getRecords();
+        if(CollectionUtils.isNotEmpty(records)){
+            for (TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetail record : records) {
+                record.setCityInfo(record.getProvince()+"/"+record.getCity()+"/"+record.getRegion());
+                if (StringUtils.isNotBlank(record.getPaymentStatus())) {
+                    if ("PAID".equals(record.getPaymentStatus())) {
+                        record.setPaymentStatusName("已缴费");
+                    } else if ("NO".equals(record.getPaymentStatus())) {
+                        record.setPaymentStatusName("未缴费");
+                    } else if ("REFUND".equals(record.getPaymentStatus())) {
+                        record.setPaymentStatusName("已退费");
+                    }
+                }
+                if (record.getPaymentDate() !=null) {
+                    record.setPaymentDateStr(DateUtil.format(record.getPaymentDate(),DateUtil.EXPANDED_DATE_TIME_FORMAT));
+                }
+            }
+        }
+        return tempDirectorTrainingCampDetailIPage;
+    }
+
+    @Override
+    public TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailStat queryPageStat(TempDirectorTrainingCampDetailWrapper.TempDirectorTrainingCampDetailQuery queryInfo) {
+        return baseMapper.queryPageStat(queryInfo);
+    }
+
+
+}
+

+ 144 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TempDirectorTrainingCampServiceImpl.java

@@ -0,0 +1,144 @@
+package com.ym.mec.biz.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.TempDirectorTrainingCampDao;
+import com.ym.mec.biz.dal.dao.TempDirectorTrainingCampDetailDao;
+import com.ym.mec.biz.dal.entity.TempDirectorTrainingCamp;
+import com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampWrapper;
+import com.ym.mec.biz.service.EmployeeService;
+import com.ym.mec.biz.service.SysUserService;
+import com.ym.mec.biz.service.TempDirectorTrainingCampDetailService;
+import com.ym.mec.biz.service.TempDirectorTrainingCampService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.math.RoundingMode;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Service("tempDirectorTrainingCampService")
+public class TempDirectorTrainingCampServiceImpl extends ServiceImpl<TempDirectorTrainingCampDao, TempDirectorTrainingCamp> implements TempDirectorTrainingCampService {
+
+    @Autowired
+    private SysUserService sysUserService;
+
+    @Autowired
+    private TempDirectorTrainingCampDetailDao tempDirectorTrainingCampDetailDao;
+
+    private final static Logger log = LoggerFactory.getLogger(TempDirectorTrainingCampServiceImpl.class);
+
+    @Override
+    public TempDirectorTrainingCampDao getDao() {
+        return this.baseMapper;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void add(TempDirectorTrainingCampWrapper.AddCamp dto) {
+        log.info("新增训练营:{}", dto);
+        if (!dto.getHasBirdPrice()) {
+            dto.setBirdPrice(null);
+            dto.setBirdPriceEndDate(null);
+        }
+        TempDirectorTrainingCamp tempDirectorTrainingCamp = JSON.parseObject(JSON.toJSONString(dto), TempDirectorTrainingCamp.class);
+
+        this.save(tempDirectorTrainingCamp);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void modify(TempDirectorTrainingCampWrapper.AddCamp dto) {
+        log.info("修改训练营:{}", dto);
+        TempDirectorTrainingCamp tempDirectorTrainingCamp = JSON.parseObject(JSON.toJSONString(dto), TempDirectorTrainingCamp.class);
+
+        this.updateById(tempDirectorTrainingCamp);
+
+        lambdaUpdate()
+            .set(TempDirectorTrainingCamp::getBirdPrice, dto.getHasBirdPrice()?dto.getBirdPrice():null)
+            .set(TempDirectorTrainingCamp::getBirdPriceEndDate, dto.getHasBirdPrice()?dto.getBirdPriceEndDate():null)
+            .eq(TempDirectorTrainingCamp::getId, dto.getId())
+            .update();
+    }
+
+    @Override
+    public IPage<TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp> queryPage(IPage<TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp> page, TempDirectorTrainingCampWrapper.TempDirectorTrainingCampQueryInfo queryInfo) {
+        IPage<TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp> tempDirectorTrainingCampIPage = baseMapper.queryPage(page, queryInfo);
+        List<TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp> records = tempDirectorTrainingCampIPage.getRecords();
+        if (CollectionUtils.isEmpty(records) ) {
+            return tempDirectorTrainingCampIPage;
+        }
+
+        // id 集合
+        List<Integer> ids = records.stream().map(o->o.getId()).collect(Collectors.toList());;
+
+        // 是否设置早鸟价
+
+        // 状态
+
+        // 更新人
+        List<Integer> updateIds = records.stream().map(o -> o.getUpdateBy()).filter(o -> o != null).distinct().collect(Collectors.toList());
+        Map<Long, SysUser> userMap = sysUserService.getMapByIds(updateIds);
+        records.forEach(o -> {
+            if (o.getUpdateBy() != null) {
+                SysUser sysUser = userMap.get(o.getUpdateBy().longValue());
+                if (sysUser != null) {
+                    o.setUpdateByName(sysUser.getRealName());
+                }
+            }
+            if (o.getBirdPrice() !=null && o.getBirdPriceEndDate() != null) {
+                o.setHasBirdPrice(true);
+            } else {
+                o.setHasBirdPrice(false);
+                o.setBirdPrice(null);
+            }
+            Date date = new Date();
+            if (o.getApplyStartDate().after(date)) {
+                o.setStatus("NOT_START");
+            } else if (o.getApplyEndDate().before(date)) {
+                o.setStatus("END");
+            } else {
+                o.setStatus("APPLY");
+            }
+
+            // 价格设置两位小数
+            if (o.getBirdPrice() !=null) {
+                o.setBirdPrice(o.getBirdPrice().setScale(2, RoundingMode.HALF_UP));
+            }
+            if (o.getCurrentPrice() !=null) {
+                o.setCurrentPrice(o.getCurrentPrice().setScale(2, RoundingMode.HALF_UP));
+            }
+            if (o.getOriginalPrice() !=null) {
+                o.setOriginalPrice(o.getOriginalPrice().setScale(2, RoundingMode.HALF_UP));
+            }
+            if (o.getPayAmount() !=null) {
+                o.setPayAmount(o.getPayAmount().setScale(2, RoundingMode.HALF_UP));
+            }
+        });
+
+        // 报名人数,缴费人数 搜款金额
+        List<TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp> stat = tempDirectorTrainingCampDetailDao.getStat(ids);
+        Map<Integer, TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp> statMap = stat.stream().collect(Collectors.toMap(TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp::getId, o -> o));
+
+        records.forEach(o -> {
+            TempDirectorTrainingCampWrapper.TempDirectorTrainingCamp tempDirectorTrainingCamp = statMap.get(o.getId());
+            if (tempDirectorTrainingCamp != null) {
+                o.setApplyCount(tempDirectorTrainingCamp.getApplyCount());
+                o.setPayCount(tempDirectorTrainingCamp.getPayCount());
+                o.setPayAmount(tempDirectorTrainingCamp.getPayAmount().setScale(2, RoundingMode.HALF_UP));
+            }
+        });
+        return tempDirectorTrainingCampIPage;
+    }
+
+
+}
+

+ 16 - 0
mec-biz/src/main/resources/config/mybatis/ClassGroupStudentMapperMapper.xml

@@ -305,6 +305,22 @@
         AND cgsm.status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
     </select>
 
+    <select id="findAllStudent" resultType="com.ym.mec.biz.dal.wrapper.StudentWrapper$ClassStudentDto">
+        SELECT sr.user_id_ userId,sr.name_ name,sr.parents_phone_ parentsPhone,
+        s.name_ subject_name_,su.gender_ gender,sr.music_group_id_ musicGroupId
+        FROM class_group_student_mapper cgsm
+        LEFT JOIN student_registration sr ON (sr.user_id_ = cgsm.user_id_ AND sr.music_group_id_ = cgsm.music_group_id_)
+        LEFT JOIN sys_user su on sr.user_id_ = su.id_
+        LEFT JOIN subject s ON sr.actual_subject_id_ = s.id_
+        WHERE cgsm.class_group_id_ = #{query.classGroupId} AND sr.music_group_status_ != 'QUIT' AND cgsm.status_ = 'NORMAL'
+        <if test="query.subjectId != null">
+            AND sr.actual_subject_id_ = #{query.subjectId}
+        </if>
+        <if test="query.search != null and query.search != ''">
+            AND (sr.name_ LIKE CONCAT('%',#{query.search},'%') OR sr.parents_phone_ LIKE CONCAT('%',#{query.search},'%'))
+        </if>
+    </select>
+
     <select id="findHighClassGroupHasUser" resultMap="ClassGroupStudentMapper">
         SELECT cgsm.* FROM class_group_student_mapper cgsm
         LEFT JOIN class_group cg ON cgsm.class_group_id_ = cg.id_

+ 2 - 2
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -1643,7 +1643,7 @@
             </if>
         </if>
         <include refid="teacherClassCourseScheduleQueryCondition"/>
-        ORDER BY cs.start_class_time_
+        ORDER BY cs.class_date_,cs.start_class_time_
         <include refid="global.limit"/>
     </select>
 
@@ -1730,7 +1730,7 @@
             AND cs.class_date_ &lt;= #{endClassDate}
         </if>
         GROUP BY sa.course_schedule_id_
-        ORDER BY cs.id_
+        ORDER BY cs.class_date_,cs.start_class_time_
         <include refid="global.limit"/>
     </select>
 

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

@@ -18,12 +18,12 @@
 		<result column="del_flag_" property="delFlag" />
 		<result column="operator_id_" property="operatorId" />
         <result column="tenant_id_" property="tenantId"/>
+        <result column="message_seq_id_" property="messageSeqId"/>
 	</resultMap>
 	
 	<resultMap type="com.ym.mec.biz.dal.dto.ImGroupNoticeDto" id="ImGroupNoticeDto" extends="ImGroupNotice">
-		<result column="real_name_" property="user.realName"/>
-		<result column="username_" property="user.username"/>
-        <result column="avatar_" property="user.avatar"/>
+		<result column="username_" property="username"/>
+        <result column="avatar_" property="avatar"/>
 	</resultMap>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -38,8 +38,10 @@
 	
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.ImGroupNotice" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO im_group_notice (im_group_id_,title_,content_,is_top_,is_sent_to_new_member_,create_time_,update_time_,del_flag_,operator_id_,tenant_id_)
-		VALUES(#{imGroupId},#{title},#{content},#{isTop},#{isSentToNewMember},NOW(),NOW(),#{delFlag},#{operatorId},#{tenantId})
+		INSERT INTO im_group_notice (im_group_id_,title_,content_,is_top_,is_sent_to_new_member_,
+		                             create_time_,update_time_,del_flag_,operator_id_,tenant_id_,message_seq_id_)
+		VALUES(#{imGroupId},#{title},#{content},#{isTop},#{isSentToNewMember},
+		       NOW(),NOW(),#{delFlag},#{operatorId},#{tenantId},#{messageSeqId})
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
@@ -48,6 +50,9 @@
 		<if test="delFlag != null">
 		del_flag_ = #{delFlag},
 		</if>
+		<if test="messageSeqId != null">
+			message_seq_id_ = #{messageSeqId},
+		</if>
 		<if test="operatorId != null">
 		operator_id_ = #{operatorId},
 		</if>
@@ -80,7 +85,7 @@
 	
 	<!-- 分页查询 -->
 	<select id="queryForPage" resultMap="ImGroupNoticeDto" parameterType="map">
-		SELECT ign.*,if(u.real_name_ is null or u.real_name_ = '',u.username_,u.real_name_) as real_name_, u.username_, u.avatar_
+		SELECT ign.*,if(u.real_name_ is null or u.real_name_ = '',u.username_,u.real_name_) as username_, u.avatar_
 		FROM im_group_notice ign left join sys_user u on ign.operator_id_ = u.id_
 		<where>
             ign.del_flag_ = 0 and ign.tenant_id_ = #{tenantId}

+ 32 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentStudentCourseDetailMapper.xml

@@ -362,6 +362,38 @@
             #{studentId}
         </foreach>)c
     </select>
+    <select id="findStudentCourseDetail"
+            resultType="com.ym.mec.biz.dal.wrapper.StudentWrapper$ClassStudentDto">
+        select
+         mgpscd.user_id_ userId,
+         SUM(CASE WHEN mgpscd.course_type_ = 'CLASSROOM' THEN mgpscd.sub_course_minutes_ ELSE 0 END) AS 'classroom'
+        ,SUM(CASE WHEN mgpscd.course_type_ = 'COMPREHENSIVE' THEN mgpscd.sub_course_minutes_ ELSE 0 END) AS 'comprehensive'
+        ,SUM(CASE WHEN mgpscd.course_type_ = 'HIGH' THEN mgpscd.sub_course_minutes_ ELSE 0 END) AS 'high'
+        ,SUM(CASE WHEN mgpscd.course_type_ = 'HIGH_ONLINE' THEN mgpscd.sub_course_minutes_ ELSE 0 END) AS 'highOnline'
+        ,SUM(CASE WHEN mgpscd.course_type_ = 'MIX' THEN mgpscd.sub_course_minutes_ ELSE 0 END) AS 'mix'
+        ,SUM(CASE WHEN mgpscd.course_type_ = 'SINGLE' THEN mgpscd.sub_course_minutes_ ELSE 0 END) AS 'single'
+        ,SUM(CASE WHEN mgpscd.course_type_ = 'TRAINING_MIX' THEN mgpscd.sub_course_minutes_ ELSE 0 END) AS 'trainingMix'
+        ,SUM(CASE WHEN mgpscd.course_type_ = 'TRAINING_SINGLE' THEN mgpscd.sub_course_minutes_ ELSE 0 END) AS 'trainingSingle'
+        from music_group_payment_student_course_detail mgpscd
+        where mgpscd.music_group_id_ = #{musicGroupId}
+        and mgpscd.user_id_ IN
+        <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+            #{studentId}
+        </foreach>
+        group by user_id_
+        <if test="query.courseType != null and query.courseType != '' and query.courseType != 'no_course'">
+            HAVING ${query.courseType} > 0
+        </if>
+        <if test="query.courseType != null and query.courseType == 'no_course'">
+            HAVING SUM(mgpscd.sub_course_minutes_) = 0
+        </if>
+        <if test="query.sortField != null and query.sortField != ''">
+            order by ${query.sortField} ${query.sortType}
+        </if>
+        <if test="query.sortField == null or query.sortField == ''">
+            order by user_id_
+        </if>
+    </select>
 
     <update id="clearRemainCourseMinutesByMusicGroupId">
     	update music_group_payment_student_course_detail set sub_course_minutes_ = 0 WHERE sub_course_minutes_ > 0 and music_group_id_ = #{musicGroupId}

+ 24 - 25
mec-biz/src/main/resources/config/mybatis/SysMusicScoreAccompanimentMapper.xml

@@ -46,10 +46,9 @@
 	<select id="get" resultMap="SysMusicScoreAccompaniment" >
 		SELECT sesa.id_,sesa.exam_song_id_,sesa.subject_id_,CASE WHEN sesa.metronome_mp3_url_ IS NULL OR sesa.metronome_mp3_url_ = '' THEN sesa.mp3_url_ ELSE sesa.metronome_mp3_url_ END url_,sesa.speed_,
 		sesa.xml_url_,sesa.is_show_fingering_,sesa.is_open_metronome_,sesa.memo_,sesa.track_,
-		ses.name_,ses.type_,ses.url_ mp3_url_,sesc.name_ categories_name_,sesc.id_ categories_id_,ses.client_type_,ses.metronome_url_,ses.midi_url_,ses.cbs_music_sheet_id_
+		ses.name_,ses.type_,ses.url_ mp3_url_,ses.cbs_music_categories_id_ categories_id_,ses.client_type_,ses.metronome_url_,ses.midi_url_,ses.cbs_music_sheet_id_
 		FROM sys_music_score ses
 		LEFT JOIN sys_music_score_accompaniment sesa ON ses.id_ = sesa.exam_song_id_
-		LEFT JOIN sys_music_score_categories sesc ON sesc.id_ = ses.music_score_categories_id_
 		WHERE sesa.id_ = #{id}
 	</select>
 	
@@ -100,11 +99,10 @@
 	<select id="queryPage" resultMap="SysMusicScoreAccompaniment" parameterType="map">
 		SELECT
 		    ses.name_,ses.type_,ses.url_,ses.id_ exam_song_id_,
-		       sesc.name_ categories_name_,sesc.id_ categories_id_,sesc.parent_id_ parent_categories_id_,ses.client_type_,
+		       ses.cbs_music_categories_id_ categories_id_,ses.client_type_,
 		ses.rank_ids_,ses.render_from_,ses.enable_evaluation_,ses.metronome_url_,ses.midi_url_,ses.play_mode_,ses.render_from_,
 		ses.ext_config_json_,ses.ext_style_config_json_,ses.cbs_music_sheet_id_
 		FROM sys_music_score ses
-		LEFT JOIN sys_music_score_categories sesc ON sesc.id_ = ses.music_score_categories_id_
 		<include refid="queryPageSql"/>
 		ORDER BY ses.order_,ses.name_
 		<include refid="global.limit"/>
@@ -114,7 +112,6 @@
 	<select id="queryCount" resultType="int">
 		SELECT COUNT(ses.id_)
 		FROM sys_music_score ses
-		LEFT JOIN sys_music_score_categories sesc ON sesc.id_ = ses.music_score_categories_id_
 		<include refid="queryPageSql"/>
 	</select>
 
@@ -134,29 +131,34 @@
 		</where>
 	</select>
 	<select id="queryAccPage" resultMap="SysMusicScoreAccompaniment">
-		SELECT ses.id_ exam_song_id_,ses.name_,ses.type_,ses.url_,sesc.name_ categories_name_,sesc.id_ categories_id_,
-		       sesc.parent_id_ parent_categories_id_,ses.client_type_,
+		SELECT ses.id_ exam_song_id_,ses.name_,ses.type_,ses.url_,ses.cbs_music_categories_id_ categories_id_,ses.client_type_,
 		ses.enable_evaluation_,ses.metronome_url_,ses.midi_url_,ses.play_mode_,ses.render_from_,ses.ext_config_json_,
 		ses.ext_style_config_json_,ses.rank_ids_,ses.cbs_music_sheet_id_
 		FROM sys_music_score ses
-		LEFT JOIN sys_music_score_categories sesc ON sesc.id_ = ses.music_score_categories_id_
 		<include refid="queryPageSql"/>
 		ORDER BY ses.order_,ses.name_
 	</select>
+	<select id="queryAccPage1" resultMap="SysMusicScoreAccompaniment">
+		SELECT ses.id_ exam_song_id_,ses.name_,ses.type_,ses.url_,ses.cbs_music_categories_id_ categories_id_,ses.metronome_url_,ses.cbs_music_sheet_id_
+		FROM sys_music_score ses
+		where ses.id_ IN
+			<foreach collection="musicScoreIds" separator="," item="item" open="(" close=")">
+				#{item}
+			</foreach>
+		ORDER BY ses.order_,ses.name_
+	</select>
 
 	<select id="findAccCount" resultType="java.lang.Integer">
 		SELECT COUNT(DISTINCT ses.id_)
 		FROM sys_music_score ses
-		LEFT JOIN sys_music_score_categories sesc ON sesc.id_ = ses.music_score_categories_id_
 		<include refid="queryPageSql"/>
 	</select>
     <select id="querySubjectIds" resultMap="com.ym.mec.biz.dal.dao.SubjectDao.Subject">
 		SELECT s.* FROM sys_music_score sms
 		LEFT JOIN `subject` s ON FIND_IN_SET(s.id_,sms.subject_ids_)
-		LEFT JOIN sys_music_score_categories sesc ON sesc.id_ = sms.music_score_categories_id_
-		WHERE sms.del_flag_ = 0 AND sms.cbs_music_sheet_id_ IS NOT NULL AND s.id_ IS NOT NULL AND sms.music_sheet_type_ = 'SINGLE'
+		WHERE sms.del_flag_ = 0 AND sms.cbs_music_sheet_id_ IS NOT NULL AND s.id_ IS NOT NULL
 		<if test="categoriesIdList != null and categoriesIdList.size > 0">
-			AND sesc.id_ IN
+			AND sms.cbs_music_categories_id_ IN
 			<foreach collection="categoriesIdList" separator="," item="item" open="(" close=")">
 				#{item}
 			</foreach>
@@ -170,12 +172,6 @@
     <sql id="queryPageSql">
 		<where>
 			ses.del_flag_ = 0
-			<if test="enable != null">
-				AND sesc.enable_ = #{enable}
-			</if>
-			<if test="parentId != null">
-				AND sesc.parent_id_ = #{parentId}
-			</if>
 			<if test="search != null and search != ''">
 				AND (ses.id_ = #{search} OR ses.name_ LIKE CONCAT('%',#{search},'%'))
 			</if>
@@ -186,22 +182,25 @@
 				AND ses.show_flag_ = #{showFlag}
 			</if>
 			<if test="categoriesIdList != null">
-				AND sesc.id_ IN
+				AND ses.cbs_music_categories_id_ IN
 				<foreach collection="categoriesIdList" separator="," item="item" open="(" close=")">
 					#{item}
 				</foreach>
 			</if>
+			<if test="musicScoreIds != null and musicScoreIds.size > 0">
+				AND ses.id_ IN
+				<foreach collection="musicScoreIds" separator="," item="item" open="(" close=")">
+					#{item}
+				</foreach>
+			</if>
 			<if test="filterCategoriesIds != null and filterCategoriesIds != ''">
-				AND find_in_set(sesc.id_,#{filterCategoriesIds}) = 0
+				AND find_in_set(ses.cbs_music_categories_id_,#{filterCategoriesIds}) = 0
 			</if>
 			<if test="categoriesIds != null and categoriesIds != ''">
-				AND find_in_set(sesc.id_,#{categoriesIds}) > 0
-			</if>
-			<if test="parentId != null">
-				AND sesc.parent_id_ = #{parentId}
+				AND find_in_set(ses.cbs_music_categories_id_,#{categoriesIds}) > 0
 			</if>
 			<if test="subjectId != null">
-				AND (FIND_IN_SET(#{subjectId},ses.subject_ids_) OR ses.subject_ids_ IS NULL OR ses.subject_ids_ = '')
+				AND (FIND_IN_SET(#{subjectId},ses.subject_ids_) OR ses.subject_ids_ IS NULL OR ses.subject_ids_ = '' OR ses.is_all_subject_)
 			</if>
 			<if test="clientType != null">
 				AND ses.client_type_ = #{clientType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}

+ 38 - 26
mec-biz/src/main/resources/config/mybatis/SysMusicScoreMapper.xml

@@ -10,8 +10,9 @@
 		<result column="id_" property="id" />
 		<result column="name_" property="name" />
 		<result column="categories_name_" property="categoriesName" />
-		<result column="music_score_categories_id_" property="musicScoreCategoriesId" />
-		<result column="categories_id_" property="categoriesId" />
+		<result column="cbs_music_categories_id_" property="musicScoreCategoriesId" />
+		<result column="cbs_music_categories_id_" property="cbsMusicCategoriesId" />
+		<result column="cbs_music_categories_id_" property="categoriesId" />
 		<result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
 		<result column="subject_ids_" property="subjectIds" />
 		<result column="speed_" property="speed" />
@@ -25,6 +26,7 @@
 		<result column="create_user_name_" property="createUserName" />
 		<result column="is_open_metronome_" property="isOpenMetronome" />
 		<result column="del_flag_" property="delFlag" />
+		<result column="client_show_flag_" property="clientShowFlag" />
 		<result column="show_flag_" property="showFlag" />
 		<result column="order_" property="order" />
 		<result column="rank_ids_" property="rankIds" />
@@ -52,8 +54,9 @@
 	
 	<!-- 向数据库增加一条记录 -->
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.SysMusicScore" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO sys_music_score (music_score_categories_id_,name_,type_,speed_,url_,metronome_url_,midi_url_,create_user_id_,order_,
-		                             update_time_,create_time_,client_type_,rank_ids_,render_from_,enable_evaluation_,show_flag_,play_mode_,muse_score_url_,muse_score_memo_,ext_config_json_,ext_style_config_json_)
+		INSERT INTO sys_music_score (cbs_music_categories_id_,name_,type_,speed_,url_,metronome_url_,midi_url_,create_user_id_,order_,
+		                             update_time_,create_time_,client_type_,rank_ids_,render_from_,
+		                             enable_evaluation_,show_flag_,play_mode_,muse_score_url_,muse_score_memo_,ext_config_json_,ext_style_config_json_)
 		VALUES(#{musicScoreCategoriesId},#{name},#{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
 		       #{speed},#{url},#{metronomeUrl},#{midiUrl},#{createUserId},#{order},NOW(),NOW(),#{clientType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
 		       #{rankIds},#{renderFrom},#{enableEvaluation},#{showFlag},#{playMode},#{museScoreUrl},#{museScoreMemo},#{extConfigJson},#{extStyleConfigJson})
@@ -87,7 +90,7 @@
 				del_flag_ = #{delFlag},
 			</if>
 			<if test="musicScoreCategoriesId != null">
-				music_score_categories_id_ = #{musicScoreCategoriesId},
+				cbs_music_categories_id_ = #{musicScoreCategoriesId},
 			</if>
 			<if test="createUserId != null">
 				create_user_id_ = #{createUserId},
@@ -130,38 +133,35 @@
 
 	<!-- 全查询 -->
 	<select id="findAll" resultMap="SysMusicScore">
-		SELECT ses.*,su.real_name_ create_user_name_,smsc.name_ categories_name_,smsc.id_ categories_id_
+		SELECT ses.*,su.real_name_ create_user_name_,ses.cbs_music_categories_id_ categories_id_
 		FROM sys_music_score ses
 		LEFT JOIN sys_user su ON ses.create_user_id_ = su.id_
-		LEFT JOIN sys_music_score_categories smsc ON smsc.id_ = ses.music_score_categories_id_
 		<include refid="queryPageSql"/>
 		GROUP BY ses.id_
-		ORDER BY ses.music_score_categories_id_ DESC,ses.order_ ASC,ses.create_time_ DESC,ses.id_ desc
+		ORDER BY ses.cbs_music_categories_id_ DESC,ses.order_ ASC,ses.create_time_ DESC,ses.id_ desc
 	</select>
 
 	<!-- 分页查询 -->
 	<select id="queryPage" resultMap="SysMusicScore" parameterType="map">
-		SELECT ses.*,su.real_name_ create_user_name_,smsc.name_ categories_name_,smsc.id_ categories_id_,ses.subject_ids_
+		SELECT ses.*,su.real_name_ create_user_name_,ses.cbs_music_categories_id_ categories_id_,ses.subject_ids_
 		FROM sys_music_score ses
 		LEFT JOIN sys_user su ON ses.create_user_id_ = su.id_
-		LEFT JOIN sys_music_score_categories smsc ON smsc.id_ = ses.music_score_categories_id_
 		<include refid="queryPageSql"/>
 		GROUP BY ses.id_
-		ORDER BY ses.music_score_categories_id_ DESC,ses.order_ ASC,ses.create_time_ DESC,ses.id_ desc
+		ORDER BY ses.cbs_music_categories_id_ DESC,ses.order_ ASC,ses.create_time_ DESC,ses.id_ desc
 		<include refid="global.limit"/>
 	</select>
 	
 	<!-- 查询当前表的总记录数 -->
 	<select id="queryCount" resultType="int">
 		SELECT COUNT(DISTINCT ses.id_) FROM sys_music_score ses
-		LEFT JOIN sys_music_score_categories smsc ON smsc.id_ = ses.music_score_categories_id_
 		<include refid="queryPageSql"/>
 	</select>
     <select id="findByIds" resultMap="SysMusicScore">
 		SELECT * FROM sys_music_score WHERE FIND_IN_SET(id_,#{musicScoreIds})
 	</select>
     <select id="countBuyCategoriesIds" resultType="java.lang.Integer">
-		SELECT COUNT(0) FROM sys_music_score WHERE FIND_IN_SET(music_score_categories_id_,#{categoriesIds}) AND del_flag_ = 0
+		SELECT COUNT(0) FROM sys_music_score WHERE FIND_IN_SET(cbs_music_categories_id_,#{categoriesIds}) AND del_flag_ = 0
 	</select>
 	<select id="findByCbsId" resultMap="SysMusicScore">
 		SELECT * FROM sys_music_score WHERE 1 = 1
@@ -187,7 +187,7 @@
 			update sys_music_score set music_score_categories_id_ = #{item.musicSheetCategoryId},
 			client_type_ = 'SMART_PRACTICE',type_ = 'COMMON',
 			rank_ids_ = CASE WHEN #{item.paymentType} = 'FREE' THEN NULL ELSE '1' END,
-			order_ = #{item.sortNo},del_flag_ = 0,show_flag_ = #{item.status},
+			order_ = #{item.sortNo},del_flag_ = 0,client_show_flag_ = #{item.status},
 			score_type_ = #{item.scoreType},is_convertible_score_ = #{item.isConvertibleScore}
 			<if test="item.musicSheetUpdate != null">
 				,name_ = #{item.musicSheetUpdate.name},
@@ -195,13 +195,16 @@
 				speed_ = #{item.musicSheetUpdate.playSpeed},
 				enable_evaluation_ = #{item.musicSheetUpdate.canEvaluate},
 				play_mode_ = #{item.musicSheetUpdate.playMode},
-				music_sheet_type_ = #{item.musicSheetUpdate.musicSheetType}
+				music_sheet_type_ = #{item.musicSheetUpdate.musicSheetType},
+				is_all_subject_ = #{item.musicSheetUpdate.isAllSubject},
+				cbs_music_categories_id_ = #{item.musicSheetUpdate.musicCategoryId},
+				show_flag_ = #{item.musicSheetUpdate.platformStatus}
 			</if>
 			where cbs_music_sheet_id_ = #{item.musicSheetId}
 		</foreach>
 	</update>
 	<update id="batchEnable">
-		update sys_music_score set show_flag_ = #{status} where FIND_IN_SET(cbs_music_sheet_id_,#{cbsMusicSheetIds});
+		update sys_music_score set client_show_flag_ = #{status} where FIND_IN_SET(cbs_music_sheet_id_,#{cbsMusicSheetIds});
 	</update>
 	<update id="batchDel">
 		update sys_music_score set del_flag_ = 1 where FIND_IN_SET(cbs_music_sheet_id_,#{cbsMusicSheetIds});
@@ -216,18 +219,21 @@
 		speed_ = #{param.playSpeed},
 		enable_evaluation_ = #{param.canEvaluate},
 		play_mode_ = #{param.playMode},
-		music_sheet_type_ = #{param.musicSheetType}
+		music_sheet_type_ = #{param.musicSheetType},
+		is_all_subject_ = #{param.isAllSubject},
+		show_flag_ = #{param.platformStatus},
+		cbs_music_categories_id_ = #{param.musicCategoryId}
 		where cbs_music_sheet_id_ = #{param.id}
 	</update>
 
 	<insert id="batchInsert">
 		insert into sys_music_score
-		(music_score_categories_id_,client_type_,type_,rank_ids_,order_
-		,name_,subject_ids_,speed_,enable_evaluation_,play_mode_,show_flag_,cbs_music_sheet_id_,music_sheet_type_,
-		score_type_,is_convertible_score_)
+		(cbs_music_categories_id_,client_type_,type_,rank_ids_,order_
+		,name_,subject_ids_,speed_,enable_evaluation_,play_mode_,client_show_flag_,show_flag_,cbs_music_sheet_id_,music_sheet_type_,
+		score_type_,is_convertible_score_,is_all_subject_)
 		values
 		<foreach collection="vos" item="item" separator=",">
-			(#{item.musicSheetCategoryId},
+			(#{item.musicSheetUpdate.musicCategoryId},
 			'SMART_PRACTICE','COMMON',
 			CASE WHEN #{item.paymentType} = 'FREE' THEN NULL ELSE '1' END,
 			#{item.sortNo},
@@ -235,9 +241,9 @@
 			#{item.musicSheetUpdate.subjectIds},
 			#{item.musicSheetUpdate.playSpeed},
 			#{item.musicSheetUpdate.canEvaluate},
-			#{item.musicSheetUpdate.playMode},0,
+			#{item.musicSheetUpdate.playMode},#{item.status},#{item.musicSheetUpdate.platformStatus},
 			#{item.musicSheetId},#{item.musicSheetUpdate.musicSheetType},
-			#{item.scoreType},#{item.isConvertibleScore}
+			#{item.scoreType},#{item.isConvertibleScore},#{item.musicSheetUpdate.isAllSubject}
 			)
 		</foreach>
 	</insert>
@@ -253,7 +259,7 @@
 		<where>
 			ses.del_flag_ = 0 AND ses.cbs_music_sheet_id_ IS NOT NULL
 			<if test="categoriesIdList != null">
-				AND smsc.id_ IN
+				AND ses.cbs_music_categories_id_ IN
 				<foreach collection="categoriesIdList" separator="," item="item" open="(" close=")">
 					#{item}
 				</foreach>
@@ -264,6 +270,12 @@
 			<if test="showFlag != null">
 				AND ses.show_flag_ = #{showFlag}
 			</if>
+			<if test="clientShowFlag != null">
+				AND ses.client_show_flag_ = #{clientShowFlag}
+			</if>
+			<if test="clientFlag != null and clientFlag == true">
+				AND ses.client_show_flag_ = true AND ses.show_flag_ = true
+			</if>
 			<if test="isConvertibleScore != null">
 				AND ses.is_convertible_score_ = #{isConvertibleScore}
 			</if>
@@ -271,10 +283,10 @@
 				AND ses.score_type_ = #{scoreType}
 			</if>
 			<if test="subjectId != null">
-				AND (FIND_IN_SET(#{subjectId},ses.subject_ids_) OR ses.subject_ids_ IS NULL OR ses.subject_ids_ = '' OR ses.music_sheet_type_ = 'CONCERT')
+				AND (FIND_IN_SET(#{subjectId},ses.subject_ids_) OR ses.subject_ids_ IS NULL OR ses.subject_ids_ = '' OR ses.is_all_subject_)
 			</if>
 			<if test="subjectIds != null and subjectIds != ''">
-				AND (FIND_IN_SET(#{subjectIds},ses.subject_ids_) OR ses.subject_ids_ IS NULL OR ses.subject_ids_ = '' OR ses.music_sheet_type_ = 'CONCERT')
+				AND (FIND_IN_SET(#{subjectIds},ses.subject_ids_) OR ses.subject_ids_ IS NULL OR ses.subject_ids_ = '' OR ses.is_all_subject_)
 			</if>
 			<if test="clientType != null">
 				AND ses.client_type_ = #{clientType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}

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

@@ -62,6 +62,7 @@
         <result column="contract_url_" property="contractUrl"/>
         <result column="tenant_id_" property="tenantId"/>
         <result column="courseware_limit_" property="coursewareLimit"/>
+        <result column="courseware_flag_" property="coursewareFlag"/>
     </resultMap>
     
     <resultMap type="com.ym.mec.biz.dal.dto.TeacherDefaultSalaryDto" id="TeacherDefaultSalaryDto">
@@ -118,7 +119,7 @@
         su.real_name_,su.id_card_no_,su.password_,su.salt_,su.phone_,su.avatar_,
         su.lock_flag_,su.del_flag_,su.wx_openid_,su.qq_openid_,su.user_type_,
         su.gender_,su.nation_,su.birthdate_,su.email_,su.im_token_,su.username_,su.organ_id_,
-        t.is_settlement_salary_,su.tenant_id_, t.courseware_limit_
+        t.is_settlement_salary_,su.tenant_id_, t.courseware_limit_, t.courseware_flag_
         FROM teacher t
         LEFT JOIN sys_user su ON t.id_ = su.id_
         WHERE t.id_ = #{id} AND su.del_flag_ = '0'
@@ -323,6 +324,9 @@
             <if test="coursewareLimit != null">
                 courseware_limit_ = #{coursewareLimit},
             </if>
+            <if test="coursewareFlag != null">
+                courseware_flag_ = #{coursewareFlag},
+            </if>
         </set>
         WHERE id_ = #{id} and tenant_id_ = #{tenantId}
     </update>

+ 64 - 0
mec-biz/src/main/resources/config/mybatis/TempDirectorTrainingCampDetailMapper.xml

@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ym.mec.biz.dal.dao.TempDirectorTrainingCampDetailDao">
+
+    <select id="getStat"
+            resultType="com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampWrapper$TempDirectorTrainingCamp">
+
+        select
+        t.temp_director_training_camp_id_ as id,
+        count(t.id_) as applyCount,
+        sum(if(t.payment_status_ = 'PAID',1,0)) as payCount,
+        sum(if(t.payment_status_ = 'PAID',t.payment_amount_,0)) as payAmount
+        from temp_director_training_camp_detail t
+        where t.temp_director_training_camp_id_ in
+        <foreach collection="ids" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+        group by t.temp_director_training_camp_id_
+    </select>
+
+    <sql id="SelectSql">
+        <if test="param.tempDirectorTrainingCampId != null">
+            and t.temp_director_training_camp_id_ = #{param.tempDirectorTrainingCampId}
+        </if>
+        <if test="param.search != null and param.search != ''">
+                and (t.username_ like concat('%', #{param.search}, '%') or t.mobile_ like concat('%', #{param.search}, '%'))
+            </if>
+            <if test="param.provinceCode != null and param.provinceCode != ''">
+                and t.province_code_ = #{param.provinceCode}
+            </if>
+            <if test="param.cityCode != null and param.cityCode != ''">
+                and t.city_code_ = #{param.cityCode}
+            </if>
+            <if test="param.regionCode != null and param.regionCode != ''">
+                and t.region_code_ = #{param.regionCode}
+            </if>
+            <if test="param.paymentStatus != null and param.paymentStatus != ''">
+                and t.payment_status_ = #{param.paymentStatus}
+            </if>
+    </sql>
+    <select id="queryPage"
+            resultType="com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampDetailWrapper$TempDirectorTrainingCampDetail">
+
+        select *
+        from temp_director_training_camp_detail t
+        <where>
+            <include refid="SelectSql"/>
+        </where>
+        order by t.id_ desc
+    </select>
+
+    <select id="queryPageStat"
+            resultType="com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampDetailWrapper$TempDirectorTrainingCampDetailStat">
+        select
+        count(t.id_) as applyCount,
+        sum(if(t.payment_status_ = 'PAID',1,0)) as payCount,
+        sum(if(t.bird_flag_ =1 and t.payment_status_ = 'PAID',1,0)) as birdCount,
+        sum(if(t.payment_status_ = 'PAID',t.payment_amount_,0)) as payAmount
+        from temp_director_training_camp_detail t
+        <where>
+            <include refid="SelectSql"/>
+        </where>
+    </select>
+</mapper>

+ 39 - 0
mec-biz/src/main/resources/config/mybatis/TempDirectorTrainingCampMapper.xml

@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ym.mec.biz.dal.dao.TempDirectorTrainingCampDao">
+
+    <select id="queryPage"
+            resultType="com.ym.mec.biz.dal.wrapper.TempDirectorTrainingCampWrapper$TempDirectorTrainingCamp">
+        select id_,
+               name_,
+               apply_start_date_,
+               apply_end_date_,
+               bird_price_end_date_,
+               bird_price_,
+               current_price_,
+               original_price_,
+               update_by_,
+               create_time_,
+               update_time_
+        from temp_director_training_camp t
+        <where>
+            <if test="param.search != null and param.search != ''">
+                and (t.name_ like concat('%', #{param.search}, '%') )
+            </if>
+            <if test="param.status != null and param.status != ''">
+                <choose>
+                    <when test="param.status == 'NOT_START'">
+                        and now() &lt; t.apply_start_date_
+                    </when>
+                    <when test="param.status == 'APPLY'">
+                        and now() &gt;= t.apply_start_date_ and now() &lt;= t.apply_end_date_
+                    </when>
+                    <when test="param.status == 'END'">
+                        and now() &gt; t.apply_end_date_
+                    </when>
+                </choose>
+            </if>
+        </where>
+        order by t.id_ desc
+    </select>
+</mapper>

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

@@ -143,7 +143,7 @@ public class GroupController{
                 for (String groupId : integers) {
                     MessageWrapper.GroupMessage groupMessage = JSON.parseObject(JSON.toJSONString(build.groupId(groupId)),
                         MessageWrapper.GroupMessage.class);
-                    Boolean ret = imPluginContext.getPluginService().sendGroupMessage(groupMessage);
+                    String ret = imPluginContext.getPluginService().sendGroupMessage(groupMessage);
                     log.info("batchSendPrivateMessage GROUP tencentCloud senderId={}, ret={}, message={}", build.getSenderId(), ret, JSON.toJSONString(groupMessage));
 
                 }
@@ -152,7 +152,7 @@ public class GroupController{
                 MessageWrapper.GroupMessage groupMessage = JSON.parseObject(build.targetIds(integers).toString(),
                     MessageWrapper.GroupMessage.class);
                 // 融云消息
-                Boolean ret = imPluginContext.getPluginService().sendGroupMessage(groupMessage);
+                String ret = imPluginContext.getPluginService().sendGroupMessage(groupMessage);
                 log.info("batchSendPrivateMessage GROUP rongCloud senderId={}, ret={}", build.getSenderId(), ret);
             }
 

+ 1 - 1
mec-im/src/main/java/com/ym/controller/PrivateController.java

@@ -117,7 +117,7 @@ public class PrivateController {
                 }
             }
         }
-        Boolean ret = imPluginContext.getPluginService().sendPrivateMessage(build);
+        String ret = imPluginContext.getPluginService().sendPrivateMessage(build);
         log.info("privateMessage send ret:{}, service={}, content={}", ret, imPluginContext.defaultService(), JSON.toJSONString(build));
 
         return true;

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

@@ -20,7 +20,7 @@ public class MusicScoreMessage {
     private String mp3Url = "";
 
     /** 速度 */
-    private Integer speed;
+    private String speed;
 
     /**  */
     private String xmlUrl = "";

+ 1 - 1
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/yeepay/YeepayPaymentService.java

@@ -35,7 +35,7 @@ public class YeepayPaymentService {
 		request.addParam("orderId", params.get("orderId"));
 		request.addParam("orderAmount", params.get("orderAmount"));
 		request.addParam("expiredTime", DateUtil.addMinutes(new Date(), 30));
-//		request.addParam("notifyUrl", params.get("notifyUrl"));
+		request.addParam("notifyUrl", params.get("notifyUrl"));
 		request.addParam("redirectUrl", params.get("redirectUrl"));
 		request.addParam("scene", params.get("scene"));
 		request.addParam("goodsName", params.get("goodsName"));

+ 2 - 2
pom.xml

@@ -25,8 +25,8 @@
 		<docker.host>http://127.0.0.1:2375</docker.host>
 		<docker.registry.repository>127.0.0.1:5000</docker.registry.repository>
 		<docker.maven.plugin.version>1.2.2</docker.maven.plugin.version>
-		<com.microsvc.toolkit.version>1.0.4</com.microsvc.toolkit.version>
-		<cbs.version>1.0.14</cbs.version>
+		<com.microsvc.toolkit.version>1.0.8-RC1</com.microsvc.toolkit.version>
+		<cbs.version>1.0.16</cbs.version>
 	</properties>
 
 	<dependencyManagement>