Parcourir la source

Merge remote-tracking branch 'origin/master'

Joburgess il y a 5 ans
Parent
commit
39dec1872a
31 fichiers modifiés avec 613 ajouts et 570 suppressions
  1. 0 8
      edu-auth/edu-auth-server/src/main/resources/application.yml
  2. 0 6
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/controller/RoomController.java
  3. 0 11
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/dao/StudentAttendanceDao.java
  4. 0 12
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/dao/TeacherAttendanceDao.java
  5. 1 0
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/pojo/RoomMember.java
  6. 0 130
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/pojo/StudentAttendance.java
  7. 0 163
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/pojo/TeacherAttendance.java
  8. 18 103
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/service/Impl/RoomServiceImpl.java
  9. 0 15
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/service/Impl/StudentAttendanceServiceImpl.java
  10. 0 17
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/service/Impl/TeacherAttendanceServiceImpl.java
  11. 0 4
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/service/RoomService.java
  12. 0 6
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/service/StudentAttendanceService.java
  13. 0 6
      edu-im/edu-im-server/src/main/java/com/keao/edu/im/service/TeacherAttendanceService.java
  14. 0 8
      edu-im/edu-im-server/src/main/resources/application.yml
  15. 12 60
      edu-thirdparty/src/main/java/com/keao/edu/thirdparty/message/provider/JiguangPushPlugin.java
  16. 15 0
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/dao/StudentAttendanceDao.java
  17. 16 0
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/dao/TeacherAttendanceDao.java
  18. 15 0
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/StudentAttendanceService.java
  19. 16 0
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/TeacherAttendanceService.java
  20. 19 10
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/ExamRoomServiceImpl.java
  21. 48 0
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/StudentAttendanceServiceImpl.java
  22. 51 0
      edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/TeacherAttendanceServiceImpl.java
  23. 74 0
      edu-user/edu-user-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml
  24. 73 0
      edu-user/edu-user-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml
  25. 20 3
      edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/client/EduUserFeignService.java
  26. 11 0
      edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/client/fallback/EduUserFeignServiceFallback.java
  27. 63 0
      edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/entity/StudentAttendance.java
  28. 85 0
      edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/entity/TeacherAttendance.java
  29. 38 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/StudentAttendanceController.java
  30. 38 0
      edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/TeacherAttendanceController.java
  31. 0 8
      edu-user/edu-user-server/src/main/resources/application.yml

+ 0 - 8
edu-auth/edu-auth-server/src/main/resources/application.yml

@@ -96,12 +96,4 @@ logging:
 push:
   jiguang:
     reqURL: https://api.jpush.cn/v3/push
-    appKey:
-      student: 0e7422e1d6e73637e678716a
-      teacher: 7e0282ca92c12c8c45a93bb3
-      system: a003c997b1add94aa8d6caf9
-    masterSecret:
-      student: c2361016604eab56ab2db2ac
-      teacher: d47430e2f4755ef5dc050ac5
-      system: c281fe6a21acf2e8a9f9d628
     apns_production: false

+ 0 - 6
edu-im/edu-im-server/src/main/java/com/keao/edu/im/controller/RoomController.java

@@ -54,12 +54,6 @@ public class RoomController{
         return new BaseResponse<>();
     }*/
 
-    @RequestMapping(value = "/signIn", method = RequestMethod.POST)
-    public Object signIn(Long roomId){
-        roomService.signIn(roomId);
-        return new BaseResponse<>();
-    }
-
     @RequestMapping(value = "/joinGroup", method = RequestMethod.POST)
     public Object joinGroup(String userIds, String groupId, String groupName) throws Exception {
         roomService.joinGroup(userIds,groupId,groupName);

+ 0 - 11
edu-im/edu-im-server/src/main/java/com/keao/edu/im/dao/StudentAttendanceDao.java

@@ -1,11 +0,0 @@
-package com.keao.edu.im.dao;
-
-import com.keao.edu.im.pojo.StudentAttendance;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface StudentAttendanceDao extends JpaRepository<StudentAttendance, Long> {
-
-    StudentAttendance findByUserIdAndExaminationBasicIdAndExamRoomId(Integer userId,Integer basicId,Long roomId);
-}

+ 0 - 12
edu-im/edu-im-server/src/main/java/com/keao/edu/im/dao/TeacherAttendanceDao.java

@@ -1,12 +0,0 @@
-package com.keao.edu.im.dao;
-
-
-import com.keao.edu.im.pojo.TeacherAttendance;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface TeacherAttendanceDao extends JpaRepository<TeacherAttendance, Long> {
-
-    TeacherAttendance findByTeacherIdAndExaminationBasicIdAndExamRoomId(Integer teacherId,Integer basicId,Long roomId);
-}

+ 1 - 0
edu-im/edu-im-server/src/main/java/com/keao/edu/im/pojo/RoomMember.java

@@ -18,6 +18,7 @@ public class RoomMember {
 
     private @Getter @Setter String uid;
     private @Getter @Setter String rid;
+    private @Getter @Setter Long examRegistrationId;
     private @Getter @Setter String headUrl;
     private @Getter @Setter int role;
     private @Getter @Setter Date joinDt;

+ 0 - 130
edu-im/edu-im-server/src/main/java/com/keao/edu/im/pojo/StudentAttendance.java

@@ -1,130 +0,0 @@
-package com.keao.edu.im.pojo;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-
-import javax.persistence.*;
-
-/**
- * 对应数据库表(student_attendance):
- */
-@Entity
-@Table(name = "student_attendance")
-public class StudentAttendance {
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.IDENTITY)
-	private Long id;
-	
-	/** 课程计划 */
-	private Long examRoomId;
-
-	/** 课程计划 */
-	private Integer examinationBasicId;
-	
-	/**  */
-	private Integer userId;
-	
-	/** 签到状态(0正常1异常) */
-	private String signInStatus;
-	
-	/** 签退状态(0正常1异常) */
-	private String signOutStatus;
-	
-	/**  */
-	private java.util.Date createTime;
-	
-	/** 备注 */
-	private String remark;
-	
-	/**  */
-	private java.util.Date signInTime;
-	
-	/**  */
-	private java.util.Date signOutTime;
-
-	public Integer getExaminationBasicId() {
-		return examinationBasicId;
-	}
-
-	public void setExaminationBasicId(Integer examinationBasicId) {
-		this.examinationBasicId = examinationBasicId;
-	}
-
-	public void setId(Long id){
-		this.id = id;
-	}
-	
-	public Long getId(){
-		return this.id;
-	}
-			
-	public void setExamRoomId(Long examRoomId){
-		this.examRoomId = examRoomId;
-	}
-	
-	public Long getExamRoomId(){
-		return this.examRoomId;
-	}
-			
-	public void setUserId(Integer userId){
-		this.userId = userId;
-	}
-	
-	public Integer getUserId(){
-		return this.userId;
-	}
-			
-	public void setSignInStatus(String signInStatus){
-		this.signInStatus = signInStatus;
-	}
-	
-	public String getSignInStatus(){
-		return this.signInStatus;
-	}
-			
-	public void setSignOutStatus(String signOutStatus){
-		this.signOutStatus = signOutStatus;
-	}
-	
-	public String getSignOutStatus(){
-		return this.signOutStatus;
-	}
-			
-	public void setCreateTime(java.util.Date createTime){
-		this.createTime = createTime;
-	}
-	
-	public java.util.Date getCreateTime(){
-		return this.createTime;
-	}
-			
-	public void setRemark(String remark){
-		this.remark = remark;
-	}
-	
-	public String getRemark(){
-		return this.remark;
-	}
-			
-	public void setSignInTime(java.util.Date signInTime){
-		this.signInTime = signInTime;
-	}
-	
-	public java.util.Date getSignInTime(){
-		return this.signInTime;
-	}
-			
-	public void setSignOutTime(java.util.Date signOutTime){
-		this.signOutTime = signOutTime;
-	}
-	
-	public java.util.Date getSignOutTime(){
-		return this.signOutTime;
-	}
-			
-	@Override
-	public String toString() {
-		return ToStringBuilder.reflectionToString(this);
-	}
-
-}

+ 0 - 163
edu-im/edu-im-server/src/main/java/com/keao/edu/im/pojo/TeacherAttendance.java

@@ -1,163 +0,0 @@
-package com.keao.edu.im.pojo;
-
-import org.apache.commons.lang3.builder.ToStringBuilder;
-
-import javax.persistence.*;
-
-/**
- * 对应数据库表(teacher_attendance):
- */
-@Entity
-@Table(name = "teacher_attendance")
-public class TeacherAttendance {
-
-	@Id
-	@GeneratedValue(strategy = GenerationType.IDENTITY)
-	private Long id;
-	
-	/**  */
-	private Integer teacherId;
-	
-	/** 考场 */
-	private Long examRoomId;
-
-	/** 课程计划 */
-	private Integer examinationBasicId;
-	
-	/** 签到时间 */
-	private java.util.Date signInTime;
-	
-	/** 签到状态(0正常1异常) */
-	private String signInStatus;
-	
-	/** 备注 */
-	private String remark;
-	
-	/**  */
-	private java.util.Date createTime;
-	
-	/** 签退时间 */
-	private java.util.Date signOutTime;
-	
-	/** 签退状态(0正常1异常) */
-	private String signOutStatus;
-	
-	/** 经度 */
-	private String signInLongitudeLatitude;
-	
-	/** 纬度 */
-	private String signOutLongitudeLatitude;
-	
-	/** 机构编号 */
-	private String tenantId;
-
-	public Integer getExaminationBasicId() {
-		return examinationBasicId;
-	}
-
-	public void setExaminationBasicId(Integer examinationBasicId) {
-		this.examinationBasicId = examinationBasicId;
-	}
-
-	public void setId(Long id){
-		this.id = id;
-	}
-	
-	public Long getId(){
-		return this.id;
-	}
-			
-	public void setTeacherId(Integer teacherId){
-		this.teacherId = teacherId;
-	}
-	
-	public Integer getTeacherId(){
-		return this.teacherId;
-	}
-			
-	public void setExamRoomId(Long examRoomId){
-		this.examRoomId = examRoomId;
-	}
-	
-	public Long getExamRoomId(){
-		return this.examRoomId;
-	}
-			
-	public void setSignInTime(java.util.Date signInTime){
-		this.signInTime = signInTime;
-	}
-	
-	public java.util.Date getSignInTime(){
-		return this.signInTime;
-	}
-			
-	public void setSignInStatus(String signInStatus){
-		this.signInStatus = signInStatus;
-	}
-	
-	public String getSignInStatus(){
-		return this.signInStatus;
-	}
-			
-	public void setRemark(String remark){
-		this.remark = remark;
-	}
-	
-	public String getRemark(){
-		return this.remark;
-	}
-			
-	public void setCreateTime(java.util.Date createTime){
-		this.createTime = createTime;
-	}
-	
-	public java.util.Date getCreateTime(){
-		return this.createTime;
-	}
-			
-	public void setSignOutTime(java.util.Date signOutTime){
-		this.signOutTime = signOutTime;
-	}
-	
-	public java.util.Date getSignOutTime(){
-		return this.signOutTime;
-	}
-			
-	public void setSignOutStatus(String signOutStatus){
-		this.signOutStatus = signOutStatus;
-	}
-	
-	public String getSignOutStatus(){
-		return this.signOutStatus;
-	}
-			
-	public void setSignInLongitudeLatitude(String signInLongitudeLatitude){
-		this.signInLongitudeLatitude = signInLongitudeLatitude;
-	}
-	
-	public String getSignInLongitudeLatitude(){
-		return this.signInLongitudeLatitude;
-	}
-			
-	public void setSignOutLongitudeLatitude(String signOutLongitudeLatitude){
-		this.signOutLongitudeLatitude = signOutLongitudeLatitude;
-	}
-	
-	public String getSignOutLongitudeLatitude(){
-		return this.signOutLongitudeLatitude;
-	}
-			
-	public void setTenantId(String tenantId){
-		this.tenantId = tenantId;
-	}
-	
-	public String getTenantId(){
-		return this.tenantId;
-	}
-			
-	@Override
-	public String toString() {
-		return ToStringBuilder.reflectionToString(this);
-	}
-
-}

+ 18 - 103
edu-im/edu-im-server/src/main/java/com/keao/edu/im/service/Impl/RoomServiceImpl.java

@@ -10,7 +10,10 @@ import com.keao.edu.im.common.ApiException;
 import com.keao.edu.im.common.BaseResponse;
 import com.keao.edu.im.common.ErrorEnum;
 import com.keao.edu.im.config.IMProperties;
-import com.keao.edu.im.dao.*;
+import com.keao.edu.im.dao.RoomDao;
+import com.keao.edu.im.dao.RoomMemberDao;
+import com.keao.edu.im.dao.UserDao;
+import com.keao.edu.im.dao.WhiteboardDao;
 import com.keao.edu.im.job.ScheduleManager;
 import com.keao.edu.im.mec.im.IMHelper;
 import com.keao.edu.im.mec.im.message.*;
@@ -29,7 +32,6 @@ import com.keao.edu.util.date.DateUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
@@ -76,12 +78,6 @@ public class RoomServiceImpl implements RoomService {
     @Autowired
     private EduUserFeignService eduUserFeignService;
 
-    @Autowired
-    private TeacherAttendanceDao teacherAttendanceDao;
-
-    @Autowired
-    private StudentAttendanceDao studentAttendanceDao;
-
     @Override
     public void roomQuery(String roomId) throws Exception {
         imHelper.roomQuery(roomId);
@@ -157,7 +153,7 @@ public class RoomServiceImpl implements RoomService {
             throw new BizException("考级入口已关闭");
         }
         if (memberList.isEmpty()) {
-            saveRoomMember(userId,sysUser.getAvatar(), realName, recordedRoomId, Student.getValue(), true,true, date);
+            saveRoomMember(userId,sysUser.getAvatar(), realName, recordedRoomId, Student.getValue(), true,true, date,examRegistrationId);
             /*IMApiResultInfo resultInfo = imHelper.joinGroup(new String[]{userId}, recordedRoomId, recordedRoomId);
             if (!resultInfo.isSuccess()) {
                 throw new ApiException(ErrorEnum.ERR_CREATE_ROOM_ERROR, resultInfo.getErrorMessage());
@@ -284,7 +280,7 @@ public class RoomServiceImpl implements RoomService {
                 }
                 roleEnum = Student;
             }
-            saveRoomMember(userId,sysUser.getAvatar(), realName, roomId, roleEnum.getValue(), !isDisableCamera,!isMusicMode, curTime);
+            saveRoomMember(userId,sysUser.getAvatar(), realName, roomId, roleEnum.getValue(), !isDisableCamera,!isMusicMode, curTime,registrationId);
             /*IMApiResultInfo resultInfo = imHelper.joinGroup(new String[]{userId}, roomId, roomId);
             if (!resultInfo.isSuccess()) {
                 throw new ApiException(ErrorEnum.ERR_CREATE_ROOM_ERROR, resultInfo.getErrorMessage());
@@ -365,102 +361,13 @@ public class RoomServiceImpl implements RoomService {
                 eduUserFeignService.updateFinishedExam(registrationId,0);
             }
             this.publishMessage(eduUserFeignService.getPublishMessage(registrationId));
+            eduUserFeignService.upsetStudentAttendance(registrationId,0);
             imHelper.startRecord(userId, roomId, registrationId);
 //            eduUserFeignService.updateSessionId(registrationId,imApiResultInfo.getSessionId());
-        }
-        return baseResponse;
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
-    public void signIn(Long roomId) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        Integer userId = sysUser.getId();
-        log.info("roomSignIn: roomId={}, userId={}", roomId, userId);
-        ExamRoom examRoom = eduUserFeignService.getExamRoom(roomId.intValue());
-        Date date = new Date();
-        boolean isAssistant = false;
-        if (StringUtils.isNotEmpty(examRoom.getAssistantTeacherUserIdList())){
-            List<String> list = Arrays.asList(examRoom.getAssistantTeacherUserIdList().split(","));
-            if(list.contains(userId)){
-                isAssistant = true;
-            }
-        }
-        if(userId.equals(examRoom.getMainTeacherUserId()) || isAssistant){
-            TeacherAttendance attendance = teacherAttendanceDao.findByTeacherIdAndExaminationBasicIdAndExamRoomId(userId, examRoom.getExaminationBasicId().intValue(), examRoom.getId());
-            if(attendance != null){
-                return;
-            }
-            TeacherAttendance teacherAttendance = new TeacherAttendance();
-            teacherAttendance.setExamRoomId(examRoom.getId());
-            teacherAttendance.setSignInTime(date);
-            teacherAttendance.setTeacherId(userId);
-            teacherAttendance.setTenantId(examRoom.getTenantId());
-            teacherAttendance.setCreateTime(date);
-            teacherAttendance.setExaminationBasicId(examRoom.getExaminationBasicId().intValue());
-            teacherAttendanceDao.save(teacherAttendance);
-        }else {
-            StudentAttendance attendance = studentAttendanceDao.findByUserIdAndExaminationBasicIdAndExamRoomId(userId, examRoom.getExaminationBasicId().intValue(), examRoom.getId());
-            if(attendance != null){
-                return;
-            }
-            StudentAttendance studentAttendance = new StudentAttendance();
-            studentAttendance.setExamRoomId(examRoom.getId());
-            studentAttendance.setSignInTime(date);
-            studentAttendance.setUserId(userId);
-            studentAttendance.setCreateTime(date);
-            studentAttendance.setExaminationBasicId(examRoom.getExaminationBasicId().intValue());
-            studentAttendanceDao.save(studentAttendance);
-        }
-    }
-
-    @Override
-    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
-    public void signOut(Long roomId) {
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        Integer userId = sysUser.getId();
-        log.info("roomSignIn: roomId={}, userId={}", roomId, userId);
-        ExamRoom examRoom = eduUserFeignService.getExamRoom(roomId.intValue());
-        Date date = new Date();
-        boolean isAssistant = false;
-        if (StringUtils.isNotEmpty(examRoom.getAssistantTeacherUserIdList())){
-            List<String> list = Arrays.asList(examRoom.getAssistantTeacherUserIdList().split(","));
-            if(list.contains(userId)){
-                isAssistant = true;
-            }
-        }
-        if(userId.equals(examRoom.getMainTeacherUserId()) || isAssistant){
-            TeacherAttendance attendance = teacherAttendanceDao.findByTeacherIdAndExaminationBasicIdAndExamRoomId(userId, examRoom.getExaminationBasicId().intValue(), examRoom.getId());
-            if(attendance == null){
-                attendance = new TeacherAttendance();
-                attendance.setExamRoomId(examRoom.getId());
-                attendance.setSignInTime(date);
-                attendance.setSignOutTime(date);
-                attendance.setTeacherId(userId);
-                attendance.setTenantId(examRoom.getTenantId());
-                attendance.setCreateTime(date);
-                attendance.setExaminationBasicId(examRoom.getExaminationBasicId().intValue());
-                teacherAttendanceDao.save(attendance);
-            }else {
-                attendance.setSignOutTime(date);
-                teacherAttendanceDao.saveAndFlush(attendance);
-            }
         }else {
-            StudentAttendance attendance = studentAttendanceDao.findByUserIdAndExaminationBasicIdAndExamRoomId(userId, examRoom.getExaminationBasicId().intValue(), examRoom.getId());
-            if(attendance == null){
-                attendance = new StudentAttendance();
-                attendance.setExamRoomId(examRoom.getId());
-                attendance.setSignInTime(date);
-                attendance.setSignOutTime(date);
-                attendance.setUserId(userId);
-                attendance.setCreateTime(date);
-                attendance.setExaminationBasicId(examRoom.getExaminationBasicId().intValue());
-                studentAttendanceDao.save(attendance);
-            }else {
-                attendance.setSignOutTime(date);
-                studentAttendanceDao.saveAndFlush(attendance);
-            }
+            eduUserFeignService.upsetTeacherAttendance(examRoom.getId(),sysUser.getId(),0);
         }
+        return baseResponse;
     }
 
     private void saveRoom(String roomId, String roomName, Date createTime, String display) {
@@ -477,7 +384,7 @@ public class RoomServiceImpl implements RoomService {
         }
     }
 
-    private void saveRoomMember(String userId, String headUrl, String userName, String roomId, int role, boolean cameraOn,boolean musicModeOn, Date joinTime) {
+    private void saveRoomMember(String userId, String headUrl, String userName, String roomId, int role, boolean cameraOn,boolean musicModeOn, Date joinTime,Long examRegistrationId) {
         RoomMember roomMember = new RoomMember();
         roomMember.setUid(userId);
         roomMember.setName(userName);
@@ -487,6 +394,7 @@ public class RoomServiceImpl implements RoomService {
         roomMember.setJoinDt(joinTime);
         roomMember.setMusicMode(musicModeOn);
         roomMember.setHeadUrl(headUrl);
+        roomMember.setExamRegistrationId(examRegistrationId);
         roomMemberDao.save(roomMember);
     }
 
@@ -573,7 +481,10 @@ public class RoomServiceImpl implements RoomService {
 //        this.signOut(Long.parseLong(roomId));
 //        this.publishMessage(eduUserFeignService.getPublishMessage(registrationId));
         if(registrationId != null){
+            eduUserFeignService.upsetStudentAttendance(registrationId,1);
             imHelper.stopRecord(userId,roomId);
+        }else {
+            eduUserFeignService.upsetTeacherAttendance(Long.parseLong(roomId),Integer.parseInt(userId),1);
         }
         return true;
     }
@@ -773,10 +684,13 @@ public class RoomServiceImpl implements RoomService {
                 userDao.deleteByUid(e.getUid());
                 if("3".equals(e.getRid())){
                     try {
+                        eduUserFeignService.upsetStudentAttendance(e.getExamRegistrationId(),1);
                         imHelper.stopRecord(e.getUid(),e.getRid());
                     } catch (Exception e1) {
                         e1.printStackTrace();
                     }
+                }else {
+                    eduUserFeignService.upsetTeacherAttendance(Long.parseLong(e.getRid()),sysUser.getId(),1);
                 }
             });
             roomDao.deleteByRid(roomId.toString());
@@ -821,6 +735,7 @@ public class RoomServiceImpl implements RoomService {
             } else {
                 log.info("don't update display: room={}, userRole={}", roomId, RoleEnum.getEnumByValue(kickedUsers.get(0).getRole()));
             }*/
+            eduUserFeignService.upsetStudentAttendance(data.getRegistrationId(),1);
         }
         userDao.deleteByUid(data.getUserId());
         /*IMApiResultInfo apiResultInfo = imHelper.quit(new String[]{data.getUserId()}, roomId);

+ 0 - 15
edu-im/edu-im-server/src/main/java/com/keao/edu/im/service/Impl/StudentAttendanceServiceImpl.java

@@ -1,15 +0,0 @@
-package com.keao.edu.im.service.Impl;
-
-
-import com.keao.edu.im.dao.StudentAttendanceDao;
-import com.keao.edu.im.service.StudentAttendanceService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Service
-public class StudentAttendanceServiceImpl implements StudentAttendanceService {
-	
-	@Autowired
-	private StudentAttendanceDao studentAttendanceDao;
-	
-}

+ 0 - 17
edu-im/edu-im-server/src/main/java/com/keao/edu/im/service/Impl/TeacherAttendanceServiceImpl.java

@@ -1,17 +0,0 @@
-package com.keao.edu.im.service.Impl;
-
-
-import com.keao.edu.im.dao.TeacherAttendanceDao;
-import com.keao.edu.im.service.TeacherAttendanceService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-@Slf4j
-@Service
-public class TeacherAttendanceServiceImpl implements TeacherAttendanceService {
-	
-	@Autowired
-	private TeacherAttendanceDao teacherAttendanceDao;
-	
-}

+ 0 - 4
edu-im/edu-im-server/src/main/java/com/keao/edu/im/service/RoomService.java

@@ -16,16 +16,12 @@ public interface RoomService {
     //everyone
     public BaseResponse joinRoom(Long registrationId, boolean isAudience, boolean isDisableCamera, boolean isMusicMode, String roomId) throws ApiException, Exception;
 
-    void signIn(Long roomId);
-
     void roomQuery(String roomId) throws Exception;
 
     void startRecord(String roomId,String userId) throws Exception;
 
     void stopRecord(String roomId) throws Exception;
 
-    void signOut(Long roomId);
-
     public Boolean leaveRoom(Long registrationId,String userId,String roomId) throws ApiException, Exception;
 
     //only host

+ 0 - 6
edu-im/edu-im-server/src/main/java/com/keao/edu/im/service/StudentAttendanceService.java

@@ -1,6 +0,0 @@
-package com.keao.edu.im.service;
-
-
-public interface StudentAttendanceService{
-
-}

+ 0 - 6
edu-im/edu-im-server/src/main/java/com/keao/edu/im/service/TeacherAttendanceService.java

@@ -1,6 +0,0 @@
-package com.keao.edu.im.service;
-
-
-public interface TeacherAttendanceService {
-
-}

+ 0 - 8
edu-im/edu-im-server/src/main/resources/application.yml

@@ -122,12 +122,4 @@ message:
 push:
   jiguang:
     reqURL: https://api.jpush.cn/v3/push
-    appKey:
-      student: 0e7422e1d6e73637e678716a
-      teacher: 7e0282ca92c12c8c45a93bb3
-      system: a003c997b1add94aa8d6caf9
-    masterSecret:
-      student: c2361016604eab56ab2db2ac
-      teacher: d47430e2f4755ef5dc050ac5
-      system: c281fe6a21acf2e8a9f9d628
     apns_production: false

+ 12 - 60
edu-thirdparty/src/main/java/com/keao/edu/thirdparty/message/provider/JiguangPushPlugin.java

@@ -1,15 +1,5 @@
 package com.keao.edu.thirdparty.message.provider;
 
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.stream.Collectors;
-
-import org.apache.commons.codec.binary.Base64;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.keao.edu.thirdparty.exception.ThirdpartyException;
@@ -17,6 +7,15 @@ import com.keao.edu.thirdparty.message.MessageSenderPlugin;
 import com.keao.edu.thirdparty.message.MessageSenderPluginContext;
 import com.keao.edu.thirdparty.message.SendMode;
 import com.keao.edu.util.http.HttpUtil;
+import org.apache.commons.codec.binary.Base64;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.stream.Collectors;
 
 /**
  * 极光推送
@@ -24,25 +23,13 @@ import com.keao.edu.util.http.HttpUtil;
 @Service
 public class JiguangPushPlugin implements MessageSenderPlugin, InitializingBean {
 
-	@Value("${push.jiguang.appKey.student:1}")
-	private String studentAppKey;
-	@Value("${push.jiguang.masterSecret.student:1}")
-	private String studentMasterSecret;
+	private String appKey = "f72b2f373bb9d6e0bc8ae87f";
 
-	@Value("${push.jiguang.appKey.teacher:1}")
-	private String teacherAppKey;
-	@Value("${push.jiguang.masterSecret.teacher:1}")
-	private String teacherMasterSecret;
-
-	@Value("${push.jiguang.appKey.system:1}")
-	private String systemAppKey;
-	@Value("${push.jiguang.masterSecret.system:1}")
-	private String systemMasterSecret;
+	private String masterSecret = "163b2c136bb1d31ae3461299";
 
 	@Value("${push.jiguang.apns_production:false}")
 	private boolean apns_production = true; // 推送环境 True 表示推送生产环境,False 表示要推送开发环境
 
-	@Value("${push.jiguang.time_to_live:86400}")
 	private int time_to_live = 86400; // 离线保留时长 秒为单位 默认1天 最大10天
 
 	@Value("${push.jiguang.reqURL:https://api.jpush.cn/v3/push}")
@@ -128,18 +115,7 @@ public class JiguangPushPlugin implements MessageSenderPlugin, InitializingBean
 	 * @param content 推送内容
 	 */
 	private String push(String[] alias, String alert, String content, String url,String appClient) {
-		String base64_auth_string = "";
-		switch (appClient){
-			case "STUDENT":
-				base64_auth_string = encryptBASE64(this.studentAppKey + ":" + this.studentMasterSecret);
-				break;
-			case "TEACHER":
-				base64_auth_string = encryptBASE64(this.teacherAppKey + ":" + this.teacherMasterSecret);
-				break;
-			default:
-				base64_auth_string = encryptBASE64(this.systemAppKey + ":" + this.systemMasterSecret);
-				break;
-		}
+		String base64_auth_string = encryptBASE64(this.appKey + ":" + this.masterSecret);
 		String authorization = "Basic " + base64_auth_string;
 		return sendPostRequest(generateJson(alias, alert, content, url).toString(), authorization);
 	}
@@ -210,30 +186,6 @@ public class JiguangPushPlugin implements MessageSenderPlugin, InitializingBean
 		return true;
 	}
 
-	public void setStudentAppKey(String studentAppKey) {
-		this.studentAppKey = studentAppKey;
-	}
-
-	public void setStudentMasterSecret(String studentMasterSecret) {
-		this.studentMasterSecret = studentMasterSecret;
-	}
-
-	public void setTeacherAppKey(String teacherAppKey) {
-		this.teacherAppKey = teacherAppKey;
-	}
-
-	public void setTeacherMasterSecret(String teacherMasterSecret) {
-		this.teacherMasterSecret = teacherMasterSecret;
-	}
-
-	public void setSystemAppKey(String systemAppKey) {
-		this.systemAppKey = systemAppKey;
-	}
-
-	public void setSystemMasterSecret(String systemMasterSecret) {
-		this.systemMasterSecret = systemMasterSecret;
-	}
-
 	public void setApns_production(boolean apns_production) {
 		this.apns_production = apns_production;
 	}

+ 15 - 0
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/dao/StudentAttendanceDao.java

@@ -0,0 +1,15 @@
+package com.keao.edu.user.dao;
+
+import com.keao.edu.common.dal.BaseDAO;
+import com.keao.edu.user.api.entity.StudentAttendance;
+
+public interface StudentAttendanceDao extends BaseDAO<Long, StudentAttendance> {
+
+
+    /**
+     * 获取学员考勤
+     * @param examRegistrationId
+     * @return
+     */
+    StudentAttendance findByRegistrationId(Long examRegistrationId);
+}

+ 16 - 0
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/dao/TeacherAttendanceDao.java

@@ -0,0 +1,16 @@
+package com.keao.edu.user.dao;
+
+import com.keao.edu.common.dal.BaseDAO;
+import com.keao.edu.user.api.entity.TeacherAttendance;
+import org.apache.ibatis.annotations.Param;
+
+public interface TeacherAttendanceDao extends BaseDAO<Long, TeacherAttendance> {
+
+    /**
+     * 获取教师签到记录
+     * @param roomId
+     * @param userId
+     * @return
+     */
+    TeacherAttendance findByRoomIdAndTeacher(@Param("roomId") Long roomId, @Param("userId") Integer userId);
+}

+ 15 - 0
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/StudentAttendanceService.java

@@ -0,0 +1,15 @@
+package com.keao.edu.user.service;
+
+
+import com.keao.edu.common.service.BaseService;
+import com.keao.edu.user.api.entity.StudentAttendance;
+
+public interface StudentAttendanceService extends BaseService<Long, StudentAttendance> {
+
+    /**
+     * 更新学员考勤
+     * @param examRegistrationId
+     * @param signFlag
+     */
+    void upsetAttendance(Long examRegistrationId, Integer signFlag);
+}

+ 16 - 0
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/TeacherAttendanceService.java

@@ -0,0 +1,16 @@
+package com.keao.edu.user.service;
+
+
+import com.keao.edu.common.service.BaseService;
+import com.keao.edu.user.api.entity.TeacherAttendance;
+
+public interface TeacherAttendanceService extends BaseService<Long, TeacherAttendance> {
+
+    /**
+     * 更新教师考勤
+     * @param roomId
+     * @param userId
+     * @param signFlag
+     */
+    void upsetAttendance(Long roomId,Integer userId, Integer signFlag);
+}

+ 19 - 10
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/ExamRoomServiceImpl.java

@@ -800,23 +800,14 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 			String studentIds = examRoomStudentRelationService.getStudentIds(examRoomId);
 			StringBuffer stringBuffer = new StringBuffer();
 			stringBuffer.append(examRoom.getMainTeacherUserId());
+			ExaminationBasic examinationBasic = examinationBasicDao.get(examRoom.getExaminationBasicId());
 			if(StringUtils.isNotEmpty(studentIds)){
 				stringBuffer.append(",").append(studentIds);
-				List<ExamRoomStudentRelation> studentRelations = examRoomStudentRelationDao.findStudentsWithExamRoom(examRoomId);
-				ExaminationBasic examinationBasic = examinationBasicDao.get(examRoom.getExaminationBasicId());
-				studentRelations.forEach(e->{
-					Map<Integer, String> userPhoneMap = new HashMap<>(1);
-					userPhoneMap.put(e.getStudentId(),e.getStudentId().toString());
-					String notifyUrl = "3?examRegistrationId=" + e.getExamRegistrationId();
-					sysMessageService.batchSendMessage(MessageTypeEnum.ACTION_EXAM_SIGN_PUSH,
-							userPhoneMap, null, 0, notifyUrl, JiguangPushPlugin.PLUGIN_NAME,examinationBasic.getName());
-				});
 			}
 			if(StringUtils.isNotEmpty(examRoom.getAssistantTeacherUserIdList())){
 				stringBuffer.append(",").append(examRoom.getAssistantTeacherUserIdList());
 			}
 			imFeignService.joinGroup(stringBuffer.toString(),examRoomId.toString(),examRoomId.toString());
-
 			PublishMessageDto publishMessageDto = new PublishMessageDto();
 			publishMessageDto.setUserId(sysUser.getId().toString());
 			publishMessageDto.setRoomId(examRoomId.toString());
@@ -829,6 +820,24 @@ public class ExamRoomServiceImpl extends BaseServiceImpl<Long, ExamRoom> impleme
 			msg.setWebParamJson(JSONObject.toJSONString(paramMap));
 			publishMessageDto.setMemberChangedMessage(msg);
 			imFeignService.publishMessage(publishMessageDto);
+			if(StringUtils.isNotEmpty(studentIds)){
+				List<ExamRoomStudentRelation> studentRelations = examRoomStudentRelationDao.findStudentsWithExamRoom(examRoomId);
+				studentRelations.forEach(e->{
+					Map<Integer, String> userPhoneMap = new HashMap<>(1);
+					userPhoneMap.put(e.getStudentId(),e.getStudentId().toString());
+					String notifyUrl = "3?examRegistrationId=" + e.getExamRegistrationId();
+					sysMessageService.batchSendMessage(MessageTypeEnum.ACTION_EXAM_SIGN_PUSH,
+							userPhoneMap, null, 0, notifyUrl, JiguangPushPlugin.PLUGIN_NAME,examinationBasic.getName());
+				});
+			}
+			if(StringUtils.isNotEmpty(examRoom.getAssistantTeacherUserIdList())){
+				String[] split = examRoom.getAssistantTeacherUserIdList().split(",");
+				ArrayList<String> strings = new ArrayList<>(Arrays.asList(split));
+				Map<Integer, String> map = getMap("sys_user", "id_", "real_name_", strings, Integer.class, String.class);
+				//给助教老师发送短信提醒
+				sysMessageService.batchSendMessage(MessageTypeEnum.EXAM_ROOM_OPEN_SMS,
+						map,null,null,null,YimeiSmsPlugin.PLUGIN_NAME,examinationBasic.getName());
+			}
 		}else {
 			imFeignService.dismissGroup(sysUser.getId().toString(),examRoomId.toString());
 			imFeignService.destroyRoom(examRoomId);

+ 48 - 0
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/StudentAttendanceServiceImpl.java

@@ -0,0 +1,48 @@
+package com.keao.edu.user.service.impl;
+
+
+import com.keao.edu.common.dal.BaseDAO;
+import com.keao.edu.common.service.impl.BaseServiceImpl;
+import com.keao.edu.user.api.entity.StudentAttendance;
+import com.keao.edu.user.dao.StudentAttendanceDao;
+import com.keao.edu.user.service.StudentAttendanceService;
+import com.keao.edu.user.service.StudentExamResultService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+
+@Service
+public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentAttendance> implements StudentAttendanceService {
+	
+	@Autowired
+	private StudentAttendanceDao studentAttendanceDao;
+	@Autowired
+	private StudentExamResultService studentExamResultService;
+
+	@Override
+	public BaseDAO<Long, StudentAttendance> getDAO() {
+		return studentAttendanceDao;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class,isolation = Isolation.SERIALIZABLE)
+	public void upsetAttendance(Long examRegistrationId, Integer signFlag) {
+		StudentAttendance studentAttendance = studentAttendanceDao.findByRegistrationId(examRegistrationId);
+		Date date = new Date();
+		if(studentAttendance == null){
+			studentAttendance = new StudentAttendance();
+			studentAttendance.setExamRegistrationId(examRegistrationId);
+			studentAttendance.setSignInTime(date);
+		}
+		//0代表签到1签退
+		if(signFlag == 1){
+			studentAttendance.setSignOutTime(date);
+		}else {
+			studentAttendance.setSignInTime(date);
+		}
+		studentAttendanceDao.update(studentAttendance);
+	}
+}

+ 51 - 0
edu-user/edu-user-biz/src/main/java/com/keao/edu/user/service/impl/TeacherAttendanceServiceImpl.java

@@ -0,0 +1,51 @@
+package com.keao.edu.user.service.impl;
+
+
+import com.keao.edu.common.dal.BaseDAO;
+import com.keao.edu.common.service.impl.BaseServiceImpl;
+import com.keao.edu.user.api.entity.ExamRoom;
+import com.keao.edu.user.api.entity.TeacherAttendance;
+import com.keao.edu.user.dao.TeacherAttendanceDao;
+import com.keao.edu.user.service.ExamRoomService;
+import com.keao.edu.user.service.TeacherAttendanceService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+
+@Service
+public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherAttendance> implements TeacherAttendanceService {
+	
+	@Autowired
+	private TeacherAttendanceDao teacherAttendanceDao;
+	@Autowired
+	private ExamRoomService examRoomService;
+
+	@Override
+	public BaseDAO<Long, TeacherAttendance> getDAO() {
+		return teacherAttendanceDao;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class,isolation = Isolation.SERIALIZABLE)
+	public void upsetAttendance(Long roomId, Integer userId, Integer signFlag) {
+		TeacherAttendance teacherAttendance = teacherAttendanceDao.findByRoomIdAndTeacher(roomId,userId);
+		ExamRoom examRoom = examRoomService.get(roomId);
+		Date date = new Date();
+		if(teacherAttendance == null){
+			teacherAttendance = new TeacherAttendance();
+			teacherAttendance.setExamRoomId(roomId);
+			teacherAttendance.setExaminationBasicId(examRoom.getExaminationBasicId());
+			teacherAttendance.setSignInTime(date);
+			teacherAttendance.setTeacherId(userId);
+			teacherAttendanceDao.insert(teacherAttendance);
+		}
+		//0代表签到1签退
+		if(signFlag == 1){
+			teacherAttendance.setSignOutTime(date);
+			teacherAttendanceDao.update(teacherAttendance);
+		}
+	}
+}

+ 74 - 0
edu-user/edu-user-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml

@@ -0,0 +1,74 @@
+<?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.keao.edu.user.dao.StudentAttendanceDao">
+	
+	<resultMap type="com.keao.edu.user.api.entity.StudentAttendance" id="StudentAttendance">
+		<result column="id_" property="id" />
+		<result column="create_time_" property="createTime" />
+		<result column="sign_in_time_" property="signInTime" />
+		<result column="sign_out_time_" property="signOutTime" />
+		<result column="exam_registration_id_" property="examRegistrationId" />
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="StudentAttendance" >
+		SELECT * FROM student_attendance WHERE id_ = #{id} 
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="StudentAttendance">
+		SELECT * FROM student_attendance ORDER BY id_
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.keao.edu.user.api.entity.StudentAttendance" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!--
+		<selectKey resultClass="int" keyProperty="id" > 
+		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
+		</selectKey>
+		-->
+		INSERT INTO student_attendance (id_,exam_registration_id_,create_time_,sign_in_time_,sign_out_time_)
+		VALUES(#{id},#{examRegistrationId},#{createTime},#{signInTime},#{signOutTime})
+	</insert>
+	
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.keao.edu.user.api.entity.StudentAttendance">
+		UPDATE student_attendance <set>
+			<if test="examRegistrationId != null">
+				exam_registration_id_ = #{examRegistrationId},
+			</if>
+			<if test="signInTime != null">
+			sign_in_time_ = #{signInTime},
+			</if>
+			<if test="signOutTime != null">
+			sign_out_time_ = #{signOutTime},
+			</if>
+			<if test="createTime != null">
+			create_time_ = #{createTime},
+			</if>
+		</set> WHERE id_ = #{id}
+	</update>
+	
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM student_attendance WHERE id_ = #{id} 
+	</delete>
+	
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="StudentAttendance" parameterType="map">
+		SELECT * FROM student_attendance ORDER BY id_ <include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM student_attendance
+	</select>
+
+	<select id="findByRegistrationId" resultMap="StudentAttendance">
+		SELECT * FROM student_attendance WHERE exam_registration_id_ = #{examRegistrationId} LIMIT 1
+	</select>
+</mapper>

+ 73 - 0
edu-user/edu-user-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml

@@ -0,0 +1,73 @@
+<?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.keao.edu.user.dao.TeacherAttendanceDao">
+	
+	<resultMap type="com.keao.edu.user.api.entity.TeacherAttendance" id="TeacherAttendance">
+		<result column="id_" property="id" />
+		<result column="teacher_id_" property="teacherId" />
+		<result column="examination_basic_id" property="examinationBasicId" />
+		<result column="exam_room_id_" property="examRoomId" />
+		<result column="sign_in_time_" property="signInTime" />
+		<result column="create_time_" property="createTime" />
+		<result column="sign_out_time_" property="signOutTime" />
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="TeacherAttendance" >
+		SELECT * FROM teacher_attendance WHERE id_ = #{id} 
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="TeacherAttendance">
+		SELECT * FROM teacher_attendance ORDER BY id_
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.keao.edu.user.api.entity.TeacherAttendance" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		INSERT INTO teacher_attendance (id_,teacher_id_,exam_room_id_,sign_in_time_,examination_basic_id,create_time_,sign_out_time_)
+		VALUES(#{id},#{teacherId},#{examRoomId},#{signInTime},#{examinationBasicId},NOW(),#{signOutTime})
+	</insert>
+	
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.keao.edu.user.api.entity.TeacherAttendance">
+		UPDATE teacher_attendance <set>
+			<if test="examinationBasicId != null">
+				examination_basic_id = #{examinationBasicId},
+			</if>
+			<if test="signInTime != null">
+			sign_in_time_ = #{signInTime},
+			</if>
+			<if test="teacherId != null">
+			teacher_id_ = #{teacherId},
+			</if>
+			<if test="signOutTime != null">
+			sign_out_time_ = #{signOutTime},
+			</if>
+			<if test="examRoomId != null">
+			exam_room_id_ = #{examRoomId},
+			</if>
+		</set> WHERE id_ = #{id}
+	</update>
+	
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM teacher_attendance WHERE id_ = #{id} 
+	</delete>
+	
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="TeacherAttendance" parameterType="map">
+		SELECT * FROM teacher_attendance ORDER BY id_ <include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM teacher_attendance
+	</select>
+    <select id="findByRoomIdAndTeacher" resultMap="TeacherAttendance">
+		SELECT * FROM teacher_attendance WHERE exam_room_id = #{roomId} AND teacher_id = #{userId} LIMIT 1
+	</select>
+</mapper>

+ 20 - 3
edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/client/EduUserFeignService.java

@@ -2,15 +2,13 @@ package com.keao.edu.user.api.client;
 
 
 import com.keao.edu.common.config.FeignConfiguration;
-import com.keao.edu.common.entity.SysConfig;
+import com.keao.edu.common.entity.HttpResponseResult;
 import com.keao.edu.im.api.entity.PublishMessageDto;
 import com.keao.edu.user.api.client.fallback.EduUserFeignServiceFallback;
 import com.keao.edu.user.api.entity.ExamRoom;
 import com.keao.edu.user.api.entity.ExamRoomStudentRelation;
 import com.keao.edu.user.api.enums.StudentExamResultApiDto;
-import org.apache.ibatis.annotations.Param;
 import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 
@@ -81,4 +79,23 @@ public interface EduUserFeignService {
 	 */
 	@PostMapping(value = "studentExamResult/api/updateSessionId")
 	void updateSessionId(@RequestParam("examRegistrationId") Long examRegistrationId, @RequestParam("sessionId") String sessionId);
+
+	/**
+	 * 更新学员考勤
+	 * @param examRegistrationId
+	 * @param signFlag
+	 * @return
+	 */
+	@PostMapping(value = "studentAttendance/api/upsetStudentAttendance")
+	HttpResponseResult upsetStudentAttendance(@RequestParam("examRegistrationId") Long examRegistrationId,@RequestParam("signFlag") Integer signFlag);
+
+	/**
+	 * 更新教师考勤
+	 * @param roomId
+	 * @param userId
+	 * @param signFlag
+	 * @return
+	 */
+	@PostMapping(value = "teacherAttendance/api/upsetTeacherAttendance")
+	HttpResponseResult upsetTeacherAttendance(@RequestParam("roomId") Long roomId,@RequestParam("userId") Integer userId,@RequestParam("signFlag") Integer signFlag);
 }

+ 11 - 0
edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/client/fallback/EduUserFeignServiceFallback.java

@@ -1,5 +1,6 @@
 package com.keao.edu.user.api.client.fallback;
 
+import com.keao.edu.common.entity.HttpResponseResult;
 import com.keao.edu.im.api.entity.PublishMessageDto;
 import com.keao.edu.user.api.client.EduUserFeignService;
 import com.keao.edu.user.api.entity.ExamRoom;
@@ -49,4 +50,14 @@ public class EduUserFeignServiceFallback implements EduUserFeignService {
 	public void updateSessionId(Long examRegistrationId, String sessionId) {
 
 	}
+
+	@Override
+	public HttpResponseResult upsetStudentAttendance(Long examRegistrationId, Integer signFlag) {
+		return null;
+	}
+
+	@Override
+	public HttpResponseResult upsetTeacherAttendance(Long roomId, Integer userId, Integer signFlag) {
+		return null;
+	}
 }

+ 63 - 0
edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/entity/StudentAttendance.java

@@ -0,0 +1,63 @@
+package com.keao.edu.user.api.entity;
+
+import java.util.Date;
+
+/**
+ * 对应数据库表(student_attendance):
+ */
+public class StudentAttendance {
+
+	private Long id;
+
+	/** 课程计划 */
+	private Long examRegistrationId;
+
+	/**  */
+	private java.util.Date createTime;
+
+	/**  */
+	private java.util.Date signInTime;
+	
+	/**  */
+	private java.util.Date signOutTime;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Long getExamRegistrationId() {
+		return examRegistrationId;
+	}
+
+	public void setExamRegistrationId(Long examRegistrationId) {
+		this.examRegistrationId = examRegistrationId;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	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;
+	}
+}

+ 85 - 0
edu-user/edu-user-client-api/src/main/java/com/keao/edu/user/api/entity/TeacherAttendance.java

@@ -0,0 +1,85 @@
+package com.keao.edu.user.api.entity;
+
+import java.util.Date;
+
+/**
+ * 对应数据库表(teacher_attendance):
+ */
+public class TeacherAttendance {
+
+	private Long id;
+	
+	/**  */
+	private Integer teacherId;
+	
+	/** 考场 */
+	private Long examRoomId;
+
+	/** 课程计划 */
+	private Long examinationBasicId;
+	
+	/** 签到时间 */
+	private java.util.Date signInTime;
+
+	/** 签退时间 */
+	private java.util.Date signOutTime;
+
+	/**  */
+	private java.util.Date createTime;
+
+	public Date getSignOutTime() {
+		return signOutTime;
+	}
+
+	public void setSignOutTime(Date signOutTime) {
+		this.signOutTime = signOutTime;
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Integer getTeacherId() {
+		return teacherId;
+	}
+
+	public void setTeacherId(Integer teacherId) {
+		this.teacherId = teacherId;
+	}
+
+	public Long getExamRoomId() {
+		return examRoomId;
+	}
+
+	public void setExamRoomId(Long examRoomId) {
+		this.examRoomId = examRoomId;
+	}
+
+	public Long getExaminationBasicId() {
+		return examinationBasicId;
+	}
+
+	public void setExaminationBasicId(Long examinationBasicId) {
+		this.examinationBasicId = examinationBasicId;
+	}
+
+	public Date getSignInTime() {
+		return signInTime;
+	}
+
+	public void setSignInTime(Date signInTime) {
+		this.signInTime = signInTime;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+}

+ 38 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/StudentAttendanceController.java

@@ -0,0 +1,38 @@
+package com.keao.edu.user.controller;
+
+
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.common.page.QueryInfo;
+import com.keao.edu.user.api.entity.StudentAttendance;
+import com.keao.edu.user.service.StudentAttendanceService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("studentAttendance")
+@Api(tags = "学员考勤服务")
+public class StudentAttendanceController extends BaseController {
+
+	@Autowired
+	private StudentAttendanceService studentAttendanceService;
+	
+	@ApiOperation("分页查询")
+	@GetMapping(value = "/list")
+	public HttpResponseResult<PageInfo<StudentAttendance>> getList(QueryInfo queryInfo) {
+		return succeed(studentAttendanceService.queryPage(queryInfo));
+	}
+
+	@ApiOperation("更新学员考勤")
+	@PostMapping(value = "/api/upsetStudentAttendance")
+	public HttpResponseResult upsetAttendance(Long examRegistrationId,Integer signFlag) {
+		studentAttendanceService.upsetAttendance(examRegistrationId,signFlag);
+		return succeed();
+	}
+}

+ 38 - 0
edu-user/edu-user-server/src/main/java/com/keao/edu/user/controller/TeacherAttendanceController.java

@@ -0,0 +1,38 @@
+package com.keao.edu.user.controller;
+
+
+import com.keao.edu.common.controller.BaseController;
+import com.keao.edu.common.entity.HttpResponseResult;
+import com.keao.edu.common.page.PageInfo;
+import com.keao.edu.common.page.QueryInfo;
+import com.keao.edu.user.api.entity.TeacherAttendance;
+import com.keao.edu.user.service.TeacherAttendanceService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("teacherAttendance")
+@Api(tags = "教室考勤服务")
+public class TeacherAttendanceController extends BaseController {
+
+	@Autowired
+	private TeacherAttendanceService teacherAttendanceService;
+	
+	@ApiOperation("分页查询")
+	@GetMapping(value = "/list")
+	public HttpResponseResult<PageInfo<TeacherAttendance>> getList(QueryInfo queryInfo) {
+		return succeed(teacherAttendanceService.queryPage(queryInfo));
+	}
+
+	@ApiOperation("更新教师考勤")
+	@PostMapping(value = "/api/upsetTeacherAttendance")
+	public HttpResponseResult upsetAttendance(Long roomId,Integer userId,Integer signFlag) {
+		teacherAttendanceService.upsetAttendance(roomId,userId,signFlag);
+		return succeed();
+	}
+}

+ 0 - 8
edu-user/edu-user-server/src/main/resources/application.yml

@@ -117,12 +117,4 @@ logging:
 push:
   jiguang:
     reqURL: https://api.jpush.cn/v3/push
-    appKey:
-      student: 0e7422e1d6e73637e678716a
-      teacher: 7e0282ca92c12c8c45a93bb3
-      system: a003c997b1add94aa8d6caf9
-    masterSecret:
-      student: c2361016604eab56ab2db2ac
-      teacher: d47430e2f4755ef5dc050ac5
-      system: c281fe6a21acf2e8a9f9d628
     apns_production: false