301
预约管理-》门诊预约挂号:号源信息的序号未进行取值 316门诊医生站-》医嘱TAB页面:会诊医嘱状态从“已签发”变成“草稿” 317【门诊医生站】已签发会诊医嘱未同步至门诊收费系统生成待收费项目 344 门诊预约挂号:未过滤过期号源,允许预约已过时的时间段 347 医生门诊工作已就诊的病人提示未就诊
This commit is contained in:
@@ -421,6 +421,20 @@ public class ConsultationAppServiceImpl implements IConsultationAppService {
|
||||
|
||||
// 新增:更新门诊医嘱表状态为已提交
|
||||
updateServiceRequestStatus(entity.getOrderId(), RequestStatus.ACTIVE.getValue());
|
||||
|
||||
// 🎯 更新会诊关联费用项状态为"待收费",提交后即可在收费界面看到
|
||||
if (entity.getOrderId() != null) {
|
||||
LambdaQueryWrapper<ChargeItem> chargeItemWrapper = new LambdaQueryWrapper<>();
|
||||
chargeItemWrapper.eq(ChargeItem::getServiceId, entity.getOrderId())
|
||||
.eq(ChargeItem::getServiceTable, "wor_service_request");
|
||||
List<ChargeItem> chargeItems = iChargeItemService.list(chargeItemWrapper);
|
||||
for (ChargeItem chargeItem : chargeItems) {
|
||||
chargeItem.setStatusEnum(ChargeItemStatus.PLANNED.getValue());
|
||||
iChargeItemService.updateById(chargeItem);
|
||||
}
|
||||
log.info("会诊提交,更新关联费用项状态为待收费,更新数量: {}", chargeItems.size());
|
||||
}
|
||||
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
log.error("提交会诊申请失败", e);
|
||||
@@ -464,6 +478,18 @@ public class ConsultationAppServiceImpl implements IConsultationAppService {
|
||||
// 更新门诊医嘱表状态为新开
|
||||
updateServiceRequestStatus(entity.getOrderId(), RequestStatus.DRAFT.getValue());
|
||||
|
||||
// 更新关联费用项状态为草稿
|
||||
if (entity.getOrderId() != null) {
|
||||
LambdaQueryWrapper<ChargeItem> chargeItemWrapper = new LambdaQueryWrapper<>();
|
||||
chargeItemWrapper.eq(ChargeItem::getServiceId, entity.getOrderId())
|
||||
.eq(ChargeItem::getServiceTable, "wor_service_request");
|
||||
List<ChargeItem> chargeItems = iChargeItemService.list(chargeItemWrapper);
|
||||
for (ChargeItem chargeItem : chargeItems) {
|
||||
chargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue());
|
||||
iChargeItemService.updateById(chargeItem);
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
// 作废:状态校验 - 已确认(20)、已签名(30)、已完成(40) 状态禁止作废
|
||||
ConsultationStatusEnum currentStatus = ConsultationStatusEnum.getByCode(entity.getConsultationStatus());
|
||||
@@ -480,6 +506,18 @@ public class ConsultationAppServiceImpl implements IConsultationAppService {
|
||||
// 更新门诊医嘱表状态为已作废
|
||||
updateServiceRequestStatus(entity.getOrderId(), RequestStatus.CANCELLED.getValue());
|
||||
|
||||
// 更新关联费用项状态为终止
|
||||
if (entity.getOrderId() != null) {
|
||||
LambdaQueryWrapper<ChargeItem> chargeItemWrapper = new LambdaQueryWrapper<>();
|
||||
chargeItemWrapper.eq(ChargeItem::getServiceId, entity.getOrderId())
|
||||
.eq(ChargeItem::getServiceTable, "wor_service_request");
|
||||
List<ChargeItem> chargeItems = iChargeItemService.list(chargeItemWrapper);
|
||||
for (ChargeItem chargeItem : chargeItems) {
|
||||
chargeItem.setStatusEnum(ChargeItemStatus.ABORTED.getValue());
|
||||
iChargeItemService.updateById(chargeItem);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -668,12 +706,14 @@ public class ConsultationAppServiceImpl implements IConsultationAppService {
|
||||
@Override
|
||||
public List<ConsultationRequestDto> getMyInvitations() {
|
||||
try {
|
||||
// 获取当前登录医生ID
|
||||
// 获取当前登录医生ID和租户ID
|
||||
Long currentPhysicianId = SecurityUtils.getLoginUser().getPractitionerId();
|
||||
Long tenantId = SecurityUtils.getLoginUser().getTenantId().longValue();
|
||||
|
||||
// 查询邀请我的会诊申请
|
||||
LambdaQueryWrapper<ConsultationInvited> invitedWrapper = new LambdaQueryWrapper<>();
|
||||
invitedWrapper.eq(ConsultationInvited::getInvitedPhysicianId, currentPhysicianId)
|
||||
invitedWrapper.eq(ConsultationInvited::getTenantId, tenantId)
|
||||
.eq(ConsultationInvited::getInvitedPhysicianId, currentPhysicianId)
|
||||
.orderByDesc(ConsultationInvited::getCreateTime);
|
||||
|
||||
List<ConsultationInvited> invitedList = consultationInvitedMapper.selectList(invitedWrapper);
|
||||
@@ -1201,15 +1241,17 @@ public class ConsultationAppServiceImpl implements IConsultationAppService {
|
||||
@Override
|
||||
public List<ConsultationConfirmationDto> getPendingConfirmationList() {
|
||||
try {
|
||||
// 获取当前登录医生ID
|
||||
// 获取当前登录医生ID和租户ID
|
||||
Long currentPhysicianId = SecurityUtils.getLoginUser().getPractitionerId();
|
||||
Long tenantId = SecurityUtils.getLoginUser().getTenantId().longValue();
|
||||
log.info("获取待确认会诊列表,当前医生ID: {}", currentPhysicianId);
|
||||
|
||||
// 🎯 关键修改:查询当前医生个人状态为"待确认"、"已确认"或"已签名"的邀请记录
|
||||
// 10=已提交(待确认)、20=已确认(待签名)、30=已签名,排除40=已完成
|
||||
LambdaQueryWrapper<ConsultationInvited> invitedWrapper = new LambdaQueryWrapper<>();
|
||||
invitedWrapper.eq(ConsultationInvited::getInvitedPhysicianId, currentPhysicianId)
|
||||
.in(ConsultationInvited::getInvitedStatus,
|
||||
invitedWrapper.eq(ConsultationInvited::getTenantId, tenantId)
|
||||
.eq(ConsultationInvited::getInvitedPhysicianId, currentPhysicianId)
|
||||
.in(ConsultationInvited::getInvitedStatus,
|
||||
ConsultationStatusEnum.SUBMITTED.getCode(), // 10-待确认
|
||||
ConsultationStatusEnum.CONFIRMED.getCode(), // 20-已确认(待签名)
|
||||
ConsultationStatusEnum.SIGNED.getCode()) // 30-已签名
|
||||
@@ -1233,7 +1275,8 @@ public class ConsultationAppServiceImpl implements IConsultationAppService {
|
||||
// 🎯 查询会诊申请详情(白名单:只查询正在进行中的会诊,明确业务范围)
|
||||
// 查询已提交、已确认、已签名状态的会诊,排除已完成(40)
|
||||
LambdaQueryWrapper<ConsultationRequest> requestWrapper = new LambdaQueryWrapper<>();
|
||||
requestWrapper.in(ConsultationRequest::getId, requestIds)
|
||||
requestWrapper.eq(ConsultationRequest::getTenantId, tenantId)
|
||||
.in(ConsultationRequest::getId, requestIds)
|
||||
.in(ConsultationRequest::getConsultationStatus,
|
||||
ConsultationStatusEnum.SUBMITTED.getCode(), // 10-已提交
|
||||
ConsultationStatusEnum.CONFIRMED.getCode(), // 20-已确认
|
||||
@@ -1633,7 +1676,20 @@ public class ConsultationAppServiceImpl implements IConsultationAppService {
|
||||
|
||||
// 更新医嘱状态为"已完成"
|
||||
updateServiceRequestStatus(request.getOrderId(), RequestStatus.COMPLETED.getValue());
|
||||
|
||||
|
||||
// 🎯 更新会诊关联费用项状态为"待收费",这样收费界面就能看到了
|
||||
if (request.getOrderId() != null) {
|
||||
LambdaQueryWrapper<ChargeItem> chargeItemWrapper = new LambdaQueryWrapper<>();
|
||||
chargeItemWrapper.eq(ChargeItem::getServiceId, request.getOrderId())
|
||||
.eq(ChargeItem::getServiceTable, "wor_service_request");
|
||||
List<ChargeItem> chargeItems = iChargeItemService.list(chargeItemWrapper);
|
||||
for (ChargeItem chargeItem : chargeItems) {
|
||||
chargeItem.setStatusEnum(ChargeItemStatus.PLANNED.getValue());
|
||||
iChargeItemService.updateById(chargeItem);
|
||||
}
|
||||
log.info("会诊完成,更新关联费用项状态为待收费,更新数量: {}", chargeItems.size());
|
||||
}
|
||||
|
||||
log.info("所有医生都已签名,会诊申请状态更新为:已签名(30)");
|
||||
} else {
|
||||
// 🎯 关键修改:部分医生签名,整体状态不变(保持为10或20)
|
||||
|
||||
@@ -573,12 +573,13 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
|
||||
// 1. 校验就诊状态:必须是已接诊状态
|
||||
Encounter encounterCheck = iEncounterService.getById(adviceSaveDto.getEncounterId());
|
||||
if (encounterCheck != null) {
|
||||
// 就诊状态:1001=挂号,1002=已接诊,1003=已收费,1004=已完成
|
||||
if (encounterCheck.getStatusEnum() != null &&
|
||||
encounterCheck.getStatusEnum() != 1002 &&
|
||||
encounterCheck.getStatusEnum() != 1003 &&
|
||||
encounterCheck.getStatusEnum() != 1004) {
|
||||
log.error("BugFix#338: 患者未接诊,禁止划价/保存医嘱:encounterId={}, status={}",
|
||||
// 就诊状态:1=待诊(PLANNED),允许保存的状态 = 2(IN_PROGRESS在诊)、3(ON_HOLD暂离)、4(DISCHARGED诊毕)、5(COMPLETED完成)
|
||||
if (encounterCheck.getStatusEnum() != null &&
|
||||
encounterCheck.getStatusEnum() != EncounterStatus.IN_PROGRESS.getValue() &&
|
||||
encounterCheck.getStatusEnum() != EncounterStatus.ON_HOLD.getValue() &&
|
||||
encounterCheck.getStatusEnum() != EncounterStatus.DISCHARGED.getValue() &&
|
||||
encounterCheck.getStatusEnum() != EncounterStatus.COMPLETED.getValue()) {
|
||||
log.error("BugFix#338: 患者未接诊,禁止划价/保存医嘱:encounterId={}, status={}",
|
||||
adviceSaveDto.getEncounterId(), encounterCheck.getStatusEnum());
|
||||
return R.fail(null, "患者尚未接诊,无法保存医嘱。请先完成接诊操作!");
|
||||
}
|
||||
@@ -967,13 +968,20 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
|
||||
// 处理耗材发放
|
||||
Long dispenseId = iDeviceDispenseService.handleDeviceDispense(deviceRequest, DbOpType.INSERT.getCode());
|
||||
|
||||
// 查询耗材定价信息
|
||||
AdviceBaseDto deviceAdviceDto = new AdviceBaseDto();
|
||||
deviceAdviceDto.setAdviceDefinitionId(boundDevice.getDevActId());
|
||||
deviceAdviceDto.setAdviceTableName(CommonConstants.TableName.ADM_DEVICE_DEFINITION);
|
||||
IPage<AdviceBaseDto> devicePage = getAdviceBaseInfo(deviceAdviceDto, null, null, null,
|
||||
adviceSaveDto.getFounderOrgId(), 1, 1, Whether.NO.getValue(),
|
||||
List.of(ItemType.DEVICE.getValue()), null, null);
|
||||
// 查询耗材定价信息 - 直接使用mapper查询,避免递归调用getAdviceBaseInfo导致栈溢出
|
||||
IPage<AdviceBaseDto> devicePage = doctorStationAdviceAppMapper.getAdviceBaseInfo(
|
||||
new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(1, 1),
|
||||
PublicationStatus.ACTIVE.getValue(),
|
||||
adviceSaveDto.getFounderOrgId(),
|
||||
null,
|
||||
CommonConstants.TableName.ADM_DEVICE_DEFINITION,
|
||||
null,
|
||||
null,
|
||||
List.of(boundDevice.getDevActId()),
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null);
|
||||
|
||||
if (devicePage == null || devicePage.getRecords().isEmpty()) {
|
||||
log.warn("无法找到耗材定价信息: deviceDefId={}", boundDevice.getDevActId());
|
||||
@@ -981,12 +989,19 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
|
||||
}
|
||||
|
||||
AdviceBaseDto deviceBaseInfo = devicePage.getRecords().get(0);
|
||||
if (deviceBaseInfo.getPriceList() == null || deviceBaseInfo.getPriceList().isEmpty()) {
|
||||
|
||||
// 查询价格信息 - 直接查询定价主表
|
||||
List<AdvicePriceDto> mainCharge = doctorStationAdviceAppMapper.getMainCharge(
|
||||
List.of(deviceBaseInfo.getChargeItemDefinitionId()), PublicationStatus.ACTIVE.getValue());
|
||||
|
||||
if (mainCharge == null || mainCharge.isEmpty()) {
|
||||
log.warn("耗材没有定价信息: deviceDefId={}", boundDevice.getDevActId());
|
||||
continue;
|
||||
}
|
||||
|
||||
AdvicePriceDto devicePrice = deviceBaseInfo.getPriceList().get(0);
|
||||
AdvicePriceDto devicePrice = mainCharge.get(0);
|
||||
devicePrice.setDefinitionId(deviceBaseInfo.getChargeItemDefinitionId());
|
||||
// 如果需要定价子表ID,可以从mainCharge中获取
|
||||
|
||||
// 创建耗材费用项
|
||||
ChargeItem deviceChargeItem = new ChargeItem();
|
||||
@@ -1554,6 +1569,15 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
|
||||
// }
|
||||
// log.error(e.getMessage(), e);
|
||||
// }
|
||||
// 签发时将收费项目状态从草稿改为待收费
|
||||
Long chargeItemId = adviceSaveDto.getChargeItemId();
|
||||
if (chargeItemId != null) {
|
||||
ChargeItem existingChargeItem = iChargeItemService.getById(chargeItemId);
|
||||
if (existingChargeItem != null) {
|
||||
existingChargeItem.setStatusEnum(ChargeItemStatus.PLANNED.getValue());
|
||||
iChargeItemService.updateById(existingChargeItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user