This commit is contained in:
Wang.Huan
2025-03-29 16:47:47 +08:00
parent aede79b80e
commit e6e6c9b3e7
5 changed files with 100 additions and 32 deletions

View File

@@ -1,11 +1,6 @@
package com.openhis.web.doctorstation.appservice.impl; package com.openhis.web.doctorstation.appservice.impl;
import java.math.BigDecimal; import java.util.*;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.annotation.Resource; import javax.annotation.Resource;
@@ -238,8 +233,9 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
// TODO: 药品分方;待做 // TODO: 药品分方;待做
prescriptionNo = assignSeqUtil.getSeq(AssignSeqEnum.PRESCRIPTION_NO.getPrefix(), 8); prescriptionNo = assignSeqUtil.getSeq(AssignSeqEnum.PRESCRIPTION_NO.getPrefix(), 8);
} }
// 声明费用项
ChargeItem chargeItem;
// 保存药品请求 // 保存药品请求
List<MedicationRequest> medicationRequestList = new ArrayList<>();
MedicationRequest medicationRequest; MedicationRequest medicationRequest;
for (AdviceSaveDto adviceSaveDto : medicineList) { for (AdviceSaveDto adviceSaveDto : medicineList) {
medicationRequest = new MedicationRequest(); medicationRequest = new MedicationRequest();
@@ -270,16 +266,40 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
medicationRequest.setRateCode(adviceSaveDto.getRateCode()); // 用药频次 medicationRequest.setRateCode(adviceSaveDto.getRateCode()); // 用药频次
medicationRequest.setDose(adviceSaveDto.getDose()); // 单次剂量 medicationRequest.setDose(adviceSaveDto.getDose()); // 单次剂量
medicationRequest.setDoseUnitCode(adviceSaveDto.getDoseUnitCode()); // 剂量单位 medicationRequest.setDoseUnitCode(adviceSaveDto.getDoseUnitCode()); // 剂量单位
medicationRequest.setDispensePerDuration(adviceSaveDto.getDispensePerDuration()); // 每次发药供应天数
medicationRequest.setSkinTestFlag(adviceSaveDto.getSkinTestFlag()); // 皮试标记 medicationRequest.setSkinTestFlag(adviceSaveDto.getSkinTestFlag()); // 皮试标记
medicationRequest.setGroupId(adviceSaveDto.getGroupId());// 分组id medicationRequest.setGroupId(adviceSaveDto.getGroupId());// 分组id
// medicationRequest.setPackageId(adviceSaveDto.getPackageId()); // medicationRequest.setPackageId(adviceSaveDto.getPackageId());
medicationRequestList.add(medicationRequest); iMedicationRequestService.save(medicationRequest);
// 保存药品费用项
chargeItem = new ChargeItem();
chargeItem.setStatusEnum(ChargeItemStatus.PLANNED.getValue()); // 默认-待收费
chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(medicationRequest.getBusNo()));
chargeItem.setPrescriptionNo(prescriptionNo); // 处方号
chargeItem.setPatientId(adviceSaveDto.getPatientId()); // 患者
chargeItem.setContextEnum(adviceSaveDto.getAdviceType()); // 类型
chargeItem.setEncounterId(adviceSaveDto.getEncounterId()); // 就诊id
chargeItem.setDefinitionId(adviceSaveDto.getDefinitionId()); // 费用定价ID
chargeItem.setDefDetailId(adviceSaveDto.getDefinitionDetailId()); // 定价子表主键
chargeItem.setEntererId(adviceSaveDto.getPractitionerId());// 开立人ID
chargeItem.setEnteredDate(new Date()); // 开立时间
chargeItem.setServiceTable("med_medication_request");// 医疗服务类型
chargeItem.setServiceId(medicationRequest.getId()); // 医疗服务ID
chargeItem.setProductTable(adviceSaveDto.getAdviceTableName());// 产品所在表
chargeItem.setProductId(adviceSaveDto.getAdviceDefinitionId());// 收费项id
chargeItem.setAccountId(adviceSaveDto.getAccountId());// 关联账户ID
chargeItem.setQuantityValue(adviceSaveDto.getQuantity()); // 数量
chargeItem.setQuantityUnit(adviceSaveDto.getUnitCode()); // 单位
chargeItem.setUnitPrice(adviceSaveDto.getUnitPrice()); // 单价
chargeItem.setTotalPrice(adviceSaveDto.getTotalPrice()); // 总价
iChargeItemService.save(chargeItem);
} }
iMedicationRequestService.saveBatch(medicationRequestList);
// 保存耗材请求 // 保存耗材请求
List<DeviceRequest> deviceRequestList = new ArrayList<>();
DeviceRequest deviceRequest; DeviceRequest deviceRequest;
for (AdviceSaveDto adviceSaveDto : deviceList) { for (AdviceSaveDto adviceSaveDto : deviceList) {
deviceRequest = new DeviceRequest(); deviceRequest = new DeviceRequest();
@@ -306,12 +326,35 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
// deviceRequest.setPackageId(adviceSaveDto.getPackageId()); // deviceRequest.setPackageId(adviceSaveDto.getPackageId());
// deviceRequest.setActivityId(adviceSaveDto.getActivityId()); // deviceRequest.setActivityId(adviceSaveDto.getActivityId());
deviceRequestList.add(deviceRequest); iDeviceRequestService.save(deviceRequest);
// 保存耗材费用项
chargeItem = new ChargeItem();
chargeItem.setStatusEnum(ChargeItemStatus.PLANNED.getValue()); // 默认-待收费
chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(deviceRequest.getBusNo()));
chargeItem.setPrescriptionNo(prescriptionNo); // 处方号
chargeItem.setPatientId(adviceSaveDto.getPatientId()); // 患者
chargeItem.setContextEnum(adviceSaveDto.getAdviceType()); // 类型
chargeItem.setEncounterId(adviceSaveDto.getEncounterId()); // 就诊id
chargeItem.setDefinitionId(adviceSaveDto.getDefinitionId()); // 费用定价ID
chargeItem.setDefDetailId(adviceSaveDto.getDefinitionDetailId()); // 定价子表主键
chargeItem.setEntererId(adviceSaveDto.getPractitionerId());// 开立人ID
chargeItem.setEnteredDate(new Date()); // 开立时间
chargeItem.setServiceTable("wor_device_request");// 医疗服务类型
chargeItem.setServiceId(deviceRequest.getId()); // 医疗服务ID
chargeItem.setProductTable(adviceSaveDto.getAdviceTableName());// 产品所在表
chargeItem.setProductId(adviceSaveDto.getAdviceDefinitionId());// 收费项id
chargeItem.setAccountId(adviceSaveDto.getAccountId());// 关联账户ID
chargeItem.setQuantityValue(adviceSaveDto.getQuantity()); // 数量
chargeItem.setQuantityUnit(adviceSaveDto.getUnitCode()); // 单位
chargeItem.setUnitPrice(adviceSaveDto.getUnitPrice()); // 单价
chargeItem.setTotalPrice(adviceSaveDto.getTotalPrice()); // 总价
iChargeItemService.save(chargeItem);
} }
iDeviceRequestService.saveBatch(deviceRequestList);
// 保存诊疗项目请求 // 保存诊疗项目请求
List<ServiceRequest> serviceRequestList = new ArrayList<>();
ServiceRequest serviceRequest; ServiceRequest serviceRequest;
for (AdviceSaveDto adviceSaveDto : activityList) { for (AdviceSaveDto adviceSaveDto : activityList) {
serviceRequest = new ServiceRequest(); serviceRequest = new ServiceRequest();
@@ -328,35 +371,34 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
serviceRequest.setRequesterId(adviceSaveDto.getPractitionerId()); // 开方医生 serviceRequest.setRequesterId(adviceSaveDto.getPractitionerId()); // 开方医生
serviceRequest.setEncounterId(adviceSaveDto.getEncounterId()); // 就诊id serviceRequest.setEncounterId(adviceSaveDto.getEncounterId()); // 就诊id
serviceRequestList.add(serviceRequest); iServiceRequestService.save(serviceRequest);
}
iServiceRequestService.saveBatch(serviceRequestList);
// 保存费用项管理 // 保存诊疗费用项
List<ChargeItem> chargeItemList = new ArrayList<>();
ChargeItem chargeItem;
for (AdviceSaveDto adviceSaveDto : adviceSaveList) {
chargeItem = new ChargeItem(); chargeItem = new ChargeItem();
chargeItem.setStatusEnum(ChargeItemStatus.PLANNED.getValue()); // 默认-收费 chargeItem.setStatusEnum(ChargeItemStatus.PLANNED.getValue()); // 默认-收费
chargeItem.setBusNo(assignSeqUtil.getSeq(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix(), 10)); chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(serviceRequest.getBusNo()));
chargeItem.setPrescriptionNo(prescriptionNo); // 处方号 chargeItem.setPrescriptionNo(prescriptionNo); // 处方号
chargeItem.setPatientId(adviceSaveDto.getPatientId()); // 患者 chargeItem.setPatientId(adviceSaveDto.getPatientId()); // 患者
chargeItem.setContextEnum(adviceSaveDto.getAdviceType()); // 类型 chargeItem.setContextEnum(adviceSaveDto.getAdviceType()); // 类型
chargeItem.setEncounterId(adviceSaveDto.getEncounterId()); // 诊疗定义id chargeItem.setEncounterId(adviceSaveDto.getEncounterId()); // 诊id
chargeItem.setDefinitionId(adviceSaveDto.getDefinitionId()); // 费用定价ID
chargeItem.setDefDetailId(adviceSaveDto.getDefinitionDetailId()); // 定价子表主键
chargeItem.setEntererId(adviceSaveDto.getPractitionerId());// 开立人ID
chargeItem.setEnteredDate(new Date()); // 开立时间
chargeItem.setServiceTable("wor_service_request");// 医疗服务类型
chargeItem.setServiceId(serviceRequest.getId()); // 医疗服务ID
chargeItem.setProductTable(adviceSaveDto.getAdviceTableName());// 产品所在表
chargeItem.setProductId(adviceSaveDto.getAdviceDefinitionId());// 收费项id
chargeItem.setAccountId(adviceSaveDto.getAccountId());// 关联账户ID
chargeItem.setQuantityValue(adviceSaveDto.getQuantity()); // 数量 chargeItem.setQuantityValue(adviceSaveDto.getQuantity()); // 数量
chargeItem.setQuantityUnit(adviceSaveDto.getUnitCode()); // 单位 chargeItem.setQuantityUnit(adviceSaveDto.getUnitCode()); // 单位
chargeItem.setUnitPrice(adviceSaveDto.getUnitPrice()); // 单价 chargeItem.setUnitPrice(adviceSaveDto.getUnitPrice()); // 单价
chargeItem chargeItem.setTotalPrice(adviceSaveDto.getTotalPrice()); // 总价
.setTotalPrice((new BigDecimal(adviceSaveDto.getQuantity()).multiply(adviceSaveDto.getUnitPrice()))
.setScale(4, RoundingMode.HALF_UP)); // 总价
chargeItem.setDefinitionId(adviceSaveDto.getDefinitionId()); // 费用定价ID iChargeItemService.save(chargeItem);
chargeItem.setDefDetailId(adviceSaveDto.getDefinitionDetailId()); // 定价子表主键
chargeItemList.add(chargeItem);
} }
iChargeItemService.saveBatch(chargeItemList);
// TODO: 此处调用请求发放接口 // TODO: 此处调用请求发放接口
return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"门诊医嘱"})); return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"门诊医嘱"}));

View File

@@ -53,6 +53,7 @@ public class DoctorStationMainAppServiceImpl implements IDoctorStationMainAppSer
// TODO: userId(当前登录账号ID) 和 currentUserOrganizationId(当前登录账号所属的科室ID) 待补充 // TODO: userId(当前登录账号ID) 和 currentUserOrganizationId(当前登录账号所属的科室ID) 待补充
// 当前登录账号ID // 当前登录账号ID
Long userId = SecurityUtils.getLoginUser().getUserId(); Long userId = SecurityUtils.getLoginUser().getUserId();
Long currentUserOrganizationId = SecurityUtils.getLoginUser().getOrgId();
IPage<PatientInfoDto> patientInfo = doctorStationMainAppMapper.getPatientInfo(new Page<>(pageNo, pageSize), IPage<PatientInfoDto> patientInfo = doctorStationMainAppMapper.getPatientInfo(new Page<>(pageNo, pageSize),
ParticipantType.ADMITTER.getCode(), ClinicalStatus.INACTIVE.getValue(), null, null, queryWrapper); ParticipantType.ADMITTER.getCode(), ClinicalStatus.INACTIVE.getValue(), null, null, queryWrapper);
patientInfo.getRecords().forEach(e -> { patientInfo.getRecords().forEach(e -> {

View File

@@ -42,12 +42,18 @@ public class AdviceSaveDto {
/** 请求数量 */ /** 请求数量 */
private Integer quantity; private Integer quantity;
/** 每次发药供应天数 */
private Integer dispensePerDuration;
/** 请求单位编码 */ /** 请求单位编码 */
private String unitCode; private String unitCode;
/** 单价 */ /** 单价 */
private BigDecimal unitPrice; private BigDecimal unitPrice;
/** 总价 */
private BigDecimal totalPrice;
/** 费用定价主表ID */ /** 费用定价主表ID */
@JsonSerialize(using = ToStringSerializer.class) @JsonSerialize(using = ToStringSerializer.class)
private Long definitionId; private Long definitionId;
@@ -71,6 +77,11 @@ public class AdviceSaveDto {
@JsonSerialize(using = ToStringSerializer.class) @JsonSerialize(using = ToStringSerializer.class)
private Long adviceDefinitionId; private Long adviceDefinitionId;
/**
* 医嘱对应表名
*/
private String adviceTableName;
/** 患者 */ /** 患者 */
@JsonSerialize(using = ToStringSerializer.class) @JsonSerialize(using = ToStringSerializer.class)
private Long patientId; private Long patientId;
@@ -95,6 +106,12 @@ public class AdviceSaveDto {
@JsonSerialize(using = ToStringSerializer.class) @JsonSerialize(using = ToStringSerializer.class)
private Long encounterId; private Long encounterId;
/**
* 账户id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long accountId;
/** /**
* 诊断ID * 诊断ID
*/ */

View File

@@ -27,6 +27,12 @@ public class PatientInfoDto {
@JsonSerialize(using = ToStringSerializer.class) @JsonSerialize(using = ToStringSerializer.class)
private Long patientId; private Long patientId;
/**
* 账户id
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long accountId;
/** /**
* 患者姓名 * 患者姓名
*/ */

View File

@@ -14,7 +14,8 @@
T10.phone, T10.phone,
T10.birth_date, T10.birth_date,
T10.status_enum, T10.status_enum,
T10.allergy_history_flag T10.allergy_history_flag,
T10.account_id
from from
( (
SELECT T1.tenant_id AS tenant_id, SELECT T1.tenant_id AS tenant_id,
@@ -24,6 +25,7 @@
T3.NAME AS healthcare_name, T3.NAME AS healthcare_name,
T5.user_id AS practitioner_user_id, T5.user_id AS practitioner_user_id,
T5.NAME AS practitioner_name, T5.NAME AS practitioner_name,
T6.id AS account_id,
T7.contract_name AS contract_name, T7.contract_name AS contract_name,
T8.ID AS patient_id, T8.ID AS patient_id,
T8.NAME AS patient_name, T8.NAME AS patient_name,