From fce96ef468291fb9a0e6a4d34ab371315e9485d4 Mon Sep 17 00:00:00 2001
From: yxh <172933527@qq.com>
Date: 星期六, 03 十月 2026 00:59:44 +0800
Subject: [PATCH] ai优化

---
 jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/jobrecord/JobRecordServiceImpl.java |   93 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 92 insertions(+), 1 deletions(-)

diff --git a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/jobrecord/JobRecordServiceImpl.java b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/jobrecord/JobRecordServiceImpl.java
index 17b5515..a5f0ae4 100644
--- a/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/jobrecord/JobRecordServiceImpl.java
+++ b/jh-module-ecg/jh-module-ecg-biz/src/main/java/cn/lihu/jh/module/ecg/service/jobrecord/JobRecordServiceImpl.java
@@ -1,7 +1,10 @@
 package cn.lihu.jh.module.ecg.service.jobrecord;
 
 import cn.lihu.jh.module.ecg.controller.admin.appointment.vo.AppointmentRespVO;
+import cn.lihu.jh.module.ecg.dal.dataobject.appointment.AppointmentDO;
+import cn.lihu.jh.module.ecg.dal.dataobject.devrent.DevRentDO;
 import cn.lihu.jh.module.ecg.dal.dataobject.jobrecord.JobRecordStatisticDO;
+import cn.lihu.jh.module.ecg.dal.mysql.appointment.AppointmentMapper;
 import cn.lihu.jh.module.ecg.dal.mysql.devrent.DevRentMapper;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
@@ -38,6 +41,9 @@
     @Resource
     private DevRentMapper devRentMapper;
 
+    @Resource
+    private AppointmentMapper appointmentMapper;
+
     @Override
     public Long createJobRecord(JobRecordSaveReqVO createReqVO) {
         // 鎻掑叆
@@ -72,7 +78,11 @@
 
     @Override
     public JobRecordDO getJobRecord(Long id) {
-        return jobRecordMapper.selectById(id);
+        JobRecordDO jobRecordDO = jobRecordMapper.selectById(id);
+        if (null != jobRecordDO) {
+            fillPatientInfo(java.util.Collections.singletonList(jobRecordDO));
+        }
+        return jobRecordDO;
     }
 
     @Override
@@ -86,11 +96,92 @@
             for (int i = 0; i < jobRecordDOList.size(); i++) {
                 jobRecordDOList.get(i).setPaid(paidInfoList.get(i));
             }
+            // 闇�姹�1锛氬洖濉偅鑰呬俊鎭紙鎵归噺锛岄伩鍏� N+1锛�
+            fillPatientInfo(jobRecordDOList);
         }
 
         return  pageResult;
     }
 
+    // ==================== 闇�姹�1锛氬洖濉偅鑰呬俊鎭� 18 椤� ====================
+    // 鍥炲~閾捐矾锛堜笁绾э級锛�
+    //   job_record.rentId 鈫� dev_rent.applyNo 鈫� appointment
+    // 涔嬫墍浠ヤ笉鐢ㄩ�愭潯 getByApplyNo锛歫ob_record 鍒楄〃椤典竴娆″彲鑳借繑鍥炲嚑鍗佹潯锛�
+    // 閫愭潯鏌ヤ細褰㈡垚 N+1銆傝繖閲屾敼涓恒�屾壒閲忓彇 dev_rent銆�+銆屾壒閲忓彇 appointment銆嶃��
+
+    private void fillPatientInfo(List<JobRecordDO> jobRecordDOList) {
+        if (null == jobRecordDOList || jobRecordDOList.isEmpty()) {
+            return;
+        }
+        // 1) 鎵归噺鍙� dev_rent锛屾嬁鍒� applyNo
+        List<Long> rentIdList = jobRecordDOList.stream()
+                .map(JobRecordDO::getRentId)
+                .filter(java.util.Objects::nonNull)
+                .distinct()
+                .toList();
+        if (rentIdList.isEmpty()) {
+            return;
+        }
+        Map<Long, String> applyNoByRentId = new HashMap<>();
+        // 涓�娆� IN 鏌ヨ鍙栧叏閮� applyNo锛堝師鍏堥�愭潯 selectById 鈫� N 娆℃煡璇級
+        List<DevRentDO> devRentDOList = devRentMapper.getApplyNoByIdList(rentIdList);
+        if (null != devRentDOList) {
+            devRentDOList.forEach(d -> {
+                if (null != d && null != d.getId()
+                        && org.springframework.util.StringUtils.hasText(d.getApplyNo())) {
+                    applyNoByRentId.put(d.getId(), d.getApplyNo());
+                }
+            });
+        }
+        if (applyNoByRentId.isEmpty()) {
+            return;
+        }
+
+        // 2) 鎵归噺鍙� appointment锛堜竴娆� IN 鏌ヨ锛�
+        List<String> applyNoList = applyNoByRentId.values().stream().distinct().toList();
+        Map<String, AppointmentDO> appointmentByApplyNo = new HashMap<>();
+        List<AppointmentDO> appointmentDOList = appointmentMapper.getByApplyNoList(applyNoList);
+        if (null != appointmentDOList) {
+            appointmentDOList.forEach(a -> {
+                if (null != a && org.springframework.util.StringUtils.hasText(a.getApplyNo())) {
+                    appointmentByApplyNo.put(a.getApplyNo(), a);
+                }
+            });
+        }
+
+        // 3) 鍥炲~
+        jobRecordDOList.forEach(jobRecordDO -> {
+            if (null == jobRecordDO || null == jobRecordDO.getRentId()) {
+                return;
+            }
+            String applyNo = applyNoByRentId.get(jobRecordDO.getRentId());
+            if (null == applyNo) {
+                return;
+            }
+            AppointmentDO appointment = appointmentByApplyNo.get(applyNo);
+            if (null == appointment) {
+                return;
+            }
+            jobRecordDO.setApplyNo(applyNo);
+            jobRecordDO.setEpisodeId(appointment.getEpisodeId());
+            jobRecordDO.setPatGender(appointment.getPatGender());
+            jobRecordDO.setPatBirthday(appointment.getPatBirthday());
+            jobRecordDO.setRegisterDate(appointment.getRegisterDate());
+            jobRecordDO.setDoctor(appointment.getDoctor());
+            jobRecordDO.setDoctorTime(appointment.getDoctorTime());
+            jobRecordDO.setPatSrc(appointment.getPatSrc());
+            jobRecordDO.setPatMobile(appointment.getPatMobile());
+            jobRecordDO.setPatPhone(appointment.getPatPhone());
+            jobRecordDO.setPatWardDesc(appointment.getPatWardDesc());
+            jobRecordDO.setPatBedNo(appointment.getPatBedNo());
+            jobRecordDO.setMedicalCard(appointment.getMedicalCard());
+            jobRecordDO.setDoctorAdviceNo(appointment.getDoctorAdviceNo());
+            jobRecordDO.setOutpatientNo(appointment.getOutpatientNo());
+            jobRecordDO.setPatIdentityId(appointment.getPatIdentityId());
+            jobRecordDO.setTolerance(appointment.getTolerance());
+        });
+    }
+
     @Override
     public List<JobRecordStatisticDO> getJobStatistic(LocalDateTime jobTimeFrom, LocalDateTime jobTimeTo) {
 

--
Gitblit v1.9.3