11 KiB
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 加密存储 决策理由:用户明确要求保留敏感字段,可能需要在某些场景下返回这些字段
决策 2:Mapper 接口方法命名
决策时间:2026-01-22 决策背景:生成的 Mapper 接口方法名与需求文档不匹配 决策内容:
- 将
selectConfigById重命名为selectById - 将
selectConfigList重命名为selectList - 将
insertConfig重命名为insert - 将
updateConfig重命名为updateById - 将
deleteConfigById重命名为deleteById - 添加
selectBySystemName方法 - 添加
selectByOrgType方法 - 添加
updateLoginInfo方法 决策理由:方法命名需要与需求文档保持一致,确保代码可读性和可维护性
决策 3:Service 接口扩展
决策时间:2026-01-22 决策背景:生成的 Service 接口缺少需求文档中要求的方法 决策内容:
- 添加
getBySystemName方法 - 添加
listByOrgType方法 - 添加
updateLoginInfo方法 - 添加
checkSystemNameUnique方法 - 添加
enableSystem方法 - 添加
disableSystem方法 决策理由:Service 接口需要提供完整的业务操作方法,满足需求文档中的所有功能点
决策 4:Controller 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
变更类型:修改
变更内容:
- 重命名方法:
selectConfigById→selectById - 重命名方法:
selectConfigList→selectList - 重命名方法:
insertConfig→insert - 重命名方法:
updateConfig→updateById - 重命名方法:
deleteConfigById→deleteById - 新增方法:
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方法的各种场景 - 测试
enableSystem和disableSystem方法 - 测试
updateLoginInfo方法
2. 集成测试
- 测试完整的添加系统配置流程
- 测试系统名称唯一性验证
- 测试启用/停用系统功能
- 测试查询源 org 和目标 org 列表
3. API 测试
- 测试所有 API 端点的请求和响应
- 测试权限控制
- 测试日志记录
后续工作
- 阶段 8:变更日志 - 记录本次开发的变更内容
- 阶段 9:复盘与 API - 进行复盘总结,生成 API 文档
- 阶段 10:代码提交 - 提交代码到版本控制系统
- 子需求 2:Salesforce 策略模式登录 - 开始下一个子需求的开发
经验总结
- 代码生成器验证:代码生成后需要仔细对照需求文档,确保生成的代码符合需求规范
- 方法命名规范:保持方法命名的一致性,遵循统一的命名规范
- 接口完整性:确保 Service 接口提供完整的业务操作方法
- API 设计:API 路径和端点需要与需求文档保持一致,确保前后端对接顺畅
- 敏感字段处理:根据实际需求决定是否在 DTO 和 VO 中保留敏感字段