Jelajahi Sumber

网络教室考勤

zouxuan 3 tahun lalu
induk
melakukan
320b87ddad

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/StudentAttendanceDao.java

@@ -26,5 +26,6 @@ public interface StudentAttendanceDao extends BaseMapper<StudentAttendance>{
      * @return: com.yonge.cooleshow.biz.dal.vo.StudentAttendanceVo
 	 */
 	List<StudentAttendanceVo> selectPage(@Param("page") IPage page, @Param("param") StudentAttendanceSearch studentAttendance);
-	
+
+    StudentAttendance findByUserIdAndCourseId(@Param("userId") Long userId, @Param("scheduleId") Long scheduleId);
 }

+ 1 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherAttendanceDao.java

@@ -16,5 +16,6 @@ public interface TeacherAttendanceDao extends BaseMapper<TeacherAttendance> {
 
     int insertBatch(@Param("entities") List<TeacherAttendance> entities);
 
+    TeacherAttendance findByUserIdAndCourseId(@Param("userId") Long userId, @Param("scheduleId") Long scheduleId);
 }
 

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/StudentAttendanceService.java

@@ -2,6 +2,9 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.dao.StudentAttendanceDao;
+import com.yonge.cooleshow.biz.dal.dao.TeacherAttendanceDao;
+import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
 import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import com.yonge.cooleshow.biz.dal.vo.StudentAttendanceVo;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentAttendanceSearch;
@@ -13,6 +16,7 @@ import com.yonge.cooleshow.biz.dal.entity.StudentAttendance;
  * @date 2022-03-30
  */
 public interface StudentAttendanceService extends IService<StudentAttendance>  {
+	StudentAttendanceDao getDao();
 
 	/**
      * 查询详情
@@ -36,4 +40,10 @@ public interface StudentAttendanceService extends IService<StudentAttendance>  {
 	 * @return 考勤对象
 	 */
     StudentAttendance getByCourseTypeAndScheduleId(CourseScheduleEnum courseType, Long courseScheduleId);
+
+	//学员签到
+    StudentAttendance signIn(Long userId, CourseSchedule courseSchedule);
+
+	//学员签退
+	void signOut(Long userId, CourseSchedule courseSchedule);
 }

+ 7 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/TeacherAttendanceService.java

@@ -2,6 +2,7 @@ package com.yonge.cooleshow.biz.dal.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.dao.TeacherAttendanceDao;
+import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
 import com.yonge.cooleshow.biz.dal.entity.TeacherAttendance;
 
 /**
@@ -13,5 +14,11 @@ import com.yonge.cooleshow.biz.dal.entity.TeacherAttendance;
 public interface TeacherAttendanceService extends IService<TeacherAttendance> {
 
     TeacherAttendanceDao getDao();
+
+    //老师签到
+    TeacherAttendance signIn(Long userId, CourseSchedule courseSchedule);
+
+    //老师签退
+    void signOut(Long userId, CourseSchedule courseSchedule);
 }
 

+ 13 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImNetworkRoomServiceImpl.java

@@ -59,6 +59,10 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
     @Resource
     private MusicSheetAccompanimentService musicSheetAccompanimentService;
     @Resource
+    private StudentAttendanceService studentAttendanceService;
+    @Resource
+    private TeacherAttendanceService teacherAttendanceService;
+    @Resource
     private RedisTemplate<String,Object> redisTemplate;
 
     private String QUIT_ROOM_SUCCESS = "quitRoomSuccess:";
@@ -143,14 +147,16 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
     @Transactional(rollbackFor = Exception.class)
     public void joinRoomSuccess(String roomId,Long userId) throws Exception {
         log.info("joinRoomSuccess: roomId={}, userId={}", roomId, userId);
-        Long teacherId = Optional.ofNullable(courseScheduleService.getById(roomId)).
-                map(CourseSchedule::getTeacherId).
+        CourseSchedule courseSchedule = Optional.ofNullable(courseScheduleService.getById(roomId)).
                 orElseThrow(()->new BizException("房间信息不存在"));
         BasicUserInfo sysUser = Optional.ofNullable(teacherDao.getBasicUserInfo(userId)).
                 orElseThrow(()-> new BizException("用户信息不存在"));
         UserRoleEnum userRole = UserRoleEnum.STUDENT;
-        if(Objects.equals(teacherId,userId)){
+        if(Objects.equals(courseSchedule.getTeacherId(),userId)){
             userRole = UserRoleEnum.TEACHER;
+            teacherAttendanceService.signIn(userId,courseSchedule);
+        }else {
+            studentAttendanceService.signIn(userId,courseSchedule);
         }
         Date now = new Date();
         //获取房间信息
@@ -159,7 +165,6 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
         ImNetworkRoomMember roomMember = imNetworkRoomMemberService.initRoomMember(roomId,sysUser,userRole);
         //发送人员变动消息
         publishMemberChangedMessage(roomMember);
-        //记录考勤
     }
 
     //发送人员变动消息
@@ -202,8 +207,11 @@ public class ImNetworkRoomServiceImpl extends ServiceImpl<ImNetworkRoomDao, ImNe
         UserRoleEnum roleEnum = UserRoleEnum.STUDENT;
         if(Objects.equals(courseSchedule.getTeacherId(),userId)){
             roleEnum = UserRoleEnum.TEACHER;
+            teacherAttendanceService.signOut(userId,courseSchedule);
+        }else {
+            //记录考勤签退
+            studentAttendanceService.signOut(userId,courseSchedule);
         }
-        //记录考勤信息
         ImNetworkRoom room = baseMapper.findByRoomId(roomId);
         if (roleEnum == UserRoleEnum.TEACHER){
             //如果老师退出房间,关闭伴奏

+ 59 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentAttendanceServiceImpl.java

@@ -2,6 +2,9 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.biz.dal.dao.TeacherAttendanceDao;
+import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
+import com.yonge.cooleshow.biz.dal.entity.TeacherAttendance;
 import com.yonge.cooleshow.biz.dal.enums.CourseScheduleEnum;
 import org.springframework.stereotype.Service;
 import com.yonge.cooleshow.biz.dal.entity.StudentAttendance;
@@ -9,14 +12,22 @@ import com.yonge.cooleshow.biz.dal.vo.StudentAttendanceVo;
 import com.yonge.cooleshow.biz.dal.dto.search.StudentAttendanceSearch;
 import com.yonge.cooleshow.biz.dal.dao.StudentAttendanceDao;
 import com.yonge.cooleshow.biz.dal.service.StudentAttendanceService;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 
 @Service
 public class StudentAttendanceServiceImpl extends ServiceImpl<StudentAttendanceDao, StudentAttendance> implements StudentAttendanceService {
 
+    @Override
+    public StudentAttendanceDao getDao() {
+        return this.baseMapper;
+    }
+
 	@Override
     public StudentAttendanceVo detail(Long id) {
         StudentAttendanceVo detail = baseMapper.detail(id);
@@ -40,4 +51,52 @@ public class StudentAttendanceServiceImpl extends ServiceImpl<StudentAttendanceD
         return null;
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public StudentAttendance signIn(Long userId, CourseSchedule courseSchedule) {
+        //查询是否已经签到
+        //如果存在则跳过,如果不存在则新增
+        StudentAttendance studentAttendance = getDao().findByUserIdAndCourseId(userId, courseSchedule.getId());
+        if (Objects.nonNull(studentAttendance)) {
+            if(Objects.isNull(studentAttendance.getSignInTime())){
+                studentAttendance.setSignInTime(new Date());
+                getDao().updateById(studentAttendance);
+            }
+            return studentAttendance;
+        }
+        Date now = new Date();
+        studentAttendance = createAttendance(userId, courseSchedule, now);
+        getDao().insert(studentAttendance);
+        return studentAttendance;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void signOut(Long userId, CourseSchedule courseSchedule) {
+        //更新签到记录
+        StudentAttendance studentAttendance = getDao().findByUserIdAndCourseId(userId, courseSchedule.getId());
+        Date now = new Date();
+        if (Objects.isNull(studentAttendance)) {
+            studentAttendance = createAttendance(userId, courseSchedule,now);
+            studentAttendance.setSignOutTime(now);
+            studentAttendance.setSignInTime(courseSchedule.getStartTime());
+            getDao().insert(studentAttendance);
+        }else {
+            studentAttendance.setSignOutTime(now);
+            studentAttendance.setUpdateTime(now);
+            getDao().updateById(studentAttendance);
+        }
+    }
+    private StudentAttendance createAttendance(Long userId, CourseSchedule courseSchedule,Date now) {
+        StudentAttendance studentAttendance = new StudentAttendance();
+        studentAttendance.setCourseScheduleId(courseSchedule.getId());
+        studentAttendance.setStudentId(userId);
+        studentAttendance.setSignInTime(now);
+        studentAttendance.setCourseGroupId(courseSchedule.getCourseGroupId());
+        studentAttendance.setCourseGroupType(courseSchedule.getType());
+        studentAttendance.setCreateTime(now);
+        studentAttendance.setUpdateTime(now);
+        return studentAttendance;
+    }
+
 }

+ 53 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/TeacherAttendanceServiceImpl.java

@@ -2,11 +2,17 @@ package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.dao.TeacherAttendanceDao;
+import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
 import com.yonge.cooleshow.biz.dal.entity.TeacherAttendance;
 import com.yonge.cooleshow.biz.dal.service.TeacherAttendanceService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.Objects;
+import java.util.Optional;
 
 /**
  * 老师考勤表(TeacherAttendance)表服务实现类
@@ -24,5 +30,52 @@ public class TeacherAttendanceServiceImpl extends ServiceImpl<TeacherAttendanceD
         return this.baseMapper;
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public TeacherAttendance signIn(Long userId, CourseSchedule courseSchedule) {
+        //查询是否已经签到
+        //如果存在则跳过,如果不存在则新增
+        TeacherAttendance teacherAttendance = getDao().findByUserIdAndCourseId(userId, courseSchedule.getId());
+        if (Objects.nonNull(teacherAttendance)) {
+            if(Objects.isNull(teacherAttendance.getSignInTime())){
+                teacherAttendance.setSignInTime(new Date());
+                getDao().updateById(teacherAttendance);
+            }
+            return teacherAttendance;
+        }
+        teacherAttendance = createAttendance(userId, courseSchedule,new Date());
+        getDao().insert(teacherAttendance);
+        return teacherAttendance;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void signOut(Long userId, CourseSchedule courseSchedule) {
+        //更新签到记录
+        TeacherAttendance teacherAttendance = getDao().findByUserIdAndCourseId(userId, courseSchedule.getId());
+        Date now = new Date();
+        if (Objects.isNull(teacherAttendance)) {
+            teacherAttendance = createAttendance(userId, courseSchedule, now);
+            teacherAttendance.setSignOutTime(teacherAttendance.getSignInTime());
+            teacherAttendance.setSignInTime(courseSchedule.getStartTime());
+            getDao().insert(teacherAttendance);
+        }else {
+            teacherAttendance.setSignOutTime(now);
+            teacherAttendance.setUpdateTime(now);
+            getDao().updateById(teacherAttendance);
+        }
+    }
+
+    private TeacherAttendance createAttendance(Long userId, CourseSchedule courseSchedule,Date now) {
+        TeacherAttendance teacherAttendance = new TeacherAttendance();
+        teacherAttendance.setCourseScheduleId(courseSchedule.getId());
+        teacherAttendance.setTeacherId(userId);
+        teacherAttendance.setSignInTime(now);
+        teacherAttendance.setCourseGroupId(courseSchedule.getCourseGroupId());
+        teacherAttendance.setCourseGroupType(courseSchedule.getType());
+        teacherAttendance.setCreateTime(now);
+        teacherAttendance.setUpdateTime(now);
+        return teacherAttendance;
+    }
 }
 

+ 4 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml

@@ -38,4 +38,8 @@
         	<include refid="baseColumns" />
 		FROM student_attendance t
 	</select>
+    <select id="findByUserIdAndCourseId" resultMap="BaseResultMap">
+        select * from student_attendance where student_id_ = #{userId} and
+        course_schedule_id_ = #{courseId} LIMIT 1
+    </select>
 </mapper>

+ 4 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml

@@ -29,5 +29,9 @@
             #{entity.signInTime}, #{entity.signOutTime}, #{entity.createTime}, #{entity.updateTime})
         </foreach>
     </insert>
+    <select id="findByUserIdAndCourseId" resultMap="BaseResultMap">
+        select <include refid="Base_Column_List" /> from teacher_attendance where teacher_id_ = #{userId} and
+        course_schedule_id_ = #{courseId} LIMIT 1
+    </select>
 
 </mapper>