فهرست منبع

Merge remote-tracking branch 'origin/master'

Joburgess 5 سال پیش
والد
کامیت
fe732d4116

+ 15 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherAttendanceDao.java

@@ -2,6 +2,7 @@ package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.dto.Mapper;
 import com.ym.mec.biz.dal.dto.TeacherAbnormalAttendanceInfoDto;
+import com.ym.mec.biz.dal.dto.TeacherAttendancesDto;
 import com.ym.mec.biz.dal.dto.TeacherPersonalAttendanceDto;
 import com.ym.mec.biz.dal.entity.TeacherAttendance;
 import com.ym.mec.biz.dal.enums.GroupType;
@@ -22,6 +23,13 @@ public interface TeacherAttendanceDao extends BaseDAO<Long, TeacherAttendance> {
      */
     List<TeacherPersonalAttendanceDto> getTeacherPersonalAttendances(Map<String,Object> params);
 
+    /**
+     * 获取教师签到列表
+     * @param params
+     * @return
+     */
+    List<TeacherAttendancesDto> queryTeacherAttendances(Map<String,Object> params);
+
     int batchInsert(@Param("teacherAttendances") List<TeacherAttendance> teacherAttendances);
 
     int batchDeleteByCourseSchedules(@Param("courseScheduleIds") List<Long> courseScheduleIds);
@@ -37,6 +45,13 @@ public interface TeacherAttendanceDao extends BaseDAO<Long, TeacherAttendance> {
     int getTeacherPersonalAttendancesCount(Map<String,Object> params);
 
     /**
+     * 获取教师签到列表
+     * @param params
+     * @return
+     */
+    int countTeacherAttendances(Map<String,Object> params);
+
+    /**
      * @Author: Joburgess
      * @Date: 2019/9/24
      * 统计课次

+ 166 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherAttendancesDto.java

@@ -0,0 +1,166 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.enums.CourseStatusEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+
+public class TeacherAttendancesDto {
+
+    @ApiModelProperty(value = "老师名",required = false)
+	private String teacherName;
+
+    @ApiModelProperty(value = "教师编号",required = false)
+    private Integer teacherId;
+
+    @ApiModelProperty(value = "课程编号",required = false)
+    private Long courseScheduleId;
+
+    @ApiModelProperty(value = "课程名",required = false)
+    private String courseScheduleName;
+
+    @ApiModelProperty(value = "课程状态",required = false)
+    private CourseStatusEnum courseScheduleStatus;
+
+    @ApiModelProperty(value = "上课日期",required = false)
+    private String classDate;
+
+    @ApiModelProperty(value = "上课时间",required = false)
+    private String startClassTime;
+
+    @ApiModelProperty(value = "结束时间",required = false)
+    private String endClassTime;
+
+    @ApiModelProperty(value = "课程类型",required = false)
+    private CourseSchedule.CourseScheduleType courseScheduleType;
+
+    @ApiModelProperty(value = "签到状态(1正常签到,0异常签到) ",required = false)
+    private Integer signInStatus;
+
+    /** 状态(正常签到,异常签到) */
+    @ApiModelProperty(value = "签退状态(1正常签到,0异常签到) ",required = false)
+    private Integer signOutStatus;
+
+    /** 备注 */
+    @ApiModelProperty(value = "备注",required = false)
+    private String remark;
+
+    @ApiModelProperty(value = "签到时间",required = false)
+    private Date signInTime;
+
+    @ApiModelProperty(value = "签退时间",required = false)
+    private Date signOutTime;
+
+    public String getClassDate() {
+        return classDate;
+    }
+
+    public void setClassDate(String classDate) {
+        this.classDate = classDate;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public Integer getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Integer teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public Long getCourseScheduleId() {
+        return courseScheduleId;
+    }
+
+    public void setCourseScheduleId(Long courseScheduleId) {
+        this.courseScheduleId = courseScheduleId;
+    }
+
+    public String getCourseScheduleName() {
+        return courseScheduleName;
+    }
+
+    public void setCourseScheduleName(String courseScheduleName) {
+        this.courseScheduleName = courseScheduleName;
+    }
+
+    public CourseStatusEnum getCourseScheduleStatus() {
+        return courseScheduleStatus;
+    }
+
+    public void setCourseScheduleStatus(CourseStatusEnum courseScheduleStatus) {
+        this.courseScheduleStatus = courseScheduleStatus;
+    }
+
+    public String getStartClassTime() {
+        return startClassTime;
+    }
+
+    public void setStartClassTime(String startClassTime) {
+        this.startClassTime = startClassTime;
+    }
+
+    public String getEndClassTime() {
+        return endClassTime;
+    }
+
+    public void setEndClassTime(String endClassTime) {
+        this.endClassTime = endClassTime;
+    }
+
+    public CourseSchedule.CourseScheduleType getCourseScheduleType() {
+        return courseScheduleType;
+    }
+
+    public void setCourseScheduleType(CourseSchedule.CourseScheduleType courseScheduleType) {
+        this.courseScheduleType = courseScheduleType;
+    }
+
+    public Integer getSignInStatus() {
+        return signInStatus;
+    }
+
+    public void setSignInStatus(Integer signInStatus) {
+        this.signInStatus = signInStatus;
+    }
+
+    public Integer getSignOutStatus() {
+        return signOutStatus;
+    }
+
+    public void setSignOutStatus(Integer signOutStatus) {
+        this.signOutStatus = signOutStatus;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public Date getSignInTime() {
+        return signInTime;
+    }
+
+    public void setSignInTime(Date signInTime) {
+        this.signInTime = signInTime;
+    }
+
+    public Date getSignOutTime() {
+        return signOutTime;
+    }
+
+    public void setSignOutTime(Date signOutTime) {
+        this.signOutTime = signOutTime;
+    }
+}

+ 0 - 22
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherPersonalAttendanceDto.java

@@ -3,8 +3,6 @@ package com.ym.mec.biz.dal.dto;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import io.swagger.annotations.ApiModelProperty;
 
-import java.util.Date;
-
 /**
  * @Author Joburgess
  * @Date 2019/9/16
@@ -33,10 +31,6 @@ public class TeacherPersonalAttendanceDto {
     @ApiModelProperty(value = "班级名称",required = false)
     private String name;
 
-    private Date signInTime;
-
-    private Date signOutTime;
-
     /** 状态(正常签到,异常签到) */
     @ApiModelProperty(value = "签到状态(1正常签到,0异常签到) ",required = false)
     private Integer signInStatus;
@@ -49,22 +43,6 @@ public class TeacherPersonalAttendanceDto {
     @ApiModelProperty(value = "备注",required = false)
     private String remark;
 
-    public Date getSignInTime() {
-        return signInTime;
-    }
-
-    public void setSignInTime(Date signInTime) {
-        this.signInTime = signInTime;
-    }
-
-    public Date getSignOutTime() {
-        return signOutTime;
-    }
-
-    public void setSignOutTime(Date signOutTime) {
-        this.signOutTime = signOutTime;
-    }
-
     public Integer getSignInStatus() {
         return signInStatus;
     }

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherCloseQueryInfo.java

@@ -25,6 +25,28 @@ public class TeacherCloseQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "签到状态")
     private String signInStatus;
 
+    @ApiModelProperty(value = "签退状态")
+    private String signOutStatus;
+
+    @ApiModelProperty(value = "分部")
+    private String organId;
+
+    public String getSignOutStatus() {
+        return signOutStatus;
+    }
+
+    public void setSignOutStatus(String signOutStatus) {
+        this.signOutStatus = signOutStatus;
+    }
+
+    public String getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(String organId) {
+        this.organId = organId;
+    }
+
     public String getSignInStatus() {
         return signInStatus;
     }

+ 6 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TeacherAttendanceService.java

@@ -44,6 +44,12 @@ public interface TeacherAttendanceService extends BaseService<Long, TeacherAtten
 	PageInfo getTeacherPersonalAttendances(TeacherCloseQueryInfo queryInfo);
 
 	/**
+	 * 获取教师个人的签到记录
+	 * @return
+	 */
+	PageInfo queryTeacherAttendances(TeacherCloseQueryInfo queryInfo);
+
+	/**
 	 * 推送未签退消息提醒
 	 * @return
 	 */

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -416,6 +416,26 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 	}
 
 	@Override
+	public PageInfo queryTeacherAttendances(TeacherCloseQueryInfo queryInfo) {
+		PageInfo<TeacherAttendancesDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<>();
+		MapUtil.populateMap(params, queryInfo);
+
+		List<TeacherAttendancesDto> dataList = null;
+		int count = teacherAttendanceDao.countTeacherAttendances(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = teacherAttendanceDao.queryTeacherAttendances(params);
+		}
+		if (count == 0) {
+			dataList = new ArrayList<>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
+
+	@Override
 	public boolean pushNoSignOutMessage() {
 
 		Integer minutes = Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.SIGN_OUT_MESSAGE_PUSH_MINUTE));;

+ 75 - 3
mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml

@@ -159,8 +159,6 @@
         <result column="class_date_" property="classDate"/>
         <result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="name_" property="name"/>
-        <result column="sign_in_time_" property="signInTime"/>
-        <result column="sign_out_time_" property="signOutTime"/>
         <result column="sign_in_status_" property="signInStatus"/>
         <result column="sign_out_status_" property="signOutStatus"/>
         <result column="remark_" property="remark"/>
@@ -168,6 +166,23 @@
         <result column="end_class_time_" property="endClassTime"/>
     </resultMap>
 
+    <resultMap id="TeacherAttendancesDto" type="com.ym.mec.biz.dal.dto.TeacherAttendancesDto">
+        <result column="class_date_" property="classDate"/>
+        <result column="start_class_time_" property="startClassTime"/>
+        <result column="end_class_time_" property="endClassTime"/>
+        <result column="course_schedule_type_" property="courseScheduleType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="course_schedule_status_" property="courseScheduleStatus" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="course_schedule_name_" property="courseScheduleName"/>
+        <result column="teacher_name_" property="teacherName"/>
+        <result column="teacher_id_" property="teacherId"/>
+        <result column="sign_in_status_" property="signInStatus"/>
+        <result column="sign_out_status_" property="signOutStatus"/>
+        <result column="sign_in_time_" property="signInTime"/>
+        <result column="sign_out_time_" property="signOutTime"/>
+        <result column="remark_" property="remark"/>
+        <result column="course_schedule_id_" property="courseScheduleId"/>
+    </resultMap>
+
     <sql id="queryCondition">
         <where>
             (cs.del_flag_ != 1 OR cs.del_flag_ IS NULL)
@@ -200,10 +215,42 @@
             </if>
         </where>
     </sql>
+    <sql id="queryTeacherAttendancesCondition">
+        <where>
+            (cs.del_flag_ != 1 OR cs.del_flag_ IS NULL) AND cs.actual_teacher_id_ = ta.teacher_id_
+            <if test="search != null and search != ''">
+                AND (su.id_ = #{search} OR su.real_name_ LIKE CONCAT('%',#{search},'%') OR cs.id_ = #{search} OR cs.name_ LIKE CONCAT('%',#{search},'%'))
+            </if>
+            <if test="courseStartDate != null">
+                AND cs.class_date_ &gt;= #{courseStartDate}
+            </if>
+            <if test="courseEndDate != null">
+                AND cs.class_date_ &lt;= #{courseEndDate}
+            </if>
+            <if test="signInStatus != null and signInStatus != '' and signInStatus != 3">
+                AND ta.sign_in_status_ = #{signInStatus}
+            </if>
+            <if test="signOutStatus != null and signOutStatus != '' and signOutStatus != 3">
+                AND ta.sign_out_status_ = #{signOutStatus}
+            </if>
+            <if test="signOutStatus != null and signOutStatus != '' and signOutStatus == 3">
+                AND ta.sign_out_status_ IS NULL
+            </if>
+            <if test="signInStatus != null and signInStatus != '' and signInStatus == 3">
+                AND ta.sign_in_status_ IS NULL
+            </if>
+            <if test="courseScheduleType != null">
+                AND cs.type_ = #{courseScheduleType}
+            </if>
+            <if test="organId != null and organId != ''">
+                AND FIND_IN_SET(t.organ_id_,#{organId})
+            </if>
+        </where>
+    </sql>
 
     <select id="getTeacherPersonalAttendances" parameterType="map" resultMap="teacherPersonalAttendance">
         SELECT
-            cs.class_date_,cs.start_class_time_,cs.name_,cs.type_,ta.sign_in_time_,ta.sign_out_time_,
+            cs.class_date_,cs.start_class_time_,cs.name_,cs.type_,
             IF(ta.sign_in_status_ IS NULL,3,ta.sign_in_status_) sign_in_status_,
             IF(ta.sign_out_status_ IS NULL,3,ta.sign_out_status_) sign_out_status_,
             ta.remark_,cs.id_,cs.end_class_time_
@@ -215,12 +262,37 @@
         <include refid="global.limit"/>
     </select>
 
+    <select id="queryTeacherAttendances" parameterType="map" resultMap="TeacherAttendancesDto">
+        SELECT su.real_name_ teacher_name_,su.id_ teacher_id_,ta.course_schedule_id_,cs.name_ course_schedule_name_,
+        cs.status_ course_schedule_status_,
+        cs.class_date_,cs.start_class_time_,cs.end_class_time_,cs.type_ course_schedule_type_,
+        IF(ta.sign_in_status_ IS NULL,3,ta.sign_in_status_) sign_in_status_,
+        IF(ta.sign_out_status_ IS NULL,3,ta.sign_out_status_) sign_out_status_,
+        ta.sign_in_time_,ta.sign_out_time_,ta.remark_
+        FROM course_schedule cs
+        LEFT JOIN teacher_attendance ta ON ta.course_schedule_id_ = cs.id_
+        LEFT JOIN teacher t ON t.id_ = ta.teacher_id_
+        LEFT JOIN sys_user su ON su.id_ = t.id_
+        <include refid="queryTeacherAttendancesCondition"/>
+        ORDER BY cs.class_date_ ASC,cs.start_class_time_ ASC
+        <include refid="global.limit"/>
+    </select>
+
     <select id="getTeacherPersonalAttendancesCount" resultType="int">
         SELECT count(cs.id_) FROM course_schedule cs LEFT JOIN teacher_attendance ta
         ON ta.course_schedule_id_=cs.id_
         <include refid="queryCondition"/>
     </select>
 
+    <select id="countTeacherAttendances" resultType="int">
+        SELECT COUNT(DISTINCT cs.id_)
+        FROM course_schedule cs
+        LEFT JOIN teacher_attendance ta ON ta.course_schedule_id_ = cs.id_
+        LEFT JOIN teacher t ON t.id_ = ta.teacher_id_
+        LEFT JOIN sys_user su ON su.id_ = t.id_
+        <include refid="queryTeacherAttendancesCondition"/>
+    </select>
+
     <select id="countClassTime" resultType="java.lang.Integer">
         SELECT COUNT(*) FROM teacher_attendance WHERE class_group_id_=#{classGroupId} FOR UPDATE
     </select>

+ 36 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TeacherAttendanceController.java

@@ -1,11 +1,16 @@
 package com.ym.mec.web.controller;
 
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.entity.Employee;
 import com.ym.mec.biz.dal.entity.TeacherAttendance;
 import com.ym.mec.biz.dal.page.TeacherCloseQueryInfo;
 import com.ym.mec.biz.service.TeacherAttendanceService;
 import com.ym.mec.common.controller.BaseController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -13,6 +18,9 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Arrays;
+import java.util.List;
+
 @RequestMapping("teacherAttendance")
 @Api(tags = "教师签到服务")
 @RestController
@@ -20,6 +28,10 @@ public class TeacherAttendanceController extends BaseController {
 
     @Autowired
     private TeacherAttendanceService teacherAttendanceService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private EmployeeDao employeeDao;
 
     @ApiOperation(value = "查询教师签到(上课)记录")
     @GetMapping("/getTeacherPersonalAttendances")
@@ -28,6 +40,30 @@ public class TeacherAttendanceController extends BaseController {
         return succeed(teacherAttendanceService.getTeacherPersonalAttendances(queryInfo));
     }
 
+    @ApiOperation(value = "获取教师考勤记录")
+    @PostMapping("/queryTeacherAttendances")
+    @PreAuthorize("@pcs.hasPermissions('teacherAttendance/queryTeacherAttendances')")
+    public Object queryTeacherAttendances(TeacherCloseQueryInfo queryInfo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeDao.get(sysUser.getId());
+            if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+                queryInfo.setOrganId(employee.getOrganIdList());
+            }else if(StringUtils.isEmpty(employee.getOrganIdList())){
+                return failed("用户所在分部异常");
+            }else {
+                List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+                if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
+                    return failed("非法请求");
+                }
+            }
+        }
+        return succeed(teacherAttendanceService.queryTeacherAttendances(queryInfo));
+    }
+
     @ApiOperation(value = "查询某节课教师签到记录")
     @GetMapping("/getTeacherPersonalAttendance")
     @PreAuthorize("@pcs.hasPermissions('teacherAttendance/getTeacherPersonalAttendance')")