Forráskód Böngészése

学生服务指标导出

liweifan 3 éve
szülő
commit
8b8682422c

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

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.dto.StudentExercisesSituationDto;
+import com.ym.mec.biz.dal.dto.StudentServeDto;
 import com.ym.mec.biz.dal.dto.TeacherExercisesServiceDto;
 import com.ym.mec.biz.dal.dto.TeacherServeDto;
 import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
@@ -150,8 +151,16 @@ public interface StudentExtracurricularExercisesSituationDao extends BaseDAO<Lon
                                                                          @Param("courseId") Long courseId);
 
     List<TeacherServeDto> queryTeacherServeInfo(Map<String, Object> params);
+
     int countTeacherServeInfo(Map<String, Object> params);
 
+    /**
+     * 查询学生指标
+     * @param params
+     * @return
+     */
+    List<StudentServeDto> queryStudentServeInfo(Map<String, Object> params);
+
     List<StudentExtracurricularExercisesSituation> findTeacherServeWithDate(@Param("monday") String monday,
                                                                             @Param("sunday") String sunday,
                                                                             @Param("teacherIds") List<Integer> teacherIds,
@@ -190,4 +199,7 @@ public interface StudentExtracurricularExercisesSituationDao extends BaseDAO<Lon
                                                                    @Param("serveType") String serveType,
                                                                    @Param("month") Date month,
                                                                    @Param("userId") Integer userId);
+
+
+
 }

+ 86 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentServeDto.java

@@ -4,6 +4,8 @@ import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.TeachModeEnum;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.Date;
 
 /**
@@ -18,6 +20,22 @@ public class StudentServeDto extends Student {
 
     private Date courseStartTime;
 
+    private String musicGroupName;
+
+    private String servePeriod;
+
+    private String serveNum;
+
+    private Integer actualExercisesNum;
+
+    private Integer exercisesReplyNum;
+
+    private Integer exercisesMessageNum;
+
+    private BigDecimal signRate;
+
+    private BigDecimal passRate;
+
     public GroupType getGroupType() {
         return groupType;
     }
@@ -41,4 +59,72 @@ public class StudentServeDto extends Student {
     public void setCourseStartTime(Date courseStartTime) {
         this.courseStartTime = courseStartTime;
     }
+
+    public String getMusicGroupName() {
+        return musicGroupName;
+    }
+
+    public void setMusicGroupName(String musicGroupName) {
+        this.musicGroupName = musicGroupName;
+    }
+
+    public String getServePeriod() {
+        return servePeriod;
+    }
+
+    public void setServePeriod(String servePeriod) {
+        this.servePeriod = servePeriod;
+    }
+
+    public String getServeNum() {
+        return serveNum;
+    }
+
+    public void setServeNum(String serveNum) {
+        this.serveNum = serveNum;
+    }
+
+    public Integer getActualExercisesNum() {
+        return actualExercisesNum;
+    }
+
+    public void setActualExercisesNum(Integer actualExercisesNum) {
+        this.actualExercisesNum = actualExercisesNum;
+    }
+
+    public Integer getExercisesReplyNum() {
+        return exercisesReplyNum;
+    }
+
+    public void setExercisesReplyNum(Integer exercisesReplyNum) {
+        this.exercisesReplyNum = exercisesReplyNum;
+    }
+
+    public Integer getExercisesMessageNum() {
+        return exercisesMessageNum;
+    }
+
+    public void setExercisesMessageNum(Integer exercisesMessageNum) {
+        this.exercisesMessageNum = exercisesMessageNum;
+    }
+
+    public BigDecimal getSignRate() {
+        return signRate;
+    }
+
+    public void setSignRate(BigDecimal signRate) {
+        if (null != signRate) {
+            this.signRate = signRate.setScale(2, RoundingMode.HALF_UP);
+        }
+    }
+
+    public BigDecimal getPassRate() {
+        return passRate;
+    }
+
+    public void setPassRate(BigDecimal passRate) {
+        if (null != passRate) {
+            this.passRate = passRate.setScale(2, RoundingMode.HALF_UP);
+        }
+    }
 }

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

@@ -75,6 +75,7 @@ public enum ExportEnum implements BaseEnum<String, ExportEnum> {
     VIP_STUDENT_COURSE_MANAGE("VIP_STUDENT_COURSE_MANAGE", "vip学员课程管理"),
     EXERCISES_SITUATION("EXERCISES_SITUATION", "服务指标导出"),
     EXPORT_STUDENT_SUBCOURSE("EXPORT_STUDENT_SUBCOURSE", "活动资格导出"),
+    EXPORT_STUDENT_SERVE_INFO("EXPORT_STUDENT_SERVE_INFO", "乐团学生服务指标导出"),
     ;
 
     private String code;

+ 3 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportTypeEnum.java

@@ -14,7 +14,9 @@ public enum ExportTypeEnum implements BaseEnum<Integer, ExportTypeEnum> {
 	ORDER_LIST_SUM(8, "订单汇总"),
 	MUSIC_GROUP_COURSE_LIST(9, "乐团课表详情导出"),
 	MUSIC_GROUP_DATA_EXPORT(10, "乐团数据导出"),
-	EXPORT_STUDENT_SUBCOURSE(11, "活动资格导出");
+	EXPORT_STUDENT_SUBCOURSE(11, "活动资格导出"),
+	EXPORT_STUDENT_SERVE_INFO(12, "乐团学生指标导出");
+	;
 
 	private Integer code;
 

+ 25 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -350,9 +350,14 @@ public class ExportServiceImpl implements ExportService {
         exportManageFuncMap.put(ExportEnum.STUDENT_MUSIC_THEORY_COURSE_INFO, (info,headColumns) -> exportStudentMusicTheoryCourseInfo(info,headColumns));
         exportManageFuncMap.put(ExportEnum.VIP_STUDENT_COURSE_MANAGE, (info,headColumns) -> exportVipStudentCourseManage(info,headColumns));
         exportManageFuncMap.put(ExportEnum.EXPORT_STUDENT_SUBCOURSE, (info,headColumns) -> exportStudentSubCourse(info,headColumns));
+        exportManageFuncMap.put(ExportEnum.EXPORT_STUDENT_SERVE_INFO, (info,headColumns) -> exportStudentServeInfo(info,headColumns));
+
+
     }
 
 
+
+
     //导出对账单
     @Override
     public List exportBill(Map<String, Object> info){
@@ -1442,6 +1447,26 @@ public class ExportServiceImpl implements ExportService {
                 managerDownload.getName());
     }
 
+    private HttpResponseResult exportStudentServeInfo(Map<String, Object> info, List<String> headColumns) {
+        SysUser sysUser = sysUserService.getUser();
+        String organId = organizationService.getEmployeeOrgan(sysUser.getId(),getParam(info, "organId", String.class),sysUser.getIsSuperAdmin());
+        info.put("organIds",organId);
+
+        ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.EXPORT_STUDENT_SERVE_INFO,sysUser.getId());
+        Integer tenantId = TenantContextHolder.getTenantId();
+        info.put("tenantId",tenantId);
+        return this.asyncExport(() -> this.queryStudentServeInfo(info,managerDownload,headColumns,ExportEnum.EXPORT_STUDENT_SERVE_INFO),
+                managerDownload.getName());
+    }
+    @Autowired
+    private StudentExtracurricularExercisesSituationDao studentExtracurricularExercisesSituationDao;
+
+    private void queryStudentServeInfo(Map<String, Object> info, ManagerDownload managerDownload, List<String> headColumns, ExportEnum exportEnum) {
+        List<StudentServeDto> rows = studentExtracurricularExercisesSituationDao.queryStudentServeInfo(info);
+        exportManagerDownload(getHSSFWorkbook(rows,headColumns,exportEnum),managerDownload);
+    }
+
+
     private void queryStudentSubCourse(String organId, Integer tenantId, ManagerDownload managerDownload, List<String> headColumns, ExportEnum exportEnum) {
         List<ExportStudentSubCourse> rows = activityUserMapperService.exportStudentSubCourse(organId, tenantId);
         exportManagerDownload(getHSSFWorkbook(rows,headColumns,exportEnum),managerDownload);

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

@@ -556,6 +556,8 @@
 		<result column="exercises_message_timely_num_" property="exercisesMessageTimelyNum" />
 	</resultMap>
 
+
+
 	<sql id="queryTeacherServeInfoCondition">
 		<where>
 			sees.tenant_id_ = #{tenantId} 
@@ -805,4 +807,99 @@
 		WHERE sees.serve_type_ = #{serveType} AND cs.id_ != #{courseScheduleId} AND cs.music_group_id_ = #{musicGroupId}
 		AND sees.monday_ = #{month} AND sees.student_id_ = #{userId}
 	</select>
+
+	<resultMap id="StudentServeDto" type="com.ym.mec.biz.dal.dto.StudentServeDto">
+		<result column="student_id_" property="userId"/>
+		<result column="username_" property="username"/>
+		<result column="music_group_name_" property="musicGroupName"/>
+		<result column="organ_name_" property="organName"/>
+		<result column="serve_period_" property="servePeriod"/>
+		<result column="serve_num_" property="serveNum"/>
+		<result column="actual_exercises_num_" property="actualExercisesNum"/>
+		<result column="exercises_reply_num_" property="exercisesReplyNum"/>
+		<result column="exercises_message_num_" property="exercisesMessageNum"/>
+		<result column="sign_rate_" property="signRate"/>
+		<result column="pass_rate_" property="passRate"/>
+	</resultMap>
+
+	<!-- 还差出勤率和达标率 -->
+	<select id="queryStudentServeInfo" resultMap="TeacherServeDto">
+		select
+			sees.student_id_,
+			sees.username_,
+			sees.organ_name_,
+			sees.serve_num_,
+			sees.actual_exercises_num_,
+			sees.exercises_reply_num_,
+			sees.exercises_message_num_,
+		    a.sign_rate_,
+		    a.pass_rate_,
+			b.music_group_name_,
+		    concat(#{monday},'至', #{sunday}) as serve_period_
+		from (
+			select
+				sees.student_id_,
+				u.username_,
+				organ.name_ as organ_name_,
+			    count(sees.id_) as serve_num_,
+			    sum(sees.actual_exercises_num_) as actual_exercises_num_,
+				sum(sees.exercises_reply_num_) as exercises_reply_num_,
+				sum(sees.exercises_message_num_) as exercises_message_num_
+			from student_extracurricular_exercises_situation_ sees
+			left join sys_user u ON sees.student_id_ = u.id_
+			LEFT JOIN organization organ ON organ.id_=u.organ_id_ and organ.del_flag_ = 0
+			<where>
+				sees.tenant_id_ = #{tenantId}
+				<if test="monday != null and monday != ''">
+					AND DATE_FORMAT(sees.monday_, '%Y-%m-%d') &gt;= #{monday}
+				</if>
+				<if test="sunday != null and sunday != ''">
+					AND DATE_FORMAT(sees.sunday_, '%Y-%m-%d') &lt;= #{sunday}
+				</if>
+				<if test="organIds != null and organIds.size()>0">
+					AND u.organ_id_ IN
+					<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+						#{organId}
+					</foreach>
+				</if>
+			</where>
+			group by sees.student_id_
+		) sees
+		left join (
+			select
+				sees.student_id_,
+				ifnull(sum(if(sa.status_ = 'NORMAL',1,0))/count(sa.id_),0) as sign_rate_,
+				ifnull(sum(sa.qualified_flag_)/count(sa.id_),0)  as pass_rate_
+			from student_extracurricular_exercises_situation_ sees
+			left join sys_user u ON sees.student_id_ = u.id_
+			left join course_schedule cs on find_in_set(cs.id_,sees.course_ids_) and cs.del_flag_ = 0
+			left join music_group mg on cs.music_group_id_ = mg.id_
+			left join student_attendance sa on sees.student_id_ = sa.user_id_ and cs.id_ = sa.course_schedule_id_
+			<where>
+				sees.tenant_id_ = #{tenantId} and cs.id_ is not null
+				<if test="monday != null and monday != ''">
+					AND DATE_FORMAT(sees.monday_, '%Y-%m-%d') &gt;= #{monday}
+				</if>
+				<if test="sunday != null and sunday != ''">
+					AND DATE_FORMAT(sees.sunday_, '%Y-%m-%d') &lt;= #{sunday}
+				</if>
+				<if test="organIds != null and organIds.size()>0">
+					AND u.organ_id_ IN
+					<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+						#{organId}
+					</foreach>
+				</if>
+			</where>
+			group by sees.student_id_
+		) a on sees.student_id_ = a.student_id_
+		left join (
+			select
+			    user_id_,group_concat(distinct b.name_) as music_group_name_
+			from student_registration a
+			left join music_group b on a.music_group_id_ = b.id_
+			where payment_status_ = 1 and music_group_status_ = 'PROGRESS'
+		    group by a.user_id_
+		) b on sees.student_id_ = b.user_id_
+	</select>
+
 </mapper>

+ 14 - 1
mec-web/src/main/resources/columnMapper.ini

@@ -88,4 +88,17 @@ ID = id
 学员姓名 = username
 活动编号 = activityId
 活动名称 = activityName
-剩余排课资格 = subCourseNum
+剩余排课资格 = subCourseNum
+
+[乐团学生指标导出]
+编号 = userId
+姓名 = username
+乐团名称 = musicGroupName
+分部 = organName
+服务周期 = servePeriod
+服务指标总数 = serveNum
+已布置 = actualExercisesNum
+已提交数 = exercisesReplyNum
+点评数 = exercisesMessageNum
+出勤率 = signRate
+达标率 = passRate