浏览代码

学生管理部分模块

Joburgess 5 年之前
父节点
当前提交
a26134eb73

+ 56 - 0
mec-web/src/main/java/com/ym/mec/web/controller/system/StudentManageController.java

@@ -0,0 +1,56 @@
+package com.ym.mec.web.controller.system;
+
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.web.dal.page.StudentManageAttendanceQueryInfo;
+import com.ym.mec.web.dal.page.StudentManageCourseQueryInfo;
+import com.ym.mec.web.dal.page.StudentManageQueryInfo;
+import com.ym.mec.web.service.StudentManageService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/9/19
+ */
+@Api("学生管理")
+@RequestMapping("studentManage")
+@RestController
+public class StudentManageController extends BaseController {
+
+    @Autowired
+    private StudentManageService studentManageService;
+
+    @ApiOperation(value = "获取学生列表")
+    @GetMapping("/queryStudentList")
+    public Object queryStudentList(@RequestBody StudentManageQueryInfo queryInfo){
+        return succeed(studentManageService.findStudentsByOrganId(queryInfo));
+    }
+
+    @ApiOperation(value = "根据学生ID获取学生基本报名信息")
+    @GetMapping("/findStudentBaseInfo")
+    public Object findStudentBaseInfo(@ApiParam(value = "学生编号", required = true) @RequestParam Long userID){
+        return succeed(studentManageService.findStudentManageBaseInfo(userID));
+    }
+
+    @ApiOperation(value = "根据学生ID获取其所在的乐团")
+    @GetMapping("/findStudentMusicGroups/{userID}")
+    public Object findStudentMusicGroups(@ApiParam(value = "学生编号", required = true) @PathVariable("userID") Long userID){
+        return succeed(studentManageService.findStudentMusicGroupsByUserId(userID));
+    }
+
+    @ApiOperation(value = "根据乐团获取排课列表")
+    @PostMapping("/findStudentCourses")
+    public Object findStudentCourses(@RequestBody StudentManageCourseQueryInfo queryInfo){
+        return succeed(studentManageService.findStudentCourseList(queryInfo));
+    }
+
+    @ApiOperation(value = "获取学生签到列表")
+    @PostMapping("/findStudentAttendances")
+    public Object findStudentAttendances(@RequestBody StudentManageAttendanceQueryInfo queryInfo){
+        return succeed(studentManageService.findStudentAttendances(queryInfo));
+    }
+
+}

+ 81 - 0
mec-web/src/main/java/com/ym/mec/web/dal/dao/StudentManageDao.java

@@ -0,0 +1,81 @@
+package com.ym.mec.web.dal.dao;
+
+import com.ym.mec.web.dal.dto.StudentManageBaseDto;
+import com.ym.mec.web.dal.dto.StudentManageBaseInfoOfMusicGroupDto;
+import com.ym.mec.web.dal.dto.StudentManageCourseListDto;
+import com.ym.mec.web.dal.dto.StudentManageListDto;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/9/19
+ */
+public interface StudentManageDao {
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/19
+     *根据部门ID获取该部门下所有学生
+     */
+    List<StudentManageListDto> findStudentsByOrganId(Map<String,Object> params);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/19
+     * 根据部门ID统计该部门下所有学生数
+     */
+    int countStudentByOrganId(Map<String,Object> params);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/20
+     * 根据学生ID获取该学院基本信息
+     */
+    StudentManageBaseDto findStudentBaseInfoByUserID(Long userID);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/20
+     * 根据商品id列表获取商品名称列表
+     */
+    String[] findGoodsNamesByIds(@Param("ids") String[] ids);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/20
+     * 根据学生ID获取其所在的乐团
+     */
+    List<StudentManageBaseInfoOfMusicGroupDto> findStudentMusicGroupsByUserId(Long userID);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/20
+     * 获取某乐团的排课列表
+     */
+    List<StudentManageCourseListDto> findStudentCourseList(Map<String,Object> params);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/20
+     * 统计乐团排课数
+     */
+    int countStudentCourses(Map<String,Object> params);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/20
+     * 学生签到列表获取
+     */
+    List<StudentManageCourseListDto> findStudentAttendances(Map<String,Object> params);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/20
+     * 统计学生签到次数
+     */
+    int countStudentAttendances(Map<String,Object> params);
+
+}

+ 2 - 133
mec-web/src/main/java/com/ym/mec/web/dal/dto/CourseScheduleDto.java

@@ -1,23 +1,14 @@
 package com.ym.mec.web.dal.dto;
 
+import com.ym.mec.web.dal.entity.CourseSchedule;
 import com.ym.mec.web.dal.enums.ClassGroupTypeEnum;
-import com.ym.mec.web.dal.enums.CourseStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 
-import java.util.Date;
-
 /**
  * @Author Joburgess
  * @Date 2019/9/17
  */
-public class CourseScheduleDto {
-
-    /**  */
-    private Long id;
-
-    /** 班级编号 */
-    @ApiModelProperty(value = "班级编号",required = false)
-    private Integer classGroupId;
+public class CourseScheduleDto extends CourseSchedule {
 
     /** 班级名称 */
     @ApiModelProperty(value = "班级名称",required = false)
@@ -27,56 +18,6 @@ public class CourseScheduleDto {
     @ApiModelProperty(value = "班级类型(普通班级、合奏班级、提高课班级、VIP班级)",required = false)
     private ClassGroupTypeEnum type;
 
-    /** 课程状态 */
-    @ApiModelProperty(value = "课程状态  NOT_START未开始,SIGN_IN已签到,SIGN_OUT已签退",required = false)
-    private CourseStatusEnum status;
-
-    /** 补贴 */
-    @ApiModelProperty(value = "补贴",required = false)
-    private long subsidy;
-
-    /** 上课日期 */
-    @ApiModelProperty(value = "上课日期",required = false)
-    private java.util.Date classDate;
-
-    /** 上课时间 */
-    @ApiModelProperty(value = "上课时间",required = false)
-    private java.util.Date startClassTime;
-
-    /** 结束时间 */
-    @ApiModelProperty(value = "结束时间",required = false)
-    private java.util.Date endClassTime;
-
-    /** 上课教师 */
-    @ApiModelProperty(value = "上课教师",required = false)
-    private Long teacherId;
-
-    /** 实际上课教师 */
-    @ApiModelProperty(value = "实际上课教师",required = false)
-    private Long actualTeacherId;
-
-    /**  */
-    private java.util.Date createTime;
-
-    /**  */
-    private java.util.Date updateTime;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Integer getClassGroupId() {
-        return classGroupId;
-    }
-
-    public void setClassGroupId(Integer classGroupId) {
-        this.classGroupId = classGroupId;
-    }
-
     public String getClassGroupName() {
         return classGroupName;
     }
@@ -92,76 +33,4 @@ public class CourseScheduleDto {
     public void setType(ClassGroupTypeEnum type) {
         this.type = type;
     }
-
-    public CourseStatusEnum getStatus() {
-        return status;
-    }
-
-    public void setStatus(CourseStatusEnum status) {
-        this.status = status;
-    }
-
-    public long getSubsidy() {
-        return subsidy;
-    }
-
-    public void setSubsidy(long subsidy) {
-        this.subsidy = subsidy;
-    }
-
-    public Date getClassDate() {
-        return classDate;
-    }
-
-    public void setClassDate(Date classDate) {
-        this.classDate = classDate;
-    }
-
-    public Date getStartClassTime() {
-        return startClassTime;
-    }
-
-    public void setStartClassTime(Date startClassTime) {
-        this.startClassTime = startClassTime;
-    }
-
-    public Date getEndClassTime() {
-        return endClassTime;
-    }
-
-    public void setEndClassTime(Date endClassTime) {
-        this.endClassTime = endClassTime;
-    }
-
-    public Long getTeacherId() {
-        return teacherId;
-    }
-
-    public void setTeacherId(Long teacherId) {
-        this.teacherId = teacherId;
-    }
-
-    public Long getActualTeacherId() {
-        return actualTeacherId;
-    }
-
-    public void setActualTeacherId(Long actualTeacherId) {
-        this.actualTeacherId = actualTeacherId;
-    }
-
-    public Date getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Date createTime) {
-        this.createTime = createTime;
-    }
-
-    public Date getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(Date updateTime) {
-        this.updateTime = updateTime;
-    }
 }

+ 46 - 0
mec-web/src/main/java/com/ym/mec/web/dal/dto/StudentManageBaseDto.java

@@ -0,0 +1,46 @@
+package com.ym.mec.web.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/9/20
+ */
+public class StudentManageBaseDto extends StudentManageListDto {
+
+    @ApiModelProperty(value = "生日",required = false)
+    private Date birthdate;
+
+    @ApiModelProperty(value = "家长姓名",required = false)
+    private String parentName;
+
+    @ApiModelProperty(value = "乐团列表",required = false)
+    private List<StudentManageBaseInfoOfMusicGroupDto> musicGroups;
+
+    public List<StudentManageBaseInfoOfMusicGroupDto> getMusicGroups() {
+        return musicGroups;
+    }
+
+    public void setMusicGroups(List<StudentManageBaseInfoOfMusicGroupDto> musicGroups) {
+        this.musicGroups = musicGroups;
+    }
+
+    public Date getBirthdate() {
+        return birthdate;
+    }
+
+    public void setBirthdate(Date birthdate) {
+        this.birthdate = birthdate;
+    }
+
+    public String getParentName() {
+        return parentName;
+    }
+
+    public void setParentName(String parentName) {
+        this.parentName = parentName;
+    }
+}

+ 151 - 0
mec-web/src/main/java/com/ym/mec/web/dal/dto/StudentManageBaseInfoOfMusicGroupDto.java

@@ -0,0 +1,151 @@
+package com.ym.mec.web.dal.dto;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.ym.mec.web.dal.enums.KitPurchaseMethodEnum;
+import com.ym.mec.web.dal.enums.MusicGroupStatusEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/9/19
+ */
+public class StudentManageBaseInfoOfMusicGroupDto {
+
+    @ApiModelProperty(value = "乐团ID",required = false)
+    private Long musicGroupId;
+
+    @ApiModelProperty(value = "乐团名称",required = false)
+    private String musicGroupName;
+
+    @ApiModelProperty(value = "乐团状态(报名中、缴费中、筹备中、进行中、取消)",required = false)
+    private MusicGroupStatusEnum musicGroupStatus;
+
+    @ApiModelProperty(value = "加入乐团时间",required = false)
+    private Date joinMusicGroupDate;
+
+    @ApiModelProperty(value = "科目ID",required = false)
+    private Long subjectId;
+
+    @ApiModelProperty(value = "科目名称",required = false)
+    private String subjectName;
+
+    @ApiModelProperty(value = "器材购买方式(团购、自备)",required = false)
+    private KitPurchaseMethodEnum kitPurchaseMethod;
+
+    @ApiModelProperty(value = "商品ID列表",required = false)
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    private String goodsIdList;
+
+    @ApiModelProperty(value = "商品名称列表",required = false)
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    private String[] goodsNameList;
+
+    @ApiModelProperty(value = "打包价格",required = false)
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    private BigDecimal price;
+
+    @ApiModelProperty(value = "部门ID",required = false)
+    private Long organId;
+
+    @ApiModelProperty(value = "部门名称",required = false)
+    private String organName;
+
+    public Long getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Long organId) {
+        this.organId = organId;
+    }
+
+    public String getOrganName() {
+        return organName;
+    }
+
+    public void setOrganName(String organName) {
+        this.organName = organName;
+    }
+
+    public String[] getGoodsNameList() {
+        return goodsNameList;
+    }
+
+    public void setGoodsNameList(String[] goodsNameList) {
+        this.goodsNameList = goodsNameList;
+    }
+
+    public Long getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(Long musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+
+    public String getMusicGroupName() {
+        return musicGroupName;
+    }
+
+    public void setMusicGroupName(String musicGroupName) {
+        this.musicGroupName = musicGroupName;
+    }
+
+    public MusicGroupStatusEnum getMusicGroupStatus() {
+        return musicGroupStatus;
+    }
+
+    public void setMusicGroupStatus(MusicGroupStatusEnum musicGroupStatus) {
+        this.musicGroupStatus = musicGroupStatus;
+    }
+
+    public Date getJoinMusicGroupDate() {
+        return joinMusicGroupDate;
+    }
+
+    public void setJoinMusicGroupDate(Date joinMusicGroupDate) {
+        this.joinMusicGroupDate = joinMusicGroupDate;
+    }
+
+    public Long getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(Long subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public KitPurchaseMethodEnum getKitPurchaseMethod() {
+        return kitPurchaseMethod;
+    }
+
+    public void setKitPurchaseMethod(KitPurchaseMethodEnum kitPurchaseMethod) {
+        this.kitPurchaseMethod = kitPurchaseMethod;
+    }
+
+    public String getGoodsIdList() {
+        return goodsIdList;
+    }
+
+    public void setGoodsIdList(String goodsIdList) {
+        this.goodsIdList = goodsIdList;
+    }
+
+    public BigDecimal getPrice() {
+        return price;
+    }
+
+    public void setPrice(BigDecimal price) {
+        this.price = price;
+    }
+}

+ 92 - 0
mec-web/src/main/java/com/ym/mec/web/dal/dto/StudentManageCourseListDto.java

@@ -0,0 +1,92 @@
+package com.ym.mec.web.dal.dto;
+
+import com.ym.mec.web.dal.enums.ClassGroupTypeEnum;
+import com.ym.mec.web.dal.enums.CourseStatusEnum;
+import com.ym.mec.web.dal.enums.StudentAttendanceStatusEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/9/20
+ */
+public class StudentManageCourseListDto {
+
+    @ApiModelProperty(value = "班级ID",required = false)
+    private Long classGroupId;
+
+    @ApiModelProperty(value = "班级名称",required = false)
+    private String classGroupName;
+
+    @ApiModelProperty(value = "班级类型(普通班级、合奏班级、提高课班级、VIP班级)",required = true)
+    private ClassGroupTypeEnum classGroupType;
+
+    @ApiModelProperty(value = "上课日期",required = false)
+    private Date courseDate;
+
+    @ApiModelProperty(value = "课程状态  NOT_START未开始,SIGN_IN已签到,SIGN_OUT已签退",required = false)
+    private CourseStatusEnum courseStatus;
+
+    @ApiModelProperty(value = "老师名称",required = false)
+    private String teacherName;
+
+    @ApiModelProperty(value = "状态(正常、旷课、请假、休学)",required = false)
+    private StudentAttendanceStatusEnum attendanceStatus;
+
+    public StudentAttendanceStatusEnum getAttendanceStatus() {
+        return attendanceStatus;
+    }
+
+    public void setAttendanceStatus(StudentAttendanceStatusEnum attendanceStatus) {
+        this.attendanceStatus = attendanceStatus;
+    }
+
+    public Long getClassGroupId() {
+        return classGroupId;
+    }
+
+    public void setClassGroupId(Long classGroupId) {
+        this.classGroupId = classGroupId;
+    }
+
+    public String getClassGroupName() {
+        return classGroupName;
+    }
+
+    public void setClassGroupName(String classGroupName) {
+        this.classGroupName = classGroupName;
+    }
+
+    public ClassGroupTypeEnum getClassGroupType() {
+        return classGroupType;
+    }
+
+    public void setClassGroupType(ClassGroupTypeEnum classGroupType) {
+        this.classGroupType = classGroupType;
+    }
+
+    public Date getCourseDate() {
+        return courseDate;
+    }
+
+    public void setCourseDate(Date courseDate) {
+        this.courseDate = courseDate;
+    }
+
+    public CourseStatusEnum getCourseStatus() {
+        return courseStatus;
+    }
+
+    public void setCourseStatus(CourseStatusEnum courseStatus) {
+        this.courseStatus = courseStatus;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+}

+ 78 - 0
mec-web/src/main/java/com/ym/mec/web/dal/dto/StudentManageListDto.java

@@ -0,0 +1,78 @@
+package com.ym.mec.web.dal.dto;
+
+import com.ym.mec.common.enums.UserGenderEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/9/19
+ */
+public class StudentManageListDto {
+
+    @ApiModelProperty(value = "用户ID",required = false)
+    private Long userId;
+
+
+    @ApiModelProperty(value = "用户名",required = false)
+    private String userName;
+
+    @ApiModelProperty(value = "性别",required = false)
+    private UserGenderEnum gender;
+
+    @ApiModelProperty(value = "电话号码",required = false)
+    private String phone;
+
+    @ApiModelProperty(value = "学校ID",required = false)
+    private Long schoolId;
+
+    @ApiModelProperty(value = "学校名称",required = false)
+    private String schoolName;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public UserGenderEnum getGender() {
+        return gender;
+    }
+
+    public void setGender(UserGenderEnum gender) {
+        this.gender = gender;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public Long getSchoolId() {
+        return schoolId;
+    }
+
+    public void setSchoolId(Long schoolId) {
+        this.schoolId = schoolId;
+    }
+
+    public String getSchoolName() {
+        return schoolName;
+    }
+
+    public void setSchoolName(String schoolName) {
+        this.schoolName = schoolName;
+    }
+}

+ 24 - 1
mec-web/src/main/java/com/ym/mec/web/dal/entity/CourseSchedule.java

@@ -1,6 +1,7 @@
 package com.ym.mec.web.dal.entity;
 
 import com.ym.mec.web.dal.enums.CourseStatusEnum;
+import com.ym.mec.web.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
@@ -49,7 +50,29 @@ public class CourseSchedule {
 	
 	/**  */
 	private java.util.Date updateTime;
-	
+
+	@ApiModelProperty(value = "线上或线下",required = false)
+	private YesOrNoEnum teachMode;
+
+	@ApiModelProperty(value = "投诉状态",required = false)
+	private String complaintStatus;
+
+	public YesOrNoEnum getTeachMode() {
+		return teachMode;
+	}
+
+	public void setTeachMode(YesOrNoEnum teachMode) {
+		this.teachMode = teachMode;
+	}
+
+	public String getComplaintStatus() {
+		return complaintStatus;
+	}
+
+	public void setComplaintStatus(String complaintStatus) {
+		this.complaintStatus = complaintStatus;
+	}
+
 	public void setId(Long id){
 		this.id = id;
 	}

+ 68 - 0
mec-web/src/main/java/com/ym/mec/web/dal/page/StudentManageAttendanceQueryInfo.java

@@ -0,0 +1,68 @@
+package com.ym.mec.web.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+import com.ym.mec.web.dal.enums.ClassGroupTypeEnum;
+import com.ym.mec.web.dal.enums.StudentAttendanceStatusEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/9/20
+ */
+public class StudentManageAttendanceQueryInfo extends QueryInfo {
+
+    @ApiModelProperty(value = "学生ID",required = false)
+    private Long studentId;
+
+    @ApiModelProperty(value = "班级类型(普通班级、合奏班级、提高课班级、VIP班级)",required = true)
+    private ClassGroupTypeEnum classGroupType;
+
+    @ApiModelProperty(value = "班级名称",required = false)
+    private String classGroupName;
+
+    @ApiModelProperty(value = "老师名称",required = false)
+    private String teacherName;
+
+    @ApiModelProperty(value = "状态(正常、旷课、请假、休学)",required = false)
+    private StudentAttendanceStatusEnum attendanceStatus;
+
+    public Long getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Long studentId) {
+        this.studentId = studentId;
+    }
+
+    public ClassGroupTypeEnum getClassGroupType() {
+        return classGroupType;
+    }
+
+    public void setClassGroupType(ClassGroupTypeEnum classGroupType) {
+        this.classGroupType = classGroupType;
+    }
+
+    public String getClassGroupName() {
+        return classGroupName;
+    }
+
+    public void setClassGroupName(String classGroupName) {
+        this.classGroupName = classGroupName;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public StudentAttendanceStatusEnum getAttendanceStatus() {
+        return attendanceStatus;
+    }
+
+    public void setAttendanceStatus(StudentAttendanceStatusEnum attendanceStatus) {
+        this.attendanceStatus = attendanceStatus;
+    }
+}

+ 79 - 0
mec-web/src/main/java/com/ym/mec/web/dal/page/StudentManageCourseQueryInfo.java

@@ -0,0 +1,79 @@
+package com.ym.mec.web.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+import com.ym.mec.web.dal.enums.ClassGroupTypeEnum;
+import com.ym.mec.web.dal.enums.CourseStatusEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/9/20
+ */
+public class StudentManageCourseQueryInfo extends QueryInfo {
+
+    @ApiModelProperty(value = "学生id",required = true)
+    private Long studentId;
+
+    @ApiModelProperty(value = "乐团ID",required = true)
+    private Long musicGroupId;
+
+    @ApiModelProperty(value = "班级类型(普通班级、合奏班级、提高课班级、VIP班级)",required = true)
+    private ClassGroupTypeEnum classGroupType;
+
+    @ApiModelProperty(value = "课程状态  NOT_START未开始,SIGN_IN已签到,SIGN_OUT已签退",required = false)
+    private CourseStatusEnum courseStatus;
+
+    @ApiModelProperty(value = "班级名称",required = false)
+    private String classGroupName;
+
+    @ApiModelProperty(value = "老师名称",required = false)
+    private String teacherName;
+
+    public Long getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Long studentId) {
+        this.studentId = studentId;
+    }
+
+    public Long getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(Long musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+
+    public ClassGroupTypeEnum getClassGroupType() {
+        return classGroupType;
+    }
+
+    public void setClassGroupType(ClassGroupTypeEnum classGroupType) {
+        this.classGroupType = classGroupType;
+    }
+
+    public CourseStatusEnum getCourseStatus() {
+        return courseStatus;
+    }
+
+    public void setCourseStatus(CourseStatusEnum courseStatus) {
+        this.courseStatus = courseStatus;
+    }
+
+    public String getClassGroupName() {
+        return classGroupName;
+    }
+
+    public void setClassGroupName(String classGroupName) {
+        this.classGroupName = classGroupName;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+}

+ 56 - 0
mec-web/src/main/java/com/ym/mec/web/dal/page/StudentManageQueryInfo.java

@@ -0,0 +1,56 @@
+package com.ym.mec.web.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+import com.ym.mec.web.dal.enums.ClassGroupStudentStatusEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/9/19
+ */
+public class StudentManageQueryInfo extends QueryInfo {
+
+    @ApiModelProperty(value = "部门ID")
+    private Long organId;
+
+    @ApiModelProperty(value = "乐团ID")
+    private Long musicGroupId;
+
+    @ApiModelProperty(value = "状态(在读、请假、退学)",required = false)
+    private ClassGroupStudentStatusEnum studentStatus;
+
+    @ApiModelProperty(value = "模糊查询字符串-用户名/电话")
+    private String queryString;
+
+    public Long getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Long organId) {
+        this.organId = organId;
+    }
+
+    public Long getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(Long musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+
+    public ClassGroupStudentStatusEnum getStudentStatus() {
+        return studentStatus;
+    }
+
+    public void setStudentStatus(ClassGroupStudentStatusEnum studentStatus) {
+        this.studentStatus = studentStatus;
+    }
+
+    public String getQueryString() {
+        return queryString;
+    }
+
+    public void setQueryString(String queryString) {
+        this.queryString = queryString;
+    }
+}

+ 53 - 0
mec-web/src/main/java/com/ym/mec/web/service/StudentManageService.java

@@ -0,0 +1,53 @@
+package com.ym.mec.web.service;
+
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.web.dal.dto.StudentManageBaseDto;
+import com.ym.mec.web.dal.dto.StudentManageBaseInfoOfMusicGroupDto;
+import com.ym.mec.web.dal.page.StudentManageAttendanceQueryInfo;
+import com.ym.mec.web.dal.page.StudentManageCourseQueryInfo;
+import com.ym.mec.web.dal.page.StudentManageQueryInfo;
+
+import java.util.List;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/9/19
+ */
+public interface StudentManageService {
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/19
+     * 根据员工分页获取该员工所属部门下所有学生
+     */
+    PageInfo findStudentsByOrganId(StudentManageQueryInfo queryInfo);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/20
+     * 根据学生ID获取学生基本报名信息
+     */
+    StudentManageBaseDto findStudentManageBaseInfo(Long userID);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/20
+     * 根据学生ID获取其所在的乐团
+     */
+    List<StudentManageBaseInfoOfMusicGroupDto> findStudentMusicGroupsByUserId(Long userID);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/20
+     * 获取学生排课信息
+     */
+    PageInfo findStudentCourseList(StudentManageCourseQueryInfo queryInfo);
+
+    /**
+     * @Author: Joburgess
+     * @Date: 2019/9/20
+     * 获取学生考勤记录
+     */
+    PageInfo findStudentAttendances(StudentManageAttendanceQueryInfo queryInfo);
+
+}

+ 111 - 0
mec-web/src/main/java/com/ym/mec/web/service/impl/StudentManageServiceImpl.java

@@ -0,0 +1,111 @@
+package com.ym.mec.web.service.impl;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.util.collection.MapUtil;
+import com.ym.mec.web.dal.dao.StudentManageDao;
+import com.ym.mec.web.dal.dto.StudentManageBaseDto;
+import com.ym.mec.web.dal.dto.StudentManageBaseInfoOfMusicGroupDto;
+import com.ym.mec.web.dal.dto.StudentManageListDto;
+import com.ym.mec.web.dal.page.StudentManageAttendanceQueryInfo;
+import com.ym.mec.web.dal.page.StudentManageCourseQueryInfo;
+import com.ym.mec.web.dal.page.StudentManageQueryInfo;
+import com.ym.mec.web.service.StudentManageService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author Joburgess
+ * @Date 2019/9/19
+ */
+@Service
+public class StudentManageServiceImpl implements StudentManageService {
+
+    @Autowired
+    private StudentManageDao studentManageDao;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @Override
+    public PageInfo findStudentsByOrganId(StudentManageQueryInfo queryInfo) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        PageInfo<StudentManageListDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        queryInfo.setOrganId(Long.valueOf(user.getOrganId()));
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<StudentManageListDto> dataList = null;
+        int count = studentManageDao.countStudentByOrganId(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = studentManageDao.findStudentsByOrganId(params);
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
+    @Override
+    public StudentManageBaseDto findStudentManageBaseInfo(Long userID) {
+        StudentManageBaseDto studentManageBaseDto = studentManageDao.findStudentBaseInfoByUserID(userID);
+        for(int i=0;i<studentManageBaseDto.getMusicGroups().size();i++){
+            String[] goodsIdList=studentManageBaseDto.getMusicGroups().get(i).getGoodsIdList().split("\\|");
+            studentManageBaseDto.getMusicGroups().get(i).setGoodsNameList(studentManageDao.findGoodsNamesByIds(goodsIdList));
+        }
+        return studentManageBaseDto;
+    }
+
+    @Override
+    public List<StudentManageBaseInfoOfMusicGroupDto> findStudentMusicGroupsByUserId(Long userID) {
+        return studentManageDao.findStudentMusicGroupsByUserId(userID);
+    }
+
+    @Override
+    public PageInfo findStudentCourseList(StudentManageCourseQueryInfo queryInfo) {
+        PageInfo pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List dataList = null;
+        int count = studentManageDao.countStudentCourses(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = studentManageDao.findStudentCourseList(params);
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
+    @Override
+    public PageInfo findStudentAttendances(StudentManageAttendanceQueryInfo queryInfo) {
+        PageInfo pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List dataList = null;
+        int count = studentManageDao.countStudentAttendances(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = studentManageDao.findStudentAttendances(params);
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+}

+ 13 - 16
mec-web/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -18,20 +18,11 @@
         <result column="actual_teacher_id_" property="actualTeacherId"/>
         <result column="create_time_" property="createTime"/>
         <result column="update_time_" property="updateTime"/>
+        <result column="teach_mode_" property="teachMode" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="complaint_status_" property="complaintStatus"/>
     </resultMap>
 
-    <resultMap type="com.ym.mec.web.dal.dto.CourseScheduleDto" id="courseScheduleDto">
-        <result column="id_" property="id"/>
-        <result column="class_group_id_" property="classGroupId"/>
-        <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
-        <result column="subsidy_" property="subsidy"/>
-        <result column="class_date_" property="classDate"/>
-        <result column="start_class_time_" property="startClassTime"/>
-        <result column="end_class_time_" property="endClassTime"/>
-        <result column="teacher_id_" property="teacherId"/>
-        <result column="actual_teacher_id_" property="actualTeacherId"/>
-        <result column="create_time_" property="createTime"/>
-        <result column="update_time_" property="updateTime"/>
+    <resultMap type="com.ym.mec.web.dal.dto.CourseScheduleDto" id="courseScheduleDto" extends="CourseSchedule">
         <result column="name_" property="classGroupName"/>
         <result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
     </resultMap>
@@ -55,16 +46,16 @@
         </selectKey>
         -->
         INSERT INTO course_schedule
-        (id_,class_group_id_,status_,subsidy_,class_date_,start_class_time_,end_class_time_,teacher_id_,actual_teacher_id_,create_time_,update_time_)
-        VALUES(#{id},#{classGroupId},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{subsidy},#{classDate},#{startClassTime},#{endClassTime},#{teacherId},#{actualTeacherId},now(),now())
+        (id_,class_group_id_,status_,subsidy_,class_date_,start_class_time_,end_class_time_,teacher_id_,actual_teacher_id_,create_time_,update_time_,teach_mode_,complaint_status_)
+        VALUES(#{id},#{classGroupId},#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{subsidy},#{classDate},#{startClassTime},#{endClassTime},#{teacherId},#{actualTeacherId},now(),now(),#{teachMode,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{complaintStatus})
     </insert>
 
     <insert id="batchAddCourseSchedules" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id_">
         INSERT INTO course_schedule
-        (id_,class_group_id_,status_,subsidy_,class_date_,start_class_time_,end_class_time_,teacher_id_,actual_teacher_id_,create_time_,update_time_)
+        (id_,class_group_id_,status_,subsidy_,class_date_,start_class_time_,end_class_time_,teacher_id_,actual_teacher_id_,create_time_,update_time_,teach_mode_,complaint_status_)
         VALUE
         <foreach collection="list" item="course" separator=",">
-            (#{course.id},#{course.classGroupId},#{course.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{course.subsidy},#{course.classDate},#{course.startClassTime},#{course.endClassTime},#{course.teacherId},#{course.actualTeacherId},now(),now())
+            (#{course.id},#{course.classGroupId},#{course.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{course.subsidy},#{course.classDate},#{course.startClassTime},#{course.endClassTime},#{course.teacherId},#{course.actualTeacherId},now(),now(),#{teachMode,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{complaintStatus})
         </foreach>
     </insert>
 
@@ -99,6 +90,12 @@
             <if test="updateTime != null">
                 update_time_ = #{updateTime},
             </if>
+            <if test="teachMode != null">
+                teach_mode_ = #{teachMode,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            </if>
+            <if test="complaintStatus != null">
+                complaint_status_ = #{complaintStatus},
+            </if>
         </set>
         WHERE id_ = #{id}
     </update>

+ 255 - 0
mec-web/src/main/resources/config/mybatis/StudentManageDao.xml

@@ -0,0 +1,255 @@
+<?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.web.dal.dao.StudentManageDao">
+
+    <resultMap id="studentManageListDto" type="com.ym.mec.web.dal.dto.StudentManageListDto">
+        <result property="userId" column="user_id_"/>
+        <result property="userName" column="username_"/>
+        <result property="phone" column="phone_"/>
+        <result property="gender" column="gender_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result property="schoolId" column="school_id_"/>
+        <result property="schoolName" column="school_name_"/>
+    </resultMap>
+
+    <resultMap id="musicGroup" type="com.ym.mec.web.dal.dto.StudentManageBaseInfoOfMusicGroupDto">
+        <result property="musicGroupId" column="music_group_id_"/>
+        <result property="musicGroupName" column="music_group_name_"/>
+        <result property="musicGroupStatus" column="music_group_status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result property="joinMusicGroupDate" column="join_date"/>
+        <result property="subjectId" column="subject_id_"/>
+        <result property="subjectName" column="subject_name_"/>
+        <result property="kitPurchaseMethod" column="kit_purchase_method_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result property="goodsIdList" column="goods_id_list_"/>
+        <result property="price" column="price_"/>
+        <result property="organId" column="organ_id_"/>
+        <result property="organName" column="organ_name_"/>
+    </resultMap>
+
+    <resultMap id="studentManageBaseInfo" type="com.ym.mec.web.dal.dto.StudentManageBaseDto" extends="studentManageListDto">
+        <result property="birthdate" column="birthdate_"/>
+        <result property="parentName" column="parents_name_"/>
+        <collection property="musicGroups" resultMap="musicGroup" javaType="list"/>
+    </resultMap>
+
+    <resultMap id="studentManageCourseListDto" type="com.ym.mec.web.dal.dto.StudentManageCourseListDto">
+        <result property="classGroupId" column="class_group_id_" />
+        <result property="classGroupName" column="class_group_name_" />
+        <result property="classGroupType" column="class_group_type_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result property="courseDate" column="course_date_" />
+        <result property="courseStatus" column="course_status_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result property="teacherName" column="teacher_name_" />
+        <result property="attendanceStatus" column="status_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+    </resultMap>
+
+    <sql id="queryCondition">
+        <where>
+            cgsm.user_id_ IS NOT NULL
+            <if test="organID != null">
+              AND s.organ_id_=#{organID}
+            </if>
+            <if test="musicGroupId != null">
+                and mg.id_ = #{musicGroupId}
+            </if>
+            <if test="studentStatus != null">
+                and cgsm.status_ = #{studentStatus, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+            </if>
+            <if test="queryString != null">
+                and (su.username_ like CONCAT("%",#{queryString},"%")
+                    or su.phone_ like CONCAT("%",#{queryString},"%")
+                  )
+            </if>
+        </where>
+    </sql>
+
+    <select id="findStudentsByOrganId" resultMap="studentManageListDto">
+        SELECT
+            DISTINCT su.id_ user_id_,
+            su.username_,
+            su.gender_,
+            su.phone_,
+            s.id_ school_id_,
+            s.name_ school_name_
+        FROM
+            school s
+        LEFT JOIN music_group mg ON s.id_=mg.school_id_
+        LEFT JOIN class_group cg ON mg.id_=cg.music_group_id_
+        LEFT JOIN class_group_student_mapper cgsm ON cg.id_=cgsm.class_group_id_
+        LEFT JOIN sys_user su ON cgsm.user_id_=su.id_
+        <include refid="queryCondition"/>
+        ORDER BY su.id_
+        <include refid="global.limit"/>
+    </select>
+
+    <select id="countStudentByOrganId" resultType="java.lang.Integer">
+        SELECT
+            COUNT(DISTINCT su.id_)
+        FROM
+            school s
+        LEFT JOIN music_group mg ON s.id_=mg.school_id_
+        LEFT JOIN class_group cg ON mg.id_=cg.music_group_id_
+        LEFT JOIN class_group_student_mapper cgsm ON cg.id_=cgsm.class_group_id_
+        LEFT JOIN sys_user su ON cgsm.user_id_=su.id_
+        <include refid="queryCondition"/>
+    </select>
+    <select id="findStudentBaseInfoByUserID" resultMap="studentManageBaseInfo">
+      SELECT
+            su.id_ user_id_,
+            su.username_,
+            su.gender_,
+            su.birthdate_,
+            sr.parents_name_,
+            sr.parents_phone_,
+            sr.music_group_id_,
+            sr.create_time_ join_date,
+            mg.name_ music_group_name_,
+            mg.status_ music_group_status,
+            cg.id_ class_group_id_,
+            cg.name_ class_group_name_,
+            sr.subject_id_,
+            sj.name_ subject_name_,
+            sr.kit_purchase_method_,
+            spod.goods_id_list_,
+            spod.price_
+        FROM
+            sys_user su
+            LEFT JOIN student_registration sr ON su.id_ = sr.user_id_
+            LEFT JOIN class_group cg ON sr.class_group_id_=cg.id_
+            LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_
+            LEFT JOIN `subject` sj ON sr.subject_id_=sj.id_
+            LEFT JOIN organization o ON mg.organ_id_ = o.id_
+            LEFT JOIN school s ON mg.school_id_ = s.id_
+            LEFT JOIN student_payment_order spo ON sr.user_id_=spo.user_id_ AND sr.music_group_id_=spo.music_group_id_
+            LEFT JOIN student_payment_order_detail spod ON spo.id_=spod.payment_order_id_
+        WHERE
+            su.id_ =#{userID}
+    </select>
+
+    <select id="findGoodsNamesByIds" resultType="string">
+      SELECT name_ FROM goods WHERE id_ IN
+      <foreach collection="ids" item="id" open="(" close=")" separator=",">
+          #{id}
+      </foreach>
+    </select>
+
+    <select id="findStudentMusicGroupsByUserId" resultMap="musicGroup">
+        SELECT
+            mg.id_ music_group_id_,
+            mg.name_ music_group_name_,
+            sr.create_time_ join_date,
+            mg.status_ music_group_status_,
+            s.name_ subject_name_,
+            sr.kit_purchase_method_,
+            cgsm.status_ student_status,
+            o.id_ organ_id_,
+            o.name_ organ_name_
+        FROM
+            student_registration sr
+        LEFT JOIN music_group mg ON sr.music_group_id_=mg.id_
+        LEFT JOIN organization o ON mg.organ_id_=o.id_
+        LEFT JOIN class_group_student_mapper cgsm ON sr.class_group_id_=cgsm.class_group_id_
+        LEFT JOIN `subject` s ON sr.subject_id_=s.id_
+        WHERE sr.user_id_=#{userID}
+    </select>
+
+    <sql id="studentManageCourseQueryCondition">
+        <where>
+            <if test="studentId!=null">
+                and cgsm.user_id_=#{studentId}
+            </if>
+            <if test="musicGroupId!=null">
+                and cg.music_group_id_=#{musicGroupId}
+            </if>
+            <if test="classGroupType!=null">
+                and cg.type_=#{classGroupType}
+            </if>
+            <if test="courseStatus!=null">
+                and cs.status_=#{courseStatus}
+            </if>
+            <if test="classGroupName!=null">
+                and cg.name_ like CONCAT("%",#{classGroupName},"%")
+            </if>
+            <if test="teacherName!=null">
+                and su.username_ like CONCAT("%",#{teacherName},"%")
+            </if>
+        </where>
+    </sql>
+
+    <select id="findStudentCourseList" resultMap="studentManageCourseListDto">
+        SELECT
+            cg.id_ class_group_id_,
+            cg.name_ class_group_name_,
+            cg.type_ class_group_type_,
+            CONCAT(cs.class_date_," ",cs.start_class_time_) course_date_,
+            cs.status_ course_status_,
+            su.username_ teacher_name_
+        FROM
+            class_group cg
+            LEFT JOIN class_group_student_mapper cgsm ON cg.id_=cgsm.class_group_id_
+            LEFT JOIN course_schedule cs ON cg.id_=cs.class_group_id_
+            LEFT JOIN sys_user su ON cs.teacher_id_=su.id_
+        <include refid="studentManageCourseQueryCondition"/>
+        ORDER BY course_date_
+        <include refid="global.limit"/>
+    </select>
+
+    <select id="countStudentCourses" resultType="int">
+        SELECT
+        count(*)
+        FROM
+        class_group cg
+        LEFT JOIN class_group_student_mapper cgsm ON cg.id_=cgsm.class_group_id_
+        LEFT JOIN course_schedule cs ON cg.id_=cs.class_group_id_
+        LEFT JOIN sys_user su ON cs.teacher_id_=su.id_
+        <include refid="studentManageCourseQueryCondition"/>
+    </select>
+
+    <sql id="studentManageAttendanceQueryCondition">
+        <where>
+            <if test="studentId!=null">
+                and sa.user_id_=#{studentId}
+            </if>
+            <if test="classGroupType!=null">
+                and cg.type_=#{classGroupType}
+            </if>
+            <if test="attendanceStatus!=null">
+                and cs.status_=#{attendanceStatus}
+            </if>
+            <if test="classGroupName!=null">
+                and cg.name_ like CONCAT("%",#{classGroupName},"%")
+            </if>
+            <if test="teacherName!=null">
+                and sa.status_ like CONCAT("%",#{teacherName},"%")
+            </if>
+        </where>
+    </sql>
+
+    <select id="findStudentAttendances" resultMap="studentManageCourseListDto">
+        SELECT
+            cg.id_ class_group_id_,
+            cg.name_ class_group_name_,
+            cg.type_ class_group_type_,
+            CONCAT(cs.class_date_," ",cs.start_class_time_) course_date_,
+            su.username_ teacher_name_,
+            sa.status_
+        FROM
+            student_attendance sa
+            LEFT JOIN class_group cg ON sa.class_group_id_=cg.id_
+            LEFT JOIN course_schedule cs ON sa.course_schedule_id_=cs.id_
+            LEFT JOIN sys_user su ON sa.teacher_id_=su.id_
+        <include refid="studentManageAttendanceQueryCondition"/>
+        ORDER BY sa.id_
+        <include refid="global.limit"/>
+    </select>
+
+    <select id="countStudentAttendances" resultType="int">
+        SELECT
+        count(*)
+        FROM
+        student_attendance sa
+        LEFT JOIN class_group cg ON sa.class_group_id_=cg.id_
+        LEFT JOIN course_schedule cs ON sa.course_schedule_id_=cs.id_
+        LEFT JOIN sys_user su ON sa.teacher_id_=su.id_
+        <include refid="studentManageAttendanceQueryCondition"/>
+    </select>
+
+</mapper>