保存医嘱
This commit is contained in:
@@ -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<AdviceBaseDto> getAdviceBaseInfo(AdviceBaseDto adviceBaseDto, String searchKey, Long locationId,
|
||||
Integer pageNo, Integer pageSize);
|
||||
|
||||
/**
|
||||
* 门诊保存医嘱
|
||||
*
|
||||
* @param adviceSaveParam 医嘱表单信息
|
||||
* @return 结果
|
||||
*/
|
||||
R<?> saveAdvice(AdviceSaveParam adviceSaveParam);
|
||||
|
||||
}
|
||||
|
||||
@@ -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<AdviceInventoryDto> adviceInventory = doctorStationAdviceAppMapper.getAdviceInventory(locationId,
|
||||
adviceDefinitionIdList, CommonConstants.SqlCondition.ABOUT_INVENTORY_TABLE_STR);
|
||||
// TODO: 预减库存待处理
|
||||
|
||||
// 费用定价子表信息
|
||||
List<AdvicePriceDto> 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<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[] {"门诊医嘱"}));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ public class InventoryManageAssembler {
|
||||
// 收费项id:供应物品id
|
||||
.setProductId(supplyItemDetailDto.getItemId())
|
||||
// 物品数量
|
||||
.setQuantityValue(supplyItemDetailDto.getItemQuantity().longValue())
|
||||
.setQuantityValue(supplyItemDetailDto.getItemQuantity().intValue())
|
||||
// 物品单位
|
||||
.setQuantityUnit(supplyItemDetailDto.getItemUnit())
|
||||
// 原价
|
||||
|
||||
@@ -162,6 +162,7 @@
|
||||
<select id="getChildCharge" resultType="com.openhis.web.doctorstation.dto.AdvicePriceDto">
|
||||
SELECT
|
||||
T1.definition_id,
|
||||
T1.id AS definition_detail_id,
|
||||
T2.charge_name,
|
||||
T1.condition_value,
|
||||
T1.condition_code,
|
||||
|
||||
@@ -16,25 +16,25 @@ import lombok.Getter;
|
||||
@AllArgsConstructor
|
||||
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 String code;
|
||||
|
||||
@@ -18,9 +18,9 @@ import lombok.Getter;
|
||||
public enum ItemType implements HisEnumInterface {
|
||||
|
||||
/**
|
||||
* 中药
|
||||
* 药品
|
||||
*/
|
||||
MEDICINE(1, "1", "中药"),
|
||||
MEDICINE(1, "1", "药品"),
|
||||
|
||||
/**
|
||||
* 耗材
|
||||
|
||||
@@ -62,7 +62,7 @@ public class ChargeItem extends HisBaseEntity {
|
||||
private Long costOrgId;
|
||||
|
||||
/** 数量 */
|
||||
private Long quantityValue;
|
||||
private Integer quantityValue;
|
||||
|
||||
/** 单位 */
|
||||
private String quantityUnit;
|
||||
|
||||
@@ -29,7 +29,7 @@ public class MedicationRequest extends HisBaseEntity {
|
||||
private Long id;
|
||||
|
||||
/** 药品请求编码 */
|
||||
private String bus_no;
|
||||
private String busNo;
|
||||
|
||||
/** 处方号 */
|
||||
private String prescriptionNo;
|
||||
|
||||
@@ -35,7 +35,7 @@ public class DeviceRequest extends HisBaseEntity {
|
||||
private String prescriptionNo;
|
||||
|
||||
/** 相关诊疗项目 */
|
||||
private Integer activityId;
|
||||
private Long activityId;
|
||||
|
||||
/** 组套id */
|
||||
private Long packageId;
|
||||
|
||||
@@ -62,7 +62,7 @@ public class ServiceRequest extends HisBaseEntity {
|
||||
private Long activityId;
|
||||
|
||||
/** 数量 */
|
||||
private BigDecimal quantity;
|
||||
private Integer quantity;
|
||||
|
||||
/** 单位 */
|
||||
private String unitCode;
|
||||
|
||||
Reference in New Issue
Block a user