肖玮 5 роки тому
батько
коміт
e62a8d0e12

+ 19 - 1
mec-education/src/main/java/com/ym/mec/education/controller/CourseScheduleController.java

@@ -1,16 +1,22 @@
 package com.ym.mec.education.controller;
 
+import com.ym.mec.education.base.BaseResponse;
 import com.ym.mec.education.base.PageResponse;
+import com.ym.mec.education.enums.ReturnCodeEnum;
 import com.ym.mec.education.req.ClassGroupReq;
+import com.ym.mec.education.req.CourseScheduleReq;
+import com.ym.mec.education.resp.CourseScheduleResp;
 import com.ym.mec.education.service.ICourseScheduleService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+import java.util.Objects;
 
 /**
  * @program: mec
@@ -29,7 +35,19 @@ public class CourseScheduleController {
 
     @PostMapping("/list")
     @ApiOperation("课表列表")
-    public PageResponse list(@RequestBody ClassGroupReq classGroupReq) {
+    public PageResponse list(@RequestBody @Validated ClassGroupReq classGroupReq) {
         return courseScheduleService.getPage(classGroupReq);
     }
+
+    @PostMapping("/info")
+    @ApiOperation("课程计划详情")
+    public BaseResponse<CourseScheduleResp> getInfo(@RequestBody CourseScheduleReq courseScheduleReq) {
+        if (Objects.isNull(courseScheduleReq.getCourseScheduleId())) {
+            BaseResponse baseResponse = new BaseResponse();
+            baseResponse.setReturnCode(ReturnCodeEnum.CODE_206.getCode());
+            baseResponse.setMessage(ReturnCodeEnum.CODE_206.getValue());
+            return baseResponse;
+        }
+        return courseScheduleService.getInfo(courseScheduleReq);
+    }
 }

+ 7 - 0
mec-education/src/main/java/com/ym/mec/education/controller/StudentAttendanceController.java

@@ -2,6 +2,7 @@ package com.ym.mec.education.controller;
 
 import com.ym.mec.education.base.PageResponse;
 import com.ym.mec.education.req.ClassGroupReq;
+import com.ym.mec.education.req.CourseScheduleReq;
 import com.ym.mec.education.service.IStudentAttendanceService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -33,4 +34,10 @@ public class StudentAttendanceController {
         return studentAttendanceService.getPage(classGroupReq);
     }
 
+    @PostMapping("/listByCourse")
+    @ApiOperation("根据课程计划查询考勤列表")
+    public PageResponse listByCourse(@RequestBody CourseScheduleReq courseScheduleReq) {
+        return studentAttendanceService.getPageByCourse(courseScheduleReq);
+    }
+
 }

+ 14 - 0
mec-education/src/main/java/com/ym/mec/education/enums/StudentAttendanceStatusEnum.java

@@ -1,6 +1,7 @@
 package com.ym.mec.education.enums;
 
 import com.ym.mec.common.enums.BaseEnum;
+import java.util.Arrays;
 
 /**
  * 学生考勤状态
@@ -37,4 +38,17 @@ public enum StudentAttendanceStatusEnum implements BaseEnum<String,StudentAttend
     public String getCode() {
         return this.code;
     }
+
+    /**
+     * 根据枚举值获取枚举信息
+     *
+     * @param code 枚举值
+     * @return 枚举信息
+     */
+    public static String getMsgByCode(String code) {
+        return Arrays.stream(StudentAttendanceStatusEnum.values())
+                .filter(StudentAttendanceStatusEnum -> StudentAttendanceStatusEnum.getCode().equals(code))
+                .findFirst()
+                .map(StudentAttendanceStatusEnum::getMsg).orElse(null);
+    }
 }

+ 20 - 0
mec-education/src/main/java/com/ym/mec/education/req/CourseScheduleReq.java

@@ -0,0 +1,20 @@
+package com.ym.mec.education.req;
+
+import com.ym.mec.education.base.BaseQuery;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @program: mec
+ * @description: 课程计划入参
+ * @author: xw
+ * @create: 2019-09-28 10:36
+ */
+@ApiModel("课程计划入参")
+@Data
+public class CourseScheduleReq extends BaseQuery {
+
+    @ApiModelProperty(value = "课程计划id", required = true)
+    private Integer courseScheduleId;
+}

+ 4 - 5
mec-education/src/main/java/com/ym/mec/education/resp/ClassGroupResp.java

@@ -4,7 +4,6 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.ToString;
-
 import java.io.Serializable;
 import java.util.Date;
 import java.util.List;
@@ -62,16 +61,16 @@ public class ClassGroupResp implements Serializable {
 
     private List<String> secdTehNameList;
 
-    @ApiModelProperty(value = "授课老师",required = true)
+    @ApiModelProperty(value = "主讲老师")
     private String teacher;
 
-    @ApiModelProperty(value = "授课老师",required = true)
+    @ApiModelProperty(value = "授课老师")
     private String assistant;
 
-    @ApiModelProperty(value = "课程进度",required = true)
+    @ApiModelProperty(value = "课程进度")
     private String courseProgress;
 
-    @ApiModelProperty(value = "班级名称",required = true)
+    @ApiModelProperty(value = "班级名称")
     private String classGroupName;
 
 }

+ 16 - 4
mec-education/src/main/java/com/ym/mec/education/resp/CourseScheduleResp.java

@@ -5,7 +5,9 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.ToString;
 import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
 import java.io.Serializable;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -20,15 +22,25 @@ import java.util.List;
 @Accessors(chain = true)
 public class CourseScheduleResp implements Serializable {
 
-    @ApiModelProperty(value = "上课日期",required = true)
+    @ApiModelProperty(value = "上课日期")
     private String classDate;
 
-    @ApiModelProperty(value = "上课时间",required = true)
+    @ApiModelProperty(value = "上课时间")
     private String classTime;
 
-    @ApiModelProperty(value = "声部名称",required = true)
+    @ApiModelProperty(value = "声部名称")
     private List<String> subjectName;
 
-    @ApiModelProperty(value = "上课老师",required = true)
+    @ApiModelProperty(value = "上课老师")
     private String teacher;
+
+    @ApiModelProperty(value = "最后提交时间")
+    @DateTimeFormat(pattern = "MM-dd HH:mm")
+    private Date lastCommitDate;
+
+    @ApiModelProperty(value = "到课比")
+    private String attendanceRate;
+
+    @ApiModelProperty(value = "请假人数")
+    private Integer leaveNum;
 }

+ 12 - 6
mec-education/src/main/java/com/ym/mec/education/resp/StudentAttendanceResq.java → mec-education/src/main/java/com/ym/mec/education/resp/StudentAttendanceResp.java

@@ -16,20 +16,26 @@ import java.util.List;
 @Data
 @ApiModel(description = "考勤出参")
 @Accessors(chain = true)
-public class StudentAttendanceResq implements Serializable {
+public class StudentAttendanceResp implements Serializable {
 
-    @ApiModelProperty(value = "上课日期", required = true)
+    @ApiModelProperty(value = "上课日期")
     private String classDate;
 
-    @ApiModelProperty(value = "上课时间", required = true)
+    @ApiModelProperty(value = "上课时间")
     private String classTime;
 
-    @ApiModelProperty(value = "声部名称",required = true)
+    @ApiModelProperty(value = "声部名称")
     private List<String> subjectName;
 
-    @ApiModelProperty(value = "到课比", required = true)
+    @ApiModelProperty(value = "到课比")
     private String attendanceRate;
 
-    @ApiModelProperty(value = "请假人数", required = true)
+    @ApiModelProperty(value = "请假人数")
     private Integer leaveNum;
+
+    @ApiModelProperty(value = "学生姓名")
+    private String studentName;
+
+    @ApiModelProperty(value = "考勤状态")
+    private String status;
 }

+ 14 - 0
mec-education/src/main/java/com/ym/mec/education/service/ICourseScheduleService.java

@@ -1,9 +1,11 @@
 package com.ym.mec.education.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ym.mec.education.base.BaseResponse;
 import com.ym.mec.education.base.PageResponse;
 import com.ym.mec.education.entity.CourseSchedule;
 import com.ym.mec.education.req.ClassGroupReq;
+import com.ym.mec.education.req.CourseScheduleReq;
 
 /**
  * <p>
@@ -15,5 +17,17 @@ import com.ym.mec.education.req.ClassGroupReq;
  */
 public interface ICourseScheduleService extends IService<CourseSchedule> {
 
+    /**
+     * 根据参数分页查询课程计划列表
+     * @param classGroupReq
+     * @return
+     */
     PageResponse getPage(ClassGroupReq classGroupReq);
+
+    /**
+     * 根据课程计划id获取课程计划详情
+     * @param courseScheduleReq
+     * @return
+     */
+    BaseResponse getInfo(CourseScheduleReq courseScheduleReq);
 }

+ 3 - 0
mec-education/src/main/java/com/ym/mec/education/service/IStudentAttendanceService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.ym.mec.education.base.PageResponse;
 import com.ym.mec.education.entity.StudentAttendance;
 import com.ym.mec.education.req.ClassGroupReq;
+import com.ym.mec.education.req.CourseScheduleReq;
 
 /**
  * <p>
@@ -17,4 +18,6 @@ public interface IStudentAttendanceService extends IService<StudentAttendance> {
 
     PageResponse getPage(ClassGroupReq classGroupReq);
 
+    PageResponse getPageByCourse(CourseScheduleReq courseScheduleReq);
+
 }

+ 69 - 8
mec-education/src/main/java/com/ym/mec/education/service/impl/CourseScheduleServiceImpl.java

@@ -5,22 +5,25 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
+import com.ym.mec.education.base.BaseResponse;
 import com.ym.mec.education.base.PageResponse;
-import com.ym.mec.education.entity.ClassGroup;
-import com.ym.mec.education.entity.ClassGroupTeacherMapper;
-import com.ym.mec.education.entity.CourseSchedule;
-import com.ym.mec.education.entity.SysUser;
+import com.ym.mec.education.entity.*;
+import com.ym.mec.education.enums.StudentAttendanceStatusEnum;
 import com.ym.mec.education.enums.TeachTypeEnum;
 import com.ym.mec.education.mapper.CourseScheduleMapper;
 import com.ym.mec.education.req.ClassGroupReq;
+import com.ym.mec.education.req.CourseScheduleReq;
 import com.ym.mec.education.resp.CourseScheduleResp;
 import com.ym.mec.education.service.*;
 import com.ym.mec.education.utils.DateUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 
 /**
  * <p>
@@ -41,6 +44,8 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleMapper,
     private ISysUserService sysUserService;
     @Autowired
     private ISubjectService subjectService;
+    @Autowired
+    private IStudentAttendanceService studentAttendanceService;
 
     @Override
     public PageResponse getPage(ClassGroupReq classGroupReq) {
@@ -54,10 +59,20 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleMapper,
         ClassGroup classGroup = groupService.getById(classGroupReq.getGroupId());
         courseScheduleIPage.getRecords().forEach(item -> {
             CourseScheduleResp courseScheduleResp = new CourseScheduleResp();
-            courseScheduleResp.setClassDate(DateUtil.date2String(item.getClassDate())
-                    + " " + DateUtil.date2Week(item.getClassDate()))
-                    .setClassTime(DateUtil.time2String(item.getStartClassTime()) + "-" + DateUtil.time2String(item.getEndClassTime()))
-                    .setSubjectName(subjectService.getSubjectNameList(classGroup.getSubjectIdList()));
+            if (Objects.nonNull(item.getClassDate())) {
+                courseScheduleResp.setClassDate(DateUtil.date2String(item.getClassDate())
+                        + " " + DateUtil.date2Week(item.getClassDate()));
+            }
+            if (Objects.nonNull(item.getStartClassTime()) && Objects.nonNull(item.getEndClassTime())) {
+                courseScheduleResp.setClassTime(DateUtil.time2String(item.getStartClassTime()) + "-" +
+                        DateUtil.time2String(item.getEndClassTime()));
+            }
+            if (StringUtils.isNotBlank(classGroup.getSubjectIdList())) {
+                List<String> subjectNameList = subjectService.getSubjectNameList(classGroup.getSubjectIdList());
+                if (!CollectionUtils.isEmpty(subjectNameList)) {
+                    courseScheduleResp.setSubjectName(subjectNameList);
+                }
+            }
             QueryWrapper<ClassGroupTeacherMapper> classGroupTeacherMapperQueryWrapper = new QueryWrapper<>();
             classGroupTeacherMapperQueryWrapper.lambda().eq(true, ClassGroupTeacherMapper::getClassGroupId, item.getClassGroupId())
                     .eq(true, ClassGroupTeacherMapper::getTeacherRole, TeachTypeEnum.BISHOP.getCode());
@@ -73,4 +88,50 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleMapper,
         pageResult.setRecords(courseScheduleRespList);
         return PageResponse.success(pageResult);
     }
+
+    @Override
+    public BaseResponse<CourseScheduleResp> getInfo(CourseScheduleReq courseScheduleReq) {
+        CourseSchedule courseSchedule = getById(courseScheduleReq.getCourseScheduleId());
+        CourseScheduleResp courseScheduleResp = new CourseScheduleResp();
+        if (Objects.nonNull(courseSchedule)) {
+            if (Objects.nonNull(courseSchedule.getClassDate())) {
+                courseScheduleResp.setClassDate(DateUtil.date2String(courseSchedule.getClassDate()) + "(" +
+                        DateUtil.date2Week(courseSchedule.getClassDate()) + ")");
+            }
+            if (Objects.nonNull(courseSchedule.getStartClassTime()) &&
+                    Objects.nonNull(courseSchedule.getEndClassTime())) {
+                courseScheduleResp.setClassTime(DateUtil.time2String(courseSchedule.getStartClassTime()) + "-" +
+                        DateUtil.time2String(courseSchedule.getEndClassTime()));
+            }
+            if (Objects.nonNull(courseSchedule.getTeacherId())) {
+                Optional.of(sysUserService.getById(courseSchedule.getTeacherId())).
+                        ifPresent(sysUser -> courseScheduleResp.setTeacher(sysUser.getRealName()));
+            }
+            QueryWrapper<StudentAttendance> studentAttendanceQueryWrapper = new QueryWrapper<>();
+            studentAttendanceQueryWrapper.lambda().eq(true, StudentAttendance::getCourseScheduleId, courseScheduleReq.getCourseScheduleId())
+                    .orderByDesc(true, StudentAttendance::getCreateTime);
+            List<StudentAttendance> studentAttendanceList = studentAttendanceService.list(studentAttendanceQueryWrapper);
+            if (!CollectionUtils.isEmpty(studentAttendanceList)) {
+                studentAttendanceList.stream().findFirst().ifPresent(studentAttendance ->
+                        courseScheduleResp.setLastCommitDate(studentAttendance.getCreateTime()));
+            }
+            QueryWrapper<StudentAttendance> leaveWrapper = new QueryWrapper<>();
+            QueryWrapper<StudentAttendance> normalWrapper = new QueryWrapper<>();
+            //总人数
+            Integer totalCount = count();
+            //请假
+            leaveWrapper.lambda().eq(true, StudentAttendance::getCourseScheduleId, courseScheduleReq.getCourseScheduleId())
+                    .eq(true, StudentAttendance::getStatus, StudentAttendanceStatusEnum.LEAVE.getCode());
+            Integer leaveCount = studentAttendanceService.count(leaveWrapper);
+            //正常
+            normalWrapper.lambda().eq(true, StudentAttendance::getCourseScheduleId, courseScheduleReq.getCourseScheduleId())
+                    .eq(true, StudentAttendance::getStatus, StudentAttendanceStatusEnum.NORMAL.getCode());
+            Integer normalCount = studentAttendanceService.count(normalWrapper);
+            courseScheduleResp.setLeaveNum(leaveCount);
+            if (totalCount != 0) {
+                courseScheduleResp.setAttendanceRate(normalCount + "/" + totalCount);
+            }
+        }
+        return BaseResponse.success(courseScheduleResp);
+    }
 }

+ 45 - 12
mec-education/src/main/java/com/ym/mec/education/service/impl/StudentAttendanceServiceImpl.java

@@ -9,18 +9,19 @@ import com.ym.mec.education.base.PageResponse;
 import com.ym.mec.education.entity.ClassGroup;
 import com.ym.mec.education.entity.CourseSchedule;
 import com.ym.mec.education.entity.StudentAttendance;
+import com.ym.mec.education.entity.SysUser;
 import com.ym.mec.education.enums.StudentAttendanceStatusEnum;
 import com.ym.mec.education.mapper.StudentAttendanceMapper;
 import com.ym.mec.education.req.ClassGroupReq;
-import com.ym.mec.education.resp.StudentAttendanceResq;
-import com.ym.mec.education.service.IClassGroupService;
-import com.ym.mec.education.service.ICourseScheduleService;
-import com.ym.mec.education.service.IStudentAttendanceService;
-import com.ym.mec.education.service.ISubjectService;
+import com.ym.mec.education.req.CourseScheduleReq;
+import com.ym.mec.education.resp.StudentAttendanceResp;
+import com.ym.mec.education.service.*;
 import com.ym.mec.education.utils.DateUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 import java.util.List;
 import java.util.Objects;
 
@@ -41,6 +42,8 @@ public class StudentAttendanceServiceImpl extends ServiceImpl<StudentAttendanceM
     private IClassGroupService groupService;
     @Autowired
     private ISubjectService subjectService;
+    @Autowired
+    private ISysUserService userService;
 
     @Override
     public PageResponse getPage(ClassGroupReq classGroupReq) {
@@ -49,9 +52,9 @@ public class StudentAttendanceServiceImpl extends ServiceImpl<StudentAttendanceM
         queryWrapper.lambda().eq(Objects.nonNull(classGroupReq.getGroupId()),
                 StudentAttendance::getClassGroupId, classGroupReq.getGroupId());
         IPage<StudentAttendance> page = page(pageParam, queryWrapper);
-        IPage<StudentAttendanceResq> pageResult = new Page<>();
+        IPage<StudentAttendanceResp> pageResult = new Page<>();
         BeanUtils.copyProperties(page, pageResult);
-        List<StudentAttendanceResq> list = Lists.newArrayList();
+        List<StudentAttendanceResp> list = Lists.newArrayList();
         QueryWrapper<StudentAttendance> leaveWrapper = new QueryWrapper<>();
         QueryWrapper<StudentAttendance> normalWrapper = new QueryWrapper<>();
         //总人数
@@ -65,24 +68,54 @@ public class StudentAttendanceServiceImpl extends ServiceImpl<StudentAttendanceM
                 .eq(true, StudentAttendance::getStatus, StudentAttendanceStatusEnum.NORMAL.getCode());
         Integer normalCount = count(normalWrapper);
         page.getRecords().forEach(item -> {
-            StudentAttendanceResq studentAttendanceResq = new StudentAttendanceResq();
-            studentAttendanceResq.setLeaveNum(leaveCount).setAttendanceRate(normalCount + "/" + totalCount);
+            StudentAttendanceResp studentAttendanceResp = new StudentAttendanceResp();
+            studentAttendanceResp.setLeaveNum(leaveCount);
+            if (totalCount != 0) {
+                studentAttendanceResp.setAttendanceRate(normalCount + "/" + totalCount);
+            }
             QueryWrapper<CourseSchedule> courseScheduleQueryWrapper = new QueryWrapper<>();
             courseScheduleQueryWrapper.lambda().eq(true, CourseSchedule::getClassGroupId, classGroupReq.getGroupId())
                     .eq(true, CourseSchedule::getTeacherId, item.getTeacherId());
             CourseSchedule courseSchedule = courseScheduleService.getOne(courseScheduleQueryWrapper);
             if (Objects.nonNull(courseSchedule)) {
-                studentAttendanceResq.setClassDate(DateUtil.date2String(courseSchedule.getClassDate())
+                studentAttendanceResp.setClassDate(DateUtil.date2String(courseSchedule.getClassDate())
                         + " " + DateUtil.date2Week(courseSchedule.getClassDate()))
                         .setClassTime(courseSchedule.getStartClassTime() + "-" + courseSchedule.getEndClassTime());
             }
             ClassGroup classGroup = groupService.getById(classGroupReq.getGroupId());
             if (Objects.nonNull(classGroup)) {
-                studentAttendanceResq.setSubjectName(subjectService.getSubjectNameList(classGroup.getSubjectIdList()));
-                list.add(studentAttendanceResq);
+                studentAttendanceResp.setSubjectName(subjectService.getSubjectNameList(classGroup.getSubjectIdList()));
+                list.add(studentAttendanceResp);
             }
         });
         pageResult.setRecords(list);
         return PageResponse.success(pageResult);
     }
+
+    @Override
+    public PageResponse getPageByCourse(CourseScheduleReq courseScheduleReq) {
+        Page<StudentAttendanceResp> pageResult = new Page<>();
+        Page<StudentAttendance> studentAttendancePage = new Page<>(courseScheduleReq.getPageNo(), courseScheduleReq.getPageSize());
+        QueryWrapper<StudentAttendance> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(true, StudentAttendance::getCourseScheduleId, courseScheduleReq.getCourseScheduleId());
+        IPage<StudentAttendance> page = page(studentAttendancePage, queryWrapper);
+        if (!CollectionUtils.isEmpty(page.getRecords())) {
+            List<StudentAttendanceResp> list = Lists.newArrayList();
+            page.getRecords().forEach(item -> {
+                StudentAttendanceResp studentAttendanceResp = new StudentAttendanceResp();
+                if (Objects.nonNull(item.getUserId())) {
+                    SysUser user = userService.getById(item.getUserId());
+                    if (Objects.nonNull(user) && StringUtils.isNotBlank(user.getRealName())) {
+                        studentAttendanceResp.setStudentName(user.getRealName());
+                    }
+                }
+                if (StringUtils.isNotBlank(item.getStatus())) {
+                    studentAttendanceResp.setStatus(StudentAttendanceStatusEnum.getMsgByCode(item.getStatus()));
+                }
+                list.add(studentAttendanceResp);
+            });
+            pageResult.setRecords(list);
+        }
+        return PageResponse.success(pageResult);
+    }
 }