Browse Source

Merge branch '2021-04-28'

Joburgess 4 years ago
parent
commit
4a4d0b8966
42 changed files with 1611 additions and 24 deletions
  1. 1 1
      codegen/src/main/resources/generateConfigration.xml
  2. 1 1
      codegen/src/main/resources/template/dao.ftl
  3. 1 1
      codegen/src/main/resources/template/service.ftl
  4. 1 1
      codegen/src/main/resources/template/service_impl.ftl
  5. 13 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexBaseMonthDataDao.java
  6. 13 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/QuestionnaireQuestionDao.java
  7. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/QuestionnaireQuestionItemDao.java
  8. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/QuestionnaireTopicDao.java
  9. 15 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/QuestionnaireUserResultDao.java
  10. 38 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/OrganVipGroupCategoryCourseNumDto.java
  11. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentClassInfoDto.java
  12. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageListDto.java
  13. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/IndexBaseMonthData.java
  14. 148 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/QuestionnaireQuestion.java
  15. 112 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/QuestionnaireQuestionItem.java
  16. 114 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/QuestionnaireTopic.java
  17. 126 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/QuestionnaireUserResult.java
  18. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Student.java
  19. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexDataType.java
  20. 26 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/QuestionnaireActiveTypeEnum.java
  21. 16 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/QuestionnaireTopicQueryInfo.java
  22. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/QuestionnaireQuestionItemService.java
  23. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/QuestionnaireQuestionService.java
  24. 13 0
      mec-biz/src/main/java/com/ym/mec/biz/service/QuestionnaireTopicService.java
  25. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/service/QuestionnaireUserResultService.java
  26. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  27. 86 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java
  28. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/QuestionnaireQuestionItemServiceImpl.java
  29. 21 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/QuestionnaireQuestionServiceImpl.java
  30. 134 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/QuestionnaireTopicServiceImpl.java
  31. 28 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/QuestionnaireUserResultServiceImpl.java
  32. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java
  33. 68 6
      mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml
  34. 101 0
      mec-biz/src/main/resources/config/mybatis/QuestionnaireQuestionItemMapper.xml
  35. 105 0
      mec-biz/src/main/resources/config/mybatis/QuestionnaireQuestionMapper.xml
  36. 79 0
      mec-biz/src/main/resources/config/mybatis/QuestionnaireTopicMapper.xml
  37. 87 0
      mec-biz/src/main/resources/config/mybatis/QuestionnaireUserResultMapper.xml
  38. 5 1
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  39. 10 3
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  40. 2 1
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  41. 39 0
      mec-student/src/main/java/com/ym/mec/student/controller/QuestionnaireUserResultController.java
  42. 72 0
      mec-web/src/main/java/com/ym/mec/web/controller/QuestionnaireTopicController.java

+ 1 - 1
codegen/src/main/resources/generateConfigration.xml

@@ -8,7 +8,7 @@
 		<catalog>mec_dev</catalog>
 		<schema>mec_dev</schema>
 	</dbConfiguration>
-	<srcBase>/Users/zouxuan/Documents/javabean</srcBase>
+	<srcBase>/Users/chenxiaoyu/Documents/javabean</srcBase>
 	<pojoPackageName>com.ym.mec.biz.dal.entity</pojoPackageName>
 	<daoPackageName>com.ym.mec.biz.dal.dao</daoPackageName>
 	<servicePackageName>com.ym.mec.biz.service</servicePackageName>

+ 1 - 1
codegen/src/main/resources/template/dao.ftl

@@ -1,7 +1,7 @@
 [#ftl]
 package ${daoPackageName};
 
-import ${daoPackageName}.base.BaseDAO;
+import com.ym.mec.common.dal.BaseDAO;
 import ${pojoFullClassName};
 
 public interface ${className}Dao [#if paramType??]extends BaseDAO<${paramType}, ${className}>[/#if] {

+ 1 - 1
codegen/src/main/resources/template/service.ftl

@@ -1,8 +1,8 @@
 [#ftl]
 package ${servicePackageName};
 
-import java.util.List;
 import ${pojoFullClassName};
+import com.ym.mec.common.service.BaseService;
 
 public interface ${className}Service extends BaseService<${paramType}, ${className}> {
 

+ 1 - 1
codegen/src/main/resources/template/service_impl.ftl

@@ -1,8 +1,8 @@
 [#ftl]
 package ${servicePackageName}.impl;
 
-import java.util.List;
 import org.springframework.beans.factory.annotation.Autowired;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
 import ${pojoFullClassName};
 import ${servicePackageName}.${className}Service;
 import ${daoPackageName}.${className}Dao;

+ 13 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexBaseMonthDataDao.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dao;
 
+import com.ym.mec.biz.dal.dto.OrganVipGroupCategoryCourseNumDto;
 import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
 import com.ym.mec.biz.dal.entity.IndexErrInfoDto;
 import com.ym.mec.biz.dal.enums.*;
@@ -38,6 +39,11 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
                                               @Param("startMonth") String startMonth,
                                               @Param("endMonth") String endMonth);
 
+    List<IndexBaseMonthData> getIndexBaseDataList(@Param("organIds") Set<Integer> organIds,
+                                              @Param("dataTypes") Set<String> dataTypes,
+                                              @Param("startMonth") String startMonth,
+                                              @Param("endMonth") String endMonth);
+
 	List<IndexBaseMonthData> getWithDayAndDataType(@Param("day") String day,
                                                    @Param("dataType")IndexDataType dataType);
 
@@ -140,7 +146,13 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
 
     List<IndexBaseMonthData> getGroupCourseDataWithGroup(@Param("dayStr") String dayStr,
                                                 @Param("groupType")GroupType groupType,
-                                                @Param("courseStatus") CourseStatusEnum courseStatus);
+                                                @Param("courseStatus") CourseStatusEnum courseStatus,
+                                                         @Param("teachMode") TeachModeEnum teachMode);
+
+    List<OrganVipGroupCategoryCourseNumDto> getVipGroupCategoryCourseData(@Param("dayStr") String dayStr,
+                                                                          @Param("groupType")GroupType groupType,
+                                                                          @Param("courseStatus") CourseStatusEnum courseStatus,
+                                                                          @Param("teachMode") TeachModeEnum teachMode);
 
     int countLessThenThreeClassGroupNum(@Param("organIds") Set<Integer> organIds, @Param("educationUserId") Integer educationUserId);
 

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/QuestionnaireQuestionDao.java

@@ -0,0 +1,13 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.biz.dal.entity.QuestionnaireQuestion;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface QuestionnaireQuestionDao extends BaseDAO<Long, QuestionnaireQuestion> {
+
+
+    void batchDel(@Param("questionIdList") List<Long> delQuestionnaireQuestionIdList);
+}

+ 19 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/QuestionnaireQuestionItemDao.java

@@ -0,0 +1,19 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.biz.dal.entity.QuestionnaireQuestionItem;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface QuestionnaireQuestionItemDao extends BaseDAO<Long, QuestionnaireQuestionItem> {
+
+
+    void batchInsert(@Param("questionItemList") List<QuestionnaireQuestionItem> questionItemList,
+                     @Param("questionId") Long questionId,
+                     @Param("topicId") Integer topicId);
+
+    void batchDelByQuestionIdList(@Param("questionIdList") List<Long> delQuestionnaireQuestionIdList);
+
+    void batchUpdate(@Param("updateItemList") List<QuestionnaireQuestionItem> updateItemList);
+}

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

@@ -0,0 +1,9 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.biz.dal.entity.QuestionnaireTopic;
+
+public interface QuestionnaireTopicDao extends BaseDAO<Integer, QuestionnaireTopic> {
+
+	
+}

+ 15 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/QuestionnaireUserResultDao.java

@@ -0,0 +1,15 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.biz.dal.entity.QuestionnaireUserResult;
+
+public interface QuestionnaireUserResultDao extends BaseDAO<Long, QuestionnaireUserResult> {
+
+
+    /**
+     * 根据问卷编号获取答案
+     * @param topicId
+     * @return
+     */
+    int countByTopicId(Integer topicId);
+}

+ 38 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/OrganVipGroupCategoryCourseNumDto.java

@@ -0,0 +1,38 @@
+package com.ym.mec.biz.dal.dto;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/4/25 0025
+ */
+public class OrganVipGroupCategoryCourseNumDto {
+
+    private Integer organId;
+
+    private String categoryName;
+
+    private Integer courseNum;
+
+    public Integer getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Integer organId) {
+        this.organId = organId;
+    }
+
+    public String getCategoryName() {
+        return categoryName;
+    }
+
+    public void setCategoryName(String categoryName) {
+        this.categoryName = categoryName;
+    }
+
+    public Integer getCourseNum() {
+        return courseNum;
+    }
+
+    public void setCourseNum(Integer courseNum) {
+        this.courseNum = courseNum;
+    }
+}

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentClassInfoDto.java

@@ -16,6 +16,8 @@ public class StudentClassInfoDto {
 
     private Integer mainTeacherId;
 
+    private Integer cooperationOrganId;
+
     public Integer getStudentId() {
         return studentId;
     }
@@ -52,6 +54,14 @@ public class StudentClassInfoDto {
         return mainTeacherId;
     }
 
+    public Integer getCooperationOrganId() {
+        return cooperationOrganId;
+    }
+
+    public void setCooperationOrganId(Integer cooperationOrganId) {
+        this.cooperationOrganId = cooperationOrganId;
+    }
+
     public void setMainTeacherId(Integer mainTeacherId) {
         this.mainTeacherId = mainTeacherId;
     }

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageListDto.java

@@ -98,6 +98,26 @@ public class StudentManageListDto {
     @ApiModelProperty(value = "0 - 6+3年制    1 - 5+4年制")
     private GradeTypeEnum gradeType;
 
+    private Integer cooperationOrganId;
+
+    private String cooperationOrganName;
+
+    public Integer getCooperationOrganId() {
+        return cooperationOrganId;
+    }
+
+    public void setCooperationOrganId(Integer cooperationOrganId) {
+        this.cooperationOrganId = cooperationOrganId;
+    }
+
+    public String getCooperationOrganName() {
+        return cooperationOrganName;
+    }
+
+    public void setCooperationOrganName(String cooperationOrganName) {
+        this.cooperationOrganName = cooperationOrganName;
+    }
+
     public String getContractVersions() {
         return contractVersions;
     }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/IndexBaseMonthData.java

@@ -32,6 +32,8 @@ public class IndexBaseMonthData {
 
 	private IndexDataType dataType;
 
+	private String extendInfo;
+
 	private Date createTime;
 
 	private Date updateTime;
@@ -126,4 +128,12 @@ public class IndexBaseMonthData {
 	public void setTitle(String title) {
 		this.title = title;
 	}
+
+	public String getExtendInfo() {
+		return extendInfo;
+	}
+
+	public void setExtendInfo(String extendInfo) {
+		this.extendInfo = extendInfo;
+	}
 }

+ 148 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/QuestionnaireQuestion.java

@@ -0,0 +1,148 @@
+package com.ym.mec.biz.dal.entity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import java.util.List;
+
+/**
+ * 对应数据库表(questionnaire_question):
+ */
+public class QuestionnaireQuestion {
+
+	/**  */
+	private Long id;
+	
+	/**  */
+	private Integer questionnaireTopicId;
+	
+	/** 题目内容 */
+	private String content;
+	
+	/** 题目类型(单选/多选/填空) */
+	private String type;
+	
+	/** 排序 */
+	private Integer sort = 0;
+	
+	/** 是否必填 */
+	private int isRequire = 1;
+
+	private int delFlag = 0;
+
+	/** 问题描述 */
+	private String desc;
+	
+	/**  */
+	private java.util.Date createTime;
+	
+	/**  */
+	private java.util.Date updateTime;
+
+	//需要删除的答案选项
+	private List<Long> delQuestionnaireQuestionItemIdList;
+
+	//题目答案选项
+	private List<QuestionnaireQuestionItem> questionnaireQuestionItemList;
+
+
+	public List<Long> getDelQuestionnaireQuestionItemIdList() {
+		return delQuestionnaireQuestionItemIdList;
+	}
+
+	public void setDelQuestionnaireQuestionItemIdList(List<Long> delQuestionnaireQuestionItemIdList) {
+		this.delQuestionnaireQuestionItemIdList = delQuestionnaireQuestionItemIdList;
+	}
+
+	public List<QuestionnaireQuestionItem> getQuestionnaireQuestionItemList() {
+		return questionnaireQuestionItemList;
+	}
+
+	public void setQuestionnaireQuestionItemList(List<QuestionnaireQuestionItem> questionnaireQuestionItemList) {
+		this.questionnaireQuestionItemList = questionnaireQuestionItemList;
+	}
+
+	public void setId(Long id){
+		this.id = id;
+	}
+	
+	public Long getId(){
+		return this.id;
+	}
+			
+	public void setQuestionnaireTopicId(Integer questionnaireTopicId){
+		this.questionnaireTopicId = questionnaireTopicId;
+	}
+	
+	public Integer getQuestionnaireTopicId(){
+		return this.questionnaireTopicId;
+	}
+			
+	public void setContent(String content){
+		this.content = content;
+	}
+	
+	public String getContent(){
+		return this.content;
+	}
+			
+	public void setType(String type){
+		this.type = type;
+	}
+	
+	public String getType(){
+		return this.type;
+	}
+			
+	public void setSort(Integer sort){
+		this.sort = sort;
+	}
+	
+	public Integer getSort(){
+		return this.sort;
+	}
+
+	public int getIsRequire() {
+		return isRequire;
+	}
+
+	public void setIsRequire(int isRequire) {
+		this.isRequire = isRequire;
+	}
+
+	public int getDelFlag() {
+		return delFlag;
+	}
+
+	public void setDelFlag(int delFlag) {
+		this.delFlag = delFlag;
+	}
+
+	public void setDesc(String desc){
+		this.desc = desc;
+	}
+	
+	public String getDesc(){
+		return this.desc;
+	}
+			
+	public void setCreateTime(java.util.Date createTime){
+		this.createTime = createTime;
+	}
+	
+	public java.util.Date getCreateTime(){
+		return this.createTime;
+	}
+			
+	public void setUpdateTime(java.util.Date updateTime){
+		this.updateTime = updateTime;
+	}
+	
+	public java.util.Date getUpdateTime(){
+		return this.updateTime;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 112 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/QuestionnaireQuestionItem.java

@@ -0,0 +1,112 @@
+package com.ym.mec.biz.dal.entity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(questionnaire_question_item):
+ */
+public class QuestionnaireQuestionItem {
+
+	/**  */
+	private Long id;
+	
+	/**  */
+	private Integer questionnaireTopicId;
+	
+	/**  */
+	private Long questionnaireQuestionId;
+	
+	/** 答案项 */
+	private String answerValue;
+	
+	/** 排序 */
+	private Integer sort = 0;
+
+	private int isOver = 0;
+
+	private int delFlag = 0;
+
+	/**  */
+	private java.util.Date createTime;
+	
+	/**  */
+	private java.util.Date updateTime;
+
+	public int getIsOver() {
+		return isOver;
+	}
+
+	public void setIsOver(int isOver) {
+		this.isOver = isOver;
+	}
+
+	public int getDelFlag() {
+		return delFlag;
+	}
+
+	public void setDelFlag(int delFlag) {
+		this.delFlag = delFlag;
+	}
+
+	public void setId(Long id){
+		this.id = id;
+	}
+	
+	public Long getId(){
+		return this.id;
+	}
+			
+	public void setQuestionnaireTopicId(Integer questionnaireTopicId){
+		this.questionnaireTopicId = questionnaireTopicId;
+	}
+	
+	public Integer getQuestionnaireTopicId(){
+		return this.questionnaireTopicId;
+	}
+			
+	public void setQuestionnaireQuestionId(Long questionnaireQuestionId){
+		this.questionnaireQuestionId = questionnaireQuestionId;
+	}
+	
+	public Long getQuestionnaireQuestionId(){
+		return this.questionnaireQuestionId;
+	}
+			
+	public void setAnswerValue(String answerValue){
+		this.answerValue = answerValue;
+	}
+	
+	public String getAnswerValue(){
+		return this.answerValue;
+	}
+			
+	public void setSort(Integer sort){
+		this.sort = sort;
+	}
+	
+	public Integer getSort(){
+		return this.sort;
+	}
+			
+	public void setCreateTime(java.util.Date createTime){
+		this.createTime = createTime;
+	}
+	
+	public java.util.Date getCreateTime(){
+		return this.createTime;
+	}
+			
+	public void setUpdateTime(java.util.Date updateTime){
+		this.updateTime = updateTime;
+	}
+	
+	public java.util.Date getUpdateTime(){
+		return this.updateTime;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 114 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/QuestionnaireTopic.java

@@ -0,0 +1,114 @@
+package com.ym.mec.biz.dal.entity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import java.util.List;
+
+/**
+ * 对应数据库表(questionnaire_topic):
+ */
+public class QuestionnaireTopic {
+
+	/**  */
+	private Integer id;
+	
+	/** 标题 */
+	private String title;
+	
+	/** 发布状态(1-可见  0-不可见) */
+	private int status = 0;
+
+	private int delFlag = 0;
+
+	/** 创建人编号 */
+	private Integer creatorId;
+	
+	/**  */
+	private java.util.Date createTime;
+	
+	/**  */
+	private java.util.Date updateTime;
+
+	//需要删除的问卷题
+	private List<Long> delQuestionnaireQuestionIdList;
+
+	//问卷题目
+	private List<QuestionnaireQuestion> questionnaireQuestionList;
+
+	public List<QuestionnaireQuestion> getQuestionnaireQuestionList() {
+		return questionnaireQuestionList;
+	}
+
+	public List<Long> getDelQuestionnaireQuestionIdList() {
+		return delQuestionnaireQuestionIdList;
+	}
+
+	public void setDelQuestionnaireQuestionIdList(List<Long> delQuestionnaireQuestionIdList) {
+		this.delQuestionnaireQuestionIdList = delQuestionnaireQuestionIdList;
+	}
+
+	public void setQuestionnaireQuestionList(List<QuestionnaireQuestion> questionnaireQuestionList) {
+		this.questionnaireQuestionList = questionnaireQuestionList;
+	}
+
+	public void setId(Integer id){
+		this.id = id;
+	}
+	
+	public Integer getId(){
+		return this.id;
+	}
+			
+	public void setTitle(String title){
+		this.title = title;
+	}
+	
+	public String getTitle(){
+		return this.title;
+	}
+
+	public int getStatus() {
+		return status;
+	}
+
+	public void setStatus(int status) {
+		this.status = status;
+	}
+
+	public int getDelFlag() {
+		return delFlag;
+	}
+
+	public void setDelFlag(int delFlag) {
+		this.delFlag = delFlag;
+	}
+
+	public void setCreatorId(Integer creatorId){
+		this.creatorId = creatorId;
+	}
+	
+	public Integer getCreatorId(){
+		return this.creatorId;
+	}
+			
+	public void setCreateTime(java.util.Date createTime){
+		this.createTime = createTime;
+	}
+	
+	public java.util.Date getCreateTime(){
+		return this.createTime;
+	}
+			
+	public void setUpdateTime(java.util.Date updateTime){
+		this.updateTime = updateTime;
+	}
+	
+	public java.util.Date getUpdateTime(){
+		return this.updateTime;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 126 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/QuestionnaireUserResult.java

@@ -0,0 +1,126 @@
+package com.ym.mec.biz.dal.entity;
+
+import com.ym.mec.biz.dal.enums.QuestionnaireActiveTypeEnum;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(questionnaire_user_result):
+ */
+public class QuestionnaireUserResult {
+
+	/**  */
+	private Long id;
+	
+	/**  */
+	private Integer userId;
+
+	/**  */
+	private QuestionnaireActiveTypeEnum activeType;
+
+	/**  */
+	private Long activeId;
+	
+	/**  */
+	private Integer questionnaireTopicId;
+	
+	/**  */
+	private Long questionnaireQuestionId;
+	
+	/**  */
+	private String questionnaireQuestionItemIdList;
+	
+	/** 附加答案 */
+	private String additionalValue;
+	
+	/**  */
+	private java.util.Date createTime;
+	
+	/**  */
+	private java.util.Date updateTime;
+
+	public QuestionnaireActiveTypeEnum getActiveType() {
+		return activeType;
+	}
+
+	public void setActiveType(QuestionnaireActiveTypeEnum activeType) {
+		this.activeType = activeType;
+	}
+
+	public Long getActiveId() {
+		return activeId;
+	}
+
+	public void setActiveId(Long activeId) {
+		this.activeId = activeId;
+	}
+
+	public void setId(Long id){
+		this.id = id;
+	}
+	
+	public Long getId(){
+		return this.id;
+	}
+			
+	public void setUserId(Integer userId){
+		this.userId = userId;
+	}
+	
+	public Integer getUserId(){
+		return this.userId;
+	}
+			
+	public void setQuestionnaireTopicId(Integer questionnaireTopicId){
+		this.questionnaireTopicId = questionnaireTopicId;
+	}
+	
+	public Integer getQuestionnaireTopicId(){
+		return this.questionnaireTopicId;
+	}
+			
+	public void setQuestionnaireQuestionId(Long questionnaireQuestionId){
+		this.questionnaireQuestionId = questionnaireQuestionId;
+	}
+	
+	public Long getQuestionnaireQuestionId(){
+		return this.questionnaireQuestionId;
+	}
+			
+	public void setQuestionnaireQuestionItemIdList(String questionnaireQuestionItemIdList){
+		this.questionnaireQuestionItemIdList = questionnaireQuestionItemIdList;
+	}
+	
+	public String getQuestionnaireQuestionItemIdList(){
+		return this.questionnaireQuestionItemIdList;
+	}
+			
+	public void setAdditionalValue(String additionalValue){
+		this.additionalValue = additionalValue;
+	}
+	
+	public String getAdditionalValue(){
+		return this.additionalValue;
+	}
+			
+	public void setCreateTime(java.util.Date createTime){
+		this.createTime = createTime;
+	}
+	
+	public java.util.Date getCreateTime(){
+		return this.createTime;
+	}
+			
+	public void setUpdateTime(java.util.Date updateTime){
+		this.updateTime = updateTime;
+	}
+	
+	public java.util.Date getUpdateTime(){
+		return this.updateTime;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Student.java

@@ -54,6 +54,8 @@ public class Student extends SysUser {
 	@ApiModelProperty(value = "班级")
 	private String currentClass;
 
+	private Integer cooperationOrganId;
+
 	public Student(Integer userId, String subjectIdList) {
 		this.userId = userId;
 		this.subjectIdList = subjectIdList;
@@ -184,6 +186,14 @@ public class Student extends SysUser {
 		this.currentGradeNum = currentGradeNum;
 	}
 
+	public Integer getCooperationOrganId() {
+		return cooperationOrganId;
+	}
+
+	public void setCooperationOrganId(Integer cooperationOrganId) {
+		this.cooperationOrganId = cooperationOrganId;
+	}
+
 	@Override
 	public String getCurrentClass() {
 		return currentClass;

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexDataType.java

@@ -50,6 +50,8 @@ public enum IndexDataType implements BaseEnum<String, IndexDataType> {
     //课程数据
     MUSIC_GROUP_COURSE("MUSIC_GROUP_COURSE","乐团课", false, true),
     VIP_GROUP_COURSE("VIP_GROUP_COURSE","VIP课", false, true),
+    VIP_GROUP_ONLINE_COURSE("VIP_GROUP_ONLINE_COURSE","VIP线上课", false, true),
+    VIP_GROUP_OFFLINE_COURSE("VIP_GROUP_OFFLINE_COURSE","VIP线下课", false, true),
     PRACTICE_GROUP_COURSE("PRACTICE_GROUP_COURSE","网管课", false, true),
 
     //学员变动

+ 26 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/QuestionnaireActiveTypeEnum.java

@@ -0,0 +1,26 @@
+package com.ym.mec.biz.dal.enums;
+
+import com.ym.mec.common.enums.BaseEnum;
+
+public enum QuestionnaireActiveTypeEnum implements BaseEnum<String, QuestionnaireActiveTypeEnum> {
+	REPLACEMENT("REPLACEMENT", "乐器置换");
+
+	private String code;
+
+	private String desc;
+
+	private QuestionnaireActiveTypeEnum(String code, String desc) {
+		this.code = code;
+		this.desc = desc;
+	}
+
+	@Override
+	public String getCode() {
+		return code;
+	}
+
+	public String getDesc() {
+		return desc;
+	}
+
+}

+ 16 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/QuestionnaireTopicQueryInfo.java

@@ -0,0 +1,16 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+
+public class QuestionnaireTopicQueryInfo extends QueryInfo {
+
+    private Integer status;
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+}

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/QuestionnaireQuestionItemService.java

@@ -0,0 +1,8 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.entity.QuestionnaireQuestionItem;
+import com.ym.mec.common.service.BaseService;
+
+public interface QuestionnaireQuestionItemService extends BaseService<Long, QuestionnaireQuestionItem> {
+
+}

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/QuestionnaireQuestionService.java

@@ -0,0 +1,8 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.entity.QuestionnaireQuestion;
+import com.ym.mec.common.service.BaseService;
+
+public interface QuestionnaireQuestionService extends BaseService<Long, QuestionnaireQuestion> {
+
+}

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/QuestionnaireTopicService.java

@@ -0,0 +1,13 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.entity.QuestionnaireTopic;
+import com.ym.mec.common.service.BaseService;
+
+public interface QuestionnaireTopicService extends BaseService<Integer, QuestionnaireTopic> {
+
+    void add(QuestionnaireTopic questionnaireTopic);
+
+    void modify(QuestionnaireTopic questionnaireTopic);
+
+    QuestionnaireTopic getDetail(Integer topicId);
+}

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/QuestionnaireUserResultService.java

@@ -0,0 +1,11 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.entity.QuestionnaireUserResult;
+import com.ym.mec.common.service.BaseService;
+
+import java.util.List;
+
+public interface QuestionnaireUserResultService extends BaseService<Long, QuestionnaireUserResult> {
+
+    void batchInsert(List<QuestionnaireUserResult> questionnaireUserResultList);
+}

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

@@ -1730,12 +1730,12 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 List<Map<Integer, Long>> studentSubjectIdMaps = subjectDao.findStudentSubjectIdMaps(tempIds);
                 Map<Integer, Long> studentSubjectIdMap = MapUtil.convertIntegerMap(studentSubjectIdMaps);
                 truantStudent.forEach(studentAttendanceViewDto -> {
-//                   if(studentAttendanceViewDto.getBeMerged()){
-//                       studentAttendanceViewDto.setSubjectName("被合并学员");
-//                   }else{
+                   if(Objects.nonNull(studentAttendanceViewDto.getBeMerged())&&studentAttendanceViewDto.getBeMerged()){
+                       studentAttendanceViewDto.setSubjectName("被合并学员");
+                   }else{
                        studentAttendanceViewDto.setSubjectName(studentSubjectNameMap.get(studentAttendanceViewDto.getStudentId().intValue()));
                        studentAttendanceViewDto.setSubjectId(studentSubjectIdMap.get(studentAttendanceViewDto.getStudentId().intValue()));
-//                   }
+                   }
                 });
             } else if (schedule.getGroupType() != MUSIC) {
                 ClassGroup classGroup = classGroupDao.get(schedule.getClassGroupId());

+ 86 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java

@@ -1,11 +1,13 @@
 package com.ym.mec.biz.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUserRole;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.IndexBaseDto;
 import com.ym.mec.biz.dal.dto.IndexErrorDataExportDto;
+import com.ym.mec.biz.dal.dto.OrganVipGroupCategoryCourseNumDto;
 import com.ym.mec.biz.dal.entity.IndexErrInfoDto;
 import com.ym.mec.biz.dal.entity.Organization;
 import com.ym.mec.biz.dal.enums.*;
@@ -35,6 +37,7 @@ import java.util.*;
 import java.util.stream.Collectors;
 
 import static com.ym.mec.biz.dal.enums.IndexDataType.FINANCE_AMOUNT;
+import static com.ym.mec.biz.dal.enums.IndexDataType.VIP_GROUP_ONLINE_COURSE;
 import static com.ym.mec.biz.dal.enums.IndexErrorType.WAIT_CREATE_PAYMENT_CALENDER;
 
 @Service
@@ -97,7 +100,7 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 		if(StringUtils.isNotBlank(queryInfo.getOrganId())){
 			organIds = Arrays.stream(queryInfo.getOrganId().split(",")).map(Integer::new).collect(Collectors.toSet());
 		}
-		Set<String> dataTypes = null;
+		Set<String> dataTypes = new HashSet<>();
 		if(StringUtils.isNotBlank(queryInfo.getDataTypes())){
 			dataTypes = Arrays.stream(queryInfo.getDataTypes().split(",")).collect(Collectors.toSet());
 		}
@@ -107,6 +110,35 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			indexBaseDatas = new ArrayList<>();
 		}
 
+		Map<Date, Map<IndexDataType, Map<String, Integer>>> vipCategoryCourseListMap = new HashMap<>();
+		if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains("VIP_GROUP_COURSE")||dataTypes.contains("VIP_GROUP_ONLINE_COURSE")||dataTypes.contains("VIP_GROUP_OFFLINE_COURSE")){
+			dataTypes.clear();
+			dataTypes.add("VIP_GROUP_COURSE");
+			dataTypes.add("VIP_GROUP_ONLINE_COURSE");
+			dataTypes.add("VIP_GROUP_OFFLINE_COURSE");
+			List<IndexBaseMonthData> indexBaseDataList = indexBaseMonthDataDao.getIndexBaseDataList(organIds, dataTypes, startDate.toString(), endDate.toString());
+			if(!CollectionUtils.isEmpty(indexBaseDataList)){
+				for (IndexBaseMonthData indexBaseMonthData : indexBaseDataList) {
+					if(StringUtils.isBlank(indexBaseMonthData.getExtendInfo())){
+						continue;
+					}
+					if(!vipCategoryCourseListMap.containsKey(indexBaseMonthData.getMonth())){
+						vipCategoryCourseListMap.put(indexBaseMonthData.getMonth(), new HashMap<>());
+					}
+					if(!vipCategoryCourseListMap.get(indexBaseMonthData.getMonth()).containsKey(indexBaseMonthData.getDataType())){
+						vipCategoryCourseListMap.get(indexBaseMonthData.getMonth()).put(indexBaseMonthData.getDataType(), new HashMap<>());
+					}
+					Map<String, Integer> map = JSON.parseObject(indexBaseMonthData.getExtendInfo(), Map.class);
+					for (Map.Entry<String, Integer> o : map.entrySet()) {
+						if(!vipCategoryCourseListMap.get(indexBaseMonthData.getMonth()).get(indexBaseMonthData.getDataType()).containsKey(o.getKey())){
+							vipCategoryCourseListMap.get(indexBaseMonthData.getMonth()).get(indexBaseMonthData.getDataType()).put(o.getKey(), 0);
+						}
+						vipCategoryCourseListMap.get(indexBaseMonthData.getMonth()).get(indexBaseMonthData.getDataType()).put(o.getKey(), vipCategoryCourseListMap.get(indexBaseMonthData.getMonth()).get(indexBaseMonthData.getDataType()).get(o.getKey())+o.getValue());
+					}
+				}
+			}
+		}
+
 		Map<IndexDataType, List<IndexBaseMonthData>> typeDateMap = indexBaseDatas.stream().filter(d->Objects.nonNull(d.getDataType())).collect(Collectors.groupingBy(IndexBaseMonthData::getDataType));
 		List<IndexBaseMonthData> financePayDataWithTimely = indexBaseMonthDataDao.getFinancePayDataWithTimely(startDate.toString(), endDate.toString(), new ArrayList<>(organIds));
 		typeDateMap.put(IndexDataType.FINANCE_PAY,financePayDataWithTimely);
@@ -208,6 +240,15 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 					IndexDataType.TOTAL_AMOUNT.equals(typeDateMapEntry.getKey())){
 				indexBaseData.setPercent(typeDateMapEntry.getValue().stream().map(IndexBaseMonthData::getPercent).reduce(BigDecimal.ZERO, BigDecimal::add));
 			}
+			if(IndexDataType.VIP_GROUP_COURSE.equals(typeDateMapEntry.getKey()) || VIP_GROUP_ONLINE_COURSE.equals(typeDateMapEntry.getKey()) ||
+					IndexDataType.VIP_GROUP_OFFLINE_COURSE.equals(typeDateMapEntry.getKey())){
+				for (IndexBaseMonthData indexBaseMonthData : indexBaseData.getIndexMonthData()) {
+					if(vipCategoryCourseListMap.containsKey(indexBaseMonthData.getMonth())&&vipCategoryCourseListMap.get(indexBaseMonthData.getMonth()).containsKey(indexBaseData.getDataType())){
+						TreeMap<String, Integer> extendSortMap = new TreeMap<>(vipCategoryCourseListMap.get(indexBaseMonthData.getMonth()).get(indexBaseData.getDataType()));
+						indexBaseMonthData.setExtendInfo(JSON.toJSONString(extendSortMap));
+					}
+				}
+			}
 			result.add(indexBaseData);
 		}
 		return result;
@@ -275,9 +316,50 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 		saveData(indexBaseMonthDataDao.getHomeworkData(dayStr, "comment"), monday.toString(), IndexDataType.HOMEWORK_COMMENT_RATE);
 
 		//课程数据
-		saveData(indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.MUSIC, null), dayStr, IndexDataType.MUSIC_GROUP_COURSE);
-		saveData(indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.VIP, null), dayStr, IndexDataType.VIP_GROUP_COURSE);
-		saveData(indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.PRACTICE, null), dayStr, IndexDataType.PRACTICE_GROUP_COURSE);
+		saveData(indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.MUSIC, null, null), dayStr, IndexDataType.MUSIC_GROUP_COURSE);
+
+		List<IndexBaseMonthData> vipCourseData = indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.VIP, null, null);
+		List<OrganVipGroupCategoryCourseNumDto> vipGroupCategoryCourseData = indexBaseMonthDataDao.getVipGroupCategoryCourseData(dayStr, GroupType.VIP, null, null);
+		Map<Integer, Map<String, Integer>> organCategoryCourseMap = new HashMap<>();
+		if(!CollectionUtils.isEmpty(vipGroupCategoryCourseData)){
+			organCategoryCourseMap = vipGroupCategoryCourseData.stream().collect(Collectors.groupingBy(OrganVipGroupCategoryCourseNumDto::getOrganId, Collectors.toMap(OrganVipGroupCategoryCourseNumDto::getCategoryName, o -> o.getCourseNum())));
+		}
+		for (IndexBaseMonthData vipCourseDatum : vipCourseData) {
+			if(organCategoryCourseMap.containsKey(vipCourseDatum.getOrganId())){
+				vipCourseDatum.setExtendInfo(JSON.toJSONString(organCategoryCourseMap.get(vipCourseDatum.getOrganId())));
+			}
+		}
+		saveData(vipCourseData, dayStr, IndexDataType.VIP_GROUP_COURSE);
+
+
+		List<IndexBaseMonthData> vipOnlineCourseData = indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.VIP, null, TeachModeEnum.ONLINE);
+		List<OrganVipGroupCategoryCourseNumDto> vipGroupOnlineCategoryCourseData = indexBaseMonthDataDao.getVipGroupCategoryCourseData(dayStr, GroupType.VIP, null, TeachModeEnum.ONLINE);
+		Map<Integer, Map<String, Integer>> organOnlineCategoryCourseMap = new HashMap<>();
+		if(!CollectionUtils.isEmpty(vipGroupOnlineCategoryCourseData)){
+			organOnlineCategoryCourseMap = vipGroupOnlineCategoryCourseData.stream().collect(Collectors.groupingBy(OrganVipGroupCategoryCourseNumDto::getOrganId, Collectors.toMap(OrganVipGroupCategoryCourseNumDto::getCategoryName, o -> o.getCourseNum())));
+		}
+		for (IndexBaseMonthData vipCourseDatum : vipOnlineCourseData) {
+			if(organOnlineCategoryCourseMap.containsKey(vipCourseDatum.getOrganId())){
+				vipCourseDatum.setExtendInfo(JSON.toJSONString(organOnlineCategoryCourseMap.get(vipCourseDatum.getOrganId())));
+			}
+		}
+		saveData(vipOnlineCourseData, dayStr, IndexDataType.VIP_GROUP_ONLINE_COURSE);
+
+
+		List<IndexBaseMonthData> vipOfflineCourseData = indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.VIP, null, TeachModeEnum.OFFLINE);
+		List<OrganVipGroupCategoryCourseNumDto> vipGroupOfflineCategoryCourseData = indexBaseMonthDataDao.getVipGroupCategoryCourseData(dayStr, GroupType.VIP, null, TeachModeEnum.OFFLINE);
+		Map<Integer, Map<String, Integer>> organOfflineCategoryCourseMap = new HashMap<>();
+		if(!CollectionUtils.isEmpty(vipGroupOfflineCategoryCourseData)){
+			organOfflineCategoryCourseMap = vipGroupOfflineCategoryCourseData.stream().collect(Collectors.groupingBy(OrganVipGroupCategoryCourseNumDto::getOrganId, Collectors.toMap(OrganVipGroupCategoryCourseNumDto::getCategoryName, o -> o.getCourseNum())));
+		}
+		for (IndexBaseMonthData vipCourseDatum : vipOfflineCourseData) {
+			if(organOfflineCategoryCourseMap.containsKey(vipCourseDatum.getOrganId())){
+				vipCourseDatum.setExtendInfo(JSON.toJSONString(organOfflineCategoryCourseMap.get(vipCourseDatum.getOrganId())));
+			}
+		}
+		saveData(vipOfflineCourseData, dayStr, IndexDataType.VIP_GROUP_OFFLINE_COURSE);
+
+		saveData(indexBaseMonthDataDao.getGroupCourseDataWithGroup(dayStr, GroupType.PRACTICE, null, null), dayStr, IndexDataType.PRACTICE_GROUP_COURSE);
 
 		//学员变动
 		saveData(indexBaseMonthDataDao.getAddStudentRegistrationData(dayStr), dayStr, IndexDataType.ADD_STUDENT_REGISTRATION_NUM);

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/QuestionnaireQuestionItemServiceImpl.java

@@ -0,0 +1,22 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.common.dal.BaseDAO;
+import org.springframework.beans.factory.annotation.Autowired;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.biz.dal.entity.QuestionnaireQuestionItem;
+import com.ym.mec.biz.service.QuestionnaireQuestionItemService;
+import com.ym.mec.biz.dal.dao.QuestionnaireQuestionItemDao;
+import org.springframework.stereotype.Service;
+
+@Service
+public class QuestionnaireQuestionItemServiceImpl extends BaseServiceImpl<Long, QuestionnaireQuestionItem>  implements QuestionnaireQuestionItemService {
+	
+	@Autowired
+	private QuestionnaireQuestionItemDao questionnaireQuestionItemDao;
+
+	@Override
+	public BaseDAO<Long, QuestionnaireQuestionItem> getDAO() {
+		return questionnaireQuestionItemDao;
+	}
+	
+}

+ 21 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/QuestionnaireQuestionServiceImpl.java

@@ -0,0 +1,21 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.common.dal.BaseDAO;
+import org.springframework.beans.factory.annotation.Autowired;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.biz.dal.entity.QuestionnaireQuestion;
+import com.ym.mec.biz.service.QuestionnaireQuestionService;
+import com.ym.mec.biz.dal.dao.QuestionnaireQuestionDao;
+import org.springframework.stereotype.Service;
+
+@Service
+public class QuestionnaireQuestionServiceImpl extends BaseServiceImpl<Long, QuestionnaireQuestion>  implements QuestionnaireQuestionService {
+	
+	@Autowired
+	private QuestionnaireQuestionDao questionnaireQuestionDao;
+
+	@Override
+	public BaseDAO<Long, QuestionnaireQuestion> getDAO() {
+		return questionnaireQuestionDao;
+	}
+}

+ 134 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/QuestionnaireTopicServiceImpl.java

@@ -0,0 +1,134 @@
+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.QuestionnaireQuestionDao;
+import com.ym.mec.biz.dal.dao.QuestionnaireQuestionItemDao;
+import com.ym.mec.biz.dal.dao.QuestionnaireUserResultDao;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
+import org.springframework.beans.factory.annotation.Autowired;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.biz.service.QuestionnaireTopicService;
+import com.ym.mec.biz.dal.dao.QuestionnaireTopicDao;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Service
+public class QuestionnaireTopicServiceImpl extends BaseServiceImpl<Integer, QuestionnaireTopic>  implements QuestionnaireTopicService {
+	
+	@Autowired
+	private QuestionnaireTopicDao questionnaireTopicDao;
+	@Autowired
+	private QuestionnaireQuestionDao questionnaireQuestionDao;
+	@Autowired
+	private QuestionnaireQuestionItemDao questionnaireQuestionItemDao;
+	@Autowired
+	private QuestionnaireUserResultDao questionnaireUserResultDao;
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+
+	@Override
+	public BaseDAO<Integer, QuestionnaireTopic> getDAO() {
+		return questionnaireTopicDao;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void add(QuestionnaireTopic questionnaireTopic) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		questionnaireTopic.setCreatorId(sysUser.getId());
+		questionnaireTopicDao.insert(questionnaireTopic);
+		Integer topicId = questionnaireTopic.getId();
+		List<QuestionnaireQuestion> questionnaireQuestionList = questionnaireTopic.getQuestionnaireQuestionList();
+		if(questionnaireQuestionList != null && questionnaireQuestionList.size() > 0){
+			for (QuestionnaireQuestion questionnaireQuestion : questionnaireQuestionList) {
+				questionnaireQuestion.setQuestionnaireTopicId(topicId);
+				questionnaireQuestionDao.insert(questionnaireQuestion);
+				Long questionId = questionnaireQuestion.getId();
+				List<QuestionnaireQuestionItem> questionItemList = questionnaireQuestion.getQuestionnaireQuestionItemList();
+				if(questionItemList != null && questionItemList.size() > 0){
+					questionnaireQuestionItemDao.batchInsert(questionItemList,questionId,topicId);
+				}
+			}
+		}
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void modify(QuestionnaireTopic questionnaireTopic) {
+		Date date = new Date();
+		questionnaireTopic.setUpdateTime(date);
+		questionnaireTopicDao.update(questionnaireTopic);
+		Integer topicId = questionnaireTopic.getId();
+		List<Long> delQuestionnaireQuestionIdList = questionnaireTopic.getDelQuestionnaireQuestionIdList();
+		//调查问卷是否有用户参与
+		int num = questionnaireUserResultDao.countByTopicId(topicId);
+		if(delQuestionnaireQuestionIdList != null && delQuestionnaireQuestionIdList.size() > 0){
+			if(num > 0){
+				throw new BizException("操作失败:该调查问卷已使用");
+			}
+			questionnaireQuestionDao.batchDel(delQuestionnaireQuestionIdList);
+			questionnaireQuestionItemDao.batchDelByQuestionIdList(delQuestionnaireQuestionIdList);
+		}
+		List<QuestionnaireQuestion> questionnaireQuestionList = questionnaireTopic.getQuestionnaireQuestionList();
+		if(questionnaireQuestionList != null && questionnaireQuestionList.size() > 0){
+			//获取需要修改的问题
+			List<QuestionnaireQuestion> updateCollect = questionnaireQuestionList.stream().filter(e -> e.getId() != null).collect(Collectors.toList());
+			if(updateCollect != null && updateCollect.size() > 0){
+				for (QuestionnaireQuestion question : updateCollect) {
+					//需要删除的问题答案
+					List<Long> delQuestionnaireQuestionItemIdList = question.getDelQuestionnaireQuestionItemIdList();
+					if(delQuestionnaireQuestionItemIdList != null && delQuestionnaireQuestionItemIdList.size() > 0){
+						if(num > 0){
+							throw new BizException("操作失败:该调查问卷已使用");
+						}
+						questionnaireQuestionItemDao.batchDelByQuestionIdList(delQuestionnaireQuestionItemIdList);
+					}
+					questionnaireQuestionDao.update(question);
+					Long questionId = question.getId();
+					List<QuestionnaireQuestionItem> questionItemList = question.getQuestionnaireQuestionItemList();
+					//获取需要修改的答案
+					List<QuestionnaireQuestionItem> updateItemList = questionItemList.stream().filter(e -> e.getId() != null).collect(Collectors.toList());
+					if(updateItemList != null && updateItemList.size() > 0){
+						questionnaireQuestionItemDao.batchUpdate(updateItemList);
+					}
+					//获取删除的答案
+					List<QuestionnaireQuestionItem> insertItemList = questionItemList.stream().filter(e -> e.getId() == null).collect(Collectors.toList());
+					if(insertItemList != null && insertItemList.size() > 0){
+						questionnaireQuestionItemDao.batchInsert(insertItemList,questionId,topicId);
+					}
+				}
+			}
+			//获取需要新增的问题
+			List<QuestionnaireQuestion> addCollect = questionnaireQuestionList.stream().filter(e -> e.getId() == null).collect(Collectors.toList());
+			if(addCollect.size() > 0){
+				for (QuestionnaireQuestion question : addCollect) {
+					question.setQuestionnaireTopicId(topicId);
+					questionnaireQuestionDao.insert(question);
+					Long questionId = question.getId();
+					List<QuestionnaireQuestionItem> questionItemList = question.getQuestionnaireQuestionItemList();
+					if(questionItemList != null && questionItemList.size() > 0){
+						questionnaireQuestionItemDao.batchInsert(questionItemList,questionId,topicId);
+					}
+				}
+			}
+		}
+	}
+
+	@Override
+	public QuestionnaireTopic getDetail(Integer topicId) {
+		QuestionnaireTopic questionnaireTopic = questionnaireTopicDao.get(topicId);
+		Map<String,Object> paramMap = new HashMap(1);
+		paramMap.put("topicId",topicId);
+		questionnaireTopic.setQuestionnaireQuestionList(questionnaireQuestionDao.findAll(paramMap));
+		return questionnaireTopic;
+	}
+}

+ 28 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/QuestionnaireUserResultServiceImpl.java

@@ -0,0 +1,28 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.common.dal.BaseDAO;
+import org.springframework.beans.factory.annotation.Autowired;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.biz.dal.entity.QuestionnaireUserResult;
+import com.ym.mec.biz.service.QuestionnaireUserResultService;
+import com.ym.mec.biz.dal.dao.QuestionnaireUserResultDao;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class QuestionnaireUserResultServiceImpl extends BaseServiceImpl<Long, QuestionnaireUserResult>  implements QuestionnaireUserResultService {
+	
+	@Autowired
+	private QuestionnaireUserResultDao questionnaireUserResultDao;
+
+	@Override
+	public BaseDAO<Long, QuestionnaireUserResult> getDAO() {
+		return questionnaireUserResultDao;
+	}
+
+	@Override
+	public void batchInsert(List<QuestionnaireUserResult> questionnaireUserResultList) {
+
+	}
+}

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

@@ -227,6 +227,9 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
             if(StringUtils.isBlank(student.getSubjectIdList())){
                 student.setSubjectIdList(studentClassInfoDto.getSubjectId().toString());
             }
+            if(Objects.isNull(student.getCooperationOrganId())){
+                student.setCooperationOrganId(studentClassInfoDto.getCooperationOrganId());
+            }
             needUpdateStudents.add(student);
         }
         if(!CollectionUtils.isEmpty(needUpdateStudents)){

+ 68 - 6
mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml

@@ -14,6 +14,7 @@
 		<result column="activate_num_" property="activateNum" />
 		<result column="percent_" property="percent" />
 		<result column="data_type_" property="dataType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+		<result column="extend_info_" property="extendInfo"/>
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
 	</resultMap>
@@ -39,25 +40,25 @@
 		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
 		</selectKey>
 		-->
-		INSERT INTO index_base_month_data (month_,organ_id_,total_num_,activate_num_,percent_,data_type_,create_time_,update_time_)
-		VALUES(#{month},#{organId},#{totalNum},#{activateNum},#{percent},#{dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},NOW(),NOW())
+		INSERT INTO index_base_month_data (month_,organ_id_,total_num_,activate_num_,percent_,data_type_,extend_info_,create_time_,update_time_)
+		VALUES(#{month},#{organId},#{totalNum},#{activateNum},#{percent},#{dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{extendInfo},NOW(),NOW())
 	</insert>
 
 	<insert id="batchInsertWithDataType" parameterType="com.ym.mec.biz.dal.entity.IndexBaseMonthData" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO index_base_month_data (month_,organ_id_,total_num_,activate_num_,percent_,data_type_,create_time_,update_time_)
+		INSERT INTO index_base_month_data (month_,organ_id_,total_num_,activate_num_,percent_,data_type_,extend_info_,create_time_,update_time_)
 		VALUES
 		<foreach collection="datas" item="data" separator=",">
 			(#{data.month},#{data.organId},#{data.totalNum},#{data.activateNum},#{data.percent},
-			#{dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},NOW(),NOW())
+			#{dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{data.extendInfo},NOW(),NOW())
 		</foreach>
 	</insert>
 
 	<insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.IndexBaseMonthData" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO index_base_month_data (month_,organ_id_,total_num_,activate_num_,percent_,data_type_,create_time_,update_time_)
+		INSERT INTO index_base_month_data (month_,organ_id_,total_num_,activate_num_,percent_,data_type_,extend_info_,create_time_,update_time_)
 		VALUES
 		<foreach collection="datas" item="data" separator=",">
 			(#{data.month},#{data.organId},#{data.totalNum},#{data.activateNum},#{data.percent},
-			#{data.dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},NOW(),NOW())
+			#{data.dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{data.extendInfo},NOW(),NOW())
 		</foreach>
 	</insert>
 
@@ -86,6 +87,9 @@
 			<if test="dataType != null">
 				data_type_ = #{dataType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
 			</if>
+			<if test="extendInfo != null">
+				extend_info_ = #{extendInfo},
+			</if>
 			update_time_ = NOW()
 		</set>
 		WHERE id_ = #{id}
@@ -144,6 +148,32 @@
 		GROUP BY month_,data_type_
 	</select>
 
+	<select id="getIndexBaseDataList" resultMap="IndexBaseMonthData">
+		SELECT
+			*
+		FROM index_base_month_data
+			<where>
+				<if test="dataTypes!=null and dataTypes.size()>0">
+					AND data_type_ IN
+					<foreach collection="dataTypes" item="dataType" open="(" close=")" separator=",">
+						#{dataType}
+					</foreach>
+				</if>
+				<if test="organIds!=null and organIds.size()>0">
+					AND organ_id_ IN
+					<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+						#{organId}
+					</foreach>
+				</if>
+				<if test="startMonth!=null and startMonth!=''">
+					AND month_&gt;=#{startMonth}
+				</if>
+				<if test="endMonth!=null and endMonth!=''">
+					AND month_&lt;=#{endMonth}
+				</if>
+			</where>
+	</select>
+
 	<select id="getWithDayAndDataType" resultMap="IndexBaseMonthData">
 		SELECT
 			*
@@ -467,12 +497,44 @@
 		<if test="dayStr!=null and dayStr!=''">
 			AND m.class_date_ = #{dayStr}
 		</if>
+		<if test="teachMode!=null">
+			AND m.teach_mode_ = #{teachMode, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+		</if>
 		GROUP BY
 			m.organ_id_
 		ORDER BY
 			m.organ_id_;
 	</select>
 
+	<select id="getVipGroupCategoryCourseData" resultType="com.ym.mec.biz.dal.dto.OrganVipGroupCategoryCourseNumDto">
+		SELECT
+		m.organ_id_ organId,
+		vgc.name_ categoryName,
+		COUNT( m.id_ ) courseNum
+		FROM
+		course_schedule m
+		LEFT JOIN vip_group vg ON m.music_group_id_=vg.id_
+		LEFT JOIN vip_group_category vgc ON vg.vip_group_category_id_=vgc.id_
+		WHERE
+		m.del_flag_ = 0
+		AND (m.is_lock_ = 0 OR m.is_lock_ IS NULL)
+		AND (m.new_course_id_ IS NULL OR m.new_course_id_=m.id_)
+		AND m.organ_id_ IS NOT NULL
+		<if test="groupType!=null">
+			AND m.group_type_ = #{groupType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+		</if>
+		<if test="dayStr!=null and dayStr!=''">
+			AND m.class_date_ = #{dayStr}
+		</if>
+		<if test="teachMode!=null">
+			AND m.teach_mode_ = #{teachMode, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+		</if>
+		GROUP BY
+		m.organ_id_,vgc.name_
+		ORDER BY
+		m.organ_id_;
+	</select>
+
 	<select id="getOtherStudentData" resultMap="IndexBaseMonthData">
 		SELECT
 			su.organ_id_,

+ 101 - 0
mec-biz/src/main/resources/config/mybatis/QuestionnaireQuestionItemMapper.xml

@@ -0,0 +1,101 @@
+<?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.QuestionnaireQuestionItemDao">
+	
+	<resultMap type="com.ym.mec.biz.dal.entity.QuestionnaireQuestionItem" id="QuestionnaireQuestionItem">
+		<result column="id_" property="id" />
+		<result column="questionnaire_topic_id_" property="questionnaireTopicId" />
+		<result column="questionnaire_question_id_" property="questionnaireQuestionId" />
+		<result column="answer_value_" property="answerValue" />
+		<result column="sort_" property="sort" />
+		<result column="is_over_" property="isOver"/>
+		<result column="create_time_" property="createTime" />
+		<result column="update_time_" property="updateTime" />
+		<result column="del_flag_" property="delFlag"/>
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="QuestionnaireQuestionItem" >
+		SELECT * FROM questionnaire_question_item WHERE id_ = #{id} 
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="QuestionnaireQuestionItem">
+		SELECT * FROM questionnaire_question_item ORDER BY id_
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.QuestionnaireQuestionItem" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		INSERT INTO questionnaire_question_item (questionnaire_topic_id_,questionnaire_question_id_,answer_value_,sort_,is_over_,create_time_,update_time_)
+		VALUES(#{questionnaireTopicId},#{questionnaireQuestionId},#{answerValue},#{sort},#{isOver},NOW(),NOW())
+	</insert>
+
+    <insert id="batchInsert" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		INSERT INTO questionnaire_question_item (questionnaire_topic_id_,questionnaire_question_id_,answer_value_,sort_,is_over_,create_time_,update_time_)
+		VALUES
+		<foreach collection="questionItemList" item="item" separator=",">
+			(#{topicId},#{questionId},#{item.answerValue},#{item.sort},#{item.isOver},NOW(),NOW())
+		</foreach>
+	</insert>
+
+    <!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.QuestionnaireQuestionItem">
+		UPDATE questionnaire_question_item <set>
+		<if test="updateTime != null">
+			update_time_ = #{updateTime},
+		</if>
+		<if test="sort != null">
+			sort_ = #{sort},
+		</if>
+		<if test="isOver != null">
+			is_over_ = #{isOver},
+		</if>
+		<if test="answerValue != null">
+			answer_value_ = #{answerValue},
+		</if>
+		</set> WHERE id_ = #{id}
+	</update>
+	
+	<!-- 根据主键删除一条记录 -->
+	<update id="delete" >
+		UPDATE questionnaire_question_item SET del_flag_ = 1 WHERE id_ = #{id}
+	</update>
+	<update id="batchDelByQuestionIdList">
+		UPDATE questionnaire_question_item SET del_flag_ = 1 WHERE questionnaire_question_id_ IN
+		<foreach collection="questionIdList" item="item" open="(" separator="," close=")">
+			#{item}
+		</foreach>
+	</update>
+	<update id="batchUpdate">
+		<foreach collection="updateItemList" item="item" separator=";">
+			UPDATE questionnaire_question_item
+			<set>
+				<if test="item.sort != null">
+					sort_ = #{item.sort},
+				</if>
+				<if test="item.isOver != null">
+					is_over_ = #{item.isOver},
+				</if>
+				<if test="item.answerValue != null">
+					answer_value_ = #{item.answerValue},
+				</if>
+					update_time_ = NOW()
+			</set>
+			WHERE id_ = #{item.id}
+		</foreach>
+	</update>
+
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="QuestionnaireQuestionItem" parameterType="map">
+		SELECT * FROM questionnaire_question_item ORDER BY id_ <include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM questionnaire_question_item
+	</select>
+</mapper>

+ 105 - 0
mec-biz/src/main/resources/config/mybatis/QuestionnaireQuestionMapper.xml

@@ -0,0 +1,105 @@
+<?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.QuestionnaireQuestionDao">
+	
+	<resultMap type="com.ym.mec.biz.dal.entity.QuestionnaireQuestion" id="QuestionnaireQuestion">
+		<result column="id_" property="id" />
+		<result column="questionnaire_topic_id_" property="questionnaireTopicId" />
+		<result column="content_" property="content" />
+		<result column="type_" property="type" />
+		<result column="sort_" property="sort" />
+		<result column="is_require_" property="isRequire"/>
+		<result column="desc_" property="desc" />
+		<result column="create_time_" property="createTime" />
+		<result column="update_time_" property="updateTime" />
+		<result column="del_flag_" property="delFlag"/>
+		<collection property="questionnaireQuestionItemList" ofType="com.ym.mec.biz.dal.entity.QuestionnaireQuestionItem">
+			<result column="item_id_" property="id" />
+			<result column="item_questionnaire_topic_id_" property="questionnaireTopicId" />
+			<result column="item_questionnaire_question_id_" property="questionnaireQuestionId" />
+			<result column="item_answer_value_" property="answerValue" />
+			<result column="item_sort_" property="sort" />
+			<result column="item_is_over_" property="isOver"/>
+			<result column="item_create_time_" property="createTime" />
+			<result column="item_update_time_" property="updateTime" />
+			<result column="item_del_flag_" property="delFlag"/>
+		</collection>
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="QuestionnaireQuestion" >
+		SELECT * FROM questionnaire_question WHERE id_ = #{id} 
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="QuestionnaireQuestion">
+		SELECT qq.*,qqi.answer_value_ item_answer_value_,qqi.create_time_ item_create_time_,qqi.id_ item_id_,qqi.is_over_ item_is_over_,
+			   qqi.questionnaire_question_id_ item_questionnaire_question_id_,qqi.questionnaire_topic_id_ item_questionnaire_topic_id_,
+		       qqi.sort_ item_sort_,qqi.update_time_ item_update_time_
+		FROM questionnaire_question qq
+		LEFT JOIN questionnaire_question_item qqi ON qq.id_ = qqi.questionnaire_question_id_
+		<where>
+			qq.del_flag_ != 1 AND qqi.del_flag_ != 1
+			<if test="topicId != null">
+				AND qq.questionnaire_topic_id_ = #{topicId}
+			</if>
+		</where>
+		ORDER BY qq.sort_,qq.id_,qqi.sort_,qqi.id_
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.QuestionnaireQuestion" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		INSERT INTO questionnaire_question (questionnaire_topic_id_,content_,type_,sort_,is_require_,desc_,create_time_,update_time_)
+		VALUES(#{questionnaireTopicId},#{content},#{type},#{sort},#{isRequire},#{desc},NOW(),NOW())
+	</insert>
+	
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.QuestionnaireQuestion">
+		UPDATE questionnaire_question <set>
+		<if test="updateTime != null">
+			update_time_ = #{updateTime},
+		</if>
+		<if test="content != null">
+			content_ = #{content},
+		</if>
+		<if test="sort != null">
+			sort_ = #{sort},
+		</if>
+		<if test="type != null">
+			type_ = #{type},
+		</if>
+		<if test="isRequire != null">
+			is_require_ = #{isRequire},
+		</if>
+		<if test="desc != null">
+			desc_ = #{desc},
+		</if>
+		</set> WHERE id_ = #{id}
+	</update>
+	
+	<!-- 根据主键删除一条记录 -->
+	<update id="delete" >
+		UPDATE questionnaire_question SET del_flag_ = 1 WHERE id_ = #{id}
+	</update>
+
+    <delete id="batchDel">
+		UPDATE questionnaire_question SET del_flag_ = 1 WHERE id_ IN
+		<foreach collection="questionIdList" item="item" open="(" separator="," close=")">
+			#{item}
+		</foreach>
+	</delete>
+
+    <!-- 分页查询 -->
+	<select id="queryPage" resultMap="QuestionnaireQuestion" parameterType="map">
+		SELECT * FROM questionnaire_question ORDER BY id_ <include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM questionnaire_question
+	</select>
+</mapper>

+ 79 - 0
mec-biz/src/main/resources/config/mybatis/QuestionnaireTopicMapper.xml

@@ -0,0 +1,79 @@
+<?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.QuestionnaireTopicDao">
+	
+	<resultMap type="com.ym.mec.biz.dal.entity.QuestionnaireTopic" id="QuestionnaireTopic">
+		<result column="id_" property="id" />
+		<result column="title_" property="title" />
+		<result column="status_" property="status"/>
+		<result column="creator_id_" property="creatorId" />
+		<result column="create_time_" property="createTime" />
+		<result column="update_time_" property="updateTime" />
+		<result column="del_flag_" property="delFlag"/>
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="QuestionnaireTopic" >
+		SELECT * FROM questionnaire_topic WHERE id_ = #{id} 
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="QuestionnaireTopic">
+		SELECT * FROM questionnaire_topic ORDER BY id_
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.QuestionnaireTopic" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		INSERT INTO questionnaire_topic (title_,status_,creator_id_,create_time_,update_time_)
+		VALUES(#{title},#{status},#{creatorId},NOW(),NOW())
+	</insert>
+	
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.QuestionnaireTopic">
+		UPDATE questionnaire_topic <set>
+		<if test="status != null">
+			status_ = #{status},
+		</if>
+		<if test="title != null">
+			title_ = #{title},
+		</if>
+		<if test="updateTime != null">
+			update_time_ = #{updateTime},
+		</if>
+		</set> WHERE id_ = #{id}
+	</update>
+	
+	<!-- 根据主键删除一条记录 -->
+	<update id="delete" >
+		UPDATE questionnaire_topic SET del_flag_ = 1 WHERE id_ = #{id}
+	</update>
+
+	<sql id="queryPageSql">
+		<where>
+			del_flag_ = 0
+			<if test="search != null and search != ''">
+				AND (id_ = #{search} OR title_ LIKE CONCAT('%',#{search},'%'))
+			</if>
+			<if test="status != null">
+				AND status_ = #{status}
+			</if>
+		</where>
+	</sql>
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="QuestionnaireTopic" parameterType="map">
+		SELECT * FROM questionnaire_topic
+		<include refid="queryPageSql"/>
+		ORDER BY id_
+		<include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM questionnaire_topic
+		<include refid="queryPageSql"/>
+	</select>
+</mapper>

+ 87 - 0
mec-biz/src/main/resources/config/mybatis/QuestionnaireUserResultMapper.xml

@@ -0,0 +1,87 @@
+<?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.QuestionnaireUserResultDao">
+	
+	<resultMap type="com.ym.mec.biz.dal.entity.QuestionnaireUserResult" id="QuestionnaireUserResult">
+		<result column="id_" property="id" />
+		<result column="user_id_" property="userId" />
+		<result column="active_type_" property="activeType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+		<result column="active_id_" property="activeId"/>
+		<result column="questionnaire_topic_id_" property="questionnaireTopicId" />
+		<result column="questionnaire_question_id_" property="questionnaireQuestionId" />
+		<result column="questionnaire_question_item_id_list_" property="questionnaireQuestionItemIdList" />
+		<result column="additional_value_" property="additionalValue" />
+		<result column="create_time_" property="createTime" />
+		<result column="update_time_" property="updateTime" />
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="QuestionnaireUserResult" >
+		SELECT * FROM questionnaire_user_result WHERE id_ = #{id} 
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="QuestionnaireUserResult">
+		SELECT * FROM questionnaire_user_result ORDER BY id_
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.QuestionnaireUserResult" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		INSERT INTO questionnaire_user_result (user_id_,questionnaire_topic_id_,questionnaire_question_id_,
+		                                       questionnaire_question_item_id_list_,additional_value_,active_type_,active_id_,create_time_,update_time_)
+		VALUES(#{userId},#{questionnaireTopicId},#{questionnaireQuestionId},#{questionnaireQuestionItemIdList},#{additionalValue}
+			  ,#{activeType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{activeId},NOW(),NOW())
+	</insert>
+	
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.QuestionnaireUserResult">
+		UPDATE questionnaire_user_result <set>
+		<if test="userId != null">
+			user_id_ = #{userId},
+		</if>
+		<if test="activeId != null">
+			active_id_ = #{activeId},
+		</if>
+		<if test="activeType != null">
+			active_type_ = #{activeType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+		</if>
+		<if test="questionnaireQuestionId != null">
+			questionnaire_question_id_ = #{questionnaireQuestionId},
+		</if>
+		<if test="questionnaireTopicId != null">
+			questionnaire_topic_id_ = #{questionnaireTopicId},
+		</if>
+		<if test="updateTime != null">
+			update_time_ = #{updateTime},
+		</if>
+		<if test="questionnaireQuestionItemIdList != null">
+			questionnaire_question_item_id_list_ = #{questionnaireQuestionItemIdList},
+		</if>
+		<if test="additionalValue != null">
+			additional_value_ = #{additionalValue},
+		</if>
+		</set> WHERE id_ = #{id}
+	</update>
+	
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM questionnaire_user_result WHERE id_ = #{id} 
+	</delete>
+	
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="QuestionnaireUserResult" parameterType="map">
+		SELECT * FROM questionnaire_user_result ORDER BY id_ <include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM questionnaire_user_result
+	</select>
+    <select id="countByTopicId" resultType="java.lang.Integer">
+		SELECT COUNT(id_) FROM questionnaire_user_result WHERE questionnaire_topic_id_ = #{topicId}
+	</select>
+</mapper>

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

@@ -68,6 +68,8 @@
         <result column="care_package_" property="carePackage"/>
         <result column="come_on_package_" property="comeOnPackage"/>
         <result column="grade_type_" property="gradeType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="cooperation_organ_id_" property="cooperationOrganId"/>
+        <result column="cooperation_organ_name_" property="cooperationOrganName"/>
     </resultMap>
 
     <sql id="queryCondition">
@@ -158,13 +160,15 @@
 		tu.`real_name_` teacher_name_,CASE s.service_tag_ WHEN 2 THEN 0 ELSE s.service_tag_ END service_tag_ ,s.`operating_tag_` ,
         s.care_package_, s.come_on_package_, suca.`course_balance_` ,suca.balance_,
 		sub.`name_` music_group_subject_ ,su.birthdate_,s.subject_id_list_,s.teacher_id_,s.current_grade_num_,s.current_class_,
-        case when su.password_ is null then false else true end isActive_,s.is_new_user_,case when sut.user_id_ is null then 0 else 1 end is_signed_contract_
+        case when su.password_ is null then false else true end isActive_,s.is_new_user_,case when sut.user_id_ is null then 0 else 1 end is_signed_contract_,
+        s.cooperation_organ_id_,co.name_ cooperation_organ_name_
 		FROM `student` s LEFT JOIN `sys_user` su on s.`user_id_` = su.`id_`
 		LEFT JOIN `organization` o on o.`id_` = su.`organ_id_`
 		LEFT JOIN `sys_user` tu on tu.`id_` = s.`teacher_id_` 
 		LEFT JOIN `sys_user_cash_account` suca on suca.`user_id_` = s.`user_id_`
 		LEFT JOIN `subject` sub on sub.id_ = s.`subject_id_list_`
 		left join sys_user_tsign sut on sut.user_id_ = s.user_id_
+        LEFT JOIN cooperation_organ co ON s.cooperation_organ_id_=co.id_
         <include refid="findStudentsByOrganIdSql"/>
         ORDER BY su.create_time_ DESC
         <include refid="global.limit"/>

+ 10 - 3
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -21,6 +21,7 @@
         <result column="come_on_package_" property="comeOnPackage"/>
         <result column="current_grade_num_" property="currentGradeNum"/>
         <result column="current_class_" property="currentClass"/>
+        <result column="cooperation_organ_id_" property="cooperationOrganId"/>
     </resultMap>
 
     <!-- 根据主键查询一条记录 -->
@@ -65,7 +66,7 @@
         <if test="operatingTag != null">
             operating_tag_,
         </if>
-        teacher_id_,create_time_,update_time_,service_tag_update_time_)
+        teacher_id_,create_time_,update_time_,service_tag_update_time_,cooperation_organ_id_)
         VALUES
         (#{userId},#{subjectIdList},
         <if test="serviceTag != null">
@@ -74,7 +75,7 @@
         <if test="operatingTag != null">
             #{operatingTag},
         </if>
-        #{teacherId},NOW(),NOW(),NOW())
+        #{teacherId},NOW(),NOW(),NOW(),#{cooperationOrganId})
     </insert>
 
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.Student">
@@ -111,6 +112,9 @@
             <if test="currentClass != null">
                 current_class_=#{currentClass},
             </if>
+            <if test="cooperationOrganId != null">
+                cooperation_organ_id_=#{cooperationOrganId},
+            </if>
                 update_time_ = NOW()
         </set>
         WHERE user_id_ = #{userId}
@@ -186,6 +190,9 @@
                 <if test="item.comeOnPackage != null">
                     come_on_package_=#{item.comeOnPackage},
                 </if>
+                <if test="item.cooperationOrganId != null">
+                    cooperation_organ_id_=#{item.cooperationOrganId},
+                </if>
                 update_time_ = NOW()
             </set>
             WHERE user_id_ = #{item.userId}
@@ -672,7 +679,7 @@
         </foreach>
     </select>
     <select id="getNoTeacherOrNoSubjectStudent" resultMap="Student">
-        SELECT * FROM student WHERE teacher_id_ IS NULL OR subject_id_list_ IS NULL;
+        SELECT * FROM student WHERE teacher_id_ IS NULL OR subject_id_list_ IS NULL OR cooperation_organ_id_ IS NULL;
     </select>
 
     <update id="updateGrade"><![CDATA[

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

@@ -957,7 +957,8 @@
                sr.music_group_id_ musicGroupId,
                sr.actual_subject_id_ subjectId,
                cgsm.class_group_id_ classGroupId,
-               cgtm.user_id_ mainTeacherId
+               cgtm.user_id_ mainTeacherId,
+               mg.cooperation_organ_id_ cooperationOrganId
         FROM student_registration sr
              LEFT JOIN music_group mg ON sr.music_group_id_=mg.id_
              LEFT JOIN class_group_student_mapper cgsm ON cgsm.group_type_='MUSIC' AND cgsm.music_group_id_=sr.music_group_id_ AND cgsm.user_id_=sr.user_id_

+ 39 - 0
mec-student/src/main/java/com/ym/mec/student/controller/QuestionnaireUserResultController.java

@@ -0,0 +1,39 @@
+package com.ym.mec.student.controller;
+
+import com.ym.mec.biz.dal.entity.QuestionnaireUserResult;
+import com.ym.mec.biz.service.QuestionnaireUserResultService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.page.QueryInfo;
+import com.yonge.log.model.AuditLogAnnotation;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RequestMapping("questionnaireUserResult")
+@Api(tags = "问题答案")
+@RestController
+public class QuestionnaireUserResultController extends BaseController {
+
+    @Autowired
+    private QuestionnaireUserResultService questionnaireUserResultService;
+
+    @ApiOperation(value = "新增")
+    @PostMapping("/add")
+    @PreAuthorize("@pcs.hasPermissions('questionnaireUserResult/add')")
+    @AuditLogAnnotation(operateName = "新增")
+    public Object add(@RequestBody List<QuestionnaireUserResult> questionnaireUserResultList) {
+        questionnaireUserResultService.batchInsert(questionnaireUserResultList);
+        return succeed();
+    }
+
+    @ApiOperation(value = "分页查询")
+    @GetMapping("/queryPage")
+    @PreAuthorize("@pcs.hasPermissions('questionnaireTopic/queryPage')")
+    public Object queryPage(QueryInfo queryInfo) {
+        return succeed(questionnaireUserResultService.queryPage(queryInfo));
+    }
+}

+ 72 - 0
mec-web/src/main/java/com/ym/mec/web/controller/QuestionnaireTopicController.java

@@ -0,0 +1,72 @@
+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.entity.QuestionnaireTopic;
+import com.ym.mec.biz.dal.page.QuestionnaireTopicQueryInfo;
+import com.ym.mec.biz.service.QuestionnaireTopicService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.QueryInfo;
+import com.yonge.log.model.AuditLogAnnotation;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+
+@RequestMapping("questionnaireTopic")
+@Api(tags = "问题分类")
+@RestController
+public class QuestionnaireTopicController extends BaseController {
+
+    @Autowired
+    private QuestionnaireTopicService questionnaireTopicService;
+
+    @ApiOperation(value = "新增")
+    @PostMapping("/add")
+    @PreAuthorize("@pcs.hasPermissions('questionnaireTopic/add')")
+    @AuditLogAnnotation(operateName = "新增")
+    public Object add(@RequestBody QuestionnaireTopic questionnaireTopic) {
+        questionnaireTopicService.add(questionnaireTopic);
+        return succeed();
+    }
+
+    @ApiOperation(value = "获取详情")
+    @GetMapping("/getDetail")
+    @PreAuthorize("@pcs.hasPermissions('questionnaireTopic/getDetail')")
+    @AuditLogAnnotation(operateName = "新增")
+    public Object getDetail(Integer id) {
+        return succeed(questionnaireTopicService.getDetail(id));
+    }
+
+    @ApiOperation(value = "修改")
+    @PostMapping("/update")
+    @PreAuthorize("@pcs.hasPermissions('questionnaireTopic/update')")
+    @AuditLogAnnotation(operateName = "修改")
+    public Object update(@RequestBody QuestionnaireTopic questionnaireTopic) {
+        questionnaireTopicService.modify(questionnaireTopic);
+        return succeed();
+    }
+
+    @ApiOperation(value = "启用/停用")
+    @PostMapping("/updateStatus")
+    @PreAuthorize("@pcs.hasPermissions('questionnaireTopic/updateStatus')")
+    @AuditLogAnnotation(operateName = "启用/停用")
+    public Object updateStatus(Integer topicId,Integer status) {
+        QuestionnaireTopic questionnaireTopic = questionnaireTopicService.get(topicId);
+        questionnaireTopic.setStatus(status);
+        questionnaireTopicService.update(questionnaireTopic);
+        return succeed();
+    }
+
+    @ApiOperation(value = "分页查询")
+    @GetMapping("/queryPage")
+    @PreAuthorize("@pcs.hasPermissions('questionnaireTopic/queryPage')")
+    public Object queryPage(QuestionnaireTopicQueryInfo queryInfo) {
+        return succeed(questionnaireTopicService.queryPage(queryInfo));
+    }
+}