diff --git a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/orderclosedloop/appservice/impl/OrderClosedLoopAppServiceImpl.java b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/orderclosedloop/appservice/impl/OrderClosedLoopAppServiceImpl.java index 3016d3bfa..bb0bf5b71 100644 --- a/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/orderclosedloop/appservice/impl/OrderClosedLoopAppServiceImpl.java +++ b/healthlink-his-server/healthlink-his-application/src/main/java/com/healthlink/his/web/orderclosedloop/appservice/impl/OrderClosedLoopAppServiceImpl.java @@ -174,7 +174,12 @@ public class OrderClosedLoopAppServiceImpl implements IOrderClosedLoopAppService private Map getUnclosedWarnings(Integer pageNum, Integer pageSize) { Map result = new HashMap<>(); - List> rows = recordMapper.selectUnclosedWarnings(); + // 使用分页查询避免全量拉取导致卡死 + int pn = (pageNum != null && pageNum > 0) ? pageNum : 1; + int ps = (pageSize != null && pageSize > 0) ? pageSize : 10; + int offset = (pn - 1) * ps; + long total = recordMapper.countUnclosedWarnings(); + List> rows = recordMapper.selectUnclosedWarningsPaged(ps, offset); java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); List> warnings = new ArrayList<>(); for (Map row : rows) { @@ -195,6 +200,9 @@ public class OrderClosedLoopAppServiceImpl implements IOrderClosedLoopAppService warnings.add(warning); } result.put("records", warnings); + result.put("total", total); + result.put("pageNum", pn); + result.put("pageSize", ps); return result; } diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/orderclosedloop/mapper/OrderExecuteRecordMapper.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/orderclosedloop/mapper/OrderExecuteRecordMapper.java index 079f5b3f8..686217082 100644 --- a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/orderclosedloop/mapper/OrderExecuteRecordMapper.java +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/orderclosedloop/mapper/OrderExecuteRecordMapper.java @@ -15,40 +15,46 @@ public interface OrderExecuteRecordMapper extends BaseMapper @Select("SELECT m.department_name FROM order_main m WHERE m.order_no = #{orderNo} AND m.delete_flag = '0' LIMIT 1") String findDepartmentByOrderNo(@Param("orderNo") String orderNo); - @Select("SELECT e.order_type AS orderType, " + - "COUNT(*) AS totalOrders, " + - "COUNT(CASE WHEN e.execute_status = 'completed' THEN 1 END) AS closedCount " + + @Select("SELECT e.order_type AS \"orderType\", " + + "COUNT(*) AS \"totalOrders\", " + + "COUNT(CASE WHEN e.execute_status = 'completed' THEN 1 END) AS \"closedCount\" " + "FROM order_execute_record e " + "WHERE e.delete_flag = '0' AND e.execute_status != 'cancelled' " + "GROUP BY e.order_type") List> selectOverviewByType(); - @Select("SELECT COALESCE(m.department_name, '未知') AS department, " + - "COUNT(*) AS totalOrders, " + - "COUNT(CASE WHEN e.execute_status = 'completed' THEN 1 END) AS closedCount " + + @Select("SELECT COALESCE(m.department_name, '未知') AS \"department\", " + + "COUNT(*) AS \"totalOrders\", " + + "COUNT(CASE WHEN e.execute_status = 'completed' THEN 1 END) AS \"closedCount\" " + "FROM order_execute_record e " + "LEFT JOIN order_main m ON e.order_no = m.order_no AND m.delete_flag = '0' " + "WHERE e.delete_flag = '0' AND e.execute_status != 'cancelled' " + - "GROUP BY m.department_name ORDER BY totalOrders DESC") + "GROUP BY m.department_name ORDER BY \"totalOrders\" DESC") List> selectGroupByDepartment(); - @Select("SELECT COALESCE(m.doctor_name, '未知') AS doctorName, " + - "COUNT(*) AS totalOrders, " + - "COUNT(CASE WHEN e.execute_status = 'completed' THEN 1 END) AS closedCount " + + @Select("SELECT COALESCE(m.doctor_name, '未知') AS \"doctorName\", " + + "COUNT(*) AS \"totalOrders\", " + + "COUNT(CASE WHEN e.execute_status = 'completed' THEN 1 END) AS \"closedCount\" " + "FROM order_execute_record e " + "LEFT JOIN order_main m ON e.order_no = m.order_no AND m.delete_flag = '0' " + "WHERE e.delete_flag = '0' AND e.execute_status != 'cancelled' " + - "GROUP BY m.doctor_name ORDER BY totalOrders DESC") + "GROUP BY m.doctor_name ORDER BY \"totalOrders\" DESC") List> selectGroupByDoctor(); - @Select("SELECT e.order_no AS orderNo, e.patient_name AS patientName, e.order_type AS orderType, " + - "COALESCE(m.department_name, '未知') AS department, " + - "COALESCE(m.doctor_name, '未知') AS doctorName, " + - "e.current_step AS currentStep, e.create_time AS orderTime " + + @Select("SELECT COUNT(*) FROM order_execute_record e " + + "WHERE e.delete_flag = '0' " + + "AND e.execute_status IN ('pending', 'in_progress', 'overdue', 'executing')") + long countUnclosedWarnings(); + + @Select("SELECT e.order_no AS \"orderNo\", e.patient_name AS \"patientName\", e.order_type AS \"orderType\", " + + "COALESCE(m.department_name, '未知') AS \"department\", " + + "COALESCE(m.doctor_name, '未知') AS \"doctorName\", " + + "e.current_step AS \"currentStep\", e.create_time AS \"orderTime\" " + "FROM order_execute_record e " + "LEFT JOIN order_main m ON e.order_no = m.order_no AND m.delete_flag = '0' " + "WHERE e.delete_flag = '0' " + "AND e.execute_status IN ('pending', 'in_progress', 'overdue', 'executing') " + - "ORDER BY e.create_time DESC") - List> selectUnclosedWarnings(); + "ORDER BY e.create_time DESC " + + "LIMIT #{limit} OFFSET #{offset}") + List> selectUnclosedWarningsPaged(@Param("limit") int limit, @Param("offset") int offset); } \ No newline at end of file