فهرست منبع

Merge remote-tracking branch 'origin/music_detail' into music_detail

zouxuan 4 سال پیش
والد
کامیت
b576f252fc

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

@@ -10,6 +10,7 @@ import com.ym.mec.biz.dal.dto.ClassGroupTeachersDto;
 import com.ym.mec.biz.dal.dto.ConditionDto;
 import com.ym.mec.biz.dal.dto.CourseListDto;
 import com.ym.mec.biz.dal.dto.HighClassGroupDto;
+import com.ym.mec.biz.dal.dto.Mapper;
 import com.ym.mec.biz.dal.dto.MusicGroupClassGroupDto;
 import com.ym.mec.biz.dal.dto.MusicGroupCourseScheduleDto;
 import com.ym.mec.biz.dal.dto.StudentPayInfoDto;
@@ -836,4 +837,6 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
     List<Long> queryGroupClassGroupIds(Integer userId);
 
     int countCourseNum(@Param("classGroupId") Integer classGroupId, @Param("teachMode") String teachMode);
+    
+    List<Mapper> countTeacherByMusicGroupId(String musicGroupId);
 }

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentExtracurricularExercisesSituationDao.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.dao;
 import com.ym.mec.biz.dal.dto.StudentExercisesSituationDto;
 import com.ym.mec.biz.dal.dto.TeacherExercisesServiceDto;
 import com.ym.mec.biz.dal.dto.TeacherServeDto;
+import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation;
 import com.ym.mec.common.dal.BaseDAO;
@@ -135,4 +136,9 @@ public interface StudentExtracurricularExercisesSituationDao extends BaseDAO<Lon
                                                                             @Param("teacherIds") List<Integer> teacherIds,
                                                                             @Param("serveType") String serveType);
 
+    List<IndexBaseMonthData> getHomeworkData(@Param("startDay") String startDay,
+                                             @Param("endDay") String endDay,
+                                             @Param("type") String type,
+                                             @Param("studentIds") List<Integer> studentIds);
+
 }

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

@@ -632,4 +632,18 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
     List<StudentRegistration> queryMemberEndAutoQuitMusic(@Param("memberEndAutoQuitMusic") String memberEndAutoQuitMusic,
                                                           @Param("educationUserId") Integer educationUserId,
                                                           @Param("organIds") String organIds);
+    
+    /**
+     * 统计指定乐团在读的声部人数
+     * @param musicGroupId
+     * @return
+     */
+    List<Mapper> countStudentWithSubjectByMusicGroupId(String musicGroupId);
+
+    /**
+     * 统计各年级人数
+     * @param musicGroupId
+     * @return
+     */
+    List<Mapper> countStudentWithGradeByMusicGroupId(String musicGroupId);
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentServeService.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dto.IndexBaseDto;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.Date;
@@ -74,4 +75,13 @@ public interface StudentServeService {
      * 解除会员
      */
     void cleanStudentMember();
+
+    /**
+     * @describe 乐团作业情况
+     * @author Joburgess
+     * @date 2021/7/13 0013
+     * @param musicGroupId:
+     * @return void
+     */
+    List<IndexBaseDto> musicGroupHomeworkStat(String musicGroupId, String startDay, String endDay);
 }

+ 68 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java

@@ -50,6 +50,8 @@ public class StudentServeServiceImpl implements StudentServeService {
     private ClassGroupStudentMapperDao classGroupStudentMapperDao;
     @Autowired
     private MusicGroupDao musicGroupDao;
+    @Autowired
+    private StudentRegistrationDao studentRegistrationDao;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -1041,4 +1043,70 @@ public class StudentServeServiceImpl implements StudentServeService {
     public void cleanStudentMember() {
         studentDao.cleanStudentMember();
     }
+
+    @Override
+    public List<IndexBaseDto> musicGroupHomeworkStat(String musicGroupId, String startDayStr, String endDayStr) {
+        List<IndexBaseDto> result = new ArrayList<>();
+        List<StudentRegistration> musicGroupStu = studentRegistrationDao.getMusicGroupStu(musicGroupId);
+        List<Integer> studentIds = new ArrayList<>();
+        if(!CollectionUtils.isEmpty(musicGroupStu)){
+            studentIds = musicGroupStu.stream().map(StudentRegistration::getUserId).collect(Collectors.toList());
+        }
+
+        LocalDate startDate = LocalDate.parse(startDayStr, DateUtil.dateFormatter);
+        LocalDate endDate = LocalDate.parse(endDayStr, DateUtil.dateFormatter);
+        List<String> mondayDateStrs = new ArrayList<>();
+        while (startDate.compareTo(endDate)<0){
+            LocalDate monDayDate = startDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
+            mondayDateStrs.add(monDayDate.toString());
+            startDate = startDate.plusDays(7);
+        }
+
+        Map<IndexDataType, List<IndexBaseMonthData>> typeDateMap = new HashMap<>();
+
+        List<IndexBaseMonthData> d1 = new ArrayList<>();
+        List<IndexBaseMonthData> d2 = new ArrayList<>();
+        List<IndexBaseMonthData> d3 = new ArrayList<>();
+        if(StringUtils.isNotBlank(musicGroupId) && !CollectionUtils.isEmpty(studentIds)){
+            d1 = studentExtracurricularExercisesSituationDao.getHomeworkData(startDayStr, endDayStr, null, studentIds);
+            d2 = studentExtracurricularExercisesSituationDao.getHomeworkData(startDayStr, endDayStr, "submit", studentIds);
+            d3 = studentExtracurricularExercisesSituationDao.getHomeworkData(startDayStr, endDayStr, "comment", studentIds);
+        }
+        musicGroupHomeworkDataDeal(d1, mondayDateStrs, IndexDataType.HOMEWORK_CREATE_RATE);
+        typeDateMap.put(IndexDataType.HOMEWORK_CREATE_RATE, d1);
+
+        musicGroupHomeworkDataDeal(d2, mondayDateStrs, IndexDataType.HOMEWORK_SUBMIT_RATE);
+        typeDateMap.put(IndexDataType.HOMEWORK_SUBMIT_RATE, d2);
+
+        musicGroupHomeworkDataDeal(d3, mondayDateStrs, IndexDataType.HOMEWORK_COMMENT_RATE);
+        typeDateMap.put(IndexDataType.HOMEWORK_COMMENT_RATE, d3);
+
+        for (Map.Entry<IndexDataType, List<IndexBaseMonthData>> typeDateMapEntry : typeDateMap.entrySet()) {
+            IndexBaseDto indexBaseData = new IndexBaseDto(typeDateMapEntry.getKey(),typeDateMapEntry.getKey().getMsg());
+            indexBaseData.setIndexMonthData(typeDateMapEntry.getValue(), null);
+            result.add(indexBaseData);
+        }
+        return result;
+    }
+
+    private List<IndexBaseMonthData> musicGroupHomeworkDataDeal(List<IndexBaseMonthData> dataList, List<String> mondayDateStrs, IndexDataType dataType){
+        if(Objects.isNull(dataList)){
+            dataList = new ArrayList<>();
+        }
+        Set<String> hasMondayDates = dataList.stream().map(d -> DateUtil.dateToString(d.getMonth(), "yyyy-MM-dd")).collect(Collectors.toSet());
+
+        for (String mondayDate : mondayDateStrs) {
+            if(hasMondayDates.contains(mondayDate)){
+                continue;
+            }
+            IndexBaseMonthData indexBaseMonthData = new IndexBaseMonthData(DateUtil.stringToDate(mondayDate, "yyyy-MM-dd"), null);
+            indexBaseMonthData.setDataType(dataType);
+            indexBaseMonthData.setTotalNum(BigDecimal.ZERO);
+            indexBaseMonthData.setActivateNum(BigDecimal.ZERO);
+            indexBaseMonthData.setPercent(BigDecimal.ZERO);
+            indexBaseMonthData.setDataType(dataType);
+            dataList.add(indexBaseMonthData);
+        }
+        return dataList;
+    }
 }

+ 11 - 0
mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml

@@ -40,6 +40,11 @@
         <result column="status" property="musicGroupStatus" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
     </resultMap>
 
+    <resultMap id="Mapper" type="com.ym.mec.biz.dal.dto.Mapper">
+        <result column="key_" property="key"/>
+        <result column="value_" property="value"/>
+    </resultMap>
+
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.ClassGroup" useGeneratedKeys="true" keyColumn="id"
             keyProperty="id">
         INSERT INTO class_group
@@ -1521,4 +1526,10 @@
     <select id="countCourseNum" resultType="int">
         SELECT COUNT(id_) FROM course_schedule WHERE class_group_id_ = #{classGroupId} AND teach_mode_ = #{teachMode} AND pre_course_flag_ = 0
     </select>
+    
+    <select id="countTeacherByMusicGroupId" resultMap="Mapper">
+		select cg.name_ key_,GROUP_CONCAT(u.real_name_) value_ from class_group cg LEFT JOIN class_group_teacher_mapper cgtm on cg.id_ = cgtm.class_group_id_
+		LEFT JOIN sys_user u on u.id_ = cgtm.user_id_
+		where cg.del_flag_ = 0 and cg.group_type_ = 'MUSIC' and cg.music_group_id_ = #{musicGroupId}  group by cg.name_ 
+    </select>
 </mapper>

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

@@ -684,4 +684,36 @@
 			  </foreach>
 		  </if>
 	</select>
+
+	<select id="getHomeworkData" resultMap="com.ym.mec.biz.dal.dao.IndexBaseMonthDataDao.IndexBaseMonthData">
+		SELECT
+		sees.monday_ month_,
+		<choose>
+			<when test="type == 'submit'">
+				SUM(sees.actual_exercises_num_) total_num_,
+				SUM(sees.exercises_reply_num_) activate_num_,
+				TRUNCATE(SUM(sees.exercises_reply_num_)/SUM(sees.actual_exercises_num_)*100, 2) percent_
+			</when>
+			<when test="type == 'comment'">
+				SUM(sees.exercises_reply_num_) total_num_,
+				SUM(sees.exercises_message_num_) activate_num_,
+				TRUNCATE(SUM(sees.exercises_message_num_)/SUM(sees.exercises_reply_num_)*100, 2) percent_
+			</when>
+			<otherwise>
+				SUM(sees.expect_exercises_num_-sees.not_over_course_num_) total_num_,
+				SUM(sees.actual_exercises_num_) activate_num_,
+				TRUNCATE(SUM(sees.actual_exercises_num_)/SUM(sees.expect_exercises_num_-sees.not_over_course_num_)*100, 2) percent_
+			</otherwise>
+		</choose>
+		FROM student_extracurricular_exercises_situation_ sees
+		LEFT JOIN teacher tea ON sees.teacher_id_=tea.id_
+		WHERE tea.job_nature_='FULL_TIME'
+		AND DATE_FORMAT(sees.monday_, '%Y-%m-%d')&gt;=#{startDay}
+		AND DATE_FORMAT(sees.sunday_, '%Y-%m-%d')&lt;=#{endDay}
+		AND sees.student_id_ IN
+		<foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+			#{studentId}
+		</foreach>
+		GROUP BY sees.monday_
+	</select>
 </mapper>

+ 17 - 0
mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml

@@ -99,6 +99,11 @@
         <result column="group_name_" property="groupName"/>
     </resultMap>
 
+    <resultMap id="Mapper" type="com.ym.mec.biz.dal.dto.Mapper">
+        <result column="key_" property="key"/>
+        <result column="value_" property="value"/>
+    </resultMap>
+
     <!-- 根据主键查询一条记录 -->
     <select id="get" resultMap="StudentRegistration">
         SELECT *
@@ -1551,4 +1556,16 @@
             AND (MAX(cto.id_) IS NULL OR DATEDIFF(MAX(cto.end_time_),NOW()) &lt; 0)
         </if>
     </select>
+    
+    <select id="countStudentWithSubjectByMusicGroupId" resultMap="Mapper">
+        select s.name_ key_,count(sr.id_) value_ from student_registration sr LEFT JOIN subject s on sr.actual_subject_id_ = s.id_ 
+		where sr.music_group_status_ = 'NORMAL' and sr.music_group_id_ = #{musicGroupId} 
+		group by sr.actual_subject_id_
+    </select>
+    
+    <select id="countStudentWithGradeByMusicGroupId" resultMap="Mapper">
+        select s.current_grade_num_ key_,count(sr.id_) value_ from student_registration sr LEFT JOIN student s on sr.user_id_= s.user_id_
+		where sr.music_group_status_ = 'NORMAL' and sr.music_group_id_ = #{musicGroupId} 
+		group by s.current_grade_num_
+    </select>
 </mapper>

+ 23 - 0
mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupRecordController.java

@@ -5,10 +5,13 @@ import io.swagger.annotations.ApiOperation;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import com.ym.mec.biz.dal.dao.ClassGroupDao;
+import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
 import com.ym.mec.biz.dal.dto.MusicGroupBasicDto;
 import com.ym.mec.biz.service.CooperationOrganLinkmanService;
 import com.ym.mec.biz.service.MusicGroupService;
@@ -24,6 +27,12 @@ public class MusicGroupRecordController extends BaseController {
 	
 	@Autowired
 	private MusicGroupService musicGroupService;
+	
+	@Autowired
+	private StudentRegistrationDao studentRegistrationDao;
+	
+	@Autowired
+	private ClassGroupDao classGroupDao;
 
 	@ApiOperation(value = "查询基本信息")
 	@GetMapping("/queryBasicInfo")
@@ -39,4 +48,18 @@ public class MusicGroupRecordController extends BaseController {
 		
 		return succeed(musicGroupBasicDto);
 	}
+
+	@ApiOperation(value = "查询学员、师资")
+	@GetMapping("/queryStudentAndTeacher")
+	@PreAuthorize("@pcs.hasPermissions('musicGroupRecord/queryStudentAndTeacher')")
+	public Object queryStudentAndTeacher(String musicGroupId) {
+		
+		ModelMap model = new ModelMap();
+
+		model.put("subject", studentRegistrationDao.countStudentWithSubjectByMusicGroupId(musicGroupId));
+		model.put("grade", studentRegistrationDao.countStudentWithGradeByMusicGroupId(musicGroupId));
+		model.put("teacher", classGroupDao.countTeacherByMusicGroupId(musicGroupId));
+		
+		return succeed(model);
+	}
 }

+ 11 - 0
mec-web/src/main/java/com/ym/mec/web/controller/StudentExtracurricularExercisesSituationController.java

@@ -166,4 +166,15 @@ public class StudentExtracurricularExercisesSituationController extends BaseCont
         return succeed(studentExtracurricularExercisesSituationService.queryTeacherServeExtraDetail(queryInfo));
     }
 
+    @ApiOperation(value = "乐团作业情况")
+    @GetMapping("/musicGroupHomeworkStat")
+    @PreAuthorize("@pcs.hasPermissions('exercisesSituation/musicGroupHomeworkStat')")
+    public HttpResponseResult musicGroupHomeworkStat(String musicGroupId, String startDay, String endDay) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        return succeed(studentServeService.musicGroupHomeworkStat(musicGroupId, startDay, endDay));
+    }
+
 }