BehaviorOverview.java 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package com.njuzr.eaibackend.po;
  2. import lombok.Data;
  3. import org.springframework.data.annotation.Id;
  4. import org.springframework.data.mongodb.core.index.CompoundIndex;
  5. import org.springframework.data.mongodb.core.index.CompoundIndexes;
  6. import org.springframework.data.mongodb.core.mapping.Document;
  7. import org.springframework.data.mongodb.core.mapping.Field;
  8. import java.util.Date;
  9. import java.util.List;
  10. /**
  11. * @Auther: WuZilong
  12. * @Date: 2025/8/9 14:51
  13. * @Description:
  14. */
  15. @Data
  16. @Document(collection = "behaviorOverviews")
  17. @CompoundIndexes({
  18. // 复合唯一索引:确保 student_id + assignment_id 的业务唯一性
  19. @CompoundIndex(
  20. name = "student_assignment_unique",
  21. def = "{'student_id': 1, 'assignment_id': 1}",
  22. unique = true,
  23. background = true
  24. )
  25. })
  26. public class BehaviorOverview {
  27. @Id
  28. private String id; // MongoDB自动生成的ObjectId
  29. @Field("student_id")
  30. private Long studentId; // 学生ID
  31. @Field("assignment_id")
  32. private Long assignmentId; // 作业ID
  33. @Field("created_at")
  34. // @Indexed
  35. private Date createdAt; // (student_id,assignment_id)第一条记录的创建时间
  36. private List<BehaviorEvent> events; // 行为事件集合
  37. // 统计信息字段
  38. private Integer insertCount; // type为insert的次数
  39. private Integer deleteCount; // type为delete的次数
  40. private Integer copyCount; // type为copy的次数
  41. private Integer copyCharacterCount; // type为copy的所有条目中,insert字段对应的字符总数
  42. private Integer longPauseCount; // pauseTime大于2000ms的次数
  43. /**
  44. * 嵌套行为事件类
  45. */
  46. @Data
  47. public static class BehaviorEvent {
  48. // 基础事件信息(按JSON顺序排列)
  49. private String type; // 事件类型(cursor_move/insert/delete等)
  50. private Integer retain; // 光标位置
  51. private Integer length; // 操作长度
  52. private String time; // 事件时间(字符串格式)
  53. // 文本操作相关
  54. private String insert; // 插入的文本内容
  55. private Integer docLength; // 文档总长度
  56. private Integer letterCount; // 字母计数
  57. // 键盘输入相关
  58. private String key; // 按键值
  59. private String timeKey; // 按键时间
  60. // 时间戳信息
  61. private Long startStamp; // 开始时间戳
  62. private String startClock; // 开始时钟时间
  63. private String startTime; // 开始时间字符串
  64. // 结束时间信息
  65. private Long endStamp; // 结束时间戳
  66. private String endClock; // 结束时钟时间
  67. private String endTime; // 结束时间字符串
  68. // 时间统计
  69. private Long actionTime; // 操作耗时(毫秒)
  70. private Long pauseTime; // 停留时间(毫秒)
  71. // 删除操作相关
  72. private String delete; // 删除操作类型
  73. private String oldContent; // 旧内容
  74. private String deletedContent; // 删除的内容
  75. }
  76. }