瀏覽代碼

Merge branch 'online1' of http://git.dayaedu.com/yonge/mec into active_course_2021-09-26~29

zouxuan 3 年之前
父節點
當前提交
17870a6eb0
共有 22 個文件被更改,包括 965 次插入44 次删除
  1. 1 1
      cms/src/main/java/com/ym/mec/cms/controller/NewsController.java
  2. 6 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentMusicScoreDao.java
  3. 41 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicEnlightenmentQuestionnaireDao.java
  4. 43 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicEnlightenmentQuestionnaireStatDto.java
  5. 204 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicEnlightenmentQuestionnaire.java
  6. 55 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicEnlightenmentQuestionnaireQueryInfo.java
  7. 54 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicEnlightenmentQuestionnaireService.java
  8. 179 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicEnlightenmentQuestionnaireServiceImpl.java
  9. 149 0
      mec-biz/src/main/resources/config/mybatis/MusicEnlightenmentQuestionnaireMapper.xml
  10. 1 1
      mec-biz/src/main/resources/config/mybatis/StudentPaymentRouteOrderMapper.xml
  11. 6 12
      mec-biz/src/main/resources/config/mybatis/courseScheduleStudentMusicScoreMapper.xml
  12. 4 0
      mec-im/src/main/java/com/ym/dao/RoomDao.java
  13. 1 0
      mec-im/src/main/java/com/ym/mec/im/message/DeviceStateChangedMessage.java
  14. 2 0
      mec-im/src/main/java/com/ym/pojo/ReqDeviceControlData.java
  15. 2 0
      mec-im/src/main/java/com/ym/pojo/Room.java
  16. 2 0
      mec-im/src/main/java/com/ym/pojo/RoomResult.java
  17. 32 25
      mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java
  18. 2 1
      mec-student/src/main/java/com/ym/mec/student/config/ResourceServerConfig.java
  19. 37 0
      mec-student/src/main/java/com/ym/mec/student/controller/MusicEnlightenmentQuestionnaireController.java
  20. 47 0
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  21. 64 0
      mec-web/src/main/java/com/ym/mec/web/controller/MusicEnlightenmentQuestionnaireController.java
  22. 33 0
      mec-web/src/main/java/com/ym/mec/web/controller/SysMessageConfigController.java

+ 1 - 1
cms/src/main/java/com/ym/mec/cms/controller/NewsController.java

@@ -62,7 +62,7 @@ public class NewsController extends BaseController {
 	@Autowired
 	private SysConfigService sysConfigService;
 
-	private final LocalDate xiaMenBannerStartShowTime = LocalDate.parse("2021-10-11", DateUtil.dateFormatter);
+	private final LocalDate xiaMenBannerStartShowTime = LocalDate.parse("2021-10-10", DateUtil.dateFormatter);
 
 	@ApiOperation("资讯列表分页查询")
 	@GetMapping(value = "/list")

+ 6 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentMusicScoreDao.java

@@ -8,8 +8,6 @@ import java.util.List;
 
 public interface CourseScheduleStudentMusicScoreDao extends BaseDAO<Integer, CourseScheduleStudentMusicScore> {
 
-    int updateByMusicScore(CourseScheduleStudentMusicScore courseScheduleStudentMusicScore);
-
     List<CourseScheduleStudentMusicScore> queryByScoreIdAndCourseId(@Param("musicScoreAccompanimentId") Integer musicScoreAccompanimentId,
                                                                     @Param("courseId") Long courseId,
                                                                     @Param("userId") Integer userId,
@@ -31,7 +29,9 @@ public interface CourseScheduleStudentMusicScoreDao extends BaseDAO<Integer, Cou
      * @param musicScoreAccompanimentId
      * @return
      */
-    int openPlayStatus(@Param("scheduleId") long scheduleId,@Param("musicScoreAccompanimentId") Integer musicScoreAccompanimentId);
+    int openPlayStatus(@Param("scheduleId") long scheduleId,
+                       @Param("musicScoreAccompanimentId") Integer musicScoreAccompanimentId,
+                       @Param("userId") Integer userId);
 
     /**
      * 开启伴奏播放
@@ -39,5 +39,7 @@ public interface CourseScheduleStudentMusicScoreDao extends BaseDAO<Integer, Cou
      * @param musicScoreAccompanimentId
      * @return
      */
-    int openAccompanimentPlayStatus(@Param("scheduleId") long scheduleId, @Param("musicScoreAccompanimentId") Integer musicScoreAccompanimentId);
+    int openAccompanimentPlayStatus(@Param("scheduleId") long scheduleId,
+                                    @Param("musicScoreAccompanimentId") Integer musicScoreAccompanimentId,
+                                    @Param("userId") Integer userId);
 }

+ 41 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicEnlightenmentQuestionnaireDao.java

@@ -0,0 +1,41 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.dto.MusicEnlightenmentQuestionnaireStatDto;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.biz.dal.entity.MusicEnlightenmentQuestionnaire;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface MusicEnlightenmentQuestionnaireDao extends BaseDAO<Long, MusicEnlightenmentQuestionnaire> {
+
+    /**
+     * @describe 获取乐团下所有启蒙问卷
+     * @author Joburgess
+     * @date 2021/10/13 0013
+     * @param musicGroupId:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.MusicEnlightenmentQuestionnaire>
+     */
+    List<MusicEnlightenmentQuestionnaire> findByMusicGroupId(@Param("musicGroupId") String musicGroupId);
+
+    /**
+     * @describe 查询学员月u谈启蒙课问卷
+     * @author Joburgess
+     * @date 2021/10/13 0013
+     * @param musicGroupId:
+     * @param userPhone:
+     * @return com.ym.mec.biz.dal.entity.MusicEnlightenmentQuestionnaire
+     */
+    MusicEnlightenmentQuestionnaire lockUserMusicEnlightenmentQuestionnaire(@Param("musicGroupId") String musicGroupId,
+                                                @Param("userPhone") String userPhone);
+
+    /**
+     * @describe 启蒙课问卷统计
+     * @author Joburgess
+     * @date 2021/10/13 0013
+     * @param musicGroupId:
+     * @return java.util.List<com.ym.mec.biz.dal.dto.MusicEnlightenmentQuestionnaireStatDto>
+     */
+    List<MusicEnlightenmentQuestionnaireStatDto> musicEnlightenmentQuestionnaireStat(@Param("musicGroupId") String musicGroupId);
+	
+}

+ 43 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicEnlightenmentQuestionnaireStatDto.java

@@ -0,0 +1,43 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/10/13 0013
+ */
+public class MusicEnlightenmentQuestionnaireStatDto {
+
+    @ApiModelProperty("教师推荐专业名称")
+    private String subjectName;
+
+    @ApiModelProperty("人数")
+    private Integer userNum;
+
+    @ApiModelProperty("在学乐器人数")
+    private Integer learningUserNum;
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public Integer getUserNum() {
+        return userNum;
+    }
+
+    public void setUserNum(Integer userNum) {
+        this.userNum = userNum;
+    }
+
+    public Integer getLearningUserNum() {
+        return learningUserNum;
+    }
+
+    public void setLearningUserNum(Integer learningUserNum) {
+        this.learningUserNum = learningUserNum;
+    }
+}

+ 204 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicEnlightenmentQuestionnaire.java

@@ -0,0 +1,204 @@
+package com.ym.mec.biz.dal.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+import java.util.Date;
+
+/**
+ * 对应数据库表(music_enlightenment_questionnaire):
+ */
+public class MusicEnlightenmentQuestionnaire {
+
+	/**  */
+	private Long id;
+	
+	/** 乐团编号 */
+	@ApiModelProperty("乐团编号")
+	private String musicGroupId;
+	
+	/**  */
+	@ApiModelProperty("用户编号")
+	private Integer userId;
+	
+	/**  */
+	@ApiModelProperty("用户名")
+	private String userName;
+	
+	/**  */
+	@ApiModelProperty("联系方式")
+	private String phone;
+	
+	/** 年级 */
+	@ApiModelProperty("年级")
+	private String currentGrade;
+	
+	/** 年级数字 */
+	@ApiModelProperty("年级数字")
+	private Integer currentGradeNum;
+	
+	/** 班级 */
+	@ApiModelProperty("班级")
+	private String currentClass;
+	
+	/** 教师推荐专业 */
+	@ApiModelProperty("教师推荐专业")
+	private Integer teacherRecommandSubjectId;
+
+	@ApiModelProperty("专业名称")
+	private String subjectName;
+	
+	/** 是否正在学习某乐器 */
+	@ApiModelProperty("是否正在学习某乐器")
+	private Boolean musicalInstrumentsLearning = false;
+	
+	/** 学习乐器名称 */
+	@ApiModelProperty("学习乐器名称")
+	private String musicalInstrumentsName;
+	
+	/** 是否参加家长会 */
+	@ApiModelProperty("是否参加家长会")
+	private Boolean joinParentMeeting = false;
+	
+	/** 备注 */
+	@ApiModelProperty("备注")
+	private String remark;
+
+	private Date createTime;
+
+	private Date updateTime;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getMusicGroupId() {
+		return musicGroupId;
+	}
+
+	public void setMusicGroupId(String musicGroupId) {
+		this.musicGroupId = musicGroupId;
+	}
+
+	public Integer getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Integer userId) {
+		this.userId = userId;
+	}
+
+	public String getUserName() {
+		return userName;
+	}
+
+	public void setUserName(String userName) {
+		this.userName = userName;
+	}
+
+	public String getPhone() {
+		return phone;
+	}
+
+	public void setPhone(String phone) {
+		this.phone = phone;
+	}
+
+	public String getCurrentGrade() {
+		return currentGrade;
+	}
+
+	public void setCurrentGrade(String currentGrade) {
+		this.currentGrade = currentGrade;
+	}
+
+	public Integer getCurrentGradeNum() {
+		return currentGradeNum;
+	}
+
+	public void setCurrentGradeNum(Integer currentGradeNum) {
+		this.currentGradeNum = currentGradeNum;
+	}
+
+	public String getCurrentClass() {
+		return currentClass;
+	}
+
+	public void setCurrentClass(String currentClass) {
+		this.currentClass = currentClass;
+	}
+
+	public Integer getTeacherRecommandSubjectId() {
+		return teacherRecommandSubjectId;
+	}
+
+	public void setTeacherRecommandSubjectId(Integer teacherRecommandSubjectId) {
+		this.teacherRecommandSubjectId = teacherRecommandSubjectId;
+	}
+
+	public String getSubjectName() {
+		return subjectName;
+	}
+
+	public void setSubjectName(String subjectName) {
+		this.subjectName = subjectName;
+	}
+
+	public Boolean getMusicalInstrumentsLearning() {
+		return musicalInstrumentsLearning;
+	}
+
+	public void setMusicalInstrumentsLearning(Boolean musicalInstrumentsLearning) {
+		this.musicalInstrumentsLearning = musicalInstrumentsLearning;
+	}
+
+	public String getMusicalInstrumentsName() {
+		return musicalInstrumentsName;
+	}
+
+	public void setMusicalInstrumentsName(String musicalInstrumentsName) {
+		this.musicalInstrumentsName = musicalInstrumentsName;
+	}
+
+	public Boolean getJoinParentMeeting() {
+		return joinParentMeeting;
+	}
+
+	public void setJoinParentMeeting(Boolean joinParentMeeting) {
+		this.joinParentMeeting = joinParentMeeting;
+	}
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 55 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicEnlightenmentQuestionnaireQueryInfo.java

@@ -0,0 +1,55 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/10/13 0013
+ */
+public class MusicEnlightenmentQuestionnaireQueryInfo extends QueryInfo {
+
+    @ApiModelProperty("乐团编号")
+    private String musicGroupId;
+
+    @ApiModelProperty("年级数字")
+    private Integer currentGradeNum;
+
+    @ApiModelProperty("教师推荐专业")
+    private Integer teacherRecommandSubjectId;
+
+    @ApiModelProperty("是否正在学习某乐器")
+    private Boolean musicalInstrumentsLearning;
+
+    public String getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(String musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+
+    public Integer getCurrentGradeNum() {
+        return currentGradeNum;
+    }
+
+    public void setCurrentGradeNum(Integer currentGradeNum) {
+        this.currentGradeNum = currentGradeNum;
+    }
+
+    public Integer getTeacherRecommandSubjectId() {
+        return teacherRecommandSubjectId;
+    }
+
+    public void setTeacherRecommandSubjectId(Integer teacherRecommandSubjectId) {
+        this.teacherRecommandSubjectId = teacherRecommandSubjectId;
+    }
+
+    public Boolean getMusicalInstrumentsLearning() {
+        return musicalInstrumentsLearning;
+    }
+
+    public void setMusicalInstrumentsLearning(Boolean musicalInstrumentsLearning) {
+        this.musicalInstrumentsLearning = musicalInstrumentsLearning;
+    }
+}

+ 54 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/MusicEnlightenmentQuestionnaireService.java

@@ -0,0 +1,54 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.dto.MusicEnlightenmentQuestionnaireStatDto;
+import com.ym.mec.biz.dal.entity.MusicEnlightenmentQuestionnaire;
+import com.ym.mec.biz.dal.page.MusicEnlightenmentQuestionnaireQueryInfo;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.service.BaseService;
+
+import java.util.Date;
+import java.util.List;
+
+public interface MusicEnlightenmentQuestionnaireService extends BaseService<Long, MusicEnlightenmentQuestionnaire> {
+
+    /**
+     * @describe 添加启蒙课问卷
+     * @author Joburgess
+     * @date 2021/10/13 0013
+     * @param enlightenmentQuestionnaire:
+     * @return void
+     */
+    void addEnlightenmentQuestionnaire(MusicEnlightenmentQuestionnaire enlightenmentQuestionnaire);
+
+    PageInfo<MusicEnlightenmentQuestionnaire> queryPage(MusicEnlightenmentQuestionnaireQueryInfo queryInfo);
+
+    /**
+     * @describe 获取指定用户的乐团启蒙问卷记录
+     * @author Joburgess
+     * @date 2021/10/13 0013
+     * @param musicGroupId:
+     * @param phone:
+     * @return com.ym.mec.biz.dal.entity.MusicEnlightenmentQuestionnaire
+     */
+    MusicEnlightenmentQuestionnaire getUserMusicEnlightenmentQuestionnaire(String musicGroupId, String phone);
+
+    /**
+     * @describe 启蒙课问卷统计
+     * @author Joburgess
+     * @date 2021/10/13 0013
+     * @param musicGroupId:
+     * @return java.util.List<com.ym.mec.biz.dal.dto.MusicEnlightenmentQuestionnaireStatDto>
+     */
+    List<MusicEnlightenmentQuestionnaireStatDto> musicEnlightenmentQuestionnaireStat(String musicGroupId);
+
+    /**
+     * 发送家长会通知
+     * @param userId
+     * @param musicGroupId
+     * @param meetingDate
+     * @param address
+     * @return
+     */
+    boolean sendParentMeetingNotice(Integer userId, String musicGroupId, Date meetingDate, String address);
+
+}

+ 179 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicEnlightenmentQuestionnaireServiceImpl.java

@@ -0,0 +1,179 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.dto.MusicEnlightenmentQuestionnaireStatDto;
+import com.ym.mec.biz.dal.entity.MusicEnlightenmentQuestionnaire;
+import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.entity.Student;
+import com.ym.mec.biz.dal.entity.SysUserCashAccount;
+import com.ym.mec.biz.dal.enums.MessageTypeEnum;
+import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
+import com.ym.mec.biz.dal.page.MusicEnlightenmentQuestionnaireQueryInfo;
+import com.ym.mec.biz.service.MusicEnlightenmentQuestionnaireService;
+import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.common.dal.BaseDAO;
+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.service.impl.BaseServiceImpl;
+import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
+import com.ym.mec.util.collection.MapUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+public class MusicEnlightenmentQuestionnaireServiceImpl extends BaseServiceImpl<Long, MusicEnlightenmentQuestionnaire>  implements MusicEnlightenmentQuestionnaireService {
+	
+	@Autowired
+	private MusicEnlightenmentQuestionnaireDao musicEnlightenmentQuestionnaireDao;
+	@Autowired
+	private MusicGroupDao musicGroupDao;
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+	@Autowired
+	private TeacherDao teacherDao;
+	@Autowired
+	private StudentDao studentDao;
+	@Autowired
+	private SysUserCashAccountDao sysUserCashAccountDao;
+	@Autowired
+	private SysMessageService sysMessageService;
+
+	private SimpleDateFormat sdf_ymdhm = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+
+	@Override
+	public BaseDAO<Long, MusicEnlightenmentQuestionnaire> getDAO() {
+		return musicEnlightenmentQuestionnaireDao;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+	public void addEnlightenmentQuestionnaire(MusicEnlightenmentQuestionnaire enlightenmentQuestionnaire) {
+		String musicGroupId = enlightenmentQuestionnaire.getMusicGroupId();
+		String userPhone = enlightenmentQuestionnaire.getPhone();
+
+		if(Objects.isNull(musicGroupId)||Objects.isNull(userPhone)){
+			throw new BizException("问卷信息错误");
+		}
+
+		// 查询乐团状态
+		MusicGroup musicGroup = musicGroupDao.getLocked(musicGroupId);
+		if (musicGroup == null) {
+			throw new BizException("乐团信息错误");
+		}
+		if (musicGroup.getStatus() != MusicGroupStatusEnum.PRE_APPLY) {
+			throw new BizException("乐团当前状态不能预报名");
+		}
+
+		Date date = new Date();
+
+		// 判断用户是否存在
+		SysUser user = sysUserFeignService.queryUserByMobile(enlightenmentQuestionnaire.getPhone());
+		if (user == null || user.getId() == null) {
+			user = new SysUser();
+			user.setPhone(enlightenmentQuestionnaire.getPhone());
+			user.setUsername(enlightenmentQuestionnaire.getUserName());
+			user.setOrganId(musicGroup.getOrganId());
+			user.setUserType("STUDENT");
+			user.setCreateTime(date);
+			user.setUpdateTime(date);
+			// 注册账户信息
+			HttpResponseResult<Integer> result = sysUserFeignService.addUser(user);
+
+			Integer userId = result.getData();
+			user.setId(userId);
+
+			Student student = new Student();
+			student.setUserId(userId);
+			student.setCreateTime(date);
+			student.setUpdateTime(date);
+			student.setIsNewUser(true);
+			student.setCurrentGradeNum(enlightenmentQuestionnaire.getCurrentGradeNum());
+			student.setCurrentClass(enlightenmentQuestionnaire.getCurrentClass());
+			studentDao.insert(student);
+			sysUserCashAccountDao.insert(new SysUserCashAccount(userId, "CNY"));
+		} else {
+			user.setUsername(enlightenmentQuestionnaire.getUserName());
+			if (!user.getUserType().contains("STUDENT")) {
+				user.setUserType(user.getUserType() + ",STUDENT");
+
+				Integer userId = user.getId();
+				//添加student
+				Student student = new Student();
+				student.setUserId(userId);
+				student.setCreateTime(date);
+				student.setUpdateTime(date);
+				student.setIsNewUser(true);
+				student.setCurrentGradeNum(enlightenmentQuestionnaire.getCurrentGradeNum());
+				student.setCurrentClass(enlightenmentQuestionnaire.getCurrentClass());
+				studentDao.insert(student);
+			}
+			user.setUpdateTime(new Date());
+			teacherDao.updateUser(user);
+		}
+
+		enlightenmentQuestionnaire.setUserId(user.getId());
+
+		MusicEnlightenmentQuestionnaire musicEnlightenmentQuestionnaire = musicEnlightenmentQuestionnaireDao.lockUserMusicEnlightenmentQuestionnaire(musicGroupId, userPhone);
+		if(Objects.isNull(musicEnlightenmentQuestionnaire)){
+			musicEnlightenmentQuestionnaireDao.insert(enlightenmentQuestionnaire);
+		}else{
+			enlightenmentQuestionnaire.setId(musicEnlightenmentQuestionnaire.getId());
+			musicEnlightenmentQuestionnaireDao.update(enlightenmentQuestionnaire);
+		}
+	}
+
+	@Override
+	public PageInfo<MusicEnlightenmentQuestionnaire> queryPage(MusicEnlightenmentQuestionnaireQueryInfo queryInfo) {
+		PageInfo<MusicEnlightenmentQuestionnaire> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<String, Object>();
+		MapUtil.populateMap(params, queryInfo);
+
+		List<MusicEnlightenmentQuestionnaire> dataList = new ArrayList<>();
+		int count = this.findCount(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = this.getDAO().queryPage(params);
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
+
+	@Override
+	public MusicEnlightenmentQuestionnaire getUserMusicEnlightenmentQuestionnaire(String musicGroupId, String phone) {
+		return musicEnlightenmentQuestionnaireDao.lockUserMusicEnlightenmentQuestionnaire(musicGroupId, phone);
+	}
+
+	@Override
+	public List<MusicEnlightenmentQuestionnaireStatDto> musicEnlightenmentQuestionnaireStat(String musicGroupId) {
+		return musicEnlightenmentQuestionnaireDao.musicEnlightenmentQuestionnaireStat(musicGroupId);
+	}
+
+	@Override
+	public boolean sendParentMeetingNotice(Integer userId, String musicGroupId, Date meetingDate, String address) {
+		MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
+		if (musicGroup == null) {
+			throw new BizException("乐团信息查询失败");
+		}
+		if (musicGroup.getStatus() != MusicGroupStatusEnum.PRE_APPLY) {
+			throw new BizException("操作失败:只有乐团在[{}]状态才能操作", MusicGroupStatusEnum.PRE_APPLY.getMsg());
+		}
+
+		List<MusicEnlightenmentQuestionnaire> enlightenmentQuestionnaires = musicEnlightenmentQuestionnaireDao.findByMusicGroupId(musicGroupId);
+		Map<Integer, String> receiverList = enlightenmentQuestionnaires.stream().filter(e->e.getJoinParentMeeting()).collect(Collectors.toMap(MusicEnlightenmentQuestionnaire::getUserId, MusicEnlightenmentQuestionnaire::getPhone));
+
+		String meetingDateStr = sdf_ymdhm.format(meetingDate);
+		sysMessageService.batchSendImGroupMessage(MessageTypeEnum.STUDENT_SMS_IM_MUSIC_GROUP_PARENT_MEETING_NOTICE, userId + "", null, new String[]{musicGroupId}, null, meetingDateStr, address);
+		sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.STUDENT_SMS_IM_MUSIC_GROUP_PARENT_MEETING_NOTICE, receiverList, null, 1, null, null, meetingDateStr, address);
+		return true;
+	}
+}

+ 149 - 0
mec-biz/src/main/resources/config/mybatis/MusicEnlightenmentQuestionnaireMapper.xml

@@ -0,0 +1,149 @@
+<?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.MusicEnlightenmentQuestionnaireDao">
+
+	<resultMap type="com.ym.mec.biz.dal.entity.MusicEnlightenmentQuestionnaire" id="MusicEnlightenmentQuestionnaire">
+		<result column="id_" property="id" />
+		<result column="music_group_id_" property="musicGroupId" />
+		<result column="user_id_" property="userId" />
+		<result column="user_name_" property="userName" />
+		<result column="phone_" property="phone" />
+		<result column="current_grade_" property="currentGrade" />
+		<result column="current_grade_num_" property="currentGradeNum" />
+		<result column="current_class_" property="currentClass" />
+		<result column="teacher_recommand_subject_id_" property="teacherRecommandSubjectId" />
+		<result column="subject_name_" property="subjectName"/>
+		<result column="musical_instruments_learning_" property="musicalInstrumentsLearning" />
+		<result column="musical_instruments_name_" property="musicalInstrumentsName" />
+		<result column="join_parent_meeting_" property="joinParentMeeting" />
+		<result column="remark_" property="remark" />
+		<result column="create_time_" property="createTime"/>
+		<result column="update_time_" property="updateTime"/>
+	</resultMap>
+
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="MusicEnlightenmentQuestionnaire" >
+		SELECT * FROM music_enlightenment_questionnaire WHERE id_ = #{id}
+	</select>
+
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="MusicEnlightenmentQuestionnaire">
+		SELECT * FROM music_enlightenment_questionnaire ORDER BY id_
+	</select>
+
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.MusicEnlightenmentQuestionnaire" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!--
+		<selectKey resultClass="int" keyProperty="id" > 
+		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
+		</selectKey>
+		-->
+		INSERT INTO music_enlightenment_questionnaire (music_group_id_,user_id_,user_name_,phone_,current_grade_,current_grade_num_,current_class_,teacher_recommand_subject_id_,musical_instruments_learning_,musical_instruments_name_,join_parent_meeting_,remark_,create_time_,update_time_)
+		VALUES(#{musicGroupId},#{userId},#{userName},#{phone},#{currentGrade},#{currentGradeNum},#{currentClass},#{teacherRecommandSubjectId},#{musicalInstrumentsLearning},#{musicalInstrumentsName},#{joinParentMeeting},#{remark},NOW(),NOW())
+	</insert>
+
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.MusicEnlightenmentQuestionnaire">
+		UPDATE music_enlightenment_questionnaire
+		<set>
+			<if test="userName != null">
+				user_name_ = #{userName},
+			</if>
+			<if test="currentGrade != null">
+				current_grade_ = #{currentGrade},
+			</if>
+			<if test="joinParentMeeting != null">
+				join_parent_meeting_ = #{joinParentMeeting},
+			</if>
+			<if test="musicalInstrumentsLearning != null">
+				musical_instruments_learning_ = #{musicalInstrumentsLearning},
+			</if>
+				teacher_recommand_subject_id_ = #{teacherRecommandSubjectId},
+			<if test="currentClass != null">
+				current_class_ = #{currentClass},
+			</if>
+			<if test="userId != null">
+				user_id_ = #{userId},
+			</if>
+			<if test="remark != null">
+				remark_ = #{remark},
+			</if>
+			<if test="musicalInstrumentsName != null">
+				musical_instruments_name_ = #{musicalInstrumentsName},
+			</if>
+			<if test="currentGradeNum != null">
+				current_grade_num_ = #{currentGradeNum},
+			</if>
+			<if test="phone != null">
+				phone_ = #{phone},
+			</if>
+			<if test="musicGroupId != null">
+				music_group_id_ = #{musicGroupId},
+			</if>
+			update_time_ = NOW()
+		</set>
+		WHERE id_ = #{id}
+	</update>
+
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM music_enlightenment_questionnaire WHERE id_ = #{id}
+	</delete>
+
+	<sql id="queryCondition">
+		<where>
+			<if test="musicGroupId!=null and musicGroupId!=''">
+				AND meq.music_group_id_=#{musicGroupId}
+			</if>
+			<if test="currentGradeNum!=null">
+				AND meq.current_grade_num_ = #{currentGradeNum}
+			</if>
+			<if test="teacherRecommandSubjectId!=null">
+				AND meq.teacher_recommand_subject_id_ = #{teacherRecommandSubjectId}
+			</if>
+			<if test="musicalInstrumentsLearning!=null">
+				AND meq.musical_instruments_learning_ = #{musicalInstrumentsLearning}
+			</if>
+			<if test="search!=null and search!=''">
+				AND (meq.user_id_ = #{search} OR meq.user_name_ LIKE CONCAT('%', #{search}, '%') OR meq.phone_ LIKE CONCAT('%', #{search}, '%'))
+			</if>
+		</where>
+	</sql>
+
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="MusicEnlightenmentQuestionnaire" parameterType="map">
+		SELECT meq.*,sub.name_ subject_name_ FROM music_enlightenment_questionnaire meq
+		LEFT JOIN subject sub ON meq.teacher_recommand_subject_id_=sub.id_
+		<include refid="queryCondition" />
+		ORDER BY meq.id_ DESC
+		<include refid="global.limit"/>
+	</select>
+
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM music_enlightenment_questionnaire meq
+		<include refid="queryCondition" />
+		ORDER BY meq.id_ DESC
+		<include refid="global.limit"/>
+	</select>
+
+	<select id="lockUserMusicEnlightenmentQuestionnaire" resultMap="MusicEnlightenmentQuestionnaire">
+		SELECT * FROM music_enlightenment_questionnaire WHERE music_group_id_=#{musicGroupId} AND phone_=#{userPhone} FOR UPDATE
+	</select>
+	<select id="musicEnlightenmentQuestionnaireStat"
+			resultType="com.ym.mec.biz.dal.dto.MusicEnlightenmentQuestionnaireStatDto">
+		SELECT sub.name_ subjectName,COUNT(meq.id_) userNum,SUM(meq.musical_instruments_learning_) learningUserNum
+		FROM music_enlightenment_questionnaire meq
+				 LEFT JOIN `subject` sub ON meq.teacher_recommand_subject_id_=sub.id_
+		WHERE meq.music_group_id_=#{musicGroupId}
+		GROUP BY meq.teacher_recommand_subject_id_;
+	</select>
+
+	<select id="findByMusicGroupId" resultMap="MusicEnlightenmentQuestionnaire">
+		SELECT * FROM music_enlightenment_questionnaire WHERE music_group_id_=#{musicGroupId}
+	</select>
+</mapper>

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

@@ -295,7 +295,7 @@
         LEFT JOIN sporadic_charge_info sci on spo.music_group_id_ = sci.id_
         LEFT JOIN goods g on FIND_IN_SET(g.id_,spod.goods_id_list_)
         <include refid="queryPaymentOrder"/>
-        ORDER BY spo.id_ ASC
+        ORDER BY spro.id_ DESC
     </select>
     <select id="countByTransNo" resultType="java.lang.String">
         SELECT trans_no_ FROM student_payment_route_order WHERE trans_no_ IN

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

@@ -67,18 +67,6 @@
         </set>
         WHERE id_ = #{id}
     </update>
-
-    <update id="updateByMusicScore" parameterType="com.ym.mec.biz.dal.entity.CourseScheduleStudentMusicScore">
-        UPDATE course_schedule_student_music_score
-        SET down_status_ = #{downStatus},play_status_ = #{playStatus},speed_ = #{speed},update_time_ = NOW()
-        WHERE course_schedule_id_ = #{courseScheduleId}
-        <if test="userId != null">
-            AND user_id_ = #{userId}
-        </if>
-        <if test="musicScoreAccompanimentId != null">
-            AND music_score_accompaniment_id_ = #{musicScoreAccompanimentId}
-        </if>
-    </update>
     <update id="closePlayStatus">
         UPDATE course_schedule_student_music_score SET play_status_ = 0,accompaniment_play_status_ = 0,update_time_ = NOW()
         WHERE course_schedule_id_ = #{scheduleId}
@@ -93,10 +81,16 @@
         UPDATE course_schedule_student_music_score SET play_status_ = 1,update_time_ = NOW()
         WHERE course_schedule_id_ = #{scheduleId}
         AND music_score_accompaniment_id_ = #{musicScoreAccompanimentId}
+        <if test="userId != null">
+            AND user_id_ = #{userId}
+        </if>
     </update>
     <update id="openAccompanimentPlayStatus">
         UPDATE course_schedule_student_music_score SET accompaniment_play_status_ = 1,update_time_ = NOW()
         WHERE course_schedule_id_ = #{scheduleId} AND music_score_accompaniment_id_ = #{musicScoreAccompanimentId}
+        <if test="userId != null">
+            AND user_id_ = #{userId}
+        </if>
     </update>
 
     <!-- 根据主键删除一条记录 -->

+ 4 - 0
mec-im/src/main/java/com/ym/dao/RoomDao.java

@@ -31,6 +31,10 @@ public interface RoomDao extends JpaRepository<Room, Long> {
     int updateDisplayByRid(String rid, String display);
 
     @Modifying
+    @Query(value = "update rongyun_room set sound_volume=?2 where rid=?1", nativeQuery = true)
+    int updateSoundVolumeById(String rid, Integer soundVolume);
+
+    @Modifying
     @Query(value = "update rongyun_room set whiteboard_name_index=?2 where rid=?1", nativeQuery = true)
     int updateWhiteboardNameIndexByRid(String rid, int whiteboardNameIndex);
 }

+ 1 - 0
mec-im/src/main/java/com/ym/mec/im/message/DeviceStateChangedMessage.java

@@ -14,6 +14,7 @@ public class DeviceStateChangedMessage extends BaseMessage {
 
     private @Setter @Getter String userId;
     private @Setter @Getter String userName;
+    private @Setter @Getter Integer soundVolume = 100;
 
     public DeviceStateChangedMessage(int type, boolean enable) {
         this.type = type;

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

@@ -20,6 +20,8 @@ public class ReqDeviceControlData {
 	private Integer status;
 	private Integer examSongId;
 	private Integer musicScoreAccompanimentId;
+	//伴奏音量
+	private Integer soundVolume = 100;
 
 	public Integer getMusicScoreAccompanimentId() {
 		return musicScoreAccompanimentId;

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

@@ -25,6 +25,7 @@ public class Room implements Serializable {
     private @Getter @Setter Date createDt;
     private @Getter @Setter String display;
     private @Getter @Setter int whiteboardNameIndex;
+    private @Getter @Setter int soundVolume = 100;
 
     @Override
     public String toString() {
@@ -34,6 +35,7 @@ public class Room implements Serializable {
                 ", portrait='" + portrait + '\'' +
                 ", createDt=" + createDt +
                 ", display='" + display + '\'' +
+                ", soundVolume='" + soundVolume + '\'' +
                 ", whiteboardNameIndex='" + whiteboardNameIndex + '\'' +
                 '}';
     }

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

@@ -25,6 +25,8 @@ public class RoomResult {
     private @Getter @Setter String autoCloseNetworkRoomTime;
     private @Getter @Setter Date startTime;
     private @Getter @Setter int surplusTime;
+    //伴奏音量
+    private @Getter @Setter int soundVolume = 100;
     private @Getter @Setter String imToken;
     private @Getter @Setter String authorization;
     private @Getter List<MemberResult> members = new ArrayList<>();

+ 32 - 25
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -175,7 +175,6 @@ public class RoomServiceImpl implements RoomService {
 
         RoomResult.MemberResult userResult = new RoomResult.MemberResult();
         RoomMember member = roomMemberDao.findByRidAndUid(roomId, userId);
-
         String userName;
         if (member == null) {
             int count = roomMemberDao.countByRidAndExcludeRole(roomId, RoleEnum.RoleAudience.getValue());
@@ -209,6 +208,7 @@ public class RoomServiceImpl implements RoomService {
 
         List<CourseScheduleStudentMusicScore> scheduleStudentMusicScores = courseScheduleStudentMusicScoreDao.queryByScoreIdAndCourseId(null, courseId,null, null, null);
 
+        Room room = roomDao.findByRid(roomId);
         String display = "";
         if (roleEnum == RoleTeacher) {
             display = "display://type=1?userId=" + userId + "?uri=";
@@ -224,7 +224,6 @@ public class RoomServiceImpl implements RoomService {
             }
             //获取学员曲目下载状态
             userResult.setExamSongDownloadJson(examSongDownloadData);
-            Room room = roomDao.findByRid(roomId);
             if (room != null) {
                 display = room.getDisplay();
             }
@@ -261,6 +260,9 @@ public class RoomServiceImpl implements RoomService {
             roomResult.setMembers(roomMemberList,midiMap,examSongMap,scheduleStudentMusicScores);
         }
         roomResult.setWhiteboards(whiteboardDao.findByRid(roomId));
+        if (room != null) {
+            roomResult.setSoundVolume(room.getSoundVolume());
+        }
         log.info("join room: roomId = {}, userId = {}, userName={}, role = {}", roomId, userId, userName, roleEnum);
         return roomResult;
     }
@@ -828,14 +830,22 @@ public class RoomServiceImpl implements RoomService {
         }else if (data.getMusicScoreOn() != null) {
             typeEnum = DeviceTypeEnum.MusicScore;
             enable = data.getMusicScoreOn();
+            if(enable){
+                //保存伴奏音量
+                roomDao.updateSoundVolumeById(roomId,data.getSoundVolume());
+            }
         }else if (data.getAccompanimentOn() != null) {
             typeEnum = DeviceTypeEnum.MusicScoreAccompaniment;
             enable = data.getAccompanimentOn();
+            if(enable){
+                //保存伴奏音量
+                roomDao.updateSoundVolumeById(roomId,data.getSoundVolume());
+            }
         } else {
             throw new ApiException(ErrorEnum.ERR_REQUEST_PARA_ERR);
         }
         SysUser authUser = sysUserFeignService.queryUserInfo();
-        log.info("controlDevice: userId={}, typeEnum={}, onOff={}", userId, typeEnum, enable);
+        log.info("controlDevice: userId = {}, typeEnum = {}, enable = {} ,roomId = {}", userId, typeEnum, enable, roomId);
 
         if (enable) {
             if (typeEnum.equals(DeviceTypeEnum.ExamSong)){
@@ -856,20 +866,22 @@ public class RoomServiceImpl implements RoomService {
                 long scheduleId = Long.parseLong(roomId.substring(1));
                 //关闭所有曲目播放
                 courseScheduleStudentMusicScoreDao.closePlayStatus(scheduleId,Integer.parseInt(userId),null);
-                //原音
-                courseScheduleStudentMusicScoreDao.openPlayStatus(scheduleId,data.getMusicScoreAccompanimentId());
                 DeviceStateChangedMessage deviceResourceMessage = new DeviceStateChangedMessage(typeEnum.ordinal(), enable);
                 deviceResourceMessage.setMusicScoreAccompanimentId(data.getMusicScoreAccompanimentId());
                 deviceResourceMessage.setUserId(userId);
+                deviceResourceMessage.setSoundVolume(data.getSoundVolume());
+                //原音
+                courseScheduleStudentMusicScoreDao.openPlayStatus(scheduleId, data.getMusicScoreAccompanimentId(), Integer.parseInt(userId));
                 imHelper.publishMessage(authUser.getId().toString(), roomId, deviceResourceMessage, 1);
             }else if(typeEnum.equals(DeviceTypeEnum.MusicScoreAccompaniment)){
                 long scheduleId = Long.parseLong(roomId.substring(1));
                 //关闭所有曲目播放
                 courseScheduleStudentMusicScoreDao.closePlayStatus(scheduleId,Integer.parseInt(userId),null);
-                courseScheduleStudentMusicScoreDao.openAccompanimentPlayStatus(scheduleId,data.getMusicScoreAccompanimentId());
+                courseScheduleStudentMusicScoreDao.openAccompanimentPlayStatus(scheduleId,data.getMusicScoreAccompanimentId(),Integer.parseInt(userId));
                 DeviceStateChangedMessage deviceResourceMessage = new DeviceStateChangedMessage(typeEnum.ordinal(), enable);
                 deviceResourceMessage.setMusicScoreAccompanimentId(data.getMusicScoreAccompanimentId());
                 deviceResourceMessage.setUserId(userId);
+                deviceResourceMessage.setSoundVolume(data.getSoundVolume());
                 imHelper.publishMessage(authUser.getId().toString(), roomId, deviceResourceMessage, 1);
             }else {
                 String ticket = IdentifierUtils.uuid();
@@ -931,6 +943,14 @@ public class RoomServiceImpl implements RoomService {
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean batchControlDevice(ReqDeviceControlData data) throws Exception {
+        if(data.getExamSongOn() != null || data.getMusicScoreOn() != null || data.getAccompanimentOn() != null){
+            List<BasicUserDto> students = courseScheduleStudentPaymentDao.findStudents(Long.parseLong(data.getRoomId().substring(1)));
+            for (BasicUserDto e:students) {
+                data.setUserId(e.getUserId().toString());
+                controlDevice(data);
+            }
+            return true;
+        }
         List<RoomMember> roomMembers;
         if(StringUtils.isNotEmpty(data.getUserId())){
             roomMembers = new ArrayList<>();
@@ -944,24 +964,9 @@ public class RoomServiceImpl implements RoomService {
         if(roomMembers.size() == 0){
             return false;
         }
-        if (data.getExamSongOn() != null || data.getMusicScoreOn() != null || data.getAccompanimentOn() != null) {
-            if(StringUtils.isNotEmpty(data.getUserId())){
-                for (RoomMember e:roomMembers) {
-                    data.setUserId(e.getUid());
-                    controlDevice(data);
-                }
-            }else {
-                List<BasicUserDto> students = courseScheduleStudentPaymentDao.findStudents(Long.parseLong(data.getRoomId().substring(1)));
-                for (BasicUserDto e:students) {
-                    data.setUserId(e.getUserId().toString());
-                    controlDevice(data);
-                }
-            }
-        } else {
-            for (RoomMember e:roomMembers) {
-                data.setUserId(e.getUid());
-                controlDevice(data);
-            }
+        for (RoomMember e:roomMembers) {
+            data.setUserId(e.getUid());
+            controlDevice(data);
         }
         return true;
     }
@@ -1069,9 +1074,11 @@ public class RoomServiceImpl implements RoomService {
         }else {
             roomMemberDao.updateMusicByRidAndUid(roomId, userId, enable);
         }
+        Room room = roomDao.findByRid(roomId);
+        deviceResourceMessage.setSoundVolume(room.getSoundVolume());
         deviceResourceMessage.setUserId(userId);
         imHelper.publishMessage(userId, roomId, deviceResourceMessage, 1);
-        log.info("syncDeviceState : {}, {}, result = {}", roomId, enable);
+        log.info("syncDeviceState : {}, {}", roomId, enable);
         return true;
     }
 

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

@@ -45,7 +45,8 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
                 "/repair/studentPaymentGoodsOrder",
                 "/studentCompetition/getWinnerList",
                 "/musicGroup/getGradeList",
-                "/studentCompetition/get","/musicGroup/preRegister").permitAll().anyRequest().authenticated().and().httpBasic();
+                "/studentCompetition/get","/musicGroup/preRegister",
+                "/musicEnlightenmentQuestionnaire/addEnlightenmentQuestionnaire", "/musicEnlightenmentQuestionnaire/getUserMusicEnlightenmentQuestionnaire").permitAll().anyRequest().authenticated().and().httpBasic();
     }
 
     @Override

+ 37 - 0
mec-student/src/main/java/com/ym/mec/student/controller/MusicEnlightenmentQuestionnaireController.java

@@ -0,0 +1,37 @@
+package com.ym.mec.student.controller;
+
+import com.ym.mec.biz.dal.entity.MusicEnlightenmentQuestionnaire;
+import com.ym.mec.biz.service.MusicEnlightenmentQuestionnaireService;
+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.web.bind.annotation.*;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/10/13 0013
+ */
+@Api(tags = "启蒙课问卷")
+@RestController
+@RequestMapping("musicEnlightenmentQuestionnaire")
+public class MusicEnlightenmentQuestionnaireController extends BaseController {
+
+    @Autowired
+    private MusicEnlightenmentQuestionnaireService musicEnlightenmentQuestionnaireService;
+
+    @ApiOperation(value = "添加启蒙课问卷")
+    @PostMapping("addEnlightenmentQuestionnaire")
+    public HttpResponseResult addEnlightenmentQuestionnaire(@RequestBody MusicEnlightenmentQuestionnaire enlightenmentQuestionnaire){
+        musicEnlightenmentQuestionnaireService.addEnlightenmentQuestionnaire(enlightenmentQuestionnaire);
+        return succeed();
+    }
+
+    @ApiOperation(value = "获取指定用户的乐团启蒙问卷记录")
+    @GetMapping("getUserMusicEnlightenmentQuestionnaire")
+    public HttpResponseResult<MusicEnlightenmentQuestionnaire> getUserMusicEnlightenmentQuestionnaire(String musicGroupId, String phone) {
+        return succeed(musicEnlightenmentQuestionnaireService.getUserMusicEnlightenmentQuestionnaire(musicGroupId, phone));
+    }
+
+}

+ 47 - 0
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -141,6 +141,8 @@ public class ExportController extends BaseController {
     private StudentService studentService;
     @Autowired
     private OrganizationService organizationService;
+    @Autowired
+    private MusicEnlightenmentQuestionnaireService musicEnlightenmentQuestionnaireService;
 
     @ApiOperation(value = "21年暑期考级活动统计页面详情导出")
     @PostMapping("export/statisticsDetail")
@@ -3430,4 +3432,49 @@ public class ExportController extends BaseController {
             }
         }
     }
+
+
+
+    @ApiOperation(value = "启蒙课问卷导出")
+    @RequestMapping("export/musicEnlightenmentQuestionnaires")
+    @PreAuthorize("@pcs.hasPermissions('export/musicEnlightenmentQuestionnaires')")
+    public void musicEnlightenmentQuestionnaires(MusicEnlightenmentQuestionnaireQueryInfo queryInfo, HttpServletResponse response) throws IOException {
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
+        PageInfo<MusicEnlightenmentQuestionnaire> practiceGroupReviews = musicEnlightenmentQuestionnaireService.queryPage(queryInfo);
+        if (practiceGroupReviews.getTotal() <= 0) {
+            response.setStatus(500);
+            response.setContentType("Content-Type: application/json;charset=UTF-8");
+            response.getOutputStream().write("{\"data\": null, \"code\": 500, \"status\": false, \"msg\": \"没有可导出的记录\"}".getBytes());
+            response.flushBuffer();
+            return;
+        }
+        OutputStream outputStream = response.getOutputStream();
+        try {
+            for (MusicEnlightenmentQuestionnaire row : practiceGroupReviews.getRows()) {
+                if(Objects.isNull(row.getSubjectName())){
+                    row.setSubjectName("无");
+                }
+            }
+            String[] header = {"学员姓名","联系电话","年级","班级","老师推荐专业","是否在学习某件乐器","目前所学乐器","报名参加管乐团家长会了解相关情况","备注"};
+            String[] body = {"userName","phone","currentGrade","currentClass","subjectName","musicalInstrumentsLearning?'是':'否'","musicalInstrumentsName","joinParentMeeting?'是':'否'","remark",};
+            HSSFWorkbook workbook = POIUtil.exportExcel(header, body, practiceGroupReviews.getRows());
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
+            response.flushBuffer();
+            outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+            outputStream.flush();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (outputStream != null) {
+                try {
+                    outputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
 }

+ 64 - 0
mec-web/src/main/java/com/ym/mec/web/controller/MusicEnlightenmentQuestionnaireController.java

@@ -0,0 +1,64 @@
+package com.ym.mec.web.controller;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dto.MusicEnlightenmentQuestionnaireStatDto;
+import com.ym.mec.biz.dal.entity.MusicEnlightenmentQuestionnaire;
+import com.ym.mec.biz.dal.page.MusicEnlightenmentQuestionnaireQueryInfo;
+import com.ym.mec.biz.service.MusicEnlightenmentQuestionnaireService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+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 java.util.Date;
+import java.util.List;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/10/13 0013
+ */
+@Api(tags = "启蒙课问卷")
+@RestController
+@RequestMapping("musicEnlightenmentQuestionnaire")
+public class MusicEnlightenmentQuestionnaireController extends BaseController {
+
+    @Autowired
+    private MusicEnlightenmentQuestionnaireService musicEnlightenmentQuestionnaireService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @ApiOperation(value = "启蒙课问卷列表")
+    @GetMapping("queryPage")
+    @PreAuthorize("@pcs.hasPermissions('musicEnlightenmentQuestionnaire/queryPage')")
+    public HttpResponseResult<PageInfo<MusicEnlightenmentQuestionnaire>> queryPage(MusicEnlightenmentQuestionnaireQueryInfo queryInfo){
+        return succeed(musicEnlightenmentQuestionnaireService.queryPage(queryInfo));
+    }
+
+    @ApiOperation(value = "发送家长会通知")
+    @PostMapping("sendParentMeetingNotice")
+    @PreAuthorize("@pcs.hasPermissions('musicEnlightenmentQuestionnaire/sendParentMeetingNotice')")
+    public HttpResponseResult<Boolean> sendParentMeetingNotice(String musicGroupId, Date meetingDate, String address) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed(HttpStatus.FORBIDDEN, "用户信息获取失败");
+        }
+        return musicEnlightenmentQuestionnaireService.sendParentMeetingNotice(sysUser.getId(), musicGroupId, meetingDate, address) ? succeed() : failed();
+    }
+
+    @ApiOperation(value = "启蒙课问卷统计")
+    @GetMapping("musicEnlightenmentQuestionnaireStat")
+    @PreAuthorize("@pcs.hasPermissions('musicEnlightenmentQuestionnaire/musicEnlightenmentQuestionnaireStat')")
+    public HttpResponseResult<List<MusicEnlightenmentQuestionnaireStatDto>> musicEnlightenmentQuestionnaireStat(String musicGroupId){
+        return succeed(musicEnlightenmentQuestionnaireService.musicEnlightenmentQuestionnaireStat(musicGroupId));
+    }
+
+}

+ 33 - 0
mec-web/src/main/java/com/ym/mec/web/controller/SysMessageConfigController.java

@@ -0,0 +1,33 @@
+package com.ym.mec.web.controller;
+
+import com.ym.mec.biz.dal.enums.MessageTypeEnum;
+import com.ym.mec.biz.service.SysMessageConfigService;
+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.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/10/14 0014
+ */
+@Api(tags = "消息模板")
+@RequestMapping("sysMessageConfig")
+@RestController
+public class SysMessageConfigController extends BaseController {
+
+    @Autowired
+    private SysMessageConfigService sysMessageConfigService;
+
+    @ApiOperation(value = "获取指定类型的消息模板")
+    @GetMapping("getWithType")
+    @PreAuthorize("@pcs.hasPermissions('sysMessageConfig/getWithType')")
+    public HttpResponseResult getWithType(MessageTypeEnum type){
+        return succeed(sysMessageConfigService.queryByType(type));
+    }
+}