feat(doctorstation): 添加取消接诊功能

- 在医生工作站界面添加取消接诊按钮
- 实现取消接诊的前端处理逻辑和确认对话框
- 添加计算属性控制取消接诊按钮的禁用状态
- 完善后端取消接诊服务的安全性检查和异常处理
- 优化取消接诊时的业务数据验证流程
- 添加详细的错误提示和用户反馈机制
This commit is contained in:
2026-03-11 16:21:49 +08:00
parent 4b544dc214
commit 75737cf95c
2 changed files with 95 additions and 23 deletions

View File

@@ -230,35 +230,67 @@ public class DoctorStationMainAppServiceImpl implements IDoctorStationMainAppSer
*/
@Override
public R<?> cancelEncounter(Long encounterId) {
//1.判断是否已经产生业务,如医生已经开有病历、处方、诊断、检验检查或相关项目已收费、执行等,
//如果有则提示:需要医生删除、作废、退费才能【取消接诊】。
//1.1病历
Object emrDetailResult = iDoctorStationEmrAppService.getEmrDetail(encounterId).getData();
try {
//1.判断是否已经产生业务,如医生已经开有病历、处方、诊断、检验检查或相关项目已收费、执行等,
//如果有则提示:需要医生删除、作废、退费才能【取消接诊】。
//1.1病历
Object emrDetailResult = null;
try {
emrDetailResult = iDoctorStationEmrAppService.getEmrDetail(encounterId).getData();
} catch (Exception e) {
log.debug("获取病历信息失败: {}", e.getMessage());
}
//1.2诊断
Object diagnosisResult = iDoctorStationDiagnosisAppService.getEncounterDiagnosis(encounterId).getData();
//1.2诊断
Object diagnosisResult = null;
try {
diagnosisResult = iDoctorStationDiagnosisAppService.getEncounterDiagnosis(encounterId).getData();
} catch (Exception e) {
log.debug("获取诊断信息失败: {}", e.getMessage());
}
//1.3处方
Object adviceResult = iDoctorStationAdviceAppService.getRequestBaseInfo(encounterId).getData();
//1.3处方
Object adviceResult = null;
try {
adviceResult = iDoctorStationAdviceAppService.getRequestBaseInfo(encounterId).getData();
} catch (Exception e) {
log.debug("获取处方信息失败: {}", e.getMessage());
}
//1.4中医诊断、处方
Map<?,?> tcmDiagnosisResult = (Map<?,?>) iDoctorStationChineseMedicalAppService.getTcmEncounterDiagnosis(encounterId).getData();
Object symptom = tcmDiagnosisResult.get("symptom");
Object illness = tcmDiagnosisResult.get("illness");
Object tcmPrescriptionResult = iDoctorStationChineseMedicalAppService.getTcmRequestBaseInfo(encounterId).getData();
//1.4中医诊断、处方
Object symptom = null;
Object illness = null;
Object tcmPrescriptionResult = null;
try {
Map<?,?> tcmDiagnosisResult = (Map<?,?>) iDoctorStationChineseMedicalAppService.getTcmEncounterDiagnosis(encounterId).getData();
if (tcmDiagnosisResult != null) {
symptom = tcmDiagnosisResult.get("symptom");
illness = tcmDiagnosisResult.get("illness");
}
tcmPrescriptionResult = iDoctorStationChineseMedicalAppService.getTcmRequestBaseInfo(encounterId).getData();
} catch (Exception e) {
// 中医模块可能未启用或返回异常,忽略
log.debug("获取中医信息失败,可能未配置中医模块: {}", e.getMessage());
}
boolean isEmpty = ObjectUtil.isAllEmpty(emrDetailResult, diagnosisResult, adviceResult, symptom,illness, tcmPrescriptionResult);
boolean isEmpty = ObjectUtil.isAllEmpty(emrDetailResult, diagnosisResult, adviceResult, symptom, illness, tcmPrescriptionResult);
if (!isEmpty) {
return R.fail();
if (!isEmpty) {
return R.fail("该患者已产生业务数据(病历、诊断、处方等),无法直接取消接诊。请先删除相关数据后再操作。");
}
//2.取消接诊,患者重新回到患者队列待诊中
int update = encounterMapper.update(null,
new LambdaUpdateWrapper<Encounter>().eq(Encounter::getId, encounterId)
.set(Encounter::getStatusEnum, EncounterStatus.PLANNED.getValue())
.set(Encounter::getSubjectStatusEnum, EncounterSubjectStatus.TRIAGED.getValue()));
return update > 0 ? R.ok("取消接诊成功") : R.fail("取消接诊失败,请刷新后重试");
} catch (Exception e) {
log.error("取消接诊时发生错误encounterId={}", encounterId, e);
return R.fail("取消接诊失败:" + e.getMessage());
}
//2.取消接诊,患者重新回到患者队列待诊中
int update = encounterMapper.update(null,
new LambdaUpdateWrapper<Encounter>().eq(Encounter::getId, encounterId)
.set(Encounter::getStatusEnum, EncounterStatus.PLANNED.getValue())
.set(Encounter::getSubjectStatusEnum, EncounterSubjectStatus.TRIAGED.getValue()));
return update > 0 ? R.ok() : R.fail();
}
/**