zouxuan 3 سال پیش
والد
کامیت
b910c0758f

+ 2 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentExtracurricularExercisesSituationDao.java

@@ -1,9 +1,6 @@
 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.dto.*;
 import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation;
@@ -159,7 +156,7 @@ public interface StudentExtracurricularExercisesSituationDao extends BaseDAO<Lon
      * @param params
      * @return
      */
-    List<StudentServeDto> queryStudentServeInfo(@Param("params") Map<String, Object> params);
+    List<StudentServeExportDto> queryStudentServeInfo(@Param("monday") String monday, @Param("sunday") String sunday, @Param("organId") String organId);
 
     List<StudentExtracurricularExercisesSituation> findTeacherServeWithDate(@Param("monday") String monday,
                                                                             @Param("sunday") String sunday,

+ 252 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentServeExportDto.java

@@ -0,0 +1,252 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.util.Objects;
+
+public class StudentServeExportDto{
+    @ApiModelProperty(value = "学生编号", required = false)
+    private Integer studentId;
+
+    @ApiModelProperty(value = "姓名", required = false)
+    private String username;
+
+    @ApiModelProperty(value = "乐团名称", required = false)
+    private String musicGroupName;
+
+    @ApiModelProperty(value = "分部", required = false)
+    private String organName;
+
+    @ApiModelProperty(value = "服务周期开始", required = false)
+    private String monday;
+
+    @ApiModelProperty(value = "服务周期", required = false)
+    private String sunday;
+
+    @ApiModelProperty(value = "服务指标总数", required = false)
+    private Integer serveTotalNum;
+
+    @ApiModelProperty(value = "已布置", required = false)
+    private Integer actualExercisesNum;
+
+    @ApiModelProperty(value = "已提交数", required = false)
+    private Integer exercisesReplyNum;
+
+    @ApiModelProperty(value = "点评数", required = false)
+    private Integer exercisesMessageNum;
+
+    @ApiModelProperty(value = "签到次数", required = false)
+    private Integer signNum;
+
+    @ApiModelProperty(value = "课程总数", required = false)
+    private Integer courseNum;
+
+    @ApiModelProperty(value = "达标次数", required = false)
+    private Integer qualifiedNum;
+
+    @ApiModelProperty(value = "出勤率", required = false)
+    private BigDecimal signRate;
+
+    @ApiModelProperty(value = "达标率", required = false)
+    private BigDecimal passRate;
+
+    @ApiModelProperty(value = "单技课数量", required = false)
+    private Integer singleNum;
+
+    @ApiModelProperty(value = "合奏课数量", required = false)
+    private Integer mixNum;
+
+    @ApiModelProperty(value = "缺勤次数", required = false)
+    private Integer notSignNum;
+
+    @ApiModelProperty(value = "缺勤日期", required = false)
+    private String notSignDate;
+
+    @ApiModelProperty(value = "未提交作业的服务周期", required = false)
+    private String notHomeworkDate;
+
+    public Integer getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Integer studentId) {
+        this.studentId = studentId;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getMusicGroupName() {
+        return musicGroupName;
+    }
+
+    public void setMusicGroupName(String musicGroupName) {
+        this.musicGroupName = musicGroupName;
+    }
+
+    public String getOrganName() {
+        return organName;
+    }
+
+    public void setOrganName(String organName) {
+        this.organName = organName;
+    }
+
+    public String getMonday() {
+        return monday;
+    }
+
+    public void setMonday(String monday) {
+        this.monday = monday;
+    }
+
+    public String getSunday() {
+        return sunday;
+    }
+
+    public void setSunday(String sunday) {
+        this.sunday = sunday;
+    }
+
+    public Integer getServeTotalNum() {
+        return serveTotalNum;
+    }
+
+    public void setServeTotalNum(Integer serveTotalNum) {
+        this.serveTotalNum = serveTotalNum;
+    }
+
+    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 Integer getSignNum() {
+        return signNum;
+    }
+
+    public void setSignNum(Integer signNum) {
+        this.signNum = signNum;
+        this.calcSignRate(courseNum);
+    }
+
+    public Integer getCourseNum() {
+        return courseNum;
+    }
+
+    public void setCourseNum(Integer courseNum) {
+        this.courseNum = courseNum;
+        this.calcSignRate(signNum);
+        this.calcPassRate(qualifiedNum);
+    }
+
+    public Integer getQualifiedNum() {
+        return qualifiedNum;
+    }
+
+    public void setQualifiedNum(Integer qualifiedNum) {
+        this.qualifiedNum = qualifiedNum;
+        this.calcPassRate(courseNum);
+    }
+
+    public BigDecimal getSignRate() {
+        return signRate;
+    }
+
+    public void setSignRate(BigDecimal signRate) {
+        this.signRate = signRate;
+    }
+
+    public BigDecimal getPassRate() {
+        return passRate;
+    }
+
+    public void setPassRate(BigDecimal passRate) {
+        this.passRate = passRate;
+    }
+
+    public Integer getSingleNum() {
+        return singleNum;
+    }
+
+    public void setSingleNum(Integer singleNum) {
+        this.singleNum = singleNum;
+    }
+
+    public Integer getMixNum() {
+        return mixNum;
+    }
+
+    public void setMixNum(Integer mixNum) {
+        this.mixNum = mixNum;
+    }
+
+    public Integer getNotSignNum() {
+        return notSignNum;
+    }
+
+    public void setNotSignNum(Integer notSignNum) {
+        this.notSignNum = notSignNum;
+    }
+
+    public String getNotSignDate() {
+        return notSignDate;
+    }
+
+    public void setNotSignDate(String notSignDate) {
+        this.notSignDate = notSignDate;
+    }
+
+    public String getNotHomeworkDate() {
+        return notHomeworkDate;
+    }
+
+    public void setNotHomeworkDate(String notHomeworkDate) {
+        this.notHomeworkDate = notHomeworkDate;
+    }
+
+    private void calcSignRate(Integer param){
+        if(Objects.nonNull(param)){
+            if(signNum.equals(0) || courseNum.equals(0)){
+                this.signRate = BigDecimal.ZERO;
+            }else {
+                this.signRate = new BigDecimal(signNum).divide(new BigDecimal(courseNum),BigDecimal.ROUND_HALF_UP,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).setScale(BigDecimal.ROUND_CEILING);
+            }
+        }
+    }
+
+    private void calcPassRate(Integer param){
+        if(Objects.nonNull(param)){
+            if(qualifiedNum.equals(0) || courseNum.equals(0)){
+                this.passRate = BigDecimal.ZERO;
+            }else {
+                this.passRate = new BigDecimal(qualifiedNum).divide(new BigDecimal(courseNum),BigDecimal.ROUND_HALF_UP,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).setScale(BigDecimal.ROUND_CEILING);
+            }
+        }
+    }
+}

+ 15 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/InspectionItemPlanConclusion.java

@@ -39,8 +39,11 @@ public class InspectionItemPlanConclusion extends BaseEntity {
     /**
      * 老师是否佩戴工牌
      */
-    @ApiModelProperty(value = "检查结果")
-    private Integer checkConclusion;
+    @ApiModelProperty(value = "检查结果(0未完成,1完成)")
+    private String checkConclusion;
+
+    @ApiModelProperty(value = "题目类型(radio,textarea)")
+    private String questionType = "radio";
 
     /**
      * 创建时间
@@ -57,6 +60,14 @@ public class InspectionItemPlanConclusion extends BaseEntity {
     @ApiModelProperty(value = "班级信息")
     private String classInfo;
 
+    public String getQuestionType() {
+        return questionType;
+    }
+
+    public void setQuestionType(String questionType) {
+        this.questionType = questionType;
+    }
+
     public Long getId() {
         return id;
     }
@@ -97,11 +108,11 @@ public class InspectionItemPlanConclusion extends BaseEntity {
         this.checkItem = checkItem;
     }
 
-    public Integer getCheckConclusion() {
+    public String getCheckConclusion() {
         return checkConclusion;
     }
 
-    public void setCheckConclusion(Integer checkConclusion) {
+    public void setCheckConclusion(String checkConclusion) {
         this.checkConclusion = checkConclusion;
     }
 

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

@@ -15,8 +15,7 @@ public enum ExportTypeEnum implements BaseEnum<Integer, ExportTypeEnum> {
 	MUSIC_GROUP_COURSE_LIST(9, "乐团课表详情导出"),
 	MUSIC_GROUP_DATA_EXPORT(10, "乐团数据导出"),
 	EXPORT_STUDENT_SUBCOURSE(11, "活动资格导出"),
-	EXPORT_STUDENT_SERVE_INFO(12, "乐团学生服务指标导出"),
-	EXPORT_TRAINING_STATISTICS(13, "训练统计导出");
+	EXPORT_TRAINING_STATISTICS(12, "训练统计导出");
 	;
 
 	private Integer code;

+ 8 - 27
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -38,20 +38,17 @@ import org.springframework.util.CollectionUtils;
 import javax.annotation.PostConstruct;
 import javax.servlet.http.HttpServletResponse;
 import java.io.*;
-import java.lang.reflect.InvocationTargetException;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.function.BiConsumer;
-import java.util.function.BiFunction;
 import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
 import static com.ym.mec.biz.dal.enums.OrderTypeEnum.OUTORDER;
-import static com.ym.mec.biz.dal.enums.OrderTypeEnum.SPORADIC;
 import static com.ym.mec.common.controller.BaseController.succeed;
 
 @Service
@@ -348,6 +345,7 @@ public class ExportServiceImpl implements ExportService {
         exportFuncMap.put(ExportEnum.STUDENT_INSTRUMENT, info -> exportStudentInstrument(info));
         exportFuncMap.put(ExportEnum.EXPORT_BILL, info -> exportBill(info));
         exportFuncMap.put(ExportEnum.EXPORT_OPERATING_VISIT_STATISTICS, info -> exportOperatorVisit(info));
+        exportFuncMap.put(ExportEnum.EXPORT_STUDENT_SERVE_INFO, (info) -> exportStudentServeInfo(info));
 
 
         //导出到报表中心
@@ -363,10 +361,15 @@ public class ExportServiceImpl implements ExportService {
         exportManageFuncMap.put(ExportEnum.STUDENT_MUSIC_THEORY_COURSE_INFO, (info) -> exportStudentMusicTheoryCourseInfo(info));
         exportManageFuncMap.put(ExportEnum.VIP_STUDENT_COURSE_MANAGE, (info) -> exportVipStudentCourseManage(info));
         exportManageFuncMap.put(ExportEnum.EXPORT_STUDENT_SUBCOURSE, (info) -> exportStudentSubCourse(info));
-        exportManageFuncMap.put(ExportEnum.EXPORT_STUDENT_SERVE_INFO, (info) -> exportStudentServeInfo(info));
         exportManageFuncMap.put(ExportEnum.EXPORT_TRAINING_STATISTICS, (info) -> exportCompareRecord(info));
+    }
 
-
+    private List<StudentServeExportDto> exportStudentServeInfo(Map<String, Object> info) {
+        String monday = getParam(info, "monday", String.class);
+        String sunday = getParam(info, "sunday", String.class);
+        SysUser sysUser = sysUserService.getUser();
+        String organId = organizationService.getEmployeeOrgan(sysUser.getId(), getParam(info, "organId", String.class), sysUser.getIsSuperAdmin());
+        return studentExtracurricularExercisesSituationDao.queryStudentServeInfo(monday,sunday,organId);
     }
 
 
@@ -1505,28 +1508,6 @@ public class ExportServiceImpl implements ExportService {
                 managerDownload.getName());
     }
 
-
-    private HttpResponseResult exportStudentServeInfo(Map<String, Object> info) {
-        SysUser sysUser = sysUserService.getUser();
-
-        String organId = organizationService.getEmployeeOrgan(sysUser.getId(), getParam(info, "organId", String.class), sysUser.getIsSuperAdmin());
-        info.put("organIds", organId);
-
-        Integer tenantId = TenantContextHolder.getTenantId();
-        info.put("tenantId", tenantId);
-
-        List<StudentServeDto> rows = studentExtracurricularExercisesSituationDao.queryStudentServeInfo(info);
-        if (CollectionUtils.isEmpty(rows)) {
-            return BaseController.failed("没有可导出的数据");
-        }
-        if (rows.size() > 50000) {
-            return BaseController.failed("数据集太大,不能导出.最大数据集不能超过50000");
-        }
-        ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.EXPORT_STUDENT_SERVE_INFO, sysUser.getId());
-        return this.asyncExport(() -> this.initExportInfo(rows, managerDownload, ExportEnum.EXPORT_STUDENT_SERVE_INFO),
-                managerDownload.getName());
-    }
-
     @Autowired
     private StudentExtracurricularExercisesSituationDao studentExtracurricularExercisesSituationDao;
 

+ 9 - 5
mec-biz/src/main/resources/config/mybatis/InspectionItemPlanConclusionMapper.xml

@@ -14,10 +14,11 @@
         <result column="update_time_" property="updateTime"/>
         <result column="classInfo" property="classInfo"/>
 		<result column="tenant_id_" property="tenantId" />
+		<result column="question_type_" property="questionType" />
     </resultMap>
     <sql id="Base_Column_List">
         <!--@mbg.generated-->
-        id_, plan_id_,course_schedule_id_, teacher_id_, check_item_, check_conclusion_, create_time_, update_time_, tenant_id_
+        id_, plan_id_,course_schedule_id_, teacher_id_, check_item_, check_conclusion_, create_time_, update_time_, tenant_id_,question_type_
     </sql>
     <select id="get" resultMap="InspectionItemPlanConclusion">
         <!--@mbg.generated-->
@@ -35,14 +36,17 @@
             parameterType="com.ym.mec.biz.dal.entity.InspectionItemPlanConclusion" useGeneratedKeys="true">
         <!--@mbg.generated-->
         insert into inspection_item_plan_conclusion (plan_id_,course_schedule_id_, teacher_id_,check_item_,
-        check_conclusion_, create_time_,update_time_,tenant_id_)
+        check_conclusion_, create_time_,update_time_,tenant_id_,question_type_)
         values (#{planId}, #{courseScheduleId},#{teacherId}, #{checkItem}, #{checkConclusion},#{createTime},
-        #{updateTime},#{tenantId})
+        #{updateTime},#{tenantId},#{questionType})
     </insert>
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.InspectionItemPlanConclusion">
         <!--@mbg.generated-->
         update inspection_item_plan_conclusion
         <set>
+            <if test="questionType != null">
+                question_type_ = #{questionType},
+            </if>
             <if test="planId != null">
                 plan_id_ = #{planId},
             </if>
@@ -77,14 +81,14 @@
             parameterType="com.ym.mec.biz.dal.entity.InspectionItemPlanConclusion"
             useGeneratedKeys="true">
         INSERT INTO inspection_item_plan_conclusion (plan_id_,course_schedule_id_, teacher_id_, check_item_,
-        check_conclusion_,create_time_,update_time_,tenant_id_)
+        check_conclusion_,create_time_,update_time_,tenant_id_,question_type_)
         VALUE
         <foreach collection="inspectionItemPlanConclusions" item="inspectionItemPlanConclusion" separator=",">
             (#{inspectionItemPlanConclusion.planId},#{inspectionItemPlanConclusion.courseScheduleId},
             #{inspectionItemPlanConclusion.teacherId},
             #{inspectionItemPlanConclusion.checkItem},
             #{inspectionItemPlanConclusion.checkConclusion}, #{inspectionItemPlanConclusion.createTime},
-            #{inspectionItemPlanConclusion.updateTime},#{inspectionItemPlanConclusion.tenantId})
+            #{inspectionItemPlanConclusion.updateTime},#{inspectionItemPlanConclusion.tenantId},#{questionType})
         </foreach>
     </insert>
 

+ 48 - 98
mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml

@@ -900,106 +900,56 @@
           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 id="StudentServeExportDto" type="com.ym.mec.biz.dal.dto.StudentServeExportDto">
+        <result column="student_id_" property="studentId" jdbcType="INTEGER"/>
+        <result column="user_name_" property="username" jdbcType="VARCHAR"/>
+        <result column="music_group_name_" property="musicGroupName" jdbcType="VARCHAR"/>
+        <result column="serve_total_num_" property="serveTotalNum" jdbcType="INTEGER"/>
+        <result column="sign_num_" property="signNum" jdbcType="INTEGER"/>
+        <result column="course_num_" property="courseNum" jdbcType="INTEGER"/>
+        <result column="qualified_num_" property="qualifiedNum" jdbcType="INTEGER"/>
+        <result column="single_num_" property="singleNum" jdbcType="INTEGER"/>
+        <result column="mix_num_" property="mixNum" jdbcType="INTEGER"/>
+        <result column="not_sign_num_" property="notSignNum" jdbcType="INTEGER"/>
+        <result column="not_sign_date_" property="notSignDate" jdbcType="VARCHAR"/>
+        <result column="not_homework_date_" property="notHomeworkDate" jdbcType="VARCHAR"/>
+        <result column="monday_" property="monday"/>
+        <result column="sunday_" property="sunday"/>
+        <result column="actual_exercises_num_" property="actualExercisesNum" jdbcType="INTEGER"/>
+        <result column="exercises_reply_num_" property="exercisesReplyNum" jdbcType="INTEGER"/>
+        <result column="exercises_message_num_" property="exercisesMessageNum" jdbcType="INTEGER"/>
     </resultMap>
 
     <!-- 还差出勤率和达标率 -->
-    <select id="queryStudentServeInfo" resultMap="StudentServeDto">
-        select
-            t.student_id_,
-            t.music_group_name_,
-            concat(#{params.startTime},'至', #{params.endTime}) as serve_period_,
-            t.username_,
-            t.organ_name_,
-            ifnull(sees.serve_num_,0) as serve_num_,
-            ifnull(sees.actual_exercises_num_,0) as actual_exercises_num_,
-            ifnull(sees.exercises_reply_num_,0) as exercises_reply_num_,
-            ifnull(sees.exercises_message_num_,0) as exercises_message_num_,
-            round(ifnull(a.sign_rate_,0) * 100,2) as sign_rate_,
-            round(ifnull(a.pass_rate_,0) * 100,2) as pass_rate_
-        from (
-            select
-                a.user_id_ as student_id_,
-                group_concat(distinct b.name_) as music_group_name_,
-                u.username_,
-                organ.name_ as organ_name_
-            from student_registration a
-            left join music_group b on a.music_group_id_ = b.id_
-            left join sys_user u ON a.user_id_ = u.id_
-            LEFT JOIN organization organ ON organ.id_=u.organ_id_ and organ.del_flag_ = 0
-            where payment_status_ = 2 and b.status_ = 'PROGRESS'
-            <if test="params.tenantId != null and params.tenantId > 0">
-                AND a.tenant_id_ = #{params.tenantId}
-            </if>
-            <if test="params.organId != null and params.organId != ''">
-                AND FIND_IN_SET(u.organ_id_,#{params.organId})
-            </if>
-            group by a.user_id_
-        ) t
-        left join
-        (
-            select
-                sees.student_id_,
-                sum(sees.expect_exercises_num_) 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_
-            <where>
-                <if test="params.tenantId != null and params.tenantId > 0">
-                    AND sees.tenant_id_ = #{params.tenantId}
-                </if>
-                <if test="params.startTime != null and params.startTime != ''">
-                    AND DATE_FORMAT(sees.monday_, '%Y-%m-%d') &gt;= #{params.startTime}
-                </if>
-                <if test="params.endTime != null and params.endTime != ''">
-                    AND DATE_FORMAT(sees.sunday_, '%Y-%m-%d') &lt;= #{params.endTime}
-                </if>
-                <if test="params.organId != null and params.organId != ''">
-                    AND FIND_IN_SET(u.organ_id_,#{params.organId})
-                </if>
-            </where>
-            group by sees.student_id_
-        ) sees on t.student_id_ = sees.student_id_
-        left join (
-            select
-                cssp.user_id_,
-                ifnull(sum(if(sa.status_ in ('NORMAL','LATE'),1,0))/count(cs.id_),0) as sign_rate_,
-                ifnull(sum(sa.qualified_flag_)/count(cs.id_),0) as pass_rate_
-            from course_schedule cs
-            left join course_schedule_student_payment cssp on cs.id_ = cssp.course_schedule_id_
-            left join sys_user u ON cssp.user_id_ = u.id_
-            left join student_attendance sa on cssp.user_id_ = sa.user_id_ and cs.id_ = sa.course_schedule_id_
-            <where>
-                cs.del_flag_ = 0 and cs.is_lock_ = 0 AND cs.pre_course_flag_ = 0 AND cs.organ_id_ IS NOT NULL and cs.id_ is not null
-                and cs.group_type_ = 'MUSIC'
-                and (cs.new_course_id_ is null or cs.id_ = cs.new_course_id_)
-                <if test="params.tenantId != null and params.tenantId > 0">
-                    AND cs.tenant_id_ = #{params.tenantId}
-                </if>
-                <if test="params.startTime != null and params.startTime != ''">
-                    AND DATE_FORMAT(cs.class_date_, '%Y-%m-%d') &gt;= #{params.startTime}
-                </if>
-                <if test="params.endTime != null and params.endTime != ''">
-                    AND DATE_FORMAT(cs.class_date_, '%Y-%m-%d') &lt;= #{params.endTime}
-                </if>
-                <if test="params.organId != null and params.organId != ''">
-                    AND FIND_IN_SET(u.organ_id_,#{params.organId})
-                </if>
-            </where>
-            group by cssp.user_id_
-        ) a on sees.student_id_ = a.user_id_
+    <select id="queryStudentServeInfo" resultMap="StudentServeExportDto">
+        select sees.student_id_,cs.user_name_,cs.music_group_name_,cs.organ_name_,sees.monday_,sees.sunday_,sees.serve_total_num_,sees.actual_exercises_num_,
+        sees.exercises_reply_num_,sees.exercises_message_num_,cs.sign_num_,cs.course_num_,cs.qualified_num_,cs.single_num_,cs.mix_num_,
+        cs.not_sign_num_,cs.not_sign_date_,sees.not_homework_date_ from (
+        select sees.student_id_,sees.music_group_id_,sees.monday_,sees.sunday_,sum(sees.expect_exercises_num_) serve_total_num_,
+        sum(sees.actual_exercises_num_) actual_exercises_num_,SUM(sees.exercises_reply_num_) exercises_reply_num_,sum(sees.exercises_message_num_) exercises_message_num_,
+        GROUP_CONCAT(DISTINCT CASE WHEN sees.exercises_reply_num_ &lt; sees.actual_exercises_num_ THEN sees.monday_ END) not_homework_date_
+        from student_extracurricular_exercises_situation_ sees
+        where sees.monday_ = #{monday} AND sees.sunday_ = #{sunday}
+        group by sees.student_id_,sees.music_group_id_) sees
+        LEFT JOIN (
+        select sees.student_id_,sbi.organ_id_,sees.music_group_id_,sbi.user_name_,mg.name_ music_group_name_,sbi.organ_name_,
+        COUNT(sa.qualified_flag_ = 1) qualified_num_,COUNT(cs.id_) course_num_,COUNT(cs.type_ = 'SINGLE') single_num_,
+        COUNT(cs.type_ = 'MIX') mix_num_,COUNT(sa.id_) sign_num_,
+        COUNT(sa.id_ IS NULL) not_sign_num_,
+        GROUP_CONCAT(DISTINCT CASE WHEN sa.id_ IS NULL THEN cs.class_date_ END) not_sign_date_
+        from student_extracurricular_exercises_situation_ sees
+        left join student_basic_info sbi ON sbi.user_id_ = sees.student_id_
+        left join music_group mg ON mg.id_ = sees.music_group_id_
+        LEFT JOIN course_schedule_student_payment cssp ON cssp.music_group_id_ = sees.music_group_id_ AND cssp.user_id_ = sees.student_id_ AND cssp.group_type_ = 'MUSIC'
+        LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
+        LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cssp.course_schedule_id_ AND sa.user_id_ = cssp.user_id_ AND sa.status_ = 'NORMAL'
+        where sees.monday_ = #{monday} AND sees.sunday_ = #{sunday}
+        group by sees.student_id_,sees.music_group_id_) cs ON cs.student_id_ = sees.student_id_ AND cs.music_group_id_ = sees.music_group_id_
+        <where>
+            <if test="organId != null and organId != ''">
+                AND FIND_IN_SET(cs.organ_id_,#{organId})
+            </if>
+        </where>
+        order by cs.organ_id_,cs.student_id_,cs.music_group_id_
     </select>
 </mapper>

+ 2 - 2
mec-web/src/main/resources/exportColumnMapper.ini

@@ -287,8 +287,8 @@ headColumns = ["分部","学员编号","学员姓名","活动编号","活动名
 fieldColumns = ["organizationName","userId","username","activityId","activityName", "subCourseNum","subGiveCourseNum"]
 
 [乐团学生服务指标导出]
-headColumns = ["编号","姓名","乐团名称","分部","服务周期","服务指标总数","已布置","已提交数","点评数","出勤率","达标率"]
-fieldColumns = ["userId","username","musicGroupName","organName","servePeriod", "serveNum","actualExercisesNum","exercisesReplyNum","exercisesMessageNum","signRate","passRate"]
+headColumns = ["分部","编号","姓名","乐团名称","服务周期开始时间","服务周期结束时间","服务指标总数","已布置","已提交数","点评数","签到数","达标数","课程数","出勤率(%)","达标率(%)","声部课数量","合奏课数量","缺勤次数","缺勤日期","未提交作业的服务周期"]
+fieldColumns = ["organName","studentId","username","musicGroupName","monday","sunday", "serveTotalNum","actualExercisesNum","exercisesReplyNum","exercisesMessageNum","signNum","qualifiedNum","courseNum","signRate","passRate","singleNum","mixNum","notSignNum","notSignDate","notHomeworkDate"]
 
 [训练统计导出]
 headColumns = ["分部", "学员编号", "学员姓名", "手机号", "训练时长(分)", "训练次数", "训练天数", "评测次数"]