Browse Source

Merge branch '乐团启蒙课问卷' into online1

Joburgess 3 năm trước cách đây
mục cha
commit
1a80863afe

+ 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>

+ 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));
+    }
+}