feat(doctorstation): 实现用法绑定耗材功能 bug#145
- 新增getBoundDevicesByUsage方法用于根据用法代码查询绑定的耗材 - 在医生站医嘱服务中添加用法绑定耗材处理逻辑 - 实现handleBoundDevices方法自动创建耗材请求和费用项 - 更新MyBatis映射XML文件添加新的查询语句 - 添加组合套餐服务实现类支持套餐功能
This commit is contained in:
@@ -58,4 +58,15 @@ public interface OutpatientRegistrationAppMapper {
|
|||||||
*/
|
*/
|
||||||
List<ActivityDeviceDto> getTmpActivityList(@Param("itemId") String itemId, @Param("devActable") String devActable);
|
List<ActivityDeviceDto> getTmpActivityList(@Param("itemId") String itemId, @Param("devActable") String devActable);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据用法代码查询绑定的耗材
|
||||||
|
*
|
||||||
|
* @param methodCode 用法代码
|
||||||
|
* @param devActTable 绑定的表名(耗材)
|
||||||
|
* @param typeCode 类型代码(1-用法绑定)
|
||||||
|
* @return 绑定的耗材列表
|
||||||
|
*/
|
||||||
|
List<ActivityDeviceDto> getBoundDevicesByUsage(@Param("methodCode") String methodCode,
|
||||||
|
@Param("devActTable") String devActTable, @Param("typeCode") String typeCode);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,12 +27,14 @@ import com.openhis.common.utils.HisQueryUtils;
|
|||||||
import com.openhis.medication.domain.MedicationRequest;
|
import com.openhis.medication.domain.MedicationRequest;
|
||||||
import com.openhis.medication.service.IMedicationDispenseService;
|
import com.openhis.medication.service.IMedicationDispenseService;
|
||||||
import com.openhis.medication.service.IMedicationRequestService;
|
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.appservice.IDoctorStationAdviceAppService;
|
||||||
import com.openhis.web.doctorstation.dto.*;
|
import com.openhis.web.doctorstation.dto.*;
|
||||||
import com.openhis.web.doctorstation.mapper.DoctorStationAdviceAppMapper;
|
import com.openhis.web.doctorstation.mapper.DoctorStationAdviceAppMapper;
|
||||||
import com.openhis.web.doctorstation.utils.AdviceUtils;
|
import com.openhis.web.doctorstation.utils.AdviceUtils;
|
||||||
import com.openhis.web.doctorstation.utils.DoctorStationSendApplyUtil;
|
import com.openhis.web.doctorstation.utils.DoctorStationSendApplyUtil;
|
||||||
import com.openhis.web.doctorstation.utils.PrescriptionUtils;
|
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.ActivityDefinition;
|
||||||
import com.openhis.workflow.domain.DeviceRequest;
|
import com.openhis.workflow.domain.DeviceRequest;
|
||||||
import com.openhis.workflow.domain.ServiceRequest;
|
import com.openhis.workflow.domain.ServiceRequest;
|
||||||
@@ -95,8 +97,9 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
|
|||||||
@Resource
|
@Resource
|
||||||
IActivityDefinitionService iActivityDefinitionService;
|
IActivityDefinitionService iActivityDefinitionService;
|
||||||
|
|
||||||
// @Resource
|
@Resource
|
||||||
// OutpatientRegistrationAppMapper outpatientRegistrationAppMapper;
|
OutpatientRegistrationAppMapper outpatientRegistrationAppMapper;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
DoctorStationSendApplyUtil doctorStationSendApplyUtil;
|
DoctorStationSendApplyUtil doctorStationSendApplyUtil;
|
||||||
|
|
||||||
@@ -714,11 +717,127 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
|
|||||||
|
|
||||||
iChargeItemService.saveOrUpdate(chargeItem);
|
iChargeItemService.saveOrUpdate(chargeItem);
|
||||||
|
|
||||||
|
// 🔧 Bug Fix #145: 处理用法绑定的耗材
|
||||||
|
if (StringUtils.isNotBlank(adviceSaveDto.getMethodCode())) {
|
||||||
|
handleBoundDevices(adviceSaveDto, medicationRequest, chargeItem, curDate, orgId, tenantId,
|
||||||
|
currentUsername);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return medRequestIdList;
|
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<ActivityDeviceDto> 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<AdviceBaseDto> 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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理耗材
|
* 处理耗材
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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<OrdersGroupPackageDetail>()
|
||||||
|
.eq(OrdersGroupPackageDetail::getGroupPackageId, groupPackageId));
|
||||||
|
}
|
||||||
|
// 保存明细表
|
||||||
|
List<OrdersGroupPackageDetailSaveDto> 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<OrdersGroupPackageQueryDto> getGroupPackage(Integer packageTypeEnum, String searchKey,
|
||||||
|
Integer tcmFlag) {
|
||||||
|
List<OrdersGroupPackageQueryDto> 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<OrdersGroupPackageDetailQueryDto> 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<OrdersGroupPackageDetail>()
|
||||||
|
.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<OrdersGroupPackageQueryDto> personalGroupPackage = ordersGroupPackageAppMapper
|
||||||
|
.getGroupPackage(BindingType.PERSONAL.getValue(), null, practitionerId, null, tcmFlag);
|
||||||
|
if (!personalGroupPackage.isEmpty()) {
|
||||||
|
List<OrdersGroupPackageDto> personalList = personalGroupPackage.stream().map(queryDto -> {
|
||||||
|
OrdersGroupPackageDto dto = new OrdersGroupPackageDto();
|
||||||
|
dto.setGroupPackageId(queryDto.getGroupPackageId());
|
||||||
|
dto.setName(queryDto.getName());
|
||||||
|
return dto;
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
List<Long> groupPackageIds =
|
||||||
|
personalList.stream().map(OrdersGroupPackageDto::getGroupPackageId).collect(Collectors.toList());
|
||||||
|
// 明细项
|
||||||
|
List<OrdersGroupPackageDetailQueryDto> personalGroupPackageDetail =
|
||||||
|
ordersGroupPackageAppMapper.getGroupPackageDetail(groupPackageIds);
|
||||||
|
// 明细项赋值
|
||||||
|
if (!personalGroupPackageDetail.isEmpty()) {
|
||||||
|
// 医嘱定义id集合
|
||||||
|
List<Long> orderDefinitionIdParamList = personalGroupPackageDetail.stream()
|
||||||
|
.map(OrdersGroupPackageDetailQueryDto::getOrderDefinitionId).collect(Collectors.toList());
|
||||||
|
// 医嘱下拉详细信息
|
||||||
|
List<AdviceBaseDto> personalRecords =
|
||||||
|
iDoctorStationAdviceAppService.getAdviceBaseInfo(null, null, null, orderDefinitionIdParamList,
|
||||||
|
organizationId, 1, 100, Whether.NO.getValue(), List.of(1, 2, 3), null).getRecords();
|
||||||
|
// 创建AdviceBaseDto的映射,以adviceDefinitionId为key
|
||||||
|
Map<Long, AdviceBaseDto> 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<Long, List<OrdersGroupPackageDetailQueryDto>> detailMap = personalGroupPackageDetail.stream()
|
||||||
|
.collect(Collectors.groupingBy(OrdersGroupPackageDetailQueryDto::getGroupPackageId));
|
||||||
|
personalList.forEach(dto -> {
|
||||||
|
List<OrdersGroupPackageDetailQueryDto> details = detailMap.get(dto.getGroupPackageId());
|
||||||
|
dto.setDetailList(details != null ? details : Collections.emptyList());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
ordersGroupPackageUseDto.setPersonalList(personalList);
|
||||||
|
}
|
||||||
|
// 科室组套
|
||||||
|
List<OrdersGroupPackageQueryDto> organizationGroupPackage = ordersGroupPackageAppMapper
|
||||||
|
.getGroupPackage(BindingType.ORGANIZATION.getValue(), orgId, null, null, tcmFlag);
|
||||||
|
if (!organizationGroupPackage.isEmpty()) {
|
||||||
|
List<OrdersGroupPackageDto> organizationList = organizationGroupPackage.stream().map(queryDto -> {
|
||||||
|
OrdersGroupPackageDto dto = new OrdersGroupPackageDto();
|
||||||
|
dto.setGroupPackageId(queryDto.getGroupPackageId());
|
||||||
|
dto.setName(queryDto.getName());
|
||||||
|
return dto;
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
List<Long> groupPackageIds =
|
||||||
|
organizationList.stream().map(OrdersGroupPackageDto::getGroupPackageId).collect(Collectors.toList());
|
||||||
|
// 明细项
|
||||||
|
List<OrdersGroupPackageDetailQueryDto> organizationGroupPackageDetail =
|
||||||
|
ordersGroupPackageAppMapper.getGroupPackageDetail(groupPackageIds);
|
||||||
|
// 明细项赋值
|
||||||
|
if (!organizationGroupPackageDetail.isEmpty()) {
|
||||||
|
// 医嘱定义id集合
|
||||||
|
List<Long> orderDefinitionIdParamList = organizationGroupPackageDetail.stream()
|
||||||
|
.map(OrdersGroupPackageDetailQueryDto::getOrderDefinitionId).collect(Collectors.toList());
|
||||||
|
// 医嘱下拉详细信息
|
||||||
|
List<AdviceBaseDto> personalRecords =
|
||||||
|
iDoctorStationAdviceAppService.getAdviceBaseInfo(null, null, null, orderDefinitionIdParamList,
|
||||||
|
organizationId, 1, 100, Whether.NO.getValue(), List.of(1, 2, 3), null).getRecords();
|
||||||
|
// 创建AdviceBaseDto的映射,以adviceDefinitionId为key
|
||||||
|
Map<Long, AdviceBaseDto> 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<Long, List<OrdersGroupPackageDetailQueryDto>> detailMap = organizationGroupPackageDetail.stream()
|
||||||
|
.collect(Collectors.groupingBy(OrdersGroupPackageDetailQueryDto::getGroupPackageId));
|
||||||
|
organizationList.forEach(dto -> {
|
||||||
|
List<OrdersGroupPackageDetailQueryDto> details = detailMap.get(dto.getGroupPackageId());
|
||||||
|
dto.setDetailList(details != null ? details : Collections.emptyList());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
ordersGroupPackageUseDto.setOrganizationList(organizationList);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 全院组套
|
||||||
|
List<OrdersGroupPackageQueryDto> hospitalGroupPackage =
|
||||||
|
ordersGroupPackageAppMapper.getGroupPackage(BindingType.HOSPITAL.getValue(), null, null, null, tcmFlag);
|
||||||
|
if (!hospitalGroupPackage.isEmpty()) {
|
||||||
|
List<OrdersGroupPackageDto> hospitalList = hospitalGroupPackage.stream().map(queryDto -> {
|
||||||
|
OrdersGroupPackageDto dto = new OrdersGroupPackageDto();
|
||||||
|
dto.setGroupPackageId(queryDto.getGroupPackageId());
|
||||||
|
dto.setName(queryDto.getName());
|
||||||
|
return dto;
|
||||||
|
}).collect(Collectors.toList());
|
||||||
|
List<Long> groupPackageIds =
|
||||||
|
hospitalList.stream().map(OrdersGroupPackageDto::getGroupPackageId).collect(Collectors.toList());
|
||||||
|
// 明细项
|
||||||
|
List<OrdersGroupPackageDetailQueryDto> hospitalGroupPackageDetail =
|
||||||
|
ordersGroupPackageAppMapper.getGroupPackageDetail(groupPackageIds);
|
||||||
|
// 明细项赋值
|
||||||
|
if (!hospitalGroupPackageDetail.isEmpty()) {
|
||||||
|
// 医嘱定义id集合
|
||||||
|
List<Long> orderDefinitionIdParamList = hospitalGroupPackageDetail.stream()
|
||||||
|
.map(OrdersGroupPackageDetailQueryDto::getOrderDefinitionId).collect(Collectors.toList());
|
||||||
|
// 医嘱下拉详细信息
|
||||||
|
List<AdviceBaseDto> personalRecords =
|
||||||
|
iDoctorStationAdviceAppService.getAdviceBaseInfo(null, null, null, orderDefinitionIdParamList,
|
||||||
|
organizationId, 1, 100, Whether.NO.getValue(), List.of(1, 2, 3), null).getRecords();
|
||||||
|
// 创建AdviceBaseDto的映射,以adviceDefinitionId为key
|
||||||
|
Map<Long, AdviceBaseDto> 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<Long, List<OrdersGroupPackageDetailQueryDto>> detailMap = hospitalGroupPackageDetail.stream()
|
||||||
|
.collect(Collectors.groupingBy(OrdersGroupPackageDetailQueryDto::getGroupPackageId));
|
||||||
|
hospitalList.forEach(dto -> {
|
||||||
|
List<OrdersGroupPackageDetailQueryDto> details = detailMap.get(dto.getGroupPackageId());
|
||||||
|
dto.setDetailList(details != null ? details : Collections.emptyList());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
ordersGroupPackageUseDto.setHospitalList(hospitalList);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ordersGroupPackageUseDto;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -190,4 +190,20 @@
|
|||||||
AND dev_act_table = #{devActable}
|
AND dev_act_table = #{devActable}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="getBoundDevicesByUsage" resultType="com.openhis.web.personalization.dto.ActivityDeviceDto">
|
||||||
|
SELECT tad.dev_act_id,
|
||||||
|
tad.quantity,
|
||||||
|
tad.unit_code,
|
||||||
|
addf.device_name,
|
||||||
|
addf.py_str AS device_py_str,
|
||||||
|
addf.wb_str AS device_wb_str
|
||||||
|
FROM tmp_activity_device tad
|
||||||
|
LEFT JOIN adm_device_definition addf ON tad.dev_act_id = addf.id AND addf.delete_flag = '0'
|
||||||
|
WHERE tad.delete_flag = '0'
|
||||||
|
AND tad.item_no = #{methodCode}
|
||||||
|
AND tad.dev_act_table = #{devActTable}
|
||||||
|
AND tad.type_code = #{typeCode}
|
||||||
|
AND tad.status_enum = 1
|
||||||
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
Reference in New Issue
Block a user