datai/datai-scenes/datai-scene-salesforce/docs/prompts/2026-02-03-002-07-prompt-WSDL转换.md

10 KiB
Raw Permalink Blame History

提示词WSDL 转换功能

引用真源

需求描述

根据需求文档,实现 WSDL 转换功能,包括以下核心功能:

  1. 从 URL 转换 WSDL

    • 接收 WSDL URL、包名、是否生成异步代码参数
    • 调用 Salesforce Apex API 的 wsdlToApex 方法
    • 保存转换结果到数据库
    • 返回转换结果(生成的 Apex 类信息)
  2. 从 XML 转换 WSDL

    • 接收 WSDL XML 内容、包名、是否生成异步代码参数
    • 调用 Salesforce Apex API 的 wsdlToApex 方法
    • 保存转换结果到数据库
    • 返回转换结果(生成的 Apex 类信息)
  3. 查询转换历史

    • 支持分页查询
    • 支持多条件筛选(状态、用户 ID、租户 ID、Org 类型、时间范围)
    • 返回转换历史列表
  4. 获取转换详情

    • 根据转换 ID 查询转换详情
    • 包含转换基本信息和生成的 Apex 类代码列表
  5. 下载单个 Apex 类代码

    • 根据类 ID 查询 Apex 类代码
    • 返回 Apex 类代码内容
  6. 批量下载 Apex 类代码

    • 根据转换 ID 查询所有生成的 Apex 类代码
    • 使用 Apache Commons Compress 将多个 Apex 类代码打包成 ZIP 文件
    • 返回 ZIP 文件流

设计方案

根据设计文档,采用以下技术方案:

  1. 技术栈

    • Spring Boot 2.7.xController、Service 层
    • MyBatis Plus 3.5.xMapper、Entity 层
    • MySQL 8.0+:数据持久化
    • apex.jarSalesforce Apex API 集成
    • Apache Commons CompressZIP 压缩
  2. 架构设计

    • 分层架构Controller -> Service -> Mapper -> Entity
    • 模块:datai-salesforce-apex
    • 包结构:
      • controllerApexWsdlController
      • serviceIApexWsdlService、impl.ApexWsdlServiceImpl
      • mapperDataiApexWsdlConversionMapper、DataiApexWsdlClassMapper
      • domainDataiApexWsdlConversion、DataiApexWsdlClass
      • model.dtoConvertWsdlFromUrlDto、ConvertWsdlFromXmlDto、QueryConversionsDto
      • model.voWsdlConversionVo、WsdlConversionDetailVo、WsdlClassVo、WsdlToApexResultVo
  3. 数据模型

    • datai_apex_wsdl_conversion 表:存储转换基本信息
    • datai_apex_wsdl_class 表:存储生成的 Apex 类代码
    • 一对多关系:一个转换可以包含多个生成的 Apex 类
    • 级联删除:删除转换时自动删除对应的 Apex 类
  4. 并发控制

    • 使用 ReentrantLock 保证多线程安全
    • 方法级别的锁粒度
  5. 集成方案

    • 使用 ApexConnectionFactory 获取 SoapConnection 实例
    • 固定使用 source org 类型

输出格式要求

  1. 必须包含以下文件

    Controller 层

    • ApexWsdlController.java(路径:datai-salesforce-apex/src/main/java/com/datai/apex/controller/ApexWsdlController.java

    Service 层

    • IApexWsdlService.java(路径:datai-salesforce-apex/src/main/java/com/datai/apex/service/IApexWsdlService.java
    • ApexWsdlServiceImpl.java(路径:datai-salesforce-apex/src/main/java/com/datai/apex/service/impl/ApexWsdlServiceImpl.java

    Mapper 层

    • DataiApexWsdlConversionMapper.java(路径:datai-salesforce-apex/src/main/java/com/datai/apex/mapper/DataiApexWsdlConversionMapper.java
    • DataiApexWsdlClassMapper.java(路径:datai-salesforce-apex/src/main/java/com/datai/apex/mapper/DataiApexWsdlClassMapper.java

    Entity 层

    • DataiApexWsdlConversion.java(路径:datai-salesforce-apex/src/main/java/com/datai/apex/domain/DataiApexWsdlConversion.java
    • DataiApexWsdlClass.java(路径:datai-salesforce-apex/src/main/java/com/datai/apex/domain/DataiApexWsdlClass.java

    DTO 层

    • ConvertWsdlFromUrlDto.java(路径:datai-salesforce-apex/src/main/java/com/datai/apex/model/dto/ConvertWsdlFromUrlDto.java
    • ConvertWsdlFromXmlDto.java(路径:datai-salesforce-apex/src/main/java/com/datai/apex/model/dto/ConvertWsdlFromXmlDto.java
    • QueryConversionsDto.java(路径:datai-salesforce-apex/src/main/java/com/datai/apex/model/dto/QueryConversionsDto.java

    VO 层

    • WsdlConversionVo.java(路径:datai-salesforce-apex/src/main/java/com/datai/apex/model/vo/WsdlConversionVo.java
    • WsdlConversionDetailVo.java(路径:datai-salesforce-apex/src/main/java/com/datai/apex/model/vo/WsdlConversionDetailVo.java
    • WsdlClassVo.java(路径:datai-salesforce-apex/src/main/java/com/datai/apex/model/vo/WsdlClassVo.java
    • WsdlToApexResultVo.java(路径:datai-salesforce-apex/src/main/java/com/datai/apex/model/vo/WsdlToApexResultVo.java
  2. 必须包含单元测试

    • ApexWsdlServiceTest.java(路径:datai-salesforce-apex/src/test/java/com/datai/apex/service/ApexWsdlServiceTest.java
  3. 必须符合 Spring Boot 最佳实践

    • 使用 @RestController 注解
    • 使用 @Autowired 注解进行依赖注入
    • 使用 @Service 注解
    • 使用 @Transactional 注解进行事务管理
  4. 必须遵循 MyBatis Plus 规范

    • Entity 类使用 @TableName 注解指定表名
    • 主键使用 @TableId 注解
    • 字段使用 @TableField 注解
    • Mapper 接口继承 BaseMapper
  5. 必须使用若依框架规范

    • 使用 @PreAuthorize 注解进行权限控制
    • 使用 @Log 注解记录操作日志
    • 使用 @DataScope 注解进行数据权限控制
    • 使用 GlobalExceptionHandler 处理异常
  6. 必须使用 Apache Commons Compress 进行 ZIP 压缩

    • 使用 ZipArchiveOutputStream 创建 ZIP 文件
    • 使用 ZipArchiveEntry 添加 ZIP 条目
    • 设置压缩级别为 BEST_COMPRESSION

代码规范要求

  1. 类命名

    • Controller 类:首字母大写,驼峰命名,如 ApexWsdlController
    • Service 接口:以 I 开头,如 IApexWsdlService
    • Service 实现类:以 Impl 结尾,如 ApexWsdlServiceImpl
    • Mapper 接口:首字母大写,驼峰命名,如 DataiApexWsdlConversionMapper
    • Entity 类:首字母大写,驼峰命名,如 DataiApexWsdlConversion
    • DTO 类:以 Dto 结尾,如 ConvertWsdlFromUrlDto
    • VO 类:以 Vo 结尾,如 WsdlConversionVo
  2. 方法命名

    • 首字母小写,驼峰命名,如 convertWsdlFromUrl
    • 查询方法:以 getquerylist 开头,如 getConversionDetailqueryConversions
    • 转换方法:以 convert 开头,如 convertWsdlFromUrl
    • 下载方法:以 download 开头,如 downloadClassCodedownloadClassesAsZip
  3. 变量命名

    • 首字母小写,驼峰命名,如 wsdlUrlpackageName
    • 常量:全大写,下划线分隔,如 ORG_TYPE
  4. 注释规范

    • 类注释:使用 /** */,包含类功能描述、作者、创建时间
    • 方法注释:使用 /** */,包含方法功能、参数、返回值、异常描述
    • 字段注释:使用 /** */,包含字段功能描述
    • Entity 类字段注释:使用 @TableField 注解的 comment 属性
  5. 代码格式

    • 使用 4 个空格缩进
    • 行宽不超过 120 字符
    • 大括号另起一行
  6. 导入规范

    • 使用 import 静态导入
    • 避免通配符导入
    • 按照标准顺序导入JDK、第三方、项目内部

测试要求

  1. 单元测试覆盖率不低于 80%

  2. 测试用例包含以下场景

    从 URL 转换 WSDL

    • 正常转换成功
    • WSDL URL 不存在
    • WSDL URL 格式错误
    • Salesforce 连接失败
    • 转换失败

    从 XML 转换 WSDL

    • 正常转换成功
    • WSDL XML 内容为空
    • WSDL XML 格式错误
    • Salesforce 连接失败
    • 转换失败

    查询转换历史

    • 正常查询成功
    • 分页查询
    • 多条件筛选(状态、用户 ID、租户 ID、Org 类型、时间范围)
    • 查询结果为空

    获取转换详情

    • 正常获取成功
    • 转换 ID 不存在

    下载单个 Apex 类代码

    • 正常下载成功
    • 类 ID 不存在

    批量下载 Apex 类代码

    • 正常下载成功
    • 转换 ID 不存在
    • 转换没有生成的 Apex 类
  3. 使用 JUnit 5 和 Mockito 进行测试

  4. 测试用例命名规范test+方法名+场景,如 testConvertWsdlFromUrlSuccess

  5. 测试数据使用 Mockito 模拟

注意事项

  1. 必须使用 ReentrantLock 保证多线程安全

    • 在 convertWsdlFromUrl 和 convertWsdlFromXml 方法中使用 wsdlConversionLock
    • 使用 try-finally 确保锁的释放
  2. 必须固定使用 source org 类型

    • 在 ApexWsdlServiceImpl 中定义常量 private static final String ORG_TYPE = "source"
    • 使用 ApexConnectionFactory.getConnection(ORG_TYPE) 获取 SoapConnection 实例
  3. 必须使用若依的 @PreAuthorize 注解进行权限控制

    • apex:wsdl:convertWSDL 转换权限
    • apex:wsdl:queryWSDL 查询权限
    • apex:wsdl:downloadWSDL 下载权限
  4. 必须使用若依的 @Log 注解记录操作日志

    • 记录 WSDL 转换操作
    • 记录查询操作
    • 记录下载操作
  5. 必须使用若依的 GlobalExceptionHandler 处理异常

    • SalesforceAuthException认证失败异常
    • SalesforceOperationException操作失败异常
    • SalesforceValidationException参数验证异常
  6. 必须使用 Apache Commons Compress 进行 ZIP 压缩

    • 设置压缩级别为 BEST_COMPRESSION
    • 设置 ZIP 条目名称为类名 + ".apex"
    • 使用 UTF-8 编码
  7. 必须处理 Salesforce API 的空值情况

    • WsdlToApexResult 可能为空
    • WsdlToApexInfo 可能为空
    • 生成的 Apex 类列表可能为空
  8. 必须使用 MyBatis Plus 的分页功能

    • 使用 Page 对象进行分页
    • 使用 IPage 接口返回分页结果
  9. 必须使用 MyBatis Plus 的条件构造器

    • 使用 QueryWrapper 构建查询条件
    • 使用 Lambda 表达式避免字段名硬编码
  10. 必须使用 @Transactional 注解进行事务管理

    • 在 convertWsdlFromUrl 和 convertWsdlFromXml 方法中使用
    • 确保转换记录和 Apex 类记录的原子性插入