datai/docs/sessions/2026-01-21-003-01-session.md

11 KiB
Raw Blame History

Salesforce 多系统配置开发会话记录

元数据

  • 需求编号2026-01-21-003-01
  • 会话日期2026-01-22
  • 会话类型:开发会话
  • 参与人员SSOT 架构师
  • 会话状态:已完成

会话概述

本次会话完成了 Salesforce 多系统配置功能的代码生成和修复工作,包括 Mapper 接口、Mapper XML、Service 接口、Service 实现类和 Controller 的开发和修复。

关键决策

决策 1保留 DTO 和 VO 类中的敏感字段

决策时间2026-01-22 决策背景:用户明确指示不要移除 DTO 和 VO 类中的敏感字段clientSecret、password、securityToken 决策内容

  • 保留 DataiSfSystemConfigDto 中的所有字段,包括敏感字段
  • 保留 DataiSfSystemConfigVo 中的所有字段,包括敏感字段
  • 敏感字段在数据库中使用 EncryptUtils 加密存储 决策理由:用户明确要求保留敏感字段,可能需要在某些场景下返回这些字段

决策 2Mapper 接口方法命名

决策时间2026-01-22 决策背景:生成的 Mapper 接口方法名与需求文档不匹配 决策内容

  • selectConfigById 重命名为 selectById
  • selectConfigList 重命名为 selectList
  • insertConfig 重命名为 insert
  • updateConfig 重命名为 updateById
  • deleteConfigById 重命名为 deleteById
  • 添加 selectBySystemName 方法
  • 添加 selectByOrgType 方法
  • 添加 updateLoginInfo 方法 决策理由:方法命名需要与需求文档保持一致,确保代码可读性和可维护性

决策 3Service 接口扩展

决策时间2026-01-22 决策背景:生成的 Service 接口缺少需求文档中要求的方法 决策内容

  • 添加 getBySystemName 方法
  • 添加 listByOrgType 方法
  • 添加 updateLoginInfo 方法
  • 添加 checkSystemNameUnique 方法
  • 添加 enableSystem 方法
  • 添加 disableSystem 方法 决策理由Service 接口需要提供完整的业务操作方法,满足需求文档中的所有功能点

决策 4Controller API 路径和端点

决策时间2026-01-22 决策背景:生成的 Controller API 路径和端点与需求文档不匹配 决策内容

  • 将 API 路径从 /salesforce/system/config 更新为 /api/salesforce/system/config
  • 添加 POST /api/salesforce/system/config 端点(添加系统配置)
  • 添加 PUT /api/salesforce/system/config 端点(修改系统配置)
  • 添加 DELETE /api/salesforce/system/config/{id} 端点(删除系统配置)
  • 添加 PUT /api/salesforce/system/config/{id}/enable 端点(启用系统)
  • 添加 PUT /api/salesforce/system/config/{id}/disable 端点(停用系统)
  • 添加 GET /api/salesforce/system/config/source 端点(查询源 org 列表)
  • 添加 GET /api/salesforce/system/config/target 端点(查询目标 org 列表) 决策理由API 路径和端点需要与需求文档保持一致,确保前后端对接顺畅

问题与解决方案

问题 1生成的 Mapper 接口方法名与需求不匹配

问题描述:代码生成器生成的 Mapper 接口方法名与需求文档中定义的方法名不一致 影响范围Mapper 接口、Mapper XML、Service 层 解决方案

  • 修改 Mapper 接口方法名,使其与需求文档一致
  • 同步更新 Mapper XML 中的 SQL 语句 ID
  • 确保所有方法命名遵循统一的命名规范 解决时间2026-01-22 经验教训:代码生成前需要仔细检查需求文档,确保生成的代码符合需求规范

问题 2生成的 Service 接口缺少必需方法

问题描述:代码生成器生成的 Service 接口缺少需求文档中要求的多个方法 影响范围Service 接口、Service 实现类、Controller 解决方案

  • 扩展 Service 接口,添加缺失的方法
  • 在 Service 实现类中实现新添加的方法
  • 在 Controller 中调用新添加的方法 解决时间2026-01-22 经验教训:代码生成后需要人工审查,确保所有需求功能都已实现

问题 3生成的 Controller API 路径和端点不完整

问题描述:代码生成器生成的 Controller API 路径和端点与需求文档不一致,缺少多个端点 影响范围Controller、前端对接 解决方案

  • 更新 Controller 的 API 路径
  • 添加缺失的端点(启用、停用、源 org 列表、目标 org 列表)
  • 确保所有端点都有正确的权限控制和日志记录 解决时间2026-01-22 经验教训:代码生成后需要仔细对照需求文档,确保所有 API 端点都已实现

代码变更记录

Mapper 接口变更

文件路径datai-salesforce-auth/src/main/java/com/datai/salesforceauth/mapper/DataiSfSystemConfigMapper.java 变更类型:修改 变更内容

  • 重命名方法:selectConfigByIdselectById
  • 重命名方法:selectConfigListselectList
  • 重命名方法:insertConfiginsert
  • 重命名方法:updateConfigupdateById
  • 重命名方法:deleteConfigByIddeleteById
  • 新增方法:selectBySystemName
  • 新增方法:selectByOrgType
  • 新增方法:updateLoginInfo

Mapper XML 变更

文件路径datai-salesforce-auth/src/main/resources/mapper/salesforceauth/DataiSfSystemConfigMapper.xml 变更类型:修改 变更内容

  • 更新 SQL 语句 ID 以匹配 Mapper 接口方法名
  • 新增 selectBySystemName 查询语句
  • 新增 selectByOrgType 查询语句
  • 新增 updateLoginInfo 更新语句

Service 接口变更

文件路径datai-salesforce-auth/src/main/java/com/datai/salesforceauth/service/IDataiSfSystemConfigService.java 变更类型:修改 变更内容

  • 新增方法:getBySystemName
  • 新增方法:listByOrgType
  • 新增方法:updateLoginInfo
  • 新增方法:checkSystemNameUnique
  • 新增方法:enableSystem
  • 新增方法:disableSystem

Service 实现类变更

文件路径datai-salesforce-auth/src/main/java/com/datai/salesforceauth/service/impl/DataiSfSystemConfigServiceImpl.java 变更类型:修改 变更内容

  • 实现 getBySystemName 方法
  • 实现 listByOrgType 方法
  • 实现 updateLoginInfo 方法
  • 实现 checkSystemNameUnique 方法
  • 实现 enableSystem 方法
  • 实现 disableSystem 方法

Controller 变更

文件路径datai-salesforce-auth/src/main/java/com/datai/salesforceauth/controller/DataiSfSystemConfigController.java 变更类型:修改 变更内容

  • 更新 API 路径:/salesforce/system/config/api/salesforce/system/config
  • 新增端点:POST /api/salesforce/system/config(添加系统配置)
  • 新增端点:PUT /api/salesforce/system/config(修改系统配置)
  • 新增端点:DELETE /api/salesforce/system/config/{id}(删除系统配置)
  • 新增端点:PUT /api/salesforce/system/config/{id}/enable(启用系统)
  • 新增端点:PUT /api/salesforce/system/config/{id}/disable(停用系统)
  • 新增端点:GET /api/salesforce/system/config/source(查询源 org 列表)
  • 新增端点:GET /api/salesforce/system/config/target(查询目标 org 列表)

技术要点

1. 系统名称唯一性检查

在添加或修改系统配置时,需要检查系统名称是否唯一。实现方式:

@Override
public boolean checkSystemNameUnique(DataiSfSystemConfig config)
{
    Long configId = StringUtils.isNull(config.getId()) ? -1L : config.getId();
    DataiSfSystemConfig info = dataiSfSystemConfigMapper.selectBySystemName(config.getSystemName());
    if (StringUtils.isNotNull(info) && !info.getId().equals(configId))
    {
        return false;
    }
    return true;
}

2. 启用/停用系统

启用和停用系统时,需要更新状态字段和审计信息:

@Override
public void enableSystem(Long id)
{
    LoginUser loginUser = SecurityUtils.getLoginUser();
    String username = loginUser.getUsername();
    
    DataiSfSystemConfig config = new DataiSfSystemConfig();
    config.setId(id);
    config.setStatus("0");
    config.setUpdateBy(username);
    config.setUpdateTime(DateUtils.getNowDate());
    dataiSfSystemConfigMapper.updateById(config);
}

3. 查询源 org 和目标 org 列表

根据 orgType 字段查询源 org 或目标 org 列表:

@Override
public List<DataiSfSystemConfig> listByOrgType(String orgType)
{
    return dataiSfSystemConfigMapper.selectByOrgType(orgType);
}

4. 更新登录信息

登录成功后,更新系统配置表中的登录信息:

@Override
public int updateLoginInfo(DataiSfSystemConfig config)
{
    return dataiSfSystemConfigMapper.updateLoginInfo(config);
}

测试建议

1. 单元测试

  • 测试 checkSystemNameUnique 方法的各种场景
  • 测试 enableSystemdisableSystem 方法
  • 测试 updateLoginInfo 方法

2. 集成测试

  • 测试完整的添加系统配置流程
  • 测试系统名称唯一性验证
  • 测试启用/停用系统功能
  • 测试查询源 org 和目标 org 列表

3. API 测试

  • 测试所有 API 端点的请求和响应
  • 测试权限控制
  • 测试日志记录

后续工作

  1. 阶段 8变更日志 - 记录本次开发的变更内容
  2. 阶段 9复盘与 API - 进行复盘总结,生成 API 文档
  3. 阶段 10代码提交 - 提交代码到版本控制系统
  4. 子需求 2Salesforce 策略模式登录 - 开始下一个子需求的开发

经验总结

  1. 代码生成器验证:代码生成后需要仔细对照需求文档,确保生成的代码符合需求规范
  2. 方法命名规范:保持方法命名的一致性,遵循统一的命名规范
  3. 接口完整性:确保 Service 接口提供完整的业务操作方法
  4. API 设计API 路径和端点需要与需求文档保持一致,确保前后端对接顺畅
  5. 敏感字段处理:根据实际需求决定是否在 DTO 和 VO 中保留敏感字段

附录

相关文档

相关代码