diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/lab/appservice/impl/LabActivityDefinitionAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/lab/appservice/impl/LabActivityDefinitionAppServiceImpl.java index 93b2b3a1..08b1c9b9 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/lab/appservice/impl/LabActivityDefinitionAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/lab/appservice/impl/LabActivityDefinitionAppServiceImpl.java @@ -17,7 +17,6 @@ import com.openhis.common.utils.HisQueryUtils; import com.openhis.common.enums.AssignSeqEnum; import com.openhis.lab.domain.LabActivityDefinition; import com.openhis.lab.service.ILabActivityDefinitionService; -import java.math.BigDecimal; import com.openhis.web.datadictionary.dto.DiagnosisTreatmentDto; import com.openhis.web.datadictionary.dto.DiagnosisTreatmentSelParam; import com.openhis.web.datadictionary.dto.DiagnosisTreatmentUpDto; @@ -27,6 +26,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; import java.util.Arrays; import java.util.HashSet; import java.util.List; @@ -69,6 +69,17 @@ public class LabActivityDefinitionAppServiceImpl implements ILabActivityDefiniti selParam.setPricingFlag(null); } + // Bug #414: 限制分页大小,防止一次性加载过多数据导致性能问题 + if (pageSize == null || pageSize <= 0) { + pageSize = 20; + } + if (pageSize > 50) { + pageSize = 50; + } + if (pageNo == null || pageNo <= 0) { + pageNo = 1; + } + QueryWrapper queryWrapper = HisQueryUtils.buildQueryWrapper(selParam, searchKey, new HashSet<>(Arrays.asList("T1.bus_no", "T1.name", "T1.py_str", "T1.wb_str")), request); @@ -81,11 +92,13 @@ public class LabActivityDefinitionAppServiceImpl implements ILabActivityDefiniti selParam.setPricingFlag(pricingFlagValue); } - IPage page = labActivityDefinitionManageMapper - .getLabActivityDefinitionPage(new Page<>(pageNo, pageSize), queryWrapper); + // Bug #414: 使用optimizeCountSql=true优化COUNT查询性能 + Page page = new Page<>(pageNo, pageSize, true); + IPage resultPage = labActivityDefinitionManageMapper + .getLabActivityDefinitionPage(page, queryWrapper); - page.getRecords().forEach(e -> { - // Fix for Bug #415: Ensure prices are not negative + resultPage.getRecords().forEach(e -> { + // Bug #415: 确保价格不为负数 if (e.getPackageAmount() != null && e.getPackageAmount().compareTo(BigDecimal.ZERO) < 0) { e.setPackageAmount(BigDecimal.ZERO); } @@ -99,14 +112,14 @@ public class LabActivityDefinitionAppServiceImpl implements ILabActivityDefiniti e.setPricingFlag_enumText(EnumUtils.getInfoByValue(Whether.class, e.getPricingFlag())); }); - return R.ok(page); + return R.ok(resultPage); } @Override public R getLabActivityDefinitionOne(Long id) { Integer tenantId = SecurityUtils.getLoginUser().getTenantId(); DiagnosisTreatmentDto dto = labActivityDefinitionManageMapper.getLabActivityDefinitionOne(id, tenantId); - // Fix for Bug #415: Ensure prices are not negative for single item + // Bug #415: 确保价格不为负数 if (dto != null) { if (dto.getPackageAmount() != null && dto.getPackageAmount().compareTo(BigDecimal.ZERO) < 0) { dto.setPackageAmount(BigDecimal.ZERO);