diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/consultation/appservice/IConsultationAppService.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/consultation/appservice/IConsultationAppService.java index 4c907756..1117e2d6 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/consultation/appservice/IConsultationAppService.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/consultation/appservice/IConsultationAppService.java @@ -149,6 +149,14 @@ public interface IConsultationAppService { * @return 会诊意见列表 */ List getConsultationOpinions(String consultationId); + + /** + * 根据ID查询会诊申请详情 + * + * @param id 会诊申请ID + * @return 会诊申请详情 + */ + ConsultationRequestDto getConsultationById(Long id); } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/consultation/appservice/impl/ConsultationAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/consultation/appservice/impl/ConsultationAppServiceImpl.java index 71b35cc3..72457271 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/consultation/appservice/impl/ConsultationAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/consultation/appservice/impl/ConsultationAppServiceImpl.java @@ -186,6 +186,11 @@ public class ConsultationAppServiceImpl implements IConsultationAppService { wrapper.like(ConsultationRequest::getPatientName, dto.getPatientName()); } + // 会诊ID查询(支持模糊匹配) + if (StringUtils.hasText(dto.getConsultationId())) { + wrapper.like(ConsultationRequest::getConsultationId, dto.getConsultationId()); + } + // 按创建时间倒序排列 wrapper.orderByDesc(ConsultationRequest::getConsultationRequestDate); @@ -240,6 +245,11 @@ public class ConsultationAppServiceImpl implements IConsultationAppService { wrapper.like(ConsultationRequest::getPatientName, dto.getPatientName()); } + // 会诊ID查询(支持模糊匹配) + if (StringUtils.hasText(dto.getConsultationId())) { + wrapper.like(ConsultationRequest::getConsultationId, dto.getConsultationId()); + } + // 按创建时间倒序排列 wrapper.orderByDesc(ConsultationRequest::getConsultationRequestDate); @@ -444,17 +454,6 @@ public class ConsultationAppServiceImpl implements IConsultationAppService { if (!ConsultationStatusEnum.SUBMITTED.getCode().equals(entity.getConsultationStatus())) { throw new IllegalArgumentException("只有已提交状态的会诊申请才能取消提交"); } - - // 🎯 新增:检查是否有医生已确认或签名 - // 即使整体状态还是10(部分医生确认/签名),也不允许取消提交 - LambdaQueryWrapper invitedCheckWrapper = new LambdaQueryWrapper<>(); - invitedCheckWrapper.eq(ConsultationInvited::getConsultationRequestId, entity.getId()) - .ge(ConsultationInvited::getInvitedStatus, ConsultationStatusEnum.CONFIRMED.getCode()); - long confirmedOrSignedCount = consultationInvitedMapper.selectCount(invitedCheckWrapper); - if (confirmedOrSignedCount > 0) { - throw new IllegalArgumentException("已有医生确认或签名,无法取消提交"); - } - // 取消提交:将状态从"已提交"改回"新开" entity.setConsultationStatus(ConsultationStatusEnum.NEW.getCode()); entity.setConfirmingPhysician(null); @@ -735,8 +734,8 @@ public class ConsultationAppServiceImpl implements IConsultationAppService { }).collect(Collectors.toList()); dto.setInvitedList(invitedDtoList); - - + + // 🎯 如果会诊已确认、已签名或已完成,填充会诊记录信息(从会诊确认表中获取) // 会诊状态:20=已确认,30=已签名,40=已完成 if (entity.getConsultationStatus() != null && @@ -1204,7 +1203,7 @@ public class ConsultationAppServiceImpl implements IConsultationAppService { // 10=已提交(待确认)、20=已确认(待签名)、30=已签名,排除40=已完成 LambdaQueryWrapper invitedWrapper = new LambdaQueryWrapper<>(); invitedWrapper.eq(ConsultationInvited::getInvitedPhysicianId, currentPhysicianId) - .in(ConsultationInvited::getInvitedStatus, + .in(ConsultationInvited::getInvitedStatus, ConsultationStatusEnum.SUBMITTED.getCode(), // 10-待确认 ConsultationStatusEnum.CONFIRMED.getCode(), // 20-已确认(待签名) ConsultationStatusEnum.SIGNED.getCode()) // 30-已签名 @@ -1828,5 +1827,26 @@ public class ConsultationAppServiceImpl implements IConsultationAppService { return new ArrayList<>(); } } + + @Override + public ConsultationRequestDto getConsultationById(Long id) { + try { + if (id == null) { + throw new IllegalArgumentException("会诊申请ID不能为空"); + } + + // 1. 查询会诊申请 + ConsultationRequest request = consultationRequestMapper.selectById(id); + if (request == null) { + throw new IllegalArgumentException("会诊申请不存在,ID: " + id); + } + + // 2. 转换为DTO并返回 + return convertToDto(request); + } catch (Exception e) { + log.error("查询会诊申请详情失败", e); + throw new RuntimeException("查询会诊申请详情失败: " + e.getMessage()); + } + } } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/consultation/controller/ConsultationController.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/consultation/controller/ConsultationController.java index de2746f3..5e8672d0 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/consultation/controller/ConsultationController.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/consultation/controller/ConsultationController.java @@ -302,5 +302,21 @@ public class ConsultationController { return R.fail("获取会诊意见列表失败: " + e.getMessage()); } } + + /** + * 根据ID查询会诊申请详情 + */ + @ApiOperation("根据ID查询会诊申请详情") + @GetMapping("/detail/{id}") + public R getConsultationById( + @ApiParam("会诊申请ID") @PathVariable Long id) { + try { + ConsultationRequestDto detail = consultationAppService.getConsultationById(id); + return R.ok(detail); + } catch (Exception e) { + log.error("查询会诊申请详情失败", e); + return R.fail("查询会诊申请详情失败: " + e.getMessage()); + } + } } diff --git a/openhis-ui-vue3/src/views/consultationmanagement/consultationapplication/api.js b/openhis-ui-vue3/src/views/consultationmanagement/consultationapplication/api.js index e6b21b12..add1b16c 100644 --- a/openhis-ui-vue3/src/views/consultationmanagement/consultationapplication/api.js +++ b/openhis-ui-vue3/src/views/consultationmanagement/consultationapplication/api.js @@ -135,3 +135,14 @@ export function getConsultationOpinions(consultationId) { }) } +/** + * 根据ID查询会诊申请详情 + * @param {Number} id 会诊申请ID + */ +export function getConsultationById(id) { + return request({ + url: `/consultation/detail/${id}`, + method: 'get' + }) +} + diff --git a/openhis-ui-vue3/src/views/consultationmanagement/consultationapplication/index.vue b/openhis-ui-vue3/src/views/consultationmanagement/consultationapplication/index.vue index 8e8489d5..613cd172 100644 --- a/openhis-ui-vue3/src/views/consultationmanagement/consultationapplication/index.vue +++ b/openhis-ui-vue3/src/views/consultationmanagement/consultationapplication/index.vue @@ -81,6 +81,15 @@ /> + + + + 查询 @@ -394,7 +403,8 @@ const queryParams = reactive({ applyDoctor: '', urgency: '', consultationStatus: '', - patientName: '' + patientName: '', + consultationId: '' }) // 会诊状态常量 @@ -702,7 +712,8 @@ const loadData = async () => { consultationStatus: queryParams.consultationStatus, patientName: queryParams.patientName, consultationRequestDate: queryParams.startTime, - consultationUrgency: queryParams.urgency + consultationUrgency: queryParams.urgency, + consultationId: queryParams.consultationId } const res = await queryConsultationListPage(queryData, pagination.currentPage, pagination.pageSize)