| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- package com.njuzr.eaibackend.po;
- import lombok.Data;
- import org.springframework.data.annotation.Id;
- import org.springframework.data.mongodb.core.index.CompoundIndex;
- import org.springframework.data.mongodb.core.index.CompoundIndexes;
- import org.springframework.data.mongodb.core.mapping.Document;
- import org.springframework.data.mongodb.core.mapping.Field;
- import java.util.Date;
- import java.util.List;
- /**
- * @Auther: WuZilong
- * @Date: 2025/8/9 14:51
- * @Description:
- */
- @Data
- @Document(collection = "behaviorOverviews")
- @CompoundIndexes({
- // 复合唯一索引:确保 student_id + assignment_id 的业务唯一性
- @CompoundIndex(
- name = "student_assignment_unique",
- def = "{'student_id': 1, 'assignment_id': 1}",
- unique = true,
- background = true
- )
- })
- public class BehaviorOverview {
- @Id
- private String id; // MongoDB自动生成的ObjectId
- @Field("student_id")
- private Long studentId; // 学生ID
- @Field("assignment_id")
- private Long assignmentId; // 作业ID
- @Field("created_at")
- // @Indexed
- private Date createdAt; // (student_id,assignment_id)第一条记录的创建时间
- private List<BehaviorEvent> events; // 行为事件集合
-
- // 统计信息字段
- private Integer insertCount; // type为insert的次数
- private Integer deleteCount; // type为delete的次数
- private Integer copyCount; // type为copy的次数
- private Integer copyCharacterCount; // type为copy的所有条目中,insert字段对应的字符总数
- private Integer longPauseCount; // pauseTime大于2000ms的次数
- /**
- * 嵌套行为事件类
- */
- @Data
- public static class BehaviorEvent {
- // 基础事件信息(按JSON顺序排列)
- private String type; // 事件类型(cursor_move/insert/delete等)
- private Integer retain; // 光标位置
- private Integer length; // 操作长度
- private String time; // 事件时间(字符串格式)
- // 文本操作相关
- private String insert; // 插入的文本内容
- private Integer docLength; // 文档总长度
- private Integer letterCount; // 字母计数
- // 键盘输入相关
- private String key; // 按键值
- private String timeKey; // 按键时间
- // 时间戳信息
- private Long startStamp; // 开始时间戳
- private String startClock; // 开始时钟时间
- private String startTime; // 开始时间字符串
- // 结束时间信息
- private Long endStamp; // 结束时间戳
- private String endClock; // 结束时钟时间
- private String endTime; // 结束时间字符串
- // 时间统计
- private Long actionTime; // 操作耗时(毫秒)
- private Long pauseTime; // 停留时间(毫秒)
- // 删除操作相关
- private String delete; // 删除操作类型
- private String oldContent; // 旧内容
- private String deletedContent; // 删除的内容
- }
- }
|