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 ba52ad2f..e67d7c54 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,11 +1,6 @@ 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; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; import javax.annotation.Resource; @@ -238,8 +233,9 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp // TODO: 药品分方;待做 prescriptionNo = assignSeqUtil.getSeq(AssignSeqEnum.PRESCRIPTION_NO.getPrefix(), 8); } + // 声明费用项 + ChargeItem chargeItem; // 保存药品请求 - List medicationRequestList = new ArrayList<>(); MedicationRequest medicationRequest; for (AdviceSaveDto adviceSaveDto : medicineList) { medicationRequest = new MedicationRequest(); @@ -270,16 +266,40 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp medicationRequest.setRateCode(adviceSaveDto.getRateCode()); // 用药频次 medicationRequest.setDose(adviceSaveDto.getDose()); // 单次剂量 medicationRequest.setDoseUnitCode(adviceSaveDto.getDoseUnitCode()); // 剂量单位 + medicationRequest.setDispensePerDuration(adviceSaveDto.getDispensePerDuration()); // 每次发药供应天数 medicationRequest.setSkinTestFlag(adviceSaveDto.getSkinTestFlag()); // 皮试标记 medicationRequest.setGroupId(adviceSaveDto.getGroupId());// 分组id // 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 deviceRequestList = new ArrayList<>(); DeviceRequest deviceRequest; for (AdviceSaveDto adviceSaveDto : deviceList) { deviceRequest = new DeviceRequest(); @@ -306,12 +326,35 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp // deviceRequest.setPackageId(adviceSaveDto.getPackageId()); // 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 serviceRequestList = new ArrayList<>(); ServiceRequest serviceRequest; for (AdviceSaveDto adviceSaveDto : activityList) { serviceRequest = new ServiceRequest(); @@ -328,35 +371,34 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp serviceRequest.setRequesterId(adviceSaveDto.getPractitionerId()); // 开方医生 serviceRequest.setEncounterId(adviceSaveDto.getEncounterId()); // 就诊id - serviceRequestList.add(serviceRequest); - } - iServiceRequestService.saveBatch(serviceRequestList); + iServiceRequestService.save(serviceRequest); - // 保存费用项管理 - 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(), 10)); + chargeItem.setStatusEnum(ChargeItemStatus.PLANNED.getValue()); // 默认-待收费 + chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(serviceRequest.getBusNo())); chargeItem.setPrescriptionNo(prescriptionNo); // 处方号 chargeItem.setPatientId(adviceSaveDto.getPatientId()); // 患者 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.setQuantityUnit(adviceSaveDto.getUnitCode()); // 单位 chargeItem.setUnitPrice(adviceSaveDto.getUnitPrice()); // 单价 - chargeItem - .setTotalPrice((new BigDecimal(adviceSaveDto.getQuantity()).multiply(adviceSaveDto.getUnitPrice())) - .setScale(4, RoundingMode.HALF_UP)); // 总价 + chargeItem.setTotalPrice(adviceSaveDto.getTotalPrice()); // 总价 - chargeItem.setDefinitionId(adviceSaveDto.getDefinitionId()); // 费用定价ID - chargeItem.setDefDetailId(adviceSaveDto.getDefinitionDetailId()); // 定价子表主键 - - chargeItemList.add(chargeItem); + iChargeItemService.save(chargeItem); } - iChargeItemService.saveBatch(chargeItemList); + // TODO: 此处调用请求发放接口 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/appservice/impl/DoctorStationMainAppServiceImpl.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationMainAppServiceImpl.java index 90408bb5..b78f4427 100644 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationMainAppServiceImpl.java +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationMainAppServiceImpl.java @@ -53,6 +53,7 @@ public class DoctorStationMainAppServiceImpl implements IDoctorStationMainAppSer // TODO: userId(当前登录账号ID) 和 currentUserOrganizationId(当前登录账号所属的科室ID) 待补充 // 当前登录账号ID Long userId = SecurityUtils.getLoginUser().getUserId(); + Long currentUserOrganizationId = SecurityUtils.getLoginUser().getOrgId(); IPage patientInfo = doctorStationMainAppMapper.getPatientInfo(new Page<>(pageNo, pageSize), ParticipantType.ADMITTER.getCode(), ClinicalStatus.INACTIVE.getValue(), null, null, queryWrapper); patientInfo.getRecords().forEach(e -> { 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 6b103f31..095278c8 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 @@ -42,12 +42,18 @@ public class AdviceSaveDto { /** 请求数量 */ private Integer quantity; + /** 每次发药供应天数 */ + private Integer dispensePerDuration; + /** 请求单位编码 */ private String unitCode; /** 单价 */ private BigDecimal unitPrice; + /** 总价 */ + private BigDecimal totalPrice; + /** 费用定价主表ID */ @JsonSerialize(using = ToStringSerializer.class) private Long definitionId; @@ -71,6 +77,11 @@ public class AdviceSaveDto { @JsonSerialize(using = ToStringSerializer.class) private Long adviceDefinitionId; + /** + * 医嘱对应表名 + */ + private String adviceTableName; + /** 患者 */ @JsonSerialize(using = ToStringSerializer.class) private Long patientId; @@ -95,6 +106,12 @@ public class AdviceSaveDto { @JsonSerialize(using = ToStringSerializer.class) private Long encounterId; + /** + * 账户id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long accountId; + /** * 诊断ID */ diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/PatientInfoDto.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/PatientInfoDto.java index 7b6bf160..e547ac23 100644 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/PatientInfoDto.java +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/PatientInfoDto.java @@ -27,6 +27,12 @@ public class PatientInfoDto { @JsonSerialize(using = ToStringSerializer.class) private Long patientId; + /** + * 账户id + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long accountId; + /** * 患者姓名 */ diff --git a/openhis-server/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationMainAppMapper.xml b/openhis-server/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationMainAppMapper.xml index 057d3474..029636f8 100644 --- a/openhis-server/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationMainAppMapper.xml +++ b/openhis-server/openhis-application/src/main/resources/mapper/doctorstation/DoctorStationMainAppMapper.xml @@ -14,7 +14,8 @@ T10.phone, T10.birth_date, T10.status_enum, - T10.allergy_history_flag + T10.allergy_history_flag, + T10.account_id from ( SELECT T1.tenant_id AS tenant_id, @@ -24,6 +25,7 @@ T3.NAME AS healthcare_name, T5.user_id AS practitioner_user_id, T5.NAME AS practitioner_name, + T6.id AS account_id, T7.contract_name AS contract_name, T8.ID AS patient_id, T8.NAME AS patient_name,