116 lines
3.2 KiB
Java
116 lines
3.2 KiB
Java
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());
|
|
}
|
|
}
|
|
} |