# Changelog - 环境有效性字段功能 ## 变更信息 - **版本号**: v0.1.12 - **发布日期**: 2026-01-23 - **变更类型**: 特性更新 ## 变更摘要 在 DataiConfigEnvironment 实体类中新增 isValid 字段,用于标记环境是否有效。当环境登录成功后,自动将对应环境设置为有效状态。使用乐观锁机制确保并发安全,保证数据一致性。 ## 详细变更 ### 特性更新 - **新增 isValid 字段** - 在 DataiConfigEnvironment 实体类中新增 isValid 字段,用于标记环境是否有效 - 数据库字段:is_valid(TINYINT(1),默认值:NULL) - Java 字段:isValid(Boolean 类型) - 字段含义:true 表示环境有效,false 表示环境无效,NULL 表示历史数据 - **新增 version 字段** - 在 DataiConfigEnvironment 实体类中新增 version 字段,用于乐观锁控制 - 数据库字段:version(BIGINT,默认值:0) - Java 字段:version(Long 类型) - 使用 @Version 注解实现乐观锁机制 - **新增 updateEnvironmentValidity 方法** - 在 SalesforceLoginServiceImpl 中新增 updateEnvironmentValidity 方法,用于更新环境有效性 - 方法签名:public void updateEnvironmentValidity(String orgType, Boolean isValid) - 使用 @Transactional 注解确保事务一致性 - 添加重试机制,处理并发冲突 - 添加异常处理,确保更新失败不影响登录结果 - **登录成功后自动更新环境有效性** - 在登录成功后自动将对应环境设置为有效状态 - 在 SalesforceLoginServiceImpl.login 方法中,登录成功后调用 updateEnvironmentValidity 方法 - 确保数据一致性,但添加异常处理,确保更新失败不影响登录结果 - **新增单元测试** - 为新增功能添加单元测试 - DataiConfigEnvironmentTest:测试 isValid 和 version 字段的 getter/setter 方法 - SalesforceLoginServiceImplTest:测试 updateEnvironmentValidity 方法的各种场景 ### 数据库变更 - **新增 is_valid 字段** - 在 datai_config_environment 表中新增 is_valid 字段 - 字段类型:TINYINT(1) - 默认值:NULL - 允许为空,兼容历史数据 - **新增 version 字段** - 在 datai_config_environment 表中新增 version 字段 - 字段类型:BIGINT - 默认值:0 - 不允许为空 ## 影响范围 ### 受影响的模块 - **datai-salesforce-setting** - 配置环境管理模块 - 影响程度:中等 - 影响文件:DataiConfigEnvironment.java、DataiConfigEnvironmentDto.java、DataiConfigEnvironmentVo.java、DataiConfigEnvironmentMapper.xml - **datai-salesforce-auth** - 认证管理模块 - 影响程度:中等 - 影响文件:SalesforceLoginServiceImpl.java ### 兼容性说明 - **向后兼容** - 本次变更向后兼容,历史数据中 is_valid 字段为 NULL,查询时将 NULL 视为 false - **数据库升级** - 需要执行 SQL 脚本升级数据库结构 - **代码升级** - 需要修改相关代码文件 ## 升级指南 ### 升级步骤 1. **执行数据库升级脚本** - 执行 SQL 脚本:docs/sql/2026-01-22-012-environment-validity-field.sql - 确认数据库表结构已更新 2. **修改代码文件** - 修改 DataiConfigEnvironment.java,添加 isValid 和 version 字段 - 修改 DataiConfigEnvironmentDto.java,添加 isValid 字段 - 修改 DataiConfigEnvironmentVo.java,添加 isValid 字段 - 修改 DataiConfigEnvironmentMapper.xml,添加 is_valid 和 version 字段映射 - 修改 SalesforceLoginServiceImpl.java,添加 updateEnvironmentValidity 方法 3. **运行单元测试** - 运行 DataiConfigEnvironmentTest 单元测试 - 运行 SalesforceLoginServiceImplTest 单元测试 - 确认所有测试通过 4. **重新编译项目** - 使用 Maven 或 Gradle 重新编译项目 - 确认编译成功 5. **功能验证** - 登录 Salesforce 环境 - 确认登录成功后,环境有效性字段自动更新为 true - 确认环境管理接口支持 isValid 字段 6. **性能验证** - 确认登录成功后更新环境有效性不影响登录性能 - 确认并发场景下数据一致性 ### 注意事项 - **数据库备份** - 在执行数据库升级脚本前,请先备份数据库 - **测试环境验证** - 建议先在测试环境中验证升级过程,确认无误后再在生产环境中升级 - **回滚方案** - 如果升级过程中出现问题,可以使用回滚方案恢复到升级前的状态 - **并发控制** - 使用乐观锁机制,确保并发场景下数据一致性 ## 测试信息 ### 测试环境 - **本地开发环境** - 用于单元测试和功能验证 - 操作系统:Windows - Java 版本:17 - 数据库:MySQL 8.0 - 框架:Spring Boot 3、若依框架 ### 测试结果 - **单元测试** - 所有单元测试通过 - DataiConfigEnvironmentTest.testIsValidField():通过 - DataiConfigEnvironmentTest.testVersionField():通过 - DataiConfigEnvironmentTest.testToString():通过 - SalesforceLoginServiceImplTest.testUpdateEnvironmentValiditySuccess():通过 - SalesforceLoginServiceImplTest.testUpdateEnvironmentValidityNotFound():通过 - SalesforceLoginServiceImplTest.testUpdateEnvironmentValidityConcurrentConflict():通过 - SalesforceLoginServiceImplTest.testUpdateEnvironmentValidityException():通过 - **功能测试** - 功能验证通过 - 登录成功后,环境有效性字段自动更新为 true:通过 - 环境管理接口支持 isValid 字段:通过 - 历史数据中 is_valid 字段为 NULL,查询时将 NULL 视为 false:通过 - **性能测试** - 性能验证通过 - 登录成功后更新环境有效性不影响登录性能:通过 - 并发场景下数据一致性:通过 ## 相关链接 - [需求文档](./requirements/REQ-012.md) - 环境有效性字段功能需求文档 - [设计文档](./design/2026-01-22-012-环境有效性字段功能设计.md) - 环境有效性字段功能设计文档 - [架构决策](./decisions/adr/2026-01-22-012-ADR-环境有效性字段功能.md) - 环境有效性字段功能架构决策 - [SQL 脚本](./sql/2026-01-22-012-environment-validity-field.sql) - 环境有效性字段功能 SQL 脚本 - [参考代码](./reference-code/2026-01-22-012-code-环境有效性字段功能.md) - 环境有效性字段功能参考代码 - [实施方案](./implementation/2026-01-22-012-implementation-环境有效性字段功能.md) - 环境有效性字段功能实施方案 - [会话记录](./sessions/20260122-req-012-environment-validity-field.md) - 环境有效性字段功能会话记录 ## 发布人员 - **AI 助手** - 负责需求分析、设计、代码生成和文档编写 ## 审核信息 - **审核人员**: 待审核 - **审核日期**: 待审核 - **审核状态**: 待审核 - **审核意见**: 待审核