package com.guo.learningprogresstracker.entity; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.guo.learningprogresstracker.enums.StudySessionStateEnum; import lombok.Data; import lombok.extern.slf4j.Slf4j; import java.io.Serializable; import java.time.Duration; import java.time.LocalDateTime; /** * 记录每次学习会话的具体数据 * @TableName study_sessions */ @TableName(value ="study_sessions") @Slf4j @Data public class StudySessionsEntity extends BaseEntity implements Serializable { @TableId(type = IdType.AUTO) private Integer id; @TableField(value = "session_num") private String sessionNum; /** * */ @TableField(value = "task_num") private String taskNum; /** * 学习开始时间 */ @TableField(value = "start_time") private LocalDateTime startTime; @TableField(value = "last_start_time") private LocalDateTime lastStartTime; /** * 学习结束时间 */ @TableField(value = "end_time") private LocalDateTime endTime; /** * 实际使用时间(分钟) */ @TableField(value = "actual_time") private Integer actualTime; /** * 有效学习时间(分钟) */ @TableField(value = "effective_time") private Integer effectiveTime; /** * 有效时间比 */ @TableField(value = "effectiveness_ratio") private Double effectivenessRatio; /** * 学习会话的状态(进行中、暂停、已结束) */ @TableField(value = "session_state") private String sessionState; @TableField(exist = false) private static final long serialVersionUID = 1L; /** * 初始化新会话 * @return */ public static StudySessionsEntity initNewSession(){ StudySessionsEntity studySessionsEntity = new StudySessionsEntity(); studySessionsEntity.setStartTime(LocalDateTime.now()); studySessionsEntity.setLastModifiedTime(LocalDateTime.now()); studySessionsEntity.setSessionState(StudySessionStateEnum.ONGOING.name()); return studySessionsEntity; } /** * 继续会话 */ public void continueStudySession(){ if (this.getSessionState().equals(StudySessionStateEnum.PAUSED.name())){ this.setSessionState(StudySessionStateEnum.ONGOING.name()); this.setLastStartTime(LocalDateTime.now()); }else{ log.warn("不应出现的情况:开始了一个状态为【{}】的学习会话",this.getSessionState()); } } /** * 暂停会话 */ public void pausedStudySession(){ if (this.getSessionState().equals(StudySessionStateEnum.PAUSED.name())){ // }else { this.setEndTime(LocalDateTime.now()); this.setEffectiveTime((int) Duration.between(this.lastStartTime,this.endTime).toMinutes()); this.setActualTime((int) Duration.between(this.endTime,this.startTime).toMinutes()); this.setSessionState(StudySessionStateEnum.PAUSED.name()); } } }