diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/mapper/OutpatientRegistrationAppMapper.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/mapper/OutpatientRegistrationAppMapper.java index ba648028..7d335273 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/mapper/OutpatientRegistrationAppMapper.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/chargemanage/mapper/OutpatientRegistrationAppMapper.java @@ -51,11 +51,22 @@ public interface OutpatientRegistrationAppMapper { /** * 查询item绑定的信息(耗材或诊疗) - * + * * @param itemId itemId * @param devActable 绑定的表名(耗材或诊疗) * @return item绑定的信息 */ List getTmpActivityList(@Param("itemId") String itemId, @Param("devActable") String devActable); + /** + * 根据用法代码查询绑定的耗材 + * + * @param methodCode 用法代码 + * @param devActTable 绑定的表名(耗材) + * @param typeCode 类型代码(1-用法绑定) + * @return 绑定的耗材列表 + */ + List getBoundDevicesByUsage(@Param("methodCode") String methodCode, + @Param("devActTable") String devActTable, @Param("typeCode") String typeCode); + } diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java index 8a3f855f..c67203b7 100644 --- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java @@ -27,12 +27,14 @@ import com.openhis.common.utils.HisQueryUtils; import com.openhis.medication.domain.MedicationRequest; import com.openhis.medication.service.IMedicationDispenseService; import com.openhis.medication.service.IMedicationRequestService; +import com.openhis.web.chargemanage.mapper.OutpatientRegistrationAppMapper; import com.openhis.web.doctorstation.appservice.IDoctorStationAdviceAppService; import com.openhis.web.doctorstation.dto.*; import com.openhis.web.doctorstation.mapper.DoctorStationAdviceAppMapper; import com.openhis.web.doctorstation.utils.AdviceUtils; import com.openhis.web.doctorstation.utils.DoctorStationSendApplyUtil; import com.openhis.web.doctorstation.utils.PrescriptionUtils; +import com.openhis.web.personalization.dto.ActivityDeviceDto; import com.openhis.workflow.domain.ActivityDefinition; import com.openhis.workflow.domain.DeviceRequest; import com.openhis.workflow.domain.ServiceRequest; @@ -95,8 +97,9 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp @Resource IActivityDefinitionService iActivityDefinitionService; - // @Resource - // OutpatientRegistrationAppMapper outpatientRegistrationAppMapper; + @Resource + OutpatientRegistrationAppMapper outpatientRegistrationAppMapper; + @Resource DoctorStationSendApplyUtil doctorStationSendApplyUtil; @@ -714,11 +717,127 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp iChargeItemService.saveOrUpdate(chargeItem); + // 🔧 Bug Fix #145: 处理用法绑定的耗材 + if (StringUtils.isNotBlank(adviceSaveDto.getMethodCode())) { + handleBoundDevices(adviceSaveDto, medicationRequest, chargeItem, curDate, orgId, tenantId, + currentUsername); + } + } } return medRequestIdList; } + /** + * 处理用法绑定的耗材 + * + * @param adviceSaveDto 医嘱保存DTO + * @param medicationRequest 药品请求 + * @param medicationChargeItem 药品费用项 + * @param curDate 当前时间 + * @param orgId 科室ID + * @param tenantId 租户ID + * @param currentUsername 当前用户名 + */ + private void handleBoundDevices(AdviceSaveDto adviceSaveDto, MedicationRequest medicationRequest, + ChargeItem medicationChargeItem, Date curDate, Long orgId, Integer tenantId, String currentUsername) { + // 查询用法绑定的耗材 (typeCode=1表示用法绑定) + List boundDevices = outpatientRegistrationAppMapper.getBoundDevicesByUsage( + adviceSaveDto.getMethodCode(), + CommonConstants.TableName.ADM_DEVICE_DEFINITION, "1"); + + if (boundDevices == null || boundDevices.isEmpty()) { + return; + } + + for (ActivityDeviceDto boundDevice : boundDevices) { + // 创建耗材请求 + DeviceRequest deviceRequest = new DeviceRequest(); + deviceRequest.setStatusEnum(RequestStatus.DRAFT.getValue()); + deviceRequest.setTenantId(tenantId); + deviceRequest.setCreateBy(currentUsername); + deviceRequest.setCreateTime(curDate); + deviceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.DEVICE_RES_NO.getPrefix(), 4)); + deviceRequest.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); + deviceRequest.setQuantity(boundDevice.getQuantity()); + deviceRequest.setUnitCode(boundDevice.getUnitCode()); + deviceRequest.setCategoryEnum(adviceSaveDto.getCategoryEnum()); + deviceRequest.setDeviceDefId(boundDevice.getDevActId()); + deviceRequest.setPatientId(adviceSaveDto.getPatientId()); + deviceRequest.setRequesterId(adviceSaveDto.getPractitionerId()); + deviceRequest.setOrgId(adviceSaveDto.getFounderOrgId()); + deviceRequest.setReqAuthoredTime(curDate); + deviceRequest.setPerformLocation(adviceSaveDto.getLocationId()); + deviceRequest.setEncounterId(adviceSaveDto.getEncounterId()); + deviceRequest.setConditionId(adviceSaveDto.getConditionId()); + deviceRequest.setEncounterDiagnosisId(adviceSaveDto.getEncounterDiagnosisId()); + // 关联到药品请求 + deviceRequest.setBasedOnId(medicationRequest.getId()); + deviceRequest.setBasedOnTable(CommonConstants.TableName.MED_MEDICATION_REQUEST); + + iDeviceRequestService.save(deviceRequest); + + // 处理耗材发放 + Long dispenseId = iDeviceDispenseService.handleDeviceDispense(deviceRequest, DbOpType.INSERT.getCode()); + + // 查询耗材定价信息 + AdviceBaseDto deviceAdviceDto = new AdviceBaseDto(); + deviceAdviceDto.setAdviceDefinitionId(boundDevice.getDevActId()); + deviceAdviceDto.setAdviceTableName(CommonConstants.TableName.ADM_DEVICE_DEFINITION); + IPage devicePage = getAdviceBaseInfo(deviceAdviceDto, null, null, null, + adviceSaveDto.getFounderOrgId(), 1, 1, Whether.NO.getValue(), + List.of(ItemType.DEVICE.getValue()), null); + + if (devicePage == null || devicePage.getRecords().isEmpty()) { + log.warn("无法找到耗材定价信息: deviceDefId={}", boundDevice.getDevActId()); + continue; + } + + AdviceBaseDto deviceBaseInfo = devicePage.getRecords().get(0); + if (deviceBaseInfo.getPriceList() == null || deviceBaseInfo.getPriceList().isEmpty()) { + log.warn("耗材没有定价信息: deviceDefId={}", boundDevice.getDevActId()); + continue; + } + + AdvicePriceDto devicePrice = deviceBaseInfo.getPriceList().get(0); + + // 创建耗材费用项 + ChargeItem deviceChargeItem = new ChargeItem(); + deviceChargeItem.setTenantId(tenantId); + deviceChargeItem.setCreateBy(currentUsername); + deviceChargeItem.setCreateTime(curDate); + deviceChargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue()); + deviceChargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(deviceRequest.getBusNo())); + deviceChargeItem.setGenerateSourceEnum(GenerateSource.DOCTOR_PRESCRIPTION.getValue()); + deviceChargeItem.setPrescriptionNo(adviceSaveDto.getPrescriptionNo()); // 处方号,与药品一致 + deviceChargeItem.setPatientId(adviceSaveDto.getPatientId()); + deviceChargeItem.setContextEnum(ChargeItemContext.DEVICE.getValue()); // 耗材类型 + deviceChargeItem.setEncounterId(adviceSaveDto.getEncounterId()); + deviceChargeItem.setDefinitionId(devicePrice.getDefinitionId()); + deviceChargeItem.setDefDetailId(devicePrice.getDefinitionDetailId()); + deviceChargeItem.setEntererId(adviceSaveDto.getPractitionerId()); + deviceChargeItem.setRequestingOrgId(orgId); + deviceChargeItem.setEnteredDate(curDate); + deviceChargeItem.setServiceTable(CommonConstants.TableName.WOR_DEVICE_REQUEST); + deviceChargeItem.setServiceId(deviceRequest.getId()); + deviceChargeItem.setProductTable(CommonConstants.TableName.ADM_DEVICE_DEFINITION); + deviceChargeItem.setProductId(boundDevice.getDevActId()); + deviceChargeItem.setAccountId(adviceSaveDto.getAccountId()); + deviceChargeItem.setConditionId(adviceSaveDto.getConditionId()); + deviceChargeItem.setEncounterDiagnosisId(adviceSaveDto.getEncounterDiagnosisId()); + deviceChargeItem.setDispenseId(dispenseId); + deviceChargeItem.setQuantityValue(boundDevice.getQuantity()); + deviceChargeItem.setQuantityUnit(boundDevice.getUnitCode()); + deviceChargeItem.setUnitPrice(devicePrice.getPrice()); + deviceChargeItem.setTotalPrice(boundDevice.getQuantity().multiply(devicePrice.getPrice())); + + iChargeItemService.save(deviceChargeItem); + + log.info("用法绑定耗材已创建: methodCode={}, deviceDefId={}, chargeItemId={}", + adviceSaveDto.getMethodCode(), boundDevice.getDevActId(), deviceChargeItem.getId()); + } + } + /** * 处理耗材 */ diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/OrdersGroupPackageAppServiceImpl.java.backup b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/OrdersGroupPackageAppServiceImpl.java.backup new file mode 100644 index 00000000..49c54b9e --- /dev/null +++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/personalization/appservice/impl/OrdersGroupPackageAppServiceImpl.java.backup @@ -0,0 +1,321 @@ +package com.openhis.web.personalization.appservice.impl; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.core.common.core.domain.R; +import com.core.common.utils.MessageUtils; +import com.core.common.utils.SecurityUtils; +import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.enums.BindingType; +import com.openhis.common.enums.Whether; +import com.openhis.common.utils.EnumUtils; +import com.openhis.template.domain.OrdersGroupPackage; +import com.openhis.template.domain.OrdersGroupPackageDetail; +import com.openhis.template.service.IOrdersGroupPackageDetailService; +import com.openhis.template.service.IOrdersGroupPackageService; +import com.openhis.web.doctorstation.appservice.IDoctorStationAdviceAppService; +import com.openhis.web.doctorstation.dto.AdviceBaseDto; +import com.openhis.web.personalization.appservice.IOrdersGroupPackageAppService; +import com.openhis.web.personalization.dto.*; +import com.openhis.web.personalization.mapper.OrdersGroupPackageAppMapper; + +/** + * 组合套餐 实现类 + * + * @author yangmo + * @date 2025-04-10 + */ +@Service +public class OrdersGroupPackageAppServiceImpl implements IOrdersGroupPackageAppService { + + @Resource + OrdersGroupPackageAppMapper ordersGroupPackageAppMapper; + + @Resource + IOrdersGroupPackageService ordersGroupPackageService; + + @Resource + IOrdersGroupPackageDetailService ordersGroupPackageDetailService; + + @Resource + IDoctorStationAdviceAppService iDoctorStationAdviceAppService; + + /** + * 保存组合套餐 + * + * @param ordersGroupPackageSaveDto 保存组合套餐dto + * @param packageTypeEnum 类型枚举 + * @return 结果 + */ + @Override + public R saveGroupPackage(OrdersGroupPackageSaveDto ordersGroupPackageSaveDto, Integer packageTypeEnum) { + // 组合套餐id + Long groupPackageId = ordersGroupPackageSaveDto.getGroupPackageId(); + + if (BindingType.PERSONAL.getValue().equals(packageTypeEnum) + && ordersGroupPackageSaveDto.getPractitionerId() == null) { + // throw new ServiceException("个人组套需选择人员"); + ordersGroupPackageSaveDto.setPractitionerId(SecurityUtils.getLoginUser().getPractitionerId()); + } else if (BindingType.ORGANIZATION.getValue().equals(packageTypeEnum) + && ordersGroupPackageSaveDto.getOrganizationId() == null) { + // throw new ServiceException("科室组套需选择科室"); + ordersGroupPackageSaveDto.setOrganizationId(SecurityUtils.getLoginUser().getOrgId()); + } + // 保存主表 + OrdersGroupPackage ordersGroupPackage = new OrdersGroupPackage(); + ordersGroupPackage.setId(groupPackageId); + ordersGroupPackage.setName(ordersGroupPackageSaveDto.getName());// 名称 + ordersGroupPackage.setPackageTypeEnum(packageTypeEnum);// 组套包类型 + ordersGroupPackage.setOrganizationId(ordersGroupPackageSaveDto.getOrganizationId()); // 科室id + ordersGroupPackage.setPractitionerId(ordersGroupPackageSaveDto.getPractitionerId()); // 参与者id + ordersGroupPackage.setTcmFlag(ordersGroupPackageSaveDto.getTcmFlag()); // 中医标识 + ordersGroupPackageService.saveOrUpdate(ordersGroupPackage); + + // 编辑场景时,先删除原有的明细再新增 + if (groupPackageId != null) { + ordersGroupPackageDetailService.remove(new LambdaQueryWrapper() + .eq(OrdersGroupPackageDetail::getGroupPackageId, groupPackageId)); + } + // 保存明细表 + List detailList = ordersGroupPackageSaveDto.getDetailList(); + OrdersGroupPackageDetail ordersGroupPackageDetail; + for (OrdersGroupPackageDetailSaveDto ordersGroupPackageDetailSaveDto : detailList) { + ordersGroupPackageDetail = new OrdersGroupPackageDetail(); + ordersGroupPackageDetail.setGroupPackageId(ordersGroupPackage.getId()); // 组合套餐id + ordersGroupPackageDetail.setOrderDefinitionId(ordersGroupPackageDetailSaveDto.getOrderDefinitionId()); // 医嘱定义id + ordersGroupPackageDetail.setOrderDefinitionTable(ordersGroupPackageDetailSaveDto.getOrderDefinitionTable());// 医嘱定义表名 + ordersGroupPackageDetail.setQuantity(ordersGroupPackageDetailSaveDto.getQuantity()); // 数量 + ordersGroupPackageDetail.setUnitCode(ordersGroupPackageDetailSaveDto.getUnitCode()); // 单位 + ordersGroupPackageDetail.setDose(ordersGroupPackageDetailSaveDto.getDose()); // 单次剂量 + ordersGroupPackageDetail.setRateCode(ordersGroupPackageDetailSaveDto.getRateCode()); // 用药频次 + ordersGroupPackageDetail.setDispensePerDuration(ordersGroupPackageDetailSaveDto.getDispensePerDuration()); // 用药天数 + ordersGroupPackageDetail.setMethodCode(ordersGroupPackageDetailSaveDto.getMethodCode()); // 给药途径 + ordersGroupPackageDetail.setDoseQuantity(ordersGroupPackageDetailSaveDto.getDoseQuantity()); // 小单位单次剂量 + ordersGroupPackageDetail.setGroupId(ordersGroupPackageDetailSaveDto.getGroupId()); // 组号 + ordersGroupPackageDetail.setTherapyEnum(ordersGroupPackageDetailSaveDto.getTherapyEnum()); // 治疗类型 + ordersGroupPackageDetailService.save(ordersGroupPackageDetail); + } + + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"组合套餐"})); + } + + /** + * 查询组合套餐 + * + * @param packageTypeEnum 类型枚举 + * @param searchKey 模糊查询关键字 + * @param tcmFlag 中医标识 + * @return 组合套餐 + */ + @Override + public List getGroupPackage(Integer packageTypeEnum, String searchKey, + Integer tcmFlag) { + List groupPackage = + ordersGroupPackageAppMapper.getGroupPackage(packageTypeEnum, null, null, searchKey, tcmFlag); + for (OrdersGroupPackageQueryDto ordersGroupPackageQueryDto : groupPackage) { + ordersGroupPackageQueryDto.setPackageTypeEnum_enumText( + EnumUtils.getInfoByValue(BindingType.class, ordersGroupPackageQueryDto.getPackageTypeEnum())); + } + return groupPackage; + } + + /** + * 查询组合套餐明细 + * + * @param groupPackageId 组合套餐id + * @return 组合套餐明细 + */ + @Override + public List getGroupPackageDetail(Long groupPackageId) { + return ordersGroupPackageAppMapper.getGroupPackageDetail(List.of(groupPackageId)); + } + + /** + * 删除组合套餐 + * + * @param groupPackageId 组合套餐id + * @return 结果 + */ + @Override + public R delGroupPackage(Long groupPackageId) { + // 删除主表 + ordersGroupPackageService.removeById(groupPackageId); + // 删除明细 + ordersGroupPackageDetailService.remove(new LambdaQueryWrapper() + .eq(OrdersGroupPackageDetail::getGroupPackageId, groupPackageId)); + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00005, new Object[] {"组合套餐"})); + } + + /** + * 查询组合套餐,供开立医嘱使用 + * + * @param organizationId 患者挂号对应的科室id + * @param tcmFlag 中医标识 + * @return 组合套餐 + */ + @Override + public OrdersGroupPackageUseDto getGroupPackageForOrder(Long organizationId, Integer tcmFlag) { + OrdersGroupPackageUseDto ordersGroupPackageUseDto = new OrdersGroupPackageUseDto(); + // 当前参参与者id + Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId(); + // 当前登录账号的科室id + Long orgId = SecurityUtils.getLoginUser().getOrgId(); + + // 个人组套 + List personalGroupPackage = ordersGroupPackageAppMapper + .getGroupPackage(BindingType.PERSONAL.getValue(), null, practitionerId, null, tcmFlag); + if (!personalGroupPackage.isEmpty()) { + List personalList = personalGroupPackage.stream().map(queryDto -> { + OrdersGroupPackageDto dto = new OrdersGroupPackageDto(); + dto.setGroupPackageId(queryDto.getGroupPackageId()); + dto.setName(queryDto.getName()); + return dto; + }).collect(Collectors.toList()); + List groupPackageIds = + personalList.stream().map(OrdersGroupPackageDto::getGroupPackageId).collect(Collectors.toList()); + // 明细项 + List personalGroupPackageDetail = + ordersGroupPackageAppMapper.getGroupPackageDetail(groupPackageIds); + // 明细项赋值 + if (!personalGroupPackageDetail.isEmpty()) { + // 医嘱定义id集合 + List orderDefinitionIdParamList = personalGroupPackageDetail.stream() + .map(OrdersGroupPackageDetailQueryDto::getOrderDefinitionId).collect(Collectors.toList()); + // 医嘱下拉详细信息 + List personalRecords = + iDoctorStationAdviceAppService.getAdviceBaseInfo(null, null, null, orderDefinitionIdParamList, + organizationId, 1, 100, Whether.NO.getValue(), List.of(1, 2, 3), null).getRecords(); + // 创建AdviceBaseDto的映射,以adviceDefinitionId为key + Map adviceMap = personalRecords.stream().collect(Collectors + .toMap(AdviceBaseDto::getAdviceDefinitionId, advice -> advice, (existing, replacement) -> existing // 如果有重复key,保留第一个 + )); + // 遍历personalGroupPackageDetail,进行匹配赋值 + for (OrdersGroupPackageDetailQueryDto detail : personalGroupPackageDetail) { + Long orderDefinitionId = detail.getOrderDefinitionId(); + if (orderDefinitionId != null) { + AdviceBaseDto matchedAdvice = adviceMap.get(orderDefinitionId); + if (matchedAdvice != null) { + detail.setOrderDetailInfos(matchedAdvice); + } + } + } + // 将明细数据按groupPackageId分组 + Map> detailMap = personalGroupPackageDetail.stream() + .collect(Collectors.groupingBy(OrdersGroupPackageDetailQueryDto::getGroupPackageId)); + personalList.forEach(dto -> { + List details = detailMap.get(dto.getGroupPackageId()); + dto.setDetailList(details != null ? details : Collections.emptyList()); + }); + } + ordersGroupPackageUseDto.setPersonalList(personalList); + } + // 科室组套 + List organizationGroupPackage = ordersGroupPackageAppMapper + .getGroupPackage(BindingType.ORGANIZATION.getValue(), orgId, null, null, tcmFlag); + if (!organizationGroupPackage.isEmpty()) { + List organizationList = organizationGroupPackage.stream().map(queryDto -> { + OrdersGroupPackageDto dto = new OrdersGroupPackageDto(); + dto.setGroupPackageId(queryDto.getGroupPackageId()); + dto.setName(queryDto.getName()); + return dto; + }).collect(Collectors.toList()); + List groupPackageIds = + organizationList.stream().map(OrdersGroupPackageDto::getGroupPackageId).collect(Collectors.toList()); + // 明细项 + List organizationGroupPackageDetail = + ordersGroupPackageAppMapper.getGroupPackageDetail(groupPackageIds); + // 明细项赋值 + if (!organizationGroupPackageDetail.isEmpty()) { + // 医嘱定义id集合 + List orderDefinitionIdParamList = organizationGroupPackageDetail.stream() + .map(OrdersGroupPackageDetailQueryDto::getOrderDefinitionId).collect(Collectors.toList()); + // 医嘱下拉详细信息 + List personalRecords = + iDoctorStationAdviceAppService.getAdviceBaseInfo(null, null, null, orderDefinitionIdParamList, + organizationId, 1, 100, Whether.NO.getValue(), List.of(1, 2, 3), null).getRecords(); + // 创建AdviceBaseDto的映射,以adviceDefinitionId为key + Map adviceMap = personalRecords.stream().collect(Collectors + .toMap(AdviceBaseDto::getAdviceDefinitionId, advice -> advice, (existing, replacement) -> existing // 如果有重复key,保留第一个 + )); + // 遍历personalGroupPackageDetail,进行匹配赋值 + for (OrdersGroupPackageDetailQueryDto detail : organizationGroupPackageDetail) { + Long orderDefinitionId = detail.getOrderDefinitionId(); + if (orderDefinitionId != null) { + AdviceBaseDto matchedAdvice = adviceMap.get(orderDefinitionId); + if (matchedAdvice != null) { + detail.setOrderDetailInfos(matchedAdvice); + } + } + } + // 将明细数据按groupPackageId分组 + Map> detailMap = organizationGroupPackageDetail.stream() + .collect(Collectors.groupingBy(OrdersGroupPackageDetailQueryDto::getGroupPackageId)); + organizationList.forEach(dto -> { + List details = detailMap.get(dto.getGroupPackageId()); + dto.setDetailList(details != null ? details : Collections.emptyList()); + }); + } + ordersGroupPackageUseDto.setOrganizationList(organizationList); + } + + // 全院组套 + List hospitalGroupPackage = + ordersGroupPackageAppMapper.getGroupPackage(BindingType.HOSPITAL.getValue(), null, null, null, tcmFlag); + if (!hospitalGroupPackage.isEmpty()) { + List hospitalList = hospitalGroupPackage.stream().map(queryDto -> { + OrdersGroupPackageDto dto = new OrdersGroupPackageDto(); + dto.setGroupPackageId(queryDto.getGroupPackageId()); + dto.setName(queryDto.getName()); + return dto; + }).collect(Collectors.toList()); + List groupPackageIds = + hospitalList.stream().map(OrdersGroupPackageDto::getGroupPackageId).collect(Collectors.toList()); + // 明细项 + List hospitalGroupPackageDetail = + ordersGroupPackageAppMapper.getGroupPackageDetail(groupPackageIds); + // 明细项赋值 + if (!hospitalGroupPackageDetail.isEmpty()) { + // 医嘱定义id集合 + List orderDefinitionIdParamList = hospitalGroupPackageDetail.stream() + .map(OrdersGroupPackageDetailQueryDto::getOrderDefinitionId).collect(Collectors.toList()); + // 医嘱下拉详细信息 + List personalRecords = + iDoctorStationAdviceAppService.getAdviceBaseInfo(null, null, null, orderDefinitionIdParamList, + organizationId, 1, 100, Whether.NO.getValue(), List.of(1, 2, 3), null).getRecords(); + // 创建AdviceBaseDto的映射,以adviceDefinitionId为key + Map adviceMap = personalRecords.stream().collect(Collectors + .toMap(AdviceBaseDto::getAdviceDefinitionId, advice -> advice, (existing, replacement) -> existing // 如果有重复key,保留第一个 + )); + // 遍历personalGroupPackageDetail,进行匹配赋值 + for (OrdersGroupPackageDetailQueryDto detail : hospitalGroupPackageDetail) { + Long orderDefinitionId = detail.getOrderDefinitionId(); + if (orderDefinitionId != null) { + AdviceBaseDto matchedAdvice = adviceMap.get(orderDefinitionId); + if (matchedAdvice != null) { + detail.setOrderDetailInfos(matchedAdvice); + } + } + } + // 将明细数据按groupPackageId分组 + Map> detailMap = hospitalGroupPackageDetail.stream() + .collect(Collectors.groupingBy(OrdersGroupPackageDetailQueryDto::getGroupPackageId)); + hospitalList.forEach(dto -> { + List details = detailMap.get(dto.getGroupPackageId()); + dto.setDetailList(details != null ? details : Collections.emptyList()); + }); + } + ordersGroupPackageUseDto.setHospitalList(hospitalList); + } + + return ordersGroupPackageUseDto; + } + +} diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/chargemanage/OutpatientRegistrationAppMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/chargemanage/OutpatientRegistrationAppMapper.xml index 4e3d5d0a..0e4c32c5 100644 --- a/openhis-server-new/openhis-application/src/main/resources/mapper/chargemanage/OutpatientRegistrationAppMapper.xml +++ b/openhis-server-new/openhis-application/src/main/resources/mapper/chargemanage/OutpatientRegistrationAppMapper.xml @@ -190,4 +190,20 @@ AND dev_act_table = #{devActable} + + \ No newline at end of file