fix(工作台): 修复各个指标百分比小数位问题

--bug=1050461 --user=郭雨琦 修复各个指标百分比小数位问题
https://www.tapd.cn/55049933/bugtrace/bugs/view/1155049933001050461
This commit is contained in:
guoyuqi 2024-12-16 18:57:05 +08:00 committed by 刘瑞斌
parent 25f02084ec
commit fb4614f11f
3 changed files with 40 additions and 33 deletions

View File

@ -14,5 +14,5 @@ public class NameCountDTO {
private String name; private String name;
@Schema(description = "数量") @Schema(description = "数量")
private Integer count; private Object count;
} }

View File

@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@ -18,4 +19,16 @@ public class StatusPercentDTO {
@Schema(description = "百分比") @Schema(description = "百分比")
private String percentValue; private String percentValue;
public void setPercentValue(String percentValue) {
int i = percentValue.indexOf(".");
if (i > 0) {
String substring = percentValue.substring(i);
if (StringUtils.equalsIgnoreCase(substring, ".00%")) {
percentValue = percentValue.substring(0, i)+"%";
}
}
this.percentValue = percentValue;
}
} }

View File

@ -953,8 +953,7 @@ public class DashboardService {
int passThresholdValue = passThreshold == null ? 0 : passThreshold.intValue(); int passThresholdValue = passThreshold == null ? 0 : passThreshold.intValue();
caseCountMap.put("passThreshold", passThresholdValue); caseCountMap.put("passThreshold", passThresholdValue);
Double executeRate = planCount.getExecuteRate(); Double executeRate = planCount.getExecuteRate();
int executeRateValue = executeRate == null ? 0 : executeRate.intValue(); caseCountMap.put("executeRate", executeRate);
caseCountMap.put("executeRate", executeRateValue);
caseCountMap.put("totalCount", planCount.getCaseTotal()); caseCountMap.put("totalCount", planCount.getCaseTotal());
caseCountMap.put("executeCount", planCount.getCaseTotal() - planCount.getPendingCount()); caseCountMap.put("executeCount", planCount.getCaseTotal() - planCount.getPendingCount());
caseCountMap.put(BUG_COUNT, planBugs.size()); caseCountMap.put(BUG_COUNT, planBugs.size());
@ -996,10 +995,10 @@ public class DashboardService {
NameCountDTO passRate = new NameCountDTO(); NameCountDTO passRate = new NameCountDTO();
passRate.setName(Translator.get("functional_case.passRate")); passRate.setName(Translator.get("functional_case.passRate"));
if (CollectionUtils.isNotEmpty(statisticListByProjectId)) { if (CollectionUtils.isNotEmpty(statisticListByProjectId)) {
BigDecimal divide = BigDecimal.valueOf(hasPassList.size()).divide(BigDecimal.valueOf(statisticListByProjectId.size()), 2, RoundingMode.HALF_UP); BigDecimal divide = BigDecimal.valueOf(hasPassList.size()).divide(BigDecimal.valueOf(statisticListByProjectId.size()), 4, RoundingMode.HALF_UP);
passRate.setCount(getTurnCount(divide)); passRate.setCount(getTurnCount(divide));
} else { } else {
passRate.setCount(0); passRate.setCount(getTurnCount(BigDecimal.ZERO));
} }
passList.add(passRate); passList.add(passRate);
NameCountDTO hasPass = new NameCountDTO(); NameCountDTO hasPass = new NameCountDTO();
@ -1031,9 +1030,9 @@ public class DashboardService {
NameCountDTO reviewRate = new NameCountDTO(); NameCountDTO reviewRate = new NameCountDTO();
reviewRate.setName(Translator.get("functional_case.reviewRate")); reviewRate.setName(Translator.get("functional_case.reviewRate"));
if (CollectionUtils.isEmpty(statisticListByProjectId)) { if (CollectionUtils.isEmpty(statisticListByProjectId)) {
reviewRate.setCount(0); reviewRate.setCount(getTurnCount(BigDecimal.ZERO));
} else { } else {
BigDecimal divide = BigDecimal.valueOf(statisticListByProjectId.size() - unReviewList.size() - underReviewList.size() - reReviewedList.size()).divide(BigDecimal.valueOf(statisticListByProjectId.size()), 2, RoundingMode.HALF_UP); BigDecimal divide = BigDecimal.valueOf(statisticListByProjectId.size() - unReviewList.size() - underReviewList.size() - reReviewedList.size()).divide(BigDecimal.valueOf(statisticListByProjectId.size()), 4, RoundingMode.HALF_UP);
reviewRate.setCount(getTurnCount(divide)); reviewRate.setCount(getTurnCount(divide));
} }
reviewList.add(reviewRate); reviewList.add(reviewRate);
@ -1049,13 +1048,8 @@ public class DashboardService {
} }
@NotNull @NotNull
private static Integer getTurnCount(BigDecimal divide) { private static BigDecimal getTurnCount(BigDecimal divide) {
String value = String.valueOf(divide.multiply(BigDecimal.valueOf(100))); return divide.multiply(BigDecimal.valueOf(100)).setScale(2,RoundingMode.HALF_UP);
int i = value.indexOf(".");
if (i > 0) {
value = value.substring(0, i);
}
return Integer.valueOf(value);
} }
private static void buildStatusPercentList(List<FunctionalCaseStatisticDTO> statisticListByProjectId, List<StatusPercentDTO> statusPercentList) { private static void buildStatusPercentList(List<FunctionalCaseStatisticDTO> statisticListByProjectId, List<StatusPercentDTO> statusPercentList) {
@ -1068,8 +1062,8 @@ public class DashboardService {
if (CollectionUtils.isNotEmpty(functionalCaseStatisticDTOS)) { if (CollectionUtils.isNotEmpty(functionalCaseStatisticDTOS)) {
int size = functionalCaseStatisticDTOS.size(); int size = functionalCaseStatisticDTOS.size();
statusPercentDTO.setCount(size); statusPercentDTO.setCount(size);
BigDecimal divide = BigDecimal.valueOf(size).divide(BigDecimal.valueOf(statisticListByProjectId.size()), 2, RoundingMode.HALF_UP); BigDecimal divide = BigDecimal.valueOf(size).divide(BigDecimal.valueOf(statisticListByProjectId.size()), 4, RoundingMode.HALF_UP);
statusPercentDTO.setPercentValue(divide.multiply(BigDecimal.valueOf(100)) + "%"); statusPercentDTO.setPercentValue(getTurnCount(divide) + "%");
} else { } else {
statusPercentDTO.setCount(0); statusPercentDTO.setCount(0);
statusPercentDTO.setPercentValue("0%"); statusPercentDTO.setPercentValue("0%");
@ -1319,8 +1313,8 @@ public class DashboardService {
statusPercentDTO.setPercentValue("0%"); statusPercentDTO.setPercentValue("0%");
} else { } else {
statusPercentDTO.setCount(size); statusPercentDTO.setCount(size);
BigDecimal divide = BigDecimal.valueOf(size).divide(BigDecimal.valueOf(totalCount), 2, RoundingMode.HALF_UP); BigDecimal divide = BigDecimal.valueOf(size).divide(BigDecimal.valueOf(totalCount), 4, RoundingMode.HALF_UP);
statusPercentDTO.setPercentValue(divide.multiply(BigDecimal.valueOf(100)) + "%"); statusPercentDTO.setPercentValue(getTurnCount(divide) + "%");
} }
statusPercentList.add(statusPercentDTO); statusPercentList.add(statusPercentDTO);
} }
@ -1338,11 +1332,11 @@ public class DashboardService {
int doneSize = CollectionUtils.isEmpty(doneList) ? 0 : doneList.size(); int doneSize = CollectionUtils.isEmpty(doneList) ? 0 : doneList.size();
if (totalCount == 0) { if (totalCount == 0) {
completionRate.setCount(0); completionRate.setCount(getTurnCount(BigDecimal.ZERO));
doneDTO.setCount(0); doneDTO.setCount(0);
} else { } else {
doneDTO.setCount(doneSize); doneDTO.setCount(doneSize);
BigDecimal divide = BigDecimal.valueOf(doneSize).divide(BigDecimal.valueOf(totalCount), 2, RoundingMode.HALF_UP); BigDecimal divide = BigDecimal.valueOf(doneSize).divide(BigDecimal.valueOf(totalCount), 4, RoundingMode.HALF_UP);
completionRate.setCount(getTurnCount(divide)); completionRate.setCount(getTurnCount(divide));
} }
NameCountDTO processDTO = getNameCountDTO(CollectionUtils.isEmpty(processList) ? 0 : processList.size(), Translator.get("api_definition.status.ongoing")); NameCountDTO processDTO = getNameCountDTO(CollectionUtils.isEmpty(processList) ? 0 : processList.size(), Translator.get("api_definition.status.ongoing"));
@ -1381,8 +1375,8 @@ public class DashboardService {
statusPercentDTO.setStatus(t.getName()); statusPercentDTO.setStatus(t.getName());
statusPercentDTO.setCount(count); statusPercentDTO.setCount(count);
if (totalCount > 0) { if (totalCount > 0) {
BigDecimal divide = BigDecimal.valueOf(count).divide(BigDecimal.valueOf(totalCount), 2, RoundingMode.HALF_UP); BigDecimal divide = BigDecimal.valueOf(count).divide(BigDecimal.valueOf(totalCount), 4, RoundingMode.HALF_UP);
statusPercentDTO.setPercentValue(divide.multiply(BigDecimal.valueOf(100)) + "%"); statusPercentDTO.setPercentValue(getTurnCount(divide) + "%");
} else { } else {
statusPercentDTO.setPercentValue("0%"); statusPercentDTO.setPercentValue("0%");
} }
@ -1396,7 +1390,7 @@ public class DashboardService {
List<NameCountDTO> coverList = new ArrayList<>(); List<NameCountDTO> coverList = new ArrayList<>();
NameCountDTO coverRate = new NameCountDTO(); NameCountDTO coverRate = new NameCountDTO();
if (totalCount > 0) { if (totalCount > 0) {
BigDecimal divide = BigDecimal.valueOf(coverCount).divide(BigDecimal.valueOf(totalCount), 2, RoundingMode.HALF_UP); BigDecimal divide = BigDecimal.valueOf(coverCount).divide(BigDecimal.valueOf(totalCount), 4, RoundingMode.HALF_UP);
coverRate.setCount(getTurnCount(divide)); coverRate.setCount(getTurnCount(divide));
} }
coverRate.setName(rateName); coverRate.setName(rateName);
@ -1560,9 +1554,9 @@ public class DashboardService {
NameCountDTO passRateDTO = new NameCountDTO(); NameCountDTO passRateDTO = new NameCountDTO();
passRateDTO.setName(name); passRateDTO.setName(name);
if (simpleAllApiCaseSize == 0) { if (simpleAllApiCaseSize == 0) {
passRateDTO.setCount(0); passRateDTO.setCount(getTurnCount(BigDecimal.ZERO));
} else { } else {
BigDecimal divide = BigDecimal.valueOf(successSize).divide(BigDecimal.valueOf(simpleAllApiCaseSize), 2, RoundingMode.HALF_UP); BigDecimal divide = BigDecimal.valueOf(successSize).divide(BigDecimal.valueOf(simpleAllApiCaseSize), 4, RoundingMode.HALF_UP);
passRateDTO.setCount(getTurnCount(divide)); passRateDTO.setCount(getTurnCount(divide));
} }
passRateDTOS.add(passRateDTO); passRateDTOS.add(passRateDTO);
@ -1579,9 +1573,9 @@ public class DashboardService {
NameCountDTO execRateDTO = new NameCountDTO(); NameCountDTO execRateDTO = new NameCountDTO();
execRateDTO.setName(name); execRateDTO.setName(name);
if (simpleAllApiCaseSize == 0) { if (simpleAllApiCaseSize == 0) {
execRateDTO.setCount(0); execRateDTO.setCount(getTurnCount(BigDecimal.ZERO));
} else { } else {
BigDecimal divide = BigDecimal.valueOf(simpleAllApiCaseSize - unExecSize).divide(BigDecimal.valueOf(simpleAllApiCaseSize), 2, RoundingMode.HALF_UP); BigDecimal divide = BigDecimal.valueOf(simpleAllApiCaseSize - unExecSize).divide(BigDecimal.valueOf(simpleAllApiCaseSize), 4, RoundingMode.HALF_UP);
execRateDTO.setCount(getTurnCount(divide)); execRateDTO.setCount(getTurnCount(divide));
} }
execRateDTOS.add(execRateDTO); execRateDTOS.add(execRateDTO);
@ -1708,9 +1702,9 @@ public class DashboardService {
NameCountDTO retentionRate = new NameCountDTO(); NameCountDTO retentionRate = new NameCountDTO();
retentionRate.setName(Translator.get("bug_management.retentionRate")); retentionRate.setName(Translator.get("bug_management.retentionRate"));
if (totalSize == 0) { if (totalSize == 0) {
retentionRate.setCount(0); retentionRate.setCount(getTurnCount(BigDecimal.ZERO));
} else { } else {
BigDecimal divide = BigDecimal.valueOf(statusSize).divide(BigDecimal.valueOf(totalSize), 2, RoundingMode.HALF_UP); BigDecimal divide = BigDecimal.valueOf(statusSize).divide(BigDecimal.valueOf(totalSize), 4, RoundingMode.HALF_UP);
retentionRate.setCount(getTurnCount(divide)); retentionRate.setCount(getTurnCount(divide));
} }
retentionRates.add(retentionRate); retentionRates.add(retentionRate);
@ -1740,8 +1734,8 @@ public class DashboardService {
statusPercentDTO.setPercentValue("0%"); statusPercentDTO.setPercentValue("0%");
statusPercentDTO.setCount(0); statusPercentDTO.setCount(0);
} else { } else {
BigDecimal divide = BigDecimal.valueOf(bugSize).divide(BigDecimal.valueOf(simpleSize), 2, RoundingMode.HALF_UP); BigDecimal divide = BigDecimal.valueOf(bugSize).divide(BigDecimal.valueOf(simpleSize), 4, RoundingMode.HALF_UP);
statusPercentDTO.setPercentValue(divide.multiply(BigDecimal.valueOf(100)) + "%"); statusPercentDTO.setPercentValue(getTurnCount(divide) + "%");
statusPercentDTO.setCount(bugSize); statusPercentDTO.setCount(bugSize);
} }
statusPercentList.add(statusPercentDTO); statusPercentList.add(statusPercentDTO);
@ -1790,8 +1784,8 @@ public class DashboardService {
statusPercentDTO.setPercentValue("0%"); statusPercentDTO.setPercentValue("0%");
statusPercentDTO.setCount(0); statusPercentDTO.setCount(0);
} else { } else {
BigDecimal divide = BigDecimal.valueOf(bugSize).divide(BigDecimal.valueOf(statusSize), 2, RoundingMode.HALF_UP); BigDecimal divide = BigDecimal.valueOf(bugSize).divide(BigDecimal.valueOf(statusSize), 4, RoundingMode.HALF_UP);
statusPercentDTO.setPercentValue(divide.multiply(BigDecimal.valueOf(100)) + "%"); statusPercentDTO.setPercentValue(getTurnCount(divide) + "%");
statusPercentDTO.setCount(bugSize); statusPercentDTO.setCount(bugSize);
} }
statusPercentList.add(statusPercentDTO); statusPercentList.add(statusPercentDTO);