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 | 104 +++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 98 insertions(+), 6 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 1c439bb..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
@@ -80,16 +90,98 @@
PageResult<JobRecordDO> pageResult = jobRecordMapper.selectPage(pageReqVO);
List<JobRecordDO> jobRecordDOList = pageResult.getList();
- List<Long> rentIdList = jobRecordDOList.stream().map(item -> item.getRentId()).toList();
- List<Integer> paidInfoList = devRentMapper.getPaidInfo( rentIdList );
-
- for (int i = 0; i < jobRecordDOList.size(); i++) {
- jobRecordDOList.get(i).setPaid(paidInfoList.get(i));
+ if ( !jobRecordDOList.isEmpty() ) {
+ List<Long> rentIdList = jobRecordDOList.stream().map(item -> item.getRentId()).toList();
+ List<Integer> paidInfoList = devRentMapper.getPaidInfo(rentIdList);
+ 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