Fix Bug #573: AI修复
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
package com.openhis.application.service.impl;
|
||||
|
||||
import com.openhis.application.domain.dto.DiagnosisSaveDto;
|
||||
import com.openhis.application.domain.dto.DiagnosisSaveResultDto;
|
||||
import com.openhis.application.domain.entity.Diagnosis;
|
||||
import com.openhis.application.domain.entity.DiseaseCatalog;
|
||||
import com.openhis.application.mapper.DiagnosisMapper;
|
||||
import com.openhis.application.mapper.DiseaseCatalogMapper;
|
||||
import com.openhis.application.mapper.ReportCardMapper;
|
||||
import com.openhis.application.service.DiagnosisService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 诊断业务实现
|
||||
*
|
||||
* 修复 Bug #573:确诊配置了“报卡类型”的疾病后,保存诊断未自动触发传染病报卡弹窗。
|
||||
* 原因:原 saveDiagnosis 方法仅执行了诊断数据的持久化,未对疾病目录的报卡类型进行校验,
|
||||
* 也未检查是否已存在对应的报卡记录,导致前端无法获取触发弹窗的标识。
|
||||
*
|
||||
* 解决方案:在保存诊断成功后,遍历诊断项,查询疾病目录的报卡类型配置。
|
||||
* 若配置了报卡类型且当前患者/就诊次下无对应报卡记录,则将报卡类型加入返回结果。
|
||||
* 前端根据返回的报卡类型列表自动弹出填报界面。
|
||||
*/
|
||||
@Service
|
||||
public class DiagnosisServiceImpl implements DiagnosisService {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(DiagnosisServiceImpl.class);
|
||||
|
||||
@Autowired
|
||||
private DiagnosisMapper diagnosisMapper;
|
||||
@Autowired
|
||||
private DiseaseCatalogMapper diseaseCatalogMapper;
|
||||
@Autowired
|
||||
private ReportCardMapper reportCardMapper;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public DiagnosisSaveResultDto saveDiagnosis(DiagnosisSaveDto dto) {
|
||||
// 1. 持久化诊断数据
|
||||
if (!CollectionUtils.isEmpty(dto.getDiagnoses())) {
|
||||
for (Diagnosis diagnosis : dto.getDiagnoses()) {
|
||||
diagnosisMapper.insert(diagnosis);
|
||||
}
|
||||
}
|
||||
|
||||
// 2. 校验报卡类型并收集需触发的报卡
|
||||
List<String> reportCardTypes = new ArrayList<>();
|
||||
if (!CollectionUtils.isEmpty(dto.getDiagnoses())) {
|
||||
for (Diagnosis diagnosis : dto.getDiagnoses()) {
|
||||
DiseaseCatalog catalog = diseaseCatalogMapper.selectById(diagnosis.getDiseaseId());
|
||||
if (catalog != null && catalog.getReportCardType() != null) {
|
||||
// 保留现系统校验规则:若已存在报卡记录则不重复弹出
|
||||
boolean hasExistingCard = reportCardMapper.existsByPatientAndDisease(
|
||||
dto.getPatientId(), dto.getVisitId(), diagnosis.getDiseaseId()
|
||||
);
|
||||
if (!hasExistingCard) {
|
||||
reportCardTypes.add(catalog.getReportCardType());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 去重并返回
|
||||
List<String> uniqueTypes = reportCardTypes.stream().distinct().collect(Collectors.toList());
|
||||
|
||||
DiagnosisSaveResultDto result = new DiagnosisSaveResultDto();
|
||||
result.setMessage("诊断已保存并按排序号排序");
|
||||
result.setReportCardTypes(uniqueTypes);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user