From 21d21784f9afc2431883c5bc72212d79d780a7b5 Mon Sep 17 00:00:00 2001 From: "Wang.Huan" Date: Wed, 19 Mar 2025 15:37:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E5=8C=BB=E5=98=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IDoctorStationAdviceAppService.java | 11 ++ .../DoctorStationAdviceAppServiceImpl.java | 168 +++++++++++++++++- .../DoctorStationAdviceController.java | 19 +- .../web/doctorstation/dto/AdvicePriceDto.java | 4 + .../web/doctorstation/dto/AdviceSaveDto.java | 34 +++- .../assembler/InventoryManageAssembler.java | 2 +- .../DoctorStationAdviceAppMapper.xml | 1 + .../common/enums/ChargeItemContext.java | 16 +- .../com/openhis/common/enums/ItemType.java | 4 +- .../administration/domain/ChargeItem.java | 2 +- .../medication/domain/MedicationRequest.java | 2 +- .../workflow/domain/DeviceRequest.java | 2 +- .../workflow/domain/ServiceRequest.java | 2 +- 13 files changed, 241 insertions(+), 26 deletions(-) diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationAdviceAppService.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationAdviceAppService.java index 6af98657..8243acb7 100644 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationAdviceAppService.java +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/IDoctorStationAdviceAppService.java @@ -1,7 +1,10 @@ package com.openhis.web.doctorstation.appservice; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.core.common.core.domain.R; import com.openhis.web.doctorstation.dto.AdviceBaseDto; +import com.openhis.web.doctorstation.dto.AdviceSaveDto; +import com.openhis.web.doctorstation.dto.AdviceSaveParam; /** * 医生站-医嘱/处方 应用Service @@ -21,4 +24,12 @@ public interface IDoctorStationAdviceAppService { IPage getAdviceBaseInfo(AdviceBaseDto adviceBaseDto, String searchKey, Long locationId, Integer pageNo, Integer pageSize); + /** + * 门诊保存医嘱 + * + * @param adviceSaveParam 医嘱表单信息 + * @return 结果 + */ + R saveAdvice(AdviceSaveParam adviceSaveParam); + } diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java index ffa188be..b2b36c76 100644 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java @@ -1,5 +1,7 @@ package com.openhis.web.doctorstation.appservice.impl; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -13,16 +15,25 @@ import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.core.common.core.domain.R; +import com.core.common.utils.AssignSeqUtil; +import com.core.common.utils.MessageUtils; +import com.openhis.administration.domain.ChargeItem; +import com.openhis.administration.service.IChargeItemService; import com.openhis.common.constant.CommonConstants; -import com.openhis.common.enums.ActivityType; -import com.openhis.common.enums.ConditionCode; +import com.openhis.common.constant.PromptMsgConstant; +import com.openhis.common.enums.*; import com.openhis.common.utils.EnumUtils; import com.openhis.common.utils.HisQueryUtils; +import com.openhis.medication.domain.MedicationRequest; +import com.openhis.medication.service.IMedicationRequestService; import com.openhis.web.doctorstation.appservice.IDoctorStationAdviceAppService; -import com.openhis.web.doctorstation.dto.AdviceBaseDto; -import com.openhis.web.doctorstation.dto.AdviceInventoryDto; -import com.openhis.web.doctorstation.dto.AdvicePriceDto; +import com.openhis.web.doctorstation.dto.*; import com.openhis.web.doctorstation.mapper.DoctorStationAdviceAppMapper; +import com.openhis.workflow.domain.DeviceRequest; +import com.openhis.workflow.domain.ServiceRequest; +import com.openhis.workflow.service.IDeviceRequestService; +import com.openhis.workflow.service.IServiceRequestService; /** * 医生站-医嘱/处方 应用实现类 @@ -30,9 +41,24 @@ import com.openhis.web.doctorstation.mapper.DoctorStationAdviceAppMapper; @Service public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAppService { + @Resource + AssignSeqUtil assignSeqUtil; + @Resource DoctorStationAdviceAppMapper doctorStationAdviceAppMapper; + @Resource + IMedicationRequestService iMedicationRequestService; + + @Resource + IDeviceRequestService iDeviceRequestService; + + @Resource + IServiceRequestService iServiceRequestService; + + @Resource + IChargeItemService iChargeItemService; + /** * 查询医嘱信息 * @@ -63,6 +89,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp // 医嘱库存集合 List adviceInventory = doctorStationAdviceAppMapper.getAdviceInventory(locationId, adviceDefinitionIdList, CommonConstants.SqlCondition.ABOUT_INVENTORY_TABLE_STR); + // TODO: 预减库存待处理 + // 费用定价子表信息 List childCharge = doctorStationAdviceAppMapper .getChildCharge(ConditionCode.UNIT_PRODUCT_BATCH_NUM.getInfo(), chargeItemDefinitionIdList); @@ -132,4 +160,134 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp return adviceBaseInfo; } + /** + * 门诊保存医嘱 + * + * @param adviceSaveParam 医嘱表单信息 + * @return 结果 + */ + @Override + public R saveAdvice(AdviceSaveParam adviceSaveParam) { + // 医嘱分类信息 + List adviceSaveList = adviceSaveParam.getAdviceSaveList(); + // TODO: 保存医嘱时规则校验;待做 + // 药品 + List medicineList = adviceSaveList.stream() + .filter(e -> ItemType.MEDICINE.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); + // 耗材 + List deviceList = adviceSaveList.stream() + .filter(e -> ItemType.DEVICE.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); + // 诊疗活动 + List activityList = adviceSaveList.stream() + .filter(e -> ItemType.ACTIVITY.getValue().equals(e.getAdviceType())).collect(Collectors.toList()); + // 生成处方号 , 只有开了药品才有处方号 + String prescriptionNo = ""; + if (medicineList.size() > 0) { + prescriptionNo = assignSeqUtil.getSeq(AssignSeqEnum.PRESCRIPTION_NO.getPrefix(), 8); + } + // 保存药品请求 + List medicationRequestList = new ArrayList<>(); + MedicationRequest medicationRequest; + for (AdviceSaveDto adviceSaveDto : medicineList) { + medicationRequest = new MedicationRequest(); + medicationRequest.setBusNo(assignSeqUtil.getSeq(AssignSeqEnum.MEDICATION_RES_NO.getPrefix(), 8)); + medicationRequest.setPrescriptionNo(prescriptionNo); + medicationRequest.setQuantity(adviceSaveDto.getQuantity()); + medicationRequest.setExecuteNum(adviceSaveDto.getExecuteNum()); + medicationRequest.setUnitCode(adviceSaveDto.getUnitCode()); + medicationRequest.setLotNumber(adviceSaveDto.getLotNumber()); + medicationRequest.setStatusEnum(adviceSaveDto.getStatusEnum()); + medicationRequest.setCategoryEnum(adviceSaveDto.getCategoryEnum()); + medicationRequest.setMedicationId(adviceSaveDto.getAdviceDefinitionId());// 医嘱定义id + medicationRequest.setPatientId(adviceSaveDto.getPatientId()); + medicationRequest.setPractitionerId(adviceSaveDto.getPractitionerId()); + medicationRequest.setOrgId(adviceSaveDto.getOrgId()); + medicationRequest.setLocationId(adviceSaveDto.getLocationId()); + medicationRequest.setEncounterId(adviceSaveDto.getEncounterId()); + medicationRequest.setTherapyEnum(adviceSaveDto.getTherapyEnum()); + medicationRequest.setMethodCode(adviceSaveDto.getMethodCode()); + medicationRequest.setRateCode(adviceSaveDto.getRateCode()); + medicationRequest.setDose(adviceSaveDto.getDose()); + medicationRequest.setDoseUnitCode(adviceSaveDto.getDoseUnitCode()); + // medicationRequest.setPackageId(adviceSaveDto.getPackageId()); + + medicationRequestList.add(medicationRequest); + } + iMedicationRequestService.saveBatch(medicationRequestList); + + // 保存耗材请求 + List deviceRequestList = new ArrayList<>(); + DeviceRequest deviceRequest; + for (AdviceSaveDto adviceSaveDto : deviceList) { + deviceRequest = new DeviceRequest(); + deviceRequest.setBusNo(assignSeqUtil.getSeq(AssignSeqEnum.DEVICE_RES_NO.getPrefix(), 8)); + deviceRequest.setPrescriptionNo(prescriptionNo); + deviceRequest.setQuantity(adviceSaveDto.getQuantity()); + deviceRequest.setUnitCode(adviceSaveDto.getUnitCode()); + deviceRequest.setLotNumber(adviceSaveDto.getLotNumber()); + deviceRequest.setStatusEnum(adviceSaveDto.getStatusEnum()); + deviceRequest.setCategoryEnum(adviceSaveDto.getCategoryEnum()); + deviceRequest.setDeviceDefId(adviceSaveDto.getAdviceDefinitionId());// 耗材定义id + deviceRequest.setPatientId(adviceSaveDto.getPatientId()); + deviceRequest.setRequesterId(adviceSaveDto.getPractitionerId()); + deviceRequest.setOrgId(adviceSaveDto.getOrgId()); + deviceRequest.setLocationId(adviceSaveDto.getLocationId()); + deviceRequest.setEncounterId(adviceSaveDto.getEncounterId()); + // deviceRequest.setPackageId(adviceSaveDto.getPackageId()); + // deviceRequest.setActivityId(adviceSaveDto.getActivityId()); + + deviceRequestList.add(deviceRequest); + } + iDeviceRequestService.saveBatch(deviceRequestList); + + // 保存诊疗项目请求 + List serviceRequestList = new ArrayList<>(); + ServiceRequest serviceRequest; + for (AdviceSaveDto adviceSaveDto : activityList) { + serviceRequest = new ServiceRequest(); + serviceRequest.setBusNo(assignSeqUtil.getSeq(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 8)); + serviceRequest.setPrescriptionNo(prescriptionNo); + serviceRequest.setBasedOnTable(CommonConstants.TableName.WOR_ACTIVITY_DEFINITION); + serviceRequest.setBasedOnId(adviceSaveDto.getAdviceDefinitionId()); + serviceRequest.setQuantity(adviceSaveDto.getQuantity()); + serviceRequest.setUnitCode(adviceSaveDto.getUnitCode()); + serviceRequest.setStatusEnum(adviceSaveDto.getStatusEnum()); + serviceRequest.setCategoryEnum(adviceSaveDto.getCategoryEnum()); + serviceRequest.setCategoryEnum(adviceSaveDto.getCategoryEnum()); + serviceRequest.setActivityId(adviceSaveDto.getAdviceDefinitionId());// 诊疗定义id + serviceRequest.setPatientId(adviceSaveDto.getPatientId()); + serviceRequest.setRequesterId(adviceSaveDto.getPractitionerId()); + serviceRequest.setEncounterId(adviceSaveDto.getEncounterId()); + + serviceRequestList.add(serviceRequest); + } + iServiceRequestService.saveBatch(serviceRequestList); + + // 保存费用项管理 + List chargeItemList = new ArrayList<>(); + ChargeItem chargeItem; + for (AdviceSaveDto adviceSaveDto : adviceSaveList) { + chargeItem = new ChargeItem(); + chargeItem.setStatusEnum(ChargeItemStatus.PLANNED.getValue()); + chargeItem.setBusNo(assignSeqUtil.getSeq(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix(), 8)); + chargeItem.setPrescriptionNo(prescriptionNo); + chargeItem.setPatientId(adviceSaveDto.getPatientId()); + chargeItem.setContextEnum(adviceSaveDto.getAdviceType()); + chargeItem.setEncounterId(adviceSaveDto.getEncounterId()); + chargeItem.setQuantityValue(adviceSaveDto.getQuantity()); // 数量 + chargeItem.setQuantityUnit(adviceSaveDto.getUnitCode()); // 单位 + chargeItem.setUnitPrice(adviceSaveDto.getUnitPrice()); // 单价 + chargeItem + .setTotalPrice((new BigDecimal(adviceSaveDto.getQuantity()).multiply(adviceSaveDto.getUnitPrice())) + .setScale(4, RoundingMode.HALF_UP)); // 总价 + chargeItem.setDefinitionId(adviceSaveDto.getDefinitionId()); + chargeItem.setDefDetailId(adviceSaveDto.getDefinitionDetailId()); + + chargeItemList.add(chargeItem); + } + iChargeItemService.saveBatch(chargeItemList); + + return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"门诊医嘱"})); + } + } diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationAdviceController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationAdviceController.java index 4817d37a..78d61f83 100644 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationAdviceController.java +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/controller/DoctorStationAdviceController.java @@ -3,14 +3,12 @@ */ package com.openhis.web.doctorstation.controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import com.core.common.core.domain.R; import com.openhis.web.doctorstation.appservice.IDoctorStationAdviceAppService; import com.openhis.web.doctorstation.dto.AdviceBaseDto; +import com.openhis.web.doctorstation.dto.AdviceSaveParam; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -39,11 +37,22 @@ public class DoctorStationAdviceController { @GetMapping(value = "/advice-base-info") public R getAdviceBaseInfo(AdviceBaseDto adviceBaseDto, @RequestParam(value = "searchKey", defaultValue = "") String searchKey, - @RequestParam(value = "locationId",required = false) Long locationId, + @RequestParam(value = "locationId", required = false) Long locationId, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) { return R.ok( iDoctorStationAdviceAppService.getAdviceBaseInfo(adviceBaseDto, searchKey, locationId, pageNo, pageSize)); } + /** + * 门诊保存医嘱 + * + * @param adviceSaveParam 医嘱表单信息 + * @return 结果 + */ + @PostMapping(value = "/save-advice") + public R saveAdvice(@RequestBody AdviceSaveParam adviceSaveParam) { + return iDoctorStationAdviceAppService.saveAdvice(adviceSaveParam); + } + } diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdvicePriceDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdvicePriceDto.java index 1e237789..02c3f0fb 100644 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdvicePriceDto.java +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdvicePriceDto.java @@ -25,6 +25,10 @@ public class AdvicePriceDto { @JsonSerialize(using = ToStringSerializer.class) private Long definitionId; + /** 费用定价子表ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long definitionDetailId; + /** 命中条件 */ private String conditionCode; diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceSaveDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceSaveDto.java index e102b8ec..8258b038 100644 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceSaveDto.java +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceSaveDto.java @@ -1,9 +1,12 @@ package com.openhis.web.doctorstation.dto; +import java.math.BigDecimal; + import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.openhis.common.enums.EncounterClass; import com.openhis.common.enums.RequestStatus; +import com.openhis.common.enums.TherapyTimeType; import lombok.Data; import lombok.experimental.Accessors; @@ -16,7 +19,7 @@ import lombok.experimental.Accessors; public class AdviceSaveDto { /** 医嘱类型 */ - private String adviceType; // 1:药品 , 2: 耗材 , 3:项目 + private Integer adviceType; // 1:药品 , 2: 耗材 , 3:项目 /** 执行次数 */ private Integer executeNum; // 当医嘱类型为药品时,选填 @@ -30,6 +33,17 @@ public class AdviceSaveDto { /** 请求单位编码 */ private String unitCode; + /** 单价 */ + private BigDecimal unitPrice; + + /** 费用定价主表ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long definitionId; + + /** 费用定价子表ID */ + @JsonSerialize(using = ToStringSerializer.class) + private Long definitionDetailId; + /** 产品批号 */ private String lotNumber; @@ -65,6 +79,21 @@ public class AdviceSaveDto { @JsonSerialize(using = ToStringSerializer.class) private Long encounterId; + /** 治疗类型 */ + private Integer therapyEnum; + + /** 用法 */ + private String methodCode; + + /** 用药频次 */ + private String rateCode; + + /** 单次剂量 */ + private BigDecimal dose; + + /** 剂量单位 */ + private String doseUnitCode; + /** 组套id */ @JsonSerialize(using = ToStringSerializer.class) private Long packageId; // 该参数先预留出来 @@ -79,6 +108,9 @@ public class AdviceSaveDto { public AdviceSaveDto() { this.statusEnum = RequestStatus.DRAFT.getValue(); this.categoryEnum = EncounterClass.AMB.getValue(); + this.therapyEnum = TherapyTimeType.TEMPORARY.getValue(); + // TODO: 应该从当前登录账号获取参与者id,现在没有 + // this.practitionerId } } diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/assembler/InventoryManageAssembler.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/assembler/InventoryManageAssembler.java index 39773586..2ee16b50 100644 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/assembler/InventoryManageAssembler.java +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/inventorymanage/assembler/InventoryManageAssembler.java @@ -48,7 +48,7 @@ public class InventoryManageAssembler { // 收费项id:供应物品id .setProductId(supplyItemDetailDto.getItemId()) // 物品数量 - .setQuantityValue(supplyItemDetailDto.getItemQuantity().longValue()) + .setQuantityValue(supplyItemDetailDto.getItemQuantity().intValue()) // 物品单位 .setQuantityUnit(supplyItemDetailDto.getItemUnit()) // 原价 diff --git a/openhis-server/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml index 7c378de7..4b523c32 100644 --- a/openhis-server/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml +++ b/openhis-server/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationAdviceAppMapper.xml @@ -162,6 +162,7 @@