Browse Source

处理签到接口

wuheng 1 year ago
parent
commit
76a5f93ffe

+ 4 - 0
controller/pom.xml

@@ -58,6 +58,10 @@
             <version>${project.version}</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>com.github.pagehelper</groupId>
+            <artifactId>pagehelper-spring-boot-starter</artifactId>
+        </dependency>
     </dependencies>
 
     <dependencyManagement>

+ 13 - 3
controller/src/main/java/com/koobietech/eas/controller/EasArcTlsAttendanceController.java

@@ -4,6 +4,7 @@ import com.github.pagehelper.PageHelper;
 import com.koobietech.eas.common.result.JsonPageResult;
 import com.koobietech.eas.common.result.JsonResult;
 import com.koobietech.eas.common.result.PageDataResult;
+import com.koobietech.eas.dao.dto.AttendanceDto;
 import com.koobietech.eas.mbg.model.EasArcTlsAttendance;
 import com.koobietech.eas.service.EasArcTlsAttendanceService;
 import io.swagger.v3.oas.annotations.Operation;
@@ -23,10 +24,19 @@ public class EasArcTlsAttendanceController {
     @Resource
     private EasArcTlsAttendanceService easArcTlsAttendanceService;
 
-    @GetMapping("/getStudentList")
+    @PostMapping("/queryAttendance")
+    @Operation(summary = "综合查询签到打卡信息", description = "综合查询签到打卡信息")
+    public JsonPageResult queryAttendance(@RequestBody AttendanceDto dto,
+                                         @RequestParam Integer pageNum, @RequestParam Integer pageSize) {
+        PageHelper.startPage(pageNum, pageSize);
+        PageDataResult res =  easArcTlsAttendanceService.queryAttendance(dto);
+        return JsonPageResult.data(res);
+    }
+
+    @PostMapping("/getStudentList")
     @Operation(summary = "获取学生列表", description = "签到的时候会根据课表ID来获取学生列表(scheduleId)")
-    public JsonResult getStudentList(@RequestParam Long scheduleId) {
-        return JsonResult.data(easArcTlsAttendanceService.getStudentList(scheduleId));
+    public JsonResult getStudentList(@RequestBody AttendanceDto dto) {
+        return JsonResult.data(easArcTlsAttendanceService.getStudentList(dto));
     }
 
     @PostMapping("/query")

+ 7 - 1
controller/src/main/resources/application.yaml

@@ -35,4 +35,10 @@ eas:
   jwt-expires-date: 2
   password-sign-key: eas-key-password
 project:
-  path: ${user.home}/archivesFiles
+  path: ${user.home}/archivesFiles
+
+pagehelper:
+  helperDialect: mysql
+  reasonable: true
+  supportMethodsArguments: true
+  params: count=countSql

+ 25 - 0
dao/src/main/java/com/koobietech/eas/dao/dto/AttendanceDto.java

@@ -0,0 +1,25 @@
+package com.koobietech.eas.dao.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author lc
+ */
+@Data
+public class AttendanceDto {
+    private Integer id;
+    private Integer studentId;
+    private Integer month;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
+    private Date startTime;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
+    private Date endTime;
+    private Integer teacherId;
+    private Integer classId;
+    private String studentName;
+    private Integer roomName;
+    private Integer className;
+}

+ 14 - 0
dao/src/main/java/com/koobietech/eas/dao/mapper/AttendanceMapper.java

@@ -0,0 +1,14 @@
+package com.koobietech.eas.dao.mapper;
+
+import com.koobietech.eas.dao.dto.AttendanceDto;
+import com.koobietech.eas.dao.pojo.AttendancePojo;
+
+import java.util.List;
+
+/**
+ * @author lc
+ */
+public interface AttendanceMapper {
+    List<AttendancePojo> queryAttendance(AttendanceDto dto);
+    Long queryAttendanceCount(AttendanceDto dto);
+}

+ 32 - 0
dao/src/main/java/com/koobietech/eas/dao/pojo/AttendancePojo.java

@@ -0,0 +1,32 @@
+package com.koobietech.eas.dao.pojo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author lc
+ */
+@Data
+public class AttendancePojo {
+    private Integer id;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
+    private Date checkinDate;
+    private String morning;
+    private String afternoon;
+    private Integer month;
+    private Integer studentId;
+    private String type;
+    private String className;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
+    private Date startTime;
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
+    private Date endTime;
+    private String categoryName;
+    private String subjectsName;
+    private String studentName;
+    private String studentNumber;
+    private String teacherName;
+    private String roomName;
+}

+ 129 - 0
dao/src/main/resources/com/koobietech/eas/dao/mapper/AttendanceMapper.xml

@@ -0,0 +1,129 @@
+<?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.koobietech.eas.dao.mapper.AttendanceMapper">
+    <resultMap id="camelCaseResultMap" type="com.koobietech.eas.dao.pojo.AttendancePojo">
+        <result property="id" column="id"/>
+        <result property="checkinDate" column="checkin_date"/>
+        <result property="morning" column="morning"/>
+        <result property="afternoon" column="afternoon"/>
+        <result property="month" column="month"/>
+        <result property="studentId" column="student_id"/>
+        <result property="type" column="type"/>
+        <result property="className" column="class_name"/>
+        <result property="startTime" column="start_time"/>
+        <result property="endTime" column="end_time"/>
+        <result property="categoryName" column="category_name"/>
+        <result property="subjectsName" column="subjects_name"/>
+        <result property="studentName" column="student_name"/>
+        <result property="studentNumber" column="student_number"/>
+        <result property="teacherName" column="teacher_name"/>
+        <result property="roomName" column="room_name"/>
+    </resultMap>
+    <select id="queryAttendance" resultMap="camelCaseResultMap">
+        SELECT
+            eas_edu_schedule.id,
+            eas_arc_tls_attendance.checkin_date,
+            eas_arc_tls_attendance.morning,
+            eas_arc_tls_attendance.afternoon,
+            eas_arc_tls_attendance.`month`,
+            eas_edu_clt_relation.student_id,
+            eas_edu_clt_relation.type,
+            eas_edu_class.`name` AS class_name,
+            eas_edu_schedule.start_time,
+            eas_edu_schedule.end_time,
+            eas_edu_category.`name` AS category_name,
+            eas_edu_subjects.`name` AS subjects_name,
+            eas_sys_student.student_name,
+            eas_sys_student.student_number,
+            eas_sys_userinfo.relname AS teacher_name,
+            eas_edu_classroom.`name` AS room_name
+        FROM
+            eas_edu_clt_relation
+            LEFT JOIN eas_edu_class ON eas_edu_class.id = eas_edu_clt_relation.class_id
+            LEFT JOIN eas_edu_schedule ON eas_edu_schedule.class_id = eas_edu_class.id
+            LEFT JOIN eas_edu_category ON eas_edu_category.id = eas_edu_schedule.category_id
+            LEFT JOIN eas_edu_subjects ON eas_edu_subjects.id = eas_edu_schedule.subjects_id
+            LEFT JOIN eas_edu_classroom ON eas_edu_classroom.id = eas_edu_schedule.room_id
+            LEFT JOIN eas_sys_userinfo ON eas_sys_userinfo.id = eas_edu_schedule.teacher_id
+            LEFT JOIN eas_sys_student ON eas_sys_student.id = eas_edu_clt_relation.student_id
+            LEFT JOIN eas_arc_tls_attendance ON eas_arc_tls_attendance.schedule_id = eas_edu_schedule.id AND eas_arc_tls_attendance.student_number = eas_sys_student.student_number
+        WHERE 1 = 1
+        <if test="id != null and id > 0">
+            AND eas_edu_schedule.id = #{id}
+        </if>
+        <if test="studentId != null and studentId > 0">
+            AND eas_sys_student.id = #{studentId}
+        </if>
+        <if test="month != null and month > 0">
+            AND eas_arc_tls_attendance.`month` = #{month}
+        </if>
+        <if test="startTime != null">
+            AND eas_edu_schedule.start_time >= #{startTime}
+        </if>
+        <if test="endTime != null">
+            AND eas_edu_schedule.end_time &lt;= #{endTime}
+        </if>
+        <if test="teacherId != null and teacherId > 0">
+            AND eas_sys_userinfo.id = #{teacherId}
+        </if>
+        <if test="classId != null and classId > 0">
+            AND eas_edu_class.id = #{classId}
+        </if>
+        <if test="studentName != null and studentName != ''">
+            AND eas_sys_student.student_name = #{studentName}
+        </if>
+        <if test="roomName != null and roomName > 0">
+            AND eas_edu_classroom.id = #{roomName}
+        </if>
+        <if test="className != null and className > 0">
+            AND eas_edu_class.id = #{className}
+        </if>
+    </select>
+
+    <select id="queryAttendanceCount" resultType="long" >
+        SELECT
+            count(*) AS total
+        FROM
+        eas_edu_clt_relation
+        LEFT JOIN eas_edu_class ON eas_edu_class.id = eas_edu_clt_relation.class_id
+        LEFT JOIN eas_edu_schedule ON eas_edu_schedule.class_id = eas_edu_class.id
+        LEFT JOIN eas_edu_category ON eas_edu_category.id = eas_edu_schedule.category_id
+        LEFT JOIN eas_edu_subjects ON eas_edu_subjects.id = eas_edu_schedule.subjects_id
+        LEFT JOIN eas_edu_classroom ON eas_edu_classroom.id = eas_edu_schedule.room_id
+        LEFT JOIN eas_sys_userinfo ON eas_sys_userinfo.id = eas_edu_schedule.teacher_id
+        LEFT JOIN eas_sys_student ON eas_sys_student.id = eas_edu_clt_relation.student_id
+        LEFT JOIN eas_arc_tls_attendance ON eas_arc_tls_attendance.schedule_id = eas_edu_schedule.id AND eas_arc_tls_attendance.student_number = eas_sys_student.student_number
+        WHERE 1 = 1
+        <if test="id != null and id > 0">
+            AND eas_edu_schedule.id = #{id}
+        </if>
+        <if test="studentId != null and studentId > 0">
+            AND eas_sys_student.id = #{studentId}
+        </if>
+        <if test="month != null and month > 0">
+            AND eas_arc_tls_attendance.`month` = #{month}
+        </if>
+        <if test="startTime != null">
+            AND eas_edu_schedule.start_time >= #{startTime}
+        </if>
+        <if test="endTime != null">
+            AND eas_edu_schedule.end_time &lt;= #{endTime}
+        </if>
+        <if test="teacherId != null and teacherId > 0">
+            AND eas_sys_userinfo.id = #{teacherId}
+        </if>
+        <if test="classId != null and classId > 0">
+            AND eas_edu_class.id = #{classId}
+        </if>
+        <if test="studentName != null and studentName != ''">
+            AND eas_sys_student.student_name = #{studentName}
+        </if>
+        <if test="roomName != null and roomName > 0">
+            AND eas_edu_classroom.id = #{roomName}
+        </if>
+        <if test="className != null and className > 0">
+            AND eas_edu_class.id = #{className}
+        </if>
+    </select>
+
+</mapper>

+ 6 - 1
pom.xml

@@ -35,7 +35,7 @@
         <knife4j.version>4.1.0</knife4j.version>
         <easypoi.version>4.4.0</easypoi.version>
         <poi.version>5.0.0</poi.version>
-        <pagehelper.starter.version>1.3.1</pagehelper.starter.version>
+        <pagehelper.starter.version>1.4.6</pagehelper.starter.version>
         <pagehelper.version>5.2.1</pagehelper.version>
         <maven.compiler.plugin.version>3.8.1</maven.compiler.plugin.version>
         <captcha.version>1.3.0</captcha.version>
@@ -95,6 +95,11 @@
                 <artifactId>spring-boot-starter-security</artifactId>
                 <version>${spring-boot.version}</version>
             </dependency>
+            <dependency>
+                <groupId>com.github.pagehelper</groupId>
+                <artifactId>pagehelper-spring-boot-starter</artifactId>
+                <version>${pagehelper.starter.version}</version>
+            </dependency>
             <dependency>
                 <groupId>com.github.pagehelper</groupId>
                 <artifactId>pagehelper</artifactId>

+ 5 - 1
service/src/main/java/com/koobietech/eas/service/EasArcTlsAttendanceService.java

@@ -1,6 +1,8 @@
 package com.koobietech.eas.service;
 
 import com.koobietech.eas.common.result.PageDataResult;
+import com.koobietech.eas.dao.dto.AttendanceDto;
+import com.koobietech.eas.dao.pojo.AttendancePojo;
 import com.koobietech.eas.mbg.model.EasArcTlsAttendance;
 
 import java.util.List;
@@ -16,5 +18,7 @@ public interface EasArcTlsAttendanceService {
 
     boolean isExist(EasArcTlsAttendance attendance);
 
-    List<EasArcTlsAttendance> getStudentList(Long scheduleId);
+    List<AttendancePojo> getStudentList(AttendanceDto dto);
+
+    PageDataResult queryAttendance(AttendanceDto dto);
 }

+ 15 - 47
service/src/main/java/com/koobietech/eas/service/impl/EasArcTlsAttendanceServiceImpl.java

@@ -4,10 +4,12 @@ import cn.afterturn.easypoi.excel.ExcelExportUtil;
 import cn.afterturn.easypoi.excel.entity.ExportParams;
 import cn.hutool.core.bean.BeanUtil;
 import com.koobietech.eas.common.constant.FileType;
-import com.koobietech.eas.common.exception.EasException;
 import com.koobietech.eas.common.result.PageDataResult;
 import com.koobietech.eas.common.utils.SecurityManager;
 import com.koobietech.eas.dao.dto.ArchivesDto;
+import com.koobietech.eas.dao.dto.AttendanceDto;
+import com.koobietech.eas.dao.mapper.AttendanceMapper;
+import com.koobietech.eas.dao.pojo.AttendancePojo;
 import com.koobietech.eas.dao.pojo.EasArcTlsAttendancePojo;
 import com.koobietech.eas.mbg.mapper.*;
 import com.koobietech.eas.mbg.model.*;
@@ -21,7 +23,6 @@ import javax.annotation.Resource;
 import java.time.LocalDate;
 import java.time.ZoneOffset;
 import java.util.*;
-import java.util.stream.Collectors;
 
 /**
  * @author lc
@@ -53,6 +54,9 @@ public class EasArcTlsAttendanceServiceImpl implements EasArcTlsAttendanceServic
     @Resource
     EasEduSubjectsMapper easEduSubjectsMapper;
 
+    @Resource
+    AttendanceMapper attendanceMapper;
+
     @Override
     public PageDataResult query(EasArcTlsAttendance attendance) {
         EasArcTlsAttendanceExample easArcTlsAttendanceExample = new EasArcTlsAttendanceExample();
@@ -178,52 +182,16 @@ public class EasArcTlsAttendanceServiceImpl implements EasArcTlsAttendanceServic
     }
 
     @Override
-    public List<EasArcTlsAttendance> getStudentList(Long scheduleId) {
-        HashMap<String, EasArcTlsAttendance> attendanceHistory = new HashMap<>();
-        EasArcTlsAttendanceExample easArcTlsAttendanceExample = new EasArcTlsAttendanceExample();
-        easArcTlsAttendanceExample.createCriteria().andScheduleIdEqualTo(scheduleId.intValue());
-        List<EasArcTlsAttendance> easArcTlsAttendances = easArcTlsAttendanceMapper.selectByExample(easArcTlsAttendanceExample);
-        for (EasArcTlsAttendance attendance:  easArcTlsAttendances) {
-            attendanceHistory.put(attendance.getStudentNumber(), attendance);
-        }
-        // 根据课表ID查找EasEduSchedule表,获取班级ID
-        EasEduSchedule easEduSchedule = easEduScheduleMapper.selectByPrimaryKey(scheduleId);
-        Long classId = Optional.ofNullable(easEduSchedule)
-                .map(s -> Long.valueOf(s.getClassId()))
-                .orElseThrow(() -> new EasException("未查询到对应课表,请检查数据库", 9595));
-
-        // 根据班级ID查找EasEduCltRelation表,获取学生ID列表
-        EasEduCltRelationExample easEduCltRelationExample = new EasEduCltRelationExample();
-        easEduCltRelationExample.createCriteria().andClassIdEqualTo(classId);
-
-        // 查询EasEduCltRelation表,获取符合条件的学生ID列表
-        List<Long> studentIds = easEduCltRelationMapper.selectByExample(easEduCltRelationExample)
-                .stream()
-                .map(r -> Long.valueOf(r.getStudentId()))
-                .collect(Collectors.toList());
+    public List<AttendancePojo> getStudentList(AttendanceDto dto) {
+        List<AttendancePojo> attendancePojos = attendanceMapper.queryAttendance(dto);
+        return attendancePojos;
+    }
 
-        // 根据学生ID列表查询EasSysStudent表,获取学生信息
-        EasSysStudentExample easSysStudentExample = new EasSysStudentExample();
-        easSysStudentExample.createCriteria().andIdIn(studentIds);
-        List<EasSysStudent> easSysStudents = easSysStudentMapper.selectByExample(easSysStudentExample);
-        // 封装查询结果到PageData对象并返回
-        return easSysStudents.stream()
-                .map(s -> {
-                    EasArcTlsAttendance easArcTlsAttendance = new EasArcTlsAttendance();
-                    easArcTlsAttendance.setStudentNumber(s.getStudentNumber());
-                    easArcTlsAttendance.setStudentName(s.getStudentName());
-                    easArcTlsAttendance.setScheduleId( scheduleId.intValue() );
-                    easArcTlsAttendance.setCheckinDate( easEduSchedule.getStartTime() );
-                    if ( !Objects.isNull(attendanceHistory.get(s.getStudentNumber())) ) {
-                        easArcTlsAttendance.setAfternoon(attendanceHistory.get(s.getStudentNumber()).getAfternoon());
-                        easArcTlsAttendance.setMorning(attendanceHistory.get(s.getStudentNumber()).getMorning());
-                        easArcTlsAttendance.setCreateTime(attendanceHistory.get(s.getStudentNumber()).getCreateTime());
-                        easArcTlsAttendance.setModifyTime(attendanceHistory.get(s.getStudentNumber()).getModifyTime());
-                        easArcTlsAttendance.setCreateUid(attendanceHistory.get(s.getStudentNumber()).getCreateUid());
-                    }
-                    return easArcTlsAttendance;
-                })
-                .collect(Collectors.toList());
+    @Override
+    public PageDataResult queryAttendance(AttendanceDto dto) {
+        List<AttendancePojo> attendancePojos = attendanceMapper.queryAttendance(dto);
+        Long aLong = attendanceMapper.queryAttendanceCount(dto);
+        return PageDataResult.init(attendancePojos, aLong);
     }
 
     public boolean saveStudentAttendanceArchive(EasArcTlsAttendance attendance){