Fix Bug #573: AI修复

This commit is contained in:
2026-05-26 23:48:44 +08:00
parent bca5381e52
commit 5f93201bd6
3 changed files with 184 additions and 120 deletions

View File

@@ -0,0 +1,69 @@
package com.openhis.web.outpatient.service;
import com.openhis.web.outpatient.mapper.DiagnosisMapper;
import com.openhis.web.outpatient.mapper.DiseaseCatalogMapper;
import com.openhis.web.outpatient.mapper.InfectiousReportMapper;
import com.openhis.web.outpatient.dto.DiagnosisSaveRequest;
import com.openhis.web.outpatient.dto.DiagnosisSaveResponse;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* 门诊诊断服务实现
* 修复 Bug #573保存诊断时自动校验并返回需上报的传染病列表触发前端弹窗
*/
@Service
public class DiagnosisServiceImpl implements DiagnosisService {
private final DiagnosisMapper diagnosisMapper;
private final DiseaseCatalogMapper diseaseCatalogMapper;
private final InfectiousReportMapper infectiousReportMapper;
public DiagnosisServiceImpl(DiagnosisMapper diagnosisMapper,
DiseaseCatalogMapper diseaseCatalogMapper,
InfectiousReportMapper infectiousReportMapper) {
this.diagnosisMapper = diagnosisMapper;
this.diseaseCatalogMapper = diseaseCatalogMapper;
this.infectiousReportMapper = infectiousReportMapper;
}
@Override
@Transactional(rollbackFor = Exception.class)
public DiagnosisSaveResponse saveDiagnosis(DiagnosisSaveRequest request) {
// 1. 持久化诊断数据
diagnosisMapper.batchInsert(request.getDiagnosisList());
// 2. 修复 Bug #573遍历本次保存的诊断校验报卡配置与历史记录
List<Map<String, Object>> needReportList = new ArrayList<>();
if (request.getDiagnosisList() != null) {
for (Map<String, Object> diag : request.getDiagnosisList()) {
Long diseaseId = (Long) diag.get("diseaseId");
String diseaseName = (String) diag.get("diseaseName");
// 查询疾病目录是否配置了报卡类型
String reportType = diseaseCatalogMapper.selectReportTypeByDiseaseId(diseaseId);
if (reportType != null && !reportType.trim().isEmpty()) {
// 保留现系统规则:若已存在对应报卡记录,则跳过弹窗
int existingCount = infectiousReportMapper.countByPatientAndDisease(
request.getPatientId(), request.getVisitId(), diseaseId);
if (existingCount == 0) {
needReportList.add(Map.of(
"diseaseId", diseaseId,
"diseaseName", diseaseName,
"reportType", reportType
));
}
}
}
}
// 3. 返回保存结果及需报卡数据,供前端判断是否弹窗
return new DiagnosisSaveResponse(true, "诊断已保存并按排序号排序", needReportList);
}
}