Fix Bug #573: AI修复
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user