record
变更记录
支撑服务层审计日志与追溯
事件监听 + 自动记录 + 时间线展示通过事件监听自动记录所有变更,保证审计日志完整性
审计日志与追溯
事件监听 + 自动记录 + 时间线展示通过事件监听自动记录所有变更,保证审计日志完整性
在研发流程中,需要追踪所有变更:谁在什么时候修改了什么?为什么修改?如何设计一个通用的变更记录系统,支持工作项、流程、配置等各类数据的变更追踪?
变更记录实体 - 通用的审计日志
@Data
@TableName("t_change_record")
public class ChangeRecord {
@TableId(type = IdType.AUTO)
private Long id;
// 工作空间 ID
private Long workspaceId;
// 变更类型(工作项/流程/配置)
private ChangeRecordType type;
// 变更对象 ID
private String objectId;
// 变更操作(创建/更新/删除)
private ChangeRecordOperation operation;
// 变更字段
private String field;
// 变更前的值
private String oldValue;
// 变更后的值
private String newValue;
// 操作人 ID
private String operatorId;
// 操作时间
private LocalDateTime operateTime;
// 变更原因/备注
private String remark;
}变更记录服务 - 自动记录变更
@Service
public class ChangeRecordService {
/**
* 监听工作项变更事件
*/
@EventListener
public void onWorkItemChange(WorkItemChangeEvent event) {
WorkItem oldItem = event.getOldItem();
WorkItem newItem = event.getNewItem();
// 对比字段变更
Map<String, Object> changes = compareFields(oldItem, newItem);
// 为每个变更字段创建记录
for (Map.Entry<String, Object> entry : changes.entrySet()) {
ChangeRecord record = new ChangeRecord();
record.setType(ChangeRecordType.WORK_ITEM);
record.setObjectId(newItem.getId().toString());
record.setField(entry.getKey());
record.setOldValue(getFieldValue(oldItem, entry.getKey()));
record.setNewValue(getFieldValue(newItem, entry.getKey()));
record.setOperatorId(getCurrentUserId());
save(record);
}
}
}