保存医嘱

This commit is contained in:
Wang.Huan
2025-03-19 15:37:20 +08:00
parent b1e560be64
commit 21d21784f9
13 changed files with 241 additions and 26 deletions

View File

@@ -1,7 +1,10 @@
package com.openhis.web.doctorstation.appservice; package com.openhis.web.doctorstation.appservice;
import com.baomidou.mybatisplus.core.metadata.IPage; 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.AdviceBaseDto;
import com.openhis.web.doctorstation.dto.AdviceSaveDto;
import com.openhis.web.doctorstation.dto.AdviceSaveParam;
/** /**
* 医生站-医嘱/处方 应用Service * 医生站-医嘱/处方 应用Service
@@ -21,4 +24,12 @@ public interface IDoctorStationAdviceAppService {
IPage<AdviceBaseDto> getAdviceBaseInfo(AdviceBaseDto adviceBaseDto, String searchKey, Long locationId, IPage<AdviceBaseDto> getAdviceBaseInfo(AdviceBaseDto adviceBaseDto, String searchKey, Long locationId,
Integer pageNo, Integer pageSize); Integer pageNo, Integer pageSize);
/**
* 门诊保存医嘱
*
* @param adviceSaveParam 医嘱表单信息
* @return 结果
*/
R<?> saveAdvice(AdviceSaveParam adviceSaveParam);
} }

View File

@@ -1,5 +1,7 @@
package com.openhis.web.doctorstation.appservice.impl; package com.openhis.web.doctorstation.appservice.impl;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashSet; 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.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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.constant.CommonConstants;
import com.openhis.common.enums.ActivityType; import com.openhis.common.constant.PromptMsgConstant;
import com.openhis.common.enums.ConditionCode; import com.openhis.common.enums.*;
import com.openhis.common.utils.EnumUtils; import com.openhis.common.utils.EnumUtils;
import com.openhis.common.utils.HisQueryUtils; 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.appservice.IDoctorStationAdviceAppService;
import com.openhis.web.doctorstation.dto.AdviceBaseDto; import com.openhis.web.doctorstation.dto.*;
import com.openhis.web.doctorstation.dto.AdviceInventoryDto;
import com.openhis.web.doctorstation.dto.AdvicePriceDto;
import com.openhis.web.doctorstation.mapper.DoctorStationAdviceAppMapper; 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 @Service
public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAppService { public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAppService {
@Resource
AssignSeqUtil assignSeqUtil;
@Resource @Resource
DoctorStationAdviceAppMapper doctorStationAdviceAppMapper; DoctorStationAdviceAppMapper doctorStationAdviceAppMapper;
@Resource
IMedicationRequestService iMedicationRequestService;
@Resource
IDeviceRequestService iDeviceRequestService;
@Resource
IServiceRequestService iServiceRequestService;
@Resource
IChargeItemService iChargeItemService;
/** /**
* 查询医嘱信息 * 查询医嘱信息
* *
@@ -63,6 +89,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
// 医嘱库存集合 // 医嘱库存集合
List<AdviceInventoryDto> adviceInventory = doctorStationAdviceAppMapper.getAdviceInventory(locationId, List<AdviceInventoryDto> adviceInventory = doctorStationAdviceAppMapper.getAdviceInventory(locationId,
adviceDefinitionIdList, CommonConstants.SqlCondition.ABOUT_INVENTORY_TABLE_STR); adviceDefinitionIdList, CommonConstants.SqlCondition.ABOUT_INVENTORY_TABLE_STR);
// TODO: 预减库存待处理
// 费用定价子表信息 // 费用定价子表信息
List<AdvicePriceDto> childCharge = doctorStationAdviceAppMapper List<AdvicePriceDto> childCharge = doctorStationAdviceAppMapper
.getChildCharge(ConditionCode.UNIT_PRODUCT_BATCH_NUM.getInfo(), chargeItemDefinitionIdList); .getChildCharge(ConditionCode.UNIT_PRODUCT_BATCH_NUM.getInfo(), chargeItemDefinitionIdList);
@@ -132,4 +160,134 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
return adviceBaseInfo; return adviceBaseInfo;
} }
/**
* 门诊保存医嘱
*
* @param adviceSaveParam 医嘱表单信息
* @return 结果
*/
@Override
public R<?> saveAdvice(AdviceSaveParam adviceSaveParam) {
// 医嘱分类信息
List<AdviceSaveDto> adviceSaveList = adviceSaveParam.getAdviceSaveList();
// TODO: 保存医嘱时规则校验;待做
// 药品
List<AdviceSaveDto> medicineList = adviceSaveList.stream()
.filter(e -> ItemType.MEDICINE.getValue().equals(e.getAdviceType())).collect(Collectors.toList());
// 耗材
List<AdviceSaveDto> deviceList = adviceSaveList.stream()
.filter(e -> ItemType.DEVICE.getValue().equals(e.getAdviceType())).collect(Collectors.toList());
// 诊疗活动
List<AdviceSaveDto> 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<MedicationRequest> 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<DeviceRequest> 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<ServiceRequest> 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<ChargeItem> 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[] {"门诊医嘱"}));
}
} }

View File

@@ -3,14 +3,12 @@
*/ */
package com.openhis.web.doctorstation.controller; package com.openhis.web.doctorstation.controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.core.common.core.domain.R; import com.core.common.core.domain.R;
import com.openhis.web.doctorstation.appservice.IDoctorStationAdviceAppService; import com.openhis.web.doctorstation.appservice.IDoctorStationAdviceAppService;
import com.openhis.web.doctorstation.dto.AdviceBaseDto; import com.openhis.web.doctorstation.dto.AdviceBaseDto;
import com.openhis.web.doctorstation.dto.AdviceSaveParam;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@@ -46,4 +44,15 @@ public class DoctorStationAdviceController {
iDoctorStationAdviceAppService.getAdviceBaseInfo(adviceBaseDto, searchKey, locationId, pageNo, pageSize)); iDoctorStationAdviceAppService.getAdviceBaseInfo(adviceBaseDto, searchKey, locationId, pageNo, pageSize));
} }
/**
* 门诊保存医嘱
*
* @param adviceSaveParam 医嘱表单信息
* @return 结果
*/
@PostMapping(value = "/save-advice")
public R<?> saveAdvice(@RequestBody AdviceSaveParam adviceSaveParam) {
return iDoctorStationAdviceAppService.saveAdvice(adviceSaveParam);
}
} }

View File

@@ -25,6 +25,10 @@ public class AdvicePriceDto {
@JsonSerialize(using = ToStringSerializer.class) @JsonSerialize(using = ToStringSerializer.class)
private Long definitionId; private Long definitionId;
/** 费用定价子表ID */
@JsonSerialize(using = ToStringSerializer.class)
private Long definitionDetailId;
/** 命中条件 */ /** 命中条件 */
private String conditionCode; private String conditionCode;

View File

@@ -1,9 +1,12 @@
package com.openhis.web.doctorstation.dto; package com.openhis.web.doctorstation.dto;
import java.math.BigDecimal;
import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.openhis.common.enums.EncounterClass; import com.openhis.common.enums.EncounterClass;
import com.openhis.common.enums.RequestStatus; import com.openhis.common.enums.RequestStatus;
import com.openhis.common.enums.TherapyTimeType;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
@@ -16,7 +19,7 @@ import lombok.experimental.Accessors;
public class AdviceSaveDto { public class AdviceSaveDto {
/** 医嘱类型 */ /** 医嘱类型 */
private String adviceType; // 1:药品 , 2: 耗材 , 3:项目 private Integer adviceType; // 1:药品 , 2: 耗材 , 3:项目
/** 执行次数 */ /** 执行次数 */
private Integer executeNum; // 当医嘱类型为药品时,选填 private Integer executeNum; // 当医嘱类型为药品时,选填
@@ -30,6 +33,17 @@ public class AdviceSaveDto {
/** 请求单位编码 */ /** 请求单位编码 */
private String unitCode; 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; private String lotNumber;
@@ -65,6 +79,21 @@ public class AdviceSaveDto {
@JsonSerialize(using = ToStringSerializer.class) @JsonSerialize(using = ToStringSerializer.class)
private Long encounterId; private Long encounterId;
/** 治疗类型 */
private Integer therapyEnum;
/** 用法 */
private String methodCode;
/** 用药频次 */
private String rateCode;
/** 单次剂量 */
private BigDecimal dose;
/** 剂量单位 */
private String doseUnitCode;
/** 组套id */ /** 组套id */
@JsonSerialize(using = ToStringSerializer.class) @JsonSerialize(using = ToStringSerializer.class)
private Long packageId; // 该参数先预留出来 private Long packageId; // 该参数先预留出来
@@ -79,6 +108,9 @@ public class AdviceSaveDto {
public AdviceSaveDto() { public AdviceSaveDto() {
this.statusEnum = RequestStatus.DRAFT.getValue(); this.statusEnum = RequestStatus.DRAFT.getValue();
this.categoryEnum = EncounterClass.AMB.getValue(); this.categoryEnum = EncounterClass.AMB.getValue();
this.therapyEnum = TherapyTimeType.TEMPORARY.getValue();
// TODO: 应该从当前登录账号获取参与者id,现在没有
// this.practitionerId
} }
} }

View File

@@ -48,7 +48,7 @@ public class InventoryManageAssembler {
// 收费项id供应物品id // 收费项id供应物品id
.setProductId(supplyItemDetailDto.getItemId()) .setProductId(supplyItemDetailDto.getItemId())
// 物品数量 // 物品数量
.setQuantityValue(supplyItemDetailDto.getItemQuantity().longValue()) .setQuantityValue(supplyItemDetailDto.getItemQuantity().intValue())
// 物品单位 // 物品单位
.setQuantityUnit(supplyItemDetailDto.getItemUnit()) .setQuantityUnit(supplyItemDetailDto.getItemUnit())
// 原价 // 原价

View File

@@ -162,6 +162,7 @@
<select id="getChildCharge" resultType="com.openhis.web.doctorstation.dto.AdvicePriceDto"> <select id="getChildCharge" resultType="com.openhis.web.doctorstation.dto.AdvicePriceDto">
SELECT SELECT
T1.definition_id, T1.definition_id,
T1.id AS definition_detail_id,
T2.charge_name, T2.charge_name,
T1.condition_value, T1.condition_value,
T1.condition_code, T1.condition_code,

View File

@@ -16,25 +16,25 @@ import lombok.Getter;
@AllArgsConstructor @AllArgsConstructor
public enum ChargeItemContext implements HisEnumInterface { public enum ChargeItemContext implements HisEnumInterface {
/**
* 采购
*/
PURCHASE(1, "1", "采购"),
/** /**
* 药品 * 药品
*/ */
MEDICATION(2, "2", "药品"), MEDICATION(1, "1", "药品"),
/** /**
* 耗材 * 耗材
*/ */
DEVICE(3, "3", "耗材"), DEVICE(2, "2", "耗材"),
/** /**
* 项目 * 项目
*/ */
ACTIVITY(4, "4", "项目"); ACTIVITY(3, "3", "项目"),
/**
* 采购
*/
PURCHASE(4, "4", "采购");
private final Integer value; private final Integer value;
private final String code; private final String code;

View File

@@ -18,9 +18,9 @@ import lombok.Getter;
public enum ItemType implements HisEnumInterface { public enum ItemType implements HisEnumInterface {
/** /**
* * 药
*/ */
MEDICINE(1, "1", ""), MEDICINE(1, "1", ""),
/** /**
* 耗材 * 耗材

View File

@@ -62,7 +62,7 @@ public class ChargeItem extends HisBaseEntity {
private Long costOrgId; private Long costOrgId;
/** 数量 */ /** 数量 */
private Long quantityValue; private Integer quantityValue;
/** 单位 */ /** 单位 */
private String quantityUnit; private String quantityUnit;

View File

@@ -29,7 +29,7 @@ public class MedicationRequest extends HisBaseEntity {
private Long id; private Long id;
/** 药品请求编码 */ /** 药品请求编码 */
private String bus_no; private String busNo;
/** 处方号 */ /** 处方号 */
private String prescriptionNo; private String prescriptionNo;

View File

@@ -35,7 +35,7 @@ public class DeviceRequest extends HisBaseEntity {
private String prescriptionNo; private String prescriptionNo;
/** 相关诊疗项目 */ /** 相关诊疗项目 */
private Integer activityId; private Long activityId;
/** 组套id */ /** 组套id */
private Long packageId; private Long packageId;

View File

@@ -62,7 +62,7 @@ public class ServiceRequest extends HisBaseEntity {
private Long activityId; private Long activityId;
/** 数量 */ /** 数量 */
private BigDecimal quantity; private Integer quantity;
/** 单位 */ /** 单位 */
private String unitCode; private String unitCode;