8.0 KiB
8.0 KiB
提示词:代码覆盖率功能
引用真源
需求描述
根据需求文档,实现 Salesforce Apex 代码覆盖率查询和统计功能,包括:
- 查询代码覆盖率列表:支持多条件筛选(testResultId、name、type、namespace、minCoverage、maxCoverage)、分页查询
- 查询代码覆盖率详情:查询单条覆盖率记录的详细信息
- 查询总体代码覆盖率:统计指定测试结果的整体覆盖率、类覆盖率、触发器覆盖率
- 按类型统计代码覆盖率:按 Class/Trigger 类型分别统计覆盖率
设计方案
根据设计文档,采用以下技术方案:
- 架构模式:分层架构(Controller -> Service -> Mapper -> Entity)
- 数据库策略:复用 002-03 的 datai_apex_code_coverage 表,无需新建表
- Service 层设计:独立的 IApexCodeCoverageService 接口和 ApexCodeCoverageServiceImpl 实现
- 查询优化:使用数据库索引 + PageHelper 物理分页
- 权限控制:使用独立的权限标识
apex:coverage:query - 数据权限:使用若依的
@DataScope注解进行数据隔离
核心算法
-
单个类覆盖率计算:
coveragePercent = (1 - numLocationsNotCovered / numLocations) * 100 -
总体覆盖率计算:
totalCoverage = (1 - totalNotCovered / totalLocations) * 100 -
按类型统计:按 Class/Trigger 分组后分别计算覆盖率
输出格式要求
必须包含的文件
-
Controller:
ApexCodeCoverageController.java- 路径:
datai-salesforce-apex/src/main/java/com/datai/apex/controller/ApexCodeCoverageController.java - 提供 4 个 REST API 接口
-
Service 接口:
IApexCodeCoverageService.java- 路径:
datai-salesforce-apex/src/main/java/com/datai/apex/service/IApexCodeCoverageService.java
-
Service 实现:
ApexCodeCoverageServiceImpl.java- 路径:
datai-salesforce-apex/src/main/java/com/datai/apex/service/impl/ApexCodeCoverageServiceImpl.java
-
DTO 类:
QueryCodeCoverageDto.java- 查询覆盖率请求 DTOQueryCoverageSummaryDto.java- 查询覆盖率统计请求 DTO- 路径:
datai-salesforce-apex/src/main/java/com/datai/apex/model/dto/
-
VO 类:
CodeCoverageResultVo.java- 代码覆盖率结果 VOCodeCoverageSummaryVo.java- 代码覆盖率统计 VOCoverageTypeSummaryVo.java- 按类型统计 VOCoverageSummaryResponseVo.java- 覆盖率统计响应 VO- 路径:
datai-salesforce-apex/src/main/java/com/datai/apex/model/vo/
REST API 接口
-
查询代码覆盖率列表
- 方法:GET
- 路径:
/api/apex/coverage - 权限:
@PreAuthorize("@ss.hasPermi('apex:coverage:query')")
-
查询代码覆盖率详情
- 方法:GET
- 路径:
/api/apex/coverage/{id} - 权限:
@PreAuthorize("@ss.hasPermi('apex:coverage:query')")
-
查询总体代码覆盖率
- 方法:GET
- 路径:
/api/apex/coverage/total - 权限:
@PreAuthorize("@ss.hasPermi('apex:coverage:query')")
-
按类型统计代码覆盖率
- 方法:GET
- 路径:
/api/apex/coverage/summary - 权限:
@PreAuthorize("@ss.hasPermi('apex:coverage:query')")
代码规范要求
命名规范
-
类命名:首字母大写,驼峰命名
- Controller:
ApexCodeCoverageController - Service:
ApexCodeCoverageServiceImpl - DTO:
QueryCodeCoverageDto - VO:
CodeCoverageResultVo
- Controller:
-
方法命名:首字母小写,驼峰命名
- 查询列表:
queryCodeCoverageList - 查询详情:
getCodeCoverageById - 统计总体:
getTotalCoverage - 按类型统计:
getCoverageSummaryByType
- 查询列表:
-
变量命名:首字母小写,驼峰命名
testResultId、coveragePercent、totalLocations
注释规范
-
类注释:使用
/** */,包含类功能描述/** * Apex 代码覆盖率 Controller * 提供代码覆盖率查询和统计接口 * * @author datai * @date 2026-02-03 */ -
方法注释:使用
/** */,包含方法功能、参数、返回值/** * 查询代码覆盖率列表 * * @param dto 查询参数 * @return 分页结果 */ -
字段注释:使用
/** */,包含字段功能描述/** 覆盖率百分比 */ private Double coveragePercent;
代码格式
- 使用 4 个空格缩进
- 行宽不超过 120 字符
- 使用 import 静态导入,避免通配符导入
- 类声明后、方法之间空一行
技术实现要求
Controller 层要求
- 使用
@RestController注解 - 使用
@RequestMapping("/api/apex/coverage")定义基础路径 - 使用
@PreAuthorize进行权限控制 - 使用
@DataScope进行数据权限隔离 - 使用
@Validated进行参数校验 - 返回类型统一使用
TableDataInfo(分页)或AjaxResult(单条)
Service 层要求
- 接口定义在
service包,实现定义在service.impl包 - 使用
@Service注解标记实现类 - 注入
DataiApexCodeCoverageMapper进行数据访问 - 使用
PageHelper.startPage()进行分页 - 覆盖率范围筛选在内存中进行(minCoverage、maxCoverage)
- 异常处理使用 try-catch,记录日志后抛出业务异常
DTO/VO 要求
- 使用
@Data注解(Lombok) - 实现
Serializable接口 - 使用包装类型(Long、Integer、Double)而非基本类型
- 日期类型使用
Date - 添加字段注释说明
数据库操作要求
- 复用现有的
DataiApexCodeCoverageMapper - 使用 MyBatis 的 XML 映射文件或注解方式
- 支持动态 SQL 查询(多条件筛选)
- 查询条件包括:testResultId、name、type、namespace
测试要求
- 单元测试覆盖率:不低于 80%
- 测试场景:
- 正常查询代码覆盖率列表
- 带条件筛选查询
- 查询代码覆盖率详情
- 查询总体代码覆盖率
- 按类型统计代码覆盖率
- 空数据场景
- 边界值场景(覆盖率 0%、100%)
- 测试框架:使用 JUnit 5 和 Mockito
- 测试用例命名:
test+方法名+场景,如testQueryCodeCoverageListSuccess
注意事项
-
数据库表复用:
- 复用 002-03 的
datai_apex_code_coverage表 - 不复用
datai_apex_code_location表(本功能不需要代码位置详情)
- 复用 002-03 的
-
数据权限:
- 使用
@DataScope(deptAlias = "t")进行数据隔离 - 用户只能查看本部门的数据
- 使用
-
覆盖率计算:
- 注意除零保护(numLocations 为 0 时返回 0%)
- 覆盖率百分比保留两位小数
-
异常处理:
- 使用
SalesforceOperationException包装业务异常 - 使用
DataAccessException包装数据访问异常 - 记录详细的错误日志
- 使用
-
性能优化:
- 使用 PageHelper 进行物理分页
- 覆盖率范围筛选在内存中进行
- 避免 N+1 查询问题
-
接口规范:
- 所有接口返回统一的响应格式
- 分页接口返回
TableDataInfo - 单条数据接口返回
AjaxResult
依赖说明
需要注入的 Bean
DataiApexCodeCoverageMapper- 代码覆盖率数据访问DataiApexTestResultMapper- 测试结果数据访问(用于验证 testResultId)
需要使用的工具类
PageHelper- 分页工具TableDataInfo- 分页响应封装AjaxResult- 统一响应封装StringUtils- 字符串工具CollectionUtils- 集合工具
需要使用的注解
@RestController- Controller 标记@RequestMapping- 请求路径映射@PreAuthorize- 权限控制@DataScope- 数据权限@Validated- 参数校验@Service- Service 标记@Autowired- 依赖注入@Data- Lombok 数据类